vendor: 78 bytes, lines 1-3
1/******/ (() => { // webpackBootstrap 2/******/ var __webpack_modules__ = ({ 3
vendor: 198,400 bytes, lines 4-5067
4/***/ "./node_modules/@remix-run/router/dist/router.js": 5/*!*******************************************************!*\ 6 !*** ./node_modules/@remix-run/router/dist/router.js ***! 7 \*******************************************************/ 8/***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => { 9 10"use strict"; 11__webpack_require__.r(__webpack_exports__); 12/* harmony export */ __webpack_require__.d(__webpack_exports__, { 13/* harmony export */ AbortedDeferredError: () => (/* binding */ AbortedDeferredError), 14/* harmony export */ Action: () => (/* binding */ Action), 15/* harmony export */ IDLE_BLOCKER: () => (/* binding */ IDLE_BLOCKER), 16/* harmony export */ IDLE_FETCHER: () => (/* binding */ IDLE_FETCHER), 17/* harmony export */ IDLE_NAVIGATION: () => (/* binding */ IDLE_NAVIGATION), 18/* harmony export */ UNSAFE_DEFERRED_SYMBOL: () => (/* binding */ UNSAFE_DEFERRED_SYMBOL), 19/* harmony export */ UNSAFE_DeferredData: () => (/* binding */ DeferredData), 20/* harmony export */ UNSAFE_ErrorResponseImpl: () => (/* binding */ ErrorResponseImpl), 21/* harmony export */ UNSAFE_convertRouteMatchToUiMatch: () => (/* binding */ convertRouteMatchToUiMatch), 22/* harmony export */ UNSAFE_convertRoutesToDataRoutes: () => (/* binding */ convertRoutesToDataRoutes), 23/* harmony export */ UNSAFE_decodePath: () => (/* binding */ decodePath), 24/* harmony export */ UNSAFE_getResolveToMatches: () => (/* binding */ getResolveToMatches), 25/* harmony export */ UNSAFE_invariant: () => (/* binding */ invariant), 26/* harmony export */ UNSAFE_warning: () => (/* binding */ warning), 27/* harmony export */ createBrowserHistory: () => (/* binding */ createBrowserHistory), 28/* harmony export */ createHashHistory: () => (/* binding */ createHashHistory), 29/* harmony export */ createMemoryHistory: () => (/* binding */ createMemoryHistory), 30/* harmony export */ createPath: () => (/* binding */ createPath), 31/* harmony export */ createRouter: () => (/* binding */ createRouter), 32/* harmony export */ createStaticHandler: () => (/* binding */ createStaticHandler), 33/* harmony export */ data: () => (/* binding */ data), 34/* harmony export */ defer: () => (/* binding */ defer), 35/* harmony export */ generatePath: () => (/* binding */ generatePath), 36/* harmony export */ getStaticContextFromError: () => (/* binding */ getStaticContextFromError), 37/* harmony export */ getToPathname: () => (/* binding */ getToPathname), 38/* harmony export */ isDataWithResponseInit: () => (/* binding */ isDataWithResponseInit), 39/* harmony export */ isDeferredData: () => (/* binding */ isDeferredData), 40/* harmony export */ isRouteErrorResponse: () => (/* binding */ isRouteErrorResponse), 41/* harmony export */ joinPaths: () => (/* binding */ joinPaths), 42/* harmony export */ json: () => (/* binding */ json), 43/* harmony export */ matchPath: () => (/* binding */ matchPath), 44/* harmony export */ matchRoutes: () => (/* binding */ matchRoutes), 45/* harmony export */ normalizePathname: () => (/* binding */ normalizePathname), 46/* harmony export */ parsePath: () => (/* binding */ parsePath), 47/* harmony export */ redirect: () => (/* binding */ redirect), 48/* harmony export */ redirectDocument: () => (/* binding */ redirectDocument), 49/* harmony export */ replace: () => (/* binding */ replace), 50/* harmony export */ resolvePath: () => (/* binding */ resolvePath), 51/* harmony export */ resolveTo: () => (/* binding */ resolveTo), 52/* harmony export */ stripBasename: () => (/* binding */ stripBasename) 53/* harmony export */ }); 54/** 55 * @remix-run/router v1.21.0 56 * 57 * Copyright (c) Remix Software Inc. 58 * 59 * This source code is licensed under the MIT license found in the 60 * LICENSE.md file in the root directory of this source tree. 61 * 62 * @license MIT 63 */ 64function _extends() { 65 _extends = Object.assign ? Object.assign.bind() : function (target) { 66 for (var i = 1; i < arguments.length; i++) { 67 var source = arguments[i]; 68 for (var key in source) { 69 if (Object.prototype.hasOwnProperty.call(source, key)) { 70 target[key] = source[key]; 71 } 72 } 73 } 74 return target; 75 }; 76 return _extends.apply(this, arguments); 77} 78 79//////////////////////////////////////////////////////////////////////////////// 80//#region Types and Constants 81//////////////////////////////////////////////////////////////////////////////// 82/** 83 * Actions represent the type of change to a location value. 84 */ 85var Action; 86(function (Action) { 87 /** 88 * A POP indicates a change to an arbitrary index in the history stack, such 89 * as a back or forward navigation. It does not describe the direction of the 90 * navigation, only that the current index changed. 91 * 92 * Note: This is the default action for newly created history objects. 93 */ 94 Action["Pop"] = "POP"; 95 /** 96 * A PUSH indicates a new entry being added to the history stack, such as when 97 * a link is clicked and a new page loads. When this happens, all subsequent 98 * entries in the stack are lost. 99 */ 100 Action["Push"] = "PUSH"; 101 /** 102 * A REPLACE indicates the entry at the current index in the history stack 103 * being replaced by a new one. 104 */ 105 Action["Replace"] = "REPLACE"; 106})(Action || (Action = {})); 107const PopStateEventType = "popstate"; 108/** 109 * Memory history stores the current location in memory. It is designed for use 110 * in stateful non-browser environments like tests and React Native. 111 */ 112function createMemoryHistory(options) { 113 if (options === void 0) { 114 options = {}; 115 } 116 let { 117 initialEntries = ["/"], 118 initialIndex, 119 v5Compat = false 120 } = options; 121 let entries; // Declare so we can access from createMemoryLocation 122 entries = initialEntries.map((entry, index) => createMemoryLocation(entry, typeof entry === "string" ? null : entry.state, index === 0 ? "default" : undefined)); 123 let index = clampIndex(initialIndex == null ? entries.length - 1 : initialIndex); 124 let action = Action.Pop; 125 let listener = null; 126 function clampIndex(n) { 127 return Math.min(Math.max(n, 0), entries.length - 1); 128 } 129 function getCurrentLocation() { 130 return entries[index]; 131 } 132 function createMemoryLocation(to, state, key) { 133 if (state === void 0) { 134 state = null; 135 } 136 let location = createLocation(entries ? getCurrentLocation().pathname : "/", to, state, key); 137 warning(location.pathname.charAt(0) === "/", "relative pathnames are not supported in memory history: " + JSON.stringify(to)); 138 return location; 139 } 140 function createHref(to) { 141 return typeof to === "string" ? to : createPath(to); 142 } 143 let history = { 144 get index() { 145 return index; 146 }, 147 get action() { 148 return action; 149 }, 150 get location() { 151 return getCurrentLocation(); 152 }, 153 createHref, 154 createURL(to) { 155 return new URL(createHref(to), "http://localhost"); 156 }, 157 encodeLocation(to) { 158 let path = typeof to === "string" ? parsePath(to) : to; 159 return { 160 pathname: path.pathname || "", 161 search: path.search || "", 162 hash: path.hash || "" 163 }; 164 }, 165 push(to, state) { 166 action = Action.Push; 167 let nextLocation = createMemoryLocation(to, state); 168 index += 1; 169 entries.splice(index, entries.length, nextLocation); 170 if (v5Compat && listener) { 171 listener({ 172 action, 173 location: nextLocation, 174 delta: 1 175 }); 176 } 177 }, 178 replace(to, state) { 179 action = Action.Replace; 180 let nextLocation = createMemoryLocation(to, state); 181 entries[index] = nextLocation; 182 if (v5Compat && listener) { 183 listener({ 184 action, 185 location: nextLocation, 186 delta: 0 187 }); 188 } 189 }, 190 go(delta) { 191 action = Action.Pop; 192 let nextIndex = clampIndex(index + delta); 193 let nextLocation = entries[nextIndex]; 194 index = nextIndex; 195 if (listener) { 196 listener({ 197 action, 198 location: nextLocation, 199 delta 200 }); 201 } 202 }, 203 listen(fn) { 204 listener = fn; 205 return () => { 206 listener = null; 207 }; 208 } 209 }; 210 return history; 211} 212/** 213 * Browser history stores the location in regular URLs. This is the standard for 214 * most web apps, but it requires some configuration on the server to ensure you 215 * serve the same app at multiple URLs. 216 * 217 * @see https://github.com/remix-run/history/tree/main/docs/api-reference.md#createbrowserhistory 218 */ 219function createBrowserHistory(options) { 220 if (options === void 0) { 221 options = {}; 222 } 223 function createBrowserLocation(window, globalHistory) { 224 let { 225 pathname, 226 search, 227 hash 228 } = window.location; 229 return createLocation("", { 230 pathname, 231 search, 232 hash 233 }, 234 // state defaults to `null` because `window.history.state` does 235 globalHistory.state && globalHistory.state.usr || null, globalHistory.state && globalHistory.state.key || "default"); 236 } 237 function createBrowserHref(window, to) { 238 return typeof to === "string" ? to : createPath(to); 239 } 240 return getUrlBasedHistory(createBrowserLocation, createBrowserHref, null, options); 241} 242/** 243 * Hash history stores the location in window.location.hash. This makes it ideal 244 * for situations where you don't want to send the location to the server for 245 * some reason, either because you do cannot configure it or the URL space is 246 * reserved for something else. 247 * 248 * @see https://github.com/remix-run/history/tree/main/docs/api-reference.md#createhashhistory 249 */ 250function createHashHistory(options) { 251 if (options === void 0) { 252 options = {}; 253 } 254 function createHashLocation(window, globalHistory) { 255 let { 256 pathname = "/", 257 search = "", 258 hash = "" 259 } = parsePath(window.location.hash.substr(1)); 260 // Hash URL should always have a leading / just like window.location.pathname 261 // does, so if an app ends up at a route like /#something then we add a 262 // leading slash so all of our path-matching behaves the same as if it would 263 // in a browser router. This is particularly important when there exists a 264 // root splat route (<Route path="*">) since that matches internally against 265 // "/*" and we'd expect /#something to 404 in a hash router app. 266 if (!pathname.startsWith("/") && !pathname.startsWith(".")) { 267 pathname = "/" + pathname; 268 } 269 return createLocation("", { 270 pathname, 271 search, 272 hash 273 }, 274 // state defaults to `null` because `window.history.state` does 275 globalHistory.state && globalHistory.state.usr || null, globalHistory.state && globalHistory.state.key || "default"); 276 } 277 function createHashHref(window, to) { 278 let base = window.document.querySelector("base"); 279 let href = ""; 280 if (base && base.getAttribute("href")) { 281 let url = window.location.href; 282 let hashIndex = url.indexOf("#"); 283 href = hashIndex === -1 ? url : url.slice(0, hashIndex); 284 } 285 return href + "#" + (typeof to === "string" ? to : createPath(to)); 286 } 287 function validateHashLocation(location, to) { 288 warning(location.pathname.charAt(0) === "/", "relative pathnames are not supported in hash history.push(" + JSON.stringify(to) + ")"); 289 } 290 return getUrlBasedHistory(createHashLocation, createHashHref, validateHashLocation, options); 291} 292function invariant(value, message) { 293 if (value === false || value === null || typeof value === "undefined") { 294 throw new Error(message); 295 } 296} 297function warning(cond, message) { 298 if (!cond) { 299 // eslint-disable-next-line no-console 300 if (typeof console !== "undefined") console.warn(message); 301 try { 302 // Welcome to debugging history! 303 // 304 // This error is thrown as a convenience, so you can more easily 305 // find the source for a warning that appears in the console by 306 // enabling "pause on exceptions" in your JavaScript debugger. 307 throw new Error(message); 308 // eslint-disable-next-line no-empty 309 } catch (e) {} 310 } 311} 312function createKey() { 313 return Math.random().toString(36).substr(2, 8); 314} 315/** 316 * For browser-based histories, we combine the state and key into an object 317 */ 318function getHistoryState(location, index) { 319 return { 320 usr: location.state, 321 key: location.key, 322 idx: index 323 }; 324} 325/** 326 * Creates a Location object with a unique key from the given Path 327 */ 328function createLocation(current, to, state, key) { 329 if (state === void 0) { 330 state = null; 331 } 332 let location = _extends({ 333 pathname: typeof current === "string" ? current : current.pathname, 334 search: "", 335 hash: "" 336 }, typeof to === "string" ? parsePath(to) : to, { 337 state, 338 // TODO: This could be cleaned up. push/replace should probably just take 339 // full Locations now and avoid the need to run through this flow at all 340 // But that's a pretty big refactor to the current test suite so going to 341 // keep as is for the time being and just let any incoming keys take precedence 342 key: to && to.key || key || createKey() 343 }); 344 return location; 345} 346/** 347 * Creates a string URL path from the given pathname, search, and hash components. 348 */ 349function createPath(_ref) { 350 let { 351 pathname = "/", 352 search = "", 353 hash = "" 354 } = _ref; 355 if (search && search !== "?") pathname += search.charAt(0) === "?" ? search : "?" + search; 356 if (hash && hash !== "#") pathname += hash.charAt(0) === "#" ? hash : "#" + hash; 357 return pathname; 358} 359/** 360 * Parses a string URL path into its separate pathname, search, and hash components. 361 */ 362function parsePath(path) { 363 let parsedPath = {}; 364 if (path) { 365 let hashIndex = path.indexOf("#"); 366 if (hashIndex >= 0) { 367 parsedPath.hash = path.substr(hashIndex); 368 path = path.substr(0, hashIndex); 369 } 370 let searchIndex = path.indexOf("?"); 371 if (searchIndex >= 0) { 372 parsedPath.search = path.substr(searchIndex); 373 path = path.substr(0, searchIndex); 374 } 375 if (path) { 376 parsedPath.pathname = path; 377 } 378 } 379 return parsedPath; 380} 381function getUrlBasedHistory(getLocation, createHref, validateLocation, options) { 382 if (options === void 0) { 383 options = {}; 384 } 385 let { 386 window = document.defaultView, 387 v5Compat = false 388 } = options; 389 let globalHistory = window.history; 390 let action = Action.Pop; 391 let listener = null; 392 let index = getIndex(); 393 // Index should only be null when we initialize. If not, it's because the 394 // user called history.pushState or history.replaceState directly, in which 395 // case we should log a warning as it will result in bugs. 396 if (index == null) { 397 index = 0; 398 globalHistory.replaceState(_extends({}, globalHistory.state, { 399 idx: index 400 }), ""); 401 } 402 function getIndex() { 403 let state = globalHistory.state || { 404 idx: null 405 }; 406 return state.idx; 407 } 408 function handlePop() { 409 action = Action.Pop; 410 let nextIndex = getIndex(); 411 let delta = nextIndex == null ? null : nextIndex - index; 412 index = nextIndex; 413 if (listener) { 414 listener({ 415 action, 416 location: history.location, 417 delta 418 }); 419 } 420 } 421 function push(to, state) { 422 action = Action.Push; 423 let location = createLocation(history.location, to, state); 424 if (validateLocation) validateLocation(location, to); 425 index = getIndex() + 1; 426 let historyState = getHistoryState(location, index); 427 let url = history.createHref(location); 428 // try...catch because iOS limits us to 100 pushState calls :/ 429 try { 430 globalHistory.pushState(historyState, "", url); 431 } catch (error) { 432 // If the exception is because `state` can't be serialized, let that throw 433 // outwards just like a replace call would so the dev knows the cause 434 // https://html.spec.whatwg.org/multipage/nav-history-apis.html#shared-history-push/replace-state-steps 435 // https://html.spec.whatwg.org/multipage/structured-data.html#structuredserializeinternal 436 if (error instanceof DOMException && error.name === "DataCloneError") { 437 throw error; 438 } 439 // They are going to lose state here, but there is no real 440 // way to warn them about it since the page will refresh... 441 window.location.assign(url); 442 } 443 if (v5Compat && listener) { 444 listener({ 445 action, 446 location: history.location, 447 delta: 1 448 }); 449 } 450 } 451 function replace(to, state) { 452 action = Action.Replace; 453 let location = createLocation(history.location, to, state); 454 if (validateLocation) validateLocation(location, to); 455 index = getIndex(); 456 let historyState = getHistoryState(location, index); 457 let url = history.createHref(location); 458 globalHistory.replaceState(historyState, "", url); 459 if (v5Compat && listener) { 460 listener({ 461 action, 462 location: history.location, 463 delta: 0 464 }); 465 } 466 } 467 function createURL(to) { 468 // window.location.origin is "null" (the literal string value) in Firefox 469 // under certain conditions, notably when serving from a local HTML file 470 // See https://bugzilla.mozilla.org/show_bug.cgi?id=878297 471 let base = window.location.origin !== "null" ? window.location.origin : window.location.href; 472 let href = typeof to === "string" ? to : createPath(to); 473 // Treating this as a full URL will strip any trailing spaces so we need to 474 // pre-encode them since they might be part of a matching splat param from 475 // an ancestor route 476 href = href.replace(/ $/, "%20"); 477 invariant(base, "No window.location.(origin|href) available to create URL for href: " + href); 478 return new URL(href, base); 479 } 480 let history = { 481 get action() { 482 return action; 483 }, 484 get location() { 485 return getLocation(window, globalHistory); 486 }, 487 listen(fn) { 488 if (listener) { 489 throw new Error("A history only accepts one active listener"); 490 } 491 window.addEventListener(PopStateEventType, handlePop); 492 listener = fn; 493 return () => { 494 window.removeEventListener(PopStateEventType, handlePop); 495 listener = null; 496 }; 497 }, 498 createHref(to) { 499 return createHref(window, to); 500 }, 501 createURL, 502 encodeLocation(to) { 503 // Encode a Location the same way window.location would 504 let url = createURL(to); 505 return { 506 pathname: url.pathname, 507 search: url.search, 508 hash: url.hash 509 }; 510 }, 511 push, 512 replace, 513 go(n) { 514 return globalHistory.go(n); 515 } 516 }; 517 return history; 518} 519//#endregion 520 521var ResultType; 522(function (ResultType) { 523 ResultType["data"] = "data"; 524 ResultType["deferred"] = "deferred"; 525 ResultType["redirect"] = "redirect"; 526 ResultType["error"] = "error"; 527})(ResultType || (ResultType = {})); 528const immutableRouteKeys = new Set(["lazy", "caseSensitive", "path", "id", "index", "children"]); 529function isIndexRoute(route) { 530 return route.index === true; 531} 532// Walk the route tree generating unique IDs where necessary, so we are working 533// solely with AgnosticDataRouteObject's within the Router 534function convertRoutesToDataRoutes(routes, mapRouteProperties, parentPath, manifest) { 535 if (parentPath === void 0) { 536 parentPath = []; 537 } 538 if (manifest === void 0) { 539 manifest = {}; 540 } 541 return routes.map((route, index) => { 542 let treePath = [...parentPath, String(index)]; 543 let id = typeof route.id === "string" ? route.id : treePath.join("-"); 544 invariant(route.index !== true || !route.children, "Cannot specify children on an index route"); 545 invariant(!manifest[id], "Found a route id collision on id \"" + id + "\". Route " + "id's must be globally unique within Data Router usages"); 546 if (isIndexRoute(route)) { 547 let indexRoute = _extends({}, route, mapRouteProperties(route), { 548 id 549 }); 550 manifest[id] = indexRoute; 551 return indexRoute; 552 } else { 553 let pathOrLayoutRoute = _extends({}, route, mapRouteProperties(route), { 554 id, 555 children: undefined 556 }); 557 manifest[id] = pathOrLayoutRoute; 558 if (route.children) { 559 pathOrLayoutRoute.children = convertRoutesToDataRoutes(route.children, mapRouteProperties, treePath, manifest); 560 } 561 return pathOrLayoutRoute; 562 } 563 }); 564} 565/** 566 * Matches the given routes to a location and returns the match data. 567 * 568 * @see https://reactrouter.com/v6/utils/match-routes 569 */ 570function matchRoutes(routes, locationArg, basename) { 571 if (basename === void 0) { 572 basename = "/"; 573 } 574 return matchRoutesImpl(routes, locationArg, basename, false); 575} 576function matchRoutesImpl(routes, locationArg, basename, allowPartial) { 577 let location = typeof locationArg === "string" ? parsePath(locationArg) : locationArg; 578 let pathname = stripBasename(location.pathname || "/", basename); 579 if (pathname == null) { 580 return null; 581 } 582 let branches = flattenRoutes(routes); 583 rankRouteBranches(branches); 584 let matches = null; 585 for (let i = 0; matches == null && i < branches.length; ++i) { 586 // Incoming pathnames are generally encoded from either window.location 587 // or from router.navigate, but we want to match against the unencoded 588 // paths in the route definitions. Memory router locations won't be 589 // encoded here but there also shouldn't be anything to decode so this 590 // should be a safe operation. This avoids needing matchRoutes to be 591 // history-aware. 592 let decoded = decodePath(pathname); 593 matches = matchRouteBranch(branches[i], decoded, allowPartial); 594 } 595 return matches; 596} 597function convertRouteMatchToUiMatch(match, loaderData) { 598 let { 599 route, 600 pathname, 601 params 602 } = match; 603 return { 604 id: route.id, 605 pathname, 606 params, 607 data: loaderData[route.id], 608 handle: route.handle 609 }; 610} 611function flattenRoutes(routes, branches, parentsMeta, parentPath) { 612 if (branches === void 0) { 613 branches = []; 614 } 615 if (parentsMeta === void 0) { 616 parentsMeta = []; 617 } 618 if (parentPath === void 0) { 619 parentPath = ""; 620 } 621 let flattenRoute = (route, index, relativePath) => { 622 let meta = { 623 relativePath: relativePath === undefined ? route.path || "" : relativePath, 624 caseSensitive: route.caseSensitive === true, 625 childrenIndex: index, 626 route 627 }; 628 if (meta.relativePath.startsWith("/")) { 629 invariant(meta.relativePath.startsWith(parentPath), "Absolute route path \"" + meta.relativePath + "\" nested under path " + ("\"" + parentPath + "\" is not valid. An absolute child route path ") + "must start with the combined path of all its parent routes."); 630 meta.relativePath = meta.relativePath.slice(parentPath.length); 631 } 632 let path = joinPaths([parentPath, meta.relativePath]); 633 let routesMeta = parentsMeta.concat(meta); 634 // Add the children before adding this route to the array, so we traverse the 635 // route tree depth-first and child routes appear before their parents in 636 // the "flattened" version. 637 if (route.children && route.children.length > 0) { 638 invariant( 639 // Our types know better, but runtime JS may not! 640 // @ts-expect-error 641 route.index !== true, "Index routes must not have child routes. Please remove " + ("all child routes from route path \"" + path + "\".")); 642 flattenRoutes(route.children, branches, routesMeta, path); 643 } 644 // Routes without a path shouldn't ever match by themselves unless they are 645 // index routes, so don't add them to the list of possible branches. 646 if (route.path == null && !route.index) { 647 return; 648 } 649 branches.push({ 650 path, 651 score: computeScore(path, route.index), 652 routesMeta 653 }); 654 }; 655 routes.forEach((route, index) => { 656 var _route$path; 657 // coarse-grain check for optional params 658 if (route.path === "" || !((_route$path = route.path) != null && _route$path.includes("?"))) { 659 flattenRoute(route, index); 660 } else { 661 for (let exploded of explodeOptionalSegments(route.path)) { 662 flattenRoute(route, index, exploded); 663 } 664 } 665 }); 666 return branches; 667} 668/** 669 * Computes all combinations of optional path segments for a given path, 670 * excluding combinations that are ambiguous and of lower priority. 671 * 672 * For example, `/one/:two?/three/:four?/:five?` explodes to: 673 * - `/one/three` 674 * - `/one/:two/three` 675 * - `/one/three/:four` 676 * - `/one/three/:five` 677 * - `/one/:two/three/:four` 678 * - `/one/:two/three/:five` 679 * - `/one/three/:four/:five` 680 * - `/one/:two/three/:four/:five` 681 */ 682function explodeOptionalSegments(path) { 683 let segments = path.split("/"); 684 if (segments.length === 0) return []; 685 let [first, ...rest] = segments; 686 // Optional path segments are denoted by a trailing `?` 687 let isOptional = first.endsWith("?"); 688 // Compute the corresponding required segment: `foo?` -> `foo` 689 let required = first.replace(/\?$/, ""); 690 if (rest.length === 0) { 691 // Intepret empty string as omitting an optional segment 692 // `["one", "", "three"]` corresponds to omitting `:two` from `/one/:two?/three` -> `/one/three` 693 return isOptional ? [required, ""] : [required]; 694 } 695 let restExploded = explodeOptionalSegments(rest.join("/")); 696 let result = []; 697 // All child paths with the prefix. Do this for all children before the 698 // optional version for all children, so we get consistent ordering where the 699 // parent optional aspect is preferred as required. Otherwise, we can get 700 // child sections interspersed where deeper optional segments are higher than 701 // parent optional segments, where for example, /:two would explode _earlier_ 702 // then /:one. By always including the parent as required _for all children_ 703 // first, we avoid this issue 704 result.push(...restExploded.map(subpath => subpath === "" ? required : [required, subpath].join("/"))); 705 // Then, if this is an optional value, add all child versions without 706 if (isOptional) { 707 result.push(...restExploded); 708 } 709 // for absolute paths, ensure `/` instead of empty segment 710 return result.map(exploded => path.startsWith("/") && exploded === "" ? "/" : exploded); 711} 712function rankRouteBranches(branches) { 713 branches.sort((a, b) => a.score !== b.score ? b.score - a.score // Higher score first 714 : compareIndexes(a.routesMeta.map(meta => meta.childrenIndex), b.routesMeta.map(meta => meta.childrenIndex))); 715} 716const paramRe = /^:[\w-]+$/; 717const dynamicSegmentValue = 3; 718const indexRouteValue = 2; 719const emptySegmentValue = 1; 720const staticSegmentValue = 10; 721const splatPenalty = -2; 722const isSplat = s => s === "*"; 723function computeScore(path, index) { 724 let segments = path.split("/"); 725 let initialScore = segments.length; 726 if (segments.some(isSplat)) { 727 initialScore += splatPenalty; 728 } 729 if (index) { 730 initialScore += indexRouteValue; 731 } 732 return segments.filter(s => !isSplat(s)).reduce((score, segment) => score + (paramRe.test(segment) ? dynamicSegmentValue : segment === "" ? emptySegmentValue : staticSegmentValue), initialScore); 733} 734function compareIndexes(a, b) { 735 let siblings = a.length === b.length && a.slice(0, -1).every((n, i) => n === b[i]); 736 return siblings ? 737 // If two routes are siblings, we should try to match the earlier sibling 738 // first. This allows people to have fine-grained control over the matching 739 // behavior by simply putting routes with identical paths in the order they 740 // want them tried. 741 a[a.length - 1] - b[b.length - 1] : 742 // Otherwise, it doesn't really make sense to rank non-siblings by index, 743 // so they sort equally. 744 0; 745} 746function matchRouteBranch(branch, pathname, allowPartial) { 747 if (allowPartial === void 0) { 748 allowPartial = false; 749 } 750 let { 751 routesMeta 752 } = branch; 753 let matchedParams = {}; 754 let matchedPathname = "/"; 755 let matches = []; 756 for (let i = 0; i < routesMeta.length; ++i) { 757 let meta = routesMeta[i]; 758 let end = i === routesMeta.length - 1; 759 let remainingPathname = matchedPathname === "/" ? pathname : pathname.slice(matchedPathname.length) || "/"; 760 let match = matchPath({ 761 path: meta.relativePath, 762 caseSensitive: meta.caseSensitive, 763 end 764 }, remainingPathname); 765 let route = meta.route; 766 if (!match && end && allowPartial && !routesMeta[routesMeta.length - 1].route.index) { 767 match = matchPath({ 768 path: meta.relativePath, 769 caseSensitive: meta.caseSensitive, 770 end: false 771 }, remainingPathname); 772 } 773 if (!match) { 774 return null; 775 } 776 Object.assign(matchedParams, match.params); 777 matches.push({ 778 // TODO: Can this as be avoided? 779 params: matchedParams, 780 pathname: joinPaths([matchedPathname, match.pathname]), 781 pathnameBase: normalizePathname(joinPaths([matchedPathname, match.pathnameBase])), 782 route 783 }); 784 if (match.pathnameBase !== "/") { 785 matchedPathname = joinPaths([matchedPathname, match.pathnameBase]); 786 } 787 } 788 return matches; 789} 790/** 791 * Returns a path with params interpolated. 792 * 793 * @see https://reactrouter.com/v6/utils/generate-path 794 */ 795function generatePath(originalPath, params) { 796 if (params === void 0) { 797 params = {}; 798 } 799 let path = originalPath; 800 if (path.endsWith("*") && path !== "*" && !path.endsWith("/*")) { 801 warning(false, "Route path \"" + path + "\" will be treated as if it were " + ("\"" + path.replace(/\*$/, "/*") + "\" because the `*` character must ") + "always follow a `/` in the pattern. To get rid of this warning, " + ("please change the route path to \"" + path.replace(/\*$/, "/*") + "\".")); 802 path = path.replace(/\*$/, "/*"); 803 } 804 // ensure `/` is added at the beginning if the path is absolute 805 const prefix = path.startsWith("/") ? "/" : ""; 806 const stringify = p => p == null ? "" : typeof p === "string" ? p : String(p); 807 const segments = path.split(/\/+/).map((segment, index, array) => { 808 const isLastSegment = index === array.length - 1; 809 // only apply the splat if it's the last segment 810 if (isLastSegment && segment === "*") { 811 const star = "*"; 812 // Apply the splat 813 return stringify(params[star]); 814 } 815 const keyMatch = segment.match(/^:([\w-]+)(\??)$/); 816 if (keyMatch) { 817 const [, key, optional] = keyMatch; 818 let param = params[key]; 819 invariant(optional === "?" || param != null, "Missing \":" + key + "\" param"); 820 return stringify(param); 821 } 822 // Remove any optional markers from optional static segments 823 return segment.replace(/\?$/g, ""); 824 }) 825 // Remove empty segments 826 .filter(segment => !!segment); 827 return prefix + segments.join("/"); 828} 829/** 830 * Performs pattern matching on a URL pathname and returns information about 831 * the match. 832 * 833 * @see https://reactrouter.com/v6/utils/match-path 834 */ 835function matchPath(pattern, pathname) { 836 if (typeof pattern === "string") { 837 pattern = { 838 path: pattern, 839 caseSensitive: false, 840 end: true 841 }; 842 } 843 let [matcher, compiledParams] = compilePath(pattern.path, pattern.caseSensitive, pattern.end); 844 let match = pathname.match(matcher); 845 if (!match) return null; 846 let matchedPathname = match[0]; 847 let pathnameBase = matchedPathname.replace(/(.)\/+$/, "$1"); 848 let captureGroups = match.slice(1); 849 let params = compiledParams.reduce((memo, _ref, index) => { 850 let { 851 paramName, 852 isOptional 853 } = _ref; 854 // We need to compute the pathnameBase here using the raw splat value 855 // instead of using params["*"] later because it will be decoded then 856 if (paramName === "*") { 857 let splatValue = captureGroups[index] || ""; 858 pathnameBase = matchedPathname.slice(0, matchedPathname.length - splatValue.length).replace(/(.)\/+$/, "$1"); 859 } 860 const value = captureGroups[index]; 861 if (isOptional && !value) { 862 memo[paramName] = undefined; 863 } else { 864 memo[paramName] = (value || "").replace(/%2F/g, "/"); 865 } 866 return memo; 867 }, {}); 868 return { 869 params, 870 pathname: matchedPathname, 871 pathnameBase, 872 pattern 873 }; 874} 875function compilePath(path, caseSensitive, end) { 876 if (caseSensitive === void 0) { 877 caseSensitive = false; 878 } 879 if (end === void 0) { 880 end = true; 881 } 882 warning(path === "*" || !path.endsWith("*") || path.endsWith("/*"), "Route path \"" + path + "\" will be treated as if it were " + ("\"" + path.replace(/\*$/, "/*") + "\" because the `*` character must ") + "always follow a `/` in the pattern. To get rid of this warning, " + ("please change the route path to \"" + path.replace(/\*$/, "/*") + "\".")); 883 let params = []; 884 let regexpSource = "^" + path.replace(/\/*\*?$/, "") // Ignore trailing / and /*, we'll handle it below 885 .replace(/^\/*/, "/") // Make sure it has a leading / 886 .replace(/[\\.*+^${}|()[\]]/g, "\\$&") // Escape special regex chars 887 .replace(/\/:([\w-]+)(\?)?/g, (_, paramName, isOptional) => { 888 params.push({ 889 paramName, 890 isOptional: isOptional != null 891 }); 892 return isOptional ? "/?([^\\/]+)?" : "/([^\\/]+)"; 893 }); 894 if (path.endsWith("*")) { 895 params.push({ 896 paramName: "*" 897 }); 898 regexpSource += path === "*" || path === "/*" ? "(.*)$" // Already matched the initial /, just match the rest 899 : "(?:\\/(.+)|\\/*)$"; // Don't include the / in params["*"] 900 } else if (end) { 901 // When matching to the end, ignore trailing slashes 902 regexpSource += "\\/*$"; 903 } else if (path !== "" && path !== "/") { 904 // If our path is non-empty and contains anything beyond an initial slash, 905 // then we have _some_ form of path in our regex, so we should expect to 906 // match only if we find the end of this path segment. Look for an optional 907 // non-captured trailing slash (to match a portion of the URL) or the end 908 // of the path (if we've matched to the end). We used to do this with a 909 // word boundary but that gives false positives on routes like 910 // /user-preferences since `-` counts as a word boundary. 911 regexpSource += "(?:(?=\\/|$))"; 912 } else ; 913 let matcher = new RegExp(regexpSource, caseSensitive ? undefined : "i"); 914 return [matcher, params]; 915} 916function decodePath(value) { 917 try { 918 return value.split("/").map(v => decodeURIComponent(v).replace(/\//g, "%2F")).join("/"); 919 } catch (error) { 920 warning(false, "The URL path \"" + value + "\" could not be decoded because it is is a " + "malformed URL segment. This is probably due to a bad percent " + ("encoding (" + error + ").")); 921 return value; 922 } 923} 924/** 925 * @private 926 */ 927function stripBasename(pathname, basename) { 928 if (basename === "/") return pathname; 929 if (!pathname.toLowerCase().startsWith(basename.toLowerCase())) { 930 return null; 931 } 932 // We want to leave trailing slash behavior in the user's control, so if they 933 // specify a basename with a trailing slash, we should support it 934 let startIndex = basename.endsWith("/") ? basename.length - 1 : basename.length; 935 let nextChar = pathname.charAt(startIndex); 936 if (nextChar && nextChar !== "/") { 937 // pathname does not start with basename/ 938 return null; 939 } 940 return pathname.slice(startIndex) || "/"; 941} 942/** 943 * Returns a resolved path object relative to the given pathname. 944 * 945 * @see https://reactrouter.com/v6/utils/resolve-path 946 */ 947function resolvePath(to, fromPathname) { 948 if (fromPathname === void 0) { 949 fromPathname = "/"; 950 } 951 let { 952 pathname: toPathname, 953 search = "", 954 hash = "" 955 } = typeof to === "string" ? parsePath(to) : to; 956 let pathname = toPathname ? toPathname.startsWith("/") ? toPathname : resolvePathname(toPathname, fromPathname) : fromPathname; 957 return { 958 pathname, 959 search: normalizeSearch(search), 960 hash: normalizeHash(hash) 961 }; 962} 963function resolvePathname(relativePath, fromPathname) { 964 let segments = fromPathname.replace(/\/+$/, "").split("/"); 965 let relativeSegments = relativePath.split("/"); 966 relativeSegments.forEach(segment => { 967 if (segment === "..") { 968 // Keep the root "" segment so the pathname starts at / 969 if (segments.length > 1) segments.pop(); 970 } else if (segment !== ".") { 971 segments.push(segment); 972 } 973 }); 974 return segments.length > 1 ? segments.join("/") : "/"; 975} 976function getInvalidPathError(char, field, dest, path) { 977 return "Cannot include a '" + char + "' character in a manually specified " + ("`to." + field + "` field [" + JSON.stringify(path) + "]. Please separate it out to the ") + ("`to." + dest + "` field. Alternatively you may provide the full path as ") + "a string in <Link to=\"...\"> and the router will parse it for you."; 978} 979/** 980 * @private 981 * 982 * When processing relative navigation we want to ignore ancestor routes that 983 * do not contribute to the path, such that index/pathless layout routes don't 984 * interfere. 985 * 986 * For example, when moving a route element into an index route and/or a 987 * pathless layout route, relative link behavior contained within should stay 988 * the same. Both of the following examples should link back to the root: 989 * 990 * <Route path="/"> 991 * <Route path="accounts" element={<Link to=".."}> 992 * </Route> 993 * 994 * <Route path="/"> 995 * <Route path="accounts"> 996 * <Route element={<AccountsLayout />}> // <-- Does not contribute 997 * <Route index element={<Link to=".."} /> // <-- Does not contribute 998 * </Route 999 * </Route> 1000 * </Route> 1001 */ 1002function getPathContributingMatches(matches) { 1003 return matches.filter((match, index) => index === 0 || match.route.path && match.route.path.length > 0); 1004} 1005// Return the array of pathnames for the current route matches - used to 1006// generate the routePathnames input for resolveTo() 1007function getResolveToMatches(matches, v7_relativeSplatPath) { 1008 let pathMatches = getPathContributingMatches(matches); 1009 // When v7_relativeSplatPath is enabled, use the full pathname for the leaf 1010 // match so we include splat values for "." links. See: 1011 // https://github.com/remix-run/react-router/issues/11052#issuecomment-1836589329 1012 if (v7_relativeSplatPath) { 1013 return pathMatches.map((match, idx) => idx === pathMatches.length - 1 ? match.pathname : match.pathnameBase); 1014 } 1015 return pathMatches.map(match => match.pathnameBase); 1016} 1017/** 1018 * @private 1019 */ 1020function resolveTo(toArg, routePathnames, locationPathname, isPathRelative) { 1021 if (isPathRelative === void 0) { 1022 isPathRelative = false; 1023 } 1024 let to; 1025 if (typeof toArg === "string") { 1026 to = parsePath(toArg); 1027 } else { 1028 to = _extends({}, toArg); 1029 invariant(!to.pathname || !to.pathname.includes("?"), getInvalidPathError("?", "pathname", "search", to)); 1030 invariant(!to.pathname || !to.pathname.includes("#"), getInvalidPathError("#", "pathname", "hash", to)); 1031 invariant(!to.search || !to.search.includes("#"), getInvalidPathError("#", "search", "hash", to)); 1032 } 1033 let isEmptyPath = toArg === "" || to.pathname === ""; 1034 let toPathname = isEmptyPath ? "/" : to.pathname; 1035 let from; 1036 // Routing is relative to the current pathname if explicitly requested. 1037 // 1038 // If a pathname is explicitly provided in `to`, it should be relative to the 1039 // route context. This is explained in `Note on `<Link to>` values` in our 1040 // migration guide from v5 as a means of disambiguation between `to` values 1041 // that begin with `/` and those that do not. However, this is problematic for 1042 // `to` values that do not provide a pathname. `to` can simply be a search or 1043 // hash string, in which case we should assume that the navigation is relative 1044 // to the current location's pathname and *not* the route pathname. 1045 if (toPathname == null) { 1046 from = locationPathname; 1047 } else { 1048 let routePathnameIndex = routePathnames.length - 1; 1049 // With relative="route" (the default), each leading .. segment means 1050 // "go up one route" instead of "go up one URL segment". This is a key 1051 // difference from how <a href> works and a major reason we call this a 1052 // "to" value instead of a "href". 1053 if (!isPathRelative && toPathname.startsWith("..")) { 1054 let toSegments = toPathname.split("/"); 1055 while (toSegments[0] === "..") { 1056 toSegments.shift(); 1057 routePathnameIndex -= 1; 1058 } 1059 to.pathname = toSegments.join("/"); 1060 } 1061 from = routePathnameIndex >= 0 ? routePathnames[routePathnameIndex] : "/"; 1062 } 1063 let path = resolvePath(to, from); 1064 // Ensure the pathname has a trailing slash if the original "to" had one 1065 let hasExplicitTrailingSlash = toPathname && toPathname !== "/" && toPathname.endsWith("/"); 1066 // Or if this was a link to the current path which has a trailing slash 1067 let hasCurrentTrailingSlash = (isEmptyPath || toPathname === ".") && locationPathname.endsWith("/"); 1068 if (!path.pathname.endsWith("/") && (hasExplicitTrailingSlash || hasCurrentTrailingSlash)) { 1069 path.pathname += "/"; 1070 } 1071 return path; 1072} 1073/** 1074 * @private 1075 */ 1076function getToPathname(to) { 1077 // Empty strings should be treated the same as / paths 1078 return to === "" || to.pathname === "" ? "/" : typeof to === "string" ? parsePath(to).pathname : to.pathname; 1079} 1080/** 1081 * @private 1082 */ 1083const joinPaths = paths => paths.join("/").replace(/\/\/+/g, "/"); 1084/** 1085 * @private 1086 */ 1087const normalizePathname = pathname => pathname.replace(/\/+$/, "").replace(/^\/*/, "/"); 1088/** 1089 * @private 1090 */ 1091const normalizeSearch = search => !search || search === "?" ? "" : search.startsWith("?") ? search : "?" + search; 1092/** 1093 * @private 1094 */ 1095const normalizeHash = hash => !hash || hash === "#" ? "" : hash.startsWith("#") ? hash : "#" + hash; 1096/** 1097 * This is a shortcut for creating `application/json` responses. Converts `data` 1098 * to JSON and sets the `Content-Type` header. 1099 * 1100 * @deprecated The `json` method is deprecated in favor of returning raw objects. 1101 * This method will be removed in v7. 1102 */ 1103const json = function json(data, init) { 1104 if (init === void 0) { 1105 init = {}; 1106 } 1107 let responseInit = typeof init === "number" ? { 1108 status: init 1109 } : init; 1110 let headers = new Headers(responseInit.headers); 1111 if (!headers.has("Content-Type")) { 1112 headers.set("Content-Type", "application/json; charset=utf-8"); 1113 } 1114 return new Response(JSON.stringify(data), _extends({}, responseInit, { 1115 headers 1116 })); 1117}; 1118class DataWithResponseInit { 1119 constructor(data, init) { 1120 this.type = "DataWithResponseInit"; 1121 this.data = data; 1122 this.init = init || null; 1123 } 1124} 1125/** 1126 * Create "responses" that contain `status`/`headers` without forcing 1127 * serialization into an actual `Response` - used by Remix single fetch 1128 */ 1129function data(data, init) { 1130 return new DataWithResponseInit(data, typeof init === "number" ? { 1131 status: init 1132 } : init); 1133} 1134class AbortedDeferredError extends Error {} 1135class DeferredData { 1136 constructor(data, responseInit) { 1137 this.pendingKeysSet = new Set(); 1138 this.subscribers = new Set(); 1139 this.deferredKeys = []; 1140 invariant(data && typeof data === "object" && !Array.isArray(data), "defer() only accepts plain objects"); 1141 // Set up an AbortController + Promise we can race against to exit early 1142 // cancellation 1143 let reject; 1144 this.abortPromise = new Promise((_, r) => reject = r); 1145 this.controller = new AbortController(); 1146 let onAbort = () => reject(new AbortedDeferredError("Deferred data aborted")); 1147 this.unlistenAbortSignal = () => this.controller.signal.removeEventListener("abort", onAbort); 1148 this.controller.signal.addEventListener("abort", onAbort); 1149 this.data = Object.entries(data).reduce((acc, _ref2) => { 1150 let [key, value] = _ref2; 1151 return Object.assign(acc, { 1152 [key]: this.trackPromise(key, value) 1153 }); 1154 }, {}); 1155 if (this.done) { 1156 // All incoming values were resolved 1157 this.unlistenAbortSignal(); 1158 } 1159 this.init = responseInit; 1160 } 1161 trackPromise(key, value) { 1162 if (!(value instanceof Promise)) { 1163 return value; 1164 } 1165 this.deferredKeys.push(key); 1166 this.pendingKeysSet.add(key); 1167 // We store a little wrapper promise that will be extended with 1168 // _data/_error props upon resolve/reject 1169 let promise = Promise.race([value, this.abortPromise]).then(data => this.onSettle(promise, key, undefined, data), error => this.onSettle(promise, key, error)); 1170 // Register rejection listeners to avoid uncaught promise rejections on 1171 // errors or aborted deferred values 1172 promise.catch(() => {}); 1173 Object.defineProperty(promise, "_tracked", { 1174 get: () => true 1175 }); 1176 return promise; 1177 } 1178 onSettle(promise, key, error, data) { 1179 if (this.controller.signal.aborted && error instanceof AbortedDeferredError) { 1180 this.unlistenAbortSignal(); 1181 Object.defineProperty(promise, "_error", { 1182 get: () => error 1183 }); 1184 return Promise.reject(error); 1185 } 1186 this.pendingKeysSet.delete(key); 1187 if (this.done) { 1188 // Nothing left to abort! 1189 this.unlistenAbortSignal(); 1190 } 1191 // If the promise was resolved/rejected with undefined, we'll throw an error as you 1192 // should always resolve with a value or null 1193 if (error === undefined && data === undefined) { 1194 let undefinedError = new Error("Deferred data for key \"" + key + "\" resolved/rejected with `undefined`, " + "you must resolve/reject with a value or `null`."); 1195 Object.defineProperty(promise, "_error", { 1196 get: () => undefinedError 1197 }); 1198 this.emit(false, key); 1199 return Promise.reject(undefinedError); 1200 } 1201 if (data === undefined) { 1202 Object.defineProperty(promise, "_error", { 1203 get: () => error 1204 }); 1205 this.emit(false, key); 1206 return Promise.reject(error); 1207 } 1208 Object.defineProperty(promise, "_data", { 1209 get: () => data 1210 }); 1211 this.emit(false, key); 1212 return data; 1213 } 1214 emit(aborted, settledKey) { 1215 this.subscribers.forEach(subscriber => subscriber(aborted, settledKey)); 1216 } 1217 subscribe(fn) { 1218 this.subscribers.add(fn); 1219 return () => this.subscribers.delete(fn); 1220 } 1221 cancel() { 1222 this.controller.abort(); 1223 this.pendingKeysSet.forEach((v, k) => this.pendingKeysSet.delete(k)); 1224 this.emit(true); 1225 } 1226 async resolveData(signal) { 1227 let aborted = false; 1228 if (!this.done) { 1229 let onAbort = () => this.cancel(); 1230 signal.addEventListener("abort", onAbort); 1231 aborted = await new Promise(resolve => { 1232 this.subscribe(aborted => { 1233 signal.removeEventListener("abort", onAbort); 1234 if (aborted || this.done) { 1235 resolve(aborted); 1236 } 1237 }); 1238 }); 1239 } 1240 return aborted; 1241 } 1242 get done() { 1243 return this.pendingKeysSet.size === 0; 1244 } 1245 get unwrappedData() { 1246 invariant(this.data !== null && this.done, "Can only unwrap data on initialized and settled deferreds"); 1247 return Object.entries(this.data).reduce((acc, _ref3) => { 1248 let [key, value] = _ref3; 1249 return Object.assign(acc, { 1250 [key]: unwrapTrackedPromise(value) 1251 }); 1252 }, {}); 1253 } 1254 get pendingKeys() { 1255 return Array.from(this.pendingKeysSet); 1256 } 1257} 1258function isTrackedPromise(value) { 1259 return value instanceof Promise && value._tracked === true; 1260} 1261function unwrapTrackedPromise(value) { 1262 if (!isTrackedPromise(value)) { 1263 return value; 1264 } 1265 if (value._error) { 1266 throw value._error; 1267 } 1268 return value._data; 1269} 1270/** 1271 * @deprecated The `defer` method is deprecated in favor of returning raw 1272 * objects. This method will be removed in v7. 1273 */ 1274const defer = function defer(data, init) { 1275 if (init === void 0) { 1276 init = {}; 1277 } 1278 let responseInit = typeof init === "number" ? { 1279 status: init 1280 } : init; 1281 return new DeferredData(data, responseInit); 1282}; 1283/** 1284 * A redirect response. Sets the status code and the `Location` header. 1285 * Defaults to "302 Found". 1286 */ 1287const redirect = function redirect(url, init) { 1288 if (init === void 0) { 1289 init = 302; 1290 } 1291 let responseInit = init; 1292 if (typeof responseInit === "number") { 1293 responseInit = { 1294 status: responseInit 1295 }; 1296 } else if (typeof responseInit.status === "undefined") { 1297 responseInit.status = 302; 1298 } 1299 let headers = new Headers(responseInit.headers); 1300 headers.set("Location", url); 1301 return new Response(null, _extends({}, responseInit, { 1302 headers 1303 })); 1304}; 1305/** 1306 * A redirect response that will force a document reload to the new location. 1307 * Sets the status code and the `Location` header. 1308 * Defaults to "302 Found". 1309 */ 1310const redirectDocument = (url, init) => { 1311 let response = redirect(url, init); 1312 response.headers.set("X-Remix-Reload-Document", "true"); 1313 return response; 1314}; 1315/** 1316 * A redirect response that will perform a `history.replaceState` instead of a 1317 * `history.pushState` for client-side navigation redirects. 1318 * Sets the status code and the `Location` header. 1319 * Defaults to "302 Found". 1320 */ 1321const replace = (url, init) => { 1322 let response = redirect(url, init); 1323 response.headers.set("X-Remix-Replace", "true"); 1324 return response; 1325}; 1326/** 1327 * @private 1328 * Utility class we use to hold auto-unwrapped 4xx/5xx Response bodies 1329 * 1330 * We don't export the class for public use since it's an implementation 1331 * detail, but we export the interface above so folks can build their own 1332 * abstractions around instances via isRouteErrorResponse() 1333 */ 1334class ErrorResponseImpl { 1335 constructor(status, statusText, data, internal) { 1336 if (internal === void 0) { 1337 internal = false; 1338 } 1339 this.status = status; 1340 this.statusText = statusText || ""; 1341 this.internal = internal; 1342 if (data instanceof Error) { 1343 this.data = data.toString(); 1344 this.error = data; 1345 } else { 1346 this.data = data; 1347 } 1348 } 1349} 1350/** 1351 * Check if the given error is an ErrorResponse generated from a 4xx/5xx 1352 * Response thrown from an action/loader 1353 */ 1354function isRouteErrorResponse(error) { 1355 return error != null && typeof error.status === "number" && typeof error.statusText === "string" && typeof error.internal === "boolean" && "data" in error; 1356} 1357 1358const validMutationMethodsArr = ["post", "put", "patch", "delete"]; 1359const validMutationMethods = new Set(validMutationMethodsArr); 1360const validRequestMethodsArr = ["get", ...validMutationMethodsArr]; 1361const validRequestMethods = new Set(validRequestMethodsArr); 1362const redirectStatusCodes = new Set([301, 302, 303, 307, 308]); 1363const redirectPreserveMethodStatusCodes = new Set([307, 308]); 1364const IDLE_NAVIGATION = { 1365 state: "idle", 1366 location: undefined, 1367 formMethod: undefined, 1368 formAction: undefined, 1369 formEncType: undefined, 1370 formData: undefined, 1371 json: undefined, 1372 text: undefined 1373}; 1374const IDLE_FETCHER = { 1375 state: "idle", 1376 data: undefined, 1377 formMethod: undefined, 1378 formAction: undefined, 1379 formEncType: undefined, 1380 formData: undefined, 1381 json: undefined, 1382 text: undefined 1383}; 1384const IDLE_BLOCKER = { 1385 state: "unblocked", 1386 proceed: undefined, 1387 reset: undefined, 1388 location: undefined 1389}; 1390const ABSOLUTE_URL_REGEX = /^(?:[a-z][a-z0-9+.-]*:|\/\/)/i; 1391const defaultMapRouteProperties = route => ({ 1392 hasErrorBoundary: Boolean(route.hasErrorBoundary) 1393}); 1394const TRANSITIONS_STORAGE_KEY = "remix-router-transitions"; 1395//#endregion 1396//////////////////////////////////////////////////////////////////////////////// 1397//#region createRouter 1398//////////////////////////////////////////////////////////////////////////////// 1399/** 1400 * Create a router and listen to history POP navigations 1401 */ 1402function createRouter(init) { 1403 const routerWindow = init.window ? init.window : typeof window !== "undefined" ? window : undefined; 1404 const isBrowser = typeof routerWindow !== "undefined" && typeof routerWindow.document !== "undefined" && typeof routerWindow.document.createElement !== "undefined"; 1405 const isServer = !isBrowser; 1406 invariant(init.routes.length > 0, "You must provide a non-empty routes array to createRouter"); 1407 let mapRouteProperties; 1408 if (init.mapRouteProperties) { 1409 mapRouteProperties = init.mapRouteProperties; 1410 } else if (init.detectErrorBoundary) { 1411 // If they are still using the deprecated version, wrap it with the new API 1412 let detectErrorBoundary = init.detectErrorBoundary; 1413 mapRouteProperties = route => ({ 1414 hasErrorBoundary: detectErrorBoundary(route) 1415 }); 1416 } else { 1417 mapRouteProperties = defaultMapRouteProperties; 1418 } 1419 // Routes keyed by ID 1420 let manifest = {}; 1421 // Routes in tree format for matching 1422 let dataRoutes = convertRoutesToDataRoutes(init.routes, mapRouteProperties, undefined, manifest); 1423 let inFlightDataRoutes; 1424 let basename = init.basename || "/"; 1425 let dataStrategyImpl = init.dataStrategy || defaultDataStrategy; 1426 let patchRoutesOnNavigationImpl = init.patchRoutesOnNavigation; 1427 // Config driven behavior flags 1428 let future = _extends({ 1429 v7_fetcherPersist: false, 1430 v7_normalizeFormMethod: false, 1431 v7_partialHydration: false, 1432 v7_prependBasename: false, 1433 v7_relativeSplatPath: false, 1434 v7_skipActionErrorRevalidation: false 1435 }, init.future); 1436 // Cleanup function for history 1437 let unlistenHistory = null; 1438 // Externally-provided functions to call on all state changes 1439 let subscribers = new Set(); 1440 // Externally-provided object to hold scroll restoration locations during routing 1441 let savedScrollPositions = null; 1442 // Externally-provided function to get scroll restoration keys 1443 let getScrollRestorationKey = null; 1444 // Externally-provided function to get current scroll position 1445 let getScrollPosition = null; 1446 // One-time flag to control the initial hydration scroll restoration. Because 1447 // we don't get the saved positions from <ScrollRestoration /> until _after_ 1448 // the initial render, we need to manually trigger a separate updateState to 1449 // send along the restoreScrollPosition 1450 // Set to true if we have `hydrationData` since we assume we were SSR'd and that 1451 // SSR did the initial scroll restoration. 1452 let initialScrollRestored = init.hydrationData != null; 1453 let initialMatches = matchRoutes(dataRoutes, init.history.location, basename); 1454 let initialErrors = null; 1455 if (initialMatches == null && !patchRoutesOnNavigationImpl) { 1456 // If we do not match a user-provided-route, fall back to the root 1457 // to allow the error boundary to take over 1458 let error = getInternalRouterError(404, { 1459 pathname: init.history.location.pathname 1460 }); 1461 let { 1462 matches, 1463 route 1464 } = getShortCircuitMatches(dataRoutes); 1465 initialMatches = matches; 1466 initialErrors = { 1467 [route.id]: error 1468 }; 1469 } 1470 // In SPA apps, if the user provided a patchRoutesOnNavigation implementation and 1471 // our initial match is a splat route, clear them out so we run through lazy 1472 // discovery on hydration in case there's a more accurate lazy route match. 1473 // In SSR apps (with `hydrationData`), we expect that the server will send 1474 // up the proper matched routes so we don't want to run lazy discovery on 1475 // initial hydration and want to hydrate into the splat route. 1476 if (initialMatches && !init.hydrationData) { 1477 let fogOfWar = checkFogOfWar(initialMatches, dataRoutes, init.history.location.pathname); 1478 if (fogOfWar.active) { 1479 initialMatches = null; 1480 } 1481 } 1482 let initialized; 1483 if (!initialMatches) { 1484 initialized = false; 1485 initialMatches = []; 1486 // If partial hydration and fog of war is enabled, we will be running 1487 // `patchRoutesOnNavigation` during hydration so include any partial matches as 1488 // the initial matches so we can properly render `HydrateFallback`'s 1489 if (future.v7_partialHydration) { 1490 let fogOfWar = checkFogOfWar(null, dataRoutes, init.history.location.pathname); 1491 if (fogOfWar.active && fogOfWar.matches) { 1492 initialMatches = fogOfWar.matches; 1493 } 1494 } 1495 } else if (initialMatches.some(m => m.route.lazy)) { 1496 // All initialMatches need to be loaded before we're ready. If we have lazy 1497 // functions around still then we'll need to run them in initialize() 1498 initialized = false; 1499 } else if (!initialMatches.some(m => m.route.loader)) { 1500 // If we've got no loaders to run, then we're good to go 1501 initialized = true; 1502 } else if (future.v7_partialHydration) { 1503 // If partial hydration is enabled, we're initialized so long as we were 1504 // provided with hydrationData for every route with a loader, and no loaders 1505 // were marked for explicit hydration 1506 let loaderData = init.hydrationData ? init.hydrationData.loaderData : null; 1507 let errors = init.hydrationData ? init.hydrationData.errors : null; 1508 // If errors exist, don't consider routes below the boundary 1509 if (errors) { 1510 let idx = initialMatches.findIndex(m => errors[m.route.id] !== undefined); 1511 initialized = initialMatches.slice(0, idx + 1).every(m => !shouldLoadRouteOnHydration(m.route, loaderData, errors)); 1512 } else { 1513 initialized = initialMatches.every(m => !shouldLoadRouteOnHydration(m.route, loaderData, errors)); 1514 } 1515 } else { 1516 // Without partial hydration - we're initialized if we were provided any 1517 // hydrationData - which is expected to be complete 1518 initialized = init.hydrationData != null; 1519 } 1520 let router; 1521 let state = { 1522 historyAction: init.history.action, 1523 location: init.history.location, 1524 matches: initialMatches, 1525 initialized, 1526 navigation: IDLE_NAVIGATION, 1527 // Don't restore on initial updateState() if we were SSR'd 1528 restoreScrollPosition: init.hydrationData != null ? false : null, 1529 preventScrollReset: false, 1530 revalidation: "idle", 1531 loaderData: init.hydrationData && init.hydrationData.loaderData || {}, 1532 actionData: init.hydrationData && init.hydrationData.actionData || null, 1533 errors: init.hydrationData && init.hydrationData.errors || initialErrors, 1534 fetchers: new Map(), 1535 blockers: new Map() 1536 }; 1537 // -- Stateful internal variables to manage navigations -- 1538 // Current navigation in progress (to be committed in completeNavigation) 1539 let pendingAction = Action.Pop; 1540 // Should the current navigation prevent the scroll reset if scroll cannot 1541 // be restored? 1542 let pendingPreventScrollReset = false; 1543 // AbortController for the active navigation 1544 let pendingNavigationController; 1545 // Should the current navigation enable document.startViewTransition? 1546 let pendingViewTransitionEnabled = false; 1547 // Store applied view transitions so we can apply them on POP 1548 let appliedViewTransitions = new Map(); 1549 // Cleanup function for persisting applied transitions to sessionStorage 1550 let removePageHideEventListener = null; 1551 // We use this to avoid touching history in completeNavigation if a 1552 // revalidation is entirely uninterrupted 1553 let isUninterruptedRevalidation = false; 1554 // Use this internal flag to force revalidation of all loaders: 1555 // - submissions (completed or interrupted) 1556 // - useRevalidator() 1557 // - X-Remix-Revalidate (from redirect) 1558 let isRevalidationRequired = false; 1559 // Use this internal array to capture routes that require revalidation due 1560 // to a cancelled deferred on action submission 1561 let cancelledDeferredRoutes = []; 1562 // Use this internal array to capture fetcher loads that were cancelled by an 1563 // action navigation and require revalidation 1564 let cancelledFetcherLoads = new Set(); 1565 // AbortControllers for any in-flight fetchers 1566 let fetchControllers = new Map(); 1567 // Track loads based on the order in which they started 1568 let incrementingLoadId = 0; 1569 // Track the outstanding pending navigation data load to be compared against 1570 // the globally incrementing load when a fetcher load lands after a completed 1571 // navigation 1572 let pendingNavigationLoadId = -1; 1573 // Fetchers that triggered data reloads as a result of their actions 1574 let fetchReloadIds = new Map(); 1575 // Fetchers that triggered redirect navigations 1576 let fetchRedirectIds = new Set(); 1577 // Most recent href/match for fetcher.load calls for fetchers 1578 let fetchLoadMatches = new Map(); 1579 // Ref-count mounted fetchers so we know when it's ok to clean them up 1580 let activeFetchers = new Map(); 1581 // Fetchers that have requested a delete when using v7_fetcherPersist, 1582 // they'll be officially removed after they return to idle 1583 let deletedFetchers = new Set(); 1584 // Store DeferredData instances for active route matches. When a 1585 // route loader returns defer() we stick one in here. Then, when a nested 1586 // promise resolves we update loaderData. If a new navigation starts we 1587 // cancel active deferreds for eliminated routes. 1588 let activeDeferreds = new Map(); 1589 // Store blocker functions in a separate Map outside of router state since 1590 // we don't need to update UI state if they change 1591 let blockerFunctions = new Map(); 1592 // Flag to ignore the next history update, so we can revert the URL change on 1593 // a POP navigation that was blocked by the user without touching router state 1594 let unblockBlockerHistoryUpdate = undefined; 1595 // Initialize the router, all side effects should be kicked off from here. 1596 // Implemented as a Fluent API for ease of: 1597 // let router = createRouter(init).initialize(); 1598 function initialize() { 1599 // If history informs us of a POP navigation, start the navigation but do not update 1600 // state. We'll update our own state once the navigation completes 1601 unlistenHistory = init.history.listen(_ref => { 1602 let { 1603 action: historyAction, 1604 location, 1605 delta 1606 } = _ref; 1607 // Ignore this event if it was just us resetting the URL from a 1608 // blocked POP navigation 1609 if (unblockBlockerHistoryUpdate) { 1610 unblockBlockerHistoryUpdate(); 1611 unblockBlockerHistoryUpdate = undefined; 1612 return; 1613 } 1614 warning(blockerFunctions.size === 0 || delta != null, "You are trying to use a blocker on a POP navigation to a location " + "that was not created by @remix-run/router. This will fail silently in " + "production. This can happen if you are navigating outside the router " + "via `window.history.pushState`/`window.location.hash` instead of using " + "router navigation APIs. This can also happen if you are using " + "createHashRouter and the user manually changes the URL."); 1615 let blockerKey = shouldBlockNavigation({ 1616 currentLocation: state.location, 1617 nextLocation: location, 1618 historyAction 1619 }); 1620 if (blockerKey && delta != null) { 1621 // Restore the URL to match the current UI, but don't update router state 1622 let nextHistoryUpdatePromise = new Promise(resolve => { 1623 unblockBlockerHistoryUpdate = resolve; 1624 }); 1625 init.history.go(delta * -1); 1626 // Put the blocker into a blocked state 1627 updateBlocker(blockerKey, { 1628 state: "blocked", 1629 location, 1630 proceed() { 1631 updateBlocker(blockerKey, { 1632 state: "proceeding", 1633 proceed: undefined, 1634 reset: undefined, 1635 location 1636 }); 1637 // Re-do the same POP navigation we just blocked, after the url 1638 // restoration is also complete. See: 1639 // https://github.com/remix-run/react-router/issues/11613 1640 nextHistoryUpdatePromise.then(() => init.history.go(delta)); 1641 }, 1642 reset() { 1643 let blockers = new Map(state.blockers); 1644 blockers.set(blockerKey, IDLE_BLOCKER); 1645 updateState({ 1646 blockers 1647 }); 1648 } 1649 }); 1650 return; 1651 } 1652 return startNavigation(historyAction, location); 1653 }); 1654 if (isBrowser) { 1655 // FIXME: This feels gross. How can we cleanup the lines between 1656 // scrollRestoration/appliedTransitions persistance? 1657 restoreAppliedTransitions(routerWindow, appliedViewTransitions); 1658 let _saveAppliedTransitions = () => persistAppliedTransitions(routerWindow, appliedViewTransitions); 1659 routerWindow.addEventListener("pagehide", _saveAppliedTransitions); 1660 removePageHideEventListener = () => routerWindow.removeEventListener("pagehide", _saveAppliedTransitions); 1661 } 1662 // Kick off initial data load if needed. Use Pop to avoid modifying history 1663 // Note we don't do any handling of lazy here. For SPA's it'll get handled 1664 // in the normal navigation flow. For SSR it's expected that lazy modules are 1665 // resolved prior to router creation since we can't go into a fallbackElement 1666 // UI for SSR'd apps 1667 if (!state.initialized) { 1668 startNavigation(Action.Pop, state.location, { 1669 initialHydration: true 1670 }); 1671 } 1672 return router; 1673 } 1674 // Clean up a router and it's side effects 1675 function dispose() { 1676 if (unlistenHistory) { 1677 unlistenHistory(); 1678 } 1679 if (removePageHideEventListener) { 1680 removePageHideEventListener(); 1681 } 1682 subscribers.clear(); 1683 pendingNavigationController && pendingNavigationController.abort(); 1684 state.fetchers.forEach((_, key) => deleteFetcher(key)); 1685 state.blockers.forEach((_, key) => deleteBlocker(key)); 1686 } 1687 // Subscribe to state updates for the router 1688 function subscribe(fn) { 1689 subscribers.add(fn); 1690 return () => subscribers.delete(fn); 1691 } 1692 // Update our state and notify the calling context of the change 1693 function updateState(newState, opts) { 1694 if (opts === void 0) { 1695 opts = {}; 1696 } 1697 state = _extends({}, state, newState); 1698 // Prep fetcher cleanup so we can tell the UI which fetcher data entries 1699 // can be removed 1700 let completedFetchers = []; 1701 let deletedFetchersKeys = []; 1702 if (future.v7_fetcherPersist) { 1703 state.fetchers.forEach((fetcher, key) => { 1704 if (fetcher.state === "idle") { 1705 if (deletedFetchers.has(key)) { 1706 // Unmounted from the UI and can be totally removed 1707 deletedFetchersKeys.push(key); 1708 } else { 1709 // Returned to idle but still mounted in the UI, so semi-remains for 1710 // revalidations and such 1711 completedFetchers.push(key); 1712 } 1713 } 1714 }); 1715 } 1716 // Iterate over a local copy so that if flushSync is used and we end up 1717 // removing and adding a new subscriber due to the useCallback dependencies, 1718 // we don't get ourselves into a loop calling the new subscriber immediately 1719 [...subscribers].forEach(subscriber => subscriber(state, { 1720 deletedFetchers: deletedFetchersKeys, 1721 viewTransitionOpts: opts.viewTransitionOpts, 1722 flushSync: opts.flushSync === true 1723 })); 1724 // Remove idle fetchers from state since we only care about in-flight fetchers. 1725 if (future.v7_fetcherPersist) { 1726 completedFetchers.forEach(key => state.fetchers.delete(key)); 1727 deletedFetchersKeys.forEach(key => deleteFetcher(key)); 1728 } 1729 } 1730 // Complete a navigation returning the state.navigation back to the IDLE_NAVIGATION 1731 // and setting state.[historyAction/location/matches] to the new route. 1732 // - Location is a required param 1733 // - Navigation will always be set to IDLE_NAVIGATION 1734 // - Can pass any other state in newState 1735 function completeNavigation(location, newState, _temp) { 1736 var _location$state, _location$state2; 1737 let { 1738 flushSync 1739 } = _temp === void 0 ? {} : _temp; 1740 // Deduce if we're in a loading/actionReload state: 1741 // - We have committed actionData in the store 1742 // - The current navigation was a mutation submission 1743 // - We're past the submitting state and into the loading state 1744 // - The location being loaded is not the result of a redirect 1745 let isActionReload = state.actionData != null && state.navigation.formMethod != null && isMutationMethod(state.navigation.formMethod) && state.navigation.state === "loading" && ((_location$state = location.state) == null ? void 0 : _location$state._isRedirect) !== true; 1746 let actionData; 1747 if (newState.actionData) { 1748 if (Object.keys(newState.actionData).length > 0) { 1749 actionData = newState.actionData; 1750 } else { 1751 // Empty actionData -> clear prior actionData due to an action error 1752 actionData = null; 1753 } 1754 } else if (isActionReload) { 1755 // Keep the current data if we're wrapping up the action reload 1756 actionData = state.actionData; 1757 } else { 1758 // Clear actionData on any other completed navigations 1759 actionData = null; 1760 } 1761 // Always preserve any existing loaderData from re-used routes 1762 let loaderData = newState.loaderData ? mergeLoaderData(state.loaderData, newState.loaderData, newState.matches || [], newState.errors) : state.loaderData; 1763 // On a successful navigation we can assume we got through all blockers 1764 // so we can start fresh 1765 let blockers = state.blockers; 1766 if (blockers.size > 0) { 1767 blockers = new Map(blockers); 1768 blockers.forEach((_, k) => blockers.set(k, IDLE_BLOCKER)); 1769 } 1770 // Always respect the user flag. Otherwise don't reset on mutation 1771 // submission navigations unless they redirect 1772 let preventScrollReset = pendingPreventScrollReset === true || state.navigation.formMethod != null && isMutationMethod(state.navigation.formMethod) && ((_location$state2 = location.state) == null ? void 0 : _location$state2._isRedirect) !== true; 1773 // Commit any in-flight routes at the end of the HMR revalidation "navigation" 1774 if (inFlightDataRoutes) { 1775 dataRoutes = inFlightDataRoutes; 1776 inFlightDataRoutes = undefined; 1777 } 1778 if (isUninterruptedRevalidation) ; else if (pendingAction === Action.Pop) ; else if (pendingAction === Action.Push) { 1779 init.history.push(location, location.state); 1780 } else if (pendingAction === Action.Replace) { 1781 init.history.replace(location, location.state); 1782 } 1783 let viewTransitionOpts; 1784 // On POP, enable transitions if they were enabled on the original navigation 1785 if (pendingAction === Action.Pop) { 1786 // Forward takes precedence so they behave like the original navigation 1787 let priorPaths = appliedViewTransitions.get(state.location.pathname); 1788 if (priorPaths && priorPaths.has(location.pathname)) { 1789 viewTransitionOpts = { 1790 currentLocation: state.location, 1791 nextLocation: location 1792 }; 1793 } else if (appliedViewTransitions.has(location.pathname)) { 1794 // If we don't have a previous forward nav, assume we're popping back to 1795 // the new location and enable if that location previously enabled 1796 viewTransitionOpts = { 1797 currentLocation: location, 1798 nextLocation: state.location 1799 }; 1800 } 1801 } else if (pendingViewTransitionEnabled) { 1802 // Store the applied transition on PUSH/REPLACE 1803 let toPaths = appliedViewTransitions.get(state.location.pathname); 1804 if (toPaths) { 1805 toPaths.add(location.pathname); 1806 } else { 1807 toPaths = new Set([location.pathname]); 1808 appliedViewTransitions.set(state.location.pathname, toPaths); 1809 } 1810 viewTransitionOpts = { 1811 currentLocation: state.location, 1812 nextLocation: location 1813 }; 1814 } 1815 updateState(_extends({}, newState, { 1816 actionData, 1817 loaderData, 1818 historyAction: pendingAction, 1819 location, 1820 initialized: true, 1821 navigation: IDLE_NAVIGATION, 1822 revalidation: "idle", 1823 restoreScrollPosition: getSavedScrollPosition(location, newState.matches || state.matches), 1824 preventScrollReset, 1825 blockers 1826 }), { 1827 viewTransitionOpts, 1828 flushSync: flushSync === true 1829 }); 1830 // Reset stateful navigation vars 1831 pendingAction = Action.Pop; 1832 pendingPreventScrollReset = false; 1833 pendingViewTransitionEnabled = false; 1834 isUninterruptedRevalidation = false; 1835 isRevalidationRequired = false; 1836 cancelledDeferredRoutes = []; 1837 } 1838 // Trigger a navigation event, which can either be a numerical POP or a PUSH 1839 // replace with an optional submission 1840 async function navigate(to, opts) { 1841 if (typeof to === "number") { 1842 init.history.go(to); 1843 return; 1844 } 1845 let normalizedPath = normalizeTo(state.location, state.matches, basename, future.v7_prependBasename, to, future.v7_relativeSplatPath, opts == null ? void 0 : opts.fromRouteId, opts == null ? void 0 : opts.relative); 1846 let { 1847 path, 1848 submission, 1849 error 1850 } = normalizeNavigateOptions(future.v7_normalizeFormMethod, false, normalizedPath, opts); 1851 let currentLocation = state.location; 1852 let nextLocation = createLocation(state.location, path, opts && opts.state); 1853 // When using navigate as a PUSH/REPLACE we aren't reading an already-encoded 1854 // URL from window.location, so we need to encode it here so the behavior 1855 // remains the same as POP and non-data-router usages. new URL() does all 1856 // the same encoding we'd get from a history.pushState/window.location read 1857 // without having to touch history 1858 nextLocation = _extends({}, nextLocation, init.history.encodeLocation(nextLocation)); 1859 let userReplace = opts && opts.replace != null ? opts.replace : undefined; 1860 let historyAction = Action.Push; 1861 if (userReplace === true) { 1862 historyAction = Action.Replace; 1863 } else if (userReplace === false) ; else if (submission != null && isMutationMethod(submission.formMethod) && submission.formAction === state.location.pathname + state.location.search) { 1864 // By default on submissions to the current location we REPLACE so that 1865 // users don't have to double-click the back button to get to the prior 1866 // location. If the user redirects to a different location from the 1867 // action/loader this will be ignored and the redirect will be a PUSH 1868 historyAction = Action.Replace; 1869 } 1870 let preventScrollReset = opts && "preventScrollReset" in opts ? opts.preventScrollReset === true : undefined; 1871 let flushSync = (opts && opts.flushSync) === true; 1872 let blockerKey = shouldBlockNavigation({ 1873 currentLocation, 1874 nextLocation, 1875 historyAction 1876 }); 1877 if (blockerKey) { 1878 // Put the blocker into a blocked state 1879 updateBlocker(blockerKey, { 1880 state: "blocked", 1881 location: nextLocation, 1882 proceed() { 1883 updateBlocker(blockerKey, { 1884 state: "proceeding", 1885 proceed: undefined, 1886 reset: undefined, 1887 location: nextLocation 1888 }); 1889 // Send the same navigation through 1890 navigate(to, opts); 1891 }, 1892 reset() { 1893 let blockers = new Map(state.blockers); 1894 blockers.set(blockerKey, IDLE_BLOCKER); 1895 updateState({ 1896 blockers 1897 }); 1898 } 1899 }); 1900 return; 1901 } 1902 return await startNavigation(historyAction, nextLocation, { 1903 submission, 1904 // Send through the formData serialization error if we have one so we can 1905 // render at the right error boundary after we match routes 1906 pendingError: error, 1907 preventScrollReset, 1908 replace: opts && opts.replace, 1909 enableViewTransition: opts && opts.viewTransition, 1910 flushSync 1911 }); 1912 } 1913 // Revalidate all current loaders. If a navigation is in progress or if this 1914 // is interrupted by a navigation, allow this to "succeed" by calling all 1915 // loaders during the next loader round 1916 function revalidate() { 1917 interruptActiveLoads(); 1918 updateState({ 1919 revalidation: "loading" 1920 }); 1921 // If we're currently submitting an action, we don't need to start a new 1922 // navigation, we'll just let the follow up loader execution call all loaders 1923 if (state.navigation.state === "submitting") { 1924 return; 1925 } 1926 // If we're currently in an idle state, start a new navigation for the current 1927 // action/location and mark it as uninterrupted, which will skip the history 1928 // update in completeNavigation 1929 if (state.navigation.state === "idle") { 1930 startNavigation(state.historyAction, state.location, { 1931 startUninterruptedRevalidation: true 1932 }); 1933 return; 1934 } 1935 // Otherwise, if we're currently in a loading state, just start a new 1936 // navigation to the navigation.location but do not trigger an uninterrupted 1937 // revalidation so that history correctly updates once the navigation completes 1938 startNavigation(pendingAction || state.historyAction, state.navigation.location, { 1939 overrideNavigation: state.navigation, 1940 // Proxy through any rending view transition 1941 enableViewTransition: pendingViewTransitionEnabled === true 1942 }); 1943 } 1944 // Start a navigation to the given action/location. Can optionally provide a 1945 // overrideNavigation which will override the normalLoad in the case of a redirect 1946 // navigation 1947 async function startNavigation(historyAction, location, opts) { 1948 // Abort any in-progress navigations and start a new one. Unset any ongoing 1949 // uninterrupted revalidations unless told otherwise, since we want this 1950 // new navigation to update history normally 1951 pendingNavigationController && pendingNavigationController.abort(); 1952 pendingNavigationController = null; 1953 pendingAction = historyAction; 1954 isUninterruptedRevalidation = (opts && opts.startUninterruptedRevalidation) === true; 1955 // Save the current scroll position every time we start a new navigation, 1956 // and track whether we should reset scroll on completion 1957 saveScrollPosition(state.location, state.matches); 1958 pendingPreventScrollReset = (opts && opts.preventScrollReset) === true; 1959 pendingViewTransitionEnabled = (opts && opts.enableViewTransition) === true; 1960 let routesToUse = inFlightDataRoutes || dataRoutes; 1961 let loadingNavigation = opts && opts.overrideNavigation; 1962 let matches = matchRoutes(routesToUse, location, basename); 1963 let flushSync = (opts && opts.flushSync) === true; 1964 let fogOfWar = checkFogOfWar(matches, routesToUse, location.pathname); 1965 if (fogOfWar.active && fogOfWar.matches) { 1966 matches = fogOfWar.matches; 1967 } 1968 // Short circuit with a 404 on the root error boundary if we match nothing 1969 if (!matches) { 1970 let { 1971 error, 1972 notFoundMatches, 1973 route 1974 } = handleNavigational404(location.pathname); 1975 completeNavigation(location, { 1976 matches: notFoundMatches, 1977 loaderData: {}, 1978 errors: { 1979 [route.id]: error 1980 } 1981 }, { 1982 flushSync 1983 }); 1984 return; 1985 } 1986 // Short circuit if it's only a hash change and not a revalidation or 1987 // mutation submission. 1988 // 1989 // Ignore on initial page loads because since the initial hydration will always 1990 // be "same hash". For example, on /page#hash and submit a <Form method="post"> 1991 // which will default to a navigation to /page 1992 if (state.initialized && !isRevalidationRequired && isHashChangeOnly(state.location, location) && !(opts && opts.submission && isMutationMethod(opts.submission.formMethod))) { 1993 completeNavigation(location, { 1994 matches 1995 }, { 1996 flushSync 1997 }); 1998 return; 1999 } 2000 // Create a controller/Request for this navigation 2001 pendingNavigationController = new AbortController(); 2002 let request = createClientSideRequest(init.history, location, pendingNavigationController.signal, opts && opts.submission); 2003 let pendingActionResult; 2004 if (opts && opts.pendingError) { 2005 // If we have a pendingError, it means the user attempted a GET submission 2006 // with binary FormData so assign here and skip to handleLoaders. That 2007 // way we handle calling loaders above the boundary etc. It's not really 2008 // different from an actionError in that sense. 2009 pendingActionResult = [findNearestBoundary(matches).route.id, { 2010 type: ResultType.error, 2011 error: opts.pendingError 2012 }]; 2013 } else if (opts && opts.submission && isMutationMethod(opts.submission.formMethod)) { 2014 // Call action if we received an action submission 2015 let actionResult = await handleAction(request, location, opts.submission, matches, fogOfWar.active, { 2016 replace: opts.replace, 2017 flushSync 2018 }); 2019 if (actionResult.shortCircuited) { 2020 return; 2021 } 2022 // If we received a 404 from handleAction, it's because we couldn't lazily 2023 // discover the destination route so we don't want to call loaders 2024 if (actionResult.pendingActionResult) { 2025 let [routeId, result] = actionResult.pendingActionResult; 2026 if (isErrorResult(result) && isRouteErrorResponse(result.error) && result.error.status === 404) { 2027 pendingNavigationController = null; 2028 completeNavigation(location, { 2029 matches: actionResult.matches, 2030 loaderData: {}, 2031 errors: { 2032 [routeId]: result.error 2033 } 2034 }); 2035 return; 2036 } 2037 } 2038 matches = actionResult.matches || matches; 2039 pendingActionResult = actionResult.pendingActionResult; 2040 loadingNavigation = getLoadingNavigation(location, opts.submission); 2041 flushSync = false; 2042 // No need to do fog of war matching again on loader execution 2043 fogOfWar.active = false; 2044 // Create a GET request for the loaders 2045 request = createClientSideRequest(init.history, request.url, request.signal); 2046 } 2047 // Call loaders 2048 let { 2049 shortCircuited, 2050 matches: updatedMatches, 2051 loaderData, 2052 errors 2053 } = await handleLoaders(request, location, matches, fogOfWar.active, loadingNavigation, opts && opts.submission, opts && opts.fetcherSubmission, opts && opts.replace, opts && opts.initialHydration === true, flushSync, pendingActionResult); 2054 if (shortCircuited) { 2055 return; 2056 } 2057 // Clean up now that the action/loaders have completed. Don't clean up if 2058 // we short circuited because pendingNavigationController will have already 2059 // been assigned to a new controller for the next navigation 2060 pendingNavigationController = null; 2061 completeNavigation(location, _extends({ 2062 matches: updatedMatches || matches 2063 }, getActionDataForCommit(pendingActionResult), { 2064 loaderData, 2065 errors 2066 })); 2067 } 2068 // Call the action matched by the leaf route for this navigation and handle 2069 // redirects/errors 2070 async function handleAction(request, location, submission, matches, isFogOfWar, opts) { 2071 if (opts === void 0) { 2072 opts = {}; 2073 } 2074 interruptActiveLoads(); 2075 // Put us in a submitting state 2076 let navigation = getSubmittingNavigation(location, submission); 2077 updateState({ 2078 navigation 2079 }, { 2080 flushSync: opts.flushSync === true 2081 }); 2082 if (isFogOfWar) { 2083 let discoverResult = await discoverRoutes(matches, location.pathname, request.signal); 2084 if (discoverResult.type === "aborted") { 2085 return { 2086 shortCircuited: true 2087 }; 2088 } else if (discoverResult.type === "error") { 2089 let boundaryId = findNearestBoundary(discoverResult.partialMatches).route.id; 2090 return { 2091 matches: discoverResult.partialMatches, 2092 pendingActionResult: [boundaryId, { 2093 type: ResultType.error, 2094 error: discoverResult.error 2095 }] 2096 }; 2097 } else if (!discoverResult.matches) { 2098 let { 2099 notFoundMatches, 2100 error, 2101 route 2102 } = handleNavigational404(location.pathname); 2103 return { 2104 matches: notFoundMatches, 2105 pendingActionResult: [route.id, { 2106 type: ResultType.error, 2107 error 2108 }] 2109 }; 2110 } else { 2111 matches = discoverResult.matches; 2112 } 2113 } 2114 // Call our action and get the result 2115 let result; 2116 let actionMatch = getTargetMatch(matches, location); 2117 if (!actionMatch.route.action && !actionMatch.route.lazy) { 2118 result = { 2119 type: ResultType.error, 2120 error: getInternalRouterError(405, { 2121 method: request.method, 2122 pathname: location.pathname, 2123 routeId: actionMatch.route.id 2124 }) 2125 }; 2126 } else { 2127 let results = await callDataStrategy("action", state, request, [actionMatch], matches, null); 2128 result = results[actionMatch.route.id]; 2129 if (request.signal.aborted) { 2130 return { 2131 shortCircuited: true 2132 }; 2133 } 2134 } 2135 if (isRedirectResult(result)) { 2136 let replace; 2137 if (opts && opts.replace != null) { 2138 replace = opts.replace; 2139 } else { 2140 // If the user didn't explicity indicate replace behavior, replace if 2141 // we redirected to the exact same location we're currently at to avoid 2142 // double back-buttons 2143 let location = normalizeRedirectLocation(result.response.headers.get("Location"), new URL(request.url), basename); 2144 replace = location === state.location.pathname + state.location.search; 2145 } 2146 await startRedirectNavigation(request, result, true, { 2147 submission, 2148 replace 2149 }); 2150 return { 2151 shortCircuited: true 2152 }; 2153 } 2154 if (isDeferredResult(result)) { 2155 throw getInternalRouterError(400, { 2156 type: "defer-action" 2157 }); 2158 } 2159 if (isErrorResult(result)) { 2160 // Store off the pending error - we use it to determine which loaders 2161 // to call and will commit it when we complete the navigation 2162 let boundaryMatch = findNearestBoundary(matches, actionMatch.route.id); 2163 // By default, all submissions to the current location are REPLACE 2164 // navigations, but if the action threw an error that'll be rendered in 2165 // an errorElement, we fall back to PUSH so that the user can use the 2166 // back button to get back to the pre-submission form location to try 2167 // again 2168 if ((opts && opts.replace) !== true) { 2169 pendingAction = Action.Push; 2170 } 2171 return { 2172 matches, 2173 pendingActionResult: [boundaryMatch.route.id, result] 2174 }; 2175 } 2176 return { 2177 matches, 2178 pendingActionResult: [actionMatch.route.id, result] 2179 }; 2180 } 2181 // Call all applicable loaders for the given matches, handling redirects, 2182 // errors, etc. 2183 async function handleLoaders(request, location, matches, isFogOfWar, overrideNavigation, submission, fetcherSubmission, replace, initialHydration, flushSync, pendingActionResult) { 2184 // Figure out the right navigation we want to use for data loading 2185 let loadingNavigation = overrideNavigation || getLoadingNavigation(location, submission); 2186 // If this was a redirect from an action we don't have a "submission" but 2187 // we have it on the loading navigation so use that if available 2188 let activeSubmission = submission || fetcherSubmission || getSubmissionFromNavigation(loadingNavigation); 2189 // If this is an uninterrupted revalidation, we remain in our current idle 2190 // state. If not, we need to switch to our loading state and load data, 2191 // preserving any new action data or existing action data (in the case of 2192 // a revalidation interrupting an actionReload) 2193 // If we have partialHydration enabled, then don't update the state for the 2194 // initial data load since it's not a "navigation" 2195 let shouldUpdateNavigationState = !isUninterruptedRevalidation && (!future.v7_partialHydration || !initialHydration); 2196 // When fog of war is enabled, we enter our `loading` state earlier so we 2197 // can discover new routes during the `loading` state. We skip this if 2198 // we've already run actions since we would have done our matching already. 2199 // If the children() function threw then, we want to proceed with the 2200 // partial matches it discovered. 2201 if (isFogOfWar) { 2202 if (shouldUpdateNavigationState) { 2203 let actionData = getUpdatedActionData(pendingActionResult); 2204 updateState(_extends({ 2205 navigation: loadingNavigation 2206 }, actionData !== undefined ? { 2207 actionData 2208 } : {}), { 2209 flushSync 2210 }); 2211 } 2212 let discoverResult = await discoverRoutes(matches, location.pathname, request.signal); 2213 if (discoverResult.type === "aborted") { 2214 return { 2215 shortCircuited: true 2216 }; 2217 } else if (discoverResult.type === "error") { 2218 let boundaryId = findNearestBoundary(discoverResult.partialMatches).route.id; 2219 return { 2220 matches: discoverResult.partialMatches, 2221 loaderData: {}, 2222 errors: { 2223 [boundaryId]: discoverResult.error 2224 } 2225 }; 2226 } else if (!discoverResult.matches) { 2227 let { 2228 error, 2229 notFoundMatches, 2230 route 2231 } = handleNavigational404(location.pathname); 2232 return { 2233 matches: notFoundMatches, 2234 loaderData: {}, 2235 errors: { 2236 [route.id]: error 2237 } 2238 }; 2239 } else { 2240 matches = discoverResult.matches; 2241 } 2242 } 2243 let routesToUse = inFlightDataRoutes || dataRoutes; 2244 let [matchesToLoad, revalidatingFetchers] = getMatchesToLoad(init.history, state, matches, activeSubmission, location, future.v7_partialHydration && initialHydration === true, future.v7_skipActionErrorRevalidation, isRevalidationRequired, cancelledDeferredRoutes, cancelledFetcherLoads, deletedFetchers, fetchLoadMatches, fetchRedirectIds, routesToUse, basename, pendingActionResult); 2245 // Cancel pending deferreds for no-longer-matched routes or routes we're 2246 // about to reload. Note that if this is an action reload we would have 2247 // already cancelled all pending deferreds so this would be a no-op 2248 cancelActiveDeferreds(routeId => !(matches && matches.some(m => m.route.id === routeId)) || matchesToLoad && matchesToLoad.some(m => m.route.id === routeId)); 2249 pendingNavigationLoadId = ++incrementingLoadId; 2250 // Short circuit if we have no loaders to run 2251 if (matchesToLoad.length === 0 && revalidatingFetchers.length === 0) { 2252 let updatedFetchers = markFetchRedirectsDone(); 2253 completeNavigation(location, _extends({ 2254 matches, 2255 loaderData: {}, 2256 // Commit pending error if we're short circuiting 2257 errors: pendingActionResult && isErrorResult(pendingActionResult[1]) ? { 2258 [pendingActionResult[0]]: pendingActionResult[1].error 2259 } : null 2260 }, getActionDataForCommit(pendingActionResult), updatedFetchers ? { 2261 fetchers: new Map(state.fetchers) 2262 } : {}), { 2263 flushSync 2264 }); 2265 return { 2266 shortCircuited: true 2267 }; 2268 } 2269 if (shouldUpdateNavigationState) { 2270 let updates = {}; 2271 if (!isFogOfWar) { 2272 // Only update navigation/actionNData if we didn't already do it above 2273 updates.navigation = loadingNavigation; 2274 let actionData = getUpdatedActionData(pendingActionResult); 2275 if (actionData !== undefined) { 2276 updates.actionData = actionData; 2277 } 2278 } 2279 if (revalidatingFetchers.length > 0) { 2280 updates.fetchers = getUpdatedRevalidatingFetchers(revalidatingFetchers); 2281 } 2282 updateState(updates, { 2283 flushSync 2284 }); 2285 } 2286 revalidatingFetchers.forEach(rf => { 2287 abortFetcher(rf.key); 2288 if (rf.controller) { 2289 // Fetchers use an independent AbortController so that aborting a fetcher 2290 // (via deleteFetcher) does not abort the triggering navigation that 2291 // triggered the revalidation 2292 fetchControllers.set(rf.key, rf.controller); 2293 } 2294 }); 2295 // Proxy navigation abort through to revalidation fetchers 2296 let abortPendingFetchRevalidations = () => revalidatingFetchers.forEach(f => abortFetcher(f.key)); 2297 if (pendingNavigationController) { 2298 pendingNavigationController.signal.addEventListener("abort", abortPendingFetchRevalidations); 2299 } 2300 let { 2301 loaderResults, 2302 fetcherResults 2303 } = await callLoadersAndMaybeResolveData(state, matches, matchesToLoad, revalidatingFetchers, request); 2304 if (request.signal.aborted) { 2305 return { 2306 shortCircuited: true 2307 }; 2308 } 2309 // Clean up _after_ loaders have completed. Don't clean up if we short 2310 // circuited because fetchControllers would have been aborted and 2311 // reassigned to new controllers for the next navigation 2312 if (pendingNavigationController) { 2313 pendingNavigationController.signal.removeEventListener("abort", abortPendingFetchRevalidations); 2314 } 2315 revalidatingFetchers.forEach(rf => fetchControllers.delete(rf.key)); 2316 // If any loaders returned a redirect Response, start a new REPLACE navigation 2317 let redirect = findRedirect(loaderResults); 2318 if (redirect) { 2319 await startRedirectNavigation(request, redirect.result, true, { 2320 replace 2321 }); 2322 return { 2323 shortCircuited: true 2324 }; 2325 } 2326 redirect = findRedirect(fetcherResults); 2327 if (redirect) { 2328 // If this redirect came from a fetcher make sure we mark it in 2329 // fetchRedirectIds so it doesn't get revalidated on the next set of 2330 // loader executions 2331 fetchRedirectIds.add(redirect.key); 2332 await startRedirectNavigation(request, redirect.result, true, { 2333 replace 2334 }); 2335 return { 2336 shortCircuited: true 2337 }; 2338 } 2339 // Process and commit output from loaders 2340 let { 2341 loaderData, 2342 errors 2343 } = processLoaderData(state, matches, loaderResults, pendingActionResult, revalidatingFetchers, fetcherResults, activeDeferreds); 2344 // Wire up subscribers to update loaderData as promises settle 2345 activeDeferreds.forEach((deferredData, routeId) => { 2346 deferredData.subscribe(aborted => { 2347 // Note: No need to updateState here since the TrackedPromise on 2348 // loaderData is stable across resolve/reject 2349 // Remove this instance if we were aborted or if promises have settled 2350 if (aborted || deferredData.done) { 2351 activeDeferreds.delete(routeId); 2352 } 2353 }); 2354 }); 2355 // Preserve SSR errors during partial hydration 2356 if (future.v7_partialHydration && initialHydration && state.errors) { 2357 errors = _extends({}, state.errors, errors); 2358 } 2359 let updatedFetchers = markFetchRedirectsDone(); 2360 let didAbortFetchLoads = abortStaleFetchLoads(pendingNavigationLoadId); 2361 let shouldUpdateFetchers = updatedFetchers || didAbortFetchLoads || revalidatingFetchers.length > 0; 2362 return _extends({ 2363 matches, 2364 loaderData, 2365 errors 2366 }, shouldUpdateFetchers ? { 2367 fetchers: new Map(state.fetchers) 2368 } : {}); 2369 } 2370 function getUpdatedActionData(pendingActionResult) { 2371 if (pendingActionResult && !isErrorResult(pendingActionResult[1])) { 2372 // This is cast to `any` currently because `RouteData`uses any and it 2373 // would be a breaking change to use any. 2374 // TODO: v7 - change `RouteData` to use `unknown` instead of `any` 2375 return { 2376 [pendingActionResult[0]]: pendingActionResult[1].data 2377 }; 2378 } else if (state.actionData) { 2379 if (Object.keys(state.actionData).length === 0) { 2380 return null; 2381 } else { 2382 return state.actionData; 2383 } 2384 } 2385 } 2386 function getUpdatedRevalidatingFetchers(revalidatingFetchers) { 2387 revalidatingFetchers.forEach(rf => { 2388 let fetcher = state.fetchers.get(rf.key); 2389 let revalidatingFetcher = getLoadingFetcher(undefined, fetcher ? fetcher.data : undefined); 2390 state.fetchers.set(rf.key, revalidatingFetcher); 2391 }); 2392 return new Map(state.fetchers); 2393 } 2394 // Trigger a fetcher load/submit for the given fetcher key 2395 function fetch(key, routeId, href, opts) { 2396 if (isServer) { 2397 throw new Error("router.fetch() was called during the server render, but it shouldn't be. " + "You are likely calling a useFetcher() method in the body of your component. " + "Try moving it to a useEffect or a callback."); 2398 } 2399 abortFetcher(key); 2400 let flushSync = (opts && opts.flushSync) === true; 2401 let routesToUse = inFlightDataRoutes || dataRoutes; 2402 let normalizedPath = normalizeTo(state.location, state.matches, basename, future.v7_prependBasename, href, future.v7_relativeSplatPath, routeId, opts == null ? void 0 : opts.relative); 2403 let matches = matchRoutes(routesToUse, normalizedPath, basename); 2404 let fogOfWar = checkFogOfWar(matches, routesToUse, normalizedPath); 2405 if (fogOfWar.active && fogOfWar.matches) { 2406 matches = fogOfWar.matches; 2407 } 2408 if (!matches) { 2409 setFetcherError(key, routeId, getInternalRouterError(404, { 2410 pathname: normalizedPath 2411 }), { 2412 flushSync 2413 }); 2414 return; 2415 } 2416 let { 2417 path, 2418 submission, 2419 error 2420 } = normalizeNavigateOptions(future.v7_normalizeFormMethod, true, normalizedPath, opts); 2421 if (error) { 2422 setFetcherError(key, routeId, error, { 2423 flushSync 2424 }); 2425 return; 2426 } 2427 let match = getTargetMatch(matches, path); 2428 let preventScrollReset = (opts && opts.preventScrollReset) === true; 2429 if (submission && isMutationMethod(submission.formMethod)) { 2430 handleFetcherAction(key, routeId, path, match, matches, fogOfWar.active, flushSync, preventScrollReset, submission); 2431 return; 2432 } 2433 // Store off the match so we can call it's shouldRevalidate on subsequent 2434 // revalidations 2435 fetchLoadMatches.set(key, { 2436 routeId, 2437 path 2438 }); 2439 handleFetcherLoader(key, routeId, path, match, matches, fogOfWar.active, flushSync, preventScrollReset, submission); 2440 } 2441 // Call the action for the matched fetcher.submit(), and then handle redirects, 2442 // errors, and revalidation 2443 async function handleFetcherAction(key, routeId, path, match, requestMatches, isFogOfWar, flushSync, preventScrollReset, submission) { 2444 interruptActiveLoads(); 2445 fetchLoadMatches.delete(key); 2446 function detectAndHandle405Error(m) { 2447 if (!m.route.action && !m.route.lazy) { 2448 let error = getInternalRouterError(405, { 2449 method: submission.formMethod, 2450 pathname: path, 2451 routeId: routeId 2452 }); 2453 setFetcherError(key, routeId, error, { 2454 flushSync 2455 }); 2456 return true; 2457 } 2458 return false; 2459 } 2460 if (!isFogOfWar && detectAndHandle405Error(match)) { 2461 return; 2462 } 2463 // Put this fetcher into it's submitting state 2464 let existingFetcher = state.fetchers.get(key); 2465 updateFetcherState(key, getSubmittingFetcher(submission, existingFetcher), { 2466 flushSync 2467 }); 2468 let abortController = new AbortController(); 2469 let fetchRequest = createClientSideRequest(init.history, path, abortController.signal, submission); 2470 if (isFogOfWar) { 2471 let discoverResult = await discoverRoutes(requestMatches, path, fetchRequest.signal); 2472 if (discoverResult.type === "aborted") { 2473 return; 2474 } else if (discoverResult.type === "error") { 2475 setFetcherError(key, routeId, discoverResult.error, { 2476 flushSync 2477 }); 2478 return; 2479 } else if (!discoverResult.matches) { 2480 setFetcherError(key, routeId, getInternalRouterError(404, { 2481 pathname: path 2482 }), { 2483 flushSync 2484 }); 2485 return; 2486 } else { 2487 requestMatches = discoverResult.matches; 2488 match = getTargetMatch(requestMatches, path); 2489 if (detectAndHandle405Error(match)) { 2490 return; 2491 } 2492 } 2493 } 2494 // Call the action for the fetcher 2495 fetchControllers.set(key, abortController); 2496 let originatingLoadId = incrementingLoadId; 2497 let actionResults = await callDataStrategy("action", state, fetchRequest, [match], requestMatches, key); 2498 let actionResult = actionResults[match.route.id]; 2499 if (fetchRequest.signal.aborted) { 2500 // We can delete this so long as we weren't aborted by our own fetcher 2501 // re-submit which would have put _new_ controller is in fetchControllers 2502 if (fetchControllers.get(key) === abortController) { 2503 fetchControllers.delete(key); 2504 } 2505 return; 2506 } 2507 // When using v7_fetcherPersist, we don't want errors bubbling up to the UI 2508 // or redirects processed for unmounted fetchers so we just revert them to 2509 // idle 2510 if (future.v7_fetcherPersist && deletedFetchers.has(key)) { 2511 if (isRedirectResult(actionResult) || isErrorResult(actionResult)) { 2512 updateFetcherState(key, getDoneFetcher(undefined)); 2513 return; 2514 } 2515 // Let SuccessResult's fall through for revalidation 2516 } else { 2517 if (isRedirectResult(actionResult)) { 2518 fetchControllers.delete(key); 2519 if (pendingNavigationLoadId > originatingLoadId) { 2520 // A new navigation was kicked off after our action started, so that 2521 // should take precedence over this redirect navigation. We already 2522 // set isRevalidationRequired so all loaders for the new route should 2523 // fire unless opted out via shouldRevalidate 2524 updateFetcherState(key, getDoneFetcher(undefined)); 2525 return; 2526 } else { 2527 fetchRedirectIds.add(key); 2528 updateFetcherState(key, getLoadingFetcher(submission)); 2529 return startRedirectNavigation(fetchRequest, actionResult, false, { 2530 fetcherSubmission: submission, 2531 preventScrollReset 2532 }); 2533 } 2534 } 2535 // Process any non-redirect errors thrown 2536 if (isErrorResult(actionResult)) { 2537 setFetcherError(key, routeId, actionResult.error); 2538 return; 2539 } 2540 } 2541 if (isDeferredResult(actionResult)) { 2542 throw getInternalRouterError(400, { 2543 type: "defer-action" 2544 }); 2545 } 2546 // Start the data load for current matches, or the next location if we're 2547 // in the middle of a navigation 2548 let nextLocation = state.navigation.location || state.location; 2549 let revalidationRequest = createClientSideRequest(init.history, nextLocation, abortController.signal); 2550 let routesToUse = inFlightDataRoutes || dataRoutes; 2551 let matches = state.navigation.state !== "idle" ? matchRoutes(routesToUse, state.navigation.location, basename) : state.matches; 2552 invariant(matches, "Didn't find any matches after fetcher action"); 2553 let loadId = ++incrementingLoadId; 2554 fetchReloadIds.set(key, loadId); 2555 let loadFetcher = getLoadingFetcher(submission, actionResult.data); 2556 state.fetchers.set(key, loadFetcher); 2557 let [matchesToLoad, revalidatingFetchers] = getMatchesToLoad(init.history, state, matches, submission, nextLocation, false, future.v7_skipActionErrorRevalidation, isRevalidationRequired, cancelledDeferredRoutes, cancelledFetcherLoads, deletedFetchers, fetchLoadMatches, fetchRedirectIds, routesToUse, basename, [match.route.id, actionResult]); 2558 // Put all revalidating fetchers into the loading state, except for the 2559 // current fetcher which we want to keep in it's current loading state which 2560 // contains it's action submission info + action data 2561 revalidatingFetchers.filter(rf => rf.key !== key).forEach(rf => { 2562 let staleKey = rf.key; 2563 let existingFetcher = state.fetchers.get(staleKey); 2564 let revalidatingFetcher = getLoadingFetcher(undefined, existingFetcher ? existingFetcher.data : undefined); 2565 state.fetchers.set(staleKey, revalidatingFetcher); 2566 abortFetcher(staleKey); 2567 if (rf.controller) { 2568 fetchControllers.set(staleKey, rf.controller); 2569 } 2570 }); 2571 updateState({ 2572 fetchers: new Map(state.fetchers) 2573 }); 2574 let abortPendingFetchRevalidations = () => revalidatingFetchers.forEach(rf => abortFetcher(rf.key)); 2575 abortController.signal.addEventListener("abort", abortPendingFetchRevalidations); 2576 let { 2577 loaderResults, 2578 fetcherResults 2579 } = await callLoadersAndMaybeResolveData(state, matches, matchesToLoad, revalidatingFetchers, revalidationRequest); 2580 if (abortController.signal.aborted) { 2581 return; 2582 } 2583 abortController.signal.removeEventListener("abort", abortPendingFetchRevalidations); 2584 fetchReloadIds.delete(key); 2585 fetchControllers.delete(key); 2586 revalidatingFetchers.forEach(r => fetchControllers.delete(r.key)); 2587 let redirect = findRedirect(loaderResults); 2588 if (redirect) { 2589 return startRedirectNavigation(revalidationRequest, redirect.result, false, { 2590 preventScrollReset 2591 }); 2592 } 2593 redirect = findRedirect(fetcherResults); 2594 if (redirect) { 2595 // If this redirect came from a fetcher make sure we mark it in 2596 // fetchRedirectIds so it doesn't get revalidated on the next set of 2597 // loader executions 2598 fetchRedirectIds.add(redirect.key); 2599 return startRedirectNavigation(revalidationRequest, redirect.result, false, { 2600 preventScrollReset 2601 }); 2602 } 2603 // Process and commit output from loaders 2604 let { 2605 loaderData, 2606 errors 2607 } = processLoaderData(state, matches, loaderResults, undefined, revalidatingFetchers, fetcherResults, activeDeferreds); 2608 // Since we let revalidations complete even if the submitting fetcher was 2609 // deleted, only put it back to idle if it hasn't been deleted 2610 if (state.fetchers.has(key)) { 2611 let doneFetcher = getDoneFetcher(actionResult.data); 2612 state.fetchers.set(key, doneFetcher); 2613 } 2614 abortStaleFetchLoads(loadId); 2615 // If we are currently in a navigation loading state and this fetcher is 2616 // more recent than the navigation, we want the newer data so abort the 2617 // navigation and complete it with the fetcher data 2618 if (state.navigation.state === "loading" && loadId > pendingNavigationLoadId) { 2619 invariant(pendingAction, "Expected pending action"); 2620 pendingNavigationController && pendingNavigationController.abort(); 2621 completeNavigation(state.navigation.location, { 2622 matches, 2623 loaderData, 2624 errors, 2625 fetchers: new Map(state.fetchers) 2626 }); 2627 } else { 2628 // otherwise just update with the fetcher data, preserving any existing 2629 // loaderData for loaders that did not need to reload. We have to 2630 // manually merge here since we aren't going through completeNavigation 2631 updateState({ 2632 errors, 2633 loaderData: mergeLoaderData(state.loaderData, loaderData, matches, errors), 2634 fetchers: new Map(state.fetchers) 2635 }); 2636 isRevalidationRequired = false; 2637 } 2638 } 2639 // Call the matched loader for fetcher.load(), handling redirects, errors, etc. 2640 async function handleFetcherLoader(key, routeId, path, match, matches, isFogOfWar, flushSync, preventScrollReset, submission) { 2641 let existingFetcher = state.fetchers.get(key); 2642 updateFetcherState(key, getLoadingFetcher(submission, existingFetcher ? existingFetcher.data : undefined), { 2643 flushSync 2644 }); 2645 let abortController = new AbortController(); 2646 let fetchRequest = createClientSideRequest(init.history, path, abortController.signal); 2647 if (isFogOfWar) { 2648 let discoverResult = await discoverRoutes(matches, path, fetchRequest.signal); 2649 if (discoverResult.type === "aborted") { 2650 return; 2651 } else if (discoverResult.type === "error") { 2652 setFetcherError(key, routeId, discoverResult.error, { 2653 flushSync 2654 }); 2655 return; 2656 } else if (!discoverResult.matches) { 2657 setFetcherError(key, routeId, getInternalRouterError(404, { 2658 pathname: path 2659 }), { 2660 flushSync 2661 }); 2662 return; 2663 } else { 2664 matches = discoverResult.matches; 2665 match = getTargetMatch(matches, path); 2666 } 2667 } 2668 // Call the loader for this fetcher route match 2669 fetchControllers.set(key, abortController); 2670 let originatingLoadId = incrementingLoadId; 2671 let results = await callDataStrategy("loader", state, fetchRequest, [match], matches, key); 2672 let result = results[match.route.id]; 2673 // Deferred isn't supported for fetcher loads, await everything and treat it 2674 // as a normal load. resolveDeferredData will return undefined if this 2675 // fetcher gets aborted, so we just leave result untouched and short circuit 2676 // below if that happens 2677 if (isDeferredResult(result)) { 2678 result = (await resolveDeferredData(result, fetchRequest.signal, true)) || result; 2679 } 2680 // We can delete this so long as we weren't aborted by our our own fetcher 2681 // re-load which would have put _new_ controller is in fetchControllers 2682 if (fetchControllers.get(key) === abortController) { 2683 fetchControllers.delete(key); 2684 } 2685 if (fetchRequest.signal.aborted) { 2686 return; 2687 } 2688 // We don't want errors bubbling up or redirects followed for unmounted 2689 // fetchers, so short circuit here if it was removed from the UI 2690 if (deletedFetchers.has(key)) { 2691 updateFetcherState(key, getDoneFetcher(undefined)); 2692 return; 2693 } 2694 // If the loader threw a redirect Response, start a new REPLACE navigation 2695 if (isRedirectResult(result)) { 2696 if (pendingNavigationLoadId > originatingLoadId) { 2697 // A new navigation was kicked off after our loader started, so that 2698 // should take precedence over this redirect navigation 2699 updateFetcherState(key, getDoneFetcher(undefined)); 2700 return; 2701 } else { 2702 fetchRedirectIds.add(key); 2703 await startRedirectNavigation(fetchRequest, result, false, { 2704 preventScrollReset 2705 }); 2706 return; 2707 } 2708 } 2709 // Process any non-redirect errors thrown 2710 if (isErrorResult(result)) { 2711 setFetcherError(key, routeId, result.error); 2712 return; 2713 } 2714 invariant(!isDeferredResult(result), "Unhandled fetcher deferred data"); 2715 // Put the fetcher back into an idle state 2716 updateFetcherState(key, getDoneFetcher(result.data)); 2717 } 2718 /** 2719 * Utility function to handle redirects returned from an action or loader. 2720 * Normally, a redirect "replaces" the navigation that triggered it. So, for 2721 * example: 2722 * 2723 * - user is on /a 2724 * - user clicks a link to /b 2725 * - loader for /b redirects to /c 2726 * 2727 * In a non-JS app the browser would track the in-flight navigation to /b and 2728 * then replace it with /c when it encountered the redirect response. In 2729 * the end it would only ever update the URL bar with /c. 2730 * 2731 * In client-side routing using pushState/replaceState, we aim to emulate 2732 * this behavior and we also do not update history until the end of the 2733 * navigation (including processed redirects). This means that we never 2734 * actually touch history until we've processed redirects, so we just use 2735 * the history action from the original navigation (PUSH or REPLACE). 2736 */ 2737 async function startRedirectNavigation(request, redirect, isNavigation, _temp2) { 2738 let { 2739 submission, 2740 fetcherSubmission, 2741 preventScrollReset, 2742 replace 2743 } = _temp2 === void 0 ? {} : _temp2; 2744 if (redirect.response.headers.has("X-Remix-Revalidate")) { 2745 isRevalidationRequired = true; 2746 } 2747 let location = redirect.response.headers.get("Location"); 2748 invariant(location, "Expected a Location header on the redirect Response"); 2749 location = normalizeRedirectLocation(location, new URL(request.url), basename); 2750 let redirectLocation = createLocation(state.location, location, { 2751 _isRedirect: true 2752 }); 2753 if (isBrowser) { 2754 let isDocumentReload = false; 2755 if (redirect.response.headers.has("X-Remix-Reload-Document")) { 2756 // Hard reload if the response contained X-Remix-Reload-Document 2757 isDocumentReload = true; 2758 } else if (ABSOLUTE_URL_REGEX.test(location)) { 2759 const url = init.history.createURL(location); 2760 isDocumentReload = 2761 // Hard reload if it's an absolute URL to a new origin 2762 url.origin !== routerWindow.location.origin || 2763 // Hard reload if it's an absolute URL that does not match our basename 2764 stripBasename(url.pathname, basename) == null; 2765 } 2766 if (isDocumentReload) { 2767 if (replace) { 2768 routerWindow.location.replace(location); 2769 } else { 2770 routerWindow.location.assign(location); 2771 } 2772 return; 2773 } 2774 } 2775 // There's no need to abort on redirects, since we don't detect the 2776 // redirect until the action/loaders have settled 2777 pendingNavigationController = null; 2778 let redirectHistoryAction = replace === true || redirect.response.headers.has("X-Remix-Replace") ? Action.Replace : Action.Push; 2779 // Use the incoming submission if provided, fallback on the active one in 2780 // state.navigation 2781 let { 2782 formMethod, 2783 formAction, 2784 formEncType 2785 } = state.navigation; 2786 if (!submission && !fetcherSubmission && formMethod && formAction && formEncType) { 2787 submission = getSubmissionFromNavigation(state.navigation); 2788 } 2789 // If this was a 307/308 submission we want to preserve the HTTP method and 2790 // re-submit the GET/POST/PUT/PATCH/DELETE as a submission navigation to the 2791 // redirected location 2792 let activeSubmission = submission || fetcherSubmission; 2793 if (redirectPreserveMethodStatusCodes.has(redirect.response.status) && activeSubmission && isMutationMethod(activeSubmission.formMethod)) { 2794 await startNavigation(redirectHistoryAction, redirectLocation, { 2795 submission: _extends({}, activeSubmission, { 2796 formAction: location 2797 }), 2798 // Preserve these flags across redirects 2799 preventScrollReset: preventScrollReset || pendingPreventScrollReset, 2800 enableViewTransition: isNavigation ? pendingViewTransitionEnabled : undefined 2801 }); 2802 } else { 2803 // If we have a navigation submission, we will preserve it through the 2804 // redirect navigation 2805 let overrideNavigation = getLoadingNavigation(redirectLocation, submission); 2806 await startNavigation(redirectHistoryAction, redirectLocation, { 2807 overrideNavigation, 2808 // Send fetcher submissions through for shouldRevalidate 2809 fetcherSubmission, 2810 // Preserve these flags across redirects 2811 preventScrollReset: preventScrollReset || pendingPreventScrollReset, 2812 enableViewTransition: isNavigation ? pendingViewTransitionEnabled : undefined 2813 }); 2814 } 2815 } 2816 // Utility wrapper for calling dataStrategy client-side without having to 2817 // pass around the manifest, mapRouteProperties, etc. 2818 async function callDataStrategy(type, state, request, matchesToLoad, matches, fetcherKey) { 2819 let results; 2820 let dataResults = {}; 2821 try { 2822 results = await callDataStrategyImpl(dataStrategyImpl, type, state, request, matchesToLoad, matches, fetcherKey, manifest, mapRouteProperties); 2823 } catch (e) { 2824 // If the outer dataStrategy method throws, just return the error for all 2825 // matches - and it'll naturally bubble to the root 2826 matchesToLoad.forEach(m => { 2827 dataResults[m.route.id] = { 2828 type: ResultType.error, 2829 error: e 2830 }; 2831 }); 2832 return dataResults; 2833 } 2834 for (let [routeId, result] of Object.entries(results)) { 2835 if (isRedirectDataStrategyResultResult(result)) { 2836 let response = result.result; 2837 dataResults[routeId] = { 2838 type: ResultType.redirect, 2839 response: normalizeRelativeRoutingRedirectResponse(response, request, routeId, matches, basename, future.v7_relativeSplatPath) 2840 }; 2841 } else { 2842 dataResults[routeId] = await convertDataStrategyResultToDataResult(result); 2843 } 2844 } 2845 return dataResults; 2846 } 2847 async function callLoadersAndMaybeResolveData(state, matches, matchesToLoad, fetchersToLoad, request) { 2848 let currentMatches = state.matches; 2849 // Kick off loaders and fetchers in parallel 2850 let loaderResultsPromise = callDataStrategy("loader", state, request, matchesToLoad, matches, null); 2851 let fetcherResultsPromise = Promise.all(fetchersToLoad.map(async f => { 2852 if (f.matches && f.match && f.controller) { 2853 let results = await callDataStrategy("loader", state, createClientSideRequest(init.history, f.path, f.controller.signal), [f.match], f.matches, f.key); 2854 let result = results[f.match.route.id]; 2855 // Fetcher results are keyed by fetcher key from here on out, not routeId 2856 return { 2857 [f.key]: result 2858 }; 2859 } else { 2860 return Promise.resolve({ 2861 [f.key]: { 2862 type: ResultType.error, 2863 error: getInternalRouterError(404, { 2864 pathname: f.path 2865 }) 2866 } 2867 }); 2868 } 2869 })); 2870 let loaderResults = await loaderResultsPromise; 2871 let fetcherResults = (await fetcherResultsPromise).reduce((acc, r) => Object.assign(acc, r), {}); 2872 await Promise.all([resolveNavigationDeferredResults(matches, loaderResults, request.signal, currentMatches, state.loaderData), resolveFetcherDeferredResults(matches, fetcherResults, fetchersToLoad)]); 2873 return { 2874 loaderResults, 2875 fetcherResults 2876 }; 2877 } 2878 function interruptActiveLoads() { 2879 // Every interruption triggers a revalidation 2880 isRevalidationRequired = true; 2881 // Cancel pending route-level deferreds and mark cancelled routes for 2882 // revalidation 2883 cancelledDeferredRoutes.push(...cancelActiveDeferreds()); 2884 // Abort in-flight fetcher loads 2885 fetchLoadMatches.forEach((_, key) => { 2886 if (fetchControllers.has(key)) { 2887 cancelledFetcherLoads.add(key); 2888 } 2889 abortFetcher(key); 2890 }); 2891 } 2892 function updateFetcherState(key, fetcher, opts) { 2893 if (opts === void 0) { 2894 opts = {}; 2895 } 2896 state.fetchers.set(key, fetcher); 2897 updateState({ 2898 fetchers: new Map(state.fetchers) 2899 }, { 2900 flushSync: (opts && opts.flushSync) === true 2901 }); 2902 } 2903 function setFetcherError(key, routeId, error, opts) { 2904 if (opts === void 0) { 2905 opts = {}; 2906 } 2907 let boundaryMatch = findNearestBoundary(state.matches, routeId); 2908 deleteFetcher(key); 2909 updateState({ 2910 errors: { 2911 [boundaryMatch.route.id]: error 2912 }, 2913 fetchers: new Map(state.fetchers) 2914 }, { 2915 flushSync: (opts && opts.flushSync) === true 2916 }); 2917 } 2918 function getFetcher(key) { 2919 if (future.v7_fetcherPersist) { 2920 activeFetchers.set(key, (activeFetchers.get(key) || 0) + 1); 2921 // If this fetcher was previously marked for deletion, unmark it since we 2922 // have a new instance 2923 if (deletedFetchers.has(key)) { 2924 deletedFetchers.delete(key); 2925 } 2926 } 2927 return state.fetchers.get(key) || IDLE_FETCHER; 2928 } 2929 function deleteFetcher(key) { 2930 let fetcher = state.fetchers.get(key); 2931 // Don't abort the controller if this is a deletion of a fetcher.submit() 2932 // in it's loading phase since - we don't want to abort the corresponding 2933 // revalidation and want them to complete and land 2934 if (fetchControllers.has(key) && !(fetcher && fetcher.state === "loading" && fetchReloadIds.has(key))) { 2935 abortFetcher(key); 2936 } 2937 fetchLoadMatches.delete(key); 2938 fetchReloadIds.delete(key); 2939 fetchRedirectIds.delete(key); 2940 deletedFetchers.delete(key); 2941 cancelledFetcherLoads.delete(key); 2942 state.fetchers.delete(key); 2943 } 2944 function deleteFetcherAndUpdateState(key) { 2945 if (future.v7_fetcherPersist) { 2946 let count = (activeFetchers.get(key) || 0) - 1; 2947 if (count <= 0) { 2948 activeFetchers.delete(key); 2949 deletedFetchers.add(key); 2950 } else { 2951 activeFetchers.set(key, count); 2952 } 2953 } else { 2954 deleteFetcher(key); 2955 } 2956 updateState({ 2957 fetchers: new Map(state.fetchers) 2958 }); 2959 } 2960 function abortFetcher(key) { 2961 let controller = fetchControllers.get(key); 2962 if (controller) { 2963 controller.abort(); 2964 fetchControllers.delete(key); 2965 } 2966 } 2967 function markFetchersDone(keys) { 2968 for (let key of keys) { 2969 let fetcher = getFetcher(key); 2970 let doneFetcher = getDoneFetcher(fetcher.data); 2971 state.fetchers.set(key, doneFetcher); 2972 } 2973 } 2974 function markFetchRedirectsDone() { 2975 let doneKeys = []; 2976 let updatedFetchers = false; 2977 for (let key of fetchRedirectIds) { 2978 let fetcher = state.fetchers.get(key); 2979 invariant(fetcher, "Expected fetcher: " + key); 2980 if (fetcher.state === "loading") { 2981 fetchRedirectIds.delete(key); 2982 doneKeys.push(key); 2983 updatedFetchers = true; 2984 } 2985 } 2986 markFetchersDone(doneKeys); 2987 return updatedFetchers; 2988 } 2989 function abortStaleFetchLoads(landedId) { 2990 let yeetedKeys = []; 2991 for (let [key, id] of fetchReloadIds) { 2992 if (id < landedId) { 2993 let fetcher = state.fetchers.get(key); 2994 invariant(fetcher, "Expected fetcher: " + key); 2995 if (fetcher.state === "loading") { 2996 abortFetcher(key); 2997 fetchReloadIds.delete(key); 2998 yeetedKeys.push(key); 2999 } 3000 } 3001 } 3002 markFetchersDone(yeetedKeys); 3003 return yeetedKeys.length > 0; 3004 } 3005 function getBlocker(key, fn) { 3006 let blocker = state.blockers.get(key) || IDLE_BLOCKER; 3007 if (blockerFunctions.get(key) !== fn) { 3008 blockerFunctions.set(key, fn); 3009 } 3010 return blocker; 3011 } 3012 function deleteBlocker(key) { 3013 state.blockers.delete(key); 3014 blockerFunctions.delete(key); 3015 } 3016 // Utility function to update blockers, ensuring valid state transitions 3017 function updateBlocker(key, newBlocker) { 3018 let blocker = state.blockers.get(key) || IDLE_BLOCKER; 3019 // Poor mans state machine :) 3020 // https://mermaid.live/edit#pako:eNqVkc9OwzAMxl8l8nnjAYrEtDIOHEBIgwvKJTReGy3_lDpIqO27k6awMG0XcrLlnz87nwdonESogKXXBuE79rq75XZO3-yHds0RJVuv70YrPlUrCEe2HfrORS3rubqZfuhtpg5C9wk5tZ4VKcRUq88q9Z8RS0-48cE1iHJkL0ugbHuFLus9L6spZy8nX9MP2CNdomVaposqu3fGayT8T8-jJQwhepo_UtpgBQaDEUom04dZhAN1aJBDlUKJBxE1ceB2Smj0Mln-IBW5AFU2dwUiktt_2Qaq2dBfaKdEup85UV7Yd-dKjlnkabl2Pvr0DTkTreM 3021 invariant(blocker.state === "unblocked" && newBlocker.state === "blocked" || blocker.state === "blocked" && newBlocker.state === "blocked" || blocker.state === "blocked" && newBlocker.state === "proceeding" || blocker.state === "blocked" && newBlocker.state === "unblocked" || blocker.state === "proceeding" && newBlocker.state === "unblocked", "Invalid blocker state transition: " + blocker.state + " -> " + newBlocker.state); 3022 let blockers = new Map(state.blockers); 3023 blockers.set(key, newBlocker); 3024 updateState({ 3025 blockers 3026 }); 3027 } 3028 function shouldBlockNavigation(_ref2) { 3029 let { 3030 currentLocation, 3031 nextLocation, 3032 historyAction 3033 } = _ref2; 3034 if (blockerFunctions.size === 0) { 3035 return; 3036 } 3037 // We ony support a single active blocker at the moment since we don't have 3038 // any compelling use cases for multi-blocker yet 3039 if (blockerFunctions.size > 1) { 3040 warning(false, "A router only supports one blocker at a time"); 3041 } 3042 let entries = Array.from(blockerFunctions.entries()); 3043 let [blockerKey, blockerFunction] = entries[entries.length - 1]; 3044 let blocker = state.blockers.get(blockerKey); 3045 if (blocker && blocker.state === "proceeding") { 3046 // If the blocker is currently proceeding, we don't need to re-check 3047 // it and can let this navigation continue 3048 return; 3049 } 3050 // At this point, we know we're unblocked/blocked so we need to check the 3051 // user-provided blocker function 3052 if (blockerFunction({ 3053 currentLocation, 3054 nextLocation, 3055 historyAction 3056 })) { 3057 return blockerKey; 3058 } 3059 } 3060 function handleNavigational404(pathname) { 3061 let error = getInternalRouterError(404, { 3062 pathname 3063 }); 3064 let routesToUse = inFlightDataRoutes || dataRoutes; 3065 let { 3066 matches, 3067 route 3068 } = getShortCircuitMatches(routesToUse); 3069 // Cancel all pending deferred on 404s since we don't keep any routes 3070 cancelActiveDeferreds(); 3071 return { 3072 notFoundMatches: matches, 3073 route, 3074 error 3075 }; 3076 } 3077 function cancelActiveDeferreds(predicate) { 3078 let cancelledRouteIds = []; 3079 activeDeferreds.forEach((dfd, routeId) => { 3080 if (!predicate || predicate(routeId)) { 3081 // Cancel the deferred - but do not remove from activeDeferreds here - 3082 // we rely on the subscribers to do that so our tests can assert proper 3083 // cleanup via _internalActiveDeferreds 3084 dfd.cancel(); 3085 cancelledRouteIds.push(routeId); 3086 activeDeferreds.delete(routeId); 3087 } 3088 }); 3089 return cancelledRouteIds; 3090 } 3091 // Opt in to capturing and reporting scroll positions during navigations, 3092 // used by the <ScrollRestoration> component 3093 function enableScrollRestoration(positions, getPosition, getKey) { 3094 savedScrollPositions = positions; 3095 getScrollPosition = getPosition; 3096 getScrollRestorationKey = getKey || null; 3097 // Perform initial hydration scroll restoration, since we miss the boat on 3098 // the initial updateState() because we've not yet rendered <ScrollRestoration/> 3099 // and therefore have no savedScrollPositions available 3100 if (!initialScrollRestored && state.navigation === IDLE_NAVIGATION) { 3101 initialScrollRestored = true; 3102 let y = getSavedScrollPosition(state.location, state.matches); 3103 if (y != null) { 3104 updateState({ 3105 restoreScrollPosition: y 3106 }); 3107 } 3108 } 3109 return () => { 3110 savedScrollPositions = null; 3111 getScrollPosition = null; 3112 getScrollRestorationKey = null; 3113 }; 3114 } 3115 function getScrollKey(location, matches) { 3116 if (getScrollRestorationKey) { 3117 let key = getScrollRestorationKey(location, matches.map(m => convertRouteMatchToUiMatch(m, state.loaderData))); 3118 return key || location.key; 3119 } 3120 return location.key; 3121 } 3122 function saveScrollPosition(location, matches) { 3123 if (savedScrollPositions && getScrollPosition) { 3124 let key = getScrollKey(location, matches); 3125 savedScrollPositions[key] = getScrollPosition(); 3126 } 3127 } 3128 function getSavedScrollPosition(location, matches) { 3129 if (savedScrollPositions) { 3130 let key = getScrollKey(location, matches); 3131 let y = savedScrollPositions[key]; 3132 if (typeof y === "number") { 3133 return y; 3134 } 3135 } 3136 return null; 3137 } 3138 function checkFogOfWar(matches, routesToUse, pathname) { 3139 if (patchRoutesOnNavigationImpl) { 3140 if (!matches) { 3141 let fogMatches = matchRoutesImpl(routesToUse, pathname, basename, true); 3142 return { 3143 active: true, 3144 matches: fogMatches || [] 3145 }; 3146 } else { 3147 if (Object.keys(matches[0].params).length > 0) { 3148 // If we matched a dynamic param or a splat, it might only be because 3149 // we haven't yet discovered other routes that would match with a 3150 // higher score. Call patchRoutesOnNavigation just to be sure 3151 let partialMatches = matchRoutesImpl(routesToUse, pathname, basename, true); 3152 return { 3153 active: true, 3154 matches: partialMatches 3155 }; 3156 } 3157 } 3158 } 3159 return { 3160 active: false, 3161 matches: null 3162 }; 3163 } 3164 async function discoverRoutes(matches, pathname, signal) { 3165 if (!patchRoutesOnNavigationImpl) { 3166 return { 3167 type: "success", 3168 matches 3169 }; 3170 } 3171 let partialMatches = matches; 3172 while (true) { 3173 let isNonHMR = inFlightDataRoutes == null; 3174 let routesToUse = inFlightDataRoutes || dataRoutes; 3175 let localManifest = manifest; 3176 try { 3177 await patchRoutesOnNavigationImpl({ 3178 path: pathname, 3179 matches: partialMatches, 3180 patch: (routeId, children) => { 3181 if (signal.aborted) return; 3182 patchRoutesImpl(routeId, children, routesToUse, localManifest, mapRouteProperties); 3183 } 3184 }); 3185 } catch (e) { 3186 return { 3187 type: "error", 3188 error: e, 3189 partialMatches 3190 }; 3191 } finally { 3192 // If we are not in the middle of an HMR revalidation and we changed the 3193 // routes, provide a new identity so when we `updateState` at the end of 3194 // this navigation/fetch `router.routes` will be a new identity and 3195 // trigger a re-run of memoized `router.routes` dependencies. 3196 // HMR will already update the identity and reflow when it lands 3197 // `inFlightDataRoutes` in `completeNavigation` 3198 if (isNonHMR && !signal.aborted) { 3199 dataRoutes = [...dataRoutes]; 3200 } 3201 } 3202 if (signal.aborted) { 3203 return { 3204 type: "aborted" 3205 }; 3206 } 3207 let newMatches = matchRoutes(routesToUse, pathname, basename); 3208 if (newMatches) { 3209 return { 3210 type: "success", 3211 matches: newMatches 3212 }; 3213 } 3214 let newPartialMatches = matchRoutesImpl(routesToUse, pathname, basename, true); 3215 // Avoid loops if the second pass results in the same partial matches 3216 if (!newPartialMatches || partialMatches.length === newPartialMatches.length && partialMatches.every((m, i) => m.route.id === newPartialMatches[i].route.id)) { 3217 return { 3218 type: "success", 3219 matches: null 3220 }; 3221 } 3222 partialMatches = newPartialMatches; 3223 } 3224 } 3225 function _internalSetRoutes(newRoutes) { 3226 manifest = {}; 3227 inFlightDataRoutes = convertRoutesToDataRoutes(newRoutes, mapRouteProperties, undefined, manifest); 3228 } 3229 function patchRoutes(routeId, children) { 3230 let isNonHMR = inFlightDataRoutes == null; 3231 let routesToUse = inFlightDataRoutes || dataRoutes; 3232 patchRoutesImpl(routeId, children, routesToUse, manifest, mapRouteProperties); 3233 // If we are not in the middle of an HMR revalidation and we changed the 3234 // routes, provide a new identity and trigger a reflow via `updateState` 3235 // to re-run memoized `router.routes` dependencies. 3236 // HMR will already update the identity and reflow when it lands 3237 // `inFlightDataRoutes` in `completeNavigation` 3238 if (isNonHMR) { 3239 dataRoutes = [...dataRoutes]; 3240 updateState({}); 3241 } 3242 } 3243 router = { 3244 get basename() { 3245 return basename; 3246 }, 3247 get future() { 3248 return future; 3249 }, 3250 get state() { 3251 return state; 3252 }, 3253 get routes() { 3254 return dataRoutes; 3255 }, 3256 get window() { 3257 return routerWindow; 3258 }, 3259 initialize, 3260 subscribe, 3261 enableScrollRestoration, 3262 navigate, 3263 fetch, 3264 revalidate, 3265 // Passthrough to history-aware createHref used by useHref so we get proper 3266 // hash-aware URLs in DOM paths 3267 createHref: to => init.history.createHref(to), 3268 encodeLocation: to => init.history.encodeLocation(to), 3269 getFetcher, 3270 deleteFetcher: deleteFetcherAndUpdateState, 3271 dispose, 3272 getBlocker, 3273 deleteBlocker, 3274 patchRoutes, 3275 _internalFetchControllers: fetchControllers, 3276 _internalActiveDeferreds: activeDeferreds, 3277 // TODO: Remove setRoutes, it's temporary to avoid dealing with 3278 // updating the tree while validating the update algorithm. 3279 _internalSetRoutes 3280 }; 3281 return router; 3282} 3283//#endregion 3284//////////////////////////////////////////////////////////////////////////////// 3285//#region createStaticHandler 3286//////////////////////////////////////////////////////////////////////////////// 3287const UNSAFE_DEFERRED_SYMBOL = Symbol("deferred"); 3288function createStaticHandler(routes, opts) { 3289 invariant(routes.length > 0, "You must provide a non-empty routes array to createStaticHandler"); 3290 let manifest = {}; 3291 let basename = (opts ? opts.basename : null) || "/"; 3292 let mapRouteProperties; 3293 if (opts != null && opts.mapRouteProperties) { 3294 mapRouteProperties = opts.mapRouteProperties; 3295 } else if (opts != null && opts.detectErrorBoundary) { 3296 // If they are still using the deprecated version, wrap it with the new API 3297 let detectErrorBoundary = opts.detectErrorBoundary; 3298 mapRouteProperties = route => ({ 3299 hasErrorBoundary: detectErrorBoundary(route) 3300 }); 3301 } else { 3302 mapRouteProperties = defaultMapRouteProperties; 3303 } 3304 // Config driven behavior flags 3305 let future = _extends({ 3306 v7_relativeSplatPath: false, 3307 v7_throwAbortReason: false 3308 }, opts ? opts.future : null); 3309 let dataRoutes = convertRoutesToDataRoutes(routes, mapRouteProperties, undefined, manifest); 3310 /** 3311 * The query() method is intended for document requests, in which we want to 3312 * call an optional action and potentially multiple loaders for all nested 3313 * routes. It returns a StaticHandlerContext object, which is very similar 3314 * to the router state (location, loaderData, actionData, errors, etc.) and 3315 * also adds SSR-specific information such as the statusCode and headers 3316 * from action/loaders Responses. 3317 * 3318 * It _should_ never throw and should report all errors through the 3319 * returned context.errors object, properly associating errors to their error 3320 * boundary. Additionally, it tracks _deepestRenderedBoundaryId which can be 3321 * used to emulate React error boundaries during SSr by performing a second 3322 * pass only down to the boundaryId. 3323 * 3324 * The one exception where we do not return a StaticHandlerContext is when a 3325 * redirect response is returned or thrown from any action/loader. We 3326 * propagate that out and return the raw Response so the HTTP server can 3327 * return it directly. 3328 * 3329 * - `opts.requestContext` is an optional server context that will be passed 3330 * to actions/loaders in the `context` parameter 3331 * - `opts.skipLoaderErrorBubbling` is an optional parameter that will prevent 3332 * the bubbling of errors which allows single-fetch-type implementations 3333 * where the client will handle the bubbling and we may need to return data 3334 * for the handling route 3335 */ 3336 async function query(request, _temp3) { 3337 let { 3338 requestContext, 3339 skipLoaderErrorBubbling, 3340 dataStrategy 3341 } = _temp3 === void 0 ? {} : _temp3; 3342 let url = new URL(request.url); 3343 let method = request.method; 3344 let location = createLocation("", createPath(url), null, "default"); 3345 let matches = matchRoutes(dataRoutes, location, basename); 3346 // SSR supports HEAD requests while SPA doesn't 3347 if (!isValidMethod(method) && method !== "HEAD") { 3348 let error = getInternalRouterError(405, { 3349 method 3350 }); 3351 let { 3352 matches: methodNotAllowedMatches, 3353 route 3354 } = getShortCircuitMatches(dataRoutes); 3355 return { 3356 basename, 3357 location, 3358 matches: methodNotAllowedMatches, 3359 loaderData: {}, 3360 actionData: null, 3361 errors: { 3362 [route.id]: error 3363 }, 3364 statusCode: error.status, 3365 loaderHeaders: {}, 3366 actionHeaders: {}, 3367 activeDeferreds: null 3368 }; 3369 } else if (!matches) { 3370 let error = getInternalRouterError(404, { 3371 pathname: location.pathname 3372 }); 3373 let { 3374 matches: notFoundMatches, 3375 route 3376 } = getShortCircuitMatches(dataRoutes); 3377 return { 3378 basename, 3379 location, 3380 matches: notFoundMatches, 3381 loaderData: {}, 3382 actionData: null, 3383 errors: { 3384 [route.id]: error 3385 }, 3386 statusCode: error.status, 3387 loaderHeaders: {}, 3388 actionHeaders: {}, 3389 activeDeferreds: null 3390 }; 3391 } 3392 let result = await queryImpl(request, location, matches, requestContext, dataStrategy || null, skipLoaderErrorBubbling === true, null); 3393 if (isResponse(result)) { 3394 return result; 3395 } 3396 // When returning StaticHandlerContext, we patch back in the location here 3397 // since we need it for React Context. But this helps keep our submit and 3398 // loadRouteData operating on a Request instead of a Location 3399 return _extends({ 3400 location, 3401 basename 3402 }, result); 3403 } 3404 /** 3405 * The queryRoute() method is intended for targeted route requests, either 3406 * for fetch ?_data requests or resource route requests. In this case, we 3407 * are only ever calling a single action or loader, and we are returning the 3408 * returned value directly. In most cases, this will be a Response returned 3409 * from the action/loader, but it may be a primitive or other value as well - 3410 * and in such cases the calling context should handle that accordingly. 3411 * 3412 * We do respect the throw/return differentiation, so if an action/loader 3413 * throws, then this method will throw the value. This is important so we 3414 * can do proper boundary identification in Remix where a thrown Response 3415 * must go to the Catch Boundary but a returned Response is happy-path. 3416 * 3417 * One thing to note is that any Router-initiated Errors that make sense 3418 * to associate with a status code will be thrown as an ErrorResponse 3419 * instance which include the raw Error, such that the calling context can 3420 * serialize the error as they see fit while including the proper response 3421 * code. Examples here are 404 and 405 errors that occur prior to reaching 3422 * any user-defined loaders. 3423 * 3424 * - `opts.routeId` allows you to specify the specific route handler to call. 3425 * If not provided the handler will determine the proper route by matching 3426 * against `request.url` 3427 * - `opts.requestContext` is an optional server context that will be passed 3428 * to actions/loaders in the `context` parameter 3429 */ 3430 async function queryRoute(request, _temp4) { 3431 let { 3432 routeId, 3433 requestContext, 3434 dataStrategy 3435 } = _temp4 === void 0 ? {} : _temp4; 3436 let url = new URL(request.url); 3437 let method = request.method; 3438 let location = createLocation("", createPath(url), null, "default"); 3439 let matches = matchRoutes(dataRoutes, location, basename); 3440 // SSR supports HEAD requests while SPA doesn't 3441 if (!isValidMethod(method) && method !== "HEAD" && method !== "OPTIONS") { 3442 throw getInternalRouterError(405, { 3443 method 3444 }); 3445 } else if (!matches) { 3446 throw getInternalRouterError(404, { 3447 pathname: location.pathname 3448 }); 3449 } 3450 let match = routeId ? matches.find(m => m.route.id === routeId) : getTargetMatch(matches, location); 3451 if (routeId && !match) { 3452 throw getInternalRouterError(403, { 3453 pathname: location.pathname, 3454 routeId 3455 }); 3456 } else if (!match) { 3457 // This should never hit I don't think? 3458 throw getInternalRouterError(404, { 3459 pathname: location.pathname 3460 }); 3461 } 3462 let result = await queryImpl(request, location, matches, requestContext, dataStrategy || null, false, match); 3463 if (isResponse(result)) { 3464 return result; 3465 } 3466 let error = result.errors ? Object.values(result.errors)[0] : undefined; 3467 if (error !== undefined) { 3468 // If we got back result.errors, that means the loader/action threw 3469 // _something_ that wasn't a Response, but it's not guaranteed/required 3470 // to be an `instanceof Error` either, so we have to use throw here to 3471 // preserve the "error" state outside of queryImpl. 3472 throw error; 3473 } 3474 // Pick off the right state value to return 3475 if (result.actionData) { 3476 return Object.values(result.actionData)[0]; 3477 } 3478 if (result.loaderData) { 3479 var _result$activeDeferre; 3480 let data = Object.values(result.loaderData)[0]; 3481 if ((_result$activeDeferre = result.activeDeferreds) != null && _result$activeDeferre[match.route.id]) { 3482 data[UNSAFE_DEFERRED_SYMBOL] = result.activeDeferreds[match.route.id]; 3483 } 3484 return data; 3485 } 3486 return undefined; 3487 } 3488 async function queryImpl(request, location, matches, requestContext, dataStrategy, skipLoaderErrorBubbling, routeMatch) { 3489 invariant(request.signal, "query()/queryRoute() requests must contain an AbortController signal"); 3490 try { 3491 if (isMutationMethod(request.method.toLowerCase())) { 3492 let result = await submit(request, matches, routeMatch || getTargetMatch(matches, location), requestContext, dataStrategy, skipLoaderErrorBubbling, routeMatch != null); 3493 return result; 3494 } 3495 let result = await loadRouteData(request, matches, requestContext, dataStrategy, skipLoaderErrorBubbling, routeMatch); 3496 return isResponse(result) ? result : _extends({}, result, { 3497 actionData: null, 3498 actionHeaders: {} 3499 }); 3500 } catch (e) { 3501 // If the user threw/returned a Response in callLoaderOrAction for a 3502 // `queryRoute` call, we throw the `DataStrategyResult` to bail out early 3503 // and then return or throw the raw Response here accordingly 3504 if (isDataStrategyResult(e) && isResponse(e.result)) { 3505 if (e.type === ResultType.error) { 3506 throw e.result; 3507 } 3508 return e.result; 3509 } 3510 // Redirects are always returned since they don't propagate to catch 3511 // boundaries 3512 if (isRedirectResponse(e)) { 3513 return e; 3514 } 3515 throw e; 3516 } 3517 } 3518 async function submit(request, matches, actionMatch, requestContext, dataStrategy, skipLoaderErrorBubbling, isRouteRequest) { 3519 let result; 3520 if (!actionMatch.route.action && !actionMatch.route.lazy) { 3521 let error = getInternalRouterError(405, { 3522 method: request.method, 3523 pathname: new URL(request.url).pathname, 3524 routeId: actionMatch.route.id 3525 }); 3526 if (isRouteRequest) { 3527 throw error; 3528 } 3529 result = { 3530 type: ResultType.error, 3531 error 3532 }; 3533 } else { 3534 let results = await callDataStrategy("action", request, [actionMatch], matches, isRouteRequest, requestContext, dataStrategy); 3535 result = results[actionMatch.route.id]; 3536 if (request.signal.aborted) { 3537 throwStaticHandlerAbortedError(request, isRouteRequest, future); 3538 } 3539 } 3540 if (isRedirectResult(result)) { 3541 // Uhhhh - this should never happen, we should always throw these from 3542 // callLoaderOrAction, but the type narrowing here keeps TS happy and we 3543 // can get back on the "throw all redirect responses" train here should 3544 // this ever happen :/ 3545 throw new Response(null, { 3546 status: result.response.status, 3547 headers: { 3548 Location: result.response.headers.get("Location") 3549 } 3550 }); 3551 } 3552 if (isDeferredResult(result)) { 3553 let error = getInternalRouterError(400, { 3554 type: "defer-action" 3555 }); 3556 if (isRouteRequest) { 3557 throw error; 3558 } 3559 result = { 3560 type: ResultType.error, 3561 error 3562 }; 3563 } 3564 if (isRouteRequest) { 3565 // Note: This should only be non-Response values if we get here, since 3566 // isRouteRequest should throw any Response received in callLoaderOrAction 3567 if (isErrorResult(result)) { 3568 throw result.error; 3569 } 3570 return { 3571 matches: [actionMatch], 3572 loaderData: {}, 3573 actionData: { 3574 [actionMatch.route.id]: result.data 3575 }, 3576 errors: null, 3577 // Note: statusCode + headers are unused here since queryRoute will 3578 // return the raw Response or value 3579 statusCode: 200, 3580 loaderHeaders: {}, 3581 actionHeaders: {}, 3582 activeDeferreds: null 3583 }; 3584 } 3585 // Create a GET request for the loaders 3586 let loaderRequest = new Request(request.url, { 3587 headers: request.headers, 3588 redirect: request.redirect, 3589 signal: request.signal 3590 }); 3591 if (isErrorResult(result)) { 3592 // Store off the pending error - we use it to determine which loaders 3593 // to call and will commit it when we complete the navigation 3594 let boundaryMatch = skipLoaderErrorBubbling ? actionMatch : findNearestBoundary(matches, actionMatch.route.id); 3595 let context = await loadRouteData(loaderRequest, matches, requestContext, dataStrategy, skipLoaderErrorBubbling, null, [boundaryMatch.route.id, result]); 3596 // action status codes take precedence over loader status codes 3597 return _extends({}, context, { 3598 statusCode: isRouteErrorResponse(result.error) ? result.error.status : result.statusCode != null ? result.statusCode : 500, 3599 actionData: null, 3600 actionHeaders: _extends({}, result.headers ? { 3601 [actionMatch.route.id]: result.headers 3602 } : {}) 3603 }); 3604 } 3605 let context = await loadRouteData(loaderRequest, matches, requestContext, dataStrategy, skipLoaderErrorBubbling, null); 3606 return _extends({}, context, { 3607 actionData: { 3608 [actionMatch.route.id]: result.data 3609 } 3610 }, result.statusCode ? { 3611 statusCode: result.statusCode 3612 } : {}, { 3613 actionHeaders: result.headers ? { 3614 [actionMatch.route.id]: result.headers 3615 } : {} 3616 }); 3617 } 3618 async function loadRouteData(request, matches, requestContext, dataStrategy, skipLoaderErrorBubbling, routeMatch, pendingActionResult) { 3619 let isRouteRequest = routeMatch != null; 3620 // Short circuit if we have no loaders to run (queryRoute()) 3621 if (isRouteRequest && !(routeMatch != null && routeMatch.route.loader) && !(routeMatch != null && routeMatch.route.lazy)) { 3622 throw getInternalRouterError(400, { 3623 method: request.method, 3624 pathname: new URL(request.url).pathname, 3625 routeId: routeMatch == null ? void 0 : routeMatch.route.id 3626 }); 3627 } 3628 let requestMatches = routeMatch ? [routeMatch] : pendingActionResult && isErrorResult(pendingActionResult[1]) ? getLoaderMatchesUntilBoundary(matches, pendingActionResult[0]) : matches; 3629 let matchesToLoad = requestMatches.filter(m => m.route.loader || m.route.lazy); 3630 // Short circuit if we have no loaders to run (query()) 3631 if (matchesToLoad.length === 0) { 3632 return { 3633 matches, 3634 // Add a null for all matched routes for proper revalidation on the client 3635 loaderData: matches.reduce((acc, m) => Object.assign(acc, { 3636 [m.route.id]: null 3637 }), {}), 3638 errors: pendingActionResult && isErrorResult(pendingActionResult[1]) ? { 3639 [pendingActionResult[0]]: pendingActionResult[1].error 3640 } : null, 3641 statusCode: 200, 3642 loaderHeaders: {}, 3643 activeDeferreds: null 3644 }; 3645 } 3646 let results = await callDataStrategy("loader", request, matchesToLoad, matches, isRouteRequest, requestContext, dataStrategy); 3647 if (request.signal.aborted) { 3648 throwStaticHandlerAbortedError(request, isRouteRequest, future); 3649 } 3650 // Process and commit output from loaders 3651 let activeDeferreds = new Map(); 3652 let context = processRouteLoaderData(matches, results, pendingActionResult, activeDeferreds, skipLoaderErrorBubbling); 3653 // Add a null for any non-loader matches for proper revalidation on the client 3654 let executedLoaders = new Set(matchesToLoad.map(match => match.route.id)); 3655 matches.forEach(match => { 3656 if (!executedLoaders.has(match.route.id)) { 3657 context.loaderData[match.route.id] = null; 3658 } 3659 }); 3660 return _extends({}, context, { 3661 matches, 3662 activeDeferreds: activeDeferreds.size > 0 ? Object.fromEntries(activeDeferreds.entries()) : null 3663 }); 3664 } 3665 // Utility wrapper for calling dataStrategy server-side without having to 3666 // pass around the manifest, mapRouteProperties, etc. 3667 async function callDataStrategy(type, request, matchesToLoad, matches, isRouteRequest, requestContext, dataStrategy) { 3668 let results = await callDataStrategyImpl(dataStrategy || defaultDataStrategy, type, null, request, matchesToLoad, matches, null, manifest, mapRouteProperties, requestContext); 3669 let dataResults = {}; 3670 await Promise.all(matches.map(async match => { 3671 if (!(match.route.id in results)) { 3672 return; 3673 } 3674 let result = results[match.route.id]; 3675 if (isRedirectDataStrategyResultResult(result)) { 3676 let response = result.result; 3677 // Throw redirects and let the server handle them with an HTTP redirect 3678 throw normalizeRelativeRoutingRedirectResponse(response, request, match.route.id, matches, basename, future.v7_relativeSplatPath); 3679 } 3680 if (isResponse(result.result) && isRouteRequest) { 3681 // For SSR single-route requests, we want to hand Responses back 3682 // directly without unwrapping 3683 throw result; 3684 } 3685 dataResults[match.route.id] = await convertDataStrategyResultToDataResult(result); 3686 })); 3687 return dataResults; 3688 } 3689 return { 3690 dataRoutes, 3691 query, 3692 queryRoute 3693 }; 3694} 3695//#endregion 3696//////////////////////////////////////////////////////////////////////////////// 3697//#region Helpers 3698//////////////////////////////////////////////////////////////////////////////// 3699/** 3700 * Given an existing StaticHandlerContext and an error thrown at render time, 3701 * provide an updated StaticHandlerContext suitable for a second SSR render 3702 */ 3703function getStaticContextFromError(routes, context, error) { 3704 let newContext = _extends({}, context, { 3705 statusCode: isRouteErrorResponse(error) ? error.status : 500, 3706 errors: { 3707 [context._deepestRenderedBoundaryId || routes[0].id]: error 3708 } 3709 }); 3710 return newContext; 3711} 3712function throwStaticHandlerAbortedError(request, isRouteRequest, future) { 3713 if (future.v7_throwAbortReason && request.signal.reason !== undefined) { 3714 throw request.signal.reason; 3715 } 3716 let method = isRouteRequest ? "queryRoute" : "query"; 3717 throw new Error(method + "() call aborted: " + request.method + " " + request.url); 3718} 3719function isSubmissionNavigation(opts) { 3720 return opts != null && ("formData" in opts && opts.formData != null || "body" in opts && opts.body !== undefined); 3721} 3722function normalizeTo(location, matches, basename, prependBasename, to, v7_relativeSplatPath, fromRouteId, relative) { 3723 let contextualMatches; 3724 let activeRouteMatch; 3725 if (fromRouteId) { 3726 // Grab matches up to the calling route so our route-relative logic is 3727 // relative to the correct source route 3728 contextualMatches = []; 3729 for (let match of matches) { 3730 contextualMatches.push(match); 3731 if (match.route.id === fromRouteId) { 3732 activeRouteMatch = match; 3733 break; 3734 } 3735 } 3736 } else { 3737 contextualMatches = matches; 3738 activeRouteMatch = matches[matches.length - 1]; 3739 } 3740 // Resolve the relative path 3741 let path = resolveTo(to ? to : ".", getResolveToMatches(contextualMatches, v7_relativeSplatPath), stripBasename(location.pathname, basename) || location.pathname, relative === "path"); 3742 // When `to` is not specified we inherit search/hash from the current 3743 // location, unlike when to="." and we just inherit the path. 3744 // See https://github.com/remix-run/remix/issues/927 3745 if (to == null) { 3746 path.search = location.search; 3747 path.hash = location.hash; 3748 } 3749 // Account for `?index` params when routing to the current location 3750 if ((to == null || to === "" || to === ".") && activeRouteMatch) { 3751 let nakedIndex = hasNakedIndexQuery(path.search); 3752 if (activeRouteMatch.route.index && !nakedIndex) { 3753 // Add one when we're targeting an index route 3754 path.search = path.search ? path.search.replace(/^\?/, "?index&") : "?index"; 3755 } else if (!activeRouteMatch.route.index && nakedIndex) { 3756 // Remove existing ones when we're not 3757 let params = new URLSearchParams(path.search); 3758 let indexValues = params.getAll("index"); 3759 params.delete("index"); 3760 indexValues.filter(v => v).forEach(v => params.append("index", v)); 3761 let qs = params.toString(); 3762 path.search = qs ? "?" + qs : ""; 3763 } 3764 } 3765 // If we're operating within a basename, prepend it to the pathname. If 3766 // this is a root navigation, then just use the raw basename which allows 3767 // the basename to have full control over the presence of a trailing slash 3768 // on root actions 3769 if (prependBasename && basename !== "/") { 3770 path.pathname = path.pathname === "/" ? basename : joinPaths([basename, path.pathname]); 3771 } 3772 return createPath(path); 3773} 3774// Normalize navigation options by converting formMethod=GET formData objects to 3775// URLSearchParams so they behave identically to links with query params 3776function normalizeNavigateOptions(normalizeFormMethod, isFetcher, path, opts) { 3777 // Return location verbatim on non-submission navigations 3778 if (!opts || !isSubmissionNavigation(opts)) { 3779 return { 3780 path 3781 }; 3782 } 3783 if (opts.formMethod && !isValidMethod(opts.formMethod)) { 3784 return { 3785 path, 3786 error: getInternalRouterError(405, { 3787 method: opts.formMethod 3788 }) 3789 }; 3790 } 3791 let getInvalidBodyError = () => ({ 3792 path, 3793 error: getInternalRouterError(400, { 3794 type: "invalid-body" 3795 }) 3796 }); 3797 // Create a Submission on non-GET navigations 3798 let rawFormMethod = opts.formMethod || "get"; 3799 let formMethod = normalizeFormMethod ? rawFormMethod.toUpperCase() : rawFormMethod.toLowerCase(); 3800 let formAction = stripHashFromPath(path); 3801 if (opts.body !== undefined) { 3802 if (opts.formEncType === "text/plain") { 3803 // text only support POST/PUT/PATCH/DELETE submissions 3804 if (!isMutationMethod(formMethod)) { 3805 return getInvalidBodyError(); 3806 } 3807 let text = typeof opts.body === "string" ? opts.body : opts.body instanceof FormData || opts.body instanceof URLSearchParams ? 3808 // https://html.spec.whatwg.org/multipage/form-control-infrastructure.html#plain-text-form-data 3809 Array.from(opts.body.entries()).reduce((acc, _ref3) => { 3810 let [name, value] = _ref3; 3811 return "" + acc + name + "=" + value + "\n"; 3812 }, "") : String(opts.body); 3813 return { 3814 path, 3815 submission: { 3816 formMethod, 3817 formAction, 3818 formEncType: opts.formEncType, 3819 formData: undefined, 3820 json: undefined, 3821 text 3822 } 3823 }; 3824 } else if (opts.formEncType === "application/json") { 3825 // json only supports POST/PUT/PATCH/DELETE submissions 3826 if (!isMutationMethod(formMethod)) { 3827 return getInvalidBodyError(); 3828 } 3829 try { 3830 let json = typeof opts.body === "string" ? JSON.parse(opts.body) : opts.body; 3831 return { 3832 path, 3833 submission: { 3834 formMethod, 3835 formAction, 3836 formEncType: opts.formEncType, 3837 formData: undefined, 3838 json, 3839 text: undefined 3840 } 3841 }; 3842 } catch (e) { 3843 return getInvalidBodyError(); 3844 } 3845 } 3846 } 3847 invariant(typeof FormData === "function", "FormData is not available in this environment"); 3848 let searchParams; 3849 let formData; 3850 if (opts.formData) { 3851 searchParams = convertFormDataToSearchParams(opts.formData); 3852 formData = opts.formData; 3853 } else if (opts.body instanceof FormData) { 3854 searchParams = convertFormDataToSearchParams(opts.body); 3855 formData = opts.body; 3856 } else if (opts.body instanceof URLSearchParams) { 3857 searchParams = opts.body; 3858 formData = convertSearchParamsToFormData(searchParams); 3859 } else if (opts.body == null) { 3860 searchParams = new URLSearchParams(); 3861 formData = new FormData(); 3862 } else { 3863 try { 3864 searchParams = new URLSearchParams(opts.body); 3865 formData = convertSearchParamsToFormData(searchParams); 3866 } catch (e) { 3867 return getInvalidBodyError(); 3868 } 3869 } 3870 let submission = { 3871 formMethod, 3872 formAction, 3873 formEncType: opts && opts.formEncType || "application/x-www-form-urlencoded", 3874 formData, 3875 json: undefined, 3876 text: undefined 3877 }; 3878 if (isMutationMethod(submission.formMethod)) { 3879 return { 3880 path, 3881 submission 3882 }; 3883 } 3884 // Flatten submission onto URLSearchParams for GET submissions 3885 let parsedPath = parsePath(path); 3886 // On GET navigation submissions we can drop the ?index param from the 3887 // resulting location since all loaders will run. But fetcher GET submissions 3888 // only run a single loader so we need to preserve any incoming ?index params 3889 if (isFetcher && parsedPath.search && hasNakedIndexQuery(parsedPath.search)) { 3890 searchParams.append("index", ""); 3891 } 3892 parsedPath.search = "?" + searchParams; 3893 return { 3894 path: createPath(parsedPath), 3895 submission 3896 }; 3897} 3898// Filter out all routes at/below any caught error as they aren't going to 3899// render so we don't need to load them 3900function getLoaderMatchesUntilBoundary(matches, boundaryId, includeBoundary) { 3901 if (includeBoundary === void 0) { 3902 includeBoundary = false; 3903 } 3904 let index = matches.findIndex(m => m.route.id === boundaryId); 3905 if (index >= 0) { 3906 return matches.slice(0, includeBoundary ? index + 1 : index); 3907 } 3908 return matches; 3909} 3910function getMatchesToLoad(history, state, matches, submission, location, initialHydration, skipActionErrorRevalidation, isRevalidationRequired, cancelledDeferredRoutes, cancelledFetcherLoads, deletedFetchers, fetchLoadMatches, fetchRedirectIds, routesToUse, basename, pendingActionResult) { 3911 let actionResult = pendingActionResult ? isErrorResult(pendingActionResult[1]) ? pendingActionResult[1].error : pendingActionResult[1].data : undefined; 3912 let currentUrl = history.createURL(state.location); 3913 let nextUrl = history.createURL(location); 3914 // Pick navigation matches that are net-new or qualify for revalidation 3915 let boundaryMatches = matches; 3916 if (initialHydration && state.errors) { 3917 // On initial hydration, only consider matches up to _and including_ the boundary. 3918 // This is inclusive to handle cases where a server loader ran successfully, 3919 // a child server loader bubbled up to this route, but this route has 3920 // `clientLoader.hydrate` so we want to still run the `clientLoader` so that 3921 // we have a complete version of `loaderData` 3922 boundaryMatches = getLoaderMatchesUntilBoundary(matches, Object.keys(state.errors)[0], true); 3923 } else if (pendingActionResult && isErrorResult(pendingActionResult[1])) { 3924 // If an action threw an error, we call loaders up to, but not including the 3925 // boundary 3926 boundaryMatches = getLoaderMatchesUntilBoundary(matches, pendingActionResult[0]); 3927 } 3928 // Don't revalidate loaders by default after action 4xx/5xx responses 3929 // when the flag is enabled. They can still opt-into revalidation via 3930 // `shouldRevalidate` via `actionResult` 3931 let actionStatus = pendingActionResult ? pendingActionResult[1].statusCode : undefined; 3932 let shouldSkipRevalidation = skipActionErrorRevalidation && actionStatus && actionStatus >= 400; 3933 let navigationMatches = boundaryMatches.filter((match, index) => { 3934 let { 3935 route 3936 } = match; 3937 if (route.lazy) { 3938 // We haven't loaded this route yet so we don't know if it's got a loader! 3939 return true; 3940 } 3941 if (route.loader == null) { 3942 return false; 3943 } 3944 if (initialHydration) { 3945 return shouldLoadRouteOnHydration(route, state.loaderData, state.errors); 3946 } 3947 // Always call the loader on new route instances and pending defer cancellations 3948 if (isNewLoader(state.loaderData, state.matches[index], match) || cancelledDeferredRoutes.some(id => id === match.route.id)) { 3949 return true; 3950 } 3951 // This is the default implementation for when we revalidate. If the route 3952 // provides it's own implementation, then we give them full control but 3953 // provide this value so they can leverage it if needed after they check 3954 // their own specific use cases 3955 let currentRouteMatch = state.matches[index]; 3956 let nextRouteMatch = match; 3957 return shouldRevalidateLoader(match, _extends({ 3958 currentUrl, 3959 currentParams: currentRouteMatch.params, 3960 nextUrl, 3961 nextParams: nextRouteMatch.params 3962 }, submission, { 3963 actionResult, 3964 actionStatus, 3965 defaultShouldRevalidate: shouldSkipRevalidation ? false : 3966 // Forced revalidation due to submission, useRevalidator, or X-Remix-Revalidate 3967 isRevalidationRequired || currentUrl.pathname + currentUrl.search === nextUrl.pathname + nextUrl.search || 3968 // Search params affect all loaders 3969 currentUrl.search !== nextUrl.search || isNewRouteInstance(currentRouteMatch, nextRouteMatch) 3970 })); 3971 }); 3972 // Pick fetcher.loads that need to be revalidated 3973 let revalidatingFetchers = []; 3974 fetchLoadMatches.forEach((f, key) => { 3975 // Don't revalidate: 3976 // - on initial hydration (shouldn't be any fetchers then anyway) 3977 // - if fetcher won't be present in the subsequent render 3978 // - no longer matches the URL (v7_fetcherPersist=false) 3979 // - was unmounted but persisted due to v7_fetcherPersist=true 3980 if (initialHydration || !matches.some(m => m.route.id === f.routeId) || deletedFetchers.has(key)) { 3981 return; 3982 } 3983 let fetcherMatches = matchRoutes(routesToUse, f.path, basename); 3984 // If the fetcher path no longer matches, push it in with null matches so 3985 // we can trigger a 404 in callLoadersAndMaybeResolveData. Note this is 3986 // currently only a use-case for Remix HMR where the route tree can change 3987 // at runtime and remove a route previously loaded via a fetcher 3988 if (!fetcherMatches) { 3989 revalidatingFetchers.push({ 3990 key, 3991 routeId: f.routeId, 3992 path: f.path, 3993 matches: null, 3994 match: null, 3995 controller: null 3996 }); 3997 return; 3998 } 3999 // Revalidating fetchers are decoupled from the route matches since they 4000 // load from a static href. They revalidate based on explicit revalidation 4001 // (submission, useRevalidator, or X-Remix-Revalidate) 4002 let fetcher = state.fetchers.get(key); 4003 let fetcherMatch = getTargetMatch(fetcherMatches, f.path); 4004 let shouldRevalidate = false; 4005 if (fetchRedirectIds.has(key)) { 4006 // Never trigger a revalidation of an actively redirecting fetcher 4007 shouldRevalidate = false; 4008 } else if (cancelledFetcherLoads.has(key)) { 4009 // Always mark for revalidation if the fetcher was cancelled 4010 cancelledFetcherLoads.delete(key); 4011 shouldRevalidate = true; 4012 } else if (fetcher && fetcher.state !== "idle" && fetcher.data === undefined) { 4013 // If the fetcher hasn't ever completed loading yet, then this isn't a 4014 // revalidation, it would just be a brand new load if an explicit 4015 // revalidation is required 4016 shouldRevalidate = isRevalidationRequired; 4017 } else { 4018 // Otherwise fall back on any user-defined shouldRevalidate, defaulting 4019 // to explicit revalidations only 4020 shouldRevalidate = shouldRevalidateLoader(fetcherMatch, _extends({ 4021 currentUrl, 4022 currentParams: state.matches[state.matches.length - 1].params, 4023 nextUrl, 4024 nextParams: matches[matches.length - 1].params 4025 }, submission, { 4026 actionResult, 4027 actionStatus, 4028 defaultShouldRevalidate: shouldSkipRevalidation ? false : isRevalidationRequired 4029 })); 4030 } 4031 if (shouldRevalidate) { 4032 revalidatingFetchers.push({ 4033 key, 4034 routeId: f.routeId, 4035 path: f.path, 4036 matches: fetcherMatches, 4037 match: fetcherMatch, 4038 controller: new AbortController() 4039 }); 4040 } 4041 }); 4042 return [navigationMatches, revalidatingFetchers]; 4043} 4044function shouldLoadRouteOnHydration(route, loaderData, errors) { 4045 // We dunno if we have a loader - gotta find out! 4046 if (route.lazy) { 4047 return true; 4048 } 4049 // No loader, nothing to initialize 4050 if (!route.loader) { 4051 return false; 4052 } 4053 let hasData = loaderData != null && loaderData[route.id] !== undefined; 4054 let hasError = errors != null && errors[route.id] !== undefined; 4055 // Don't run if we error'd during SSR 4056 if (!hasData && hasError) { 4057 return false; 4058 } 4059 // Explicitly opting-in to running on hydration 4060 if (typeof route.loader === "function" && route.loader.hydrate === true) { 4061 return true; 4062 } 4063 // Otherwise, run if we're not yet initialized with anything 4064 return !hasData && !hasError; 4065} 4066function isNewLoader(currentLoaderData, currentMatch, match) { 4067 let isNew = 4068 // [a] -> [a, b] 4069 !currentMatch || 4070 // [a, b] -> [a, c] 4071 match.route.id !== currentMatch.route.id; 4072 // Handle the case that we don't have data for a re-used route, potentially 4073 // from a prior error or from a cancelled pending deferred 4074 let isMissingData = currentLoaderData[match.route.id] === undefined; 4075 // Always load if this is a net-new route or we don't yet have data 4076 return isNew || isMissingData; 4077} 4078function isNewRouteInstance(currentMatch, match) { 4079 let currentPath = currentMatch.route.path; 4080 return ( 4081 // param change for this match, /users/123 -> /users/456 4082 currentMatch.pathname !== match.pathname || 4083 // splat param changed, which is not present in match.path 4084 // e.g. /files/images/avatar.jpg -> files/finances.xls 4085 currentPath != null && currentPath.endsWith("*") && currentMatch.params["*"] !== match.params["*"] 4086 ); 4087} 4088function shouldRevalidateLoader(loaderMatch, arg) { 4089 if (loaderMatch.route.shouldRevalidate) { 4090 let routeChoice = loaderMatch.route.shouldRevalidate(arg); 4091 if (typeof routeChoice === "boolean") { 4092 return routeChoice; 4093 } 4094 } 4095 return arg.defaultShouldRevalidate; 4096} 4097function patchRoutesImpl(routeId, children, routesToUse, manifest, mapRouteProperties) { 4098 var _childrenToPatch; 4099 let childrenToPatch; 4100 if (routeId) { 4101 let route = manifest[routeId]; 4102 invariant(route, "No route found to patch children into: routeId = " + routeId); 4103 if (!route.children) { 4104 route.children = []; 4105 } 4106 childrenToPatch = route.children; 4107 } else { 4108 childrenToPatch = routesToUse; 4109 } 4110 // Don't patch in routes we already know about so that `patch` is idempotent 4111 // to simplify user-land code. This is useful because we re-call the 4112 // `patchRoutesOnNavigation` function for matched routes with params. 4113 let uniqueChildren = children.filter(newRoute => !childrenToPatch.some(existingRoute => isSameRoute(newRoute, existingRoute))); 4114 let newRoutes = convertRoutesToDataRoutes(uniqueChildren, mapRouteProperties, [routeId || "_", "patch", String(((_childrenToPatch = childrenToPatch) == null ? void 0 : _childrenToPatch.length) || "0")], manifest); 4115 childrenToPatch.push(...newRoutes); 4116} 4117function isSameRoute(newRoute, existingRoute) { 4118 // Most optimal check is by id 4119 if ("id" in newRoute && "id" in existingRoute && newRoute.id === existingRoute.id) { 4120 return true; 4121 } 4122 // Second is by pathing differences 4123 if (!(newRoute.index === existingRoute.index && newRoute.path === existingRoute.path && newRoute.caseSensitive === existingRoute.caseSensitive)) { 4124 return false; 4125 } 4126 // Pathless layout routes are trickier since we need to check children. 4127 // If they have no children then they're the same as far as we can tell 4128 if ((!newRoute.children || newRoute.children.length === 0) && (!existingRoute.children || existingRoute.children.length === 0)) { 4129 return true; 4130 } 4131 // Otherwise, we look to see if every child in the new route is already 4132 // represented in the existing route's children 4133 return newRoute.children.every((aChild, i) => { 4134 var _existingRoute$childr; 4135 return (_existingRoute$childr = existingRoute.children) == null ? void 0 : _existingRoute$childr.some(bChild => isSameRoute(aChild, bChild)); 4136 }); 4137} 4138/** 4139 * Execute route.lazy() methods to lazily load route modules (loader, action, 4140 * shouldRevalidate) and update the routeManifest in place which shares objects 4141 * with dataRoutes so those get updated as well. 4142 */ 4143async function loadLazyRouteModule(route, mapRouteProperties, manifest) { 4144 if (!route.lazy) { 4145 return; 4146 } 4147 let lazyRoute = await route.lazy(); 4148 // If the lazy route function was executed and removed by another parallel 4149 // call then we can return - first lazy() to finish wins because the return 4150 // value of lazy is expected to be static 4151 if (!route.lazy) { 4152 return; 4153 } 4154 let routeToUpdate = manifest[route.id]; 4155 invariant(routeToUpdate, "No route found in manifest"); 4156 // Update the route in place. This should be safe because there's no way 4157 // we could yet be sitting on this route as we can't get there without 4158 // resolving lazy() first. 4159 // 4160 // This is different than the HMR "update" use-case where we may actively be 4161 // on the route being updated. The main concern boils down to "does this 4162 // mutation affect any ongoing navigations or any current state.matches 4163 // values?". If not, it should be safe to update in place. 4164 let routeUpdates = {}; 4165 for (let lazyRouteProperty in lazyRoute) { 4166 let staticRouteValue = routeToUpdate[lazyRouteProperty]; 4167 let isPropertyStaticallyDefined = staticRouteValue !== undefined && 4168 // This property isn't static since it should always be updated based 4169 // on the route updates 4170 lazyRouteProperty !== "hasErrorBoundary"; 4171 warning(!isPropertyStaticallyDefined, "Route \"" + routeToUpdate.id + "\" has a static property \"" + lazyRouteProperty + "\" " + "defined but its lazy function is also returning a value for this property. " + ("The lazy route property \"" + lazyRouteProperty + "\" will be ignored.")); 4172 if (!isPropertyStaticallyDefined && !immutableRouteKeys.has(lazyRouteProperty)) { 4173 routeUpdates[lazyRouteProperty] = lazyRoute[lazyRouteProperty]; 4174 } 4175 } 4176 // Mutate the route with the provided updates. Do this first so we pass 4177 // the updated version to mapRouteProperties 4178 Object.assign(routeToUpdate, routeUpdates); 4179 // Mutate the `hasErrorBoundary` property on the route based on the route 4180 // updates and remove the `lazy` function so we don't resolve the lazy 4181 // route again. 4182 Object.assign(routeToUpdate, _extends({}, mapRouteProperties(routeToUpdate), { 4183 lazy: undefined 4184 })); 4185} 4186// Default implementation of `dataStrategy` which fetches all loaders in parallel 4187async function defaultDataStrategy(_ref4) { 4188 let { 4189 matches 4190 } = _ref4; 4191 let matchesToLoad = matches.filter(m => m.shouldLoad); 4192 let results = await Promise.all(matchesToLoad.map(m => m.resolve())); 4193 return results.reduce((acc, result, i) => Object.assign(acc, { 4194 [matchesToLoad[i].route.id]: result 4195 }), {}); 4196} 4197async function callDataStrategyImpl(dataStrategyImpl, type, state, request, matchesToLoad, matches, fetcherKey, manifest, mapRouteProperties, requestContext) { 4198 let loadRouteDefinitionsPromises = matches.map(m => m.route.lazy ? loadLazyRouteModule(m.route, mapRouteProperties, manifest) : undefined); 4199 let dsMatches = matches.map((match, i) => { 4200 let loadRoutePromise = loadRouteDefinitionsPromises[i]; 4201 let shouldLoad = matchesToLoad.some(m => m.route.id === match.route.id); 4202 // `resolve` encapsulates route.lazy(), executing the loader/action, 4203 // and mapping return values/thrown errors to a `DataStrategyResult`. Users 4204 // can pass a callback to take fine-grained control over the execution 4205 // of the loader/action 4206 let resolve = async handlerOverride => { 4207 if (handlerOverride && request.method === "GET" && (match.route.lazy || match.route.loader)) { 4208 shouldLoad = true; 4209 } 4210 return shouldLoad ? callLoaderOrAction(type, request, match, loadRoutePromise, handlerOverride, requestContext) : Promise.resolve({ 4211 type: ResultType.data, 4212 result: undefined 4213 }); 4214 }; 4215 return _extends({}, match, { 4216 shouldLoad, 4217 resolve 4218 }); 4219 }); 4220 // Send all matches here to allow for a middleware-type implementation. 4221 // handler will be a no-op for unneeded routes and we filter those results 4222 // back out below. 4223 let results = await dataStrategyImpl({ 4224 matches: dsMatches, 4225 request, 4226 params: matches[0].params, 4227 fetcherKey, 4228 context: requestContext 4229 }); 4230 // Wait for all routes to load here but 'swallow the error since we want 4231 // it to bubble up from the `await loadRoutePromise` in `callLoaderOrAction` - 4232 // called from `match.resolve()` 4233 try { 4234 await Promise.all(loadRouteDefinitionsPromises); 4235 } catch (e) { 4236 // No-op 4237 } 4238 return results; 4239} 4240// Default logic for calling a loader/action is the user has no specified a dataStrategy 4241async function callLoaderOrAction(type, request, match, loadRoutePromise, handlerOverride, staticContext) { 4242 let result; 4243 let onReject; 4244 let runHandler = handler => { 4245 // Setup a promise we can race against so that abort signals short circuit 4246 let reject; 4247 // This will never resolve so safe to type it as Promise<DataStrategyResult> to 4248 // satisfy the function return value 4249 let abortPromise = new Promise((_, r) => reject = r); 4250 onReject = () => reject(); 4251 request.signal.addEventListener("abort", onReject); 4252 let actualHandler = ctx => { 4253 if (typeof handler !== "function") { 4254 return Promise.reject(new Error("You cannot call the handler for a route which defines a boolean " + ("\"" + type + "\" [routeId: " + match.route.id + "]"))); 4255 } 4256 return handler({ 4257 request, 4258 params: match.params, 4259 context: staticContext 4260 }, ...(ctx !== undefined ? [ctx] : [])); 4261 }; 4262 let handlerPromise = (async () => { 4263 try { 4264 let val = await (handlerOverride ? handlerOverride(ctx => actualHandler(ctx)) : actualHandler()); 4265 return { 4266 type: "data", 4267 result: val 4268 }; 4269 } catch (e) { 4270 return { 4271 type: "error", 4272 result: e 4273 }; 4274 } 4275 })(); 4276 return Promise.race([handlerPromise, abortPromise]); 4277 }; 4278 try { 4279 let handler = match.route[type]; 4280 // If we have a route.lazy promise, await that first 4281 if (loadRoutePromise) { 4282 if (handler) { 4283 // Run statically defined handler in parallel with lazy() 4284 let handlerError; 4285 let [value] = await Promise.all([ 4286 // If the handler throws, don't let it immediately bubble out, 4287 // since we need to let the lazy() execution finish so we know if this 4288 // route has a boundary that can handle the error 4289 runHandler(handler).catch(e => { 4290 handlerError = e; 4291 }), loadRoutePromise]); 4292 if (handlerError !== undefined) { 4293 throw handlerError; 4294 } 4295 result = value; 4296 } else { 4297 // Load lazy route module, then run any returned handler 4298 await loadRoutePromise; 4299 handler = match.route[type]; 4300 if (handler) { 4301 // Handler still runs even if we got interrupted to maintain consistency 4302 // with un-abortable behavior of handler execution on non-lazy or 4303 // previously-lazy-loaded routes 4304 result = await runHandler(handler); 4305 } else if (type === "action") { 4306 let url = new URL(request.url); 4307 let pathname = url.pathname + url.search; 4308 throw getInternalRouterError(405, { 4309 method: request.method, 4310 pathname, 4311 routeId: match.route.id 4312 }); 4313 } else { 4314 // lazy() route has no loader to run. Short circuit here so we don't 4315 // hit the invariant below that errors on returning undefined. 4316 return { 4317 type: ResultType.data, 4318 result: undefined 4319 }; 4320 } 4321 } 4322 } else if (!handler) { 4323 let url = new URL(request.url); 4324 let pathname = url.pathname + url.search; 4325 throw getInternalRouterError(404, { 4326 pathname 4327 }); 4328 } else { 4329 result = await runHandler(handler); 4330 } 4331 invariant(result.result !== undefined, "You defined " + (type === "action" ? "an action" : "a loader") + " for route " + ("\"" + match.route.id + "\" but didn't return anything from your `" + type + "` ") + "function. Please return a value or `null`."); 4332 } catch (e) { 4333 // We should already be catching and converting normal handler executions to 4334 // DataStrategyResults and returning them, so anything that throws here is an 4335 // unexpected error we still need to wrap 4336 return { 4337 type: ResultType.error, 4338 result: e 4339 }; 4340 } finally { 4341 if (onReject) { 4342 request.signal.removeEventListener("abort", onReject); 4343 } 4344 } 4345 return result; 4346} 4347async function convertDataStrategyResultToDataResult(dataStrategyResult) { 4348 let { 4349 result, 4350 type 4351 } = dataStrategyResult; 4352 if (isResponse(result)) { 4353 let data; 4354 try { 4355 let contentType = result.headers.get("Content-Type"); 4356 // Check between word boundaries instead of startsWith() due to the last 4357 // paragraph of https://httpwg.org/specs/rfc9110.html#field.content-type 4358 if (contentType && /\bapplication\/json\b/.test(contentType)) { 4359 if (result.body == null) { 4360 data = null; 4361 } else { 4362 data = await result.json(); 4363 } 4364 } else { 4365 data = await result.text(); 4366 } 4367 } catch (e) { 4368 return { 4369 type: ResultType.error, 4370 error: e 4371 }; 4372 } 4373 if (type === ResultType.error) { 4374 return { 4375 type: ResultType.error, 4376 error: new ErrorResponseImpl(result.status, result.statusText, data), 4377 statusCode: result.status, 4378 headers: result.headers 4379 }; 4380 } 4381 return { 4382 type: ResultType.data, 4383 data, 4384 statusCode: result.status, 4385 headers: result.headers 4386 }; 4387 } 4388 if (type === ResultType.error) { 4389 if (isDataWithResponseInit(result)) { 4390 var _result$init2; 4391 if (result.data instanceof Error) { 4392 var _result$init; 4393 return { 4394 type: ResultType.error, 4395 error: result.data, 4396 statusCode: (_result$init = result.init) == null ? void 0 : _result$init.status 4397 }; 4398 } 4399 // Convert thrown data() to ErrorResponse instances 4400 result = new ErrorResponseImpl(((_result$init2 = result.init) == null ? void 0 : _result$init2.status) || 500, undefined, result.data); 4401 } 4402 return { 4403 type: ResultType.error, 4404 error: result, 4405 statusCode: isRouteErrorResponse(result) ? result.status : undefined 4406 }; 4407 } 4408 if (isDeferredData(result)) { 4409 var _result$init3, _result$init4; 4410 return { 4411 type: ResultType.deferred, 4412 deferredData: result, 4413 statusCode: (_result$init3 = result.init) == null ? void 0 : _result$init3.status, 4414 headers: ((_result$init4 = result.init) == null ? void 0 : _result$init4.headers) && new Headers(result.init.headers) 4415 }; 4416 } 4417 if (isDataWithResponseInit(result)) { 4418 var _result$init5, _result$init6; 4419 return { 4420 type: ResultType.data, 4421 data: result.data, 4422 statusCode: (_result$init5 = result.init) == null ? void 0 : _result$init5.status, 4423 headers: (_result$init6 = result.init) != null && _result$init6.headers ? new Headers(result.init.headers) : undefined 4424 }; 4425 } 4426 return { 4427 type: ResultType.data, 4428 data: result 4429 }; 4430} 4431// Support relative routing in internal redirects 4432function normalizeRelativeRoutingRedirectResponse(response, request, routeId, matches, basename, v7_relativeSplatPath) { 4433 let location = response.headers.get("Location"); 4434 invariant(location, "Redirects returned/thrown from loaders/actions must have a Location header"); 4435 if (!ABSOLUTE_URL_REGEX.test(location)) { 4436 let trimmedMatches = matches.slice(0, matches.findIndex(m => m.route.id === routeId) + 1); 4437 location = normalizeTo(new URL(request.url), trimmedMatches, basename, true, location, v7_relativeSplatPath); 4438 response.headers.set("Location", location); 4439 } 4440 return response; 4441} 4442function normalizeRedirectLocation(location, currentUrl, basename) { 4443 if (ABSOLUTE_URL_REGEX.test(location)) { 4444 // Strip off the protocol+origin for same-origin + same-basename absolute redirects 4445 let normalizedLocation = location; 4446 let url = normalizedLocation.startsWith("//") ? new URL(currentUrl.protocol + normalizedLocation) : new URL(normalizedLocation); 4447 let isSameBasename = stripBasename(url.pathname, basename) != null; 4448 if (url.origin === currentUrl.origin && isSameBasename) { 4449 return url.pathname + url.search + url.hash; 4450 } 4451 } 4452 return location; 4453} 4454// Utility method for creating the Request instances for loaders/actions during 4455// client-side navigations and fetches. During SSR we will always have a 4456// Request instance from the static handler (query/queryRoute) 4457function createClientSideRequest(history, location, signal, submission) { 4458 let url = history.createURL(stripHashFromPath(location)).toString(); 4459 let init = { 4460 signal 4461 }; 4462 if (submission && isMutationMethod(submission.formMethod)) { 4463 let { 4464 formMethod, 4465 formEncType 4466 } = submission; 4467 // Didn't think we needed this but it turns out unlike other methods, patch 4468 // won't be properly normalized to uppercase and results in a 405 error. 4469 // See: https://fetch.spec.whatwg.org/#concept-method 4470 init.method = formMethod.toUpperCase(); 4471 if (formEncType === "application/json") { 4472 init.headers = new Headers({ 4473 "Content-Type": formEncType 4474 }); 4475 init.body = JSON.stringify(submission.json); 4476 } else if (formEncType === "text/plain") { 4477 // Content-Type is inferred (https://fetch.spec.whatwg.org/#dom-request) 4478 init.body = submission.text; 4479 } else if (formEncType === "application/x-www-form-urlencoded" && submission.formData) { 4480 // Content-Type is inferred (https://fetch.spec.whatwg.org/#dom-request) 4481 init.body = convertFormDataToSearchParams(submission.formData); 4482 } else { 4483 // Content-Type is inferred (https://fetch.spec.whatwg.org/#dom-request) 4484 init.body = submission.formData; 4485 } 4486 } 4487 return new Request(url, init); 4488} 4489function convertFormDataToSearchParams(formData) { 4490 let searchParams = new URLSearchParams(); 4491 for (let [key, value] of formData.entries()) { 4492 // https://html.spec.whatwg.org/multipage/form-control-infrastructure.html#converting-an-entry-list-to-a-list-of-name-value-pairs 4493 searchParams.append(key, typeof value === "string" ? value : value.name); 4494 } 4495 return searchParams; 4496} 4497function convertSearchParamsToFormData(searchParams) { 4498 let formData = new FormData(); 4499 for (let [key, value] of searchParams.entries()) { 4500 formData.append(key, value); 4501 } 4502 return formData; 4503} 4504function processRouteLoaderData(matches, results, pendingActionResult, activeDeferreds, skipLoaderErrorBubbling) { 4505 // Fill in loaderData/errors from our loaders 4506 let loaderData = {}; 4507 let errors = null; 4508 let statusCode; 4509 let foundError = false; 4510 let loaderHeaders = {}; 4511 let pendingError = pendingActionResult && isErrorResult(pendingActionResult[1]) ? pendingActionResult[1].error : undefined; 4512 // Process loader results into state.loaderData/state.errors 4513 matches.forEach(match => { 4514 if (!(match.route.id in results)) { 4515 return; 4516 } 4517 let id = match.route.id; 4518 let result = results[id]; 4519 invariant(!isRedirectResult(result), "Cannot handle redirect results in processLoaderData"); 4520 if (isErrorResult(result)) { 4521 let error = result.error; 4522 // If we have a pending action error, we report it at the highest-route 4523 // that throws a loader error, and then clear it out to indicate that 4524 // it was consumed 4525 if (pendingError !== undefined) { 4526 error = pendingError; 4527 pendingError = undefined; 4528 } 4529 errors = errors || {}; 4530 if (skipLoaderErrorBubbling) { 4531 errors[id] = error; 4532 } else { 4533 // Look upwards from the matched route for the closest ancestor error 4534 // boundary, defaulting to the root match. Prefer higher error values 4535 // if lower errors bubble to the same boundary 4536 let boundaryMatch = findNearestBoundary(matches, id); 4537 if (errors[boundaryMatch.route.id] == null) { 4538 errors[boundaryMatch.route.id] = error; 4539 } 4540 } 4541 // Clear our any prior loaderData for the throwing route 4542 loaderData[id] = undefined; 4543 // Once we find our first (highest) error, we set the status code and 4544 // prevent deeper status codes from overriding 4545 if (!foundError) { 4546 foundError = true; 4547 statusCode = isRouteErrorResponse(result.error) ? result.error.status : 500; 4548 } 4549 if (result.headers) { 4550 loaderHeaders[id] = result.headers; 4551 } 4552 } else { 4553 if (isDeferredResult(result)) { 4554 activeDeferreds.set(id, result.deferredData); 4555 loaderData[id] = result.deferredData.data; 4556 // Error status codes always override success status codes, but if all 4557 // loaders are successful we take the deepest status code. 4558 if (result.statusCode != null && result.statusCode !== 200 && !foundError) { 4559 statusCode = result.statusCode; 4560 } 4561 if (result.headers) { 4562 loaderHeaders[id] = result.headers; 4563 } 4564 } else { 4565 loaderData[id] = result.data; 4566 // Error status codes always override success status codes, but if all 4567 // loaders are successful we take the deepest status code. 4568 if (result.statusCode && result.statusCode !== 200 && !foundError) { 4569 statusCode = result.statusCode; 4570 } 4571 if (result.headers) { 4572 loaderHeaders[id] = result.headers; 4573 } 4574 } 4575 } 4576 }); 4577 // If we didn't consume the pending action error (i.e., all loaders 4578 // resolved), then consume it here. Also clear out any loaderData for the 4579 // throwing route 4580 if (pendingError !== undefined && pendingActionResult) { 4581 errors = { 4582 [pendingActionResult[0]]: pendingError 4583 }; 4584 loaderData[pendingActionResult[0]] = undefined; 4585 } 4586 return { 4587 loaderData, 4588 errors, 4589 statusCode: statusCode || 200, 4590 loaderHeaders 4591 }; 4592} 4593function processLoaderData(state, matches, results, pendingActionResult, revalidatingFetchers, fetcherResults, activeDeferreds) { 4594 let { 4595 loaderData, 4596 errors 4597 } = processRouteLoaderData(matches, results, pendingActionResult, activeDeferreds, false // This method is only called client side so we always want to bubble 4598 ); 4599 // Process results from our revalidating fetchers 4600 revalidatingFetchers.forEach(rf => { 4601 let { 4602 key, 4603 match, 4604 controller 4605 } = rf; 4606 let result = fetcherResults[key]; 4607 invariant(result, "Did not find corresponding fetcher result"); 4608 // Process fetcher non-redirect errors 4609 if (controller && controller.signal.aborted) { 4610 // Nothing to do for aborted fetchers 4611 return; 4612 } else if (isErrorResult(result)) { 4613 let boundaryMatch = findNearestBoundary(state.matches, match == null ? void 0 : match.route.id); 4614 if (!(errors && errors[boundaryMatch.route.id])) { 4615 errors = _extends({}, errors, { 4616 [boundaryMatch.route.id]: result.error 4617 }); 4618 } 4619 state.fetchers.delete(key); 4620 } else if (isRedirectResult(result)) { 4621 // Should never get here, redirects should get processed above, but we 4622 // keep this to type narrow to a success result in the else 4623 invariant(false, "Unhandled fetcher revalidation redirect"); 4624 } else if (isDeferredResult(result)) { 4625 // Should never get here, deferred data should be awaited for fetchers 4626 // in resolveDeferredResults 4627 invariant(false, "Unhandled fetcher deferred data"); 4628 } else { 4629 let doneFetcher = getDoneFetcher(result.data); 4630 state.fetchers.set(key, doneFetcher); 4631 } 4632 }); 4633 return { 4634 loaderData, 4635 errors 4636 }; 4637} 4638function mergeLoaderData(loaderData, newLoaderData, matches, errors) { 4639 let mergedLoaderData = _extends({}, newLoaderData); 4640 for (let match of matches) { 4641 let id = match.route.id; 4642 if (newLoaderData.hasOwnProperty(id)) { 4643 if (newLoaderData[id] !== undefined) { 4644 mergedLoaderData[id] = newLoaderData[id]; 4645 } 4646 } else if (loaderData[id] !== undefined && match.route.loader) { 4647 // Preserve existing keys not included in newLoaderData and where a loader 4648 // wasn't removed by HMR 4649 mergedLoaderData[id] = loaderData[id]; 4650 } 4651 if (errors && errors.hasOwnProperty(id)) { 4652 // Don't keep any loader data below the boundary 4653 break; 4654 } 4655 } 4656 return mergedLoaderData; 4657} 4658function getActionDataForCommit(pendingActionResult) { 4659 if (!pendingActionResult) { 4660 return {}; 4661 } 4662 return isErrorResult(pendingActionResult[1]) ? { 4663 // Clear out prior actionData on errors 4664 actionData: {} 4665 } : { 4666 actionData: { 4667 [pendingActionResult[0]]: pendingActionResult[1].data 4668 } 4669 }; 4670} 4671// Find the nearest error boundary, looking upwards from the leaf route (or the 4672// route specified by routeId) for the closest ancestor error boundary, 4673// defaulting to the root match 4674function findNearestBoundary(matches, routeId) { 4675 let eligibleMatches = routeId ? matches.slice(0, matches.findIndex(m => m.route.id === routeId) + 1) : [...matches]; 4676 return eligibleMatches.reverse().find(m => m.route.hasErrorBoundary === true) || matches[0]; 4677} 4678function getShortCircuitMatches(routes) { 4679 // Prefer a root layout route if present, otherwise shim in a route object 4680 let route = routes.length === 1 ? routes[0] : routes.find(r => r.index || !r.path || r.path === "/") || { 4681 id: "__shim-error-route__" 4682 }; 4683 return { 4684 matches: [{ 4685 params: {}, 4686 pathname: "", 4687 pathnameBase: "", 4688 route 4689 }], 4690 route 4691 }; 4692} 4693function getInternalRouterError(status, _temp5) { 4694 let { 4695 pathname, 4696 routeId, 4697 method, 4698 type, 4699 message 4700 } = _temp5 === void 0 ? {} : _temp5; 4701 let statusText = "Unknown Server Error"; 4702 let errorMessage = "Unknown @remix-run/router error"; 4703 if (status === 400) { 4704 statusText = "Bad Request"; 4705 if (method && pathname && routeId) { 4706 errorMessage = "You made a " + method + " request to \"" + pathname + "\" but " + ("did not provide a `loader` for route \"" + routeId + "\", ") + "so there is no way to handle the request."; 4707 } else if (type === "defer-action") { 4708 errorMessage = "defer() is not supported in actions"; 4709 } else if (type === "invalid-body") { 4710 errorMessage = "Unable to encode submission body"; 4711 } 4712 } else if (status === 403) { 4713 statusText = "Forbidden"; 4714 errorMessage = "Route \"" + routeId + "\" does not match URL \"" + pathname + "\""; 4715 } else if (status === 404) { 4716 statusText = "Not Found"; 4717 errorMessage = "No route matches URL \"" + pathname + "\""; 4718 } else if (status === 405) { 4719 statusText = "Method Not Allowed"; 4720 if (method && pathname && routeId) { 4721 errorMessage = "You made a " + method.toUpperCase() + " request to \"" + pathname + "\" but " + ("did not provide an `action` for route \"" + routeId + "\", ") + "so there is no way to handle the request."; 4722 } else if (method) { 4723 errorMessage = "Invalid request method \"" + method.toUpperCase() + "\""; 4724 } 4725 } 4726 return new ErrorResponseImpl(status || 500, statusText, new Error(errorMessage), true); 4727} 4728// Find any returned redirect errors, starting from the lowest match 4729function findRedirect(results) { 4730 let entries = Object.entries(results); 4731 for (let i = entries.length - 1; i >= 0; i--) { 4732 let [key, result] = entries[i]; 4733 if (isRedirectResult(result)) { 4734 return { 4735 key, 4736 result 4737 }; 4738 } 4739 } 4740} 4741function stripHashFromPath(path) { 4742 let parsedPath = typeof path === "string" ? parsePath(path) : path; 4743 return createPath(_extends({}, parsedPath, { 4744 hash: "" 4745 })); 4746} 4747function isHashChangeOnly(a, b) { 4748 if (a.pathname !== b.pathname || a.search !== b.search) { 4749 return false; 4750 } 4751 if (a.hash === "") { 4752 // /page -> /page#hash 4753 return b.hash !== ""; 4754 } else if (a.hash === b.hash) { 4755 // /page#hash -> /page#hash 4756 return true; 4757 } else if (b.hash !== "") { 4758 // /page#hash -> /page#other 4759 return true; 4760 } 4761 // If the hash is removed the browser will re-perform a request to the server 4762 // /page#hash -> /page 4763 return false; 4764} 4765function isDataStrategyResult(result) { 4766 return result != null && typeof result === "object" && "type" in result && "result" in result && (result.type === ResultType.data || result.type === ResultType.error); 4767} 4768function isRedirectDataStrategyResultResult(result) { 4769 return isResponse(result.result) && redirectStatusCodes.has(result.result.status); 4770} 4771function isDeferredResult(result) { 4772 return result.type === ResultType.deferred; 4773} 4774function isErrorResult(result) { 4775 return result.type === ResultType.error; 4776} 4777function isRedirectResult(result) { 4778 return (result && result.type) === ResultType.redirect; 4779} 4780function isDataWithResponseInit(value) { 4781 return typeof value === "object" && value != null && "type" in value && "data" in value && "init" in value && value.type === "DataWithResponseInit"; 4782} 4783function isDeferredData(value) { 4784 let deferred = value; 4785 return deferred && typeof deferred === "object" && typeof deferred.data === "object" && typeof deferred.subscribe === "function" && typeof deferred.cancel === "function" && typeof deferred.resolveData === "function"; 4786} 4787function isResponse(value) { 4788 return value != null && typeof value.status === "number" && typeof value.statusText === "string" && typeof value.headers === "object" && typeof value.body !== "undefined"; 4789} 4790function isRedirectResponse(result) { 4791 if (!isResponse(result)) { 4792 return false; 4793 } 4794 let status = result.status; 4795 let location = result.headers.get("Location"); 4796 return status >= 300 && status <= 399 && location != null; 4797} 4798function isValidMethod(method) { 4799 return validRequestMethods.has(method.toLowerCase()); 4800} 4801function isMutationMethod(method) { 4802 return validMutationMethods.has(method.toLowerCase()); 4803} 4804async function resolveNavigationDeferredResults(matches, results, signal, currentMatches, currentLoaderData) { 4805 let entries = Object.entries(results); 4806 for (let index = 0; index < entries.length; index++) { 4807 let [routeId, result] = entries[index]; 4808 let match = matches.find(m => (m == null ? void 0 : m.route.id) === routeId); 4809 // If we don't have a match, then we can have a deferred result to do 4810 // anything with. This is for revalidating fetchers where the route was 4811 // removed during HMR 4812 if (!match) { 4813 continue; 4814 } 4815 let currentMatch = currentMatches.find(m => m.route.id === match.route.id); 4816 let isRevalidatingLoader = currentMatch != null && !isNewRouteInstance(currentMatch, match) && (currentLoaderData && currentLoaderData[match.route.id]) !== undefined; 4817 if (isDeferredResult(result) && isRevalidatingLoader) { 4818 // Note: we do not have to touch activeDeferreds here since we race them 4819 // against the signal in resolveDeferredData and they'll get aborted 4820 // there if needed 4821 await resolveDeferredData(result, signal, false).then(result => { 4822 if (result) { 4823 results[routeId] = result; 4824 } 4825 }); 4826 } 4827 } 4828} 4829async function resolveFetcherDeferredResults(matches, results, revalidatingFetchers) { 4830 for (let index = 0; index < revalidatingFetchers.length; index++) { 4831 let { 4832 key, 4833 routeId, 4834 controller 4835 } = revalidatingFetchers[index]; 4836 let result = results[key]; 4837 let match = matches.find(m => (m == null ? void 0 : m.route.id) === routeId); 4838 // If we don't have a match, then we can have a deferred result to do 4839 // anything with. This is for revalidating fetchers where the route was 4840 // removed during HMR 4841 if (!match) { 4842 continue; 4843 } 4844 if (isDeferredResult(result)) { 4845 // Note: we do not have to touch activeDeferreds here since we race them 4846 // against the signal in resolveDeferredData and they'll get aborted 4847 // there if needed 4848 invariant(controller, "Expected an AbortController for revalidating fetcher deferred result"); 4849 await resolveDeferredData(result, controller.signal, true).then(result => { 4850 if (result) { 4851 results[key] = result; 4852 } 4853 }); 4854 } 4855 } 4856} 4857async function resolveDeferredData(result, signal, unwrap) { 4858 if (unwrap === void 0) { 4859 unwrap = false; 4860 } 4861 let aborted = await result.deferredData.resolveData(signal); 4862 if (aborted) { 4863 return; 4864 } 4865 if (unwrap) { 4866 try { 4867 return { 4868 type: ResultType.data, 4869 data: result.deferredData.unwrappedData 4870 }; 4871 } catch (e) { 4872 // Handle any TrackedPromise._error values encountered while unwrapping 4873 return { 4874 type: ResultType.error, 4875 error: e 4876 }; 4877 } 4878 } 4879 return { 4880 type: ResultType.data, 4881 data: result.deferredData.data 4882 }; 4883} 4884function hasNakedIndexQuery(search) { 4885 return new URLSearchParams(search).getAll("index").some(v => v === ""); 4886} 4887function getTargetMatch(matches, location) { 4888 let search = typeof location === "string" ? parsePath(location).search : location.search; 4889 if (matches[matches.length - 1].route.index && hasNakedIndexQuery(search || "")) { 4890 // Return the leaf index route when index is present 4891 return matches[matches.length - 1]; 4892 } 4893 // Otherwise grab the deepest "path contributing" match (ignoring index and 4894 // pathless layout routes) 4895 let pathMatches = getPathContributingMatches(matches); 4896 return pathMatches[pathMatches.length - 1]; 4897} 4898function getSubmissionFromNavigation(navigation) { 4899 let { 4900 formMethod, 4901 formAction, 4902 formEncType, 4903 text, 4904 formData, 4905 json 4906 } = navigation; 4907 if (!formMethod || !formAction || !formEncType) { 4908 return; 4909 } 4910 if (text != null) { 4911 return { 4912 formMethod, 4913 formAction, 4914 formEncType, 4915 formData: undefined, 4916 json: undefined, 4917 text 4918 }; 4919 } else if (formData != null) { 4920 return { 4921 formMethod, 4922 formAction, 4923 formEncType, 4924 formData, 4925 json: undefined, 4926 text: undefined 4927 }; 4928 } else if (json !== undefined) { 4929 return { 4930 formMethod, 4931 formAction, 4932 formEncType, 4933 formData: undefined, 4934 json, 4935 text: undefined 4936 }; 4937 } 4938} 4939function getLoadingNavigation(location, submission) { 4940 if (submission) { 4941 let navigation = { 4942 state: "loading", 4943 location, 4944 formMethod: submission.formMethod, 4945 formAction: submission.formAction, 4946 formEncType: submission.formEncType, 4947 formData: submission.formData, 4948 json: submission.json, 4949 text: submission.text 4950 }; 4951 return navigation; 4952 } else { 4953 let navigation = { 4954 state: "loading", 4955 location, 4956 formMethod: undefined, 4957 formAction: undefined, 4958 formEncType: undefined, 4959 formData: undefined, 4960 json: undefined, 4961 text: undefined 4962 }; 4963 return navigation; 4964 } 4965} 4966function getSubmittingNavigation(location, submission) { 4967 let navigation = { 4968 state: "submitting", 4969 location, 4970 formMethod: submission.formMethod, 4971 formAction: submission.formAction, 4972 formEncType: submission.formEncType, 4973 formData: submission.formData, 4974 json: submission.json, 4975 text: submission.text 4976 }; 4977 return navigation; 4978} 4979function getLoadingFetcher(submission, data) { 4980 if (submission) { 4981 let fetcher = { 4982 state: "loading", 4983 formMethod: submission.formMethod, 4984 formAction: submission.formAction, 4985 formEncType: submission.formEncType, 4986 formData: submission.formData, 4987 json: submission.json, 4988 text: submission.text, 4989 data 4990 }; 4991 return fetcher; 4992 } else { 4993 let fetcher = { 4994 state: "loading", 4995 formMethod: undefined, 4996 formAction: undefined, 4997 formEncType: undefined, 4998 formData: undefined, 4999 json: undefined, 5000 text: undefined, 5001 data 5002 }; 5003 return fetcher; 5004 } 5005} 5006function getSubmittingFetcher(submission, existingFetcher) { 5007 let fetcher = { 5008 state: "submitting", 5009 formMethod: submission.formMethod, 5010 formAction: submission.formAction, 5011 formEncType: submission.formEncType, 5012 formData: submission.formData, 5013 json: submission.json, 5014 text: submission.text, 5015 data: existingFetcher ? existingFetcher.data : undefined 5016 }; 5017 return fetcher; 5018} 5019function getDoneFetcher(data) { 5020 let fetcher = { 5021 state: "idle", 5022 formMethod: undefined, 5023 formAction: undefined, 5024 formEncType: undefined, 5025 formData: undefined, 5026 json: undefined, 5027 text: undefined, 5028 data 5029 }; 5030 return fetcher; 5031} 5032function restoreAppliedTransitions(_window, transitions) { 5033 try { 5034 let sessionPositions = _window.sessionStorage.getItem(TRANSITIONS_STORAGE_KEY); 5035 if (sessionPositions) { 5036 let json = JSON.parse(sessionPositions); 5037 for (let [k, v] of Object.entries(json || {})) { 5038 if (v && Array.isArray(v)) { 5039 transitions.set(k, new Set(v || [])); 5040 } 5041 } 5042 } 5043 } catch (e) { 5044 // no-op, use default empty object 5045 } 5046} 5047function persistAppliedTransitions(_window, transitions) { 5048 if (transitions.size > 0) { 5049 let json = {}; 5050 for (let [k, v] of transitions) { 5051 json[k] = [...v]; 5052 } 5053 try { 5054 _window.sessionStorage.setItem(TRANSITIONS_STORAGE_KEY, JSON.stringify(json)); 5055 } catch (error) { 5056 warning(false, "Failed to save applied view transitions in sessionStorage (" + error + ")."); 5057 } 5058 } 5059} 5060//#endregion 5061 5062 5063//# sourceMappingURL=router.js.map 5064 5065 5066/***/ }), 5067
vendor: 342 bytes, lines 5068-5077
5068/***/ "./node_modules/axios/index.js": 5069/*!*************************************!*\ 5070 !*** ./node_modules/axios/index.js ***! 5071 \*************************************/ 5072/***/ ((module, __unused_webpack_exports, __webpack_require__) => { 5073 5074module.exports = __webpack_require__(/*! ./lib/axios */ "./node_modules/axios/lib/axios.js"); 5075 5076/***/ }), 5077
vendor: 7,873 bytes, lines 5078-5300
5078/***/ "./node_modules/axios/lib/adapters/xhr.js": 5079/*!************************************************!*\ 5080 !*** ./node_modules/axios/lib/adapters/xhr.js ***! 5081 \************************************************/ 5082/***/ ((module, __unused_webpack_exports, __webpack_require__) => { 5083 5084"use strict"; 5085 5086 5087var utils = __webpack_require__(/*! ./../utils */ "./node_modules/axios/lib/utils.js"); 5088var settle = __webpack_require__(/*! ./../core/settle */ "./node_modules/axios/lib/core/settle.js"); 5089var cookies = __webpack_require__(/*! ./../helpers/cookies */ "./node_modules/axios/lib/helpers/cookies.js"); 5090var buildURL = __webpack_require__(/*! ./../helpers/buildURL */ "./node_modules/axios/lib/helpers/buildURL.js"); 5091var buildFullPath = __webpack_require__(/*! ../core/buildFullPath */ "./node_modules/axios/lib/core/buildFullPath.js"); 5092var parseHeaders = __webpack_require__(/*! ./../helpers/parseHeaders */ "./node_modules/axios/lib/helpers/parseHeaders.js"); 5093var isURLSameOrigin = __webpack_require__(/*! ./../helpers/isURLSameOrigin */ "./node_modules/axios/lib/helpers/isURLSameOrigin.js"); 5094var createError = __webpack_require__(/*! ../core/createError */ "./node_modules/axios/lib/core/createError.js"); 5095var defaults = __webpack_require__(/*! ../defaults */ "./node_modules/axios/lib/defaults.js"); 5096var Cancel = __webpack_require__(/*! ../cancel/Cancel */ "./node_modules/axios/lib/cancel/Cancel.js"); 5097 5098module.exports = function xhrAdapter(config) { 5099 return new Promise(function dispatchXhrRequest(resolve, reject) { 5100 var requestData = config.data; 5101 var requestHeaders = config.headers; 5102 var responseType = config.responseType; 5103 var onCanceled; 5104 function done() { 5105 if (config.cancelToken) { 5106 config.cancelToken.unsubscribe(onCanceled); 5107 } 5108 5109 if (config.signal) { 5110 config.signal.removeEventListener('abort', onCanceled); 5111 } 5112 } 5113 5114 if (utils.isFormData(requestData)) { 5115 delete requestHeaders['Content-Type']; // Let the browser set it 5116 } 5117 5118 var request = new XMLHttpRequest(); 5119 5120 // HTTP basic authentication 5121 if (config.auth) { 5122 var username = config.auth.username || ''; 5123 var password = config.auth.password ? unescape(encodeURIComponent(config.auth.password)) : ''; 5124 requestHeaders.Authorization = 'Basic ' + btoa(username + ':' + password); 5125 } 5126 5127 var fullPath = buildFullPath(config.baseURL, config.url); 5128 request.open(config.method.toUpperCase(), buildURL(fullPath, config.params, config.paramsSerializer), true); 5129 5130 // Set the request timeout in MS 5131 request.timeout = config.timeout; 5132 5133 function onloadend() { 5134 if (!request) { 5135 return; 5136 } 5137 // Prepare the response 5138 var responseHeaders = 'getAllResponseHeaders' in request ? parseHeaders(request.getAllResponseHeaders()) : null; 5139 var responseData = !responseType || responseType === 'text' || responseType === 'json' ? 5140 request.responseText : request.response; 5141 var response = { 5142 data: responseData, 5143 status: request.status, 5144 statusText: request.statusText, 5145 headers: responseHeaders, 5146 config: config, 5147 request: request 5148 }; 5149 5150 settle(function _resolve(value) { 5151 resolve(value); 5152 done(); 5153 }, function _reject(err) { 5154 reject(err); 5155 done(); 5156 }, response); 5157 5158 // Clean up request 5159 request = null; 5160 } 5161 5162 if ('onloadend' in request) { 5163 // Use onloadend if available 5164 request.onloadend = onloadend; 5165 } else { 5166 // Listen for ready state to emulate onloadend 5167 request.onreadystatechange = function handleLoad() { 5168 if (!request || request.readyState !== 4) { 5169 return; 5170 } 5171 5172 // The request errored out and we didn't get a response, this will be 5173 // handled by onerror instead 5174 // With one exception: request that using file: protocol, most browsers 5175 // will return status as 0 even though it's a successful request 5176 if (request.status === 0 && !(request.responseURL && request.responseURL.indexOf('file:') === 0)) { 5177 return; 5178 } 5179 // readystate handler is calling before onerror or ontimeout handlers, 5180 // so we should call onloadend on the next 'tick' 5181 setTimeout(onloadend); 5182 }; 5183 } 5184 5185 // Handle browser request cancellation (as opposed to a manual cancellation) 5186 request.onabort = function handleAbort() { 5187 if (!request) { 5188 return; 5189 } 5190 5191 reject(createError('Request aborted', config, 'ECONNABORTED', request)); 5192 5193 // Clean up request 5194 request = null; 5195 }; 5196 5197 // Handle low level network errors 5198 request.onerror = function handleError() { 5199 // Real errors are hidden from us by the browser 5200 // onerror should only fire if it's a network error 5201 reject(createError('Network Error', config, null, request)); 5202 5203 // Clean up request 5204 request = null; 5205 }; 5206 5207 // Handle timeout 5208 request.ontimeout = function handleTimeout() { 5209 var timeoutErrorMessage = config.timeout ? 'timeout of ' + config.timeout + 'ms exceeded' : 'timeout exceeded'; 5210 var transitional = config.transitional || defaults.transitional; 5211 if (config.timeoutErrorMessage) { 5212 timeoutErrorMessage = config.timeoutErrorMessage; 5213 } 5214 reject(createError( 5215 timeoutErrorMessage, 5216 config, 5217 transitional.clarifyTimeoutError ? 'ETIMEDOUT' : 'ECONNABORTED', 5218 request)); 5219 5220 // Clean up request 5221 request = null; 5222 }; 5223 5224 // Add xsrf header 5225 // This is only done if running in a standard browser environment. 5226 // Specifically not if we're in a web worker, or react-native. 5227 if (utils.isStandardBrowserEnv()) { 5228 // Add xsrf header 5229 var xsrfValue = (config.withCredentials || isURLSameOrigin(fullPath)) && config.xsrfCookieName ? 5230 cookies.read(config.xsrfCookieName) : 5231 undefined; 5232 5233 if (xsrfValue) { 5234 requestHeaders[config.xsrfHeaderName] = xsrfValue; 5235 } 5236 } 5237 5238 // Add headers to the request 5239 if ('setRequestHeader' in request) { 5240 utils.forEach(requestHeaders, function setRequestHeader(val, key) { 5241 if (typeof requestData === 'undefined' && key.toLowerCase() === 'content-type') { 5242 // Remove Content-Type if data is undefined 5243 delete requestHeaders[key]; 5244 } else { 5245 // Otherwise add header to the request 5246 request.setRequestHeader(key, val); 5247 } 5248 }); 5249 } 5250 5251 // Add withCredentials to request if needed 5252 if (!utils.isUndefined(config.withCredentials)) { 5253 request.withCredentials = !!config.withCredentials; 5254 } 5255 5256 // Add responseType to request if needed 5257 if (responseType && responseType !== 'json') { 5258 request.responseType = config.responseType; 5259 } 5260 5261 // Handle progress if needed 5262 if (typeof config.onDownloadProgress === 'function') { 5263 request.addEventListener('progress', config.onDownloadProgress); 5264 } 5265 5266 // Not all browsers support upload events 5267 if (typeof config.onUploadProgress === 'function' && request.upload) { 5268 request.upload.addEventListener('progress', config.onUploadProgress); 5269 } 5270 5271 if (config.cancelToken || config.signal) { 5272 // Handle cancellation 5273 // eslint-disable-next-line func-names 5274 onCanceled = function(cancel) { 5275 if (!request) { 5276 return; 5277 } 5278 reject(!cancel || (cancel && cancel.type) ? new Cancel('canceled') : cancel); 5279 request.abort(); 5280 request = null; 5281 }; 5282 5283 config.cancelToken && config.cancelToken.subscribe(onCanceled); 5284 if (config.signal) { 5285 config.signal.aborted ? onCanceled() : config.signal.addEventListener('abort', onCanceled); 5286 } 5287 } 5288 5289 if (!requestData) { 5290 requestData = null; 5291 } 5292 5293 // Send the request 5294 request.send(requestData); 5295 }); 5296}; 5297 5298 5299/***/ }), 5300
vendor: 2,498 bytes, lines 5301-5368
5301/***/ "./node_modules/axios/lib/axios.js": 5302/*!*****************************************!*\ 5303 !*** ./node_modules/axios/lib/axios.js ***! 5304 \*****************************************/ 5305/***/ ((module, __unused_webpack_exports, __webpack_require__) => { 5306 5307"use strict"; 5308 5309 5310var utils = __webpack_require__(/*! ./utils */ "./node_modules/axios/lib/utils.js"); 5311var bind = __webpack_require__(/*! ./helpers/bind */ "./node_modules/axios/lib/helpers/bind.js"); 5312var Axios = __webpack_require__(/*! ./core/Axios */ "./node_modules/axios/lib/core/Axios.js"); 5313var mergeConfig = __webpack_require__(/*! ./core/mergeConfig */ "./node_modules/axios/lib/core/mergeConfig.js"); 5314var defaults = __webpack_require__(/*! ./defaults */ "./node_modules/axios/lib/defaults.js"); 5315 5316/** 5317 * Create an instance of Axios 5318 * 5319 * @param {Object} defaultConfig The default config for the instance 5320 * @return {Axios} A new instance of Axios 5321 */ 5322function createInstance(defaultConfig) { 5323 var context = new Axios(defaultConfig); 5324 var instance = bind(Axios.prototype.request, context); 5325 5326 // Copy axios.prototype to instance 5327 utils.extend(instance, Axios.prototype, context); 5328 5329 // Copy context to instance 5330 utils.extend(instance, context); 5331 5332 // Factory for creating new instances 5333 instance.create = function create(instanceConfig) { 5334 return createInstance(mergeConfig(defaultConfig, instanceConfig)); 5335 }; 5336 5337 return instance; 5338} 5339 5340// Create the default instance to be exported 5341var axios = createInstance(defaults); 5342 5343// Expose Axios class to allow class inheritance 5344axios.Axios = Axios; 5345 5346// Expose Cancel & CancelToken 5347axios.Cancel = __webpack_require__(/*! ./cancel/Cancel */ "./node_modules/axios/lib/cancel/Cancel.js"); 5348axios.CancelToken = __webpack_require__(/*! ./cancel/CancelToken */ "./node_modules/axios/lib/cancel/CancelToken.js"); 5349axios.isCancel = __webpack_require__(/*! ./cancel/isCancel */ "./node_modules/axios/lib/cancel/isCancel.js"); 5350axios.VERSION = (__webpack_require__(/*! ./env/data */ "./node_modules/axios/lib/env/data.js").version); 5351 5352// Expose all/spread 5353axios.all = function all(promises) { 5354 return Promise.all(promises); 5355}; 5356axios.spread = __webpack_require__(/*! ./helpers/spread */ "./node_modules/axios/lib/helpers/spread.js"); 5357 5358// Expose isAxiosError 5359axios.isAxiosError = __webpack_require__(/*! ./helpers/isAxiosError */ "./node_modules/axios/lib/helpers/isAxiosError.js"); 5360 5361module.exports = axios; 5362 5363// Allow use of default import syntax in TypeScript 5364module.exports["default"] = axios; 5365 5366 5367/***/ }), 5368
vendor: 636 bytes, lines 5369-5398
5369/***/ "./node_modules/axios/lib/cancel/Cancel.js": 5370/*!*************************************************!*\ 5371 !*** ./node_modules/axios/lib/cancel/Cancel.js ***! 5372 \*************************************************/ 5373/***/ ((module) => { 5374 5375"use strict"; 5376 5377 5378/** 5379 * A `Cancel` is an object that is thrown when an operation is canceled. 5380 * 5381 * @class 5382 * @param {string=} message The message. 5383 */ 5384function Cancel(message) { 5385 this.message = message; 5386} 5387 5388Cancel.prototype.toString = function toString() { 5389 return 'Cancel' + (this.message ? ': ' + this.message : ''); 5390}; 5391 5392Cancel.prototype.__CANCEL__ = true; 5393 5394module.exports = Cancel; 5395 5396 5397/***/ }), 5398
vendor: 2,848 bytes, lines 5399-5528
5399/***/ "./node_modules/axios/lib/cancel/CancelToken.js": 5400/*!******************************************************!*\ 5401 !*** ./node_modules/axios/lib/cancel/CancelToken.js ***! 5402 \******************************************************/ 5403/***/ ((module, __unused_webpack_exports, __webpack_require__) => { 5404 5405"use strict"; 5406 5407 5408var Cancel = __webpack_require__(/*! ./Cancel */ "./node_modules/axios/lib/cancel/Cancel.js"); 5409 5410/** 5411 * A `CancelToken` is an object that can be used to request cancellation of an operation. 5412 * 5413 * @class 5414 * @param {Function} executor The executor function. 5415 */ 5416function CancelToken(executor) { 5417 if (typeof executor !== 'function') { 5418 throw new TypeError('executor must be a function.'); 5419 } 5420 5421 var resolvePromise; 5422 5423 this.promise = new Promise(function promiseExecutor(resolve) { 5424 resolvePromise = resolve; 5425 }); 5426 5427 var token = this; 5428 5429 // eslint-disable-next-line func-names 5430 this.promise.then(function(cancel) { 5431 if (!token._listeners) return; 5432 5433 var i; 5434 var l = token._listeners.length; 5435 5436 for (i = 0; i < l; i++) { 5437 token._listeners[i](cancel); 5438 } 5439 token._listeners = null; 5440 }); 5441 5442 // eslint-disable-next-line func-names 5443 this.promise.then = function(onfulfilled) { 5444 var _resolve; 5445 // eslint-disable-next-line func-names 5446 var promise = new Promise(function(resolve) { 5447 token.subscribe(resolve); 5448 _resolve = resolve; 5449 }).then(onfulfilled); 5450 5451 promise.cancel = function reject() { 5452 token.unsubscribe(_resolve); 5453 }; 5454 5455 return promise; 5456 }; 5457 5458 executor(function cancel(message) { 5459 if (token.reason) { 5460 // Cancellation has already been requested 5461 return; 5462 } 5463 5464 token.reason = new Cancel(message); 5465 resolvePromise(token.reason); 5466 }); 5467} 5468 5469/** 5470 * Throws a `Cancel` if cancellation has been requested. 5471 */ 5472CancelToken.prototype.throwIfRequested = function throwIfRequested() { 5473 if (this.reason) { 5474 throw this.reason; 5475 } 5476}; 5477 5478/** 5479 * Subscribe to the cancel signal 5480 */ 5481 5482CancelToken.prototype.subscribe = function subscribe(listener) { 5483 if (this.reason) { 5484 listener(this.reason); 5485 return; 5486 } 5487 5488 if (this._listeners) { 5489 this._listeners.push(listener); 5490 } else { 5491 this._listeners = [listener]; 5492 } 5493}; 5494 5495/** 5496 * Unsubscribe from the cancel signal 5497 */ 5498 5499CancelToken.prototype.unsubscribe = function unsubscribe(listener) { 5500 if (!this._listeners) { 5501 return; 5502 } 5503 var index = this._listeners.indexOf(listener); 5504 if (index !== -1) { 5505 this._listeners.splice(index, 1); 5506 } 5507}; 5508 5509/** 5510 * Returns an object that contains a new `CancelToken` and a function that, when called, 5511 * cancels the `CancelToken`. 5512 */ 5513CancelToken.source = function source() { 5514 var cancel; 5515 var token = new CancelToken(function executor(c) { 5516 cancel = c; 5517 }); 5518 return { 5519 token: token, 5520 cancel: cancel 5521 }; 5522}; 5523 5524module.exports = CancelToken; 5525 5526 5527/***/ }), 5528
vendor: 361 bytes, lines 5529-5544
5529/***/ "./node_modules/axios/lib/cancel/isCancel.js": 5530/*!***************************************************!*\ 5531 !*** ./node_modules/axios/lib/cancel/isCancel.js ***! 5532 \***************************************************/ 5533/***/ ((module) => { 5534 5535"use strict"; 5536 5537 5538module.exports = function isCancel(value) { 5539 return !!(value && value.__CANCEL__); 5540}; 5541 5542 5543/***/ }), 5544
vendor: 4,892 bytes, lines 5545-5703
5545/***/ "./node_modules/axios/lib/core/Axios.js": 5546/*!**********************************************!*\ 5547 !*** ./node_modules/axios/lib/core/Axios.js ***! 5548 \**********************************************/ 5549/***/ ((module, __unused_webpack_exports, __webpack_require__) => { 5550 5551"use strict"; 5552 5553 5554var utils = __webpack_require__(/*! ./../utils */ "./node_modules/axios/lib/utils.js"); 5555var buildURL = __webpack_require__(/*! ../helpers/buildURL */ "./node_modules/axios/lib/helpers/buildURL.js"); 5556var InterceptorManager = __webpack_require__(/*! ./InterceptorManager */ "./node_modules/axios/lib/core/InterceptorManager.js"); 5557var dispatchRequest = __webpack_require__(/*! ./dispatchRequest */ "./node_modules/axios/lib/core/dispatchRequest.js"); 5558var mergeConfig = __webpack_require__(/*! ./mergeConfig */ "./node_modules/axios/lib/core/mergeConfig.js"); 5559var validator = __webpack_require__(/*! ../helpers/validator */ "./node_modules/axios/lib/helpers/validator.js"); 5560 5561var validators = validator.validators; 5562/** 5563 * Create a new instance of Axios 5564 * 5565 * @param {Object} instanceConfig The default config for the instance 5566 */ 5567function Axios(instanceConfig) { 5568 this.defaults = instanceConfig; 5569 this.interceptors = { 5570 request: new InterceptorManager(), 5571 response: new InterceptorManager() 5572 }; 5573} 5574 5575/** 5576 * Dispatch a request 5577 * 5578 * @param {Object} config The config specific for this request (merged with this.defaults) 5579 */ 5580Axios.prototype.request = function request(config) { 5581 /*eslint no-param-reassign:0*/ 5582 // Allow for axios('example/url'[, config]) a la fetch API 5583 if (typeof config === 'string') { 5584 config = arguments[1] || {}; 5585 config.url = arguments[0]; 5586 } else { 5587 config = config || {}; 5588 } 5589 5590 config = mergeConfig(this.defaults, config); 5591 5592 // Set config.method 5593 if (config.method) { 5594 config.method = config.method.toLowerCase(); 5595 } else if (this.defaults.method) { 5596 config.method = this.defaults.method.toLowerCase(); 5597 } else { 5598 config.method = 'get'; 5599 } 5600 5601 var transitional = config.transitional; 5602 5603 if (transitional !== undefined) { 5604 validator.assertOptions(transitional, { 5605 silentJSONParsing: validators.transitional(validators.boolean), 5606 forcedJSONParsing: validators.transitional(validators.boolean), 5607 clarifyTimeoutError: validators.transitional(validators.boolean) 5608 }, false); 5609 } 5610 5611 // filter out skipped interceptors 5612 var requestInterceptorChain = []; 5613 var synchronousRequestInterceptors = true; 5614 this.interceptors.request.forEach(function unshiftRequestInterceptors(interceptor) { 5615 if (typeof interceptor.runWhen === 'function' && interceptor.runWhen(config) === false) { 5616 return; 5617 } 5618 5619 synchronousRequestInterceptors = synchronousRequestInterceptors && interceptor.synchronous; 5620 5621 requestInterceptorChain.unshift(interceptor.fulfilled, interceptor.rejected); 5622 }); 5623 5624 var responseInterceptorChain = []; 5625 this.interceptors.response.forEach(function pushResponseInterceptors(interceptor) { 5626 responseInterceptorChain.push(interceptor.fulfilled, interceptor.rejected); 5627 }); 5628 5629 var promise; 5630 5631 if (!synchronousRequestInterceptors) { 5632 var chain = [dispatchRequest, undefined]; 5633 5634 Array.prototype.unshift.apply(chain, requestInterceptorChain); 5635 chain = chain.concat(responseInterceptorChain); 5636 5637 promise = Promise.resolve(config); 5638 while (chain.length) { 5639 promise = promise.then(chain.shift(), chain.shift()); 5640 } 5641 5642 return promise; 5643 } 5644 5645 5646 var newConfig = config; 5647 while (requestInterceptorChain.length) { 5648 var onFulfilled = requestInterceptorChain.shift(); 5649 var onRejected = requestInterceptorChain.shift(); 5650 try { 5651 newConfig = onFulfilled(newConfig); 5652 } catch (error) { 5653 onRejected(error); 5654 break; 5655 } 5656 } 5657 5658 try { 5659 promise = dispatchRequest(newConfig); 5660 } catch (error) { 5661 return Promise.reject(error); 5662 } 5663 5664 while (responseInterceptorChain.length) { 5665 promise = promise.then(responseInterceptorChain.shift(), responseInterceptorChain.shift()); 5666 } 5667 5668 return promise; 5669}; 5670 5671Axios.prototype.getUri = function getUri(config) { 5672 config = mergeConfig(this.defaults, config); 5673 return buildURL(config.url, config.params, config.paramsSerializer).replace(/^\?/, ''); 5674}; 5675 5676// Provide aliases for supported request methods 5677utils.forEach(['delete', 'get', 'head', 'options'], function forEachMethodNoData(method) { 5678 /*eslint func-names:0*/ 5679 Axios.prototype[method] = function(url, config) { 5680 return this.request(mergeConfig(config || {}, { 5681 method: method, 5682 url: url, 5683 data: (config || {}).data 5684 })); 5685 }; 5686}); 5687 5688utils.forEach(['post', 'put', 'patch'], function forEachMethodWithData(method) { 5689 /*eslint func-names:0*/ 5690 Axios.prototype[method] = function(url, data, config) { 5691 return this.request(mergeConfig(config || {}, { 5692 method: method, 5693 url: url, 5694 data: data 5695 })); 5696 }; 5697}); 5698 5699module.exports = Axios; 5700 5701 5702/***/ }), 5703
vendor: 1,754 bytes, lines 5704-5768
5704/***/ "./node_modules/axios/lib/core/InterceptorManager.js": 5705/*!***********************************************************!*\ 5706 !*** ./node_modules/axios/lib/core/InterceptorManager.js ***! 5707 \***********************************************************/ 5708/***/ ((module, __unused_webpack_exports, __webpack_require__) => { 5709 5710"use strict"; 5711 5712 5713var utils = __webpack_require__(/*! ./../utils */ "./node_modules/axios/lib/utils.js"); 5714 5715function InterceptorManager() { 5716 this.handlers = []; 5717} 5718 5719/** 5720 * Add a new interceptor to the stack 5721 * 5722 * @param {Function} fulfilled The function to handle `then` for a `Promise` 5723 * @param {Function} rejected The function to handle `reject` for a `Promise` 5724 * 5725 * @return {Number} An ID used to remove interceptor later 5726 */ 5727InterceptorManager.prototype.use = function use(fulfilled, rejected, options) { 5728 this.handlers.push({ 5729 fulfilled: fulfilled, 5730 rejected: rejected, 5731 synchronous: options ? options.synchronous : false, 5732 runWhen: options ? options.runWhen : null 5733 }); 5734 return this.handlers.length - 1; 5735}; 5736 5737/** 5738 * Remove an interceptor from the stack 5739 * 5740 * @param {Number} id The ID that was returned by `use` 5741 */ 5742InterceptorManager.prototype.eject = function eject(id) { 5743 if (this.handlers[id]) { 5744 this.handlers[id] = null; 5745 } 5746}; 5747 5748/** 5749 * Iterate over all the registered interceptors 5750 * 5751 * This method is particularly useful for skipping over any 5752 * interceptors that may have become `null` calling `eject`. 5753 * 5754 * @param {Function} fn The function to call for each interceptor 5755 */ 5756InterceptorManager.prototype.forEach = function forEach(fn) { 5757 utils.forEach(this.handlers, function forEachHandler(h) { 5758 if (h !== null) { 5759 fn(h); 5760 } 5761 }); 5762}; 5763 5764module.exports = InterceptorManager; 5765 5766 5767/***/ }), 5768
vendor: 1,149 bytes, lines 5769-5799
5769/***/ "./node_modules/axios/lib/core/buildFullPath.js": 5770/*!******************************************************!*\ 5771 !*** ./node_modules/axios/lib/core/buildFullPath.js ***! 5772 \******************************************************/ 5773/***/ ((module, __unused_webpack_exports, __webpack_require__) => { 5774 5775"use strict"; 5776 5777 5778var isAbsoluteURL = __webpack_require__(/*! ../helpers/isAbsoluteURL */ "./node_modules/axios/lib/helpers/isAbsoluteURL.js"); 5779var combineURLs = __webpack_require__(/*! ../helpers/combineURLs */ "./node_modules/axios/lib/helpers/combineURLs.js"); 5780 5781/** 5782 * Creates a new URL by combining the baseURL with the requestedURL, 5783 * only when the requestedURL is not already an absolute URL. 5784 * If the requestURL is absolute, this function returns the requestedURL untouched. 5785 * 5786 * @param {string} baseURL The base URL 5787 * @param {string} requestedURL Absolute or relative URL to combine 5788 * @returns {string} The combined full path 5789 */ 5790module.exports = function buildFullPath(baseURL, requestedURL) { 5791 if (baseURL && !isAbsoluteURL(requestedURL)) { 5792 return combineURLs(baseURL, requestedURL); 5793 } 5794 return requestedURL; 5795}; 5796 5797 5798/***/ }), 5799
vendor: 1,000 bytes, lines 5800-5828
5800/***/ "./node_modules/axios/lib/core/createError.js": 5801/*!****************************************************!*\ 5802 !*** ./node_modules/axios/lib/core/createError.js ***! 5803 \****************************************************/ 5804/***/ ((module, __unused_webpack_exports, __webpack_require__) => { 5805 5806"use strict"; 5807 5808 5809var enhanceError = __webpack_require__(/*! ./enhanceError */ "./node_modules/axios/lib/core/enhanceError.js"); 5810 5811/** 5812 * Create an Error with the specified message, config, error code, request and response. 5813 * 5814 * @param {string} message The error message. 5815 * @param {Object} config The config. 5816 * @param {string} [code] The error code (for example, 'ECONNABORTED'). 5817 * @param {Object} [request] The request. 5818 * @param {Object} [response] The response. 5819 * @returns {Error} The created error. 5820 */ 5821module.exports = function createError(message, config, code, request, response) { 5822 var error = new Error(message); 5823 return enhanceError(error, config, code, request, response); 5824}; 5825 5826 5827/***/ }), 5828
vendor: 2,747 bytes, lines 5829-5926
5829/***/ "./node_modules/axios/lib/core/dispatchRequest.js": 5830/*!********************************************************!*\ 5831 !*** ./node_modules/axios/lib/core/dispatchRequest.js ***! 5832 \********************************************************/ 5833/***/ ((module, __unused_webpack_exports, __webpack_require__) => { 5834 5835"use strict"; 5836 5837 5838var utils = __webpack_require__(/*! ./../utils */ "./node_modules/axios/lib/utils.js"); 5839var transformData = __webpack_require__(/*! ./transformData */ "./node_modules/axios/lib/core/transformData.js"); 5840var isCancel = __webpack_require__(/*! ../cancel/isCancel */ "./node_modules/axios/lib/cancel/isCancel.js"); 5841var defaults = __webpack_require__(/*! ../defaults */ "./node_modules/axios/lib/defaults.js"); 5842var Cancel = __webpack_require__(/*! ../cancel/Cancel */ "./node_modules/axios/lib/cancel/Cancel.js"); 5843 5844/** 5845 * Throws a `Cancel` if cancellation has been requested. 5846 */ 5847function throwIfCancellationRequested(config) { 5848 if (config.cancelToken) { 5849 config.cancelToken.throwIfRequested(); 5850 } 5851 5852 if (config.signal && config.signal.aborted) { 5853 throw new Cancel('canceled'); 5854 } 5855} 5856 5857/** 5858 * Dispatch a request to the server using the configured adapter. 5859 * 5860 * @param {object} config The config that is to be used for the request 5861 * @returns {Promise} The Promise to be fulfilled 5862 */ 5863module.exports = function dispatchRequest(config) { 5864 throwIfCancellationRequested(config); 5865 5866 // Ensure headers exist 5867 config.headers = config.headers || {}; 5868 5869 // Transform request data 5870 config.data = transformData.call( 5871 config, 5872 config.data, 5873 config.headers, 5874 config.transformRequest 5875 ); 5876 5877 // Flatten headers 5878 config.headers = utils.merge( 5879 config.headers.common || {}, 5880 config.headers[config.method] || {}, 5881 config.headers 5882 ); 5883 5884 utils.forEach( 5885 ['delete', 'get', 'head', 'post', 'put', 'patch', 'common'], 5886 function cleanHeaderConfig(method) { 5887 delete config.headers[method]; 5888 } 5889 ); 5890 5891 var adapter = config.adapter || defaults.adapter; 5892 5893 return adapter(config).then(function onAdapterResolution(response) { 5894 throwIfCancellationRequested(config); 5895 5896 // Transform response data 5897 response.data = transformData.call( 5898 config, 5899 response.data, 5900 response.headers, 5901 config.transformResponse 5902 ); 5903 5904 return response; 5905 }, function onAdapterRejection(reason) { 5906 if (!isCancel(reason)) { 5907 throwIfCancellationRequested(config); 5908 5909 // Transform response data 5910 if (reason && reason.response) { 5911 reason.response.data = transformData.call( 5912 config, 5913 reason.response.data, 5914 reason.response.headers, 5915 config.transformResponse 5916 ); 5917 } 5918 } 5919 5920 return Promise.reject(reason); 5921 }); 5922}; 5923 5924 5925/***/ }), 5926
vendor: 1,399 bytes, lines 5927-5980
5927/***/ "./node_modules/axios/lib/core/enhanceError.js": 5928/*!*****************************************************!*\ 5929 !*** ./node_modules/axios/lib/core/enhanceError.js ***! 5930 \*****************************************************/ 5931/***/ ((module) => { 5932 5933"use strict"; 5934 5935 5936/** 5937 * Update an Error with the specified config, error code, and response. 5938 * 5939 * @param {Error} error The error to update. 5940 * @param {Object} config The config. 5941 * @param {string} [code] The error code (for example, 'ECONNABORTED'). 5942 * @param {Object} [request] The request. 5943 * @param {Object} [response] The response. 5944 * @returns {Error} The error. 5945 */ 5946module.exports = function enhanceError(error, config, code, request, response) { 5947 error.config = config; 5948 if (code) { 5949 error.code = code; 5950 } 5951 5952 error.request = request; 5953 error.response = response; 5954 error.isAxiosError = true; 5955 5956 error.toJSON = function toJSON() { 5957 return { 5958 // Standard 5959 message: this.message, 5960 name: this.name, 5961 // Microsoft 5962 description: this.description, 5963 number: this.number, 5964 // Mozilla 5965 fileName: this.fileName, 5966 lineNumber: this.lineNumber, 5967 columnNumber: this.columnNumber, 5968 stack: this.stack, 5969 // Axios 5970 config: this.config, 5971 code: this.code, 5972 status: this.response && this.response.status ? this.response.status : null 5973 }; 5974 }; 5975 return error; 5976}; 5977 5978 5979/***/ }), 5980
vendor: 3,558 bytes, lines 5981-6090
5981/***/ "./node_modules/axios/lib/core/mergeConfig.js": 5982/*!****************************************************!*\ 5983 !*** ./node_modules/axios/lib/core/mergeConfig.js ***! 5984 \****************************************************/ 5985/***/ ((module, __unused_webpack_exports, __webpack_require__) => { 5986 5987"use strict"; 5988 5989 5990var utils = __webpack_require__(/*! ../utils */ "./node_modules/axios/lib/utils.js"); 5991 5992/** 5993 * Config-specific merge-function which creates a new config-object 5994 * by merging two configuration objects together. 5995 * 5996 * @param {Object} config1 5997 * @param {Object} config2 5998 * @returns {Object} New object resulting from merging config2 to config1 5999 */ 6000module.exports = function mergeConfig(config1, config2) { 6001 // eslint-disable-next-line no-param-reassign 6002 config2 = config2 || {}; 6003 var config = {}; 6004 6005 function getMergedValue(target, source) { 6006 if (utils.isPlainObject(target) && utils.isPlainObject(source)) { 6007 return utils.merge(target, source); 6008 } else if (utils.isPlainObject(source)) { 6009 return utils.merge({}, source); 6010 } else if (utils.isArray(source)) { 6011 return source.slice(); 6012 } 6013 return source; 6014 } 6015 6016 // eslint-disable-next-line consistent-return 6017 function mergeDeepProperties(prop) { 6018 if (!utils.isUndefined(config2[prop])) { 6019 return getMergedValue(config1[prop], config2[prop]); 6020 } else if (!utils.isUndefined(config1[prop])) { 6021 return getMergedValue(undefined, config1[prop]); 6022 } 6023 } 6024 6025 // eslint-disable-next-line consistent-return 6026 function valueFromConfig2(prop) { 6027 if (!utils.isUndefined(config2[prop])) { 6028 return getMergedValue(undefined, config2[prop]); 6029 } 6030 } 6031 6032 // eslint-disable-next-line consistent-return 6033 function defaultToConfig2(prop) { 6034 if (!utils.isUndefined(config2[prop])) { 6035 return getMergedValue(undefined, config2[prop]); 6036 } else if (!utils.isUndefined(config1[prop])) { 6037 return getMergedValue(undefined, config1[prop]); 6038 } 6039 } 6040 6041 // eslint-disable-next-line consistent-return 6042 function mergeDirectKeys(prop) { 6043 if (prop in config2) { 6044 return getMergedValue(config1[prop], config2[prop]); 6045 } else if (prop in config1) { 6046 return getMergedValue(undefined, config1[prop]); 6047 } 6048 } 6049 6050 var mergeMap = { 6051 'url': valueFromConfig2, 6052 'method': valueFromConfig2, 6053 'data': valueFromConfig2, 6054 'baseURL': defaultToConfig2, 6055 'transformRequest': defaultToConfig2, 6056 'transformResponse': defaultToConfig2, 6057 'paramsSerializer': defaultToConfig2, 6058 'timeout': defaultToConfig2, 6059 'timeoutMessage': defaultToConfig2, 6060 'withCredentials': defaultToConfig2, 6061 'adapter': defaultToConfig2, 6062 'responseType': defaultToConfig2, 6063 'xsrfCookieName': defaultToConfig2, 6064 'xsrfHeaderName': defaultToConfig2, 6065 'onUploadProgress': defaultToConfig2, 6066 'onDownloadProgress': defaultToConfig2, 6067 'decompress': defaultToConfig2, 6068 'maxContentLength': defaultToConfig2, 6069 'maxBodyLength': defaultToConfig2, 6070 'transport': defaultToConfig2, 6071 'httpAgent': defaultToConfig2, 6072 'httpsAgent': defaultToConfig2, 6073 'cancelToken': defaultToConfig2, 6074 'socketPath': defaultToConfig2, 6075 'responseEncoding': defaultToConfig2, 6076 'validateStatus': mergeDirectKeys 6077 }; 6078 6079 utils.forEach(Object.keys(config1).concat(Object.keys(config2)), function computeConfigValue(prop) { 6080 var merge = mergeMap[prop] || mergeDeepProperties; 6081 var configValue = merge(prop); 6082 (utils.isUndefined(configValue) && merge !== mergeDirectKeys) || (config[prop] = configValue); 6083 }); 6084 6085 return config; 6086}; 6087 6088 6089/***/ }), 6090
vendor: 1,060 bytes, lines 6091-6126
6091/***/ "./node_modules/axios/lib/core/settle.js": 6092/*!***********************************************!*\ 6093 !*** ./node_modules/axios/lib/core/settle.js ***! 6094 \***********************************************/ 6095/***/ ((module, __unused_webpack_exports, __webpack_require__) => { 6096 6097"use strict"; 6098 6099 6100var createError = __webpack_require__(/*! ./createError */ "./node_modules/axios/lib/core/createError.js"); 6101 6102/** 6103 * Resolve or reject a Promise based on response status. 6104 * 6105 * @param {Function} resolve A function that resolves the promise. 6106 * @param {Function} reject A function that rejects the promise. 6107 * @param {object} response The response. 6108 */ 6109module.exports = function settle(resolve, reject, response) { 6110 var validateStatus = response.config.validateStatus; 6111 if (!response.status || !validateStatus || validateStatus(response.status)) { 6112 resolve(response); 6113 } else { 6114 reject(createError( 6115 'Request failed with status code ' + response.status, 6116 response.config, 6117 null, 6118 response.request, 6119 response 6120 )); 6121 } 6122}; 6123 6124 6125/***/ }), 6126
vendor: 1,066 bytes, lines 6127-6159
6127/***/ "./node_modules/axios/lib/core/transformData.js": 6128/*!******************************************************!*\ 6129 !*** ./node_modules/axios/lib/core/transformData.js ***! 6130 \******************************************************/ 6131/***/ ((module, __unused_webpack_exports, __webpack_require__) => { 6132 6133"use strict"; 6134 6135 6136var utils = __webpack_require__(/*! ./../utils */ "./node_modules/axios/lib/utils.js"); 6137var defaults = __webpack_require__(/*! ./../defaults */ "./node_modules/axios/lib/defaults.js"); 6138 6139/** 6140 * Transform the data for a request or a response 6141 * 6142 * @param {Object|String} data The data to be transformed 6143 * @param {Array} headers The headers for the request or response 6144 * @param {Array|Function} fns A single function or Array of functions 6145 * @returns {*} The resulting transformed data 6146 */ 6147module.exports = function transformData(data, headers, fns) { 6148 var context = this || defaults; 6149 /*eslint no-param-reassign:0*/ 6150 utils.forEach(fns, function transform(fn) { 6151 data = fn.call(context, data, headers); 6152 }); 6153 6154 return data; 6155}; 6156 6157 6158/***/ }), 6159
vendor: 4,297 bytes, lines 6160-6305
6160/***/ "./node_modules/axios/lib/defaults.js": 6161/*!********************************************!*\ 6162 !*** ./node_modules/axios/lib/defaults.js ***! 6163 \********************************************/ 6164/***/ ((module, __unused_webpack_exports, __webpack_require__) => { 6165 6166"use strict"; 6167/* provided dependency */ var process = __webpack_require__(/*! process/browser.js */ "./node_modules/process/browser.js"); 6168 6169 6170var utils = __webpack_require__(/*! ./utils */ "./node_modules/axios/lib/utils.js"); 6171var normalizeHeaderName = __webpack_require__(/*! ./helpers/normalizeHeaderName */ "./node_modules/axios/lib/helpers/normalizeHeaderName.js"); 6172var enhanceError = __webpack_require__(/*! ./core/enhanceError */ "./node_modules/axios/lib/core/enhanceError.js"); 6173 6174var DEFAULT_CONTENT_TYPE = { 6175 'Content-Type': 'application/x-www-form-urlencoded' 6176}; 6177 6178function setContentTypeIfUnset(headers, value) { 6179 if (!utils.isUndefined(headers) && utils.isUndefined(headers['Content-Type'])) { 6180 headers['Content-Type'] = value; 6181 } 6182} 6183 6184function getDefaultAdapter() { 6185 var adapter; 6186 if (typeof XMLHttpRequest !== 'undefined') { 6187 // For browsers use XHR adapter 6188 adapter = __webpack_require__(/*! ./adapters/xhr */ "./node_modules/axios/lib/adapters/xhr.js"); 6189 } else if (typeof process !== 'undefined' && Object.prototype.toString.call(process) === '[object process]') { 6190 // For node use HTTP adapter 6191 adapter = __webpack_require__(/*! ./adapters/http */ "./node_modules/axios/lib/adapters/xhr.js"); 6192 } 6193 return adapter; 6194} 6195 6196function stringifySafely(rawValue, parser, encoder) { 6197 if (utils.isString(rawValue)) { 6198 try { 6199 (parser || JSON.parse)(rawValue); 6200 return utils.trim(rawValue); 6201 } catch (e) { 6202 if (e.name !== 'SyntaxError') { 6203 throw e; 6204 } 6205 } 6206 } 6207 6208 return (encoder || JSON.stringify)(rawValue); 6209} 6210 6211var defaults = { 6212 6213 transitional: { 6214 silentJSONParsing: true, 6215 forcedJSONParsing: true, 6216 clarifyTimeoutError: false 6217 }, 6218 6219 adapter: getDefaultAdapter(), 6220 6221 transformRequest: [function transformRequest(data, headers) { 6222 normalizeHeaderName(headers, 'Accept'); 6223 normalizeHeaderName(headers, 'Content-Type'); 6224 6225 if (utils.isFormData(data) || 6226 utils.isArrayBuffer(data) || 6227 utils.isBuffer(data) || 6228 utils.isStream(data) || 6229 utils.isFile(data) || 6230 utils.isBlob(data) 6231 ) { 6232 return data; 6233 } 6234 if (utils.isArrayBufferView(data)) { 6235 return data.buffer; 6236 } 6237 if (utils.isURLSearchParams(data)) { 6238 setContentTypeIfUnset(headers, 'application/x-www-form-urlencoded;charset=utf-8'); 6239 return data.toString(); 6240 } 6241 if (utils.isObject(data) || (headers && headers['Content-Type'] === 'application/json')) { 6242 setContentTypeIfUnset(headers, 'application/json'); 6243 return stringifySafely(data); 6244 } 6245 return data; 6246 }], 6247 6248 transformResponse: [function transformResponse(data) { 6249 var transitional = this.transitional || defaults.transitional; 6250 var silentJSONParsing = transitional && transitional.silentJSONParsing; 6251 var forcedJSONParsing = transitional && transitional.forcedJSONParsing; 6252 var strictJSONParsing = !silentJSONParsing && this.responseType === 'json'; 6253 6254 if (strictJSONParsing || (forcedJSONParsing && utils.isString(data) && data.length)) { 6255 try { 6256 return JSON.parse(data); 6257 } catch (e) { 6258 if (strictJSONParsing) { 6259 if (e.name === 'SyntaxError') { 6260 throw enhanceError(e, this, 'E_JSON_PARSE'); 6261 } 6262 throw e; 6263 } 6264 } 6265 } 6266 6267 return data; 6268 }], 6269 6270 /** 6271 * A timeout in milliseconds to abort a request. If set to 0 (default) a 6272 * timeout is not created. 6273 */ 6274 timeout: 0, 6275 6276 xsrfCookieName: 'XSRF-TOKEN', 6277 xsrfHeaderName: 'X-XSRF-TOKEN', 6278 6279 maxContentLength: -1, 6280 maxBodyLength: -1, 6281 6282 validateStatus: function validateStatus(status) { 6283 return status >= 200 && status < 300; 6284 }, 6285 6286 headers: { 6287 common: { 6288 'Accept': 'application/json, text/plain, */*' 6289 } 6290 } 6291}; 6292 6293utils.forEach(['delete', 'get', 'head'], function forEachMethodNoData(method) { 6294 defaults.headers[method] = {}; 6295}); 6296 6297utils.forEach(['post', 'put', 'patch'], function forEachMethodWithData(method) { 6298 defaults.headers[method] = utils.merge(DEFAULT_CONTENT_TYPE); 6299}); 6300 6301module.exports = defaults; 6302 6303 6304/***/ }), 6305
vendor: 273 bytes, lines 6306-6317
6306/***/ "./node_modules/axios/lib/env/data.js": 6307/*!********************************************!*\ 6308 !*** ./node_modules/axios/lib/env/data.js ***! 6309 \********************************************/ 6310/***/ ((module) => { 6311 6312module.exports = { 6313 "version": "0.24.0" 6314}; 6315 6316/***/ }), 6317
vendor: 503 bytes, lines 6318-6339
6318/***/ "./node_modules/axios/lib/helpers/bind.js": 6319/*!************************************************!*\ 6320 !*** ./node_modules/axios/lib/helpers/bind.js ***! 6321 \************************************************/ 6322/***/ ((module) => { 6323 6324"use strict"; 6325 6326 6327module.exports = function bind(fn, thisArg) { 6328 return function wrap() { 6329 var args = new Array(arguments.length); 6330 for (var i = 0; i < args.length; i++) { 6331 args[i] = arguments[i]; 6332 } 6333 return fn.apply(thisArg, args); 6334 }; 6335}; 6336 6337 6338/***/ }), 6339
vendor: 2,007 bytes, lines 6340-6420
6340/***/ "./node_modules/axios/lib/helpers/buildURL.js": 6341/*!****************************************************!*\ 6342 !*** ./node_modules/axios/lib/helpers/buildURL.js ***! 6343 \****************************************************/ 6344/***/ ((module, __unused_webpack_exports, __webpack_require__) => { 6345 6346"use strict"; 6347 6348 6349var utils = __webpack_require__(/*! ./../utils */ "./node_modules/axios/lib/utils.js"); 6350 6351function encode(val) { 6352 return encodeURIComponent(val). 6353 replace(/%3A/gi, ':'). 6354 replace(/%24/g, '$'). 6355 replace(/%2C/gi, ','). 6356 replace(/%20/g, '+'). 6357 replace(/%5B/gi, '['). 6358 replace(/%5D/gi, ']'); 6359} 6360 6361/** 6362 * Build a URL by appending params to the end 6363 * 6364 * @param {string} url The base of the url (e.g., http://www.google.com) 6365 * @param {object} [params] The params to be appended 6366 * @returns {string} The formatted url 6367 */ 6368module.exports = function buildURL(url, params, paramsSerializer) { 6369 /*eslint no-param-reassign:0*/ 6370 if (!params) { 6371 return url; 6372 } 6373 6374 var serializedParams; 6375 if (paramsSerializer) { 6376 serializedParams = paramsSerializer(params); 6377 } else if (utils.isURLSearchParams(params)) { 6378 serializedParams = params.toString(); 6379 } else { 6380 var parts = []; 6381 6382 utils.forEach(params, function serialize(val, key) { 6383 if (val === null || typeof val === 'undefined') { 6384 return; 6385 } 6386 6387 if (utils.isArray(val)) { 6388 key = key + '[]'; 6389 } else { 6390 val = [val]; 6391 } 6392 6393 utils.forEach(val, function parseValue(v) { 6394 if (utils.isDate(v)) { 6395 v = v.toISOString(); 6396 } else if (utils.isObject(v)) { 6397 v = JSON.stringify(v); 6398 } 6399 parts.push(encode(key) + '=' + encode(v)); 6400 }); 6401 }); 6402 6403 serializedParams = parts.join('&'); 6404 } 6405 6406 if (serializedParams) { 6407 var hashmarkIndex = url.indexOf('#'); 6408 if (hashmarkIndex !== -1) { 6409 url = url.slice(0, hashmarkIndex); 6410 } 6411 6412 url += (url.indexOf('?') === -1 ? '?' : '&') + serializedParams; 6413 } 6414 6415 return url; 6416}; 6417 6418 6419/***/ }), 6420
vendor: 655 bytes, lines 6421-6445
6421/***/ "./node_modules/axios/lib/helpers/combineURLs.js": 6422/*!*******************************************************!*\ 6423 !*** ./node_modules/axios/lib/helpers/combineURLs.js ***! 6424 \*******************************************************/ 6425/***/ ((module) => { 6426 6427"use strict"; 6428 6429 6430/** 6431 * Creates a new URL by combining the specified URLs 6432 * 6433 * @param {string} baseURL The base URL 6434 * @param {string} relativeURL The relative URL 6435 * @returns {string} The combined URL 6436 */ 6437module.exports = function combineURLs(baseURL, relativeURL) { 6438 return relativeURL 6439 ? baseURL.replace(/\/+$/, '') + '/' + relativeURL.replace(/^\/+/, '') 6440 : baseURL; 6441}; 6442 6443 6444/***/ }), 6445
vendor: 1,794 bytes, lines 6446-6509
6446/***/ "./node_modules/axios/lib/helpers/cookies.js": 6447/*!***************************************************!*\ 6448 !*** ./node_modules/axios/lib/helpers/cookies.js ***! 6449 \***************************************************/ 6450/***/ ((module, __unused_webpack_exports, __webpack_require__) => { 6451 6452"use strict"; 6453 6454 6455var utils = __webpack_require__(/*! ./../utils */ "./node_modules/axios/lib/utils.js"); 6456 6457module.exports = ( 6458 utils.isStandardBrowserEnv() ? 6459 6460 // Standard browser envs support document.cookie 6461 (function standardBrowserEnv() { 6462 return { 6463 write: function write(name, value, expires, path, domain, secure) { 6464 var cookie = []; 6465 cookie.push(name + '=' + encodeURIComponent(value)); 6466 6467 if (utils.isNumber(expires)) { 6468 cookie.push('expires=' + new Date(expires).toGMTString()); 6469 } 6470 6471 if (utils.isString(path)) { 6472 cookie.push('path=' + path); 6473 } 6474 6475 if (utils.isString(domain)) { 6476 cookie.push('domain=' + domain); 6477 } 6478 6479 if (secure === true) { 6480 cookie.push('secure'); 6481 } 6482 6483 document.cookie = cookie.join('; '); 6484 }, 6485 6486 read: function read(name) { 6487 var match = document.cookie.match(new RegExp('(^|;\\s*)(' + name + ')=([^;]*)')); 6488 return (match ? decodeURIComponent(match[3]) : null); 6489 }, 6490 6491 remove: function remove(name) { 6492 this.write(name, '', Date.now() - 86400000); 6493 } 6494 }; 6495 })() : 6496 6497 // Non standard browser env (web workers, react-native) lack needed support. 6498 (function nonStandardBrowserEnv() { 6499 return { 6500 write: function write() {}, 6501 read: function read() { return null; }, 6502 remove: function remove() {} 6503 }; 6504 })() 6505); 6506 6507 6508/***/ }), 6509
vendor: 846 bytes, lines 6510-6534
6510/***/ "./node_modules/axios/lib/helpers/isAbsoluteURL.js": 6511/*!*********************************************************!*\ 6512 !*** ./node_modules/axios/lib/helpers/isAbsoluteURL.js ***! 6513 \*********************************************************/ 6514/***/ ((module) => { 6515 6516"use strict"; 6517 6518 6519/** 6520 * Determines whether the specified URL is absolute 6521 * 6522 * @param {string} url The URL to test 6523 * @returns {boolean} True if the specified URL is absolute, otherwise false 6524 */ 6525module.exports = function isAbsoluteURL(url) { 6526 // A URL is considered absolute if it begins with "<scheme>://" or "//" (protocol-relative URL). 6527 // RFC 3986 defines scheme name as a sequence of characters beginning with a letter and followed 6528 // by any combination of letters, digits, plus, period, or hyphen. 6529 return /^([a-z][a-z\d\+\-\.]*:)?\/\//i.test(url); 6530}; 6531 6532 6533/***/ }), 6534
vendor: 622 bytes, lines 6535-6556
6535/***/ "./node_modules/axios/lib/helpers/isAxiosError.js": 6536/*!********************************************************!*\ 6537 !*** ./node_modules/axios/lib/helpers/isAxiosError.js ***! 6538 \********************************************************/ 6539/***/ ((module) => { 6540 6541"use strict"; 6542 6543 6544/** 6545 * Determines whether the payload is an error thrown by Axios 6546 * 6547 * @param {*} payload The value to test 6548 * @returns {boolean} True if the payload is an error thrown by Axios, otherwise false 6549 */ 6550module.exports = function isAxiosError(payload) { 6551 return (typeof payload === 'object') && (payload.isAxiosError === true); 6552}; 6553 6554 6555/***/ }), 6556
vendor: 2,696 bytes, lines 6557-6635
6557/***/ "./node_modules/axios/lib/helpers/isURLSameOrigin.js": 6558/*!***********************************************************!*\ 6559 !*** ./node_modules/axios/lib/helpers/isURLSameOrigin.js ***! 6560 \***********************************************************/ 6561/***/ ((module, __unused_webpack_exports, __webpack_require__) => { 6562 6563"use strict"; 6564 6565 6566var utils = __webpack_require__(/*! ./../utils */ "./node_modules/axios/lib/utils.js"); 6567 6568module.exports = ( 6569 utils.isStandardBrowserEnv() ? 6570 6571 // Standard browser envs have full support of the APIs needed to test 6572 // whether the request URL is of the same origin as current location. 6573 (function standardBrowserEnv() { 6574 var msie = /(msie|trident)/i.test(navigator.userAgent); 6575 var urlParsingNode = document.createElement('a'); 6576 var originURL; 6577 6578 /** 6579 * Parse a URL to discover it's components 6580 * 6581 * @param {String} url The URL to be parsed 6582 * @returns {Object} 6583 */ 6584 function resolveURL(url) { 6585 var href = url; 6586 6587 if (msie) { 6588 // IE needs attribute set twice to normalize properties 6589 urlParsingNode.setAttribute('href', href); 6590 href = urlParsingNode.href; 6591 } 6592 6593 urlParsingNode.setAttribute('href', href); 6594 6595 // urlParsingNode provides the UrlUtils interface - http://url.spec.whatwg.org/#urlutils 6596 return { 6597 href: urlParsingNode.href, 6598 protocol: urlParsingNode.protocol ? urlParsingNode.protocol.replace(/:$/, '') : '', 6599 host: urlParsingNode.host, 6600 search: urlParsingNode.search ? urlParsingNode.search.replace(/^\?/, '') : '', 6601 hash: urlParsingNode.hash ? urlParsingNode.hash.replace(/^#/, '') : '', 6602 hostname: urlParsingNode.hostname, 6603 port: urlParsingNode.port, 6604 pathname: (urlParsingNode.pathname.charAt(0) === '/') ? 6605 urlParsingNode.pathname : 6606 '/' + urlParsingNode.pathname 6607 }; 6608 } 6609 6610 originURL = resolveURL(window.location.href); 6611 6612 /** 6613 * Determine if a URL shares the same origin as the current location 6614 * 6615 * @param {String} requestURL The URL to test 6616 * @returns {boolean} True if URL shares the same origin, otherwise false 6617 */ 6618 return function isURLSameOrigin(requestURL) { 6619 var parsed = (utils.isString(requestURL)) ? resolveURL(requestURL) : requestURL; 6620 return (parsed.protocol === originURL.protocol && 6621 parsed.host === originURL.host); 6622 }; 6623 })() : 6624 6625 // Non standard browser envs (web workers, react-native) lack needed support. 6626 (function nonStandardBrowserEnv() { 6627 return function isURLSameOrigin() { 6628 return true; 6629 }; 6630 })() 6631); 6632 6633 6634/***/ }), 6635
vendor: 764 bytes, lines 6636-6658
6636/***/ "./node_modules/axios/lib/helpers/normalizeHeaderName.js": 6637/*!***************************************************************!*\ 6638 !*** ./node_modules/axios/lib/helpers/normalizeHeaderName.js ***! 6639 \***************************************************************/ 6640/***/ ((module, __unused_webpack_exports, __webpack_require__) => { 6641 6642"use strict"; 6643 6644 6645var utils = __webpack_require__(/*! ../utils */ "./node_modules/axios/lib/utils.js"); 6646 6647module.exports = function normalizeHeaderName(headers, normalizedName) { 6648 utils.forEach(headers, function processHeader(value, name) { 6649 if (name !== normalizedName && name.toUpperCase() === normalizedName.toUpperCase()) { 6650 headers[normalizedName] = value; 6651 delete headers[name]; 6652 } 6653 }); 6654}; 6655 6656 6657/***/ }), 6658
vendor: 1,772 bytes, lines 6659-6722
6659/***/ "./node_modules/axios/lib/helpers/parseHeaders.js": 6660/*!********************************************************!*\ 6661 !*** ./node_modules/axios/lib/helpers/parseHeaders.js ***! 6662 \********************************************************/ 6663/***/ ((module, __unused_webpack_exports, __webpack_require__) => { 6664 6665"use strict"; 6666 6667 6668var utils = __webpack_require__(/*! ./../utils */ "./node_modules/axios/lib/utils.js"); 6669 6670// Headers whose duplicates are ignored by node 6671// c.f. https://nodejs.org/api/http.html#http_message_headers 6672var ignoreDuplicateOf = [ 6673 'age', 'authorization', 'content-length', 'content-type', 'etag', 6674 'expires', 'from', 'host', 'if-modified-since', 'if-unmodified-since', 6675 'last-modified', 'location', 'max-forwards', 'proxy-authorization', 6676 'referer', 'retry-after', 'user-agent' 6677]; 6678 6679/** 6680 * Parse headers into an object 6681 * 6682 * ``` 6683 * Date: Wed, 27 Aug 2014 08:58:49 GMT 6684 * Content-Type: application/json 6685 * Connection: keep-alive 6686 * Transfer-Encoding: chunked 6687 * ``` 6688 * 6689 * @param {String} headers Headers needing to be parsed 6690 * @returns {Object} Headers parsed into an object 6691 */ 6692module.exports = function parseHeaders(headers) { 6693 var parsed = {}; 6694 var key; 6695 var val; 6696 var i; 6697 6698 if (!headers) { return parsed; } 6699 6700 utils.forEach(headers.split('\n'), function parser(line) { 6701 i = line.indexOf(':'); 6702 key = utils.trim(line.substr(0, i)).toLowerCase(); 6703 val = utils.trim(line.substr(i + 1)); 6704 6705 if (key) { 6706 if (parsed[key] && ignoreDuplicateOf.indexOf(key) >= 0) { 6707 return; 6708 } 6709 if (key === 'set-cookie') { 6710 parsed[key] = (parsed[key] ? parsed[key] : []).concat([val]); 6711 } else { 6712 parsed[key] = parsed[key] ? parsed[key] + ', ' + val : val; 6713 } 6714 } 6715 }); 6716 6717 return parsed; 6718}; 6719 6720 6721/***/ }), 6722
vendor: 819 bytes, lines 6723-6760
6723/***/ "./node_modules/axios/lib/helpers/spread.js": 6724/*!**************************************************!*\ 6725 !*** ./node_modules/axios/lib/helpers/spread.js ***! 6726 \**************************************************/ 6727/***/ ((module) => { 6728 6729"use strict"; 6730 6731 6732/** 6733 * Syntactic sugar for invoking a function and expanding an array for arguments. 6734 * 6735 * Common use case would be to use `Function.prototype.apply`. 6736 * 6737 * ```js 6738 * function f(x, y, z) {} 6739 * var args = [1, 2, 3]; 6740 * f.apply(null, args); 6741 * ``` 6742 * 6743 * With `spread` this example can be re-written. 6744 * 6745 * ```js 6746 * spread(function(x, y, z) {})([1, 2, 3]); 6747 * ``` 6748 * 6749 * @param {Function} callback 6750 * @returns {Function} 6751 */ 6752module.exports = function spread(callback) { 6753 return function wrap(arr) { 6754 return callback.apply(null, arr); 6755 }; 6756}; 6757 6758 6759/***/ }), 6760
vendor: 2,719 bytes, lines 6761-6853
6761/***/ "./node_modules/axios/lib/helpers/validator.js": 6762/*!*****************************************************!*\ 6763 !*** ./node_modules/axios/lib/helpers/validator.js ***! 6764 \*****************************************************/ 6765/***/ ((module, __unused_webpack_exports, __webpack_require__) => { 6766 6767"use strict"; 6768 6769 6770var VERSION = (__webpack_require__(/*! ../env/data */ "./node_modules/axios/lib/env/data.js").version); 6771 6772var validators = {}; 6773 6774// eslint-disable-next-line func-names 6775['object', 'boolean', 'number', 'function', 'string', 'symbol'].forEach(function(type, i) { 6776 validators[type] = function validator(thing) { 6777 return typeof thing === type || 'a' + (i < 1 ? 'n ' : ' ') + type; 6778 }; 6779}); 6780 6781var deprecatedWarnings = {}; 6782 6783/** 6784 * Transitional option validator 6785 * @param {function|boolean?} validator - set to false if the transitional option has been removed 6786 * @param {string?} version - deprecated version / removed since version 6787 * @param {string?} message - some message with additional info 6788 * @returns {function} 6789 */ 6790validators.transitional = function transitional(validator, version, message) { 6791 function formatMessage(opt, desc) { 6792 return '[Axios v' + VERSION + '] Transitional option \'' + opt + '\'' + desc + (message ? '. ' + message : ''); 6793 } 6794 6795 // eslint-disable-next-line func-names 6796 return function(value, opt, opts) { 6797 if (validator === false) { 6798 throw new Error(formatMessage(opt, ' has been removed' + (version ? ' in ' + version : ''))); 6799 } 6800 6801 if (version && !deprecatedWarnings[opt]) { 6802 deprecatedWarnings[opt] = true; 6803 // eslint-disable-next-line no-console 6804 console.warn( 6805 formatMessage( 6806 opt, 6807 ' has been deprecated since v' + version + ' and will be removed in the near future' 6808 ) 6809 ); 6810 } 6811 6812 return validator ? validator(value, opt, opts) : true; 6813 }; 6814}; 6815 6816/** 6817 * Assert object's properties type 6818 * @param {object} options 6819 * @param {object} schema 6820 * @param {boolean?} allowUnknown 6821 */ 6822 6823function assertOptions(options, schema, allowUnknown) { 6824 if (typeof options !== 'object') { 6825 throw new TypeError('options must be an object'); 6826 } 6827 var keys = Object.keys(options); 6828 var i = keys.length; 6829 while (i-- > 0) { 6830 var opt = keys[i]; 6831 var validator = schema[opt]; 6832 if (validator) { 6833 var value = options[opt]; 6834 var result = value === undefined || validator(value, opt, options); 6835 if (result !== true) { 6836 throw new TypeError('option ' + opt + ' must be ' + result); 6837 } 6838 continue; 6839 } 6840 if (allowUnknown !== true) { 6841 throw Error('Unknown option ' + opt); 6842 } 6843 } 6844} 6845 6846module.exports = { 6847 assertOptions: assertOptions, 6848 validators: validators 6849}; 6850 6851 6852/***/ }), 6853
vendor: 9,257 bytes, lines 6854-7213
6854/***/ "./node_modules/axios/lib/utils.js": 6855/*!*****************************************!*\ 6856 !*** ./node_modules/axios/lib/utils.js ***! 6857 \*****************************************/ 6858/***/ ((module, __unused_webpack_exports, __webpack_require__) => { 6859 6860"use strict"; 6861 6862 6863var bind = __webpack_require__(/*! ./helpers/bind */ "./node_modules/axios/lib/helpers/bind.js"); 6864 6865// utils is a library of generic helper functions non-specific to axios 6866 6867var toString = Object.prototype.toString; 6868 6869/** 6870 * Determine if a value is an Array 6871 * 6872 * @param {Object} val The value to test 6873 * @returns {boolean} True if value is an Array, otherwise false 6874 */ 6875function isArray(val) { 6876 return toString.call(val) === '[object Array]'; 6877} 6878 6879/** 6880 * Determine if a value is undefined 6881 * 6882 * @param {Object} val The value to test 6883 * @returns {boolean} True if the value is undefined, otherwise false 6884 */ 6885function isUndefined(val) { 6886 return typeof val === 'undefined'; 6887} 6888 6889/** 6890 * Determine if a value is a Buffer 6891 * 6892 * @param {Object} val The value to test 6893 * @returns {boolean} True if value is a Buffer, otherwise false 6894 */ 6895function isBuffer(val) { 6896 return val !== null && !isUndefined(val) && val.constructor !== null && !isUndefined(val.constructor) 6897 && typeof val.constructor.isBuffer === 'function' && val.constructor.isBuffer(val); 6898} 6899 6900/** 6901 * Determine if a value is an ArrayBuffer 6902 * 6903 * @param {Object} val The value to test 6904 * @returns {boolean} True if value is an ArrayBuffer, otherwise false 6905 */ 6906function isArrayBuffer(val) { 6907 return toString.call(val) === '[object ArrayBuffer]'; 6908} 6909 6910/** 6911 * Determine if a value is a FormData 6912 * 6913 * @param {Object} val The value to test 6914 * @returns {boolean} True if value is an FormData, otherwise false 6915 */ 6916function isFormData(val) { 6917 return (typeof FormData !== 'undefined') && (val instanceof FormData); 6918} 6919 6920/** 6921 * Determine if a value is a view on an ArrayBuffer 6922 * 6923 * @param {Object} val The value to test 6924 * @returns {boolean} True if value is a view on an ArrayBuffer, otherwise false 6925 */ 6926function isArrayBufferView(val) { 6927 var result; 6928 if ((typeof ArrayBuffer !== 'undefined') && (ArrayBuffer.isView)) { 6929 result = ArrayBuffer.isView(val); 6930 } else { 6931 result = (val) && (val.buffer) && (val.buffer instanceof ArrayBuffer); 6932 } 6933 return result; 6934} 6935 6936/** 6937 * Determine if a value is a String 6938 * 6939 * @param {Object} val The value to test 6940 * @returns {boolean} True if value is a String, otherwise false 6941 */ 6942function isString(val) { 6943 return typeof val === 'string'; 6944} 6945 6946/** 6947 * Determine if a value is a Number 6948 * 6949 * @param {Object} val The value to test 6950 * @returns {boolean} True if value is a Number, otherwise false 6951 */ 6952function isNumber(val) { 6953 return typeof val === 'number'; 6954} 6955 6956/** 6957 * Determine if a value is an Object 6958 * 6959 * @param {Object} val The value to test 6960 * @returns {boolean} True if value is an Object, otherwise false 6961 */ 6962function isObject(val) { 6963 return val !== null && typeof val === 'object'; 6964} 6965 6966/** 6967 * Determine if a value is a plain Object 6968 * 6969 * @param {Object} val The value to test 6970 * @return {boolean} True if value is a plain Object, otherwise false 6971 */ 6972function isPlainObject(val) { 6973 if (toString.call(val) !== '[object Object]') { 6974 return false; 6975 } 6976 6977 var prototype = Object.getPrototypeOf(val); 6978 return prototype === null || prototype === Object.prototype; 6979} 6980 6981/** 6982 * Determine if a value is a Date 6983 * 6984 * @param {Object} val The value to test 6985 * @returns {boolean} True if value is a Date, otherwise false 6986 */ 6987function isDate(val) { 6988 return toString.call(val) === '[object Date]'; 6989} 6990 6991/** 6992 * Determine if a value is a File 6993 * 6994 * @param {Object} val The value to test 6995 * @returns {boolean} True if value is a File, otherwise false 6996 */ 6997function isFile(val) { 6998 return toString.call(val) === '[object File]'; 6999} 7000 7001/** 7002 * Determine if a value is a Blob 7003 * 7004 * @param {Object} val The value to test 7005 * @returns {boolean} True if value is a Blob, otherwise false 7006 */ 7007function isBlob(val) { 7008 return toString.call(val) === '[object Blob]'; 7009} 7010 7011/** 7012 * Determine if a value is a Function 7013 * 7014 * @param {Object} val The value to test 7015 * @returns {boolean} True if value is a Function, otherwise false 7016 */ 7017function isFunction(val) { 7018 return toString.call(val) === '[object Function]'; 7019} 7020 7021/** 7022 * Determine if a value is a Stream 7023 * 7024 * @param {Object} val The value to test 7025 * @returns {boolean} True if value is a Stream, otherwise false 7026 */ 7027function isStream(val) { 7028 return isObject(val) && isFunction(val.pipe); 7029} 7030 7031/** 7032 * Determine if a value is a URLSearchParams object 7033 * 7034 * @param {Object} val The value to test 7035 * @returns {boolean} True if value is a URLSearchParams object, otherwise false 7036 */ 7037function isURLSearchParams(val) { 7038 return typeof URLSearchParams !== 'undefined' && val instanceof URLSearchParams; 7039} 7040 7041/** 7042 * Trim excess whitespace off the beginning and end of a string 7043 * 7044 * @param {String} str The String to trim 7045 * @returns {String} The String freed of excess whitespace 7046 */ 7047function trim(str) { 7048 return str.trim ? str.trim() : str.replace(/^\s+|\s+$/g, ''); 7049} 7050 7051/** 7052 * Determine if we're running in a standard browser environment 7053 * 7054 * This allows axios to run in a web worker, and react-native. 7055 * Both environments support XMLHttpRequest, but not fully standard globals. 7056 * 7057 * web workers: 7058 * typeof window -> undefined 7059 * typeof document -> undefined 7060 * 7061 * react-native: 7062 * navigator.product -> 'ReactNative' 7063 * nativescript 7064 * navigator.product -> 'NativeScript' or 'NS' 7065 */ 7066function isStandardBrowserEnv() { 7067 if (typeof navigator !== 'undefined' && (navigator.product === 'ReactNative' || 7068 navigator.product === 'NativeScript' || 7069 navigator.product === 'NS')) { 7070 return false; 7071 } 7072 return ( 7073 typeof window !== 'undefined' && 7074 typeof document !== 'undefined' 7075 ); 7076} 7077 7078/** 7079 * Iterate over an Array or an Object invoking a function for each item. 7080 * 7081 * If `obj` is an Array callback will be called passing 7082 * the value, index, and complete array for each item. 7083 * 7084 * If 'obj' is an Object callback will be called passing 7085 * the value, key, and complete object for each property. 7086 * 7087 * @param {Object|Array} obj The object to iterate 7088 * @param {Function} fn The callback to invoke for each item 7089 */ 7090function forEach(obj, fn) { 7091 // Don't bother if no value provided 7092 if (obj === null || typeof obj === 'undefined') { 7093 return; 7094 } 7095 7096 // Force an array if not already something iterable 7097 if (typeof obj !== 'object') { 7098 /*eslint no-param-reassign:0*/ 7099 obj = [obj]; 7100 } 7101 7102 if (isArray(obj)) { 7103 // Iterate over array values 7104 for (var i = 0, l = obj.length; i < l; i++) { 7105 fn.call(null, obj[i], i, obj); 7106 } 7107 } else { 7108 // Iterate over object keys 7109 for (var key in obj) { 7110 if (Object.prototype.hasOwnProperty.call(obj, key)) { 7111 fn.call(null, obj[key], key, obj); 7112 } 7113 } 7114 } 7115} 7116 7117/** 7118 * Accepts varargs expecting each argument to be an object, then 7119 * immutably merges the properties of each object and returns result. 7120 * 7121 * When multiple objects contain the same key the later object in 7122 * the arguments list will take precedence. 7123 * 7124 * Example: 7125 * 7126 * ```js 7127 * var result = merge({foo: 123}, {foo: 456}); 7128 * console.log(result.foo); // outputs 456 7129 * ``` 7130 * 7131 * @param {Object} obj1 Object to merge 7132 * @returns {Object} Result of all merge properties 7133 */ 7134function merge(/* obj1, obj2, obj3, ... */) { 7135 var result = {}; 7136 function assignValue(val, key) { 7137 if (isPlainObject(result[key]) && isPlainObject(val)) { 7138 result[key] = merge(result[key], val); 7139 } else if (isPlainObject(val)) { 7140 result[key] = merge({}, val); 7141 } else if (isArray(val)) { 7142 result[key] = val.slice(); 7143 } else { 7144 result[key] = val; 7145 } 7146 } 7147 7148 for (var i = 0, l = arguments.length; i < l; i++) { 7149 forEach(arguments[i], assignValue); 7150 } 7151 return result; 7152} 7153 7154/** 7155 * Extends object a by mutably adding to it the properties of object b. 7156 * 7157 * @param {Object} a The object to be extended 7158 * @param {Object} b The object to copy properties from 7159 * @param {Object} thisArg The object to bind function to 7160 * @return {Object} The resulting value of object a 7161 */ 7162function extend(a, b, thisArg) { 7163 forEach(b, function assignValue(val, key) { 7164 if (thisArg && typeof val === 'function') { 7165 a[key] = bind(val, thisArg); 7166 } else { 7167 a[key] = val; 7168 } 7169 }); 7170 return a; 7171} 7172 7173/** 7174 * Remove byte order marker. This catches EF BB BF (the UTF-8 BOM) 7175 * 7176 * @param {string} content with BOM 7177 * @return {string} content value without BOM 7178 */ 7179function stripBOM(content) { 7180 if (content.charCodeAt(0) === 0xFEFF) { 7181 content = content.slice(1); 7182 } 7183 return content; 7184} 7185 7186module.exports = { 7187 isArray: isArray, 7188 isArrayBuffer: isArrayBuffer, 7189 isBuffer: isBuffer, 7190 isFormData: isFormData, 7191 isArrayBufferView: isArrayBufferView, 7192 isString: isString, 7193 isNumber: isNumber, 7194 isObject: isObject, 7195 isPlainObject: isPlainObject, 7196 isUndefined: isUndefined, 7197 isDate: isDate, 7198 isFile: isFile, 7199 isBlob: isBlob, 7200 isFunction: isFunction, 7201 isStream: isStream, 7202 isURLSearchParams: isURLSearchParams, 7203 isStandardBrowserEnv: isStandardBrowserEnv, 7204 forEach: forEach, 7205 merge: merge, 7206 extend: extend, 7207 trim: trim, 7208 stripBOM: stripBOM 7209}; 7210 7211 7212/***/ }), 7213
7214/***/ "./resources/js/app/app.tsx": 7215/*!**********************************!*\ 7216 !*** ./resources/js/app/app.tsx ***! 7217 \**********************************/ 7218/***/ (function(__unused_webpack_module, exports, __webpack_require__) { 7219 7220"use strict"; 7221 7222 7223var __importDefault = this && this.__importDefault || function (mod) { 7224 return mod && mod.__esModule ? mod : { 7225 "default": mod 7226 }; 7227}; 7228Object.defineProperty(exports, "__esModule", ({ 7229 value: true 7230})); 7231exports.App = void 0; 7232var react_1 = __importDefault(__webpack_require__(/*! react */ "./node_modules/react/index.js")); 7233var react_router_dom_1 = __webpack_require__(/*! react-router-dom */ "./node_modules/react-router-dom/dist/index.js"); 7234__webpack_require__(/*! ../bootstrap */ "./resources/js/bootstrap.ts"); 7235var category_product_1 = __webpack_require__(/*! ../scence/category-product */ "./resources/js/scence/category-product.tsx"); 7236var home_1 = __webpack_require__(/*! ../scence/home */ "./resources/js/scence/home.tsx"); 7237var product_detail_1 = __webpack_require__(/*! ../scence/product-detail */ "./resources/js/scence/product-detail.tsx"); 7238var App = function App() { 7239 return react_1["default"].createElement(react_router_dom_1.Routes, null, react_1["default"].createElement(react_router_dom_1.Route, { 7240 path: "/", 7241 element: react_1["default"].createElement(home_1.Home, null) 7242 }), react_1["default"].createElement(react_router_dom_1.Route, { 7243 path: "/chi-tiet-san-pham/:slug", 7244 element: react_1["default"].createElement(product_detail_1.ProductDetail, null) 7245 }), react_1["default"].createElement(react_router_dom_1.Route, { 7246 path: "/danh-muc-san-pham/:slug", 7247 element: react_1["default"].createElement(category_product_1.CategoryProduct, null) 7248 })); 7249}; 7250exports.App = App; 7251 7252/***/ }), 7253
7254/***/ "./resources/js/app/index.ts": 7255/*!***********************************!*\ 7256 !*** ./resources/js/app/index.ts ***! 7257 \***********************************/ 7258/***/ (function(__unused_webpack_module, exports, __webpack_require__) { 7259 7260"use strict"; 7261 7262 7263var __createBinding = this && this.__createBinding || (Object.create ? function (o, m, k, k2) { 7264 if (k2 === undefined) k2 = k; 7265 var desc = Object.getOwnPropertyDescriptor(m, k); 7266 if (!desc || ("get" in desc ? !m.__esModule : desc.writable || desc.configurable)) { 7267 desc = { 7268 enumerable: true, 7269 get: function get() { 7270 return m[k]; 7271 } 7272 }; 7273 } 7274 Object.defineProperty(o, k2, desc); 7275} : function (o, m, k, k2) { 7276 if (k2 === undefined) k2 = k; 7277 o[k2] = m[k]; 7278}); 7279var __exportStar = this && this.__exportStar || function (m, exports) { 7280 for (var p in m) if (p !== "default" && !Object.prototype.hasOwnProperty.call(exports, p)) __createBinding(exports, m, p); 7281}; 7282Object.defineProperty(exports, "__esModule", ({ 7283 value: true 7284})); 7285__webpack_require__(/*! ./app.style.scss */ "./resources/js/app/app.style.scss"); 7286__exportStar(__webpack_require__(/*! ./app */ "./resources/js/app/app.tsx"), exports); 7287 7288/***/ }), 7289
7290/***/ "./resources/js/bootstrap.ts": 7291/*!***********************************!*\ 7292 !*** ./resources/js/bootstrap.ts ***! 7293 \***********************************/ 7294/***/ (function(__unused_webpack_module, exports, __webpack_require__) { 7295 7296"use strict"; 7297 7298 7299/** 7300 * We'll load the axios HTTP library which allows us to easily issue requests 7301 * to our Laravel back-end. This library automatically handles sending the 7302 * CSRF token as a header based on the value of the "XSRF" token cookie. 7303 */ 7304var __importDefault = this && this.__importDefault || function (mod) { 7305 return mod && mod.__esModule ? mod : { 7306 "default": mod 7307 }; 7308}; 7309Object.defineProperty(exports, "__esModule", ({ 7310 value: true 7311})); 7312var axios_1 = __importDefault(__webpack_require__(/*! axios */ "./node_modules/axios/index.js")); 7313axios_1["default"].defaults.headers.common["X-Requested-With"] = "XMLHttpRequest"; 7314window.axios = axios_1["default"]; 7315/** 7316 * Echo exposes an expressive API for subscribing to channels and listening 7317 * for events that are broadcast by Laravel. Echo and event broadcasting 7318 * allows your team to easily build robust real-time web applications. 7319 */ 7320// import Echo from 'laravel-echo'; 7321// window.Pusher = require('pusher-js'); 7322// window.Echo = new Echo({ 7323// broadcaster: 'pusher', 7324// key: process.env.MIX_PUSHER_APP_KEY, 7325// cluster: process.env.MIX_PUSHER_APP_CLUSTER, 7326// forceTLS: true 7327// }); 7328 7329/***/ }), 7330
7331/***/ "./resources/js/components/buy/buy.tsx": 7332/*!*********************************************!*\ 7333 !*** ./resources/js/components/buy/buy.tsx ***! 7334 \*********************************************/ 7335/***/ (function(__unused_webpack_module, exports, __webpack_require__) { 7336 7337"use strict"; 7338 7339 7340var __createBinding = this && this.__createBinding || (Object.create ? function (o, m, k, k2) { 7341 if (k2 === undefined) k2 = k; 7342 var desc = Object.getOwnPropertyDescriptor(m, k); 7343 if (!desc || ("get" in desc ? !m.__esModule : desc.writable || desc.configurable)) { 7344 desc = { 7345 enumerable: true, 7346 get: function get() { 7347 return m[k]; 7348 } 7349 }; 7350 } 7351 Object.defineProperty(o, k2, desc); 7352} : function (o, m, k, k2) { 7353 if (k2 === undefined) k2 = k; 7354 o[k2] = m[k]; 7355}); 7356var __setModuleDefault = this && this.__setModuleDefault || (Object.create ? function (o, v) { 7357 Object.defineProperty(o, "default", { 7358 enumerable: true, 7359 value: v 7360 }); 7361} : function (o, v) { 7362 o["default"] = v; 7363}); 7364var __importStar = this && this.__importStar || function (mod) { 7365 if (mod && mod.__esModule) return mod; 7366 var result = {}; 7367 if (mod != null) for (var k in mod) if (k !== "default" && Object.prototype.hasOwnProperty.call(mod, k)) __createBinding(result, mod, k); 7368 __setModuleDefault(result, mod); 7369 return result; 7370}; 7371var __spreadArray = this && this.__spreadArray || function (to, from, pack) { 7372 if (pack || arguments.length === 2) for (var i = 0, l = from.length, ar; i < l; i++) { 7373 if (ar || !(i in from)) { 7374 if (!ar) ar = Array.prototype.slice.call(from, 0, i); 7375 ar[i] = from[i]; 7376 } 7377 } 7378 return to.concat(ar || Array.prototype.slice.call(from)); 7379}; 7380var __importDefault = this && this.__importDefault || function (mod) { 7381 return mod && mod.__esModule ? mod : { 7382 "default": mod 7383 }; 7384}; 7385Object.defineProperty(exports, "__esModule", ({ 7386 value: true 7387})); 7388exports.Buy = void 0; 7389var react_1 = __importStar(__webpack_require__(/*! react */ "./node_modules/react/index.js")); 7390var axios_1 = __importDefault(__webpack_require__(/*! axios */ "./node_modules/axios/index.js")); 7391var Buy = function Buy(props) { 7392 var _a = (0, react_1.useState)([]), 7393 products = _a[0], 7394 setProducts = _a[1]; 7395 var _b = (0, react_1.useState)(12), 7396 limit = _b[0], 7397 setLimit = _b[1]; 7398 var _c = (0, react_1.useState)(0), 7399 offset = _c[0], 7400 setOffset = _c[1]; 7401 (0, react_1.useEffect)(function () { 7402 axios_1["default"].get("/data/danh-sach-san-pham-tai-trang-chu?buy=1&limit=".concat(limit, "&offset=").concat(offset)).then(function (res) { 7403 console.log(res.data, 'BUY'); 7404 setProducts(__spreadArray(__spreadArray([], products, true), res.data, true)); 7405 }); 7406 }, [limit, offset]); 7407 var viewMore = function viewMore() { 7408 setOffset(offset + limit); 7409 }; 7410 return react_1["default"].createElement("div", { 7411 className: "section-content relative" 7412 }, react_1["default"].createElement("div", { 7413 className: "gap-element", 7414 style: { 7415 display: 'block', 7416 height: 'auto', 7417 paddingTop: '30px' 7418 } 7419 }), react_1["default"].createElement("div", { 7420 className: "row row-collapse", 7421 id: "row-1258137080" 7422 }, react_1["default"].createElement("div", { 7423 className: "col medium-12 small-12 large-12" 7424 }, react_1["default"].createElement("div", { 7425 className: "col-inner", 7426 style: { 7427 margin: '0px 0px -10px 0px' 7428 } 7429 }, react_1["default"].createElement("h3", { 7430 className: "orange" 7431 }, "S\u1EA3n ph\u1EA9m b\xE1n ch\u1EA1y"))), react_1["default"].createElement("div", { 7432 className: "col small-12 large-12" 7433 }, react_1["default"].createElement("div", { 7434 className: "col-inner" 7435 }, react_1["default"].createElement("div", { 7436 className: "is-divider divider clearfix", 7437 style: { 7438 marginTop: '0.0em', 7439 marginBottom: '0.0em', 7440 maxWidth: '100%', 7441 backgroundColor: 'rgb(255, 83, 29)' 7442 } 7443 })))), react_1["default"].createElement("div", { 7444 className: "row row-collapse", 7445 id: "row-1557720083" 7446 }, react_1["default"].createElement("div", { 7447 className: "col small-12 large-12" 7448 }, react_1["default"].createElement("div", { 7449 className: "col-inner" 7450 }, react_1["default"].createElement("div", { 7451 className: "gap-element", 7452 style: { 7453 display: 'block', 7454 height: 'auto', 7455 paddingTop: '10px' 7456 } 7457 }), react_1["default"].createElement("div", { 7458 className: "row large-columns-6 medium-columns-3 small-columns-2 row-xsmall row-full-width has-shadow row-box-sha
7458dow-1", 7459 style: { 7460 marginLeft: '0px', 7461 marginRight: '0px' 7462 } 7463 }, products.map(function (product, index) { 7464 var productImage = '/libraries/libraryxhome-3888/images/76693220_1666972563440263_7492540632209031168_n.jpg'; 7465 if (product.image_list) { 7466 productImage = product.image_list.split(',')[0]; 7467 } else if (product.image) { 7468 productImage = product.image; 7469 } 7470 return react_1["default"].createElement("div", { 7471 className: "col", 7472 key: index 7473 }, react_1["default"].createElement("div", { 7474 className: "col-inner" 7475 }, product.price > 0 && product.discount > 0 && react_1["default"].createElement("div", { 7476 className: "badge-container absolute left top z-1" 7477 }, react_1["default"].createElement("div", { 7478 className: "callout badge badge-square" 7479 }, react_1["default"].createElement("div", { 7480 className: "badge-inner secondary on-sale" 7481 }, react_1["default"].createElement("span", { 7482 className: "onsale" 7483 }, "-", 100 - Math.ceil(product.discount / product.price * 100), "%")))), react_1["default"].createElement("div", { 7484 className: "product-small box has-hover box-normal box-text-bottom" 7485 }, react_1["default"].createElement("div", { 7486 className: "box-image" 7487 }, react_1["default"].createElement("div", null, react_1["default"].createElement("a", { 7488 href: '/chi-tiet-san-pham/' + product.slug + '?user_email=' + product.user_email 7489 }, react_1["default"].createElement("img", { 7490 width: 300, 7491 height: 300, 7492 src: productImage 7493 }))), react_1["default"].createElement("div", { 7494 className: "image-tools z-top top right show-on-hover" 7495 }), react_1["default"].createElement("div", { 7496 className: "image-tools grid-tools text-center hide-for-small bottom hover-slide-in show-on-hover" 7497 })), react_1["default"].createElement("div", { 7498 className: "box-text" 7499 }, react_1["default"].createElement("div", { 7500 className: "title-wrapper" 7501 }, react_1["default"].createElement("p", { 7502 className: "category uppercase is-smaller no-text-overflow product-cat op-7" 7503 }, product.category_string), react_1["default"].createElement("p", { 7504 className: "name product-title" 7505 }, react_1["default"].createElement("a", { 7506 href: '/chi-tiet-san-pham/' + product.slug + '?user_email=' + product.user_email 7507 }, product.title)), react_1["default"].createElement("p", { 7508 className: "" 7509 }, react_1["default"].createElement("i", { 7510 className: "star fa fa-star", 7511 "aria-hidden": "true" 7512 }), product.star > 1 ? react_1["default"].createElement("i", { 7513 className: "star fa fa-star", 7514 "aria-hidden": "true" 7515 }) : react_1["default"].createElement("i", { 7516 className: "fa fa-star", 7517 "aria-hidden": "true" 7518 }), product.star > 2 ? react_1["default"].createElement("i", { 7519 className: "star fa fa-star", 7520 "aria-hidden": "true" 7521 }) : react_1["default"].createElement("i", { 7522 className: "fa fa-star", 7523 "aria-hidden": "true" 7524 }), product.star > 3 ? react_1["default"].createElement("i", { 7525 className: "star fa fa-star", 7526 "aria-hidden": "true" 7527 }) : react_1["default"].createElement("i", { 7528 className: "fa fa-star", 7529 "aria-hidden": "true" 7530 }), product.star > 4 ? react_1["default"].createElement("i", { 7531 className: "star fa fa-star", 7532 "aria-hidden": "true" 7533 }) : react_1["default"].createElement("i", { 7534 className: "fa fa-star", 7535 "aria-hidden": "true" 7536 })), react_1["default"].createElement("div", { 7537 className: "price-wrapper" 7538 }, product.discount > 0 && product.price_moma < 0 && react_1["default"].createElement("span", { 7539 className: "price" 7540 }, react_1["default"].createElement("del", { 7541 style: { 7542 "float": "left" 7543 } 7544 }, react_1["default"].createElement("span", { 7545 className: "woocommerce-Price-amount amount" 7546 }, new Intl.NumberFormat('vi-VN', { 7547 maximumSignificantDigits: 3 7548 }).format(product.price), "\xA0", react_1["default"].createElement("span", { 7549 className: "woocommerce-Price-currencySymbol" 7550 }, "\u20AB"))), " ", react_1["default"].createElement("ins", { 7551 style: { 7552 "float": "right" 7553 } 7554 }, react_1["default"].createElement("span", { 7555 className: "woocommerce-Price-amount amount", 7556 style: { 7557 color: "#f00", 7558 fontWeight: "bold" 7559 } 7560 }, new Intl.NumberFormat('vi-VN', { 7561 maximumSignificantDigits: 3 7562 }).format(product.discount), "\xA0", react_1["default"].createElement("span", { 7563 className: "woocommerce-Price-currencySymbol" 7564 }, "\u20AB")))), product.price_moma > 0 && react_1["default"].createElement("span", { 7565 className: "price" 7566 }, react_1["default"].createElement("del", { 7567 style: { 7568 "float": "left" 7569 } 7570 }, react_1["default"].createElement("span", { 7571 className: "woocommerce-Price-amount amount" 7572 }, new Intl.NumberFormat('vi-VN', { 7573 maximumSignificantDigits: 3 7574 }).format(product.price), "\xA0", react_1["default"].createElement("span", { 7575 className: "woocommerce-Price-currencySymbol" 7576 }, "\u20AB"))), " ", react_1["default"].createElement("ins", { 7577 style: { 7578 "float": "right" 7579 } 7580 }, react_1["default"].createElement("span", { 7581 className: "woocommerce-Price-amount amount", 7582 style: { 7583 color: "#f00", 7584 fontWeight: "bold" 7585 } 7586 }, new Intl.NumberFormat('vi-VN', { 7587 maximumSignificantDigits: 3 7588 }).format(product.price_moma), "\xA0", react_1["default"].createElement("span", { 7589 className: "woocommerce-Price-currencySymbol" 7590 }, "\u20AB")))), product.discount <= 0 && product.price_moma <= 0 && react_1["default"].createElement("span", { 7591 className: "price" 7592 }, react_1["default"].createElement("ins", { 7593 style: { 7594 "float": "left" 7595 } 7596 }, react_1["default"].createElement("span", { 7597 className: "woocommerce-Price-amount amount" 7598 }, new Intl.NumberFormat('vi-VN', { 7599 maximumSignificantDigits: 3 7600 }).format(product.price), "\xA0", react_1["default"].createElement("span", { 7601 className: "woocommerce-Price-currencySymbol" 7602 }, "\u20AB")))))))))); 7603 }), ",")))), react_1["default"].createElement("div", { 7604 className: "row row-collapse", 7605 id: "row-1309925252" 7606 }, react_1["default"].createElement("div", { 7607 className: "col medium-4 small-12 large-4" 7608 }, react_1["default"].createElement("div", { 7609 className: "col-inner" 7610 })), react_1["default"].createElement("div", { 7611 className: "col medium-4 small-12 large-4" 7612 }, react_1["default"].createElement("div", { 7613 className: "col-inner text-center" 7614 }, react_1["default"].createElement("div", { 7615 className: "gap-element", 7616 style: { 7617 display: 'block', 7618 height: 'auto', 7619 paddingTop: '20px' 7620 } 7621 }), react_1["default"].createElement("button", { 7622 onClick: viewMore, 7623 className: "btn btn-outline btn-primary w-25" 7624 }, react_1["default"].createElement("span", null, "Xem th\xEAm")))
7624), react_1["default"].createElement("div", { 7625 className: "col medium-4 small-12 large-4" 7626 }, react_1["default"].createElement("div", { 7627 className: "col-inner" 7628 }))), react_1["default"].createElement("div", { 7629 className: "gap-element", 7630 style: { 7631 display: 'block', 7632 height: 'auto', 7633 paddingTop: '50px' 7634 } 7635 })); 7636}; 7637exports.Buy = Buy; 7638 7639/***/ }), 7640
7641/***/ "./resources/js/components/buy/index.ts": 7642/*!**********************************************!*\ 7643 !*** ./resources/js/components/buy/index.ts ***! 7644 \**********************************************/ 7645/***/ (function(__unused_webpack_module, exports, __webpack_require__) { 7646 7647"use strict"; 7648 7649 7650var __createBinding = this && this.__createBinding || (Object.create ? function (o, m, k, k2) { 7651 if (k2 === undefined) k2 = k; 7652 var desc = Object.getOwnPropertyDescriptor(m, k); 7653 if (!desc || ("get" in desc ? !m.__esModule : desc.writable || desc.configurable)) { 7654 desc = { 7655 enumerable: true, 7656 get: function get() { 7657 return m[k]; 7658 } 7659 }; 7660 } 7661 Object.defineProperty(o, k2, desc); 7662} : function (o, m, k, k2) { 7663 if (k2 === undefined) k2 = k; 7664 o[k2] = m[k]; 7665}); 7666var __exportStar = this && this.__exportStar || function (m, exports) { 7667 for (var p in m) if (p !== "default" && !Object.prototype.hasOwnProperty.call(exports, p)) __createBinding(exports, m, p); 7668}; 7669Object.defineProperty(exports, "__esModule", ({ 7670 value: true 7671})); 7672__exportStar(__webpack_require__(/*! ./buy */ "./resources/js/components/buy/buy.tsx"), exports); 7673 7674/***/ }), 7675
7676/***/ "./resources/js/components/category-list/category-list.tsx": 7677/*!*****************************************************************!*\ 7678 !*** ./resources/js/components/category-list/category-list.tsx ***! 7679 \*****************************************************************/ 7680/***/ (function(__unused_webpack_module, exports, __webpack_require__) { 7681 7682"use strict"; 7683 7684 7685var __createBinding = this && this.__createBinding || (Object.create ? function (o, m, k, k2) { 7686 if (k2 === undefined) k2 = k; 7687 var desc = Object.getOwnPropertyDescriptor(m, k); 7688 if (!desc || ("get" in desc ? !m.__esModule : desc.writable || desc.configurable)) { 7689 desc = { 7690 enumerable: true, 7691 get: function get() { 7692 return m[k]; 7693 } 7694 }; 7695 } 7696 Object.defineProperty(o, k2, desc); 7697} : function (o, m, k, k2) { 7698 if (k2 === undefined) k2 = k; 7699 o[k2] = m[k]; 7700}); 7701var __setModuleDefault = this && this.__setModuleDefault || (Object.create ? function (o, v) { 7702 Object.defineProperty(o, "default", { 7703 enumerable: true, 7704 value: v 7705 }); 7706} : function (o, v) { 7707 o["default"] = v; 7708}); 7709var __importStar = this && this.__importStar || function (mod) { 7710 if (mod && mod.__esModule) return mod; 7711 var result = {}; 7712 if (mod != null) for (var k in mod) if (k !== "default" && Object.prototype.hasOwnProperty.call(mod, k)) __createBinding(result, mod, k); 7713 __setModuleDefault(result, mod); 7714 return result; 7715}; 7716var __importDefault = this && this.__importDefault || function (mod) { 7717 return mod && mod.__esModule ? mod : { 7718 "default": mod 7719 }; 7720}; 7721Object.defineProperty(exports, "__esModule", ({ 7722 value: true 7723})); 7724exports.CategoryList = void 0; 7725var react_1 = __importStar(__webpack_require__(/*! react */ "./node_modules/react/index.js")); 7726var axios_1 = __importDefault(__webpack_require__(/*! axios */ "./node_modules/axios/index.js")); 7727var CategoryList = function CategoryList(props) { 7728 var _a = (0, react_1.useState)([]), 7729 categories = _a[0], 7730 setCategories = _a[1]; 7731 var _b = (0, react_1.useState)(16), 7732 limit = _b[0], 7733 setLimit = _b[1]; 7734 var _c = (0, react_1.useState)(0), 7735 offset = _c[0], 7736 setOffset = _c[1]; 7737 (0, react_1.useEffect)(function () { 7738 __webpack_require__(/*! ./category-list.style.scss */ "./resources/js/components/category-list/category-list.style.scss"); 7739 }, []); 7740 (0, react_1.useEffect)(function () { 7741 axios_1["default"].get("/data/danh-sach-loai-san-pham?limit=".concat(limit, "&offset=").concat(offset)).then(function (res) { 7742 setCategories(res.data); 7743 }); 7744 }, [limit, offset]); 7745 var goBack = function goBack() { 7746 if (offset - limit < 0) return; 7747 setOffset(offset - limit); 7748 }; 7749 var goNext = function goNext() { 7750 setOffset(offset + limit); 7751 }; 7752 return react_1["default"].createElement("div", { 7753 className: "section-content relative" 7754 }, react_1["default"].createElement("div", { 7755 className: "gap-element", 7756 style: { 7757 display: 'block', 7758 height: 'auto', 7759 paddingTop: '30px' 7760 } 7761 }), react_1["default"].createElement("div", { 7762 className: "row row-collapse" 7763 }, react_1["default"].createElement("div", { 7764 className: "col small-12 large-12" 7765 }, react_1["default"].createElement("div", { 7766 className: "col-inner" 7767 }, react_1["default"].createElement("h3", null, "DANH M\u1EE4C"), react_1["default"].createElement("div", { 7768 className: "slider-wrapper relative " 7769 }, react_1["default"].createElement("div", { 7770 className: "slider slider-nav-circle slider-nav-large slider-nav-light slider-style-normal flickity-enabled is-draggable" 7771 }, react_1["default"].createElement("div", { 7772 className: "flickity-viewport", 7773 style: { 7774 height: '258.333px' 7775 } 7776 }, react_1["default"].createElement("div", { 7777 className: "flickity-slider", 7778 style: { 7779 left: '0px', 7780 transform: 'translate3d(-99.99%, 0px, 0px)' 7781 } 7782 }, react_1["default"].createElement("div", { 7783 className: "row row-collapse is-selected", 7784 id: "row-1555778584", 7785 style: { 7786 position: 'absolute', 7787 left: '100%' 7788 } 7789 }, react_1["default"].createElement("div", { 7790 className: "col small-12 large-12", 7791 style: { 7792 background: '#fff' 7793 } 7794 }, react_1["default"].createElement("div", { 7795 className: "col-inner" 7796 }, react_1["default"].createElement("div", { 7797 className: "row large-columns-8 medium-columns-3 small-columns-2 row-collapse has-shadow row-box-sha
7797dow-1" 7798 }, categories.map(function (category, index) { 7799 if (index % 2 === 0) { 7800 return react_1["default"].createElement("div", { 7801 key: index, 7802 className: "product-category col" 7803 }, react_1["default"].createElement("div", { 7804 className: "col-inner" 7805 }, react_1["default"].createElement("a", { 7806 href: "/danh-muc-san-pham/" + category.slug 7807 }, react_1["default"].createElement("div", { 7808 className: "box box-category has-hover box-normal" 7809 }, react_1["default"].createElement("div", { 7810 className: "box-image", 7811 style: { 7812 width: '50%' 7813 } 7814 }, react_1["default"].createElement("div", null, react_1["default"].createElement("img", { 7815 width: 300, 7816 height: 300, 7817 src: category.image || '/libraries/libraryxhome-3888/images/76693220_1666972563440263_7492540632209031168_n.jpg' 7818 }))), react_1["default"].createElement("div", { 7819 className: "box-text text-center" 7820 }, react_1["default"].createElement("div", { 7821 className: "box-text-inner" 7822 }, react_1["default"].createElement("h5", { 7823 className: "uppercase header-title" 7824 }, category.title))))))); 7825 } else return null; 7826 })), react_1["default"].createElement("div", { 7827 className: "row large-columns-8 medium-columns-3 small-columns-2 row-collapse has-shadow row-box-shadow-1" 7828 }, categories.map(function (category, index) { 7829 if (index % 2 === 1) { 7830 return react_1["default"].createElement("div", { 7831 key: index, 7832 className: "product-category col" 7833 }, react_1["default"].createElement("div", { 7834 className: "col-inner" 7835 }, react_1["default"].createElement("a", { 7836 href: "/danh-muc-san-pham/" + category.slug 7837 }, react_1["default"].createElement("div", { 7838 className: "box box-category has-hover box-normal" 7839 }, react_1["default"].createElement("div", { 7840 className: "box-image", 7841 style: { 7842 width: '50%' 7843 } 7844 }, react_1["default"].createElement("div", null, react_1["default"].createElement("img", { 7845 width: 300, 7846 height: 300, 7847 src: category.image || '/libraries/libraryxhome-3888/images/76693220_1666972563440263_7492540632209031168_n.jpg' 7848 }))), react_1["default"].createElement("div", { 7849 className: "box-text text-center" 7850 }, react_1["default"].createElement("div", { 7851 className: "box-text-inner" 7852 }, react_1["default"].createElement("h5", { 7853 className: "uppercase header-title" 7854 }, category.title))))))); 7855 } else return null; 7856 }))))))), react_1["default"].createElement("button", { 7857 onClick: goBack, 7858 className: "flickity-prev-next-button previous", 7859 type: "button", 7860 "aria-label": "previous" 7861 }, react_1["default"].createElement("svg", { 7862 viewBox: "0 0 100 100" 7863 }, react_1["default"].createElement("path", { 7864 d: "M 10,50 L 60,100 L 70,90 L 30,50 L 70,10 L 60,0 Z", 7865 className: "arrow" 7866 }))), react_1["default"].createElement("button", { 7867 onClick: goNext, 7868 className: "flickity-prev-next-button next", 7869 type: "button", 7870 "aria-label": "next" 7871 }, react_1["default"].createElement("svg", { 7872 viewBox: "0 0 100 100" 7873 }, react_1["default"].createElement("path", { 7874 d: "M 10,50 L 60,100 L 70,90 L 30,50 L 70,10 L 60,0 Z", 7875 className: "arrow", 7876 transform: "translate(100, 100) rotate(180) " 7877 })))), react_1["default"].createElement("div", { 7878 className: "loading-spin dark large centered", 7879 style: { 7880 display: 'none' 7881 } 7882 })))))); 7883}; 7884exports.CategoryList = CategoryList; 7885 7886/***/ }), 7887
7888/***/ "./resources/js/components/category-list/index.ts": 7889/*!********************************************************!*\ 7890 !*** ./resources/js/components/category-list/index.ts ***! 7891 \********************************************************/ 7892/***/ (function(__unused_webpack_module, exports, __webpack_require__) { 7893 7894"use strict"; 7895 7896 7897var __createBinding = this && this.__createBinding || (Object.create ? function (o, m, k, k2) { 7898 if (k2 === undefined) k2 = k; 7899 var desc = Object.getOwnPropertyDescriptor(m, k); 7900 if (!desc || ("get" in desc ? !m.__esModule : desc.writable || desc.configurable)) { 7901 desc = { 7902 enumerable: true, 7903 get: function get() { 7904 return m[k]; 7905 } 7906 }; 7907 } 7908 Object.defineProperty(o, k2, desc); 7909} : function (o, m, k, k2) { 7910 if (k2 === undefined) k2 = k; 7911 o[k2] = m[k]; 7912}); 7913var __exportStar = this && this.__exportStar || function (m, exports) { 7914 for (var p in m) if (p !== "default" && !Object.prototype.hasOwnProperty.call(exports, p)) __createBinding(exports, m, p); 7915}; 7916Object.defineProperty(exports, "__esModule", ({ 7917 value: true 7918})); 7919__exportStar(__webpack_require__(/*! ./category-list */ "./resources/js/components/category-list/category-list.tsx"), exports); 7920 7921/***/ }), 7922
7923/***/ "./resources/js/components/every/every.tsx": 7924/*!*************************************************!*\ 7925 !*** ./resources/js/components/every/every.tsx ***! 7926 \*************************************************/ 7927/***/ (function(__unused_webpack_module, exports, __webpack_require__) { 7928 7929"use strict"; 7930 7931 7932var __createBinding = this && this.__createBinding || (Object.create ? function (o, m, k, k2) { 7933 if (k2 === undefined) k2 = k; 7934 var desc = Object.getOwnPropertyDescriptor(m, k); 7935 if (!desc || ("get" in desc ? !m.__esModule : desc.writable || desc.configurable)) { 7936 desc = { 7937 enumerable: true, 7938 get: function get() { 7939 return m[k]; 7940 } 7941 }; 7942 } 7943 Object.defineProperty(o, k2, desc); 7944} : function (o, m, k, k2) { 7945 if (k2 === undefined) k2 = k; 7946 o[k2] = m[k]; 7947}); 7948var __setModuleDefault = this && this.__setModuleDefault || (Object.create ? function (o, v) { 7949 Object.defineProperty(o, "default", { 7950 enumerable: true, 7951 value: v 7952 }); 7953} : function (o, v) { 7954 o["default"] = v; 7955}); 7956var __importStar = this && this.__importStar || function (mod) { 7957 if (mod && mod.__esModule) return mod; 7958 var result = {}; 7959 if (mod != null) for (var k in mod) if (k !== "default" && Object.prototype.hasOwnProperty.call(mod, k)) __createBinding(result, mod, k); 7960 __setModuleDefault(result, mod); 7961 return result; 7962}; 7963var __spreadArray = this && this.__spreadArray || function (to, from, pack) { 7964 if (pack || arguments.length === 2) for (var i = 0, l = from.length, ar; i < l; i++) { 7965 if (ar || !(i in from)) { 7966 if (!ar) ar = Array.prototype.slice.call(from, 0, i); 7967 ar[i] = from[i]; 7968 } 7969 } 7970 return to.concat(ar || Array.prototype.slice.call(from)); 7971}; 7972var __importDefault = this && this.__importDefault || function (mod) { 7973 return mod && mod.__esModule ? mod : { 7974 "default": mod 7975 }; 7976}; 7977Object.defineProperty(exports, "__esModule", ({ 7978 value: true 7979})); 7980exports.Every = void 0; 7981var react_1 = __importStar(__webpack_require__(/*! react */ "./node_modules/react/index.js")); 7982var axios_1 = __importDefault(__webpack_require__(/*! axios */ "./node_modules/axios/index.js")); 7983var Every = function Every(props) { 7984 var _a = (0, react_1.useState)([]), 7985 products = _a[0], 7986 setProducts = _a[1]; 7987 var _b = (0, react_1.useState)(12), 7988 limit = _b[0], 7989 setLimit = _b[1]; 7990 var _c = (0, react_1.useState)(0), 7991 offset = _c[0], 7992 setOffset = _c[1]; 7993 (0, react_1.useEffect)(function () { 7994 axios_1["default"].get("/data/danh-sach-san-pham-tai-trang-chu?every=1&limit=".concat(limit, "&offset=").concat(offset)).then(function (res) { 7995 setProducts(__spreadArray(__spreadArray([], products, true), res.data, true)); 7996 }); 7997 }, [limit, offset]); 7998 var viewMore = function viewMore() { 7999 setOffset(offset + limit); 8000 }; 8001 return react_1["default"].createElement("div", { 8002 className: "section-content relative" 8003 }, react_1["default"].createElement("div", { 8004 className: "gap-element", 8005 style: { 8006 display: 'block', 8007 height: 'auto', 8008 paddingTop: '30px' 8009 } 8010 }), react_1["default"].createElement("div", { 8011 className: "row row-collapse", 8012 id: "row-1258137080" 8013 }, react_1["default"].createElement("div", { 8014 className: "col medium-12 small-12 large-12" 8015 }, react_1["default"].createElement("div", { 8016 className: "col-inner", 8017 style: { 8018 margin: '0px 0px -10px 0px' 8019 } 8020 }, react_1["default"].createElement("h3", { 8021 className: "orange" 8022 }, "Mua g\xEC b\xE1n \u0111\u1EA5y"))), react_1["default"].createElement("div", { 8023 className: "col small-12 large-12" 8024 }, react_1["default"].createElement("div", { 8025 className: "col-inner" 8026 }, react_1["default"].createElement("div", { 8027 className: "is-divider divider clearfix", 8028 style: { 8029 marginTop: '0.0em', 8030 marginBottom: '0.0em', 8031 maxWidth: '100%', 8032 backgroundColor: 'rgb(255, 83, 29)' 8033 } 8034 })))), react_1["default"].createElement("div", { 8035 className: "row row-collapse", 8036 id: "row-1557720083" 8037 }, react_1["default"].createElement("div", { 8038 className: "col small-12 large-12" 8039 }, react_1["default"].createElement("div", { 8040 className: "col-inner" 8041 }, react_1["default"].createElement("div", { 8042 className: "gap-element", 8043 style: { 8044 display: 'block', 8045 height: 'auto', 8046 paddingTop: '10px' 8047 } 8048 }), react_1["default"].createElement("div", { 8049 className: "row large-columns-6 medium-columns-3 small-columns-2 row-xsmall row-full-width has-shadow row-box-sha
8049dow-1", 8050 style: { 8051 marginLeft: '0px', 8052 marginRight: '0px' 8053 } 8054 }, products.map(function (product, index) { 8055 var productImage = '/libraries/libraryxhome-3888/images/76693220_1666972563440263_7492540632209031168_n.jpg'; 8056 if (product.image_list) { 8057 productImage = product.image_list.split(',')[0]; 8058 } else if (product.image) { 8059 productImage = product.image; 8060 } 8061 return react_1["default"].createElement("div", { 8062 className: "col", 8063 key: index 8064 }, react_1["default"].createElement("div", { 8065 className: "col-inner" 8066 }, product.price > 0 && product.discount > 0 && react_1["default"].createElement("div", { 8067 className: "badge-container absolute left top z-1" 8068 }, react_1["default"].createElement("div", { 8069 className: "callout badge badge-square" 8070 }, react_1["default"].createElement("div", { 8071 className: "badge-inner secondary on-sale" 8072 }, react_1["default"].createElement("span", { 8073 className: "onsale" 8074 }, "-", 100 - Math.ceil(product.discount / product.price * 100), "%")))), react_1["default"].createElement("div", { 8075 className: "product-small box has-hover box-normal box-text-bottom" 8076 }, react_1["default"].createElement("div", { 8077 className: "box-image" 8078 }, react_1["default"].createElement("div", null, react_1["default"].createElement("a", { 8079 href: '/chi-tiet-san-pham/' + product.slug + '?user_email=' + product.user_email 8080 }, react_1["default"].createElement("img", { 8081 width: 300, 8082 height: 300, 8083 src: productImage 8084 }))), react_1["default"].createElement("div", { 8085 className: "image-tools z-top top right show-on-hover" 8086 }), react_1["default"].createElement("div", { 8087 className: "image-tools grid-tools text-center hide-for-small bottom hover-slide-in show-on-hover" 8088 })), react_1["default"].createElement("div", { 8089 className: "box-text" 8090 }, react_1["default"].createElement("div", { 8091 className: "title-wrapper" 8092 }, react_1["default"].createElement("p", { 8093 className: "category uppercase is-smaller no-text-overflow product-cat op-7" 8094 }, product.category_string), react_1["default"].createElement("p", { 8095 className: "name product-title" 8096 }, react_1["default"].createElement("a", { 8097 href: '/chi-tiet-san-pham/' + product.slug + '?user_email=' + product.user_email 8098 }, product.title)), react_1["default"].createElement("p", { 8099 className: "" 8100 }, react_1["default"].createElement("i", { 8101 className: "star fa fa-star", 8102 "aria-hidden": "true" 8103 }), product.star > 1 ? react_1["default"].createElement("i", { 8104 className: "star fa fa-star", 8105 "aria-hidden": "true" 8106 }) : react_1["default"].createElement("i", { 8107 className: "fa fa-star", 8108 "aria-hidden": "true" 8109 }), product.star > 2 ? react_1["default"].createElement("i", { 8110 className: "star fa fa-star", 8111 "aria-hidden": "true" 8112 }) : react_1["default"].createElement("i", { 8113 className: "fa fa-star", 8114 "aria-hidden": "true" 8115 }), product.star > 3 ? react_1["default"].createElement("i", { 8116 className: "star fa fa-star", 8117 "aria-hidden": "true" 8118 }) : react_1["default"].createElement("i", { 8119 className: "fa fa-star", 8120 "aria-hidden": "true" 8121 }), product.star > 4 ? react_1["default"].createElement("i", { 8122 className: "star fa fa-star", 8123 "aria-hidden": "true" 8124 }) : react_1["default"].createElement("i", { 8125 className: "fa fa-star", 8126 "aria-hidden": "true" 8127 })), react_1["default"].createElement("div", { 8128 className: "price-wrapper" 8129 }, product.discount > 0 && product.price_moma < 0 && react_1["default"].createElement("span", { 8130 className: "price" 8131 }, react_1["default"].createElement("del", { 8132 style: { 8133 "float": "left" 8134 } 8135 }, react_1["default"].createElement("span", { 8136 className: "woocommerce-Price-amount amount" 8137 }, new Intl.NumberFormat('vi-VN', { 8138 maximumSignificantDigits: 3 8139 }).format(product.price), "\xA0", react_1["default"].createElement("span", { 8140 className: "woocommerce-Price-currencySymbol" 8141 }, "\u20AB"))), " ", react_1["default"].createElement("ins", { 8142 style: { 8143 "float": "right" 8144 } 8145 }, react_1["default"].createElement("span", { 8146 className: "woocommerce-Price-amount amount", 8147 style: { 8148 color: "#f00", 8149 fontWeight: "bold" 8150 } 8151 }, new Intl.NumberFormat('vi-VN', { 8152 maximumSignificantDigits: 3 8153 }).format(product.discount), "\xA0", react_1["default"].createElement("span", { 8154 className: "woocommerce-Price-currencySymbol" 8155 }, "\u20AB")))), product.price_moma > 0 && react_1["default"].createElement("span", { 8156 className: "price" 8157 }, react_1["default"].createElement("del", { 8158 style: { 8159 "float": "left" 8160 } 8161 }, react_1["default"].createElement("span", { 8162 className: "woocommerce-Price-amount amount" 8163 }, new Intl.NumberFormat('vi-VN', { 8164 maximumSignificantDigits: 3 8165 }).format(product.price), "\xA0", react_1["default"].createElement("span", { 8166 className: "woocommerce-Price-currencySymbol" 8167 }, "\u20AB"))), " ", react_1["default"].createElement("ins", { 8168 style: { 8169 "float": "right" 8170 } 8171 }, react_1["default"].createElement("span", { 8172 className: "woocommerce-Price-amount amount", 8173 style: { 8174 color: "#f00", 8175 fontWeight: "bold" 8176 } 8177 }, new Intl.NumberFormat('vi-VN', { 8178 maximumSignificantDigits: 3 8179 }).format(product.price_moma), "\xA0", react_1["default"].createElement("span", { 8180 className: "woocommerce-Price-currencySymbol" 8181 }, "\u20AB")))), product.discount <= 0 && product.price_moma <= 0 && react_1["default"].createElement("span", { 8182 className: "price" 8183 }, react_1["default"].createElement("ins", { 8184 style: { 8185 "float": "left" 8186 } 8187 }, react_1["default"].createElement("span", { 8188 className: "woocommerce-Price-amount amount" 8189 }, new Intl.NumberFormat('vi-VN', { 8190 maximumSignificantDigits: 3 8191 }).format(product.price), "\xA0", react_1["default"].createElement("span", { 8192 className: "woocommerce-Price-currencySymbol" 8193 }, "\u20AB")))))))))); 8194 }), ",")))), react_1["default"].createElement("div", { 8195 className: "row row-collapse", 8196 id: "row-1309925252" 8197 }, react_1["default"].createElement("div", { 8198 className: "col medium-4 small-12 large-4" 8199 }, react_1["default"].createElement("div", { 8200 className: "col-inner" 8201 })), react_1["default"].createElement("div", { 8202 className: "col medium-4 small-12 large-4" 8203 }, react_1["default"].createElement("div", { 8204 className: "col-inner text-center" 8205 }, react_1["default"].createElement("div", { 8206 className: "gap-element", 8207 style: { 8208 display: 'block', 8209 height: 'auto', 8210 paddingTop: '20px' 8211 } 8212 }), react_1["default"].createElement("button", { 8213 onClick: viewMore, 8214 className: "btn btn-outline btn-primary w-25" 8215 }, react_1["default"].createElement("span", null, "Xem th\xEAm")))
8215), react_1["default"].createElement("div", { 8216 className: "col medium-4 small-12 large-4" 8217 }, react_1["default"].createElement("div", { 8218 className: "col-inner" 8219 }))), react_1["default"].createElement("div", { 8220 className: "gap-element", 8221 style: { 8222 display: 'block', 8223 height: 'auto', 8224 paddingTop: '50px' 8225 } 8226 })); 8227}; 8228exports.Every = Every; 8229 8230/***/ }), 8231
8232/***/ "./resources/js/components/every/index.ts": 8233/*!************************************************!*\ 8234 !*** ./resources/js/components/every/index.ts ***! 8235 \************************************************/ 8236/***/ (function(__unused_webpack_module, exports, __webpack_require__) { 8237 8238"use strict"; 8239 8240 8241var __createBinding = this && this.__createBinding || (Object.create ? function (o, m, k, k2) { 8242 if (k2 === undefined) k2 = k; 8243 var desc = Object.getOwnPropertyDescriptor(m, k); 8244 if (!desc || ("get" in desc ? !m.__esModule : desc.writable || desc.configurable)) { 8245 desc = { 8246 enumerable: true, 8247 get: function get() { 8248 return m[k]; 8249 } 8250 }; 8251 } 8252 Object.defineProperty(o, k2, desc); 8253} : function (o, m, k, k2) { 8254 if (k2 === undefined) k2 = k; 8255 o[k2] = m[k]; 8256}); 8257var __exportStar = this && this.__exportStar || function (m, exports) { 8258 for (var p in m) if (p !== "default" && !Object.prototype.hasOwnProperty.call(exports, p)) __createBinding(exports, m, p); 8259}; 8260Object.defineProperty(exports, "__esModule", ({ 8261 value: true 8262})); 8263__exportStar(__webpack_require__(/*! ./every */ "./resources/js/components/every/every.tsx"), exports); 8264 8265/***/ }), 8266
8267/***/ "./resources/js/components/flash-sale/flash-sale.tsx": 8268/*!***********************************************************!*\ 8269 !*** ./resources/js/components/flash-sale/flash-sale.tsx ***! 8270 \***********************************************************/ 8271/***/ (function(__unused_webpack_module, exports, __webpack_require__) { 8272 8273"use strict"; 8274 8275 8276var __createBinding = this && this.__createBinding || (Object.create ? function (o, m, k, k2) { 8277 if (k2 === undefined) k2 = k; 8278 var desc = Object.getOwnPropertyDescriptor(m, k); 8279 if (!desc || ("get" in desc ? !m.__esModule : desc.writable || desc.configurable)) { 8280 desc = { 8281 enumerable: true, 8282 get: function get() { 8283 return m[k]; 8284 } 8285 }; 8286 } 8287 Object.defineProperty(o, k2, desc); 8288} : function (o, m, k, k2) { 8289 if (k2 === undefined) k2 = k; 8290 o[k2] = m[k]; 8291}); 8292var __setModuleDefault = this && this.__setModuleDefault || (Object.create ? function (o, v) { 8293 Object.defineProperty(o, "default", { 8294 enumerable: true, 8295 value: v 8296 }); 8297} : function (o, v) { 8298 o["default"] = v; 8299}); 8300var __importStar = this && this.__importStar || function (mod) { 8301 if (mod && mod.__esModule) return mod; 8302 var result = {}; 8303 if (mod != null) for (var k in mod) if (k !== "default" && Object.prototype.hasOwnProperty.call(mod, k)) __createBinding(result, mod, k); 8304 __setModuleDefault(result, mod); 8305 return result; 8306}; 8307Object.defineProperty(exports, "__esModule", ({ 8308 value: true 8309})); 8310exports.FlashSale = void 0; 8311var react_1 = __importStar(__webpack_require__(/*! react */ "./node_modules/react/index.js")); 8312var ramda_1 = __webpack_require__(/*! ramda */ "./node_modules/ramda/src/index.js"); 8313var FlashSale = function FlashSale(props) { 8314 (0, react_1.useEffect)(function () { 8315 __webpack_require__(/*! ./flash-sale.style.scss */ "./resources/js/components/flash-sale/flash-sale.style.scss"); 8316 }, []); 8317 return react_1["default"].createElement("div", { 8318 className: "section-content relative" 8319 }, react_1["default"].createElement("div", { 8320 className: "gap-element", 8321 style: { 8322 display: 'block', 8323 height: 'auto', 8324 paddingTop: '30px' 8325 } 8326 }), react_1["default"].createElement("div", { 8327 className: "row row-collapse align-middle", 8328 id: "row-2086499104" 8329 }, react_1["default"].createElement("div", { 8330 className: "col medium-2 small-12 large-2" 8331 }, react_1["default"].createElement("div", { 8332 className: "col-inner" 8333 }, react_1["default"].createElement("div", { 8334 className: "img has-hover x md-x lg-x y md-y lg-y", 8335 style: { 8336 width: '70%' 8337 } 8338 }, react_1["default"].createElement("div", { 8339 className: "img-inner dark" 8340 }, react_1["default"].createElement("img", { 8341 width: 480, 8342 height: 92, 8343 src: "https://moma.com.vn/libraries/libraryxhome-3888/images/76693220_1666972563440263_7492540632209031168_n.jpg" 8344 }))))), react_1["default"].createElement("div", { 8345 className: "col medium-2 small-12 large-2" 8346 }, react_1["default"].createElement("div", { 8347 className: "col-inner", 8348 style: { 8349 padding: '0px 0px 0px 0px' 8350 } 8351 }, react_1["default"].createElement("div", { 8352 id: "timer-657285294", 8353 className: "ux-timer dark", 8354 "data-text-plural": "s", 8355 "data-text-hour": "hour", 8356 "data-text-day": "day", 8357 "data-text-week": "week", 8358 "data-text-min": "min", 8359 "data-text-sec": "sec", 8360 "data-text-hour-p": true, 8361 "data-text-day-p": true, 8362 "data-text-week-p": true, 8363 "data-text-min-p": true, 8364 "data-text-sec-p": true, 8365 "data-countdown": "2017/10/28 18:00" 8366 }, react_1["default"].createElement("span", null, "0", react_1["default"].createElement("strong", null, "hours")), react_1["default"].createElement("span", null, "0", react_1["default"].createElement("strong", null, "min")), react_1["default"].createElement("span", null, "0", react_1["default"].createElement("strong", null, "sec"))))), react_1["default"].createElement("div", { 8367 className: "col medium-8 small-12 large-8" 8368 }, react_1["default"].createElement("div", { 8369 className: "col-inner text-right" 8370 }, react_1["default"].createElement("p", { 8371 className: "orange" 8372 }, react_1["default"].createElement("a", { 8373 href: "/san-pham/demo" 8374 }, "Xem T\u1EA5t C\u1EA3 >"))))), react_1["default"].createElement("div", { 8375 className: "row row-collapse", 8376 id: "row-739879242" 8377 }, react_1["default"].createElement("div", { 8378 className: "col small-12 large-12" 8379 }, react_1["default"].createElement("div", { 8380 className: "col-inner" 8381 }, react_1["default"].createElement("div", { 8382 className: "row large-columns-6 medium-columns-3 small-columns-2 row-collapse slider row-slider slider-nav-reveal slider-nav-push flickity-enabled is-draggable", 8383 "data-flickity-options": "{\"imagesLoaded\": true, \"groupCells\": \"100%\", \"dragThreshold\" : 5, \"cellAlign\": \"left\",\"wrapAround\": true,\"prevNextButtons\": true,\"percentPosition\": true,\"pageDots\": false, \"rightToLeft\": false, \"autoPlay\" : false}", 8384 tabIndex: 0 8385 }, react_1["default"].createElement("div", { 8386 className: "flickity-viewport", 8387 style: { 8388 height: '350px' 8389 } 8390 }, react_1["default"].createElement("div", { 8391 className: "flickity-slider" 8392 }, (0, ramda_1.times)(function () { 8393 return react_1["default"].createElement("div", { 8394 className: "col is-selected" 8395 }, react_1["default"].createElement("div", { 8396 className: "col-inner" 8397 }, react_1["default"].createElement("div", { 8398 className: "badge-container absolute left top z-1" 8399 }, react_1["default"].createElement("div", { 8400 className: "callout badge badge-square" 8401 }, react_1["default"].createElement("div", { 8402 className: "badge-inner secondary on-sale" 8403 }, react_1["default"].createElement("span", { 8404 className: "onsale" 8405 }, "-10%")))), react_1["default"].createElement("div", { 8406 className: "product-small box has-hover box-normal box-text-bottom" 8407 }, react_1["default"].createElement("div", { 8408 className: "box-image" 8409 }, react_1["default"].createElement("div", null, react_1["default"].createElement("a", { 8410 href: "/san-pham/demo" 8411 }, react_1["default"].createElement("img", { 8412 width: 300, 8413 height: 300, 8414 src: "https://moma.com.vn/libraries/libraryxhome-3888/images/76693220_1666972563440263_7492540632209031168_n.jpg",
8415 sizes: "(max-width: 300px) 100vw, 300px" 8416 }), "\t\t\t\t\t\t\t\t\t")), react_1["default"].createElement("div", { 8417 className: "image-tools z-top top right show-on-hover" 8418 }), react_1["default"].createElement("div", { 8419 className: "image-tools grid-tools text-center hide-for-small bottom hover-slide-in show-on-hover" 8420 })), react_1["default"].createElement("div", { 8421 className: "box-text text-center", 8422 style: { 8423 backgroundColor: 'rgb(255, 255, 255)' 8424 } 8425 }, react_1["default"].createElement("div", { 8426 className: "title-wrapper" 8427 }, react_1["default"].createElement("p", { 8428 className: "category uppercase is-smaller no-text-overflow product-cat op-7" 8429 }, "\u0110i\u1EC7n tho\u1EA1i"), react_1["default"].createElement("p", { 8430 className: "name product-title" 8431 }, react_1["default"].createElement("a", { 8432 href: "/san-pham/demo" 8433 }, "\u0110i\u1EC7n tho\u1EA1i samsung S5 active ch\u1ED1ng n\u01B0\u1EDBc")), react_1["default"].createElement("span", { 8434 className: "price" 8435 }, react_1["default"].createElement("del", null, react_1["default"].createElement("span", { 8436 className: "woocommerce-Price-amount amount" 8437 }, "3,000,000\xA0", react_1["default"].createElement("span", { 8438 className: "woocommerce-Price-currencySymbol" 8439 }, "\u20AB"))), " ", react_1["default"].createElement("ins", null, react_1["default"].createElement("span", { 8440 className: "woocommerce-Price-amount amount" 8441 }, "2,690,000\xA0", react_1["default"].createElement("span", { 8442 className: "woocommerce-Price-currencySymbol" 8443 }, "\u20AB"))))))))); 8444 }, 16)))), react_1["default"].createElement("button", { 8445 className: "flickity-prev-next-button previous", 8446 type: "button", 8447 "aria-label": "previous" 8448 }, react_1["default"].createElement("svg", { 8449 viewBox: "0 0 100 100" 8450 }, react_1["default"].createElement("path", { 8451 d: "M 10,50 L 60,100 L 70,90 L 30,50 L 70,10 L 60,0 Z", 8452 className: "arrow" 8453 }))), react_1["default"].createElement("button", { 8454 className: "flickity-prev-next-button next", 8455 type: "button", 8456 "aria-label": "next" 8457 }, react_1["default"].createElement("svg", { 8458 viewBox: "0 0 100 100" 8459 }, react_1["default"].createElement("path", { 8460 d: "M 10,50 L 60,100 L 70,90 L 30,50 L 70,10 L 60,0 Z", 8461 className: "arrow", 8462 transform: "translate(100, 100) rotate(180) " 8463 }))))))); 8464}; 8465exports.FlashSale = FlashSale; 8466 8467/***/ }), 8468
8469/***/ "./resources/js/components/flash-sale/index.ts": 8470/*!*****************************************************!*\ 8471 !*** ./resources/js/components/flash-sale/index.ts ***! 8472 \*****************************************************/ 8473/***/ (function(__unused_webpack_module, exports, __webpack_require__) { 8474 8475"use strict"; 8476 8477 8478var __createBinding = this && this.__createBinding || (Object.create ? function (o, m, k, k2) { 8479 if (k2 === undefined) k2 = k; 8480 var desc = Object.getOwnPropertyDescriptor(m, k); 8481 if (!desc || ("get" in desc ? !m.__esModule : desc.writable || desc.configurable)) { 8482 desc = { 8483 enumerable: true, 8484 get: function get() { 8485 return m[k]; 8486 } 8487 }; 8488 } 8489 Object.defineProperty(o, k2, desc); 8490} : function (o, m, k, k2) { 8491 if (k2 === undefined) k2 = k; 8492 o[k2] = m[k]; 8493}); 8494var __exportStar = this && this.__exportStar || function (m, exports) { 8495 for (var p in m) if (p !== "default" && !Object.prototype.hasOwnProperty.call(exports, p)) __createBinding(exports, m, p); 8496}; 8497Object.defineProperty(exports, "__esModule", ({ 8498 value: true 8499})); 8500__exportStar(__webpack_require__(/*! ./flash-sale */ "./resources/js/components/flash-sale/flash-sale.tsx"), exports); 8501 8502/***/ }), 8503
8504/***/ "./resources/js/components/free/free.tsx": 8505/*!***********************************************!*\ 8506 !*** ./resources/js/components/free/free.tsx ***! 8507 \***********************************************/ 8508/***/ (function(__unused_webpack_module, exports, __webpack_require__) { 8509 8510"use strict"; 8511 8512 8513var __createBinding = this && this.__createBinding || (Object.create ? function (o, m, k, k2) { 8514 if (k2 === undefined) k2 = k; 8515 var desc = Object.getOwnPropertyDescriptor(m, k); 8516 if (!desc || ("get" in desc ? !m.__esModule : desc.writable || desc.configurable)) { 8517 desc = { 8518 enumerable: true, 8519 get: function get() { 8520 return m[k]; 8521 } 8522 }; 8523 } 8524 Object.defineProperty(o, k2, desc); 8525} : function (o, m, k, k2) { 8526 if (k2 === undefined) k2 = k; 8527 o[k2] = m[k]; 8528}); 8529var __setModuleDefault = this && this.__setModuleDefault || (Object.create ? function (o, v) { 8530 Object.defineProperty(o, "default", { 8531 enumerable: true, 8532 value: v 8533 }); 8534} : function (o, v) { 8535 o["default"] = v; 8536}); 8537var __importStar = this && this.__importStar || function (mod) { 8538 if (mod && mod.__esModule) return mod; 8539 var result = {}; 8540 if (mod != null) for (var k in mod) if (k !== "default" && Object.prototype.hasOwnProperty.call(mod, k)) __createBinding(result, mod, k); 8541 __setModuleDefault(result, mod); 8542 return result; 8543}; 8544var __spreadArray = this && this.__spreadArray || function (to, from, pack) { 8545 if (pack || arguments.length === 2) for (var i = 0, l = from.length, ar; i < l; i++) { 8546 if (ar || !(i in from)) { 8547 if (!ar) ar = Array.prototype.slice.call(from, 0, i); 8548 ar[i] = from[i]; 8549 } 8550 } 8551 return to.concat(ar || Array.prototype.slice.call(from)); 8552}; 8553var __importDefault = this && this.__importDefault || function (mod) { 8554 return mod && mod.__esModule ? mod : { 8555 "default": mod 8556 }; 8557}; 8558Object.defineProperty(exports, "__esModule", ({ 8559 value: true 8560})); 8561exports.Free = void 0; 8562var react_1 = __importStar(__webpack_require__(/*! react */ "./node_modules/react/index.js")); 8563var axios_1 = __importDefault(__webpack_require__(/*! axios */ "./node_modules/axios/index.js")); 8564var Free = function Free(props) { 8565 var _a = (0, react_1.useState)([]), 8566 products = _a[0], 8567 setProducts = _a[1]; 8568 var _b = (0, react_1.useState)(12), 8569 limit = _b[0], 8570 setLimit = _b[1]; 8571 var _c = (0, react_1.useState)(0), 8572 offset = _c[0], 8573 setOffset = _c[1]; 8574 (0, react_1.useEffect)(function () { 8575 axios_1["default"].get("/data/danh-sach-san-pham-tai-trang-chu?free=1&limit=".concat(limit, "&offset=").concat(offset)).then(function (res) { 8576 setProducts(__spreadArray(__spreadArray([], products, true), res.data, true)); 8577 }); 8578 }, [limit, offset]); 8579 var viewMore = function viewMore() { 8580 setOffset(offset + limit); 8581 }; 8582 return react_1["default"].createElement("div", { 8583 className: "section-content relative" 8584 }, react_1["default"].createElement("div", { 8585 className: "gap-element", 8586 style: { 8587 display: 'block', 8588 height: 'auto', 8589 paddingTop: '30px' 8590 } 8591 }), react_1["default"].createElement("div", { 8592 className: "row row-collapse", 8593 id: "row-1258137080" 8594 }, react_1["default"].createElement("div", { 8595 className: "col medium-12 small-12 large-12" 8596 }, react_1["default"].createElement("div", { 8597 className: "col-inner", 8598 style: { 8599 margin: '0px 0px -10px 0px' 8600 } 8601 }, react_1["default"].createElement("h3", { 8602 className: "orange" 8603 }, "S\u1EA3n ph\u1EA9m mi\u1EC5n ph\xED"))), react_1["default"].createElement("div", { 8604 className: "col small-12 large-12" 8605 }, react_1["default"].createElement("div", { 8606 className: "col-inner" 8607 }, react_1["default"].createElement("div", { 8608 className: "is-divider divider clearfix", 8609 style: { 8610 marginTop: '0.0em', 8611 marginBottom: '0.0em', 8612 maxWidth: '100%', 8613 backgroundColor: 'rgb(255, 83, 29)' 8614 } 8615 })))), react_1["default"].createElement("div", { 8616 className: "row row-collapse", 8617 id: "row-1557720083" 8618 }, react_1["default"].createElement("div", { 8619 className: "col small-12 large-12" 8620 }, react_1["default"].createElement("div", { 8621 className: "col-inner" 8622 }, react_1["default"].createElement("div", { 8623 className: "gap-element", 8624 style: { 8625 display: 'block', 8626 height: 'auto', 8627 paddingTop: '10px' 8628 } 8629 }), react_1["default"].createElement("div", { 8630 className: "row large-columns-6 medium-columns-3 small-columns-2 row-xsmall row-full-width has-shadow row-box-sha
8630dow-1", 8631 style: { 8632 marginLeft: '0px', 8633 marginRight: '0px' 8634 } 8635 }, products.map(function (product, index) { 8636 var productImage = '/libraries/libraryxhome-3888/images/76693220_1666972563440263_7492540632209031168_n.jpg'; 8637 if (product.image_list) { 8638 productImage = product.image_list.split(',')[0]; 8639 } else if (product.image) { 8640 productImage = product.image; 8641 } 8642 return react_1["default"].createElement("div", { 8643 className: "col", 8644 key: index 8645 }, react_1["default"].createElement("div", { 8646 className: "col-inner" 8647 }, product.price > 0 && product.discount > 0 && react_1["default"].createElement("div", { 8648 className: "badge-container absolute left top z-1" 8649 }, react_1["default"].createElement("div", { 8650 className: "callout badge badge-square" 8651 }, react_1["default"].createElement("div", { 8652 className: "badge-inner secondary on-sale" 8653 }, react_1["default"].createElement("span", { 8654 className: "onsale" 8655 }, "-", 100 - Math.ceil(product.discount / product.price * 100), "%")))), react_1["default"].createElement("div", { 8656 className: "product-small box has-hover box-normal box-text-bottom" 8657 }, react_1["default"].createElement("div", { 8658 className: "box-image" 8659 }, react_1["default"].createElement("div", null, react_1["default"].createElement("a", { 8660 href: '/chi-tiet-san-pham/' + product.slug + '?user_email=' + product.user_email 8661 }, react_1["default"].createElement("img", { 8662 width: 300, 8663 height: 300, 8664 src: productImage 8665 }))), react_1["default"].createElement("div", { 8666 className: "image-tools z-top top right show-on-hover" 8667 }), react_1["default"].createElement("div", { 8668 className: "image-tools grid-tools text-center hide-for-small bottom hover-slide-in show-on-hover" 8669 })), react_1["default"].createElement("div", { 8670 className: "box-text" 8671 }, react_1["default"].createElement("div", { 8672 className: "title-wrapper" 8673 }, react_1["default"].createElement("p", { 8674 className: "category uppercase is-smaller no-text-overflow product-cat op-7" 8675 }, product.category_string), react_1["default"].createElement("p", { 8676 className: "name product-title" 8677 }, react_1["default"].createElement("a", { 8678 href: '/chi-tiet-san-pham/' + product.slug + '?user_email=' + product.user_email 8679 }, product.title)), react_1["default"].createElement("p", { 8680 className: "" 8681 }, react_1["default"].createElement("i", { 8682 className: "star fa fa-star", 8683 "aria-hidden": "true" 8684 }), product.star > 1 ? react_1["default"].createElement("i", { 8685 className: "star fa fa-star", 8686 "aria-hidden": "true" 8687 }) : react_1["default"].createElement("i", { 8688 className: "fa fa-star", 8689 "aria-hidden": "true" 8690 }), product.star > 2 ? react_1["default"].createElement("i", { 8691 className: "star fa fa-star", 8692 "aria-hidden": "true" 8693 }) : react_1["default"].createElement("i", { 8694 className: "fa fa-star", 8695 "aria-hidden": "true" 8696 }), product.star > 3 ? react_1["default"].createElement("i", { 8697 className: "star fa fa-star", 8698 "aria-hidden": "true" 8699 }) : react_1["default"].createElement("i", { 8700 className: "fa fa-star", 8701 "aria-hidden": "true" 8702 }), product.star > 4 ? react_1["default"].createElement("i", { 8703 className: "star fa fa-star", 8704 "aria-hidden": "true" 8705 }) : react_1["default"].createElement("i", { 8706 className: "fa fa-star", 8707 "aria-hidden": "true" 8708 })), react_1["default"].createElement("div", { 8709 className: "price-wrapper" 8710 }, product.discount > 0 && product.price_moma < 0 && react_1["default"].createElement("span", { 8711 className: "price" 8712 }, react_1["default"].createElement("del", { 8713 style: { 8714 "float": "left" 8715 } 8716 }, react_1["default"].createElement("span", { 8717 className: "woocommerce-Price-amount amount" 8718 }, new Intl.NumberFormat('vi-VN', { 8719 maximumSignificantDigits: 3 8720 }).format(product.price), "\xA0", react_1["default"].createElement("span", { 8721 className: "woocommerce-Price-currencySymbol" 8722 }, "\u20AB"))), " ", react_1["default"].createElement("ins", { 8723 style: { 8724 "float": "right" 8725 } 8726 }, react_1["default"].createElement("span", { 8727 className: "woocommerce-Price-amount amount", 8728 style: { 8729 color: "#f00", 8730 fontWeight: "bold" 8731 } 8732 }, new Intl.NumberFormat('vi-VN', { 8733 maximumSignificantDigits: 3 8734 }).format(product.discount), "\xA0", react_1["default"].createElement("span", { 8735 className: "woocommerce-Price-currencySymbol" 8736 }, "\u20AB")))), product.price_moma > 0 && react_1["default"].createElement("span", { 8737 className: "price" 8738 }, react_1["default"].createElement("del", { 8739 style: { 8740 "float": "left" 8741 } 8742 }, react_1["default"].createElement("span", { 8743 className: "woocommerce-Price-amount amount" 8744 }, new Intl.NumberFormat('vi-VN', { 8745 maximumSignificantDigits: 3 8746 }).format(product.price), "\xA0", react_1["default"].createElement("span", { 8747 className: "woocommerce-Price-currencySymbol" 8748 }, "\u20AB"))), " ", react_1["default"].createElement("ins", { 8749 style: { 8750 "float": "right" 8751 } 8752 }, react_1["default"].createElement("span", { 8753 className: "woocommerce-Price-amount amount", 8754 style: { 8755 color: "#f00", 8756 fontWeight: "bold" 8757 } 8758 }, new Intl.NumberFormat('vi-VN', { 8759 maximumSignificantDigits: 3 8760 }).format(product.price_moma), "\xA0", react_1["default"].createElement("span", { 8761 className: "woocommerce-Price-currencySymbol" 8762 }, "\u20AB")))), product.discount <= 0 && product.price_moma <= 0 && react_1["default"].createElement("span", { 8763 className: "price" 8764 }, react_1["default"].createElement("ins", { 8765 style: { 8766 "float": "left" 8767 } 8768 }, react_1["default"].createElement("span", { 8769 className: "woocommerce-Price-amount amount" 8770 }, new Intl.NumberFormat('vi-VN', { 8771 maximumSignificantDigits: 3 8772 }).format(product.price), "\xA0", react_1["default"].createElement("span", { 8773 className: "woocommerce-Price-currencySymbol" 8774 }, "\u20AB")))))))))); 8775 }), ",")))), react_1["default"].createElement("div", { 8776 className: "row row-collapse", 8777 id: "row-1309925252" 8778 }, react_1["default"].createElement("div", { 8779 className: "col medium-4 small-12 large-4" 8780 }, react_1["default"].createElement("div", { 8781 className: "col-inner" 8782 })), react_1["default"].createElement("div", { 8783 className: "col medium-4 small-12 large-4" 8784 }, react_1["default"].createElement("div", { 8785 className: "col-inner text-center" 8786 }, react_1["default"].createElement("div", { 8787 className: "gap-element", 8788 style: { 8789 display: 'block', 8790 height: 'auto', 8791 paddingTop: '20px' 8792 } 8793 }), react_1["default"].createElement("button", { 8794 onClick: viewMore, 8795 className: "btn btn-outline btn-primary w-25" 8796 }, react_1["default"].createElement("span", null, "Xem th\xEAm")))
8796), react_1["default"].createElement("div", { 8797 className: "col medium-4 small-12 large-4" 8798 }, react_1["default"].createElement("div", { 8799 className: "col-inner" 8800 }))), react_1["default"].createElement("div", { 8801 className: "gap-element", 8802 style: { 8803 display: 'block', 8804 height: 'auto', 8805 paddingTop: '50px' 8806 } 8807 })); 8808}; 8809exports.Free = Free; 8810 8811/***/ }), 8812
8813/***/ "./resources/js/components/free/index.ts": 8814/*!***********************************************!*\ 8815 !*** ./resources/js/components/free/index.ts ***! 8816 \***********************************************/ 8817/***/ (function(__unused_webpack_module, exports, __webpack_require__) { 8818 8819"use strict"; 8820 8821 8822var __createBinding = this && this.__createBinding || (Object.create ? function (o, m, k, k2) { 8823 if (k2 === undefined) k2 = k; 8824 var desc = Object.getOwnPropertyDescriptor(m, k); 8825 if (!desc || ("get" in desc ? !m.__esModule : desc.writable || desc.configurable)) { 8826 desc = { 8827 enumerable: true, 8828 get: function get() { 8829 return m[k]; 8830 } 8831 }; 8832 } 8833 Object.defineProperty(o, k2, desc); 8834} : function (o, m, k, k2) { 8835 if (k2 === undefined) k2 = k; 8836 o[k2] = m[k]; 8837}); 8838var __exportStar = this && this.__exportStar || function (m, exports) { 8839 for (var p in m) if (p !== "default" && !Object.prototype.hasOwnProperty.call(exports, p)) __createBinding(exports, m, p); 8840}; 8841Object.defineProperty(exports, "__esModule", ({ 8842 value: true 8843})); 8844__exportStar(__webpack_require__(/*! ./free */ "./resources/js/components/free/free.tsx"), exports); 8845 8846/***/ }), 8847
vendor: 1,899 bytes, lines 8848-8889
8848/***/ "./resources/js/components/index.ts": 8849/*!******************************************!*\ 8850 !*** ./resources/js/components/index.ts ***! 8851 \******************************************/ 8852/***/ (function(__unused_webpack_module, exports, __webpack_require__) { 8853 8854"use strict"; 8855 8856 8857var __createBinding = this && this.__createBinding || (Object.create ? function (o, m, k, k2) { 8858 if (k2 === undefined) k2 = k; 8859 var desc = Object.getOwnPropertyDescriptor(m, k); 8860 if (!desc || ("get" in desc ? !m.__esModule : desc.writable || desc.configurable)) { 8861 desc = { 8862 enumerable: true, 8863 get: function get() { 8864 return m[k]; 8865 } 8866 }; 8867 } 8868 Object.defineProperty(o, k2, desc); 8869} : function (o, m, k, k2) { 8870 if (k2 === undefined) k2 = k; 8871 o[k2] = m[k]; 8872}); 8873var __exportStar = this && this.__exportStar || function (m, exports) { 8874 for (var p in m) if (p !== "default" && !Object.prototype.hasOwnProperty.call(exports, p)) __createBinding(exports, m, p); 8875}; 8876Object.defineProperty(exports, "__esModule", ({ 8877 value: true 8878})); 8879__exportStar(__webpack_require__(/*! ./category-list */ "./resources/js/components/category-list/index.ts"), exports); 8880__exportStar(__webpack_require__(/*! ./flash-sale */ "./resources/js/components/flash-sale/index.ts"), exports); 8881__exportStar(__webpack_require__(/*! ./top-sale */ "./resources/js/components/top-sale/index.ts"), exports); 8882__exportStar(__webpack_require__(/*! ./products */ "./resources/js/components/products/index.ts"), exports); 8883__exportStar(__webpack_require__(/*! ./free */ "./resources/js/components/free/index.ts"), exports); 8884__exportStar(__webpack_require__(/*! ./new */ "./resources/js/components/new/index.ts"), exports); 8885__exportStar(__webpack_require__(/*! ./buy */ "./resources/js/components/buy/index.ts"), exports); 8886__exportStar(__webpack_require__(/*! ./every */ "./resources/js/components/every/index.ts"), exports); 8887 8888/***/ }), 8889
8890/***/ "./resources/js/components/new/index.ts": 8891/*!**********************************************!*\ 8892 !*** ./resources/js/components/new/index.ts ***! 8893 \**********************************************/ 8894/***/ (function(__unused_webpack_module, exports, __webpack_require__) { 8895 8896"use strict"; 8897 8898 8899var __createBinding = this && this.__createBinding || (Object.create ? function (o, m, k, k2) { 8900 if (k2 === undefined) k2 = k; 8901 var desc = Object.getOwnPropertyDescriptor(m, k); 8902 if (!desc || ("get" in desc ? !m.__esModule : desc.writable || desc.configurable)) { 8903 desc = { 8904 enumerable: true, 8905 get: function get() { 8906 return m[k]; 8907 } 8908 }; 8909 } 8910 Object.defineProperty(o, k2, desc); 8911} : function (o, m, k, k2) { 8912 if (k2 === undefined) k2 = k; 8913 o[k2] = m[k]; 8914}); 8915var __exportStar = this && this.__exportStar || function (m, exports) { 8916 for (var p in m) if (p !== "default" && !Object.prototype.hasOwnProperty.call(exports, p)) __createBinding(exports, m, p); 8917}; 8918Object.defineProperty(exports, "__esModule", ({ 8919 value: true 8920})); 8921__exportStar(__webpack_require__(/*! ./new */ "./resources/js/components/new/new.tsx"), exports); 8922 8923/***/ }), 8924
8925/***/ "./resources/js/components/new/new.tsx": 8926/*!*********************************************!*\ 8927 !*** ./resources/js/components/new/new.tsx ***! 8928 \*********************************************/ 8929/***/ (function(__unused_webpack_module, exports, __webpack_require__) { 8930 8931"use strict"; 8932 8933 8934var __createBinding = this && this.__createBinding || (Object.create ? function (o, m, k, k2) { 8935 if (k2 === undefined) k2 = k; 8936 var desc = Object.getOwnPropertyDescriptor(m, k); 8937 if (!desc || ("get" in desc ? !m.__esModule : desc.writable || desc.configurable)) { 8938 desc = { 8939 enumerable: true, 8940 get: function get() { 8941 return m[k]; 8942 } 8943 }; 8944 } 8945 Object.defineProperty(o, k2, desc); 8946} : function (o, m, k, k2) { 8947 if (k2 === undefined) k2 = k; 8948 o[k2] = m[k]; 8949}); 8950var __setModuleDefault = this && this.__setModuleDefault || (Object.create ? function (o, v) { 8951 Object.defineProperty(o, "default", { 8952 enumerable: true, 8953 value: v 8954 }); 8955} : function (o, v) { 8956 o["default"] = v; 8957}); 8958var __importStar = this && this.__importStar || function (mod) { 8959 if (mod && mod.__esModule) return mod; 8960 var result = {}; 8961 if (mod != null) for (var k in mod) if (k !== "default" && Object.prototype.hasOwnProperty.call(mod, k)) __createBinding(result, mod, k); 8962 __setModuleDefault(result, mod); 8963 return result; 8964}; 8965var __spreadArray = this && this.__spreadArray || function (to, from, pack) { 8966 if (pack || arguments.length === 2) for (var i = 0, l = from.length, ar; i < l; i++) { 8967 if (ar || !(i in from)) { 8968 if (!ar) ar = Array.prototype.slice.call(from, 0, i); 8969 ar[i] = from[i]; 8970 } 8971 } 8972 return to.concat(ar || Array.prototype.slice.call(from)); 8973}; 8974var __importDefault = this && this.__importDefault || function (mod) { 8975 return mod && mod.__esModule ? mod : { 8976 "default": mod 8977 }; 8978}; 8979Object.defineProperty(exports, "__esModule", ({ 8980 value: true 8981})); 8982exports.New = void 0; 8983var react_1 = __importStar(__webpack_require__(/*! react */ "./node_modules/react/index.js")); 8984var axios_1 = __importDefault(__webpack_require__(/*! axios */ "./node_modules/axios/index.js")); 8985var New = function New(props) { 8986 var _a = (0, react_1.useState)([]), 8987 products = _a[0], 8988 setProducts = _a[1]; 8989 var _b = (0, react_1.useState)(12), 8990 limit = _b[0], 8991 setLimit = _b[1]; 8992 var _c = (0, react_1.useState)(0), 8993 offset = _c[0], 8994 setOffset = _c[1]; 8995 (0, react_1.useEffect)(function () { 8996 axios_1["default"].get("/data/danh-sach-san-pham-tai-trang-chu?new=1&limit=".concat(limit, "&offset=").concat(offset)).then(function (res) { 8997 setProducts(__spreadArray(__spreadArray([], products, true), res.data, true)); 8998 }); 8999 }, [limit, offset]); 9000 var viewMore = function viewMore() { 9001 setOffset(offset + limit); 9002 }; 9003 return react_1["default"].createElement("div", { 9004 className: "section-content relative" 9005 }, react_1["default"].createElement("div", { 9006 className: "gap-element", 9007 style: { 9008 display: 'block', 9009 height: 'auto', 9010 paddingTop: '30px' 9011 } 9012 }), react_1["default"].createElement("div", { 9013 className: "row row-collapse", 9014 id: "row-1258137080" 9015 }, react_1["default"].createElement("div", { 9016 className: "col medium-12 small-12 large-12" 9017 }, react_1["default"].createElement("div", { 9018 className: "col-inner", 9019 style: { 9020 margin: '0px 0px -10px 0px' 9021 } 9022 }, react_1["default"].createElement("h3", { 9023 className: "orange" 9024 }, "S\u1EA3n ph\u1EA9m m\u1EDBi"))), react_1["default"].createElement("div", { 9025 className: "col small-12 large-12" 9026 }, react_1["default"].createElement("div", { 9027 className: "col-inner" 9028 }, react_1["default"].createElement("div", { 9029 className: "is-divider divider clearfix", 9030 style: { 9031 marginTop: '0.0em', 9032 marginBottom: '0.0em', 9033 maxWidth: '100%', 9034 backgroundColor: 'rgb(255, 83, 29)' 9035 } 9036 })))), react_1["default"].createElement("div", { 9037 className: "row row-collapse", 9038 id: "row-1557720083" 9039 }, react_1["default"].createElement("div", { 9040 className: "col small-12 large-12" 9041 }, react_1["default"].createElement("div", { 9042 className: "col-inner" 9043 }, react_1["default"].createElement("div", { 9044 className: "gap-element", 9045 style: { 9046 display: 'block', 9047 height: 'auto', 9048 paddingTop: '10px' 9049 } 9050 }), react_1["default"].createElement("div", { 9051 className: "row large-columns-6 medium-columns-3 small-columns-2 row-xsmall row-full-width has-shadow row-box-sha
9051dow-1", 9052 style: { 9053 marginLeft: '0px', 9054 marginRight: '0px' 9055 } 9056 }, products.map(function (product, index) { 9057 var productImage = '/libraries/libraryxhome-3888/images/76693220_1666972563440263_7492540632209031168_n.jpg'; 9058 if (product.image_list) { 9059 productImage = product.image_list.split(',')[0]; 9060 } else if (product.image) { 9061 productImage = product.image; 9062 } 9063 return react_1["default"].createElement("div", { 9064 className: "col", 9065 key: index 9066 }, react_1["default"].createElement("div", { 9067 className: "col-inner" 9068 }, product.price > 0 && product.discount > 0 && react_1["default"].createElement("div", { 9069 className: "badge-container absolute left top z-1" 9070 }, react_1["default"].createElement("div", { 9071 className: "callout badge badge-square" 9072 }, react_1["default"].createElement("div", { 9073 className: "badge-inner secondary on-sale" 9074 }, react_1["default"].createElement("span", { 9075 className: "onsale" 9076 }, "-", 100 - Math.ceil(product.discount / product.price * 100), "%")))), react_1["default"].createElement("div", { 9077 className: "product-small box has-hover box-normal box-text-bottom" 9078 }, react_1["default"].createElement("div", { 9079 className: "box-image" 9080 }, react_1["default"].createElement("div", null, react_1["default"].createElement("a", { 9081 href: '/chi-tiet-san-pham/' + product.slug + '?user_email=' + product.user_email 9082 }, react_1["default"].createElement("img", { 9083 width: 300, 9084 height: 300, 9085 src: productImage 9086 }))), react_1["default"].createElement("div", { 9087 className: "image-tools z-top top right show-on-hover" 9088 }), react_1["default"].createElement("div", { 9089 className: "image-tools grid-tools text-center hide-for-small bottom hover-slide-in show-on-hover" 9090 })), react_1["default"].createElement("div", { 9091 className: "box-text" 9092 }, react_1["default"].createElement("div", { 9093 className: "title-wrapper" 9094 }, react_1["default"].createElement("p", { 9095 className: "category uppercase is-smaller no-text-overflow product-cat op-7" 9096 }, product.category_string), react_1["default"].createElement("p", { 9097 className: "name product-title" 9098 }, react_1["default"].createElement("a", { 9099 href: '/chi-tiet-san-pham/' + product.slug + '?user_email=' + product.user_email 9100 }, product.title)), react_1["default"].createElement("p", { 9101 className: "" 9102 }, react_1["default"].createElement("i", { 9103 className: "star fa fa-star", 9104 "aria-hidden": "true" 9105 }), product.star > 1 ? react_1["default"].createElement("i", { 9106 className: "star fa fa-star", 9107 "aria-hidden": "true" 9108 }) : react_1["default"].createElement("i", { 9109 className: "fa fa-star", 9110 "aria-hidden": "true" 9111 }), product.star > 2 ? react_1["default"].createElement("i", { 9112 className: "star fa fa-star", 9113 "aria-hidden": "true" 9114 }) : react_1["default"].createElement("i", { 9115 className: "fa fa-star", 9116 "aria-hidden": "true" 9117 }), product.star > 3 ? react_1["default"].createElement("i", { 9118 className: "star fa fa-star", 9119 "aria-hidden": "true" 9120 }) : react_1["default"].createElement("i", { 9121 className: "fa fa-star", 9122 "aria-hidden": "true" 9123 }), product.star > 4 ? react_1["default"].createElement("i", { 9124 className: "star fa fa-star", 9125 "aria-hidden": "true" 9126 }) : react_1["default"].createElement("i", { 9127 className: "fa fa-star", 9128 "aria-hidden": "true" 9129 })), react_1["default"].createElement("div", { 9130 className: "price-wrapper" 9131 }, product.discount > 0 && product.price_moma < 0 && react_1["default"].createElement("span", { 9132 className: "price" 9133 }, react_1["default"].createElement("del", { 9134 style: { 9135 "float": "left" 9136 } 9137 }, react_1["default"].createElement("span", { 9138 className: "woocommerce-Price-amount amount" 9139 }, new Intl.NumberFormat('vi-VN', { 9140 maximumSignificantDigits: 3 9141 }).format(product.price), "\xA0", react_1["default"].createElement("span", { 9142 className: "woocommerce-Price-currencySymbol" 9143 }, "\u20AB"))), " ", react_1["default"].createElement("ins", { 9144 style: { 9145 "float": "right" 9146 } 9147 }, react_1["default"].createElement("span", { 9148 className: "woocommerce-Price-amount amount", 9149 style: { 9150 color: "#f00", 9151 fontWeight: "bold" 9152 } 9153 }, new Intl.NumberFormat('vi-VN', { 9154 maximumSignificantDigits: 3 9155 }).format(product.discount), "\xA0", react_1["default"].createElement("span", { 9156 className: "woocommerce-Price-currencySymbol" 9157 }, "\u20AB")))), product.price_moma > 0 && react_1["default"].createElement("span", { 9158 className: "price" 9159 }, react_1["default"].createElement("del", { 9160 style: { 9161 "float": "left" 9162 } 9163 }, react_1["default"].createElement("span", { 9164 className: "woocommerce-Price-amount amount" 9165 }, new Intl.NumberFormat('vi-VN', { 9166 maximumSignificantDigits: 3 9167 }).format(product.price), "\xA0", react_1["default"].createElement("span", { 9168 className: "woocommerce-Price-currencySymbol" 9169 }, "\u20AB"))), " ", react_1["default"].createElement("ins", { 9170 style: { 9171 "float": "right" 9172 } 9173 }, react_1["default"].createElement("span", { 9174 className: "woocommerce-Price-amount amount", 9175 style: { 9176 color: "#f00", 9177 fontWeight: "bold" 9178 } 9179 }, new Intl.NumberFormat('vi-VN', { 9180 maximumSignificantDigits: 3 9181 }).format(product.price_moma), "\xA0", react_1["default"].createElement("span", { 9182 className: "woocommerce-Price-currencySymbol" 9183 }, "\u20AB")))), product.discount <= 0 && product.price_moma <= 0 && react_1["default"].createElement("span", { 9184 className: "price" 9185 }, react_1["default"].createElement("ins", { 9186 style: { 9187 "float": "left" 9188 } 9189 }, react_1["default"].createElement("span", { 9190 className: "woocommerce-Price-amount amount" 9191 }, new Intl.NumberFormat('vi-VN', { 9192 maximumSignificantDigits: 3 9193 }).format(product.price), "\xA0", react_1["default"].createElement("span", { 9194 className: "woocommerce-Price-currencySymbol" 9195 }, "\u20AB")))))))))); 9196 }), ",")))), react_1["default"].createElement("div", { 9197 className: "row row-collapse", 9198 id: "row-1309925252" 9199 }, react_1["default"].createElement("div", { 9200 className: "col medium-4 small-12 large-4" 9201 }, react_1["default"].createElement("div", { 9202 className: "col-inner" 9203 })), react_1["default"].createElement("div", { 9204 className: "col medium-4 small-12 large-4" 9205 }, react_1["default"].createElement("div", { 9206 className: "col-inner text-center" 9207 }, react_1["default"].createElement("div", { 9208 className: "gap-element", 9209 style: { 9210 display: 'block', 9211 height: 'auto', 9212 paddingTop: '20px' 9213 } 9214 }), react_1["default"].createElement("button", { 9215 onClick: viewMore, 9216 className: "btn btn-outline btn-primary w-25" 9217 }, react_1["default"].createElement("span", null, "Xem th\xEAm")))
9217), react_1["default"].createElement("div", { 9218 className: "col medium-4 small-12 large-4" 9219 }, react_1["default"].createElement("div", { 9220 className: "col-inner" 9221 }))), react_1["default"].createElement("div", { 9222 className: "gap-element", 9223 style: { 9224 display: 'block', 9225 height: 'auto', 9226 paddingTop: '50px' 9227 } 9228 })); 9229}; 9230exports.New = New; 9231 9232/***/ }), 9233
9234/***/ "./resources/js/components/products/index.ts": 9235/*!***************************************************!*\ 9236 !*** ./resources/js/components/products/index.ts ***! 9237 \***************************************************/ 9238/***/ (function(__unused_webpack_module, exports, __webpack_require__) { 9239 9240"use strict"; 9241 9242 9243var __createBinding = this && this.__createBinding || (Object.create ? function (o, m, k, k2) { 9244 if (k2 === undefined) k2 = k; 9245 var desc = Object.getOwnPropertyDescriptor(m, k); 9246 if (!desc || ("get" in desc ? !m.__esModule : desc.writable || desc.configurable)) { 9247 desc = { 9248 enumerable: true, 9249 get: function get() { 9250 return m[k]; 9251 } 9252 }; 9253 } 9254 Object.defineProperty(o, k2, desc); 9255} : function (o, m, k, k2) { 9256 if (k2 === undefined) k2 = k; 9257 o[k2] = m[k]; 9258}); 9259var __exportStar = this && this.__exportStar || function (m, exports) { 9260 for (var p in m) if (p !== "default" && !Object.prototype.hasOwnProperty.call(exports, p)) __createBinding(exports, m, p); 9261}; 9262Object.defineProperty(exports, "__esModule", ({ 9263 value: true 9264})); 9265__exportStar(__webpack_require__(/*! ./products */ "./resources/js/components/products/products.tsx"), exports); 9266 9267/***/ }), 9268
9269/***/ "./resources/js/components/products/products.tsx": 9270/*!*******************************************************!*\ 9271 !*** ./resources/js/components/products/products.tsx ***! 9272 \*******************************************************/ 9273/***/ (function(__unused_webpack_module, exports, __webpack_require__) { 9274 9275"use strict"; 9276 9277 9278var __createBinding = this && this.__createBinding || (Object.create ? function (o, m, k, k2) { 9279 if (k2 === undefined) k2 = k; 9280 var desc = Object.getOwnPropertyDescriptor(m, k); 9281 if (!desc || ("get" in desc ? !m.__esModule : desc.writable || desc.configurable)) { 9282 desc = { 9283 enumerable: true, 9284 get: function get() { 9285 return m[k]; 9286 } 9287 }; 9288 } 9289 Object.defineProperty(o, k2, desc); 9290} : function (o, m, k, k2) { 9291 if (k2 === undefined) k2 = k; 9292 o[k2] = m[k]; 9293}); 9294var __setModuleDefault = this && this.__setModuleDefault || (Object.create ? function (o, v) { 9295 Object.defineProperty(o, "default", { 9296 enumerable: true, 9297 value: v 9298 }); 9299} : function (o, v) { 9300 o["default"] = v; 9301}); 9302var __importStar = this && this.__importStar || function (mod) { 9303 if (mod && mod.__esModule) return mod; 9304 var result = {}; 9305 if (mod != null) for (var k in mod) if (k !== "default" && Object.prototype.hasOwnProperty.call(mod, k)) __createBinding(result, mod, k); 9306 __setModuleDefault(result, mod); 9307 return result; 9308}; 9309var __spreadArray = this && this.__spreadArray || function (to, from, pack) { 9310 if (pack || arguments.length === 2) for (var i = 0, l = from.length, ar; i < l; i++) { 9311 if (ar || !(i in from)) { 9312 if (!ar) ar = Array.prototype.slice.call(from, 0, i); 9313 ar[i] = from[i]; 9314 } 9315 } 9316 return to.concat(ar || Array.prototype.slice.call(from)); 9317}; 9318var __importDefault = this && this.__importDefault || function (mod) { 9319 return mod && mod.__esModule ? mod : { 9320 "default": mod 9321 }; 9322}; 9323Object.defineProperty(exports, "__esModule", ({ 9324 value: true 9325})); 9326exports.Products = void 0; 9327var react_1 = __importStar(__webpack_require__(/*! react */ "./node_modules/react/index.js")); 9328var axios_1 = __importDefault(__webpack_require__(/*! axios */ "./node_modules/axios/index.js")); 9329var Products = function Products(props) { 9330 var _a = (0, react_1.useState)([]), 9331 products = _a[0], 9332 setProducts = _a[1]; 9333 var _b = (0, react_1.useState)(12), 9334 limit = _b[0], 9335 setLimit = _b[1]; 9336 var _c = (0, react_1.useState)(0), 9337 offset = _c[0], 9338 setOffset = _c[1]; 9339 (0, react_1.useEffect)(function () { 9340 __webpack_require__(/*! ./products.style.scss */ "./resources/js/components/products/products.style.scss"); 9341 }, []); 9342 (0, react_1.useEffect)(function () { 9343 axios_1["default"].get("/data/danh-sach-san-pham-tai-trang-chu?limit=".concat(limit, "&offset=").concat(offset)).then(function (res) { 9344 setProducts(__spreadArray(__spreadArray([], products, true), res.data, true)); 9345 }); 9346 }, [limit, offset]); 9347 var viewMore = function viewMore() { 9348 setOffset(offset + limit); 9349 }; 9350 return react_1["default"].createElement("div", { 9351 className: "section-content relative" 9352 }, react_1["default"].createElement("div", { 9353 className: "gap-element", 9354 style: { 9355 display: 'block', 9356 height: 'auto', 9357 paddingTop: '30px' 9358 } 9359 }), react_1["default"].createElement("div", { 9360 className: "row row-collapse", 9361 id: "row-1258137080" 9362 }, react_1["default"].createElement("div", { 9363 className: "col medium-12 small-12 large-12" 9364 }, react_1["default"].createElement("div", { 9365 className: "col-inner", 9366 style: { 9367 margin: '0px 0px -10px 0px' 9368 } 9369 }, react_1["default"].createElement("h3", { 9370 className: "orange" 9371 }, "G\u1EE2I \xDD H\xD4M NAY"))), react_1["default"].createElement("div", { 9372 className: "col small-12 large-12" 9373 }, react_1["default"].createElement("div", { 9374 className: "col-inner" 9375 }, react_1["default"].createElement("div", { 9376 className: "is-divider divider clearfix", 9377 style: { 9378 marginTop: '0.0em', 9379 marginBottom: '0.0em', 9380 maxWidth: '100%', 9381 backgroundColor: 'rgb(255, 83, 29)' 9382 } 9383 })))), react_1["default"].createElement("div", { 9384 className: "row row-collapse", 9385 id: "row-1557720083" 9386 }, react_1["default"].createElement("div", { 9387 className: "col small-12 large-12" 9388 }, react_1["default"].createElement("div", { 9389 className: "col-inner" 9390 }, react_1["default"].createElement("div", { 9391 className: "gap-element", 9392 style: { 9393 display: 'block', 9394 height: 'auto', 9395 paddingTop: '10px' 9396 } 9397 }), react_1["default"].createElement("div", { 9398 className: "row large-columns-6 medium-columns-3 small-columns-2 row-xsmall row-full-width has-shadow row-box-sha
9398dow-1", 9399 style: { 9400 marginLeft: '0px', 9401 marginRight: '0px' 9402 } 9403 }, products.map(function (product, index) { 9404 var productImage = '/libraries/libraryxhome-3888/images/76693220_1666972563440263_7492540632209031168_n.jpg'; 9405 if (product.image_list) { 9406 productImage = product.image_list.split(',')[0]; 9407 } else if (product.image) { 9408 productImage = product.image; 9409 } 9410 return react_1["default"].createElement("div", { 9411 className: "col", 9412 key: index 9413 }, react_1["default"].createElement("div", { 9414 className: "col-inner" 9415 }, product.price > 0 && product.discount > 0 && react_1["default"].createElement("div", { 9416 className: "badge-container absolute left top z-1" 9417 }, react_1["default"].createElement("div", { 9418 className: "callout badge badge-square" 9419 }, react_1["default"].createElement("div", { 9420 className: "badge-inner secondary on-sale" 9421 }, react_1["default"].createElement("span", { 9422 className: "onsale" 9423 }, "-", 100 - Math.ceil(product.discount / product.price * 100), "%")))), react_1["default"].createElement("div", { 9424 className: "product-small box has-hover box-normal box-text-bottom" 9425 }, react_1["default"].createElement("div", { 9426 className: "box-image" 9427 }, react_1["default"].createElement("div", null, react_1["default"].createElement("a", { 9428 href: '/chi-tiet-san-pham/' + product.slug + '?user_email=' + product.user_email 9429 }, react_1["default"].createElement("img", { 9430 width: 300, 9431 height: 300, 9432 src: productImage 9433 }))), react_1["default"].createElement("div", { 9434 className: "image-tools z-top top right show-on-hover" 9435 }), react_1["default"].createElement("div", { 9436 className: "image-tools grid-tools text-center hide-for-small bottom hover-slide-in show-on-hover" 9437 })), react_1["default"].createElement("div", { 9438 className: "box-text" 9439 }, react_1["default"].createElement("div", { 9440 className: "title-wrapper" 9441 }, react_1["default"].createElement("p", { 9442 className: "category uppercase is-smaller no-text-overflow product-cat op-7" 9443 }, product.category_string), react_1["default"].createElement("p", { 9444 className: "name product-title" 9445 }, react_1["default"].createElement("a", { 9446 href: '/chi-tiet-san-pham/' + product.slug + '?user_email=' + product.user_email 9447 }, product.title)), react_1["default"].createElement("p", { 9448 className: "" 9449 }, react_1["default"].createElement("i", { 9450 className: "star fa fa-star", 9451 "aria-hidden": "true" 9452 }), product.star > 1 ? react_1["default"].createElement("i", { 9453 className: "star fa fa-star", 9454 "aria-hidden": "true" 9455 }) : react_1["default"].createElement("i", { 9456 className: "fa fa-star", 9457 "aria-hidden": "true" 9458 }), product.star > 2 ? react_1["default"].createElement("i", { 9459 className: "star fa fa-star", 9460 "aria-hidden": "true" 9461 }) : react_1["default"].createElement("i", { 9462 className: "fa fa-star", 9463 "aria-hidden": "true" 9464 }), product.star > 3 ? react_1["default"].createElement("i", { 9465 className: "star fa fa-star", 9466 "aria-hidden": "true" 9467 }) : react_1["default"].createElement("i", { 9468 className: "fa fa-star", 9469 "aria-hidden": "true" 9470 }), product.star > 4 ? react_1["default"].createElement("i", { 9471 className: "star fa fa-star", 9472 "aria-hidden": "true" 9473 }) : react_1["default"].createElement("i", { 9474 className: "fa fa-star", 9475 "aria-hidden": "true" 9476 })), react_1["default"].createElement("div", { 9477 className: "price-wrapper" 9478 }, product.discount > 0 && product.price_moma < 0 && react_1["default"].createElement("span", { 9479 className: "price" 9480 }, react_1["default"].createElement("del", { 9481 style: { 9482 "float": "left" 9483 } 9484 }, react_1["default"].createElement("span", { 9485 className: "woocommerce-Price-amount amount" 9486 }, new Intl.NumberFormat('vi-VN', { 9487 maximumSignificantDigits: 3 9488 }).format(product.price), "\xA0", react_1["default"].createElement("span", { 9489 className: "woocommerce-Price-currencySymbol" 9490 }, "\u20AB"))), " ", react_1["default"].createElement("ins", { 9491 style: { 9492 "float": "right" 9493 } 9494 }, react_1["default"].createElement("span", { 9495 className: "woocommerce-Price-amount amount", 9496 style: { 9497 color: "#f00", 9498 fontWeight: "bold" 9499 } 9500 }, new Intl.NumberFormat('vi-VN', { 9501 maximumSignificantDigits: 3 9502 }).format(product.discount), "\xA0", react_1["default"].createElement("span", { 9503 className: "woocommerce-Price-currencySymbol" 9504 }, "\u20AB")))), product.price_moma > 0 && react_1["default"].createElement("span", { 9505 className: "price" 9506 }, react_1["default"].createElement("del", { 9507 style: { 9508 "float": "left" 9509 } 9510 }, react_1["default"].createElement("span", { 9511 className: "woocommerce-Price-amount amount" 9512 }, new Intl.NumberFormat('vi-VN', { 9513 maximumSignificantDigits: 3 9514 }).format(product.price), "\xA0", react_1["default"].createElement("span", { 9515 className: "woocommerce-Price-currencySymbol" 9516 }, "\u20AB"))), " ", react_1["default"].createElement("ins", { 9517 style: { 9518 "float": "right" 9519 } 9520 }, react_1["default"].createElement("span", { 9521 className: "woocommerce-Price-amount amount", 9522 style: { 9523 color: "#f00", 9524 fontWeight: "bold" 9525 } 9526 }, new Intl.NumberFormat('vi-VN', { 9527 maximumSignificantDigits: 3 9528 }).format(product.price_moma), "\xA0", react_1["default"].createElement("span", { 9529 className: "woocommerce-Price-currencySymbol" 9530 }, "\u20AB")))), product.discount <= 0 && product.price_moma <= 0 && react_1["default"].createElement("span", { 9531 className: "price" 9532 }, react_1["default"].createElement("ins", { 9533 style: { 9534 "float": "left" 9535 } 9536 }, react_1["default"].createElement("span", { 9537 className: "woocommerce-Price-amount amount" 9538 }, new Intl.NumberFormat('vi-VN', { 9539 maximumSignificantDigits: 3 9540 }).format(product.price), "\xA0", react_1["default"].createElement("span", { 9541 className: "woocommerce-Price-currencySymbol" 9542 }, "\u20AB")))))))))); 9543 }), ",")))), react_1["default"].createElement("div", { 9544 className: "row row-collapse", 9545 id: "row-1309925252" 9546 }, react_1["default"].createElement("div", { 9547 className: "col medium-4 small-12 large-4" 9548 }, react_1["default"].createElement("div", { 9549 className: "col-inner" 9550 })), react_1["default"].createElement("div", { 9551 className: "col medium-4 small-12 large-4" 9552 }, react_1["default"].createElement("div", { 9553 className: "col-inner text-center" 9554 }, react_1["default"].createElement("div", { 9555 className: "gap-element", 9556 style: { 9557 display: 'block', 9558 height: 'auto', 9559 paddingTop: '20px' 9560 } 9561 }), react_1["default"].createElement("button", { 9562 onClick: viewMore, 9563 className: "btn btn-outline btn-primary w-25" 9564 }, react_1["default"].createElement("span", null, "Xem th\xEAm")))
9564), react_1["default"].createElement("div", { 9565 className: "col medium-4 small-12 large-4" 9566 }, react_1["default"].createElement("div", { 9567 className: "col-inner" 9568 }))), react_1["default"].createElement("div", { 9569 className: "gap-element", 9570 style: { 9571 display: 'block', 9572 height: 'auto', 9573 paddingTop: '50px' 9574 } 9575 })); 9576}; 9577exports.Products = Products; 9578 9579/***/ }), 9580
9581/***/ "./resources/js/components/quick-action-shop/index.ts": 9582/*!************************************************************!*\ 9583 !*** ./resources/js/components/quick-action-shop/index.ts ***! 9584 \************************************************************/ 9585/***/ (function(__unused_webpack_module, exports, __webpack_require__) { 9586 9587"use strict"; 9588 9589 9590var __createBinding = this && this.__createBinding || (Object.create ? function (o, m, k, k2) { 9591 if (k2 === undefined) k2 = k; 9592 var desc = Object.getOwnPropertyDescriptor(m, k); 9593 if (!desc || ("get" in desc ? !m.__esModule : desc.writable || desc.configurable)) { 9594 desc = { 9595 enumerable: true, 9596 get: function get() { 9597 return m[k]; 9598 } 9599 }; 9600 } 9601 Object.defineProperty(o, k2, desc); 9602} : function (o, m, k, k2) { 9603 if (k2 === undefined) k2 = k; 9604 o[k2] = m[k]; 9605}); 9606var __exportStar = this && this.__exportStar || function (m, exports) { 9607 for (var p in m) if (p !== "default" && !Object.prototype.hasOwnProperty.call(exports, p)) __createBinding(exports, m, p); 9608}; 9609Object.defineProperty(exports, "__esModule", ({ 9610 value: true 9611})); 9612__exportStar(__webpack_require__(/*! ./quick-action */ "./resources/js/components/quick-action-shop/quick-action.tsx"), exports); 9613 9614/***/ }), 9615
9616/***/ "./resources/js/components/quick-action-shop/quick-action.tsx": 9617/*!********************************************************************!*\ 9618 !*** ./resources/js/components/quick-action-shop/quick-action.tsx ***! 9619 \********************************************************************/ 9620/***/ (function(__unused_webpack_module, exports, __webpack_require__) { 9621 9622"use strict"; 9623 9624 9625var __importDefault = this && this.__importDefault || function (mod) { 9626 return mod && mod.__esModule ? mod : { 9627 "default": mod 9628 }; 9629}; 9630Object.defineProperty(exports, "__esModule", ({ 9631 value: true 9632})); 9633exports.QuickAction = void 0; 9634var react_1 = __importDefault(__webpack_require__(/*! react */ "./node_modules/react/index.js")); 9635var axios_1 = __importDefault(__webpack_require__(/*! axios */ "./node_modules/axios/index.js")); 9636// import stylesheet 9637__webpack_require__(/*! ./quick-action.scss */ "./resources/js/components/quick-action-shop/quick-action.scss"); 9638var QuickAction = function QuickAction(props) { 9639 var addToCart = function addToCart(event) { 9640 event.preventDefault(); 9641 axios_1["default"].get("/them-vao-gio-hang/".concat(props.slug, "?product_id=").concat(props.product_id, "&price=").concat(props.product_price, "&amount=").concat(props.amount, "&source=moma")).then(function (resp) { 9642 var _a; 9643 var msg = null; 9644 if (!isNaN(resp.data.qty)) { 9645 var cartBadge = (_a = document.getElementById('cart-btn')) === null || _a === void 0 ? void 0 : _a.firstElementChild; 9646 if (cartBadge) cartBadge.innerHTML = resp.data.qty; 9647 } 9648 msg = resp.data.msg; 9649 if (msg) { 9650 alert(msg); 9651 } 9652 location.reload(); 9653 }); 9654 }; 9655 var addToCartNow = function addToCartNow(event) { 9656 event.preventDefault(); 9657 axios_1["default"].get("/them-vao-gio-hang/".concat(props.slug, "?product_id=").concat(props.product_id, "&price=").concat(props.product_price, "&amount=").concat(props.amount, "&source=moma")).then(function (resp) { 9658 var _a; 9659 var msg = null; 9660 console.log(resp.data, 'resp.data'); 9661 if (!isNaN(resp.data.qty)) { 9662 var cartBadge = (_a = document.getElementById('cart-btn')) === null || _a === void 0 ? void 0 : _a.firstElementChild; 9663 if (cartBadge) cartBadge.innerHTML = resp.data.qty; 9664 } 9665 msg = resp.data.msg; 9666 if (msg) { 9667 alert(msg); 9668 } 9669 console.log(msg, 'msg'); 9670 location.href = '/kiem-tra-gio-hang'; 9671 }); 9672 }; 9673 return react_1["default"].createElement("section", { 9674 id: "shop_quick_action", 9675 className: 'showMb' 9676 }, react_1["default"].createElement("div", { 9677 className: "quick-action-content" 9678 }, react_1["default"].createElement("div", { 9679 className: "add-to-cart", 9680 onClick: addToCart 9681 }, react_1["default"].createElement("i", { 9682 className: "fa fa-shopping-cart" 9683 })), react_1["default"].createElement("div", { 9684 className: "buy-now", 9685 onClick: addToCartNow 9686 }, react_1["default"].createElement("span", null, "Mua ngay")))); 9687}; 9688exports.QuickAction = QuickAction; 9689 9690/***/ }), 9691
9692/***/ "./resources/js/components/top-sale/index.ts": 9693/*!***************************************************!*\ 9694 !*** ./resources/js/components/top-sale/index.ts ***! 9695 \***************************************************/ 9696/***/ (function(__unused_webpack_module, exports, __webpack_require__) { 9697 9698"use strict"; 9699 9700 9701var __createBinding = this && this.__createBinding || (Object.create ? function (o, m, k, k2) { 9702 if (k2 === undefined) k2 = k; 9703 var desc = Object.getOwnPropertyDescriptor(m, k); 9704 if (!desc || ("get" in desc ? !m.__esModule : desc.writable || desc.configurable)) { 9705 desc = { 9706 enumerable: true, 9707 get: function get() { 9708 return m[k]; 9709 } 9710 }; 9711 } 9712 Object.defineProperty(o, k2, desc); 9713} : function (o, m, k, k2) { 9714 if (k2 === undefined) k2 = k; 9715 o[k2] = m[k]; 9716}); 9717var __exportStar = this && this.__exportStar || function (m, exports) { 9718 for (var p in m) if (p !== "default" && !Object.prototype.hasOwnProperty.call(exports, p)) __createBinding(exports, m, p); 9719}; 9720Object.defineProperty(exports, "__esModule", ({ 9721 value: true 9722})); 9723__exportStar(__webpack_require__(/*! ./top-sale */ "./resources/js/components/top-sale/top-sale.tsx"), exports); 9724 9725/***/ }), 9726
9727/***/ "./resources/js/components/top-sale/top-sale.tsx": 9728/*!*******************************************************!*\ 9729 !*** ./resources/js/components/top-sale/top-sale.tsx ***! 9730 \*******************************************************/ 9731/***/ (function(__unused_webpack_module, exports, __webpack_require__) { 9732 9733"use strict"; 9734 9735 9736var __createBinding = this && this.__createBinding || (Object.create ? function (o, m, k, k2) { 9737 if (k2 === undefined) k2 = k; 9738 var desc = Object.getOwnPropertyDescriptor(m, k); 9739 if (!desc || ("get" in desc ? !m.__esModule : desc.writable || desc.configurable)) { 9740 desc = { 9741 enumerable: true, 9742 get: function get() { 9743 return m[k]; 9744 } 9745 }; 9746 } 9747 Object.defineProperty(o, k2, desc); 9748} : function (o, m, k, k2) { 9749 if (k2 === undefined) k2 = k; 9750 o[k2] = m[k]; 9751}); 9752var __setModuleDefault = this && this.__setModuleDefault || (Object.create ? function (o, v) { 9753 Object.defineProperty(o, "default", { 9754 enumerable: true, 9755 value: v 9756 }); 9757} : function (o, v) { 9758 o["default"] = v; 9759}); 9760var __importStar = this && this.__importStar || function (mod) { 9761 if (mod && mod.__esModule) return mod; 9762 var result = {}; 9763 if (mod != null) for (var k in mod) if (k !== "default" && Object.prototype.hasOwnProperty.call(mod, k)) __createBinding(result, mod, k); 9764 __setModuleDefault(result, mod); 9765 return result; 9766}; 9767Object.defineProperty(exports, "__esModule", ({ 9768 value: true 9769})); 9770exports.TopSale = void 0; 9771var react_1 = __importStar(__webpack_require__(/*! react */ "./node_modules/react/index.js")); 9772var ramda_1 = __webpack_require__(/*! ramda */ "./node_modules/ramda/src/index.js"); 9773var TopSale = function TopSale(props) { 9774 (0, react_1.useEffect)(function () { 9775 __webpack_require__(/*! ./top-sale.style.scss */ "./resources/js/components/top-sale/top-sale.style.scss"); 9776 }, []); 9777 return react_1["default"].createElement("section", { 9778 className: "section san_pham_pho_bien", 9779 id: "section_1404511622" 9780 }, react_1["default"].createElement("div", { 9781 className: "bg section-bg fill bg-fill bg-loaded" 9782 }), react_1["default"].createElement("div", { 9783 className: "section-content relative" 9784 }, react_1["default"].createElement("div", { 9785 className: "gap-element", 9786 style: { 9787 display: 'block', 9788 height: 'auto', 9789 paddingTop: '30px' 9790 } 9791 }), react_1["default"].createElement("div", { 9792 className: "row row-collapse", 9793 id: "row-312335120" 9794 }, react_1["default"].createElement("div", { 9795 className: "col medium-2 small-12 large-2" 9796 }, react_1["default"].createElement("div", { 9797 className: "col-inner" 9798 }, react_1["default"].createElement("h3", null, "S\u1EA2N PH\u1EA8M PH\u1ED4 BI\u1EBEN"))), react_1["default"].createElement("div", { 9799 className: "col medium-6 small-12 large-6" 9800 }, react_1["default"].createElement("div", { 9801 className: "col-inner" 9802 }, react_1["default"].createElement("p", null, "\u0110\xE3 c\u1EADp nh\u1EADt 11AM"))), react_1["default"].createElement("div", { 9803 className: "col medium-4 small-12 large-4" 9804 }, react_1["default"].createElement("div", { 9805 className: "col-inner text-right" 9806 }, react_1["default"].createElement("p", { 9807 className: "orange" 9808 }, react_1["default"].createElement("a", { 9809 href: "/san-pham/demo" 9810 }, "Xem T\u1EA5t C\u1EA3 >"))))), react_1["default"].createElement("div", { 9811 className: "row row-collapse", 9812 id: "row-699400869" 9813 }, react_1["default"].createElement("div", { 9814 className: "col small-12 large-12" 9815 }, react_1["default"].createElement("div", { 9816 className: "col-inner" 9817 }, react_1["default"].createElement("div", { 9818 className: "row large-columns-6 medium-columns-3 small-columns-2 row-xsmall row-full-width has-shadow row-box-shadow-1 slider row-slider slider-nav-reveal slider-nav-push flickity-enabled is-draggable", 9819 "data-flickity-options": "{\"imagesLoaded\": true, \"groupCells\": \"100%\", \"dragThreshold\" : 5, \"cellAlign\": \"left\",\"wrapAround\": true,\"prevNextButtons\": true,\"percentPosition\": true,\"pageDots\": false, \"rightToLeft\": false, \"autoPlay\" : false}", 9820 tabIndex: 0 9821 }, react_1["default"].createElement("div", { 9822 className: "flickity-viewport", 9823 style: { 9824 height: '349px' 9825 } 9826 }, react_1["default"].createElement("div", { 9827 className: "flickity-slider" 9828 }, (0, ramda_1.times)(function () { 9829 return react_1["default"].createElement("div", { 9830 className: "col is-selected" 9831 }, react_1["default"].createElement("div", { 9832 className: "col-inner" 9833 }, react_1["default"].createElement("div", { 9834 className: "badge-container absolute left top z-1" 9835 }, react_1["default"].createElement("div", { 9836 className: "callout badge badge-square" 9837 }, react_1["default"].createElement("div", { 9838 className: "badge-inner secondary on-sale" 9839 }, react_1["default"].createElement("span", { 9840 className: "onsale" 9841 }, "-50%")))), react_1["default"].createElement("div", { 9842 className: "product-small box has-hover box-normal box-text-bottom" 9843 }, react_1["default"].createElement("div", { 9844 className: "box-image" 9845 }, react_1["default"].createElement("div", null, react_1["default"].createElement("a", { 9846 href: "/san-pham/demo" 9847 }, react_1["default"].createElement("img", { 9848 width: 300, 9849 height: 300, 9850 src: "https://moma.com.vn/libraries/libraryxhome-3888/images/76693220_1666972563440263_7492540632209031168_n.jpg",
9851 sizes: "(max-width: 960px) 100vw, 960px" 9852 }), "\t\t\t\t\t\t\t\t\t")), react_1["default"].createElement("div", { 9853 className: "image-tools z-top top right show-on-hover" 9854 }), react_1["default"].createElement("div", { 9855 className: "image-tools grid-tools text-center hide-for-small bottom hover-slide-in show-on-hover" 9856 })), react_1["default"].createElement("div", { 9857 className: "box-text text-center" 9858 }, react_1["default"].createElement("div", { 9859 className: "title-wrapper" 9860 }, react_1["default"].createElement("p", { 9861 className: "category uppercase is-smaller no-text-overflow product-cat op-7" 9862 }, "\xC1o"), react_1["default"].createElement("p", { 9863 className: "name product-title" 9864 }, react_1["default"].createElement("a", { 9865 href: "/san-pham/demo" 9866 }, "\xC1o s\u01A1 mi caro k\xE8m belt")), react_1["default"].createElement("span", { 9867 className: "price" 9868 }, react_1["default"].createElement("del", null, react_1["default"].createElement("span", { 9869 className: "woocommerce-Price-amount amount" 9870 }, "290,000\xA0", react_1["default"].createElement("span", { 9871 className: "woocommerce-Price-currencySymbol" 9872 }, "\u20AB"))), react_1["default"].createElement("ins", null, react_1["default"].createElement("span", { 9873 className: "woocommerce-Price-amount amount" 9874 }, "145,000\xA0", react_1["default"].createElement("span", { 9875 className: "woocommerce-Price-currencySymbol" 9876 }, "\u20AB"))))))))); 9877 }, 18)))), react_1["default"].createElement("button", { 9878 className: "flickity-prev-next-button previous", 9879 type: "button", 9880 "aria-label": "previous" 9881 }, react_1["default"].createElement("svg", { 9882 viewBox: "0 0 100 100" 9883 }, react_1["default"].createElement("path", { 9884 d: "M 10,50 L 60,100 L 70,90 L 30,50 L 70,10 L 60,0 Z", 9885 className: "arrow" 9886 }))), react_1["default"].createElement("button", { 9887 className: "flickity-prev-next-button next", 9888 type: "button", 9889 "aria-label": "next" 9890 }, react_1["default"].createElement("svg", { 9891 viewBox: "0 0 100 100" 9892 }, react_1["default"].createElement("path", { 9893 d: "M 10,50 L 60,100 L 70,90 L 30,50 L 70,10 L 60,0 Z", 9894 className: "arrow", 9895 transform: "translate(100, 100) rotate(180) " 9896 })))))))); 9897}; 9898exports.TopSale = TopSale; 9899 9900/***/ }), 9901
9902/***/ "./resources/js/index.tsx": 9903/*!********************************!*\ 9904 !*** ./resources/js/index.tsx ***! 9905 \********************************/ 9906/***/ (function(__unused_webpack_module, exports, __webpack_require__) { 9907 9908"use strict"; 9909 9910 9911var __importDefault = this && this.__importDefault || function (mod) { 9912 return mod && mod.__esModule ? mod : { 9913 "default": mod 9914 }; 9915}; 9916Object.defineProperty(exports, "__esModule", ({ 9917 value: true 9918})); 9919var react_1 = __importDefault(__webpack_require__(/*! react */ "./node_modules/react/index.js")); 9920var react_dom_1 = __webpack_require__(/*! react-dom */ "./node_modules/react-dom/index.js"); 9921var react_router_dom_1 = __webpack_require__(/*! react-router-dom */ "./node_modules/react-router-dom/dist/index.js"); 9922// import ReactShadowRoot from "react-shadow-root"; 9923var app_1 = __webpack_require__(/*! ./app */ "./resources/js/app/index.ts"); 9924__webpack_require__(/*! ../sass/index.scss */ "./resources/sass/index.scss"); 9925(0, react_dom_1.render)( 9926// <ReactShadowRoot> 9927// <BrowserRouter> 9928// <App /> 9929// </BrowserRouter> 9930// </ReactShadowRoot>, 9931react_1["default"].createElement(react_router_dom_1.BrowserRouter, null, react_1["default"].createElement(app_1.App, null)), document.getElementById("root-app")); 9932 9933/***/ }), 9934
9935/***/ "./resources/js/scence/category-product.tsx": 9936/*!**************************************************!*\ 9937 !*** ./resources/js/scence/category-product.tsx ***! 9938 \**************************************************/ 9939/***/ (function(__unused_webpack_module, exports, __webpack_require__) { 9940 9941"use strict"; 9942 9943 9944var __createBinding = this && this.__createBinding || (Object.create ? function (o, m, k, k2) { 9945 if (k2 === undefined) k2 = k; 9946 var desc = Object.getOwnPropertyDescriptor(m, k); 9947 if (!desc || ("get" in desc ? !m.__esModule : desc.writable || desc.configurable)) { 9948 desc = { 9949 enumerable: true, 9950 get: function get() { 9951 return m[k]; 9952 } 9953 }; 9954 } 9955 Object.defineProperty(o, k2, desc); 9956} : function (o, m, k, k2) { 9957 if (k2 === undefined) k2 = k; 9958 o[k2] = m[k]; 9959}); 9960var __setModuleDefault = this && this.__setModuleDefault || (Object.create ? function (o, v) { 9961 Object.defineProperty(o, "default", { 9962 enumerable: true, 9963 value: v 9964 }); 9965} : function (o, v) { 9966 o["default"] = v; 9967}); 9968var __importStar = this && this.__importStar || function (mod) { 9969 if (mod && mod.__esModule) return mod; 9970 var result = {}; 9971 if (mod != null) for (var k in mod) if (k !== "default" && Object.prototype.hasOwnProperty.call(mod, k)) __createBinding(result, mod, k); 9972 __setModuleDefault(result, mod); 9973 return result; 9974}; 9975var __spreadArray = this && this.__spreadArray || function (to, from, pack) { 9976 if (pack || arguments.length === 2) for (var i = 0, l = from.length, ar; i < l; i++) { 9977 if (ar || !(i in from)) { 9978 if (!ar) ar = Array.prototype.slice.call(from, 0, i); 9979 ar[i] = from[i]; 9980 } 9981 } 9982 return to.concat(ar || Array.prototype.slice.call(from)); 9983}; 9984var __importDefault = this && this.__importDefault || function (mod) { 9985 return mod && mod.__esModule ? mod : { 9986 "default": mod 9987 }; 9988}; 9989Object.defineProperty(exports, "__esModule", ({ 9990 value: true 9991})); 9992exports.CategoryProduct = void 0; 9993var react_1 = __importStar(__webpack_require__(/*! react */ "./node_modules/react/index.js")); 9994var axios_1 = __importDefault(__webpack_require__(/*! axios */ "./node_modules/axios/index.js")); 9995var react_router_dom_1 = __webpack_require__(/*! react-router-dom */ "./node_modules/react-router-dom/dist/index.js"); 9996var CategoryProduct = function CategoryProduct() { 9997 var params = (0, react_router_dom_1.useParams)(); 9998 var _a = (0, react_1.useState)({}), 9999 category = _a[0], 10000 setCategory = _a[1]; 10001 var _b = (0, react_1.useState)([]), 10002 products = _b[0], 10003 setProducts = _b[1]; 10004 var _c = (0, react_1.useState)(16), 10005 limit = _c[0], 10006 setLimit = _c[1]; 10007 var _d = (0, react_1.useState)(0), 10008 offset = _d[0], 10009 setOffset = _d[1]; 10010 (0, react_1.useEffect)(function () { 10011 axios_1["default"].get("/data/chi-tiet-loai-san-pham/".concat(params.slug)).then(function (res) { 10012 setCategory(res.data); 10013 }); 10014 axios_1["default"].get("/data/danh-sach-san-pham-theo-loai-san-pham/".concat(params.slug, "?limit=").concat(limit, "&offset=").concat(offset)).then(function (res) { 10015 setProducts(__spreadArray(__spreadArray([], products, true), res.data, true)); 10016 }); 10017 }, [limit, offset]); 10018 var viewMore = function viewMore() { 10019 setOffset(offset + limit); 10020 }; 10021 return react_1["default"].createElement("div", { 10022 className: "shop-container container" 10023 }, react_1["default"].createElement("main", { 10024 id: "main" 10025 }, react_1["default"].createElement("h1", null, category.title), react_1["default"].createElement("div", { 10026 className: "row category-page-row" 10027 }, react_1["default"].createElement("div", { 10028 className: "col large-12" 10029 }, react_1["default"].createElement("div", { 10030 className: "products row row-small large-columns-4 medium-columns-3 small-columns-2 has-shadow row-box-shadow-1" 10031 }, products.map(function (product, index) { 10032 var productImage = '/libraries/libraryxhome-3888/images/76693220_1666972563440263_7492540632209031168_n.jpg'; 10033 if (product.image_list) { 10034 productImage = product.image_list.split(',')[0]; 10035 } else if (product.image) { 10036 productImage = product.image; 10037 } 10038 return react_1["default"].createElement("div", { 10039 key: index, 10040 className: "product-small col has-hover post-135 product type-product status-publish has-post-thumbnail product_cat-ao-thun product_cat-thoi-trang-nam first instock shipping-taxable purchasable product-type-simple" 10041 }, react_1["default"].createElement("div", { 10042 className: "col-inner" 10043 }, react_1["default"].createElement("div", { 10044 className: "badge-container absolute left top z-1" 10045 }), react_1["default"].createElement("div", { 10046 className: "product-small box " 10047 }, react_1["default"].createElement("div", { 10048 className: "box-image" 10049 }, react_1["default"].createElement("div", { 10050 className: "image-fade_in_back" 10051 }, react_1["default"].createElement("a", { 10052 href: '/chi-tiet-san-pham/' + product.slug 10053 }, react_1["default"].createElement("img", { 10054 width: 300, 10055 height: 300, 10056 src: productImage 10057 }
10057))), react_1["default"].createElement("div", { 10058 className: "image-tools is-small top right show-on-hover" 10059 }), react_1["default"].createElement("div", { 10060 className: "image-tools is-small hide-for-small bottom left show-on-hover" 10061 }), react_1["default"].createElement("div", { 10062 className: "image-tools grid-tools text-center hide-for-small bottom hover-slide-in show-on-hover" 10063 })), react_1["default"].createElement("div", { 10064 className: "box-text box-text-products text-center grid-style-2" 10065 }, react_1["default"].createElement("p", null, product.category_string), react_1["default"].createElement("div", { 10066 className: "title-wrapper" 10067 }, react_1["default"].createElement("p", { 10068 className: "name product-title" 10069 }, react_1["default"].createElement("a", { 10070 href: '/chi-tiet-san-pham/' + product.slug 10071 }, product.title))), react_1["default"].createElement("div", { 10072 className: "price-wrapper" 10073 }, product.discount > 0 && react_1["default"].createElement("span", { 10074 className: "price" 10075 }, react_1["default"].createElement("del", null, react_1["default"].createElement("span", { 10076 className: "woocommerce-Price-amount amount" 10077 }, product.price, "\xA0", react_1["default"].createElement("span", { 10078 className: "woocommerce-Price-currencySymbol" 10079 }, "\u20AB"))), " ", react_1["default"].createElement("ins", null, react_1["default"].createElement("span", { 10080 className: "woocommerce-Price-amount amount" 10081 }, product.discount, "\xA0", react_1["default"].createElement("span", { 10082 className: "woocommerce-Price-currencySymbol" 10083 }, "\u20AB")))), product.discount <= 0 && react_1["default"].createElement("span", { 10084 className: "price" 10085 }, react_1["default"].createElement("ins", null, react_1["default"].createElement("span", { 10086 className: "woocommerce-Price-amount amount" 10087 }, product.price, "\xA0", react_1["default"].createElement("span", { 10088 className: "woocommerce-Price-currencySymbol" 10089 }, "\u20AB"))))))))); 10090 })))), react_1["default"].createElement("div", { 10091 className: 'd-flex justify-content-end' 10092 }, react_1["default"].createElement("button", { 10093 onClick: viewMore 10094 }, "Xem th\xEAm")))); 10095}; 10096exports.CategoryProduct = CategoryProduct; 10097 10098/***/ }), 10099
10100/***/ "./resources/js/scence/home.tsx": 10101/*!**************************************!*\ 10102 !*** ./resources/js/scence/home.tsx ***! 10103 \**************************************/ 10104/***/ (function(__unused_webpack_module, exports, __webpack_require__) { 10105 10106"use strict"; 10107 10108 10109var __importDefault = this && this.__importDefault || function (mod) { 10110 return mod && mod.__esModule ? mod : { 10111 "default": mod 10112 }; 10113}; 10114Object.defineProperty(exports, "__esModule", ({ 10115 value: true 10116})); 10117exports.Home = void 0; 10118var react_1 = __importDefault(__webpack_require__(/*! react */ "./node_modules/react/index.js")); 10119var components_1 = __webpack_require__(/*! ../components */ "./resources/js/components/index.ts"); 10120var Home = function Home() { 10121 return react_1["default"].createElement("div", { 10122 className: "shop-container" 10123 }, react_1["default"].createElement(components_1.CategoryList, null), react_1["default"].createElement(components_1.Products, null), react_1["default"].createElement(components_1.Free, null), react_1["default"].createElement(components_1.New, null), react_1["default"].createElement(components_1.Buy, null), react_1["default"].createElement(components_1.Every, null)); 10124}; 10125exports.Home = Home; 10126 10127/***/ }), 10128
10129/***/ "./resources/js/scence/product-detail.tsx": 10130/*!************************************************!*\ 10131 !*** ./resources/js/scence/product-detail.tsx ***! 10132 \************************************************/ 10133/***/ (function(__unused_webpack_module, exports, __webpack_require__) { 10134 10135"use strict"; 10136 10137 10138var __createBinding = this && this.__createBinding || (Object.create ? function (o, m, k, k2) { 10139 if (k2 === undefined) k2 = k; 10140 var desc = Object.getOwnPropertyDescriptor(m, k); 10141 if (!desc || ("get" in desc ? !m.__esModule : desc.writable || desc.configurable)) { 10142 desc = { 10143 enumerable: true, 10144 get: function get() { 10145 return m[k]; 10146 } 10147 }; 10148 } 10149 Object.defineProperty(o, k2, desc); 10150} : function (o, m, k, k2) { 10151 if (k2 === undefined) k2 = k; 10152 o[k2] = m[k]; 10153}); 10154var __setModuleDefault = this && this.__setModuleDefault || (Object.create ? function (o, v) { 10155 Object.defineProperty(o, "default", { 10156 enumerable: true, 10157 value: v 10158 }); 10159} : function (o, v) { 10160 o["default"] = v; 10161}); 10162var __importStar = this && this.__importStar || function (mod) { 10163 if (mod && mod.__esModule) return mod; 10164 var result = {}; 10165 if (mod != null) for (var k in mod) if (k !== "default" && Object.prototype.hasOwnProperty.call(mod, k)) __createBinding(result, mod, k); 10166 __setModuleDefault(result, mod); 10167 return result; 10168}; 10169var __importDefault = this && this.__importDefault || function (mod) { 10170 return mod && mod.__esModule ? mod : { 10171 "default": mod 10172 }; 10173}; 10174Object.defineProperty(exports, "__esModule", ({ 10175 value: true 10176})); 10177exports.ProductDetail = void 0; 10178var react_1 = __importStar(__webpack_require__(/*! react */ "./node_modules/react/index.js")); 10179var axios_1 = __importDefault(__webpack_require__(/*! axios */ "./node_modules/axios/index.js")); 10180var react_router_dom_1 = __webpack_require__(/*! react-router-dom */ "./node_modules/react-router-dom/dist/index.js"); 10181var react_share_1 = __webpack_require__(/*! react-share */ "./node_modules/react-share/es/index.js"); 10182var react_helmet_1 = __webpack_require__(/*! react-helmet */ "./node_modules/react-helmet/es/Helmet.js"); 10183var react_copy_to_clipboard_1 = __webpack_require__(/*! react-copy-to-clipboard */ "./node_modules/react-copy-to-clipboard/lib/index.js"); 10184var quick_action_shop_1 = __webpack_require__(/*! ../components/quick-action-shop */ "./resources/js/components/quick-action-shop/index.ts"); 10185var ProductDetail = function ProductDetail() { 10186 var params = (0, react_router_dom_1.useParams)(); 10187 var _a = (0, react_1.useState)({}), 10188 product = _a[0], 10189 setProduct = _a[1]; 10190 var _b = (0, react_1.useState)([]), 10191 categories = _b[0], 10192 setCategories = _b[1]; 10193 var _c = (0, react_1.useState)([]), 10194 images = _c[0], 10195 setImages = _c[1]; 10196 var _d = (0, react_1.useState)(0), 10197 selectedImage = _d[0], 10198 setSelectedImage = _d[1]; 10199 var _e = (0, react_1.useState)([]), 10200 similarProducts = _e[0], 10201 setSimilarProducts = _e[1]; 10202 var _f = (0, react_1.useState)(null), 10203 affiliateContact = _f[0], 10204 setAffiliateContact = _f[1]; 10205 var _g = (0, react_1.useState)('Copy'), 10206 textCP = _g[0], 10207 setTextCP = _g[1]; 10208 (0, react_1.useEffect)(function () { 10209 axios_1["default"].get("/data/chi-tiet-san-pham/".concat(params.slug)).then(function (res) { 10210 console.log(res.data.product); 10211 setProduct(res.data.product); 10212 setCategories(res.data.categories); 10213 setSimilarProducts(res.data.similarProducts); 10214 setAffiliateContact(res.data.affiliateContact); 10215 if (res.data.product.image_list) { 10216 setImages(res.data.product.image_list.split(',')); 10217 } else if (res.data.product.image) { 10218 setImages([res.data.product.image]); 10219 } else { 10220 setImages(['/libraries/libraryxhome-3888/images/76693220_1666972563440263_7492540632209031168_n.jpg']); 10221 } 10222 }); 10223 }, []); 10224 var _h = (0, react_1.useState)(1), 10225 amount = _h[0], 10226 setAmount = _h[1]; 10227 var addMore = function addMore(num) { 10228 return function () { 10229 if (amount + num < 1) return; 10230 setAmount(amount + num); 10231 }; 10232 }; 10233 var addToCart = function addToCart(event) { 10234 event.preventDefault(); 10235 axios_1["default"].get("/them-vao-gio-hang/".concat(params.slug, "?product_id=").concat(product.product_id, "&price=").concat(product.price, "&amount=").concat(amount, "&source=moma")).then(function (resp) { 10236 var _a; 10237 var msg = null; 10238 if (!isNaN(resp.data.qty)) { 10239 var cartBadge = (_a = document.getElementById('cart-btn')) === null || _a === void 0 ? void 0 : _a.firstElementChild; 10240 if (cartBadge) cartBadge.innerHTML = resp.data.qty; 10241 } 10242 msg = resp.data.msg; 10243 if (msg) { 10244 alert(msg); 10245 } 10246 location.reload(); 10247 }); 10248 }; 10249 var addToCartNow = function addToCartNow(event) { 10250 event.preventDefault(); 10251 axios_1["default"].get("/them-vao-gio-hang/".concat(params.slug, "?product_id=").concat(product.product_id, "&price=").concat(product.price, "&amount=").concat(amount, "&source=moma")).then(function (resp) { 10252 var _a; 10253 var msg = null; 10254 console.log(resp.data, 'resp.data'); 10255 if (!isNaN(resp.data.qty)) { 10256 var cartBadge = (_a = document.getElementById('cart-btn')) === null || _a === void 0 ? void 0 : _a.firstElementChild; 10257 if (cartBadge) cartBadge.innerHTML = resp.data.qty; 10258 } 10259 msg = resp.data.msg; 10260 if (msg) { 10261 alert(msg); 10262 } 10263 console.log(msg, 'msg'); 10264 location.href = '/kiem-tra-gio-hang'; 10265 }); 10266 }; 10267 function copyright() { 10268 setTextCP('copied!'); 10269 } 10270 return react_1["default"].createElement(react_1["default"].Fragment, null, react_1["default"].createElement(quick_action_shop_1.QuickAction, { 10271 slug: params.slug, 10272 product_id: product.product_id, 10273 product_price: product.price, 10274 amount: amount 10275 }), react_1["default"].createElement("main", { 10276 id: "main" 10277 }, react_1["default"].createElement("div", { 10278 className: "shop-container" 10279 }, react_1["default"].createElement("div", { 10280 id: "product-139", 10281 className: "post-139 product type-product status-publish has-post-thumbnail product_cat-ao product_cat-thoi-trang-nu first instock sale shipping-taxable purchasable product-type-simple" 10282 }, react_1["default"].createElement("div", { 10283 className: "product-container" 10284 }, react_1["default"].createElement("div", { 10285 className: "container", 10286 style: { 10287 background: '#fff' 10288 } 10289 }, react_1["default"].createElement("div", { 10290 className: "product-main" 10291 }, react_1["default"].createElement("div", { 10292 className: "row content-row mb-0" 10293 }, react_1["default"].createElement("div", { 10294 className: "product-gallery large-6 col" 10295 }, react_1["default"].createElement("div", { 10296 className: "product-images relative mb-half has-hover woocommerce-product-gallery w
10296oocommerce-product-gallery--with-images woocommerce-product-gallery--columns-4 images", 10297 "data-columns": 4, 10298 style: { 10299 opacity: 1 10300 } 10301 }, product.price > 0 && product.discount > 0 && react_1["default"].createElement("div", { 10302 className: "badge-container is-larger absolute left top z-1" 10303 }, react_1["default"].createElement("div", { 10304 className: "callout badge badge-square" 10305 }, react_1["default"].createElement("div", { 10306 className: "badge-inner secondary on-sale" 10307 }, react_1["default"].createElement("span", { 10308 className: "onsale" 10309 }, "--", 100 - Math.ceil(product.discount / product.price * 100), "%")))), react_1["default"].createElement("div", { 10310 className: "image-tools absolute top show-on-hover right z-3" 10311 }), react_1["default"].createElement("figure", { 10312 className: "woocommerce-product-gallery__wrapper product-gallery-slider slider slider-nav-small mb-half flickity-enabled is-draggable", 10313 tabIndex: 0 10314 }, react_1["default"].createElement("div", { 10315 className: "flickity-viewport", 10316 style: { 10317 height: '640px' 10318 } 10319 }, react_1["default"].createElement("div", { 10320 className: "flickity-slider", 10321 style: { 10322 left: '0px', 10323 transform: 'translateX(0%)' 10324 } 10325 }, react_1["default"].createElement("div", { 10326 className: "first slide woocommerce-product-gallery__image is-selected", 10327 style: { 10328 position: 'absolute', 10329 left: '0%' 10330 } 10331 }, react_1["default"].createElement("a", { 10332 href: images[selectedImage], 10333 target: "_blank" 10334 }, react_1["default"].createElement("img", { 10335 width: 600, 10336 height: 600, 10337 src: images[selectedImage], 10338 className: "attachment-shop_single size-shop_single wp-post-image", 10339 alt: "" 10340 })))))), react_1["default"].createElement("div", { 10341 className: "image-tools absolute bottom left z-3" 10342 }, react_1["default"].createElement("a", { 10343 href: "#product-zoom", 10344 className: "zoom-button button is-outline circle icon tooltip hide-for-small tooltipstered" 10345 }, react_1["default"].createElement("i", { 10346 className: "icon-expand" 10347 }), " ")))), react_1["default"].createElement("div", { 10348 className: "product-info summary col-fit col entry-summary product-summary text-left" 10349 }, react_1["default"].createElement("h1", { 10350 className: "product-title entry-title", 10351 style: { 10352 color: '#000' 10353 } 10354 }, product.title), react_1["default"].createElement("p", { 10355 className: "mgb5" 10356 }, "M\xE3: ", product.code), react_1["default"].createElement("p", { 10357 className: "" 10358 }, react_1["default"].createElement("i", { 10359 className: "star fa fa-star", 10360 "aria-hidden": "true" 10361 }), product.star > 1 ? react_1["default"].createElement("i", { 10362 className: "star fa fa-star", 10363 "aria-hidden": "true" 10364 }) : react_1["default"].createElement("i", { 10365 className: "fa fa-star", 10366 "aria-hidden": "true" 10367 }), product.star > 2 ? react_1["default"].createElement("i", { 10368 className: "star fa fa-star", 10369 "aria-hidden": "true" 10370 }) : react_1["default"].createElement("i", { 10371 className: "fa fa-star", 10372 "aria-hidden": "true" 10373 }), product.star > 3 ? react_1["default"].createElement("i", { 10374 className: "star fa fa-star", 10375 "aria-hidden": "true" 10376 }) : react_1["default"].createElement("i", { 10377 className: "fa fa-star", 10378 "aria-hidden": "true" 10379 }), product.star > 4 ? react_1["default"].createElement("i", { 10380 className: "star fa fa-star", 10381 "aria-hidden": "true" 10382 }) : react_1["default"].createElement("i", { 10383 className: "fa fa-star", 10384 "aria-hidden": "true" 10385 }), "\xA0\xA0|", "\xA0", product.views, " L\u01B0\u1EE3t mua"), react_1["default"].createElement("div", { 10386 className: "price-wrapper", 10387 style: { 10388 background: 'rgb(238, 232, 232)', 10389 padding: "10px", 10390 fontSize: '18px', 10391 marginBottom: '10px' 10392 } 10393 }, product.discount > 0 && product.price_moma < 0 && react_1["default"].createElement("p", { 10394 className: "price product-page-price price-on-sale" 10395 }, react_1["default"].createElement("del", null, react_1["default"].createElement("span", { 10396 className: "woocommerce-Price-amount amount" 10397 }, new Intl.NumberFormat('vi-VN', { 10398 maximumSignificantDigits: 3 10399 }).format(product.price), "\xA0", react_1["default"].createElement("span", { 10400 className: "woocommerce-Price-currencySymbol" 10401 }, "\u20AB"))), react_1["default"].createElement("ins", null, react_1["default"].createElement("span", { 10402 className: "woocommerce-Price-amount amount" 10403 }, new Intl.NumberFormat('vi-VN', { 10404 maximumSignificantDigits: 3 10405 }).format(product.discount), "\xA0", react_1["default"].createElement("span", { 10406 className: "woocommerce-Price-currencySymbol" 10407 }, "\u20AB")))), product.price_moma > 0 && react_1["default"].createElement("p", {
10408 className: "price product-page-price price-on-sale" 10409 }, react_1["default"].createElement("del", null, react_1["default"].createElement("span", { 10410 className: "woocommerce-Price-amount amount" 10411 }, new Intl.NumberFormat('vi-VN', { 10412 maximumSignificantDigits: 3 10413 }).format(product.price), "\xA0", react_1["default"].createElement("span", { 10414 className: "woocommerce-Price-currencySymbol" 10415 }, "\u20AB"))), react_1["default"].createElement("ins", null, react_1["default"].createElement("span", { 10416 className: "woocommerce-Price-amount amount" 10417 }, new Intl.NumberFormat('vi-VN', { 10418 maximumSignificantDigits: 3 10419 }).format(product.price_moma), "\xA0", react_1["default"].createElement("span", { 10420 className: "woocommerce-Price-currencySymbol" 10421 }, "\u20AB")))), product.discount <= 0 && product.price_moma <= 0 && react_1["default"].createElement("p", { 10422 className: "price product-page-price price-on-sale" 10423 }, react_1["default"].createElement("ins", null, react_1["default"].createElement("span", { 10424 className: "woocommerce-Price-amount amount" 10425 }, new Intl.NumberFormat('vi-VN', { 10426 maximumSignificantDigits: 3 10427 }).format(product.price), "\xA0", react_1["default"].createElement("span", { 10428 className: "woocommerce-Price-currencySymbol" 10429 }, "\u20AB"))))), react_1["default"].createElement("form", { 10430 className: "cart", 10431 method: "post", 10432 encType: "multipart/form-data" 10433 }, react_1["default"].createElement("div", { 10434 className: "quantity buttons_added" 10435 }, react_1["default"].createElement("input", { 10436 type: "button", 10437 defaultValue: "-", 10438 className: "minus button is-form", 10439 onClick: addMore(-1) 10440 }), react_1["default"].createElement("input", { 10441 type: "number", 10442 className: "input-text qty text", 10443 step: 1, 10444 min: 1, 10445 max: 9999, 10446 name: "quantity", 10447 defaultValue: 1, 10448 title: "SL", 10449 size: 4, 10450 pattern: "[0-9]*", 10451 inputMode: "numeric", 10452 value: amount 10453 }), react_1["default"].createElement("input", { 10454 type: "button", 10455 defaultValue: "+", 10456 className: "plus button is-form", 10457 onClick: addMore(1) 10458 })), react_1["default"].createElement("button", { 10459 type: "button", 10460 name: "add-to-cart", 10461 value: 139, 10462 className: "single_add_to_cart_button button alt", 10463 onClick: addToCart 10464 }, "Th\xEAm v\xE0o gi\u1ECF"), react_1["default"].createElement("button", { 10465 type: "button", 10466 name: "add-to-cart", 10467 value: 139, 10468 className: "alt button btn btn-primary", 10469 style: { 10470 padding: "0 1.2em", 10471 background: "#0b5ed7" 10472 }, 10473 onClick: addToCartNow 10474 }, "Mua ngay")), react_1["default"].createElement("div", { 10475 className: "row row-collapse row-full-width", 10476 id: "row-334734891" 10477 }, react_1["default"].createElement("div", { 10478 dangerouslySetInnerHTML: { 10479 __html: product.description 10480 } 10481 })), react_1["default"].createElement("div", { 10482 className: "row row-collapse row-full-width", 10483 style: { 10484 marginTop: '20px' 10485 } 10486 }, react_1["default"].createElement("div", { 10487 className: "col medium-12 small-12 large-12" 10488 }, react_1["default"].createElement(react_share_1.FacebookShareButton, { 10489 url: window.location.href + '?affiliate_contact=' + affiliateContact, 10490 className: "Demo__some-network__share-button" 10491 }, react_1["default"].createElement(react_share_1.FacebookIcon, { 10492 size: 20, 10493 round: true 10494 }), " Facebook"), react_1["default"].createElement(react_share_1.TelegramShareButton, { 10495 url: window.location.href + '?affiliate_contact=' + affiliateContact, 10496 className: "Demo__some-network__share-button" 10497 }, react_1["default"].createElement(react_share_1.TelegramIcon, { 10498 size: 20, 10499 round: true 10500 }), " Telegram"), react_1["default"].createElement("div", { 10501 style: { 10502 "float": 'left', 10503 paddingRight: "12px", 10504 paddingTop: '8px' 10505 }, 10506 className: "react-share__ShareButton Demo__some-network__share-button" 10507 }, react_1["default"].createElement(react_helmet_1.Helmet, null, react_1["default"].createElement("script", { 10508 src: "https://sp.zalo.me/plugins/sdk.js" 10509 })), react_1["default"].createElement("div", { 10510 style: { 10511 position: "initial" 10512 }, 10513 className: "zalo-share-button", 10514 "data-href": window.location.href + '?affiliate_contact=' + affiliateContact, 10515 "data-oaid": 579745863508352884, 10516 "data-layout": 1, 10517 "data-color": "blue", 10518 "data-customize": false 10519 })))), affiliateContact && react_1["default"].createElement("div", { 10520 className: "row row-collapse row-full-width", 10521 style: { 10522 marginTop: '20px' 10523 } 10524 }, react_1["default"].createElement("div", { 10525 style: { 10526 width: '70%' 10527 } 10528 }, react_1["default"].createElement("input", { 10529 style: { 10530 "float": 'left', 10531 width: '60%' 10532 }, 10533 className: "form-control", 10534 type: "text", 10535 defaultValue: window.location.href + '?affiliate_contact=' + affiliateContact 10536 }), react_1["default"].createElement("button", { 10537 style: { 10538 "float": 'left', 10539 width: '20%' 10540 }, 10541 className: "form-control btn btn-success" 10542 }, react_1["default"].createElement(react_copy_to_clipboard_1.CopyToClipboard, { 10543 text: window.location.href + '?affiliate_contact=' + affiliateContact, 10544 onCopy: copyright 10545 }, react_1["default"].createElement("span", null, textCP))))))))), react_1["default"].createElement("div", { 10546 className: "product-footer" 10547 }, react_1["default"].createElement("div", { 10548 className: "container" 10549 }, react_1["default"].createElement("div", { 10550 className: "woocommerce-tabs tabbed-content" 10551 }, react_1["default"].createElement("ul", { 10552 className: "product-tabs nav small-nav-collapse tabs nav nav-uppercase nav-tabs nav-normal nav-left" 10553 }, react_1["default"].createElement("li", { 10554 className: "description_tab active" 10555 }, react_1["default"].createElement("a", { 10556 href: "#tab-description", 10557 className: 'px-3' 10558 }, "M\xF4 t\u1EA3"))), react_1["default"].createElement("div", { 10559 className: "tab-panels" 10560 }, react_1["default"].createElement("div", { 10561 className: "panel entry-content active", 10562 id: "tab-description", 10563 dangerouslySetInnerHTML: { 10564 __html: product.content 10565 } 10566 }), react_1["default"].createElement("div", { 10567 className: "panel entry-content", 10568 id: "tab-reviews" 10569 }, react_1["default"].createElement("div", { 10570 className: "row", 10571 id: "reviews" 10572 }, react_1["default"].createElement("div", { 10573 className: "col large-7", 10574 id: "comments" 10575 }, react_1["default"].createElement("h3", { 10576 className: "normal" 10577 }, "1 \u0111\xE1nh gi\xE1 cho ", react_1["default"].createElement("span", null, "\xC1o s\u01A1 mi caro k\xE8m belt")), react_1["default"].createElement("ol", { 10578 className: "commentlist" 10579 }, react_1["default"].createElement("li", { 10580 className: "comment byuser comment-author-admin bypostauthor even thread-even depth-1", 10581 id: "li-comment-2" 10582 }, react_1["default"].createElement("div", { 10583 id: "comment-2", 10584 className: "comment_container review-item flex-row align-top" 10585 }, react_1["default"].createElement("div", { 10586 className: "flex-col" 10587 }, react_1["default"].createElement("img", { 10588 alt: "", 10589 src: "https://0.gravatar.com/avatar/c6b3d31539b5f51e68dc08bbde85fcec?s=60&d=mm&r=g", 10590 srcSet: "http://0.gravatar.com/avatar/c6b3d31539b5f51e68dc08bbde85fcec?s=120&d=mm&r=g 2x", 10591 className: "avatar avatar-60 photo", 10592 height: 60, 10593 width: 60 10594 })), react_1["default"].createElement("div", { 10595 className: "comment-text flex-col flex-grow" 10596 }, react_1["default"].createElement("div", { 10597 className: "star-rating" 10598 }, react_1["default"].createElement("span", { 10599 style: { 10600 width: '100%' 10601 } 10602 }, "\u0110\u01B0\u1EE3c x\u1EBFp h\u1EA1ng ", react_1["default"].createElement("strong", { 10603 className: "rating" 10604 }, "5"), " 5 sao")), react_1["default"].createElement("p", { 10605 className: "meta" 10606 }, react_1["default"].createElement("strong", { 10607 className: "woocommerce-review__author" 10608 }, "Admin"), " ", react_1["default"].createElement("span", { 10609 className: "woocommerce-review__dash" 10610 }, "\u2013"), react_1["default"].createElement("time", { 10611 className: "woocommerce-review__published-date", 10612 dateTime: "2017-10-27T16:31:24+00:00" 10613 }, "27 Th\xE1ng M\u01B0\u1EDDi, 2017")), react_1["default"].createElement("div", { 10614 className: "description" 10615 }, react_1["default"].createElement("p", null, "R\u1EA5t h\u1EE3p v\u1EDBi d\xE1ng em \uD83D\uDE42"))))))), react_1["default"].createElement("div", { 10616 id: "review_form_wrapper", 10617 className: "large-5 col" 10618 }, react_1["default"].createElement("div", { 10619 id: "review_form", 10620 className: "col-inner" 10621 }, react_1["default"].createElement("div", { 10622 className: "review-form-inner has-border" 10623 }, react_1["default"].createElement("div", { 10624 id: "respond", 10625 className: "comment-respond" 10626 }, react_1["default"].createElement("h3", { 10627 id: "reply-title", 10628 className: "comment-reply-title" 10629 }, "Th\xEAm \u0111\xE1nh gi\xE1 ", react_1["default"].createElement("small", null, react_1["default"].createElement("a", { 10630 rel: "nofollow", 10631 id: "cancel-comment-reply-link", 10632 href: "/shopee/san-pham/ao-so-mi-caro-kem-belt/#respond", 10633 style: { 10634 display: 'none' 10635 } 10636 }, "H\u1EE7y"))), react_1["default"].createElement("form", { 10637 action: "http://mauweb.monamedia.net/shopee/wp-comments-post.php", 10638 method: "post", 10639 id: "commentform", 10640 className: "comment-form", 10641 noValidate: true 10642 }, react_1["default"].createElement("p", { 10643 className: "comment-form-rating" 10644 }, react_1["default"].createElement("label", { 10645 htmlFor: "rating" 10646 }, "\u0110\xE1nh gi\xE1 c\u1EE7a b\u1EA1n")), react_1["default"].createElement("p", { 10647 className: "stars" 10648 }, react_1["default"].createElement("span", null, react_1["default"].createElement("a", { 10649 className: "star-1", 10650 href: "#" 10651 }, "1"), react_1["default"].createElement("a", { 10652 className: "star-2", 10653 href: "#" 10654 }, "2"), react_1["default"].createElement("a", { 10655 className: "star-3", 10656 href: "#" 10657 }, "3"), react_1["default"].createElement("a", { 10658 className: "star-4", 10659 href: "#" 10660 }, "4"), react_1["default"].createElement("a", { 10661 className: "star-5", 10662 href: "#" 10663 }, "5"))), react_1["default"].createElement("select", { 10664 name: "rating", 10665 id: "rating", 10666 style: { 10667 display: 'none' 10668 } 10669 }, react_1["default"].createElement("option", null, "X\u1EBFp h\u1EA1ng\u2026"), react_1["default"].createElement("option", { 10670 value: 5 10671 }, "R\u1EA5t t\u1ED1t"), react_1["default"].createElement("option", { 10672 value: 4 10673 }, "T\u1ED1t"), react_1["default"].createElement("option", { 10674 value: 3 10675 }, "Trung b\xECnh"), react_1["default"].createElement("option", { 10676 value: 2 10677 }, "Kh\xF4ng t\u1EC7"), react_1["default"].createElement("option", { 10678 value: 1 10679 }, "Very Poor")), react_1["default"].createElement("p", null), react_1["default"].createElement("p", { 10680 className: "comment-form-comment" 10681 }, react_1["default"].createElement("label", { 10682 htmlFor: "comment" 10683 }, "Nh\u1EADn x\xE9t c\u1EE7a b\u1EA1n"), react_1["default"].createElement("textarea", { 10684 id: "comment", 10685 name: "comment", 10686 cols: 45, 10687 rows: 8, 10688 "aria-required": "true", 10689 defaultValue: "" 10690 })), react_1["default"].createElement("p", { 10691 className: "comment-form-author" 10692 }, react_1["default"].createElement("label", { 10693 htmlFor: "author" 10694 }, "T\xEAn ", react_1["default"].createElement("span", { 10695 className: "required" 10696 }, "*")), " ", react_1["default"].createElement("input", { 10697 id: "author", 10698 name: "author", 10699 type: "text", 10700 size: 30, 10701 "aria-required": "true" 10702 })), react_1["default"].createElement("p", { 10703 className: "comment-form-email" 10704 }, react_1["default"].createElement("label", { 10705 htmlFor: "email" 10706 }, "Email ", react_1["default"].createElement("span", { 10707 className: "required" 10708 }, "*")), " ", react_1["default"].createElement("input", { 10709 id: "email", 10710 name: "email", 10711 type: "text", 10712 size: 30, 10713 "aria-required": "true" 10714 })), react_1["default"].createElement("p", { 10715 className: "form-submit" 10716 }, react_1["default"].createElement("input", { 10717 name: "submit", 10718 type: "submit", 10719 id: "submit", 10720 className: "submit", 10721 defaultValue: "G\u1EEDi \u0111i" 10722 }), react_1["default"].createElement("input", { 10723 type: "hidden", 10724 name: "comment_post_ID", 10725 defaultValue: 139, 10726 id: "comment_post_ID" 10727 }), react_1["default"].createElement("input", { 10728 type: "hidden", 10729 name: "comment_parent", 10730 id: "comment_parent", 10731 defaultValue: 0 10732 }))))))))))), react_1["default"].createElement("div", { 10733 className: "related related-products-wrapper product-section" 10734 }, react_1["default"].createElement("h3", { 10735 className: "product-section-title product-section-title-related pt-half pb-half uppercase" 10736 }, "S\u1EA3n ph\u1EA9m t\u01B0\u01A1ng t\u1EF1 "), react_1["default"].createElement("div", { 10737 className: "row large-columns-4 medium-columns- small-columns-2 row-small" 10738 }, similarProducts.map(function (similarProduct, index) { 10739 var productImage = '/libraries/libraryxhome-3888/images/76693220_1666972563440263_7492540632209031168_n.jpg'; 10740 if (similarProduct.image_list) { 10741 productImage = similarProduct.image_list.split(',')[0]; 10742 } else if (similarProduct.image) { 10743 productImage = similarProduct.image; 10744 } 10745 return react_1["default"].createElement("div", { 10746 key: index, 10747 className: "product-small col has-hover post-135 product type-product status-publish has-post-thumbnail product_cat-ao-thun product_cat-thoi-trang-nam first instock shipping-taxable purchasable product-type-simple" 10748 }, react_1["default"].createElement("div", { 10749 className: "col-inner" 10750 }, react_1["default"].createElement("div", { 10751 className: "badge-container absolute left top z-1" 10752 }), react_1["default"].createElement("div", { 10753 className: "product-small box " 10754 }, react_1["default"].createElement("div", { 10755 className: "box-image" 10756 }, react_1["default"].createElement("div", { 10757 className: "image-fade_in_back" 10758 }, react_1["default"].createElement("a", { 10759 href: '/chi-tiet-san-pham/' + similarProduct.slug + '?user_email=' + similarProduct.user_email 10760 }, react_1["default"].createElement("img", { 10761 width: 300, 10762 height: 300, 10763 src: productImage 10764 }
10764))), react_1["default"].createElement("div", { 10765 className: "image-tools is-small top right show-on-hover" 10766 }), react_1["default"].createElement("div", { 10767 className: "image-tools is-small hide-for-small bottom left show-on-hover" 10768 }), react_1["default"].createElement("div", { 10769 className: "image-tools grid-tools text-center hide-for-small bottom hover-slide-in show-on-hover" 10770 })), react_1["default"].createElement("div", { 10771 className: "box-text box-text-products text-center grid-style-2" 10772 }, react_1["default"].createElement("p", null, similarProduct.category_string), react_1["default"].createElement("div", { 10773 className: "title-wrapper" 10774 }, react_1["default"].createElement("p", { 10775 className: "name product-title" 10776 }, react_1["default"].createElement("a", { 10777 href: '/chi-tiet-san-pham/' + similarProduct.slug + '?user_email=' + similarProduct.user_email 10778 }, similarProduct.title))), react_1["default"].createElement("div", { 10779 className: "price-wrapper" 10780 }, similarProduct.discount > 0 && react_1["default"].createElement("span", { 10781 className: "price" 10782 }, react_1["default"].createElement("del", null, react_1["default"].createElement("span", { 10783 className: "woocommerce-Price-amount amount" 10784 }, similarProduct.price, "\xA0", react_1["default"].createElement("span", { 10785 className: "woocommerce-Price-currencySymbol" 10786 }, "\u20AB"))), " ", react_1["default"].createElement("ins", null, react_1["default"].createElement("span", { 10787 className: "woocommerce-Price-amount amount" 10788 }, similarProduct.discount, "\xA0", react_1["default"].createElement("span", { 10789 className: "woocommerce-Price-currencySymbol" 10790 }, "\u20AB")))), similarProduct.discount <= 0 && react_1["default"].createElement("span", { 10791 className: "price" 10792 }, react_1["default"].createElement("ins", null, react_1["default"].createElement("span", { 10793 className: "woocommerce-Price-amount amount" 10794 }, similarProduct.price, "\xA0", react_1["default"].createElement("span", { 10795 className: "woocommerce-Price-currencySymbol" 10796 }, "\u20AB"))))))))); 10797 })))))))))); 10798}; 10799exports.ProductDetail = ProductDetail; 10800 10801/***/ }), 10802
vendor: 249,624 bytes, lines 10803-11096
10803/***/ "./node_modules/copy-to-clipboard/index.js": 10804/*!*************************************************!*\ 10805 !*** ./node_modules/copy-to-clipboard/index.js ***! 10806 \*************************************************/ 10807/***/ ((module, __unused_webpack_exports, __webpack_require__) => { 10808 10809"use strict"; 10810 10811 10812var deselectCurrent = __webpack_require__(/*! toggle-selection */ "./node_modules/toggle-selection/index.js"); 10813 10814var clipboardToIE11Formatting = { 10815 "text/plain": "Text", 10816 "text/html": "Url", 10817 "default": "Text" 10818} 10819 10820var defaultMessage = "Copy to clipboard: #{key}, Enter"; 10821 10822function format(message) { 10823 var copyKey = (/mac os x/i.test(navigator.userAgent) ? "â" : "Ctrl") + "+C"; 10824 return message.replace(/#{\s*key\s*}/g, copyKey); 10825} 10826 10827function copy(text, options) { 10828 var debug, 10829 message, 10830 reselectPrevious, 10831 range, 10832 selection, 10833 mark, 10834 success = false; 10835 if (!options) { 10836 options = {}; 10837 } 10838 debug = options.debug || false; 10839 try { 10840 reselectPrevious = deselectCurrent(); 10841 10842 range = document.createRange(); 10843 selection = document.getSelection(); 10844 10845 mark = document.createElement("span"); 10846 mark.textContent = text; 10847 // avoid screen readers from reading out loud the text 10848 mark.ariaHidden = "true" 10849 // reset user styles for span element 10850 mark.style.all = "unset"; 10851 // prevents scrolling to the end of the page 10852 mark.style.position = "fixed"; 10853 mark.style.top = 0; 10854 mark.style.clip = "rect(0, 0, 0, 0)"; 10855 // used to preserve spaces and line breaks 10856 mark.style.whiteSpace = "pre"; 10857 // do not inherit user-select (it may be `none`) 10858 mark.style.webkitUserSelect = "text"; 10859 mark.style.MozUserSelect = "text"; 10860 mark.style.msUserSelect = "text"; 10861 mark.style.userSelect = "text"; 10862 mark.addEventListener("copy", function(e) { 10863 e.stopPropagation(); 10864 if (options.format) { 10865 e.preventDefault(); 10866 if (typeof e.clipboardData === "undefined") { // IE 11 10867 debug && console.warn("unable to use e.clipboardData"); 10868 debug && console.warn("trying IE specific stuff"); 10869 window.clipboardData.clearData(); 10870 var format = clipboardToIE11Formatting[options.format] || clipboardToIE11Formatting["default"] 10871 window.clipboardData.setData(format, text); 10872 } else { // all other browsers 10873 e.clipboardData.clearData(); 10874 e.clipboardData.setData(options.format, text); 10875 } 10876 } 10877 if (options.onCopy) { 10878 e.preventDefault(); 10879 options.onCopy(e.clipboardData); 10880 } 10881 }); 10882 10883 document.body.appendChild(mark); 10884 10885 range.selectNodeContents(mark); 10886 selection.addRange(range); 10887 10888 var successful = document.execCommand("copy"); 10889 if (!successful) { 10890 throw new Error("copy command was unsuccessful"); 10891 } 10892 success = true; 10893 } catch (err) { 10894 debug && console.error("unable to copy using execCommand: ", err); 10895 debug && console.warn("trying IE specific stuff"); 10896 try { 10897 window.clipboardData.setData(options.format || "text", text); 10898 options.onCopy && options.onCopy(window.clipboardData); 10899 success = true; 10900 } catch (err) { 10901 debug && console.error("unable to copy using clipboardData: ", err); 10902 debug && console.error("falling back to prompt"); 10903 message = format("message" in options ? options.message : defaultMessage); 10904 window.prompt(message, text); 10905 } 10906 } finally { 10907 if (selection) { 10908 if (typeof selection.removeRange == "function") { 10909 selection.removeRange(range); 10910 } else { 10911 selection.removeAllRanges(); 10912 } 10913 } 10914 10915 if (mark) { 10916 document.body.removeChild(mark); 10917 } 10918 reselectPrevious(); 10919 } 10920 10921 return success; 10922} 10923 10924module.exports = copy; 10925 10926 10927/***/ }), 10928 10929/***/ "./node_modules/css-loader/dist/cjs.js??ruleSet[1].rules[9].oneOf[1].use[1]!./node_modules/postcss-loader/dist/cjs.js??ruleSet[1].rules[9].oneOf[1].use[2]!./node_modules/sass-loader/dist/cjs.js??ruleSet[1].rules[9].oneOf[1].use[3]!./resources/js/app/app.style.scss": 10930/*!*******************************************************************************************************************************************************************************************************************************************************************************!*\ 10931 !*** ./node_modules/css-loader/dist/cjs.js??ruleSet[1].rules[9].oneOf[1].use[1]!./node_modules/postcss-loader/dist/cjs.js??ruleSet[1].rules[9].oneOf[1].use[2]!./node_modules/sass-loader/dist/cjs.js??ruleSet[1].rules[9].oneOf[1].use[3]!./resources/js/app/app.style.scss ***! 10932 \*******************************************************************************************************************************************************************************************************************************************************************************/ 10933/***/ ((module, __webpack_exports__, __webpack_require__) => { 10934 10935"use strict"; 10936__webpack_require__.r(__webpack_exports__); 10937/* harmony export */ __webpack_require__.d(__webpack_exports__, { 10938/* harmony export */ "default": () => (__WEBPACK_DEFAULT_EXPORT__) 10939/* harmony export */ }); 10940/* harmony import */ var _node_modules_css_loader_dist_runtime_api_js__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ../../../node_modules/css-loader/dist/runtime/api.js */ "./node_modules/css-loader/dist/runtime/api.js"); 10941/* harmony import */ var _node_modules_css_loader_dist_runtime_api_js__WEBPACK_IMPORTED_MODULE_0___default = /*#__PURE__*/__webpack_require__.n(_node_modules_css_loader_dist_runtime_api_js__WEBPACK_IMPORTED_MODULE_0__); 10942// Imports 10943 10944var ___CSS_LOADER_EXPORT___ = _node_modules_css_loader_dist_runtime_api_js__WEBPACK_IMPORTED_MODULE_0___default()(function(i){return i[1]}); 10945// Module 10946___CSS_LOADER_EXPORT___.push([module.id, "", ""]); 10947// Exports 10948/* harmony default export */ const __WEBPACK_DEFAULT_EXPORT__ = (___CSS_LOADER_EXPORT___); 10949 10950 10951/***/ }), 10952 10953/***/ "./node_modules/css-loader/dist/cjs.js??ruleSet[1].rules[9].oneOf[1].use[1]!./node_modules/postcss-loader/dist/cjs.js??ruleSet[1].rules[9].oneOf[1].use[2]!./node_modules/sass-loader/dist/cjs.js??ruleSet[1].rules[9].oneOf[1].use[3]!./resources/js/components/category-list/category-list.style.scss": 10954/*!**************************************************************************************************************************************************************************************************************************************************************************************************************!*\ 10955 !*** ./node_modules/css-loader/dist/cjs.js??ruleSet[1].rules[9].oneOf[1].use[1]!./node_modules/postcss-loader/dist/cjs.js??ruleSet[1].rules[9].oneOf[1].use[2]!./node_modules/sass-loader/dist/cjs.js??ruleSet[1].rules[9].oneOf[1].use[3]!./resources/js/components/category-list/category-list.style.scss ***! 10956 \**************************************************************************************************************************************************************************************************************************************************************************************************************/ 10957/***/ ((module, __webpack_exports__, __webpack_require__) => { 10958 10959"use strict"; 10960__webpack_require__.r(__webpack_exports__); 10961/* harmony export */ __webpack_require__.d(__webpack_exports__, { 10962/* harmony export */ "default": () => (__WEBPACK_DEFAULT_EXPORT__) 10963/* harmony export */ }); 10964/* harmony import */ var _node_modules_css_loader_dist_runtime_api_js__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ../../../../node_modules/css-loader/dist/runtime/api.js */ "./node_modules/css-loader/dist/runtime/api.js"); 10965/* harmony import */ var _node_modules_css_loader_dist_runtime_api_js__WEBPACK_IMPORTED_MODULE_0___default = /*#__PURE__*/__webpack_require__.n(_node_modules_css_loader_dist_runtime_api_js__WEBPACK_IMPORTED_MODULE_0__); 10966// Imports 10967 10968var ___CSS_LOADER_EXPORT___ = _node_modules_css_loader_dist_runtime_api_js__WEBPACK_IMPORTED_MODULE_0___default()(function(i){return i[1]}); 10969// Module 10970___CSS_LOADER_EXPORT___.push([module.id, ".product-category .col {\n max-width: 100% !important;\n}", ""]); 10971// Exports 10972/* harmony default export */ const __WEBPACK_DEFAULT_EXPORT__ = (___CSS_LOADER_EXPORT___); 10973 10974 10975/***/ }), 10976 10977/***/ "./node_modules/css-loader/dist/cjs.js??ruleSet[1].rules[9].oneOf[1].use[1]!./node_modules/postcss-loader/dist/cjs.js??ruleSet[1].rules[9].oneOf[1].use[2]!./node_modules/sass-loader/dist/cjs.js??ruleSet[1].rules[9].oneOf[1].use[3]!./resources/js/components/flash-sale/flash-sale.style.scss": 10978/*!********************************************************************************************************************************************************************************************************************************************************************************************************!*\ 10979 !*** ./node_modules/css-loader/dist/cjs.js??ruleSet[1].rules[9].oneOf[1].use[1]!./node_modules/postcss-loader/dist/cjs.js??ruleSet[1].rules[9].oneOf[1].use[2]!./node_modules/sass-loader/dist/cjs.js??ruleSet[1].rules[9].oneOf[1].use[3]!./resources/js/components/flash-sale/flash-sale.style.scss ***! 10980 \********************************************************************************************************************************************************************************************************************************************************************************************************/ 10981/***/ ((module, __webpack_exports__, __webpack_require__) => { 10982 10983"use strict"; 10984__webpack_require__.r(__webpack_exports__); 10985/* harmony export */ __webpack_require__.d(__webpack_exports__, { 10986/* harmony export */ "default": () => (__WEBPACK_DEFAULT_EXPORT__) 10987/* harmony export */ }); 10988/* harmony import */ var _node_modules_css_loader_dist_runtime_api_js__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ../../../../node_modules/css-loader/dist/runtime/api.js */ "./node_modules/css-loader/dist/runtime/api.js"); 10989/* harmony import */ var _node_modules_css_loader_dist_runtime_api_js__WEBPACK_IMPORTED_MODULE_0___default = /*#__PURE__*/__webpack_require__.n(_node_modules_css_loader_dist_runtime_api_js__WEBPACK_IMPORTED_MODULE_0__); 10990// Imports 10991 10992var ___CSS_LOADER_EXPORT___ = _node_modules_css_loader_dist_runtime_api_js__WEBPACK_IMPORTED_MODULE_0___default()(function(i){return i[1]}); 10993// Module 10994___CSS_LOADER_EXPORT___.push([module.id, ".flash_sale .box-text.text-center, .san_pham_pho_bien .box-text.text-center {\n padding-left: 10px;\n padding-right: 10px;\n height: 150px;\n}", ""]); 10995// Exports 10996/* harmony default export */ const __WEBPACK_DEFAULT_EXPORT__ = (___CSS_LOADER_EXPORT___); 10997 10998 10999/***/ }), 11000 11001/***/ "./node_modules/css-loader/dist/cjs.js??ruleSet[1].rules[9].oneOf[1].use[1]!./node_modules/postcss-loader/dist/cjs.js??ruleSet[1].rules[9].oneOf[1].use[2]!./node_modules/sass-loader/dist/cjs.js??ruleSet[1].rules[9].oneOf[1].use[3]!./resources/js/components/products/products.style.scss": 11002/*!****************************************************************************************************************************************************************************************************************************************************************************************************!*\ 11003 !*** ./node_modules/css-loader/dist/cjs.js??ruleSet[1].rules[9].oneOf[1].use[1]!./node_modules/postcss-loader/dist/cjs.js??ruleSet[1].rules[9].oneOf[1].use[2]!./node_modules/sass-loader/dist/cjs.js??ruleSet[1].rules[9].oneOf[1].use[3]!./resources/js/components/products/products.style.scss ***! 11004 \****************************************************************************************************************************************************************************************************************************************************************************************************/ 11005/***/ ((module, __webpack_exports__, __webpack_require__) => { 11006 11007"use strict"; 11008__webpack_require__.r(__webpack_exports__); 11009/* harmony export */ __webpack_require__.d(__webpack_exports__, { 11010/* harmony export */ "default": () => (__WEBPACK_DEFAULT_EXPORT__) 11011/* harmony export */ }); 11012/* harmony import */ var _node_modules_css_loader_dist_runtime_api_js__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ../../../../node_modules/css-loader/dist/runtime/api.js */ "./node_modules/css-loader/dist/runtime/api.js"); 11013/* harmony import */ var _node_modules_css_loader_dist_runtime_api_js__WEBPACK_IMPORTED_MODULE_0___default = /*#__PURE__*/__webpack_require__.n(_node_modules_css_loader_dist_runtime_api_js__WEBPACK_IMPORTED_MODULE_0__); 11014// Imports 11015 11016var ___CSS_LOADER_EXPORT___ = _node_modules_css_loader_dist_runtime_api_js__WEBPACK_IMPORTED_MODULE_0___default()(function(i){return i[1]}); 11017// Module 11018___CSS_LOADER_EXPORT___.push([module.id, "", ""]); 11019// Exports 11020/* harmony default export */ const __WEBPACK_DEFAULT_EXPORT__ = (___CSS_LOADER_EXPORT___); 11021 11022 11023/***/ }), 11024 11025/***/ "./node_modules/css-loader/dist/cjs.js??ruleSet[1].rules[9].oneOf[1].use[1]!./node_modules/postcss-loader/dist/cjs.js??ruleSet[1].rules[9].oneOf[1].use[2]!./node_modules/sass-loader/dist/cjs.js??ruleSet[1].rules[9].oneOf[1].use[3]!./resources/js/components/quick-action-shop/quick-action.scss": 11026/*!***********************************************************************************************************************************************************************************************************************************************************************************************************!*\ 11027 !*** ./node_modules/css-loader/dist/cjs.js??ruleSet[1].rules[9].oneOf[1].use[1]!./node_modules/postcss-loader/dist/cjs.js??ruleSet[1].rules[9].oneOf[1].use[2]!./node_modules/sass-loader/dist/cjs.js??ruleSet[1].rules[9].oneOf[1].use[3]!./resources/js/components/quick-action-shop/quick-action.scss ***! 11028 \***********************************************************************************************************************************************************************************************************************************************************************************************************/ 11029/***/ ((module, __webpack_exports__, __webpack_require__) => { 11030 11031"use strict"; 11032__webpack_require__.r(__webpack_exports__); 11033/* harmony export */ __webpack_require__.d(__webpack_exports__, { 11034/* harmony export */ "default": () => (__WEBPACK_DEFAULT_EXPORT__) 11035/* harmony export */ }); 11036/* harmony import */ var _node_modules_css_loader_dist_runtime_api_js__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ../../../../node_modules/css-loader/dist/runtime/api.js */ "./node_modules/css-loader/dist/runtime/api.js"); 11037/* harmony import */ var _node_modules_css_loader_dist_runtime_api_js__WEBPACK_IMPORTED_MODULE_0___default = /*#__PURE__*/__webpack_require__.n(_node_modules_css_loader_dist_runtime_api_js__WEBPACK_IMPORTED_MODULE_0__); 11038// Imports 11039 11040var ___CSS_LOADER_EXPORT___ = _node_modules_css_loader_dist_runtime_api_js__WEBPACK_IMPORTED_MODULE_0___default()(function(i){return i[1]}); 11041// Module 11042___CSS_LOADER_EXPORT___.push([module.id, "#shop_quick_action {\n position: fixed;\n width: 100%;\n bottom: 0;\n z-index: 1049;\n}\n\n.quick-action-content {\n width: 100%;\n height: 30px;\n display: flex;\n flex-direction: row;\n background-color: white;\n justify-content: space-around;\n align-items: center;\n}\n.quick-action-content .add-to-cart {\n display: flex;\n flex: 1 1;\n justify-content: space-around;\n align-items: center;\n}\n.quick-action-content .add-to-cart i {\n font-size: 24px;\n color: #f4921d;\n}\n.quick-action-content .buy-now {\n display: flex;\n justify-content: space-around;\n align-items: center;\n flex: 1 1;\n margin: 0;\n padding: 0;\n background-color: #0aa07d;\n height: 30px;\n}\n.quick-action-content .buy-now span {\n font-size: 14px;\n font-weight: 600;\n color: white;\n}\n\n.showMb {\n display: none;\n}\n\n@media (max-width: 768px) {\n .showMb {\n display: block;\n position: fixed;\n bottom: 24px;\n width: 100%;\n z-index: 1049;\n }\n}", ""]); 11043// Exports 11044/* harmony default export */ const __WEBPACK_DEFAULT_EXPORT__ = (___CSS_LOADER_EXPORT___); 11045 11046 11047/***/ }), 11048 11049/***/ "./node_modules/css-loader/dist/cjs.js??ruleSet[1].rules[9].oneOf[1].use[1]!./node_modules/postcss-loader/dist/cjs.js??ruleSet[1].rules[9].oneOf[1].use[2]!./node_modules/sass-loader/dist/cjs.js??ruleSet[1].rules[9].oneOf[1].use[3]!./resources/js/components/top-sale/top-sale.style.scss": 11050/*!****************************************************************************************************************************************************************************************************************************************************************************************************!*\ 11051 !*** ./node_modules/css-loader/dist/cjs.js??ruleSet[1].rules[9].oneOf[1].use[1]!./node_modules/postcss-loader/dist/cjs.js??ruleSet[1].rules[9].oneOf[1].use[2]!./node_modules/sass-loader/dist/cjs.js??ruleSet[1].rules[9].oneOf[1].use[3]!./resources/js/components/top-sale/top-sale.style.scss ***! 11052 \****************************************************************************************************************************************************************************************************************************************************************************************************/ 11053/***/ ((module, __webpack_exports__, __webpack_require__) => { 11054 11055"use strict"; 11056__webpack_require__.r(__webpack_exports__); 11057/* harmony export */ __webpack_require__.d(__webpack_exports__, { 11058/* harmony export */ "default": () => (__WEBPACK_DEFAULT_EXPORT__) 11059/* harmony export */ }); 11060/* harmony import */ var _node_modules_css_loader_dist_runtime_api_js__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ../../../../node_modules/css-loader/dist/runtime/api.js */ "./node_modules/css-loader/dist/runtime/api.js"); 11061/* harmony import */ var _node_modules_css_loader_dist_runtime_api_js__WEBPACK_IMPORTED_MODULE_0___default = /*#__PURE__*/__webpack_require__.n(_node_modules_css_loader_dist_runtime_api_js__WEBPACK_IMPORTED_MODULE_0__); 11062// Imports 11063 11064var ___CSS_LOADER_EXPORT___ = _node_modules_css_loader_dist_runtime_api_js__WEBPACK_IMPORTED_MODULE_0___default()(function(i){return i[1]}); 11065// Module 11066___CSS_LOADER_EXPORT___.push([module.id, "", ""]); 11067// Exports 11068/* harmony default export */ const __WEBPACK_DEFAULT_EXPORT__ = (___CSS_LOADER_EXPORT___); 11069 11070 11071/***/ }), 11072 11073/***/ "./node_modules/css-loader/dist/cjs.js??ruleSet[1].rules[9].oneOf[1].use[1]!./node_modules/postcss-loader/dist/cjs.js??ruleSet[1].rules[9].oneOf[1].use[2]!./node_modules/sass-loader/dist/cjs.js??ruleSet[1].rules[9].oneOf[1].use[3]!./resources/sass/index.scss": 11074/*!*************************************************************************************************************************************************************************************************************************************************************************!*\ 11075 !*** ./node_modules/css-loader/dist/cjs.js??ruleSet[1].rules[9].oneOf[1].use[1]!./node_modules/postcss-loader/dist/cjs.js??ruleSet[1].rules[9].oneOf[1].use[2]!./node_modules/sass-loader/dist/cjs.js??ruleSet[1].rules[9].oneOf[1].use[3]!./resources/sass/index.scss ***! 11076 \*************************************************************************************************************************************************************************************************************************************************************************/ 11077/***/ ((module, __webpack_exports__, __webpack_require__) => { 11078 11079"use strict"; 11080__webpack_require__.r(__webpack_exports__); 11081/* harmony export */ __webpack_require__.d(__webpack_exports__, { 11082/* harmony export */ "default": () => (__WEBPACK_DEFAULT_EXPORT__) 11083/* harmony export */ }); 11084/* harmony import */ var _node_modules_css_loader_dist_runtime_api_js__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ../../node_modules/css-loader/dist/runtime/api.js */ "./node_modules/css-loader/dist/runtime/api.js"); 11085/* harmony import */ var _node_modules_css_loader_dist_runtime_api_js__WEBPACK_IMPORTED_MODULE_0___default = /*#__PURE__*/__webpack_require__.n(_node_modules_css_loader_dist_runtime_api_js__WEBPACK_IMPORTED_MODULE_0__); 11086// Imports 11087 11088var ___CSS_LOADER_EXPORT___ = _node_modules_css_loader_dist_runtime_api_js__WEBPACK_IMPORTED_MODULE_0___default()(function(i){return i[1]}); 11089// Module 11090___CSS_LOADER_EXPORT___.push([module.id, "@charset \"UTF-8\";\n.shop-container {\n /*!\n * Bootstrap v5.1.3 (https://getbootstrap.com/)\n * Copyright 2011-2021 The Bootstrap Authors\n * Copyright 2011-2021 Twitter, Inc.\n * Licensed under MIT (https://github.com/twbs/bootstrap/blob/main/LICENSE)\n */\n /*!\n * Bootstrap v3.4.1 (https://getbootstrap.com/)\n * Copyright 2011-2019 Twitter, Inc.\n * Licensed under MIT (https://github.com/twbs/bootstrap/blob/master/LICENSE)\n */\n /*! normalize.css v3.0.3 | MIT License | github.com/necolas/normalize.css */\n /*! Source: https://github.com/h5bp/html5-boilerplate/blob/master/src/css/main.css */\n}\n.shop-container html {\n font-family: sans-serif;\n -ms-text-size-adjust: 100%;\n -webkit-text-size-adjust: 100%;\n}\n.shop-container body {\n margin: 0;\n}\n.shop-container article,\n.shop-container aside,\n.shop-container details,\n.shop-container figcaption,\n.shop-container figure,\n.shop-container footer,\n.shop-container header,\n.shop-container hgroup,\n.shop-container main,\n.shop-container menu,\n.shop-container nav,\n.shop-container section,\n.shop-container summary {\n display: block;\n}\n.shop-container audio,\n.shop-container canvas,\n.shop-container progress,\n.shop-container video {\n display: inline-block;\n vertical-align: baseline;\n}\n.shop-container audio:not([controls]) {\n display: none;\n height: 0;\n}\n.shop-container [hidden],\n.shop-container template {\n display: none;\n}\n.shop-container a {\n background-color: transparent;\n}\n.shop-container a:active,\n.shop-container a:hover {\n outline: 0;\n}\n.shop-container abbr[title] {\n border-bottom: none;\n text-decoration: underline;\n -webkit-text-decoration: underline dotted;\n text-decoration: underline dotted;\n}\n.shop-container b,\n.shop-container strong {\n font-weight: bold;\n}\n.shop-container dfn {\n font-style: italic;\n}\n.shop-container h1 {\n font-size: 2em;\n margin: 0.67em 0;\n}\n.shop-container mark {\n background: #ff0;\n color: #000;\n}\n.shop-container small {\n font-size: 80%;\n}\n.shop-container sub,\n.shop-container sup {\n font-size: 75%;\n line-height: 0;\n position: relative;\n vertical-align: baseline;\n}\n.shop-container sup {\n top: -0.5em;\n}\n.shop-container sub {\n bottom: -0.25em;\n}\n.shop-container img {\n border: 0;\n}\n.shop-container svg:not(:root) {\n overflow: hidden;\n}\n.shop-container figure {\n margin: 1em 40px;\n}\n.shop-container hr {\n box-sizing: content-box;\n height: 0;\n}\n.shop-container pre {\n overflow: auto;\n}\n.shop-container code,\n.shop-container kbd,\n.shop-container pre,\n.shop-container samp {\n font-family: monospace, monospace;\n font-size: 1em;\n}\n.shop-container button,\n.shop-container input,\n.shop-container optgroup,\n.shop-container select,\n.shop-container textarea {\n color: inherit;\n font: inherit;\n margin: 0;\n}\n.shop-container button {\n overflow: visible;\n}\n.shop-container button,\n.shop-container select {\n text-transform: none;\n}\n.shop-container button,\n.shop-container html input[type=button],\n.shop-container input[type=reset],\n.shop-container input[type=submit] {\n -webkit-appearance: button;\n cursor: pointer;\n}\n.shop-container button[disabled],\n.shop-container html input[disabled] {\n cursor: default;\n}\n.shop-container button::-moz-focus-inner,\n.shop-container input::-moz-focus-inner {\n border: 0;\n padding: 0;\n}\n.shop-container input {\n line-height: normal;\n}\n.shop-container input[type=checkbox],\n.shop-container input[type=radio] {\n box-sizing: border-box;\n padding: 0;\n}\n.shop-container input[type=number]::-webkit-inner-spin-button,\n.shop-container input[type=number]::-webkit-outer-spin-button {\n height: auto;\n}\n.shop-container input[type=search] {\n -webkit-appearance: textfield;\n box-sizing: content-box;\n}\n.shop-container input[type=search]::-webkit-search-cancel-button,\n.shop-container input[type=search]::-webkit-search-decoration {\n -webkit-appearance: none;\n}\n.shop-container fieldset {\n border: 1px solid #c0c0c0;\n margin: 0 2px;\n padding: 0.35em 0.625em 0.75em;\n}\n.shop-container legend {\n border: 0;\n padding: 0;\n}\n.shop-container textarea {\n overflow: auto;\n}\n.shop-container optgroup {\n font-weight: bold;\n}\n.shop-container table {\n border-collapse: collapse;\n border-spacing: 0;\n}\n.shop-container td,\n.shop-container th {\n padding: 0;\n}\n@media print {\n .shop-container *,\n .shop-container *:before,\n .shop-container *:after {\n color: #000 !important;\n text-shadow: none !important;\n background: transparent !important;\n box-shadow: none !important;\n }\n .shop-container a,\n .shop-container a:visited {\n text-decoration: underline;\n }\n .shop-container a[href]:after {\n content: \" (\" attr(href) \")\";\n }\n .shop-container abbr[title]:after {\n content: \" (\" attr(title) \")\";\n }\n .shop-container a[href^=\"#\"]:after,\n .shop-container a[href^=\"javascript:\"]:after {\n content: \"\";\n }\n .shop-container pre,\n .shop-container blockquote {\n border: 1px solid #999;\n page-break-inside: avoid;\n }\n .shop-container thead {\n display: table-header-group;\n }\n .shop-container tr,\n .shop-container img {\n page-break-inside: avoid;\n }\n .shop-container img {\n max-width: 100% !important;\n }\n .shop-container p,\n .shop-container h2,\n .shop-container h3 {\n orphans: 3;\n widows: 3;\n }\n .shop-container h2,\n .shop-container h3 {\n page-break-after: avoid;\n }\n .shop-container .navbar {\n display: none;\n }\n .shop-container .btn > .caret,\n .shop-container .dropup > .btn > .caret {\n border-top-color: #000 !important;\n }\n .shop-container .label {\n border: 1px solid #000;\n }\n .shop-container .table {\n border-collapse: collapse !important;\n }\n .shop-container .table td,\n .shop-container .table th {\n background-color: #fff !important;\n }\n .shop-container .table-bordered th,\n .shop-container .table-bordered td {\n border: 1px solid #ddd !important;\n }\n}\n@font-face {\n font-family: \"Glyphicons Halflings\";\n src: url(\"../fonts/bootstrap/glyphicons-halflings-regular.eot\");\n src: url(\"../fonts/bootstrap/glyphicons-halflings-regular.eot?#iefix\") format(\"embedded-opentype\"), url(\"../fonts/bootstrap/glyphicons-halflings-regular.woff2\") format(\"woff2\"), url(\"../fonts/bootstrap/glyphicons-halflings-regular.woff\") format(\"woff\"), url(\"../fonts/bootstrap/glyphicons-halflings-regular.ttf\") format(\"truetype\"), url(\"../fonts/bootstrap/glyphicons-halflings-regular.svg#glyphicons_halflingsregular\") format(\"svg\");\n}\n.shop-container .glyphicon {\n position: relative;\n top: 1px;\n display: inline-block;\n font-family: \"Glyphicons Halflings\";\n font-style: normal;\n font-weight: 400;\n line-height: 1;\n -webkit-font-smoothing: antialiased;\n -moz-osx-font-smoothing: grayscale;\n}\n.shop-container .glyphicon-asterisk:before {\n content: \"*\";\n}\n.shop-container .glyphicon-plus:before {\n content: \"+\";\n}\n.shop-container .glyphicon-euro:before,\n.shop-container .glyphicon-eur:before {\n content: \"â¬\";\n}\n.shop-container .glyphicon-minus:before {\n content: \"â\";\n}\n.shop-container .glyphicon-cloud:before {\n content: \"â\";\n}\n.shop-container .glyphicon-envelope:before {\n content: \"â\";\n}\n.shop-container .glyphicon-pencil:before {\n content: \"â\";\n}\n.shop-container .glyphicon-glass:before {\n content: \"\\e001\";\n}\n.shop-container .glyphicon-music:before {\n content: \"\\e002\";\n}\n.shop-container .glyphicon-search:before {\n content: \"\\e003\";\n}\n.shop-container .glyphicon-heart:before {\n content: \"\\e005\";\n}\n.shop-container .glyphicon-star:before {\n content: \"\\e006\";\n}\n.shop-container .glyphicon-star-empty:before {\n content: \"\\e007\";\n}\n.shop-container .glyphicon-user:before {\n content: \"\\e008\";\n}\n.shop-container .glyphicon-film:before {\n content: \"\\e009\";\n}\n.shop-container .glyphicon-th-large:before {\n content: \"\\e010\";\n}\n.shop-container .glyphicon-th:before {\n content: \"\\e011\";\n}\n.shop-container .glyphicon-th-list:before {\n content: \"\\e012\";\n}\n.shop-container .glyphicon-ok:before {\n content: \"\\e013\";\n}\n.shop-container .glyphicon-remove:before {\n content: \"\\e014\";\n}\n.shop-container .glyphicon-zoom-in:before {\n content: \"\\e015\";\n}\n.shop-container .glyphicon-zoom-out:before {\n content: \"\\e016\";\n}\n.shop-container .glyphicon-off:before {\n content: \"\\e017\";\n}\n.shop-container .glyphicon-signal:before {\n content: \"\\e018\";\n}\n.shop-container .glyphicon-cog:before {\n content: \"\\e019\";\n}\n.shop-container .glyphicon-trash:before {\n content: \"\\e020\";\n}\n.shop-container .glyphicon-home:before {\n content: \"\\e021\";\n}\n.shop-container .glyphicon-file:before {\n content: \"\\e022\";\n}\n.shop-container .glyphicon-time:before {\n content: \"\\e023\";\n}\n.shop-container .glyphicon-road:before {\n content: \"\\e024\";\n}\n.shop-container .glyphicon-download-alt:before {\n content: \"\\e025\";\n}\n.shop-container .glyphicon-download:before {\n content: \"\\e026\";\n}\n.shop-container .glyphicon-upload:before {\n content: \"\\e027\";\n}\n.shop-container .glyphicon-inbox:before {\n content: \"\\e028\";\n}\n.shop-container .glyphicon-play-circle:before {\n content: \"\\e029\";\n}\n.shop-container .glyphicon-repeat:before {\n content: \"\\e030\";\n}\n.shop-container .glyphicon-refresh:before {\n content: \"\\e031\";\n}\n.shop-container .glyphicon-list-alt:before {\n content: \"\\e032\";\n}\n.shop-container .glyphicon-lock:before {\n content: \"\\e033\";\n}\n.shop-container .glyphicon-flag:before {\n content: \"\\e034\";\n}\n.shop-container .glyphicon-headphones:before {\n content: \"\\e035\";\n}\n.shop-container .glyphicon-volume-off:before {\n content: \"\\e036\";\n}\n.shop-container .glyphicon-volume-down:before {\n content: \"\\e037\";\n}\n.shop-container .glyphicon-volume-up:before {\n content: \"\\e038\";\n}\n.shop-container .glyphicon-qrcode:before {\n content: \"\\e039\";\n}\n.shop-container .glyphicon-barcode:before {\n content: \"\\e040\";\n}\n.shop-container .glyphicon-tag:before {\n content: \"\\e041\";\n}\n.shop-container .glyphicon-tags:before {\n content: \"\\e042\";\n}\n.shop-container .glyphicon-book:before {\n content: \"\\e043\";\n}\n.shop-container .glyphicon-bookmark:before {\n content: \"\\e044\";\n}\n.shop-container .glyphicon-print:before {\n content: \"\\e045\";\n}\n.shop-container .glyphicon-camera:before {\n content: \"\\e046\";\n}\n.shop-container .glyphicon-font:before {\n content: \"\\e047\";\n}\n.shop-container .glyphicon-bold:before {\n content: \"\\e048\";\n}\n.shop-container .glyphicon-italic:before {\n content: \"\\e049\";\n}\n.shop-container .glyphicon-text-height:before {\n content: \"\\e050\";\n}\n.shop-container .glyphicon-text-width:before {\n content: \"\\e051\";\n}\n.shop-container .glyphicon-align-left:before {\n content: \"\\e052\";\n}\n.shop-container .glyphicon-align-center:before {\n content: \"\\e053\";\n}\n.shop-container .glyphicon-align-right:before {\n content: \"\\e054\";\n}\n.shop-container .glyphicon-align-justify:before {\n content: \"\\e055\";\n}\n.shop-container .glyphicon-list:before {\n content: \"\\e056\";\n}\n.shop-container .glyphicon-indent-left:before {\n content: \"\\e057\";\n}\n.shop-container .glyphicon-indent-right:before {\n content: \"\\e058\";\n}\n.shop-container .glyphicon-facetime-video:before {\n content: \"\\e059\";\n}\n.shop-container .glyphicon-picture:before {\n content: \"\\e060\";\n}\n.shop-container .glyphicon-map-marker:before {\n content: \"\\e062\";\n}\n.shop-container .glyphicon-adjust:before {\n content: \"\\e063\";\n}\n.shop-container .glyphicon-tint:before {\n content: \"\\e064\";\n}\n.shop-container .glyphicon-edit:before {\n content: \"\\e065\";\n}\n.shop-container .glyphicon-share:before {\n content: \"\\e066\";\n}\n.shop-container .glyphicon-check:before {\n content: \"\\e067\";\n}\n.shop-container .glyphicon-move:before {\n content: \"\\e068\";\n}\n.shop-container .glyphicon-step-backward:before {\n content: \"\\e069\";\n}\n.shop-container .glyphicon-fast-backward:before {\n content: \"\\e070\";\n}\n.shop-container .glyphicon-backward:before {\n content: \"\\e071\";\n}\n.shop-container .glyphicon-play:before {\n content: \"\\e072\";\n}\n.shop-container .glyphicon-pause:before {\n content: \"\\e073\";\n}\n.shop-container .glyphicon-stop:before {\n content: \"\\e074\";\n}\n.shop-container .glyphicon-forward:before {\n content: \"\\e075\";\n}\n.shop-container .glyphicon-fast-forward:before {\n content: \"\\e076\";\n}\n.shop-container .glyphicon-step-forward:before {\n content: \"\\e077\";\n}\n.shop-container .glyphicon-eject:before {\n content: \"\\e078\";\n}\n.shop-container .glyphicon-chevron-left:before {\n content: \"\\e079\";\n}\n.shop-container .glyphicon-chevron-right:before {\n content: \"\\e080\";\n}\n.shop-container .glyphicon-plus-sign:before {\n content: \"\\e081\";\n}\n.shop-container .glyphicon-minus-sign:before {\n content: \"\\e082\";\n}\n.shop-container .glyphicon-remove-sign:before {\n content: \"\\e083\";\n}\n.shop-container .glyphicon-ok-sign:before {\n content: \"\\e084\";\n}\n.shop-container .glyphicon-question-sign:before {\n content: \"\\e085\";\n}\n.shop-container .glyphicon-info-sign:before {\n content: \"\\e086\";\n}\n.shop-container .glyphicon-screenshot:before {\n content: \"\\e087\";\n}\n.shop-container .glyphicon-remove-circle:before {\n content: \"\\e088\";\n}\n.shop-container .glyphicon-ok-circle:before {\n content: \"\\e089\";\n}\n.shop-container .glyphicon-ban-circle:before {\n content: \"\\e090\";\n}\n.shop-container .glyphicon-arrow-left:before {\n content: \"\\e091\";\n}\n.shop-container .glyphicon-arrow-right:before {\n content: \"\\e092\";\n}\n.shop-container .glyphicon-arrow-up:before {\n content: \"\\e093\";\n}\n.shop-container .glyphicon-arrow-down:before {\n content: \"\\e094\";\n}\n.shop-container .glyphicon-share-alt:before {\n content: \"\\e095\";\n}\n.shop-container .glyphicon-resize-full:before {\n content: \"\\e096\";\n}\n.shop-container .glyphicon-resize-small:before {\n content: \"\\e097\";\n}\n.shop-container .glyphicon-exclamation-sign:before {\n content: \"\\e101\";\n}\n.shop-container .glyphicon-gift:before {\n content: \"\\e102\";\n}\n.shop-container .glyphicon-leaf:before {\n content: \"\\e103\";\n}\n.shop-container .glyphicon-fire:before {\n content: \"\\e104\";\n}\n.shop-container .glyphicon-eye-open:before {\n content: \"\\e105\";\n}\n.shop-container .glyphicon-eye-close:before {\n content: \"\\e106\";\n}\n.shop-container .glyphicon-warning-sign:before {\n content: \"\\e107\";\n}\n.shop-container .glyphicon-plane:before {\n content: \"\\e108\";\n}\n.shop-container .glyphicon-calendar:before {\n content: \"\\e109\";\n}\n.shop-container .glyphicon-random:before {\n content: \"\\e110\";\n}\n.shop-container .glyphicon-comment:before {\n content: \"\\e111\";\n}\n.shop-container .glyphicon-magnet:before {\n content: \"\\e112\";\n}\n.shop-container .glyphicon-chevron-up:before {\n content: \"\\e113\";\n}\n.shop-container .glyphicon-chevron-down:before {\n content: \"\\e114\";\n}\n.shop-container .glyphicon-retweet:before {\n content: \"\\e115\";\n}\n.shop-container .glyphicon-shopping-cart:before {\n content: \"\\e116\";\n}\n.shop-container .glyphicon-folder-close:before {\n content: \"\\e117\";\n}\n.shop-container .glyphicon-folder-open:before {\n content: \"\\e118\";\n}\n.shop-container .glyphicon-resize-vertical:before {\n content: \"\\e119\";\n}\n.shop-container .glyphicon-resize-horizontal:before {\n content: \"\\e120\";\n}\n.shop-container .glyphicon-hdd:before {\n content: \"\\e121\";\n}\n.shop-container .glyphicon-bullhorn:before {\n content: \"\\e122\";\n}\n.shop-container .glyphicon-bell:before {\n content: \"\\e123\";\n}\n.shop-container .glyphicon-certificate:before {\n content: \"\\e124\";\n}\n.shop-container .glyphicon-thumbs-up:before {\n content: \"\\e125\";\n}\n.shop-container .glyphicon-thumbs-down:before {\n content: \"\\e126\";\n}\n.shop-container .glyphicon-hand-right:before {\n content: \"\\e127\";\n}\n.shop-container .glyphicon-hand-left:before {\n content: \"\\e128\";\n}\n.shop-container .glyphicon-hand-up:before {\n content: \"\\e129\";\n}\n.shop-container .glyphicon-hand-down:before {\n content: \"\\e130\";\n}\n.shop-container .glyphicon-circle-arrow-right:before {\n content: \"\\e131\";\n}\n.shop-container .glyphicon-circle-arrow-left:before {\n content: \"\\e132\";\n}\n.shop-container .glyphicon-circle-arrow-up:before {\n content: \"\\e133\";\n}\n.shop-container .glyphicon-circle-arrow-down:before {\n content: \"\\e134\";\n}\n.shop-container .glyphicon-globe:before {\n content: \"\\e135\";\n}\n.shop-container .glyphicon-wrench:before {\n content: \"\\e136\";\n}\n.shop-container .glyphicon-tasks:before {\n content: \"\\e137\";\n}\n.shop-container .glyphicon-filter:before {\n content: \"\\e138\";\n}\n.shop-container .glyphicon-briefcase:before {\n content: \"\\e139\";\n}\n.shop-container .glyphicon-fullscreen:before {\n content: \"\\e140\";\n}\n.shop-container .glyphicon-dashboard:before {\n content: \"\\e141\";\n}\n.shop-container .glyphicon-paperclip:before {\n content: \"\\e142\";\n}\n.shop-container .glyphicon-heart-empty:before {\n content: \"\\e143\";\n}\n.shop-container .glyphicon-link:before {\n content: \"\\e144\";\n}\n.shop-container .glyphicon-phone:before {\n content: \"\\e145\";\n}\n.shop-container .glyphicon-pushpin:before {\n content: \"\\e146\";\n}\n.shop-container .glyphicon-usd:before {\n content: \"\\e148\";\n}\n.shop-container .glyphicon-gbp:before {\n content: \"\\e149\";\n}\n.shop-container .glyphicon-sort:before {\n content: \"\\e150\";\n}\n.shop-container .glyphicon-sort-by-alphabet:before {\n content: \"\\e151\";\n}\n.shop-container .glyphicon-sort-by-alphabet-alt:before {\n content: \"\\e152\";\n}\n.shop-container .glyphicon-sort-by-order:before {\n content: \"\\e153\";\n}\n.shop-container .glyphicon-sort-by-order-alt:before {\n content: \"\\e154\";\n}\n.shop-container .glyphicon-sort-by-attributes:before {\n content: \"\\e155\";\n}\n.shop-container .glyphicon-sort-by-attributes-alt:before {\n content: \"\\e156\";\n}\n.shop-container .glyphicon-unchecked:before {\n content: \"\\e157\";\n}\n.shop-container .glyphicon-expand:before {\n content: \"\\e158\";\n}\n.shop-container .glyphicon-collapse-down:before {\n content: \"\\e159\";\n}\n.shop-container .glyphicon-collapse-up:before {\n content: \"\\e160\";\n}\n.shop-container .glyphicon-log-in:before {\n content: \"\\e161\";\n}\n.shop-container .glyphicon-flash:before {\n content: \"\\e162\";\n}\n.shop-container .glyphicon-log-out:before {\n content: \"\\e163\";\n}\n.shop-container .glyphicon-new-window:before {\n content: \"\\e164\";\n}\n.shop-container .glyphicon-record:before {\n content: \"\\e165\";\n}\n.shop-container .glyphicon-save:before {\n content: \"\\e166\";\n}\n.shop-container .glyphicon-open:before {\n content: \"\\e167\";\n}\n.shop-container .glyphicon-saved:before {\n content: \"\\e168\";\n}\n.shop-container .glyphicon-import:before {\n content: \"\\e169\";\n}\n.shop-container .glyphicon-export:before {\n content: \"\\e170\";\n}\n.shop-container .glyphicon-send:before {\n content: \"\\e171\";\n}\n.shop-container .glyphicon-floppy-disk:before {\n content: \"\\e172\";\n}\n.shop-container .glyphicon-floppy-saved:before {\n content: \"\\e173\";\n}\n.shop-container .glyphicon-floppy-remove:before {\n content: \"\\e174\";\n}\n.shop-container .glyphicon-floppy-save:before {\n content: \"\\e175\";\n}\n.shop-container .glyphicon-floppy-open:before {\n content: \"\\e176\";\n}\n.shop-container .glyphicon-credit-card:before {\n content: \"\\e177\";\n}\n.shop-container .glyphicon-transfer:before {\n content: \"\\e178\";\n}\n.shop-container .glyphicon-cutlery:before {\n content: \"\\e179\";\n}\n.shop-container .glyphicon-header:before {\n content: \"\\e180\";\n}\n.shop-container .glyphicon-compressed:before {\n content: \"\\e181\";\n}\n.shop-container .glyphicon-earphone:before {\n content: \"\\e182\";\n}\n.shop-container .glyphicon-phone-alt:before {\n content: \"\\e183\";\n}\n.shop-container .glyphicon-tower:before {\n content: \"\\e184\";\n}\n.shop-container .glyphicon-stats:before {\n content: \"\\e185\";\n}\n.shop-container .glyphicon-sd-video:before {\n content: \"\\e186\";\n}\n.shop-container .glyphicon-hd-video:before {\n content: \"\\e187\";\n}\n.shop-container .glyphicon-subtitles:before {\n content: \"\\e188\";\n}\n.shop-container .glyphicon-sound-stereo:before {\n content: \"\\e189\";\n}\n.shop-container .glyphicon-sound-dolby:before {\n content: \"\\e190\";\n}\n.shop-container .glyphicon-sound-5-1:before {\n content: \"\\e191\";\n}\n.shop-container .glyphicon-sound-6-1:before {\n content: \"\\e192\";\n}\n.shop-container .glyphicon-sound-7-1:before {\n content: \"\\e193\";\n}\n.shop-container .glyphicon-copyright-mark:before {\n content: \"\\e194\";\n}\n.shop-container .glyphicon-registration-mark:before {\n content: \"\\e195\";\n}\n.shop-container .glyphicon-cloud-download:before {\n content: \"\\e197\";\n}\n.shop-container .glyphicon-cloud-upload:before {\n content: \"\\e198\";\n}\n.shop-container .glyphicon-tree-conifer:before {\n content: \"\\e199\";\n}\n.shop-container .glyphicon-tree-deciduous:before {\n content: \"\\e200\";\n}\n.shop-container .glyphicon-cd:before {\n content: \"\\e201\";\n}\n.shop-container .glyphicon-save-file:before {\n content: \"\\e202\";\n}\n.shop-container .glyphicon-open-file:before {\n content: \"\\e203\";\n}\n.shop-container .glyphicon-level-up:before {\n content: \"\\e204\";\n}\n.shop-container .glyphicon-copy:before {\n content: \"\\e205\";\n}\n.shop-container .glyphicon-paste:before {\n content: \"\\e206\";\n}\n.shop-container .glyphicon-alert:before {\n content: \"\\e209\";\n}\n.shop-container .glyphicon-equalizer:before {\n content: \"\\e210\";\n}\n.shop-container .glyphicon-king:before {\n content: \"\\e211\";\n}\n.shop-container .glyphicon-queen:before {\n content: \"\\e212\";\n}\n.shop-container .glyphicon-pawn:before {\n content: \"\\e213\";\n}\n.shop-container .glyphicon-bishop:before {\n content: \"\\e214\";\n}\n.shop-container .glyphicon-knight:before {\n content: \"\\e215\";\n}\n.shop-container .glyphicon-baby-formula:before {\n content: \"\\e216\";\n}\n.shop-container .glyphicon-tent:before {\n content: \"âº\";\n}\n.shop-container .glyphicon-blackboard:before {\n content: \"\\e218\";\n}\n.shop-container .glyphicon-bed:before {\n content: \"\\e219\";\n}\n.shop-container .glyphicon-apple:before {\n content: \"\\f8ff\";\n}\n.shop-container .glyphicon-erase:before {\n content: \"\\e221\";\n}\n.shop-container .glyphicon-hourglass:before {\n content: \"â\";\n}\n.shop-container .glyphicon-lamp:before {\n content: \"\\e223\";\n}\n.shop-container .glyphicon-duplicate:before {\n content: \"\\e224\";\n}\n.shop-container .glyphicon-piggy-bank:before {\n content: \"\\e225\";\n}\n.shop-container .glyphicon-scissors:before {\n content: \"\\e226\";\n}\n.shop-container .glyphicon-bitcoin:before {\n content: \"\\e227\";\n}\n.shop-container .glyphicon-btc:before {\n content: \"\\e227\";\n}\n.shop-container .glyphicon-xbt:before {\n content: \"\\e227\";\n}\n.shop-container .glyphicon-yen:before {\n content: \"Â¥\";\n}\n.shop-container .glyphicon-jpy:before {\n content: \"Â¥\";\n}\n.shop-container .glyphicon-ruble:before {\n content: \"â½\";\n}\n.shop-container .glyphicon-rub:before {\n content: \"â½\";\n}\n.shop-container .glyphicon-scale:before {\n content: \"\\e230\";\n}\n.shop-container .glyphicon-ice-lolly:before {\n content: \"\\e231\";\n}\n.shop-container .glyphicon-ice-lolly-tasted:before {\n content: \"\\e232\";\n}\n.shop-container .glyphicon-education:before {\n content: \"\\e233\";\n}\n.shop-container .glyphicon-option-horizontal:before {\n content: \"\\e234\";\n}\n.shop-container .glyphicon-option-vertical:before {\n content: \"\\e235\";\n}\n.shop-container .glyphicon-menu-hamburger:before {\n content: \"\\e236\";\n}\n.shop-container .glyphicon-modal-window:before {\n content: \"\\e237\";\n}\n.shop-container .glyphicon-oil:before {\n content: \"\\e238\";\n}\n.shop-container .glyphicon-grain:before {\n content: \"\\e239\";\n}\n.shop-container .glyphicon-sunglasses:before {\n content: \"\\e240\";\n}\n.shop-container .glyphicon-text-size:before {\n content: \"\\e241\";\n}\n.shop-container .glyphicon-text-color:before {\n content: \"\\e242\";\n}\n.shop-container .glyphicon-text-background:before {\n content: \"\\e243\";\n}\n.shop-container .glyphicon-object-align-top:before {\n content: \"\\e244\";\n}\n.shop-container .glyphicon-object-align-bottom:before {\n content: \"\\e245\";\n}\n.shop-container .glyphicon-object-align-horizontal:before {\n content: \"\\e246\";\n}\n.shop-container .glyphicon-object-align-left:before {\n content: \"\\e247\";\n}\n.shop-container .glyphicon-object-align-vertical:before {\n content: \"\\e248\";\n}\n.shop-container .glyphicon-object-align-right:before {\n content: \"\\e249\";\n}\n.shop-container .glyphicon-triangle-right:before {\n content: \"\\e250\";\n}\n.shop-container .glyphicon-triangle-left:before {\n content: \"\\e251\";\n}\n.shop-container .glyphicon-triangle-bottom:before {\n content: \"\\e252\";\n}\n.shop-container .glyphicon-triangle-top:before {\n content: \"\\e253\";\n}\n.shop-container .glyphicon-console:before {\n content: \"\\e254\";\n}\n.shop-container .glyphicon-superscript:before {\n content: \"\\e255\";\n}\n.shop-container .glyphicon-subscript:before {\n content: \"\\e256\";\n}\n.shop-container .glyphicon-menu-left:before {\n content: \"\\e257\";\n}\n.shop-container .glyphicon-menu-right:before {\n content: \"\\e258\";\n}\n.shop-container .glyphicon-menu-down:before {\n content: \"\\e259\";\n}\n.shop-container .glyphicon-menu-up:before {\n content: \"\\e260\";\n}\n.shop-container * {\n box-sizing: border-box;\n}\n.shop-container *:before,\n.shop-container *:after {\n box-sizing: border-box;\n}\n.shop-container html {\n font-size: 10px;\n -webkit-tap-highlight-color: rgba(0, 0, 0, 0);\n}\n.shop-container body {\n font-family: \"Helvetica Neue\", Helvetica, Arial, sans-serif;\n font-size: 14px;\n line-height: 1.428571429;\n color: #333333;\n background-color: #fff;\n}\n.shop-container input,\n.shop-container button,\n.shop-container select,\n.shop-container textarea {\n font-family: inherit;\n font-size: inherit;\n line-height: inherit;\n}\n.shop-container a {\n color: rgb(51.4340909091, 122.2772727273, 183.4159090909);\n text-decoration: none;\n}\n.shop-container a:hover, .shop-container a:focus {\n color: rgb(34.6799586777, 82.4466942149, 123.6700413223);\n text-decoration: underline;\n}\n.shop-container a:focus {\n outline: 5px auto -webkit-focus-ring-color;\n outline-offset: -2px;\n}\n.shop-container figure {\n margin: 0;\n}\n.shop-container img {\n vertical-align: middle;\n}\n.shop-container .img-responsive {\n display: block;\n max-width: 100%;\n height: auto;\n}\n.shop-container .img-rounded {\n border-radius: 6px;\n}\n.shop-container .img-thumbnail {\n padding: 4px;\n line-height: 1.428571429;\n background-color: #fff;\n border: 1px solid #ddd;\n border-radius: 4px;\n transition: all 0.2s ease-in-out;\n display: inline-block;\n max-width: 100%;\n height: auto;\n}\n.shop-container .img-circle {\n border-radius: 50%;\n}\n.shop-container hr {\n margin-top: 20px;\n margin-bottom: 20px;\n border: 0;\n border-top: 1px solid rgb(238.425, 238.425, 238.425);\n}\n.shop-container .sr-only {\n position: absolute;\n width: 1px;\n height: 1px;\n padding: 0;\n margin: -1px;\n overflow: hidden;\n clip: rect(0, 0, 0, 0);\n border: 0;\n}\n.shop-container .sr-only-focusable:active, .shop-container .sr-only-focusable:focus {\n position: static;\n width: auto;\n height: auto;\n margin: 0;\n overflow: visible;\n clip: auto;\n}\n.shop-container [role=button] {\n cursor: pointer;\n}\n.shop-container h1, .shop-container h2, .shop-container h3, .shop-container h4, .shop-container h5, .shop-container h6,\n.shop-container .h1, .shop-container .h2, .shop-container .h3, .shop-container .h4, .shop-container .h5, .shop-container .h6 {\n font-family: inherit;\n font-weight: 500;\n line-height: 1.1;\n color: inherit;\n}\n.shop-container h1 small,\n.shop-container h1 .small, .shop-container h2 small,\n.shop-container h2 .small, .shop-container h3 small,\n.shop-container h3 .small, .shop-container h4 small,\n.shop-container h4 .small, .shop-container h5 small,\n.shop-container h5 .small, .shop-container h6 small,\n.shop-container h6 .small,\n.shop-container .h1 small,\n.shop-container .h1 .small, .shop-container .h2 small,\n.shop-container .h2 .small, .shop-container .h3 small,\n.shop-container .h3 .small, .shop-container .h4 small,\n.shop-container .h4 .small, .shop-container .h5 small,\n.shop-container .h5 .small, .shop-container .h6 small,\n.shop-container .h6 .small {\n font-weight: 400;\n line-height: 1;\n color: rgb(119.085, 119.085, 119.085);\n}\n.shop-container h1, .shop-container .h1,\n.shop-container h2, .shop-container .h2,\n.shop-container h3, .shop-container .h3 {\n margin-top: 20px;\n margin-bottom: 10px;\n}\n.shop-container h1 small,\n.shop-container h1 .small, .shop-container .h1 small,\n.shop-container .h1 .small,\n.shop-container h2 small,\n.shop-container h2 .small, .shop-container .h2 small,\n.shop-container .h2 .small,\n.shop-container h3 small,\n.shop-container h3 .small, .shop-container .h3 small,\n.shop-container .h3 .small {\n font-size: 65%;\n}\n.shop-container h4, .shop-container .h4,\n.shop-container h5, .shop-container .h5,\n.shop-container h6, .shop-container .h6 {\n margin-top: 10px;\n margin-bottom: 10px;\n}\n.shop-container h4 small,\n.shop-container h4 .small, .shop-container .h4 small,\n.shop-container .h4 .small,\n.shop-container h5 small,\n.shop-container h5 .small, .shop-container .h5 small,\n.shop-container .h5 .small,\n.shop-container h6 small,\n.shop-container h6 .small, .shop-container .h6 small,\n.shop-container .h6 .small {\n font-size: 75%;\n}\n.shop-container h1, .shop-container .h1 {\n font-size: 36px;\n}\n.shop-container h2, .shop-container .h2 {\n font-size: 30px;\n}\n.shop-container h3, .shop-container .h3 {\n font-size: 24px;\n}\n.shop-container h4, .shop-container .h4 {\n font-size: 18px;\n}\n.shop-container h5, .shop-container .h5 {\n font-size: 14px;\n}\n.shop-container h6, .shop-container .h6 {\n font-size: 12px;\n}\n.shop-container p {\n margin: 0 0 10px;\n}\n.shop-container .lead {\n margin-bottom: 20px;\n font-size: 16px;\n font-weight: 300;\n line-height: 1.4;\n}\n@media (min-width: 768px) {\n .shop-container .lead {\n font-size: 21px;\n }\n}\n.shop-container small,\n.shop-container .small {\n font-size: 85%;\n}\n.shop-container mark,\n.shop-container .mark {\n padding: 0.2em;\n background-color: #fcf8e3;\n}\n.shop-container .text-left {\n text-align: left;\n}\n.shop-container .text-right {\n text-align: right;\n}\n.shop-container .text-center {\n text-align: center;\n}\n.shop-container .text-justify {\n text-align: justify;\n}\n.shop-container .text-nowrap {\n white-space: nowrap;\n}\n.shop-container .text-lowercase {\n text-transform: lowercase;\n}\n.shop-container .text-uppercase, .shop-container .initialism {\n text-transform: uppercase;\n}\n.shop-container .text-capitalize {\n text-transform: capitalize;\n}\n.shop-container .text-muted {\n color: rgb(119.085, 119.085, 119.085);\n}\n.shop-container .text-primary {\n color: rgb(51.4340909091, 122.2772727273, 183.4159090909);\n}\n.shop-container a.text-primary:hover,\n.shop-container a.text-primary:focus {\n color: rgb(40.2646694215, 95.723553719, 143.5853305785);\n}\n.shop-container .text-success {\n color: #3c763d;\n}\n.shop-container a.text-success:hover,\n.shop-container a.text-success:focus {\n color: rgb(42.808988764, 84.191011236, 43.5224719101);\n}\n.shop-container .text-info {\n color: #31708f;\n}\n.shop-container a.text-info:hover,\n.shop-container a.text-info:focus {\n color: rgb(35.984375, 82.25, 105.015625);\n}\n.shop-container .text-warning {\n color: #8a6d3b;\n}\n.shop-container a.text-warning:hover,\n.shop-container a.text-warning:focus {\n color: rgb(102.2741116751, 80.7817258883, 43.7258883249);\n}\n.shop-container .text-danger {\n color: #a94442;\n}\n.shop-container a.text-danger:hover,\n.shop-container a.text-danger:focus {\n color: rgb(132.3234042553, 53.2425531915, 51.6765957447);\n}\n.shop-container .bg-primary {\n color: #fff;\n}\n.shop-container .bg-primary {\n background-color: rgb(51.4340909091, 122.2772727273, 183.4159090909);\n}\n.shop-container a.bg-primary:hover,\n.shop-container a.bg-primary:focus {\n background-color: rgb(40.2646694215, 95.723553719, 143.5853305785);\n}\n.shop-container .bg-success {\n background-color: #dff0d8;\n}\n.shop-container a.bg-success:hover,\n.shop-container a.bg-success:focus {\n background-color: rgb(192.7777777778, 225.8333333333, 179.1666666667);\n}\n.shop-container .bg-info {\n background-color: #d9edf7;\n}\n.shop-container a.bg-info:hover,\n.shop-container a.bg-info:focus {\n background-color: rgb(174.8695652174, 217.0434782609, 238.1304347826);\n}\n.shop-container .bg-warning {\n background-color: #fcf8e3;\n}\n.shop-container a.bg-warning:hover,\n.shop-container a.bg-warning:focus {\n background-color: rgb(247.064516129, 236.4838709677, 180.935483871);\n}\n.shop-container .bg-danger {\n background-color: #f2dede;\n}\n.shop-container a.bg-danger:hover,\n.shop-container a.bg-danger:focus {\n background-color: rgb(227.5869565217, 185.4130434783, 185.4130434783);\n}\n.shop-container .page-header {\n padding-bottom: 9px;\n margin: 40px 0 20px;\n border-bottom: 1px solid rgb(238.425, 238.425, 238.425);\n}\n.shop-container ul,\n.shop-container ol {\n margin-top: 0;\n margin-bottom: 10px;\n}\n.shop-container ul ul,\n.shop-container ul ol,\n.shop-container ol ul,\n.shop-container ol ol {\n margin-bottom: 0;\n}\n.shop-container .list-unstyled {\n padding-left: 0;\n list-style: none;\n}\n.shop-container .list-inline {\n padding-left: 0;\n list-style: none;\n margin-left: -5px;\n}\n.shop-container .list-inline > li {\n display: inline-block;\n padding-right: 5px;\n padding-left: 5px;\n}\n.shop-container dl {\n margin-top: 0;\n margin-bottom: 20px;\n}\n.shop-container dt,\n.shop-container dd {\n line-height: 1.428571429;\n}\n.shop-container dt {\n font-weight: 700;\n}\n.shop-container dd {\n margin-left: 0;\n}\n.shop-container .dl-horizontal dd:before, .shop-container .dl-horizontal dd:after {\n display: table;\n content: \" \";\n}\n.shop-container .dl-horizontal dd:after {\n clear: both;\n}\n@media (min-width: 768px) {\n .shop-container .dl-horizontal dt {\n float: left;\n width: 160px;\n clear: left;\n text-align: right;\n overflow: hidden;\n text-overflow: ellipsis;\n white-space: nowrap;\n }\n .shop-container .dl-horizontal dd {\n margin-left: 180px;\n }\n}\n.shop-container abbr[title],\n.shop-container abbr[data-original-title] {\n cursor: help;\n}\n.shop-container .initialism {\n font-size: 90%;\n}\n.shop-container blockquote {\n padding: 10px 20px;\n margin: 0 0 20px;\n font-size: 17.5px;\n border-left: 5px solid rgb(238.425, 238.425, 238.425);\n}\n.shop-container blockquote p:last-child,\n.shop-container blockquote ul:last-child,\n.shop-container blockquote ol:last-child {\n margin-bottom: 0;\n}\n.shop-container blockquote footer,\n.shop-container blockquote small,\n.shop-container blockquote .small {\n display: block;\n font-size: 80%;\n line-height: 1.428571429;\n color: rgb(119.085, 119.085, 119.085);\n}\n.shop-container blockquote footer:before,\n.shop-container blockquote small:before,\n.shop-container blockquote .small:before {\n content: \"â \";\n}\n.shop-container .blockquote-reverse,\n.shop-container blockquote.pull-right {\n padding-right: 15px;\n padding-left: 0;\n text-align: right;\n border-right: 5px solid rgb(238.425, 238.425, 238.425);\n border-left: 0;\n}\n.shop-container .blockquote-reverse footer:before,\n.shop-container .blockquote-reverse small:before,\n.shop-container .blockquote-reverse .small:before,\n.shop-container blockquote.pull-right footer:before,\n.shop-container blockquote.pull-right small:before,\n.shop-container blockquote.pull-right .small:before {\n content: \"\";\n}\n.shop-container .blockquote-reverse footer:after,\n.shop-container .blockquote-reverse small:after,\n.shop-container .blockquote-reverse .small:after,\n.shop-container blockquote.pull-right footer:after,\n.shop-container blockquote.pull-right small:after,\n.shop-container blockquote.pull-right .small:after {\n content: \" â\";\n}\n.shop-container address {\n margin-bottom: 20px;\n font-style: normal;\n line-height: 1.428571429;\n}\n.shop-container code,\n.shop-container kbd,\n.shop-container pre,\n.shop-container samp {\n font-family: Menlo, Monaco, Consolas, \"Courier New\", monospace;\n}\n.shop-container code {\n padding: 2px 4px;\n font-size: 90%;\n color: #c7254e;\n background-color: #f9f2f4;\n border-radius: 4px;\n}\n.shop-container kbd {\n padding: 2px 4px;\n font-size: 90%;\n color: #fff;\n background-color: #333;\n border-radius: 3px;\n box-shadow: inset 0 -1px 0 rgba(0, 0, 0, 0.25);\n}\n.shop-container kbd kbd {\n padding: 0;\n font-size: 100%;\n font-weight: 700;\n box-shadow: none;\n}\n.shop-container pre {\n display: block;\n padding: 9.5px;\n margin: 0 0 10px;\n font-size: 13px;\n line-height: 1.428571429;\n color: #333333;\n word-break: break-all;\n word-wrap: break-word;\n background-color: #f5f5f5;\n border: 1px solid #ccc;\n border-radius: 4px;\n}\n.shop-container pre code {\n padding: 0;\n font-size: inherit;\n color: inherit;\n white-space: pre-wrap;\n background-color: transparent;\n border-radius: 0;\n}\n.shop-container .pre-scrollable {\n max-height: 340px;\n overflow-y: scroll;\n}\n.shop-container .container {\n padding-right: 15px;\n padding-left: 15px;\n margin-right: auto;\n margin-left: auto;\n}\n.shop-container .container:before, .shop-container .container:after {\n display: table;\n content: \" \";\n}\n.shop-container .container:after {\n clear: both;\n}\n@media (min-width: 768px) {\n .shop-container .container {\n width: 750px;\n }\n}\n@media (min-width: 992px) {\n .shop-container .container {\n width: 970px;\n }\n}\n@media (min-width: 1200px) {\n .shop-container .container {\n width: 1170px;\n }\n}\n.shop-container .container-fluid {\n padding-right: 15px;\n padding-left: 15px;\n margin-right: auto;\n margin-left: auto;\n}\n.shop-container .container-fluid:before, .shop-container .container-fluid:after {\n display: table;\n content: \" \";\n}\n.shop-container .container-fluid:after {\n clear: both;\n}\n.shop-container .row {\n margin-right: -15px;\n margin-left: -15px;\n}\n.shop-container .row:before, .shop-container .row:after {\n display: table;\n content: \" \";\n}\n.shop-container .row:after {\n clear: both;\n}\n.shop-container .row-no-gutters {\n margin-right: 0;\n margin-left: 0;\n}\n.shop-container .row-no-gutters [class*=col-] {\n padding-right: 0;\n padding-left: 0;\n}\n.shop-container .col-xs-1, .shop-container .col-sm-1, .shop-container .col-md-1, .shop-container .col-lg-1, .shop-container .col-xs-2, .shop-container .col-sm-2, .shop-container .col-md-2, .shop-container .col-lg-2, .shop-container .col-xs-3, .shop-container .col-sm-3, .shop-container .col-md-3, .shop-container .col-lg-3, .shop-container .col-xs-4, .shop-container .col-sm-4, .shop-container .col-md-4, .shop-container .col-lg-4, .shop-container .col-xs-5, .shop-container .col-sm-5, .shop-container .col-md-5, .shop-container .col-lg-5, .shop-container .col-xs-6, .shop-container .col-sm-6, .shop-container .col-md-6, .shop-container .col-lg-6, .shop-container .col-xs-7, .shop-container .col-sm-7, .shop-container .col-md-7, .shop-container .col-lg-7, .shop-container .col-xs-8, .shop-container .col-sm-8, .shop-container .col-md-8, .shop-container .col-lg-8, .shop-container .col-xs-9, .shop-container .col-sm-9, .shop-container .col-md-9, .shop-container .col-lg-9, .shop-container .col-xs-10, .shop-container .col-sm-10, .shop-container .col-md-10, .shop-container .col-lg-10, .shop-container .col-xs-11, .shop-container .col-sm-11, .shop-container .col-md-11, .shop-container .col-lg-11, .shop-container .col-xs-12, .shop-container .col-sm-12, .shop-container .col-md-12, .shop-container .col-lg-12 {\n position: relative;\n min-height: 1px;\n padding-right: 15px;\n padding-left: 15px;\n}\n.shop-container .col-xs-1, .shop-container .col-xs-2, .shop-container .col-xs-3, .shop-container .col-xs-4, .shop-container .col-xs-5, .shop-container .col-xs-6, .shop-container .col-xs-7, .shop-container .col-xs-8, .shop-container .col-xs-9, .shop-container .col-xs-10, .shop-container .col-xs-11, .shop-container .col-xs-12 {\n float: left;\n}\n.shop-container .col-xs-1 {\n width: 8.3333333333%;\n}\n.shop-container .col-xs-2 {\n width: 16.6666666667%;\n}\n.shop-container .col-xs-3 {\n width: 25%;\n}\n.shop-container .col-xs-4 {\n width: 33.3333333333%;\n}\n.shop-container .col-xs-5 {\n width: 41.6666666667%;\n}\n.shop-container .col-xs-6 {\n width: 50%;\n}\n.shop-container .col-xs-7 {\n width: 58.3333333333%;\n}\n.shop-container .col-xs-8 {\n width: 66.6666666667%;\n}\n.shop-container .col-xs-9 {\n width: 75%;\n}\n.shop-container .col-xs-10 {\n width: 83.3333333333%;\n}\n.shop-container .col-xs-11 {\n width: 91.6666666667%;\n}\n.shop-container .col-xs-12 {\n width: 100%;\n}\n.shop-container .col-xs-pull-0 {\n right: auto;\n}\n.shop-container .col-xs-pull-1 {\n right: 8.3333333333%;\n}\n.shop-container .col-xs-pull-2 {\n right: 16.6666666667%;\n}\n.shop-container .col-xs-pull-3 {\n right: 25%;\n}\n.shop-container .col-xs-pull-4 {\n right: 33.3333333333%;\n}\n.shop-container .col-xs-pull-5 {\n right: 41.6666666667%;\n}\n.shop-container .col-xs-pull-6 {\n right: 50%;\n}\n.shop-container .col-xs-pull-7 {\n right: 58.3333333333%;\n}\n.shop-container .col-xs-pull-8 {\n right: 66.6666666667%;\n}\n.shop-container .col-xs-pull-9 {\n right: 75%;\n}\n.shop-container .col-xs-pull-10 {\n right: 83.3333333333%;\n}\n.shop-container .col-xs-pull-11 {\n right: 91.6666666667%;\n}\n.shop-container .col-xs-pull-12 {\n right: 100%;\n}\n.shop-container .col-xs-push-0 {\n left: auto;\n}\n.shop-container .col-xs-push-1 {\n left: 8.3333333333%;\n}\n.shop-container .col-xs-push-2 {\n left: 16.6666666667%;\n}\n.shop-container .col-xs-push-3 {\n left: 25%;\n}\n.shop-container .col-xs-push-4 {\n left: 33.3333333333%;\n}\n.shop-container .col-xs-push-5 {\n left: 41.6666666667%;\n}\n.shop-container .col-xs-push-6 {\n left: 50%;\n}\n.shop-container .col-xs-push-7 {\n left: 58.3333333333%;\n}\n.shop-container .col-xs-push-8 {\n left: 66.6666666667%;\n}\n.shop-container .col-xs-push-9 {\n left: 75%;\n}\n.shop-container .col-xs-push-10 {\n left: 83.3333333333%;\n}\n.shop-container .col-xs-push-11 {\n left: 91.6666666667%;\n}\n.shop-container .col-xs-push-12 {\n left: 100%;\n}\n.shop-container .col-xs-offset-0 {\n margin-left: 0%;\n}\n.shop-container .col-xs-offset-1 {\n margin-left: 8.3333333333%;\n}\n.shop-container .col-xs-offset-2 {\n margin-left: 16.6666666667%;\n}\n.shop-container .col-xs-offset-3 {\n margin-left: 25%;\n}\n.shop-container .col-xs-offset-4 {\n margin-left: 33.3333333333%;\n}\n.shop-container .col-xs-offset-5 {\n margin-left: 41.6666666667%;\n}\n.shop-container .col-xs-offset-6 {\n margin-left: 50%;\n}\n.shop-container .col-xs-offset-7 {\n margin-left: 58.3333333333%;\n}\n.shop-container .col-xs-offset-8 {\n margin-left: 66.6666666667%;\n}\n.shop-container .col-xs-offset-9 {\n margin-left: 75%;\n}\n.shop-container .col-xs-offset-10 {\n margin-left: 83.3333333333%;\n}\n.shop-container .col-xs-offset-11 {\n margin-left: 91.6666666667%;\n}\n.shop-container .col-xs-offset-12 {\n margin-left: 100%;\n}\n@media (min-width: 768px) {\n .shop-container .col-sm-1, .shop-container .col-sm-2, .shop-container .col-sm-3, .shop-container .col-sm-4, .shop-container .col-sm-5, .shop-container .col-sm-6, .shop-container .col-sm-7, .shop-container .col-sm-8, .shop-container .col-sm-9, .shop-container .col-sm-10, .shop-container .col-sm-11, .shop-container .col-sm-12 {\n float: left;\n }\n .shop-container .col-sm-1 {\n width: 8.3333333333%;\n }\n .shop-container .col-sm-2 {\n width: 16.6666666667%;\n }\n .shop-container .col-sm-3 {\n width: 25%;\n }\n .shop-container .col-sm-4 {\n width: 33.3333333333%;\n }\n .shop-container .col-sm-5 {\n width: 41.6666666667%;\n }\n .shop-container .col-sm-6 {\n width: 50%;\n }\n .shop-container .col-sm-7 {\n width: 58.3333333333%;\n }\n .shop-container .col-sm-8 {\n width: 66.6666666667%;\n }\n .shop-container .col-sm-9 {\n width: 75%;\n }\n .shop-container .col-sm-10 {\n width: 83.3333333333%;\n }\n .shop-container .col-sm-11 {\n width: 91.6666666667%;\n }\n .shop-container .col-sm-12 {\n width: 100%;\n }\n .shop-container .col-sm-pull-0 {\n right: auto;\n }\n .shop-container .col-sm-pull-1 {\n right: 8.3333333333%;\n }\n .shop-container .col-sm-pull-2 {\n right: 16.6666666667%;\n }\n .shop-container .col-sm-pull-3 {\n right: 25%;\n }\n .shop-container .col-sm-pull-4 {\n right: 33.3333333333%;\n }\n .shop-container .col-sm-pull-5 {\n right: 41.6666666667%;\n }\n .shop-container .col-sm-pull-6 {\n right: 50%;\n }\n .shop-container .col-sm-pull-7 {\n right: 58.3333333333%;\n }\n .shop-container .col-sm-pull-8 {\n right: 66.6666666667%;\n }\n .shop-container .col-sm-pull-9 {\n right: 75%;\n }\n .shop-container .col-sm-pull-10 {\n right: 83.3333333333%;\n }\n .shop-container .col-sm-pull-11 {\n right: 91.6666666667%;\n }\n .shop-container .col-sm-pull-12 {\n right: 100%;\n }\n .shop-container .col-sm-push-0 {\n left: auto;\n }\n .shop-container .col-sm-push-1 {\n left: 8.3333333333%;\n }\n .shop-container .col-sm-push-2 {\n left: 16.6666666667%;\n }\n .shop-container .col-sm-push-3 {\n left: 25%;\n }\n .shop-container .col-sm-push-4 {\n left: 33.3333333333%;\n }\n .shop-container .col-sm-push-5 {\n left: 41.6666666667%;\n }\n .shop-container .col-sm-push-6 {\n left: 50%;\n }\n .shop-container .col-sm-push-7 {\n left: 58.3333333333%;\n }\n .shop-container .col-sm-push-8 {\n left: 66.6666666667%;\n }\n .shop-container .col-sm-push-9 {\n left: 75%;\n }\n .shop-container .col-sm-push-10 {\n left: 83.3333333333%;\n }\n .shop-container .col-sm-push-11 {\n left: 91.6666666667%;\n }\n .shop-container .col-sm-push-12 {\n left: 100%;\n }\n .shop-container .col-sm-offset-0 {\n margin-left: 0%;\n }\n .shop-container .col-sm-offset-1 {\n margin-left: 8.3333333333%;\n }\n .shop-container .col-sm-offset-2 {\n margin-left: 16.6666666667%;\n }\n .shop-container .col-sm-offset-3 {\n margin-left: 25%;\n }\n .shop-container .col-sm-offset-4 {\n margin-left: 33.3333333333%;\n }\n .shop-container .col-sm-offset-5 {\n margin-left: 41.6666666667%;\n }\n .shop-container .col-sm-offset-6 {\n margin-left: 50%;\n }\n .shop-container .col-sm-offset-7 {\n margin-left: 58.3333333333%;\n }\n .shop-container .col-sm-offset-8 {\n margin-left: 66.6666666667%;\n }\n .shop-container .col-sm-offset-9 {\n margin-left: 75%;\n }\n .shop-container .col-sm-offset-10 {\n margin-left: 83.3333333333%;\n }\n .shop-container .col-sm-offset-11 {\n margin-left: 91.6666666667%;\n }\n .shop-container .col-sm-offset-12 {\n margin-left: 100%;\n }\n}\n@media (min-width: 992px) {\n .shop-container .col-md-1, .shop-container .col-md-2, .shop-container .col-md-3, .shop-container .col-md-4, .shop-container .col-md-5, .shop-container .col-md-6, .shop-container .col-md-7, .shop-container .col-md-8, .shop-container .col-md-9, .shop-container .col-md-10, .shop-container .col-md-11, .shop-container .col-md-12 {\n float: left;\n }\n .shop-container .col-md-1 {\n width: 8.3333333333%;\n }\n .shop-container .col-md-2 {\n width: 16.6666666667%;\n }\n .shop-container .col-md-3 {\n width: 25%;\n }\n .shop-container .col-md-4 {\n width: 33.3333333333%;\n }\n .shop-container .col-md-5 {\n width: 41.6666666667%;\n }\n .shop-container .col-md-6 {\n width: 50%;\n }\n .shop-container .col-md-7 {\n width: 58.3333333333%;\n }\n .shop-container .col-md-8 {\n width: 66.6666666667%;\n }\n .shop-container .col-md-9 {\n width: 75%;\n }\n .shop-container .col-md-10 {\n width: 83.3333333333%;\n }\n .shop-container .col-md-11 {\n width: 91.6666666667%;\n }\n .shop-container .col-md-12 {\n width: 100%;\n }\n .shop-container .col-md-pull-0 {\n right: auto;\n }\n .shop-container .col-md-pull-1 {\n right: 8.3333333333%;\n }\n .shop-container .col-md-pull-2 {\n right: 16.6666666667%;\n }\n .shop-container .col-md-pull-3 {\n right: 25%;\n }\n .shop-container .col-md-pull-4 {\n right: 33.3333333333%;\n }\n .shop-container .col-md-pull-5 {\n right: 41.6666666667%;\n }\n .shop-container .col-md-pull-6 {\n right: 50%;\n }\n .shop-container .col-md-pull-7 {\n right: 58.3333333333%;\n }\n .shop-container .col-md-pull-8 {\n right: 66.6666666667%;\n }\n .shop-container .col-md-pull-9 {\n right: 75%;\n }\n .shop-container .col-md-pull-10 {\n right: 83.3333333333%;\n }\n .shop-container .col-md-pull-11 {\n right: 91.6666666667%;\n }\n .shop-container .col-md-pull-12 {\n right: 100%;\n }\n .shop-container .col-md-push-0 {\n left: auto;\n }\n .shop-container .col-md-push-1 {\n left: 8.3333333333%;\n }\n .shop-container .col-md-push-2 {\n left: 16.6666666667%;\n }\n .shop-container .col-md-push-3 {\n left: 25%;\n }\n .shop-container .col-md-push-4 {\n left: 33.3333333333%;\n }\n .shop-container .col-md-push-5 {\n left: 41.6666666667%;\n }\n .shop-container .col-md-push-6 {\n left: 50%;\n }\n .shop-container .col-md-push-7 {\n left: 58.3333333333%;\n }\n .shop-container .col-md-push-8 {\n left: 66.6666666667%;\n }\n .shop-container .col-md-push-9 {\n left: 75%;\n }\n .shop-container .col-md-push-10 {\n left: 83.3333333333%;\n }\n .shop-container .col-md-push-11 {\n left: 91.6666666667%;\n }\n .shop-container .col-md-push-12 {\n left: 100%;\n }\n .shop-container .col-md-offset-0 {\n margin-left: 0%;\n }\n .shop-container .col-md-offset-1 {\n margin-left: 8.3333333333%;\n }\n .shop-container .col-md-offset-2 {\n margin-left: 16.6666666667%;\n }\n .shop-container .col-md-offset-3 {\n margin-left: 25%;\n }\n .shop-container .col-md-offset-4 {\n margin-left: 33.3333333333%;\n }\n .shop-container .col-md-offset-5 {\n margin-left: 41.6666666667%;\n }\n .shop-container .col-md-offset-6 {\n margin-left: 50%;\n }\n .shop-container .col-md-offset-7 {\n margin-left: 58.3333333333%;\n }\n .shop-container .col-md-offset-8 {\n margin-left: 66.6666666667%;\n }\n .shop-container .col-md-offset-9 {\n margin-left: 75%;\n }\n .shop-container .col-md-offset-10 {\n margin-left: 83.3333333333%;\n }\n .shop-container .col-md-offset-11 {\n margin-left: 91.6666666667%;\n }\n .shop-container .col-md-offset-12 {\n margin-left: 100%;\n }\n}\n@media (min-width: 1200px) {\n .shop-container .col-lg-1, .shop-container .col-lg-2, .shop-container .col-lg-3, .shop-container .col-lg-4, .shop-container .col-lg-5, .shop-container .col-lg-6, .shop-container .col-lg-7, .shop-container .col-lg-8, .shop-container .col-lg-9, .shop-container .col-lg-10, .shop-container .col-lg-11, .shop-container .col-lg-12 {\n float: left;\n }\n .shop-container .col-lg-1 {\n width: 8.3333333333%;\n }\n .shop-container .col-lg-2 {\n width: 16.6666666667%;\n }\n .shop-container .col-lg-3 {\n width: 25%;\n }\n .shop-container .col-lg-4 {\n width: 33.3333333333%;\n }\n .shop-container .col-lg-5 {\n width: 41.6666666667%;\n }\n .shop-container .col-lg-6 {\n width: 50%;\n }\n .shop-container .col-lg-7 {\n width: 58.3333333333%;\n }\n .shop-container .col-lg-8 {\n width: 66.6666666667%;\n }\n .shop-container .col-lg-9 {\n width: 75%;\n }\n .shop-container .col-lg-10 {\n width: 83.3333333333%;\n }\n .shop-container .col-lg-11 {\n width: 91.6666666667%;\n }\n .shop-container .col-lg-12 {\n width: 100%;\n }\n .shop-container .col-lg-pull-0 {\n right: auto;\n }\n .shop-container .col-lg-pull-1 {\n right: 8.3333333333%;\n }\n .shop-container .col-lg-pull-2 {\n right: 16.6666666667%;\n }\n .shop-container .col-lg-pull-3 {\n right: 25%;\n }\n .shop-container .col-lg-pull-4 {\n right: 33.3333333333%;\n }\n .shop-container .col-lg-pull-5 {\n right: 41.6666666667%;\n }\n .shop-container .col-lg-pull-6 {\n right: 50%;\n }\n .shop-container .col-lg-pull-7 {\n right: 58.3333333333%;\n }\n .shop-container .col-lg-pull-8 {\n right: 66.6666666667%;\n }\n .shop-container .col-lg-pull-9 {\n right: 75%;\n }\n .shop-container .col-lg-pull-10 {\n right: 83.3333333333%;\n }\n .shop-container .col-lg-pull-11 {\n right: 91.6666666667%;\n }\n .shop-container .col-lg-pull-12 {\n right: 100%;\n }\n .shop-container .col-lg-push-0 {\n left: auto;\n }\n .shop-container .col-lg-push-1 {\n left: 8.3333333333%;\n }\n .shop-container .col-lg-push-2 {\n left: 16.6666666667%;\n }\n .shop-container .col-lg-push-3 {\n left: 25%;\n }\n .shop-container .col-lg-push-4 {\n left: 33.3333333333%;\n }\n .shop-container .col-lg-push-5 {\n left: 41.6666666667%;\n }\n .shop-container .col-lg-push-6 {\n left: 50%;\n }\n .shop-container .col-lg-push-7 {\n left: 58.3333333333%;\n }\n .shop-container .col-lg-push-8 {\n left: 66.6666666667%;\n }\n .shop-container .col-lg-push-9 {\n left: 75%;\n }\n .shop-container .col-lg-push-10 {\n left: 83.3333333333%;\n }\n .shop-container .col-lg-push-11 {\n left: 91.6666666667%;\n }\n .shop-container .col-lg-push-12 {\n left: 100%;\n }\n .shop-container .col-lg-offset-0 {\n margin-left: 0%;\n }\n .shop-container .col-lg-offset-1 {\n margin-left: 8.3333333333%;\n }\n .shop-container .col-lg-offset-2 {\n margin-left: 16.6666666667%;\n }\n .shop-container .col-lg-offset-3 {\n margin-left: 25%;\n }\n .shop-container .col-lg-offset-4 {\n margin-left: 33.3333333333%;\n }\n .shop-container .col-lg-offset-5 {\n margin-left: 41.6666666667%;\n }\n .shop-container .col-lg-offset-6 {\n margin-left: 50%;\n }\n .shop-container .col-lg-offset-7 {\n margin-left: 58.3333333333%;\n }\n .shop-container .col-lg-offset-8 {\n margin-left: 66.6666666667%;\n }\n .shop-container .col-lg-offset-9 {\n margin-left: 75%;\n }\n .shop-container .col-lg-offset-10 {\n margin-left: 83.3333333333%;\n }\n .shop-container .col-lg-offset-11 {\n margin-left: 91.6666666667%;\n }\n .shop-container .col-lg-offset-12 {\n margin-left: 100%;\n }\n}\n.shop-container table {\n background-color: transparent;\n}\n.shop-container table col[class*=col-] {\n position: static;\n display: table-column;\n float: none;\n}\n.shop-container table td[class*=col-],\n.shop-container table th[class*=col-] {\n position: static;\n display: table-cell;\n float: none;\n}\n.shop-container caption {\n padding-top: 8px;\n padding-bottom: 8px;\n color: rgb(119.085, 119.085, 119.085);\n text-align: left;\n}\n.shop-container th {\n text-align: left;\n}\n.shop-container .table {\n width: 100%;\n max-width: 100%;\n margin-bottom: 20px;\n}\n.shop-container .table > thead > tr > th,\n.shop-container .table > thead > tr > td,\n.shop-container .table > tbody > tr > th,\n.shop-container .table > tbody > tr > td,\n.shop-container .table > tfoot > tr > th,\n.shop-container .table > tfoot > tr > td {\n padding: 8px;\n line-height: 1.428571429;\n vertical-align: top;\n border-top: 1px solid #ddd;\n}\n.shop-container .table > thead > tr > th {\n vertical-align: bottom;\n border-bottom: 2px solid #ddd;\n}\n.shop-container .table > caption + thead > tr:first-child > th,\n.shop-container .table > caption + thead > tr:first-child > td,\n.shop-container .table > colgroup + thead > tr:first-child > th,\n.shop-container .table > colgroup + thead > tr:first-child > td,\n.shop-container .table > thead:first-child > tr:first-child > th,\n.shop-container .table > thead:first-child > tr:first-child > td {\n border-top: 0;\n}\n.shop-container .table > tbody + tbody {\n border-top: 2px solid #ddd;\n}\n.shop-container .table .table {\n background-color: #fff;\n}\n.shop-container .table-condensed > thead > tr > th,\n.shop-container .table-condensed > thead > tr > td,\n.shop-container .table-condensed > tbody > tr > th,\n.shop-container .table-condensed > tbody > tr > td,\n.shop-container .table-condensed > tfoot > tr > th,\n.shop-container .table-condensed > tfoot > tr > td {\n padding: 5px;\n}\n.shop-container .table-bordered {\n border: 1px solid #ddd;\n}\n.shop-container .table-bordered > thead > tr > th,\n.shop-container .table-bordered > thead > tr > td,\n.shop-container .table-bordered > tbody > tr > th,\n.shop-container .table-bordered > tbody > tr > td,\n.shop-container .table-bordered > tfoot > tr > th,\n.shop-container .table-bordered > tfoot > tr > td {\n border: 1px solid #ddd;\n}\n.shop-container .table-bordered > thead > tr > th,\n.shop-container .table-bordered > thead > tr > td {\n border-bottom-width: 2px;\n}\n.shop-container .table-striped > tbody > tr:nth-of-type(odd) {\n background-color: #f9f9f9;\n}\n.shop-container .table-hover > tbody > tr:hover {\n background-color: #f5f5f5;\n}\n.shop-container .table > thead > tr > td.active,\n.shop-container .table > thead > tr > th.active, .shop-container .table > thead > tr.active > td, .shop-container .table > thead > tr.active > th,\n.shop-container .table > tbody > tr > td.active,\n.shop-container .table > tbody > tr > th.active,\n.shop-container .table > tbody > tr.active > td,\n.shop-container .table > tbody > tr.active > th,\n.shop-container .table > tfoot > tr > td.active,\n.shop-container .table > tfoot > tr > th.active,\n.shop-container .table > tfoot > tr.active > td,\n.shop-container .table > tfoot > tr.active > th {\n background-color: #f5f5f5;\n}\n.shop-container .table-hover > tbody > tr > td.active:hover,\n.shop-container .table-hover > tbody > tr > th.active:hover, .shop-container .table-hover > tbody > tr.active:hover > td, .shop-container .table-hover > tbody > tr:hover > .active, .shop-container .table-hover > tbody > tr.active:hover > th {\n background-color: rgb(232.25, 232.25, 232.25);\n}\n.shop-container .table > thead > tr > td.success,\n.shop-container .table > thead > tr > th.success, .shop-container .table > thead > tr.success > td, .shop-container .table > thead > tr.success > th,\n.shop-container .table > tbody > tr > td.success,\n.shop-container .table > tbody > tr > th.success,\n.shop-container .table > tbody > tr.success > td,\n.shop-container .table > tbody > tr.success > th,\n.shop-container .table > tfoot > tr > td.success,\n.shop-container .table > tfoot > tr > th.success,\n.shop-container .table > tfoot > tr.success > td,\n.shop-container .table > tfoot > tr.success > th {\n background-color: #dff0d8;\n}\n.shop-container .table-hover > tbody > tr > td.success:hover,\n.shop-container .table-hover > tbody > tr > th.success:hover, .shop-container .table-hover > tbody > tr.success:hover > td, .shop-container .table-hover > tbody > tr:hover > .success, .shop-container .table-hover > tbody > tr.success:hover > th {\n background-color: rgb(207.8888888889, 232.9166666667, 197.5833333333);\n}\n.shop-container .table > thead > tr > td.info,\n.shop-container .table > thead > tr > th.info, .shop-container .table > thead > tr.info > td, .shop-container .table > thead > tr.info > th,\n.shop-container .table > tbody > tr > td.info,\n.shop-container .table > tbody > tr > th.info,\n.shop-container .table > tbody > tr.info > td,\n.shop-container .table > tbody > tr.info > th,\n.shop-container .table > tfoot > tr > td.info,\n.shop-container .table > tfoot > tr > th.info,\n.shop-container .table > tfoot > tr.info > td,\n.shop-container .table > tfoot > tr.info > th {\n background-color: #d9edf7;\n}\n.shop-container .table-hover > tbody > tr > td.info:hover,\n.shop-container .table-hover > tbody > tr > th.info:hover, .shop-container .table-hover > tbody > tr.info:hover > td, .shop-container .table-hover > tbody > tr:hover > .info, .shop-container .table-hover > tbody > tr.info:hover > th {\n background-color: rgb(195.9347826087, 227.0217391304, 242.5652173913);\n}\n.shop-container .table > thead > tr > td.warning,\n.shop-container .table > thead > tr > th.warning, .shop-container .table > thead > tr.warning > td, .shop-container .table > thead > tr.warning > th,\n.shop-container .table > tbody > tr > td.warning,\n.shop-container .table > tbody > tr > th.warning,\n.shop-container .table > tbody > tr.warning > td,\n.shop-container .table > tbody > tr.warning > th,\n.shop-container .table > tfoot > tr > td.warning,\n.shop-container .table > tfoot > tr > th.warning,\n.shop-container .table > tfoot > tr.warning > td,\n.shop-container .table > tfoot > tr.warning > th {\n background-color: #fcf8e3;\n}\n.shop-container .table-hover > tbody > tr > td.warning:hover,\n.shop-container .table-hover > tbody > tr > th.warning:hover, .shop-container .table-hover > tbody > tr.warning:hover > td, .shop-container .table-hover > tbody > tr:hover > .warning, .shop-container .table-hover > tbody > tr.warning:hover > th {\n background-color: rgb(249.5322580645, 242.2419354839, 203.9677419355);\n}\n.shop-container .table > thead > tr > td.danger,\n.shop-container .table > thead > tr > th.danger, .shop-container .table > thead > tr.danger > td, .shop-container .table > thead > tr.danger > th,\n.shop-container .table > tbody > tr > td.danger,\n.shop-container .table > tbody > tr > th.danger,\n.shop-container .table > tbody > tr.danger > td,\n.shop-container .table > tbody > tr.danger > th,\n.shop-container .table > tfoot > tr > td.danger,\n.shop-container .table > tfoot > tr > th.danger,\n.shop-container .table > tfoot > tr.danger > td,\n.shop-container .table > tfoot > tr.danger > th {\n background-color: #f2dede;\n}\n.shop-container .table-hover > tbody > tr > td.danger:hover,\n.shop-container .table-hover > tbody > tr > th.danger:hover, .shop-container .table-hover > tbody > tr.danger:hover > td, .shop-container .table-hover > tbody > tr:hover > .danger, .shop-container .table-hover > tbody > tr.danger:hover > th {\n background-color: rgb(234.7934782609, 203.7065217391, 203.7065217391);\n}\n.shop-container .table-responsive {\n min-height: 0.01%;\n overflow-x: auto;\n}\n@media screen and (max-width: 767px) {\n .shop-container .table-responsive {\n width: 100%;\n margin-bottom: 15px;\n overflow-y: hidden;\n -ms-overflow-style: -ms-autohiding-scrollbar;\n border: 1px solid #ddd;\n }\n .shop-container .table-responsive > .table {\n margin-bottom: 0;\n }\n .shop-container .table-responsive > .table > thead > tr > th,\n .shop-container .table-responsive > .table > thead > tr > td,\n .shop-container .table-responsive > .table > tbody > tr > th,\n .shop-container .table-responsive > .table > tbody > tr > td,\n .shop-container .table-responsive > .table > tfoot > tr > th,\n .shop-container .table-responsive > .table > tfoot > tr > td {\n white-space: nowrap;\n }\n .shop-container .table-responsive > .table-bordered {\n border: 0;\n }\n .shop-container .table-responsive > .table-bordered > thead > tr > th:first-child,\n .shop-container .table-responsive > .table-bordered > thead > tr > td:first-child,\n .shop-container .table-responsive > .table-bordered > tbody > tr > th:first-child,\n .shop-container .table-responsive > .table-bordered > tbody > tr > td:first-child,\n .shop-container .table-responsive > .table-bordered > tfoot > tr > th:first-child,\n .shop-container .table-responsive > .table-bordered > tfoot > tr > td:first-child {\n border-left: 0;\n }\n .shop-container .table-responsive > .table-bordered > thead > tr > th:last-child,\n .shop-container .table-responsive > .table-bordered > thead > tr > td:last-child,\n .shop-container .table-responsive > .table-bordered > tbody > tr > th:last-child,\n .shop-container .table-responsive > .table-bordered > tbody > tr > td:last-child,\n .shop-container .table-responsive > .table-bordered > tfoot > tr > th:last-child,\n .shop-container .table-responsive > .table-bordered > tfoot > tr > td:last-child {\n border-right: 0;\n }\n .shop-container .table-responsive > .table-bordered > tbody > tr:last-child > th,\n .shop-container .table-responsive > .table-bordered > tbody > tr:last-child > td,\n .shop-container .table-responsive > .table-bordered > tfoot > tr:last-child > th,\n .shop-container .table-responsive > .table-bordered > tfoot > tr:last-child > td {\n border-bottom: 0;\n }\n}\n.shop-container fieldset {\n min-width: 0;\n padding: 0;\n margin: 0;\n border: 0;\n}\n.shop-container legend {\n display: block;\n width: 100%;\n padding: 0;\n margin-bottom: 20px;\n font-size: 21px;\n line-height: inherit;\n color: #333333;\n border: 0;\n border-bottom: 1px solid #e5e5e5;\n}\n.shop-container label {\n display: inline-block;\n max-width: 100%;\n margin-bottom: 5px;\n font-weight: 700;\n}\n.shop-container input[type=search] {\n box-sizing: border-box;\n -webkit-appearance: none;\n -moz-appearance: none;\n appearance: none;\n}\n.shop-container input[type=radio],\n.shop-container input[type=checkbox] {\n margin: 4px 0 0;\n margin-top: 1px \\9 ;\n line-height: normal;\n}\n.shop-container input[type=radio][disabled], .shop-container input[type=radio].disabled, fieldset[disabled] .shop-container input[type=radio],\n.shop-container input[type=checkbox][disabled],\n.shop-container input[type=checkbox].disabled,\nfieldset[disabled] .shop-container input[type=checkbox] {\n cursor: not-allowed;\n}\n.shop-container input[type=file] {\n display: block;\n}\n.shop-container input[type=range] {\n display: block;\n width: 100%;\n}\n.shop-container select[multiple],\n.shop-container select[size] {\n height: auto;\n}\n.shop-container input[type=file]:focus,\n.shop-container input[type=radio]:focus,\n.shop-container input[type=checkbox]:focus {\n outline: 5px auto -webkit-focus-ring-color;\n outline-offset: -2px;\n}\n.shop-container output {\n display: block;\n padding-top: 7px;\n font-size: 14px;\n line-height: 1.428571429;\n color: rgb(85.425, 85.425, 85.425);\n}\n.shop-container .form-control {\n display: block;\n width: 100%;\n height: 34px;\n padding: 6px 12px;\n font-size: 14px;\n line-height: 1.428571429;\n color: rgb(85.425, 85.425, 85.425);\n background-color: #fff;\n background-image: none;\n border: 1px solid #ccc;\n border-radius: 4px;\n box-shadow: inset 0 1px 1px rgba(0, 0, 0, 0.075);\n transition: border-color ease-in-out 0.15s, box-shadow ease-in-out 0.15s;\n}\n.shop-container .form-control:focus {\n border-color: #66afe9;\n outline: 0;\n box-shadow: inset 0 1px 1px rgba(0, 0, 0, 0.075), 0 0 8px rgba(102, 175, 233, 0.6);\n}\n.shop-container .form-control::-moz-placeholder {\n color: #999;\n opacity: 1;\n}\n.shop-container .form-control:-ms-input-placeholder {\n color: #999;\n}\n.shop-container .form-control::-webkit-input-placeholder {\n color: #999;\n}\n.shop-container .form-control::-ms-expand {\n background-color: transparent;\n border: 0;\n}\n.shop-container .form-control[disabled], .shop-container .form-control[readonly], fieldset[disabled] .shop-container .form-control {\n background-color: rgb(238.425, 238.425, 238.425);\n opacity: 1;\n}\n.shop-container .form-control[disabled], fieldset[disabled] .shop-container .form-control {\n cursor: not-allowed;\n}\n.shop-container textarea.form-control {\n height: auto;\n}\n@media screen and (-webkit-min-device-pixel-ratio: 0) {\n .shop-container input[type=date].form-control,\n .shop-container input[type=time].form-control,\n .shop-container input[type=datetime-local].form-control,\n .shop-container input[type=month].form-control {\n line-height: 34px;\n }\n .shop-container input[type=date].input-sm, .shop-container .input-group-sm > input[type=date].form-control,\n .shop-container .input-group-sm > input[type=date].input-group-addon,\n .shop-container .input-group-sm > .input-group-btn > input[type=date].btn, .input-group-sm .shop-container input[type=date],\n .shop-container input[type=time].input-sm,\n .shop-container .input-group-sm > input[type=time].form-control,\n .shop-container .input-group-sm > input[type=time].input-group-addon,\n .shop-container .input-group-sm > .input-group-btn > input[type=time].btn,\n .input-group-sm .shop-container input[type=time],\n .shop-container input[type=datetime-local].input-sm,\n .shop-container .input-group-sm > input[type=datetime-local].form-control,\n .shop-container .input-group-sm > input[type=datetime-local].input-group-addon,\n .shop-container .input-group-sm > .input-group-btn > input[type=datetime-local].btn,\n .input-group-sm .shop-container input[type=datetime-local],\n .shop-container input[type=month].input-sm,\n .shop-container .input-group-sm > input[type=month].form-control,\n .shop-container .input-group-sm > input[type=month].input-group-addon,\n .shop-container .input-group-sm > .input-group-btn > input[type=month].btn,\n .input-group-sm .shop-container input[type=month] {\n line-height: 30px;\n }\n .shop-container input[type=date].input-lg, .shop-container .input-group-lg > input[type=date].form-control,\n .shop-container .input-group-lg > input[type=date].input-group-addon,\n .shop-container .input-group-lg > .input-group-btn > input[type=date].btn, .input-group-lg .shop-container input[type=date],\n .shop-container input[type=time].input-lg,\n .shop-container .input-group-lg > input[type=time].form-control,\n .shop-container .input-group-lg > input[type=time].input-group-addon,\n .shop-container .input-group-lg > .input-group-btn > input[type=time].btn,\n .input-group-lg .shop-container input[type=time],\n .shop-container input[type=datetime-local].input-lg,\n .shop-container .input-group-lg > input[type=datetime-local].form-control,\n .shop-container .input-group-lg > input[type=datetime-local].input-group-addon,\n .shop-container .input-group-lg > .input-group-btn > input[type=datetime-local].btn,\n .input-group-lg .shop-container input[type=datetime-local],\n .shop-container input[type=month].input-lg,\n .shop-container .input-group-lg > input[type=month].form-control,\n .shop-container .input-group-lg > input[type=month].input-group-addon,\n .shop-container .input-group-lg > .input-group-btn > input[type=month].btn,\n .input-group-lg .shop-container input[type=month] {\n line-height: 46px;\n }\n}\n.shop-container .form-group {\n margin-bottom: 15px;\n}\n.shop-container .radio,\n.shop-container .checkbox {\n position: relative;\n display: block;\n margin-top: 10px;\n margin-bottom: 10px;\n}\n.shop-container .radio.disabled label, fieldset[disabled] .shop-container .radio label,\n.shop-container .checkbox.disabled label,\nfieldset[disabled] .shop-container .checkbox label {\n cursor: not-allowed;\n}\n.shop-container .radio label,\n.shop-container .checkbox label {\n min-height: 20px;\n padding-left: 20px;\n margin-bottom: 0;\n font-weight: 400;\n cursor: pointer;\n}\n.shop-container .radio input[type=radio],\n.shop-container .radio-inline input[type=radio],\n.shop-container .checkbox input[type=checkbox],\n.shop-container .checkbox-inline input[type=checkbox] {\n position: absolute;\n margin-top: 4px \\9 ;\n margin-left: -20px;\n}\n.shop-container .radio + .radio,\n.shop-container .checkbox + .checkbox {\n margin-top: -5px;\n}\n.shop-container .radio-inline,\n.shop-container .checkbox-inline {\n position: relative;\n display: inline-block;\n padding-left: 20px;\n margin-bottom: 0;\n font-weight: 400;\n vertical-align: middle;\n cursor: pointer;\n}\n.shop-container .radio-inline.disabled, fieldset[disabled] .shop-container .radio-inline,\n.shop-container .checkbox-inline.disabled,\nfieldset[disabled] .shop-container .checkbox-inline {\n cursor: not-allowed;\n}\n.shop-container .radio-inline + .radio-inline,\n.shop-container .checkbox-inline + .checkbox-inline {\n margin-top: 0;\n margin-left: 10px;\n}\n.shop-container .form-control-static {\n min-height: 34px;\n padding-top: 7px;\n padding-bottom: 7px;\n margin-bottom: 0;\n}\n.shop-container .form-control-static.input-lg, .shop-container .input-group-lg > .form-control-static.form-control,\n.shop-container .input-group-lg > .form-control-static.input-group-addon,\n.shop-container .input-group-lg > .input-group-btn > .form-control-static.btn, .shop-container .form-control-static.input-sm, .shop-container .input-group-sm > .form-control-static.form-control,\n.shop-container .input-group-sm > .form-control-static.input-group-addon,\n.shop-container .input-group-sm > .input-group-btn > .form-control-static.btn {\n padding-right: 0;\n padding-left: 0;\n}\n.shop-container .input-sm, .shop-container .input-group-sm > .form-control,\n.shop-container .input-group-sm > .input-group-addon,\n.shop-container .input-group-sm > .input-group-btn > .btn {\n height: 30px;\n padding: 5px 10px;\n font-size: 12px;\n line-height: 1.5;\n border-radius: 3px;\n}\n.shop-container select.input-sm, .shop-container .input-group-sm > select.form-control,\n.shop-container .input-group-sm > select.input-group-addon,\n.shop-container .input-group-sm > .input-group-btn > select.btn {\n height: 30px;\n line-height: 30px;\n}\n.shop-container textarea.input-sm, .shop-container .input-group-sm > textarea.form-control,\n.shop-container .input-group-sm > textarea.input-group-addon,\n.shop-container .input-group-sm > .input-group-btn > textarea.btn,\n.shop-container select[multiple].input-sm,\n.shop-container .input-group-sm > select[multiple].form-control,\n.shop-container .input-group-sm > select[multiple].input-group-addon,\n.shop-container .input-group-sm > .input-group-btn > select[multiple].btn {\n height: auto;\n}\n.shop-container .form-group-sm .form-control {\n height: 30px;\n padding: 5px 10px;\n font-size: 12px;\n line-height: 1.5;\n border-radius: 3px;\n}\n.shop-container .form-group-sm select.form-control {\n height: 30px;\n line-height: 30px;\n}\n.shop-container .form-group-sm textarea.form-control,\n.shop-container .form-group-sm select[multiple].form-control {\n height: auto;\n}\n.shop-container .form-group-sm .form-control-static {\n height: 30px;\n min-height: 32px;\n padding: 6px 10px;\n font-size: 12px;\n line-height: 1.5;\n}\n.shop-container .input-lg, .shop-container .input-group-lg > .form-control,\n.shop-container .input-group-lg > .input-group-addon,\n.shop-container .input-group-lg > .input-group-btn > .btn {\n height: 46px;\n padding: 10px 16px;\n font-size: 18px;\n line-height: 1.3333333;\n border-radius: 6px;\n}\n.shop-container select.input-lg, .shop-container .input-group-lg > select.form-control,\n.shop-container .input-group-lg > select.input-group-addon,\n.shop-container .input-group-lg > .input-group-btn > select.btn {\n height: 46px;\n line-height: 46px;\n}\n.shop-container textarea.input-lg, .shop-container .input-group-lg > textarea.form-control,\n.shop-container .input-group-lg > textarea.input-group-addon,\n.shop-container .input-group-lg > .input-group-btn > textarea.btn,\n.shop-container select[multiple].input-lg,\n.shop-container .input-group-lg > select[multiple].form-control,\n.shop-container .input-group-lg > select[multiple].input-group-addon,\n.shop-container .input-group-lg > .input-group-btn > select[multiple].btn {\n height: auto;\n}\n.shop-container .form-group-lg .form-control {\n height: 46px;\n padding: 10px 16px;\n font-size: 18px;\n line-height: 1.3333333;\n border-radius: 6px;\n}\n.shop-container .form-group-lg select.form-control {\n height: 46px;\n line-height: 46px;\n}\n.shop-container .form-group-lg textarea.form-control,\n.shop-container .form-group-lg select[multiple].form-control {\n height: auto;\n}\n.shop-container .form-group-lg .form-control-static {\n height: 46px;\n min-height: 38px;\n padding: 11px 16px;\n font-size: 18px;\n line-height: 1.3333333;\n}\n.shop-container .has-feedback {\n position: relative;\n}\n.shop-container .has-feedback .form-control {\n padding-right: 42.5px;\n}\n.shop-container .form-control-feedback {\n position: absolute;\n top: 0;\n right: 0;\n z-index: 2;\n display: block;\n width: 34px;\n height: 34px;\n line-height: 34px;\n text-align: center;\n pointer-events: none;\n}\n.shop-container .input-lg + .form-control-feedback, .shop-container .input-group-lg > .form-control + .form-control-feedback,\n.shop-container .input-group-lg > .input-group-addon + .form-control-feedback,\n.shop-container .input-group-lg > .input-group-btn > .btn + .form-control-feedback,\n.shop-container .input-group-lg + .form-control-feedback,\n.shop-container .form-group-lg .form-control + .form-control-feedback {\n width: 46px;\n height: 46px;\n line-height: 46px;\n}\n.shop-container .input-sm + .form-control-feedback, .shop-container .input-group-sm > .form-control + .form-control-feedback,\n.shop-container .input-group-sm > .input-group-addon + .form-control-feedback,\n.shop-container .input-group-sm > .input-group-btn > .btn + .form-control-feedback,\n.shop-container .input-group-sm + .form-control-feedback,\n.shop-container .form-group-sm .form-control + .form-control-feedback {\n width: 30px;\n height: 30px;\n line-height: 30px;\n}\n.shop-container .has-success .help-block,\n.shop-container .has-success .control-label,\n.shop-container .has-success .radio,\n.shop-container .has-success .checkbox,\n.shop-container .has-success .radio-inline,\n.shop-container .has-success .checkbox-inline, .shop-container .has-success.radio label, .shop-container .has-success.checkbox label, .shop-container .has-success.radio-inline label, .shop-container .has-success.checkbox-inline label {\n color: #3c763d;\n}\n.shop-container .has-success .form-control {\n border-color: #3c763d;\n box-shadow: inset 0 1px 1px rgba(0, 0, 0, 0.075);\n}\n.shop-container .has-success .form-control:focus {\n border-color: rgb(42.808988764, 84.191011236, 43.5224719101);\n box-shadow: inset 0 1px 1px rgba(0, 0, 0, 0.075), 0 0 6px rgb(102.5280898876, 177.4719101124, 103.8202247191);\n}\n.shop-container .has-success .input-group-addon {\n color: #3c763d;\n background-color: #dff0d8;\n border-color: #3c763d;\n}\n.shop-container .has-success .form-control-feedback {\n color: #3c763d;\n}\n.shop-container .has-warning .help-block,\n.shop-container .has-warning .control-label,\n.shop-container .has-warning .radio,\n.shop-container .has-warning .checkbox,\n.shop-container .has-warning .radio-inline,\n.shop-container .has-warning .checkbox-inline, .shop-container .has-warning.radio label, .shop-container .has-warning.checkbox label, .shop-container .has-warning.radio-inline label, .shop-container .has-warning.checkbox-inline label {\n color: #8a6d3b;\n}\n.shop-container .has-warning .form-control {\n border-color: #8a6d3b;\n box-shadow: inset 0 1px 1px rgba(0, 0, 0, 0.075);\n}\n.shop-container .has-warning .form-control:focus {\n border-color: rgb(102.2741116751, 80.7817258883, 43.7258883249);\n box-shadow: inset 0 1px 1px rgba(0, 0, 0, 0.075), 0 0 6px rgb(191.807106599, 160.7461928934, 107.192893401);\n}\n.shop-container .has-warning .input-group-addon {\n color: #8a6d3b;\n background-color: #fcf8e3;\n border-color: #8a6d3b;\n}\n.shop-container .has-warning .form-control-feedback {\n color: #8a6d3b;\n}\n.shop-container .has-error .help-block,\n.shop-container .has-error .control-label,\n.shop-container .has-error .radio,\n.shop-container .has-error .checkbox,\n.shop-container .has-error .radio-inline,\n.shop-container .has-error .checkbox-inline, .shop-container .has-error.radio label, .shop-container .has-error.checkbox label, .shop-container .has-error.radio-inline label, .shop-container .has-error.checkbox-inline label {\n color: #a94442;\n}\n.shop-container .has-error .form-control {\n border-color: #a94442;\n box-shadow: inset 0 1px 1px rgba(0, 0, 0, 0.075);\n}\n.shop-container .has-error .form-control:focus {\n border-color: rgb(132.3234042553, 53.2425531915, 51.6765957447);\n box-shadow: inset 0 1px 1px rgba(0, 0, 0, 0.075), 0 0 6px rgb(206.4127659574, 132.0595744681, 130.5872340426);\n}\n.shop-container .has-error .input-group-addon {\n color: #a94442;\n background-color: #f2dede;\n border-color: #a94442;\n}\n.shop-container .has-error .form-control-feedback {\n color: #a94442;\n}\n.shop-container .has-feedback label ~ .form-control-feedback {\n top: 25px;\n}\n.shop-container .has-feedback label.sr-only ~ .form-control-feedback {\n top: 0;\n}\n.shop-container .help-block {\n display: block;\n margin-top: 5px;\n margin-bottom: 10px;\n color: rgb(114.75, 114.75, 114.75);\n}\n@media (min-width: 768px) {\n .shop-container .form-inline .form-group {\n display: inline-block;\n margin-bottom: 0;\n vertical-align: middle;\n }\n .shop-container .form-inline .form-control {\n display: inline-block;\n width: auto;\n vertical-align: middle;\n }\n .shop-container .form-inline .form-control-static {\n display: inline-block;\n }\n .shop-container .form-inline .input-group {\n display: inline-table;\n vertical-align: middle;\n }\n .shop-container .form-inline .input-group .input-group-addon,\n .shop-container .form-inline .input-group .input-group-btn,\n .shop-container .form-inline .input-group .form-control {\n width: auto;\n }\n .shop-container .form-inline .input-group > .form-control {\n width: 100%;\n }\n .shop-container .form-inline .control-label {\n margin-bottom: 0;\n vertical-align: middle;\n }\n .shop-container .form-inline .radio,\n .shop-container .form-inline .checkbox {\n display: inline-block;\n margin-top: 0;\n margin-bottom: 0;\n vertical-align: middle;\n }\n .shop-container .form-inline .radio label,\n .shop-container .form-inline .checkbox label {\n padding-left: 0;\n }\n .shop-container .form-inline .radio input[type=radio],\n .shop-container .form-inline .checkbox input[type=checkbox] {\n position: relative;\n margin-left: 0;\n }\n .shop-container .form-inline .has-feedback .form-control-feedback {\n top: 0;\n }\n}\n.shop-container .form-horizontal .radio,\n.shop-container .form-horizontal .checkbox,\n.shop-container .form-horizontal .radio-inline,\n.shop-container .form-horizontal .checkbox-inline {\n padding-top: 7px;\n margin-top: 0;\n margin-bottom: 0;\n}\n.shop-container .form-horizontal .radio,\n.shop-container .form-horizontal .checkbox {\n min-height: 27px;\n}\n.shop-container .form-horizontal .form-group {\n margin-right: -15px;\n margin-left: -15px;\n}\n.shop-container .form-horizontal .form-group:before, .shop-container .form-horizontal .form-group:after {\n display: table;\n content: \" \";\n}\n.shop-container .form-horizontal .form-group:after {\n clear: both;\n}\n@media (min-width: 768px) {\n .shop-container .form-horizontal .control-label {\n padding-top: 7px;\n margin-bottom: 0;\n text-align: right;\n }\n}\n.shop-container .form-horizontal .has-feedback .form-control-feedback {\n right: 15px;\n}\n@media (min-width: 768px) {\n .shop-container .form-horizontal .form-group-lg .control-label {\n padding-top: 11px;\n font-size: 18px;\n }\n}\n@media (min-width: 768px) {\n .shop-container .form-horizontal .form-group-sm .control-label {\n padding-top: 6px;\n font-size: 12px;\n }\n}\n.shop-container .btn {\n display: inline-block;\n margin-bottom: 0;\n font-weight: normal;\n text-align: center;\n white-space: nowrap;\n vertical-align: middle;\n touch-action: manipulation;\n cursor: pointer;\n background-image: none;\n border: 1px solid transparent;\n padding: 6px 12px;\n font-size: 14px;\n line-height: 1.428571429;\n border-radius: 4px;\n -webkit-user-select: none;\n -moz-user-select: none;\n user-select: none;\n}\n.shop-container .btn:focus, .shop-container .btn.focus, .shop-container .btn:active:focus, .shop-container .btn:active.focus, .shop-container .btn.active:focus, .shop-container .btn.active.focus {\n outline: 5px auto -webkit-focus-ring-color;\n outline-offset: -2px;\n}\n.shop-container .btn:hover, .shop-container .btn:focus, .shop-container .btn.focus {\n color: #333;\n text-decoration: none;\n}\n.shop-container .btn:active, .shop-container .btn.active {\n background-image: none;\n outline: 0;\n box-shadow: inset 0 3px 5px rgba(0, 0, 0, 0.125);\n}\n.shop-container .btn.disabled, .shop-container .btn[disabled], fieldset[disabled] .shop-container .btn {\n cursor: not-allowed;\n filter: alpha(opacity=65);\n opacity: 0.65;\n box-shadow: none;\n}\n.shop-container a.btn.disabled, fieldset[disabled] .shop-container a.btn {\n pointer-events: none;\n}\n.shop-container .btn-default {\n color: #333;\n background-color: #fff;\n border-color: #ccc;\n}\n.shop-container .btn-default:focus, .shop-container .btn-default.focus {\n color: #333;\n background-color: rgb(229.5, 229.5, 229.5);\n border-color: rgb(140.25, 140.25, 140.25);\n}\n.shop-container .btn-default:hover {\n color: #333;\n background-color: rgb(229.5, 229.5, 229.5);\n border-color: rgb(173.4, 173.4, 173.4);\n}\n.shop-container .btn-default:active, .shop-container .btn-default.active, .open > .shop-container .btn-default.dropdown-toggle {\n color: #333;\n background-color: rgb(229.5, 229.5, 229.5);\n background-image: none;\n border-color: rgb(173.4, 173.4, 173.4);\n}\n.shop-container .btn-default:active:hover, .shop-container .btn-default:active:focus, .shop-container .btn-default:active.focus, .shop-container .btn-default.active:hover, .shop-container .btn-default.active:focus, .shop-container .btn-default.active.focus, .open > .shop-container .btn-default.dropdown-toggle:hover, .open > .shop-container .btn-default.dropdown-toggle:focus, .open > .shop-container .btn-default.dropdown-toggle.focus {\n color: #333;\n background-color: rgb(211.65, 211.65, 211.65);\n border-color: rgb(140.25, 140.25, 140.25);\n}\n.shop-container .btn-default.disabled:hover, .shop-container .btn-default.disabled:focus, .shop-container .btn-default.disabled.focus, .shop-container .btn-default[disabled]:hover, .shop-container .btn-default[disabled]:focus, .shop-container .btn-default[disabled].focus, fieldset[disabled] .shop-container .btn-default:hover, fieldset[disabled] .shop-container .btn-default:focus, fieldset[disabled] .shop-container .btn-default.focus {\n background-color: #fff;\n border-color: #ccc;\n}\n.shop-container .btn-default .badge {\n color: #fff;\n background-color: #333;\n}\n.shop-container .btn-primary {\n color: #fff;\n background-color: rgb(51.4340909091, 122.2772727273, 183.4159090909);\n border-color: rgb(45.8493801653, 109.0004132231, 163.5006198347);\n}\n.shop-container .btn-primary:focus, .shop-container .btn-primary.focus {\n color: #fff;\n background-color: rgb(40.2646694215, 95.723553719, 143.5853305785);\n border-color: rgb(17.9258264463, 42.6161157025, 63.9241735537);\n}\n.shop-container .btn-primary:hover {\n color: #fff;\n background-color: rgb(40.2646694215, 95.723553719, 143.5853305785);\n border-color: rgb(32.4460743802, 77.1359504132, 115.7039256198);\n}\n.shop-container .btn-primary:active, .shop-container .btn-primary.active, .open > .shop-container .btn-primary.dropdown-toggle {\n color: #fff;\n background-color: rgb(40.2646694215, 95.723553719, 143.5853305785);\n background-image: none;\n border-color: rgb(32.4460743802, 77.1359504132, 115.7039256198);\n}\n.shop-container .btn-primary:active:hover, .shop-container .btn-primary:active:focus, .shop-container .btn-primary:active.focus, .shop-container .btn-primary.active:hover, .shop-container .btn-primary.active:focus, .shop-container .btn-primary.active.focus, .open > .shop-container .btn-primary.dropdown-toggle:hover, .open > .shop-container .btn-primary.dropdown-toggle:focus, .open > .shop-container .btn-primary.dropdown-toggle.focus {\n color: #fff;\n background-color: rgb(32.4460743802, 77.1359504132, 115.7039256198);\n border-color: rgb(17.9258264463, 42.6161157025, 63.9241735537);\n}\n.shop-container .btn-primary.disabled:hover, .shop-container .btn-primary.disabled:focus, .shop-container .btn-primary.disabled.focus, .shop-container .btn-primary[disabled]:hover, .shop-container .btn-primary[disabled]:focus, .shop-container .btn-primary[disabled].focus, fieldset[disabled] .shop-container .btn-primary:hover, fieldset[disabled] .shop-container .btn-primary:focus, fieldset[disabled] .shop-container .btn-primary.focus {\n background-color: rgb(51.4340909091, 122.2772727273, 183.4159090909);\n border-color: rgb(45.8493801653, 109.0004132231, 163.5006198347);\n}\n.shop-container .btn-primary .badge {\n color: rgb(51.4340909091, 122.2772727273, 183.4159090909);\n background-color: #fff;\n}\n.shop-container .btn-success {\n color: #fff;\n background-color: #5cb85c;\n border-color: rgb(76.0064102564, 174.4935897436, 76.0064102564);\n}\n.shop-container .btn-success:focus, .shop-container .btn-success.focus {\n color: #fff;\n background-color: rgb(68.2692307692, 156.7307692308, 68.2692307692);\n border-color: rgb(37.3205128205, 85.6794871795, 37.3205128205);\n}\n.shop-container .btn-success:hover {\n color: #fff;\n background-color: rgb(68.2692307692, 156.7307692308, 68.2692307692);\n border-color: rgb(57.4371794872, 131.8628205128, 57.4371794872);\n}\n.shop-container .btn-success:active, .shop-container .btn-success.active, .open > .shop-container .btn-success.dropdown-toggle {\n color: #fff;\n background-color: rgb(68.2692307692, 156.7307692308, 68.2692307692);\n background-image: none;\n border-color: rgb(57.4371794872, 131.8628205128, 57.4371794872);\n}\n.shop-container .btn-success:active:hover, .shop-container .btn-success:active:focus, .shop-container .btn-success:active.focus, .shop-container .btn-success.active:hover, .shop-container .btn-success.active:focus, .shop-container .btn-success.active.focus, .open > .shop-container .btn-success.dropdown-toggle:hover, .open > .shop-container .btn-success.dropdown-toggle:focus, .open > .shop-container .btn-success.dropdown-toggle.focus {\n color: #fff;\n background-color: rgb(57.4371794872, 131.8628205128, 57.4371794872);\n border-color: rgb(37.3205128205, 85.6794871795, 37.3205128205);\n}\n.shop-container .btn-success.disabled:hover, .shop-container .btn-success.disabled:focus, .shop-container .btn-success.disabled.focus, .shop-container .btn-success[disabled]:hover, .shop-container .btn-success[disabled]:focus, .shop-container .btn-success[disabled].focus, fieldset[disabled] .shop-container .btn-success:hover, fieldset[disabled] .shop-container .btn-success:focus, fieldset[disabled] .shop-container .btn-success.focus {\n background-color: #5cb85c;\n border-color: rgb(76.0064102564, 174.4935897436, 76.0064102564);\n}\n.shop-container .btn-success .badge {\n color: #5cb85c;\n background-color: #fff;\n}\n.shop-container .btn-info {\n color: #fff;\n background-color: #5bc0de;\n border-color: rgb(69.7715736041, 183.845177665, 217.7284263959);\n}\n.shop-container .btn-info:focus, .shop-container .btn-info.focus {\n color: #fff;\n background-color: rgb(48.5431472081, 175.6903553299, 213.4568527919);\n border-color: rgb(26.8020304569, 108.8324873096, 133.1979695431);\n}\n.shop-container .btn-info:hover {\n color: #fff;\n background-color: rgb(48.5431472081, 175.6903553299, 213.4568527919);\n border-color: rgb(37.9081218274, 153.9299492386, 188.3918781726);\n}\n.shop-container .btn-info:active, .shop-container .btn-info.active, .open > .shop-container .btn-info.dropdown-toggle {\n color: #fff;\n background-color: rgb(48.5431472081, 175.6903553299, 213.4568527919);\n background-image: none;\n border-color: rgb(37.9081218274, 153.9299492386, 188.3918781726);\n}\n.shop-container .btn-info:active:hover, .shop-container .btn-info:active:focus, .shop-container .btn-info:active.focus, .shop-container .btn-info.active:hover, .shop-container .btn-info.active:focus, .shop-container .btn-info.active.focus, .open > .shop-container .btn-info.dropdown-toggle:hover, .open > .shop-container .btn-info.dropdown-toggle:focus, .open > .shop-container .btn-info.dropdown-toggle.focus {\n color: #fff;\n background-color: rgb(37.9081218274, 153.9299492386, 188.3918781726);\n border-color: rgb(26.8020304569, 108.8324873096, 133.1979695431);\n}\n.shop-container .btn-info.disabled:hover, .shop-container .btn-info.disabled:focus, .shop-container .btn-info.disabled.focus, .shop-container .btn-info[disabled]:hover, .shop-container .btn-info[disabled]:focus, .shop-container .btn-info[disabled].focus, fieldset[disabled] .shop-container .btn-info:hover, fieldset[disabled] .shop-container .btn-info:focus, fieldset[disabled] .shop-container .btn-info.focus {\n background-color: #5bc0de;\n border-color: rgb(69.7715736041, 183.845177665, 217.7284263959);\n}\n.shop-container .btn-info .badge {\n color: #5bc0de;\n background-color: #fff;\n}\n.shop-container .btn-warning {\n color: #fff;\n background-color: #f0ad4e;\n border-color: rgb(238.0078125, 162.109375, 54.4921875);\n}\n.shop-container .btn-warning:focus, .shop-container .btn-warning.focus {\n color: #fff;\n background-color: rgb(236.015625, 151.21875, 30.984375);\n border-color: rgb(152.109375, 94.53125, 12.890625);\n}\n.shop-container .btn-warning:hover {\n color: #fff;\n background-color: rgb(236.015625, 151.21875, 30.984375);\n border-color: rgb(213.2296875, 132.515625, 18.0703125);\n}\n.shop-container .btn-warning:active, .shop-container .btn-warning.active, .open > .shop-container .btn-warning.dropdown-toggle {\n color: #fff;\n background-color: rgb(236.015625, 151.21875, 30.984375);\n background-image: none;\n border-color: rgb(213.2296875, 132.515625, 18.0703125);\n}\n.shop-container .btn-warning:active:hover, .shop-container .btn-warning:active:focus, .shop-container .btn-warning:active.focus, .shop-container .btn-warning.active:hover, .shop-container .btn-warning.active:focus, .shop-container .btn-warning.active.focus, .open > .shop-container .btn-warning.dropdown-toggle:hover, .open > .shop-container .btn-warning.dropdown-toggle:focus, .open > .shop-container .btn-warning.dropdown-toggle.focus {\n color: #fff;\n background-color: rgb(213.2296875, 132.515625, 18.0703125);\n border-color: rgb(152.109375, 94.53125, 12.890625);\n}\n.shop-container .btn-warning.disabled:hover, .shop-container .btn-warning.disabled:focus, .shop-container .btn-warning.disabled.focus, .shop-container .btn-warning[disabled]:hover, .shop-container .btn-warning[disabled]:focus, .shop-container .btn-warning[disabled].focus, fieldset[disabled] .shop-container .btn-warning:hover, fieldset[disabled] .shop-container .btn-warning:focus, fieldset[disabled] .shop-container .btn-warning.focus {\n background-color: #f0ad4e;\n border-color: rgb(238.0078125, 162.109375, 54.4921875);\n}\n.shop-container .btn-warning .badge {\n color: #f0ad4e;\n background-color: #fff;\n}\n.shop-container .btn-danger {\n color: #fff;\n background-color: #d9534f;\n border-color: rgb(212.4719626168, 62.5046728972, 58.0280373832);\n}\n.shop-container .btn-danger:focus, .shop-container .btn-danger.focus {\n color: #fff;\n background-color: rgb(201.4953271028, 48.0841121495, 43.5046728972);\n border-color: rgb(117.6074766355, 28.0654205607, 25.3925233645);\n}\n.shop-container .btn-danger:hover {\n color: #fff;\n background-color: rgb(201.4953271028, 48.0841121495, 43.5046728972);\n border-color: rgb(172.1345794393, 41.0775700935, 37.1654205607);\n}\n.shop-container .btn-danger:active, .shop-container .btn-danger.active, .open > .shop-container .btn-danger.dropdown-toggle {\n color: #fff;\n background-color: rgb(201.4953271028, 48.0841121495, 43.5046728972);\n background-image: none;\n border-color: rgb(172.1345794393, 41.0775700935, 37.1654205607);\n}\n.shop-container .btn-danger:active:hover, .shop-container .btn-danger:active:focus, .shop-container .btn-danger:active.focus, .shop-container .btn-danger.active:hover, .shop-container .btn-danger.active:focus, .shop-container .btn-danger.active.focus, .open > .shop-container .btn-danger.dropdown-toggle:hover, .open > .shop-container .btn-danger.dropdown-toggle:focus, .open > .shop-container .btn-danger.dropdown-toggle.focus {\n color: #fff;\n background-color: rgb(172.1345794393, 41.0775700935, 37.1654205607);\n border-color: rgb(117.6074766355, 28.0654205607, 25.3925233645);\n}\n.shop-container .btn-danger.disabled:hover, .shop-container .btn-danger.disabled:focus, .shop-container .btn-danger.disabled.focus, .shop-container .btn-danger[disabled]:hover, .shop-container .btn-danger[disabled]:focus, .shop-container .btn-danger[disabled].focus, fieldset[disabled] .shop-container .btn-danger:hover, fieldset[disabled] .shop-container .btn-danger:focus, fieldset[disabled] .shop-container .btn-danger.focus {\n background-color: #d9534f;\n border-color: rgb(212.4719626168, 62.5046728972, 58.0280373832);\n}\n.shop-container .btn-danger .badge {\n color: #d9534f;\n background-color: #fff;\n}\n.shop-container .btn-link {\n font-weight: 400;\n color: rgb(51.4340909091, 122.2772727273, 183.4159090909);\n border-radius: 0;\n}\n.shop-container .btn-link, .shop-container .btn-link:active, .shop-container .btn-link.active, .shop-container .btn-link[disabled], fieldset[disabled] .shop-container .btn-link {\n background-color: transparent;\n box-shadow: none;\n}\n.shop-container .btn-link, .shop-container .btn-link:hover, .shop-container .btn-link:focus, .shop-container .btn-link:active {\n border-color: transparent;\n}\n.shop-container .btn-link:hover, .shop-container .btn-link:focus {\n color: rgb(34.6799586777, 82.4466942149, 123.6700413223);\n text-decoration: underline;\n background-color: transparent;\n}\n.shop-container .btn-link[disabled]:hover, .shop-container .btn-link[disabled]:focus, fieldset[disabled] .shop-container .btn-link:hover, fieldset[disabled] .shop-container .btn-link:focus {\n color: rgb(119.085, 119.085, 119.085);\n text-decoration: none;\n}\n.shop-container .btn-lg, .shop-container .btn-group-lg > .btn {\n padding: 10px 16px;\n font-size: 18px;\n line-height: 1.3333333;\n border-radius: 6px;\n}\n.shop-container .btn-sm, .shop-container .btn-group-sm > .btn {\n padding: 5px 10px;\n font-size: 12px;\n line-height: 1.5;\n border-radius: 3px;\n}\n.shop-container .btn-xs, .shop-container .btn-group-xs > .btn {\n padding: 1px 5px;\n font-size: 12px;\n line-height: 1.5;\n border-radius: 3px;\n}\n.shop-container .btn-block {\n display: block;\n width: 100%;\n}\n.shop-container .btn-block + .btn-block {\n margin-top: 5px;\n}\n.shop-container input[type=submit].btn-block,\n.shop-container input[type=reset].btn-block,\n.shop-container input[type=button].btn-block {\n width: 100%;\n}\n.shop-container .fade {\n opacity: 0;\n transition: opacity 0.15s linear;\n}\n.shop-container .fade.in {\n opacity: 1;\n}\n.shop-container .collapse {\n display: none;\n}\n.shop-container .collapse.in {\n display: block;\n}\n.shop-container tr.collapse.in {\n display: table-row;\n}\n.shop-container tbody.collapse.in {\n display: table-row-group;\n}\n.shop-container .collapsing {\n position: relative;\n height: 0;\n overflow: hidden;\n transition-property: height, visibility;\n transition-duration: 0.35s;\n transition-timing-function: ease;\n}\n.shop-container .caret {\n display: inline-block;\n width: 0;\n height: 0;\n margin-left: 2px;\n vertical-align: middle;\n border-top: 4px dashed;\n border-top: 4px solid \\9 ;\n border-right: 4px solid transparent;\n border-left: 4px solid transparent;\n}\n.shop-container .dropup,\n.shop-container .dropdown {\n position: relative;\n}\n.shop-container .dropdown-toggle:focus {\n outline: 0;\n}\n.shop-container .dropdown-menu {\n position: absolute;\n top: 100%;\n left: 0;\n z-index: 1000;\n display: none;\n float: left;\n min-width: 160px;\n padding: 5px 0;\n margin: 2px 0 0;\n font-size: 14px;\n text-align: left;\n list-style: none;\n background-color: #fff;\n background-clip: padding-box;\n border: 1px solid #ccc;\n border: 1px solid rgba(0, 0, 0, 0.15);\n border-radius: 4px;\n box-shadow: 0 6px 12px rgba(0, 0, 0, 0.175);\n}\n.shop-container .dropdown-menu.pull-right {\n right: 0;\n left: auto;\n}\n.shop-container .dropdown-menu .divider {\n height: 1px;\n margin: 9px 0;\n overflow: hidden;\n background-color: #e5e5e5;\n}\n.shop-container .dropdown-menu > li > a {\n display: block;\n padding: 3px 20px;\n clear: both;\n font-weight: 400;\n line-height: 1.428571429;\n color: #333333;\n white-space: nowrap;\n}\n.shop-container .dropdown-menu > li > a:hover, .shop-container .dropdown-menu > li > a:focus {\n color: rgb(38.25, 38.25, 38.25);\n text-decoration: none;\n background-color: #f5f5f5;\n}\n.shop-container .dropdown-menu > .active > a, .shop-container .dropdown-menu > .active > a:hover, .shop-container .dropdown-menu > .active > a:focus {\n color: #fff;\n text-decoration: none;\n background-color: rgb(51.4340909091, 122.2772727273, 183.4159090909);\n outline: 0;\n}\n.shop-container .dropdown-menu > .disabled > a, .shop-container .dropdown-menu > .disabled > a:hover, .shop-container .dropdown-menu > .disabled > a:focus {\n color: rgb(119.085, 119.085, 119.085);\n}\n.shop-container .dropdown-menu > .disabled > a:hover, .shop-container .dropdown-menu > .disabled > a:focus {\n text-decoration: none;\n cursor: not-allowed;\n background-color: transparent;\n background-image: none;\n filter: progid:DXImageTransform.Microsoft.gradient(enabled = false);\n}\n.shop-container .open > .dropdown-menu {\n display: block;\n}\n.shop-container .open > a {\n outline: 0;\n}\n.shop-container .dropdown-menu-right {\n right: 0;\n left: auto;\n}\n.shop-container .dropdown-menu-left {\n right: auto;\n left: 0;\n}\n.shop-container .dropdown-header {\n display: block;\n padding: 3px 20px;\n font-size: 12px;\n line-height: 1.428571429;\n color: rgb(119.085, 119.085, 119.085);\n white-space: nowrap;\n}\n.shop-container .dropdown-backdrop {\n position: fixed;\n top: 0;\n right: 0;\n bottom: 0;\n left: 0;\n z-index: 990;\n}\n.shop-container .pull-right > .dropdown-menu {\n right: 0;\n left: auto;\n}\n.shop-container .dropup .caret,\n.shop-container .navbar-fixed-bottom .dropdown .caret {\n content: \"\";\n border-top: 0;\n border-bottom: 4px dashed;\n border-bottom: 4px solid \\9 ;\n}\n.shop-container .dropup .dropdown-menu,\n.shop-container .navbar-fixed-bottom .dropdown .dropdown-menu {\n top: auto;\n bottom: 100%;\n margin-bottom: 2px;\n}\n@media (min-width: 768px) {\n .shop-container .navbar-right .dropdown-menu {\n right: 0;\n left: auto;\n }\n .shop-container .navbar-right .dropdown-menu-left {\n left: 0;\n right: auto;\n }\n}\n.shop-container .btn-group,\n.shop-container .btn-group-vertical {\n position: relative;\n display: inline-block;\n vertical-align: middle;\n}\n.shop-container .btn-group > .btn,\n.shop-container .btn-group-vertical > .btn {\n position: relative;\n float: left;\n}\n.shop-container .btn-group > .btn:hover, .shop-container .btn-group > .btn:focus, .shop-container .btn-group > .btn:active, .shop-container .btn-group > .btn.active,\n.shop-container .btn-group-vertical > .btn:hover,\n.shop-container .btn-group-vertical > .btn:focus,\n.shop-container .btn-group-vertical > .btn:active,\n.shop-container .btn-group-vertical > .btn.active {\n z-index: 2;\n}\n.shop-container .btn-group .btn + .btn,\n.shop-container .btn-group .btn + .btn-group,\n.shop-container .btn-group .btn-group + .btn,\n.shop-container .btn-group .btn-group + .btn-group {\n margin-left: -1px;\n}\n.shop-container .btn-toolbar {\n margin-left: -5px;\n}\n.shop-container .btn-toolbar:before, .shop-container .btn-toolbar:after {\n display: table;\n content: \" \";\n}\n.shop-container .btn-toolbar:after {\n clear: both;\n}\n.shop-container .btn-toolbar .btn,\n.shop-container .btn-toolbar .btn-group,\n.shop-container .btn-toolbar .input-group {\n float: left;\n}\n.shop-container .btn-toolbar > .btn,\n.shop-container .btn-toolbar > .btn-group,\n.shop-container .btn-toolbar > .input-group {\n margin-left: 5px;\n}\n.shop-container .btn-group > .btn:not(:first-child):not(:last-child):not(.dropdown-toggle) {\n border-radius: 0;\n}\n.shop-container .btn-group > .btn:first-child {\n margin-left: 0;\n}\n.shop-container .btn-group > .btn:first-child:not(:last-child):not(.dropdown-toggle) {\n border-top-right-radius: 0;\n border-bottom-right-radius: 0;\n}\n.shop-container .btn-group > .btn:last-child:not(:first-child),\n.shop-container .btn-group > .dropdown-toggle:not(:first-child) {\n border-top-left-radius: 0;\n border-bottom-left-radius: 0;\n}\n.shop-container .btn-group > .btn-group {\n float: left;\n}\n.shop-container .btn-group > .btn-group:not(:first-child):not(:last-child) > .btn {\n border-radius: 0;\n}\n.shop-container .btn-group > .btn-group:first-child:not(:last-child) > .btn:last-child,\n.shop-container .btn-group > .btn-group:first-child:not(:last-child) > .dropdown-toggle {\n border-top-right-radius: 0;\n border-bottom-right-radius: 0;\n}\n.shop-container .btn-group > .btn-group:last-child:not(:first-child) > .btn:first-child {\n border-top-left-radius: 0;\n border-bottom-left-radius: 0;\n}\n.shop-container .btn-group .dropdown-toggle:active,\n.shop-container .btn-group.open .dropdown-toggle {\n outline: 0;\n}\n.shop-container .btn-group > .btn + .dropdown-toggle {\n padding-right: 8px;\n padding-left: 8px;\n}\n.shop-container .btn-group > .btn-lg + .dropdown-toggle, .shop-container .btn-group.btn-group-lg > .btn + .dropdown-toggle {\n padding-right: 12px;\n padding-left: 12px;\n}\n.shop-container .btn-group.open .dropdown-toggle {\n box-shadow: inset 0 3px 5px rgba(0, 0, 0, 0.125);\n}\n.shop-container .btn-group.open .dropdown-toggle.btn-link {\n box-shadow: none;\n}\n.shop-container .btn .caret {\n margin-left: 0;\n}\n.shop-container .btn-lg .caret, .shop-container .btn-group-lg > .btn .caret {\n border-width: 5px 5px 0;\n border-bottom-width: 0;\n}\n.shop-container .dropup .btn-lg .caret, .shop-container .dropup .btn-group-lg > .btn .caret {\n border-width: 0 5px 5px;\n}\n.shop-container .btn-group-vertical > .btn,\n.shop-container .btn-group-vertical > .btn-group,\n.shop-container .btn-group-vertical > .btn-group > .btn {\n display: block;\n float: none;\n width: 100%;\n max-width: 100%;\n}\n.shop-container .btn-group-vertical > .btn-group:before, .shop-container .btn-group-vertical > .btn-group:after {\n display: table;\n content: \" \";\n}\n.shop-container .btn-group-vertical > .btn-group:after {\n clear: both;\n}\n.shop-container .btn-group-vertical > .btn-group > .btn {\n float: none;\n}\n.shop-container .btn-group-vertical > .btn + .btn,\n.shop-container .btn-group-vertical > .btn + .btn-group,\n.shop-container .btn-group-vertical > .btn-group + .btn,\n.shop-container .btn-group-vertical > .btn-group + .btn-group {\n margin-top: -1px;\n margin-left: 0;\n}\n.shop-container .btn-group-vertical > .btn:not(:first-child):not(:last-child) {\n border-radius: 0;\n}\n.shop-container .btn-group-vertical > .btn:first-child:not(:last-child) {\n border-top-left-radius: 4px;\n border-top-right-radius: 4px;\n border-bottom-right-radius: 0;\n border-bottom-left-radius: 0;\n}\n.shop-container .btn-group-vertical > .btn:last-child:not(:first-child) {\n border-top-left-radius: 0;\n border-top-right-radius: 0;\n border-bottom-right-radius: 4px;\n border-bottom-left-radius: 4px;\n}\n.shop-container .btn-group-vertical > .btn-group:not(:first-child):not(:last-child) > .btn {\n border-radius: 0;\n}\n.shop-container .btn-group-vertical > .btn-group:first-child:not(:last-child) > .btn:last-child,\n.shop-container .btn-group-vertical > .btn-group:first-child:not(:last-child) > .dropdown-toggle {\n border-bottom-right-radius: 0;\n border-bottom-left-radius: 0;\n}\n.shop-container .btn-group-vertical > .btn-group:last-child:not(:first-child) > .btn:first-child {\n border-top-left-radius: 0;\n border-top-right-radius: 0;\n}\n.shop-container .btn-group-justified {\n display: table;\n width: 100%;\n table-layout: fixed;\n border-collapse: separate;\n}\n.shop-container .btn-group-justified > .btn,\n.shop-container .btn-group-justified > .btn-group {\n display: table-cell;\n float: none;\n width: 1%;\n}\n.shop-container .btn-group-justified > .btn-group .btn {\n width: 100%;\n}\n.shop-container .btn-group-justified > .btn-group .dropdown-menu {\n left: auto;\n}\n.shop-container [data-toggle=buttons] > .btn input[type=radio],\n.shop-container [data-toggle=buttons] > .btn input[type=checkbox],\n.shop-container [data-toggle=buttons] > .btn-group > .btn input[type=radio],\n.shop-container [data-toggle=buttons] > .btn-group > .btn input[type=checkbox] {\n position: absolute;\n clip: rect(0, 0, 0, 0);\n pointer-events: none;\n}\n.shop-container .input-group {\n position: relative;\n display: table;\n border-collapse: separate;\n}\n.shop-container .input-group[class*=col-] {\n float: none;\n padding-right: 0;\n padding-left: 0;\n}\n.shop-container .input-group .form-control {\n position: relative;\n z-index: 2;\n float: left;\n width: 100%;\n margin-bottom: 0;\n}\n.shop-container .input-group .form-control:focus {\n z-index: 3;\n}\n.shop-container .input-group-addon,\n.shop-container .input-group-btn,\n.shop-container .input-group .form-control {\n display: table-cell;\n}\n.shop-container .input-group-addon:not(:first-child):not(:last-child),\n.shop-container .input-group-btn:not(:first-child):not(:last-child),\n.shop-container .input-group .form-control:not(:first-child):not(:last-child) {\n border-radius: 0;\n}\n.shop-container .input-group-addon,\n.shop-container .input-group-btn {\n width: 1%;\n white-space: nowrap;\n vertical-align: middle;\n}\n.shop-container .input-group-addon {\n padding: 6px 12px;\n font-size: 14px;\n font-weight: 400;\n line-height: 1;\n color: rgb(85.425, 85.425, 85.425);\n text-align: center;\n background-color: rgb(238.425, 238.425, 238.425);\n border: 1px solid #ccc;\n border-radius: 4px;\n}\n.shop-container .input-group-addon.input-sm,\n.shop-container .input-group-sm > .input-group-addon,\n.shop-container .input-group-sm > .input-group-btn > .input-group-addon.btn {\n padding: 5px 10px;\n font-size: 12px;\n border-radius: 3px;\n}\n.shop-container .input-group-addon.input-lg,\n.shop-container .input-group-lg > .input-group-addon,\n.shop-container .input-group-lg > .input-group-btn > .input-group-addon.btn {\n padding: 10px 16px;\n font-size: 18px;\n border-radius: 6px;\n}\n.shop-container .input-group-addon input[type=radio],\n.shop-container .input-group-addon input[type=checkbox] {\n margin-top: 0;\n}\n.shop-container .input-group .form-control:first-child,\n.shop-container .input-group-addon:first-child,\n.shop-container .input-group-btn:first-child > .btn,\n.shop-container .input-group-btn:first-child > .btn-group > .btn,\n.shop-container .input-group-btn:first-child > .dropdown-toggle,\n.shop-container .input-group-btn:last-child > .btn:not(:last-child):not(.dropdown-toggle),\n.shop-container .input-group-btn:last-child > .btn-group:not(:last-child) > .btn {\n border-top-right-radius: 0;\n border-bottom-right-radius: 0;\n}\n.shop-container .input-group-addon:first-child {\n border-right: 0;\n}\n.shop-container .input-group .form-control:last-child,\n.shop-container .input-group-addon:last-child,\n.shop-container .input-group-btn:last-child > .btn,\n.shop-container .input-group-btn:last-child > .btn-group > .btn,\n.shop-container .input-group-btn:last-child > .dropdown-toggle,\n.shop-container .input-group-btn:first-child > .btn:not(:first-child),\n.shop-container .input-group-btn:first-child > .btn-group:not(:first-child) > .btn {\n border-top-left-radius: 0;\n border-bottom-left-radius: 0;\n}\n.shop-container .input-group-addon:last-child {\n border-left: 0;\n}\n.shop-container .input-group-btn {\n position: relative;\n font-size: 0;\n white-space: nowrap;\n}\n.shop-container .input-group-btn > .btn {\n position: relative;\n}\n.shop-container .input-group-btn > .btn + .btn {\n margin-left: -1px;\n}\n.shop-container .input-group-btn > .btn:hover, .shop-container .input-group-btn > .btn:focus, .shop-container .input-group-btn > .btn:active {\n z-index: 2;\n}\n.shop-container .input-group-btn:first-child > .btn,\n.shop-container .input-group-btn:first-child > .btn-group {\n margin-right: -1px;\n}\n.shop-container .input-group-btn:last-child > .btn,\n.shop-container .input-group-btn:last-child > .btn-group {\n z-index: 2;\n margin-left: -1px;\n}\n.shop-container .nav {\n padding-left: 0;\n margin-bottom: 0;\n list-style: none;\n}\n.shop-container .nav:before, .shop-container .nav:after {\n display: table;\n content: \" \";\n}\n.shop-container .nav:after {\n clear: both;\n}\n.shop-container .nav > li {\n position: relative;\n display: block;\n}\n.shop-container .nav > li > a {\n position: relative;\n display: block;\n padding: 10px 15px;\n}\n.shop-container .nav > li > a:hover, .shop-container .nav > li > a:focus {\n text-decoration: none;\n background-color: rgb(238.425, 238.425, 238.425);\n}\n.shop-container .nav > li.disabled > a {\n color: rgb(119.085, 119.085, 119.085);\n}\n.shop-container .nav > li.disabled > a:hover, .shop-container .nav > li.disabled > a:focus {\n color: rgb(119.085, 119.085, 119.085);\n text-decoration: none;\n cursor: not-allowed;\n background-color: transparent;\n}\n.shop-container .nav .open > a, .shop-container .nav .open > a:hover, .shop-container .nav .open > a:focus {\n background-color: rgb(238.425, 238.425, 238.425);\n border-color: rgb(51.4340909091, 122.2772727273, 183.4159090909);\n}\n.shop-container .nav .nav-divider {\n height: 1px;\n margin: 9px 0;\n overflow: hidden;\n background-color: #e5e5e5;\n}\n.shop-container .nav > li > a > img {\n max-width: none;\n}\n.shop-container .nav-tabs {\n border-bottom: 1px solid #ddd;\n}\n.shop-container .nav-tabs > li {\n float: left;\n margin-bottom: -1px;\n}\n.shop-container .nav-tabs > li > a {\n margin-right: 2px;\n line-height: 1.428571429;\n border: 1px solid transparent;\n border-radius: 4px 4px 0 0;\n}\n.shop-container .nav-tabs > li > a:hover {\n border-color: rgb(238.425, 238.425, 238.425) rgb(238.425, 238.425, 238.425) #ddd;\n}\n.shop-container .nav-tabs > li.active > a, .shop-container .nav-tabs > li.active > a:hover, .shop-container .nav-tabs > li.active > a:focus {\n color: rgb(85.425, 85.425, 85.425);\n cursor: default;\n background-color: #fff;\n border: 1px solid #ddd;\n border-bottom-color: transparent;\n}\n.shop-container .nav-pills > li {\n float: left;\n}\n.shop-container .nav-pills > li > a {\n border-radius: 4px;\n}\n.shop-container .nav-pills > li + li {\n margin-left: 2px;\n}\n.shop-container .nav-pills > li.active > a, .shop-container .nav-pills > li.active > a:hover, .shop-container .nav-pills > li.active > a:focus {\n color: #fff;\n background-color: rgb(51.4340909091, 122.2772727273, 183.4159090909);\n}\n.shop-container .nav-stacked > li {\n float: none;\n}\n.shop-container .nav-stacked > li + li {\n margin-top: 2px;\n margin-left: 0;\n}\n.shop-container .nav-justified, .shop-container .nav-tabs.nav-justified {\n width: 100%;\n}\n.shop-container .nav-justified > li, .shop-container .nav-tabs.nav-justified > li {\n float: none;\n}\n.shop-container .nav-justified > li > a, .shop-container .nav-tabs.nav-justified > li > a {\n margin-bottom: 5px;\n text-align: center;\n}\n.shop-container .nav-justified > .dropdown .dropdown-menu {\n top: auto;\n left: auto;\n}\n@media (min-width: 768px) {\n .shop-container .nav-justified > li, .shop-container .nav-tabs.nav-justified > li {\n display: table-cell;\n width: 1%;\n }\n .shop-container .nav-justified > li > a, .shop-container .nav-tabs.nav-justified > li > a {\n margin-bottom: 0;\n }\n}\n.shop-container .nav-tabs-justified, .shop-container .nav-tabs.nav-justified {\n border-bottom: 0;\n}\n.shop-container .nav-tabs-justified > li > a, .shop-container .nav-tabs.nav-justified > li > a {\n margin-right: 0;\n border-radius: 4px;\n}\n.shop-container .nav-tabs-justified > .active > a, .shop-container .nav-tabs.nav-justified > .active > a,\n.shop-container .nav-tabs-justified > .active > a:hover,\n.shop-container .nav-tabs-justified > .active > a:focus {\n border: 1px solid #ddd;\n}\n@media (min-width: 768px) {\n .shop-container .nav-tabs-justified > li > a, .shop-container .nav-tabs.nav-justified > li > a {\n border-bottom: 1px solid #ddd;\n border-radius: 4px 4px 0 0;\n }\n .shop-container .nav-tabs-justified > .active > a, .shop-container .nav-tabs.nav-justified > .active > a,\n .shop-container .nav-tabs-justified > .active > a:hover,\n .shop-container .nav-tabs-justified > .active > a:focus {\n border-bottom-color: #fff;\n }\n}\n.shop-container .tab-content > .tab-pane {\n display: none;\n}\n.shop-container .tab-content > .active {\n display: block;\n}\n.shop-container .nav-tabs .dropdown-menu {\n margin-top: -1px;\n border-top-left-radius: 0;\n border-top-right-radius: 0;\n}\n.shop-container .navbar {\n position: relative;\n min-height: 50px;\n margin-bottom: 20px;\n border: 1px solid transparent;\n}\n.shop-container .navbar:before, .shop-container .navbar:after {\n display: table;\n content: \" \";\n}\n.shop-container .navbar:after {\n clear: both;\n}\n@media (min-width: 768px) {\n .shop-container .navbar {\n border-radius: 4px;\n }\n}\n.shop-container .navbar-header:before, .shop-container .navbar-header:after {\n display: table;\n content: \" \";\n}\n.shop-container .navbar-header:after {\n clear: both;\n}\n@media (min-width: 768px) {\n .shop-container .navbar-header {\n float: left;\n }\n}\n.shop-container .navbar-collapse {\n padding-right: 15px;\n padding-left: 15px;\n overflow-x: visible;\n border-top: 1px solid transparent;\n box-shadow: inset 0 1px 0 rgba(255, 255, 255, 0.1);\n -webkit-overflow-scrolling: touch;\n}\n.shop-container .navbar-collapse:before, .shop-container .navbar-collapse:after {\n display: table;\n content: \" \";\n}\n.shop-container .navbar-collapse:after {\n clear: both;\n}\n.shop-container .navbar-collapse.in {\n overflow-y: auto;\n}\n@media (min-width: 768px) {\n .shop-container .navbar-collapse {\n width: auto;\n border-top: 0;\n box-shadow: none;\n }\n .shop-container .navbar-collapse.collapse {\n display: block !important;\n height: auto !important;\n padding-bottom: 0;\n overflow: visible !important;\n }\n .shop-container .navbar-collapse.in {\n overflow-y: visible;\n }\n .navbar-fixed-top .shop-container .navbar-collapse, .navbar-static-top .shop-container .navbar-collapse, .navbar-fixed-bottom .shop-container .navbar-collapse {\n padding-right: 0;\n padding-left: 0;\n }\n}\n.shop-container .navbar-fixed-top,\n.shop-container .navbar-fixed-bottom {\n position: fixed;\n right: 0;\n left: 0;\n z-index: 1030;\n}\n.shop-container .navbar-fixed-top .navbar-collapse,\n.shop-container .navbar-fixed-bottom .navbar-collapse {\n max-height: 340px;\n}\n@media (max-device-width: 480px) and (orientation: landscape) {\n .shop-container .navbar-fixed-top .navbar-collapse,\n .shop-container .navbar-fixed-bottom .navbar-collapse {\n max-height: 200px;\n }\n}\n@media (min-width: 768px) {\n .shop-container .navbar-fixed-top,\n .shop-container .navbar-fixed-bottom {\n border-radius: 0;\n }\n}\n.shop-container .navbar-fixed-top {\n top: 0;\n border-width: 0 0 1px;\n}\n.shop-container .navbar-fixed-bottom {\n bottom: 0;\n margin-bottom: 0;\n border-width: 1px 0 0;\n}\n.shop-container .container > .navbar-header,\n.shop-container .container > .navbar-collapse,\n.shop-container .container-fluid > .navbar-header,\n.shop-container .container-fluid > .navbar-collapse {\n margin-right: -15px;\n margin-left: -15px;\n}\n@media (min-width: 768px) {\n .shop-container .container > .navbar-header,\n .shop-container .container > .navbar-collapse,\n .shop-container .container-fluid > .navbar-header,\n .shop-container .container-fluid > .navbar-collapse {\n margin-right: 0;\n margin-left: 0;\n }\n}\n.shop-container .navbar-static-top {\n z-index: 1000;\n border-width: 0 0 1px;\n}\n@media (min-width: 768px) {\n .shop-container .navbar-static-top {\n border-radius: 0;\n }\n}\n.shop-container .navbar-brand {\n float: left;\n height: 50px;\n padding: 15px 15px;\n font-size: 18px;\n line-height: 20px;\n}\n.shop-container .navbar-brand:hover, .shop-container .navbar-brand:focus {\n text-decoration: none;\n}\n.shop-container .navbar-brand > img {\n display: block;\n}\n@media (min-width: 768px) {\n .navbar > .container .shop-container .navbar-brand, .navbar > .container-fluid .shop-container .navbar-brand {\n margin-left: -15px;\n }\n}\n.shop-container .navbar-toggle {\n position: relative;\n float: right;\n padding: 9px 10px;\n margin-right: 15px;\n margin-top: 8px;\n margin-bottom: 8px;\n background-color: transparent;\n background-image: none;\n border: 1px solid transparent;\n border-radius: 4px;\n}\n.shop-container .navbar-toggle:focus {\n outline: 0;\n}\n.shop-container .navbar-toggle .icon-bar {\n display: block;\n width: 22px;\n height: 2px;\n border-radius: 1px;\n}\n.shop-container .navbar-toggle .icon-bar + .icon-bar {\n margin-top: 4px;\n}\n@media (min-width: 768px) {\n .shop-container .navbar-toggle {\n display: none;\n }\n}\n.shop-container .navbar-nav {\n margin: 7.5px -15px;\n}\n.shop-container .navbar-nav > li > a {\n padding-top: 10px;\n padding-bottom: 10px;\n line-height: 20px;\n}\n@media (max-width: 767px) {\n .shop-container .navbar-nav .open .dropdown-menu {\n position: static;\n float: none;\n width: auto;\n margin-top: 0;\n background-color: transparent;\n border: 0;\n box-shadow: none;\n }\n .shop-container .navbar-nav .open .dropdown-menu > li > a,\n .shop-container .navbar-nav .open .dropdown-menu .dropdown-header {\n padding: 5px 15px 5px 25px;\n }\n .shop-container .navbar-nav .open .dropdown-menu > li > a {\n line-height: 20px;\n }\n .shop-container .navbar-nav .open .dropdown-menu > li > a:hover, .shop-container .navbar-nav .open .dropdown-menu > li > a:focus {\n background-image: none;\n }\n}\n@media (min-width: 768px) {\n .shop-container .navbar-nav {\n float: left;\n margin: 0;\n }\n .shop-container .navbar-nav > li {\n float: left;\n }\n .shop-container .navbar-nav > li > a {\n padding-top: 15px;\n padding-bottom: 15px;\n }\n}\n.shop-container .navbar-form {\n padding: 10px 15px;\n margin-right: -15px;\n margin-left: -15px;\n border-top: 1px solid transparent;\n border-bottom: 1px solid transparent;\n box-shadow: inset 0 1px 0 rgba(255, 255, 255, 0.1), 0 1px 0 rgba(255, 255, 255, 0.1);\n margin-top: 8px;\n margin-bottom: 8px;\n}\n@media (min-width: 768px) {\n .shop-container .navbar-form .form-group {\n display: inline-block;\n margin-bottom: 0;\n vertical-align: middle;\n }\n .shop-container .navbar-form .form-control {\n display: inline-block;\n width: auto;\n vertical-align: middle;\n }\n .shop-container .navbar-form .form-control-static {\n display: inline-block;\n }\n .shop-container .navbar-form .input-group {\n display: inline-table;\n vertical-align: middle;\n }\n .shop-container .navbar-form .input-group .input-group-addon,\n .shop-container .navbar-form .input-group .input-group-btn,\n .shop-container .navbar-form .input-group .form-control {\n width: auto;\n }\n .shop-container .navbar-form .input-group > .form-control {\n width: 100%;\n }\n .shop-container .navbar-form .control-label {\n margin-bottom: 0;\n vertical-align: middle;\n }\n .shop-container .navbar-form .radio,\n .shop-container .navbar-form .checkbox {\n display: inline-block;\n margin-top: 0;\n margin-bottom: 0;\n vertical-align: middle;\n }\n .shop-container .navbar-form .radio label,\n .shop-container .navbar-form .checkbox label {\n padding-left: 0;\n }\n .shop-container .navbar-form .radio input[type=radio],\n .shop-container .navbar-form .checkbox input[type=checkbox] {\n position: relative;\n margin-left: 0;\n }\n .shop-container .navbar-form .has-feedback .form-control-feedback {\n top: 0;\n }\n}\n@media (max-width: 767px) {\n .shop-container .navbar-form .form-group {\n margin-bottom: 5px;\n }\n .shop-container .navbar-form .form-group:last-child {\n margin-bottom: 0;\n }\n}\n@media (min-width: 768px) {\n .shop-container .navbar-form {\n width: auto;\n padding-top: 0;\n padding-bottom: 0;\n margin-right: 0;\n margin-left: 0;\n border: 0;\n box-shadow: none;\n }\n}\n.shop-container .navbar-nav > li > .dropdown-menu {\n margin-top: 0;\n border-top-left-radius: 0;\n border-top-right-radius: 0;\n}\n.shop-container .navbar-fixed-bottom .navbar-nav > li > .dropdown-menu {\n margin-bottom: 0;\n border-top-left-radius: 4px;\n border-top-right-radius: 4px;\n border-bottom-right-radius: 0;\n border-bottom-left-radius: 0;\n}\n.shop-container .navbar-btn {\n margin-top: 8px;\n margin-bottom: 8px;\n}\n.shop-container .navbar-btn.btn-sm, .shop-container .btn-group-sm > .navbar-btn.btn {\n margin-top: 10px;\n margin-bottom: 10px;\n}\n.shop-container .navbar-btn.btn-xs, .shop-container .btn-group-xs > .navbar-btn.btn {\n margin-top: 14px;\n margin-bottom: 14px;\n}\n.shop-container .navbar-text {\n margin-top: 15px;\n margin-bottom: 15px;\n}\n@media (min-width: 768px) {\n .shop-container .navbar-text {\n float: left;\n margin-right: 15px;\n margin-left: 15px;\n }\n}\n@media (min-width: 768px) {\n .shop-container .navbar-left {\n float: left !important;\n }\n .shop-container .navbar-right {\n float: right !important;\n margin-right: -15px;\n }\n .shop-container .navbar-right ~ .navbar-right {\n margin-right: 0;\n }\n}\n.shop-container .navbar-default {\n background-color: #f8f8f8;\n border-color: rgb(231.425, 231.425, 231.425);\n}\n.shop-container .navbar-default .navbar-brand {\n color: #777;\n}\n.shop-container .navbar-default .navbar-brand:hover, .shop-container .navbar-default .navbar-brand:focus {\n color: rgb(93.5, 93.5, 93.5);\n background-color: transparent;\n}\n.shop-container .navbar-default .navbar-text {\n color: #777;\n}\n.shop-container .navbar-default .navbar-nav > li > a {\n color: #777;\n}\n.shop-container .navbar-default .navbar-nav > li > a:hover, .shop-container .navbar-default .navbar-nav > li > a:focus {\n color: #333;\n background-color: transparent;\n}\n.shop-container .navbar-default .navbar-nav > .active > a, .shop-container .navbar-default .navbar-nav > .active > a:hover, .shop-container .navbar-default .navbar-nav > .active > a:focus {\n color: #555;\n background-color: rgb(231.425, 231.425, 231.425);\n}\n.shop-container .navbar-default .navbar-nav > .disabled > a, .shop-container .navbar-default .navbar-nav > .disabled > a:hover, .shop-container .navbar-default .navbar-nav > .disabled > a:focus {\n color: #ccc;\n background-color: transparent;\n}\n.shop-container .navbar-default .navbar-nav > .open > a, .shop-container .navbar-default .navbar-nav > .open > a:hover, .shop-container .navbar-default .navbar-nav > .open > a:focus {\n color: #555;\n background-color: rgb(231.425, 231.425, 231.425);\n}\n@media (max-width: 767px) {\n .shop-container .navbar-default .navbar-nav .open .dropdown-menu > li > a {\n color: #777;\n }\n .shop-container .navbar-default .navbar-nav .open .dropdown-menu > li > a:hover, .shop-container .navbar-default .navbar-nav .open .dropdown-menu > li > a:focus {\n color: #333;\n background-color: transparent;\n }\n .shop-container .navbar-default .navbar-nav .open .dropdown-menu > .active > a, .shop-container .navbar-default .navbar-nav .open .dropdown-menu > .active > a:hover, .shop-container .navbar-default .navbar-nav .open .dropdown-menu > .active > a:focus {\n color: #555;\n background-color: rgb(231.425, 231.425, 231.425);\n }\n .shop-container .navbar-default .navbar-nav .open .dropdown-menu > .disabled > a, .shop-container .navbar-default .navbar-nav .open .dropdown-menu > .disabled > a:hover, .shop-container .navbar-default .navbar-nav .open .dropdown-menu > .disabled > a:focus {\n color: #ccc;\n background-color: transparent;\n }\n}\n.shop-container .navbar-default .navbar-toggle {\n border-color: #ddd;\n}\n.shop-container .navbar-default .navbar-toggle:hover, .shop-container .navbar-default .navbar-toggle:focus {\n background-color: #ddd;\n}\n.shop-container .navbar-default .navbar-toggle .icon-bar {\n background-color: #888;\n}\n.shop-container .navbar-default .navbar-collapse,\n.shop-container .navbar-default .navbar-form {\n border-color: rgb(231.425, 231.425, 231.425);\n}\n.shop-container .navbar-default .navbar-link {\n color: #777;\n}\n.shop-container .navbar-default .navbar-link:hover {\n color: #333;\n}\n.shop-container .navbar-default .btn-link {\n color: #777;\n}\n.shop-container .navbar-default .btn-link:hover, .shop-container .navbar-default .btn-link:focus {\n color: #333;\n}\n.shop-container .navbar-default .btn-link[disabled]:hover, .shop-container .navbar-default .btn-link[disabled]:focus, fieldset[disabled] .shop-container .navbar-default .btn-link:hover, fieldset[disabled] .shop-container .navbar-default .btn-link:focus {\n color: #ccc;\n}\n.shop-container .navbar-inverse {\n background-color: #222;\n border-color: rgb(8.5, 8.5, 8.5);\n}\n.shop-container .navbar-inverse .navbar-brand {\n color: rgb(157.335, 157.335, 157.335);\n}\n.shop-container .navbar-inverse .navbar-brand:hover, .shop-container .navbar-inverse .navbar-brand:focus {\n color: #fff;\n background-color: transparent;\n}\n.shop-container .navbar-inverse .navbar-text {\n color: rgb(157.335, 157.335, 157.335);\n}\n.shop-container .navbar-inverse .navbar-nav > li > a {\n color: rgb(157.335, 157.335, 157.335);\n}\n.shop-container .navbar-inverse .navbar-nav > li > a:hover, .shop-container .navbar-inverse .navbar-nav > li > a:focus {\n color: #fff;\n background-color: transparent;\n}\n.shop-container .navbar-inverse .navbar-nav > .active > a, .shop-container .navbar-inverse .navbar-nav > .active > a:hover, .shop-container .navbar-inverse .navbar-nav > .active > a:focus {\n color: #fff;\n background-color: rgb(8.5, 8.5, 8.5);\n}\n.shop-container .navbar-inverse .navbar-nav > .disabled > a, .shop-container .navbar-inverse .navbar-nav > .disabled > a:hover, .shop-container .navbar-inverse .navbar-nav > .disabled > a:focus {\n color: #444;\n background-color: transparent;\n}\n.shop-container .navbar-inverse .navbar-nav > .open > a, .shop-container .navbar-inverse .navbar-nav > .open > a:hover, .shop-container .navbar-inverse .navbar-nav > .open > a:focus {\n color: #fff;\n background-color: rgb(8.5, 8.5, 8.5);\n}\n@media (max-width: 767px) {\n .shop-container .navbar-inverse .navbar-nav .open .dropdown-menu > .dropdown-header {\n border-color: rgb(8.5, 8.5, 8.5);\n }\n .shop-container .navbar-inverse .navbar-nav .open .dropdown-menu .divider {\n background-color: rgb(8.5, 8.5, 8.5);\n }\n .shop-container .navbar-inverse .navbar-nav .open .dropdown-menu > li > a {\n color: rgb(157.335, 157.335, 157.335);\n }\n .shop-container .navbar-inverse .navbar-nav .open .dropdown-menu > li > a:hover, .shop-container .navbar-inverse .navbar-nav .open .dropdown-menu > li > a:focus {\n color: #fff;\n background-color: transparent;\n }\n .shop-container .navbar-inverse .navbar-nav .open .dropdown-menu > .active > a, .shop-container .navbar-inverse .navbar-nav .open .dropdown-menu > .active > a:hover, .shop-container .navbar-inverse .navbar-nav .open .dropdown-menu > .active > a:focus {\n color: #fff;\n background-color: rgb(8.5, 8.5, 8.5);\n }\n .shop-container .navbar-inverse .navbar-nav .open .dropdown-menu > .disabled > a, .shop-container .navbar-inverse .navbar-nav .open .dropdown-menu > .disabled > a:hover, .shop-container .navbar-inverse .navbar-nav .open .dropdown-menu > .disabled > a:focus {\n color: #444;\n background-color: transparent;\n }\n}\n.shop-container .navbar-inverse .navbar-toggle {\n border-color: #333;\n}\n.shop-container .navbar-inverse .navbar-toggle:hover, .shop-container .navbar-inverse .navbar-toggle:focus {\n background-color: #333;\n}\n.shop-container .navbar-inverse .navbar-toggle .icon-bar {\n background-color: #fff;\n}\n.shop-container .navbar-inverse .navbar-collapse,\n.shop-container .navbar-inverse .navbar-form {\n border-color: rgb(16.15, 16.15, 16.15);\n}\n.shop-container .navbar-inverse .navbar-link {\n color: rgb(157.335, 157.335, 157.335);\n}\n.shop-container .navbar-inverse .navbar-link:hover {\n color: #fff;\n}\n.shop-container .navbar-inverse .btn-link {\n color: rgb(157.335, 157.335, 157.335);\n}\n.shop-container .navbar-inverse .btn-link:hover, .shop-container .navbar-inverse .btn-link:focus {\n color: #fff;\n}\n.shop-container .navbar-inverse .btn-link[disabled]:hover, .shop-container .navbar-inverse .btn-link[disabled]:focus, fieldset[disabled] .shop-container .navbar-inverse .btn-link:hover, fieldset[disabled] .shop-container .navbar-inverse .btn-link:focus {\n color: #444;\n}\n.shop-container .breadcrumb {\n padding: 8px 15px;\n margin-bottom: 20px;\n list-style: none;\n background-color: #f5f5f5;\n border-radius: 4px;\n}\n.shop-container .breadcrumb > li {\n display: inline-block;\n}\n.shop-container .breadcrumb > li + li:before {\n padding: 0 5px;\n color: #ccc;\n content: \"/ \";\n}\n.shop-container .breadcrumb > .active {\n color: rgb(119.085, 119.085, 119.085);\n}\n.shop-container .pagination {\n display: inline-block;\n padding-left: 0;\n margin: 20px 0;\n border-radius: 4px;\n}\n.shop-container .pagination > li {\n display: inline;\n}\n.shop-container .pagination > li > a,\n.shop-container .pagination > li > span {\n position: relative;\n float: left;\n padding: 6px 12px;\n margin-left: -1px;\n line-height: 1.428571429;\n color: rgb(51.4340909091, 122.2772727273, 183.4159090909);\n text-decoration: none;\n background-color: #fff;\n border: 1px solid #ddd;\n}\n.shop-container .pagination > li > a:hover, .shop-container .pagination > li > a:focus,\n.shop-container .pagination > li > span:hover,\n.shop-container .pagination > li > span:focus {\n z-index: 2;\n color: rgb(34.6799586777, 82.4466942149, 123.6700413223);\n background-color: rgb(238.425, 238.425, 238.425);\n border-color: #ddd;\n}\n.shop-container .pagination > li:first-child > a,\n.shop-container .pagination > li:first-child > span {\n margin-left: 0;\n border-top-left-radius: 4px;\n border-bottom-left-radius: 4px;\n}\n.shop-container .pagination > li:last-child > a,\n.shop-container .pagination > li:last-child > span {\n border-top-right-radius: 4px;\n border-bottom-right-radius: 4px;\n}\n.shop-container .pagination > .active > a, .shop-container .pagination > .active > a:hover, .shop-container .pagination > .active > a:focus,\n.shop-container .pagination > .active > span,\n.shop-container .pagination > .active > span:hover,\n.shop-container .pagination > .active > span:focus {\n z-index: 3;\n color: #fff;\n cursor: default;\n background-color: rgb(51.4340909091, 122.2772727273, 183.4159090909);\n border-color: rgb(51.4340909091, 122.2772727273, 183.4159090909);\n}\n.shop-container .pagination > .disabled > span,\n.shop-container .pagination > .disabled > span:hover,\n.shop-container .pagination > .disabled > span:focus,\n.shop-container .pagination > .disabled > a,\n.shop-container .pagination > .disabled > a:hover,\n.shop-container .pagination > .disabled > a:focus {\n color: rgb(119.085, 119.085, 119.085);\n cursor: not-allowed;\n background-color: #fff;\n border-color: #ddd;\n}\n.shop-container .pagination-lg > li > a,\n.shop-container .pagination-lg > li > span {\n padding: 10px 16px;\n font-size: 18px;\n line-height: 1.3333333;\n}\n.shop-container .pagination-lg > li:first-child > a,\n.shop-container .pagination-lg > li:first-child > span {\n border-top-left-radius: 6px;\n border-bottom-left-radius: 6px;\n}\n.shop-container .pagination-lg > li:last-child > a,\n.shop-container .pagination-lg > li:last-child > span {\n border-top-right-radius: 6px;\n border-bottom-right-radius: 6px;\n}\n.shop-container .pagination-sm > li > a,\n.shop-container .pagination-sm > li > span {\n padding: 5px 10px;\n font-size: 12px;\n line-height: 1.5;\n}\n.shop-container .pagination-sm > li:first-child > a,\n.shop-container .pagination-sm > li:first-child > span {\n border-top-left-radius: 3px;\n border-bottom-left-radius: 3px;\n}\n.shop-container .pagination-sm > li:last-child > a,\n.shop-container .pagination-sm > li:last-child > span {\n border-top-right-radius: 3px;\n border-bottom-right-radius: 3px;\n}\n.shop-container .pager {\n padding-left: 0;\n margin: 20px 0;\n text-align: center;\n list-style: none;\n}\n.shop-container .pager:before, .shop-container .pager:after {\n display: table;\n content: \" \";\n}\n.shop-container .pager:after {\n clear: both;\n}\n.shop-container .pager li {\n display: inline;\n}\n.shop-container .pager li > a,\n.shop-container .pager li > span {\n display: inline-block;\n padding: 5px 14px;\n background-color: #fff;\n border: 1px solid #ddd;\n border-radius: 15px;\n}\n.shop-container .pager li > a:hover,\n.shop-container .pager li > a:focus {\n text-decoration: none;\n background-color: rgb(238.425, 238.425, 238.425);\n}\n.shop-container .pager .next > a,\n.shop-container .pager .next > span {\n float: right;\n}\n.shop-container .pager .previous > a,\n.shop-container .pager .previous > span {\n float: left;\n}\n.shop-container .pager .disabled > a,\n.shop-container .pager .disabled > a:hover,\n.shop-container .pager .disabled > a:focus,\n.shop-container .pager .disabled > span {\n color: rgb(119.085, 119.085, 119.085);\n cursor: not-allowed;\n background-color: #fff;\n}\n.shop-container .label {\n display: inline;\n padding: 0.2em 0.6em 0.3em;\n font-size: 75%;\n font-weight: 700;\n line-height: 1;\n color: #fff;\n text-align: center;\n white-space: nowrap;\n vertical-align: baseline;\n border-radius: 0.25em;\n}\n.shop-container .label:empty {\n display: none;\n}\n.btn .shop-container .label {\n position: relative;\n top: -1px;\n}\n.shop-container a.label:hover, .shop-container a.label:focus {\n color: #fff;\n text-decoration: none;\n cursor: pointer;\n}\n.shop-container .label-default {\n background-color: rgb(119.085, 119.085, 119.085);\n}\n.shop-container .label-default[href]:hover, .shop-container .label-default[href]:focus {\n background-color: rgb(93.585, 93.585, 93.585);\n}\n.shop-container .label-primary {\n background-color: rgb(51.4340909091, 122.2772727273, 183.4159090909);\n}\n.shop-container .label-primary[href]:hover, .shop-container .label-primary[href]:focus {\n background-color: rgb(40.2646694215, 95.723553719, 143.5853305785);\n}\n.shop-container .label-success {\n background-color: #5cb85c;\n}\n.shop-container .label-success[href]:hover, .shop-container .label-success[href]:focus {\n background-color: rgb(68.2692307692, 156.7307692308, 68.2692307692);\n}\n.shop-container .label-info {\n background-color: #5bc0de;\n}\n.shop-container .label-info[href]:hover, .shop-container .label-info[href]:focus {\n background-color: rgb(48.5431472081, 175.6903553299, 213.4568527919);\n}\n.shop-container .label-warning {\n background-color: #f0ad4e;\n}\n.shop-container .label-warning[href]:hover, .shop-container .label-warning[href]:focus {\n background-color: rgb(236.015625, 151.21875, 30.984375);\n}\n.shop-container .label-danger {\n background-color: #d9534f;\n}\n.shop-container .label-danger[href]:hover, .shop-container .label-danger[href]:focus {\n background-color: rgb(201.4953271028, 48.0841121495, 43.5046728972);\n}\n.shop-container .badge {\n display: inline-block;\n min-width: 10px;\n padding: 3px 7px;\n font-size: 12px;\n font-weight: bold;\n line-height: 1;\n color: #fff;\n text-align: center;\n white-space: nowrap;\n vertical-align: middle;\n background-color: rgb(119.085, 119.085, 119.085);\n border-radius: 10px;\n}\n.shop-container .badge:empty {\n display: none;\n}\n.btn .shop-container .badge {\n position: relative;\n top: -1px;\n}\n.btn-xs .shop-container .badge, .btn-group-xs > .btn .shop-container .badge {\n top: 0;\n padding: 1px 5px;\n}\n.list-group-item.active > .shop-container .badge, .nav-pills > .active > a > .shop-container .badge {\n color: rgb(51.4340909091, 122.2772727273, 183.4159090909);\n background-color: #fff;\n}\n.list-group-item > .shop-container .badge {\n float: right;\n}\n.list-group-item > .shop-container .badge + .shop-container .badge {\n margin-right: 5px;\n}\n.nav-pills > li > a > .shop-container .badge {\n margin-left: 3px;\n}\n.shop-container a.badge:hover, .shop-container a.badge:focus {\n color: #fff;\n text-decoration: none;\n cursor: pointer;\n}\n.shop-container .jumbotron {\n padding-top: 30px;\n padding-bottom: 30px;\n margin-bottom: 30px;\n color: inherit;\n background-color: rgb(238.425, 238.425, 238.425);\n}\n.shop-container .jumbotron h1,\n.shop-container .jumbotron .h1 {\n color: inherit;\n}\n.shop-container .jumbotron p {\n margin-bottom: 15px;\n font-size: 21px;\n font-weight: 200;\n}\n.shop-container .jumbotron > hr {\n border-top-color: rgb(212.925, 212.925, 212.925);\n}\n.container .shop-container .jumbotron, .container-fluid .shop-container .jumbotron {\n padding-right: 15px;\n padding-left: 15px;\n border-radius: 6px;\n}\n.shop-container .jumbotron .container {\n max-width: 100%;\n}\n@media screen and (min-width: 768px) {\n .shop-container .jumbotron {\n padding-top: 48px;\n padding-bottom: 48px;\n }\n .container .shop-container .jumbotron, .container-fluid .shop-container .jumbotron {\n padding-right: 60px;\n padding-left: 60px;\n }\n .shop-container .jumbotron h1,\n .shop-container .jumbotron .h1 {\n font-size: 63px;\n }\n}\n.shop-container .thumbnail {\n display: block;\n padding: 4px;\n margin-bottom: 20px;\n line-height: 1.428571429;\n background-color: #fff;\n border: 1px solid #ddd;\n border-radius: 4px;\n transition: border 0.2s ease-in-out;\n}\n.shop-container .thumbnail > img,\n.shop-container .thumbnail a > img {\n display: block;\n max-width: 100%;\n height: auto;\n margin-right: auto;\n margin-left: auto;\n}\n.shop-container .thumbnail .caption {\n padding: 9px;\n color: #333333;\n}\n.shop-container a.thumbnail:hover,\n.shop-container a.thumbnail:focus,\n.shop-container a.thumbnail.active {\n border-color: rgb(51.4340909091, 122.2772727273, 183.4159090909);\n}\n.shop-container .alert {\n padding: 15px;\n margin-bottom: 20px;\n border: 1px solid transparent;\n border-radius: 4px;\n}\n.shop-container .alert h4 {\n margin-top: 0;\n color: inherit;\n}\n.shop-container .alert .alert-link {\n font-weight: bold;\n}\n.shop-container .alert > p,\n.shop-container .alert > ul {\n margin-bottom: 0;\n}\n.shop-container .alert > p + p {\n margin-top: 5px;\n}\n.shop-container .alert-dismissable,\n.shop-container .alert-dismissible {\n padding-right: 35px;\n}\n.shop-container .alert-dismissable .close,\n.shop-container .alert-dismissible .close {\n position: relative;\n top: -2px;\n right: -21px;\n color: inherit;\n}\n.shop-container .alert-success {\n color: #3c763d;\n background-color: #dff0d8;\n border-color: rgb(213.7777777778, 232.9166666667, 197.5833333333);\n}\n.shop-container .alert-success hr {\n border-top-color: rgb(200.5555555556, 225.8333333333, 179.1666666667);\n}\n.shop-container .alert-success .alert-link {\n color: rgb(42.808988764, 84.191011236, 43.5224719101);\n}\n.shop-container .alert-info {\n color: #31708f;\n background-color: #d9edf7;\n border-color: rgb(187.5086956522, 231.9108695652, 240.7913043478);\n}\n.shop-container .alert-info hr {\n border-top-color: rgb(166.4434782609, 224.7043478261, 236.3565217391);\n}\n.shop-container .alert-info .alert-link {\n color: rgb(35.984375, 82.25, 105.015625);\n}\n.shop-container .alert-warning {\n color: #8a6d3b;\n background-color: #fcf8e3;\n border-color: rgb(249.5322580645, 234.6478494624, 203.9677419355);\n}\n.shop-container .alert-warning hr {\n border-top-color: rgb(247.064516129, 225.4623655914, 180.935483871);\n}\n.shop-container .alert-warning .alert-link {\n color: rgb(102.2741116751, 80.7817258883, 43.7258883249);\n}\n.shop-container .alert-danger {\n color: #a94442;\n background-color: #f2dede;\n border-color: rgb(234.7934782609, 203.7065217391, 208.8876811594);\n}\n.shop-container .alert-danger hr {\n border-top-color: rgb(227.5869565217, 185.4130434783, 192.4420289855);\n}\n.shop-container .alert-danger .alert-link {\n color: rgb(132.3234042553, 53.2425531915, 51.6765957447);\n}\n@keyframes progress-bar-stripes {\n from {\n background-position: 40px 0;\n }\n to {\n background-position: 0 0;\n }\n}\n.shop-container .progress {\n height: 20px;\n margin-bottom: 20px;\n overflow: hidden;\n background-color: #f5f5f5;\n border-radius: 4px;\n box-shadow: inset 0 1px 2px rgba(0, 0, 0, 0.1);\n}\n.shop-container .progress-bar {\n float: left;\n width: 0%;\n height: 100%;\n font-size: 12px;\n line-height: 20px;\n color: #fff;\n text-align: center;\n background-color: rgb(51.4340909091, 122.2772727273, 183.4159090909);\n box-shadow: inset 0 -1px 0 rgba(0, 0, 0, 0.15);\n transition: width 0.6s ease;\n}\n.shop-container .progress-striped .progress-bar,\n.shop-container .progress-bar-striped {\n background-image: linear-gradient(45deg, rgba(255, 255, 255, 0.15) 25%, transparent 25%, transparent 50%, rgba(255, 255, 255, 0.15) 50%, rgba(255, 255, 255, 0.15) 75%, transparent 75%, transparent);\n background-size: 40px 40px;\n}\n.shop-container .progress.active .progress-bar,\n.shop-container .progress-bar.active {\n animation: progress-bar-stripes 2s linear infinite;\n}\n.shop-container .progress-bar-success {\n background-color: #5cb85c;\n}\n.progress-striped .shop-container .progress-bar-success {\n background-image: linear-gradient(45deg, rgba(255, 255, 255, 0.15) 25%, transparent 25%, transparent 50%, rgba(255, 255, 255, 0.15) 50%, rgba(255, 255, 255, 0.15) 75%, transparent 75%, transparent);\n}\n.shop-container .progress-bar-info {\n background-color: #5bc0de;\n}\n.progress-striped .shop-container .progress-bar-info {\n background-image: linear-gradient(45deg, rgba(255, 255, 255, 0.15) 25%, transparent 25%, transparent 50%, rgba(255, 255, 255, 0.15) 50%, rgba(255, 255, 255, 0.15) 75%, transparent 75%, transparent);\n}\n.shop-container .progress-bar-warning {\n background-color: #f0ad4e;\n}\n.progress-striped .shop-container .progress-bar-warning {\n background-image: linear-gradient(45deg, rgba(255, 255, 255, 0.15) 25%, transparent 25%, transparent 50%, rgba(255, 255, 255, 0.15) 50%, rgba(255, 255, 255, 0.15) 75%, transparent 75%, transparent);\n}\n.shop-container .progress-bar-danger {\n background-color: #d9534f;\n}\n.progress-striped .shop-container .progress-bar-danger {\n background-image: linear-gradient(45deg, rgba(255, 255, 255, 0.15) 25%, transparent 25%, transparent 50%, rgba(255, 255, 255, 0.15) 50%, rgba(255, 255, 255, 0.15) 75%, transparent 75%, transparent);\n}\n.shop-container .media {\n margin-top: 15px;\n}\n.shop-container .media:first-child {\n margin-top: 0;\n}\n.shop-container .media,\n.shop-container .media-body {\n overflow: hidden;\n zoom: 1;\n}\n.shop-container .media-body {\n width: 10000px;\n}\n.shop-container .media-object {\n display: block;\n}\n.shop-container .media-object.img-thumbnail {\n max-width: none;\n}\n.shop-container .media-right,\n.shop-container .media > .pull-right {\n padding-left: 10px;\n}\n.shop-container .media-left,\n.shop-container .media > .pull-left {\n padding-right: 10px;\n}\n.shop-container .media-left,\n.shop-container .media-right,\n.shop-container .media-body {\n display: table-cell;\n vertical-align: top;\n}\n.shop-container .media-middle {\n vertical-align: middle;\n}\n.shop-container .media-bottom {\n vertical-align: bottom;\n}\n.shop-container .media-heading {\n margin-top: 0;\n margin-bottom: 5px;\n}\n.shop-container .media-list {\n padding-left: 0;\n list-style: none;\n}\n.shop-container .list-group {\n padding-left: 0;\n margin-bottom: 20px;\n}\n.shop-container .list-group-item {\n position: relative;\n display: block;\n padding: 10px 15px;\n margin-bottom: -1px;\n background-color: #fff;\n border: 1px solid #ddd;\n}\n.shop-container .list-group-item:first-child {\n border-top-left-radius: 4px;\n border-top-right-radius: 4px;\n}\n.shop-container .list-group-item:last-child {\n margin-bottom: 0;\n border-bottom-right-radius: 4px;\n border-bottom-left-radius: 4px;\n}\n.shop-container .list-group-item.disabled, .shop-container .list-group-item.disabled:hover, .shop-container .list-group-item.disabled:focus {\n color: rgb(119.085, 119.085, 119.085);\n cursor: not-allowed;\n background-color: rgb(238.425, 238.425, 238.425);\n}\n.shop-container .list-group-item.disabled .list-group-item-heading, .shop-container .list-group-item.disabled:hover .list-group-item-heading, .shop-container .list-group-item.disabled:focus .list-group-item-heading {\n color: inherit;\n}\n.shop-container .list-group-item.disabled .list-group-item-text, .shop-container .list-group-item.disabled:hover .list-group-item-text, .shop-container .list-group-item.disabled:focus .list-group-item-text {\n color: rgb(119.085, 119.085, 119.085);\n}\n.shop-container .list-group-item.active, .shop-container .list-group-item.active:hover, .shop-container .list-group-item.active:focus {\n z-index: 2;\n color: #fff;\n background-color: rgb(51.4340909091, 122.2772727273, 183.4159090909);\n border-color: rgb(51.4340909091, 122.2772727273, 183.4159090909);\n}\n.shop-container .list-group-item.active .list-group-item-heading,\n.shop-container .list-group-item.active .list-group-item-heading > small,\n.shop-container .list-group-item.active .list-group-item-heading > .small, .shop-container .list-group-item.active:hover .list-group-item-heading,\n.shop-container .list-group-item.active:hover .list-group-item-heading > small,\n.shop-container .list-group-item.active:hover .list-group-item-heading > .small, .shop-container .list-group-item.active:focus .list-group-item-heading,\n.shop-container .list-group-item.active:focus .list-group-item-heading > small,\n.shop-container .list-group-item.active:focus .list-group-item-heading > .small {\n color: inherit;\n}\n.shop-container .list-group-item.active .list-group-item-text, .shop-container .list-group-item.active:hover .list-group-item-text, .shop-container .list-group-item.active:focus .list-group-item-text {\n color: rgb(199.4324380165, 220.8950413223, 239.4175619835);\n}\n.shop-container a.list-group-item,\n.shop-container button.list-group-item {\n color: #555;\n}\n.shop-container a.list-group-item .list-group-item-heading,\n.shop-container button.list-group-item .list-group-item-heading {\n color: #333;\n}\n.shop-container a.list-group-item:hover, .shop-container a.list-group-item:focus,\n.shop-container button.list-group-item:hover,\n.shop-container button.list-group-item:focus {\n color: #555;\n text-decoration: none;\n background-color: #f5f5f5;\n}\n.shop-container button.list-group-item {\n width: 100%;\n text-align: left;\n}\n.shop-container .list-group-item-success {\n color: #3c763d;\n background-color: #dff0d8;\n}\n.shop-container a.list-group-item-success,\n.shop-container button.list-group-item-success {\n color: #3c763d;\n}\n.shop-container a.list-group-item-success .list-group-item-heading,\n.shop-container button.list-group-item-success .list-group-item-heading {\n color: inherit;\n}\n.shop-container a.list-group-item-success:hover, .shop-container a.list-group-item-success:focus,\n.shop-container button.list-group-item-success:hover,\n.shop-container button.list-group-item-success:focus {\n color: #3c763d;\n background-color: rgb(207.8888888889, 232.9166666667, 197.5833333333);\n}\n.shop-container a.list-group-item-success.active, .shop-container a.list-group-item-success.active:hover, .shop-container a.list-group-item-success.active:focus,\n.shop-container button.list-group-item-success.active,\n.shop-container button.list-group-item-success.active:hover,\n.shop-container button.list-group-item-success.active:focus {\n color: #fff;\n background-color: #3c763d;\n border-color: #3c763d;\n}\n.shop-container .list-group-item-info {\n color: #31708f;\n background-color: #d9edf7;\n}\n.shop-container a.list-group-item-info,\n.shop-container button.list-group-item-info {\n color: #31708f;\n}\n.shop-container a.list-group-item-info .list-group-item-heading,\n.shop-container button.list-group-item-info .list-group-item-heading {\n color: inherit;\n}\n.shop-container a.list-group-item-info:hover, .shop-container a.list-group-item-info:focus,\n.shop-container button.list-group-item-info:hover,\n.shop-container button.list-group-item-info:focus {\n color: #31708f;\n background-color: rgb(195.9347826087, 227.0217391304, 242.5652173913);\n}\n.shop-container a.list-group-item-info.active, .shop-container a.list-group-item-info.active:hover, .shop-container a.list-group-item-info.active:focus,\n.shop-container button.list-group-item-info.active,\n.shop-container button.list-group-item-info.active:hover,\n.shop-container button.list-group-item-info.active:focus {\n color: #fff;\n background-color: #31708f;\n border-color: #31708f;\n}\n.shop-container .list-group-item-warning {\n color: #8a6d3b;\n background-color: #fcf8e3;\n}\n.shop-container a.list-group-item-warning,\n.shop-container button.list-group-item-warning {\n color: #8a6d3b;\n}\n.shop-container a.list-group-item-warning .list-group-item-heading,\n.shop-container button.list-group-item-warning .list-group-item-heading {\n color: inherit;\n}\n.shop-container a.list-group-item-warning:hover, .shop-container a.list-group-item-warning:focus,\n.shop-container button.list-group-item-warning:hover,\n.shop-container button.list-group-item-warning:focus {\n color: #8a6d3b;\n background-color: rgb(249.5322580645, 242.2419354839, 203.9677419355);\n}\n.shop-container a.list-group-item-warning.active, .shop-container a.list-group-item-warning.active:hover, .shop-container a.list-group-item-warning.active:focus,\n.shop-container button.list-group-item-warning.active,\n.shop-container button.list-group-item-warning.active:hover,\n.shop-container button.list-group-item-warning.active:focus {\n color: #fff;\n background-color: #8a6d3b;\n border-color: #8a6d3b;\n}\n.shop-container .list-group-item-danger {\n color: #a94442;\n background-color: #f2dede;\n}\n.shop-container a.list-group-item-danger,\n.shop-container button.list-group-item-danger {\n color: #a94442;\n}\n.shop-container a.list-group-item-danger .list-group-item-heading,\n.shop-container button.list-group-item-danger .list-group-item-heading {\n color: inherit;\n}\n.shop-container a.list-group-item-danger:hover, .shop-container a.list-group-item-danger:focus,\n.shop-container button.list-group-item-danger:hover,\n.shop-container button.list-group-item-danger:focus {\n color: #a94442;\n background-color: rgb(234.7934782609, 203.7065217391, 203.7065217391);\n}\n.shop-container a.list-group-item-danger.active, .shop-container a.list-group-item-danger.active:hover, .shop-container a.list-group-item-danger.active:focus,\n.shop-container button.list-group-item-danger.active,\n.shop-container button.list-group-item-danger.active:hover,\n.shop-container button.list-group-item-danger.active:focus {\n color: #fff;\n background-color: #a94442;\n border-color: #a94442;\n}\n.shop-container .list-group-item-heading {\n margin-top: 0;\n margin-bottom: 5px;\n}\n.shop-container .list-group-item-text {\n margin-bottom: 0;\n line-height: 1.3;\n}\n.shop-container .panel {\n margin-bottom: 20px;\n background-color: #fff;\n border: 1px solid transparent;\n border-radius: 4px;\n box-shadow: 0 1px 1px rgba(0, 0, 0, 0.05);\n}\n.shop-container .panel-body {\n padding: 15px;\n}\n.shop-container .panel-body:before, .shop-container .panel-body:after {\n display: table;\n content: \" \";\n}\n.shop-container .panel-body:after {\n clear: both;\n}\n.shop-container .panel-heading {\n padding: 10px 15px;\n border-bottom: 1px solid transparent;\n border-top-left-radius: 3px;\n border-top-right-radius: 3px;\n}\n.shop-container .panel-heading > .dropdown .dropdown-toggle {\n color: inherit;\n}\n.shop-container .panel-title {\n margin-top: 0;\n margin-bottom: 0;\n font-size: 16px;\n color: inherit;\n}\n.shop-container .panel-title > a,\n.shop-container .panel-title > small,\n.shop-container .panel-title > .small,\n.shop-container .panel-title > small > a,\n.shop-container .panel-title > .small > a {\n color: inherit;\n}\n.shop-container .panel-footer {\n padding: 10px 15px;\n background-color: #f5f5f5;\n border-top: 1px solid #ddd;\n border-bottom-right-radius: 3px;\n border-bottom-left-radius: 3px;\n}\n.shop-container .panel > .list-group,\n.shop-container .panel > .panel-collapse > .list-group {\n margin-bottom: 0;\n}\n.shop-container .panel > .list-group .list-group-item,\n.shop-container .panel > .panel-collapse > .list-group .list-group-item {\n border-width: 1px 0;\n border-radius: 0;\n}\n.shop-container .panel > .list-group:first-child .list-group-item:first-child,\n.shop-container .panel > .panel-collapse > .list-group:first-child .list-group-item:first-child {\n border-top: 0;\n border-top-left-radius: 3px;\n border-top-right-radius: 3px;\n}\n.shop-container .panel > .list-group:last-child .list-group-item:last-child,\n.shop-container .panel > .panel-collapse > .list-group:last-child .list-group-item:last-child {\n border-bottom: 0;\n border-bottom-right-radius: 3px;\n border-bottom-left-radius: 3px;\n}\n.shop-container .panel > .panel-heading + .panel-collapse > .list-group .list-group-item:first-child {\n border-top-left-radius: 0;\n border-top-right-radius: 0;\n}\n.shop-container .panel-heading + .list-group .list-group-item:first-child {\n border-top-width: 0;\n}\n.shop-container .list-group + .panel-footer {\n border-top-width: 0;\n}\n.shop-container .panel > .table,\n.shop-container .panel > .table-responsive > .table,\n.shop-container .panel > .panel-collapse > .table {\n margin-bottom: 0;\n}\n.shop-container .panel > .table caption,\n.shop-container .panel > .table-responsive > .table caption,\n.shop-container .panel > .panel-collapse > .table caption {\n padding-right: 15px;\n padding-left: 15px;\n}\n.shop-container .panel > .table:first-child,\n.shop-container .panel > .table-responsive:first-child > .table:first-child {\n border-top-left-radius: 3px;\n border-top-right-radius: 3px;\n}\n.shop-container .panel > .table:first-child > thead:first-child > tr:first-child,\n.shop-container .panel > .table:first-child > tbody:first-child > tr:first-child,\n.shop-container .panel > .table-responsive:first-child > .table:first-child > thead:first-child > tr:first-child,\n.shop-container .panel > .table-responsive:first-child > .table:first-child > tbody:first-child > tr:first-child {\n border-top-left-radius: 3px;\n border-top-right-radius: 3px;\n}\n.shop-container .panel > .table:first-child > thead:first-child > tr:first-child td:first-child,\n.shop-container .panel > .table:first-child > thead:first-child > tr:first-child th:first-child,\n.shop-container .panel > .table:first-child > tbody:first-child > tr:first-child td:first-child,\n.shop-container .panel > .table:first-child > tbody:first-child > tr:first-child th:first-child,\n.shop-container .panel > .table-responsive:first-child > .table:first-child > thead:first-child > tr:first-child td:first-child,\n.shop-container .panel > .table-responsive:first-child > .table:first-child > thead:first-child > tr:first-child th:first-child,\n.shop-container .panel > .table-responsive:first-child > .table:first-child > tbody:first-child > tr:first-child td:first-child,\n.shop-container .panel > .table-responsive:first-child > .table:first-child > tbody:first-child > tr:first-child th:first-child {\n border-top-left-radius: 3px;\n}\n.shop-container .panel > .table:first-child > thead:first-child > tr:first-child td:last-child,\n.shop-container .panel > .table:first-child > thead:first-child > tr:first-child th:last-child,\n.shop-container .panel > .table:first-child > tbody:first-child > tr:first-child td:last-child,\n.shop-container .panel > .table:first-child > tbody:first-child > tr:first-child th:last-child,\n.shop-container .panel > .table-responsive:first-child > .table:first-child > thead:first-child > tr:first-child td:last-child,\n.shop-container .panel > .table-responsive:first-child > .table:first-child > thead:first-child > tr:first-child th:last-child,\n.shop-container .panel > .table-responsive:first-child > .table:first-child > tbody:first-child > tr:first-child td:last-child,\n.shop-container .panel > .table-responsive:first-child > .table:first-child > tbody:first-child > tr:first-child th:last-child {\n border-top-right-radius: 3px;\n}\n.shop-container .panel > .table:last-child,\n.shop-container .panel > .table-responsive:last-child > .table:last-child {\n border-bottom-right-radius: 3px;\n border-bottom-left-radius: 3px;\n}\n.shop-container .panel > .table:last-child > tbody:last-child > tr:last-child,\n.shop-container .panel > .table:last-child > tfoot:last-child > tr:last-child,\n.shop-container .panel > .table-responsive:last-child > .table:last-child > tbody:last-child > tr:last-child,\n.shop-container .panel > .table-responsive:last-child > .table:last-child > tfoot:last-child > tr:last-child {\n border-bottom-right-radius: 3px;\n border-bottom-left-radius: 3px;\n}\n.shop-container .panel > .table:last-child > tbody:last-child > tr:last-child td:first-child,\n.shop-container .panel > .table:last-child > tbody:last-child > tr:last-child th:first-child,\n.shop-container .panel > .table:last-child > tfoot:last-child > tr:last-child td:first-child,\n.shop-container .panel > .table:last-child > tfoot:last-child > tr:last-child th:first-child,\n.shop-container .panel > .table-responsive:last-child > .table:last-child > tbody:last-child > tr:last-child td:first-child,\n.shop-container .panel > .table-responsive:last-child > .table:last-child > tbody:last-child > tr:last-child th:first-child,\n.shop-container .panel > .table-responsive:last-child > .table:last-child > tfoot:last-child > tr:last-child td:first-child,\n.shop-container .panel > .table-responsive:last-child > .table:last-child > tfoot:last-child > tr:last-child th:first-child {\n border-bottom-left-radius: 3px;\n}\n.shop-container .panel > .table:last-child > tbody:last-child > tr:last-child td:last-child,\n.shop-container .panel > .table:last-child > tbody:last-child > tr:last-child th:last-child,\n.shop-container .panel > .table:last-child > tfoot:last-child > tr:last-child td:last-child,\n.shop-container .panel > .table:last-child > tfoot:last-child > tr:last-child th:last-child,\n.shop-container .panel > .table-responsive:last-child > .table:last-child > tbody:last-child > tr:last-child td:last-child,\n.shop-container .panel > .table-responsive:last-child > .table:last-child > tbody:last-child > tr:last-child th:last-child,\n.shop-container .panel > .table-responsive:last-child > .table:last-child > tfoot:last-child > tr:last-child td:last-child,\n.shop-container .panel > .table-responsive:last-child > .table:last-child > tfoot:last-child > tr:last-child th:last-child {\n border-bottom-right-radius: 3px;\n}\n.shop-container .panel > .panel-body + .table,\n.shop-container .panel > .panel-body + .table-responsive,\n.shop-container .panel > .table + .panel-body,\n.shop-container .panel > .table-responsive + .panel-body {\n border-top: 1px solid #ddd;\n}\n.shop-container .panel > .table > tbody:first-child > tr:first-child th,\n.shop-container .panel > .table > tbody:first-child > tr:first-child td {\n border-top: 0;\n}\n.shop-container .panel > .table-bordered,\n.shop-container .panel > .table-responsive > .table-bordered {\n border: 0;\n}\n.shop-container .panel > .table-bordered > thead > tr > th:first-child,\n.shop-container .panel > .table-bordered > thead > tr > td:first-child,\n.shop-container .panel > .table-bordered > tbody > tr > th:first-child,\n.shop-container .panel > .table-bordered > tbody > tr > td:first-child,\n.shop-container .panel > .table-bordered > tfoot > tr > th:first-child,\n.shop-container .panel > .table-bordered > tfoot > tr > td:first-child,\n.shop-container .panel > .table-responsive > .table-bordered > thead > tr > th:first-child,\n.shop-container .panel > .table-responsive > .table-bordered > thead > tr > td:first-child,\n.shop-container .panel > .table-responsive > .table-bordered > tbody > tr > th:first-child,\n.shop-container .panel > .table-responsive > .table-bordered > tbody > tr > td:first-child,\n.shop-container .panel > .table-responsive > .table-bordered > tfoot > tr > th:first-child,\n.shop-container .panel > .table-responsive > .table-bordered > tfoot > tr > td:first-child {\n border-left: 0;\n}\n.shop-container .panel > .table-bordered > thead > tr > th:last-child,\n.shop-container .panel > .table-bordered > thead > tr > td:last-child,\n.shop-container .panel > .table-bordered > tbody > tr > th:last-child,\n.shop-container .panel > .table-bordered > tbody > tr > td:last-child,\n.shop-container .panel > .table-bordered > tfoot > tr > th:last-child,\n.shop-container .panel > .table-bordered > tfoot > tr > td:last-child,\n.shop-container .panel > .table-responsive > .table-bordered > thead > tr > th:last-child,\n.shop-container .panel > .table-responsive > .table-bordered > thead > tr > td:last-child,\n.shop-container .panel > .table-responsive > .table-bordered > tbody > tr > th:last-child,\n.shop-container .panel > .table-responsive > .table-bordered > tbody > tr > td:last-child,\n.shop-container .panel > .table-responsive > .table-bordered > tfoot > tr > th:last-child,\n.shop-container .panel > .table-responsive > .table-bordered > tfoot > tr > td:last-child {\n border-right: 0;\n}\n.shop-container .panel > .table-bordered > thead > tr:first-child > td,\n.shop-container .panel > .table-bordered > thead > tr:first-child > th,\n.shop-container .panel > .table-bordered > tbody > tr:first-child > td,\n.shop-container .panel > .table-bordered > tbody > tr:first-child > th,\n.shop-container .panel > .table-responsive > .table-bordered > thead > tr:first-child > td,\n.shop-container .panel > .table-responsive > .table-bordered > thead > tr:first-child > th,\n.shop-container .panel > .table-responsive > .table-bordered > tbody > tr:first-child > td,\n.shop-container .panel > .table-responsive > .table-bordered > tbody > tr:first-child > th {\n border-bottom: 0;\n}\n.shop-container .panel > .table-bordered > tbody > tr:last-child > td,\n.shop-container .panel > .table-bordered > tbody > tr:last-child > th,\n.shop-container .panel > .table-bordered > tfoot > tr:last-child > td,\n.shop-container .panel > .table-bordered > tfoot > tr:last-child > th,\n.shop-container .panel > .table-responsive > .table-bordered > tbody > tr:last-child > td,\n.shop-container .panel > .table-responsive > .table-bordered > tbody > tr:last-child > th,\n.shop-container .panel > .table-responsive > .table-bordered > tfoot > tr:last-child > td,\n.shop-container .panel > .table-responsive > .table-bordered > tfoot > tr:last-child > th {\n border-bottom: 0;\n}\n.shop-container .panel > .table-responsive {\n margin-bottom: 0;\n border: 0;\n}\n.shop-container .panel-group {\n margin-bottom: 20px;\n}\n.shop-container .panel-group .panel {\n margin-bottom: 0;\n border-radius: 4px;\n}\n.shop-container .panel-group .panel + .panel {\n margin-top: 5px;\n}\n.shop-container .panel-group .panel-heading {\n border-bottom: 0;\n}\n.shop-container .panel-group .panel-heading + .panel-collapse > .panel-body,\n.shop-container .panel-group .panel-heading + .panel-collapse > .list-group {\n border-top: 1px solid #ddd;\n}\n.shop-container .panel-group .panel-footer {\n border-top: 0;\n}\n.shop-container .panel-group .panel-footer + .panel-collapse .panel-body {\n border-bottom: 1px solid #ddd;\n}\n.shop-container .panel-default {\n border-color: #ddd;\n}\n.shop-container .panel-default > .panel-heading {\n color: #333333;\n background-color: #f5f5f5;\n border-color: #ddd;\n}\n.shop-container .panel-default > .panel-heading + .panel-collapse > .panel-body {\n border-top-color: #ddd;\n}\n.shop-container .panel-default > .panel-heading .badge {\n color: #f5f5f5;\n background-color: #333333;\n}\n.shop-container .panel-default > .panel-footer + .panel-collapse > .panel-body {\n border-bottom-color: #ddd;\n}\n.shop-container .panel-primary {\n border-color: rgb(51.4340909091, 122.2772727273, 183.4159090909);\n}\n.shop-container .panel-primary > .panel-heading {\n color: #fff;\n background-color: rgb(51.4340909091, 122.2772727273, 183.4159090909);\n border-color: rgb(51.4340909091, 122.2772727273, 183.4159090909);\n}\n.shop-container .panel-primary > .panel-heading + .panel-collapse > .panel-body {\n border-top-color: rgb(51.4340909091, 122.2772727273, 183.4159090909);\n}\n.shop-container .panel-primary > .panel-heading .badge {\n color: rgb(51.4340909091, 122.2772727273, 183.4159090909);\n background-color: #fff;\n}\n.shop-container .panel-primary > .panel-footer + .panel-collapse > .panel-body {\n border-bottom-color: rgb(51.4340909091, 122.2772727273, 183.4159090909);\n}\n.shop-container .panel-success {\n border-color: rgb(213.7777777778, 232.9166666667, 197.5833333333);\n}\n.shop-container .panel-success > .panel-heading {\n color: #3c763d;\n background-color: #dff0d8;\n border-color: rgb(213.7777777778, 232.9166666667, 197.5833333333);\n}\n.shop-container .panel-success > .panel-heading + .panel-collapse > .panel-body {\n border-top-color: rgb(213.7777777778, 232.9166666667, 197.5833333333);\n}\n.shop-container .panel-success > .panel-heading .badge {\n color: #dff0d8;\n background-color: #3c763d;\n}\n.shop-container .panel-success > .panel-footer + .panel-collapse > .panel-body {\n border-bottom-color: rgb(213.7777777778, 232.9166666667, 197.5833333333);\n}\n.shop-container .panel-info {\n border-color: rgb(187.5086956522, 231.9108695652, 240.7913043478);\n}\n.shop-container .panel-info > .panel-heading {\n color: #31708f;\n background-color: #d9edf7;\n border-color: rgb(187.5086956522, 231.9108695652, 240.7913043478);\n}\n.shop-container .panel-info > .panel-heading + .panel-collapse > .panel-body {\n border-top-color: rgb(187.5086956522, 231.9108695652, 240.7913043478);\n}\n.shop-container .panel-info > .panel-heading .badge {\n color: #d9edf7;\n background-color: #31708f;\n}\n.shop-container .panel-info > .panel-footer + .panel-collapse > .panel-body {\n border-bottom-color: rgb(187.5086956522, 231.9108695652, 240.7913043478);\n}\n.shop-container .panel-warning {\n border-color: rgb(249.5322580645, 234.6478494624, 203.9677419355);\n}\n.shop-container .panel-warning > .panel-heading {\n color: #8a6d3b;\n background-color: #fcf8e3;\n border-color: rgb(249.5322580645, 234.6478494624, 203.9677419355);\n}\n.shop-container .panel-warning > .panel-heading + .panel-collapse > .panel-body {\n border-top-color: rgb(249.5322580645, 234.6478494624, 203.9677419355);\n}\n.shop-container .panel-warning > .panel-heading .badge {\n color: #fcf8e3;\n background-color: #8a6d3b;\n}\n.shop-container .panel-warning > .panel-footer + .panel-collapse > .panel-body {\n border-bottom-color: rgb(249.5322580645, 234.6478494624, 203.9677419355);\n}\n.shop-container .panel-danger {\n border-color: rgb(234.7934782609, 203.7065217391, 208.8876811594);\n}\n.shop-container .panel-danger > .panel-heading {\n color: #a94442;\n background-color: #f2dede;\n border-color: rgb(234.7934782609, 203.7065217391, 208.8876811594);\n}\n.shop-container .panel-danger > .panel-heading + .panel-collapse > .panel-body {\n border-top-color: rgb(234.7934782609, 203.7065217391, 208.8876811594);\n}\n.shop-container .panel-danger > .panel-heading .badge {\n color: #f2dede;\n background-color: #a94442;\n}\n.shop-container .panel-danger > .panel-footer + .panel-collapse > .panel-body {\n border-bottom-color: rgb(234.7934782609, 203.7065217391, 208.8876811594);\n}\n.shop-container .embed-responsive {\n position: relative;\n display: block;\n height: 0;\n padding: 0;\n overflow: hidden;\n}\n.shop-container .embed-responsive .embed-responsive-item,\n.shop-container .embed-responsive iframe,\n.shop-container .embed-responsive embed,\n.shop-container .embed-responsive object,\n.shop-container .embed-responsive video {\n position: absolute;\n top: 0;\n bottom: 0;\n left: 0;\n width: 100%;\n height: 100%;\n border: 0;\n}\n.shop-container .embed-responsive-16by9 {\n padding-bottom: 56.25%;\n}\n.shop-container .embed-responsive-4by3 {\n padding-bottom: 75%;\n}\n.shop-container .well {\n min-height: 20px;\n padding: 19px;\n margin-bottom: 20px;\n background-color: #f5f5f5;\n border: 1px solid rgb(227.15, 227.15, 227.15);\n border-radius: 4px;\n box-shadow: inset 0 1px 1px rgba(0, 0, 0, 0.05);\n}\n.shop-container .well blockquote {\n border-color: #ddd;\n border-color: rgba(0, 0, 0, 0.15);\n}\n.shop-container .well-lg {\n padding: 24px;\n border-radius: 6px;\n}\n.shop-container .well-sm {\n padding: 9px;\n border-radius: 3px;\n}\n.shop-container .close {\n float: right;\n font-size: 21px;\n font-weight: bold;\n line-height: 1;\n color: #000;\n text-shadow: 0 1px 0 #fff;\n filter: alpha(opacity=20);\n opacity: 0.2;\n}\n.shop-container .close:hover, .shop-container .close:focus {\n color: #000;\n text-decoration: none;\n cursor: pointer;\n filter: alpha(opacity=50);\n opacity: 0.5;\n}\n.shop-container button.close {\n padding: 0;\n cursor: pointer;\n background: transparent;\n border: 0;\n -webkit-appearance: none;\n -moz-appearance: none;\n appearance: none;\n}\n.shop-container .modal-open {\n overflow: hidden;\n}\n.shop-container .modal {\n position: fixed;\n top: 0;\n right: 0;\n bottom: 0;\n left: 0;\n z-index: 1050;\n display: none;\n overflow: hidden;\n -webkit-overflow-scrolling: touch;\n outline: 0;\n}\n.shop-container .modal.fade .modal-dialog {\n transform: translate(0, -25%);\n transition: transform 0.3s ease-out;\n}\n.shop-container .modal.in .modal-dialog {\n transform: translate(0, 0);\n}\n.shop-container .modal-open .modal {\n overflow-x: hidden;\n overflow-y: auto;\n}\n.shop-container .modal-dialog {\n position: relative;\n width: auto;\n margin: 10px;\n}\n.shop-container .modal-content {\n position: relative;\n background-color: #fff;\n background-clip: padding-box;\n border: 1px solid #999;\n border: 1px solid rgba(0, 0, 0, 0.2);\n border-radius: 6px;\n box-shadow: 0 3px 9px rgba(0, 0, 0, 0.5);\n outline: 0;\n}\n.shop-container .modal-backdrop {\n position: fixed;\n top: 0;\n right: 0;\n bottom: 0;\n left: 0;\n z-index: 1040;\n background-color: #000;\n}\n.shop-container .modal-backdrop.fade {\n filter: alpha(opacity=0);\n opacity: 0;\n}\n.shop-container .modal-backdrop.in {\n filter: alpha(opacity=50);\n opacity: 0.5;\n}\n.shop-container .modal-header {\n padding: 15px;\n border-bottom: 1px solid #e5e5e5;\n}\n.shop-container .modal-header:before, .shop-container .modal-header:after {\n display: table;\n content: \" \";\n}\n.shop-container .modal-header:after {\n clear: both;\n}\n.shop-container .modal-header .close {\n margin-top: -2px;\n}\n.shop-container .modal-title {\n margin: 0;\n line-height: 1.428571429;\n}\n.shop-container .modal-body {\n position: relative;\n padding: 15px;\n}\n.shop-container .modal-footer {\n padding: 15px;\n text-align: right;\n border-top: 1px solid #e5e5e5;\n}\n.shop-container .modal-footer:before, .shop-container .modal-footer:after {\n display: table;\n content: \" \";\n}\n.shop-container .modal-footer:after {\n clear: both;\n}\n.shop-container .modal-footer .btn + .btn {\n margin-bottom: 0;\n margin-left: 5px;\n}\n.shop-container .modal-footer .btn-group .btn + .btn {\n margin-left: -1px;\n}\n.shop-container .modal-footer .btn-block + .btn-block {\n margin-left: 0;\n}\n.shop-container .modal-scrollbar-measure {\n position: absolute;\n top: -9999px;\n width: 50px;\n height: 50px;\n overflow: scroll;\n}\n@media (min-width: 768px) {\n .shop-container .modal-dialog {\n width: 600px;\n margin: 30px auto;\n }\n .shop-container .modal-content {\n box-shadow: 0 5px 15px rgba(0, 0, 0, 0.5);\n }\n .shop-container .modal-sm {\n width: 300px;\n }\n}\n@media (min-width: 992px) {\n .shop-container .modal-lg {\n width: 900px;\n }\n}\n.shop-container .tooltip {\n position: absolute;\n z-index: 1070;\n display: block;\n font-family: \"Helvetica Neue\", Helvetica, Arial, sans-serif;\n font-style: normal;\n font-weight: 400;\n line-height: 1.428571429;\n line-break: auto;\n text-align: left;\n text-align: start;\n text-decoration: none;\n text-shadow: none;\n text-transform: none;\n letter-spacing: normal;\n word-break: normal;\n word-spacing: normal;\n word-wrap: normal;\n white-space: normal;\n font-size: 12px;\n filter: alpha(opacity=0);\n opacity: 0;\n}\n.shop-container .tooltip.in {\n filter: alpha(opacity=90);\n opacity: 0.9;\n}\n.shop-container .tooltip.top {\n padding: 5px 0;\n margin-top: -3px;\n}\n.shop-container .tooltip.right {\n padding: 0 5px;\n margin-left: 3px;\n}\n.shop-container .tooltip.bottom {\n padding: 5px 0;\n margin-top: 3px;\n}\n.shop-container .tooltip.left {\n padding: 0 5px;\n margin-left: -3px;\n}\n.shop-container .tooltip.top .tooltip-arrow {\n bottom: 0;\n left: 50%;\n margin-left: -5px;\n border-width: 5px 5px 0;\n border-top-color: #000;\n}\n.shop-container .tooltip.top-left .tooltip-arrow {\n right: 5px;\n bottom: 0;\n margin-bottom: -5px;\n border-width: 5px 5px 0;\n border-top-color: #000;\n}\n.shop-container .tooltip.top-right .tooltip-arrow {\n bottom: 0;\n left: 5px;\n margin-bottom: -5px;\n border-width: 5px 5px 0;\n border-top-color: #000;\n}\n.shop-container .tooltip.right .tooltip-arrow {\n top: 50%;\n left: 0;\n margin-top: -5px;\n border-width: 5px 5px 5px 0;\n border-right-color: #000;\n}\n.shop-container .tooltip.left .tooltip-arrow {\n top: 50%;\n right: 0;\n margin-top: -5px;\n border-width: 5px 0 5px 5px;\n border-left-color: #000;\n}\n.shop-container .tooltip.bottom .tooltip-arrow {\n top: 0;\n left: 50%;\n margin-left: -5px;\n border-width: 0 5px 5px;\n border-bottom-color: #000;\n}\n.shop-container .tooltip.bottom-left .tooltip-arrow {\n top: 0;\n right: 5px;\n margin-top: -5px;\n border-width: 0 5px 5px;\n border-bottom-color: #000;\n}\n.shop-container .tooltip.bottom-right .tooltip-arrow {\n top: 0;\n left: 5px;\n margin-top: -5px;\n border-width: 0 5px 5px;\n border-bottom-color: #000;\n}\n.shop-container .tooltip-inner {\n max-width: 200px;\n padding: 3px 8px;\n color: #fff;\n text-align: center;\n background-color: #000;\n border-radius: 4px;\n}\n.shop-container .tooltip-arrow {\n position: absolute;\n width: 0;\n height: 0;\n border-color: transparent;\n border-style: solid;\n}\n.shop-container .popover {\n position: absolute;\n top: 0;\n left: 0;\n z-index: 1060;\n display: none;\n max-width: 276px;\n padding: 1px;\n font-family: \"Helvetica Neue\", Helvetica, Arial, sans-serif;\n font-style: normal;\n font-weight: 400;\n line-height: 1.428571429;\n line-break: auto;\n text-align: left;\n text-align: start;\n text-decoration: none;\n text-shadow: none;\n text-transform: none;\n letter-spacing: normal;\n word-break: normal;\n word-spacing: normal;\n word-wrap: normal;\n white-space: normal;\n font-size: 14px;\n background-color: #fff;\n background-clip: padding-box;\n border: 1px solid #ccc;\n border: 1px solid rgba(0, 0, 0, 0.2);\n border-radius: 6px;\n box-shadow: 0 5px 10px rgba(0, 0, 0, 0.2);\n}\n.shop-container .popover.top {\n margin-top: -10px;\n}\n.shop-container .popover.right {\n margin-left: 10px;\n}\n.shop-container .popover.bottom {\n margin-top: 10px;\n}\n.shop-container .popover.left {\n margin-left: -10px;\n}\n.shop-container .popover > .arrow {\n border-width: 11px;\n}\n.shop-container .popover > .arrow, .shop-container .popover > .arrow:after {\n position: absolute;\n display: block;\n width: 0;\n height: 0;\n border-color: transparent;\n border-style: solid;\n}\n.shop-container .popover > .arrow:after {\n content: \"\";\n border-width: 10px;\n}\n.shop-container .popover.top > .arrow {\n bottom: -11px;\n left: 50%;\n margin-left: -11px;\n border-top-color: #999999;\n border-top-color: rgba(0, 0, 0, 0.25);\n border-bottom-width: 0;\n}\n.shop-container .popover.top > .arrow:after {\n bottom: 1px;\n margin-left: -10px;\n content: \" \";\n border-top-color: #fff;\n border-bottom-width: 0;\n}\n.shop-container .popover.right > .arrow {\n top: 50%;\n left: -11px;\n margin-top: -11px;\n border-right-color: #999999;\n border-right-color: rgba(0, 0, 0, 0.25);\n border-left-width: 0;\n}\n.shop-container .popover.right > .arrow:after {\n bottom: -10px;\n left: 1px;\n content: \" \";\n border-right-color: #fff;\n border-left-width: 0;\n}\n.shop-container .popover.bottom > .arrow {\n top: -11px;\n left: 50%;\n margin-left: -11px;\n border-top-width: 0;\n border-bottom-color: #999999;\n border-bottom-color: rgba(0, 0, 0, 0.25);\n}\n.shop-container .popover.bottom > .arrow:after {\n top: 1px;\n margin-left: -10px;\n content: \" \";\n border-top-width: 0;\n border-bottom-color: #fff;\n}\n.shop-container .popover.left > .arrow {\n top: 50%;\n right: -11px;\n margin-top: -11px;\n border-right-width: 0;\n border-left-color: #999999;\n border-left-color: rgba(0, 0, 0, 0.25);\n}\n.shop-container .popover.left > .arrow:after {\n right: 1px;\n bottom: -10px;\n content: \" \";\n border-right-width: 0;\n border-left-color: #fff;\n}\n.shop-container .popover-title {\n padding: 8px 14px;\n margin: 0;\n font-size: 14px;\n background-color: rgb(247.35, 247.35, 247.35);\n border-bottom: 1px solid rgb(234.6, 234.6, 234.6);\n border-radius: 5px 5px 0 0;\n}\n.shop-container .popover-content {\n padding: 9px 14px;\n}\n.shop-container .carousel {\n position: relative;\n}\n.shop-container .carousel-inner {\n position: relative;\n width: 100%;\n overflow: hidden;\n}\n.shop-container .carousel-inner > .item {\n position: relative;\n display: none;\n transition: 0.6s ease-in-out left;\n}\n.shop-container .carousel-inner > .item > img,\n.shop-container .carousel-inner > .item > a > img {\n display: block;\n max-width: 100%;\n height: auto;\n line-height: 1;\n}\n@media all and (transform-3d), (-webkit-transform-3d) {\n .shop-container .carousel-inner > .item {\n transition: transform 0.6s ease-in-out;\n backface-visibility: hidden;\n perspective: 1000px;\n }\n .shop-container .carousel-inner > .item.next, .shop-container .carousel-inner > .item.active.right {\n transform: translate3d(100%, 0, 0);\n left: 0;\n }\n .shop-container .carousel-inner > .item.prev, .shop-container .carousel-inner > .item.active.left {\n transform: translate3d(-100%, 0, 0);\n left: 0;\n }\n .shop-container .carousel-inner > .item.next.left, .shop-container .carousel-inner > .item.prev.right, .shop-container .carousel-inner > .item.active {\n transform: translate3d(0, 0, 0);\n left: 0;\n }\n}\n.shop-container .carousel-inner > .active,\n.shop-container .carousel-inner > .next,\n.shop-container .carousel-inner > .prev {\n display: block;\n}\n.shop-container .carousel-inner > .active {\n left: 0;\n}\n.shop-container .carousel-inner > .next,\n.shop-container .carousel-inner > .prev {\n position: absolute;\n top: 0;\n width: 100%;\n}\n.shop-container .carousel-inner > .next {\n left: 100%;\n}\n.shop-container .carousel-inner > .prev {\n left: -100%;\n}\n.shop-container .carousel-inner > .next.left,\n.shop-container .carousel-inner > .prev.right {\n left: 0;\n}\n.shop-container .carousel-inner > .active.left {\n left: -100%;\n}\n.shop-container .carousel-inner > .active.right {\n left: 100%;\n}\n.shop-container .carousel-control {\n position: absolute;\n top: 0;\n bottom: 0;\n left: 0;\n width: 15%;\n font-size: 20px;\n color: #fff;\n text-align: center;\n text-shadow: 0 1px 2px rgba(0, 0, 0, 0.6);\n background-color: rgba(0, 0, 0, 0);\n filter: alpha(opacity=50);\n opacity: 0.5;\n}\n.shop-container .carousel-control.left {\n background-image: linear-gradient(to right, rgba(0, 0, 0, 0.5) 0%, rgba(0, 0, 0, 0.0001) 100%);\n filter: progid:DXImageTransform.Microsoft.gradient(startColorstr=\"#80000000\", endColorstr=\"#00000000\", GradientType=1);\n background-repeat: repeat-x;\n}\n.shop-container .carousel-control.right {\n right: 0;\n left: auto;\n background-image: linear-gradient(to right, rgba(0, 0, 0, 0.0001) 0%, rgba(0, 0, 0, 0.5) 100%);\n filter: progid:DXImageTransform.Microsoft.gradient(startColorstr=\"#00000000\", endColorstr=\"#80000000\", GradientType=1);\n background-repeat: repeat-x;\n}\n.shop-container .carousel-control:hover, .shop-container .carousel-control:focus {\n color: #fff;\n text-decoration: none;\n outline: 0;\n filter: alpha(opacity=90);\n opacity: 0.9;\n}\n.shop-container .carousel-control .icon-prev,\n.shop-container .carousel-control .icon-next,\n.shop-container .carousel-control .glyphicon-chevron-left,\n.shop-container .carousel-control .glyphicon-chevron-right {\n position: absolute;\n top: 50%;\n z-index: 5;\n display: inline-block;\n margin-top: -10px;\n}\n.shop-container .carousel-control .icon-prev,\n.shop-container .carousel-control .glyphicon-chevron-left {\n left: 50%;\n margin-left: -10px;\n}\n.shop-container .carousel-control .icon-next,\n.shop-container .carousel-control .glyphicon-chevron-right {\n right: 50%;\n margin-right: -10px;\n}\n.shop-container .carousel-control .icon-prev,\n.shop-container .carousel-control .icon-next {\n width: 20px;\n height: 20px;\n font-family: serif;\n line-height: 1;\n}\n.shop-container .carousel-control .icon-prev:before {\n content: \"â¹\";\n}\n.shop-container .carousel-control .icon-next:before {\n content: \"âº\";\n}\n.shop-container .carousel-indicators {\n position: absolute;\n bottom: 10px;\n left: 50%;\n z-index: 15;\n width: 60%;\n padding-left: 0;\n margin-left: -30%;\n text-align: center;\n list-style: none;\n}\n.shop-container .carousel-indicators li {\n display: inline-block;\n width: 10px;\n height: 10px;\n margin: 1px;\n text-indent: -999px;\n cursor: pointer;\n background-color: #000 \\9 ;\n background-color: rgba(0, 0, 0, 0);\n border: 1px solid #fff;\n border-radius: 10px;\n}\n.shop-container .carousel-indicators .active {\n width: 12px;\n height: 12px;\n margin: 0;\n background-color: #fff;\n}\n.shop-container .carousel-caption {\n position: absolute;\n right: 15%;\n bottom: 20px;\n left: 15%;\n z-index: 10;\n padding-top: 20px;\n padding-bottom: 20px;\n color: #fff;\n text-align: center;\n text-shadow: 0 1px 2px rgba(0, 0, 0, 0.6);\n}\n.shop-container .carousel-caption .btn {\n text-shadow: none;\n}\n@media screen and (min-width: 768px) {\n .shop-container .carousel-control .glyphicon-chevron-left,\n .shop-container .carousel-control .glyphicon-chevron-right,\n .shop-container .carousel-control .icon-prev,\n .shop-container .carousel-control .icon-next {\n width: 30px;\n height: 30px;\n margin-top: -10px;\n font-size: 30px;\n }\n .shop-container .carousel-control .glyphicon-chevron-left,\n .shop-container .carousel-control .icon-prev {\n margin-left: -10px;\n }\n .shop-container .carousel-control .glyphicon-chevron-right,\n .shop-container .carousel-control .icon-next {\n margin-right: -10px;\n }\n .shop-container .carousel-caption {\n right: 20%;\n left: 20%;\n padding-bottom: 30px;\n }\n .shop-container .carousel-indicators {\n bottom: 20px;\n }\n}\n.shop-container .clearfix:before, .shop-container .clearfix:after {\n display: table;\n content: \" \";\n}\n.shop-container .clearfix:after {\n clear: both;\n}\n.shop-container .center-block {\n display: block;\n margin-right: auto;\n margin-left: auto;\n}\n.shop-container .pull-right {\n float: right !important;\n}\n.shop-container .pull-left {\n float: left !important;\n}\n.shop-container .hide {\n display: none !important;\n}\n.shop-container .show {\n display: block !important;\n}\n.shop-container .invisible {\n visibility: hidden;\n}\n.shop-container .text-hide {\n font: 0/0 a;\n color: transparent;\n text-shadow: none;\n background-color: transparent;\n border: 0;\n}\n.shop-container .hidden {\n display: none !important;\n}\n.shop-container .affix {\n position: fixed;\n}\n.shop-container .visible-xs {\n display: none !important;\n}\n.shop-container .visible-sm {\n display: none !important;\n}\n.shop-container .visible-md {\n display: none !important;\n}\n.shop-container .visible-lg {\n display: none !important;\n}\n.shop-container .visible-xs-block,\n.shop-container .visible-xs-inline,\n.shop-container .visible-xs-inline-block,\n.shop-container .visible-sm-block,\n.shop-container .visible-sm-inline,\n.shop-container .visible-sm-inline-block,\n.shop-container .visible-md-block,\n.shop-container .visible-md-inline,\n.shop-container .visible-md-inline-block,\n.shop-container .visible-lg-block,\n.shop-container .visible-lg-inline,\n.shop-container .visible-lg-inline-block {\n display: none !important;\n}\n@media (max-width: 767px) {\n .shop-container .visible-xs {\n display: block !important;\n }\n .shop-container table.visible-xs {\n display: table !important;\n }\n .shop-container tr.visible-xs {\n display: table-row !important;\n }\n .shop-container th.visible-xs,\n .shop-container td.visible-xs {\n display: table-cell !important;\n }\n}\n@media (max-width: 767px) {\n .shop-container .visible-xs-block {\n display: block !important;\n }\n}\n@media (max-width: 767px) {\n .shop-container .visible-xs-inline {\n display: inline !important;\n }\n}\n@media (max-width: 767px) {\n .shop-container .visible-xs-inline-block {\n display: inline-block !important;\n }\n}\n@media (min-width: 768px) and (max-width: 991px) {\n .shop-container .visible-sm {\n display: block !important;\n }\n .shop-container table.visible-sm {\n display: table !important;\n }\n .shop-container tr.visible-sm {\n display: table-row !important;\n }\n .shop-container th.visible-sm,\n .shop-container td.visible-sm {\n display: table-cell !important;\n }\n}\n@media (min-width: 768px) and (max-width: 991px) {\n .shop-container .visible-sm-block {\n display: block !important;\n }\n}\n@media (min-width: 768px) and (max-width: 991px) {\n .shop-container .visible-sm-inline {\n display: inline !important;\n }\n}\n@media (min-width: 768px) and (max-width: 991px) {\n .shop-container .visible-sm-inline-block {\n display: inline-block !important;\n }\n}\n@media (min-width: 992px) and (max-width: 1199px) {\n .shop-container .visible-md {\n display: block !important;\n }\n .shop-container table.visible-md {\n display: table !important;\n }\n .shop-container tr.visible-md {\n display: table-row !important;\n }\n .shop-container th.visible-md,\n .shop-container td.visible-md {\n display: table-cell !important;\n }\n}\n@media (min-width: 992px) and (max-width: 1199px) {\n .shop-container .visible-md-block {\n display: block !important;\n }\n}\n@media (min-width: 992px) and (max-width: 1199px) {\n .shop-container .visible-md-inline {\n display: inline !important;\n }\n}\n@media (min-width: 992px) and (max-width: 1199px) {\n .shop-container .visible-md-inline-block {\n display: inline-block !important;\n }\n}\n@media (min-width: 1200px) {\n .shop-container .visible-lg {\n display: block !important;\n }\n .shop-container table.visible-lg {\n display: table !important;\n }\n .shop-container tr.visible-lg {\n display: table-row !important;\n }\n .shop-container th.visible-lg,\n .shop-container td.visible-lg {\n display: table-cell !important;\n }\n}\n@media (min-width: 1200px) {\n .shop-container .visible-lg-block {\n display: block !important;\n }\n}\n@media (min-width: 1200px) {\n .shop-container .visible-lg-inline {\n display: inline !important;\n }\n}\n@media (min-width: 1200px) {\n .shop-container .visible-lg-inline-block {\n display: inline-block !important;\n }\n}\n@media (max-width: 767px) {\n .shop-container .hidden-xs {\n display: none !important;\n }\n}\n@media (min-width: 768px) and (max-width: 991px) {\n .shop-container .hidden-sm {\n display: none !important;\n }\n}\n@media (min-width: 992px) and (max-width: 1199px) {\n .shop-container .hidden-md {\n display: none !important;\n }\n}\n@media (min-width: 1200px) {\n .shop-container .hidden-lg {\n display: none !important;\n }\n}\n.shop-container .visible-print {\n display: none !important;\n}\n@media print {\n .shop-container .visible-print {\n display: block !important;\n }\n .shop-container table.visible-print {\n display: table !important;\n }\n .shop-container tr.visible-print {\n display: table-row !important;\n }\n .shop-container th.visible-print,\n .shop-container td.visible-print {\n display: table-cell !important;\n }\n}\n.shop-container .visible-print-block {\n display: none !important;\n}\n@media print {\n .shop-container .visible-print-block {\n display: block !important;\n }\n}\n.shop-container .visible-print-inline {\n display: none !important;\n}\n@media print {\n .shop-container .visible-print-inline {\n display: inline !important;\n }\n}\n.shop-container .visible-print-inline-block {\n display: none !important;\n}\n@media print {\n .shop-container .visible-print-inline-block {\n display: inline-block !important;\n }\n}\n@media print {\n .shop-container .hidden-print {\n display: none !important;\n }\n}\n.shop-container a {\n text-decoration: none;\n}\n.shop-container .dark,\n.shop-container .dark p,\n.shop-container .dark td {\n color: #f1f1f1;\n}\n.shop-container h1,\n.shop-container h2,\n.shop-container h3,\n.shop-container h4,\n.shop-container h5,\n.shop-container h6 {\n color: #555;\n width: 100%;\n margin-top: 0;\n margin-bottom: 0.5em;\n text-rendering: optimizeSpeed;\n}\n.shop-container h3.orange {\n color: #ff531d;\n}\n.shop-container button,\n.shop-container html [type=button],\n.shop-container [type=reset],\n.shop-container [type=submit] {\n -webkit-appearance: button;\n}\n.shop-container img {\n transition: opacity 1s;\n opacity: 1;\n max-width: 100%;\n height: auto;\n display: inline-block;\n vertical-align: middle;\n border-style: none;\n}\n.shop-container .img {\n position: relative;\n}\n.shop-container .img,\n.shop-container .img img {\n width: 100%;\n}\n.shop-container .img .img-inner {\n position: relative;\n overflow: hidden;\n}\n.shop-container small {\n font-size: 80%;\n display: inline-block;\n}\n.shop-container pre,\n.shop-container blockquote,\n.shop-container form,\n.shop-container figure,\n.shop-container p,\n.shop-container dl,\n.shop-container ul,\n.shop-container ol {\n margin-bottom: 1.3em;\n}\n.shop-container form p {\n margin-bottom: 0.5em;\n}\n.shop-container label {\n color: #222;\n}\n.shop-container label, .shop-container legend {\n font-weight: bold;\n display: block;\n font-size: 0.9em;\n margin-bottom: 0.4em;\n}\n.shop-container textarea {\n padding-top: 0.7em;\n min-height: 120px;\n}\n.shop-container .button, .shop-container button, .shop-container input, .shop-container textarea, .shop-container select, .shop-container fieldset {\n margin-bottom: 1em;\n}\n.shop-container .z-1 {\n z-index: 21;\n}\n.shop-container .left {\n left: 0;\n}\n.shop-container .top {\n top: 0;\n}\n.shop-container .right {\n right: 0;\n}\n.shop-container .bottom {\n bottom: 0;\n}\n.shop-container .absolute {\n position: absolute !important;\n}\n.shop-container .relative {\n position: relative !important;\n}\n.shop-container b,\n.shop-container strong {\n font-weight: bolder;\n}\n.shop-container .text-left {\n text-align: left;\n}\n.shop-container .text-center {\n text-align: center;\n}\n.shop-container .text-center > div,\n.shop-container .text-center > div > div,\n.shop-container .text-center .is-divider,\n.shop-container .text-center .is-star-rating {\n margin-left: auto;\n margin-right: auto;\n}\n.shop-container .is-small,\n.shop-container .is-small.button {\n font-size: 0.8em;\n}\n.shop-container .is-smaller {\n font-size: 0.75em;\n}\n.shop-container .is-larger {\n font-size: 1.3em;\n}\n.shop-container .no-text-overflow {\n white-space: nowrap;\n overflow: hidden;\n text-overflow: ellipsis;\n}\n.shop-container .op-7 {\n opacity: 0.7;\n}\n.shop-container .mb-half {\n margin-bottom: 15px;\n}\n.shop-container .pt-half {\n padding-top: 15px;\n}\n.shop-container .pb-half {\n padding-bottom: 15px;\n}\n.shop-container .is-uppercase,\n.shop-container .uppercase {\n line-height: 1.2;\n text-transform: uppercase;\n}\n.shop-container .uppercase,\n.shop-container h6,\n.shop-container th,\n.shop-container span.widget-title {\n line-height: 1.05;\n letter-spacing: 0.05em;\n text-transform: uppercase;\n}\n.shop-container .row-small > .col {\n padding: 0 9.8px 19.6px;\n margin-bottom: 0;\n}\n.shop-container .row .row-small:not(.row-collapse),\n.shop-container .container .row-small:not(.row-collapse) {\n margin-left: -10px;\n margin-right: -10px;\n margin-bottom: 0;\n}\n.shop-container .row .gallery,\n.shop-container .row .row:not(.row-collapse),\n.shop-container .container .row:not(.row-collapse),\n.shop-container .lightbox-content .row:not(.row-collapse) {\n padding-left: 0;\n padding-right: 0;\n margin-left: -15px;\n margin-right: -15px;\n width: auto;\n}\n.shop-container .row,\n.shop-container .gallery {\n width: 100%;\n -js-display: flex;\n display: flex;\n flex-flow: row wrap;\n}\n.shop-container .col,\n.shop-container .gallery-item,\n.shop-container .columns {\n position: relative;\n margin: 0;\n padding: 0 15px 30px;\n width: 100%;\n}\n.shop-container .col-inner {\n position: relative;\n margin-left: auto;\n margin-right: auto;\n width: 100%;\n background-position: 50% 50%;\n background-size: cover;\n background-repeat: no-repeat;\n flex: 1 0 auto;\n}\n.shop-container .col-fit {\n flex: 1;\n}\n.shop-container .is-divider {\n height: 3px;\n display: block;\n background-color: rgba(0, 0, 0, 0.1);\n margin: 1em 0 1em;\n width: 100%;\n max-width: 30px;\n}\n.shop-container .last-reset *:last-child {\n margin-bottom: 0;\n}\n.shop-container .flex-row {\n -js-display: flex;\n display: flex;\n flex-flow: row nowrap;\n align-items: center;\n justify-content: space-between;\n width: 100%;\n}\n.shop-container .flex-col {\n max-height: 100%;\n}\n.shop-container .flex-grow {\n flex: 1;\n -ms-flex-negative: 1;\n -ms-flex-preferred-size: auto !important;\n}\n.shop-container .align-top {\n justify-content: flex-start !important;\n -webkit-align-items: flex-start !important;\n -ms-flex-align: start !important;\n -ms-grid-row-align: flex-start !important;\n align-items: flex-start !important;\n align-self: flex-start !important;\n vertical-align: top !important;\n}\n.shop-container .container:after,\n.shop-container .row:after,\n.shop-container .clearfix:after,\n.shop-container .clear:after {\n content: \"\";\n display: table;\n clear: both;\n}\n.shop-container .has-border {\n border: 2px solid #446084;\n padding: 15px 30px 30px;\n}\n.shop-container .badge-container {\n margin: 30px 0 0 0;\n}\n.shop-container .badge {\n display: table;\n z-index: 20;\n pointer-events: none;\n height: 2.8em;\n width: 2.8em;\n backface-visibility: hidden;\n}\n.shop-container .badge-inner {\n line-height: 1.2;\n font-size: 12px;\n display: table-cell;\n vertical-align: middle;\n text-align: center;\n width: 100%;\n height: 100%;\n background-color: #446084;\n line-height: 0.85;\n color: #fff;\n font-weight: bolder;\n padding: 2px;\n transition: background-color 0.3s, color 0.3s, border 0.3s;\n}\n.shop-container .badge-inner.on-sale {\n background-color: #ff531d;\n}\n.shop-container .breadcrumbs {\n text-transform: uppercase;\n color: #222;\n font-weight: bold;\n letter-spacing: 0px;\n padding: 0;\n}\n.shop-container .breadcrumbs a {\n color: rgba(102, 102, 102, 0.7);\n font-weight: normal;\n}\n.shop-container .breadcrumbs a:first-of-type {\n margin-left: 0;\n}\n.shop-container .breadcrumbs .divider {\n position: relative;\n top: 1.5px;\n opacity: 0.35;\n margin: 0 0.3em;\n font-weight: 300;\n}\n.shop-container .tabbed-content {\n display: flex;\n flex-flow: row wrap;\n}\n.shop-container .tabbed-content .nav-tabs > li {\n margin: 0 0.1em;\n margin-bottom: -1px;\n}\n.shop-container .nav {\n width: 100%;\n position: relative;\n display: inline-block;\n display: flex;\n flex-flow: row wrap;\n align-items: center;\n}\n.shop-container .nav,\n.shop-container .nav ul:not(.nav-dropdown) {\n margin: 0;\n padding: 0;\n}\n.shop-container .nav-left {\n justify-content: flex-start;\n}\n.shop-container .nav li:first-child {\n margin-left: 0 !important;\n}\n.shop-container .nav li:last-child {\n margin-right: 0 !important;\n}\n.shop-container .nav-tabs > li.active > a {\n border-top-color: #ff531d;\n}\n.shop-container .nav-tabs > li.active > a {\n border-top-color: #446084;\n}\n.shop-container .nav-tabs > li.active > a {\n background-color: #fff;\n}\n.shop-container .nav > li > a:hover,\n.shop-container .nav > li.active > a,\n.shop-container .nav > li.current > a,\n.shop-container .nav > li > a.active,\n.shop-container .nav > li > a.current,\n.shop-container .nav-dropdown li.active > a,\n.shop-container .nav-column li.active > a,\n.shop-container .nav-dropdown > li > a:hover,\n.shop-container .nav-column li > a:hover {\n color: rgba(17, 17, 17, 0.85);\n}\n.shop-container .nav-box > li,\n.shop-container .nav-tabs > li,\n.shop-container .nav-outline > li,\n.shop-container .nav-pills > li {\n margin: 0;\n}\n.shop-container .nav > li {\n display: inline-block;\n list-style: none;\n margin: 0;\n padding: 0;\n position: relative;\n margin: 0 7px;\n transition: background-color 0.3s;\n}\n.shop-container .nav > li > a,\n.shop-container .links > li > a {\n text-transform: none;\n}\n.shop-container .nav > li > a {\n font-size: 0.8em;\n}\n.shop-container .nav-tabs > li > a {\n border-top: 2px solid #ddd;\n border-left: 1px solid #ddd;\n border-right: 1px solid #ddd;\n background-color: rgba(0, 0, 0, 0.04);\n padding-left: 15px;\n padding-right: 15px;\n}\n.shop-container .nav-uppercase > li > a {\n letter-spacing: 0.02em;\n text-transform: uppercase;\n font-weight: bolder;\n}\n.shop-container .nav > li > a,\n.shop-container .nav-dropdown > li > a,\n.shop-container .nav-column > li > a {\n color: rgba(102, 102, 102, 0.85);\n transition: all 0.2s;\n}\n.shop-container .nav > li > a {\n padding: 10px 0;\n display: inline-block;\n display: inline-flex;\n flex-wrap: wrap;\n align-items: center;\n}\n.shop-container .nav-tabs + .tab-panels {\n border: 1px solid #ddd;\n background-color: #fff;\n padding: 30px;\n width: -webkit-fill-available;\n}\n.shop-container .tab-panels {\n padding-top: 1em;\n}\n.shop-container .tab-panels .panel.active {\n display: block !important;\n}\n.shop-container .tab-panels .panel:not(.active) {\n zoom: 1;\n float: \"left\";\n visibility: hidden;\n height: 0;\n padding: 0;\n display: block;\n overflow: hidden;\n opacity: 0;\n}\n.shop-container .tab-panels .entry-content {\n padding: 0;\n}\n.shop-container .entry-content {\n padding-top: 1.5em;\n padding-bottom: 1.5em;\n}\n.shop-container .entry-content ol li, .shop-container .entry-summary ol li, .shop-container .col-inner ol li, .shop-container .entry-content ul li, .shop-container .entry-summary ul li, .shop-container .col-inner ul li {\n margin-left: 1.3em;\n}\n.shop-container .comment {\n list-style: none;\n padding: 1em 0 0 0;\n}\n.shop-container .comment .description {\n font-style: italic;\n}\n.shop-container .comment .avatar {\n border-radius: 100%;\n}\n.shop-container .comment .comment-text {\n padding: 0 1.5em;\n}\n.shop-container .comment .meta {\n margin-bottom: 0;\n}\n.shop-container .bypostauthor {\n display: block;\n}\n.shop-container .slider-wrapper {\n position: relative;\n}\n.shop-container .slider > .img,\n.shop-container .flickity-slider > .img,\n.shop-container .slider-wrapper:last-child {\n margin-bottom: 0;\n}\n.shop-container .flickity-enabled {\n position: relative;\n}\n.shop-container .flickity-enabled.is-draggable {\n -webkit-tap-highlight-color: transparent;\n tap-highlight-color: transparent;\n -webkit-user-select: none;\n -moz-user-select: none;\n user-select: none;\n}\n.shop-container .flickity-viewport {\n overflow: hidden;\n position: relative;\n height: 100%;\n width: 100%;\n padding: 0;\n}\n.shop-container .flickity-slider {\n width: 100%;\n height: 100%;\n display: flex;\n}\n.shop-container .row-collapse > .flickity-viewport > .flickity-slider > .col,\n.shop-container .row-collapse > .col {\n padding: 0 !important;\n}\n.shop-container .row-xsmall > .flickity-viewport > .flickity-slider > .col,\n.shop-container .row-xsmall > .col {\n padding: 0 2px 3px;\n margin-bottom: 0;\n}\n.shop-container .slider > div:not(.col),\n.shop-container .slider > a,\n.shop-container .slider > p,\n.shop-container .slider > a > img,\n.shop-container .slider > img {\n width: 100%;\n}\n.shop-container .flickity-enabled.is-draggable .flickity-viewport {\n cursor: move;\n cursor: grab;\n}\n.shop-container .flickity-slider > div:not(.col),\n.shop-container .flickity-slider > a,\n.shop-container .flickity-slider > p,\n.shop-container .flickity-slider > a > img,\n.shop-container .flickity-slider > img,\n.shop-container .flickity-slider > figure {\n width: 100% !important;\n padding: 0;\n margin: 0;\n transition: transform 0.6s, opacity 0.6s, box-shadow 0.6s;\n}\n.shop-container .flickity-prev-next-button {\n position: absolute;\n top: 40%;\n bottom: 40%;\n background-color: transparent;\n margin: 0;\n padding: 0;\n width: 36px;\n color: #111;\n border: none;\n cursor: pointer;\n opacity: 0;\n transition: transform 0.3s, opacity 0.3s, background 0.3s, box-shadow 0.3s;\n}\n.shop-container .flickity-prev-next-button svg {\n position: absolute;\n padding: 5px;\n left: 50%;\n top: 50%;\n width: 100%;\n max-width: 100%;\n padding: 20%;\n max-height: 100%;\n height: auto;\n transition: all 0.3s;\n transform: translate(-50%, -50%);\n}\n.shop-container .slider-nav-reveal .flickity-prev-next-button:hover,\n.shop-container .slider-nav-reveal .flickity-prev-next-button {\n width: 30px;\n top: -2px;\n bottom: 0;\n height: 100%;\n background-color: #fff;\n box-shadow: 0 -150px 15px 0 rgba(0, 0, 0, 0.3);\n margin: 0 !important;\n}\n.shop-container .slider-nav-reveal .flickity-prev-next-button.previous {\n transform: translateX(-10%);\n transform: translateX(-10%);\n right: auto !important;\n left: -1px !important;\n}\n.shop-container .slider-nav-reveal .flickity-prev-next-button.next {\n transform: translateX(10%);\n left: auto !important;\n right: -1px !important;\n}\n.shop-container .flickity-prev-next-button.previous {\n transform: translateX(20%);\n left: 2%;\n}\n.shop-container .flickity-prev-next-button.next {\n transform: translateX(-20%);\n right: 2%;\n}\n.shop-container .slider .flickity-prev-next-button:hover {\n box-shadow: none;\n opacity: 1;\n}\n.shop-container .slider-show-nav .flickity-prev-next-button,\n.shop-container .slider:hover .flickity-prev-next-button {\n opacity: 0.7;\n transform: translateX(0) !important;\n}\n.shop-container .slider-nav-circle .flickity-prev-next-button:hover svg {\n background-color: #ff531d;\n border-radius: 100%;\n fill: #fff !important;\n}\n.shop-container .slider-nav-light .flickity-prev-next-button {\n color: #fff;\n}\n.shop-container .small-columns-4 > .col, .shop-container .small-columns-4 .flickity-slider > .col {\n max-width: 25%;\n flex-basis: 25%;\n}\n.shop-container .row-small > .flickity-viewport > .flickity-slider > .col, .shop-container .row-small > .col {\n padding: 0 9.8px 19.6px;\n margin-bottom: 0;\n}\n.shop-container .section-bg,\n.shop-container .section-content {\n width: 100%;\n}\n.shop-container .section-content {\n z-index: 1;\n}\n.shop-container p.orange a {\n color: #ff531d;\n}\n.shop-container .row {\n margin: 0 auto;\n}\n.shop-container .row.row-small {\n max-width: 1065px;\n}\n.shop-container .row .row-small:not(.row-collapse),\n.shop-container .container .row-small:not(.row-collapse) {\n margin-left: -10px;\n margin-right: -10px;\n margin-bottom: 0;\n}\n.shop-container .row,\n.shop-container .gallery {\n width: 100%;\n -js-display: flex;\n display: flex;\n flex-flow: row wrap;\n}\n.shop-container .row-collapse {\n padding: 0;\n}\n.shop-container .row.row-collapse {\n max-width: 1200px;\n}\n.shop-container .col,\n.shop-container .gallery-item,\n.shop-container .columns {\n position: relative;\n margin: 0;\n padding: 0 15px 30px;\n width: 100%;\n}\n.shop-container .small-12 {\n max-width: 100%;\n flex-basis: 100%;\n}\n.shop-container .row-collapse > .flickity-viewport > .flickity-slider > .col,\n.shop-container .row-collapse > .col {\n padding: 0 !important;\n}\n.shop-container .col-inner {\n position: relative;\n margin-left: auto;\n margin-right: auto;\n width: 100%;\n background-position: 50% 50%;\n background-size: cover;\n background-repeat: no-repeat;\n flex: 1 0 auto;\n}\n.shop-container .row-box-shadow-1 .col-inner,\n.shop-container .row-box-shadow-1-hover .col-inner:hover,\n.shop-container .box-shadow-1,\n.shop-container .box-shadow-1-hover:hover {\n box-shadow: 0 1px 3px -2px rgba(0, 0, 0, 0.12), 0 1px 2px rgba(0, 0, 0, 0.24);\n}\n.shop-container .ux-timer {\n width: 100%;\n position: relative;\n border-spacing: 5px;\n margin: 0.3em 0 0.2em;\n font-size: 300%;\n display: table;\n table-layout: fixed;\n}\n.shop-container .ux-timer span {\n display: table-cell;\n font-weight: bolder;\n text-align: center;\n color: #fff;\n line-height: 80%;\n padding: 0.4em 0.1em 0.1em;\n margin: 0 0.05em 0.2em;\n border-radius: 5px;\n background-color: rgba(0, 0, 0, 0.85);\n}\n.shop-container .ux-timer span strong {\n font-family: \"Helvetica\" Sans-serif;\n font-size: 30%;\n opacity: 0.7;\n text-transform: uppercase;\n display: block;\n}\n.shop-container .has-shadow > .col > .col-inner {\n background-color: #fff;\n height: 100%;\n}\n.shop-container .box {\n width: 100%;\n position: relative;\n margin: 0 auto;\n}\n.shop-container .box a {\n display: inline-block;\n}\n.shop-container .box-text p {\n margin-top: 0.1em;\n margin-bottom: 0.1em;\n}\n.shop-container .box-text h1,\n.shop-container .box-text h2,\n.shop-container .box-text h3,\n.shop-container .box-text h4,\n.shop-container .box-text h5,\n.shop-container .box-text h6,\n.shop-container .box-text a:not(.button) {\n line-height: 1.3;\n margin-top: 0.1em;\n margin-bottom: 0.1em;\n}\n.shop-container .box-image > a,\n.shop-container .box-image > div > a {\n display: block;\n}\n.shop-container .box,\n.shop-container .box-image,\n.shop-container .box-text {\n transition: opacity 0.3s, transform 0.3s, background-color 0.3s;\n}\n.shop-container .box-text.text-center {\n padding-left: 10px;\n padding-right: 10px;\n}\n.shop-container .text-center {\n text-align: center;\n}\n.shop-container .box-text {\n padding-top: 0.7em;\n padding-bottom: 1.4em;\n position: relative;\n width: 100%;\n font-size: 0.9em;\n}\n.shop-container .has-shadow.box:not(.box-overlay):not(.box-shade),\n.shop-container .has-shadow .box:not(.box-overlay):not(.box-shade) {\n background-color: #fff;\n}\n.shop-container .box-image {\n position: relative;\n height: auto;\n margin: 0 auto;\n overflow: hidden;\n}\n.shop-container .icon-box .icon-box-img {\n margin-bottom: 1em;\n max-width: 100%;\n position: relative;\n}\n.shop-container .icon-box-left,\n.shop-container .icon-box-right {\n -js-display: flex;\n display: flex;\n flex-flow: row wrap;\n width: 100%;\n}\n.shop-container .icon-box-left .icon-box-img,\n.shop-container .icon-box-right .icon-box-img {\n flex: 0 0 auto;\n margin-bottom: 0;\n max-width: 200px;\n}\n.shop-container .icon-box-img svg,\n.shop-container .icon-box-img img {\n padding-top: 0.2em;\n width: 100%;\n}\n.shop-container .icon-box-left .icon-box-img + .icon-box-text {\n padding-left: 1em;\n}\n.shop-container .icon-box-left .icon-box-text,\n.shop-container .icon-box-right .icon-box-text {\n flex: 1 1 0px;\n}\n.shop-container .has-hover .bg,\n.shop-container .has-hover [class*=image-] img {\n transition: filter 0.6s, opacity 0.6s, transform 0.6s, box-shadow 0.3s;\n}\n.shop-container .video-fit video,\n.shop-container .video-fit iframe,\n.shop-container img.back-image,\n.shop-container .image-cover img,\n.shop-container .has-format img {\n right: 0;\n width: 100%;\n height: 100%;\n bottom: 0;\n left: 0;\n top: 0;\n position: absolute;\n -o-object-position: 50% 50%;\n object-position: 50% 50%;\n -o-object-fit: cover;\n object-fit: cover;\n font-family: \"object-fit: cover;\";\n}\n.shop-container .image-tools {\n padding: 10px;\n position: absolute;\n}\n.shop-container .image-tools.top.right {\n padding-bottom: 0;\n padding-left: 0;\n}\n.shop-container .image-tools.bottom.left {\n padding-top: 0;\n padding-right: 0;\n}\n.shop-container .show-on-hover,\n.shop-container .hover-slide,\n.shop-container .hover-slide-in,\n.shop-container .hover-zoom,\n.shop-container .hover-zoom-in {\n opacity: 0;\n transition: opacity 0.5s, transform 0.3s, max-height 0.6s, filter 0.6s;\n filter: blur(0);\n pointer-events: none;\n}\n.shop-container .grid-tools {\n display: flex;\n width: 100%;\n padding: 0 !important;\n margin-bottom: -1px;\n backface-visibility: hidden;\n white-space: nowrap;\n}\n.shop-container .hover-slide-in {\n transform: translateY(100%) translateZ(0);\n}\n.shop-container img {\n transition: opacity 1s;\n opacity: 1;\n max-width: 100%;\n height: auto;\n display: inline-block;\n vertical-align: middle;\n}\n.shop-container .box-image img {\n max-width: 100%;\n width: 100%;\n transform: translateZ(0);\n margin: 0 auto;\n}\n.shop-container .overlay {\n position: absolute;\n top: 0;\n bottom: 0;\n height: 100%;\n left: -1px;\n right: -1px;\n background-color: rgba(0, 0, 0, 0.15);\n transition: transform 0.3s, opacity 0.6s;\n pointer-events: none;\n}\n.shop-container .box-text.text-center {\n padding-left: 10px;\n padding-right: 10px;\n}\n.shop-container .has-shadow .box-text {\n padding-left: 1.2em;\n padding-right: 1.2em;\n}\n.shop-container .text-center > div,\n.shop-container .text-center > div > div,\n.shop-container .text-center .is-divider,\n.shop-container .text-center .is-star-rating {\n margin-left: auto;\n margin-right: auto;\n}\n.shop-container .box-text {\n padding-top: 0.7em;\n padding-bottom: 1.4em;\n position: relative;\n width: 100%;\n font-size: 0.9em;\n}\n.shop-container .box,\n.shop-container .box-image,\n.shop-container .box-text {\n transition: opacity 0.3s, transform 0.3s, background-color 0.3s;\n}\n.shop-container .video-fit video,\n.shop-container .video-fit iframe,\n.shop-container img.back-image,\n.shop-container .image-cover img,\n.shop-container .has-format img {\n right: 0;\n width: 100%;\n height: 100%;\n bottom: 0;\n left: 0;\n top: 0;\n position: absolute;\n -o-object-position: 50% 50%;\n object-position: 50% 50%;\n -o-object-fit: cover;\n object-fit: cover;\n font-family: \"object-fit: cover;\";\n}\n.shop-container .text-center > div,\n.shop-container .text-center > div > div,\n.shop-container .text-center .is-divider,\n.shop-container .text-center .is-star-rating {\n margin-left: auto;\n margin-right: auto;\n}\n.shop-container .uppercase,\n.shop-container h6,\n.shop-container th,\n.shop-container span.widget-title {\n line-height: 1.05;\n letter-spacing: 0.05em;\n text-transform: uppercase;\n}\n.shop-container .is-uppercase,\n.shop-container .uppercase {\n line-height: 1.2;\n text-transform: uppercase;\n}\n.shop-container .box-text h1,\n.shop-container .box-text h2,\n.shop-container .box-text h3,\n.shop-container .box-text h4,\n.shop-container .box-text h5,\n.shop-container .box-text h6,\n.shop-container .box-text a:not(.button) {\n line-height: 1.3;\n margin-top: 0.1em;\n margin-bottom: 0.1em;\n}\n.shop-container .star-rating {\n text-align: left;\n font-size: 16px;\n display: block;\n overflow: hidden;\n position: relative;\n height: 1em;\n line-height: 1em;\n letter-spacing: 0;\n margin: 0.5em 0;\n width: 5.4em;\n font-family: \"fl-icons\" !important;\n -webkit-font-smoothing: antialiased;\n -moz-osx-font-smoothing: grayscale;\n}\n.shop-container .star-rating:before {\n content: \"\\e006\\e006\\e006\\e006\\e006\";\n color: #ff531d;\n float: left;\n top: 0;\n left: 0;\n position: absolute;\n}\n.shop-container .star-rating span {\n overflow: hidden;\n float: left;\n width: 10px;\n height: 10px;\n top: 0;\n left: 0;\n font-family: \"fl-icons\" !important;\n position: absolute;\n padding-top: 1.5em;\n font-weight: normal !important;\n}\n.shop-container .price {\n line-height: 160%;\n}\n.shop-container .price-wrapper .price {\n display: block;\n font-size: 14px;\n}\n.shop-container span.amount {\n white-space: nowrap;\n color: #111;\n font-weight: bold;\n}\n.shop-container del span.amount {\n opacity: 0.6;\n font-weight: normal;\n margin-right: 0.3em;\n}\n.shop-container .text-center .quantity,\n.shop-container .quantity {\n opacity: 1;\n display: inline-block;\n display: inline-flex;\n margin-right: 1em;\n white-space: nowrap;\n vertical-align: top;\n}\n.shop-container .stars a {\n font-size: 16px;\n margin-left: -10px;\n display: inline-block;\n color: transparent !important;\n overflow: hidden;\n font-family: \"fl-icons\";\n}\n.shop-container .stars a:after {\n color: #ddd;\n content: \"\\e005\";\n}\n.shop-container .stars a + a {\n margin-left: 0.3em;\n border-left: 1px solid #ececec;\n}\n.shop-container .stars a.star-2:after {\n content: \"\\e005\\e005\";\n}\n.shop-container .stars a.star-3:after {\n content: \"\\e005\\e005\\e005\";\n}\n.shop-container .stars a.star-4:after {\n content: \"\\e005\\e005\\e005\\e005\";\n}\n.shop-container .stars a.star-5:after {\n content: \"\\e005\\e005\\e005\\e005\\e005\";\n}\n.shop-container .product-main {\n padding: 40px 0;\n}\n.shop-container .product-gallery,\n.shop-container .product-thumbnails .col {\n padding-bottom: 0 !important;\n}\n.shop-container .col,\n.shop-container .gallery-item,\n.shop-container .columns {\n position: relative;\n margin: 0;\n padding: 0 15px 30px;\n width: 100%;\n}\n.shop-container .product-thumbnails {\n padding-top: 0;\n}\n.shop-container .product-thumbnails img,\n.shop-container .product-gallery-slider img {\n width: 100%;\n}\n.shop-container .product-thumbnails a {\n overflow: hidden;\n display: block;\n border: 1px solid transparent;\n background-color: #fff;\n transform: translateY(0);\n}\n.shop-container .product-thumbnails a:hover,\n.shop-container .product-thumbnails .is-nav-selected a {\n border-color: rgba(0, 0, 0, 0.2);\n}\n.shop-container .product-thumbnails img {\n margin-bottom: -5px;\n opacity: 0.5;\n backface-visibility: hidden;\n transition: transform 0.6s, opacity 0.6s;\n}\n.shop-container .product-thumbnails a:hover img,\n.shop-container .product-thumbnails .is-nav-selected a img {\n border-color: rgba(0, 0, 0, 0.3);\n transform: translateY(-5px);\n opacity: 1;\n}\n.shop-container .product-info {\n padding-top: 10px;\n}\n.shop-container .product-info .breadcrumbs {\n font-size: 0.85em;\n margin: 0 0 0.5em;\n}\n.shop-container .product-info .price {\n font-size: 1.5em;\n margin: 0.5em 0;\n font-weight: bolder;\n}\n.shop-container .product-summary .quantity {\n margin-bottom: 1em;\n}\n.shop-container .product-summary .woocommerce-Price-currencySymbol {\n font-size: 0.75em;\n vertical-align: top;\n display: inline-block;\n margin-top: 0.05em;\n}\n.shop-container .button, .shop-container button, .shop-container input[type=submit], .shop-container input[type=reset], .shop-container input[type=button] {\n position: relative;\n display: inline-block;\n background-color: transparent;\n text-transform: uppercase;\n font-size: 0.97em;\n letter-spacing: 0.03em;\n touch-action: none;\n cursor: pointer;\n font-weight: bolder;\n text-align: center;\n color: currentColor;\n text-decoration: none;\n border: 1px solid transparent;\n vertical-align: middle;\n border-radius: 0;\n margin-top: 0;\n margin-right: 1em;\n text-shadow: none;\n line-height: 2.4em;\n min-height: 2.5em;\n padding: 0 1.2em;\n max-width: 100%;\n transition: transform 0.3s, border 0.3s, background 0.3s, box-shadow 0.3s, opacity 0.3s, color 0.3s;\n text-rendering: optimizeLegibility;\n box-sizing: border-box;\n}\n.shop-container .quantity input {\n padding-left: 0;\n padding-right: 0;\n display: inline-block;\n vertical-align: top;\n margin: 0;\n}\n.shop-container .quantity input[type=number] {\n max-width: 2.5em;\n text-align: center;\n border-radius: 0 !important;\n -webkit-appearance: textfield;\n -moz-appearance: textfield;\n appearance: textfield;\n}\n.shop-container .quantity .minus, .shop-container .quantity .plus {\n padding-left: 0.5em;\n padding-right: 0.5em;\n}\n.shop-container .button, .shop-container input[type=submit], .shop-container input[type=submit].button, .shop-container input[type=reset].button, .shop-container input[type=button].button {\n color: #fff;\n background-color: #446084;\n background-color: var(--primary-color);\n border-color: rgba(0, 0, 0, 0.05);\n}\n.shop-container .mfp-content .product-lightbox-inner .quantity .minus, .shop-container #wrapper .quantity .minus {\n border-right: 0 !important;\n border-top-right-radius: 0 !important;\n border-bottom-right-radius: 0 !important;\n}\n.shop-container .is-form, .shop-container button.is-form, .shop-container input[type=submit].is-form, .shop-container input[type=reset].is-form, .shop-container input[type=button].is-form {\n overflow: hidden;\n position: relative;\n background-color: #f9f9f9;\n text-shadow: 1px 1px 1px #fff;\n color: #888;\n border: 1px solid #ddd;\n text-transform: none;\n font-weight: normal;\n}\n.shop-container .single_add_to_cart_button {\n background-color: #FF531D;\n}\n.shop-container .product_meta {\n font-size: 0.8em;\n margin-bottom: 1em;\n}\n.shop-container .product_meta > span {\n display: block;\n border-top: 1px dotted #ddd;\n padding: 5px 0;\n}\n.shop-container .product-footer .woocommerce-tabs {\n padding: 30px 0;\n border-top: 1px solid #ececec;\n overflow: hidden;\n}\n.shop-container .product-section {\n border-top: 1px solid #ececec;\n}\n.shop-container .price {\n line-height: 160%;\n}\n.shop-container .price-wrapper .price {\n display: block;\n text-align: left;\n}\n.shop-container .star-rating {\n text-align: left;\n font-size: 16px;\n display: block;\n overflow: hidden;\n position: relative;\n height: 1em;\n line-height: 1em;\n letter-spacing: 0;\n margin: 0.5em 0;\n width: 5.4em;\n font-family: \"fl-icons\" !important;\n -webkit-font-smoothing: antialiased;\n -moz-osx-font-smoothing: grayscale;\n}\n.shop-container .secondary.is-underline, .shop-container .secondary.is-link, .shop-container .secondary.is-outline, .shop-container .stars a.active, .shop-container .star-rating:before, .shop-container .woocommerce-page .star-rating:before, .shop-container .star-rating span:before, .shop-container .color-secondary {\n color: #FF531D;\n}\n.shop-container .star-rating:before, .shop-container .woocommerce-page .star-rating:before {\n content: \"\\e006\\e006\\e006\\e006\\e006\";\n color: #d26e4b;\n float: left;\n top: 0;\n left: 0;\n position: absolute;\n}\n.shop-container .star-rating span {\n overflow: hidden;\n float: left;\n width: 10px;\n height: 10px;\n top: 0;\n left: 0;\n font-family: \"fl-icons\" !important;\n position: absolute;\n padding-top: 1.5em;\n font-weight: normal !important;\n}\n.shop-container .star-rating span:before {\n content: \"\\e005\\e005\\e005\\e005\\e005\";\n color: #d26e4b;\n top: 0;\n position: absolute;\n left: 0;\n}\n@media screen and (min-width: 550px) {\n .shop-container .medium-2 {\n max-width: 16.66667%;\n flex-basis: 16.66667%;\n }\n .shop-container .medium-4 {\n max-width: 33.33333%;\n flex-basis: 33.33333%;\n }\n .shop-container .medium-6 {\n max-width: 50%;\n flex-basis: 50%;\n }\n .shop-container .medium-8 {\n max-width: 66.66667%;\n flex-basis: 66.66667%;\n }\n .shop-container .medium-columns-3 > .col,\n .shop-container .medium-columns-3 .flickity-slider > .col {\n max-width: 33.33333%;\n flex-basis: 33.33333%;\n }\n}\n.shop-container .col + .col .col-inner {\n margin-right: auto;\n margin-left: 0;\n}\n.shop-container .col:first-child .col-inner {\n margin-left: auto;\n margin-right: 0;\n}\n@media screen and (min-width: 850px) {\n .shop-container .large-2 {\n max-width: 16.66667%;\n flex-basis: 16.66667%;\n }\n .shop-container .large-4 {\n max-width: 33.33333%;\n flex-basis: 33.33333%;\n }\n .shop-container .large-6 {\n max-width: 50%;\n flex-basis: 50%;\n }\n .shop-container .large-8 {\n max-width: 66.66667%;\n flex-basis: 66.66667%;\n }\n .shop-container .large-12 {\n max-width: 100%;\n flex-basis: 100%;\n }\n .shop-container .gallery-columns-4 .gallery-item,\n .shop-container .large-columns-4 > .col,\n .shop-container .large-columns-4 .flickity-slider > .col {\n max-width: 25%;\n flex-basis: 25%;\n }\n .shop-container .col + .col .col-inner {\n margin-right: auto;\n margin-left: 0;\n }\n .shop-container .col:first-child .col-inner {\n margin-left: auto;\n margin-right: 0;\n }\n .shop-container .gallery-columns-8 .gallery-item,\n .shop-container .large-columns-8 > .col,\n .shop-container .large-columns-8 .flickity-slider > .col {\n max-width: 12.5%;\n flex-basis: 12.5%;\n }\n .shop-container .gallery-columns-6 .gallery-item,\n .shop-container .large-columns-6 > .col,\n .shop-container .large-columns-6 .flickity-slider > .col {\n max-width: 16.66667%;\n flex-basis: 16.66667%;\n }\n .shop-container .comment-form {\n display: flex;\n flex-flow: row wrap;\n margin-left: -15px;\n margin-right: -15px;\n }\n .shop-container .comment-form > p {\n padding: 0 15px;\n width: 100%;\n }\n}", ""]); 11091// Exports 11092/* harmony default export */ const __WEBPACK_DEFAULT_EXPORT__ = (___CSS_LOADER_EXPORT___); 11093 11094 11095/***/ }), 11096
vendor: 1,872 bytes, lines 11097-11172
11097/***/ "./node_modules/css-loader/dist/runtime/api.js": 11098/*!*****************************************************!*\ 11099 !*** ./node_modules/css-loader/dist/runtime/api.js ***! 11100 \*****************************************************/ 11101/***/ ((module) => { 11102 11103"use strict"; 11104 11105 11106/* 11107 MIT License http://www.opensource.org/licenses/mit-license.php 11108 Author Tobias Koppers @sokra 11109*/ 11110// css base code, injected by the css-loader 11111// eslint-disable-next-line func-names 11112module.exports = function (cssWithMappingToString) { 11113 var list = []; // return the list of modules as css string 11114 11115 list.toString = function toString() { 11116 return this.map(function (item) { 11117 var content = cssWithMappingToString(item); 11118 11119 if (item[2]) { 11120 return "@media ".concat(item[2], " {").concat(content, "}"); 11121 } 11122 11123 return content; 11124 }).join(""); 11125 }; // import a list of modules into the list 11126 // eslint-disable-next-line func-names 11127 11128 11129 list.i = function (modules, mediaQuery, dedupe) { 11130 if (typeof modules === "string") { 11131 // eslint-disable-next-line no-param-reassign 11132 modules = [[null, modules, ""]]; 11133 } 11134 11135 var alreadyImportedModules = {}; 11136 11137 if (dedupe) { 11138 for (var i = 0; i < this.length; i++) { 11139 // eslint-disable-next-line prefer-destructuring 11140 var id = this[i][0]; 11141 11142 if (id != null) { 11143 alreadyImportedModules[id] = true; 11144 } 11145 } 11146 } 11147 11148 for (var _i = 0; _i < modules.length; _i++) { 11149 var item = [].concat(modules[_i]); 11150 11151 if (dedupe && alreadyImportedModules[item[0]]) { 11152 // eslint-disable-next-line no-continue 11153 continue; 11154 } 11155 11156 if (mediaQuery) { 11157 if (!item[2]) { 11158 item[2] = mediaQuery; 11159 } else { 11160 item[2] = "".concat(mediaQuery, " and ").concat(item[2]); 11161 } 11162 } 11163 11164 list.push(item); 11165 } 11166 }; 11167 11168 return list; 11169}; 11170 11171/***/ }), 11172
vendor: 2,269 bytes, lines 11173-11279
11173/***/ "./node_modules/jsonp/index.js": 11174/*!*************************************!*\ 11175 !*** ./node_modules/jsonp/index.js ***! 11176 \*************************************/ 11177/***/ ((module, __unused_webpack_exports, __webpack_require__) => { 11178 11179/** 11180 * Module dependencies 11181 */ 11182 11183var debug = __webpack_require__(/*! debug */ "./node_modules/jsonp/node_modules/debug/src/browser.js")('jsonp'); 11184 11185/** 11186 * Module exports. 11187 */ 11188 11189module.exports = jsonp; 11190 11191/** 11192 * Callback index. 11193 */ 11194 11195var count = 0; 11196 11197/** 11198 * Noop function. 11199 */ 11200 11201function noop(){} 11202 11203/** 11204 * JSONP handler 11205 * 11206 * Options: 11207 * - param {String} qs parameter (`callback`) 11208 * - prefix {String} qs parameter (`__jp`) 11209 * - name {String} qs parameter (`prefix` + incr) 11210 * - timeout {Number} how long after a timeout error is emitted (`60000`) 11211 * 11212 * @param {String} url 11213 * @param {Object|Function} optional options / callback 11214 * @param {Function} optional callback 11215 */ 11216 11217function jsonp(url, opts, fn){ 11218 if ('function' == typeof opts) { 11219 fn = opts; 11220 opts = {}; 11221 } 11222 if (!opts) opts = {}; 11223 11224 var prefix = opts.prefix || '__jp'; 11225 11226 // use the callback name that was passed if one was provided. 11227 // otherwise generate a unique name by incrementing our counter. 11228 var id = opts.name || (prefix + (count++)); 11229 11230 var param = opts.param || 'callback'; 11231 var timeout = null != opts.timeout ? opts.timeout : 60000; 11232 var enc = encodeURIComponent; 11233 var target = document.getElementsByTagName('script')[0] || document.head; 11234 var script; 11235 var timer; 11236 11237 11238 if (timeout) { 11239 timer = setTimeout(function(){ 11240 cleanup(); 11241 if (fn) fn(new Error('Timeout')); 11242 }, timeout); 11243 } 11244 11245 function cleanup(){ 11246 if (script.parentNode) script.parentNode.removeChild(script); 11247 window[id] = noop; 11248 if (timer) clearTimeout(timer); 11249 } 11250 11251 function cancel(){ 11252 if (window[id]) { 11253 cleanup(); 11254 } 11255 } 11256 11257 window[id] = function(data){ 11258 debug('jsonp got', data); 11259 cleanup(); 11260 if (fn) fn(null, data); 11261 }; 11262 11263 // add qs component 11264 url += (~url.indexOf('?') ? '&' : '?') + param + '=' + enc(id); 11265 url = url.replace('?&', '?'); 11266 11267 debug('jsonp req "%s"', url); 11268 11269 // create script 11270 script = document.createElement('script'); 11271 script.src = url; 11272 target.parentNode.insertBefore(script, target); 11273 11274 return cancel; 11275} 11276 11277 11278/***/ }), 11279
vendor: 5,262 bytes, lines 11280-11475
11280/***/ "./node_modules/jsonp/node_modules/debug/src/browser.js": 11281/*!**************************************************************!*\ 11282 !*** ./node_modules/jsonp/node_modules/debug/src/browser.js ***! 11283 \**************************************************************/ 11284/***/ ((module, exports, __webpack_require__) => { 11285 11286/* provided dependency */ var process = __webpack_require__(/*! process/browser.js */ "./node_modules/process/browser.js"); 11287/** 11288 * This is the web browser implementation of `debug()`. 11289 * 11290 * Expose `debug()` as the module. 11291 */ 11292 11293exports = module.exports = __webpack_require__(/*! ./debug */ "./node_modules/jsonp/node_modules/debug/src/debug.js"); 11294exports.log = log; 11295exports.formatArgs = formatArgs; 11296exports.save = save; 11297exports.load = load; 11298exports.useColors = useColors; 11299exports.storage = 'undefined' != typeof chrome 11300 && 'undefined' != typeof chrome.storage 11301 ? chrome.storage.local 11302 : localstorage(); 11303 11304/** 11305 * Colors. 11306 */ 11307 11308exports.colors = [ 11309 'lightseagreen', 11310 'forestgreen', 11311 'goldenrod', 11312 'dodgerblue', 11313 'darkorchid', 11314 'crimson' 11315]; 11316 11317/** 11318 * Currently only WebKit-based Web Inspectors, Firefox >= v31, 11319 * and the Firebug extension (any Firefox version) are known 11320 * to support "%c" CSS customizations. 11321 * 11322 * TODO: add a `localStorage` variable to explicitly enable/disable colors 11323 */ 11324 11325function useColors() { 11326 // NB: In an Electron preload script, document will be defined but not fully 11327 // initialized. Since we know we're in Chrome, we'll just detect this case 11328 // explicitly 11329 if (typeof window !== 'undefined' && window.process && window.process.type === 'renderer') { 11330 return true; 11331 } 11332 11333 // is webkit? http://stackoverflow.com/a/16459606/376773 11334 // document is undefined in react-native: https://github.com/facebook/react-native/pull/1632 11335 return (typeof document !== 'undefined' && document.documentElement && document.documentElement.style && document.documentElement.style.WebkitAppearance) || 11336 // is firebug? http://stackoverflow.com/a/398120/376773 11337 (typeof window !== 'undefined' && window.console && (window.console.firebug || (window.console.exception && window.console.table))) || 11338 // is firefox >= v31? 11339 // https://developer.mozilla.org/en-US/docs/Tools/Web_Console#Styling_messages 11340 (typeof navigator !== 'undefined' && navigator.userAgent && navigator.userAgent.toLowerCase().match(/firefox\/(\d+)/) && parseInt(RegExp.$1, 10) >= 31) || 11341 // double check webkit in userAgent just in case we are in a worker 11342 (typeof navigator !== 'undefined' && navigator.userAgent && navigator.userAgent.toLowerCase().match(/applewebkit\/(\d+)/)); 11343} 11344 11345/** 11346 * Map %j to `JSON.stringify()`, since no Web Inspectors do that by default. 11347 */ 11348 11349exports.formatters.j = function(v) { 11350 try { 11351 return JSON.stringify(v); 11352 } catch (err) { 11353 return '[UnexpectedJSONParseError]: ' + err.message; 11354 } 11355}; 11356 11357 11358/** 11359 * Colorize log arguments if enabled. 11360 * 11361 * @api public 11362 */ 11363 11364function formatArgs(args) { 11365 var useColors = this.useColors; 11366 11367 args[0] = (useColors ? '%c' : '') 11368 + this.namespace 11369 + (useColors ? ' %c' : ' ') 11370 + args[0] 11371 + (useColors ? '%c ' : ' ') 11372 + '+' + exports.humanize(this.diff); 11373 11374 if (!useColors) return; 11375 11376 var c = 'color: ' + this.color; 11377 args.splice(1, 0, c, 'color: inherit') 11378 11379 // the final "%c" is somewhat tricky, because there could be other 11380 // arguments passed either before or after the %c, so we need to 11381 // figure out the correct index to insert the CSS into 11382 var index = 0; 11383 var lastC = 0; 11384 args[0].replace(/%[a-zA-Z%]/g, function(match) { 11385 if ('%%' === match) return; 11386 index++; 11387 if ('%c' === match) { 11388 // we only are interested in the *last* %c 11389 // (the user may have provided their own) 11390 lastC = index; 11391 } 11392 }); 11393 11394 args.splice(lastC, 0, c); 11395} 11396 11397/** 11398 * Invokes `console.log()` when available. 11399 * No-op when `console.log` is not a "function". 11400 * 11401 * @api public 11402 */ 11403 11404function log() { 11405 // this hackery is required for IE8/9, where 11406 // the `console.log` function doesn't have 'apply' 11407 return 'object' === typeof console 11408 && console.log 11409 && Function.prototype.apply.call(console.log, console, arguments); 11410} 11411 11412/** 11413 * Save `namespaces`. 11414 * 11415 * @param {String} namespaces 11416 * @api private 11417 */ 11418 11419function save(namespaces) { 11420 try { 11421 if (null == namespaces) { 11422 exports.storage.removeItem('debug'); 11423 } else { 11424 exports.storage.debug = namespaces; 11425 } 11426 } catch(e) {} 11427} 11428 11429/** 11430 * Load `namespaces`. 11431 * 11432 * @return {String} returns the previously persisted debug modes 11433 * @api private 11434 */ 11435 11436function load() { 11437 var r; 11438 try { 11439 r = exports.storage.debug; 11440 } catch(e) {} 11441 11442 // If debug isn't set in LS, and we're in Electron, try to load $DEBUG 11443 if (!r && typeof process !== 'undefined' && 'env' in process) { 11444 r = process.env.DEBUG; 11445 } 11446 11447 return r; 11448} 11449 11450/** 11451 * Enable namespaces listed in `localStorage.debug` initially. 11452 */ 11453 11454exports.enable(load()); 11455 11456/** 11457 * Localstorage attempts to return the localstorage. 11458 * 11459 * This is necessary because safari throws 11460 * when a user disables cookies/localstorage 11461 * and you attempt to access it. 11462 * 11463 * @return {LocalStorage} 11464 * @api private 11465 */ 11466 11467function localstorage() { 11468 try { 11469 return window.localStorage; 11470 } catch (e) {} 11471} 11472 11473 11474/***/ }), 11475
vendor: 4,783 bytes, lines 11476-11687
11476/***/ "./node_modules/jsonp/node_modules/debug/src/debug.js": 11477/*!************************************************************!*\ 11478 !*** ./node_modules/jsonp/node_modules/debug/src/debug.js ***! 11479 \************************************************************/ 11480/***/ ((module, exports, __webpack_require__) => { 11481 11482 11483/** 11484 * This is the common logic for both the Node.js and web browser 11485 * implementations of `debug()`. 11486 * 11487 * Expose `debug()` as the module. 11488 */ 11489 11490exports = module.exports = createDebug.debug = createDebug['default'] = createDebug; 11491exports.coerce = coerce; 11492exports.disable = disable; 11493exports.enable = enable; 11494exports.enabled = enabled; 11495exports.humanize = __webpack_require__(/*! ms */ "./node_modules/jsonp/node_modules/ms/index.js"); 11496 11497/** 11498 * The currently active debug mode names, and names to skip. 11499 */ 11500 11501exports.names = []; 11502exports.skips = []; 11503 11504/** 11505 * Map of special "%n" handling functions, for the debug "format" argument. 11506 * 11507 * Valid key names are a single, lower or upper-case letter, i.e. "n" and "N". 11508 */ 11509 11510exports.formatters = {}; 11511 11512/** 11513 * Previous log timestamp. 11514 */ 11515 11516var prevTime; 11517 11518/** 11519 * Select a color. 11520 * @param {String} namespace 11521 * @return {Number} 11522 * @api private 11523 */ 11524 11525function selectColor(namespace) { 11526 var hash = 0, i; 11527 11528 for (i in namespace) { 11529 hash = ((hash << 5) - hash) + namespace.charCodeAt(i); 11530 hash |= 0; // Convert to 32bit integer 11531 } 11532 11533 return exports.colors[Math.abs(hash) % exports.colors.length]; 11534} 11535 11536/** 11537 * Create a debugger with the given `namespace`. 11538 * 11539 * @param {String} namespace 11540 * @return {Function} 11541 * @api public 11542 */ 11543 11544function createDebug(namespace) { 11545 11546 function debug() { 11547 // disabled? 11548 if (!debug.enabled) return; 11549 11550 var self = debug; 11551 11552 // set `diff` timestamp 11553 var curr = +new Date(); 11554 var ms = curr - (prevTime || curr); 11555 self.diff = ms; 11556 self.prev = prevTime; 11557 self.curr = curr; 11558 prevTime = curr; 11559 11560 // turn the `arguments` into a proper Array 11561 var args = new Array(arguments.length); 11562 for (var i = 0; i < args.length; i++) { 11563 args[i] = arguments[i]; 11564 } 11565 11566 args[0] = exports.coerce(args[0]); 11567 11568 if ('string' !== typeof args[0]) { 11569 // anything else let's inspect with %O 11570 args.unshift('%O'); 11571 } 11572 11573 // apply any `formatters` transformations 11574 var index = 0; 11575 args[0] = args[0].replace(/%([a-zA-Z%])/g, function(match, format) { 11576 // if we encounter an escaped % then don't increase the array index 11577 if (match === '%%') return match; 11578 index++; 11579 var formatter = exports.formatters[format]; 11580 if ('function' === typeof formatter) { 11581 var val = args[index]; 11582 match = formatter.call(self, val); 11583 11584 // now we need to remove `args[index]` since it's inlined in the `format` 11585 args.splice(index, 1); 11586 index--; 11587 } 11588 return match; 11589 }); 11590 11591 // apply env-specific formatting (colors, etc.) 11592 exports.formatArgs.call(self, args); 11593 11594 var logFn = debug.log || exports.log || console.log.bind(console); 11595 logFn.apply(self, args); 11596 } 11597 11598 debug.namespace = namespace; 11599 debug.enabled = exports.enabled(namespace); 11600 debug.useColors = exports.useColors(); 11601 debug.color = selectColor(namespace); 11602 11603 // env-specific initialization logic for debug instances 11604 if ('function' === typeof exports.init) { 11605 exports.init(debug); 11606 } 11607 11608 return debug; 11609} 11610 11611/** 11612 * Enables a debug mode by namespaces. This can include modes 11613 * separated by a colon and wildcards. 11614 * 11615 * @param {String} namespaces 11616 * @api public 11617 */ 11618 11619function enable(namespaces) { 11620 exports.save(namespaces); 11621 11622 exports.names = []; 11623 exports.skips = []; 11624 11625 var split = (typeof namespaces === 'string' ? namespaces : '').split(/[\s,]+/); 11626 var len = split.length; 11627 11628 for (var i = 0; i < len; i++) { 11629 if (!split[i]) continue; // ignore empty strings 11630 namespaces = split[i].replace(/\*/g, '.*?'); 11631 if (namespaces[0] === '-') { 11632 exports.skips.push(new RegExp('^' + namespaces.substr(1) + '$')); 11633 } else { 11634 exports.names.push(new RegExp('^' + namespaces + '$')); 11635 } 11636 } 11637} 11638 11639/** 11640 * Disable debug output. 11641 * 11642 * @api public 11643 */ 11644 11645function disable() { 11646 exports.enable(''); 11647} 11648 11649/** 11650 * Returns true if the given mode name is enabled, false otherwise. 11651 * 11652 * @param {String} name 11653 * @return {Boolean} 11654 * @api public 11655 */ 11656 11657function enabled(name) { 11658 var i, len; 11659 for (i = 0, len = exports.skips.length; i < len; i++) { 11660 if (exports.skips[i].test(name)) { 11661 return false; 11662 } 11663 } 11664 for (i = 0, len = exports.names.length; i < len; i++) { 11665 if (exports.names[i].test(name)) { 11666 return true; 11667 } 11668 } 11669 return false; 11670} 11671 11672/** 11673 * Coerce `val`. 11674 * 11675 * @param {Mixed} val 11676 * @return {Mixed} 11677 * @api private 11678 */ 11679 11680function coerce(val) { 11681 if (val instanceof Error) return val.stack || val.message; 11682 return val; 11683} 11684 11685 11686/***/ }), 11687
vendor: 3,030 bytes, lines 11688-11849
11688/***/ "./node_modules/jsonp/node_modules/ms/index.js": 11689/*!*****************************************************!*\ 11690 !*** ./node_modules/jsonp/node_modules/ms/index.js ***! 11691 \*****************************************************/ 11692/***/ ((module) => { 11693 11694/** 11695 * Helpers. 11696 */ 11697 11698var s = 1000; 11699var m = s * 60; 11700var h = m * 60; 11701var d = h * 24; 11702var y = d * 365.25; 11703 11704/** 11705 * Parse or format the given `val`. 11706 * 11707 * Options: 11708 * 11709 * - `long` verbose formatting [false] 11710 * 11711 * @param {String|Number} val 11712 * @param {Object} [options] 11713 * @throws {Error} throw an error if val is not a non-empty string or a number 11714 * @return {String|Number} 11715 * @api public 11716 */ 11717 11718module.exports = function(val, options) { 11719 options = options || {}; 11720 var type = typeof val; 11721 if (type === 'string' && val.length > 0) { 11722 return parse(val); 11723 } else if (type === 'number' && isNaN(val) === false) { 11724 return options.long ? fmtLong(val) : fmtShort(val); 11725 } 11726 throw new Error( 11727 'val is not a non-empty string or a valid number. val=' + 11728 JSON.stringify(val) 11729 ); 11730}; 11731 11732/** 11733 * Parse the given `str` and return milliseconds. 11734 * 11735 * @param {String} str 11736 * @return {Number} 11737 * @api private 11738 */ 11739 11740function parse(str) { 11741 str = String(str); 11742 if (str.length > 100) { 11743 return; 11744 } 11745 var match = /^((?:\d+)?\.?\d+) *(milliseconds?|msecs?|ms|seconds?|secs?|s|minutes?|mins?|m|hours?|hrs?|h|days?|d|years?|yrs?|y)?$/i.exec( 11746 str 11747 ); 11748 if (!match) { 11749 return; 11750 } 11751 var n = parseFloat(match[1]); 11752 var type = (match[2] || 'ms').toLowerCase(); 11753 switch (type) { 11754 case 'years': 11755 case 'year': 11756 case 'yrs': 11757 case 'yr': 11758 case 'y': 11759 return n * y; 11760 case 'days': 11761 case 'day': 11762 case 'd': 11763 return n * d; 11764 case 'hours': 11765 case 'hour': 11766 case 'hrs': 11767 case 'hr': 11768 case 'h': 11769 return n * h; 11770 case 'minutes': 11771 case 'minute': 11772 case 'mins': 11773 case 'min': 11774 case 'm': 11775 return n * m; 11776 case 'seconds': 11777 case 'second': 11778 case 'secs': 11779 case 'sec': 11780 case 's': 11781 return n * s; 11782 case 'milliseconds': 11783 case 'millisecond': 11784 case 'msecs': 11785 case 'msec': 11786 case 'ms': 11787 return n; 11788 default: 11789 return undefined; 11790 } 11791} 11792 11793/** 11794 * Short format for `ms`. 11795 * 11796 * @param {Number} ms 11797 * @return {String} 11798 * @api private 11799 */ 11800 11801function fmtShort(ms) { 11802 if (ms >= d) { 11803 return Math.round(ms / d) + 'd'; 11804 } 11805 if (ms >= h) { 11806 return Math.round(ms / h) + 'h'; 11807 } 11808 if (ms >= m) { 11809 return Math.round(ms / m) + 'm'; 11810 } 11811 if (ms >= s) { 11812 return Math.round(ms / s) + 's'; 11813 } 11814 return ms + 'ms'; 11815} 11816 11817/** 11818 * Long format for `ms`. 11819 * 11820 * @param {Number} ms 11821 * @return {String} 11822 * @api private 11823 */ 11824 11825function fmtLong(ms) { 11826 return plural(ms, d, 'day') || 11827 plural(ms, h, 'hour') || 11828 plural(ms, m, 'minute') || 11829 plural(ms, s, 'second') || 11830 ms + ' ms'; 11831} 11832 11833/** 11834 * Pluralization helper. 11835 */ 11836 11837function plural(ms, n, name) { 11838 if (ms < n) { 11839 return; 11840 } 11841 if (ms < n * 1.5) { 11842 return Math.floor(ms / n) + ' ' + name; 11843 } 11844 return Math.ceil(ms / n) + ' ' + name + 's'; 11845} 11846 11847 11848/***/ }), 11849
vendor: 2,343 bytes, lines 11850-11950
11850/***/ "./node_modules/object-assign/index.js": 11851/*!*********************************************!*\ 11852 !*** ./node_modules/object-assign/index.js ***! 11853 \*********************************************/ 11854/***/ ((module) => { 11855 11856"use strict"; 11857/* 11858object-assign 11859(c) Sindre Sorhus 11860@license MIT 11861*/ 11862 11863 11864/* eslint-disable no-unused-vars */ 11865var getOwnPropertySymbols = Object.getOwnPropertySymbols; 11866var hasOwnProperty = Object.prototype.hasOwnProperty; 11867var propIsEnumerable = Object.prototype.propertyIsEnumerable; 11868 11869function toObject(val) { 11870 if (val === null || val === undefined) { 11871 throw new TypeError('Object.assign cannot be called with null or undefined'); 11872 } 11873 11874 return Object(val); 11875} 11876 11877function shouldUseNative() { 11878 try { 11879 if (!Object.assign) { 11880 return false; 11881 } 11882 11883 // Detect buggy property enumeration order in older V8 versions. 11884 11885 // https://bugs.chromium.org/p/v8/issues/detail?id=4118 11886 var test1 = new String('abc'); // eslint-disable-line no-new-wrappers 11887 test1[5] = 'de'; 11888 if (Object.getOwnPropertyNames(test1)[0] === '5') { 11889 return false; 11890 } 11891 11892 // https://bugs.chromium.org/p/v8/issues/detail?id=3056 11893 var test2 = {}; 11894 for (var i = 0; i < 10; i++) { 11895 test2['_' + String.fromCharCode(i)] = i; 11896 } 11897 var order2 = Object.getOwnPropertyNames(test2).map(function (n) { 11898 return test2[n]; 11899 }); 11900 if (order2.join('') !== '0123456789') { 11901 return false; 11902 } 11903 11904 // https://bugs.chromium.org/p/v8/issues/detail?id=3056 11905 var test3 = {}; 11906 'abcdefghijklmnopqrst'.split('').forEach(function (letter) { 11907 test3[letter] = letter; 11908 }); 11909 if (Object.keys(Object.assign({}, test3)).join('') !== 11910 'abcdefghijklmnopqrst') { 11911 return false; 11912 } 11913 11914 return true; 11915 } catch (err) { 11916 // We don't expect any of the above to throw, but better to be safe. 11917 return false; 11918 } 11919} 11920 11921module.exports = shouldUseNative() ? Object.assign : function (target, source) { 11922 var from; 11923 var to = toObject(target); 11924 var symbols; 11925 11926 for (var s = 1; s < arguments.length; s++) { 11927 from = Object(arguments[s]); 11928 11929 for (var key in from) { 11930 if (hasOwnProperty.call(from, key)) { 11931 to[key] = from[key]; 11932 } 11933 } 11934 11935 if (getOwnPropertySymbols) { 11936 symbols = getOwnPropertySymbols(from); 11937 for (var i = 0; i < symbols.length; i++) { 11938 if (propIsEnumerable.call(from, symbols[i])) { 11939 to[symbols[i]] = from[symbols[i]]; 11940 } 11941 } 11942 } 11943 } 11944 11945 return to; 11946}; 11947 11948 11949/***/ }), 11950
vendor: 5,636 bytes, lines 11951-12144
11951/***/ "./node_modules/process/browser.js": 11952/*!*****************************************!*\ 11953 !*** ./node_modules/process/browser.js ***! 11954 \*****************************************/ 11955/***/ ((module) => { 11956 11957// shim for using process in browser 11958var process = module.exports = {}; 11959 11960// cached from whatever global is present so that test runners that stub it 11961// don't break things. But we need to wrap it in a try catch in case it is 11962// wrapped in strict mode code which doesn't define any globals. It's inside a 11963// function because try/catches deoptimize in certain engines. 11964 11965var cachedSetTimeout; 11966var cachedClearTimeout; 11967 11968function defaultSetTimout() { 11969 throw new Error('setTimeout has not been defined'); 11970} 11971function defaultClearTimeout () { 11972 throw new Error('clearTimeout has not been defined'); 11973} 11974(function () { 11975 try { 11976 if (typeof setTimeout === 'function') { 11977 cachedSetTimeout = setTimeout; 11978 } else { 11979 cachedSetTimeout = defaultSetTimout; 11980 } 11981 } catch (e) { 11982 cachedSetTimeout = defaultSetTimout; 11983 } 11984 try { 11985 if (typeof clearTimeout === 'function') { 11986 cachedClearTimeout = clearTimeout; 11987 } else { 11988 cachedClearTimeout = defaultClearTimeout; 11989 } 11990 } catch (e) { 11991 cachedClearTimeout = defaultClearTimeout; 11992 } 11993} ()) 11994function runTimeout(fun) { 11995 if (cachedSetTimeout === setTimeout) { 11996 //normal enviroments in sane situations 11997 return setTimeout(fun, 0); 11998 } 11999 // if setTimeout wasn't available but was latter defined 12000 if ((cachedSetTimeout === defaultSetTimout || !cachedSetTimeout) && setTimeout) { 12001 cachedSetTimeout = setTimeout; 12002 return setTimeout(fun, 0); 12003 } 12004 try { 12005 // when when somebody has screwed with setTimeout but no I.E. maddness 12006 return cachedSetTimeout(fun, 0); 12007 } catch(e){ 12008 try { 12009 // When we are in I.E. but the script has been evaled so I.E. doesn't trust the global object when called normally 12010 return cachedSetTimeout.call(null, fun, 0); 12011 } catch(e){ 12012 // same as above but when it's a version of I.E. that must have the global object for 'this', hopfully our context correct otherwise it will throw a global error 12013 return cachedSetTimeout.call(this, fun, 0); 12014 } 12015 } 12016 12017 12018} 12019function runClearTimeout(marker) { 12020 if (cachedClearTimeout === clearTimeout) { 12021 //normal enviroments in sane situations 12022 return clearTimeout(marker); 12023 } 12024 // if clearTimeout wasn't available but was latter defined 12025 if ((cachedClearTimeout === defaultClearTimeout || !cachedClearTimeout) && clearTimeout) { 12026 cachedClearTimeout = clearTimeout; 12027 return clearTimeout(marker); 12028 } 12029 try { 12030 // when when somebody has screwed with setTimeout but no I.E. maddness 12031 return cachedClearTimeout(marker); 12032 } catch (e){ 12033 try { 12034 // When we are in I.E. but the script has been evaled so I.E. doesn't trust the global object when called normally 12035 return cachedClearTimeout.call(null, marker); 12036 } catch (e){ 12037 // same as above but when it's a version of I.E. that must have the global object for 'this', hopfully our context correct otherwise it will throw a global error. 12038 // Some versions of I.E. have different rules for clearTimeout vs setTimeout 12039 return cachedClearTimeout.call(this, marker); 12040 } 12041 } 12042 12043 12044 12045} 12046var queue = []; 12047var draining = false; 12048var currentQueue; 12049var queueIndex = -1; 12050 12051function cleanUpNextTick() { 12052 if (!draining || !currentQueue) { 12053 return; 12054 } 12055 draining = false; 12056 if (currentQueue.length) { 12057 queue = currentQueue.concat(queue); 12058 } else { 12059 queueIndex = -1; 12060 } 12061 if (queue.length) { 12062 drainQueue(); 12063 } 12064} 12065 12066function drainQueue() { 12067 if (draining) { 12068 return; 12069 } 12070 var timeout = runTimeout(cleanUpNextTick); 12071 draining = true; 12072 12073 var len = queue.length; 12074 while(len) { 12075 currentQueue = queue; 12076 queue = []; 12077 while (++queueIndex < len) { 12078 if (currentQueue) { 12079 currentQueue[queueIndex].run(); 12080 } 12081 } 12082 queueIndex = -1; 12083 len = queue.length; 12084 } 12085 currentQueue = null; 12086 draining = false; 12087 runClearTimeout(timeout); 12088} 12089 12090process.nextTick = function (fun) { 12091 var args = new Array(arguments.length - 1); 12092 if (arguments.length > 1) { 12093 for (var i = 1; i < arguments.length; i++) { 12094 args[i - 1] = arguments[i]; 12095 } 12096 } 12097 queue.push(new Item(fun, args)); 12098 if (queue.length === 1 && !draining) { 12099 runTimeout(drainQueue); 12100 } 12101}; 12102 12103// v8 likes predictible objects 12104function Item(fun, array) { 12105 this.fun = fun; 12106 this.array = array; 12107} 12108Item.prototype.run = function () { 12109 this.fun.apply(null, this.array); 12110}; 12111process.title = 'browser'; 12112process.browser = true; 12113process.env = {}; 12114process.argv = []; 12115process.version = ''; // empty string to avoid regexp issues 12116process.versions = {}; 12117 12118function noop() {} 12119 12120process.on = noop; 12121process.addListener = noop; 12122process.once = noop; 12123process.off = noop; 12124process.removeListener = noop; 12125process.removeAllListeners = noop; 12126process.emit = noop; 12127process.prependListener = noop; 12128process.prependOnceListener = noop; 12129 12130process.listeners = function (name) { return [] } 12131 12132process.binding = function (name) { 12133 throw new Error('process.binding is not supported'); 12134}; 12135 12136process.cwd = function () { return '/' }; 12137process.chdir = function (dir) { 12138 throw new Error('process.chdir is not supported'); 12139}; 12140process.umask = function() { return 0; }; 12141 12142 12143/***/ }), 12144
vendor: 4,204 bytes, lines 12145-12258
12145/***/ "./node_modules/prop-types/checkPropTypes.js": 12146/*!***************************************************!*\ 12147 !*** ./node_modules/prop-types/checkPropTypes.js ***! 12148 \***************************************************/ 12149/***/ ((module, __unused_webpack_exports, __webpack_require__) => { 12150 12151"use strict"; 12152/** 12153 * Copyright (c) 2013-present, Facebook, Inc. 12154 * 12155 * This source code is licensed under the MIT license found in the 12156 * LICENSE file in the root directory of this source tree. 12157 */ 12158 12159 12160 12161var printWarning = function() {}; 12162 12163if (true) { 12164 var ReactPropTypesSecret = __webpack_require__(/*! ./lib/ReactPropTypesSecret */ "./node_modules/prop-types/lib/ReactPropTypesSecret.js"); 12165 var loggedTypeFailures = {}; 12166 var has = __webpack_require__(/*! ./lib/has */ "./node_modules/prop-types/lib/has.js"); 12167 12168 printWarning = function(text) { 12169 var message = 'Warning: ' + text; 12170 if (typeof console !== 'undefined') { 12171 console.error(message); 12172 } 12173 try { 12174 // --- Welcome to debugging React --- 12175 // This error was thrown as a convenience so that you can use this stack 12176 // to find the callsite that caused this warning to fire. 12177 throw new Error(message); 12178 } catch (x) { /**/ } 12179 }; 12180} 12181 12182/** 12183 * Assert that the values match with the type specs. 12184 * Error messages are memorized and will only be shown once. 12185 * 12186 * @param {object} typeSpecs Map of name to a ReactPropType 12187 * @param {object} values Runtime values that need to be type-checked 12188 * @param {string} location e.g. "prop", "context", "child context" 12189 * @param {string} componentName Name of the component for error messages. 12190 * @param {?Function} getStack Returns the component stack. 12191 * @private 12192 */ 12193function checkPropTypes(typeSpecs, values, location, componentName, getStack) { 12194 if (true) { 12195 for (var typeSpecName in typeSpecs) { 12196 if (has(typeSpecs, typeSpecName)) { 12197 var error; 12198 // Prop type validation may throw. In case they do, we don't want to 12199 // fail the render phase where it didn't fail before. So we log it. 12200 // After these have been cleaned up, we'll let them throw. 12201 try { 12202 // This is intentionally an invariant that gets caught. It's the same 12203 // behavior as without this statement except with a better message. 12204 if (typeof typeSpecs[typeSpecName] !== 'function') { 12205 var err = Error( 12206 (componentName || 'React class') + ': ' + location + ' type `' + typeSpecName + '` is invalid; ' + 12207 'it must be a function, usually from the `prop-types` package, but received `' + typeof typeSpecs[typeSpecName] + '`.' + 12208 'This often happens because of typos such as `PropTypes.function` instead of `PropTypes.func`.' 12209 ); 12210 err.name = 'Invariant Violation'; 12211 throw err; 12212 } 12213 error = typeSpecs[typeSpecName](values, typeSpecName, componentName, location, null, ReactPropTypesSecret); 12214 } catch (ex) { 12215 error = ex; 12216 } 12217 if (error && !(error instanceof Error)) { 12218 printWarning( 12219 (componentName || 'React class') + ': type specification of ' + 12220 location + ' `' + typeSpecName + '` is invalid; the type checker ' + 12221 'function must return `null` or an `Error` but returned a ' + typeof error + '. ' + 12222 'You may have forgotten to pass an argument to the type checker ' + 12223 'creator (arrayOf, instanceOf, objectOf, oneOf, oneOfType, and ' + 12224 'shape all require an argument).' 12225 ); 12226 } 12227 if (error instanceof Error && !(error.message in loggedTypeFailures)) { 12228 // Only monitor this failure once because there tends to be a lot of the 12229 // same error. 12230 loggedTypeFailures[error.message] = true; 12231 12232 var stack = getStack ? getStack() : ''; 12233 12234 printWarning( 12235 'Failed ' + location + ' type: ' + error.message + (stack != null ? stack : '') 12236 ); 12237 } 12238 } 12239 } 12240 } 12241} 12242 12243/** 12244 * Resets warning cache when testing. 12245 * 12246 * @private 12247 */ 12248checkPropTypes.resetWarningCache = function() { 12249 if (true) { 12250 loggedTypeFailures = {}; 12251 } 12252} 12253 12254module.exports = checkPropTypes; 12255 12256 12257/***/ }), 12258
vendor: 23,191 bytes, lines 12259-12879
12259/***/ "./node_modules/prop-types/factoryWithTypeCheckers.js": 12260/*!************************************************************!*\ 12261 !*** ./node_modules/prop-types/factoryWithTypeCheckers.js ***! 12262 \************************************************************/ 12263/***/ ((module, __unused_webpack_exports, __webpack_require__) => { 12264 12265"use strict"; 12266/** 12267 * Copyright (c) 2013-present, Facebook, Inc. 12268 * 12269 * This source code is licensed under the MIT license found in the 12270 * LICENSE file in the root directory of this source tree. 12271 */ 12272 12273 12274 12275var ReactIs = __webpack_require__(/*! react-is */ "./node_modules/react-is/index.js"); 12276var assign = __webpack_require__(/*! object-assign */ "./node_modules/object-assign/index.js"); 12277 12278var ReactPropTypesSecret = __webpack_require__(/*! ./lib/ReactPropTypesSecret */ "./node_modules/prop-types/lib/ReactPropTypesSecret.js"); 12279var has = __webpack_require__(/*! ./lib/has */ "./node_modules/prop-types/lib/has.js"); 12280var checkPropTypes = __webpack_require__(/*! ./checkPropTypes */ "./node_modules/prop-types/checkPropTypes.js"); 12281 12282var printWarning = function() {}; 12283 12284if (true) { 12285 printWarning = function(text) { 12286 var message = 'Warning: ' + text; 12287 if (typeof console !== 'undefined') { 12288 console.error(message); 12289 } 12290 try { 12291 // --- Welcome to debugging React --- 12292 // This error was thrown as a convenience so that you can use this stack 12293 // to find the callsite that caused this warning to fire. 12294 throw new Error(message); 12295 } catch (x) {} 12296 }; 12297} 12298 12299function emptyFunctionThatReturnsNull() { 12300 return null; 12301} 12302 12303module.exports = function(isValidElement, throwOnDirectAccess) { 12304 /* global Symbol */ 12305 var ITERATOR_SYMBOL = typeof Symbol === 'function' && Symbol.iterator; 12306 var FAUX_ITERATOR_SYMBOL = '@@iterator'; // Before Symbol spec. 12307 12308 /** 12309 * Returns the iterator method function contained on the iterable object. 12310 * 12311 * Be sure to invoke the function with the iterable as context: 12312 * 12313 * var iteratorFn = getIteratorFn(myIterable); 12314 * if (iteratorFn) { 12315 * var iterator = iteratorFn.call(myIterable); 12316 * ... 12317 * } 12318 * 12319 * @param {?object} maybeIterable 12320 * @return {?function} 12321 */ 12322 function getIteratorFn(maybeIterable) { 12323 var iteratorFn = maybeIterable && (ITERATOR_SYMBOL && maybeIterable[ITERATOR_SYMBOL] || maybeIterable[FAUX_ITERATOR_SYMBOL]); 12324 if (typeof iteratorFn === 'function') { 12325 return iteratorFn; 12326 } 12327 } 12328 12329 /** 12330 * Collection of methods that allow declaration and validation of props that are 12331 * supplied to React components. Example usage: 12332 * 12333 * var Props = require('ReactPropTypes'); 12334 * var MyArticle = React.createClass({ 12335 * propTypes: { 12336 * // An optional string prop named "description". 12337 * description: Props.string, 12338 * 12339 * // A required enum prop named "category". 12340 * category: Props.oneOf(['News','Photos']).isRequired, 12341 * 12342 * // A prop named "dialog" that requires an instance of Dialog. 12343 * dialog: Props.instanceOf(Dialog).isRequired 12344 * }, 12345 * render: function() { ... } 12346 * }); 12347 * 12348 * A more formal specification of how these methods are used: 12349 * 12350 * type := array|bool|func|object|number|string|oneOf([...])|instanceOf(...) 12351 * decl := ReactPropTypes.{type}(.isRequired)? 12352 * 12353 * Each and every declaration produces a function with the same signature. This 12354 * allows the creation of custom validation functions. For example: 12355 * 12356 * var MyLink = React.createClass({ 12357 * propTypes: { 12358 * // An optional string or URI prop named "href". 12359 * href: function(props, propName, componentName) { 12360 * var propValue = props[propName]; 12361 * if (propValue != null && typeof propValue !== 'string' && 12362 * !(propValue instanceof URI)) { 12363 * return new Error( 12364 * 'Expected a string or an URI for ' + propName + ' in ' + 12365 * componentName 12366 * ); 12367 * } 12368 * } 12369 * }, 12370 * render: function() {...} 12371 * }); 12372 * 12373 * @internal 12374 */ 12375 12376 var ANONYMOUS = '<<anonymous>>'; 12377 12378 // Important! 12379 // Keep this list in sync with production version in `./factoryWithThrowingShims.js`. 12380 var ReactPropTypes = { 12381 array: createPrimitiveTypeChecker('array'), 12382 bigint: createPrimitiveTypeChecker('bigint'), 12383 bool: createPrimitiveTypeChecker('boolean'), 12384 func: createPrimitiveTypeChecker('function'), 12385 number: createPrimitiveTypeChecker('number'), 12386 object: createPrimitiveTypeChecker('object'), 12387 string: createPrimitiveTypeChecker('string'), 12388 symbol: createPrimitiveTypeChecker('symbol'), 12389 12390 any: createAnyTypeChecker(), 12391 arrayOf: createArrayOfTypeChecker, 12392 element: createElementTypeChecker(), 12393 elementType: createElementTypeTypeChecker(), 12394 instanceOf: createInstanceTypeChecker, 12395 node: createNodeChecker(), 12396 objectOf: createObjectOfTypeChecker, 12397 oneOf: createEnumTypeChecker, 12398 oneOfType: createUnionTypeChecker, 12399 shape: createShapeTypeChecker, 12400 exact: createStrictShapeTypeChecker, 12401 }; 12402 12403 /** 12404 * inlined Object.is polyfill to avoid requiring consumers ship their own 12405 * https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Object/is 12406 */ 12407 /*eslint-disable no-self-compare*/ 12408 function is(x, y) { 12409 // SameValue algorithm 12410 if (x === y) { 12411 // Steps 1-5, 7-10 12412 // Steps 6.b-6.e: +0 != -0 12413 return x !== 0 || 1 / x === 1 / y; 12414 } else { 12415 // Step 6.a: NaN == NaN 12416 return x !== x && y !== y; 12417 } 12418 } 12419 /*eslint-enable no-self-compare*/ 12420 12421 /** 12422 * We use an Error-like object for backward compatibility as people may call 12423 * PropTypes directly and inspect their output. However, we don't use real 12424 * Errors anymore. We don't inspect their stack anyway, and creating them 12425 * is prohibitively expensive if they are created too often, such as what 12426 * happens in oneOfType() for any type before the one that matched. 12427 */ 12428 function PropTypeError(message, data) { 12429 this.message = message; 12430 this.data = data && typeof data === 'object' ? data: {}; 12431 this.stack = ''; 12432 } 12433 // Make `instanceof Error` still work for returned errors. 12434 PropTypeError.prototype = Error.prototype; 12435 12436 function createChainableTypeChecker(validate) { 12437 if (true) { 12438 var manualPropTypeCallCache = {}; 12439 var manualPropTypeWarningCount = 0; 12440 } 12441 function checkType(isRequired, props, propName, componentName, location, propFullName, secret) { 12442 componentName = componentName || ANONYMOUS; 12443 propFullName = propFullName || propName; 12444 12445 if (secret !== ReactPropTypesSecret) { 12446 if (throwOnDirectAccess) { 12447 // New behavior only for users of `prop-types` package 12448 var err = new Error( 12449 'Calling PropTypes validators directly is not supported by the `prop-types` package. ' + 12450 'Use `PropTypes.checkPropTypes()` to call them. ' + 12451 'Read more at http://fb.me/use-check-prop-types' 12452 ); 12453 err.name = 'Invariant Violation'; 12454 throw err; 12455 } else if ( true && typeof console !== 'undefined') { 12456 // Old behavior for people using React.PropTypes 12457 var cacheKey = componentName + ':' + propName; 12458 if ( 12459 !manualPropTypeCallCache[cacheKey] && 12460 // Avoid spamming the console because they are often not actionable except for lib authors 12461 manualPropTypeWarningCount < 3 12462 ) { 12463 printWarning( 12464 'You are manually calling a React.PropTypes validation ' + 12465 'function for the `' + propFullName + '` prop on `' + componentName + '`. This is deprecated ' + 12466 'and will throw in the standalone `prop-types` package. ' + 12467 'You may be seeing this warning due to a third-party PropTypes ' + 12468 'library. See https://fb.me/react-warning-dont-call-proptypes ' + 'for details.' 12469 ); 12470 manualPropTypeCallCache[cacheKey] = true; 12471 manualPropTypeWarningCount++; 12472 } 12473 } 12474 } 12475 if (props[propName] == null) { 12476 if (isRequired) { 12477 if (props[propName] === null) { 12478 return new PropTypeError('The ' + location + ' `' + propFullName + '` is marked as required ' + ('in `' + componentName + '`, but its value is `null`.')); 12479 } 12480 return new PropTypeError('The ' + location + ' `' + propFullName + '` is marked as required in ' + ('`' + componentName + '`, but its value is `undefined`.')); 12481 } 12482 return null; 12483 } else { 12484 return validate(props, propName, componentName, location, propFullName); 12485 } 12486 } 12487 12488 var chainedCheckType = checkType.bind(null, false); 12489 chainedCheckType.isRequired = checkType.bind(null, true); 12490 12491 return chainedCheckType; 12492 } 12493 12494 function createPrimitiveTypeChecker(expectedType) { 12495 function validate(props, propName, componentName, location, propFullName, secret) { 12496 var propValue = props[propName]; 12497 var propType = getPropType(propValue); 12498 if (propType !== expectedType) { 12499 // `propValue` being instance of, say, date/regexp, pass the 'object' 12500 // check, but we can offer a more precise error message here rather than 12501 // 'of type `object`'. 12502 var preciseType = getPreciseType(propValue); 12503 12504 return new PropTypeError( 12505 'Invalid ' + location + ' `' + propFullName + '` of type ' + ('`' + preciseType + '` supplied to `' + componentName + '`, expected ') + ('`' + expectedType + '`.'), 12506 {expectedType: expectedType} 12507 ); 12508 } 12509 return null; 12510 } 12511 return createChainableTypeChecker(validate); 12512 } 12513 12514 function createAnyTypeChecker() { 12515 return createChainableTypeChecker(emptyFunctionThatReturnsNull); 12516 } 12517 12518 function createArrayOfTypeChecker(typeChecker) { 12519 function validate(props, propName, componentName, location, propFullName) { 12520 if (typeof typeChecker !== 'function') { 12521 return new PropTypeError('Property `' + propFullName + '` of component `' + componentName + '` has invalid PropType notation inside arrayOf.'); 12522 } 12523 var propValue = props[propName]; 12524 if (!Array.isArray(propValue)) { 12525 var propType = getPropType(propValue); 12526 return new PropTypeError('Invalid ' + location + ' `' + propFullName + '` of type ' + ('`' + propType + '` supplied to `' + componentName + '`, expected an array.')); 12527 } 12528 for (var i = 0; i < propValue.length; i++) { 12529 var error = typeChecker(propValue, i, componentName, location, propFullName + '[' + i + ']', ReactPropTypesSecret); 12530 if (error instanceof Error) { 12531 return error; 12532 } 12533 } 12534 return null; 12535 } 12536 return createChainableTypeChecker(validate); 12537 } 12538 12539 function createElementTypeChecker() { 12540 function validate(props, propName, componentName, location, propFullName) { 12541 var propValue = props[propName]; 12542 if (!isValidElement(propValue)) { 12543 var propType = getPropType(propValue); 12544 return new PropTypeError('Invalid ' + location + ' `' + propFullName + '` of type ' + ('`' + propType + '` supplied to `' + componentName + '`, expected a single ReactElement.')); 12545 } 12546 return null; 12547 } 12548 return createChainableTypeChecker(validate); 12549 } 12550 12551 function createElementTypeTypeChecker() { 12552 function validate(props, propName, componentName, location, propFullName) { 12553 var propValue = props[propName]; 12554 if (!ReactIs.isValidElementType(propValue)) { 12555 var propType = getPropType(propValue); 12556 return new PropTypeError('Invalid ' + location + ' `' + propFullName + '` of type ' + ('`' + propType + '` supplied to `' + componentName + '`, expected a single ReactElement type.')); 12557 } 12558 return null; 12559 } 12560 return createChainableTypeChecker(validate); 12561 } 12562 12563 function createInstanceTypeChecker(expectedClass) { 12564 function validate(props, propName, componentName, location, propFullName) { 12565 if (!(props[propName] instanceof expectedClass)) { 12566 var expectedClassName = expectedClass.name || ANONYMOUS; 12567 var actualClassName = getClassName(props[propName]); 12568 return new PropTypeError('Invalid ' + location + ' `' + propFullName + '` of type ' + ('`' + actualClassName + '` supplied to `' + componentName + '`, expected ') + ('instance of `' + expectedClassName + '`.')); 12569 } 12570 return null; 12571 } 12572 return createChainableTypeChecker(validate); 12573 } 12574 12575 function createEnumTypeChecker(expectedValues) { 12576 if (!Array.isArray(expectedValues)) { 12577 if (true) { 12578 if (arguments.length > 1) { 12579 printWarning( 12580 'Invalid arguments supplied to oneOf, expected an array, got ' + arguments.length + ' arguments. ' + 12581 'A common mistake is to write oneOf(x, y, z) instead of oneOf([x, y, z]).' 12582 ); 12583 } else { 12584 printWarning('Invalid argument supplied to oneOf, expected an array.'); 12585 } 12586 } 12587 return emptyFunctionThatReturnsNull; 12588 } 12589 12590 function validate(props, propName, componentName, location, propFullName) { 12591 var propValue = props[propName]; 12592 for (var i = 0; i < expectedValues.length; i++) { 12593 if (is(propValue, expectedValues[i])) { 12594 return null; 12595 } 12596 } 12597 12598 var valuesString = JSON.stringify(expectedValues, function replacer(key, value) { 12599 var type = getPreciseType(value); 12600 if (type === 'symbol') { 12601 return String(value); 12602 } 12603 return value; 12604 }); 12605 return new PropTypeError('Invalid ' + location + ' `' + propFullName + '` of value `' + String(propValue) + '` ' + ('supplied to `' + componentName + '`, expected one of ' + valuesString + '.')); 12606 } 12607 return createChainableTypeChecker(validate); 12608 } 12609 12610 function createObjectOfTypeChecker(typeChecker) { 12611 function validate(props, propName, componentName, location, propFullName) { 12612 if (typeof typeChecker !== 'function') { 12613 return new PropTypeError('Property `' + propFullName + '` of component `' + componentName + '` has invalid PropType notation inside objectOf.'); 12614 } 12615 var propValue = props[propName]; 12616 var propType = getPropType(propValue); 12617 if (propType !== 'object') { 12618 return new PropTypeError('Invalid ' + location + ' `' + propFullName + '` of type ' + ('`' + propType + '` supplied to `' + componentName + '`, expected an object.')); 12619 } 12620 for (var key in propValue) { 12621 if (has(propValue, key)) { 12622 var error = typeChecker(propValue, key, componentName, location, propFullName + '.' + key, ReactPropTypesSecret); 12623 if (error instanceof Error) { 12624 return error; 12625 } 12626 } 12627 } 12628 return null; 12629 } 12630 return createChainableTypeChecker(validate); 12631 } 12632 12633 function createUnionTypeChecker(arrayOfTypeCheckers) { 12634 if (!Array.isArray(arrayOfTypeCheckers)) { 12635 true ? printWarning('Invalid argument supplied to oneOfType, expected an instance of array.') : 0; 12636 return emptyFunctionThatReturnsNull; 12637 } 12638 12639 for (var i = 0; i < arrayOfTypeCheckers.length; i++) { 12640 var checker = arrayOfTypeCheckers[i]; 12641 if (typeof checker !== 'function') { 12642 printWarning( 12643 'Invalid argument supplied to oneOfType. Expected an array of check functions, but ' + 12644 'received ' + getPostfixForTypeWarning(checker) + ' at index ' + i + '.' 12645 ); 12646 return emptyFunctionThatReturnsNull; 12647 } 12648 } 12649 12650 function validate(props, propName, componentName, location, propFullName) { 12651 var expectedTypes = []; 12652 for (var i = 0; i < arrayOfTypeCheckers.length; i++) { 12653 var checker = arrayOfTypeCheckers[i]; 12654 var checkerResult = checker(props, propName, componentName, location, propFullName, ReactPropTypesSecret); 12655 if (checkerResult == null) { 12656 return null; 12657 } 12658 if (checkerResult.data && has(checkerResult.data, 'expectedType')) { 12659 expectedTypes.push(checkerResult.data.expectedType); 12660 } 12661 } 12662 var expectedTypesMessage = (expectedTypes.length > 0) ? ', expected one of type [' + expectedTypes.join(', ') + ']': ''; 12663 return new PropTypeError('Invalid ' + location + ' `' + propFullName + '` supplied to ' + ('`' + componentName + '`' + expectedTypesMessage + '.')); 12664 } 12665 return createChainableTypeChecker(validate); 12666 } 12667 12668 function createNodeChecker() { 12669 function validate(props, propName, componentName, location, propFullName) { 12670 if (!isNode(props[propName])) { 12671 return new PropTypeError('Invalid ' + location + ' `' + propFullName + '` supplied to ' + ('`' + componentName + '`, expected a ReactNode.')); 12672 } 12673 return null; 12674 } 12675 return createChainableTypeChecker(validate); 12676 } 12677 12678 function invalidValidatorError(componentName, location, propFullName, key, type) { 12679 return new PropTypeError( 12680 (componentName || 'React class') + ': ' + location + ' type `' + propFullName + '.' + key + '` is invalid; ' + 12681 'it must be a function, usually from the `prop-types` package, but received `' + type + '`.' 12682 ); 12683 } 12684 12685 function createShapeTypeChecker(shapeTypes) { 12686 function validate(props, propName, componentName, location, propFullName) { 12687 var propValue = props[propName]; 12688 var propType = getPropType(propValue); 12689 if (propType !== 'object') { 12690 return new PropTypeError('Invalid ' + location + ' `' + propFullName + '` of type `' + propType + '` ' + ('supplied to `' + componentName + '`, expected `object`.')); 12691 } 12692 for (var key in shapeTypes) { 12693 var checker = shapeTypes[key]; 12694 if (typeof checker !== 'function') { 12695 return invalidValidatorError(componentName, location, propFullName, key, getPreciseType(checker)); 12696 } 12697 var error = checker(propValue, key, componentName, location, propFullName + '.' + key, ReactPropTypesSecret); 12698 if (error) { 12699 return error; 12700 } 12701 } 12702 return null; 12703 } 12704 return createChainableTypeChecker(validate); 12705 } 12706 12707 function createStrictShapeTypeChecker(shapeTypes) { 12708 function validate(props, propName, componentName, location, propFullName) { 12709 var propValue = props[propName]; 12710 var propType = getPropType(propValue); 12711 if (propType !== 'object') { 12712 return new PropTypeError('Invalid ' + location + ' `' + propFullName + '` of type `' + propType + '` ' + ('supplied to `' + componentName + '`, expected `object`.')); 12713 } 12714 // We need to check all keys in case some are required but missing from props. 12715 var allKeys = assign({}, props[propName], shapeTypes); 12716 for (var key in allKeys) { 12717 var checker = shapeTypes[key]; 12718 if (has(shapeTypes, key) && typeof checker !== 'function') { 12719 return invalidValidatorError(componentName, location, propFullName, key, getPreciseType(checker)); 12720 } 12721 if (!checker) { 12722 return new PropTypeError( 12723 'Invalid ' + location + ' `' + propFullName + '` key `' + key + '` supplied to `' + componentName + '`.' + 12724 '\nBad object: ' + JSON.stringify(props[propName], null, ' ') + 12725 '\nValid keys: ' + JSON.stringify(Object.keys(shapeTypes), null, ' ') 12726 ); 12727 } 12728 var error = checker(propValue, key, componentName, location, propFullName + '.' + key, ReactPropTypesSecret); 12729 if (error) { 12730 return error; 12731 } 12732 } 12733 return null; 12734 } 12735 12736 return createChainableTypeChecker(validate); 12737 } 12738 12739 function isNode(propValue) { 12740 switch (typeof propValue) { 12741 case 'number': 12742 case 'string': 12743 case 'undefined': 12744 return true; 12745 case 'boolean': 12746 return !propValue; 12747 case 'object': 12748 if (Array.isArray(propValue)) { 12749 return propValue.every(isNode); 12750 } 12751 if (propValue === null || isValidElement(propValue)) { 12752 return true; 12753 } 12754 12755 var iteratorFn = getIteratorFn(propValue); 12756 if (iteratorFn) { 12757 var iterator = iteratorFn.call(propValue); 12758 var step; 12759 if (iteratorFn !== propValue.entries) { 12760 while (!(step = iterator.next()).done) { 12761 if (!isNode(step.value)) { 12762 return false; 12763 } 12764 } 12765 } else { 12766 // Iterator will provide entry [k,v] tuples rather than values. 12767 while (!(step = iterator.next()).done) { 12768 var entry = step.value; 12769 if (entry) { 12770 if (!isNode(entry[1])) { 12771 return false; 12772 } 12773 } 12774 } 12775 } 12776 } else { 12777 return false; 12778 } 12779 12780 return true; 12781 default: 12782 return false; 12783 } 12784 } 12785 12786 function isSymbol(propType, propValue) { 12787 // Native Symbol. 12788 if (propType === 'symbol') { 12789 return true; 12790 } 12791 12792 // falsy value can't be a Symbol 12793 if (!propValue) { 12794 return false; 12795 } 12796 12797 // 19.4.3.5 Symbol.prototype[@@toStringTag] === 'Symbol' 12798 if (propValue['@@toStringTag'] === 'Symbol') { 12799 return true; 12800 } 12801 12802 // Fallback for non-spec compliant Symbols which are polyfilled. 12803 if (typeof Symbol === 'function' && propValue instanceof Symbol) { 12804 return true; 12805 } 12806 12807 return false; 12808 } 12809 12810 // Equivalent of `typeof` but with special handling for array and regexp. 12811 function getPropType(propValue) { 12812 var propType = typeof propValue; 12813 if (Array.isArray(propValue)) { 12814 return 'array'; 12815 } 12816 if (propValue instanceof RegExp) { 12817 // Old webkits (at least until Android 4.0) return 'function' rather than 12818 // 'object' for typeof a RegExp. We'll normalize this here so that /bla/ 12819 // passes PropTypes.object. 12820 return 'object'; 12821 } 12822 if (isSymbol(propType, propValue)) { 12823 return 'symbol'; 12824 } 12825 return propType; 12826 } 12827 12828 // This handles more types than `getPropType`. Only used for error messages. 12829 // See `createPrimitiveTypeChecker`. 12830 function getPreciseType(propValue) { 12831 if (typeof propValue === 'undefined' || propValue === null) { 12832 return '' + propValue; 12833 } 12834 var propType = getPropType(propValue); 12835 if (propType === 'object') { 12836 if (propValue instanceof Date) { 12837 return 'date'; 12838 } else if (propValue instanceof RegExp) { 12839 return 'regexp'; 12840 } 12841 } 12842 return propType; 12843 } 12844 12845 // Returns a string that is postfixed to a warning about an invalid type. 12846 // For example, "undefined" or "of type array" 12847 function getPostfixForTypeWarning(value) { 12848 var type = getPreciseType(value); 12849 switch (type) { 12850 case 'array': 12851 case 'object': 12852 return 'an ' + type; 12853 case 'boolean': 12854 case 'date': 12855 case 'regexp': 12856 return 'a ' + type; 12857 default: 12858 return type; 12859 } 12860 } 12861 12862 // Returns class name of the object, if any. 12863 function getClassName(propValue) { 12864 if (!propValue.constructor || !propValue.constructor.name) { 12865 return ANONYMOUS; 12866 } 12867 return propValue.constructor.name; 12868 } 12869 12870 ReactPropTypes.checkPropTypes = checkPropTypes; 12871 ReactPropTypes.resetWarningCache = checkPropTypes.resetWarningCache; 12872 ReactPropTypes.PropTypes = ReactPropTypes; 12873 12874 return ReactPropTypes; 12875}; 12876 12877 12878/***/ }), 12879
vendor: 889 bytes, lines 12880-12904
12880/***/ "./node_modules/prop-types/index.js": 12881/*!******************************************!*\ 12882 !*** ./node_modules/prop-types/index.js ***! 12883 \******************************************/ 12884/***/ ((module, __unused_webpack_exports, __webpack_require__) => { 12885 12886/** 12887 * Copyright (c) 2013-present, Facebook, Inc. 12888 * 12889 * This source code is licensed under the MIT license found in the 12890 * LICENSE file in the root directory of this source tree. 12891 */ 12892 12893if (true) { 12894 var ReactIs = __webpack_require__(/*! react-is */ "./node_modules/react-is/index.js"); 12895 12896 // By explicitly using `prop-types` you are opting into new development behavior. 12897 // http://fb.me/prop-types-in-prod 12898 var throwOnDirectAccess = true; 12899 module.exports = __webpack_require__(/*! ./factoryWithTypeCheckers */ "./node_modules/prop-types/factoryWithTypeCheckers.js")(ReactIs.isElement, throwOnDirectAccess); 12900} else {} 12901 12902 12903/***/ }), 12904
vendor: 613 bytes, lines 12905-12927
12905/***/ "./node_modules/prop-types/lib/ReactPropTypesSecret.js": 12906/*!*************************************************************!*\ 12907 !*** ./node_modules/prop-types/lib/ReactPropTypesSecret.js ***! 12908 \*************************************************************/ 12909/***/ ((module) => { 12910 12911"use strict"; 12912/** 12913 * Copyright (c) 2013-present, Facebook, Inc. 12914 * 12915 * This source code is licensed under the MIT license found in the 12916 * LICENSE file in the root directory of this source tree. 12917 */ 12918 12919 12920 12921var ReactPropTypesSecret = 'SECRET_DO_NOT_PASS_THIS_OR_YOU_WILL_BE_FIRED'; 12922 12923module.exports = ReactPropTypesSecret; 12924 12925 12926/***/ }), 12927
vendor: 300 bytes, lines 12928-12938
12928/***/ "./node_modules/prop-types/lib/has.js": 12929/*!********************************************!*\ 12930 !*** ./node_modules/prop-types/lib/has.js ***! 12931 \********************************************/ 12932/***/ ((module) => { 12933 12934module.exports = Function.call.bind(Object.prototype.hasOwnProperty); 12935 12936 12937/***/ }), 12938
vendor: 527 bytes, lines 12939-12967
12939/***/ "./node_modules/ramda/src/F.js": 12940/*!*************************************!*\ 12941 !*** ./node_modules/ramda/src/F.js ***! 12942 \*************************************/ 12943/***/ ((module) => { 12944 12945/** 12946 * A function that always returns `false`. Any passed in parameters are ignored. 12947 * 12948 * @func 12949 * @memberOf R 12950 * @since v0.9.0 12951 * @category Function 12952 * @sig * -> Boolean 12953 * @param {*} 12954 * @return {Boolean} 12955 * @see R.T 12956 * @example 12957 * 12958 * R.F(); //=> false 12959 */ 12960var F = function () { 12961 return false; 12962}; 12963 12964module.exports = F; 12965 12966/***/ }), 12967
vendor: 524 bytes, lines 12968-12996
12968/***/ "./node_modules/ramda/src/T.js": 12969/*!*************************************!*\ 12970 !*** ./node_modules/ramda/src/T.js ***! 12971 \*************************************/ 12972/***/ ((module) => { 12973 12974/** 12975 * A function that always returns `true`. Any passed in parameters are ignored. 12976 * 12977 * @func 12978 * @memberOf R 12979 * @since v0.9.0 12980 * @category Function 12981 * @sig * -> Boolean 12982 * @param {*} 12983 * @return {Boolean} 12984 * @see R.F 12985 * @example 12986 * 12987 * R.T(); //=> true 12988 */ 12989var T = function () { 12990 return true; 12991}; 12992 12993module.exports = T; 12994 12995/***/ }), 12996
vendor: 949 bytes, lines 12997-13035
12997/***/ "./node_modules/ramda/src/__.js": 12998/*!**************************************!*\ 12999 !*** ./node_modules/ramda/src/__.js ***! 13000 \**************************************/ 13001/***/ ((module) => { 13002 13003/** 13004 * A special placeholder value used to specify "gaps" within curried functions, 13005 * allowing partial application of any combination of arguments, regardless of 13006 * their positions. 13007 * 13008 * If `g` is a curried ternary function and `_` is `R.__`, the following are 13009 * equivalent: 13010 * 13011 * - `g(1, 2, 3)` 13012 * - `g(_, 2, 3)(1)` 13013 * - `g(_, _, 3)(1)(2)` 13014 * - `g(_, _, 3)(1, 2)` 13015 * - `g(_, 2, _)(1, 3)` 13016 * - `g(_, 2)(1)(3)` 13017 * - `g(_, 2)(1, 3)` 13018 * - `g(_, 2)(_, 3)(1)` 13019 * 13020 * @name __ 13021 * @constant 13022 * @memberOf R 13023 * @since v0.6.0 13024 * @category Function 13025 * @example 13026 * 13027 * const greet = R.replace('{name}', R.__, 'Hello, {name}!'); 13028 * greet('Alice'); //=> 'Hello, Alice!' 13029 */ 13030module.exports = { 13031 '@@functional/placeholder': true 13032}; 13033 13034/***/ }), 13035
vendor: 787 bytes, lines 13036-13073
13036/***/ "./node_modules/ramda/src/add.js": 13037/*!***************************************!*\ 13038 !*** ./node_modules/ramda/src/add.js ***! 13039 \***************************************/ 13040/***/ ((module, __unused_webpack_exports, __webpack_require__) => { 13041 13042var _curry2 = 13043/*#__PURE__*/ 13044__webpack_require__(/*! ./internal/_curry2.js */ "./node_modules/ramda/src/internal/_curry2.js"); 13045/** 13046 * Adds two values. 13047 * 13048 * @func 13049 * @memberOf R 13050 * @since v0.1.0 13051 * @category Math 13052 * @sig Number -> Number -> Number 13053 * @param {Number} a 13054 * @param {Number} b 13055 * @return {Number} 13056 * @see R.subtract 13057 * @example 13058 * 13059 * R.add(2, 3); //=> 5 13060 * R.add(7)(10); //=> 17 13061 */ 13062 13063 13064var add = 13065/*#__PURE__*/ 13066_curry2(function add(a, b) { 13067 return Number(a) + Number(b); 13068}); 13069 13070module.exports = add; 13071 13072/***/ }), 13073
vendor: 2,208 bytes, lines 13074-13139
13074/***/ "./node_modules/ramda/src/addIndex.js": 13075/*!********************************************!*\ 13076 !*** ./node_modules/ramda/src/addIndex.js ***! 13077 \********************************************/ 13078/***/ ((module, __unused_webpack_exports, __webpack_require__) => { 13079 13080var _concat = 13081/*#__PURE__*/ 13082__webpack_require__(/*! ./internal/_concat.js */ "./node_modules/ramda/src/internal/_concat.js"); 13083 13084var _curry1 = 13085/*#__PURE__*/ 13086__webpack_require__(/*! ./internal/_curry1.js */ "./node_modules/ramda/src/internal/_curry1.js"); 13087 13088var curryN = 13089/*#__PURE__*/ 13090__webpack_require__(/*! ./curryN.js */ "./node_modules/ramda/src/curryN.js"); 13091/** 13092 * Creates a new list iteration function from an existing one by adding two new 13093 * parameters to its callback function: the current index, and the entire list. 13094 * 13095 * This would turn, for instance, [`R.map`](#map) function into one that 13096 * more closely resembles `Array.prototype.map`. Note that this will only work 13097 * for functions in which the iteration callback function is the first 13098 * parameter, and where the list is the last parameter. (This latter might be 13099 * unimportant if the list parameter is not used.) 13100 * 13101 * @func 13102 * @memberOf R 13103 * @since v0.15.0 13104 * @category Function 13105 * @category List 13106 * @sig (((a ...) -> b) ... -> [a] -> *) -> (((a ..., Int, [a]) -> b) ... -> [a] -> *) 13107 * @param {Function} fn A list iteration function that does not pass index or list to its callback 13108 * @return {Function} An altered list iteration function that passes (item, index, list) to its callback 13109 * @example 13110 * 13111 * const mapIndexed = R.addIndex(R.map); 13112 * mapIndexed((val, idx) => idx + '-' + val, ['f', 'o', 'o', 'b', 'a', 'r']); 13113 * //=> ['0-f', '1-o', '2-o', '3-b', '4-a', '5-r'] 13114 */ 13115 13116 13117var addIndex = 13118/*#__PURE__*/ 13119_curry1(function addIndex(fn) { 13120 return curryN(fn.length, function () { 13121 var idx = 0; 13122 var origFn = arguments[0]; 13123 var list = arguments[arguments.length - 1]; 13124 var args = Array.prototype.slice.call(arguments, 0); 13125 13126 args[0] = function () { 13127 var result = origFn.apply(this, _concat(arguments, [idx, list])); 13128 idx += 1; 13129 return result; 13130 }; 13131 13132 return fn.apply(this, args); 13133 }); 13134}); 13135 13136module.exports = addIndex; 13137 13138/***/ }), 13139
vendor: 1,800 bytes, lines 13140-13200
13140/***/ "./node_modules/ramda/src/adjust.js": 13141/*!******************************************!*\ 13142 !*** ./node_modules/ramda/src/adjust.js ***! 13143 \******************************************/ 13144/***/ ((module, __unused_webpack_exports, __webpack_require__) => { 13145 13146var _concat = 13147/*#__PURE__*/ 13148__webpack_require__(/*! ./internal/_concat.js */ "./node_modules/ramda/src/internal/_concat.js"); 13149 13150var _curry3 = 13151/*#__PURE__*/ 13152__webpack_require__(/*! ./internal/_curry3.js */ "./node_modules/ramda/src/internal/_curry3.js"); 13153/** 13154 * Applies a function to the value at the given index of an array, returning a 13155 * new copy of the array with the element at the given index replaced with the 13156 * result of the function application. 13157 * 13158 * @func 13159 * @memberOf R 13160 * @since v0.14.0 13161 * @category List 13162 * @sig Number -> (a -> a) -> [a] -> [a] 13163 * @param {Number} idx The index. 13164 * @param {Function} fn The function to apply. 13165 * @param {Array|Arguments} list An array-like object whose value 13166 * at the supplied index will be replaced. 13167 * @return {Array} A copy of the supplied array-like object with 13168 * the element at index `idx` replaced with the value 13169 * returned by applying `fn` to the existing element. 13170 * @see R.update 13171 * @example 13172 * 13173 * R.adjust(1, R.toUpper, ['a', 'b', 'c', 'd']); //=> ['a', 'B', 'c', 'd'] 13174 * R.adjust(-1, R.toUpper, ['a', 'b', 'c', 'd']); //=> ['a', 'b', 'c', 'D'] 13175 * @symb R.adjust(-1, f, [a, b]) = [a, f(b)] 13176 * @symb R.adjust(0, f, [a, b]) = [f(a), b] 13177 */ 13178 13179 13180var adjust = 13181/*#__PURE__*/ 13182_curry3(function adjust(idx, fn, list) { 13183 var len = list.length; 13184 13185 if (idx >= len || idx < -len) { 13186 return list; 13187 } 13188 13189 var _idx = (len + idx) % len; 13190 13191 var _list = _concat(list); 13192 13193 _list[_idx] = fn(list[_idx]); 13194 return _list; 13195}); 13196 13197module.exports = adjust; 13198 13199/***/ }), 13200
vendor: 1,659 bytes, lines 13201-13265
13201/***/ "./node_modules/ramda/src/all.js": 13202/*!***************************************!*\ 13203 !*** ./node_modules/ramda/src/all.js ***! 13204 \***************************************/ 13205/***/ ((module, __unused_webpack_exports, __webpack_require__) => { 13206 13207var _curry2 = 13208/*#__PURE__*/ 13209__webpack_require__(/*! ./internal/_curry2.js */ "./node_modules/ramda/src/internal/_curry2.js"); 13210 13211var _dispatchable = 13212/*#__PURE__*/ 13213__webpack_require__(/*! ./internal/_dispatchable.js */ "./node_modules/ramda/src/internal/_dispatchable.js"); 13214 13215var _xall = 13216/*#__PURE__*/ 13217__webpack_require__(/*! ./internal/_xall.js */ "./node_modules/ramda/src/internal/_xall.js"); 13218/** 13219 * Returns `true` if all elements of the list match the predicate, `false` if 13220 * there are any that don't. 13221 * 13222 * Dispatches to the `all` method of the second argument, if present. 13223 * 13224 * Acts as a transducer if a transformer is given in list position. 13225 * 13226 * @func 13227 * @memberOf R 13228 * @since v0.1.0 13229 * @category List 13230 * @sig (a -> Boolean) -> [a] -> Boolean 13231 * @param {Function} fn The predicate function. 13232 * @param {Array} list The array to consider. 13233 * @return {Boolean} `true` if the predicate is satisfied by every element, `false` 13234 * otherwise. 13235 * @see R.any, R.none, R.transduce 13236 * @example 13237 * 13238 * const equals3 = R.equals(3); 13239 * R.all(equals3)([3, 3, 3, 3]); //=> true 13240 * R.all(equals3)([3, 3, 1, 3]); //=> false 13241 */ 13242 13243 13244var all = 13245/*#__PURE__*/ 13246_curry2( 13247/*#__PURE__*/ 13248_dispatchable(['all'], _xall, function all(fn, list) { 13249 var idx = 0; 13250 13251 while (idx < list.length) { 13252 if (!fn(list[idx])) { 13253 return false; 13254 } 13255 13256 idx += 1; 13257 } 13258 13259 return true; 13260})); 13261 13262module.exports = all; 13263 13264/***/ }), 13265
vendor: 2,014 bytes, lines 13266-13340
13266/***/ "./node_modules/ramda/src/allPass.js": 13267/*!*******************************************!*\ 13268 !*** ./node_modules/ramda/src/allPass.js ***! 13269 \*******************************************/ 13270/***/ ((module, __unused_webpack_exports, __webpack_require__) => { 13271 13272var _curry1 = 13273/*#__PURE__*/ 13274__webpack_require__(/*! ./internal/_curry1.js */ "./node_modules/ramda/src/internal/_curry1.js"); 13275 13276var curryN = 13277/*#__PURE__*/ 13278__webpack_require__(/*! ./curryN.js */ "./node_modules/ramda/src/curryN.js"); 13279 13280var max = 13281/*#__PURE__*/ 13282__webpack_require__(/*! ./max.js */ "./node_modules/ramda/src/max.js"); 13283 13284var pluck = 13285/*#__PURE__*/ 13286__webpack_require__(/*! ./pluck.js */ "./node_modules/ramda/src/pluck.js"); 13287 13288var reduce = 13289/*#__PURE__*/ 13290__webpack_require__(/*! ./reduce.js */ "./node_modules/ramda/src/reduce.js"); 13291/** 13292 * Takes a list of predicates and returns a predicate that returns true for a 13293 * given list of arguments if every one of the provided predicates is satisfied 13294 * by those arguments. 13295 * 13296 * The function returned is a curried function whose arity matches that of the 13297 * highest-arity predicate. 13298 * 13299 * @func 13300 * @memberOf R 13301 * @since v0.9.0 13302 * @category Logic 13303 * @sig [(*... -> Boolean)] -> (*... -> Boolean) 13304 * @param {Array} predicates An array of predicates to check 13305 * @return {Function} The combined predicate 13306 * @see R.anyPass 13307 * @example 13308 * 13309 * const isQueen = R.propEq('rank', 'Q'); 13310 * const isSpade = R.propEq('suit', 'â ï¸'); 13311 * const isQueenOfSpades = R.allPass([isQueen, isSpade]); 13312 * 13313 * isQueenOfSpades({rank: 'Q', suit: 'â£ï¸'}); //=> false 13314 * isQueenOfSpades({rank: 'Q', suit: 'â ï¸'}); //=> true 13315 */ 13316 13317 13318var allPass = 13319/*#__PURE__*/ 13320_curry1(function allPass(preds) { 13321 return curryN(reduce(max, 0, pluck('length', preds)), function () { 13322 var idx = 0; 13323 var len = preds.length; 13324 13325 while (idx < len) { 13326 if (!preds[idx].apply(this, arguments)) { 13327 return false; 13328 } 13329 13330 idx += 1; 13331 } 13332 13333 return true; 13334 }); 13335}); 13336 13337module.exports = allPass; 13338 13339/***/ }), 13340
vendor: 1,058 bytes, lines 13341-13382
13341/***/ "./node_modules/ramda/src/always.js": 13342/*!******************************************!*\ 13343 !*** ./node_modules/ramda/src/always.js ***! 13344 \******************************************/ 13345/***/ ((module, __unused_webpack_exports, __webpack_require__) => { 13346 13347var _curry1 = 13348/*#__PURE__*/ 13349__webpack_require__(/*! ./internal/_curry1.js */ "./node_modules/ramda/src/internal/_curry1.js"); 13350/** 13351 * Returns a function that always returns the given value. Note that for 13352 * non-primitives the value returned is a reference to the original value. 13353 * 13354 * This function is known as `const`, `constant`, or `K` (for K combinator) in 13355 * other languages and libraries. 13356 * 13357 * @func 13358 * @memberOf R 13359 * @since v0.1.0 13360 * @category Function 13361 * @sig a -> (* -> a) 13362 * @param {*} val The value to wrap in a function 13363 * @return {Function} A Function :: * -> val. 13364 * @example 13365 * 13366 * const t = R.always('Tee'); 13367 * t(); //=> 'Tee' 13368 */ 13369 13370 13371var always = 13372/*#__PURE__*/ 13373_curry1(function always(val) { 13374 return function () { 13375 return val; 13376 }; 13377}); 13378 13379module.exports = always; 13380 13381/***/ }), 13382
vendor: 967 bytes, lines 13383-13423
13383/***/ "./node_modules/ramda/src/and.js": 13384/*!***************************************!*\ 13385 !*** ./node_modules/ramda/src/and.js ***! 13386 \***************************************/ 13387/***/ ((module, __unused_webpack_exports, __webpack_require__) => { 13388 13389var _curry2 = 13390/*#__PURE__*/ 13391__webpack_require__(/*! ./internal/_curry2.js */ "./node_modules/ramda/src/internal/_curry2.js"); 13392/** 13393 * Returns the first argument if it is falsy, otherwise the second argument. 13394 * Acts as the boolean `and` statement if both inputs are `Boolean`s. 13395 * 13396 * @func 13397 * @memberOf R 13398 * @since v0.1.0 13399 * @category Logic 13400 * @sig a -> b -> a | b 13401 * @param {Any} a 13402 * @param {Any} b 13403 * @return {Any} 13404 * @see R.both, R.or 13405 * @example 13406 * 13407 * R.and(true, true); //=> true 13408 * R.and(true, false); //=> false 13409 * R.and(false, true); //=> false 13410 * R.and(false, false); //=> false 13411 */ 13412 13413 13414var and = 13415/*#__PURE__*/ 13416_curry2(function and(a, b) { 13417 return a && b; 13418}); 13419 13420module.exports = and; 13421 13422/***/ }), 13423
vendor: 1,744 bytes, lines 13424-13480
13424/***/ "./node_modules/ramda/src/andThen.js": 13425/*!*******************************************!*\ 13426 !*** ./node_modules/ramda/src/andThen.js ***! 13427 \*******************************************/ 13428/***/ ((module, __unused_webpack_exports, __webpack_require__) => { 13429 13430var _curry2 = 13431/*#__PURE__*/ 13432__webpack_require__(/*! ./internal/_curry2.js */ "./node_modules/ramda/src/internal/_curry2.js"); 13433 13434var _assertPromise = 13435/*#__PURE__*/ 13436__webpack_require__(/*! ./internal/_assertPromise.js */ "./node_modules/ramda/src/internal/_assertPromise.js"); 13437/** 13438 * Returns the result of applying the onSuccess function to the value inside 13439 * a successfully resolved promise. This is useful for working with promises 13440 * inside function compositions. 13441 * 13442 * @func 13443 * @memberOf R 13444 * @since v0.27.1 13445 * @category Function 13446 * @sig (a -> b) -> (Promise e a) -> (Promise e b) 13447 * @sig (a -> (Promise e b)) -> (Promise e a) -> (Promise e b) 13448 * @param {Function} onSuccess The function to apply. Can return a value or a promise of a value. 13449 * @param {Promise} p 13450 * @return {Promise} The result of calling `p.then(onSuccess)` 13451 * @see R.otherwise 13452 * @example 13453 * 13454 * const makeQuery = email => ({ query: { email }}); 13455 * const fetchMember = request => 13456 * Promise.resolve({ firstName: 'Bob', lastName: 'Loblaw', id: 42 }); 13457 * 13458 * //getMemberName :: String -> Promise ({ firstName, lastName }) 13459 * const getMemberName = R.pipe( 13460 * makeQuery, 13461 * fetchMember, 13462 * R.andThen(R.pick(['firstName', 'lastName'])) 13463 * ); 13464 * 13465 * getMemberName('[email protected]').then(console.log); 13466 */ 13467 13468 13469var andThen = 13470/*#__PURE__*/ 13471_curry2(function andThen(f, p) { 13472 _assertPromise('andThen', p); 13473 13474 return p.then(f); 13475}); 13476 13477module.exports = andThen; 13478 13479/***/ }), 13480
vendor: 1,704 bytes, lines 13481-13546
13481/***/ "./node_modules/ramda/src/any.js": 13482/*!***************************************!*\ 13483 !*** ./node_modules/ramda/src/any.js ***! 13484 \***************************************/ 13485/***/ ((module, __unused_webpack_exports, __webpack_require__) => { 13486 13487var _curry2 = 13488/*#__PURE__*/ 13489__webpack_require__(/*! ./internal/_curry2.js */ "./node_modules/ramda/src/internal/_curry2.js"); 13490 13491var _dispatchable = 13492/*#__PURE__*/ 13493__webpack_require__(/*! ./internal/_dispatchable.js */ "./node_modules/ramda/src/internal/_dispatchable.js"); 13494 13495var _xany = 13496/*#__PURE__*/ 13497__webpack_require__(/*! ./internal/_xany.js */ "./node_modules/ramda/src/internal/_xany.js"); 13498/** 13499 * Returns `true` if at least one of the elements of the list match the predicate, 13500 * `false` otherwise. 13501 * 13502 * Dispatches to the `any` method of the second argument, if present. 13503 * 13504 * Acts as a transducer if a transformer is given in list position. 13505 * 13506 * @func 13507 * @memberOf R 13508 * @since v0.1.0 13509 * @category List 13510 * @sig (a -> Boolean) -> [a] -> Boolean 13511 * @param {Function} fn The predicate function. 13512 * @param {Array} list The array to consider. 13513 * @return {Boolean} `true` if the predicate is satisfied by at least one element, `false` 13514 * otherwise. 13515 * @see R.all, R.none, R.transduce 13516 * @example 13517 * 13518 * const lessThan0 = R.flip(R.lt)(0); 13519 * const lessThan2 = R.flip(R.lt)(2); 13520 * R.any(lessThan0)([1, 2]); //=> false 13521 * R.any(lessThan2)([1, 2]); //=> true 13522 */ 13523 13524 13525var any = 13526/*#__PURE__*/ 13527_curry2( 13528/*#__PURE__*/ 13529_dispatchable(['any'], _xany, function any(fn, list) { 13530 var idx = 0; 13531 13532 while (idx < list.length) { 13533 if (fn(list[idx])) { 13534 return true; 13535 } 13536 13537 idx += 1; 13538 } 13539 13540 return false; 13541})); 13542 13543module.exports = any; 13544 13545/***/ }), 13546
vendor: 2,053 bytes, lines 13547-13622
13547/***/ "./node_modules/ramda/src/anyPass.js": 13548/*!*******************************************!*\ 13549 !*** ./node_modules/ramda/src/anyPass.js ***! 13550 \*******************************************/ 13551/***/ ((module, __unused_webpack_exports, __webpack_require__) => { 13552 13553var _curry1 = 13554/*#__PURE__*/ 13555__webpack_require__(/*! ./internal/_curry1.js */ "./node_modules/ramda/src/internal/_curry1.js"); 13556 13557var curryN = 13558/*#__PURE__*/ 13559__webpack_require__(/*! ./curryN.js */ "./node_modules/ramda/src/curryN.js"); 13560 13561var max = 13562/*#__PURE__*/ 13563__webpack_require__(/*! ./max.js */ "./node_modules/ramda/src/max.js"); 13564 13565var pluck = 13566/*#__PURE__*/ 13567__webpack_require__(/*! ./pluck.js */ "./node_modules/ramda/src/pluck.js"); 13568 13569var reduce = 13570/*#__PURE__*/ 13571__webpack_require__(/*! ./reduce.js */ "./node_modules/ramda/src/reduce.js"); 13572/** 13573 * Takes a list of predicates and returns a predicate that returns true for a 13574 * given list of arguments if at least one of the provided predicates is 13575 * satisfied by those arguments. 13576 * 13577 * The function returned is a curried function whose arity matches that of the 13578 * highest-arity predicate. 13579 * 13580 * @func 13581 * @memberOf R 13582 * @since v0.9.0 13583 * @category Logic 13584 * @sig [(*... -> Boolean)] -> (*... -> Boolean) 13585 * @param {Array} predicates An array of predicates to check 13586 * @return {Function} The combined predicate 13587 * @see R.allPass 13588 * @example 13589 * 13590 * const isClub = R.propEq('suit', 'â£'); 13591 * const isSpade = R.propEq('suit', 'â '); 13592 * const isBlackCard = R.anyPass([isClub, isSpade]); 13593 * 13594 * isBlackCard({rank: '10', suit: 'â£'}); //=> true 13595 * isBlackCard({rank: 'Q', suit: 'â '}); //=> true 13596 * isBlackCard({rank: 'Q', suit: 'â¦'}); //=> false 13597 */ 13598 13599 13600var anyPass = 13601/*#__PURE__*/ 13602_curry1(function anyPass(preds) { 13603 return curryN(reduce(max, 0, pluck('length', preds)), function () { 13604 var idx = 0; 13605 var len = preds.length; 13606 13607 while (idx < len) { 13608 if (preds[idx].apply(this, arguments)) { 13609 return true; 13610 } 13611 13612 idx += 1; 13613 } 13614 13615 return false; 13616 }); 13617}); 13618 13619module.exports = anyPass; 13620 13621/***/ }), 13622
vendor: 1,994 bytes, lines 13623-13685
13623/***/ "./node_modules/ramda/src/ap.js": 13624/*!**************************************!*\ 13625 !*** ./node_modules/ramda/src/ap.js ***! 13626 \**************************************/ 13627/***/ ((module, __unused_webpack_exports, __webpack_require__) => { 13628 13629var _concat = 13630/*#__PURE__*/ 13631__webpack_require__(/*! ./internal/_concat.js */ "./node_modules/ramda/src/internal/_concat.js"); 13632 13633var _curry2 = 13634/*#__PURE__*/ 13635__webpack_require__(/*! ./internal/_curry2.js */ "./node_modules/ramda/src/internal/_curry2.js"); 13636 13637var _reduce = 13638/*#__PURE__*/ 13639__webpack_require__(/*! ./internal/_reduce.js */ "./node_modules/ramda/src/internal/_reduce.js"); 13640 13641var map = 13642/*#__PURE__*/ 13643__webpack_require__(/*! ./map.js */ "./node_modules/ramda/src/map.js"); 13644/** 13645 * ap applies a list of functions to a list of values. 13646 * 13647 * Dispatches to the `ap` method of the second argument, if present. Also 13648 * treats curried functions as applicatives. 13649 * 13650 * @func 13651 * @memberOf R 13652 * @since v0.3.0 13653 * @category Function 13654 * @sig [a -> b] -> [a] -> [b] 13655 * @sig Apply f => f (a -> b) -> f a -> f b 13656 * @sig (r -> a -> b) -> (r -> a) -> (r -> b) 13657 * @param {*} applyF 13658 * @param {*} applyX 13659 * @return {*} 13660 * @example 13661 * 13662 * R.ap([R.multiply(2), R.add(3)], [1,2,3]); //=> [2, 4, 6, 4, 5, 6] 13663 * R.ap([R.concat('tasty '), R.toUpper], ['pizza', 'salad']); //=> ["tasty pizza", "tasty salad", "PIZZA", "SALAD"] 13664 * 13665 * // R.ap can also be used as S combinator 13666 * // when only two functions are passed 13667 * R.ap(R.concat, R.toUpper)('Ramda') //=> 'RamdaRAMDA' 13668 * @symb R.ap([f, g], [a, b]) = [f(a), f(b), g(a), g(b)] 13669 */ 13670 13671 13672var ap = 13673/*#__PURE__*/ 13674_curry2(function ap(applyF, applyX) { 13675 return typeof applyX['fantasy-land/ap'] === 'function' ? applyX['fantasy-land/ap'](applyF) : typeof applyF.ap === 'function' ? applyF.ap(applyX) : typeof applyF === 'function' ? function (x) { 13676 return applyF(x)(applyX(x)); 13677 } : _reduce(function (acc, f) { 13678 return _concat(acc, map(f, applyX)); 13679 }, [], applyF); 13680}); 13681 13682module.exports = ap; 13683 13684/***/ }), 13685
vendor: 1,677 bytes, lines 13686-13739
13686/***/ "./node_modules/ramda/src/aperture.js": 13687/*!********************************************!*\ 13688 !*** ./node_modules/ramda/src/aperture.js ***! 13689 \********************************************/ 13690/***/ ((module, __unused_webpack_exports, __webpack_require__) => { 13691 13692var _aperture = 13693/*#__PURE__*/ 13694__webpack_require__(/*! ./internal/_aperture.js */ "./node_modules/ramda/src/internal/_aperture.js"); 13695 13696var _curry2 = 13697/*#__PURE__*/ 13698__webpack_require__(/*! ./internal/_curry2.js */ "./node_modules/ramda/src/internal/_curry2.js"); 13699 13700var _dispatchable = 13701/*#__PURE__*/ 13702__webpack_require__(/*! ./internal/_dispatchable.js */ "./node_modules/ramda/src/internal/_dispatchable.js"); 13703 13704var _xaperture = 13705/*#__PURE__*/ 13706__webpack_require__(/*! ./internal/_xaperture.js */ "./node_modules/ramda/src/internal/_xaperture.js"); 13707/** 13708 * Returns a new list, composed of n-tuples of consecutive elements. If `n` is 13709 * greater than the length of the list, an empty list is returned. 13710 * 13711 * Acts as a transducer if a transformer is given in list position. 13712 * 13713 * @func 13714 * @memberOf R 13715 * @since v0.12.0 13716 * @category List 13717 * @sig Number -> [a] -> [[a]] 13718 * @param {Number} n The size of the tuples to create 13719 * @param {Array} list The list to split into `n`-length tuples 13720 * @return {Array} The resulting list of `n`-length tuples 13721 * @see R.transduce 13722 * @example 13723 * 13724 * R.aperture(2, [1, 2, 3, 4, 5]); //=> [[1, 2], [2, 3], [3, 4], [4, 5]] 13725 * R.aperture(3, [1, 2, 3, 4, 5]); //=> [[1, 2, 3], [2, 3, 4], [3, 4, 5]] 13726 * R.aperture(7, [1, 2, 3, 4, 5]); //=> [] 13727 */ 13728 13729 13730var aperture = 13731/*#__PURE__*/ 13732_curry2( 13733/*#__PURE__*/ 13734_dispatchable([], _xaperture, _aperture)); 13735 13736module.exports = aperture; 13737 13738/***/ }), 13739
vendor: 1,312 bytes, lines 13740-13784
13740/***/ "./node_modules/ramda/src/append.js": 13741/*!******************************************!*\ 13742 !*** ./node_modules/ramda/src/append.js ***! 13743 \******************************************/ 13744/***/ ((module, __unused_webpack_exports, __webpack_require__) => { 13745 13746var _concat = 13747/*#__PURE__*/ 13748__webpack_require__(/*! ./internal/_concat.js */ "./node_modules/ramda/src/internal/_concat.js"); 13749 13750var _curry2 = 13751/*#__PURE__*/ 13752__webpack_require__(/*! ./internal/_curry2.js */ "./node_modules/ramda/src/internal/_curry2.js"); 13753/** 13754 * Returns a new list containing the contents of the given list, followed by 13755 * the given element. 13756 * 13757 * @func 13758 * @memberOf R 13759 * @since v0.1.0 13760 * @category List 13761 * @sig a -> [a] -> [a] 13762 * @param {*} el The element to add to the end of the new list. 13763 * @param {Array} list The list of elements to add a new item to. 13764 * list. 13765 * @return {Array} A new list containing the elements of the old list followed by `el`. 13766 * @see R.prepend 13767 * @example 13768 * 13769 * R.append('tests', ['write', 'more']); //=> ['write', 'more', 'tests'] 13770 * R.append('tests', []); //=> ['tests'] 13771 * R.append(['tests'], ['write', 'more']); //=> ['write', 'more', ['tests']] 13772 */ 13773 13774 13775var append = 13776/*#__PURE__*/ 13777_curry2(function append(el, list) { 13778 return _concat(list, [el]); 13779}); 13780 13781module.exports = append; 13782 13783/***/ }), 13784
vendor: 1,175 bytes, lines 13785-13825
13785/***/ "./node_modules/ramda/src/apply.js": 13786/*!*****************************************!*\ 13787 !*** ./node_modules/ramda/src/apply.js ***! 13788 \*****************************************/ 13789/***/ ((module, __unused_webpack_exports, __webpack_require__) => { 13790 13791var _curry2 = 13792/*#__PURE__*/ 13793__webpack_require__(/*! ./internal/_curry2.js */ "./node_modules/ramda/src/internal/_curry2.js"); 13794/** 13795 * Applies function `fn` to the argument list `args`. This is useful for 13796 * creating a fixed-arity function from a variadic function. `fn` should be a 13797 * bound function if context is significant. 13798 * 13799 * @func 13800 * @memberOf R 13801 * @since v0.7.0 13802 * @category Function 13803 * @sig (*... -> a) -> [*] -> a 13804 * @param {Function} fn The function which will be called with `args` 13805 * @param {Array} args The arguments to call `fn` with 13806 * @return {*} result The result, equivalent to `fn(...args)` 13807 * @see R.call, R.unapply 13808 * @example 13809 * 13810 * const nums = [1, 2, 3, -99, 42, 6, 7]; 13811 * R.apply(Math.max, nums); //=> 42 13812 * @symb R.apply(f, [a, b, c]) = f(a, b, c) 13813 */ 13814 13815 13816var apply = 13817/*#__PURE__*/ 13818_curry2(function apply(fn, args) { 13819 return fn.apply(this, args); 13820}); 13821 13822module.exports = apply; 13823 13824/***/ }), 13825
vendor: 2,957 bytes, lines 13826-13920
13826/***/ "./node_modules/ramda/src/applySpec.js": 13827/*!*********************************************!*\ 13828 !*** ./node_modules/ramda/src/applySpec.js ***! 13829 \*********************************************/ 13830/***/ ((module, __unused_webpack_exports, __webpack_require__) => { 13831 13832var _curry1 = 13833/*#__PURE__*/ 13834__webpack_require__(/*! ./internal/_curry1.js */ "./node_modules/ramda/src/internal/_curry1.js"); 13835 13836var _isArray = 13837/*#__PURE__*/ 13838__webpack_require__(/*! ./internal/_isArray.js */ "./node_modules/ramda/src/internal/_isArray.js"); 13839 13840var apply = 13841/*#__PURE__*/ 13842__webpack_require__(/*! ./apply.js */ "./node_modules/ramda/src/apply.js"); 13843 13844var curryN = 13845/*#__PURE__*/ 13846__webpack_require__(/*! ./curryN.js */ "./node_modules/ramda/src/curryN.js"); 13847 13848var max = 13849/*#__PURE__*/ 13850__webpack_require__(/*! ./max.js */ "./node_modules/ramda/src/max.js"); 13851 13852var pluck = 13853/*#__PURE__*/ 13854__webpack_require__(/*! ./pluck.js */ "./node_modules/ramda/src/pluck.js"); 13855 13856var reduce = 13857/*#__PURE__*/ 13858__webpack_require__(/*! ./reduce.js */ "./node_modules/ramda/src/reduce.js"); 13859 13860var keys = 13861/*#__PURE__*/ 13862__webpack_require__(/*! ./keys.js */ "./node_modules/ramda/src/keys.js"); 13863 13864var values = 13865/*#__PURE__*/ 13866__webpack_require__(/*! ./values.js */ "./node_modules/ramda/src/values.js"); // Use custom mapValues function to avoid issues with specs that include a "map" key and R.map 13867// delegating calls to .map 13868 13869 13870function mapValues(fn, obj) { 13871 return _isArray(obj) ? obj.map(fn) : keys(obj).reduce(function (acc, key) { 13872 acc[key] = fn(obj[key]); 13873 return acc; 13874 }, {}); 13875} 13876/** 13877 * Given a spec object recursively mapping properties to functions, creates a 13878 * function producing an object of the same structure, by mapping each property 13879 * to the result of calling its associated function with the supplied arguments. 13880 * 13881 * @func 13882 * @memberOf R 13883 * @since v0.20.0 13884 * @category Function 13885 * @sig {k: ((a, b, ..., m) -> v)} -> ((a, b, ..., m) -> {k: v}) 13886 * @param {Object} spec an object recursively mapping properties to functions for 13887 * producing the values for these properties. 13888 * @return {Function} A function that returns an object of the same structure 13889 * as `spec', with each property set to the value returned by calling its 13890 * associated function with the supplied arguments. 13891 * @see R.converge, R.juxt 13892 * @example 13893 * 13894 * const getMetrics = R.applySpec({ 13895 * sum: R.add, 13896 * nested: { mul: R.multiply } 13897 * }); 13898 * getMetrics(2, 4); // => { sum: 6, nested: { mul: 8 } } 13899 * @symb R.applySpec({ x: f, y: { z: g } })(a, b) = { x: f(a, b), y: { z: g(a, b) } } 13900 */ 13901 13902 13903var applySpec = 13904/*#__PURE__*/ 13905_curry1(function applySpec(spec) { 13906 spec = mapValues(function (v) { 13907 return typeof v == 'function' ? v : applySpec(v); 13908 }, spec); 13909 return curryN(reduce(max, 0, pluck('length', values(spec))), function () { 13910 var args = arguments; 13911 return mapValues(function (f) { 13912 return apply(f, args); 13913 }, spec); 13914 }); 13915}); 13916 13917module.exports = applySpec; 13918 13919/***/ }), 13920
vendor: 952 bytes, lines 13921-13960
13921/***/ "./node_modules/ramda/src/applyTo.js": 13922/*!*******************************************!*\ 13923 !*** ./node_modules/ramda/src/applyTo.js ***! 13924 \*******************************************/ 13925/***/ ((module, __unused_webpack_exports, __webpack_require__) => { 13926 13927var _curry2 = 13928/*#__PURE__*/ 13929__webpack_require__(/*! ./internal/_curry2.js */ "./node_modules/ramda/src/internal/_curry2.js"); 13930/** 13931 * Takes a value and applies a function to it. 13932 * 13933 * This function is also known as the `thrush` combinator. 13934 * 13935 * @func 13936 * @memberOf R 13937 * @since v0.25.0 13938 * @category Function 13939 * @sig a -> (a -> b) -> b 13940 * @param {*} x The value 13941 * @param {Function} f The function to apply 13942 * @return {*} The result of applying `f` to `x` 13943 * @example 13944 * 13945 * const t42 = R.applyTo(42); 13946 * t42(R.identity); //=> 42 13947 * t42(R.add(1)); //=> 43 13948 */ 13949 13950 13951var applyTo = 13952/*#__PURE__*/ 13953_curry2(function applyTo(x, f) { 13954 return f(x); 13955}); 13956 13957module.exports = applyTo; 13958 13959/***/ }), 13960
vendor: 1,466 bytes, lines 13961-14008
13961/***/ "./node_modules/ramda/src/ascend.js": 13962/*!******************************************!*\ 13963 !*** ./node_modules/ramda/src/ascend.js ***! 13964 \******************************************/ 13965/***/ ((module, __unused_webpack_exports, __webpack_require__) => { 13966 13967var _curry3 = 13968/*#__PURE__*/ 13969__webpack_require__(/*! ./internal/_curry3.js */ "./node_modules/ramda/src/internal/_curry3.js"); 13970/** 13971 * Makes an ascending comparator function out of a function that returns a value 13972 * that can be compared with `<` and `>`. 13973 * 13974 * @func 13975 * @memberOf R 13976 * @since v0.23.0 13977 * @category Function 13978 * @sig Ord b => (a -> b) -> a -> a -> Number 13979 * @param {Function} fn A function of arity one that returns a value that can be compared 13980 * @param {*} a The first item to be compared. 13981 * @param {*} b The second item to be compared. 13982 * @return {Number} `-1` if fn(a) < fn(b), `1` if fn(b) < fn(a), otherwise `0` 13983 * @see R.descend 13984 * @example 13985 * 13986 * const byAge = R.ascend(R.prop('age')); 13987 * const people = [ 13988 * { name: 'Emma', age: 70 }, 13989 * { name: 'Peter', age: 78 }, 13990 * { name: 'Mikhail', age: 62 }, 13991 * ]; 13992 * const peopleByYoungestFirst = R.sort(byAge, people); 13993 * //=> [{ name: 'Mikhail', age: 62 },{ name: 'Emma', age: 70 }, { name: 'Peter', age: 78 }] 13994 */ 13995 13996 13997var ascend = 13998/*#__PURE__*/ 13999_curry3(function ascend(fn, a, b) { 14000 var aa = fn(a); 14001 var bb = fn(b); 14002 return aa < bb ? -1 : aa > bb ? 1 : 0; 14003}); 14004 14005module.exports = ascend; 14006 14007/***/ }), 14008
vendor: 1,363 bytes, lines 14009-14054
14009/***/ "./node_modules/ramda/src/assoc.js": 14010/*!*****************************************!*\ 14011 !*** ./node_modules/ramda/src/assoc.js ***! 14012 \*****************************************/ 14013/***/ ((module, __unused_webpack_exports, __webpack_require__) => { 14014 14015var _curry3 = 14016/*#__PURE__*/ 14017__webpack_require__(/*! ./internal/_curry3.js */ "./node_modules/ramda/src/internal/_curry3.js"); 14018 14019var assocPath = 14020/*#__PURE__*/ 14021__webpack_require__(/*! ./assocPath.js */ "./node_modules/ramda/src/assocPath.js"); 14022/** 14023 * Makes a shallow clone of an object, setting or overriding the specified 14024 * property with the given value. Note that this copies and flattens prototype 14025 * properties onto the new object as well. All non-primitive properties are 14026 * copied by reference. 14027 * 14028 * @func 14029 * @memberOf R 14030 * @since v0.8.0 14031 * @category Object 14032 * @typedefn Idx = String | Int 14033 * @sig Idx -> a -> {k: v} -> {k: v} 14034 * @param {String|Number} prop The property name to set 14035 * @param {*} val The new value 14036 * @param {Object} obj The object to clone 14037 * @return {Object} A new object equivalent to the original except for the changed property. 14038 * @see R.dissoc, R.pick 14039 * @example 14040 * 14041 * R.assoc('c', 3, {a: 1, b: 2}); //=> {a: 1, b: 2, c: 3} 14042 */ 14043 14044 14045var assoc = 14046/*#__PURE__*/ 14047_curry3(function assoc(prop, val, obj) { 14048 return assocPath([prop], val, obj); 14049}); 14050 14051module.exports = assoc; 14052 14053/***/ }), 14054
vendor: 2,225 bytes, lines 14055-14126
14055/***/ "./node_modules/ramda/src/assocPath.js": 14056/*!*********************************************!*\ 14057 !*** ./node_modules/ramda/src/assocPath.js ***! 14058 \*********************************************/ 14059/***/ ((module, __unused_webpack_exports, __webpack_require__) => { 14060 14061var _curry3 = 14062/*#__PURE__*/ 14063__webpack_require__(/*! ./internal/_curry3.js */ "./node_modules/ramda/src/internal/_curry3.js"); 14064 14065var _has = 14066/*#__PURE__*/ 14067__webpack_require__(/*! ./internal/_has.js */ "./node_modules/ramda/src/internal/_has.js"); 14068 14069var _isInteger = 14070/*#__PURE__*/ 14071__webpack_require__(/*! ./internal/_isInteger.js */ "./node_modules/ramda/src/internal/_isInteger.js"); 14072 14073var _assoc = 14074/*#__PURE__*/ 14075__webpack_require__(/*! ./internal/_assoc.js */ "./node_modules/ramda/src/internal/_assoc.js"); 14076 14077var isNil = 14078/*#__PURE__*/ 14079__webpack_require__(/*! ./isNil.js */ "./node_modules/ramda/src/isNil.js"); 14080/** 14081 * Makes a shallow clone of an object, setting or overriding the nodes required 14082 * to create the given path, and placing the specific value at the tail end of 14083 * that path. Note that this copies and flattens prototype properties onto the 14084 * new object as well. All non-primitive properties are copied by reference. 14085 * 14086 * @func 14087 * @memberOf R 14088 * @since v0.8.0 14089 * @category Object 14090 * @typedefn Idx = String | Int | Symbol 14091 * @sig [Idx] -> a -> {a} -> {a} 14092 * @param {Array} path the path to set 14093 * @param {*} val The new value 14094 * @param {Object} obj The object to clone 14095 * @return {Object} A new object equivalent to the original except along the specified path. 14096 * @see R.dissocPath 14097 * @example 14098 * 14099 * R.assocPath(['a', 'b', 'c'], 42, {a: {b: {c: 0}}}); //=> {a: {b: {c: 42}}} 14100 * 14101 * // Any missing or non-object keys in path will be overridden 14102 * R.assocPath(['a', 'b', 'c'], 42, {a: 5}); //=> {a: {b: {c: 42}}} 14103 */ 14104 14105 14106var assocPath = 14107/*#__PURE__*/ 14108_curry3(function assocPath(path, val, obj) { 14109 if (path.length === 0) { 14110 return val; 14111 } 14112 14113 var idx = path[0]; 14114 14115 if (path.length > 1) { 14116 var nextObj = !isNil(obj) && _has(idx, obj) ? obj[idx] : _isInteger(path[1]) ? [] : {}; 14117 val = assocPath(Array.prototype.slice.call(path, 1), val, nextObj); 14118 } 14119 14120 return _assoc(idx, val, obj); 14121}); 14122 14123module.exports = assocPath; 14124 14125/***/ }), 14126
vendor: 1,533 bytes, lines 14127-14179
14127/***/ "./node_modules/ramda/src/binary.js": 14128/*!******************************************!*\ 14129 !*** ./node_modules/ramda/src/binary.js ***! 14130 \******************************************/ 14131/***/ ((module, __unused_webpack_exports, __webpack_require__) => { 14132 14133var _curry1 = 14134/*#__PURE__*/ 14135__webpack_require__(/*! ./internal/_curry1.js */ "./node_modules/ramda/src/internal/_curry1.js"); 14136 14137var nAry = 14138/*#__PURE__*/ 14139__webpack_require__(/*! ./nAry.js */ "./node_modules/ramda/src/nAry.js"); 14140/** 14141 * Wraps a function of any arity (including nullary) in a function that accepts 14142 * exactly 2 parameters. Any extraneous parameters will not be passed to the 14143 * supplied function. 14144 * 14145 * @func 14146 * @memberOf R 14147 * @since v0.2.0 14148 * @category Function 14149 * @sig (a -> b -> c -> ... -> z) -> ((a, b) -> z) 14150 * @param {Function} fn The function to wrap. 14151 * @return {Function} A new function wrapping `fn`. The new function is guaranteed to be of 14152 * arity 2. 14153 * @see R.nAry, R.unary 14154 * @example 14155 * 14156 * const takesThreeArgs = function(a, b, c) { 14157 * return [a, b, c]; 14158 * }; 14159 * takesThreeArgs.length; //=> 3 14160 * takesThreeArgs(1, 2, 3); //=> [1, 2, 3] 14161 * 14162 * const takesTwoArgs = R.binary(takesThreeArgs); 14163 * takesTwoArgs.length; //=> 2 14164 * // Only 2 arguments are passed to the wrapped function 14165 * takesTwoArgs(1, 2, 3); //=> [1, 2, undefined] 14166 * @symb R.binary(f)(a, b, c) = f(a, b) 14167 */ 14168 14169 14170var binary = 14171/*#__PURE__*/ 14172_curry1(function binary(fn) { 14173 return nAry(2, fn); 14174}); 14175 14176module.exports = binary; 14177 14178/***/ }), 14179
vendor: 1,504 bytes, lines 14180-14228
14180/***/ "./node_modules/ramda/src/bind.js": 14181/*!****************************************!*\ 14182 !*** ./node_modules/ramda/src/bind.js ***! 14183 \****************************************/ 14184/***/ ((module, __unused_webpack_exports, __webpack_require__) => { 14185 14186var _arity = 14187/*#__PURE__*/ 14188__webpack_require__(/*! ./internal/_arity.js */ "./node_modules/ramda/src/internal/_arity.js"); 14189 14190var _curry2 = 14191/*#__PURE__*/ 14192__webpack_require__(/*! ./internal/_curry2.js */ "./node_modules/ramda/src/internal/_curry2.js"); 14193/** 14194 * Creates a function that is bound to a context. 14195 * Note: `R.bind` does not provide the additional argument-binding capabilities of 14196 * [Function.prototype.bind](https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Function/bind). 14197 * 14198 * @func 14199 * @memberOf R 14200 * @since v0.6.0 14201 * @category Function 14202 * @category Object 14203 * @sig (* -> *) -> {*} -> (* -> *) 14204 * @param {Function} fn The function to bind to context 14205 * @param {Object} thisObj The context to bind `fn` to 14206 * @return {Function} A function that will execute in the context of `thisObj`. 14207 * @see R.partial 14208 * @example 14209 * 14210 * const log = R.bind(console.log, console); 14211 * R.pipe(R.assoc('a', 2), R.tap(log), R.assoc('a', 3))({a: 1}); //=> {a: 3} 14212 * // logs {a: 2} 14213 * @symb R.bind(f, o)(a, b) = f.call(o, a, b) 14214 */ 14215 14216 14217var bind = 14218/*#__PURE__*/ 14219_curry2(function bind(fn, thisObj) { 14220 return _arity(fn.length, function () { 14221 return fn.apply(thisObj, arguments); 14222 }); 14223}); 14224 14225module.exports = bind; 14226 14227/***/ }), 14228
vendor: 2,057 bytes, lines 14229-14294
14229/***/ "./node_modules/ramda/src/both.js": 14230/*!****************************************!*\ 14231 !*** ./node_modules/ramda/src/both.js ***! 14232 \****************************************/ 14233/***/ ((module, __unused_webpack_exports, __webpack_require__) => { 14234 14235var _curry2 = 14236/*#__PURE__*/ 14237__webpack_require__(/*! ./internal/_curry2.js */ "./node_modules/ramda/src/internal/_curry2.js"); 14238 14239var _isFunction = 14240/*#__PURE__*/ 14241__webpack_require__(/*! ./internal/_isFunction.js */ "./node_modules/ramda/src/internal/_isFunction.js"); 14242 14243var and = 14244/*#__PURE__*/ 14245__webpack_require__(/*! ./and.js */ "./node_modules/ramda/src/and.js"); 14246 14247var lift = 14248/*#__PURE__*/ 14249__webpack_require__(/*! ./lift.js */ "./node_modules/ramda/src/lift.js"); 14250/** 14251 * A function which calls the two provided functions and returns the `&&` 14252 * of the results. 14253 * It returns the result of the first function if it is false-y and the result 14254 * of the second function otherwise. Note that this is short-circuited, 14255 * meaning that the second function will not be invoked if the first returns a 14256 * false-y value. 14257 * 14258 * In addition to functions, `R.both` also accepts any fantasy-land compatible 14259 * applicative functor. 14260 * 14261 * @func 14262 * @memberOf R 14263 * @since v0.12.0 14264 * @category Logic 14265 * @sig (*... -> Boolean) -> (*... -> Boolean) -> (*... -> Boolean) 14266 * @param {Function} f A predicate 14267 * @param {Function} g Another predicate 14268 * @return {Function} a function that applies its arguments to `f` and `g` and `&&`s their outputs together. 14269 * @see R.either, R.and 14270 * @example 14271 * 14272 * const gt10 = R.gt(R.__, 10) 14273 * const lt20 = R.lt(R.__, 20) 14274 * const f = R.both(gt10, lt20); 14275 * f(15); //=> true 14276 * f(30); //=> false 14277 * 14278 * R.both(Maybe.Just(false), Maybe.Just(55)); // => Maybe.Just(false) 14279 * R.both([false, false, 'a'], [11]); //=> [false, false, 11] 14280 */ 14281 14282 14283var both = 14284/*#__PURE__*/ 14285_curry2(function both(f, g) { 14286 return _isFunction(f) ? function _both() { 14287 return f.apply(this, arguments) && g.apply(this, arguments); 14288 } : lift(and)(f, g); 14289}); 14290 14291module.exports = both; 14292 14293/***/ }), 14294
vendor: 1,580 bytes, lines 14295-14352
14295/***/ "./node_modules/ramda/src/call.js": 14296/*!****************************************!*\ 14297 !*** ./node_modules/ramda/src/call.js ***! 14298 \****************************************/ 14299/***/ ((module, __unused_webpack_exports, __webpack_require__) => { 14300 14301var _curry1 = 14302/*#__PURE__*/ 14303__webpack_require__(/*! ./internal/_curry1.js */ "./node_modules/ramda/src/internal/_curry1.js"); 14304/** 14305 * Returns the result of calling its first argument with the remaining 14306 * arguments. This is occasionally useful as a converging function for 14307 * [`R.converge`](#converge): the first branch can produce a function while the 14308 * remaining branches produce values to be passed to that function as its 14309 * arguments. 14310 * 14311 * @func 14312 * @memberOf R 14313 * @since v0.9.0 14314 * @category Function 14315 * @sig ((*... -> a), *...) -> a 14316 * @param {Function} fn The function to apply to the remaining arguments. 14317 * @param {...*} args Any number of positional arguments. 14318 * @return {*} 14319 * @see R.apply 14320 * @example 14321 * 14322 * R.call(R.add, 1, 2); //=> 3 14323 * 14324 * const indentN = R.pipe( 14325 * R.repeat(' '), 14326 * R.join(''), 14327 * R.replace(/^(?!$)/gm) 14328 * ); 14329 * 14330 * const format = R.converge( 14331 * R.call, 14332 * [ 14333 * R.pipe(R.prop('indent'), indentN), 14334 * R.prop('value') 14335 * ] 14336 * ); 14337 * 14338 * format({indent: 2, value: 'foo\nbar\nbaz\n'}); //=> ' foo\n bar\n baz\n' 14339 * @symb R.call(f, a, b) = f(a, b) 14340 */ 14341 14342 14343var call = 14344/*#__PURE__*/ 14345_curry1(function call(fn) { 14346 return fn.apply(this, Array.prototype.slice.call(arguments, 1)); 14347}); 14348 14349module.exports = call; 14350 14351/***/ }), 14352
vendor: 2,116 bytes, lines 14353-14423
14353/***/ "./node_modules/ramda/src/chain.js": 14354/*!*****************************************!*\ 14355 !*** ./node_modules/ramda/src/chain.js ***! 14356 \*****************************************/ 14357/***/ ((module, __unused_webpack_exports, __webpack_require__) => { 14358 14359var _curry2 = 14360/*#__PURE__*/ 14361__webpack_require__(/*! ./internal/_curry2.js */ "./node_modules/ramda/src/internal/_curry2.js"); 14362 14363var _dispatchable = 14364/*#__PURE__*/ 14365__webpack_require__(/*! ./internal/_dispatchable.js */ "./node_modules/ramda/src/internal/_dispatchable.js"); 14366 14367var _makeFlat = 14368/*#__PURE__*/ 14369__webpack_require__(/*! ./internal/_makeFlat.js */ "./node_modules/ramda/src/internal/_makeFlat.js"); 14370 14371var _xchain = 14372/*#__PURE__*/ 14373__webpack_require__(/*! ./internal/_xchain.js */ "./node_modules/ramda/src/internal/_xchain.js"); 14374 14375var map = 14376/*#__PURE__*/ 14377__webpack_require__(/*! ./map.js */ "./node_modules/ramda/src/map.js"); 14378/** 14379 * `chain` maps a function over a list and concatenates the results. `chain` 14380 * is also known as `flatMap` in some libraries. 14381 * 14382 * Dispatches to the `chain` method of the second argument, if present, 14383 * according to the [FantasyLand Chain spec](https://github.com/fantasyland/fantasy-land#chain). 14384 * 14385 * If second argument is a function, `chain(f, g)(x)` is equivalent to `f(g(x), x)`. 14386 * 14387 * Acts as a transducer if a transformer is given in list position. 14388 * 14389 * @func 14390 * @memberOf R 14391 * @since v0.3.0 14392 * @category List 14393 * @sig Chain m => (a -> m b) -> m a -> m b 14394 * @param {Function} fn The function to map with 14395 * @param {Array} list The list to map over 14396 * @return {Array} The result of flat-mapping `list` with `fn` 14397 * @example 14398 * 14399 * const duplicate = n => [n, n]; 14400 * R.chain(duplicate, [1, 2, 3]); //=> [1, 1, 2, 2, 3, 3] 14401 * 14402 * R.chain(R.append, R.head)([1, 2, 3]); //=> [1, 2, 3, 1] 14403 */ 14404 14405 14406var chain = 14407/*#__PURE__*/ 14408_curry2( 14409/*#__PURE__*/ 14410_dispatchable(['fantasy-land/chain', 'chain'], _xchain, function chain(fn, monad) { 14411 if (typeof monad === 'function') { 14412 return function (x) { 14413 return fn(monad(x))(x); 14414 }; 14415 } 14416 14417 return _makeFlat(false)(map(fn, monad)); 14418})); 14419 14420module.exports = chain; 14421 14422/***/ }), 14423
vendor: 1,291 bytes, lines 14424-14468
14424/***/ "./node_modules/ramda/src/clamp.js": 14425/*!*****************************************!*\ 14426 !*** ./node_modules/ramda/src/clamp.js ***! 14427 \*****************************************/ 14428/***/ ((module, __unused_webpack_exports, __webpack_require__) => { 14429 14430var _curry3 = 14431/*#__PURE__*/ 14432__webpack_require__(/*! ./internal/_curry3.js */ "./node_modules/ramda/src/internal/_curry3.js"); 14433/** 14434 * Restricts a number to be within a range. 14435 * 14436 * Also works for other ordered types such as Strings and Dates. 14437 * 14438 * @func 14439 * @memberOf R 14440 * @since v0.20.0 14441 * @category Relation 14442 * @sig Ord a => a -> a -> a -> a 14443 * @param {Number} minimum The lower limit of the clamp (inclusive) 14444 * @param {Number} maximum The upper limit of the clamp (inclusive) 14445 * @param {Number} value Value to be clamped 14446 * @return {Number} Returns `minimum` when `val < minimum`, `maximum` when `val > maximum`, returns `val` otherwise 14447 * @example 14448 * 14449 * R.clamp(1, 10, -5) // => 1 14450 * R.clamp(1, 10, 15) // => 10 14451 * R.clamp(1, 10, 4) // => 4 14452 */ 14453 14454 14455var clamp = 14456/*#__PURE__*/ 14457_curry3(function clamp(min, max, value) { 14458 if (min > max) { 14459 throw new Error('min must not be greater than max in clamp(min, max, value)'); 14460 } 14461 14462 return value < min ? min : value > max ? max : value; 14463}); 14464 14465module.exports = clamp; 14466 14467/***/ }), 14468
vendor: 1,655 bytes, lines 14469-14520
14469/***/ "./node_modules/ramda/src/clone.js": 14470/*!*****************************************!*\ 14471 !*** ./node_modules/ramda/src/clone.js ***! 14472 \*****************************************/ 14473/***/ ((module, __unused_webpack_exports, __webpack_require__) => { 14474 14475var _clone = 14476/*#__PURE__*/ 14477__webpack_require__(/*! ./internal/_clone.js */ "./node_modules/ramda/src/internal/_clone.js"); 14478 14479var _curry1 = 14480/*#__PURE__*/ 14481__webpack_require__(/*! ./internal/_curry1.js */ "./node_modules/ramda/src/internal/_curry1.js"); 14482/** 14483 * Creates a deep copy of the source that can be used in place of the source 14484 * object without retaining any references to it. 14485 * The source object may contain (nested) `Array`s and `Object`s, 14486 * `Number`s, `String`s, `Boolean`s and `Date`s. 14487 * `Function`s are assigned by reference rather than copied. 14488 * 14489 * Dispatches to a `clone` method if present. 14490 * 14491 * Note that if the source object has multiple nodes that share a reference, 14492 * the returned object will have the same structure, but the references will 14493 * be pointed to the location within the cloned value. 14494 * 14495 * @func 14496 * @memberOf R 14497 * @since v0.1.0 14498 * @category Object 14499 * @sig {*} -> {*} 14500 * @param {*} value The object or array to clone 14501 * @return {*} A deeply cloned copy of `val` 14502 * @example 14503 * 14504 * const objects = [{}, {}, {}]; 14505 * const objectsClone = R.clone(objects); 14506 * objects === objectsClone; //=> false 14507 * objects[0] === objectsClone[0]; //=> false 14508 */ 14509 14510 14511var clone = 14512/*#__PURE__*/ 14513_curry1(function clone(value) { 14514 return value != null && typeof value.clone === 'function' ? value.clone() : _clone(value, [], [], true); 14515}); 14516 14517module.exports = clone; 14518 14519/***/ }), 14520
vendor: 2,028 bytes, lines 14521-14593
14521/***/ "./node_modules/ramda/src/collectBy.js": 14522/*!*********************************************!*\ 14523 !*** ./node_modules/ramda/src/collectBy.js ***! 14524 \*********************************************/ 14525/***/ ((module, __unused_webpack_exports, __webpack_require__) => { 14526 14527var _curry2 = 14528/*#__PURE__*/ 14529__webpack_require__(/*! ./internal/_curry2.js */ "./node_modules/ramda/src/internal/_curry2.js"); 14530 14531var _reduce = 14532/*#__PURE__*/ 14533__webpack_require__(/*! ./internal/_reduce.js */ "./node_modules/ramda/src/internal/_reduce.js"); 14534/** 14535 * Splits a list into sub-lists, based on the result of calling a key-returning function on each element, 14536 * and grouping the results according to values returned. 14537 * 14538 * @func 14539 * @memberOf R 14540 * @since v0.28.0 14541 * @category List 14542 * @typedefn Idx = String | Int | Symbol 14543 * @sig Idx a => (b -> a) -> [b] -> [[b]] 14544 * @param {Function} fn Function :: a -> Idx 14545 * @param {Array} list The array to group 14546 * @return {Array} 14547 * An array of arrays where each sub-array contains items for which 14548 * the String-returning function has returned the same value. 14549 * @see R.groupBy, R.partition 14550 * @example 14551 * R.collectBy(R.prop('type'), [ 14552 * {type: 'breakfast', item: 'âï¸'}, 14553 * {type: 'lunch', item: 'ð¯'}, 14554 * {type: 'dinner', item: 'ð'}, 14555 * {type: 'breakfast', item: 'ð¥'}, 14556 * {type: 'lunch', item: 'ð'} 14557 * ]); 14558 * 14559 * // [ [ {type: 'breakfast', item: 'âï¸'}, 14560 * // {type: 'breakfast', item: 'ð¥'} ], 14561 * // [ {type: 'lunch', item: 'ð¯'}, 14562 * // {type: 'lunch', item: 'ð'} ], 14563 * // [ {type: 'dinner', item: 'ð'} ] ] 14564 */ 14565 14566 14567var collectBy = 14568/*#__PURE__*/ 14569_curry2(function collectBy(fn, list) { 14570 var group = _reduce(function (o, x) { 14571 var tag = fn(x); 14572 14573 if (o[tag] === undefined) { 14574 o[tag] = []; 14575 } 14576 14577 o[tag].push(x); 14578 return o; 14579 }, {}, list); 14580 14581 var newList = []; 14582 14583 for (var tag in group) { 14584 newList.push(group[tag]); 14585 } 14586 14587 return newList; 14588}); 14589 14590module.exports = collectBy; 14591 14592/***/ }), 14593
vendor: 1,481 bytes, lines 14594-14639
14594/***/ "./node_modules/ramda/src/comparator.js": 14595/*!**********************************************!*\ 14596 !*** ./node_modules/ramda/src/comparator.js ***! 14597 \**********************************************/ 14598/***/ ((module, __unused_webpack_exports, __webpack_require__) => { 14599 14600var _curry1 = 14601/*#__PURE__*/ 14602__webpack_require__(/*! ./internal/_curry1.js */ "./node_modules/ramda/src/internal/_curry1.js"); 14603/** 14604 * Makes a comparator function out of a function that reports whether the first 14605 * element is less than the second. 14606 * 14607 * @func 14608 * @memberOf R 14609 * @since v0.1.0 14610 * @category Function 14611 * @sig ((a, b) -> Boolean) -> ((a, b) -> Number) 14612 * @param {Function} pred A predicate function of arity two which will return `true` if the first argument 14613 * is less than the second, `false` otherwise 14614 * @return {Function} A Function :: a -> b -> Int that returns `-1` if a < b, `1` if b < a, otherwise `0` 14615 * @example 14616 * 14617 * const byAge = R.comparator((a, b) => a.age < b.age); 14618 * const people = [ 14619 * { name: 'Emma', age: 70 }, 14620 * { name: 'Peter', age: 78 }, 14621 * { name: 'Mikhail', age: 62 }, 14622 * ]; 14623 * const peopleByIncreasingAge = R.sort(byAge, people); 14624 * //=> [{ name: 'Mikhail', age: 62 },{ name: 'Emma', age: 70 }, { name: 'Peter', age: 78 }] 14625 */ 14626 14627 14628var comparator = 14629/*#__PURE__*/ 14630_curry1(function comparator(pred) { 14631 return function (a, b) { 14632 return pred(a, b) ? -1 : pred(b, a) ? 1 : 0; 14633 }; 14634}); 14635 14636module.exports = comparator; 14637 14638/***/ }), 14639
vendor: 1,179 bytes, lines 14640-14683
14640/***/ "./node_modules/ramda/src/complement.js": 14641/*!**********************************************!*\ 14642 !*** ./node_modules/ramda/src/complement.js ***! 14643 \**********************************************/ 14644/***/ ((module, __unused_webpack_exports, __webpack_require__) => { 14645 14646var lift = 14647/*#__PURE__*/ 14648__webpack_require__(/*! ./lift.js */ "./node_modules/ramda/src/lift.js"); 14649 14650var not = 14651/*#__PURE__*/ 14652__webpack_require__(/*! ./not.js */ "./node_modules/ramda/src/not.js"); 14653/** 14654 * Takes a function `f` and returns a function `g` such that if called with the same arguments 14655 * when `f` returns a "truthy" value, `g` returns `false` and when `f` returns a "falsy" value `g` returns `true`. 14656 * 14657 * `R.complement` may be applied to any functor 14658 * 14659 * @func 14660 * @memberOf R 14661 * @since v0.12.0 14662 * @category Logic 14663 * @sig (*... -> *) -> (*... -> Boolean) 14664 * @param {Function} f 14665 * @return {Function} 14666 * @see R.not 14667 * @example 14668 * 14669 * const isNotNil = R.complement(R.isNil); 14670 * R.isNil(null); //=> true 14671 * isNotNil(null); //=> false 14672 * R.isNil(7); //=> false 14673 * isNotNil(7); //=> true 14674 */ 14675 14676 14677var complement = 14678/*#__PURE__*/ 14679lift(not); 14680module.exports = complement; 14681 14682/***/ }), 14683
vendor: 1,583 bytes, lines 14684-14735
14684/***/ "./node_modules/ramda/src/compose.js": 14685/*!*******************************************!*\ 14686 !*** ./node_modules/ramda/src/compose.js ***! 14687 \*******************************************/ 14688/***/ ((module, __unused_webpack_exports, __webpack_require__) => { 14689 14690var pipe = 14691/*#__PURE__*/ 14692__webpack_require__(/*! ./pipe.js */ "./node_modules/ramda/src/pipe.js"); 14693 14694var reverse = 14695/*#__PURE__*/ 14696__webpack_require__(/*! ./reverse.js */ "./node_modules/ramda/src/reverse.js"); 14697/** 14698 * Performs right-to-left function composition. The last argument may have 14699 * any arity; the remaining arguments must be unary. 14700 * 14701 * **Note:** The result of compose is not automatically curried. 14702 * 14703 * @func 14704 * @memberOf R 14705 * @since v0.1.0 14706 * @category Function 14707 * @sig ((y -> z), (x -> y), ..., (o -> p), ((a, b, ..., n) -> o)) -> ((a, b, ..., n) -> z) 14708 * @param {...Function} ...functions The functions to compose 14709 * @return {Function} 14710 * @see R.pipe 14711 * @example 14712 * 14713 * const classyGreeting = (firstName, lastName) => "The name's " + lastName + ", " + firstName + " " + lastName 14714 * const yellGreeting = R.compose(R.toUpper, classyGreeting); 14715 * yellGreeting('James', 'Bond'); //=> "THE NAME'S BOND, JAMES BOND" 14716 * 14717 * R.compose(Math.abs, R.add(1), R.multiply(2))(-4) //=> 7 14718 * 14719 * @symb R.compose(f, g, h)(a, b) = f(g(h(a, b))) 14720 * @symb R.compose(f, g, h)(a)(b) = f(g(h(a)))(b) 14721 */ 14722 14723 14724function compose() { 14725 if (arguments.length === 0) { 14726 throw new Error('compose requires at least one argument'); 14727 } 14728 14729 return pipe.apply(this, reverse(arguments)); 14730} 14731 14732module.exports = compose; 14733 14734/***/ }), 14735
vendor: 1,748 bytes, lines 14736-14789
14736/***/ "./node_modules/ramda/src/composeWith.js": 14737/*!***********************************************!*\ 14738 !*** ./node_modules/ramda/src/composeWith.js ***! 14739 \***********************************************/ 14740/***/ ((module, __unused_webpack_exports, __webpack_require__) => { 14741 14742var _curry2 = 14743/*#__PURE__*/ 14744__webpack_require__(/*! ./internal/_curry2.js */ "./node_modules/ramda/src/internal/_curry2.js"); 14745 14746var pipeWith = 14747/*#__PURE__*/ 14748__webpack_require__(/*! ./pipeWith.js */ "./node_modules/ramda/src/pipeWith.js"); 14749 14750var reverse = 14751/*#__PURE__*/ 14752__webpack_require__(/*! ./reverse.js */ "./node_modules/ramda/src/reverse.js"); 14753/** 14754 * Performs right-to-left function composition using transforming function. The last function may have 14755 * any arity; the remaining functions must be unary. 14756 * 14757 * **Note:** The result of composeWith is not automatically curried. Transforming function is not used 14758 * on the last argument. 14759 * 14760 * @func 14761 * @memberOf R 14762 * @since v0.26.0 14763 * @category Function 14764 * @sig ((* -> *), [(y -> z), (x -> y), ..., (o -> p), ((a, b, ..., n) -> o)]) -> ((a, b, ..., n) -> z) 14765 * @param {Function} transformer The transforming function 14766 * @param {Array} functions The functions to compose 14767 * @return {Function} 14768 * @see R.compose, R.pipeWith 14769 * @example 14770 * 14771 * const composeWhileNotNil = R.composeWith((f, res) => R.isNil(res) ? res : f(res)); 14772 * 14773 * composeWhileNotNil([R.inc, R.prop('age')])({age: 1}) //=> 2 14774 * composeWhileNotNil([R.inc, R.prop('age')])({}) //=> undefined 14775 * 14776 * @symb R.composeWith(f)([g, h, i])(...args) = f(g, f(h, i(...args))) 14777 */ 14778 14779 14780var composeWith = 14781/*#__PURE__*/ 14782_curry2(function composeWith(xf, list) { 14783 return pipeWith.apply(this, [xf, reverse(list)]); 14784}); 14785 14786module.exports = composeWith; 14787 14788/***/ }), 14789
vendor: 2,549 bytes, lines 14790-14878
14790/***/ "./node_modules/ramda/src/concat.js": 14791/*!******************************************!*\ 14792 !*** ./node_modules/ramda/src/concat.js ***! 14793 \******************************************/ 14794/***/ ((module, __unused_webpack_exports, __webpack_require__) => { 14795 14796var _curry2 = 14797/*#__PURE__*/ 14798__webpack_require__(/*! ./internal/_curry2.js */ "./node_modules/ramda/src/internal/_curry2.js"); 14799 14800var _isArray = 14801/*#__PURE__*/ 14802__webpack_require__(/*! ./internal/_isArray.js */ "./node_modules/ramda/src/internal/_isArray.js"); 14803 14804var _isFunction = 14805/*#__PURE__*/ 14806__webpack_require__(/*! ./internal/_isFunction.js */ "./node_modules/ramda/src/internal/_isFunction.js"); 14807 14808var _isString = 14809/*#__PURE__*/ 14810__webpack_require__(/*! ./internal/_isString.js */ "./node_modules/ramda/src/internal/_isString.js"); 14811 14812var toString = 14813/*#__PURE__*/ 14814__webpack_require__(/*! ./toString.js */ "./node_modules/ramda/src/toString.js"); 14815/** 14816 * Returns the result of concatenating the given lists or strings. 14817 * 14818 * Note: `R.concat` expects both arguments to be of the same type, 14819 * unlike the native `Array.prototype.concat` method. It will throw 14820 * an error if you `concat` an Array with a non-Array value. 14821 * 14822 * Dispatches to the `concat` method of the first argument, if present. 14823 * Can also concatenate two members of a [fantasy-land 14824 * compatible semigroup](https://github.com/fantasyland/fantasy-land#semigroup). 14825 * 14826 * @func 14827 * @memberOf R 14828 * @since v0.1.0 14829 * @category List 14830 * @sig [a] -> [a] -> [a] 14831 * @sig String -> String -> String 14832 * @param {Array|String} firstList The first list 14833 * @param {Array|String} secondList The second list 14834 * @return {Array|String} A list consisting of the elements of `firstList` followed by the elements of 14835 * `secondList`. 14836 * 14837 * @example 14838 * 14839 * R.concat('ABC', 'DEF'); // 'ABCDEF' 14840 * R.concat([4, 5, 6], [1, 2, 3]); //=> [4, 5, 6, 1, 2, 3] 14841 * R.concat([], []); //=> [] 14842 */ 14843 14844 14845var concat = 14846/*#__PURE__*/ 14847_curry2(function concat(a, b) { 14848 if (_isArray(a)) { 14849 if (_isArray(b)) { 14850 return a.concat(b); 14851 } 14852 14853 throw new TypeError(toString(b) + ' is not an array'); 14854 } 14855 14856 if (_isString(a)) { 14857 if (_isString(b)) { 14858 return a + b; 14859 } 14860 14861 throw new TypeError(toString(b) + ' is not a string'); 14862 } 14863 14864 if (a != null && _isFunction(a['fantasy-land/concat'])) { 14865 return a['fantasy-land/concat'](b); 14866 } 14867 14868 if (a != null && _isFunction(a.concat)) { 14869 return a.concat(b); 14870 } 14871 14872 throw new TypeError(toString(a) + ' does not have a method named "concat" or "fantasy-land/concat"'); 14873}); 14874 14875module.exports = concat; 14876 14877/***/ }), 14878
vendor: 2,479 bytes, lines 14879-14959
14879/***/ "./node_modules/ramda/src/cond.js": 14880/*!****************************************!*\ 14881 !*** ./node_modules/ramda/src/cond.js ***! 14882 \****************************************/ 14883/***/ ((module, __unused_webpack_exports, __webpack_require__) => { 14884 14885var _arity = 14886/*#__PURE__*/ 14887__webpack_require__(/*! ./internal/_arity.js */ "./node_modules/ramda/src/internal/_arity.js"); 14888 14889var _curry1 = 14890/*#__PURE__*/ 14891__webpack_require__(/*! ./internal/_curry1.js */ "./node_modules/ramda/src/internal/_curry1.js"); 14892 14893var map = 14894/*#__PURE__*/ 14895__webpack_require__(/*! ./map.js */ "./node_modules/ramda/src/map.js"); 14896 14897var max = 14898/*#__PURE__*/ 14899__webpack_require__(/*! ./max.js */ "./node_modules/ramda/src/max.js"); 14900 14901var reduce = 14902/*#__PURE__*/ 14903__webpack_require__(/*! ./reduce.js */ "./node_modules/ramda/src/reduce.js"); 14904/** 14905 * Returns a function, `fn`, which encapsulates `if/else, if/else, ...` logic. 14906 * `R.cond` takes a list of [predicate, transformer] pairs. All of the arguments 14907 * to `fn` are applied to each of the predicates in turn until one returns a 14908 * "truthy" value, at which point `fn` returns the result of applying its 14909 * arguments to the corresponding transformer. If none of the predicates 14910 * matches, `fn` returns undefined. 14911 * 14912 * **Please note**: This is not a direct substitute for a `switch` statement. 14913 * Remember that both elements of every pair passed to `cond` are *functions*, 14914 * and `cond` returns a function. 14915 * 14916 * @func 14917 * @memberOf R 14918 * @since v0.6.0 14919 * @category Logic 14920 * @sig [[(*... -> Boolean),(*... -> *)]] -> (*... -> *) 14921 * @param {Array} pairs A list of [predicate, transformer] 14922 * @return {Function} 14923 * @see R.ifElse, R.unless, R.when 14924 * @example 14925 * 14926 * const fn = R.cond([ 14927 * [R.equals(0), R.always('water freezes at 0°C')], 14928 * [R.equals(100), R.always('water boils at 100°C')], 14929 * [R.T, temp => 'nothing special happens at ' + temp + '°C'] 14930 * ]); 14931 * fn(0); //=> 'water freezes at 0°C' 14932 * fn(50); //=> 'nothing special happens at 50°C' 14933 * fn(100); //=> 'water boils at 100°C' 14934 */ 14935 14936 14937var cond = 14938/*#__PURE__*/ 14939_curry1(function cond(pairs) { 14940 var arity = reduce(max, 0, map(function (pair) { 14941 return pair[0].length; 14942 }, pairs)); 14943 return _arity(arity, function () { 14944 var idx = 0; 14945 14946 while (idx < pairs.length) { 14947 if (pairs[idx][0].apply(this, arguments)) { 14948 return pairs[idx][1].apply(this, arguments); 14949 } 14950 14951 idx += 1; 14952 } 14953 }); 14954}); 14955 14956module.exports = cond; 14957 14958/***/ }), 14959
vendor: 1,750 bytes, lines 14960-15016
14960/***/ "./node_modules/ramda/src/construct.js": 14961/*!*********************************************!*\ 14962 !*** ./node_modules/ramda/src/construct.js ***! 14963 \*********************************************/ 14964/***/ ((module, __unused_webpack_exports, __webpack_require__) => { 14965 14966var _curry1 = 14967/*#__PURE__*/ 14968__webpack_require__(/*! ./internal/_curry1.js */ "./node_modules/ramda/src/internal/_curry1.js"); 14969 14970var constructN = 14971/*#__PURE__*/ 14972__webpack_require__(/*! ./constructN.js */ "./node_modules/ramda/src/constructN.js"); 14973/** 14974 * Wraps a constructor function inside a curried function that can be called 14975 * with the same arguments and returns the same type. 14976 * 14977 * @func 14978 * @memberOf R 14979 * @since v0.1.0 14980 * @category Function 14981 * @sig (* -> {*}) -> (* -> {*}) 14982 * @param {Function} fn The constructor function to wrap. 14983 * @return {Function} A wrapped, curried constructor function. 14984 * @see R.invoker 14985 * @example 14986 * 14987 * // Constructor function 14988 * function Animal(kind) { 14989 * this.kind = kind; 14990 * }; 14991 * Animal.prototype.sighting = function() { 14992 * return "It's a " + this.kind + "!"; 14993 * } 14994 * 14995 * const AnimalConstructor = R.construct(Animal) 14996 * 14997 * // Notice we no longer need the 'new' keyword: 14998 * AnimalConstructor('Pig'); //=> {"kind": "Pig", "sighting": function (){...}}; 14999 * 15000 * const animalTypes = ["Lion", "Tiger", "Bear"]; 15001 * const animalSighting = R.invoker(0, 'sighting'); 15002 * const sightNewAnimal = R.compose(animalSighting, AnimalConstructor); 15003 * R.map(sightNewAnimal, animalTypes); //=> ["It's a Lion!", "It's a Tiger!", "It's a Bear!"] 15004 */ 15005 15006 15007var construct = 15008/*#__PURE__*/ 15009_curry1(function construct(Fn) { 15010 return constructN(Fn.length, Fn); 15011}); 15012 15013module.exports = construct; 15014 15015/***/ }), 15016
vendor: 2,869 bytes, lines 15017-15122
15017/***/ "./node_modules/ramda/src/constructN.js": 15018/*!**********************************************!*\ 15019 !*** ./node_modules/ramda/src/constructN.js ***! 15020 \**********************************************/ 15021/***/ ((module, __unused_webpack_exports, __webpack_require__) => { 15022 15023var _curry2 = 15024/*#__PURE__*/ 15025__webpack_require__(/*! ./internal/_curry2.js */ "./node_modules/ramda/src/internal/_curry2.js"); 15026 15027var curry = 15028/*#__PURE__*/ 15029__webpack_require__(/*! ./curry.js */ "./node_modules/ramda/src/curry.js"); 15030 15031var nAry = 15032/*#__PURE__*/ 15033__webpack_require__(/*! ./nAry.js */ "./node_modules/ramda/src/nAry.js"); 15034/** 15035 * Wraps a constructor function inside a curried function that can be called 15036 * with the same arguments and returns the same type. The arity of the function 15037 * returned is specified to allow using variadic constructor functions. 15038 * 15039 * @func 15040 * @memberOf R 15041 * @since v0.4.0 15042 * @category Function 15043 * @sig Number -> (* -> {*}) -> (* -> {*}) 15044 * @param {Number} n The arity of the constructor function. 15045 * @param {Function} Fn The constructor function to wrap. 15046 * @return {Function} A wrapped, curried constructor function. 15047 * @example 15048 * 15049 * // Variadic Constructor function 15050 * function Salad() { 15051 * this.ingredients = arguments; 15052 * } 15053 * 15054 * Salad.prototype.recipe = function() { 15055 * const instructions = R.map(ingredient => 'Add a dollop of ' + ingredient, this.ingredients); 15056 * return R.join('\n', instructions); 15057 * }; 15058 * 15059 * const ThreeLayerSalad = R.constructN(3, Salad); 15060 * 15061 * // Notice we no longer need the 'new' keyword, and the constructor is curried for 3 arguments. 15062 * const salad = ThreeLayerSalad('Mayonnaise')('Potato Chips')('Ketchup'); 15063 * 15064 * console.log(salad.recipe()); 15065 * // Add a dollop of Mayonnaise 15066 * // Add a dollop of Potato Chips 15067 * // Add a dollop of Ketchup 15068 */ 15069 15070 15071var constructN = 15072/*#__PURE__*/ 15073_curry2(function constructN(n, Fn) { 15074 if (n > 10) { 15075 throw new Error('Constructor with greater than ten arguments'); 15076 } 15077 15078 if (n === 0) { 15079 return function () { 15080 return new Fn(); 15081 }; 15082 } 15083 15084 return curry(nAry(n, function ($0, $1, $2, $3, $4, $5, $6, $7, $8, $9) { 15085 switch (arguments.length) { 15086 case 1: 15087 return new Fn($0); 15088 15089 case 2: 15090 return new Fn($0, $1); 15091 15092 case 3: 15093 return new Fn($0, $1, $2); 15094 15095 case 4: 15096 return new Fn($0, $1, $2, $3); 15097 15098 case 5: 15099 return new Fn($0, $1, $2, $3, $4); 15100 15101 case 6: 15102 return new Fn($0, $1, $2, $3, $4, $5); 15103 15104 case 7: 15105 return new Fn($0, $1, $2, $3, $4, $5, $6); 15106 15107 case 8: 15108 return new Fn($0, $1, $2, $3, $4, $5, $6, $7); 15109 15110 case 9: 15111 return new Fn($0, $1, $2, $3, $4, $5, $6, $7, $8); 15112 15113 case 10: 15114 return new Fn($0, $1, $2, $3, $4, $5, $6, $7, $8, $9); 15115 } 15116 })); 15117}); 15118 15119module.exports = constructN; 15120 15121/***/ }), 15122
vendor: 2,439 bytes, lines 15123-15197
15123/***/ "./node_modules/ramda/src/converge.js": 15124/*!********************************************!*\ 15125 !*** ./node_modules/ramda/src/converge.js ***! 15126 \********************************************/ 15127/***/ ((module, __unused_webpack_exports, __webpack_require__) => { 15128 15129var _curry2 = 15130/*#__PURE__*/ 15131__webpack_require__(/*! ./internal/_curry2.js */ "./node_modules/ramda/src/internal/_curry2.js"); 15132 15133var _map = 15134/*#__PURE__*/ 15135__webpack_require__(/*! ./internal/_map.js */ "./node_modules/ramda/src/internal/_map.js"); 15136 15137var curryN = 15138/*#__PURE__*/ 15139__webpack_require__(/*! ./curryN.js */ "./node_modules/ramda/src/curryN.js"); 15140 15141var max = 15142/*#__PURE__*/ 15143__webpack_require__(/*! ./max.js */ "./node_modules/ramda/src/max.js"); 15144 15145var pluck = 15146/*#__PURE__*/ 15147__webpack_require__(/*! ./pluck.js */ "./node_modules/ramda/src/pluck.js"); 15148 15149var reduce = 15150/*#__PURE__*/ 15151__webpack_require__(/*! ./reduce.js */ "./node_modules/ramda/src/reduce.js"); 15152/** 15153 * Accepts a converging function and a list of branching functions and returns 15154 * a new function. The arity of the new function is the same as the arity of 15155 * the longest branching function. When invoked, this new function is applied 15156 * to some arguments, and each branching function is applied to those same 15157 * arguments. The results of each branching function are passed as arguments 15158 * to the converging function to produce the return value. 15159 * 15160 * @func 15161 * @memberOf R 15162 * @since v0.4.2 15163 * @category Function 15164 * @sig ((x1, x2, ...) -> z) -> [((a, b, ...) -> x1), ((a, b, ...) -> x2), ...] -> (a -> b -> ... -> z) 15165 * @param {Function} after A function. `after` will be invoked with the return values of 15166 * `fn1` and `fn2` as its arguments. 15167 * @param {Array} functions A list of functions. 15168 * @return {Function} A new function. 15169 * @see R.useWith 15170 * @example 15171 * 15172 * const average = R.converge(R.divide, [R.sum, R.length]) 15173 * average([1, 2, 3, 4, 5, 6, 7]) //=> 4 15174 * 15175 * const strangeConcat = R.converge(R.concat, [R.toUpper, R.toLower]) 15176 * strangeConcat("Yodel") //=> "YODELyodel" 15177 * 15178 * @symb R.converge(f, [g, h])(a, b) = f(g(a, b), h(a, b)) 15179 */ 15180 15181 15182var converge = 15183/*#__PURE__*/ 15184_curry2(function converge(after, fns) { 15185 return curryN(reduce(max, 0, pluck('length', fns)), function () { 15186 var args = arguments; 15187 var context = this; 15188 return after.apply(context, _map(function (fn) { 15189 return fn.apply(context, args); 15190 }, fns)); 15191 }); 15192}); 15193 15194module.exports = converge; 15195 15196/***/ }), 15197
vendor: 1,129 bytes, lines 15198-15240
15198/***/ "./node_modules/ramda/src/count.js": 15199/*!*****************************************!*\ 15200 !*** ./node_modules/ramda/src/count.js ***! 15201 \*****************************************/ 15202/***/ ((module, __unused_webpack_exports, __webpack_require__) => { 15203 15204var _reduce = 15205/*#__PURE__*/ 15206__webpack_require__(/*! ./internal/_reduce.js */ "./node_modules/ramda/src/internal/_reduce.js"); 15207 15208var curry = 15209/*#__PURE__*/ 15210__webpack_require__(/*! ./curry.js */ "./node_modules/ramda/src/curry.js"); 15211/** 15212 * Returns the number of items in a given `list` matching the predicate `f` 15213 * 15214 * @func 15215 * @memberOf R 15216 * @since v0.28.0 15217 * @category List 15218 * @sig (a -> Boolean) -> [a] -> Number 15219 * @param {Function} predicate to match items against 15220 * @return {Array} list of items to count in 15221 * @example 15222 * 15223 * const even = x => x % 2 == 0; 15224 * 15225 * R.count(even, [1, 2, 3, 4, 5]); // => 2 15226 * R.map(R.count(even), [[1, 1, 1], [2, 3, 4, 5], [6]]); // => [0, 2, 1] 15227 */ 15228 15229 15230var count = 15231/*#__PURE__*/ 15232curry(function (pred, list) { 15233 return _reduce(function (a, e) { 15234 return pred(e) ? a + 1 : a; 15235 }, 0, list); 15236}); 15237module.exports = count; 15238 15239/***/ }), 15240
vendor: 1,455 bytes, lines 15241-15284
15241/***/ "./node_modules/ramda/src/countBy.js": 15242/*!*******************************************!*\ 15243 !*** ./node_modules/ramda/src/countBy.js ***! 15244 \*******************************************/ 15245/***/ ((module, __unused_webpack_exports, __webpack_require__) => { 15246 15247var reduceBy = 15248/*#__PURE__*/ 15249__webpack_require__(/*! ./reduceBy.js */ "./node_modules/ramda/src/reduceBy.js"); 15250/** 15251 * Counts the elements of a list according to how many match each value of a 15252 * key generated by the supplied function. Returns an object mapping the keys 15253 * produced by `fn` to the number of occurrences in the list. Note that all 15254 * keys are coerced to strings because of how JavaScript objects work. 15255 * 15256 * Acts as a transducer if a transformer is given in list position. 15257 * 15258 * @func 15259 * @memberOf R 15260 * @since v0.1.0 15261 * @category Relation 15262 * @sig (a -> String) -> [a] -> {*} 15263 * @param {Function} fn The function used to map values to keys. 15264 * @param {Array} list The list to count elements from. 15265 * @return {Object} An object mapping keys to number of occurrences in the list. 15266 * @example 15267 * 15268 * const numbers = [1.0, 1.1, 1.2, 2.0, 3.0, 2.2]; 15269 * R.countBy(Math.floor)(numbers); //=> {'1': 3, '2': 2, '3': 1} 15270 * 15271 * const letters = ['a', 'b', 'A', 'a', 'B', 'c']; 15272 * R.countBy(R.toLower)(letters); //=> {'a': 3, 'b': 2, 'c': 1} 15273 */ 15274 15275 15276var countBy = 15277/*#__PURE__*/ 15278reduceBy(function (acc, elem) { 15279 return acc + 1; 15280}, 0); 15281module.exports = countBy; 15282 15283/***/ }), 15284
vendor: 1,854 bytes, lines 15285-15350
15285/***/ "./node_modules/ramda/src/curry.js": 15286/*!*****************************************!*\ 15287 !*** ./node_modules/ramda/src/curry.js ***! 15288 \*****************************************/ 15289/***/ ((module, __unused_webpack_exports, __webpack_require__) => { 15290 15291var _curry1 = 15292/*#__PURE__*/ 15293__webpack_require__(/*! ./internal/_curry1.js */ "./node_modules/ramda/src/internal/_curry1.js"); 15294 15295var curryN = 15296/*#__PURE__*/ 15297__webpack_require__(/*! ./curryN.js */ "./node_modules/ramda/src/curryN.js"); 15298/** 15299 * Returns a curried equivalent of the provided function. The curried function 15300 * has two unusual capabilities. First, its arguments needn't be provided one 15301 * at a time. If `f` is a ternary function and `g` is `R.curry(f)`, the 15302 * following are equivalent: 15303 * 15304 * - `g(1)(2)(3)` 15305 * - `g(1)(2, 3)` 15306 * - `g(1, 2)(3)` 15307 * - `g(1, 2, 3)` 15308 * 15309 * Secondly, the special placeholder value [`R.__`](#__) may be used to specify 15310 * "gaps", allowing partial application of any combination of arguments, 15311 * regardless of their positions. If `g` is as above and `_` is [`R.__`](#__), 15312 * the following are equivalent: 15313 * 15314 * - `g(1, 2, 3)` 15315 * - `g(_, 2, 3)(1)` 15316 * - `g(_, _, 3)(1)(2)` 15317 * - `g(_, _, 3)(1, 2)` 15318 * - `g(_, 2)(1)(3)` 15319 * - `g(_, 2)(1, 3)` 15320 * - `g(_, 2)(_, 3)(1)` 15321 * 15322 * @func 15323 * @memberOf R 15324 * @since v0.1.0 15325 * @category Function 15326 * @sig (* -> a) -> (* -> a) 15327 * @param {Function} fn The function to curry. 15328 * @return {Function} A new, curried function. 15329 * @see R.curryN, R.partial 15330 * @example 15331 * 15332 * const addFourNumbers = (a, b, c, d) => a + b + c + d; 15333 * 15334 * const curriedAddFourNumbers = R.curry(addFourNumbers); 15335 * const f = curriedAddFourNumbers(1, 2); 15336 * const g = f(3); 15337 * g(4); //=> 10 15338 */ 15339 15340 15341var curry = 15342/*#__PURE__*/ 15343_curry1(function curry(fn) { 15344 return curryN(fn.length, fn); 15345}); 15346 15347module.exports = curry; 15348 15349/***/ }), 15350
vendor: 2,256 bytes, lines 15351-15429
15351/***/ "./node_modules/ramda/src/curryN.js": 15352/*!******************************************!*\ 15353 !*** ./node_modules/ramda/src/curryN.js ***! 15354 \******************************************/ 15355/***/ ((module, __unused_webpack_exports, __webpack_require__) => { 15356 15357var _arity = 15358/*#__PURE__*/ 15359__webpack_require__(/*! ./internal/_arity.js */ "./node_modules/ramda/src/internal/_arity.js"); 15360 15361var _curry1 = 15362/*#__PURE__*/ 15363__webpack_require__(/*! ./internal/_curry1.js */ "./node_modules/ramda/src/internal/_curry1.js"); 15364 15365var _curry2 = 15366/*#__PURE__*/ 15367__webpack_require__(/*! ./internal/_curry2.js */ "./node_modules/ramda/src/internal/_curry2.js"); 15368 15369var _curryN = 15370/*#__PURE__*/ 15371__webpack_require__(/*! ./internal/_curryN.js */ "./node_modules/ramda/src/internal/_curryN.js"); 15372/** 15373 * Returns a curried equivalent of the provided function, with the specified 15374 * arity. The curried function has two unusual capabilities. First, its 15375 * arguments needn't be provided one at a time. If `g` is `R.curryN(3, f)`, the 15376 * following are equivalent: 15377 * 15378 * - `g(1)(2)(3)` 15379 * - `g(1)(2, 3)` 15380 * - `g(1, 2)(3)` 15381 * - `g(1, 2, 3)` 15382 * 15383 * Secondly, the special placeholder value [`R.__`](#__) may be used to specify 15384 * "gaps", allowing partial application of any combination of arguments, 15385 * regardless of their positions. If `g` is as above and `_` is [`R.__`](#__), 15386 * the following are equivalent: 15387 * 15388 * - `g(1, 2, 3)` 15389 * - `g(_, 2, 3)(1)` 15390 * - `g(_, _, 3)(1)(2)` 15391 * - `g(_, _, 3)(1, 2)` 15392 * - `g(_, 2)(1)(3)` 15393 * - `g(_, 2)(1, 3)` 15394 * - `g(_, 2)(_, 3)(1)` 15395 * 15396 * @func 15397 * @memberOf R 15398 * @since v0.5.0 15399 * @category Function 15400 * @sig Number -> (* -> a) -> (* -> a) 15401 * @param {Number} length The arity for the returned function. 15402 * @param {Function} fn The function to curry. 15403 * @return {Function} A new, curried function. 15404 * @see R.curry 15405 * @example 15406 * 15407 * const sumArgs = (...args) => R.sum(args); 15408 * 15409 * const curriedAddFourNumbers = R.curryN(4, sumArgs); 15410 * const f = curriedAddFourNumbers(1, 2); 15411 * const g = f(3); 15412 * g(4); //=> 10 15413 */ 15414 15415 15416var curryN = 15417/*#__PURE__*/ 15418_curry2(function curryN(length, fn) { 15419 if (length === 1) { 15420 return _curry1(fn); 15421 } 15422 15423 return _arity(length, _curryN(length, [], fn)); 15424}); 15425 15426module.exports = curryN; 15427 15428/***/ }), 15429
vendor: 635 bytes, lines 15430-15462
15430/***/ "./node_modules/ramda/src/dec.js": 15431/*!***************************************!*\ 15432 !*** ./node_modules/ramda/src/dec.js ***! 15433 \***************************************/ 15434/***/ ((module, __unused_webpack_exports, __webpack_require__) => { 15435 15436var add = 15437/*#__PURE__*/ 15438__webpack_require__(/*! ./add.js */ "./node_modules/ramda/src/add.js"); 15439/** 15440 * Decrements its argument. 15441 * 15442 * @func 15443 * @memberOf R 15444 * @since v0.9.0 15445 * @category Math 15446 * @sig Number -> Number 15447 * @param {Number} n 15448 * @return {Number} n - 1 15449 * @see R.inc 15450 * @example 15451 * 15452 * R.dec(42); //=> 41 15453 */ 15454 15455 15456var dec = 15457/*#__PURE__*/ 15458add(-1); 15459module.exports = dec; 15460 15461/***/ }), 15462
vendor: 1,330 bytes, lines 15463-15506
15463/***/ "./node_modules/ramda/src/defaultTo.js": 15464/*!*********************************************!*\ 15465 !*** ./node_modules/ramda/src/defaultTo.js ***! 15466 \*********************************************/ 15467/***/ ((module, __unused_webpack_exports, __webpack_require__) => { 15468 15469var _curry2 = 15470/*#__PURE__*/ 15471__webpack_require__(/*! ./internal/_curry2.js */ "./node_modules/ramda/src/internal/_curry2.js"); 15472/** 15473 * Returns the second argument if it is not `null`, `undefined` or `NaN`; 15474 * otherwise the first argument is returned. 15475 * 15476 * @func 15477 * @memberOf R 15478 * @since v0.10.0 15479 * @category Logic 15480 * @sig a -> b -> a | b 15481 * @param {a} default The default value. 15482 * @param {b} val `val` will be returned instead of `default` unless `val` is `null`, `undefined` or `NaN`. 15483 * @return {*} The second value if it is not `null`, `undefined` or `NaN`, otherwise the default value 15484 * @example 15485 * 15486 * const defaultTo42 = R.defaultTo(42); 15487 * 15488 * defaultTo42(null); //=> 42 15489 * defaultTo42(undefined); //=> 42 15490 * defaultTo42(false); //=> false 15491 * defaultTo42('Ramda'); //=> 'Ramda' 15492 * // parseInt('string') results in NaN 15493 * defaultTo42(parseInt('string')); //=> 42 15494 */ 15495 15496 15497var defaultTo = 15498/*#__PURE__*/ 15499_curry2(function defaultTo(d, v) { 15500 return v == null || v !== v ? d : v; 15501}); 15502 15503module.exports = defaultTo; 15504 15505/***/ }), 15506
vendor: 1,472 bytes, lines 15507-15554
15507/***/ "./node_modules/ramda/src/descend.js": 15508/*!*******************************************!*\ 15509 !*** ./node_modules/ramda/src/descend.js ***! 15510 \*******************************************/ 15511/***/ ((module, __unused_webpack_exports, __webpack_require__) => { 15512 15513var _curry3 = 15514/*#__PURE__*/ 15515__webpack_require__(/*! ./internal/_curry3.js */ "./node_modules/ramda/src/internal/_curry3.js"); 15516/** 15517 * Makes a descending comparator function out of a function that returns a value 15518 * that can be compared with `<` and `>`. 15519 * 15520 * @func 15521 * @memberOf R 15522 * @since v0.23.0 15523 * @category Function 15524 * @sig Ord b => (a -> b) -> a -> a -> Number 15525 * @param {Function} fn A function of arity one that returns a value that can be compared 15526 * @param {*} a The first item to be compared. 15527 * @param {*} b The second item to be compared. 15528 * @return {Number} `-1` if fn(a) > fn(b), `1` if fn(b) > fn(a), otherwise `0` 15529 * @see R.ascend 15530 * @example 15531 * 15532 * const byAge = R.descend(R.prop('age')); 15533 * const people = [ 15534 * { name: 'Emma', age: 70 }, 15535 * { name: 'Peter', age: 78 }, 15536 * { name: 'Mikhail', age: 62 }, 15537 * ]; 15538 * const peopleByOldestFirst = R.sort(byAge, people); 15539 * //=> [{ name: 'Peter', age: 78 }, { name: 'Emma', age: 70 }, { name: 'Mikhail', age: 62 }] 15540 */ 15541 15542 15543var descend = 15544/*#__PURE__*/ 15545_curry3(function descend(fn, a, b) { 15546 var aa = fn(a); 15547 var bb = fn(b); 15548 return aa > bb ? -1 : aa < bb ? 1 : 0; 15549}); 15550 15551module.exports = descend; 15552 15553/***/ }), 15554
vendor: 1,723 bytes, lines 15555-15617
15555/***/ "./node_modules/ramda/src/difference.js": 15556/*!**********************************************!*\ 15557 !*** ./node_modules/ramda/src/difference.js ***! 15558 \**********************************************/ 15559/***/ ((module, __unused_webpack_exports, __webpack_require__) => { 15560 15561var _curry2 = 15562/*#__PURE__*/ 15563__webpack_require__(/*! ./internal/_curry2.js */ "./node_modules/ramda/src/internal/_curry2.js"); 15564 15565var _Set = 15566/*#__PURE__*/ 15567__webpack_require__(/*! ./internal/_Set.js */ "./node_modules/ramda/src/internal/_Set.js"); 15568/** 15569 * Finds the set (i.e. no duplicates) of all elements in the first list not 15570 * contained in the second list. Objects and Arrays are compared in terms of 15571 * value equality, not reference equality. 15572 * 15573 * @func 15574 * @memberOf R 15575 * @since v0.1.0 15576 * @category Relation 15577 * @sig [*] -> [*] -> [*] 15578 * @param {Array} list1 The first list. 15579 * @param {Array} list2 The second list. 15580 * @return {Array} The elements in `list1` that are not in `list2`. 15581 * @see R.differenceWith, R.symmetricDifference, R.symmetricDifferenceWith, R.without 15582 * @example 15583 * 15584 * R.difference([1,2,3,4], [7,6,5,4,3]); //=> [1,2] 15585 * R.difference([7,6,5,4,3], [1,2,3,4]); //=> [7,6,5] 15586 * R.difference([{a: 1}, {b: 2}], [{a: 1}, {c: 3}]) //=> [{b: 2}] 15587 */ 15588 15589 15590var difference = 15591/*#__PURE__*/ 15592_curry2(function difference(first, second) { 15593 var out = []; 15594 var idx = 0; 15595 var firstLen = first.length; 15596 var secondLen = second.length; 15597 var toFilterOut = new _Set(); 15598 15599 for (var i = 0; i < secondLen; i += 1) { 15600 toFilterOut.add(second[i]); 15601 } 15602 15603 while (idx < firstLen) { 15604 if (toFilterOut.add(first[idx])) { 15605 out[out.length] = first[idx]; 15606 } 15607 15608 idx += 1; 15609 } 15610 15611 return out; 15612}); 15613 15614module.exports = difference; 15615 15616/***/ }), 15617
vendor: 1,803 bytes, lines 15618-15676
15618/***/ "./node_modules/ramda/src/differenceWith.js": 15619/*!**************************************************!*\ 15620 !*** ./node_modules/ramda/src/differenceWith.js ***! 15621 \**************************************************/ 15622/***/ ((module, __unused_webpack_exports, __webpack_require__) => { 15623 15624var _includesWith = 15625/*#__PURE__*/ 15626__webpack_require__(/*! ./internal/_includesWith.js */ "./node_modules/ramda/src/internal/_includesWith.js"); 15627 15628var _curry3 = 15629/*#__PURE__*/ 15630__webpack_require__(/*! ./internal/_curry3.js */ "./node_modules/ramda/src/internal/_curry3.js"); 15631/** 15632 * Finds the set (i.e. no duplicates) of all elements in the first list not 15633 * contained in the second list. Duplication is determined according to the 15634 * value returned by applying the supplied predicate to two list elements. 15635 * 15636 * @func 15637 * @memberOf R 15638 * @since v0.1.0 15639 * @category Relation 15640 * @sig ((a, a) -> Boolean) -> [a] -> [a] -> [a] 15641 * @param {Function} pred A predicate used to test whether two items are equal. 15642 * @param {Array} list1 The first list. 15643 * @param {Array} list2 The second list. 15644 * @return {Array} The elements in `list1` that are not in `list2`. 15645 * @see R.difference, R.symmetricDifference, R.symmetricDifferenceWith 15646 * @example 15647 * 15648 * const cmp = (x, y) => x.a === y.a; 15649 * const l1 = [{a: 1}, {a: 2}, {a: 3}]; 15650 * const l2 = [{a: 3}, {a: 4}]; 15651 * R.differenceWith(cmp, l1, l2); //=> [{a: 1}, {a: 2}] 15652 */ 15653 15654 15655var differenceWith = 15656/*#__PURE__*/ 15657_curry3(function differenceWith(pred, first, second) { 15658 var out = []; 15659 var idx = 0; 15660 var firstLen = first.length; 15661 15662 while (idx < firstLen) { 15663 if (!_includesWith(pred, first[idx], second) && !_includesWith(pred, first[idx], out)) { 15664 out.push(first[idx]); 15665 } 15666 15667 idx += 1; 15668 } 15669 15670 return out; 15671}); 15672 15673module.exports = differenceWith; 15674 15675/***/ }), 15676
vendor: 1,116 bytes, lines 15677-15717
15677/***/ "./node_modules/ramda/src/dissoc.js": 15678/*!******************************************!*\ 15679 !*** ./node_modules/ramda/src/dissoc.js ***! 15680 \******************************************/ 15681/***/ ((module, __unused_webpack_exports, __webpack_require__) => { 15682 15683var _curry2 = 15684/*#__PURE__*/ 15685__webpack_require__(/*! ./internal/_curry2.js */ "./node_modules/ramda/src/internal/_curry2.js"); 15686 15687var dissocPath = 15688/*#__PURE__*/ 15689__webpack_require__(/*! ./dissocPath.js */ "./node_modules/ramda/src/dissocPath.js"); 15690/** 15691 * Returns a new object that does not contain a `prop` property. 15692 * 15693 * @func 15694 * @memberOf R 15695 * @since v0.10.0 15696 * @category Object 15697 * @sig String -> {k: v} -> {k: v} 15698 * @param {String} prop The name of the property to dissociate 15699 * @param {Object} obj The object to clone 15700 * @return {Object} A new object equivalent to the original but without the specified property 15701 * @see R.assoc, R.omit 15702 * @example 15703 * 15704 * R.dissoc('b', {a: 1, b: 2, c: 3}); //=> {a: 1, c: 3} 15705 */ 15706 15707 15708var dissoc = 15709/*#__PURE__*/ 15710_curry2(function dissoc(prop, obj) { 15711 return dissocPath([prop], obj); 15712}); 15713 15714module.exports = dissoc; 15715 15716/***/ }), 15717
vendor: 2,649 bytes, lines 15718-15819
15718/***/ "./node_modules/ramda/src/dissocPath.js": 15719/*!**********************************************!*\ 15720 !*** ./node_modules/ramda/src/dissocPath.js ***! 15721 \**********************************************/ 15722/***/ ((module, __unused_webpack_exports, __webpack_require__) => { 15723 15724var _curry2 = 15725/*#__PURE__*/ 15726__webpack_require__(/*! ./internal/_curry2.js */ "./node_modules/ramda/src/internal/_curry2.js"); 15727 15728var _dissoc = 15729/*#__PURE__*/ 15730__webpack_require__(/*! ./internal/_dissoc.js */ "./node_modules/ramda/src/internal/_dissoc.js"); 15731 15732var _isInteger = 15733/*#__PURE__*/ 15734__webpack_require__(/*! ./internal/_isInteger.js */ "./node_modules/ramda/src/internal/_isInteger.js"); 15735 15736var _isArray = 15737/*#__PURE__*/ 15738__webpack_require__(/*! ./internal/_isArray.js */ "./node_modules/ramda/src/internal/_isArray.js"); 15739 15740var assoc = 15741/*#__PURE__*/ 15742__webpack_require__(/*! ./assoc.js */ "./node_modules/ramda/src/assoc.js"); 15743/** 15744 * Makes a shallow clone of an object. Note that this copies and flattens 15745 * prototype properties onto the new object as well. All non-primitive 15746 * properties are copied by reference. 15747 * 15748 * @private 15749 * @param {String|Integer} prop The prop operating 15750 * @param {Object|Array} obj The object to clone 15751 * @return {Object|Array} A new object equivalent to the original. 15752 */ 15753 15754 15755function _shallowCloneObject(prop, obj) { 15756 if (_isInteger(prop) && _isArray(obj)) { 15757 return [].concat(obj); 15758 } 15759 15760 var result = {}; 15761 15762 for (var p in obj) { 15763 result[p] = obj[p]; 15764 } 15765 15766 return result; 15767} 15768/** 15769 * Makes a shallow clone of an object, omitting the property at the given path. 15770 * Note that this copies and flattens prototype properties onto the new object 15771 * as well. All non-primitive properties are copied by reference. 15772 * 15773 * @func 15774 * @memberOf R 15775 * @since v0.11.0 15776 * @category Object 15777 * @typedefn Idx = String | Int | Symbol 15778 * @sig [Idx] -> {k: v} -> {k: v} 15779 * @param {Array} path The path to the value to omit 15780 * @param {Object} obj The object to clone 15781 * @return {Object} A new object without the property at path 15782 * @see R.assocPath 15783 * @example 15784 * 15785 * R.dissocPath(['a', 'b', 'c'], {a: {b: {c: 42}}}); //=> {a: {b: {}}} 15786 */ 15787 15788 15789var dissocPath = 15790/*#__PURE__*/ 15791_curry2(function dissocPath(path, obj) { 15792 if (obj == null) { 15793 return obj; 15794 } 15795 15796 switch (path.length) { 15797 case 0: 15798 return obj; 15799 15800 case 1: 15801 return _dissoc(path[0], obj); 15802 15803 default: 15804 var head = path[0]; 15805 var tail = Array.prototype.slice.call(path, 1); 15806 15807 if (obj[head] == null) { 15808 return _shallowCloneObject(head, obj); 15809 } else { 15810 return assoc(head, dissocPath(tail, obj[head]), obj); 15811 } 15812 15813 } 15814}); 15815 15816module.exports = dissocPath; 15817 15818/***/ }), 15819
vendor: 991 bytes, lines 15820-15862
15820/***/ "./node_modules/ramda/src/divide.js": 15821/*!******************************************!*\ 15822 !*** ./node_modules/ramda/src/divide.js ***! 15823 \******************************************/ 15824/***/ ((module, __unused_webpack_exports, __webpack_require__) => { 15825 15826var _curry2 = 15827/*#__PURE__*/ 15828__webpack_require__(/*! ./internal/_curry2.js */ "./node_modules/ramda/src/internal/_curry2.js"); 15829/** 15830 * Divides two numbers. Equivalent to `a / b`. 15831 * 15832 * @func 15833 * @memberOf R 15834 * @since v0.1.0 15835 * @category Math 15836 * @sig Number -> Number -> Number 15837 * @param {Number} a The first value. 15838 * @param {Number} b The second value. 15839 * @return {Number} The result of `a / b`. 15840 * @see R.multiply 15841 * @example 15842 * 15843 * R.divide(71, 100); //=> 0.71 15844 * 15845 * const half = R.divide(R.__, 2); 15846 * half(42); //=> 21 15847 * 15848 * const reciprocal = R.divide(1); 15849 * reciprocal(4); //=> 0.25 15850 */ 15851 15852 15853var divide = 15854/*#__PURE__*/ 15855_curry2(function divide(a, b) { 15856 return a / b; 15857}); 15858 15859module.exports = divide; 15860 15861/***/ }), 15862
vendor: 1,716 bytes, lines 15863-15921
15863/***/ "./node_modules/ramda/src/drop.js": 15864/*!****************************************!*\ 15865 !*** ./node_modules/ramda/src/drop.js ***! 15866 \****************************************/ 15867/***/ ((module, __unused_webpack_exports, __webpack_require__) => { 15868 15869var _curry2 = 15870/*#__PURE__*/ 15871__webpack_require__(/*! ./internal/_curry2.js */ "./node_modules/ramda/src/internal/_curry2.js"); 15872 15873var _dispatchable = 15874/*#__PURE__*/ 15875__webpack_require__(/*! ./internal/_dispatchable.js */ "./node_modules/ramda/src/internal/_dispatchable.js"); 15876 15877var _xdrop = 15878/*#__PURE__*/ 15879__webpack_require__(/*! ./internal/_xdrop.js */ "./node_modules/ramda/src/internal/_xdrop.js"); 15880 15881var slice = 15882/*#__PURE__*/ 15883__webpack_require__(/*! ./slice.js */ "./node_modules/ramda/src/slice.js"); 15884/** 15885 * Returns all but the first `n` elements of the given list, string, or 15886 * transducer/transformer (or object with a `drop` method). 15887 * 15888 * Dispatches to the `drop` method of the second argument, if present. 15889 * 15890 * @func 15891 * @memberOf R 15892 * @since v0.1.0 15893 * @category List 15894 * @sig Number -> [a] -> [a] 15895 * @sig Number -> String -> String 15896 * @param {Number} n 15897 * @param {*} list 15898 * @return {*} A copy of list without the first `n` elements 15899 * @see R.take, R.transduce, R.dropLast, R.dropWhile 15900 * @example 15901 * 15902 * R.drop(1, ['foo', 'bar', 'baz']); //=> ['bar', 'baz'] 15903 * R.drop(2, ['foo', 'bar', 'baz']); //=> ['baz'] 15904 * R.drop(3, ['foo', 'bar', 'baz']); //=> [] 15905 * R.drop(4, ['foo', 'bar', 'baz']); //=> [] 15906 * R.drop(3, 'ramda'); //=> 'da' 15907 */ 15908 15909 15910var drop = 15911/*#__PURE__*/ 15912_curry2( 15913/*#__PURE__*/ 15914_dispatchable(['drop'], _xdrop, function drop(n, xs) { 15915 return slice(Math.max(0, n), Infinity, xs); 15916})); 15917 15918module.exports = drop; 15919 15920/***/ }), 15921
vendor: 1,793 bytes, lines 15922-15977
15922/***/ "./node_modules/ramda/src/dropLast.js": 15923/*!********************************************!*\ 15924 !*** ./node_modules/ramda/src/dropLast.js ***! 15925 \********************************************/ 15926/***/ ((module, __unused_webpack_exports, __webpack_require__) => { 15927 15928var _curry2 = 15929/*#__PURE__*/ 15930__webpack_require__(/*! ./internal/_curry2.js */ "./node_modules/ramda/src/internal/_curry2.js"); 15931 15932var _dispatchable = 15933/*#__PURE__*/ 15934__webpack_require__(/*! ./internal/_dispatchable.js */ "./node_modules/ramda/src/internal/_dispatchable.js"); 15935 15936var _dropLast = 15937/*#__PURE__*/ 15938__webpack_require__(/*! ./internal/_dropLast.js */ "./node_modules/ramda/src/internal/_dropLast.js"); 15939 15940var _xdropLast = 15941/*#__PURE__*/ 15942__webpack_require__(/*! ./internal/_xdropLast.js */ "./node_modules/ramda/src/internal/_xdropLast.js"); 15943/** 15944 * Returns a list containing all but the last `n` elements of the given `list`. 15945 * 15946 * Acts as a transducer if a transformer is given in list position. 15947 * 15948 * @func 15949 * @memberOf R 15950 * @since v0.16.0 15951 * @category List 15952 * @sig Number -> [a] -> [a] 15953 * @sig Number -> String -> String 15954 * @param {Number} n The number of elements of `list` to skip. 15955 * @param {Array} list The list of elements to consider. 15956 * @return {Array} A copy of the list with only the first `list.length - n` elements 15957 * @see R.takeLast, R.drop, R.dropWhile, R.dropLastWhile 15958 * @example 15959 * 15960 * R.dropLast(1, ['foo', 'bar', 'baz']); //=> ['foo', 'bar'] 15961 * R.dropLast(2, ['foo', 'bar', 'baz']); //=> ['foo'] 15962 * R.dropLast(3, ['foo', 'bar', 'baz']); //=> [] 15963 * R.dropLast(4, ['foo', 'bar', 'baz']); //=> [] 15964 * R.dropLast(3, 'ramda'); //=> 'ra' 15965 */ 15966 15967 15968var dropLast = 15969/*#__PURE__*/ 15970_curry2( 15971/*#__PURE__*/ 15972_dispatchable([], _xdropLast, _dropLast)); 15973 15974module.exports = dropLast; 15975 15976/***/ }), 15977
vendor: 2,062 bytes, lines 15978-16037
15978/***/ "./node_modules/ramda/src/dropLastWhile.js": 15979/*!*************************************************!*\ 15980 !*** ./node_modules/ramda/src/dropLastWhile.js ***! 15981 \*************************************************/ 15982/***/ ((module, __unused_webpack_exports, __webpack_require__) => { 15983 15984var _curry2 = 15985/*#__PURE__*/ 15986__webpack_require__(/*! ./internal/_curry2.js */ "./node_modules/ramda/src/internal/_curry2.js"); 15987 15988var _dispatchable = 15989/*#__PURE__*/ 15990__webpack_require__(/*! ./internal/_dispatchable.js */ "./node_modules/ramda/src/internal/_dispatchable.js"); 15991 15992var _dropLastWhile = 15993/*#__PURE__*/ 15994__webpack_require__(/*! ./internal/_dropLastWhile.js */ "./node_modules/ramda/src/internal/_dropLastWhile.js"); 15995 15996var _xdropLastWhile = 15997/*#__PURE__*/ 15998__webpack_require__(/*! ./internal/_xdropLastWhile.js */ "./node_modules/ramda/src/internal/_xdropLastWhile.js"); 15999/** 16000 * Returns a new list excluding all the tailing elements of a given list which 16001 * satisfy the supplied predicate function. It passes each value from the right 16002 * to the supplied predicate function, skipping elements until the predicate 16003 * function returns a `falsy` value. The predicate function is applied to one argument: 16004 * *(value)*. 16005 * 16006 * Acts as a transducer if a transformer is given in list position. 16007 * 16008 * @func 16009 * @memberOf R 16010 * @since v0.16.0 16011 * @category List 16012 * @sig (a -> Boolean) -> [a] -> [a] 16013 * @sig (a -> Boolean) -> String -> String 16014 * @param {Function} predicate The function to be called on each element 16015 * @param {Array} xs The collection to iterate over. 16016 * @return {Array} A new array without any trailing elements that return `falsy` values from the `predicate`. 16017 * @see R.takeLastWhile, R.addIndex, R.drop, R.dropWhile 16018 * @example 16019 * 16020 * const lteThree = x => x <= 3; 16021 * 16022 * R.dropLastWhile(lteThree, [1, 2, 3, 4, 3, 2, 1]); //=> [1, 2, 3, 4] 16023 * 16024 * R.dropLastWhile(x => x !== 'd' , 'Ramda'); //=> 'Ramd' 16025 */ 16026 16027 16028var dropLastWhile = 16029/*#__PURE__*/ 16030_curry2( 16031/*#__PURE__*/ 16032_dispatchable([], _xdropLastWhile, _dropLastWhile)); 16033 16034module.exports = dropLastWhile; 16035 16036/***/ }), 16037
vendor: 1,635 bytes, lines 16038-16096
16038/***/ "./node_modules/ramda/src/dropRepeats.js": 16039/*!***********************************************!*\ 16040 !*** ./node_modules/ramda/src/dropRepeats.js ***! 16041 \***********************************************/ 16042/***/ ((module, __unused_webpack_exports, __webpack_require__) => { 16043 16044var _curry1 = 16045/*#__PURE__*/ 16046__webpack_require__(/*! ./internal/_curry1.js */ "./node_modules/ramda/src/internal/_curry1.js"); 16047 16048var _dispatchable = 16049/*#__PURE__*/ 16050__webpack_require__(/*! ./internal/_dispatchable.js */ "./node_modules/ramda/src/internal/_dispatchable.js"); 16051 16052var _xdropRepeatsWith = 16053/*#__PURE__*/ 16054__webpack_require__(/*! ./internal/_xdropRepeatsWith.js */ "./node_modules/ramda/src/internal/_xdropRepeatsWith.js"); 16055 16056var dropRepeatsWith = 16057/*#__PURE__*/ 16058__webpack_require__(/*! ./dropRepeatsWith.js */ "./node_modules/ramda/src/dropRepeatsWith.js"); 16059 16060var equals = 16061/*#__PURE__*/ 16062__webpack_require__(/*! ./equals.js */ "./node_modules/ramda/src/equals.js"); 16063/** 16064 * Returns a new list without any consecutively repeating elements. 16065 * [`R.equals`](#equals) is used to determine equality. 16066 * 16067 * Acts as a transducer if a transformer is given in list position. 16068 * 16069 * @func 16070 * @memberOf R 16071 * @since v0.14.0 16072 * @category List 16073 * @sig [a] -> [a] 16074 * @param {Array} list The array to consider. 16075 * @return {Array} `list` without repeating elements. 16076 * @see R.transduce 16077 * @example 16078 * 16079 * R.dropRepeats([1, 1, 1, 2, 3, 4, 4, 2, 2]); //=> [1, 2, 3, 4, 2] 16080 */ 16081 16082 16083var dropRepeats = 16084/*#__PURE__*/ 16085_curry1( 16086/*#__PURE__*/ 16087_dispatchable([], 16088/*#__PURE__*/ 16089_xdropRepeatsWith(equals), 16090/*#__PURE__*/ 16091dropRepeatsWith(equals))); 16092 16093module.exports = dropRepeats; 16094 16095/***/ }), 16096
vendor: 2,041 bytes, lines 16097-16168
16097/***/ "./node_modules/ramda/src/dropRepeatsWith.js": 16098/*!***************************************************!*\ 16099 !*** ./node_modules/ramda/src/dropRepeatsWith.js ***! 16100 \***************************************************/ 16101/***/ ((module, __unused_webpack_exports, __webpack_require__) => { 16102 16103var _curry2 = 16104/*#__PURE__*/ 16105__webpack_require__(/*! ./internal/_curry2.js */ "./node_modules/ramda/src/internal/_curry2.js"); 16106 16107var _dispatchable = 16108/*#__PURE__*/ 16109__webpack_require__(/*! ./internal/_dispatchable.js */ "./node_modules/ramda/src/internal/_dispatchable.js"); 16110 16111var _xdropRepeatsWith = 16112/*#__PURE__*/ 16113__webpack_require__(/*! ./internal/_xdropRepeatsWith.js */ "./node_modules/ramda/src/internal/_xdropRepeatsWith.js"); 16114 16115var last = 16116/*#__PURE__*/ 16117__webpack_require__(/*! ./last.js */ "./node_modules/ramda/src/last.js"); 16118/** 16119 * Returns a new list without any consecutively repeating elements. Equality is 16120 * determined by applying the supplied predicate to each pair of consecutive elements. The 16121 * first element in a series of equal elements will be preserved. 16122 * 16123 * Acts as a transducer if a transformer is given in list position. 16124 * 16125 * @func 16126 * @memberOf R 16127 * @since v0.14.0 16128 * @category List 16129 * @sig ((a, a) -> Boolean) -> [a] -> [a] 16130 * @param {Function} pred A predicate used to test whether two items are equal. 16131 * @param {Array} list The array to consider. 16132 * @return {Array} `list` without repeating elements. 16133 * @see R.transduce 16134 * @example 16135 * 16136 * const l = [1, -1, 1, 3, 4, -4, -4, -5, 5, 3, 3]; 16137 * R.dropRepeatsWith(R.eqBy(Math.abs), l); //=> [1, 3, 4, -5, 3] 16138 */ 16139 16140 16141var dropRepeatsWith = 16142/*#__PURE__*/ 16143_curry2( 16144/*#__PURE__*/ 16145_dispatchable([], _xdropRepeatsWith, function dropRepeatsWith(pred, list) { 16146 var result = []; 16147 var idx = 1; 16148 var len = list.length; 16149 16150 if (len !== 0) { 16151 result[0] = list[0]; 16152 16153 while (idx < len) { 16154 if (!pred(last(result), list[idx])) { 16155 result[result.length] = list[idx]; 16156 } 16157 16158 idx += 1; 16159 } 16160 } 16161 16162 return result; 16163})); 16164 16165module.exports = dropRepeatsWith; 16166 16167/***/ }), 16168
vendor: 2,070 bytes, lines 16169-16238
16169/***/ "./node_modules/ramda/src/dropWhile.js": 16170/*!*********************************************!*\ 16171 !*** ./node_modules/ramda/src/dropWhile.js ***! 16172 \*********************************************/ 16173/***/ ((module, __unused_webpack_exports, __webpack_require__) => { 16174 16175var _curry2 = 16176/*#__PURE__*/ 16177__webpack_require__(/*! ./internal/_curry2.js */ "./node_modules/ramda/src/internal/_curry2.js"); 16178 16179var _dispatchable = 16180/*#__PURE__*/ 16181__webpack_require__(/*! ./internal/_dispatchable.js */ "./node_modules/ramda/src/internal/_dispatchable.js"); 16182 16183var _xdropWhile = 16184/*#__PURE__*/ 16185__webpack_require__(/*! ./internal/_xdropWhile.js */ "./node_modules/ramda/src/internal/_xdropWhile.js"); 16186 16187var slice = 16188/*#__PURE__*/ 16189__webpack_require__(/*! ./slice.js */ "./node_modules/ramda/src/slice.js"); 16190/** 16191 * Returns a new list excluding the leading elements of a given list which 16192 * satisfy the supplied predicate function. It passes each value to the supplied 16193 * predicate function, skipping elements while the predicate function returns 16194 * `true`. The predicate function is applied to one argument: *(value)*. 16195 * 16196 * Dispatches to the `dropWhile` method of the second argument, if present. 16197 * 16198 * Acts as a transducer if a transformer is given in list position. 16199 * 16200 * @func 16201 * @memberOf R 16202 * @since v0.9.0 16203 * @category List 16204 * @sig (a -> Boolean) -> [a] -> [a] 16205 * @sig (a -> Boolean) -> String -> String 16206 * @param {Function} fn The function called per iteration. 16207 * @param {Array} xs The collection to iterate over. 16208 * @return {Array} A new array. 16209 * @see R.takeWhile, R.transduce, R.addIndex 16210 * @example 16211 * 16212 * const lteTwo = x => x <= 2; 16213 * 16214 * R.dropWhile(lteTwo, [1, 2, 3, 4, 3, 2, 1]); //=> [3, 4, 3, 2, 1] 16215 * 16216 * R.dropWhile(x => x !== 'd' , 'Ramda'); //=> 'da' 16217 */ 16218 16219 16220var dropWhile = 16221/*#__PURE__*/ 16222_curry2( 16223/*#__PURE__*/ 16224_dispatchable(['dropWhile'], _xdropWhile, function dropWhile(pred, xs) { 16225 var idx = 0; 16226 var len = xs.length; 16227 16228 while (idx < len && pred(xs[idx])) { 16229 idx += 1; 16230 } 16231 16232 return slice(idx, Infinity, xs); 16233})); 16234 16235module.exports = dropWhile; 16236 16237/***/ }), 16238
vendor: 2,044 bytes, lines 16239-16303
16239/***/ "./node_modules/ramda/src/either.js": 16240/*!******************************************!*\ 16241 !*** ./node_modules/ramda/src/either.js ***! 16242 \******************************************/ 16243/***/ ((module, __unused_webpack_exports, __webpack_require__) => { 16244 16245var _curry2 = 16246/*#__PURE__*/ 16247__webpack_require__(/*! ./internal/_curry2.js */ "./node_modules/ramda/src/internal/_curry2.js"); 16248 16249var _isFunction = 16250/*#__PURE__*/ 16251__webpack_require__(/*! ./internal/_isFunction.js */ "./node_modules/ramda/src/internal/_isFunction.js"); 16252 16253var lift = 16254/*#__PURE__*/ 16255__webpack_require__(/*! ./lift.js */ "./node_modules/ramda/src/lift.js"); 16256 16257var or = 16258/*#__PURE__*/ 16259__webpack_require__(/*! ./or.js */ "./node_modules/ramda/src/or.js"); 16260/** 16261 * A function wrapping calls to the two functions in an `||` operation, 16262 * returning the result of the first function if it is truth-y and the result 16263 * of the second function otherwise. Note that this is short-circuited, 16264 * meaning that the second function will not be invoked if the first returns a 16265 * truth-y value. 16266 * 16267 * In addition to functions, `R.either` also accepts any fantasy-land compatible 16268 * applicative functor. 16269 * 16270 * @func 16271 * @memberOf R 16272 * @since v0.12.0 16273 * @category Logic 16274 * @sig (*... -> Boolean) -> (*... -> Boolean) -> (*... -> Boolean) 16275 * @param {Function} f a predicate 16276 * @param {Function} g another predicate 16277 * @return {Function} a function that applies its arguments to `f` and `g` and `||`s their outputs together. 16278 * @see R.both, R.or 16279 * @example 16280 * 16281 * const gt10 = x => x > 10; 16282 * const even = x => x % 2 === 0; 16283 * const f = R.either(gt10, even); 16284 * f(101); //=> true 16285 * f(8); //=> true 16286 * 16287 * R.either(Maybe.Just(false), Maybe.Just(55)); // => Maybe.Just(55) 16288 * R.either([false, false, 'a'], [11]) // => [11, 11, "a"] 16289 */ 16290 16291 16292var either = 16293/*#__PURE__*/ 16294_curry2(function either(f, g) { 16295 return _isFunction(f) ? function _either() { 16296 return f.apply(this, arguments) || g.apply(this, arguments); 16297 } : lift(or)(f, g); 16298}); 16299 16300module.exports = either; 16301 16302/***/ }), 16303
vendor: 2,603 bytes, lines 16304-16372
16304/***/ "./node_modules/ramda/src/empty.js": 16305/*!*****************************************!*\ 16306 !*** ./node_modules/ramda/src/empty.js ***! 16307 \*****************************************/ 16308/***/ ((module, __unused_webpack_exports, __webpack_require__) => { 16309 16310var _curry1 = 16311/*#__PURE__*/ 16312__webpack_require__(/*! ./internal/_curry1.js */ "./node_modules/ramda/src/internal/_curry1.js"); 16313 16314var _isArguments = 16315/*#__PURE__*/ 16316__webpack_require__(/*! ./internal/_isArguments.js */ "./node_modules/ramda/src/internal/_isArguments.js"); 16317 16318var _isArray = 16319/*#__PURE__*/ 16320__webpack_require__(/*! ./internal/_isArray.js */ "./node_modules/ramda/src/internal/_isArray.js"); 16321 16322var _isObject = 16323/*#__PURE__*/ 16324__webpack_require__(/*! ./internal/_isObject.js */ "./node_modules/ramda/src/internal/_isObject.js"); 16325 16326var _isString = 16327/*#__PURE__*/ 16328__webpack_require__(/*! ./internal/_isString.js */ "./node_modules/ramda/src/internal/_isString.js"); 16329 16330var _isTypedArray = 16331/*#__PURE__*/ 16332__webpack_require__(/*! ./internal/_isTypedArray.js */ "./node_modules/ramda/src/internal/_isTypedArray.js"); 16333/** 16334 * Returns the empty value of its argument's type. Ramda defines the empty 16335 * value of Array (`[]`), Object (`{}`), String (`''`), 16336 * TypedArray (`Uint8Array []`, `Float32Array []`, etc), and Arguments. Other 16337 * types are supported if they define `<Type>.empty`, 16338 * `<Type>.prototype.empty` or implement the 16339 * [FantasyLand Monoid spec](https://github.com/fantasyland/fantasy-land#monoid). 16340 * 16341 * Dispatches to the `empty` method of the first argument, if present. 16342 * 16343 * @func 16344 * @memberOf R 16345 * @since v0.3.0 16346 * @category Function 16347 * @sig a -> a 16348 * @param {*} x 16349 * @return {*} 16350 * @example 16351 * 16352 * R.empty(Just(42)); //=> Nothing() 16353 * R.empty([1, 2, 3]); //=> [] 16354 * R.empty('unicorns'); //=> '' 16355 * R.empty({x: 1, y: 2}); //=> {} 16356 * R.empty(Uint8Array.from('123')); //=> Uint8Array [] 16357 */ 16358 16359 16360var empty = 16361/*#__PURE__*/ 16362_curry1(function empty(x) { 16363 return x != null && typeof x['fantasy-land/empty'] === 'function' ? x['fantasy-land/empty']() : x != null && x.constructor != null && typeof x.constructor['fantasy-land/empty'] === 'function' ? x.constructor['fantasy-land/empty']() : x != null && typeof x.empty === 'function' ? x.empty() : x != null && x.constructor != null && typeof x.constructor.empty === 'function' ? x.constructor.empty() : _isArray(x) ? [] : _isString(x) ? '' : _isObject(x) ? {} : _isArguments(x) ? function () { 16364 return arguments; 16365 }() : _isTypedArray(x) ? x.constructor.from('') : void 0 // else 16366 ; 16367}); 16368 16369module.exports = empty; 16370 16371/***/ }), 16372
vendor: 1,355 bytes, lines 16373-16423
16373/***/ "./node_modules/ramda/src/endsWith.js": 16374/*!********************************************!*\ 16375 !*** ./node_modules/ramda/src/endsWith.js ***! 16376 \********************************************/ 16377/***/ ((module, __unused_webpack_exports, __webpack_require__) => { 16378 16379var _curry2 = 16380/*#__PURE__*/ 16381__webpack_require__(/*! ./internal/_curry2.js */ "./node_modules/ramda/src/internal/_curry2.js"); 16382 16383var equals = 16384/*#__PURE__*/ 16385__webpack_require__(/*! ./equals.js */ "./node_modules/ramda/src/equals.js"); 16386 16387var takeLast = 16388/*#__PURE__*/ 16389__webpack_require__(/*! ./takeLast.js */ "./node_modules/ramda/src/takeLast.js"); 16390/** 16391 * Checks if a list ends with the provided sublist. 16392 * 16393 * Similarly, checks if a string ends with the provided substring. 16394 * 16395 * @func 16396 * @memberOf R 16397 * @since v0.24.0 16398 * @category List 16399 * @sig [a] -> [a] -> Boolean 16400 * @sig String -> String -> Boolean 16401 * @param {*} suffix 16402 * @param {*} list 16403 * @return {Boolean} 16404 * @see R.startsWith 16405 * @example 16406 * 16407 * R.endsWith('c', 'abc') //=> true 16408 * R.endsWith('b', 'abc') //=> false 16409 * R.endsWith(['c'], ['a', 'b', 'c']) //=> true 16410 * R.endsWith(['b'], ['a', 'b', 'c']) //=> false 16411 */ 16412 16413 16414var endsWith = 16415/*#__PURE__*/ 16416_curry2(function (suffix, list) { 16417 return equals(takeLast(suffix.length, list), suffix); 16418}); 16419 16420module.exports = endsWith; 16421 16422/***/ }), 16423
vendor: 999 bytes, lines 16424-16465
16424/***/ "./node_modules/ramda/src/eqBy.js": 16425/*!****************************************!*\ 16426 !*** ./node_modules/ramda/src/eqBy.js ***! 16427 \****************************************/ 16428/***/ ((module, __unused_webpack_exports, __webpack_require__) => { 16429 16430var _curry3 = 16431/*#__PURE__*/ 16432__webpack_require__(/*! ./internal/_curry3.js */ "./node_modules/ramda/src/internal/_curry3.js"); 16433 16434var equals = 16435/*#__PURE__*/ 16436__webpack_require__(/*! ./equals.js */ "./node_modules/ramda/src/equals.js"); 16437/** 16438 * Takes a function and two values in its domain and returns `true` if the 16439 * values map to the same value in the codomain; `false` otherwise. 16440 * 16441 * @func 16442 * @memberOf R 16443 * @since v0.18.0 16444 * @category Relation 16445 * @sig (a -> b) -> a -> a -> Boolean 16446 * @param {Function} f 16447 * @param {*} x 16448 * @param {*} y 16449 * @return {Boolean} 16450 * @example 16451 * 16452 * R.eqBy(Math.abs, 5, -5); //=> true 16453 */ 16454 16455 16456var eqBy = 16457/*#__PURE__*/ 16458_curry3(function eqBy(f, x, y) { 16459 return equals(f(x), f(y)); 16460}); 16461 16462module.exports = eqBy; 16463 16464/***/ }), 16465
vendor: 1,239 bytes, lines 16466-16511
16466/***/ "./node_modules/ramda/src/eqProps.js": 16467/*!*******************************************!*\ 16468 !*** ./node_modules/ramda/src/eqProps.js ***! 16469 \*******************************************/ 16470/***/ ((module, __unused_webpack_exports, __webpack_require__) => { 16471 16472var _curry3 = 16473/*#__PURE__*/ 16474__webpack_require__(/*! ./internal/_curry3.js */ "./node_modules/ramda/src/internal/_curry3.js"); 16475 16476var equals = 16477/*#__PURE__*/ 16478__webpack_require__(/*! ./equals.js */ "./node_modules/ramda/src/equals.js"); 16479/** 16480 * Reports whether two objects have the same value, in [`R.equals`](#equals) 16481 * terms, for the specified property. Useful as a curried predicate. 16482 * 16483 * @func 16484 * @memberOf R 16485 * @since v0.1.0 16486 * @category Object 16487 * @sig k -> {k: v} -> {k: v} -> Boolean 16488 * @param {String} prop The name of the property to compare 16489 * @param {Object} obj1 16490 * @param {Object} obj2 16491 * @return {Boolean} 16492 * 16493 * @example 16494 * 16495 * const o1 = { a: 1, b: 2, c: 3, d: 4 }; 16496 * const o2 = { a: 10, b: 20, c: 3, d: 40 }; 16497 * R.eqProps('a', o1, o2); //=> false 16498 * R.eqProps('c', o1, o2); //=> true 16499 */ 16500 16501 16502var eqProps = 16503/*#__PURE__*/ 16504_curry3(function eqProps(prop, obj1, obj2) { 16505 return equals(obj1[prop], obj2[prop]); 16506}); 16507 16508module.exports = eqProps; 16509 16510/***/ }), 16511
vendor: 1,229 bytes, lines 16512-16561
16512/***/ "./node_modules/ramda/src/equals.js": 16513/*!******************************************!*\ 16514 !*** ./node_modules/ramda/src/equals.js ***! 16515 \******************************************/ 16516/***/ ((module, __unused_webpack_exports, __webpack_require__) => { 16517 16518var _curry2 = 16519/*#__PURE__*/ 16520__webpack_require__(/*! ./internal/_curry2.js */ "./node_modules/ramda/src/internal/_curry2.js"); 16521 16522var _equals = 16523/*#__PURE__*/ 16524__webpack_require__(/*! ./internal/_equals.js */ "./node_modules/ramda/src/internal/_equals.js"); 16525/** 16526 * Returns `true` if its arguments are equivalent, `false` otherwise. Handles 16527 * cyclical data structures. 16528 * 16529 * Dispatches symmetrically to the `equals` methods of both arguments, if 16530 * present. 16531 * 16532 * @func 16533 * @memberOf R 16534 * @since v0.15.0 16535 * @category Relation 16536 * @sig a -> b -> Boolean 16537 * @param {*} a 16538 * @param {*} b 16539 * @return {Boolean} 16540 * @example 16541 * 16542 * R.equals(1, 1); //=> true 16543 * R.equals(1, '1'); //=> false 16544 * R.equals([1, 2, 3], [1, 2, 3]); //=> true 16545 * 16546 * const a = {}; a.v = a; 16547 * const b = {}; b.v = b; 16548 * R.equals(a, b); //=> true 16549 */ 16550 16551 16552var equals = 16553/*#__PURE__*/ 16554_curry2(function equals(a, b) { 16555 return _equals(a, b, [], []); 16556}); 16557 16558module.exports = equals; 16559 16560/***/ }), 16561
vendor: 2,250 bytes, lines 16562-16630
16562/***/ "./node_modules/ramda/src/evolve.js": 16563/*!******************************************!*\ 16564 !*** ./node_modules/ramda/src/evolve.js ***! 16565 \******************************************/ 16566/***/ ((module, __unused_webpack_exports, __webpack_require__) => { 16567 16568var _curry2 = 16569/*#__PURE__*/ 16570__webpack_require__(/*! ./internal/_curry2.js */ "./node_modules/ramda/src/internal/_curry2.js"); 16571 16572var _isArray = 16573/*#__PURE__*/ 16574__webpack_require__(/*! ./internal/_isArray.js */ "./node_modules/ramda/src/internal/_isArray.js"); 16575 16576var _isObject = 16577/*#__PURE__*/ 16578__webpack_require__(/*! ./internal/_isObject.js */ "./node_modules/ramda/src/internal/_isObject.js"); 16579/** 16580 * Creates a new object by recursively evolving a shallow copy of `object`, 16581 * according to the `transformation` functions. All non-primitive properties 16582 * are copied by reference. 16583 * 16584 * A `transformation` function will not be invoked if its corresponding key 16585 * does not exist in the evolved object. 16586 * 16587 * @func 16588 * @memberOf R 16589 * @since v0.9.0 16590 * @category Object 16591 * @sig {k: (v -> v)} -> {k: v} -> {k: v} 16592 * @param {Object} transformations The object specifying transformation functions to apply 16593 * to the object. 16594 * @param {Object} object The object to be transformed. 16595 * @return {Object} The transformed object. 16596 * @example 16597 * 16598 * const tomato = {firstName: ' Tomato ', data: {elapsed: 100, remaining: 1400}, id:123}; 16599 * const transformations = { 16600 * firstName: R.trim, 16601 * lastName: R.trim, // Will not get invoked. 16602 * data: {elapsed: R.add(1), remaining: R.add(-1)} 16603 * }; 16604 * R.evolve(transformations, tomato); //=> {firstName: 'Tomato', data: {elapsed: 101, remaining: 1399}, id:123} 16605 */ 16606 16607 16608var evolve = 16609/*#__PURE__*/ 16610_curry2(function evolve(transformations, object) { 16611 if (!_isObject(object) && !_isArray(object)) { 16612 return object; 16613 } 16614 16615 var result = object instanceof Array ? [] : {}; 16616 var transformation, key, type; 16617 16618 for (key in object) { 16619 transformation = transformations[key]; 16620 type = typeof transformation; 16621 result[key] = type === 'function' ? transformation(object[key]) : transformation && type === 'object' ? evolve(transformation, object[key]) : object[key]; 16622 } 16623 16624 return result; 16625}); 16626 16627module.exports = evolve; 16628 16629/***/ }), 16630
vendor: 2,403 bytes, lines 16631-16711
16631/***/ "./node_modules/ramda/src/filter.js": 16632/*!******************************************!*\ 16633 !*** ./node_modules/ramda/src/filter.js ***! 16634 \******************************************/ 16635/***/ ((module, __unused_webpack_exports, __webpack_require__) => { 16636 16637var _curry2 = 16638/*#__PURE__*/ 16639__webpack_require__(/*! ./internal/_curry2.js */ "./node_modules/ramda/src/internal/_curry2.js"); 16640 16641var _dispatchable = 16642/*#__PURE__*/ 16643__webpack_require__(/*! ./internal/_dispatchable.js */ "./node_modules/ramda/src/internal/_dispatchable.js"); 16644 16645var _filter = 16646/*#__PURE__*/ 16647__webpack_require__(/*! ./internal/_filter.js */ "./node_modules/ramda/src/internal/_filter.js"); 16648 16649var _isObject = 16650/*#__PURE__*/ 16651__webpack_require__(/*! ./internal/_isObject.js */ "./node_modules/ramda/src/internal/_isObject.js"); 16652 16653var _reduce = 16654/*#__PURE__*/ 16655__webpack_require__(/*! ./internal/_reduce.js */ "./node_modules/ramda/src/internal/_reduce.js"); 16656 16657var _xfilter = 16658/*#__PURE__*/ 16659__webpack_require__(/*! ./internal/_xfilter.js */ "./node_modules/ramda/src/internal/_xfilter.js"); 16660 16661var keys = 16662/*#__PURE__*/ 16663__webpack_require__(/*! ./keys.js */ "./node_modules/ramda/src/keys.js"); 16664/** 16665 * Takes a predicate and a `Filterable`, and returns a new filterable of the 16666 * same type containing the members of the given filterable which satisfy the 16667 * given predicate. Filterable objects include plain objects or any object 16668 * that has a filter method such as `Array`. 16669 * 16670 * Dispatches to the `filter` method of the second argument, if present. 16671 * 16672 * Acts as a transducer if a transformer is given in list position. 16673 * 16674 * @func 16675 * @memberOf R 16676 * @since v0.1.0 16677 * @category List 16678 * @sig Filterable f => (a -> Boolean) -> f a -> f a 16679 * @param {Function} pred 16680 * @param {Array} filterable 16681 * @return {Array} Filterable 16682 * @see R.reject, R.transduce, R.addIndex 16683 * @example 16684 * 16685 * const isEven = n => n % 2 === 0; 16686 * 16687 * R.filter(isEven, [1, 2, 3, 4]); //=> [2, 4] 16688 * 16689 * R.filter(isEven, {a: 1, b: 2, c: 3, d: 4}); //=> {b: 2, d: 4} 16690 */ 16691 16692 16693var filter = 16694/*#__PURE__*/ 16695_curry2( 16696/*#__PURE__*/ 16697_dispatchable(['fantasy-land/filter', 'filter'], _xfilter, function (pred, filterable) { 16698 return _isObject(filterable) ? _reduce(function (acc, key) { 16699 if (pred(filterable[key])) { 16700 acc[key] = filterable[key]; 16701 } 16702 16703 return acc; 16704 }, {}, keys(filterable)) : // else 16705 _filter(pred, filterable); 16706})); 16707 16708module.exports = filter; 16709 16710/***/ }), 16711
vendor: 1,696 bytes, lines 16712-16775
16712/***/ "./node_modules/ramda/src/find.js": 16713/*!****************************************!*\ 16714 !*** ./node_modules/ramda/src/find.js ***! 16715 \****************************************/ 16716/***/ ((module, __unused_webpack_exports, __webpack_require__) => { 16717 16718var _curry2 = 16719/*#__PURE__*/ 16720__webpack_require__(/*! ./internal/_curry2.js */ "./node_modules/ramda/src/internal/_curry2.js"); 16721 16722var _dispatchable = 16723/*#__PURE__*/ 16724__webpack_require__(/*! ./internal/_dispatchable.js */ "./node_modules/ramda/src/internal/_dispatchable.js"); 16725 16726var _xfind = 16727/*#__PURE__*/ 16728__webpack_require__(/*! ./internal/_xfind.js */ "./node_modules/ramda/src/internal/_xfind.js"); 16729/** 16730 * Returns the first element of the list which matches the predicate, or 16731 * `undefined` if no element matches. 16732 * 16733 * Dispatches to the `find` method of the second argument, if present. 16734 * 16735 * Acts as a transducer if a transformer is given in list position. 16736 * 16737 * @func 16738 * @memberOf R 16739 * @since v0.1.0 16740 * @category List 16741 * @sig (a -> Boolean) -> [a] -> a | undefined 16742 * @param {Function} fn The predicate function used to determine if the element is the 16743 * desired one. 16744 * @param {Array} list The array to consider. 16745 * @return {Object} The element found, or `undefined`. 16746 * @see R.transduce 16747 * @example 16748 * 16749 * const xs = [{a: 1}, {a: 2}, {a: 3}]; 16750 * R.find(R.propEq('a', 2))(xs); //=> {a: 2} 16751 * R.find(R.propEq('a', 4))(xs); //=> undefined 16752 */ 16753 16754 16755var find = 16756/*#__PURE__*/ 16757_curry2( 16758/*#__PURE__*/ 16759_dispatchable(['find'], _xfind, function find(fn, list) { 16760 var idx = 0; 16761 var len = list.length; 16762 16763 while (idx < len) { 16764 if (fn(list[idx])) { 16765 return list[idx]; 16766 } 16767 16768 idx += 1; 16769 } 16770})); 16771 16772module.exports = find; 16773 16774/***/ }), 16775
vendor: 1,686 bytes, lines 16776-16839
16776/***/ "./node_modules/ramda/src/findIndex.js": 16777/*!*********************************************!*\ 16778 !*** ./node_modules/ramda/src/findIndex.js ***! 16779 \*********************************************/ 16780/***/ ((module, __unused_webpack_exports, __webpack_require__) => { 16781 16782var _curry2 = 16783/*#__PURE__*/ 16784__webpack_require__(/*! ./internal/_curry2.js */ "./node_modules/ramda/src/internal/_curry2.js"); 16785 16786var _dispatchable = 16787/*#__PURE__*/ 16788__webpack_require__(/*! ./internal/_dispatchable.js */ "./node_modules/ramda/src/internal/_dispatchable.js"); 16789 16790var _xfindIndex = 16791/*#__PURE__*/ 16792__webpack_require__(/*! ./internal/_xfindIndex.js */ "./node_modules/ramda/src/internal/_xfindIndex.js"); 16793/** 16794 * Returns the index of the first element of the list which matches the 16795 * predicate, or `-1` if no element matches. 16796 * 16797 * Acts as a transducer if a transformer is given in list position. 16798 * 16799 * @func 16800 * @memberOf R 16801 * @since v0.1.1 16802 * @category List 16803 * @sig (a -> Boolean) -> [a] -> Number 16804 * @param {Function} fn The predicate function used to determine if the element is the 16805 * desired one. 16806 * @param {Array} list The array to consider. 16807 * @return {Number} The index of the element found, or `-1`. 16808 * @see R.transduce, R.indexOf 16809 * @example 16810 * 16811 * const xs = [{a: 1}, {a: 2}, {a: 3}]; 16812 * R.findIndex(R.propEq('a', 2))(xs); //=> 1 16813 * R.findIndex(R.propEq('a', 4))(xs); //=> -1 16814 */ 16815 16816 16817var findIndex = 16818/*#__PURE__*/ 16819_curry2( 16820/*#__PURE__*/ 16821_dispatchable([], _xfindIndex, function findIndex(fn, list) { 16822 var idx = 0; 16823 var len = list.length; 16824 16825 while (idx < len) { 16826 if (fn(list[idx])) { 16827 return idx; 16828 } 16829 16830 idx += 1; 16831 } 16832 16833 return -1; 16834})); 16835 16836module.exports = findIndex; 16837 16838/***/ }), 16839
vendor: 1,657 bytes, lines 16840-16900
16840/***/ "./node_modules/ramda/src/findLast.js": 16841/*!********************************************!*\ 16842 !*** ./node_modules/ramda/src/findLast.js ***! 16843 \********************************************/ 16844/***/ ((module, __unused_webpack_exports, __webpack_require__) => { 16845 16846var _curry2 = 16847/*#__PURE__*/ 16848__webpack_require__(/*! ./internal/_curry2.js */ "./node_modules/ramda/src/internal/_curry2.js"); 16849 16850var _dispatchable = 16851/*#__PURE__*/ 16852__webpack_require__(/*! ./internal/_dispatchable.js */ "./node_modules/ramda/src/internal/_dispatchable.js"); 16853 16854var _xfindLast = 16855/*#__PURE__*/ 16856__webpack_require__(/*! ./internal/_xfindLast.js */ "./node_modules/ramda/src/internal/_xfindLast.js"); 16857/** 16858 * Returns the last element of the list which matches the predicate, or 16859 * `undefined` if no element matches. 16860 * 16861 * Acts as a transducer if a transformer is given in list position. 16862 * 16863 * @func 16864 * @memberOf R 16865 * @since v0.1.1 16866 * @category List 16867 * @sig (a -> Boolean) -> [a] -> a | undefined 16868 * @param {Function} fn The predicate function used to determine if the element is the 16869 * desired one. 16870 * @param {Array} list The array to consider. 16871 * @return {Object} The element found, or `undefined`. 16872 * @see R.transduce 16873 * @example 16874 * 16875 * const xs = [{a: 1, b: 0}, {a:1, b: 1}]; 16876 * R.findLast(R.propEq('a', 1))(xs); //=> {a: 1, b: 1} 16877 * R.findLast(R.propEq('a', 4))(xs); //=> undefined 16878 */ 16879 16880 16881var findLast = 16882/*#__PURE__*/ 16883_curry2( 16884/*#__PURE__*/ 16885_dispatchable([], _xfindLast, function findLast(fn, list) { 16886 var idx = list.length - 1; 16887 16888 while (idx >= 0) { 16889 if (fn(list[idx])) { 16890 return list[idx]; 16891 } 16892 16893 idx -= 1; 16894 } 16895})); 16896 16897module.exports = findLast; 16898 16899/***/ }), 16900
vendor: 1,732 bytes, lines 16901-16963
16901/***/ "./node_modules/ramda/src/findLastIndex.js": 16902/*!*************************************************!*\ 16903 !*** ./node_modules/ramda/src/findLastIndex.js ***! 16904 \*************************************************/ 16905/***/ ((module, __unused_webpack_exports, __webpack_require__) => { 16906 16907var _curry2 = 16908/*#__PURE__*/ 16909__webpack_require__(/*! ./internal/_curry2.js */ "./node_modules/ramda/src/internal/_curry2.js"); 16910 16911var _dispatchable = 16912/*#__PURE__*/ 16913__webpack_require__(/*! ./internal/_dispatchable.js */ "./node_modules/ramda/src/internal/_dispatchable.js"); 16914 16915var _xfindLastIndex = 16916/*#__PURE__*/ 16917__webpack_require__(/*! ./internal/_xfindLastIndex.js */ "./node_modules/ramda/src/internal/_xfindLastIndex.js"); 16918/** 16919 * Returns the index of the last element of the list which matches the 16920 * predicate, or `-1` if no element matches. 16921 * 16922 * Acts as a transducer if a transformer is given in list position. 16923 * 16924 * @func 16925 * @memberOf R 16926 * @since v0.1.1 16927 * @category List 16928 * @sig (a -> Boolean) -> [a] -> Number 16929 * @param {Function} fn The predicate function used to determine if the element is the 16930 * desired one. 16931 * @param {Array} list The array to consider. 16932 * @return {Number} The index of the element found, or `-1`. 16933 * @see R.transduce, R.lastIndexOf 16934 * @example 16935 * 16936 * const xs = [{a: 1, b: 0}, {a:1, b: 1}]; 16937 * R.findLastIndex(R.propEq('a', 1))(xs); //=> 1 16938 * R.findLastIndex(R.propEq('a', 4))(xs); //=> -1 16939 */ 16940 16941 16942var findLastIndex = 16943/*#__PURE__*/ 16944_curry2( 16945/*#__PURE__*/ 16946_dispatchable([], _xfindLastIndex, function findLastIndex(fn, list) { 16947 var idx = list.length - 1; 16948 16949 while (idx >= 0) { 16950 if (fn(list[idx])) { 16951 return idx; 16952 } 16953 16954 idx -= 1; 16955 } 16956 16957 return -1; 16958})); 16959 16960module.exports = findLastIndex; 16961 16962/***/ }), 16963
vendor: 1,086 bytes, lines 16964-17005
16964/***/ "./node_modules/ramda/src/flatten.js": 16965/*!*******************************************!*\ 16966 !*** ./node_modules/ramda/src/flatten.js ***! 16967 \*******************************************/ 16968/***/ ((module, __unused_webpack_exports, __webpack_require__) => { 16969 16970var _curry1 = 16971/*#__PURE__*/ 16972__webpack_require__(/*! ./internal/_curry1.js */ "./node_modules/ramda/src/internal/_curry1.js"); 16973 16974var _makeFlat = 16975/*#__PURE__*/ 16976__webpack_require__(/*! ./internal/_makeFlat.js */ "./node_modules/ramda/src/internal/_makeFlat.js"); 16977/** 16978 * Returns a new list by pulling every item out of it (and all its sub-arrays) 16979 * and putting them in a new array, depth-first. 16980 * 16981 * @func 16982 * @memberOf R 16983 * @since v0.1.0 16984 * @category List 16985 * @sig [a] -> [b] 16986 * @param {Array} list The array to consider. 16987 * @return {Array} The flattened list. 16988 * @see R.unnest 16989 * @example 16990 * 16991 * R.flatten([1, 2, [3, 4], 5, [6, [7, 8, [9, [10, 11], 12]]]]); 16992 * //=> [1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12] 16993 */ 16994 16995 16996var flatten = 16997/*#__PURE__*/ 16998_curry1( 16999/*#__PURE__*/ 17000_makeFlat(true)); 17001 17002module.exports = flatten; 17003 17004/***/ }), 17005
vendor: 1,391 bytes, lines 17006-17055
17006/***/ "./node_modules/ramda/src/flip.js": 17007/*!****************************************!*\ 17008 !*** ./node_modules/ramda/src/flip.js ***! 17009 \****************************************/ 17010/***/ ((module, __unused_webpack_exports, __webpack_require__) => { 17011 17012var _curry1 = 17013/*#__PURE__*/ 17014__webpack_require__(/*! ./internal/_curry1.js */ "./node_modules/ramda/src/internal/_curry1.js"); 17015 17016var curryN = 17017/*#__PURE__*/ 17018__webpack_require__(/*! ./curryN.js */ "./node_modules/ramda/src/curryN.js"); 17019/** 17020 * Returns a new function much like the supplied one, except that the first two 17021 * arguments' order is reversed. 17022 * 17023 * @func 17024 * @memberOf R 17025 * @since v0.1.0 17026 * @category Function 17027 * @sig ((a, b, c, ...) -> z) -> (b -> a -> c -> ... -> z) 17028 * @param {Function} fn The function to invoke with its first two parameters reversed. 17029 * @return {*} The result of invoking `fn` with its first two parameters' order reversed. 17030 * @example 17031 * 17032 * const mergeThree = (a, b, c) => [].concat(a, b, c); 17033 * 17034 * mergeThree(1, 2, 3); //=> [1, 2, 3] 17035 * 17036 * R.flip(mergeThree)(1, 2, 3); //=> [2, 1, 3] 17037 * @symb R.flip(f)(a, b, c) = f(b, a, c) 17038 */ 17039 17040 17041var flip = 17042/*#__PURE__*/ 17043_curry1(function flip(fn) { 17044 return curryN(fn.length, function (a, b) { 17045 var args = Array.prototype.slice.call(arguments, 0); 17046 args[0] = b; 17047 args[1] = a; 17048 return fn.apply(this, args); 17049 }); 17050}); 17051 17052module.exports = flip; 17053 17054/***/ }), 17055
vendor: 1,992 bytes, lines 17056-17124
17056/***/ "./node_modules/ramda/src/forEach.js": 17057/*!*******************************************!*\ 17058 !*** ./node_modules/ramda/src/forEach.js ***! 17059 \*******************************************/ 17060/***/ ((module, __unused_webpack_exports, __webpack_require__) => { 17061 17062var _checkForMethod = 17063/*#__PURE__*/ 17064__webpack_require__(/*! ./internal/_checkForMethod.js */ "./node_modules/ramda/src/internal/_checkForMethod.js"); 17065 17066var _curry2 = 17067/*#__PURE__*/ 17068__webpack_require__(/*! ./internal/_curry2.js */ "./node_modules/ramda/src/internal/_curry2.js"); 17069/** 17070 * Iterate over an input `list`, calling a provided function `fn` for each 17071 * element in the list. 17072 * 17073 * `fn` receives one argument: *(value)*. 17074 * 17075 * Note: `R.forEach` does not skip deleted or unassigned indices (sparse 17076 * arrays), unlike the native `Array.prototype.forEach` method. For more 17077 * details on this behavior, see: 17078 * https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Array/forEach#Description 17079 * 17080 * Also note that, unlike `Array.prototype.forEach`, Ramda's `forEach` returns 17081 * the original array. In some libraries this function is named `each`. 17082 * 17083 * Dispatches to the `forEach` method of the second argument, if present. 17084 * 17085 * @func 17086 * @memberOf R 17087 * @since v0.1.1 17088 * @category List 17089 * @sig (a -> *) -> [a] -> [a] 17090 * @param {Function} fn The function to invoke. Receives one argument, `value`. 17091 * @param {Array} list The list to iterate over. 17092 * @return {Array} The original list. 17093 * @see R.addIndex 17094 * @example 17095 * 17096 * const printXPlusFive = x => console.log(x + 5); 17097 * R.forEach(printXPlusFive, [1, 2, 3]); //=> [1, 2, 3] 17098 * // logs 6 17099 * // logs 7 17100 * // logs 8 17101 * @symb R.forEach(f, [a, b, c]) = [a, b, c] 17102 */ 17103 17104 17105var forEach = 17106/*#__PURE__*/ 17107_curry2( 17108/*#__PURE__*/ 17109_checkForMethod('forEach', function forEach(fn, list) { 17110 var len = list.length; 17111 var idx = 0; 17112 17113 while (idx < len) { 17114 fn(list[idx]); 17115 idx += 1; 17116 } 17117 17118 return list; 17119})); 17120 17121module.exports = forEach; 17122 17123/***/ }), 17124
vendor: 1,602 bytes, lines 17125-17180
17125/***/ "./node_modules/ramda/src/forEachObjIndexed.js": 17126/*!*****************************************************!*\ 17127 !*** ./node_modules/ramda/src/forEachObjIndexed.js ***! 17128 \*****************************************************/ 17129/***/ ((module, __unused_webpack_exports, __webpack_require__) => { 17130 17131var _curry2 = 17132/*#__PURE__*/ 17133__webpack_require__(/*! ./internal/_curry2.js */ "./node_modules/ramda/src/internal/_curry2.js"); 17134 17135var keys = 17136/*#__PURE__*/ 17137__webpack_require__(/*! ./keys.js */ "./node_modules/ramda/src/keys.js"); 17138/** 17139 * Iterate over an input `object`, calling a provided function `fn` for each 17140 * key and value in the object. 17141 * 17142 * `fn` receives three argument: *(value, key, obj)*. 17143 * 17144 * @func 17145 * @memberOf R 17146 * @since v0.23.0 17147 * @category Object 17148 * @sig ((a, String, StrMap a) -> Any) -> StrMap a -> StrMap a 17149 * @param {Function} fn The function to invoke. Receives three argument, `value`, `key`, `obj`. 17150 * @param {Object} obj The object to iterate over. 17151 * @return {Object} The original object. 17152 * @example 17153 * 17154 * const printKeyConcatValue = (value, key) => console.log(key + ':' + value); 17155 * R.forEachObjIndexed(printKeyConcatValue, {x: 1, y: 2}); //=> {x: 1, y: 2} 17156 * // logs x:1 17157 * // logs y:2 17158 * @symb R.forEachObjIndexed(f, {x: a, y: b}) = {x: a, y: b} 17159 */ 17160 17161 17162var forEachObjIndexed = 17163/*#__PURE__*/ 17164_curry2(function forEachObjIndexed(fn, obj) { 17165 var keyList = keys(obj); 17166 var idx = 0; 17167 17168 while (idx < keyList.length) { 17169 var key = keyList[idx]; 17170 fn(obj[key], key, obj); 17171 idx += 1; 17172 } 17173 17174 return obj; 17175}); 17176 17177module.exports = forEachObjIndexed; 17178 17179/***/ }), 17180
vendor: 1,185 bytes, lines 17181-17225
17181/***/ "./node_modules/ramda/src/fromPairs.js": 17182/*!*********************************************!*\ 17183 !*** ./node_modules/ramda/src/fromPairs.js ***! 17184 \*********************************************/ 17185/***/ ((module, __unused_webpack_exports, __webpack_require__) => { 17186 17187var _curry1 = 17188/*#__PURE__*/ 17189__webpack_require__(/*! ./internal/_curry1.js */ "./node_modules/ramda/src/internal/_curry1.js"); 17190/** 17191 * Creates a new object from a list key-value pairs. If a key appears in 17192 * multiple pairs, the rightmost pair is included in the object. 17193 * 17194 * @func 17195 * @memberOf R 17196 * @since v0.3.0 17197 * @category List 17198 * @sig [[k,v]] -> {k: v} 17199 * @param {Array} pairs An array of two-element arrays that will be the keys and values of the output object. 17200 * @return {Object} The object made by pairing up `keys` and `values`. 17201 * @see R.toPairs, R.pair 17202 * @example 17203 * 17204 * R.fromPairs([['a', 1], ['b', 2], ['c', 3]]); //=> {a: 1, b: 2, c: 3} 17205 */ 17206 17207 17208var fromPairs = 17209/*#__PURE__*/ 17210_curry1(function fromPairs(pairs) { 17211 var result = {}; 17212 var idx = 0; 17213 17214 while (idx < pairs.length) { 17215 result[pairs[idx][0]] = pairs[idx][1]; 17216 idx += 1; 17217 } 17218 17219 return result; 17220}); 17221 17222module.exports = fromPairs; 17223 17224/***/ }), 17225
vendor: 2,296 bytes, lines 17226-17300
17226/***/ "./node_modules/ramda/src/groupBy.js": 17227/*!*******************************************!*\ 17228 !*** ./node_modules/ramda/src/groupBy.js ***! 17229 \*******************************************/ 17230/***/ ((module, __unused_webpack_exports, __webpack_require__) => { 17231 17232var _checkForMethod = 17233/*#__PURE__*/ 17234__webpack_require__(/*! ./internal/_checkForMethod.js */ "./node_modules/ramda/src/internal/_checkForMethod.js"); 17235 17236var _curry2 = 17237/*#__PURE__*/ 17238__webpack_require__(/*! ./internal/_curry2.js */ "./node_modules/ramda/src/internal/_curry2.js"); 17239 17240var reduceBy = 17241/*#__PURE__*/ 17242__webpack_require__(/*! ./reduceBy.js */ "./node_modules/ramda/src/reduceBy.js"); 17243/** 17244 * Splits a list into sub-lists stored in an object, based on the result of 17245 * calling a key-returning function on each element, and grouping the 17246 * results according to values returned. 17247 * 17248 * Dispatches to the `groupBy` method of the second argument, if present. 17249 * 17250 * Acts as a transducer if a transformer is given in list position. 17251 * 17252 * @func 17253 * @memberOf R 17254 * @since v0.1.0 17255 * @category List 17256 * @typedefn Idx = String | Int | Symbol 17257 * @sig Idx a => (b -> a) -> [b] -> {a: [b]} 17258 * @param {Function} fn Function :: a -> Idx 17259 * @param {Array} list The array to group 17260 * @return {Object} An object with the output of `fn` for keys, mapped to arrays of elements 17261 * that produced that key when passed to `fn`. 17262 * @see R.reduceBy, R.transduce, R.indexBy 17263 * @example 17264 * 17265 * const byGrade = R.groupBy(function(student) { 17266 * const score = student.score; 17267 * return score < 65 ? 'F' : 17268 * score < 70 ? 'D' : 17269 * score < 80 ? 'C' : 17270 * score < 90 ? 'B' : 'A'; 17271 * }); 17272 * const students = [{name: 'Abby', score: 84}, 17273 * {name: 'Eddy', score: 58}, 17274 * // ... 17275 * {name: 'Jack', score: 69}]; 17276 * byGrade(students); 17277 * // { 17278 * // 'A': [{name: 'Dianne', score: 99}], 17279 * // 'B': [{name: 'Abby', score: 84}] 17280 * // // ..., 17281 * // 'F': [{name: 'Eddy', score: 58}] 17282 * // } 17283 */ 17284 17285 17286var groupBy = 17287/*#__PURE__*/ 17288_curry2( 17289/*#__PURE__*/ 17290_checkForMethod('groupBy', 17291/*#__PURE__*/ 17292reduceBy(function (acc, item) { 17293 acc.push(item); 17294 return acc; 17295}, []))); 17296 17297module.exports = groupBy; 17298 17299/***/ }), 17300
vendor: 1,976 bytes, lines 17301-17367
17301/***/ "./node_modules/ramda/src/groupWith.js": 17302/*!*********************************************!*\ 17303 !*** ./node_modules/ramda/src/groupWith.js ***! 17304 \*********************************************/ 17305/***/ ((module, __unused_webpack_exports, __webpack_require__) => { 17306 17307var _curry2 = 17308/*#__PURE__*/ 17309__webpack_require__(/*! ./internal/_curry2.js */ "./node_modules/ramda/src/internal/_curry2.js"); 17310/** 17311 * Takes a list and returns a list of lists where each sublist's elements are 17312 * all satisfied pairwise comparison according to the provided function. 17313 * Only adjacent elements are passed to the comparison function. 17314 * 17315 * @func 17316 * @memberOf R 17317 * @since v0.21.0 17318 * @category List 17319 * @sig ((a, a) â Boolean) â [a] â [[a]] 17320 * @param {Function} fn Function for determining whether two given (adjacent) 17321 * elements should be in the same group 17322 * @param {Array} list The array to group. Also accepts a string, which will be 17323 * treated as a list of characters. 17324 * @return {List} A list that contains sublists of elements, 17325 * whose concatenations are equal to the original list. 17326 * @example 17327 * 17328 * R.groupWith(R.equals, [0, 1, 1, 2, 3, 5, 8, 13, 21]) 17329 * //=> [[0], [1, 1], [2], [3], [5], [8], [13], [21]] 17330 * 17331 * R.groupWith((a, b) => a + 1 === b, [0, 1, 1, 2, 3, 5, 8, 13, 21]) 17332 * //=> [[0, 1], [1, 2, 3], [5], [8], [13], [21]] 17333 * 17334 * R.groupWith((a, b) => a % 2 === b % 2, [0, 1, 1, 2, 3, 5, 8, 13, 21]) 17335 * //=> [[0], [1, 1], [2], [3, 5], [8], [13, 21]] 17336 * 17337 * const isVowel = R.test(/^[aeiou]$/i); 17338 * R.groupWith(R.eqBy(isVowel), 'aestiou') 17339 * //=> ['ae', 'st', 'iou'] 17340 */ 17341 17342 17343var groupWith = 17344/*#__PURE__*/ 17345_curry2(function (fn, list) { 17346 var res = []; 17347 var idx = 0; 17348 var len = list.length; 17349 17350 while (idx < len) { 17351 var nextidx = idx + 1; 17352 17353 while (nextidx < len && fn(list[nextidx - 1], list[nextidx])) { 17354 nextidx += 1; 17355 } 17356 17357 res.push(list.slice(idx, nextidx)); 17358 idx = nextidx; 17359 } 17360 17361 return res; 17362}); 17363 17364module.exports = groupWith; 17365 17366/***/ }), 17367
vendor: 914 bytes, lines 17368-17409
17368/***/ "./node_modules/ramda/src/gt.js": 17369/*!**************************************!*\ 17370 !*** ./node_modules/ramda/src/gt.js ***! 17371 \**************************************/ 17372/***/ ((module, __unused_webpack_exports, __webpack_require__) => { 17373 17374var _curry2 = 17375/*#__PURE__*/ 17376__webpack_require__(/*! ./internal/_curry2.js */ "./node_modules/ramda/src/internal/_curry2.js"); 17377/** 17378 * Returns `true` if the first argument is greater than the second; `false` 17379 * otherwise. 17380 * 17381 * @func 17382 * @memberOf R 17383 * @since v0.1.0 17384 * @category Relation 17385 * @sig Ord a => a -> a -> Boolean 17386 * @param {*} a 17387 * @param {*} b 17388 * @return {Boolean} 17389 * @see R.lt 17390 * @example 17391 * 17392 * R.gt(2, 1); //=> true 17393 * R.gt(2, 2); //=> false 17394 * R.gt(2, 3); //=> false 17395 * R.gt('a', 'z'); //=> false 17396 * R.gt('z', 'a'); //=> true 17397 */ 17398 17399 17400var gt = 17401/*#__PURE__*/ 17402_curry2(function gt(a, b) { 17403 return a > b; 17404}); 17405 17406module.exports = gt; 17407 17408/***/ }), 17409
vendor: 949 bytes, lines 17410-17451
17410/***/ "./node_modules/ramda/src/gte.js": 17411/*!***************************************!*\ 17412 !*** ./node_modules/ramda/src/gte.js ***! 17413 \***************************************/ 17414/***/ ((module, __unused_webpack_exports, __webpack_require__) => { 17415 17416var _curry2 = 17417/*#__PURE__*/ 17418__webpack_require__(/*! ./internal/_curry2.js */ "./node_modules/ramda/src/internal/_curry2.js"); 17419/** 17420 * Returns `true` if the first argument is greater than or equal to the second; 17421 * `false` otherwise. 17422 * 17423 * @func 17424 * @memberOf R 17425 * @since v0.1.0 17426 * @category Relation 17427 * @sig Ord a => a -> a -> Boolean 17428 * @param {Number} a 17429 * @param {Number} b 17430 * @return {Boolean} 17431 * @see R.lte 17432 * @example 17433 * 17434 * R.gte(2, 1); //=> true 17435 * R.gte(2, 2); //=> true 17436 * R.gte(2, 3); //=> false 17437 * R.gte('a', 'z'); //=> false 17438 * R.gte('z', 'a'); //=> true 17439 */ 17440 17441 17442var gte = 17443/*#__PURE__*/ 17444_curry2(function gte(a, b) { 17445 return a >= b; 17446}); 17447 17448module.exports = gte; 17449 17450/***/ }), 17451
vendor: 1,329 bytes, lines 17452-17500
17452/***/ "./node_modules/ramda/src/has.js": 17453/*!***************************************!*\ 17454 !*** ./node_modules/ramda/src/has.js ***! 17455 \***************************************/ 17456/***/ ((module, __unused_webpack_exports, __webpack_require__) => { 17457 17458var _curry2 = 17459/*#__PURE__*/ 17460__webpack_require__(/*! ./internal/_curry2.js */ "./node_modules/ramda/src/internal/_curry2.js"); 17461 17462var hasPath = 17463/*#__PURE__*/ 17464__webpack_require__(/*! ./hasPath.js */ "./node_modules/ramda/src/hasPath.js"); 17465/** 17466 * Returns whether or not an object has an own property with the specified name 17467 * 17468 * @func 17469 * @memberOf R 17470 * @since v0.7.0 17471 * @category Object 17472 * @sig s -> {s: x} -> Boolean 17473 * @param {String} prop The name of the property to check for. 17474 * @param {Object} obj The object to query. 17475 * @return {Boolean} Whether the property exists. 17476 * @example 17477 * 17478 * const hasName = R.has('name'); 17479 * hasName({name: 'alice'}); //=> true 17480 * hasName({name: 'bob'}); //=> true 17481 * hasName({}); //=> false 17482 * 17483 * const point = {x: 0, y: 0}; 17484 * const pointHas = R.has(R.__, point); 17485 * pointHas('x'); //=> true 17486 * pointHas('y'); //=> true 17487 * pointHas('z'); //=> false 17488 */ 17489 17490 17491var has = 17492/*#__PURE__*/ 17493_curry2(function has(prop, obj) { 17494 return hasPath([prop], obj); 17495}); 17496 17497module.exports = has; 17498 17499/***/ }), 17500
vendor: 1,381 bytes, lines 17501-17555
17501/***/ "./node_modules/ramda/src/hasIn.js": 17502/*!*****************************************!*\ 17503 !*** ./node_modules/ramda/src/hasIn.js ***! 17504 \*****************************************/ 17505/***/ ((module, __unused_webpack_exports, __webpack_require__) => { 17506 17507var _curry2 = 17508/*#__PURE__*/ 17509__webpack_require__(/*! ./internal/_curry2.js */ "./node_modules/ramda/src/internal/_curry2.js"); 17510 17511var isNil = 17512/*#__PURE__*/ 17513__webpack_require__(/*! ./isNil.js */ "./node_modules/ramda/src/isNil.js"); 17514/** 17515 * Returns whether or not an object or its prototype chain has a property with 17516 * the specified name 17517 * 17518 * @func 17519 * @memberOf R 17520 * @since v0.7.0 17521 * @category Object 17522 * @sig s -> {s: x} -> Boolean 17523 * @param {String} prop The name of the property to check for. 17524 * @param {Object} obj The object to query. 17525 * @return {Boolean} Whether the property exists. 17526 * @example 17527 * 17528 * function Rectangle(width, height) { 17529 * this.width = width; 17530 * this.height = height; 17531 * } 17532 * Rectangle.prototype.area = function() { 17533 * return this.width * this.height; 17534 * }; 17535 * 17536 * const square = new Rectangle(2, 2); 17537 * R.hasIn('width', square); //=> true 17538 * R.hasIn('area', square); //=> true 17539 */ 17540 17541 17542var hasIn = 17543/*#__PURE__*/ 17544_curry2(function hasIn(prop, obj) { 17545 if (isNil(obj)) { 17546 return false; 17547 } 17548 17549 return prop in obj; 17550}); 17551 17552module.exports = hasIn; 17553 17554/***/ }), 17555
vendor: 1,674 bytes, lines 17556-17621
17556/***/ "./node_modules/ramda/src/hasPath.js": 17557/*!*******************************************!*\ 17558 !*** ./node_modules/ramda/src/hasPath.js ***! 17559 \*******************************************/ 17560/***/ ((module, __unused_webpack_exports, __webpack_require__) => { 17561 17562var _curry2 = 17563/*#__PURE__*/ 17564__webpack_require__(/*! ./internal/_curry2.js */ "./node_modules/ramda/src/internal/_curry2.js"); 17565 17566var _has = 17567/*#__PURE__*/ 17568__webpack_require__(/*! ./internal/_has.js */ "./node_modules/ramda/src/internal/_has.js"); 17569 17570var isNil = 17571/*#__PURE__*/ 17572__webpack_require__(/*! ./isNil.js */ "./node_modules/ramda/src/isNil.js"); 17573/** 17574 * Returns whether or not a path exists in an object. Only the object's 17575 * own properties are checked. 17576 * 17577 * @func 17578 * @memberOf R 17579 * @since v0.26.0 17580 * @category Object 17581 * @typedefn Idx = String | Int | Symbol 17582 * @sig [Idx] -> {a} -> Boolean 17583 * @param {Array} path The path to use. 17584 * @param {Object} obj The object to check the path in. 17585 * @return {Boolean} Whether the path exists. 17586 * @see R.has 17587 * @example 17588 * 17589 * R.hasPath(['a', 'b'], {a: {b: 2}}); // => true 17590 * R.hasPath(['a', 'b'], {a: {b: undefined}}); // => true 17591 * R.hasPath(['a', 'b'], {a: {c: 2}}); // => false 17592 * R.hasPath(['a', 'b'], {}); // => false 17593 */ 17594 17595 17596var hasPath = 17597/*#__PURE__*/ 17598_curry2(function hasPath(_path, obj) { 17599 if (_path.length === 0 || isNil(obj)) { 17600 return false; 17601 } 17602 17603 var val = obj; 17604 var idx = 0; 17605 17606 while (idx < _path.length) { 17607 if (!isNil(val) && _has(_path[idx], val)) { 17608 val = val[_path[idx]]; 17609 idx += 1; 17610 } else { 17611 return false; 17612 } 17613 } 17614 17615 return true; 17616}); 17617 17618module.exports = hasPath; 17619 17620/***/ }), 17621
vendor: 885 bytes, lines 17622-17660
17622/***/ "./node_modules/ramda/src/head.js": 17623/*!****************************************!*\ 17624 !*** ./node_modules/ramda/src/head.js ***! 17625 \****************************************/ 17626/***/ ((module, __unused_webpack_exports, __webpack_require__) => { 17627 17628var nth = 17629/*#__PURE__*/ 17630__webpack_require__(/*! ./nth.js */ "./node_modules/ramda/src/nth.js"); 17631/** 17632 * Returns the first element of the given list or string. In some libraries 17633 * this function is named `first`. 17634 * 17635 * @func 17636 * @memberOf R 17637 * @since v0.1.0 17638 * @category List 17639 * @sig [a] -> a | Undefined 17640 * @sig String -> String 17641 * @param {Array|String} list 17642 * @return {*} 17643 * @see R.tail, R.init, R.last 17644 * @example 17645 * 17646 * R.head(['fi', 'fo', 'fum']); //=> 'fi' 17647 * R.head([]); //=> undefined 17648 * 17649 * R.head('abc'); //=> 'a' 17650 * R.head(''); //=> '' 17651 */ 17652 17653 17654var head = 17655/*#__PURE__*/ 17656nth(0); 17657module.exports = head; 17658 17659/***/ }), 17660
vendor: 1,297 bytes, lines 17661-17708
17661/***/ "./node_modules/ramda/src/identical.js": 17662/*!*********************************************!*\ 17663 !*** ./node_modules/ramda/src/identical.js ***! 17664 \*********************************************/ 17665/***/ ((module, __unused_webpack_exports, __webpack_require__) => { 17666 17667var _objectIs = 17668/*#__PURE__*/ 17669__webpack_require__(/*! ./internal/_objectIs.js */ "./node_modules/ramda/src/internal/_objectIs.js"); 17670 17671var _curry2 = 17672/*#__PURE__*/ 17673__webpack_require__(/*! ./internal/_curry2.js */ "./node_modules/ramda/src/internal/_curry2.js"); 17674/** 17675 * Returns true if its arguments are identical, false otherwise. Values are 17676 * identical if they reference the same memory. `NaN` is identical to `NaN`; 17677 * `0` and `-0` are not identical. 17678 * 17679 * Note this is merely a curried version of ES6 `Object.is`. 17680 * 17681 * @func 17682 * @memberOf R 17683 * @since v0.15.0 17684 * @category Relation 17685 * @sig a -> a -> Boolean 17686 * @param {*} a 17687 * @param {*} b 17688 * @return {Boolean} 17689 * @example 17690 * 17691 * const o = {}; 17692 * R.identical(o, o); //=> true 17693 * R.identical(1, 1); //=> true 17694 * R.identical(1, '1'); //=> false 17695 * R.identical([], []); //=> false 17696 * R.identical(0, -0); //=> false 17697 * R.identical(NaN, NaN); //=> true 17698 */ 17699 17700 17701var identical = 17702/*#__PURE__*/ 17703_curry2(_objectIs); 17704 17705module.exports = identical; 17706 17707/***/ }), 17708
vendor: 1,038 bytes, lines 17709-17750
17709/***/ "./node_modules/ramda/src/identity.js": 17710/*!********************************************!*\ 17711 !*** ./node_modules/ramda/src/identity.js ***! 17712 \********************************************/ 17713/***/ ((module, __unused_webpack_exports, __webpack_require__) => { 17714 17715var _curry1 = 17716/*#__PURE__*/ 17717__webpack_require__(/*! ./internal/_curry1.js */ "./node_modules/ramda/src/internal/_curry1.js"); 17718 17719var _identity = 17720/*#__PURE__*/ 17721__webpack_require__(/*! ./internal/_identity.js */ "./node_modules/ramda/src/internal/_identity.js"); 17722/** 17723 * A function that does nothing but return the parameter supplied to it. Good 17724 * as a default or placeholder function. 17725 * 17726 * @func 17727 * @memberOf R 17728 * @since v0.1.0 17729 * @category Function 17730 * @sig a -> a 17731 * @param {*} x The value to return. 17732 * @return {*} The input value, `x`. 17733 * @example 17734 * 17735 * R.identity(1); //=> 1 17736 * 17737 * const obj = {}; 17738 * R.identity(obj) === obj; //=> true 17739 * @symb R.identity(a) = a 17740 */ 17741 17742 17743var identity = 17744/*#__PURE__*/ 17745_curry1(_identity); 17746 17747module.exports = identity; 17748 17749/***/ }), 17750
vendor: 1,837 bytes, lines 17751-17802
17751/***/ "./node_modules/ramda/src/ifElse.js": 17752/*!******************************************!*\ 17753 !*** ./node_modules/ramda/src/ifElse.js ***! 17754 \******************************************/ 17755/***/ ((module, __unused_webpack_exports, __webpack_require__) => { 17756 17757var _curry3 = 17758/*#__PURE__*/ 17759__webpack_require__(/*! ./internal/_curry3.js */ "./node_modules/ramda/src/internal/_curry3.js"); 17760 17761var curryN = 17762/*#__PURE__*/ 17763__webpack_require__(/*! ./curryN.js */ "./node_modules/ramda/src/curryN.js"); 17764/** 17765 * Creates a function that will process either the `onTrue` or the `onFalse` 17766 * function depending upon the result of the `condition` predicate. 17767 * 17768 * @func 17769 * @memberOf R 17770 * @since v0.8.0 17771 * @category Logic 17772 * @sig (*... -> Boolean) -> (*... -> *) -> (*... -> *) -> (*... -> *) 17773 * @param {Function} condition A predicate function 17774 * @param {Function} onTrue A function to invoke when the `condition` evaluates to a truthy value. 17775 * @param {Function} onFalse A function to invoke when the `condition` evaluates to a falsy value. 17776 * @return {Function} A new function that will process either the `onTrue` or the `onFalse` 17777 * function depending upon the result of the `condition` predicate. 17778 * @see R.unless, R.when, R.cond 17779 * @example 17780 * 17781 * const incCount = R.ifElse( 17782 * R.has('count'), 17783 * R.over(R.lensProp('count'), R.inc), 17784 * R.assoc('count', 1) 17785 * ); 17786 * incCount({ count: 1 }); //=> { count: 2 } 17787 * incCount({}); //=> { count: 1 } 17788 */ 17789 17790 17791var ifElse = 17792/*#__PURE__*/ 17793_curry3(function ifElse(condition, onTrue, onFalse) { 17794 return curryN(Math.max(condition.length, onTrue.length, onFalse.length), function _ifElse() { 17795 return condition.apply(this, arguments) ? onTrue.apply(this, arguments) : onFalse.apply(this, arguments); 17796 }); 17797}); 17798 17799module.exports = ifElse; 17800 17801/***/ }), 17802
vendor: 634 bytes, lines 17803-17835
17803/***/ "./node_modules/ramda/src/inc.js": 17804/*!***************************************!*\ 17805 !*** ./node_modules/ramda/src/inc.js ***! 17806 \***************************************/ 17807/***/ ((module, __unused_webpack_exports, __webpack_require__) => { 17808 17809var add = 17810/*#__PURE__*/ 17811__webpack_require__(/*! ./add.js */ "./node_modules/ramda/src/add.js"); 17812/** 17813 * Increments its argument. 17814 * 17815 * @func 17816 * @memberOf R 17817 * @since v0.9.0 17818 * @category Math 17819 * @sig Number -> Number 17820 * @param {Number} n 17821 * @return {Number} n + 1 17822 * @see R.dec 17823 * @example 17824 * 17825 * R.inc(42); //=> 43 17826 */ 17827 17828 17829var inc = 17830/*#__PURE__*/ 17831add(1); 17832module.exports = inc; 17833 17834/***/ }), 17835
vendor: 1,345 bytes, lines 17836-17880
17836/***/ "./node_modules/ramda/src/includes.js": 17837/*!********************************************!*\ 17838 !*** ./node_modules/ramda/src/includes.js ***! 17839 \********************************************/ 17840/***/ ((module, __unused_webpack_exports, __webpack_require__) => { 17841 17842var _includes = 17843/*#__PURE__*/ 17844__webpack_require__(/*! ./internal/_includes.js */ "./node_modules/ramda/src/internal/_includes.js"); 17845 17846var _curry2 = 17847/*#__PURE__*/ 17848__webpack_require__(/*! ./internal/_curry2.js */ "./node_modules/ramda/src/internal/_curry2.js"); 17849/** 17850 * Returns `true` if the specified value is equal, in [`R.equals`](#equals) 17851 * terms, to at least one element of the given list; `false` otherwise. 17852 * Also works with strings. 17853 * 17854 * @func 17855 * @memberOf R 17856 * @since v0.26.0 17857 * @category List 17858 * @sig a -> [a] -> Boolean 17859 * @param {Object} a The item to compare against. 17860 * @param {Array} list The array to consider. 17861 * @return {Boolean} `true` if an equivalent item is in the list, `false` otherwise. 17862 * @see R.any 17863 * @example 17864 * 17865 * R.includes(3, [1, 2, 3]); //=> true 17866 * R.includes(4, [1, 2, 3]); //=> false 17867 * R.includes({ name: 'Fred' }, [{ name: 'Fred' }]); //=> true 17868 * R.includes([42], [[42]]); //=> true 17869 * R.includes('ba', 'banana'); //=>true 17870 */ 17871 17872 17873var includes = 17874/*#__PURE__*/ 17875_curry2(_includes); 17876 17877module.exports = includes; 17878 17879/***/ }), 17880
vendor: 27,486 bytes, lines 17881-18151
17881/***/ "./node_modules/ramda/src/index.js": 17882/*!*****************************************!*\ 17883 !*** ./node_modules/ramda/src/index.js ***! 17884 \*****************************************/ 17885/***/ ((module, __unused_webpack_exports, __webpack_require__) => { 17886 17887module.exports = {}; 17888module.exports.F = __webpack_require__(/*! ./F.js */ "./node_modules/ramda/src/F.js"); 17889module.exports.T = __webpack_require__(/*! ./T.js */ "./node_modules/ramda/src/T.js"); 17890module.exports.__ = __webpack_require__(/*! ./__.js */ "./node_modules/ramda/src/__.js"); 17891module.exports.add = __webpack_require__(/*! ./add.js */ "./node_modules/ramda/src/add.js"); 17892module.exports.addIndex = __webpack_require__(/*! ./addIndex.js */ "./node_modules/ramda/src/addIndex.js"); 17893module.exports.adjust = __webpack_require__(/*! ./adjust.js */ "./node_modules/ramda/src/adjust.js"); 17894module.exports.all = __webpack_require__(/*! ./all.js */ "./node_modules/ramda/src/all.js"); 17895module.exports.allPass = __webpack_require__(/*! ./allPass.js */ "./node_modules/ramda/src/allPass.js"); 17896module.exports.always = __webpack_require__(/*! ./always.js */ "./node_modules/ramda/src/always.js"); 17897module.exports.and = __webpack_require__(/*! ./and.js */ "./node_modules/ramda/src/and.js"); 17898module.exports.any = __webpack_require__(/*! ./any.js */ "./node_modules/ramda/src/any.js"); 17899module.exports.anyPass = __webpack_require__(/*! ./anyPass.js */ "./node_modules/ramda/src/anyPass.js"); 17900module.exports.ap = __webpack_require__(/*! ./ap.js */ "./node_modules/ramda/src/ap.js"); 17901module.exports.aperture = __webpack_require__(/*! ./aperture.js */ "./node_modules/ramda/src/aperture.js"); 17902module.exports.append = __webpack_require__(/*! ./append.js */ "./node_modules/ramda/src/append.js"); 17903module.exports.apply = __webpack_require__(/*! ./apply.js */ "./node_modules/ramda/src/apply.js"); 17904module.exports.applySpec = __webpack_require__(/*! ./applySpec.js */ "./node_modules/ramda/src/applySpec.js"); 17905module.exports.applyTo = __webpack_require__(/*! ./applyTo.js */ "./node_modules/ramda/src/applyTo.js"); 17906module.exports.ascend = __webpack_require__(/*! ./ascend.js */ "./node_modules/ramda/src/ascend.js"); 17907module.exports.assoc = __webpack_require__(/*! ./assoc.js */ "./node_modules/ramda/src/assoc.js"); 17908module.exports.assocPath = __webpack_require__(/*! ./assocPath.js */ "./node_modules/ramda/src/assocPath.js"); 17909module.exports.binary = __webpack_require__(/*! ./binary.js */ "./node_modules/ramda/src/binary.js"); 17910module.exports.bind = __webpack_require__(/*! ./bind.js */ "./node_modules/ramda/src/bind.js"); 17911module.exports.both = __webpack_require__(/*! ./both.js */ "./node_modules/ramda/src/both.js"); 17912module.exports.call = __webpack_require__(/*! ./call.js */ "./node_modules/ramda/src/call.js"); 17913module.exports.chain = __webpack_require__(/*! ./chain.js */ "./node_modules/ramda/src/chain.js"); 17914module.exports.clamp = __webpack_require__(/*! ./clamp.js */ "./node_modules/ramda/src/clamp.js"); 17915module.exports.clone = __webpack_require__(/*! ./clone.js */ "./node_modules/ramda/src/clone.js"); 17916module.exports.collectBy = __webpack_require__(/*! ./collectBy.js */ "./node_modules/ramda/src/collectBy.js"); 17917module.exports.comparator = __webpack_require__(/*! ./comparator.js */ "./node_modules/ramda/src/comparator.js"); 17918module.exports.complement = __webpack_require__(/*! ./complement.js */ "./node_modules/ramda/src/complement.js"); 17919module.exports.compose = __webpack_require__(/*! ./compose.js */ "./node_modules/ramda/src/compose.js"); 17920module.exports.composeWith = __webpack_require__(/*! ./composeWith.js */ "./node_modules/ramda/src/composeWith.js"); 17921module.exports.concat = __webpack_require__(/*! ./concat.js */ "./node_modules/ramda/src/concat.js"); 17922module.exports.cond = __webpack_require__(/*! ./cond.js */ "./node_modules/ramda/src/cond.js"); 17923module.exports.construct = __webpack_require__(/*! ./construct.js */ "./node_modules/ramda/src/construct.js"); 17924module.exports.constructN = __webpack_require__(/*! ./constructN.js */ "./node_modules/ramda/src/constructN.js"); 17925module.exports.converge = __webpack_require__(/*! ./converge.js */ "./node_modules/ramda/src/converge.js"); 17926module.exports.count = __webpack_require__(/*! ./count.js */ "./node_modules/ramda/src/count.js"); 17927module.exports.countBy = __webpack_require__(/*! ./countBy.js */ "./node_modules/ramda/src/countBy.js"); 17928module.exports.curry = __webpack_require__(/*! ./curry.js */ "./node_modules/ramda/src/curry.js"); 17929module.exports.curryN = __webpack_require__(/*! ./curryN.js */ "./node_modules/ramda/src/curryN.js"); 17930module.exports.dec = __webpack_require__(/*! ./dec.js */ "./node_modules/ramda/src/dec.js"); 17931module.exports.defaultTo = __webpack_require__(/*! ./defaultTo.js */ "./node_modules/ramda/src/defaultTo.js"); 17932module.exports.descend = __webpack_require__(/*! ./descend.js */ "./node_modules/ramda/src/descend.js"); 17933module.exports.difference = __webpack_require__(/*! ./difference.js */ "./node_modules/ramda/src/difference.js"); 17934module.exports.differenceWith = __webpack_require__(/*! ./differenceWith.js */ "./node_modules/ramda/src/differenceWith.js"); 17935module.exports.dissoc = __webpack_require__(/*! ./dissoc.js */ "./node_modules/ramda/src/dissoc.js"); 17936module.exports.dissocPath = __webpack_require__(/*! ./dissocPath.js */ "./node_modules/ramda/src/dissocPath.js"); 17937module.exports.divide = __webpack_require__(/*! ./divide.js */ "./node_modules/ramda/src/divide.js"); 17938module.exports.drop = __webpack_require__(/*! ./drop.js */ "./node_modules/ramda/src/drop.js"); 17939module.exports.dropLast = __webpack_require__(/*! ./dropLast.js */ "./node_modules/ramda/src/dropLast.js"); 17940module.exports.dropLastWhile = __webpack_require__(/*! ./dropLastWhile.js */ "./node_modules/ramda/src/dropLastWhile.js"); 17941module.exports.dropRepeats = __webpack_require__(/*! ./dropRepeats.js */ "./node_modules/ramda/src/dropRepeats.js"); 17942module.exports.dropRepeatsWith = __webpack_require__(/*! ./dropRepeatsWith.js */ "./node_modules/ramda/src/dropRepeatsWith.js"); 17943module.exports.dropWhile = __webpack_require__(/*! ./dropWhile.js */ "./node_modules/ramda/src/dropWhile.js"); 17944module.exports.either = __webpack_require__(/*! ./either.js */ "./node_modules/ramda/src/either.js"); 17945module.exports.empty = __webpack_require__(/*! ./empty.js */ "./node_modules/ramda/src/empty.js"); 17946module.exports.endsWith = __webpack_require__(/*! ./endsWith.js */ "./node_modules/ramda/src/endsWith.js"); 17947module.exports.eqBy = __webpack_require__(/*! ./eqBy.js */ "./node_modules/ramda/src/eqBy.js"); 17948module.exports.eqProps = __webpack_require__(/*! ./eqProps.js */ "./node_modules/ramda/src/eqProps.js"); 17949module.exports.equals = __webpack_require__(/*! ./equals.js */ "./node_modules/ramda/src/equals.js"); 17950module.exports.evolve = __webpack_require__(/*! ./evolve.js */ "./node_modules/ramda/src/evolve.js"); 17951module.exports.filter = __webpack_require__(/*! ./filter.js */ "./node_modules/ramda/src/filter.js"); 17952module.exports.find = __webpack_require__(/*! ./find.js */ "./node_modules/ramda/src/find.js"); 17953module.exports.findIndex = __webpack_require__(/*! ./findIndex.js */ "./node_modules/ramda/src/findIndex.js"); 17954module.exports.findLast = __webpack_require__(/*! ./findLast.js */ "./node_modules/ramda/src/findLast.js"); 17955module.exports.findLastIndex = __webpack_require__(/*! ./findLastIndex.js */ "./node_modules/ramda/src/findLastIndex.js"); 17956module.exports.flatten = __webpack_require__(/*! ./flatten.js */ "./node_modules/ramda/src/flatten.js"); 17957module.exports.flip = __webpack_require__(/*! ./flip.js */ "./node_modules/ramda/src/flip.js"); 17958module.exports.forEach = __webpack_require__(/*! ./forEach.js */ "./node_modules/ramda/src/forEach.js"); 17959module.exports.forEachObjIndexed = __webpack_require__(/*! ./forEachObjIndexed.js */ "./node_modules/ramda/src/forEachObjIndexed.js"); 17960module.exports.fromPairs = __webpack_require__(/*! ./fromPairs.js */ "./node_modules/ramda/src/fromPairs.js"); 17961module.exports.groupBy = __webpack_require__(/*! ./groupBy.js */ "./node_modules/ramda/src/groupBy.js"); 17962module.exports.groupWith = __webpack_require__(/*! ./groupWith.js */ "./node_modules/ramda/src/groupWith.js"); 17963module.exports.gt = __webpack_require__(/*! ./gt.js */ "./node_modules/ramda/src/gt.js"); 17964module.exports.gte = __webpack_require__(/*! ./gte.js */ "./node_modules/ramda/src/gte.js"); 17965module.exports.has = __webpack_require__(/*! ./has.js */ "./node_modules/ramda/src/has.js"); 17966module.exports.hasIn = __webpack_require__(/*! ./hasIn.js */ "./node_modules/ramda/src/hasIn.js"); 17967module.exports.hasPath = __webpack_require__(/*! ./hasPath.js */ "./node_modules/ramda/src/hasPath.js"); 17968module.exports.head = __webpack_require__(/*! ./head.js */ "./node_modules/ramda/src/head.js"); 17969module.exports.identical = __webpack_require__(/*! ./identical.js */ "./node_modules/ramda/src/identical.js"); 17970module.exports.identity = __webpack_require__(/*! ./identity.js */ "./node_modules/ramda/src/identity.js"); 17971module.exports.ifElse = __webpack_require__(/*! ./ifElse.js */ "./node_modules/ramda/src/ifElse.js"); 17972module.exports.inc = __webpack_require__(/*! ./inc.js */ "./node_modules/ramda/src/inc.js"); 17973module.exports.includes = __webpack_require__(/*! ./includes.js */ "./node_modules/ramda/src/includes.js"); 17974module.exports.indexBy = __webpack_require__(/*! ./indexBy.js */ "./node_modules/ramda/src/indexBy.js"); 17975module.exports.indexOf = __webpack_require__(/*! ./indexOf.js */ "./node_modules/ramda/src/indexOf.js"); 17976module.exports.init = __webpack_require__(/*! ./init.js */ "./node_modules/ramda/src/init.js"); 17977module.exports.innerJoin = __webpack_require__(/*! ./innerJoin.js */ "./node_modules/ramda/src/innerJoin.js"); 17978module.exports.insert = __webpack_require__(/*! ./insert.js */ "./node_modules/ramda/src/insert.js"); 17979module.exports.insertAll = __webpack_require__(/*! ./insertAll.js */ "./node_modules/ramda/src/insertAll.js"); 17980module.exports.intersection = __webpack_require__(/*! ./intersection.js */ "./node_modules/ramda/src/intersection.js"); 17981module.exports.intersperse = __webpack_require__(/*! ./intersperse.js */ "./node_modules/ramda/src/intersperse.js"); 17982module.exports.into = __webpack_require__(/*! ./into.js */ "./node_modules/ramda/src/into.js"); 17983module.exports.invert = __webpack_require__(/*! ./invert.js */ "./node_modules/ramda/src/invert.js"); 17984module.exports.invertObj = __webpack_require__(/*! ./invertObj.js */ "./node_modules/ramda/src/invertObj.js"); 17985module.exports.invoker = __webpack_require__(/*! ./invoker.js */ "./node_modules/ramda/src/invoker.js"); 17986module.exports.is = __webpack_require__(/*! ./is.js */ "./node_modules/ramda/src/is.js"); 17987module.exports.isEmpty = __webpack_require__(/*! ./isEmpty.js */ "./node_modules/ramda/src/isEmpty.js"); 17988module.exports.isNil = __webpack_require__(/*! ./isNil.js */ "./node_modules/ramda/src/isNil.js"); 17989module.exports.join = __webpack_require__(/*! ./join.js */ "./node_modules/ramda/src/join.js"); 17990module.exports.juxt = __webpack_require__(/*! ./juxt.js */ "./node_modules/ramda/src/juxt.js"); 17991module.exports.keys = __webpack_require__(/*! ./keys.js */ "./node_modules/ramda/src/keys.js"); 17992module.exports.keysIn = __webpack_require__(/*! ./keysIn.js */ "./node_modules/ramda/src/keysIn.js"); 17993module.exports.last = __webpack_require__(/*! ./last.js */ "./node_modules/ramda/src/last.js"); 17994module.exports.lastIndexOf = __webpack_require__(/*! ./lastIndexOf.js */ "./node_modules/ramda/src/lastIndexOf.js"); 17995module.exports.length = __webpack_require__(/*! ./length.js */ "./node_modules/ramda/src/length.js"); 17996module.exports.lens = __webpack_require__(/*! ./lens.js */ "./node_modules/ramda/src/lens.js"); 17997module.exports.lensIndex = __webpack_require__(/*! ./lensIndex.js */ "./node_modules/ramda/src/lensIndex.js"); 17998module.exports.lensPath = __webpack_require__(/*! ./lensPath.js */ "./node_modules/ramda/src/lensPath.js"); 17999module.exports.lensProp = __webpack_require__(/*! ./lensProp.js */ "./node_modules/ramda/src/lensProp.js"); 18000module.exports.lift = __webpack_require__(/*! ./lift.js */ "./node_modules/ramda/src/lift.js"); 18001module.exports.liftN = __webpack_require__(/*! ./liftN.js */ "./node_modules/ramda/src/liftN.js"); 18002module.exports.lt = __webpack_require__(/*! ./lt.js */ "./node_modules/ramda/src/lt.js"); 18003module.exports.lte = __webpack_require__(/*! ./lte.js */ "./node_modules/ramda/src/lte.js"); 18004module.exports.map = __webpack_require__(/*! ./map.js */ "./node_modules/ramda/src/map.js"); 18005module.exports.mapAccum = __webpack_require__(/*! ./mapAccum.js */ "./node_modules/ramda/src/mapAccum.js"); 18006module.exports.mapAccumRight = __webpack_require__(/*! ./mapAccumRight.js */ "./node_modules/ramda/src/mapAccumRight.js"); 18007module.exports.mapObjIndexed = __webpack_require__(/*! ./mapObjIndexed.js */ "./node_modules/ramda/src/mapObjIndexed.js"); 18008module.exports.match = __webpack_require__(/*! ./match.js */ "./node_modules/ramda/src/match.js"); 18009module.exports.mathMod = __webpack_require__(/*! ./mathMod.js */ "./node_modules/ramda/src/mathMod.js"); 18010module.exports.max = __webpack_require__(/*! ./max.js */ "./node_modules/ramda/src/max.js"); 18011module.exports.maxBy = __webpack_require__(/*! ./maxBy.js */ "./node_modules/ramda/src/maxBy.js"); 18012module.exports.mean = __webpack_require__(/*! ./mean.js */ "./node_modules/ramda/src/mean.js"); 18013module.exports.median = __webpack_require__(/*! ./median.js */ "./node_modules/ramda/src/median.js"); 18014module.exports.memoizeWith = __webpack_require__(/*! ./memoizeWith.js */ "./node_modules/ramda/src/memoizeWith.js"); 18015module.exports.mergeAll = __webpack_require__(/*! ./mergeAll.js */ "./node_modules/ramda/src/mergeAll.js"); 18016module.exports.mergeDeepLeft = __webpack_require__(/*! ./mergeDeepLeft.js */ "./node_modules/ramda/src/mergeDeepLeft.js"); 18017module.exports.mergeDeepRight = __webpack_require__(/*! ./mergeDeepRight.js */ "./node_modules/ramda/src/mergeDeepRight.js"); 18018module.exports.mergeDeepWith = __webpack_require__(/*! ./mergeDeepWith.js */ "./node_modules/ramda/src/mergeDeepWith.js"); 18019module.exports.mergeDeepWithKey = __webpack_require__(/*! ./mergeDeepWithKey.js */ "./node_modules/ramda/src/mergeDeepWithKey.js"); 18020module.exports.mergeLeft = __webpack_require__(/*! ./mergeLeft.js */ "./node_modules/ramda/src/mergeLeft.js"); 18021module.exports.mergeRight = __webpack_require__(/*! ./mergeRight.js */ "./node_modules/ramda/src/mergeRight.js"); 18022module.exports.mergeWith = __webpack_require__(/*! ./mergeWith.js */ "./node_modules/ramda/src/mergeWith.js"); 18023module.exports.mergeWithKey = __webpack_require__(/*! ./mergeWithKey.js */ "./node_modules/ramda/src/mergeWithKey.js"); 18024module.exports.min = __webpack_require__(/*! ./min.js */ "./node_modules/ramda/src/min.js"); 18025module.exports.minBy = __webpack_require__(/*! ./minBy.js */ "./node_modules/ramda/src/minBy.js"); 18026module.exports.modify = __webpack_require__(/*! ./modify.js */ "./node_modules/ramda/src/modify.js"); 18027module.exports.modifyPath = __webpack_require__(/*! ./modifyPath.js */ "./node_modules/ramda/src/modifyPath.js"); 18028module.exports.modulo = __webpack_require__(/*! ./modulo.js */ "./node_modules/ramda/src/modulo.js"); 18029module.exports.move = __webpack_require__(/*! ./move.js */ "./node_modules/ramda/src/move.js"); 18030module.exports.multiply = __webpack_require__(/*! ./multiply.js */ "./node_modules/ramda/src/multiply.js"); 18031module.exports.nAry = __webpack_require__(/*! ./nAry.js */ "./node_modules/ramda/src/nAry.js"); 18032module.exports.partialObject = __webpack_require__(/*! ./partialObject.js */ "./node_modules/ramda/src/partialObject.js"); 18033module.exports.negate = __webpack_require__(/*! ./negate.js */ "./node_modules/ramda/src/negate.js"); 18034module.exports.none = __webpack_require__(/*! ./none.js */ "./node_modules/ramda/src/none.js"); 18035module.exports.not = __webpack_require__(/*! ./not.js */ "./node_modules/ramda/src/not.js"); 18036module.exports.nth = __webpack_require__(/*! ./nth.js */ "./node_modules/ramda/src/nth.js"); 18037module.exports.nthArg = __webpack_require__(/*! ./nthArg.js */ "./node_modules/ramda/src/nthArg.js"); 18038module.exports.o = __webpack_require__(/*! ./o.js */ "./node_modules/ramda/src/o.js"); 18039module.exports.objOf = __webpack_require__(/*! ./objOf.js */ "./node_modules/ramda/src/objOf.js"); 18040module.exports.of = __webpack_require__(/*! ./of.js */ "./node_modules/ramda/src/of.js"); 18041module.exports.omit = __webpack_require__(/*! ./omit.js */ "./node_modules/ramda/src/omit.js"); 18042module.exports.on = __webpack_require__(/*! ./on.js */ "./node_modules/ramda/src/on.js"); 18043module.exports.once = __webpack_require__(/*! ./once.js */ "./node_modules/ramda/src/once.js"); 18044module.exports.or = __webpack_require__(/*! ./or.js */ "./node_modules/ramda/src/or.js"); 18045module.exports.otherwise = __webpack_require__(/*! ./otherwise.js */ "./node_modules/ramda/src/otherwise.js"); 18046module.exports.over = __webpack_require__(/*! ./over.js */ "./node_modules/ramda/src/over.js"); 18047module.exports.pair = __webpack_require__(/*! ./pair.js */ "./node_modules/ramda/src/pair.js"); 18048module.exports.partial = __webpack_require__(/*! ./partial.js */ "./node_modules/ramda/src/partial.js"); 18049module.exports.partialRight = __webpack_require__(/*! ./partialRight.js */ "./node_modules/ramda/src/partialRight.js"); 18050module.exports.partition = __webpack_require__(/*! ./partition.js */ "./node_modules/ramda/src/partition.js"); 18051module.exports.path = __webpack_require__(/*! ./path.js */ "./node_modules/ramda/src/path.js"); 18052module.exports.paths = __webpack_require__(/*! ./paths.js */ "./node_modules/ramda/src/paths.js"); 18053module.exports.pathEq = __webpack_require__(/*! ./pathEq.js */ "./node_modules/ramda/src/pathEq.js"); 18054module.exports.pathOr = __webpack_require__(/*! ./pathOr.js */ "./node_modules/ramda/src/pathOr.js"); 18055module.exports.pathSatisfies = __webpack_require__(/*! ./pathSatisfies.js */ "./node_modules/ramda/src/pathSatisfies.js"); 18056module.exports.pick = __webpack_require__(/*! ./pick.js */ "./node_modules/ramda/src/pick.js"); 18057module.exports.pickAll = __webpack_require__(/*! ./pickAll.js */ "./node_modules/ramda/src/pickAll.js"); 18058module.exports.pickBy = __webpack_require__(/*! ./pickBy.js */ "./node_modules/ramda/src/pickBy.js"); 18059module.exports.pipe = __webpack_require__(/*! ./pipe.js */ "./node_modules/ramda/src/pipe.js"); 18060module.exports.pipeWith = __webpack_require__(/*! ./pipeWith.js */ "./node_modules/ramda/src/pipeWith.js"); 18061module.exports.pluck = __webpack_require__(/*! ./pluck.js */ "./node_modules/ramda/src/pluck.js"); 18062module.exports.prepend = __webpack_require__(/*! ./prepend.js */ "./node_modules/ramda/src/prepend.js"); 18063module.exports.product = __webpack_require__(/*! ./product.js */ "./node_modules/ramda/src/product.js"); 18064module.exports.project = __webpack_require__(/*! ./project.js */ "./node_modules/ramda/src/project.js"); 18065module.exports.promap = __webpack_require__(/*! ./promap.js */ "./node_modules/ramda/src/promap.js"); 18066module.exports.prop = __webpack_require__(/*! ./prop.js */ "./node_modules/ramda/src/prop.js"); 18067module.exports.propEq = __webpack_require__(/*! ./propEq.js */ "./node_modules/ramda/src/propEq.js"); 18068module.exports.propIs = __webpack_require__(/*! ./propIs.js */ "./node_modules/ramda/src/propIs.js"); 18069module.exports.propOr = __webpack_require__(/*! ./propOr.js */ "./node_modules/ramda/src/propOr.js"); 18070module.exports.propSatisfies = __webpack_require__(/*! ./propSatisfies.js */ "./node_modules/ramda/src/propSatisfies.js"); 18071module.exports.props = __webpack_require__(/*! ./props.js */ "./node_modules/ramda/src/props.js"); 18072module.exports.range = __webpack_require__(/*! ./range.js */ "./node_modules/ramda/src/range.js"); 18073module.exports.reduce = __webpack_require__(/*! ./reduce.js */ "./node_modules/ramda/src/reduce.js"); 18074module.exports.reduceBy = __webpack_require__(/*! ./reduceBy.js */ "./node_modules/ramda/src/reduceBy.js"); 18075module.exports.reduceRight = __webpack_require__(/*! ./reduceRight.js */ "./node_modules/ramda/src/reduceRight.js"); 18076module.exports.reduceWhile = __webpack_require__(/*! ./reduceWhile.js */ "./node_modules/ramda/src/reduceWhile.js"); 18077module.exports.reduced = __webpack_require__(/*! ./reduced.js */ "./node_modules/ramda/src/reduced.js"); 18078module.exports.reject = __webpack_require__(/*! ./reject.js */ "./node_modules/ramda/src/reject.js"); 18079module.exports.remove = __webpack_require__(/*! ./remove.js */ "./node_modules/ramda/src/remove.js"); 18080module.exports.repeat = __webpack_require__(/*! ./repeat.js */ "./node_modules/ramda/src/repeat.js"); 18081module.exports.replace = __webpack_require__(/*! ./replace.js */ "./node_modules/ramda/src/replace.js"); 18082module.exports.reverse = __webpack_require__(/*! ./reverse.js */ "./node_modules/ramda/src/reverse.js"); 18083module.exports.scan = __webpack_require__(/*! ./scan.js */ "./node_modules/ramda/src/scan.js"); 18084module.exports.sequence = __webpack_require__(/*! ./sequence.js */ "./node_modules/ramda/src/sequence.js"); 18085module.exports.set = __webpack_require__(/*! ./set.js */ "./node_modules/ramda/src/set.js"); 18086module.exports.slice = __webpack_require__(/*! ./slice.js */ "./node_modules/ramda/src/slice.js"); 18087module.exports.sort = __webpack_require__(/*! ./sort.js */ "./node_modules/ramda/src/sort.js"); 18088module.exports.sortBy = __webpack_require__(/*! ./sortBy.js */ "./node_modules/ramda/src/sortBy.js"); 18089module.exports.sortWith = __webpack_require__(/*! ./sortWith.js */ "./node_modules/ramda/src/sortWith.js"); 18090module.exports.split = __webpack_require__(/*! ./split.js */ "./node_modules/ramda/src/split.js"); 18091module.exports.splitAt = __webpack_require__(/*! ./splitAt.js */ "./node_modules/ramda/src/splitAt.js"); 18092module.exports.splitEvery = __webpack_require__(/*! ./splitEvery.js */ "./node_modules/ramda/src/splitEvery.js"); 18093module.exports.splitWhen = __webpack_require__(/*! ./splitWhen.js */ "./node_modules/ramda/src/splitWhen.js"); 18094module.exports.splitWhenever = __webpack_require__(/*! ./splitWhenever.js */ "./node_modules/ramda/src/splitWhenever.js"); 18095module.exports.startsWith = __webpack_require__(/*! ./startsWith.js */ "./node_modules/ramda/src/startsWith.js"); 18096module.exports.subtract = __webpack_require__(/*! ./subtract.js */ "./node_modules/ramda/src/subtract.js"); 18097module.exports.sum = __webpack_require__(/*! ./sum.js */ "./node_modules/ramda/src/sum.js"); 18098module.exports.symmetricDifference = __webpack_require__(/*! ./symmetricDifference.js */ "./node_modules/ramda/src/symmetricDifference.js"); 18099module.exports.symmetricDifferenceWith = __webpack_require__(/*! ./symmetricDifferenceWith.js */ "./node_modules/ramda/src/symmetricDifferenceWith.js"); 18100module.exports.tail = __webpack_require__(/*! ./tail.js */ "./node_modules/ramda/src/tail.js"); 18101module.exports.take = __webpack_require__(/*! ./take.js */ "./node_modules/ramda/src/take.js"); 18102module.exports.takeLast = __webpack_require__(/*! ./takeLast.js */ "./node_modules/ramda/src/takeLast.js"); 18103module.exports.takeLastWhile = __webpack_require__(/*! ./takeLastWhile.js */ "./node_modules/ramda/src/takeLastWhile.js"); 18104module.exports.takeWhile = __webpack_require__(/*! ./takeWhile.js */ "./node_modules/ramda/src/takeWhile.js"); 18105module.exports.tap = __webpack_require__(/*! ./tap.js */ "./node_modules/ramda/src/tap.js"); 18106module.exports.test = __webpack_require__(/*! ./test.js */ "./node_modules/ramda/src/test.js"); 18107module.exports.andThen = __webpack_require__(/*! ./andThen.js */ "./node_modules/ramda/src/andThen.js"); 18108module.exports.times = __webpack_require__(/*! ./times.js */ "./node_modules/ramda/src/times.js"); 18109module.exports.toLower = __webpack_require__(/*! ./toLower.js */ "./node_modules/ramda/src/toLower.js"); 18110module.exports.toPairs = __webpack_require__(/*! ./toPairs.js */ "./node_modules/ramda/src/toPairs.js"); 18111module.exports.toPairsIn = __webpack_require__(/*! ./toPairsIn.js */ "./node_modules/ramda/src/toPairsIn.js"); 18112module.exports.toString = __webpack_require__(/*! ./toString.js */ "./node_modules/ramda/src/toString.js"); 18113module.exports.toUpper = __webpack_require__(/*! ./toUpper.js */ "./node_modules/ramda/src/toUpper.js"); 18114module.exports.transduce = __webpack_require__(/*! ./transduce.js */ "./node_modules/ramda/src/transduce.js"); 18115module.exports.transpose = __webpack_require__(/*! ./transpose.js */ "./node_modules/ramda/src/transpose.js"); 18116module.exports.traverse = __webpack_require__(/*! ./traverse.js */ "./node_modules/ramda/src/traverse.js"); 18117module.exports.trim = __webpack_require__(/*! ./trim.js */ "./node_modules/ramda/src/trim.js"); 18118module.exports.tryCatch = __webpack_require__(/*! ./tryCatch.js */ "./node_modules/ramda/src/tryCatch.js"); 18119module.exports.type = __webpack_require__(/*! ./type.js */ "./node_modules/ramda/src/type.js"); 18120module.exports.unapply = __webpack_require__(/*! ./unapply.js */ "./node_modules/ramda/src/unapply.js"); 18121module.exports.unary = __webpack_require__(/*! ./unary.js */ "./node_modules/ramda/src/unary.js"); 18122module.exports.uncurryN = __webpack_require__(/*! ./uncurryN.js */ "./node_modules/ramda/src/uncurryN.js"); 18123module.exports.unfold = __webpack_require__(/*! ./unfold.js */ "./node_modules/ramda/src/unfold.js"); 18124module.exports.union = __webpack_require__(/*! ./union.js */ "./node_modules/ramda/src/union.js"); 18125module.exports.unionWith = __webpack_require__(/*! ./unionWith.js */ "./node_modules/ramda/src/unionWith.js"); 18126module.exports.uniq = __webpack_require__(/*! ./uniq.js */ "./node_modules/ramda/src/uniq.js"); 18127module.exports.uniqBy = __webpack_require__(/*! ./uniqBy.js */ "./node_modules/ramda/src/uniqBy.js"); 18128module.exports.uniqWith = __webpack_require__(/*! ./uniqWith.js */ "./node_modules/ramda/src/uniqWith.js"); 18129module.exports.unless = __webpack_require__(/*! ./unless.js */ "./node_modules/ramda/src/unless.js"); 18130module.exports.unnest = __webpack_require__(/*! ./unnest.js */ "./node_modules/ramda/src/unnest.js"); 18131module.exports.until = __webpack_require__(/*! ./until.js */ "./node_modules/ramda/src/until.js"); 18132module.exports.unwind = __webpack_require__(/*! ./unwind.js */ "./node_modules/ramda/src/unwind.js"); 18133module.exports.update = __webpack_require__(/*! ./update.js */ "./node_modules/ramda/src/update.js"); 18134module.exports.useWith = __webpack_require__(/*! ./useWith.js */ "./node_modules/ramda/src/useWith.js"); 18135module.exports.values = __webpack_require__(/*! ./values.js */ "./node_modules/ramda/src/values.js"); 18136module.exports.valuesIn = __webpack_require__(/*! ./valuesIn.js */ "./node_modules/ramda/src/valuesIn.js"); 18137module.exports.view = __webpack_require__(/*! ./view.js */ "./node_modules/ramda/src/view.js"); 18138module.exports.when = __webpack_require__(/*! ./when.js */ "./node_modules/ramda/src/when.js"); 18139module.exports.where = __webpack_require__(/*! ./where.js */ "./node_modules/ramda/src/where.js"); 18140module.exports.whereAny = __webpack_require__(/*! ./whereAny.js */ "./node_modules/ramda/src/whereAny.js"); 18141module.exports.whereEq = __webpack_require__(/*! ./whereEq.js */ "./node_modules/ramda/src/whereEq.js"); 18142module.exports.without = __webpack_require__(/*! ./without.js */ "./node_modules/ramda/src/without.js"); 18143module.exports.xor = __webpack_require__(/*! ./xor.js */ "./node_modules/ramda/src/xor.js"); 18144module.exports.xprod = __webpack_require__(/*! ./xprod.js */ "./node_modules/ramda/src/xprod.js"); 18145module.exports.zip = __webpack_require__(/*! ./zip.js */ "./node_modules/ramda/src/zip.js"); 18146module.exports.zipObj = __webpack_require__(/*! ./zipObj.js */ "./node_modules/ramda/src/zipObj.js"); 18147module.exports.zipWith = __webpack_require__(/*! ./zipWith.js */ "./node_modules/ramda/src/zipWith.js"); 18148module.exports.thunkify = __webpack_require__(/*! ./thunkify.js */ "./node_modules/ramda/src/thunkify.js"); 18149 18150/***/ }), 18151
vendor: 1,387 bytes, lines 18152-18195
18152/***/ "./node_modules/ramda/src/indexBy.js": 18153/*!*******************************************!*\ 18154 !*** ./node_modules/ramda/src/indexBy.js ***! 18155 \*******************************************/ 18156/***/ ((module, __unused_webpack_exports, __webpack_require__) => { 18157 18158var reduceBy = 18159/*#__PURE__*/ 18160__webpack_require__(/*! ./reduceBy.js */ "./node_modules/ramda/src/reduceBy.js"); 18161/** 18162 * Given a function that generates a key, turns a list of objects into an 18163 * object indexing the objects by the given key. Note that if multiple 18164 * objects generate the same value for the indexing key only the last value 18165 * will be included in the generated object. 18166 * 18167 * Acts as a transducer if a transformer is given in list position. 18168 * 18169 * @func 18170 * @memberOf R 18171 * @since v0.19.0 18172 * @category List 18173 * @typedefn Idx = String | Int | Symbol 18174 * @sig Idx a => (b -> a) -> [b] -> {a: b} 18175 * @param {Function} fn Function :: a -> Idx 18176 * @param {Array} array The array of objects to index 18177 * @return {Object} An object indexing each array element by the given property. 18178 * @see R.groupBy 18179 * @example 18180 * 18181 * const list = [{id: 'xyz', title: 'A'}, {id: 'abc', title: 'B'}]; 18182 * R.indexBy(R.prop('id'), list); 18183 * //=> {abc: {id: 'abc', title: 'B'}, xyz: {id: 'xyz', title: 'A'}} 18184 */ 18185 18186 18187var indexBy = 18188/*#__PURE__*/ 18189reduceBy(function (acc, elem) { 18190 return elem; 18191}, null); 18192module.exports = indexBy; 18193 18194/***/ }), 18195
vendor: 1,436 bytes, lines 18196-18243
18196/***/ "./node_modules/ramda/src/indexOf.js": 18197/*!*******************************************!*\ 18198 !*** ./node_modules/ramda/src/indexOf.js ***! 18199 \*******************************************/ 18200/***/ ((module, __unused_webpack_exports, __webpack_require__) => { 18201 18202var _curry2 = 18203/*#__PURE__*/ 18204__webpack_require__(/*! ./internal/_curry2.js */ "./node_modules/ramda/src/internal/_curry2.js"); 18205 18206var _indexOf = 18207/*#__PURE__*/ 18208__webpack_require__(/*! ./internal/_indexOf.js */ "./node_modules/ramda/src/internal/_indexOf.js"); 18209 18210var _isArray = 18211/*#__PURE__*/ 18212__webpack_require__(/*! ./internal/_isArray.js */ "./node_modules/ramda/src/internal/_isArray.js"); 18213/** 18214 * Returns the position of the first occurrence of an item in an array, or -1 18215 * if the item is not included in the array. [`R.equals`](#equals) is used to 18216 * determine equality. 18217 * 18218 * @func 18219 * @memberOf R 18220 * @since v0.1.0 18221 * @category List 18222 * @sig a -> [a] -> Number 18223 * @param {*} target The item to find. 18224 * @param {Array} xs The array to search in. 18225 * @return {Number} the index of the target, or -1 if the target is not found. 18226 * @see R.lastIndexOf, R.findIndex 18227 * @example 18228 * 18229 * R.indexOf(3, [1,2,3,4]); //=> 2 18230 * R.indexOf(10, [1,2,3,4]); //=> -1 18231 */ 18232 18233 18234var indexOf = 18235/*#__PURE__*/ 18236_curry2(function indexOf(target, xs) { 18237 return typeof xs.indexOf === 'function' && !_isArray(xs) ? xs.indexOf(target) : _indexOf(xs, target, 0); 18238}); 18239 18240module.exports = indexOf; 18241 18242/***/ }), 18243
vendor: 968 bytes, lines 18244-18285
18244/***/ "./node_modules/ramda/src/init.js": 18245/*!****************************************!*\ 18246 !*** ./node_modules/ramda/src/init.js ***! 18247 \****************************************/ 18248/***/ ((module, __unused_webpack_exports, __webpack_require__) => { 18249 18250var slice = 18251/*#__PURE__*/ 18252__webpack_require__(/*! ./slice.js */ "./node_modules/ramda/src/slice.js"); 18253/** 18254 * Returns all but the last element of the given list or string. 18255 * 18256 * @func 18257 * @memberOf R 18258 * @since v0.9.0 18259 * @category List 18260 * @sig [a] -> [a] 18261 * @sig String -> String 18262 * @param {*} list 18263 * @return {*} 18264 * @see R.last, R.head, R.tail 18265 * @example 18266 * 18267 * R.init([1, 2, 3]); //=> [1, 2] 18268 * R.init([1, 2]); //=> [1] 18269 * R.init([1]); //=> [] 18270 * R.init([]); //=> [] 18271 * 18272 * R.init('abc'); //=> 'ab' 18273 * R.init('ab'); //=> 'a' 18274 * R.init('a'); //=> '' 18275 * R.init(''); //=> '' 18276 */ 18277 18278 18279var init = 18280/*#__PURE__*/ 18281slice(0, -1); 18282module.exports = init; 18283 18284/***/ }), 18285
vendor: 2,112 bytes, lines 18286-18351
18286/***/ "./node_modules/ramda/src/innerJoin.js": 18287/*!*********************************************!*\ 18288 !*** ./node_modules/ramda/src/innerJoin.js ***! 18289 \*********************************************/ 18290/***/ ((module, __unused_webpack_exports, __webpack_require__) => { 18291 18292var _includesWith = 18293/*#__PURE__*/ 18294__webpack_require__(/*! ./internal/_includesWith.js */ "./node_modules/ramda/src/internal/_includesWith.js"); 18295 18296var _curry3 = 18297/*#__PURE__*/ 18298__webpack_require__(/*! ./internal/_curry3.js */ "./node_modules/ramda/src/internal/_curry3.js"); 18299 18300var _filter = 18301/*#__PURE__*/ 18302__webpack_require__(/*! ./internal/_filter.js */ "./node_modules/ramda/src/internal/_filter.js"); 18303/** 18304 * Takes a predicate `pred`, a list `xs`, and a list `ys`, and returns a list 18305 * `xs'` comprising each of the elements of `xs` which is equal to one or more 18306 * elements of `ys` according to `pred`. 18307 * 18308 * `pred` must be a binary function expecting an element from each list. 18309 * 18310 * `xs`, `ys`, and `xs'` are treated as sets, semantically, so ordering should 18311 * not be significant, but since `xs'` is ordered the implementation guarantees 18312 * that its values are in the same order as they appear in `xs`. Duplicates are 18313 * not removed, so `xs'` may contain duplicates if `xs` contains duplicates. 18314 * 18315 * @func 18316 * @memberOf R 18317 * @since v0.24.0 18318 * @category Relation 18319 * @sig ((a, b) -> Boolean) -> [a] -> [b] -> [a] 18320 * @param {Function} pred 18321 * @param {Array} xs 18322 * @param {Array} ys 18323 * @return {Array} 18324 * @see R.intersection 18325 * @example 18326 * 18327 * R.innerJoin( 18328 * (record, id) => record.id === id, 18329 * [{id: 824, name: 'Richie Furay'}, 18330 * {id: 956, name: 'Dewey Martin'}, 18331 * {id: 313, name: 'Bruce Palmer'}, 18332 * {id: 456, name: 'Stephen Stills'}, 18333 * {id: 177, name: 'Neil Young'}], 18334 * [177, 456, 999] 18335 * ); 18336 * //=> [{id: 456, name: 'Stephen Stills'}, {id: 177, name: 'Neil Young'}] 18337 */ 18338 18339 18340var innerJoin = 18341/*#__PURE__*/ 18342_curry3(function innerJoin(pred, xs, ys) { 18343 return _filter(function (x) { 18344 return _includesWith(pred, x, ys); 18345 }, xs); 18346}); 18347 18348module.exports = innerJoin; 18349 18350/***/ }), 18351
vendor: 1,296 bytes, lines 18352-18394
18352/***/ "./node_modules/ramda/src/insert.js": 18353/*!******************************************!*\ 18354 !*** ./node_modules/ramda/src/insert.js ***! 18355 \******************************************/ 18356/***/ ((module, __unused_webpack_exports, __webpack_require__) => { 18357 18358var _curry3 = 18359/*#__PURE__*/ 18360__webpack_require__(/*! ./internal/_curry3.js */ "./node_modules/ramda/src/internal/_curry3.js"); 18361/** 18362 * Inserts the supplied element into the list, at the specified `index`. _Note that 18363 18364 * this is not destructive_: it returns a copy of the list with the changes. 18365 * <small>No lists have been harmed in the application of this function.</small> 18366 * 18367 * @func 18368 * @memberOf R 18369 * @since v0.2.2 18370 * @category List 18371 * @sig Number -> a -> [a] -> [a] 18372 * @param {Number} index The position to insert the element 18373 * @param {*} elt The element to insert into the Array 18374 * @param {Array} list The list to insert into 18375 * @return {Array} A new Array with `elt` inserted at `index`. 18376 * @example 18377 * 18378 * R.insert(2, 'x', [1,2,3,4]); //=> [1,2,'x',3,4] 18379 */ 18380 18381 18382var insert = 18383/*#__PURE__*/ 18384_curry3(function insert(idx, elt, list) { 18385 idx = idx < list.length && idx >= 0 ? idx : list.length; 18386 var result = Array.prototype.slice.call(list, 0); 18387 result.splice(idx, 0, elt); 18388 return result; 18389}); 18390 18391module.exports = insert; 18392 18393/***/ }), 18394
vendor: 1,370 bytes, lines 18395-18434
18395/***/ "./node_modules/ramda/src/insertAll.js": 18396/*!*********************************************!*\ 18397 !*** ./node_modules/ramda/src/insertAll.js ***! 18398 \*********************************************/ 18399/***/ ((module, __unused_webpack_exports, __webpack_require__) => { 18400 18401var _curry3 = 18402/*#__PURE__*/ 18403__webpack_require__(/*! ./internal/_curry3.js */ "./node_modules/ramda/src/internal/_curry3.js"); 18404/** 18405 * Inserts the sub-list into the list, at the specified `index`. _Note that this is not 18406 * destructive_: it returns a copy of the list with the changes. 18407 * <small>No lists have been harmed in the application of this function.</small> 18408 * 18409 * @func 18410 * @memberOf R 18411 * @since v0.9.0 18412 * @category List 18413 * @sig Number -> [a] -> [a] -> [a] 18414 * @param {Number} index The position to insert the sub-list 18415 * @param {Array} elts The sub-list to insert into the Array 18416 * @param {Array} list The list to insert the sub-list into 18417 * @return {Array} A new Array with `elts` inserted starting at `index`. 18418 * @example 18419 * 18420 * R.insertAll(2, ['x','y','z'], [1,2,3,4]); //=> [1,2,'x','y','z',3,4] 18421 */ 18422 18423 18424var insertAll = 18425/*#__PURE__*/ 18426_curry3(function insertAll(idx, elts, list) { 18427 idx = idx < list.length && idx >= 0 ? idx : list.length; 18428 return [].concat(Array.prototype.slice.call(list, 0, idx), elts, Array.prototype.slice.call(list, idx)); 18429}); 18430 18431module.exports = insertAll; 18432 18433/***/ }), 18434
vendor: 5,051 bytes, lines 18435-18646
18435/***/ "./node_modules/ramda/src/internal/_Set.js": 18436/*!*************************************************!*\ 18437 !*** ./node_modules/ramda/src/internal/_Set.js ***! 18438 \*************************************************/ 18439/***/ ((module, __unused_webpack_exports, __webpack_require__) => { 18440 18441var _includes = 18442/*#__PURE__*/ 18443__webpack_require__(/*! ./_includes.js */ "./node_modules/ramda/src/internal/_includes.js"); 18444 18445var _Set = 18446/*#__PURE__*/ 18447function () { 18448 function _Set() { 18449 /* globals Set */ 18450 this._nativeSet = typeof Set === 'function' ? new Set() : null; 18451 this._items = {}; 18452 } 18453 18454 // until we figure out why jsdoc chokes on this 18455 // @param item The item to add to the Set 18456 // @returns {boolean} true if the item did not exist prior, otherwise false 18457 // 18458 _Set.prototype.add = function (item) { 18459 return !hasOrAdd(item, true, this); 18460 }; // 18461 // @param item The item to check for existence in the Set 18462 // @returns {boolean} true if the item exists in the Set, otherwise false 18463 // 18464 18465 18466 _Set.prototype.has = function (item) { 18467 return hasOrAdd(item, false, this); 18468 }; // 18469 // Combines the logic for checking whether an item is a member of the set and 18470 // for adding a new item to the set. 18471 // 18472 // @param item The item to check or add to the Set instance. 18473 // @param shouldAdd If true, the item will be added to the set if it doesn't 18474 // already exist. 18475 // @param set The set instance to check or add to. 18476 // @return {boolean} true if the item already existed, otherwise false. 18477 // 18478 18479 18480 return _Set; 18481}(); 18482 18483function hasOrAdd(item, shouldAdd, set) { 18484 var type = typeof item; 18485 var prevSize, newSize; 18486 18487 switch (type) { 18488 case 'string': 18489 case 'number': 18490 // distinguish between +0 and -0 18491 if (item === 0 && 1 / item === -Infinity) { 18492 if (set._items['-0']) { 18493 return true; 18494 } else { 18495 if (shouldAdd) { 18496 set._items['-0'] = true; 18497 } 18498 18499 return false; 18500 } 18501 } // these types can all utilise the native Set 18502 18503 18504 if (set._nativeSet !== null) { 18505 if (shouldAdd) { 18506 prevSize = set._nativeSet.size; 18507 18508 set._nativeSet.add(item); 18509 18510 newSize = set._nativeSet.size; 18511 return newSize === prevSize; 18512 } else { 18513 return set._nativeSet.has(item); 18514 } 18515 } else { 18516 if (!(type in set._items)) { 18517 if (shouldAdd) { 18518 set._items[type] = {}; 18519 set._items[type][item] = true; 18520 } 18521 18522 return false; 18523 } else if (item in set._items[type]) { 18524 return true; 18525 } else { 18526 if (shouldAdd) { 18527 set._items[type][item] = true; 18528 } 18529 18530 return false; 18531 } 18532 } 18533 18534 case 'boolean': 18535 // set._items['boolean'] holds a two element array 18536 // representing [ falseExists, trueExists ] 18537 if (type in set._items) { 18538 var bIdx = item ? 1 : 0; 18539 18540 if (set._items[type][bIdx]) { 18541 return true; 18542 } else { 18543 if (shouldAdd) { 18544 set._items[type][bIdx] = true; 18545 } 18546 18547 return false; 18548 } 18549 } else { 18550 if (shouldAdd) { 18551 set._items[type] = item ? [false, true] : [true, false]; 18552 } 18553 18554 return false; 18555 } 18556 18557 case 'function': 18558 // compare functions for reference equality 18559 if (set._nativeSet !== null) { 18560 if (shouldAdd) { 18561 prevSize = set._nativeSet.size; 18562 18563 set._nativeSet.add(item); 18564 18565 newSize = set._nativeSet.size; 18566 return newSize === prevSize; 18567 } else { 18568 return set._nativeSet.has(item); 18569 } 18570 } else { 18571 if (!(type in set._items)) { 18572 if (shouldAdd) { 18573 set._items[type] = [item]; 18574 } 18575 18576 return false; 18577 } 18578 18579 if (!_includes(item, set._items[type])) { 18580 if (shouldAdd) { 18581 set._items[type].push(item); 18582 } 18583 18584 return false; 18585 } 18586 18587 return true; 18588 } 18589 18590 case 'undefined': 18591 if (set._items[type]) { 18592 return true; 18593 } else { 18594 if (shouldAdd) { 18595 set._items[type] = true; 18596 } 18597 18598 return false; 18599 } 18600 18601 case 'object': 18602 if (item === null) { 18603 if (!set._items['null']) { 18604 if (shouldAdd) { 18605 set._items['null'] = true; 18606 } 18607 18608 return false; 18609 } 18610 18611 return true; 18612 } 18613 18614 /* falls through */ 18615 18616 default: 18617 // reduce the search size of heterogeneous sets by creating buckets 18618 // for each type. 18619 type = Object.prototype.toString.call(item); 18620 18621 if (!(type in set._items)) { 18622 if (shouldAdd) { 18623 set._items[type] = [item]; 18624 } 18625 18626 return false; 18627 } // scan through all previously applied items 18628 18629 18630 if (!_includes(item, set._items[type])) { 18631 if (shouldAdd) { 18632 set._items[type].push(item); 18633 } 18634 18635 return false; 18636 } 18637 18638 return true; 18639 } 18640} // A simple Set type that honours R.equals semantics 18641 18642 18643module.exports = _Set; 18644 18645/***/ }), 18646
vendor: 550 bytes, lines 18647-18669
18647/***/ "./node_modules/ramda/src/internal/_aperture.js": 18648/*!******************************************************!*\ 18649 !*** ./node_modules/ramda/src/internal/_aperture.js ***! 18650 \******************************************************/ 18651/***/ ((module) => { 18652 18653function _aperture(n, list) { 18654 var idx = 0; 18655 var limit = list.length - (n - 1); 18656 var acc = new Array(limit >= 0 ? limit : 0); 18657 18658 while (idx < limit) { 18659 acc[idx] = Array.prototype.slice.call(list, idx, idx + n); 18660 idx += 1; 18661 } 18662 18663 return acc; 18664} 18665 18666module.exports = _aperture; 18667 18668/***/ }), 18669
vendor: 1,684 bytes, lines 18670-18742
18670/***/ "./node_modules/ramda/src/internal/_arity.js": 18671/*!***************************************************!*\ 18672 !*** ./node_modules/ramda/src/internal/_arity.js ***! 18673 \***************************************************/ 18674/***/ ((module) => { 18675 18676function _arity(n, fn) { 18677 /* eslint-disable no-unused-vars */ 18678 switch (n) { 18679 case 0: 18680 return function () { 18681 return fn.apply(this, arguments); 18682 }; 18683 18684 case 1: 18685 return function (a0) { 18686 return fn.apply(this, arguments); 18687 }; 18688 18689 case 2: 18690 return function (a0, a1) { 18691 return fn.apply(this, arguments); 18692 }; 18693 18694 case 3: 18695 return function (a0, a1, a2) { 18696 return fn.apply(this, arguments); 18697 }; 18698 18699 case 4: 18700 return function (a0, a1, a2, a3) { 18701 return fn.apply(this, arguments); 18702 }; 18703 18704 case 5: 18705 return function (a0, a1, a2, a3, a4) { 18706 return fn.apply(this, arguments); 18707 }; 18708 18709 case 6: 18710 return function (a0, a1, a2, a3, a4, a5) { 18711 return fn.apply(this, arguments); 18712 }; 18713 18714 case 7: 18715 return function (a0, a1, a2, a3, a4, a5, a6) { 18716 return fn.apply(this, arguments); 18717 }; 18718 18719 case 8: 18720 return function (a0, a1, a2, a3, a4, a5, a6, a7) { 18721 return fn.apply(this, arguments); 18722 }; 18723 18724 case 9: 18725 return function (a0, a1, a2, a3, a4, a5, a6, a7, a8) { 18726 return fn.apply(this, arguments); 18727 }; 18728 18729 case 10: 18730 return function (a0, a1, a2, a3, a4, a5, a6, a7, a8, a9) { 18731 return fn.apply(this, arguments); 18732 }; 18733 18734 default: 18735 throw new Error('First argument to _arity must be a non-negative integer no greater than ten'); 18736 } 18737} 18738 18739module.exports = _arity; 18740 18741/***/ }), 18742
vendor: 497 bytes, lines 18743-18763
18743/***/ "./node_modules/ramda/src/internal/_arrayFromIterator.js": 18744/*!***************************************************************!*\ 18745 !*** ./node_modules/ramda/src/internal/_arrayFromIterator.js ***! 18746 \***************************************************************/ 18747/***/ ((module) => { 18748 18749function _arrayFromIterator(iter) { 18750 var list = []; 18751 var next; 18752 18753 while (!(next = iter.next()).done) { 18754 list.push(next.value); 18755 } 18756 18757 return list; 18758} 18759 18760module.exports = _arrayFromIterator; 18761 18762/***/ }), 18763
vendor: 800 bytes, lines 18764-18787
18764/***/ "./node_modules/ramda/src/internal/_assertPromise.js": 18765/*!***********************************************************!*\ 18766 !*** ./node_modules/ramda/src/internal/_assertPromise.js ***! 18767 \***********************************************************/ 18768/***/ ((module, __unused_webpack_exports, __webpack_require__) => { 18769 18770var _isFunction = 18771/*#__PURE__*/ 18772__webpack_require__(/*! ./_isFunction.js */ "./node_modules/ramda/src/internal/_isFunction.js"); 18773 18774var _toString = 18775/*#__PURE__*/ 18776__webpack_require__(/*! ./_toString.js */ "./node_modules/ramda/src/internal/_toString.js"); 18777 18778function _assertPromise(name, p) { 18779 if (p == null || !_isFunction(p.then)) { 18780 throw new TypeError('`' + name + '` expected a Promise, received ' + _toString(p, [])); 18781 } 18782} 18783 18784module.exports = _assertPromise; 18785 18786/***/ }), 18787
vendor: 1,354 bytes, lines 18788-18835
18788/***/ "./node_modules/ramda/src/internal/_assoc.js": 18789/*!***************************************************!*\ 18790 !*** ./node_modules/ramda/src/internal/_assoc.js ***! 18791 \***************************************************/ 18792/***/ ((module, __unused_webpack_exports, __webpack_require__) => { 18793 18794var _isArray = 18795/*#__PURE__*/ 18796__webpack_require__(/*! ./_isArray.js */ "./node_modules/ramda/src/internal/_isArray.js"); 18797 18798var _isInteger = 18799/*#__PURE__*/ 18800__webpack_require__(/*! ./_isInteger.js */ "./node_modules/ramda/src/internal/_isInteger.js"); 18801/** 18802 * Makes a shallow clone of an object, setting or overriding the specified 18803 * property with the given value. Note that this copies and flattens prototype 18804 * properties onto the new object as well. All non-primitive properties are 18805 * copied by reference. 18806 * 18807 * @private 18808 * @param {String|Number} prop The property name to set 18809 * @param {*} val The new value 18810 * @param {Object|Array} obj The object to clone 18811 * @return {Object|Array} A new object equivalent to the original except for the changed property. 18812 */ 18813 18814 18815function _assoc(prop, val, obj) { 18816 if (_isInteger(prop) && _isArray(obj)) { 18817 var arr = [].concat(obj); 18818 arr[prop] = val; 18819 return arr; 18820 } 18821 18822 var result = {}; 18823 18824 for (var p in obj) { 18825 result[p] = obj[p]; 18826 } 18827 18828 result[prop] = val; 18829 return result; 18830} 18831 18832module.exports = _assoc; 18833 18834/***/ }), 18835
vendor: 1,254 bytes, lines 18836-18873
18836/***/ "./node_modules/ramda/src/internal/_checkForMethod.js": 18837/*!************************************************************!*\ 18838 !*** ./node_modules/ramda/src/internal/_checkForMethod.js ***! 18839 \************************************************************/ 18840/***/ ((module, __unused_webpack_exports, __webpack_require__) => { 18841 18842var _isArray = 18843/*#__PURE__*/ 18844__webpack_require__(/*! ./_isArray.js */ "./node_modules/ramda/src/internal/_isArray.js"); 18845/** 18846 * This checks whether a function has a [methodname] function. If it isn't an 18847 * array it will execute that function otherwise it will default to the ramda 18848 * implementation. 18849 * 18850 * @private 18851 * @param {Function} fn ramda implementation 18852 * @param {String} methodname property to check for a custom implementation 18853 * @return {Object} Whatever the return value of the method is. 18854 */ 18855 18856 18857function _checkForMethod(methodname, fn) { 18858 return function () { 18859 var length = arguments.length; 18860 18861 if (length === 0) { 18862 return fn(); 18863 } 18864 18865 var obj = arguments[length - 1]; 18866 return _isArray(obj) || typeof obj[methodname] !== 'function' ? fn.apply(this, arguments) : obj[methodname].apply(obj, Array.prototype.slice.call(arguments, 0, length - 1)); 18867 }; 18868} 18869 18870module.exports = _checkForMethod; 18871 18872/***/ }), 18873
vendor: 2,003 bytes, lines 18874-18958
18874/***/ "./node_modules/ramda/src/internal/_clone.js": 18875/*!***************************************************!*\ 18876 !*** ./node_modules/ramda/src/internal/_clone.js ***! 18877 \***************************************************/ 18878/***/ ((module, __unused_webpack_exports, __webpack_require__) => { 18879 18880var _cloneRegExp = 18881/*#__PURE__*/ 18882__webpack_require__(/*! ./_cloneRegExp.js */ "./node_modules/ramda/src/internal/_cloneRegExp.js"); 18883 18884var type = 18885/*#__PURE__*/ 18886__webpack_require__(/*! ../type.js */ "./node_modules/ramda/src/type.js"); 18887/** 18888 * Copies an object. 18889 * 18890 * @private 18891 * @param {*} value The value to be copied 18892 * @param {Array} refFrom Array containing the source references 18893 * @param {Array} refTo Array containing the copied source references 18894 * @param {Boolean} deep Whether or not to perform deep cloning. 18895 * @return {*} The copied value. 18896 */ 18897 18898 18899function _clone(value, refFrom, refTo, deep) { 18900 var copy = function copy(copiedValue) { 18901 var len = refFrom.length; 18902 var idx = 0; 18903 18904 while (idx < len) { 18905 if (value === refFrom[idx]) { 18906 return refTo[idx]; 18907 } 18908 18909 idx += 1; 18910 } 18911 18912 refFrom[idx] = value; 18913 refTo[idx] = copiedValue; 18914 18915 for (var key in value) { 18916 if (value.hasOwnProperty(key)) { 18917 copiedValue[key] = deep ? _clone(value[key], refFrom, refTo, true) : value[key]; 18918 } 18919 } 18920 18921 return copiedValue; 18922 }; 18923 18924 switch (type(value)) { 18925 case 'Object': 18926 return copy(Object.create(Object.getPrototypeOf(value))); 18927 18928 case 'Array': 18929 return copy([]); 18930 18931 case 'Date': 18932 return new Date(value.valueOf()); 18933 18934 case 'RegExp': 18935 return _cloneRegExp(value); 18936 18937 case 'Int8Array': 18938 case 'Uint8Array': 18939 case 'Uint8ClampedArray': 18940 case 'Int16Array': 18941 case 'Uint16Array': 18942 case 'Int32Array': 18943 case 'Uint32Array': 18944 case 'Float32Array': 18945 case 'Float64Array': 18946 case 'BigInt64Array': 18947 case 'BigUint64Array': 18948 return value.slice(); 18949 18950 default: 18951 return value; 18952 } 18953} 18954 18955module.exports = _clone; 18956 18957/***/ }), 18958
vendor: 542 bytes, lines 18959-18972
18959/***/ "./node_modules/ramda/src/internal/_cloneRegExp.js": 18960/*!*********************************************************!*\ 18961 !*** ./node_modules/ramda/src/internal/_cloneRegExp.js ***! 18962 \*********************************************************/ 18963/***/ ((module) => { 18964 18965function _cloneRegExp(pattern) { 18966 return new RegExp(pattern.source, (pattern.global ? 'g' : '') + (pattern.ignoreCase ? 'i' : '') + (pattern.multiline ? 'm' : '') + (pattern.sticky ? 'y' : '') + (pattern.unicode ? 'u' : '')); 18967} 18968 18969module.exports = _cloneRegExp; 18970 18971/***/ }), 18972
vendor: 402 bytes, lines 18973-18988
18973/***/ "./node_modules/ramda/src/internal/_complement.js": 18974/*!********************************************************!*\ 18975 !*** ./node_modules/ramda/src/internal/_complement.js ***! 18976 \********************************************************/ 18977/***/ ((module) => { 18978 18979function _complement(f) { 18980 return function () { 18981 return !f.apply(this, arguments); 18982 }; 18983} 18984 18985module.exports = _complement; 18986 18987/***/ }), 18988
vendor: 971 bytes, lines 18989-19033
18989/***/ "./node_modules/ramda/src/internal/_concat.js": 18990/*!****************************************************!*\ 18991 !*** ./node_modules/ramda/src/internal/_concat.js ***! 18992 \****************************************************/ 18993/***/ ((module) => { 18994 18995/** 18996 * Private `concat` function to merge two array-like objects. 18997 * 18998 * @private 18999 * @param {Array|Arguments} [set1=[]] An array-like object. 19000 * @param {Array|Arguments} [set2=[]] An array-like object. 19001 * @return {Array} A new, merged array. 19002 * @example 19003 * 19004 * _concat([4, 5, 6], [1, 2, 3]); //=> [4, 5, 6, 1, 2, 3] 19005 */ 19006function _concat(set1, set2) { 19007 set1 = set1 || []; 19008 set2 = set2 || []; 19009 var idx; 19010 var len1 = set1.length; 19011 var len2 = set2.length; 19012 var result = []; 19013 idx = 0; 19014 19015 while (idx < len1) { 19016 result[result.length] = set1[idx]; 19017 idx += 1; 19018 } 19019 19020 idx = 0; 19021 19022 while (idx < len2) { 19023 result[result.length] = set2[idx]; 19024 idx += 1; 19025 } 19026 19027 return result; 19028} 19029 19030module.exports = _concat; 19031 19032/***/ }), 19033
vendor: 876 bytes, lines 19034-19059
19034/***/ "./node_modules/ramda/src/internal/_createPartialApplicator.js": 19035/*!*********************************************************************!*\ 19036 !*** ./node_modules/ramda/src/internal/_createPartialApplicator.js ***! 19037 \*********************************************************************/ 19038/***/ ((module, __unused_webpack_exports, __webpack_require__) => { 19039 19040var _arity = 19041/*#__PURE__*/ 19042__webpack_require__(/*! ./_arity.js */ "./node_modules/ramda/src/internal/_arity.js"); 19043 19044var _curry2 = 19045/*#__PURE__*/ 19046__webpack_require__(/*! ./_curry2.js */ "./node_modules/ramda/src/internal/_curry2.js"); 19047 19048function _createPartialApplicator(concat) { 19049 return _curry2(function (fn, args) { 19050 return _arity(Math.max(0, fn.length - args.length), function () { 19051 return fn.apply(this, concat(args, arguments)); 19052 }); 19053 }); 19054} 19055 19056module.exports = _createPartialApplicator; 19057 19058/***/ }), 19059
vendor: 846 bytes, lines 19060-19092
19060/***/ "./node_modules/ramda/src/internal/_curry1.js": 19061/*!****************************************************!*\ 19062 !*** ./node_modules/ramda/src/internal/_curry1.js ***! 19063 \****************************************************/ 19064/***/ ((module, __unused_webpack_exports, __webpack_require__) => { 19065 19066var _isPlaceholder = 19067/*#__PURE__*/ 19068__webpack_require__(/*! ./_isPlaceholder.js */ "./node_modules/ramda/src/internal/_isPlaceholder.js"); 19069/** 19070 * Optimized internal one-arity curry function. 19071 * 19072 * @private 19073 * @category Function 19074 * @param {Function} fn The function to curry. 19075 * @return {Function} The curried function. 19076 */ 19077 19078 19079function _curry1(fn) { 19080 return function f1(a) { 19081 if (arguments.length === 0 || _isPlaceholder(a)) { 19082 return f1; 19083 } else { 19084 return fn.apply(this, arguments); 19085 } 19086 }; 19087} 19088 19089module.exports = _curry1; 19090 19091/***/ }), 19092
vendor: 1,283 bytes, lines 19093-19140
19093/***/ "./node_modules/ramda/src/internal/_curry2.js": 19094/*!****************************************************!*\ 19095 !*** ./node_modules/ramda/src/internal/_curry2.js ***! 19096 \****************************************************/ 19097/***/ ((module, __unused_webpack_exports, __webpack_require__) => { 19098 19099var _curry1 = 19100/*#__PURE__*/ 19101__webpack_require__(/*! ./_curry1.js */ "./node_modules/ramda/src/internal/_curry1.js"); 19102 19103var _isPlaceholder = 19104/*#__PURE__*/ 19105__webpack_require__(/*! ./_isPlaceholder.js */ "./node_modules/ramda/src/internal/_isPlaceholder.js"); 19106/** 19107 * Optimized internal two-arity curry function. 19108 * 19109 * @private 19110 * @category Function 19111 * @param {Function} fn The function to curry. 19112 * @return {Function} The curried function. 19113 */ 19114 19115 19116function _curry2(fn) { 19117 return function f2(a, b) { 19118 switch (arguments.length) { 19119 case 0: 19120 return f2; 19121 19122 case 1: 19123 return _isPlaceholder(a) ? f2 : _curry1(function (_b) { 19124 return fn(a, _b); 19125 }); 19126 19127 default: 19128 return _isPlaceholder(a) && _isPlaceholder(b) ? f2 : _isPlaceholder(a) ? _curry1(function (_a) { 19129 return fn(_a, b); 19130 }) : _isPlaceholder(b) ? _curry1(function (_b) { 19131 return fn(a, _b); 19132 }) : fn(a, b); 19133 } 19134 }; 19135} 19136 19137module.exports = _curry2; 19138 19139/***/ }), 19140
vendor: 2,203 bytes, lines 19141-19209
19141/***/ "./node_modules/ramda/src/internal/_curry3.js": 19142/*!****************************************************!*\ 19143 !*** ./node_modules/ramda/src/internal/_curry3.js ***! 19144 \****************************************************/ 19145/***/ ((module, __unused_webpack_exports, __webpack_require__) => { 19146 19147var _curry1 = 19148/*#__PURE__*/ 19149__webpack_require__(/*! ./_curry1.js */ "./node_modules/ramda/src/internal/_curry1.js"); 19150 19151var _curry2 = 19152/*#__PURE__*/ 19153__webpack_require__(/*! ./_curry2.js */ "./node_modules/ramda/src/internal/_curry2.js"); 19154 19155var _isPlaceholder = 19156/*#__PURE__*/ 19157__webpack_require__(/*! ./_isPlaceholder.js */ "./node_modules/ramda/src/internal/_isPlaceholder.js"); 19158/** 19159 * Optimized internal three-arity curry function. 19160 * 19161 * @private 19162 * @category Function 19163 * @param {Function} fn The function to curry. 19164 * @return {Function} The curried function. 19165 */ 19166 19167 19168function _curry3(fn) { 19169 return function f3(a, b, c) { 19170 switch (arguments.length) { 19171 case 0: 19172 return f3; 19173 19174 case 1: 19175 return _isPlaceholder(a) ? f3 : _curry2(function (_b, _c) { 19176 return fn(a, _b, _c); 19177 }); 19178 19179 case 2: 19180 return _isPlaceholder(a) && _isPlaceholder(b) ? f3 : _isPlaceholder(a) ? _curry2(function (_a, _c) { 19181 return fn(_a, b, _c); 19182 }) : _isPlaceholder(b) ? _curry2(function (_b, _c) { 19183 return fn(a, _b, _c); 19184 }) : _curry1(function (_c) { 19185 return fn(a, b, _c); 19186 }); 19187 19188 default: 19189 return _isPlaceholder(a) && _isPlaceholder(b) && _isPlaceholder(c) ? f3 : _isPlaceholder(a) && _isPlaceholder(b) ? _curry2(function (_a, _b) { 19190 return fn(_a, _b, c); 19191 }) : _isPlaceholder(a) && _isPlaceholder(c) ? _curry2(function (_a, _c) { 19192 return fn(_a, b, _c); 19193 }) : _isPlaceholder(b) && _isPlaceholder(c) ? _curry2(function (_b, _c) { 19194 return fn(a, _b, _c); 19195 }) : _isPlaceholder(a) ? _curry1(function (_a) { 19196 return fn(_a, b, c); 19197 }) : _isPlaceholder(b) ? _curry1(function (_b) { 19198 return fn(a, _b, c); 19199 }) : _isPlaceholder(c) ? _curry1(function (_c) { 19200 return fn(a, b, _c); 19201 }) : fn(a, b, c); 19202 } 19203 }; 19204} 19205 19206module.exports = _curry3; 19207 19208/***/ }), 19209
vendor: 1,612 bytes, lines 19210-19268
19210/***/ "./node_modules/ramda/src/internal/_curryN.js": 19211/*!****************************************************!*\ 19212 !*** ./node_modules/ramda/src/internal/_curryN.js ***! 19213 \****************************************************/ 19214/***/ ((module, __unused_webpack_exports, __webpack_require__) => { 19215 19216var _arity = 19217/*#__PURE__*/ 19218__webpack_require__(/*! ./_arity.js */ "./node_modules/ramda/src/internal/_arity.js"); 19219 19220var _isPlaceholder = 19221/*#__PURE__*/ 19222__webpack_require__(/*! ./_isPlaceholder.js */ "./node_modules/ramda/src/internal/_isPlaceholder.js"); 19223/** 19224 * Internal curryN function. 19225 * 19226 * @private 19227 * @category Function 19228 * @param {Number} length The arity of the curried function. 19229 * @param {Array} received An array of arguments received thus far. 19230 * @param {Function} fn The function to curry. 19231 * @return {Function} The curried function. 19232 */ 19233 19234 19235function _curryN(length, received, fn) { 19236 return function () { 19237 var combined = []; 19238 var argsIdx = 0; 19239 var left = length; 19240 var combinedIdx = 0; 19241 19242 while (combinedIdx < received.length || argsIdx < arguments.length) { 19243 var result; 19244 19245 if (combinedIdx < received.length && (!_isPlaceholder(received[combinedIdx]) || argsIdx >= arguments.length)) { 19246 result = received[combinedIdx]; 19247 } else { 19248 result = arguments[argsIdx]; 19249 argsIdx += 1; 19250 } 19251 19252 combined[combinedIdx] = result; 19253 19254 if (!_isPlaceholder(result)) { 19255 left -= 1; 19256 } 19257 19258 combinedIdx += 1; 19259 } 19260 19261 return left <= 0 ? fn.apply(this, combined) : _arity(left, _curryN(length, combined, fn)); 19262 }; 19263} 19264 19265module.exports = _curryN; 19266 19267/***/ }), 19268
vendor: 2,098 bytes, lines 19269-19331
19269/***/ "./node_modules/ramda/src/internal/_dispatchable.js": 19270/*!**********************************************************!*\ 19271 !*** ./node_modules/ramda/src/internal/_dispatchable.js ***! 19272 \**********************************************************/ 19273/***/ ((module, __unused_webpack_exports, __webpack_require__) => { 19274 19275var _isArray = 19276/*#__PURE__*/ 19277__webpack_require__(/*! ./_isArray.js */ "./node_modules/ramda/src/internal/_isArray.js"); 19278 19279var _isTransformer = 19280/*#__PURE__*/ 19281__webpack_require__(/*! ./_isTransformer.js */ "./node_modules/ramda/src/internal/_isTransformer.js"); 19282/** 19283 * Returns a function that dispatches with different strategies based on the 19284 * object in list position (last argument). If it is an array, executes [fn]. 19285 * Otherwise, if it has a function with one of the given method names, it will 19286 * execute that function (functor case). Otherwise, if it is a transformer, 19287 * uses transducer created by [transducerCreator] to return a new transformer 19288 * (transducer case). 19289 * Otherwise, it will default to executing [fn]. 19290 * 19291 * @private 19292 * @param {Array} methodNames properties to check for a custom implementation 19293 * @param {Function} transducerCreator transducer factory if object is transformer 19294 * @param {Function} fn default ramda implementation 19295 * @return {Function} A function that dispatches on object in list position 19296 */ 19297 19298 19299function _dispatchable(methodNames, transducerCreator, fn) { 19300 return function () { 19301 if (arguments.length === 0) { 19302 return fn(); 19303 } 19304 19305 var obj = arguments[arguments.length - 1]; 19306 19307 if (!_isArray(obj)) { 19308 var idx = 0; 19309 19310 while (idx < methodNames.length) { 19311 if (typeof obj[methodNames[idx]] === 'function') { 19312 return obj[methodNames[idx]].apply(obj, Array.prototype.slice.call(arguments, 0, -1)); 19313 } 19314 19315 idx += 1; 19316 } 19317 19318 if (_isTransformer(obj)) { 19319 var transducer = transducerCreator.apply(null, Array.prototype.slice.call(arguments, 0, -1)); 19320 return transducer(obj); 19321 } 19322 } 19323 19324 return fn.apply(this, arguments); 19325 }; 19326} 19327 19328module.exports = _dispatchable; 19329 19330/***/ }), 19331
vendor: 1,260 bytes, lines 19332-19381
19332/***/ "./node_modules/ramda/src/internal/_dissoc.js": 19333/*!****************************************************!*\ 19334 !*** ./node_modules/ramda/src/internal/_dissoc.js ***! 19335 \****************************************************/ 19336/***/ ((module, __unused_webpack_exports, __webpack_require__) => { 19337 19338var _isInteger = 19339/*#__PURE__*/ 19340__webpack_require__(/*! ./_isInteger.js */ "./node_modules/ramda/src/internal/_isInteger.js"); 19341 19342var _isArray = 19343/*#__PURE__*/ 19344__webpack_require__(/*! ./_isArray.js */ "./node_modules/ramda/src/internal/_isArray.js"); 19345 19346var remove = 19347/*#__PURE__*/ 19348__webpack_require__(/*! ../remove.js */ "./node_modules/ramda/src/remove.js"); 19349/** 19350 * Returns a new object that does not contain a `prop` property. 19351 * 19352 * @private 19353 * @param {String|Number} prop The name of the property to dissociate 19354 * @param {Object|Array} obj The object to clone 19355 * @return {Object} A new object equivalent to the original but without the specified property 19356 */ 19357 19358 19359function _dissoc(prop, obj) { 19360 if (obj == null) { 19361 return obj; 19362 } 19363 19364 if (_isInteger(prop) && _isArray(obj)) { 19365 return remove(prop, 1, obj); 19366 } 19367 19368 var result = {}; 19369 19370 for (var p in obj) { 19371 result[p] = obj[p]; 19372 } 19373 19374 delete result[prop]; 19375 return result; 19376} 19377 19378module.exports = _dissoc; 19379 19380/***/ }), 19381
vendor: 528 bytes, lines 19382-19399
19382/***/ "./node_modules/ramda/src/internal/_dropLast.js": 19383/*!******************************************************!*\ 19384 !*** ./node_modules/ramda/src/internal/_dropLast.js ***! 19385 \******************************************************/ 19386/***/ ((module, __unused_webpack_exports, __webpack_require__) => { 19387 19388var take = 19389/*#__PURE__*/ 19390__webpack_require__(/*! ../take.js */ "./node_modules/ramda/src/take.js"); 19391 19392function dropLast(n, xs) { 19393 return take(n < xs.length ? xs.length - n : 0, xs); 19394} 19395 19396module.exports = dropLast; 19397 19398/***/ }), 19399
vendor: 627 bytes, lines 19400-19423
19400/***/ "./node_modules/ramda/src/internal/_dropLastWhile.js": 19401/*!***********************************************************!*\ 19402 !*** ./node_modules/ramda/src/internal/_dropLastWhile.js ***! 19403 \***********************************************************/ 19404/***/ ((module, __unused_webpack_exports, __webpack_require__) => { 19405 19406var slice = 19407/*#__PURE__*/ 19408__webpack_require__(/*! ../slice.js */ "./node_modules/ramda/src/slice.js"); 19409 19410function dropLastWhile(pred, xs) { 19411 var idx = xs.length - 1; 19412 19413 while (idx >= 0 && pred(xs[idx])) { 19414 idx -= 1; 19415 } 19416 19417 return slice(0, idx + 1, xs); 19418} 19419 19420module.exports = dropLastWhile; 19421 19422/***/ }), 19423
vendor: 4,827 bytes, lines 19424-19617
19424/***/ "./node_modules/ramda/src/internal/_equals.js": 19425/*!****************************************************!*\ 19426 !*** ./node_modules/ramda/src/internal/_equals.js ***! 19427 \****************************************************/ 19428/***/ ((module, __unused_webpack_exports, __webpack_require__) => { 19429 19430var _arrayFromIterator = 19431/*#__PURE__*/ 19432__webpack_require__(/*! ./_arrayFromIterator.js */ "./node_modules/ramda/src/internal/_arrayFromIterator.js"); 19433 19434var _includesWith = 19435/*#__PURE__*/ 19436__webpack_require__(/*! ./_includesWith.js */ "./node_modules/ramda/src/internal/_includesWith.js"); 19437 19438var _functionName = 19439/*#__PURE__*/ 19440__webpack_require__(/*! ./_functionName.js */ "./node_modules/ramda/src/internal/_functionName.js"); 19441 19442var _has = 19443/*#__PURE__*/ 19444__webpack_require__(/*! ./_has.js */ "./node_modules/ramda/src/internal/_has.js"); 19445 19446var _objectIs = 19447/*#__PURE__*/ 19448__webpack_require__(/*! ./_objectIs.js */ "./node_modules/ramda/src/internal/_objectIs.js"); 19449 19450var keys = 19451/*#__PURE__*/ 19452__webpack_require__(/*! ../keys.js */ "./node_modules/ramda/src/keys.js"); 19453 19454var type = 19455/*#__PURE__*/ 19456__webpack_require__(/*! ../type.js */ "./node_modules/ramda/src/type.js"); 19457/** 19458 * private _uniqContentEquals function. 19459 * That function is checking equality of 2 iterator contents with 2 assumptions 19460 * - iterators lengths are the same 19461 * - iterators values are unique 19462 * 19463 * false-positive result will be returned for comparison of, e.g. 19464 * - [1,2,3] and [1,2,3,4] 19465 * - [1,1,1] and [1,2,3] 19466 * */ 19467 19468 19469function _uniqContentEquals(aIterator, bIterator, stackA, stackB) { 19470 var a = _arrayFromIterator(aIterator); 19471 19472 var b = _arrayFromIterator(bIterator); 19473 19474 function eq(_a, _b) { 19475 return _equals(_a, _b, stackA.slice(), stackB.slice()); 19476 } // if *a* array contains any element that is not included in *b* 19477 19478 19479 return !_includesWith(function (b, aItem) { 19480 return !_includesWith(eq, aItem, b); 19481 }, b, a); 19482} 19483 19484function _equals(a, b, stackA, stackB) { 19485 if (_objectIs(a, b)) { 19486 return true; 19487 } 19488 19489 var typeA = type(a); 19490 19491 if (typeA !== type(b)) { 19492 return false; 19493 } 19494 19495 if (typeof a['fantasy-land/equals'] === 'function' || typeof b['fantasy-land/equals'] === 'function') { 19496 return typeof a['fantasy-land/equals'] === 'function' && a['fantasy-land/equals'](b) && typeof b['fantasy-land/equals'] === 'function' && b['fantasy-land/equals'](a); 19497 } 19498 19499 if (typeof a.equals === 'function' || typeof b.equals === 'function') { 19500 return typeof a.equals === 'function' && a.equals(b) && typeof b.equals === 'function' && b.equals(a); 19501 } 19502 19503 switch (typeA) { 19504 case 'Arguments': 19505 case 'Array': 19506 case 'Object': 19507 if (typeof a.constructor === 'function' && _functionName(a.constructor) === 'Promise') { 19508 return a === b; 19509 } 19510 19511 break; 19512 19513 case 'Boolean': 19514 case 'Number': 19515 case 'String': 19516 if (!(typeof a === typeof b && _objectIs(a.valueOf(), b.valueOf()))) { 19517 return false; 19518 } 19519 19520 break; 19521 19522 case 'Date': 19523 if (!_objectIs(a.valueOf(), b.valueOf())) { 19524 return false; 19525 } 19526 19527 break; 19528 19529 case 'Error': 19530 return a.name === b.name && a.message === b.message; 19531 19532 case 'RegExp': 19533 if (!(a.source === b.source && a.global === b.global && a.ignoreCase === b.ignoreCase && a.multiline === b.multiline && a.sticky === b.sticky && a.unicode === b.unicode)) { 19534 return false; 19535 } 19536 19537 break; 19538 } 19539 19540 var idx = stackA.length - 1; 19541 19542 while (idx >= 0) { 19543 if (stackA[idx] === a) { 19544 return stackB[idx] === b; 19545 } 19546 19547 idx -= 1; 19548 } 19549 19550 switch (typeA) { 19551 case 'Map': 19552 if (a.size !== b.size) { 19553 return false; 19554 } 19555 19556 return _uniqContentEquals(a.entries(), b.entries(), stackA.concat([a]), stackB.concat([b])); 19557 19558 case 'Set': 19559 if (a.size !== b.size) { 19560 return false; 19561 } 19562 19563 return _uniqContentEquals(a.values(), b.values(), stackA.concat([a]), stackB.concat([b])); 19564 19565 case 'Arguments': 19566 case 'Array': 19567 case 'Object': 19568 case 'Boolean': 19569 case 'Number': 19570 case 'String': 19571 case 'Date': 19572 case 'Error': 19573 case 'RegExp': 19574 case 'Int8Array': 19575 case 'Uint8Array': 19576 case 'Uint8ClampedArray': 19577 case 'Int16Array': 19578 case 'Uint16Array': 19579 case 'Int32Array': 19580 case 'Uint32Array': 19581 case 'Float32Array': 19582 case 'Float64Array': 19583 case 'ArrayBuffer': 19584 break; 19585 19586 default: 19587 // Values of other types are only equal if identical. 19588 return false; 19589 } 19590 19591 var keysA = keys(a); 19592 19593 if (keysA.length !== keys(b).length) { 19594 return false; 19595 } 19596 19597 var extendedStackA = stackA.concat([a]); 19598 var extendedStackB = stackB.concat([b]); 19599 idx = keysA.length - 1; 19600 19601 while (idx >= 0) { 19602 var key = keysA[idx]; 19603 19604 if (!(_has(key, b) && _equals(b[key], a[key], extendedStackA, extendedStackB))) { 19605 return false; 19606 } 19607 19608 idx -= 1; 19609 } 19610 19611 return true; 19612} 19613 19614module.exports = _equals; 19615 19616/***/ }), 19617
vendor: 510 bytes, lines 19618-19643
19618/***/ "./node_modules/ramda/src/internal/_filter.js": 19619/*!****************************************************!*\ 19620 !*** ./node_modules/ramda/src/internal/_filter.js ***! 19621 \****************************************************/ 19622/***/ ((module) => { 19623 19624function _filter(fn, list) { 19625 var idx = 0; 19626 var len = list.length; 19627 var result = []; 19628 19629 while (idx < len) { 19630 if (fn(list[idx])) { 19631 result[result.length] = list[idx]; 19632 } 19633 19634 idx += 1; 19635 } 19636 19637 return result; 19638} 19639 19640module.exports = _filter; 19641 19642/***/ }), 19643
vendor: 1,616 bytes, lines 19644-19695
19644/***/ "./node_modules/ramda/src/internal/_flatCat.js": 19645/*!*****************************************************!*\ 19646 !*** ./node_modules/ramda/src/internal/_flatCat.js ***! 19647 \*****************************************************/ 19648/***/ ((module, __unused_webpack_exports, __webpack_require__) => { 19649 19650var _forceReduced = 19651/*#__PURE__*/ 19652__webpack_require__(/*! ./_forceReduced.js */ "./node_modules/ramda/src/internal/_forceReduced.js"); 19653 19654var _isArrayLike = 19655/*#__PURE__*/ 19656__webpack_require__(/*! ./_isArrayLike.js */ "./node_modules/ramda/src/internal/_isArrayLike.js"); 19657 19658var _reduce = 19659/*#__PURE__*/ 19660__webpack_require__(/*! ./_reduce.js */ "./node_modules/ramda/src/internal/_reduce.js"); 19661 19662var _xfBase = 19663/*#__PURE__*/ 19664__webpack_require__(/*! ./_xfBase.js */ "./node_modules/ramda/src/internal/_xfBase.js"); 19665 19666var preservingReduced = function (xf) { 19667 return { 19668 '@@transducer/init': _xfBase.init, 19669 '@@transducer/result': function (result) { 19670 return xf['@@transducer/result'](result); 19671 }, 19672 '@@transducer/step': function (result, input) { 19673 var ret = xf['@@transducer/step'](result, input); 19674 return ret['@@transducer/reduced'] ? _forceReduced(ret) : ret; 19675 } 19676 }; 19677}; 19678 19679var _flatCat = function _xcat(xf) { 19680 var rxf = preservingReduced(xf); 19681 return { 19682 '@@transducer/init': _xfBase.init, 19683 '@@transducer/result': function (result) { 19684 return rxf['@@transducer/result'](result); 19685 }, 19686 '@@transducer/step': function (result, input) { 19687 return !_isArrayLike(input) ? _reduce(rxf, result, [input]) : _reduce(rxf, result, input); 19688 } 19689 }; 19690}; 19691 19692module.exports = _flatCat; 19693 19694/***/ }), 19695
vendor: 426 bytes, lines 19696-19712
19696/***/ "./node_modules/ramda/src/internal/_forceReduced.js": 19697/*!**********************************************************!*\ 19698 !*** ./node_modules/ramda/src/internal/_forceReduced.js ***! 19699 \**********************************************************/ 19700/***/ ((module) => { 19701 19702function _forceReduced(x) { 19703 return { 19704 '@@transducer/value': x, 19705 '@@transducer/reduced': true 19706 }; 19707} 19708 19709module.exports = _forceReduced; 19710 19711/***/ }), 19712
vendor: 511 bytes, lines 19713-19728
19713/***/ "./node_modules/ramda/src/internal/_functionName.js": 19714/*!**********************************************************!*\ 19715 !*** ./node_modules/ramda/src/internal/_functionName.js ***! 19716 \**********************************************************/ 19717/***/ ((module) => { 19718 19719function _functionName(f) { 19720 // String(x => x) evaluates to "x => x", so the pattern may not match. 19721 var match = String(f).match(/^function (\w*)/); 19722 return match == null ? '' : match[1]; 19723} 19724 19725module.exports = _functionName; 19726 19727/***/ }), 19728
vendor: 360 bytes, lines 19729-19742
19729/***/ "./node_modules/ramda/src/internal/_has.js": 19730/*!*************************************************!*\ 19731 !*** ./node_modules/ramda/src/internal/_has.js ***! 19732 \*************************************************/ 19733/***/ ((module) => { 19734 19735function _has(prop, obj) { 19736 return Object.prototype.hasOwnProperty.call(obj, prop); 19737} 19738 19739module.exports = _has; 19740 19741/***/ }), 19742
vendor: 336 bytes, lines 19743-19756
19743/***/ "./node_modules/ramda/src/internal/_identity.js": 19744/*!******************************************************!*\ 19745 !*** ./node_modules/ramda/src/internal/_identity.js ***! 19746 \******************************************************/ 19747/***/ ((module) => { 19748 19749function _identity(x) { 19750 return x; 19751} 19752 19753module.exports = _identity; 19754 19755/***/ }), 19756
vendor: 534 bytes, lines 19757-19774
19757/***/ "./node_modules/ramda/src/internal/_includes.js": 19758/*!******************************************************!*\ 19759 !*** ./node_modules/ramda/src/internal/_includes.js ***! 19760 \******************************************************/ 19761/***/ ((module, __unused_webpack_exports, __webpack_require__) => { 19762 19763var _indexOf = 19764/*#__PURE__*/ 19765__webpack_require__(/*! ./_indexOf.js */ "./node_modules/ramda/src/internal/_indexOf.js"); 19766 19767function _includes(a, list) { 19768 return _indexOf(list, a, 0) >= 0; 19769} 19770 19771module.exports = _includes; 19772 19773/***/ }), 19774
vendor: 514 bytes, lines 19775-19799
19775/***/ "./node_modules/ramda/src/internal/_includesWith.js": 19776/*!**********************************************************!*\ 19777 !*** ./node_modules/ramda/src/internal/_includesWith.js ***! 19778 \**********************************************************/ 19779/***/ ((module) => { 19780 19781function _includesWith(pred, x, list) { 19782 var idx = 0; 19783 var len = list.length; 19784 19785 while (idx < len) { 19786 if (pred(x, list[idx])) { 19787 return true; 19788 } 19789 19790 idx += 1; 19791 } 19792 19793 return false; 19794} 19795 19796module.exports = _includesWith; 19797 19798/***/ }), 19799
vendor: 1,819 bytes, lines 19800-19880
19800/***/ "./node_modules/ramda/src/internal/_indexOf.js": 19801/*!*****************************************************!*\ 19802 !*** ./node_modules/ramda/src/internal/_indexOf.js ***! 19803 \*****************************************************/ 19804/***/ ((module, __unused_webpack_exports, __webpack_require__) => { 19805 19806var equals = 19807/*#__PURE__*/ 19808__webpack_require__(/*! ../equals.js */ "./node_modules/ramda/src/equals.js"); 19809 19810function _indexOf(list, a, idx) { 19811 var inf, item; // Array.prototype.indexOf doesn't exist below IE9 19812 19813 if (typeof list.indexOf === 'function') { 19814 switch (typeof a) { 19815 case 'number': 19816 if (a === 0) { 19817 // manually crawl the list to distinguish between +0 and -0 19818 inf = 1 / a; 19819 19820 while (idx < list.length) { 19821 item = list[idx]; 19822 19823 if (item === 0 && 1 / item === inf) { 19824 return idx; 19825 } 19826 19827 idx += 1; 19828 } 19829 19830 return -1; 19831 } else if (a !== a) { 19832 // NaN 19833 while (idx < list.length) { 19834 item = list[idx]; 19835 19836 if (typeof item === 'number' && item !== item) { 19837 return idx; 19838 } 19839 19840 idx += 1; 19841 } 19842 19843 return -1; 19844 } // non-zero numbers can utilise Set 19845 19846 19847 return list.indexOf(a, idx); 19848 // all these types can utilise Set 19849 19850 case 'string': 19851 case 'boolean': 19852 case 'function': 19853 case 'undefined': 19854 return list.indexOf(a, idx); 19855 19856 case 'object': 19857 if (a === null) { 19858 // null can utilise Set 19859 return list.indexOf(a, idx); 19860 } 19861 19862 } 19863 } // anything else not covered above, defer to R.equals 19864 19865 19866 while (idx < list.length) { 19867 if (equals(list[idx], a)) { 19868 return idx; 19869 } 19870 19871 idx += 1; 19872 } 19873 19874 return -1; 19875} 19876 19877module.exports = _indexOf; 19878 19879/***/ }), 19880
vendor: 774 bytes, lines 19881-19906
19881/***/ "./node_modules/ramda/src/internal/_isArguments.js": 19882/*!*********************************************************!*\ 19883 !*** ./node_modules/ramda/src/internal/_isArguments.js ***! 19884 \*********************************************************/ 19885/***/ ((module, __unused_webpack_exports, __webpack_require__) => { 19886 19887var _has = 19888/*#__PURE__*/ 19889__webpack_require__(/*! ./_has.js */ "./node_modules/ramda/src/internal/_has.js"); 19890 19891var toString = Object.prototype.toString; 19892 19893var _isArguments = 19894/*#__PURE__*/ 19895function () { 19896 return toString.call(arguments) === '[object Arguments]' ? function _isArguments(x) { 19897 return toString.call(x) === '[object Arguments]'; 19898 } : function _isArguments(x) { 19899 return _has('callee', x); 19900 }; 19901}(); 19902 19903module.exports = _isArguments; 19904 19905/***/ }), 19906
vendor: 720 bytes, lines 19907-19930
19907/***/ "./node_modules/ramda/src/internal/_isArray.js": 19908/*!*****************************************************!*\ 19909 !*** ./node_modules/ramda/src/internal/_isArray.js ***! 19910 \*****************************************************/ 19911/***/ ((module) => { 19912 19913/** 19914 * Tests whether or not an object is an array. 19915 * 19916 * @private 19917 * @param {*} val The object to test. 19918 * @return {Boolean} `true` if `val` is an array, `false` otherwise. 19919 * @example 19920 * 19921 * _isArray([]); //=> true 19922 * _isArray(null); //=> false 19923 * _isArray({}); //=> false 19924 */ 19925module.exports = Array.isArray || function _isArray(val) { 19926 return val != null && val.length >= 0 && Object.prototype.toString.call(val) === '[object Array]'; 19927}; 19928 19929/***/ }), 19930
vendor: 1,715 bytes, lines 19931-20001
19931/***/ "./node_modules/ramda/src/internal/_isArrayLike.js": 19932/*!*********************************************************!*\ 19933 !*** ./node_modules/ramda/src/internal/_isArrayLike.js ***! 19934 \*********************************************************/ 19935/***/ ((module, __unused_webpack_exports, __webpack_require__) => { 19936 19937var _curry1 = 19938/*#__PURE__*/ 19939__webpack_require__(/*! ./_curry1.js */ "./node_modules/ramda/src/internal/_curry1.js"); 19940 19941var _isArray = 19942/*#__PURE__*/ 19943__webpack_require__(/*! ./_isArray.js */ "./node_modules/ramda/src/internal/_isArray.js"); 19944 19945var _isString = 19946/*#__PURE__*/ 19947__webpack_require__(/*! ./_isString.js */ "./node_modules/ramda/src/internal/_isString.js"); 19948/** 19949 * Tests whether or not an object is similar to an array. 19950 * 19951 * @private 19952 * @category Type 19953 * @category List 19954 * @sig * -> Boolean 19955 * @param {*} x The object to test. 19956 * @return {Boolean} `true` if `x` has a numeric length property and extreme indices defined; `false` otherwise. 19957 * @example 19958 * 19959 * _isArrayLike([]); //=> true 19960 * _isArrayLike(true); //=> false 19961 * _isArrayLike({}); //=> false 19962 * _isArrayLike({length: 10}); //=> false 19963 * _isArrayLike({0: 'zero', 9: 'nine', length: 10}); //=> true 19964 * _isArrayLike({nodeType: 1, length: 1}) // => false 19965 */ 19966 19967 19968var _isArrayLike = 19969/*#__PURE__*/ 19970_curry1(function isArrayLike(x) { 19971 if (_isArray(x)) { 19972 return true; 19973 } 19974 19975 if (!x) { 19976 return false; 19977 } 19978 19979 if (typeof x !== 'object') { 19980 return false; 19981 } 19982 19983 if (_isString(x)) { 19984 return false; 19985 } 19986 19987 if (x.length === 0) { 19988 return true; 19989 } 19990 19991 if (x.length > 0) { 19992 return x.hasOwnProperty(0) && x.hasOwnProperty(x.length - 1); 19993 } 19994 19995 return false; 19996}); 19997 19998module.exports = _isArrayLike; 19999 20000/***/ }), 20001
vendor: 547 bytes, lines 20002-20016
20002/***/ "./node_modules/ramda/src/internal/_isFunction.js": 20003/*!********************************************************!*\ 20004 !*** ./node_modules/ramda/src/internal/_isFunction.js ***! 20005 \********************************************************/ 20006/***/ ((module) => { 20007 20008function _isFunction(x) { 20009 var type = Object.prototype.toString.call(x); 20010 return type === '[object Function]' || type === '[object AsyncFunction]' || type === '[object GeneratorFunction]' || type === '[object AsyncGeneratorFunction]'; 20011} 20012 20013module.exports = _isFunction; 20014 20015/***/ }), 20016
vendor: 490 bytes, lines 20017-20036
20017/***/ "./node_modules/ramda/src/internal/_isInteger.js": 20018/*!*******************************************************!*\ 20019 !*** ./node_modules/ramda/src/internal/_isInteger.js ***! 20020 \*******************************************************/ 20021/***/ ((module) => { 20022 20023/** 20024 * Determine if the passed argument is an integer. 20025 * 20026 * @private 20027 * @param {*} n 20028 * @category Type 20029 * @return {Boolean} 20030 */ 20031module.exports = Number.isInteger || function _isInteger(n) { 20032 return n << 0 === n; 20033}; 20034 20035/***/ }), 20036
vendor: 390 bytes, lines 20037-20050
20037/***/ "./node_modules/ramda/src/internal/_isNumber.js": 20038/*!******************************************************!*\ 20039 !*** ./node_modules/ramda/src/internal/_isNumber.js ***! 20040 \******************************************************/ 20041/***/ ((module) => { 20042 20043function _isNumber(x) { 20044 return Object.prototype.toString.call(x) === '[object Number]'; 20045} 20046 20047module.exports = _isNumber; 20048 20049/***/ }), 20050
vendor: 390 bytes, lines 20051-20064
20051/***/ "./node_modules/ramda/src/internal/_isObject.js": 20052/*!******************************************************!*\ 20053 !*** ./node_modules/ramda/src/internal/_isObject.js ***! 20054 \******************************************************/ 20055/***/ ((module) => { 20056 20057function _isObject(x) { 20058 return Object.prototype.toString.call(x) === '[object Object]'; 20059} 20060 20061module.exports = _isObject; 20062 20063/***/ }), 20064
vendor: 441 bytes, lines 20065-20078
20065/***/ "./node_modules/ramda/src/internal/_isPlaceholder.js": 20066/*!***********************************************************!*\ 20067 !*** ./node_modules/ramda/src/internal/_isPlaceholder.js ***! 20068 \***********************************************************/ 20069/***/ ((module) => { 20070 20071function _isPlaceholder(a) { 20072 return a != null && typeof a === 'object' && a['@@functional/placeholder'] === true; 20073} 20074 20075module.exports = _isPlaceholder; 20076 20077/***/ }), 20078
vendor: 390 bytes, lines 20079-20092
20079/***/ "./node_modules/ramda/src/internal/_isRegExp.js": 20080/*!******************************************************!*\ 20081 !*** ./node_modules/ramda/src/internal/_isRegExp.js ***! 20082 \******************************************************/ 20083/***/ ((module) => { 20084 20085function _isRegExp(x) { 20086 return Object.prototype.toString.call(x) === '[object RegExp]'; 20087} 20088 20089module.exports = _isRegExp; 20090 20091/***/ }), 20092
vendor: 390 bytes, lines 20093-20106
20093/***/ "./node_modules/ramda/src/internal/_isString.js": 20094/*!******************************************************!*\ 20095 !*** ./node_modules/ramda/src/internal/_isString.js ***! 20096 \******************************************************/ 20097/***/ ((module) => { 20098 20099function _isString(x) { 20100 return Object.prototype.toString.call(x) === '[object String]'; 20101} 20102 20103module.exports = _isString; 20104 20105/***/ }), 20106
vendor: 428 bytes, lines 20107-20120
20107/***/ "./node_modules/ramda/src/internal/_isTransformer.js": 20108/*!***********************************************************!*\ 20109 !*** ./node_modules/ramda/src/internal/_isTransformer.js ***! 20110 \***********************************************************/ 20111/***/ ((module) => { 20112 20113function _isTransformer(obj) { 20114 return obj != null && typeof obj['@@transducer/step'] === 'function'; 20115} 20116 20117module.exports = _isTransformer; 20118 20119/***/ }), 20120
vendor: 1,226 bytes, lines 20121-20149
20121/***/ "./node_modules/ramda/src/internal/_isTypedArray.js": 20122/*!**********************************************************!*\ 20123 !*** ./node_modules/ramda/src/internal/_isTypedArray.js ***! 20124 \**********************************************************/ 20125/***/ ((module) => { 20126 20127/** 20128 * Tests whether or not an object is a typed array. 20129 * 20130 * @private 20131 * @param {*} val The object to test. 20132 * @return {Boolean} `true` if `val` is a typed array, `false` otherwise. 20133 * @example 20134 * 20135 * _isTypedArray(new Uint8Array([])); //=> true 20136 * _isTypedArray(new Float32Array([])); //=> true 20137 * _isTypedArray([]); //=> false 20138 * _isTypedArray(null); //=> false 20139 * _isTypedArray({}); //=> false 20140 */ 20141function _isTypedArray(val) { 20142 var type = Object.prototype.toString.call(val); 20143 return type === '[object Uint8ClampedArray]' || type === '[object Int8Array]' || type === '[object Uint8Array]' || type === '[object Int16Array]' || type === '[object Uint16Array]' || type === '[object Int32Array]' || type === '[object Uint32Array]' || type === '[object Float32Array]' || type === '[object Float64Array]' || type === '[object BigInt64Array]' || type === '[object BigUint64Array]'; 20144} 20145 20146module.exports = _isTypedArray; 20147 20148/***/ }), 20149
vendor: 1,158 bytes, lines 20150-20198
20150/***/ "./node_modules/ramda/src/internal/_makeFlat.js": 20151/*!******************************************************!*\ 20152 !*** ./node_modules/ramda/src/internal/_makeFlat.js ***! 20153 \******************************************************/ 20154/***/ ((module, __unused_webpack_exports, __webpack_require__) => { 20155 20156var _isArrayLike = 20157/*#__PURE__*/ 20158__webpack_require__(/*! ./_isArrayLike.js */ "./node_modules/ramda/src/internal/_isArrayLike.js"); 20159/** 20160 * `_makeFlat` is a helper function that returns a one-level or fully recursive 20161 * function based on the flag passed in. 20162 * 20163 * @private 20164 */ 20165 20166 20167function _makeFlat(recursive) { 20168 return function flatt(list) { 20169 var value, jlen, j; 20170 var result = []; 20171 var idx = 0; 20172 var ilen = list.length; 20173 20174 while (idx < ilen) { 20175 if (_isArrayLike(list[idx])) { 20176 value = recursive ? flatt(list[idx]) : list[idx]; 20177 j = 0; 20178 jlen = value.length; 20179 20180 while (j < jlen) { 20181 result[result.length] = value[j]; 20182 j += 1; 20183 } 20184 } else { 20185 result[result.length] = list[idx]; 20186 } 20187 20188 idx += 1; 20189 } 20190 20191 return result; 20192 }; 20193} 20194 20195module.exports = _makeFlat; 20196 20197/***/ }), 20198
vendor: 469 bytes, lines 20199-20221
20199/***/ "./node_modules/ramda/src/internal/_map.js": 20200/*!*************************************************!*\ 20201 !*** ./node_modules/ramda/src/internal/_map.js ***! 20202 \*************************************************/ 20203/***/ ((module) => { 20204 20205function _map(fn, functor) { 20206 var idx = 0; 20207 var len = functor.length; 20208 var result = Array(len); 20209 20210 while (idx < len) { 20211 result[idx] = fn(functor[idx]); 20212 idx += 1; 20213 } 20214 20215 return result; 20216} 20217 20218module.exports = _map; 20219 20220/***/ }), 20221
vendor: 1,415 bytes, lines 20222-20269
20222/***/ "./node_modules/ramda/src/internal/_modify.js": 20223/*!****************************************************!*\ 20224 !*** ./node_modules/ramda/src/internal/_modify.js ***! 20225 \****************************************************/ 20226/***/ ((module, __unused_webpack_exports, __webpack_require__) => { 20227 20228var _isArray = 20229/*#__PURE__*/ 20230__webpack_require__(/*! ./_isArray.js */ "./node_modules/ramda/src/internal/_isArray.js"); 20231 20232var _isInteger = 20233/*#__PURE__*/ 20234__webpack_require__(/*! ./_isInteger.js */ "./node_modules/ramda/src/internal/_isInteger.js"); 20235/** 20236 * Makes a shallow clone of an object, applying the given fn to the specified 20237 * property with the given value. Note that this copies and flattens prototype 20238 * properties onto the new object as well. All non-primitive properties are 20239 * copied by reference. 20240 * 20241 * @private 20242 * @param {String|Number} prop The property name to set 20243 * @param {Function} fn The function to apply to the property 20244 * @param {Object|Array} obj The object to clone 20245 * @return {Object|Array} A new object equivalent to the original except for the changed property. 20246 */ 20247 20248 20249function _modify(prop, fn, obj) { 20250 if (_isInteger(prop) && _isArray(obj)) { 20251 var arr = [].concat(obj); 20252 arr[prop] = fn(arr[prop]); 20253 return arr; 20254 } 20255 20256 var result = {}; 20257 20258 for (var p in obj) { 20259 result[p] = obj[p]; 20260 } 20261 20262 result[prop] = fn(result[prop]); 20263 return result; 20264} 20265 20266module.exports = _modify; 20267 20268/***/ }), 20269
vendor: 1,112 bytes, lines 20270-20310
20270/***/ "./node_modules/ramda/src/internal/_objectAssign.js": 20271/*!**********************************************************!*\ 20272 !*** ./node_modules/ramda/src/internal/_objectAssign.js ***! 20273 \**********************************************************/ 20274/***/ ((module, __unused_webpack_exports, __webpack_require__) => { 20275 20276var _has = 20277/*#__PURE__*/ 20278__webpack_require__(/*! ./_has.js */ "./node_modules/ramda/src/internal/_has.js"); // Based on https://developer.mozilla.org/en/docs/Web/JavaScript/Reference/Global_Objects/Object/assign 20279 20280 20281function _objectAssign(target) { 20282 if (target == null) { 20283 throw new TypeError('Cannot convert undefined or null to object'); 20284 } 20285 20286 var output = Object(target); 20287 var idx = 1; 20288 var length = arguments.length; 20289 20290 while (idx < length) { 20291 var source = arguments[idx]; 20292 20293 if (source != null) { 20294 for (var nextKey in source) { 20295 if (_has(nextKey, source)) { 20296 output[nextKey] = source[nextKey]; 20297 } 20298 } 20299 } 20300 20301 idx += 1; 20302 } 20303 20304 return output; 20305} 20306 20307module.exports = typeof Object.assign === 'function' ? Object.assign : _objectAssign; 20308 20309/***/ }), 20310
vendor: 685 bytes, lines 20311-20333
20311/***/ "./node_modules/ramda/src/internal/_objectIs.js": 20312/*!******************************************************!*\ 20313 !*** ./node_modules/ramda/src/internal/_objectIs.js ***! 20314 \******************************************************/ 20315/***/ ((module) => { 20316 20317// Based on https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Object/is 20318function _objectIs(a, b) { 20319 // SameValue algorithm 20320 if (a === b) { 20321 // Steps 1-5, 7-10 20322 // Steps 6.b-6.e: +0 != -0 20323 return a !== 0 || 1 / a === 1 / b; 20324 } else { 20325 // Step 6.a: NaN == NaN 20326 return a !== a && b !== b; 20327 } 20328} 20329 20330module.exports = typeof Object.is === 'function' ? Object.is : _objectIs; 20331 20332/***/ }), 20333
vendor: 302 bytes, lines 20334-20347
20334/***/ "./node_modules/ramda/src/internal/_of.js": 20335/*!************************************************!*\ 20336 !*** ./node_modules/ramda/src/internal/_of.js ***! 20337 \************************************************/ 20338/***/ ((module) => { 20339 20340function _of(x) { 20341 return [x]; 20342} 20343 20344module.exports = _of; 20345 20346/***/ }), 20347
vendor: 382 bytes, lines 20348-20363
20348/***/ "./node_modules/ramda/src/internal/_pipe.js": 20349/*!**************************************************!*\ 20350 !*** ./node_modules/ramda/src/internal/_pipe.js ***! 20351 \**************************************************/ 20352/***/ ((module) => { 20353 20354function _pipe(f, g) { 20355 return function () { 20356 return g.call(this, f.apply(this, arguments)); 20357 }; 20358} 20359 20360module.exports = _pipe; 20361 20362/***/ }), 20363
vendor: 388 bytes, lines 20364-20379
20364/***/ "./node_modules/ramda/src/internal/_promap.js": 20365/*!****************************************************!*\ 20366 !*** ./node_modules/ramda/src/internal/_promap.js ***! 20367 \****************************************************/ 20368/***/ ((module) => { 20369 20370function _promap(f, g, profunctor) { 20371 return function (x) { 20372 return g(profunctor(f(x))); 20373 }; 20374} 20375 20376module.exports = _promap; 20377 20378/***/ }), 20379
vendor: 610 bytes, lines 20380-20395
20380/***/ "./node_modules/ramda/src/internal/_quote.js": 20381/*!***************************************************!*\ 20382 !*** ./node_modules/ramda/src/internal/_quote.js ***! 20383 \***************************************************/ 20384/***/ ((module) => { 20385 20386function _quote(s) { 20387 var escaped = s.replace(/\\/g, '\\\\').replace(/[\b]/g, '\\b') // \b matches word boundary; [\b] matches backspace 20388 .replace(/\f/g, '\\f').replace(/\n/g, '\\n').replace(/\r/g, '\\r').replace(/\t/g, '\\t').replace(/\v/g, '\\v').replace(/\0/g, '\\0'); 20389 return '"' + escaped.replace(/"/g, '\\"') + '"'; 20390} 20391 20392module.exports = _quote; 20393 20394/***/ }), 20395
vendor: 2,207 bytes, lines 20396-20486
20396/***/ "./node_modules/ramda/src/internal/_reduce.js": 20397/*!****************************************************!*\ 20398 !*** ./node_modules/ramda/src/internal/_reduce.js ***! 20399 \****************************************************/ 20400/***/ ((module, __unused_webpack_exports, __webpack_require__) => { 20401 20402var _isArrayLike = 20403/*#__PURE__*/ 20404__webpack_require__(/*! ./_isArrayLike.js */ "./node_modules/ramda/src/internal/_isArrayLike.js"); 20405 20406var _xwrap = 20407/*#__PURE__*/ 20408__webpack_require__(/*! ./_xwrap.js */ "./node_modules/ramda/src/internal/_xwrap.js"); 20409 20410var bind = 20411/*#__PURE__*/ 20412__webpack_require__(/*! ../bind.js */ "./node_modules/ramda/src/bind.js"); 20413 20414function _arrayReduce(xf, acc, list) { 20415 var idx = 0; 20416 var len = list.length; 20417 20418 while (idx < len) { 20419 acc = xf['@@transducer/step'](acc, list[idx]); 20420 20421 if (acc && acc['@@transducer/reduced']) { 20422 acc = acc['@@transducer/value']; 20423 break; 20424 } 20425 20426 idx += 1; 20427 } 20428 20429 return xf['@@transducer/result'](acc); 20430} 20431 20432function _iterableReduce(xf, acc, iter) { 20433 var step = iter.next(); 20434 20435 while (!step.done) { 20436 acc = xf['@@transducer/step'](acc, step.value); 20437 20438 if (acc && acc['@@transducer/reduced']) { 20439 acc = acc['@@transducer/value']; 20440 break; 20441 } 20442 20443 step = iter.next(); 20444 } 20445 20446 return xf['@@transducer/result'](acc); 20447} 20448 20449function _methodReduce(xf, acc, obj, methodName) { 20450 return xf['@@transducer/result'](obj[methodName](bind(xf['@@transducer/step'], xf), acc)); 20451} 20452 20453var symIterator = typeof Symbol !== 'undefined' ? Symbol.iterator : '@@iterator'; 20454 20455function _reduce(fn, acc, list) { 20456 if (typeof fn === 'function') { 20457 fn = _xwrap(fn); 20458 } 20459 20460 if (_isArrayLike(list)) { 20461 return _arrayReduce(fn, acc, list); 20462 } 20463 20464 if (typeof list['fantasy-land/reduce'] === 'function') { 20465 return _methodReduce(fn, acc, list, 'fantasy-land/reduce'); 20466 } 20467 20468 if (list[symIterator] != null) { 20469 return _iterableReduce(fn, acc, list[symIterator]()); 20470 } 20471 20472 if (typeof list.next === 'function') { 20473 return _iterableReduce(fn, acc, list); 20474 } 20475 20476 if (typeof list.reduce === 'function') { 20477 return _methodReduce(fn, acc, list, 'reduce'); 20478 } 20479 20480 throw new TypeError('reduce: list must be array or iterable'); 20481} 20482 20483module.exports = _reduce; 20484 20485/***/ }), 20486
vendor: 433 bytes, lines 20487-20503
20487/***/ "./node_modules/ramda/src/internal/_reduced.js": 20488/*!*****************************************************!*\ 20489 !*** ./node_modules/ramda/src/internal/_reduced.js ***! 20490 \*****************************************************/ 20491/***/ ((module) => { 20492 20493function _reduced(x) { 20494 return x && x['@@transducer/reduced'] ? x : { 20495 '@@transducer/value': x, 20496 '@@transducer/reduced': true 20497 }; 20498} 20499 20500module.exports = _reduced; 20501 20502/***/ }), 20503
vendor: 1,863 bytes, lines 20504-20576
20504/***/ "./node_modules/ramda/src/internal/_stepCat.js": 20505/*!*****************************************************!*\ 20506 !*** ./node_modules/ramda/src/internal/_stepCat.js ***! 20507 \*****************************************************/ 20508/***/ ((module, __unused_webpack_exports, __webpack_require__) => { 20509 20510var _objectAssign = 20511/*#__PURE__*/ 20512__webpack_require__(/*! ./_objectAssign.js */ "./node_modules/ramda/src/internal/_objectAssign.js"); 20513 20514var _identity = 20515/*#__PURE__*/ 20516__webpack_require__(/*! ./_identity.js */ "./node_modules/ramda/src/internal/_identity.js"); 20517 20518var _isArrayLike = 20519/*#__PURE__*/ 20520__webpack_require__(/*! ./_isArrayLike.js */ "./node_modules/ramda/src/internal/_isArrayLike.js"); 20521 20522var _isTransformer = 20523/*#__PURE__*/ 20524__webpack_require__(/*! ./_isTransformer.js */ "./node_modules/ramda/src/internal/_isTransformer.js"); 20525 20526var objOf = 20527/*#__PURE__*/ 20528__webpack_require__(/*! ../objOf.js */ "./node_modules/ramda/src/objOf.js"); 20529 20530var _stepCatArray = { 20531 '@@transducer/init': Array, 20532 '@@transducer/step': function (xs, x) { 20533 xs.push(x); 20534 return xs; 20535 }, 20536 '@@transducer/result': _identity 20537}; 20538var _stepCatString = { 20539 '@@transducer/init': String, 20540 '@@transducer/step': function (a, b) { 20541 return a + b; 20542 }, 20543 '@@transducer/result': _identity 20544}; 20545var _stepCatObject = { 20546 '@@transducer/init': Object, 20547 '@@transducer/step': function (result, input) { 20548 return _objectAssign(result, _isArrayLike(input) ? objOf(input[0], input[1]) : input); 20549 }, 20550 '@@transducer/result': _identity 20551}; 20552 20553function _stepCat(obj) { 20554 if (_isTransformer(obj)) { 20555 return obj; 20556 } 20557 20558 if (_isArrayLike(obj)) { 20559 return _stepCatArray; 20560 } 20561 20562 if (typeof obj === 'string') { 20563 return _stepCatString; 20564 } 20565 20566 if (typeof obj === 'object') { 20567 return _stepCatObject; 20568 } 20569 20570 throw new Error('Cannot create transformer for ' + obj); 20571} 20572 20573module.exports = _stepCat; 20574 20575/***/ }), 20576
vendor: 912 bytes, lines 20577-20599
20577/***/ "./node_modules/ramda/src/internal/_toISOString.js": 20578/*!*********************************************************!*\ 20579 !*** ./node_modules/ramda/src/internal/_toISOString.js ***! 20580 \*********************************************************/ 20581/***/ ((module) => { 20582 20583/** 20584 * Polyfill from <https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Date/toISOString>. 20585 */ 20586var pad = function pad(n) { 20587 return (n < 10 ? '0' : '') + n; 20588}; 20589 20590var _toISOString = typeof Date.prototype.toISOString === 'function' ? function _toISOString(d) { 20591 return d.toISOString(); 20592} : function _toISOString(d) { 20593 return d.getUTCFullYear() + '-' + pad(d.getUTCMonth() + 1) + '-' + pad(d.getUTCDate()) + 'T' + pad(d.getUTCHours()) + ':' + pad(d.getUTCMinutes()) + ':' + pad(d.getUTCSeconds()) + '.' + (d.getUTCMilliseconds() / 1000).toFixed(3).slice(2, 5) + 'Z'; 20594}; 20595 20596module.exports = _toISOString; 20597 20598/***/ }), 20599
vendor: 2,604 bytes, lines 20600-20686
20600/***/ "./node_modules/ramda/src/internal/_toString.js": 20601/*!******************************************************!*\ 20602 !*** ./node_modules/ramda/src/internal/_toString.js ***! 20603 \******************************************************/ 20604/***/ ((module, __unused_webpack_exports, __webpack_require__) => { 20605 20606var _includes = 20607/*#__PURE__*/ 20608__webpack_require__(/*! ./_includes.js */ "./node_modules/ramda/src/internal/_includes.js"); 20609 20610var _map = 20611/*#__PURE__*/ 20612__webpack_require__(/*! ./_map.js */ "./node_modules/ramda/src/internal/_map.js"); 20613 20614var _quote = 20615/*#__PURE__*/ 20616__webpack_require__(/*! ./_quote.js */ "./node_modules/ramda/src/internal/_quote.js"); 20617 20618var _toISOString = 20619/*#__PURE__*/ 20620__webpack_require__(/*! ./_toISOString.js */ "./node_modules/ramda/src/internal/_toISOString.js"); 20621 20622var keys = 20623/*#__PURE__*/ 20624__webpack_require__(/*! ../keys.js */ "./node_modules/ramda/src/keys.js"); 20625 20626var reject = 20627/*#__PURE__*/ 20628__webpack_require__(/*! ../reject.js */ "./node_modules/ramda/src/reject.js"); 20629 20630function _toString(x, seen) { 20631 var recur = function recur(y) { 20632 var xs = seen.concat([x]); 20633 return _includes(y, xs) ? '<Circular>' : _toString(y, xs); 20634 }; // mapPairs :: (Object, [String]) -> [String] 20635 20636 20637 var mapPairs = function (obj, keys) { 20638 return _map(function (k) { 20639 return _quote(k) + ': ' + recur(obj[k]); 20640 }, keys.slice().sort()); 20641 }; 20642 20643 switch (Object.prototype.toString.call(x)) { 20644 case '[object Arguments]': 20645 return '(function() { return arguments; }(' + _map(recur, x).join(', ') + '))'; 20646 20647 case '[object Array]': 20648 return '[' + _map(recur, x).concat(mapPairs(x, reject(function (k) { 20649 return /^\d+$/.test(k); 20650 }, keys(x)))).join(', ') + ']'; 20651 20652 case '[object Boolean]': 20653 return typeof x === 'object' ? 'new Boolean(' + recur(x.valueOf()) + ')' : x.toString(); 20654 20655 case '[object Date]': 20656 return 'new Date(' + (isNaN(x.valueOf()) ? recur(NaN) : _quote(_toISOString(x))) + ')'; 20657 20658 case '[object Null]': 20659 return 'null'; 20660 20661 case '[object Number]': 20662 return typeof x === 'object' ? 'new Number(' + recur(x.valueOf()) + ')' : 1 / x === -Infinity ? '-0' : x.toString(10); 20663 20664 case '[object String]': 20665 return typeof x === 'object' ? 'new String(' + recur(x.valueOf()) + ')' : _quote(x); 20666 20667 case '[object Undefined]': 20668 return 'undefined'; 20669 20670 default: 20671 if (typeof x.toString === 'function') { 20672 var repr = x.toString(); 20673 20674 if (repr !== '[object Object]') { 20675 return repr; 20676 } 20677 } 20678 20679 return '{' + mapPairs(x, keys(x)).join(', ') + '}'; 20680 } 20681} 20682 20683module.exports = _toString; 20684 20685/***/ }), 20686
vendor: 1,394 bytes, lines 20687-20745
20687/***/ "./node_modules/ramda/src/internal/_xall.js": 20688/*!**************************************************!*\ 20689 !*** ./node_modules/ramda/src/internal/_xall.js ***! 20690 \**************************************************/ 20691/***/ ((module, __unused_webpack_exports, __webpack_require__) => { 20692 20693var _curry2 = 20694/*#__PURE__*/ 20695__webpack_require__(/*! ./_curry2.js */ "./node_modules/ramda/src/internal/_curry2.js"); 20696 20697var _reduced = 20698/*#__PURE__*/ 20699__webpack_require__(/*! ./_reduced.js */ "./node_modules/ramda/src/internal/_reduced.js"); 20700 20701var _xfBase = 20702/*#__PURE__*/ 20703__webpack_require__(/*! ./_xfBase.js */ "./node_modules/ramda/src/internal/_xfBase.js"); 20704 20705var XAll = 20706/*#__PURE__*/ 20707function () { 20708 function XAll(f, xf) { 20709 this.xf = xf; 20710 this.f = f; 20711 this.all = true; 20712 } 20713 20714 XAll.prototype['@@transducer/init'] = _xfBase.init; 20715 20716 XAll.prototype['@@transducer/result'] = function (result) { 20717 if (this.all) { 20718 result = this.xf['@@transducer/step'](result, true); 20719 } 20720 20721 return this.xf['@@transducer/result'](result); 20722 }; 20723 20724 XAll.prototype['@@transducer/step'] = function (result, input) { 20725 if (!this.f(input)) { 20726 this.all = false; 20727 result = _reduced(this.xf['@@transducer/step'](result, false)); 20728 } 20729 20730 return result; 20731 }; 20732 20733 return XAll; 20734}(); 20735 20736var _xall = 20737/*#__PURE__*/ 20738_curry2(function _xall(f, xf) { 20739 return new XAll(f, xf); 20740}); 20741 20742module.exports = _xall; 20743 20744/***/ }), 20745
vendor: 1,394 bytes, lines 20746-20804
20746/***/ "./node_modules/ramda/src/internal/_xany.js": 20747/*!**************************************************!*\ 20748 !*** ./node_modules/ramda/src/internal/_xany.js ***! 20749 \**************************************************/ 20750/***/ ((module, __unused_webpack_exports, __webpack_require__) => { 20751 20752var _curry2 = 20753/*#__PURE__*/ 20754__webpack_require__(/*! ./_curry2.js */ "./node_modules/ramda/src/internal/_curry2.js"); 20755 20756var _reduced = 20757/*#__PURE__*/ 20758__webpack_require__(/*! ./_reduced.js */ "./node_modules/ramda/src/internal/_reduced.js"); 20759 20760var _xfBase = 20761/*#__PURE__*/ 20762__webpack_require__(/*! ./_xfBase.js */ "./node_modules/ramda/src/internal/_xfBase.js"); 20763 20764var XAny = 20765/*#__PURE__*/ 20766function () { 20767 function XAny(f, xf) { 20768 this.xf = xf; 20769 this.f = f; 20770 this.any = false; 20771 } 20772 20773 XAny.prototype['@@transducer/init'] = _xfBase.init; 20774 20775 XAny.prototype['@@transducer/result'] = function (result) { 20776 if (!this.any) { 20777 result = this.xf['@@transducer/step'](result, false); 20778 } 20779 20780 return this.xf['@@transducer/result'](result); 20781 }; 20782 20783 XAny.prototype['@@transducer/step'] = function (result, input) { 20784 if (this.f(input)) { 20785 this.any = true; 20786 result = _reduced(this.xf['@@transducer/step'](result, true)); 20787 } 20788 20789 return result; 20790 }; 20791 20792 return XAny; 20793}(); 20794 20795var _xany = 20796/*#__PURE__*/ 20797_curry2(function _xany(f, xf) { 20798 return new XAny(f, xf); 20799}); 20800 20801module.exports = _xany; 20802 20803/***/ }), 20804
vendor: 1,760 bytes, lines 20805-20871
20805/***/ "./node_modules/ramda/src/internal/_xaperture.js": 20806/*!*******************************************************!*\ 20807 !*** ./node_modules/ramda/src/internal/_xaperture.js ***! 20808 \*******************************************************/ 20809/***/ ((module, __unused_webpack_exports, __webpack_require__) => { 20810 20811var _concat = 20812/*#__PURE__*/ 20813__webpack_require__(/*! ./_concat.js */ "./node_modules/ramda/src/internal/_concat.js"); 20814 20815var _curry2 = 20816/*#__PURE__*/ 20817__webpack_require__(/*! ./_curry2.js */ "./node_modules/ramda/src/internal/_curry2.js"); 20818 20819var _xfBase = 20820/*#__PURE__*/ 20821__webpack_require__(/*! ./_xfBase.js */ "./node_modules/ramda/src/internal/_xfBase.js"); 20822 20823var XAperture = 20824/*#__PURE__*/ 20825function () { 20826 function XAperture(n, xf) { 20827 this.xf = xf; 20828 this.pos = 0; 20829 this.full = false; 20830 this.acc = new Array(n); 20831 } 20832 20833 XAperture.prototype['@@transducer/init'] = _xfBase.init; 20834 20835 XAperture.prototype['@@transducer/result'] = function (result) { 20836 this.acc = null; 20837 return this.xf['@@transducer/result'](result); 20838 }; 20839 20840 XAperture.prototype['@@transducer/step'] = function (result, input) { 20841 this.store(input); 20842 return this.full ? this.xf['@@transducer/step'](result, this.getCopy()) : result; 20843 }; 20844 20845 XAperture.prototype.store = function (input) { 20846 this.acc[this.pos] = input; 20847 this.pos += 1; 20848 20849 if (this.pos === this.acc.length) { 20850 this.pos = 0; 20851 this.full = true; 20852 } 20853 }; 20854 20855 XAperture.prototype.getCopy = function () { 20856 return _concat(Array.prototype.slice.call(this.acc, this.pos), Array.prototype.slice.call(this.acc, 0, this.pos)); 20857 }; 20858 20859 return XAperture; 20860}(); 20861 20862var _xaperture = 20863/*#__PURE__*/ 20864_curry2(function _xaperture(n, xf) { 20865 return new XAperture(n, xf); 20866}); 20867 20868module.exports = _xaperture; 20869 20870/***/ }), 20871
vendor: 769 bytes, lines 20872-20899
20872/***/ "./node_modules/ramda/src/internal/_xchain.js": 20873/*!****************************************************!*\ 20874 !*** ./node_modules/ramda/src/internal/_xchain.js ***! 20875 \****************************************************/ 20876/***/ ((module, __unused_webpack_exports, __webpack_require__) => { 20877 20878var _curry2 = 20879/*#__PURE__*/ 20880__webpack_require__(/*! ./_curry2.js */ "./node_modules/ramda/src/internal/_curry2.js"); 20881 20882var _flatCat = 20883/*#__PURE__*/ 20884__webpack_require__(/*! ./_flatCat.js */ "./node_modules/ramda/src/internal/_flatCat.js"); 20885 20886var map = 20887/*#__PURE__*/ 20888__webpack_require__(/*! ../map.js */ "./node_modules/ramda/src/map.js"); 20889 20890var _xchain = 20891/*#__PURE__*/ 20892_curry2(function _xchain(f, xf) { 20893 return map(f, _flatCat(xf)); 20894}); 20895 20896module.exports = _xchain; 20897 20898/***/ }), 20899
vendor: 1,098 bytes, lines 20900-20946
20900/***/ "./node_modules/ramda/src/internal/_xdrop.js": 20901/*!***************************************************!*\ 20902 !*** ./node_modules/ramda/src/internal/_xdrop.js ***! 20903 \***************************************************/ 20904/***/ ((module, __unused_webpack_exports, __webpack_require__) => { 20905 20906var _curry2 = 20907/*#__PURE__*/ 20908__webpack_require__(/*! ./_curry2.js */ "./node_modules/ramda/src/internal/_curry2.js"); 20909 20910var _xfBase = 20911/*#__PURE__*/ 20912__webpack_require__(/*! ./_xfBase.js */ "./node_modules/ramda/src/internal/_xfBase.js"); 20913 20914var XDrop = 20915/*#__PURE__*/ 20916function () { 20917 function XDrop(n, xf) { 20918 this.xf = xf; 20919 this.n = n; 20920 } 20921 20922 XDrop.prototype['@@transducer/init'] = _xfBase.init; 20923 XDrop.prototype['@@transducer/result'] = _xfBase.result; 20924 20925 XDrop.prototype['@@transducer/step'] = function (result, input) { 20926 if (this.n > 0) { 20927 this.n -= 1; 20928 return result; 20929 } 20930 20931 return this.xf['@@transducer/step'](result, input); 20932 }; 20933 20934 return XDrop; 20935}(); 20936 20937var _xdrop = 20938/*#__PURE__*/ 20939_curry2(function _xdrop(n, xf) { 20940 return new XDrop(n, xf); 20941}); 20942 20943module.exports = _xdrop; 20944 20945/***/ }), 20946
vendor: 1,505 bytes, lines 20947-21009
20947/***/ "./node_modules/ramda/src/internal/_xdropLast.js": 20948/*!*******************************************************!*\ 20949 !*** ./node_modules/ramda/src/internal/_xdropLast.js ***! 20950 \*******************************************************/ 20951/***/ ((module, __unused_webpack_exports, __webpack_require__) => { 20952 20953var _curry2 = 20954/*#__PURE__*/ 20955__webpack_require__(/*! ./_curry2.js */ "./node_modules/ramda/src/internal/_curry2.js"); 20956 20957var _xfBase = 20958/*#__PURE__*/ 20959__webpack_require__(/*! ./_xfBase.js */ "./node_modules/ramda/src/internal/_xfBase.js"); 20960 20961var XDropLast = 20962/*#__PURE__*/ 20963function () { 20964 function XDropLast(n, xf) { 20965 this.xf = xf; 20966 this.pos = 0; 20967 this.full = false; 20968 this.acc = new Array(n); 20969 } 20970 20971 XDropLast.prototype['@@transducer/init'] = _xfBase.init; 20972 20973 XDropLast.prototype['@@transducer/result'] = function (result) { 20974 this.acc = null; 20975 return this.xf['@@transducer/result'](result); 20976 }; 20977 20978 XDropLast.prototype['@@transducer/step'] = function (result, input) { 20979 if (this.full) { 20980 result = this.xf['@@transducer/step'](result, this.acc[this.pos]); 20981 } 20982 20983 this.store(input); 20984 return result; 20985 }; 20986 20987 XDropLast.prototype.store = function (input) { 20988 this.acc[this.pos] = input; 20989 this.pos += 1; 20990 20991 if (this.pos === this.acc.length) { 20992 this.pos = 0; 20993 this.full = true; 20994 } 20995 }; 20996 20997 return XDropLast; 20998}(); 20999 21000var _xdropLast = 21001/*#__PURE__*/ 21002_curry2(function _xdropLast(n, xf) { 21003 return new XDropLast(n, xf); 21004}); 21005 21006module.exports = _xdropLast; 21007 21008/***/ }), 21009
vendor: 1,757 bytes, lines 21010-21071
21010/***/ "./node_modules/ramda/src/internal/_xdropLastWhile.js": 21011/*!************************************************************!*\ 21012 !*** ./node_modules/ramda/src/internal/_xdropLastWhile.js ***! 21013 \************************************************************/ 21014/***/ ((module, __unused_webpack_exports, __webpack_require__) => { 21015 21016var _curry2 = 21017/*#__PURE__*/ 21018__webpack_require__(/*! ./_curry2.js */ "./node_modules/ramda/src/internal/_curry2.js"); 21019 21020var _reduce = 21021/*#__PURE__*/ 21022__webpack_require__(/*! ./_reduce.js */ "./node_modules/ramda/src/internal/_reduce.js"); 21023 21024var _xfBase = 21025/*#__PURE__*/ 21026__webpack_require__(/*! ./_xfBase.js */ "./node_modules/ramda/src/internal/_xfBase.js"); 21027 21028var XDropLastWhile = 21029/*#__PURE__*/ 21030function () { 21031 function XDropLastWhile(fn, xf) { 21032 this.f = fn; 21033 this.retained = []; 21034 this.xf = xf; 21035 } 21036 21037 XDropLastWhile.prototype['@@transducer/init'] = _xfBase.init; 21038 21039 XDropLastWhile.prototype['@@transducer/result'] = function (result) { 21040 this.retained = null; 21041 return this.xf['@@transducer/result'](result); 21042 }; 21043 21044 XDropLastWhile.prototype['@@transducer/step'] = function (result, input) { 21045 return this.f(input) ? this.retain(result, input) : this.flush(result, input); 21046 }; 21047 21048 XDropLastWhile.prototype.flush = function (result, input) { 21049 result = _reduce(this.xf['@@transducer/step'], result, this.retained); 21050 this.retained = []; 21051 return this.xf['@@transducer/step'](result, input); 21052 }; 21053 21054 XDropLastWhile.prototype.retain = function (result, input) { 21055 this.retained.push(input); 21056 return result; 21057 }; 21058 21059 return XDropLastWhile; 21060}(); 21061 21062var _xdropLastWhile = 21063/*#__PURE__*/ 21064_curry2(function _xdropLastWhile(fn, xf) { 21065 return new XDropLastWhile(fn, xf); 21066}); 21067 21068module.exports = _xdropLastWhile; 21069 21070/***/ }), 21071
vendor: 1,491 bytes, lines 21072-21124
21072/***/ "./node_modules/ramda/src/internal/_xdropRepeatsWith.js": 21073/*!**************************************************************!*\ 21074 !*** ./node_modules/ramda/src/internal/_xdropRepeatsWith.js ***! 21075 \**************************************************************/ 21076/***/ ((module, __unused_webpack_exports, __webpack_require__) => { 21077 21078var _curry2 = 21079/*#__PURE__*/ 21080__webpack_require__(/*! ./_curry2.js */ "./node_modules/ramda/src/internal/_curry2.js"); 21081 21082var _xfBase = 21083/*#__PURE__*/ 21084__webpack_require__(/*! ./_xfBase.js */ "./node_modules/ramda/src/internal/_xfBase.js"); 21085 21086var XDropRepeatsWith = 21087/*#__PURE__*/ 21088function () { 21089 function XDropRepeatsWith(pred, xf) { 21090 this.xf = xf; 21091 this.pred = pred; 21092 this.lastValue = undefined; 21093 this.seenFirstValue = false; 21094 } 21095 21096 XDropRepeatsWith.prototype['@@transducer/init'] = _xfBase.init; 21097 XDropRepeatsWith.prototype['@@transducer/result'] = _xfBase.result; 21098 21099 XDropRepeatsWith.prototype['@@transducer/step'] = function (result, input) { 21100 var sameAsLast = false; 21101 21102 if (!this.seenFirstValue) { 21103 this.seenFirstValue = true; 21104 } else if (this.pred(this.lastValue, input)) { 21105 sameAsLast = true; 21106 } 21107 21108 this.lastValue = input; 21109 return sameAsLast ? result : this.xf['@@transducer/step'](result, input); 21110 }; 21111 21112 return XDropRepeatsWith; 21113}(); 21114 21115var _xdropRepeatsWith = 21116/*#__PURE__*/ 21117_curry2(function _xdropRepeatsWith(pred, xf) { 21118 return new XDropRepeatsWith(pred, xf); 21119}); 21120 21121module.exports = _xdropRepeatsWith; 21122 21123/***/ }), 21124
vendor: 1,204 bytes, lines 21125-21174
21125/***/ "./node_modules/ramda/src/internal/_xdropWhile.js": 21126/*!********************************************************!*\ 21127 !*** ./node_modules/ramda/src/internal/_xdropWhile.js ***! 21128 \********************************************************/ 21129/***/ ((module, __unused_webpack_exports, __webpack_require__) => { 21130 21131var _curry2 = 21132/*#__PURE__*/ 21133__webpack_require__(/*! ./_curry2.js */ "./node_modules/ramda/src/internal/_curry2.js"); 21134 21135var _xfBase = 21136/*#__PURE__*/ 21137__webpack_require__(/*! ./_xfBase.js */ "./node_modules/ramda/src/internal/_xfBase.js"); 21138 21139var XDropWhile = 21140/*#__PURE__*/ 21141function () { 21142 function XDropWhile(f, xf) { 21143 this.xf = xf; 21144 this.f = f; 21145 } 21146 21147 XDropWhile.prototype['@@transducer/init'] = _xfBase.init; 21148 XDropWhile.prototype['@@transducer/result'] = _xfBase.result; 21149 21150 XDropWhile.prototype['@@transducer/step'] = function (result, input) { 21151 if (this.f) { 21152 if (this.f(input)) { 21153 return result; 21154 } 21155 21156 this.f = null; 21157 } 21158 21159 return this.xf['@@transducer/step'](result, input); 21160 }; 21161 21162 return XDropWhile; 21163}(); 21164 21165var _xdropWhile = 21166/*#__PURE__*/ 21167_curry2(function _xdropWhile(f, xf) { 21168 return new XDropWhile(f, xf); 21169}); 21170 21171module.exports = _xdropWhile; 21172 21173/***/ }), 21174
vendor: 438 bytes, lines 21175-21191
21175/***/ "./node_modules/ramda/src/internal/_xfBase.js": 21176/*!****************************************************!*\ 21177 !*** ./node_modules/ramda/src/internal/_xfBase.js ***! 21178 \****************************************************/ 21179/***/ ((module) => { 21180 21181module.exports = { 21182 init: function () { 21183 return this.xf['@@transducer/init'](); 21184 }, 21185 result: function (result) { 21186 return this.xf['@@transducer/result'](result); 21187 } 21188}; 21189 21190/***/ }), 21191
vendor: 1,082 bytes, lines 21192-21233
21192/***/ "./node_modules/ramda/src/internal/_xfilter.js": 21193/*!*****************************************************!*\ 21194 !*** ./node_modules/ramda/src/internal/_xfilter.js ***! 21195 \*****************************************************/ 21196/***/ ((module, __unused_webpack_exports, __webpack_require__) => { 21197 21198var _curry2 = 21199/*#__PURE__*/ 21200__webpack_require__(/*! ./_curry2.js */ "./node_modules/ramda/src/internal/_curry2.js"); 21201 21202var _xfBase = 21203/*#__PURE__*/ 21204__webpack_require__(/*! ./_xfBase.js */ "./node_modules/ramda/src/internal/_xfBase.js"); 21205 21206var XFilter = 21207/*#__PURE__*/ 21208function () { 21209 function XFilter(f, xf) { 21210 this.xf = xf; 21211 this.f = f; 21212 } 21213 21214 XFilter.prototype['@@transducer/init'] = _xfBase.init; 21215 XFilter.prototype['@@transducer/result'] = _xfBase.result; 21216 21217 XFilter.prototype['@@transducer/step'] = function (result, input) { 21218 return this.f(input) ? this.xf['@@transducer/step'](result, input) : result; 21219 }; 21220 21221 return XFilter; 21222}(); 21223 21224var _xfilter = 21225/*#__PURE__*/ 21226_curry2(function _xfilter(f, xf) { 21227 return new XFilter(f, xf); 21228}); 21229 21230module.exports = _xfilter; 21231 21232/***/ }), 21233
vendor: 1,416 bytes, lines 21234-21292
21234/***/ "./node_modules/ramda/src/internal/_xfind.js": 21235/*!***************************************************!*\ 21236 !*** ./node_modules/ramda/src/internal/_xfind.js ***! 21237 \***************************************************/ 21238/***/ ((module, __unused_webpack_exports, __webpack_require__) => { 21239 21240var _curry2 = 21241/*#__PURE__*/ 21242__webpack_require__(/*! ./_curry2.js */ "./node_modules/ramda/src/internal/_curry2.js"); 21243 21244var _reduced = 21245/*#__PURE__*/ 21246__webpack_require__(/*! ./_reduced.js */ "./node_modules/ramda/src/internal/_reduced.js"); 21247 21248var _xfBase = 21249/*#__PURE__*/ 21250__webpack_require__(/*! ./_xfBase.js */ "./node_modules/ramda/src/internal/_xfBase.js"); 21251 21252var XFind = 21253/*#__PURE__*/ 21254function () { 21255 function XFind(f, xf) { 21256 this.xf = xf; 21257 this.f = f; 21258 this.found = false; 21259 } 21260 21261 XFind.prototype['@@transducer/init'] = _xfBase.init; 21262 21263 XFind.prototype['@@transducer/result'] = function (result) { 21264 if (!this.found) { 21265 result = this.xf['@@transducer/step'](result, void 0); 21266 } 21267 21268 return this.xf['@@transducer/result'](result); 21269 }; 21270 21271 XFind.prototype['@@transducer/step'] = function (result, input) { 21272 if (this.f(input)) { 21273 this.found = true; 21274 result = _reduced(this.xf['@@transducer/step'](result, input)); 21275 } 21276 21277 return result; 21278 }; 21279 21280 return XFind; 21281}(); 21282 21283var _xfind = 21284/*#__PURE__*/ 21285_curry2(function _xfind(f, xf) { 21286 return new XFind(f, xf); 21287}); 21288 21289module.exports = _xfind; 21290 21291/***/ }), 21292
vendor: 1,524 bytes, lines 21293-21354
21293/***/ "./node_modules/ramda/src/internal/_xfindIndex.js": 21294/*!********************************************************!*\ 21295 !*** ./node_modules/ramda/src/internal/_xfindIndex.js ***! 21296 \********************************************************/ 21297/***/ ((module, __unused_webpack_exports, __webpack_require__) => { 21298 21299var _curry2 = 21300/*#__PURE__*/ 21301__webpack_require__(/*! ./_curry2.js */ "./node_modules/ramda/src/internal/_curry2.js"); 21302 21303var _reduced = 21304/*#__PURE__*/ 21305__webpack_require__(/*! ./_reduced.js */ "./node_modules/ramda/src/internal/_reduced.js"); 21306 21307var _xfBase = 21308/*#__PURE__*/ 21309__webpack_require__(/*! ./_xfBase.js */ "./node_modules/ramda/src/internal/_xfBase.js"); 21310 21311var XFindIndex = 21312/*#__PURE__*/ 21313function () { 21314 function XFindIndex(f, xf) { 21315 this.xf = xf; 21316 this.f = f; 21317 this.idx = -1; 21318 this.found = false; 21319 } 21320 21321 XFindIndex.prototype['@@transducer/init'] = _xfBase.init; 21322 21323 XFindIndex.prototype['@@transducer/result'] = function (result) { 21324 if (!this.found) { 21325 result = this.xf['@@transducer/step'](result, -1); 21326 } 21327 21328 return this.xf['@@transducer/result'](result); 21329 }; 21330 21331 XFindIndex.prototype['@@transducer/step'] = function (result, input) { 21332 this.idx += 1; 21333 21334 if (this.f(input)) { 21335 this.found = true; 21336 result = _reduced(this.xf['@@transducer/step'](result, this.idx)); 21337 } 21338 21339 return result; 21340 }; 21341 21342 return XFindIndex; 21343}(); 21344 21345var _xfindIndex = 21346/*#__PURE__*/ 21347_curry2(function _xfindIndex(f, xf) { 21348 return new XFindIndex(f, xf); 21349}); 21350 21351module.exports = _xfindIndex; 21352 21353/***/ }), 21354
vendor: 1,207 bytes, lines 21355-21403
21355/***/ "./node_modules/ramda/src/internal/_xfindLast.js": 21356/*!*******************************************************!*\ 21357 !*** ./node_modules/ramda/src/internal/_xfindLast.js ***! 21358 \*******************************************************/ 21359/***/ ((module, __unused_webpack_exports, __webpack_require__) => { 21360 21361var _curry2 = 21362/*#__PURE__*/ 21363__webpack_require__(/*! ./_curry2.js */ "./node_modules/ramda/src/internal/_curry2.js"); 21364 21365var _xfBase = 21366/*#__PURE__*/ 21367__webpack_require__(/*! ./_xfBase.js */ "./node_modules/ramda/src/internal/_xfBase.js"); 21368 21369var XFindLast = 21370/*#__PURE__*/ 21371function () { 21372 function XFindLast(f, xf) { 21373 this.xf = xf; 21374 this.f = f; 21375 } 21376 21377 XFindLast.prototype['@@transducer/init'] = _xfBase.init; 21378 21379 XFindLast.prototype['@@transducer/result'] = function (result) { 21380 return this.xf['@@transducer/result'](this.xf['@@transducer/step'](result, this.last)); 21381 }; 21382 21383 XFindLast.prototype['@@transducer/step'] = function (result, input) { 21384 if (this.f(input)) { 21385 this.last = input; 21386 } 21387 21388 return result; 21389 }; 21390 21391 return XFindLast; 21392}(); 21393 21394var _xfindLast = 21395/*#__PURE__*/ 21396_curry2(function _xfindLast(f, xf) { 21397 return new XFindLast(f, xf); 21398}); 21399 21400module.exports = _xfindLast; 21401 21402/***/ }), 21403
vendor: 1,348 bytes, lines 21404-21456
21404/***/ "./node_modules/ramda/src/internal/_xfindLastIndex.js": 21405/*!************************************************************!*\ 21406 !*** ./node_modules/ramda/src/internal/_xfindLastIndex.js ***! 21407 \************************************************************/ 21408/***/ ((module, __unused_webpack_exports, __webpack_require__) => { 21409 21410var _curry2 = 21411/*#__PURE__*/ 21412__webpack_require__(/*! ./_curry2.js */ "./node_modules/ramda/src/internal/_curry2.js"); 21413 21414var _xfBase = 21415/*#__PURE__*/ 21416__webpack_require__(/*! ./_xfBase.js */ "./node_modules/ramda/src/internal/_xfBase.js"); 21417 21418var XFindLastIndex = 21419/*#__PURE__*/ 21420function () { 21421 function XFindLastIndex(f, xf) { 21422 this.xf = xf; 21423 this.f = f; 21424 this.idx = -1; 21425 this.lastIdx = -1; 21426 } 21427 21428 XFindLastIndex.prototype['@@transducer/init'] = _xfBase.init; 21429 21430 XFindLastIndex.prototype['@@transducer/result'] = function (result) { 21431 return this.xf['@@transducer/result'](this.xf['@@transducer/step'](result, this.lastIdx)); 21432 }; 21433 21434 XFindLastIndex.prototype['@@transducer/step'] = function (result, input) { 21435 this.idx += 1; 21436 21437 if (this.f(input)) { 21438 this.lastIdx = this.idx; 21439 } 21440 21441 return result; 21442 }; 21443 21444 return XFindLastIndex; 21445}(); 21446 21447var _xfindLastIndex = 21448/*#__PURE__*/ 21449_curry2(function _xfindLastIndex(f, xf) { 21450 return new XFindLastIndex(f, xf); 21451}); 21452 21453module.exports = _xfindLastIndex; 21454 21455/***/ }), 21456
vendor: 1,023 bytes, lines 21457-21498
21457/***/ "./node_modules/ramda/src/internal/_xmap.js": 21458/*!**************************************************!*\ 21459 !*** ./node_modules/ramda/src/internal/_xmap.js ***! 21460 \**************************************************/ 21461/***/ ((module, __unused_webpack_exports, __webpack_require__) => { 21462 21463var _curry2 = 21464/*#__PURE__*/ 21465__webpack_require__(/*! ./_curry2.js */ "./node_modules/ramda/src/internal/_curry2.js"); 21466 21467var _xfBase = 21468/*#__PURE__*/ 21469__webpack_require__(/*! ./_xfBase.js */ "./node_modules/ramda/src/internal/_xfBase.js"); 21470 21471var XMap = 21472/*#__PURE__*/ 21473function () { 21474 function XMap(f, xf) { 21475 this.xf = xf; 21476 this.f = f; 21477 } 21478 21479 XMap.prototype['@@transducer/init'] = _xfBase.init; 21480 XMap.prototype['@@transducer/result'] = _xfBase.result; 21481 21482 XMap.prototype['@@transducer/step'] = function (result, input) { 21483 return this.xf['@@transducer/step'](result, this.f(input)); 21484 }; 21485 21486 return XMap; 21487}(); 21488 21489var _xmap = 21490/*#__PURE__*/ 21491_curry2(function _xmap(f, xf) { 21492 return new XMap(f, xf); 21493}); 21494 21495module.exports = _xmap; 21496 21497/***/ }), 21498
vendor: 1,225 bytes, lines 21499-21545
21499/***/ "./node_modules/ramda/src/internal/_xpromap.js": 21500/*!*****************************************************!*\ 21501 !*** ./node_modules/ramda/src/internal/_xpromap.js ***! 21502 \*****************************************************/ 21503/***/ ((module, __unused_webpack_exports, __webpack_require__) => { 21504 21505var _curry3 = 21506/*#__PURE__*/ 21507__webpack_require__(/*! ./_curry3.js */ "./node_modules/ramda/src/internal/_curry3.js"); 21508 21509var _xfBase = 21510/*#__PURE__*/ 21511__webpack_require__(/*! ./_xfBase.js */ "./node_modules/ramda/src/internal/_xfBase.js"); 21512 21513var _promap = 21514/*#__PURE__*/ 21515__webpack_require__(/*! ./_promap.js */ "./node_modules/ramda/src/internal/_promap.js"); 21516 21517var XPromap = 21518/*#__PURE__*/ 21519function () { 21520 function XPromap(f, g, xf) { 21521 this.xf = xf; 21522 this.f = f; 21523 this.g = g; 21524 } 21525 21526 XPromap.prototype['@@transducer/init'] = _xfBase.init; 21527 XPromap.prototype['@@transducer/result'] = _xfBase.result; 21528 21529 XPromap.prototype['@@transducer/step'] = function (result, input) { 21530 return this.xf['@@transducer/step'](result, _promap(this.f, this.g, input)); 21531 }; 21532 21533 return XPromap; 21534}(); 21535 21536var _xpromap = 21537/*#__PURE__*/ 21538_curry3(function _xpromap(f, g, xf) { 21539 return new XPromap(f, g, xf); 21540}); 21541 21542module.exports = _xpromap; 21543 21544/***/ }), 21545
vendor: 1,864 bytes, lines 21546-21614
21546/***/ "./node_modules/ramda/src/internal/_xreduceBy.js": 21547/*!*******************************************************!*\ 21548 !*** ./node_modules/ramda/src/internal/_xreduceBy.js ***! 21549 \*******************************************************/ 21550/***/ ((module, __unused_webpack_exports, __webpack_require__) => { 21551 21552var _curryN = 21553/*#__PURE__*/ 21554__webpack_require__(/*! ./_curryN.js */ "./node_modules/ramda/src/internal/_curryN.js"); 21555 21556var _has = 21557/*#__PURE__*/ 21558__webpack_require__(/*! ./_has.js */ "./node_modules/ramda/src/internal/_has.js"); 21559 21560var _xfBase = 21561/*#__PURE__*/ 21562__webpack_require__(/*! ./_xfBase.js */ "./node_modules/ramda/src/internal/_xfBase.js"); 21563 21564var XReduceBy = 21565/*#__PURE__*/ 21566function () { 21567 function XReduceBy(valueFn, valueAcc, keyFn, xf) { 21568 this.valueFn = valueFn; 21569 this.valueAcc = valueAcc; 21570 this.keyFn = keyFn; 21571 this.xf = xf; 21572 this.inputs = {}; 21573 } 21574 21575 XReduceBy.prototype['@@transducer/init'] = _xfBase.init; 21576 21577 XReduceBy.prototype['@@transducer/result'] = function (result) { 21578 var key; 21579 21580 for (key in this.inputs) { 21581 if (_has(key, this.inputs)) { 21582 result = this.xf['@@transducer/step'](result, this.inputs[key]); 21583 21584 if (result['@@transducer/reduced']) { 21585 result = result['@@transducer/value']; 21586 break; 21587 } 21588 } 21589 } 21590 21591 this.inputs = null; 21592 return this.xf['@@transducer/result'](result); 21593 }; 21594 21595 XReduceBy.prototype['@@transducer/step'] = function (result, input) { 21596 var key = this.keyFn(input); 21597 this.inputs[key] = this.inputs[key] || [key, this.valueAcc]; 21598 this.inputs[key][1] = this.valueFn(this.inputs[key][1], input); 21599 return result; 21600 }; 21601 21602 return XReduceBy; 21603}(); 21604 21605var _xreduceBy = 21606/*#__PURE__*/ 21607_curryN(4, [], function _xreduceBy(valueFn, valueAcc, keyFn, xf) { 21608 return new XReduceBy(valueFn, valueAcc, keyFn, xf); 21609}); 21610 21611module.exports = _xreduceBy; 21612 21613/***/ }), 21614
vendor: 1,276 bytes, lines 21615-21663
21615/***/ "./node_modules/ramda/src/internal/_xtake.js": 21616/*!***************************************************!*\ 21617 !*** ./node_modules/ramda/src/internal/_xtake.js ***! 21618 \***************************************************/ 21619/***/ ((module, __unused_webpack_exports, __webpack_require__) => { 21620 21621var _curry2 = 21622/*#__PURE__*/ 21623__webpack_require__(/*! ./_curry2.js */ "./node_modules/ramda/src/internal/_curry2.js"); 21624 21625var _reduced = 21626/*#__PURE__*/ 21627__webpack_require__(/*! ./_reduced.js */ "./node_modules/ramda/src/internal/_reduced.js"); 21628 21629var _xfBase = 21630/*#__PURE__*/ 21631__webpack_require__(/*! ./_xfBase.js */ "./node_modules/ramda/src/internal/_xfBase.js"); 21632 21633var XTake = 21634/*#__PURE__*/ 21635function () { 21636 function XTake(n, xf) { 21637 this.xf = xf; 21638 this.n = n; 21639 this.i = 0; 21640 } 21641 21642 XTake.prototype['@@transducer/init'] = _xfBase.init; 21643 XTake.prototype['@@transducer/result'] = _xfBase.result; 21644 21645 XTake.prototype['@@transducer/step'] = function (result, input) { 21646 this.i += 1; 21647 var ret = this.n === 0 ? result : this.xf['@@transducer/step'](result, input); 21648 return this.n >= 0 && this.i >= this.n ? _reduced(ret) : ret; 21649 }; 21650 21651 return XTake; 21652}(); 21653 21654var _xtake = 21655/*#__PURE__*/ 21656_curry2(function _xtake(n, xf) { 21657 return new XTake(n, xf); 21658}); 21659 21660module.exports = _xtake; 21661 21662/***/ }), 21663
vendor: 1,255 bytes, lines 21664-21709
21664/***/ "./node_modules/ramda/src/internal/_xtakeWhile.js": 21665/*!********************************************************!*\ 21666 !*** ./node_modules/ramda/src/internal/_xtakeWhile.js ***! 21667 \********************************************************/ 21668/***/ ((module, __unused_webpack_exports, __webpack_require__) => { 21669 21670var _curry2 = 21671/*#__PURE__*/ 21672__webpack_require__(/*! ./_curry2.js */ "./node_modules/ramda/src/internal/_curry2.js"); 21673 21674var _reduced = 21675/*#__PURE__*/ 21676__webpack_require__(/*! ./_reduced.js */ "./node_modules/ramda/src/internal/_reduced.js"); 21677 21678var _xfBase = 21679/*#__PURE__*/ 21680__webpack_require__(/*! ./_xfBase.js */ "./node_modules/ramda/src/internal/_xfBase.js"); 21681 21682var XTakeWhile = 21683/*#__PURE__*/ 21684function () { 21685 function XTakeWhile(f, xf) { 21686 this.xf = xf; 21687 this.f = f; 21688 } 21689 21690 XTakeWhile.prototype['@@transducer/init'] = _xfBase.init; 21691 XTakeWhile.prototype['@@transducer/result'] = _xfBase.result; 21692 21693 XTakeWhile.prototype['@@transducer/step'] = function (result, input) { 21694 return this.f(input) ? this.xf['@@transducer/step'](result, input) : _reduced(result); 21695 }; 21696 21697 return XTakeWhile; 21698}(); 21699 21700var _xtakeWhile = 21701/*#__PURE__*/ 21702_curry2(function _xtakeWhile(f, xf) { 21703 return new XTakeWhile(f, xf); 21704}); 21705 21706module.exports = _xtakeWhile; 21707 21708/***/ }), 21709
vendor: 1,034 bytes, lines 21710-21752
21710/***/ "./node_modules/ramda/src/internal/_xtap.js": 21711/*!**************************************************!*\ 21712 !*** ./node_modules/ramda/src/internal/_xtap.js ***! 21713 \**************************************************/ 21714/***/ ((module, __unused_webpack_exports, __webpack_require__) => { 21715 21716var _curry2 = 21717/*#__PURE__*/ 21718__webpack_require__(/*! ./_curry2.js */ "./node_modules/ramda/src/internal/_curry2.js"); 21719 21720var _xfBase = 21721/*#__PURE__*/ 21722__webpack_require__(/*! ./_xfBase.js */ "./node_modules/ramda/src/internal/_xfBase.js"); 21723 21724var XTap = 21725/*#__PURE__*/ 21726function () { 21727 function XTap(f, xf) { 21728 this.xf = xf; 21729 this.f = f; 21730 } 21731 21732 XTap.prototype['@@transducer/init'] = _xfBase.init; 21733 XTap.prototype['@@transducer/result'] = _xfBase.result; 21734 21735 XTap.prototype['@@transducer/step'] = function (result, input) { 21736 this.f(input); 21737 return this.xf['@@transducer/step'](result, input); 21738 }; 21739 21740 return XTap; 21741}(); 21742 21743var _xtap = 21744/*#__PURE__*/ 21745_curry2(function _xtap(f, xf) { 21746 return new XTap(f, xf); 21747}); 21748 21749module.exports = _xtap; 21750 21751/***/ }), 21752
vendor: 1,232 bytes, lines 21753-21799
21753/***/ "./node_modules/ramda/src/internal/_xuniqBy.js": 21754/*!*****************************************************!*\ 21755 !*** ./node_modules/ramda/src/internal/_xuniqBy.js ***! 21756 \*****************************************************/ 21757/***/ ((module, __unused_webpack_exports, __webpack_require__) => { 21758 21759var _curry2 = 21760/*#__PURE__*/ 21761__webpack_require__(/*! ./_curry2.js */ "./node_modules/ramda/src/internal/_curry2.js"); 21762 21763var _Set = 21764/*#__PURE__*/ 21765__webpack_require__(/*! ./_Set.js */ "./node_modules/ramda/src/internal/_Set.js"); 21766 21767var _xfBase = 21768/*#__PURE__*/ 21769__webpack_require__(/*! ./_xfBase.js */ "./node_modules/ramda/src/internal/_xfBase.js"); 21770 21771var XUniqBy = 21772/*#__PURE__*/ 21773function () { 21774 function XUniqBy(f, xf) { 21775 this.xf = xf; 21776 this.f = f; 21777 this.set = new _Set(); 21778 } 21779 21780 XUniqBy.prototype['@@transducer/init'] = _xfBase.init; 21781 XUniqBy.prototype['@@transducer/result'] = _xfBase.result; 21782 21783 XUniqBy.prototype['@@transducer/step'] = function (result, input) { 21784 return this.set.add(this.f(input)) ? this.xf['@@transducer/step'](result, input) : result; 21785 }; 21786 21787 return XUniqBy; 21788}(); 21789 21790var _xuniqBy = 21791/*#__PURE__*/ 21792_curry2(function _xuniqBy(f, xf) { 21793 return new XUniqBy(f, xf); 21794}); 21795 21796module.exports = _xuniqBy; 21797 21798/***/ }), 21799
vendor: 1,384 bytes, lines 21800-21851
21800/***/ "./node_modules/ramda/src/internal/_xuniqWith.js": 21801/*!*******************************************************!*\ 21802 !*** ./node_modules/ramda/src/internal/_xuniqWith.js ***! 21803 \*******************************************************/ 21804/***/ ((module, __unused_webpack_exports, __webpack_require__) => { 21805 21806var _curry2 = 21807/*#__PURE__*/ 21808__webpack_require__(/*! ./_curry2.js */ "./node_modules/ramda/src/internal/_curry2.js"); 21809 21810var _includesWith = 21811/*#__PURE__*/ 21812__webpack_require__(/*! ./_includesWith.js */ "./node_modules/ramda/src/internal/_includesWith.js"); 21813 21814var _xfBase = 21815/*#__PURE__*/ 21816__webpack_require__(/*! ./_xfBase.js */ "./node_modules/ramda/src/internal/_xfBase.js"); 21817 21818var XUniqWith = 21819/*#__PURE__*/ 21820function () { 21821 function XUniqWith(pred, xf) { 21822 this.xf = xf; 21823 this.pred = pred; 21824 this.items = []; 21825 } 21826 21827 XUniqWith.prototype['@@transducer/init'] = _xfBase.init; 21828 XUniqWith.prototype['@@transducer/result'] = _xfBase.result; 21829 21830 XUniqWith.prototype['@@transducer/step'] = function (result, input) { 21831 if (_includesWith(this.pred, input, this.items)) { 21832 return result; 21833 } else { 21834 this.items.push(input); 21835 return this.xf['@@transducer/step'](result, input); 21836 } 21837 }; 21838 21839 return XUniqWith; 21840}(); 21841 21842var _xuniqWith = 21843/*#__PURE__*/ 21844_curry2(function _xuniqWith(pred, xf) { 21845 return new XUniqWith(pred, xf); 21846}); 21847 21848module.exports = _xuniqWith; 21849 21850/***/ }), 21851
vendor: 729 bytes, lines 21852-21887
21852/***/ "./node_modules/ramda/src/internal/_xwrap.js": 21853/*!***************************************************!*\ 21854 !*** ./node_modules/ramda/src/internal/_xwrap.js ***! 21855 \***************************************************/ 21856/***/ ((module) => { 21857 21858var XWrap = 21859/*#__PURE__*/ 21860function () { 21861 function XWrap(fn) { 21862 this.f = fn; 21863 } 21864 21865 XWrap.prototype['@@transducer/init'] = function () { 21866 throw new Error('init not implemented on XWrap'); 21867 }; 21868 21869 XWrap.prototype['@@transducer/result'] = function (acc) { 21870 return acc; 21871 }; 21872 21873 XWrap.prototype['@@transducer/step'] = function (acc, x) { 21874 return this.f(acc, x); 21875 }; 21876 21877 return XWrap; 21878}(); 21879 21880function _xwrap(fn) { 21881 return new XWrap(fn); 21882} 21883 21884module.exports = _xwrap; 21885 21886/***/ }), 21887
vendor: 1,705 bytes, lines 21888-21951
21888/***/ "./node_modules/ramda/src/intersection.js": 21889/*!************************************************!*\ 21890 !*** ./node_modules/ramda/src/intersection.js ***! 21891 \************************************************/ 21892/***/ ((module, __unused_webpack_exports, __webpack_require__) => { 21893 21894var _includes = 21895/*#__PURE__*/ 21896__webpack_require__(/*! ./internal/_includes.js */ "./node_modules/ramda/src/internal/_includes.js"); 21897 21898var _curry2 = 21899/*#__PURE__*/ 21900__webpack_require__(/*! ./internal/_curry2.js */ "./node_modules/ramda/src/internal/_curry2.js"); 21901 21902var _filter = 21903/*#__PURE__*/ 21904__webpack_require__(/*! ./internal/_filter.js */ "./node_modules/ramda/src/internal/_filter.js"); 21905 21906var flip = 21907/*#__PURE__*/ 21908__webpack_require__(/*! ./flip.js */ "./node_modules/ramda/src/flip.js"); 21909 21910var uniq = 21911/*#__PURE__*/ 21912__webpack_require__(/*! ./uniq.js */ "./node_modules/ramda/src/uniq.js"); 21913/** 21914 * Combines two lists into a set (i.e. no duplicates) composed of those 21915 * elements common to both lists. 21916 * 21917 * @func 21918 * @memberOf R 21919 * @since v0.1.0 21920 * @category Relation 21921 * @sig [*] -> [*] -> [*] 21922 * @param {Array} list1 The first list. 21923 * @param {Array} list2 The second list. 21924 * @return {Array} The list of elements found in both `list1` and `list2`. 21925 * @see R.innerJoin 21926 * @example 21927 * 21928 * R.intersection([1,2,3,4], [7,6,5,4,3]); //=> [4, 3] 21929 */ 21930 21931 21932var intersection = 21933/*#__PURE__*/ 21934_curry2(function intersection(list1, list2) { 21935 var lookupList, filteredList; 21936 21937 if (list1.length > list2.length) { 21938 lookupList = list1; 21939 filteredList = list2; 21940 } else { 21941 lookupList = list2; 21942 filteredList = list1; 21943 } 21944 21945 return uniq(_filter(flip(_includes)(lookupList), filteredList)); 21946}); 21947 21948module.exports = intersection; 21949 21950/***/ }), 21951
vendor: 1,453 bytes, lines 21952-22009
21952/***/ "./node_modules/ramda/src/intersperse.js": 21953/*!***********************************************!*\ 21954 !*** ./node_modules/ramda/src/intersperse.js ***! 21955 \***********************************************/ 21956/***/ ((module, __unused_webpack_exports, __webpack_require__) => { 21957 21958var _checkForMethod = 21959/*#__PURE__*/ 21960__webpack_require__(/*! ./internal/_checkForMethod.js */ "./node_modules/ramda/src/internal/_checkForMethod.js"); 21961 21962var _curry2 = 21963/*#__PURE__*/ 21964__webpack_require__(/*! ./internal/_curry2.js */ "./node_modules/ramda/src/internal/_curry2.js"); 21965/** 21966 * Creates a new list with the separator interposed between elements. 21967 * 21968 * Dispatches to the `intersperse` method of the second argument, if present. 21969 * 21970 * @func 21971 * @memberOf R 21972 * @since v0.14.0 21973 * @category List 21974 * @sig a -> [a] -> [a] 21975 * @param {*} separator The element to add to the list. 21976 * @param {Array} list The list to be interposed. 21977 * @return {Array} The new list. 21978 * @example 21979 * 21980 * R.intersperse('a', ['b', 'n', 'n', 's']); //=> ['b', 'a', 'n', 'a', 'n', 'a', 's'] 21981 */ 21982 21983 21984var intersperse = 21985/*#__PURE__*/ 21986_curry2( 21987/*#__PURE__*/ 21988_checkForMethod('intersperse', function intersperse(separator, list) { 21989 var out = []; 21990 var idx = 0; 21991 var length = list.length; 21992 21993 while (idx < length) { 21994 if (idx === length - 1) { 21995 out.push(list[idx]); 21996 } else { 21997 out.push(list[idx], separator); 21998 } 21999 22000 idx += 1; 22001 } 22002 22003 return out; 22004})); 22005 22006module.exports = intersperse; 22007 22008/***/ }), 22009
vendor: 2,759 bytes, lines 22010-22085
22010/***/ "./node_modules/ramda/src/into.js": 22011/*!****************************************!*\ 22012 !*** ./node_modules/ramda/src/into.js ***! 22013 \****************************************/ 22014/***/ ((module, __unused_webpack_exports, __webpack_require__) => { 22015 22016var _clone = 22017/*#__PURE__*/ 22018__webpack_require__(/*! ./internal/_clone.js */ "./node_modules/ramda/src/internal/_clone.js"); 22019 22020var _curry3 = 22021/*#__PURE__*/ 22022__webpack_require__(/*! ./internal/_curry3.js */ "./node_modules/ramda/src/internal/_curry3.js"); 22023 22024var _isTransformer = 22025/*#__PURE__*/ 22026__webpack_require__(/*! ./internal/_isTransformer.js */ "./node_modules/ramda/src/internal/_isTransformer.js"); 22027 22028var _reduce = 22029/*#__PURE__*/ 22030__webpack_require__(/*! ./internal/_reduce.js */ "./node_modules/ramda/src/internal/_reduce.js"); 22031 22032var _stepCat = 22033/*#__PURE__*/ 22034__webpack_require__(/*! ./internal/_stepCat.js */ "./node_modules/ramda/src/internal/_stepCat.js"); 22035/** 22036 * Transforms the items of the list with the transducer and appends the 22037 * transformed items to the accumulator using an appropriate iterator function 22038 * based on the accumulator type. 22039 * 22040 * The accumulator can be an array, string, object or a transformer. Iterated 22041 * items will be appended to arrays and concatenated to strings. Objects will 22042 * be merged directly or 2-item arrays will be merged as key, value pairs. 22043 * 22044 * The accumulator can also be a transformer object that provides a 2-arity 22045 * reducing iterator function, step, 0-arity initial value function, init, and 22046 * 1-arity result extraction function result. The step function is used as the 22047 * iterator function in reduce. The result function is used to convert the 22048 * final accumulator into the return type and in most cases is R.identity. The 22049 * init function is used to provide the initial accumulator. 22050 * 22051 * The iteration is performed with [`R.reduce`](#reduce) after initializing the 22052 * transducer. 22053 * 22054 * @func 22055 * @memberOf R 22056 * @since v0.12.0 22057 * @category List 22058 * @sig a -> (b -> b) -> [c] -> a 22059 * @param {*} acc The initial accumulator value. 22060 * @param {Function} xf The transducer function. Receives a transformer and returns a transformer. 22061 * @param {Array} list The list to iterate over. 22062 * @return {*} The final, accumulated value. 22063 * @see R.transduce 22064 * @example 22065 * 22066 * const numbers = [1, 2, 3, 4]; 22067 * const transducer = R.compose(R.map(R.add(1)), R.take(2)); 22068 * 22069 * R.into([], transducer, numbers); //=> [2, 3] 22070 * 22071 * const intoArray = R.into([]); 22072 * intoArray(transducer, numbers); //=> [2, 3] 22073 */ 22074 22075 22076var into = 22077/*#__PURE__*/ 22078_curry3(function into(acc, xf, list) { 22079 return _isTransformer(acc) ? _reduce(xf(acc), acc['@@transducer/init'](), list) : _reduce(xf(_stepCat(acc)), _clone(acc, [], [], false), list); 22080}); 22081 22082module.exports = into; 22083 22084/***/ }), 22085
vendor: 1,603 bytes, lines 22086-22149
22086/***/ "./node_modules/ramda/src/invert.js": 22087/*!******************************************!*\ 22088 !*** ./node_modules/ramda/src/invert.js ***! 22089 \******************************************/ 22090/***/ ((module, __unused_webpack_exports, __webpack_require__) => { 22091 22092var _curry1 = 22093/*#__PURE__*/ 22094__webpack_require__(/*! ./internal/_curry1.js */ "./node_modules/ramda/src/internal/_curry1.js"); 22095 22096var _has = 22097/*#__PURE__*/ 22098__webpack_require__(/*! ./internal/_has.js */ "./node_modules/ramda/src/internal/_has.js"); 22099 22100var keys = 22101/*#__PURE__*/ 22102__webpack_require__(/*! ./keys.js */ "./node_modules/ramda/src/keys.js"); 22103/** 22104 * Same as [`R.invertObj`](#invertObj), however this accounts for objects with 22105 * duplicate values by putting the values into an array. 22106 * 22107 * @func 22108 * @memberOf R 22109 * @since v0.9.0 22110 * @category Object 22111 * @sig {s: x} -> {x: [ s, ... ]} 22112 * @param {Object} obj The object or array to invert 22113 * @return {Object} out A new object with keys in an array. 22114 * @see R.invertObj 22115 * @example 22116 * 22117 * const raceResultsByFirstName = { 22118 * first: 'alice', 22119 * second: 'jake', 22120 * third: 'alice', 22121 * }; 22122 * R.invert(raceResultsByFirstName); 22123 * //=> { 'alice': ['first', 'third'], 'jake':['second'] } 22124 */ 22125 22126 22127var invert = 22128/*#__PURE__*/ 22129_curry1(function invert(obj) { 22130 var props = keys(obj); 22131 var len = props.length; 22132 var idx = 0; 22133 var out = {}; 22134 22135 while (idx < len) { 22136 var key = props[idx]; 22137 var val = obj[key]; 22138 var list = _has(val, out) ? out[val] : out[val] = []; 22139 list[list.length] = key; 22140 idx += 1; 22141 } 22142 22143 return out; 22144}); 22145 22146module.exports = invert; 22147 22148/***/ }), 22149
vendor: 1,564 bytes, lines 22150-22212
22150/***/ "./node_modules/ramda/src/invertObj.js": 22151/*!*********************************************!*\ 22152 !*** ./node_modules/ramda/src/invertObj.js ***! 22153 \*********************************************/ 22154/***/ ((module, __unused_webpack_exports, __webpack_require__) => { 22155 22156var _curry1 = 22157/*#__PURE__*/ 22158__webpack_require__(/*! ./internal/_curry1.js */ "./node_modules/ramda/src/internal/_curry1.js"); 22159 22160var keys = 22161/*#__PURE__*/ 22162__webpack_require__(/*! ./keys.js */ "./node_modules/ramda/src/keys.js"); 22163/** 22164 * Returns a new object with the keys of the given object as values, and the 22165 * values of the given object, which are coerced to strings, as keys. Note 22166 * that the last key found is preferred when handling the same value. 22167 * 22168 * @func 22169 * @memberOf R 22170 * @since v0.9.0 22171 * @category Object 22172 * @sig {s: x} -> {x: s} 22173 * @param {Object} obj The object or array to invert 22174 * @return {Object} out A new object 22175 * @see R.invert 22176 * @example 22177 * 22178 * const raceResults = { 22179 * first: 'alice', 22180 * second: 'jake' 22181 * }; 22182 * R.invertObj(raceResults); 22183 * //=> { 'alice': 'first', 'jake':'second' } 22184 * 22185 * // Alternatively: 22186 * const raceResults = ['alice', 'jake']; 22187 * R.invertObj(raceResults); 22188 * //=> { 'alice': '0', 'jake':'1' } 22189 */ 22190 22191 22192var invertObj = 22193/*#__PURE__*/ 22194_curry1(function invertObj(obj) { 22195 var props = keys(obj); 22196 var len = props.length; 22197 var idx = 0; 22198 var out = {}; 22199 22200 while (idx < len) { 22201 var key = props[idx]; 22202 out[obj[key]] = key; 22203 idx += 1; 22204 } 22205 22206 return out; 22207}); 22208 22209module.exports = invertObj; 22210 22211/***/ }), 22212
vendor: 2,411 bytes, lines 22213-22287
22213/***/ "./node_modules/ramda/src/invoker.js": 22214/*!*******************************************!*\ 22215 !*** ./node_modules/ramda/src/invoker.js ***! 22216 \*******************************************/ 22217/***/ ((module, __unused_webpack_exports, __webpack_require__) => { 22218 22219var _curry2 = 22220/*#__PURE__*/ 22221__webpack_require__(/*! ./internal/_curry2.js */ "./node_modules/ramda/src/internal/_curry2.js"); 22222 22223var _isFunction = 22224/*#__PURE__*/ 22225__webpack_require__(/*! ./internal/_isFunction.js */ "./node_modules/ramda/src/internal/_isFunction.js"); 22226 22227var curryN = 22228/*#__PURE__*/ 22229__webpack_require__(/*! ./curryN.js */ "./node_modules/ramda/src/curryN.js"); 22230 22231var toString = 22232/*#__PURE__*/ 22233__webpack_require__(/*! ./toString.js */ "./node_modules/ramda/src/toString.js"); 22234/** 22235 * Turns a named method with a specified arity into a function that can be 22236 * called directly supplied with arguments and a target object. 22237 * 22238 * The returned function is curried and accepts `arity + 1` parameters where 22239 * the final parameter is the target object. 22240 * 22241 * @func 22242 * @memberOf R 22243 * @since v0.1.0 22244 * @category Function 22245 * @sig Number -> String -> (a -> b -> ... -> n -> Object -> *) 22246 * @param {Number} arity Number of arguments the returned function should take 22247 * before the target object. 22248 * @param {String} method Name of any of the target object's methods to call. 22249 * @return {Function} A new curried function. 22250 * @see R.construct 22251 * @example 22252 * 22253 * const sliceFrom = R.invoker(1, 'slice'); 22254 * sliceFrom(6, 'abcdefghijklm'); //=> 'ghijklm' 22255 * const sliceFrom6 = R.invoker(2, 'slice')(6); 22256 * sliceFrom6(8, 'abcdefghijklm'); //=> 'gh' 22257 * 22258 * const dog = { 22259 * speak: async () => 'Woof!' 22260 * }; 22261 * const speak = R.invoker(0, 'speak'); 22262 * speak(dog).then(console.log) //~> 'Woof!' 22263 * 22264 * @symb R.invoker(0, 'method')(o) = o['method']() 22265 * @symb R.invoker(1, 'method')(a, o) = o['method'](a) 22266 * @symb R.invoker(2, 'method')(a, b, o) = o['method'](a, b) 22267 */ 22268 22269 22270var invoker = 22271/*#__PURE__*/ 22272_curry2(function invoker(arity, method) { 22273 return curryN(arity + 1, function () { 22274 var target = arguments[arity]; 22275 22276 if (target != null && _isFunction(target[method])) { 22277 return target[method].apply(target, Array.prototype.slice.call(arguments, 0, arity)); 22278 } 22279 22280 throw new TypeError(toString(target) + ' does not have a method named "' + method + '"'); 22281 }); 22282}); 22283 22284module.exports = invoker; 22285 22286/***/ }), 22287
vendor: 1,336 bytes, lines 22288-22332
22288/***/ "./node_modules/ramda/src/is.js": 22289/*!**************************************!*\ 22290 !*** ./node_modules/ramda/src/is.js ***! 22291 \**************************************/ 22292/***/ ((module, __unused_webpack_exports, __webpack_require__) => { 22293 22294var _curry2 = 22295/*#__PURE__*/ 22296__webpack_require__(/*! ./internal/_curry2.js */ "./node_modules/ramda/src/internal/_curry2.js"); 22297/** 22298 * See if an object (i.e. `val`) is an instance of the supplied constructor. This 22299 * function will check up the inheritance chain, if any. 22300 * If `val` was created using `Object.create`, `R.is(Object, val) === true`. 22301 * 22302 * @func 22303 * @memberOf R 22304 * @since v0.3.0 22305 * @category Type 22306 * @sig (* -> {*}) -> a -> Boolean 22307 * @param {Object} ctor A constructor 22308 * @param {*} val The value to test 22309 * @return {Boolean} 22310 * @example 22311 * 22312 * R.is(Object, {}); //=> true 22313 * R.is(Number, 1); //=> true 22314 * R.is(Object, 1); //=> false 22315 * R.is(String, 's'); //=> true 22316 * R.is(String, new String('')); //=> true 22317 * R.is(Object, new String('')); //=> true 22318 * R.is(Object, 's'); //=> false 22319 * R.is(Number, {}); //=> false 22320 */ 22321 22322 22323var is = 22324/*#__PURE__*/ 22325_curry2(function is(Ctor, val) { 22326 return val instanceof Ctor || val != null && (val.constructor === Ctor || Ctor.name === 'Object' && typeof val === 'object'); 22327}); 22328 22329module.exports = is; 22330 22331/***/ }), 22332
vendor: 1,340 bytes, lines 22333-22383
22333/***/ "./node_modules/ramda/src/isEmpty.js": 22334/*!*******************************************!*\ 22335 !*** ./node_modules/ramda/src/isEmpty.js ***! 22336 \*******************************************/ 22337/***/ ((module, __unused_webpack_exports, __webpack_require__) => { 22338 22339var _curry1 = 22340/*#__PURE__*/ 22341__webpack_require__(/*! ./internal/_curry1.js */ "./node_modules/ramda/src/internal/_curry1.js"); 22342 22343var empty = 22344/*#__PURE__*/ 22345__webpack_require__(/*! ./empty.js */ "./node_modules/ramda/src/empty.js"); 22346 22347var equals = 22348/*#__PURE__*/ 22349__webpack_require__(/*! ./equals.js */ "./node_modules/ramda/src/equals.js"); 22350/** 22351 * Returns `true` if the given value is its type's empty value; `false` 22352 * otherwise. 22353 * 22354 * @func 22355 * @memberOf R 22356 * @since v0.1.0 22357 * @category Logic 22358 * @sig a -> Boolean 22359 * @param {*} x 22360 * @return {Boolean} 22361 * @see R.empty 22362 * @example 22363 * 22364 * R.isEmpty([1, 2, 3]); //=> false 22365 * R.isEmpty([]); //=> true 22366 * R.isEmpty(''); //=> true 22367 * R.isEmpty(null); //=> false 22368 * R.isEmpty({}); //=> true 22369 * R.isEmpty({length: 0}); //=> false 22370 * R.isEmpty(Uint8Array.from('')); //=> true 22371 */ 22372 22373 22374var isEmpty = 22375/*#__PURE__*/ 22376_curry1(function isEmpty(x) { 22377 return x != null && equals(x, empty(x)); 22378}); 22379 22380module.exports = isEmpty; 22381 22382/***/ }), 22383
vendor: 905 bytes, lines 22384-22421
22384/***/ "./node_modules/ramda/src/isNil.js": 22385/*!*****************************************!*\ 22386 !*** ./node_modules/ramda/src/isNil.js ***! 22387 \*****************************************/ 22388/***/ ((module, __unused_webpack_exports, __webpack_require__) => { 22389 22390var _curry1 = 22391/*#__PURE__*/ 22392__webpack_require__(/*! ./internal/_curry1.js */ "./node_modules/ramda/src/internal/_curry1.js"); 22393/** 22394 * Checks if the input value is `null` or `undefined`. 22395 * 22396 * @func 22397 * @memberOf R 22398 * @since v0.9.0 22399 * @category Type 22400 * @sig * -> Boolean 22401 * @param {*} x The value to test. 22402 * @return {Boolean} `true` if `x` is `undefined` or `null`, otherwise `false`. 22403 * @example 22404 * 22405 * R.isNil(null); //=> true 22406 * R.isNil(undefined); //=> true 22407 * R.isNil(0); //=> false 22408 * R.isNil([]); //=> false 22409 */ 22410 22411 22412var isNil = 22413/*#__PURE__*/ 22414_curry1(function isNil(x) { 22415 return x == null; 22416}); 22417 22418module.exports = isNil; 22419 22420/***/ }), 22421
vendor: 1,053 bytes, lines 22422-22458
22422/***/ "./node_modules/ramda/src/join.js": 22423/*!****************************************!*\ 22424 !*** ./node_modules/ramda/src/join.js ***! 22425 \****************************************/ 22426/***/ ((module, __unused_webpack_exports, __webpack_require__) => { 22427 22428var invoker = 22429/*#__PURE__*/ 22430__webpack_require__(/*! ./invoker.js */ "./node_modules/ramda/src/invoker.js"); 22431/** 22432 * Returns a string made by inserting the `separator` between each element and 22433 * concatenating all the elements into a single string. 22434 * 22435 * @func 22436 * @memberOf R 22437 * @since v0.1.0 22438 * @category List 22439 * @sig String -> [a] -> String 22440 * @param {Number|String} separator The string used to separate the elements. 22441 * @param {Array} xs The elements to join into a string. 22442 * @return {String} str The string made by concatenating `xs` with `separator`. 22443 * @see R.split 22444 * @example 22445 * 22446 * const spacer = R.join(' '); 22447 * spacer(['a', 2, 3.4]); //=> 'a 2 3.4' 22448 * R.join('|', [1, 2, 3]); //=> '1|2|3' 22449 */ 22450 22451 22452var join = 22453/*#__PURE__*/ 22454invoker(1, 'join'); 22455module.exports = join; 22456 22457/***/ }), 22458
vendor: 1,232 bytes, lines 22459-22502
22459/***/ "./node_modules/ramda/src/juxt.js": 22460/*!****************************************!*\ 22461 !*** ./node_modules/ramda/src/juxt.js ***! 22462 \****************************************/ 22463/***/ ((module, __unused_webpack_exports, __webpack_require__) => { 22464 22465var _curry1 = 22466/*#__PURE__*/ 22467__webpack_require__(/*! ./internal/_curry1.js */ "./node_modules/ramda/src/internal/_curry1.js"); 22468 22469var converge = 22470/*#__PURE__*/ 22471__webpack_require__(/*! ./converge.js */ "./node_modules/ramda/src/converge.js"); 22472/** 22473 * juxt applies a list of functions to a list of values. 22474 * 22475 * @func 22476 * @memberOf R 22477 * @since v0.19.0 22478 * @category Function 22479 * @sig [(a, b, ..., m) -> n] -> ((a, b, ..., m) -> [n]) 22480 * @param {Array} fns An array of functions 22481 * @return {Function} A function that returns a list of values after applying each of the original `fns` to its parameters. 22482 * @see R.applySpec 22483 * @example 22484 * 22485 * const getRange = R.juxt([Math.min, Math.max]); 22486 * getRange(3, 4, 9, -3); //=> [-3, 9] 22487 * @symb R.juxt([f, g, h])(a, b) = [f(a, b), g(a, b), h(a, b)] 22488 */ 22489 22490 22491var juxt = 22492/*#__PURE__*/ 22493_curry1(function juxt(fns) { 22494 return converge(function () { 22495 return Array.prototype.slice.call(arguments, 0); 22496 }, fns); 22497}); 22498 22499module.exports = juxt; 22500 22501/***/ }), 22502
vendor: 2,546 bytes, lines 22503-22611
22503/***/ "./node_modules/ramda/src/keys.js": 22504/*!****************************************!*\ 22505 !*** ./node_modules/ramda/src/keys.js ***! 22506 \****************************************/ 22507/***/ ((module, __unused_webpack_exports, __webpack_require__) => { 22508 22509var _curry1 = 22510/*#__PURE__*/ 22511__webpack_require__(/*! ./internal/_curry1.js */ "./node_modules/ramda/src/internal/_curry1.js"); 22512 22513var _has = 22514/*#__PURE__*/ 22515__webpack_require__(/*! ./internal/_has.js */ "./node_modules/ramda/src/internal/_has.js"); 22516 22517var _isArguments = 22518/*#__PURE__*/ 22519__webpack_require__(/*! ./internal/_isArguments.js */ "./node_modules/ramda/src/internal/_isArguments.js"); // cover IE < 9 keys issues 22520 22521 22522var hasEnumBug = ! 22523/*#__PURE__*/ 22524{ 22525 toString: null 22526}.propertyIsEnumerable('toString'); 22527var nonEnumerableProps = ['constructor', 'valueOf', 'isPrototypeOf', 'toString', 'propertyIsEnumerable', 'hasOwnProperty', 'toLocaleString']; // Safari bug 22528 22529var hasArgsEnumBug = 22530/*#__PURE__*/ 22531function () { 22532 'use strict'; 22533 22534 return arguments.propertyIsEnumerable('length'); 22535}(); 22536 22537var contains = function contains(list, item) { 22538 var idx = 0; 22539 22540 while (idx < list.length) { 22541 if (list[idx] === item) { 22542 return true; 22543 } 22544 22545 idx += 1; 22546 } 22547 22548 return false; 22549}; 22550/** 22551 * Returns a list containing the names of all the enumerable own properties of 22552 * the supplied object. 22553 * Note that the order of the output array is not guaranteed to be consistent 22554 * across different JS platforms. 22555 * 22556 * @func 22557 * @memberOf R 22558 * @since v0.1.0 22559 * @category Object 22560 * @sig {k: v} -> [k] 22561 * @param {Object} obj The object to extract properties from 22562 * @return {Array} An array of the object's own properties. 22563 * @see R.keysIn, R.values, R.toPairs 22564 * @example 22565 * 22566 * R.keys({a: 1, b: 2, c: 3}); //=> ['a', 'b', 'c'] 22567 */ 22568 22569 22570var keys = typeof Object.keys === 'function' && !hasArgsEnumBug ? 22571/*#__PURE__*/ 22572_curry1(function keys(obj) { 22573 return Object(obj) !== obj ? [] : Object.keys(obj); 22574}) : 22575/*#__PURE__*/ 22576_curry1(function keys(obj) { 22577 if (Object(obj) !== obj) { 22578 return []; 22579 } 22580 22581 var prop, nIdx; 22582 var ks = []; 22583 22584 var checkArgsLength = hasArgsEnumBug && _isArguments(obj); 22585 22586 for (prop in obj) { 22587 if (_has(prop, obj) && (!checkArgsLength || prop !== 'length')) { 22588 ks[ks.length] = prop; 22589 } 22590 } 22591 22592 if (hasEnumBug) { 22593 nIdx = nonEnumerableProps.length - 1; 22594 22595 while (nIdx >= 0) { 22596 prop = nonEnumerableProps[nIdx]; 22597 22598 if (_has(prop, obj) && !contains(ks, prop)) { 22599 ks[ks.length] = prop; 22600 } 22601 22602 nIdx -= 1; 22603 } 22604 } 22605 22606 return ks; 22607}); 22608module.exports = keys; 22609 22610/***/ }), 22611
vendor: 1,222 bytes, lines 22612-22660
22612/***/ "./node_modules/ramda/src/keysIn.js": 22613/*!******************************************!*\ 22614 !*** ./node_modules/ramda/src/keysIn.js ***! 22615 \******************************************/ 22616/***/ ((module, __unused_webpack_exports, __webpack_require__) => { 22617 22618var _curry1 = 22619/*#__PURE__*/ 22620__webpack_require__(/*! ./internal/_curry1.js */ "./node_modules/ramda/src/internal/_curry1.js"); 22621/** 22622 * Returns a list containing the names of all the properties of the supplied 22623 * object, including prototype properties. 22624 * Note that the order of the output array is not guaranteed to be consistent 22625 * across different JS platforms. 22626 * 22627 * @func 22628 * @memberOf R 22629 * @since v0.2.0 22630 * @category Object 22631 * @sig {k: v} -> [k] 22632 * @param {Object} obj The object to extract properties from 22633 * @return {Array} An array of the object's own and prototype properties. 22634 * @see R.keys, R.valuesIn 22635 * @example 22636 * 22637 * const F = function() { this.x = 'X'; }; 22638 * F.prototype.y = 'Y'; 22639 * const f = new F(); 22640 * R.keysIn(f); //=> ['x', 'y'] 22641 */ 22642 22643 22644var keysIn = 22645/*#__PURE__*/ 22646_curry1(function keysIn(obj) { 22647 var prop; 22648 var ks = []; 22649 22650 for (prop in obj) { 22651 ks[ks.length] = prop; 22652 } 22653 22654 return ks; 22655}); 22656 22657module.exports = keysIn; 22658 22659/***/ }), 22660
vendor: 822 bytes, lines 22661-22698
22661/***/ "./node_modules/ramda/src/last.js": 22662/*!****************************************!*\ 22663 !*** ./node_modules/ramda/src/last.js ***! 22664 \****************************************/ 22665/***/ ((module, __unused_webpack_exports, __webpack_require__) => { 22666 22667var nth = 22668/*#__PURE__*/ 22669__webpack_require__(/*! ./nth.js */ "./node_modules/ramda/src/nth.js"); 22670/** 22671 * Returns the last element of the given list or string. 22672 * 22673 * @func 22674 * @memberOf R 22675 * @since v0.1.4 22676 * @category List 22677 * @sig [a] -> a | Undefined 22678 * @sig String -> String 22679 * @param {*} list 22680 * @return {*} 22681 * @see R.init, R.head, R.tail 22682 * @example 22683 * 22684 * R.last(['fi', 'fo', 'fum']); //=> 'fum' 22685 * R.last([]); //=> undefined 22686 * 22687 * R.last('abc'); //=> 'c' 22688 * R.last(''); //=> '' 22689 */ 22690 22691 22692var last = 22693/*#__PURE__*/ 22694nth(-1); 22695module.exports = last; 22696 22697/***/ }), 22698
vendor: 1,619 bytes, lines 22699-22760
22699/***/ "./node_modules/ramda/src/lastIndexOf.js": 22700/*!***********************************************!*\ 22701 !*** ./node_modules/ramda/src/lastIndexOf.js ***! 22702 \***********************************************/ 22703/***/ ((module, __unused_webpack_exports, __webpack_require__) => { 22704 22705var _curry2 = 22706/*#__PURE__*/ 22707__webpack_require__(/*! ./internal/_curry2.js */ "./node_modules/ramda/src/internal/_curry2.js"); 22708 22709var _isArray = 22710/*#__PURE__*/ 22711__webpack_require__(/*! ./internal/_isArray.js */ "./node_modules/ramda/src/internal/_isArray.js"); 22712 22713var equals = 22714/*#__PURE__*/ 22715__webpack_require__(/*! ./equals.js */ "./node_modules/ramda/src/equals.js"); 22716/** 22717 * Returns the position of the last occurrence of an item in an array, or -1 if 22718 * the item is not included in the array. [`R.equals`](#equals) is used to 22719 * determine equality. 22720 * 22721 * @func 22722 * @memberOf R 22723 * @since v0.1.0 22724 * @category List 22725 * @sig a -> [a] -> Number 22726 * @param {*} target The item to find. 22727 * @param {Array} xs The array to search in. 22728 * @return {Number} the index of the target, or -1 if the target is not found. 22729 * @see R.indexOf, R.findLastIndex 22730 * @example 22731 * 22732 * R.lastIndexOf(3, [-1,3,3,0,1,2,3,4]); //=> 6 22733 * R.lastIndexOf(10, [1,2,3,4]); //=> -1 22734 */ 22735 22736 22737var lastIndexOf = 22738/*#__PURE__*/ 22739_curry2(function lastIndexOf(target, xs) { 22740 if (typeof xs.lastIndexOf === 'function' && !_isArray(xs)) { 22741 return xs.lastIndexOf(target); 22742 } else { 22743 var idx = xs.length - 1; 22744 22745 while (idx >= 0) { 22746 if (equals(xs[idx], target)) { 22747 return idx; 22748 } 22749 22750 idx -= 1; 22751 } 22752 22753 return -1; 22754 } 22755}); 22756 22757module.exports = lastIndexOf; 22758 22759/***/ }), 22760
vendor: 1,024 bytes, lines 22761-22800
22761/***/ "./node_modules/ramda/src/length.js": 22762/*!******************************************!*\ 22763 !*** ./node_modules/ramda/src/length.js ***! 22764 \******************************************/ 22765/***/ ((module, __unused_webpack_exports, __webpack_require__) => { 22766 22767var _curry1 = 22768/*#__PURE__*/ 22769__webpack_require__(/*! ./internal/_curry1.js */ "./node_modules/ramda/src/internal/_curry1.js"); 22770 22771var _isNumber = 22772/*#__PURE__*/ 22773__webpack_require__(/*! ./internal/_isNumber.js */ "./node_modules/ramda/src/internal/_isNumber.js"); 22774/** 22775 * Returns the number of elements in the array by returning `list.length`. 22776 * 22777 * @func 22778 * @memberOf R 22779 * @since v0.3.0 22780 * @category List 22781 * @sig [a] -> Number 22782 * @param {Array} list The array to inspect. 22783 * @return {Number} The length of the array. 22784 * @example 22785 * 22786 * R.length([]); //=> 0 22787 * R.length([1, 2, 3]); //=> 3 22788 */ 22789 22790 22791var length = 22792/*#__PURE__*/ 22793_curry1(function length(list) { 22794 return list != null && _isNumber(list.length) ? list.length : NaN; 22795}); 22796 22797module.exports = length; 22798 22799/***/ }), 22800
vendor: 1,538 bytes, lines 22801-22854
22801/***/ "./node_modules/ramda/src/lens.js": 22802/*!****************************************!*\ 22803 !*** ./node_modules/ramda/src/lens.js ***! 22804 \****************************************/ 22805/***/ ((module, __unused_webpack_exports, __webpack_require__) => { 22806 22807var _curry2 = 22808/*#__PURE__*/ 22809__webpack_require__(/*! ./internal/_curry2.js */ "./node_modules/ramda/src/internal/_curry2.js"); 22810 22811var map = 22812/*#__PURE__*/ 22813__webpack_require__(/*! ./map.js */ "./node_modules/ramda/src/map.js"); 22814/** 22815 * Returns a lens for the given getter and setter functions. The getter "gets" 22816 * the value of the focus; the setter "sets" the value of the focus. The setter 22817 * should not mutate the data structure. 22818 * 22819 * @func 22820 * @memberOf R 22821 * @since v0.8.0 22822 * @category Object 22823 * @typedefn Lens s a = Functor f => (a -> f a) -> s -> f s 22824 * @sig (s -> a) -> ((a, s) -> s) -> Lens s a 22825 * @param {Function} getter 22826 * @param {Function} setter 22827 * @return {Lens} 22828 * @see R.view, R.set, R.over, R.lensIndex, R.lensProp 22829 * @example 22830 * 22831 * const xLens = R.lens(R.prop('x'), R.assoc('x')); 22832 * 22833 * R.view(xLens, {x: 1, y: 2}); //=> 1 22834 * R.set(xLens, 4, {x: 1, y: 2}); //=> {x: 4, y: 2} 22835 * R.over(xLens, R.negate, {x: 1, y: 2}); //=> {x: -1, y: 2} 22836 */ 22837 22838 22839var lens = 22840/*#__PURE__*/ 22841_curry2(function lens(getter, setter) { 22842 return function (toFunctorFn) { 22843 return function (target) { 22844 return map(function (focus) { 22845 return setter(focus, target); 22846 }, toFunctorFn(getter(target))); 22847 }; 22848 }; 22849}); 22850 22851module.exports = lens; 22852 22853/***/ }), 22854
vendor: 1,402 bytes, lines 22855-22907
22855/***/ "./node_modules/ramda/src/lensIndex.js": 22856/*!*********************************************!*\ 22857 !*** ./node_modules/ramda/src/lensIndex.js ***! 22858 \*********************************************/ 22859/***/ ((module, __unused_webpack_exports, __webpack_require__) => { 22860 22861var _curry1 = 22862/*#__PURE__*/ 22863__webpack_require__(/*! ./internal/_curry1.js */ "./node_modules/ramda/src/internal/_curry1.js"); 22864 22865var lens = 22866/*#__PURE__*/ 22867__webpack_require__(/*! ./lens.js */ "./node_modules/ramda/src/lens.js"); 22868 22869var nth = 22870/*#__PURE__*/ 22871__webpack_require__(/*! ./nth.js */ "./node_modules/ramda/src/nth.js"); 22872 22873var update = 22874/*#__PURE__*/ 22875__webpack_require__(/*! ./update.js */ "./node_modules/ramda/src/update.js"); 22876/** 22877 * Returns a lens whose focus is the specified index. 22878 * 22879 * @func 22880 * @memberOf R 22881 * @since v0.14.0 22882 * @category Object 22883 * @typedefn Lens s a = Functor f => (a -> f a) -> s -> f s 22884 * @sig Number -> Lens s a 22885 * @param {Number} n 22886 * @return {Lens} 22887 * @see R.view, R.set, R.over, R.nth 22888 * @example 22889 * 22890 * const headLens = R.lensIndex(0); 22891 * 22892 * R.view(headLens, ['a', 'b', 'c']); //=> 'a' 22893 * R.set(headLens, 'x', ['a', 'b', 'c']); //=> ['x', 'b', 'c'] 22894 * R.over(headLens, R.toUpper, ['a', 'b', 'c']); //=> ['A', 'b', 'c'] 22895 */ 22896 22897 22898var lensIndex = 22899/*#__PURE__*/ 22900_curry1(function lensIndex(n) { 22901 return lens(nth(n), update(n)); 22902}); 22903 22904module.exports = lensIndex; 22905 22906/***/ }), 22907
vendor: 1,573 bytes, lines 22908-22964
22908/***/ "./node_modules/ramda/src/lensPath.js": 22909/*!********************************************!*\ 22910 !*** ./node_modules/ramda/src/lensPath.js ***! 22911 \********************************************/ 22912/***/ ((module, __unused_webpack_exports, __webpack_require__) => { 22913 22914var _curry1 = 22915/*#__PURE__*/ 22916__webpack_require__(/*! ./internal/_curry1.js */ "./node_modules/ramda/src/internal/_curry1.js"); 22917 22918var assocPath = 22919/*#__PURE__*/ 22920__webpack_require__(/*! ./assocPath.js */ "./node_modules/ramda/src/assocPath.js"); 22921 22922var lens = 22923/*#__PURE__*/ 22924__webpack_require__(/*! ./lens.js */ "./node_modules/ramda/src/lens.js"); 22925 22926var path = 22927/*#__PURE__*/ 22928__webpack_require__(/*! ./path.js */ "./node_modules/ramda/src/path.js"); 22929/** 22930 * Returns a lens whose focus is the specified path. 22931 * 22932 * @func 22933 * @memberOf R 22934 * @since v0.19.0 22935 * @category Object 22936 * @typedefn Idx = String | Int | Symbol 22937 * @typedefn Lens s a = Functor f => (a -> f a) -> s -> f s 22938 * @sig [Idx] -> Lens s a 22939 * @param {Array} path The path to use. 22940 * @return {Lens} 22941 * @see R.view, R.set, R.over 22942 * @example 22943 * 22944 * const xHeadYLens = R.lensPath(['x', 0, 'y']); 22945 * 22946 * R.view(xHeadYLens, {x: [{y: 2, z: 3}, {y: 4, z: 5}]}); 22947 * //=> 2 22948 * R.set(xHeadYLens, 1, {x: [{y: 2, z: 3}, {y: 4, z: 5}]}); 22949 * //=> {x: [{y: 1, z: 3}, {y: 4, z: 5}]} 22950 * R.over(xHeadYLens, R.negate, {x: [{y: 2, z: 3}, {y: 4, z: 5}]}); 22951 * //=> {x: [{y: -2, z: 3}, {y: 4, z: 5}]} 22952 */ 22953 22954 22955var lensPath = 22956/*#__PURE__*/ 22957_curry1(function lensPath(p) { 22958 return lens(path(p), assocPath(p)); 22959}); 22960 22961module.exports = lensPath; 22962 22963/***/ }), 22964
vendor: 1,364 bytes, lines 22965-23017
22965/***/ "./node_modules/ramda/src/lensProp.js": 22966/*!********************************************!*\ 22967 !*** ./node_modules/ramda/src/lensProp.js ***! 22968 \********************************************/ 22969/***/ ((module, __unused_webpack_exports, __webpack_require__) => { 22970 22971var _curry1 = 22972/*#__PURE__*/ 22973__webpack_require__(/*! ./internal/_curry1.js */ "./node_modules/ramda/src/internal/_curry1.js"); 22974 22975var assoc = 22976/*#__PURE__*/ 22977__webpack_require__(/*! ./assoc.js */ "./node_modules/ramda/src/assoc.js"); 22978 22979var lens = 22980/*#__PURE__*/ 22981__webpack_require__(/*! ./lens.js */ "./node_modules/ramda/src/lens.js"); 22982 22983var prop = 22984/*#__PURE__*/ 22985__webpack_require__(/*! ./prop.js */ "./node_modules/ramda/src/prop.js"); 22986/** 22987 * Returns a lens whose focus is the specified property. 22988 * 22989 * @func 22990 * @memberOf R 22991 * @since v0.14.0 22992 * @category Object 22993 * @typedefn Lens s a = Functor f => (a -> f a) -> s -> f s 22994 * @sig String -> Lens s a 22995 * @param {String} k 22996 * @return {Lens} 22997 * @see R.view, R.set, R.over 22998 * @example 22999 * 23000 * const xLens = R.lensProp('x'); 23001 * 23002 * R.view(xLens, {x: 1, y: 2}); //=> 1 23003 * R.set(xLens, 4, {x: 1, y: 2}); //=> {x: 4, y: 2} 23004 * R.over(xLens, R.negate, {x: 1, y: 2}); //=> {x: -1, y: 2} 23005 */ 23006 23007 23008var lensProp = 23009/*#__PURE__*/ 23010_curry1(function lensProp(k) { 23011 return lens(prop(k), assoc(k)); 23012}); 23013 23014module.exports = lensProp; 23015 23016/***/ }), 23017
vendor: 1,395 bytes, lines 23018-23064
23018/***/ "./node_modules/ramda/src/lift.js": 23019/*!****************************************!*\ 23020 !*** ./node_modules/ramda/src/lift.js ***! 23021 \****************************************/ 23022/***/ ((module, __unused_webpack_exports, __webpack_require__) => { 23023 23024var _curry1 = 23025/*#__PURE__*/ 23026__webpack_require__(/*! ./internal/_curry1.js */ "./node_modules/ramda/src/internal/_curry1.js"); 23027 23028var liftN = 23029/*#__PURE__*/ 23030__webpack_require__(/*! ./liftN.js */ "./node_modules/ramda/src/liftN.js"); 23031/** 23032 * "lifts" a function of arity >= 1 so that it may "map over" a list, Function or other 23033 * object that satisfies the [FantasyLand Apply spec](https://github.com/fantasyland/fantasy-land#apply). 23034 * 23035 * @func 23036 * @memberOf R 23037 * @since v0.7.0 23038 * @category Function 23039 * @sig (*... -> *) -> ([*]... -> [*]) 23040 * @param {Function} fn The function to lift into higher context 23041 * @return {Function} The lifted function. 23042 * @see R.liftN 23043 * @example 23044 * 23045 * const madd3 = R.lift((a, b, c) => a + b + c); 23046 * 23047 * madd3([100, 200], [30, 40], [5, 6, 7]); //=> [135, 136, 137, 145, 146, 147, 235, 236, 237, 245, 246, 247] 23048 * 23049 * const madd5 = R.lift((a, b, c, d, e) => a + b + c + d + e); 23050 * 23051 * madd5([10, 20], [1], [2, 3], [4], [100, 200]); //=> [117, 217, 118, 218, 127, 227, 128, 228] 23052 */ 23053 23054 23055var lift = 23056/*#__PURE__*/ 23057_curry1(function lift(fn) { 23058 return liftN(fn.length, fn); 23059}); 23060 23061module.exports = lift; 23062 23063/***/ }), 23064
vendor: 1,691 bytes, lines 23065-23121
23065/***/ "./node_modules/ramda/src/liftN.js": 23066/*!*****************************************!*\ 23067 !*** ./node_modules/ramda/src/liftN.js ***! 23068 \*****************************************/ 23069/***/ ((module, __unused_webpack_exports, __webpack_require__) => { 23070 23071var _curry2 = 23072/*#__PURE__*/ 23073__webpack_require__(/*! ./internal/_curry2.js */ "./node_modules/ramda/src/internal/_curry2.js"); 23074 23075var _reduce = 23076/*#__PURE__*/ 23077__webpack_require__(/*! ./internal/_reduce.js */ "./node_modules/ramda/src/internal/_reduce.js"); 23078 23079var ap = 23080/*#__PURE__*/ 23081__webpack_require__(/*! ./ap.js */ "./node_modules/ramda/src/ap.js"); 23082 23083var curryN = 23084/*#__PURE__*/ 23085__webpack_require__(/*! ./curryN.js */ "./node_modules/ramda/src/curryN.js"); 23086 23087var map = 23088/*#__PURE__*/ 23089__webpack_require__(/*! ./map.js */ "./node_modules/ramda/src/map.js"); 23090/** 23091 * "lifts" a function to be the specified arity, so that it may "map over" that 23092 * many lists, Functions or other objects that satisfy the [FantasyLand Apply spec](https://github.com/fantasyland/fantasy-land#apply). 23093 * 23094 * @func 23095 * @memberOf R 23096 * @since v0.7.0 23097 * @category Function 23098 * @sig Number -> (*... -> *) -> ([*]... -> [*]) 23099 * @param {Function} fn The function to lift into higher context 23100 * @return {Function} The lifted function. 23101 * @see R.lift, R.ap 23102 * @example 23103 * 23104 * const madd3 = R.liftN(3, (...args) => R.sum(args)); 23105 * madd3([1,2,3], [1,2,3], [1]); //=> [3, 4, 5, 4, 5, 6, 5, 6, 7] 23106 */ 23107 23108 23109var liftN = 23110/*#__PURE__*/ 23111_curry2(function liftN(arity, fn) { 23112 var lifted = curryN(arity, fn); 23113 return curryN(arity, function () { 23114 return _reduce(ap, map(lifted, arguments[0]), Array.prototype.slice.call(arguments, 1)); 23115 }); 23116}); 23117 23118module.exports = liftN; 23119 23120/***/ }), 23121
vendor: 911 bytes, lines 23122-23163
23122/***/ "./node_modules/ramda/src/lt.js": 23123/*!**************************************!*\ 23124 !*** ./node_modules/ramda/src/lt.js ***! 23125 \**************************************/ 23126/***/ ((module, __unused_webpack_exports, __webpack_require__) => { 23127 23128var _curry2 = 23129/*#__PURE__*/ 23130__webpack_require__(/*! ./internal/_curry2.js */ "./node_modules/ramda/src/internal/_curry2.js"); 23131/** 23132 * Returns `true` if the first argument is less than the second; `false` 23133 * otherwise. 23134 * 23135 * @func 23136 * @memberOf R 23137 * @since v0.1.0 23138 * @category Relation 23139 * @sig Ord a => a -> a -> Boolean 23140 * @param {*} a 23141 * @param {*} b 23142 * @return {Boolean} 23143 * @see R.gt 23144 * @example 23145 * 23146 * R.lt(2, 1); //=> false 23147 * R.lt(2, 2); //=> false 23148 * R.lt(2, 3); //=> true 23149 * R.lt('a', 'z'); //=> true 23150 * R.lt('z', 'a'); //=> false 23151 */ 23152 23153 23154var lt = 23155/*#__PURE__*/ 23156_curry2(function lt(a, b) { 23157 return a < b; 23158}); 23159 23160module.exports = lt; 23161 23162/***/ }), 23163
vendor: 946 bytes, lines 23164-23205
23164/***/ "./node_modules/ramda/src/lte.js": 23165/*!***************************************!*\ 23166 !*** ./node_modules/ramda/src/lte.js ***! 23167 \***************************************/ 23168/***/ ((module, __unused_webpack_exports, __webpack_require__) => { 23169 23170var _curry2 = 23171/*#__PURE__*/ 23172__webpack_require__(/*! ./internal/_curry2.js */ "./node_modules/ramda/src/internal/_curry2.js"); 23173/** 23174 * Returns `true` if the first argument is less than or equal to the second; 23175 * `false` otherwise. 23176 * 23177 * @func 23178 * @memberOf R 23179 * @since v0.1.0 23180 * @category Relation 23181 * @sig Ord a => a -> a -> Boolean 23182 * @param {Number} a 23183 * @param {Number} b 23184 * @return {Boolean} 23185 * @see R.gte 23186 * @example 23187 * 23188 * R.lte(2, 1); //=> false 23189 * R.lte(2, 2); //=> true 23190 * R.lte(2, 3); //=> true 23191 * R.lte('a', 'z'); //=> true 23192 * R.lte('z', 'a'); //=> false 23193 */ 23194 23195 23196var lte = 23197/*#__PURE__*/ 23198_curry2(function lte(a, b) { 23199 return a <= b; 23200}); 23201 23202module.exports = lte; 23203 23204/***/ }), 23205
vendor: 2,888 bytes, lines 23206-23301
23206/***/ "./node_modules/ramda/src/map.js": 23207/*!***************************************!*\ 23208 !*** ./node_modules/ramda/src/map.js ***! 23209 \***************************************/ 23210/***/ ((module, __unused_webpack_exports, __webpack_require__) => { 23211 23212var _curry2 = 23213/*#__PURE__*/ 23214__webpack_require__(/*! ./internal/_curry2.js */ "./node_modules/ramda/src/internal/_curry2.js"); 23215 23216var _dispatchable = 23217/*#__PURE__*/ 23218__webpack_require__(/*! ./internal/_dispatchable.js */ "./node_modules/ramda/src/internal/_dispatchable.js"); 23219 23220var _map = 23221/*#__PURE__*/ 23222__webpack_require__(/*! ./internal/_map.js */ "./node_modules/ramda/src/internal/_map.js"); 23223 23224var _reduce = 23225/*#__PURE__*/ 23226__webpack_require__(/*! ./internal/_reduce.js */ "./node_modules/ramda/src/internal/_reduce.js"); 23227 23228var _xmap = 23229/*#__PURE__*/ 23230__webpack_require__(/*! ./internal/_xmap.js */ "./node_modules/ramda/src/internal/_xmap.js"); 23231 23232var curryN = 23233/*#__PURE__*/ 23234__webpack_require__(/*! ./curryN.js */ "./node_modules/ramda/src/curryN.js"); 23235 23236var keys = 23237/*#__PURE__*/ 23238__webpack_require__(/*! ./keys.js */ "./node_modules/ramda/src/keys.js"); 23239/** 23240 * Takes a function and 23241 * a [functor](https://github.com/fantasyland/fantasy-land#functor), 23242 * applies the function to each of the functor's values, and returns 23243 * a functor of the same shape. 23244 * 23245 * Ramda provides suitable `map` implementations for `Array` and `Object`, 23246 * so this function may be applied to `[1, 2, 3]` or `{x: 1, y: 2, z: 3}`. 23247 * 23248 * Dispatches to the `map` method of the second argument, if present. 23249 * 23250 * Acts as a transducer if a transformer is given in list position. 23251 * 23252 * Also treats functions as functors and will compose them together. 23253 * 23254 * @func 23255 * @memberOf R 23256 * @since v0.1.0 23257 * @category List 23258 * @sig Functor f => (a -> b) -> f a -> f b 23259 * @param {Function} fn The function to be called on every element of the input `list`. 23260 * @param {Array} list The list to be iterated over. 23261 * @return {Array} The new list. 23262 * @see R.transduce, R.addIndex, R.pluck, R.project 23263 * @example 23264 * 23265 * const double = x => x * 2; 23266 * 23267 * R.map(double, [1, 2, 3]); //=> [2, 4, 6] 23268 * 23269 * R.map(double, {x: 1, y: 2, z: 3}); //=> {x: 2, y: 4, z: 6} 23270 * @symb R.map(f, [a, b]) = [f(a), f(b)] 23271 * @symb R.map(f, { x: a, y: b }) = { x: f(a), y: f(b) } 23272 * @symb R.map(f, functor_o) = functor_o.map(f) 23273 */ 23274 23275 23276var map = 23277/*#__PURE__*/ 23278_curry2( 23279/*#__PURE__*/ 23280_dispatchable(['fantasy-land/map', 'map'], _xmap, function map(fn, functor) { 23281 switch (Object.prototype.toString.call(functor)) { 23282 case '[object Function]': 23283 return curryN(functor.length, function () { 23284 return fn.call(this, functor.apply(this, arguments)); 23285 }); 23286 23287 case '[object Object]': 23288 return _reduce(function (acc, key) { 23289 acc[key] = fn(functor[key]); 23290 return acc; 23291 }, {}, keys(functor)); 23292 23293 default: 23294 return _map(fn, functor); 23295 } 23296})); 23297 23298module.exports = map; 23299 23300/***/ }), 23301
vendor: 1,878 bytes, lines 23302-23367
23302/***/ "./node_modules/ramda/src/mapAccum.js": 23303/*!********************************************!*\ 23304 !*** ./node_modules/ramda/src/mapAccum.js ***! 23305 \********************************************/ 23306/***/ ((module, __unused_webpack_exports, __webpack_require__) => { 23307 23308var _curry3 = 23309/*#__PURE__*/ 23310__webpack_require__(/*! ./internal/_curry3.js */ "./node_modules/ramda/src/internal/_curry3.js"); 23311/** 23312 * The `mapAccum` function behaves like a combination of map and reduce; it 23313 * applies a function to each element of a list, passing an accumulating 23314 * parameter from left to right, and returning a final value of this 23315 * accumulator together with the new list. 23316 * 23317 * The iterator function receives two arguments, *acc* and *value*, and should 23318 * return a tuple *[acc, value]*. 23319 * 23320 * @func 23321 * @memberOf R 23322 * @since v0.10.0 23323 * @category List 23324 * @sig ((acc, x) -> (acc, y)) -> acc -> [x] -> (acc, [y]) 23325 * @param {Function} fn The function to be called on every element of the input `list`. 23326 * @param {*} acc The accumulator value. 23327 * @param {Array} list The list to iterate over. 23328 * @return {*} The final, accumulated value. 23329 * @see R.scan, R.addIndex, R.mapAccumRight 23330 * @example 23331 * 23332 * const digits = ['1', '2', '3', '4']; 23333 * const appender = (a, b) => [a + b, a + b]; 23334 * 23335 * R.mapAccum(appender, 0, digits); //=> ['01234', ['01', '012', '0123', '01234']] 23336 * @symb R.mapAccum(f, a, [b, c, d]) = [ 23337 * f(f(f(a, b)[0], c)[0], d)[0], 23338 * [ 23339 * f(a, b)[1], 23340 * f(f(a, b)[0], c)[1], 23341 * f(f(f(a, b)[0], c)[0], d)[1] 23342 * ] 23343 * ] 23344 */ 23345 23346 23347var mapAccum = 23348/*#__PURE__*/ 23349_curry3(function mapAccum(fn, acc, list) { 23350 var idx = 0; 23351 var len = list.length; 23352 var result = []; 23353 var tuple = [acc]; 23354 23355 while (idx < len) { 23356 tuple = fn(tuple[0], list[idx]); 23357 result[idx] = tuple[1]; 23358 idx += 1; 23359 } 23360 23361 return [tuple[0], result]; 23362}); 23363 23364module.exports = mapAccum; 23365 23366/***/ }), 23367
vendor: 2,012 bytes, lines 23368-23435
23368/***/ "./node_modules/ramda/src/mapAccumRight.js": 23369/*!*************************************************!*\ 23370 !*** ./node_modules/ramda/src/mapAccumRight.js ***! 23371 \*************************************************/ 23372/***/ ((module, __unused_webpack_exports, __webpack_require__) => { 23373 23374var _curry3 = 23375/*#__PURE__*/ 23376__webpack_require__(/*! ./internal/_curry3.js */ "./node_modules/ramda/src/internal/_curry3.js"); 23377/** 23378 * The `mapAccumRight` function behaves like a combination of map and reduce; it 23379 * applies a function to each element of a list, passing an accumulating 23380 * parameter from right to left, and returning a final value of this 23381 * accumulator together with the new list. 23382 * 23383 * Similar to [`mapAccum`](#mapAccum), except moves through the input list from 23384 * the right to the left. 23385 * 23386 * The iterator function receives two arguments, *acc* and *value*, and should 23387 * return a tuple *[acc, value]*. 23388 * 23389 * @func 23390 * @memberOf R 23391 * @since v0.10.0 23392 * @category List 23393 * @sig ((acc, x) -> (acc, y)) -> acc -> [x] -> (acc, [y]) 23394 * @param {Function} fn The function to be called on every element of the input `list`. 23395 * @param {*} acc The accumulator value. 23396 * @param {Array} list The list to iterate over. 23397 * @return {*} The final, accumulated value. 23398 * @see R.addIndex, R.mapAccum 23399 * @example 23400 * 23401 * const digits = ['1', '2', '3', '4']; 23402 * const appender = (a, b) => [b + a, b + a]; 23403 * 23404 * R.mapAccumRight(appender, 5, digits); //=> ['12345', ['12345', '2345', '345', '45']] 23405 * @symb R.mapAccumRight(f, a, [b, c, d]) = [ 23406 * f(f(f(a, d)[0], c)[0], b)[0], 23407 * [ 23408 * f(a, d)[1], 23409 * f(f(a, d)[0], c)[1], 23410 * f(f(f(a, d)[0], c)[0], b)[1] 23411 * ] 23412 * ] 23413 */ 23414 23415 23416var mapAccumRight = 23417/*#__PURE__*/ 23418_curry3(function mapAccumRight(fn, acc, list) { 23419 var idx = list.length - 1; 23420 var result = []; 23421 var tuple = [acc]; 23422 23423 while (idx >= 0) { 23424 tuple = fn(tuple[0], list[idx]); 23425 result[idx] = tuple[1]; 23426 idx -= 1; 23427 } 23428 23429 return [tuple[0], result]; 23430}); 23431 23432module.exports = mapAccumRight; 23433 23434/***/ }), 23435
vendor: 1,485 bytes, lines 23436-23488
23436/***/ "./node_modules/ramda/src/mapObjIndexed.js": 23437/*!*************************************************!*\ 23438 !*** ./node_modules/ramda/src/mapObjIndexed.js ***! 23439 \*************************************************/ 23440/***/ ((module, __unused_webpack_exports, __webpack_require__) => { 23441 23442var _curry2 = 23443/*#__PURE__*/ 23444__webpack_require__(/*! ./internal/_curry2.js */ "./node_modules/ramda/src/internal/_curry2.js"); 23445 23446var _reduce = 23447/*#__PURE__*/ 23448__webpack_require__(/*! ./internal/_reduce.js */ "./node_modules/ramda/src/internal/_reduce.js"); 23449 23450var keys = 23451/*#__PURE__*/ 23452__webpack_require__(/*! ./keys.js */ "./node_modules/ramda/src/keys.js"); 23453/** 23454 * An Object-specific version of [`map`](#map). The function is applied to three 23455 * arguments: *(value, key, obj)*. If only the value is significant, use 23456 * [`map`](#map) instead. 23457 * 23458 * @func 23459 * @memberOf R 23460 * @since v0.9.0 23461 * @category Object 23462 * @sig ((*, String, Object) -> *) -> Object -> Object 23463 * @param {Function} fn 23464 * @param {Object} obj 23465 * @return {Object} 23466 * @see R.map 23467 * @example 23468 * 23469 * const xyz = { x: 1, y: 2, z: 3 }; 23470 * const prependKeyAndDouble = (num, key, obj) => key + (num * 2); 23471 * 23472 * R.mapObjIndexed(prependKeyAndDouble, xyz); //=> { x: 'x2', y: 'y4', z: 'z6' } 23473 */ 23474 23475 23476var mapObjIndexed = 23477/*#__PURE__*/ 23478_curry2(function mapObjIndexed(fn, obj) { 23479 return _reduce(function (acc, key) { 23480 acc[key] = fn(obj[key], key, obj); 23481 return acc; 23482 }, {}, keys(obj)); 23483}); 23484 23485module.exports = mapObjIndexed; 23486 23487/***/ }), 23488
vendor: 1,321 bytes, lines 23489-23530
23489/***/ "./node_modules/ramda/src/match.js": 23490/*!*****************************************!*\ 23491 !*** ./node_modules/ramda/src/match.js ***! 23492 \*****************************************/ 23493/***/ ((module, __unused_webpack_exports, __webpack_require__) => { 23494 23495var _curry2 = 23496/*#__PURE__*/ 23497__webpack_require__(/*! ./internal/_curry2.js */ "./node_modules/ramda/src/internal/_curry2.js"); 23498/** 23499 * Tests a regular expression against a String. Note that this function will 23500 * return an empty array when there are no matches. This differs from 23501 * [`String.prototype.match`](https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/String/match) 23502 * which returns `null` when there are no matches. 23503 * 23504 * @func 23505 * @memberOf R 23506 * @since v0.1.0 23507 * @category String 23508 * @sig RegExp -> String -> [String | Undefined] 23509 * @param {RegExp} rx A regular expression. 23510 * @param {String} str The string to match against 23511 * @return {Array} The list of matches or empty array. 23512 * @see R.test 23513 * @example 23514 * 23515 * R.match(/([a-z]a)/g, 'bananas'); //=> ['ba', 'na', 'na'] 23516 * R.match(/a/, 'b'); //=> [] 23517 * R.match(/a/, null); //=> TypeError: null does not have a method named "match" 23518 */ 23519 23520 23521var match = 23522/*#__PURE__*/ 23523_curry2(function match(rx, str) { 23524 return str.match(rx) || []; 23525}); 23526 23527module.exports = match; 23528 23529/***/ }), 23530
vendor: 1,757 bytes, lines 23531-23596
23531/***/ "./node_modules/ramda/src/mathMod.js": 23532/*!*******************************************!*\ 23533 !*** ./node_modules/ramda/src/mathMod.js ***! 23534 \*******************************************/ 23535/***/ ((module, __unused_webpack_exports, __webpack_require__) => { 23536 23537var _curry2 = 23538/*#__PURE__*/ 23539__webpack_require__(/*! ./internal/_curry2.js */ "./node_modules/ramda/src/internal/_curry2.js"); 23540 23541var _isInteger = 23542/*#__PURE__*/ 23543__webpack_require__(/*! ./internal/_isInteger.js */ "./node_modules/ramda/src/internal/_isInteger.js"); 23544/** 23545 * `mathMod` behaves like the modulo operator should mathematically, unlike the 23546 * `%` operator (and by extension, [`R.modulo`](#modulo)). So while 23547 * `-17 % 5` is `-2`, `mathMod(-17, 5)` is `3`. `mathMod` requires Integer 23548 * arguments, and returns NaN when the modulus is zero or negative. 23549 * 23550 * @func 23551 * @memberOf R 23552 * @since v0.3.0 23553 * @category Math 23554 * @sig Number -> Number -> Number 23555 * @param {Number} m The dividend. 23556 * @param {Number} p the modulus. 23557 * @return {Number} The result of `b mod a`. 23558 * @see R.modulo 23559 * @example 23560 * 23561 * R.mathMod(-17, 5); //=> 3 23562 * R.mathMod(17, 5); //=> 2 23563 * R.mathMod(17, -5); //=> NaN 23564 * R.mathMod(17, 0); //=> NaN 23565 * R.mathMod(17.2, 5); //=> NaN 23566 * R.mathMod(17, 5.3); //=> NaN 23567 * 23568 * const clock = R.mathMod(R.__, 12); 23569 * clock(15); //=> 3 23570 * clock(24); //=> 0 23571 * 23572 * const seventeenMod = R.mathMod(17); 23573 * seventeenMod(3); //=> 2 23574 * seventeenMod(4); //=> 1 23575 * seventeenMod(10); //=> 7 23576 */ 23577 23578 23579var mathMod = 23580/*#__PURE__*/ 23581_curry2(function mathMod(m, p) { 23582 if (!_isInteger(m)) { 23583 return NaN; 23584 } 23585 23586 if (!_isInteger(p) || p < 1) { 23587 return NaN; 23588 } 23589 23590 return (m % p + p) % p; 23591}); 23592 23593module.exports = mathMod; 23594 23595/***/ }), 23596
vendor: 788 bytes, lines 23597-23634
23597/***/ "./node_modules/ramda/src/max.js": 23598/*!***************************************!*\ 23599 !*** ./node_modules/ramda/src/max.js ***! 23600 \***************************************/ 23601/***/ ((module, __unused_webpack_exports, __webpack_require__) => { 23602 23603var _curry2 = 23604/*#__PURE__*/ 23605__webpack_require__(/*! ./internal/_curry2.js */ "./node_modules/ramda/src/internal/_curry2.js"); 23606/** 23607 * Returns the larger of its two arguments. 23608 * 23609 * @func 23610 * @memberOf R 23611 * @since v0.1.0 23612 * @category Relation 23613 * @sig Ord a => a -> a -> a 23614 * @param {*} a 23615 * @param {*} b 23616 * @return {*} 23617 * @see R.maxBy, R.min 23618 * @example 23619 * 23620 * R.max(789, 123); //=> 789 23621 * R.max('a', 'b'); //=> 'b' 23622 */ 23623 23624 23625var max = 23626/*#__PURE__*/ 23627_curry2(function max(a, b) { 23628 return b > a ? b : a; 23629}); 23630 23631module.exports = max; 23632 23633/***/ }), 23634
vendor: 1,100 bytes, lines 23635-23679
23635/***/ "./node_modules/ramda/src/maxBy.js": 23636/*!*****************************************!*\ 23637 !*** ./node_modules/ramda/src/maxBy.js ***! 23638 \*****************************************/ 23639/***/ ((module, __unused_webpack_exports, __webpack_require__) => { 23640 23641var _curry3 = 23642/*#__PURE__*/ 23643__webpack_require__(/*! ./internal/_curry3.js */ "./node_modules/ramda/src/internal/_curry3.js"); 23644/** 23645 * Takes a function and two values, and returns whichever value produces the 23646 * larger result when passed to the provided function. 23647 * 23648 * @func 23649 * @memberOf R 23650 * @since v0.8.0 23651 * @category Relation 23652 * @sig Ord b => (a -> b) -> a -> a -> a 23653 * @param {Function} f 23654 * @param {*} a 23655 * @param {*} b 23656 * @return {*} 23657 * @see R.max, R.minBy 23658 * @example 23659 * 23660 * // square :: Number -> Number 23661 * const square = n => n * n; 23662 * 23663 * R.maxBy(square, -3, 2); //=> -3 23664 * 23665 * R.reduce(R.maxBy(square), 0, [3, -5, 4, 1, -2]); //=> -5 23666 * R.reduce(R.maxBy(square), 0, []); //=> 0 23667 */ 23668 23669 23670var maxBy = 23671/*#__PURE__*/ 23672_curry3(function maxBy(f, a, b) { 23673 return f(b) > f(a) ? b : a; 23674}); 23675 23676module.exports = maxBy; 23677 23678/***/ }), 23679
vendor: 888 bytes, lines 23680-23720
23680/***/ "./node_modules/ramda/src/mean.js": 23681/*!****************************************!*\ 23682 !*** ./node_modules/ramda/src/mean.js ***! 23683 \****************************************/ 23684/***/ ((module, __unused_webpack_exports, __webpack_require__) => { 23685 23686var _curry1 = 23687/*#__PURE__*/ 23688__webpack_require__(/*! ./internal/_curry1.js */ "./node_modules/ramda/src/internal/_curry1.js"); 23689 23690var sum = 23691/*#__PURE__*/ 23692__webpack_require__(/*! ./sum.js */ "./node_modules/ramda/src/sum.js"); 23693/** 23694 * Returns the mean of the given list of numbers. 23695 * 23696 * @func 23697 * @memberOf R 23698 * @since v0.14.0 23699 * @category Math 23700 * @sig [Number] -> Number 23701 * @param {Array} list 23702 * @return {Number} 23703 * @see R.median 23704 * @example 23705 * 23706 * R.mean([2, 7, 9]); //=> 6 23707 * R.mean([]); //=> NaN 23708 */ 23709 23710 23711var mean = 23712/*#__PURE__*/ 23713_curry1(function mean(list) { 23714 return sum(list) / list.length; 23715}); 23716 23717module.exports = mean; 23718 23719/***/ }), 23720
vendor: 1,182 bytes, lines 23721-23772
23721/***/ "./node_modules/ramda/src/median.js": 23722/*!******************************************!*\ 23723 !*** ./node_modules/ramda/src/median.js ***! 23724 \******************************************/ 23725/***/ ((module, __unused_webpack_exports, __webpack_require__) => { 23726 23727var _curry1 = 23728/*#__PURE__*/ 23729__webpack_require__(/*! ./internal/_curry1.js */ "./node_modules/ramda/src/internal/_curry1.js"); 23730 23731var mean = 23732/*#__PURE__*/ 23733__webpack_require__(/*! ./mean.js */ "./node_modules/ramda/src/mean.js"); 23734/** 23735 * Returns the median of the given list of numbers. 23736 * 23737 * @func 23738 * @memberOf R 23739 * @since v0.14.0 23740 * @category Math 23741 * @sig [Number] -> Number 23742 * @param {Array} list 23743 * @return {Number} 23744 * @see R.mean 23745 * @example 23746 * 23747 * R.median([2, 9, 7]); //=> 7 23748 * R.median([7, 2, 10, 9]); //=> 8 23749 * R.median([]); //=> NaN 23750 */ 23751 23752 23753var median = 23754/*#__PURE__*/ 23755_curry1(function median(list) { 23756 var len = list.length; 23757 23758 if (len === 0) { 23759 return NaN; 23760 } 23761 23762 var width = 2 - len % 2; 23763 var idx = (len - width) / 2; 23764 return mean(Array.prototype.slice.call(list, 0).sort(function (a, b) { 23765 return a < b ? -1 : a > b ? 1 : 0; 23766 }).slice(idx, idx + width)); 23767}); 23768 23769module.exports = median; 23770 23771/***/ }), 23772
vendor: 2,031 bytes, lines 23773-23840
23773/***/ "./node_modules/ramda/src/memoizeWith.js": 23774/*!***********************************************!*\ 23775 !*** ./node_modules/ramda/src/memoizeWith.js ***! 23776 \***********************************************/ 23777/***/ ((module, __unused_webpack_exports, __webpack_require__) => { 23778 23779var _arity = 23780/*#__PURE__*/ 23781__webpack_require__(/*! ./internal/_arity.js */ "./node_modules/ramda/src/internal/_arity.js"); 23782 23783var _curry2 = 23784/*#__PURE__*/ 23785__webpack_require__(/*! ./internal/_curry2.js */ "./node_modules/ramda/src/internal/_curry2.js"); 23786 23787var _has = 23788/*#__PURE__*/ 23789__webpack_require__(/*! ./internal/_has.js */ "./node_modules/ramda/src/internal/_has.js"); 23790/** 23791 * Creates a new function that, when invoked, caches the result of calling `fn` 23792 * for a given argument set and returns the result. Subsequent calls to the 23793 * memoized `fn` with the same argument set will not result in an additional 23794 * call to `fn`; instead, the cached result for that set of arguments will be 23795 * returned. 23796 * 23797 * Care must be taken when implementing key generation to avoid key collision, 23798 * or if tracking references, memory leaks and mutating arguments. 23799 * 23800 * @func 23801 * @memberOf R 23802 * @since v0.24.0 23803 * @category Function 23804 * @sig (*... -> String) -> (*... -> a) -> (*... -> a) 23805 * @param {Function} fn The function to generate the cache key. 23806 * @param {Function} fn The function to memoize. 23807 * @return {Function} Memoized version of `fn`. 23808 * @example 23809 * 23810 * let count = 0; 23811 * const factorial = R.memoizeWith(Number, n => { 23812 * count += 1; 23813 * return R.product(R.range(1, n + 1)); 23814 * }); 23815 * factorial(5); //=> 120 23816 * factorial(5); //=> 120 23817 * factorial(5); //=> 120 23818 * count; //=> 1 23819 */ 23820 23821 23822var memoizeWith = 23823/*#__PURE__*/ 23824_curry2(function memoizeWith(mFn, fn) { 23825 var cache = {}; 23826 return _arity(fn.length, function () { 23827 var key = mFn.apply(this, arguments); 23828 23829 if (!_has(key, cache)) { 23830 cache[key] = fn.apply(this, arguments); 23831 } 23832 23833 return cache[key]; 23834 }); 23835}); 23836 23837module.exports = memoizeWith; 23838 23839/***/ }), 23840
vendor: 1,301 bytes, lines 23841-23884
23841/***/ "./node_modules/ramda/src/mergeAll.js": 23842/*!********************************************!*\ 23843 !*** ./node_modules/ramda/src/mergeAll.js ***! 23844 \********************************************/ 23845/***/ ((module, __unused_webpack_exports, __webpack_require__) => { 23846 23847var _objectAssign = 23848/*#__PURE__*/ 23849__webpack_require__(/*! ./internal/_objectAssign.js */ "./node_modules/ramda/src/internal/_objectAssign.js"); 23850 23851var _curry1 = 23852/*#__PURE__*/ 23853__webpack_require__(/*! ./internal/_curry1.js */ "./node_modules/ramda/src/internal/_curry1.js"); 23854/** 23855 * Creates one new object with the own properties from a list of objects. 23856 * If a key exists in more than one object, the value from the last 23857 * object it exists in will be used. 23858 * 23859 * @func 23860 * @memberOf R 23861 * @since v0.10.0 23862 * @category List 23863 * @sig [{k: v}] -> {k: v} 23864 * @param {Array} list An array of objects 23865 * @return {Object} A merged object. 23866 * @see R.reduce 23867 * @example 23868 * 23869 * R.mergeAll([{foo:1},{bar:2},{baz:3}]); //=> {foo:1,bar:2,baz:3} 23870 * R.mergeAll([{foo:1},{foo:2},{bar:2}]); //=> {foo:2,bar:2} 23871 * @symb R.mergeAll([{ x: 1 }, { y: 2 }, { z: 3 }]) = { x: 1, y: 2, z: 3 } 23872 */ 23873 23874 23875var mergeAll = 23876/*#__PURE__*/ 23877_curry1(function mergeAll(list) { 23878 return _objectAssign.apply(null, [{}].concat(list)); 23879}); 23880 23881module.exports = mergeAll; 23882 23883/***/ }), 23884
vendor: 1,553 bytes, lines 23885-23932
23885/***/ "./node_modules/ramda/src/mergeDeepLeft.js": 23886/*!*************************************************!*\ 23887 !*** ./node_modules/ramda/src/mergeDeepLeft.js ***! 23888 \*************************************************/ 23889/***/ ((module, __unused_webpack_exports, __webpack_require__) => { 23890 23891var _curry2 = 23892/*#__PURE__*/ 23893__webpack_require__(/*! ./internal/_curry2.js */ "./node_modules/ramda/src/internal/_curry2.js"); 23894 23895var mergeDeepWithKey = 23896/*#__PURE__*/ 23897__webpack_require__(/*! ./mergeDeepWithKey.js */ "./node_modules/ramda/src/mergeDeepWithKey.js"); 23898/** 23899 * Creates a new object with the own properties of the first object merged with 23900 * the own properties of the second object. If a key exists in both objects: 23901 * - and both values are objects, the two values will be recursively merged 23902 * - otherwise the value from the first object will be used. 23903 * 23904 * @func 23905 * @memberOf R 23906 * @since v0.24.0 23907 * @category Object 23908 * @sig {a} -> {a} -> {a} 23909 * @param {Object} lObj 23910 * @param {Object} rObj 23911 * @return {Object} 23912 * @see R.merge, R.mergeDeepRight, R.mergeDeepWith, R.mergeDeepWithKey 23913 * @example 23914 * 23915 * R.mergeDeepLeft({ name: 'fred', age: 10, contact: { email: '[email protected]' }}, 23916 * { age: 40, contact: { email: '[email protected]' }}); 23917 * //=> { name: 'fred', age: 10, contact: { email: '[email protected]' }} 23918 */ 23919 23920 23921var mergeDeepLeft = 23922/*#__PURE__*/ 23923_curry2(function mergeDeepLeft(lObj, rObj) { 23924 return mergeDeepWithKey(function (k, lVal, rVal) { 23925 return lVal; 23926 }, lObj, rObj); 23927}); 23928 23929module.exports = mergeDeepLeft; 23930 23931/***/ }), 23932
vendor: 1,562 bytes, lines 23933-23980
23933/***/ "./node_modules/ramda/src/mergeDeepRight.js": 23934/*!**************************************************!*\ 23935 !*** ./node_modules/ramda/src/mergeDeepRight.js ***! 23936 \**************************************************/ 23937/***/ ((module, __unused_webpack_exports, __webpack_require__) => { 23938 23939var _curry2 = 23940/*#__PURE__*/ 23941__webpack_require__(/*! ./internal/_curry2.js */ "./node_modules/ramda/src/internal/_curry2.js"); 23942 23943var mergeDeepWithKey = 23944/*#__PURE__*/ 23945__webpack_require__(/*! ./mergeDeepWithKey.js */ "./node_modules/ramda/src/mergeDeepWithKey.js"); 23946/** 23947 * Creates a new object with the own properties of the first object merged with 23948 * the own properties of the second object. If a key exists in both objects: 23949 * - and both values are objects, the two values will be recursively merged 23950 * - otherwise the value from the second object will be used. 23951 * 23952 * @func 23953 * @memberOf R 23954 * @since v0.24.0 23955 * @category Object 23956 * @sig {a} -> {a} -> {a} 23957 * @param {Object} lObj 23958 * @param {Object} rObj 23959 * @return {Object} 23960 * @see R.merge, R.mergeDeepLeft, R.mergeDeepWith, R.mergeDeepWithKey 23961 * @example 23962 * 23963 * R.mergeDeepRight({ name: 'fred', age: 10, contact: { email: '[email protected]' }}, 23964 * { age: 40, contact: { email: '[email protected]' }}); 23965 * //=> { name: 'fred', age: 40, contact: { email: '[email protected]' }} 23966 */ 23967 23968 23969var mergeDeepRight = 23970/*#__PURE__*/ 23971_curry2(function mergeDeepRight(lObj, rObj) { 23972 return mergeDeepWithKey(function (k, lVal, rVal) { 23973 return rVal; 23974 }, lObj, rObj); 23975}); 23976 23977module.exports = mergeDeepRight; 23978 23979/***/ }), 23980
vendor: 1,726 bytes, lines 23981-24034
23981/***/ "./node_modules/ramda/src/mergeDeepWith.js": 23982/*!*************************************************!*\ 23983 !*** ./node_modules/ramda/src/mergeDeepWith.js ***! 23984 \*************************************************/ 23985/***/ ((module, __unused_webpack_exports, __webpack_require__) => { 23986 23987var _curry3 = 23988/*#__PURE__*/ 23989__webpack_require__(/*! ./internal/_curry3.js */ "./node_modules/ramda/src/internal/_curry3.js"); 23990 23991var mergeDeepWithKey = 23992/*#__PURE__*/ 23993__webpack_require__(/*! ./mergeDeepWithKey.js */ "./node_modules/ramda/src/mergeDeepWithKey.js"); 23994/** 23995 * Creates a new object with the own properties of the two provided objects. 23996 * If a key exists in both objects: 23997 * - and both associated values are also objects then the values will be 23998 * recursively merged. 23999 * - otherwise the provided function is applied to associated values using the 24000 * resulting value as the new value associated with the key. 24001 * If a key only exists in one object, the value will be associated with the key 24002 * of the resulting object. 24003 * 24004 * @func 24005 * @memberOf R 24006 * @since v0.24.0 24007 * @category Object 24008 * @sig ((a, a) -> a) -> {a} -> {a} -> {a} 24009 * @param {Function} fn 24010 * @param {Object} lObj 24011 * @param {Object} rObj 24012 * @return {Object} 24013 * @see R.mergeWith, R.mergeDeepWithKey 24014 * @example 24015 * 24016 * R.mergeDeepWith(R.concat, 24017 * { a: true, c: { values: [10, 20] }}, 24018 * { b: true, c: { values: [15, 35] }}); 24019 * //=> { a: true, b: true, c: { values: [10, 20, 15, 35] }} 24020 */ 24021 24022 24023var mergeDeepWith = 24024/*#__PURE__*/ 24025_curry3(function mergeDeepWith(fn, lObj, rObj) { 24026 return mergeDeepWithKey(function (k, lVal, rVal) { 24027 return fn(lVal, rVal); 24028 }, lObj, rObj); 24029}); 24030 24031module.exports = mergeDeepWith; 24032 24033/***/ }), 24034
vendor: 2,131 bytes, lines 24035-24097
24035/***/ "./node_modules/ramda/src/mergeDeepWithKey.js": 24036/*!****************************************************!*\ 24037 !*** ./node_modules/ramda/src/mergeDeepWithKey.js ***! 24038 \****************************************************/ 24039/***/ ((module, __unused_webpack_exports, __webpack_require__) => { 24040 24041var _curry3 = 24042/*#__PURE__*/ 24043__webpack_require__(/*! ./internal/_curry3.js */ "./node_modules/ramda/src/internal/_curry3.js"); 24044 24045var _isObject = 24046/*#__PURE__*/ 24047__webpack_require__(/*! ./internal/_isObject.js */ "./node_modules/ramda/src/internal/_isObject.js"); 24048 24049var mergeWithKey = 24050/*#__PURE__*/ 24051__webpack_require__(/*! ./mergeWithKey.js */ "./node_modules/ramda/src/mergeWithKey.js"); 24052/** 24053 * Creates a new object with the own properties of the two provided objects. 24054 * If a key exists in both objects: 24055 * - and both associated values are also objects then the values will be 24056 * recursively merged. 24057 * - otherwise the provided function is applied to the key and associated values 24058 * using the resulting value as the new value associated with the key. 24059 * If a key only exists in one object, the value will be associated with the key 24060 * of the resulting object. 24061 * 24062 * @func 24063 * @memberOf R 24064 * @since v0.24.0 24065 * @category Object 24066 * @sig ((String, a, a) -> a) -> {a} -> {a} -> {a} 24067 * @param {Function} fn 24068 * @param {Object} lObj 24069 * @param {Object} rObj 24070 * @return {Object} 24071 * @see R.mergeWithKey, R.mergeDeepWith 24072 * @example 24073 * 24074 * let concatValues = (k, l, r) => k == 'values' ? R.concat(l, r) : r 24075 * R.mergeDeepWithKey(concatValues, 24076 * { a: true, c: { thing: 'foo', values: [10, 20] }}, 24077 * { b: true, c: { thing: 'bar', values: [15, 35] }}); 24078 * //=> { a: true, b: true, c: { thing: 'bar', values: [10, 20, 15, 35] }} 24079 */ 24080 24081 24082var mergeDeepWithKey = 24083/*#__PURE__*/ 24084_curry3(function mergeDeepWithKey(fn, lObj, rObj) { 24085 return mergeWithKey(function (k, lVal, rVal) { 24086 if (_isObject(lVal) && _isObject(rVal)) { 24087 return mergeDeepWithKey(fn, lVal, rVal); 24088 } else { 24089 return fn(k, lVal, rVal); 24090 } 24091 }, lObj, rObj); 24092}); 24093 24094module.exports = mergeDeepWithKey; 24095 24096/***/ }), 24097
vendor: 1,405 bytes, lines 24098-24145
24098/***/ "./node_modules/ramda/src/mergeLeft.js": 24099/*!*********************************************!*\ 24100 !*** ./node_modules/ramda/src/mergeLeft.js ***! 24101 \*********************************************/ 24102/***/ ((module, __unused_webpack_exports, __webpack_require__) => { 24103 24104var _objectAssign = 24105/*#__PURE__*/ 24106__webpack_require__(/*! ./internal/_objectAssign.js */ "./node_modules/ramda/src/internal/_objectAssign.js"); 24107 24108var _curry2 = 24109/*#__PURE__*/ 24110__webpack_require__(/*! ./internal/_curry2.js */ "./node_modules/ramda/src/internal/_curry2.js"); 24111/** 24112 * Create a new object with the own properties of the first object merged with 24113 * the own properties of the second object. If a key exists in both objects, 24114 * the value from the first object will be used. 24115 * 24116 * @func 24117 * @memberOf R 24118 * @since v0.26.0 24119 * @category Object 24120 * @sig {k: v} -> {k: v} -> {k: v} 24121 * @param {Object} l 24122 * @param {Object} r 24123 * @return {Object} 24124 * @see R.mergeRight, R.mergeDeepLeft, R.mergeWith, R.mergeWithKey 24125 * @example 24126 * 24127 * R.mergeLeft({ 'age': 40 }, { 'name': 'fred', 'age': 10 }); 24128 * //=> { 'name': 'fred', 'age': 40 } 24129 * 24130 * const resetToDefault = R.mergeLeft({x: 0}); 24131 * resetToDefault({x: 5, y: 2}); //=> {x: 0, y: 2} 24132 * @symb R.mergeLeft(a, b) = {...b, ...a} 24133 */ 24134 24135 24136var mergeLeft = 24137/*#__PURE__*/ 24138_curry2(function mergeLeft(l, r) { 24139 return _objectAssign({}, r, l); 24140}); 24141 24142module.exports = mergeLeft; 24143 24144/***/ }), 24145
vendor: 1,412 bytes, lines 24146-24193
24146/***/ "./node_modules/ramda/src/mergeRight.js": 24147/*!**********************************************!*\ 24148 !*** ./node_modules/ramda/src/mergeRight.js ***! 24149 \**********************************************/ 24150/***/ ((module, __unused_webpack_exports, __webpack_require__) => { 24151 24152var _objectAssign = 24153/*#__PURE__*/ 24154__webpack_require__(/*! ./internal/_objectAssign.js */ "./node_modules/ramda/src/internal/_objectAssign.js"); 24155 24156var _curry2 = 24157/*#__PURE__*/ 24158__webpack_require__(/*! ./internal/_curry2.js */ "./node_modules/ramda/src/internal/_curry2.js"); 24159/** 24160 * Create a new object with the own properties of the first object merged with 24161 * the own properties of the second object. If a key exists in both objects, 24162 * the value from the second object will be used. 24163 * 24164 * @func 24165 * @memberOf R 24166 * @since v0.26.0 24167 * @category Object 24168 * @sig {k: v} -> {k: v} -> {k: v} 24169 * @param {Object} l 24170 * @param {Object} r 24171 * @return {Object} 24172 * @see R.mergeLeft, R.mergeDeepRight, R.mergeWith, R.mergeWithKey 24173 * @example 24174 * 24175 * R.mergeRight({ 'name': 'fred', 'age': 10 }, { 'age': 40 }); 24176 * //=> { 'name': 'fred', 'age': 40 } 24177 * 24178 * const withDefaults = R.mergeRight({x: 0, y: 0}); 24179 * withDefaults({y: 2}); //=> {x: 0, y: 2} 24180 * @symb R.mergeRight(a, b) = {...a, ...b} 24181 */ 24182 24183 24184var mergeRight = 24185/*#__PURE__*/ 24186_curry2(function mergeRight(l, r) { 24187 return _objectAssign({}, l, r); 24188}); 24189 24190module.exports = mergeRight; 24191 24192/***/ }), 24193
vendor: 1,467 bytes, lines 24194-24243
24194/***/ "./node_modules/ramda/src/mergeWith.js": 24195/*!*********************************************!*\ 24196 !*** ./node_modules/ramda/src/mergeWith.js ***! 24197 \*********************************************/ 24198/***/ ((module, __unused_webpack_exports, __webpack_require__) => { 24199 24200var _curry3 = 24201/*#__PURE__*/ 24202__webpack_require__(/*! ./internal/_curry3.js */ "./node_modules/ramda/src/internal/_curry3.js"); 24203 24204var mergeWithKey = 24205/*#__PURE__*/ 24206__webpack_require__(/*! ./mergeWithKey.js */ "./node_modules/ramda/src/mergeWithKey.js"); 24207/** 24208 * Creates a new object with the own properties of the two provided objects. If 24209 * a key exists in both objects, the provided function is applied to the values 24210 * associated with the key in each object, with the result being used as the 24211 * value associated with the key in the returned object. 24212 * 24213 * @func 24214 * @memberOf R 24215 * @since v0.19.0 24216 * @category Object 24217 * @sig ((a, a) -> a) -> {a} -> {a} -> {a} 24218 * @param {Function} fn 24219 * @param {Object} l 24220 * @param {Object} r 24221 * @return {Object} 24222 * @see R.mergeDeepWith, R.merge, R.mergeWithKey 24223 * @example 24224 * 24225 * R.mergeWith(R.concat, 24226 * { a: true, values: [10, 20] }, 24227 * { b: true, values: [15, 35] }); 24228 * //=> { a: true, b: true, values: [10, 20, 15, 35] } 24229 */ 24230 24231 24232var mergeWith = 24233/*#__PURE__*/ 24234_curry3(function mergeWith(fn, l, r) { 24235 return mergeWithKey(function (_, _l, _r) { 24236 return fn(_l, _r); 24237 }, l, r); 24238}); 24239 24240module.exports = mergeWith; 24241 24242/***/ }), 24243
vendor: 1,892 bytes, lines 24244-24308
24244/***/ "./node_modules/ramda/src/mergeWithKey.js": 24245/*!************************************************!*\ 24246 !*** ./node_modules/ramda/src/mergeWithKey.js ***! 24247 \************************************************/ 24248/***/ ((module, __unused_webpack_exports, __webpack_require__) => { 24249 24250var _curry3 = 24251/*#__PURE__*/ 24252__webpack_require__(/*! ./internal/_curry3.js */ "./node_modules/ramda/src/internal/_curry3.js"); 24253 24254var _has = 24255/*#__PURE__*/ 24256__webpack_require__(/*! ./internal/_has.js */ "./node_modules/ramda/src/internal/_has.js"); 24257/** 24258 * Creates a new object with the own properties of the two provided objects. If 24259 * a key exists in both objects, the provided function is applied to the key 24260 * and the values associated with the key in each object, with the result being 24261 * used as the value associated with the key in the returned object. 24262 * 24263 * @func 24264 * @memberOf R 24265 * @since v0.19.0 24266 * @category Object 24267 * @sig ((String, a, a) -> a) -> {a} -> {a} -> {a} 24268 * @param {Function} fn 24269 * @param {Object} l 24270 * @param {Object} r 24271 * @return {Object} 24272 * @see R.mergeDeepWithKey, R.merge, R.mergeWith 24273 * @example 24274 * 24275 * let concatValues = (k, l, r) => k == 'values' ? R.concat(l, r) : r 24276 * R.mergeWithKey(concatValues, 24277 * { a: true, thing: 'foo', values: [10, 20] }, 24278 * { b: true, thing: 'bar', values: [15, 35] }); 24279 * //=> { a: true, b: true, thing: 'bar', values: [10, 20, 15, 35] } 24280 * @symb R.mergeWithKey(f, { x: 1, y: 2 }, { y: 5, z: 3 }) = { x: 1, y: f('y', 2, 5), z: 3 } 24281 */ 24282 24283 24284var mergeWithKey = 24285/*#__PURE__*/ 24286_curry3(function mergeWithKey(fn, l, r) { 24287 var result = {}; 24288 var k; 24289 24290 for (k in l) { 24291 if (_has(k, l)) { 24292 result[k] = _has(k, r) ? fn(k, l[k], r[k]) : l[k]; 24293 } 24294 } 24295 24296 for (k in r) { 24297 if (_has(k, r) && !_has(k, result)) { 24298 result[k] = r[k]; 24299 } 24300 } 24301 24302 return result; 24303}); 24304 24305module.exports = mergeWithKey; 24306 24307/***/ }), 24308
vendor: 789 bytes, lines 24309-24346
24309/***/ "./node_modules/ramda/src/min.js": 24310/*!***************************************!*\ 24311 !*** ./node_modules/ramda/src/min.js ***! 24312 \***************************************/ 24313/***/ ((module, __unused_webpack_exports, __webpack_require__) => { 24314 24315var _curry2 = 24316/*#__PURE__*/ 24317__webpack_require__(/*! ./internal/_curry2.js */ "./node_modules/ramda/src/internal/_curry2.js"); 24318/** 24319 * Returns the smaller of its two arguments. 24320 * 24321 * @func 24322 * @memberOf R 24323 * @since v0.1.0 24324 * @category Relation 24325 * @sig Ord a => a -> a -> a 24326 * @param {*} a 24327 * @param {*} b 24328 * @return {*} 24329 * @see R.minBy, R.max 24330 * @example 24331 * 24332 * R.min(789, 123); //=> 123 24333 * R.min('a', 'b'); //=> 'a' 24334 */ 24335 24336 24337var min = 24338/*#__PURE__*/ 24339_curry2(function min(a, b) { 24340 return b < a ? b : a; 24341}); 24342 24343module.exports = min; 24344 24345/***/ }), 24346
vendor: 1,120 bytes, lines 24347-24391
24347/***/ "./node_modules/ramda/src/minBy.js": 24348/*!*****************************************!*\ 24349 !*** ./node_modules/ramda/src/minBy.js ***! 24350 \*****************************************/ 24351/***/ ((module, __unused_webpack_exports, __webpack_require__) => { 24352 24353var _curry3 = 24354/*#__PURE__*/ 24355__webpack_require__(/*! ./internal/_curry3.js */ "./node_modules/ramda/src/internal/_curry3.js"); 24356/** 24357 * Takes a function and two values, and returns whichever value produces the 24358 * smaller result when passed to the provided function. 24359 * 24360 * @func 24361 * @memberOf R 24362 * @since v0.8.0 24363 * @category Relation 24364 * @sig Ord b => (a -> b) -> a -> a -> a 24365 * @param {Function} f 24366 * @param {*} a 24367 * @param {*} b 24368 * @return {*} 24369 * @see R.min, R.maxBy 24370 * @example 24371 * 24372 * // square :: Number -> Number 24373 * const square = n => n * n; 24374 * 24375 * R.minBy(square, -3, 2); //=> 2 24376 * 24377 * R.reduce(R.minBy(square), Infinity, [3, -5, 4, 1, -2]); //=> 1 24378 * R.reduce(R.minBy(square), Infinity, []); //=> Infinity 24379 */ 24380 24381 24382var minBy = 24383/*#__PURE__*/ 24384_curry3(function minBy(f, a, b) { 24385 return f(b) < f(a) ? b : a; 24386}); 24387 24388module.exports = minBy; 24389 24390/***/ }), 24391
vendor: 1,600 bytes, lines 24392-24438
24392/***/ "./node_modules/ramda/src/modify.js": 24393/*!******************************************!*\ 24394 !*** ./node_modules/ramda/src/modify.js ***! 24395 \******************************************/ 24396/***/ ((module, __unused_webpack_exports, __webpack_require__) => { 24397 24398var _curry3 = 24399/*#__PURE__*/ 24400__webpack_require__(/*! ./internal/_curry3.js */ "./node_modules/ramda/src/internal/_curry3.js"); 24401 24402var modifyPath = 24403/*#__PURE__*/ 24404__webpack_require__(/*! ./modifyPath.js */ "./node_modules/ramda/src/modifyPath.js"); 24405/** 24406 * Creates a copy of the passed object by applying an `fn` function to the given `prop` property. 24407 * 24408 * The function will not be invoked, and the object will not change 24409 * if its corresponding property does not exist in the object. 24410 * All non-primitive properties are copied to the new object by reference. 24411 * 24412 * @func 24413 * @memberOf R 24414 * @since v0.28.0 24415 * @category Object 24416 * @sig Idx -> (v -> v) -> {k: v} -> {k: v} 24417 * @param {String|Number} prop The property to be modified. 24418 * @param {Function} fn The function to apply to the property. 24419 * @param {Object} object The object to be transformed. 24420 * @return {Object} The transformed object. 24421 * @example 24422 * 24423 * const person = {name: 'James', age: 20, pets: ['dog', 'cat']}; 24424 * R.modify('age', R.add(1), person); //=> {name: 'James', age: 21, pets: ['dog', 'cat']} 24425 * R.modify('pets', R.append('turtle'), person); //=> {name: 'James', age: 20, pets: ['dog', 'cat', 'turtle']} 24426 */ 24427 24428 24429var modify = 24430/*#__PURE__*/ 24431_curry3(function modify(prop, fn, object) { 24432 return modifyPath([prop], fn, object); 24433}); 24434 24435module.exports = modify; 24436 24437/***/ }), 24438
vendor: 2,644 bytes, lines 24439-24525
24439/***/ "./node_modules/ramda/src/modifyPath.js": 24440/*!**********************************************!*\ 24441 !*** ./node_modules/ramda/src/modifyPath.js ***! 24442 \**********************************************/ 24443/***/ ((module, __unused_webpack_exports, __webpack_require__) => { 24444 24445var _curry3 = 24446/*#__PURE__*/ 24447__webpack_require__(/*! ./internal/_curry3.js */ "./node_modules/ramda/src/internal/_curry3.js"); 24448 24449var _isArray = 24450/*#__PURE__*/ 24451__webpack_require__(/*! ./internal/_isArray.js */ "./node_modules/ramda/src/internal/_isArray.js"); 24452 24453var _isObject = 24454/*#__PURE__*/ 24455__webpack_require__(/*! ./internal/_isObject.js */ "./node_modules/ramda/src/internal/_isObject.js"); 24456 24457var _has = 24458/*#__PURE__*/ 24459__webpack_require__(/*! ./internal/_has.js */ "./node_modules/ramda/src/internal/_has.js"); 24460 24461var _assoc = 24462/*#__PURE__*/ 24463__webpack_require__(/*! ./internal/_assoc.js */ "./node_modules/ramda/src/internal/_assoc.js"); 24464 24465var _modify = 24466/*#__PURE__*/ 24467__webpack_require__(/*! ./internal/_modify.js */ "./node_modules/ramda/src/internal/_modify.js"); 24468/** 24469 * Creates a shallow clone of the passed object by applying an `fn` function 24470 * to the value at the given path. 24471 * 24472 * The function will not be invoked, and the object will not change 24473 * if its corresponding path does not exist in the object. 24474 * All non-primitive properties are copied to the new object by reference. 24475 * 24476 * @func 24477 * @memberOf R 24478 * @since v0.28.0 24479 * @category Object 24480 * @sig [Idx] -> (v -> v) -> {k: v} -> {k: v} 24481 * @param {Array} path The path to be modified. 24482 * @param {Function} fn The function to apply to the path. 24483 * @param {Object} object The object to be transformed. 24484 * @return {Object} The transformed object. 24485 * @example 24486 * 24487 * const person = {name: 'James', address: { zipCode: '90216' }}; 24488 * R.modifyPath(['address', 'zipCode'], R.reverse, person); //=> {name: 'James', address: { zipCode: '61209' }} 24489 * 24490 * // Can handle arrays too 24491 * const person = {name: 'James', addresses: [{ zipCode: '90216' }]}; 24492 * R.modifyPath(['addresses', 0, 'zipCode'], R.reverse, person); //=> {name: 'James', addresses: [{ zipCode: '61209' }]} 24493 */ 24494 24495 24496var modifyPath = 24497/*#__PURE__*/ 24498_curry3(function modifyPath(path, fn, object) { 24499 if (!_isObject(object) && !_isArray(object) || path.length === 0) { 24500 return object; 24501 } 24502 24503 var idx = path[0]; 24504 24505 if (!_has(idx, object)) { 24506 return object; 24507 } 24508 24509 if (path.length === 1) { 24510 return _modify(idx, fn, object); 24511 } 24512 24513 var val = modifyPath(Array.prototype.slice.call(path, 1), fn, object[idx]); 24514 24515 if (val === object[idx]) { 24516 return object; 24517 } 24518 24519 return _assoc(idx, val, object); 24520}); 24521 24522module.exports = modifyPath; 24523 24524/***/ }), 24525
vendor: 1,192 bytes, lines 24526-24571
24526/***/ "./node_modules/ramda/src/modulo.js": 24527/*!******************************************!*\ 24528 !*** ./node_modules/ramda/src/modulo.js ***! 24529 \******************************************/ 24530/***/ ((module, __unused_webpack_exports, __webpack_require__) => { 24531 24532var _curry2 = 24533/*#__PURE__*/ 24534__webpack_require__(/*! ./internal/_curry2.js */ "./node_modules/ramda/src/internal/_curry2.js"); 24535/** 24536 * Divides the first parameter by the second and returns the remainder. Note 24537 * that this function preserves the JavaScript-style behavior for modulo. For 24538 * mathematical modulo see [`mathMod`](#mathMod). 24539 * 24540 * @func 24541 * @memberOf R 24542 * @since v0.1.1 24543 * @category Math 24544 * @sig Number -> Number -> Number 24545 * @param {Number} a The value to the divide. 24546 * @param {Number} b The pseudo-modulus 24547 * @return {Number} The result of `b % a`. 24548 * @see R.mathMod 24549 * @example 24550 * 24551 * R.modulo(17, 3); //=> 2 24552 * // JS behavior: 24553 * R.modulo(-17, 3); //=> -2 24554 * R.modulo(17, -3); //=> 2 24555 * 24556 * const isOdd = R.modulo(R.__, 2); 24557 * isOdd(42); //=> 0 24558 * isOdd(21); //=> 1 24559 */ 24560 24561 24562var modulo = 24563/*#__PURE__*/ 24564_curry2(function modulo(a, b) { 24565 return a % b; 24566}); 24567 24568module.exports = modulo; 24569 24570/***/ }), 24571
vendor: 1,544 bytes, lines 24572-24615
24572/***/ "./node_modules/ramda/src/move.js": 24573/*!****************************************!*\ 24574 !*** ./node_modules/ramda/src/move.js ***! 24575 \****************************************/ 24576/***/ ((module, __unused_webpack_exports, __webpack_require__) => { 24577 24578var _curry3 = 24579/*#__PURE__*/ 24580__webpack_require__(/*! ./internal/_curry3.js */ "./node_modules/ramda/src/internal/_curry3.js"); 24581/** 24582 * Move an item, at index `from`, to index `to`, in a list of elements. 24583 * A new list will be created containing the new elements order. 24584 * 24585 * @func 24586 * @memberOf R 24587 * @since v0.27.1 24588 * @category List 24589 * @sig Number -> Number -> [a] -> [a] 24590 * @param {Number} from The source index 24591 * @param {Number} to The destination index 24592 * @param {Array} list The list which will serve to realise the move 24593 * @return {Array} The new list reordered 24594 * @example 24595 * 24596 * R.move(0, 2, ['a', 'b', 'c', 'd', 'e', 'f']); //=> ['b', 'c', 'a', 'd', 'e', 'f'] 24597 * R.move(-1, 0, ['a', 'b', 'c', 'd', 'e', 'f']); //=> ['f', 'a', 'b', 'c', 'd', 'e'] list rotation 24598 */ 24599 24600 24601var move = 24602/*#__PURE__*/ 24603_curry3(function (from, to, list) { 24604 var length = list.length; 24605 var result = list.slice(); 24606 var positiveFrom = from < 0 ? length + from : from; 24607 var positiveTo = to < 0 ? length + to : to; 24608 var item = result.splice(positiveFrom, 1); 24609 return positiveFrom < 0 || positiveFrom >= list.length || positiveTo < 0 || positiveTo >= list.length ? list : [].concat(result.slice(0, positiveTo)).concat(item).concat(result.slice(positiveTo, list.length)); 24610}); 24611 24612module.exports = move; 24613 24614/***/ }), 24615
vendor: 1,011 bytes, lines 24616-24656
24616/***/ "./node_modules/ramda/src/multiply.js": 24617/*!********************************************!*\ 24618 !*** ./node_modules/ramda/src/multiply.js ***! 24619 \********************************************/ 24620/***/ ((module, __unused_webpack_exports, __webpack_require__) => { 24621 24622var _curry2 = 24623/*#__PURE__*/ 24624__webpack_require__(/*! ./internal/_curry2.js */ "./node_modules/ramda/src/internal/_curry2.js"); 24625/** 24626 * Multiplies two numbers. Equivalent to `a * b` but curried. 24627 * 24628 * @func 24629 * @memberOf R 24630 * @since v0.1.0 24631 * @category Math 24632 * @sig Number -> Number -> Number 24633 * @param {Number} a The first value. 24634 * @param {Number} b The second value. 24635 * @return {Number} The result of `a * b`. 24636 * @see R.divide 24637 * @example 24638 * 24639 * const double = R.multiply(2); 24640 * const triple = R.multiply(3); 24641 * double(3); //=> 6 24642 * triple(4); //=> 12 24643 * R.multiply(2, 5); //=> 10 24644 */ 24645 24646 24647var multiply = 24648/*#__PURE__*/ 24649_curry2(function multiply(a, b) { 24650 return a * b; 24651}); 24652 24653module.exports = multiply; 24654 24655/***/ }), 24656
vendor: 2,885 bytes, lines 24657-24765
24657/***/ "./node_modules/ramda/src/nAry.js": 24658/*!****************************************!*\ 24659 !*** ./node_modules/ramda/src/nAry.js ***! 24660 \****************************************/ 24661/***/ ((module, __unused_webpack_exports, __webpack_require__) => { 24662 24663var _curry2 = 24664/*#__PURE__*/ 24665__webpack_require__(/*! ./internal/_curry2.js */ "./node_modules/ramda/src/internal/_curry2.js"); 24666/** 24667 * Wraps a function of any arity (including nullary) in a function that accepts 24668 * exactly `n` parameters. Any extraneous parameters will not be passed to the 24669 * supplied function. 24670 * 24671 * @func 24672 * @memberOf R 24673 * @since v0.1.0 24674 * @category Function 24675 * @sig Number -> (* -> a) -> (* -> a) 24676 * @param {Number} n The desired arity of the new function. 24677 * @param {Function} fn The function to wrap. 24678 * @return {Function} A new function wrapping `fn`. The new function is guaranteed to be of 24679 * arity `n`. 24680 * @see R.binary, R.unary 24681 * @example 24682 * 24683 * const takesTwoArgs = (a, b) => [a, b]; 24684 * 24685 * takesTwoArgs.length; //=> 2 24686 * takesTwoArgs(1, 2); //=> [1, 2] 24687 * 24688 * const takesOneArg = R.nAry(1, takesTwoArgs); 24689 * takesOneArg.length; //=> 1 24690 * // Only `n` arguments are passed to the wrapped function 24691 * takesOneArg(1, 2); //=> [1, undefined] 24692 * @symb R.nAry(0, f)(a, b) = f() 24693 * @symb R.nAry(1, f)(a, b) = f(a) 24694 * @symb R.nAry(2, f)(a, b) = f(a, b) 24695 */ 24696 24697 24698var nAry = 24699/*#__PURE__*/ 24700_curry2(function nAry(n, fn) { 24701 switch (n) { 24702 case 0: 24703 return function () { 24704 return fn.call(this); 24705 }; 24706 24707 case 1: 24708 return function (a0) { 24709 return fn.call(this, a0); 24710 }; 24711 24712 case 2: 24713 return function (a0, a1) { 24714 return fn.call(this, a0, a1); 24715 }; 24716 24717 case 3: 24718 return function (a0, a1, a2) { 24719 return fn.call(this, a0, a1, a2); 24720 }; 24721 24722 case 4: 24723 return function (a0, a1, a2, a3) { 24724 return fn.call(this, a0, a1, a2, a3); 24725 }; 24726 24727 case 5: 24728 return function (a0, a1, a2, a3, a4) { 24729 return fn.call(this, a0, a1, a2, a3, a4); 24730 }; 24731 24732 case 6: 24733 return function (a0, a1, a2, a3, a4, a5) { 24734 return fn.call(this, a0, a1, a2, a3, a4, a5); 24735 }; 24736 24737 case 7: 24738 return function (a0, a1, a2, a3, a4, a5, a6) { 24739 return fn.call(this, a0, a1, a2, a3, a4, a5, a6); 24740 }; 24741 24742 case 8: 24743 return function (a0, a1, a2, a3, a4, a5, a6, a7) { 24744 return fn.call(this, a0, a1, a2, a3, a4, a5, a6, a7); 24745 }; 24746 24747 case 9: 24748 return function (a0, a1, a2, a3, a4, a5, a6, a7, a8) { 24749 return fn.call(this, a0, a1, a2, a3, a4, a5, a6, a7, a8); 24750 }; 24751 24752 case 10: 24753 return function (a0, a1, a2, a3, a4, a5, a6, a7, a8, a9) { 24754 return fn.call(this, a0, a1, a2, a3, a4, a5, a6, a7, a8, a9); 24755 }; 24756 24757 default: 24758 throw new Error('First argument to nAry must be a non-negative integer no greater than ten'); 24759 } 24760}); 24761 24762module.exports = nAry; 24763 24764/***/ }), 24765
vendor: 702 bytes, lines 24766-24800
24766/***/ "./node_modules/ramda/src/negate.js": 24767/*!******************************************!*\ 24768 !*** ./node_modules/ramda/src/negate.js ***! 24769 \******************************************/ 24770/***/ ((module, __unused_webpack_exports, __webpack_require__) => { 24771 24772var _curry1 = 24773/*#__PURE__*/ 24774__webpack_require__(/*! ./internal/_curry1.js */ "./node_modules/ramda/src/internal/_curry1.js"); 24775/** 24776 * Negates its argument. 24777 * 24778 * @func 24779 * @memberOf R 24780 * @since v0.9.0 24781 * @category Math 24782 * @sig Number -> Number 24783 * @param {Number} n 24784 * @return {Number} 24785 * @example 24786 * 24787 * R.negate(42); //=> -42 24788 */ 24789 24790 24791var negate = 24792/*#__PURE__*/ 24793_curry1(function negate(n) { 24794 return -n; 24795}); 24796 24797module.exports = negate; 24798 24799/***/ }), 24800
vendor: 1,517 bytes, lines 24801-24854
24801/***/ "./node_modules/ramda/src/none.js": 24802/*!****************************************!*\ 24803 !*** ./node_modules/ramda/src/none.js ***! 24804 \****************************************/ 24805/***/ ((module, __unused_webpack_exports, __webpack_require__) => { 24806 24807var _complement = 24808/*#__PURE__*/ 24809__webpack_require__(/*! ./internal/_complement.js */ "./node_modules/ramda/src/internal/_complement.js"); 24810 24811var _curry2 = 24812/*#__PURE__*/ 24813__webpack_require__(/*! ./internal/_curry2.js */ "./node_modules/ramda/src/internal/_curry2.js"); 24814 24815var all = 24816/*#__PURE__*/ 24817__webpack_require__(/*! ./all.js */ "./node_modules/ramda/src/all.js"); 24818/** 24819 * Returns `true` if no elements of the list match the predicate, `false` 24820 * otherwise. 24821 * 24822 * Dispatches to the `all` method of the second argument, if present. 24823 * 24824 * Acts as a transducer if a transformer is given in list position. 24825 * 24826 * @func 24827 * @memberOf R 24828 * @since v0.12.0 24829 * @category List 24830 * @sig (a -> Boolean) -> [a] -> Boolean 24831 * @param {Function} fn The predicate function. 24832 * @param {Array} list The array to consider. 24833 * @return {Boolean} `true` if the predicate is not satisfied by every element, `false` otherwise. 24834 * @see R.all, R.any 24835 * @example 24836 * 24837 * const isEven = n => n % 2 === 0; 24838 * const isOdd = n => n % 2 !== 0; 24839 * 24840 * R.none(isEven, [1, 3, 5, 7, 9, 11]); //=> true 24841 * R.none(isOdd, [1, 3, 5, 7, 8, 11]); //=> false 24842 */ 24843 24844 24845var none = 24846/*#__PURE__*/ 24847_curry2(function none(fn, input) { 24848 return all(_complement(fn), input); 24849}); 24850 24851module.exports = none; 24852 24853/***/ }), 24854
vendor: 953 bytes, lines 24855-24894
24855/***/ "./node_modules/ramda/src/not.js": 24856/*!***************************************!*\ 24857 !*** ./node_modules/ramda/src/not.js ***! 24858 \***************************************/ 24859/***/ ((module, __unused_webpack_exports, __webpack_require__) => { 24860 24861var _curry1 = 24862/*#__PURE__*/ 24863__webpack_require__(/*! ./internal/_curry1.js */ "./node_modules/ramda/src/internal/_curry1.js"); 24864/** 24865 * A function that returns the `!` of its argument. It will return `true` when 24866 * passed false-y value, and `false` when passed a truth-y one. 24867 * 24868 * @func 24869 * @memberOf R 24870 * @since v0.1.0 24871 * @category Logic 24872 * @sig * -> Boolean 24873 * @param {*} a any value 24874 * @return {Boolean} the logical inverse of passed argument. 24875 * @see R.complement 24876 * @example 24877 * 24878 * R.not(true); //=> false 24879 * R.not(false); //=> true 24880 * R.not(0); //=> true 24881 * R.not(1); //=> false 24882 */ 24883 24884 24885var not = 24886/*#__PURE__*/ 24887_curry1(function not(a) { 24888 return !a; 24889}); 24890 24891module.exports = not; 24892 24893/***/ }), 24894
vendor: 1,393 bytes, lines 24895-24946
24895/***/ "./node_modules/ramda/src/nth.js": 24896/*!***************************************!*\ 24897 !*** ./node_modules/ramda/src/nth.js ***! 24898 \***************************************/ 24899/***/ ((module, __unused_webpack_exports, __webpack_require__) => { 24900 24901var _curry2 = 24902/*#__PURE__*/ 24903__webpack_require__(/*! ./internal/_curry2.js */ "./node_modules/ramda/src/internal/_curry2.js"); 24904 24905var _isString = 24906/*#__PURE__*/ 24907__webpack_require__(/*! ./internal/_isString.js */ "./node_modules/ramda/src/internal/_isString.js"); 24908/** 24909 * Returns the nth element of the given list or string. If n is negative the 24910 * element at index length + n is returned. 24911 * 24912 * @func 24913 * @memberOf R 24914 * @since v0.1.0 24915 * @category List 24916 * @sig Number -> [a] -> a | Undefined 24917 * @sig Number -> String -> String 24918 * @param {Number} offset 24919 * @param {*} list 24920 * @return {*} 24921 * @example 24922 * 24923 * const list = ['foo', 'bar', 'baz', 'quux']; 24924 * R.nth(1, list); //=> 'bar' 24925 * R.nth(-1, list); //=> 'quux' 24926 * R.nth(-99, list); //=> undefined 24927 * 24928 * R.nth(2, 'abc'); //=> 'c' 24929 * R.nth(3, 'abc'); //=> '' 24930 * @symb R.nth(-1, [a, b, c]) = c 24931 * @symb R.nth(0, [a, b, c]) = a 24932 * @symb R.nth(1, [a, b, c]) = b 24933 */ 24934 24935 24936var nth = 24937/*#__PURE__*/ 24938_curry2(function nth(offset, list) { 24939 var idx = offset < 0 ? list.length + offset : offset; 24940 return _isString(list) ? list.charAt(idx) : list[idx]; 24941}); 24942 24943module.exports = nth; 24944 24945/***/ }), 24946
vendor: 1,199 bytes, lines 24947-24996
24947/***/ "./node_modules/ramda/src/nthArg.js": 24948/*!******************************************!*\ 24949 !*** ./node_modules/ramda/src/nthArg.js ***! 24950 \******************************************/ 24951/***/ ((module, __unused_webpack_exports, __webpack_require__) => { 24952 24953var _curry1 = 24954/*#__PURE__*/ 24955__webpack_require__(/*! ./internal/_curry1.js */ "./node_modules/ramda/src/internal/_curry1.js"); 24956 24957var curryN = 24958/*#__PURE__*/ 24959__webpack_require__(/*! ./curryN.js */ "./node_modules/ramda/src/curryN.js"); 24960 24961var nth = 24962/*#__PURE__*/ 24963__webpack_require__(/*! ./nth.js */ "./node_modules/ramda/src/nth.js"); 24964/** 24965 * Returns a function which returns its nth argument. 24966 * 24967 * @func 24968 * @memberOf R 24969 * @since v0.9.0 24970 * @category Function 24971 * @sig Number -> *... -> * 24972 * @param {Number} n 24973 * @return {Function} 24974 * @example 24975 * 24976 * R.nthArg(1)('a', 'b', 'c'); //=> 'b' 24977 * R.nthArg(-1)('a', 'b', 'c'); //=> 'c' 24978 * @symb R.nthArg(-1)(a, b, c) = c 24979 * @symb R.nthArg(0)(a, b, c) = a 24980 * @symb R.nthArg(1)(a, b, c) = b 24981 */ 24982 24983 24984var nthArg = 24985/*#__PURE__*/ 24986_curry1(function nthArg(n) { 24987 var arity = n < 0 ? 1 : n + 1; 24988 return curryN(arity, function () { 24989 return nth(n, arguments); 24990 }); 24991}); 24992 24993module.exports = nthArg; 24994 24995/***/ }), 24996
vendor: 1,489 bytes, lines 24997-25044
24997/***/ "./node_modules/ramda/src/o.js": 24998/*!*************************************!*\ 24999 !*** ./node_modules/ramda/src/o.js ***! 25000 \*************************************/ 25001/***/ ((module, __unused_webpack_exports, __webpack_require__) => { 25002 25003var _curry3 = 25004/*#__PURE__*/ 25005__webpack_require__(/*! ./internal/_curry3.js */ "./node_modules/ramda/src/internal/_curry3.js"); 25006/** 25007 * `o` is a curried composition function that returns a unary function. 25008 * Like [`compose`](#compose), `o` performs right-to-left function composition. 25009 * Unlike [`compose`](#compose), the rightmost function passed to `o` will be 25010 * invoked with only one argument. Also, unlike [`compose`](#compose), `o` is 25011 * limited to accepting only 2 unary functions. The name o was chosen because 25012 * of its similarity to the mathematical composition operator â. 25013 * 25014 * @func 25015 * @memberOf R 25016 * @since v0.24.0 25017 * @category Function 25018 * @sig (b -> c) -> (a -> b) -> a -> c 25019 * @param {Function} f 25020 * @param {Function} g 25021 * @return {Function} 25022 * @see R.compose, R.pipe 25023 * @example 25024 * 25025 * const classyGreeting = name => "The name's " + name.last + ", " + name.first + " " + name.last 25026 * const yellGreeting = R.o(R.toUpper, classyGreeting); 25027 * yellGreeting({first: 'James', last: 'Bond'}); //=> "THE NAME'S BOND, JAMES BOND" 25028 * 25029 * R.o(R.multiply(10), R.add(10))(-4) //=> 60 25030 * 25031 * @symb R.o(f, g, x) = f(g(x)) 25032 */ 25033 25034 25035var o = 25036/*#__PURE__*/ 25037_curry3(function o(f, g, x) { 25038 return f(g(x)); 25039}); 25040 25041module.exports = o; 25042 25043/***/ }), 25044
vendor: 1,032 bytes, lines 25045-25087
25045/***/ "./node_modules/ramda/src/objOf.js": 25046/*!*****************************************!*\ 25047 !*** ./node_modules/ramda/src/objOf.js ***! 25048 \*****************************************/ 25049/***/ ((module, __unused_webpack_exports, __webpack_require__) => { 25050 25051var _curry2 = 25052/*#__PURE__*/ 25053__webpack_require__(/*! ./internal/_curry2.js */ "./node_modules/ramda/src/internal/_curry2.js"); 25054/** 25055 * Creates an object containing a single key:value pair. 25056 * 25057 * @func 25058 * @memberOf R 25059 * @since v0.18.0 25060 * @category Object 25061 * @sig String -> a -> {String:a} 25062 * @param {String} key 25063 * @param {*} val 25064 * @return {Object} 25065 * @see R.pair 25066 * @example 25067 * 25068 * const matchPhrases = R.compose( 25069 * R.objOf('must'), 25070 * R.map(R.objOf('match_phrase')) 25071 * ); 25072 * matchPhrases(['foo', 'bar', 'baz']); //=> {must: [{match_phrase: 'foo'}, {match_phrase: 'bar'}, {match_phrase: 'baz'}]} 25073 */ 25074 25075 25076var objOf = 25077/*#__PURE__*/ 25078_curry2(function objOf(key, val) { 25079 var obj = {}; 25080 obj[key] = val; 25081 return obj; 25082}); 25083 25084module.exports = objOf; 25085 25086/***/ }), 25087
vendor: 1,002 bytes, lines 25088-25128
25088/***/ "./node_modules/ramda/src/of.js": 25089/*!**************************************!*\ 25090 !*** ./node_modules/ramda/src/of.js ***! 25091 \**************************************/ 25092/***/ ((module, __unused_webpack_exports, __webpack_require__) => { 25093 25094var _curry1 = 25095/*#__PURE__*/ 25096__webpack_require__(/*! ./internal/_curry1.js */ "./node_modules/ramda/src/internal/_curry1.js"); 25097 25098var _of = 25099/*#__PURE__*/ 25100__webpack_require__(/*! ./internal/_of.js */ "./node_modules/ramda/src/internal/_of.js"); 25101/** 25102 * Returns a singleton array containing the value provided. 25103 * 25104 * Note this `of` is different from the ES6 `of`; See 25105 * https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Array/of 25106 * 25107 * @func 25108 * @memberOf R 25109 * @since v0.3.0 25110 * @category Function 25111 * @sig a -> [a] 25112 * @param {*} x any value 25113 * @return {Array} An array wrapping `x`. 25114 * @example 25115 * 25116 * R.of(null); //=> [null] 25117 * R.of([42]); //=> [[42]] 25118 */ 25119 25120 25121var of = 25122/*#__PURE__*/ 25123_curry1(_of); 25124 25125module.exports = of; 25126 25127/***/ }), 25128
vendor: 1,244 bytes, lines 25129-25181
25129/***/ "./node_modules/ramda/src/omit.js": 25130/*!****************************************!*\ 25131 !*** ./node_modules/ramda/src/omit.js ***! 25132 \****************************************/ 25133/***/ ((module, __unused_webpack_exports, __webpack_require__) => { 25134 25135var _curry2 = 25136/*#__PURE__*/ 25137__webpack_require__(/*! ./internal/_curry2.js */ "./node_modules/ramda/src/internal/_curry2.js"); 25138/** 25139 * Returns a partial copy of an object omitting the keys specified. 25140 * 25141 * @func 25142 * @memberOf R 25143 * @since v0.1.0 25144 * @category Object 25145 * @sig [String] -> {String: *} -> {String: *} 25146 * @param {Array} names an array of String property names to omit from the new object 25147 * @param {Object} obj The object to copy from 25148 * @return {Object} A new object with properties from `names` not on it. 25149 * @see R.pick 25150 * @example 25151 * 25152 * R.omit(['a', 'd'], {a: 1, b: 2, c: 3, d: 4}); //=> {b: 2, c: 3} 25153 */ 25154 25155 25156var omit = 25157/*#__PURE__*/ 25158_curry2(function omit(names, obj) { 25159 var result = {}; 25160 var index = {}; 25161 var idx = 0; 25162 var len = names.length; 25163 25164 while (idx < len) { 25165 index[names[idx]] = 1; 25166 idx += 1; 25167 } 25168 25169 for (var prop in obj) { 25170 if (!index.hasOwnProperty(prop)) { 25171 result[prop] = obj[prop]; 25172 } 25173 } 25174 25175 return result; 25176}); 25177 25178module.exports = omit; 25179 25180/***/ }), 25181
vendor: 1,243 bytes, lines 25182-25226
25182/***/ "./node_modules/ramda/src/on.js": 25183/*!**************************************!*\ 25184 !*** ./node_modules/ramda/src/on.js ***! 25185 \**************************************/ 25186/***/ ((module, __unused_webpack_exports, __webpack_require__) => { 25187 25188var curryN = 25189/*#__PURE__*/ 25190__webpack_require__(/*! ./internal/_curryN.js */ "./node_modules/ramda/src/internal/_curryN.js"); 25191/** 25192 * Takes a binary function `f`, a unary function `g`, and two values. 25193 * Applies `g` to each value, then applies the result of each to `f`. 25194 * 25195 * Also known as the P combinator. 25196 * 25197 * @func 25198 * @memberOf R 25199 * @since v0.28.0 25200 * @category Function 25201 * @sig ((a, a) -> b) -> (c -> a) -> c -> c -> b 25202 * @param {Function} f a binary function 25203 * @param {Function} g a unary function 25204 * @param {any} a any value 25205 * @param {any} b any value 25206 * @return {any} The result of `f` 25207 * @example 25208 * 25209 * const eqBy = R.on((a, b) => a === b); 25210 * eqBy(R.prop('a'), {b:0, a:1}, {a:1}) //=> true; 25211 * 25212 * const containsInsensitive = R.on(R.contains, R.toLower); 25213 * containsInsensitive('o', 'FOO'); //=> true 25214 * @symb R.on(f, g, a, b) = f(g(a), g(b)) 25215 */ 25216 25217 25218var on = 25219/*#__PURE__*/ 25220curryN(4, [], function on(f, g, a, b) { 25221 return f(g(a), g(b)); 25222}); 25223module.exports = on; 25224 25225/***/ }), 25226
vendor: 1,425 bytes, lines 25227-25280
25227/***/ "./node_modules/ramda/src/once.js": 25228/*!****************************************!*\ 25229 !*** ./node_modules/ramda/src/once.js ***! 25230 \****************************************/ 25231/***/ ((module, __unused_webpack_exports, __webpack_require__) => { 25232 25233var _arity = 25234/*#__PURE__*/ 25235__webpack_require__(/*! ./internal/_arity.js */ "./node_modules/ramda/src/internal/_arity.js"); 25236 25237var _curry1 = 25238/*#__PURE__*/ 25239__webpack_require__(/*! ./internal/_curry1.js */ "./node_modules/ramda/src/internal/_curry1.js"); 25240/** 25241 * Accepts a function `fn` and returns a function that guards invocation of 25242 * `fn` such that `fn` can only ever be called once, no matter how many times 25243 * the returned function is invoked. The first value calculated is returned in 25244 * subsequent invocations. 25245 * 25246 * @func 25247 * @memberOf R 25248 * @since v0.1.0 25249 * @category Function 25250 * @sig (a... -> b) -> (a... -> b) 25251 * @param {Function} fn The function to wrap in a call-only-once wrapper. 25252 * @return {Function} The wrapped function. 25253 * @example 25254 * 25255 * const addOneOnce = R.once(x => x + 1); 25256 * addOneOnce(10); //=> 11 25257 * addOneOnce(addOneOnce(50)); //=> 11 25258 */ 25259 25260 25261var once = 25262/*#__PURE__*/ 25263_curry1(function once(fn) { 25264 var called = false; 25265 var result; 25266 return _arity(fn.length, function () { 25267 if (called) { 25268 return result; 25269 } 25270 25271 called = true; 25272 result = fn.apply(this, arguments); 25273 return result; 25274 }); 25275}); 25276 25277module.exports = once; 25278 25279/***/ }), 25280
vendor: 957 bytes, lines 25281-25321
25281/***/ "./node_modules/ramda/src/or.js": 25282/*!**************************************!*\ 25283 !*** ./node_modules/ramda/src/or.js ***! 25284 \**************************************/ 25285/***/ ((module, __unused_webpack_exports, __webpack_require__) => { 25286 25287var _curry2 = 25288/*#__PURE__*/ 25289__webpack_require__(/*! ./internal/_curry2.js */ "./node_modules/ramda/src/internal/_curry2.js"); 25290/** 25291 * Returns the first argument if it is truthy, otherwise the second argument. 25292 * Acts as the boolean `or` statement if both inputs are `Boolean`s. 25293 * 25294 * @func 25295 * @memberOf R 25296 * @since v0.1.0 25297 * @category Logic 25298 * @sig a -> b -> a | b 25299 * @param {Any} a 25300 * @param {Any} b 25301 * @return {Any} 25302 * @see R.either, R.and 25303 * @example 25304 * 25305 * R.or(true, true); //=> true 25306 * R.or(true, false); //=> true 25307 * R.or(false, true); //=> true 25308 * R.or(false, false); //=> false 25309 */ 25310 25311 25312var or = 25313/*#__PURE__*/ 25314_curry2(function or(a, b) { 25315 return a || b; 25316}); 25317 25318module.exports = or; 25319 25320/***/ }), 25321
vendor: 1,740 bytes, lines 25322-25376
25322/***/ "./node_modules/ramda/src/otherwise.js": 25323/*!*********************************************!*\ 25324 !*** ./node_modules/ramda/src/otherwise.js ***! 25325 \*********************************************/ 25326/***/ ((module, __unused_webpack_exports, __webpack_require__) => { 25327 25328var _curry2 = 25329/*#__PURE__*/ 25330__webpack_require__(/*! ./internal/_curry2.js */ "./node_modules/ramda/src/internal/_curry2.js"); 25331 25332var _assertPromise = 25333/*#__PURE__*/ 25334__webpack_require__(/*! ./internal/_assertPromise.js */ "./node_modules/ramda/src/internal/_assertPromise.js"); 25335/** 25336 * Returns the result of applying the onFailure function to the value inside 25337 * a failed promise. This is useful for handling rejected promises 25338 * inside function compositions. 25339 * 25340 * @func 25341 * @memberOf R 25342 * @since v0.26.0 25343 * @category Function 25344 * @sig (e -> b) -> (Promise e a) -> (Promise e b) 25345 * @sig (e -> (Promise f b)) -> (Promise e a) -> (Promise f b) 25346 * @param {Function} onFailure The function to apply. Can return a value or a promise of a value. 25347 * @param {Promise} p 25348 * @return {Promise} The result of calling `p.then(null, onFailure)` 25349 * @see R.andThen 25350 * @example 25351 * 25352 * const failedFetch = id => Promise.reject('bad ID'); 25353 * const useDefault = () => ({ firstName: 'Bob', lastName: 'Loblaw' }); 25354 * 25355 * //recoverFromFailure :: String -> Promise ({ firstName, lastName }) 25356 * const recoverFromFailure = R.pipe( 25357 * failedFetch, 25358 * R.otherwise(useDefault), 25359 * R.andThen(R.pick(['firstName', 'lastName'])), 25360 * ); 25361 * recoverFromFailure(12345).then(console.log); 25362 */ 25363 25364 25365var otherwise = 25366/*#__PURE__*/ 25367_curry2(function otherwise(f, p) { 25368 _assertPromise('otherwise', p); 25369 25370 return p.then(null, f); 25371}); 25372 25373module.exports = otherwise; 25374 25375/***/ }), 25376
vendor: 1,621 bytes, lines 25377-25435
25377/***/ "./node_modules/ramda/src/over.js": 25378/*!****************************************!*\ 25379 !*** ./node_modules/ramda/src/over.js ***! 25380 \****************************************/ 25381/***/ ((module, __unused_webpack_exports, __webpack_require__) => { 25382 25383var _curry3 = 25384/*#__PURE__*/ 25385__webpack_require__(/*! ./internal/_curry3.js */ "./node_modules/ramda/src/internal/_curry3.js"); // `Identity` is a functor that holds a single value, where `map` simply 25386// transforms the held value with the provided function. 25387 25388 25389var Identity = function (x) { 25390 return { 25391 value: x, 25392 map: function (f) { 25393 return Identity(f(x)); 25394 } 25395 }; 25396}; 25397/** 25398 * Returns the result of "setting" the portion of the given data structure 25399 * focused by the given lens to the result of applying the given function to 25400 * the focused value. 25401 * 25402 * @func 25403 * @memberOf R 25404 * @since v0.16.0 25405 * @category Object 25406 * @typedefn Lens s a = Functor f => (a -> f a) -> s -> f s 25407 * @sig Lens s a -> (a -> a) -> s -> s 25408 * @param {Lens} lens 25409 * @param {*} v 25410 * @param {*} x 25411 * @return {*} 25412 * @see R.view, R.set, R.lens, R.lensIndex, R.lensProp, R.lensPath 25413 * @example 25414 * 25415 * const headLens = R.lensIndex(0); 25416 * 25417 * R.over(headLens, R.toUpper, ['foo', 'bar', 'baz']); //=> ['FOO', 'bar', 'baz'] 25418 */ 25419 25420 25421var over = 25422/*#__PURE__*/ 25423_curry3(function over(lens, f, x) { 25424 // The value returned by the getter function is first transformed with `f`, 25425 // then set as the value of an `Identity`. This is then mapped over with the 25426 // setter function of the lens. 25427 return lens(function (y) { 25428 return Identity(f(y)); 25429 })(x).value; 25430}); 25431 25432module.exports = over; 25433 25434/***/ }), 25435
vendor: 800 bytes, lines 25436-25472
25436/***/ "./node_modules/ramda/src/pair.js": 25437/*!****************************************!*\ 25438 !*** ./node_modules/ramda/src/pair.js ***! 25439 \****************************************/ 25440/***/ ((module, __unused_webpack_exports, __webpack_require__) => { 25441 25442var _curry2 = 25443/*#__PURE__*/ 25444__webpack_require__(/*! ./internal/_curry2.js */ "./node_modules/ramda/src/internal/_curry2.js"); 25445/** 25446 * Takes two arguments, `fst` and `snd`, and returns `[fst, snd]`. 25447 * 25448 * @func 25449 * @memberOf R 25450 * @since v0.18.0 25451 * @category List 25452 * @sig a -> b -> (a,b) 25453 * @param {*} fst 25454 * @param {*} snd 25455 * @return {Array} 25456 * @see R.objOf, R.of 25457 * @example 25458 * 25459 * R.pair('foo', 'bar'); //=> ['foo', 'bar'] 25460 */ 25461 25462 25463var pair = 25464/*#__PURE__*/ 25465_curry2(function pair(fst, snd) { 25466 return [fst, snd]; 25467}); 25468 25469module.exports = pair; 25470 25471/***/ }), 25472
vendor: 1,655 bytes, lines 25473-25523
25473/***/ "./node_modules/ramda/src/partial.js": 25474/*!*******************************************!*\ 25475 !*** ./node_modules/ramda/src/partial.js ***! 25476 \*******************************************/ 25477/***/ ((module, __unused_webpack_exports, __webpack_require__) => { 25478 25479var _concat = 25480/*#__PURE__*/ 25481__webpack_require__(/*! ./internal/_concat.js */ "./node_modules/ramda/src/internal/_concat.js"); 25482 25483var _createPartialApplicator = 25484/*#__PURE__*/ 25485__webpack_require__(/*! ./internal/_createPartialApplicator.js */ "./node_modules/ramda/src/internal/_createPartialApplicator.js"); 25486/** 25487 * Takes a function `f` and a list of arguments, and returns a function `g`. 25488 * When applied, `g` returns the result of applying `f` to the arguments 25489 * provided initially followed by the arguments provided to `g`. 25490 * 25491 * @func 25492 * @memberOf R 25493 * @since v0.10.0 25494 * @category Function 25495 * @sig ((a, b, c, ..., n) -> x) -> [a, b, c, ...] -> ((d, e, f, ..., n) -> x) 25496 * @param {Function} f 25497 * @param {Array} args 25498 * @return {Function} 25499 * @see R.partialRight, R.curry 25500 * @example 25501 * 25502 * const multiply2 = (a, b) => a * b; 25503 * const double = R.partial(multiply2, [2]); 25504 * double(3); //=> 6 25505 * 25506 * const greet = (salutation, title, firstName, lastName) => 25507 * salutation + ', ' + title + ' ' + firstName + ' ' + lastName + '!'; 25508 * 25509 * const sayHello = R.partial(greet, ['Hello']); 25510 * const sayHelloToMs = R.partial(sayHello, ['Ms.']); 25511 * sayHelloToMs('Jane', 'Jones'); //=> 'Hello, Ms. Jane Jones!' 25512 * @symb R.partial(f, [a, b])(c, d) = f(a, b, c, d) 25513 */ 25514 25515 25516var partial = 25517/*#__PURE__*/ 25518_createPartialApplicator(_concat); 25519 25520module.exports = partial; 25521 25522/***/ }), 25523
vendor: 1,799 bytes, lines 25524-25572
25524/***/ "./node_modules/ramda/src/partialObject.js": 25525/*!*************************************************!*\ 25526 !*** ./node_modules/ramda/src/partialObject.js ***! 25527 \*************************************************/ 25528/***/ (function(module, __unused_webpack_exports, __webpack_require__) { 25529 25530var mergeDeepRight = 25531/*#__PURE__*/ 25532__webpack_require__(/*! ./mergeDeepRight.js */ "./node_modules/ramda/src/mergeDeepRight.js"); 25533 25534var _curry2 = 25535/*#__PURE__*/ 25536__webpack_require__(/*! ./internal/_curry2.js */ "./node_modules/ramda/src/internal/_curry2.js"); 25537/** 25538 * Takes a function `f` and an object, and returns a function `g`. 25539 * When applied, `g` returns the result of applying `f` to the object 25540 * provided initially merged deeply (right) with the object provided as an argument to `g`. 25541 * 25542 * @func 25543 * @memberOf R 25544 * @since v0.28.0 25545 * @category Function 25546 * @sig (({ a, b, c, ..., n }) -> x) -> { a, b, c, ...} -> ({ d, e, f, ..., n } -> x) 25547 * @param {Function} f 25548 * @param {Object} props 25549 * @return {Function} 25550 * @see R.partial, R.partialRight, R.curry, R.mergeDeepRight 25551 * @example 25552 * 25553 * const multiply2 = ({ a, b }) => a * b; 25554 * const double = R.partialObject(multiply2, { a: 2 }); 25555 * double({ b: 2 }); //=> 4 25556 * 25557 * const greet = ({ salutation, title, firstName, lastName }) => 25558 * salutation + ', ' + title + ' ' + firstName + ' ' + lastName + '!'; 25559 * 25560 * const sayHello = R.partialObject(greet, { salutation: 'Hello' }); 25561 * const sayHelloToMs = R.partialObject(sayHello, { title: 'Ms.' }); 25562 * sayHelloToMs({ firstName: 'Jane', lastName: 'Jones' }); //=> 'Hello, Ms. Jane Jones!' 25563 * @symb R.partialObject(f, { a, b })({ c, d }) = f({ a, b, c, d }) 25564 */ 25565 25566 25567module.exports = 25568/*#__PURE__*/ 25569_curry2((f, o) => props => f.call(this, mergeDeepRight(o, props))); 25570 25571/***/ }), 25572
vendor: 1,643 bytes, lines 25573-25625
25573/***/ "./node_modules/ramda/src/partialRight.js": 25574/*!************************************************!*\ 25575 !*** ./node_modules/ramda/src/partialRight.js ***! 25576 \************************************************/ 25577/***/ ((module, __unused_webpack_exports, __webpack_require__) => { 25578 25579var _concat = 25580/*#__PURE__*/ 25581__webpack_require__(/*! ./internal/_concat.js */ "./node_modules/ramda/src/internal/_concat.js"); 25582 25583var _createPartialApplicator = 25584/*#__PURE__*/ 25585__webpack_require__(/*! ./internal/_createPartialApplicator.js */ "./node_modules/ramda/src/internal/_createPartialApplicator.js"); 25586 25587var flip = 25588/*#__PURE__*/ 25589__webpack_require__(/*! ./flip.js */ "./node_modules/ramda/src/flip.js"); 25590/** 25591 * Takes a function `f` and a list of arguments, and returns a function `g`. 25592 * When applied, `g` returns the result of applying `f` to the arguments 25593 * provided to `g` followed by the arguments provided initially. 25594 * 25595 * @func 25596 * @memberOf R 25597 * @since v0.10.0 25598 * @category Function 25599 * @sig ((a, b, c, ..., n) -> x) -> [d, e, f, ..., n] -> ((a, b, c, ...) -> x) 25600 * @param {Function} f 25601 * @param {Array} args 25602 * @return {Function} 25603 * @see R.partial 25604 * @example 25605 * 25606 * const greet = (salutation, title, firstName, lastName) => 25607 * salutation + ', ' + title + ' ' + firstName + ' ' + lastName + '!'; 25608 * 25609 * const greetMsJaneJones = R.partialRight(greet, ['Ms.', 'Jane', 'Jones']); 25610 * 25611 * greetMsJaneJones('Hello'); //=> 'Hello, Ms. Jane Jones!' 25612 * @symb R.partialRight(f, [a, b])(c, d) = f(c, d, a, b) 25613 */ 25614 25615 25616var partialRight = 25617/*#__PURE__*/ 25618_createPartialApplicator( 25619/*#__PURE__*/ 25620flip(_concat)); 25621 25622module.exports = partialRight; 25623 25624/***/ }), 25625
vendor: 1,728 bytes, lines 25626-25675
25626/***/ "./node_modules/ramda/src/partition.js": 25627/*!*********************************************!*\ 25628 !*** ./node_modules/ramda/src/partition.js ***! 25629 \*********************************************/ 25630/***/ ((module, __unused_webpack_exports, __webpack_require__) => { 25631 25632var filter = 25633/*#__PURE__*/ 25634__webpack_require__(/*! ./filter.js */ "./node_modules/ramda/src/filter.js"); 25635 25636var juxt = 25637/*#__PURE__*/ 25638__webpack_require__(/*! ./juxt.js */ "./node_modules/ramda/src/juxt.js"); 25639 25640var reject = 25641/*#__PURE__*/ 25642__webpack_require__(/*! ./reject.js */ "./node_modules/ramda/src/reject.js"); 25643/** 25644 * Takes a predicate and a list or other `Filterable` object and returns the 25645 * pair of filterable objects of the same type of elements which do and do not 25646 * satisfy, the predicate, respectively. Filterable objects include plain objects or any object 25647 * that has a filter method such as `Array`. 25648 * 25649 * @func 25650 * @memberOf R 25651 * @since v0.1.4 25652 * @category List 25653 * @sig Filterable f => (a -> Boolean) -> f a -> [f a, f a] 25654 * @param {Function} pred A predicate to determine which side the element belongs to. 25655 * @param {Array} filterable the list (or other filterable) to partition. 25656 * @return {Array} An array, containing first the subset of elements that satisfy the 25657 * predicate, and second the subset of elements that do not satisfy. 25658 * @see R.filter, R.reject 25659 * @example 25660 * 25661 * R.partition(R.includes('s'), ['sss', 'ttt', 'foo', 'bars']); 25662 * // => [ [ 'sss', 'bars' ], [ 'ttt', 'foo' ] ] 25663 * 25664 * R.partition(R.includes('s'), { a: 'sss', b: 'ttt', foo: 'bars' }); 25665 * // => [ { a: 'sss', foo: 'bars' }, { b: 'ttt' } ] 25666 */ 25667 25668 25669var partition = 25670/*#__PURE__*/ 25671juxt([filter, reject]); 25672module.exports = partition; 25673 25674/***/ }), 25675
vendor: 1,212 bytes, lines 25676-25720
25676/***/ "./node_modules/ramda/src/path.js": 25677/*!****************************************!*\ 25678 !*** ./node_modules/ramda/src/path.js ***! 25679 \****************************************/ 25680/***/ ((module, __unused_webpack_exports, __webpack_require__) => { 25681 25682var _curry2 = 25683/*#__PURE__*/ 25684__webpack_require__(/*! ./internal/_curry2.js */ "./node_modules/ramda/src/internal/_curry2.js"); 25685 25686var paths = 25687/*#__PURE__*/ 25688__webpack_require__(/*! ./paths.js */ "./node_modules/ramda/src/paths.js"); 25689/** 25690 * Retrieve the value at a given path. 25691 * 25692 * @func 25693 * @memberOf R 25694 * @since v0.2.0 25695 * @category Object 25696 * @typedefn Idx = String | Int | Symbol 25697 * @sig [Idx] -> {a} -> a | Undefined 25698 * @param {Array} path The path to use. 25699 * @param {Object} obj The object to retrieve the nested property from. 25700 * @return {*} The data at `path`. 25701 * @see R.prop, R.nth 25702 * @example 25703 * 25704 * R.path(['a', 'b'], {a: {b: 2}}); //=> 2 25705 * R.path(['a', 'b'], {c: {b: 2}}); //=> undefined 25706 * R.path(['a', 'b', 0], {a: {b: [1, 2, 3]}}); //=> 1 25707 * R.path(['a', 'b', -2], {a: {b: [1, 2, 3]}}); //=> 2 25708 */ 25709 25710 25711var path = 25712/*#__PURE__*/ 25713_curry2(function path(pathAr, obj) { 25714 return paths([pathAr], obj)[0]; 25715}); 25716 25717module.exports = path; 25718 25719/***/ }), 25720
vendor: 1,660 bytes, lines 25721-25773
25721/***/ "./node_modules/ramda/src/pathEq.js": 25722/*!******************************************!*\ 25723 !*** ./node_modules/ramda/src/pathEq.js ***! 25724 \******************************************/ 25725/***/ ((module, __unused_webpack_exports, __webpack_require__) => { 25726 25727var _curry3 = 25728/*#__PURE__*/ 25729__webpack_require__(/*! ./internal/_curry3.js */ "./node_modules/ramda/src/internal/_curry3.js"); 25730 25731var equals = 25732/*#__PURE__*/ 25733__webpack_require__(/*! ./equals.js */ "./node_modules/ramda/src/equals.js"); 25734 25735var path = 25736/*#__PURE__*/ 25737__webpack_require__(/*! ./path.js */ "./node_modules/ramda/src/path.js"); 25738/** 25739 * Determines whether a nested path on an object has a specific value, in 25740 * [`R.equals`](#equals) terms. Most likely used to filter a list. 25741 * 25742 * @func 25743 * @memberOf R 25744 * @since v0.7.0 25745 * @category Relation 25746 * @typedefn Idx = String | Int | Symbol 25747 * @sig [Idx] -> a -> {a} -> Boolean 25748 * @param {Array} path The path of the nested property to use 25749 * @param {*} val The value to compare the nested property with 25750 * @param {Object} obj The object to check the nested property in 25751 * @return {Boolean} `true` if the value equals the nested object property, 25752 * `false` otherwise. 25753 * @example 25754 * 25755 * const user1 = { address: { zipCode: 90210 } }; 25756 * const user2 = { address: { zipCode: 55555 } }; 25757 * const user3 = { name: 'Bob' }; 25758 * const users = [ user1, user2, user3 ]; 25759 * const isFamous = R.pathEq(['address', 'zipCode'], 90210); 25760 * R.filter(isFamous, users); //=> [ user1 ] 25761 */ 25762 25763 25764var pathEq = 25765/*#__PURE__*/ 25766_curry3(function pathEq(_path, val, obj) { 25767 return equals(path(_path, obj), val); 25768}); 25769 25770module.exports = pathEq; 25771 25772/***/ }), 25773
vendor: 1,388 bytes, lines 25774-25821
25774/***/ "./node_modules/ramda/src/pathOr.js": 25775/*!******************************************!*\ 25776 !*** ./node_modules/ramda/src/pathOr.js ***! 25777 \******************************************/ 25778/***/ ((module, __unused_webpack_exports, __webpack_require__) => { 25779 25780var _curry3 = 25781/*#__PURE__*/ 25782__webpack_require__(/*! ./internal/_curry3.js */ "./node_modules/ramda/src/internal/_curry3.js"); 25783 25784var defaultTo = 25785/*#__PURE__*/ 25786__webpack_require__(/*! ./defaultTo.js */ "./node_modules/ramda/src/defaultTo.js"); 25787 25788var path = 25789/*#__PURE__*/ 25790__webpack_require__(/*! ./path.js */ "./node_modules/ramda/src/path.js"); 25791/** 25792 * If the given, non-null object has a value at the given path, returns the 25793 * value at that path. Otherwise returns the provided default value. 25794 * 25795 * @func 25796 * @memberOf R 25797 * @since v0.18.0 25798 * @category Object 25799 * @typedefn Idx = String | Int | Symbol 25800 * @sig a -> [Idx] -> {a} -> a 25801 * @param {*} d The default value. 25802 * @param {Array} p The path to use. 25803 * @param {Object} obj The object to retrieve the nested property from. 25804 * @return {*} The data at `path` of the supplied object or the default value. 25805 * @example 25806 * 25807 * R.pathOr('N/A', ['a', 'b'], {a: {b: 2}}); //=> 2 25808 * R.pathOr('N/A', ['a', 'b'], {c: {b: 2}}); //=> "N/A" 25809 */ 25810 25811 25812var pathOr = 25813/*#__PURE__*/ 25814_curry3(function pathOr(d, p, obj) { 25815 return defaultTo(d, path(p, obj)); 25816}); 25817 25818module.exports = pathOr; 25819 25820/***/ }), 25821
vendor: 1,243 bytes, lines 25822-25866
25822/***/ "./node_modules/ramda/src/pathSatisfies.js": 25823/*!*************************************************!*\ 25824 !*** ./node_modules/ramda/src/pathSatisfies.js ***! 25825 \*************************************************/ 25826/***/ ((module, __unused_webpack_exports, __webpack_require__) => { 25827 25828var _curry3 = 25829/*#__PURE__*/ 25830__webpack_require__(/*! ./internal/_curry3.js */ "./node_modules/ramda/src/internal/_curry3.js"); 25831 25832var path = 25833/*#__PURE__*/ 25834__webpack_require__(/*! ./path.js */ "./node_modules/ramda/src/path.js"); 25835/** 25836 * Returns `true` if the specified object property at given path satisfies the 25837 * given predicate; `false` otherwise. 25838 * 25839 * @func 25840 * @memberOf R 25841 * @since v0.19.0 25842 * @category Logic 25843 * @typedefn Idx = String | Int | Symbol 25844 * @sig (a -> Boolean) -> [Idx] -> {a} -> Boolean 25845 * @param {Function} pred 25846 * @param {Array} propPath 25847 * @param {*} obj 25848 * @return {Boolean} 25849 * @see R.propSatisfies, R.path 25850 * @example 25851 * 25852 * R.pathSatisfies(y => y > 0, ['x', 'y'], {x: {y: 2}}); //=> true 25853 * R.pathSatisfies(R.is(Object), [], {x: {y: 2}}); //=> true 25854 */ 25855 25856 25857var pathSatisfies = 25858/*#__PURE__*/ 25859_curry3(function pathSatisfies(pred, propPath, obj) { 25860 return pred(path(propPath, obj)); 25861}); 25862 25863module.exports = pathSatisfies; 25864 25865/***/ }), 25866
vendor: 1,645 bytes, lines 25867-25929
25867/***/ "./node_modules/ramda/src/paths.js": 25868/*!*****************************************!*\ 25869 !*** ./node_modules/ramda/src/paths.js ***! 25870 \*****************************************/ 25871/***/ ((module, __unused_webpack_exports, __webpack_require__) => { 25872 25873var _curry2 = 25874/*#__PURE__*/ 25875__webpack_require__(/*! ./internal/_curry2.js */ "./node_modules/ramda/src/internal/_curry2.js"); 25876 25877var _isInteger = 25878/*#__PURE__*/ 25879__webpack_require__(/*! ./internal/_isInteger.js */ "./node_modules/ramda/src/internal/_isInteger.js"); 25880 25881var nth = 25882/*#__PURE__*/ 25883__webpack_require__(/*! ./nth.js */ "./node_modules/ramda/src/nth.js"); 25884/** 25885 * Retrieves the values at given paths of an object. 25886 * 25887 * @func 25888 * @memberOf R 25889 * @since v0.27.1 25890 * @category Object 25891 * @typedefn Idx = [String | Int | Symbol] 25892 * @sig [Idx] -> {a} -> [a | Undefined] 25893 * @param {Array} pathsArray The array of paths to be fetched. 25894 * @param {Object} obj The object to retrieve the nested properties from. 25895 * @return {Array} A list consisting of values at paths specified by "pathsArray". 25896 * @see R.path 25897 * @example 25898 * 25899 * R.paths([['a', 'b'], ['p', 0, 'q']], {a: {b: 2}, p: [{q: 3}]}); //=> [2, 3] 25900 * R.paths([['a', 'b'], ['p', 'r']], {a: {b: 2}, p: [{q: 3}]}); //=> [2, undefined] 25901 */ 25902 25903 25904var paths = 25905/*#__PURE__*/ 25906_curry2(function paths(pathsArray, obj) { 25907 return pathsArray.map(function (paths) { 25908 var val = obj; 25909 var idx = 0; 25910 var p; 25911 25912 while (idx < paths.length) { 25913 if (val == null) { 25914 return; 25915 } 25916 25917 p = paths[idx]; 25918 val = _isInteger(p) ? nth(p, val) : val[p]; 25919 idx += 1; 25920 } 25921 25922 return val; 25923 }); 25924}); 25925 25926module.exports = paths; 25927 25928/***/ }), 25929
vendor: 1,280 bytes, lines 25930-25979
25930/***/ "./node_modules/ramda/src/pick.js": 25931/*!****************************************!*\ 25932 !*** ./node_modules/ramda/src/pick.js ***! 25933 \****************************************/ 25934/***/ ((module, __unused_webpack_exports, __webpack_require__) => { 25935 25936var _curry2 = 25937/*#__PURE__*/ 25938__webpack_require__(/*! ./internal/_curry2.js */ "./node_modules/ramda/src/internal/_curry2.js"); 25939/** 25940 * Returns a partial copy of an object containing only the keys specified. If 25941 * the key does not exist, the property is ignored. 25942 * 25943 * @func 25944 * @memberOf R 25945 * @since v0.1.0 25946 * @category Object 25947 * @sig [k] -> {k: v} -> {k: v} 25948 * @param {Array} names an array of String property names to copy onto a new object 25949 * @param {Object} obj The object to copy from 25950 * @return {Object} A new object with only properties from `names` on it. 25951 * @see R.omit, R.props 25952 * @example 25953 * 25954 * R.pick(['a', 'd'], {a: 1, b: 2, c: 3, d: 4}); //=> {a: 1, d: 4} 25955 * R.pick(['a', 'e', 'f'], {a: 1, b: 2, c: 3, d: 4}); //=> {a: 1} 25956 */ 25957 25958 25959var pick = 25960/*#__PURE__*/ 25961_curry2(function pick(names, obj) { 25962 var result = {}; 25963 var idx = 0; 25964 25965 while (idx < names.length) { 25966 if (names[idx] in obj) { 25967 result[names[idx]] = obj[names[idx]]; 25968 } 25969 25970 idx += 1; 25971 } 25972 25973 return result; 25974}); 25975 25976module.exports = pick; 25977 25978/***/ }), 25979
vendor: 1,301 bytes, lines 25980-26028
25980/***/ "./node_modules/ramda/src/pickAll.js": 25981/*!*******************************************!*\ 25982 !*** ./node_modules/ramda/src/pickAll.js ***! 25983 \*******************************************/ 25984/***/ ((module, __unused_webpack_exports, __webpack_require__) => { 25985 25986var _curry2 = 25987/*#__PURE__*/ 25988__webpack_require__(/*! ./internal/_curry2.js */ "./node_modules/ramda/src/internal/_curry2.js"); 25989/** 25990 * Similar to `pick` except that this one includes a `key: undefined` pair for 25991 * properties that don't exist. 25992 * 25993 * @func 25994 * @memberOf R 25995 * @since v0.1.0 25996 * @category Object 25997 * @sig [k] -> {k: v} -> {k: v} 25998 * @param {Array} names an array of String property names to copy onto a new object 25999 * @param {Object} obj The object to copy from 26000 * @return {Object} A new object with only properties from `names` on it. 26001 * @see R.pick 26002 * @example 26003 * 26004 * R.pickAll(['a', 'd'], {a: 1, b: 2, c: 3, d: 4}); //=> {a: 1, d: 4} 26005 * R.pickAll(['a', 'e', 'f'], {a: 1, b: 2, c: 3, d: 4}); //=> {a: 1, e: undefined, f: undefined} 26006 */ 26007 26008 26009var pickAll = 26010/*#__PURE__*/ 26011_curry2(function pickAll(names, obj) { 26012 var result = {}; 26013 var idx = 0; 26014 var len = names.length; 26015 26016 while (idx < len) { 26017 var name = names[idx]; 26018 result[name] = obj[name]; 26019 idx += 1; 26020 } 26021 26022 return result; 26023}); 26024 26025module.exports = pickAll; 26026 26027/***/ }), 26028
vendor: 1,304 bytes, lines 26029-26077
26029/***/ "./node_modules/ramda/src/pickBy.js": 26030/*!******************************************!*\ 26031 !*** ./node_modules/ramda/src/pickBy.js ***! 26032 \******************************************/ 26033/***/ ((module, __unused_webpack_exports, __webpack_require__) => { 26034 26035var _curry2 = 26036/*#__PURE__*/ 26037__webpack_require__(/*! ./internal/_curry2.js */ "./node_modules/ramda/src/internal/_curry2.js"); 26038/** 26039 * Returns a partial copy of an object containing only the keys that satisfy 26040 * the supplied predicate. 26041 * 26042 * @func 26043 * @memberOf R 26044 * @since v0.8.0 26045 * @category Object 26046 * @sig ((v, k) -> Boolean) -> {k: v} -> {k: v} 26047 * @param {Function} pred A predicate to determine whether or not a key 26048 * should be included on the output object. 26049 * @param {Object} obj The object to copy from 26050 * @return {Object} A new object with only properties that satisfy `pred` 26051 * on it. 26052 * @see R.pick, R.filter 26053 * @example 26054 * 26055 * const isUpperCase = (val, key) => key.toUpperCase() === key; 26056 * R.pickBy(isUpperCase, {a: 1, b: 2, A: 3, B: 4}); //=> {A: 3, B: 4} 26057 */ 26058 26059 26060var pickBy = 26061/*#__PURE__*/ 26062_curry2(function pickBy(test, obj) { 26063 var result = {}; 26064 26065 for (var prop in obj) { 26066 if (test(obj[prop], prop, obj)) { 26067 result[prop] = obj[prop]; 26068 } 26069 } 26070 26071 return result; 26072}); 26073 26074module.exports = pickBy; 26075 26076/***/ }), 26077
vendor: 1,626 bytes, lines 26078-26136
26078/***/ "./node_modules/ramda/src/pipe.js": 26079/*!****************************************!*\ 26080 !*** ./node_modules/ramda/src/pipe.js ***! 26081 \****************************************/ 26082/***/ ((module, __unused_webpack_exports, __webpack_require__) => { 26083 26084var _arity = 26085/*#__PURE__*/ 26086__webpack_require__(/*! ./internal/_arity.js */ "./node_modules/ramda/src/internal/_arity.js"); 26087 26088var _pipe = 26089/*#__PURE__*/ 26090__webpack_require__(/*! ./internal/_pipe.js */ "./node_modules/ramda/src/internal/_pipe.js"); 26091 26092var reduce = 26093/*#__PURE__*/ 26094__webpack_require__(/*! ./reduce.js */ "./node_modules/ramda/src/reduce.js"); 26095 26096var tail = 26097/*#__PURE__*/ 26098__webpack_require__(/*! ./tail.js */ "./node_modules/ramda/src/tail.js"); 26099/** 26100 * Performs left-to-right function composition. The first argument may have 26101 * any arity; the remaining arguments must be unary. 26102 * 26103 * In some libraries this function is named `sequence`. 26104 * 26105 * **Note:** The result of pipe is not automatically curried. 26106 * 26107 * @func 26108 * @memberOf R 26109 * @since v0.1.0 26110 * @category Function 26111 * @sig (((a, b, ..., n) -> o), (o -> p), ..., (x -> y), (y -> z)) -> ((a, b, ..., n) -> z) 26112 * @param {...Function} functions 26113 * @return {Function} 26114 * @see R.compose 26115 * @example 26116 * 26117 * const f = R.pipe(Math.pow, R.negate, R.inc); 26118 * 26119 * f(3, 4); // -(3^4) + 1 26120 * @symb R.pipe(f, g, h)(a, b) = h(g(f(a, b))) 26121 * @symb R.pipe(f, g, h)(a)(b) = h(g(f(a)))(b) 26122 */ 26123 26124 26125function pipe() { 26126 if (arguments.length === 0) { 26127 throw new Error('pipe requires at least one argument'); 26128 } 26129 26130 return _arity(arguments[0].length, reduce(_pipe, arguments[0], tail(arguments))); 26131} 26132 26133module.exports = pipe; 26134 26135/***/ }), 26136
vendor: 2,252 bytes, lines 26137-26211
26137/***/ "./node_modules/ramda/src/pipeWith.js": 26138/*!********************************************!*\ 26139 !*** ./node_modules/ramda/src/pipeWith.js ***! 26140 \********************************************/ 26141/***/ ((module, __unused_webpack_exports, __webpack_require__) => { 26142 26143var _arity = 26144/*#__PURE__*/ 26145__webpack_require__(/*! ./internal/_arity.js */ "./node_modules/ramda/src/internal/_arity.js"); 26146 26147var _curry2 = 26148/*#__PURE__*/ 26149__webpack_require__(/*! ./internal/_curry2.js */ "./node_modules/ramda/src/internal/_curry2.js"); 26150 26151var head = 26152/*#__PURE__*/ 26153__webpack_require__(/*! ./head.js */ "./node_modules/ramda/src/head.js"); 26154 26155var _reduce = 26156/*#__PURE__*/ 26157__webpack_require__(/*! ./internal/_reduce.js */ "./node_modules/ramda/src/internal/_reduce.js"); 26158 26159var tail = 26160/*#__PURE__*/ 26161__webpack_require__(/*! ./tail.js */ "./node_modules/ramda/src/tail.js"); 26162 26163var identity = 26164/*#__PURE__*/ 26165__webpack_require__(/*! ./identity.js */ "./node_modules/ramda/src/identity.js"); 26166/** 26167 * Performs left-to-right function composition using transforming function. The first function may have 26168 * any arity; the remaining functions must be unary. 26169 * 26170 * **Note:** The result of pipeWith is not automatically curried. Transforming function is not used on the 26171 * first argument. 26172 * 26173 * @func 26174 * @memberOf R 26175 * @since v0.26.0 26176 * @category Function 26177 * @sig ((* -> *), [((a, b, ..., n) -> o), (o -> p), ..., (x -> y), (y -> z)]) -> ((a, b, ..., n) -> z) 26178 * @param {Function} transformer The transforming function 26179 * @param {Array} functions The functions to pipe 26180 * @return {Function} 26181 * @see R.composeWith, R.pipe 26182 * @example 26183 * 26184 * const pipeWhileNotNil = R.pipeWith((f, res) => R.isNil(res) ? res : f(res)); 26185 * const f = pipeWhileNotNil([Math.pow, R.negate, R.inc]) 26186 * 26187 * f(3, 4); // -(3^4) + 1 26188 * @symb R.pipeWith(f)([g, h, i])(...args) = f(i, f(h, g(...args))) 26189 */ 26190 26191 26192var pipeWith = 26193/*#__PURE__*/ 26194_curry2(function pipeWith(xf, list) { 26195 if (list.length <= 0) { 26196 return identity; 26197 } 26198 26199 var headList = head(list); 26200 var tailList = tail(list); 26201 return _arity(headList.length, function () { 26202 return _reduce(function (result, f) { 26203 return xf.call(this, f, result); 26204 }, headList.apply(this, arguments), tailList); 26205 }); 26206}); 26207 26208module.exports = pipeWith; 26209 26210/***/ }), 26211
vendor: 1,715 bytes, lines 26212-26267
26212/***/ "./node_modules/ramda/src/pluck.js": 26213/*!*****************************************!*\ 26214 !*** ./node_modules/ramda/src/pluck.js ***! 26215 \*****************************************/ 26216/***/ ((module, __unused_webpack_exports, __webpack_require__) => { 26217 26218var _curry2 = 26219/*#__PURE__*/ 26220__webpack_require__(/*! ./internal/_curry2.js */ "./node_modules/ramda/src/internal/_curry2.js"); 26221 26222var map = 26223/*#__PURE__*/ 26224__webpack_require__(/*! ./map.js */ "./node_modules/ramda/src/map.js"); 26225 26226var prop = 26227/*#__PURE__*/ 26228__webpack_require__(/*! ./prop.js */ "./node_modules/ramda/src/prop.js"); 26229/** 26230 * Returns a new list by plucking the same named property off all objects in 26231 * the list supplied. 26232 * 26233 * `pluck` will work on 26234 * any [functor](https://github.com/fantasyland/fantasy-land#functor) in 26235 * addition to arrays, as it is equivalent to `R.map(R.prop(k), f)`. 26236 * 26237 * @func 26238 * @memberOf R 26239 * @since v0.1.0 26240 * @category List 26241 * @sig Functor f => k -> f {k: v} -> f v 26242 * @param {Number|String} key The key name to pluck off of each object. 26243 * @param {Array} f The array or functor to consider. 26244 * @return {Array} The list of values for the given key. 26245 * @see R.project, R.prop, R.props 26246 * @example 26247 * 26248 * var getAges = R.pluck('age'); 26249 * getAges([{name: 'fred', age: 29}, {name: 'wilma', age: 27}]); //=> [29, 27] 26250 * 26251 * R.pluck(0, [[1, 2], [3, 4]]); //=> [1, 3] 26252 * R.pluck('val', {a: {val: 3}, b: {val: 5}}); //=> {a: 3, b: 5} 26253 * @symb R.pluck('x', [{x: 1, y: 2}, {x: 3, y: 4}, {x: 5, y: 6}]) = [1, 3, 5] 26254 * @symb R.pluck(0, [[1, 2], [3, 4], [5, 6]]) = [1, 3, 5] 26255 */ 26256 26257 26258var pluck = 26259/*#__PURE__*/ 26260_curry2(function pluck(p, list) { 26261 return map(prop(p), list); 26262}); 26263 26264module.exports = pluck; 26265 26266/***/ }), 26267
vendor: 1,127 bytes, lines 26268-26309
26268/***/ "./node_modules/ramda/src/prepend.js": 26269/*!*******************************************!*\ 26270 !*** ./node_modules/ramda/src/prepend.js ***! 26271 \*******************************************/ 26272/***/ ((module, __unused_webpack_exports, __webpack_require__) => { 26273 26274var _concat = 26275/*#__PURE__*/ 26276__webpack_require__(/*! ./internal/_concat.js */ "./node_modules/ramda/src/internal/_concat.js"); 26277 26278var _curry2 = 26279/*#__PURE__*/ 26280__webpack_require__(/*! ./internal/_curry2.js */ "./node_modules/ramda/src/internal/_curry2.js"); 26281/** 26282 * Returns a new list with the given element at the front, followed by the 26283 * contents of the list. 26284 * 26285 * @func 26286 * @memberOf R 26287 * @since v0.1.0 26288 * @category List 26289 * @sig a -> [a] -> [a] 26290 * @param {*} el The item to add to the head of the output list. 26291 * @param {Array} list The array to add to the tail of the output list. 26292 * @return {Array} A new array. 26293 * @see R.append 26294 * @example 26295 * 26296 * R.prepend('fee', ['fi', 'fo', 'fum']); //=> ['fee', 'fi', 'fo', 'fum'] 26297 */ 26298 26299 26300var prepend = 26301/*#__PURE__*/ 26302_curry2(function prepend(el, list) { 26303 return _concat([el], list); 26304}); 26305 26306module.exports = prepend; 26307 26308/***/ }), 26309
vendor: 900 bytes, lines 26310-26346
26310/***/ "./node_modules/ramda/src/product.js": 26311/*!*******************************************!*\ 26312 !*** ./node_modules/ramda/src/product.js ***! 26313 \*******************************************/ 26314/***/ ((module, __unused_webpack_exports, __webpack_require__) => { 26315 26316var multiply = 26317/*#__PURE__*/ 26318__webpack_require__(/*! ./multiply.js */ "./node_modules/ramda/src/multiply.js"); 26319 26320var reduce = 26321/*#__PURE__*/ 26322__webpack_require__(/*! ./reduce.js */ "./node_modules/ramda/src/reduce.js"); 26323/** 26324 * Multiplies together all the elements of a list. 26325 * 26326 * @func 26327 * @memberOf R 26328 * @since v0.1.0 26329 * @category Math 26330 * @sig [Number] -> Number 26331 * @param {Array} list An array of numbers 26332 * @return {Number} The product of all the numbers in the list. 26333 * @see R.reduce 26334 * @example 26335 * 26336 * R.product([2,4,6,8,100,1]); //=> 38400 26337 */ 26338 26339 26340var product = 26341/*#__PURE__*/ 26342reduce(multiply, 1); 26343module.exports = product; 26344 26345/***/ }), 26346
vendor: 1,529 bytes, lines 26347-26397
26347/***/ "./node_modules/ramda/src/project.js": 26348/*!*******************************************!*\ 26349 !*** ./node_modules/ramda/src/project.js ***! 26350 \*******************************************/ 26351/***/ ((module, __unused_webpack_exports, __webpack_require__) => { 26352 26353var _map = 26354/*#__PURE__*/ 26355__webpack_require__(/*! ./internal/_map.js */ "./node_modules/ramda/src/internal/_map.js"); 26356 26357var identity = 26358/*#__PURE__*/ 26359__webpack_require__(/*! ./identity.js */ "./node_modules/ramda/src/identity.js"); 26360 26361var pickAll = 26362/*#__PURE__*/ 26363__webpack_require__(/*! ./pickAll.js */ "./node_modules/ramda/src/pickAll.js"); 26364 26365var useWith = 26366/*#__PURE__*/ 26367__webpack_require__(/*! ./useWith.js */ "./node_modules/ramda/src/useWith.js"); 26368/** 26369 * Reasonable analog to SQL `select` statement. 26370 * 26371 * @func 26372 * @memberOf R 26373 * @since v0.1.0 26374 * @category Object 26375 * @category Relation 26376 * @sig [k] -> [{k: v}] -> [{k: v}] 26377 * @param {Array} props The property names to project 26378 * @param {Array} objs The objects to query 26379 * @return {Array} An array of objects with just the `props` properties. 26380 * @see R.pluck, R.props, R.prop 26381 * @example 26382 * 26383 * const abby = {name: 'Abby', age: 7, hair: 'blond', grade: 2}; 26384 * const fred = {name: 'Fred', age: 12, hair: 'brown', grade: 7}; 26385 * const kids = [abby, fred]; 26386 * R.project(['name', 'grade'], kids); //=> [{name: 'Abby', grade: 2}, {name: 'Fred', grade: 7}] 26387 */ 26388 26389 26390var project = 26391/*#__PURE__*/ 26392useWith(_map, [pickAll, identity]); // passing `identity` gives correct arity 26393 26394module.exports = project; 26395 26396/***/ }), 26397
vendor: 2,152 bytes, lines 26398-26459
26398/***/ "./node_modules/ramda/src/promap.js": 26399/*!******************************************!*\ 26400 !*** ./node_modules/ramda/src/promap.js ***! 26401 \******************************************/ 26402/***/ ((module, __unused_webpack_exports, __webpack_require__) => { 26403 26404var _curry3 = 26405/*#__PURE__*/ 26406__webpack_require__(/*! ./internal/_curry3.js */ "./node_modules/ramda/src/internal/_curry3.js"); 26407 26408var _dispatchable = 26409/*#__PURE__*/ 26410__webpack_require__(/*! ./internal/_dispatchable.js */ "./node_modules/ramda/src/internal/_dispatchable.js"); 26411 26412var _promap = 26413/*#__PURE__*/ 26414__webpack_require__(/*! ./internal/_promap.js */ "./node_modules/ramda/src/internal/_promap.js"); 26415 26416var _xpromap = 26417/*#__PURE__*/ 26418__webpack_require__(/*! ./internal/_xpromap.js */ "./node_modules/ramda/src/internal/_xpromap.js"); 26419/** 26420 * Takes two functions as pre- and post- processors respectively for a third function, 26421 * i.e. `promap(f, g, h)(x) === g(h(f(x)))`. 26422 * 26423 * Dispatches to the `promap` method of the third argument, if present, 26424 * according to the [FantasyLand Profunctor spec](https://github.com/fantasyland/fantasy-land#profunctor). 26425 * 26426 * Acts as a transducer if a transformer is given in profunctor position. 26427 * 26428 * @func 26429 * @memberOf R 26430 * @since v0.28.0 26431 * @category Function 26432 * @sig (a -> b) -> (c -> d) -> (b -> c) -> (a -> d) 26433 * @sig Profunctor p => (a -> b) -> (c -> d) -> p b c -> p a d 26434 * @param {Function} f The preprocessor function, a -> b 26435 * @param {Function} g The postprocessor function, c -> d 26436 * @param {Profunctor} profunctor The profunctor instance to be promapped, e.g. b -> c 26437 * @return {Profunctor} The new profunctor instance, e.g. a -> d 26438 * @see R.transduce 26439 * @example 26440 * 26441 * const decodeChar = R.promap(s => s.charCodeAt(), String.fromCharCode, R.add(-8)) 26442 * const decodeString = R.promap(R.split(''), R.join(''), R.map(decodeChar)) 26443 * decodeString("ziuli") //=> "ramda" 26444 * 26445 * @symb R.promap(f, g, h) = x => g(h(f(x))) 26446 * @symb R.promap(f, g, profunctor) = profunctor.promap(f, g) 26447 */ 26448 26449 26450var promap = 26451/*#__PURE__*/ 26452_curry3( 26453/*#__PURE__*/ 26454_dispatchable(['fantasy-land/promap', 'promap'], _xpromap, _promap)); 26455 26456module.exports = promap; 26457 26458/***/ }), 26459
vendor: 1,435 bytes, lines 26460-26513
26460/***/ "./node_modules/ramda/src/prop.js": 26461/*!****************************************!*\ 26462 !*** ./node_modules/ramda/src/prop.js ***! 26463 \****************************************/ 26464/***/ ((module, __unused_webpack_exports, __webpack_require__) => { 26465 26466var _curry2 = 26467/*#__PURE__*/ 26468__webpack_require__(/*! ./internal/_curry2.js */ "./node_modules/ramda/src/internal/_curry2.js"); 26469 26470var _isInteger = 26471/*#__PURE__*/ 26472__webpack_require__(/*! ./internal/_isInteger.js */ "./node_modules/ramda/src/internal/_isInteger.js"); 26473 26474var nth = 26475/*#__PURE__*/ 26476__webpack_require__(/*! ./nth.js */ "./node_modules/ramda/src/nth.js"); 26477/** 26478 * Returns a function that when supplied an object returns the indicated 26479 * property of that object, if it exists. 26480 * 26481 * @func 26482 * @memberOf R 26483 * @since v0.1.0 26484 * @category Object 26485 * @typedefn Idx = String | Int | Symbol 26486 * @sig Idx -> {s: a} -> a | Undefined 26487 * @param {String|Number} p The property name or array index 26488 * @param {Object} obj The object to query 26489 * @return {*} The value at `obj.p`. 26490 * @see R.path, R.props, R.pluck, R.project, R.nth 26491 * @example 26492 * 26493 * R.prop('x', {x: 100}); //=> 100 26494 * R.prop('x', {}); //=> undefined 26495 * R.prop(0, [100]); //=> 100 26496 * R.compose(R.inc, R.prop('x'))({ x: 3 }) //=> 4 26497 */ 26498 26499 26500var prop = 26501/*#__PURE__*/ 26502_curry2(function prop(p, obj) { 26503 if (obj == null) { 26504 return; 26505 } 26506 26507 return _isInteger(p) ? nth(p, obj) : obj[p]; 26508}); 26509 26510module.exports = prop; 26511 26512/***/ }), 26513
vendor: 1,613 bytes, lines 26514-26567
26514/***/ "./node_modules/ramda/src/propEq.js": 26515/*!******************************************!*\ 26516 !*** ./node_modules/ramda/src/propEq.js ***! 26517 \******************************************/ 26518/***/ ((module, __unused_webpack_exports, __webpack_require__) => { 26519 26520var _curry3 = 26521/*#__PURE__*/ 26522__webpack_require__(/*! ./internal/_curry3.js */ "./node_modules/ramda/src/internal/_curry3.js"); 26523 26524var prop = 26525/*#__PURE__*/ 26526__webpack_require__(/*! ./prop.js */ "./node_modules/ramda/src/prop.js"); 26527 26528var equals = 26529/*#__PURE__*/ 26530__webpack_require__(/*! ./equals.js */ "./node_modules/ramda/src/equals.js"); 26531/** 26532 * Returns `true` if the specified object property is equal, in 26533 * [`R.equals`](#equals) terms, to the given value; `false` otherwise. 26534 * You can test multiple properties with [`R.whereEq`](#whereEq). 26535 * 26536 * @func 26537 * @memberOf R 26538 * @since v0.1.0 26539 * @category Relation 26540 * @sig String -> a -> Object -> Boolean 26541 * @param {String} name 26542 * @param {*} val 26543 * @param {*} obj 26544 * @return {Boolean} 26545 * @see R.whereEq, R.propSatisfies, R.equals 26546 * @example 26547 * 26548 * const abby = {name: 'Abby', age: 7, hair: 'blond'}; 26549 * const fred = {name: 'Fred', age: 12, hair: 'brown'}; 26550 * const rusty = {name: 'Rusty', age: 10, hair: 'brown'}; 26551 * const alois = {name: 'Alois', age: 15, disposition: 'surly'}; 26552 * const kids = [abby, fred, rusty, alois]; 26553 * const hasBrownHair = R.propEq('hair', 'brown'); 26554 * R.filter(hasBrownHair, kids); //=> [fred, rusty] 26555 */ 26556 26557 26558var propEq = 26559/*#__PURE__*/ 26560_curry3(function propEq(name, val, obj) { 26561 return equals(val, prop(name, obj)); 26562}); 26563 26564module.exports = propEq; 26565 26566/***/ }), 26567
vendor: 1,240 bytes, lines 26568-26616
26568/***/ "./node_modules/ramda/src/propIs.js": 26569/*!******************************************!*\ 26570 !*** ./node_modules/ramda/src/propIs.js ***! 26571 \******************************************/ 26572/***/ ((module, __unused_webpack_exports, __webpack_require__) => { 26573 26574var _curry3 = 26575/*#__PURE__*/ 26576__webpack_require__(/*! ./internal/_curry3.js */ "./node_modules/ramda/src/internal/_curry3.js"); 26577 26578var prop = 26579/*#__PURE__*/ 26580__webpack_require__(/*! ./prop.js */ "./node_modules/ramda/src/prop.js"); 26581 26582var is = 26583/*#__PURE__*/ 26584__webpack_require__(/*! ./is.js */ "./node_modules/ramda/src/is.js"); 26585/** 26586 * Returns `true` if the specified object property is of the given type; 26587 * `false` otherwise. 26588 * 26589 * @func 26590 * @memberOf R 26591 * @since v0.16.0 26592 * @category Type 26593 * @sig Type -> String -> Object -> Boolean 26594 * @param {Function} type 26595 * @param {String} name 26596 * @param {*} obj 26597 * @return {Boolean} 26598 * @see R.is, R.propSatisfies 26599 * @example 26600 * 26601 * R.propIs(Number, 'x', {x: 1, y: 2}); //=> true 26602 * R.propIs(Number, 'x', {x: 'foo'}); //=> false 26603 * R.propIs(Number, 'x', {}); //=> false 26604 */ 26605 26606 26607var propIs = 26608/*#__PURE__*/ 26609_curry3(function propIs(type, name, obj) { 26610 return is(type, prop(name, obj)); 26611}); 26612 26613module.exports = propIs; 26614 26615/***/ }), 26616
vendor: 1,585 bytes, lines 26617-26672
26617/***/ "./node_modules/ramda/src/propOr.js": 26618/*!******************************************!*\ 26619 !*** ./node_modules/ramda/src/propOr.js ***! 26620 \******************************************/ 26621/***/ ((module, __unused_webpack_exports, __webpack_require__) => { 26622 26623var _curry3 = 26624/*#__PURE__*/ 26625__webpack_require__(/*! ./internal/_curry3.js */ "./node_modules/ramda/src/internal/_curry3.js"); 26626 26627var defaultTo = 26628/*#__PURE__*/ 26629__webpack_require__(/*! ./defaultTo.js */ "./node_modules/ramda/src/defaultTo.js"); 26630 26631var prop = 26632/*#__PURE__*/ 26633__webpack_require__(/*! ./prop.js */ "./node_modules/ramda/src/prop.js"); 26634/** 26635 * Return the specified property of the given non-null object if the property 26636 * is present and it's value is not `null`, `undefined` or `NaN`. 26637 * 26638 * Otherwise the first argument is returned. 26639 * 26640 * @func 26641 * @memberOf R 26642 * @since v0.6.0 26643 * @category Object 26644 * @sig a -> String -> Object -> a 26645 * @param {*} val The default value. 26646 * @param {String} p The name of the property to return. 26647 * @param {Object} obj The object to query. 26648 * @return {*} The value of given property of the supplied object or the default value. 26649 * @example 26650 * 26651 * const alice = { 26652 * name: 'ALICE', 26653 * age: 101 26654 * }; 26655 * const favorite = R.prop('favoriteLibrary'); 26656 * const favoriteWithDefault = R.propOr('Ramda', 'favoriteLibrary'); 26657 * 26658 * favorite(alice); //=> undefined 26659 * favoriteWithDefault(alice); //=> 'Ramda' 26660 */ 26661 26662 26663var propOr = 26664/*#__PURE__*/ 26665_curry3(function propOr(val, p, obj) { 26666 return defaultTo(val, prop(p, obj)); 26667}); 26668 26669module.exports = propOr; 26670 26671/***/ }), 26672
vendor: 1,180 bytes, lines 26673-26716
26673/***/ "./node_modules/ramda/src/propSatisfies.js": 26674/*!*************************************************!*\ 26675 !*** ./node_modules/ramda/src/propSatisfies.js ***! 26676 \*************************************************/ 26677/***/ ((module, __unused_webpack_exports, __webpack_require__) => { 26678 26679var _curry3 = 26680/*#__PURE__*/ 26681__webpack_require__(/*! ./internal/_curry3.js */ "./node_modules/ramda/src/internal/_curry3.js"); 26682 26683var prop = 26684/*#__PURE__*/ 26685__webpack_require__(/*! ./prop.js */ "./node_modules/ramda/src/prop.js"); 26686/** 26687 * Returns `true` if the specified object property satisfies the given 26688 * predicate; `false` otherwise. You can test multiple properties with 26689 * [`R.where`](#where). 26690 * 26691 * @func 26692 * @memberOf R 26693 * @since v0.16.0 26694 * @category Logic 26695 * @sig (a -> Boolean) -> String -> {String: a} -> Boolean 26696 * @param {Function} pred 26697 * @param {String} name 26698 * @param {*} obj 26699 * @return {Boolean} 26700 * @see R.where, R.propEq, R.propIs 26701 * @example 26702 * 26703 * R.propSatisfies(x => x > 0, 'x', {x: 1, y: 2}); //=> true 26704 */ 26705 26706 26707var propSatisfies = 26708/*#__PURE__*/ 26709_curry3(function propSatisfies(pred, name, obj) { 26710 return pred(prop(name, obj)); 26711}); 26712 26713module.exports = propSatisfies; 26714 26715/***/ }), 26716
vendor: 1,347 bytes, lines 26717-26764
26717/***/ "./node_modules/ramda/src/props.js": 26718/*!*****************************************!*\ 26719 !*** ./node_modules/ramda/src/props.js ***! 26720 \*****************************************/ 26721/***/ ((module, __unused_webpack_exports, __webpack_require__) => { 26722 26723var _curry2 = 26724/*#__PURE__*/ 26725__webpack_require__(/*! ./internal/_curry2.js */ "./node_modules/ramda/src/internal/_curry2.js"); 26726 26727var path = 26728/*#__PURE__*/ 26729__webpack_require__(/*! ./path.js */ "./node_modules/ramda/src/path.js"); 26730/** 26731 * Acts as multiple `prop`: array of keys in, array of values out. Preserves 26732 * order. 26733 * 26734 * @func 26735 * @memberOf R 26736 * @since v0.1.0 26737 * @category Object 26738 * @sig [k] -> {k: v} -> [v] 26739 * @param {Array} ps The property names to fetch 26740 * @param {Object} obj The object to query 26741 * @return {Array} The corresponding values or partially applied function. 26742 * @see R.prop, R.pluck, R.project 26743 * @example 26744 * 26745 * R.props(['x', 'y'], {x: 1, y: 2}); //=> [1, 2] 26746 * R.props(['c', 'a', 'b'], {b: 2, a: 1}); //=> [undefined, 1, 2] 26747 * 26748 * const fullName = R.compose(R.join(' '), R.props(['first', 'last'])); 26749 * fullName({last: 'Bullet-Tooth', age: 33, first: 'Tony'}); //=> 'Tony Bullet-Tooth' 26750 */ 26751 26752 26753var props = 26754/*#__PURE__*/ 26755_curry2(function props(ps, obj) { 26756 return ps.map(function (p) { 26757 return path([p], obj); 26758 }); 26759}); 26760 26761module.exports = props; 26762 26763/***/ }), 26764
vendor: 1,305 bytes, lines 26765-26817
26765/***/ "./node_modules/ramda/src/range.js": 26766/*!*****************************************!*\ 26767 !*** ./node_modules/ramda/src/range.js ***! 26768 \*****************************************/ 26769/***/ ((module, __unused_webpack_exports, __webpack_require__) => { 26770 26771var _curry2 = 26772/*#__PURE__*/ 26773__webpack_require__(/*! ./internal/_curry2.js */ "./node_modules/ramda/src/internal/_curry2.js"); 26774 26775var _isNumber = 26776/*#__PURE__*/ 26777__webpack_require__(/*! ./internal/_isNumber.js */ "./node_modules/ramda/src/internal/_isNumber.js"); 26778/** 26779 * Returns a list of numbers from `from` (inclusive) to `to` (exclusive). 26780 * 26781 * @func 26782 * @memberOf R 26783 * @since v0.1.0 26784 * @category List 26785 * @sig Number -> Number -> [Number] 26786 * @param {Number} from The first number in the list. 26787 * @param {Number} to One more than the last number in the list. 26788 * @return {Array} The list of numbers in the set `[a, b)`. 26789 * @example 26790 * 26791 * R.range(1, 5); //=> [1, 2, 3, 4] 26792 * R.range(50, 53); //=> [50, 51, 52] 26793 */ 26794 26795 26796var range = 26797/*#__PURE__*/ 26798_curry2(function range(from, to) { 26799 if (!(_isNumber(from) && _isNumber(to))) { 26800 throw new TypeError('Both arguments to range must be numbers'); 26801 } 26802 26803 var result = []; 26804 var n = from; 26805 26806 while (n < to) { 26807 result.push(n); 26808 n += 1; 26809 } 26810 26811 return result; 26812}); 26813 26814module.exports = range; 26815 26816/***/ }), 26817
vendor: 2,471 bytes, lines 26818-26886
26818/***/ "./node_modules/ramda/src/reduce.js": 26819/*!******************************************!*\ 26820 !*** ./node_modules/ramda/src/reduce.js ***! 26821 \******************************************/ 26822/***/ ((module, __unused_webpack_exports, __webpack_require__) => { 26823 26824var _curry3 = 26825/*#__PURE__*/ 26826__webpack_require__(/*! ./internal/_curry3.js */ "./node_modules/ramda/src/internal/_curry3.js"); 26827 26828var _reduce = 26829/*#__PURE__*/ 26830__webpack_require__(/*! ./internal/_reduce.js */ "./node_modules/ramda/src/internal/_reduce.js"); 26831/** 26832 * Returns a single item by iterating through the list, successively calling 26833 * the iterator function and passing it an accumulator value and the current 26834 * value from the array, and then passing the result to the next call. 26835 * 26836 * The iterator function receives two values: *(acc, value)*. It may use 26837 * [`R.reduced`](#reduced) to shortcut the iteration. 26838 * 26839 * The arguments' order of [`reduceRight`](#reduceRight)'s iterator function 26840 * is *(value, acc)*. 26841 * 26842 * Note: `R.reduce` does not skip deleted or unassigned indices (sparse 26843 * arrays), unlike the native `Array.prototype.reduce` method. For more details 26844 * on this behavior, see: 26845 * https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Array/reduce#Description 26846 * 26847 * Dispatches to the `reduce` method of the third argument, if present. When 26848 * doing so, it is up to the user to handle the [`R.reduced`](#reduced) 26849 * shortcuting, as this is not implemented by `reduce`. 26850 * 26851 * @func 26852 * @memberOf R 26853 * @since v0.1.0 26854 * @category List 26855 * @sig ((a, b) -> a) -> a -> [b] -> a 26856 * @param {Function} fn The iterator function. Receives two values, the accumulator and the 26857 * current element from the array. 26858 * @param {*} acc The accumulator value. 26859 * @param {Array} list The list to iterate over. 26860 * @return {*} The final, accumulated value. 26861 * @see R.reduced, R.addIndex, R.reduceRight 26862 * @example 26863 * 26864 * R.reduce(R.subtract, 0, [1, 2, 3, 4]) // => ((((0 - 1) - 2) - 3) - 4) = -10 26865 * // - -10 26866 * // / \ / \ 26867 * // - 4 -6 4 26868 * // / \ / \ 26869 * // - 3 ==> -3 3 26870 * // / \ / \ 26871 * // - 2 -1 2 26872 * // / \ / \ 26873 * // 0 1 0 1 26874 * 26875 * @symb R.reduce(f, a, [b, c, d]) = f(f(f(a, b), c), d) 26876 */ 26877 26878 26879var reduce = 26880/*#__PURE__*/ 26881_curry3(_reduce); 26882 26883module.exports = reduce; 26884 26885/***/ }), 26886
vendor: 3,431 bytes, lines 26887-26987
26887/***/ "./node_modules/ramda/src/reduceBy.js": 26888/*!********************************************!*\ 26889 !*** ./node_modules/ramda/src/reduceBy.js ***! 26890 \********************************************/ 26891/***/ ((module, __unused_webpack_exports, __webpack_require__) => { 26892 26893var _clone = 26894/*#__PURE__*/ 26895__webpack_require__(/*! ./internal/_clone.js */ "./node_modules/ramda/src/internal/_clone.js"); 26896 26897var _curryN = 26898/*#__PURE__*/ 26899__webpack_require__(/*! ./internal/_curryN.js */ "./node_modules/ramda/src/internal/_curryN.js"); 26900 26901var _dispatchable = 26902/*#__PURE__*/ 26903__webpack_require__(/*! ./internal/_dispatchable.js */ "./node_modules/ramda/src/internal/_dispatchable.js"); 26904 26905var _has = 26906/*#__PURE__*/ 26907__webpack_require__(/*! ./internal/_has.js */ "./node_modules/ramda/src/internal/_has.js"); 26908 26909var _reduce = 26910/*#__PURE__*/ 26911__webpack_require__(/*! ./internal/_reduce.js */ "./node_modules/ramda/src/internal/_reduce.js"); 26912 26913var _reduced = 26914/*#__PURE__*/ 26915__webpack_require__(/*! ./internal/_reduced.js */ "./node_modules/ramda/src/internal/_reduced.js"); 26916 26917var _xreduceBy = 26918/*#__PURE__*/ 26919__webpack_require__(/*! ./internal/_xreduceBy.js */ "./node_modules/ramda/src/internal/_xreduceBy.js"); 26920/** 26921 * Groups the elements of the list according to the result of calling 26922 * the String-returning function `keyFn` on each element and reduces the elements 26923 * of each group to a single value via the reducer function `valueFn`. 26924 * 26925 * The value function receives two values: *(acc, value)*. It may use 26926 * [`R.reduced`](#reduced) to short circuit the iteration. 26927 * 26928 * This function is basically a more general [`groupBy`](#groupBy) function. 26929 * 26930 * Acts as a transducer if a transformer is given in list position. 26931 * 26932 * @func 26933 * @memberOf R 26934 * @since v0.20.0 26935 * @category List 26936 * @sig ((a, b) -> a) -> a -> (b -> String) -> [b] -> {String: a} 26937 * @param {Function} valueFn The function that reduces the elements of each group to a single 26938 * value. Receives two values, accumulator for a particular group and the current element. 26939 * @param {*} acc The (initial) accumulator value for each group. 26940 * @param {Function} keyFn The function that maps the list's element into a key. 26941 * @param {Array} list The array to group. 26942 * @return {Object} An object with the output of `keyFn` for keys, mapped to the output of 26943 * `valueFn` for elements which produced that key when passed to `keyFn`. 26944 * @see R.groupBy, R.reduce, R.reduced 26945 * @example 26946 * 26947 * const groupNames = (acc, {name}) => acc.concat(name) 26948 * const toGrade = ({score}) => 26949 * score < 65 ? 'F' : 26950 * score < 70 ? 'D' : 26951 * score < 80 ? 'C' : 26952 * score < 90 ? 'B' : 'A' 26953 * 26954 * var students = [ 26955 * {name: 'Abby', score: 83}, 26956 * {name: 'Bart', score: 62}, 26957 * {name: 'Curt', score: 88}, 26958 * {name: 'Dora', score: 92}, 26959 * ] 26960 * 26961 * reduceBy(groupNames, [], toGrade, students) 26962 * //=> {"A": ["Dora"], "B": ["Abby", "Curt"], "F": ["Bart"]} 26963 */ 26964 26965 26966var reduceBy = 26967/*#__PURE__*/ 26968_curryN(4, [], 26969/*#__PURE__*/ 26970_dispatchable([], _xreduceBy, function reduceBy(valueFn, valueAcc, keyFn, list) { 26971 return _reduce(function (acc, elt) { 26972 var key = keyFn(elt); 26973 var value = valueFn(_has(key, acc) ? acc[key] : _clone(valueAcc, [], [], false), elt); 26974 26975 if (value && value['@@transducer/reduced']) { 26976 return _reduced(acc); 26977 } 26978 26979 acc[key] = value; 26980 return acc; 26981 }, {}, list); 26982})); 26983 26984module.exports = reduceBy; 26985 26986/***/ }), 26987
vendor: 2,528 bytes, lines 26988-27064
26988/***/ "./node_modules/ramda/src/reduceRight.js": 26989/*!***********************************************!*\ 26990 !*** ./node_modules/ramda/src/reduceRight.js ***! 26991 \***********************************************/ 26992/***/ ((module, __unused_webpack_exports, __webpack_require__) => { 26993 26994var _curry3 = 26995/*#__PURE__*/ 26996__webpack_require__(/*! ./internal/_curry3.js */ "./node_modules/ramda/src/internal/_curry3.js"); 26997/** 26998 * Returns a single item by iterating through the list, successively calling 26999 * the iterator function and passing it an accumulator value and the current 27000 * value from the array, and then passing the result to the next call. 27001 * 27002 * Similar to [`reduce`](#reduce), except moves through the input list from the 27003 * right to the left. 27004 * 27005 * The iterator function receives two values: *(value, acc)*, while the arguments' 27006 * order of `reduce`'s iterator function is *(acc, value)*. `reduceRight` may use [`reduced`](#reduced) 27007 * to short circuit the iteration. 27008 * 27009 * Note: `R.reduceRight` does not skip deleted or unassigned indices (sparse 27010 * arrays), unlike the native `Array.prototype.reduceRight` method. For more details 27011 * on this behavior, see: 27012 * https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Array/reduceRight#Description 27013 * 27014 * @func 27015 * @memberOf R 27016 * @since v0.1.0 27017 * @category List 27018 * @sig ((a, b) -> b) -> b -> [a] -> b 27019 * @param {Function} fn The iterator function. Receives two values, the current element from the array 27020 * and the accumulator. 27021 * @param {*} acc The accumulator value. 27022 * @param {Array} list The list to iterate over. 27023 * @return {*} The final, accumulated value. 27024 * @see R.reduce, R.addIndex, R.reduced 27025 * @example 27026 * 27027 * R.reduceRight(R.subtract, 0, [1, 2, 3, 4]) // => (1 - (2 - (3 - (4 - 0)))) = -2 27028 * // - -2 27029 * // / \ / \ 27030 * // 1 - 1 3 27031 * // / \ / \ 27032 * // 2 - ==> 2 -1 27033 * // / \ / \ 27034 * // 3 - 3 4 27035 * // / \ / \ 27036 * // 4 0 4 0 27037 * 27038 * @symb R.reduceRight(f, a, [b, c, d]) = f(b, f(c, f(d, a))) 27039 */ 27040 27041 27042var reduceRight = 27043/*#__PURE__*/ 27044_curry3(function reduceRight(fn, acc, list) { 27045 var idx = list.length - 1; 27046 27047 while (idx >= 0) { 27048 acc = fn(list[idx], acc); 27049 27050 if (acc && acc['@@transducer/reduced']) { 27051 acc = acc['@@transducer/value']; 27052 break; 27053 } 27054 27055 idx -= 1; 27056 } 27057 27058 return acc; 27059}); 27060 27061module.exports = reduceRight; 27062 27063/***/ }), 27064
vendor: 2,090 bytes, lines 27065-27125
27065/***/ "./node_modules/ramda/src/reduceWhile.js": 27066/*!***********************************************!*\ 27067 !*** ./node_modules/ramda/src/reduceWhile.js ***! 27068 \***********************************************/ 27069/***/ ((module, __unused_webpack_exports, __webpack_require__) => { 27070 27071var _curryN = 27072/*#__PURE__*/ 27073__webpack_require__(/*! ./internal/_curryN.js */ "./node_modules/ramda/src/internal/_curryN.js"); 27074 27075var _reduce = 27076/*#__PURE__*/ 27077__webpack_require__(/*! ./internal/_reduce.js */ "./node_modules/ramda/src/internal/_reduce.js"); 27078 27079var _reduced = 27080/*#__PURE__*/ 27081__webpack_require__(/*! ./internal/_reduced.js */ "./node_modules/ramda/src/internal/_reduced.js"); 27082/** 27083 * Like [`reduce`](#reduce), `reduceWhile` returns a single item by iterating 27084 * through the list, successively calling the iterator function. `reduceWhile` 27085 * also takes a predicate that is evaluated before each step. If the predicate 27086 * returns `false`, it "short-circuits" the iteration and returns the current 27087 * value of the accumulator. `reduceWhile` may alternatively be short-circuited 27088 * via [`reduced`](#reduced). 27089 * 27090 * @func 27091 * @memberOf R 27092 * @since v0.22.0 27093 * @category List 27094 * @sig ((a, b) -> Boolean) -> ((a, b) -> a) -> a -> [b] -> a 27095 * @param {Function} pred The predicate. It is passed the accumulator and the 27096 * current element. 27097 * @param {Function} fn The iterator function. Receives two values, the 27098 * accumulator and the current element. 27099 * @param {*} a The accumulator value. 27100 * @param {Array} list The list to iterate over. 27101 * @return {*} The final, accumulated value. 27102 * @see R.reduce, R.reduced 27103 * @example 27104 * 27105 * const isOdd = (acc, x) => x % 2 !== 0; 27106 * const xs = [1, 3, 5, 60, 777, 800]; 27107 * R.reduceWhile(isOdd, R.add, 0, xs); //=> 9 27108 * 27109 * const ys = [2, 4, 6] 27110 * R.reduceWhile(isOdd, R.add, 111, ys); //=> 111 27111 */ 27112 27113 27114var reduceWhile = 27115/*#__PURE__*/ 27116_curryN(4, [], function _reduceWhile(pred, fn, a, list) { 27117 return _reduce(function (acc, x) { 27118 return pred(acc, x) ? fn(acc, x) : _reduced(acc); 27119 }, a, list); 27120}); 27121 27122module.exports = reduceWhile; 27123 27124/***/ }), 27125
vendor: 1,432 bytes, lines 27126-27175
27126/***/ "./node_modules/ramda/src/reduced.js": 27127/*!*******************************************!*\ 27128 !*** ./node_modules/ramda/src/reduced.js ***! 27129 \*******************************************/ 27130/***/ ((module, __unused_webpack_exports, __webpack_require__) => { 27131 27132var _curry1 = 27133/*#__PURE__*/ 27134__webpack_require__(/*! ./internal/_curry1.js */ "./node_modules/ramda/src/internal/_curry1.js"); 27135 27136var _reduced = 27137/*#__PURE__*/ 27138__webpack_require__(/*! ./internal/_reduced.js */ "./node_modules/ramda/src/internal/_reduced.js"); 27139/** 27140 * Returns a value wrapped to indicate that it is the final value of the reduce 27141 * and transduce functions. The returned value should be considered a black 27142 * box: the internal structure is not guaranteed to be stable. 27143 * 27144 * This optimization is available to the below functions: 27145 * - [`reduce`](#reduce) 27146 * - [`reduceWhile`](#reduceWhile) 27147 * - [`reduceBy`](#reduceBy) 27148 * - [`reduceRight`](#reduceRight) 27149 * - [`transduce`](#transduce) 27150 * 27151 * @func 27152 * @memberOf R 27153 * @since v0.15.0 27154 * @category List 27155 * @sig a -> * 27156 * @param {*} x The final value of the reduce. 27157 * @return {*} The wrapped value. 27158 * @see R.reduce, R.reduceWhile, R.reduceBy, R.reduceRight, R.transduce 27159 * @example 27160 * 27161 * R.reduce( 27162 * (acc, item) => item > 3 ? R.reduced(acc) : acc.concat(item), 27163 * [], 27164 * [1, 2, 3, 4, 5]) // [1, 2, 3] 27165 */ 27166 27167 27168var reduced = 27169/*#__PURE__*/ 27170_curry1(_reduced); 27171 27172module.exports = reduced; 27173 27174/***/ }), 27175
vendor: 1,428 bytes, lines 27176-27228
27176/***/ "./node_modules/ramda/src/reject.js": 27177/*!******************************************!*\ 27178 !*** ./node_modules/ramda/src/reject.js ***! 27179 \******************************************/ 27180/***/ ((module, __unused_webpack_exports, __webpack_require__) => { 27181 27182var _complement = 27183/*#__PURE__*/ 27184__webpack_require__(/*! ./internal/_complement.js */ "./node_modules/ramda/src/internal/_complement.js"); 27185 27186var _curry2 = 27187/*#__PURE__*/ 27188__webpack_require__(/*! ./internal/_curry2.js */ "./node_modules/ramda/src/internal/_curry2.js"); 27189 27190var filter = 27191/*#__PURE__*/ 27192__webpack_require__(/*! ./filter.js */ "./node_modules/ramda/src/filter.js"); 27193/** 27194 * The complement of [`filter`](#filter). 27195 * 27196 * Acts as a transducer if a transformer is given in list position. Filterable 27197 * objects include plain objects or any object that has a filter method such 27198 * as `Array`. 27199 * 27200 * @func 27201 * @memberOf R 27202 * @since v0.1.0 27203 * @category List 27204 * @sig Filterable f => (a -> Boolean) -> f a -> f a 27205 * @param {Function} pred 27206 * @param {Array} filterable 27207 * @return {Array} 27208 * @see R.filter, R.transduce, R.addIndex 27209 * @example 27210 * 27211 * const isOdd = (n) => n % 2 !== 0; 27212 * 27213 * R.reject(isOdd, [1, 2, 3, 4]); //=> [2, 4] 27214 * 27215 * R.reject(isOdd, {a: 1, b: 2, c: 3, d: 4}); //=> {b: 2, d: 4} 27216 */ 27217 27218 27219var reject = 27220/*#__PURE__*/ 27221_curry2(function reject(pred, filterable) { 27222 return filter(_complement(pred), filterable); 27223}); 27224 27225module.exports = reject; 27226 27227/***/ }), 27228
vendor: 1,311 bytes, lines 27229-27271
27229/***/ "./node_modules/ramda/src/remove.js": 27230/*!******************************************!*\ 27231 !*** ./node_modules/ramda/src/remove.js ***! 27232 \******************************************/ 27233/***/ ((module, __unused_webpack_exports, __webpack_require__) => { 27234 27235var _curry3 = 27236/*#__PURE__*/ 27237__webpack_require__(/*! ./internal/_curry3.js */ "./node_modules/ramda/src/internal/_curry3.js"); 27238/** 27239 * Removes the sub-list of `list` starting at index `start` and containing 27240 * `count` elements. _Note that this is not destructive_: it returns a copy of 27241 * the list with the changes. 27242 * <small>No lists have been harmed in the application of this function.</small> 27243 * 27244 * @func 27245 * @memberOf R 27246 * @since v0.2.2 27247 * @category List 27248 * @sig Number -> Number -> [a] -> [a] 27249 * @param {Number} start The position to start removing elements 27250 * @param {Number} count The number of elements to remove 27251 * @param {Array} list The list to remove from 27252 * @return {Array} A new Array with `count` elements from `start` removed. 27253 * @see R.without 27254 * @example 27255 * 27256 * R.remove(2, 3, [1,2,3,4,5,6,7,8]); //=> [1,2,6,7,8] 27257 */ 27258 27259 27260var remove = 27261/*#__PURE__*/ 27262_curry3(function remove(start, count, list) { 27263 var result = Array.prototype.slice.call(list, 0); 27264 result.splice(start, count); 27265 return result; 27266}); 27267 27268module.exports = remove; 27269 27270/***/ }), 27271
vendor: 1,396 bytes, lines 27272-27323
27272/***/ "./node_modules/ramda/src/repeat.js": 27273/*!******************************************!*\ 27274 !*** ./node_modules/ramda/src/repeat.js ***! 27275 \******************************************/ 27276/***/ ((module, __unused_webpack_exports, __webpack_require__) => { 27277 27278var _curry2 = 27279/*#__PURE__*/ 27280__webpack_require__(/*! ./internal/_curry2.js */ "./node_modules/ramda/src/internal/_curry2.js"); 27281 27282var always = 27283/*#__PURE__*/ 27284__webpack_require__(/*! ./always.js */ "./node_modules/ramda/src/always.js"); 27285 27286var times = 27287/*#__PURE__*/ 27288__webpack_require__(/*! ./times.js */ "./node_modules/ramda/src/times.js"); 27289/** 27290 * Returns a fixed list of size `n` containing a specified identical value. 27291 * 27292 * @func 27293 * @memberOf R 27294 * @since v0.1.1 27295 * @category List 27296 * @sig a -> n -> [a] 27297 * @param {*} value The value to repeat. 27298 * @param {Number} n The desired size of the output list. 27299 * @return {Array} A new array containing `n` `value`s. 27300 * @see R.times 27301 * @example 27302 * 27303 * R.repeat('hi', 5); //=> ['hi', 'hi', 'hi', 'hi', 'hi'] 27304 * 27305 * const obj = {}; 27306 * const repeatedObjs = R.repeat(obj, 5); //=> [{}, {}, {}, {}, {}] 27307 * repeatedObjs[0] === repeatedObjs[1]; //=> true 27308 * @symb R.repeat(a, 0) = [] 27309 * @symb R.repeat(a, 1) = [a] 27310 * @symb R.repeat(a, 2) = [a, a] 27311 */ 27312 27313 27314var repeat = 27315/*#__PURE__*/ 27316_curry2(function repeat(value, n) { 27317 return times(always(value), n); 27318}); 27319 27320module.exports = repeat; 27321 27322/***/ }), 27323
vendor: 1,446 bytes, lines 27324-27368
27324/***/ "./node_modules/ramda/src/replace.js": 27325/*!*******************************************!*\ 27326 !*** ./node_modules/ramda/src/replace.js ***! 27327 \*******************************************/ 27328/***/ ((module, __unused_webpack_exports, __webpack_require__) => { 27329 27330var _curry3 = 27331/*#__PURE__*/ 27332__webpack_require__(/*! ./internal/_curry3.js */ "./node_modules/ramda/src/internal/_curry3.js"); 27333/** 27334 * Replace a substring or regex match in a string with a replacement. 27335 * 27336 * The first two parameters correspond to the parameters of the 27337 * `String.prototype.replace()` function, so the second parameter can also be a 27338 * function. 27339 * 27340 * @func 27341 * @memberOf R 27342 * @since v0.7.0 27343 * @category String 27344 * @sig RegExp|String -> String -> String -> String 27345 * @param {RegExp|String} pattern A regular expression or a substring to match. 27346 * @param {String} replacement The string to replace the matches with. 27347 * @param {String} str The String to do the search and replacement in. 27348 * @return {String} The result. 27349 * @example 27350 * 27351 * R.replace('foo', 'bar', 'foo foo foo'); //=> 'bar foo foo' 27352 * R.replace(/foo/, 'bar', 'foo foo foo'); //=> 'bar foo foo' 27353 * 27354 * // Use the "g" (global) flag to replace all occurrences: 27355 * R.replace(/foo/g, 'bar', 'foo foo foo'); //=> 'bar bar bar' 27356 */ 27357 27358 27359var replace = 27360/*#__PURE__*/ 27361_curry3(function replace(regex, replacement, str) { 27362 return str.replace(regex, replacement); 27363}); 27364 27365module.exports = replace; 27366 27367/***/ }), 27368
vendor: 1,338 bytes, lines 27369-27417
27369/***/ "./node_modules/ramda/src/reverse.js": 27370/*!*******************************************!*\ 27371 !*** ./node_modules/ramda/src/reverse.js ***! 27372 \*******************************************/ 27373/***/ ((module, __unused_webpack_exports, __webpack_require__) => { 27374 27375var _curry1 = 27376/*#__PURE__*/ 27377__webpack_require__(/*! ./internal/_curry1.js */ "./node_modules/ramda/src/internal/_curry1.js"); 27378 27379var _isString = 27380/*#__PURE__*/ 27381__webpack_require__(/*! ./internal/_isString.js */ "./node_modules/ramda/src/internal/_isString.js"); 27382/** 27383 * Returns a new list or string with the elements or characters in reverse 27384 * order. 27385 * 27386 * @func 27387 * @memberOf R 27388 * @since v0.1.0 27389 * @category List 27390 * @sig [a] -> [a] 27391 * @sig String -> String 27392 * @param {Array|String} list 27393 * @return {Array|String} 27394 * @example 27395 * 27396 * R.reverse([1, 2, 3]); //=> [3, 2, 1] 27397 * R.reverse([1, 2]); //=> [2, 1] 27398 * R.reverse([1]); //=> [1] 27399 * R.reverse([]); //=> [] 27400 * 27401 * R.reverse('abc'); //=> 'cba' 27402 * R.reverse('ab'); //=> 'ba' 27403 * R.reverse('a'); //=> 'a' 27404 * R.reverse(''); //=> '' 27405 */ 27406 27407 27408var reverse = 27409/*#__PURE__*/ 27410_curry1(function reverse(list) { 27411 return _isString(list) ? list.split('').reverse().join('') : Array.prototype.slice.call(list, 0).reverse(); 27412}); 27413 27414module.exports = reverse; 27415 27416/***/ }), 27417
vendor: 1,390 bytes, lines 27418-27469
27418/***/ "./node_modules/ramda/src/scan.js": 27419/*!****************************************!*\ 27420 !*** ./node_modules/ramda/src/scan.js ***! 27421 \****************************************/ 27422/***/ ((module, __unused_webpack_exports, __webpack_require__) => { 27423 27424var _curry3 = 27425/*#__PURE__*/ 27426__webpack_require__(/*! ./internal/_curry3.js */ "./node_modules/ramda/src/internal/_curry3.js"); 27427/** 27428 * Scan is similar to [`reduce`](#reduce), but returns a list of successively 27429 * reduced values from the left 27430 * 27431 * @func 27432 * @memberOf R 27433 * @since v0.10.0 27434 * @category List 27435 * @sig ((a, b) -> a) -> a -> [b] -> [a] 27436 * @param {Function} fn The iterator function. Receives two values, the accumulator and the 27437 * current element from the array 27438 * @param {*} acc The accumulator value. 27439 * @param {Array} list The list to iterate over. 27440 * @return {Array} A list of all intermediately reduced values. 27441 * @see R.reduce, R.mapAccum 27442 * @example 27443 * 27444 * const numbers = [1, 2, 3, 4]; 27445 * const factorials = R.scan(R.multiply, 1, numbers); //=> [1, 1, 2, 6, 24] 27446 * @symb R.scan(f, a, [b, c]) = [a, f(a, b), f(f(a, b), c)] 27447 */ 27448 27449 27450var scan = 27451/*#__PURE__*/ 27452_curry3(function scan(fn, acc, list) { 27453 var idx = 0; 27454 var len = list.length; 27455 var result = [acc]; 27456 27457 while (idx < len) { 27458 acc = fn(acc, list[idx]); 27459 result[idx + 1] = acc; 27460 idx += 1; 27461 } 27462 27463 return result; 27464}); 27465 27466module.exports = scan; 27467 27468/***/ }), 27469
vendor: 1,931 bytes, lines 27470-27532
27470/***/ "./node_modules/ramda/src/sequence.js": 27471/*!********************************************!*\ 27472 !*** ./node_modules/ramda/src/sequence.js ***! 27473 \********************************************/ 27474/***/ ((module, __unused_webpack_exports, __webpack_require__) => { 27475 27476var _curry2 = 27477/*#__PURE__*/ 27478__webpack_require__(/*! ./internal/_curry2.js */ "./node_modules/ramda/src/internal/_curry2.js"); 27479 27480var ap = 27481/*#__PURE__*/ 27482__webpack_require__(/*! ./ap.js */ "./node_modules/ramda/src/ap.js"); 27483 27484var map = 27485/*#__PURE__*/ 27486__webpack_require__(/*! ./map.js */ "./node_modules/ramda/src/map.js"); 27487 27488var prepend = 27489/*#__PURE__*/ 27490__webpack_require__(/*! ./prepend.js */ "./node_modules/ramda/src/prepend.js"); 27491 27492var reduceRight = 27493/*#__PURE__*/ 27494__webpack_require__(/*! ./reduceRight.js */ "./node_modules/ramda/src/reduceRight.js"); 27495/** 27496 * Transforms a [Traversable](https://github.com/fantasyland/fantasy-land#traversable) 27497 * of [Applicative](https://github.com/fantasyland/fantasy-land#applicative) into an 27498 * Applicative of Traversable. 27499 * 27500 * Dispatches to the `sequence` method of the second argument, if present. 27501 * 27502 * @func 27503 * @memberOf R 27504 * @since v0.19.0 27505 * @category List 27506 * @sig (Applicative f, Traversable t) => (a -> f a) -> t (f a) -> f (t a) 27507 * @param {Function} of 27508 * @param {*} traversable 27509 * @return {*} 27510 * @see R.traverse 27511 * @example 27512 * 27513 * R.sequence(Maybe.of, [Just(1), Just(2), Just(3)]); //=> Just([1, 2, 3]) 27514 * R.sequence(Maybe.of, [Just(1), Just(2), Nothing()]); //=> Nothing() 27515 * 27516 * R.sequence(R.of, Just([1, 2, 3])); //=> [Just(1), Just(2), Just(3)] 27517 * R.sequence(R.of, Nothing()); //=> [Nothing()] 27518 */ 27519 27520 27521var sequence = 27522/*#__PURE__*/ 27523_curry2(function sequence(of, traversable) { 27524 return typeof traversable.sequence === 'function' ? traversable.sequence(of) : reduceRight(function (x, acc) { 27525 return ap(map(prepend, x), acc); 27526 }, of([]), traversable); 27527}); 27528 27529module.exports = sequence; 27530 27531/***/ }), 27532
vendor: 1,310 bytes, lines 27533-27583
27533/***/ "./node_modules/ramda/src/set.js": 27534/*!***************************************!*\ 27535 !*** ./node_modules/ramda/src/set.js ***! 27536 \***************************************/ 27537/***/ ((module, __unused_webpack_exports, __webpack_require__) => { 27538 27539var _curry3 = 27540/*#__PURE__*/ 27541__webpack_require__(/*! ./internal/_curry3.js */ "./node_modules/ramda/src/internal/_curry3.js"); 27542 27543var always = 27544/*#__PURE__*/ 27545__webpack_require__(/*! ./always.js */ "./node_modules/ramda/src/always.js"); 27546 27547var over = 27548/*#__PURE__*/ 27549__webpack_require__(/*! ./over.js */ "./node_modules/ramda/src/over.js"); 27550/** 27551 * Returns the result of "setting" the portion of the given data structure 27552 * focused by the given lens to the given value. 27553 * 27554 * @func 27555 * @memberOf R 27556 * @since v0.16.0 27557 * @category Object 27558 * @typedefn Lens s a = Functor f => (a -> f a) -> s -> f s 27559 * @sig Lens s a -> a -> s -> s 27560 * @param {Lens} lens 27561 * @param {*} v 27562 * @param {*} x 27563 * @return {*} 27564 * @see R.view, R.over, R.lens, R.lensIndex, R.lensProp, R.lensPath 27565 * @example 27566 * 27567 * const xLens = R.lensProp('x'); 27568 * 27569 * R.set(xLens, 4, {x: 1, y: 2}); //=> {x: 4, y: 2} 27570 * R.set(xLens, 8, {x: 1, y: 2}); //=> {x: 8, y: 2} 27571 */ 27572 27573 27574var set = 27575/*#__PURE__*/ 27576_curry3(function set(lens, v, x) { 27577 return over(lens, always(v), x); 27578}); 27579 27580module.exports = set; 27581 27582/***/ }), 27583
vendor: 1,631 bytes, lines 27584-27634
27584/***/ "./node_modules/ramda/src/slice.js": 27585/*!*****************************************!*\ 27586 !*** ./node_modules/ramda/src/slice.js ***! 27587 \*****************************************/ 27588/***/ ((module, __unused_webpack_exports, __webpack_require__) => { 27589 27590var _checkForMethod = 27591/*#__PURE__*/ 27592__webpack_require__(/*! ./internal/_checkForMethod.js */ "./node_modules/ramda/src/internal/_checkForMethod.js"); 27593 27594var _curry3 = 27595/*#__PURE__*/ 27596__webpack_require__(/*! ./internal/_curry3.js */ "./node_modules/ramda/src/internal/_curry3.js"); 27597/** 27598 * Returns the elements of the given list or string (or object with a `slice` 27599 * method) from `fromIndex` (inclusive) to `toIndex` (exclusive). 27600 * 27601 * Dispatches to the `slice` method of the third argument, if present. 27602 * 27603 * @func 27604 * @memberOf R 27605 * @since v0.1.4 27606 * @category List 27607 * @sig Number -> Number -> [a] -> [a] 27608 * @sig Number -> Number -> String -> String 27609 * @param {Number} fromIndex The start index (inclusive). 27610 * @param {Number} toIndex The end index (exclusive). 27611 * @param {*} list 27612 * @return {*} 27613 * @example 27614 * 27615 * R.slice(1, 3, ['a', 'b', 'c', 'd']); //=> ['b', 'c'] 27616 * R.slice(1, Infinity, ['a', 'b', 'c', 'd']); //=> ['b', 'c', 'd'] 27617 * R.slice(0, -1, ['a', 'b', 'c', 'd']); //=> ['a', 'b', 'c'] 27618 * R.slice(-3, -1, ['a', 'b', 'c', 'd']); //=> ['b', 'c'] 27619 * R.slice(0, 3, 'ramda'); //=> 'ram' 27620 */ 27621 27622 27623var slice = 27624/*#__PURE__*/ 27625_curry3( 27626/*#__PURE__*/ 27627_checkForMethod('slice', function slice(fromIndex, toIndex, list) { 27628 return Array.prototype.slice.call(list, fromIndex, toIndex); 27629})); 27630 27631module.exports = slice; 27632 27633/***/ }), 27634
vendor: 1,331 bytes, lines 27635-27676
27635/***/ "./node_modules/ramda/src/sort.js": 27636/*!****************************************!*\ 27637 !*** ./node_modules/ramda/src/sort.js ***! 27638 \****************************************/ 27639/***/ ((module, __unused_webpack_exports, __webpack_require__) => { 27640 27641var _curry2 = 27642/*#__PURE__*/ 27643__webpack_require__(/*! ./internal/_curry2.js */ "./node_modules/ramda/src/internal/_curry2.js"); 27644/** 27645 * Returns a copy of the list, sorted according to the comparator function, 27646 * which should accept two values at a time and return a negative number if the 27647 * first value is smaller, a positive number if it's larger, and zero if they 27648 * are equal. Please note that this is a **copy** of the list. It does not 27649 * modify the original. 27650 * 27651 * @func 27652 * @memberOf R 27653 * @since v0.1.0 27654 * @category List 27655 * @sig ((a, a) -> Number) -> [a] -> [a] 27656 * @param {Function} comparator A sorting function :: a -> b -> Int 27657 * @param {Array} list The list to sort 27658 * @return {Array} a new array with its elements sorted by the comparator function. 27659 * @see R.ascend, R.descend 27660 * @example 27661 * 27662 * const diff = function(a, b) { return a - b; }; 27663 * R.sort(diff, [4,2,7,5]); //=> [2, 4, 5, 7] 27664 */ 27665 27666 27667var sort = 27668/*#__PURE__*/ 27669_curry2(function sort(comparator, list) { 27670 return Array.prototype.slice.call(list, 0).sort(comparator); 27671}); 27672 27673module.exports = sort; 27674 27675/***/ }), 27676
vendor: 1,573 bytes, lines 27677-27734
27677/***/ "./node_modules/ramda/src/sortBy.js": 27678/*!******************************************!*\ 27679 !*** ./node_modules/ramda/src/sortBy.js ***! 27680 \******************************************/ 27681/***/ ((module, __unused_webpack_exports, __webpack_require__) => { 27682 27683var _curry2 = 27684/*#__PURE__*/ 27685__webpack_require__(/*! ./internal/_curry2.js */ "./node_modules/ramda/src/internal/_curry2.js"); 27686/** 27687 * Sorts the list according to the supplied function. 27688 * 27689 * @func 27690 * @memberOf R 27691 * @since v0.1.0 27692 * @category Relation 27693 * @sig Ord b => (a -> b) -> [a] -> [a] 27694 * @param {Function} fn 27695 * @param {Array} list The list to sort. 27696 * @return {Array} A new list sorted by the keys generated by `fn`. 27697 * @example 27698 * 27699 * const sortByFirstItem = R.sortBy(R.prop(0)); 27700 * const pairs = [[-1, 1], [-2, 2], [-3, 3]]; 27701 * sortByFirstItem(pairs); //=> [[-3, 3], [-2, 2], [-1, 1]] 27702 * 27703 * const sortByNameCaseInsensitive = R.sortBy(R.compose(R.toLower, R.prop('name'))); 27704 * const alice = { 27705 * name: 'ALICE', 27706 * age: 101 27707 * }; 27708 * const bob = { 27709 * name: 'Bob', 27710 * age: -10 27711 * }; 27712 * const clara = { 27713 * name: 'clara', 27714 * age: 314.159 27715 * }; 27716 * const people = [clara, bob, alice]; 27717 * sortByNameCaseInsensitive(people); //=> [alice, bob, clara] 27718 */ 27719 27720 27721var sortBy = 27722/*#__PURE__*/ 27723_curry2(function sortBy(fn, list) { 27724 return Array.prototype.slice.call(list, 0).sort(function (a, b) { 27725 var aa = fn(a); 27726 var bb = fn(b); 27727 return aa < bb ? -1 : aa > bb ? 1 : 0; 27728 }); 27729}); 27730 27731module.exports = sortBy; 27732 27733/***/ }), 27734
vendor: 1,567 bytes, lines 27735-27798
27735/***/ "./node_modules/ramda/src/sortWith.js": 27736/*!********************************************!*\ 27737 !*** ./node_modules/ramda/src/sortWith.js ***! 27738 \********************************************/ 27739/***/ ((module, __unused_webpack_exports, __webpack_require__) => { 27740 27741var _curry2 = 27742/*#__PURE__*/ 27743__webpack_require__(/*! ./internal/_curry2.js */ "./node_modules/ramda/src/internal/_curry2.js"); 27744/** 27745 * Sorts a list according to a list of comparators. 27746 * 27747 * @func 27748 * @memberOf R 27749 * @since v0.23.0 27750 * @category Relation 27751 * @sig [(a, a) -> Number] -> [a] -> [a] 27752 * @param {Array} functions A list of comparator functions. 27753 * @param {Array} list The list to sort. 27754 * @return {Array} A new list sorted according to the comarator functions. 27755 * @see R.ascend, R.descend 27756 * @example 27757 * 27758 * const alice = { 27759 * name: 'alice', 27760 * age: 40 27761 * }; 27762 * const bob = { 27763 * name: 'bob', 27764 * age: 30 27765 * }; 27766 * const clara = { 27767 * name: 'clara', 27768 * age: 40 27769 * }; 27770 * const people = [clara, bob, alice]; 27771 * const ageNameSort = R.sortWith([ 27772 * R.descend(R.prop('age')), 27773 * R.ascend(R.prop('name')) 27774 * ]); 27775 * ageNameSort(people); //=> [alice, clara, bob] 27776 */ 27777 27778 27779var sortWith = 27780/*#__PURE__*/ 27781_curry2(function sortWith(fns, list) { 27782 return Array.prototype.slice.call(list, 0).sort(function (a, b) { 27783 var result = 0; 27784 var i = 0; 27785 27786 while (result === 0 && i < fns.length) { 27787 result = fns[i](a, b); 27788 i += 1; 27789 } 27790 27791 return result; 27792 }); 27793}); 27794 27795module.exports = sortWith; 27796 27797/***/ }), 27798
vendor: 1,057 bytes, lines 27799-27836
27799/***/ "./node_modules/ramda/src/split.js": 27800/*!*****************************************!*\ 27801 !*** ./node_modules/ramda/src/split.js ***! 27802 \*****************************************/ 27803/***/ ((module, __unused_webpack_exports, __webpack_require__) => { 27804 27805var invoker = 27806/*#__PURE__*/ 27807__webpack_require__(/*! ./invoker.js */ "./node_modules/ramda/src/invoker.js"); 27808/** 27809 * Splits a string into an array of strings based on the given 27810 * separator. 27811 * 27812 * @func 27813 * @memberOf R 27814 * @since v0.1.0 27815 * @category String 27816 * @sig (String | RegExp) -> String -> [String] 27817 * @param {String|RegExp} sep The pattern. 27818 * @param {String} str The string to separate into an array. 27819 * @return {Array} The array of strings from `str` separated by `sep`. 27820 * @see R.join 27821 * @example 27822 * 27823 * const pathComponents = R.split('/'); 27824 * R.tail(pathComponents('/usr/local/bin/node')); //=> ['usr', 'local', 'bin', 'node'] 27825 * 27826 * R.split('.', 'a.b.c.xyz.d'); //=> ['a', 'b', 'c', 'xyz', 'd'] 27827 */ 27828 27829 27830var split = 27831/*#__PURE__*/ 27832invoker(1, 'split'); 27833module.exports = split; 27834 27835/***/ }), 27836
vendor: 1,336 bytes, lines 27837-27883
27837/***/ "./node_modules/ramda/src/splitAt.js": 27838/*!*******************************************!*\ 27839 !*** ./node_modules/ramda/src/splitAt.js ***! 27840 \*******************************************/ 27841/***/ ((module, __unused_webpack_exports, __webpack_require__) => { 27842 27843var _curry2 = 27844/*#__PURE__*/ 27845__webpack_require__(/*! ./internal/_curry2.js */ "./node_modules/ramda/src/internal/_curry2.js"); 27846 27847var length = 27848/*#__PURE__*/ 27849__webpack_require__(/*! ./length.js */ "./node_modules/ramda/src/length.js"); 27850 27851var slice = 27852/*#__PURE__*/ 27853__webpack_require__(/*! ./slice.js */ "./node_modules/ramda/src/slice.js"); 27854/** 27855 * Splits a given list or string at a given index. 27856 * 27857 * @func 27858 * @memberOf R 27859 * @since v0.19.0 27860 * @category List 27861 * @sig Number -> [a] -> [[a], [a]] 27862 * @sig Number -> String -> [String, String] 27863 * @param {Number} index The index where the array/string is split. 27864 * @param {Array|String} array The array/string to be split. 27865 * @return {Array} 27866 * @example 27867 * 27868 * R.splitAt(1, [1, 2, 3]); //=> [[1], [2, 3]] 27869 * R.splitAt(5, 'hello world'); //=> ['hello', ' world'] 27870 * R.splitAt(-1, 'foobar'); //=> ['fooba', 'r'] 27871 */ 27872 27873 27874var splitAt = 27875/*#__PURE__*/ 27876_curry2(function splitAt(index, array) { 27877 return [slice(0, index, array), slice(index, length(array), array)]; 27878}); 27879 27880module.exports = splitAt; 27881 27882/***/ }), 27883
vendor: 1,275 bytes, lines 27884-27936
27884/***/ "./node_modules/ramda/src/splitEvery.js": 27885/*!**********************************************!*\ 27886 !*** ./node_modules/ramda/src/splitEvery.js ***! 27887 \**********************************************/ 27888/***/ ((module, __unused_webpack_exports, __webpack_require__) => { 27889 27890var _curry2 = 27891/*#__PURE__*/ 27892__webpack_require__(/*! ./internal/_curry2.js */ "./node_modules/ramda/src/internal/_curry2.js"); 27893 27894var slice = 27895/*#__PURE__*/ 27896__webpack_require__(/*! ./slice.js */ "./node_modules/ramda/src/slice.js"); 27897/** 27898 * Splits a collection into slices of the specified length. 27899 * 27900 * @func 27901 * @memberOf R 27902 * @since v0.16.0 27903 * @category List 27904 * @sig Number -> [a] -> [[a]] 27905 * @sig Number -> String -> [String] 27906 * @param {Number} n 27907 * @param {Array} list 27908 * @return {Array} 27909 * @example 27910 * 27911 * R.splitEvery(3, [1, 2, 3, 4, 5, 6, 7]); //=> [[1, 2, 3], [4, 5, 6], [7]] 27912 * R.splitEvery(3, 'foobarbaz'); //=> ['foo', 'bar', 'baz'] 27913 */ 27914 27915 27916var splitEvery = 27917/*#__PURE__*/ 27918_curry2(function splitEvery(n, list) { 27919 if (n <= 0) { 27920 throw new Error('First argument to splitEvery must be a positive integer'); 27921 } 27922 27923 var result = []; 27924 var idx = 0; 27925 27926 while (idx < list.length) { 27927 result.push(slice(idx, idx += n, list)); 27928 } 27929 27930 return result; 27931}); 27932 27933module.exports = splitEvery; 27934 27935/***/ }), 27936
vendor: 1,432 bytes, lines 27937-27985
27937/***/ "./node_modules/ramda/src/splitWhen.js": 27938/*!*********************************************!*\ 27939 !*** ./node_modules/ramda/src/splitWhen.js ***! 27940 \*********************************************/ 27941/***/ ((module, __unused_webpack_exports, __webpack_require__) => { 27942 27943var _curry2 = 27944/*#__PURE__*/ 27945__webpack_require__(/*! ./internal/_curry2.js */ "./node_modules/ramda/src/internal/_curry2.js"); 27946/** 27947 * Takes a list and a predicate and returns a pair of lists with the following properties: 27948 * 27949 * - the result of concatenating the two output lists is equivalent to the input list; 27950 * - none of the elements of the first output list satisfies the predicate; and 27951 * - if the second output list is non-empty, its first element satisfies the predicate. 27952 * 27953 * @func 27954 * @memberOf R 27955 * @since v0.19.0 27956 * @category List 27957 * @sig (a -> Boolean) -> [a] -> [[a], [a]] 27958 * @param {Function} pred The predicate that determines where the array is split. 27959 * @param {Array} list The array to be split. 27960 * @return {Array} 27961 * @example 27962 * 27963 * R.splitWhen(R.equals(2), [1, 2, 3, 1, 2, 3]); //=> [[1], [2, 3, 1, 2, 3]] 27964 */ 27965 27966 27967var splitWhen = 27968/*#__PURE__*/ 27969_curry2(function splitWhen(pred, list) { 27970 var idx = 0; 27971 var len = list.length; 27972 var prefix = []; 27973 27974 while (idx < len && !pred(list[idx])) { 27975 prefix.push(list[idx]); 27976 idx += 1; 27977 } 27978 27979 return [prefix, Array.prototype.slice.call(list, idx)]; 27980}); 27981 27982module.exports = splitWhen; 27983 27984/***/ }), 27985
vendor: 1,284 bytes, lines 27986-28035
27986/***/ "./node_modules/ramda/src/splitWhenever.js": 27987/*!*************************************************!*\ 27988 !*** ./node_modules/ramda/src/splitWhenever.js ***! 27989 \*************************************************/ 27990/***/ ((module, __unused_webpack_exports, __webpack_require__) => { 27991 27992var _curryN = 27993/*#__PURE__*/ 27994__webpack_require__(/*! ./internal/_curryN.js */ "./node_modules/ramda/src/internal/_curryN.js"); 27995/** 27996 * Splits an array into slices on every occurrence of a value. 27997 * 27998 * @func 27999 * @memberOf R 28000 * @since v0.26.1 28001 * @category List 28002 * @sig (a -> Boolean) -> [a] -> [[a]] 28003 * @param {Function} pred The predicate that determines where the array is split. 28004 * @param {Array} list The array to be split. 28005 * @return {Array} 28006 * @example 28007 * 28008 * R.splitWhenever(R.equals(2), [1, 2, 3, 2, 4, 5, 2, 6, 7]); //=> [[1], [3], [4, 5], [6, 7]] 28009 */ 28010 28011 28012var splitWhenever = 28013/*#__PURE__*/ 28014_curryN(2, [], function splitWhenever(pred, list) { 28015 var acc = []; 28016 var curr = []; 28017 28018 for (var i = 0; i < list.length; i = i + 1) { 28019 if (!pred(list[i])) { 28020 curr.push(list[i]); 28021 } 28022 28023 if ((i < list.length - 1 && pred(list[i + 1]) || i === list.length - 1) && curr.length > 0) { 28024 acc.push(curr); 28025 curr = []; 28026 } 28027 } 28028 28029 return acc; 28030}); 28031 28032module.exports = splitWhenever; 28033 28034/***/ }), 28035
vendor: 1,361 bytes, lines 28036-28086
28036/***/ "./node_modules/ramda/src/startsWith.js": 28037/*!**********************************************!*\ 28038 !*** ./node_modules/ramda/src/startsWith.js ***! 28039 \**********************************************/ 28040/***/ ((module, __unused_webpack_exports, __webpack_require__) => { 28041 28042var _curry2 = 28043/*#__PURE__*/ 28044__webpack_require__(/*! ./internal/_curry2.js */ "./node_modules/ramda/src/internal/_curry2.js"); 28045 28046var equals = 28047/*#__PURE__*/ 28048__webpack_require__(/*! ./equals.js */ "./node_modules/ramda/src/equals.js"); 28049 28050var take = 28051/*#__PURE__*/ 28052__webpack_require__(/*! ./take.js */ "./node_modules/ramda/src/take.js"); 28053/** 28054 * Checks if a list starts with the provided sublist. 28055 * 28056 * Similarly, checks if a string starts with the provided substring. 28057 * 28058 * @func 28059 * @memberOf R 28060 * @since v0.24.0 28061 * @category List 28062 * @sig [a] -> [a] -> Boolean 28063 * @sig String -> String -> Boolean 28064 * @param {*} prefix 28065 * @param {*} list 28066 * @return {Boolean} 28067 * @see R.endsWith 28068 * @example 28069 * 28070 * R.startsWith('a', 'abc') //=> true 28071 * R.startsWith('b', 'abc') //=> false 28072 * R.startsWith(['a'], ['a', 'b', 'c']) //=> true 28073 * R.startsWith(['b'], ['a', 'b', 'c']) //=> false 28074 */ 28075 28076 28077var startsWith = 28078/*#__PURE__*/ 28079_curry2(function (prefix, list) { 28080 return equals(take(prefix.length, list), prefix); 28081}); 28082 28083module.exports = startsWith; 28084 28085/***/ }), 28086
vendor: 1,086 bytes, lines 28087-28130
28087/***/ "./node_modules/ramda/src/subtract.js": 28088/*!********************************************!*\ 28089 !*** ./node_modules/ramda/src/subtract.js ***! 28090 \********************************************/ 28091/***/ ((module, __unused_webpack_exports, __webpack_require__) => { 28092 28093var _curry2 = 28094/*#__PURE__*/ 28095__webpack_require__(/*! ./internal/_curry2.js */ "./node_modules/ramda/src/internal/_curry2.js"); 28096/** 28097 * Subtracts its second argument from its first argument. 28098 * 28099 * @func 28100 * @memberOf R 28101 * @since v0.1.0 28102 * @category Math 28103 * @sig Number -> Number -> Number 28104 * @param {Number} a The first value. 28105 * @param {Number} b The second value. 28106 * @return {Number} The result of `a - b`. 28107 * @see R.add 28108 * @example 28109 * 28110 * R.subtract(10, 8); //=> 2 28111 * 28112 * const minus5 = R.subtract(R.__, 5); 28113 * minus5(17); //=> 12 28114 * 28115 * const complementaryAngle = R.subtract(90); 28116 * complementaryAngle(30); //=> 60 28117 * complementaryAngle(72); //=> 18 28118 */ 28119 28120 28121var subtract = 28122/*#__PURE__*/ 28123_curry2(function subtract(a, b) { 28124 return Number(a) - Number(b); 28125}); 28126 28127module.exports = subtract; 28128 28129/***/ }), 28130
vendor: 840 bytes, lines 28131-28167
28131/***/ "./node_modules/ramda/src/sum.js": 28132/*!***************************************!*\ 28133 !*** ./node_modules/ramda/src/sum.js ***! 28134 \***************************************/ 28135/***/ ((module, __unused_webpack_exports, __webpack_require__) => { 28136 28137var add = 28138/*#__PURE__*/ 28139__webpack_require__(/*! ./add.js */ "./node_modules/ramda/src/add.js"); 28140 28141var reduce = 28142/*#__PURE__*/ 28143__webpack_require__(/*! ./reduce.js */ "./node_modules/ramda/src/reduce.js"); 28144/** 28145 * Adds together all the elements of a list. 28146 * 28147 * @func 28148 * @memberOf R 28149 * @since v0.1.0 28150 * @category Math 28151 * @sig [Number] -> Number 28152 * @param {Array} list An array of numbers 28153 * @return {Number} The sum of all the numbers in the list. 28154 * @see R.reduce 28155 * @example 28156 * 28157 * R.sum([2,4,6,8,100,1]); //=> 121 28158 */ 28159 28160 28161var sum = 28162/*#__PURE__*/ 28163reduce(add, 0); 28164module.exports = sum; 28165 28166/***/ }), 28167
vendor: 1,463 bytes, lines 28168-28214
28168/***/ "./node_modules/ramda/src/symmetricDifference.js": 28169/*!*******************************************************!*\ 28170 !*** ./node_modules/ramda/src/symmetricDifference.js ***! 28171 \*******************************************************/ 28172/***/ ((module, __unused_webpack_exports, __webpack_require__) => { 28173 28174var _curry2 = 28175/*#__PURE__*/ 28176__webpack_require__(/*! ./internal/_curry2.js */ "./node_modules/ramda/src/internal/_curry2.js"); 28177 28178var concat = 28179/*#__PURE__*/ 28180__webpack_require__(/*! ./concat.js */ "./node_modules/ramda/src/concat.js"); 28181 28182var difference = 28183/*#__PURE__*/ 28184__webpack_require__(/*! ./difference.js */ "./node_modules/ramda/src/difference.js"); 28185/** 28186 * Finds the set (i.e. no duplicates) of all elements contained in the first or 28187 * second list, but not both. 28188 * 28189 * @func 28190 * @memberOf R 28191 * @since v0.19.0 28192 * @category Relation 28193 * @sig [*] -> [*] -> [*] 28194 * @param {Array} list1 The first list. 28195 * @param {Array} list2 The second list. 28196 * @return {Array} The elements in `list1` or `list2`, but not both. 28197 * @see R.symmetricDifferenceWith, R.difference, R.differenceWith 28198 * @example 28199 * 28200 * R.symmetricDifference([1,2,3,4], [7,6,5,4,3]); //=> [1,2,7,6,5] 28201 * R.symmetricDifference([7,6,5,4,3], [1,2,3,4]); //=> [7,6,5,1,2] 28202 */ 28203 28204 28205var symmetricDifference = 28206/*#__PURE__*/ 28207_curry2(function symmetricDifference(list1, list2) { 28208 return concat(difference(list1, list2), difference(list2, list1)); 28209}); 28210 28211module.exports = symmetricDifference; 28212 28213/***/ }), 28214
vendor: 1,835 bytes, lines 28215-28265
28215/***/ "./node_modules/ramda/src/symmetricDifferenceWith.js": 28216/*!***********************************************************!*\ 28217 !*** ./node_modules/ramda/src/symmetricDifferenceWith.js ***! 28218 \***********************************************************/ 28219/***/ ((module, __unused_webpack_exports, __webpack_require__) => { 28220 28221var _curry3 = 28222/*#__PURE__*/ 28223__webpack_require__(/*! ./internal/_curry3.js */ "./node_modules/ramda/src/internal/_curry3.js"); 28224 28225var concat = 28226/*#__PURE__*/ 28227__webpack_require__(/*! ./concat.js */ "./node_modules/ramda/src/concat.js"); 28228 28229var differenceWith = 28230/*#__PURE__*/ 28231__webpack_require__(/*! ./differenceWith.js */ "./node_modules/ramda/src/differenceWith.js"); 28232/** 28233 * Finds the set (i.e. no duplicates) of all elements contained in the first or 28234 * second list, but not both. Duplication is determined according to the value 28235 * returned by applying the supplied predicate to two list elements. 28236 * 28237 * @func 28238 * @memberOf R 28239 * @since v0.19.0 28240 * @category Relation 28241 * @sig ((a, a) -> Boolean) -> [a] -> [a] -> [a] 28242 * @param {Function} pred A predicate used to test whether two items are equal. 28243 * @param {Array} list1 The first list. 28244 * @param {Array} list2 The second list. 28245 * @return {Array} The elements in `list1` or `list2`, but not both. 28246 * @see R.symmetricDifference, R.difference, R.differenceWith 28247 * @example 28248 * 28249 * const eqA = R.eqBy(R.prop('a')); 28250 * const l1 = [{a: 1}, {a: 2}, {a: 3}, {a: 4}]; 28251 * const l2 = [{a: 3}, {a: 4}, {a: 5}, {a: 6}]; 28252 * R.symmetricDifferenceWith(eqA, l1, l2); //=> [{a: 1}, {a: 2}, {a: 5}, {a: 6}] 28253 */ 28254 28255 28256var symmetricDifferenceWith = 28257/*#__PURE__*/ 28258_curry3(function symmetricDifferenceWith(pred, list1, list2) { 28259 return concat(differenceWith(pred, list1, list2), differenceWith(pred, list2, list1)); 28260}); 28261 28262module.exports = symmetricDifferenceWith; 28263 28264/***/ }), 28265
vendor: 1,427 bytes, lines 28266-28323
28266/***/ "./node_modules/ramda/src/tail.js": 28267/*!****************************************!*\ 28268 !*** ./node_modules/ramda/src/tail.js ***! 28269 \****************************************/ 28270/***/ ((module, __unused_webpack_exports, __webpack_require__) => { 28271 28272var _checkForMethod = 28273/*#__PURE__*/ 28274__webpack_require__(/*! ./internal/_checkForMethod.js */ "./node_modules/ramda/src/internal/_checkForMethod.js"); 28275 28276var _curry1 = 28277/*#__PURE__*/ 28278__webpack_require__(/*! ./internal/_curry1.js */ "./node_modules/ramda/src/internal/_curry1.js"); 28279 28280var slice = 28281/*#__PURE__*/ 28282__webpack_require__(/*! ./slice.js */ "./node_modules/ramda/src/slice.js"); 28283/** 28284 * Returns all but the first element of the given list or string (or object 28285 * with a `tail` method). 28286 * 28287 * Dispatches to the `slice` method of the first argument, if present. 28288 * 28289 * @func 28290 * @memberOf R 28291 * @since v0.1.0 28292 * @category List 28293 * @sig [a] -> [a] 28294 * @sig String -> String 28295 * @param {*} list 28296 * @return {*} 28297 * @see R.head, R.init, R.last 28298 * @example 28299 * 28300 * R.tail([1, 2, 3]); //=> [2, 3] 28301 * R.tail([1, 2]); //=> [2] 28302 * R.tail([1]); //=> [] 28303 * R.tail([]); //=> [] 28304 * 28305 * R.tail('abc'); //=> 'bc' 28306 * R.tail('ab'); //=> 'b' 28307 * R.tail('a'); //=> '' 28308 * R.tail(''); //=> '' 28309 */ 28310 28311 28312var tail = 28313/*#__PURE__*/ 28314_curry1( 28315/*#__PURE__*/ 28316_checkForMethod('tail', 28317/*#__PURE__*/ 28318slice(1, Infinity))); 28319 28320module.exports = tail; 28321 28322/***/ }), 28323
vendor: 2,207 bytes, lines 28324-28401
28324/***/ "./node_modules/ramda/src/take.js": 28325/*!****************************************!*\ 28326 !*** ./node_modules/ramda/src/take.js ***! 28327 \****************************************/ 28328/***/ ((module, __unused_webpack_exports, __webpack_require__) => { 28329 28330var _curry2 = 28331/*#__PURE__*/ 28332__webpack_require__(/*! ./internal/_curry2.js */ "./node_modules/ramda/src/internal/_curry2.js"); 28333 28334var _dispatchable = 28335/*#__PURE__*/ 28336__webpack_require__(/*! ./internal/_dispatchable.js */ "./node_modules/ramda/src/internal/_dispatchable.js"); 28337 28338var _xtake = 28339/*#__PURE__*/ 28340__webpack_require__(/*! ./internal/_xtake.js */ "./node_modules/ramda/src/internal/_xtake.js"); 28341 28342var slice = 28343/*#__PURE__*/ 28344__webpack_require__(/*! ./slice.js */ "./node_modules/ramda/src/slice.js"); 28345/** 28346 * Returns the first `n` elements of the given list, string, or 28347 * transducer/transformer (or object with a `take` method). 28348 * 28349 * Dispatches to the `take` method of the second argument, if present. 28350 * 28351 * @func 28352 * @memberOf R 28353 * @since v0.1.0 28354 * @category List 28355 * @sig Number -> [a] -> [a] 28356 * @sig Number -> String -> String 28357 * @param {Number} n 28358 * @param {*} list 28359 * @return {*} 28360 * @see R.drop 28361 * @example 28362 * 28363 * R.take(1, ['foo', 'bar', 'baz']); //=> ['foo'] 28364 * R.take(2, ['foo', 'bar', 'baz']); //=> ['foo', 'bar'] 28365 * R.take(3, ['foo', 'bar', 'baz']); //=> ['foo', 'bar', 'baz'] 28366 * R.take(4, ['foo', 'bar', 'baz']); //=> ['foo', 'bar', 'baz'] 28367 * R.take(3, 'ramda'); //=> 'ram' 28368 * 28369 * const personnel = [ 28370 * 'Dave Brubeck', 28371 * 'Paul Desmond', 28372 * 'Eugene Wright', 28373 * 'Joe Morello', 28374 * 'Gerry Mulligan', 28375 * 'Bob Bates', 28376 * 'Joe Dodge', 28377 * 'Ron Crotty' 28378 * ]; 28379 * 28380 * const takeFive = R.take(5); 28381 * takeFive(personnel); 28382 * //=> ['Dave Brubeck', 'Paul Desmond', 'Eugene Wright', 'Joe Morello', 'Gerry Mulligan'] 28383 * @symb R.take(-1, [a, b]) = [a, b] 28384 * @symb R.take(0, [a, b]) = [] 28385 * @symb R.take(1, [a, b]) = [a] 28386 * @symb R.take(2, [a, b]) = [a, b] 28387 */ 28388 28389 28390var take = 28391/*#__PURE__*/ 28392_curry2( 28393/*#__PURE__*/ 28394_dispatchable(['take'], _xtake, function take(n, xs) { 28395 return slice(0, n < 0 ? Infinity : n, xs); 28396})); 28397 28398module.exports = take; 28399 28400/***/ }), 28401
vendor: 1,408 bytes, lines 28402-28448
28402/***/ "./node_modules/ramda/src/takeLast.js": 28403/*!********************************************!*\ 28404 !*** ./node_modules/ramda/src/takeLast.js ***! 28405 \********************************************/ 28406/***/ ((module, __unused_webpack_exports, __webpack_require__) => { 28407 28408var _curry2 = 28409/*#__PURE__*/ 28410__webpack_require__(/*! ./internal/_curry2.js */ "./node_modules/ramda/src/internal/_curry2.js"); 28411 28412var drop = 28413/*#__PURE__*/ 28414__webpack_require__(/*! ./drop.js */ "./node_modules/ramda/src/drop.js"); 28415/** 28416 * Returns a new list containing the last `n` elements of the given list. 28417 * If `n > list.length`, returns a list of `list.length` elements. 28418 * 28419 * @func 28420 * @memberOf R 28421 * @since v0.16.0 28422 * @category List 28423 * @sig Number -> [a] -> [a] 28424 * @sig Number -> String -> String 28425 * @param {Number} n The number of elements to return. 28426 * @param {Array} xs The collection to consider. 28427 * @return {Array} 28428 * @see R.dropLast 28429 * @example 28430 * 28431 * R.takeLast(1, ['foo', 'bar', 'baz']); //=> ['baz'] 28432 * R.takeLast(2, ['foo', 'bar', 'baz']); //=> ['bar', 'baz'] 28433 * R.takeLast(3, ['foo', 'bar', 'baz']); //=> ['foo', 'bar', 'baz'] 28434 * R.takeLast(4, ['foo', 'bar', 'baz']); //=> ['foo', 'bar', 'baz'] 28435 * R.takeLast(3, 'ramda'); //=> 'mda' 28436 */ 28437 28438 28439var takeLast = 28440/*#__PURE__*/ 28441_curry2(function takeLast(n, xs) { 28442 return drop(n >= 0 ? xs.length - n : 0, xs); 28443}); 28444 28445module.exports = takeLast; 28446 28447/***/ }), 28448
vendor: 1,602 bytes, lines 28449-28504
28449/***/ "./node_modules/ramda/src/takeLastWhile.js": 28450/*!*************************************************!*\ 28451 !*** ./node_modules/ramda/src/takeLastWhile.js ***! 28452 \*************************************************/ 28453/***/ ((module, __unused_webpack_exports, __webpack_require__) => { 28454 28455var _curry2 = 28456/*#__PURE__*/ 28457__webpack_require__(/*! ./internal/_curry2.js */ "./node_modules/ramda/src/internal/_curry2.js"); 28458 28459var slice = 28460/*#__PURE__*/ 28461__webpack_require__(/*! ./slice.js */ "./node_modules/ramda/src/slice.js"); 28462/** 28463 * Returns a new list containing the last `n` elements of a given list, passing 28464 * each value to the supplied predicate function, and terminating when the 28465 * predicate function returns `false`. Excludes the element that caused the 28466 * predicate function to fail. The predicate function is passed one argument: 28467 * *(value)*. 28468 * 28469 * @func 28470 * @memberOf R 28471 * @since v0.16.0 28472 * @category List 28473 * @sig (a -> Boolean) -> [a] -> [a] 28474 * @sig (a -> Boolean) -> String -> String 28475 * @param {Function} fn The function called per iteration. 28476 * @param {Array} xs The collection to iterate over. 28477 * @return {Array} A new array. 28478 * @see R.dropLastWhile, R.addIndex 28479 * @example 28480 * 28481 * const isNotOne = x => x !== 1; 28482 * 28483 * R.takeLastWhile(isNotOne, [1, 2, 3, 4]); //=> [2, 3, 4] 28484 * 28485 * R.takeLastWhile(x => x !== 'R' , 'Ramda'); //=> 'amda' 28486 */ 28487 28488 28489var takeLastWhile = 28490/*#__PURE__*/ 28491_curry2(function takeLastWhile(fn, xs) { 28492 var idx = xs.length - 1; 28493 28494 while (idx >= 0 && fn(xs[idx])) { 28495 idx -= 1; 28496 } 28497 28498 return slice(idx + 1, Infinity, xs); 28499}); 28500 28501module.exports = takeLastWhile; 28502 28503/***/ }), 28504
vendor: 2,078 bytes, lines 28505-28575
28505/***/ "./node_modules/ramda/src/takeWhile.js": 28506/*!*********************************************!*\ 28507 !*** ./node_modules/ramda/src/takeWhile.js ***! 28508 \*********************************************/ 28509/***/ ((module, __unused_webpack_exports, __webpack_require__) => { 28510 28511var _curry2 = 28512/*#__PURE__*/ 28513__webpack_require__(/*! ./internal/_curry2.js */ "./node_modules/ramda/src/internal/_curry2.js"); 28514 28515var _dispatchable = 28516/*#__PURE__*/ 28517__webpack_require__(/*! ./internal/_dispatchable.js */ "./node_modules/ramda/src/internal/_dispatchable.js"); 28518 28519var _xtakeWhile = 28520/*#__PURE__*/ 28521__webpack_require__(/*! ./internal/_xtakeWhile.js */ "./node_modules/ramda/src/internal/_xtakeWhile.js"); 28522 28523var slice = 28524/*#__PURE__*/ 28525__webpack_require__(/*! ./slice.js */ "./node_modules/ramda/src/slice.js"); 28526/** 28527 * Returns a new list containing the first `n` elements of a given list, 28528 * passing each value to the supplied predicate function, and terminating when 28529 * the predicate function returns `false`. Excludes the element that caused the 28530 * predicate function to fail. The predicate function is passed one argument: 28531 * *(value)*. 28532 * 28533 * Dispatches to the `takeWhile` method of the second argument, if present. 28534 * 28535 * Acts as a transducer if a transformer is given in list position. 28536 * 28537 * @func 28538 * @memberOf R 28539 * @since v0.1.0 28540 * @category List 28541 * @sig (a -> Boolean) -> [a] -> [a] 28542 * @sig (a -> Boolean) -> String -> String 28543 * @param {Function} fn The function called per iteration. 28544 * @param {Array} xs The collection to iterate over. 28545 * @return {Array} A new array. 28546 * @see R.dropWhile, R.transduce, R.addIndex 28547 * @example 28548 * 28549 * const isNotFour = x => x !== 4; 28550 * 28551 * R.takeWhile(isNotFour, [1, 2, 3, 4, 3, 2, 1]); //=> [1, 2, 3] 28552 * 28553 * R.takeWhile(x => x !== 'd' , 'Ramda'); //=> 'Ram' 28554 */ 28555 28556 28557var takeWhile = 28558/*#__PURE__*/ 28559_curry2( 28560/*#__PURE__*/ 28561_dispatchable(['takeWhile'], _xtakeWhile, function takeWhile(fn, xs) { 28562 var idx = 0; 28563 var len = xs.length; 28564 28565 while (idx < len && fn(xs[idx])) { 28566 idx += 1; 28567 } 28568 28569 return slice(0, idx, xs); 28570})); 28571 28572module.exports = takeWhile; 28573 28574/***/ }), 28575
vendor: 1,337 bytes, lines 28576-28627
28576/***/ "./node_modules/ramda/src/tap.js": 28577/*!***************************************!*\ 28578 !*** ./node_modules/ramda/src/tap.js ***! 28579 \***************************************/ 28580/***/ ((module, __unused_webpack_exports, __webpack_require__) => { 28581 28582var _curry2 = 28583/*#__PURE__*/ 28584__webpack_require__(/*! ./internal/_curry2.js */ "./node_modules/ramda/src/internal/_curry2.js"); 28585 28586var _dispatchable = 28587/*#__PURE__*/ 28588__webpack_require__(/*! ./internal/_dispatchable.js */ "./node_modules/ramda/src/internal/_dispatchable.js"); 28589 28590var _xtap = 28591/*#__PURE__*/ 28592__webpack_require__(/*! ./internal/_xtap.js */ "./node_modules/ramda/src/internal/_xtap.js"); 28593/** 28594 * Runs the given function with the supplied object, then returns the object. 28595 * 28596 * Acts as a transducer if a transformer is given as second parameter. 28597 * 28598 * @func 28599 * @memberOf R 28600 * @since v0.1.0 28601 * @category Function 28602 * @sig (a -> *) -> a -> a 28603 * @param {Function} fn The function to call with `x`. The return value of `fn` will be thrown away. 28604 * @param {*} x 28605 * @return {*} `x`. 28606 * @example 28607 * 28608 * const sayX = x => console.log('x is ' + x); 28609 * R.tap(sayX, 100); //=> 100 28610 * // logs 'x is 100' 28611 * @symb R.tap(f, a) = a 28612 */ 28613 28614 28615var tap = 28616/*#__PURE__*/ 28617_curry2( 28618/*#__PURE__*/ 28619_dispatchable([], _xtap, function tap(fn, x) { 28620 fn(x); 28621 return x; 28622})); 28623 28624module.exports = tap; 28625 28626/***/ }), 28627
vendor: 1,429 bytes, lines 28628-28681
28628/***/ "./node_modules/ramda/src/test.js": 28629/*!****************************************!*\ 28630 !*** ./node_modules/ramda/src/test.js ***! 28631 \****************************************/ 28632/***/ ((module, __unused_webpack_exports, __webpack_require__) => { 28633 28634var _cloneRegExp = 28635/*#__PURE__*/ 28636__webpack_require__(/*! ./internal/_cloneRegExp.js */ "./node_modules/ramda/src/internal/_cloneRegExp.js"); 28637 28638var _curry2 = 28639/*#__PURE__*/ 28640__webpack_require__(/*! ./internal/_curry2.js */ "./node_modules/ramda/src/internal/_curry2.js"); 28641 28642var _isRegExp = 28643/*#__PURE__*/ 28644__webpack_require__(/*! ./internal/_isRegExp.js */ "./node_modules/ramda/src/internal/_isRegExp.js"); 28645 28646var toString = 28647/*#__PURE__*/ 28648__webpack_require__(/*! ./toString.js */ "./node_modules/ramda/src/toString.js"); 28649/** 28650 * Determines whether a given string matches a given regular expression. 28651 * 28652 * @func 28653 * @memberOf R 28654 * @since v0.12.0 28655 * @category String 28656 * @sig RegExp -> String -> Boolean 28657 * @param {RegExp} pattern 28658 * @param {String} str 28659 * @return {Boolean} 28660 * @see R.match 28661 * @example 28662 * 28663 * R.test(/^x/, 'xyz'); //=> true 28664 * R.test(/^y/, 'xyz'); //=> false 28665 */ 28666 28667 28668var test = 28669/*#__PURE__*/ 28670_curry2(function test(pattern, str) { 28671 if (!_isRegExp(pattern)) { 28672 throw new TypeError('âtestâ requires a value of type RegExp as its first argument; received ' + toString(pattern)); 28673 } 28674 28675 return _cloneRegExp(pattern).test(str); 28676}); 28677 28678module.exports = test; 28679 28680/***/ }), 28681
vendor: 1,379 bytes, lines 28682-28729
28682/***/ "./node_modules/ramda/src/thunkify.js": 28683/*!********************************************!*\ 28684 !*** ./node_modules/ramda/src/thunkify.js ***! 28685 \********************************************/ 28686/***/ ((module, __unused_webpack_exports, __webpack_require__) => { 28687 28688var curryN = 28689/*#__PURE__*/ 28690__webpack_require__(/*! ./curryN.js */ "./node_modules/ramda/src/curryN.js"); 28691 28692var _curry1 = 28693/*#__PURE__*/ 28694__webpack_require__(/*! ./internal/_curry1.js */ "./node_modules/ramda/src/internal/_curry1.js"); 28695/** 28696 * Creates a thunk out of a function. A thunk delays a calculation until 28697 * its result is needed, providing lazy evaluation of arguments. 28698 * 28699 * @func 28700 * @memberOf R 28701 * @since v0.26.0 28702 * @category Function 28703 * @sig ((a, b, ..., j) -> k) -> (a, b, ..., j) -> (() -> k) 28704 * @param {Function} fn A function to wrap in a thunk 28705 * @return {Function} Expects arguments for `fn` and returns a new function 28706 * that, when called, applies those arguments to `fn`. 28707 * @see R.partial, R.partialRight 28708 * @example 28709 * 28710 * R.thunkify(R.identity)(42)(); //=> 42 28711 * R.thunkify((a, b) => a + b)(25, 17)(); //=> 42 28712 */ 28713 28714 28715var thunkify = 28716/*#__PURE__*/ 28717_curry1(function thunkify(fn) { 28718 return curryN(fn.length, function createThunk() { 28719 var fnArgs = arguments; 28720 return function invokeThunk() { 28721 return fn.apply(this, fnArgs); 28722 }; 28723 }); 28724}); 28725 28726module.exports = thunkify; 28727 28728/***/ }), 28729
vendor: 1,524 bytes, lines 28730-28788
28730/***/ "./node_modules/ramda/src/times.js": 28731/*!*****************************************!*\ 28732 !*** ./node_modules/ramda/src/times.js ***! 28733 \*****************************************/ 28734/***/ ((module, __unused_webpack_exports, __webpack_require__) => { 28735 28736var _curry2 = 28737/*#__PURE__*/ 28738__webpack_require__(/*! ./internal/_curry2.js */ "./node_modules/ramda/src/internal/_curry2.js"); 28739/** 28740 * Calls an input function `n` times, returning an array containing the results 28741 * of those function calls. 28742 * 28743 * `fn` is passed one argument: The current value of `n`, which begins at `0` 28744 * and is gradually incremented to `n - 1`. 28745 * 28746 * @func 28747 * @memberOf R 28748 * @since v0.2.3 28749 * @category List 28750 * @sig (Number -> a) -> Number -> [a] 28751 * @param {Function} fn The function to invoke. Passed one argument, the current value of `n`. 28752 * @param {Number} n A value between `0` and `n - 1`. Increments after each function call. 28753 * @return {Array} An array containing the return values of all calls to `fn`. 28754 * @see R.repeat 28755 * @example 28756 * 28757 * R.times(R.identity, 5); //=> [0, 1, 2, 3, 4] 28758 * @symb R.times(f, 0) = [] 28759 * @symb R.times(f, 1) = [f(0)] 28760 * @symb R.times(f, 2) = [f(0), f(1)] 28761 */ 28762 28763 28764var times = 28765/*#__PURE__*/ 28766_curry2(function times(fn, n) { 28767 var len = Number(n); 28768 var idx = 0; 28769 var list; 28770 28771 if (len < 0 || isNaN(len)) { 28772 throw new RangeError('n must be a non-negative number'); 28773 } 28774 28775 list = new Array(len); 28776 28777 while (idx < len) { 28778 list[idx] = fn(idx); 28779 idx += 1; 28780 } 28781 28782 return list; 28783}); 28784 28785module.exports = times; 28786 28787/***/ }), 28788
vendor: 771 bytes, lines 28789-28821
28789/***/ "./node_modules/ramda/src/toLower.js": 28790/*!*******************************************!*\ 28791 !*** ./node_modules/ramda/src/toLower.js ***! 28792 \*******************************************/ 28793/***/ ((module, __unused_webpack_exports, __webpack_require__) => { 28794 28795var invoker = 28796/*#__PURE__*/ 28797__webpack_require__(/*! ./invoker.js */ "./node_modules/ramda/src/invoker.js"); 28798/** 28799 * The lower case version of a string. 28800 * 28801 * @func 28802 * @memberOf R 28803 * @since v0.9.0 28804 * @category String 28805 * @sig String -> String 28806 * @param {String} str The string to lower case. 28807 * @return {String} The lower case version of `str`. 28808 * @see R.toUpper 28809 * @example 28810 * 28811 * R.toLower('XYZ'); //=> 'xyz' 28812 */ 28813 28814 28815var toLower = 28816/*#__PURE__*/ 28817invoker(0, 'toLowerCase'); 28818module.exports = toLower; 28819 28820/***/ }), 28821
vendor: 1,340 bytes, lines 28822-28872
28822/***/ "./node_modules/ramda/src/toPairs.js": 28823/*!*******************************************!*\ 28824 !*** ./node_modules/ramda/src/toPairs.js ***! 28825 \*******************************************/ 28826/***/ ((module, __unused_webpack_exports, __webpack_require__) => { 28827 28828var _curry1 = 28829/*#__PURE__*/ 28830__webpack_require__(/*! ./internal/_curry1.js */ "./node_modules/ramda/src/internal/_curry1.js"); 28831 28832var _has = 28833/*#__PURE__*/ 28834__webpack_require__(/*! ./internal/_has.js */ "./node_modules/ramda/src/internal/_has.js"); 28835/** 28836 * Converts an object into an array of key, value arrays. Only the object's 28837 * own properties are used. 28838 * Note that the order of the output array is not guaranteed to be consistent 28839 * across different JS platforms. 28840 * 28841 * @func 28842 * @memberOf R 28843 * @since v0.4.0 28844 * @category Object 28845 * @sig {String: *} -> [[String,*]] 28846 * @param {Object} obj The object to extract from 28847 * @return {Array} An array of key, value arrays from the object's own properties. 28848 * @see R.fromPairs, R.keys, R.values 28849 * @example 28850 * 28851 * R.toPairs({a: 1, b: 2, c: 3}); //=> [['a', 1], ['b', 2], ['c', 3]] 28852 */ 28853 28854 28855var toPairs = 28856/*#__PURE__*/ 28857_curry1(function toPairs(obj) { 28858 var pairs = []; 28859 28860 for (var prop in obj) { 28861 if (_has(prop, obj)) { 28862 pairs[pairs.length] = [prop, obj[prop]]; 28863 } 28864 } 28865 28866 return pairs; 28867}); 28868 28869module.exports = toPairs; 28870 28871/***/ }), 28872
vendor: 1,289 bytes, lines 28873-28920
28873/***/ "./node_modules/ramda/src/toPairsIn.js": 28874/*!*********************************************!*\ 28875 !*** ./node_modules/ramda/src/toPairsIn.js ***! 28876 \*********************************************/ 28877/***/ ((module, __unused_webpack_exports, __webpack_require__) => { 28878 28879var _curry1 = 28880/*#__PURE__*/ 28881__webpack_require__(/*! ./internal/_curry1.js */ "./node_modules/ramda/src/internal/_curry1.js"); 28882/** 28883 * Converts an object into an array of key, value arrays. The object's own 28884 * properties and prototype properties are used. Note that the order of the 28885 * output array is not guaranteed to be consistent across different JS 28886 * platforms. 28887 * 28888 * @func 28889 * @memberOf R 28890 * @since v0.4.0 28891 * @category Object 28892 * @sig {String: *} -> [[String,*]] 28893 * @param {Object} obj The object to extract from 28894 * @return {Array} An array of key, value arrays from the object's own 28895 * and prototype properties. 28896 * @example 28897 * 28898 * const F = function() { this.x = 'X'; }; 28899 * F.prototype.y = 'Y'; 28900 * const f = new F(); 28901 * R.toPairsIn(f); //=> [['x','X'], ['y','Y']] 28902 */ 28903 28904 28905var toPairsIn = 28906/*#__PURE__*/ 28907_curry1(function toPairsIn(obj) { 28908 var pairs = []; 28909 28910 for (var prop in obj) { 28911 pairs[pairs.length] = [prop, obj[prop]]; 28912 } 28913 28914 return pairs; 28915}); 28916 28917module.exports = toPairsIn; 28918 28919/***/ }), 28920
vendor: 1,885 bytes, lines 28921-28981
28921/***/ "./node_modules/ramda/src/toString.js": 28922/*!********************************************!*\ 28923 !*** ./node_modules/ramda/src/toString.js ***! 28924 \********************************************/ 28925/***/ ((module, __unused_webpack_exports, __webpack_require__) => { 28926 28927var _curry1 = 28928/*#__PURE__*/ 28929__webpack_require__(/*! ./internal/_curry1.js */ "./node_modules/ramda/src/internal/_curry1.js"); 28930 28931var _toString = 28932/*#__PURE__*/ 28933__webpack_require__(/*! ./internal/_toString.js */ "./node_modules/ramda/src/internal/_toString.js"); 28934/** 28935 * Returns the string representation of the given value. `eval`'ing the output 28936 * should result in a value equivalent to the input value. Many of the built-in 28937 * `toString` methods do not satisfy this requirement. 28938 * 28939 * If the given value is an `[object Object]` with a `toString` method other 28940 * than `Object.prototype.toString`, this method is invoked with no arguments 28941 * to produce the return value. This means user-defined constructor functions 28942 * can provide a suitable `toString` method. For example: 28943 * 28944 * function Point(x, y) { 28945 * this.x = x; 28946 * this.y = y; 28947 * } 28948 * 28949 * Point.prototype.toString = function() { 28950 * return 'new Point(' + this.x + ', ' + this.y + ')'; 28951 * }; 28952 * 28953 * R.toString(new Point(1, 2)); //=> 'new Point(1, 2)' 28954 * 28955 * @func 28956 * @memberOf R 28957 * @since v0.14.0 28958 * @category String 28959 * @sig * -> String 28960 * @param {*} val 28961 * @return {String} 28962 * @example 28963 * 28964 * R.toString(42); //=> '42' 28965 * R.toString('abc'); //=> '"abc"' 28966 * R.toString([1, 2, 3]); //=> '[1, 2, 3]' 28967 * R.toString({foo: 1, bar: 2, baz: 3}); //=> '{"bar": 2, "baz": 3, "foo": 1}' 28968 * R.toString(new Date('2001-02-03T04:05:06Z')); //=> 'new Date("2001-02-03T04:05:06.000Z")' 28969 */ 28970 28971 28972var toString = 28973/*#__PURE__*/ 28974_curry1(function toString(val) { 28975 return _toString(val, []); 28976}); 28977 28978module.exports = toString; 28979 28980/***/ }), 28981
vendor: 771 bytes, lines 28982-29014
28982/***/ "./node_modules/ramda/src/toUpper.js": 28983/*!*******************************************!*\ 28984 !*** ./node_modules/ramda/src/toUpper.js ***! 28985 \*******************************************/ 28986/***/ ((module, __unused_webpack_exports, __webpack_require__) => { 28987 28988var invoker = 28989/*#__PURE__*/ 28990__webpack_require__(/*! ./invoker.js */ "./node_modules/ramda/src/invoker.js"); 28991/** 28992 * The upper case version of a string. 28993 * 28994 * @func 28995 * @memberOf R 28996 * @since v0.9.0 28997 * @category String 28998 * @sig String -> String 28999 * @param {String} str The string to upper case. 29000 * @return {String} The upper case version of `str`. 29001 * @see R.toLower 29002 * @example 29003 * 29004 * R.toUpper('abc'); //=> 'ABC' 29005 */ 29006 29007 29008var toUpper = 29009/*#__PURE__*/ 29010invoker(0, 'toUpperCase'); 29011module.exports = toUpper; 29012 29013/***/ }), 29014
vendor: 3,144 bytes, lines 29015-29089
29015/***/ "./node_modules/ramda/src/transduce.js": 29016/*!*********************************************!*\ 29017 !*** ./node_modules/ramda/src/transduce.js ***! 29018 \*********************************************/ 29019/***/ ((module, __unused_webpack_exports, __webpack_require__) => { 29020 29021var _reduce = 29022/*#__PURE__*/ 29023__webpack_require__(/*! ./internal/_reduce.js */ "./node_modules/ramda/src/internal/_reduce.js"); 29024 29025var _xwrap = 29026/*#__PURE__*/ 29027__webpack_require__(/*! ./internal/_xwrap.js */ "./node_modules/ramda/src/internal/_xwrap.js"); 29028 29029var curryN = 29030/*#__PURE__*/ 29031__webpack_require__(/*! ./curryN.js */ "./node_modules/ramda/src/curryN.js"); 29032/** 29033 * Initializes a transducer using supplied iterator function. Returns a single 29034 * item by iterating through the list, successively calling the transformed 29035 * iterator function and passing it an accumulator value and the current value 29036 * from the array, and then passing the result to the next call. 29037 * 29038 * The iterator function receives two values: *(acc, value)*. It will be 29039 * wrapped as a transformer to initialize the transducer. A transformer can be 29040 * passed directly in place of an iterator function. In both cases, iteration 29041 * may be stopped early with the [`R.reduced`](#reduced) function. 29042 * 29043 * A transducer is a function that accepts a transformer and returns a 29044 * transformer and can be composed directly. 29045 * 29046 * A transformer is an object that provides a 2-arity reducing iterator 29047 * function, step, 0-arity initial value function, init, and 1-arity result 29048 * extraction function, result. The step function is used as the iterator 29049 * function in reduce. The result function is used to convert the final 29050 * accumulator into the return type and in most cases is 29051 * [`R.identity`](#identity). The init function can be used to provide an 29052 * initial accumulator, but is ignored by transduce. 29053 * 29054 * The iteration is performed with [`R.reduce`](#reduce) after initializing the transducer. 29055 * 29056 * @func 29057 * @memberOf R 29058 * @since v0.12.0 29059 * @category List 29060 * @sig (c -> c) -> ((a, b) -> a) -> a -> [b] -> a 29061 * @param {Function} xf The transducer function. Receives a transformer and returns a transformer. 29062 * @param {Function} fn The iterator function. Receives two values, the accumulator and the 29063 * current element from the array. Wrapped as transformer, if necessary, and used to 29064 * initialize the transducer 29065 * @param {*} acc The initial accumulator value. 29066 * @param {Array} list The list to iterate over. 29067 * @return {*} The final, accumulated value. 29068 * @see R.reduce, R.reduced, R.into 29069 * @example 29070 * 29071 * const numbers = [1, 2, 3, 4]; 29072 * const transducer = R.compose(R.map(R.add(1)), R.take(2)); 29073 * R.transduce(transducer, R.flip(R.append), [], numbers); //=> [2, 3] 29074 * 29075 * const isOdd = (x) => x % 2 !== 0; 29076 * const firstOddTransducer = R.compose(R.filter(isOdd), R.take(1)); 29077 * R.transduce(firstOddTransducer, R.flip(R.append), [], R.range(0, 100)); //=> [1] 29078 */ 29079 29080 29081var transduce = 29082/*#__PURE__*/ 29083curryN(4, function transduce(xf, fn, acc, list) { 29084 return _reduce(xf(typeof fn === 'function' ? _xwrap(fn) : fn), acc, list); 29085}); 29086module.exports = transduce; 29087 29088/***/ }), 29089
vendor: 1,674 bytes, lines 29090-29153
29090/***/ "./node_modules/ramda/src/transpose.js": 29091/*!*********************************************!*\ 29092 !*** ./node_modules/ramda/src/transpose.js ***! 29093 \*********************************************/ 29094/***/ ((module, __unused_webpack_exports, __webpack_require__) => { 29095 29096var _curry1 = 29097/*#__PURE__*/ 29098__webpack_require__(/*! ./internal/_curry1.js */ "./node_modules/ramda/src/internal/_curry1.js"); 29099/** 29100 * Transposes the rows and columns of a 2D list. 29101 * When passed a list of `n` lists of length `x`, 29102 * returns a list of `x` lists of length `n`. 29103 * 29104 * 29105 * @func 29106 * @memberOf R 29107 * @since v0.19.0 29108 * @category List 29109 * @sig [[a]] -> [[a]] 29110 * @param {Array} list A 2D list 29111 * @return {Array} A 2D list 29112 * @example 29113 * 29114 * R.transpose([[1, 'a'], [2, 'b'], [3, 'c']]) //=> [[1, 2, 3], ['a', 'b', 'c']] 29115 * R.transpose([[1, 2, 3], ['a', 'b', 'c']]) //=> [[1, 'a'], [2, 'b'], [3, 'c']] 29116 * 29117 * // If some of the rows are shorter than the following rows, their elements are skipped: 29118 * R.transpose([[10, 11], [20], [], [30, 31, 32]]) //=> [[10, 20, 30], [11, 31], [32]] 29119 * @symb R.transpose([[a], [b], [c]]) = [a, b, c] 29120 * @symb R.transpose([[a, b], [c, d]]) = [[a, c], [b, d]] 29121 * @symb R.transpose([[a, b], [c]]) = [[a, c], [b]] 29122 */ 29123 29124 29125var transpose = 29126/*#__PURE__*/ 29127_curry1(function transpose(outerlist) { 29128 var i = 0; 29129 var result = []; 29130 29131 while (i < outerlist.length) { 29132 var innerlist = outerlist[i]; 29133 var j = 0; 29134 29135 while (j < innerlist.length) { 29136 if (typeof result[j] === 'undefined') { 29137 result[j] = []; 29138 } 29139 29140 result[j].push(innerlist[j]); 29141 j += 1; 29142 } 29143 29144 i += 1; 29145 } 29146 29147 return result; 29148}); 29149 29150module.exports = transpose; 29151 29152/***/ }), 29153
vendor: 1,918 bytes, lines 29154-29208
29154/***/ "./node_modules/ramda/src/traverse.js": 29155/*!********************************************!*\ 29156 !*** ./node_modules/ramda/src/traverse.js ***! 29157 \********************************************/ 29158/***/ ((module, __unused_webpack_exports, __webpack_require__) => { 29159 29160var _curry3 = 29161/*#__PURE__*/ 29162__webpack_require__(/*! ./internal/_curry3.js */ "./node_modules/ramda/src/internal/_curry3.js"); 29163 29164var map = 29165/*#__PURE__*/ 29166__webpack_require__(/*! ./map.js */ "./node_modules/ramda/src/map.js"); 29167 29168var sequence = 29169/*#__PURE__*/ 29170__webpack_require__(/*! ./sequence.js */ "./node_modules/ramda/src/sequence.js"); 29171/** 29172 * Maps an [Applicative](https://github.com/fantasyland/fantasy-land#applicative)-returning 29173 * function over a [Traversable](https://github.com/fantasyland/fantasy-land#traversable), 29174 * then uses [`sequence`](#sequence) to transform the resulting Traversable of Applicative 29175 * into an Applicative of Traversable. 29176 * 29177 * Dispatches to the `traverse` method of the third argument, if present. 29178 * 29179 * @func 29180 * @memberOf R 29181 * @since v0.19.0 29182 * @category List 29183 * @sig (Applicative f, Traversable t) => (a -> f a) -> (a -> f b) -> t a -> f (t b) 29184 * @param {Function} of 29185 * @param {Function} f 29186 * @param {*} traversable 29187 * @return {*} 29188 * @see R.sequence 29189 * @example 29190 * 29191 * // Returns `Maybe.Nothing` if the given divisor is `0` 29192 * const safeDiv = n => d => d === 0 ? Maybe.Nothing() : Maybe.Just(n / d) 29193 * 29194 * R.traverse(Maybe.of, safeDiv(10), [2, 4, 5]); //=> Maybe.Just([5, 2.5, 2]) 29195 * R.traverse(Maybe.of, safeDiv(10), [2, 0, 5]); //=> Maybe.Nothing 29196 */ 29197 29198 29199var traverse = 29200/*#__PURE__*/ 29201_curry3(function traverse(of, f, traversable) { 29202 return typeof traversable['fantasy-land/traverse'] === 'function' ? traversable['fantasy-land/traverse'](f, of) : typeof traversable.traverse === 'function' ? traversable.traverse(f, of) : sequence(of, map(f, traversable)); 29203}); 29204 29205module.exports = traverse; 29206 29207/***/ }), 29208
vendor: 1,404 bytes, lines 29209-29256
29209/***/ "./node_modules/ramda/src/trim.js": 29210/*!****************************************!*\ 29211 !*** ./node_modules/ramda/src/trim.js ***! 29212 \****************************************/ 29213/***/ ((module, __unused_webpack_exports, __webpack_require__) => { 29214 29215var _curry1 = 29216/*#__PURE__*/ 29217__webpack_require__(/*! ./internal/_curry1.js */ "./node_modules/ramda/src/internal/_curry1.js"); 29218 29219var ws = '\x09\x0A\x0B\x0C\x0D\x20\xA0\u1680\u2000\u2001\u2002\u2003' + '\u2004\u2005\u2006\u2007\u2008\u2009\u200A\u202F\u205F\u3000\u2028' + '\u2029\uFEFF'; 29220var zeroWidth = '\u200b'; 29221var hasProtoTrim = typeof String.prototype.trim === 'function'; 29222/** 29223 * Removes (strips) whitespace from both ends of the string. 29224 * 29225 * @func 29226 * @memberOf R 29227 * @since v0.6.0 29228 * @category String 29229 * @sig String -> String 29230 * @param {String} str The string to trim. 29231 * @return {String} Trimmed version of `str`. 29232 * @example 29233 * 29234 * R.trim(' xyz '); //=> 'xyz' 29235 * R.map(R.trim, R.split(',', 'x, y, z')); //=> ['x', 'y', 'z'] 29236 */ 29237 29238var trim = !hasProtoTrim || 29239/*#__PURE__*/ 29240ws.trim() || ! 29241/*#__PURE__*/ 29242zeroWidth.trim() ? 29243/*#__PURE__*/ 29244_curry1(function trim(str) { 29245 var beginRx = new RegExp('^[' + ws + '][' + ws + ']*'); 29246 var endRx = new RegExp('[' + ws + '][' + ws + ']*$'); 29247 return str.replace(beginRx, '').replace(endRx, ''); 29248}) : 29249/*#__PURE__*/ 29250_curry1(function trim(str) { 29251 return str.trim(); 29252}); 29253module.exports = trim; 29254 29255/***/ }), 29256
vendor: 2,132 bytes, lines 29257-29315
29257/***/ "./node_modules/ramda/src/tryCatch.js": 29258/*!********************************************!*\ 29259 !*** ./node_modules/ramda/src/tryCatch.js ***! 29260 \********************************************/ 29261/***/ ((module, __unused_webpack_exports, __webpack_require__) => { 29262 29263var _arity = 29264/*#__PURE__*/ 29265__webpack_require__(/*! ./internal/_arity.js */ "./node_modules/ramda/src/internal/_arity.js"); 29266 29267var _concat = 29268/*#__PURE__*/ 29269__webpack_require__(/*! ./internal/_concat.js */ "./node_modules/ramda/src/internal/_concat.js"); 29270 29271var _curry2 = 29272/*#__PURE__*/ 29273__webpack_require__(/*! ./internal/_curry2.js */ "./node_modules/ramda/src/internal/_curry2.js"); 29274/** 29275 * `tryCatch` takes two functions, a `tryer` and a `catcher`. The returned 29276 * function evaluates the `tryer`; if it does not throw, it simply returns the 29277 * result. If the `tryer` *does* throw, the returned function evaluates the 29278 * `catcher` function and returns its result. Note that for effective 29279 * composition with this function, both the `tryer` and `catcher` functions 29280 * must return the same type of results. 29281 * 29282 * @func 29283 * @memberOf R 29284 * @since v0.20.0 29285 * @category Function 29286 * @sig (...x -> a) -> ((e, ...x) -> a) -> (...x -> a) 29287 * @param {Function} tryer The function that may throw. 29288 * @param {Function} catcher The function that will be evaluated if `tryer` throws. 29289 * @return {Function} A new function that will catch exceptions and send them to the catcher. 29290 * @example 29291 * 29292 * R.tryCatch(R.prop('x'), R.F)({x: true}); //=> true 29293 * R.tryCatch(() => { throw 'foo'}, R.always('caught'))('bar') // => 29294 * 'caught' 29295 * R.tryCatch(R.times(R.identity), R.always([]))('s') // => [] 29296 * R.tryCatch(() => { throw 'this is not a valid value'}, (err, value)=>({error : err, value }))('bar') // => {'error': 'this is not a valid value', 'value': 'bar'} 29297 */ 29298 29299 29300var tryCatch = 29301/*#__PURE__*/ 29302_curry2(function _tryCatch(tryer, catcher) { 29303 return _arity(tryer.length, function () { 29304 try { 29305 return tryer.apply(this, arguments); 29306 } catch (e) { 29307 return catcher.apply(this, _concat([e], arguments)); 29308 } 29309 }); 29310}); 29311 29312module.exports = tryCatch; 29313 29314/***/ }), 29315
vendor: 1,334 bytes, lines 29316-29361
29316/***/ "./node_modules/ramda/src/type.js": 29317/*!****************************************!*\ 29318 !*** ./node_modules/ramda/src/type.js ***! 29319 \****************************************/ 29320/***/ ((module, __unused_webpack_exports, __webpack_require__) => { 29321 29322var _curry1 = 29323/*#__PURE__*/ 29324__webpack_require__(/*! ./internal/_curry1.js */ "./node_modules/ramda/src/internal/_curry1.js"); 29325/** 29326 * Gives a single-word string description of the (native) type of a value, 29327 * returning such answers as 'Object', 'Number', 'Array', or 'Null'. Does not 29328 * attempt to distinguish user Object types any further, reporting them all as 29329 * 'Object'. 29330 * 29331 * @func 29332 * @memberOf R 29333 * @since v0.8.0 29334 * @category Type 29335 * @sig (* -> {*}) -> String 29336 * @param {*} val The value to test 29337 * @return {String} 29338 * @example 29339 * 29340 * R.type({}); //=> "Object" 29341 * R.type(1); //=> "Number" 29342 * R.type(false); //=> "Boolean" 29343 * R.type('s'); //=> "String" 29344 * R.type(null); //=> "Null" 29345 * R.type([]); //=> "Array" 29346 * R.type(/[A-z]/); //=> "RegExp" 29347 * R.type(() => {}); //=> "Function" 29348 * R.type(undefined); //=> "Undefined" 29349 */ 29350 29351 29352var type = 29353/*#__PURE__*/ 29354_curry1(function type(val) { 29355 return val === null ? 'Null' : val === undefined ? 'Undefined' : Object.prototype.toString.call(val).slice(8, -1); 29356}); 29357 29358module.exports = type; 29359 29360/***/ }), 29361
vendor: 1,246 bytes, lines 29362-29408
29362/***/ "./node_modules/ramda/src/unapply.js": 29363/*!*******************************************!*\ 29364 !*** ./node_modules/ramda/src/unapply.js ***! 29365 \*******************************************/ 29366/***/ ((module, __unused_webpack_exports, __webpack_require__) => { 29367 29368var _curry1 = 29369/*#__PURE__*/ 29370__webpack_require__(/*! ./internal/_curry1.js */ "./node_modules/ramda/src/internal/_curry1.js"); 29371/** 29372 * Takes a function `fn`, which takes a single array argument, and returns a 29373 * function which: 29374 * 29375 * - takes any number of positional arguments; 29376 * - passes these arguments to `fn` as an array; and 29377 * - returns the result. 29378 * 29379 * In other words, `R.unapply` derives a variadic function from a function which 29380 * takes an array. `R.unapply` is the inverse of [`R.apply`](#apply). 29381 * 29382 * @func 29383 * @memberOf R 29384 * @since v0.8.0 29385 * @category Function 29386 * @sig ([*...] -> a) -> (*... -> a) 29387 * @param {Function} fn 29388 * @return {Function} 29389 * @see R.apply 29390 * @example 29391 * 29392 * R.unapply(JSON.stringify)(1, 2, 3); //=> '[1,2,3]' 29393 * @symb R.unapply(f)(a, b) = f([a, b]) 29394 */ 29395 29396 29397var unapply = 29398/*#__PURE__*/ 29399_curry1(function unapply(fn) { 29400 return function () { 29401 return fn(Array.prototype.slice.call(arguments, 0)); 29402 }; 29403}); 29404 29405module.exports = unapply; 29406 29407/***/ }), 29408
vendor: 1,485 bytes, lines 29409-29461
29409/***/ "./node_modules/ramda/src/unary.js": 29410/*!*****************************************!*\ 29411 !*** ./node_modules/ramda/src/unary.js ***! 29412 \*****************************************/ 29413/***/ ((module, __unused_webpack_exports, __webpack_require__) => { 29414 29415var _curry1 = 29416/*#__PURE__*/ 29417__webpack_require__(/*! ./internal/_curry1.js */ "./node_modules/ramda/src/internal/_curry1.js"); 29418 29419var nAry = 29420/*#__PURE__*/ 29421__webpack_require__(/*! ./nAry.js */ "./node_modules/ramda/src/nAry.js"); 29422/** 29423 * Wraps a function of any arity (including nullary) in a function that accepts 29424 * exactly 1 parameter. Any extraneous parameters will not be passed to the 29425 * supplied function. 29426 * 29427 * @func 29428 * @memberOf R 29429 * @since v0.2.0 29430 * @category Function 29431 * @sig (a -> b -> c -> ... -> z) -> (a -> z) 29432 * @param {Function} fn The function to wrap. 29433 * @return {Function} A new function wrapping `fn`. The new function is guaranteed to be of 29434 * arity 1. 29435 * @see R.binary, R.nAry 29436 * @example 29437 * 29438 * const takesTwoArgs = function(a, b) { 29439 * return [a, b]; 29440 * }; 29441 * takesTwoArgs.length; //=> 2 29442 * takesTwoArgs(1, 2); //=> [1, 2] 29443 * 29444 * const takesOneArg = R.unary(takesTwoArgs); 29445 * takesOneArg.length; //=> 1 29446 * // Only 1 argument is passed to the wrapped function 29447 * takesOneArg(1, 2); //=> [1, undefined] 29448 * @symb R.unary(f)(a, b, c) = f(a) 29449 */ 29450 29451 29452var unary = 29453/*#__PURE__*/ 29454_curry1(function unary(fn) { 29455 return nAry(1, fn); 29456}); 29457 29458module.exports = unary; 29459 29460/***/ }), 29461
vendor: 1,757 bytes, lines 29462-29522
29462/***/ "./node_modules/ramda/src/uncurryN.js": 29463/*!********************************************!*\ 29464 !*** ./node_modules/ramda/src/uncurryN.js ***! 29465 \********************************************/ 29466/***/ ((module, __unused_webpack_exports, __webpack_require__) => { 29467 29468var _curry2 = 29469/*#__PURE__*/ 29470__webpack_require__(/*! ./internal/_curry2.js */ "./node_modules/ramda/src/internal/_curry2.js"); 29471 29472var curryN = 29473/*#__PURE__*/ 29474__webpack_require__(/*! ./curryN.js */ "./node_modules/ramda/src/curryN.js"); 29475/** 29476 * Returns a function of arity `n` from a (manually) curried function. 29477 * Note that, the returned function is actually a ramda style 29478 * curryied function, which can accept one or more arguments in each 29479 * function calling. 29480 * 29481 * @func 29482 * @memberOf R 29483 * @since v0.14.0 29484 * @category Function 29485 * @sig Number -> (a -> b -> c ... -> z) -> ((a -> b -> c ...) -> z) 29486 * @param {Number} length The arity for the returned function. 29487 * @param {Function} fn The function to uncurry. 29488 * @return {Function} A new function. 29489 * @see R.curry, R.curryN 29490 * @example 29491 * 29492 * const addFour = a => b => c => d => a + b + c + d; 29493 * 29494 * const uncurriedAddFour = R.uncurryN(4, addFour); 29495 * uncurriedAddFour(1, 2, 3, 4); //=> 10 29496 */ 29497 29498 29499var uncurryN = 29500/*#__PURE__*/ 29501_curry2(function uncurryN(depth, fn) { 29502 return curryN(depth, function () { 29503 var currentDepth = 1; 29504 var value = fn; 29505 var idx = 0; 29506 var endIdx; 29507 29508 while (currentDepth <= depth && typeof value === 'function') { 29509 endIdx = currentDepth === depth ? arguments.length : idx + value.length; 29510 value = value.apply(this, Array.prototype.slice.call(arguments, idx, endIdx)); 29511 currentDepth += 1; 29512 idx = endIdx; 29513 } 29514 29515 return value; 29516 }); 29517}); 29518 29519module.exports = uncurryN; 29520 29521/***/ }), 29522
vendor: 1,675 bytes, lines 29523-29576
29523/***/ "./node_modules/ramda/src/unfold.js": 29524/*!******************************************!*\ 29525 !*** ./node_modules/ramda/src/unfold.js ***! 29526 \******************************************/ 29527/***/ ((module, __unused_webpack_exports, __webpack_require__) => { 29528 29529var _curry2 = 29530/*#__PURE__*/ 29531__webpack_require__(/*! ./internal/_curry2.js */ "./node_modules/ramda/src/internal/_curry2.js"); 29532/** 29533 * Builds a list from a seed value. Accepts an iterator function, which returns 29534 * either false to stop iteration or an array of length 2 containing the value 29535 * to add to the resulting list and the seed to be used in the next call to the 29536 * iterator function. 29537 * 29538 * The iterator function receives one argument: *(seed)*. 29539 * 29540 * @func 29541 * @memberOf R 29542 * @since v0.10.0 29543 * @category List 29544 * @sig (a -> [b]) -> * -> [b] 29545 * @param {Function} fn The iterator function. receives one argument, `seed`, and returns 29546 * either false to quit iteration or an array of length two to proceed. The element 29547 * at index 0 of this array will be added to the resulting array, and the element 29548 * at index 1 will be passed to the next call to `fn`. 29549 * @param {*} seed The seed value. 29550 * @return {Array} The final list. 29551 * @example 29552 * 29553 * const f = n => n > 50 ? false : [-n, n + 10]; 29554 * R.unfold(f, 10); //=> [-10, -20, -30, -40, -50] 29555 * @symb R.unfold(f, x) = [f(x)[0], f(f(x)[1])[0], f(f(f(x)[1])[1])[0], ...] 29556 */ 29557 29558 29559var unfold = 29560/*#__PURE__*/ 29561_curry2(function unfold(fn, seed) { 29562 var pair = fn(seed); 29563 var result = []; 29564 29565 while (pair && pair.length) { 29566 result[result.length] = pair[0]; 29567 pair = fn(pair[1]); 29568 } 29569 29570 return result; 29571}); 29572 29573module.exports = unfold; 29574 29575/***/ }), 29576
vendor: 1,266 bytes, lines 29577-29626
29577/***/ "./node_modules/ramda/src/union.js": 29578/*!*****************************************!*\ 29579 !*** ./node_modules/ramda/src/union.js ***! 29580 \*****************************************/ 29581/***/ ((module, __unused_webpack_exports, __webpack_require__) => { 29582 29583var _concat = 29584/*#__PURE__*/ 29585__webpack_require__(/*! ./internal/_concat.js */ "./node_modules/ramda/src/internal/_concat.js"); 29586 29587var _curry2 = 29588/*#__PURE__*/ 29589__webpack_require__(/*! ./internal/_curry2.js */ "./node_modules/ramda/src/internal/_curry2.js"); 29590 29591var compose = 29592/*#__PURE__*/ 29593__webpack_require__(/*! ./compose.js */ "./node_modules/ramda/src/compose.js"); 29594 29595var uniq = 29596/*#__PURE__*/ 29597__webpack_require__(/*! ./uniq.js */ "./node_modules/ramda/src/uniq.js"); 29598/** 29599 * Combines two lists into a set (i.e. no duplicates) composed of the elements 29600 * of each list. 29601 * 29602 * @func 29603 * @memberOf R 29604 * @since v0.1.0 29605 * @category Relation 29606 * @sig [*] -> [*] -> [*] 29607 * @param {Array} as The first list. 29608 * @param {Array} bs The second list. 29609 * @return {Array} The first and second lists concatenated, with 29610 * duplicates removed. 29611 * @example 29612 * 29613 * R.union([1, 2, 3], [2, 3, 4]); //=> [1, 2, 3, 4] 29614 */ 29615 29616 29617var union = 29618/*#__PURE__*/ 29619_curry2( 29620/*#__PURE__*/ 29621compose(uniq, _concat)); 29622 29623module.exports = union; 29624 29625/***/ }), 29626
vendor: 1,677 bytes, lines 29627-29678
29627/***/ "./node_modules/ramda/src/unionWith.js": 29628/*!*********************************************!*\ 29629 !*** ./node_modules/ramda/src/unionWith.js ***! 29630 \*********************************************/ 29631/***/ ((module, __unused_webpack_exports, __webpack_require__) => { 29632 29633var _concat = 29634/*#__PURE__*/ 29635__webpack_require__(/*! ./internal/_concat.js */ "./node_modules/ramda/src/internal/_concat.js"); 29636 29637var _curry3 = 29638/*#__PURE__*/ 29639__webpack_require__(/*! ./internal/_curry3.js */ "./node_modules/ramda/src/internal/_curry3.js"); 29640 29641var uniqWith = 29642/*#__PURE__*/ 29643__webpack_require__(/*! ./uniqWith.js */ "./node_modules/ramda/src/uniqWith.js"); 29644/** 29645 * Combines two lists into a set (i.e. no duplicates) composed of the elements 29646 * of each list. Duplication is determined according to the value returned by 29647 * applying the supplied predicate to two list elements. If an element exists 29648 * in both lists, the first element from the first list will be used. 29649 * 29650 * @func 29651 * @memberOf R 29652 * @since v0.1.0 29653 * @category Relation 29654 * @sig ((a, a) -> Boolean) -> [*] -> [*] -> [*] 29655 * @param {Function} pred A predicate used to test whether two items are equal. 29656 * @param {Array} list1 The first list. 29657 * @param {Array} list2 The second list. 29658 * @return {Array} The first and second lists concatenated, with 29659 * duplicates removed. 29660 * @see R.union 29661 * @example 29662 * 29663 * const l1 = [{a: 1}, {a: 2}]; 29664 * const l2 = [{a: 1}, {a: 4}]; 29665 * R.unionWith(R.eqBy(R.prop('a')), l1, l2); //=> [{a: 1}, {a: 2}, {a: 4}] 29666 */ 29667 29668 29669var unionWith = 29670/*#__PURE__*/ 29671_curry3(function unionWith(pred, list1, list2) { 29672 return uniqWith(pred, _concat(list1, list2)); 29673}); 29674 29675module.exports = unionWith; 29676 29677/***/ }), 29678
vendor: 1,009 bytes, lines 29679-29717
29679/***/ "./node_modules/ramda/src/uniq.js": 29680/*!****************************************!*\ 29681 !*** ./node_modules/ramda/src/uniq.js ***! 29682 \****************************************/ 29683/***/ ((module, __unused_webpack_exports, __webpack_require__) => { 29684 29685var identity = 29686/*#__PURE__*/ 29687__webpack_require__(/*! ./identity.js */ "./node_modules/ramda/src/identity.js"); 29688 29689var uniqBy = 29690/*#__PURE__*/ 29691__webpack_require__(/*! ./uniqBy.js */ "./node_modules/ramda/src/uniqBy.js"); 29692/** 29693 * Returns a new list containing only one copy of each element in the original 29694 * list. [`R.equals`](#equals) is used to determine equality. 29695 * 29696 * @func 29697 * @memberOf R 29698 * @since v0.1.0 29699 * @category List 29700 * @sig [a] -> [a] 29701 * @param {Array} list The array to consider. 29702 * @return {Array} The list of unique items. 29703 * @example 29704 * 29705 * R.uniq([1, 1, 2, 1]); //=> [1, 2] 29706 * R.uniq([1, '1']); //=> [1, '1'] 29707 * R.uniq([[42], [42]]); //=> [[42]] 29708 */ 29709 29710 29711var uniq = 29712/*#__PURE__*/ 29713uniqBy(identity); 29714module.exports = uniq; 29715 29716/***/ }), 29717
vendor: 1,934 bytes, lines 29718-29788
29718/***/ "./node_modules/ramda/src/uniqBy.js": 29719/*!******************************************!*\ 29720 !*** ./node_modules/ramda/src/uniqBy.js ***! 29721 \******************************************/ 29722/***/ ((module, __unused_webpack_exports, __webpack_require__) => { 29723 29724var _Set = 29725/*#__PURE__*/ 29726__webpack_require__(/*! ./internal/_Set.js */ "./node_modules/ramda/src/internal/_Set.js"); 29727 29728var _curry2 = 29729/*#__PURE__*/ 29730__webpack_require__(/*! ./internal/_curry2.js */ "./node_modules/ramda/src/internal/_curry2.js"); 29731 29732var _dispatchable = 29733/*#__PURE__*/ 29734__webpack_require__(/*! ./internal/_dispatchable.js */ "./node_modules/ramda/src/internal/_dispatchable.js"); 29735 29736var _xuniqBy = 29737/*#__PURE__*/ 29738__webpack_require__(/*! ./internal/_xuniqBy.js */ "./node_modules/ramda/src/internal/_xuniqBy.js"); 29739/** 29740 * Returns a new list containing only one copy of each element in the original 29741 * list, based upon the value returned by applying the supplied function to 29742 * each list element. Prefers the first item if the supplied function produces 29743 * the same value on two items. [`R.equals`](#equals) is used for comparison. 29744 * 29745 * Acts as a transducer if a transformer is given in list position. 29746 * 29747 * @func 29748 * @memberOf R 29749 * @since v0.16.0 29750 * @category List 29751 * @sig (a -> b) -> [a] -> [a] 29752 * @param {Function} fn A function used to produce a value to use during comparisons. 29753 * @param {Array} list The array to consider. 29754 * @return {Array} The list of unique items. 29755 * @example 29756 * 29757 * R.uniqBy(Math.abs, [-1, -5, 2, 10, 1, 2]); //=> [-1, -5, 2, 10] 29758 */ 29759 29760 29761var uniqBy = 29762/*#__PURE__*/ 29763_curry2( 29764/*#__PURE__*/ 29765_dispatchable([], _xuniqBy, function (fn, list) { 29766 var set = new _Set(); 29767 var result = []; 29768 var idx = 0; 29769 var appliedItem, item; 29770 29771 while (idx < list.length) { 29772 item = list[idx]; 29773 appliedItem = fn(item); 29774 29775 if (set.add(appliedItem)) { 29776 result.push(item); 29777 } 29778 29779 idx += 1; 29780 } 29781 29782 return result; 29783})); 29784 29785module.exports = uniqBy; 29786 29787/***/ }), 29788
vendor: 2,087 bytes, lines 29789-29862
29789/***/ "./node_modules/ramda/src/uniqWith.js": 29790/*!********************************************!*\ 29791 !*** ./node_modules/ramda/src/uniqWith.js ***! 29792 \********************************************/ 29793/***/ ((module, __unused_webpack_exports, __webpack_require__) => { 29794 29795var _curry2 = 29796/*#__PURE__*/ 29797__webpack_require__(/*! ./internal/_curry2.js */ "./node_modules/ramda/src/internal/_curry2.js"); 29798 29799var _dispatchable = 29800/*#__PURE__*/ 29801__webpack_require__(/*! ./internal/_dispatchable.js */ "./node_modules/ramda/src/internal/_dispatchable.js"); 29802 29803var _includesWith = 29804/*#__PURE__*/ 29805__webpack_require__(/*! ./internal/_includesWith.js */ "./node_modules/ramda/src/internal/_includesWith.js"); 29806 29807var _xuniqWith = 29808/*#__PURE__*/ 29809__webpack_require__(/*! ./internal/_xuniqWith.js */ "./node_modules/ramda/src/internal/_xuniqWith.js"); 29810/** 29811 * Returns a new list containing only one copy of each element in the original 29812 * list, based upon the value returned by applying the supplied predicate to 29813 * two list elements. Prefers the first item if two items compare equal based 29814 * on the predicate. 29815 * 29816 * Acts as a transducer if a transformer is given in list position. 29817 * 29818 * @func 29819 * @memberOf R 29820 * @since v0.2.0 29821 * @category List 29822 * @sig ((a, a) -> Boolean) -> [a] -> [a] 29823 * @param {Function} pred A predicate used to test whether two items are equal. 29824 * @param {Array} list The array to consider. 29825 * @return {Array} The list of unique items. 29826 * @example 29827 * 29828 * const strEq = R.eqBy(String); 29829 * R.uniqWith(strEq)([1, '1', 2, 1]); //=> [1, 2] 29830 * R.uniqWith(strEq)([{}, {}]); //=> [{}] 29831 * R.uniqWith(strEq)([1, '1', 1]); //=> [1] 29832 * R.uniqWith(strEq)(['1', 1, 1]); //=> ['1'] 29833 */ 29834 29835 29836var uniqWith = 29837/*#__PURE__*/ 29838_curry2( 29839/*#__PURE__*/ 29840_dispatchable([], _xuniqWith, function (pred, list) { 29841 var idx = 0; 29842 var len = list.length; 29843 var result = []; 29844 var item; 29845 29846 while (idx < len) { 29847 item = list[idx]; 29848 29849 if (!_includesWith(pred, item, result)) { 29850 result[result.length] = item; 29851 } 29852 29853 idx += 1; 29854 } 29855 29856 return result; 29857})); 29858 29859module.exports = uniqWith; 29860 29861/***/ }), 29862
vendor: 1,505 bytes, lines 29863-29907
29863/***/ "./node_modules/ramda/src/unless.js": 29864/*!******************************************!*\ 29865 !*** ./node_modules/ramda/src/unless.js ***! 29866 \******************************************/ 29867/***/ ((module, __unused_webpack_exports, __webpack_require__) => { 29868 29869var _curry3 = 29870/*#__PURE__*/ 29871__webpack_require__(/*! ./internal/_curry3.js */ "./node_modules/ramda/src/internal/_curry3.js"); 29872/** 29873 * Tests the final argument by passing it to the given predicate function. If 29874 * the predicate is not satisfied, the function will return the result of 29875 * calling the `whenFalseFn` function with the same argument. If the predicate 29876 * is satisfied, the argument is returned as is. 29877 * 29878 * @func 29879 * @memberOf R 29880 * @since v0.18.0 29881 * @category Logic 29882 * @sig (a -> Boolean) -> (a -> b) -> a -> a | b 29883 * @param {Function} pred A predicate function 29884 * @param {Function} whenFalseFn A function to invoke when the `pred` evaluates 29885 * to a falsy value. 29886 * @param {*} x An object to test with the `pred` function and 29887 * pass to `whenFalseFn` if necessary. 29888 * @return {*} Either `x` or the result of applying `x` to `whenFalseFn`. 29889 * @see R.ifElse, R.when, R.cond 29890 * @example 29891 * 29892 * let safeInc = R.unless(R.isNil, R.inc); 29893 * safeInc(null); //=> null 29894 * safeInc(1); //=> 2 29895 */ 29896 29897 29898var unless = 29899/*#__PURE__*/ 29900_curry3(function unless(pred, whenFalseFn, x) { 29901 return pred(x) ? x : whenFalseFn(x); 29902}); 29903 29904module.exports = unless; 29905 29906/***/ }), 29907
vendor: 1,022 bytes, lines 29908-29946
29908/***/ "./node_modules/ramda/src/unnest.js": 29909/*!******************************************!*\ 29910 !*** ./node_modules/ramda/src/unnest.js ***! 29911 \******************************************/ 29912/***/ ((module, __unused_webpack_exports, __webpack_require__) => { 29913 29914var _identity = 29915/*#__PURE__*/ 29916__webpack_require__(/*! ./internal/_identity.js */ "./node_modules/ramda/src/internal/_identity.js"); 29917 29918var chain = 29919/*#__PURE__*/ 29920__webpack_require__(/*! ./chain.js */ "./node_modules/ramda/src/chain.js"); 29921/** 29922 * Shorthand for `R.chain(R.identity)`, which removes one level of nesting from 29923 * any [Chain](https://github.com/fantasyland/fantasy-land#chain). 29924 * 29925 * @func 29926 * @memberOf R 29927 * @since v0.3.0 29928 * @category List 29929 * @sig Chain c => c (c a) -> c a 29930 * @param {*} list 29931 * @return {*} 29932 * @see R.flatten, R.chain 29933 * @example 29934 * 29935 * R.unnest([1, [2], [[3]]]); //=> [1, 2, [3]] 29936 * R.unnest([[1, 2], [3, 4], [5, 6]]); //=> [1, 2, 3, 4, 5, 6] 29937 */ 29938 29939 29940var unnest = 29941/*#__PURE__*/ 29942chain(_identity); 29943module.exports = unnest; 29944 29945/***/ }), 29946
vendor: 1,204 bytes, lines 29947-29992
29947/***/ "./node_modules/ramda/src/until.js": 29948/*!*****************************************!*\ 29949 !*** ./node_modules/ramda/src/until.js ***! 29950 \*****************************************/ 29951/***/ ((module, __unused_webpack_exports, __webpack_require__) => { 29952 29953var _curry3 = 29954/*#__PURE__*/ 29955__webpack_require__(/*! ./internal/_curry3.js */ "./node_modules/ramda/src/internal/_curry3.js"); 29956/** 29957 * Takes a predicate, a transformation function, and an initial value, 29958 * and returns a value of the same type as the initial value. 29959 * It does so by applying the transformation until the predicate is satisfied, 29960 * at which point it returns the satisfactory value. 29961 * 29962 * @func 29963 * @memberOf R 29964 * @since v0.20.0 29965 * @category Logic 29966 * @sig (a -> Boolean) -> (a -> a) -> a -> a 29967 * @param {Function} pred A predicate function 29968 * @param {Function} fn The iterator function 29969 * @param {*} init Initial value 29970 * @return {*} Final value that satisfies predicate 29971 * @example 29972 * 29973 * R.until(R.gt(R.__, 100), R.multiply(2))(1) // => 128 29974 */ 29975 29976 29977var until = 29978/*#__PURE__*/ 29979_curry3(function until(pred, fn, init) { 29980 var val = init; 29981 29982 while (!pred(val)) { 29983 val = fn(val); 29984 } 29985 29986 return val; 29987}); 29988 29989module.exports = until; 29990 29991/***/ }), 29992
vendor: 2,081 bytes, lines 29993-30058
29993/***/ "./node_modules/ramda/src/unwind.js": 29994/*!******************************************!*\ 29995 !*** ./node_modules/ramda/src/unwind.js ***! 29996 \******************************************/ 29997/***/ ((module, __unused_webpack_exports, __webpack_require__) => { 29998 29999var _curry2 = 30000/*#__PURE__*/ 30001__webpack_require__(/*! ./internal/_curry2.js */ "./node_modules/ramda/src/internal/_curry2.js"); 30002 30003var _isArray = 30004/*#__PURE__*/ 30005__webpack_require__(/*! ./internal/_isArray.js */ "./node_modules/ramda/src/internal/_isArray.js"); 30006 30007var _map = 30008/*#__PURE__*/ 30009__webpack_require__(/*! ./internal/_map.js */ "./node_modules/ramda/src/internal/_map.js"); 30010 30011var _assoc = 30012/*#__PURE__*/ 30013__webpack_require__(/*! ./internal/_assoc.js */ "./node_modules/ramda/src/internal/_assoc.js"); 30014/** 30015 * 30016 * Deconstructs an array field from the input documents to output a document for each element. 30017 * Each output document is the input document with the value of the array field replaced by the element. 30018 * 30019 * @func 30020 * @memberOf R 30021 * @since v0.28.0 30022 * @category Object 30023 * @sig String -> {k: [v]} -> [{k: v}] 30024 * @param {String} key The key to determine which property of the object should be unwind 30025 * @param {Object} object The object containing list under property named as key which is to unwind 30026 * @return {List} A new list of object containing the value of input key having list replaced by each element in the object. 30027 * @example 30028 * 30029 * R.unwind('hobbies', { 30030 * name: 'alice', 30031 * hobbies: ['Golf', 'Hacking'], 30032 * colors: ['red', 'green'], 30033 * }); 30034 * // [ 30035 * // { name: 'alice', hobbies: 'Golf', colors: ['red', 'green'] }, 30036 * // { name: 'alice', hobbies: 'Hacking', colors: ['red', 'green'] } 30037 * // ] 30038 */ 30039 30040 30041var unwind = 30042/*#__PURE__*/ 30043_curry2(function (key, object) { 30044 // If key is not in object or key is not as a list in object 30045 if (!(key in object && _isArray(object[key]))) { 30046 return [object]; 30047 } // Map over object[key] which is a list and assoc each element with key 30048 30049 30050 return _map(function (item) { 30051 return _assoc(key, item, object); 30052 }, object[key]); 30053}); 30054 30055module.exports = unwind; 30056 30057/***/ }), 30058
vendor: 1,534 bytes, lines 30059-30109
30059/***/ "./node_modules/ramda/src/update.js": 30060/*!******************************************!*\ 30061 !*** ./node_modules/ramda/src/update.js ***! 30062 \******************************************/ 30063/***/ ((module, __unused_webpack_exports, __webpack_require__) => { 30064 30065var _curry3 = 30066/*#__PURE__*/ 30067__webpack_require__(/*! ./internal/_curry3.js */ "./node_modules/ramda/src/internal/_curry3.js"); 30068 30069var adjust = 30070/*#__PURE__*/ 30071__webpack_require__(/*! ./adjust.js */ "./node_modules/ramda/src/adjust.js"); 30072 30073var always = 30074/*#__PURE__*/ 30075__webpack_require__(/*! ./always.js */ "./node_modules/ramda/src/always.js"); 30076/** 30077 * Returns a new copy of the array with the element at the provided index 30078 * replaced with the given value. 30079 * 30080 * @func 30081 * @memberOf R 30082 * @since v0.14.0 30083 * @category List 30084 * @sig Number -> a -> [a] -> [a] 30085 * @param {Number} idx The index to update. 30086 * @param {*} x The value to exist at the given index of the returned array. 30087 * @param {Array|Arguments} list The source array-like object to be updated. 30088 * @return {Array} A copy of `list` with the value at index `idx` replaced with `x`. 30089 * @see R.adjust 30090 * @example 30091 * 30092 * R.update(1, '_', ['a', 'b', 'c']); //=> ['a', '_', 'c'] 30093 * R.update(-1, '_', ['a', 'b', 'c']); //=> ['a', 'b', '_'] 30094 * @symb R.update(-1, a, [b, c]) = [b, a] 30095 * @symb R.update(0, a, [b, c]) = [a, c] 30096 * @symb R.update(1, a, [b, c]) = [b, a] 30097 */ 30098 30099 30100var update = 30101/*#__PURE__*/ 30102_curry3(function update(idx, x, list) { 30103 return adjust(idx, always(x), list); 30104}); 30105 30106module.exports = update; 30107 30108/***/ }), 30109
vendor: 2,232 bytes, lines 30110-30173
30110/***/ "./node_modules/ramda/src/useWith.js": 30111/*!*******************************************!*\ 30112 !*** ./node_modules/ramda/src/useWith.js ***! 30113 \*******************************************/ 30114/***/ ((module, __unused_webpack_exports, __webpack_require__) => { 30115 30116var _curry2 = 30117/*#__PURE__*/ 30118__webpack_require__(/*! ./internal/_curry2.js */ "./node_modules/ramda/src/internal/_curry2.js"); 30119 30120var curryN = 30121/*#__PURE__*/ 30122__webpack_require__(/*! ./curryN.js */ "./node_modules/ramda/src/curryN.js"); 30123/** 30124 * Accepts a function `fn` and a list of transformer functions and returns a 30125 * new curried function. When the new function is invoked, it calls the 30126 * function `fn` with parameters consisting of the result of calling each 30127 * supplied handler on successive arguments to the new function. 30128 * 30129 * If more arguments are passed to the returned function than transformer 30130 * functions, those arguments are passed directly to `fn` as additional 30131 * parameters. If you expect additional arguments that don't need to be 30132 * transformed, although you can ignore them, it's best to pass an identity 30133 * function so that the new function reports the correct arity. 30134 * 30135 * @func 30136 * @memberOf R 30137 * @since v0.1.0 30138 * @category Function 30139 * @sig ((x1, x2, ...) -> z) -> [(a -> x1), (b -> x2), ...] -> (a -> b -> ... -> z) 30140 * @param {Function} fn The function to wrap. 30141 * @param {Array} transformers A list of transformer functions 30142 * @return {Function} The wrapped function. 30143 * @see R.converge 30144 * @example 30145 * 30146 * R.useWith(Math.pow, [R.identity, R.identity])(3, 4); //=> 81 30147 * R.useWith(Math.pow, [R.identity, R.identity])(3)(4); //=> 81 30148 * R.useWith(Math.pow, [R.dec, R.inc])(3, 4); //=> 32 30149 * R.useWith(Math.pow, [R.dec, R.inc])(3)(4); //=> 32 30150 * @symb R.useWith(f, [g, h])(a, b) = f(g(a), h(b)) 30151 */ 30152 30153 30154var useWith = 30155/*#__PURE__*/ 30156_curry2(function useWith(fn, transformers) { 30157 return curryN(transformers.length, function () { 30158 var args = []; 30159 var idx = 0; 30160 30161 while (idx < transformers.length) { 30162 args.push(transformers[idx].call(this, arguments[idx])); 30163 idx += 1; 30164 } 30165 30166 return fn.apply(this, args.concat(Array.prototype.slice.call(arguments, transformers.length))); 30167 }); 30168}); 30169 30170module.exports = useWith; 30171 30172/***/ }), 30173
vendor: 1,262 bytes, lines 30174-30225
30174/***/ "./node_modules/ramda/src/values.js": 30175/*!******************************************!*\ 30176 !*** ./node_modules/ramda/src/values.js ***! 30177 \******************************************/ 30178/***/ ((module, __unused_webpack_exports, __webpack_require__) => { 30179 30180var _curry1 = 30181/*#__PURE__*/ 30182__webpack_require__(/*! ./internal/_curry1.js */ "./node_modules/ramda/src/internal/_curry1.js"); 30183 30184var keys = 30185/*#__PURE__*/ 30186__webpack_require__(/*! ./keys.js */ "./node_modules/ramda/src/keys.js"); 30187/** 30188 * Returns a list of all the enumerable own properties of the supplied object. 30189 * Note that the order of the output array is not guaranteed across different 30190 * JS platforms. 30191 * 30192 * @func 30193 * @memberOf R 30194 * @since v0.1.0 30195 * @category Object 30196 * @sig {k: v} -> [v] 30197 * @param {Object} obj The object to extract values from 30198 * @return {Array} An array of the values of the object's own properties. 30199 * @see R.valuesIn, R.keys, R.toPairs 30200 * @example 30201 * 30202 * R.values({a: 1, b: 2, c: 3}); //=> [1, 2, 3] 30203 */ 30204 30205 30206var values = 30207/*#__PURE__*/ 30208_curry1(function values(obj) { 30209 var props = keys(obj); 30210 var len = props.length; 30211 var vals = []; 30212 var idx = 0; 30213 30214 while (idx < len) { 30215 vals[idx] = obj[props[idx]]; 30216 idx += 1; 30217 } 30218 30219 return vals; 30220}); 30221 30222module.exports = values; 30223 30224/***/ }), 30225
vendor: 1,233 bytes, lines 30226-30274
30226/***/ "./node_modules/ramda/src/valuesIn.js": 30227/*!********************************************!*\ 30228 !*** ./node_modules/ramda/src/valuesIn.js ***! 30229 \********************************************/ 30230/***/ ((module, __unused_webpack_exports, __webpack_require__) => { 30231 30232var _curry1 = 30233/*#__PURE__*/ 30234__webpack_require__(/*! ./internal/_curry1.js */ "./node_modules/ramda/src/internal/_curry1.js"); 30235/** 30236 * Returns a list of all the properties, including prototype properties, of the 30237 * supplied object. 30238 * Note that the order of the output array is not guaranteed to be consistent 30239 * across different JS platforms. 30240 * 30241 * @func 30242 * @memberOf R 30243 * @since v0.2.0 30244 * @category Object 30245 * @sig {k: v} -> [v] 30246 * @param {Object} obj The object to extract values from 30247 * @return {Array} An array of the values of the object's own and prototype properties. 30248 * @see R.values, R.keysIn 30249 * @example 30250 * 30251 * const F = function() { this.x = 'X'; }; 30252 * F.prototype.y = 'Y'; 30253 * const f = new F(); 30254 * R.valuesIn(f); //=> ['X', 'Y'] 30255 */ 30256 30257 30258var valuesIn = 30259/*#__PURE__*/ 30260_curry1(function valuesIn(obj) { 30261 var prop; 30262 var vs = []; 30263 30264 for (prop in obj) { 30265 vs[vs.length] = obj[prop]; 30266 } 30267 30268 return vs; 30269}); 30270 30271module.exports = valuesIn; 30272 30273/***/ }), 30274
vendor: 1,434 bytes, lines 30275-30328
30275/***/ "./node_modules/ramda/src/view.js": 30276/*!****************************************!*\ 30277 !*** ./node_modules/ramda/src/view.js ***! 30278 \****************************************/ 30279/***/ ((module, __unused_webpack_exports, __webpack_require__) => { 30280 30281var _curry2 = 30282/*#__PURE__*/ 30283__webpack_require__(/*! ./internal/_curry2.js */ "./node_modules/ramda/src/internal/_curry2.js"); // `Const` is a functor that effectively ignores the function given to `map`. 30284 30285 30286var Const = function (x) { 30287 return { 30288 value: x, 30289 'fantasy-land/map': function () { 30290 return this; 30291 } 30292 }; 30293}; 30294/** 30295 * Returns a "view" of the given data structure, determined by the given lens. 30296 * The lens's focus determines which portion of the data structure is visible. 30297 * 30298 * @func 30299 * @memberOf R 30300 * @since v0.16.0 30301 * @category Object 30302 * @typedefn Lens s a = Functor f => (a -> f a) -> s -> f s 30303 * @sig Lens s a -> s -> a 30304 * @param {Lens} lens 30305 * @param {*} x 30306 * @return {*} 30307 * @see R.set, R.over, R.lens, R.lensIndex, R.lensProp, R.lensPath 30308 * @example 30309 * 30310 * const xLens = R.lensProp('x'); 30311 * 30312 * R.view(xLens, {x: 1, y: 2}); //=> 1 30313 * R.view(xLens, {x: 4, y: 2}); //=> 4 30314 */ 30315 30316 30317var view = 30318/*#__PURE__*/ 30319_curry2(function view(lens, x) { 30320 // Using `Const` effectively ignores the setter function of the `lens`, 30321 // leaving the value returned by the getter function unmodified. 30322 return lens(Const)(x).value; 30323}); 30324 30325module.exports = view; 30326 30327/***/ }), 30328
vendor: 1,680 bytes, lines 30329-30377
30329/***/ "./node_modules/ramda/src/when.js": 30330/*!****************************************!*\ 30331 !*** ./node_modules/ramda/src/when.js ***! 30332 \****************************************/ 30333/***/ ((module, __unused_webpack_exports, __webpack_require__) => { 30334 30335var _curry3 = 30336/*#__PURE__*/ 30337__webpack_require__(/*! ./internal/_curry3.js */ "./node_modules/ramda/src/internal/_curry3.js"); 30338/** 30339 * Tests the final argument by passing it to the given predicate function. If 30340 * the predicate is satisfied, the function will return the result of calling 30341 * the `whenTrueFn` function with the same argument. If the predicate is not 30342 * satisfied, the argument is returned as is. 30343 * 30344 * @func 30345 * @memberOf R 30346 * @since v0.18.0 30347 * @category Logic 30348 * @sig (a -> Boolean) -> (a -> b) -> a -> a | b 30349 * @param {Function} pred A predicate function 30350 * @param {Function} whenTrueFn A function to invoke when the `condition` 30351 * evaluates to a truthy value. 30352 * @param {*} x An object to test with the `pred` function and 30353 * pass to `whenTrueFn` if necessary. 30354 * @return {*} Either `x` or the result of applying `x` to `whenTrueFn`. 30355 * @see R.ifElse, R.unless, R.cond 30356 * @example 30357 * 30358 * // truncate :: String -> String 30359 * const truncate = R.when( 30360 * R.propSatisfies(R.gt(R.__, 10), 'length'), 30361 * R.pipe(R.take(10), R.append('â¦'), R.join('')) 30362 * ); 30363 * truncate('12345'); //=> '12345' 30364 * truncate('0123456789ABC'); //=> '0123456789â¦' 30365 */ 30366 30367 30368var when = 30369/*#__PURE__*/ 30370_curry3(function when(pred, whenTrueFn, x) { 30371 return pred(x) ? whenTrueFn(x) : x; 30372}); 30373 30374module.exports = when; 30375 30376/***/ }), 30377
vendor: 1,973 bytes, lines 30378-30443
30378/***/ "./node_modules/ramda/src/where.js": 30379/*!*****************************************!*\ 30380 !*** ./node_modules/ramda/src/where.js ***! 30381 \*****************************************/ 30382/***/ ((module, __unused_webpack_exports, __webpack_require__) => { 30383 30384var _curry2 = 30385/*#__PURE__*/ 30386__webpack_require__(/*! ./internal/_curry2.js */ "./node_modules/ramda/src/internal/_curry2.js"); 30387 30388var _has = 30389/*#__PURE__*/ 30390__webpack_require__(/*! ./internal/_has.js */ "./node_modules/ramda/src/internal/_has.js"); 30391/** 30392 * Takes a spec object and a test object; returns true if the test satisfies 30393 * the spec. Each of the spec's own properties must be a predicate function. 30394 * Each predicate is applied to the value of the corresponding property of the 30395 * test object. `where` returns true if all the predicates return true, false 30396 * otherwise. 30397 * 30398 * `where` is well suited to declaratively expressing constraints for other 30399 * functions such as [`filter`](#filter) and [`find`](#find). 30400 * 30401 * @func 30402 * @memberOf R 30403 * @since v0.1.1 30404 * @category Object 30405 * @sig {String: (* -> Boolean)} -> {String: *} -> Boolean 30406 * @param {Object} spec 30407 * @param {Object} testObj 30408 * @return {Boolean} 30409 * @see R.propSatisfies, R.whereEq 30410 * @example 30411 * 30412 * // pred :: Object -> Boolean 30413 * const pred = R.where({ 30414 * a: R.equals('foo'), 30415 * b: R.complement(R.equals('bar')), 30416 * x: R.gt(R.__, 10), 30417 * y: R.lt(R.__, 20) 30418 * }); 30419 * 30420 * pred({a: 'foo', b: 'xxx', x: 11, y: 19}); //=> true 30421 * pred({a: 'xxx', b: 'xxx', x: 11, y: 19}); //=> false 30422 * pred({a: 'foo', b: 'bar', x: 11, y: 19}); //=> false 30423 * pred({a: 'foo', b: 'xxx', x: 10, y: 19}); //=> false 30424 * pred({a: 'foo', b: 'xxx', x: 11, y: 20}); //=> false 30425 */ 30426 30427 30428var where = 30429/*#__PURE__*/ 30430_curry2(function where(spec, testObj) { 30431 for (var prop in spec) { 30432 if (_has(prop, spec) && !spec[prop](testObj[prop])) { 30433 return false; 30434 } 30435 } 30436 30437 return true; 30438}); 30439 30440module.exports = where; 30441 30442/***/ }), 30443
vendor: 1,961 bytes, lines 30444-30508
30444/***/ "./node_modules/ramda/src/whereAny.js": 30445/*!********************************************!*\ 30446 !*** ./node_modules/ramda/src/whereAny.js ***! 30447 \********************************************/ 30448/***/ ((module, __unused_webpack_exports, __webpack_require__) => { 30449 30450var _curry2 = 30451/*#__PURE__*/ 30452__webpack_require__(/*! ./internal/_curry2.js */ "./node_modules/ramda/src/internal/_curry2.js"); 30453 30454var _has = 30455/*#__PURE__*/ 30456__webpack_require__(/*! ./internal/_has.js */ "./node_modules/ramda/src/internal/_has.js"); 30457/** 30458 * Takes a spec object and a test object; each of the spec's own properties must be a predicate function. 30459 * Each predicate is applied to the value of the corresponding property of the 30460 * test object. `whereAny` returns true if at least one of the predicates return true, 30461 * false otherwise. 30462 * 30463 * `whereAny` is well suited to declaratively expressing constraints for other 30464 * functions such as [`filter`](#filter) and [`find`](#find). 30465 * 30466 * @func 30467 * @memberOf R 30468 * @since v0.28.0 30469 * @category Object 30470 * @sig {String: (* -> Boolean)} -> {String: *} -> Boolean 30471 * @param {Object} spec 30472 * @param {Object} testObj 30473 * @return {Boolean} 30474 * @see R.propSatisfies, R.where 30475 * @example 30476 * 30477 * // pred :: Object -> Boolean 30478 * const pred = R.whereAny({ 30479 * a: R.equals('foo'), 30480 * b: R.complement(R.equals('xxx')), 30481 * x: R.gt(R.__, 10), 30482 * y: R.lt(R.__, 20) 30483 * }); 30484 * 30485 * pred({a: 'foo', b: 'xxx', x: 8, y: 34}); //=> true 30486 * pred({a: 'xxx', b: 'xxx', x: 9, y: 21}); //=> false 30487 * pred({a: 'bar', b: 'xxx', x: 10, y: 20}); //=> false 30488 * pred({a: 'foo', b: 'bar', x: 10, y: 20}); //=> true 30489 * pred({a: 'foo', b: 'xxx', x: 11, y: 20}); //=> true 30490 */ 30491 30492 30493var whereAny = 30494/*#__PURE__*/ 30495_curry2(function whereAny(spec, testObj) { 30496 for (var prop in spec) { 30497 if (_has(prop, spec) && spec[prop](testObj[prop])) { 30498 return true; 30499 } 30500 } 30501 30502 return false; 30503}); 30504 30505module.exports = whereAny; 30506 30507/***/ }), 30508
vendor: 1,729 bytes, lines 30509-30569
30509/***/ "./node_modules/ramda/src/whereEq.js": 30510/*!*******************************************!*\ 30511 !*** ./node_modules/ramda/src/whereEq.js ***! 30512 \*******************************************/ 30513/***/ ((module, __unused_webpack_exports, __webpack_require__) => { 30514 30515var _curry2 = 30516/*#__PURE__*/ 30517__webpack_require__(/*! ./internal/_curry2.js */ "./node_modules/ramda/src/internal/_curry2.js"); 30518 30519var equals = 30520/*#__PURE__*/ 30521__webpack_require__(/*! ./equals.js */ "./node_modules/ramda/src/equals.js"); 30522 30523var map = 30524/*#__PURE__*/ 30525__webpack_require__(/*! ./map.js */ "./node_modules/ramda/src/map.js"); 30526 30527var where = 30528/*#__PURE__*/ 30529__webpack_require__(/*! ./where.js */ "./node_modules/ramda/src/where.js"); 30530/** 30531 * Takes a spec object and a test object; returns true if the test satisfies 30532 * the spec, false otherwise. An object satisfies the spec if, for each of the 30533 * spec's own properties, accessing that property of the object gives the same 30534 * value (in [`R.equals`](#equals) terms) as accessing that property of the 30535 * spec. 30536 * 30537 * `whereEq` is a specialization of [`where`](#where). 30538 * 30539 * @func 30540 * @memberOf R 30541 * @since v0.14.0 30542 * @category Object 30543 * @sig {String: *} -> {String: *} -> Boolean 30544 * @param {Object} spec 30545 * @param {Object} testObj 30546 * @return {Boolean} 30547 * @see R.propEq, R.where 30548 * @example 30549 * 30550 * // pred :: Object -> Boolean 30551 * const pred = R.whereEq({a: 1, b: 2}); 30552 * 30553 * pred({a: 1}); //=> false 30554 * pred({a: 1, b: 2}); //=> true 30555 * pred({a: 1, b: 2, c: 3}); //=> true 30556 * pred({a: 1, b: 1}); //=> false 30557 */ 30558 30559 30560var whereEq = 30561/*#__PURE__*/ 30562_curry2(function whereEq(spec, testObj) { 30563 return where(map(equals, spec), testObj); 30564}); 30565 30566module.exports = whereEq; 30567 30568/***/ }), 30569
vendor: 1,451 bytes, lines 30570-30621
30570/***/ "./node_modules/ramda/src/without.js": 30571/*!*******************************************!*\ 30572 !*** ./node_modules/ramda/src/without.js ***! 30573 \*******************************************/ 30574/***/ ((module, __unused_webpack_exports, __webpack_require__) => { 30575 30576var _includes = 30577/*#__PURE__*/ 30578__webpack_require__(/*! ./internal/_includes.js */ "./node_modules/ramda/src/internal/_includes.js"); 30579 30580var _curry2 = 30581/*#__PURE__*/ 30582__webpack_require__(/*! ./internal/_curry2.js */ "./node_modules/ramda/src/internal/_curry2.js"); 30583 30584var flip = 30585/*#__PURE__*/ 30586__webpack_require__(/*! ./flip.js */ "./node_modules/ramda/src/flip.js"); 30587 30588var reject = 30589/*#__PURE__*/ 30590__webpack_require__(/*! ./reject.js */ "./node_modules/ramda/src/reject.js"); 30591/** 30592 * Returns a new list without values in the first argument. 30593 * [`R.equals`](#equals) is used to determine equality. 30594 * 30595 * Acts as a transducer if a transformer is given in list position. 30596 * 30597 * @func 30598 * @memberOf R 30599 * @since v0.19.0 30600 * @category List 30601 * @sig [a] -> [a] -> [a] 30602 * @param {Array} list1 The values to be removed from `list2`. 30603 * @param {Array} list2 The array to remove values from. 30604 * @return {Array} The new array without values in `list1`. 30605 * @see R.transduce, R.difference, R.remove 30606 * @example 30607 * 30608 * R.without([1, 2], [1, 2, 1, 3, 4]); //=> [3, 4] 30609 */ 30610 30611 30612var without = 30613/*#__PURE__*/ 30614_curry2(function (xs, list) { 30615 return reject(flip(_includes)(xs), list); 30616}); 30617 30618module.exports = without; 30619 30620/***/ }), 30621
vendor: 1,051 bytes, lines 30622-30663
30622/***/ "./node_modules/ramda/src/xor.js": 30623/*!***************************************!*\ 30624 !*** ./node_modules/ramda/src/xor.js ***! 30625 \***************************************/ 30626/***/ ((module, __unused_webpack_exports, __webpack_require__) => { 30627 30628var _curry2 = 30629/*#__PURE__*/ 30630__webpack_require__(/*! ./internal/_curry2.js */ "./node_modules/ramda/src/internal/_curry2.js"); 30631/** 30632 * Exclusive disjunction logical operation. 30633 * Returns `true` if one of the arguments is truthy and the other is falsy. 30634 * Otherwise, it returns `false`. 30635 * 30636 * @func 30637 * @memberOf R 30638 * @since v0.27.1 30639 * @category Logic 30640 * @sig a -> b -> Boolean 30641 * @param {Any} a 30642 * @param {Any} b 30643 * @return {Boolean} true if one of the arguments is truthy and the other is falsy 30644 * @see R.or, R.and 30645 * @example 30646 * 30647 * R.xor(true, true); //=> false 30648 * R.xor(true, false); //=> true 30649 * R.xor(false, true); //=> true 30650 * R.xor(false, false); //=> false 30651 */ 30652 30653 30654var xor = 30655/*#__PURE__*/ 30656_curry2(function xor(a, b) { 30657 return Boolean(!a ^ !b); 30658}); 30659 30660module.exports = xor; 30661 30662/***/ }), 30663
vendor: 1,344 bytes, lines 30664-30720
30664/***/ "./node_modules/ramda/src/xprod.js": 30665/*!*****************************************!*\ 30666 !*** ./node_modules/ramda/src/xprod.js ***! 30667 \*****************************************/ 30668/***/ ((module, __unused_webpack_exports, __webpack_require__) => { 30669 30670var _curry2 = 30671/*#__PURE__*/ 30672__webpack_require__(/*! ./internal/_curry2.js */ "./node_modules/ramda/src/internal/_curry2.js"); 30673/** 30674 * Creates a new list out of the two supplied by creating each possible pair 30675 * from the lists. 30676 * 30677 * @func 30678 * @memberOf R 30679 * @since v0.1.0 30680 * @category List 30681 * @sig [a] -> [b] -> [[a,b]] 30682 * @param {Array} as The first list. 30683 * @param {Array} bs The second list. 30684 * @return {Array} The list made by combining each possible pair from 30685 * `as` and `bs` into pairs (`[a, b]`). 30686 * @example 30687 * 30688 * R.xprod([1, 2], ['a', 'b']); //=> [[1, 'a'], [1, 'b'], [2, 'a'], [2, 'b']] 30689 * @symb R.xprod([a, b], [c, d]) = [[a, c], [a, d], [b, c], [b, d]] 30690 */ 30691 30692 30693var xprod = 30694/*#__PURE__*/ 30695_curry2(function xprod(a, b) { 30696 // = xprodWith(prepend); (takes about 3 times as long...) 30697 var idx = 0; 30698 var ilen = a.length; 30699 var j; 30700 var jlen = b.length; 30701 var result = []; 30702 30703 while (idx < ilen) { 30704 j = 0; 30705 30706 while (j < jlen) { 30707 result[result.length] = [a[idx], b[j]]; 30708 j += 1; 30709 } 30710 30711 idx += 1; 30712 } 30713 30714 return result; 30715}); 30716 30717module.exports = xprod; 30718 30719/***/ }), 30720
vendor: 1,350 bytes, lines 30721-30769
30721/***/ "./node_modules/ramda/src/zip.js": 30722/*!***************************************!*\ 30723 !*** ./node_modules/ramda/src/zip.js ***! 30724 \***************************************/ 30725/***/ ((module, __unused_webpack_exports, __webpack_require__) => { 30726 30727var _curry2 = 30728/*#__PURE__*/ 30729__webpack_require__(/*! ./internal/_curry2.js */ "./node_modules/ramda/src/internal/_curry2.js"); 30730/** 30731 * Creates a new list out of the two supplied by pairing up equally-positioned 30732 * items from both lists. The returned list is truncated to the length of the 30733 * shorter of the two input lists. 30734 * Note: `zip` is equivalent to `zipWith(function(a, b) { return [a, b] })`. 30735 * 30736 * @func 30737 * @memberOf R 30738 * @since v0.1.0 30739 * @category List 30740 * @sig [a] -> [b] -> [[a,b]] 30741 * @param {Array} list1 The first array to consider. 30742 * @param {Array} list2 The second array to consider. 30743 * @return {Array} The list made by pairing up same-indexed elements of `list1` and `list2`. 30744 * @example 30745 * 30746 * R.zip([1, 2, 3], ['a', 'b', 'c']); //=> [[1, 'a'], [2, 'b'], [3, 'c']] 30747 * @symb R.zip([a, b, c], [d, e, f]) = [[a, d], [b, e], [c, f]] 30748 */ 30749 30750 30751var zip = 30752/*#__PURE__*/ 30753_curry2(function zip(a, b) { 30754 var rv = []; 30755 var idx = 0; 30756 var len = Math.min(a.length, b.length); 30757 30758 while (idx < len) { 30759 rv[idx] = [a[idx], b[idx]]; 30760 idx += 1; 30761 } 30762 30763 return rv; 30764}); 30765 30766module.exports = zip; 30767 30768/***/ }), 30769
vendor: 1,307 bytes, lines 30770-30816
30770/***/ "./node_modules/ramda/src/zipObj.js": 30771/*!******************************************!*\ 30772 !*** ./node_modules/ramda/src/zipObj.js ***! 30773 \******************************************/ 30774/***/ ((module, __unused_webpack_exports, __webpack_require__) => { 30775 30776var _curry2 = 30777/*#__PURE__*/ 30778__webpack_require__(/*! ./internal/_curry2.js */ "./node_modules/ramda/src/internal/_curry2.js"); 30779/** 30780 * Creates a new object out of a list of keys and a list of values. 30781 * Key/value pairing is truncated to the length of the shorter of the two lists. 30782 * Note: `zipObj` is equivalent to `pipe(zip, fromPairs)`. 30783 * 30784 * @func 30785 * @memberOf R 30786 * @since v0.3.0 30787 * @category List 30788 * @sig [String] -> [*] -> {String: *} 30789 * @param {Array} keys The array that will be properties on the output object. 30790 * @param {Array} values The list of values on the output object. 30791 * @return {Object} The object made by pairing up same-indexed elements of `keys` and `values`. 30792 * @example 30793 * 30794 * R.zipObj(['a', 'b', 'c'], [1, 2, 3]); //=> {a: 1, b: 2, c: 3} 30795 */ 30796 30797 30798var zipObj = 30799/*#__PURE__*/ 30800_curry2(function zipObj(keys, values) { 30801 var idx = 0; 30802 var len = Math.min(keys.length, values.length); 30803 var out = {}; 30804 30805 while (idx < len) { 30806 out[keys[idx]] = values[idx]; 30807 idx += 1; 30808 } 30809 30810 return out; 30811}); 30812 30813module.exports = zipObj; 30814 30815/***/ }), 30816
vendor: 1,536 bytes, lines 30817-30870
30817/***/ "./node_modules/ramda/src/zipWith.js": 30818/*!*******************************************!*\ 30819 !*** ./node_modules/ramda/src/zipWith.js ***! 30820 \*******************************************/ 30821/***/ ((module, __unused_webpack_exports, __webpack_require__) => { 30822 30823var _curry3 = 30824/*#__PURE__*/ 30825__webpack_require__(/*! ./internal/_curry3.js */ "./node_modules/ramda/src/internal/_curry3.js"); 30826/** 30827 * Creates a new list out of the two supplied by applying the function to each 30828 * equally-positioned pair in the lists. The returned list is truncated to the 30829 * length of the shorter of the two input lists. 30830 * 30831 * @function 30832 * @memberOf R 30833 * @since v0.1.0 30834 * @category List 30835 * @sig ((a, b) -> c) -> [a] -> [b] -> [c] 30836 * @param {Function} fn The function used to combine the two elements into one value. 30837 * @param {Array} list1 The first array to consider. 30838 * @param {Array} list2 The second array to consider. 30839 * @return {Array} The list made by combining same-indexed elements of `list1` and `list2` 30840 * using `fn`. 30841 * @example 30842 * 30843 * const f = (x, y) => { 30844 * // ... 30845 * }; 30846 * R.zipWith(f, [1, 2, 3], ['a', 'b', 'c']); 30847 * //=> [f(1, 'a'), f(2, 'b'), f(3, 'c')] 30848 * @symb R.zipWith(fn, [a, b, c], [d, e, f]) = [fn(a, d), fn(b, e), fn(c, f)] 30849 */ 30850 30851 30852var zipWith = 30853/*#__PURE__*/ 30854_curry3(function zipWith(fn, a, b) { 30855 var rv = []; 30856 var idx = 0; 30857 var len = Math.min(a.length, b.length); 30858 30859 while (idx < len) { 30860 rv[idx] = fn(a[idx], b[idx]); 30861 idx += 1; 30862 } 30863 30864 return rv; 30865}); 30866 30867module.exports = zipWith; 30868 30869/***/ }), 30870
vendor: 7,786 bytes, lines 30871-30994
30871/***/ "./node_modules/react-copy-to-clipboard/lib/Component.js": 30872/*!***************************************************************!*\ 30873 !*** ./node_modules/react-copy-to-clipboard/lib/Component.js ***! 30874 \***************************************************************/ 30875/***/ ((__unused_webpack_module, exports, __webpack_require__) => { 30876 30877"use strict"; 30878 30879 30880function _typeof(obj) { "@babel/helpers - typeof"; return _typeof = "function" == typeof Symbol && "symbol" == typeof Symbol.iterator ? function (obj) { return typeof obj; } : function (obj) { return obj && "function" == typeof Symbol && obj.constructor === Symbol && obj !== Symbol.prototype ? "symbol" : typeof obj; }, _typeof(obj); } 30881 30882Object.defineProperty(exports, "__esModule", ({ 30883 value: true 30884})); 30885exports.CopyToClipboard = void 0; 30886 30887var _react = _interopRequireDefault(__webpack_require__(/*! react */ "./node_modules/react/index.js")); 30888 30889var _copyToClipboard = _interopRequireDefault(__webpack_require__(/*! copy-to-clipboard */ "./node_modules/copy-to-clipboard/index.js")); 30890 30891var _excluded = ["text", "onCopy", "options", "children"]; 30892 30893function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { "default": obj }; } 30894 30895function ownKeys(object, enumerableOnly) { var keys = Object.keys(object); if (Object.getOwnPropertySymbols) { var symbols = Object.getOwnPropertySymbols(object); enumerableOnly && (symbols = symbols.filter(function (sym) { return Object.getOwnPropertyDescriptor(object, sym).enumerable; })), keys.push.apply(keys, symbols); } return keys; } 30896 30897function _objectSpread(target) { for (var i = 1; i < arguments.length; i++) { var source = null != arguments[i] ? arguments[i] : {}; i % 2 ? ownKeys(Object(source), !0).forEach(function (key) { _defineProperty(target, key, source[key]); }) : Object.getOwnPropertyDescriptors ? Object.defineProperties(target, Object.getOwnPropertyDescriptors(source)) : ownKeys(Object(source)).forEach(function (key) { Object.defineProperty(target, key, Object.getOwnPropertyDescriptor(source, key)); }); } return target; } 30898 30899function _objectWithoutProperties(source, excluded) { if (source == null) return {}; var target = _objectWithoutPropertiesLoose(source, excluded); var key, i; if (Object.getOwnPropertySymbols) { var sourceSymbolKeys = Object.getOwnPropertySymbols(source); for (i = 0; i < sourceSymbolKeys.length; i++) { key = sourceSymbolKeys[i]; if (excluded.indexOf(key) >= 0) continue; if (!Object.prototype.propertyIsEnumerable.call(source, key)) continue; target[key] = source[key]; } } return target; } 30900 30901function _objectWithoutPropertiesLoose(source, excluded) { if (source == null) return {}; var target = {}; var sourceKeys = Object.keys(source); var key, i; for (i = 0; i < sourceKeys.length; i++) { key = sourceKeys[i]; if (excluded.indexOf(key) >= 0) continue; target[key] = source[key]; } return target; } 30902 30903function _classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError("Cannot call a class as a function"); } } 30904 30905function _defineProperties(target, props) { for (var i = 0; i < props.length; i++) { var descriptor = props[i]; descriptor.enumerable = descriptor.enumerable || false; descriptor.configurable = true; if ("value" in descriptor) descriptor.writable = true; Object.defineProperty(target, descriptor.key, descriptor); } } 30906 30907function _createClass(Constructor, protoProps, staticProps) { if (protoProps) _defineProperties(Constructor.prototype, protoProps); if (staticProps) _defineProperties(Constructor, staticProps); Object.defineProperty(Constructor, "prototype", { writable: false }); return Constructor; } 30908 30909function _inherits(subClass, superClass) { if (typeof superClass !== "function" && superClass !== null) { throw new TypeError("Super expression must either be null or a function"); } subClass.prototype = Object.create(superClass && superClass.prototype, { constructor: { value: subClass, writable: true, configurable: true } }); Object.defineProperty(subClass, "prototype", { writable: false }); if (superClass) _setPrototypeOf(subClass, superClass); } 30910 30911function _setPrototypeOf(o, p) { _setPrototypeOf = Object.setPrototypeOf || function _setPrototypeOf(o, p) { o.__proto__ = p; return o; }; return _setPrototypeOf(o, p); } 30912 30913function _createSuper(Derived) { var hasNativeReflectConstruct = _isNativeReflectConstruct(); return function _createSuperInternal() { var Super = _getPrototypeOf(Derived), result; if (hasNativeReflectConstruct) { var NewTarget = _getPrototypeOf(this).constructor; result = Reflect.construct(Super, arguments, NewTarget); } else { result = Super.apply(this, arguments); } return _possibleConstructorReturn(this, result); }; } 30914 30915function _possibleConstructorReturn(self, call) { if (call && (_typeof(call) === "object" || typeof call === "function")) { return call; } else if (call !== void 0) { throw new TypeError("Derived constructors may only return object or undefined"); } return _assertThisInitialized(self); } 30916 30917function _assertThisInitialized(self) { if (self === void 0) { throw new ReferenceError("this hasn't been initialised - super() hasn't been called"); } return self; } 30918 30919function _isNativeReflectConstruct() { if (typeof Reflect === "undefined" || !Reflect.construct) return false; if (Reflect.construct.sham) return false; if (typeof Proxy === "function") return true; try { Boolean.prototype.valueOf.call(Reflect.construct(Boolean, [], function () {})); return true; } catch (e) { return false; } } 30920 30921function _getPrototypeOf(o) { _getPrototypeOf = Object.setPrototypeOf ? Object.getPrototypeOf : function _getPrototypeOf(o) { return o.__proto__ || Object.getPrototypeOf(o); }; return _getPrototypeOf(o); } 30922 30923function _defineProperty(obj, key, value) { if (key in obj) { Object.defineProperty(obj, key, { value: value, enumerable: true, configurable: true, writable: true }); } else { obj[key] = value; } return obj; } 30924 30925var CopyToClipboard = /*#__PURE__*/function (_React$PureComponent) { 30926 _inherits(CopyToClipboard, _React$PureComponent); 30927 30928 var _super = _createSuper(CopyToClipboard); 30929 30930 function CopyToClipboard() { 30931 var _this; 30932 30933 _classCallCheck(this, CopyToClipboard); 30934 30935 for (var _len = arguments.length, args = new Array(_len), _key = 0; _key < _len; _key++) { 30936 args[_key] = arguments[_key]; 30937 } 30938 30939 _this = _super.call.apply(_super, [this].concat(args)); 30940 30941 _defineProperty(_assertThisInitialized(_this), "onClick", function (event) { 30942 var _this$props = _this.props, 30943 text = _this$props.text, 30944 onCopy = _this$props.onCopy, 30945 children = _this$props.children, 30946 options = _this$props.options; 30947 30948 var elem = _react["default"].Children.only(children); 30949 30950 var result = (0, _copyToClipboard["default"])(text, options); 30951 30952 if (onCopy) { 30953 onCopy(text, result); 30954 } // Bypass onClick if it was present 30955 30956 30957 if (elem && elem.props && typeof elem.props.onClick === 'function') { 30958 elem.props.onClick(event); 30959 } 30960 }); 30961 30962 return _this; 30963 } 30964 30965 _createClass(CopyToClipboard, [{ 30966 key: "render", 30967 value: function render() { 30968 var _this$props2 = this.props, 30969 _text = _this$props2.text, 30970 _onCopy = _this$props2.onCopy, 30971 _options = _this$props2.options, 30972 children = _this$props2.children, 30973 props = _objectWithoutProperties(_this$props2, _excluded); 30974 30975 var elem = _react["default"].Children.only(children); 30976 30977 return /*#__PURE__*/_react["default"].cloneElement(elem, _objectSpread(_objectSpread({}, props), {}, { 30978 onClick: this.onClick 30979 })); 30980 } 30981 }]); 30982 30983 return CopyToClipboard; 30984}(_react["default"].PureComponent); 30985 30986exports.CopyToClipboard = CopyToClipboard; 30987 30988_defineProperty(CopyToClipboard, "defaultProps", { 30989 onCopy: undefined, 30990 options: undefined 30991}); 30992 30993/***/ }), 30994
vendor: 600 bytes, lines 30995-31011
30995/***/ "./node_modules/react-copy-to-clipboard/lib/index.js": 30996/*!***********************************************************!*\ 30997 !*** ./node_modules/react-copy-to-clipboard/lib/index.js ***! 30998 \***********************************************************/ 30999/***/ ((module, __unused_webpack_exports, __webpack_require__) => { 31000 31001"use strict"; 31002 31003 31004var _require = __webpack_require__(/*! ./Component */ "./node_modules/react-copy-to-clipboard/lib/Component.js"), 31005 CopyToClipboard = _require.CopyToClipboard; 31006 31007CopyToClipboard.CopyToClipboard = CopyToClipboard; 31008module.exports = CopyToClipboard; 31009 31010/***/ }), 31011
vendor: 894,764 bytes, lines 31012-57279
31012/***/ "./node_modules/react-dom/cjs/react-dom.development.js": 31013/*!*************************************************************!*\ 31014 !*** ./node_modules/react-dom/cjs/react-dom.development.js ***! 31015 \*************************************************************/ 31016/***/ ((__unused_webpack_module, exports, __webpack_require__) => { 31017 31018"use strict"; 31019/** @license React v17.0.2 31020 * react-dom.development.js 31021 * 31022 * Copyright (c) Facebook, Inc. and its affiliates. 31023 * 31024 * This source code is licensed under the MIT license found in the 31025 * LICENSE file in the root directory of this source tree. 31026 */ 31027 31028 31029 31030if (true) { 31031 (function() { 31032'use strict'; 31033 31034var React = __webpack_require__(/*! react */ "./node_modules/react/index.js"); 31035var _assign = __webpack_require__(/*! object-assign */ "./node_modules/object-assign/index.js"); 31036var Scheduler = __webpack_require__(/*! scheduler */ "./node_modules/scheduler/index.js"); 31037var tracing = __webpack_require__(/*! scheduler/tracing */ "./node_modules/scheduler/tracing.js"); 31038 31039var ReactSharedInternals = React.__SECRET_INTERNALS_DO_NOT_USE_OR_YOU_WILL_BE_FIRED; 31040 31041// by calls to these methods by a Babel plugin. 31042// 31043// In PROD (or in packages without access to React internals), 31044// they are left as they are instead. 31045 31046function warn(format) { 31047 { 31048 for (var _len = arguments.length, args = new Array(_len > 1 ? _len - 1 : 0), _key = 1; _key < _len; _key++) { 31049 args[_key - 1] = arguments[_key]; 31050 } 31051 31052 printWarning('warn', format, args); 31053 } 31054} 31055function error(format) { 31056 { 31057 for (var _len2 = arguments.length, args = new Array(_len2 > 1 ? _len2 - 1 : 0), _key2 = 1; _key2 < _len2; _key2++) { 31058 args[_key2 - 1] = arguments[_key2]; 31059 } 31060 31061 printWarning('error', format, args); 31062 } 31063} 31064 31065function printWarning(level, format, args) { 31066 // When changing this logic, you might want to also 31067 // update consoleWithStackDev.www.js as well. 31068 { 31069 var ReactDebugCurrentFrame = ReactSharedInternals.ReactDebugCurrentFrame; 31070 var stack = ReactDebugCurrentFrame.getStackAddendum(); 31071 31072 if (stack !== '') { 31073 format += '%s'; 31074 args = args.concat([stack]); 31075 } 31076 31077 var argsWithFormat = args.map(function (item) { 31078 return '' + item; 31079 }); // Careful: RN currently depends on this prefix 31080 31081 argsWithFormat.unshift('Warning: ' + format); // We intentionally don't use spread (or .apply) directly because it 31082 // breaks IE9: https://github.com/facebook/react/issues/13610 31083 // eslint-disable-next-line react-internal/no-production-logging 31084 31085 Function.prototype.apply.call(console[level], console, argsWithFormat); 31086 } 31087} 31088 31089if (!React) { 31090 { 31091 throw Error( "ReactDOM was loaded before React. Make sure you load the React package before loading ReactDOM." ); 31092 } 31093} 31094 31095var FunctionComponent = 0; 31096var ClassComponent = 1; 31097var IndeterminateComponent = 2; // Before we know whether it is function or class 31098 31099var HostRoot = 3; // Root of a host tree. Could be nested inside another node. 31100 31101var HostPortal = 4; // A subtree. Could be an entry point to a different renderer. 31102 31103var HostComponent = 5; 31104var HostText = 6; 31105var Fragment = 7; 31106var Mode = 8; 31107var ContextConsumer = 9; 31108var ContextProvider = 10; 31109var ForwardRef = 11; 31110var Profiler = 12; 31111var SuspenseComponent = 13; 31112var MemoComponent = 14; 31113var SimpleMemoComponent = 15; 31114var LazyComponent = 16; 31115var IncompleteClassComponent = 17; 31116var DehydratedFragment = 18; 31117var SuspenseListComponent = 19; 31118var FundamentalComponent = 20; 31119var ScopeComponent = 21; 31120var Block = 22; 31121var OffscreenComponent = 23; 31122var LegacyHiddenComponent = 24; 31123 31124// Filter certain DOM attributes (e.g. src, href) if their values are empty strings. 31125 31126var enableProfilerTimer = true; // Record durations for commit and passive effects phases. 31127 31128var enableFundamentalAPI = false; // Experimental Scope support. 31129var enableNewReconciler = false; // Errors that are thrown while unmounting (or after in the case of passive effects) 31130var warnAboutStringRefs = false; 31131 31132var allNativeEvents = new Set(); 31133/** 31134 * Mapping from registration name to event name 31135 */ 31136 31137 31138var registrationNameDependencies = {}; 31139/** 31140 * Mapping from lowercase registration names to the properly cased version, 31141 * used to warn in the case of missing event handlers. Available 31142 * only in true. 31143 * @type {Object} 31144 */ 31145 31146var possibleRegistrationNames = {} ; // Trust the developer to only use possibleRegistrationNames in true 31147 31148function registerTwoPhaseEvent(registrationName, dependencies) { 31149 registerDirectEvent(registrationName, dependencies); 31150 registerDirectEvent(registrationName + 'Capture', dependencies); 31151} 31152function registerDirectEvent(registrationName, dependencies) { 31153 { 31154 if (registrationNameDependencies[registrationName]) { 31155 error('EventRegistry: More than one plugin attempted to publish the same ' + 'registration name, `%s`.', registrationName); 31156 } 31157 } 31158 31159 registrationNameDependencies[registrationName] = dependencies; 31160 31161 { 31162 var lowerCasedName = registrationName.toLowerCase(); 31163 possibleRegistrationNames[lowerCasedName] = registrationName; 31164 31165 if (registrationName === 'onDoubleClick') { 31166 possibleRegistrationNames.ondblclick = registrationName; 31167 } 31168 } 31169 31170 for (var i = 0; i < dependencies.length; i++) { 31171 allNativeEvents.add(dependencies[i]); 31172 } 31173} 31174 31175var canUseDOM = !!(typeof window !== 'undefined' && typeof window.document !== 'undefined' && typeof window.document.createElement !== 'undefined'); 31176 31177// A reserved attribute. 31178// It is handled by React separately and shouldn't be written to the DOM. 31179var RESERVED = 0; // A simple string attribute. 31180// Attributes that aren't in the filter are presumed to have this type. 31181 31182var STRING = 1; // A string attribute that accepts booleans in React. In HTML, these are called 31183// "enumerated" attributes with "true" and "false" as possible values. 31184// When true, it should be set to a "true" string. 31185// When false, it should be set to a "false" string. 31186 31187var BOOLEANISH_STRING = 2; // A real boolean attribute. 31188// When true, it should be present (set either to an empty string or its name). 31189// When false, it should be omitted. 31190 31191var BOOLEAN = 3; // An attribute that can be used as a flag as well as with a value. 31192// When true, it should be present (set either to an empty string or its name). 31193// When false, it should be omitted. 31194// For any other value, should be present with that value. 31195 31196var OVERLOADED_BOOLEAN = 4; // An attribute that must be numeric or parse as a numeric. 31197// When falsy, it should be removed. 31198 31199var NUMERIC = 5; // An attribute that must be positive numeric or parse as a positive numeric. 31200// When falsy, it should be removed. 31201 31202var POSITIVE_NUMERIC = 6; 31203 31204/* eslint-disable max-len */ 31205var ATTRIBUTE_NAME_START_CHAR = ":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"; 31206/* eslint-enable max-len */ 31207 31208var ATTRIBUTE_NAME_CHAR = ATTRIBUTE_NAME_START_CHAR + "\\-.0-9\\u00B7\\u0300-\\u036F\\u203F-\\u2040"; 31209var ROOT_ATTRIBUTE_NAME = 'data-reactroot'; 31210var VALID_ATTRIBUTE_NAME_REGEX = new RegExp('^[' + ATTRIBUTE_NAME_START_CHAR + '][' + ATTRIBUTE_NAME_CHAR + ']*$'); 31211var hasOwnProperty = Object.prototype.hasOwnProperty; 31212var illegalAttributeNameCache = {}; 31213var validatedAttributeNameCache = {}; 31214function isAttributeNameSafe(attributeName) { 31215 if (hasOwnProperty.call(validatedAttributeNameCache, attributeName)) { 31216 return true; 31217 } 31218 31219 if (hasOwnProperty.call(illegalAttributeNameCache, attributeName)) { 31220 return false; 31221 } 31222 31223 if (VALID_ATTRIBUTE_NAME_REGEX.test(attributeName)) { 31224 validatedAttributeNameCache[attributeName] = true; 31225 return true; 31226 } 31227 31228 illegalAttributeNameCache[attributeName] = true; 31229 31230 { 31231 error('Invalid attribute name: `%s`', attributeName); 31232 } 31233 31234 return false; 31235} 31236function shouldIgnoreAttribute(name, propertyInfo, isCustomComponentTag) { 31237 if (propertyInfo !== null) { 31238 return propertyInfo.type === RESERVED; 31239 } 31240 31241 if (isCustomComponentTag) { 31242 return false; 31243 } 31244 31245 if (name.length > 2 && (name[0] === 'o' || name[0] === 'O') && (name[1] === 'n' || name[1] === 'N')) { 31246 return true; 31247 } 31248 31249 return false; 31250} 31251function shouldRemoveAttributeWithWarning(name, value, propertyInfo, isCustomComponentTag) { 31252 if (propertyInfo !== null && propertyInfo.type === RESERVED) { 31253 return false; 31254 } 31255 31256 switch (typeof value) { 31257 case 'function': // $FlowIssue symbol is perfectly valid here 31258 31259 case 'symbol': 31260 // eslint-disable-line 31261 return true; 31262 31263 case 'boolean': 31264 { 31265 if (isCustomComponentTag) { 31266 return false; 31267 } 31268 31269 if (propertyInfo !== null) { 31270 return !propertyInfo.acceptsBooleans; 31271 } else { 31272 var prefix = name.toLowerCase().slice(0, 5); 31273 return prefix !== 'data-' && prefix !== 'aria-'; 31274 } 31275 } 31276 31277 default: 31278 return false; 31279 } 31280} 31281function shouldRemoveAttribute(name, value, propertyInfo, isCustomComponentTag) { 31282 if (value === null || typeof value === 'undefined') { 31283 return true; 31284 } 31285 31286 if (shouldRemoveAttributeWithWarning(name, value, propertyInfo, isCustomComponentTag)) { 31287 return true; 31288 } 31289 31290 if (isCustomComponentTag) { 31291 return false; 31292 } 31293 31294 if (propertyInfo !== null) { 31295 31296 switch (propertyInfo.type) { 31297 case BOOLEAN: 31298 return !value; 31299 31300 case OVERLOADED_BOOLEAN: 31301 return value === false; 31302 31303 case NUMERIC: 31304 return isNaN(value); 31305 31306 case POSITIVE_NUMERIC: 31307 return isNaN(value) || value < 1; 31308 } 31309 } 31310 31311 return false; 31312} 31313function getPropertyInfo(name) { 31314 return properties.hasOwnProperty(name) ? properties[name] : null; 31315} 31316 31317function PropertyInfoRecord(name, type, mustUseProperty, attributeName, attributeNamespace, sanitizeURL, removeEmptyString) { 31318 this.acceptsBooleans = type === BOOLEANISH_STRING || type === BOOLEAN || type === OVERLOADED_BOOLEAN; 31319 this.attributeName = attributeName; 31320 this.attributeNamespace = attributeNamespace; 31321 this.mustUseProperty = mustUseProperty; 31322 this.propertyName = name; 31323 this.type = type; 31324 this.sanitizeURL = sanitizeURL; 31325 this.removeEmptyString = removeEmptyString; 31326} // When adding attributes to this list, be sure to also add them to 31327// the `possibleStandardNames` module to ensure casing and incorrect 31328// name warnings. 31329 31330 31331var properties = {}; // These props are reserved by React. They shouldn't be written to the DOM. 31332 31333var reservedProps = ['children', 'dangerouslySetInnerHTML', // TODO: This prevents the assignment of defaultValue to regular 31334// elements (not just inputs). Now that ReactDOMInput assigns to the 31335// defaultValue property -- do we need this? 31336'defaultValue', 'defaultChecked', 'innerHTML', 'suppressContentEditableWarning', 'suppressHydrationWarning', 'style']; 31337reservedProps.forEach(function (name) { 31338 properties[name] = new PropertyInfoRecord(name, RESERVED, false, // mustUseProperty 31339 name, // attributeName 31340 null, // attributeNamespace 31341 false, // sanitizeURL 31342 false); 31343}); // A few React string attributes have a different name. 31344// This is a mapping from React prop names to the attribute names. 31345 31346[['acceptCharset', 'accept-charset'], ['className', 'class'], ['htmlFor', 'for'], ['httpEquiv', 'http-equiv']].forEach(function (_ref) { 31347 var name = _ref[0], 31348 attributeName = _ref[1]; 31349 properties[name] = new PropertyInfoRecord(name, STRING, false, // mustUseProperty 31350 attributeName, // attributeName 31351 null, // attributeNamespace 31352 false, // sanitizeURL 31353 false); 31354}); // These are "enumerated" HTML attributes that accept "true" and "false". 31355// In React, we let users pass `true` and `false` even though technically 31356// these aren't boolean attributes (they are coerced to strings). 31357 31358['contentEditable', 'draggable', 'spellCheck', 'value'].forEach(function (name) { 31359 properties[name] = new PropertyInfoRecord(name, BOOLEANISH_STRING, false, // mustUseProperty 31360 name.toLowerCase(), // attributeName 31361 null, // attributeNamespace 31362 false, // sanitizeURL 31363 false); 31364}); // These are "enumerated" SVG attributes that accept "true" and "false". 31365// In React, we let users pass `true` and `false` even though technically 31366// these aren't boolean attributes (they are coerced to strings). 31367// Since these are SVG attributes, their attribute names are case-sensitive. 31368 31369['autoReverse', 'externalResourcesRequired', 'focusable', 'preserveAlpha'].forEach(function (name) { 31370 properties[name] = new PropertyInfoRecord(name, BOOLEANISH_STRING, false, // mustUseProperty 31371 name, // attributeName 31372 null, // attributeNamespace 31373 false, // sanitizeURL 31374 false); 31375}); // These are HTML boolean attributes. 31376 31377['allowFullScreen', 'async', // Note: there is a special case that prevents it from being written to the DOM 31378// on the client side because the browsers are inconsistent. Instead we call focus(). 31379'autoFocus', 'autoPlay', 'controls', 'default', 'defer', 'disabled', 'disablePictureInPicture', 'disableRemotePlayback', 'formNoValidate', 'hidden', 'loop', 'noModule', 'noValidate', 'open', 'playsInline', 'readOnly', 'required', 'reversed', 'scoped', 'seamless', // Microdata 31380'itemScope'].forEach(function (name) { 31381 properties[name] = new PropertyInfoRecord(name, BOOLEAN, false, // mustUseProperty 31382 name.toLowerCase(), // attributeName 31383 null, // attributeNamespace 31384 false, // sanitizeURL 31385 false); 31386}); // These are the few React props that we set as DOM properties 31387// rather than attributes. These are all booleans. 31388 31389['checked', // Note: `option.selected` is not updated if `select.multiple` is 31390// disabled with `removeAttribute`. We have special logic for handling this. 31391'multiple', 'muted', 'selected' // NOTE: if you add a camelCased prop to this list, 31392// you'll need to set attributeName to name.toLowerCase() 31393// instead in the assignment below. 31394].forEach(function (name) { 31395 properties[name] = new PropertyInfoRecord(name, BOOLEAN, true, // mustUseProperty 31396 name, // attributeName 31397 null, // attributeNamespace 31398 false, // sanitizeURL 31399 false); 31400}); // These are HTML attributes that are "overloaded booleans": they behave like 31401// booleans, but can also accept a string value. 31402 31403['capture', 'download' // NOTE: if you add a camelCased prop to this list, 31404// you'll need to set attributeName to name.toLowerCase() 31405// instead in the assignment below. 31406].forEach(function (name) { 31407 properties[name] = new PropertyInfoRecord(name, OVERLOADED_BOOLEAN, false, // mustUseProperty 31408 name, // attributeName 31409 null, // attributeNamespace 31410 false, // sanitizeURL 31411 false); 31412}); // These are HTML attributes that must be positive numbers. 31413 31414['cols', 'rows', 'size', 'span' // NOTE: if you add a camelCased prop to this list, 31415// you'll need to set attributeName to name.toLowerCase() 31416// instead in the assignment below. 31417].forEach(function (name) { 31418 properties[name] = new PropertyInfoRecord(name, POSITIVE_NUMERIC, false, // mustUseProperty 31419 name, // attributeName 31420 null, // attributeNamespace 31421 false, // sanitizeURL 31422 false); 31423}); // These are HTML attributes that must be numbers. 31424 31425['rowSpan', 'start'].forEach(function (name) { 31426 properties[name] = new PropertyInfoRecord(name, NUMERIC, false, // mustUseProperty 31427 name.toLowerCase(), // attributeName 31428 null, // attributeNamespace 31429 false, // sanitizeURL 31430 false); 31431}); 31432var CAMELIZE = /[\-\:]([a-z])/g; 31433 31434var capitalize = function (token) { 31435 return token[1].toUpperCase(); 31436}; // This is a list of all SVG attributes that need special casing, namespacing, 31437// or boolean value assignment. Regular attributes that just accept strings 31438// and have the same names are omitted, just like in the HTML attribute filter. 31439// Some of these attributes can be hard to find. This list was created by 31440// scraping the MDN documentation. 31441 31442 31443['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' // NOTE: if you add a camelCased prop to this list, 31444// you'll need to set attributeName to name.toLowerCase() 31445// instead in the assignment below. 31446].forEach(function (attributeName) { 31447 var name = attributeName.replace(CAMELIZE, capitalize); 31448 properties[name] = new PropertyInfoRecord(name, STRING, false, // mustUseProperty 31449 attributeName, null, // attributeNamespace 31450 false, // sanitizeURL 31451 false); 31452}); // String SVG attributes with the xlink namespace. 31453 31454['xlink:actuate', 'xlink:arcrole', 'xlink:role', 'xlink:show', 'xlink:title', 'xlink:type' // NOTE: if you add a camelCased prop to this list, 31455// you'll need to set attributeName to name.toLowerCase() 31456// instead in the assignment below. 31457].forEach(function (attributeName) { 31458 var name = attributeName.replace(CAMELIZE, capitalize); 31459 properties[name] = new PropertyInfoRecord(name, STRING, false, // mustUseProperty 31460 attributeName, 'http://www.w3.org/1999/xlink', false, // sanitizeURL 31461 false); 31462}); // String SVG attributes with the xml namespace. 31463 31464['xml:base', 'xml:lang', 'xml:space' // NOTE: if you add a camelCased prop to this list, 31465// you'll need to set attributeName to name.toLowerCase() 31466// instead in the assignment below. 31467].forEach(function (attributeName) { 31468 var name = attributeName.replace(CAMELIZE, capitalize); 31469 properties[name] = new PropertyInfoRecord(name, STRING, false, // mustUseProperty 31470 attributeName, 'http://www.w3.org/XML/1998/namespace', false, // sanitizeURL 31471 false); 31472}); // These attribute exists both in HTML and SVG. 31473// The attribute name is case-sensitive in SVG so we can't just use 31474// the React name like we do for attributes that exist only in HTML. 31475 31476['tabIndex', 'crossOrigin'].forEach(function (attributeName) { 31477 properties[attributeName] = new PropertyInfoRecord(attributeName, STRING, false, // mustUseProperty 31478 attributeName.toLowerCase(), // attributeName 31479 null, // attributeNamespace 31480 false, // sanitizeURL 31481 false); 31482}); // These attributes accept URLs. These must not allow javascript: URLS. 31483// These will also need to accept Trusted Types object in the future. 31484 31485var xlinkHref = 'xlinkHref'; 31486properties[xlinkHref] = new PropertyInfoRecord('xlinkHref', STRING, false, // mustUseProperty 31487'xlink:href', 'http://www.w3.org/1999/xlink', true, // sanitizeURL 31488false); 31489['src', 'href', 'action', 'formAction'].forEach(function (attributeName) { 31490 properties[attributeName] = new PropertyInfoRecord(attributeName, STRING, false, // mustUseProperty 31491 attributeName.toLowerCase(), // attributeName 31492 null, // attributeNamespace 31493 true, // sanitizeURL 31494 true); 31495}); 31496 31497// and any newline or tab are filtered out as if they're not part of the URL. 31498// https://url.spec.whatwg.org/#url-parsing 31499// Tab or newline are defined as \r\n\t: 31500// https://infra.spec.whatwg.org/#ascii-tab-or-newline 31501// A C0 control is a code point in the range \u0000 NULL to \u001F 31502// INFORMATION SEPARATOR ONE, inclusive: 31503// https://infra.spec.whatwg.org/#c0-control-or-space 31504 31505/* eslint-disable max-len */ 31506 31507var isJavaScriptProtocol = /^[\u0000-\u001F ]*j[\r\n\t]*a[\r\n\t]*v[\r\n\t]*a[\r\n\t]*s[\r\n\t]*c[\r\n\t]*r[\r\n\t]*i[\r\n\t]*p[\r\n\t]*t[\r\n\t]*\:/i; 31508var didWarn = false; 31509 31510function sanitizeURL(url) { 31511 { 31512 if (!didWarn && isJavaScriptProtocol.test(url)) { 31513 didWarn = true; 31514 31515 error('A future version of React will block javascript: URLs as a security precaution. ' + 'Use event handlers instead if you can. If you need to generate unsafe HTML try ' + 'using dangerouslySetInnerHTML instead. React was passed %s.', JSON.stringify(url)); 31516 } 31517 } 31518} 31519 31520/** 31521 * Get the value for a property on a node. Only used in DEV for SSR validation. 31522 * The "expected" argument is used as a hint of what the expected value is. 31523 * Some properties have multiple equivalent values. 31524 */ 31525function getValueForProperty(node, name, expected, propertyInfo) { 31526 { 31527 if (propertyInfo.mustUseProperty) { 31528 var propertyName = propertyInfo.propertyName; 31529 return node[propertyName]; 31530 } else { 31531 if ( propertyInfo.sanitizeURL) { 31532 // If we haven't fully disabled javascript: URLs, and if 31533 // the hydration is successful of a javascript: URL, we 31534 // still want to warn on the client. 31535 sanitizeURL('' + expected); 31536 } 31537 31538 var attributeName = propertyInfo.attributeName; 31539 var stringValue = null; 31540 31541 if (propertyInfo.type === OVERLOADED_BOOLEAN) { 31542 if (node.hasAttribute(attributeName)) { 31543 var value = node.getAttribute(attributeName); 31544 31545 if (value === '') { 31546 return true; 31547 } 31548 31549 if (shouldRemoveAttribute(name, expected, propertyInfo, false)) { 31550 return value; 31551 } 31552 31553 if (value === '' + expected) { 31554 return expected; 31555 } 31556 31557 return value; 31558 } 31559 } else if (node.hasAttribute(attributeName)) { 31560 if (shouldRemoveAttribute(name, expected, propertyInfo, false)) { 31561 // We had an attribute but shouldn't have had one, so read it 31562 // for the error message. 31563 return node.getAttribute(attributeName); 31564 } 31565 31566 if (propertyInfo.type === BOOLEAN) { 31567 // If this was a boolean, it doesn't matter what the value is 31568 // the fact that we have it is the same as the expected. 31569 return expected; 31570 } // Even if this property uses a namespace we use getAttribute 31571 // because we assume its namespaced name is the same as our config. 31572 // To use getAttributeNS we need the local name which we don't have 31573 // in our config atm. 31574 31575 31576 stringValue = node.getAttribute(attributeName); 31577 } 31578 31579 if (shouldRemoveAttribute(name, expected, propertyInfo, false)) { 31580 return stringValue === null ? expected : stringValue; 31581 } else if (stringValue === '' + expected) { 31582 return expected; 31583 } else { 31584 return stringValue; 31585 } 31586 } 31587 } 31588} 31589/** 31590 * Get the value for a attribute on a node. Only used in DEV for SSR validation. 31591 * The third argument is used as a hint of what the expected value is. Some 31592 * attributes have multiple equivalent values. 31593 */ 31594 31595function getValueForAttribute(node, name, expected) { 31596 { 31597 if (!isAttributeNameSafe(name)) { 31598 return; 31599 } // If the object is an opaque reference ID, it's expected that 31600 // the next prop is different than the server value, so just return 31601 // expected 31602 31603 31604 if (isOpaqueHydratingObject(expected)) { 31605 return expected; 31606 } 31607 31608 if (!node.hasAttribute(name)) { 31609 return expected === undefined ? undefined : null; 31610 } 31611 31612 var value = node.getAttribute(name); 31613 31614 if (value === '' + expected) { 31615 return expected; 31616 } 31617 31618 return value; 31619 } 31620} 31621/** 31622 * Sets the value for a property on a node. 31623 * 31624 * @param {DOMElement} node 31625 * @param {string} name 31626 * @param {*} value 31627 */ 31628 31629function setValueForProperty(node, name, value, isCustomComponentTag) { 31630 var propertyInfo = getPropertyInfo(name); 31631 31632 if (shouldIgnoreAttribute(name, propertyInfo, isCustomComponentTag)) { 31633 return; 31634 } 31635 31636 if (shouldRemoveAttribute(name, value, propertyInfo, isCustomComponentTag)) { 31637 value = null; 31638 } // If the prop isn't in the special list, treat it as a simple attribute. 31639 31640 31641 if (isCustomComponentTag || propertyInfo === null) { 31642 if (isAttributeNameSafe(name)) { 31643 var _attributeName = name; 31644 31645 if (value === null) { 31646 node.removeAttribute(_attributeName); 31647 } else { 31648 node.setAttribute(_attributeName, '' + value); 31649 } 31650 } 31651 31652 return; 31653 } 31654 31655 var mustUseProperty = propertyInfo.mustUseProperty; 31656 31657 if (mustUseProperty) { 31658 var propertyName = propertyInfo.propertyName; 31659 31660 if (value === null) { 31661 var type = propertyInfo.type; 31662 node[propertyName] = type === BOOLEAN ? false : ''; 31663 } else { 31664 // Contrary to `setAttribute`, object properties are properly 31665 // `toString`ed by IE8/9. 31666 node[propertyName] = value; 31667 } 31668 31669 return; 31670 } // The rest are treated as attributes with special cases. 31671 31672 31673 var attributeName = propertyInfo.attributeName, 31674 attributeNamespace = propertyInfo.attributeNamespace; 31675 31676 if (value === null) { 31677 node.removeAttribute(attributeName); 31678 } else { 31679 var _type = propertyInfo.type; 31680 var attributeValue; 31681 31682 if (_type === BOOLEAN || _type === OVERLOADED_BOOLEAN && value === true) { 31683 // If attribute type is boolean, we know for sure it won't be an execution sink 31684 // and we won't require Trusted Type here. 31685 attributeValue = ''; 31686 } else { 31687 // `setAttribute` with objects becomes only `[object]` in IE8/9, 31688 // ('' + value) makes it output the correct toString()-value. 31689 { 31690 attributeValue = '' + value; 31691 } 31692 31693 if (propertyInfo.sanitizeURL) { 31694 sanitizeURL(attributeValue.toString()); 31695 } 31696 } 31697 31698 if (attributeNamespace) { 31699 node.setAttributeNS(attributeNamespace, attributeName, attributeValue); 31700 } else { 31701 node.setAttribute(attributeName, attributeValue); 31702 } 31703 } 31704} 31705 31706// ATTENTION 31707// When adding new symbols to this file, 31708// Please consider also adding to 'react-devtools-shared/src/backend/ReactSymbols' 31709// The Symbol used to tag the ReactElement-like types. If there is no native Symbol 31710// nor polyfill, then a plain number is used for performance. 31711var REACT_ELEMENT_TYPE = 0xeac7; 31712var REACT_PORTAL_TYPE = 0xeaca; 31713var REACT_FRAGMENT_TYPE = 0xeacb; 31714var REACT_STRICT_MODE_TYPE = 0xeacc; 31715var REACT_PROFILER_TYPE = 0xead2; 31716var REACT_PROVIDER_TYPE = 0xeacd; 31717var REACT_CONTEXT_TYPE = 0xeace; 31718var REACT_FORWARD_REF_TYPE = 0xead0; 31719var REACT_SUSPENSE_TYPE = 0xead1; 31720var REACT_SUSPENSE_LIST_TYPE = 0xead8; 31721var REACT_MEMO_TYPE = 0xead3; 31722var REACT_LAZY_TYPE = 0xead4; 31723var REACT_BLOCK_TYPE = 0xead9; 31724var REACT_SERVER_BLOCK_TYPE = 0xeada; 31725var REACT_FUNDAMENTAL_TYPE = 0xead5; 31726var REACT_SCOPE_TYPE = 0xead7; 31727var REACT_OPAQUE_ID_TYPE = 0xeae0; 31728var REACT_DEBUG_TRACING_MODE_TYPE = 0xeae1; 31729var REACT_OFFSCREEN_TYPE = 0xeae2; 31730var REACT_LEGACY_HIDDEN_TYPE = 0xeae3; 31731 31732if (typeof Symbol === 'function' && Symbol.for) { 31733 var symbolFor = Symbol.for; 31734 REACT_ELEMENT_TYPE = symbolFor('react.element'); 31735 REACT_PORTAL_TYPE = symbolFor('react.portal'); 31736 REACT_FRAGMENT_TYPE = symbolFor('react.fragment'); 31737 REACT_STRICT_MODE_TYPE = symbolFor('react.strict_mode'); 31738 REACT_PROFILER_TYPE = symbolFor('react.profiler'); 31739 REACT_PROVIDER_TYPE = symbolFor('react.provider'); 31740 REACT_CONTEXT_TYPE = symbolFor('react.context'); 31741 REACT_FORWARD_REF_TYPE = symbolFor('react.forward_ref'); 31742 REACT_SUSPENSE_TYPE = symbolFor('react.suspense'); 31743 REACT_SUSPENSE_LIST_TYPE = symbolFor('react.suspense_list'); 31744 REACT_MEMO_TYPE = symbolFor('react.memo'); 31745 REACT_LAZY_TYPE = symbolFor('react.lazy'); 31746 REACT_BLOCK_TYPE = symbolFor('react.block'); 31747 REACT_SERVER_BLOCK_TYPE = symbolFor('react.server.block'); 31748 REACT_FUNDAMENTAL_TYPE = symbolFor('react.fundamental'); 31749 REACT_SCOPE_TYPE = symbolFor('react.scope'); 31750 REACT_OPAQUE_ID_TYPE = symbolFor('react.opaque.id'); 31751 REACT_DEBUG_TRACING_MODE_TYPE = symbolFor('react.debug_trace_mode'); 31752 REACT_OFFSCREEN_TYPE = symbolFor('react.offscreen'); 31753 REACT_LEGACY_HIDDEN_TYPE = symbolFor('react.legacy_hidden'); 31754} 31755 31756var MAYBE_ITERATOR_SYMBOL = typeof Symbol === 'function' && Symbol.iterator; 31757var FAUX_ITERATOR_SYMBOL = '@@iterator'; 31758function getIteratorFn(maybeIterable) { 31759 if (maybeIterable === null || typeof maybeIterable !== 'object') { 31760 return null; 31761 } 31762 31763 var maybeIterator = MAYBE_ITERATOR_SYMBOL && maybeIterable[MAYBE_ITERATOR_SYMBOL] || maybeIterable[FAUX_ITERATOR_SYMBOL]; 31764 31765 if (typeof maybeIterator === 'function') { 31766 return maybeIterator; 31767 } 31768 31769 return null; 31770} 31771 31772// Helpers to patch console.logs to avoid logging during side-effect free 31773// replaying on render function. This currently only patches the object 31774// lazily which won't cover if the log function was extracted eagerly. 31775// We could also eagerly patch the method. 31776var disabledDepth = 0; 31777var prevLog; 31778var prevInfo; 31779var prevWarn; 31780var prevError; 31781var prevGroup; 31782var prevGroupCollapsed; 31783var prevGroupEnd; 31784 31785function disabledLog() {} 31786 31787disabledLog.__reactDisabledLog = true; 31788function disableLogs() { 31789 { 31790 if (disabledDepth === 0) { 31791 /* eslint-disable react-internal/no-production-logging */ 31792 prevLog = console.log; 31793 prevInfo = console.info; 31794 prevWarn = console.warn; 31795 prevError = console.error; 31796 prevGroup = console.group; 31797 prevGroupCollapsed = console.groupCollapsed; 31798 prevGroupEnd = console.groupEnd; // https://github.com/facebook/react/issues/19099 31799 31800 var props = { 31801 configurable: true, 31802 enumerable: true, 31803 value: disabledLog, 31804 writable: true 31805 }; // $FlowFixMe Flow thinks console is immutable. 31806 31807 Object.defineProperties(console, { 31808 info: props, 31809 log: props, 31810 warn: props, 31811 error: props, 31812 group: props, 31813 groupCollapsed: props, 31814 groupEnd: props 31815 }); 31816 /* eslint-enable react-internal/no-production-logging */ 31817 } 31818 31819 disabledDepth++; 31820 } 31821} 31822function reenableLogs() { 31823 { 31824 disabledDepth--; 31825 31826 if (disabledDepth === 0) { 31827 /* eslint-disable react-internal/no-production-logging */ 31828 var props = { 31829 configurable: true, 31830 enumerable: true, 31831 writable: true 31832 }; // $FlowFixMe Flow thinks console is immutable. 31833 31834 Object.defineProperties(console, { 31835 log: _assign({}, props, { 31836 value: prevLog 31837 }), 31838 info: _assign({}, props, { 31839 value: prevInfo 31840 }), 31841 warn: _assign({}, props, { 31842 value: prevWarn 31843 }), 31844 error: _assign({}, props, { 31845 value: prevError 31846 }), 31847 group: _assign({}, props, { 31848 value: prevGroup 31849 }), 31850 groupCollapsed: _assign({}, props, { 31851 value: prevGroupCollapsed 31852 }), 31853 groupEnd: _assign({}, props, { 31854 value: prevGroupEnd 31855 }) 31856 }); 31857 /* eslint-enable react-internal/no-production-logging */ 31858 } 31859 31860 if (disabledDepth < 0) { 31861 error('disabledDepth fell below zero. ' + 'This is a bug in React. Please file an issue.'); 31862 } 31863 } 31864} 31865 31866var ReactCurrentDispatcher = ReactSharedInternals.ReactCurrentDispatcher; 31867var prefix; 31868function describeBuiltInComponentFrame(name, source, ownerFn) { 31869 { 31870 if (prefix === undefined) { 31871 // Extract the VM specific prefix used by each line. 31872 try { 31873 throw Error(); 31874 } catch (x) { 31875 var match = x.stack.trim().match(/\n( *(at )?)/); 31876 prefix = match && match[1] || ''; 31877 } 31878 } // We use the prefix to ensure our stacks line up with native stack frames. 31879 31880 31881 return '\n' + prefix + name; 31882 } 31883} 31884var reentry = false; 31885var componentFrameCache; 31886 31887{ 31888 var PossiblyWeakMap = typeof WeakMap === 'function' ? WeakMap : Map; 31889 componentFrameCache = new PossiblyWeakMap(); 31890} 31891 31892function describeNativeComponentFrame(fn, construct) { 31893 // If something asked for a stack inside a fake render, it should get ignored. 31894 if (!fn || reentry) { 31895 return ''; 31896 } 31897 31898 { 31899 var frame = componentFrameCache.get(fn); 31900 31901 if (frame !== undefined) { 31902 return frame; 31903 } 31904 } 31905 31906 var control; 31907 reentry = true; 31908 var previousPrepareStackTrace = Error.prepareStackTrace; // $FlowFixMe It does accept undefined. 31909 31910 Error.prepareStackTrace = undefined; 31911 var previousDispatcher; 31912 31913 { 31914 previousDispatcher = ReactCurrentDispatcher.current; // Set the dispatcher in DEV because this might be call in the render function 31915 // for warnings. 31916 31917 ReactCurrentDispatcher.current = null; 31918 disableLogs(); 31919 } 31920 31921 try { 31922 // This should throw. 31923 if (construct) { 31924 // Something should be setting the props in the constructor. 31925 var Fake = function () { 31926 throw Error(); 31927 }; // $FlowFixMe 31928 31929 31930 Object.defineProperty(Fake.prototype, 'props', { 31931 set: function () { 31932 // We use a throwing setter instead of frozen or non-writable props 31933 // because that won't throw in a non-strict mode function. 31934 throw Error(); 31935 } 31936 }); 31937 31938 if (typeof Reflect === 'object' && Reflect.construct) { 31939 // We construct a different control for this case to include any extra 31940 // frames added by the construct call. 31941 try { 31942 Reflect.construct(Fake, []); 31943 } catch (x) { 31944 control = x; 31945 } 31946 31947 Reflect.construct(fn, [], Fake); 31948 } else { 31949 try { 31950 Fake.call(); 31951 } catch (x) { 31952 control = x; 31953 } 31954 31955 fn.call(Fake.prototype); 31956 } 31957 } else { 31958 try { 31959 throw Error(); 31960 } catch (x) { 31961 control = x; 31962 } 31963 31964 fn(); 31965 } 31966 } catch (sample) { 31967 // This is inlined manually because closure doesn't do it for us. 31968 if (sample && control && typeof sample.stack === 'string') { 31969 // This extracts the first frame from the sample that isn't also in the control. 31970 // Skipping one frame that we assume is the frame that calls the two. 31971 var sampleLines = sample.stack.split('\n'); 31972 var controlLines = control.stack.split('\n'); 31973 var s = sampleLines.length - 1; 31974 var c = controlLines.length - 1; 31975 31976 while (s >= 1 && c >= 0 && sampleLines[s] !== controlLines[c]) { 31977 // We expect at least one stack frame to be shared. 31978 // Typically this will be the root most one. However, stack frames may be 31979 // cut off due to maximum stack limits. In this case, one maybe cut off 31980 // earlier than the other. We assume that the sample is longer or the same 31981 // and there for cut off earlier. So we should find the root most frame in 31982 // the sample somewhere in the control. 31983 c--; 31984 } 31985 31986 for (; s >= 1 && c >= 0; s--, c--) { 31987 // Next we find the first one that isn't the same which should be the 31988 // frame that called our sample function and the control. 31989 if (sampleLines[s] !== controlLines[c]) { 31990 // In V8, the first line is describing the message but other VMs don't. 31991 // If we're about to return the first line, and the control is also on the same 31992 // line, that's a pretty good indicator that our sample threw at same line as 31993 // the control. I.e. before we entered the sample frame. So we ignore this result. 31994 // This can happen if you passed a class to function component, or non-function. 31995 if (s !== 1 || c !== 1) { 31996 do { 31997 s--; 31998 c--; // We may still have similar intermediate frames from the construct call. 31999 // The next one that isn't the same should be our match though. 32000 32001 if (c < 0 || sampleLines[s] !== controlLines[c]) { 32002 // V8 adds a "new" prefix for native classes. Let's remove it to make it prettier. 32003 var _frame = '\n' + sampleLines[s].replace(' at new ', ' at '); 32004 32005 { 32006 if (typeof fn === 'function') { 32007 componentFrameCache.set(fn, _frame); 32008 } 32009 } // Return the line we found. 32010 32011 32012 return _frame; 32013 } 32014 } while (s >= 1 && c >= 0); 32015 } 32016 32017 break; 32018 } 32019 } 32020 } 32021 } finally { 32022 reentry = false; 32023 32024 { 32025 ReactCurrentDispatcher.current = previousDispatcher; 32026 reenableLogs(); 32027 } 32028 32029 Error.prepareStackTrace = previousPrepareStackTrace; 32030 } // Fallback to just using the name if we couldn't make it throw. 32031 32032 32033 var name = fn ? fn.displayName || fn.name : ''; 32034 var syntheticFrame = name ? describeBuiltInComponentFrame(name) : ''; 32035 32036 { 32037 if (typeof fn === 'function') { 32038 componentFrameCache.set(fn, syntheticFrame); 32039 } 32040 } 32041 32042 return syntheticFrame; 32043} 32044 32045function describeClassComponentFrame(ctor, source, ownerFn) { 32046 { 32047 return describeNativeComponentFrame(ctor, true); 32048 } 32049} 32050function describeFunctionComponentFrame(fn, source, ownerFn) { 32051 { 32052 return describeNativeComponentFrame(fn, false); 32053 } 32054} 32055 32056function shouldConstruct(Component) { 32057 var prototype = Component.prototype; 32058 return !!(prototype && prototype.isReactComponent); 32059} 32060 32061function describeUnknownElementTypeFrameInDEV(type, source, ownerFn) { 32062 32063 if (type == null) { 32064 return ''; 32065 } 32066 32067 if (typeof type === 'function') { 32068 { 32069 return describeNativeComponentFrame(type, shouldConstruct(type)); 32070 } 32071 } 32072 32073 if (typeof type === 'string') { 32074 return describeBuiltInComponentFrame(type); 32075 } 32076 32077 switch (type) { 32078 case REACT_SUSPENSE_TYPE: 32079 return describeBuiltInComponentFrame('Suspense'); 32080 32081 case REACT_SUSPENSE_LIST_TYPE: 32082 return describeBuiltInComponentFrame('SuspenseList'); 32083 } 32084 32085 if (typeof type === 'object') { 32086 switch (type.$$typeof) { 32087 case REACT_FORWARD_REF_TYPE: 32088 return describeFunctionComponentFrame(type.render); 32089 32090 case REACT_MEMO_TYPE: 32091 // Memo may contain any component type so we recursively resolve it. 32092 return describeUnknownElementTypeFrameInDEV(type.type, source, ownerFn); 32093 32094 case REACT_BLOCK_TYPE: 32095 return describeFunctionComponentFrame(type._render); 32096 32097 case REACT_LAZY_TYPE: 32098 { 32099 var lazyComponent = type; 32100 var payload = lazyComponent._payload; 32101 var init = lazyComponent._init; 32102 32103 try { 32104 // Lazy may contain any component type so we recursively resolve it. 32105 return describeUnknownElementTypeFrameInDEV(init(payload), source, ownerFn); 32106 } catch (x) {} 32107 } 32108 } 32109 } 32110 32111 return ''; 32112} 32113 32114function describeFiber(fiber) { 32115 var owner = fiber._debugOwner ? fiber._debugOwner.type : null ; 32116 var source = fiber._debugSource ; 32117 32118 switch (fiber.tag) { 32119 case HostComponent: 32120 return describeBuiltInComponentFrame(fiber.type); 32121 32122 case LazyComponent: 32123 return describeBuiltInComponentFrame('Lazy'); 32124 32125 case SuspenseComponent: 32126 return describeBuiltInComponentFrame('Suspense'); 32127 32128 case SuspenseListComponent: 32129 return describeBuiltInComponentFrame('SuspenseList'); 32130 32131 case FunctionComponent: 32132 case IndeterminateComponent: 32133 case SimpleMemoComponent: 32134 return describeFunctionComponentFrame(fiber.type); 32135 32136 case ForwardRef: 32137 return describeFunctionComponentFrame(fiber.type.render); 32138 32139 case Block: 32140 return describeFunctionComponentFrame(fiber.type._render); 32141 32142 case ClassComponent: 32143 return describeClassComponentFrame(fiber.type); 32144 32145 default: 32146 return ''; 32147 } 32148} 32149 32150function getStackByFiberInDevAndProd(workInProgress) { 32151 try { 32152 var info = ''; 32153 var node = workInProgress; 32154 32155 do { 32156 info += describeFiber(node); 32157 node = node.return; 32158 } while (node); 32159 32160 return info; 32161 } catch (x) { 32162 return '\nError generating stack: ' + x.message + '\n' + x.stack; 32163 } 32164} 32165 32166function getWrappedName(outerType, innerType, wrapperName) { 32167 var functionName = innerType.displayName || innerType.name || ''; 32168 return outerType.displayName || (functionName !== '' ? wrapperName + "(" + functionName + ")" : wrapperName); 32169} 32170 32171function getContextName(type) { 32172 return type.displayName || 'Context'; 32173} 32174 32175function getComponentName(type) { 32176 if (type == null) { 32177 // Host root, text node or just invalid type. 32178 return null; 32179 } 32180 32181 { 32182 if (typeof type.tag === 'number') { 32183 error('Received an unexpected object in getComponentName(). ' + 'This is likely a bug in React. Please file an issue.'); 32184 } 32185 } 32186 32187 if (typeof type === 'function') { 32188 return type.displayName || type.name || null; 32189 } 32190 32191 if (typeof type === 'string') { 32192 return type; 32193 } 32194 32195 switch (type) { 32196 case REACT_FRAGMENT_TYPE: 32197 return 'Fragment'; 32198 32199 case REACT_PORTAL_TYPE: 32200 return 'Portal'; 32201 32202 case REACT_PROFILER_TYPE: 32203 return 'Profiler'; 32204 32205 case REACT_STRICT_MODE_TYPE: 32206 return 'StrictMode'; 32207 32208 case REACT_SUSPENSE_TYPE: 32209 return 'Suspense'; 32210 32211 case REACT_SUSPENSE_LIST_TYPE: 32212 return 'SuspenseList'; 32213 } 32214 32215 if (typeof type === 'object') { 32216 switch (type.$$typeof) { 32217 case REACT_CONTEXT_TYPE: 32218 var context = type; 32219 return getContextName(context) + '.Consumer'; 32220 32221 case REACT_PROVIDER_TYPE: 32222 var provider = type; 32223 return getContextName(provider._context) + '.Provider'; 32224 32225 case REACT_FORWARD_REF_TYPE: 32226 return getWrappedName(type, type.render, 'ForwardRef'); 32227 32228 case REACT_MEMO_TYPE: 32229 return getComponentName(type.type); 32230 32231 case REACT_BLOCK_TYPE: 32232 return getComponentName(type._render); 32233 32234 case REACT_LAZY_TYPE: 32235 { 32236 var lazyComponent = type; 32237 var payload = lazyComponent._payload; 32238 var init = lazyComponent._init; 32239 32240 try { 32241 return getComponentName(init(payload)); 32242 } catch (x) { 32243 return null; 32244 } 32245 } 32246 } 32247 } 32248 32249 return null; 32250} 32251 32252var ReactDebugCurrentFrame = ReactSharedInternals.ReactDebugCurrentFrame; 32253var current = null; 32254var isRendering = false; 32255function getCurrentFiberOwnerNameInDevOrNull() { 32256 { 32257 if (current === null) { 32258 return null; 32259 } 32260 32261 var owner = current._debugOwner; 32262 32263 if (owner !== null && typeof owner !== 'undefined') { 32264 return getComponentName(owner.type); 32265 } 32266 } 32267 32268 return null; 32269} 32270 32271function getCurrentFiberStackInDev() { 32272 { 32273 if (current === null) { 32274 return ''; 32275 } // Safe because if current fiber exists, we are reconciling, 32276 // and it is guaranteed to be the work-in-progress version. 32277 32278 32279 return getStackByFiberInDevAndProd(current); 32280 } 32281} 32282 32283function resetCurrentFiber() { 32284 { 32285 ReactDebugCurrentFrame.getCurrentStack = null; 32286 current = null; 32287 isRendering = false; 32288 } 32289} 32290function setCurrentFiber(fiber) { 32291 { 32292 ReactDebugCurrentFrame.getCurrentStack = getCurrentFiberStackInDev; 32293 current = fiber; 32294 isRendering = false; 32295 } 32296} 32297function setIsRendering(rendering) { 32298 { 32299 isRendering = rendering; 32300 } 32301} 32302function getIsRendering() { 32303 { 32304 return isRendering; 32305 } 32306} 32307 32308// Flow does not allow string concatenation of most non-string types. To work 32309// around this limitation, we use an opaque type that can only be obtained by 32310// passing the value through getToStringValue first. 32311function toString(value) { 32312 return '' + value; 32313} 32314function getToStringValue(value) { 32315 switch (typeof value) { 32316 case 'boolean': 32317 case 'number': 32318 case 'object': 32319 case 'string': 32320 case 'undefined': 32321 return value; 32322 32323 default: 32324 // function, symbol are assigned as empty strings 32325 return ''; 32326 } 32327} 32328 32329var hasReadOnlyValue = { 32330 button: true, 32331 checkbox: true, 32332 image: true, 32333 hidden: true, 32334 radio: true, 32335 reset: true, 32336 submit: true 32337}; 32338function checkControlledValueProps(tagName, props) { 32339 { 32340 if (!(hasReadOnlyValue[props.type] || props.onChange || props.onInput || props.readOnly || props.disabled || props.value == null)) { 32341 error('You provided a `value` prop to a form field without an ' + '`onChange` handler. This will render a read-only field. If ' + 'the field should be mutable use `defaultValue`. Otherwise, ' + 'set either `onChange` or `readOnly`.'); 32342 } 32343 32344 if (!(props.onChange || props.readOnly || props.disabled || props.checked == null)) { 32345 error('You provided a `checked` prop to a form field without an ' + '`onChange` handler. This will render a read-only field. If ' + 'the field should be mutable use `defaultChecked`. Otherwise, ' + 'set either `onChange` or `readOnly`.'); 32346 } 32347 } 32348} 32349 32350function isCheckable(elem) { 32351 var type = elem.type; 32352 var nodeName = elem.nodeName; 32353 return nodeName && nodeName.toLowerCase() === 'input' && (type === 'checkbox' || type === 'radio'); 32354} 32355 32356function getTracker(node) { 32357 return node._valueTracker; 32358} 32359 32360function detachTracker(node) { 32361 node._valueTracker = null; 32362} 32363 32364function getValueFromNode(node) { 32365 var value = ''; 32366 32367 if (!node) { 32368 return value; 32369 } 32370 32371 if (isCheckable(node)) { 32372 value = node.checked ? 'true' : 'false'; 32373 } else { 32374 value = node.value; 32375 } 32376 32377 return value; 32378} 32379 32380function trackValueOnNode(node) { 32381 var valueField = isCheckable(node) ? 'checked' : 'value'; 32382 var descriptor = Object.getOwnPropertyDescriptor(node.constructor.prototype, valueField); 32383 var currentValue = '' + node[valueField]; // if someone has already defined a value or Safari, then bail 32384 // and don't track value will cause over reporting of changes, 32385 // but it's better then a hard failure 32386 // (needed for certain tests that spyOn input values and Safari) 32387 32388 if (node.hasOwnProperty(valueField) || typeof descriptor === 'undefined' || typeof descriptor.get !== 'function' || typeof descriptor.set !== 'function') { 32389 return; 32390 } 32391 32392 var get = descriptor.get, 32393 set = descriptor.set; 32394 Object.defineProperty(node, valueField, { 32395 configurable: true, 32396 get: function () { 32397 return get.call(this); 32398 }, 32399 set: function (value) { 32400 currentValue = '' + value; 32401 set.call(this, value); 32402 } 32403 }); // We could've passed this the first time 32404 // but it triggers a bug in IE11 and Edge 14/15. 32405 // Calling defineProperty() again should be equivalent. 32406 // https://github.com/facebook/react/issues/11768 32407 32408 Object.defineProperty(node, valueField, { 32409 enumerable: descriptor.enumerable 32410 }); 32411 var tracker = { 32412 getValue: function () { 32413 return currentValue; 32414 }, 32415 setValue: function (value) { 32416 currentValue = '' + value; 32417 }, 32418 stopTracking: function () { 32419 detachTracker(node); 32420 delete node[valueField]; 32421 } 32422 }; 32423 return tracker; 32424} 32425 32426function track(node) { 32427 if (getTracker(node)) { 32428 return; 32429 } // TODO: Once it's just Fiber we can move this to node._wrapperState 32430 32431 32432 node._valueTracker = trackValueOnNode(node); 32433} 32434function updateValueIfChanged(node) { 32435 if (!node) { 32436 return false; 32437 } 32438 32439 var tracker = getTracker(node); // if there is no tracker at this point it's unlikely 32440 // that trying again will succeed 32441 32442 if (!tracker) { 32443 return true; 32444 } 32445 32446 var lastValue = tracker.getValue(); 32447 var nextValue = getValueFromNode(node); 32448 32449 if (nextValue !== lastValue) { 32450 tracker.setValue(nextValue); 32451 return true; 32452 } 32453 32454 return false; 32455} 32456 32457function getActiveElement(doc) { 32458 doc = doc || (typeof document !== 'undefined' ? document : undefined); 32459 32460 if (typeof doc === 'undefined') { 32461 return null; 32462 } 32463 32464 try { 32465 return doc.activeElement || doc.body; 32466 } catch (e) { 32467 return doc.body; 32468 } 32469} 32470 32471var didWarnValueDefaultValue = false; 32472var didWarnCheckedDefaultChecked = false; 32473var didWarnControlledToUncontrolled = false; 32474var didWarnUncontrolledToControlled = false; 32475 32476function isControlled(props) { 32477 var usesChecked = props.type === 'checkbox' || props.type === 'radio'; 32478 return usesChecked ? props.checked != null : props.value != null; 32479} 32480/** 32481 * Implements an <input> host component that allows setting these optional 32482 * props: `checked`, `value`, `defaultChecked`, and `defaultValue`. 32483 * 32484 * If `checked` or `value` are not supplied (or null/undefined), user actions 32485 * that affect the checked state or value will trigger updates to the element. 32486 * 32487 * If they are supplied (and not null/undefined), the rendered element will not 32488 * trigger updates to the element. Instead, the props must change in order for 32489 * the rendered element to be updated. 32490 * 32491 * The rendered element will be initialized as unchecked (or `defaultChecked`) 32492 * with an empty value (or `defaultValue`). 32493 * 32494 * See http://www.w3.org/TR/2012/WD-html5-20121025/the-input-element.html 32495 */ 32496 32497 32498function getHostProps(element, props) { 32499 var node = element; 32500 var checked = props.checked; 32501 32502 var hostProps = _assign({}, props, { 32503 defaultChecked: undefined, 32504 defaultValue: undefined, 32505 value: undefined, 32506 checked: checked != null ? checked : node._wrapperState.initialChecked 32507 }); 32508 32509 return hostProps; 32510} 32511function initWrapperState(element, props) { 32512 { 32513 checkControlledValueProps('input', props); 32514 32515 if (props.checked !== undefined && props.defaultChecked !== undefined && !didWarnCheckedDefaultChecked) { 32516 error('%s contains an input of type %s with both checked and defaultChecked props. ' + 'Input elements must be either controlled or uncontrolled ' + '(specify either the checked prop, or the defaultChecked prop, but not ' + 'both). Decide between using a controlled or uncontrolled input ' + 'element and remove one of these props. More info: ' + 'https://reactjs.org/link/controlled-components', getCurrentFiberOwnerNameInDevOrNull() || 'A component', props.type); 32517 32518 didWarnCheckedDefaultChecked = true; 32519 } 32520 32521 if (props.value !== undefined && props.defaultValue !== undefined && !didWarnValueDefaultValue) { 32522 error('%s contains an input of type %s with both value and defaultValue props. ' + 'Input elements must be either controlled or uncontrolled ' + '(specify either the value prop, or the defaultValue prop, but not ' + 'both). Decide between using a controlled or uncontrolled input ' + 'element and remove one of these props. More info: ' + 'https://reactjs.org/link/controlled-components', getCurrentFiberOwnerNameInDevOrNull() || 'A component', props.type); 32523 32524 didWarnValueDefaultValue = true; 32525 } 32526 } 32527 32528 var node = element; 32529 var defaultValue = props.defaultValue == null ? '' : props.defaultValue; 32530 node._wrapperState = { 32531 initialChecked: props.checked != null ? props.checked : props.defaultChecked, 32532 initialValue: getToStringValue(props.value != null ? props.value : defaultValue), 32533 controlled: isControlled(props) 32534 }; 32535} 32536function updateChecked(element, props) { 32537 var node = element; 32538 var checked = props.checked; 32539 32540 if (checked != null) { 32541 setValueForProperty(node, 'checked', checked, false); 32542 } 32543} 32544function updateWrapper(element, props) { 32545 var node = element; 32546 32547 { 32548 var controlled = isControlled(props); 32549 32550 if (!node._wrapperState.controlled && controlled && !didWarnUncontrolledToControlled) { 32551 error('A component is changing an uncontrolled input to be controlled. ' + 'This is likely caused by the value changing from undefined to ' + 'a defined value, which should not happen. ' + 'Decide between using a controlled or uncontrolled input ' + 'element for the lifetime of the component. More info: https://reactjs.org/link/controlled-components'); 32552 32553 didWarnUncontrolledToControlled = true; 32554 } 32555 32556 if (node._wrapperState.controlled && !controlled && !didWarnControlledToUncontrolled) { 32557 error('A component is changing a controlled input to be uncontrolled. ' + 'This is likely caused by the value changing from a defined to ' + 'undefined, which should not happen. ' + 'Decide between using a controlled or uncontrolled input ' + 'element for the lifetime of the component. More info: https://reactjs.org/link/controlled-components'); 32558 32559 didWarnControlledToUncontrolled = true; 32560 } 32561 } 32562 32563 updateChecked(element, props); 32564 var value = getToStringValue(props.value); 32565 var type = props.type; 32566 32567 if (value != null) { 32568 if (type === 'number') { 32569 if (value === 0 && node.value === '' || // We explicitly want to coerce to number here if possible. 32570 // eslint-disable-next-line 32571 node.value != value) { 32572 node.value = toString(value); 32573 } 32574 } else if (node.value !== toString(value)) { 32575 node.value = toString(value); 32576 } 32577 } else if (type === 'submit' || type === 'reset') { 32578 // Submit/reset inputs need the attribute removed completely to avoid 32579 // blank-text buttons. 32580 node.removeAttribute('value'); 32581 return; 32582 } 32583 32584 { 32585 // When syncing the value attribute, the value comes from a cascade of 32586 // properties: 32587 // 1. The value React property 32588 // 2. The defaultValue React property 32589 // 3. Otherwise there should be no change 32590 if (props.hasOwnProperty('value')) { 32591 setDefaultValue(node, props.type, value); 32592 } else if (props.hasOwnProperty('defaultValue')) { 32593 setDefaultValue(node, props.type, getToStringValue(props.defaultValue)); 32594 } 32595 } 32596 32597 { 32598 // When syncing the checked attribute, it only changes when it needs 32599 // to be removed, such as transitioning from a checkbox into a text input 32600 if (props.checked == null && props.defaultChecked != null) { 32601 node.defaultChecked = !!props.defaultChecked; 32602 } 32603 } 32604} 32605function postMountWrapper(element, props, isHydrating) { 32606 var node = element; // Do not assign value if it is already set. This prevents user text input 32607 // from being lost during SSR hydration. 32608 32609 if (props.hasOwnProperty('value') || props.hasOwnProperty('defaultValue')) { 32610 var type = props.type; 32611 var isButton = type === 'submit' || type === 'reset'; // Avoid setting value attribute on submit/reset inputs as it overrides the 32612 // default value provided by the browser. See: #12872 32613 32614 if (isButton && (props.value === undefined || props.value === null)) { 32615 return; 32616 } 32617 32618 var initialValue = toString(node._wrapperState.initialValue); // Do not assign value if it is already set. This prevents user text input 32619 // from being lost during SSR hydration. 32620 32621 if (!isHydrating) { 32622 { 32623 // When syncing the value attribute, the value property should use 32624 // the wrapperState._initialValue property. This uses: 32625 // 32626 // 1. The value React property when present 32627 // 2. The defaultValue React property when present 32628 // 3. An empty string 32629 if (initialValue !== node.value) { 32630 node.value = initialValue; 32631 } 32632 } 32633 } 32634 32635 { 32636 // Otherwise, the value attribute is synchronized to the property, 32637 // so we assign defaultValue to the same thing as the value property 32638 // assignment step above. 32639 node.defaultValue = initialValue; 32640 } 32641 } // Normally, we'd just do `node.checked = node.checked` upon initial mount, less this bug 32642 // this is needed to work around a chrome bug where setting defaultChecked 32643 // will sometimes influence the value of checked (even after detachment). 32644 // Reference: https://bugs.chromium.org/p/chromium/issues/detail?id=608416 32645 // We need to temporarily unset name to avoid disrupting radio button groups. 32646 32647 32648 var name = node.name; 32649 32650 if (name !== '') { 32651 node.name = ''; 32652 } 32653 32654 { 32655 // When syncing the checked attribute, both the checked property and 32656 // attribute are assigned at the same time using defaultChecked. This uses: 32657 // 32658 // 1. The checked React property when present 32659 // 2. The defaultChecked React property when present 32660 // 3. Otherwise, false 32661 node.defaultChecked = !node.defaultChecked; 32662 node.defaultChecked = !!node._wrapperState.initialChecked; 32663 } 32664 32665 if (name !== '') { 32666 node.name = name; 32667 } 32668} 32669function restoreControlledState(element, props) { 32670 var node = element; 32671 updateWrapper(node, props); 32672 updateNamedCousins(node, props); 32673} 32674 32675function updateNamedCousins(rootNode, props) { 32676 var name = props.name; 32677 32678 if (props.type === 'radio' && name != null) { 32679 var queryRoot = rootNode; 32680 32681 while (queryRoot.parentNode) { 32682 queryRoot = queryRoot.parentNode; 32683 } // If `rootNode.form` was non-null, then we could try `form.elements`, 32684 // but that sometimes behaves strangely in IE8. We could also try using 32685 // `form.getElementsByName`, but that will only return direct children 32686 // and won't include inputs that use the HTML5 `form=` attribute. Since 32687 // the input might not even be in a form. It might not even be in the 32688 // document. Let's just use the local `querySelectorAll` to ensure we don't 32689 // miss anything. 32690 32691 32692 var group = queryRoot.querySelectorAll('input[name=' + JSON.stringify('' + name) + '][type="radio"]'); 32693 32694 for (var i = 0; i < group.length; i++) { 32695 var otherNode = group[i]; 32696 32697 if (otherNode === rootNode || otherNode.form !== rootNode.form) { 32698 continue; 32699 } // This will throw if radio buttons rendered by different copies of React 32700 // and the same name are rendered into the same form (same as #1939). 32701 // That's probably okay; we don't support it just as we don't support 32702 // mixing React radio buttons with non-React ones. 32703 32704 32705 var otherProps = getFiberCurrentPropsFromNode(otherNode); 32706 32707 if (!otherProps) { 32708 { 32709 throw Error( "ReactDOMInput: Mixing React and non-React radio inputs with the same `name` is not supported." ); 32710 } 32711 } // We need update the tracked value on the named cousin since the value 32712 // was changed but the input saw no event or value set 32713 32714 32715 updateValueIfChanged(otherNode); // If this is a controlled radio button group, forcing the input that 32716 // was previously checked to update will cause it to be come re-checked 32717 // as appropriate. 32718 32719 updateWrapper(otherNode, otherProps); 32720 } 32721 } 32722} // In Chrome, assigning defaultValue to certain input types triggers input validation. 32723// For number inputs, the display value loses trailing decimal points. For email inputs, 32724// Chrome raises "The specified value <x> is not a valid email address". 32725// 32726// Here we check to see if the defaultValue has actually changed, avoiding these problems 32727// when the user is inputting text 32728// 32729// https://github.com/facebook/react/issues/7253 32730 32731 32732function setDefaultValue(node, type, value) { 32733 if ( // Focused number inputs synchronize on blur. See ChangeEventPlugin.js 32734 type !== 'number' || getActiveElement(node.ownerDocument) !== node) { 32735 if (value == null) { 32736 node.defaultValue = toString(node._wrapperState.initialValue); 32737 } else if (node.defaultValue !== toString(value)) { 32738 node.defaultValue = toString(value); 32739 } 32740 } 32741} 32742 32743var didWarnSelectedSetOnOption = false; 32744var didWarnInvalidChild = false; 32745 32746function flattenChildren(children) { 32747 var content = ''; // Flatten children. We'll warn if they are invalid 32748 // during validateProps() which runs for hydration too. 32749 // Note that this would throw on non-element objects. 32750 // Elements are stringified (which is normally irrelevant 32751 // but matters for <fbt>). 32752 32753 React.Children.forEach(children, function (child) { 32754 if (child == null) { 32755 return; 32756 } 32757 32758 content += child; // Note: we don't warn about invalid children here. 32759 // Instead, this is done separately below so that 32760 // it happens during the hydration code path too. 32761 }); 32762 return content; 32763} 32764/** 32765 * Implements an <option> host component that warns when `selected` is set. 32766 */ 32767 32768 32769function validateProps(element, props) { 32770 { 32771 // This mirrors the code path above, but runs for hydration too. 32772 // Warn about invalid children here so that client and hydration are consistent. 32773 // TODO: this seems like it could cause a DEV-only throw for hydration 32774 // if children contains a non-element object. We should try to avoid that. 32775 if (typeof props.children === 'object' && props.children !== null) { 32776 React.Children.forEach(props.children, function (child) { 32777 if (child == null) { 32778 return; 32779 } 32780 32781 if (typeof child === 'string' || typeof child === 'number') { 32782 return; 32783 } 32784 32785 if (typeof child.type !== 'string') { 32786 return; 32787 } 32788 32789 if (!didWarnInvalidChild) { 32790 didWarnInvalidChild = true; 32791 32792 error('Only strings and numbers are supported as <option> children.'); 32793 } 32794 }); 32795 } // TODO: Remove support for `selected` in <option>. 32796 32797 32798 if (props.selected != null && !didWarnSelectedSetOnOption) { 32799 error('Use the `defaultValue` or `value` props on <select> instead of ' + 'setting `selected` on <option>.'); 32800 32801 didWarnSelectedSetOnOption = true; 32802 } 32803 } 32804} 32805function postMountWrapper$1(element, props) { 32806 // value="" should make a value attribute (#6219) 32807 if (props.value != null) { 32808 element.setAttribute('value', toString(getToStringValue(props.value))); 32809 } 32810} 32811function getHostProps$1(element, props) { 32812 var hostProps = _assign({ 32813 children: undefined 32814 }, props); 32815 32816 var content = flattenChildren(props.children); 32817 32818 if (content) { 32819 hostProps.children = content; 32820 } 32821 32822 return hostProps; 32823} 32824 32825var didWarnValueDefaultValue$1; 32826 32827{ 32828 didWarnValueDefaultValue$1 = false; 32829} 32830 32831function getDeclarationErrorAddendum() { 32832 var ownerName = getCurrentFiberOwnerNameInDevOrNull(); 32833 32834 if (ownerName) { 32835 return '\n\nCheck the render method of `' + ownerName + '`.'; 32836 } 32837 32838 return ''; 32839} 32840 32841var valuePropNames = ['value', 'defaultValue']; 32842/** 32843 * Validation function for `value` and `defaultValue`. 32844 */ 32845 32846function checkSelectPropTypes(props) { 32847 { 32848 checkControlledValueProps('select', props); 32849 32850 for (var i = 0; i < valuePropNames.length; i++) { 32851 var propName = valuePropNames[i]; 32852 32853 if (props[propName] == null) { 32854 continue; 32855 } 32856 32857 var isArray = Array.isArray(props[propName]); 32858 32859 if (props.multiple && !isArray) { 32860 error('The `%s` prop supplied to <select> must be an array if ' + '`multiple` is true.%s', propName, getDeclarationErrorAddendum()); 32861 } else if (!props.multiple && isArray) { 32862 error('The `%s` prop supplied to <select> must be a scalar ' + 'value if `multiple` is false.%s', propName, getDeclarationErrorAddendum()); 32863 } 32864 } 32865 } 32866} 32867 32868function updateOptions(node, multiple, propValue, setDefaultSelected) { 32869 var options = node.options; 32870 32871 if (multiple) { 32872 var selectedValues = propValue; 32873 var selectedValue = {}; 32874 32875 for (var i = 0; i < selectedValues.length; i++) { 32876 // Prefix to avoid chaos with special keys. 32877 selectedValue['$' + selectedValues[i]] = true; 32878 } 32879 32880 for (var _i = 0; _i < options.length; _i++) { 32881 var selected = selectedValue.hasOwnProperty('$' + options[_i].value); 32882 32883 if (options[_i].selected !== selected) { 32884 options[_i].selected = selected; 32885 } 32886 32887 if (selected && setDefaultSelected) { 32888 options[_i].defaultSelected = true; 32889 } 32890 } 32891 } else { 32892 // Do not set `select.value` as exact behavior isn't consistent across all 32893 // browsers for all cases. 32894 var _selectedValue = toString(getToStringValue(propValue)); 32895 32896 var defaultSelected = null; 32897 32898 for (var _i2 = 0; _i2 < options.length; _i2++) { 32899 if (options[_i2].value === _selectedValue) { 32900 options[_i2].selected = true; 32901 32902 if (setDefaultSelected) { 32903 options[_i2].defaultSelected = true; 32904 } 32905 32906 return; 32907 } 32908 32909 if (defaultSelected === null && !options[_i2].disabled) { 32910 defaultSelected = options[_i2]; 32911 } 32912 } 32913 32914 if (defaultSelected !== null) { 32915 defaultSelected.selected = true; 32916 } 32917 } 32918} 32919/** 32920 * Implements a <select> host component that allows optionally setting the 32921 * props `value` and `defaultValue`. If `multiple` is false, the prop must be a 32922 * stringable. If `multiple` is true, the prop must be an array of stringables. 32923 * 32924 * If `value` is not supplied (or null/undefined), user actions that change the 32925 * selected option will trigger updates to the rendered options. 32926 * 32927 * If it is supplied (and not null/undefined), the rendered options will not 32928 * update in response to user actions. Instead, the `value` prop must change in 32929 * order for the rendered options to update. 32930 * 32931 * If `defaultValue` is provided, any options with the supplied values will be 32932 * selected. 32933 */ 32934 32935 32936function getHostProps$2(element, props) { 32937 return _assign({}, props, { 32938 value: undefined 32939 }); 32940} 32941function initWrapperState$1(element, props) { 32942 var node = element; 32943 32944 { 32945 checkSelectPropTypes(props); 32946 } 32947 32948 node._wrapperState = { 32949 wasMultiple: !!props.multiple 32950 }; 32951 32952 { 32953 if (props.value !== undefined && props.defaultValue !== undefined && !didWarnValueDefaultValue$1) { 32954 error('Select elements must be either controlled or uncontrolled ' + '(specify either the value prop, or the defaultValue prop, but not ' + 'both). Decide between using a controlled or uncontrolled select ' + 'element and remove one of these props. More info: ' + 'https://reactjs.org/link/controlled-components'); 32955 32956 didWarnValueDefaultValue$1 = true; 32957 } 32958 } 32959} 32960function postMountWrapper$2(element, props) { 32961 var node = element; 32962 node.multiple = !!props.multiple; 32963 var value = props.value; 32964 32965 if (value != null) { 32966 updateOptions(node, !!props.multiple, value, false); 32967 } else if (props.defaultValue != null) { 32968 updateOptions(node, !!props.multiple, props.defaultValue, true); 32969 } 32970} 32971function postUpdateWrapper(element, props) { 32972 var node = element; 32973 var wasMultiple = node._wrapperState.wasMultiple; 32974 node._wrapperState.wasMultiple = !!props.multiple; 32975 var value = props.value; 32976 32977 if (value != null) { 32978 updateOptions(node, !!props.multiple, value, false); 32979 } else if (wasMultiple !== !!props.multiple) { 32980 // For simplicity, reapply `defaultValue` if `multiple` is toggled. 32981 if (props.defaultValue != null) { 32982 updateOptions(node, !!props.multiple, props.defaultValue, true); 32983 } else { 32984 // Revert the select back to its default unselected state. 32985 updateOptions(node, !!props.multiple, props.multiple ? [] : '', false); 32986 } 32987 } 32988} 32989function restoreControlledState$1(element, props) { 32990 var node = element; 32991 var value = props.value; 32992 32993 if (value != null) { 32994 updateOptions(node, !!props.multiple, value, false); 32995 } 32996} 32997 32998var didWarnValDefaultVal = false; 32999 33000/** 33001 * Implements a <textarea> host component that allows setting `value`, and 33002 * `defaultValue`. This differs from the traditional DOM API because value is 33003 * usually set as PCDATA children. 33004 * 33005 * If `value` is not supplied (or null/undefined), user actions that affect the 33006 * value will trigger updates to the element. 33007 * 33008 * If `value` is supplied (and not null/undefined), the rendered element will 33009 * not trigger updates to the element. Instead, the `value` prop must change in 33010 * order for the rendered element to be updated. 33011 * 33012 * The rendered element will be initialized with an empty value, the prop 33013 * `defaultValue` if specified, or the children content (deprecated). 33014 */ 33015function getHostProps$3(element, props) { 33016 var node = element; 33017 33018 if (!(props.dangerouslySetInnerHTML == null)) { 33019 { 33020 throw Error( "`dangerouslySetInnerHTML` does not make sense on <textarea>." ); 33021 } 33022 } // Always set children to the same thing. In IE9, the selection range will 33023 // get reset if `textContent` is mutated. We could add a check in setTextContent 33024 // to only set the value if/when the value differs from the node value (which would 33025 // completely solve this IE9 bug), but Sebastian+Sophie seemed to like this 33026 // solution. The value can be a boolean or object so that's why it's forced 33027 // to be a string. 33028 33029 33030 var hostProps = _assign({}, props, { 33031 value: undefined, 33032 defaultValue: undefined, 33033 children: toString(node._wrapperState.initialValue) 33034 }); 33035 33036 return hostProps; 33037} 33038function initWrapperState$2(element, props) { 33039 var node = element; 33040 33041 { 33042 checkControlledValueProps('textarea', props); 33043 33044 if (props.value !== undefined && props.defaultValue !== undefined && !didWarnValDefaultVal) { 33045 error('%s contains a textarea with both value and defaultValue props. ' + 'Textarea elements must be either controlled or uncontrolled ' + '(specify either the value prop, or the defaultValue prop, but not ' + 'both). Decide between using a controlled or uncontrolled textarea ' + 'and remove one of these props. More info: ' + 'https://reactjs.org/link/controlled-components', getCurrentFiberOwnerNameInDevOrNull() || 'A component'); 33046 33047 didWarnValDefaultVal = true; 33048 } 33049 } 33050 33051 var initialValue = props.value; // Only bother fetching default value if we're going to use it 33052 33053 if (initialValue == null) { 33054 var children = props.children, 33055 defaultValue = props.defaultValue; 33056 33057 if (children != null) { 33058 { 33059 error('Use the `defaultValue` or `value` props instead of setting ' + 'children on <textarea>.'); 33060 } 33061 33062 { 33063 if (!(defaultValue == null)) { 33064 { 33065 throw Error( "If you supply `defaultValue` on a <textarea>, do not pass children." ); 33066 } 33067 } 33068 33069 if (Array.isArray(children)) { 33070 if (!(children.length <= 1)) { 33071 { 33072 throw Error( "<textarea> can only have at most one child." ); 33073 } 33074 } 33075 33076 children = children[0]; 33077 } 33078 33079 defaultValue = children; 33080 } 33081 } 33082 33083 if (defaultValue == null) { 33084 defaultValue = ''; 33085 } 33086 33087 initialValue = defaultValue; 33088 } 33089 33090 node._wrapperState = { 33091 initialValue: getToStringValue(initialValue) 33092 }; 33093} 33094function updateWrapper$1(element, props) { 33095 var node = element; 33096 var value = getToStringValue(props.value); 33097 var defaultValue = getToStringValue(props.defaultValue); 33098 33099 if (value != null) { 33100 // Cast `value` to a string to ensure the value is set correctly. While 33101 // browsers typically do this as necessary, jsdom doesn't. 33102 var newValue = toString(value); // To avoid side effects (such as losing text selection), only set value if changed 33103 33104 if (newValue !== node.value) { 33105 node.value = newValue; 33106 } 33107 33108 if (props.defaultValue == null && node.defaultValue !== newValue) { 33109 node.defaultValue = newValue; 33110 } 33111 } 33112 33113 if (defaultValue != null) { 33114 node.defaultValue = toString(defaultValue); 33115 } 33116} 33117function postMountWrapper$3(element, props) { 33118 var node = element; // This is in postMount because we need access to the DOM node, which is not 33119 // available until after the component has mounted. 33120 33121 var textContent = node.textContent; // Only set node.value if textContent is equal to the expected 33122 // initial value. In IE10/IE11 there is a bug where the placeholder attribute 33123 // will populate textContent as well. 33124 // https://developer.microsoft.com/microsoft-edge/platform/issues/101525/ 33125 33126 if (textContent === node._wrapperState.initialValue) { 33127 if (textContent !== '' && textContent !== null) { 33128 node.value = textContent; 33129 } 33130 } 33131} 33132function restoreControlledState$2(element, props) { 33133 // DOM component is still mounted; update 33134 updateWrapper$1(element, props); 33135} 33136 33137var HTML_NAMESPACE = 'http://www.w3.org/1999/xhtml'; 33138var MATH_NAMESPACE = 'http://www.w3.org/1998/Math/MathML'; 33139var SVG_NAMESPACE = 'http://www.w3.org/2000/svg'; 33140var Namespaces = { 33141 html: HTML_NAMESPACE, 33142 mathml: MATH_NAMESPACE, 33143 svg: SVG_NAMESPACE 33144}; // Assumes there is no parent namespace. 33145 33146function getIntrinsicNamespace(type) { 33147 switch (type) { 33148 case 'svg': 33149 return SVG_NAMESPACE; 33150 33151 case 'math': 33152 return MATH_NAMESPACE; 33153 33154 default: 33155 return HTML_NAMESPACE; 33156 } 33157} 33158function getChildNamespace(parentNamespace, type) { 33159 if (parentNamespace == null || parentNamespace === HTML_NAMESPACE) { 33160 // No (or default) parent namespace: potential entry point. 33161 return getIntrinsicNamespace(type); 33162 } 33163 33164 if (parentNamespace === SVG_NAMESPACE && type === 'foreignObject') { 33165 // We're leaving SVG. 33166 return HTML_NAMESPACE; 33167 } // By default, pass namespace below. 33168 33169 33170 return parentNamespace; 33171} 33172 33173/* globals MSApp */ 33174 33175/** 33176 * Create a function which has 'unsafe' privileges (required by windows8 apps) 33177 */ 33178var createMicrosoftUnsafeLocalFunction = function (func) { 33179 if (typeof MSApp !== 'undefined' && MSApp.execUnsafeLocalFunction) { 33180 return function (arg0, arg1, arg2, arg3) { 33181 MSApp.execUnsafeLocalFunction(function () { 33182 return func(arg0, arg1, arg2, arg3); 33183 }); 33184 }; 33185 } else { 33186 return func; 33187 } 33188}; 33189 33190var reusableSVGContainer; 33191/** 33192 * Set the innerHTML property of a node 33193 * 33194 * @param {DOMElement} node 33195 * @param {string} html 33196 * @internal 33197 */ 33198 33199var setInnerHTML = createMicrosoftUnsafeLocalFunction(function (node, html) { 33200 if (node.namespaceURI === Namespaces.svg) { 33201 33202 if (!('innerHTML' in node)) { 33203 // IE does not have innerHTML for SVG nodes, so instead we inject the 33204 // new markup in a temp node and then move the child nodes across into 33205 // the target node 33206 reusableSVGContainer = reusableSVGContainer || document.createElement('div'); 33207 reusableSVGContainer.innerHTML = '<svg>' + html.valueOf().toString() + '</svg>'; 33208 var svgNode = reusableSVGContainer.firstChild; 33209 33210 while (node.firstChild) { 33211 node.removeChild(node.firstChild); 33212 } 33213 33214 while (svgNode.firstChild) { 33215 node.appendChild(svgNode.firstChild); 33216 } 33217 33218 return; 33219 } 33220 } 33221 33222 node.innerHTML = html; 33223}); 33224 33225/** 33226 * HTML nodeType values that represent the type of the node 33227 */ 33228var ELEMENT_NODE = 1; 33229var TEXT_NODE = 3; 33230var COMMENT_NODE = 8; 33231var DOCUMENT_NODE = 9; 33232var DOCUMENT_FRAGMENT_NODE = 11; 33233 33234/** 33235 * Set the textContent property of a node. For text updates, it's faster 33236 * to set the `nodeValue` of the Text node directly instead of using 33237 * `.textContent` which will remove the existing node and create a new one. 33238 * 33239 * @param {DOMElement} node 33240 * @param {string} text 33241 * @internal 33242 */ 33243 33244var setTextContent = function (node, text) { 33245 if (text) { 33246 var firstChild = node.firstChild; 33247 33248 if (firstChild && firstChild === node.lastChild && firstChild.nodeType === TEXT_NODE) { 33249 firstChild.nodeValue = text; 33250 return; 33251 } 33252 } 33253 33254 node.textContent = text; 33255}; 33256 33257// List derived from Gecko source code: 33258// https://github.com/mozilla/gecko-dev/blob/4e638efc71/layout/style/test/property_database.js 33259var shorthandToLonghand = { 33260 animation: ['animationDelay', 'animationDirection', 'animationDuration', 'animationFillMode', 'animationIterationCount', 'animationName', 'animationPlayState', 'animationTimingFunction'], 33261 background: ['backgroundAttachment', 'backgroundClip', 'backgroundColor', 'backgroundImage', 'backgroundOrigin', 'backgroundPositionX', 'backgroundPositionY', 'backgroundRepeat', 'backgroundSize'], 33262 backgroundPosition: ['backgroundPositionX', 'backgroundPositionY'], 33263 border: ['borderBottomColor', 'borderBottomStyle', 'borderBottomWidth', 'borderImageOutset', 'borderImageRepeat', 'borderImageSlice', 'borderImageSource', 'borderImageWidth', 'borderLeftColor', 'borderLeftStyle', 'borderLeftWidth', 'borderRightColor', 'borderRightStyle', 'borderRightWidth', 'borderTopColor', 'borderTopStyle', 'borderTopWidth'], 33264 borderBlockEnd: ['borderBlockEndColor', 'borderBlockEndStyle', 'borderBlockEndWidth'], 33265 borderBlockStart: ['borderBlockStartColor', 'borderBlockStartStyle', 'borderBlockStartWidth'], 33266 borderBottom: ['borderBottomColor', 'borderBottomStyle', 'borderBottomWidth'], 33267 borderColor: ['borderBottomColor', 'borderLeftColor', 'borderRightColor', 'borderTopColor'], 33268 borderImage: ['borderImageOutset', 'borderImageRepeat', 'borderImageSlice', 'borderImageSource', 'borderImageWidth'], 33269 borderInlineEnd: ['borderInlineEndColor', 'borderInlineEndStyle', 'borderInlineEndWidth'], 33270 borderInlineStart: ['borderInlineStartColor', 'borderInlineStartStyle', 'borderInlineStartWidth'], 33271 borderLeft: ['borderLeftColor', 'borderLeftStyle', 'borderLeftWidth'], 33272 borderRadius: ['borderBottomLeftRadius', 'borderBottomRightRadius', 'borderTopLeftRadius', 'borderTopRightRadius'], 33273 borderRight: ['borderRightColor', 'borderRightStyle', 'borderRightWidth'], 33274 borderStyle: ['borderBottomStyle', 'borderLeftStyle', 'borderRightStyle', 'borderTopStyle'], 33275 borderTop: ['borderTopColor', 'borderTopStyle', 'borderTopWidth'], 33276 borderWidth: ['borderBottomWidth', 'borderLeftWidth', 'borderRightWidth', 'borderTopWidth'], 33277 columnRule: ['columnRuleColor', 'columnRuleStyle', 'columnRuleWidth'], 33278 columns: ['columnCount', 'columnWidth'], 33279 flex: ['flexBasis', 'flexGrow', 'flexShrink'], 33280 flexFlow: ['flexDirection', 'flexWrap'], 33281 font: ['fontFamily', 'fontFeatureSettings', 'fontKerning', 'fontLanguageOverride', 'fontSize', 'fontSizeAdjust', 'fontStretch', 'fontStyle', 'fontVariant', 'fontVariantAlternates', 'fontVariantCaps', 'fontVariantEastAsian', 'fontVariantLigatures', 'fontVariantNumeric', 'fontVariantPosition', 'fontWeight', 'lineHeight'], 33282 fontVariant: ['fontVariantAlternates', 'fontVariantCaps', 'fontVariantEastAsian', 'fontVariantLigatures', 'fontVariantNumeric', 'fontVariantPosition'], 33283 gap: ['columnGap', 'rowGap'], 33284 grid: ['gridAutoColumns', 'gridAutoFlow', 'gridAutoRows', 'gridTemplateAreas', 'gridTemplateColumns', 'gridTemplateRows'], 33285 gridArea: ['gridColumnEnd', 'gridColumnStart', 'gridRowEnd', 'gridRowStart'], 33286 gridColumn: ['gridColumnEnd', 'gridColumnStart'], 33287 gridColumnGap: ['columnGap'], 33288 gridGap: ['columnGap', 'rowGap'], 33289 gridRow: ['gridRowEnd', 'gridRowStart'], 33290 gridRowGap: ['rowGap'], 33291 gridTemplate: ['gridTemplateAreas', 'gridTemplateColumns', 'gridTemplateRows'], 33292 listStyle: ['listStyleImage', 'listStylePosition', 'listStyleType'], 33293 margin: ['marginBottom', 'marginLeft', 'marginRight', 'marginTop'], 33294 marker: ['markerEnd', 'markerMid', 'markerStart'], 33295 mask: ['maskClip', 'maskComposite', 'maskImage', 'maskMode', 'maskOrigin', 'maskPositionX', 'maskPositionY', 'maskRepeat', 'maskSize'], 33296 maskPosition: ['maskPositionX', 'maskPositionY'], 33297 outline: ['outlineColor', 'outlineStyle', 'outlineWidth'], 33298 overflow: ['overflowX', 'overflowY'], 33299 padding: ['paddingBottom', 'paddingLeft', 'paddingRight', 'paddingTop'], 33300 placeContent: ['alignContent', 'justifyContent'], 33301 placeItems: ['alignItems', 'justifyItems'], 33302 placeSelf: ['alignSelf', 'justifySelf'], 33303 textDecoration: ['textDecorationColor', 'textDecorationLine', 'textDecorationStyle'], 33304 textEmphasis: ['textEmphasisColor', 'textEmphasisStyle'], 33305 transition: ['transitionDelay', 'transitionDuration', 'transitionProperty', 'transitionTimingFunction'], 33306 wordWrap: ['overflowWrap'] 33307}; 33308 33309/** 33310 * CSS properties which accept numbers but are not in units of "px". 33311 */ 33312var isUnitlessNumber = { 33313 animationIterationCount: true, 33314 borderImageOutset: true, 33315 borderImageSlice: true, 33316 borderImageWidth: true, 33317 boxFlex: true, 33318 boxFlexGroup: true, 33319 boxOrdinalGroup: true, 33320 columnCount: true, 33321 columns: true, 33322 flex: true, 33323 flexGrow: true, 33324 flexPositive: true, 33325 flexShrink: true, 33326 flexNegative: true, 33327 flexOrder: true, 33328 gridArea: true, 33329 gridRow: true, 33330 gridRowEnd: true, 33331 gridRowSpan: true, 33332 gridRowStart: true, 33333 gridColumn: true, 33334 gridColumnEnd: true, 33335 gridColumnSpan: true, 33336 gridColumnStart: true, 33337 fontWeight: true, 33338 lineClamp: true, 33339 lineHeight: true, 33340 opacity: true, 33341 order: true, 33342 orphans: true, 33343 tabSize: true, 33344 widows: true, 33345 zIndex: true, 33346 zoom: true, 33347 // SVG-related properties 33348 fillOpacity: true, 33349 floodOpacity: true, 33350 stopOpacity: true, 33351 strokeDasharray: true, 33352 strokeDashoffset: true, 33353 strokeMiterlimit: true, 33354 strokeOpacity: true, 33355 strokeWidth: true 33356}; 33357/** 33358 * @param {string} prefix vendor-specific prefix, eg: Webkit 33359 * @param {string} key style name, eg: transitionDuration 33360 * @return {string} style name prefixed with `prefix`, properly camelCased, eg: 33361 * WebkitTransitionDuration 33362 */ 33363 33364function prefixKey(prefix, key) { 33365 return prefix + key.charAt(0).toUpperCase() + key.substring(1); 33366} 33367/** 33368 * Support style names that may come passed in prefixed by adding permutations 33369 * of vendor prefixes. 33370 */ 33371 33372 33373var prefixes = ['Webkit', 'ms', 'Moz', 'O']; // Using Object.keys here, or else the vanilla for-in loop makes IE8 go into an 33374// infinite loop, because it iterates over the newly added props too. 33375 33376Object.keys(isUnitlessNumber).forEach(function (prop) { 33377 prefixes.forEach(function (prefix) { 33378 isUnitlessNumber[prefixKey(prefix, prop)] = isUnitlessNumber[prop]; 33379 }); 33380}); 33381 33382/** 33383 * Convert a value into the proper css writable value. The style name `name` 33384 * should be logical (no hyphens), as specified 33385 * in `CSSProperty.isUnitlessNumber`. 33386 * 33387 * @param {string} name CSS property name such as `topMargin`. 33388 * @param {*} value CSS property value such as `10px`. 33389 * @return {string} Normalized style value with dimensions applied. 33390 */ 33391 33392function dangerousStyleValue(name, value, isCustomProperty) { 33393 // Note that we've removed escapeTextForBrowser() calls here since the 33394 // whole string will be escaped when the attribute is injected into 33395 // the markup. If you provide unsafe user data here they can inject 33396 // arbitrary CSS which may be problematic (I couldn't repro this): 33397 // https://www.owasp.org/index.php/XSS_Filter_Evasion_Cheat_Sheet 33398 // http://www.thespanner.co.uk/2007/11/26/ultimate-xss-css-injection/ 33399 // This is not an XSS hole but instead a potential CSS injection issue 33400 // which has lead to a greater discussion about how we're going to 33401 // trust URLs moving forward. See #2115901 33402 var isEmpty = value == null || typeof value === 'boolean' || value === ''; 33403 33404 if (isEmpty) { 33405 return ''; 33406 } 33407 33408 if (!isCustomProperty && typeof value === 'number' && value !== 0 && !(isUnitlessNumber.hasOwnProperty(name) && isUnitlessNumber[name])) { 33409 return value + 'px'; // Presumes implicit 'px' suffix for unitless numbers 33410 } 33411 33412 return ('' + value).trim(); 33413} 33414 33415var uppercasePattern = /([A-Z])/g; 33416var msPattern = /^ms-/; 33417/** 33418 * Hyphenates a camelcased CSS property name, for example: 33419 * 33420 * > hyphenateStyleName('backgroundColor') 33421 * < "background-color" 33422 * > hyphenateStyleName('MozTransition') 33423 * < "-moz-transition" 33424 * > hyphenateStyleName('msTransition') 33425 * < "-ms-transition" 33426 * 33427 * As Modernizr suggests (http://modernizr.com/docs/#prefixed), an `ms` prefix 33428 * is converted to `-ms-`. 33429 */ 33430 33431function hyphenateStyleName(name) { 33432 return name.replace(uppercasePattern, '-$1').toLowerCase().replace(msPattern, '-ms-'); 33433} 33434 33435var warnValidStyle = function () {}; 33436 33437{ 33438 // 'msTransform' is correct, but the other prefixes should be capitalized 33439 var badVendoredStyleNamePattern = /^(?:webkit|moz|o)[A-Z]/; 33440 var msPattern$1 = /^-ms-/; 33441 var hyphenPattern = /-(.)/g; // style values shouldn't contain a semicolon 33442 33443 var badStyleValueWithSemicolonPattern = /;\s*$/; 33444 var warnedStyleNames = {}; 33445 var warnedStyleValues = {}; 33446 var warnedForNaNValue = false; 33447 var warnedForInfinityValue = false; 33448 33449 var camelize = function (string) { 33450 return string.replace(hyphenPattern, function (_, character) { 33451 return character.toUpperCase(); 33452 }); 33453 }; 33454 33455 var warnHyphenatedStyleName = function (name) { 33456 if (warnedStyleNames.hasOwnProperty(name) && warnedStyleNames[name]) { 33457 return; 33458 } 33459 33460 warnedStyleNames[name] = true; 33461 33462 error('Unsupported style property %s. Did you mean %s?', name, // As Andi Smith suggests 33463 // (http://www.andismith.com/blog/2012/02/modernizr-prefixed/), an `-ms` prefix 33464 // is converted to lowercase `ms`. 33465 camelize(name.replace(msPattern$1, 'ms-'))); 33466 }; 33467 33468 var warnBadVendoredStyleName = function (name) { 33469 if (warnedStyleNames.hasOwnProperty(name) && warnedStyleNames[name]) { 33470 return; 33471 } 33472 33473 warnedStyleNames[name] = true; 33474 33475 error('Unsupported vendor-prefixed style property %s. Did you mean %s?', name, name.charAt(0).toUpperCase() + name.slice(1)); 33476 }; 33477 33478 var warnStyleValueWithSemicolon = function (name, value) { 33479 if (warnedStyleValues.hasOwnProperty(value) && warnedStyleValues[value]) { 33480 return; 33481 } 33482 33483 warnedStyleValues[value] = true; 33484 33485 error("Style property values shouldn't contain a semicolon. " + 'Try "%s: %s" instead.', name, value.replace(badStyleValueWithSemicolonPattern, '')); 33486 }; 33487 33488 var warnStyleValueIsNaN = function (name, value) { 33489 if (warnedForNaNValue) { 33490 return; 33491 } 33492 33493 warnedForNaNValue = true; 33494 33495 error('`NaN` is an invalid value for the `%s` css style property.', name); 33496 }; 33497 33498 var warnStyleValueIsInfinity = function (name, value) { 33499 if (warnedForInfinityValue) { 33500 return; 33501 } 33502 33503 warnedForInfinityValue = true; 33504 33505 error('`Infinity` is an invalid value for the `%s` css style property.', name); 33506 }; 33507 33508 warnValidStyle = function (name, value) { 33509 if (name.indexOf('-') > -1) { 33510 warnHyphenatedStyleName(name); 33511 } else if (badVendoredStyleNamePattern.test(name)) { 33512 warnBadVendoredStyleName(name); 33513 } else if (badStyleValueWithSemicolonPattern.test(value)) { 33514 warnStyleValueWithSemicolon(name, value); 33515 } 33516 33517 if (typeof value === 'number') { 33518 if (isNaN(value)) { 33519 warnStyleValueIsNaN(name, value); 33520 } else if (!isFinite(value)) { 33521 warnStyleValueIsInfinity(name, value); 33522 } 33523 } 33524 }; 33525} 33526 33527var warnValidStyle$1 = warnValidStyle; 33528 33529/** 33530 * Operations for dealing with CSS properties. 33531 */ 33532 33533/** 33534 * This creates a string that is expected to be equivalent to the style 33535 * attribute generated by server-side rendering. It by-passes warnings and 33536 * security checks so it's not safe to use this value for anything other than 33537 * comparison. It is only used in DEV for SSR validation. 33538 */ 33539 33540function createDangerousStringForStyles(styles) { 33541 { 33542 var serialized = ''; 33543 var delimiter = ''; 33544 33545 for (var styleName in styles) { 33546 if (!styles.hasOwnProperty(styleName)) { 33547 continue; 33548 } 33549 33550 var styleValue = styles[styleName]; 33551 33552 if (styleValue != null) { 33553 var isCustomProperty = styleName.indexOf('--') === 0; 33554 serialized += delimiter + (isCustomProperty ? styleName : hyphenateStyleName(styleName)) + ':'; 33555 serialized += dangerousStyleValue(styleName, styleValue, isCustomProperty); 33556 delimiter = ';'; 33557 } 33558 } 33559 33560 return serialized || null; 33561 } 33562} 33563/** 33564 * Sets the value for multiple styles on a node. If a value is specified as 33565 * '' (empty string), the corresponding style property will be unset. 33566 * 33567 * @param {DOMElement} node 33568 * @param {object} styles 33569 */ 33570 33571function setValueForStyles(node, styles) { 33572 var style = node.style; 33573 33574 for (var styleName in styles) { 33575 if (!styles.hasOwnProperty(styleName)) { 33576 continue; 33577 } 33578 33579 var isCustomProperty = styleName.indexOf('--') === 0; 33580 33581 { 33582 if (!isCustomProperty) { 33583 warnValidStyle$1(styleName, styles[styleName]); 33584 } 33585 } 33586 33587 var styleValue = dangerousStyleValue(styleName, styles[styleName], isCustomProperty); 33588 33589 if (styleName === 'float') { 33590 styleName = 'cssFloat'; 33591 } 33592 33593 if (isCustomProperty) { 33594 style.setProperty(styleName, styleValue); 33595 } else { 33596 style[styleName] = styleValue; 33597 } 33598 } 33599} 33600 33601function isValueEmpty(value) { 33602 return value == null || typeof value === 'boolean' || value === ''; 33603} 33604/** 33605 * Given {color: 'red', overflow: 'hidden'} returns { 33606 * color: 'color', 33607 * overflowX: 'overflow', 33608 * overflowY: 'overflow', 33609 * }. This can be read as "the overflowY property was set by the overflow 33610 * shorthand". That is, the values are the property that each was derived from. 33611 */ 33612 33613 33614function expandShorthandMap(styles) { 33615 var expanded = {}; 33616 33617 for (var key in styles) { 33618 var longhands = shorthandToLonghand[key] || [key]; 33619 33620 for (var i = 0; i < longhands.length; i++) { 33621 expanded[longhands[i]] = key; 33622 } 33623 } 33624 33625 return expanded; 33626} 33627/** 33628 * When mixing shorthand and longhand property names, we warn during updates if 33629 * we expect an incorrect result to occur. In particular, we warn for: 33630 * 33631 * Updating a shorthand property (longhand gets overwritten): 33632 * {font: 'foo', fontVariant: 'bar'} -> {font: 'baz', fontVariant: 'bar'} 33633 * becomes .style.font = 'baz' 33634 * Removing a shorthand property (longhand gets lost too): 33635 * {font: 'foo', fontVariant: 'bar'} -> {fontVariant: 'bar'} 33636 * becomes .style.font = '' 33637 * Removing a longhand property (should revert to shorthand; doesn't): 33638 * {font: 'foo', fontVariant: 'bar'} -> {font: 'foo'} 33639 * becomes .style.fontVariant = '' 33640 */ 33641 33642 33643function validateShorthandPropertyCollisionInDev(styleUpdates, nextStyles) { 33644 { 33645 if (!nextStyles) { 33646 return; 33647 } 33648 33649 var expandedUpdates = expandShorthandMap(styleUpdates); 33650 var expandedStyles = expandShorthandMap(nextStyles); 33651 var warnedAbout = {}; 33652 33653 for (var key in expandedUpdates) { 33654 var originalKey = expandedUpdates[key]; 33655 var correctOriginalKey = expandedStyles[key]; 33656 33657 if (correctOriginalKey && originalKey !== correctOriginalKey) { 33658 var warningKey = originalKey + ',' + correctOriginalKey; 33659 33660 if (warnedAbout[warningKey]) { 33661 continue; 33662 } 33663 33664 warnedAbout[warningKey] = true; 33665 33666 error('%s a style property during rerender (%s) when a ' + 'conflicting property is set (%s) can lead to styling bugs. To ' + "avoid this, don't mix shorthand and non-shorthand properties " + 'for the same value; instead, replace the shorthand with ' + 'separate values.', isValueEmpty(styleUpdates[originalKey]) ? 'Removing' : 'Updating', originalKey, correctOriginalKey); 33667 } 33668 } 33669 } 33670} 33671 33672// For HTML, certain tags should omit their close tag. We keep a list for 33673// those special-case tags. 33674var omittedCloseTags = { 33675 area: true, 33676 base: true, 33677 br: true, 33678 col: true, 33679 embed: true, 33680 hr: true, 33681 img: true, 33682 input: true, 33683 keygen: true, 33684 link: true, 33685 meta: true, 33686 param: true, 33687 source: true, 33688 track: true, 33689 wbr: true // NOTE: menuitem's close tag should be omitted, but that causes problems. 33690 33691}; 33692 33693// `omittedCloseTags` except that `menuitem` should still have its closing tag. 33694 33695var voidElementTags = _assign({ 33696 menuitem: true 33697}, omittedCloseTags); 33698 33699var HTML = '__html'; 33700 33701function assertValidProps(tag, props) { 33702 if (!props) { 33703 return; 33704 } // Note the use of `==` which checks for null or undefined. 33705 33706 33707 if (voidElementTags[tag]) { 33708 if (!(props.children == null && props.dangerouslySetInnerHTML == null)) { 33709 { 33710 throw Error( tag + " is a void element tag and must neither have `children` nor use `dangerouslySetInnerHTML`." ); 33711 } 33712 } 33713 } 33714 33715 if (props.dangerouslySetInnerHTML != null) { 33716 if (!(props.children == null)) { 33717 { 33718 throw Error( "Can only set one of `children` or `props.dangerouslySetInnerHTML`." ); 33719 } 33720 } 33721 33722 if (!(typeof props.dangerouslySetInnerHTML === 'object' && HTML in props.dangerouslySetInnerHTML)) { 33723 { 33724 throw Error( "`props.dangerouslySetInnerHTML` must be in the form `{__html: ...}`. Please visit https://reactjs.org/link/dangerously-set-inner-html for more information." ); 33725 } 33726 } 33727 } 33728 33729 { 33730 if (!props.suppressContentEditableWarning && props.contentEditable && props.children != null) { 33731 error('A component is `contentEditable` and contains `children` managed by ' + 'React. It is now your responsibility to guarantee that none of ' + 'those nodes are unexpectedly modified or duplicated. This is ' + 'probably not intentional.'); 33732 } 33733 } 33734 33735 if (!(props.style == null || typeof props.style === 'object')) { 33736 { 33737 throw Error( "The `style` prop expects a mapping from style properties to values, not a string. For example, style={{marginRight: spacing + 'em'}} when using JSX." ); 33738 } 33739 } 33740} 33741 33742function isCustomComponent(tagName, props) { 33743 if (tagName.indexOf('-') === -1) { 33744 return typeof props.is === 'string'; 33745 } 33746 33747 switch (tagName) { 33748 // These are reserved SVG and MathML elements. 33749 // We don't mind this list too much because we expect it to never grow. 33750 // The alternative is to track the namespace in a few places which is convoluted. 33751 // https://w3c.github.io/webcomponents/spec/custom/#custom-elements-core-concepts 33752 case 'annotation-xml': 33753 case 'color-profile': 33754 case 'font-face': 33755 case 'font-face-src': 33756 case 'font-face-uri': 33757 case 'font-face-format': 33758 case 'font-face-name': 33759 case 'missing-glyph': 33760 return false; 33761 33762 default: 33763 return true; 33764 } 33765} 33766 33767// When adding attributes to the HTML or SVG allowed attribute list, be sure to 33768// also add them to this module to ensure casing and incorrect name 33769// warnings. 33770var possibleStandardNames = { 33771 // HTML 33772 accept: 'accept', 33773 acceptcharset: 'acceptCharset', 33774 'accept-charset': 'acceptCharset', 33775 accesskey: 'accessKey', 33776 action: 'action', 33777 allowfullscreen: 'allowFullScreen', 33778 alt: 'alt', 33779 as: 'as', 33780 async: 'async', 33781 autocapitalize: 'autoCapitalize', 33782 autocomplete: 'autoComplete', 33783 autocorrect: 'autoCorrect', 33784 autofocus: 'autoFocus', 33785 autoplay: 'autoPlay', 33786 autosave: 'autoSave', 33787 capture: 'capture', 33788 cellpadding: 'cellPadding', 33789 cellspacing: 'cellSpacing', 33790 challenge: 'challenge', 33791 charset: 'charSet', 33792 checked: 'checked', 33793 children: 'children', 33794 cite: 'cite', 33795 class: 'className', 33796 classid: 'classID', 33797 classname: 'className', 33798 cols: 'cols', 33799 colspan: 'colSpan', 33800 content: 'content', 33801 contenteditable: 'contentEditable', 33802 contextmenu: 'contextMenu', 33803 controls: 'controls', 33804 controlslist: 'controlsList', 33805 coords: 'coords', 33806 crossorigin: 'crossOrigin', 33807 dangerouslysetinnerhtml: 'dangerouslySetInnerHTML', 33808 data: 'data', 33809 datetime: 'dateTime', 33810 default: 'default', 33811 defaultchecked: 'defaultChecked', 33812 defaultvalue: 'defaultValue', 33813 defer: 'defer', 33814 dir: 'dir', 33815 disabled: 'disabled', 33816 disablepictureinpicture: 'disablePictureInPicture', 33817 disableremoteplayback: 'disableRemotePlayback', 33818 download: 'download', 33819 draggable: 'draggable', 33820 enctype: 'encType', 33821 enterkeyhint: 'enterKeyHint', 33822 for: 'htmlFor', 33823 form: 'form', 33824 formmethod: 'formMethod', 33825 formaction: 'formAction', 33826 formenctype: 'formEncType', 33827 formnovalidate: 'formNoValidate', 33828 formtarget: 'formTarget', 33829 frameborder: 'frameBorder', 33830 headers: 'headers', 33831 height: 'height', 33832 hidden: 'hidden', 33833 high: 'high', 33834 href: 'href', 33835 hreflang: 'hrefLang', 33836 htmlfor: 'htmlFor', 33837 httpequiv: 'httpEquiv', 33838 'http-equiv': 'httpEquiv', 33839 icon: 'icon', 33840 id: 'id', 33841 innerhtml: 'innerHTML', 33842 inputmode: 'inputMode', 33843 integrity: 'integrity', 33844 is: 'is', 33845 itemid: 'itemID', 33846 itemprop: 'itemProp', 33847 itemref: 'itemRef', 33848 itemscope: 'itemScope', 33849 itemtype: 'itemType', 33850 keyparams: 'keyParams', 33851 keytype: 'keyType', 33852 kind: 'kind', 33853 label: 'label', 33854 lang: 'lang', 33855 list: 'list', 33856 loop: 'loop', 33857 low: 'low', 33858 manifest: 'manifest', 33859 marginwidth: 'marginWidth', 33860 marginheight: 'marginHeight', 33861 max: 'max', 33862 maxlength: 'maxLength', 33863 media: 'media', 33864 mediagroup: 'mediaGroup', 33865 method: 'method', 33866 min: 'min', 33867 minlength: 'minLength', 33868 multiple: 'multiple', 33869 muted: 'muted', 33870 name: 'name', 33871 nomodule: 'noModule', 33872 nonce: 'nonce', 33873 novalidate: 'noValidate', 33874 open: 'open', 33875 optimum: 'optimum', 33876 pattern: 'pattern', 33877 placeholder: 'placeholder', 33878 playsinline: 'playsInline', 33879 poster: 'poster', 33880 preload: 'preload', 33881 profile: 'profile', 33882 radiogroup: 'radioGroup', 33883 readonly: 'readOnly', 33884 referrerpolicy: 'referrerPolicy', 33885 rel: 'rel', 33886 required: 'required', 33887 reversed: 'reversed', 33888 role: 'role', 33889 rows: 'rows', 33890 rowspan: 'rowSpan', 33891 sandbox: 'sandbox', 33892 scope: 'scope', 33893 scoped: 'scoped', 33894 scrolling: 'scrolling', 33895 seamless: 'seamless', 33896 selected: 'selected', 33897 shape: 'shape', 33898 size: 'size', 33899 sizes: 'sizes', 33900 span: 'span', 33901 spellcheck: 'spellCheck', 33902 src: 'src', 33903 srcdoc: 'srcDoc', 33904 srclang: 'srcLang', 33905 srcset: 'srcSet', 33906 start: 'start', 33907 step: 'step', 33908 style: 'style', 33909 summary: 'summary', 33910 tabindex: 'tabIndex', 33911 target: 'target', 33912 title: 'title', 33913 type: 'type', 33914 usemap: 'useMap', 33915 value: 'value', 33916 width: 'width', 33917 wmode: 'wmode', 33918 wrap: 'wrap', 33919 // SVG 33920 about: 'about', 33921 accentheight: 'accentHeight', 33922 'accent-height': 'accentHeight', 33923 accumulate: 'accumulate', 33924 additive: 'additive', 33925 alignmentbaseline: 'alignmentBaseline', 33926 'alignment-baseline': 'alignmentBaseline', 33927 allowreorder: 'allowReorder', 33928 alphabetic: 'alphabetic', 33929 amplitude: 'amplitude', 33930 arabicform: 'arabicForm', 33931 'arabic-form': 'arabicForm', 33932 ascent: 'ascent', 33933 attributename: 'attributeName', 33934 attributetype: 'attributeType', 33935 autoreverse: 'autoReverse', 33936 azimuth: 'azimuth', 33937 basefrequency: 'baseFrequency', 33938 baselineshift: 'baselineShift', 33939 'baseline-shift': 'baselineShift', 33940 baseprofile: 'baseProfile', 33941 bbox: 'bbox', 33942 begin: 'begin', 33943 bias: 'bias', 33944 by: 'by', 33945 calcmode: 'calcMode', 33946 capheight: 'capHeight', 33947 'cap-height': 'capHeight', 33948 clip: 'clip', 33949 clippath: 'clipPath', 33950 'clip-path': 'clipPath', 33951 clippathunits: 'clipPathUnits', 33952 cliprule: 'clipRule', 33953 'clip-rule': 'clipRule', 33954 color: 'color', 33955 colorinterpolation: 'colorInterpolation', 33956 'color-interpolation': 'colorInterpolation', 33957 colorinterpolationfilters: 'colorInterpolationFilters', 33958 'color-interpolation-filters': 'colorInterpolationFilters', 33959 colorprofile: 'colorProfile', 33960 'color-profile': 'colorProfile', 33961 colorrendering: 'colorRendering', 33962 'color-rendering': 'colorRendering', 33963 contentscripttype: 'contentScriptType', 33964 contentstyletype: 'contentStyleType', 33965 cursor: 'cursor', 33966 cx: 'cx', 33967 cy: 'cy', 33968 d: 'd', 33969 datatype: 'datatype', 33970 decelerate: 'decelerate', 33971 descent: 'descent', 33972 diffuseconstant: 'diffuseConstant', 33973 direction: 'direction', 33974 display: 'display', 33975 divisor: 'divisor', 33976 dominantbaseline: 'dominantBaseline', 33977 'dominant-baseline': 'dominantBaseline', 33978 dur: 'dur', 33979 dx: 'dx', 33980 dy: 'dy', 33981 edgemode: 'edgeMode', 33982 elevation: 'elevation', 33983 enablebackground: 'enableBackground', 33984 'enable-background': 'enableBackground', 33985 end: 'end', 33986 exponent: 'exponent', 33987 externalresourcesrequired: 'externalResourcesRequired', 33988 fill: 'fill', 33989 fillopacity: 'fillOpacity', 33990 'fill-opacity': 'fillOpacity', 33991 fillrule: 'fillRule', 33992 'fill-rule': 'fillRule', 33993 filter: 'filter', 33994 filterres: 'filterRes', 33995 filterunits: 'filterUnits', 33996 floodopacity: 'floodOpacity', 33997 'flood-opacity': 'floodOpacity', 33998 floodcolor: 'floodColor', 33999 'flood-color': 'floodColor', 34000 focusable: 'focusable', 34001 fontfamily: 'fontFamily', 34002 'font-family': 'fontFamily', 34003 fontsize: 'fontSize', 34004 'font-size': 'fontSize', 34005 fontsizeadjust: 'fontSizeAdjust', 34006 'font-size-adjust': 'fontSizeAdjust', 34007 fontstretch: 'fontStretch', 34008 'font-stretch': 'fontStretch', 34009 fontstyle: 'fontStyle', 34010 'font-style': 'fontStyle', 34011 fontvariant: 'fontVariant', 34012 'font-variant': 'fontVariant', 34013 fontweight: 'fontWeight', 34014 'font-weight': 'fontWeight', 34015 format: 'format', 34016 from: 'from', 34017 fx: 'fx', 34018 fy: 'fy', 34019 g1: 'g1', 34020 g2: 'g2', 34021 glyphname: 'glyphName', 34022 'glyph-name': 'glyphName', 34023 glyphorientationhorizontal: 'glyphOrientationHorizontal', 34024 'glyph-orientation-horizontal': 'glyphOrientationHorizontal', 34025 glyphorientationvertical: 'glyphOrientationVertical', 34026 'glyph-orientation-vertical': 'glyphOrientationVertical', 34027 glyphref: 'glyphRef', 34028 gradienttransform: 'gradientTransform', 34029 gradientunits: 'gradientUnits', 34030 hanging: 'hanging', 34031 horizadvx: 'horizAdvX', 34032 'horiz-adv-x': 'horizAdvX', 34033 horizoriginx: 'horizOriginX', 34034 'horiz-origin-x': 'horizOriginX', 34035 ideographic: 'ideographic', 34036 imagerendering: 'imageRendering', 34037 'image-rendering': 'imageRendering', 34038 in2: 'in2', 34039 in: 'in', 34040 inlist: 'inlist', 34041 intercept: 'intercept', 34042 k1: 'k1', 34043 k2: 'k2', 34044 k3: 'k3', 34045 k4: 'k4', 34046 k: 'k', 34047 kernelmatrix: 'kernelMatrix', 34048 kernelunitlength: 'kernelUnitLength', 34049 kerning: 'kerning', 34050 keypoints: 'keyPoints', 34051 keysplines: 'keySplines', 34052 keytimes: 'keyTimes', 34053 lengthadjust: 'lengthAdjust', 34054 letterspacing: 'letterSpacing', 34055 'letter-spacing': 'letterSpacing', 34056 lightingcolor: 'lightingColor', 34057 'lighting-color': 'lightingColor', 34058 limitingconeangle: 'limitingConeAngle', 34059 local: 'local', 34060 markerend: 'markerEnd', 34061 'marker-end': 'markerEnd', 34062 markerheight: 'markerHeight', 34063 markermid: 'markerMid', 34064 'marker-mid': 'markerMid', 34065 markerstart: 'markerStart', 34066 'marker-start': 'markerStart', 34067 markerunits: 'markerUnits', 34068 markerwidth: 'markerWidth', 34069 mask: 'mask', 34070 maskcontentunits: 'maskContentUnits', 34071 maskunits: 'maskUnits', 34072 mathematical: 'mathematical', 34073 mode: 'mode', 34074 numoctaves: 'numOctaves', 34075 offset: 'offset', 34076 opacity: 'opacity', 34077 operator: 'operator', 34078 order: 'order', 34079 orient: 'orient', 34080 orientation: 'orientation', 34081 origin: 'origin', 34082 overflow: 'overflow', 34083 overlineposition: 'overlinePosition', 34084 'overline-position': 'overlinePosition', 34085 overlinethickness: 'overlineThickness', 34086 'overline-thickness': 'overlineThickness', 34087 paintorder: 'paintOrder', 34088 'paint-order': 'paintOrder', 34089 panose1: 'panose1', 34090 'panose-1': 'panose1', 34091 pathlength: 'pathLength', 34092 patterncontentunits: 'patternContentUnits', 34093 patterntransform: 'patternTransform', 34094 patternunits: 'patternUnits', 34095 pointerevents: 'pointerEvents', 34096 'pointer-events': 'pointerEvents', 34097 points: 'points', 34098 pointsatx: 'pointsAtX', 34099 pointsaty: 'pointsAtY', 34100 pointsatz: 'pointsAtZ', 34101 prefix: 'prefix', 34102 preservealpha: 'preserveAlpha', 34103 preserveaspectratio: 'preserveAspectRatio', 34104 primitiveunits: 'primitiveUnits', 34105 property: 'property', 34106 r: 'r', 34107 radius: 'radius', 34108 refx: 'refX', 34109 refy: 'refY', 34110 renderingintent: 'renderingIntent', 34111 'rendering-intent': 'renderingIntent', 34112 repeatcount: 'repeatCount', 34113 repeatdur: 'repeatDur', 34114 requiredextensions: 'requiredExtensions', 34115 requiredfeatures: 'requiredFeatures', 34116 resource: 'resource', 34117 restart: 'restart', 34118 result: 'result', 34119 results: 'results', 34120 rotate: 'rotate', 34121 rx: 'rx', 34122 ry: 'ry', 34123 scale: 'scale', 34124 security: 'security', 34125 seed: 'seed', 34126 shaperendering: 'shapeRendering', 34127 'shape-rendering': 'shapeRendering', 34128 slope: 'slope', 34129 spacing: 'spacing', 34130 specularconstant: 'specularConstant', 34131 specularexponent: 'specularExponent', 34132 speed: 'speed', 34133 spreadmethod: 'spreadMethod', 34134 startoffset: 'startOffset', 34135 stddeviation: 'stdDeviation', 34136 stemh: 'stemh', 34137 stemv: 'stemv', 34138 stitchtiles: 'stitchTiles', 34139 stopcolor: 'stopColor', 34140 'stop-color': 'stopColor', 34141 stopopacity: 'stopOpacity', 34142 'stop-opacity': 'stopOpacity', 34143 strikethroughposition: 'strikethroughPosition', 34144 'strikethrough-position': 'strikethroughPosition', 34145 strikethroughthickness: 'strikethroughThickness', 34146 'strikethrough-thickness': 'strikethroughThickness', 34147 string: 'string', 34148 stroke: 'stroke', 34149 strokedasharray: 'strokeDasharray', 34150 'stroke-dasharray': 'strokeDasharray', 34151 strokedashoffset: 'strokeDashoffset', 34152 'stroke-dashoffset': 'strokeDashoffset', 34153 strokelinecap: 'strokeLinecap', 34154 'stroke-linecap': 'strokeLinecap', 34155 strokelinejoin: 'strokeLinejoin', 34156 'stroke-linejoin': 'strokeLinejoin', 34157 strokemiterlimit: 'strokeMiterlimit', 34158 'stroke-miterlimit': 'strokeMiterlimit', 34159 strokewidth: 'strokeWidth', 34160 'stroke-width': 'strokeWidth', 34161 strokeopacity: 'strokeOpacity', 34162 'stroke-opacity': 'strokeOpacity', 34163 suppresscontenteditablewarning: 'suppressContentEditableWarning', 34164 suppresshydrationwarning: 'suppressHydrationWarning', 34165 surfacescale: 'surfaceScale', 34166 systemlanguage: 'systemLanguage', 34167 tablevalues: 'tableValues', 34168 targetx: 'targetX', 34169 targety: 'targetY', 34170 textanchor: 'textAnchor', 34171 'text-anchor': 'textAnchor', 34172 textdecoration: 'textDecoration', 34173 'text-decoration': 'textDecoration', 34174 textlength: 'textLength', 34175 textrendering: 'textRendering', 34176 'text-rendering': 'textRendering', 34177 to: 'to', 34178 transform: 'transform', 34179 typeof: 'typeof', 34180 u1: 'u1', 34181 u2: 'u2', 34182 underlineposition: 'underlinePosition', 34183 'underline-position': 'underlinePosition', 34184 underlinethickness: 'underlineThickness', 34185 'underline-thickness': 'underlineThickness', 34186 unicode: 'unicode', 34187 unicodebidi: 'unicodeBidi', 34188 'unicode-bidi': 'unicodeBidi', 34189 unicoderange: 'unicodeRange', 34190 'unicode-range': 'unicodeRange', 34191 unitsperem: 'unitsPerEm', 34192 'units-per-em': 'unitsPerEm', 34193 unselectable: 'unselectable', 34194 valphabetic: 'vAlphabetic', 34195 'v-alphabetic': 'vAlphabetic', 34196 values: 'values', 34197 vectoreffect: 'vectorEffect', 34198 'vector-effect': 'vectorEffect', 34199 version: 'version', 34200 vertadvy: 'vertAdvY', 34201 'vert-adv-y': 'vertAdvY', 34202 vertoriginx: 'vertOriginX', 34203 'vert-origin-x': 'vertOriginX', 34204 vertoriginy: 'vertOriginY', 34205 'vert-origin-y': 'vertOriginY', 34206 vhanging: 'vHanging', 34207 'v-hanging': 'vHanging', 34208 videographic: 'vIdeographic', 34209 'v-ideographic': 'vIdeographic', 34210 viewbox: 'viewBox', 34211 viewtarget: 'viewTarget', 34212 visibility: 'visibility', 34213 vmathematical: 'vMathematical', 34214 'v-mathematical': 'vMathematical', 34215 vocab: 'vocab', 34216 widths: 'widths', 34217 wordspacing: 'wordSpacing', 34218 'word-spacing': 'wordSpacing', 34219 writingmode: 'writingMode', 34220 'writing-mode': 'writingMode', 34221 x1: 'x1', 34222 x2: 'x2', 34223 x: 'x', 34224 xchannelselector: 'xChannelSelector', 34225 xheight: 'xHeight', 34226 'x-height': 'xHeight', 34227 xlinkactuate: 'xlinkActuate', 34228 'xlink:actuate': 'xlinkActuate', 34229 xlinkarcrole: 'xlinkArcrole', 34230 'xlink:arcrole': 'xlinkArcrole', 34231 xlinkhref: 'xlinkHref', 34232 'xlink:href': 'xlinkHref', 34233 xlinkrole: 'xlinkRole', 34234 'xlink:role': 'xlinkRole', 34235 xlinkshow: 'xlinkShow', 34236 'xlink:show': 'xlinkShow', 34237 xlinktitle: 'xlinkTitle', 34238 'xlink:title': 'xlinkTitle', 34239 xlinktype: 'xlinkType', 34240 'xlink:type': 'xlinkType', 34241 xmlbase: 'xmlBase', 34242 'xml:base': 'xmlBase', 34243 xmllang: 'xmlLang', 34244 'xml:lang': 'xmlLang', 34245 xmlns: 'xmlns', 34246 'xml:space': 'xmlSpace', 34247 xmlnsxlink: 'xmlnsXlink', 34248 'xmlns:xlink': 'xmlnsXlink', 34249 xmlspace: 'xmlSpace', 34250 y1: 'y1', 34251 y2: 'y2', 34252 y: 'y', 34253 ychannelselector: 'yChannelSelector', 34254 z: 'z', 34255 zoomandpan: 'zoomAndPan' 34256}; 34257 34258var ariaProperties = { 34259 'aria-current': 0, 34260 // state 34261 'aria-details': 0, 34262 'aria-disabled': 0, 34263 // state 34264 'aria-hidden': 0, 34265 // state 34266 'aria-invalid': 0, 34267 // state 34268 'aria-keyshortcuts': 0, 34269 'aria-label': 0, 34270 'aria-roledescription': 0, 34271 // Widget Attributes 34272 'aria-autocomplete': 0, 34273 'aria-checked': 0, 34274 'aria-expanded': 0, 34275 'aria-haspopup': 0, 34276 'aria-level': 0, 34277 'aria-modal': 0, 34278 'aria-multiline': 0, 34279 'aria-multiselectable': 0, 34280 'aria-orientation': 0, 34281 'aria-placeholder': 0, 34282 'aria-pressed': 0, 34283 'aria-readonly': 0, 34284 'aria-required': 0, 34285 'aria-selected': 0, 34286 'aria-sort': 0, 34287 'aria-valuemax': 0, 34288 'aria-valuemin': 0, 34289 'aria-valuenow': 0, 34290 'aria-valuetext': 0, 34291 // Live Region Attributes 34292 'aria-atomic': 0, 34293 'aria-busy': 0, 34294 'aria-live': 0, 34295 'aria-relevant': 0, 34296 // Drag-and-Drop Attributes 34297 'aria-dropeffect': 0, 34298 'aria-grabbed': 0, 34299 // Relationship Attributes 34300 'aria-activedescendant': 0, 34301 'aria-colcount': 0, 34302 'aria-colindex': 0, 34303 'aria-colspan': 0, 34304 'aria-controls': 0, 34305 'aria-describedby': 0, 34306 'aria-errormessage': 0, 34307 'aria-flowto': 0, 34308 'aria-labelledby': 0, 34309 'aria-owns': 0, 34310 'aria-posinset': 0, 34311 'aria-rowcount': 0, 34312 'aria-rowindex': 0, 34313 'aria-rowspan': 0, 34314 'aria-setsize': 0 34315}; 34316 34317var warnedProperties = {}; 34318var rARIA = new RegExp('^(aria)-[' + ATTRIBUTE_NAME_CHAR + ']*$'); 34319var rARIACamel = new RegExp('^(aria)[A-Z][' + ATTRIBUTE_NAME_CHAR + ']*$'); 34320var hasOwnProperty$1 = Object.prototype.hasOwnProperty; 34321 34322function validateProperty(tagName, name) { 34323 { 34324 if (hasOwnProperty$1.call(warnedProperties, name) && warnedProperties[name]) { 34325 return true; 34326 } 34327 34328 if (rARIACamel.test(name)) { 34329 var ariaName = 'aria-' + name.slice(4).toLowerCase(); 34330 var correctName = ariaProperties.hasOwnProperty(ariaName) ? ariaName : null; // If this is an aria-* attribute, but is not listed in the known DOM 34331 // DOM properties, then it is an invalid aria-* attribute. 34332 34333 if (correctName == null) { 34334 error('Invalid ARIA attribute `%s`. ARIA attributes follow the pattern aria-* and must be lowercase.', name); 34335 34336 warnedProperties[name] = true; 34337 return true; 34338 } // aria-* attributes should be lowercase; suggest the lowercase version. 34339 34340 34341 if (name !== correctName) { 34342 error('Invalid ARIA attribute `%s`. Did you mean `%s`?', name, correctName); 34343 34344 warnedProperties[name] = true; 34345 return true; 34346 } 34347 } 34348 34349 if (rARIA.test(name)) { 34350 var lowerCasedName = name.toLowerCase(); 34351 var standardName = ariaProperties.hasOwnProperty(lowerCasedName) ? lowerCasedName : null; // If this is an aria-* attribute, but is not listed in the known DOM 34352 // DOM properties, then it is an invalid aria-* attribute. 34353 34354 if (standardName == null) { 34355 warnedProperties[name] = true; 34356 return false; 34357 } // aria-* attributes should be lowercase; suggest the lowercase version. 34358 34359 34360 if (name !== standardName) { 34361 error('Unknown ARIA attribute `%s`. Did you mean `%s`?', name, standardName); 34362 34363 warnedProperties[name] = true; 34364 return true; 34365 } 34366 } 34367 } 34368 34369 return true; 34370} 34371 34372function warnInvalidARIAProps(type, props) { 34373 { 34374 var invalidProps = []; 34375 34376 for (var key in props) { 34377 var isValid = validateProperty(type, key); 34378 34379 if (!isValid) { 34380 invalidProps.push(key); 34381 } 34382 } 34383 34384 var unknownPropString = invalidProps.map(function (prop) { 34385 return '`' + prop + '`'; 34386 }).join(', '); 34387 34388 if (invalidProps.length === 1) { 34389 error('Invalid aria prop %s on <%s> tag. ' + 'For details, see https://reactjs.org/link/invalid-aria-props', unknownPropString, type); 34390 } else if (invalidProps.length > 1) { 34391 error('Invalid aria props %s on <%s> tag. ' + 'For details, see https://reactjs.org/link/invalid-aria-props', unknownPropString, type); 34392 } 34393 } 34394} 34395 34396function validateProperties(type, props) { 34397 if (isCustomComponent(type, props)) { 34398 return; 34399 } 34400 34401 warnInvalidARIAProps(type, props); 34402} 34403 34404var didWarnValueNull = false; 34405function validateProperties$1(type, props) { 34406 { 34407 if (type !== 'input' && type !== 'textarea' && type !== 'select') { 34408 return; 34409 } 34410 34411 if (props != null && props.value === null && !didWarnValueNull) { 34412 didWarnValueNull = true; 34413 34414 if (type === 'select' && props.multiple) { 34415 error('`value` prop on `%s` should not be null. ' + 'Consider using an empty array when `multiple` is set to `true` ' + 'to clear the component or `undefined` for uncontrolled components.', type); 34416 } else { 34417 error('`value` prop on `%s` should not be null. ' + 'Consider using an empty string to clear the component or `undefined` ' + 'for uncontrolled components.', type); 34418 } 34419 } 34420 } 34421} 34422 34423var validateProperty$1 = function () {}; 34424 34425{ 34426 var warnedProperties$1 = {}; 34427 var _hasOwnProperty = Object.prototype.hasOwnProperty; 34428 var EVENT_NAME_REGEX = /^on./; 34429 var INVALID_EVENT_NAME_REGEX = /^on[^A-Z]/; 34430 var rARIA$1 = new RegExp('^(aria)-[' + ATTRIBUTE_NAME_CHAR + ']*$'); 34431 var rARIACamel$1 = new RegExp('^(aria)[A-Z][' + ATTRIBUTE_NAME_CHAR + ']*$'); 34432 34433 validateProperty$1 = function (tagName, name, value, eventRegistry) { 34434 if (_hasOwnProperty.call(warnedProperties$1, name) && warnedProperties$1[name]) { 34435 return true; 34436 } 34437 34438 var lowerCasedName = name.toLowerCase(); 34439 34440 if (lowerCasedName === 'onfocusin' || lowerCasedName === 'onfocusout') { 34441 error('React uses onFocus and onBlur instead of onFocusIn and onFocusOut. ' + 'All React events are normalized to bubble, so onFocusIn and onFocusOut ' + 'are not needed/supported by React.'); 34442 34443 warnedProperties$1[name] = true; 34444 return true; 34445 } // We can't rely on the event system being injected on the server. 34446 34447 34448 if (eventRegistry != null) { 34449 var registrationNameDependencies = eventRegistry.registrationNameDependencies, 34450 possibleRegistrationNames = eventRegistry.possibleRegistrationNames; 34451 34452 if (registrationNameDependencies.hasOwnProperty(name)) { 34453 return true; 34454 } 34455 34456 var registrationName = possibleRegistrationNames.hasOwnProperty(lowerCasedName) ? possibleRegistrationNames[lowerCasedName] : null; 34457 34458 if (registrationName != null) { 34459 error('Invalid event handler property `%s`. Did you mean `%s`?', name, registrationName); 34460 34461 warnedProperties$1[name] = true; 34462 return true; 34463 } 34464 34465 if (EVENT_NAME_REGEX.test(name)) { 34466 error('Unknown event handler property `%s`. It will be ignored.', name); 34467 34468 warnedProperties$1[name] = true; 34469 return true; 34470 } 34471 } else if (EVENT_NAME_REGEX.test(name)) { 34472 // If no event plugins have been injected, we are in a server environment. 34473 // So we can't tell if the event name is correct for sure, but we can filter 34474 // out known bad ones like `onclick`. We can't suggest a specific replacement though. 34475 if (INVALID_EVENT_NAME_REGEX.test(name)) { 34476 error('Invalid event handler property `%s`. ' + 'React events use the camelCase naming convention, for example `onClick`.', name); 34477 } 34478 34479 warnedProperties$1[name] = true; 34480 return true; 34481 } // Let the ARIA attribute hook validate ARIA attributes 34482 34483 34484 if (rARIA$1.test(name) || rARIACamel$1.test(name)) { 34485 return true; 34486 } 34487 34488 if (lowerCasedName === 'innerhtml') { 34489 error('Directly setting property `innerHTML` is not permitted. ' + 'For more information, lookup documentation on `dangerouslySetInnerHTML`.'); 34490 34491 warnedProperties$1[name] = true; 34492 return true; 34493 } 34494 34495 if (lowerCasedName === 'aria') { 34496 error('The `aria` attribute is reserved for future use in React. ' + 'Pass individual `aria-` attributes instead.'); 34497 34498 warnedProperties$1[name] = true; 34499 return true; 34500 } 34501 34502 if (lowerCasedName === 'is' && value !== null && value !== undefined && typeof value !== 'string') { 34503 error('Received a `%s` for a string attribute `is`. If this is expected, cast ' + 'the value to a string.', typeof value); 34504 34505 warnedProperties$1[name] = true; 34506 return true; 34507 } 34508 34509 if (typeof value === 'number' && isNaN(value)) { 34510 error('Received NaN for the `%s` attribute. If this is expected, cast ' + 'the value to a string.', name); 34511 34512 warnedProperties$1[name] = true; 34513 return true; 34514 } 34515 34516 var propertyInfo = getPropertyInfo(name); 34517 var isReserved = propertyInfo !== null && propertyInfo.type === RESERVED; // Known attributes should match the casing specified in the property config. 34518 34519 if (possibleStandardNames.hasOwnProperty(lowerCasedName)) { 34520 var standardName = possibleStandardNames[lowerCasedName]; 34521 34522 if (standardName !== name) { 34523 error('Invalid DOM property `%s`. Did you mean `%s`?', name, standardName); 34524 34525 warnedProperties$1[name] = true; 34526 return true; 34527 } 34528 } else if (!isReserved && name !== lowerCasedName) { 34529 // Unknown attributes should have lowercase casing since that's how they 34530 // will be cased anyway with server rendering. 34531 error('React does not recognize the `%s` prop on a DOM element. If you ' + 'intentionally want it to appear in the DOM as a custom ' + 'attribute, spell it as lowercase `%s` instead. ' + 'If you accidentally passed it from a parent component, remove ' + 'it from the DOM element.', name, lowerCasedName); 34532 34533 warnedProperties$1[name] = true; 34534 return true; 34535 } 34536 34537 if (typeof value === 'boolean' && shouldRemoveAttributeWithWarning(name, value, propertyInfo, false)) { 34538 if (value) { 34539 error('Received `%s` for a non-boolean attribute `%s`.\n\n' + 'If you want to write it to the DOM, pass a string instead: ' + '%s="%s" or %s={value.toString()}.', value, name, name, value, name); 34540 } else { 34541 error('Received `%s` for a non-boolean attribute `%s`.\n\n' + 'If you want to write it to the DOM, pass a string instead: ' + '%s="%s" or %s={value.toString()}.\n\n' + 'If you used to conditionally omit it with %s={condition && value}, ' + 'pass %s={condition ? value : undefined} instead.', value, name, name, value, name, name, name); 34542 } 34543 34544 warnedProperties$1[name] = true; 34545 return true; 34546 } // Now that we've validated casing, do not validate 34547 // data types for reserved props 34548 34549 34550 if (isReserved) { 34551 return true; 34552 } // Warn when a known attribute is a bad type 34553 34554 34555 if (shouldRemoveAttributeWithWarning(name, value, propertyInfo, false)) { 34556 warnedProperties$1[name] = true; 34557 return false; 34558 } // Warn when passing the strings 'false' or 'true' into a boolean prop 34559 34560 34561 if ((value === 'false' || value === 'true') && propertyInfo !== null && propertyInfo.type === BOOLEAN) { 34562 error('Received the string `%s` for the boolean attribute `%s`. ' + '%s ' + 'Did you mean %s={%s}?', value, name, value === 'false' ? 'The browser will interpret it as a truthy value.' : 'Although this works, it will not work as expected if you pass the string "false".', name, value); 34563 34564 warnedProperties$1[name] = true; 34565 return true; 34566 } 34567 34568 return true; 34569 }; 34570} 34571 34572var warnUnknownProperties = function (type, props, eventRegistry) { 34573 { 34574 var unknownProps = []; 34575 34576 for (var key in props) { 34577 var isValid = validateProperty$1(type, key, props[key], eventRegistry); 34578 34579 if (!isValid) { 34580 unknownProps.push(key); 34581 } 34582 } 34583 34584 var unknownPropString = unknownProps.map(function (prop) { 34585 return '`' + prop + '`'; 34586 }).join(', '); 34587 34588 if (unknownProps.length === 1) { 34589 error('Invalid value for prop %s on <%s> tag. Either remove it from the element, ' + 'or pass a string or number value to keep it in the DOM. ' + 'For details, see https://reactjs.org/link/attribute-behavior ', unknownPropString, type); 34590 } else if (unknownProps.length > 1) { 34591 error('Invalid values for props %s on <%s> tag. Either remove them from the element, ' + 'or pass a string or number value to keep them in the DOM. ' + 'For details, see https://reactjs.org/link/attribute-behavior ', unknownPropString, type); 34592 } 34593 } 34594}; 34595 34596function validateProperties$2(type, props, eventRegistry) { 34597 if (isCustomComponent(type, props)) { 34598 return; 34599 } 34600 34601 warnUnknownProperties(type, props, eventRegistry); 34602} 34603 34604var IS_EVENT_HANDLE_NON_MANAGED_NODE = 1; 34605var IS_NON_DELEGATED = 1 << 1; 34606var IS_CAPTURE_PHASE = 1 << 2; 34607var IS_REPLAYED = 1 << 4; 34608// set to LEGACY_FB_SUPPORT. LEGACY_FB_SUPPORT only gets set when 34609// we call willDeferLaterForLegacyFBSupport, thus not bailing out 34610// will result in endless cycles like an infinite loop. 34611// We also don't want to defer during event replaying. 34612 34613var SHOULD_NOT_PROCESS_POLYFILL_EVENT_PLUGINS = IS_EVENT_HANDLE_NON_MANAGED_NODE | IS_NON_DELEGATED | IS_CAPTURE_PHASE; 34614 34615/** 34616 * Gets the target node from a native browser event by accounting for 34617 * inconsistencies in browser DOM APIs. 34618 * 34619 * @param {object} nativeEvent Native browser event. 34620 * @return {DOMEventTarget} Target node. 34621 */ 34622 34623function getEventTarget(nativeEvent) { 34624 // Fallback to nativeEvent.srcElement for IE9 34625 // https://github.com/facebook/react/issues/12506 34626 var target = nativeEvent.target || nativeEvent.srcElement || window; // Normalize SVG <use> element events #4963 34627 34628 if (target.correspondingUseElement) { 34629 target = target.correspondingUseElement; 34630 } // Safari may fire events on text nodes (Node.TEXT_NODE is 3). 34631 // @see http://www.quirksmode.org/js/events_properties.html 34632 34633 34634 return target.nodeType === TEXT_NODE ? target.parentNode : target; 34635} 34636 34637var restoreImpl = null; 34638var restoreTarget = null; 34639var restoreQueue = null; 34640 34641function restoreStateOfTarget(target) { 34642 // We perform this translation at the end of the event loop so that we 34643 // always receive the correct fiber here 34644 var internalInstance = getInstanceFromNode(target); 34645 34646 if (!internalInstance) { 34647 // Unmounted 34648 return; 34649 } 34650 34651 if (!(typeof restoreImpl === 'function')) { 34652 { 34653 throw Error( "setRestoreImplementation() needs to be called to handle a target for controlled events. This error is likely caused by a bug in React. Please file an issue." ); 34654 } 34655 } 34656 34657 var stateNode = internalInstance.stateNode; // Guard against Fiber being unmounted. 34658 34659 if (stateNode) { 34660 var _props = getFiberCurrentPropsFromNode(stateNode); 34661 34662 restoreImpl(internalInstance.stateNode, internalInstance.type, _props); 34663 } 34664} 34665 34666function setRestoreImplementation(impl) { 34667 restoreImpl = impl; 34668} 34669function enqueueStateRestore(target) { 34670 if (restoreTarget) { 34671 if (restoreQueue) { 34672 restoreQueue.push(target); 34673 } else { 34674 restoreQueue = [target]; 34675 } 34676 } else { 34677 restoreTarget = target; 34678 } 34679} 34680function needsStateRestore() { 34681 return restoreTarget !== null || restoreQueue !== null; 34682} 34683function restoreStateIfNeeded() { 34684 if (!restoreTarget) { 34685 return; 34686 } 34687 34688 var target = restoreTarget; 34689 var queuedTargets = restoreQueue; 34690 restoreTarget = null; 34691 restoreQueue = null; 34692 restoreStateOfTarget(target); 34693 34694 if (queuedTargets) { 34695 for (var i = 0; i < queuedTargets.length; i++) { 34696 restoreStateOfTarget(queuedTargets[i]); 34697 } 34698 } 34699} 34700 34701// the renderer. Such as when we're dispatching events or if third party 34702// libraries need to call batchedUpdates. Eventually, this API will go away when 34703// everything is batched by default. We'll then have a similar API to opt-out of 34704// scheduled work and instead do synchronous work. 34705// Defaults 34706 34707var batchedUpdatesImpl = function (fn, bookkeeping) { 34708 return fn(bookkeeping); 34709}; 34710 34711var discreteUpdatesImpl = function (fn, a, b, c, d) { 34712 return fn(a, b, c, d); 34713}; 34714 34715var flushDiscreteUpdatesImpl = function () {}; 34716 34717var batchedEventUpdatesImpl = batchedUpdatesImpl; 34718var isInsideEventHandler = false; 34719var isBatchingEventUpdates = false; 34720 34721function finishEventHandler() { 34722 // Here we wait until all updates have propagated, which is important 34723 // when using controlled components within layers: 34724 // https://github.com/facebook/react/issues/1698 34725 // Then we restore state of any controlled component. 34726 var controlledComponentsHavePendingUpdates = needsStateRestore(); 34727 34728 if (controlledComponentsHavePendingUpdates) { 34729 // If a controlled event was fired, we may need to restore the state of 34730 // the DOM node back to the controlled value. This is necessary when React 34731 // bails out of the update without touching the DOM. 34732 flushDiscreteUpdatesImpl(); 34733 restoreStateIfNeeded(); 34734 } 34735} 34736 34737function batchedUpdates(fn, bookkeeping) { 34738 if (isInsideEventHandler) { 34739 // If we are currently inside another batch, we need to wait until it 34740 // fully completes before restoring state. 34741 return fn(bookkeeping); 34742 } 34743 34744 isInsideEventHandler = true; 34745 34746 try { 34747 return batchedUpdatesImpl(fn, bookkeeping); 34748 } finally { 34749 isInsideEventHandler = false; 34750 finishEventHandler(); 34751 } 34752} 34753function batchedEventUpdates(fn, a, b) { 34754 if (isBatchingEventUpdates) { 34755 // If we are currently inside another batch, we need to wait until it 34756 // fully completes before restoring state. 34757 return fn(a, b); 34758 } 34759 34760 isBatchingEventUpdates = true; 34761 34762 try { 34763 return batchedEventUpdatesImpl(fn, a, b); 34764 } finally { 34765 isBatchingEventUpdates = false; 34766 finishEventHandler(); 34767 } 34768} 34769function discreteUpdates(fn, a, b, c, d) { 34770 var prevIsInsideEventHandler = isInsideEventHandler; 34771 isInsideEventHandler = true; 34772 34773 try { 34774 return discreteUpdatesImpl(fn, a, b, c, d); 34775 } finally { 34776 isInsideEventHandler = prevIsInsideEventHandler; 34777 34778 if (!isInsideEventHandler) { 34779 finishEventHandler(); 34780 } 34781 } 34782} 34783function flushDiscreteUpdatesIfNeeded(timeStamp) { 34784 { 34785 if (!isInsideEventHandler) { 34786 flushDiscreteUpdatesImpl(); 34787 } 34788 } 34789} 34790function setBatchingImplementation(_batchedUpdatesImpl, _discreteUpdatesImpl, _flushDiscreteUpdatesImpl, _batchedEventUpdatesImpl) { 34791 batchedUpdatesImpl = _batchedUpdatesImpl; 34792 discreteUpdatesImpl = _discreteUpdatesImpl; 34793 flushDiscreteUpdatesImpl = _flushDiscreteUpdatesImpl; 34794 batchedEventUpdatesImpl = _batchedEventUpdatesImpl; 34795} 34796 34797function isInteractive(tag) { 34798 return tag === 'button' || tag === 'input' || tag === 'select' || tag === 'textarea'; 34799} 34800 34801function shouldPreventMouseEvent(name, type, props) { 34802 switch (name) { 34803 case 'onClick': 34804 case 'onClickCapture': 34805 case 'onDoubleClick': 34806 case 'onDoubleClickCapture': 34807 case 'onMouseDown': 34808 case 'onMouseDownCapture': 34809 case 'onMouseMove': 34810 case 'onMouseMoveCapture': 34811 case 'onMouseUp': 34812 case 'onMouseUpCapture': 34813 case 'onMouseEnter': 34814 return !!(props.disabled && isInteractive(type)); 34815 34816 default: 34817 return false; 34818 } 34819} 34820/** 34821 * @param {object} inst The instance, which is the source of events. 34822 * @param {string} registrationName Name of listener (e.g. `onClick`). 34823 * @return {?function} The stored callback. 34824 */ 34825 34826 34827function getListener(inst, registrationName) { 34828 var stateNode = inst.stateNode; 34829 34830 if (stateNode === null) { 34831 // Work in progress (ex: onload events in incremental mode). 34832 return null; 34833 } 34834 34835 var props = getFiberCurrentPropsFromNode(stateNode); 34836 34837 if (props === null) { 34838 // Work in progress. 34839 return null; 34840 } 34841 34842 var listener = props[registrationName]; 34843 34844 if (shouldPreventMouseEvent(registrationName, inst.type, props)) { 34845 return null; 34846 } 34847 34848 if (!(!listener || typeof listener === 'function')) { 34849 { 34850 throw Error( "Expected `" + registrationName + "` listener to be a function, instead got a value of `" + typeof listener + "` type." ); 34851 } 34852 } 34853 34854 return listener; 34855} 34856 34857var passiveBrowserEventsSupported = false; // Check if browser support events with passive listeners 34858// https://developer.mozilla.org/en-US/docs/Web/API/EventTarget/addEventListener#Safely_detecting_option_support 34859 34860if (canUseDOM) { 34861 try { 34862 var options = {}; // $FlowFixMe: Ignore Flow complaining about needing a value 34863 34864 Object.defineProperty(options, 'passive', { 34865 get: function () { 34866 passiveBrowserEventsSupported = true; 34867 } 34868 }); 34869 window.addEventListener('test', options, options); 34870 window.removeEventListener('test', options, options); 34871 } catch (e) { 34872 passiveBrowserEventsSupported = false; 34873 } 34874} 34875 34876function invokeGuardedCallbackProd(name, func, context, a, b, c, d, e, f) { 34877 var funcArgs = Array.prototype.slice.call(arguments, 3); 34878 34879 try { 34880 func.apply(context, funcArgs); 34881 } catch (error) { 34882 this.onError(error); 34883 } 34884} 34885 34886var invokeGuardedCallbackImpl = invokeGuardedCallbackProd; 34887 34888{ 34889 // In DEV mode, we swap out invokeGuardedCallback for a special version 34890 // that plays more nicely with the browser's DevTools. The idea is to preserve 34891 // "Pause on exceptions" behavior. Because React wraps all user-provided 34892 // functions in invokeGuardedCallback, and the production version of 34893 // invokeGuardedCallback uses a try-catch, all user exceptions are treated 34894 // like caught exceptions, and the DevTools won't pause unless the developer 34895 // takes the extra step of enabling pause on caught exceptions. This is 34896 // unintuitive, though, because even though React has caught the error, from 34897 // the developer's perspective, the error is uncaught. 34898 // 34899 // To preserve the expected "Pause on exceptions" behavior, we don't use a 34900 // try-catch in DEV. Instead, we synchronously dispatch a fake event to a fake 34901 // DOM node, and call the user-provided callback from inside an event handler 34902 // for that fake event. If the callback throws, the error is "captured" using 34903 // a global event handler. But because the error happens in a different 34904 // event loop context, it does not interrupt the normal program flow. 34905 // Effectively, this gives us try-catch behavior without actually using 34906 // try-catch. Neat! 34907 // Check that the browser supports the APIs we need to implement our special 34908 // DEV version of invokeGuardedCallback 34909 if (typeof window !== 'undefined' && typeof window.dispatchEvent === 'function' && typeof document !== 'undefined' && typeof document.createEvent === 'function') { 34910 var fakeNode = document.createElement('react'); 34911 34912 invokeGuardedCallbackImpl = function invokeGuardedCallbackDev(name, func, context, a, b, c, d, e, f) { 34913 // If document doesn't exist we know for sure we will crash in this method 34914 // when we call document.createEvent(). However this can cause confusing 34915 // errors: https://github.com/facebookincubator/create-react-app/issues/3482 34916 // So we preemptively throw with a better message instead. 34917 if (!(typeof document !== 'undefined')) { 34918 { 34919 throw Error( "The `document` global was defined when React was initialized, but is not defined anymore. This can happen in a test environment if a component schedules an update from an asynchronous callback, but the test has already finished running. To solve this, you can either unmount the component at the end of your test (and ensure that any asynchronous operations get canceled in `componentWillUnmount`), or you can change the test itself to be asynchronous." ); 34920 } 34921 } 34922 34923 var evt = document.createEvent('Event'); 34924 var didCall = false; // Keeps track of whether the user-provided callback threw an error. We 34925 // set this to true at the beginning, then set it to false right after 34926 // calling the function. If the function errors, `didError` will never be 34927 // set to false. This strategy works even if the browser is flaky and 34928 // fails to call our global error handler, because it doesn't rely on 34929 // the error event at all. 34930 34931 var didError = true; // Keeps track of the value of window.event so that we can reset it 34932 // during the callback to let user code access window.event in the 34933 // browsers that support it. 34934 34935 var windowEvent = window.event; // Keeps track of the descriptor of window.event to restore it after event 34936 // dispatching: https://github.com/facebook/react/issues/13688 34937 34938 var windowEventDescriptor = Object.getOwnPropertyDescriptor(window, 'event'); 34939 34940 function restoreAfterDispatch() { 34941 // We immediately remove the callback from event listeners so that 34942 // nested `invokeGuardedCallback` calls do not clash. Otherwise, a 34943 // nested call would trigger the fake event handlers of any call higher 34944 // in the stack. 34945 fakeNode.removeEventListener(evtType, callCallback, false); // We check for window.hasOwnProperty('event') to prevent the 34946 // window.event assignment in both IE <= 10 as they throw an error 34947 // "Member not found" in strict mode, and in Firefox which does not 34948 // support window.event. 34949 34950 if (typeof window.event !== 'undefined' && window.hasOwnProperty('event')) { 34951 window.event = windowEvent; 34952 } 34953 } // Create an event handler for our fake event. We will synchronously 34954 // dispatch our fake event using `dispatchEvent`. Inside the handler, we 34955 // call the user-provided callback. 34956 34957 34958 var funcArgs = Array.prototype.slice.call(arguments, 3); 34959 34960 function callCallback() { 34961 didCall = true; 34962 restoreAfterDispatch(); 34963 func.apply(context, funcArgs); 34964 didError = false; 34965 } // Create a global error event handler. We use this to capture the value 34966 // that was thrown. It's possible that this error handler will fire more 34967 // than once; for example, if non-React code also calls `dispatchEvent` 34968 // and a handler for that event throws. We should be resilient to most of 34969 // those cases. Even if our error event handler fires more than once, the 34970 // last error event is always used. If the callback actually does error, 34971 // we know that the last error event is the correct one, because it's not 34972 // possible for anything else to have happened in between our callback 34973 // erroring and the code that follows the `dispatchEvent` call below. If 34974 // the callback doesn't error, but the error event was fired, we know to 34975 // ignore it because `didError` will be false, as described above. 34976 34977 34978 var error; // Use this to track whether the error event is ever called. 34979 34980 var didSetError = false; 34981 var isCrossOriginError = false; 34982 34983 function handleWindowError(event) { 34984 error = event.error; 34985 didSetError = true; 34986 34987 if (error === null && event.colno === 0 && event.lineno === 0) { 34988 isCrossOriginError = true; 34989 } 34990 34991 if (event.defaultPrevented) { 34992 // Some other error handler has prevented default. 34993 // Browsers silence the error report if this happens. 34994 // We'll remember this to later decide whether to log it or not. 34995 if (error != null && typeof error === 'object') { 34996 try { 34997 error._suppressLogging = true; 34998 } catch (inner) {// Ignore. 34999 } 35000 } 35001 } 35002 } // Create a fake event type. 35003 35004 35005 var evtType = "react-" + (name ? name : 'invokeguardedcallback'); // Attach our event handlers 35006 35007 window.addEventListener('error', handleWindowError); 35008 fakeNode.addEventListener(evtType, callCallback, false); // Synchronously dispatch our fake event. If the user-provided function 35009 // errors, it will trigger our global error handler. 35010 35011 evt.initEvent(evtType, false, false); 35012 fakeNode.dispatchEvent(evt); 35013 35014 if (windowEventDescriptor) { 35015 Object.defineProperty(window, 'event', windowEventDescriptor); 35016 } 35017 35018 if (didCall && didError) { 35019 if (!didSetError) { 35020 // The callback errored, but the error event never fired. 35021 error = new Error('An error was thrown inside one of your components, but React ' + "doesn't know what it was. This is likely due to browser " + 'flakiness. React does its best to preserve the "Pause on ' + 'exceptions" behavior of the DevTools, which requires some ' + "DEV-mode only tricks. It's possible that these don't work in " + 'your browser. Try triggering the error in production mode, ' + 'or switching to a modern browser. If you suspect that this is ' + 'actually an issue with React, please file an issue.'); 35022 } else if (isCrossOriginError) { 35023 error = new Error("A cross-origin error was thrown. React doesn't have access to " + 'the actual error object in development. ' + 'See https://reactjs.org/link/crossorigin-error for more information.'); 35024 } 35025 35026 this.onError(error); 35027 } // Remove our event listeners 35028 35029 35030 window.removeEventListener('error', handleWindowError); 35031 35032 if (!didCall) { 35033 // Something went really wrong, and our event was not dispatched. 35034 // https://github.com/facebook/react/issues/16734 35035 // https://github.com/facebook/react/issues/16585 35036 // Fall back to the production implementation. 35037 restoreAfterDispatch(); 35038 return invokeGuardedCallbackProd.apply(this, arguments); 35039 } 35040 }; 35041 } 35042} 35043 35044var invokeGuardedCallbackImpl$1 = invokeGuardedCallbackImpl; 35045 35046var hasError = false; 35047var caughtError = null; // Used by event system to capture/rethrow the first error. 35048 35049var hasRethrowError = false; 35050var rethrowError = null; 35051var reporter = { 35052 onError: function (error) { 35053 hasError = true; 35054 caughtError = error; 35055 } 35056}; 35057/** 35058 * Call a function while guarding against errors that happens within it. 35059 * Returns an error if it throws, otherwise null. 35060 * 35061 * In production, this is implemented using a try-catch. The reason we don't 35062 * use a try-catch directly is so that we can swap out a different 35063 * implementation in DEV mode. 35064 * 35065 * @param {String} name of the guard to use for logging or debugging 35066 * @param {Function} func The function to invoke 35067 * @param {*} context The context to use when calling the function 35068 * @param {...*} args Arguments for function 35069 */ 35070 35071function invokeGuardedCallback(name, func, context, a, b, c, d, e, f) { 35072 hasError = false; 35073 caughtError = null; 35074 invokeGuardedCallbackImpl$1.apply(reporter, arguments); 35075} 35076/** 35077 * Same as invokeGuardedCallback, but instead of returning an error, it stores 35078 * it in a global so it can be rethrown by `rethrowCaughtError` later. 35079 * TODO: See if caughtError and rethrowError can be unified. 35080 * 35081 * @param {String} name of the guard to use for logging or debugging 35082 * @param {Function} func The function to invoke 35083 * @param {*} context The context to use when calling the function 35084 * @param {...*} args Arguments for function 35085 */ 35086 35087function invokeGuardedCallbackAndCatchFirstError(name, func, context, a, b, c, d, e, f) { 35088 invokeGuardedCallback.apply(this, arguments); 35089 35090 if (hasError) { 35091 var error = clearCaughtError(); 35092 35093 if (!hasRethrowError) { 35094 hasRethrowError = true; 35095 rethrowError = error; 35096 } 35097 } 35098} 35099/** 35100 * During execution of guarded functions we will capture the first error which 35101 * we will rethrow to be handled by the top level error handler. 35102 */ 35103 35104function rethrowCaughtError() { 35105 if (hasRethrowError) { 35106 var error = rethrowError; 35107 hasRethrowError = false; 35108 rethrowError = null; 35109 throw error; 35110 } 35111} 35112function hasCaughtError() { 35113 return hasError; 35114} 35115function clearCaughtError() { 35116 if (hasError) { 35117 var error = caughtError; 35118 hasError = false; 35119 caughtError = null; 35120 return error; 35121 } else { 35122 { 35123 { 35124 throw Error( "clearCaughtError was called but no error was captured. This error is likely caused by a bug in React. Please file an issue." ); 35125 } 35126 } 35127 } 35128} 35129 35130/** 35131 * `ReactInstanceMap` maintains a mapping from a public facing stateful 35132 * instance (key) and the internal representation (value). This allows public 35133 * methods to accept the user facing instance as an argument and map them back 35134 * to internal methods. 35135 * 35136 * Note that this module is currently shared and assumed to be stateless. 35137 * If this becomes an actual Map, that will break. 35138 */ 35139function get(key) { 35140 return key._reactInternals; 35141} 35142function has(key) { 35143 return key._reactInternals !== undefined; 35144} 35145function set(key, value) { 35146 key._reactInternals = value; 35147} 35148 35149// Don't change these two values. They're used by React Dev Tools. 35150var NoFlags = 35151/* */ 351520; 35153var PerformedWork = 35154/* */ 351551; // You can change the rest (and add more). 35156 35157var Placement = 35158/* */ 351592; 35160var Update = 35161/* */ 351624; 35163var PlacementAndUpdate = 35164/* */ 351656; 35166var Deletion = 35167/* */ 351688; 35169var ContentReset = 35170/* */ 3517116; 35172var Callback = 35173/* */ 3517432; 35175var DidCapture = 35176/* */ 3517764; 35178var Ref = 35179/* */ 35180128; 35181var Snapshot = 35182/* */ 35183256; 35184var Passive = 35185/* */ 35186512; // TODO (effects) Remove this bit once the new reconciler is synced to the old. 35187 35188var PassiveUnmountPendingDev = 35189/* */ 351908192; 35191var Hydrating = 35192/* */ 351931024; 35194var HydratingAndUpdate = 35195/* */ 351961028; // Passive & Update & Callback & Ref & Snapshot 35197 35198var LifecycleEffectMask = 35199/* */ 35200932; // Union of all host effects 35201 35202var HostEffectMask = 35203/* */ 352042047; // These are not really side effects, but we still reuse this field. 35205 35206var Incomplete = 35207/* */ 352082048; 35209var ShouldCapture = 35210/* */ 352114096; 35212var ForceUpdateForLegacySuspense = 35213/* */ 3521416384; // Static tags describe aspects of a fiber that are not specific to a render, 35215 35216var ReactCurrentOwner = ReactSharedInternals.ReactCurrentOwner; 35217function getNearestMountedFiber(fiber) { 35218 var node = fiber; 35219 var nearestMounted = fiber; 35220 35221 if (!fiber.alternate) { 35222 // If there is no alternate, this might be a new tree that isn't inserted 35223 // yet. If it is, then it will have a pending insertion effect on it. 35224 var nextNode = node; 35225 35226 do { 35227 node = nextNode; 35228 35229 if ((node.flags & (Placement | Hydrating)) !== NoFlags) { 35230 // This is an insertion or in-progress hydration. The nearest possible 35231 // mounted fiber is the parent but we need to continue to figure out 35232 // if that one is still mounted. 35233 nearestMounted = node.return; 35234 } 35235 35236 nextNode = node.return; 35237 } while (nextNode); 35238 } else { 35239 while (node.return) { 35240 node = node.return; 35241 } 35242 } 35243 35244 if (node.tag === HostRoot) { 35245 // TODO: Check if this was a nested HostRoot when used with 35246 // renderContainerIntoSubtree. 35247 return nearestMounted; 35248 } // If we didn't hit the root, that means that we're in an disconnected tree 35249 // that has been unmounted. 35250 35251 35252 return null; 35253} 35254function getSuspenseInstanceFromFiber(fiber) { 35255 if (fiber.tag === SuspenseComponent) { 35256 var suspenseState = fiber.memoizedState; 35257 35258 if (suspenseState === null) { 35259 var current = fiber.alternate; 35260 35261 if (current !== null) { 35262 suspenseState = current.memoizedState; 35263 } 35264 } 35265 35266 if (suspenseState !== null) { 35267 return suspenseState.dehydrated; 35268 } 35269 } 35270 35271 return null; 35272} 35273function getContainerFromFiber(fiber) { 35274 return fiber.tag === HostRoot ? fiber.stateNode.containerInfo : null; 35275} 35276function isFiberMounted(fiber) { 35277 return getNearestMountedFiber(fiber) === fiber; 35278} 35279function isMounted(component) { 35280 { 35281 var owner = ReactCurrentOwner.current; 35282 35283 if (owner !== null && owner.tag === ClassComponent) { 35284 var ownerFiber = owner; 35285 var instance = ownerFiber.stateNode; 35286 35287 if (!instance._warnedAboutRefsInRender) { 35288 error('%s is accessing isMounted inside its render() function. ' + 'render() should be a pure function of props and state. It should ' + 'never access something that requires stale data from the previous ' + 'render, such as refs. Move this logic to componentDidMount and ' + 'componentDidUpdate instead.', getComponentName(ownerFiber.type) || 'A component'); 35289 } 35290 35291 instance._warnedAboutRefsInRender = true; 35292 } 35293 } 35294 35295 var fiber = get(component); 35296 35297 if (!fiber) { 35298 return false; 35299 } 35300 35301 return getNearestMountedFiber(fiber) === fiber; 35302} 35303 35304function assertIsMounted(fiber) { 35305 if (!(getNearestMountedFiber(fiber) === fiber)) { 35306 { 35307 throw Error( "Unable to find node on an unmounted component." ); 35308 } 35309 } 35310} 35311 35312function findCurrentFiberUsingSlowPath(fiber) { 35313 var alternate = fiber.alternate; 35314 35315 if (!alternate) { 35316 // If there is no alternate, then we only need to check if it is mounted. 35317 var nearestMounted = getNearestMountedFiber(fiber); 35318 35319 if (!(nearestMounted !== null)) { 35320 { 35321 throw Error( "Unable to find node on an unmounted component." ); 35322 } 35323 } 35324 35325 if (nearestMounted !== fiber) { 35326 return null; 35327 } 35328 35329 return fiber; 35330 } // If we have two possible branches, we'll walk backwards up to the root 35331 // to see what path the root points to. On the way we may hit one of the 35332 // special cases and we'll deal with them. 35333 35334 35335 var a = fiber; 35336 var b = alternate; 35337 35338 while (true) { 35339 var parentA = a.return; 35340 35341 if (parentA === null) { 35342 // We're at the root. 35343 break; 35344 } 35345 35346 var parentB = parentA.alternate; 35347 35348 if (parentB === null) { 35349 // There is no alternate. This is an unusual case. Currently, it only 35350 // happens when a Suspense component is hidden. An extra fragment fiber 35351 // is inserted in between the Suspense fiber and its children. Skip 35352 // over this extra fragment fiber and proceed to the next parent. 35353 var nextParent = parentA.return; 35354 35355 if (nextParent !== null) { 35356 a = b = nextParent; 35357 continue; 35358 } // If there's no parent, we're at the root. 35359 35360 35361 break; 35362 } // If both copies of the parent fiber point to the same child, we can 35363 // assume that the child is current. This happens when we bailout on low 35364 // priority: the bailed out fiber's child reuses the current child. 35365 35366 35367 if (parentA.child === parentB.child) { 35368 var child = parentA.child; 35369 35370 while (child) { 35371 if (child === a) { 35372 // We've determined that A is the current branch. 35373 assertIsMounted(parentA); 35374 return fiber; 35375 } 35376 35377 if (child === b) { 35378 // We've determined that B is the current branch. 35379 assertIsMounted(parentA); 35380 return alternate; 35381 } 35382 35383 child = child.sibling; 35384 } // We should never have an alternate for any mounting node. So the only 35385 // way this could possibly happen is if this was unmounted, if at all. 35386 35387 35388 { 35389 { 35390 throw Error( "Unable to find node on an unmounted component." ); 35391 } 35392 } 35393 } 35394 35395 if (a.return !== b.return) { 35396 // The return pointer of A and the return pointer of B point to different 35397 // fibers. We assume that return pointers never criss-cross, so A must 35398 // belong to the child set of A.return, and B must belong to the child 35399 // set of B.return. 35400 a = parentA; 35401 b = parentB; 35402 } else { 35403 // The return pointers point to the same fiber. We'll have to use the 35404 // default, slow path: scan the child sets of each parent alternate to see 35405 // which child belongs to which set. 35406 // 35407 // Search parent A's child set 35408 var didFindChild = false; 35409 var _child = parentA.child; 35410 35411 while (_child) { 35412 if (_child === a) { 35413 didFindChild = true; 35414 a = parentA; 35415 b = parentB; 35416 break; 35417 } 35418 35419 if (_child === b) { 35420 didFindChild = true; 35421 b = parentA; 35422 a = parentB; 35423 break; 35424 } 35425 35426 _child = _child.sibling; 35427 } 35428 35429 if (!didFindChild) { 35430 // Search parent B's child set 35431 _child = parentB.child; 35432 35433 while (_child) { 35434 if (_child === a) { 35435 didFindChild = true; 35436 a = parentB; 35437 b = parentA; 35438 break; 35439 } 35440 35441 if (_child === b) { 35442 didFindChild = true; 35443 b = parentB; 35444 a = parentA; 35445 break; 35446 } 35447 35448 _child = _child.sibling; 35449 } 35450 35451 if (!didFindChild) { 35452 { 35453 throw Error( "Child was not found in either parent set. This indicates a bug in React related to the return pointer. Please file an issue." ); 35454 } 35455 } 35456 } 35457 } 35458 35459 if (!(a.alternate === b)) { 35460 { 35461 throw Error( "Return fibers should always be each others' alternates. This error is likely caused by a bug in React. Please file an issue." ); 35462 } 35463 } 35464 } // If the root is not a host container, we're in a disconnected tree. I.e. 35465 // unmounted. 35466 35467 35468 if (!(a.tag === HostRoot)) { 35469 { 35470 throw Error( "Unable to find node on an unmounted component." ); 35471 } 35472 } 35473 35474 if (a.stateNode.current === a) { 35475 // We've determined that A is the current branch. 35476 return fiber; 35477 } // Otherwise B has to be current branch. 35478 35479 35480 return alternate; 35481} 35482function findCurrentHostFiber(parent) { 35483 var currentParent = findCurrentFiberUsingSlowPath(parent); 35484 35485 if (!currentParent) { 35486 return null; 35487 } // Next we'll drill down this component to find the first HostComponent/Text. 35488 35489 35490 var node = currentParent; 35491 35492 while (true) { 35493 if (node.tag === HostComponent || node.tag === HostText) { 35494 return node; 35495 } else if (node.child) { 35496 node.child.return = node; 35497 node = node.child; 35498 continue; 35499 } 35500 35501 if (node === currentParent) { 35502 return null; 35503 } 35504 35505 while (!node.sibling) { 35506 if (!node.return || node.return === currentParent) { 35507 return null; 35508 } 35509 35510 node = node.return; 35511 } 35512 35513 node.sibling.return = node.return; 35514 node = node.sibling; 35515 } // Flow needs the return null here, but ESLint complains about it. 35516 // eslint-disable-next-line no-unreachable 35517 35518 35519 return null; 35520} 35521function findCurrentHostFiberWithNoPortals(parent) { 35522 var currentParent = findCurrentFiberUsingSlowPath(parent); 35523 35524 if (!currentParent) { 35525 return null; 35526 } // Next we'll drill down this component to find the first HostComponent/Text. 35527 35528 35529 var node = currentParent; 35530 35531 while (true) { 35532 if (node.tag === HostComponent || node.tag === HostText || enableFundamentalAPI ) { 35533 return node; 35534 } else if (node.child && node.tag !== HostPortal) { 35535 node.child.return = node; 35536 node = node.child; 35537 continue; 35538 } 35539 35540 if (node === currentParent) { 35541 return null; 35542 } 35543 35544 while (!node.sibling) { 35545 if (!node.return || node.return === currentParent) { 35546 return null; 35547 } 35548 35549 node = node.return; 35550 } 35551 35552 node.sibling.return = node.return; 35553 node = node.sibling; 35554 } // Flow needs the return null here, but ESLint complains about it. 35555 // eslint-disable-next-line no-unreachable 35556 35557 35558 return null; 35559} 35560function doesFiberContain(parentFiber, childFiber) { 35561 var node = childFiber; 35562 var parentFiberAlternate = parentFiber.alternate; 35563 35564 while (node !== null) { 35565 if (node === parentFiber || node === parentFiberAlternate) { 35566 return true; 35567 } 35568 35569 node = node.return; 35570 } 35571 35572 return false; 35573} 35574 35575var attemptUserBlockingHydration; 35576function setAttemptUserBlockingHydration(fn) { 35577 attemptUserBlockingHydration = fn; 35578} 35579var attemptContinuousHydration; 35580function setAttemptContinuousHydration(fn) { 35581 attemptContinuousHydration = fn; 35582} 35583var attemptHydrationAtCurrentPriority; 35584function setAttemptHydrationAtCurrentPriority(fn) { 35585 attemptHydrationAtCurrentPriority = fn; 35586} 35587var attemptHydrationAtPriority; 35588function setAttemptHydrationAtPriority(fn) { 35589 attemptHydrationAtPriority = fn; 35590} // TODO: Upgrade this definition once we're on a newer version of Flow that 35591var hasScheduledReplayAttempt = false; // The queue of discrete events to be replayed. 35592 35593var queuedDiscreteEvents = []; // Indicates if any continuous event targets are non-null for early bailout. 35594// if the last target was dehydrated. 35595 35596var queuedFocus = null; 35597var queuedDrag = null; 35598var queuedMouse = null; // For pointer events there can be one latest event per pointerId. 35599 35600var queuedPointers = new Map(); 35601var queuedPointerCaptures = new Map(); // We could consider replaying selectionchange and touchmoves too. 35602 35603var queuedExplicitHydrationTargets = []; 35604function hasQueuedDiscreteEvents() { 35605 return queuedDiscreteEvents.length > 0; 35606} 35607var discreteReplayableEvents = ['mousedown', 'mouseup', 'touchcancel', 'touchend', 'touchstart', 'auxclick', 'dblclick', 'pointercancel', 'pointerdown', 'pointerup', 'dragend', 'dragstart', 'drop', 'compositionend', 'compositionstart', 'keydown', 'keypress', 'keyup', 'input', 'textInput', // Intentionally camelCase 35608'copy', 'cut', 'paste', 'click', 'change', 'contextmenu', 'reset', 'submit']; 35609function isReplayableDiscreteEvent(eventType) { 35610 return discreteReplayableEvents.indexOf(eventType) > -1; 35611} 35612 35613function createQueuedReplayableEvent(blockedOn, domEventName, eventSystemFlags, targetContainer, nativeEvent) { 35614 return { 35615 blockedOn: blockedOn, 35616 domEventName: domEventName, 35617 eventSystemFlags: eventSystemFlags | IS_REPLAYED, 35618 nativeEvent: nativeEvent, 35619 targetContainers: [targetContainer] 35620 }; 35621} 35622 35623function queueDiscreteEvent(blockedOn, domEventName, eventSystemFlags, targetContainer, nativeEvent) { 35624 var queuedEvent = createQueuedReplayableEvent(blockedOn, domEventName, eventSystemFlags, targetContainer, nativeEvent); 35625 queuedDiscreteEvents.push(queuedEvent); 35626} // Resets the replaying for this type of continuous event to no event. 35627 35628function clearIfContinuousEvent(domEventName, nativeEvent) { 35629 switch (domEventName) { 35630 case 'focusin': 35631 case 'focusout': 35632 queuedFocus = null; 35633 break; 35634 35635 case 'dragenter': 35636 case 'dragleave': 35637 queuedDrag = null; 35638 break; 35639 35640 case 'mouseover': 35641 case 'mouseout': 35642 queuedMouse = null; 35643 break; 35644 35645 case 'pointerover': 35646 case 'pointerout': 35647 { 35648 var pointerId = nativeEvent.pointerId; 35649 queuedPointers.delete(pointerId); 35650 break; 35651 } 35652 35653 case 'gotpointercapture': 35654 case 'lostpointercapture': 35655 { 35656 var _pointerId = nativeEvent.pointerId; 35657 queuedPointerCaptures.delete(_pointerId); 35658 break; 35659 } 35660 } 35661} 35662 35663function accumulateOrCreateContinuousQueuedReplayableEvent(existingQueuedEvent, blockedOn, domEventName, eventSystemFlags, targetContainer, nativeEvent) { 35664 if (existingQueuedEvent === null || existingQueuedEvent.nativeEvent !== nativeEvent) { 35665 var queuedEvent = createQueuedReplayableEvent(blockedOn, domEventName, eventSystemFlags, targetContainer, nativeEvent); 35666 35667 if (blockedOn !== null) { 35668 var _fiber2 = getInstanceFromNode(blockedOn); 35669 35670 if (_fiber2 !== null) { 35671 // Attempt to increase the priority of this target. 35672 attemptContinuousHydration(_fiber2); 35673 } 35674 } 35675 35676 return queuedEvent; 35677 } // If we have already queued this exact event, then it's because 35678 // the different event systems have different DOM event listeners. 35679 // We can accumulate the flags, and the targetContainers, and 35680 // store a single event to be replayed. 35681 35682 35683 existingQueuedEvent.eventSystemFlags |= eventSystemFlags; 35684 var targetContainers = existingQueuedEvent.targetContainers; 35685 35686 if (targetContainer !== null && targetContainers.indexOf(targetContainer) === -1) { 35687 targetContainers.push(targetContainer); 35688 } 35689 35690 return existingQueuedEvent; 35691} 35692 35693function queueIfContinuousEvent(blockedOn, domEventName, eventSystemFlags, targetContainer, nativeEvent) { 35694 // These set relatedTarget to null because the replayed event will be treated as if we 35695 // moved from outside the window (no target) onto the target once it hydrates. 35696 // Instead of mutating we could clone the event. 35697 switch (domEventName) { 35698 case 'focusin': 35699 { 35700 var focusEvent = nativeEvent; 35701 queuedFocus = accumulateOrCreateContinuousQueuedReplayableEvent(queuedFocus, blockedOn, domEventName, eventSystemFlags, targetContainer, focusEvent); 35702 return true; 35703 } 35704 35705 case 'dragenter': 35706 { 35707 var dragEvent = nativeEvent; 35708 queuedDrag = accumulateOrCreateContinuousQueuedReplayableEvent(queuedDrag, blockedOn, domEventName, eventSystemFlags, targetContainer, dragEvent); 35709 return true; 35710 } 35711 35712 case 'mouseover': 35713 { 35714 var mouseEvent = nativeEvent; 35715 queuedMouse = accumulateOrCreateContinuousQueuedReplayableEvent(queuedMouse, blockedOn, domEventName, eventSystemFlags, targetContainer, mouseEvent); 35716 return true; 35717 } 35718 35719 case 'pointerover': 35720 { 35721 var pointerEvent = nativeEvent; 35722 var pointerId = pointerEvent.pointerId; 35723 queuedPointers.set(pointerId, accumulateOrCreateContinuousQueuedReplayableEvent(queuedPointers.get(pointerId) || null, blockedOn, domEventName, eventSystemFlags, targetContainer, pointerEvent)); 35724 return true; 35725 } 35726 35727 case 'gotpointercapture': 35728 { 35729 var _pointerEvent = nativeEvent; 35730 var _pointerId2 = _pointerEvent.pointerId; 35731 queuedPointerCaptures.set(_pointerId2, accumulateOrCreateContinuousQueuedReplayableEvent(queuedPointerCaptures.get(_pointerId2) || null, blockedOn, domEventName, eventSystemFlags, targetContainer, _pointerEvent)); 35732 return true; 35733 } 35734 } 35735 35736 return false; 35737} // Check if this target is unblocked. Returns true if it's unblocked. 35738 35739function attemptExplicitHydrationTarget(queuedTarget) { 35740 // TODO: This function shares a lot of logic with attemptToDispatchEvent. 35741 // Try to unify them. It's a bit tricky since it would require two return 35742 // values. 35743 var targetInst = getClosestInstanceFromNode(queuedTarget.target); 35744 35745 if (targetInst !== null) { 35746 var nearestMounted = getNearestMountedFiber(targetInst); 35747 35748 if (nearestMounted !== null) { 35749 var tag = nearestMounted.tag; 35750 35751 if (tag === SuspenseComponent) { 35752 var instance = getSuspenseInstanceFromFiber(nearestMounted); 35753 35754 if (instance !== null) { 35755 // We're blocked on hydrating this boundary. 35756 // Increase its priority. 35757 queuedTarget.blockedOn = instance; 35758 attemptHydrationAtPriority(queuedTarget.lanePriority, function () { 35759 Scheduler.unstable_runWithPriority(queuedTarget.priority, function () { 35760 attemptHydrationAtCurrentPriority(nearestMounted); 35761 }); 35762 }); 35763 return; 35764 } 35765 } else if (tag === HostRoot) { 35766 var root = nearestMounted.stateNode; 35767 35768 if (root.hydrate) { 35769 queuedTarget.blockedOn = getContainerFromFiber(nearestMounted); // We don't currently have a way to increase the priority of 35770 // a root other than sync. 35771 35772 return; 35773 } 35774 } 35775 } 35776 } 35777 35778 queuedTarget.blockedOn = null; 35779} 35780 35781function attemptReplayContinuousQueuedEvent(queuedEvent) { 35782 if (queuedEvent.blockedOn !== null) { 35783 return false; 35784 } 35785 35786 var targetContainers = queuedEvent.targetContainers; 35787 35788 while (targetContainers.length > 0) { 35789 var targetContainer = targetContainers[0]; 35790 var nextBlockedOn = attemptToDispatchEvent(queuedEvent.domEventName, queuedEvent.eventSystemFlags, targetContainer, queuedEvent.nativeEvent); 35791 35792 if (nextBlockedOn !== null) { 35793 // We're still blocked. Try again later. 35794 var _fiber3 = getInstanceFromNode(nextBlockedOn); 35795 35796 if (_fiber3 !== null) { 35797 attemptContinuousHydration(_fiber3); 35798 } 35799 35800 queuedEvent.blockedOn = nextBlockedOn; 35801 return false; 35802 } // This target container was successfully dispatched. Try the next. 35803 35804 35805 targetContainers.shift(); 35806 } 35807 35808 return true; 35809} 35810 35811function attemptReplayContinuousQueuedEventInMap(queuedEvent, key, map) { 35812 if (attemptReplayContinuousQueuedEvent(queuedEvent)) { 35813 map.delete(key); 35814 } 35815} 35816 35817function replayUnblockedEvents() { 35818 hasScheduledReplayAttempt = false; // First replay discrete events. 35819 35820 while (queuedDiscreteEvents.length > 0) { 35821 var nextDiscreteEvent = queuedDiscreteEvents[0]; 35822 35823 if (nextDiscreteEvent.blockedOn !== null) { 35824 // We're still blocked. 35825 // Increase the priority of this boundary to unblock 35826 // the next discrete event. 35827 var _fiber4 = getInstanceFromNode(nextDiscreteEvent.blockedOn); 35828 35829 if (_fiber4 !== null) { 35830 attemptUserBlockingHydration(_fiber4); 35831 } 35832 35833 break; 35834 } 35835 35836 var targetContainers = nextDiscreteEvent.targetContainers; 35837 35838 while (targetContainers.length > 0) { 35839 var targetContainer = targetContainers[0]; 35840 var nextBlockedOn = attemptToDispatchEvent(nextDiscreteEvent.domEventName, nextDiscreteEvent.eventSystemFlags, targetContainer, nextDiscreteEvent.nativeEvent); 35841 35842 if (nextBlockedOn !== null) { 35843 // We're still blocked. Try again later. 35844 nextDiscreteEvent.blockedOn = nextBlockedOn; 35845 break; 35846 } // This target container was successfully dispatched. Try the next. 35847 35848 35849 targetContainers.shift(); 35850 } 35851 35852 if (nextDiscreteEvent.blockedOn === null) { 35853 // We've successfully replayed the first event. Let's try the next one. 35854 queuedDiscreteEvents.shift(); 35855 } 35856 } // Next replay any continuous events. 35857 35858 35859 if (queuedFocus !== null && attemptReplayContinuousQueuedEvent(queuedFocus)) { 35860 queuedFocus = null; 35861 } 35862 35863 if (queuedDrag !== null && attemptReplayContinuousQueuedEvent(queuedDrag)) { 35864 queuedDrag = null; 35865 } 35866 35867 if (queuedMouse !== null && attemptReplayContinuousQueuedEvent(queuedMouse)) { 35868 queuedMouse = null; 35869 } 35870 35871 queuedPointers.forEach(attemptReplayContinuousQueuedEventInMap); 35872 queuedPointerCaptures.forEach(attemptReplayContinuousQueuedEventInMap); 35873} 35874 35875function scheduleCallbackIfUnblocked(queuedEvent, unblocked) { 35876 if (queuedEvent.blockedOn === unblocked) { 35877 queuedEvent.blockedOn = null; 35878 35879 if (!hasScheduledReplayAttempt) { 35880 hasScheduledReplayAttempt = true; // Schedule a callback to attempt replaying as many events as are 35881 // now unblocked. This first might not actually be unblocked yet. 35882 // We could check it early to avoid scheduling an unnecessary callback. 35883 35884 Scheduler.unstable_scheduleCallback(Scheduler.unstable_NormalPriority, replayUnblockedEvents); 35885 } 35886 } 35887} 35888 35889function retryIfBlockedOn(unblocked) { 35890 // Mark anything that was blocked on this as no longer blocked 35891 // and eligible for a replay. 35892 if (queuedDiscreteEvents.length > 0) { 35893 scheduleCallbackIfUnblocked(queuedDiscreteEvents[0], unblocked); // This is a exponential search for each boundary that commits. I think it's 35894 // worth it because we expect very few discrete events to queue up and once 35895 // we are actually fully unblocked it will be fast to replay them. 35896 35897 for (var i = 1; i < queuedDiscreteEvents.length; i++) { 35898 var queuedEvent = queuedDiscreteEvents[i]; 35899 35900 if (queuedEvent.blockedOn === unblocked) { 35901 queuedEvent.blockedOn = null; 35902 } 35903 } 35904 } 35905 35906 if (queuedFocus !== null) { 35907 scheduleCallbackIfUnblocked(queuedFocus, unblocked); 35908 } 35909 35910 if (queuedDrag !== null) { 35911 scheduleCallbackIfUnblocked(queuedDrag, unblocked); 35912 } 35913 35914 if (queuedMouse !== null) { 35915 scheduleCallbackIfUnblocked(queuedMouse, unblocked); 35916 } 35917 35918 var unblock = function (queuedEvent) { 35919 return scheduleCallbackIfUnblocked(queuedEvent, unblocked); 35920 }; 35921 35922 queuedPointers.forEach(unblock); 35923 queuedPointerCaptures.forEach(unblock); 35924 35925 for (var _i = 0; _i < queuedExplicitHydrationTargets.length; _i++) { 35926 var queuedTarget = queuedExplicitHydrationTargets[_i]; 35927 35928 if (queuedTarget.blockedOn === unblocked) { 35929 queuedTarget.blockedOn = null; 35930 } 35931 } 35932 35933 while (queuedExplicitHydrationTargets.length > 0) { 35934 var nextExplicitTarget = queuedExplicitHydrationTargets[0]; 35935 35936 if (nextExplicitTarget.blockedOn !== null) { 35937 // We're still blocked. 35938 break; 35939 } else { 35940 attemptExplicitHydrationTarget(nextExplicitTarget); 35941 35942 if (nextExplicitTarget.blockedOn === null) { 35943 // We're unblocked. 35944 queuedExplicitHydrationTargets.shift(); 35945 } 35946 } 35947 } 35948} 35949 35950var DiscreteEvent = 0; 35951var UserBlockingEvent = 1; 35952var ContinuousEvent = 2; 35953 35954/** 35955 * Generate a mapping of standard vendor prefixes using the defined style property and event name. 35956 * 35957 * @param {string} styleProp 35958 * @param {string} eventName 35959 * @returns {object} 35960 */ 35961 35962function makePrefixMap(styleProp, eventName) { 35963 var prefixes = {}; 35964 prefixes[styleProp.toLowerCase()] = eventName.toLowerCase(); 35965 prefixes['Webkit' + styleProp] = 'webkit' + eventName; 35966 prefixes['Moz' + styleProp] = 'moz' + eventName; 35967 return prefixes; 35968} 35969/** 35970 * A list of event names to a configurable list of vendor prefixes. 35971 */ 35972 35973 35974var vendorPrefixes = { 35975 animationend: makePrefixMap('Animation', 'AnimationEnd'), 35976 animationiteration: makePrefixMap('Animation', 'AnimationIteration'), 35977 animationstart: makePrefixMap('Animation', 'AnimationStart'), 35978 transitionend: makePrefixMap('Transition', 'TransitionEnd') 35979}; 35980/** 35981 * Event names that have already been detected and prefixed (if applicable). 35982 */ 35983 35984var prefixedEventNames = {}; 35985/** 35986 * Element to check for prefixes on. 35987 */ 35988 35989var style = {}; 35990/** 35991 * Bootstrap if a DOM exists. 35992 */ 35993 35994if (canUseDOM) { 35995 style = document.createElement('div').style; // On some platforms, in particular some releases of Android 4.x, 35996 // the un-prefixed "animation" and "transition" properties are defined on the 35997 // style object but the events that fire will still be prefixed, so we need 35998 // to check if the un-prefixed events are usable, and if not remove them from the map. 35999 36000 if (!('AnimationEvent' in window)) { 36001 delete vendorPrefixes.animationend.animation; 36002 delete vendorPrefixes.animationiteration.animation; 36003 delete vendorPrefixes.animationstart.animation; 36004 } // Same as above 36005 36006 36007 if (!('TransitionEvent' in window)) { 36008 delete vendorPrefixes.transitionend.transition; 36009 } 36010} 36011/** 36012 * Attempts to determine the correct vendor prefixed event name. 36013 * 36014 * @param {string} eventName 36015 * @returns {string} 36016 */ 36017 36018 36019function getVendorPrefixedEventName(eventName) { 36020 if (prefixedEventNames[eventName]) { 36021 return prefixedEventNames[eventName]; 36022 } else if (!vendorPrefixes[eventName]) { 36023 return eventName; 36024 } 36025 36026 var prefixMap = vendorPrefixes[eventName]; 36027 36028 for (var styleProp in prefixMap) { 36029 if (prefixMap.hasOwnProperty(styleProp) && styleProp in style) { 36030 return prefixedEventNames[eventName] = prefixMap[styleProp]; 36031 } 36032 } 36033 36034 return eventName; 36035} 36036 36037var ANIMATION_END = getVendorPrefixedEventName('animationend'); 36038var ANIMATION_ITERATION = getVendorPrefixedEventName('animationiteration'); 36039var ANIMATION_START = getVendorPrefixedEventName('animationstart'); 36040var TRANSITION_END = getVendorPrefixedEventName('transitionend'); 36041 36042var topLevelEventsToReactNames = new Map(); 36043var eventPriorities = new Map(); // We store most of the events in this module in pairs of two strings so we can re-use 36044// the code required to apply the same logic for event prioritization and that of the 36045// SimpleEventPlugin. This complicates things slightly, but the aim is to reduce code 36046// duplication (for which there would be quite a bit). For the events that are not needed 36047// for the SimpleEventPlugin (otherDiscreteEvents) we process them separately as an 36048// array of top level events. 36049// Lastly, we ignore prettier so we can keep the formatting sane. 36050// prettier-ignore 36051 36052var discreteEventPairsForSimpleEventPlugin = ['cancel', 'cancel', 'click', 'click', 'close', 'close', 'contextmenu', 'contextMenu', 'copy', 'copy', 'cut', 'cut', 'auxclick', 'auxClick', 'dblclick', 'doubleClick', // Careful! 36053'dragend', 'dragEnd', 'dragstart', 'dragStart', 'drop', 'drop', 'focusin', 'focus', // Careful! 36054'focusout', 'blur', // Careful! 36055'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']; 36056var otherDiscreteEvents = ['change', 'selectionchange', 'textInput', 'compositionstart', 'compositionend', 'compositionupdate']; 36057 36058 36059var userBlockingPairsForSimpleEventPlugin = ['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']; // prettier-ignore 36060 36061var continuousPairsForSimpleEventPlugin = ['abort', 'abort', ANIMATION_END, 'animationEnd', ANIMATION_ITERATION, 'animationIteration', ANIMATION_START, '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', TRANSITION_END, 'transitionEnd', 'waiting', 'waiting']; 36062/** 36063 * Turns 36064 * ['abort', ...] 36065 * 36066 * into 36067 * 36068 * topLevelEventsToReactNames = new Map([ 36069 * ['abort', 'onAbort'], 36070 * ]); 36071 * 36072 * and registers them. 36073 */ 36074 36075function registerSimplePluginEventsAndSetTheirPriorities(eventTypes, priority) { 36076 // As the event types are in pairs of two, we need to iterate 36077 // through in twos. The events are in pairs of two to save code 36078 // and improve init perf of processing this array, as it will 36079 // result in far fewer object allocations and property accesses 36080 // if we only use three arrays to process all the categories of 36081 // instead of tuples. 36082 for (var i = 0; i < eventTypes.length; i += 2) { 36083 var topEvent = eventTypes[i]; 36084 var event = eventTypes[i + 1]; 36085 var capitalizedEvent = event[0].toUpperCase() + event.slice(1); 36086 var reactName = 'on' + capitalizedEvent; 36087 eventPriorities.set(topEvent, priority); 36088 topLevelEventsToReactNames.set(topEvent, reactName); 36089 registerTwoPhaseEvent(reactName, [topEvent]); 36090 } 36091} 36092 36093function setEventPriorities(eventTypes, priority) { 36094 for (var i = 0; i < eventTypes.length; i++) { 36095 eventPriorities.set(eventTypes[i], priority); 36096 } 36097} 36098 36099function getEventPriorityForPluginSystem(domEventName) { 36100 var priority = eventPriorities.get(domEventName); // Default to a ContinuousEvent. Note: we might 36101 // want to warn if we can't detect the priority 36102 // for the event. 36103 36104 return priority === undefined ? ContinuousEvent : priority; 36105} 36106function registerSimpleEvents() { 36107 registerSimplePluginEventsAndSetTheirPriorities(discreteEventPairsForSimpleEventPlugin, DiscreteEvent); 36108 registerSimplePluginEventsAndSetTheirPriorities(userBlockingPairsForSimpleEventPlugin, UserBlockingEvent); 36109 registerSimplePluginEventsAndSetTheirPriorities(continuousPairsForSimpleEventPlugin, ContinuousEvent); 36110 setEventPriorities(otherDiscreteEvents, DiscreteEvent); 36111} 36112 36113var Scheduler_now = Scheduler.unstable_now; 36114 36115{ 36116 // Provide explicit error message when production+profiling bundle of e.g. 36117 // react-dom is used with production (non-profiling) bundle of 36118 // scheduler/tracing 36119 if (!(tracing.__interactionsRef != null && tracing.__interactionsRef.current != null)) { 36120 { 36121 throw Error( "It is not supported to run the profiling version of a renderer (for example, `react-dom/profiling`) without also replacing the `scheduler/tracing` module with `scheduler/tracing-profiling`. Your bundler might have a setting for aliasing both modules. Learn more at https://reactjs.org/link/profiling" ); 36122 } 36123 } 36124} 36125// ascending numbers so we can compare them like numbers. They start at 90 to 36126// avoid clashing with Scheduler's priorities. 36127 36128var ImmediatePriority = 99; 36129var UserBlockingPriority = 98; 36130var NormalPriority = 97; 36131var LowPriority = 96; 36132var IdlePriority = 95; // NoPriority is the absence of priority. Also React-only. 36133 36134var NoPriority = 90; 36135var initialTimeMs = Scheduler_now(); // If the initial timestamp is reasonably small, use Scheduler's `now` directly. 36136 36137var SyncLanePriority = 15; 36138var SyncBatchedLanePriority = 14; 36139var InputDiscreteHydrationLanePriority = 13; 36140var InputDiscreteLanePriority = 12; 36141var InputContinuousHydrationLanePriority = 11; 36142var InputContinuousLanePriority = 10; 36143var DefaultHydrationLanePriority = 9; 36144var DefaultLanePriority = 8; 36145var TransitionHydrationPriority = 7; 36146var TransitionPriority = 6; 36147var RetryLanePriority = 5; 36148var SelectiveHydrationLanePriority = 4; 36149var IdleHydrationLanePriority = 3; 36150var IdleLanePriority = 2; 36151var OffscreenLanePriority = 1; 36152var NoLanePriority = 0; 36153var TotalLanes = 31; 36154var NoLanes = 36155/* */ 361560; 36157var NoLane = 36158/* */ 361590; 36160var SyncLane = 36161/* */ 361621; 36163var SyncBatchedLane = 36164/* */ 361652; 36166var InputDiscreteHydrationLane = 36167/* */ 361684; 36169var InputDiscreteLanes = 36170/* */ 3617124; 36172var InputContinuousHydrationLane = 36173/* */ 3617432; 36175var InputContinuousLanes = 36176/* */ 36177192; 36178var DefaultHydrationLane = 36179/* */ 36180256; 36181var DefaultLanes = 36182/* */ 361833584; 36184var TransitionHydrationLane = 36185/* */ 361864096; 36187var TransitionLanes = 36188/* */ 361894186112; 36190var RetryLanes = 36191/* */ 3619262914560; 36193var SomeRetryLane = 36194/* */ 3619533554432; 36196var SelectiveHydrationLane = 36197/* */ 3619867108864; 36199var NonIdleLanes = 36200/* */ 36201134217727; 36202var IdleHydrationLane = 36203/* */ 36204134217728; 36205var IdleLanes = 36206/* */ 36207805306368; 36208var OffscreenLane = 36209/* */ 362101073741824; 36211var NoTimestamp = -1; 36212function setCurrentUpdateLanePriority(newLanePriority) { 36213} // "Registers" used to "return" multiple values 36214// Used by getHighestPriorityLanes and getNextLanes: 36215 36216var return_highestLanePriority = DefaultLanePriority; 36217 36218function getHighestPriorityLanes(lanes) { 36219 if ((SyncLane & lanes) !== NoLanes) { 36220 return_highestLanePriority = SyncLanePriority; 36221 return SyncLane; 36222 } 36223 36224 if ((SyncBatchedLane & lanes) !== NoLanes) { 36225 return_highestLanePriority = SyncBatchedLanePriority; 36226 return SyncBatchedLane; 36227 } 36228 36229 if ((InputDiscreteHydrationLane & lanes) !== NoLanes) { 36230 return_highestLanePriority = InputDiscreteHydrationLanePriority; 36231 return InputDiscreteHydrationLane; 36232 } 36233 36234 var inputDiscreteLanes = InputDiscreteLanes & lanes; 36235 36236 if (inputDiscreteLanes !== NoLanes) { 36237 return_highestLanePriority = InputDiscreteLanePriority; 36238 return inputDiscreteLanes; 36239 } 36240 36241 if ((lanes & InputContinuousHydrationLane) !== NoLanes) { 36242 return_highestLanePriority = InputContinuousHydrationLanePriority; 36243 return InputContinuousHydrationLane; 36244 } 36245 36246 var inputContinuousLanes = InputContinuousLanes & lanes; 36247 36248 if (inputContinuousLanes !== NoLanes) { 36249 return_highestLanePriority = InputContinuousLanePriority; 36250 return inputContinuousLanes; 36251 } 36252 36253 if ((lanes & DefaultHydrationLane) !== NoLanes) { 36254 return_highestLanePriority = DefaultHydrationLanePriority; 36255 return DefaultHydrationLane; 36256 } 36257 36258 var defaultLanes = DefaultLanes & lanes; 36259 36260 if (defaultLanes !== NoLanes) { 36261 return_highestLanePriority = DefaultLanePriority; 36262 return defaultLanes; 36263 } 36264 36265 if ((lanes & TransitionHydrationLane) !== NoLanes) { 36266 return_highestLanePriority = TransitionHydrationPriority; 36267 return TransitionHydrationLane; 36268 } 36269 36270 var transitionLanes = TransitionLanes & lanes; 36271 36272 if (transitionLanes !== NoLanes) { 36273 return_highestLanePriority = TransitionPriority; 36274 return transitionLanes; 36275 } 36276 36277 var retryLanes = RetryLanes & lanes; 36278 36279 if (retryLanes !== NoLanes) { 36280 return_highestLanePriority = RetryLanePriority; 36281 return retryLanes; 36282 } 36283 36284 if (lanes & SelectiveHydrationLane) { 36285 return_highestLanePriority = SelectiveHydrationLanePriority; 36286 return SelectiveHydrationLane; 36287 } 36288 36289 if ((lanes & IdleHydrationLane) !== NoLanes) { 36290 return_highestLanePriority = IdleHydrationLanePriority; 36291 return IdleHydrationLane; 36292 } 36293 36294 var idleLanes = IdleLanes & lanes; 36295 36296 if (idleLanes !== NoLanes) { 36297 return_highestLanePriority = IdleLanePriority; 36298 return idleLanes; 36299 } 36300 36301 if ((OffscreenLane & lanes) !== NoLanes) { 36302 return_highestLanePriority = OffscreenLanePriority; 36303 return OffscreenLane; 36304 } 36305 36306 { 36307 error('Should have found matching lanes. This is a bug in React.'); 36308 } // This shouldn't be reachable, but as a fallback, return the entire bitmask. 36309 36310 36311 return_highestLanePriority = DefaultLanePriority; 36312 return lanes; 36313} 36314 36315function schedulerPriorityToLanePriority(schedulerPriorityLevel) { 36316 switch (schedulerPriorityLevel) { 36317 case ImmediatePriority: 36318 return SyncLanePriority; 36319 36320 case UserBlockingPriority: 36321 return InputContinuousLanePriority; 36322 36323 case NormalPriority: 36324 case LowPriority: 36325 // TODO: Handle LowSchedulerPriority, somehow. Maybe the same lane as hydration. 36326 return DefaultLanePriority; 36327 36328 case IdlePriority: 36329 return IdleLanePriority; 36330 36331 default: 36332 return NoLanePriority; 36333 } 36334} 36335function lanePriorityToSchedulerPriority(lanePriority) { 36336 switch (lanePriority) { 36337 case SyncLanePriority: 36338 case SyncBatchedLanePriority: 36339 return ImmediatePriority; 36340 36341 case InputDiscreteHydrationLanePriority: 36342 case InputDiscreteLanePriority: 36343 case InputContinuousHydrationLanePriority: 36344 case InputContinuousLanePriority: 36345 return UserBlockingPriority; 36346 36347 case DefaultHydrationLanePriority: 36348 case DefaultLanePriority: 36349 case TransitionHydrationPriority: 36350 case TransitionPriority: 36351 case SelectiveHydrationLanePriority: 36352 case RetryLanePriority: 36353 return NormalPriority; 36354 36355 case IdleHydrationLanePriority: 36356 case IdleLanePriority: 36357 case OffscreenLanePriority: 36358 return IdlePriority; 36359 36360 case NoLanePriority: 36361 return NoPriority; 36362 36363 default: 36364 { 36365 { 36366 throw Error( "Invalid update priority: " + lanePriority + ". This is a bug in React." ); 36367 } 36368 } 36369 36370 } 36371} 36372function getNextLanes(root, wipLanes) { 36373 // Early bailout if there's no pending work left. 36374 var pendingLanes = root.pendingLanes; 36375 36376 if (pendingLanes === NoLanes) { 36377 return_highestLanePriority = NoLanePriority; 36378 return NoLanes; 36379 } 36380 36381 var nextLanes = NoLanes; 36382 var nextLanePriority = NoLanePriority; 36383 var expiredLanes = root.expiredLanes; 36384 var suspendedLanes = root.suspendedLanes; 36385 var pingedLanes = root.pingedLanes; // Check if any work has expired. 36386 36387 if (expiredLanes !== NoLanes) { 36388 nextLanes = expiredLanes; 36389 nextLanePriority = return_highestLanePriority = SyncLanePriority; 36390 } else { 36391 // Do not work on any idle work until all the non-idle work has finished, 36392 // even if the work is suspended. 36393 var nonIdlePendingLanes = pendingLanes & NonIdleLanes; 36394 36395 if (nonIdlePendingLanes !== NoLanes) { 36396 var nonIdleUnblockedLanes = nonIdlePendingLanes & ~suspendedLanes; 36397 36398 if (nonIdleUnblockedLanes !== NoLanes) { 36399 nextLanes = getHighestPriorityLanes(nonIdleUnblockedLanes); 36400 nextLanePriority = return_highestLanePriority; 36401 } else { 36402 var nonIdlePingedLanes = nonIdlePendingLanes & pingedLanes; 36403 36404 if (nonIdlePingedLanes !== NoLanes) { 36405 nextLanes = getHighestPriorityLanes(nonIdlePingedLanes); 36406 nextLanePriority = return_highestLanePriority; 36407 } 36408 } 36409 } else { 36410 // The only remaining work is Idle. 36411 var unblockedLanes = pendingLanes & ~suspendedLanes; 36412 36413 if (unblockedLanes !== NoLanes) { 36414 nextLanes = getHighestPriorityLanes(unblockedLanes); 36415 nextLanePriority = return_highestLanePriority; 36416 } else { 36417 if (pingedLanes !== NoLanes) { 36418 nextLanes = getHighestPriorityLanes(pingedLanes); 36419 nextLanePriority = return_highestLanePriority; 36420 } 36421 } 36422 } 36423 } 36424 36425 if (nextLanes === NoLanes) { 36426 // This should only be reachable if we're suspended 36427 // TODO: Consider warning in this path if a fallback timer is not scheduled. 36428 return NoLanes; 36429 } // If there are higher priority lanes, we'll include them even if they 36430 // are suspended. 36431 36432 36433 nextLanes = pendingLanes & getEqualOrHigherPriorityLanes(nextLanes); // If we're already in the middle of a render, switching lanes will interrupt 36434 // it and we'll lose our progress. We should only do this if the new lanes are 36435 // higher priority. 36436 36437 if (wipLanes !== NoLanes && wipLanes !== nextLanes && // If we already suspended with a delay, then interrupting is fine. Don't 36438 // bother waiting until the root is complete. 36439 (wipLanes & suspendedLanes) === NoLanes) { 36440 getHighestPriorityLanes(wipLanes); 36441 var wipLanePriority = return_highestLanePriority; 36442 36443 if (nextLanePriority <= wipLanePriority) { 36444 return wipLanes; 36445 } else { 36446 return_highestLanePriority = nextLanePriority; 36447 } 36448 } // Check for entangled lanes and add them to the batch. 36449 // 36450 // A lane is said to be entangled with another when it's not allowed to render 36451 // in a batch that does not also include the other lane. Typically we do this 36452 // when multiple updates have the same source, and we only want to respond to 36453 // the most recent event from that source. 36454 // 36455 // Note that we apply entanglements *after* checking for partial work above. 36456 // This means that if a lane is entangled during an interleaved event while 36457 // it's already rendering, we won't interrupt it. This is intentional, since 36458 // entanglement is usually "best effort": we'll try our best to render the 36459 // lanes in the same batch, but it's not worth throwing out partially 36460 // completed work in order to do it. 36461 // 36462 // For those exceptions where entanglement is semantically important, like 36463 // useMutableSource, we should ensure that there is no partial work at the 36464 // time we apply the entanglement. 36465 36466 36467 var entangledLanes = root.entangledLanes; 36468 36469 if (entangledLanes !== NoLanes) { 36470 var entanglements = root.entanglements; 36471 var lanes = nextLanes & entangledLanes; 36472 36473 while (lanes > 0) { 36474 var index = pickArbitraryLaneIndex(lanes); 36475 var lane = 1 << index; 36476 nextLanes |= entanglements[index]; 36477 lanes &= ~lane; 36478 } 36479 } 36480 36481 return nextLanes; 36482} 36483function getMostRecentEventTime(root, lanes) { 36484 var eventTimes = root.eventTimes; 36485 var mostRecentEventTime = NoTimestamp; 36486 36487 while (lanes > 0) { 36488 var index = pickArbitraryLaneIndex(lanes); 36489 var lane = 1 << index; 36490 var eventTime = eventTimes[index]; 36491 36492 if (eventTime > mostRecentEventTime) { 36493 mostRecentEventTime = eventTime; 36494 } 36495 36496 lanes &= ~lane; 36497 } 36498 36499 return mostRecentEventTime; 36500} 36501 36502function computeExpirationTime(lane, currentTime) { 36503 // TODO: Expiration heuristic is constant per lane, so could use a map. 36504 getHighestPriorityLanes(lane); 36505 var priority = return_highestLanePriority; 36506 36507 if (priority >= InputContinuousLanePriority) { 36508 // User interactions should expire slightly more quickly. 36509 // 36510 // NOTE: This is set to the corresponding constant as in Scheduler.js. When 36511 // we made it larger, a product metric in www regressed, suggesting there's 36512 // a user interaction that's being starved by a series of synchronous 36513 // updates. If that theory is correct, the proper solution is to fix the 36514 // starvation. However, this scenario supports the idea that expiration 36515 // times are an important safeguard when starvation does happen. 36516 // 36517 // Also note that, in the case of user input specifically, this will soon no 36518 // longer be an issue because we plan to make user input synchronous by 36519 // default (until you enter `startTransition`, of course.) 36520 // 36521 // If weren't planning to make these updates synchronous soon anyway, I 36522 // would probably make this number a configurable parameter. 36523 return currentTime + 250; 36524 } else if (priority >= TransitionPriority) { 36525 return currentTime + 5000; 36526 } else { 36527 // Anything idle priority or lower should never expire. 36528 return NoTimestamp; 36529 } 36530} 36531 36532function markStarvedLanesAsExpired(root, currentTime) { 36533 // TODO: This gets called every time we yield. We can optimize by storing 36534 // the earliest expiration time on the root. Then use that to quickly bail out 36535 // of this function. 36536 var pendingLanes = root.pendingLanes; 36537 var suspendedLanes = root.suspendedLanes; 36538 var pingedLanes = root.pingedLanes; 36539 var expirationTimes = root.expirationTimes; // Iterate through the pending lanes and check if we've reached their 36540 // expiration time. If so, we'll assume the update is being starved and mark 36541 // it as expired to force it to finish. 36542 36543 var lanes = pendingLanes; 36544 36545 while (lanes > 0) { 36546 var index = pickArbitraryLaneIndex(lanes); 36547 var lane = 1 << index; 36548 var expirationTime = expirationTimes[index]; 36549 36550 if (expirationTime === NoTimestamp) { 36551 // Found a pending lane with no expiration time. If it's not suspended, or 36552 // if it's pinged, assume it's CPU-bound. Compute a new expiration time 36553 // using the current time. 36554 if ((lane & suspendedLanes) === NoLanes || (lane & pingedLanes) !== NoLanes) { 36555 // Assumes timestamps are monotonically increasing. 36556 expirationTimes[index] = computeExpirationTime(lane, currentTime); 36557 } 36558 } else if (expirationTime <= currentTime) { 36559 // This lane expired 36560 root.expiredLanes |= lane; 36561 } 36562 36563 lanes &= ~lane; 36564 } 36565} // This returns the highest priority pending lanes regardless of whether they 36566function getLanesToRetrySynchronouslyOnError(root) { 36567 var everythingButOffscreen = root.pendingLanes & ~OffscreenLane; 36568 36569 if (everythingButOffscreen !== NoLanes) { 36570 return everythingButOffscreen; 36571 } 36572 36573 if (everythingButOffscreen & OffscreenLane) { 36574 return OffscreenLane; 36575 } 36576 36577 return NoLanes; 36578} 36579function returnNextLanesPriority() { 36580 return return_highestLanePriority; 36581} 36582function includesNonIdleWork(lanes) { 36583 return (lanes & NonIdleLanes) !== NoLanes; 36584} 36585function includesOnlyRetries(lanes) { 36586 return (lanes & RetryLanes) === lanes; 36587} 36588function includesOnlyTransitions(lanes) { 36589 return (lanes & TransitionLanes) === lanes; 36590} // To ensure consistency across multiple updates in the same event, this should 36591// be a pure function, so that it always returns the same lane for given inputs. 36592 36593function findUpdateLane(lanePriority, wipLanes) { 36594 switch (lanePriority) { 36595 case NoLanePriority: 36596 break; 36597 36598 case SyncLanePriority: 36599 return SyncLane; 36600 36601 case SyncBatchedLanePriority: 36602 return SyncBatchedLane; 36603 36604 case InputDiscreteLanePriority: 36605 { 36606 var _lane = pickArbitraryLane(InputDiscreteLanes & ~wipLanes); 36607 36608 if (_lane === NoLane) { 36609 // Shift to the next priority level 36610 return findUpdateLane(InputContinuousLanePriority, wipLanes); 36611 } 36612 36613 return _lane; 36614 } 36615 36616 case InputContinuousLanePriority: 36617 { 36618 var _lane2 = pickArbitraryLane(InputContinuousLanes & ~wipLanes); 36619 36620 if (_lane2 === NoLane) { 36621 // Shift to the next priority level 36622 return findUpdateLane(DefaultLanePriority, wipLanes); 36623 } 36624 36625 return _lane2; 36626 } 36627 36628 case DefaultLanePriority: 36629 { 36630 var _lane3 = pickArbitraryLane(DefaultLanes & ~wipLanes); 36631 36632 if (_lane3 === NoLane) { 36633 // If all the default lanes are already being worked on, look for a 36634 // lane in the transition range. 36635 _lane3 = pickArbitraryLane(TransitionLanes & ~wipLanes); 36636 36637 if (_lane3 === NoLane) { 36638 // All the transition lanes are taken, too. This should be very 36639 // rare, but as a last resort, pick a default lane. This will have 36640 // the effect of interrupting the current work-in-progress render. 36641 _lane3 = pickArbitraryLane(DefaultLanes); 36642 } 36643 } 36644 36645 return _lane3; 36646 } 36647 36648 case TransitionPriority: // Should be handled by findTransitionLane instead 36649 36650 case RetryLanePriority: 36651 // Should be handled by findRetryLane instead 36652 break; 36653 36654 case IdleLanePriority: 36655 var lane = pickArbitraryLane(IdleLanes & ~wipLanes); 36656 36657 if (lane === NoLane) { 36658 lane = pickArbitraryLane(IdleLanes); 36659 } 36660 36661 return lane; 36662 } 36663 36664 { 36665 { 36666 throw Error( "Invalid update priority: " + lanePriority + ". This is a bug in React." ); 36667 } 36668 } 36669} // To ensure consistency across multiple updates in the same event, this should 36670// be pure function, so that it always returns the same lane for given inputs. 36671 36672function findTransitionLane(wipLanes, pendingLanes) { 36673 // First look for lanes that are completely unclaimed, i.e. have no 36674 // pending work. 36675 var lane = pickArbitraryLane(TransitionLanes & ~pendingLanes); 36676 36677 if (lane === NoLane) { 36678 // If all lanes have pending work, look for a lane that isn't currently 36679 // being worked on. 36680 lane = pickArbitraryLane(TransitionLanes & ~wipLanes); 36681 36682 if (lane === NoLane) { 36683 // If everything is being worked on, pick any lane. This has the 36684 // effect of interrupting the current work-in-progress. 36685 lane = pickArbitraryLane(TransitionLanes); 36686 } 36687 } 36688 36689 return lane; 36690} // To ensure consistency across multiple updates in the same event, this should 36691// be pure function, so that it always returns the same lane for given inputs. 36692 36693function findRetryLane(wipLanes) { 36694 // This is a fork of `findUpdateLane` designed specifically for Suspense 36695 // "retries" â a special update that attempts to flip a Suspense boundary 36696 // from its placeholder state to its primary/resolved state. 36697 var lane = pickArbitraryLane(RetryLanes & ~wipLanes); 36698 36699 if (lane === NoLane) { 36700 lane = pickArbitraryLane(RetryLanes); 36701 } 36702 36703 return lane; 36704} 36705 36706function getHighestPriorityLane(lanes) { 36707 return lanes & -lanes; 36708} 36709 36710function getLowestPriorityLane(lanes) { 36711 // This finds the most significant non-zero bit. 36712 var index = 31 - clz32(lanes); 36713 return index < 0 ? NoLanes : 1 << index; 36714} 36715 36716function getEqualOrHigherPriorityLanes(lanes) { 36717 return (getLowestPriorityLane(lanes) << 1) - 1; 36718} 36719 36720function pickArbitraryLane(lanes) { 36721 // This wrapper function gets inlined. Only exists so to communicate that it 36722 // doesn't matter which bit is selected; you can pick any bit without 36723 // affecting the algorithms where its used. Here I'm using 36724 // getHighestPriorityLane because it requires the fewest operations. 36725 return getHighestPriorityLane(lanes); 36726} 36727 36728function pickArbitraryLaneIndex(lanes) { 36729 return 31 - clz32(lanes); 36730} 36731 36732function laneToIndex(lane) { 36733 return pickArbitraryLaneIndex(lane); 36734} 36735 36736function includesSomeLane(a, b) { 36737 return (a & b) !== NoLanes; 36738} 36739function isSubsetOfLanes(set, subset) { 36740 return (set & subset) === subset; 36741} 36742function mergeLanes(a, b) { 36743 return a | b; 36744} 36745function removeLanes(set, subset) { 36746 return set & ~subset; 36747} // Seems redundant, but it changes the type from a single lane (used for 36748// updates) to a group of lanes (used for flushing work). 36749 36750function laneToLanes(lane) { 36751 return lane; 36752} 36753function higherPriorityLane(a, b) { 36754 // This works because the bit ranges decrease in priority as you go left. 36755 return a !== NoLane && a < b ? a : b; 36756} 36757function createLaneMap(initial) { 36758 // Intentionally pushing one by one. 36759 // https://v8.dev/blog/elements-kinds#avoid-creating-holes 36760 var laneMap = []; 36761 36762 for (var i = 0; i < TotalLanes; i++) { 36763 laneMap.push(initial); 36764 } 36765 36766 return laneMap; 36767} 36768function markRootUpdated(root, updateLane, eventTime) { 36769 root.pendingLanes |= updateLane; // TODO: Theoretically, any update to any lane can unblock any other lane. But 36770 // it's not practical to try every single possible combination. We need a 36771 // heuristic to decide which lanes to attempt to render, and in which batches. 36772 // For now, we use the same heuristic as in the old ExpirationTimes model: 36773 // retry any lane at equal or lower priority, but don't try updates at higher 36774 // priority without also including the lower priority updates. This works well 36775 // when considering updates across different priority levels, but isn't 36776 // sufficient for updates within the same priority, since we want to treat 36777 // those updates as parallel. 36778 // Unsuspend any update at equal or lower priority. 36779 36780 var higherPriorityLanes = updateLane - 1; // Turns 0b1000 into 0b0111 36781 36782 root.suspendedLanes &= higherPriorityLanes; 36783 root.pingedLanes &= higherPriorityLanes; 36784 var eventTimes = root.eventTimes; 36785 var index = laneToIndex(updateLane); // We can always overwrite an existing timestamp because we prefer the most 36786 // recent event, and we assume time is monotonically increasing. 36787 36788 eventTimes[index] = eventTime; 36789} 36790function markRootSuspended(root, suspendedLanes) { 36791 root.suspendedLanes |= suspendedLanes; 36792 root.pingedLanes &= ~suspendedLanes; // The suspended lanes are no longer CPU-bound. Clear their expiration times. 36793 36794 var expirationTimes = root.expirationTimes; 36795 var lanes = suspendedLanes; 36796 36797 while (lanes > 0) { 36798 var index = pickArbitraryLaneIndex(lanes); 36799 var lane = 1 << index; 36800 expirationTimes[index] = NoTimestamp; 36801 lanes &= ~lane; 36802 } 36803} 36804function markRootPinged(root, pingedLanes, eventTime) { 36805 root.pingedLanes |= root.suspendedLanes & pingedLanes; 36806} 36807function markDiscreteUpdatesExpired(root) { 36808 root.expiredLanes |= InputDiscreteLanes & root.pendingLanes; 36809} 36810function hasDiscreteLanes(lanes) { 36811 return (lanes & InputDiscreteLanes) !== NoLanes; 36812} 36813function markRootMutableRead(root, updateLane) { 36814 root.mutableReadLanes |= updateLane & root.pendingLanes; 36815} 36816function markRootFinished(root, remainingLanes) { 36817 var noLongerPendingLanes = root.pendingLanes & ~remainingLanes; 36818 root.pendingLanes = remainingLanes; // Let's try everything again 36819 36820 root.suspendedLanes = 0; 36821 root.pingedLanes = 0; 36822 root.expiredLanes &= remainingLanes; 36823 root.mutableReadLanes &= remainingLanes; 36824 root.entangledLanes &= remainingLanes; 36825 var entanglements = root.entanglements; 36826 var eventTimes = root.eventTimes; 36827 var expirationTimes = root.expirationTimes; // Clear the lanes that no longer have pending work 36828 36829 var lanes = noLongerPendingLanes; 36830 36831 while (lanes > 0) { 36832 var index = pickArbitraryLaneIndex(lanes); 36833 var lane = 1 << index; 36834 entanglements[index] = NoLanes; 36835 eventTimes[index] = NoTimestamp; 36836 expirationTimes[index] = NoTimestamp; 36837 lanes &= ~lane; 36838 } 36839} 36840function markRootEntangled(root, entangledLanes) { 36841 root.entangledLanes |= entangledLanes; 36842 var entanglements = root.entanglements; 36843 var lanes = entangledLanes; 36844 36845 while (lanes > 0) { 36846 var index = pickArbitraryLaneIndex(lanes); 36847 var lane = 1 << index; 36848 entanglements[index] |= entangledLanes; 36849 lanes &= ~lane; 36850 } 36851} 36852var clz32 = Math.clz32 ? Math.clz32 : clz32Fallback; // Count leading zeros. Only used on lanes, so assume input is an integer. 36853// Based on: 36854// https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Math/clz32 36855 36856var log = Math.log; 36857var LN2 = Math.LN2; 36858 36859function clz32Fallback(lanes) { 36860 if (lanes === 0) { 36861 return 32; 36862 } 36863 36864 return 31 - (log(lanes) / LN2 | 0) | 0; 36865} 36866 36867// Intentionally not named imports because Rollup would use dynamic dispatch for 36868var UserBlockingPriority$1 = Scheduler.unstable_UserBlockingPriority, 36869 runWithPriority = Scheduler.unstable_runWithPriority; // TODO: can we stop exporting these? 36870 36871var _enabled = true; // This is exported in FB builds for use by legacy FB layer infra. 36872// We'd like to remove this but it's not clear if this is safe. 36873 36874function setEnabled(enabled) { 36875 _enabled = !!enabled; 36876} 36877function isEnabled() { 36878 return _enabled; 36879} 36880function createEventListenerWrapperWithPriority(targetContainer, domEventName, eventSystemFlags) { 36881 var eventPriority = getEventPriorityForPluginSystem(domEventName); 36882 var listenerWrapper; 36883 36884 switch (eventPriority) { 36885 case DiscreteEvent: 36886 listenerWrapper = dispatchDiscreteEvent; 36887 break; 36888 36889 case UserBlockingEvent: 36890 listenerWrapper = dispatchUserBlockingUpdate; 36891 break; 36892 36893 case ContinuousEvent: 36894 default: 36895 listenerWrapper = dispatchEvent; 36896 break; 36897 } 36898 36899 return listenerWrapper.bind(null, domEventName, eventSystemFlags, targetContainer); 36900} 36901 36902function dispatchDiscreteEvent(domEventName, eventSystemFlags, container, nativeEvent) { 36903 { 36904 flushDiscreteUpdatesIfNeeded(nativeEvent.timeStamp); 36905 } 36906 36907 discreteUpdates(dispatchEvent, domEventName, eventSystemFlags, container, nativeEvent); 36908} 36909 36910function dispatchUserBlockingUpdate(domEventName, eventSystemFlags, container, nativeEvent) { 36911 { 36912 runWithPriority(UserBlockingPriority$1, dispatchEvent.bind(null, domEventName, eventSystemFlags, container, nativeEvent)); 36913 } 36914} 36915 36916function dispatchEvent(domEventName, eventSystemFlags, targetContainer, nativeEvent) { 36917 if (!_enabled) { 36918 return; 36919 } 36920 36921 var allowReplay = true; 36922 36923 { 36924 // TODO: replaying capture phase events is currently broken 36925 // because we used to do it during top-level native bubble handlers 36926 // but now we use different bubble and capture handlers. 36927 // In eager mode, we attach capture listeners early, so we need 36928 // to filter them out until we fix the logic to handle them correctly. 36929 // This could've been outside the flag but I put it inside to reduce risk. 36930 allowReplay = (eventSystemFlags & IS_CAPTURE_PHASE) === 0; 36931 } 36932 36933 if (allowReplay && hasQueuedDiscreteEvents() && isReplayableDiscreteEvent(domEventName)) { 36934 // If we already have a queue of discrete events, and this is another discrete 36935 // event, then we can't dispatch it regardless of its target, since they 36936 // need to dispatch in order. 36937 queueDiscreteEvent(null, // Flags that we're not actually blocked on anything as far as we know. 36938 domEventName, eventSystemFlags, targetContainer, nativeEvent); 36939 return; 36940 } 36941 36942 var blockedOn = attemptToDispatchEvent(domEventName, eventSystemFlags, targetContainer, nativeEvent); 36943 36944 if (blockedOn === null) { 36945 // We successfully dispatched this event. 36946 if (allowReplay) { 36947 clearIfContinuousEvent(domEventName, nativeEvent); 36948 } 36949 36950 return; 36951 } 36952 36953 if (allowReplay) { 36954 if (isReplayableDiscreteEvent(domEventName)) { 36955 // This this to be replayed later once the target is available. 36956 queueDiscreteEvent(blockedOn, domEventName, eventSystemFlags, targetContainer, nativeEvent); 36957 return; 36958 } 36959 36960 if (queueIfContinuousEvent(blockedOn, domEventName, eventSystemFlags, targetContainer, nativeEvent)) { 36961 return; 36962 } // We need to clear only if we didn't queue because 36963 // queueing is accummulative. 36964 36965 36966 clearIfContinuousEvent(domEventName, nativeEvent); 36967 } // This is not replayable so we'll invoke it but without a target, 36968 // in case the event system needs to trace it. 36969 36970 36971 dispatchEventForPluginEventSystem(domEventName, eventSystemFlags, nativeEvent, null, targetContainer); 36972} // Attempt dispatching an event. Returns a SuspenseInstance or Container if it's blocked. 36973 36974function attemptToDispatchEvent(domEventName, eventSystemFlags, targetContainer, nativeEvent) { 36975 // TODO: Warn if _enabled is false. 36976 var nativeEventTarget = getEventTarget(nativeEvent); 36977 var targetInst = getClosestInstanceFromNode(nativeEventTarget); 36978 36979 if (targetInst !== null) { 36980 var nearestMounted = getNearestMountedFiber(targetInst); 36981 36982 if (nearestMounted === null) { 36983 // This tree has been unmounted already. Dispatch without a target. 36984 targetInst = null; 36985 } else { 36986 var tag = nearestMounted.tag; 36987 36988 if (tag === SuspenseComponent) { 36989 var instance = getSuspenseInstanceFromFiber(nearestMounted); 36990 36991 if (instance !== null) { 36992 // Queue the event to be replayed later. Abort dispatching since we 36993 // don't want this event dispatched twice through the event system. 36994 // TODO: If this is the first discrete event in the queue. Schedule an increased 36995 // priority for this boundary. 36996 return instance; 36997 } // This shouldn't happen, something went wrong but to avoid blocking 36998 // the whole system, dispatch the event without a target. 36999 // TODO: Warn. 37000 37001 37002 targetInst = null; 37003 } else if (tag === HostRoot) { 37004 var root = nearestMounted.stateNode; 37005 37006 if (root.hydrate) { 37007 // If this happens during a replay something went wrong and it might block 37008 // the whole system. 37009 return getContainerFromFiber(nearestMounted); 37010 } 37011 37012 targetInst = null; 37013 } else if (nearestMounted !== targetInst) { 37014 // If we get an event (ex: img onload) before committing that 37015 // component's mount, ignore it for now (that is, treat it as if it was an 37016 // event on a non-React tree). We might also consider queueing events and 37017 // dispatching them after the mount. 37018 targetInst = null; 37019 } 37020 } 37021 } 37022 37023 dispatchEventForPluginEventSystem(domEventName, eventSystemFlags, nativeEvent, targetInst, targetContainer); // We're not blocked on anything. 37024 37025 return null; 37026} 37027 37028function addEventBubbleListener(target, eventType, listener) { 37029 target.addEventListener(eventType, listener, false); 37030 return listener; 37031} 37032function addEventCaptureListener(target, eventType, listener) { 37033 target.addEventListener(eventType, listener, true); 37034 return listener; 37035} 37036function addEventCaptureListenerWithPassiveFlag(target, eventType, listener, passive) { 37037 target.addEventListener(eventType, listener, { 37038 capture: true, 37039 passive: passive 37040 }); 37041 return listener; 37042} 37043function addEventBubbleListenerWithPassiveFlag(target, eventType, listener, passive) { 37044 target.addEventListener(eventType, listener, { 37045 passive: passive 37046 }); 37047 return listener; 37048} 37049 37050/** 37051 * These variables store information about text content of a target node, 37052 * allowing comparison of content before and after a given event. 37053 * 37054 * Identify the node where selection currently begins, then observe 37055 * both its text content and its current position in the DOM. Since the 37056 * browser may natively replace the target node during composition, we can 37057 * use its position to find its replacement. 37058 * 37059 * 37060 */ 37061var root = null; 37062var startText = null; 37063var fallbackText = null; 37064function initialize(nativeEventTarget) { 37065 root = nativeEventTarget; 37066 startText = getText(); 37067 return true; 37068} 37069function reset() { 37070 root = null; 37071 startText = null; 37072 fallbackText = null; 37073} 37074function getData() { 37075 if (fallbackText) { 37076 return fallbackText; 37077 } 37078 37079 var start; 37080 var startValue = startText; 37081 var startLength = startValue.length; 37082 var end; 37083 var endValue = getText(); 37084 var endLength = endValue.length; 37085 37086 for (start = 0; start < startLength; start++) { 37087 if (startValue[start] !== endValue[start]) { 37088 break; 37089 } 37090 } 37091 37092 var minEnd = startLength - start; 37093 37094 for (end = 1; end <= minEnd; end++) { 37095 if (startValue[startLength - end] !== endValue[endLength - end]) { 37096 break; 37097 } 37098 } 37099 37100 var sliceTail = end > 1 ? 1 - end : undefined; 37101 fallbackText = endValue.slice(start, sliceTail); 37102 return fallbackText; 37103} 37104function getText() { 37105 if ('value' in root) { 37106 return root.value; 37107 } 37108 37109 return root.textContent; 37110} 37111 37112/** 37113 * `charCode` represents the actual "character code" and is safe to use with 37114 * `String.fromCharCode`. As such, only keys that correspond to printable 37115 * characters produce a valid `charCode`, the only exception to this is Enter. 37116 * The Tab-key is considered non-printable and does not have a `charCode`, 37117 * presumably because it does not produce a tab-character in browsers. 37118 * 37119 * @param {object} nativeEvent Native browser event. 37120 * @return {number} Normalized `charCode` property. 37121 */ 37122function getEventCharCode(nativeEvent) { 37123 var charCode; 37124 var keyCode = nativeEvent.keyCode; 37125 37126 if ('charCode' in nativeEvent) { 37127 charCode = nativeEvent.charCode; // FF does not set `charCode` for the Enter-key, check against `keyCode`. 37128 37129 if (charCode === 0 && keyCode === 13) { 37130 charCode = 13; 37131 } 37132 } else { 37133 // IE8 does not implement `charCode`, but `keyCode` has the correct value. 37134 charCode = keyCode; 37135 } // IE and Edge (on Windows) and Chrome / Safari (on Windows and Linux) 37136 // report Enter as charCode 10 when ctrl is pressed. 37137 37138 37139 if (charCode === 10) { 37140 charCode = 13; 37141 } // Some non-printable keys are reported in `charCode`/`keyCode`, discard them. 37142 // Must not discard the (non-)printable Enter-key. 37143 37144 37145 if (charCode >= 32 || charCode === 13) { 37146 return charCode; 37147 } 37148 37149 return 0; 37150} 37151 37152function functionThatReturnsTrue() { 37153 return true; 37154} 37155 37156function functionThatReturnsFalse() { 37157 return false; 37158} // This is intentionally a factory so that we have different returned constructors. 37159// If we had a single constructor, it would be megamorphic and engines would deopt. 37160 37161 37162function createSyntheticEvent(Interface) { 37163 /** 37164 * Synthetic events are dispatched by event plugins, typically in response to a 37165 * top-level event delegation handler. 37166 * 37167 * These systems should generally use pooling to reduce the frequency of garbage 37168 * collection. The system should check `isPersistent` to determine whether the 37169 * event should be released into the pool after being dispatched. Users that 37170 * need a persisted event should invoke `persist`. 37171 * 37172 * Synthetic events (and subclasses) implement the DOM Level 3 Events API by 37173 * normalizing browser quirks. Subclasses do not necessarily have to implement a 37174 * DOM interface; custom application-specific events can also subclass this. 37175 */ 37176 function SyntheticBaseEvent(reactName, reactEventType, targetInst, nativeEvent, nativeEventTarget) { 37177 this._reactName = reactName; 37178 this._targetInst = targetInst; 37179 this.type = reactEventType; 37180 this.nativeEvent = nativeEvent; 37181 this.target = nativeEventTarget; 37182 this.currentTarget = null; 37183 37184 for (var _propName in Interface) { 37185 if (!Interface.hasOwnProperty(_propName)) { 37186 continue; 37187 } 37188 37189 var normalize = Interface[_propName]; 37190 37191 if (normalize) { 37192 this[_propName] = normalize(nativeEvent); 37193 } else { 37194 this[_propName] = nativeEvent[_propName]; 37195 } 37196 } 37197 37198 var defaultPrevented = nativeEvent.defaultPrevented != null ? nativeEvent.defaultPrevented : nativeEvent.returnValue === false; 37199 37200 if (defaultPrevented) { 37201 this.isDefaultPrevented = functionThatReturnsTrue; 37202 } else { 37203 this.isDefaultPrevented = functionThatReturnsFalse; 37204 } 37205 37206 this.isPropagationStopped = functionThatReturnsFalse; 37207 return this; 37208 } 37209 37210 _assign(SyntheticBaseEvent.prototype, { 37211 preventDefault: function () { 37212 this.defaultPrevented = true; 37213 var event = this.nativeEvent; 37214 37215 if (!event) { 37216 return; 37217 } 37218 37219 if (event.preventDefault) { 37220 event.preventDefault(); // $FlowFixMe - flow is not aware of `unknown` in IE 37221 } else if (typeof event.returnValue !== 'unknown') { 37222 event.returnValue = false; 37223 } 37224 37225 this.isDefaultPrevented = functionThatReturnsTrue; 37226 }, 37227 stopPropagation: function () { 37228 var event = this.nativeEvent; 37229 37230 if (!event) { 37231 return; 37232 } 37233 37234 if (event.stopPropagation) { 37235 event.stopPropagation(); // $FlowFixMe - flow is not aware of `unknown` in IE 37236 } else if (typeof event.cancelBubble !== 'unknown') { 37237 // The ChangeEventPlugin registers a "propertychange" event for 37238 // IE. This event does not support bubbling or cancelling, and 37239 // any references to cancelBubble throw "Member not found". A 37240 // typeof check of "unknown" circumvents this issue (and is also 37241 // IE specific). 37242 event.cancelBubble = true; 37243 } 37244 37245 this.isPropagationStopped = functionThatReturnsTrue; 37246 }, 37247 37248 /** 37249 * We release all dispatched `SyntheticEvent`s after each event loop, adding 37250 * them back into the pool. This allows a way to hold onto a reference that 37251 * won't be added back into the pool. 37252 */ 37253 persist: function () {// Modern event system doesn't use pooling. 37254 }, 37255 37256 /** 37257 * Checks if this event should be released back into the pool. 37258 * 37259 * @return {boolean} True if this should not be released, false otherwise. 37260 */ 37261 isPersistent: functionThatReturnsTrue 37262 }); 37263 37264 return SyntheticBaseEvent; 37265} 37266/** 37267 * @interface Event 37268 * @see http://www.w3.org/TR/DOM-Level-3-Events/ 37269 */ 37270 37271 37272var EventInterface = { 37273 eventPhase: 0, 37274 bubbles: 0, 37275 cancelable: 0, 37276 timeStamp: function (event) { 37277 return event.timeStamp || Date.now(); 37278 }, 37279 defaultPrevented: 0, 37280 isTrusted: 0 37281}; 37282var SyntheticEvent = createSyntheticEvent(EventInterface); 37283 37284var UIEventInterface = _assign({}, EventInterface, { 37285 view: 0, 37286 detail: 0 37287}); 37288 37289var SyntheticUIEvent = createSyntheticEvent(UIEventInterface); 37290var lastMovementX; 37291var lastMovementY; 37292var lastMouseEvent; 37293 37294function updateMouseMovementPolyfillState(event) { 37295 if (event !== lastMouseEvent) { 37296 if (lastMouseEvent && event.type === 'mousemove') { 37297 lastMovementX = event.screenX - lastMouseEvent.screenX; 37298 lastMovementY = event.screenY - lastMouseEvent.screenY; 37299 } else { 37300 lastMovementX = 0; 37301 lastMovementY = 0; 37302 } 37303 37304 lastMouseEvent = event; 37305 } 37306} 37307/** 37308 * @interface MouseEvent 37309 * @see http://www.w3.org/TR/DOM-Level-3-Events/ 37310 */ 37311 37312 37313var MouseEventInterface = _assign({}, UIEventInterface, { 37314 screenX: 0, 37315 screenY: 0, 37316 clientX: 0, 37317 clientY: 0, 37318 pageX: 0, 37319 pageY: 0, 37320 ctrlKey: 0, 37321 shiftKey: 0, 37322 altKey: 0, 37323 metaKey: 0, 37324 getModifierState: getEventModifierState, 37325 button: 0, 37326 buttons: 0, 37327 relatedTarget: function (event) { 37328 if (event.relatedTarget === undefined) return event.fromElement === event.srcElement ? event.toElement : event.fromElement; 37329 return event.relatedTarget; 37330 }, 37331 movementX: function (event) { 37332 if ('movementX' in event) { 37333 return event.movementX; 37334 } 37335 37336 updateMouseMovementPolyfillState(event); 37337 return lastMovementX; 37338 }, 37339 movementY: function (event) { 37340 if ('movementY' in event) { 37341 return event.movementY; 37342 } // Don't need to call updateMouseMovementPolyfillState() here 37343 // because it's guaranteed to have already run when movementX 37344 // was copied. 37345 37346 37347 return lastMovementY; 37348 } 37349}); 37350 37351var SyntheticMouseEvent = createSyntheticEvent(MouseEventInterface); 37352/** 37353 * @interface DragEvent 37354 * @see http://www.w3.org/TR/DOM-Level-3-Events/ 37355 */ 37356 37357var DragEventInterface = _assign({}, MouseEventInterface, { 37358 dataTransfer: 0 37359}); 37360 37361var SyntheticDragEvent = createSyntheticEvent(DragEventInterface); 37362/** 37363 * @interface FocusEvent 37364 * @see http://www.w3.org/TR/DOM-Level-3-Events/ 37365 */ 37366 37367var FocusEventInterface = _assign({}, UIEventInterface, { 37368 relatedTarget: 0 37369}); 37370 37371var SyntheticFocusEvent = createSyntheticEvent(FocusEventInterface); 37372/** 37373 * @interface Event 37374 * @see http://www.w3.org/TR/css3-animations/#AnimationEvent-interface 37375 * @see https://developer.mozilla.org/en-US/docs/Web/API/AnimationEvent 37376 */ 37377 37378var AnimationEventInterface = _assign({}, EventInterface, { 37379 animationName: 0, 37380 elapsedTime: 0, 37381 pseudoElement: 0 37382}); 37383 37384var SyntheticAnimationEvent = createSyntheticEvent(AnimationEventInterface); 37385/** 37386 * @interface Event 37387 * @see http://www.w3.org/TR/clipboard-apis/ 37388 */ 37389 37390var ClipboardEventInterface = _assign({}, EventInterface, { 37391 clipboardData: function (event) { 37392 return 'clipboardData' in event ? event.clipboardData : window.clipboardData; 37393 } 37394}); 37395 37396var SyntheticClipboardEvent = createSyntheticEvent(ClipboardEventInterface); 37397/** 37398 * @interface Event 37399 * @see http://www.w3.org/TR/DOM-Level-3-Events/#events-compositionevents 37400 */ 37401 37402var CompositionEventInterface = _assign({}, EventInterface, { 37403 data: 0 37404}); 37405 37406var SyntheticCompositionEvent = createSyntheticEvent(CompositionEventInterface); 37407/** 37408 * @interface Event 37409 * @see http://www.w3.org/TR/2013/WD-DOM-Level-3-Events-20131105 37410 * /#events-inputevents 37411 */ 37412// Happens to share the same list for now. 37413 37414var SyntheticInputEvent = SyntheticCompositionEvent; 37415/** 37416 * Normalization of deprecated HTML5 `key` values 37417 * @see https://developer.mozilla.org/en-US/docs/Web/API/KeyboardEvent#Key_names 37418 */ 37419 37420var normalizeKey = { 37421 Esc: 'Escape', 37422 Spacebar: ' ', 37423 Left: 'ArrowLeft', 37424 Up: 'ArrowUp', 37425 Right: 'ArrowRight', 37426 Down: 'ArrowDown', 37427 Del: 'Delete', 37428 Win: 'OS', 37429 Menu: 'ContextMenu', 37430 Apps: 'ContextMenu', 37431 Scroll: 'ScrollLock', 37432 MozPrintableKey: 'Unidentified' 37433}; 37434/** 37435 * Translation from legacy `keyCode` to HTML5 `key` 37436 * Only special keys supported, all others depend on keyboard layout or browser 37437 * @see https://developer.mozilla.org/en-US/docs/Web/API/KeyboardEvent#Key_names 37438 */ 37439 37440var translateToKey = { 37441 '8': 'Backspace', 37442 '9': 'Tab', 37443 '12': 'Clear', 37444 '13': 'Enter', 37445 '16': 'Shift', 37446 '17': 'Control', 37447 '18': 'Alt', 37448 '19': 'Pause', 37449 '20': 'CapsLock', 37450 '27': 'Escape', 37451 '32': ' ', 37452 '33': 'PageUp', 37453 '34': 'PageDown', 37454 '35': 'End', 37455 '36': 'Home', 37456 '37': 'ArrowLeft', 37457 '38': 'ArrowUp', 37458 '39': 'ArrowRight', 37459 '40': 'ArrowDown', 37460 '45': 'Insert', 37461 '46': 'Delete', 37462 '112': 'F1', 37463 '113': 'F2', 37464 '114': 'F3', 37465 '115': 'F4', 37466 '116': 'F5', 37467 '117': 'F6', 37468 '118': 'F7', 37469 '119': 'F8', 37470 '120': 'F9', 37471 '121': 'F10', 37472 '122': 'F11', 37473 '123': 'F12', 37474 '144': 'NumLock', 37475 '145': 'ScrollLock', 37476 '224': 'Meta' 37477}; 37478/** 37479 * @param {object} nativeEvent Native browser event. 37480 * @return {string} Normalized `key` property. 37481 */ 37482 37483function getEventKey(nativeEvent) { 37484 if (nativeEvent.key) { 37485 // Normalize inconsistent values reported by browsers due to 37486 // implementations of a working draft specification. 37487 // FireFox implements `key` but returns `MozPrintableKey` for all 37488 // printable characters (normalized to `Unidentified`), ignore it. 37489 var key = normalizeKey[nativeEvent.key] || nativeEvent.key; 37490 37491 if (key !== 'Unidentified') { 37492 return key; 37493 } 37494 } // Browser does not implement `key`, polyfill as much of it as we can. 37495 37496 37497 if (nativeEvent.type === 'keypress') { 37498 var charCode = getEventCharCode(nativeEvent); // The enter-key is technically both printable and non-printable and can 37499 // thus be captured by `keypress`, no other non-printable key should. 37500 37501 return charCode === 13 ? 'Enter' : String.fromCharCode(charCode); 37502 } 37503 37504 if (nativeEvent.type === 'keydown' || nativeEvent.type === 'keyup') { 37505 // While user keyboard layout determines the actual meaning of each 37506 // `keyCode` value, almost all function keys have a universal value. 37507 return translateToKey[nativeEvent.keyCode] || 'Unidentified'; 37508 } 37509 37510 return ''; 37511} 37512/** 37513 * Translation from modifier key to the associated property in the event. 37514 * @see http://www.w3.org/TR/DOM-Level-3-Events/#keys-Modifiers 37515 */ 37516 37517 37518var modifierKeyToProp = { 37519 Alt: 'altKey', 37520 Control: 'ctrlKey', 37521 Meta: 'metaKey', 37522 Shift: 'shiftKey' 37523}; // Older browsers (Safari <= 10, iOS Safari <= 10.2) do not support 37524// getModifierState. If getModifierState is not supported, we map it to a set of 37525// modifier keys exposed by the event. In this case, Lock-keys are not supported. 37526 37527function modifierStateGetter(keyArg) { 37528 var syntheticEvent = this; 37529 var nativeEvent = syntheticEvent.nativeEvent; 37530 37531 if (nativeEvent.getModifierState) { 37532 return nativeEvent.getModifierState(keyArg); 37533 } 37534 37535 var keyProp = modifierKeyToProp[keyArg]; 37536 return keyProp ? !!nativeEvent[keyProp] : false; 37537} 37538 37539function getEventModifierState(nativeEvent) { 37540 return modifierStateGetter; 37541} 37542/** 37543 * @interface KeyboardEvent 37544 * @see http://www.w3.org/TR/DOM-Level-3-Events/ 37545 */ 37546 37547 37548var KeyboardEventInterface = _assign({}, UIEventInterface, { 37549 key: getEventKey, 37550 code: 0, 37551 location: 0, 37552 ctrlKey: 0, 37553 shiftKey: 0, 37554 altKey: 0, 37555 metaKey: 0, 37556 repeat: 0, 37557 locale: 0, 37558 getModifierState: getEventModifierState, 37559 // Legacy Interface 37560 charCode: function (event) { 37561 // `charCode` is the result of a KeyPress event and represents the value of 37562 // the actual printable character. 37563 // KeyPress is deprecated, but its replacement is not yet final and not 37564 // implemented in any major browser. Only KeyPress has charCode. 37565 if (event.type === 'keypress') { 37566 return getEventCharCode(event); 37567 } 37568 37569 return 0; 37570 }, 37571 keyCode: function (event) { 37572 // `keyCode` is the result of a KeyDown/Up event and represents the value of 37573 // physical keyboard key. 37574 // The actual meaning of the value depends on the users' keyboard layout 37575 // which cannot be detected. Assuming that it is a US keyboard layout 37576 // provides a surprisingly accurate mapping for US and European users. 37577 // Due to this, it is left to the user to implement at this time. 37578 if (event.type === 'keydown' || event.type === 'keyup') { 37579 return event.keyCode; 37580 } 37581 37582 return 0; 37583 }, 37584 which: function (event) { 37585 // `which` is an alias for either `keyCode` or `charCode` depending on the 37586 // type of the event. 37587 if (event.type === 'keypress') { 37588 return getEventCharCode(event); 37589 } 37590 37591 if (event.type === 'keydown' || event.type === 'keyup') { 37592 return event.keyCode; 37593 } 37594 37595 return 0; 37596 } 37597}); 37598 37599var SyntheticKeyboardEvent = createSyntheticEvent(KeyboardEventInterface); 37600/** 37601 * @interface PointerEvent 37602 * @see http://www.w3.org/TR/pointerevents/ 37603 */ 37604 37605var PointerEventInterface = _assign({}, MouseEventInterface, { 37606 pointerId: 0, 37607 width: 0, 37608 height: 0, 37609 pressure: 0, 37610 tangentialPressure: 0, 37611 tiltX: 0, 37612 tiltY: 0, 37613 twist: 0, 37614 pointerType: 0, 37615 isPrimary: 0 37616}); 37617 37618var SyntheticPointerEvent = createSyntheticEvent(PointerEventInterface); 37619/** 37620 * @interface TouchEvent 37621 * @see http://www.w3.org/TR/touch-events/ 37622 */ 37623 37624var TouchEventInterface = _assign({}, UIEventInterface, { 37625 touches: 0, 37626 targetTouches: 0, 37627 changedTouches: 0, 37628 altKey: 0, 37629 metaKey: 0, 37630 ctrlKey: 0, 37631 shiftKey: 0, 37632 getModifierState: getEventModifierState 37633}); 37634 37635var SyntheticTouchEvent = createSyntheticEvent(TouchEventInterface); 37636/** 37637 * @interface Event 37638 * @see http://www.w3.org/TR/2009/WD-css3-transitions-20090320/#transition-events- 37639 * @see https://developer.mozilla.org/en-US/docs/Web/API/TransitionEvent 37640 */ 37641 37642var TransitionEventInterface = _assign({}, EventInterface, { 37643 propertyName: 0, 37644 elapsedTime: 0, 37645 pseudoElement: 0 37646}); 37647 37648var SyntheticTransitionEvent = createSyntheticEvent(TransitionEventInterface); 37649/** 37650 * @interface WheelEvent 37651 * @see http://www.w3.org/TR/DOM-Level-3-Events/ 37652 */ 37653 37654var WheelEventInterface = _assign({}, MouseEventInterface, { 37655 deltaX: function (event) { 37656 return 'deltaX' in event ? event.deltaX : // Fallback to `wheelDeltaX` for Webkit and normalize (right is positive). 37657 'wheelDeltaX' in event ? -event.wheelDeltaX : 0; 37658 }, 37659 deltaY: function (event) { 37660 return 'deltaY' in event ? event.deltaY : // Fallback to `wheelDeltaY` for Webkit and normalize (down is positive). 37661 'wheelDeltaY' in event ? -event.wheelDeltaY : // Fallback to `wheelDelta` for IE<9 and normalize (down is positive). 37662 'wheelDelta' in event ? -event.wheelDelta : 0; 37663 }, 37664 deltaZ: 0, 37665 // Browsers without "deltaMode" is reporting in raw wheel delta where one 37666 // notch on the scroll is always +/- 120, roughly equivalent to pixels. 37667 // A good approximation of DOM_DELTA_LINE (1) is 5% of viewport size or 37668 // ~40 pixels, for DOM_DELTA_SCREEN (2) it is 87.5% of viewport size. 37669 deltaMode: 0 37670}); 37671 37672var SyntheticWheelEvent = createSyntheticEvent(WheelEventInterface); 37673 37674var END_KEYCODES = [9, 13, 27, 32]; // Tab, Return, Esc, Space 37675 37676var START_KEYCODE = 229; 37677var canUseCompositionEvent = canUseDOM && 'CompositionEvent' in window; 37678var documentMode = null; 37679 37680if (canUseDOM && 'documentMode' in document) { 37681 documentMode = document.documentMode; 37682} // Webkit offers a very useful `textInput` event that can be used to 37683// directly represent `beforeInput`. The IE `textinput` event is not as 37684// useful, so we don't use it. 37685 37686 37687var canUseTextInputEvent = canUseDOM && 'TextEvent' in window && !documentMode; // In IE9+, we have access to composition events, but the data supplied 37688// by the native compositionend event may be incorrect. Japanese ideographic 37689// spaces, for instance (\u3000) are not recorded correctly. 37690 37691var useFallbackCompositionData = canUseDOM && (!canUseCompositionEvent || documentMode && documentMode > 8 && documentMode <= 11); 37692var SPACEBAR_CODE = 32; 37693var SPACEBAR_CHAR = String.fromCharCode(SPACEBAR_CODE); 37694 37695function registerEvents() { 37696 registerTwoPhaseEvent('onBeforeInput', ['compositionend', 'keypress', 'textInput', 'paste']); 37697 registerTwoPhaseEvent('onCompositionEnd', ['compositionend', 'focusout', 'keydown', 'keypress', 'keyup', 'mousedown']); 37698 registerTwoPhaseEvent('onCompositionStart', ['compositionstart', 'focusout', 'keydown', 'keypress', 'keyup', 'mousedown']); 37699 registerTwoPhaseEvent('onCompositionUpdate', ['compositionupdate', 'focusout', 'keydown', 'keypress', 'keyup', 'mousedown']); 37700} // Track whether we've ever handled a keypress on the space key. 37701 37702 37703var hasSpaceKeypress = false; 37704/** 37705 * Return whether a native keypress event is assumed to be a command. 37706 * This is required because Firefox fires `keypress` events for key commands 37707 * (cut, copy, select-all, etc.) even though no character is inserted. 37708 */ 37709 37710function isKeypressCommand(nativeEvent) { 37711 return (nativeEvent.ctrlKey || nativeEvent.altKey || nativeEvent.metaKey) && // ctrlKey && altKey is equivalent to AltGr, and is not a command. 37712 !(nativeEvent.ctrlKey && nativeEvent.altKey); 37713} 37714/** 37715 * Translate native top level events into event types. 37716 */ 37717 37718 37719function getCompositionEventType(domEventName) { 37720 switch (domEventName) { 37721 case 'compositionstart': 37722 return 'onCompositionStart'; 37723 37724 case 'compositionend': 37725 return 'onCompositionEnd'; 37726 37727 case 'compositionupdate': 37728 return 'onCompositionUpdate'; 37729 } 37730} 37731/** 37732 * Does our fallback best-guess model think this event signifies that 37733 * composition has begun? 37734 */ 37735 37736 37737function isFallbackCompositionStart(domEventName, nativeEvent) { 37738 return domEventName === 'keydown' && nativeEvent.keyCode === START_KEYCODE; 37739} 37740/** 37741 * Does our fallback mode think that this event is the end of composition? 37742 */ 37743 37744 37745function isFallbackCompositionEnd(domEventName, nativeEvent) { 37746 switch (domEventName) { 37747 case 'keyup': 37748 // Command keys insert or clear IME input. 37749 return END_KEYCODES.indexOf(nativeEvent.keyCode) !== -1; 37750 37751 case 'keydown': 37752 // Expect IME keyCode on each keydown. If we get any other 37753 // code we must have exited earlier. 37754 return nativeEvent.keyCode !== START_KEYCODE; 37755 37756 case 'keypress': 37757 case 'mousedown': 37758 case 'focusout': 37759 // Events are not possible without cancelling IME. 37760 return true; 37761 37762 default: 37763 return false; 37764 } 37765} 37766/** 37767 * Google Input Tools provides composition data via a CustomEvent, 37768 * with the `data` property populated in the `detail` object. If this 37769 * is available on the event object, use it. If not, this is a plain 37770 * composition event and we have nothing special to extract. 37771 * 37772 * @param {object} nativeEvent 37773 * @return {?string} 37774 */ 37775 37776 37777function getDataFromCustomEvent(nativeEvent) { 37778 var detail = nativeEvent.detail; 37779 37780 if (typeof detail === 'object' && 'data' in detail) { 37781 return detail.data; 37782 } 37783 37784 return null; 37785} 37786/** 37787 * Check if a composition event was triggered by Korean IME. 37788 * Our fallback mode does not work well with IE's Korean IME, 37789 * so just use native composition events when Korean IME is used. 37790 * Although CompositionEvent.locale property is deprecated, 37791 * it is available in IE, where our fallback mode is enabled. 37792 * 37793 * @param {object} nativeEvent 37794 * @return {boolean} 37795 */ 37796 37797 37798function isUsingKoreanIME(nativeEvent) { 37799 return nativeEvent.locale === 'ko'; 37800} // Track the current IME composition status, if any. 37801 37802 37803var isComposing = false; 37804/** 37805 * @return {?object} A SyntheticCompositionEvent. 37806 */ 37807 37808function extractCompositionEvent(dispatchQueue, domEventName, targetInst, nativeEvent, nativeEventTarget) { 37809 var eventType; 37810 var fallbackData; 37811 37812 if (canUseCompositionEvent) { 37813 eventType = getCompositionEventType(domEventName); 37814 } else if (!isComposing) { 37815 if (isFallbackCompositionStart(domEventName, nativeEvent)) { 37816 eventType = 'onCompositionStart'; 37817 } 37818 } else if (isFallbackCompositionEnd(domEventName, nativeEvent)) { 37819 eventType = 'onCompositionEnd'; 37820 } 37821 37822 if (!eventType) { 37823 return null; 37824 } 37825 37826 if (useFallbackCompositionData && !isUsingKoreanIME(nativeEvent)) { 37827 // The current composition is stored statically and must not be 37828 // overwritten while composition continues. 37829 if (!isComposing && eventType === 'onCompositionStart') { 37830 isComposing = initialize(nativeEventTarget); 37831 } else if (eventType === 'onCompositionEnd') { 37832 if (isComposing) { 37833 fallbackData = getData(); 37834 } 37835 } 37836 } 37837 37838 var listeners = accumulateTwoPhaseListeners(targetInst, eventType); 37839 37840 if (listeners.length > 0) { 37841 var event = new SyntheticCompositionEvent(eventType, domEventName, null, nativeEvent, nativeEventTarget); 37842 dispatchQueue.push({ 37843 event: event, 37844 listeners: listeners 37845 }); 37846 37847 if (fallbackData) { 37848 // Inject data generated from fallback path into the synthetic event. 37849 // This matches the property of native CompositionEventInterface. 37850 event.data = fallbackData; 37851 } else { 37852 var customData = getDataFromCustomEvent(nativeEvent); 37853 37854 if (customData !== null) { 37855 event.data = customData; 37856 } 37857 } 37858 } 37859} 37860 37861function getNativeBeforeInputChars(domEventName, nativeEvent) { 37862 switch (domEventName) { 37863 case 'compositionend': 37864 return getDataFromCustomEvent(nativeEvent); 37865 37866 case 'keypress': 37867 /** 37868 * If native `textInput` events are available, our goal is to make 37869 * use of them. However, there is a special case: the spacebar key. 37870 * In Webkit, preventing default on a spacebar `textInput` event 37871 * cancels character insertion, but it *also* causes the browser 37872 * to fall back to its default spacebar behavior of scrolling the 37873 * page. 37874 * 37875 * Tracking at: 37876 * https://code.google.com/p/chromium/issues/detail?id=355103 37877 * 37878 * To avoid this issue, use the keypress event as if no `textInput` 37879 * event is available. 37880 */ 37881 var which = nativeEvent.which; 37882 37883 if (which !== SPACEBAR_CODE) { 37884 return null; 37885 } 37886 37887 hasSpaceKeypress = true; 37888 return SPACEBAR_CHAR; 37889 37890 case 'textInput': 37891 // Record the characters to be added to the DOM. 37892 var chars = nativeEvent.data; // If it's a spacebar character, assume that we have already handled 37893 // it at the keypress level and bail immediately. Android Chrome 37894 // doesn't give us keycodes, so we need to ignore it. 37895 37896 if (chars === SPACEBAR_CHAR && hasSpaceKeypress) { 37897 return null; 37898 } 37899 37900 return chars; 37901 37902 default: 37903 // For other native event types, do nothing. 37904 return null; 37905 } 37906} 37907/** 37908 * For browsers that do not provide the `textInput` event, extract the 37909 * appropriate string to use for SyntheticInputEvent. 37910 */ 37911 37912 37913function getFallbackBeforeInputChars(domEventName, nativeEvent) { 37914 // If we are currently composing (IME) and using a fallback to do so, 37915 // try to extract the composed characters from the fallback object. 37916 // If composition event is available, we extract a string only at 37917 // compositionevent, otherwise extract it at fallback events. 37918 if (isComposing) { 37919 if (domEventName === 'compositionend' || !canUseCompositionEvent && isFallbackCompositionEnd(domEventName, nativeEvent)) { 37920 var chars = getData(); 37921 reset(); 37922 isComposing = false; 37923 return chars; 37924 } 37925 37926 return null; 37927 } 37928 37929 switch (domEventName) { 37930 case 'paste': 37931 // If a paste event occurs after a keypress, throw out the input 37932 // chars. Paste events should not lead to BeforeInput events. 37933 return null; 37934 37935 case 'keypress': 37936 /** 37937 * As of v27, Firefox may fire keypress events even when no character 37938 * will be inserted. A few possibilities: 37939 * 37940 * - `which` is `0`. Arrow keys, Esc key, etc. 37941 * 37942 * - `which` is the pressed key code, but no char is available. 37943 * Ex: 'AltGr + d` in Polish. There is no modified character for 37944 * this key combination and no character is inserted into the 37945 * document, but FF fires the keypress for char code `100` anyway. 37946 * No `input` event will occur. 37947 * 37948 * - `which` is the pressed key code, but a command combination is 37949 * being used. Ex: `Cmd+C`. No character is inserted, and no 37950 * `input` event will occur. 37951 */ 37952 if (!isKeypressCommand(nativeEvent)) { 37953 // IE fires the `keypress` event when a user types an emoji via 37954 // Touch keyboard of Windows. In such a case, the `char` property 37955 // holds an emoji character like `\uD83D\uDE0A`. Because its length 37956 // is 2, the property `which` does not represent an emoji correctly. 37957 // In such a case, we directly return the `char` property instead of 37958 // using `which`. 37959 if (nativeEvent.char && nativeEvent.char.length > 1) { 37960 return nativeEvent.char; 37961 } else if (nativeEvent.which) { 37962 return String.fromCharCode(nativeEvent.which); 37963 } 37964 } 37965 37966 return null; 37967 37968 case 'compositionend': 37969 return useFallbackCompositionData && !isUsingKoreanIME(nativeEvent) ? null : nativeEvent.data; 37970 37971 default: 37972 return null; 37973 } 37974} 37975/** 37976 * Extract a SyntheticInputEvent for `beforeInput`, based on either native 37977 * `textInput` or fallback behavior. 37978 * 37979 * @return {?object} A SyntheticInputEvent. 37980 */ 37981 37982 37983function extractBeforeInputEvent(dispatchQueue, domEventName, targetInst, nativeEvent, nativeEventTarget) { 37984 var chars; 37985 37986 if (canUseTextInputEvent) { 37987 chars = getNativeBeforeInputChars(domEventName, nativeEvent); 37988 } else { 37989 chars = getFallbackBeforeInputChars(domEventName, nativeEvent); 37990 } // If no characters are being inserted, no BeforeInput event should 37991 // be fired. 37992 37993 37994 if (!chars) { 37995 return null; 37996 } 37997 37998 var listeners = accumulateTwoPhaseListeners(targetInst, 'onBeforeInput'); 37999 38000 if (listeners.length > 0) { 38001 var event = new SyntheticInputEvent('onBeforeInput', 'beforeinput', null, nativeEvent, nativeEventTarget); 38002 dispatchQueue.push({ 38003 event: event, 38004 listeners: listeners 38005 }); 38006 event.data = chars; 38007 } 38008} 38009/** 38010 * Create an `onBeforeInput` event to match 38011 * http://www.w3.org/TR/2013/WD-DOM-Level-3-Events-20131105/#events-inputevents. 38012 * 38013 * This event plugin is based on the native `textInput` event 38014 * available in Chrome, Safari, Opera, and IE. This event fires after 38015 * `onKeyPress` and `onCompositionEnd`, but before `onInput`. 38016 * 38017 * `beforeInput` is spec'd but not implemented in any browsers, and 38018 * the `input` event does not provide any useful information about what has 38019 * actually been added, contrary to the spec. Thus, `textInput` is the best 38020 * available event to identify the characters that have actually been inserted 38021 * into the target node. 38022 * 38023 * This plugin is also responsible for emitting `composition` events, thus 38024 * allowing us to share composition fallback code for both `beforeInput` and 38025 * `composition` event types. 38026 */ 38027 38028 38029function extractEvents(dispatchQueue, domEventName, targetInst, nativeEvent, nativeEventTarget, eventSystemFlags, targetContainer) { 38030 extractCompositionEvent(dispatchQueue, domEventName, targetInst, nativeEvent, nativeEventTarget); 38031 extractBeforeInputEvent(dispatchQueue, domEventName, targetInst, nativeEvent, nativeEventTarget); 38032} 38033 38034/** 38035 * @see http://www.whatwg.org/specs/web-apps/current-work/multipage/the-input-element.html#input-type-attr-summary 38036 */ 38037var supportedInputTypes = { 38038 color: true, 38039 date: true, 38040 datetime: true, 38041 'datetime-local': true, 38042 email: true, 38043 month: true, 38044 number: true, 38045 password: true, 38046 range: true, 38047 search: true, 38048 tel: true, 38049 text: true, 38050 time: true, 38051 url: true, 38052 week: true 38053}; 38054 38055function isTextInputElement(elem) { 38056 var nodeName = elem && elem.nodeName && elem.nodeName.toLowerCase(); 38057 38058 if (nodeName === 'input') { 38059 return !!supportedInputTypes[elem.type]; 38060 } 38061 38062 if (nodeName === 'textarea') { 38063 return true; 38064 } 38065 38066 return false; 38067} 38068 38069/** 38070 * Checks if an event is supported in the current execution environment. 38071 * 38072 * NOTE: This will not work correctly for non-generic events such as `change`, 38073 * `reset`, `load`, `error`, and `select`. 38074 * 38075 * Borrows from Modernizr. 38076 * 38077 * @param {string} eventNameSuffix Event name, e.g. "click". 38078 * @return {boolean} True if the event is supported. 38079 * @internal 38080 * @license Modernizr 3.0.0pre (Custom Build) | MIT 38081 */ 38082 38083function isEventSupported(eventNameSuffix) { 38084 if (!canUseDOM) { 38085 return false; 38086 } 38087 38088 var eventName = 'on' + eventNameSuffix; 38089 var isSupported = (eventName in document); 38090 38091 if (!isSupported) { 38092 var element = document.createElement('div'); 38093 element.setAttribute(eventName, 'return;'); 38094 isSupported = typeof element[eventName] === 'function'; 38095 } 38096 38097 return isSupported; 38098} 38099 38100function registerEvents$1() { 38101 registerTwoPhaseEvent('onChange', ['change', 'click', 'focusin', 'focusout', 'input', 'keydown', 'keyup', 'selectionchange']); 38102} 38103 38104function createAndAccumulateChangeEvent(dispatchQueue, inst, nativeEvent, target) { 38105 // Flag this event loop as needing state restore. 38106 enqueueStateRestore(target); 38107 var listeners = accumulateTwoPhaseListeners(inst, 'onChange'); 38108 38109 if (listeners.length > 0) { 38110 var event = new SyntheticEvent('onChange', 'change', null, nativeEvent, target); 38111 dispatchQueue.push({ 38112 event: event, 38113 listeners: listeners 38114 }); 38115 } 38116} 38117/** 38118 * For IE shims 38119 */ 38120 38121 38122var activeElement = null; 38123var activeElementInst = null; 38124/** 38125 * SECTION: handle `change` event 38126 */ 38127 38128function shouldUseChangeEvent(elem) { 38129 var nodeName = elem.nodeName && elem.nodeName.toLowerCase(); 38130 return nodeName === 'select' || nodeName === 'input' && elem.type === 'file'; 38131} 38132 38133function manualDispatchChangeEvent(nativeEvent) { 38134 var dispatchQueue = []; 38135 createAndAccumulateChangeEvent(dispatchQueue, activeElementInst, nativeEvent, getEventTarget(nativeEvent)); // If change and propertychange bubbled, we'd just bind to it like all the 38136 // other events and have it go through ReactBrowserEventEmitter. Since it 38137 // doesn't, we manually listen for the events and so we have to enqueue and 38138 // process the abstract event manually. 38139 // 38140 // Batching is necessary here in order to ensure that all event handlers run 38141 // before the next rerender (including event handlers attached to ancestor 38142 // elements instead of directly on the input). Without this, controlled 38143 // components don't work properly in conjunction with event bubbling because 38144 // the component is rerendered and the value reverted before all the event 38145 // handlers can run. See https://github.com/facebook/react/issues/708. 38146 38147 batchedUpdates(runEventInBatch, dispatchQueue); 38148} 38149 38150function runEventInBatch(dispatchQueue) { 38151 processDispatchQueue(dispatchQueue, 0); 38152} 38153 38154function getInstIfValueChanged(targetInst) { 38155 var targetNode = getNodeFromInstance(targetInst); 38156 38157 if (updateValueIfChanged(targetNode)) { 38158 return targetInst; 38159 } 38160} 38161 38162function getTargetInstForChangeEvent(domEventName, targetInst) { 38163 if (domEventName === 'change') { 38164 return targetInst; 38165 } 38166} 38167/** 38168 * SECTION: handle `input` event 38169 */ 38170 38171 38172var isInputEventSupported = false; 38173 38174if (canUseDOM) { 38175 // IE9 claims to support the input event but fails to trigger it when 38176 // deleting text, so we ignore its input events. 38177 isInputEventSupported = isEventSupported('input') && (!document.documentMode || document.documentMode > 9); 38178} 38179/** 38180 * (For IE <=9) Starts tracking propertychange events on the passed-in element 38181 * and override the value property so that we can distinguish user events from 38182 * value changes in JS. 38183 */ 38184 38185 38186function startWatchingForValueChange(target, targetInst) { 38187 activeElement = target; 38188 activeElementInst = targetInst; 38189 activeElement.attachEvent('onpropertychange', handlePropertyChange); 38190} 38191/** 38192 * (For IE <=9) Removes the event listeners from the currently-tracked element, 38193 * if any exists. 38194 */ 38195 38196 38197function stopWatchingForValueChange() { 38198 if (!activeElement) { 38199 return; 38200 } 38201 38202 activeElement.detachEvent('onpropertychange', handlePropertyChange); 38203 activeElement = null; 38204 activeElementInst = null; 38205} 38206/** 38207 * (For IE <=9) Handles a propertychange event, sending a `change` event if 38208 * the value of the active element has changed. 38209 */ 38210 38211 38212function handlePropertyChange(nativeEvent) { 38213 if (nativeEvent.propertyName !== 'value') { 38214 return; 38215 } 38216 38217 if (getInstIfValueChanged(activeElementInst)) { 38218 manualDispatchChangeEvent(nativeEvent); 38219 } 38220} 38221 38222function handleEventsForInputEventPolyfill(domEventName, target, targetInst) { 38223 if (domEventName === 'focusin') { 38224 // In IE9, propertychange fires for most input events but is buggy and 38225 // doesn't fire when text is deleted, but conveniently, selectionchange 38226 // appears to fire in all of the remaining cases so we catch those and 38227 // forward the event if the value has changed 38228 // In either case, we don't want to call the event handler if the value 38229 // is changed from JS so we redefine a setter for `.value` that updates 38230 // our activeElementValue variable, allowing us to ignore those changes 38231 // 38232 // stopWatching() should be a noop here but we call it just in case we 38233 // missed a blur event somehow. 38234 stopWatchingForValueChange(); 38235 startWatchingForValueChange(target, targetInst); 38236 } else if (domEventName === 'focusout') { 38237 stopWatchingForValueChange(); 38238 } 38239} // For IE8 and IE9. 38240 38241 38242function getTargetInstForInputEventPolyfill(domEventName, targetInst) { 38243 if (domEventName === 'selectionchange' || domEventName === 'keyup' || domEventName === 'keydown') { 38244 // On the selectionchange event, the target is just document which isn't 38245 // helpful for us so just check activeElement instead. 38246 // 38247 // 99% of the time, keydown and keyup aren't necessary. IE8 fails to fire 38248 // propertychange on the first input event after setting `value` from a 38249 // script and fires only keydown, keypress, keyup. Catching keyup usually 38250 // gets it and catching keydown lets us fire an event for the first 38251 // keystroke if user does a key repeat (it'll be a little delayed: right 38252 // before the second keystroke). Other input methods (e.g., paste) seem to 38253 // fire selectionchange normally. 38254 return getInstIfValueChanged(activeElementInst); 38255 } 38256} 38257/** 38258 * SECTION: handle `click` event 38259 */ 38260 38261 38262function shouldUseClickEvent(elem) { 38263 // Use the `click` event to detect changes to checkbox and radio inputs. 38264 // This approach works across all browsers, whereas `change` does not fire 38265 // until `blur` in IE8. 38266 var nodeName = elem.nodeName; 38267 return nodeName && nodeName.toLowerCase() === 'input' && (elem.type === 'checkbox' || elem.type === 'radio'); 38268} 38269 38270function getTargetInstForClickEvent(domEventName, targetInst) { 38271 if (domEventName === 'click') { 38272 return getInstIfValueChanged(targetInst); 38273 } 38274} 38275 38276function getTargetInstForInputOrChangeEvent(domEventName, targetInst) { 38277 if (domEventName === 'input' || domEventName === 'change') { 38278 return getInstIfValueChanged(targetInst); 38279 } 38280} 38281 38282function handleControlledInputBlur(node) { 38283 var state = node._wrapperState; 38284 38285 if (!state || !state.controlled || node.type !== 'number') { 38286 return; 38287 } 38288 38289 { 38290 // If controlled, assign the value attribute to the current value on blur 38291 setDefaultValue(node, 'number', node.value); 38292 } 38293} 38294/** 38295 * This plugin creates an `onChange` event that normalizes change events 38296 * across form elements. This event fires at a time when it's possible to 38297 * change the element's value without seeing a flicker. 38298 * 38299 * Supported elements are: 38300 * - input (see `isTextInputElement`) 38301 * - textarea 38302 * - select 38303 */ 38304 38305 38306function extractEvents$1(dispatchQueue, domEventName, targetInst, nativeEvent, nativeEventTarget, eventSystemFlags, targetContainer) { 38307 var targetNode = targetInst ? getNodeFromInstance(targetInst) : window; 38308 var getTargetInstFunc, handleEventFunc; 38309 38310 if (shouldUseChangeEvent(targetNode)) { 38311 getTargetInstFunc = getTargetInstForChangeEvent; 38312 } else if (isTextInputElement(targetNode)) { 38313 if (isInputEventSupported) { 38314 getTargetInstFunc = getTargetInstForInputOrChangeEvent; 38315 } else { 38316 getTargetInstFunc = getTargetInstForInputEventPolyfill; 38317 handleEventFunc = handleEventsForInputEventPolyfill; 38318 } 38319 } else if (shouldUseClickEvent(targetNode)) { 38320 getTargetInstFunc = getTargetInstForClickEvent; 38321 } 38322 38323 if (getTargetInstFunc) { 38324 var inst = getTargetInstFunc(domEventName, targetInst); 38325 38326 if (inst) { 38327 createAndAccumulateChangeEvent(dispatchQueue, inst, nativeEvent, nativeEventTarget); 38328 return; 38329 } 38330 } 38331 38332 if (handleEventFunc) { 38333 handleEventFunc(domEventName, targetNode, targetInst); 38334 } // When blurring, set the value attribute for number inputs 38335 38336 38337 if (domEventName === 'focusout') { 38338 handleControlledInputBlur(targetNode); 38339 } 38340} 38341 38342function registerEvents$2() { 38343 registerDirectEvent('onMouseEnter', ['mouseout', 'mouseover']); 38344 registerDirectEvent('onMouseLeave', ['mouseout', 'mouseover']); 38345 registerDirectEvent('onPointerEnter', ['pointerout', 'pointerover']); 38346 registerDirectEvent('onPointerLeave', ['pointerout', 'pointerover']); 38347} 38348/** 38349 * For almost every interaction we care about, there will be both a top-level 38350 * `mouseover` and `mouseout` event that occurs. Only use `mouseout` so that 38351 * we do not extract duplicate events. However, moving the mouse into the 38352 * browser from outside will not fire a `mouseout` event. In this case, we use 38353 * the `mouseover` top-level event. 38354 */ 38355 38356 38357function extractEvents$2(dispatchQueue, domEventName, targetInst, nativeEvent, nativeEventTarget, eventSystemFlags, targetContainer) { 38358 var isOverEvent = domEventName === 'mouseover' || domEventName === 'pointerover'; 38359 var isOutEvent = domEventName === 'mouseout' || domEventName === 'pointerout'; 38360 38361 if (isOverEvent && (eventSystemFlags & IS_REPLAYED) === 0) { 38362 // If this is an over event with a target, we might have already dispatched 38363 // the event in the out event of the other target. If this is replayed, 38364 // then it's because we couldn't dispatch against this target previously 38365 // so we have to do it now instead. 38366 var related = nativeEvent.relatedTarget || nativeEvent.fromElement; 38367 38368 if (related) { 38369 // If the related node is managed by React, we can assume that we have 38370 // already dispatched the corresponding events during its mouseout. 38371 if (getClosestInstanceFromNode(related) || isContainerMarkedAsRoot(related)) { 38372 return; 38373 } 38374 } 38375 } 38376 38377 if (!isOutEvent && !isOverEvent) { 38378 // Must not be a mouse or pointer in or out - ignoring. 38379 return; 38380 } 38381 38382 var win; // TODO: why is this nullable in the types but we read from it? 38383 38384 if (nativeEventTarget.window === nativeEventTarget) { 38385 // `nativeEventTarget` is probably a window object. 38386 win = nativeEventTarget; 38387 } else { 38388 // TODO: Figure out why `ownerDocument` is sometimes undefined in IE8. 38389 var doc = nativeEventTarget.ownerDocument; 38390 38391 if (doc) { 38392 win = doc.defaultView || doc.parentWindow; 38393 } else { 38394 win = window; 38395 } 38396 } 38397 38398 var from; 38399 var to; 38400 38401 if (isOutEvent) { 38402 var _related = nativeEvent.relatedTarget || nativeEvent.toElement; 38403 38404 from = targetInst; 38405 to = _related ? getClosestInstanceFromNode(_related) : null; 38406 38407 if (to !== null) { 38408 var nearestMounted = getNearestMountedFiber(to); 38409 38410 if (to !== nearestMounted || to.tag !== HostComponent && to.tag !== HostText) { 38411 to = null; 38412 } 38413 } 38414 } else { 38415 // Moving to a node from outside the window. 38416 from = null; 38417 to = targetInst; 38418 } 38419 38420 if (from === to) { 38421 // Nothing pertains to our managed components. 38422 return; 38423 } 38424 38425 var SyntheticEventCtor = SyntheticMouseEvent; 38426 var leaveEventType = 'onMouseLeave'; 38427 var enterEventType = 'onMouseEnter'; 38428 var eventTypePrefix = 'mouse'; 38429 38430 if (domEventName === 'pointerout' || domEventName === 'pointerover') { 38431 SyntheticEventCtor = SyntheticPointerEvent; 38432 leaveEventType = 'onPointerLeave'; 38433 enterEventType = 'onPointerEnter'; 38434 eventTypePrefix = 'pointer'; 38435 } 38436 38437 var fromNode = from == null ? win : getNodeFromInstance(from); 38438 var toNode = to == null ? win : getNodeFromInstance(to); 38439 var leave = new SyntheticEventCtor(leaveEventType, eventTypePrefix + 'leave', from, nativeEvent, nativeEventTarget); 38440 leave.target = fromNode; 38441 leave.relatedTarget = toNode; 38442 var enter = null; // We should only process this nativeEvent if we are processing 38443 // the first ancestor. Next time, we will ignore the event. 38444 38445 var nativeTargetInst = getClosestInstanceFromNode(nativeEventTarget); 38446 38447 if (nativeTargetInst === targetInst) { 38448 var enterEvent = new SyntheticEventCtor(enterEventType, eventTypePrefix + 'enter', to, nativeEvent, nativeEventTarget); 38449 enterEvent.target = toNode; 38450 enterEvent.relatedTarget = fromNode; 38451 enter = enterEvent; 38452 } 38453 38454 accumulateEnterLeaveTwoPhaseListeners(dispatchQueue, leave, enter, from, to); 38455} 38456 38457/** 38458 * inlined Object.is polyfill to avoid requiring consumers ship their own 38459 * https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Object/is 38460 */ 38461function is(x, y) { 38462 return x === y && (x !== 0 || 1 / x === 1 / y) || x !== x && y !== y // eslint-disable-line no-self-compare 38463 ; 38464} 38465 38466var objectIs = typeof Object.is === 'function' ? Object.is : is; 38467 38468var hasOwnProperty$2 = Object.prototype.hasOwnProperty; 38469/** 38470 * Performs equality by iterating through keys on an object and returning false 38471 * when any key has values which are not strictly equal between the arguments. 38472 * Returns true when the values of all keys are strictly equal. 38473 */ 38474 38475function shallowEqual(objA, objB) { 38476 if (objectIs(objA, objB)) { 38477 return true; 38478 } 38479 38480 if (typeof objA !== 'object' || objA === null || typeof objB !== 'object' || objB === null) { 38481 return false; 38482 } 38483 38484 var keysA = Object.keys(objA); 38485 var keysB = Object.keys(objB); 38486 38487 if (keysA.length !== keysB.length) { 38488 return false; 38489 } // Test for A's keys different from B. 38490 38491 38492 for (var i = 0; i < keysA.length; i++) { 38493 if (!hasOwnProperty$2.call(objB, keysA[i]) || !objectIs(objA[keysA[i]], objB[keysA[i]])) { 38494 return false; 38495 } 38496 } 38497 38498 return true; 38499} 38500 38501/** 38502 * Given any node return the first leaf node without children. 38503 * 38504 * @param {DOMElement|DOMTextNode} node 38505 * @return {DOMElement|DOMTextNode} 38506 */ 38507 38508function getLeafNode(node) { 38509 while (node && node.firstChild) { 38510 node = node.firstChild; 38511 } 38512 38513 return node; 38514} 38515/** 38516 * Get the next sibling within a container. This will walk up the 38517 * DOM if a node's siblings have been exhausted. 38518 * 38519 * @param {DOMElement|DOMTextNode} node 38520 * @return {?DOMElement|DOMTextNode} 38521 */ 38522 38523 38524function getSiblingNode(node) { 38525 while (node) { 38526 if (node.nextSibling) { 38527 return node.nextSibling; 38528 } 38529 38530 node = node.parentNode; 38531 } 38532} 38533/** 38534 * Get object describing the nodes which contain characters at offset. 38535 * 38536 * @param {DOMElement|DOMTextNode} root 38537 * @param {number} offset 38538 * @return {?object} 38539 */ 38540 38541 38542function getNodeForCharacterOffset(root, offset) { 38543 var node = getLeafNode(root); 38544 var nodeStart = 0; 38545 var nodeEnd = 0; 38546 38547 while (node) { 38548 if (node.nodeType === TEXT_NODE) { 38549 nodeEnd = nodeStart + node.textContent.length; 38550 38551 if (nodeStart <= offset && nodeEnd >= offset) { 38552 return { 38553 node: node, 38554 offset: offset - nodeStart 38555 }; 38556 } 38557 38558 nodeStart = nodeEnd; 38559 } 38560 38561 node = getLeafNode(getSiblingNode(node)); 38562 } 38563} 38564 38565/** 38566 * @param {DOMElement} outerNode 38567 * @return {?object} 38568 */ 38569 38570function getOffsets(outerNode) { 38571 var ownerDocument = outerNode.ownerDocument; 38572 var win = ownerDocument && ownerDocument.defaultView || window; 38573 var selection = win.getSelection && win.getSelection(); 38574 38575 if (!selection || selection.rangeCount === 0) { 38576 return null; 38577 } 38578 38579 var anchorNode = selection.anchorNode, 38580 anchorOffset = selection.anchorOffset, 38581 focusNode = selection.focusNode, 38582 focusOffset = selection.focusOffset; // In Firefox, anchorNode and focusNode can be "anonymous divs", e.g. the 38583 // up/down buttons on an <input type="number">. Anonymous divs do not seem to 38584 // expose properties, triggering a "Permission denied error" if any of its 38585 // properties are accessed. The only seemingly possible way to avoid erroring 38586 // is to access a property that typically works for non-anonymous divs and 38587 // catch any error that may otherwise arise. See 38588 // https://bugzilla.mozilla.org/show_bug.cgi?id=208427 38589 38590 try { 38591 /* eslint-disable no-unused-expressions */ 38592 anchorNode.nodeType; 38593 focusNode.nodeType; 38594 /* eslint-enable no-unused-expressions */ 38595 } catch (e) { 38596 return null; 38597 } 38598 38599 return getModernOffsetsFromPoints(outerNode, anchorNode, anchorOffset, focusNode, focusOffset); 38600} 38601/** 38602 * Returns {start, end} where `start` is the character/codepoint index of 38603 * (anchorNode, anchorOffset) within the textContent of `outerNode`, and 38604 * `end` is the index of (focusNode, focusOffset). 38605 * 38606 * Returns null if you pass in garbage input but we should probably just crash. 38607 * 38608 * Exported only for testing. 38609 */ 38610 38611function getModernOffsetsFromPoints(outerNode, anchorNode, anchorOffset, focusNode, focusOffset) { 38612 var length = 0; 38613 var start = -1; 38614 var end = -1; 38615 var indexWithinAnchor = 0; 38616 var indexWithinFocus = 0; 38617 var node = outerNode; 38618 var parentNode = null; 38619 38620 outer: while (true) { 38621 var next = null; 38622 38623 while (true) { 38624 if (node === anchorNode && (anchorOffset === 0 || node.nodeType === TEXT_NODE)) { 38625 start = length + anchorOffset; 38626 } 38627 38628 if (node === focusNode && (focusOffset === 0 || node.nodeType === TEXT_NODE)) { 38629 end = length + focusOffset; 38630 } 38631 38632 if (node.nodeType === TEXT_NODE) { 38633 length += node.nodeValue.length; 38634 } 38635 38636 if ((next = node.firstChild) === null) { 38637 break; 38638 } // Moving from `node` to its first child `next`. 38639 38640 38641 parentNode = node; 38642 node = next; 38643 } 38644 38645 while (true) { 38646 if (node === outerNode) { 38647 // If `outerNode` has children, this is always the second time visiting 38648 // it. If it has no children, this is still the first loop, and the only 38649 // valid selection is anchorNode and focusNode both equal to this node 38650 // and both offsets 0, in which case we will have handled above. 38651 break outer; 38652 } 38653 38654 if (parentNode === anchorNode && ++indexWithinAnchor === anchorOffset) { 38655 start = length; 38656 } 38657 38658 if (parentNode === focusNode && ++indexWithinFocus === focusOffset) { 38659 end = length; 38660 } 38661 38662 if ((next = node.nextSibling) !== null) { 38663 break; 38664 } 38665 38666 node = parentNode; 38667 parentNode = node.parentNode; 38668 } // Moving from `node` to its next sibling `next`. 38669 38670 38671 node = next; 38672 } 38673 38674 if (start === -1 || end === -1) { 38675 // This should never happen. (Would happen if the anchor/focus nodes aren't 38676 // actually inside the passed-in node.) 38677 return null; 38678 } 38679 38680 return { 38681 start: start, 38682 end: end 38683 }; 38684} 38685/** 38686 * In modern non-IE browsers, we can support both forward and backward 38687 * selections. 38688 * 38689 * Note: IE10+ supports the Selection object, but it does not support 38690 * the `extend` method, which means that even in modern IE, it's not possible 38691 * to programmatically create a backward selection. Thus, for all IE 38692 * versions, we use the old IE API to create our selections. 38693 * 38694 * @param {DOMElement|DOMTextNode} node 38695 * @param {object} offsets 38696 */ 38697 38698function setOffsets(node, offsets) { 38699 var doc = node.ownerDocument || document; 38700 var win = doc && doc.defaultView || window; // Edge fails with "Object expected" in some scenarios. 38701 // (For instance: TinyMCE editor used in a list component that supports pasting to add more, 38702 // fails when pasting 100+ items) 38703 38704 if (!win.getSelection) { 38705 return; 38706 } 38707 38708 var selection = win.getSelection(); 38709 var length = node.textContent.length; 38710 var start = Math.min(offsets.start, length); 38711 var end = offsets.end === undefined ? start : Math.min(offsets.end, length); // IE 11 uses modern selection, but doesn't support the extend method. 38712 // Flip backward selections, so we can set with a single range. 38713 38714 if (!selection.extend && start > end) { 38715 var temp = end; 38716 end = start; 38717 start = temp; 38718 } 38719 38720 var startMarker = getNodeForCharacterOffset(node, start); 38721 var endMarker = getNodeForCharacterOffset(node, end); 38722 38723 if (startMarker && endMarker) { 38724 if (selection.rangeCount === 1 && selection.anchorNode === startMarker.node && selection.anchorOffset === startMarker.offset && selection.focusNode === endMarker.node && selection.focusOffset === endMarker.offset) { 38725 return; 38726 } 38727 38728 var range = doc.createRange(); 38729 range.setStart(startMarker.node, startMarker.offset); 38730 selection.removeAllRanges(); 38731 38732 if (start > end) { 38733 selection.addRange(range); 38734 selection.extend(endMarker.node, endMarker.offset); 38735 } else { 38736 range.setEnd(endMarker.node, endMarker.offset); 38737 selection.addRange(range); 38738 } 38739 } 38740} 38741 38742function isTextNode(node) { 38743 return node && node.nodeType === TEXT_NODE; 38744} 38745 38746function containsNode(outerNode, innerNode) { 38747 if (!outerNode || !innerNode) { 38748 return false; 38749 } else if (outerNode === innerNode) { 38750 return true; 38751 } else if (isTextNode(outerNode)) { 38752 return false; 38753 } else if (isTextNode(innerNode)) { 38754 return containsNode(outerNode, innerNode.parentNode); 38755 } else if ('contains' in outerNode) { 38756 return outerNode.contains(innerNode); 38757 } else if (outerNode.compareDocumentPosition) { 38758 return !!(outerNode.compareDocumentPosition(innerNode) & 16); 38759 } else { 38760 return false; 38761 } 38762} 38763 38764function isInDocument(node) { 38765 return node && node.ownerDocument && containsNode(node.ownerDocument.documentElement, node); 38766} 38767 38768function isSameOriginFrame(iframe) { 38769 try { 38770 // Accessing the contentDocument of a HTMLIframeElement can cause the browser 38771 // to throw, e.g. if it has a cross-origin src attribute. 38772 // Safari will show an error in the console when the access results in "Blocked a frame with origin". e.g: 38773 // iframe.contentDocument.defaultView; 38774 // A safety way is to access one of the cross origin properties: Window or Location 38775 // Which might result in "SecurityError" DOM Exception and it is compatible to Safari. 38776 // https://html.spec.whatwg.org/multipage/browsers.html#integration-with-idl 38777 return typeof iframe.contentWindow.location.href === 'string'; 38778 } catch (err) { 38779 return false; 38780 } 38781} 38782 38783function getActiveElementDeep() { 38784 var win = window; 38785 var element = getActiveElement(); 38786 38787 while (element instanceof win.HTMLIFrameElement) { 38788 if (isSameOriginFrame(element)) { 38789 win = element.contentWindow; 38790 } else { 38791 return element; 38792 } 38793 38794 element = getActiveElement(win.document); 38795 } 38796 38797 return element; 38798} 38799/** 38800 * @ReactInputSelection: React input selection module. Based on Selection.js, 38801 * but modified to be suitable for react and has a couple of bug fixes (doesn't 38802 * assume buttons have range selections allowed). 38803 * Input selection module for React. 38804 */ 38805 38806/** 38807 * @hasSelectionCapabilities: we get the element types that support selection 38808 * from https://html.spec.whatwg.org/#do-not-apply, looking at `selectionStart` 38809 * and `selectionEnd` rows. 38810 */ 38811 38812 38813function hasSelectionCapabilities(elem) { 38814 var nodeName = elem && elem.nodeName && elem.nodeName.toLowerCase(); 38815 return nodeName && (nodeName === 'input' && (elem.type === 'text' || elem.type === 'search' || elem.type === 'tel' || elem.type === 'url' || elem.type === 'password') || nodeName === 'textarea' || elem.contentEditable === 'true'); 38816} 38817function getSelectionInformation() { 38818 var focusedElem = getActiveElementDeep(); 38819 return { 38820 focusedElem: focusedElem, 38821 selectionRange: hasSelectionCapabilities(focusedElem) ? getSelection(focusedElem) : null 38822 }; 38823} 38824/** 38825 * @restoreSelection: If any selection information was potentially lost, 38826 * restore it. This is useful when performing operations that could remove dom 38827 * nodes and place them back in, resulting in focus being lost. 38828 */ 38829 38830function restoreSelection(priorSelectionInformation) { 38831 var curFocusedElem = getActiveElementDeep(); 38832 var priorFocusedElem = priorSelectionInformation.focusedElem; 38833 var priorSelectionRange = priorSelectionInformation.selectionRange; 38834 38835 if (curFocusedElem !== priorFocusedElem && isInDocument(priorFocusedElem)) { 38836 if (priorSelectionRange !== null && hasSelectionCapabilities(priorFocusedElem)) { 38837 setSelection(priorFocusedElem, priorSelectionRange); 38838 } // Focusing a node can change the scroll position, which is undesirable 38839 38840 38841 var ancestors = []; 38842 var ancestor = priorFocusedElem; 38843 38844 while (ancestor = ancestor.parentNode) { 38845 if (ancestor.nodeType === ELEMENT_NODE) { 38846 ancestors.push({ 38847 element: ancestor, 38848 left: ancestor.scrollLeft, 38849 top: ancestor.scrollTop 38850 }); 38851 } 38852 } 38853 38854 if (typeof priorFocusedElem.focus === 'function') { 38855 priorFocusedElem.focus(); 38856 } 38857 38858 for (var i = 0; i < ancestors.length; i++) { 38859 var info = ancestors[i]; 38860 info.element.scrollLeft = info.left; 38861 info.element.scrollTop = info.top; 38862 } 38863 } 38864} 38865/** 38866 * @getSelection: Gets the selection bounds of a focused textarea, input or 38867 * contentEditable node. 38868 * -@input: Look up selection bounds of this input 38869 * -@return {start: selectionStart, end: selectionEnd} 38870 */ 38871 38872function getSelection(input) { 38873 var selection; 38874 38875 if ('selectionStart' in input) { 38876 // Modern browser with input or textarea. 38877 selection = { 38878 start: input.selectionStart, 38879 end: input.selectionEnd 38880 }; 38881 } else { 38882 // Content editable or old IE textarea. 38883 selection = getOffsets(input); 38884 } 38885 38886 return selection || { 38887 start: 0, 38888 end: 0 38889 }; 38890} 38891/** 38892 * @setSelection: Sets the selection bounds of a textarea or input and focuses 38893 * the input. 38894 * -@input Set selection bounds of this input or textarea 38895 * -@offsets Object of same form that is returned from get* 38896 */ 38897 38898function setSelection(input, offsets) { 38899 var start = offsets.start; 38900 var end = offsets.end; 38901 38902 if (end === undefined) { 38903 end = start; 38904 } 38905 38906 if ('selectionStart' in input) { 38907 input.selectionStart = start; 38908 input.selectionEnd = Math.min(end, input.value.length); 38909 } else { 38910 setOffsets(input, offsets); 38911 } 38912} 38913 38914var skipSelectionChangeEvent = canUseDOM && 'documentMode' in document && document.documentMode <= 11; 38915 38916function registerEvents$3() { 38917 registerTwoPhaseEvent('onSelect', ['focusout', 'contextmenu', 'dragend', 'focusin', 'keydown', 'keyup', 'mousedown', 'mouseup', 'selectionchange']); 38918} 38919 38920var activeElement$1 = null; 38921var activeElementInst$1 = null; 38922var lastSelection = null; 38923var mouseDown = false; 38924/** 38925 * Get an object which is a unique representation of the current selection. 38926 * 38927 * The return value will not be consistent across nodes or browsers, but 38928 * two identical selections on the same node will return identical objects. 38929 */ 38930 38931function getSelection$1(node) { 38932 if ('selectionStart' in node && hasSelectionCapabilities(node)) { 38933 return { 38934 start: node.selectionStart, 38935 end: node.selectionEnd 38936 }; 38937 } else { 38938 var win = node.ownerDocument && node.ownerDocument.defaultView || window; 38939 var selection = win.getSelection(); 38940 return { 38941 anchorNode: selection.anchorNode, 38942 anchorOffset: selection.anchorOffset, 38943 focusNode: selection.focusNode, 38944 focusOffset: selection.focusOffset 38945 }; 38946 } 38947} 38948/** 38949 * Get document associated with the event target. 38950 */ 38951 38952 38953function getEventTargetDocument(eventTarget) { 38954 return eventTarget.window === eventTarget ? eventTarget.document : eventTarget.nodeType === DOCUMENT_NODE ? eventTarget : eventTarget.ownerDocument; 38955} 38956/** 38957 * Poll selection to see whether it's changed. 38958 * 38959 * @param {object} nativeEvent 38960 * @param {object} nativeEventTarget 38961 * @return {?SyntheticEvent} 38962 */ 38963 38964 38965function constructSelectEvent(dispatchQueue, nativeEvent, nativeEventTarget) { 38966 // Ensure we have the right element, and that the user is not dragging a 38967 // selection (this matches native `select` event behavior). In HTML5, select 38968 // fires only on input and textarea thus if there's no focused element we 38969 // won't dispatch. 38970 var doc = getEventTargetDocument(nativeEventTarget); 38971 38972 if (mouseDown || activeElement$1 == null || activeElement$1 !== getActiveElement(doc)) { 38973 return; 38974 } // Only fire when selection has actually changed. 38975 38976 38977 var currentSelection = getSelection$1(activeElement$1); 38978 38979 if (!lastSelection || !shallowEqual(lastSelection, currentSelection)) { 38980 lastSelection = currentSelection; 38981 var listeners = accumulateTwoPhaseListeners(activeElementInst$1, 'onSelect'); 38982 38983 if (listeners.length > 0) { 38984 var event = new SyntheticEvent('onSelect', 'select', null, nativeEvent, nativeEventTarget); 38985 dispatchQueue.push({ 38986 event: event, 38987 listeners: listeners 38988 }); 38989 event.target = activeElement$1; 38990 } 38991 } 38992} 38993/** 38994 * This plugin creates an `onSelect` event that normalizes select events 38995 * across form elements. 38996 * 38997 * Supported elements are: 38998 * - input (see `isTextInputElement`) 38999 * - textarea 39000 * - contentEditable 39001 * 39002 * This differs from native browser implementations in the following ways: 39003 * - Fires on contentEditable fields as well as inputs. 39004 * - Fires for collapsed selection. 39005 * - Fires after user input. 39006 */ 39007 39008 39009function extractEvents$3(dispatchQueue, domEventName, targetInst, nativeEvent, nativeEventTarget, eventSystemFlags, targetContainer) { 39010 39011 var targetNode = targetInst ? getNodeFromInstance(targetInst) : window; 39012 39013 switch (domEventName) { 39014 // Track the input node that has focus. 39015 case 'focusin': 39016 if (isTextInputElement(targetNode) || targetNode.contentEditable === 'true') { 39017 activeElement$1 = targetNode; 39018 activeElementInst$1 = targetInst; 39019 lastSelection = null; 39020 } 39021 39022 break; 39023 39024 case 'focusout': 39025 activeElement$1 = null; 39026 activeElementInst$1 = null; 39027 lastSelection = null; 39028 break; 39029 // Don't fire the event while the user is dragging. This matches the 39030 // semantics of the native select event. 39031 39032 case 'mousedown': 39033 mouseDown = true; 39034 break; 39035 39036 case 'contextmenu': 39037 case 'mouseup': 39038 case 'dragend': 39039 mouseDown = false; 39040 constructSelectEvent(dispatchQueue, nativeEvent, nativeEventTarget); 39041 break; 39042 // Chrome and IE fire non-standard event when selection is changed (and 39043 // sometimes when it hasn't). IE's event fires out of order with respect 39044 // to key and input events on deletion, so we discard it. 39045 // 39046 // Firefox doesn't support selectionchange, so check selection status 39047 // after each key entry. The selection changes after keydown and before 39048 // keyup, but we check on keydown as well in the case of holding down a 39049 // key, when multiple keydown events are fired but only one keyup is. 39050 // This is also our approach for IE handling, for the reason above. 39051 39052 case 'selectionchange': 39053 if (skipSelectionChangeEvent) { 39054 break; 39055 } 39056 39057 // falls through 39058 39059 case 'keydown': 39060 case 'keyup': 39061 constructSelectEvent(dispatchQueue, nativeEvent, nativeEventTarget); 39062 } 39063} 39064 39065function extractEvents$4(dispatchQueue, domEventName, targetInst, nativeEvent, nativeEventTarget, eventSystemFlags, targetContainer) { 39066 var reactName = topLevelEventsToReactNames.get(domEventName); 39067 39068 if (reactName === undefined) { 39069 return; 39070 } 39071 39072 var SyntheticEventCtor = SyntheticEvent; 39073 var reactEventType = domEventName; 39074 39075 switch (domEventName) { 39076 case 'keypress': 39077 // Firefox creates a keypress event for function keys too. This removes 39078 // the unwanted keypress events. Enter is however both printable and 39079 // non-printable. One would expect Tab to be as well (but it isn't). 39080 if (getEventCharCode(nativeEvent) === 0) { 39081 return; 39082 } 39083 39084 /* falls through */ 39085 39086 case 'keydown': 39087 case 'keyup': 39088 SyntheticEventCtor = SyntheticKeyboardEvent; 39089 break; 39090 39091 case 'focusin': 39092 reactEventType = 'focus'; 39093 SyntheticEventCtor = SyntheticFocusEvent; 39094 break; 39095 39096 case 'focusout': 39097 reactEventType = 'blur'; 39098 SyntheticEventCtor = SyntheticFocusEvent; 39099 break; 39100 39101 case 'beforeblur': 39102 case 'afterblur': 39103 SyntheticEventCtor = SyntheticFocusEvent; 39104 break; 39105 39106 case 'click': 39107 // Firefox creates a click event on right mouse clicks. This removes the 39108 // unwanted click events. 39109 if (nativeEvent.button === 2) { 39110 return; 39111 } 39112 39113 /* falls through */ 39114 39115 case 'auxclick': 39116 case 'dblclick': 39117 case 'mousedown': 39118 case 'mousemove': 39119 case 'mouseup': // TODO: Disabled elements should not respond to mouse events 39120 39121 /* falls through */ 39122 39123 case 'mouseout': 39124 case 'mouseover': 39125 case 'contextmenu': 39126 SyntheticEventCtor = SyntheticMouseEvent; 39127 break; 39128 39129 case 'drag': 39130 case 'dragend': 39131 case 'dragenter': 39132 case 'dragexit': 39133 case 'dragleave': 39134 case 'dragover': 39135 case 'dragstart': 39136 case 'drop': 39137 SyntheticEventCtor = SyntheticDragEvent; 39138 break; 39139 39140 case 'touchcancel': 39141 case 'touchend': 39142 case 'touchmove': 39143 case 'touchstart': 39144 SyntheticEventCtor = SyntheticTouchEvent; 39145 break; 39146 39147 case ANIMATION_END: 39148 case ANIMATION_ITERATION: 39149 case ANIMATION_START: 39150 SyntheticEventCtor = SyntheticAnimationEvent; 39151 break; 39152 39153 case TRANSITION_END: 39154 SyntheticEventCtor = SyntheticTransitionEvent; 39155 break; 39156 39157 case 'scroll': 39158 SyntheticEventCtor = SyntheticUIEvent; 39159 break; 39160 39161 case 'wheel': 39162 SyntheticEventCtor = SyntheticWheelEvent; 39163 break; 39164 39165 case 'copy': 39166 case 'cut': 39167 case 'paste': 39168 SyntheticEventCtor = SyntheticClipboardEvent; 39169 break; 39170 39171 case 'gotpointercapture': 39172 case 'lostpointercapture': 39173 case 'pointercancel': 39174 case 'pointerdown': 39175 case 'pointermove': 39176 case 'pointerout': 39177 case 'pointerover': 39178 case 'pointerup': 39179 SyntheticEventCtor = SyntheticPointerEvent; 39180 break; 39181 } 39182 39183 var inCapturePhase = (eventSystemFlags & IS_CAPTURE_PHASE) !== 0; 39184 39185 { 39186 // Some events don't bubble in the browser. 39187 // In the past, React has always bubbled them, but this can be surprising. 39188 // We're going to try aligning closer to the browser behavior by not bubbling 39189 // them in React either. We'll start by not bubbling onScroll, and then expand. 39190 var accumulateTargetOnly = !inCapturePhase && // TODO: ideally, we'd eventually add all events from 39191 // nonDelegatedEvents list in DOMPluginEventSystem. 39192 // Then we can remove this special list. 39193 // This is a breaking change that can wait until React 18. 39194 domEventName === 'scroll'; 39195 39196 var _listeners = accumulateSinglePhaseListeners(targetInst, reactName, nativeEvent.type, inCapturePhase, accumulateTargetOnly); 39197 39198 if (_listeners.length > 0) { 39199 // Intentionally create event lazily. 39200 var _event = new SyntheticEventCtor(reactName, reactEventType, null, nativeEvent, nativeEventTarget); 39201 39202 dispatchQueue.push({ 39203 event: _event, 39204 listeners: _listeners 39205 }); 39206 } 39207 } 39208} 39209 39210// TODO: remove top-level side effect. 39211registerSimpleEvents(); 39212registerEvents$2(); 39213registerEvents$1(); 39214registerEvents$3(); 39215registerEvents(); 39216 39217function extractEvents$5(dispatchQueue, domEventName, targetInst, nativeEvent, nativeEventTarget, eventSystemFlags, targetContainer) { 39218 // TODO: we should remove the concept of a "SimpleEventPlugin". 39219 // This is the basic functionality of the event system. All 39220 // the other plugins are essentially polyfills. So the plugin 39221 // should probably be inlined somewhere and have its logic 39222 // be core the to event system. This would potentially allow 39223 // us to ship builds of React without the polyfilled plugins below. 39224 extractEvents$4(dispatchQueue, domEventName, targetInst, nativeEvent, nativeEventTarget, eventSystemFlags); 39225 var shouldProcessPolyfillPlugins = (eventSystemFlags & SHOULD_NOT_PROCESS_POLYFILL_EVENT_PLUGINS) === 0; // We don't process these events unless we are in the 39226 // event's native "bubble" phase, which means that we're 39227 // not in the capture phase. That's because we emulate 39228 // the capture phase here still. This is a trade-off, 39229 // because in an ideal world we would not emulate and use 39230 // the phases properly, like we do with the SimpleEvent 39231 // plugin. However, the plugins below either expect 39232 // emulation (EnterLeave) or use state localized to that 39233 // plugin (BeforeInput, Change, Select). The state in 39234 // these modules complicates things, as you'll essentially 39235 // get the case where the capture phase event might change 39236 // state, only for the following bubble event to come in 39237 // later and not trigger anything as the state now 39238 // invalidates the heuristics of the event plugin. We 39239 // could alter all these plugins to work in such ways, but 39240 // that might cause other unknown side-effects that we 39241 // can't forsee right now. 39242 39243 if (shouldProcessPolyfillPlugins) { 39244 extractEvents$2(dispatchQueue, domEventName, targetInst, nativeEvent, nativeEventTarget, eventSystemFlags); 39245 extractEvents$1(dispatchQueue, domEventName, targetInst, nativeEvent, nativeEventTarget); 39246 extractEvents$3(dispatchQueue, domEventName, targetInst, nativeEvent, nativeEventTarget); 39247 extractEvents(dispatchQueue, domEventName, targetInst, nativeEvent, nativeEventTarget); 39248 } 39249} // List of events that need to be individually attached to media elements. 39250 39251 39252var mediaEventTypes = ['abort', 'canplay', 'canplaythrough', 'durationchange', 'emptied', 'encrypted', 'ended', 'error', 'loadeddata', 'loadedmetadata', 'loadstart', 'pause', 'play', 'playing', 'progress', 'ratechange', 'seeked', 'seeking', 'stalled', 'suspend', 'timeupdate', 'volumechange', 'waiting']; // We should not delegate these events to the container, but rather 39253// set them on the actual target element itself. This is primarily 39254// because these events do not consistently bubble in the DOM. 39255 39256var nonDelegatedEvents = new Set(['cancel', 'close', 'invalid', 'load', 'scroll', 'toggle'].concat(mediaEventTypes)); 39257 39258function executeDispatch(event, listener, currentTarget) { 39259 var type = event.type || 'unknown-event'; 39260 event.currentTarget = currentTarget; 39261 invokeGuardedCallbackAndCatchFirstError(type, listener, undefined, event); 39262 event.currentTarget = null; 39263} 39264 39265function processDispatchQueueItemsInOrder(event, dispatchListeners, inCapturePhase) { 39266 var previousInstance; 39267 39268 if (inCapturePhase) { 39269 for (var i = dispatchListeners.length - 1; i >= 0; i--) { 39270 var _dispatchListeners$i = dispatchListeners[i], 39271 instance = _dispatchListeners$i.instance, 39272 currentTarget = _dispatchListeners$i.currentTarget, 39273 listener = _dispatchListeners$i.listener; 39274 39275 if (instance !== previousInstance && event.isPropagationStopped()) { 39276 return; 39277 } 39278 39279 executeDispatch(event, listener, currentTarget); 39280 previousInstance = instance; 39281 } 39282 } else { 39283 for (var _i = 0; _i < dispatchListeners.length; _i++) { 39284 var _dispatchListeners$_i = dispatchListeners[_i], 39285 _instance = _dispatchListeners$_i.instance, 39286 _currentTarget = _dispatchListeners$_i.currentTarget, 39287 _listener = _dispatchListeners$_i.listener; 39288 39289 if (_instance !== previousInstance && event.isPropagationStopped()) { 39290 return; 39291 } 39292 39293 executeDispatch(event, _listener, _currentTarget); 39294 previousInstance = _instance; 39295 } 39296 } 39297} 39298 39299function processDispatchQueue(dispatchQueue, eventSystemFlags) { 39300 var inCapturePhase = (eventSystemFlags & IS_CAPTURE_PHASE) !== 0; 39301 39302 for (var i = 0; i < dispatchQueue.length; i++) { 39303 var _dispatchQueue$i = dispatchQueue[i], 39304 event = _dispatchQueue$i.event, 39305 listeners = _dispatchQueue$i.listeners; 39306 processDispatchQueueItemsInOrder(event, listeners, inCapturePhase); // event system doesn't use pooling. 39307 } // This would be a good time to rethrow if any of the event handlers threw. 39308 39309 39310 rethrowCaughtError(); 39311} 39312 39313function dispatchEventsForPlugins(domEventName, eventSystemFlags, nativeEvent, targetInst, targetContainer) { 39314 var nativeEventTarget = getEventTarget(nativeEvent); 39315 var dispatchQueue = []; 39316 extractEvents$5(dispatchQueue, domEventName, targetInst, nativeEvent, nativeEventTarget, eventSystemFlags); 39317 processDispatchQueue(dispatchQueue, eventSystemFlags); 39318} 39319 39320function listenToNonDelegatedEvent(domEventName, targetElement) { 39321 var isCapturePhaseListener = false; 39322 var listenerSet = getEventListenerSet(targetElement); 39323 var listenerSetKey = getListenerSetKey(domEventName, isCapturePhaseListener); 39324 39325 if (!listenerSet.has(listenerSetKey)) { 39326 addTrappedEventListener(targetElement, domEventName, IS_NON_DELEGATED, isCapturePhaseListener); 39327 listenerSet.add(listenerSetKey); 39328 } 39329} 39330var listeningMarker = '_reactListening' + Math.random().toString(36).slice(2); 39331function listenToAllSupportedEvents(rootContainerElement) { 39332 { 39333 if (rootContainerElement[listeningMarker]) { 39334 // Performance optimization: don't iterate through events 39335 // for the same portal container or root node more than once. 39336 // TODO: once we remove the flag, we may be able to also 39337 // remove some of the bookkeeping maps used for laziness. 39338 return; 39339 } 39340 39341 rootContainerElement[listeningMarker] = true; 39342 allNativeEvents.forEach(function (domEventName) { 39343 if (!nonDelegatedEvents.has(domEventName)) { 39344 listenToNativeEvent(domEventName, false, rootContainerElement, null); 39345 } 39346 39347 listenToNativeEvent(domEventName, true, rootContainerElement, null); 39348 }); 39349 } 39350} 39351function listenToNativeEvent(domEventName, isCapturePhaseListener, rootContainerElement, targetElement) { 39352 var eventSystemFlags = arguments.length > 4 && arguments[4] !== undefined ? arguments[4] : 0; 39353 var target = rootContainerElement; // selectionchange needs to be attached to the document 39354 // otherwise it won't capture incoming events that are only 39355 // triggered on the document directly. 39356 39357 if (domEventName === 'selectionchange' && rootContainerElement.nodeType !== DOCUMENT_NODE) { 39358 target = rootContainerElement.ownerDocument; 39359 } // If the event can be delegated (or is capture phase), we can 39360 // register it to the root container. Otherwise, we should 39361 // register the event to the target element and mark it as 39362 // a non-delegated event. 39363 39364 39365 if (targetElement !== null && !isCapturePhaseListener && nonDelegatedEvents.has(domEventName)) { 39366 // For all non-delegated events, apart from scroll, we attach 39367 // their event listeners to the respective elements that their 39368 // events fire on. That means we can skip this step, as event 39369 // listener has already been added previously. However, we 39370 // special case the scroll event because the reality is that any 39371 // element can scroll. 39372 // TODO: ideally, we'd eventually apply the same logic to all 39373 // events from the nonDelegatedEvents list. Then we can remove 39374 // this special case and use the same logic for all events. 39375 if (domEventName !== 'scroll') { 39376 return; 39377 } 39378 39379 eventSystemFlags |= IS_NON_DELEGATED; 39380 target = targetElement; 39381 } 39382 39383 var listenerSet = getEventListenerSet(target); 39384 var listenerSetKey = getListenerSetKey(domEventName, isCapturePhaseListener); // If the listener entry is empty or we should upgrade, then 39385 // we need to trap an event listener onto the target. 39386 39387 if (!listenerSet.has(listenerSetKey)) { 39388 if (isCapturePhaseListener) { 39389 eventSystemFlags |= IS_CAPTURE_PHASE; 39390 } 39391 39392 addTrappedEventListener(target, domEventName, eventSystemFlags, isCapturePhaseListener); 39393 listenerSet.add(listenerSetKey); 39394 } 39395} 39396 39397function addTrappedEventListener(targetContainer, domEventName, eventSystemFlags, isCapturePhaseListener, isDeferredListenerForLegacyFBSupport) { 39398 var listener = createEventListenerWrapperWithPriority(targetContainer, domEventName, eventSystemFlags); // If passive option is not supported, then the event will be 39399 // active and not passive. 39400 39401 var isPassiveListener = undefined; 39402 39403 if (passiveBrowserEventsSupported) { 39404 // Browsers introduced an intervention, making these events 39405 // passive by default on document. React doesn't bind them 39406 // to document anymore, but changing this now would undo 39407 // the performance wins from the change. So we emulate 39408 // the existing behavior manually on the roots now. 39409 // https://github.com/facebook/react/issues/19651 39410 if (domEventName === 'touchstart' || domEventName === 'touchmove' || domEventName === 'wheel') { 39411 isPassiveListener = true; 39412 } 39413 } 39414 39415 targetContainer = targetContainer; 39416 var unsubscribeListener; // When legacyFBSupport is enabled, it's for when we 39417 39418 39419 if (isCapturePhaseListener) { 39420 if (isPassiveListener !== undefined) { 39421 unsubscribeListener = addEventCaptureListenerWithPassiveFlag(targetContainer, domEventName, listener, isPassiveListener); 39422 } else { 39423 unsubscribeListener = addEventCaptureListener(targetContainer, domEventName, listener); 39424 } 39425 } else { 39426 if (isPassiveListener !== undefined) { 39427 unsubscribeListener = addEventBubbleListenerWithPassiveFlag(targetContainer, domEventName, listener, isPassiveListener); 39428 } else { 39429 unsubscribeListener = addEventBubbleListener(targetContainer, domEventName, listener); 39430 } 39431 } 39432} 39433 39434function isMatchingRootContainer(grandContainer, targetContainer) { 39435 return grandContainer === targetContainer || grandContainer.nodeType === COMMENT_NODE && grandContainer.parentNode === targetContainer; 39436} 39437 39438function dispatchEventForPluginEventSystem(domEventName, eventSystemFlags, nativeEvent, targetInst, targetContainer) { 39439 var ancestorInst = targetInst; 39440 39441 if ((eventSystemFlags & IS_EVENT_HANDLE_NON_MANAGED_NODE) === 0 && (eventSystemFlags & IS_NON_DELEGATED) === 0) { 39442 var targetContainerNode = targetContainer; // If we are using the legacy FB support flag, we 39443 39444 if (targetInst !== null) { 39445 // The below logic attempts to work out if we need to change 39446 // the target fiber to a different ancestor. We had similar logic 39447 // in the legacy event system, except the big difference between 39448 // systems is that the modern event system now has an event listener 39449 // attached to each React Root and React Portal Root. Together, 39450 // the DOM nodes representing these roots are the "rootContainer". 39451 // To figure out which ancestor instance we should use, we traverse 39452 // up the fiber tree from the target instance and attempt to find 39453 // root boundaries that match that of our current "rootContainer". 39454 // If we find that "rootContainer", we find the parent fiber 39455 // sub-tree for that root and make that our ancestor instance. 39456 var node = targetInst; 39457 39458 mainLoop: while (true) { 39459 if (node === null) { 39460 return; 39461 } 39462 39463 var nodeTag = node.tag; 39464 39465 if (nodeTag === HostRoot || nodeTag === HostPortal) { 39466 var container = node.stateNode.containerInfo; 39467 39468 if (isMatchingRootContainer(container, targetContainerNode)) { 39469 break; 39470 } 39471 39472 if (nodeTag === HostPortal) { 39473 // The target is a portal, but it's not the rootContainer we're looking for. 39474 // Normally portals handle their own events all the way down to the root. 39475 // So we should be able to stop now. However, we don't know if this portal 39476 // was part of *our* root. 39477 var grandNode = node.return; 39478 39479 while (grandNode !== null) { 39480 var grandTag = grandNode.tag; 39481 39482 if (grandTag === HostRoot || grandTag === HostPortal) { 39483 var grandContainer = grandNode.stateNode.containerInfo; 39484 39485 if (isMatchingRootContainer(grandContainer, targetContainerNode)) { 39486 // This is the rootContainer we're looking for and we found it as 39487 // a parent of the Portal. That means we can ignore it because the 39488 // Portal will bubble through to us. 39489 return; 39490 } 39491 } 39492 39493 grandNode = grandNode.return; 39494 } 39495 } // Now we need to find it's corresponding host fiber in the other 39496 // tree. To do this we can use getClosestInstanceFromNode, but we 39497 // need to validate that the fiber is a host instance, otherwise 39498 // we need to traverse up through the DOM till we find the correct 39499 // node that is from the other tree. 39500 39501 39502 while (container !== null) { 39503 var parentNode = getClosestInstanceFromNode(container); 39504 39505 if (parentNode === null) { 39506 return; 39507 } 39508 39509 var parentTag = parentNode.tag; 39510 39511 if (parentTag === HostComponent || parentTag === HostText) { 39512 node = ancestorInst = parentNode; 39513 continue mainLoop; 39514 } 39515 39516 container = container.parentNode; 39517 } 39518 } 39519 39520 node = node.return; 39521 } 39522 } 39523 } 39524 39525 batchedEventUpdates(function () { 39526 return dispatchEventsForPlugins(domEventName, eventSystemFlags, nativeEvent, ancestorInst); 39527 }); 39528} 39529 39530function createDispatchListener(instance, listener, currentTarget) { 39531 return { 39532 instance: instance, 39533 listener: listener, 39534 currentTarget: currentTarget 39535 }; 39536} 39537 39538function accumulateSinglePhaseListeners(targetFiber, reactName, nativeEventType, inCapturePhase, accumulateTargetOnly) { 39539 var captureName = reactName !== null ? reactName + 'Capture' : null; 39540 var reactEventName = inCapturePhase ? captureName : reactName; 39541 var listeners = []; 39542 var instance = targetFiber; 39543 var lastHostComponent = null; // Accumulate all instances and listeners via the target -> root path. 39544 39545 while (instance !== null) { 39546 var _instance2 = instance, 39547 stateNode = _instance2.stateNode, 39548 tag = _instance2.tag; // Handle listeners that are on HostComponents (i.e. <div>) 39549 39550 if (tag === HostComponent && stateNode !== null) { 39551 lastHostComponent = stateNode; // createEventHandle listeners 39552 39553 39554 if (reactEventName !== null) { 39555 var listener = getListener(instance, reactEventName); 39556 39557 if (listener != null) { 39558 listeners.push(createDispatchListener(instance, listener, lastHostComponent)); 39559 } 39560 } 39561 } // If we are only accumulating events for the target, then we don't 39562 // continue to propagate through the React fiber tree to find other 39563 // listeners. 39564 39565 39566 if (accumulateTargetOnly) { 39567 break; 39568 } 39569 39570 instance = instance.return; 39571 } 39572 39573 return listeners; 39574} // We should only use this function for: 39575// - BeforeInputEventPlugin 39576// - ChangeEventPlugin 39577// - SelectEventPlugin 39578// This is because we only process these plugins 39579// in the bubble phase, so we need to accumulate two 39580// phase event listeners (via emulation). 39581 39582function accumulateTwoPhaseListeners(targetFiber, reactName) { 39583 var captureName = reactName + 'Capture'; 39584 var listeners = []; 39585 var instance = targetFiber; // Accumulate all instances and listeners via the target -> root path. 39586 39587 while (instance !== null) { 39588 var _instance3 = instance, 39589 stateNode = _instance3.stateNode, 39590 tag = _instance3.tag; // Handle listeners that are on HostComponents (i.e. <div>) 39591 39592 if (tag === HostComponent && stateNode !== null) { 39593 var currentTarget = stateNode; 39594 var captureListener = getListener(instance, captureName); 39595 39596 if (captureListener != null) { 39597 listeners.unshift(createDispatchListener(instance, captureListener, currentTarget)); 39598 } 39599 39600 var bubbleListener = getListener(instance, reactName); 39601 39602 if (bubbleListener != null) { 39603 listeners.push(createDispatchListener(instance, bubbleListener, currentTarget)); 39604 } 39605 } 39606 39607 instance = instance.return; 39608 } 39609 39610 return listeners; 39611} 39612 39613function getParent(inst) { 39614 if (inst === null) { 39615 return null; 39616 } 39617 39618 do { 39619 inst = inst.return; // TODO: If this is a HostRoot we might want to bail out. 39620 // That is depending on if we want nested subtrees (layers) to bubble 39621 // events to their parent. We could also go through parentNode on the 39622 // host node but that wouldn't work for React Native and doesn't let us 39623 // do the portal feature. 39624 } while (inst && inst.tag !== HostComponent); 39625 39626 if (inst) { 39627 return inst; 39628 } 39629 39630 return null; 39631} 39632/** 39633 * Return the lowest common ancestor of A and B, or null if they are in 39634 * different trees. 39635 */ 39636 39637 39638function getLowestCommonAncestor(instA, instB) { 39639 var nodeA = instA; 39640 var nodeB = instB; 39641 var depthA = 0; 39642 39643 for (var tempA = nodeA; tempA; tempA = getParent(tempA)) { 39644 depthA++; 39645 } 39646 39647 var depthB = 0; 39648 39649 for (var tempB = nodeB; tempB; tempB = getParent(tempB)) { 39650 depthB++; 39651 } // If A is deeper, crawl up. 39652 39653 39654 while (depthA - depthB > 0) { 39655 nodeA = getParent(nodeA); 39656 depthA--; 39657 } // If B is deeper, crawl up. 39658 39659 39660 while (depthB - depthA > 0) { 39661 nodeB = getParent(nodeB); 39662 depthB--; 39663 } // Walk in lockstep until we find a match. 39664 39665 39666 var depth = depthA; 39667 39668 while (depth--) { 39669 if (nodeA === nodeB || nodeB !== null && nodeA === nodeB.alternate) { 39670 return nodeA; 39671 } 39672 39673 nodeA = getParent(nodeA); 39674 nodeB = getParent(nodeB); 39675 } 39676 39677 return null; 39678} 39679 39680function accumulateEnterLeaveListenersForEvent(dispatchQueue, event, target, common, inCapturePhase) { 39681 var registrationName = event._reactName; 39682 var listeners = []; 39683 var instance = target; 39684 39685 while (instance !== null) { 39686 if (instance === common) { 39687 break; 39688 } 39689 39690 var _instance4 = instance, 39691 alternate = _instance4.alternate, 39692 stateNode = _instance4.stateNode, 39693 tag = _instance4.tag; 39694 39695 if (alternate !== null && alternate === common) { 39696 break; 39697 } 39698 39699 if (tag === HostComponent && stateNode !== null) { 39700 var currentTarget = stateNode; 39701 39702 if (inCapturePhase) { 39703 var captureListener = getListener(instance, registrationName); 39704 39705 if (captureListener != null) { 39706 listeners.unshift(createDispatchListener(instance, captureListener, currentTarget)); 39707 } 39708 } else if (!inCapturePhase) { 39709 var bubbleListener = getListener(instance, registrationName); 39710 39711 if (bubbleListener != null) { 39712 listeners.push(createDispatchListener(instance, bubbleListener, currentTarget)); 39713 } 39714 } 39715 } 39716 39717 instance = instance.return; 39718 } 39719 39720 if (listeners.length !== 0) { 39721 dispatchQueue.push({ 39722 event: event, 39723 listeners: listeners 39724 }); 39725 } 39726} // We should only use this function for: 39727// - EnterLeaveEventPlugin 39728// This is because we only process this plugin 39729// in the bubble phase, so we need to accumulate two 39730// phase event listeners. 39731 39732 39733function accumulateEnterLeaveTwoPhaseListeners(dispatchQueue, leaveEvent, enterEvent, from, to) { 39734 var common = from && to ? getLowestCommonAncestor(from, to) : null; 39735 39736 if (from !== null) { 39737 accumulateEnterLeaveListenersForEvent(dispatchQueue, leaveEvent, from, common, false); 39738 } 39739 39740 if (to !== null && enterEvent !== null) { 39741 accumulateEnterLeaveListenersForEvent(dispatchQueue, enterEvent, to, common, true); 39742 } 39743} 39744function getListenerSetKey(domEventName, capture) { 39745 return domEventName + "__" + (capture ? 'capture' : 'bubble'); 39746} 39747 39748var didWarnInvalidHydration = false; 39749var DANGEROUSLY_SET_INNER_HTML = 'dangerouslySetInnerHTML'; 39750var SUPPRESS_CONTENT_EDITABLE_WARNING = 'suppressContentEditableWarning'; 39751var SUPPRESS_HYDRATION_WARNING = 'suppressHydrationWarning'; 39752var AUTOFOCUS = 'autoFocus'; 39753var CHILDREN = 'children'; 39754var STYLE = 'style'; 39755var HTML$1 = '__html'; 39756var HTML_NAMESPACE$1 = Namespaces.html; 39757var warnedUnknownTags; 39758var suppressHydrationWarning; 39759var validatePropertiesInDevelopment; 39760var warnForTextDifference; 39761var warnForPropDifference; 39762var warnForExtraAttributes; 39763var warnForInvalidEventListener; 39764var canDiffStyleForHydrationWarning; 39765var normalizeMarkupForTextOrAttribute; 39766var normalizeHTML; 39767 39768{ 39769 warnedUnknownTags = { 39770 // There are working polyfills for <dialog>. Let people use it. 39771 dialog: true, 39772 // Electron ships a custom <webview> tag to display external web content in 39773 // an isolated frame and process. 39774 // This tag is not present in non Electron environments such as JSDom which 39775 // is often used for testing purposes. 39776 // @see https://electronjs.org/docs/api/webview-tag 39777 webview: true 39778 }; 39779 39780 validatePropertiesInDevelopment = function (type, props) { 39781 validateProperties(type, props); 39782 validateProperties$1(type, props); 39783 validateProperties$2(type, props, { 39784 registrationNameDependencies: registrationNameDependencies, 39785 possibleRegistrationNames: possibleRegistrationNames 39786 }); 39787 }; // IE 11 parses & normalizes the style attribute as opposed to other 39788 // browsers. It adds spaces and sorts the properties in some 39789 // non-alphabetical order. Handling that would require sorting CSS 39790 // properties in the client & server versions or applying 39791 // `expectedStyle` to a temporary DOM node to read its `style` attribute 39792 // normalized. Since it only affects IE, we're skipping style warnings 39793 // in that browser completely in favor of doing all that work. 39794 // See https://github.com/facebook/react/issues/11807 39795 39796 39797 canDiffStyleForHydrationWarning = canUseDOM && !document.documentMode; // HTML parsing normalizes CR and CRLF to LF. 39798 // It also can turn \u0000 into \uFFFD inside attributes. 39799 // https://www.w3.org/TR/html5/single-page.html#preprocessing-the-input-stream 39800 // If we have a mismatch, it might be caused by that. 39801 // We will still patch up in this case but not fire the warning. 39802 39803 var NORMALIZE_NEWLINES_REGEX = /\r\n?/g; 39804 var NORMALIZE_NULL_AND_REPLACEMENT_REGEX = /\u0000|\uFFFD/g; 39805 39806 normalizeMarkupForTextOrAttribute = function (markup) { 39807 var markupString = typeof markup === 'string' ? markup : '' + markup; 39808 return markupString.replace(NORMALIZE_NEWLINES_REGEX, '\n').replace(NORMALIZE_NULL_AND_REPLACEMENT_REGEX, ''); 39809 }; 39810 39811 warnForTextDifference = function (serverText, clientText) { 39812 if (didWarnInvalidHydration) { 39813 return; 39814 } 39815 39816 var normalizedClientText = normalizeMarkupForTextOrAttribute(clientText); 39817 var normalizedServerText = normalizeMarkupForTextOrAttribute(serverText); 39818 39819 if (normalizedServerText === normalizedClientText) { 39820 return; 39821 } 39822 39823 didWarnInvalidHydration = true; 39824 39825 error('Text content did not match. Server: "%s" Client: "%s"', normalizedServerText, normalizedClientText); 39826 }; 39827 39828 warnForPropDifference = function (propName, serverValue, clientValue) { 39829 if (didWarnInvalidHydration) { 39830 return; 39831 } 39832 39833 var normalizedClientValue = normalizeMarkupForTextOrAttribute(clientValue); 39834 var normalizedServerValue = normalizeMarkupForTextOrAttribute(serverValue); 39835 39836 if (normalizedServerValue === normalizedClientValue) { 39837 return; 39838 } 39839 39840 didWarnInvalidHydration = true; 39841 39842 error('Prop `%s` did not match. Server: %s Client: %s', propName, JSON.stringify(normalizedServerValue), JSON.stringify(normalizedClientValue)); 39843 }; 39844 39845 warnForExtraAttributes = function (attributeNames) { 39846 if (didWarnInvalidHydration) { 39847 return; 39848 } 39849 39850 didWarnInvalidHydration = true; 39851 var names = []; 39852 attributeNames.forEach(function (name) { 39853 names.push(name); 39854 }); 39855 39856 error('Extra attributes from the server: %s', names); 39857 }; 39858 39859 warnForInvalidEventListener = function (registrationName, listener) { 39860 if (listener === false) { 39861 error('Expected `%s` listener to be a function, instead got `false`.\n\n' + 'If you used to conditionally omit it with %s={condition && value}, ' + 'pass %s={condition ? value : undefined} instead.', registrationName, registrationName, registrationName); 39862 } else { 39863 error('Expected `%s` listener to be a function, instead got a value of `%s` type.', registrationName, typeof listener); 39864 } 39865 }; // Parse the HTML and read it back to normalize the HTML string so that it 39866 // can be used for comparison. 39867 39868 39869 normalizeHTML = function (parent, html) { 39870 // We could have created a separate document here to avoid 39871 // re-initializing custom elements if they exist. But this breaks 39872 // how <noscript> is being handled. So we use the same document. 39873 // See the discussion in https://github.com/facebook/react/pull/11157. 39874 var testElement = parent.namespaceURI === HTML_NAMESPACE$1 ? parent.ownerDocument.createElement(parent.tagName) : parent.ownerDocument.createElementNS(parent.namespaceURI, parent.tagName); 39875 testElement.innerHTML = html; 39876 return testElement.innerHTML; 39877 }; 39878} 39879 39880function getOwnerDocumentFromRootContainer(rootContainerElement) { 39881 return rootContainerElement.nodeType === DOCUMENT_NODE ? rootContainerElement : rootContainerElement.ownerDocument; 39882} 39883 39884function noop() {} 39885 39886function trapClickOnNonInteractiveElement(node) { 39887 // Mobile Safari does not fire properly bubble click events on 39888 // non-interactive elements, which means delegated click listeners do not 39889 // fire. The workaround for this bug involves attaching an empty click 39890 // listener on the target node. 39891 // https://www.quirksmode.org/blog/archives/2010/09/click_event_del.html 39892 // Just set it using the onclick property so that we don't have to manage any 39893 // bookkeeping for it. Not sure if we need to clear it when the listener is 39894 // removed. 39895 // TODO: Only do this for the relevant Safaris maybe? 39896 node.onclick = noop; 39897} 39898 39899function setInitialDOMProperties(tag, domElement, rootContainerElement, nextProps, isCustomComponentTag) { 39900 for (var propKey in nextProps) { 39901 if (!nextProps.hasOwnProperty(propKey)) { 39902 continue; 39903 } 39904 39905 var nextProp = nextProps[propKey]; 39906 39907 if (propKey === STYLE) { 39908 { 39909 if (nextProp) { 39910 // Freeze the next style object so that we can assume it won't be 39911 // mutated. We have already warned for this in the past. 39912 Object.freeze(nextProp); 39913 } 39914 } // Relies on `updateStylesByID` not mutating `styleUpdates`. 39915 39916 39917 setValueForStyles(domElement, nextProp); 39918 } else if (propKey === DANGEROUSLY_SET_INNER_HTML) { 39919 var nextHtml = nextProp ? nextProp[HTML$1] : undefined; 39920 39921 if (nextHtml != null) { 39922 setInnerHTML(domElement, nextHtml); 39923 } 39924 } else if (propKey === CHILDREN) { 39925 if (typeof nextProp === 'string') { 39926 // Avoid setting initial textContent when the text is empty. In IE11 setting 39927 // textContent on a <textarea> will cause the placeholder to not 39928 // show within the <textarea> until it has been focused and blurred again. 39929 // https://github.com/facebook/react/issues/6731#issuecomment-254874553 39930 var canSetTextContent = tag !== 'textarea' || nextProp !== ''; 39931 39932 if (canSetTextContent) { 39933 setTextContent(domElement, nextProp); 39934 } 39935 } else if (typeof nextProp === 'number') { 39936 setTextContent(domElement, '' + nextProp); 39937 } 39938 } else if (propKey === SUPPRESS_CONTENT_EDITABLE_WARNING || propKey === SUPPRESS_HYDRATION_WARNING) ; else if (propKey === AUTOFOCUS) ; else if (registrationNameDependencies.hasOwnProperty(propKey)) { 39939 if (nextProp != null) { 39940 if ( typeof nextProp !== 'function') { 39941 warnForInvalidEventListener(propKey, nextProp); 39942 } 39943 39944 if (propKey === 'onScroll') { 39945 listenToNonDelegatedEvent('scroll', domElement); 39946 } 39947 } 39948 } else if (nextProp != null) { 39949 setValueForProperty(domElement, propKey, nextProp, isCustomComponentTag); 39950 } 39951 } 39952} 39953 39954function updateDOMProperties(domElement, updatePayload, wasCustomComponentTag, isCustomComponentTag) { 39955 // TODO: Handle wasCustomComponentTag 39956 for (var i = 0; i < updatePayload.length; i += 2) { 39957 var propKey = updatePayload[i]; 39958 var propValue = updatePayload[i + 1]; 39959 39960 if (propKey === STYLE) { 39961 setValueForStyles(domElement, propValue); 39962 } else if (propKey === DANGEROUSLY_SET_INNER_HTML) { 39963 setInnerHTML(domElement, propValue); 39964 } else if (propKey === CHILDREN) { 39965 setTextContent(domElement, propValue); 39966 } else { 39967 setValueForProperty(domElement, propKey, propValue, isCustomComponentTag); 39968 } 39969 } 39970} 39971 39972function createElement(type, props, rootContainerElement, parentNamespace) { 39973 var isCustomComponentTag; // We create tags in the namespace of their parent container, except HTML 39974 // tags get no namespace. 39975 39976 var ownerDocument = getOwnerDocumentFromRootContainer(rootContainerElement); 39977 var domElement; 39978 var namespaceURI = parentNamespace; 39979 39980 if (namespaceURI === HTML_NAMESPACE$1) { 39981 namespaceURI = getIntrinsicNamespace(type); 39982 } 39983 39984 if (namespaceURI === HTML_NAMESPACE$1) { 39985 { 39986 isCustomComponentTag = isCustomComponent(type, props); // Should this check be gated by parent namespace? Not sure we want to 39987 // allow <SVG> or <mATH>. 39988 39989 if (!isCustomComponentTag && type !== type.toLowerCase()) { 39990 error('<%s /> is using incorrect casing. ' + 'Use PascalCase for React components, ' + 'or lowercase for HTML elements.', type); 39991 } 39992 } 39993 39994 if (type === 'script') { 39995 // Create the script via .innerHTML so its "parser-inserted" flag is 39996 // set to true and it does not execute 39997 var div = ownerDocument.createElement('div'); 39998 39999 div.innerHTML = '<script><' + '/script>'; // eslint-disable-line 40000 // This is guaranteed to yield a script element. 40001 40002 var firstChild = div.firstChild; 40003 domElement = div.removeChild(firstChild); 40004 } else if (typeof props.is === 'string') { 40005 // $FlowIssue `createElement` should be updated for Web Components 40006 domElement = ownerDocument.createElement(type, { 40007 is: props.is 40008 }); 40009 } else { 40010 // Separate else branch instead of using `props.is || undefined` above because of a Firefox bug. 40011 // See discussion in https://github.com/facebook/react/pull/6896 40012 // and discussion in https://bugzilla.mozilla.org/show_bug.cgi?id=1276240 40013 domElement = ownerDocument.createElement(type); // Normally attributes are assigned in `setInitialDOMProperties`, however the `multiple` and `size` 40014 // attributes on `select`s needs to be added before `option`s are inserted. 40015 // This prevents: 40016 // - a bug where the `select` does not scroll to the correct option because singular 40017 // `select` elements automatically pick the first item #13222 40018 // - a bug where the `select` set the first item as selected despite the `size` attribute #14239 40019 // See https://github.com/facebook/react/issues/13222 40020 // and https://github.com/facebook/react/issues/14239 40021 40022 if (type === 'select') { 40023 var node = domElement; 40024 40025 if (props.multiple) { 40026 node.multiple = true; 40027 } else if (props.size) { 40028 // Setting a size greater than 1 causes a select to behave like `multiple=true`, where 40029 // it is possible that no option is selected. 40030 // 40031 // This is only necessary when a select in "single selection mode". 40032 node.size = props.size; 40033 } 40034 } 40035 } 40036 } else { 40037 domElement = ownerDocument.createElementNS(namespaceURI, type); 40038 } 40039 40040 { 40041 if (namespaceURI === HTML_NAMESPACE$1) { 40042 if (!isCustomComponentTag && Object.prototype.toString.call(domElement) === '[object HTMLUnknownElement]' && !Object.prototype.hasOwnProperty.call(warnedUnknownTags, type)) { 40043 warnedUnknownTags[type] = true; 40044 40045 error('The tag <%s> is unrecognized in this browser. ' + 'If you meant to render a React component, start its name with ' + 'an uppercase letter.', type); 40046 } 40047 } 40048 } 40049 40050 return domElement; 40051} 40052function createTextNode(text, rootContainerElement) { 40053 return getOwnerDocumentFromRootContainer(rootContainerElement).createTextNode(text); 40054} 40055function setInitialProperties(domElement, tag, rawProps, rootContainerElement) { 40056 var isCustomComponentTag = isCustomComponent(tag, rawProps); 40057 40058 { 40059 validatePropertiesInDevelopment(tag, rawProps); 40060 } // TODO: Make sure that we check isMounted before firing any of these events. 40061 40062 40063 var props; 40064 40065 switch (tag) { 40066 case 'dialog': 40067 listenToNonDelegatedEvent('cancel', domElement); 40068 listenToNonDelegatedEvent('close', domElement); 40069 props = rawProps; 40070 break; 40071 40072 case 'iframe': 40073 case 'object': 40074 case 'embed': 40075 // We listen to this event in case to ensure emulated bubble 40076 // listeners still fire for the load event. 40077 listenToNonDelegatedEvent('load', domElement); 40078 props = rawProps; 40079 break; 40080 40081 case 'video': 40082 case 'audio': 40083 // We listen to these events in case to ensure emulated bubble 40084 // listeners still fire for all the media events. 40085 for (var i = 0; i < mediaEventTypes.length; i++) { 40086 listenToNonDelegatedEvent(mediaEventTypes[i], domElement); 40087 } 40088 40089 props = rawProps; 40090 break; 40091 40092 case 'source': 40093 // We listen to this event in case to ensure emulated bubble 40094 // listeners still fire for the error event. 40095 listenToNonDelegatedEvent('error', domElement); 40096 props = rawProps; 40097 break; 40098 40099 case 'img': 40100 case 'image': 40101 case 'link': 40102 // We listen to these events in case to ensure emulated bubble 40103 // listeners still fire for error and load events. 40104 listenToNonDelegatedEvent('error', domElement); 40105 listenToNonDelegatedEvent('load', domElement); 40106 props = rawProps; 40107 break; 40108 40109 case 'details': 40110 // We listen to this event in case to ensure emulated bubble 40111 // listeners still fire for the toggle event. 40112 listenToNonDelegatedEvent('toggle', domElement); 40113 props = rawProps; 40114 break; 40115 40116 case 'input': 40117 initWrapperState(domElement, rawProps); 40118 props = getHostProps(domElement, rawProps); // We listen to this event in case to ensure emulated bubble 40119 // listeners still fire for the invalid event. 40120 40121 listenToNonDelegatedEvent('invalid', domElement); 40122 40123 break; 40124 40125 case 'option': 40126 validateProps(domElement, rawProps); 40127 props = getHostProps$1(domElement, rawProps); 40128 break; 40129 40130 case 'select': 40131 initWrapperState$1(domElement, rawProps); 40132 props = getHostProps$2(domElement, rawProps); // We listen to this event in case to ensure emulated bubble 40133 // listeners still fire for the invalid event. 40134 40135 listenToNonDelegatedEvent('invalid', domElement); 40136 40137 break; 40138 40139 case 'textarea': 40140 initWrapperState$2(domElement, rawProps); 40141 props = getHostProps$3(domElement, rawProps); // We listen to this event in case to ensure emulated bubble 40142 // listeners still fire for the invalid event. 40143 40144 listenToNonDelegatedEvent('invalid', domElement); 40145 40146 break; 40147 40148 default: 40149 props = rawProps; 40150 } 40151 40152 assertValidProps(tag, props); 40153 setInitialDOMProperties(tag, domElement, rootContainerElement, props, isCustomComponentTag); 40154 40155 switch (tag) { 40156 case 'input': 40157 // TODO: Make sure we check if this is still unmounted or do any clean 40158 // up necessary since we never stop tracking anymore. 40159 track(domElement); 40160 postMountWrapper(domElement, rawProps, false); 40161 break; 40162 40163 case 'textarea': 40164 // TODO: Make sure we check if this is still unmounted or do any clean 40165 // up necessary since we never stop tracking anymore. 40166 track(domElement); 40167 postMountWrapper$3(domElement); 40168 break; 40169 40170 case 'option': 40171 postMountWrapper$1(domElement, rawProps); 40172 break; 40173 40174 case 'select': 40175 postMountWrapper$2(domElement, rawProps); 40176 break; 40177 40178 default: 40179 if (typeof props.onClick === 'function') { 40180 // TODO: This cast may not be sound for SVG, MathML or custom elements. 40181 trapClickOnNonInteractiveElement(domElement); 40182 } 40183 40184 break; 40185 } 40186} // Calculate the diff between the two objects. 40187 40188function diffProperties(domElement, tag, lastRawProps, nextRawProps, rootContainerElement) { 40189 { 40190 validatePropertiesInDevelopment(tag, nextRawProps); 40191 } 40192 40193 var updatePayload = null; 40194 var lastProps; 40195 var nextProps; 40196 40197 switch (tag) { 40198 case 'input': 40199 lastProps = getHostProps(domElement, lastRawProps); 40200 nextProps = getHostProps(domElement, nextRawProps); 40201 updatePayload = []; 40202 break; 40203 40204 case 'option': 40205 lastProps = getHostProps$1(domElement, lastRawProps); 40206 nextProps = getHostProps$1(domElement, nextRawProps); 40207 updatePayload = []; 40208 break; 40209 40210 case 'select': 40211 lastProps = getHostProps$2(domElement, lastRawProps); 40212 nextProps = getHostProps$2(domElement, nextRawProps); 40213 updatePayload = []; 40214 break; 40215 40216 case 'textarea': 40217 lastProps = getHostProps$3(domElement, lastRawProps); 40218 nextProps = getHostProps$3(domElement, nextRawProps); 40219 updatePayload = []; 40220 break; 40221 40222 default: 40223 lastProps = lastRawProps; 40224 nextProps = nextRawProps; 40225 40226 if (typeof lastProps.onClick !== 'function' && typeof nextProps.onClick === 'function') { 40227 // TODO: This cast may not be sound for SVG, MathML or custom elements. 40228 trapClickOnNonInteractiveElement(domElement); 40229 } 40230 40231 break; 40232 } 40233 40234 assertValidProps(tag, nextProps); 40235 var propKey; 40236 var styleName; 40237 var styleUpdates = null; 40238 40239 for (propKey in lastProps) { 40240 if (nextProps.hasOwnProperty(propKey) || !lastProps.hasOwnProperty(propKey) || lastProps[propKey] == null) { 40241 continue; 40242 } 40243 40244 if (propKey === STYLE) { 40245 var lastStyle = lastProps[propKey]; 40246 40247 for (styleName in lastStyle) { 40248 if (lastStyle.hasOwnProperty(styleName)) { 40249 if (!styleUpdates) { 40250 styleUpdates = {}; 40251 } 40252 40253 styleUpdates[styleName] = ''; 40254 } 40255 } 40256 } else if (propKey === DANGEROUSLY_SET_INNER_HTML || propKey === CHILDREN) ; else if (propKey === SUPPRESS_CONTENT_EDITABLE_WARNING || propKey === SUPPRESS_HYDRATION_WARNING) ; else if (propKey === AUTOFOCUS) ; else if (registrationNameDependencies.hasOwnProperty(propKey)) { 40257 // This is a special case. If any listener updates we need to ensure 40258 // that the "current" fiber pointer gets updated so we need a commit 40259 // to update this element. 40260 if (!updatePayload) { 40261 updatePayload = []; 40262 } 40263 } else { 40264 // For all other deleted properties we add it to the queue. We use 40265 // the allowed property list in the commit phase instead. 40266 (updatePayload = updatePayload || []).push(propKey, null); 40267 } 40268 } 40269 40270 for (propKey in nextProps) { 40271 var nextProp = nextProps[propKey]; 40272 var lastProp = lastProps != null ? lastProps[propKey] : undefined; 40273 40274 if (!nextProps.hasOwnProperty(propKey) || nextProp === lastProp || nextProp == null && lastProp == null) { 40275 continue; 40276 } 40277 40278 if (propKey === STYLE) { 40279 { 40280 if (nextProp) { 40281 // Freeze the next style object so that we can assume it won't be 40282 // mutated. We have already warned for this in the past. 40283 Object.freeze(nextProp); 40284 } 40285 } 40286 40287 if (lastProp) { 40288 // Unset styles on `lastProp` but not on `nextProp`. 40289 for (styleName in lastProp) { 40290 if (lastProp.hasOwnProperty(styleName) && (!nextProp || !nextProp.hasOwnProperty(styleName))) { 40291 if (!styleUpdates) { 40292 styleUpdates = {}; 40293 } 40294 40295 styleUpdates[styleName] = ''; 40296 } 40297 } // Update styles that changed since `lastProp`. 40298 40299 40300 for (styleName in nextProp) { 40301 if (nextProp.hasOwnProperty(styleName) && lastProp[styleName] !== nextProp[styleName]) { 40302 if (!styleUpdates) { 40303 styleUpdates = {}; 40304 } 40305 40306 styleUpdates[styleName] = nextProp[styleName]; 40307 } 40308 } 40309 } else { 40310 // Relies on `updateStylesByID` not mutating `styleUpdates`. 40311 if (!styleUpdates) { 40312 if (!updatePayload) { 40313 updatePayload = []; 40314 } 40315 40316 updatePayload.push(propKey, styleUpdates); 40317 } 40318 40319 styleUpdates = nextProp; 40320 } 40321 } else if (propKey === DANGEROUSLY_SET_INNER_HTML) { 40322 var nextHtml = nextProp ? nextProp[HTML$1] : undefined; 40323 var lastHtml = lastProp ? lastProp[HTML$1] : undefined; 40324 40325 if (nextHtml != null) { 40326 if (lastHtml !== nextHtml) { 40327 (updatePayload = updatePayload || []).push(propKey, nextHtml); 40328 } 40329 } 40330 } else if (propKey === CHILDREN) { 40331 if (typeof nextProp === 'string' || typeof nextProp === 'number') { 40332 (updatePayload = updatePayload || []).push(propKey, '' + nextProp); 40333 } 40334 } else if (propKey === SUPPRESS_CONTENT_EDITABLE_WARNING || propKey === SUPPRESS_HYDRATION_WARNING) ; else if (registrationNameDependencies.hasOwnProperty(propKey)) { 40335 if (nextProp != null) { 40336 // We eagerly listen to this even though we haven't committed yet. 40337 if ( typeof nextProp !== 'function') { 40338 warnForInvalidEventListener(propKey, nextProp); 40339 } 40340 40341 if (propKey === 'onScroll') { 40342 listenToNonDelegatedEvent('scroll', domElement); 40343 } 40344 } 40345 40346 if (!updatePayload && lastProp !== nextProp) { 40347 // This is a special case. If any listener updates we need to ensure 40348 // that the "current" props pointer gets updated so we need a commit 40349 // to update this element. 40350 updatePayload = []; 40351 } 40352 } else if (typeof nextProp === 'object' && nextProp !== null && nextProp.$$typeof === REACT_OPAQUE_ID_TYPE) { 40353 // If we encounter useOpaqueReference's opaque object, this means we are hydrating. 40354 // In this case, call the opaque object's toString function which generates a new client 40355 // ID so client and server IDs match and throws to rerender. 40356 nextProp.toString(); 40357 } else { 40358 // For any other property we always add it to the queue and then we 40359 // filter it out using the allowed property list during the commit. 40360 (updatePayload = updatePayload || []).push(propKey, nextProp); 40361 } 40362 } 40363 40364 if (styleUpdates) { 40365 { 40366 validateShorthandPropertyCollisionInDev(styleUpdates, nextProps[STYLE]); 40367 } 40368 40369 (updatePayload = updatePayload || []).push(STYLE, styleUpdates); 40370 } 40371 40372 return updatePayload; 40373} // Apply the diff. 40374 40375function updateProperties(domElement, updatePayload, tag, lastRawProps, nextRawProps) { 40376 // Update checked *before* name. 40377 // In the middle of an update, it is possible to have multiple checked. 40378 // When a checked radio tries to change name, browser makes another radio's checked false. 40379 if (tag === 'input' && nextRawProps.type === 'radio' && nextRawProps.name != null) { 40380 updateChecked(domElement, nextRawProps); 40381 } 40382 40383 var wasCustomComponentTag = isCustomComponent(tag, lastRawProps); 40384 var isCustomComponentTag = isCustomComponent(tag, nextRawProps); // Apply the diff. 40385 40386 updateDOMProperties(domElement, updatePayload, wasCustomComponentTag, isCustomComponentTag); // TODO: Ensure that an update gets scheduled if any of the special props 40387 // changed. 40388 40389 switch (tag) { 40390 case 'input': 40391 // Update the wrapper around inputs *after* updating props. This has to 40392 // happen after `updateDOMProperties`. Otherwise HTML5 input validations 40393 // raise warnings and prevent the new value from being assigned. 40394 updateWrapper(domElement, nextRawProps); 40395 break; 40396 40397 case 'textarea': 40398 updateWrapper$1(domElement, nextRawProps); 40399 break; 40400 40401 case 'select': 40402 // <select> value update needs to occur after <option> children 40403 // reconciliation 40404 postUpdateWrapper(domElement, nextRawProps); 40405 break; 40406 } 40407} 40408 40409function getPossibleStandardName(propName) { 40410 { 40411 var lowerCasedName = propName.toLowerCase(); 40412 40413 if (!possibleStandardNames.hasOwnProperty(lowerCasedName)) { 40414 return null; 40415 } 40416 40417 return possibleStandardNames[lowerCasedName] || null; 40418 } 40419} 40420 40421function diffHydratedProperties(domElement, tag, rawProps, parentNamespace, rootContainerElement) { 40422 var isCustomComponentTag; 40423 var extraAttributeNames; 40424 40425 { 40426 suppressHydrationWarning = rawProps[SUPPRESS_HYDRATION_WARNING] === true; 40427 isCustomComponentTag = isCustomComponent(tag, rawProps); 40428 validatePropertiesInDevelopment(tag, rawProps); 40429 } // TODO: Make sure that we check isMounted before firing any of these events. 40430 40431 40432 switch (tag) { 40433 case 'dialog': 40434 listenToNonDelegatedEvent('cancel', domElement); 40435 listenToNonDelegatedEvent('close', domElement); 40436 break; 40437 40438 case 'iframe': 40439 case 'object': 40440 case 'embed': 40441 // We listen to this event in case to ensure emulated bubble 40442 // listeners still fire for the load event. 40443 listenToNonDelegatedEvent('load', domElement); 40444 break; 40445 40446 case 'video': 40447 case 'audio': 40448 // We listen to these events in case to ensure emulated bubble 40449 // listeners still fire for all the media events. 40450 for (var i = 0; i < mediaEventTypes.length; i++) { 40451 listenToNonDelegatedEvent(mediaEventTypes[i], domElement); 40452 } 40453 40454 break; 40455 40456 case 'source': 40457 // We listen to this event in case to ensure emulated bubble 40458 // listeners still fire for the error event. 40459 listenToNonDelegatedEvent('error', domElement); 40460 break; 40461 40462 case 'img': 40463 case 'image': 40464 case 'link': 40465 // We listen to these events in case to ensure emulated bubble 40466 // listeners still fire for error and load events. 40467 listenToNonDelegatedEvent('error', domElement); 40468 listenToNonDelegatedEvent('load', domElement); 40469 break; 40470 40471 case 'details': 40472 // We listen to this event in case to ensure emulated bubble 40473 // listeners still fire for the toggle event. 40474 listenToNonDelegatedEvent('toggle', domElement); 40475 break; 40476 40477 case 'input': 40478 initWrapperState(domElement, rawProps); // We listen to this event in case to ensure emulated bubble 40479 // listeners still fire for the invalid event. 40480 40481 listenToNonDelegatedEvent('invalid', domElement); 40482 40483 break; 40484 40485 case 'option': 40486 validateProps(domElement, rawProps); 40487 break; 40488 40489 case 'select': 40490 initWrapperState$1(domElement, rawProps); // We listen to this event in case to ensure emulated bubble 40491 // listeners still fire for the invalid event. 40492 40493 listenToNonDelegatedEvent('invalid', domElement); 40494 40495 break; 40496 40497 case 'textarea': 40498 initWrapperState$2(domElement, rawProps); // We listen to this event in case to ensure emulated bubble 40499 // listeners still fire for the invalid event. 40500 40501 listenToNonDelegatedEvent('invalid', domElement); 40502 40503 break; 40504 } 40505 40506 assertValidProps(tag, rawProps); 40507 40508 { 40509 extraAttributeNames = new Set(); 40510 var attributes = domElement.attributes; 40511 40512 for (var _i = 0; _i < attributes.length; _i++) { 40513 var name = attributes[_i].name.toLowerCase(); 40514 40515 switch (name) { 40516 // Built-in SSR attribute is allowed 40517 case 'data-reactroot': 40518 break; 40519 // Controlled attributes are not validated 40520 // TODO: Only ignore them on controlled tags. 40521 40522 case 'value': 40523 break; 40524 40525 case 'checked': 40526 break; 40527 40528 case 'selected': 40529 break; 40530 40531 default: 40532 // Intentionally use the original name. 40533 // See discussion in https://github.com/facebook/react/pull/10676. 40534 extraAttributeNames.add(attributes[_i].name); 40535 } 40536 } 40537 } 40538 40539 var updatePayload = null; 40540 40541 for (var propKey in rawProps) { 40542 if (!rawProps.hasOwnProperty(propKey)) { 40543 continue; 40544 } 40545 40546 var nextProp = rawProps[propKey]; 40547 40548 if (propKey === CHILDREN) { 40549 // For text content children we compare against textContent. This 40550 // might match additional HTML that is hidden when we read it using 40551 // textContent. E.g. "foo" will match "f<span>oo</span>" but that still 40552 // satisfies our requirement. Our requirement is not to produce perfect 40553 // HTML and attributes. Ideally we should preserve structure but it's 40554 // ok not to if the visible content is still enough to indicate what 40555 // even listeners these nodes might be wired up to. 40556 // TODO: Warn if there is more than a single textNode as a child. 40557 // TODO: Should we use domElement.firstChild.nodeValue to compare? 40558 if (typeof nextProp === 'string') { 40559 if (domElement.textContent !== nextProp) { 40560 if ( !suppressHydrationWarning) { 40561 warnForTextDifference(domElement.textContent, nextProp); 40562 } 40563 40564 updatePayload = [CHILDREN, nextProp]; 40565 } 40566 } else if (typeof nextProp === 'number') { 40567 if (domElement.textContent !== '' + nextProp) { 40568 if ( !suppressHydrationWarning) { 40569 warnForTextDifference(domElement.textContent, nextProp); 40570 } 40571 40572 updatePayload = [CHILDREN, '' + nextProp]; 40573 } 40574 } 40575 } else if (registrationNameDependencies.hasOwnProperty(propKey)) { 40576 if (nextProp != null) { 40577 if ( typeof nextProp !== 'function') { 40578 warnForInvalidEventListener(propKey, nextProp); 40579 } 40580 40581 if (propKey === 'onScroll') { 40582 listenToNonDelegatedEvent('scroll', domElement); 40583 } 40584 } 40585 } else if ( // Convince Flow we've calculated it (it's DEV-only in this method.) 40586 typeof isCustomComponentTag === 'boolean') { 40587 // Validate that the properties correspond to their expected values. 40588 var serverValue = void 0; 40589 var propertyInfo = getPropertyInfo(propKey); 40590 40591 if (suppressHydrationWarning) ; else if (propKey === SUPPRESS_CONTENT_EDITABLE_WARNING || propKey === SUPPRESS_HYDRATION_WARNING || // Controlled attributes are not validated 40592 // TODO: Only ignore them on controlled tags. 40593 propKey === 'value' || propKey === 'checked' || propKey === 'selected') ; else if (propKey === DANGEROUSLY_SET_INNER_HTML) { 40594 var serverHTML = domElement.innerHTML; 40595 var nextHtml = nextProp ? nextProp[HTML$1] : undefined; 40596 40597 if (nextHtml != null) { 40598 var expectedHTML = normalizeHTML(domElement, nextHtml); 40599 40600 if (expectedHTML !== serverHTML) { 40601 warnForPropDifference(propKey, serverHTML, expectedHTML); 40602 } 40603 } 40604 } else if (propKey === STYLE) { 40605 // $FlowFixMe - Should be inferred as not undefined. 40606 extraAttributeNames.delete(propKey); 40607 40608 if (canDiffStyleForHydrationWarning) { 40609 var expectedStyle = createDangerousStringForStyles(nextProp); 40610 serverValue = domElement.getAttribute('style'); 40611 40612 if (expectedStyle !== serverValue) { 40613 warnForPropDifference(propKey, serverValue, expectedStyle); 40614 } 40615 } 40616 } else if (isCustomComponentTag) { 40617 // $FlowFixMe - Should be inferred as not undefined. 40618 extraAttributeNames.delete(propKey.toLowerCase()); 40619 serverValue = getValueForAttribute(domElement, propKey, nextProp); 40620 40621 if (nextProp !== serverValue) { 40622 warnForPropDifference(propKey, serverValue, nextProp); 40623 } 40624 } else if (!shouldIgnoreAttribute(propKey, propertyInfo, isCustomComponentTag) && !shouldRemoveAttribute(propKey, nextProp, propertyInfo, isCustomComponentTag)) { 40625 var isMismatchDueToBadCasing = false; 40626 40627 if (propertyInfo !== null) { 40628 // $FlowFixMe - Should be inferred as not undefined. 40629 extraAttributeNames.delete(propertyInfo.attributeName); 40630 serverValue = getValueForProperty(domElement, propKey, nextProp, propertyInfo); 40631 } else { 40632 var ownNamespace = parentNamespace; 40633 40634 if (ownNamespace === HTML_NAMESPACE$1) { 40635 ownNamespace = getIntrinsicNamespace(tag); 40636 } 40637 40638 if (ownNamespace === HTML_NAMESPACE$1) { 40639 // $FlowFixMe - Should be inferred as not undefined. 40640 extraAttributeNames.delete(propKey.toLowerCase()); 40641 } else { 40642 var standardName = getPossibleStandardName(propKey); 40643 40644 if (standardName !== null && standardName !== propKey) { 40645 // If an SVG prop is supplied with bad casing, it will 40646 // be successfully parsed from HTML, but will produce a mismatch 40647 // (and would be incorrectly rendered on the client). 40648 // However, we already warn about bad casing elsewhere. 40649 // So we'll skip the misleading extra mismatch warning in this case. 40650 isMismatchDueToBadCasing = true; // $FlowFixMe - Should be inferred as not undefined. 40651 40652 extraAttributeNames.delete(standardName); 40653 } // $FlowFixMe - Should be inferred as not undefined. 40654 40655 40656 extraAttributeNames.delete(propKey); 40657 } 40658 40659 serverValue = getValueForAttribute(domElement, propKey, nextProp); 40660 } 40661 40662 if (nextProp !== serverValue && !isMismatchDueToBadCasing) { 40663 warnForPropDifference(propKey, serverValue, nextProp); 40664 } 40665 } 40666 } 40667 } 40668 40669 { 40670 // $FlowFixMe - Should be inferred as not undefined. 40671 if (extraAttributeNames.size > 0 && !suppressHydrationWarning) { 40672 // $FlowFixMe - Should be inferred as not undefined. 40673 warnForExtraAttributes(extraAttributeNames); 40674 } 40675 } 40676 40677 switch (tag) { 40678 case 'input': 40679 // TODO: Make sure we check if this is still unmounted or do any clean 40680 // up necessary since we never stop tracking anymore. 40681 track(domElement); 40682 postMountWrapper(domElement, rawProps, true); 40683 break; 40684 40685 case 'textarea': 40686 // TODO: Make sure we check if this is still unmounted or do any clean 40687 // up necessary since we never stop tracking anymore. 40688 track(domElement); 40689 postMountWrapper$3(domElement); 40690 break; 40691 40692 case 'select': 40693 case 'option': 40694 // For input and textarea we current always set the value property at 40695 // post mount to force it to diverge from attributes. However, for 40696 // option and select we don't quite do the same thing and select 40697 // is not resilient to the DOM state changing so we don't do that here. 40698 // TODO: Consider not doing this for input and textarea. 40699 break; 40700 40701 default: 40702 if (typeof rawProps.onClick === 'function') { 40703 // TODO: This cast may not be sound for SVG, MathML or custom elements. 40704 trapClickOnNonInteractiveElement(domElement); 40705 } 40706 40707 break; 40708 } 40709 40710 return updatePayload; 40711} 40712function diffHydratedText(textNode, text) { 40713 var isDifferent = textNode.nodeValue !== text; 40714 return isDifferent; 40715} 40716function warnForUnmatchedText(textNode, text) { 40717 { 40718 warnForTextDifference(textNode.nodeValue, text); 40719 } 40720} 40721function warnForDeletedHydratableElement(parentNode, child) { 40722 { 40723 if (didWarnInvalidHydration) { 40724 return; 40725 } 40726 40727 didWarnInvalidHydration = true; 40728 40729 error('Did not expect server HTML to contain a <%s> in <%s>.', child.nodeName.toLowerCase(), parentNode.nodeName.toLowerCase()); 40730 } 40731} 40732function warnForDeletedHydratableText(parentNode, child) { 40733 { 40734 if (didWarnInvalidHydration) { 40735 return; 40736 } 40737 40738 didWarnInvalidHydration = true; 40739 40740 error('Did not expect server HTML to contain the text node "%s" in <%s>.', child.nodeValue, parentNode.nodeName.toLowerCase()); 40741 } 40742} 40743function warnForInsertedHydratedElement(parentNode, tag, props) { 40744 { 40745 if (didWarnInvalidHydration) { 40746 return; 40747 } 40748 40749 didWarnInvalidHydration = true; 40750 40751 error('Expected server HTML to contain a matching <%s> in <%s>.', tag, parentNode.nodeName.toLowerCase()); 40752 } 40753} 40754function warnForInsertedHydratedText(parentNode, text) { 40755 { 40756 if (text === '') { 40757 // We expect to insert empty text nodes since they're not represented in 40758 // the HTML. 40759 // TODO: Remove this special case if we can just avoid inserting empty 40760 // text nodes. 40761 return; 40762 } 40763 40764 if (didWarnInvalidHydration) { 40765 return; 40766 } 40767 40768 didWarnInvalidHydration = true; 40769 40770 error('Expected server HTML to contain a matching text node for "%s" in <%s>.', text, parentNode.nodeName.toLowerCase()); 40771 } 40772} 40773function restoreControlledState$3(domElement, tag, props) { 40774 switch (tag) { 40775 case 'input': 40776 restoreControlledState(domElement, props); 40777 return; 40778 40779 case 'textarea': 40780 restoreControlledState$2(domElement, props); 40781 return; 40782 40783 case 'select': 40784 restoreControlledState$1(domElement, props); 40785 return; 40786 } 40787} 40788 40789var validateDOMNesting = function () {}; 40790 40791var updatedAncestorInfo = function () {}; 40792 40793{ 40794 // This validation code was written based on the HTML5 parsing spec: 40795 // https://html.spec.whatwg.org/multipage/syntax.html#has-an-element-in-scope 40796 // 40797 // Note: this does not catch all invalid nesting, nor does it try to (as it's 40798 // not clear what practical benefit doing so provides); instead, we warn only 40799 // for cases where the parser will give a parse tree differing from what React 40800 // intended. For example, <b><div></div></b> is invalid but we don't warn 40801 // because it still parses correctly; we do warn for other cases like nested 40802 // <p> tags where the beginning of the second element implicitly closes the 40803 // first, causing a confusing mess. 40804 // https://html.spec.whatwg.org/multipage/syntax.html#special 40805 var specialTags = ['address', 'applet', 'area', 'article', 'aside', 'base', 'basefont', 'bgsound', 'blockquote', 'body', 'br', 'button', 'caption', 'center', 'col', 'colgroup', 'dd', 'details', 'dir', 'div', 'dl', 'dt', 'embed', 'fieldset', 'figcaption', 'figure', 'footer', 'form', 'frame', 'frameset', 'h1', 'h2', 'h3', 'h4', 'h5', 'h6', 'head', 'header', 'hgroup', 'hr', 'html', 'iframe', 'img', 'input', 'isindex', 'li', 'link', 'listing', 'main', 'marquee', 'menu', 'menuitem', 'meta', 'nav', 'noembed', 'noframes', 'noscript', 'object', 'ol', 'p', 'param', 'plaintext', 'pre', 'script', 'section', 'select', 'source', 'style', 'summary', 'table', 'tbody', 'td', 'template', 'textarea', 'tfoot', 'th', 'thead', 'title', 'tr', 'track', 'ul', 'wbr', 'xmp']; // https://html.spec.whatwg.org/multipage/syntax.html#has-an-element-in-scope 40806 40807 var inScopeTags = ['applet', 'caption', 'html', 'table', 'td', 'th', 'marquee', 'object', 'template', // https://html.spec.whatwg.org/multipage/syntax.html#html-integration-point 40808 // TODO: Distinguish by namespace here -- for <title>, including it here 40809 // errs on the side of fewer warnings 40810 'foreignObject', 'desc', 'title']; // https://html.spec.whatwg.org/multipage/syntax.html#has-an-element-in-button-scope 40811 40812 var buttonScopeTags = inScopeTags.concat(['button']); // https://html.spec.whatwg.org/multipage/syntax.html#generate-implied-end-tags 40813 40814 var impliedEndTags = ['dd', 'dt', 'li', 'option', 'optgroup', 'p', 'rp', 'rt']; 40815 var emptyAncestorInfo = { 40816 current: null, 40817 formTag: null, 40818 aTagInScope: null, 40819 buttonTagInScope: null, 40820 nobrTagInScope: null, 40821 pTagInButtonScope: null, 40822 listItemTagAutoclosing: null, 40823 dlItemTagAutoclosing: null 40824 }; 40825 40826 updatedAncestorInfo = function (oldInfo, tag) { 40827 var ancestorInfo = _assign({}, oldInfo || emptyAncestorInfo); 40828 40829 var info = { 40830 tag: tag 40831 }; 40832 40833 if (inScopeTags.indexOf(tag) !== -1) { 40834 ancestorInfo.aTagInScope = null; 40835 ancestorInfo.buttonTagInScope = null; 40836 ancestorInfo.nobrTagInScope = null; 40837 } 40838 40839 if (buttonScopeTags.indexOf(tag) !== -1) { 40840 ancestorInfo.pTagInButtonScope = null; 40841 } // See rules for 'li', 'dd', 'dt' start tags in 40842 // https://html.spec.whatwg.org/multipage/syntax.html#parsing-main-inbody 40843 40844 40845 if (specialTags.indexOf(tag) !== -1 && tag !== 'address' && tag !== 'div' && tag !== 'p') { 40846 ancestorInfo.listItemTagAutoclosing = null; 40847 ancestorInfo.dlItemTagAutoclosing = null; 40848 } 40849 40850 ancestorInfo.current = info; 40851 40852 if (tag === 'form') { 40853 ancestorInfo.formTag = info; 40854 } 40855 40856 if (tag === 'a') { 40857 ancestorInfo.aTagInScope = info; 40858 } 40859 40860 if (tag === 'button') { 40861 ancestorInfo.buttonTagInScope = info; 40862 } 40863 40864 if (tag === 'nobr') { 40865 ancestorInfo.nobrTagInScope = info; 40866 } 40867 40868 if (tag === 'p') { 40869 ancestorInfo.pTagInButtonScope = info; 40870 } 40871 40872 if (tag === 'li') { 40873 ancestorInfo.listItemTagAutoclosing = info; 40874 } 40875 40876 if (tag === 'dd' || tag === 'dt') { 40877 ancestorInfo.dlItemTagAutoclosing = info; 40878 } 40879 40880 return ancestorInfo; 40881 }; 40882 /** 40883 * Returns whether 40884 */ 40885 40886 40887 var isTagValidWithParent = function (tag, parentTag) { 40888 // First, let's check if we're in an unusual parsing mode... 40889 switch (parentTag) { 40890 // https://html.spec.whatwg.org/multipage/syntax.html#parsing-main-inselect 40891 case 'select': 40892 return tag === 'option' || tag === 'optgroup' || tag === '#text'; 40893 40894 case 'optgroup': 40895 return tag === 'option' || tag === '#text'; 40896 // Strictly speaking, seeing an <option> doesn't mean we're in a <select> 40897 // but 40898 40899 case 'option': 40900 return tag === '#text'; 40901 // https://html.spec.whatwg.org/multipage/syntax.html#parsing-main-intd 40902 // https://html.spec.whatwg.org/multipage/syntax.html#parsing-main-incaption 40903 // No special behavior since these rules fall back to "in body" mode for 40904 // all except special table nodes which cause bad parsing behavior anyway. 40905 // https://html.spec.whatwg.org/multipage/syntax.html#parsing-main-intr 40906 40907 case 'tr': 40908 return tag === 'th' || tag === 'td' || tag === 'style' || tag === 'script' || tag === 'template'; 40909 // https://html.spec.whatwg.org/multipage/syntax.html#parsing-main-intbody 40910 40911 case 'tbody': 40912 case 'thead': 40913 case 'tfoot': 40914 return tag === 'tr' || tag === 'style' || tag === 'script' || tag === 'template'; 40915 // https://html.spec.whatwg.org/multipage/syntax.html#parsing-main-incolgroup 40916 40917 case 'colgroup': 40918 return tag === 'col' || tag === 'template'; 40919 // https://html.spec.whatwg.org/multipage/syntax.html#parsing-main-intable 40920 40921 case 'table': 40922 return tag === 'caption' || tag === 'colgroup' || tag === 'tbody' || tag === 'tfoot' || tag === 'thead' || tag === 'style' || tag === 'script' || tag === 'template'; 40923 // https://html.spec.whatwg.org/multipage/syntax.html#parsing-main-inhead 40924 40925 case 'head': 40926 return tag === 'base' || tag === 'basefont' || tag === 'bgsound' || tag === 'link' || tag === 'meta' || tag === 'title' || tag === 'noscript' || tag === 'noframes' || tag === 'style' || tag === 'script' || tag === 'template'; 40927 // https://html.spec.whatwg.org/multipage/semantics.html#the-html-element 40928 40929 case 'html': 40930 return tag === 'head' || tag === 'body' || tag === 'frameset'; 40931 40932 case 'frameset': 40933 return tag === 'frame'; 40934 40935 case '#document': 40936 return tag === 'html'; 40937 } // Probably in the "in body" parsing mode, so we outlaw only tag combos 40938 // where the parsing rules cause implicit opens or closes to be added. 40939 // https://html.spec.whatwg.org/multipage/syntax.html#parsing-main-inbody 40940 40941 40942 switch (tag) { 40943 case 'h1': 40944 case 'h2': 40945 case 'h3': 40946 case 'h4': 40947 case 'h5': 40948 case 'h6': 40949 return parentTag !== 'h1' && parentTag !== 'h2' && parentTag !== 'h3' && parentTag !== 'h4' && parentTag !== 'h5' && parentTag !== 'h6'; 40950 40951 case 'rp': 40952 case 'rt': 40953 return impliedEndTags.indexOf(parentTag) === -1; 40954 40955 case 'body': 40956 case 'caption': 40957 case 'col': 40958 case 'colgroup': 40959 case 'frameset': 40960 case 'frame': 40961 case 'head': 40962 case 'html': 40963 case 'tbody': 40964 case 'td': 40965 case 'tfoot': 40966 case 'th': 40967 case 'thead': 40968 case 'tr': 40969 // These tags are only valid with a few parents that have special child 40970 // parsing rules -- if we're down here, then none of those matched and 40971 // so we allow it only if we don't know what the parent is, as all other 40972 // cases are invalid. 40973 return parentTag == null; 40974 } 40975 40976 return true; 40977 }; 40978 /** 40979 * Returns whether 40980 */ 40981 40982 40983 var findInvalidAncestorForTag = function (tag, ancestorInfo) { 40984 switch (tag) { 40985 case 'address': 40986 case 'article': 40987 case 'aside': 40988 case 'blockquote': 40989 case 'center': 40990 case 'details': 40991 case 'dialog': 40992 case 'dir': 40993 case 'div': 40994 case 'dl': 40995 case 'fieldset': 40996 case 'figcaption': 40997 case 'figure': 40998 case 'footer': 40999 case 'header': 41000 case 'hgroup': 41001 case 'main': 41002 case 'menu': 41003 case 'nav': 41004 case 'ol': 41005 case 'p': 41006 case 'section': 41007 case 'summary': 41008 case 'ul': 41009 case 'pre': 41010 case 'listing': 41011 case 'table': 41012 case 'hr': 41013 case 'xmp': 41014 case 'h1': 41015 case 'h2': 41016 case 'h3': 41017 case 'h4': 41018 case 'h5': 41019 case 'h6': 41020 return ancestorInfo.pTagInButtonScope; 41021 41022 case 'form': 41023 return ancestorInfo.formTag || ancestorInfo.pTagInButtonScope; 41024 41025 case 'li': 41026 return ancestorInfo.listItemTagAutoclosing; 41027 41028 case 'dd': 41029 case 'dt': 41030 return ancestorInfo.dlItemTagAutoclosing; 41031 41032 case 'button': 41033 return ancestorInfo.buttonTagInScope; 41034 41035 case 'a': 41036 // Spec says something about storing a list of markers, but it sounds 41037 // equivalent to this check. 41038 return ancestorInfo.aTagInScope; 41039 41040 case 'nobr': 41041 return ancestorInfo.nobrTagInScope; 41042 } 41043 41044 return null; 41045 }; 41046 41047 var didWarn$1 = {}; 41048 41049 validateDOMNesting = function (childTag, childText, ancestorInfo) { 41050 ancestorInfo = ancestorInfo || emptyAncestorInfo; 41051 var parentInfo = ancestorInfo.current; 41052 var parentTag = parentInfo && parentInfo.tag; 41053 41054 if (childText != null) { 41055 if (childTag != null) { 41056 error('validateDOMNesting: when childText is passed, childTag should be null'); 41057 } 41058 41059 childTag = '#text'; 41060 } 41061 41062 var invalidParent = isTagValidWithParent(childTag, parentTag) ? null : parentInfo; 41063 var invalidAncestor = invalidParent ? null : findInvalidAncestorForTag(childTag, ancestorInfo); 41064 var invalidParentOrAncestor = invalidParent || invalidAncestor; 41065 41066 if (!invalidParentOrAncestor) { 41067 return; 41068 } 41069 41070 var ancestorTag = invalidParentOrAncestor.tag; 41071 var warnKey = !!invalidParent + '|' + childTag + '|' + ancestorTag; 41072 41073 if (didWarn$1[warnKey]) { 41074 return; 41075 } 41076 41077 didWarn$1[warnKey] = true; 41078 var tagDisplayName = childTag; 41079 var whitespaceInfo = ''; 41080 41081 if (childTag === '#text') { 41082 if (/\S/.test(childText)) { 41083 tagDisplayName = 'Text nodes'; 41084 } else { 41085 tagDisplayName = 'Whitespace text nodes'; 41086 whitespaceInfo = " Make sure you don't have any extra whitespace between tags on " + 'each line of your source code.'; 41087 } 41088 } else { 41089 tagDisplayName = '<' + childTag + '>'; 41090 } 41091 41092 if (invalidParent) { 41093 var info = ''; 41094 41095 if (ancestorTag === 'table' && childTag === 'tr') { 41096 info += ' Add a <tbody>, <thead> or <tfoot> to your code to match the DOM tree generated by ' + 'the browser.'; 41097 } 41098 41099 error('validateDOMNesting(...): %s cannot appear as a child of <%s>.%s%s', tagDisplayName, ancestorTag, whitespaceInfo, info); 41100 } else { 41101 error('validateDOMNesting(...): %s cannot appear as a descendant of ' + '<%s>.', tagDisplayName, ancestorTag); 41102 } 41103 }; 41104} 41105 41106var SUPPRESS_HYDRATION_WARNING$1; 41107 41108{ 41109 SUPPRESS_HYDRATION_WARNING$1 = 'suppressHydrationWarning'; 41110} 41111 41112var SUSPENSE_START_DATA = '$'; 41113var SUSPENSE_END_DATA = '/$'; 41114var SUSPENSE_PENDING_START_DATA = '$?'; 41115var SUSPENSE_FALLBACK_START_DATA = '$!'; 41116var STYLE$1 = 'style'; 41117var eventsEnabled = null; 41118var selectionInformation = null; 41119 41120function shouldAutoFocusHostComponent(type, props) { 41121 switch (type) { 41122 case 'button': 41123 case 'input': 41124 case 'select': 41125 case 'textarea': 41126 return !!props.autoFocus; 41127 } 41128 41129 return false; 41130} 41131function getRootHostContext(rootContainerInstance) { 41132 var type; 41133 var namespace; 41134 var nodeType = rootContainerInstance.nodeType; 41135 41136 switch (nodeType) { 41137 case DOCUMENT_NODE: 41138 case DOCUMENT_FRAGMENT_NODE: 41139 { 41140 type = nodeType === DOCUMENT_NODE ? '#document' : '#fragment'; 41141 var root = rootContainerInstance.documentElement; 41142 namespace = root ? root.namespaceURI : getChildNamespace(null, ''); 41143 break; 41144 } 41145 41146 default: 41147 { 41148 var container = nodeType === COMMENT_NODE ? rootContainerInstance.parentNode : rootContainerInstance; 41149 var ownNamespace = container.namespaceURI || null; 41150 type = container.tagName; 41151 namespace = getChildNamespace(ownNamespace, type); 41152 break; 41153 } 41154 } 41155 41156 { 41157 var validatedTag = type.toLowerCase(); 41158 var ancestorInfo = updatedAncestorInfo(null, validatedTag); 41159 return { 41160 namespace: namespace, 41161 ancestorInfo: ancestorInfo 41162 }; 41163 } 41164} 41165function getChildHostContext(parentHostContext, type, rootContainerInstance) { 41166 { 41167 var parentHostContextDev = parentHostContext; 41168 var namespace = getChildNamespace(parentHostContextDev.namespace, type); 41169 var ancestorInfo = updatedAncestorInfo(parentHostContextDev.ancestorInfo, type); 41170 return { 41171 namespace: namespace, 41172 ancestorInfo: ancestorInfo 41173 }; 41174 } 41175} 41176function getPublicInstance(instance) { 41177 return instance; 41178} 41179function prepareForCommit(containerInfo) { 41180 eventsEnabled = isEnabled(); 41181 selectionInformation = getSelectionInformation(); 41182 var activeInstance = null; 41183 41184 setEnabled(false); 41185 return activeInstance; 41186} 41187function resetAfterCommit(containerInfo) { 41188 restoreSelection(selectionInformation); 41189 setEnabled(eventsEnabled); 41190 eventsEnabled = null; 41191 selectionInformation = null; 41192} 41193function createInstance(type, props, rootContainerInstance, hostContext, internalInstanceHandle) { 41194 var parentNamespace; 41195 41196 { 41197 // TODO: take namespace into account when validating. 41198 var hostContextDev = hostContext; 41199 validateDOMNesting(type, null, hostContextDev.ancestorInfo); 41200 41201 if (typeof props.children === 'string' || typeof props.children === 'number') { 41202 var string = '' + props.children; 41203 var ownAncestorInfo = updatedAncestorInfo(hostContextDev.ancestorInfo, type); 41204 validateDOMNesting(null, string, ownAncestorInfo); 41205 } 41206 41207 parentNamespace = hostContextDev.namespace; 41208 } 41209 41210 var domElement = createElement(type, props, rootContainerInstance, parentNamespace); 41211 precacheFiberNode(internalInstanceHandle, domElement); 41212 updateFiberProps(domElement, props); 41213 return domElement; 41214} 41215function appendInitialChild(parentInstance, child) { 41216 parentInstance.appendChild(child); 41217} 41218function finalizeInitialChildren(domElement, type, props, rootContainerInstance, hostContext) { 41219 setInitialProperties(domElement, type, props, rootContainerInstance); 41220 return shouldAutoFocusHostComponent(type, props); 41221} 41222function prepareUpdate(domElement, type, oldProps, newProps, rootContainerInstance, hostContext) { 41223 { 41224 var hostContextDev = hostContext; 41225 41226 if (typeof newProps.children !== typeof oldProps.children && (typeof newProps.children === 'string' || typeof newProps.children === 'number')) { 41227 var string = '' + newProps.children; 41228 var ownAncestorInfo = updatedAncestorInfo(hostContextDev.ancestorInfo, type); 41229 validateDOMNesting(null, string, ownAncestorInfo); 41230 } 41231 } 41232 41233 return diffProperties(domElement, type, oldProps, newProps); 41234} 41235function shouldSetTextContent(type, props) { 41236 return type === 'textarea' || type === 'option' || type === 'noscript' || typeof props.children === 'string' || typeof props.children === 'number' || typeof props.dangerouslySetInnerHTML === 'object' && props.dangerouslySetInnerHTML !== null && props.dangerouslySetInnerHTML.__html != null; 41237} 41238function createTextInstance(text, rootContainerInstance, hostContext, internalInstanceHandle) { 41239 { 41240 var hostContextDev = hostContext; 41241 validateDOMNesting(null, text, hostContextDev.ancestorInfo); 41242 } 41243 41244 var textNode = createTextNode(text, rootContainerInstance); 41245 precacheFiberNode(internalInstanceHandle, textNode); 41246 return textNode; 41247} 41248// if a component just imports ReactDOM (e.g. for findDOMNode). 41249// Some environments might not have setTimeout or clearTimeout. 41250 41251var scheduleTimeout = typeof setTimeout === 'function' ? setTimeout : undefined; 41252var cancelTimeout = typeof clearTimeout === 'function' ? clearTimeout : undefined; 41253var noTimeout = -1; // ------------------- 41254function commitMount(domElement, type, newProps, internalInstanceHandle) { 41255 // Despite the naming that might imply otherwise, this method only 41256 // fires if there is an `Update` effect scheduled during mounting. 41257 // This happens if `finalizeInitialChildren` returns `true` (which it 41258 // does to implement the `autoFocus` attribute on the client). But 41259 // there are also other cases when this might happen (such as patching 41260 // up text content during hydration mismatch). So we'll check this again. 41261 if (shouldAutoFocusHostComponent(type, newProps)) { 41262 domElement.focus(); 41263 } 41264} 41265function commitUpdate(domElement, updatePayload, type, oldProps, newProps, internalInstanceHandle) { 41266 // Update the props handle so that we know which props are the ones with 41267 // with current event handlers. 41268 updateFiberProps(domElement, newProps); // Apply the diff to the DOM node. 41269 41270 updateProperties(domElement, updatePayload, type, oldProps, newProps); 41271} 41272function resetTextContent(domElement) { 41273 setTextContent(domElement, ''); 41274} 41275function commitTextUpdate(textInstance, oldText, newText) { 41276 textInstance.nodeValue = newText; 41277} 41278function appendChild(parentInstance, child) { 41279 parentInstance.appendChild(child); 41280} 41281function appendChildToContainer(container, child) { 41282 var parentNode; 41283 41284 if (container.nodeType === COMMENT_NODE) { 41285 parentNode = container.parentNode; 41286 parentNode.insertBefore(child, container); 41287 } else { 41288 parentNode = container; 41289 parentNode.appendChild(child); 41290 } // This container might be used for a portal. 41291 // If something inside a portal is clicked, that click should bubble 41292 // through the React tree. However, on Mobile Safari the click would 41293 // never bubble through the *DOM* tree unless an ancestor with onclick 41294 // event exists. So we wouldn't see it and dispatch it. 41295 // This is why we ensure that non React root containers have inline onclick 41296 // defined. 41297 // https://github.com/facebook/react/issues/11918 41298 41299 41300 var reactRootContainer = container._reactRootContainer; 41301 41302 if ((reactRootContainer === null || reactRootContainer === undefined) && parentNode.onclick === null) { 41303 // TODO: This cast may not be sound for SVG, MathML or custom elements. 41304 trapClickOnNonInteractiveElement(parentNode); 41305 } 41306} 41307function insertBefore(parentInstance, child, beforeChild) { 41308 parentInstance.insertBefore(child, beforeChild); 41309} 41310function insertInContainerBefore(container, child, beforeChild) { 41311 if (container.nodeType === COMMENT_NODE) { 41312 container.parentNode.insertBefore(child, beforeChild); 41313 } else { 41314 container.insertBefore(child, beforeChild); 41315 } 41316} 41317 41318function removeChild(parentInstance, child) { 41319 parentInstance.removeChild(child); 41320} 41321function removeChildFromContainer(container, child) { 41322 if (container.nodeType === COMMENT_NODE) { 41323 container.parentNode.removeChild(child); 41324 } else { 41325 container.removeChild(child); 41326 } 41327} 41328function hideInstance(instance) { 41329 // TODO: Does this work for all element types? What about MathML? Should we 41330 // pass host context to this method? 41331 instance = instance; 41332 var style = instance.style; 41333 41334 if (typeof style.setProperty === 'function') { 41335 style.setProperty('display', 'none', 'important'); 41336 } else { 41337 style.display = 'none'; 41338 } 41339} 41340function hideTextInstance(textInstance) { 41341 textInstance.nodeValue = ''; 41342} 41343function unhideInstance(instance, props) { 41344 instance = instance; 41345 var styleProp = props[STYLE$1]; 41346 var display = styleProp !== undefined && styleProp !== null && styleProp.hasOwnProperty('display') ? styleProp.display : null; 41347 instance.style.display = dangerousStyleValue('display', display); 41348} 41349function unhideTextInstance(textInstance, text) { 41350 textInstance.nodeValue = text; 41351} 41352function clearContainer(container) { 41353 if (container.nodeType === ELEMENT_NODE) { 41354 container.textContent = ''; 41355 } else if (container.nodeType === DOCUMENT_NODE) { 41356 var body = container.body; 41357 41358 if (body != null) { 41359 body.textContent = ''; 41360 } 41361 } 41362} // ------------------- 41363function canHydrateInstance(instance, type, props) { 41364 if (instance.nodeType !== ELEMENT_NODE || type.toLowerCase() !== instance.nodeName.toLowerCase()) { 41365 return null; 41366 } // This has now been refined to an element node. 41367 41368 41369 return instance; 41370} 41371function canHydrateTextInstance(instance, text) { 41372 if (text === '' || instance.nodeType !== TEXT_NODE) { 41373 // Empty strings are not parsed by HTML so there won't be a correct match here. 41374 return null; 41375 } // This has now been refined to a text node. 41376 41377 41378 return instance; 41379} 41380function isSuspenseInstancePending(instance) { 41381 return instance.data === SUSPENSE_PENDING_START_DATA; 41382} 41383function isSuspenseInstanceFallback(instance) { 41384 return instance.data === SUSPENSE_FALLBACK_START_DATA; 41385} 41386 41387function getNextHydratable(node) { 41388 // Skip non-hydratable nodes. 41389 for (; node != null; node = node.nextSibling) { 41390 var nodeType = node.nodeType; 41391 41392 if (nodeType === ELEMENT_NODE || nodeType === TEXT_NODE) { 41393 break; 41394 } 41395 } 41396 41397 return node; 41398} 41399 41400function getNextHydratableSibling(instance) { 41401 return getNextHydratable(instance.nextSibling); 41402} 41403function getFirstHydratableChild(parentInstance) { 41404 return getNextHydratable(parentInstance.firstChild); 41405} 41406function hydrateInstance(instance, type, props, rootContainerInstance, hostContext, internalInstanceHandle) { 41407 precacheFiberNode(internalInstanceHandle, instance); // TODO: Possibly defer this until the commit phase where all the events 41408 // get attached. 41409 41410 updateFiberProps(instance, props); 41411 var parentNamespace; 41412 41413 { 41414 var hostContextDev = hostContext; 41415 parentNamespace = hostContextDev.namespace; 41416 } 41417 41418 return diffHydratedProperties(instance, type, props, parentNamespace); 41419} 41420function hydrateTextInstance(textInstance, text, internalInstanceHandle) { 41421 precacheFiberNode(internalInstanceHandle, textInstance); 41422 return diffHydratedText(textInstance, text); 41423} 41424function getNextHydratableInstanceAfterSuspenseInstance(suspenseInstance) { 41425 var node = suspenseInstance.nextSibling; // Skip past all nodes within this suspense boundary. 41426 // There might be nested nodes so we need to keep track of how 41427 // deep we are and only break out when we're back on top. 41428 41429 var depth = 0; 41430 41431 while (node) { 41432 if (node.nodeType === COMMENT_NODE) { 41433 var data = node.data; 41434 41435 if (data === SUSPENSE_END_DATA) { 41436 if (depth === 0) { 41437 return getNextHydratableSibling(node); 41438 } else { 41439 depth--; 41440 } 41441 } else if (data === SUSPENSE_START_DATA || data === SUSPENSE_FALLBACK_START_DATA || data === SUSPENSE_PENDING_START_DATA) { 41442 depth++; 41443 } 41444 } 41445 41446 node = node.nextSibling; 41447 } // TODO: Warn, we didn't find the end comment boundary. 41448 41449 41450 return null; 41451} // Returns the SuspenseInstance if this node is a direct child of a 41452// SuspenseInstance. I.e. if its previous sibling is a Comment with 41453// SUSPENSE_x_START_DATA. Otherwise, null. 41454 41455function getParentSuspenseInstance(targetInstance) { 41456 var node = targetInstance.previousSibling; // Skip past all nodes within this suspense boundary. 41457 // There might be nested nodes so we need to keep track of how 41458 // deep we are and only break out when we're back on top. 41459 41460 var depth = 0; 41461 41462 while (node) { 41463 if (node.nodeType === COMMENT_NODE) { 41464 var data = node.data; 41465 41466 if (data === SUSPENSE_START_DATA || data === SUSPENSE_FALLBACK_START_DATA || data === SUSPENSE_PENDING_START_DATA) { 41467 if (depth === 0) { 41468 return node; 41469 } else { 41470 depth--; 41471 } 41472 } else if (data === SUSPENSE_END_DATA) { 41473 depth++; 41474 } 41475 } 41476 41477 node = node.previousSibling; 41478 } 41479 41480 return null; 41481} 41482function commitHydratedContainer(container) { 41483 // Retry if any event replaying was blocked on this. 41484 retryIfBlockedOn(container); 41485} 41486function commitHydratedSuspenseInstance(suspenseInstance) { 41487 // Retry if any event replaying was blocked on this. 41488 retryIfBlockedOn(suspenseInstance); 41489} 41490function didNotMatchHydratedContainerTextInstance(parentContainer, textInstance, text) { 41491 { 41492 warnForUnmatchedText(textInstance, text); 41493 } 41494} 41495function didNotMatchHydratedTextInstance(parentType, parentProps, parentInstance, textInstance, text) { 41496 if ( parentProps[SUPPRESS_HYDRATION_WARNING$1] !== true) { 41497 warnForUnmatchedText(textInstance, text); 41498 } 41499} 41500function didNotHydrateContainerInstance(parentContainer, instance) { 41501 { 41502 if (instance.nodeType === ELEMENT_NODE) { 41503 warnForDeletedHydratableElement(parentContainer, instance); 41504 } else if (instance.nodeType === COMMENT_NODE) ; else { 41505 warnForDeletedHydratableText(parentContainer, instance); 41506 } 41507 } 41508} 41509function didNotHydrateInstance(parentType, parentProps, parentInstance, instance) { 41510 if ( parentProps[SUPPRESS_HYDRATION_WARNING$1] !== true) { 41511 if (instance.nodeType === ELEMENT_NODE) { 41512 warnForDeletedHydratableElement(parentInstance, instance); 41513 } else if (instance.nodeType === COMMENT_NODE) ; else { 41514 warnForDeletedHydratableText(parentInstance, instance); 41515 } 41516 } 41517} 41518function didNotFindHydratableContainerInstance(parentContainer, type, props) { 41519 { 41520 warnForInsertedHydratedElement(parentContainer, type); 41521 } 41522} 41523function didNotFindHydratableContainerTextInstance(parentContainer, text) { 41524 { 41525 warnForInsertedHydratedText(parentContainer, text); 41526 } 41527} 41528function didNotFindHydratableInstance(parentType, parentProps, parentInstance, type, props) { 41529 if ( parentProps[SUPPRESS_HYDRATION_WARNING$1] !== true) { 41530 warnForInsertedHydratedElement(parentInstance, type); 41531 } 41532} 41533function didNotFindHydratableTextInstance(parentType, parentProps, parentInstance, text) { 41534 if ( parentProps[SUPPRESS_HYDRATION_WARNING$1] !== true) { 41535 warnForInsertedHydratedText(parentInstance, text); 41536 } 41537} 41538function didNotFindHydratableSuspenseInstance(parentType, parentProps, parentInstance) { 41539 if ( parentProps[SUPPRESS_HYDRATION_WARNING$1] !== true) ; 41540} 41541var clientId = 0; 41542function makeClientIdInDEV(warnOnAccessInDEV) { 41543 var id = 'r:' + (clientId++).toString(36); 41544 return { 41545 toString: function () { 41546 warnOnAccessInDEV(); 41547 return id; 41548 }, 41549 valueOf: function () { 41550 warnOnAccessInDEV(); 41551 return id; 41552 } 41553 }; 41554} 41555function isOpaqueHydratingObject(value) { 41556 return value !== null && typeof value === 'object' && value.$$typeof === REACT_OPAQUE_ID_TYPE; 41557} 41558function makeOpaqueHydratingObject(attemptToReadValue) { 41559 return { 41560 $$typeof: REACT_OPAQUE_ID_TYPE, 41561 toString: attemptToReadValue, 41562 valueOf: attemptToReadValue 41563 }; 41564} 41565function preparePortalMount(portalInstance) { 41566 { 41567 listenToAllSupportedEvents(portalInstance); 41568 } 41569} 41570 41571var randomKey = Math.random().toString(36).slice(2); 41572var internalInstanceKey = '__reactFiber$' + randomKey; 41573var internalPropsKey = '__reactProps$' + randomKey; 41574var internalContainerInstanceKey = '__reactContainer$' + randomKey; 41575var internalEventHandlersKey = '__reactEvents$' + randomKey; 41576function precacheFiberNode(hostInst, node) { 41577 node[internalInstanceKey] = hostInst; 41578} 41579function markContainerAsRoot(hostRoot, node) { 41580 node[internalContainerInstanceKey] = hostRoot; 41581} 41582function unmarkContainerAsRoot(node) { 41583 node[internalContainerInstanceKey] = null; 41584} 41585function isContainerMarkedAsRoot(node) { 41586 return !!node[internalContainerInstanceKey]; 41587} // Given a DOM node, return the closest HostComponent or HostText fiber ancestor. 41588// If the target node is part of a hydrated or not yet rendered subtree, then 41589// this may also return a SuspenseComponent or HostRoot to indicate that. 41590// Conceptually the HostRoot fiber is a child of the Container node. So if you 41591// pass the Container node as the targetNode, you will not actually get the 41592// HostRoot back. To get to the HostRoot, you need to pass a child of it. 41593// The same thing applies to Suspense boundaries. 41594 41595function getClosestInstanceFromNode(targetNode) { 41596 var targetInst = targetNode[internalInstanceKey]; 41597 41598 if (targetInst) { 41599 // Don't return HostRoot or SuspenseComponent here. 41600 return targetInst; 41601 } // If the direct event target isn't a React owned DOM node, we need to look 41602 // to see if one of its parents is a React owned DOM node. 41603 41604 41605 var parentNode = targetNode.parentNode; 41606 41607 while (parentNode) { 41608 // We'll check if this is a container root that could include 41609 // React nodes in the future. We need to check this first because 41610 // if we're a child of a dehydrated container, we need to first 41611 // find that inner container before moving on to finding the parent 41612 // instance. Note that we don't check this field on the targetNode 41613 // itself because the fibers are conceptually between the container 41614 // node and the first child. It isn't surrounding the container node. 41615 // If it's not a container, we check if it's an instance. 41616 targetInst = parentNode[internalContainerInstanceKey] || parentNode[internalInstanceKey]; 41617 41618 if (targetInst) { 41619 // Since this wasn't the direct target of the event, we might have 41620 // stepped past dehydrated DOM nodes to get here. However they could 41621 // also have been non-React nodes. We need to answer which one. 41622 // If we the instance doesn't have any children, then there can't be 41623 // a nested suspense boundary within it. So we can use this as a fast 41624 // bailout. Most of the time, when people add non-React children to 41625 // the tree, it is using a ref to a child-less DOM node. 41626 // Normally we'd only need to check one of the fibers because if it 41627 // has ever gone from having children to deleting them or vice versa 41628 // it would have deleted the dehydrated boundary nested inside already. 41629 // However, since the HostRoot starts out with an alternate it might 41630 // have one on the alternate so we need to check in case this was a 41631 // root. 41632 var alternate = targetInst.alternate; 41633 41634 if (targetInst.child !== null || alternate !== null && alternate.child !== null) { 41635 // Next we need to figure out if the node that skipped past is 41636 // nested within a dehydrated boundary and if so, which one. 41637 var suspenseInstance = getParentSuspenseInstance(targetNode); 41638 41639 while (suspenseInstance !== null) { 41640 // We found a suspense instance. That means that we haven't 41641 // hydrated it yet. Even though we leave the comments in the 41642 // DOM after hydrating, and there are boundaries in the DOM 41643 // that could already be hydrated, we wouldn't have found them 41644 // through this pass since if the target is hydrated it would 41645 // have had an internalInstanceKey on it. 41646 // Let's get the fiber associated with the SuspenseComponent 41647 // as the deepest instance. 41648 var targetSuspenseInst = suspenseInstance[internalInstanceKey]; 41649 41650 if (targetSuspenseInst) { 41651 return targetSuspenseInst; 41652 } // If we don't find a Fiber on the comment, it might be because 41653 // we haven't gotten to hydrate it yet. There might still be a 41654 // parent boundary that hasn't above this one so we need to find 41655 // the outer most that is known. 41656 41657 41658 suspenseInstance = getParentSuspenseInstance(suspenseInstance); // If we don't find one, then that should mean that the parent 41659 // host component also hasn't hydrated yet. We can return it 41660 // below since it will bail out on the isMounted check later. 41661 } 41662 } 41663 41664 return targetInst; 41665 } 41666 41667 targetNode = parentNode; 41668 parentNode = targetNode.parentNode; 41669 } 41670 41671 return null; 41672} 41673/** 41674 * Given a DOM node, return the ReactDOMComponent or ReactDOMTextComponent 41675 * instance, or null if the node was not rendered by this React. 41676 */ 41677 41678function getInstanceFromNode(node) { 41679 var inst = node[internalInstanceKey] || node[internalContainerInstanceKey]; 41680 41681 if (inst) { 41682 if (inst.tag === HostComponent || inst.tag === HostText || inst.tag === SuspenseComponent || inst.tag === HostRoot) { 41683 return inst; 41684 } else { 41685 return null; 41686 } 41687 } 41688 41689 return null; 41690} 41691/** 41692 * Given a ReactDOMComponent or ReactDOMTextComponent, return the corresponding 41693 * DOM node. 41694 */ 41695 41696function getNodeFromInstance(inst) { 41697 if (inst.tag === HostComponent || inst.tag === HostText) { 41698 // In Fiber this, is just the state node right now. We assume it will be 41699 // a host component or host text. 41700 return inst.stateNode; 41701 } // Without this first invariant, passing a non-DOM-component triggers the next 41702 // invariant for a missing parent, which is super confusing. 41703 41704 41705 { 41706 { 41707 throw Error( "getNodeFromInstance: Invalid argument." ); 41708 } 41709 } 41710} 41711function getFiberCurrentPropsFromNode(node) { 41712 return node[internalPropsKey] || null; 41713} 41714function updateFiberProps(node, props) { 41715 node[internalPropsKey] = props; 41716} 41717function getEventListenerSet(node) { 41718 var elementListenerSet = node[internalEventHandlersKey]; 41719 41720 if (elementListenerSet === undefined) { 41721 elementListenerSet = node[internalEventHandlersKey] = new Set(); 41722 } 41723 41724 return elementListenerSet; 41725} 41726 41727var loggedTypeFailures = {}; 41728var ReactDebugCurrentFrame$1 = ReactSharedInternals.ReactDebugCurrentFrame; 41729 41730function setCurrentlyValidatingElement(element) { 41731 { 41732 if (element) { 41733 var owner = element._owner; 41734 var stack = describeUnknownElementTypeFrameInDEV(element.type, element._source, owner ? owner.type : null); 41735 ReactDebugCurrentFrame$1.setExtraStackFrame(stack); 41736 } else { 41737 ReactDebugCurrentFrame$1.setExtraStackFrame(null); 41738 } 41739 } 41740} 41741 41742function checkPropTypes(typeSpecs, values, location, componentName, element) { 41743 { 41744 // $FlowFixMe This is okay but Flow doesn't know it. 41745 var has = Function.call.bind(Object.prototype.hasOwnProperty); 41746 41747 for (var typeSpecName in typeSpecs) { 41748 if (has(typeSpecs, typeSpecName)) { 41749 var error$1 = void 0; // Prop type validation may throw. In case they do, we don't want to 41750 // fail the render phase where it didn't fail before. So we log it. 41751 // After these have been cleaned up, we'll let them throw. 41752 41753 try { 41754 // This is intentionally an invariant that gets caught. It's the same 41755 // behavior as without this statement except with a better message. 41756 if (typeof typeSpecs[typeSpecName] !== 'function') { 41757 var err = Error((componentName || 'React class') + ': ' + location + ' type `' + typeSpecName + '` is invalid; ' + 'it must be a function, usually from the `prop-types` package, but received `' + typeof typeSpecs[typeSpecName] + '`.' + 'This often happens because of typos such as `PropTypes.function` instead of `PropTypes.func`.'); 41758 err.name = 'Invariant Violation'; 41759 throw err; 41760 } 41761 41762 error$1 = typeSpecs[typeSpecName](values, typeSpecName, componentName, location, null, 'SECRET_DO_NOT_PASS_THIS_OR_YOU_WILL_BE_FIRED'); 41763 } catch (ex) { 41764 error$1 = ex; 41765 } 41766 41767 if (error$1 && !(error$1 instanceof Error)) { 41768 setCurrentlyValidatingElement(element); 41769 41770 error('%s: type specification of %s' + ' `%s` is invalid; the type checker ' + 'function must return `null` or an `Error` but returned a %s. ' + 'You may have forgotten to pass an argument to the type checker ' + 'creator (arrayOf, instanceOf, objectOf, oneOf, oneOfType, and ' + 'shape all require an argument).', componentName || 'React class', location, typeSpecName, typeof error$1); 41771 41772 setCurrentlyValidatingElement(null); 41773 } 41774 41775 if (error$1 instanceof Error && !(error$1.message in loggedTypeFailures)) { 41776 // Only monitor this failure once because there tends to be a lot of the 41777 // same error. 41778 loggedTypeFailures[error$1.message] = true; 41779 setCurrentlyValidatingElement(element); 41780 41781 error('Failed %s type: %s', location, error$1.message); 41782 41783 setCurrentlyValidatingElement(null); 41784 } 41785 } 41786 } 41787 } 41788} 41789 41790var valueStack = []; 41791var fiberStack; 41792 41793{ 41794 fiberStack = []; 41795} 41796 41797var index = -1; 41798 41799function createCursor(defaultValue) { 41800 return { 41801 current: defaultValue 41802 }; 41803} 41804 41805function pop(cursor, fiber) { 41806 if (index < 0) { 41807 { 41808 error('Unexpected pop.'); 41809 } 41810 41811 return; 41812 } 41813 41814 { 41815 if (fiber !== fiberStack[index]) { 41816 error('Unexpected Fiber popped.'); 41817 } 41818 } 41819 41820 cursor.current = valueStack[index]; 41821 valueStack[index] = null; 41822 41823 { 41824 fiberStack[index] = null; 41825 } 41826 41827 index--; 41828} 41829 41830function push(cursor, value, fiber) { 41831 index++; 41832 valueStack[index] = cursor.current; 41833 41834 { 41835 fiberStack[index] = fiber; 41836 } 41837 41838 cursor.current = value; 41839} 41840 41841var warnedAboutMissingGetChildContext; 41842 41843{ 41844 warnedAboutMissingGetChildContext = {}; 41845} 41846 41847var emptyContextObject = {}; 41848 41849{ 41850 Object.freeze(emptyContextObject); 41851} // A cursor to the current merged context object on the stack. 41852 41853 41854var contextStackCursor = createCursor(emptyContextObject); // A cursor to a boolean indicating whether the context has changed. 41855 41856var didPerformWorkStackCursor = createCursor(false); // Keep track of the previous context object that was on the stack. 41857// We use this to get access to the parent context after we have already 41858// pushed the next context provider, and now need to merge their contexts. 41859 41860var previousContext = emptyContextObject; 41861 41862function getUnmaskedContext(workInProgress, Component, didPushOwnContextIfProvider) { 41863 { 41864 if (didPushOwnContextIfProvider && isContextProvider(Component)) { 41865 // If the fiber is a context provider itself, when we read its context 41866 // we may have already pushed its own child context on the stack. A context 41867 // provider should not "see" its own child context. Therefore we read the 41868 // previous (parent) context instead for a context provider. 41869 return previousContext; 41870 } 41871 41872 return contextStackCursor.current; 41873 } 41874} 41875 41876function cacheContext(workInProgress, unmaskedContext, maskedContext) { 41877 { 41878 var instance = workInProgress.stateNode; 41879 instance.__reactInternalMemoizedUnmaskedChildContext = unmaskedContext; 41880 instance.__reactInternalMemoizedMaskedChildContext = maskedContext; 41881 } 41882} 41883 41884function getMaskedContext(workInProgress, unmaskedContext) { 41885 { 41886 var type = workInProgress.type; 41887 var contextTypes = type.contextTypes; 41888 41889 if (!contextTypes) { 41890 return emptyContextObject; 41891 } // Avoid recreating masked context unless unmasked context has changed. 41892 // Failing to do this will result in unnecessary calls to componentWillReceiveProps. 41893 // This may trigger infinite loops if componentWillReceiveProps calls setState. 41894 41895 41896 var instance = workInProgress.stateNode; 41897 41898 if (instance && instance.__reactInternalMemoizedUnmaskedChildContext === unmaskedContext) { 41899 return instance.__reactInternalMemoizedMaskedChildContext; 41900 } 41901 41902 var context = {}; 41903 41904 for (var key in contextTypes) { 41905 context[key] = unmaskedContext[key]; 41906 } 41907 41908 { 41909 var name = getComponentName(type) || 'Unknown'; 41910 checkPropTypes(contextTypes, context, 'context', name); 41911 } // Cache unmasked context so we can avoid recreating masked context unless necessary. 41912 // Context is created before the class component is instantiated so check for instance. 41913 41914 41915 if (instance) { 41916 cacheContext(workInProgress, unmaskedContext, context); 41917 } 41918 41919 return context; 41920 } 41921} 41922 41923function hasContextChanged() { 41924 { 41925 return didPerformWorkStackCursor.current; 41926 } 41927} 41928 41929function isContextProvider(type) { 41930 { 41931 var childContextTypes = type.childContextTypes; 41932 return childContextTypes !== null && childContextTypes !== undefined; 41933 } 41934} 41935 41936function popContext(fiber) { 41937 { 41938 pop(didPerformWorkStackCursor, fiber); 41939 pop(contextStackCursor, fiber); 41940 } 41941} 41942 41943function popTopLevelContextObject(fiber) { 41944 { 41945 pop(didPerformWorkStackCursor, fiber); 41946 pop(contextStackCursor, fiber); 41947 } 41948} 41949 41950function pushTopLevelContextObject(fiber, context, didChange) { 41951 { 41952 if (!(contextStackCursor.current === emptyContextObject)) { 41953 { 41954 throw Error( "Unexpected context found on stack. This error is likely caused by a bug in React. Please file an issue." ); 41955 } 41956 } 41957 41958 push(contextStackCursor, context, fiber); 41959 push(didPerformWorkStackCursor, didChange, fiber); 41960 } 41961} 41962 41963function processChildContext(fiber, type, parentContext) { 41964 { 41965 var instance = fiber.stateNode; 41966 var childContextTypes = type.childContextTypes; // TODO (bvaughn) Replace this behavior with an invariant() in the future. 41967 // It has only been added in Fiber to match the (unintentional) behavior in Stack. 41968 41969 if (typeof instance.getChildContext !== 'function') { 41970 { 41971 var componentName = getComponentName(type) || 'Unknown'; 41972 41973 if (!warnedAboutMissingGetChildContext[componentName]) { 41974 warnedAboutMissingGetChildContext[componentName] = true; 41975 41976 error('%s.childContextTypes is specified but there is no getChildContext() method ' + 'on the instance. You can either define getChildContext() on %s or remove ' + 'childContextTypes from it.', componentName, componentName); 41977 } 41978 } 41979 41980 return parentContext; 41981 } 41982 41983 var childContext = instance.getChildContext(); 41984 41985 for (var contextKey in childContext) { 41986 if (!(contextKey in childContextTypes)) { 41987 { 41988 throw Error( (getComponentName(type) || 'Unknown') + ".getChildContext(): key \"" + contextKey + "\" is not defined in childContextTypes." ); 41989 } 41990 } 41991 } 41992 41993 { 41994 var name = getComponentName(type) || 'Unknown'; 41995 checkPropTypes(childContextTypes, childContext, 'child context', name); 41996 } 41997 41998 return _assign({}, parentContext, childContext); 41999 } 42000} 42001 42002function pushContextProvider(workInProgress) { 42003 { 42004 var instance = workInProgress.stateNode; // We push the context as early as possible to ensure stack integrity. 42005 // If the instance does not exist yet, we will push null at first, 42006 // and replace it on the stack later when invalidating the context. 42007 42008 var memoizedMergedChildContext = instance && instance.__reactInternalMemoizedMergedChildContext || emptyContextObject; // Remember the parent context so we can merge with it later. 42009 // Inherit the parent's did-perform-work value to avoid inadvertently blocking updates. 42010 42011 previousContext = contextStackCursor.current; 42012 push(contextStackCursor, memoizedMergedChildContext, workInProgress); 42013 push(didPerformWorkStackCursor, didPerformWorkStackCursor.current, workInProgress); 42014 return true; 42015 } 42016} 42017 42018function invalidateContextProvider(workInProgress, type, didChange) { 42019 { 42020 var instance = workInProgress.stateNode; 42021 42022 if (!instance) { 42023 { 42024 throw Error( "Expected to have an instance by this point. This error is likely caused by a bug in React. Please file an issue." ); 42025 } 42026 } 42027 42028 if (didChange) { 42029 // Merge parent and own context. 42030 // Skip this if we're not updating due to sCU. 42031 // This avoids unnecessarily recomputing memoized values. 42032 var mergedContext = processChildContext(workInProgress, type, previousContext); 42033 instance.__reactInternalMemoizedMergedChildContext = mergedContext; // Replace the old (or empty) context with the new one. 42034 // It is important to unwind the context in the reverse order. 42035 42036 pop(didPerformWorkStackCursor, workInProgress); 42037 pop(contextStackCursor, workInProgress); // Now push the new context and mark that it has changed. 42038 42039 push(contextStackCursor, mergedContext, workInProgress); 42040 push(didPerformWorkStackCursor, didChange, workInProgress); 42041 } else { 42042 pop(didPerformWorkStackCursor, workInProgress); 42043 push(didPerformWorkStackCursor, didChange, workInProgress); 42044 } 42045 } 42046} 42047 42048function findCurrentUnmaskedContext(fiber) { 42049 { 42050 // Currently this is only used with renderSubtreeIntoContainer; not sure if it 42051 // makes sense elsewhere 42052 if (!(isFiberMounted(fiber) && fiber.tag === ClassComponent)) { 42053 { 42054 throw Error( "Expected subtree parent to be a mounted class component. This error is likely caused by a bug in React. Please file an issue." ); 42055 } 42056 } 42057 42058 var node = fiber; 42059 42060 do { 42061 switch (node.tag) { 42062 case HostRoot: 42063 return node.stateNode.context; 42064 42065 case ClassComponent: 42066 { 42067 var Component = node.type; 42068 42069 if (isContextProvider(Component)) { 42070 return node.stateNode.__reactInternalMemoizedMergedChildContext; 42071 } 42072 42073 break; 42074 } 42075 } 42076 42077 node = node.return; 42078 } while (node !== null); 42079 42080 { 42081 { 42082 throw Error( "Found unexpected detached subtree parent. This error is likely caused by a bug in React. Please file an issue." ); 42083 } 42084 } 42085 } 42086} 42087 42088var LegacyRoot = 0; 42089var BlockingRoot = 1; 42090var ConcurrentRoot = 2; 42091 42092var rendererID = null; 42093var injectedHook = null; 42094var hasLoggedError = false; 42095var isDevToolsPresent = typeof __REACT_DEVTOOLS_GLOBAL_HOOK__ !== 'undefined'; 42096function injectInternals(internals) { 42097 if (typeof __REACT_DEVTOOLS_GLOBAL_HOOK__ === 'undefined') { 42098 // No DevTools 42099 return false; 42100 } 42101 42102 var hook = __REACT_DEVTOOLS_GLOBAL_HOOK__; 42103 42104 if (hook.isDisabled) { 42105 // This isn't a real property on the hook, but it can be set to opt out 42106 // of DevTools integration and associated warnings and logs. 42107 // https://github.com/facebook/react/issues/3877 42108 return true; 42109 } 42110 42111 if (!hook.supportsFiber) { 42112 { 42113 error('The installed version of React DevTools is too old and will not work ' + 'with the current version of React. Please update React DevTools. ' + 'https://reactjs.org/link/react-devtools'); 42114 } // DevTools exists, even though it doesn't support Fiber. 42115 42116 42117 return true; 42118 } 42119 42120 try { 42121 rendererID = hook.inject(internals); // We have successfully injected, so now it is safe to set up hooks. 42122 42123 injectedHook = hook; 42124 } catch (err) { 42125 // Catch all errors because it is unsafe to throw during initialization. 42126 { 42127 error('React instrumentation encountered an error: %s.', err); 42128 } 42129 } // DevTools exists 42130 42131 42132 return true; 42133} 42134function onScheduleRoot(root, children) { 42135 { 42136 if (injectedHook && typeof injectedHook.onScheduleFiberRoot === 'function') { 42137 try { 42138 injectedHook.onScheduleFiberRoot(rendererID, root, children); 42139 } catch (err) { 42140 if ( !hasLoggedError) { 42141 hasLoggedError = true; 42142 42143 error('React instrumentation encountered an error: %s', err); 42144 } 42145 } 42146 } 42147 } 42148} 42149function onCommitRoot(root, priorityLevel) { 42150 if (injectedHook && typeof injectedHook.onCommitFiberRoot === 'function') { 42151 try { 42152 var didError = (root.current.flags & DidCapture) === DidCapture; 42153 42154 if (enableProfilerTimer) { 42155 injectedHook.onCommitFiberRoot(rendererID, root, priorityLevel, didError); 42156 } else { 42157 injectedHook.onCommitFiberRoot(rendererID, root, undefined, didError); 42158 } 42159 } catch (err) { 42160 { 42161 if (!hasLoggedError) { 42162 hasLoggedError = true; 42163 42164 error('React instrumentation encountered an error: %s', err); 42165 } 42166 } 42167 } 42168 } 42169} 42170function onCommitUnmount(fiber) { 42171 if (injectedHook && typeof injectedHook.onCommitFiberUnmount === 'function') { 42172 try { 42173 injectedHook.onCommitFiberUnmount(rendererID, fiber); 42174 } catch (err) { 42175 { 42176 if (!hasLoggedError) { 42177 hasLoggedError = true; 42178 42179 error('React instrumentation encountered an error: %s', err); 42180 } 42181 } 42182 } 42183 } 42184} 42185 42186var Scheduler_runWithPriority = Scheduler.unstable_runWithPriority, 42187 Scheduler_scheduleCallback = Scheduler.unstable_scheduleCallback, 42188 Scheduler_cancelCallback = Scheduler.unstable_cancelCallback, 42189 Scheduler_shouldYield = Scheduler.unstable_shouldYield, 42190 Scheduler_requestPaint = Scheduler.unstable_requestPaint, 42191 Scheduler_now$1 = Scheduler.unstable_now, 42192 Scheduler_getCurrentPriorityLevel = Scheduler.unstable_getCurrentPriorityLevel, 42193 Scheduler_ImmediatePriority = Scheduler.unstable_ImmediatePriority, 42194 Scheduler_UserBlockingPriority = Scheduler.unstable_UserBlockingPriority, 42195 Scheduler_NormalPriority = Scheduler.unstable_NormalPriority, 42196 Scheduler_LowPriority = Scheduler.unstable_LowPriority, 42197 Scheduler_IdlePriority = Scheduler.unstable_IdlePriority; 42198 42199{ 42200 // Provide explicit error message when production+profiling bundle of e.g. 42201 // react-dom is used with production (non-profiling) bundle of 42202 // scheduler/tracing 42203 if (!(tracing.__interactionsRef != null && tracing.__interactionsRef.current != null)) { 42204 { 42205 throw Error( "It is not supported to run the profiling version of a renderer (for example, `react-dom/profiling`) without also replacing the `scheduler/tracing` module with `scheduler/tracing-profiling`. Your bundler might have a setting for aliasing both modules. Learn more at https://reactjs.org/link/profiling" ); 42206 } 42207 } 42208} 42209 42210var fakeCallbackNode = {}; // Except for NoPriority, these correspond to Scheduler priorities. We use 42211// ascending numbers so we can compare them like numbers. They start at 90 to 42212// avoid clashing with Scheduler's priorities. 42213 42214var ImmediatePriority$1 = 99; 42215var UserBlockingPriority$2 = 98; 42216var NormalPriority$1 = 97; 42217var LowPriority$1 = 96; 42218var IdlePriority$1 = 95; // NoPriority is the absence of priority. Also React-only. 42219 42220var NoPriority$1 = 90; 42221var shouldYield = Scheduler_shouldYield; 42222var requestPaint = // Fall back gracefully if we're running an older version of Scheduler. 42223Scheduler_requestPaint !== undefined ? Scheduler_requestPaint : function () {}; 42224var syncQueue = null; 42225var immediateQueueCallbackNode = null; 42226var isFlushingSyncQueue = false; 42227var initialTimeMs$1 = Scheduler_now$1(); // If the initial timestamp is reasonably small, use Scheduler's `now` directly. 42228// This will be the case for modern browsers that support `performance.now`. In 42229// older browsers, Scheduler falls back to `Date.now`, which returns a Unix 42230// timestamp. In that case, subtract the module initialization time to simulate 42231// the behavior of performance.now and keep our times small enough to fit 42232// within 32 bits. 42233// TODO: Consider lifting this into Scheduler. 42234 42235var now = initialTimeMs$1 < 10000 ? Scheduler_now$1 : function () { 42236 return Scheduler_now$1() - initialTimeMs$1; 42237}; 42238function getCurrentPriorityLevel() { 42239 switch (Scheduler_getCurrentPriorityLevel()) { 42240 case Scheduler_ImmediatePriority: 42241 return ImmediatePriority$1; 42242 42243 case Scheduler_UserBlockingPriority: 42244 return UserBlockingPriority$2; 42245 42246 case Scheduler_NormalPriority: 42247 return NormalPriority$1; 42248 42249 case Scheduler_LowPriority: 42250 return LowPriority$1; 42251 42252 case Scheduler_IdlePriority: 42253 return IdlePriority$1; 42254 42255 default: 42256 { 42257 { 42258 throw Error( "Unknown priority level." ); 42259 } 42260 } 42261 42262 } 42263} 42264 42265function reactPriorityToSchedulerPriority(reactPriorityLevel) { 42266 switch (reactPriorityLevel) { 42267 case ImmediatePriority$1: 42268 return Scheduler_ImmediatePriority; 42269 42270 case UserBlockingPriority$2: 42271 return Scheduler_UserBlockingPriority; 42272 42273 case NormalPriority$1: 42274 return Scheduler_NormalPriority; 42275 42276 case LowPriority$1: 42277 return Scheduler_LowPriority; 42278 42279 case IdlePriority$1: 42280 return Scheduler_IdlePriority; 42281 42282 default: 42283 { 42284 { 42285 throw Error( "Unknown priority level." ); 42286 } 42287 } 42288 42289 } 42290} 42291 42292function runWithPriority$1(reactPriorityLevel, fn) { 42293 var priorityLevel = reactPriorityToSchedulerPriority(reactPriorityLevel); 42294 return Scheduler_runWithPriority(priorityLevel, fn); 42295} 42296function scheduleCallback(reactPriorityLevel, callback, options) { 42297 var priorityLevel = reactPriorityToSchedulerPriority(reactPriorityLevel); 42298 return Scheduler_scheduleCallback(priorityLevel, callback, options); 42299} 42300function scheduleSyncCallback(callback) { 42301 // Push this callback into an internal queue. We'll flush these either in 42302 // the next tick, or earlier if something calls `flushSyncCallbackQueue`. 42303 if (syncQueue === null) { 42304 syncQueue = [callback]; // Flush the queue in the next tick, at the earliest. 42305 42306 immediateQueueCallbackNode = Scheduler_scheduleCallback(Scheduler_ImmediatePriority, flushSyncCallbackQueueImpl); 42307 } else { 42308 // Push onto existing queue. Don't need to schedule a callback because 42309 // we already scheduled one when we created the queue. 42310 syncQueue.push(callback); 42311 } 42312 42313 return fakeCallbackNode; 42314} 42315function cancelCallback(callbackNode) { 42316 if (callbackNode !== fakeCallbackNode) { 42317 Scheduler_cancelCallback(callbackNode); 42318 } 42319} 42320function flushSyncCallbackQueue() { 42321 if (immediateQueueCallbackNode !== null) { 42322 var node = immediateQueueCallbackNode; 42323 immediateQueueCallbackNode = null; 42324 Scheduler_cancelCallback(node); 42325 } 42326 42327 flushSyncCallbackQueueImpl(); 42328} 42329 42330function flushSyncCallbackQueueImpl() { 42331 if (!isFlushingSyncQueue && syncQueue !== null) { 42332 // Prevent re-entrancy. 42333 isFlushingSyncQueue = true; 42334 var i = 0; 42335 42336 { 42337 try { 42338 var _isSync2 = true; 42339 var _queue = syncQueue; 42340 runWithPriority$1(ImmediatePriority$1, function () { 42341 for (; i < _queue.length; i++) { 42342 var callback = _queue[i]; 42343 42344 do { 42345 callback = callback(_isSync2); 42346 } while (callback !== null); 42347 } 42348 }); 42349 syncQueue = null; 42350 } catch (error) { 42351 // If something throws, leave the remaining callbacks on the queue. 42352 if (syncQueue !== null) { 42353 syncQueue = syncQueue.slice(i + 1); 42354 } // Resume flushing in the next tick 42355 42356 42357 Scheduler_scheduleCallback(Scheduler_ImmediatePriority, flushSyncCallbackQueue); 42358 throw error; 42359 } finally { 42360 isFlushingSyncQueue = false; 42361 } 42362 } 42363 } 42364} 42365 42366// TODO: this is special because it gets imported during build. 42367var ReactVersion = '17.0.2'; 42368 42369var NoMode = 0; 42370var StrictMode = 1; // TODO: Remove BlockingMode and ConcurrentMode by reading from the root 42371// tag instead 42372 42373var BlockingMode = 2; 42374var ConcurrentMode = 4; 42375var ProfileMode = 8; 42376var DebugTracingMode = 16; 42377 42378var ReactCurrentBatchConfig = ReactSharedInternals.ReactCurrentBatchConfig; 42379var NoTransition = 0; 42380function requestCurrentTransition() { 42381 return ReactCurrentBatchConfig.transition; 42382} 42383 42384var ReactStrictModeWarnings = { 42385 recordUnsafeLifecycleWarnings: function (fiber, instance) {}, 42386 flushPendingUnsafeLifecycleWarnings: function () {}, 42387 recordLegacyContextWarning: function (fiber, instance) {}, 42388 flushLegacyContextWarning: function () {}, 42389 discardPendingWarnings: function () {} 42390}; 42391 42392{ 42393 var findStrictRoot = function (fiber) { 42394 var maybeStrictRoot = null; 42395 var node = fiber; 42396 42397 while (node !== null) { 42398 if (node.mode & StrictMode) { 42399 maybeStrictRoot = node; 42400 } 42401 42402 node = node.return; 42403 } 42404 42405 return maybeStrictRoot; 42406 }; 42407 42408 var setToSortedString = function (set) { 42409 var array = []; 42410 set.forEach(function (value) { 42411 array.push(value); 42412 }); 42413 return array.sort().join(', '); 42414 }; 42415 42416 var pendingComponentWillMountWarnings = []; 42417 var pendingUNSAFE_ComponentWillMountWarnings = []; 42418 var pendingComponentWillReceivePropsWarnings = []; 42419 var pendingUNSAFE_ComponentWillReceivePropsWarnings = []; 42420 var pendingComponentWillUpdateWarnings = []; 42421 var pendingUNSAFE_ComponentWillUpdateWarnings = []; // Tracks components we have already warned about. 42422 42423 var didWarnAboutUnsafeLifecycles = new Set(); 42424 42425 ReactStrictModeWarnings.recordUnsafeLifecycleWarnings = function (fiber, instance) { 42426 // Dedup strategy: Warn once per component. 42427 if (didWarnAboutUnsafeLifecycles.has(fiber.type)) { 42428 return; 42429 } 42430 42431 if (typeof instance.componentWillMount === 'function' && // Don't warn about react-lifecycles-compat polyfilled components. 42432 instance.componentWillMount.__suppressDeprecationWarning !== true) { 42433 pendingComponentWillMountWarnings.push(fiber); 42434 } 42435 42436 if (fiber.mode & StrictMode && typeof instance.UNSAFE_componentWillMount === 'function') { 42437 pendingUNSAFE_ComponentWillMountWarnings.push(fiber); 42438 } 42439 42440 if (typeof instance.componentWillReceiveProps === 'function' && instance.componentWillReceiveProps.__suppressDeprecationWarning !== true) { 42441 pendingComponentWillReceivePropsWarnings.push(fiber); 42442 } 42443 42444 if (fiber.mode & StrictMode && typeof instance.UNSAFE_componentWillReceiveProps === 'function') { 42445 pendingUNSAFE_ComponentWillReceivePropsWarnings.push(fiber); 42446 } 42447 42448 if (typeof instance.componentWillUpdate === 'function' && instance.componentWillUpdate.__suppressDeprecationWarning !== true) { 42449 pendingComponentWillUpdateWarnings.push(fiber); 42450 } 42451 42452 if (fiber.mode & StrictMode && typeof instance.UNSAFE_componentWillUpdate === 'function') { 42453 pendingUNSAFE_ComponentWillUpdateWarnings.push(fiber); 42454 } 42455 }; 42456 42457 ReactStrictModeWarnings.flushPendingUnsafeLifecycleWarnings = function () { 42458 // We do an initial pass to gather component names 42459 var componentWillMountUniqueNames = new Set(); 42460 42461 if (pendingComponentWillMountWarnings.length > 0) { 42462 pendingComponentWillMountWarnings.forEach(function (fiber) { 42463 componentWillMountUniqueNames.add(getComponentName(fiber.type) || 'Component'); 42464 didWarnAboutUnsafeLifecycles.add(fiber.type); 42465 }); 42466 pendingComponentWillMountWarnings = []; 42467 } 42468 42469 var UNSAFE_componentWillMountUniqueNames = new Set(); 42470 42471 if (pendingUNSAFE_ComponentWillMountWarnings.length > 0) { 42472 pendingUNSAFE_ComponentWillMountWarnings.forEach(function (fiber) { 42473 UNSAFE_componentWillMountUniqueNames.add(getComponentName(fiber.type) || 'Component'); 42474 didWarnAboutUnsafeLifecycles.add(fiber.type); 42475 }); 42476 pendingUNSAFE_ComponentWillMountWarnings = []; 42477 } 42478 42479 var componentWillReceivePropsUniqueNames = new Set(); 42480 42481 if (pendingComponentWillReceivePropsWarnings.length > 0) { 42482 pendingComponentWillReceivePropsWarnings.forEach(function (fiber) { 42483 componentWillReceivePropsUniqueNames.add(getComponentName(fiber.type) || 'Component'); 42484 didWarnAboutUnsafeLifecycles.add(fiber.type); 42485 }); 42486 pendingComponentWillReceivePropsWarnings = []; 42487 } 42488 42489 var UNSAFE_componentWillReceivePropsUniqueNames = new Set(); 42490 42491 if (pendingUNSAFE_ComponentWillReceivePropsWarnings.length > 0) { 42492 pendingUNSAFE_ComponentWillReceivePropsWarnings.forEach(function (fiber) { 42493 UNSAFE_componentWillReceivePropsUniqueNames.add(getComponentName(fiber.type) || 'Component'); 42494 didWarnAboutUnsafeLifecycles.add(fiber.type); 42495 }); 42496 pendingUNSAFE_ComponentWillReceivePropsWarnings = []; 42497 } 42498 42499 var componentWillUpdateUniqueNames = new Set(); 42500 42501 if (pendingComponentWillUpdateWarnings.length > 0) { 42502 pendingComponentWillUpdateWarnings.forEach(function (fiber) { 42503 componentWillUpdateUniqueNames.add(getComponentName(fiber.type) || 'Component'); 42504 didWarnAboutUnsafeLifecycles.add(fiber.type); 42505 }); 42506 pendingComponentWillUpdateWarnings = []; 42507 } 42508 42509 var UNSAFE_componentWillUpdateUniqueNames = new Set(); 42510 42511 if (pendingUNSAFE_ComponentWillUpdateWarnings.length > 0) { 42512 pendingUNSAFE_ComponentWillUpdateWarnings.forEach(function (fiber) { 42513 UNSAFE_componentWillUpdateUniqueNames.add(getComponentName(fiber.type) || 'Component'); 42514 didWarnAboutUnsafeLifecycles.add(fiber.type); 42515 }); 42516 pendingUNSAFE_ComponentWillUpdateWarnings = []; 42517 } // Finally, we flush all the warnings 42518 // UNSAFE_ ones before the deprecated ones, since they'll be 'louder' 42519 42520 42521 if (UNSAFE_componentWillMountUniqueNames.size > 0) { 42522 var sortedNames = setToSortedString(UNSAFE_componentWillMountUniqueNames); 42523 42524 error('Using UNSAFE_componentWillMount in strict mode is not recommended and may indicate bugs in your code. ' + 'See https://reactjs.org/link/unsafe-component-lifecycles for details.\n\n' + '* Move code with side effects to componentDidMount, and set initial state in the constructor.\n' + '\nPlease update the following components: %s', sortedNames); 42525 } 42526 42527 if (UNSAFE_componentWillReceivePropsUniqueNames.size > 0) { 42528 var _sortedNames = setToSortedString(UNSAFE_componentWillReceivePropsUniqueNames); 42529 42530 error('Using UNSAFE_componentWillReceiveProps in strict mode is not recommended ' + 'and may indicate bugs in your code. ' + 'See https://reactjs.org/link/unsafe-component-lifecycles for details.\n\n' + '* Move data fetching code or side effects to componentDidUpdate.\n' + "* If you're updating state whenever props change, " + 'refactor your code to use memoization techniques or move it to ' + 'static getDerivedStateFromProps. Learn more at: https://reactjs.org/link/derived-state\n' + '\nPlease update the following components: %s', _sortedNames); 42531 } 42532 42533 if (UNSAFE_componentWillUpdateUniqueNames.size > 0) { 42534 var _sortedNames2 = setToSortedString(UNSAFE_componentWillUpdateUniqueNames); 42535 42536 error('Using UNSAFE_componentWillUpdate in strict mode is not recommended ' + 'and may indicate bugs in your code. ' + 'See https://reactjs.org/link/unsafe-component-lifecycles for details.\n\n' + '* Move data fetching code or side effects to componentDidUpdate.\n' + '\nPlease update the following components: %s', _sortedNames2); 42537 } 42538 42539 if (componentWillMountUniqueNames.size > 0) { 42540 var _sortedNames3 = setToSortedString(componentWillMountUniqueNames); 42541 42542 warn('componentWillMount has been renamed, and is not recommended for use. ' + 'See https://reactjs.org/link/unsafe-component-lifecycles for details.\n\n' + '* Move code with side effects to componentDidMount, and set initial state in the constructor.\n' + '* Rename componentWillMount to UNSAFE_componentWillMount to suppress ' + 'this warning in non-strict mode. In React 18.x, only the UNSAFE_ name will work. ' + 'To rename all deprecated lifecycles to their new names, you can run ' + '`npx react-codemod rename-unsafe-lifecycles` in your project source folder.\n' + '\nPlease update the following components: %s', _sortedNames3); 42543 } 42544 42545 if (componentWillReceivePropsUniqueNames.size > 0) { 42546 var _sortedNames4 = setToSortedString(componentWillReceivePropsUniqueNames); 42547 42548 warn('componentWillReceiveProps has been renamed, and is not recommended for use. ' + 'See https://reactjs.org/link/unsafe-component-lifecycles for details.\n\n' + '* Move data fetching code or side effects to componentDidUpdate.\n' + "* If you're updating state whenever props change, refactor your " + 'code to use memoization techniques or move it to ' + 'static getDerivedStateFromProps. Learn more at: https://reactjs.org/link/derived-state\n' + '* Rename componentWillReceiveProps to UNSAFE_componentWillReceiveProps to suppress ' + 'this warning in non-strict mode. In React 18.x, only the UNSAFE_ name will work. ' + 'To rename all deprecated lifecycles to their new names, you can run ' + '`npx react-codemod rename-unsafe-lifecycles` in your project source folder.\n' + '\nPlease update the following components: %s', _sortedNames4); 42549 } 42550 42551 if (componentWillUpdateUniqueNames.size > 0) { 42552 var _sortedNames5 = setToSortedString(componentWillUpdateUniqueNames); 42553 42554 warn('componentWillUpdate has been renamed, and is not recommended for use. ' + 'See https://reactjs.org/link/unsafe-component-lifecycles for details.\n\n' + '* Move data fetching code or side effects to componentDidUpdate.\n' + '* Rename componentWillUpdate to UNSAFE_componentWillUpdate to suppress ' + 'this warning in non-strict mode. In React 18.x, only the UNSAFE_ name will work. ' + 'To rename all deprecated lifecycles to their new names, you can run ' + '`npx react-codemod rename-unsafe-lifecycles` in your project source folder.\n' + '\nPlease update the following components: %s', _sortedNames5); 42555 } 42556 }; 42557 42558 var pendingLegacyContextWarning = new Map(); // Tracks components we have already warned about. 42559 42560 var didWarnAboutLegacyContext = new Set(); 42561 42562 ReactStrictModeWarnings.recordLegacyContextWarning = function (fiber, instance) { 42563 var strictRoot = findStrictRoot(fiber); 42564 42565 if (strictRoot === null) { 42566 error('Expected to find a StrictMode component in a strict mode tree. ' + 'This error is likely caused by a bug in React. Please file an issue.'); 42567 42568 return; 42569 } // Dedup strategy: Warn once per component. 42570 42571 42572 if (didWarnAboutLegacyContext.has(fiber.type)) { 42573 return; 42574 } 42575 42576 var warningsForRoot = pendingLegacyContextWarning.get(strictRoot); 42577 42578 if (fiber.type.contextTypes != null || fiber.type.childContextTypes != null || instance !== null && typeof instance.getChildContext === 'function') { 42579 if (warningsForRoot === undefined) { 42580 warningsForRoot = []; 42581 pendingLegacyContextWarning.set(strictRoot, warningsForRoot); 42582 } 42583 42584 warningsForRoot.push(fiber); 42585 } 42586 }; 42587 42588 ReactStrictModeWarnings.flushLegacyContextWarning = function () { 42589 pendingLegacyContextWarning.forEach(function (fiberArray, strictRoot) { 42590 if (fiberArray.length === 0) { 42591 return; 42592 } 42593 42594 var firstFiber = fiberArray[0]; 42595 var uniqueNames = new Set(); 42596 fiberArray.forEach(function (fiber) { 42597 uniqueNames.add(getComponentName(fiber.type) || 'Component'); 42598 didWarnAboutLegacyContext.add(fiber.type); 42599 }); 42600 var sortedNames = setToSortedString(uniqueNames); 42601 42602 try { 42603 setCurrentFiber(firstFiber); 42604 42605 error('Legacy context API has been detected within a strict-mode tree.' + '\n\nThe old API will be supported in all 16.x releases, but applications ' + 'using it should migrate to the new version.' + '\n\nPlease update the following components: %s' + '\n\nLearn more about this warning here: https://reactjs.org/link/legacy-context', sortedNames); 42606 } finally { 42607 resetCurrentFiber(); 42608 } 42609 }); 42610 }; 42611 42612 ReactStrictModeWarnings.discardPendingWarnings = function () { 42613 pendingComponentWillMountWarnings = []; 42614 pendingUNSAFE_ComponentWillMountWarnings = []; 42615 pendingComponentWillReceivePropsWarnings = []; 42616 pendingUNSAFE_ComponentWillReceivePropsWarnings = []; 42617 pendingComponentWillUpdateWarnings = []; 42618 pendingUNSAFE_ComponentWillUpdateWarnings = []; 42619 pendingLegacyContextWarning = new Map(); 42620 }; 42621} 42622 42623function resolveDefaultProps(Component, baseProps) { 42624 if (Component && Component.defaultProps) { 42625 // Resolve default props. Taken from ReactElement 42626 var props = _assign({}, baseProps); 42627 42628 var defaultProps = Component.defaultProps; 42629 42630 for (var propName in defaultProps) { 42631 if (props[propName] === undefined) { 42632 props[propName] = defaultProps[propName]; 42633 } 42634 } 42635 42636 return props; 42637 } 42638 42639 return baseProps; 42640} 42641 42642// Max 31 bit integer. The max integer size in V8 for 32-bit systems. 42643// Math.pow(2, 30) - 1 42644// 0b111111111111111111111111111111 42645var MAX_SIGNED_31_BIT_INT = 1073741823; 42646 42647var valueCursor = createCursor(null); 42648var rendererSigil; 42649 42650{ 42651 // Use this to detect multiple renderers using the same context 42652 rendererSigil = {}; 42653} 42654 42655var currentlyRenderingFiber = null; 42656var lastContextDependency = null; 42657var lastContextWithAllBitsObserved = null; 42658var isDisallowedContextReadInDEV = false; 42659function resetContextDependencies() { 42660 // This is called right before React yields execution, to ensure `readContext` 42661 // cannot be called outside the render phase. 42662 currentlyRenderingFiber = null; 42663 lastContextDependency = null; 42664 lastContextWithAllBitsObserved = null; 42665 42666 { 42667 isDisallowedContextReadInDEV = false; 42668 } 42669} 42670function enterDisallowedContextReadInDEV() { 42671 { 42672 isDisallowedContextReadInDEV = true; 42673 } 42674} 42675function exitDisallowedContextReadInDEV() { 42676 { 42677 isDisallowedContextReadInDEV = false; 42678 } 42679} 42680function pushProvider(providerFiber, nextValue) { 42681 var context = providerFiber.type._context; 42682 42683 { 42684 push(valueCursor, context._currentValue, providerFiber); 42685 context._currentValue = nextValue; 42686 42687 { 42688 if (context._currentRenderer !== undefined && context._currentRenderer !== null && context._currentRenderer !== rendererSigil) { 42689 error('Detected multiple renderers concurrently rendering the ' + 'same context provider. This is currently unsupported.'); 42690 } 42691 42692 context._currentRenderer = rendererSigil; 42693 } 42694 } 42695} 42696function popProvider(providerFiber) { 42697 var currentValue = valueCursor.current; 42698 pop(valueCursor, providerFiber); 42699 var context = providerFiber.type._context; 42700 42701 { 42702 context._currentValue = currentValue; 42703 } 42704} 42705function calculateChangedBits(context, newValue, oldValue) { 42706 if (objectIs(oldValue, newValue)) { 42707 // No change 42708 return 0; 42709 } else { 42710 var changedBits = typeof context._calculateChangedBits === 'function' ? context._calculateChangedBits(oldValue, newValue) : MAX_SIGNED_31_BIT_INT; 42711 42712 { 42713 if ((changedBits & MAX_SIGNED_31_BIT_INT) !== changedBits) { 42714 error('calculateChangedBits: Expected the return value to be a ' + '31-bit integer. Instead received: %s', changedBits); 42715 } 42716 } 42717 42718 return changedBits | 0; 42719 } 42720} 42721function scheduleWorkOnParentPath(parent, renderLanes) { 42722 // Update the child lanes of all the ancestors, including the alternates. 42723 var node = parent; 42724 42725 while (node !== null) { 42726 var alternate = node.alternate; 42727 42728 if (!isSubsetOfLanes(node.childLanes, renderLanes)) { 42729 node.childLanes = mergeLanes(node.childLanes, renderLanes); 42730 42731 if (alternate !== null) { 42732 alternate.childLanes = mergeLanes(alternate.childLanes, renderLanes); 42733 } 42734 } else if (alternate !== null && !isSubsetOfLanes(alternate.childLanes, renderLanes)) { 42735 alternate.childLanes = mergeLanes(alternate.childLanes, renderLanes); 42736 } else { 42737 // Neither alternate was updated, which means the rest of the 42738 // ancestor path already has sufficient priority. 42739 break; 42740 } 42741 42742 node = node.return; 42743 } 42744} 42745function propagateContextChange(workInProgress, context, changedBits, renderLanes) { 42746 var fiber = workInProgress.child; 42747 42748 if (fiber !== null) { 42749 // Set the return pointer of the child to the work-in-progress fiber. 42750 fiber.return = workInProgress; 42751 } 42752 42753 while (fiber !== null) { 42754 var nextFiber = void 0; // Visit this fiber. 42755 42756 var list = fiber.dependencies; 42757 42758 if (list !== null) { 42759 nextFiber = fiber.child; 42760 var dependency = list.firstContext; 42761 42762 while (dependency !== null) { 42763 // Check if the context matches. 42764 if (dependency.context === context && (dependency.observedBits & changedBits) !== 0) { 42765 // Match! Schedule an update on this fiber. 42766 if (fiber.tag === ClassComponent) { 42767 // Schedule a force update on the work-in-progress. 42768 var update = createUpdate(NoTimestamp, pickArbitraryLane(renderLanes)); 42769 update.tag = ForceUpdate; // TODO: Because we don't have a work-in-progress, this will add the 42770 // update to the current fiber, too, which means it will persist even if 42771 // this render is thrown away. Since it's a race condition, not sure it's 42772 // worth fixing. 42773 42774 enqueueUpdate(fiber, update); 42775 } 42776 42777 fiber.lanes = mergeLanes(fiber.lanes, renderLanes); 42778 var alternate = fiber.alternate; 42779 42780 if (alternate !== null) { 42781 alternate.lanes = mergeLanes(alternate.lanes, renderLanes); 42782 } 42783 42784 scheduleWorkOnParentPath(fiber.return, renderLanes); // Mark the updated lanes on the list, too. 42785 42786 list.lanes = mergeLanes(list.lanes, renderLanes); // Since we already found a match, we can stop traversing the 42787 // dependency list. 42788 42789 break; 42790 } 42791 42792 dependency = dependency.next; 42793 } 42794 } else if (fiber.tag === ContextProvider) { 42795 // Don't scan deeper if this is a matching provider 42796 nextFiber = fiber.type === workInProgress.type ? null : fiber.child; 42797 } else { 42798 // Traverse down. 42799 nextFiber = fiber.child; 42800 } 42801 42802 if (nextFiber !== null) { 42803 // Set the return pointer of the child to the work-in-progress fiber. 42804 nextFiber.return = fiber; 42805 } else { 42806 // No child. Traverse to next sibling. 42807 nextFiber = fiber; 42808 42809 while (nextFiber !== null) { 42810 if (nextFiber === workInProgress) { 42811 // We're back to the root of this subtree. Exit. 42812 nextFiber = null; 42813 break; 42814 } 42815 42816 var sibling = nextFiber.sibling; 42817 42818 if (sibling !== null) { 42819 // Set the return pointer of the sibling to the work-in-progress fiber. 42820 sibling.return = nextFiber.return; 42821 nextFiber = sibling; 42822 break; 42823 } // No more siblings. Traverse up. 42824 42825 42826 nextFiber = nextFiber.return; 42827 } 42828 } 42829 42830 fiber = nextFiber; 42831 } 42832} 42833function prepareToReadContext(workInProgress, renderLanes) { 42834 currentlyRenderingFiber = workInProgress; 42835 lastContextDependency = null; 42836 lastContextWithAllBitsObserved = null; 42837 var dependencies = workInProgress.dependencies; 42838 42839 if (dependencies !== null) { 42840 var firstContext = dependencies.firstContext; 42841 42842 if (firstContext !== null) { 42843 if (includesSomeLane(dependencies.lanes, renderLanes)) { 42844 // Context list has a pending update. Mark that this fiber performed work. 42845 markWorkInProgressReceivedUpdate(); 42846 } // Reset the work-in-progress list 42847 42848 42849 dependencies.firstContext = null; 42850 } 42851 } 42852} 42853function readContext(context, observedBits) { 42854 { 42855 // This warning would fire if you read context inside a Hook like useMemo. 42856 // Unlike the class check below, it's not enforced in production for perf. 42857 if (isDisallowedContextReadInDEV) { 42858 error('Context can only be read while React is rendering. ' + 'In classes, you can read it in the render method or getDerivedStateFromProps. ' + 'In function components, you can read it directly in the function body, but not ' + 'inside Hooks like useReducer() or useMemo().'); 42859 } 42860 } 42861 42862 if (lastContextWithAllBitsObserved === context) ; else if (observedBits === false || observedBits === 0) ; else { 42863 var resolvedObservedBits; // Avoid deopting on observable arguments or heterogeneous types. 42864 42865 if (typeof observedBits !== 'number' || observedBits === MAX_SIGNED_31_BIT_INT) { 42866 // Observe all updates. 42867 lastContextWithAllBitsObserved = context; 42868 resolvedObservedBits = MAX_SIGNED_31_BIT_INT; 42869 } else { 42870 resolvedObservedBits = observedBits; 42871 } 42872 42873 var contextItem = { 42874 context: context, 42875 observedBits: resolvedObservedBits, 42876 next: null 42877 }; 42878 42879 if (lastContextDependency === null) { 42880 if (!(currentlyRenderingFiber !== null)) { 42881 { 42882 throw Error( "Context can only be read while React is rendering. In classes, you can read it in the render method or getDerivedStateFromProps. In function components, you can read it directly in the function body, but not inside Hooks like useReducer() or useMemo()." ); 42883 } 42884 } // This is the first dependency for this component. Create a new list. 42885 42886 42887 lastContextDependency = contextItem; 42888 currentlyRenderingFiber.dependencies = { 42889 lanes: NoLanes, 42890 firstContext: contextItem, 42891 responders: null 42892 }; 42893 } else { 42894 // Append a new context item. 42895 lastContextDependency = lastContextDependency.next = contextItem; 42896 } 42897 } 42898 42899 return context._currentValue ; 42900} 42901 42902var UpdateState = 0; 42903var ReplaceState = 1; 42904var ForceUpdate = 2; 42905var CaptureUpdate = 3; // Global state that is reset at the beginning of calling `processUpdateQueue`. 42906// It should only be read right after calling `processUpdateQueue`, via 42907// `checkHasForceUpdateAfterProcessing`. 42908 42909var hasForceUpdate = false; 42910var didWarnUpdateInsideUpdate; 42911var currentlyProcessingQueue; 42912 42913{ 42914 didWarnUpdateInsideUpdate = false; 42915 currentlyProcessingQueue = null; 42916} 42917 42918function initializeUpdateQueue(fiber) { 42919 var queue = { 42920 baseState: fiber.memoizedState, 42921 firstBaseUpdate: null, 42922 lastBaseUpdate: null, 42923 shared: { 42924 pending: null 42925 }, 42926 effects: null 42927 }; 42928 fiber.updateQueue = queue; 42929} 42930function cloneUpdateQueue(current, workInProgress) { 42931 // Clone the update queue from current. Unless it's already a clone. 42932 var queue = workInProgress.updateQueue; 42933 var currentQueue = current.updateQueue; 42934 42935 if (queue === currentQueue) { 42936 var clone = { 42937 baseState: currentQueue.baseState, 42938 firstBaseUpdate: currentQueue.firstBaseUpdate, 42939 lastBaseUpdate: currentQueue.lastBaseUpdate, 42940 shared: currentQueue.shared, 42941 effects: currentQueue.effects 42942 }; 42943 workInProgress.updateQueue = clone; 42944 } 42945} 42946function createUpdate(eventTime, lane) { 42947 var update = { 42948 eventTime: eventTime, 42949 lane: lane, 42950 tag: UpdateState, 42951 payload: null, 42952 callback: null, 42953 next: null 42954 }; 42955 return update; 42956} 42957function enqueueUpdate(fiber, update) { 42958 var updateQueue = fiber.updateQueue; 42959 42960 if (updateQueue === null) { 42961 // Only occurs if the fiber has been unmounted. 42962 return; 42963 } 42964 42965 var sharedQueue = updateQueue.shared; 42966 var pending = sharedQueue.pending; 42967 42968 if (pending === null) { 42969 // This is the first update. Create a circular list. 42970 update.next = update; 42971 } else { 42972 update.next = pending.next; 42973 pending.next = update; 42974 } 42975 42976 sharedQueue.pending = update; 42977 42978 { 42979 if (currentlyProcessingQueue === sharedQueue && !didWarnUpdateInsideUpdate) { 42980 error('An update (setState, replaceState, or forceUpdate) was scheduled ' + 'from inside an update function. Update functions should be pure, ' + 'with zero side-effects. Consider using componentDidUpdate or a ' + 'callback.'); 42981 42982 didWarnUpdateInsideUpdate = true; 42983 } 42984 } 42985} 42986function enqueueCapturedUpdate(workInProgress, capturedUpdate) { 42987 // Captured updates are updates that are thrown by a child during the render 42988 // phase. They should be discarded if the render is aborted. Therefore, 42989 // we should only put them on the work-in-progress queue, not the current one. 42990 var queue = workInProgress.updateQueue; // Check if the work-in-progress queue is a clone. 42991 42992 var current = workInProgress.alternate; 42993 42994 if (current !== null) { 42995 var currentQueue = current.updateQueue; 42996 42997 if (queue === currentQueue) { 42998 // The work-in-progress queue is the same as current. This happens when 42999 // we bail out on a parent fiber that then captures an error thrown by 43000 // a child. Since we want to append the update only to the work-in 43001 // -progress queue, we need to clone the updates. We usually clone during 43002 // processUpdateQueue, but that didn't happen in this case because we 43003 // skipped over the parent when we bailed out. 43004 var newFirst = null; 43005 var newLast = null; 43006 var firstBaseUpdate = queue.firstBaseUpdate; 43007 43008 if (firstBaseUpdate !== null) { 43009 // Loop through the updates and clone them. 43010 var update = firstBaseUpdate; 43011 43012 do { 43013 var clone = { 43014 eventTime: update.eventTime, 43015 lane: update.lane, 43016 tag: update.tag, 43017 payload: update.payload, 43018 callback: update.callback, 43019 next: null 43020 }; 43021 43022 if (newLast === null) { 43023 newFirst = newLast = clone; 43024 } else { 43025 newLast.next = clone; 43026 newLast = clone; 43027 } 43028 43029 update = update.next; 43030 } while (update !== null); // Append the captured update the end of the cloned list. 43031 43032 43033 if (newLast === null) { 43034 newFirst = newLast = capturedUpdate; 43035 } else { 43036 newLast.next = capturedUpdate; 43037 newLast = capturedUpdate; 43038 } 43039 } else { 43040 // There are no base updates. 43041 newFirst = newLast = capturedUpdate; 43042 } 43043 43044 queue = { 43045 baseState: currentQueue.baseState, 43046 firstBaseUpdate: newFirst, 43047 lastBaseUpdate: newLast, 43048 shared: currentQueue.shared, 43049 effects: currentQueue.effects 43050 }; 43051 workInProgress.updateQueue = queue; 43052 return; 43053 } 43054 } // Append the update to the end of the list. 43055 43056 43057 var lastBaseUpdate = queue.lastBaseUpdate; 43058 43059 if (lastBaseUpdate === null) { 43060 queue.firstBaseUpdate = capturedUpdate; 43061 } else { 43062 lastBaseUpdate.next = capturedUpdate; 43063 } 43064 43065 queue.lastBaseUpdate = capturedUpdate; 43066} 43067 43068function getStateFromUpdate(workInProgress, queue, update, prevState, nextProps, instance) { 43069 switch (update.tag) { 43070 case ReplaceState: 43071 { 43072 var payload = update.payload; 43073 43074 if (typeof payload === 'function') { 43075 // Updater function 43076 { 43077 enterDisallowedContextReadInDEV(); 43078 } 43079 43080 var nextState = payload.call(instance, prevState, nextProps); 43081 43082 { 43083 if ( workInProgress.mode & StrictMode) { 43084 disableLogs(); 43085 43086 try { 43087 payload.call(instance, prevState, nextProps); 43088 } finally { 43089 reenableLogs(); 43090 } 43091 } 43092 43093 exitDisallowedContextReadInDEV(); 43094 } 43095 43096 return nextState; 43097 } // State object 43098 43099 43100 return payload; 43101 } 43102 43103 case CaptureUpdate: 43104 { 43105 workInProgress.flags = workInProgress.flags & ~ShouldCapture | DidCapture; 43106 } 43107 // Intentional fallthrough 43108 43109 case UpdateState: 43110 { 43111 var _payload = update.payload; 43112 var partialState; 43113 43114 if (typeof _payload === 'function') { 43115 // Updater function 43116 { 43117 enterDisallowedContextReadInDEV(); 43118 } 43119 43120 partialState = _payload.call(instance, prevState, nextProps); 43121 43122 { 43123 if ( workInProgress.mode & StrictMode) { 43124 disableLogs(); 43125 43126 try { 43127 _payload.call(instance, prevState, nextProps); 43128 } finally { 43129 reenableLogs(); 43130 } 43131 } 43132 43133 exitDisallowedContextReadInDEV(); 43134 } 43135 } else { 43136 // Partial state object 43137 partialState = _payload; 43138 } 43139 43140 if (partialState === null || partialState === undefined) { 43141 // Null and undefined are treated as no-ops. 43142 return prevState; 43143 } // Merge the partial state and the previous state. 43144 43145 43146 return _assign({}, prevState, partialState); 43147 } 43148 43149 case ForceUpdate: 43150 { 43151 hasForceUpdate = true; 43152 return prevState; 43153 } 43154 } 43155 43156 return prevState; 43157} 43158 43159function processUpdateQueue(workInProgress, props, instance, renderLanes) { 43160 // This is always non-null on a ClassComponent or HostRoot 43161 var queue = workInProgress.updateQueue; 43162 hasForceUpdate = false; 43163 43164 { 43165 currentlyProcessingQueue = queue.shared; 43166 } 43167 43168 var firstBaseUpdate = queue.firstBaseUpdate; 43169 var lastBaseUpdate = queue.lastBaseUpdate; // Check if there are pending updates. If so, transfer them to the base queue. 43170 43171 var pendingQueue = queue.shared.pending; 43172 43173 if (pendingQueue !== null) { 43174 queue.shared.pending = null; // The pending queue is circular. Disconnect the pointer between first 43175 // and last so that it's non-circular. 43176 43177 var lastPendingUpdate = pendingQueue; 43178 var firstPendingUpdate = lastPendingUpdate.next; 43179 lastPendingUpdate.next = null; // Append pending updates to base queue 43180 43181 if (lastBaseUpdate === null) { 43182 firstBaseUpdate = firstPendingUpdate; 43183 } else { 43184 lastBaseUpdate.next = firstPendingUpdate; 43185 } 43186 43187 lastBaseUpdate = lastPendingUpdate; // If there's a current queue, and it's different from the base queue, then 43188 // we need to transfer the updates to that queue, too. Because the base 43189 // queue is a singly-linked list with no cycles, we can append to both 43190 // lists and take advantage of structural sharing. 43191 // TODO: Pass `current` as argument 43192 43193 var current = workInProgress.alternate; 43194 43195 if (current !== null) { 43196 // This is always non-null on a ClassComponent or HostRoot 43197 var currentQueue = current.updateQueue; 43198 var currentLastBaseUpdate = currentQueue.lastBaseUpdate; 43199 43200 if (currentLastBaseUpdate !== lastBaseUpdate) { 43201 if (currentLastBaseUpdate === null) { 43202 currentQueue.firstBaseUpdate = firstPendingUpdate; 43203 } else { 43204 currentLastBaseUpdate.next = firstPendingUpdate; 43205 } 43206 43207 currentQueue.lastBaseUpdate = lastPendingUpdate; 43208 } 43209 } 43210 } // These values may change as we process the queue. 43211 43212 43213 if (firstBaseUpdate !== null) { 43214 // Iterate through the list of updates to compute the result. 43215 var newState = queue.baseState; // TODO: Don't need to accumulate this. Instead, we can remove renderLanes 43216 // from the original lanes. 43217 43218 var newLanes = NoLanes; 43219 var newBaseState = null; 43220 var newFirstBaseUpdate = null; 43221 var newLastBaseUpdate = null; 43222 var update = firstBaseUpdate; 43223 43224 do { 43225 var updateLane = update.lane; 43226 var updateEventTime = update.eventTime; 43227 43228 if (!isSubsetOfLanes(renderLanes, updateLane)) { 43229 // Priority is insufficient. Skip this update. If this is the first 43230 // skipped update, the previous update/state is the new base 43231 // update/state. 43232 var clone = { 43233 eventTime: updateEventTime, 43234 lane: updateLane, 43235 tag: update.tag, 43236 payload: update.payload, 43237 callback: update.callback, 43238 next: null 43239 }; 43240 43241 if (newLastBaseUpdate === null) { 43242 newFirstBaseUpdate = newLastBaseUpdate = clone; 43243 newBaseState = newState; 43244 } else { 43245 newLastBaseUpdate = newLastBaseUpdate.next = clone; 43246 } // Update the remaining priority in the queue. 43247 43248 43249 newLanes = mergeLanes(newLanes, updateLane); 43250 } else { 43251 // This update does have sufficient priority. 43252 if (newLastBaseUpdate !== null) { 43253 var _clone = { 43254 eventTime: updateEventTime, 43255 // This update is going to be committed so we never want uncommit 43256 // it. Using NoLane works because 0 is a subset of all bitmasks, so 43257 // this will never be skipped by the check above. 43258 lane: NoLane, 43259 tag: update.tag, 43260 payload: update.payload, 43261 callback: update.callback, 43262 next: null 43263 }; 43264 newLastBaseUpdate = newLastBaseUpdate.next = _clone; 43265 } // Process this update. 43266 43267 43268 newState = getStateFromUpdate(workInProgress, queue, update, newState, props, instance); 43269 var callback = update.callback; 43270 43271 if (callback !== null) { 43272 workInProgress.flags |= Callback; 43273 var effects = queue.effects; 43274 43275 if (effects === null) { 43276 queue.effects = [update]; 43277 } else { 43278 effects.push(update); 43279 } 43280 } 43281 } 43282 43283 update = update.next; 43284 43285 if (update === null) { 43286 pendingQueue = queue.shared.pending; 43287 43288 if (pendingQueue === null) { 43289 break; 43290 } else { 43291 // An update was scheduled from inside a reducer. Add the new 43292 // pending updates to the end of the list and keep processing. 43293 var _lastPendingUpdate = pendingQueue; // Intentionally unsound. Pending updates form a circular list, but we 43294 // unravel them when transferring them to the base queue. 43295 43296 var _firstPendingUpdate = _lastPendingUpdate.next; 43297 _lastPendingUpdate.next = null; 43298 update = _firstPendingUpdate; 43299 queue.lastBaseUpdate = _lastPendingUpdate; 43300 queue.shared.pending = null; 43301 } 43302 } 43303 } while (true); 43304 43305 if (newLastBaseUpdate === null) { 43306 newBaseState = newState; 43307 } 43308 43309 queue.baseState = newBaseState; 43310 queue.firstBaseUpdate = newFirstBaseUpdate; 43311 queue.lastBaseUpdate = newLastBaseUpdate; // Set the remaining expiration time to be whatever is remaining in the queue. 43312 // This should be fine because the only two other things that contribute to 43313 // expiration time are props and context. We're already in the middle of the 43314 // begin phase by the time we start processing the queue, so we've already 43315 // dealt with the props. Context in components that specify 43316 // shouldComponentUpdate is tricky; but we'll have to account for 43317 // that regardless. 43318 43319 markSkippedUpdateLanes(newLanes); 43320 workInProgress.lanes = newLanes; 43321 workInProgress.memoizedState = newState; 43322 } 43323 43324 { 43325 currentlyProcessingQueue = null; 43326 } 43327} 43328 43329function callCallback(callback, context) { 43330 if (!(typeof callback === 'function')) { 43331 { 43332 throw Error( "Invalid argument passed as callback. Expected a function. Instead received: " + callback ); 43333 } 43334 } 43335 43336 callback.call(context); 43337} 43338 43339function resetHasForceUpdateBeforeProcessing() { 43340 hasForceUpdate = false; 43341} 43342function checkHasForceUpdateAfterProcessing() { 43343 return hasForceUpdate; 43344} 43345function commitUpdateQueue(finishedWork, finishedQueue, instance) { 43346 // Commit the effects 43347 var effects = finishedQueue.effects; 43348 finishedQueue.effects = null; 43349 43350 if (effects !== null) { 43351 for (var i = 0; i < effects.length; i++) { 43352 var effect = effects[i]; 43353 var callback = effect.callback; 43354 43355 if (callback !== null) { 43356 effect.callback = null; 43357 callCallback(callback, instance); 43358 } 43359 } 43360 } 43361} 43362 43363var fakeInternalInstance = {}; 43364var isArray = Array.isArray; // React.Component uses a shared frozen object by default. 43365// We'll use it to determine whether we need to initialize legacy refs. 43366 43367var emptyRefsObject = new React.Component().refs; 43368var didWarnAboutStateAssignmentForComponent; 43369var didWarnAboutUninitializedState; 43370var didWarnAboutGetSnapshotBeforeUpdateWithoutDidUpdate; 43371var didWarnAboutLegacyLifecyclesAndDerivedState; 43372var didWarnAboutUndefinedDerivedState; 43373var warnOnUndefinedDerivedState; 43374var warnOnInvalidCallback; 43375var didWarnAboutDirectlyAssigningPropsToState; 43376var didWarnAboutContextTypeAndContextTypes; 43377var didWarnAboutInvalidateContextType; 43378 43379{ 43380 didWarnAboutStateAssignmentForComponent = new Set(); 43381 didWarnAboutUninitializedState = new Set(); 43382 didWarnAboutGetSnapshotBeforeUpdateWithoutDidUpdate = new Set(); 43383 didWarnAboutLegacyLifecyclesAndDerivedState = new Set(); 43384 didWarnAboutDirectlyAssigningPropsToState = new Set(); 43385 didWarnAboutUndefinedDerivedState = new Set(); 43386 didWarnAboutContextTypeAndContextTypes = new Set(); 43387 didWarnAboutInvalidateContextType = new Set(); 43388 var didWarnOnInvalidCallback = new Set(); 43389 43390 warnOnInvalidCallback = function (callback, callerName) { 43391 if (callback === null || typeof callback === 'function') { 43392 return; 43393 } 43394 43395 var key = callerName + '_' + callback; 43396 43397 if (!didWarnOnInvalidCallback.has(key)) { 43398 didWarnOnInvalidCallback.add(key); 43399 43400 error('%s(...): Expected the last optional `callback` argument to be a ' + 'function. Instead received: %s.', callerName, callback); 43401 } 43402 }; 43403 43404 warnOnUndefinedDerivedState = function (type, partialState) { 43405 if (partialState === undefined) { 43406 var componentName = getComponentName(type) || 'Component'; 43407 43408 if (!didWarnAboutUndefinedDerivedState.has(componentName)) { 43409 didWarnAboutUndefinedDerivedState.add(componentName); 43410 43411 error('%s.getDerivedStateFromProps(): A valid state object (or null) must be returned. ' + 'You have returned undefined.', componentName); 43412 } 43413 } 43414 }; // This is so gross but it's at least non-critical and can be removed if 43415 // it causes problems. This is meant to give a nicer error message for 43416 // ReactDOM15.unstable_renderSubtreeIntoContainer(reactDOM16Component, 43417 // ...)) which otherwise throws a "_processChildContext is not a function" 43418 // exception. 43419 43420 43421 Object.defineProperty(fakeInternalInstance, '_processChildContext', { 43422 enumerable: false, 43423 value: function () { 43424 { 43425 { 43426 throw Error( "_processChildContext is not available in React 16+. This likely means you have multiple copies of React and are attempting to nest a React 15 tree inside a React 16 tree using unstable_renderSubtreeIntoContainer, which isn't supported. Try to make sure you have only one copy of React (and ideally, switch to ReactDOM.createPortal)." ); 43427 } 43428 } 43429 } 43430 }); 43431 Object.freeze(fakeInternalInstance); 43432} 43433 43434function applyDerivedStateFromProps(workInProgress, ctor, getDerivedStateFromProps, nextProps) { 43435 var prevState = workInProgress.memoizedState; 43436 43437 { 43438 if ( workInProgress.mode & StrictMode) { 43439 disableLogs(); 43440 43441 try { 43442 // Invoke the function an extra time to help detect side-effects. 43443 getDerivedStateFromProps(nextProps, prevState); 43444 } finally { 43445 reenableLogs(); 43446 } 43447 } 43448 } 43449 43450 var partialState = getDerivedStateFromProps(nextProps, prevState); 43451 43452 { 43453 warnOnUndefinedDerivedState(ctor, partialState); 43454 } // Merge the partial state and the previous state. 43455 43456 43457 var memoizedState = partialState === null || partialState === undefined ? prevState : _assign({}, prevState, partialState); 43458 workInProgress.memoizedState = memoizedState; // Once the update queue is empty, persist the derived state onto the 43459 // base state. 43460 43461 if (workInProgress.lanes === NoLanes) { 43462 // Queue is always non-null for classes 43463 var updateQueue = workInProgress.updateQueue; 43464 updateQueue.baseState = memoizedState; 43465 } 43466} 43467var classComponentUpdater = { 43468 isMounted: isMounted, 43469 enqueueSetState: function (inst, payload, callback) { 43470 var fiber = get(inst); 43471 var eventTime = requestEventTime(); 43472 var lane = requestUpdateLane(fiber); 43473 var update = createUpdate(eventTime, lane); 43474 update.payload = payload; 43475 43476 if (callback !== undefined && callback !== null) { 43477 { 43478 warnOnInvalidCallback(callback, 'setState'); 43479 } 43480 43481 update.callback = callback; 43482 } 43483 43484 enqueueUpdate(fiber, update); 43485 scheduleUpdateOnFiber(fiber, lane, eventTime); 43486 }, 43487 enqueueReplaceState: function (inst, payload, callback) { 43488 var fiber = get(inst); 43489 var eventTime = requestEventTime(); 43490 var lane = requestUpdateLane(fiber); 43491 var update = createUpdate(eventTime, lane); 43492 update.tag = ReplaceState; 43493 update.payload = payload; 43494 43495 if (callback !== undefined && callback !== null) { 43496 { 43497 warnOnInvalidCallback(callback, 'replaceState'); 43498 } 43499 43500 update.callback = callback; 43501 } 43502 43503 enqueueUpdate(fiber, update); 43504 scheduleUpdateOnFiber(fiber, lane, eventTime); 43505 }, 43506 enqueueForceUpdate: function (inst, callback) { 43507 var fiber = get(inst); 43508 var eventTime = requestEventTime(); 43509 var lane = requestUpdateLane(fiber); 43510 var update = createUpdate(eventTime, lane); 43511 update.tag = ForceUpdate; 43512 43513 if (callback !== undefined && callback !== null) { 43514 { 43515 warnOnInvalidCallback(callback, 'forceUpdate'); 43516 } 43517 43518 update.callback = callback; 43519 } 43520 43521 enqueueUpdate(fiber, update); 43522 scheduleUpdateOnFiber(fiber, lane, eventTime); 43523 } 43524}; 43525 43526function checkShouldComponentUpdate(workInProgress, ctor, oldProps, newProps, oldState, newState, nextContext) { 43527 var instance = workInProgress.stateNode; 43528 43529 if (typeof instance.shouldComponentUpdate === 'function') { 43530 { 43531 if ( workInProgress.mode & StrictMode) { 43532 disableLogs(); 43533 43534 try { 43535 // Invoke the function an extra time to help detect side-effects. 43536 instance.shouldComponentUpdate(newProps, newState, nextContext); 43537 } finally { 43538 reenableLogs(); 43539 } 43540 } 43541 } 43542 43543 var shouldUpdate = instance.shouldComponentUpdate(newProps, newState, nextContext); 43544 43545 { 43546 if (shouldUpdate === undefined) { 43547 error('%s.shouldComponentUpdate(): Returned undefined instead of a ' + 'boolean value. Make sure to return true or false.', getComponentName(ctor) || 'Component'); 43548 } 43549 } 43550 43551 return shouldUpdate; 43552 } 43553 43554 if (ctor.prototype && ctor.prototype.isPureReactComponent) { 43555 return !shallowEqual(oldProps, newProps) || !shallowEqual(oldState, newState); 43556 } 43557 43558 return true; 43559} 43560 43561function checkClassInstance(workInProgress, ctor, newProps) { 43562 var instance = workInProgress.stateNode; 43563 43564 { 43565 var name = getComponentName(ctor) || 'Component'; 43566 var renderPresent = instance.render; 43567 43568 if (!renderPresent) { 43569 if (ctor.prototype && typeof ctor.prototype.render === 'function') { 43570 error('%s(...): No `render` method found on the returned component ' + 'instance: did you accidentally return an object from the constructor?', name); 43571 } else { 43572 error('%s(...): No `render` method found on the returned component ' + 'instance: you may have forgotten to define `render`.', name); 43573 } 43574 } 43575 43576 if (instance.getInitialState && !instance.getInitialState.isReactClassApproved && !instance.state) { 43577 error('getInitialState was defined on %s, a plain JavaScript class. ' + 'This is only supported for classes created using React.createClass. ' + 'Did you mean to define a state property instead?', name); 43578 } 43579 43580 if (instance.getDefaultProps && !instance.getDefaultProps.isReactClassApproved) { 43581 error('getDefaultProps was defined on %s, a plain JavaScript class. ' + 'This is only supported for classes created using React.createClass. ' + 'Use a static property to define defaultProps instead.', name); 43582 } 43583 43584 if (instance.propTypes) { 43585 error('propTypes was defined as an instance property on %s. Use a static ' + 'property to define propTypes instead.', name); 43586 } 43587 43588 if (instance.contextType) { 43589 error('contextType was defined as an instance property on %s. Use a static ' + 'property to define contextType instead.', name); 43590 } 43591 43592 { 43593 if (instance.contextTypes) { 43594 error('contextTypes was defined as an instance property on %s. Use a static ' + 'property to define contextTypes instead.', name); 43595 } 43596 43597 if (ctor.contextType && ctor.contextTypes && !didWarnAboutContextTypeAndContextTypes.has(ctor)) { 43598 didWarnAboutContextTypeAndContextTypes.add(ctor); 43599 43600 error('%s declares both contextTypes and contextType static properties. ' + 'The legacy contextTypes property will be ignored.', name); 43601 } 43602 } 43603 43604 if (typeof instance.componentShouldUpdate === 'function') { 43605 error('%s has a method called ' + 'componentShouldUpdate(). Did you mean shouldComponentUpdate()? ' + 'The name is phrased as a question because the function is ' + 'expected to return a value.', name); 43606 } 43607 43608 if (ctor.prototype && ctor.prototype.isPureReactComponent && typeof instance.shouldComponentUpdate !== 'undefined') { 43609 error('%s has a method called shouldComponentUpdate(). ' + 'shouldComponentUpdate should not be used when extending React.PureComponent. ' + 'Please extend React.Component if shouldComponentUpdate is used.', getComponentName(ctor) || 'A pure component'); 43610 } 43611 43612 if (typeof instance.componentDidUnmount === 'function') { 43613 error('%s has a method called ' + 'componentDidUnmount(). But there is no such lifecycle method. ' + 'Did you mean componentWillUnmount()?', name); 43614 } 43615 43616 if (typeof instance.componentDidReceiveProps === 'function') { 43617 error('%s has a method called ' + 'componentDidReceiveProps(). But there is no such lifecycle method. ' + 'If you meant to update the state in response to changing props, ' + 'use componentWillReceiveProps(). If you meant to fetch data or ' + 'run side-effects or mutations after React has updated the UI, use componentDidUpdate().', name); 43618 } 43619 43620 if (typeof instance.componentWillRecieveProps === 'function') { 43621 error('%s has a method called ' + 'componentWillRecieveProps(). Did you mean componentWillReceiveProps()?', name); 43622 } 43623 43624 if (typeof instance.UNSAFE_componentWillRecieveProps === 'function') { 43625 error('%s has a method called ' + 'UNSAFE_componentWillRecieveProps(). Did you mean UNSAFE_componentWillReceiveProps()?', name); 43626 } 43627 43628 var hasMutatedProps = instance.props !== newProps; 43629 43630 if (instance.props !== undefined && hasMutatedProps) { 43631 error('%s(...): When calling super() in `%s`, make sure to pass ' + "up the same props that your component's constructor was passed.", name, name); 43632 } 43633 43634 if (instance.defaultProps) { 43635 error('Setting defaultProps as an instance property on %s is not supported and will be ignored.' + ' Instead, define defaultProps as a static property on %s.', name, name); 43636 } 43637 43638 if (typeof instance.getSnapshotBeforeUpdate === 'function' && typeof instance.componentDidUpdate !== 'function' && !didWarnAboutGetSnapshotBeforeUpdateWithoutDidUpdate.has(ctor)) { 43639 didWarnAboutGetSnapshotBeforeUpdateWithoutDidUpdate.add(ctor); 43640 43641 error('%s: getSnapshotBeforeUpdate() should be used with componentDidUpdate(). ' + 'This component defines getSnapshotBeforeUpdate() only.', getComponentName(ctor)); 43642 } 43643 43644 if (typeof instance.getDerivedStateFromProps === 'function') { 43645 error('%s: getDerivedStateFromProps() is defined as an instance method ' + 'and will be ignored. Instead, declare it as a static method.', name); 43646 } 43647 43648 if (typeof instance.getDerivedStateFromError === 'function') { 43649 error('%s: getDerivedStateFromError() is defined as an instance method ' + 'and will be ignored. Instead, declare it as a static method.', name); 43650 } 43651 43652 if (typeof ctor.getSnapshotBeforeUpdate === 'function') { 43653 error('%s: getSnapshotBeforeUpdate() is defined as a static method ' + 'and will be ignored. Instead, declare it as an instance method.', name); 43654 } 43655 43656 var _state = instance.state; 43657 43658 if (_state && (typeof _state !== 'object' || isArray(_state))) { 43659 error('%s.state: must be set to an object or null', name); 43660 } 43661 43662 if (typeof instance.getChildContext === 'function' && typeof ctor.childContextTypes !== 'object') { 43663 error('%s.getChildContext(): childContextTypes must be defined in order to ' + 'use getChildContext().', name); 43664 } 43665 } 43666} 43667 43668function adoptClassInstance(workInProgress, instance) { 43669 instance.updater = classComponentUpdater; 43670 workInProgress.stateNode = instance; // The instance needs access to the fiber so that it can schedule updates 43671 43672 set(instance, workInProgress); 43673 43674 { 43675 instance._reactInternalInstance = fakeInternalInstance; 43676 } 43677} 43678 43679function constructClassInstance(workInProgress, ctor, props) { 43680 var isLegacyContextConsumer = false; 43681 var unmaskedContext = emptyContextObject; 43682 var context = emptyContextObject; 43683 var contextType = ctor.contextType; 43684 43685 { 43686 if ('contextType' in ctor) { 43687 var isValid = // Allow null for conditional declaration 43688 contextType === null || contextType !== undefined && contextType.$$typeof === REACT_CONTEXT_TYPE && contextType._context === undefined; // Not a <Context.Consumer> 43689 43690 if (!isValid && !didWarnAboutInvalidateContextType.has(ctor)) { 43691 didWarnAboutInvalidateContextType.add(ctor); 43692 var addendum = ''; 43693 43694 if (contextType === undefined) { 43695 addendum = ' However, it is set to undefined. ' + 'This can be caused by a typo or by mixing up named and default imports. ' + 'This can also happen due to a circular dependency, so ' + 'try moving the createContext() call to a separate file.'; 43696 } else if (typeof contextType !== 'object') { 43697 addendum = ' However, it is set to a ' + typeof contextType + '.'; 43698 } else if (contextType.$$typeof === REACT_PROVIDER_TYPE) { 43699 addendum = ' Did you accidentally pass the Context.Provider instead?'; 43700 } else if (contextType._context !== undefined) { 43701 // <Context.Consumer> 43702 addendum = ' Did you accidentally pass the Context.Consumer instead?'; 43703 } else { 43704 addendum = ' However, it is set to an object with keys {' + Object.keys(contextType).join(', ') + '}.'; 43705 } 43706 43707 error('%s defines an invalid contextType. ' + 'contextType should point to the Context object returned by React.createContext().%s', getComponentName(ctor) || 'Component', addendum); 43708 } 43709 } 43710 } 43711 43712 if (typeof contextType === 'object' && contextType !== null) { 43713 context = readContext(contextType); 43714 } else { 43715 unmaskedContext = getUnmaskedContext(workInProgress, ctor, true); 43716 var contextTypes = ctor.contextTypes; 43717 isLegacyContextConsumer = contextTypes !== null && contextTypes !== undefined; 43718 context = isLegacyContextConsumer ? getMaskedContext(workInProgress, unmaskedContext) : emptyContextObject; 43719 } // Instantiate twice to help detect side-effects. 43720 43721 43722 { 43723 if ( workInProgress.mode & StrictMode) { 43724 disableLogs(); 43725 43726 try { 43727 new ctor(props, context); // eslint-disable-line no-new 43728 } finally { 43729 reenableLogs(); 43730 } 43731 } 43732 } 43733 43734 var instance = new ctor(props, context); 43735 var state = workInProgress.memoizedState = instance.state !== null && instance.state !== undefined ? instance.state : null; 43736 adoptClassInstance(workInProgress, instance); 43737 43738 { 43739 if (typeof ctor.getDerivedStateFromProps === 'function' && state === null) { 43740 var componentName = getComponentName(ctor) || 'Component'; 43741 43742 if (!didWarnAboutUninitializedState.has(componentName)) { 43743 didWarnAboutUninitializedState.add(componentName); 43744 43745 error('`%s` uses `getDerivedStateFromProps` but its initial state is ' + '%s. This is not recommended. Instead, define the initial state by ' + 'assigning an object to `this.state` in the constructor of `%s`. ' + 'This ensures that `getDerivedStateFromProps` arguments have a consistent shape.', componentName, instance.state === null ? 'null' : 'undefined', componentName); 43746 } 43747 } // If new component APIs are defined, "unsafe" lifecycles won't be called. 43748 // Warn about these lifecycles if they are present. 43749 // Don't warn about react-lifecycles-compat polyfilled methods though. 43750 43751 43752 if (typeof ctor.getDerivedStateFromProps === 'function' || typeof instance.getSnapshotBeforeUpdate === 'function') { 43753 var foundWillMountName = null; 43754 var foundWillReceivePropsName = null; 43755 var foundWillUpdateName = null; 43756 43757 if (typeof instance.componentWillMount === 'function' && instance.componentWillMount.__suppressDeprecationWarning !== true) { 43758 foundWillMountName = 'componentWillMount'; 43759 } else if (typeof instance.UNSAFE_componentWillMount === 'function') { 43760 foundWillMountName = 'UNSAFE_componentWillMount'; 43761 } 43762 43763 if (typeof instance.componentWillReceiveProps === 'function' && instance.componentWillReceiveProps.__suppressDeprecationWarning !== true) { 43764 foundWillReceivePropsName = 'componentWillReceiveProps'; 43765 } else if (typeof instance.UNSAFE_componentWillReceiveProps === 'function') { 43766 foundWillReceivePropsName = 'UNSAFE_componentWillReceiveProps'; 43767 } 43768 43769 if (typeof instance.componentWillUpdate === 'function' && instance.componentWillUpdate.__suppressDeprecationWarning !== true) { 43770 foundWillUpdateName = 'componentWillUpdate'; 43771 } else if (typeof instance.UNSAFE_componentWillUpdate === 'function') { 43772 foundWillUpdateName = 'UNSAFE_componentWillUpdate'; 43773 } 43774 43775 if (foundWillMountName !== null || foundWillReceivePropsName !== null || foundWillUpdateName !== null) { 43776 var _componentName = getComponentName(ctor) || 'Component'; 43777 43778 var newApiName = typeof ctor.getDerivedStateFromProps === 'function' ? 'getDerivedStateFromProps()' : 'getSnapshotBeforeUpdate()'; 43779 43780 if (!didWarnAboutLegacyLifecyclesAndDerivedState.has(_componentName)) { 43781 didWarnAboutLegacyLifecyclesAndDerivedState.add(_componentName); 43782 43783 error('Unsafe legacy lifecycles will not be called for components using new component APIs.\n\n' + '%s uses %s but also contains the following legacy lifecycles:%s%s%s\n\n' + 'The above lifecycles should be removed. Learn more about this warning here:\n' + 'https://reactjs.org/link/unsafe-component-lifecycles', _componentName, newApiName, foundWillMountName !== null ? "\n " + foundWillMountName : '', foundWillReceivePropsName !== null ? "\n " + foundWillReceivePropsName : '', foundWillUpdateName !== null ? "\n " + foundWillUpdateName : ''); 43784 } 43785 } 43786 } 43787 } // Cache unmasked context so we can avoid recreating masked context unless necessary. 43788 // ReactFiberContext usually updates this cache but can't for newly-created instances. 43789 43790 43791 if (isLegacyContextConsumer) { 43792 cacheContext(workInProgress, unmaskedContext, context); 43793 } 43794 43795 return instance; 43796} 43797 43798function callComponentWillMount(workInProgress, instance) { 43799 var oldState = instance.state; 43800 43801 if (typeof instance.componentWillMount === 'function') { 43802 instance.componentWillMount(); 43803 } 43804 43805 if (typeof instance.UNSAFE_componentWillMount === 'function') { 43806 instance.UNSAFE_componentWillMount(); 43807 } 43808 43809 if (oldState !== instance.state) { 43810 { 43811 error('%s.componentWillMount(): Assigning directly to this.state is ' + "deprecated (except inside a component's " + 'constructor). Use setState instead.', getComponentName(workInProgress.type) || 'Component'); 43812 } 43813 43814 classComponentUpdater.enqueueReplaceState(instance, instance.state, null); 43815 } 43816} 43817 43818function callComponentWillReceiveProps(workInProgress, instance, newProps, nextContext) { 43819 var oldState = instance.state; 43820 43821 if (typeof instance.componentWillReceiveProps === 'function') { 43822 instance.componentWillReceiveProps(newProps, nextContext); 43823 } 43824 43825 if (typeof instance.UNSAFE_componentWillReceiveProps === 'function') { 43826 instance.UNSAFE_componentWillReceiveProps(newProps, nextContext); 43827 } 43828 43829 if (instance.state !== oldState) { 43830 { 43831 var componentName = getComponentName(workInProgress.type) || 'Component'; 43832 43833 if (!didWarnAboutStateAssignmentForComponent.has(componentName)) { 43834 didWarnAboutStateAssignmentForComponent.add(componentName); 43835 43836 error('%s.componentWillReceiveProps(): Assigning directly to ' + "this.state is deprecated (except inside a component's " + 'constructor). Use setState instead.', componentName); 43837 } 43838 } 43839 43840 classComponentUpdater.enqueueReplaceState(instance, instance.state, null); 43841 } 43842} // Invokes the mount life-cycles on a previously never rendered instance. 43843 43844 43845function mountClassInstance(workInProgress, ctor, newProps, renderLanes) { 43846 { 43847 checkClassInstance(workInProgress, ctor, newProps); 43848 } 43849 43850 var instance = workInProgress.stateNode; 43851 instance.props = newProps; 43852 instance.state = workInProgress.memoizedState; 43853 instance.refs = emptyRefsObject; 43854 initializeUpdateQueue(workInProgress); 43855 var contextType = ctor.contextType; 43856 43857 if (typeof contextType === 'object' && contextType !== null) { 43858 instance.context = readContext(contextType); 43859 } else { 43860 var unmaskedContext = getUnmaskedContext(workInProgress, ctor, true); 43861 instance.context = getMaskedContext(workInProgress, unmaskedContext); 43862 } 43863 43864 { 43865 if (instance.state === newProps) { 43866 var componentName = getComponentName(ctor) || 'Component'; 43867 43868 if (!didWarnAboutDirectlyAssigningPropsToState.has(componentName)) { 43869 didWarnAboutDirectlyAssigningPropsToState.add(componentName); 43870 43871 error('%s: It is not recommended to assign props directly to state ' + "because updates to props won't be reflected in state. " + 'In most cases, it is better to use props directly.', componentName); 43872 } 43873 } 43874 43875 if (workInProgress.mode & StrictMode) { 43876 ReactStrictModeWarnings.recordLegacyContextWarning(workInProgress, instance); 43877 } 43878 43879 { 43880 ReactStrictModeWarnings.recordUnsafeLifecycleWarnings(workInProgress, instance); 43881 } 43882 } 43883 43884 processUpdateQueue(workInProgress, newProps, instance, renderLanes); 43885 instance.state = workInProgress.memoizedState; 43886 var getDerivedStateFromProps = ctor.getDerivedStateFromProps; 43887 43888 if (typeof getDerivedStateFromProps === 'function') { 43889 applyDerivedStateFromProps(workInProgress, ctor, getDerivedStateFromProps, newProps); 43890 instance.state = workInProgress.memoizedState; 43891 } // In order to support react-lifecycles-compat polyfilled components, 43892 // Unsafe lifecycles should not be invoked for components using the new APIs. 43893 43894 43895 if (typeof ctor.getDerivedStateFromProps !== 'function' && typeof instance.getSnapshotBeforeUpdate !== 'function' && (typeof instance.UNSAFE_componentWillMount === 'function' || typeof instance.componentWillMount === 'function')) { 43896 callComponentWillMount(workInProgress, instance); // If we had additional state updates during this life-cycle, let's 43897 // process them now. 43898 43899 processUpdateQueue(workInProgress, newProps, instance, renderLanes); 43900 instance.state = workInProgress.memoizedState; 43901 } 43902 43903 if (typeof instance.componentDidMount === 'function') { 43904 workInProgress.flags |= Update; 43905 } 43906} 43907 43908function resumeMountClassInstance(workInProgress, ctor, newProps, renderLanes) { 43909 var instance = workInProgress.stateNode; 43910 var oldProps = workInProgress.memoizedProps; 43911 instance.props = oldProps; 43912 var oldContext = instance.context; 43913 var contextType = ctor.contextType; 43914 var nextContext = emptyContextObject; 43915 43916 if (typeof contextType === 'object' && contextType !== null) { 43917 nextContext = readContext(contextType); 43918 } else { 43919 var nextLegacyUnmaskedContext = getUnmaskedContext(workInProgress, ctor, true); 43920 nextContext = getMaskedContext(workInProgress, nextLegacyUnmaskedContext); 43921 } 43922 43923 var getDerivedStateFromProps = ctor.getDerivedStateFromProps; 43924 var hasNewLifecycles = typeof getDerivedStateFromProps === 'function' || typeof instance.getSnapshotBeforeUpdate === 'function'; // Note: During these life-cycles, instance.props/instance.state are what 43925 // ever the previously attempted to render - not the "current". However, 43926 // during componentDidUpdate we pass the "current" props. 43927 // In order to support react-lifecycles-compat polyfilled components, 43928 // Unsafe lifecycles should not be invoked for components using the new APIs. 43929 43930 if (!hasNewLifecycles && (typeof instance.UNSAFE_componentWillReceiveProps === 'function' || typeof instance.componentWillReceiveProps === 'function')) { 43931 if (oldProps !== newProps || oldContext !== nextContext) { 43932 callComponentWillReceiveProps(workInProgress, instance, newProps, nextContext); 43933 } 43934 } 43935 43936 resetHasForceUpdateBeforeProcessing(); 43937 var oldState = workInProgress.memoizedState; 43938 var newState = instance.state = oldState; 43939 processUpdateQueue(workInProgress, newProps, instance, renderLanes); 43940 newState = workInProgress.memoizedState; 43941 43942 if (oldProps === newProps && oldState === newState && !hasContextChanged() && !checkHasForceUpdateAfterProcessing()) { 43943 // If an update was already in progress, we should schedule an Update 43944 // effect even though we're bailing out, so that cWU/cDU are called. 43945 if (typeof instance.componentDidMount === 'function') { 43946 workInProgress.flags |= Update; 43947 } 43948 43949 return false; 43950 } 43951 43952 if (typeof getDerivedStateFromProps === 'function') { 43953 applyDerivedStateFromProps(workInProgress, ctor, getDerivedStateFromProps, newProps); 43954 newState = workInProgress.memoizedState; 43955 } 43956 43957 var shouldUpdate = checkHasForceUpdateAfterProcessing() || checkShouldComponentUpdate(workInProgress, ctor, oldProps, newProps, oldState, newState, nextContext); 43958 43959 if (shouldUpdate) { 43960 // In order to support react-lifecycles-compat polyfilled components, 43961 // Unsafe lifecycles should not be invoked for components using the new APIs. 43962 if (!hasNewLifecycles && (typeof instance.UNSAFE_componentWillMount === 'function' || typeof instance.componentWillMount === 'function')) { 43963 if (typeof instance.componentWillMount === 'function') { 43964 instance.componentWillMount(); 43965 } 43966 43967 if (typeof instance.UNSAFE_componentWillMount === 'function') { 43968 instance.UNSAFE_componentWillMount(); 43969 } 43970 } 43971 43972 if (typeof instance.componentDidMount === 'function') { 43973 workInProgress.flags |= Update; 43974 } 43975 } else { 43976 // If an update was already in progress, we should schedule an Update 43977 // effect even though we're bailing out, so that cWU/cDU are called. 43978 if (typeof instance.componentDidMount === 'function') { 43979 workInProgress.flags |= Update; 43980 } // If shouldComponentUpdate returned false, we should still update the 43981 // memoized state to indicate that this work can be reused. 43982 43983 43984 workInProgress.memoizedProps = newProps; 43985 workInProgress.memoizedState = newState; 43986 } // Update the existing instance's state, props, and context pointers even 43987 // if shouldComponentUpdate returns false. 43988 43989 43990 instance.props = newProps; 43991 instance.state = newState; 43992 instance.context = nextContext; 43993 return shouldUpdate; 43994} // Invokes the update life-cycles and returns false if it shouldn't rerender. 43995 43996 43997function updateClassInstance(current, workInProgress, ctor, newProps, renderLanes) { 43998 var instance = workInProgress.stateNode; 43999 cloneUpdateQueue(current, workInProgress); 44000 var unresolvedOldProps = workInProgress.memoizedProps; 44001 var oldProps = workInProgress.type === workInProgress.elementType ? unresolvedOldProps : resolveDefaultProps(workInProgress.type, unresolvedOldProps); 44002 instance.props = oldProps; 44003 var unresolvedNewProps = workInProgress.pendingProps; 44004 var oldContext = instance.context; 44005 var contextType = ctor.contextType; 44006 var nextContext = emptyContextObject; 44007 44008 if (typeof contextType === 'object' && contextType !== null) { 44009 nextContext = readContext(contextType); 44010 } else { 44011 var nextUnmaskedContext = getUnmaskedContext(workInProgress, ctor, true); 44012 nextContext = getMaskedContext(workInProgress, nextUnmaskedContext); 44013 } 44014 44015 var getDerivedStateFromProps = ctor.getDerivedStateFromProps; 44016 var hasNewLifecycles = typeof getDerivedStateFromProps === 'function' || typeof instance.getSnapshotBeforeUpdate === 'function'; // Note: During these life-cycles, instance.props/instance.state are what 44017 // ever the previously attempted to render - not the "current". However, 44018 // during componentDidUpdate we pass the "current" props. 44019 // In order to support react-lifecycles-compat polyfilled components, 44020 // Unsafe lifecycles should not be invoked for components using the new APIs. 44021 44022 if (!hasNewLifecycles && (typeof instance.UNSAFE_componentWillReceiveProps === 'function' || typeof instance.componentWillReceiveProps === 'function')) { 44023 if (unresolvedOldProps !== unresolvedNewProps || oldContext !== nextContext) { 44024 callComponentWillReceiveProps(workInProgress, instance, newProps, nextContext); 44025 } 44026 } 44027 44028 resetHasForceUpdateBeforeProcessing(); 44029 var oldState = workInProgress.memoizedState; 44030 var newState = instance.state = oldState; 44031 processUpdateQueue(workInProgress, newProps, instance, renderLanes); 44032 newState = workInProgress.memoizedState; 44033 44034 if (unresolvedOldProps === unresolvedNewProps && oldState === newState && !hasContextChanged() && !checkHasForceUpdateAfterProcessing()) { 44035 // If an update was already in progress, we should schedule an Update 44036 // effect even though we're bailing out, so that cWU/cDU are called. 44037 if (typeof instance.componentDidUpdate === 'function') { 44038 if (unresolvedOldProps !== current.memoizedProps || oldState !== current.memoizedState) { 44039 workInProgress.flags |= Update; 44040 } 44041 } 44042 44043 if (typeof instance.getSnapshotBeforeUpdate === 'function') { 44044 if (unresolvedOldProps !== current.memoizedProps || oldState !== current.memoizedState) { 44045 workInProgress.flags |= Snapshot; 44046 } 44047 } 44048 44049 return false; 44050 } 44051 44052 if (typeof getDerivedStateFromProps === 'function') { 44053 applyDerivedStateFromProps(workInProgress, ctor, getDerivedStateFromProps, newProps); 44054 newState = workInProgress.memoizedState; 44055 } 44056 44057 var shouldUpdate = checkHasForceUpdateAfterProcessing() || checkShouldComponentUpdate(workInProgress, ctor, oldProps, newProps, oldState, newState, nextContext); 44058 44059 if (shouldUpdate) { 44060 // In order to support react-lifecycles-compat polyfilled components, 44061 // Unsafe lifecycles should not be invoked for components using the new APIs. 44062 if (!hasNewLifecycles && (typeof instance.UNSAFE_componentWillUpdate === 'function' || typeof instance.componentWillUpdate === 'function')) { 44063 if (typeof instance.componentWillUpdate === 'function') { 44064 instance.componentWillUpdate(newProps, newState, nextContext); 44065 } 44066 44067 if (typeof instance.UNSAFE_componentWillUpdate === 'function') { 44068 instance.UNSAFE_componentWillUpdate(newProps, newState, nextContext); 44069 } 44070 } 44071 44072 if (typeof instance.componentDidUpdate === 'function') { 44073 workInProgress.flags |= Update; 44074 } 44075 44076 if (typeof instance.getSnapshotBeforeUpdate === 'function') { 44077 workInProgress.flags |= Snapshot; 44078 } 44079 } else { 44080 // If an update was already in progress, we should schedule an Update 44081 // effect even though we're bailing out, so that cWU/cDU are called. 44082 if (typeof instance.componentDidUpdate === 'function') { 44083 if (unresolvedOldProps !== current.memoizedProps || oldState !== current.memoizedState) { 44084 workInProgress.flags |= Update; 44085 } 44086 } 44087 44088 if (typeof instance.getSnapshotBeforeUpdate === 'function') { 44089 if (unresolvedOldProps !== current.memoizedProps || oldState !== current.memoizedState) { 44090 workInProgress.flags |= Snapshot; 44091 } 44092 } // If shouldComponentUpdate returned false, we should still update the 44093 // memoized props/state to indicate that this work can be reused. 44094 44095 44096 workInProgress.memoizedProps = newProps; 44097 workInProgress.memoizedState = newState; 44098 } // Update the existing instance's state, props, and context pointers even 44099 // if shouldComponentUpdate returns false. 44100 44101 44102 instance.props = newProps; 44103 instance.state = newState; 44104 instance.context = nextContext; 44105 return shouldUpdate; 44106} 44107 44108var didWarnAboutMaps; 44109var didWarnAboutGenerators; 44110var didWarnAboutStringRefs; 44111var ownerHasKeyUseWarning; 44112var ownerHasFunctionTypeWarning; 44113 44114var warnForMissingKey = function (child, returnFiber) {}; 44115 44116{ 44117 didWarnAboutMaps = false; 44118 didWarnAboutGenerators = false; 44119 didWarnAboutStringRefs = {}; 44120 /** 44121 * Warn if there's no key explicitly set on dynamic arrays of children or 44122 * object keys are not valid. This allows us to keep track of children between 44123 * updates. 44124 */ 44125 44126 ownerHasKeyUseWarning = {}; 44127 ownerHasFunctionTypeWarning = {}; 44128 44129 warnForMissingKey = function (child, returnFiber) { 44130 if (child === null || typeof child !== 'object') { 44131 return; 44132 } 44133 44134 if (!child._store || child._store.validated || child.key != null) { 44135 return; 44136 } 44137 44138 if (!(typeof child._store === 'object')) { 44139 { 44140 throw Error( "React Component in warnForMissingKey should have a _store. This error is likely caused by a bug in React. Please file an issue." ); 44141 } 44142 } 44143 44144 child._store.validated = true; 44145 var componentName = getComponentName(returnFiber.type) || 'Component'; 44146 44147 if (ownerHasKeyUseWarning[componentName]) { 44148 return; 44149 } 44150 44151 ownerHasKeyUseWarning[componentName] = true; 44152 44153 error('Each child in a list should have a unique ' + '"key" prop. See https://reactjs.org/link/warning-keys for ' + 'more information.'); 44154 }; 44155} 44156 44157var isArray$1 = Array.isArray; 44158 44159function coerceRef(returnFiber, current, element) { 44160 var mixedRef = element.ref; 44161 44162 if (mixedRef !== null && typeof mixedRef !== 'function' && typeof mixedRef !== 'object') { 44163 { 44164 // TODO: Clean this up once we turn on the string ref warning for 44165 // everyone, because the strict mode case will no longer be relevant 44166 if ((returnFiber.mode & StrictMode || warnAboutStringRefs) && // We warn in ReactElement.js if owner and self are equal for string refs 44167 // because these cannot be automatically converted to an arrow function 44168 // using a codemod. Therefore, we don't have to warn about string refs again. 44169 !(element._owner && element._self && element._owner.stateNode !== element._self)) { 44170 var componentName = getComponentName(returnFiber.type) || 'Component'; 44171 44172 if (!didWarnAboutStringRefs[componentName]) { 44173 { 44174 error('A string ref, "%s", has been found within a strict mode tree. ' + 'String refs are a source of potential bugs and should be avoided. ' + 'We recommend using useRef() or createRef() instead. ' + 'Learn more about using refs safely here: ' + 'https://reactjs.org/link/strict-mode-string-ref', mixedRef); 44175 } 44176 44177 didWarnAboutStringRefs[componentName] = true; 44178 } 44179 } 44180 } 44181 44182 if (element._owner) { 44183 var owner = element._owner; 44184 var inst; 44185 44186 if (owner) { 44187 var ownerFiber = owner; 44188 44189 if (!(ownerFiber.tag === ClassComponent)) { 44190 { 44191 throw Error( "Function components cannot have string refs. We recommend using useRef() instead. Learn more about using refs safely here: https://reactjs.org/link/strict-mode-string-ref" ); 44192 } 44193 } 44194 44195 inst = ownerFiber.stateNode; 44196 } 44197 44198 if (!inst) { 44199 { 44200 throw Error( "Missing owner for string ref " + mixedRef + ". This error is likely caused by a bug in React. Please file an issue." ); 44201 } 44202 } 44203 44204 var stringRef = '' + mixedRef; // Check if previous string ref matches new string ref 44205 44206 if (current !== null && current.ref !== null && typeof current.ref === 'function' && current.ref._stringRef === stringRef) { 44207 return current.ref; 44208 } 44209 44210 var ref = function (value) { 44211 var refs = inst.refs; 44212 44213 if (refs === emptyRefsObject) { 44214 // This is a lazy pooled frozen object, so we need to initialize. 44215 refs = inst.refs = {}; 44216 } 44217 44218 if (value === null) { 44219 delete refs[stringRef]; 44220 } else { 44221 refs[stringRef] = value; 44222 } 44223 }; 44224 44225 ref._stringRef = stringRef; 44226 return ref; 44227 } else { 44228 if (!(typeof mixedRef === 'string')) { 44229 { 44230 throw Error( "Expected ref to be a function, a string, an object returned by React.createRef(), or null." ); 44231 } 44232 } 44233 44234 if (!element._owner) { 44235 { 44236 throw Error( "Element ref was specified as a string (" + mixedRef + ") but no owner was set. This could happen for one of the following reasons:\n1. You may be adding a ref to a function component\n2. You may be adding a ref to a component that was not created inside a component's render method\n3. You have multiple copies of React loaded\nSee https://reactjs.org/link/refs-must-have-owner for more information." ); 44237 } 44238 } 44239 } 44240 } 44241 44242 return mixedRef; 44243} 44244 44245function throwOnInvalidObjectType(returnFiber, newChild) { 44246 if (returnFiber.type !== 'textarea') { 44247 { 44248 { 44249 throw Error( "Objects are not valid as a React child (found: " + (Object.prototype.toString.call(newChild) === '[object Object]' ? 'object with keys {' + Object.keys(newChild).join(', ') + '}' : newChild) + "). If you meant to render a collection of children, use an array instead." ); 44250 } 44251 } 44252 } 44253} 44254 44255function warnOnFunctionType(returnFiber) { 44256 { 44257 var componentName = getComponentName(returnFiber.type) || 'Component'; 44258 44259 if (ownerHasFunctionTypeWarning[componentName]) { 44260 return; 44261 } 44262 44263 ownerHasFunctionTypeWarning[componentName] = true; 44264 44265 error('Functions are not valid as a React child. This may happen if ' + 'you return a Component instead of <Component /> from render. ' + 'Or maybe you meant to call this function rather than return it.'); 44266 } 44267} // We avoid inlining this to avoid potential deopts from using try/catch. 44268// to be able to optimize each path individually by branching early. This needs 44269// a compiler or we can do it manually. Helpers that don't need this branching 44270// live outside of this function. 44271 44272 44273function ChildReconciler(shouldTrackSideEffects) { 44274 function deleteChild(returnFiber, childToDelete) { 44275 if (!shouldTrackSideEffects) { 44276 // Noop. 44277 return; 44278 } // Deletions are added in reversed order so we add it to the front. 44279 // At this point, the return fiber's effect list is empty except for 44280 // deletions, so we can just append the deletion to the list. The remaining 44281 // effects aren't added until the complete phase. Once we implement 44282 // resuming, this may not be true. 44283 44284 44285 var last = returnFiber.lastEffect; 44286 44287 if (last !== null) { 44288 last.nextEffect = childToDelete; 44289 returnFiber.lastEffect = childToDelete; 44290 } else { 44291 returnFiber.firstEffect = returnFiber.lastEffect = childToDelete; 44292 } 44293 44294 childToDelete.nextEffect = null; 44295 childToDelete.flags = Deletion; 44296 } 44297 44298 function deleteRemainingChildren(returnFiber, currentFirstChild) { 44299 if (!shouldTrackSideEffects) { 44300 // Noop. 44301 return null; 44302 } // TODO: For the shouldClone case, this could be micro-optimized a bit by 44303 // assuming that after the first child we've already added everything. 44304 44305 44306 var childToDelete = currentFirstChild; 44307 44308 while (childToDelete !== null) { 44309 deleteChild(returnFiber, childToDelete); 44310 childToDelete = childToDelete.sibling; 44311 } 44312 44313 return null; 44314 } 44315 44316 function mapRemainingChildren(returnFiber, currentFirstChild) { 44317 // Add the remaining children to a temporary map so that we can find them by 44318 // keys quickly. Implicit (null) keys get added to this set with their index 44319 // instead. 44320 var existingChildren = new Map(); 44321 var existingChild = currentFirstChild; 44322 44323 while (existingChild !== null) { 44324 if (existingChild.key !== null) { 44325 existingChildren.set(existingChild.key, existingChild); 44326 } else { 44327 existingChildren.set(existingChild.index, existingChild); 44328 } 44329 44330 existingChild = existingChild.sibling; 44331 } 44332 44333 return existingChildren; 44334 } 44335 44336 function useFiber(fiber, pendingProps) { 44337 // We currently set sibling to null and index to 0 here because it is easy 44338 // to forget to do before returning it. E.g. for the single child case. 44339 var clone = createWorkInProgress(fiber, pendingProps); 44340 clone.index = 0; 44341 clone.sibling = null; 44342 return clone; 44343 } 44344 44345 function placeChild(newFiber, lastPlacedIndex, newIndex) { 44346 newFiber.index = newIndex; 44347 44348 if (!shouldTrackSideEffects) { 44349 // Noop. 44350 return lastPlacedIndex; 44351 } 44352 44353 var current = newFiber.alternate; 44354 44355 if (current !== null) { 44356 var oldIndex = current.index; 44357 44358 if (oldIndex < lastPlacedIndex) { 44359 // This is a move. 44360 newFiber.flags = Placement; 44361 return lastPlacedIndex; 44362 } else { 44363 // This item can stay in place. 44364 return oldIndex; 44365 } 44366 } else { 44367 // This is an insertion. 44368 newFiber.flags = Placement; 44369 return lastPlacedIndex; 44370 } 44371 } 44372 44373 function placeSingleChild(newFiber) { 44374 // This is simpler for the single child case. We only need to do a 44375 // placement for inserting new children. 44376 if (shouldTrackSideEffects && newFiber.alternate === null) { 44377 newFiber.flags = Placement; 44378 } 44379 44380 return newFiber; 44381 } 44382 44383 function updateTextNode(returnFiber, current, textContent, lanes) { 44384 if (current === null || current.tag !== HostText) { 44385 // Insert 44386 var created = createFiberFromText(textContent, returnFiber.mode, lanes); 44387 created.return = returnFiber; 44388 return created; 44389 } else { 44390 // Update 44391 var existing = useFiber(current, textContent); 44392 existing.return = returnFiber; 44393 return existing; 44394 } 44395 } 44396 44397 function updateElement(returnFiber, current, element, lanes) { 44398 if (current !== null) { 44399 if (current.elementType === element.type || ( // Keep this check inline so it only runs on the false path: 44400 isCompatibleFamilyForHotReloading(current, element) )) { 44401 // Move based on index 44402 var existing = useFiber(current, element.props); 44403 existing.ref = coerceRef(returnFiber, current, element); 44404 existing.return = returnFiber; 44405 44406 { 44407 existing._debugSource = element._source; 44408 existing._debugOwner = element._owner; 44409 } 44410 44411 return existing; 44412 } 44413 } // Insert 44414 44415 44416 var created = createFiberFromElement(element, returnFiber.mode, lanes); 44417 created.ref = coerceRef(returnFiber, current, element); 44418 created.return = returnFiber; 44419 return created; 44420 } 44421 44422 function updatePortal(returnFiber, current, portal, lanes) { 44423 if (current === null || current.tag !== HostPortal || current.stateNode.containerInfo !== portal.containerInfo || current.stateNode.implementation !== portal.implementation) { 44424 // Insert 44425 var created = createFiberFromPortal(portal, returnFiber.mode, lanes); 44426 created.return = returnFiber; 44427 return created; 44428 } else { 44429 // Update 44430 var existing = useFiber(current, portal.children || []); 44431 existing.return = returnFiber; 44432 return existing; 44433 } 44434 } 44435 44436 function updateFragment(returnFiber, current, fragment, lanes, key) { 44437 if (current === null || current.tag !== Fragment) { 44438 // Insert 44439 var created = createFiberFromFragment(fragment, returnFiber.mode, lanes, key); 44440 created.return = returnFiber; 44441 return created; 44442 } else { 44443 // Update 44444 var existing = useFiber(current, fragment); 44445 existing.return = returnFiber; 44446 return existing; 44447 } 44448 } 44449 44450 function createChild(returnFiber, newChild, lanes) { 44451 if (typeof newChild === 'string' || typeof newChild === 'number') { 44452 // Text nodes don't have keys. If the previous node is implicitly keyed 44453 // we can continue to replace it without aborting even if it is not a text 44454 // node. 44455 var created = createFiberFromText('' + newChild, returnFiber.mode, lanes); 44456 created.return = returnFiber; 44457 return created; 44458 } 44459 44460 if (typeof newChild === 'object' && newChild !== null) { 44461 switch (newChild.$$typeof) { 44462 case REACT_ELEMENT_TYPE: 44463 { 44464 var _created = createFiberFromElement(newChild, returnFiber.mode, lanes); 44465 44466 _created.ref = coerceRef(returnFiber, null, newChild); 44467 _created.return = returnFiber; 44468 return _created; 44469 } 44470 44471 case REACT_PORTAL_TYPE: 44472 { 44473 var _created2 = createFiberFromPortal(newChild, returnFiber.mode, lanes); 44474 44475 _created2.return = returnFiber; 44476 return _created2; 44477 } 44478 } 44479 44480 if (isArray$1(newChild) || getIteratorFn(newChild)) { 44481 var _created3 = createFiberFromFragment(newChild, returnFiber.mode, lanes, null); 44482 44483 _created3.return = returnFiber; 44484 return _created3; 44485 } 44486 44487 throwOnInvalidObjectType(returnFiber, newChild); 44488 } 44489 44490 { 44491 if (typeof newChild === 'function') { 44492 warnOnFunctionType(returnFiber); 44493 } 44494 } 44495 44496 return null; 44497 } 44498 44499 function updateSlot(returnFiber, oldFiber, newChild, lanes) { 44500 // Update the fiber if the keys match, otherwise return null. 44501 var key = oldFiber !== null ? oldFiber.key : null; 44502 44503 if (typeof newChild === 'string' || typeof newChild === 'number') { 44504 // Text nodes don't have keys. If the previous node is implicitly keyed 44505 // we can continue to replace it without aborting even if it is not a text 44506 // node. 44507 if (key !== null) { 44508 return null; 44509 } 44510 44511 return updateTextNode(returnFiber, oldFiber, '' + newChild, lanes); 44512 } 44513 44514 if (typeof newChild === 'object' && newChild !== null) { 44515 switch (newChild.$$typeof) { 44516 case REACT_ELEMENT_TYPE: 44517 { 44518 if (newChild.key === key) { 44519 if (newChild.type === REACT_FRAGMENT_TYPE) { 44520 return updateFragment(returnFiber, oldFiber, newChild.props.children, lanes, key); 44521 } 44522 44523 return updateElement(returnFiber, oldFiber, newChild, lanes); 44524 } else { 44525 return null; 44526 } 44527 } 44528 44529 case REACT_PORTAL_TYPE: 44530 { 44531 if (newChild.key === key) { 44532 return updatePortal(returnFiber, oldFiber, newChild, lanes); 44533 } else { 44534 return null; 44535 } 44536 } 44537 } 44538 44539 if (isArray$1(newChild) || getIteratorFn(newChild)) { 44540 if (key !== null) { 44541 return null; 44542 } 44543 44544 return updateFragment(returnFiber, oldFiber, newChild, lanes, null); 44545 } 44546 44547 throwOnInvalidObjectType(returnFiber, newChild); 44548 } 44549 44550 { 44551 if (typeof newChild === 'function') { 44552 warnOnFunctionType(returnFiber); 44553 } 44554 } 44555 44556 return null; 44557 } 44558 44559 function updateFromMap(existingChildren, returnFiber, newIdx, newChild, lanes) { 44560 if (typeof newChild === 'string' || typeof newChild === 'number') { 44561 // Text nodes don't have keys, so we neither have to check the old nor 44562 // new node for the key. If both are text nodes, they match. 44563 var matchedFiber = existingChildren.get(newIdx) || null; 44564 return updateTextNode(returnFiber, matchedFiber, '' + newChild, lanes); 44565 } 44566 44567 if (typeof newChild === 'object' && newChild !== null) { 44568 switch (newChild.$$typeof) { 44569 case REACT_ELEMENT_TYPE: 44570 { 44571 var _matchedFiber = existingChildren.get(newChild.key === null ? newIdx : newChild.key) || null; 44572 44573 if (newChild.type === REACT_FRAGMENT_TYPE) { 44574 return updateFragment(returnFiber, _matchedFiber, newChild.props.children, lanes, newChild.key); 44575 } 44576 44577 return updateElement(returnFiber, _matchedFiber, newChild, lanes); 44578 } 44579 44580 case REACT_PORTAL_TYPE: 44581 { 44582 var _matchedFiber2 = existingChildren.get(newChild.key === null ? newIdx : newChild.key) || null; 44583 44584 return updatePortal(returnFiber, _matchedFiber2, newChild, lanes); 44585 } 44586 44587 } 44588 44589 if (isArray$1(newChild) || getIteratorFn(newChild)) { 44590 var _matchedFiber3 = existingChildren.get(newIdx) || null; 44591 44592 return updateFragment(returnFiber, _matchedFiber3, newChild, lanes, null); 44593 } 44594 44595 throwOnInvalidObjectType(returnFiber, newChild); 44596 } 44597 44598 { 44599 if (typeof newChild === 'function') { 44600 warnOnFunctionType(returnFiber); 44601 } 44602 } 44603 44604 return null; 44605 } 44606 /** 44607 * Warns if there is a duplicate or missing key 44608 */ 44609 44610 44611 function warnOnInvalidKey(child, knownKeys, returnFiber) { 44612 { 44613 if (typeof child !== 'object' || child === null) { 44614 return knownKeys; 44615 } 44616 44617 switch (child.$$typeof) { 44618 case REACT_ELEMENT_TYPE: 44619 case REACT_PORTAL_TYPE: 44620 warnForMissingKey(child, returnFiber); 44621 var key = child.key; 44622 44623 if (typeof key !== 'string') { 44624 break; 44625 } 44626 44627 if (knownKeys === null) { 44628 knownKeys = new Set(); 44629 knownKeys.add(key); 44630 break; 44631 } 44632 44633 if (!knownKeys.has(key)) { 44634 knownKeys.add(key); 44635 break; 44636 } 44637 44638 error('Encountered two children with the same key, `%s`. ' + 'Keys should be unique so that components maintain their identity ' + 'across updates. Non-unique keys may cause children to be ' + 'duplicated and/or omitted â the behavior is unsupported and ' + 'could change in a future version.', key); 44639 44640 break; 44641 } 44642 } 44643 44644 return knownKeys; 44645 } 44646 44647 function reconcileChildrenArray(returnFiber, currentFirstChild, newChildren, lanes) { 44648 // This algorithm can't optimize by searching from both ends since we 44649 // don't have backpointers on fibers. I'm trying to see how far we can get 44650 // with that model. If it ends up not being worth the tradeoffs, we can 44651 // add it later. 44652 // Even with a two ended optimization, we'd want to optimize for the case 44653 // where there are few changes and brute force the comparison instead of 44654 // going for the Map. It'd like to explore hitting that path first in 44655 // forward-only mode and only go for the Map once we notice that we need 44656 // lots of look ahead. This doesn't handle reversal as well as two ended 44657 // search but that's unusual. Besides, for the two ended optimization to 44658 // work on Iterables, we'd need to copy the whole set. 44659 // In this first iteration, we'll just live with hitting the bad case 44660 // (adding everything to a Map) in for every insert/move. 44661 // If you change this code, also update reconcileChildrenIterator() which 44662 // uses the same algorithm. 44663 { 44664 // First, validate keys. 44665 var knownKeys = null; 44666 44667 for (var i = 0; i < newChildren.length; i++) { 44668 var child = newChildren[i]; 44669 knownKeys = warnOnInvalidKey(child, knownKeys, returnFiber); 44670 } 44671 } 44672 44673 var resultingFirstChild = null; 44674 var previousNewFiber = null; 44675 var oldFiber = currentFirstChild; 44676 var lastPlacedIndex = 0; 44677 var newIdx = 0; 44678 var nextOldFiber = null; 44679 44680 for (; oldFiber !== null && newIdx < newChildren.length; newIdx++) { 44681 if (oldFiber.index > newIdx) { 44682 nextOldFiber = oldFiber; 44683 oldFiber = null; 44684 } else { 44685 nextOldFiber = oldFiber.sibling; 44686 } 44687 44688 var newFiber = updateSlot(returnFiber, oldFiber, newChildren[newIdx], lanes); 44689 44690 if (newFiber === null) { 44691 // TODO: This breaks on empty slots like null children. That's 44692 // unfortunate because it triggers the slow path all the time. We need 44693 // a better way to communicate whether this was a miss or null, 44694 // boolean, undefined, etc. 44695 if (oldFiber === null) { 44696 oldFiber = nextOldFiber; 44697 } 44698 44699 break; 44700 } 44701 44702 if (shouldTrackSideEffects) { 44703 if (oldFiber && newFiber.alternate === null) { 44704 // We matched the slot, but we didn't reuse the existing fiber, so we 44705 // need to delete the existing child. 44706 deleteChild(returnFiber, oldFiber); 44707 } 44708 } 44709 44710 lastPlacedIndex = placeChild(newFiber, lastPlacedIndex, newIdx); 44711 44712 if (previousNewFiber === null) { 44713 // TODO: Move out of the loop. This only happens for the first run. 44714 resultingFirstChild = newFiber; 44715 } else { 44716 // TODO: Defer siblings if we're not at the right index for this slot. 44717 // I.e. if we had null values before, then we want to defer this 44718 // for each null value. However, we also don't want to call updateSlot 44719 // with the previous one. 44720 previousNewFiber.sibling = newFiber; 44721 } 44722 44723 previousNewFiber = newFiber; 44724 oldFiber = nextOldFiber; 44725 } 44726 44727 if (newIdx === newChildren.length) { 44728 // We've reached the end of the new children. We can delete the rest. 44729 deleteRemainingChildren(returnFiber, oldFiber); 44730 return resultingFirstChild; 44731 } 44732 44733 if (oldFiber === null) { 44734 // If we don't have any more existing children we can choose a fast path 44735 // since the rest will all be insertions. 44736 for (; newIdx < newChildren.length; newIdx++) { 44737 var _newFiber = createChild(returnFiber, newChildren[newIdx], lanes); 44738 44739 if (_newFiber === null) { 44740 continue; 44741 } 44742 44743 lastPlacedIndex = placeChild(_newFiber, lastPlacedIndex, newIdx); 44744 44745 if (previousNewFiber === null) { 44746 // TODO: Move out of the loop. This only happens for the first run. 44747 resultingFirstChild = _newFiber; 44748 } else { 44749 previousNewFiber.sibling = _newFiber; 44750 } 44751 44752 previousNewFiber = _newFiber; 44753 } 44754 44755 return resultingFirstChild; 44756 } // Add all children to a key map for quick lookups. 44757 44758 44759 var existingChildren = mapRemainingChildren(returnFiber, oldFiber); // Keep scanning and use the map to restore deleted items as moves. 44760 44761 for (; newIdx < newChildren.length; newIdx++) { 44762 var _newFiber2 = updateFromMap(existingChildren, returnFiber, newIdx, newChildren[newIdx], lanes); 44763 44764 if (_newFiber2 !== null) { 44765 if (shouldTrackSideEffects) { 44766 if (_newFiber2.alternate !== null) { 44767 // The new fiber is a work in progress, but if there exists a 44768 // current, that means that we reused the fiber. We need to delete 44769 // it from the child list so that we don't add it to the deletion 44770 // list. 44771 existingChildren.delete(_newFiber2.key === null ? newIdx : _newFiber2.key); 44772 } 44773 } 44774 44775 lastPlacedIndex = placeChild(_newFiber2, lastPlacedIndex, newIdx); 44776 44777 if (previousNewFiber === null) { 44778 resultingFirstChild = _newFiber2; 44779 } else { 44780 previousNewFiber.sibling = _newFiber2; 44781 } 44782 44783 previousNewFiber = _newFiber2; 44784 } 44785 } 44786 44787 if (shouldTrackSideEffects) { 44788 // Any existing children that weren't consumed above were deleted. We need 44789 // to add them to the deletion list. 44790 existingChildren.forEach(function (child) { 44791 return deleteChild(returnFiber, child); 44792 }); 44793 } 44794 44795 return resultingFirstChild; 44796 } 44797 44798 function reconcileChildrenIterator(returnFiber, currentFirstChild, newChildrenIterable, lanes) { 44799 // This is the same implementation as reconcileChildrenArray(), 44800 // but using the iterator instead. 44801 var iteratorFn = getIteratorFn(newChildrenIterable); 44802 44803 if (!(typeof iteratorFn === 'function')) { 44804 { 44805 throw Error( "An object is not an iterable. This error is likely caused by a bug in React. Please file an issue." ); 44806 } 44807 } 44808 44809 { 44810 // We don't support rendering Generators because it's a mutation. 44811 // See https://github.com/facebook/react/issues/12995 44812 if (typeof Symbol === 'function' && // $FlowFixMe Flow doesn't know about toStringTag 44813 newChildrenIterable[Symbol.toStringTag] === 'Generator') { 44814 if (!didWarnAboutGenerators) { 44815 error('Using Generators as children is unsupported and will likely yield ' + 'unexpected results because enumerating a generator mutates it. ' + 'You may convert it to an array with `Array.from()` or the ' + '`[...spread]` operator before rendering. Keep in mind ' + 'you might need to polyfill these features for older browsers.'); 44816 } 44817 44818 didWarnAboutGenerators = true; 44819 } // Warn about using Maps as children 44820 44821 44822 if (newChildrenIterable.entries === iteratorFn) { 44823 if (!didWarnAboutMaps) { 44824 error('Using Maps as children is not supported. ' + 'Use an array of keyed ReactElements instead.'); 44825 } 44826 44827 didWarnAboutMaps = true; 44828 } // First, validate keys. 44829 // We'll get a different iterator later for the main pass. 44830 44831 44832 var _newChildren = iteratorFn.call(newChildrenIterable); 44833 44834 if (_newChildren) { 44835 var knownKeys = null; 44836 44837 var _step = _newChildren.next(); 44838 44839 for (; !_step.done; _step = _newChildren.next()) { 44840 var child = _step.value; 44841 knownKeys = warnOnInvalidKey(child, knownKeys, returnFiber); 44842 } 44843 } 44844 } 44845 44846 var newChildren = iteratorFn.call(newChildrenIterable); 44847 44848 if (!(newChildren != null)) { 44849 { 44850 throw Error( "An iterable object provided no iterator." ); 44851 } 44852 } 44853 44854 var resultingFirstChild = null; 44855 var previousNewFiber = null; 44856 var oldFiber = currentFirstChild; 44857 var lastPlacedIndex = 0; 44858 var newIdx = 0; 44859 var nextOldFiber = null; 44860 var step = newChildren.next(); 44861 44862 for (; oldFiber !== null && !step.done; newIdx++, step = newChildren.next()) { 44863 if (oldFiber.index > newIdx) { 44864 nextOldFiber = oldFiber; 44865 oldFiber = null; 44866 } else { 44867 nextOldFiber = oldFiber.sibling; 44868 } 44869 44870 var newFiber = updateSlot(returnFiber, oldFiber, step.value, lanes); 44871 44872 if (newFiber === null) { 44873 // TODO: This breaks on empty slots like null children. That's 44874 // unfortunate because it triggers the slow path all the time. We need 44875 // a better way to communicate whether this was a miss or null, 44876 // boolean, undefined, etc. 44877 if (oldFiber === null) { 44878 oldFiber = nextOldFiber; 44879 } 44880 44881 break; 44882 } 44883 44884 if (shouldTrackSideEffects) { 44885 if (oldFiber && newFiber.alternate === null) { 44886 // We matched the slot, but we didn't reuse the existing fiber, so we 44887 // need to delete the existing child. 44888 deleteChild(returnFiber, oldFiber); 44889 } 44890 } 44891 44892 lastPlacedIndex = placeChild(newFiber, lastPlacedIndex, newIdx); 44893 44894 if (previousNewFiber === null) { 44895 // TODO: Move out of the loop. This only happens for the first run. 44896 resultingFirstChild = newFiber; 44897 } else { 44898 // TODO: Defer siblings if we're not at the right index for this slot. 44899 // I.e. if we had null values before, then we want to defer this 44900 // for each null value. However, we also don't want to call updateSlot 44901 // with the previous one. 44902 previousNewFiber.sibling = newFiber; 44903 } 44904 44905 previousNewFiber = newFiber; 44906 oldFiber = nextOldFiber; 44907 } 44908 44909 if (step.done) { 44910 // We've reached the end of the new children. We can delete the rest. 44911 deleteRemainingChildren(returnFiber, oldFiber); 44912 return resultingFirstChild; 44913 } 44914 44915 if (oldFiber === null) { 44916 // If we don't have any more existing children we can choose a fast path 44917 // since the rest will all be insertions. 44918 for (; !step.done; newIdx++, step = newChildren.next()) { 44919 var _newFiber3 = createChild(returnFiber, step.value, lanes); 44920 44921 if (_newFiber3 === null) { 44922 continue; 44923 } 44924 44925 lastPlacedIndex = placeChild(_newFiber3, lastPlacedIndex, newIdx); 44926 44927 if (previousNewFiber === null) { 44928 // TODO: Move out of the loop. This only happens for the first run. 44929 resultingFirstChild = _newFiber3; 44930 } else { 44931 previousNewFiber.sibling = _newFiber3; 44932 } 44933 44934 previousNewFiber = _newFiber3; 44935 } 44936 44937 return resultingFirstChild; 44938 } // Add all children to a key map for quick lookups. 44939 44940 44941 var existingChildren = mapRemainingChildren(returnFiber, oldFiber); // Keep scanning and use the map to restore deleted items as moves. 44942 44943 for (; !step.done; newIdx++, step = newChildren.next()) { 44944 var _newFiber4 = updateFromMap(existingChildren, returnFiber, newIdx, step.value, lanes); 44945 44946 if (_newFiber4 !== null) { 44947 if (shouldTrackSideEffects) { 44948 if (_newFiber4.alternate !== null) { 44949 // The new fiber is a work in progress, but if there exists a 44950 // current, that means that we reused the fiber. We need to delete 44951 // it from the child list so that we don't add it to the deletion 44952 // list. 44953 existingChildren.delete(_newFiber4.key === null ? newIdx : _newFiber4.key); 44954 } 44955 } 44956 44957 lastPlacedIndex = placeChild(_newFiber4, lastPlacedIndex, newIdx); 44958 44959 if (previousNewFiber === null) { 44960 resultingFirstChild = _newFiber4; 44961 } else { 44962 previousNewFiber.sibling = _newFiber4; 44963 } 44964 44965 previousNewFiber = _newFiber4; 44966 } 44967 } 44968 44969 if (shouldTrackSideEffects) { 44970 // Any existing children that weren't consumed above were deleted. We need 44971 // to add them to the deletion list. 44972 existingChildren.forEach(function (child) { 44973 return deleteChild(returnFiber, child); 44974 }); 44975 } 44976 44977 return resultingFirstChild; 44978 } 44979 44980 function reconcileSingleTextNode(returnFiber, currentFirstChild, textContent, lanes) { 44981 // There's no need to check for keys on text nodes since we don't have a 44982 // way to define them. 44983 if (currentFirstChild !== null && currentFirstChild.tag === HostText) { 44984 // We already have an existing node so let's just update it and delete 44985 // the rest. 44986 deleteRemainingChildren(returnFiber, currentFirstChild.sibling); 44987 var existing = useFiber(currentFirstChild, textContent); 44988 existing.return = returnFiber; 44989 return existing; 44990 } // The existing first child is not a text node so we need to create one 44991 // and delete the existing ones. 44992 44993 44994 deleteRemainingChildren(returnFiber, currentFirstChild); 44995 var created = createFiberFromText(textContent, returnFiber.mode, lanes); 44996 created.return = returnFiber; 44997 return created; 44998 } 44999 45000 function reconcileSingleElement(returnFiber, currentFirstChild, element, lanes) { 45001 var key = element.key; 45002 var child = currentFirstChild; 45003 45004 while (child !== null) { 45005 // TODO: If key === null and child.key === null, then this only applies to 45006 // the first item in the list. 45007 if (child.key === key) { 45008 switch (child.tag) { 45009 case Fragment: 45010 { 45011 if (element.type === REACT_FRAGMENT_TYPE) { 45012 deleteRemainingChildren(returnFiber, child.sibling); 45013 var existing = useFiber(child, element.props.children); 45014 existing.return = returnFiber; 45015 45016 { 45017 existing._debugSource = element._source; 45018 existing._debugOwner = element._owner; 45019 } 45020 45021 return existing; 45022 } 45023 45024 break; 45025 } 45026 45027 case Block: 45028 45029 // We intentionally fallthrough here if enableBlocksAPI is not on. 45030 // eslint-disable-next-lined no-fallthrough 45031 45032 default: 45033 { 45034 if (child.elementType === element.type || ( // Keep this check inline so it only runs on the false path: 45035 isCompatibleFamilyForHotReloading(child, element) )) { 45036 deleteRemainingChildren(returnFiber, child.sibling); 45037 45038 var _existing3 = useFiber(child, element.props); 45039 45040 _existing3.ref = coerceRef(returnFiber, child, element); 45041 _existing3.return = returnFiber; 45042 45043 { 45044 _existing3._debugSource = element._source; 45045 _existing3._debugOwner = element._owner; 45046 } 45047 45048 return _existing3; 45049 } 45050 45051 break; 45052 } 45053 } // Didn't match. 45054 45055 45056 deleteRemainingChildren(returnFiber, child); 45057 break; 45058 } else { 45059 deleteChild(returnFiber, child); 45060 } 45061 45062 child = child.sibling; 45063 } 45064 45065 if (element.type === REACT_FRAGMENT_TYPE) { 45066 var created = createFiberFromFragment(element.props.children, returnFiber.mode, lanes, element.key); 45067 created.return = returnFiber; 45068 return created; 45069 } else { 45070 var _created4 = createFiberFromElement(element, returnFiber.mode, lanes); 45071 45072 _created4.ref = coerceRef(returnFiber, currentFirstChild, element); 45073 _created4.return = returnFiber; 45074 return _created4; 45075 } 45076 } 45077 45078 function reconcileSinglePortal(returnFiber, currentFirstChild, portal, lanes) { 45079 var key = portal.key; 45080 var child = currentFirstChild; 45081 45082 while (child !== null) { 45083 // TODO: If key === null and child.key === null, then this only applies to 45084 // the first item in the list. 45085 if (child.key === key) { 45086 if (child.tag === HostPortal && child.stateNode.containerInfo === portal.containerInfo && child.stateNode.implementation === portal.implementation) { 45087 deleteRemainingChildren(returnFiber, child.sibling); 45088 var existing = useFiber(child, portal.children || []); 45089 existing.return = returnFiber; 45090 return existing; 45091 } else { 45092 deleteRemainingChildren(returnFiber, child); 45093 break; 45094 } 45095 } else { 45096 deleteChild(returnFiber, child); 45097 } 45098 45099 child = child.sibling; 45100 } 45101 45102 var created = createFiberFromPortal(portal, returnFiber.mode, lanes); 45103 created.return = returnFiber; 45104 return created; 45105 } // This API will tag the children with the side-effect of the reconciliation 45106 // itself. They will be added to the side-effect list as we pass through the 45107 // children and the parent. 45108 45109 45110 function reconcileChildFibers(returnFiber, currentFirstChild, newChild, lanes) { 45111 // This function is not recursive. 45112 // If the top level item is an array, we treat it as a set of children, 45113 // not as a fragment. Nested arrays on the other hand will be treated as 45114 // fragment nodes. Recursion happens at the normal flow. 45115 // Handle top level unkeyed fragments as if they were arrays. 45116 // This leads to an ambiguity between <>{[...]}</> and <>...</>. 45117 // We treat the ambiguous cases above the same. 45118 var isUnkeyedTopLevelFragment = typeof newChild === 'object' && newChild !== null && newChild.type === REACT_FRAGMENT_TYPE && newChild.key === null; 45119 45120 if (isUnkeyedTopLevelFragment) { 45121 newChild = newChild.props.children; 45122 } // Handle object types 45123 45124 45125 var isObject = typeof newChild === 'object' && newChild !== null; 45126 45127 if (isObject) { 45128 switch (newChild.$$typeof) { 45129 case REACT_ELEMENT_TYPE: 45130 return placeSingleChild(reconcileSingleElement(returnFiber, currentFirstChild, newChild, lanes)); 45131 45132 case REACT_PORTAL_TYPE: 45133 return placeSingleChild(reconcileSinglePortal(returnFiber, currentFirstChild, newChild, lanes)); 45134 45135 } 45136 } 45137 45138 if (typeof newChild === 'string' || typeof newChild === 'number') { 45139 return placeSingleChild(reconcileSingleTextNode(returnFiber, currentFirstChild, '' + newChild, lanes)); 45140 } 45141 45142 if (isArray$1(newChild)) { 45143 return reconcileChildrenArray(returnFiber, currentFirstChild, newChild, lanes); 45144 } 45145 45146 if (getIteratorFn(newChild)) { 45147 return reconcileChildrenIterator(returnFiber, currentFirstChild, newChild, lanes); 45148 } 45149 45150 if (isObject) { 45151 throwOnInvalidObjectType(returnFiber, newChild); 45152 } 45153 45154 { 45155 if (typeof newChild === 'function') { 45156 warnOnFunctionType(returnFiber); 45157 } 45158 } 45159 45160 if (typeof newChild === 'undefined' && !isUnkeyedTopLevelFragment) { 45161 // If the new child is undefined, and the return fiber is a composite 45162 // component, throw an error. If Fiber return types are disabled, 45163 // we already threw above. 45164 switch (returnFiber.tag) { 45165 case ClassComponent: 45166 { 45167 { 45168 var instance = returnFiber.stateNode; 45169 45170 if (instance.render._isMockFunction) { 45171 // We allow auto-mocks to proceed as if they're returning null. 45172 break; 45173 } 45174 } 45175 } 45176 // Intentionally fall through to the next case, which handles both 45177 // functions and classes 45178 // eslint-disable-next-lined no-fallthrough 45179 45180 case Block: 45181 case FunctionComponent: 45182 case ForwardRef: 45183 case SimpleMemoComponent: 45184 { 45185 { 45186 { 45187 throw Error( (getComponentName(returnFiber.type) || 'Component') + "(...): Nothing was returned from render. This usually means a return statement is missing. Or, to render nothing, return null." ); 45188 } 45189 } 45190 } 45191 } 45192 } // Remaining cases are all treated as empty. 45193 45194 45195 return deleteRemainingChildren(returnFiber, currentFirstChild); 45196 } 45197 45198 return reconcileChildFibers; 45199} 45200 45201var reconcileChildFibers = ChildReconciler(true); 45202var mountChildFibers = ChildReconciler(false); 45203function cloneChildFibers(current, workInProgress) { 45204 if (!(current === null || workInProgress.child === current.child)) { 45205 { 45206 throw Error( "Resuming work not yet implemented." ); 45207 } 45208 } 45209 45210 if (workInProgress.child === null) { 45211 return; 45212 } 45213 45214 var currentChild = workInProgress.child; 45215 var newChild = createWorkInProgress(currentChild, currentChild.pendingProps); 45216 workInProgress.child = newChild; 45217 newChild.return = workInProgress; 45218 45219 while (currentChild.sibling !== null) { 45220 currentChild = currentChild.sibling; 45221 newChild = newChild.sibling = createWorkInProgress(currentChild, currentChild.pendingProps); 45222 newChild.return = workInProgress; 45223 } 45224 45225 newChild.sibling = null; 45226} // Reset a workInProgress child set to prepare it for a second pass. 45227 45228function resetChildFibers(workInProgress, lanes) { 45229 var child = workInProgress.child; 45230 45231 while (child !== null) { 45232 resetWorkInProgress(child, lanes); 45233 child = child.sibling; 45234 } 45235} 45236 45237var NO_CONTEXT = {}; 45238var contextStackCursor$1 = createCursor(NO_CONTEXT); 45239var contextFiberStackCursor = createCursor(NO_CONTEXT); 45240var rootInstanceStackCursor = createCursor(NO_CONTEXT); 45241 45242function requiredContext(c) { 45243 if (!(c !== NO_CONTEXT)) { 45244 { 45245 throw Error( "Expected host context to exist. This error is likely caused by a bug in React. Please file an issue." ); 45246 } 45247 } 45248 45249 return c; 45250} 45251 45252function getRootHostContainer() { 45253 var rootInstance = requiredContext(rootInstanceStackCursor.current); 45254 return rootInstance; 45255} 45256 45257function pushHostContainer(fiber, nextRootInstance) { 45258 // Push current root instance onto the stack; 45259 // This allows us to reset root when portals are popped. 45260 push(rootInstanceStackCursor, nextRootInstance, fiber); // Track the context and the Fiber that provided it. 45261 // This enables us to pop only Fibers that provide unique contexts. 45262 45263 push(contextFiberStackCursor, fiber, fiber); // Finally, we need to push the host context to the stack. 45264 // However, we can't just call getRootHostContext() and push it because 45265 // we'd have a different number of entries on the stack depending on 45266 // whether getRootHostContext() throws somewhere in renderer code or not. 45267 // So we push an empty value first. This lets us safely unwind on errors. 45268 45269 push(contextStackCursor$1, NO_CONTEXT, fiber); 45270 var nextRootContext = getRootHostContext(nextRootInstance); // Now that we know this function doesn't throw, replace it. 45271 45272 pop(contextStackCursor$1, fiber); 45273 push(contextStackCursor$1, nextRootContext, fiber); 45274} 45275 45276function popHostContainer(fiber) { 45277 pop(contextStackCursor$1, fiber); 45278 pop(contextFiberStackCursor, fiber); 45279 pop(rootInstanceStackCursor, fiber); 45280} 45281 45282function getHostContext() { 45283 var context = requiredContext(contextStackCursor$1.current); 45284 return context; 45285} 45286 45287function pushHostContext(fiber) { 45288 var rootInstance = requiredContext(rootInstanceStackCursor.current); 45289 var context = requiredContext(contextStackCursor$1.current); 45290 var nextContext = getChildHostContext(context, fiber.type); // Don't push this Fiber's context unless it's unique. 45291 45292 if (context === nextContext) { 45293 return; 45294 } // Track the context and the Fiber that provided it. 45295 // This enables us to pop only Fibers that provide unique contexts. 45296 45297 45298 push(contextFiberStackCursor, fiber, fiber); 45299 push(contextStackCursor$1, nextContext, fiber); 45300} 45301 45302function popHostContext(fiber) { 45303 // Do not pop unless this Fiber provided the current context. 45304 // pushHostContext() only pushes Fibers that provide unique contexts. 45305 if (contextFiberStackCursor.current !== fiber) { 45306 return; 45307 } 45308 45309 pop(contextStackCursor$1, fiber); 45310 pop(contextFiberStackCursor, fiber); 45311} 45312 45313var DefaultSuspenseContext = 0; // The Suspense Context is split into two parts. The lower bits is 45314// inherited deeply down the subtree. The upper bits only affect 45315// this immediate suspense boundary and gets reset each new 45316// boundary or suspense list. 45317 45318var SubtreeSuspenseContextMask = 1; // Subtree Flags: 45319// InvisibleParentSuspenseContext indicates that one of our parent Suspense 45320// boundaries is not currently showing visible main content. 45321// Either because it is already showing a fallback or is not mounted at all. 45322// We can use this to determine if it is desirable to trigger a fallback at 45323// the parent. If not, then we might need to trigger undesirable boundaries 45324// and/or suspend the commit to avoid hiding the parent content. 45325 45326var InvisibleParentSuspenseContext = 1; // Shallow Flags: 45327// ForceSuspenseFallback can be used by SuspenseList to force newly added 45328// items into their fallback state during one of the render passes. 45329 45330var ForceSuspenseFallback = 2; 45331var suspenseStackCursor = createCursor(DefaultSuspenseContext); 45332function hasSuspenseContext(parentContext, flag) { 45333 return (parentContext & flag) !== 0; 45334} 45335function setDefaultShallowSuspenseContext(parentContext) { 45336 return parentContext & SubtreeSuspenseContextMask; 45337} 45338function setShallowSuspenseContext(parentContext, shallowContext) { 45339 return parentContext & SubtreeSuspenseContextMask | shallowContext; 45340} 45341function addSubtreeSuspenseContext(parentContext, subtreeContext) { 45342 return parentContext | subtreeContext; 45343} 45344function pushSuspenseContext(fiber, newContext) { 45345 push(suspenseStackCursor, newContext, fiber); 45346} 45347function popSuspenseContext(fiber) { 45348 pop(suspenseStackCursor, fiber); 45349} 45350 45351function shouldCaptureSuspense(workInProgress, hasInvisibleParent) { 45352 // If it was the primary children that just suspended, capture and render the 45353 // fallback. Otherwise, don't capture and bubble to the next boundary. 45354 var nextState = workInProgress.memoizedState; 45355 45356 if (nextState !== null) { 45357 if (nextState.dehydrated !== null) { 45358 // A dehydrated boundary always captures. 45359 return true; 45360 } 45361 45362 return false; 45363 } 45364 45365 var props = workInProgress.memoizedProps; // In order to capture, the Suspense component must have a fallback prop. 45366 45367 if (props.fallback === undefined) { 45368 return false; 45369 } // Regular boundaries always capture. 45370 45371 45372 if (props.unstable_avoidThisFallback !== true) { 45373 return true; 45374 } // If it's a boundary we should avoid, then we prefer to bubble up to the 45375 // parent boundary if it is currently invisible. 45376 45377 45378 if (hasInvisibleParent) { 45379 return false; 45380 } // If the parent is not able to handle it, we must handle it. 45381 45382 45383 return true; 45384} 45385function findFirstSuspended(row) { 45386 var node = row; 45387 45388 while (node !== null) { 45389 if (node.tag === SuspenseComponent) { 45390 var state = node.memoizedState; 45391 45392 if (state !== null) { 45393 var dehydrated = state.dehydrated; 45394 45395 if (dehydrated === null || isSuspenseInstancePending(dehydrated) || isSuspenseInstanceFallback(dehydrated)) { 45396 return node; 45397 } 45398 } 45399 } else if (node.tag === SuspenseListComponent && // revealOrder undefined can't be trusted because it don't 45400 // keep track of whether it suspended or not. 45401 node.memoizedProps.revealOrder !== undefined) { 45402 var didSuspend = (node.flags & DidCapture) !== NoFlags; 45403 45404 if (didSuspend) { 45405 return node; 45406 } 45407 } else if (node.child !== null) { 45408 node.child.return = node; 45409 node = node.child; 45410 continue; 45411 } 45412 45413 if (node === row) { 45414 return null; 45415 } 45416 45417 while (node.sibling === null) { 45418 if (node.return === null || node.return === row) { 45419 return null; 45420 } 45421 45422 node = node.return; 45423 } 45424 45425 node.sibling.return = node.return; 45426 node = node.sibling; 45427 } 45428 45429 return null; 45430} 45431 45432var NoFlags$1 = 45433/* */ 454340; // Represents whether effect should fire. 45435 45436var HasEffect = 45437/* */ 454381; // Represents the phase in which the effect (not the clean-up) fires. 45439 45440var Layout = 45441/* */ 454422; 45443var Passive$1 = 45444/* */ 454454; 45446 45447// This may have been an insertion or a hydration. 45448 45449var hydrationParentFiber = null; 45450var nextHydratableInstance = null; 45451var isHydrating = false; 45452 45453function enterHydrationState(fiber) { 45454 45455 var parentInstance = fiber.stateNode.containerInfo; 45456 nextHydratableInstance = getFirstHydratableChild(parentInstance); 45457 hydrationParentFiber = fiber; 45458 isHydrating = true; 45459 return true; 45460} 45461 45462function deleteHydratableInstance(returnFiber, instance) { 45463 { 45464 switch (returnFiber.tag) { 45465 case HostRoot: 45466 didNotHydrateContainerInstance(returnFiber.stateNode.containerInfo, instance); 45467 break; 45468 45469 case HostComponent: 45470 didNotHydrateInstance(returnFiber.type, returnFiber.memoizedProps, returnFiber.stateNode, instance); 45471 break; 45472 } 45473 } 45474 45475 var childToDelete = createFiberFromHostInstanceForDeletion(); 45476 childToDelete.stateNode = instance; 45477 childToDelete.return = returnFiber; 45478 childToDelete.flags = Deletion; // This might seem like it belongs on progressedFirstDeletion. However, 45479 // these children are not part of the reconciliation list of children. 45480 // Even if we abort and rereconcile the children, that will try to hydrate 45481 // again and the nodes are still in the host tree so these will be 45482 // recreated. 45483 45484 if (returnFiber.lastEffect !== null) { 45485 returnFiber.lastEffect.nextEffect = childToDelete; 45486 returnFiber.lastEffect = childToDelete; 45487 } else { 45488 returnFiber.firstEffect = returnFiber.lastEffect = childToDelete; 45489 } 45490} 45491 45492function insertNonHydratedInstance(returnFiber, fiber) { 45493 fiber.flags = fiber.flags & ~Hydrating | Placement; 45494 45495 { 45496 switch (returnFiber.tag) { 45497 case HostRoot: 45498 { 45499 var parentContainer = returnFiber.stateNode.containerInfo; 45500 45501 switch (fiber.tag) { 45502 case HostComponent: 45503 var type = fiber.type; 45504 var props = fiber.pendingProps; 45505 didNotFindHydratableContainerInstance(parentContainer, type); 45506 break; 45507 45508 case HostText: 45509 var text = fiber.pendingProps; 45510 didNotFindHydratableContainerTextInstance(parentContainer, text); 45511 break; 45512 } 45513 45514 break; 45515 } 45516 45517 case HostComponent: 45518 { 45519 var parentType = returnFiber.type; 45520 var parentProps = returnFiber.memoizedProps; 45521 var parentInstance = returnFiber.stateNode; 45522 45523 switch (fiber.tag) { 45524 case HostComponent: 45525 var _type = fiber.type; 45526 var _props = fiber.pendingProps; 45527 didNotFindHydratableInstance(parentType, parentProps, parentInstance, _type); 45528 break; 45529 45530 case HostText: 45531 var _text = fiber.pendingProps; 45532 didNotFindHydratableTextInstance(parentType, parentProps, parentInstance, _text); 45533 break; 45534 45535 case SuspenseComponent: 45536 didNotFindHydratableSuspenseInstance(parentType, parentProps); 45537 break; 45538 } 45539 45540 break; 45541 } 45542 45543 default: 45544 return; 45545 } 45546 } 45547} 45548 45549function tryHydrate(fiber, nextInstance) { 45550 switch (fiber.tag) { 45551 case HostComponent: 45552 { 45553 var type = fiber.type; 45554 var props = fiber.pendingProps; 45555 var instance = canHydrateInstance(nextInstance, type); 45556 45557 if (instance !== null) { 45558 fiber.stateNode = instance; 45559 return true; 45560 } 45561 45562 return false; 45563 } 45564 45565 case HostText: 45566 { 45567 var text = fiber.pendingProps; 45568 var textInstance = canHydrateTextInstance(nextInstance, text); 45569 45570 if (textInstance !== null) { 45571 fiber.stateNode = textInstance; 45572 return true; 45573 } 45574 45575 return false; 45576 } 45577 45578 case SuspenseComponent: 45579 { 45580 45581 return false; 45582 } 45583 45584 default: 45585 return false; 45586 } 45587} 45588 45589function tryToClaimNextHydratableInstance(fiber) { 45590 if (!isHydrating) { 45591 return; 45592 } 45593 45594 var nextInstance = nextHydratableInstance; 45595 45596 if (!nextInstance) { 45597 // Nothing to hydrate. Make it an insertion. 45598 insertNonHydratedInstance(hydrationParentFiber, fiber); 45599 isHydrating = false; 45600 hydrationParentFiber = fiber; 45601 return; 45602 } 45603 45604 var firstAttemptedInstance = nextInstance; 45605 45606 if (!tryHydrate(fiber, nextInstance)) { 45607 // If we can't hydrate this instance let's try the next one. 45608 // We use this as a heuristic. It's based on intuition and not data so it 45609 // might be flawed or unnecessary. 45610 nextInstance = getNextHydratableSibling(firstAttemptedInstance); 45611 45612 if (!nextInstance || !tryHydrate(fiber, nextInstance)) { 45613 // Nothing to hydrate. Make it an insertion. 45614 insertNonHydratedInstance(hydrationParentFiber, fiber); 45615 isHydrating = false; 45616 hydrationParentFiber = fiber; 45617 return; 45618 } // We matched the next one, we'll now assume that the first one was 45619 // superfluous and we'll delete it. Since we can't eagerly delete it 45620 // we'll have to schedule a deletion. To do that, this node needs a dummy 45621 // fiber associated with it. 45622 45623 45624 deleteHydratableInstance(hydrationParentFiber, firstAttemptedInstance); 45625 } 45626 45627 hydrationParentFiber = fiber; 45628 nextHydratableInstance = getFirstHydratableChild(nextInstance); 45629} 45630 45631function prepareToHydrateHostInstance(fiber, rootContainerInstance, hostContext) { 45632 45633 var instance = fiber.stateNode; 45634 var updatePayload = hydrateInstance(instance, fiber.type, fiber.memoizedProps, rootContainerInstance, hostContext, fiber); // TODO: Type this specific to this type of component. 45635 45636 fiber.updateQueue = updatePayload; // If the update payload indicates that there is a change or if there 45637 // is a new ref we mark this as an update. 45638 45639 if (updatePayload !== null) { 45640 return true; 45641 } 45642 45643 return false; 45644} 45645 45646function prepareToHydrateHostTextInstance(fiber) { 45647 45648 var textInstance = fiber.stateNode; 45649 var textContent = fiber.memoizedProps; 45650 var shouldUpdate = hydrateTextInstance(textInstance, textContent, fiber); 45651 45652 { 45653 if (shouldUpdate) { 45654 // We assume that prepareToHydrateHostTextInstance is called in a context where the 45655 // hydration parent is the parent host component of this host text. 45656 var returnFiber = hydrationParentFiber; 45657 45658 if (returnFiber !== null) { 45659 switch (returnFiber.tag) { 45660 case HostRoot: 45661 { 45662 var parentContainer = returnFiber.stateNode.containerInfo; 45663 didNotMatchHydratedContainerTextInstance(parentContainer, textInstance, textContent); 45664 break; 45665 } 45666 45667 case HostComponent: 45668 { 45669 var parentType = returnFiber.type; 45670 var parentProps = returnFiber.memoizedProps; 45671 var parentInstance = returnFiber.stateNode; 45672 didNotMatchHydratedTextInstance(parentType, parentProps, parentInstance, textInstance, textContent); 45673 break; 45674 } 45675 } 45676 } 45677 } 45678 } 45679 45680 return shouldUpdate; 45681} 45682 45683function skipPastDehydratedSuspenseInstance(fiber) { 45684 45685 var suspenseState = fiber.memoizedState; 45686 var suspenseInstance = suspenseState !== null ? suspenseState.dehydrated : null; 45687 45688 if (!suspenseInstance) { 45689 { 45690 throw Error( "Expected to have a hydrated suspense instance. This error is likely caused by a bug in React. Please file an issue." ); 45691 } 45692 } 45693 45694 return getNextHydratableInstanceAfterSuspenseInstance(suspenseInstance); 45695} 45696 45697function popToNextHostParent(fiber) { 45698 var parent = fiber.return; 45699 45700 while (parent !== null && parent.tag !== HostComponent && parent.tag !== HostRoot && parent.tag !== SuspenseComponent) { 45701 parent = parent.return; 45702 } 45703 45704 hydrationParentFiber = parent; 45705} 45706 45707function popHydrationState(fiber) { 45708 45709 if (fiber !== hydrationParentFiber) { 45710 // We're deeper than the current hydration context, inside an inserted 45711 // tree. 45712 return false; 45713 } 45714 45715 if (!isHydrating) { 45716 // If we're not currently hydrating but we're in a hydration context, then 45717 // we were an insertion and now need to pop up reenter hydration of our 45718 // siblings. 45719 popToNextHostParent(fiber); 45720 isHydrating = true; 45721 return false; 45722 } 45723 45724 var type = fiber.type; // If we have any remaining hydratable nodes, we need to delete them now. 45725 // We only do this deeper than head and body since they tend to have random 45726 // other nodes in them. We also ignore components with pure text content in 45727 // side of them. 45728 // TODO: Better heuristic. 45729 45730 if (fiber.tag !== HostComponent || type !== 'head' && type !== 'body' && !shouldSetTextContent(type, fiber.memoizedProps)) { 45731 var nextInstance = nextHydratableInstance; 45732 45733 while (nextInstance) { 45734 deleteHydratableInstance(fiber, nextInstance); 45735 nextInstance = getNextHydratableSibling(nextInstance); 45736 } 45737 } 45738 45739 popToNextHostParent(fiber); 45740 45741 if (fiber.tag === SuspenseComponent) { 45742 nextHydratableInstance = skipPastDehydratedSuspenseInstance(fiber); 45743 } else { 45744 nextHydratableInstance = hydrationParentFiber ? getNextHydratableSibling(fiber.stateNode) : null; 45745 } 45746 45747 return true; 45748} 45749 45750function resetHydrationState() { 45751 45752 hydrationParentFiber = null; 45753 nextHydratableInstance = null; 45754 isHydrating = false; 45755} 45756 45757function getIsHydrating() { 45758 return isHydrating; 45759} 45760 45761// and should be reset before starting a new render. 45762// This tracks which mutable sources need to be reset after a render. 45763 45764var workInProgressSources = []; 45765var rendererSigil$1; 45766 45767{ 45768 // Used to detect multiple renderers using the same mutable source. 45769 rendererSigil$1 = {}; 45770} 45771 45772function markSourceAsDirty(mutableSource) { 45773 workInProgressSources.push(mutableSource); 45774} 45775function resetWorkInProgressVersions() { 45776 for (var i = 0; i < workInProgressSources.length; i++) { 45777 var mutableSource = workInProgressSources[i]; 45778 45779 { 45780 mutableSource._workInProgressVersionPrimary = null; 45781 } 45782 } 45783 45784 workInProgressSources.length = 0; 45785} 45786function getWorkInProgressVersion(mutableSource) { 45787 { 45788 return mutableSource._workInProgressVersionPrimary; 45789 } 45790} 45791function setWorkInProgressVersion(mutableSource, version) { 45792 { 45793 mutableSource._workInProgressVersionPrimary = version; 45794 } 45795 45796 workInProgressSources.push(mutableSource); 45797} 45798function warnAboutMultipleRenderersDEV(mutableSource) { 45799 { 45800 { 45801 if (mutableSource._currentPrimaryRenderer == null) { 45802 mutableSource._currentPrimaryRenderer = rendererSigil$1; 45803 } else if (mutableSource._currentPrimaryRenderer !== rendererSigil$1) { 45804 error('Detected multiple renderers concurrently rendering the ' + 'same mutable source. This is currently unsupported.'); 45805 } 45806 } 45807 } 45808} // Eager reads the version of a mutable source and stores it on the root. 45809 45810var ReactCurrentDispatcher$1 = ReactSharedInternals.ReactCurrentDispatcher, 45811 ReactCurrentBatchConfig$1 = ReactSharedInternals.ReactCurrentBatchConfig; 45812var didWarnAboutMismatchedHooksForComponent; 45813var didWarnAboutUseOpaqueIdentifier; 45814 45815{ 45816 didWarnAboutUseOpaqueIdentifier = {}; 45817 didWarnAboutMismatchedHooksForComponent = new Set(); 45818} 45819 45820// These are set right before calling the component. 45821var renderLanes = NoLanes; // The work-in-progress fiber. I've named it differently to distinguish it from 45822// the work-in-progress hook. 45823 45824var currentlyRenderingFiber$1 = null; // Hooks are stored as a linked list on the fiber's memoizedState field. The 45825// current hook list is the list that belongs to the current fiber. The 45826// work-in-progress hook list is a new list that will be added to the 45827// work-in-progress fiber. 45828 45829var currentHook = null; 45830var workInProgressHook = null; // Whether an update was scheduled at any point during the render phase. This 45831// does not get reset if we do another render pass; only when we're completely 45832// finished evaluating this component. This is an optimization so we know 45833// whether we need to clear render phase updates after a throw. 45834 45835var didScheduleRenderPhaseUpdate = false; // Where an update was scheduled only during the current render pass. This 45836// gets reset after each attempt. 45837// TODO: Maybe there's some way to consolidate this with 45838// `didScheduleRenderPhaseUpdate`. Or with `numberOfReRenders`. 45839 45840var didScheduleRenderPhaseUpdateDuringThisPass = false; 45841var RE_RENDER_LIMIT = 25; // In DEV, this is the name of the currently executing primitive hook 45842 45843var currentHookNameInDev = null; // In DEV, this list ensures that hooks are called in the same order between renders. 45844// The list stores the order of hooks used during the initial render (mount). 45845// Subsequent renders (updates) reference this list. 45846 45847var hookTypesDev = null; 45848var hookTypesUpdateIndexDev = -1; // In DEV, this tracks whether currently rendering component needs to ignore 45849// the dependencies for Hooks that need them (e.g. useEffect or useMemo). 45850// When true, such Hooks will always be "remounted". Only used during hot reload. 45851 45852var ignorePreviousDependencies = false; 45853 45854function mountHookTypesDev() { 45855 { 45856 var hookName = currentHookNameInDev; 45857 45858 if (hookTypesDev === null) { 45859 hookTypesDev = [hookName]; 45860 } else { 45861 hookTypesDev.push(hookName); 45862 } 45863 } 45864} 45865 45866function updateHookTypesDev() { 45867 { 45868 var hookName = currentHookNameInDev; 45869 45870 if (hookTypesDev !== null) { 45871 hookTypesUpdateIndexDev++; 45872 45873 if (hookTypesDev[hookTypesUpdateIndexDev] !== hookName) { 45874 warnOnHookMismatchInDev(hookName); 45875 } 45876 } 45877 } 45878} 45879 45880function checkDepsAreArrayDev(deps) { 45881 { 45882 if (deps !== undefined && deps !== null && !Array.isArray(deps)) { 45883 // Verify deps, but only on mount to avoid extra checks. 45884 // It's unlikely their type would change as usually you define them inline. 45885 error('%s received a final argument that is not an array (instead, received `%s`). When ' + 'specified, the final argument must be an array.', currentHookNameInDev, typeof deps); 45886 } 45887 } 45888} 45889 45890function warnOnHookMismatchInDev(currentHookName) { 45891 { 45892 var componentName = getComponentName(currentlyRenderingFiber$1.type); 45893 45894 if (!didWarnAboutMismatchedHooksForComponent.has(componentName)) { 45895 didWarnAboutMismatchedHooksForComponent.add(componentName); 45896 45897 if (hookTypesDev !== null) { 45898 var table = ''; 45899 var secondColumnStart = 30; 45900 45901 for (var i = 0; i <= hookTypesUpdateIndexDev; i++) { 45902 var oldHookName = hookTypesDev[i]; 45903 var newHookName = i === hookTypesUpdateIndexDev ? currentHookName : oldHookName; 45904 var row = i + 1 + ". " + oldHookName; // Extra space so second column lines up 45905 // lol @ IE not supporting String#repeat 45906 45907 while (row.length < secondColumnStart) { 45908 row += ' '; 45909 } 45910 45911 row += newHookName + '\n'; 45912 table += row; 45913 } 45914 45915 error('React has detected a change in the order of Hooks called by %s. ' + 'This will lead to bugs and errors if not fixed. ' + 'For more information, read the Rules of Hooks: https://reactjs.org/link/rules-of-hooks\n\n' + ' Previous render Next render\n' + ' ------------------------------------------------------\n' + '%s' + ' ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^\n', componentName, table); 45916 } 45917 } 45918 } 45919} 45920 45921function throwInvalidHookError() { 45922 { 45923 { 45924 throw Error( "Invalid hook call. Hooks can only be called inside of the body of a function component. This could happen for one of the following reasons:\n1. You might have mismatching versions of React and the renderer (such as React DOM)\n2. You might be breaking the Rules of Hooks\n3. You might have more than one copy of React in the same app\nSee https://reactjs.org/link/invalid-hook-call for tips about how to debug and fix this problem." ); 45925 } 45926 } 45927} 45928 45929function areHookInputsEqual(nextDeps, prevDeps) { 45930 { 45931 if (ignorePreviousDependencies) { 45932 // Only true when this component is being hot reloaded. 45933 return false; 45934 } 45935 } 45936 45937 if (prevDeps === null) { 45938 { 45939 error('%s received a final argument during this render, but not during ' + 'the previous render. Even though the final argument is optional, ' + 'its type cannot change between renders.', currentHookNameInDev); 45940 } 45941 45942 return false; 45943 } 45944 45945 { 45946 // Don't bother comparing lengths in prod because these arrays should be 45947 // passed inline. 45948 if (nextDeps.length !== prevDeps.length) { 45949 error('The final argument passed to %s changed size between renders. The ' + 'order and size of this array must remain constant.\n\n' + 'Previous: %s\n' + 'Incoming: %s', currentHookNameInDev, "[" + prevDeps.join(', ') + "]", "[" + nextDeps.join(', ') + "]"); 45950 } 45951 } 45952 45953 for (var i = 0; i < prevDeps.length && i < nextDeps.length; i++) { 45954 if (objectIs(nextDeps[i], prevDeps[i])) { 45955 continue; 45956 } 45957 45958 return false; 45959 } 45960 45961 return true; 45962} 45963 45964function renderWithHooks(current, workInProgress, Component, props, secondArg, nextRenderLanes) { 45965 renderLanes = nextRenderLanes; 45966 currentlyRenderingFiber$1 = workInProgress; 45967 45968 { 45969 hookTypesDev = current !== null ? current._debugHookTypes : null; 45970 hookTypesUpdateIndexDev = -1; // Used for hot reloading: 45971 45972 ignorePreviousDependencies = current !== null && current.type !== workInProgress.type; 45973 } 45974 45975 workInProgress.memoizedState = null; 45976 workInProgress.updateQueue = null; 45977 workInProgress.lanes = NoLanes; // The following should have already been reset 45978 // currentHook = null; 45979 // workInProgressHook = null; 45980 // didScheduleRenderPhaseUpdate = false; 45981 // TODO Warn if no hooks are used at all during mount, then some are used during update. 45982 // Currently we will identify the update render as a mount because memoizedState === null. 45983 // This is tricky because it's valid for certain types of components (e.g. React.lazy) 45984 // Using memoizedState to differentiate between mount/update only works if at least one stateful hook is used. 45985 // Non-stateful hooks (e.g. context) don't get added to memoizedState, 45986 // so memoizedState would be null during updates and mounts. 45987 45988 { 45989 if (current !== null && current.memoizedState !== null) { 45990 ReactCurrentDispatcher$1.current = HooksDispatcherOnUpdateInDEV; 45991 } else if (hookTypesDev !== null) { 45992 // This dispatcher handles an edge case where a component is updating, 45993 // but no stateful hooks have been used. 45994 // We want to match the production code behavior (which will use HooksDispatcherOnMount), 45995 // but with the extra DEV validation to ensure hooks ordering hasn't changed. 45996 // This dispatcher does that. 45997 ReactCurrentDispatcher$1.current = HooksDispatcherOnMountWithHookTypesInDEV; 45998 } else { 45999 ReactCurrentDispatcher$1.current = HooksDispatcherOnMountInDEV; 46000 } 46001 } 46002 46003 var children = Component(props, secondArg); // Check if there was a render phase update 46004 46005 if (didScheduleRenderPhaseUpdateDuringThisPass) { 46006 // Keep rendering in a loop for as long as render phase updates continue to 46007 // be scheduled. Use a counter to prevent infinite loops. 46008 var numberOfReRenders = 0; 46009 46010 do { 46011 didScheduleRenderPhaseUpdateDuringThisPass = false; 46012 46013 if (!(numberOfReRenders < RE_RENDER_LIMIT)) { 46014 { 46015 throw Error( "Too many re-renders. React limits the number of renders to prevent an infinite loop." ); 46016 } 46017 } 46018 46019 numberOfReRenders += 1; 46020 46021 { 46022 // Even when hot reloading, allow dependencies to stabilize 46023 // after first render to prevent infinite render phase updates. 46024 ignorePreviousDependencies = false; 46025 } // Start over from the beginning of the list 46026 46027 46028 currentHook = null; 46029 workInProgressHook = null; 46030 workInProgress.updateQueue = null; 46031 46032 { 46033 // Also validate hook order for cascading updates. 46034 hookTypesUpdateIndexDev = -1; 46035 } 46036 46037 ReactCurrentDispatcher$1.current = HooksDispatcherOnRerenderInDEV ; 46038 children = Component(props, secondArg); 46039 } while (didScheduleRenderPhaseUpdateDuringThisPass); 46040 } // We can assume the previous dispatcher is always this one, since we set it 46041 // at the beginning of the render phase and there's no re-entrancy. 46042 46043 46044 ReactCurrentDispatcher$1.current = ContextOnlyDispatcher; 46045 46046 { 46047 workInProgress._debugHookTypes = hookTypesDev; 46048 } // This check uses currentHook so that it works the same in DEV and prod bundles. 46049 // hookTypesDev could catch more cases (e.g. context) but only in DEV bundles. 46050 46051 46052 var didRenderTooFewHooks = currentHook !== null && currentHook.next !== null; 46053 renderLanes = NoLanes; 46054 currentlyRenderingFiber$1 = null; 46055 currentHook = null; 46056 workInProgressHook = null; 46057 46058 { 46059 currentHookNameInDev = null; 46060 hookTypesDev = null; 46061 hookTypesUpdateIndexDev = -1; 46062 } 46063 46064 didScheduleRenderPhaseUpdate = false; 46065 46066 if (!!didRenderTooFewHooks) { 46067 { 46068 throw Error( "Rendered fewer hooks than expected. This may be caused by an accidental early return statement." ); 46069 } 46070 } 46071 46072 return children; 46073} 46074function bailoutHooks(current, workInProgress, lanes) { 46075 workInProgress.updateQueue = current.updateQueue; 46076 workInProgress.flags &= ~(Passive | Update); 46077 current.lanes = removeLanes(current.lanes, lanes); 46078} 46079function resetHooksAfterThrow() { 46080 // We can assume the previous dispatcher is always this one, since we set it 46081 // at the beginning of the render phase and there's no re-entrancy. 46082 ReactCurrentDispatcher$1.current = ContextOnlyDispatcher; 46083 46084 if (didScheduleRenderPhaseUpdate) { 46085 // There were render phase updates. These are only valid for this render 46086 // phase, which we are now aborting. Remove the updates from the queues so 46087 // they do not persist to the next render. Do not remove updates from hooks 46088 // that weren't processed. 46089 // 46090 // Only reset the updates from the queue if it has a clone. If it does 46091 // not have a clone, that means it wasn't processed, and the updates were 46092 // scheduled before we entered the render phase. 46093 var hook = currentlyRenderingFiber$1.memoizedState; 46094 46095 while (hook !== null) { 46096 var queue = hook.queue; 46097 46098 if (queue !== null) { 46099 queue.pending = null; 46100 } 46101 46102 hook = hook.next; 46103 } 46104 46105 didScheduleRenderPhaseUpdate = false; 46106 } 46107 46108 renderLanes = NoLanes; 46109 currentlyRenderingFiber$1 = null; 46110 currentHook = null; 46111 workInProgressHook = null; 46112 46113 { 46114 hookTypesDev = null; 46115 hookTypesUpdateIndexDev = -1; 46116 currentHookNameInDev = null; 46117 isUpdatingOpaqueValueInRenderPhase = false; 46118 } 46119 46120 didScheduleRenderPhaseUpdateDuringThisPass = false; 46121} 46122 46123function mountWorkInProgressHook() { 46124 var hook = { 46125 memoizedState: null, 46126 baseState: null, 46127 baseQueue: null, 46128 queue: null, 46129 next: null 46130 }; 46131 46132 if (workInProgressHook === null) { 46133 // This is the first hook in the list 46134 currentlyRenderingFiber$1.memoizedState = workInProgressHook = hook; 46135 } else { 46136 // Append to the end of the list 46137 workInProgressHook = workInProgressHook.next = hook; 46138 } 46139 46140 return workInProgressHook; 46141} 46142 46143function updateWorkInProgressHook() { 46144 // This function is used both for updates and for re-renders triggered by a 46145 // render phase update. It assumes there is either a current hook we can 46146 // clone, or a work-in-progress hook from a previous render pass that we can 46147 // use as a base. When we reach the end of the base list, we must switch to 46148 // the dispatcher used for mounts. 46149 var nextCurrentHook; 46150 46151 if (currentHook === null) { 46152 var current = currentlyRenderingFiber$1.alternate; 46153 46154 if (current !== null) { 46155 nextCurrentHook = current.memoizedState; 46156 } else { 46157 nextCurrentHook = null; 46158 } 46159 } else { 46160 nextCurrentHook = currentHook.next; 46161 } 46162 46163 var nextWorkInProgressHook; 46164 46165 if (workInProgressHook === null) { 46166 nextWorkInProgressHook = currentlyRenderingFiber$1.memoizedState; 46167 } else { 46168 nextWorkInProgressHook = workInProgressHook.next; 46169 } 46170 46171 if (nextWorkInProgressHook !== null) { 46172 // There's already a work-in-progress. Reuse it. 46173 workInProgressHook = nextWorkInProgressHook; 46174 nextWorkInProgressHook = workInProgressHook.next; 46175 currentHook = nextCurrentHook; 46176 } else { 46177 // Clone from the current hook. 46178 if (!(nextCurrentHook !== null)) { 46179 { 46180 throw Error( "Rendered more hooks than during the previous render." ); 46181 } 46182 } 46183 46184 currentHook = nextCurrentHook; 46185 var newHook = { 46186 memoizedState: currentHook.memoizedState, 46187 baseState: currentHook.baseState, 46188 baseQueue: currentHook.baseQueue, 46189 queue: currentHook.queue, 46190 next: null 46191 }; 46192 46193 if (workInProgressHook === null) { 46194 // This is the first hook in the list. 46195 currentlyRenderingFiber$1.memoizedState = workInProgressHook = newHook; 46196 } else { 46197 // Append to the end of the list. 46198 workInProgressHook = workInProgressHook.next = newHook; 46199 } 46200 } 46201 46202 return workInProgressHook; 46203} 46204 46205function createFunctionComponentUpdateQueue() { 46206 return { 46207 lastEffect: null 46208 }; 46209} 46210 46211function basicStateReducer(state, action) { 46212 // $FlowFixMe: Flow doesn't like mixed types 46213 return typeof action === 'function' ? action(state) : action; 46214} 46215 46216function mountReducer(reducer, initialArg, init) { 46217 var hook = mountWorkInProgressHook(); 46218 var initialState; 46219 46220 if (init !== undefined) { 46221 initialState = init(initialArg); 46222 } else { 46223 initialState = initialArg; 46224 } 46225 46226 hook.memoizedState = hook.baseState = initialState; 46227 var queue = hook.queue = { 46228 pending: null, 46229 dispatch: null, 46230 lastRenderedReducer: reducer, 46231 lastRenderedState: initialState 46232 }; 46233 var dispatch = queue.dispatch = dispatchAction.bind(null, currentlyRenderingFiber$1, queue); 46234 return [hook.memoizedState, dispatch]; 46235} 46236 46237function updateReducer(reducer, initialArg, init) { 46238 var hook = updateWorkInProgressHook(); 46239 var queue = hook.queue; 46240 46241 if (!(queue !== null)) { 46242 { 46243 throw Error( "Should have a queue. This is likely a bug in React. Please file an issue." ); 46244 } 46245 } 46246 46247 queue.lastRenderedReducer = reducer; 46248 var current = currentHook; // The last rebase update that is NOT part of the base state. 46249 46250 var baseQueue = current.baseQueue; // The last pending update that hasn't been processed yet. 46251 46252 var pendingQueue = queue.pending; 46253 46254 if (pendingQueue !== null) { 46255 // We have new updates that haven't been processed yet. 46256 // We'll add them to the base queue. 46257 if (baseQueue !== null) { 46258 // Merge the pending queue and the base queue. 46259 var baseFirst = baseQueue.next; 46260 var pendingFirst = pendingQueue.next; 46261 baseQueue.next = pendingFirst; 46262 pendingQueue.next = baseFirst; 46263 } 46264 46265 { 46266 if (current.baseQueue !== baseQueue) { 46267 // Internal invariant that should never happen, but feasibly could in 46268 // the future if we implement resuming, or some form of that. 46269 error('Internal error: Expected work-in-progress queue to be a clone. ' + 'This is a bug in React.'); 46270 } 46271 } 46272 46273 current.baseQueue = baseQueue = pendingQueue; 46274 queue.pending = null; 46275 } 46276 46277 if (baseQueue !== null) { 46278 // We have a queue to process. 46279 var first = baseQueue.next; 46280 var newState = current.baseState; 46281 var newBaseState = null; 46282 var newBaseQueueFirst = null; 46283 var newBaseQueueLast = null; 46284 var update = first; 46285 46286 do { 46287 var updateLane = update.lane; 46288 46289 if (!isSubsetOfLanes(renderLanes, updateLane)) { 46290 // Priority is insufficient. Skip this update. If this is the first 46291 // skipped update, the previous update/state is the new base 46292 // update/state. 46293 var clone = { 46294 lane: updateLane, 46295 action: update.action, 46296 eagerReducer: update.eagerReducer, 46297 eagerState: update.eagerState, 46298 next: null 46299 }; 46300 46301 if (newBaseQueueLast === null) { 46302 newBaseQueueFirst = newBaseQueueLast = clone; 46303 newBaseState = newState; 46304 } else { 46305 newBaseQueueLast = newBaseQueueLast.next = clone; 46306 } // Update the remaining priority in the queue. 46307 // TODO: Don't need to accumulate this. Instead, we can remove 46308 // renderLanes from the original lanes. 46309 46310 46311 currentlyRenderingFiber$1.lanes = mergeLanes(currentlyRenderingFiber$1.lanes, updateLane); 46312 markSkippedUpdateLanes(updateLane); 46313 } else { 46314 // This update does have sufficient priority. 46315 if (newBaseQueueLast !== null) { 46316 var _clone = { 46317 // This update is going to be committed so we never want uncommit 46318 // it. Using NoLane works because 0 is a subset of all bitmasks, so 46319 // this will never be skipped by the check above. 46320 lane: NoLane, 46321 action: update.action, 46322 eagerReducer: update.eagerReducer, 46323 eagerState: update.eagerState, 46324 next: null 46325 }; 46326 newBaseQueueLast = newBaseQueueLast.next = _clone; 46327 } // Process this update. 46328 46329 46330 if (update.eagerReducer === reducer) { 46331 // If this update was processed eagerly, and its reducer matches the 46332 // current reducer, we can use the eagerly computed state. 46333 newState = update.eagerState; 46334 } else { 46335 var action = update.action; 46336 newState = reducer(newState, action); 46337 } 46338 } 46339 46340 update = update.next; 46341 } while (update !== null && update !== first); 46342 46343 if (newBaseQueueLast === null) { 46344 newBaseState = newState; 46345 } else { 46346 newBaseQueueLast.next = newBaseQueueFirst; 46347 } // Mark that the fiber performed work, but only if the new state is 46348 // different from the current state. 46349 46350 46351 if (!objectIs(newState, hook.memoizedState)) { 46352 markWorkInProgressReceivedUpdate(); 46353 } 46354 46355 hook.memoizedState = newState; 46356 hook.baseState = newBaseState; 46357 hook.baseQueue = newBaseQueueLast; 46358 queue.lastRenderedState = newState; 46359 } 46360 46361 var dispatch = queue.dispatch; 46362 return [hook.memoizedState, dispatch]; 46363} 46364 46365function rerenderReducer(reducer, initialArg, init) { 46366 var hook = updateWorkInProgressHook(); 46367 var queue = hook.queue; 46368 46369 if (!(queue !== null)) { 46370 { 46371 throw Error( "Should have a queue. This is likely a bug in React. Please file an issue." ); 46372 } 46373 } 46374 46375 queue.lastRenderedReducer = reducer; // This is a re-render. Apply the new render phase updates to the previous 46376 // work-in-progress hook. 46377 46378 var dispatch = queue.dispatch; 46379 var lastRenderPhaseUpdate = queue.pending; 46380 var newState = hook.memoizedState; 46381 46382 if (lastRenderPhaseUpdate !== null) { 46383 // The queue doesn't persist past this render pass. 46384 queue.pending = null; 46385 var firstRenderPhaseUpdate = lastRenderPhaseUpdate.next; 46386 var update = firstRenderPhaseUpdate; 46387 46388 do { 46389 // Process this render phase update. We don't have to check the 46390 // priority because it will always be the same as the current 46391 // render's. 46392 var action = update.action; 46393 newState = reducer(newState, action); 46394 update = update.next; 46395 } while (update !== firstRenderPhaseUpdate); // Mark that the fiber performed work, but only if the new state is 46396 // different from the current state. 46397 46398 46399 if (!objectIs(newState, hook.memoizedState)) { 46400 markWorkInProgressReceivedUpdate(); 46401 } 46402 46403 hook.memoizedState = newState; // Don't persist the state accumulated from the render phase updates to 46404 // the base state unless the queue is empty. 46405 // TODO: Not sure if this is the desired semantics, but it's what we 46406 // do for gDSFP. I can't remember why. 46407 46408 if (hook.baseQueue === null) { 46409 hook.baseState = newState; 46410 } 46411 46412 queue.lastRenderedState = newState; 46413 } 46414 46415 return [newState, dispatch]; 46416} 46417 46418function readFromUnsubcribedMutableSource(root, source, getSnapshot) { 46419 { 46420 warnAboutMultipleRenderersDEV(source); 46421 } 46422 46423 var getVersion = source._getVersion; 46424 var version = getVersion(source._source); // Is it safe for this component to read from this source during the current render? 46425 46426 var isSafeToReadFromSource = false; // Check the version first. 46427 // If this render has already been started with a specific version, 46428 // we can use it alone to determine if we can safely read from the source. 46429 46430 var currentRenderVersion = getWorkInProgressVersion(source); 46431 46432 if (currentRenderVersion !== null) { 46433 // It's safe to read if the store hasn't been mutated since the last time 46434 // we read something. 46435 isSafeToReadFromSource = currentRenderVersion === version; 46436 } else { 46437 // If there's no version, then this is the first time we've read from the 46438 // source during the current render pass, so we need to do a bit more work. 46439 // What we need to determine is if there are any hooks that already 46440 // subscribed to the source, and if so, whether there are any pending 46441 // mutations that haven't been synchronized yet. 46442 // 46443 // If there are no pending mutations, then `root.mutableReadLanes` will be 46444 // empty, and we know we can safely read. 46445 // 46446 // If there *are* pending mutations, we may still be able to safely read 46447 // if the currently rendering lanes are inclusive of the pending mutation 46448 // lanes, since that guarantees that the value we're about to read from 46449 // the source is consistent with the values that we read during the most 46450 // recent mutation. 46451 isSafeToReadFromSource = isSubsetOfLanes(renderLanes, root.mutableReadLanes); 46452 46453 if (isSafeToReadFromSource) { 46454 // If it's safe to read from this source during the current render, 46455 // store the version in case other components read from it. 46456 // A changed version number will let those components know to throw and restart the render. 46457 setWorkInProgressVersion(source, version); 46458 } 46459 } 46460 46461 if (isSafeToReadFromSource) { 46462 var snapshot = getSnapshot(source._source); 46463 46464 { 46465 if (typeof snapshot === 'function') { 46466 error('Mutable source should not return a function as the snapshot value. ' + 'Functions may close over mutable values and cause tearing.'); 46467 } 46468 } 46469 46470 return snapshot; 46471 } else { 46472 // This handles the special case of a mutable source being shared between renderers. 46473 // In that case, if the source is mutated between the first and second renderer, 46474 // The second renderer don't know that it needs to reset the WIP version during unwind, 46475 // (because the hook only marks sources as dirty if it's written to their WIP version). 46476 // That would cause this tear check to throw again and eventually be visible to the user. 46477 // We can avoid this infinite loop by explicitly marking the source as dirty. 46478 // 46479 // This can lead to tearing in the first renderer when it resumes, 46480 // but there's nothing we can do about that (short of throwing here and refusing to continue the render). 46481 markSourceAsDirty(source); 46482 46483 { 46484 { 46485 throw Error( "Cannot read from mutable source during the current render without tearing. This is a bug in React. Please file an issue." ); 46486 } 46487 } 46488 } 46489} 46490 46491function useMutableSource(hook, source, getSnapshot, subscribe) { 46492 var root = getWorkInProgressRoot(); 46493 46494 if (!(root !== null)) { 46495 { 46496 throw Error( "Expected a work-in-progress root. This is a bug in React. Please file an issue." ); 46497 } 46498 } 46499 46500 var getVersion = source._getVersion; 46501 var version = getVersion(source._source); 46502 var dispatcher = ReactCurrentDispatcher$1.current; // eslint-disable-next-line prefer-const 46503 46504 var _dispatcher$useState = dispatcher.useState(function () { 46505 return readFromUnsubcribedMutableSource(root, source, getSnapshot); 46506 }), 46507 currentSnapshot = _dispatcher$useState[0], 46508 setSnapshot = _dispatcher$useState[1]; 46509 46510 var snapshot = currentSnapshot; // Grab a handle to the state hook as well. 46511 // We use it to clear the pending update queue if we have a new source. 46512 46513 var stateHook = workInProgressHook; 46514 var memoizedState = hook.memoizedState; 46515 var refs = memoizedState.refs; 46516 var prevGetSnapshot = refs.getSnapshot; 46517 var prevSource = memoizedState.source; 46518 var prevSubscribe = memoizedState.subscribe; 46519 var fiber = currentlyRenderingFiber$1; 46520 hook.memoizedState = { 46521 refs: refs, 46522 source: source, 46523 subscribe: subscribe 46524 }; // Sync the values needed by our subscription handler after each commit. 46525 46526 dispatcher.useEffect(function () { 46527 refs.getSnapshot = getSnapshot; // Normally the dispatch function for a state hook never changes, 46528 // but this hook recreates the queue in certain cases to avoid updates from stale sources. 46529 // handleChange() below needs to reference the dispatch function without re-subscribing, 46530 // so we use a ref to ensure that it always has the latest version. 46531 46532 refs.setSnapshot = setSnapshot; // Check for a possible change between when we last rendered now. 46533 46534 var maybeNewVersion = getVersion(source._source); 46535 46536 if (!objectIs(version, maybeNewVersion)) { 46537 var maybeNewSnapshot = getSnapshot(source._source); 46538 46539 { 46540 if (typeof maybeNewSnapshot === 'function') { 46541 error('Mutable source should not return a function as the snapshot value. ' + 'Functions may close over mutable values and cause tearing.'); 46542 } 46543 } 46544 46545 if (!objectIs(snapshot, maybeNewSnapshot)) { 46546 setSnapshot(maybeNewSnapshot); 46547 var lane = requestUpdateLane(fiber); 46548 markRootMutableRead(root, lane); 46549 } // If the source mutated between render and now, 46550 // there may be state updates already scheduled from the old source. 46551 // Entangle the updates so that they render in the same batch. 46552 46553 46554 markRootEntangled(root, root.mutableReadLanes); 46555 } 46556 }, [getSnapshot, source, subscribe]); // If we got a new source or subscribe function, re-subscribe in a passive effect. 46557 46558 dispatcher.useEffect(function () { 46559 var handleChange = function () { 46560 var latestGetSnapshot = refs.getSnapshot; 46561 var latestSetSnapshot = refs.setSnapshot; 46562 46563 try { 46564 latestSetSnapshot(latestGetSnapshot(source._source)); // Record a pending mutable source update with the same expiration time. 46565 46566 var lane = requestUpdateLane(fiber); 46567 markRootMutableRead(root, lane); 46568 } catch (error) { 46569 // A selector might throw after a source mutation. 46570 // e.g. it might try to read from a part of the store that no longer exists. 46571 // In this case we should still schedule an update with React. 46572 // Worst case the selector will throw again and then an error boundary will handle it. 46573 latestSetSnapshot(function () { 46574 throw error; 46575 }); 46576 } 46577 }; 46578 46579 var unsubscribe = subscribe(source._source, handleChange); 46580 46581 { 46582 if (typeof unsubscribe !== 'function') { 46583 error('Mutable source subscribe function must return an unsubscribe function.'); 46584 } 46585 } 46586 46587 return unsubscribe; 46588 }, [source, subscribe]); // If any of the inputs to useMutableSource change, reading is potentially unsafe. 46589 // 46590 // If either the source or the subscription have changed we can't can't trust the update queue. 46591 // Maybe the source changed in a way that the old subscription ignored but the new one depends on. 46592 // 46593 // If the getSnapshot function changed, we also shouldn't rely on the update queue. 46594 // It's possible that the underlying source was mutated between the when the last "change" event fired, 46595 // and when the current render (with the new getSnapshot function) is processed. 46596 // 46597 // In both cases, we need to throw away pending updates (since they are no longer relevant) 46598 // and treat reading from the source as we do in the mount case. 46599 46600 if (!objectIs(prevGetSnapshot, getSnapshot) || !objectIs(prevSource, source) || !objectIs(prevSubscribe, subscribe)) { 46601 // Create a new queue and setState method, 46602 // So if there are interleaved updates, they get pushed to the older queue. 46603 // When this becomes current, the previous queue and dispatch method will be discarded, 46604 // including any interleaving updates that occur. 46605 var newQueue = { 46606 pending: null, 46607 dispatch: null, 46608 lastRenderedReducer: basicStateReducer, 46609 lastRenderedState: snapshot 46610 }; 46611 newQueue.dispatch = setSnapshot = dispatchAction.bind(null, currentlyRenderingFiber$1, newQueue); 46612 stateHook.queue = newQueue; 46613 stateHook.baseQueue = null; 46614 snapshot = readFromUnsubcribedMutableSource(root, source, getSnapshot); 46615 stateHook.memoizedState = stateHook.baseState = snapshot; 46616 } 46617 46618 return snapshot; 46619} 46620 46621function mountMutableSource(source, getSnapshot, subscribe) { 46622 var hook = mountWorkInProgressHook(); 46623 hook.memoizedState = { 46624 refs: { 46625 getSnapshot: getSnapshot, 46626 setSnapshot: null 46627 }, 46628 source: source, 46629 subscribe: subscribe 46630 }; 46631 return useMutableSource(hook, source, getSnapshot, subscribe); 46632} 46633 46634function updateMutableSource(source, getSnapshot, subscribe) { 46635 var hook = updateWorkInProgressHook(); 46636 return useMutableSource(hook, source, getSnapshot, subscribe); 46637} 46638 46639function mountState(initialState) { 46640 var hook = mountWorkInProgressHook(); 46641 46642 if (typeof initialState === 'function') { 46643 // $FlowFixMe: Flow doesn't like mixed types 46644 initialState = initialState(); 46645 } 46646 46647 hook.memoizedState = hook.baseState = initialState; 46648 var queue = hook.queue = { 46649 pending: null, 46650 dispatch: null, 46651 lastRenderedReducer: basicStateReducer, 46652 lastRenderedState: initialState 46653 }; 46654 var dispatch = queue.dispatch = dispatchAction.bind(null, currentlyRenderingFiber$1, queue); 46655 return [hook.memoizedState, dispatch]; 46656} 46657 46658function updateState(initialState) { 46659 return updateReducer(basicStateReducer); 46660} 46661 46662function rerenderState(initialState) { 46663 return rerenderReducer(basicStateReducer); 46664} 46665 46666function pushEffect(tag, create, destroy, deps) { 46667 var effect = { 46668 tag: tag, 46669 create: create, 46670 destroy: destroy, 46671 deps: deps, 46672 // Circular 46673 next: null 46674 }; 46675 var componentUpdateQueue = currentlyRenderingFiber$1.updateQueue; 46676 46677 if (componentUpdateQueue === null) { 46678 componentUpdateQueue = createFunctionComponentUpdateQueue(); 46679 currentlyRenderingFiber$1.updateQueue = componentUpdateQueue; 46680 componentUpdateQueue.lastEffect = effect.next = effect; 46681 } else { 46682 var lastEffect = componentUpdateQueue.lastEffect; 46683 46684 if (lastEffect === null) { 46685 componentUpdateQueue.lastEffect = effect.next = effect; 46686 } else { 46687 var firstEffect = lastEffect.next; 46688 lastEffect.next = effect; 46689 effect.next = firstEffect; 46690 componentUpdateQueue.lastEffect = effect; 46691 } 46692 } 46693 46694 return effect; 46695} 46696 46697function mountRef(initialValue) { 46698 var hook = mountWorkInProgressHook(); 46699 var ref = { 46700 current: initialValue 46701 }; 46702 46703 { 46704 Object.seal(ref); 46705 } 46706 46707 hook.memoizedState = ref; 46708 return ref; 46709} 46710 46711function updateRef(initialValue) { 46712 var hook = updateWorkInProgressHook(); 46713 return hook.memoizedState; 46714} 46715 46716function mountEffectImpl(fiberFlags, hookFlags, create, deps) { 46717 var hook = mountWorkInProgressHook(); 46718 var nextDeps = deps === undefined ? null : deps; 46719 currentlyRenderingFiber$1.flags |= fiberFlags; 46720 hook.memoizedState = pushEffect(HasEffect | hookFlags, create, undefined, nextDeps); 46721} 46722 46723function updateEffectImpl(fiberFlags, hookFlags, create, deps) { 46724 var hook = updateWorkInProgressHook(); 46725 var nextDeps = deps === undefined ? null : deps; 46726 var destroy = undefined; 46727 46728 if (currentHook !== null) { 46729 var prevEffect = currentHook.memoizedState; 46730 destroy = prevEffect.destroy; 46731 46732 if (nextDeps !== null) { 46733 var prevDeps = prevEffect.deps; 46734 46735 if (areHookInputsEqual(nextDeps, prevDeps)) { 46736 pushEffect(hookFlags, create, destroy, nextDeps); 46737 return; 46738 } 46739 } 46740 } 46741 46742 currentlyRenderingFiber$1.flags |= fiberFlags; 46743 hook.memoizedState = pushEffect(HasEffect | hookFlags, create, destroy, nextDeps); 46744} 46745 46746function mountEffect(create, deps) { 46747 { 46748 // $FlowExpectedError - jest isn't a global, and isn't recognized outside of tests 46749 if ('undefined' !== typeof jest) { 46750 warnIfNotCurrentlyActingEffectsInDEV(currentlyRenderingFiber$1); 46751 } 46752 } 46753 46754 return mountEffectImpl(Update | Passive, Passive$1, create, deps); 46755} 46756 46757function updateEffect(create, deps) { 46758 { 46759 // $FlowExpectedError - jest isn't a global, and isn't recognized outside of tests 46760 if ('undefined' !== typeof jest) { 46761 warnIfNotCurrentlyActingEffectsInDEV(currentlyRenderingFiber$1); 46762 } 46763 } 46764 46765 return updateEffectImpl(Update | Passive, Passive$1, create, deps); 46766} 46767 46768function mountLayoutEffect(create, deps) { 46769 return mountEffectImpl(Update, Layout, create, deps); 46770} 46771 46772function updateLayoutEffect(create, deps) { 46773 return updateEffectImpl(Update, Layout, create, deps); 46774} 46775 46776function imperativeHandleEffect(create, ref) { 46777 if (typeof ref === 'function') { 46778 var refCallback = ref; 46779 46780 var _inst = create(); 46781 46782 refCallback(_inst); 46783 return function () { 46784 refCallback(null); 46785 }; 46786 } else if (ref !== null && ref !== undefined) { 46787 var refObject = ref; 46788 46789 { 46790 if (!refObject.hasOwnProperty('current')) { 46791 error('Expected useImperativeHandle() first argument to either be a ' + 'ref callback or React.createRef() object. Instead received: %s.', 'an object with keys {' + Object.keys(refObject).join(', ') + '}'); 46792 } 46793 } 46794 46795 var _inst2 = create(); 46796 46797 refObject.current = _inst2; 46798 return function () { 46799 refObject.current = null; 46800 }; 46801 } 46802} 46803 46804function mountImperativeHandle(ref, create, deps) { 46805 { 46806 if (typeof create !== 'function') { 46807 error('Expected useImperativeHandle() second argument to be a function ' + 'that creates a handle. Instead received: %s.', create !== null ? typeof create : 'null'); 46808 } 46809 } // TODO: If deps are provided, should we skip comparing the ref itself? 46810 46811 46812 var effectDeps = deps !== null && deps !== undefined ? deps.concat([ref]) : null; 46813 return mountEffectImpl(Update, Layout, imperativeHandleEffect.bind(null, create, ref), effectDeps); 46814} 46815 46816function updateImperativeHandle(ref, create, deps) { 46817 { 46818 if (typeof create !== 'function') { 46819 error('Expected useImperativeHandle() second argument to be a function ' + 'that creates a handle. Instead received: %s.', create !== null ? typeof create : 'null'); 46820 } 46821 } // TODO: If deps are provided, should we skip comparing the ref itself? 46822 46823 46824 var effectDeps = deps !== null && deps !== undefined ? deps.concat([ref]) : null; 46825 return updateEffectImpl(Update, Layout, imperativeHandleEffect.bind(null, create, ref), effectDeps); 46826} 46827 46828function mountDebugValue(value, formatterFn) {// This hook is normally a no-op. 46829 // The react-debug-hooks package injects its own implementation 46830 // so that e.g. DevTools can display custom hook values. 46831} 46832 46833var updateDebugValue = mountDebugValue; 46834 46835function mountCallback(callback, deps) { 46836 var hook = mountWorkInProgressHook(); 46837 var nextDeps = deps === undefined ? null : deps; 46838 hook.memoizedState = [callback, nextDeps]; 46839 return callback; 46840} 46841 46842function updateCallback(callback, deps) { 46843 var hook = updateWorkInProgressHook(); 46844 var nextDeps = deps === undefined ? null : deps; 46845 var prevState = hook.memoizedState; 46846 46847 if (prevState !== null) { 46848 if (nextDeps !== null) { 46849 var prevDeps = prevState[1]; 46850 46851 if (areHookInputsEqual(nextDeps, prevDeps)) { 46852 return prevState[0]; 46853 } 46854 } 46855 } 46856 46857 hook.memoizedState = [callback, nextDeps]; 46858 return callback; 46859} 46860 46861function mountMemo(nextCreate, deps) { 46862 var hook = mountWorkInProgressHook(); 46863 var nextDeps = deps === undefined ? null : deps; 46864 var nextValue = nextCreate(); 46865 hook.memoizedState = [nextValue, nextDeps]; 46866 return nextValue; 46867} 46868 46869function updateMemo(nextCreate, deps) { 46870 var hook = updateWorkInProgressHook(); 46871 var nextDeps = deps === undefined ? null : deps; 46872 var prevState = hook.memoizedState; 46873 46874 if (prevState !== null) { 46875 // Assume these are defined. If they're not, areHookInputsEqual will warn. 46876 if (nextDeps !== null) { 46877 var prevDeps = prevState[1]; 46878 46879 if (areHookInputsEqual(nextDeps, prevDeps)) { 46880 return prevState[0]; 46881 } 46882 } 46883 } 46884 46885 var nextValue = nextCreate(); 46886 hook.memoizedState = [nextValue, nextDeps]; 46887 return nextValue; 46888} 46889 46890function mountDeferredValue(value) { 46891 var _mountState = mountState(value), 46892 prevValue = _mountState[0], 46893 setValue = _mountState[1]; 46894 46895 mountEffect(function () { 46896 var prevTransition = ReactCurrentBatchConfig$1.transition; 46897 ReactCurrentBatchConfig$1.transition = 1; 46898 46899 try { 46900 setValue(value); 46901 } finally { 46902 ReactCurrentBatchConfig$1.transition = prevTransition; 46903 } 46904 }, [value]); 46905 return prevValue; 46906} 46907 46908function updateDeferredValue(value) { 46909 var _updateState = updateState(), 46910 prevValue = _updateState[0], 46911 setValue = _updateState[1]; 46912 46913 updateEffect(function () { 46914 var prevTransition = ReactCurrentBatchConfig$1.transition; 46915 ReactCurrentBatchConfig$1.transition = 1; 46916 46917 try { 46918 setValue(value); 46919 } finally { 46920 ReactCurrentBatchConfig$1.transition = prevTransition; 46921 } 46922 }, [value]); 46923 return prevValue; 46924} 46925 46926function rerenderDeferredValue(value) { 46927 var _rerenderState = rerenderState(), 46928 prevValue = _rerenderState[0], 46929 setValue = _rerenderState[1]; 46930 46931 updateEffect(function () { 46932 var prevTransition = ReactCurrentBatchConfig$1.transition; 46933 ReactCurrentBatchConfig$1.transition = 1; 46934 46935 try { 46936 setValue(value); 46937 } finally { 46938 ReactCurrentBatchConfig$1.transition = prevTransition; 46939 } 46940 }, [value]); 46941 return prevValue; 46942} 46943 46944function startTransition(setPending, callback) { 46945 var priorityLevel = getCurrentPriorityLevel(); 46946 46947 { 46948 runWithPriority$1(priorityLevel < UserBlockingPriority$2 ? UserBlockingPriority$2 : priorityLevel, function () { 46949 setPending(true); 46950 }); 46951 runWithPriority$1(priorityLevel > NormalPriority$1 ? NormalPriority$1 : priorityLevel, function () { 46952 var prevTransition = ReactCurrentBatchConfig$1.transition; 46953 ReactCurrentBatchConfig$1.transition = 1; 46954 46955 try { 46956 setPending(false); 46957 callback(); 46958 } finally { 46959 ReactCurrentBatchConfig$1.transition = prevTransition; 46960 } 46961 }); 46962 } 46963} 46964 46965function mountTransition() { 46966 var _mountState2 = mountState(false), 46967 isPending = _mountState2[0], 46968 setPending = _mountState2[1]; // The `start` method can be stored on a ref, since `setPending` 46969 // never changes. 46970 46971 46972 var start = startTransition.bind(null, setPending); 46973 mountRef(start); 46974 return [start, isPending]; 46975} 46976 46977function updateTransition() { 46978 var _updateState2 = updateState(), 46979 isPending = _updateState2[0]; 46980 46981 var startRef = updateRef(); 46982 var start = startRef.current; 46983 return [start, isPending]; 46984} 46985 46986function rerenderTransition() { 46987 var _rerenderState2 = rerenderState(), 46988 isPending = _rerenderState2[0]; 46989 46990 var startRef = updateRef(); 46991 var start = startRef.current; 46992 return [start, isPending]; 46993} 46994 46995var isUpdatingOpaqueValueInRenderPhase = false; 46996function getIsUpdatingOpaqueValueInRenderPhaseInDEV() { 46997 { 46998 return isUpdatingOpaqueValueInRenderPhase; 46999 } 47000} 47001 47002function warnOnOpaqueIdentifierAccessInDEV(fiber) { 47003 { 47004 // TODO: Should warn in effects and callbacks, too 47005 var name = getComponentName(fiber.type) || 'Unknown'; 47006 47007 if (getIsRendering() && !didWarnAboutUseOpaqueIdentifier[name]) { 47008 error('The object passed back from useOpaqueIdentifier is meant to be ' + 'passed through to attributes only. Do not read the ' + 'value directly.'); 47009 47010 didWarnAboutUseOpaqueIdentifier[name] = true; 47011 } 47012 } 47013} 47014 47015function mountOpaqueIdentifier() { 47016 var makeId = makeClientIdInDEV.bind(null, warnOnOpaqueIdentifierAccessInDEV.bind(null, currentlyRenderingFiber$1)) ; 47017 47018 if (getIsHydrating()) { 47019 var didUpgrade = false; 47020 var fiber = currentlyRenderingFiber$1; 47021 47022 var readValue = function () { 47023 if (!didUpgrade) { 47024 // Only upgrade once. This works even inside the render phase because 47025 // the update is added to a shared queue, which outlasts the 47026 // in-progress render. 47027 didUpgrade = true; 47028 47029 { 47030 isUpdatingOpaqueValueInRenderPhase = true; 47031 setId(makeId()); 47032 isUpdatingOpaqueValueInRenderPhase = false; 47033 warnOnOpaqueIdentifierAccessInDEV(fiber); 47034 } 47035 } 47036 47037 { 47038 { 47039 throw Error( "The object passed back from useOpaqueIdentifier is meant to be passed through to attributes only. Do not read the value directly." ); 47040 } 47041 } 47042 }; 47043 47044 var id = makeOpaqueHydratingObject(readValue); 47045 var setId = mountState(id)[1]; 47046 47047 if ((currentlyRenderingFiber$1.mode & BlockingMode) === NoMode) { 47048 currentlyRenderingFiber$1.flags |= Update | Passive; 47049 pushEffect(HasEffect | Passive$1, function () { 47050 setId(makeId()); 47051 }, undefined, null); 47052 } 47053 47054 return id; 47055 } else { 47056 var _id = makeId(); 47057 47058 mountState(_id); 47059 return _id; 47060 } 47061} 47062 47063function updateOpaqueIdentifier() { 47064 var id = updateState()[0]; 47065 return id; 47066} 47067 47068function rerenderOpaqueIdentifier() { 47069 var id = rerenderState()[0]; 47070 return id; 47071} 47072 47073function dispatchAction(fiber, queue, action) { 47074 { 47075 if (typeof arguments[3] === 'function') { 47076 error("State updates from the useState() and useReducer() Hooks don't support the " + 'second callback argument. To execute a side effect after ' + 'rendering, declare it in the component body with useEffect().'); 47077 } 47078 } 47079 47080 var eventTime = requestEventTime(); 47081 var lane = requestUpdateLane(fiber); 47082 var update = { 47083 lane: lane, 47084 action: action, 47085 eagerReducer: null, 47086 eagerState: null, 47087 next: null 47088 }; // Append the update to the end of the list. 47089 47090 var pending = queue.pending; 47091 47092 if (pending === null) { 47093 // This is the first update. Create a circular list. 47094 update.next = update; 47095 } else { 47096 update.next = pending.next; 47097 pending.next = update; 47098 } 47099 47100 queue.pending = update; 47101 var alternate = fiber.alternate; 47102 47103 if (fiber === currentlyRenderingFiber$1 || alternate !== null && alternate === currentlyRenderingFiber$1) { 47104 // This is a render phase update. Stash it in a lazily-created map of 47105 // queue -> linked list of updates. After this render pass, we'll restart 47106 // and apply the stashed updates on top of the work-in-progress hook. 47107 didScheduleRenderPhaseUpdateDuringThisPass = didScheduleRenderPhaseUpdate = true; 47108 } else { 47109 if (fiber.lanes === NoLanes && (alternate === null || alternate.lanes === NoLanes)) { 47110 // The queue is currently empty, which means we can eagerly compute the 47111 // next state before entering the render phase. If the new state is the 47112 // same as the current state, we may be able to bail out entirely. 47113 var lastRenderedReducer = queue.lastRenderedReducer; 47114 47115 if (lastRenderedReducer !== null) { 47116 var prevDispatcher; 47117 47118 { 47119 prevDispatcher = ReactCurrentDispatcher$1.current; 47120 ReactCurrentDispatcher$1.current = InvalidNestedHooksDispatcherOnUpdateInDEV; 47121 } 47122 47123 try { 47124 var currentState = queue.lastRenderedState; 47125 var eagerState = lastRenderedReducer(currentState, action); // Stash the eagerly computed state, and the reducer used to compute 47126 // it, on the update object. If the reducer hasn't changed by the 47127 // time we enter the render phase, then the eager state can be used 47128 // without calling the reducer again. 47129 47130 update.eagerReducer = lastRenderedReducer; 47131 update.eagerState = eagerState; 47132 47133 if (objectIs(eagerState, currentState)) { 47134 // Fast path. We can bail out without scheduling React to re-render. 47135 // It's still possible that we'll need to rebase this update later, 47136 // if the component re-renders for a different reason and by that 47137 // time the reducer has changed. 47138 return; 47139 } 47140 } catch (error) {// Suppress the error. It will throw again in the render phase. 47141 } finally { 47142 { 47143 ReactCurrentDispatcher$1.current = prevDispatcher; 47144 } 47145 } 47146 } 47147 } 47148 47149 { 47150 // $FlowExpectedError - jest isn't a global, and isn't recognized outside of tests 47151 if ('undefined' !== typeof jest) { 47152 warnIfNotScopedWithMatchingAct(fiber); 47153 warnIfNotCurrentlyActingUpdatesInDev(fiber); 47154 } 47155 } 47156 47157 scheduleUpdateOnFiber(fiber, lane, eventTime); 47158 } 47159} 47160 47161var ContextOnlyDispatcher = { 47162 readContext: readContext, 47163 useCallback: throwInvalidHookError, 47164 useContext: throwInvalidHookError, 47165 useEffect: throwInvalidHookError, 47166 useImperativeHandle: throwInvalidHookError, 47167 useLayoutEffect: throwInvalidHookError, 47168 useMemo: throwInvalidHookError, 47169 useReducer: throwInvalidHookError, 47170 useRef: throwInvalidHookError, 47171 useState: throwInvalidHookError, 47172 useDebugValue: throwInvalidHookError, 47173 useDeferredValue: throwInvalidHookError, 47174 useTransition: throwInvalidHookError, 47175 useMutableSource: throwInvalidHookError, 47176 useOpaqueIdentifier: throwInvalidHookError, 47177 unstable_isNewReconciler: enableNewReconciler 47178}; 47179var HooksDispatcherOnMountInDEV = null; 47180var HooksDispatcherOnMountWithHookTypesInDEV = null; 47181var HooksDispatcherOnUpdateInDEV = null; 47182var HooksDispatcherOnRerenderInDEV = null; 47183var InvalidNestedHooksDispatcherOnMountInDEV = null; 47184var InvalidNestedHooksDispatcherOnUpdateInDEV = null; 47185var InvalidNestedHooksDispatcherOnRerenderInDEV = null; 47186 47187{ 47188 var warnInvalidContextAccess = function () { 47189 error('Context can only be read while React is rendering. ' + 'In classes, you can read it in the render method or getDerivedStateFromProps. ' + 'In function components, you can read it directly in the function body, but not ' + 'inside Hooks like useReducer() or useMemo().'); 47190 }; 47191 47192 var warnInvalidHookAccess = function () { 47193 error('Do not call Hooks inside useEffect(...), useMemo(...), or other built-in Hooks. ' + 'You can only call Hooks at the top level of your React function. ' + 'For more information, see ' + 'https://reactjs.org/link/rules-of-hooks'); 47194 }; 47195 47196 HooksDispatcherOnMountInDEV = { 47197 readContext: function (context, observedBits) { 47198 return readContext(context, observedBits); 47199 }, 47200 useCallback: function (callback, deps) { 47201 currentHookNameInDev = 'useCallback'; 47202 mountHookTypesDev(); 47203 checkDepsAreArrayDev(deps); 47204 return mountCallback(callback, deps); 47205 }, 47206 useContext: function (context, observedBits) { 47207 currentHookNameInDev = 'useContext'; 47208 mountHookTypesDev(); 47209 return readContext(context, observedBits); 47210 }, 47211 useEffect: function (create, deps) { 47212 currentHookNameInDev = 'useEffect'; 47213 mountHookTypesDev(); 47214 checkDepsAreArrayDev(deps); 47215 return mountEffect(create, deps); 47216 }, 47217 useImperativeHandle: function (ref, create, deps) { 47218 currentHookNameInDev = 'useImperativeHandle'; 47219 mountHookTypesDev(); 47220 checkDepsAreArrayDev(deps); 47221 return mountImperativeHandle(ref, create, deps); 47222 }, 47223 useLayoutEffect: function (create, deps) { 47224 currentHookNameInDev = 'useLayoutEffect'; 47225 mountHookTypesDev(); 47226 checkDepsAreArrayDev(deps); 47227 return mountLayoutEffect(create, deps); 47228 }, 47229 useMemo: function (create, deps) { 47230 currentHookNameInDev = 'useMemo'; 47231 mountHookTypesDev(); 47232 checkDepsAreArrayDev(deps); 47233 var prevDispatcher = ReactCurrentDispatcher$1.current; 47234 ReactCurrentDispatcher$1.current = InvalidNestedHooksDispatcherOnMountInDEV; 47235 47236 try { 47237 return mountMemo(create, deps); 47238 } finally { 47239 ReactCurrentDispatcher$1.current = prevDispatcher; 47240 } 47241 }, 47242 useReducer: function (reducer, initialArg, init) { 47243 currentHookNameInDev = 'useReducer'; 47244 mountHookTypesDev(); 47245 var prevDispatcher = ReactCurrentDispatcher$1.current; 47246 ReactCurrentDispatcher$1.current = InvalidNestedHooksDispatcherOnMountInDEV; 47247 47248 try { 47249 return mountReducer(reducer, initialArg, init); 47250 } finally { 47251 ReactCurrentDispatcher$1.current = prevDispatcher; 47252 } 47253 }, 47254 useRef: function (initialValue) { 47255 currentHookNameInDev = 'useRef'; 47256 mountHookTypesDev(); 47257 return mountRef(initialValue); 47258 }, 47259 useState: function (initialState) { 47260 currentHookNameInDev = 'useState'; 47261 mountHookTypesDev(); 47262 var prevDispatcher = ReactCurrentDispatcher$1.current; 47263 ReactCurrentDispatcher$1.current = InvalidNestedHooksDispatcherOnMountInDEV; 47264 47265 try { 47266 return mountState(initialState); 47267 } finally { 47268 ReactCurrentDispatcher$1.current = prevDispatcher; 47269 } 47270 }, 47271 useDebugValue: function (value, formatterFn) { 47272 currentHookNameInDev = 'useDebugValue'; 47273 mountHookTypesDev(); 47274 return mountDebugValue(); 47275 }, 47276 useDeferredValue: function (value) { 47277 currentHookNameInDev = 'useDeferredValue'; 47278 mountHookTypesDev(); 47279 return mountDeferredValue(value); 47280 }, 47281 useTransition: function () { 47282 currentHookNameInDev = 'useTransition'; 47283 mountHookTypesDev(); 47284 return mountTransition(); 47285 }, 47286 useMutableSource: function (source, getSnapshot, subscribe) { 47287 currentHookNameInDev = 'useMutableSource'; 47288 mountHookTypesDev(); 47289 return mountMutableSource(source, getSnapshot, subscribe); 47290 }, 47291 useOpaqueIdentifier: function () { 47292 currentHookNameInDev = 'useOpaqueIdentifier'; 47293 mountHookTypesDev(); 47294 return mountOpaqueIdentifier(); 47295 }, 47296 unstable_isNewReconciler: enableNewReconciler 47297 }; 47298 HooksDispatcherOnMountWithHookTypesInDEV = { 47299 readContext: function (context, observedBits) { 47300 return readContext(context, observedBits); 47301 }, 47302 useCallback: function (callback, deps) { 47303 currentHookNameInDev = 'useCallback'; 47304 updateHookTypesDev(); 47305 return mountCallback(callback, deps); 47306 }, 47307 useContext: function (context, observedBits) { 47308 currentHookNameInDev = 'useContext'; 47309 updateHookTypesDev(); 47310 return readContext(context, observedBits); 47311 }, 47312 useEffect: function (create, deps) { 47313 currentHookNameInDev = 'useEffect'; 47314 updateHookTypesDev(); 47315 return mountEffect(create, deps); 47316 }, 47317 useImperativeHandle: function (ref, create, deps) { 47318 currentHookNameInDev = 'useImperativeHandle'; 47319 updateHookTypesDev(); 47320 return mountImperativeHandle(ref, create, deps); 47321 }, 47322 useLayoutEffect: function (create, deps) { 47323 currentHookNameInDev = 'useLayoutEffect'; 47324 updateHookTypesDev(); 47325 return mountLayoutEffect(create, deps); 47326 }, 47327 useMemo: function (create, deps) { 47328 currentHookNameInDev = 'useMemo'; 47329 updateHookTypesDev(); 47330 var prevDispatcher = ReactCurrentDispatcher$1.current; 47331 ReactCurrentDispatcher$1.current = InvalidNestedHooksDispatcherOnMountInDEV; 47332 47333 try { 47334 return mountMemo(create, deps); 47335 } finally { 47336 ReactCurrentDispatcher$1.current = prevDispatcher; 47337 } 47338 }, 47339 useReducer: function (reducer, initialArg, init) { 47340 currentHookNameInDev = 'useReducer'; 47341 updateHookTypesDev(); 47342 var prevDispatcher = ReactCurrentDispatcher$1.current; 47343 ReactCurrentDispatcher$1.current = InvalidNestedHooksDispatcherOnMountInDEV; 47344 47345 try { 47346 return mountReducer(reducer, initialArg, init); 47347 } finally { 47348 ReactCurrentDispatcher$1.current = prevDispatcher; 47349 } 47350 }, 47351 useRef: function (initialValue) { 47352 currentHookNameInDev = 'useRef'; 47353 updateHookTypesDev(); 47354 return mountRef(initialValue); 47355 }, 47356 useState: function (initialState) { 47357 currentHookNameInDev = 'useState'; 47358 updateHookTypesDev(); 47359 var prevDispatcher = ReactCurrentDispatcher$1.current; 47360 ReactCurrentDispatcher$1.current = InvalidNestedHooksDispatcherOnMountInDEV; 47361 47362 try { 47363 return mountState(initialState); 47364 } finally { 47365 ReactCurrentDispatcher$1.current = prevDispatcher; 47366 } 47367 }, 47368 useDebugValue: function (value, formatterFn) { 47369 currentHookNameInDev = 'useDebugValue'; 47370 updateHookTypesDev(); 47371 return mountDebugValue(); 47372 }, 47373 useDeferredValue: function (value) { 47374 currentHookNameInDev = 'useDeferredValue'; 47375 updateHookTypesDev(); 47376 return mountDeferredValue(value); 47377 }, 47378 useTransition: function () { 47379 currentHookNameInDev = 'useTransition'; 47380 updateHookTypesDev(); 47381 return mountTransition(); 47382 }, 47383 useMutableSource: function (source, getSnapshot, subscribe) { 47384 currentHookNameInDev = 'useMutableSource'; 47385 updateHookTypesDev(); 47386 return mountMutableSource(source, getSnapshot, subscribe); 47387 }, 47388 useOpaqueIdentifier: function () { 47389 currentHookNameInDev = 'useOpaqueIdentifier'; 47390 updateHookTypesDev(); 47391 return mountOpaqueIdentifier(); 47392 }, 47393 unstable_isNewReconciler: enableNewReconciler 47394 }; 47395 HooksDispatcherOnUpdateInDEV = { 47396 readContext: function (context, observedBits) { 47397 return readContext(context, observedBits); 47398 }, 47399 useCallback: function (callback, deps) { 47400 currentHookNameInDev = 'useCallback'; 47401 updateHookTypesDev(); 47402 return updateCallback(callback, deps); 47403 }, 47404 useContext: function (context, observedBits) { 47405 currentHookNameInDev = 'useContext'; 47406 updateHookTypesDev(); 47407 return readContext(context, observedBits); 47408 }, 47409 useEffect: function (create, deps) { 47410 currentHookNameInDev = 'useEffect'; 47411 updateHookTypesDev(); 47412 return updateEffect(create, deps); 47413 }, 47414 useImperativeHandle: function (ref, create, deps) { 47415 currentHookNameInDev = 'useImperativeHandle'; 47416 updateHookTypesDev(); 47417 return updateImperativeHandle(ref, create, deps); 47418 }, 47419 useLayoutEffect: function (create, deps) { 47420 currentHookNameInDev = 'useLayoutEffect'; 47421 updateHookTypesDev(); 47422 return updateLayoutEffect(create, deps); 47423 }, 47424 useMemo: function (create, deps) { 47425 currentHookNameInDev = 'useMemo'; 47426 updateHookTypesDev(); 47427 var prevDispatcher = ReactCurrentDispatcher$1.current; 47428 ReactCurrentDispatcher$1.current = InvalidNestedHooksDispatcherOnUpdateInDEV; 47429 47430 try { 47431 return updateMemo(create, deps); 47432 } finally { 47433 ReactCurrentDispatcher$1.current = prevDispatcher; 47434 } 47435 }, 47436 useReducer: function (reducer, initialArg, init) { 47437 currentHookNameInDev = 'useReducer'; 47438 updateHookTypesDev(); 47439 var prevDispatcher = ReactCurrentDispatcher$1.current; 47440 ReactCurrentDispatcher$1.current = InvalidNestedHooksDispatcherOnUpdateInDEV; 47441 47442 try { 47443 return updateReducer(reducer, initialArg, init); 47444 } finally { 47445 ReactCurrentDispatcher$1.current = prevDispatcher; 47446 } 47447 }, 47448 useRef: function (initialValue) { 47449 currentHookNameInDev = 'useRef'; 47450 updateHookTypesDev(); 47451 return updateRef(); 47452 }, 47453 useState: function (initialState) { 47454 currentHookNameInDev = 'useState'; 47455 updateHookTypesDev(); 47456 var prevDispatcher = ReactCurrentDispatcher$1.current; 47457 ReactCurrentDispatcher$1.current = InvalidNestedHooksDispatcherOnUpdateInDEV; 47458 47459 try { 47460 return updateState(initialState); 47461 } finally { 47462 ReactCurrentDispatcher$1.current = prevDispatcher; 47463 } 47464 }, 47465 useDebugValue: function (value, formatterFn) { 47466 currentHookNameInDev = 'useDebugValue'; 47467 updateHookTypesDev(); 47468 return updateDebugValue(); 47469 }, 47470 useDeferredValue: function (value) { 47471 currentHookNameInDev = 'useDeferredValue'; 47472 updateHookTypesDev(); 47473 return updateDeferredValue(value); 47474 }, 47475 useTransition: function () { 47476 currentHookNameInDev = 'useTransition'; 47477 updateHookTypesDev(); 47478 return updateTransition(); 47479 }, 47480 useMutableSource: function (source, getSnapshot, subscribe) { 47481 currentHookNameInDev = 'useMutableSource'; 47482 updateHookTypesDev(); 47483 return updateMutableSource(source, getSnapshot, subscribe); 47484 }, 47485 useOpaqueIdentifier: function () { 47486 currentHookNameInDev = 'useOpaqueIdentifier'; 47487 updateHookTypesDev(); 47488 return updateOpaqueIdentifier(); 47489 }, 47490 unstable_isNewReconciler: enableNewReconciler 47491 }; 47492 HooksDispatcherOnRerenderInDEV = { 47493 readContext: function (context, observedBits) { 47494 return readContext(context, observedBits); 47495 }, 47496 useCallback: function (callback, deps) { 47497 currentHookNameInDev = 'useCallback'; 47498 updateHookTypesDev(); 47499 return updateCallback(callback, deps); 47500 }, 47501 useContext: function (context, observedBits) { 47502 currentHookNameInDev = 'useContext'; 47503 updateHookTypesDev(); 47504 return readContext(context, observedBits); 47505 }, 47506 useEffect: function (create, deps) { 47507 currentHookNameInDev = 'useEffect'; 47508 updateHookTypesDev(); 47509 return updateEffect(create, deps); 47510 }, 47511 useImperativeHandle: function (ref, create, deps) { 47512 currentHookNameInDev = 'useImperativeHandle'; 47513 updateHookTypesDev(); 47514 return updateImperativeHandle(ref, create, deps); 47515 }, 47516 useLayoutEffect: function (create, deps) { 47517 currentHookNameInDev = 'useLayoutEffect'; 47518 updateHookTypesDev(); 47519 return updateLayoutEffect(create, deps); 47520 }, 47521 useMemo: function (create, deps) { 47522 currentHookNameInDev = 'useMemo'; 47523 updateHookTypesDev(); 47524 var prevDispatcher = ReactCurrentDispatcher$1.current; 47525 ReactCurrentDispatcher$1.current = InvalidNestedHooksDispatcherOnRerenderInDEV; 47526 47527 try { 47528 return updateMemo(create, deps); 47529 } finally { 47530 ReactCurrentDispatcher$1.current = prevDispatcher; 47531 } 47532 }, 47533 useReducer: function (reducer, initialArg, init) { 47534 currentHookNameInDev = 'useReducer'; 47535 updateHookTypesDev(); 47536 var prevDispatcher = ReactCurrentDispatcher$1.current; 47537 ReactCurrentDispatcher$1.current = InvalidNestedHooksDispatcherOnRerenderInDEV; 47538 47539 try { 47540 return rerenderReducer(reducer, initialArg, init); 47541 } finally { 47542 ReactCurrentDispatcher$1.current = prevDispatcher; 47543 } 47544 }, 47545 useRef: function (initialValue) { 47546 currentHookNameInDev = 'useRef'; 47547 updateHookTypesDev(); 47548 return updateRef(); 47549 }, 47550 useState: function (initialState) { 47551 currentHookNameInDev = 'useState'; 47552 updateHookTypesDev(); 47553 var prevDispatcher = ReactCurrentDispatcher$1.current; 47554 ReactCurrentDispatcher$1.current = InvalidNestedHooksDispatcherOnRerenderInDEV; 47555 47556 try { 47557 return rerenderState(initialState); 47558 } finally { 47559 ReactCurrentDispatcher$1.current = prevDispatcher; 47560 } 47561 }, 47562 useDebugValue: function (value, formatterFn) { 47563 currentHookNameInDev = 'useDebugValue'; 47564 updateHookTypesDev(); 47565 return updateDebugValue(); 47566 }, 47567 useDeferredValue: function (value) { 47568 currentHookNameInDev = 'useDeferredValue'; 47569 updateHookTypesDev(); 47570 return rerenderDeferredValue(value); 47571 }, 47572 useTransition: function () { 47573 currentHookNameInDev = 'useTransition'; 47574 updateHookTypesDev(); 47575 return rerenderTransition(); 47576 }, 47577 useMutableSource: function (source, getSnapshot, subscribe) { 47578 currentHookNameInDev = 'useMutableSource'; 47579 updateHookTypesDev(); 47580 return updateMutableSource(source, getSnapshot, subscribe); 47581 }, 47582 useOpaqueIdentifier: function () { 47583 currentHookNameInDev = 'useOpaqueIdentifier'; 47584 updateHookTypesDev(); 47585 return rerenderOpaqueIdentifier(); 47586 }, 47587 unstable_isNewReconciler: enableNewReconciler 47588 }; 47589 InvalidNestedHooksDispatcherOnMountInDEV = { 47590 readContext: function (context, observedBits) { 47591 warnInvalidContextAccess(); 47592 return readContext(context, observedBits); 47593 }, 47594 useCallback: function (callback, deps) { 47595 currentHookNameInDev = 'useCallback'; 47596 warnInvalidHookAccess(); 47597 mountHookTypesDev(); 47598 return mountCallback(callback, deps); 47599 }, 47600 useContext: function (context, observedBits) { 47601 currentHookNameInDev = 'useContext'; 47602 warnInvalidHookAccess(); 47603 mountHookTypesDev(); 47604 return readContext(context, observedBits); 47605 }, 47606 useEffect: function (create, deps) { 47607 currentHookNameInDev = 'useEffect'; 47608 warnInvalidHookAccess(); 47609 mountHookTypesDev(); 47610 return mountEffect(create, deps); 47611 }, 47612 useImperativeHandle: function (ref, create, deps) { 47613 currentHookNameInDev = 'useImperativeHandle'; 47614 warnInvalidHookAccess(); 47615 mountHookTypesDev(); 47616 return mountImperativeHandle(ref, create, deps); 47617 }, 47618 useLayoutEffect: function (create, deps) { 47619 currentHookNameInDev = 'useLayoutEffect'; 47620 warnInvalidHookAccess(); 47621 mountHookTypesDev(); 47622 return mountLayoutEffect(create, deps); 47623 }, 47624 useMemo: function (create, deps) { 47625 currentHookNameInDev = 'useMemo'; 47626 warnInvalidHookAccess(); 47627 mountHookTypesDev(); 47628 var prevDispatcher = ReactCurrentDispatcher$1.current; 47629 ReactCurrentDispatcher$1.current = InvalidNestedHooksDispatcherOnMountInDEV; 47630 47631 try { 47632 return mountMemo(create, deps); 47633 } finally { 47634 ReactCurrentDispatcher$1.current = prevDispatcher; 47635 } 47636 }, 47637 useReducer: function (reducer, initialArg, init) { 47638 currentHookNameInDev = 'useReducer'; 47639 warnInvalidHookAccess(); 47640 mountHookTypesDev(); 47641 var prevDispatcher = ReactCurrentDispatcher$1.current; 47642 ReactCurrentDispatcher$1.current = InvalidNestedHooksDispatcherOnMountInDEV; 47643 47644 try { 47645 return mountReducer(reducer, initialArg, init); 47646 } finally { 47647 ReactCurrentDispatcher$1.current = prevDispatcher; 47648 } 47649 }, 47650 useRef: function (initialValue) { 47651 currentHookNameInDev = 'useRef'; 47652 warnInvalidHookAccess(); 47653 mountHookTypesDev(); 47654 return mountRef(initialValue); 47655 }, 47656 useState: function (initialState) { 47657 currentHookNameInDev = 'useState'; 47658 warnInvalidHookAccess(); 47659 mountHookTypesDev(); 47660 var prevDispatcher = ReactCurrentDispatcher$1.current; 47661 ReactCurrentDispatcher$1.current = InvalidNestedHooksDispatcherOnMountInDEV; 47662 47663 try { 47664 return mountState(initialState); 47665 } finally { 47666 ReactCurrentDispatcher$1.current = prevDispatcher; 47667 } 47668 }, 47669 useDebugValue: function (value, formatterFn) { 47670 currentHookNameInDev = 'useDebugValue'; 47671 warnInvalidHookAccess(); 47672 mountHookTypesDev(); 47673 return mountDebugValue(); 47674 }, 47675 useDeferredValue: function (value) { 47676 currentHookNameInDev = 'useDeferredValue'; 47677 warnInvalidHookAccess(); 47678 mountHookTypesDev(); 47679 return mountDeferredValue(value); 47680 }, 47681 useTransition: function () { 47682 currentHookNameInDev = 'useTransition'; 47683 warnInvalidHookAccess(); 47684 mountHookTypesDev(); 47685 return mountTransition(); 47686 }, 47687 useMutableSource: function (source, getSnapshot, subscribe) { 47688 currentHookNameInDev = 'useMutableSource'; 47689 warnInvalidHookAccess(); 47690 mountHookTypesDev(); 47691 return mountMutableSource(source, getSnapshot, subscribe); 47692 }, 47693 useOpaqueIdentifier: function () { 47694 currentHookNameInDev = 'useOpaqueIdentifier'; 47695 warnInvalidHookAccess(); 47696 mountHookTypesDev(); 47697 return mountOpaqueIdentifier(); 47698 }, 47699 unstable_isNewReconciler: enableNewReconciler 47700 }; 47701 InvalidNestedHooksDispatcherOnUpdateInDEV = { 47702 readContext: function (context, observedBits) { 47703 warnInvalidContextAccess(); 47704 return readContext(context, observedBits); 47705 }, 47706 useCallback: function (callback, deps) { 47707 currentHookNameInDev = 'useCallback'; 47708 warnInvalidHookAccess(); 47709 updateHookTypesDev(); 47710 return updateCallback(callback, deps); 47711 }, 47712 useContext: function (context, observedBits) { 47713 currentHookNameInDev = 'useContext'; 47714 warnInvalidHookAccess(); 47715 updateHookTypesDev(); 47716 return readContext(context, observedBits); 47717 }, 47718 useEffect: function (create, deps) { 47719 currentHookNameInDev = 'useEffect'; 47720 warnInvalidHookAccess(); 47721 updateHookTypesDev(); 47722 return updateEffect(create, deps); 47723 }, 47724 useImperativeHandle: function (ref, create, deps) { 47725 currentHookNameInDev = 'useImperativeHandle'; 47726 warnInvalidHookAccess(); 47727 updateHookTypesDev(); 47728 return updateImperativeHandle(ref, create, deps); 47729 }, 47730 useLayoutEffect: function (create, deps) { 47731 currentHookNameInDev = 'useLayoutEffect'; 47732 warnInvalidHookAccess(); 47733 updateHookTypesDev(); 47734 return updateLayoutEffect(create, deps); 47735 }, 47736 useMemo: function (create, deps) { 47737 currentHookNameInDev = 'useMemo'; 47738 warnInvalidHookAccess(); 47739 updateHookTypesDev(); 47740 var prevDispatcher = ReactCurrentDispatcher$1.current; 47741 ReactCurrentDispatcher$1.current = InvalidNestedHooksDispatcherOnUpdateInDEV; 47742 47743 try { 47744 return updateMemo(create, deps); 47745 } finally { 47746 ReactCurrentDispatcher$1.current = prevDispatcher; 47747 } 47748 }, 47749 useReducer: function (reducer, initialArg, init) { 47750 currentHookNameInDev = 'useReducer'; 47751 warnInvalidHookAccess(); 47752 updateHookTypesDev(); 47753 var prevDispatcher = ReactCurrentDispatcher$1.current; 47754 ReactCurrentDispatcher$1.current = InvalidNestedHooksDispatcherOnUpdateInDEV; 47755 47756 try { 47757 return updateReducer(reducer, initialArg, init); 47758 } finally { 47759 ReactCurrentDispatcher$1.current = prevDispatcher; 47760 } 47761 }, 47762 useRef: function (initialValue) { 47763 currentHookNameInDev = 'useRef'; 47764 warnInvalidHookAccess(); 47765 updateHookTypesDev(); 47766 return updateRef(); 47767 }, 47768 useState: function (initialState) { 47769 currentHookNameInDev = 'useState'; 47770 warnInvalidHookAccess(); 47771 updateHookTypesDev(); 47772 var prevDispatcher = ReactCurrentDispatcher$1.current; 47773 ReactCurrentDispatcher$1.current = InvalidNestedHooksDispatcherOnUpdateInDEV; 47774 47775 try { 47776 return updateState(initialState); 47777 } finally { 47778 ReactCurrentDispatcher$1.current = prevDispatcher; 47779 } 47780 }, 47781 useDebugValue: function (value, formatterFn) { 47782 currentHookNameInDev = 'useDebugValue'; 47783 warnInvalidHookAccess(); 47784 updateHookTypesDev(); 47785 return updateDebugValue(); 47786 }, 47787 useDeferredValue: function (value) { 47788 currentHookNameInDev = 'useDeferredValue'; 47789 warnInvalidHookAccess(); 47790 updateHookTypesDev(); 47791 return updateDeferredValue(value); 47792 }, 47793 useTransition: function () { 47794 currentHookNameInDev = 'useTransition'; 47795 warnInvalidHookAccess(); 47796 updateHookTypesDev(); 47797 return updateTransition(); 47798 }, 47799 useMutableSource: function (source, getSnapshot, subscribe) { 47800 currentHookNameInDev = 'useMutableSource'; 47801 warnInvalidHookAccess(); 47802 updateHookTypesDev(); 47803 return updateMutableSource(source, getSnapshot, subscribe); 47804 }, 47805 useOpaqueIdentifier: function () { 47806 currentHookNameInDev = 'useOpaqueIdentifier'; 47807 warnInvalidHookAccess(); 47808 updateHookTypesDev(); 47809 return updateOpaqueIdentifier(); 47810 }, 47811 unstable_isNewReconciler: enableNewReconciler 47812 }; 47813 InvalidNestedHooksDispatcherOnRerenderInDEV = { 47814 readContext: function (context, observedBits) { 47815 warnInvalidContextAccess(); 47816 return readContext(context, observedBits); 47817 }, 47818 useCallback: function (callback, deps) { 47819 currentHookNameInDev = 'useCallback'; 47820 warnInvalidHookAccess(); 47821 updateHookTypesDev(); 47822 return updateCallback(callback, deps); 47823 }, 47824 useContext: function (context, observedBits) { 47825 currentHookNameInDev = 'useContext'; 47826 warnInvalidHookAccess(); 47827 updateHookTypesDev(); 47828 return readContext(context, observedBits); 47829 }, 47830 useEffect: function (create, deps) { 47831 currentHookNameInDev = 'useEffect'; 47832 warnInvalidHookAccess(); 47833 updateHookTypesDev(); 47834 return updateEffect(create, deps); 47835 }, 47836 useImperativeHandle: function (ref, create, deps) { 47837 currentHookNameInDev = 'useImperativeHandle'; 47838 warnInvalidHookAccess(); 47839 updateHookTypesDev(); 47840 return updateImperativeHandle(ref, create, deps); 47841 }, 47842 useLayoutEffect: function (create, deps) { 47843 currentHookNameInDev = 'useLayoutEffect'; 47844 warnInvalidHookAccess(); 47845 updateHookTypesDev(); 47846 return updateLayoutEffect(create, deps); 47847 }, 47848 useMemo: function (create, deps) { 47849 currentHookNameInDev = 'useMemo'; 47850 warnInvalidHookAccess(); 47851 updateHookTypesDev(); 47852 var prevDispatcher = ReactCurrentDispatcher$1.current; 47853 ReactCurrentDispatcher$1.current = InvalidNestedHooksDispatcherOnUpdateInDEV; 47854 47855 try { 47856 return updateMemo(create, deps); 47857 } finally { 47858 ReactCurrentDispatcher$1.current = prevDispatcher; 47859 } 47860 }, 47861 useReducer: function (reducer, initialArg, init) { 47862 currentHookNameInDev = 'useReducer'; 47863 warnInvalidHookAccess(); 47864 updateHookTypesDev(); 47865 var prevDispatcher = ReactCurrentDispatcher$1.current; 47866 ReactCurrentDispatcher$1.current = InvalidNestedHooksDispatcherOnUpdateInDEV; 47867 47868 try { 47869 return rerenderReducer(reducer, initialArg, init); 47870 } finally { 47871 ReactCurrentDispatcher$1.current = prevDispatcher; 47872 } 47873 }, 47874 useRef: function (initialValue) { 47875 currentHookNameInDev = 'useRef'; 47876 warnInvalidHookAccess(); 47877 updateHookTypesDev(); 47878 return updateRef(); 47879 }, 47880 useState: function (initialState) { 47881 currentHookNameInDev = 'useState'; 47882 warnInvalidHookAccess(); 47883 updateHookTypesDev(); 47884 var prevDispatcher = ReactCurrentDispatcher$1.current; 47885 ReactCurrentDispatcher$1.current = InvalidNestedHooksDispatcherOnUpdateInDEV; 47886 47887 try { 47888 return rerenderState(initialState); 47889 } finally { 47890 ReactCurrentDispatcher$1.current = prevDispatcher; 47891 } 47892 }, 47893 useDebugValue: function (value, formatterFn) { 47894 currentHookNameInDev = 'useDebugValue'; 47895 warnInvalidHookAccess(); 47896 updateHookTypesDev(); 47897 return updateDebugValue(); 47898 }, 47899 useDeferredValue: function (value) { 47900 currentHookNameInDev = 'useDeferredValue'; 47901 warnInvalidHookAccess(); 47902 updateHookTypesDev(); 47903 return rerenderDeferredValue(value); 47904 }, 47905 useTransition: function () { 47906 currentHookNameInDev = 'useTransition'; 47907 warnInvalidHookAccess(); 47908 updateHookTypesDev(); 47909 return rerenderTransition(); 47910 }, 47911 useMutableSource: function (source, getSnapshot, subscribe) { 47912 currentHookNameInDev = 'useMutableSource'; 47913 warnInvalidHookAccess(); 47914 updateHookTypesDev(); 47915 return updateMutableSource(source, getSnapshot, subscribe); 47916 }, 47917 useOpaqueIdentifier: function () { 47918 currentHookNameInDev = 'useOpaqueIdentifier'; 47919 warnInvalidHookAccess(); 47920 updateHookTypesDev(); 47921 return rerenderOpaqueIdentifier(); 47922 }, 47923 unstable_isNewReconciler: enableNewReconciler 47924 }; 47925} 47926 47927var now$1 = Scheduler.unstable_now; 47928var commitTime = 0; 47929var profilerStartTime = -1; 47930 47931function getCommitTime() { 47932 return commitTime; 47933} 47934 47935function recordCommitTime() { 47936 47937 commitTime = now$1(); 47938} 47939 47940function startProfilerTimer(fiber) { 47941 47942 profilerStartTime = now$1(); 47943 47944 if (fiber.actualStartTime < 0) { 47945 fiber.actualStartTime = now$1(); 47946 } 47947} 47948 47949function stopProfilerTimerIfRunning(fiber) { 47950 47951 profilerStartTime = -1; 47952} 47953 47954function stopProfilerTimerIfRunningAndRecordDelta(fiber, overrideBaseTime) { 47955 47956 if (profilerStartTime >= 0) { 47957 var elapsedTime = now$1() - profilerStartTime; 47958 fiber.actualDuration += elapsedTime; 47959 47960 if (overrideBaseTime) { 47961 fiber.selfBaseDuration = elapsedTime; 47962 } 47963 47964 profilerStartTime = -1; 47965 } 47966} 47967 47968function transferActualDuration(fiber) { 47969 // Transfer time spent rendering these children so we don't lose it 47970 // after we rerender. This is used as a helper in special cases 47971 // where we should count the work of multiple passes. 47972 var child = fiber.child; 47973 47974 while (child) { 47975 fiber.actualDuration += child.actualDuration; 47976 child = child.sibling; 47977 } 47978} 47979 47980var ReactCurrentOwner$1 = ReactSharedInternals.ReactCurrentOwner; 47981var didReceiveUpdate = false; 47982var didWarnAboutBadClass; 47983var didWarnAboutModulePatternComponent; 47984var didWarnAboutContextTypeOnFunctionComponent; 47985var didWarnAboutGetDerivedStateOnFunctionComponent; 47986var didWarnAboutFunctionRefs; 47987var didWarnAboutReassigningProps; 47988var didWarnAboutRevealOrder; 47989var didWarnAboutTailOptions; 47990 47991{ 47992 didWarnAboutBadClass = {}; 47993 didWarnAboutModulePatternComponent = {}; 47994 didWarnAboutContextTypeOnFunctionComponent = {}; 47995 didWarnAboutGetDerivedStateOnFunctionComponent = {}; 47996 didWarnAboutFunctionRefs = {}; 47997 didWarnAboutReassigningProps = false; 47998 didWarnAboutRevealOrder = {}; 47999 didWarnAboutTailOptions = {}; 48000} 48001 48002function reconcileChildren(current, workInProgress, nextChildren, renderLanes) { 48003 if (current === null) { 48004 // If this is a fresh new component that hasn't been rendered yet, we 48005 // won't update its child set by applying minimal side-effects. Instead, 48006 // we will add them all to the child before it gets rendered. That means 48007 // we can optimize this reconciliation pass by not tracking side-effects. 48008 workInProgress.child = mountChildFibers(workInProgress, null, nextChildren, renderLanes); 48009 } else { 48010 // If the current child is the same as the work in progress, it means that 48011 // we haven't yet started any work on these children. Therefore, we use 48012 // the clone algorithm to create a copy of all the current children. 48013 // If we had any progressed work already, that is invalid at this point so 48014 // let's throw it out. 48015 workInProgress.child = reconcileChildFibers(workInProgress, current.child, nextChildren, renderLanes); 48016 } 48017} 48018 48019function forceUnmountCurrentAndReconcile(current, workInProgress, nextChildren, renderLanes) { 48020 // This function is fork of reconcileChildren. It's used in cases where we 48021 // want to reconcile without matching against the existing set. This has the 48022 // effect of all current children being unmounted; even if the type and key 48023 // are the same, the old child is unmounted and a new child is created. 48024 // 48025 // To do this, we're going to go through the reconcile algorithm twice. In 48026 // the first pass, we schedule a deletion for all the current children by 48027 // passing null. 48028 workInProgress.child = reconcileChildFibers(workInProgress, current.child, null, renderLanes); // In the second pass, we mount the new children. The trick here is that we 48029 // pass null in place of where we usually pass the current child set. This has 48030 // the effect of remounting all children regardless of whether their 48031 // identities match. 48032 48033 workInProgress.child = reconcileChildFibers(workInProgress, null, nextChildren, renderLanes); 48034} 48035 48036function updateForwardRef(current, workInProgress, Component, nextProps, renderLanes) { 48037 // TODO: current can be non-null here even if the component 48038 // hasn't yet mounted. This happens after the first render suspends. 48039 // We'll need to figure out if this is fine or can cause issues. 48040 { 48041 if (workInProgress.type !== workInProgress.elementType) { 48042 // Lazy component props can't be validated in createElement 48043 // because they're only guaranteed to be resolved here. 48044 var innerPropTypes = Component.propTypes; 48045 48046 if (innerPropTypes) { 48047 checkPropTypes(innerPropTypes, nextProps, // Resolved props 48048 'prop', getComponentName(Component)); 48049 } 48050 } 48051 } 48052 48053 var render = Component.render; 48054 var ref = workInProgress.ref; // The rest is a fork of updateFunctionComponent 48055 48056 var nextChildren; 48057 prepareToReadContext(workInProgress, renderLanes); 48058 48059 { 48060 ReactCurrentOwner$1.current = workInProgress; 48061 setIsRendering(true); 48062 nextChildren = renderWithHooks(current, workInProgress, render, nextProps, ref, renderLanes); 48063 48064 if ( workInProgress.mode & StrictMode) { 48065 disableLogs(); 48066 48067 try { 48068 nextChildren = renderWithHooks(current, workInProgress, render, nextProps, ref, renderLanes); 48069 } finally { 48070 reenableLogs(); 48071 } 48072 } 48073 48074 setIsRendering(false); 48075 } 48076 48077 if (current !== null && !didReceiveUpdate) { 48078 bailoutHooks(current, workInProgress, renderLanes); 48079 return bailoutOnAlreadyFinishedWork(current, workInProgress, renderLanes); 48080 } // React DevTools reads this flag. 48081 48082 48083 workInProgress.flags |= PerformedWork; 48084 reconcileChildren(current, workInProgress, nextChildren, renderLanes); 48085 return workInProgress.child; 48086} 48087 48088function updateMemoComponent(current, workInProgress, Component, nextProps, updateLanes, renderLanes) { 48089 if (current === null) { 48090 var type = Component.type; 48091 48092 if (isSimpleFunctionComponent(type) && Component.compare === null && // SimpleMemoComponent codepath doesn't resolve outer props either. 48093 Component.defaultProps === undefined) { 48094 var resolvedType = type; 48095 48096 { 48097 resolvedType = resolveFunctionForHotReloading(type); 48098 } // If this is a plain function component without default props, 48099 // and with only the default shallow comparison, we upgrade it 48100 // to a SimpleMemoComponent to allow fast path updates. 48101 48102 48103 workInProgress.tag = SimpleMemoComponent; 48104 workInProgress.type = resolvedType; 48105 48106 { 48107 validateFunctionComponentInDev(workInProgress, type); 48108 } 48109 48110 return updateSimpleMemoComponent(current, workInProgress, resolvedType, nextProps, updateLanes, renderLanes); 48111 } 48112 48113 { 48114 var innerPropTypes = type.propTypes; 48115 48116 if (innerPropTypes) { 48117 // Inner memo component props aren't currently validated in createElement. 48118 // We could move it there, but we'd still need this for lazy code path. 48119 checkPropTypes(innerPropTypes, nextProps, // Resolved props 48120 'prop', getComponentName(type)); 48121 } 48122 } 48123 48124 var child = createFiberFromTypeAndProps(Component.type, null, nextProps, workInProgress, workInProgress.mode, renderLanes); 48125 child.ref = workInProgress.ref; 48126 child.return = workInProgress; 48127 workInProgress.child = child; 48128 return child; 48129 } 48130 48131 { 48132 var _type = Component.type; 48133 var _innerPropTypes = _type.propTypes; 48134 48135 if (_innerPropTypes) { 48136 // Inner memo component props aren't currently validated in createElement. 48137 // We could move it there, but we'd still need this for lazy code path. 48138 checkPropTypes(_innerPropTypes, nextProps, // Resolved props 48139 'prop', getComponentName(_type)); 48140 } 48141 } 48142 48143 var currentChild = current.child; // This is always exactly one child 48144 48145 if (!includesSomeLane(updateLanes, renderLanes)) { 48146 // This will be the props with resolved defaultProps, 48147 // unlike current.memoizedProps which will be the unresolved ones. 48148 var prevProps = currentChild.memoizedProps; // Default to shallow comparison 48149 48150 var compare = Component.compare; 48151 compare = compare !== null ? compare : shallowEqual; 48152 48153 if (compare(prevProps, nextProps) && current.ref === workInProgress.ref) { 48154 return bailoutOnAlreadyFinishedWork(current, workInProgress, renderLanes); 48155 } 48156 } // React DevTools reads this flag. 48157 48158 48159 workInProgress.flags |= PerformedWork; 48160 var newChild = createWorkInProgress(currentChild, nextProps); 48161 newChild.ref = workInProgress.ref; 48162 newChild.return = workInProgress; 48163 workInProgress.child = newChild; 48164 return newChild; 48165} 48166 48167function updateSimpleMemoComponent(current, workInProgress, Component, nextProps, updateLanes, renderLanes) { 48168 // TODO: current can be non-null here even if the component 48169 // hasn't yet mounted. This happens when the inner render suspends. 48170 // We'll need to figure out if this is fine or can cause issues. 48171 { 48172 if (workInProgress.type !== workInProgress.elementType) { 48173 // Lazy component props can't be validated in createElement 48174 // because they're only guaranteed to be resolved here. 48175 var outerMemoType = workInProgress.elementType; 48176 48177 if (outerMemoType.$$typeof === REACT_LAZY_TYPE) { 48178 // We warn when you define propTypes on lazy() 48179 // so let's just skip over it to find memo() outer wrapper. 48180 // Inner props for memo are validated later. 48181 var lazyComponent = outerMemoType; 48182 var payload = lazyComponent._payload; 48183 var init = lazyComponent._init; 48184 48185 try { 48186 outerMemoType = init(payload); 48187 } catch (x) { 48188 outerMemoType = null; 48189 } // Inner propTypes will be validated in the function component path. 48190 48191 48192 var outerPropTypes = outerMemoType && outerMemoType.propTypes; 48193 48194 if (outerPropTypes) { 48195 checkPropTypes(outerPropTypes, nextProps, // Resolved (SimpleMemoComponent has no defaultProps) 48196 'prop', getComponentName(outerMemoType)); 48197 } 48198 } 48199 } 48200 } 48201 48202 if (current !== null) { 48203 var prevProps = current.memoizedProps; 48204 48205 if (shallowEqual(prevProps, nextProps) && current.ref === workInProgress.ref && ( // Prevent bailout if the implementation changed due to hot reload. 48206 workInProgress.type === current.type )) { 48207 didReceiveUpdate = false; 48208 48209 if (!includesSomeLane(renderLanes, updateLanes)) { 48210 // The pending lanes were cleared at the beginning of beginWork. We're 48211 // about to bail out, but there might be other lanes that weren't 48212 // included in the current render. Usually, the priority level of the 48213 // remaining updates is accumlated during the evaluation of the 48214 // component (i.e. when processing the update queue). But since since 48215 // we're bailing out early *without* evaluating the component, we need 48216 // to account for it here, too. Reset to the value of the current fiber. 48217 // NOTE: This only applies to SimpleMemoComponent, not MemoComponent, 48218 // because a MemoComponent fiber does not have hooks or an update queue; 48219 // rather, it wraps around an inner component, which may or may not 48220 // contains hooks. 48221 // TODO: Move the reset at in beginWork out of the common path so that 48222 // this is no longer necessary. 48223 workInProgress.lanes = current.lanes; 48224 return bailoutOnAlreadyFinishedWork(current, workInProgress, renderLanes); 48225 } else if ((current.flags & ForceUpdateForLegacySuspense) !== NoFlags) { 48226 // This is a special case that only exists for legacy mode. 48227 // See https://github.com/facebook/react/pull/19216. 48228 didReceiveUpdate = true; 48229 } 48230 } 48231 } 48232 48233 return updateFunctionComponent(current, workInProgress, Component, nextProps, renderLanes); 48234} 48235 48236function updateOffscreenComponent(current, workInProgress, renderLanes) { 48237 var nextProps = workInProgress.pendingProps; 48238 var nextChildren = nextProps.children; 48239 var prevState = current !== null ? current.memoizedState : null; 48240 48241 if (nextProps.mode === 'hidden' || nextProps.mode === 'unstable-defer-without-hiding') { 48242 if ((workInProgress.mode & ConcurrentMode) === NoMode) { 48243 // In legacy sync mode, don't defer the subtree. Render it now. 48244 // TODO: Figure out what we should do in Blocking mode. 48245 var nextState = { 48246 baseLanes: NoLanes 48247 }; 48248 workInProgress.memoizedState = nextState; 48249 pushRenderLanes(workInProgress, renderLanes); 48250 } else if (!includesSomeLane(renderLanes, OffscreenLane)) { 48251 var nextBaseLanes; 48252 48253 if (prevState !== null) { 48254 var prevBaseLanes = prevState.baseLanes; 48255 nextBaseLanes = mergeLanes(prevBaseLanes, renderLanes); 48256 } else { 48257 nextBaseLanes = renderLanes; 48258 } // Schedule this fiber to re-render at offscreen priority. Then bailout. 48259 48260 48261 { 48262 markSpawnedWork(OffscreenLane); 48263 } 48264 48265 workInProgress.lanes = workInProgress.childLanes = laneToLanes(OffscreenLane); 48266 var _nextState = { 48267 baseLanes: nextBaseLanes 48268 }; 48269 workInProgress.memoizedState = _nextState; // We're about to bail out, but we need to push this to the stack anyway 48270 // to avoid a push/pop misalignment. 48271 48272 pushRenderLanes(workInProgress, nextBaseLanes); 48273 return null; 48274 } else { 48275 // Rendering at offscreen, so we can clear the base lanes. 48276 var _nextState2 = { 48277 baseLanes: NoLanes 48278 }; 48279 workInProgress.memoizedState = _nextState2; // Push the lanes that were skipped when we bailed out. 48280 48281 var subtreeRenderLanes = prevState !== null ? prevState.baseLanes : renderLanes; 48282 pushRenderLanes(workInProgress, subtreeRenderLanes); 48283 } 48284 } else { 48285 var _subtreeRenderLanes; 48286 48287 if (prevState !== null) { 48288 _subtreeRenderLanes = mergeLanes(prevState.baseLanes, renderLanes); // Since we're not hidden anymore, reset the state 48289 48290 workInProgress.memoizedState = null; 48291 } else { 48292 // We weren't previously hidden, and we still aren't, so there's nothing 48293 // special to do. Need to push to the stack regardless, though, to avoid 48294 // a push/pop misalignment. 48295 _subtreeRenderLanes = renderLanes; 48296 } 48297 48298 pushRenderLanes(workInProgress, _subtreeRenderLanes); 48299 } 48300 48301 reconcileChildren(current, workInProgress, nextChildren, renderLanes); 48302 return workInProgress.child; 48303} // Note: These happen to have identical begin phases, for now. We shouldn't hold 48304// ourselves to this constraint, though. If the behavior diverges, we should 48305// fork the function. 48306 48307 48308var updateLegacyHiddenComponent = updateOffscreenComponent; 48309 48310function updateFragment(current, workInProgress, renderLanes) { 48311 var nextChildren = workInProgress.pendingProps; 48312 reconcileChildren(current, workInProgress, nextChildren, renderLanes); 48313 return workInProgress.child; 48314} 48315 48316function updateMode(current, workInProgress, renderLanes) { 48317 var nextChildren = workInProgress.pendingProps.children; 48318 reconcileChildren(current, workInProgress, nextChildren, renderLanes); 48319 return workInProgress.child; 48320} 48321 48322function updateProfiler(current, workInProgress, renderLanes) { 48323 { 48324 workInProgress.flags |= Update; // Reset effect durations for the next eventual effect phase. 48325 // These are reset during render to allow the DevTools commit hook a chance to read them, 48326 48327 var stateNode = workInProgress.stateNode; 48328 stateNode.effectDuration = 0; 48329 stateNode.passiveEffectDuration = 0; 48330 } 48331 48332 var nextProps = workInProgress.pendingProps; 48333 var nextChildren = nextProps.children; 48334 reconcileChildren(current, workInProgress, nextChildren, renderLanes); 48335 return workInProgress.child; 48336} 48337 48338function markRef(current, workInProgress) { 48339 var ref = workInProgress.ref; 48340 48341 if (current === null && ref !== null || current !== null && current.ref !== ref) { 48342 // Schedule a Ref effect 48343 workInProgress.flags |= Ref; 48344 } 48345} 48346 48347function updateFunctionComponent(current, workInProgress, Component, nextProps, renderLanes) { 48348 { 48349 if (workInProgress.type !== workInProgress.elementType) { 48350 // Lazy component props can't be validated in createElement 48351 // because they're only guaranteed to be resolved here. 48352 var innerPropTypes = Component.propTypes; 48353 48354 if (innerPropTypes) { 48355 checkPropTypes(innerPropTypes, nextProps, // Resolved props 48356 'prop', getComponentName(Component)); 48357 } 48358 } 48359 } 48360 48361 var context; 48362 48363 { 48364 var unmaskedContext = getUnmaskedContext(workInProgress, Component, true); 48365 context = getMaskedContext(workInProgress, unmaskedContext); 48366 } 48367 48368 var nextChildren; 48369 prepareToReadContext(workInProgress, renderLanes); 48370 48371 { 48372 ReactCurrentOwner$1.current = workInProgress; 48373 setIsRendering(true); 48374 nextChildren = renderWithHooks(current, workInProgress, Component, nextProps, context, renderLanes); 48375 48376 if ( workInProgress.mode & StrictMode) { 48377 disableLogs(); 48378 48379 try { 48380 nextChildren = renderWithHooks(current, workInProgress, Component, nextProps, context, renderLanes); 48381 } finally { 48382 reenableLogs(); 48383 } 48384 } 48385 48386 setIsRendering(false); 48387 } 48388 48389 if (current !== null && !didReceiveUpdate) { 48390 bailoutHooks(current, workInProgress, renderLanes); 48391 return bailoutOnAlreadyFinishedWork(current, workInProgress, renderLanes); 48392 } // React DevTools reads this flag. 48393 48394 48395 workInProgress.flags |= PerformedWork; 48396 reconcileChildren(current, workInProgress, nextChildren, renderLanes); 48397 return workInProgress.child; 48398} 48399 48400function updateClassComponent(current, workInProgress, Component, nextProps, renderLanes) { 48401 { 48402 if (workInProgress.type !== workInProgress.elementType) { 48403 // Lazy component props can't be validated in createElement 48404 // because they're only guaranteed to be resolved here. 48405 var innerPropTypes = Component.propTypes; 48406 48407 if (innerPropTypes) { 48408 checkPropTypes(innerPropTypes, nextProps, // Resolved props 48409 'prop', getComponentName(Component)); 48410 } 48411 } 48412 } // Push context providers early to prevent context stack mismatches. 48413 // During mounting we don't know the child context yet as the instance doesn't exist. 48414 // We will invalidate the child context in finishClassComponent() right after rendering. 48415 48416 48417 var hasContext; 48418 48419 if (isContextProvider(Component)) { 48420 hasContext = true; 48421 pushContextProvider(workInProgress); 48422 } else { 48423 hasContext = false; 48424 } 48425 48426 prepareToReadContext(workInProgress, renderLanes); 48427 var instance = workInProgress.stateNode; 48428 var shouldUpdate; 48429 48430 if (instance === null) { 48431 if (current !== null) { 48432 // A class component without an instance only mounts if it suspended 48433 // inside a non-concurrent tree, in an inconsistent state. We want to 48434 // treat it like a new mount, even though an empty version of it already 48435 // committed. Disconnect the alternate pointers. 48436 current.alternate = null; 48437 workInProgress.alternate = null; // Since this is conceptually a new fiber, schedule a Placement effect 48438 48439 workInProgress.flags |= Placement; 48440 } // In the initial pass we might need to construct the instance. 48441 48442 48443 constructClassInstance(workInProgress, Component, nextProps); 48444 mountClassInstance(workInProgress, Component, nextProps, renderLanes); 48445 shouldUpdate = true; 48446 } else if (current === null) { 48447 // In a resume, we'll already have an instance we can reuse. 48448 shouldUpdate = resumeMountClassInstance(workInProgress, Component, nextProps, renderLanes); 48449 } else { 48450 shouldUpdate = updateClassInstance(current, workInProgress, Component, nextProps, renderLanes); 48451 } 48452 48453 var nextUnitOfWork = finishClassComponent(current, workInProgress, Component, shouldUpdate, hasContext, renderLanes); 48454 48455 { 48456 var inst = workInProgress.stateNode; 48457 48458 if (shouldUpdate && inst.props !== nextProps) { 48459 if (!didWarnAboutReassigningProps) { 48460 error('It looks like %s is reassigning its own `this.props` while rendering. ' + 'This is not supported and can lead to confusing bugs.', getComponentName(workInProgress.type) || 'a component'); 48461 } 48462 48463 didWarnAboutReassigningProps = true; 48464 } 48465 } 48466 48467 return nextUnitOfWork; 48468} 48469 48470function finishClassComponent(current, workInProgress, Component, shouldUpdate, hasContext, renderLanes) { 48471 // Refs should update even if shouldComponentUpdate returns false 48472 markRef(current, workInProgress); 48473 var didCaptureError = (workInProgress.flags & DidCapture) !== NoFlags; 48474 48475 if (!shouldUpdate && !didCaptureError) { 48476 // Context providers should defer to sCU for rendering 48477 if (hasContext) { 48478 invalidateContextProvider(workInProgress, Component, false); 48479 } 48480 48481 return bailoutOnAlreadyFinishedWork(current, workInProgress, renderLanes); 48482 } 48483 48484 var instance = workInProgress.stateNode; // Rerender 48485 48486 ReactCurrentOwner$1.current = workInProgress; 48487 var nextChildren; 48488 48489 if (didCaptureError && typeof Component.getDerivedStateFromError !== 'function') { 48490 // If we captured an error, but getDerivedStateFromError is not defined, 48491 // unmount all the children. componentDidCatch will schedule an update to 48492 // re-render a fallback. This is temporary until we migrate everyone to 48493 // the new API. 48494 // TODO: Warn in a future release. 48495 nextChildren = null; 48496 48497 { 48498 stopProfilerTimerIfRunning(); 48499 } 48500 } else { 48501 { 48502 setIsRendering(true); 48503 nextChildren = instance.render(); 48504 48505 if ( workInProgress.mode & StrictMode) { 48506 disableLogs(); 48507 48508 try { 48509 instance.render(); 48510 } finally { 48511 reenableLogs(); 48512 } 48513 } 48514 48515 setIsRendering(false); 48516 } 48517 } // React DevTools reads this flag. 48518 48519 48520 workInProgress.flags |= PerformedWork; 48521 48522 if (current !== null && didCaptureError) { 48523 // If we're recovering from an error, reconcile without reusing any of 48524 // the existing children. Conceptually, the normal children and the children 48525 // that are shown on error are two different sets, so we shouldn't reuse 48526 // normal children even if their identities match. 48527 forceUnmountCurrentAndReconcile(current, workInProgress, nextChildren, renderLanes); 48528 } else { 48529 reconcileChildren(current, workInProgress, nextChildren, renderLanes); 48530 } // Memoize state using the values we just used to render. 48531 // TODO: Restructure so we never read values from the instance. 48532 48533 48534 workInProgress.memoizedState = instance.state; // The context might have changed so we need to recalculate it. 48535 48536 if (hasContext) { 48537 invalidateContextProvider(workInProgress, Component, true); 48538 } 48539 48540 return workInProgress.child; 48541} 48542 48543function pushHostRootContext(workInProgress) { 48544 var root = workInProgress.stateNode; 48545 48546 if (root.pendingContext) { 48547 pushTopLevelContextObject(workInProgress, root.pendingContext, root.pendingContext !== root.context); 48548 } else if (root.context) { 48549 // Should always be set 48550 pushTopLevelContextObject(workInProgress, root.context, false); 48551 } 48552 48553 pushHostContainer(workInProgress, root.containerInfo); 48554} 48555 48556function updateHostRoot(current, workInProgress, renderLanes) { 48557 pushHostRootContext(workInProgress); 48558 var updateQueue = workInProgress.updateQueue; 48559 48560 if (!(current !== null && updateQueue !== null)) { 48561 { 48562 throw Error( "If the root does not have an updateQueue, we should have already bailed out. This error is likely caused by a bug in React. Please file an issue." ); 48563 } 48564 } 48565 48566 var nextProps = workInProgress.pendingProps; 48567 var prevState = workInProgress.memoizedState; 48568 var prevChildren = prevState !== null ? prevState.element : null; 48569 cloneUpdateQueue(current, workInProgress); 48570 processUpdateQueue(workInProgress, nextProps, null, renderLanes); 48571 var nextState = workInProgress.memoizedState; // Caution: React DevTools currently depends on this property 48572 // being called "element". 48573 48574 var nextChildren = nextState.element; 48575 48576 if (nextChildren === prevChildren) { 48577 resetHydrationState(); 48578 return bailoutOnAlreadyFinishedWork(current, workInProgress, renderLanes); 48579 } 48580 48581 var root = workInProgress.stateNode; 48582 48583 if (root.hydrate && enterHydrationState(workInProgress)) { 48584 // If we don't have any current children this might be the first pass. 48585 // We always try to hydrate. If this isn't a hydration pass there won't 48586 // be any children to hydrate which is effectively the same thing as 48587 // not hydrating. 48588 { 48589 var mutableSourceEagerHydrationData = root.mutableSourceEagerHydrationData; 48590 48591 if (mutableSourceEagerHydrationData != null) { 48592 for (var i = 0; i < mutableSourceEagerHydrationData.length; i += 2) { 48593 var mutableSource = mutableSourceEagerHydrationData[i]; 48594 var version = mutableSourceEagerHydrationData[i + 1]; 48595 setWorkInProgressVersion(mutableSource, version); 48596 } 48597 } 48598 } 48599 48600 var child = mountChildFibers(workInProgress, null, nextChildren, renderLanes); 48601 workInProgress.child = child; 48602 var node = child; 48603 48604 while (node) { 48605 // Mark each child as hydrating. This is a fast path to know whether this 48606 // tree is part of a hydrating tree. This is used to determine if a child 48607 // node has fully mounted yet, and for scheduling event replaying. 48608 // Conceptually this is similar to Placement in that a new subtree is 48609 // inserted into the React tree here. It just happens to not need DOM 48610 // mutations because it already exists. 48611 node.flags = node.flags & ~Placement | Hydrating; 48612 node = node.sibling; 48613 } 48614 } else { 48615 // Otherwise reset hydration state in case we aborted and resumed another 48616 // root. 48617 reconcileChildren(current, workInProgress, nextChildren, renderLanes); 48618 resetHydrationState(); 48619 } 48620 48621 return workInProgress.child; 48622} 48623 48624function updateHostComponent(current, workInProgress, renderLanes) { 48625 pushHostContext(workInProgress); 48626 48627 if (current === null) { 48628 tryToClaimNextHydratableInstance(workInProgress); 48629 } 48630 48631 var type = workInProgress.type; 48632 var nextProps = workInProgress.pendingProps; 48633 var prevProps = current !== null ? current.memoizedProps : null; 48634 var nextChildren = nextProps.children; 48635 var isDirectTextChild = shouldSetTextContent(type, nextProps); 48636 48637 if (isDirectTextChild) { 48638 // We special case a direct text child of a host node. This is a common 48639 // case. We won't handle it as a reified child. We will instead handle 48640 // this in the host environment that also has access to this prop. That 48641 // avoids allocating another HostText fiber and traversing it. 48642 nextChildren = null; 48643 } else if (prevProps !== null && shouldSetTextContent(type, prevProps)) { 48644 // If we're switching from a direct text child to a normal child, or to 48645 // empty, we need to schedule the text content to be reset. 48646 workInProgress.flags |= ContentReset; 48647 } 48648 48649 markRef(current, workInProgress); 48650 reconcileChildren(current, workInProgress, nextChildren, renderLanes); 48651 return workInProgress.child; 48652} 48653 48654function updateHostText(current, workInProgress) { 48655 if (current === null) { 48656 tryToClaimNextHydratableInstance(workInProgress); 48657 } // Nothing to do here. This is terminal. We'll do the completion step 48658 // immediately after. 48659 48660 48661 return null; 48662} 48663 48664function mountLazyComponent(_current, workInProgress, elementType, updateLanes, renderLanes) { 48665 if (_current !== null) { 48666 // A lazy component only mounts if it suspended inside a non- 48667 // concurrent tree, in an inconsistent state. We want to treat it like 48668 // a new mount, even though an empty version of it already committed. 48669 // Disconnect the alternate pointers. 48670 _current.alternate = null; 48671 workInProgress.alternate = null; // Since this is conceptually a new fiber, schedule a Placement effect 48672 48673 workInProgress.flags |= Placement; 48674 } 48675 48676 var props = workInProgress.pendingProps; 48677 var lazyComponent = elementType; 48678 var payload = lazyComponent._payload; 48679 var init = lazyComponent._init; 48680 var Component = init(payload); // Store the unwrapped component in the type. 48681 48682 workInProgress.type = Component; 48683 var resolvedTag = workInProgress.tag = resolveLazyComponentTag(Component); 48684 var resolvedProps = resolveDefaultProps(Component, props); 48685 var child; 48686 48687 switch (resolvedTag) { 48688 case FunctionComponent: 48689 { 48690 { 48691 validateFunctionComponentInDev(workInProgress, Component); 48692 workInProgress.type = Component = resolveFunctionForHotReloading(Component); 48693 } 48694 48695 child = updateFunctionComponent(null, workInProgress, Component, resolvedProps, renderLanes); 48696 return child; 48697 } 48698 48699 case ClassComponent: 48700 { 48701 { 48702 workInProgress.type = Component = resolveClassForHotReloading(Component); 48703 } 48704 48705 child = updateClassComponent(null, workInProgress, Component, resolvedProps, renderLanes); 48706 return child; 48707 } 48708 48709 case ForwardRef: 48710 { 48711 { 48712 workInProgress.type = Component = resolveForwardRefForHotReloading(Component); 48713 } 48714 48715 child = updateForwardRef(null, workInProgress, Component, resolvedProps, renderLanes); 48716 return child; 48717 } 48718 48719 case MemoComponent: 48720 { 48721 { 48722 if (workInProgress.type !== workInProgress.elementType) { 48723 var outerPropTypes = Component.propTypes; 48724 48725 if (outerPropTypes) { 48726 checkPropTypes(outerPropTypes, resolvedProps, // Resolved for outer only 48727 'prop', getComponentName(Component)); 48728 } 48729 } 48730 } 48731 48732 child = updateMemoComponent(null, workInProgress, Component, resolveDefaultProps(Component.type, resolvedProps), // The inner type can have defaults too 48733 updateLanes, renderLanes); 48734 return child; 48735 } 48736 } 48737 48738 var hint = ''; 48739 48740 { 48741 if (Component !== null && typeof Component === 'object' && Component.$$typeof === REACT_LAZY_TYPE) { 48742 hint = ' Did you wrap a component in React.lazy() more than once?'; 48743 } 48744 } // This message intentionally doesn't mention ForwardRef or MemoComponent 48745 // because the fact that it's a separate type of work is an 48746 // implementation detail. 48747 48748 48749 { 48750 { 48751 throw Error( "Element type is invalid. Received a promise that resolves to: " + Component + ". Lazy element type must resolve to a class or function." + hint ); 48752 } 48753 } 48754} 48755 48756function mountIncompleteClassComponent(_current, workInProgress, Component, nextProps, renderLanes) { 48757 if (_current !== null) { 48758 // An incomplete component only mounts if it suspended inside a non- 48759 // concurrent tree, in an inconsistent state. We want to treat it like 48760 // a new mount, even though an empty version of it already committed. 48761 // Disconnect the alternate pointers. 48762 _current.alternate = null; 48763 workInProgress.alternate = null; // Since this is conceptually a new fiber, schedule a Placement effect 48764 48765 workInProgress.flags |= Placement; 48766 } // Promote the fiber to a class and try rendering again. 48767 48768 48769 workInProgress.tag = ClassComponent; // The rest of this function is a fork of `updateClassComponent` 48770 // Push context providers early to prevent context stack mismatches. 48771 // During mounting we don't know the child context yet as the instance doesn't exist. 48772 // We will invalidate the child context in finishClassComponent() right after rendering. 48773 48774 var hasContext; 48775 48776 if (isContextProvider(Component)) { 48777 hasContext = true; 48778 pushContextProvider(workInProgress); 48779 } else { 48780 hasContext = false; 48781 } 48782 48783 prepareToReadContext(workInProgress, renderLanes); 48784 constructClassInstance(workInProgress, Component, nextProps); 48785 mountClassInstance(workInProgress, Component, nextProps, renderLanes); 48786 return finishClassComponent(null, workInProgress, Component, true, hasContext, renderLanes); 48787} 48788 48789function mountIndeterminateComponent(_current, workInProgress, Component, renderLanes) { 48790 if (_current !== null) { 48791 // An indeterminate component only mounts if it suspended inside a non- 48792 // concurrent tree, in an inconsistent state. We want to treat it like 48793 // a new mount, even though an empty version of it already committed. 48794 // Disconnect the alternate pointers. 48795 _current.alternate = null; 48796 workInProgress.alternate = null; // Since this is conceptually a new fiber, schedule a Placement effect 48797 48798 workInProgress.flags |= Placement; 48799 } 48800 48801 var props = workInProgress.pendingProps; 48802 var context; 48803 48804 { 48805 var unmaskedContext = getUnmaskedContext(workInProgress, Component, false); 48806 context = getMaskedContext(workInProgress, unmaskedContext); 48807 } 48808 48809 prepareToReadContext(workInProgress, renderLanes); 48810 var value; 48811 48812 { 48813 if (Component.prototype && typeof Component.prototype.render === 'function') { 48814 var componentName = getComponentName(Component) || 'Unknown'; 48815 48816 if (!didWarnAboutBadClass[componentName]) { 48817 error("The <%s /> component appears to have a render method, but doesn't extend React.Component. " + 'This is likely to cause errors. Change %s to extend React.Component instead.', componentName, componentName); 48818 48819 didWarnAboutBadClass[componentName] = true; 48820 } 48821 } 48822 48823 if (workInProgress.mode & StrictMode) { 48824 ReactStrictModeWarnings.recordLegacyContextWarning(workInProgress, null); 48825 } 48826 48827 setIsRendering(true); 48828 ReactCurrentOwner$1.current = workInProgress; 48829 value = renderWithHooks(null, workInProgress, Component, props, context, renderLanes); 48830 setIsRendering(false); 48831 } // React DevTools reads this flag. 48832 48833 48834 workInProgress.flags |= PerformedWork; 48835 48836 { 48837 // Support for module components is deprecated and is removed behind a flag. 48838 // Whether or not it would crash later, we want to show a good message in DEV first. 48839 if (typeof value === 'object' && value !== null && typeof value.render === 'function' && value.$$typeof === undefined) { 48840 var _componentName = getComponentName(Component) || 'Unknown'; 48841 48842 if (!didWarnAboutModulePatternComponent[_componentName]) { 48843 error('The <%s /> component appears to be a function component that returns a class instance. ' + 'Change %s to a class that extends React.Component instead. ' + "If you can't use a class try assigning the prototype on the function as a workaround. " + "`%s.prototype = React.Component.prototype`. Don't use an arrow function since it " + 'cannot be called with `new` by React.', _componentName, _componentName, _componentName); 48844 48845 didWarnAboutModulePatternComponent[_componentName] = true; 48846 } 48847 } 48848 } 48849 48850 if ( // Run these checks in production only if the flag is off. 48851 // Eventually we'll delete this branch altogether. 48852 typeof value === 'object' && value !== null && typeof value.render === 'function' && value.$$typeof === undefined) { 48853 { 48854 var _componentName2 = getComponentName(Component) || 'Unknown'; 48855 48856 if (!didWarnAboutModulePatternComponent[_componentName2]) { 48857 error('The <%s /> component appears to be a function component that returns a class instance. ' + 'Change %s to a class that extends React.Component instead. ' + "If you can't use a class try assigning the prototype on the function as a workaround. " + "`%s.prototype = React.Component.prototype`. Don't use an arrow function since it " + 'cannot be called with `new` by React.', _componentName2, _componentName2, _componentName2); 48858 48859 didWarnAboutModulePatternComponent[_componentName2] = true; 48860 } 48861 } // Proceed under the assumption that this is a class instance 48862 48863 48864 workInProgress.tag = ClassComponent; // Throw out any hooks that were used. 48865 48866 workInProgress.memoizedState = null; 48867 workInProgress.updateQueue = null; // Push context providers early to prevent context stack mismatches. 48868 // During mounting we don't know the child context yet as the instance doesn't exist. 48869 // We will invalidate the child context in finishClassComponent() right after rendering. 48870 48871 var hasContext = false; 48872 48873 if (isContextProvider(Component)) { 48874 hasContext = true; 48875 pushContextProvider(workInProgress); 48876 } else { 48877 hasContext = false; 48878 } 48879 48880 workInProgress.memoizedState = value.state !== null && value.state !== undefined ? value.state : null; 48881 initializeUpdateQueue(workInProgress); 48882 var getDerivedStateFromProps = Component.getDerivedStateFromProps; 48883 48884 if (typeof getDerivedStateFromProps === 'function') { 48885 applyDerivedStateFromProps(workInProgress, Component, getDerivedStateFromProps, props); 48886 } 48887 48888 adoptClassInstance(workInProgress, value); 48889 mountClassInstance(workInProgress, Component, props, renderLanes); 48890 return finishClassComponent(null, workInProgress, Component, true, hasContext, renderLanes); 48891 } else { 48892 // Proceed under the assumption that this is a function component 48893 workInProgress.tag = FunctionComponent; 48894 48895 { 48896 48897 if ( workInProgress.mode & StrictMode) { 48898 disableLogs(); 48899 48900 try { 48901 value = renderWithHooks(null, workInProgress, Component, props, context, renderLanes); 48902 } finally { 48903 reenableLogs(); 48904 } 48905 } 48906 } 48907 48908 reconcileChildren(null, workInProgress, value, renderLanes); 48909 48910 { 48911 validateFunctionComponentInDev(workInProgress, Component); 48912 } 48913 48914 return workInProgress.child; 48915 } 48916} 48917 48918function validateFunctionComponentInDev(workInProgress, Component) { 48919 { 48920 if (Component) { 48921 if (Component.childContextTypes) { 48922 error('%s(...): childContextTypes cannot be defined on a function component.', Component.displayName || Component.name || 'Component'); 48923 } 48924 } 48925 48926 if (workInProgress.ref !== null) { 48927 var info = ''; 48928 var ownerName = getCurrentFiberOwnerNameInDevOrNull(); 48929 48930 if (ownerName) { 48931 info += '\n\nCheck the render method of `' + ownerName + '`.'; 48932 } 48933 48934 var warningKey = ownerName || workInProgress._debugID || ''; 48935 var debugSource = workInProgress._debugSource; 48936 48937 if (debugSource) { 48938 warningKey = debugSource.fileName + ':' + debugSource.lineNumber; 48939 } 48940 48941 if (!didWarnAboutFunctionRefs[warningKey]) { 48942 didWarnAboutFunctionRefs[warningKey] = true; 48943 48944 error('Function components cannot be given refs. ' + 'Attempts to access this ref will fail. ' + 'Did you mean to use React.forwardRef()?%s', info); 48945 } 48946 } 48947 48948 if (typeof Component.getDerivedStateFromProps === 'function') { 48949 var _componentName3 = getComponentName(Component) || 'Unknown'; 48950 48951 if (!didWarnAboutGetDerivedStateOnFunctionComponent[_componentName3]) { 48952 error('%s: Function components do not support getDerivedStateFromProps.', _componentName3); 48953 48954 didWarnAboutGetDerivedStateOnFunctionComponent[_componentName3] = true; 48955 } 48956 } 48957 48958 if (typeof Component.contextType === 'object' && Component.contextType !== null) { 48959 var _componentName4 = getComponentName(Component) || 'Unknown'; 48960 48961 if (!didWarnAboutContextTypeOnFunctionComponent[_componentName4]) { 48962 error('%s: Function components do not support contextType.', _componentName4); 48963 48964 didWarnAboutContextTypeOnFunctionComponent[_componentName4] = true; 48965 } 48966 } 48967 } 48968} 48969 48970var SUSPENDED_MARKER = { 48971 dehydrated: null, 48972 retryLane: NoLane 48973}; 48974 48975function mountSuspenseOffscreenState(renderLanes) { 48976 return { 48977 baseLanes: renderLanes 48978 }; 48979} 48980 48981function updateSuspenseOffscreenState(prevOffscreenState, renderLanes) { 48982 return { 48983 baseLanes: mergeLanes(prevOffscreenState.baseLanes, renderLanes) 48984 }; 48985} // TODO: Probably should inline this back 48986 48987 48988function shouldRemainOnFallback(suspenseContext, current, workInProgress, renderLanes) { 48989 // If we're already showing a fallback, there are cases where we need to 48990 // remain on that fallback regardless of whether the content has resolved. 48991 // For example, SuspenseList coordinates when nested content appears. 48992 if (current !== null) { 48993 var suspenseState = current.memoizedState; 48994 48995 if (suspenseState === null) { 48996 // Currently showing content. Don't hide it, even if ForceSuspenseFallack 48997 // is true. More precise name might be "ForceRemainSuspenseFallback". 48998 // Note: This is a factoring smell. Can't remain on a fallback if there's 48999 // no fallback to remain on. 49000 return false; 49001 } 49002 } // Not currently showing content. Consult the Suspense context. 49003 49004 49005 return hasSuspenseContext(suspenseContext, ForceSuspenseFallback); 49006} 49007 49008function getRemainingWorkInPrimaryTree(current, renderLanes) { 49009 // TODO: Should not remove render lanes that were pinged during this render 49010 return removeLanes(current.childLanes, renderLanes); 49011} 49012 49013function updateSuspenseComponent(current, workInProgress, renderLanes) { 49014 var nextProps = workInProgress.pendingProps; // This is used by DevTools to force a boundary to suspend. 49015 49016 { 49017 if (shouldSuspend(workInProgress)) { 49018 workInProgress.flags |= DidCapture; 49019 } 49020 } 49021 49022 var suspenseContext = suspenseStackCursor.current; 49023 var showFallback = false; 49024 var didSuspend = (workInProgress.flags & DidCapture) !== NoFlags; 49025 49026 if (didSuspend || shouldRemainOnFallback(suspenseContext, current)) { 49027 // Something in this boundary's subtree already suspended. Switch to 49028 // rendering the fallback children. 49029 showFallback = true; 49030 workInProgress.flags &= ~DidCapture; 49031 } else { 49032 // Attempting the main content 49033 if (current === null || current.memoizedState !== null) { 49034 // This is a new mount or this boundary is already showing a fallback state. 49035 // Mark this subtree context as having at least one invisible parent that could 49036 // handle the fallback state. 49037 // Boundaries without fallbacks or should be avoided are not considered since 49038 // they cannot handle preferred fallback states. 49039 if (nextProps.fallback !== undefined && nextProps.unstable_avoidThisFallback !== true) { 49040 suspenseContext = addSubtreeSuspenseContext(suspenseContext, InvisibleParentSuspenseContext); 49041 } 49042 } 49043 } 49044 49045 suspenseContext = setDefaultShallowSuspenseContext(suspenseContext); 49046 pushSuspenseContext(workInProgress, suspenseContext); // OK, the next part is confusing. We're about to reconcile the Suspense 49047 // boundary's children. This involves some custom reconcilation logic. Two 49048 // main reasons this is so complicated. 49049 // 49050 // First, Legacy Mode has different semantics for backwards compatibility. The 49051 // primary tree will commit in an inconsistent state, so when we do the 49052 // second pass to render the fallback, we do some exceedingly, uh, clever 49053 // hacks to make that not totally break. Like transferring effects and 49054 // deletions from hidden tree. In Concurrent Mode, it's much simpler, 49055 // because we bailout on the primary tree completely and leave it in its old 49056 // state, no effects. Same as what we do for Offscreen (except that 49057 // Offscreen doesn't have the first render pass). 49058 // 49059 // Second is hydration. During hydration, the Suspense fiber has a slightly 49060 // different layout, where the child points to a dehydrated fragment, which 49061 // contains the DOM rendered by the server. 49062 // 49063 // Third, even if you set all that aside, Suspense is like error boundaries in 49064 // that we first we try to render one tree, and if that fails, we render again 49065 // and switch to a different tree. Like a try/catch block. So we have to track 49066 // which branch we're currently rendering. Ideally we would model this using 49067 // a stack. 49068 49069 if (current === null) { 49070 // Initial mount 49071 // If we're currently hydrating, try to hydrate this boundary. 49072 // But only if this has a fallback. 49073 if (nextProps.fallback !== undefined) { 49074 tryToClaimNextHydratableInstance(workInProgress); // This could've been a dehydrated suspense component. 49075 } 49076 49077 var nextPrimaryChildren = nextProps.children; 49078 var nextFallbackChildren = nextProps.fallback; 49079 49080 if (showFallback) { 49081 var fallbackFragment = mountSuspenseFallbackChildren(workInProgress, nextPrimaryChildren, nextFallbackChildren, renderLanes); 49082 var primaryChildFragment = workInProgress.child; 49083 primaryChildFragment.memoizedState = mountSuspenseOffscreenState(renderLanes); 49084 workInProgress.memoizedState = SUSPENDED_MARKER; 49085 return fallbackFragment; 49086 } else if (typeof nextProps.unstable_expectedLoadTime === 'number') { 49087 // This is a CPU-bound tree. Skip this tree and show a placeholder to 49088 // unblock the surrounding content. Then immediately retry after the 49089 // initial commit. 49090 var _fallbackFragment = mountSuspenseFallbackChildren(workInProgress, nextPrimaryChildren, nextFallbackChildren, renderLanes); 49091 49092 var _primaryChildFragment = workInProgress.child; 49093 _primaryChildFragment.memoizedState = mountSuspenseOffscreenState(renderLanes); 49094 workInProgress.memoizedState = SUSPENDED_MARKER; // Since nothing actually suspended, there will nothing to ping this to 49095 // get it started back up to attempt the next item. While in terms of 49096 // priority this work has the same priority as this current render, it's 49097 // not part of the same transition once the transition has committed. If 49098 // it's sync, we still want to yield so that it can be painted. 49099 // Conceptually, this is really the same as pinging. We can use any 49100 // RetryLane even if it's the one currently rendering since we're leaving 49101 // it behind on this node. 49102 49103 workInProgress.lanes = SomeRetryLane; 49104 49105 { 49106 markSpawnedWork(SomeRetryLane); 49107 } 49108 49109 return _fallbackFragment; 49110 } else { 49111 return mountSuspensePrimaryChildren(workInProgress, nextPrimaryChildren, renderLanes); 49112 } 49113 } else { 49114 // This is an update. 49115 // If the current fiber has a SuspenseState, that means it's already showing 49116 // a fallback. 49117 var prevState = current.memoizedState; 49118 49119 if (prevState !== null) { 49120 49121 if (showFallback) { 49122 var _nextFallbackChildren2 = nextProps.fallback; 49123 var _nextPrimaryChildren2 = nextProps.children; 49124 49125 var _fallbackChildFragment = updateSuspenseFallbackChildren(current, workInProgress, _nextPrimaryChildren2, _nextFallbackChildren2, renderLanes); 49126 49127 var _primaryChildFragment3 = workInProgress.child; 49128 var prevOffscreenState = current.child.memoizedState; 49129 _primaryChildFragment3.memoizedState = prevOffscreenState === null ? mountSuspenseOffscreenState(renderLanes) : updateSuspenseOffscreenState(prevOffscreenState, renderLanes); 49130 _primaryChildFragment3.childLanes = getRemainingWorkInPrimaryTree(current, renderLanes); 49131 workInProgress.memoizedState = SUSPENDED_MARKER; 49132 return _fallbackChildFragment; 49133 } else { 49134 var _nextPrimaryChildren3 = nextProps.children; 49135 49136 var _primaryChildFragment4 = updateSuspensePrimaryChildren(current, workInProgress, _nextPrimaryChildren3, renderLanes); 49137 49138 workInProgress.memoizedState = null; 49139 return _primaryChildFragment4; 49140 } 49141 } else { 49142 // The current tree is not already showing a fallback. 49143 if (showFallback) { 49144 // Timed out. 49145 var _nextFallbackChildren3 = nextProps.fallback; 49146 var _nextPrimaryChildren4 = nextProps.children; 49147 49148 var _fallbackChildFragment2 = updateSuspenseFallbackChildren(current, workInProgress, _nextPrimaryChildren4, _nextFallbackChildren3, renderLanes); 49149 49150 var _primaryChildFragment5 = workInProgress.child; 49151 var _prevOffscreenState = current.child.memoizedState; 49152 _primaryChildFragment5.memoizedState = _prevOffscreenState === null ? mountSuspenseOffscreenState(renderLanes) : updateSuspenseOffscreenState(_prevOffscreenState, renderLanes); 49153 _primaryChildFragment5.childLanes = getRemainingWorkInPrimaryTree(current, renderLanes); // Skip the primary children, and continue working on the 49154 // fallback children. 49155 49156 workInProgress.memoizedState = SUSPENDED_MARKER; 49157 return _fallbackChildFragment2; 49158 } else { 49159 // Still haven't timed out. Continue rendering the children, like we 49160 // normally do. 49161 var _nextPrimaryChildren5 = nextProps.children; 49162 49163 var _primaryChildFragment6 = updateSuspensePrimaryChildren(current, workInProgress, _nextPrimaryChildren5, renderLanes); 49164 49165 workInProgress.memoizedState = null; 49166 return _primaryChildFragment6; 49167 } 49168 } 49169 } 49170} 49171 49172function mountSuspensePrimaryChildren(workInProgress, primaryChildren, renderLanes) { 49173 var mode = workInProgress.mode; 49174 var primaryChildProps = { 49175 mode: 'visible', 49176 children: primaryChildren 49177 }; 49178 var primaryChildFragment = createFiberFromOffscreen(primaryChildProps, mode, renderLanes, null); 49179 primaryChildFragment.return = workInProgress; 49180 workInProgress.child = primaryChildFragment; 49181 return primaryChildFragment; 49182} 49183 49184function mountSuspenseFallbackChildren(workInProgress, primaryChildren, fallbackChildren, renderLanes) { 49185 var mode = workInProgress.mode; 49186 var progressedPrimaryFragment = workInProgress.child; 49187 var primaryChildProps = { 49188 mode: 'hidden', 49189 children: primaryChildren 49190 }; 49191 var primaryChildFragment; 49192 var fallbackChildFragment; 49193 49194 if ((mode & BlockingMode) === NoMode && progressedPrimaryFragment !== null) { 49195 // In legacy mode, we commit the primary tree as if it successfully 49196 // completed, even though it's in an inconsistent state. 49197 primaryChildFragment = progressedPrimaryFragment; 49198 primaryChildFragment.childLanes = NoLanes; 49199 primaryChildFragment.pendingProps = primaryChildProps; 49200 49201 if ( workInProgress.mode & ProfileMode) { 49202 // Reset the durations from the first pass so they aren't included in the 49203 // final amounts. This seems counterintuitive, since we're intentionally 49204 // not measuring part of the render phase, but this makes it match what we 49205 // do in Concurrent Mode. 49206 primaryChildFragment.actualDuration = 0; 49207 primaryChildFragment.actualStartTime = -1; 49208 primaryChildFragment.selfBaseDuration = 0; 49209 primaryChildFragment.treeBaseDuration = 0; 49210 } 49211 49212 fallbackChildFragment = createFiberFromFragment(fallbackChildren, mode, renderLanes, null); 49213 } else { 49214 primaryChildFragment = createFiberFromOffscreen(primaryChildProps, mode, NoLanes, null); 49215 fallbackChildFragment = createFiberFromFragment(fallbackChildren, mode, renderLanes, null); 49216 } 49217 49218 primaryChildFragment.return = workInProgress; 49219 fallbackChildFragment.return = workInProgress; 49220 primaryChildFragment.sibling = fallbackChildFragment; 49221 workInProgress.child = primaryChildFragment; 49222 return fallbackChildFragment; 49223} 49224 49225function createWorkInProgressOffscreenFiber(current, offscreenProps) { 49226 // The props argument to `createWorkInProgress` is `any` typed, so we use this 49227 // wrapper function to constrain it. 49228 return createWorkInProgress(current, offscreenProps); 49229} 49230 49231function updateSuspensePrimaryChildren(current, workInProgress, primaryChildren, renderLanes) { 49232 var currentPrimaryChildFragment = current.child; 49233 var currentFallbackChildFragment = currentPrimaryChildFragment.sibling; 49234 var primaryChildFragment = createWorkInProgressOffscreenFiber(currentPrimaryChildFragment, { 49235 mode: 'visible', 49236 children: primaryChildren 49237 }); 49238 49239 if ((workInProgress.mode & BlockingMode) === NoMode) { 49240 primaryChildFragment.lanes = renderLanes; 49241 } 49242 49243 primaryChildFragment.return = workInProgress; 49244 primaryChildFragment.sibling = null; 49245 49246 if (currentFallbackChildFragment !== null) { 49247 // Delete the fallback child fragment 49248 currentFallbackChildFragment.nextEffect = null; 49249 currentFallbackChildFragment.flags = Deletion; 49250 workInProgress.firstEffect = workInProgress.lastEffect = currentFallbackChildFragment; 49251 } 49252 49253 workInProgress.child = primaryChildFragment; 49254 return primaryChildFragment; 49255} 49256 49257function updateSuspenseFallbackChildren(current, workInProgress, primaryChildren, fallbackChildren, renderLanes) { 49258 var mode = workInProgress.mode; 49259 var currentPrimaryChildFragment = current.child; 49260 var currentFallbackChildFragment = currentPrimaryChildFragment.sibling; 49261 var primaryChildProps = { 49262 mode: 'hidden', 49263 children: primaryChildren 49264 }; 49265 var primaryChildFragment; 49266 49267 if ( // In legacy mode, we commit the primary tree as if it successfully 49268 // completed, even though it's in an inconsistent state. 49269 (mode & BlockingMode) === NoMode && // Make sure we're on the second pass, i.e. the primary child fragment was 49270 // already cloned. In legacy mode, the only case where this isn't true is 49271 // when DevTools forces us to display a fallback; we skip the first render 49272 // pass entirely and go straight to rendering the fallback. (In Concurrent 49273 // Mode, SuspenseList can also trigger this scenario, but this is a legacy- 49274 // only codepath.) 49275 workInProgress.child !== currentPrimaryChildFragment) { 49276 var progressedPrimaryFragment = workInProgress.child; 49277 primaryChildFragment = progressedPrimaryFragment; 49278 primaryChildFragment.childLanes = NoLanes; 49279 primaryChildFragment.pendingProps = primaryChildProps; 49280 49281 if ( workInProgress.mode & ProfileMode) { 49282 // Reset the durations from the first pass so they aren't included in the 49283 // final amounts. This seems counterintuitive, since we're intentionally 49284 // not measuring part of the render phase, but this makes it match what we 49285 // do in Concurrent Mode. 49286 primaryChildFragment.actualDuration = 0; 49287 primaryChildFragment.actualStartTime = -1; 49288 primaryChildFragment.selfBaseDuration = currentPrimaryChildFragment.selfBaseDuration; 49289 primaryChildFragment.treeBaseDuration = currentPrimaryChildFragment.treeBaseDuration; 49290 } // The fallback fiber was added as a deletion effect during the first pass. 49291 // However, since we're going to remain on the fallback, we no longer want 49292 // to delete it. So we need to remove it from the list. Deletions are stored 49293 // on the same list as effects. We want to keep the effects from the primary 49294 // tree. So we copy the primary child fragment's effect list, which does not 49295 // include the fallback deletion effect. 49296 49297 49298 var progressedLastEffect = primaryChildFragment.lastEffect; 49299 49300 if (progressedLastEffect !== null) { 49301 workInProgress.firstEffect = primaryChildFragment.firstEffect; 49302 workInProgress.lastEffect = progressedLastEffect; 49303 progressedLastEffect.nextEffect = null; 49304 } else { 49305 // TODO: Reset this somewhere else? Lol legacy mode is so weird. 49306 workInProgress.firstEffect = workInProgress.lastEffect = null; 49307 } 49308 } else { 49309 primaryChildFragment = createWorkInProgressOffscreenFiber(currentPrimaryChildFragment, primaryChildProps); 49310 } 49311 49312 var fallbackChildFragment; 49313 49314 if (currentFallbackChildFragment !== null) { 49315 fallbackChildFragment = createWorkInProgress(currentFallbackChildFragment, fallbackChildren); 49316 } else { 49317 fallbackChildFragment = createFiberFromFragment(fallbackChildren, mode, renderLanes, null); // Needs a placement effect because the parent (the Suspense boundary) already 49318 // mounted but this is a new fiber. 49319 49320 fallbackChildFragment.flags |= Placement; 49321 } 49322 49323 fallbackChildFragment.return = workInProgress; 49324 primaryChildFragment.return = workInProgress; 49325 primaryChildFragment.sibling = fallbackChildFragment; 49326 workInProgress.child = primaryChildFragment; 49327 return fallbackChildFragment; 49328} 49329 49330function scheduleWorkOnFiber(fiber, renderLanes) { 49331 fiber.lanes = mergeLanes(fiber.lanes, renderLanes); 49332 var alternate = fiber.alternate; 49333 49334 if (alternate !== null) { 49335 alternate.lanes = mergeLanes(alternate.lanes, renderLanes); 49336 } 49337 49338 scheduleWorkOnParentPath(fiber.return, renderLanes); 49339} 49340 49341function propagateSuspenseContextChange(workInProgress, firstChild, renderLanes) { 49342 // Mark any Suspense boundaries with fallbacks as having work to do. 49343 // If they were previously forced into fallbacks, they may now be able 49344 // to unblock. 49345 var node = firstChild; 49346 49347 while (node !== null) { 49348 if (node.tag === SuspenseComponent) { 49349 var state = node.memoizedState; 49350 49351 if (state !== null) { 49352 scheduleWorkOnFiber(node, renderLanes); 49353 } 49354 } else if (node.tag === SuspenseListComponent) { 49355 // If the tail is hidden there might not be an Suspense boundaries 49356 // to schedule work on. In this case we have to schedule it on the 49357 // list itself. 49358 // We don't have to traverse to the children of the list since 49359 // the list will propagate the change when it rerenders. 49360 scheduleWorkOnFiber(node, renderLanes); 49361 } else if (node.child !== null) { 49362 node.child.return = node; 49363 node = node.child; 49364 continue; 49365 } 49366 49367 if (node === workInProgress) { 49368 return; 49369 } 49370 49371 while (node.sibling === null) { 49372 if (node.return === null || node.return === workInProgress) { 49373 return; 49374 } 49375 49376 node = node.return; 49377 } 49378 49379 node.sibling.return = node.return; 49380 node = node.sibling; 49381 } 49382} 49383 49384function findLastContentRow(firstChild) { 49385 // This is going to find the last row among these children that is already 49386 // showing content on the screen, as opposed to being in fallback state or 49387 // new. If a row has multiple Suspense boundaries, any of them being in the 49388 // fallback state, counts as the whole row being in a fallback state. 49389 // Note that the "rows" will be workInProgress, but any nested children 49390 // will still be current since we haven't rendered them yet. The mounted 49391 // order may not be the same as the new order. We use the new order. 49392 var row = firstChild; 49393 var lastContentRow = null; 49394 49395 while (row !== null) { 49396 var currentRow = row.alternate; // New rows can't be content rows. 49397 49398 if (currentRow !== null && findFirstSuspended(currentRow) === null) { 49399 lastContentRow = row; 49400 } 49401 49402 row = row.sibling; 49403 } 49404 49405 return lastContentRow; 49406} 49407 49408function validateRevealOrder(revealOrder) { 49409 { 49410 if (revealOrder !== undefined && revealOrder !== 'forwards' && revealOrder !== 'backwards' && revealOrder !== 'together' && !didWarnAboutRevealOrder[revealOrder]) { 49411 didWarnAboutRevealOrder[revealOrder] = true; 49412 49413 if (typeof revealOrder === 'string') { 49414 switch (revealOrder.toLowerCase()) { 49415 case 'together': 49416 case 'forwards': 49417 case 'backwards': 49418 { 49419 error('"%s" is not a valid value for revealOrder on <SuspenseList />. ' + 'Use lowercase "%s" instead.', revealOrder, revealOrder.toLowerCase()); 49420 49421 break; 49422 } 49423 49424 case 'forward': 49425 case 'backward': 49426 { 49427 error('"%s" is not a valid value for revealOrder on <SuspenseList />. ' + 'React uses the -s suffix in the spelling. Use "%ss" instead.', revealOrder, revealOrder.toLowerCase()); 49428 49429 break; 49430 } 49431 49432 default: 49433 error('"%s" is not a supported revealOrder on <SuspenseList />. ' + 'Did you mean "together", "forwards" or "backwards"?', revealOrder); 49434 49435 break; 49436 } 49437 } else { 49438 error('%s is not a supported value for revealOrder on <SuspenseList />. ' + 'Did you mean "together", "forwards" or "backwards"?', revealOrder); 49439 } 49440 } 49441 } 49442} 49443 49444function validateTailOptions(tailMode, revealOrder) { 49445 { 49446 if (tailMode !== undefined && !didWarnAboutTailOptions[tailMode]) { 49447 if (tailMode !== 'collapsed' && tailMode !== 'hidden') { 49448 didWarnAboutTailOptions[tailMode] = true; 49449 49450 error('"%s" is not a supported value for tail on <SuspenseList />. ' + 'Did you mean "collapsed" or "hidden"?', tailMode); 49451 } else if (revealOrder !== 'forwards' && revealOrder !== 'backwards') { 49452 didWarnAboutTailOptions[tailMode] = true; 49453 49454 error('<SuspenseList tail="%s" /> is only valid if revealOrder is ' + '"forwards" or "backwards". ' + 'Did you mean to specify revealOrder="forwards"?', tailMode); 49455 } 49456 } 49457 } 49458} 49459 49460function validateSuspenseListNestedChild(childSlot, index) { 49461 { 49462 var isArray = Array.isArray(childSlot); 49463 var isIterable = !isArray && typeof getIteratorFn(childSlot) === 'function'; 49464 49465 if (isArray || isIterable) { 49466 var type = isArray ? 'array' : 'iterable'; 49467 49468 error('A nested %s was passed to row #%s in <SuspenseList />. Wrap it in ' + 'an additional SuspenseList to configure its revealOrder: ' + '<SuspenseList revealOrder=...> ... ' + '<SuspenseList revealOrder=...>{%s}</SuspenseList> ... ' + '</SuspenseList>', type, index, type); 49469 49470 return false; 49471 } 49472 } 49473 49474 return true; 49475} 49476 49477function validateSuspenseListChildren(children, revealOrder) { 49478 { 49479 if ((revealOrder === 'forwards' || revealOrder === 'backwards') && children !== undefined && children !== null && children !== false) { 49480 if (Array.isArray(children)) { 49481 for (var i = 0; i < children.length; i++) { 49482 if (!validateSuspenseListNestedChild(children[i], i)) { 49483 return; 49484 } 49485 } 49486 } else { 49487 var iteratorFn = getIteratorFn(children); 49488 49489 if (typeof iteratorFn === 'function') { 49490 var childrenIterator = iteratorFn.call(children); 49491 49492 if (childrenIterator) { 49493 var step = childrenIterator.next(); 49494 var _i = 0; 49495 49496 for (; !step.done; step = childrenIterator.next()) { 49497 if (!validateSuspenseListNestedChild(step.value, _i)) { 49498 return; 49499 } 49500 49501 _i++; 49502 } 49503 } 49504 } else { 49505 error('A single row was passed to a <SuspenseList revealOrder="%s" />. ' + 'This is not useful since it needs multiple rows. ' + 'Did you mean to pass multiple children or an array?', revealOrder); 49506 } 49507 } 49508 } 49509 } 49510} 49511 49512function initSuspenseListRenderState(workInProgress, isBackwards, tail, lastContentRow, tailMode, lastEffectBeforeRendering) { 49513 var renderState = workInProgress.memoizedState; 49514 49515 if (renderState === null) { 49516 workInProgress.memoizedState = { 49517 isBackwards: isBackwards, 49518 rendering: null, 49519 renderingStartTime: 0, 49520 last: lastContentRow, 49521 tail: tail, 49522 tailMode: tailMode, 49523 lastEffect: lastEffectBeforeRendering 49524 }; 49525 } else { 49526 // We can reuse the existing object from previous renders. 49527 renderState.isBackwards = isBackwards; 49528 renderState.rendering = null; 49529 renderState.renderingStartTime = 0; 49530 renderState.last = lastContentRow; 49531 renderState.tail = tail; 49532 renderState.tailMode = tailMode; 49533 renderState.lastEffect = lastEffectBeforeRendering; 49534 } 49535} // This can end up rendering this component multiple passes. 49536// The first pass splits the children fibers into two sets. A head and tail. 49537// We first render the head. If anything is in fallback state, we do another 49538// pass through beginWork to rerender all children (including the tail) with 49539// the force suspend context. If the first render didn't have anything in 49540// in fallback state. Then we render each row in the tail one-by-one. 49541// That happens in the completeWork phase without going back to beginWork. 49542 49543 49544function updateSuspenseListComponent(current, workInProgress, renderLanes) { 49545 var nextProps = workInProgress.pendingProps; 49546 var revealOrder = nextProps.revealOrder; 49547 var tailMode = nextProps.tail; 49548 var newChildren = nextProps.children; 49549 validateRevealOrder(revealOrder); 49550 validateTailOptions(tailMode, revealOrder); 49551 validateSuspenseListChildren(newChildren, revealOrder); 49552 reconcileChildren(current, workInProgress, newChildren, renderLanes); 49553 var suspenseContext = suspenseStackCursor.current; 49554 var shouldForceFallback = hasSuspenseContext(suspenseContext, ForceSuspenseFallback); 49555 49556 if (shouldForceFallback) { 49557 suspenseContext = setShallowSuspenseContext(suspenseContext, ForceSuspenseFallback); 49558 workInProgress.flags |= DidCapture; 49559 } else { 49560 var didSuspendBefore = current !== null && (current.flags & DidCapture) !== NoFlags; 49561 49562 if (didSuspendBefore) { 49563 // If we previously forced a fallback, we need to schedule work 49564 // on any nested boundaries to let them know to try to render 49565 // again. This is the same as context updating. 49566 propagateSuspenseContextChange(workInProgress, workInProgress.child, renderLanes); 49567 } 49568 49569 suspenseContext = setDefaultShallowSuspenseContext(suspenseContext); 49570 } 49571 49572 pushSuspenseContext(workInProgress, suspenseContext); 49573 49574 if ((workInProgress.mode & BlockingMode) === NoMode) { 49575 // In legacy mode, SuspenseList doesn't work so we just 49576 // use make it a noop by treating it as the default revealOrder. 49577 workInProgress.memoizedState = null; 49578 } else { 49579 switch (revealOrder) { 49580 case 'forwards': 49581 { 49582 var lastContentRow = findLastContentRow(workInProgress.child); 49583 var tail; 49584 49585 if (lastContentRow === null) { 49586 // The whole list is part of the tail. 49587 // TODO: We could fast path by just rendering the tail now. 49588 tail = workInProgress.child; 49589 workInProgress.child = null; 49590 } else { 49591 // Disconnect the tail rows after the content row. 49592 // We're going to render them separately later. 49593 tail = lastContentRow.sibling; 49594 lastContentRow.sibling = null; 49595 } 49596 49597 initSuspenseListRenderState(workInProgress, false, // isBackwards 49598 tail, lastContentRow, tailMode, workInProgress.lastEffect); 49599 break; 49600 } 49601 49602 case 'backwards': 49603 { 49604 // We're going to find the first row that has existing content. 49605 // At the same time we're going to reverse the list of everything 49606 // we pass in the meantime. That's going to be our tail in reverse 49607 // order. 49608 var _tail = null; 49609 var row = workInProgress.child; 49610 workInProgress.child = null; 49611 49612 while (row !== null) { 49613 var currentRow = row.alternate; // New rows can't be content rows. 49614 49615 if (currentRow !== null && findFirstSuspended(currentRow) === null) { 49616 // This is the beginning of the main content. 49617 workInProgress.child = row; 49618 break; 49619 } 49620 49621 var nextRow = row.sibling; 49622 row.sibling = _tail; 49623 _tail = row; 49624 row = nextRow; 49625 } // TODO: If workInProgress.child is null, we can continue on the tail immediately. 49626 49627 49628 initSuspenseListRenderState(workInProgress, true, // isBackwards 49629 _tail, null, // last 49630 tailMode, workInProgress.lastEffect); 49631 break; 49632 } 49633 49634 case 'together': 49635 { 49636 initSuspenseListRenderState(workInProgress, false, // isBackwards 49637 null, // tail 49638 null, // last 49639 undefined, workInProgress.lastEffect); 49640 break; 49641 } 49642 49643 default: 49644 { 49645 // The default reveal order is the same as not having 49646 // a boundary. 49647 workInProgress.memoizedState = null; 49648 } 49649 } 49650 } 49651 49652 return workInProgress.child; 49653} 49654 49655function updatePortalComponent(current, workInProgress, renderLanes) { 49656 pushHostContainer(workInProgress, workInProgress.stateNode.containerInfo); 49657 var nextChildren = workInProgress.pendingProps; 49658 49659 if (current === null) { 49660 // Portals are special because we don't append the children during mount 49661 // but at commit. Therefore we need to track insertions which the normal 49662 // flow doesn't do during mount. This doesn't happen at the root because 49663 // the root always starts with a "current" with a null child. 49664 // TODO: Consider unifying this with how the root works. 49665 workInProgress.child = reconcileChildFibers(workInProgress, null, nextChildren, renderLanes); 49666 } else { 49667 reconcileChildren(current, workInProgress, nextChildren, renderLanes); 49668 } 49669 49670 return workInProgress.child; 49671} 49672 49673var hasWarnedAboutUsingNoValuePropOnContextProvider = false; 49674 49675function updateContextProvider(current, workInProgress, renderLanes) { 49676 var providerType = workInProgress.type; 49677 var context = providerType._context; 49678 var newProps = workInProgress.pendingProps; 49679 var oldProps = workInProgress.memoizedProps; 49680 var newValue = newProps.value; 49681 49682 { 49683 if (!('value' in newProps)) { 49684 if (!hasWarnedAboutUsingNoValuePropOnContextProvider) { 49685 hasWarnedAboutUsingNoValuePropOnContextProvider = true; 49686 49687 error('The `value` prop is required for the `<Context.Provider>`. Did you misspell it or forget to pass it?'); 49688 } 49689 } 49690 49691 var providerPropTypes = workInProgress.type.propTypes; 49692 49693 if (providerPropTypes) { 49694 checkPropTypes(providerPropTypes, newProps, 'prop', 'Context.Provider'); 49695 } 49696 } 49697 49698 pushProvider(workInProgress, newValue); 49699 49700 if (oldProps !== null) { 49701 var oldValue = oldProps.value; 49702 var changedBits = calculateChangedBits(context, newValue, oldValue); 49703 49704 if (changedBits === 0) { 49705 // No change. Bailout early if children are the same. 49706 if (oldProps.children === newProps.children && !hasContextChanged()) { 49707 return bailoutOnAlreadyFinishedWork(current, workInProgress, renderLanes); 49708 } 49709 } else { 49710 // The context value changed. Search for matching consumers and schedule 49711 // them to update. 49712 propagateContextChange(workInProgress, context, changedBits, renderLanes); 49713 } 49714 } 49715 49716 var newChildren = newProps.children; 49717 reconcileChildren(current, workInProgress, newChildren, renderLanes); 49718 return workInProgress.child; 49719} 49720 49721var hasWarnedAboutUsingContextAsConsumer = false; 49722 49723function updateContextConsumer(current, workInProgress, renderLanes) { 49724 var context = workInProgress.type; // The logic below for Context differs depending on PROD or DEV mode. In 49725 // DEV mode, we create a separate object for Context.Consumer that acts 49726 // like a proxy to Context. This proxy object adds unnecessary code in PROD 49727 // so we use the old behaviour (Context.Consumer references Context) to 49728 // reduce size and overhead. The separate object references context via 49729 // a property called "_context", which also gives us the ability to check 49730 // in DEV mode if this property exists or not and warn if it does not. 49731 49732 { 49733 if (context._context === undefined) { 49734 // This may be because it's a Context (rather than a Consumer). 49735 // Or it may be because it's older React where they're the same thing. 49736 // We only want to warn if we're sure it's a new React. 49737 if (context !== context.Consumer) { 49738 if (!hasWarnedAboutUsingContextAsConsumer) { 49739 hasWarnedAboutUsingContextAsConsumer = true; 49740 49741 error('Rendering <Context> directly is not supported and will be removed in ' + 'a future major release. Did you mean to render <Context.Consumer> instead?'); 49742 } 49743 } 49744 } else { 49745 context = context._context; 49746 } 49747 } 49748 49749 var newProps = workInProgress.pendingProps; 49750 var render = newProps.children; 49751 49752 { 49753 if (typeof render !== 'function') { 49754 error('A context consumer was rendered with multiple children, or a child ' + "that isn't a function. A context consumer expects a single child " + 'that is a function. If you did pass a function, make sure there ' + 'is no trailing or leading whitespace around it.'); 49755 } 49756 } 49757 49758 prepareToReadContext(workInProgress, renderLanes); 49759 var newValue = readContext(context, newProps.unstable_observedBits); 49760 var newChildren; 49761 49762 { 49763 ReactCurrentOwner$1.current = workInProgress; 49764 setIsRendering(true); 49765 newChildren = render(newValue); 49766 setIsRendering(false); 49767 } // React DevTools reads this flag. 49768 49769 49770 workInProgress.flags |= PerformedWork; 49771 reconcileChildren(current, workInProgress, newChildren, renderLanes); 49772 return workInProgress.child; 49773} 49774 49775function markWorkInProgressReceivedUpdate() { 49776 didReceiveUpdate = true; 49777} 49778 49779function bailoutOnAlreadyFinishedWork(current, workInProgress, renderLanes) { 49780 if (current !== null) { 49781 // Reuse previous dependencies 49782 workInProgress.dependencies = current.dependencies; 49783 } 49784 49785 { 49786 // Don't update "base" render times for bailouts. 49787 stopProfilerTimerIfRunning(); 49788 } 49789 49790 markSkippedUpdateLanes(workInProgress.lanes); // Check if the children have any pending work. 49791 49792 if (!includesSomeLane(renderLanes, workInProgress.childLanes)) { 49793 // The children don't have any work either. We can skip them. 49794 // TODO: Once we add back resuming, we should check if the children are 49795 // a work-in-progress set. If so, we need to transfer their effects. 49796 return null; 49797 } else { 49798 // This fiber doesn't have work, but its subtree does. Clone the child 49799 // fibers and continue. 49800 cloneChildFibers(current, workInProgress); 49801 return workInProgress.child; 49802 } 49803} 49804 49805function remountFiber(current, oldWorkInProgress, newWorkInProgress) { 49806 { 49807 var returnFiber = oldWorkInProgress.return; 49808 49809 if (returnFiber === null) { 49810 throw new Error('Cannot swap the root fiber.'); 49811 } // Disconnect from the old current. 49812 // It will get deleted. 49813 49814 49815 current.alternate = null; 49816 oldWorkInProgress.alternate = null; // Connect to the new tree. 49817 49818 newWorkInProgress.index = oldWorkInProgress.index; 49819 newWorkInProgress.sibling = oldWorkInProgress.sibling; 49820 newWorkInProgress.return = oldWorkInProgress.return; 49821 newWorkInProgress.ref = oldWorkInProgress.ref; // Replace the child/sibling pointers above it. 49822 49823 if (oldWorkInProgress === returnFiber.child) { 49824 returnFiber.child = newWorkInProgress; 49825 } else { 49826 var prevSibling = returnFiber.child; 49827 49828 if (prevSibling === null) { 49829 throw new Error('Expected parent to have a child.'); 49830 } 49831 49832 while (prevSibling.sibling !== oldWorkInProgress) { 49833 prevSibling = prevSibling.sibling; 49834 49835 if (prevSibling === null) { 49836 throw new Error('Expected to find the previous sibling.'); 49837 } 49838 } 49839 49840 prevSibling.sibling = newWorkInProgress; 49841 } // Delete the old fiber and place the new one. 49842 // Since the old fiber is disconnected, we have to schedule it manually. 49843 49844 49845 var last = returnFiber.lastEffect; 49846 49847 if (last !== null) { 49848 last.nextEffect = current; 49849 returnFiber.lastEffect = current; 49850 } else { 49851 returnFiber.firstEffect = returnFiber.lastEffect = current; 49852 } 49853 49854 current.nextEffect = null; 49855 current.flags = Deletion; 49856 newWorkInProgress.flags |= Placement; // Restart work from the new fiber. 49857 49858 return newWorkInProgress; 49859 } 49860} 49861 49862function beginWork(current, workInProgress, renderLanes) { 49863 var updateLanes = workInProgress.lanes; 49864 49865 { 49866 if (workInProgress._debugNeedsRemount && current !== null) { 49867 // This will restart the begin phase with a new fiber. 49868 return remountFiber(current, workInProgress, createFiberFromTypeAndProps(workInProgress.type, workInProgress.key, workInProgress.pendingProps, workInProgress._debugOwner || null, workInProgress.mode, workInProgress.lanes)); 49869 } 49870 } 49871 49872 if (current !== null) { 49873 var oldProps = current.memoizedProps; 49874 var newProps = workInProgress.pendingProps; 49875 49876 if (oldProps !== newProps || hasContextChanged() || ( // Force a re-render if the implementation changed due to hot reload: 49877 workInProgress.type !== current.type )) { 49878 // If props or context changed, mark the fiber as having performed work. 49879 // This may be unset if the props are determined to be equal later (memo). 49880 didReceiveUpdate = true; 49881 } else if (!includesSomeLane(renderLanes, updateLanes)) { 49882 didReceiveUpdate = false; // This fiber does not have any pending work. Bailout without entering 49883 // the begin phase. There's still some bookkeeping we that needs to be done 49884 // in this optimized path, mostly pushing stuff onto the stack. 49885 49886 switch (workInProgress.tag) { 49887 case HostRoot: 49888 pushHostRootContext(workInProgress); 49889 resetHydrationState(); 49890 break; 49891 49892 case HostComponent: 49893 pushHostContext(workInProgress); 49894 break; 49895 49896 case ClassComponent: 49897 { 49898 var Component = workInProgress.type; 49899 49900 if (isContextProvider(Component)) { 49901 pushContextProvider(workInProgress); 49902 } 49903 49904 break; 49905 } 49906 49907 case HostPortal: 49908 pushHostContainer(workInProgress, workInProgress.stateNode.containerInfo); 49909 break; 49910 49911 case ContextProvider: 49912 { 49913 var newValue = workInProgress.memoizedProps.value; 49914 pushProvider(workInProgress, newValue); 49915 break; 49916 } 49917 49918 case Profiler: 49919 { 49920 // Profiler should only call onRender when one of its descendants actually rendered. 49921 var hasChildWork = includesSomeLane(renderLanes, workInProgress.childLanes); 49922 49923 if (hasChildWork) { 49924 workInProgress.flags |= Update; 49925 } // Reset effect durations for the next eventual effect phase. 49926 // These are reset during render to allow the DevTools commit hook a chance to read them, 49927 49928 49929 var stateNode = workInProgress.stateNode; 49930 stateNode.effectDuration = 0; 49931 stateNode.passiveEffectDuration = 0; 49932 } 49933 49934 break; 49935 49936 case SuspenseComponent: 49937 { 49938 var state = workInProgress.memoizedState; 49939 49940 if (state !== null) { 49941 // whether to retry the primary children, or to skip over it and 49942 // go straight to the fallback. Check the priority of the primary 49943 // child fragment. 49944 49945 49946 var primaryChildFragment = workInProgress.child; 49947 var primaryChildLanes = primaryChildFragment.childLanes; 49948 49949 if (includesSomeLane(renderLanes, primaryChildLanes)) { 49950 // The primary children have pending work. Use the normal path 49951 // to attempt to render the primary children again. 49952 return updateSuspenseComponent(current, workInProgress, renderLanes); 49953 } else { 49954 // The primary child fragment does not have pending work marked 49955 // on it 49956 pushSuspenseContext(workInProgress, setDefaultShallowSuspenseContext(suspenseStackCursor.current)); // The primary children do not have pending work with sufficient 49957 // priority. Bailout. 49958 49959 var child = bailoutOnAlreadyFinishedWork(current, workInProgress, renderLanes); 49960 49961 if (child !== null) { 49962 // The fallback children have pending work. Skip over the 49963 // primary children and work on the fallback. 49964 return child.sibling; 49965 } else { 49966 return null; 49967 } 49968 } 49969 } else { 49970 pushSuspenseContext(workInProgress, setDefaultShallowSuspenseContext(suspenseStackCursor.current)); 49971 } 49972 49973 break; 49974 } 49975 49976 case SuspenseListComponent: 49977 { 49978 var didSuspendBefore = (current.flags & DidCapture) !== NoFlags; 49979 49980 var _hasChildWork = includesSomeLane(renderLanes, workInProgress.childLanes); 49981 49982 if (didSuspendBefore) { 49983 if (_hasChildWork) { 49984 // If something was in fallback state last time, and we have all the 49985 // same children then we're still in progressive loading state. 49986 // Something might get unblocked by state updates or retries in the 49987 // tree which will affect the tail. So we need to use the normal 49988 // path to compute the correct tail. 49989 return updateSuspenseListComponent(current, workInProgress, renderLanes); 49990 } // If none of the children had any work, that means that none of 49991 // them got retried so they'll still be blocked in the same way 49992 // as before. We can fast bail out. 49993 49994 49995 workInProgress.flags |= DidCapture; 49996 } // If nothing suspended before and we're rendering the same children, 49997 // then the tail doesn't matter. Anything new that suspends will work 49998 // in the "together" mode, so we can continue from the state we had. 49999 50000 50001 var renderState = workInProgress.memoizedState; 50002 50003 if (renderState !== null) { 50004 // Reset to the "together" mode in case we've started a different 50005 // update in the past but didn't complete it. 50006 renderState.rendering = null; 50007 renderState.tail = null; 50008 renderState.lastEffect = null; 50009 } 50010 50011 pushSuspenseContext(workInProgress, suspenseStackCursor.current); 50012 50013 if (_hasChildWork) { 50014 break; 50015 } else { 50016 // If none of the children had any work, that means that none of 50017 // them got retried so they'll still be blocked in the same way 50018 // as before. We can fast bail out. 50019 return null; 50020 } 50021 } 50022 50023 case OffscreenComponent: 50024 case LegacyHiddenComponent: 50025 { 50026 // Need to check if the tree still needs to be deferred. This is 50027 // almost identical to the logic used in the normal update path, 50028 // so we'll just enter that. The only difference is we'll bail out 50029 // at the next level instead of this one, because the child props 50030 // have not changed. Which is fine. 50031 // TODO: Probably should refactor `beginWork` to split the bailout 50032 // path from the normal path. I'm tempted to do a labeled break here 50033 // but I won't :) 50034 workInProgress.lanes = NoLanes; 50035 return updateOffscreenComponent(current, workInProgress, renderLanes); 50036 } 50037 } 50038 50039 return bailoutOnAlreadyFinishedWork(current, workInProgress, renderLanes); 50040 } else { 50041 if ((current.flags & ForceUpdateForLegacySuspense) !== NoFlags) { 50042 // This is a special case that only exists for legacy mode. 50043 // See https://github.com/facebook/react/pull/19216. 50044 didReceiveUpdate = true; 50045 } else { 50046 // An update was scheduled on this fiber, but there are no new props 50047 // nor legacy context. Set this to false. If an update queue or context 50048 // consumer produces a changed value, it will set this to true. Otherwise, 50049 // the component will assume the children have not changed and bail out. 50050 didReceiveUpdate = false; 50051 } 50052 } 50053 } else { 50054 didReceiveUpdate = false; 50055 } // Before entering the begin phase, clear pending update priority. 50056 // TODO: This assumes that we're about to evaluate the component and process 50057 // the update queue. However, there's an exception: SimpleMemoComponent 50058 // sometimes bails out later in the begin phase. This indicates that we should 50059 // move this assignment out of the common path and into each branch. 50060 50061 50062 workInProgress.lanes = NoLanes; 50063 50064 switch (workInProgress.tag) { 50065 case IndeterminateComponent: 50066 { 50067 return mountIndeterminateComponent(current, workInProgress, workInProgress.type, renderLanes); 50068 } 50069 50070 case LazyComponent: 50071 { 50072 var elementType = workInProgress.elementType; 50073 return mountLazyComponent(current, workInProgress, elementType, updateLanes, renderLanes); 50074 } 50075 50076 case FunctionComponent: 50077 { 50078 var _Component = workInProgress.type; 50079 var unresolvedProps = workInProgress.pendingProps; 50080 var resolvedProps = workInProgress.elementType === _Component ? unresolvedProps : resolveDefaultProps(_Component, unresolvedProps); 50081 return updateFunctionComponent(current, workInProgress, _Component, resolvedProps, renderLanes); 50082 } 50083 50084 case ClassComponent: 50085 { 50086 var _Component2 = workInProgress.type; 50087 var _unresolvedProps = workInProgress.pendingProps; 50088 50089 var _resolvedProps = workInProgress.elementType === _Component2 ? _unresolvedProps : resolveDefaultProps(_Component2, _unresolvedProps); 50090 50091 return updateClassComponent(current, workInProgress, _Component2, _resolvedProps, renderLanes); 50092 } 50093 50094 case HostRoot: 50095 return updateHostRoot(current, workInProgress, renderLanes); 50096 50097 case HostComponent: 50098 return updateHostComponent(current, workInProgress, renderLanes); 50099 50100 case HostText: 50101 return updateHostText(current, workInProgress); 50102 50103 case SuspenseComponent: 50104 return updateSuspenseComponent(current, workInProgress, renderLanes); 50105 50106 case HostPortal: 50107 return updatePortalComponent(current, workInProgress, renderLanes); 50108 50109 case ForwardRef: 50110 { 50111 var type = workInProgress.type; 50112 var _unresolvedProps2 = workInProgress.pendingProps; 50113 50114 var _resolvedProps2 = workInProgress.elementType === type ? _unresolvedProps2 : resolveDefaultProps(type, _unresolvedProps2); 50115 50116 return updateForwardRef(current, workInProgress, type, _resolvedProps2, renderLanes); 50117 } 50118 50119 case Fragment: 50120 return updateFragment(current, workInProgress, renderLanes); 50121 50122 case Mode: 50123 return updateMode(current, workInProgress, renderLanes); 50124 50125 case Profiler: 50126 return updateProfiler(current, workInProgress, renderLanes); 50127 50128 case ContextProvider: 50129 return updateContextProvider(current, workInProgress, renderLanes); 50130 50131 case ContextConsumer: 50132 return updateContextConsumer(current, workInProgress, renderLanes); 50133 50134 case MemoComponent: 50135 { 50136 var _type2 = workInProgress.type; 50137 var _unresolvedProps3 = workInProgress.pendingProps; // Resolve outer props first, then resolve inner props. 50138 50139 var _resolvedProps3 = resolveDefaultProps(_type2, _unresolvedProps3); 50140 50141 { 50142 if (workInProgress.type !== workInProgress.elementType) { 50143 var outerPropTypes = _type2.propTypes; 50144 50145 if (outerPropTypes) { 50146 checkPropTypes(outerPropTypes, _resolvedProps3, // Resolved for outer only 50147 'prop', getComponentName(_type2)); 50148 } 50149 } 50150 } 50151 50152 _resolvedProps3 = resolveDefaultProps(_type2.type, _resolvedProps3); 50153 return updateMemoComponent(current, workInProgress, _type2, _resolvedProps3, updateLanes, renderLanes); 50154 } 50155 50156 case SimpleMemoComponent: 50157 { 50158 return updateSimpleMemoComponent(current, workInProgress, workInProgress.type, workInProgress.pendingProps, updateLanes, renderLanes); 50159 } 50160 50161 case IncompleteClassComponent: 50162 { 50163 var _Component3 = workInProgress.type; 50164 var _unresolvedProps4 = workInProgress.pendingProps; 50165 50166 var _resolvedProps4 = workInProgress.elementType === _Component3 ? _unresolvedProps4 : resolveDefaultProps(_Component3, _unresolvedProps4); 50167 50168 return mountIncompleteClassComponent(current, workInProgress, _Component3, _resolvedProps4, renderLanes); 50169 } 50170 50171 case SuspenseListComponent: 50172 { 50173 return updateSuspenseListComponent(current, workInProgress, renderLanes); 50174 } 50175 50176 case FundamentalComponent: 50177 { 50178 50179 break; 50180 } 50181 50182 case ScopeComponent: 50183 { 50184 50185 break; 50186 } 50187 50188 case Block: 50189 { 50190 50191 break; 50192 } 50193 50194 case OffscreenComponent: 50195 { 50196 return updateOffscreenComponent(current, workInProgress, renderLanes); 50197 } 50198 50199 case LegacyHiddenComponent: 50200 { 50201 return updateLegacyHiddenComponent(current, workInProgress, renderLanes); 50202 } 50203 } 50204 50205 { 50206 { 50207 throw Error( "Unknown unit of work tag (" + workInProgress.tag + "). This error is likely caused by a bug in React. Please file an issue." ); 50208 } 50209 } 50210} 50211 50212function markUpdate(workInProgress) { 50213 // Tag the fiber with an update effect. This turns a Placement into 50214 // a PlacementAndUpdate. 50215 workInProgress.flags |= Update; 50216} 50217 50218function markRef$1(workInProgress) { 50219 workInProgress.flags |= Ref; 50220} 50221 50222var appendAllChildren; 50223var updateHostContainer; 50224var updateHostComponent$1; 50225var updateHostText$1; 50226 50227{ 50228 // Mutation mode 50229 appendAllChildren = function (parent, workInProgress, needsVisibilityToggle, isHidden) { 50230 // We only have the top Fiber that was created but we need recurse down its 50231 // children to find all the terminal nodes. 50232 var node = workInProgress.child; 50233 50234 while (node !== null) { 50235 if (node.tag === HostComponent || node.tag === HostText) { 50236 appendInitialChild(parent, node.stateNode); 50237 } else if (node.tag === HostPortal) ; else if (node.child !== null) { 50238 node.child.return = node; 50239 node = node.child; 50240 continue; 50241 } 50242 50243 if (node === workInProgress) { 50244 return; 50245 } 50246 50247 while (node.sibling === null) { 50248 if (node.return === null || node.return === workInProgress) { 50249 return; 50250 } 50251 50252 node = node.return; 50253 } 50254 50255 node.sibling.return = node.return; 50256 node = node.sibling; 50257 } 50258 }; 50259 50260 updateHostContainer = function (workInProgress) {// Noop 50261 }; 50262 50263 updateHostComponent$1 = function (current, workInProgress, type, newProps, rootContainerInstance) { 50264 // If we have an alternate, that means this is an update and we need to 50265 // schedule a side-effect to do the updates. 50266 var oldProps = current.memoizedProps; 50267 50268 if (oldProps === newProps) { 50269 // In mutation mode, this is sufficient for a bailout because 50270 // we won't touch this node even if children changed. 50271 return; 50272 } // If we get updated because one of our children updated, we don't 50273 // have newProps so we'll have to reuse them. 50274 // TODO: Split the update API as separate for the props vs. children. 50275 // Even better would be if children weren't special cased at all tho. 50276 50277 50278 var instance = workInProgress.stateNode; 50279 var currentHostContext = getHostContext(); // TODO: Experiencing an error where oldProps is null. Suggests a host 50280 // component is hitting the resume path. Figure out why. Possibly 50281 // related to `hidden`. 50282 50283 var updatePayload = prepareUpdate(instance, type, oldProps, newProps, rootContainerInstance, currentHostContext); // TODO: Type this specific to this type of component. 50284 50285 workInProgress.updateQueue = updatePayload; // If the update payload indicates that there is a change or if there 50286 // is a new ref we mark this as an update. All the work is done in commitWork. 50287 50288 if (updatePayload) { 50289 markUpdate(workInProgress); 50290 } 50291 }; 50292 50293 updateHostText$1 = function (current, workInProgress, oldText, newText) { 50294 // If the text differs, mark it as an update. All the work in done in commitWork. 50295 if (oldText !== newText) { 50296 markUpdate(workInProgress); 50297 } 50298 }; 50299} 50300 50301function cutOffTailIfNeeded(renderState, hasRenderedATailFallback) { 50302 if (getIsHydrating()) { 50303 // If we're hydrating, we should consume as many items as we can 50304 // so we don't leave any behind. 50305 return; 50306 } 50307 50308 switch (renderState.tailMode) { 50309 case 'hidden': 50310 { 50311 // Any insertions at the end of the tail list after this point 50312 // should be invisible. If there are already mounted boundaries 50313 // anything before them are not considered for collapsing. 50314 // Therefore we need to go through the whole tail to find if 50315 // there are any. 50316 var tailNode = renderState.tail; 50317 var lastTailNode = null; 50318 50319 while (tailNode !== null) { 50320 if (tailNode.alternate !== null) { 50321 lastTailNode = tailNode; 50322 } 50323 50324 tailNode = tailNode.sibling; 50325 } // Next we're simply going to delete all insertions after the 50326 // last rendered item. 50327 50328 50329 if (lastTailNode === null) { 50330 // All remaining items in the tail are insertions. 50331 renderState.tail = null; 50332 } else { 50333 // Detach the insertion after the last node that was already 50334 // inserted. 50335 lastTailNode.sibling = null; 50336 } 50337 50338 break; 50339 } 50340 50341 case 'collapsed': 50342 { 50343 // Any insertions at the end of the tail list after this point 50344 // should be invisible. If there are already mounted boundaries 50345 // anything before them are not considered for collapsing. 50346 // Therefore we need to go through the whole tail to find if 50347 // there are any. 50348 var _tailNode = renderState.tail; 50349 var _lastTailNode = null; 50350 50351 while (_tailNode !== null) { 50352 if (_tailNode.alternate !== null) { 50353 _lastTailNode = _tailNode; 50354 } 50355 50356 _tailNode = _tailNode.sibling; 50357 } // Next we're simply going to delete all insertions after the 50358 // last rendered item. 50359 50360 50361 if (_lastTailNode === null) { 50362 // All remaining items in the tail are insertions. 50363 if (!hasRenderedATailFallback && renderState.tail !== null) { 50364 // We suspended during the head. We want to show at least one 50365 // row at the tail. So we'll keep on and cut off the rest. 50366 renderState.tail.sibling = null; 50367 } else { 50368 renderState.tail = null; 50369 } 50370 } else { 50371 // Detach the insertion after the last node that was already 50372 // inserted. 50373 _lastTailNode.sibling = null; 50374 } 50375 50376 break; 50377 } 50378 } 50379} 50380 50381function completeWork(current, workInProgress, renderLanes) { 50382 var newProps = workInProgress.pendingProps; 50383 50384 switch (workInProgress.tag) { 50385 case IndeterminateComponent: 50386 case LazyComponent: 50387 case SimpleMemoComponent: 50388 case FunctionComponent: 50389 case ForwardRef: 50390 case Fragment: 50391 case Mode: 50392 case Profiler: 50393 case ContextConsumer: 50394 case MemoComponent: 50395 return null; 50396 50397 case ClassComponent: 50398 { 50399 var Component = workInProgress.type; 50400 50401 if (isContextProvider(Component)) { 50402 popContext(workInProgress); 50403 } 50404 50405 return null; 50406 } 50407 50408 case HostRoot: 50409 { 50410 popHostContainer(workInProgress); 50411 popTopLevelContextObject(workInProgress); 50412 resetWorkInProgressVersions(); 50413 var fiberRoot = workInProgress.stateNode; 50414 50415 if (fiberRoot.pendingContext) { 50416 fiberRoot.context = fiberRoot.pendingContext; 50417 fiberRoot.pendingContext = null; 50418 } 50419 50420 if (current === null || current.child === null) { 50421 // If we hydrated, pop so that we can delete any remaining children 50422 // that weren't hydrated. 50423 var wasHydrated = popHydrationState(workInProgress); 50424 50425 if (wasHydrated) { 50426 // If we hydrated, then we'll need to schedule an update for 50427 // the commit side-effects on the root. 50428 markUpdate(workInProgress); 50429 } else if (!fiberRoot.hydrate) { 50430 // Schedule an effect to clear this container at the start of the next commit. 50431 // This handles the case of React rendering into a container with previous children. 50432 // It's also safe to do for updates too, because current.child would only be null 50433 // if the previous render was null (so the the container would already be empty). 50434 workInProgress.flags |= Snapshot; 50435 } 50436 } 50437 50438 updateHostContainer(workInProgress); 50439 return null; 50440 } 50441 50442 case HostComponent: 50443 { 50444 popHostContext(workInProgress); 50445 var rootContainerInstance = getRootHostContainer(); 50446 var type = workInProgress.type; 50447 50448 if (current !== null && workInProgress.stateNode != null) { 50449 updateHostComponent$1(current, workInProgress, type, newProps, rootContainerInstance); 50450 50451 if (current.ref !== workInProgress.ref) { 50452 markRef$1(workInProgress); 50453 } 50454 } else { 50455 if (!newProps) { 50456 if (!(workInProgress.stateNode !== null)) { 50457 { 50458 throw Error( "We must have new props for new mounts. This error is likely caused by a bug in React. Please file an issue." ); 50459 } 50460 } // This can happen when we abort work. 50461 50462 50463 return null; 50464 } 50465 50466 var currentHostContext = getHostContext(); // TODO: Move createInstance to beginWork and keep it on a context 50467 // "stack" as the parent. Then append children as we go in beginWork 50468 // or completeWork depending on whether we want to add them top->down or 50469 // bottom->up. Top->down is faster in IE11. 50470 50471 var _wasHydrated = popHydrationState(workInProgress); 50472 50473 if (_wasHydrated) { 50474 // TODO: Move this and createInstance step into the beginPhase 50475 // to consolidate. 50476 if (prepareToHydrateHostInstance(workInProgress, rootContainerInstance, currentHostContext)) { 50477 // If changes to the hydrated node need to be applied at the 50478 // commit-phase we mark this as such. 50479 markUpdate(workInProgress); 50480 } 50481 } else { 50482 var instance = createInstance(type, newProps, rootContainerInstance, currentHostContext, workInProgress); 50483 appendAllChildren(instance, workInProgress, false, false); 50484 workInProgress.stateNode = instance; // Certain renderers require commit-time effects for initial mount. 50485 // (eg DOM renderer supports auto-focus for certain elements). 50486 // Make sure such renderers get scheduled for later work. 50487 50488 if (finalizeInitialChildren(instance, type, newProps, rootContainerInstance)) { 50489 markUpdate(workInProgress); 50490 } 50491 } 50492 50493 if (workInProgress.ref !== null) { 50494 // If there is a ref on a host node we need to schedule a callback 50495 markRef$1(workInProgress); 50496 } 50497 } 50498 50499 return null; 50500 } 50501 50502 case HostText: 50503 { 50504 var newText = newProps; 50505 50506 if (current && workInProgress.stateNode != null) { 50507 var oldText = current.memoizedProps; // If we have an alternate, that means this is an update and we need 50508 // to schedule a side-effect to do the updates. 50509 50510 updateHostText$1(current, workInProgress, oldText, newText); 50511 } else { 50512 if (typeof newText !== 'string') { 50513 if (!(workInProgress.stateNode !== null)) { 50514 { 50515 throw Error( "We must have new props for new mounts. This error is likely caused by a bug in React. Please file an issue." ); 50516 } 50517 } // This can happen when we abort work. 50518 50519 } 50520 50521 var _rootContainerInstance = getRootHostContainer(); 50522 50523 var _currentHostContext = getHostContext(); 50524 50525 var _wasHydrated2 = popHydrationState(workInProgress); 50526 50527 if (_wasHydrated2) { 50528 if (prepareToHydrateHostTextInstance(workInProgress)) { 50529 markUpdate(workInProgress); 50530 } 50531 } else { 50532 workInProgress.stateNode = createTextInstance(newText, _rootContainerInstance, _currentHostContext, workInProgress); 50533 } 50534 } 50535 50536 return null; 50537 } 50538 50539 case SuspenseComponent: 50540 { 50541 popSuspenseContext(workInProgress); 50542 var nextState = workInProgress.memoizedState; 50543 50544 if ((workInProgress.flags & DidCapture) !== NoFlags) { 50545 // Something suspended. Re-render with the fallback children. 50546 workInProgress.lanes = renderLanes; // Do not reset the effect list. 50547 50548 if ( (workInProgress.mode & ProfileMode) !== NoMode) { 50549 transferActualDuration(workInProgress); 50550 } 50551 50552 return workInProgress; 50553 } 50554 50555 var nextDidTimeout = nextState !== null; 50556 var prevDidTimeout = false; 50557 50558 if (current === null) { 50559 if (workInProgress.memoizedProps.fallback !== undefined) { 50560 popHydrationState(workInProgress); 50561 } 50562 } else { 50563 var prevState = current.memoizedState; 50564 prevDidTimeout = prevState !== null; 50565 } 50566 50567 if (nextDidTimeout && !prevDidTimeout) { 50568 // If this subtreee is running in blocking mode we can suspend, 50569 // otherwise we won't suspend. 50570 // TODO: This will still suspend a synchronous tree if anything 50571 // in the concurrent tree already suspended during this render. 50572 // This is a known bug. 50573 if ((workInProgress.mode & BlockingMode) !== NoMode) { 50574 // TODO: Move this back to throwException because this is too late 50575 // if this is a large tree which is common for initial loads. We 50576 // don't know if we should restart a render or not until we get 50577 // this marker, and this is too late. 50578 // If this render already had a ping or lower pri updates, 50579 // and this is the first time we know we're going to suspend we 50580 // should be able to immediately restart from within throwException. 50581 var hasInvisibleChildContext = current === null && workInProgress.memoizedProps.unstable_avoidThisFallback !== true; 50582 50583 if (hasInvisibleChildContext || hasSuspenseContext(suspenseStackCursor.current, InvisibleParentSuspenseContext)) { 50584 // If this was in an invisible tree or a new render, then showing 50585 // this boundary is ok. 50586 renderDidSuspend(); 50587 } else { 50588 // Otherwise, we're going to have to hide content so we should 50589 // suspend for longer if possible. 50590 renderDidSuspendDelayIfPossible(); 50591 } 50592 } 50593 } 50594 50595 { 50596 // TODO: Only schedule updates if these values are non equal, i.e. it changed. 50597 if (nextDidTimeout || prevDidTimeout) { 50598 // If this boundary just timed out, schedule an effect to attach a 50599 // retry listener to the promise. This flag is also used to hide the 50600 // primary children. In mutation mode, we also need the flag to 50601 // *unhide* children that were previously hidden, so check if this 50602 // is currently timed out, too. 50603 workInProgress.flags |= Update; 50604 } 50605 } 50606 50607 return null; 50608 } 50609 50610 case HostPortal: 50611 popHostContainer(workInProgress); 50612 updateHostContainer(workInProgress); 50613 50614 if (current === null) { 50615 preparePortalMount(workInProgress.stateNode.containerInfo); 50616 } 50617 50618 return null; 50619 50620 case ContextProvider: 50621 // Pop provider fiber 50622 popProvider(workInProgress); 50623 return null; 50624 50625 case IncompleteClassComponent: 50626 { 50627 // Same as class component case. I put it down here so that the tags are 50628 // sequential to ensure this switch is compiled to a jump table. 50629 var _Component = workInProgress.type; 50630 50631 if (isContextProvider(_Component)) { 50632 popContext(workInProgress); 50633 } 50634 50635 return null; 50636 } 50637 50638 case SuspenseListComponent: 50639 { 50640 popSuspenseContext(workInProgress); 50641 var renderState = workInProgress.memoizedState; 50642 50643 if (renderState === null) { 50644 // We're running in the default, "independent" mode. 50645 // We don't do anything in this mode. 50646 return null; 50647 } 50648 50649 var didSuspendAlready = (workInProgress.flags & DidCapture) !== NoFlags; 50650 var renderedTail = renderState.rendering; 50651 50652 if (renderedTail === null) { 50653 // We just rendered the head. 50654 if (!didSuspendAlready) { 50655 // This is the first pass. We need to figure out if anything is still 50656 // suspended in the rendered set. 50657 // If new content unsuspended, but there's still some content that 50658 // didn't. Then we need to do a second pass that forces everything 50659 // to keep showing their fallbacks. 50660 // We might be suspended if something in this render pass suspended, or 50661 // something in the previous committed pass suspended. Otherwise, 50662 // there's no chance so we can skip the expensive call to 50663 // findFirstSuspended. 50664 var cannotBeSuspended = renderHasNotSuspendedYet() && (current === null || (current.flags & DidCapture) === NoFlags); 50665 50666 if (!cannotBeSuspended) { 50667 var row = workInProgress.child; 50668 50669 while (row !== null) { 50670 var suspended = findFirstSuspended(row); 50671 50672 if (suspended !== null) { 50673 didSuspendAlready = true; 50674 workInProgress.flags |= DidCapture; 50675 cutOffTailIfNeeded(renderState, false); // If this is a newly suspended tree, it might not get committed as 50676 // part of the second pass. In that case nothing will subscribe to 50677 // its thennables. Instead, we'll transfer its thennables to the 50678 // SuspenseList so that it can retry if they resolve. 50679 // There might be multiple of these in the list but since we're 50680 // going to wait for all of them anyway, it doesn't really matter 50681 // which ones gets to ping. In theory we could get clever and keep 50682 // track of how many dependencies remain but it gets tricky because 50683 // in the meantime, we can add/remove/change items and dependencies. 50684 // We might bail out of the loop before finding any but that 50685 // doesn't matter since that means that the other boundaries that 50686 // we did find already has their listeners attached. 50687 50688 var newThennables = suspended.updateQueue; 50689 50690 if (newThennables !== null) { 50691 workInProgress.updateQueue = newThennables; 50692 workInProgress.flags |= Update; 50693 } // Rerender the whole list, but this time, we'll force fallbacks 50694 // to stay in place. 50695 // Reset the effect list before doing the second pass since that's now invalid. 50696 50697 50698 if (renderState.lastEffect === null) { 50699 workInProgress.firstEffect = null; 50700 } 50701 50702 workInProgress.lastEffect = renderState.lastEffect; // Reset the child fibers to their original state. 50703 50704 resetChildFibers(workInProgress, renderLanes); // Set up the Suspense Context to force suspense and immediately 50705 // rerender the children. 50706 50707 pushSuspenseContext(workInProgress, setShallowSuspenseContext(suspenseStackCursor.current, ForceSuspenseFallback)); 50708 return workInProgress.child; 50709 } 50710 50711 row = row.sibling; 50712 } 50713 } 50714 50715 if (renderState.tail !== null && now() > getRenderTargetTime()) { 50716 // We have already passed our CPU deadline but we still have rows 50717 // left in the tail. We'll just give up further attempts to render 50718 // the main content and only render fallbacks. 50719 workInProgress.flags |= DidCapture; 50720 didSuspendAlready = true; 50721 cutOffTailIfNeeded(renderState, false); // Since nothing actually suspended, there will nothing to ping this 50722 // to get it started back up to attempt the next item. While in terms 50723 // of priority this work has the same priority as this current render, 50724 // it's not part of the same transition once the transition has 50725 // committed. If it's sync, we still want to yield so that it can be 50726 // painted. Conceptually, this is really the same as pinging. 50727 // We can use any RetryLane even if it's the one currently rendering 50728 // since we're leaving it behind on this node. 50729 50730 workInProgress.lanes = SomeRetryLane; 50731 50732 { 50733 markSpawnedWork(SomeRetryLane); 50734 } 50735 } 50736 } else { 50737 cutOffTailIfNeeded(renderState, false); 50738 } // Next we're going to render the tail. 50739 50740 } else { 50741 // Append the rendered row to the child list. 50742 if (!didSuspendAlready) { 50743 var _suspended = findFirstSuspended(renderedTail); 50744 50745 if (_suspended !== null) { 50746 workInProgress.flags |= DidCapture; 50747 didSuspendAlready = true; // Ensure we transfer the update queue to the parent so that it doesn't 50748 // get lost if this row ends up dropped during a second pass. 50749 50750 var _newThennables = _suspended.updateQueue; 50751 50752 if (_newThennables !== null) { 50753 workInProgress.updateQueue = _newThennables; 50754 workInProgress.flags |= Update; 50755 } 50756 50757 cutOffTailIfNeeded(renderState, true); // This might have been modified. 50758 50759 if (renderState.tail === null && renderState.tailMode === 'hidden' && !renderedTail.alternate && !getIsHydrating() // We don't cut it if we're hydrating. 50760 ) { 50761 // We need to delete the row we just rendered. 50762 // Reset the effect list to what it was before we rendered this 50763 // child. The nested children have already appended themselves. 50764 var lastEffect = workInProgress.lastEffect = renderState.lastEffect; // Remove any effects that were appended after this point. 50765 50766 if (lastEffect !== null) { 50767 lastEffect.nextEffect = null; 50768 } // We're done. 50769 50770 50771 return null; 50772 } 50773 } else if ( // The time it took to render last row is greater than the remaining 50774 // time we have to render. So rendering one more row would likely 50775 // exceed it. 50776 now() * 2 - renderState.renderingStartTime > getRenderTargetTime() && renderLanes !== OffscreenLane) { 50777 // We have now passed our CPU deadline and we'll just give up further 50778 // attempts to render the main content and only render fallbacks. 50779 // The assumption is that this is usually faster. 50780 workInProgress.flags |= DidCapture; 50781 didSuspendAlready = true; 50782 cutOffTailIfNeeded(renderState, false); // Since nothing actually suspended, there will nothing to ping this 50783 // to get it started back up to attempt the next item. While in terms 50784 // of priority this work has the same priority as this current render, 50785 // it's not part of the same transition once the transition has 50786 // committed. If it's sync, we still want to yield so that it can be 50787 // painted. Conceptually, this is really the same as pinging. 50788 // We can use any RetryLane even if it's the one currently rendering 50789 // since we're leaving it behind on this node. 50790 50791 workInProgress.lanes = SomeRetryLane; 50792 50793 { 50794 markSpawnedWork(SomeRetryLane); 50795 } 50796 } 50797 } 50798 50799 if (renderState.isBackwards) { 50800 // The effect list of the backwards tail will have been added 50801 // to the end. This breaks the guarantee that life-cycles fire in 50802 // sibling order but that isn't a strong guarantee promised by React. 50803 // Especially since these might also just pop in during future commits. 50804 // Append to the beginning of the list. 50805 renderedTail.sibling = workInProgress.child; 50806 workInProgress.child = renderedTail; 50807 } else { 50808 var previousSibling = renderState.last; 50809 50810 if (previousSibling !== null) { 50811 previousSibling.sibling = renderedTail; 50812 } else { 50813 workInProgress.child = renderedTail; 50814 } 50815 50816 renderState.last = renderedTail; 50817 } 50818 } 50819 50820 if (renderState.tail !== null) { 50821 // We still have tail rows to render. 50822 // Pop a row. 50823 var next = renderState.tail; 50824 renderState.rendering = next; 50825 renderState.tail = next.sibling; 50826 renderState.lastEffect = workInProgress.lastEffect; 50827 renderState.renderingStartTime = now(); 50828 next.sibling = null; // Restore the context. 50829 // TODO: We can probably just avoid popping it instead and only 50830 // setting it the first time we go from not suspended to suspended. 50831 50832 var suspenseContext = suspenseStackCursor.current; 50833 50834 if (didSuspendAlready) { 50835 suspenseContext = setShallowSuspenseContext(suspenseContext, ForceSuspenseFallback); 50836 } else { 50837 suspenseContext = setDefaultShallowSuspenseContext(suspenseContext); 50838 } 50839 50840 pushSuspenseContext(workInProgress, suspenseContext); // Do a pass over the next row. 50841 50842 return next; 50843 } 50844 50845 return null; 50846 } 50847 50848 case FundamentalComponent: 50849 { 50850 50851 break; 50852 } 50853 50854 case ScopeComponent: 50855 { 50856 50857 break; 50858 } 50859 50860 case Block: 50861 50862 break; 50863 50864 case OffscreenComponent: 50865 case LegacyHiddenComponent: 50866 { 50867 popRenderLanes(workInProgress); 50868 50869 if (current !== null) { 50870 var _nextState = workInProgress.memoizedState; 50871 var _prevState = current.memoizedState; 50872 var prevIsHidden = _prevState !== null; 50873 var nextIsHidden = _nextState !== null; 50874 50875 if (prevIsHidden !== nextIsHidden && newProps.mode !== 'unstable-defer-without-hiding') { 50876 workInProgress.flags |= Update; 50877 } 50878 } 50879 50880 return null; 50881 } 50882 } 50883 50884 { 50885 { 50886 throw Error( "Unknown unit of work tag (" + workInProgress.tag + "). This error is likely caused by a bug in React. Please file an issue." ); 50887 } 50888 } 50889} 50890 50891function unwindWork(workInProgress, renderLanes) { 50892 switch (workInProgress.tag) { 50893 case ClassComponent: 50894 { 50895 var Component = workInProgress.type; 50896 50897 if (isContextProvider(Component)) { 50898 popContext(workInProgress); 50899 } 50900 50901 var flags = workInProgress.flags; 50902 50903 if (flags & ShouldCapture) { 50904 workInProgress.flags = flags & ~ShouldCapture | DidCapture; 50905 50906 if ( (workInProgress.mode & ProfileMode) !== NoMode) { 50907 transferActualDuration(workInProgress); 50908 } 50909 50910 return workInProgress; 50911 } 50912 50913 return null; 50914 } 50915 50916 case HostRoot: 50917 { 50918 popHostContainer(workInProgress); 50919 popTopLevelContextObject(workInProgress); 50920 resetWorkInProgressVersions(); 50921 var _flags = workInProgress.flags; 50922 50923 if (!((_flags & DidCapture) === NoFlags)) { 50924 { 50925 throw Error( "The root failed to unmount after an error. This is likely a bug in React. Please file an issue." ); 50926 } 50927 } 50928 50929 workInProgress.flags = _flags & ~ShouldCapture | DidCapture; 50930 return workInProgress; 50931 } 50932 50933 case HostComponent: 50934 { 50935 // TODO: popHydrationState 50936 popHostContext(workInProgress); 50937 return null; 50938 } 50939 50940 case SuspenseComponent: 50941 { 50942 popSuspenseContext(workInProgress); 50943 50944 var _flags2 = workInProgress.flags; 50945 50946 if (_flags2 & ShouldCapture) { 50947 workInProgress.flags = _flags2 & ~ShouldCapture | DidCapture; // Captured a suspense effect. Re-render the boundary. 50948 50949 if ( (workInProgress.mode & ProfileMode) !== NoMode) { 50950 transferActualDuration(workInProgress); 50951 } 50952 50953 return workInProgress; 50954 } 50955 50956 return null; 50957 } 50958 50959 case SuspenseListComponent: 50960 { 50961 popSuspenseContext(workInProgress); // SuspenseList doesn't actually catch anything. It should've been 50962 // caught by a nested boundary. If not, it should bubble through. 50963 50964 return null; 50965 } 50966 50967 case HostPortal: 50968 popHostContainer(workInProgress); 50969 return null; 50970 50971 case ContextProvider: 50972 popProvider(workInProgress); 50973 return null; 50974 50975 case OffscreenComponent: 50976 case LegacyHiddenComponent: 50977 popRenderLanes(workInProgress); 50978 return null; 50979 50980 default: 50981 return null; 50982 } 50983} 50984 50985function unwindInterruptedWork(interruptedWork) { 50986 switch (interruptedWork.tag) { 50987 case ClassComponent: 50988 { 50989 var childContextTypes = interruptedWork.type.childContextTypes; 50990 50991 if (childContextTypes !== null && childContextTypes !== undefined) { 50992 popContext(interruptedWork); 50993 } 50994 50995 break; 50996 } 50997 50998 case HostRoot: 50999 { 51000 popHostContainer(interruptedWork); 51001 popTopLevelContextObject(interruptedWork); 51002 resetWorkInProgressVersions(); 51003 break; 51004 } 51005 51006 case HostComponent: 51007 { 51008 popHostContext(interruptedWork); 51009 break; 51010 } 51011 51012 case HostPortal: 51013 popHostContainer(interruptedWork); 51014 break; 51015 51016 case SuspenseComponent: 51017 popSuspenseContext(interruptedWork); 51018 break; 51019 51020 case SuspenseListComponent: 51021 popSuspenseContext(interruptedWork); 51022 break; 51023 51024 case ContextProvider: 51025 popProvider(interruptedWork); 51026 break; 51027 51028 case OffscreenComponent: 51029 case LegacyHiddenComponent: 51030 popRenderLanes(interruptedWork); 51031 break; 51032 } 51033} 51034 51035function createCapturedValue(value, source) { 51036 // If the value is an error, call this function immediately after it is thrown 51037 // so the stack is accurate. 51038 return { 51039 value: value, 51040 source: source, 51041 stack: getStackByFiberInDevAndProd(source) 51042 }; 51043} 51044 51045// This module is forked in different environments. 51046// By default, return `true` to log errors to the console. 51047// Forks can return `false` if this isn't desirable. 51048function showErrorDialog(boundary, errorInfo) { 51049 return true; 51050} 51051 51052function logCapturedError(boundary, errorInfo) { 51053 try { 51054 var logError = showErrorDialog(boundary, errorInfo); // Allow injected showErrorDialog() to prevent default console.error logging. 51055 // This enables renderers like ReactNative to better manage redbox behavior. 51056 51057 if (logError === false) { 51058 return; 51059 } 51060 51061 var error = errorInfo.value; 51062 51063 if (true) { 51064 var source = errorInfo.source; 51065 var stack = errorInfo.stack; 51066 var componentStack = stack !== null ? stack : ''; // Browsers support silencing uncaught errors by calling 51067 // `preventDefault()` in window `error` handler. 51068 // We record this information as an expando on the error. 51069 51070 if (error != null && error._suppressLogging) { 51071 if (boundary.tag === ClassComponent) { 51072 // The error is recoverable and was silenced. 51073 // Ignore it and don't print the stack addendum. 51074 // This is handy for testing error boundaries without noise. 51075 return; 51076 } // The error is fatal. Since the silencing might have 51077 // been accidental, we'll surface it anyway. 51078 // However, the browser would have silenced the original error 51079 // so we'll print it first, and then print the stack addendum. 51080 51081 51082 console['error'](error); // Don't transform to our wrapper 51083 // For a more detailed description of this block, see: 51084 // https://github.com/facebook/react/pull/13384 51085 } 51086 51087 var componentName = source ? getComponentName(source.type) : null; 51088 var componentNameMessage = componentName ? "The above error occurred in the <" + componentName + "> component:" : 'The above error occurred in one of your React components:'; 51089 var errorBoundaryMessage; 51090 var errorBoundaryName = getComponentName(boundary.type); 51091 51092 if (errorBoundaryName) { 51093 errorBoundaryMessage = "React will try to recreate this component tree from scratch " + ("using the error boundary you provided, " + errorBoundaryName + "."); 51094 } else { 51095 errorBoundaryMessage = 'Consider adding an error boundary to your tree to customize error handling behavior.\n' + 'Visit https://reactjs.org/link/error-boundaries to learn more about error boundaries.'; 51096 } 51097 51098 var combinedMessage = componentNameMessage + "\n" + componentStack + "\n\n" + ("" + errorBoundaryMessage); // In development, we provide our own message with just the component stack. 51099 // We don't include the original error message and JS stack because the browser 51100 // has already printed it. Even if the application swallows the error, it is still 51101 // displayed by the browser thanks to the DEV-only fake event trick in ReactErrorUtils. 51102 51103 console['error'](combinedMessage); // Don't transform to our wrapper 51104 } else {} 51105 } catch (e) { 51106 // This method must not throw, or React internal state will get messed up. 51107 // If console.error is overridden, or logCapturedError() shows a dialog that throws, 51108 // we want to report this error outside of the normal stack as a last resort. 51109 // https://github.com/facebook/react/issues/13188 51110 setTimeout(function () { 51111 throw e; 51112 }); 51113 } 51114} 51115 51116var PossiblyWeakMap$1 = typeof WeakMap === 'function' ? WeakMap : Map; 51117 51118function createRootErrorUpdate(fiber, errorInfo, lane) { 51119 var update = createUpdate(NoTimestamp, lane); // Unmount the root by rendering null. 51120 51121 update.tag = CaptureUpdate; // Caution: React DevTools currently depends on this property 51122 // being called "element". 51123 51124 update.payload = { 51125 element: null 51126 }; 51127 var error = errorInfo.value; 51128 51129 update.callback = function () { 51130 onUncaughtError(error); 51131 logCapturedError(fiber, errorInfo); 51132 }; 51133 51134 return update; 51135} 51136 51137function createClassErrorUpdate(fiber, errorInfo, lane) { 51138 var update = createUpdate(NoTimestamp, lane); 51139 update.tag = CaptureUpdate; 51140 var getDerivedStateFromError = fiber.type.getDerivedStateFromError; 51141 51142 if (typeof getDerivedStateFromError === 'function') { 51143 var error$1 = errorInfo.value; 51144 51145 update.payload = function () { 51146 logCapturedError(fiber, errorInfo); 51147 return getDerivedStateFromError(error$1); 51148 }; 51149 } 51150 51151 var inst = fiber.stateNode; 51152 51153 if (inst !== null && typeof inst.componentDidCatch === 'function') { 51154 update.callback = function callback() { 51155 { 51156 markFailedErrorBoundaryForHotReloading(fiber); 51157 } 51158 51159 if (typeof getDerivedStateFromError !== 'function') { 51160 // To preserve the preexisting retry behavior of error boundaries, 51161 // we keep track of which ones already failed during this batch. 51162 // This gets reset before we yield back to the browser. 51163 // TODO: Warn in strict mode if getDerivedStateFromError is 51164 // not defined. 51165 markLegacyErrorBoundaryAsFailed(this); // Only log here if componentDidCatch is the only error boundary method defined 51166 51167 logCapturedError(fiber, errorInfo); 51168 } 51169 51170 var error$1 = errorInfo.value; 51171 var stack = errorInfo.stack; 51172 this.componentDidCatch(error$1, { 51173 componentStack: stack !== null ? stack : '' 51174 }); 51175 51176 { 51177 if (typeof getDerivedStateFromError !== 'function') { 51178 // If componentDidCatch is the only error boundary method defined, 51179 // then it needs to call setState to recover from errors. 51180 // If no state update is scheduled then the boundary will swallow the error. 51181 if (!includesSomeLane(fiber.lanes, SyncLane)) { 51182 error('%s: Error boundaries should implement getDerivedStateFromError(). ' + 'In that method, return a state update to display an error message or fallback UI.', getComponentName(fiber.type) || 'Unknown'); 51183 } 51184 } 51185 } 51186 }; 51187 } else { 51188 update.callback = function () { 51189 markFailedErrorBoundaryForHotReloading(fiber); 51190 }; 51191 } 51192 51193 return update; 51194} 51195 51196function attachPingListener(root, wakeable, lanes) { 51197 // Attach a listener to the promise to "ping" the root and retry. But only if 51198 // one does not already exist for the lanes we're currently rendering (which 51199 // acts like a "thread ID" here). 51200 var pingCache = root.pingCache; 51201 var threadIDs; 51202 51203 if (pingCache === null) { 51204 pingCache = root.pingCache = new PossiblyWeakMap$1(); 51205 threadIDs = new Set(); 51206 pingCache.set(wakeable, threadIDs); 51207 } else { 51208 threadIDs = pingCache.get(wakeable); 51209 51210 if (threadIDs === undefined) { 51211 threadIDs = new Set(); 51212 pingCache.set(wakeable, threadIDs); 51213 } 51214 } 51215 51216 if (!threadIDs.has(lanes)) { 51217 // Memoize using the thread ID to prevent redundant listeners. 51218 threadIDs.add(lanes); 51219 var ping = pingSuspendedRoot.bind(null, root, wakeable, lanes); 51220 wakeable.then(ping, ping); 51221 } 51222} 51223 51224function throwException(root, returnFiber, sourceFiber, value, rootRenderLanes) { 51225 // The source fiber did not complete. 51226 sourceFiber.flags |= Incomplete; // Its effect list is no longer valid. 51227 51228 sourceFiber.firstEffect = sourceFiber.lastEffect = null; 51229 51230 if (value !== null && typeof value === 'object' && typeof value.then === 'function') { 51231 // This is a wakeable. 51232 var wakeable = value; 51233 51234 if ((sourceFiber.mode & BlockingMode) === NoMode) { 51235 // Reset the memoizedState to what it was before we attempted 51236 // to render it. 51237 var currentSource = sourceFiber.alternate; 51238 51239 if (currentSource) { 51240 sourceFiber.updateQueue = currentSource.updateQueue; 51241 sourceFiber.memoizedState = currentSource.memoizedState; 51242 sourceFiber.lanes = currentSource.lanes; 51243 } else { 51244 sourceFiber.updateQueue = null; 51245 sourceFiber.memoizedState = null; 51246 } 51247 } 51248 51249 var hasInvisibleParentBoundary = hasSuspenseContext(suspenseStackCursor.current, InvisibleParentSuspenseContext); // Schedule the nearest Suspense to re-render the timed out view. 51250 51251 var _workInProgress = returnFiber; 51252 51253 do { 51254 if (_workInProgress.tag === SuspenseComponent && shouldCaptureSuspense(_workInProgress, hasInvisibleParentBoundary)) { 51255 // Found the nearest boundary. 51256 // Stash the promise on the boundary fiber. If the boundary times out, we'll 51257 // attach another listener to flip the boundary back to its normal state. 51258 var wakeables = _workInProgress.updateQueue; 51259 51260 if (wakeables === null) { 51261 var updateQueue = new Set(); 51262 updateQueue.add(wakeable); 51263 _workInProgress.updateQueue = updateQueue; 51264 } else { 51265 wakeables.add(wakeable); 51266 } // If the boundary is outside of blocking mode, we should *not* 51267 // suspend the commit. Pretend as if the suspended component rendered 51268 // null and keep rendering. In the commit phase, we'll schedule a 51269 // subsequent synchronous update to re-render the Suspense. 51270 // 51271 // Note: It doesn't matter whether the component that suspended was 51272 // inside a blocking mode tree. If the Suspense is outside of it, we 51273 // should *not* suspend the commit. 51274 51275 51276 if ((_workInProgress.mode & BlockingMode) === NoMode) { 51277 _workInProgress.flags |= DidCapture; 51278 sourceFiber.flags |= ForceUpdateForLegacySuspense; // We're going to commit this fiber even though it didn't complete. 51279 // But we shouldn't call any lifecycle methods or callbacks. Remove 51280 // all lifecycle effect tags. 51281 51282 sourceFiber.flags &= ~(LifecycleEffectMask | Incomplete); 51283 51284 if (sourceFiber.tag === ClassComponent) { 51285 var currentSourceFiber = sourceFiber.alternate; 51286 51287 if (currentSourceFiber === null) { 51288 // This is a new mount. Change the tag so it's not mistaken for a 51289 // completed class component. For example, we should not call 51290 // componentWillUnmount if it is deleted. 51291 sourceFiber.tag = IncompleteClassComponent; 51292 } else { 51293 // When we try rendering again, we should not reuse the current fiber, 51294 // since it's known to be in an inconsistent state. Use a force update to 51295 // prevent a bail out. 51296 var update = createUpdate(NoTimestamp, SyncLane); 51297 update.tag = ForceUpdate; 51298 enqueueUpdate(sourceFiber, update); 51299 } 51300 } // The source fiber did not complete. Mark it with Sync priority to 51301 // indicate that it still has pending work. 51302 51303 51304 sourceFiber.lanes = mergeLanes(sourceFiber.lanes, SyncLane); // Exit without suspending. 51305 51306 return; 51307 } // Confirmed that the boundary is in a concurrent mode tree. Continue 51308 // with the normal suspend path. 51309 // 51310 // After this we'll use a set of heuristics to determine whether this 51311 // render pass will run to completion or restart or "suspend" the commit. 51312 // The actual logic for this is spread out in different places. 51313 // 51314 // This first principle is that if we're going to suspend when we complete 51315 // a root, then we should also restart if we get an update or ping that 51316 // might unsuspend it, and vice versa. The only reason to suspend is 51317 // because you think you might want to restart before committing. However, 51318 // it doesn't make sense to restart only while in the period we're suspended. 51319 // 51320 // Restarting too aggressively is also not good because it starves out any 51321 // intermediate loading state. So we use heuristics to determine when. 51322 // Suspense Heuristics 51323 // 51324 // If nothing threw a Promise or all the same fallbacks are already showing, 51325 // then don't suspend/restart. 51326 // 51327 // If this is an initial render of a new tree of Suspense boundaries and 51328 // those trigger a fallback, then don't suspend/restart. We want to ensure 51329 // that we can show the initial loading state as quickly as possible. 51330 // 51331 // If we hit a "Delayed" case, such as when we'd switch from content back into 51332 // a fallback, then we should always suspend/restart. Transitions apply 51333 // to this case. If none is defined, JND is used instead. 51334 // 51335 // If we're already showing a fallback and it gets "retried", allowing us to show 51336 // another level, but there's still an inner boundary that would show a fallback, 51337 // then we suspend/restart for 500ms since the last time we showed a fallback 51338 // anywhere in the tree. This effectively throttles progressive loading into a 51339 // consistent train of commits. This also gives us an opportunity to restart to 51340 // get to the completed state slightly earlier. 51341 // 51342 // If there's ambiguity due to batching it's resolved in preference of: 51343 // 1) "delayed", 2) "initial render", 3) "retry". 51344 // 51345 // We want to ensure that a "busy" state doesn't get force committed. We want to 51346 // ensure that new initial loading states can commit as soon as possible. 51347 51348 51349 attachPingListener(root, wakeable, rootRenderLanes); 51350 _workInProgress.flags |= ShouldCapture; 51351 _workInProgress.lanes = rootRenderLanes; 51352 return; 51353 } // This boundary already captured during this render. Continue to the next 51354 // boundary. 51355 51356 51357 _workInProgress = _workInProgress.return; 51358 } while (_workInProgress !== null); // No boundary was found. Fallthrough to error mode. 51359 // TODO: Use invariant so the message is stripped in prod? 51360 51361 51362 value = new Error((getComponentName(sourceFiber.type) || 'A React component') + ' suspended while rendering, but no fallback UI was specified.\n' + '\n' + 'Add a <Suspense fallback=...> component higher in the tree to ' + 'provide a loading indicator or placeholder to display.'); 51363 } // We didn't find a boundary that could handle this type of exception. Start 51364 // over and traverse parent path again, this time treating the exception 51365 // as an error. 51366 51367 51368 renderDidError(); 51369 value = createCapturedValue(value, sourceFiber); 51370 var workInProgress = returnFiber; 51371 51372 do { 51373 switch (workInProgress.tag) { 51374 case HostRoot: 51375 { 51376 var _errorInfo = value; 51377 workInProgress.flags |= ShouldCapture; 51378 var lane = pickArbitraryLane(rootRenderLanes); 51379 workInProgress.lanes = mergeLanes(workInProgress.lanes, lane); 51380 51381 var _update = createRootErrorUpdate(workInProgress, _errorInfo, lane); 51382 51383 enqueueCapturedUpdate(workInProgress, _update); 51384 return; 51385 } 51386 51387 case ClassComponent: 51388 // Capture and retry 51389 var errorInfo = value; 51390 var ctor = workInProgress.type; 51391 var instance = workInProgress.stateNode; 51392 51393 if ((workInProgress.flags & DidCapture) === NoFlags && (typeof ctor.getDerivedStateFromError === 'function' || instance !== null && typeof instance.componentDidCatch === 'function' && !isAlreadyFailedLegacyErrorBoundary(instance))) { 51394 workInProgress.flags |= ShouldCapture; 51395 51396 var _lane = pickArbitraryLane(rootRenderLanes); 51397 51398 workInProgress.lanes = mergeLanes(workInProgress.lanes, _lane); // Schedule the error boundary to re-render using updated state 51399 51400 var _update2 = createClassErrorUpdate(workInProgress, errorInfo, _lane); 51401 51402 enqueueCapturedUpdate(workInProgress, _update2); 51403 return; 51404 } 51405 51406 break; 51407 } 51408 51409 workInProgress = workInProgress.return; 51410 } while (workInProgress !== null); 51411} 51412 51413var didWarnAboutUndefinedSnapshotBeforeUpdate = null; 51414 51415{ 51416 didWarnAboutUndefinedSnapshotBeforeUpdate = new Set(); 51417} 51418 51419var PossiblyWeakSet = typeof WeakSet === 'function' ? WeakSet : Set; 51420 51421var callComponentWillUnmountWithTimer = function (current, instance) { 51422 instance.props = current.memoizedProps; 51423 instance.state = current.memoizedState; 51424 51425 { 51426 instance.componentWillUnmount(); 51427 } 51428}; // Capture errors so they don't interrupt unmounting. 51429 51430 51431function safelyCallComponentWillUnmount(current, instance) { 51432 { 51433 invokeGuardedCallback(null, callComponentWillUnmountWithTimer, null, current, instance); 51434 51435 if (hasCaughtError()) { 51436 var unmountError = clearCaughtError(); 51437 captureCommitPhaseError(current, unmountError); 51438 } 51439 } 51440} 51441 51442function safelyDetachRef(current) { 51443 var ref = current.ref; 51444 51445 if (ref !== null) { 51446 if (typeof ref === 'function') { 51447 { 51448 invokeGuardedCallback(null, ref, null, null); 51449 51450 if (hasCaughtError()) { 51451 var refError = clearCaughtError(); 51452 captureCommitPhaseError(current, refError); 51453 } 51454 } 51455 } else { 51456 ref.current = null; 51457 } 51458 } 51459} 51460 51461function safelyCallDestroy(current, destroy) { 51462 { 51463 invokeGuardedCallback(null, destroy, null); 51464 51465 if (hasCaughtError()) { 51466 var error = clearCaughtError(); 51467 captureCommitPhaseError(current, error); 51468 } 51469 } 51470} 51471 51472function commitBeforeMutationLifeCycles(current, finishedWork) { 51473 switch (finishedWork.tag) { 51474 case FunctionComponent: 51475 case ForwardRef: 51476 case SimpleMemoComponent: 51477 case Block: 51478 { 51479 return; 51480 } 51481 51482 case ClassComponent: 51483 { 51484 if (finishedWork.flags & Snapshot) { 51485 if (current !== null) { 51486 var prevProps = current.memoizedProps; 51487 var prevState = current.memoizedState; 51488 var instance = finishedWork.stateNode; // We could update instance props and state here, 51489 // but instead we rely on them being set during last render. 51490 // TODO: revisit this when we implement resuming. 51491 51492 { 51493 if (finishedWork.type === finishedWork.elementType && !didWarnAboutReassigningProps) { 51494 if (instance.props !== finishedWork.memoizedProps) { 51495 error('Expected %s props to match memoized props before ' + 'getSnapshotBeforeUpdate. ' + 'This might either be because of a bug in React, or because ' + 'a component reassigns its own `this.props`. ' + 'Please file an issue.', getComponentName(finishedWork.type) || 'instance'); 51496 } 51497 51498 if (instance.state !== finishedWork.memoizedState) { 51499 error('Expected %s state to match memoized state before ' + 'getSnapshotBeforeUpdate. ' + 'This might either be because of a bug in React, or because ' + 'a component reassigns its own `this.state`. ' + 'Please file an issue.', getComponentName(finishedWork.type) || 'instance'); 51500 } 51501 } 51502 } 51503 51504 var snapshot = instance.getSnapshotBeforeUpdate(finishedWork.elementType === finishedWork.type ? prevProps : resolveDefaultProps(finishedWork.type, prevProps), prevState); 51505 51506 { 51507 var didWarnSet = didWarnAboutUndefinedSnapshotBeforeUpdate; 51508 51509 if (snapshot === undefined && !didWarnSet.has(finishedWork.type)) { 51510 didWarnSet.add(finishedWork.type); 51511 51512 error('%s.getSnapshotBeforeUpdate(): A snapshot value (or null) ' + 'must be returned. You have returned undefined.', getComponentName(finishedWork.type)); 51513 } 51514 } 51515 51516 instance.__reactInternalSnapshotBeforeUpdate = snapshot; 51517 } 51518 } 51519 51520 return; 51521 } 51522 51523 case HostRoot: 51524 { 51525 { 51526 if (finishedWork.flags & Snapshot) { 51527 var root = finishedWork.stateNode; 51528 clearContainer(root.containerInfo); 51529 } 51530 } 51531 51532 return; 51533 } 51534 51535 case HostComponent: 51536 case HostText: 51537 case HostPortal: 51538 case IncompleteClassComponent: 51539 // Nothing to do for these component types 51540 return; 51541 } 51542 51543 { 51544 { 51545 throw Error( "This unit of work tag should not have side-effects. This error is likely caused by a bug in React. Please file an issue." ); 51546 } 51547 } 51548} 51549 51550function commitHookEffectListUnmount(tag, finishedWork) { 51551 var updateQueue = finishedWork.updateQueue; 51552 var lastEffect = updateQueue !== null ? updateQueue.lastEffect : null; 51553 51554 if (lastEffect !== null) { 51555 var firstEffect = lastEffect.next; 51556 var effect = firstEffect; 51557 51558 do { 51559 if ((effect.tag & tag) === tag) { 51560 // Unmount 51561 var destroy = effect.destroy; 51562 effect.destroy = undefined; 51563 51564 if (destroy !== undefined) { 51565 destroy(); 51566 } 51567 } 51568 51569 effect = effect.next; 51570 } while (effect !== firstEffect); 51571 } 51572} 51573 51574function commitHookEffectListMount(tag, finishedWork) { 51575 var updateQueue = finishedWork.updateQueue; 51576 var lastEffect = updateQueue !== null ? updateQueue.lastEffect : null; 51577 51578 if (lastEffect !== null) { 51579 var firstEffect = lastEffect.next; 51580 var effect = firstEffect; 51581 51582 do { 51583 if ((effect.tag & tag) === tag) { 51584 // Mount 51585 var create = effect.create; 51586 effect.destroy = create(); 51587 51588 { 51589 var destroy = effect.destroy; 51590 51591 if (destroy !== undefined && typeof destroy !== 'function') { 51592 var addendum = void 0; 51593 51594 if (destroy === null) { 51595 addendum = ' You returned null. If your effect does not require clean ' + 'up, return undefined (or nothing).'; 51596 } else if (typeof destroy.then === 'function') { 51597 addendum = '\n\nIt looks like you wrote useEffect(async () => ...) or returned a Promise. ' + 'Instead, write the async function inside your effect ' + 'and call it immediately:\n\n' + 'useEffect(() => {\n' + ' async function fetchData() {\n' + ' // You can await here\n' + ' const response = await MyAPI.getData(someId);\n' + ' // ...\n' + ' }\n' + ' fetchData();\n' + "}, [someId]); // Or [] if effect doesn't need props or state\n\n" + 'Learn more about data fetching with Hooks: https://reactjs.org/link/hooks-data-fetching'; 51598 } else { 51599 addendum = ' You returned: ' + destroy; 51600 } 51601 51602 error('An effect function must not return anything besides a function, ' + 'which is used for clean-up.%s', addendum); 51603 } 51604 } 51605 } 51606 51607 effect = effect.next; 51608 } while (effect !== firstEffect); 51609 } 51610} 51611 51612function schedulePassiveEffects(finishedWork) { 51613 var updateQueue = finishedWork.updateQueue; 51614 var lastEffect = updateQueue !== null ? updateQueue.lastEffect : null; 51615 51616 if (lastEffect !== null) { 51617 var firstEffect = lastEffect.next; 51618 var effect = firstEffect; 51619 51620 do { 51621 var _effect = effect, 51622 next = _effect.next, 51623 tag = _effect.tag; 51624 51625 if ((tag & Passive$1) !== NoFlags$1 && (tag & HasEffect) !== NoFlags$1) { 51626 enqueuePendingPassiveHookEffectUnmount(finishedWork, effect); 51627 enqueuePendingPassiveHookEffectMount(finishedWork, effect); 51628 } 51629 51630 effect = next; 51631 } while (effect !== firstEffect); 51632 } 51633} 51634 51635function commitLifeCycles(finishedRoot, current, finishedWork, committedLanes) { 51636 switch (finishedWork.tag) { 51637 case FunctionComponent: 51638 case ForwardRef: 51639 case SimpleMemoComponent: 51640 case Block: 51641 { 51642 // At this point layout effects have already been destroyed (during mutation phase). 51643 // This is done to prevent sibling component effects from interfering with each other, 51644 // e.g. a destroy function in one component should never override a ref set 51645 // by a create function in another component during the same commit. 51646 { 51647 commitHookEffectListMount(Layout | HasEffect, finishedWork); 51648 } 51649 51650 schedulePassiveEffects(finishedWork); 51651 return; 51652 } 51653 51654 case ClassComponent: 51655 { 51656 var instance = finishedWork.stateNode; 51657 51658 if (finishedWork.flags & Update) { 51659 if (current === null) { 51660 // We could update instance props and state here, 51661 // but instead we rely on them being set during last render. 51662 // TODO: revisit this when we implement resuming. 51663 { 51664 if (finishedWork.type === finishedWork.elementType && !didWarnAboutReassigningProps) { 51665 if (instance.props !== finishedWork.memoizedProps) { 51666 error('Expected %s props to match memoized props before ' + 'componentDidMount. ' + 'This might either be because of a bug in React, or because ' + 'a component reassigns its own `this.props`. ' + 'Please file an issue.', getComponentName(finishedWork.type) || 'instance'); 51667 } 51668 51669 if (instance.state !== finishedWork.memoizedState) { 51670 error('Expected %s state to match memoized state before ' + 'componentDidMount. ' + 'This might either be because of a bug in React, or because ' + 'a component reassigns its own `this.state`. ' + 'Please file an issue.', getComponentName(finishedWork.type) || 'instance'); 51671 } 51672 } 51673 } 51674 51675 { 51676 instance.componentDidMount(); 51677 } 51678 } else { 51679 var prevProps = finishedWork.elementType === finishedWork.type ? current.memoizedProps : resolveDefaultProps(finishedWork.type, current.memoizedProps); 51680 var prevState = current.memoizedState; // We could update instance props and state here, 51681 // but instead we rely on them being set during last render. 51682 // TODO: revisit this when we implement resuming. 51683 51684 { 51685 if (finishedWork.type === finishedWork.elementType && !didWarnAboutReassigningProps) { 51686 if (instance.props !== finishedWork.memoizedProps) { 51687 error('Expected %s props to match memoized props before ' + 'componentDidUpdate. ' + 'This might either be because of a bug in React, or because ' + 'a component reassigns its own `this.props`. ' + 'Please file an issue.', getComponentName(finishedWork.type) || 'instance'); 51688 } 51689 51690 if (instance.state !== finishedWork.memoizedState) { 51691 error('Expected %s state to match memoized state before ' + 'componentDidUpdate. ' + 'This might either be because of a bug in React, or because ' + 'a component reassigns its own `this.state`. ' + 'Please file an issue.', getComponentName(finishedWork.type) || 'instance'); 51692 } 51693 } 51694 } 51695 51696 { 51697 instance.componentDidUpdate(prevProps, prevState, instance.__reactInternalSnapshotBeforeUpdate); 51698 } 51699 } 51700 } // TODO: I think this is now always non-null by the time it reaches the 51701 // commit phase. Consider removing the type check. 51702 51703 51704 var updateQueue = finishedWork.updateQueue; 51705 51706 if (updateQueue !== null) { 51707 { 51708 if (finishedWork.type === finishedWork.elementType && !didWarnAboutReassigningProps) { 51709 if (instance.props !== finishedWork.memoizedProps) { 51710 error('Expected %s props to match memoized props before ' + 'processing the update queue. ' + 'This might either be because of a bug in React, or because ' + 'a component reassigns its own `this.props`. ' + 'Please file an issue.', getComponentName(finishedWork.type) || 'instance'); 51711 } 51712 51713 if (instance.state !== finishedWork.memoizedState) { 51714 error('Expected %s state to match memoized state before ' + 'processing the update queue. ' + 'This might either be because of a bug in React, or because ' + 'a component reassigns its own `this.state`. ' + 'Please file an issue.', getComponentName(finishedWork.type) || 'instance'); 51715 } 51716 } 51717 } // We could update instance props and state here, 51718 // but instead we rely on them being set during last render. 51719 // TODO: revisit this when we implement resuming. 51720 51721 51722 commitUpdateQueue(finishedWork, updateQueue, instance); 51723 } 51724 51725 return; 51726 } 51727 51728 case HostRoot: 51729 { 51730 // TODO: I think this is now always non-null by the time it reaches the 51731 // commit phase. Consider removing the type check. 51732 var _updateQueue = finishedWork.updateQueue; 51733 51734 if (_updateQueue !== null) { 51735 var _instance = null; 51736 51737 if (finishedWork.child !== null) { 51738 switch (finishedWork.child.tag) { 51739 case HostComponent: 51740 _instance = getPublicInstance(finishedWork.child.stateNode); 51741 break; 51742 51743 case ClassComponent: 51744 _instance = finishedWork.child.stateNode; 51745 break; 51746 } 51747 } 51748 51749 commitUpdateQueue(finishedWork, _updateQueue, _instance); 51750 } 51751 51752 return; 51753 } 51754 51755 case HostComponent: 51756 { 51757 var _instance2 = finishedWork.stateNode; // Renderers may schedule work to be done after host components are mounted 51758 // (eg DOM renderer may schedule auto-focus for inputs and form controls). 51759 // These effects should only be committed when components are first mounted, 51760 // aka when there is no current/alternate. 51761 51762 if (current === null && finishedWork.flags & Update) { 51763 var type = finishedWork.type; 51764 var props = finishedWork.memoizedProps; 51765 commitMount(_instance2, type, props); 51766 } 51767 51768 return; 51769 } 51770 51771 case HostText: 51772 { 51773 // We have no life-cycles associated with text. 51774 return; 51775 } 51776 51777 case HostPortal: 51778 { 51779 // We have no life-cycles associated with portals. 51780 return; 51781 } 51782 51783 case Profiler: 51784 { 51785 { 51786 var _finishedWork$memoize2 = finishedWork.memoizedProps, 51787 onCommit = _finishedWork$memoize2.onCommit, 51788 onRender = _finishedWork$memoize2.onRender; 51789 var effectDuration = finishedWork.stateNode.effectDuration; 51790 var commitTime = getCommitTime(); 51791 51792 if (typeof onRender === 'function') { 51793 { 51794 onRender(finishedWork.memoizedProps.id, current === null ? 'mount' : 'update', finishedWork.actualDuration, finishedWork.treeBaseDuration, finishedWork.actualStartTime, commitTime, finishedRoot.memoizedInteractions); 51795 } 51796 } 51797 } 51798 51799 return; 51800 } 51801 51802 case SuspenseComponent: 51803 { 51804 commitSuspenseHydrationCallbacks(finishedRoot, finishedWork); 51805 return; 51806 } 51807 51808 case SuspenseListComponent: 51809 case IncompleteClassComponent: 51810 case FundamentalComponent: 51811 case ScopeComponent: 51812 case OffscreenComponent: 51813 case LegacyHiddenComponent: 51814 return; 51815 } 51816 51817 { 51818 { 51819 throw Error( "This unit of work tag should not have side-effects. This error is likely caused by a bug in React. Please file an issue." ); 51820 } 51821 } 51822} 51823 51824function hideOrUnhideAllChildren(finishedWork, isHidden) { 51825 { 51826 // We only have the top Fiber that was inserted but we need to recurse down its 51827 // children to find all the terminal nodes. 51828 var node = finishedWork; 51829 51830 while (true) { 51831 if (node.tag === HostComponent) { 51832 var instance = node.stateNode; 51833 51834 if (isHidden) { 51835 hideInstance(instance); 51836 } else { 51837 unhideInstance(node.stateNode, node.memoizedProps); 51838 } 51839 } else if (node.tag === HostText) { 51840 var _instance3 = node.stateNode; 51841 51842 if (isHidden) { 51843 hideTextInstance(_instance3); 51844 } else { 51845 unhideTextInstance(_instance3, node.memoizedProps); 51846 } 51847 } else if ((node.tag === OffscreenComponent || node.tag === LegacyHiddenComponent) && node.memoizedState !== null && node !== finishedWork) ; else if (node.child !== null) { 51848 node.child.return = node; 51849 node = node.child; 51850 continue; 51851 } 51852 51853 if (node === finishedWork) { 51854 return; 51855 } 51856 51857 while (node.sibling === null) { 51858 if (node.return === null || node.return === finishedWork) { 51859 return; 51860 } 51861 51862 node = node.return; 51863 } 51864 51865 node.sibling.return = node.return; 51866 node = node.sibling; 51867 } 51868 } 51869} 51870 51871function commitAttachRef(finishedWork) { 51872 var ref = finishedWork.ref; 51873 51874 if (ref !== null) { 51875 var instance = finishedWork.stateNode; 51876 var instanceToUse; 51877 51878 switch (finishedWork.tag) { 51879 case HostComponent: 51880 instanceToUse = getPublicInstance(instance); 51881 break; 51882 51883 default: 51884 instanceToUse = instance; 51885 } // Moved outside to ensure DCE works with this flag 51886 51887 if (typeof ref === 'function') { 51888 ref(instanceToUse); 51889 } else { 51890 { 51891 if (!ref.hasOwnProperty('current')) { 51892 error('Unexpected ref object provided for %s. ' + 'Use either a ref-setter function or React.createRef().', getComponentName(finishedWork.type)); 51893 } 51894 } 51895 51896 ref.current = instanceToUse; 51897 } 51898 } 51899} 51900 51901function commitDetachRef(current) { 51902 var currentRef = current.ref; 51903 51904 if (currentRef !== null) { 51905 if (typeof currentRef === 'function') { 51906 currentRef(null); 51907 } else { 51908 currentRef.current = null; 51909 } 51910 } 51911} // User-originating errors (lifecycles and refs) should not interrupt 51912// deletion, so don't let them throw. Host-originating errors should 51913// interrupt deletion, so it's okay 51914 51915 51916function commitUnmount(finishedRoot, current, renderPriorityLevel) { 51917 onCommitUnmount(current); 51918 51919 switch (current.tag) { 51920 case FunctionComponent: 51921 case ForwardRef: 51922 case MemoComponent: 51923 case SimpleMemoComponent: 51924 case Block: 51925 { 51926 var updateQueue = current.updateQueue; 51927 51928 if (updateQueue !== null) { 51929 var lastEffect = updateQueue.lastEffect; 51930 51931 if (lastEffect !== null) { 51932 var firstEffect = lastEffect.next; 51933 var effect = firstEffect; 51934 51935 do { 51936 var _effect2 = effect, 51937 destroy = _effect2.destroy, 51938 tag = _effect2.tag; 51939 51940 if (destroy !== undefined) { 51941 if ((tag & Passive$1) !== NoFlags$1) { 51942 enqueuePendingPassiveHookEffectUnmount(current, effect); 51943 } else { 51944 { 51945 safelyCallDestroy(current, destroy); 51946 } 51947 } 51948 } 51949 51950 effect = effect.next; 51951 } while (effect !== firstEffect); 51952 } 51953 } 51954 51955 return; 51956 } 51957 51958 case ClassComponent: 51959 { 51960 safelyDetachRef(current); 51961 var instance = current.stateNode; 51962 51963 if (typeof instance.componentWillUnmount === 'function') { 51964 safelyCallComponentWillUnmount(current, instance); 51965 } 51966 51967 return; 51968 } 51969 51970 case HostComponent: 51971 { 51972 safelyDetachRef(current); 51973 return; 51974 } 51975 51976 case HostPortal: 51977 { 51978 // TODO: this is recursive. 51979 // We are also not using this parent because 51980 // the portal will get pushed immediately. 51981 { 51982 unmountHostComponents(finishedRoot, current); 51983 } 51984 51985 return; 51986 } 51987 51988 case FundamentalComponent: 51989 { 51990 51991 return; 51992 } 51993 51994 case DehydratedFragment: 51995 { 51996 51997 return; 51998 } 51999 52000 case ScopeComponent: 52001 { 52002 52003 return; 52004 } 52005 } 52006} 52007 52008function commitNestedUnmounts(finishedRoot, root, renderPriorityLevel) { 52009 // While we're inside a removed host node we don't want to call 52010 // removeChild on the inner nodes because they're removed by the top 52011 // call anyway. We also want to call componentWillUnmount on all 52012 // composites before this host node is removed from the tree. Therefore 52013 // we do an inner loop while we're still inside the host node. 52014 var node = root; 52015 52016 while (true) { 52017 commitUnmount(finishedRoot, node); // Visit children because they may contain more composite or host nodes. 52018 // Skip portals because commitUnmount() currently visits them recursively. 52019 52020 if (node.child !== null && ( // If we use mutation we drill down into portals using commitUnmount above. 52021 // If we don't use mutation we drill down into portals here instead. 52022 node.tag !== HostPortal)) { 52023 node.child.return = node; 52024 node = node.child; 52025 continue; 52026 } 52027 52028 if (node === root) { 52029 return; 52030 } 52031 52032 while (node.sibling === null) { 52033 if (node.return === null || node.return === root) { 52034 return; 52035 } 52036 52037 node = node.return; 52038 } 52039 52040 node.sibling.return = node.return; 52041 node = node.sibling; 52042 } 52043} 52044 52045function detachFiberMutation(fiber) { 52046 // Cut off the return pointers to disconnect it from the tree. Ideally, we 52047 // should clear the child pointer of the parent alternate to let this 52048 // get GC:ed but we don't know which for sure which parent is the current 52049 // one so we'll settle for GC:ing the subtree of this child. This child 52050 // itself will be GC:ed when the parent updates the next time. 52051 // Note: we cannot null out sibling here, otherwise it can cause issues 52052 // with findDOMNode and how it requires the sibling field to carry out 52053 // traversal in a later effect. See PR #16820. We now clear the sibling 52054 // field after effects, see: detachFiberAfterEffects. 52055 // 52056 // Don't disconnect stateNode now; it will be detached in detachFiberAfterEffects. 52057 // It may be required if the current component is an error boundary, 52058 // and one of its descendants throws while unmounting a passive effect. 52059 fiber.alternate = null; 52060 fiber.child = null; 52061 fiber.dependencies = null; 52062 fiber.firstEffect = null; 52063 fiber.lastEffect = null; 52064 fiber.memoizedProps = null; 52065 fiber.memoizedState = null; 52066 fiber.pendingProps = null; 52067 fiber.return = null; 52068 fiber.updateQueue = null; 52069 52070 { 52071 fiber._debugOwner = null; 52072 } 52073} 52074 52075function getHostParentFiber(fiber) { 52076 var parent = fiber.return; 52077 52078 while (parent !== null) { 52079 if (isHostParent(parent)) { 52080 return parent; 52081 } 52082 52083 parent = parent.return; 52084 } 52085 52086 { 52087 { 52088 throw Error( "Expected to find a host parent. This error is likely caused by a bug in React. Please file an issue." ); 52089 } 52090 } 52091} 52092 52093function isHostParent(fiber) { 52094 return fiber.tag === HostComponent || fiber.tag === HostRoot || fiber.tag === HostPortal; 52095} 52096 52097function getHostSibling(fiber) { 52098 // We're going to search forward into the tree until we find a sibling host 52099 // node. Unfortunately, if multiple insertions are done in a row we have to 52100 // search past them. This leads to exponential search for the next sibling. 52101 // TODO: Find a more efficient way to do this. 52102 var node = fiber; 52103 52104 siblings: while (true) { 52105 // If we didn't find anything, let's try the next sibling. 52106 while (node.sibling === null) { 52107 if (node.return === null || isHostParent(node.return)) { 52108 // If we pop out of the root or hit the parent the fiber we are the 52109 // last sibling. 52110 return null; 52111 } 52112 52113 node = node.return; 52114 } 52115 52116 node.sibling.return = node.return; 52117 node = node.sibling; 52118 52119 while (node.tag !== HostComponent && node.tag !== HostText && node.tag !== DehydratedFragment) { 52120 // If it is not host node and, we might have a host node inside it. 52121 // Try to search down until we find one. 52122 if (node.flags & Placement) { 52123 // If we don't have a child, try the siblings instead. 52124 continue siblings; 52125 } // If we don't have a child, try the siblings instead. 52126 // We also skip portals because they are not part of this host tree. 52127 52128 52129 if (node.child === null || node.tag === HostPortal) { 52130 continue siblings; 52131 } else { 52132 node.child.return = node; 52133 node = node.child; 52134 } 52135 } // Check if this host node is stable or about to be placed. 52136 52137 52138 if (!(node.flags & Placement)) { 52139 // Found it! 52140 return node.stateNode; 52141 } 52142 } 52143} 52144 52145function commitPlacement(finishedWork) { 52146 52147 52148 var parentFiber = getHostParentFiber(finishedWork); // Note: these two variables *must* always be updated together. 52149 52150 var parent; 52151 var isContainer; 52152 var parentStateNode = parentFiber.stateNode; 52153 52154 switch (parentFiber.tag) { 52155 case HostComponent: 52156 parent = parentStateNode; 52157 isContainer = false; 52158 break; 52159 52160 case HostRoot: 52161 parent = parentStateNode.containerInfo; 52162 isContainer = true; 52163 break; 52164 52165 case HostPortal: 52166 parent = parentStateNode.containerInfo; 52167 isContainer = true; 52168 break; 52169 52170 case FundamentalComponent: 52171 52172 // eslint-disable-next-line-no-fallthrough 52173 52174 default: 52175 { 52176 { 52177 throw Error( "Invalid host parent fiber. This error is likely caused by a bug in React. Please file an issue." ); 52178 } 52179 } 52180 52181 } 52182 52183 if (parentFiber.flags & ContentReset) { 52184 // Reset the text content of the parent before doing any insertions 52185 resetTextContent(parent); // Clear ContentReset from the effect tag 52186 52187 parentFiber.flags &= ~ContentReset; 52188 } 52189 52190 var before = getHostSibling(finishedWork); // We only have the top Fiber that was inserted but we need to recurse down its 52191 // children to find all the terminal nodes. 52192 52193 if (isContainer) { 52194 insertOrAppendPlacementNodeIntoContainer(finishedWork, before, parent); 52195 } else { 52196 insertOrAppendPlacementNode(finishedWork, before, parent); 52197 } 52198} 52199 52200function insertOrAppendPlacementNodeIntoContainer(node, before, parent) { 52201 var tag = node.tag; 52202 var isHost = tag === HostComponent || tag === HostText; 52203 52204 if (isHost || enableFundamentalAPI ) { 52205 var stateNode = isHost ? node.stateNode : node.stateNode.instance; 52206 52207 if (before) { 52208 insertInContainerBefore(parent, stateNode, before); 52209 } else { 52210 appendChildToContainer(parent, stateNode); 52211 } 52212 } else if (tag === HostPortal) ; else { 52213 var child = node.child; 52214 52215 if (child !== null) { 52216 insertOrAppendPlacementNodeIntoContainer(child, before, parent); 52217 var sibling = child.sibling; 52218 52219 while (sibling !== null) { 52220 insertOrAppendPlacementNodeIntoContainer(sibling, before, parent); 52221 sibling = sibling.sibling; 52222 } 52223 } 52224 } 52225} 52226 52227function insertOrAppendPlacementNode(node, before, parent) { 52228 var tag = node.tag; 52229 var isHost = tag === HostComponent || tag === HostText; 52230 52231 if (isHost || enableFundamentalAPI ) { 52232 var stateNode = isHost ? node.stateNode : node.stateNode.instance; 52233 52234 if (before) { 52235 insertBefore(parent, stateNode, before); 52236 } else { 52237 appendChild(parent, stateNode); 52238 } 52239 } else if (tag === HostPortal) ; else { 52240 var child = node.child; 52241 52242 if (child !== null) { 52243 insertOrAppendPlacementNode(child, before, parent); 52244 var sibling = child.sibling; 52245 52246 while (sibling !== null) { 52247 insertOrAppendPlacementNode(sibling, before, parent); 52248 sibling = sibling.sibling; 52249 } 52250 } 52251 } 52252} 52253 52254function unmountHostComponents(finishedRoot, current, renderPriorityLevel) { 52255 // We only have the top Fiber that was deleted but we need to recurse down its 52256 // children to find all the terminal nodes. 52257 var node = current; // Each iteration, currentParent is populated with node's host parent if not 52258 // currentParentIsValid. 52259 52260 var currentParentIsValid = false; // Note: these two variables *must* always be updated together. 52261 52262 var currentParent; 52263 var currentParentIsContainer; 52264 52265 while (true) { 52266 if (!currentParentIsValid) { 52267 var parent = node.return; 52268 52269 findParent: while (true) { 52270 if (!(parent !== null)) { 52271 { 52272 throw Error( "Expected to find a host parent. This error is likely caused by a bug in React. Please file an issue." ); 52273 } 52274 } 52275 52276 var parentStateNode = parent.stateNode; 52277 52278 switch (parent.tag) { 52279 case HostComponent: 52280 currentParent = parentStateNode; 52281 currentParentIsContainer = false; 52282 break findParent; 52283 52284 case HostRoot: 52285 currentParent = parentStateNode.containerInfo; 52286 currentParentIsContainer = true; 52287 break findParent; 52288 52289 case HostPortal: 52290 currentParent = parentStateNode.containerInfo; 52291 currentParentIsContainer = true; 52292 break findParent; 52293 52294 } 52295 52296 parent = parent.return; 52297 } 52298 52299 currentParentIsValid = true; 52300 } 52301 52302 if (node.tag === HostComponent || node.tag === HostText) { 52303 commitNestedUnmounts(finishedRoot, node); // After all the children have unmounted, it is now safe to remove the 52304 // node from the tree. 52305 52306 if (currentParentIsContainer) { 52307 removeChildFromContainer(currentParent, node.stateNode); 52308 } else { 52309 removeChild(currentParent, node.stateNode); 52310 } // Don't visit children because we already visited them. 52311 52312 } else if (node.tag === HostPortal) { 52313 if (node.child !== null) { 52314 // When we go into a portal, it becomes the parent to remove from. 52315 // We will reassign it back when we pop the portal on the way up. 52316 currentParent = node.stateNode.containerInfo; 52317 currentParentIsContainer = true; // Visit children because portals might contain host components. 52318 52319 node.child.return = node; 52320 node = node.child; 52321 continue; 52322 } 52323 } else { 52324 commitUnmount(finishedRoot, node); // Visit children because we may find more host components below. 52325 52326 if (node.child !== null) { 52327 node.child.return = node; 52328 node = node.child; 52329 continue; 52330 } 52331 } 52332 52333 if (node === current) { 52334 return; 52335 } 52336 52337 while (node.sibling === null) { 52338 if (node.return === null || node.return === current) { 52339 return; 52340 } 52341 52342 node = node.return; 52343 52344 if (node.tag === HostPortal) { 52345 // When we go out of the portal, we need to restore the parent. 52346 // Since we don't keep a stack of them, we will search for it. 52347 currentParentIsValid = false; 52348 } 52349 } 52350 52351 node.sibling.return = node.return; 52352 node = node.sibling; 52353 } 52354} 52355 52356function commitDeletion(finishedRoot, current, renderPriorityLevel) { 52357 { 52358 // Recursively delete all host nodes from the parent. 52359 // Detach refs and call componentWillUnmount() on the whole subtree. 52360 unmountHostComponents(finishedRoot, current); 52361 } 52362 52363 var alternate = current.alternate; 52364 detachFiberMutation(current); 52365 52366 if (alternate !== null) { 52367 detachFiberMutation(alternate); 52368 } 52369} 52370 52371function commitWork(current, finishedWork) { 52372 52373 switch (finishedWork.tag) { 52374 case FunctionComponent: 52375 case ForwardRef: 52376 case MemoComponent: 52377 case SimpleMemoComponent: 52378 case Block: 52379 { 52380 // Layout effects are destroyed during the mutation phase so that all 52381 // destroy functions for all fibers are called before any create functions. 52382 // This prevents sibling component effects from interfering with each other, 52383 // e.g. a destroy function in one component should never override a ref set 52384 // by a create function in another component during the same commit. 52385 { 52386 commitHookEffectListUnmount(Layout | HasEffect, finishedWork); 52387 } 52388 52389 return; 52390 } 52391 52392 case ClassComponent: 52393 { 52394 return; 52395 } 52396 52397 case HostComponent: 52398 { 52399 var instance = finishedWork.stateNode; 52400 52401 if (instance != null) { 52402 // Commit the work prepared earlier. 52403 var newProps = finishedWork.memoizedProps; // For hydration we reuse the update path but we treat the oldProps 52404 // as the newProps. The updatePayload will contain the real change in 52405 // this case. 52406 52407 var oldProps = current !== null ? current.memoizedProps : newProps; 52408 var type = finishedWork.type; // TODO: Type the updateQueue to be specific to host components. 52409 52410 var updatePayload = finishedWork.updateQueue; 52411 finishedWork.updateQueue = null; 52412 52413 if (updatePayload !== null) { 52414 commitUpdate(instance, updatePayload, type, oldProps, newProps); 52415 } 52416 } 52417 52418 return; 52419 } 52420 52421 case HostText: 52422 { 52423 if (!(finishedWork.stateNode !== null)) { 52424 { 52425 throw Error( "This should have a text node initialized. This error is likely caused by a bug in React. Please file an issue." ); 52426 } 52427 } 52428 52429 var textInstance = finishedWork.stateNode; 52430 var newText = finishedWork.memoizedProps; // For hydration we reuse the update path but we treat the oldProps 52431 // as the newProps. The updatePayload will contain the real change in 52432 // this case. 52433 52434 var oldText = current !== null ? current.memoizedProps : newText; 52435 commitTextUpdate(textInstance, oldText, newText); 52436 return; 52437 } 52438 52439 case HostRoot: 52440 { 52441 { 52442 var _root = finishedWork.stateNode; 52443 52444 if (_root.hydrate) { 52445 // We've just hydrated. No need to hydrate again. 52446 _root.hydrate = false; 52447 commitHydratedContainer(_root.containerInfo); 52448 } 52449 } 52450 52451 return; 52452 } 52453 52454 case Profiler: 52455 { 52456 return; 52457 } 52458 52459 case SuspenseComponent: 52460 { 52461 commitSuspenseComponent(finishedWork); 52462 attachSuspenseRetryListeners(finishedWork); 52463 return; 52464 } 52465 52466 case SuspenseListComponent: 52467 { 52468 attachSuspenseRetryListeners(finishedWork); 52469 return; 52470 } 52471 52472 case IncompleteClassComponent: 52473 { 52474 return; 52475 } 52476 52477 case FundamentalComponent: 52478 { 52479 52480 break; 52481 } 52482 52483 case ScopeComponent: 52484 { 52485 52486 break; 52487 } 52488 52489 case OffscreenComponent: 52490 case LegacyHiddenComponent: 52491 { 52492 var newState = finishedWork.memoizedState; 52493 var isHidden = newState !== null; 52494 hideOrUnhideAllChildren(finishedWork, isHidden); 52495 return; 52496 } 52497 } 52498 52499 { 52500 { 52501 throw Error( "This unit of work tag should not have side-effects. This error is likely caused by a bug in React. Please file an issue." ); 52502 } 52503 } 52504} 52505 52506function commitSuspenseComponent(finishedWork) { 52507 var newState = finishedWork.memoizedState; 52508 52509 if (newState !== null) { 52510 markCommitTimeOfFallback(); 52511 52512 { 52513 // Hide the Offscreen component that contains the primary children. TODO: 52514 // Ideally, this effect would have been scheduled on the Offscreen fiber 52515 // itself. That's how unhiding works: the Offscreen component schedules an 52516 // effect on itself. However, in this case, the component didn't complete, 52517 // so the fiber was never added to the effect list in the normal path. We 52518 // could have appended it to the effect list in the Suspense component's 52519 // second pass, but doing it this way is less complicated. This would be 52520 // simpler if we got rid of the effect list and traversed the tree, like 52521 // we're planning to do. 52522 var primaryChildParent = finishedWork.child; 52523 hideOrUnhideAllChildren(primaryChildParent, true); 52524 } 52525 } 52526} 52527 52528function commitSuspenseHydrationCallbacks(finishedRoot, finishedWork) { 52529 52530 var newState = finishedWork.memoizedState; 52531 52532 if (newState === null) { 52533 var current = finishedWork.alternate; 52534 52535 if (current !== null) { 52536 var prevState = current.memoizedState; 52537 52538 if (prevState !== null) { 52539 var suspenseInstance = prevState.dehydrated; 52540 52541 if (suspenseInstance !== null) { 52542 commitHydratedSuspenseInstance(suspenseInstance); 52543 } 52544 } 52545 } 52546 } 52547} 52548 52549function attachSuspenseRetryListeners(finishedWork) { 52550 // If this boundary just timed out, then it will have a set of wakeables. 52551 // For each wakeable, attach a listener so that when it resolves, React 52552 // attempts to re-render the boundary in the primary (pre-timeout) state. 52553 var wakeables = finishedWork.updateQueue; 52554 52555 if (wakeables !== null) { 52556 finishedWork.updateQueue = null; 52557 var retryCache = finishedWork.stateNode; 52558 52559 if (retryCache === null) { 52560 retryCache = finishedWork.stateNode = new PossiblyWeakSet(); 52561 } 52562 52563 wakeables.forEach(function (wakeable) { 52564 // Memoize using the boundary fiber to prevent redundant listeners. 52565 var retry = resolveRetryWakeable.bind(null, finishedWork, wakeable); 52566 52567 if (!retryCache.has(wakeable)) { 52568 { 52569 if (wakeable.__reactDoNotTraceInteractions !== true) { 52570 retry = tracing.unstable_wrap(retry); 52571 } 52572 } 52573 52574 retryCache.add(wakeable); 52575 wakeable.then(retry, retry); 52576 } 52577 }); 52578 } 52579} // This function detects when a Suspense boundary goes from visible to hidden. 52580// It returns false if the boundary is already hidden. 52581// TODO: Use an effect tag. 52582 52583 52584function isSuspenseBoundaryBeingHidden(current, finishedWork) { 52585 if (current !== null) { 52586 var oldState = current.memoizedState; 52587 52588 if (oldState === null || oldState.dehydrated !== null) { 52589 var newState = finishedWork.memoizedState; 52590 return newState !== null && newState.dehydrated === null; 52591 } 52592 } 52593 52594 return false; 52595} 52596 52597function commitResetTextContent(current) { 52598 52599 resetTextContent(current.stateNode); 52600} 52601 52602var COMPONENT_TYPE = 0; 52603var HAS_PSEUDO_CLASS_TYPE = 1; 52604var ROLE_TYPE = 2; 52605var TEST_NAME_TYPE = 3; 52606var TEXT_TYPE = 4; 52607 52608if (typeof Symbol === 'function' && Symbol.for) { 52609 var symbolFor$1 = Symbol.for; 52610 COMPONENT_TYPE = symbolFor$1('selector.component'); 52611 HAS_PSEUDO_CLASS_TYPE = symbolFor$1('selector.has_pseudo_class'); 52612 ROLE_TYPE = symbolFor$1('selector.role'); 52613 TEST_NAME_TYPE = symbolFor$1('selector.test_id'); 52614 TEXT_TYPE = symbolFor$1('selector.text'); 52615} 52616var commitHooks = []; 52617function onCommitRoot$1() { 52618 { 52619 commitHooks.forEach(function (commitHook) { 52620 return commitHook(); 52621 }); 52622 } 52623} 52624 52625var ceil = Math.ceil; 52626var ReactCurrentDispatcher$2 = ReactSharedInternals.ReactCurrentDispatcher, 52627 ReactCurrentOwner$2 = ReactSharedInternals.ReactCurrentOwner, 52628 IsSomeRendererActing = ReactSharedInternals.IsSomeRendererActing; 52629var NoContext = 52630/* */ 526310; 52632var BatchedContext = 52633/* */ 526341; 52635var EventContext = 52636/* */ 526372; 52638var DiscreteEventContext = 52639/* */ 526404; 52641var LegacyUnbatchedContext = 52642/* */ 526438; 52644var RenderContext = 52645/* */ 5264616; 52647var CommitContext = 52648/* */ 5264932; 52650var RetryAfterError = 52651/* */ 5265264; 52653var RootIncomplete = 0; 52654var RootFatalErrored = 1; 52655var RootErrored = 2; 52656var RootSuspended = 3; 52657var RootSuspendedWithDelay = 4; 52658var RootCompleted = 5; // Describes where we are in the React execution stack 52659 52660var executionContext = NoContext; // The root we're working on 52661 52662var workInProgressRoot = null; // The fiber we're working on 52663 52664var workInProgress = null; // The lanes we're rendering 52665 52666var workInProgressRootRenderLanes = NoLanes; // Stack that allows components to change the render lanes for its subtree 52667// This is a superset of the lanes we started working on at the root. The only 52668// case where it's different from `workInProgressRootRenderLanes` is when we 52669// enter a subtree that is hidden and needs to be unhidden: Suspense and 52670// Offscreen component. 52671// 52672// Most things in the work loop should deal with workInProgressRootRenderLanes. 52673// Most things in begin/complete phases should deal with subtreeRenderLanes. 52674 52675var subtreeRenderLanes = NoLanes; 52676var subtreeRenderLanesCursor = createCursor(NoLanes); // Whether to root completed, errored, suspended, etc. 52677 52678var workInProgressRootExitStatus = RootIncomplete; // A fatal error, if one is thrown 52679 52680var workInProgressRootFatalError = null; // "Included" lanes refer to lanes that were worked on during this render. It's 52681// slightly different than `renderLanes` because `renderLanes` can change as you 52682// enter and exit an Offscreen tree. This value is the combination of all render 52683// lanes for the entire render phase. 52684 52685var workInProgressRootIncludedLanes = NoLanes; // The work left over by components that were visited during this render. Only 52686// includes unprocessed updates, not work in bailed out children. 52687 52688var workInProgressRootSkippedLanes = NoLanes; // Lanes that were updated (in an interleaved event) during this render. 52689 52690var workInProgressRootUpdatedLanes = NoLanes; // Lanes that were pinged (in an interleaved event) during this render. 52691 52692var workInProgressRootPingedLanes = NoLanes; 52693var mostRecentlyUpdatedRoot = null; // The most recent time we committed a fallback. This lets us ensure a train 52694// model where we don't commit new loading states in too quick succession. 52695 52696var globalMostRecentFallbackTime = 0; 52697var FALLBACK_THROTTLE_MS = 500; // The absolute time for when we should start giving up on rendering 52698// more and prefer CPU suspense heuristics instead. 52699 52700var workInProgressRootRenderTargetTime = Infinity; // How long a render is supposed to take before we start following CPU 52701// suspense heuristics and opt out of rendering more content. 52702 52703var RENDER_TIMEOUT_MS = 500; 52704 52705function resetRenderTimer() { 52706 workInProgressRootRenderTargetTime = now() + RENDER_TIMEOUT_MS; 52707} 52708 52709function getRenderTargetTime() { 52710 return workInProgressRootRenderTargetTime; 52711} 52712var nextEffect = null; 52713var hasUncaughtError = false; 52714var firstUncaughtError = null; 52715var legacyErrorBoundariesThatAlreadyFailed = null; 52716var rootDoesHavePassiveEffects = false; 52717var rootWithPendingPassiveEffects = null; 52718var pendingPassiveEffectsRenderPriority = NoPriority$1; 52719var pendingPassiveEffectsLanes = NoLanes; 52720var pendingPassiveHookEffectsMount = []; 52721var pendingPassiveHookEffectsUnmount = []; 52722var rootsWithPendingDiscreteUpdates = null; // Use these to prevent an infinite loop of nested updates 52723 52724var NESTED_UPDATE_LIMIT = 50; 52725var nestedUpdateCount = 0; 52726var rootWithNestedUpdates = null; 52727var NESTED_PASSIVE_UPDATE_LIMIT = 50; 52728var nestedPassiveUpdateCount = 0; // Marks the need to reschedule pending interactions at these lanes 52729// during the commit phase. This enables them to be traced across components 52730// that spawn new work during render. E.g. hidden boundaries, suspended SSR 52731// hydration or SuspenseList. 52732// TODO: Can use a bitmask instead of an array 52733 52734var spawnedWorkDuringRender = null; // If two updates are scheduled within the same event, we should treat their 52735// event times as simultaneous, even if the actual clock time has advanced 52736// between the first and second call. 52737 52738var currentEventTime = NoTimestamp; 52739var currentEventWipLanes = NoLanes; 52740var currentEventPendingLanes = NoLanes; // Dev only flag that tracks if passive effects are currently being flushed. 52741// We warn about state updates for unmounted components differently in this case. 52742 52743var isFlushingPassiveEffects = false; 52744var focusedInstanceHandle = null; 52745var shouldFireAfterActiveInstanceBlur = false; 52746function getWorkInProgressRoot() { 52747 return workInProgressRoot; 52748} 52749function requestEventTime() { 52750 if ((executionContext & (RenderContext | CommitContext)) !== NoContext) { 52751 // We're inside React, so it's fine to read the actual time. 52752 return now(); 52753 } // We're not inside React, so we may be in the middle of a browser event. 52754 52755 52756 if (currentEventTime !== NoTimestamp) { 52757 // Use the same start time for all updates until we enter React again. 52758 return currentEventTime; 52759 } // This is the first update since React yielded. Compute a new start time. 52760 52761 52762 currentEventTime = now(); 52763 return currentEventTime; 52764} 52765function requestUpdateLane(fiber) { 52766 // Special cases 52767 var mode = fiber.mode; 52768 52769 if ((mode & BlockingMode) === NoMode) { 52770 return SyncLane; 52771 } else if ((mode & ConcurrentMode) === NoMode) { 52772 return getCurrentPriorityLevel() === ImmediatePriority$1 ? SyncLane : SyncBatchedLane; 52773 } // The algorithm for assigning an update to a lane should be stable for all 52774 // updates at the same priority within the same event. To do this, the inputs 52775 // to the algorithm must be the same. For example, we use the `renderLanes` 52776 // to avoid choosing a lane that is already in the middle of rendering. 52777 // 52778 // However, the "included" lanes could be mutated in between updates in the 52779 // same event, like if you perform an update inside `flushSync`. Or any other 52780 // code path that might call `prepareFreshStack`. 52781 // 52782 // The trick we use is to cache the first of each of these inputs within an 52783 // event. Then reset the cached values once we can be sure the event is over. 52784 // Our heuristic for that is whenever we enter a concurrent work loop. 52785 // 52786 // We'll do the same for `currentEventPendingLanes` below. 52787 52788 52789 if (currentEventWipLanes === NoLanes) { 52790 currentEventWipLanes = workInProgressRootIncludedLanes; 52791 } 52792 52793 var isTransition = requestCurrentTransition() !== NoTransition; 52794 52795 if (isTransition) { 52796 if (currentEventPendingLanes !== NoLanes) { 52797 currentEventPendingLanes = mostRecentlyUpdatedRoot !== null ? mostRecentlyUpdatedRoot.pendingLanes : NoLanes; 52798 } 52799 52800 return findTransitionLane(currentEventWipLanes, currentEventPendingLanes); 52801 } // TODO: Remove this dependency on the Scheduler priority. 52802 // To do that, we're replacing it with an update lane priority. 52803 52804 52805 var schedulerPriority = getCurrentPriorityLevel(); // The old behavior was using the priority level of the Scheduler. 52806 // This couples React to the Scheduler internals, so we're replacing it 52807 // with the currentUpdateLanePriority above. As an example of how this 52808 // could be problematic, if we're not inside `Scheduler.runWithPriority`, 52809 // then we'll get the priority of the current running Scheduler task, 52810 // which is probably not what we want. 52811 52812 var lane; 52813 52814 if ( // TODO: Temporary. We're removing the concept of discrete updates. 52815 (executionContext & DiscreteEventContext) !== NoContext && schedulerPriority === UserBlockingPriority$2) { 52816 lane = findUpdateLane(InputDiscreteLanePriority, currentEventWipLanes); 52817 } else { 52818 var schedulerLanePriority = schedulerPriorityToLanePriority(schedulerPriority); 52819 52820 lane = findUpdateLane(schedulerLanePriority, currentEventWipLanes); 52821 } 52822 52823 return lane; 52824} 52825 52826function requestRetryLane(fiber) { 52827 // This is a fork of `requestUpdateLane` designed specifically for Suspense 52828 // "retries" â a special update that attempts to flip a Suspense boundary 52829 // from its placeholder state to its primary/resolved state. 52830 // Special cases 52831 var mode = fiber.mode; 52832 52833 if ((mode & BlockingMode) === NoMode) { 52834 return SyncLane; 52835 } else if ((mode & ConcurrentMode) === NoMode) { 52836 return getCurrentPriorityLevel() === ImmediatePriority$1 ? SyncLane : SyncBatchedLane; 52837 } // See `requestUpdateLane` for explanation of `currentEventWipLanes` 52838 52839 52840 if (currentEventWipLanes === NoLanes) { 52841 currentEventWipLanes = workInProgressRootIncludedLanes; 52842 } 52843 52844 return findRetryLane(currentEventWipLanes); 52845} 52846 52847function scheduleUpdateOnFiber(fiber, lane, eventTime) { 52848 checkForNestedUpdates(); 52849 warnAboutRenderPhaseUpdatesInDEV(fiber); 52850 var root = markUpdateLaneFromFiberToRoot(fiber, lane); 52851 52852 if (root === null) { 52853 warnAboutUpdateOnUnmountedFiberInDEV(fiber); 52854 return null; 52855 } // Mark that the root has a pending update. 52856 52857 52858 markRootUpdated(root, lane, eventTime); 52859 52860 if (root === workInProgressRoot) { 52861 // Received an update to a tree that's in the middle of rendering. Mark 52862 // that there was an interleaved update work on this root. Unless the 52863 // `deferRenderPhaseUpdateToNextBatch` flag is off and this is a render 52864 // phase update. In that case, we don't treat render phase updates as if 52865 // they were interleaved, for backwards compat reasons. 52866 { 52867 workInProgressRootUpdatedLanes = mergeLanes(workInProgressRootUpdatedLanes, lane); 52868 } 52869 52870 if (workInProgressRootExitStatus === RootSuspendedWithDelay) { 52871 // The root already suspended with a delay, which means this render 52872 // definitely won't finish. Since we have a new update, let's mark it as 52873 // suspended now, right before marking the incoming update. This has the 52874 // effect of interrupting the current render and switching to the update. 52875 // TODO: Make sure this doesn't override pings that happen while we've 52876 // already started rendering. 52877 markRootSuspended$1(root, workInProgressRootRenderLanes); 52878 } 52879 } // TODO: requestUpdateLanePriority also reads the priority. Pass the 52880 // priority as an argument to that function and this one. 52881 52882 52883 var priorityLevel = getCurrentPriorityLevel(); 52884 52885 if (lane === SyncLane) { 52886 if ( // Check if we're inside unbatchedUpdates 52887 (executionContext & LegacyUnbatchedContext) !== NoContext && // Check if we're not already rendering 52888 (executionContext & (RenderContext | CommitContext)) === NoContext) { 52889 // Register pending interactions on the root to avoid losing traced interaction data. 52890 schedulePendingInteractions(root, lane); // This is a legacy edge case. The initial mount of a ReactDOM.render-ed 52891 // root inside of batchedUpdates should be synchronous, but layout updates 52892 // should be deferred until the end of the batch. 52893 52894 performSyncWorkOnRoot(root); 52895 } else { 52896 ensureRootIsScheduled(root, eventTime); 52897 schedulePendingInteractions(root, lane); 52898 52899 if (executionContext === NoContext) { 52900 // Flush the synchronous work now, unless we're already working or inside 52901 // a batch. This is intentionally inside scheduleUpdateOnFiber instead of 52902 // scheduleCallbackForFiber to preserve the ability to schedule a callback 52903 // without immediately flushing it. We only do this for user-initiated 52904 // updates, to preserve historical behavior of legacy mode. 52905 resetRenderTimer(); 52906 flushSyncCallbackQueue(); 52907 } 52908 } 52909 } else { 52910 // Schedule a discrete update but only if it's not Sync. 52911 if ((executionContext & DiscreteEventContext) !== NoContext && ( // Only updates at user-blocking priority or greater are considered 52912 // discrete, even inside a discrete event. 52913 priorityLevel === UserBlockingPriority$2 || priorityLevel === ImmediatePriority$1)) { 52914 // This is the result of a discrete event. Track the lowest priority 52915 // discrete update per root so we can flush them early, if needed. 52916 if (rootsWithPendingDiscreteUpdates === null) { 52917 rootsWithPendingDiscreteUpdates = new Set([root]); 52918 } else { 52919 rootsWithPendingDiscreteUpdates.add(root); 52920 } 52921 } // Schedule other updates after in case the callback is sync. 52922 52923 52924 ensureRootIsScheduled(root, eventTime); 52925 schedulePendingInteractions(root, lane); 52926 } // We use this when assigning a lane for a transition inside 52927 // `requestUpdateLane`. We assume it's the same as the root being updated, 52928 // since in the common case of a single root app it probably is. If it's not 52929 // the same root, then it's not a huge deal, we just might batch more stuff 52930 // together more than necessary. 52931 52932 52933 mostRecentlyUpdatedRoot = root; 52934} // This is split into a separate function so we can mark a fiber with pending 52935// work without treating it as a typical update that originates from an event; 52936// e.g. retrying a Suspense boundary isn't an update, but it does schedule work 52937// on a fiber. 52938 52939function markUpdateLaneFromFiberToRoot(sourceFiber, lane) { 52940 // Update the source fiber's lanes 52941 sourceFiber.lanes = mergeLanes(sourceFiber.lanes, lane); 52942 var alternate = sourceFiber.alternate; 52943 52944 if (alternate !== null) { 52945 alternate.lanes = mergeLanes(alternate.lanes, lane); 52946 } 52947 52948 { 52949 if (alternate === null && (sourceFiber.flags & (Placement | Hydrating)) !== NoFlags) { 52950 warnAboutUpdateOnNotYetMountedFiberInDEV(sourceFiber); 52951 } 52952 } // Walk the parent path to the root and update the child expiration time. 52953 52954 52955 var node = sourceFiber; 52956 var parent = sourceFiber.return; 52957 52958 while (parent !== null) { 52959 parent.childLanes = mergeLanes(parent.childLanes, lane); 52960 alternate = parent.alternate; 52961 52962 if (alternate !== null) { 52963 alternate.childLanes = mergeLanes(alternate.childLanes, lane); 52964 } else { 52965 { 52966 if ((parent.flags & (Placement | Hydrating)) !== NoFlags) { 52967 warnAboutUpdateOnNotYetMountedFiberInDEV(sourceFiber); 52968 } 52969 } 52970 } 52971 52972 node = parent; 52973 parent = parent.return; 52974 } 52975 52976 if (node.tag === HostRoot) { 52977 var root = node.stateNode; 52978 return root; 52979 } else { 52980 return null; 52981 } 52982} // Use this function to schedule a task for a root. There's only one task per 52983// root; if a task was already scheduled, we'll check to make sure the priority 52984// of the existing task is the same as the priority of the next level that the 52985// root has work on. This function is called on every update, and right before 52986// exiting a task. 52987 52988 52989function ensureRootIsScheduled(root, currentTime) { 52990 var existingCallbackNode = root.callbackNode; // Check if any lanes are being starved by other work. If so, mark them as 52991 // expired so we know to work on those next. 52992 52993 markStarvedLanesAsExpired(root, currentTime); // Determine the next lanes to work on, and their priority. 52994 52995 var nextLanes = getNextLanes(root, root === workInProgressRoot ? workInProgressRootRenderLanes : NoLanes); // This returns the priority level computed during the `getNextLanes` call. 52996 52997 var newCallbackPriority = returnNextLanesPriority(); 52998 52999 if (nextLanes === NoLanes) { 53000 // Special case: There's nothing to work on. 53001 if (existingCallbackNode !== null) { 53002 cancelCallback(existingCallbackNode); 53003 root.callbackNode = null; 53004 root.callbackPriority = NoLanePriority; 53005 } 53006 53007 return; 53008 } // Check if there's an existing task. We may be able to reuse it. 53009 53010 53011 if (existingCallbackNode !== null) { 53012 var existingCallbackPriority = root.callbackPriority; 53013 53014 if (existingCallbackPriority === newCallbackPriority) { 53015 // The priority hasn't changed. We can reuse the existing task. Exit. 53016 return; 53017 } // The priority changed. Cancel the existing callback. We'll schedule a new 53018 // one below. 53019 53020 53021 cancelCallback(existingCallbackNode); 53022 } // Schedule a new callback. 53023 53024 53025 var newCallbackNode; 53026 53027 if (newCallbackPriority === SyncLanePriority) { 53028 // Special case: Sync React callbacks are scheduled on a special 53029 // internal queue 53030 newCallbackNode = scheduleSyncCallback(performSyncWorkOnRoot.bind(null, root)); 53031 } else if (newCallbackPriority === SyncBatchedLanePriority) { 53032 newCallbackNode = scheduleCallback(ImmediatePriority$1, performSyncWorkOnRoot.bind(null, root)); 53033 } else { 53034 var schedulerPriorityLevel = lanePriorityToSchedulerPriority(newCallbackPriority); 53035 newCallbackNode = scheduleCallback(schedulerPriorityLevel, performConcurrentWorkOnRoot.bind(null, root)); 53036 } 53037 53038 root.callbackPriority = newCallbackPriority; 53039 root.callbackNode = newCallbackNode; 53040} // This is the entry point for every concurrent task, i.e. anything that 53041// goes through Scheduler. 53042 53043 53044function performConcurrentWorkOnRoot(root) { 53045 // Since we know we're in a React event, we can clear the current 53046 // event time. The next update will compute a new event time. 53047 currentEventTime = NoTimestamp; 53048 currentEventWipLanes = NoLanes; 53049 currentEventPendingLanes = NoLanes; 53050 53051 if (!((executionContext & (RenderContext | CommitContext)) === NoContext)) { 53052 { 53053 throw Error( "Should not already be working." ); 53054 } 53055 } // Flush any pending passive effects before deciding which lanes to work on, 53056 // in case they schedule additional work. 53057 53058 53059 var originalCallbackNode = root.callbackNode; 53060 var didFlushPassiveEffects = flushPassiveEffects(); 53061 53062 if (didFlushPassiveEffects) { 53063 // Something in the passive effect phase may have canceled the current task. 53064 // Check if the task node for this root was changed. 53065 if (root.callbackNode !== originalCallbackNode) { 53066 // The current task was canceled. Exit. We don't need to call 53067 // `ensureRootIsScheduled` because the check above implies either that 53068 // there's a new task, or that there's no remaining work on this root. 53069 return null; 53070 } 53071 } // Determine the next expiration time to work on, using the fields stored 53072 // on the root. 53073 53074 53075 var lanes = getNextLanes(root, root === workInProgressRoot ? workInProgressRootRenderLanes : NoLanes); 53076 53077 if (lanes === NoLanes) { 53078 // Defensive coding. This is never expected to happen. 53079 return null; 53080 } 53081 53082 var exitStatus = renderRootConcurrent(root, lanes); 53083 53084 if (includesSomeLane(workInProgressRootIncludedLanes, workInProgressRootUpdatedLanes)) { 53085 // The render included lanes that were updated during the render phase. 53086 // For example, when unhiding a hidden tree, we include all the lanes 53087 // that were previously skipped when the tree was hidden. That set of 53088 // lanes is a superset of the lanes we started rendering with. 53089 // 53090 // So we'll throw out the current work and restart. 53091 prepareFreshStack(root, NoLanes); 53092 } else if (exitStatus !== RootIncomplete) { 53093 if (exitStatus === RootErrored) { 53094 executionContext |= RetryAfterError; // If an error occurred during hydration, 53095 // discard server response and fall back to client side render. 53096 53097 if (root.hydrate) { 53098 root.hydrate = false; 53099 clearContainer(root.containerInfo); 53100 } // If something threw an error, try rendering one more time. We'll render 53101 // synchronously to block concurrent data mutations, and we'll includes 53102 // all pending updates are included. If it still fails after the second 53103 // attempt, we'll give up and commit the resulting tree. 53104 53105 53106 lanes = getLanesToRetrySynchronouslyOnError(root); 53107 53108 if (lanes !== NoLanes) { 53109 exitStatus = renderRootSync(root, lanes); 53110 } 53111 } 53112 53113 if (exitStatus === RootFatalErrored) { 53114 var fatalError = workInProgressRootFatalError; 53115 prepareFreshStack(root, NoLanes); 53116 markRootSuspended$1(root, lanes); 53117 ensureRootIsScheduled(root, now()); 53118 throw fatalError; 53119 } // We now have a consistent tree. The next step is either to commit it, 53120 // or, if something suspended, wait to commit it after a timeout. 53121 53122 53123 var finishedWork = root.current.alternate; 53124 root.finishedWork = finishedWork; 53125 root.finishedLanes = lanes; 53126 finishConcurrentRender(root, exitStatus, lanes); 53127 } 53128 53129 ensureRootIsScheduled(root, now()); 53130 53131 if (root.callbackNode === originalCallbackNode) { 53132 // The task node scheduled for this root is the same one that's 53133 // currently executed. Need to return a continuation. 53134 return performConcurrentWorkOnRoot.bind(null, root); 53135 } 53136 53137 return null; 53138} 53139 53140function finishConcurrentRender(root, exitStatus, lanes) { 53141 switch (exitStatus) { 53142 case RootIncomplete: 53143 case RootFatalErrored: 53144 { 53145 { 53146 { 53147 throw Error( "Root did not complete. This is a bug in React." ); 53148 } 53149 } 53150 } 53151 // Flow knows about invariant, so it complains if I add a break 53152 // statement, but eslint doesn't know about invariant, so it complains 53153 // if I do. eslint-disable-next-line no-fallthrough 53154 53155 case RootErrored: 53156 { 53157 // We should have already attempted to retry this tree. If we reached 53158 // this point, it errored again. Commit it. 53159 commitRoot(root); 53160 break; 53161 } 53162 53163 case RootSuspended: 53164 { 53165 markRootSuspended$1(root, lanes); // We have an acceptable loading state. We need to figure out if we 53166 // should immediately commit it or wait a bit. 53167 53168 if (includesOnlyRetries(lanes) && // do not delay if we're inside an act() scope 53169 !shouldForceFlushFallbacksInDEV()) { 53170 // This render only included retries, no updates. Throttle committing 53171 // retries so that we don't show too many loading states too quickly. 53172 var msUntilTimeout = globalMostRecentFallbackTime + FALLBACK_THROTTLE_MS - now(); // Don't bother with a very short suspense time. 53173 53174 if (msUntilTimeout > 10) { 53175 var nextLanes = getNextLanes(root, NoLanes); 53176 53177 if (nextLanes !== NoLanes) { 53178 // There's additional work on this root. 53179 break; 53180 } 53181 53182 var suspendedLanes = root.suspendedLanes; 53183 53184 if (!isSubsetOfLanes(suspendedLanes, lanes)) { 53185 // We should prefer to render the fallback of at the last 53186 // suspended level. Ping the last suspended level to try 53187 // rendering it again. 53188 // FIXME: What if the suspended lanes are Idle? Should not restart. 53189 var eventTime = requestEventTime(); 53190 markRootPinged(root, suspendedLanes); 53191 break; 53192 } // The render is suspended, it hasn't timed out, and there's no 53193 // lower priority work to do. Instead of committing the fallback 53194 // immediately, wait for more data to arrive. 53195 53196 53197 root.timeoutHandle = scheduleTimeout(commitRoot.bind(null, root), msUntilTimeout); 53198 break; 53199 } 53200 } // The work expired. Commit immediately. 53201 53202 53203 commitRoot(root); 53204 break; 53205 } 53206 53207 case RootSuspendedWithDelay: 53208 { 53209 markRootSuspended$1(root, lanes); 53210 53211 if (includesOnlyTransitions(lanes)) { 53212 // This is a transition, so we should exit without committing a 53213 // placeholder and without scheduling a timeout. Delay indefinitely 53214 // until we receive more data. 53215 break; 53216 } 53217 53218 if (!shouldForceFlushFallbacksInDEV()) { 53219 // This is not a transition, but we did trigger an avoided state. 53220 // Schedule a placeholder to display after a short delay, using the Just 53221 // Noticeable Difference. 53222 // TODO: Is the JND optimization worth the added complexity? If this is 53223 // the only reason we track the event time, then probably not. 53224 // Consider removing. 53225 var mostRecentEventTime = getMostRecentEventTime(root, lanes); 53226 var eventTimeMs = mostRecentEventTime; 53227 var timeElapsedMs = now() - eventTimeMs; 53228 53229 var _msUntilTimeout = jnd(timeElapsedMs) - timeElapsedMs; // Don't bother with a very short suspense time. 53230 53231 53232 if (_msUntilTimeout > 10) { 53233 // Instead of committing the fallback immediately, wait for more data 53234 // to arrive. 53235 root.timeoutHandle = scheduleTimeout(commitRoot.bind(null, root), _msUntilTimeout); 53236 break; 53237 } 53238 } // Commit the placeholder. 53239 53240 53241 commitRoot(root); 53242 break; 53243 } 53244 53245 case RootCompleted: 53246 { 53247 // The work completed. Ready to commit. 53248 commitRoot(root); 53249 break; 53250 } 53251 53252 default: 53253 { 53254 { 53255 { 53256 throw Error( "Unknown root exit status." ); 53257 } 53258 } 53259 } 53260 } 53261} 53262 53263function markRootSuspended$1(root, suspendedLanes) { 53264 // When suspending, we should always exclude lanes that were pinged or (more 53265 // rarely, since we try to avoid it) updated during the render phase. 53266 // TODO: Lol maybe there's a better way to factor this besides this 53267 // obnoxiously named function :) 53268 suspendedLanes = removeLanes(suspendedLanes, workInProgressRootPingedLanes); 53269 suspendedLanes = removeLanes(suspendedLanes, workInProgressRootUpdatedLanes); 53270 markRootSuspended(root, suspendedLanes); 53271} // This is the entry point for synchronous tasks that don't go 53272// through Scheduler 53273 53274 53275function performSyncWorkOnRoot(root) { 53276 if (!((executionContext & (RenderContext | CommitContext)) === NoContext)) { 53277 { 53278 throw Error( "Should not already be working." ); 53279 } 53280 } 53281 53282 flushPassiveEffects(); 53283 var lanes; 53284 var exitStatus; 53285 53286 if (root === workInProgressRoot && includesSomeLane(root.expiredLanes, workInProgressRootRenderLanes)) { 53287 // There's a partial tree, and at least one of its lanes has expired. Finish 53288 // rendering it before rendering the rest of the expired work. 53289 lanes = workInProgressRootRenderLanes; 53290 exitStatus = renderRootSync(root, lanes); 53291 53292 if (includesSomeLane(workInProgressRootIncludedLanes, workInProgressRootUpdatedLanes)) { 53293 // The render included lanes that were updated during the render phase. 53294 // For example, when unhiding a hidden tree, we include all the lanes 53295 // that were previously skipped when the tree was hidden. That set of 53296 // lanes is a superset of the lanes we started rendering with. 53297 // 53298 // Note that this only happens when part of the tree is rendered 53299 // concurrently. If the whole tree is rendered synchronously, then there 53300 // are no interleaved events. 53301 lanes = getNextLanes(root, lanes); 53302 exitStatus = renderRootSync(root, lanes); 53303 } 53304 } else { 53305 lanes = getNextLanes(root, NoLanes); 53306 exitStatus = renderRootSync(root, lanes); 53307 } 53308 53309 if (root.tag !== LegacyRoot && exitStatus === RootErrored) { 53310 executionContext |= RetryAfterError; // If an error occurred during hydration, 53311 // discard server response and fall back to client side render. 53312 53313 if (root.hydrate) { 53314 root.hydrate = false; 53315 clearContainer(root.containerInfo); 53316 } // If something threw an error, try rendering one more time. We'll render 53317 // synchronously to block concurrent data mutations, and we'll includes 53318 // all pending updates are included. If it still fails after the second 53319 // attempt, we'll give up and commit the resulting tree. 53320 53321 53322 lanes = getLanesToRetrySynchronouslyOnError(root); 53323 53324 if (lanes !== NoLanes) { 53325 exitStatus = renderRootSync(root, lanes); 53326 } 53327 } 53328 53329 if (exitStatus === RootFatalErrored) { 53330 var fatalError = workInProgressRootFatalError; 53331 prepareFreshStack(root, NoLanes); 53332 markRootSuspended$1(root, lanes); 53333 ensureRootIsScheduled(root, now()); 53334 throw fatalError; 53335 } // We now have a consistent tree. Because this is a sync render, we 53336 // will commit it even if something suspended. 53337 53338 53339 var finishedWork = root.current.alternate; 53340 root.finishedWork = finishedWork; 53341 root.finishedLanes = lanes; 53342 commitRoot(root); // Before exiting, make sure there's a callback scheduled for the next 53343 // pending level. 53344 53345 ensureRootIsScheduled(root, now()); 53346 return null; 53347} 53348function flushDiscreteUpdates() { 53349 // TODO: Should be able to flush inside batchedUpdates, but not inside `act`. 53350 // However, `act` uses `batchedUpdates`, so there's no way to distinguish 53351 // those two cases. Need to fix this before exposing flushDiscreteUpdates 53352 // as a public API. 53353 if ((executionContext & (BatchedContext | RenderContext | CommitContext)) !== NoContext) { 53354 { 53355 if ((executionContext & RenderContext) !== NoContext) { 53356 error('unstable_flushDiscreteUpdates: Cannot flush updates when React is ' + 'already rendering.'); 53357 } 53358 } // We're already rendering, so we can't synchronously flush pending work. 53359 // This is probably a nested event dispatch triggered by a lifecycle/effect, 53360 // like `el.focus()`. Exit. 53361 53362 53363 return; 53364 } 53365 53366 flushPendingDiscreteUpdates(); // If the discrete updates scheduled passive effects, flush them now so that 53367 // they fire before the next serial event. 53368 53369 flushPassiveEffects(); 53370} 53371 53372function flushPendingDiscreteUpdates() { 53373 if (rootsWithPendingDiscreteUpdates !== null) { 53374 // For each root with pending discrete updates, schedule a callback to 53375 // immediately flush them. 53376 var roots = rootsWithPendingDiscreteUpdates; 53377 rootsWithPendingDiscreteUpdates = null; 53378 roots.forEach(function (root) { 53379 markDiscreteUpdatesExpired(root); 53380 ensureRootIsScheduled(root, now()); 53381 }); 53382 } // Now flush the immediate queue. 53383 53384 53385 flushSyncCallbackQueue(); 53386} 53387 53388function batchedUpdates$1(fn, a) { 53389 var prevExecutionContext = executionContext; 53390 executionContext |= BatchedContext; 53391 53392 try { 53393 return fn(a); 53394 } finally { 53395 executionContext = prevExecutionContext; 53396 53397 if (executionContext === NoContext) { 53398 // Flush the immediate callbacks that were scheduled during this batch 53399 resetRenderTimer(); 53400 flushSyncCallbackQueue(); 53401 } 53402 } 53403} 53404function batchedEventUpdates$1(fn, a) { 53405 var prevExecutionContext = executionContext; 53406 executionContext |= EventContext; 53407 53408 try { 53409 return fn(a); 53410 } finally { 53411 executionContext = prevExecutionContext; 53412 53413 if (executionContext === NoContext) { 53414 // Flush the immediate callbacks that were scheduled during this batch 53415 resetRenderTimer(); 53416 flushSyncCallbackQueue(); 53417 } 53418 } 53419} 53420function discreteUpdates$1(fn, a, b, c, d) { 53421 var prevExecutionContext = executionContext; 53422 executionContext |= DiscreteEventContext; 53423 53424 { 53425 try { 53426 return runWithPriority$1(UserBlockingPriority$2, fn.bind(null, a, b, c, d)); 53427 } finally { 53428 executionContext = prevExecutionContext; 53429 53430 if (executionContext === NoContext) { 53431 // Flush the immediate callbacks that were scheduled during this batch 53432 resetRenderTimer(); 53433 flushSyncCallbackQueue(); 53434 } 53435 } 53436 } 53437} 53438function unbatchedUpdates(fn, a) { 53439 var prevExecutionContext = executionContext; 53440 executionContext &= ~BatchedContext; 53441 executionContext |= LegacyUnbatchedContext; 53442 53443 try { 53444 return fn(a); 53445 } finally { 53446 executionContext = prevExecutionContext; 53447 53448 if (executionContext === NoContext) { 53449 // Flush the immediate callbacks that were scheduled during this batch 53450 resetRenderTimer(); 53451 flushSyncCallbackQueue(); 53452 } 53453 } 53454} 53455function flushSync(fn, a) { 53456 var prevExecutionContext = executionContext; 53457 53458 if ((prevExecutionContext & (RenderContext | CommitContext)) !== NoContext) { 53459 { 53460 error('flushSync was called from inside a lifecycle method. React cannot ' + 'flush when React is already rendering. Consider moving this call to ' + 'a scheduler task or micro task.'); 53461 } 53462 53463 return fn(a); 53464 } 53465 53466 executionContext |= BatchedContext; 53467 53468 { 53469 try { 53470 if (fn) { 53471 return runWithPriority$1(ImmediatePriority$1, fn.bind(null, a)); 53472 } else { 53473 return undefined; 53474 } 53475 } finally { 53476 executionContext = prevExecutionContext; // Flush the immediate callbacks that were scheduled during this batch. 53477 // Note that this will happen even if batchedUpdates is higher up 53478 // the stack. 53479 53480 flushSyncCallbackQueue(); 53481 } 53482 } 53483} 53484function pushRenderLanes(fiber, lanes) { 53485 push(subtreeRenderLanesCursor, subtreeRenderLanes, fiber); 53486 subtreeRenderLanes = mergeLanes(subtreeRenderLanes, lanes); 53487 workInProgressRootIncludedLanes = mergeLanes(workInProgressRootIncludedLanes, lanes); 53488} 53489function popRenderLanes(fiber) { 53490 subtreeRenderLanes = subtreeRenderLanesCursor.current; 53491 pop(subtreeRenderLanesCursor, fiber); 53492} 53493 53494function prepareFreshStack(root, lanes) { 53495 root.finishedWork = null; 53496 root.finishedLanes = NoLanes; 53497 var timeoutHandle = root.timeoutHandle; 53498 53499 if (timeoutHandle !== noTimeout) { 53500 // The root previous suspended and scheduled a timeout to commit a fallback 53501 // state. Now that we have additional work, cancel the timeout. 53502 root.timeoutHandle = noTimeout; // $FlowFixMe Complains noTimeout is not a TimeoutID, despite the check above 53503 53504 cancelTimeout(timeoutHandle); 53505 } 53506 53507 if (workInProgress !== null) { 53508 var interruptedWork = workInProgress.return; 53509 53510 while (interruptedWork !== null) { 53511 unwindInterruptedWork(interruptedWork); 53512 interruptedWork = interruptedWork.return; 53513 } 53514 } 53515 53516 workInProgressRoot = root; 53517 workInProgress = createWorkInProgress(root.current, null); 53518 workInProgressRootRenderLanes = subtreeRenderLanes = workInProgressRootIncludedLanes = lanes; 53519 workInProgressRootExitStatus = RootIncomplete; 53520 workInProgressRootFatalError = null; 53521 workInProgressRootSkippedLanes = NoLanes; 53522 workInProgressRootUpdatedLanes = NoLanes; 53523 workInProgressRootPingedLanes = NoLanes; 53524 53525 { 53526 spawnedWorkDuringRender = null; 53527 } 53528 53529 { 53530 ReactStrictModeWarnings.discardPendingWarnings(); 53531 } 53532} 53533 53534function handleError(root, thrownValue) { 53535 do { 53536 var erroredWork = workInProgress; 53537 53538 try { 53539 // Reset module-level state that was set during the render phase. 53540 resetContextDependencies(); 53541 resetHooksAfterThrow(); 53542 resetCurrentFiber(); // TODO: I found and added this missing line while investigating a 53543 // separate issue. Write a regression test using string refs. 53544 53545 ReactCurrentOwner$2.current = null; 53546 53547 if (erroredWork === null || erroredWork.return === null) { 53548 // Expected to be working on a non-root fiber. This is a fatal error 53549 // because there's no ancestor that can handle it; the root is 53550 // supposed to capture all errors that weren't caught by an error 53551 // boundary. 53552 workInProgressRootExitStatus = RootFatalErrored; 53553 workInProgressRootFatalError = thrownValue; // Set `workInProgress` to null. This represents advancing to the next 53554 // sibling, or the parent if there are no siblings. But since the root 53555 // has no siblings nor a parent, we set it to null. Usually this is 53556 // handled by `completeUnitOfWork` or `unwindWork`, but since we're 53557 // intentionally not calling those, we need set it here. 53558 // TODO: Consider calling `unwindWork` to pop the contexts. 53559 53560 workInProgress = null; 53561 return; 53562 } 53563 53564 if (enableProfilerTimer && erroredWork.mode & ProfileMode) { 53565 // Record the time spent rendering before an error was thrown. This 53566 // avoids inaccurate Profiler durations in the case of a 53567 // suspended render. 53568 stopProfilerTimerIfRunningAndRecordDelta(erroredWork, true); 53569 } 53570 53571 throwException(root, erroredWork.return, erroredWork, thrownValue, workInProgressRootRenderLanes); 53572 completeUnitOfWork(erroredWork); 53573 } catch (yetAnotherThrownValue) { 53574 // Something in the return path also threw. 53575 thrownValue = yetAnotherThrownValue; 53576 53577 if (workInProgress === erroredWork && erroredWork !== null) { 53578 // If this boundary has already errored, then we had trouble processing 53579 // the error. Bubble it to the next boundary. 53580 erroredWork = erroredWork.return; 53581 workInProgress = erroredWork; 53582 } else { 53583 erroredWork = workInProgress; 53584 } 53585 53586 continue; 53587 } // Return to the normal work loop. 53588 53589 53590 return; 53591 } while (true); 53592} 53593 53594function pushDispatcher() { 53595 var prevDispatcher = ReactCurrentDispatcher$2.current; 53596 ReactCurrentDispatcher$2.current = ContextOnlyDispatcher; 53597 53598 if (prevDispatcher === null) { 53599 // The React isomorphic package does not include a default dispatcher. 53600 // Instead the first renderer will lazily attach one, in order to give 53601 // nicer error messages. 53602 return ContextOnlyDispatcher; 53603 } else { 53604 return prevDispatcher; 53605 } 53606} 53607 53608function popDispatcher(prevDispatcher) { 53609 ReactCurrentDispatcher$2.current = prevDispatcher; 53610} 53611 53612function pushInteractions(root) { 53613 { 53614 var prevInteractions = tracing.__interactionsRef.current; 53615 tracing.__interactionsRef.current = root.memoizedInteractions; 53616 return prevInteractions; 53617 } 53618} 53619 53620function popInteractions(prevInteractions) { 53621 { 53622 tracing.__interactionsRef.current = prevInteractions; 53623 } 53624} 53625 53626function markCommitTimeOfFallback() { 53627 globalMostRecentFallbackTime = now(); 53628} 53629function markSkippedUpdateLanes(lane) { 53630 workInProgressRootSkippedLanes = mergeLanes(lane, workInProgressRootSkippedLanes); 53631} 53632function renderDidSuspend() { 53633 if (workInProgressRootExitStatus === RootIncomplete) { 53634 workInProgressRootExitStatus = RootSuspended; 53635 } 53636} 53637function renderDidSuspendDelayIfPossible() { 53638 if (workInProgressRootExitStatus === RootIncomplete || workInProgressRootExitStatus === RootSuspended) { 53639 workInProgressRootExitStatus = RootSuspendedWithDelay; 53640 } // Check if there are updates that we skipped tree that might have unblocked 53641 // this render. 53642 53643 53644 if (workInProgressRoot !== null && (includesNonIdleWork(workInProgressRootSkippedLanes) || includesNonIdleWork(workInProgressRootUpdatedLanes))) { 53645 // Mark the current render as suspended so that we switch to working on 53646 // the updates that were skipped. Usually we only suspend at the end of 53647 // the render phase. 53648 // TODO: We should probably always mark the root as suspended immediately 53649 // (inside this function), since by suspending at the end of the render 53650 // phase introduces a potential mistake where we suspend lanes that were 53651 // pinged or updated while we were rendering. 53652 markRootSuspended$1(workInProgressRoot, workInProgressRootRenderLanes); 53653 } 53654} 53655function renderDidError() { 53656 if (workInProgressRootExitStatus !== RootCompleted) { 53657 workInProgressRootExitStatus = RootErrored; 53658 } 53659} // Called during render to determine if anything has suspended. 53660// Returns false if we're not sure. 53661 53662function renderHasNotSuspendedYet() { 53663 // If something errored or completed, we can't really be sure, 53664 // so those are false. 53665 return workInProgressRootExitStatus === RootIncomplete; 53666} 53667 53668function renderRootSync(root, lanes) { 53669 var prevExecutionContext = executionContext; 53670 executionContext |= RenderContext; 53671 var prevDispatcher = pushDispatcher(); // If the root or lanes have changed, throw out the existing stack 53672 // and prepare a fresh one. Otherwise we'll continue where we left off. 53673 53674 if (workInProgressRoot !== root || workInProgressRootRenderLanes !== lanes) { 53675 prepareFreshStack(root, lanes); 53676 startWorkOnPendingInteractions(root, lanes); 53677 } 53678 53679 var prevInteractions = pushInteractions(root); 53680 53681 do { 53682 try { 53683 workLoopSync(); 53684 break; 53685 } catch (thrownValue) { 53686 handleError(root, thrownValue); 53687 } 53688 } while (true); 53689 53690 resetContextDependencies(); 53691 53692 { 53693 popInteractions(prevInteractions); 53694 } 53695 53696 executionContext = prevExecutionContext; 53697 popDispatcher(prevDispatcher); 53698 53699 if (workInProgress !== null) { 53700 // This is a sync render, so we should have finished the whole tree. 53701 { 53702 { 53703 throw Error( "Cannot commit an incomplete root. This error is likely caused by a bug in React. Please file an issue." ); 53704 } 53705 } 53706 } 53707 53708 53709 workInProgressRoot = null; 53710 workInProgressRootRenderLanes = NoLanes; 53711 return workInProgressRootExitStatus; 53712} // The work loop is an extremely hot path. Tell Closure not to inline it. 53713 53714/** @noinline */ 53715 53716 53717function workLoopSync() { 53718 // Already timed out, so perform work without checking if we need to yield. 53719 while (workInProgress !== null) { 53720 performUnitOfWork(workInProgress); 53721 } 53722} 53723 53724function renderRootConcurrent(root, lanes) { 53725 var prevExecutionContext = executionContext; 53726 executionContext |= RenderContext; 53727 var prevDispatcher = pushDispatcher(); // If the root or lanes have changed, throw out the existing stack 53728 // and prepare a fresh one. Otherwise we'll continue where we left off. 53729 53730 if (workInProgressRoot !== root || workInProgressRootRenderLanes !== lanes) { 53731 resetRenderTimer(); 53732 prepareFreshStack(root, lanes); 53733 startWorkOnPendingInteractions(root, lanes); 53734 } 53735 53736 var prevInteractions = pushInteractions(root); 53737 53738 do { 53739 try { 53740 workLoopConcurrent(); 53741 break; 53742 } catch (thrownValue) { 53743 handleError(root, thrownValue); 53744 } 53745 } while (true); 53746 53747 resetContextDependencies(); 53748 53749 { 53750 popInteractions(prevInteractions); 53751 } 53752 53753 popDispatcher(prevDispatcher); 53754 executionContext = prevExecutionContext; 53755 53756 53757 if (workInProgress !== null) { 53758 53759 return RootIncomplete; 53760 } else { 53761 53762 53763 workInProgressRoot = null; 53764 workInProgressRootRenderLanes = NoLanes; // Return the final exit status. 53765 53766 return workInProgressRootExitStatus; 53767 } 53768} 53769/** @noinline */ 53770 53771 53772function workLoopConcurrent() { 53773 // Perform work until Scheduler asks us to yield 53774 while (workInProgress !== null && !shouldYield()) { 53775 performUnitOfWork(workInProgress); 53776 } 53777} 53778 53779function performUnitOfWork(unitOfWork) { 53780 // The current, flushed, state of this fiber is the alternate. Ideally 53781 // nothing should rely on this, but relying on it here means that we don't 53782 // need an additional field on the work in progress. 53783 var current = unitOfWork.alternate; 53784 setCurrentFiber(unitOfWork); 53785 var next; 53786 53787 if ( (unitOfWork.mode & ProfileMode) !== NoMode) { 53788 startProfilerTimer(unitOfWork); 53789 next = beginWork$1(current, unitOfWork, subtreeRenderLanes); 53790 stopProfilerTimerIfRunningAndRecordDelta(unitOfWork, true); 53791 } else { 53792 next = beginWork$1(current, unitOfWork, subtreeRenderLanes); 53793 } 53794 53795 resetCurrentFiber(); 53796 unitOfWork.memoizedProps = unitOfWork.pendingProps; 53797 53798 if (next === null) { 53799 // If this doesn't spawn new work, complete the current work. 53800 completeUnitOfWork(unitOfWork); 53801 } else { 53802 workInProgress = next; 53803 } 53804 53805 ReactCurrentOwner$2.current = null; 53806} 53807 53808function completeUnitOfWork(unitOfWork) { 53809 // Attempt to complete the current unit of work, then move to the next 53810 // sibling. If there are no more siblings, return to the parent fiber. 53811 var completedWork = unitOfWork; 53812 53813 do { 53814 // The current, flushed, state of this fiber is the alternate. Ideally 53815 // nothing should rely on this, but relying on it here means that we don't 53816 // need an additional field on the work in progress. 53817 var current = completedWork.alternate; 53818 var returnFiber = completedWork.return; // Check if the work completed or if something threw. 53819 53820 if ((completedWork.flags & Incomplete) === NoFlags) { 53821 setCurrentFiber(completedWork); 53822 var next = void 0; 53823 53824 if ( (completedWork.mode & ProfileMode) === NoMode) { 53825 next = completeWork(current, completedWork, subtreeRenderLanes); 53826 } else { 53827 startProfilerTimer(completedWork); 53828 next = completeWork(current, completedWork, subtreeRenderLanes); // Update render duration assuming we didn't error. 53829 53830 stopProfilerTimerIfRunningAndRecordDelta(completedWork, false); 53831 } 53832 53833 resetCurrentFiber(); 53834 53835 if (next !== null) { 53836 // Completing this fiber spawned new work. Work on that next. 53837 workInProgress = next; 53838 return; 53839 } 53840 53841 resetChildLanes(completedWork); 53842 53843 if (returnFiber !== null && // Do not append effects to parents if a sibling failed to complete 53844 (returnFiber.flags & Incomplete) === NoFlags) { 53845 // Append all the effects of the subtree and this fiber onto the effect 53846 // list of the parent. The completion order of the children affects the 53847 // side-effect order. 53848 if (returnFiber.firstEffect === null) { 53849 returnFiber.firstEffect = completedWork.firstEffect; 53850 } 53851 53852 if (completedWork.lastEffect !== null) { 53853 if (returnFiber.lastEffect !== null) { 53854 returnFiber.lastEffect.nextEffect = completedWork.firstEffect; 53855 } 53856 53857 returnFiber.lastEffect = completedWork.lastEffect; 53858 } // If this fiber had side-effects, we append it AFTER the children's 53859 // side-effects. We can perform certain side-effects earlier if needed, 53860 // by doing multiple passes over the effect list. We don't want to 53861 // schedule our own side-effect on our own list because if end up 53862 // reusing children we'll schedule this effect onto itself since we're 53863 // at the end. 53864 53865 53866 var flags = completedWork.flags; // Skip both NoWork and PerformedWork tags when creating the effect 53867 // list. PerformedWork effect is read by React DevTools but shouldn't be 53868 // committed. 53869 53870 if (flags > PerformedWork) { 53871 if (returnFiber.lastEffect !== null) { 53872 returnFiber.lastEffect.nextEffect = completedWork; 53873 } else { 53874 returnFiber.firstEffect = completedWork; 53875 } 53876 53877 returnFiber.lastEffect = completedWork; 53878 } 53879 } 53880 } else { 53881 // This fiber did not complete because something threw. Pop values off 53882 // the stack without entering the complete phase. If this is a boundary, 53883 // capture values if possible. 53884 var _next = unwindWork(completedWork); // Because this fiber did not complete, don't reset its expiration time. 53885 53886 53887 if (_next !== null) { 53888 // If completing this work spawned new work, do that next. We'll come 53889 // back here again. 53890 // Since we're restarting, remove anything that is not a host effect 53891 // from the effect tag. 53892 _next.flags &= HostEffectMask; 53893 workInProgress = _next; 53894 return; 53895 } 53896 53897 if ( (completedWork.mode & ProfileMode) !== NoMode) { 53898 // Record the render duration for the fiber that errored. 53899 stopProfilerTimerIfRunningAndRecordDelta(completedWork, false); // Include the time spent working on failed children before continuing. 53900 53901 var actualDuration = completedWork.actualDuration; 53902 var child = completedWork.child; 53903 53904 while (child !== null) { 53905 actualDuration += child.actualDuration; 53906 child = child.sibling; 53907 } 53908 53909 completedWork.actualDuration = actualDuration; 53910 } 53911 53912 if (returnFiber !== null) { 53913 // Mark the parent fiber as incomplete and clear its effect list. 53914 returnFiber.firstEffect = returnFiber.lastEffect = null; 53915 returnFiber.flags |= Incomplete; 53916 } 53917 } 53918 53919 var siblingFiber = completedWork.sibling; 53920 53921 if (siblingFiber !== null) { 53922 // If there is more work to do in this returnFiber, do that next. 53923 workInProgress = siblingFiber; 53924 return; 53925 } // Otherwise, return to the parent 53926 53927 53928 completedWork = returnFiber; // Update the next thing we're working on in case something throws. 53929 53930 workInProgress = completedWork; 53931 } while (completedWork !== null); // We've reached the root. 53932 53933 53934 if (workInProgressRootExitStatus === RootIncomplete) { 53935 workInProgressRootExitStatus = RootCompleted; 53936 } 53937} 53938 53939function resetChildLanes(completedWork) { 53940 if ( // TODO: Move this check out of the hot path by moving `resetChildLanes` 53941 // to switch statement in `completeWork`. 53942 (completedWork.tag === LegacyHiddenComponent || completedWork.tag === OffscreenComponent) && completedWork.memoizedState !== null && !includesSomeLane(subtreeRenderLanes, OffscreenLane) && (completedWork.mode & ConcurrentMode) !== NoLanes) { 53943 // The children of this component are hidden. Don't bubble their 53944 // expiration times. 53945 return; 53946 } 53947 53948 var newChildLanes = NoLanes; // Bubble up the earliest expiration time. 53949 53950 if ( (completedWork.mode & ProfileMode) !== NoMode) { 53951 // In profiling mode, resetChildExpirationTime is also used to reset 53952 // profiler durations. 53953 var actualDuration = completedWork.actualDuration; 53954 var treeBaseDuration = completedWork.selfBaseDuration; // When a fiber is cloned, its actualDuration is reset to 0. This value will 53955 // only be updated if work is done on the fiber (i.e. it doesn't bailout). 53956 // When work is done, it should bubble to the parent's actualDuration. If 53957 // the fiber has not been cloned though, (meaning no work was done), then 53958 // this value will reflect the amount of time spent working on a previous 53959 // render. In that case it should not bubble. We determine whether it was 53960 // cloned by comparing the child pointer. 53961 53962 var shouldBubbleActualDurations = completedWork.alternate === null || completedWork.child !== completedWork.alternate.child; 53963 var child = completedWork.child; 53964 53965 while (child !== null) { 53966 newChildLanes = mergeLanes(newChildLanes, mergeLanes(child.lanes, child.childLanes)); 53967 53968 if (shouldBubbleActualDurations) { 53969 actualDuration += child.actualDuration; 53970 } 53971 53972 treeBaseDuration += child.treeBaseDuration; 53973 child = child.sibling; 53974 } 53975 53976 var isTimedOutSuspense = completedWork.tag === SuspenseComponent && completedWork.memoizedState !== null; 53977 53978 if (isTimedOutSuspense) { 53979 // Don't count time spent in a timed out Suspense subtree as part of the base duration. 53980 var primaryChildFragment = completedWork.child; 53981 53982 if (primaryChildFragment !== null) { 53983 treeBaseDuration -= primaryChildFragment.treeBaseDuration; 53984 } 53985 } 53986 53987 completedWork.actualDuration = actualDuration; 53988 completedWork.treeBaseDuration = treeBaseDuration; 53989 } else { 53990 var _child = completedWork.child; 53991 53992 while (_child !== null) { 53993 newChildLanes = mergeLanes(newChildLanes, mergeLanes(_child.lanes, _child.childLanes)); 53994 _child = _child.sibling; 53995 } 53996 } 53997 53998 completedWork.childLanes = newChildLanes; 53999} 54000 54001function commitRoot(root) { 54002 var renderPriorityLevel = getCurrentPriorityLevel(); 54003 runWithPriority$1(ImmediatePriority$1, commitRootImpl.bind(null, root, renderPriorityLevel)); 54004 return null; 54005} 54006 54007function commitRootImpl(root, renderPriorityLevel) { 54008 do { 54009 // `flushPassiveEffects` will call `flushSyncUpdateQueue` at the end, which 54010 // means `flushPassiveEffects` will sometimes result in additional 54011 // passive effects. So we need to keep flushing in a loop until there are 54012 // no more pending effects. 54013 // TODO: Might be better if `flushPassiveEffects` did not automatically 54014 // flush synchronous work at the end, to avoid factoring hazards like this. 54015 flushPassiveEffects(); 54016 } while (rootWithPendingPassiveEffects !== null); 54017 54018 flushRenderPhaseStrictModeWarningsInDEV(); 54019 54020 if (!((executionContext & (RenderContext | CommitContext)) === NoContext)) { 54021 { 54022 throw Error( "Should not already be working." ); 54023 } 54024 } 54025 54026 var finishedWork = root.finishedWork; 54027 var lanes = root.finishedLanes; 54028 54029 if (finishedWork === null) { 54030 54031 return null; 54032 } 54033 54034 root.finishedWork = null; 54035 root.finishedLanes = NoLanes; 54036 54037 if (!(finishedWork !== root.current)) { 54038 { 54039 throw Error( "Cannot commit the same tree as before. This error is likely caused by a bug in React. Please file an issue." ); 54040 } 54041 } // commitRoot never returns a continuation; it always finishes synchronously. 54042 // So we can clear these now to allow a new callback to be scheduled. 54043 54044 54045 root.callbackNode = null; // Update the first and last pending times on this root. The new first 54046 // pending time is whatever is left on the root fiber. 54047 54048 var remainingLanes = mergeLanes(finishedWork.lanes, finishedWork.childLanes); 54049 markRootFinished(root, remainingLanes); // Clear already finished discrete updates in case that a later call of 54050 // `flushDiscreteUpdates` starts a useless render pass which may cancels 54051 // a scheduled timeout. 54052 54053 if (rootsWithPendingDiscreteUpdates !== null) { 54054 if (!hasDiscreteLanes(remainingLanes) && rootsWithPendingDiscreteUpdates.has(root)) { 54055 rootsWithPendingDiscreteUpdates.delete(root); 54056 } 54057 } 54058 54059 if (root === workInProgressRoot) { 54060 // We can reset these now that they are finished. 54061 workInProgressRoot = null; 54062 workInProgress = null; 54063 workInProgressRootRenderLanes = NoLanes; 54064 } // Get the list of effects. 54065 54066 54067 var firstEffect; 54068 54069 if (finishedWork.flags > PerformedWork) { 54070 // A fiber's effect list consists only of its children, not itself. So if 54071 // the root has an effect, we need to add it to the end of the list. The 54072 // resulting list is the set that would belong to the root's parent, if it 54073 // had one; that is, all the effects in the tree including the root. 54074 if (finishedWork.lastEffect !== null) { 54075 finishedWork.lastEffect.nextEffect = finishedWork; 54076 firstEffect = finishedWork.firstEffect; 54077 } else { 54078 firstEffect = finishedWork; 54079 } 54080 } else { 54081 // There is no effect on the root. 54082 firstEffect = finishedWork.firstEffect; 54083 } 54084 54085 if (firstEffect !== null) { 54086 54087 var prevExecutionContext = executionContext; 54088 executionContext |= CommitContext; 54089 var prevInteractions = pushInteractions(root); // Reset this to null before calling lifecycles 54090 54091 ReactCurrentOwner$2.current = null; // The commit phase is broken into several sub-phases. We do a separate pass 54092 // of the effect list for each phase: all mutation effects come before all 54093 // layout effects, and so on. 54094 // The first phase a "before mutation" phase. We use this phase to read the 54095 // state of the host tree right before we mutate it. This is where 54096 // getSnapshotBeforeUpdate is called. 54097 54098 focusedInstanceHandle = prepareForCommit(root.containerInfo); 54099 shouldFireAfterActiveInstanceBlur = false; 54100 nextEffect = firstEffect; 54101 54102 do { 54103 { 54104 invokeGuardedCallback(null, commitBeforeMutationEffects, null); 54105 54106 if (hasCaughtError()) { 54107 if (!(nextEffect !== null)) { 54108 { 54109 throw Error( "Should be working on an effect." ); 54110 } 54111 } 54112 54113 var error = clearCaughtError(); 54114 captureCommitPhaseError(nextEffect, error); 54115 nextEffect = nextEffect.nextEffect; 54116 } 54117 } 54118 } while (nextEffect !== null); // We no longer need to track the active instance fiber 54119 54120 54121 focusedInstanceHandle = null; 54122 54123 { 54124 // Mark the current commit time to be shared by all Profilers in this 54125 // batch. This enables them to be grouped later. 54126 recordCommitTime(); 54127 } // The next phase is the mutation phase, where we mutate the host tree. 54128 54129 54130 nextEffect = firstEffect; 54131 54132 do { 54133 { 54134 invokeGuardedCallback(null, commitMutationEffects, null, root, renderPriorityLevel); 54135 54136 if (hasCaughtError()) { 54137 if (!(nextEffect !== null)) { 54138 { 54139 throw Error( "Should be working on an effect." ); 54140 } 54141 } 54142 54143 var _error = clearCaughtError(); 54144 54145 captureCommitPhaseError(nextEffect, _error); 54146 nextEffect = nextEffect.nextEffect; 54147 } 54148 } 54149 } while (nextEffect !== null); 54150 54151 resetAfterCommit(root.containerInfo); // The work-in-progress tree is now the current tree. This must come after 54152 // the mutation phase, so that the previous tree is still current during 54153 // componentWillUnmount, but before the layout phase, so that the finished 54154 // work is current during componentDidMount/Update. 54155 54156 root.current = finishedWork; // The next phase is the layout phase, where we call effects that read 54157 // the host tree after it's been mutated. The idiomatic use case for this is 54158 // layout, but class component lifecycles also fire here for legacy reasons. 54159 54160 nextEffect = firstEffect; 54161 54162 do { 54163 { 54164 invokeGuardedCallback(null, commitLayoutEffects, null, root, lanes); 54165 54166 if (hasCaughtError()) { 54167 if (!(nextEffect !== null)) { 54168 { 54169 throw Error( "Should be working on an effect." ); 54170 } 54171 } 54172 54173 var _error2 = clearCaughtError(); 54174 54175 captureCommitPhaseError(nextEffect, _error2); 54176 nextEffect = nextEffect.nextEffect; 54177 } 54178 } 54179 } while (nextEffect !== null); 54180 54181 nextEffect = null; // Tell Scheduler to yield at the end of the frame, so the browser has an 54182 // opportunity to paint. 54183 54184 requestPaint(); 54185 54186 { 54187 popInteractions(prevInteractions); 54188 } 54189 54190 executionContext = prevExecutionContext; 54191 } else { 54192 // No effects. 54193 root.current = finishedWork; // Measure these anyway so the flamegraph explicitly shows that there were 54194 // no effects. 54195 // TODO: Maybe there's a better way to report this. 54196 54197 { 54198 recordCommitTime(); 54199 } 54200 } 54201 54202 var rootDidHavePassiveEffects = rootDoesHavePassiveEffects; 54203 54204 if (rootDoesHavePassiveEffects) { 54205 // This commit has passive effects. Stash a reference to them. But don't 54206 // schedule a callback until after flushing layout work. 54207 rootDoesHavePassiveEffects = false; 54208 rootWithPendingPassiveEffects = root; 54209 pendingPassiveEffectsLanes = lanes; 54210 pendingPassiveEffectsRenderPriority = renderPriorityLevel; 54211 } else { 54212 // We are done with the effect chain at this point so let's clear the 54213 // nextEffect pointers to assist with GC. If we have passive effects, we'll 54214 // clear this in flushPassiveEffects. 54215 nextEffect = firstEffect; 54216 54217 while (nextEffect !== null) { 54218 var nextNextEffect = nextEffect.nextEffect; 54219 nextEffect.nextEffect = null; 54220 54221 if (nextEffect.flags & Deletion) { 54222 detachFiberAfterEffects(nextEffect); 54223 } 54224 54225 nextEffect = nextNextEffect; 54226 } 54227 } // Read this again, since an effect might have updated it 54228 54229 54230 remainingLanes = root.pendingLanes; // Check if there's remaining work on this root 54231 54232 if (remainingLanes !== NoLanes) { 54233 { 54234 if (spawnedWorkDuringRender !== null) { 54235 var expirationTimes = spawnedWorkDuringRender; 54236 spawnedWorkDuringRender = null; 54237 54238 for (var i = 0; i < expirationTimes.length; i++) { 54239 scheduleInteractions(root, expirationTimes[i], root.memoizedInteractions); 54240 } 54241 } 54242 54243 schedulePendingInteractions(root, remainingLanes); 54244 } 54245 } else { 54246 // If there's no remaining work, we can clear the set of already failed 54247 // error boundaries. 54248 legacyErrorBoundariesThatAlreadyFailed = null; 54249 } 54250 54251 { 54252 if (!rootDidHavePassiveEffects) { 54253 // If there are no passive effects, then we can complete the pending interactions. 54254 // Otherwise, we'll wait until after the passive effects are flushed. 54255 // Wait to do this until after remaining work has been scheduled, 54256 // so that we don't prematurely signal complete for interactions when there's e.g. hidden work. 54257 finishPendingInteractions(root, lanes); 54258 } 54259 } 54260 54261 if (remainingLanes === SyncLane) { 54262 // Count the number of times the root synchronously re-renders without 54263 // finishing. If there are too many, it indicates an infinite update loop. 54264 if (root === rootWithNestedUpdates) { 54265 nestedUpdateCount++; 54266 } else { 54267 nestedUpdateCount = 0; 54268 rootWithNestedUpdates = root; 54269 } 54270 } else { 54271 nestedUpdateCount = 0; 54272 } 54273 54274 onCommitRoot(finishedWork.stateNode, renderPriorityLevel); 54275 54276 { 54277 onCommitRoot$1(); 54278 } // Always call this before exiting `commitRoot`, to ensure that any 54279 // additional work on this root is scheduled. 54280 54281 54282 ensureRootIsScheduled(root, now()); 54283 54284 if (hasUncaughtError) { 54285 hasUncaughtError = false; 54286 var _error3 = firstUncaughtError; 54287 firstUncaughtError = null; 54288 throw _error3; 54289 } 54290 54291 if ((executionContext & LegacyUnbatchedContext) !== NoContext) { 54292 // a ReactDOM.render-ed root inside of batchedUpdates. The commit fired 54293 // synchronously, but layout updates should be deferred until the end 54294 // of the batch. 54295 54296 54297 return null; 54298 } // If layout work was scheduled, flush it now. 54299 54300 54301 flushSyncCallbackQueue(); 54302 54303 return null; 54304} 54305 54306function commitBeforeMutationEffects() { 54307 while (nextEffect !== null) { 54308 var current = nextEffect.alternate; 54309 54310 if (!shouldFireAfterActiveInstanceBlur && focusedInstanceHandle !== null) { 54311 if ((nextEffect.flags & Deletion) !== NoFlags) { 54312 if (doesFiberContain(nextEffect, focusedInstanceHandle)) { 54313 shouldFireAfterActiveInstanceBlur = true; 54314 } 54315 } else { 54316 // TODO: Move this out of the hot path using a dedicated effect tag. 54317 if (nextEffect.tag === SuspenseComponent && isSuspenseBoundaryBeingHidden(current, nextEffect) && doesFiberContain(nextEffect, focusedInstanceHandle)) { 54318 shouldFireAfterActiveInstanceBlur = true; 54319 } 54320 } 54321 } 54322 54323 var flags = nextEffect.flags; 54324 54325 if ((flags & Snapshot) !== NoFlags) { 54326 setCurrentFiber(nextEffect); 54327 commitBeforeMutationLifeCycles(current, nextEffect); 54328 resetCurrentFiber(); 54329 } 54330 54331 if ((flags & Passive) !== NoFlags) { 54332 // If there are passive effects, schedule a callback to flush at 54333 // the earliest opportunity. 54334 if (!rootDoesHavePassiveEffects) { 54335 rootDoesHavePassiveEffects = true; 54336 scheduleCallback(NormalPriority$1, function () { 54337 flushPassiveEffects(); 54338 return null; 54339 }); 54340 } 54341 } 54342 54343 nextEffect = nextEffect.nextEffect; 54344 } 54345} 54346 54347function commitMutationEffects(root, renderPriorityLevel) { 54348 // TODO: Should probably move the bulk of this function to commitWork. 54349 while (nextEffect !== null) { 54350 setCurrentFiber(nextEffect); 54351 var flags = nextEffect.flags; 54352 54353 if (flags & ContentReset) { 54354 commitResetTextContent(nextEffect); 54355 } 54356 54357 if (flags & Ref) { 54358 var current = nextEffect.alternate; 54359 54360 if (current !== null) { 54361 commitDetachRef(current); 54362 } 54363 } // The following switch statement is only concerned about placement, 54364 // updates, and deletions. To avoid needing to add a case for every possible 54365 // bitmap value, we remove the secondary effects from the effect tag and 54366 // switch on that value. 54367 54368 54369 var primaryFlags = flags & (Placement | Update | Deletion | Hydrating); 54370 54371 switch (primaryFlags) { 54372 case Placement: 54373 { 54374 commitPlacement(nextEffect); // Clear the "placement" from effect tag so that we know that this is 54375 // inserted, before any life-cycles like componentDidMount gets called. 54376 // TODO: findDOMNode doesn't rely on this any more but isMounted does 54377 // and isMounted is deprecated anyway so we should be able to kill this. 54378 54379 nextEffect.flags &= ~Placement; 54380 break; 54381 } 54382 54383 case PlacementAndUpdate: 54384 { 54385 // Placement 54386 commitPlacement(nextEffect); // Clear the "placement" from effect tag so that we know that this is 54387 // inserted, before any life-cycles like componentDidMount gets called. 54388 54389 nextEffect.flags &= ~Placement; // Update 54390 54391 var _current = nextEffect.alternate; 54392 commitWork(_current, nextEffect); 54393 break; 54394 } 54395 54396 case Hydrating: 54397 { 54398 nextEffect.flags &= ~Hydrating; 54399 break; 54400 } 54401 54402 case HydratingAndUpdate: 54403 { 54404 nextEffect.flags &= ~Hydrating; // Update 54405 54406 var _current2 = nextEffect.alternate; 54407 commitWork(_current2, nextEffect); 54408 break; 54409 } 54410 54411 case Update: 54412 { 54413 var _current3 = nextEffect.alternate; 54414 commitWork(_current3, nextEffect); 54415 break; 54416 } 54417 54418 case Deletion: 54419 { 54420 commitDeletion(root, nextEffect); 54421 break; 54422 } 54423 } 54424 54425 resetCurrentFiber(); 54426 nextEffect = nextEffect.nextEffect; 54427 } 54428} 54429 54430function commitLayoutEffects(root, committedLanes) { 54431 54432 54433 while (nextEffect !== null) { 54434 setCurrentFiber(nextEffect); 54435 var flags = nextEffect.flags; 54436 54437 if (flags & (Update | Callback)) { 54438 var current = nextEffect.alternate; 54439 commitLifeCycles(root, current, nextEffect); 54440 } 54441 54442 { 54443 if (flags & Ref) { 54444 commitAttachRef(nextEffect); 54445 } 54446 } 54447 54448 resetCurrentFiber(); 54449 nextEffect = nextEffect.nextEffect; 54450 } 54451} 54452 54453function flushPassiveEffects() { 54454 // Returns whether passive effects were flushed. 54455 if (pendingPassiveEffectsRenderPriority !== NoPriority$1) { 54456 var priorityLevel = pendingPassiveEffectsRenderPriority > NormalPriority$1 ? NormalPriority$1 : pendingPassiveEffectsRenderPriority; 54457 pendingPassiveEffectsRenderPriority = NoPriority$1; 54458 54459 { 54460 return runWithPriority$1(priorityLevel, flushPassiveEffectsImpl); 54461 } 54462 } 54463 54464 return false; 54465} 54466function enqueuePendingPassiveHookEffectMount(fiber, effect) { 54467 pendingPassiveHookEffectsMount.push(effect, fiber); 54468 54469 if (!rootDoesHavePassiveEffects) { 54470 rootDoesHavePassiveEffects = true; 54471 scheduleCallback(NormalPriority$1, function () { 54472 flushPassiveEffects(); 54473 return null; 54474 }); 54475 } 54476} 54477function enqueuePendingPassiveHookEffectUnmount(fiber, effect) { 54478 pendingPassiveHookEffectsUnmount.push(effect, fiber); 54479 54480 { 54481 fiber.flags |= PassiveUnmountPendingDev; 54482 var alternate = fiber.alternate; 54483 54484 if (alternate !== null) { 54485 alternate.flags |= PassiveUnmountPendingDev; 54486 } 54487 } 54488 54489 if (!rootDoesHavePassiveEffects) { 54490 rootDoesHavePassiveEffects = true; 54491 scheduleCallback(NormalPriority$1, function () { 54492 flushPassiveEffects(); 54493 return null; 54494 }); 54495 } 54496} 54497 54498function invokePassiveEffectCreate(effect) { 54499 var create = effect.create; 54500 effect.destroy = create(); 54501} 54502 54503function flushPassiveEffectsImpl() { 54504 if (rootWithPendingPassiveEffects === null) { 54505 return false; 54506 } 54507 54508 var root = rootWithPendingPassiveEffects; 54509 var lanes = pendingPassiveEffectsLanes; 54510 rootWithPendingPassiveEffects = null; 54511 pendingPassiveEffectsLanes = NoLanes; 54512 54513 if (!((executionContext & (RenderContext | CommitContext)) === NoContext)) { 54514 { 54515 throw Error( "Cannot flush passive effects while already rendering." ); 54516 } 54517 } 54518 54519 { 54520 isFlushingPassiveEffects = true; 54521 } 54522 54523 var prevExecutionContext = executionContext; 54524 executionContext |= CommitContext; 54525 var prevInteractions = pushInteractions(root); // It's important that ALL pending passive effect destroy functions are called 54526 // before ANY passive effect create functions are called. 54527 // Otherwise effects in sibling components might interfere with each other. 54528 // e.g. a destroy function in one component may unintentionally override a ref 54529 // value set by a create function in another component. 54530 // Layout effects have the same constraint. 54531 // First pass: Destroy stale passive effects. 54532 54533 var unmountEffects = pendingPassiveHookEffectsUnmount; 54534 pendingPassiveHookEffectsUnmount = []; 54535 54536 for (var i = 0; i < unmountEffects.length; i += 2) { 54537 var _effect = unmountEffects[i]; 54538 var fiber = unmountEffects[i + 1]; 54539 var destroy = _effect.destroy; 54540 _effect.destroy = undefined; 54541 54542 { 54543 fiber.flags &= ~PassiveUnmountPendingDev; 54544 var alternate = fiber.alternate; 54545 54546 if (alternate !== null) { 54547 alternate.flags &= ~PassiveUnmountPendingDev; 54548 } 54549 } 54550 54551 if (typeof destroy === 'function') { 54552 { 54553 setCurrentFiber(fiber); 54554 54555 { 54556 invokeGuardedCallback(null, destroy, null); 54557 } 54558 54559 if (hasCaughtError()) { 54560 if (!(fiber !== null)) { 54561 { 54562 throw Error( "Should be working on an effect." ); 54563 } 54564 } 54565 54566 var error = clearCaughtError(); 54567 captureCommitPhaseError(fiber, error); 54568 } 54569 54570 resetCurrentFiber(); 54571 } 54572 } 54573 } // Second pass: Create new passive effects. 54574 54575 54576 var mountEffects = pendingPassiveHookEffectsMount; 54577 pendingPassiveHookEffectsMount = []; 54578 54579 for (var _i = 0; _i < mountEffects.length; _i += 2) { 54580 var _effect2 = mountEffects[_i]; 54581 var _fiber = mountEffects[_i + 1]; 54582 54583 { 54584 setCurrentFiber(_fiber); 54585 54586 { 54587 invokeGuardedCallback(null, invokePassiveEffectCreate, null, _effect2); 54588 } 54589 54590 if (hasCaughtError()) { 54591 if (!(_fiber !== null)) { 54592 { 54593 throw Error( "Should be working on an effect." ); 54594 } 54595 } 54596 54597 var _error4 = clearCaughtError(); 54598 54599 captureCommitPhaseError(_fiber, _error4); 54600 } 54601 54602 resetCurrentFiber(); 54603 } 54604 } // Note: This currently assumes there are no passive effects on the root fiber 54605 // because the root is not part of its own effect list. 54606 // This could change in the future. 54607 54608 54609 var effect = root.current.firstEffect; 54610 54611 while (effect !== null) { 54612 var nextNextEffect = effect.nextEffect; // Remove nextEffect pointer to assist GC 54613 54614 effect.nextEffect = null; 54615 54616 if (effect.flags & Deletion) { 54617 detachFiberAfterEffects(effect); 54618 } 54619 54620 effect = nextNextEffect; 54621 } 54622 54623 { 54624 popInteractions(prevInteractions); 54625 finishPendingInteractions(root, lanes); 54626 } 54627 54628 { 54629 isFlushingPassiveEffects = false; 54630 } 54631 54632 executionContext = prevExecutionContext; 54633 flushSyncCallbackQueue(); // If additional passive effects were scheduled, increment a counter. If this 54634 // exceeds the limit, we'll fire a warning. 54635 54636 nestedPassiveUpdateCount = rootWithPendingPassiveEffects === null ? 0 : nestedPassiveUpdateCount + 1; 54637 return true; 54638} 54639 54640function isAlreadyFailedLegacyErrorBoundary(instance) { 54641 return legacyErrorBoundariesThatAlreadyFailed !== null && legacyErrorBoundariesThatAlreadyFailed.has(instance); 54642} 54643function markLegacyErrorBoundaryAsFailed(instance) { 54644 if (legacyErrorBoundariesThatAlreadyFailed === null) { 54645 legacyErrorBoundariesThatAlreadyFailed = new Set([instance]); 54646 } else { 54647 legacyErrorBoundariesThatAlreadyFailed.add(instance); 54648 } 54649} 54650 54651function prepareToThrowUncaughtError(error) { 54652 if (!hasUncaughtError) { 54653 hasUncaughtError = true; 54654 firstUncaughtError = error; 54655 } 54656} 54657 54658var onUncaughtError = prepareToThrowUncaughtError; 54659 54660function captureCommitPhaseErrorOnRoot(rootFiber, sourceFiber, error) { 54661 var errorInfo = createCapturedValue(error, sourceFiber); 54662 var update = createRootErrorUpdate(rootFiber, errorInfo, SyncLane); 54663 enqueueUpdate(rootFiber, update); 54664 var eventTime = requestEventTime(); 54665 var root = markUpdateLaneFromFiberToRoot(rootFiber, SyncLane); 54666 54667 if (root !== null) { 54668 markRootUpdated(root, SyncLane, eventTime); 54669 ensureRootIsScheduled(root, eventTime); 54670 schedulePendingInteractions(root, SyncLane); 54671 } 54672} 54673 54674function captureCommitPhaseError(sourceFiber, error) { 54675 if (sourceFiber.tag === HostRoot) { 54676 // Error was thrown at the root. There is no parent, so the root 54677 // itself should capture it. 54678 captureCommitPhaseErrorOnRoot(sourceFiber, sourceFiber, error); 54679 return; 54680 } 54681 54682 var fiber = sourceFiber.return; 54683 54684 while (fiber !== null) { 54685 if (fiber.tag === HostRoot) { 54686 captureCommitPhaseErrorOnRoot(fiber, sourceFiber, error); 54687 return; 54688 } else if (fiber.tag === ClassComponent) { 54689 var ctor = fiber.type; 54690 var instance = fiber.stateNode; 54691 54692 if (typeof ctor.getDerivedStateFromError === 'function' || typeof instance.componentDidCatch === 'function' && !isAlreadyFailedLegacyErrorBoundary(instance)) { 54693 var errorInfo = createCapturedValue(error, sourceFiber); 54694 var update = createClassErrorUpdate(fiber, errorInfo, SyncLane); 54695 enqueueUpdate(fiber, update); 54696 var eventTime = requestEventTime(); 54697 var root = markUpdateLaneFromFiberToRoot(fiber, SyncLane); 54698 54699 if (root !== null) { 54700 markRootUpdated(root, SyncLane, eventTime); 54701 ensureRootIsScheduled(root, eventTime); 54702 schedulePendingInteractions(root, SyncLane); 54703 } else { 54704 // This component has already been unmounted. 54705 // We can't schedule any follow up work for the root because the fiber is already unmounted, 54706 // but we can still call the log-only boundary so the error isn't swallowed. 54707 // 54708 // TODO This is only a temporary bandaid for the old reconciler fork. 54709 // We can delete this special case once the new fork is merged. 54710 if (typeof instance.componentDidCatch === 'function' && !isAlreadyFailedLegacyErrorBoundary(instance)) { 54711 try { 54712 instance.componentDidCatch(error, errorInfo); 54713 } catch (errorToIgnore) {// TODO Ignore this error? Rethrow it? 54714 // This is kind of an edge case. 54715 } 54716 } 54717 } 54718 54719 return; 54720 } 54721 } 54722 54723 fiber = fiber.return; 54724 } 54725} 54726function pingSuspendedRoot(root, wakeable, pingedLanes) { 54727 var pingCache = root.pingCache; 54728 54729 if (pingCache !== null) { 54730 // The wakeable resolved, so we no longer need to memoize, because it will 54731 // never be thrown again. 54732 pingCache.delete(wakeable); 54733 } 54734 54735 var eventTime = requestEventTime(); 54736 markRootPinged(root, pingedLanes); 54737 54738 if (workInProgressRoot === root && isSubsetOfLanes(workInProgressRootRenderLanes, pingedLanes)) { 54739 // Received a ping at the same priority level at which we're currently 54740 // rendering. We might want to restart this render. This should mirror 54741 // the logic of whether or not a root suspends once it completes. 54742 // TODO: If we're rendering sync either due to Sync, Batched or expired, 54743 // we should probably never restart. 54744 // If we're suspended with delay, or if it's a retry, we'll always suspend 54745 // so we can always restart. 54746 if (workInProgressRootExitStatus === RootSuspendedWithDelay || workInProgressRootExitStatus === RootSuspended && includesOnlyRetries(workInProgressRootRenderLanes) && now() - globalMostRecentFallbackTime < FALLBACK_THROTTLE_MS) { 54747 // Restart from the root. 54748 prepareFreshStack(root, NoLanes); 54749 } else { 54750 // Even though we can't restart right now, we might get an 54751 // opportunity later. So we mark this render as having a ping. 54752 workInProgressRootPingedLanes = mergeLanes(workInProgressRootPingedLanes, pingedLanes); 54753 } 54754 } 54755 54756 ensureRootIsScheduled(root, eventTime); 54757 schedulePendingInteractions(root, pingedLanes); 54758} 54759 54760function retryTimedOutBoundary(boundaryFiber, retryLane) { 54761 // The boundary fiber (a Suspense component or SuspenseList component) 54762 // previously was rendered in its fallback state. One of the promises that 54763 // suspended it has resolved, which means at least part of the tree was 54764 // likely unblocked. Try rendering again, at a new expiration time. 54765 if (retryLane === NoLane) { 54766 retryLane = requestRetryLane(boundaryFiber); 54767 } // TODO: Special case idle priority? 54768 54769 54770 var eventTime = requestEventTime(); 54771 var root = markUpdateLaneFromFiberToRoot(boundaryFiber, retryLane); 54772 54773 if (root !== null) { 54774 markRootUpdated(root, retryLane, eventTime); 54775 ensureRootIsScheduled(root, eventTime); 54776 schedulePendingInteractions(root, retryLane); 54777 } 54778} 54779function resolveRetryWakeable(boundaryFiber, wakeable) { 54780 var retryLane = NoLane; // Default 54781 54782 var retryCache; 54783 54784 { 54785 retryCache = boundaryFiber.stateNode; 54786 } 54787 54788 if (retryCache !== null) { 54789 // The wakeable resolved, so we no longer need to memoize, because it will 54790 // never be thrown again. 54791 retryCache.delete(wakeable); 54792 } 54793 54794 retryTimedOutBoundary(boundaryFiber, retryLane); 54795} // Computes the next Just Noticeable Difference (JND) boundary. 54796// The theory is that a person can't tell the difference between small differences in time. 54797// Therefore, if we wait a bit longer than necessary that won't translate to a noticeable 54798// difference in the experience. However, waiting for longer might mean that we can avoid 54799// showing an intermediate loading state. The longer we have already waited, the harder it 54800// is to tell small differences in time. Therefore, the longer we've already waited, 54801// the longer we can wait additionally. At some point we have to give up though. 54802// We pick a train model where the next boundary commits at a consistent schedule. 54803// These particular numbers are vague estimates. We expect to adjust them based on research. 54804 54805function jnd(timeElapsed) { 54806 return timeElapsed < 120 ? 120 : timeElapsed < 480 ? 480 : timeElapsed < 1080 ? 1080 : timeElapsed < 1920 ? 1920 : timeElapsed < 3000 ? 3000 : timeElapsed < 4320 ? 4320 : ceil(timeElapsed / 1960) * 1960; 54807} 54808 54809function checkForNestedUpdates() { 54810 if (nestedUpdateCount > NESTED_UPDATE_LIMIT) { 54811 nestedUpdateCount = 0; 54812 rootWithNestedUpdates = null; 54813 54814 { 54815 { 54816 throw Error( "Maximum update depth exceeded. This can happen when a component repeatedly calls setState inside componentWillUpdate or componentDidUpdate. React limits the number of nested updates to prevent infinite loops." ); 54817 } 54818 } 54819 } 54820 54821 { 54822 if (nestedPassiveUpdateCount > NESTED_PASSIVE_UPDATE_LIMIT) { 54823 nestedPassiveUpdateCount = 0; 54824 54825 error('Maximum update depth exceeded. This can happen when a component ' + "calls setState inside useEffect, but useEffect either doesn't " + 'have a dependency array, or one of the dependencies changes on ' + 'every render.'); 54826 } 54827 } 54828} 54829 54830function flushRenderPhaseStrictModeWarningsInDEV() { 54831 { 54832 ReactStrictModeWarnings.flushLegacyContextWarning(); 54833 54834 { 54835 ReactStrictModeWarnings.flushPendingUnsafeLifecycleWarnings(); 54836 } 54837 } 54838} 54839 54840var didWarnStateUpdateForNotYetMountedComponent = null; 54841 54842function warnAboutUpdateOnNotYetMountedFiberInDEV(fiber) { 54843 { 54844 if ((executionContext & RenderContext) !== NoContext) { 54845 // We let the other warning about render phase updates deal with this one. 54846 return; 54847 } 54848 54849 if (!(fiber.mode & (BlockingMode | ConcurrentMode))) { 54850 return; 54851 } 54852 54853 var tag = fiber.tag; 54854 54855 if (tag !== IndeterminateComponent && tag !== HostRoot && tag !== ClassComponent && tag !== FunctionComponent && tag !== ForwardRef && tag !== MemoComponent && tag !== SimpleMemoComponent && tag !== Block) { 54856 // Only warn for user-defined components, not internal ones like Suspense. 54857 return; 54858 } // We show the whole stack but dedupe on the top component's name because 54859 // the problematic code almost always lies inside that component. 54860 54861 54862 var componentName = getComponentName(fiber.type) || 'ReactComponent'; 54863 54864 if (didWarnStateUpdateForNotYetMountedComponent !== null) { 54865 if (didWarnStateUpdateForNotYetMountedComponent.has(componentName)) { 54866 return; 54867 } 54868 54869 didWarnStateUpdateForNotYetMountedComponent.add(componentName); 54870 } else { 54871 didWarnStateUpdateForNotYetMountedComponent = new Set([componentName]); 54872 } 54873 54874 var previousFiber = current; 54875 54876 try { 54877 setCurrentFiber(fiber); 54878 54879 error("Can't perform a React state update on a component that hasn't mounted yet. " + 'This indicates that you have a side-effect in your render function that ' + 'asynchronously later calls tries to update the component. Move this work to ' + 'useEffect instead.'); 54880 } finally { 54881 if (previousFiber) { 54882 setCurrentFiber(fiber); 54883 } else { 54884 resetCurrentFiber(); 54885 } 54886 } 54887 } 54888} 54889 54890var didWarnStateUpdateForUnmountedComponent = null; 54891 54892function warnAboutUpdateOnUnmountedFiberInDEV(fiber) { 54893 { 54894 var tag = fiber.tag; 54895 54896 if (tag !== HostRoot && tag !== ClassComponent && tag !== FunctionComponent && tag !== ForwardRef && tag !== MemoComponent && tag !== SimpleMemoComponent && tag !== Block) { 54897 // Only warn for user-defined components, not internal ones like Suspense. 54898 return; 54899 } // If there are pending passive effects unmounts for this Fiber, 54900 // we can assume that they would have prevented this update. 54901 54902 54903 if ((fiber.flags & PassiveUnmountPendingDev) !== NoFlags) { 54904 return; 54905 } // We show the whole stack but dedupe on the top component's name because 54906 // the problematic code almost always lies inside that component. 54907 54908 54909 var componentName = getComponentName(fiber.type) || 'ReactComponent'; 54910 54911 if (didWarnStateUpdateForUnmountedComponent !== null) { 54912 if (didWarnStateUpdateForUnmountedComponent.has(componentName)) { 54913 return; 54914 } 54915 54916 didWarnStateUpdateForUnmountedComponent.add(componentName); 54917 } else { 54918 didWarnStateUpdateForUnmountedComponent = new Set([componentName]); 54919 } 54920 54921 if (isFlushingPassiveEffects) ; else { 54922 var previousFiber = current; 54923 54924 try { 54925 setCurrentFiber(fiber); 54926 54927 error("Can't perform a React state update on an unmounted component. This " + 'is a no-op, but it indicates a memory leak in your application. To ' + 'fix, cancel all subscriptions and asynchronous tasks in %s.', tag === ClassComponent ? 'the componentWillUnmount method' : 'a useEffect cleanup function'); 54928 } finally { 54929 if (previousFiber) { 54930 setCurrentFiber(fiber); 54931 } else { 54932 resetCurrentFiber(); 54933 } 54934 } 54935 } 54936 } 54937} 54938 54939var beginWork$1; 54940 54941{ 54942 var dummyFiber = null; 54943 54944 beginWork$1 = function (current, unitOfWork, lanes) { 54945 // If a component throws an error, we replay it again in a synchronously 54946 // dispatched event, so that the debugger will treat it as an uncaught 54947 // error See ReactErrorUtils for more information. 54948 // Before entering the begin phase, copy the work-in-progress onto a dummy 54949 // fiber. If beginWork throws, we'll use this to reset the state. 54950 var originalWorkInProgressCopy = assignFiberPropertiesInDEV(dummyFiber, unitOfWork); 54951 54952 try { 54953 return beginWork(current, unitOfWork, lanes); 54954 } catch (originalError) { 54955 if (originalError !== null && typeof originalError === 'object' && typeof originalError.then === 'function') { 54956 // Don't replay promises. Treat everything else like an error. 54957 throw originalError; 54958 } // Keep this code in sync with handleError; any changes here must have 54959 // corresponding changes there. 54960 54961 54962 resetContextDependencies(); 54963 resetHooksAfterThrow(); // Don't reset current debug fiber, since we're about to work on the 54964 // same fiber again. 54965 // Unwind the failed stack frame 54966 54967 unwindInterruptedWork(unitOfWork); // Restore the original properties of the fiber. 54968 54969 assignFiberPropertiesInDEV(unitOfWork, originalWorkInProgressCopy); 54970 54971 if ( unitOfWork.mode & ProfileMode) { 54972 // Reset the profiler timer. 54973 startProfilerTimer(unitOfWork); 54974 } // Run beginWork again. 54975 54976 54977 invokeGuardedCallback(null, beginWork, null, current, unitOfWork, lanes); 54978 54979 if (hasCaughtError()) { 54980 var replayError = clearCaughtError(); // `invokeGuardedCallback` sometimes sets an expando `_suppressLogging`. 54981 // Rethrow this error instead of the original one. 54982 54983 throw replayError; 54984 } else { 54985 // This branch is reachable if the render phase is impure. 54986 throw originalError; 54987 } 54988 } 54989 }; 54990} 54991 54992var didWarnAboutUpdateInRender = false; 54993var didWarnAboutUpdateInRenderForAnotherComponent; 54994 54995{ 54996 didWarnAboutUpdateInRenderForAnotherComponent = new Set(); 54997} 54998 54999function warnAboutRenderPhaseUpdatesInDEV(fiber) { 55000 { 55001 if (isRendering && (executionContext & RenderContext) !== NoContext && !getIsUpdatingOpaqueValueInRenderPhaseInDEV()) { 55002 switch (fiber.tag) { 55003 case FunctionComponent: 55004 case ForwardRef: 55005 case SimpleMemoComponent: 55006 { 55007 var renderingComponentName = workInProgress && getComponentName(workInProgress.type) || 'Unknown'; // Dedupe by the rendering component because it's the one that needs to be fixed. 55008 55009 var dedupeKey = renderingComponentName; 55010 55011 if (!didWarnAboutUpdateInRenderForAnotherComponent.has(dedupeKey)) { 55012 didWarnAboutUpdateInRenderForAnotherComponent.add(dedupeKey); 55013 var setStateComponentName = getComponentName(fiber.type) || 'Unknown'; 55014 55015 error('Cannot update a component (`%s`) while rendering a ' + 'different component (`%s`). To locate the bad setState() call inside `%s`, ' + 'follow the stack trace as described in https://reactjs.org/link/setstate-in-render', setStateComponentName, renderingComponentName, renderingComponentName); 55016 } 55017 55018 break; 55019 } 55020 55021 case ClassComponent: 55022 { 55023 if (!didWarnAboutUpdateInRender) { 55024 error('Cannot update during an existing state transition (such as ' + 'within `render`). Render methods should be a pure ' + 'function of props and state.'); 55025 55026 didWarnAboutUpdateInRender = true; 55027 } 55028 55029 break; 55030 } 55031 } 55032 } 55033 } 55034} // a 'shared' variable that changes when act() opens/closes in tests. 55035 55036 55037var IsThisRendererActing = { 55038 current: false 55039}; 55040function warnIfNotScopedWithMatchingAct(fiber) { 55041 { 55042 if ( IsSomeRendererActing.current === true && IsThisRendererActing.current !== true) { 55043 var previousFiber = current; 55044 55045 try { 55046 setCurrentFiber(fiber); 55047 55048 error("It looks like you're using the wrong act() around your test interactions.\n" + 'Be sure to use the matching version of act() corresponding to your renderer:\n\n' + '// for react-dom:\n' + // Break up imports to avoid accidentally parsing them as dependencies. 55049 'import {act} fr' + "om 'react-dom/test-utils';\n" + '// ...\n' + 'act(() => ...);\n\n' + '// for react-test-renderer:\n' + // Break up imports to avoid accidentally parsing them as dependencies. 55050 'import TestRenderer fr' + "om react-test-renderer';\n" + 'const {act} = TestRenderer;\n' + '// ...\n' + 'act(() => ...);'); 55051 } finally { 55052 if (previousFiber) { 55053 setCurrentFiber(fiber); 55054 } else { 55055 resetCurrentFiber(); 55056 } 55057 } 55058 } 55059 } 55060} 55061function warnIfNotCurrentlyActingEffectsInDEV(fiber) { 55062 { 55063 if ( (fiber.mode & StrictMode) !== NoMode && IsSomeRendererActing.current === false && IsThisRendererActing.current === false) { 55064 error('An update to %s ran an effect, but was not wrapped in act(...).\n\n' + 'When testing, code that causes React state updates should be ' + 'wrapped into act(...):\n\n' + 'act(() => {\n' + ' /* fire events that update state */\n' + '});\n' + '/* assert on the output */\n\n' + "This ensures that you're testing the behavior the user would see " + 'in the browser.' + ' Learn more at https://reactjs.org/link/wrap-tests-with-act', getComponentName(fiber.type)); 55065 } 55066 } 55067} 55068 55069function warnIfNotCurrentlyActingUpdatesInDEV(fiber) { 55070 { 55071 if ( executionContext === NoContext && IsSomeRendererActing.current === false && IsThisRendererActing.current === false) { 55072 var previousFiber = current; 55073 55074 try { 55075 setCurrentFiber(fiber); 55076 55077 error('An update to %s inside a test was not wrapped in act(...).\n\n' + 'When testing, code that causes React state updates should be ' + 'wrapped into act(...):\n\n' + 'act(() => {\n' + ' /* fire events that update state */\n' + '});\n' + '/* assert on the output */\n\n' + "This ensures that you're testing the behavior the user would see " + 'in the browser.' + ' Learn more at https://reactjs.org/link/wrap-tests-with-act', getComponentName(fiber.type)); 55078 } finally { 55079 if (previousFiber) { 55080 setCurrentFiber(fiber); 55081 } else { 55082 resetCurrentFiber(); 55083 } 55084 } 55085 } 55086 } 55087} 55088 55089var warnIfNotCurrentlyActingUpdatesInDev = warnIfNotCurrentlyActingUpdatesInDEV; // In tests, we want to enforce a mocked scheduler. 55090 55091var didWarnAboutUnmockedScheduler = false; // TODO Before we release concurrent mode, revisit this and decide whether a mocked 55092// scheduler is the actual recommendation. The alternative could be a testing build, 55093// a new lib, or whatever; we dunno just yet. This message is for early adopters 55094// to get their tests right. 55095 55096function warnIfUnmockedScheduler(fiber) { 55097 { 55098 if (didWarnAboutUnmockedScheduler === false && Scheduler.unstable_flushAllWithoutAsserting === undefined) { 55099 if (fiber.mode & BlockingMode || fiber.mode & ConcurrentMode) { 55100 didWarnAboutUnmockedScheduler = true; 55101 55102 error('In Concurrent or Sync modes, the "scheduler" module needs to be mocked ' + 'to guarantee consistent behaviour across tests and browsers. ' + 'For example, with jest: \n' + // Break up requires to avoid accidentally parsing them as dependencies. 55103 "jest.mock('scheduler', () => require" + "('scheduler/unstable_mock'));\n\n" + 'For more info, visit https://reactjs.org/link/mock-scheduler'); 55104 } 55105 } 55106 } 55107} 55108 55109function computeThreadID(root, lane) { 55110 // Interaction threads are unique per root and expiration time. 55111 // NOTE: Intentionally unsound cast. All that matters is that it's a number 55112 // and it represents a batch of work. Could make a helper function instead, 55113 // but meh this is fine for now. 55114 return lane * 1000 + root.interactionThreadID; 55115} 55116 55117function markSpawnedWork(lane) { 55118 55119 if (spawnedWorkDuringRender === null) { 55120 spawnedWorkDuringRender = [lane]; 55121 } else { 55122 spawnedWorkDuringRender.push(lane); 55123 } 55124} 55125 55126function scheduleInteractions(root, lane, interactions) { 55127 55128 if (interactions.size > 0) { 55129 var pendingInteractionMap = root.pendingInteractionMap; 55130 var pendingInteractions = pendingInteractionMap.get(lane); 55131 55132 if (pendingInteractions != null) { 55133 interactions.forEach(function (interaction) { 55134 if (!pendingInteractions.has(interaction)) { 55135 // Update the pending async work count for previously unscheduled interaction. 55136 interaction.__count++; 55137 } 55138 55139 pendingInteractions.add(interaction); 55140 }); 55141 } else { 55142 pendingInteractionMap.set(lane, new Set(interactions)); // Update the pending async work count for the current interactions. 55143 55144 interactions.forEach(function (interaction) { 55145 interaction.__count++; 55146 }); 55147 } 55148 55149 var subscriber = tracing.__subscriberRef.current; 55150 55151 if (subscriber !== null) { 55152 var threadID = computeThreadID(root, lane); 55153 subscriber.onWorkScheduled(interactions, threadID); 55154 } 55155 } 55156} 55157 55158function schedulePendingInteractions(root, lane) { 55159 55160 scheduleInteractions(root, lane, tracing.__interactionsRef.current); 55161} 55162 55163function startWorkOnPendingInteractions(root, lanes) { 55164 // we can accurately attribute time spent working on it, And so that cascading 55165 // work triggered during the render phase will be associated with it. 55166 55167 55168 var interactions = new Set(); 55169 root.pendingInteractionMap.forEach(function (scheduledInteractions, scheduledLane) { 55170 if (includesSomeLane(lanes, scheduledLane)) { 55171 scheduledInteractions.forEach(function (interaction) { 55172 return interactions.add(interaction); 55173 }); 55174 } 55175 }); // Store the current set of interactions on the FiberRoot for a few reasons: 55176 // We can re-use it in hot functions like performConcurrentWorkOnRoot() 55177 // without having to recalculate it. We will also use it in commitWork() to 55178 // pass to any Profiler onRender() hooks. This also provides DevTools with a 55179 // way to access it when the onCommitRoot() hook is called. 55180 55181 root.memoizedInteractions = interactions; 55182 55183 if (interactions.size > 0) { 55184 var subscriber = tracing.__subscriberRef.current; 55185 55186 if (subscriber !== null) { 55187 var threadID = computeThreadID(root, lanes); 55188 55189 try { 55190 subscriber.onWorkStarted(interactions, threadID); 55191 } catch (error) { 55192 // If the subscriber throws, rethrow it in a separate task 55193 scheduleCallback(ImmediatePriority$1, function () { 55194 throw error; 55195 }); 55196 } 55197 } 55198 } 55199} 55200 55201function finishPendingInteractions(root, committedLanes) { 55202 55203 var remainingLanesAfterCommit = root.pendingLanes; 55204 var subscriber; 55205 55206 try { 55207 subscriber = tracing.__subscriberRef.current; 55208 55209 if (subscriber !== null && root.memoizedInteractions.size > 0) { 55210 // FIXME: More than one lane can finish in a single commit. 55211 var threadID = computeThreadID(root, committedLanes); 55212 subscriber.onWorkStopped(root.memoizedInteractions, threadID); 55213 } 55214 } catch (error) { 55215 // If the subscriber throws, rethrow it in a separate task 55216 scheduleCallback(ImmediatePriority$1, function () { 55217 throw error; 55218 }); 55219 } finally { 55220 // Clear completed interactions from the pending Map. 55221 // Unless the render was suspended or cascading work was scheduled, 55222 // In which caseâ leave pending interactions until the subsequent render. 55223 var pendingInteractionMap = root.pendingInteractionMap; 55224 pendingInteractionMap.forEach(function (scheduledInteractions, lane) { 55225 // Only decrement the pending interaction count if we're done. 55226 // If there's still work at the current priority, 55227 // That indicates that we are waiting for suspense data. 55228 if (!includesSomeLane(remainingLanesAfterCommit, lane)) { 55229 pendingInteractionMap.delete(lane); 55230 scheduledInteractions.forEach(function (interaction) { 55231 interaction.__count--; 55232 55233 if (subscriber !== null && interaction.__count === 0) { 55234 try { 55235 subscriber.onInteractionScheduledWorkCompleted(interaction); 55236 } catch (error) { 55237 // If the subscriber throws, rethrow it in a separate task 55238 scheduleCallback(ImmediatePriority$1, function () { 55239 throw error; 55240 }); 55241 } 55242 } 55243 }); 55244 } 55245 }); 55246 } 55247} // `act` testing API 55248 55249function shouldForceFlushFallbacksInDEV() { 55250 // Never force flush in production. This function should get stripped out. 55251 return actingUpdatesScopeDepth > 0; 55252} 55253// so we can tell if any async act() calls try to run in parallel. 55254 55255 55256var actingUpdatesScopeDepth = 0; 55257 55258function detachFiberAfterEffects(fiber) { 55259 fiber.sibling = null; 55260 fiber.stateNode = null; 55261} 55262 55263var resolveFamily = null; // $FlowFixMe Flow gets confused by a WeakSet feature check below. 55264 55265var failedBoundaries = null; 55266var setRefreshHandler = function (handler) { 55267 { 55268 resolveFamily = handler; 55269 } 55270}; 55271function resolveFunctionForHotReloading(type) { 55272 { 55273 if (resolveFamily === null) { 55274 // Hot reloading is disabled. 55275 return type; 55276 } 55277 55278 var family = resolveFamily(type); 55279 55280 if (family === undefined) { 55281 return type; 55282 } // Use the latest known implementation. 55283 55284 55285 return family.current; 55286 } 55287} 55288function resolveClassForHotReloading(type) { 55289 // No implementation differences. 55290 return resolveFunctionForHotReloading(type); 55291} 55292function resolveForwardRefForHotReloading(type) { 55293 { 55294 if (resolveFamily === null) { 55295 // Hot reloading is disabled. 55296 return type; 55297 } 55298 55299 var family = resolveFamily(type); 55300 55301 if (family === undefined) { 55302 // Check if we're dealing with a real forwardRef. Don't want to crash early. 55303 if (type !== null && type !== undefined && typeof type.render === 'function') { 55304 // ForwardRef is special because its resolved .type is an object, 55305 // but it's possible that we only have its inner render function in the map. 55306 // If that inner render function is different, we'll build a new forwardRef type. 55307 var currentRender = resolveFunctionForHotReloading(type.render); 55308 55309 if (type.render !== currentRender) { 55310 var syntheticType = { 55311 $$typeof: REACT_FORWARD_REF_TYPE, 55312 render: currentRender 55313 }; 55314 55315 if (type.displayName !== undefined) { 55316 syntheticType.displayName = type.displayName; 55317 } 55318 55319 return syntheticType; 55320 } 55321 } 55322 55323 return type; 55324 } // Use the latest known implementation. 55325 55326 55327 return family.current; 55328 } 55329} 55330function isCompatibleFamilyForHotReloading(fiber, element) { 55331 { 55332 if (resolveFamily === null) { 55333 // Hot reloading is disabled. 55334 return false; 55335 } 55336 55337 var prevType = fiber.elementType; 55338 var nextType = element.type; // If we got here, we know types aren't === equal. 55339 55340 var needsCompareFamilies = false; 55341 var $$typeofNextType = typeof nextType === 'object' && nextType !== null ? nextType.$$typeof : null; 55342 55343 switch (fiber.tag) { 55344 case ClassComponent: 55345 { 55346 if (typeof nextType === 'function') { 55347 needsCompareFamilies = true; 55348 } 55349 55350 break; 55351 } 55352 55353 case FunctionComponent: 55354 { 55355 if (typeof nextType === 'function') { 55356 needsCompareFamilies = true; 55357 } else if ($$typeofNextType === REACT_LAZY_TYPE) { 55358 // We don't know the inner type yet. 55359 // We're going to assume that the lazy inner type is stable, 55360 // and so it is sufficient to avoid reconciling it away. 55361 // We're not going to unwrap or actually use the new lazy type. 55362 needsCompareFamilies = true; 55363 } 55364 55365 break; 55366 } 55367 55368 case ForwardRef: 55369 { 55370 if ($$typeofNextType === REACT_FORWARD_REF_TYPE) { 55371 needsCompareFamilies = true; 55372 } else if ($$typeofNextType === REACT_LAZY_TYPE) { 55373 needsCompareFamilies = true; 55374 } 55375 55376 break; 55377 } 55378 55379 case MemoComponent: 55380 case SimpleMemoComponent: 55381 { 55382 if ($$typeofNextType === REACT_MEMO_TYPE) { 55383 // TODO: if it was but can no longer be simple, 55384 // we shouldn't set this. 55385 needsCompareFamilies = true; 55386 } else if ($$typeofNextType === REACT_LAZY_TYPE) { 55387 needsCompareFamilies = true; 55388 } 55389 55390 break; 55391 } 55392 55393 default: 55394 return false; 55395 } // Check if both types have a family and it's the same one. 55396 55397 55398 if (needsCompareFamilies) { 55399 // Note: memo() and forwardRef() we'll compare outer rather than inner type. 55400 // This means both of them need to be registered to preserve state. 55401 // If we unwrapped and compared the inner types for wrappers instead, 55402 // then we would risk falsely saying two separate memo(Foo) 55403 // calls are equivalent because they wrap the same Foo function. 55404 var prevFamily = resolveFamily(prevType); 55405 55406 if (prevFamily !== undefined && prevFamily === resolveFamily(nextType)) { 55407 return true; 55408 } 55409 } 55410 55411 return false; 55412 } 55413} 55414function markFailedErrorBoundaryForHotReloading(fiber) { 55415 { 55416 if (resolveFamily === null) { 55417 // Hot reloading is disabled. 55418 return; 55419 } 55420 55421 if (typeof WeakSet !== 'function') { 55422 return; 55423 } 55424 55425 if (failedBoundaries === null) { 55426 failedBoundaries = new WeakSet(); 55427 } 55428 55429 failedBoundaries.add(fiber); 55430 } 55431} 55432var scheduleRefresh = function (root, update) { 55433 { 55434 if (resolveFamily === null) { 55435 // Hot reloading is disabled. 55436 return; 55437 } 55438 55439 var staleFamilies = update.staleFamilies, 55440 updatedFamilies = update.updatedFamilies; 55441 flushPassiveEffects(); 55442 flushSync(function () { 55443 scheduleFibersWithFamiliesRecursively(root.current, updatedFamilies, staleFamilies); 55444 }); 55445 } 55446}; 55447var scheduleRoot = function (root, element) { 55448 { 55449 if (root.context !== emptyContextObject) { 55450 // Super edge case: root has a legacy _renderSubtree context 55451 // but we don't know the parentComponent so we can't pass it. 55452 // Just ignore. We'll delete this with _renderSubtree code path later. 55453 return; 55454 } 55455 55456 flushPassiveEffects(); 55457 flushSync(function () { 55458 updateContainer(element, root, null, null); 55459 }); 55460 } 55461}; 55462 55463function scheduleFibersWithFamiliesRecursively(fiber, updatedFamilies, staleFamilies) { 55464 { 55465 var alternate = fiber.alternate, 55466 child = fiber.child, 55467 sibling = fiber.sibling, 55468 tag = fiber.tag, 55469 type = fiber.type; 55470 var candidateType = null; 55471 55472 switch (tag) { 55473 case FunctionComponent: 55474 case SimpleMemoComponent: 55475 case ClassComponent: 55476 candidateType = type; 55477 break; 55478 55479 case ForwardRef: 55480 candidateType = type.render; 55481 break; 55482 } 55483 55484 if (resolveFamily === null) { 55485 throw new Error('Expected resolveFamily to be set during hot reload.'); 55486 } 55487 55488 var needsRender = false; 55489 var needsRemount = false; 55490 55491 if (candidateType !== null) { 55492 var family = resolveFamily(candidateType); 55493 55494 if (family !== undefined) { 55495 if (staleFamilies.has(family)) { 55496 needsRemount = true; 55497 } else if (updatedFamilies.has(family)) { 55498 if (tag === ClassComponent) { 55499 needsRemount = true; 55500 } else { 55501 needsRender = true; 55502 } 55503 } 55504 } 55505 } 55506 55507 if (failedBoundaries !== null) { 55508 if (failedBoundaries.has(fiber) || alternate !== null && failedBoundaries.has(alternate)) { 55509 needsRemount = true; 55510 } 55511 } 55512 55513 if (needsRemount) { 55514 fiber._debugNeedsRemount = true; 55515 } 55516 55517 if (needsRemount || needsRender) { 55518 scheduleUpdateOnFiber(fiber, SyncLane, NoTimestamp); 55519 } 55520 55521 if (child !== null && !needsRemount) { 55522 scheduleFibersWithFamiliesRecursively(child, updatedFamilies, staleFamilies); 55523 } 55524 55525 if (sibling !== null) { 55526 scheduleFibersWithFamiliesRecursively(sibling, updatedFamilies, staleFamilies); 55527 } 55528 } 55529} 55530 55531var findHostInstancesForRefresh = function (root, families) { 55532 { 55533 var hostInstances = new Set(); 55534 var types = new Set(families.map(function (family) { 55535 return family.current; 55536 })); 55537 findHostInstancesForMatchingFibersRecursively(root.current, types, hostInstances); 55538 return hostInstances; 55539 } 55540}; 55541 55542function findHostInstancesForMatchingFibersRecursively(fiber, types, hostInstances) { 55543 { 55544 var child = fiber.child, 55545 sibling = fiber.sibling, 55546 tag = fiber.tag, 55547 type = fiber.type; 55548 var candidateType = null; 55549 55550 switch (tag) { 55551 case FunctionComponent: 55552 case SimpleMemoComponent: 55553 case ClassComponent: 55554 candidateType = type; 55555 break; 55556 55557 case ForwardRef: 55558 candidateType = type.render; 55559 break; 55560 } 55561 55562 var didMatch = false; 55563 55564 if (candidateType !== null) { 55565 if (types.has(candidateType)) { 55566 didMatch = true; 55567 } 55568 } 55569 55570 if (didMatch) { 55571 // We have a match. This only drills down to the closest host components. 55572 // There's no need to search deeper because for the purpose of giving 55573 // visual feedback, "flashing" outermost parent rectangles is sufficient. 55574 findHostInstancesForFiberShallowly(fiber, hostInstances); 55575 } else { 55576 // If there's no match, maybe there will be one further down in the child tree. 55577 if (child !== null) { 55578 findHostInstancesForMatchingFibersRecursively(child, types, hostInstances); 55579 } 55580 } 55581 55582 if (sibling !== null) { 55583 findHostInstancesForMatchingFibersRecursively(sibling, types, hostInstances); 55584 } 55585 } 55586} 55587 55588function findHostInstancesForFiberShallowly(fiber, hostInstances) { 55589 { 55590 var foundHostInstances = findChildHostInstancesForFiberShallowly(fiber, hostInstances); 55591 55592 if (foundHostInstances) { 55593 return; 55594 } // If we didn't find any host children, fallback to closest host parent. 55595 55596 55597 var node = fiber; 55598 55599 while (true) { 55600 switch (node.tag) { 55601 case HostComponent: 55602 hostInstances.add(node.stateNode); 55603 return; 55604 55605 case HostPortal: 55606 hostInstances.add(node.stateNode.containerInfo); 55607 return; 55608 55609 case HostRoot: 55610 hostInstances.add(node.stateNode.containerInfo); 55611 return; 55612 } 55613 55614 if (node.return === null) { 55615 throw new Error('Expected to reach root first.'); 55616 } 55617 55618 node = node.return; 55619 } 55620 } 55621} 55622 55623function findChildHostInstancesForFiberShallowly(fiber, hostInstances) { 55624 { 55625 var node = fiber; 55626 var foundHostInstances = false; 55627 55628 while (true) { 55629 if (node.tag === HostComponent) { 55630 // We got a match. 55631 foundHostInstances = true; 55632 hostInstances.add(node.stateNode); // There may still be more, so keep searching. 55633 } else if (node.child !== null) { 55634 node.child.return = node; 55635 node = node.child; 55636 continue; 55637 } 55638 55639 if (node === fiber) { 55640 return foundHostInstances; 55641 } 55642 55643 while (node.sibling === null) { 55644 if (node.return === null || node.return === fiber) { 55645 return foundHostInstances; 55646 } 55647 55648 node = node.return; 55649 } 55650 55651 node.sibling.return = node.return; 55652 node = node.sibling; 55653 } 55654 } 55655 55656 return false; 55657} 55658 55659var hasBadMapPolyfill; 55660 55661{ 55662 hasBadMapPolyfill = false; 55663 55664 try { 55665 var nonExtensibleObject = Object.preventExtensions({}); 55666 /* eslint-disable no-new */ 55667 55668 new Map([[nonExtensibleObject, null]]); 55669 new Set([nonExtensibleObject]); 55670 /* eslint-enable no-new */ 55671 } catch (e) { 55672 // TODO: Consider warning about bad polyfills 55673 hasBadMapPolyfill = true; 55674 } 55675} 55676 55677var debugCounter = 1; 55678 55679function FiberNode(tag, pendingProps, key, mode) { 55680 // Instance 55681 this.tag = tag; 55682 this.key = key; 55683 this.elementType = null; 55684 this.type = null; 55685 this.stateNode = null; // Fiber 55686 55687 this.return = null; 55688 this.child = null; 55689 this.sibling = null; 55690 this.index = 0; 55691 this.ref = null; 55692 this.pendingProps = pendingProps; 55693 this.memoizedProps = null; 55694 this.updateQueue = null; 55695 this.memoizedState = null; 55696 this.dependencies = null; 55697 this.mode = mode; // Effects 55698 55699 this.flags = NoFlags; 55700 this.nextEffect = null; 55701 this.firstEffect = null; 55702 this.lastEffect = null; 55703 this.lanes = NoLanes; 55704 this.childLanes = NoLanes; 55705 this.alternate = null; 55706 55707 { 55708 // Note: The following is done to avoid a v8 performance cliff. 55709 // 55710 // Initializing the fields below to smis and later updating them with 55711 // double values will cause Fibers to end up having separate shapes. 55712 // This behavior/bug has something to do with Object.preventExtension(). 55713 // Fortunately this only impacts DEV builds. 55714 // Unfortunately it makes React unusably slow for some applications. 55715 // To work around this, initialize the fields below with doubles. 55716 // 55717 // Learn more about this here: 55718 // https://github.com/facebook/react/issues/14365 55719 // https://bugs.chromium.org/p/v8/issues/detail?id=8538 55720 this.actualDuration = Number.NaN; 55721 this.actualStartTime = Number.NaN; 55722 this.selfBaseDuration = Number.NaN; 55723 this.treeBaseDuration = Number.NaN; // It's okay to replace the initial doubles with smis after initialization. 55724 // This won't trigger the performance cliff mentioned above, 55725 // and it simplifies other profiler code (including DevTools). 55726 55727 this.actualDuration = 0; 55728 this.actualStartTime = -1; 55729 this.selfBaseDuration = 0; 55730 this.treeBaseDuration = 0; 55731 } 55732 55733 { 55734 // This isn't directly used but is handy for debugging internals: 55735 this._debugID = debugCounter++; 55736 this._debugSource = null; 55737 this._debugOwner = null; 55738 this._debugNeedsRemount = false; 55739 this._debugHookTypes = null; 55740 55741 if (!hasBadMapPolyfill && typeof Object.preventExtensions === 'function') { 55742 Object.preventExtensions(this); 55743 } 55744 } 55745} // This is a constructor function, rather than a POJO constructor, still 55746// please ensure we do the following: 55747// 1) Nobody should add any instance methods on this. Instance methods can be 55748// more difficult to predict when they get optimized and they are almost 55749// never inlined properly in static compilers. 55750// 2) Nobody should rely on `instanceof Fiber` for type testing. We should 55751// always know when it is a fiber. 55752// 3) We might want to experiment with using numeric keys since they are easier 55753// to optimize in a non-JIT environment. 55754// 4) We can easily go from a constructor to a createFiber object literal if that 55755// is faster. 55756// 5) It should be easy to port this to a C struct and keep a C implementation 55757// compatible. 55758 55759 55760var createFiber = function (tag, pendingProps, key, mode) { 55761 // $FlowFixMe: the shapes are exact here but Flow doesn't like constructors 55762 return new FiberNode(tag, pendingProps, key, mode); 55763}; 55764 55765function shouldConstruct$1(Component) { 55766 var prototype = Component.prototype; 55767 return !!(prototype && prototype.isReactComponent); 55768} 55769 55770function isSimpleFunctionComponent(type) { 55771 return typeof type === 'function' && !shouldConstruct$1(type) && type.defaultProps === undefined; 55772} 55773function resolveLazyComponentTag(Component) { 55774 if (typeof Component === 'function') { 55775 return shouldConstruct$1(Component) ? ClassComponent : FunctionComponent; 55776 } else if (Component !== undefined && Component !== null) { 55777 var $$typeof = Component.$$typeof; 55778 55779 if ($$typeof === REACT_FORWARD_REF_TYPE) { 55780 return ForwardRef; 55781 } 55782 55783 if ($$typeof === REACT_MEMO_TYPE) { 55784 return MemoComponent; 55785 } 55786 } 55787 55788 return IndeterminateComponent; 55789} // This is used to create an alternate fiber to do work on. 55790 55791function createWorkInProgress(current, pendingProps) { 55792 var workInProgress = current.alternate; 55793 55794 if (workInProgress === null) { 55795 // We use a double buffering pooling technique because we know that we'll 55796 // only ever need at most two versions of a tree. We pool the "other" unused 55797 // node that we're free to reuse. This is lazily created to avoid allocating 55798 // extra objects for things that are never updated. It also allow us to 55799 // reclaim the extra memory if needed. 55800 workInProgress = createFiber(current.tag, pendingProps, current.key, current.mode); 55801 workInProgress.elementType = current.elementType; 55802 workInProgress.type = current.type; 55803 workInProgress.stateNode = current.stateNode; 55804 55805 { 55806 // DEV-only fields 55807 workInProgress._debugID = current._debugID; 55808 workInProgress._debugSource = current._debugSource; 55809 workInProgress._debugOwner = current._debugOwner; 55810 workInProgress._debugHookTypes = current._debugHookTypes; 55811 } 55812 55813 workInProgress.alternate = current; 55814 current.alternate = workInProgress; 55815 } else { 55816 workInProgress.pendingProps = pendingProps; // Needed because Blocks store data on type. 55817 55818 workInProgress.type = current.type; // We already have an alternate. 55819 // Reset the effect tag. 55820 55821 workInProgress.flags = NoFlags; // The effect list is no longer valid. 55822 55823 workInProgress.nextEffect = null; 55824 workInProgress.firstEffect = null; 55825 workInProgress.lastEffect = null; 55826 55827 { 55828 // We intentionally reset, rather than copy, actualDuration & actualStartTime. 55829 // This prevents time from endlessly accumulating in new commits. 55830 // This has the downside of resetting values for different priority renders, 55831 // But works for yielding (the common case) and should support resuming. 55832 workInProgress.actualDuration = 0; 55833 workInProgress.actualStartTime = -1; 55834 } 55835 } 55836 55837 workInProgress.childLanes = current.childLanes; 55838 workInProgress.lanes = current.lanes; 55839 workInProgress.child = current.child; 55840 workInProgress.memoizedProps = current.memoizedProps; 55841 workInProgress.memoizedState = current.memoizedState; 55842 workInProgress.updateQueue = current.updateQueue; // Clone the dependencies object. This is mutated during the render phase, so 55843 // it cannot be shared with the current fiber. 55844 55845 var currentDependencies = current.dependencies; 55846 workInProgress.dependencies = currentDependencies === null ? null : { 55847 lanes: currentDependencies.lanes, 55848 firstContext: currentDependencies.firstContext 55849 }; // These will be overridden during the parent's reconciliation 55850 55851 workInProgress.sibling = current.sibling; 55852 workInProgress.index = current.index; 55853 workInProgress.ref = current.ref; 55854 55855 { 55856 workInProgress.selfBaseDuration = current.selfBaseDuration; 55857 workInProgress.treeBaseDuration = current.treeBaseDuration; 55858 } 55859 55860 { 55861 workInProgress._debugNeedsRemount = current._debugNeedsRemount; 55862 55863 switch (workInProgress.tag) { 55864 case IndeterminateComponent: 55865 case FunctionComponent: 55866 case SimpleMemoComponent: 55867 workInProgress.type = resolveFunctionForHotReloading(current.type); 55868 break; 55869 55870 case ClassComponent: 55871 workInProgress.type = resolveClassForHotReloading(current.type); 55872 break; 55873 55874 case ForwardRef: 55875 workInProgress.type = resolveForwardRefForHotReloading(current.type); 55876 break; 55877 } 55878 } 55879 55880 return workInProgress; 55881} // Used to reuse a Fiber for a second pass. 55882 55883function resetWorkInProgress(workInProgress, renderLanes) { 55884 // This resets the Fiber to what createFiber or createWorkInProgress would 55885 // have set the values to before during the first pass. Ideally this wouldn't 55886 // be necessary but unfortunately many code paths reads from the workInProgress 55887 // when they should be reading from current and writing to workInProgress. 55888 // We assume pendingProps, index, key, ref, return are still untouched to 55889 // avoid doing another reconciliation. 55890 // Reset the effect tag but keep any Placement tags, since that's something 55891 // that child fiber is setting, not the reconciliation. 55892 workInProgress.flags &= Placement; // The effect list is no longer valid. 55893 55894 workInProgress.nextEffect = null; 55895 workInProgress.firstEffect = null; 55896 workInProgress.lastEffect = null; 55897 var current = workInProgress.alternate; 55898 55899 if (current === null) { 55900 // Reset to createFiber's initial values. 55901 workInProgress.childLanes = NoLanes; 55902 workInProgress.lanes = renderLanes; 55903 workInProgress.child = null; 55904 workInProgress.memoizedProps = null; 55905 workInProgress.memoizedState = null; 55906 workInProgress.updateQueue = null; 55907 workInProgress.dependencies = null; 55908 workInProgress.stateNode = null; 55909 55910 { 55911 // Note: We don't reset the actualTime counts. It's useful to accumulate 55912 // actual time across multiple render passes. 55913 workInProgress.selfBaseDuration = 0; 55914 workInProgress.treeBaseDuration = 0; 55915 } 55916 } else { 55917 // Reset to the cloned values that createWorkInProgress would've. 55918 workInProgress.childLanes = current.childLanes; 55919 workInProgress.lanes = current.lanes; 55920 workInProgress.child = current.child; 55921 workInProgress.memoizedProps = current.memoizedProps; 55922 workInProgress.memoizedState = current.memoizedState; 55923 workInProgress.updateQueue = current.updateQueue; // Needed because Blocks store data on type. 55924 55925 workInProgress.type = current.type; // Clone the dependencies object. This is mutated during the render phase, so 55926 // it cannot be shared with the current fiber. 55927 55928 var currentDependencies = current.dependencies; 55929 workInProgress.dependencies = currentDependencies === null ? null : { 55930 lanes: currentDependencies.lanes, 55931 firstContext: currentDependencies.firstContext 55932 }; 55933 55934 { 55935 // Note: We don't reset the actualTime counts. It's useful to accumulate 55936 // actual time across multiple render passes. 55937 workInProgress.selfBaseDuration = current.selfBaseDuration; 55938 workInProgress.treeBaseDuration = current.treeBaseDuration; 55939 } 55940 } 55941 55942 return workInProgress; 55943} 55944function createHostRootFiber(tag) { 55945 var mode; 55946 55947 if (tag === ConcurrentRoot) { 55948 mode = ConcurrentMode | BlockingMode | StrictMode; 55949 } else if (tag === BlockingRoot) { 55950 mode = BlockingMode | StrictMode; 55951 } else { 55952 mode = NoMode; 55953 } 55954 55955 if ( isDevToolsPresent) { 55956 // Always collect profile timings when DevTools are present. 55957 // This enables DevTools to start capturing timing at any pointâ 55958 // Without some nodes in the tree having empty base times. 55959 mode |= ProfileMode; 55960 } 55961 55962 return createFiber(HostRoot, null, null, mode); 55963} 55964function createFiberFromTypeAndProps(type, // React$ElementType 55965key, pendingProps, owner, mode, lanes) { 55966 var fiberTag = IndeterminateComponent; // The resolved type is set if we know what the final type will be. I.e. it's not lazy. 55967 55968 var resolvedType = type; 55969 55970 if (typeof type === 'function') { 55971 if (shouldConstruct$1(type)) { 55972 fiberTag = ClassComponent; 55973 55974 { 55975 resolvedType = resolveClassForHotReloading(resolvedType); 55976 } 55977 } else { 55978 { 55979 resolvedType = resolveFunctionForHotReloading(resolvedType); 55980 } 55981 } 55982 } else if (typeof type === 'string') { 55983 fiberTag = HostComponent; 55984 } else { 55985 getTag: switch (type) { 55986 case REACT_FRAGMENT_TYPE: 55987 return createFiberFromFragment(pendingProps.children, mode, lanes, key); 55988 55989 case REACT_DEBUG_TRACING_MODE_TYPE: 55990 fiberTag = Mode; 55991 mode |= DebugTracingMode; 55992 break; 55993 55994 case REACT_STRICT_MODE_TYPE: 55995 fiberTag = Mode; 55996 mode |= StrictMode; 55997 break; 55998 55999 case REACT_PROFILER_TYPE: 56000 return createFiberFromProfiler(pendingProps, mode, lanes, key); 56001 56002 case REACT_SUSPENSE_TYPE: 56003 return createFiberFromSuspense(pendingProps, mode, lanes, key); 56004 56005 case REACT_SUSPENSE_LIST_TYPE: 56006 return createFiberFromSuspenseList(pendingProps, mode, lanes, key); 56007 56008 case REACT_OFFSCREEN_TYPE: 56009 return createFiberFromOffscreen(pendingProps, mode, lanes, key); 56010 56011 case REACT_LEGACY_HIDDEN_TYPE: 56012 return createFiberFromLegacyHidden(pendingProps, mode, lanes, key); 56013 56014 case REACT_SCOPE_TYPE: 56015 56016 // eslint-disable-next-line no-fallthrough 56017 56018 default: 56019 { 56020 if (typeof type === 'object' && type !== null) { 56021 switch (type.$$typeof) { 56022 case REACT_PROVIDER_TYPE: 56023 fiberTag = ContextProvider; 56024 break getTag; 56025 56026 case REACT_CONTEXT_TYPE: 56027 // This is a consumer 56028 fiberTag = ContextConsumer; 56029 break getTag; 56030 56031 case REACT_FORWARD_REF_TYPE: 56032 fiberTag = ForwardRef; 56033 56034 { 56035 resolvedType = resolveForwardRefForHotReloading(resolvedType); 56036 } 56037 56038 break getTag; 56039 56040 case REACT_MEMO_TYPE: 56041 fiberTag = MemoComponent; 56042 break getTag; 56043 56044 case REACT_LAZY_TYPE: 56045 fiberTag = LazyComponent; 56046 resolvedType = null; 56047 break getTag; 56048 56049 case REACT_BLOCK_TYPE: 56050 fiberTag = Block; 56051 break getTag; 56052 } 56053 } 56054 56055 var info = ''; 56056 56057 { 56058 if (type === undefined || typeof type === 'object' && type !== null && Object.keys(type).length === 0) { 56059 info += ' You likely forgot to export your component from the file ' + "it's defined in, or you might have mixed up default and " + 'named imports.'; 56060 } 56061 56062 var ownerName = owner ? getComponentName(owner.type) : null; 56063 56064 if (ownerName) { 56065 info += '\n\nCheck the render method of `' + ownerName + '`.'; 56066 } 56067 } 56068 56069 { 56070 { 56071 throw Error( "Element type is invalid: expected a string (for built-in components) or a class/function (for composite components) but got: " + (type == null ? type : typeof type) + "." + info ); 56072 } 56073 } 56074 } 56075 } 56076 } 56077 56078 var fiber = createFiber(fiberTag, pendingProps, key, mode); 56079 fiber.elementType = type; 56080 fiber.type = resolvedType; 56081 fiber.lanes = lanes; 56082 56083 { 56084 fiber._debugOwner = owner; 56085 } 56086 56087 return fiber; 56088} 56089function createFiberFromElement(element, mode, lanes) { 56090 var owner = null; 56091 56092 { 56093 owner = element._owner; 56094 } 56095 56096 var type = element.type; 56097 var key = element.key; 56098 var pendingProps = element.props; 56099 var fiber = createFiberFromTypeAndProps(type, key, pendingProps, owner, mode, lanes); 56100 56101 { 56102 fiber._debugSource = element._source; 56103 fiber._debugOwner = element._owner; 56104 } 56105 56106 return fiber; 56107} 56108function createFiberFromFragment(elements, mode, lanes, key) { 56109 var fiber = createFiber(Fragment, elements, key, mode); 56110 fiber.lanes = lanes; 56111 return fiber; 56112} 56113 56114function createFiberFromProfiler(pendingProps, mode, lanes, key) { 56115 { 56116 if (typeof pendingProps.id !== 'string') { 56117 error('Profiler must specify an "id" as a prop'); 56118 } 56119 } 56120 56121 var fiber = createFiber(Profiler, pendingProps, key, mode | ProfileMode); // TODO: The Profiler fiber shouldn't have a type. It has a tag. 56122 56123 fiber.elementType = REACT_PROFILER_TYPE; 56124 fiber.type = REACT_PROFILER_TYPE; 56125 fiber.lanes = lanes; 56126 56127 { 56128 fiber.stateNode = { 56129 effectDuration: 0, 56130 passiveEffectDuration: 0 56131 }; 56132 } 56133 56134 return fiber; 56135} 56136 56137function createFiberFromSuspense(pendingProps, mode, lanes, key) { 56138 var fiber = createFiber(SuspenseComponent, pendingProps, key, mode); // TODO: The SuspenseComponent fiber shouldn't have a type. It has a tag. 56139 // This needs to be fixed in getComponentName so that it relies on the tag 56140 // instead. 56141 56142 fiber.type = REACT_SUSPENSE_TYPE; 56143 fiber.elementType = REACT_SUSPENSE_TYPE; 56144 fiber.lanes = lanes; 56145 return fiber; 56146} 56147function createFiberFromSuspenseList(pendingProps, mode, lanes, key) { 56148 var fiber = createFiber(SuspenseListComponent, pendingProps, key, mode); 56149 56150 { 56151 // TODO: The SuspenseListComponent fiber shouldn't have a type. It has a tag. 56152 // This needs to be fixed in getComponentName so that it relies on the tag 56153 // instead. 56154 fiber.type = REACT_SUSPENSE_LIST_TYPE; 56155 } 56156 56157 fiber.elementType = REACT_SUSPENSE_LIST_TYPE; 56158 fiber.lanes = lanes; 56159 return fiber; 56160} 56161function createFiberFromOffscreen(pendingProps, mode, lanes, key) { 56162 var fiber = createFiber(OffscreenComponent, pendingProps, key, mode); // TODO: The OffscreenComponent fiber shouldn't have a type. It has a tag. 56163 // This needs to be fixed in getComponentName so that it relies on the tag 56164 // instead. 56165 56166 { 56167 fiber.type = REACT_OFFSCREEN_TYPE; 56168 } 56169 56170 fiber.elementType = REACT_OFFSCREEN_TYPE; 56171 fiber.lanes = lanes; 56172 return fiber; 56173} 56174function createFiberFromLegacyHidden(pendingProps, mode, lanes, key) { 56175 var fiber = createFiber(LegacyHiddenComponent, pendingProps, key, mode); // TODO: The LegacyHidden fiber shouldn't have a type. It has a tag. 56176 // This needs to be fixed in getComponentName so that it relies on the tag 56177 // instead. 56178 56179 { 56180 fiber.type = REACT_LEGACY_HIDDEN_TYPE; 56181 } 56182 56183 fiber.elementType = REACT_LEGACY_HIDDEN_TYPE; 56184 fiber.lanes = lanes; 56185 return fiber; 56186} 56187function createFiberFromText(content, mode, lanes) { 56188 var fiber = createFiber(HostText, content, null, mode); 56189 fiber.lanes = lanes; 56190 return fiber; 56191} 56192function createFiberFromHostInstanceForDeletion() { 56193 var fiber = createFiber(HostComponent, null, null, NoMode); // TODO: These should not need a type. 56194 56195 fiber.elementType = 'DELETED'; 56196 fiber.type = 'DELETED'; 56197 return fiber; 56198} 56199function createFiberFromPortal(portal, mode, lanes) { 56200 var pendingProps = portal.children !== null ? portal.children : []; 56201 var fiber = createFiber(HostPortal, pendingProps, portal.key, mode); 56202 fiber.lanes = lanes; 56203 fiber.stateNode = { 56204 containerInfo: portal.containerInfo, 56205 pendingChildren: null, 56206 // Used by persistent updates 56207 implementation: portal.implementation 56208 }; 56209 return fiber; 56210} // Used for stashing WIP properties to replay failed work in DEV. 56211 56212function assignFiberPropertiesInDEV(target, source) { 56213 if (target === null) { 56214 // This Fiber's initial properties will always be overwritten. 56215 // We only use a Fiber to ensure the same hidden class so DEV isn't slow. 56216 target = createFiber(IndeterminateComponent, null, null, NoMode); 56217 } // This is intentionally written as a list of all properties. 56218 // We tried to use Object.assign() instead but this is called in 56219 // the hottest path, and Object.assign() was too slow: 56220 // https://github.com/facebook/react/issues/12502 56221 // This code is DEV-only so size is not a concern. 56222 56223 56224 target.tag = source.tag; 56225 target.key = source.key; 56226 target.elementType = source.elementType; 56227 target.type = source.type; 56228 target.stateNode = source.stateNode; 56229 target.return = source.return; 56230 target.child = source.child; 56231 target.sibling = source.sibling; 56232 target.index = source.index; 56233 target.ref = source.ref; 56234 target.pendingProps = source.pendingProps; 56235 target.memoizedProps = source.memoizedProps; 56236 target.updateQueue = source.updateQueue; 56237 target.memoizedState = source.memoizedState; 56238 target.dependencies = source.dependencies; 56239 target.mode = source.mode; 56240 target.flags = source.flags; 56241 target.nextEffect = source.nextEffect; 56242 target.firstEffect = source.firstEffect; 56243 target.lastEffect = source.lastEffect; 56244 target.lanes = source.lanes; 56245 target.childLanes = source.childLanes; 56246 target.alternate = source.alternate; 56247 56248 { 56249 target.actualDuration = source.actualDuration; 56250 target.actualStartTime = source.actualStartTime; 56251 target.selfBaseDuration = source.selfBaseDuration; 56252 target.treeBaseDuration = source.treeBaseDuration; 56253 } 56254 56255 target._debugID = source._debugID; 56256 target._debugSource = source._debugSource; 56257 target._debugOwner = source._debugOwner; 56258 target._debugNeedsRemount = source._debugNeedsRemount; 56259 target._debugHookTypes = source._debugHookTypes; 56260 return target; 56261} 56262 56263function FiberRootNode(containerInfo, tag, hydrate) { 56264 this.tag = tag; 56265 this.containerInfo = containerInfo; 56266 this.pendingChildren = null; 56267 this.current = null; 56268 this.pingCache = null; 56269 this.finishedWork = null; 56270 this.timeoutHandle = noTimeout; 56271 this.context = null; 56272 this.pendingContext = null; 56273 this.hydrate = hydrate; 56274 this.callbackNode = null; 56275 this.callbackPriority = NoLanePriority; 56276 this.eventTimes = createLaneMap(NoLanes); 56277 this.expirationTimes = createLaneMap(NoTimestamp); 56278 this.pendingLanes = NoLanes; 56279 this.suspendedLanes = NoLanes; 56280 this.pingedLanes = NoLanes; 56281 this.expiredLanes = NoLanes; 56282 this.mutableReadLanes = NoLanes; 56283 this.finishedLanes = NoLanes; 56284 this.entangledLanes = NoLanes; 56285 this.entanglements = createLaneMap(NoLanes); 56286 56287 { 56288 this.mutableSourceEagerHydrationData = null; 56289 } 56290 56291 { 56292 this.interactionThreadID = tracing.unstable_getThreadID(); 56293 this.memoizedInteractions = new Set(); 56294 this.pendingInteractionMap = new Map(); 56295 } 56296 56297 { 56298 switch (tag) { 56299 case BlockingRoot: 56300 this._debugRootType = 'createBlockingRoot()'; 56301 break; 56302 56303 case ConcurrentRoot: 56304 this._debugRootType = 'createRoot()'; 56305 break; 56306 56307 case LegacyRoot: 56308 this._debugRootType = 'createLegacyRoot()'; 56309 break; 56310 } 56311 } 56312} 56313 56314function createFiberRoot(containerInfo, tag, hydrate, hydrationCallbacks) { 56315 var root = new FiberRootNode(containerInfo, tag, hydrate); 56316 // stateNode is any. 56317 56318 56319 var uninitializedFiber = createHostRootFiber(tag); 56320 root.current = uninitializedFiber; 56321 uninitializedFiber.stateNode = root; 56322 initializeUpdateQueue(uninitializedFiber); 56323 return root; 56324} 56325 56326// This ensures that the version used for server rendering matches the one 56327// that is eventually read during hydration. 56328// If they don't match there's a potential tear and a full deopt render is required. 56329 56330function registerMutableSourceForHydration(root, mutableSource) { 56331 var getVersion = mutableSource._getVersion; 56332 var version = getVersion(mutableSource._source); // TODO Clear this data once all pending hydration work is finished. 56333 // Retaining it forever may interfere with GC. 56334 56335 if (root.mutableSourceEagerHydrationData == null) { 56336 root.mutableSourceEagerHydrationData = [mutableSource, version]; 56337 } else { 56338 root.mutableSourceEagerHydrationData.push(mutableSource, version); 56339 } 56340} 56341 56342function createPortal(children, containerInfo, // TODO: figure out the API for cross-renderer implementation. 56343implementation) { 56344 var key = arguments.length > 3 && arguments[3] !== undefined ? arguments[3] : null; 56345 return { 56346 // This tag allow us to uniquely identify this as a React Portal 56347 $$typeof: REACT_PORTAL_TYPE, 56348 key: key == null ? null : '' + key, 56349 children: children, 56350 containerInfo: containerInfo, 56351 implementation: implementation 56352 }; 56353} 56354 56355var didWarnAboutNestedUpdates; 56356var didWarnAboutFindNodeInStrictMode; 56357 56358{ 56359 didWarnAboutNestedUpdates = false; 56360 didWarnAboutFindNodeInStrictMode = {}; 56361} 56362 56363function getContextForSubtree(parentComponent) { 56364 if (!parentComponent) { 56365 return emptyContextObject; 56366 } 56367 56368 var fiber = get(parentComponent); 56369 var parentContext = findCurrentUnmaskedContext(fiber); 56370 56371 if (fiber.tag === ClassComponent) { 56372 var Component = fiber.type; 56373 56374 if (isContextProvider(Component)) { 56375 return processChildContext(fiber, Component, parentContext); 56376 } 56377 } 56378 56379 return parentContext; 56380} 56381 56382function findHostInstanceWithWarning(component, methodName) { 56383 { 56384 var fiber = get(component); 56385 56386 if (fiber === undefined) { 56387 if (typeof component.render === 'function') { 56388 { 56389 { 56390 throw Error( "Unable to find node on an unmounted component." ); 56391 } 56392 } 56393 } else { 56394 { 56395 { 56396 throw Error( "Argument appears to not be a ReactComponent. Keys: " + Object.keys(component) ); 56397 } 56398 } 56399 } 56400 } 56401 56402 var hostFiber = findCurrentHostFiber(fiber); 56403 56404 if (hostFiber === null) { 56405 return null; 56406 } 56407 56408 if (hostFiber.mode & StrictMode) { 56409 var componentName = getComponentName(fiber.type) || 'Component'; 56410 56411 if (!didWarnAboutFindNodeInStrictMode[componentName]) { 56412 didWarnAboutFindNodeInStrictMode[componentName] = true; 56413 var previousFiber = current; 56414 56415 try { 56416 setCurrentFiber(hostFiber); 56417 56418 if (fiber.mode & StrictMode) { 56419 error('%s is deprecated in StrictMode. ' + '%s was passed an instance of %s which is inside StrictMode. ' + 'Instead, add a ref directly to the element you want to reference. ' + 'Learn more about using refs safely here: ' + 'https://reactjs.org/link/strict-mode-find-node', methodName, methodName, componentName); 56420 } else { 56421 error('%s is deprecated in StrictMode. ' + '%s was passed an instance of %s which renders StrictMode children. ' + 'Instead, add a ref directly to the element you want to reference. ' + 'Learn more about using refs safely here: ' + 'https://reactjs.org/link/strict-mode-find-node', methodName, methodName, componentName); 56422 } 56423 } finally { 56424 // Ideally this should reset to previous but this shouldn't be called in 56425 // render and there's another warning for that anyway. 56426 if (previousFiber) { 56427 setCurrentFiber(previousFiber); 56428 } else { 56429 resetCurrentFiber(); 56430 } 56431 } 56432 } 56433 } 56434 56435 return hostFiber.stateNode; 56436 } 56437} 56438 56439function createContainer(containerInfo, tag, hydrate, hydrationCallbacks) { 56440 return createFiberRoot(containerInfo, tag, hydrate); 56441} 56442function updateContainer(element, container, parentComponent, callback) { 56443 { 56444 onScheduleRoot(container, element); 56445 } 56446 56447 var current$1 = container.current; 56448 var eventTime = requestEventTime(); 56449 56450 { 56451 // $FlowExpectedError - jest isn't a global, and isn't recognized outside of tests 56452 if ('undefined' !== typeof jest) { 56453 warnIfUnmockedScheduler(current$1); 56454 warnIfNotScopedWithMatchingAct(current$1); 56455 } 56456 } 56457 56458 var lane = requestUpdateLane(current$1); 56459 56460 var context = getContextForSubtree(parentComponent); 56461 56462 if (container.context === null) { 56463 container.context = context; 56464 } else { 56465 container.pendingContext = context; 56466 } 56467 56468 { 56469 if (isRendering && current !== null && !didWarnAboutNestedUpdates) { 56470 didWarnAboutNestedUpdates = true; 56471 56472 error('Render methods should be a pure function of props and state; ' + 'triggering nested component updates from render is not allowed. ' + 'If necessary, trigger nested updates in componentDidUpdate.\n\n' + 'Check the render method of %s.', getComponentName(current.type) || 'Unknown'); 56473 } 56474 } 56475 56476 var update = createUpdate(eventTime, lane); // Caution: React DevTools currently depends on this property 56477 // being called "element". 56478 56479 update.payload = { 56480 element: element 56481 }; 56482 callback = callback === undefined ? null : callback; 56483 56484 if (callback !== null) { 56485 { 56486 if (typeof callback !== 'function') { 56487 error('render(...): Expected the last optional `callback` argument to be a ' + 'function. Instead received: %s.', callback); 56488 } 56489 } 56490 56491 update.callback = callback; 56492 } 56493 56494 enqueueUpdate(current$1, update); 56495 scheduleUpdateOnFiber(current$1, lane, eventTime); 56496 return lane; 56497} 56498function getPublicRootInstance(container) { 56499 var containerFiber = container.current; 56500 56501 if (!containerFiber.child) { 56502 return null; 56503 } 56504 56505 switch (containerFiber.child.tag) { 56506 case HostComponent: 56507 return getPublicInstance(containerFiber.child.stateNode); 56508 56509 default: 56510 return containerFiber.child.stateNode; 56511 } 56512} 56513 56514function markRetryLaneImpl(fiber, retryLane) { 56515 var suspenseState = fiber.memoizedState; 56516 56517 if (suspenseState !== null && suspenseState.dehydrated !== null) { 56518 suspenseState.retryLane = higherPriorityLane(suspenseState.retryLane, retryLane); 56519 } 56520} // Increases the priority of thennables when they resolve within this boundary. 56521 56522 56523function markRetryLaneIfNotHydrated(fiber, retryLane) { 56524 markRetryLaneImpl(fiber, retryLane); 56525 var alternate = fiber.alternate; 56526 56527 if (alternate) { 56528 markRetryLaneImpl(alternate, retryLane); 56529 } 56530} 56531 56532function attemptUserBlockingHydration$1(fiber) { 56533 if (fiber.tag !== SuspenseComponent) { 56534 // We ignore HostRoots here because we can't increase 56535 // their priority and they should not suspend on I/O, 56536 // since you have to wrap anything that might suspend in 56537 // Suspense. 56538 return; 56539 } 56540 56541 var eventTime = requestEventTime(); 56542 var lane = InputDiscreteHydrationLane; 56543 scheduleUpdateOnFiber(fiber, lane, eventTime); 56544 markRetryLaneIfNotHydrated(fiber, lane); 56545} 56546function attemptContinuousHydration$1(fiber) { 56547 if (fiber.tag !== SuspenseComponent) { 56548 // We ignore HostRoots here because we can't increase 56549 // their priority and they should not suspend on I/O, 56550 // since you have to wrap anything that might suspend in 56551 // Suspense. 56552 return; 56553 } 56554 56555 var eventTime = requestEventTime(); 56556 var lane = SelectiveHydrationLane; 56557 scheduleUpdateOnFiber(fiber, lane, eventTime); 56558 markRetryLaneIfNotHydrated(fiber, lane); 56559} 56560function attemptHydrationAtCurrentPriority$1(fiber) { 56561 if (fiber.tag !== SuspenseComponent) { 56562 // We ignore HostRoots here because we can't increase 56563 // their priority other than synchronously flush it. 56564 return; 56565 } 56566 56567 var eventTime = requestEventTime(); 56568 var lane = requestUpdateLane(fiber); 56569 scheduleUpdateOnFiber(fiber, lane, eventTime); 56570 markRetryLaneIfNotHydrated(fiber, lane); 56571} 56572function runWithPriority$2(priority, fn) { 56573 56574 try { 56575 setCurrentUpdateLanePriority(priority); 56576 return fn(); 56577 } finally { 56578 } 56579} 56580function findHostInstanceWithNoPortals(fiber) { 56581 var hostFiber = findCurrentHostFiberWithNoPortals(fiber); 56582 56583 if (hostFiber === null) { 56584 return null; 56585 } 56586 56587 if (hostFiber.tag === FundamentalComponent) { 56588 return hostFiber.stateNode.instance; 56589 } 56590 56591 return hostFiber.stateNode; 56592} 56593 56594var shouldSuspendImpl = function (fiber) { 56595 return false; 56596}; 56597 56598function shouldSuspend(fiber) { 56599 return shouldSuspendImpl(fiber); 56600} 56601var overrideHookState = null; 56602var overrideHookStateDeletePath = null; 56603var overrideHookStateRenamePath = null; 56604var overrideProps = null; 56605var overridePropsDeletePath = null; 56606var overridePropsRenamePath = null; 56607var scheduleUpdate = null; 56608var setSuspenseHandler = null; 56609 56610{ 56611 var copyWithDeleteImpl = function (obj, path, index) { 56612 var key = path[index]; 56613 var updated = Array.isArray(obj) ? obj.slice() : _assign({}, obj); 56614 56615 if (index + 1 === path.length) { 56616 if (Array.isArray(updated)) { 56617 updated.splice(key, 1); 56618 } else { 56619 delete updated[key]; 56620 } 56621 56622 return updated; 56623 } // $FlowFixMe number or string is fine here 56624 56625 56626 updated[key] = copyWithDeleteImpl(obj[key], path, index + 1); 56627 return updated; 56628 }; 56629 56630 var copyWithDelete = function (obj, path) { 56631 return copyWithDeleteImpl(obj, path, 0); 56632 }; 56633 56634 var copyWithRenameImpl = function (obj, oldPath, newPath, index) { 56635 var oldKey = oldPath[index]; 56636 var updated = Array.isArray(obj) ? obj.slice() : _assign({}, obj); 56637 56638 if (index + 1 === oldPath.length) { 56639 var newKey = newPath[index]; // $FlowFixMe number or string is fine here 56640 56641 updated[newKey] = updated[oldKey]; 56642 56643 if (Array.isArray(updated)) { 56644 updated.splice(oldKey, 1); 56645 } else { 56646 delete updated[oldKey]; 56647 } 56648 } else { 56649 // $FlowFixMe number or string is fine here 56650 updated[oldKey] = copyWithRenameImpl( // $FlowFixMe number or string is fine here 56651 obj[oldKey], oldPath, newPath, index + 1); 56652 } 56653 56654 return updated; 56655 }; 56656 56657 var copyWithRename = function (obj, oldPath, newPath) { 56658 if (oldPath.length !== newPath.length) { 56659 warn('copyWithRename() expects paths of the same length'); 56660 56661 return; 56662 } else { 56663 for (var i = 0; i < newPath.length - 1; i++) { 56664 if (oldPath[i] !== newPath[i]) { 56665 warn('copyWithRename() expects paths to be the same except for the deepest key'); 56666 56667 return; 56668 } 56669 } 56670 } 56671 56672 return copyWithRenameImpl(obj, oldPath, newPath, 0); 56673 }; 56674 56675 var copyWithSetImpl = function (obj, path, index, value) { 56676 if (index >= path.length) { 56677 return value; 56678 } 56679 56680 var key = path[index]; 56681 var updated = Array.isArray(obj) ? obj.slice() : _assign({}, obj); // $FlowFixMe number or string is fine here 56682 56683 updated[key] = copyWithSetImpl(obj[key], path, index + 1, value); 56684 return updated; 56685 }; 56686 56687 var copyWithSet = function (obj, path, value) { 56688 return copyWithSetImpl(obj, path, 0, value); 56689 }; 56690 56691 var findHook = function (fiber, id) { 56692 // For now, the "id" of stateful hooks is just the stateful hook index. 56693 // This may change in the future with e.g. nested hooks. 56694 var currentHook = fiber.memoizedState; 56695 56696 while (currentHook !== null && id > 0) { 56697 currentHook = currentHook.next; 56698 id--; 56699 } 56700 56701 return currentHook; 56702 }; // Support DevTools editable values for useState and useReducer. 56703 56704 56705 overrideHookState = function (fiber, id, path, value) { 56706 var hook = findHook(fiber, id); 56707 56708 if (hook !== null) { 56709 var newState = copyWithSet(hook.memoizedState, path, value); 56710 hook.memoizedState = newState; 56711 hook.baseState = newState; // We aren't actually adding an update to the queue, 56712 // because there is no update we can add for useReducer hooks that won't trigger an error. 56713 // (There's no appropriate action type for DevTools overrides.) 56714 // As a result though, React will see the scheduled update as a noop and bailout. 56715 // Shallow cloning props works as a workaround for now to bypass the bailout check. 56716 56717 fiber.memoizedProps = _assign({}, fiber.memoizedProps); 56718 scheduleUpdateOnFiber(fiber, SyncLane, NoTimestamp); 56719 } 56720 }; 56721 56722 overrideHookStateDeletePath = function (fiber, id, path) { 56723 var hook = findHook(fiber, id); 56724 56725 if (hook !== null) { 56726 var newState = copyWithDelete(hook.memoizedState, path); 56727 hook.memoizedState = newState; 56728 hook.baseState = newState; // We aren't actually adding an update to the queue, 56729 // because there is no update we can add for useReducer hooks that won't trigger an error. 56730 // (There's no appropriate action type for DevTools overrides.) 56731 // As a result though, React will see the scheduled update as a noop and bailout. 56732 // Shallow cloning props works as a workaround for now to bypass the bailout check. 56733 56734 fiber.memoizedProps = _assign({}, fiber.memoizedProps); 56735 scheduleUpdateOnFiber(fiber, SyncLane, NoTimestamp); 56736 } 56737 }; 56738 56739 overrideHookStateRenamePath = function (fiber, id, oldPath, newPath) { 56740 var hook = findHook(fiber, id); 56741 56742 if (hook !== null) { 56743 var newState = copyWithRename(hook.memoizedState, oldPath, newPath); 56744 hook.memoizedState = newState; 56745 hook.baseState = newState; // We aren't actually adding an update to the queue, 56746 // because there is no update we can add for useReducer hooks that won't trigger an error. 56747 // (There's no appropriate action type for DevTools overrides.) 56748 // As a result though, React will see the scheduled update as a noop and bailout. 56749 // Shallow cloning props works as a workaround for now to bypass the bailout check. 56750 56751 fiber.memoizedProps = _assign({}, fiber.memoizedProps); 56752 scheduleUpdateOnFiber(fiber, SyncLane, NoTimestamp); 56753 } 56754 }; // Support DevTools props for function components, forwardRef, memo, host components, etc. 56755 56756 56757 overrideProps = function (fiber, path, value) { 56758 fiber.pendingProps = copyWithSet(fiber.memoizedProps, path, value); 56759 56760 if (fiber.alternate) { 56761 fiber.alternate.pendingProps = fiber.pendingProps; 56762 } 56763 56764 scheduleUpdateOnFiber(fiber, SyncLane, NoTimestamp); 56765 }; 56766 56767 overridePropsDeletePath = function (fiber, path) { 56768 fiber.pendingProps = copyWithDelete(fiber.memoizedProps, path); 56769 56770 if (fiber.alternate) { 56771 fiber.alternate.pendingProps = fiber.pendingProps; 56772 } 56773 56774 scheduleUpdateOnFiber(fiber, SyncLane, NoTimestamp); 56775 }; 56776 56777 overridePropsRenamePath = function (fiber, oldPath, newPath) { 56778 fiber.pendingProps = copyWithRename(fiber.memoizedProps, oldPath, newPath); 56779 56780 if (fiber.alternate) { 56781 fiber.alternate.pendingProps = fiber.pendingProps; 56782 } 56783 56784 scheduleUpdateOnFiber(fiber, SyncLane, NoTimestamp); 56785 }; 56786 56787 scheduleUpdate = function (fiber) { 56788 scheduleUpdateOnFiber(fiber, SyncLane, NoTimestamp); 56789 }; 56790 56791 setSuspenseHandler = function (newShouldSuspendImpl) { 56792 shouldSuspendImpl = newShouldSuspendImpl; 56793 }; 56794} 56795 56796function findHostInstanceByFiber(fiber) { 56797 var hostFiber = findCurrentHostFiber(fiber); 56798 56799 if (hostFiber === null) { 56800 return null; 56801 } 56802 56803 return hostFiber.stateNode; 56804} 56805 56806function emptyFindFiberByHostInstance(instance) { 56807 return null; 56808} 56809 56810function getCurrentFiberForDevTools() { 56811 return current; 56812} 56813 56814function injectIntoDevTools(devToolsConfig) { 56815 var findFiberByHostInstance = devToolsConfig.findFiberByHostInstance; 56816 var ReactCurrentDispatcher = ReactSharedInternals.ReactCurrentDispatcher; 56817 return injectInternals({ 56818 bundleType: devToolsConfig.bundleType, 56819 version: devToolsConfig.version, 56820 rendererPackageName: devToolsConfig.rendererPackageName, 56821 rendererConfig: devToolsConfig.rendererConfig, 56822 overrideHookState: overrideHookState, 56823 overrideHookStateDeletePath: overrideHookStateDeletePath, 56824 overrideHookStateRenamePath: overrideHookStateRenamePath, 56825 overrideProps: overrideProps, 56826 overridePropsDeletePath: overridePropsDeletePath, 56827 overridePropsRenamePath: overridePropsRenamePath, 56828 setSuspenseHandler: setSuspenseHandler, 56829 scheduleUpdate: scheduleUpdate, 56830 currentDispatcherRef: ReactCurrentDispatcher, 56831 findHostInstanceByFiber: findHostInstanceByFiber, 56832 findFiberByHostInstance: findFiberByHostInstance || emptyFindFiberByHostInstance, 56833 // React Refresh 56834 findHostInstancesForRefresh: findHostInstancesForRefresh , 56835 scheduleRefresh: scheduleRefresh , 56836 scheduleRoot: scheduleRoot , 56837 setRefreshHandler: setRefreshHandler , 56838 // Enables DevTools to append owner stacks to error messages in DEV mode. 56839 getCurrentFiber: getCurrentFiberForDevTools 56840 }); 56841} 56842 56843function ReactDOMRoot(container, options) { 56844 this._internalRoot = createRootImpl(container, ConcurrentRoot, options); 56845} 56846 56847function ReactDOMBlockingRoot(container, tag, options) { 56848 this._internalRoot = createRootImpl(container, tag, options); 56849} 56850 56851ReactDOMRoot.prototype.render = ReactDOMBlockingRoot.prototype.render = function (children) { 56852 var root = this._internalRoot; 56853 56854 { 56855 if (typeof arguments[1] === 'function') { 56856 error('render(...): does not support the second callback argument. ' + 'To execute a side effect after rendering, declare it in a component body with useEffect().'); 56857 } 56858 56859 var container = root.containerInfo; 56860 56861 if (container.nodeType !== COMMENT_NODE) { 56862 var hostInstance = findHostInstanceWithNoPortals(root.current); 56863 56864 if (hostInstance) { 56865 if (hostInstance.parentNode !== container) { 56866 error('render(...): It looks like the React-rendered content of the ' + 'root container was removed without using React. This is not ' + 'supported and will cause errors. Instead, call ' + "root.unmount() to empty a root's container."); 56867 } 56868 } 56869 } 56870 } 56871 56872 updateContainer(children, root, null, null); 56873}; 56874 56875ReactDOMRoot.prototype.unmount = ReactDOMBlockingRoot.prototype.unmount = function () { 56876 { 56877 if (typeof arguments[0] === 'function') { 56878 error('unmount(...): does not support a callback argument. ' + 'To execute a side effect after rendering, declare it in a component body with useEffect().'); 56879 } 56880 } 56881 56882 var root = this._internalRoot; 56883 var container = root.containerInfo; 56884 updateContainer(null, root, null, function () { 56885 unmarkContainerAsRoot(container); 56886 }); 56887}; 56888 56889function createRootImpl(container, tag, options) { 56890 // Tag is either LegacyRoot or Concurrent Root 56891 var hydrate = options != null && options.hydrate === true; 56892 var hydrationCallbacks = options != null && options.hydrationOptions || null; 56893 var mutableSources = options != null && options.hydrationOptions != null && options.hydrationOptions.mutableSources || null; 56894 var root = createContainer(container, tag, hydrate); 56895 markContainerAsRoot(root.current, container); 56896 var containerNodeType = container.nodeType; 56897 56898 { 56899 var rootContainerElement = container.nodeType === COMMENT_NODE ? container.parentNode : container; 56900 listenToAllSupportedEvents(rootContainerElement); 56901 } 56902 56903 if (mutableSources) { 56904 for (var i = 0; i < mutableSources.length; i++) { 56905 var mutableSource = mutableSources[i]; 56906 registerMutableSourceForHydration(root, mutableSource); 56907 } 56908 } 56909 56910 return root; 56911} 56912function createLegacyRoot(container, options) { 56913 return new ReactDOMBlockingRoot(container, LegacyRoot, options); 56914} 56915function isValidContainer(node) { 56916 return !!(node && (node.nodeType === ELEMENT_NODE || node.nodeType === DOCUMENT_NODE || node.nodeType === DOCUMENT_FRAGMENT_NODE || node.nodeType === COMMENT_NODE && node.nodeValue === ' react-mount-point-unstable ')); 56917} 56918 56919var ReactCurrentOwner$3 = ReactSharedInternals.ReactCurrentOwner; 56920var topLevelUpdateWarnings; 56921var warnedAboutHydrateAPI = false; 56922 56923{ 56924 topLevelUpdateWarnings = function (container) { 56925 if (container._reactRootContainer && container.nodeType !== COMMENT_NODE) { 56926 var hostInstance = findHostInstanceWithNoPortals(container._reactRootContainer._internalRoot.current); 56927 56928 if (hostInstance) { 56929 if (hostInstance.parentNode !== container) { 56930 error('render(...): It looks like the React-rendered content of this ' + 'container was removed without using React. This is not ' + 'supported and will cause errors. Instead, call ' + 'ReactDOM.unmountComponentAtNode to empty a container.'); 56931 } 56932 } 56933 } 56934 56935 var isRootRenderedBySomeReact = !!container._reactRootContainer; 56936 var rootEl = getReactRootElementInContainer(container); 56937 var hasNonRootReactChild = !!(rootEl && getInstanceFromNode(rootEl)); 56938 56939 if (hasNonRootReactChild && !isRootRenderedBySomeReact) { 56940 error('render(...): Replacing React-rendered children with a new root ' + 'component. If you intended to update the children of this node, ' + 'you should instead have the existing children update their state ' + 'and render the new components instead of calling ReactDOM.render.'); 56941 } 56942 56943 if (container.nodeType === ELEMENT_NODE && container.tagName && container.tagName.toUpperCase() === 'BODY') { 56944 error('render(): Rendering components directly into document.body is ' + 'discouraged, since its children are often manipulated by third-party ' + 'scripts and browser extensions. This may lead to subtle ' + 'reconciliation issues. Try rendering into a container element created ' + 'for your app.'); 56945 } 56946 }; 56947} 56948 56949function getReactRootElementInContainer(container) { 56950 if (!container) { 56951 return null; 56952 } 56953 56954 if (container.nodeType === DOCUMENT_NODE) { 56955 return container.documentElement; 56956 } else { 56957 return container.firstChild; 56958 } 56959} 56960 56961function shouldHydrateDueToLegacyHeuristic(container) { 56962 var rootElement = getReactRootElementInContainer(container); 56963 return !!(rootElement && rootElement.nodeType === ELEMENT_NODE && rootElement.hasAttribute(ROOT_ATTRIBUTE_NAME)); 56964} 56965 56966function legacyCreateRootFromDOMContainer(container, forceHydrate) { 56967 var shouldHydrate = forceHydrate || shouldHydrateDueToLegacyHeuristic(container); // First clear any existing content. 56968 56969 if (!shouldHydrate) { 56970 var warned = false; 56971 var rootSibling; 56972 56973 while (rootSibling = container.lastChild) { 56974 { 56975 if (!warned && rootSibling.nodeType === ELEMENT_NODE && rootSibling.hasAttribute(ROOT_ATTRIBUTE_NAME)) { 56976 warned = true; 56977 56978 error('render(): Target node has markup rendered by React, but there ' + 'are unrelated nodes as well. This is most commonly caused by ' + 'white-space inserted around server-rendered markup.'); 56979 } 56980 } 56981 56982 container.removeChild(rootSibling); 56983 } 56984 } 56985 56986 { 56987 if (shouldHydrate && !forceHydrate && !warnedAboutHydrateAPI) { 56988 warnedAboutHydrateAPI = true; 56989 56990 warn('render(): Calling ReactDOM.render() to hydrate server-rendered markup ' + 'will stop working in React v18. Replace the ReactDOM.render() call ' + 'with ReactDOM.hydrate() if you want React to attach to the server HTML.'); 56991 } 56992 } 56993 56994 return createLegacyRoot(container, shouldHydrate ? { 56995 hydrate: true 56996 } : undefined); 56997} 56998 56999function warnOnInvalidCallback$1(callback, callerName) { 57000 { 57001 if (callback !== null && typeof callback !== 'function') { 57002 error('%s(...): Expected the last optional `callback` argument to be a ' + 'function. Instead received: %s.', callerName, callback); 57003 } 57004 } 57005} 57006 57007function legacyRenderSubtreeIntoContainer(parentComponent, children, container, forceHydrate, callback) { 57008 { 57009 topLevelUpdateWarnings(container); 57010 warnOnInvalidCallback$1(callback === undefined ? null : callback, 'render'); 57011 } // TODO: Without `any` type, Flow says "Property cannot be accessed on any 57012 // member of intersection type." Whyyyyyy. 57013 57014 57015 var root = container._reactRootContainer; 57016 var fiberRoot; 57017 57018 if (!root) { 57019 // Initial mount 57020 root = container._reactRootContainer = legacyCreateRootFromDOMContainer(container, forceHydrate); 57021 fiberRoot = root._internalRoot; 57022 57023 if (typeof callback === 'function') { 57024 var originalCallback = callback; 57025 57026 callback = function () { 57027 var instance = getPublicRootInstance(fiberRoot); 57028 originalCallback.call(instance); 57029 }; 57030 } // Initial mount should not be batched. 57031 57032 57033 unbatchedUpdates(function () { 57034 updateContainer(children, fiberRoot, parentComponent, callback); 57035 }); 57036 } else { 57037 fiberRoot = root._internalRoot; 57038 57039 if (typeof callback === 'function') { 57040 var _originalCallback = callback; 57041 57042 callback = function () { 57043 var instance = getPublicRootInstance(fiberRoot); 57044 57045 _originalCallback.call(instance); 57046 }; 57047 } // Update 57048 57049 57050 updateContainer(children, fiberRoot, parentComponent, callback); 57051 } 57052 57053 return getPublicRootInstance(fiberRoot); 57054} 57055 57056function findDOMNode(componentOrElement) { 57057 { 57058 var owner = ReactCurrentOwner$3.current; 57059 57060 if (owner !== null && owner.stateNode !== null) { 57061 var warnedAboutRefsInRender = owner.stateNode._warnedAboutRefsInRender; 57062 57063 if (!warnedAboutRefsInRender) { 57064 error('%s is accessing findDOMNode inside its render(). ' + 'render() should be a pure function of props and state. It should ' + 'never access something that requires stale data from the previous ' + 'render, such as refs. Move this logic to componentDidMount and ' + 'componentDidUpdate instead.', getComponentName(owner.type) || 'A component'); 57065 } 57066 57067 owner.stateNode._warnedAboutRefsInRender = true; 57068 } 57069 } 57070 57071 if (componentOrElement == null) { 57072 return null; 57073 } 57074 57075 if (componentOrElement.nodeType === ELEMENT_NODE) { 57076 return componentOrElement; 57077 } 57078 57079 { 57080 return findHostInstanceWithWarning(componentOrElement, 'findDOMNode'); 57081 } 57082} 57083function hydrate(element, container, callback) { 57084 if (!isValidContainer(container)) { 57085 { 57086 throw Error( "Target container is not a DOM element." ); 57087 } 57088 } 57089 57090 { 57091 var isModernRoot = isContainerMarkedAsRoot(container) && container._reactRootContainer === undefined; 57092 57093 if (isModernRoot) { 57094 error('You are calling ReactDOM.hydrate() on a container that was previously ' + 'passed to ReactDOM.createRoot(). This is not supported. ' + 'Did you mean to call createRoot(container, {hydrate: true}).render(element)?'); 57095 } 57096 } // TODO: throw or warn if we couldn't hydrate? 57097 57098 57099 return legacyRenderSubtreeIntoContainer(null, element, container, true, callback); 57100} 57101function render(element, container, callback) { 57102 if (!isValidContainer(container)) { 57103 { 57104 throw Error( "Target container is not a DOM element." ); 57105 } 57106 } 57107 57108 { 57109 var isModernRoot = isContainerMarkedAsRoot(container) && container._reactRootContainer === undefined; 57110 57111 if (isModernRoot) { 57112 error('You are calling ReactDOM.render() on a container that was previously ' + 'passed to ReactDOM.createRoot(). This is not supported. ' + 'Did you mean to call root.render(element)?'); 57113 } 57114 } 57115 57116 return legacyRenderSubtreeIntoContainer(null, element, container, false, callback); 57117} 57118function unstable_renderSubtreeIntoContainer(parentComponent, element, containerNode, callback) { 57119 if (!isValidContainer(containerNode)) { 57120 { 57121 throw Error( "Target container is not a DOM element." ); 57122 } 57123 } 57124 57125 if (!(parentComponent != null && has(parentComponent))) { 57126 { 57127 throw Error( "parentComponent must be a valid React Component" ); 57128 } 57129 } 57130 57131 return legacyRenderSubtreeIntoContainer(parentComponent, element, containerNode, false, callback); 57132} 57133function unmountComponentAtNode(container) { 57134 if (!isValidContainer(container)) { 57135 { 57136 throw Error( "unmountComponentAtNode(...): Target container is not a DOM element." ); 57137 } 57138 } 57139 57140 { 57141 var isModernRoot = isContainerMarkedAsRoot(container) && container._reactRootContainer === undefined; 57142 57143 if (isModernRoot) { 57144 error('You are calling ReactDOM.unmountComponentAtNode() on a container that was previously ' + 'passed to ReactDOM.createRoot(). This is not supported. Did you mean to call root.unmount()?'); 57145 } 57146 } 57147 57148 if (container._reactRootContainer) { 57149 { 57150 var rootEl = getReactRootElementInContainer(container); 57151 var renderedByDifferentReact = rootEl && !getInstanceFromNode(rootEl); 57152 57153 if (renderedByDifferentReact) { 57154 error("unmountComponentAtNode(): The node you're attempting to unmount " + 'was rendered by another copy of React.'); 57155 } 57156 } // Unmount should not be batched. 57157 57158 57159 unbatchedUpdates(function () { 57160 legacyRenderSubtreeIntoContainer(null, null, container, false, function () { 57161 // $FlowFixMe This should probably use `delete container._reactRootContainer` 57162 container._reactRootContainer = null; 57163 unmarkContainerAsRoot(container); 57164 }); 57165 }); // If you call unmountComponentAtNode twice in quick succession, you'll 57166 // get `true` twice. That's probably fine? 57167 57168 return true; 57169 } else { 57170 { 57171 var _rootEl = getReactRootElementInContainer(container); 57172 57173 var hasNonRootReactChild = !!(_rootEl && getInstanceFromNode(_rootEl)); // Check if the container itself is a React root node. 57174 57175 var isContainerReactRoot = container.nodeType === ELEMENT_NODE && isValidContainer(container.parentNode) && !!container.parentNode._reactRootContainer; 57176 57177 if (hasNonRootReactChild) { 57178 error("unmountComponentAtNode(): The node you're attempting to unmount " + 'was rendered by React and is not a top-level container. %s', isContainerReactRoot ? 'You may have accidentally passed in a React root node instead ' + 'of its container.' : 'Instead, have the parent component update its state and ' + 'rerender in order to remove this component.'); 57179 } 57180 } 57181 57182 return false; 57183 } 57184} 57185 57186setAttemptUserBlockingHydration(attemptUserBlockingHydration$1); 57187setAttemptContinuousHydration(attemptContinuousHydration$1); 57188setAttemptHydrationAtCurrentPriority(attemptHydrationAtCurrentPriority$1); 57189setAttemptHydrationAtPriority(runWithPriority$2); 57190var didWarnAboutUnstableCreatePortal = false; 57191 57192{ 57193 if (typeof Map !== 'function' || // $FlowIssue Flow incorrectly thinks Map has no prototype 57194 Map.prototype == null || typeof Map.prototype.forEach !== 'function' || typeof Set !== 'function' || // $FlowIssue Flow incorrectly thinks Set has no prototype 57195 Set.prototype == null || typeof Set.prototype.clear !== 'function' || typeof Set.prototype.forEach !== 'function') { 57196 error('React depends on Map and Set built-in types. Make sure that you load a ' + 'polyfill in older browsers. https://reactjs.org/link/react-polyfills'); 57197 } 57198} 57199 57200setRestoreImplementation(restoreControlledState$3); 57201setBatchingImplementation(batchedUpdates$1, discreteUpdates$1, flushDiscreteUpdates, batchedEventUpdates$1); 57202 57203function createPortal$1(children, container) { 57204 var key = arguments.length > 2 && arguments[2] !== undefined ? arguments[2] : null; 57205 57206 if (!isValidContainer(container)) { 57207 { 57208 throw Error( "Target container is not a DOM element." ); 57209 } 57210 } // TODO: pass ReactDOM portal implementation as third argument 57211 // $FlowFixMe The Flow type is opaque but there's no way to actually create it. 57212 57213 57214 return createPortal(children, container, null, key); 57215} 57216 57217function renderSubtreeIntoContainer(parentComponent, element, containerNode, callback) { 57218 57219 return unstable_renderSubtreeIntoContainer(parentComponent, element, containerNode, callback); 57220} 57221 57222function unstable_createPortal(children, container) { 57223 var key = arguments.length > 2 && arguments[2] !== undefined ? arguments[2] : null; 57224 57225 { 57226 if (!didWarnAboutUnstableCreatePortal) { 57227 didWarnAboutUnstableCreatePortal = true; 57228 57229 warn('The ReactDOM.unstable_createPortal() alias has been deprecated, ' + 'and will be removed in React 18+. Update your code to use ' + 'ReactDOM.createPortal() instead. It has the exact same API, ' + 'but without the "unstable_" prefix.'); 57230 } 57231 } 57232 57233 return createPortal$1(children, container, key); 57234} 57235 57236var Internals = { 57237 // Keep in sync with ReactTestUtils.js, and ReactTestUtilsAct.js. 57238 // This is an array for better minification. 57239 Events: [getInstanceFromNode, getNodeFromInstance, getFiberCurrentPropsFromNode, enqueueStateRestore, restoreStateIfNeeded, flushPassiveEffects, // TODO: This is related to `act`, not events. Move to separate key? 57240 IsThisRendererActing] 57241}; 57242var foundDevTools = injectIntoDevTools({ 57243 findFiberByHostInstance: getClosestInstanceFromNode, 57244 bundleType: 1 , 57245 version: ReactVersion, 57246 rendererPackageName: 'react-dom' 57247}); 57248 57249{ 57250 if (!foundDevTools && canUseDOM && window.top === window.self) { 57251 // If we're in Chrome or Firefox, provide a download link if not installed. 57252 if (navigator.userAgent.indexOf('Chrome') > -1 && navigator.userAgent.indexOf('Edge') === -1 || navigator.userAgent.indexOf('Firefox') > -1) { 57253 var protocol = window.location.protocol; // Don't warn in exotic cases like chrome-extension://. 57254 57255 if (/^(https?|file):$/.test(protocol)) { 57256 // eslint-disable-next-line react-internal/no-production-logging 57257 console.info('%cDownload the React DevTools ' + 'for a better development experience: ' + 'https://reactjs.org/link/react-devtools' + (protocol === 'file:' ? '\nYou might need to use a local HTTP server (instead of file://): ' + 'https://reactjs.org/link/react-devtools-faq' : ''), 'font-weight:bold'); 57258 } 57259 } 57260 } 57261} 57262 57263exports.__SECRET_INTERNALS_DO_NOT_USE_OR_YOU_WILL_BE_FIRED = Internals; 57264exports.createPortal = createPortal$1; 57265exports.findDOMNode = findDOMNode; 57266exports.flushSync = flushSync; 57267exports.hydrate = hydrate; 57268exports.render = render; 57269exports.unmountComponentAtNode = unmountComponentAtNode; 57270exports.unstable_batchedUpdates = batchedUpdates$1; 57271exports.unstable_createPortal = unstable_createPortal; 57272exports.unstable_renderSubtreeIntoContainer = renderSubtreeIntoContainer; 57273exports.version = ReactVersion; 57274 })(); 57275} 57276 57277 57278/***/ }), 57279
vendor: 1,428 bytes, lines 57280-57323
57280/***/ "./node_modules/react-dom/index.js": 57281/*!*****************************************!*\ 57282 !*** ./node_modules/react-dom/index.js ***! 57283 \*****************************************/ 57284/***/ ((module, __unused_webpack_exports, __webpack_require__) => { 57285 57286"use strict"; 57287 57288 57289function checkDCE() { 57290 /* global __REACT_DEVTOOLS_GLOBAL_HOOK__ */ 57291 if ( 57292 typeof __REACT_DEVTOOLS_GLOBAL_HOOK__ === 'undefined' || 57293 typeof __REACT_DEVTOOLS_GLOBAL_HOOK__.checkDCE !== 'function' 57294 ) { 57295 return; 57296 } 57297 if (true) { 57298 // This branch is unreachable because this function is only called 57299 // in production, but the condition is true only in development. 57300 // Therefore if the branch is still here, dead code elimination wasn't 57301 // properly applied. 57302 // Don't change the message. React DevTools relies on it. Also make sure 57303 // this message doesn't occur elsewhere in this function, or it will cause 57304 // a false positive. 57305 throw new Error('^_^'); 57306 } 57307 try { 57308 // Verify that the code above has been dead code eliminated (DCE'd). 57309 __REACT_DEVTOOLS_GLOBAL_HOOK__.checkDCE(checkDCE); 57310 } catch (err) { 57311 // DevTools shouldn't crash React, no matter what. 57312 // We should still report in case we break this code. 57313 console.error(err); 57314 } 57315} 57316 57317if (false) {} else { 57318 module.exports = __webpack_require__(/*! ./cjs/react-dom.development.js */ "./node_modules/react-dom/cjs/react-dom.development.js"); 57319} 57320 57321 57322/***/ }), 57323
vendor: 5,077 bytes, lines 57324-57472
57324/***/ "./node_modules/react-fast-compare/index.js": 57325/*!**************************************************!*\ 57326 !*** ./node_modules/react-fast-compare/index.js ***! 57327 \**************************************************/ 57328/***/ ((module) => { 57329 57330/* global Map:readonly, Set:readonly, ArrayBuffer:readonly */ 57331 57332var hasElementType = typeof Element !== 'undefined'; 57333var hasMap = typeof Map === 'function'; 57334var hasSet = typeof Set === 'function'; 57335var hasArrayBuffer = typeof ArrayBuffer === 'function' && !!ArrayBuffer.isView; 57336 57337// Note: We **don't** need `envHasBigInt64Array` in fde es6/index.js 57338 57339function equal(a, b) { 57340 // START: fast-deep-equal es6/index.js 3.1.3 57341 if (a === b) return true; 57342 57343 if (a && b && typeof a == 'object' && typeof b == 'object') { 57344 if (a.constructor !== b.constructor) return false; 57345 57346 var length, i, keys; 57347 if (Array.isArray(a)) { 57348 length = a.length; 57349 if (length != b.length) return false; 57350 for (i = length; i-- !== 0;) 57351 if (!equal(a[i], b[i])) return false; 57352 return true; 57353 } 57354 57355 // START: Modifications: 57356 // 1. Extra `has<Type> &&` helpers in initial condition allow es6 code 57357 // to co-exist with es5. 57358 // 2. Replace `for of` with es5 compliant iteration using `for`. 57359 // Basically, take: 57360 // 57361 // ```js 57362 // for (i of a.entries()) 57363 // if (!b.has(i[0])) return false; 57364 // ``` 57365 // 57366 // ... and convert to: 57367 // 57368 // ```js 57369 // it = a.entries(); 57370 // while (!(i = it.next()).done) 57371 // if (!b.has(i.value[0])) return false; 57372 // ``` 57373 // 57374 // **Note**: `i` access switches to `i.value`. 57375 var it; 57376 if (hasMap && (a instanceof Map) && (b instanceof Map)) { 57377 if (a.size !== b.size) return false; 57378 it = a.entries(); 57379 while (!(i = it.next()).done) 57380 if (!b.has(i.value[0])) return false; 57381 it = a.entries(); 57382 while (!(i = it.next()).done) 57383 if (!equal(i.value[1], b.get(i.value[0]))) return false; 57384 return true; 57385 } 57386 57387 if (hasSet && (a instanceof Set) && (b instanceof Set)) { 57388 if (a.size !== b.size) return false; 57389 it = a.entries(); 57390 while (!(i = it.next()).done) 57391 if (!b.has(i.value[0])) return false; 57392 return true; 57393 } 57394 // END: Modifications 57395 57396 if (hasArrayBuffer && ArrayBuffer.isView(a) && ArrayBuffer.isView(b)) { 57397 length = a.length; 57398 if (length != b.length) return false; 57399 for (i = length; i-- !== 0;) 57400 if (a[i] !== b[i]) return false; 57401 return true; 57402 } 57403 57404 if (a.constructor === RegExp) return a.source === b.source && a.flags === b.flags; 57405 // START: Modifications: 57406 // Apply guards for `Object.create(null)` handling. See: 57407 // - https://github.com/FormidableLabs/react-fast-compare/issues/64 57408 // - https://github.com/epoberezkin/fast-deep-equal/issues/49 57409 if (a.valueOf !== Object.prototype.valueOf && typeof a.valueOf === 'function' && typeof b.valueOf === 'function') return a.valueOf() === b.valueOf(); 57410 if (a.toString !== Object.prototype.toString && typeof a.toString === 'function' && typeof b.toString === 'function') return a.toString() === b.toString(); 57411 // END: Modifications 57412 57413 keys = Object.keys(a); 57414 length = keys.length; 57415 if (length !== Object.keys(b).length) return false; 57416 57417 for (i = length; i-- !== 0;) 57418 if (!Object.prototype.hasOwnProperty.call(b, keys[i])) return false; 57419 // END: fast-deep-equal 57420 57421 // START: react-fast-compare 57422 // custom handling for DOM elements 57423 if (hasElementType && a instanceof Element) return false; 57424 57425 // custom handling for React/Preact 57426 for (i = length; i-- !== 0;) { 57427 if ((keys[i] === '_owner' || keys[i] === '__v' || keys[i] === '__o') && a.$$typeof) { 57428 // React-specific: avoid traversing React elements' _owner 57429 // Preact-specific: avoid traversing Preact elements' __v and __o 57430 // __v = $_original / $_vnode 57431 // __o = $_owner 57432 // These properties contain circular references and are not needed when 57433 // comparing the actual elements (and not their owners) 57434 // .$$typeof and ._store on just reasonable markers of elements 57435 57436 continue; 57437 } 57438 57439 // all other properties should be traversed as usual 57440 if (!equal(a[keys[i]], b[keys[i]])) return false; 57441 } 57442 // END: react-fast-compare 57443 57444 // START: fast-deep-equal 57445 return true; 57446 } 57447 57448 return a !== a && b !== b; 57449} 57450// end fast-deep-equal 57451 57452module.exports = function isEqual(a, b) { 57453 try { 57454 return equal(a, b); 57455 } catch (error) { 57456 if (((error.message || '').match(/stack|recursion/i))) { 57457 // warn on circular references, don't crash 57458 // browsers give this different errors name and messages: 57459 // chrome/safari: "RangeError", "Maximum call stack size exceeded" 57460 // firefox: "InternalError", too much recursion" 57461 // edge: "Error", "Out of stack space" 57462 console.warn('react-fast-compare cannot handle circular refs'); 57463 return false; 57464 } 57465 // some other error. we should definitely know about these 57466 throw error; 57467 } 57468}; 57469 57470 57471/***/ }), 57472
vendor: 38,415 bytes, lines 57473-58412
57473/***/ "./node_modules/react-helmet/es/Helmet.js": 57474/*!************************************************!*\ 57475 !*** ./node_modules/react-helmet/es/Helmet.js ***! 57476 \************************************************/ 57477/***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => { 57478 57479"use strict"; 57480__webpack_require__.r(__webpack_exports__); 57481/* harmony export */ __webpack_require__.d(__webpack_exports__, { 57482/* harmony export */ Helmet: () => (/* binding */ HelmetExport), 57483/* harmony export */ "default": () => (__WEBPACK_DEFAULT_EXPORT__) 57484/* harmony export */ }); 57485/* harmony import */ var prop_types__WEBPACK_IMPORTED_MODULE_4__ = __webpack_require__(/*! prop-types */ "./node_modules/prop-types/index.js"); 57486/* harmony import */ var prop_types__WEBPACK_IMPORTED_MODULE_4___default = /*#__PURE__*/__webpack_require__.n(prop_types__WEBPACK_IMPORTED_MODULE_4__); 57487/* harmony import */ var react_side_effect__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! react-side-effect */ "./node_modules/react-side-effect/lib/index.js"); 57488/* harmony import */ var react_side_effect__WEBPACK_IMPORTED_MODULE_0___default = /*#__PURE__*/__webpack_require__.n(react_side_effect__WEBPACK_IMPORTED_MODULE_0__); 57489/* harmony import */ var react_fast_compare__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! react-fast-compare */ "./node_modules/react-fast-compare/index.js"); 57490/* harmony import */ var react_fast_compare__WEBPACK_IMPORTED_MODULE_1___default = /*#__PURE__*/__webpack_require__.n(react_fast_compare__WEBPACK_IMPORTED_MODULE_1__); 57491/* harmony import */ var react__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! react */ "./node_modules/react/index.js"); 57492/* harmony import */ var object_assign__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(/*! object-assign */ "./node_modules/object-assign/index.js"); 57493/* harmony import */ var object_assign__WEBPACK_IMPORTED_MODULE_3___default = /*#__PURE__*/__webpack_require__.n(object_assign__WEBPACK_IMPORTED_MODULE_3__); 57494 57495 57496 57497 57498 57499 57500var ATTRIBUTE_NAMES = { 57501 BODY: "bodyAttributes", 57502 HTML: "htmlAttributes", 57503 TITLE: "titleAttributes" 57504}; 57505 57506var TAG_NAMES = { 57507 BASE: "base", 57508 BODY: "body", 57509 HEAD: "head", 57510 HTML: "html", 57511 LINK: "link", 57512 META: "meta", 57513 NOSCRIPT: "noscript", 57514 SCRIPT: "script", 57515 STYLE: "style", 57516 TITLE: "title" 57517}; 57518 57519var VALID_TAG_NAMES = Object.keys(TAG_NAMES).map(function (name) { 57520 return TAG_NAMES[name]; 57521}); 57522 57523var TAG_PROPERTIES = { 57524 CHARSET: "charset", 57525 CSS_TEXT: "cssText", 57526 HREF: "href", 57527 HTTPEQUIV: "http-equiv", 57528 INNER_HTML: "innerHTML", 57529 ITEM_PROP: "itemprop", 57530 NAME: "name", 57531 PROPERTY: "property", 57532 REL: "rel", 57533 SRC: "src", 57534 TARGET: "target" 57535}; 57536 57537var REACT_TAG_MAP = { 57538 accesskey: "accessKey", 57539 charset: "charSet", 57540 class: "className", 57541 contenteditable: "contentEditable", 57542 contextmenu: "contextMenu", 57543 "http-equiv": "httpEquiv", 57544 itemprop: "itemProp", 57545 tabindex: "tabIndex" 57546}; 57547 57548var HELMET_PROPS = { 57549 DEFAULT_TITLE: "defaultTitle", 57550 DEFER: "defer", 57551 ENCODE_SPECIAL_CHARACTERS: "encodeSpecialCharacters", 57552 ON_CHANGE_CLIENT_STATE: "onChangeClientState", 57553 TITLE_TEMPLATE: "titleTemplate" 57554}; 57555 57556var HTML_TAG_MAP = Object.keys(REACT_TAG_MAP).reduce(function (obj, key) { 57557 obj[REACT_TAG_MAP[key]] = key; 57558 return obj; 57559}, {}); 57560 57561var SELF_CLOSING_TAGS = [TAG_NAMES.NOSCRIPT, TAG_NAMES.SCRIPT, TAG_NAMES.STYLE]; 57562 57563var HELMET_ATTRIBUTE = "data-react-helmet"; 57564 57565var _typeof = typeof Symbol === "function" && typeof Symbol.iterator === "symbol" ? function (obj) { 57566 return typeof obj; 57567} : function (obj) { 57568 return obj && typeof Symbol === "function" && obj.constructor === Symbol && obj !== Symbol.prototype ? "symbol" : typeof obj; 57569}; 57570 57571var classCallCheck = function (instance, Constructor) { 57572 if (!(instance instanceof Constructor)) { 57573 throw new TypeError("Cannot call a class as a function"); 57574 } 57575}; 57576 57577var createClass = function () { 57578 function defineProperties(target, props) { 57579 for (var i = 0; i < props.length; i++) { 57580 var descriptor = props[i]; 57581 descriptor.enumerable = descriptor.enumerable || false; 57582 descriptor.configurable = true; 57583 if ("value" in descriptor) descriptor.writable = true; 57584 Object.defineProperty(target, descriptor.key, descriptor); 57585 } 57586 } 57587 57588 return function (Constructor, protoProps, staticProps) { 57589 if (protoProps) defineProperties(Constructor.prototype, protoProps); 57590 if (staticProps) defineProperties(Constructor, staticProps); 57591 return Constructor; 57592 }; 57593}(); 57594 57595var _extends = Object.assign || function (target) { 57596 for (var i = 1; i < arguments.length; i++) { 57597 var source = arguments[i]; 57598 57599 for (var key in source) { 57600 if (Object.prototype.hasOwnProperty.call(source, key)) { 57601 target[key] = source[key]; 57602 } 57603 } 57604 } 57605 57606 return target; 57607}; 57608 57609var inherits = function (subClass, superClass) { 57610 if (typeof superClass !== "function" && superClass !== null) { 57611 throw new TypeError("Super expression must either be null or a function, not " + typeof superClass); 57612 } 57613 57614 subClass.prototype = Object.create(superClass && superClass.prototype, { 57615 constructor: { 57616 value: subClass, 57617 enumerable: false, 57618 writable: true, 57619 configurable: true 57620 } 57621 }); 57622 if (superClass) Object.setPrototypeOf ? Object.setPrototypeOf(subClass, superClass) : subClass.__proto__ = superClass; 57623}; 57624 57625var objectWithoutProperties = function (obj, keys) { 57626 var target = {}; 57627 57628 for (var i in obj) { 57629 if (keys.indexOf(i) >= 0) continue; 57630 if (!Object.prototype.hasOwnProperty.call(obj, i)) continue; 57631 target[i] = obj[i]; 57632 } 57633 57634 return target; 57635}; 57636 57637var possibleConstructorReturn = function (self, call) { 57638 if (!self) { 57639 throw new ReferenceError("this hasn't been initialised - super() hasn't been called"); 57640 } 57641 57642 return call && (typeof call === "object" || typeof call === "function") ? call : self; 57643}; 57644 57645var encodeSpecialCharacters = function encodeSpecialCharacters(str) { 57646 var encode = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : true; 57647 57648 if (encode === false) { 57649 return String(str); 57650 } 57651 57652 return String(str).replace(/&/g, "&").replace(/</g, "<").replace(/>/g, ">").replace(/"/g, """).replace(/'/g, "'"); 57653}; 57654 57655var getTitleFromPropsList = function getTitleFromPropsList(propsList) { 57656 var innermostTitle = getInnermostProperty(propsList, TAG_NAMES.TITLE); 57657 var innermostTemplate = getInnermostProperty(propsList, HELMET_PROPS.TITLE_TEMPLATE); 57658 57659 if (innermostTemplate && innermostTitle) { 57660 // use function arg to avoid need to escape $ characters 57661 return innermostTemplate.replace(/%s/g, function () { 57662 return Array.isArray(innermostTitle) ? innermostTitle.join("") : innermostTitle; 57663 }); 57664 } 57665 57666 var innermostDefaultTitle = getInnermostProperty(propsList, HELMET_PROPS.DEFAULT_TITLE); 57667 57668 return innermostTitle || innermostDefaultTitle || undefined; 57669}; 57670 57671var getOnChangeClientState = function getOnChangeClientState(propsList) { 57672 return getInnermostProperty(propsList, HELMET_PROPS.ON_CHANGE_CLIENT_STATE) || function () {}; 57673}; 57674 57675var getAttributesFromPropsList = function getAttributesFromPropsList(tagType, propsList) { 57676 return propsList.filter(function (props) { 57677 return typeof props[tagType] !== "undefined"; 57678 }).map(function (props) { 57679 return props[tagType]; 57680 }).reduce(function (tagAttrs, current) { 57681 return _extends({}, tagAttrs, current); 57682 }, {}); 57683}; 57684 57685var getBaseTagFromPropsList = function getBaseTagFromPropsList(primaryAttributes, propsList) { 57686 return propsList.filter(function (props) { 57687 return typeof props[TAG_NAMES.BASE] !== "undefined"; 57688 }).map(function (props) { 57689 return props[TAG_NAMES.BASE]; 57690 }).reverse().reduce(function (innermostBaseTag, tag) { 57691 if (!innermostBaseTag.length) { 57692 var keys = Object.keys(tag); 57693 57694 for (var i = 0; i < keys.length; i++) { 57695 var attributeKey = keys[i]; 57696 var lowerCaseAttributeKey = attributeKey.toLowerCase(); 57697 57698 if (primaryAttributes.indexOf(lowerCaseAttributeKey) !== -1 && tag[lowerCaseAttributeKey]) { 57699 return innermostBaseTag.concat(tag); 57700 } 57701 } 57702 } 57703 57704 return innermostBaseTag; 57705 }, []); 57706}; 57707 57708var getTagsFromPropsList = function getTagsFromPropsList(tagName, primaryAttributes, propsList) { 57709 // Calculate list of tags, giving priority innermost component (end of the propslist) 57710 var approvedSeenTags = {}; 57711 57712 return propsList.filter(function (props) { 57713 if (Array.isArray(props[tagName])) { 57714 return true; 57715 } 57716 if (typeof props[tagName] !== "undefined") { 57717 warn("Helmet: " + tagName + " should be of type \"Array\". Instead found type \"" + _typeof(props[tagName]) + "\""); 57718 } 57719 return false; 57720 }).map(function (props) { 57721 return props[tagName]; 57722 }).reverse().reduce(function (approvedTags, instanceTags) { 57723 var instanceSeenTags = {}; 57724 57725 instanceTags.filter(function (tag) { 57726 var primaryAttributeKey = void 0; 57727 var keys = Object.keys(tag); 57728 for (var i = 0; i < keys.length; i++) { 57729 var attributeKey = keys[i]; 57730 var lowerCaseAttributeKey = attributeKey.toLowerCase(); 57731 57732 // Special rule with link tags, since rel and href are both primary tags, rel takes priority 57733 if (primaryAttributes.indexOf(lowerCaseAttributeKey) !== -1 && !(primaryAttributeKey === TAG_PROPERTIES.REL && tag[primaryAttributeKey].toLowerCase() === "canonical") && !(lowerCaseAttributeKey === TAG_PROPERTIES.REL && tag[lowerCaseAttributeKey].toLowerCase() === "stylesheet")) { 57734 primaryAttributeKey = lowerCaseAttributeKey; 57735 } 57736 // Special case for innerHTML which doesn't work lowercased 57737 if (primaryAttributes.indexOf(attributeKey) !== -1 && (attributeKey === TAG_PROPERTIES.INNER_HTML || attributeKey === TAG_PROPERTIES.CSS_TEXT || attributeKey === TAG_PROPERTIES.ITEM_PROP)) { 57738 primaryAttributeKey = attributeKey; 57739 } 57740 } 57741 57742 if (!primaryAttributeKey || !tag[primaryAttributeKey]) { 57743 return false; 57744 } 57745 57746 var value = tag[primaryAttributeKey].toLowerCase(); 57747 57748 if (!approvedSeenTags[primaryAttributeKey]) { 57749 approvedSeenTags[primaryAttributeKey] = {}; 57750 } 57751 57752 if (!instanceSeenTags[primaryAttributeKey]) { 57753 instanceSeenTags[primaryAttributeKey] = {}; 57754 } 57755 57756 if (!approvedSeenTags[primaryAttributeKey][value]) { 57757 instanceSeenTags[primaryAttributeKey][value] = true; 57758 return true; 57759 } 57760 57761 return false; 57762 }).reverse().forEach(function (tag) { 57763 return approvedTags.push(tag); 57764 }); 57765 57766 // Update seen tags with tags from this instance 57767 var keys = Object.keys(instanceSeenTags); 57768 for (var i = 0; i < keys.length; i++) { 57769 var attributeKey = keys[i]; 57770 var tagUnion = object_assign__WEBPACK_IMPORTED_MODULE_3___default()({}, approvedSeenTags[attributeKey], instanceSeenTags[attributeKey]); 57771 57772 approvedSeenTags[attributeKey] = tagUnion; 57773 } 57774 57775 return approvedTags; 57776 }, []).reverse(); 57777}; 57778 57779var getInnermostProperty = function getInnermostProperty(propsList, property) { 57780 for (var i = propsList.length - 1; i >= 0; i--) { 57781 var props = propsList[i]; 57782 57783 if (props.hasOwnProperty(property)) { 57784 return props[property]; 57785 } 57786 } 57787 57788 return null; 57789}; 57790 57791var reducePropsToState = function reducePropsToState(propsList) { 57792 return { 57793 baseTag: getBaseTagFromPropsList([TAG_PROPERTIES.HREF, TAG_PROPERTIES.TARGET], propsList), 57794 bodyAttributes: getAttributesFromPropsList(ATTRIBUTE_NAMES.BODY, propsList), 57795 defer: getInnermostProperty(propsList, HELMET_PROPS.DEFER), 57796 encode: getInnermostProperty(propsList, HELMET_PROPS.ENCODE_SPECIAL_CHARACTERS), 57797 htmlAttributes: getAttributesFromPropsList(ATTRIBUTE_NAMES.HTML, propsList), 57798 linkTags: getTagsFromPropsList(TAG_NAMES.LINK, [TAG_PROPERTIES.REL, TAG_PROPERTIES.HREF], propsList), 57799 metaTags: getTagsFromPropsList(TAG_NAMES.META, [TAG_PROPERTIES.NAME, TAG_PROPERTIES.CHARSET, TAG_PROPERTIES.HTTPEQUIV, TAG_PROPERTIES.PROPERTY, TAG_PROPERTIES.ITEM_PROP], propsList), 57800 noscriptTags: getTagsFromPropsList(TAG_NAMES.NOSCRIPT, [TAG_PROPERTIES.INNER_HTML], propsList), 57801 onChangeClientState: getOnChangeClientState(propsList), 57802 scriptTags: getTagsFromPropsList(TAG_NAMES.SCRIPT, [TAG_PROPERTIES.SRC, TAG_PROPERTIES.INNER_HTML], propsList), 57803 styleTags: getTagsFromPropsList(TAG_NAMES.STYLE, [TAG_PROPERTIES.CSS_TEXT], propsList), 57804 title: getTitleFromPropsList(propsList), 57805 titleAttributes: getAttributesFromPropsList(ATTRIBUTE_NAMES.TITLE, propsList) 57806 }; 57807}; 57808 57809var rafPolyfill = function () { 57810 var clock = Date.now(); 57811 57812 return function (callback) { 57813 var currentTime = Date.now(); 57814 57815 if (currentTime - clock > 16) { 57816 clock = currentTime; 57817 callback(currentTime); 57818 } else { 57819 setTimeout(function () { 57820 rafPolyfill(callback); 57821 }, 0); 57822 } 57823 }; 57824}(); 57825 57826var cafPolyfill = function cafPolyfill(id) { 57827 return clearTimeout(id); 57828}; 57829 57830var requestAnimationFrame = typeof window !== "undefined" ? window.requestAnimationFrame && window.requestAnimationFrame.bind(window) || window.webkitRequestAnimationFrame || window.mozRequestAnimationFrame || rafPolyfill : __webpack_require__.g.requestAnimationFrame || rafPolyfill; 57831 57832var cancelAnimationFrame = typeof window !== "undefined" ? window.cancelAnimationFrame || window.webkitCancelAnimationFrame || window.mozCancelAnimationFrame || cafPolyfill : __webpack_require__.g.cancelAnimationFrame || cafPolyfill; 57833 57834var warn = function warn(msg) { 57835 return console && typeof console.warn === "function" && console.warn(msg); 57836}; 57837 57838var _helmetCallback = null; 57839 57840var handleClientStateChange = function handleClientStateChange(newState) { 57841 if (_helmetCallback) { 57842 cancelAnimationFrame(_helmetCallback); 57843 } 57844 57845 if (newState.defer) { 57846 _helmetCallback = requestAnimationFrame(function () { 57847 commitTagChanges(newState, function () { 57848 _helmetCallback = null; 57849 }); 57850 }); 57851 } else { 57852 commitTagChanges(newState); 57853 _helmetCallback = null; 57854 } 57855}; 57856 57857var commitTagChanges = function commitTagChanges(newState, cb) { 57858 var baseTag = newState.baseTag, 57859 bodyAttributes = newState.bodyAttributes, 57860 htmlAttributes = newState.htmlAttributes, 57861 linkTags = newState.linkTags, 57862 metaTags = newState.metaTags, 57863 noscriptTags = newState.noscriptTags, 57864 onChangeClientState = newState.onChangeClientState, 57865 scriptTags = newState.scriptTags, 57866 styleTags = newState.styleTags, 57867 title = newState.title, 57868 titleAttributes = newState.titleAttributes; 57869 57870 updateAttributes(TAG_NAMES.BODY, bodyAttributes); 57871 updateAttributes(TAG_NAMES.HTML, htmlAttributes); 57872 57873 updateTitle(title, titleAttributes); 57874 57875 var tagUpdates = { 57876 baseTag: updateTags(TAG_NAMES.BASE, baseTag), 57877 linkTags: updateTags(TAG_NAMES.LINK, linkTags), 57878 metaTags: updateTags(TAG_NAMES.META, metaTags), 57879 noscriptTags: updateTags(TAG_NAMES.NOSCRIPT, noscriptTags), 57880 scriptTags: updateTags(TAG_NAMES.SCRIPT, scriptTags), 57881 styleTags: updateTags(TAG_NAMES.STYLE, styleTags) 57882 }; 57883 57884 var addedTags = {}; 57885 var removedTags = {}; 57886 57887 Object.keys(tagUpdates).forEach(function (tagType) { 57888 var _tagUpdates$tagType = tagUpdates[tagType], 57889 newTags = _tagUpdates$tagType.newTags, 57890 oldTags = _tagUpdates$tagType.oldTags; 57891 57892 57893 if (newTags.length) { 57894 addedTags[tagType] = newTags; 57895 } 57896 if (oldTags.length) { 57897 removedTags[tagType] = tagUpdates[tagType].oldTags; 57898 } 57899 }); 57900 57901 cb && cb(); 57902 57903 onChangeClientState(newState, addedTags, removedTags); 57904}; 57905 57906var flattenArray = function flattenArray(possibleArray) { 57907 return Array.isArray(possibleArray) ? possibleArray.join("") : possibleArray; 57908}; 57909 57910var updateTitle = function updateTitle(title, attributes) { 57911 if (typeof title !== "undefined" && document.title !== title) { 57912 document.title = flattenArray(title); 57913 } 57914 57915 updateAttributes(TAG_NAMES.TITLE, attributes); 57916}; 57917 57918var updateAttributes = function updateAttributes(tagName, attributes) { 57919 var elementTag = document.getElementsByTagName(tagName)[0]; 57920 57921 if (!elementTag) { 57922 return; 57923 } 57924 57925 var helmetAttributeString = elementTag.getAttribute(HELMET_ATTRIBUTE); 57926 var helmetAttributes = helmetAttributeString ? helmetAttributeString.split(",") : []; 57927 var attributesToRemove = [].concat(helmetAttributes); 57928 var attributeKeys = Object.keys(attributes); 57929 57930 for (var i = 0; i < attributeKeys.length; i++) { 57931 var attribute = attributeKeys[i]; 57932 var value = attributes[attribute] || ""; 57933 57934 if (elementTag.getAttribute(attribute) !== value) { 57935 elementTag.setAttribute(attribute, value); 57936 } 57937 57938 if (helmetAttributes.indexOf(attribute) === -1) { 57939 helmetAttributes.push(attribute); 57940 } 57941 57942 var indexToSave = attributesToRemove.indexOf(attribute); 57943 if (indexToSave !== -1) { 57944 attributesToRemove.splice(indexToSave, 1); 57945 } 57946 } 57947 57948 for (var _i = attributesToRemove.length - 1; _i >= 0; _i--) { 57949 elementTag.removeAttribute(attributesToRemove[_i]); 57950 } 57951 57952 if (helmetAttributes.length === attributesToRemove.length) { 57953 elementTag.removeAttribute(HELMET_ATTRIBUTE); 57954 } else if (elementTag.getAttribute(HELMET_ATTRIBUTE) !== attributeKeys.join(",")) { 57955 elementTag.setAttribute(HELMET_ATTRIBUTE, attributeKeys.join(",")); 57956 } 57957}; 57958 57959var updateTags = function updateTags(type, tags) { 57960 var headElement = document.head || document.querySelector(TAG_NAMES.HEAD); 57961 var tagNodes = headElement.querySelectorAll(type + "[" + HELMET_ATTRIBUTE + "]"); 57962 var oldTags = Array.prototype.slice.call(tagNodes); 57963 var newTags = []; 57964 var indexToDelete = void 0; 57965 57966 if (tags && tags.length) { 57967 tags.forEach(function (tag) { 57968 var newElement = document.createElement(type); 57969 57970 for (var attribute in tag) { 57971 if (tag.hasOwnProperty(attribute)) { 57972 if (attribute === TAG_PROPERTIES.INNER_HTML) { 57973 newElement.innerHTML = tag.innerHTML; 57974 } else if (attribute === TAG_PROPERTIES.CSS_TEXT) { 57975 if (newElement.styleSheet) { 57976 newElement.styleSheet.cssText = tag.cssText; 57977 } else { 57978 newElement.appendChild(document.createTextNode(tag.cssText)); 57979 } 57980 } else { 57981 var value = typeof tag[attribute] === "undefined" ? "" : tag[attribute]; 57982 newElement.setAttribute(attribute, value); 57983 } 57984 } 57985 } 57986 57987 newElement.setAttribute(HELMET_ATTRIBUTE, "true"); 57988 57989 // Remove a duplicate tag from domTagstoRemove, so it isn't cleared. 57990 if (oldTags.some(function (existingTag, index) { 57991 indexToDelete = index; 57992 return newElement.isEqualNode(existingTag); 57993 })) { 57994 oldTags.splice(indexToDelete, 1); 57995 } else { 57996 newTags.push(newElement); 57997 } 57998 }); 57999 } 58000 58001 oldTags.forEach(function (tag) { 58002 return tag.parentNode.removeChild(tag); 58003 }); 58004 newTags.forEach(function (tag) { 58005 return headElement.appendChild(tag); 58006 }); 58007 58008 return { 58009 oldTags: oldTags, 58010 newTags: newTags 58011 }; 58012}; 58013 58014var generateElementAttributesAsString = function generateElementAttributesAsString(attributes) { 58015 return Object.keys(attributes).reduce(function (str, key) { 58016 var attr = typeof attributes[key] !== "undefined" ? key + "=\"" + attributes[key] + "\"" : "" + key; 58017 return str ? str + " " + attr : attr; 58018 }, ""); 58019}; 58020 58021var generateTitleAsString = function generateTitleAsString(type, title, attributes, encode) { 58022 var attributeString = generateElementAttributesAsString(attributes); 58023 var flattenedTitle = flattenArray(title); 58024 return attributeString ? "<" + type + " " + HELMET_ATTRIBUTE + "=\"true\" " + attributeString + ">" + encodeSpecialCharacters(flattenedTitle, encode) + "</" + type + ">" : "<" + type + " " + HELMET_ATTRIBUTE + "=\"true\">" + encodeSpecialCharacters(flattenedTitle, encode) + "</" + type + ">"; 58025}; 58026 58027var generateTagsAsString = function generateTagsAsString(type, tags, encode) { 58028 return tags.reduce(function (str, tag) { 58029 var attributeHtml = Object.keys(tag).filter(function (attribute) { 58030 return !(attribute === TAG_PROPERTIES.INNER_HTML || attribute === TAG_PROPERTIES.CSS_TEXT); 58031 }).reduce(function (string, attribute) { 58032 var attr = typeof tag[attribute] === "undefined" ? attribute : attribute + "=\"" + encodeSpecialCharacters(tag[attribute], encode) + "\""; 58033 return string ? string + " " + attr : attr; 58034 }, ""); 58035 58036 var tagContent = tag.innerHTML || tag.cssText || ""; 58037 58038 var isSelfClosing = SELF_CLOSING_TAGS.indexOf(type) === -1; 58039 58040 return str + "<" + type + " " + HELMET_ATTRIBUTE + "=\"true\" " + attributeHtml + (isSelfClosing ? "/>" : ">" + tagContent + "</" + type + ">"); 58041 }, ""); 58042}; 58043 58044var convertElementAttributestoReactProps = function convertElementAttributestoReactProps(attributes) { 58045 var initProps = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : {}; 58046 58047 return Object.keys(attributes).reduce(function (obj, key) { 58048 obj[REACT_TAG_MAP[key] || key] = attributes[key]; 58049 return obj; 58050 }, initProps); 58051}; 58052 58053var convertReactPropstoHtmlAttributes = function convertReactPropstoHtmlAttributes(props) { 58054 var initAttributes = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : {}; 58055 58056 return Object.keys(props).reduce(function (obj, key) { 58057 obj[HTML_TAG_MAP[key] || key] = props[key]; 58058 return obj; 58059 }, initAttributes); 58060}; 58061 58062var generateTitleAsReactComponent = function generateTitleAsReactComponent(type, title, attributes) { 58063 var _initProps; 58064 58065 // assigning into an array to define toString function on it 58066 var initProps = (_initProps = { 58067 key: title 58068 }, _initProps[HELMET_ATTRIBUTE] = true, _initProps); 58069 var props = convertElementAttributestoReactProps(attributes, initProps); 58070 58071 return [react__WEBPACK_IMPORTED_MODULE_2__.createElement(TAG_NAMES.TITLE, props, title)]; 58072}; 58073 58074var generateTagsAsReactComponent = function generateTagsAsReactComponent(type, tags) { 58075 return tags.map(function (tag, i) { 58076 var _mappedTag; 58077 58078 var mappedTag = (_mappedTag = { 58079 key: i 58080 }, _mappedTag[HELMET_ATTRIBUTE] = true, _mappedTag); 58081 58082 Object.keys(tag).forEach(function (attribute) { 58083 var mappedAttribute = REACT_TAG_MAP[attribute] || attribute; 58084 58085 if (mappedAttribute === TAG_PROPERTIES.INNER_HTML || mappedAttribute === TAG_PROPERTIES.CSS_TEXT) { 58086 var content = tag.innerHTML || tag.cssText; 58087 mappedTag.dangerouslySetInnerHTML = { __html: content }; 58088 } else { 58089 mappedTag[mappedAttribute] = tag[attribute]; 58090 } 58091 }); 58092 58093 return react__WEBPACK_IMPORTED_MODULE_2__.createElement(type, mappedTag); 58094 }); 58095}; 58096 58097var getMethodsForTag = function getMethodsForTag(type, tags, encode) { 58098 switch (type) { 58099 case TAG_NAMES.TITLE: 58100 return { 58101 toComponent: function toComponent() { 58102 return generateTitleAsReactComponent(type, tags.title, tags.titleAttributes, encode); 58103 }, 58104 toString: function toString() { 58105 return generateTitleAsString(type, tags.title, tags.titleAttributes, encode); 58106 } 58107 }; 58108 case ATTRIBUTE_NAMES.BODY: 58109 case ATTRIBUTE_NAMES.HTML: 58110 return { 58111 toComponent: function toComponent() { 58112 return convertElementAttributestoReactProps(tags); 58113 }, 58114 toString: function toString() { 58115 return generateElementAttributesAsString(tags); 58116 } 58117 }; 58118 default: 58119 return { 58120 toComponent: function toComponent() { 58121 return generateTagsAsReactComponent(type, tags); 58122 }, 58123 toString: function toString() { 58124 return generateTagsAsString(type, tags, encode); 58125 } 58126 }; 58127 } 58128}; 58129 58130var mapStateOnServer = function mapStateOnServer(_ref) { 58131 var baseTag = _ref.baseTag, 58132 bodyAttributes = _ref.bodyAttributes, 58133 encode = _ref.encode, 58134 htmlAttributes = _ref.htmlAttributes, 58135 linkTags = _ref.linkTags, 58136 metaTags = _ref.metaTags, 58137 noscriptTags = _ref.noscriptTags, 58138 scriptTags = _ref.scriptTags, 58139 styleTags = _ref.styleTags, 58140 _ref$title = _ref.title, 58141 title = _ref$title === undefined ? "" : _ref$title, 58142 titleAttributes = _ref.titleAttributes; 58143 return { 58144 base: getMethodsForTag(TAG_NAMES.BASE, baseTag, encode), 58145 bodyAttributes: getMethodsForTag(ATTRIBUTE_NAMES.BODY, bodyAttributes, encode), 58146 htmlAttributes: getMethodsForTag(ATTRIBUTE_NAMES.HTML, htmlAttributes, encode), 58147 link: getMethodsForTag(TAG_NAMES.LINK, linkTags, encode), 58148 meta: getMethodsForTag(TAG_NAMES.META, metaTags, encode), 58149 noscript: getMethodsForTag(TAG_NAMES.NOSCRIPT, noscriptTags, encode), 58150 script: getMethodsForTag(TAG_NAMES.SCRIPT, scriptTags, encode), 58151 style: getMethodsForTag(TAG_NAMES.STYLE, styleTags, encode), 58152 title: getMethodsForTag(TAG_NAMES.TITLE, { title: title, titleAttributes: titleAttributes }, encode) 58153 }; 58154}; 58155 58156var Helmet = function Helmet(Component) { 58157 var _class, _temp; 58158 58159 return _temp = _class = function (_React$Component) { 58160 inherits(HelmetWrapper, _React$Component); 58161 58162 function HelmetWrapper() { 58163 classCallCheck(this, HelmetWrapper); 58164 return possibleConstructorReturn(this, _React$Component.apply(this, arguments)); 58165 } 58166 58167 HelmetWrapper.prototype.shouldComponentUpdate = function shouldComponentUpdate(nextProps) { 58168 return !react_fast_compare__WEBPACK_IMPORTED_MODULE_1___default()(this.props, nextProps); 58169 }; 58170 58171 HelmetWrapper.prototype.mapNestedChildrenToProps = function mapNestedChildrenToProps(child, nestedChildren) { 58172 if (!nestedChildren) { 58173 return null; 58174 } 58175 58176 switch (child.type) { 58177 case TAG_NAMES.SCRIPT: 58178 case TAG_NAMES.NOSCRIPT: 58179 return { 58180 innerHTML: nestedChildren 58181 }; 58182 58183 case TAG_NAMES.STYLE: 58184 return { 58185 cssText: nestedChildren 58186 }; 58187 } 58188 58189 throw new Error("<" + child.type + " /> elements are self-closing and can not contain children. Refer to our API for more information."); 58190 }; 58191 58192 HelmetWrapper.prototype.flattenArrayTypeChildren = function flattenArrayTypeChildren(_ref) { 58193 var _babelHelpers$extends; 58194 58195 var child = _ref.child, 58196 arrayTypeChildren = _ref.arrayTypeChildren, 58197 newChildProps = _ref.newChildProps, 58198 nestedChildren = _ref.nestedChildren; 58199 58200 return _extends({}, arrayTypeChildren, (_babelHelpers$extends = {}, _babelHelpers$extends[child.type] = [].concat(arrayTypeChildren[child.type] || [], [_extends({}, newChildProps, this.mapNestedChildrenToProps(child, nestedChildren))]), _babelHelpers$extends)); 58201 }; 58202 58203 HelmetWrapper.prototype.mapObjectTypeChildren = function mapObjectTypeChildren(_ref2) { 58204 var _babelHelpers$extends2, _babelHelpers$extends3; 58205 58206 var child = _ref2.child, 58207 newProps = _ref2.newProps, 58208 newChildProps = _ref2.newChildProps, 58209 nestedChildren = _ref2.nestedChildren; 58210 58211 switch (child.type) { 58212 case TAG_NAMES.TITLE: 58213 return _extends({}, newProps, (_babelHelpers$extends2 = {}, _babelHelpers$extends2[child.type] = nestedChildren, _babelHelpers$extends2.titleAttributes = _extends({}, newChildProps), _babelHelpers$extends2)); 58214 58215 case TAG_NAMES.BODY: 58216 return _extends({}, newProps, { 58217 bodyAttributes: _extends({}, newChildProps) 58218 }); 58219 58220 case TAG_NAMES.HTML: 58221 return _extends({}, newProps, { 58222 htmlAttributes: _extends({}, newChildProps) 58223 }); 58224 } 58225 58226 return _extends({}, newProps, (_babelHelpers$extends3 = {}, _babelHelpers$extends3[child.type] = _extends({}, newChildProps), _babelHelpers$extends3)); 58227 }; 58228 58229 HelmetWrapper.prototype.mapArrayTypeChildrenToProps = function mapArrayTypeChildrenToProps(arrayTypeChildren, newProps) { 58230 var newFlattenedProps = _extends({}, newProps); 58231 58232 Object.keys(arrayTypeChildren).forEach(function (arrayChildName) { 58233 var _babelHelpers$extends4; 58234 58235 newFlattenedProps = _extends({}, newFlattenedProps, (_babelHelpers$extends4 = {}, _babelHelpers$extends4[arrayChildName] = arrayTypeChildren[arrayChildName], _babelHelpers$extends4)); 58236 }); 58237 58238 return newFlattenedProps; 58239 }; 58240 58241 HelmetWrapper.prototype.warnOnInvalidChildren = function warnOnInvalidChildren(child, nestedChildren) { 58242 if (true) { 58243 if (!VALID_TAG_NAMES.some(function (name) { 58244 return child.type === name; 58245 })) { 58246 if (typeof child.type === "function") { 58247 return warn("You may be attempting to nest <Helmet> components within each other, which is not allowed. Refer to our API for more information."); 58248 } 58249 58250 return warn("Only elements types " + VALID_TAG_NAMES.join(", ") + " are allowed. Helmet does not support rendering <" + child.type + "> elements. Refer to our API for more information."); 58251 } 58252 58253 if (nestedChildren && typeof nestedChildren !== "string" && (!Array.isArray(nestedChildren) || nestedChildren.some(function (nestedChild) { 58254 return typeof nestedChild !== "string"; 58255 }))) { 58256 throw new Error("Helmet expects a string as a child of <" + child.type + ">. Did you forget to wrap your children in braces? ( <" + child.type + ">{``}</" + child.type + "> ) Refer to our API for more information."); 58257 } 58258 } 58259 58260 return true; 58261 }; 58262 58263 HelmetWrapper.prototype.mapChildrenToProps = function mapChildrenToProps(children, newProps) { 58264 var _this2 = this; 58265 58266 var arrayTypeChildren = {}; 58267 58268 react__WEBPACK_IMPORTED_MODULE_2__.Children.forEach(children, function (child) { 58269 if (!child || !child.props) { 58270 return; 58271 } 58272 58273 var _child$props = child.props, 58274 nestedChildren = _child$props.children, 58275 childProps = objectWithoutProperties(_child$props, ["children"]); 58276 58277 var newChildProps = convertReactPropstoHtmlAttributes(childProps); 58278 58279 _this2.warnOnInvalidChildren(child, nestedChildren); 58280 58281 switch (child.type) { 58282 case TAG_NAMES.LINK: 58283 case TAG_NAMES.META: 58284 case TAG_NAMES.NOSCRIPT: 58285 case TAG_NAMES.SCRIPT: 58286 case TAG_NAMES.STYLE: 58287 arrayTypeChildren = _this2.flattenArrayTypeChildren({ 58288 child: child, 58289 arrayTypeChildren: arrayTypeChildren, 58290 newChildProps: newChildProps, 58291 nestedChildren: nestedChildren 58292 }); 58293 break; 58294 58295 default: 58296 newProps = _this2.mapObjectTypeChildren({ 58297 child: child, 58298 newProps: newProps, 58299 newChildProps: newChildProps, 58300 nestedChildren: nestedChildren 58301 }); 58302 break; 58303 } 58304 }); 58305 58306 newProps = this.mapArrayTypeChildrenToProps(arrayTypeChildren, newProps); 58307 return newProps; 58308 }; 58309 58310 HelmetWrapper.prototype.render = function render() { 58311 var _props = this.props, 58312 children = _props.children, 58313 props = objectWithoutProperties(_props, ["children"]); 58314 58315 var newProps = _extends({}, props); 58316 58317 if (children) { 58318 newProps = this.mapChildrenToProps(children, newProps); 58319 } 58320 58321 return react__WEBPACK_IMPORTED_MODULE_2__.createElement(Component, newProps); 58322 }; 58323 58324 createClass(HelmetWrapper, null, [{ 58325 key: "canUseDOM", 58326 58327 58328 // Component.peek comes from react-side-effect: 58329 // For testing, you may use a static peek() method available on the returned component. 58330 // It lets you get the current state without resetting the mounted instance stack. 58331 // Donât use it for anything other than testing. 58332 58333 /** 58334 * @param {Object} base: {"target": "_blank", "href": "http://mysite.com/"} 58335 * @param {Object} bodyAttributes: {"className": "root"} 58336 * @param {String} defaultTitle: "Default Title" 58337 * @param {Boolean} defer: true 58338 * @param {Boolean} encodeSpecialCharacters: true 58339 * @param {Object} htmlAttributes: {"lang": "en", "amp": undefined} 58340 * @param {Array} link: [{"rel": "canonical", "href": "http://mysite.com/example"}] 58341 * @param {Array} meta: [{"name": "description", "content": "Test description"}] 58342 * @param {Array} noscript: [{"innerHTML": "<img src='http://mysite.com/js/test.js'"}] 58343 * @param {Function} onChangeClientState: "(newState) => console.log(newState)" 58344 * @param {Array} script: [{"type": "text/javascript", "src": "http://mysite.com/js/test.js"}] 58345 * @param {Array} style: [{"type": "text/css", "cssText": "div { display: block; color: blue; }"}] 58346 * @param {String} title: "Title" 58347 * @param {Object} titleAttributes: {"itemprop": "name"} 58348 * @param {String} titleTemplate: "MySite.com - %s" 58349 */ 58350 set: function set$$1(canUseDOM) { 58351 Component.canUseDOM = canUseDOM; 58352 } 58353 }]); 58354 return HelmetWrapper; 58355 }(react__WEBPACK_IMPORTED_MODULE_2__.Component), _class.propTypes = { 58356 base: (prop_types__WEBPACK_IMPORTED_MODULE_4___default().object), 58357 bodyAttributes: (prop_types__WEBPACK_IMPORTED_MODULE_4___default().object), 58358 children: prop_types__WEBPACK_IMPORTED_MODULE_4___default().oneOfType([prop_types__WEBPACK_IMPORTED_MODULE_4___default().arrayOf((prop_types__WEBPACK_IMPORTED_MODULE_4___default().node)), (prop_types__WEBPACK_IMPORTED_MODULE_4___default().node)]), 58359 defaultTitle: (prop_types__WEBPACK_IMPORTED_MODULE_4___default().string), 58360 defer: (prop_types__WEBPACK_IMPORTED_MODULE_4___default().bool), 58361 encodeSpecialCharacters: (prop_types__WEBPACK_IMPORTED_MODULE_4___default().bool), 58362 htmlAttributes: (prop_types__WEBPACK_IMPORTED_MODULE_4___default().object), 58363 link: prop_types__WEBPACK_IMPORTED_MODULE_4___default().arrayOf((prop_types__WEBPACK_IMPORTED_MODULE_4___default().object)), 58364 meta: prop_types__WEBPACK_IMPORTED_MODULE_4___default().arrayOf((prop_types__WEBPACK_IMPORTED_MODULE_4___default().object)), 58365 noscript: prop_types__WEBPACK_IMPORTED_MODULE_4___default().arrayOf((prop_types__WEBPACK_IMPORTED_MODULE_4___default().object)), 58366 onChangeClientState: (prop_types__WEBPACK_IMPORTED_MODULE_4___default().func), 58367 script: prop_types__WEBPACK_IMPORTED_MODULE_4___default().arrayOf((prop_types__WEBPACK_IMPORTED_MODULE_4___default().object)), 58368 style: prop_types__WEBPACK_IMPORTED_MODULE_4___default().arrayOf((prop_types__WEBPACK_IMPORTED_MODULE_4___default().object)), 58369 title: (prop_types__WEBPACK_IMPORTED_MODULE_4___default().string), 58370 titleAttributes: (prop_types__WEBPACK_IMPORTED_MODULE_4___default().object), 58371 titleTemplate: (prop_types__WEBPACK_IMPORTED_MODULE_4___default().string) 58372 }, _class.defaultProps = { 58373 defer: true, 58374 encodeSpecialCharacters: true 58375 }, _class.peek = Component.peek, _class.rewind = function () { 58376 var mappedState = Component.rewind(); 58377 if (!mappedState) { 58378 // provide fallback if mappedState is undefined 58379 mappedState = mapStateOnServer({ 58380 baseTag: [], 58381 bodyAttributes: {}, 58382 encodeSpecialCharacters: true, 58383 htmlAttributes: {}, 58384 linkTags: [], 58385 metaTags: [], 58386 noscriptTags: [], 58387 scriptTags: [], 58388 styleTags: [], 58389 title: "", 58390 titleAttributes: {} 58391 }); 58392 } 58393 58394 return mappedState; 58395 }, _temp; 58396}; 58397 58398var NullComponent = function NullComponent() { 58399 return null; 58400}; 58401 58402var HelmetSideEffects = react_side_effect__WEBPACK_IMPORTED_MODULE_0___default()(reducePropsToState, handleClientStateChange, mapStateOnServer)(NullComponent); 58403 58404var HelmetExport = Helmet(HelmetSideEffects); 58405HelmetExport.renderStatic = HelmetExport.rewind; 58406 58407/* harmony default export */ const __WEBPACK_DEFAULT_EXPORT__ = (HelmetExport); 58408 58409 58410 58411/***/ }), 58412
vendor: 7,264 bytes, lines 58413-58604
58413/***/ "./node_modules/react-is/cjs/react-is.development.js": 58414/*!***********************************************************!*\ 58415 !*** ./node_modules/react-is/cjs/react-is.development.js ***! 58416 \***********************************************************/ 58417/***/ ((__unused_webpack_module, exports) => { 58418 58419"use strict"; 58420/** @license React v16.13.1 58421 * react-is.development.js 58422 * 58423 * Copyright (c) Facebook, Inc. and its affiliates. 58424 * 58425 * This source code is licensed under the MIT license found in the 58426 * LICENSE file in the root directory of this source tree. 58427 */ 58428 58429 58430 58431 58432 58433if (true) { 58434 (function() { 58435'use strict'; 58436 58437// The Symbol used to tag the ReactElement-like types. If there is no native Symbol 58438// nor polyfill, then a plain number is used for performance. 58439var hasSymbol = typeof Symbol === 'function' && Symbol.for; 58440var REACT_ELEMENT_TYPE = hasSymbol ? Symbol.for('react.element') : 0xeac7; 58441var REACT_PORTAL_TYPE = hasSymbol ? Symbol.for('react.portal') : 0xeaca; 58442var REACT_FRAGMENT_TYPE = hasSymbol ? Symbol.for('react.fragment') : 0xeacb; 58443var REACT_STRICT_MODE_TYPE = hasSymbol ? Symbol.for('react.strict_mode') : 0xeacc; 58444var REACT_PROFILER_TYPE = hasSymbol ? Symbol.for('react.profiler') : 0xead2; 58445var REACT_PROVIDER_TYPE = hasSymbol ? Symbol.for('react.provider') : 0xeacd; 58446var REACT_CONTEXT_TYPE = hasSymbol ? Symbol.for('react.context') : 0xeace; // TODO: We don't use AsyncMode or ConcurrentMode anymore. They were temporary 58447// (unstable) APIs that have been removed. Can we remove the symbols? 58448 58449var REACT_ASYNC_MODE_TYPE = hasSymbol ? Symbol.for('react.async_mode') : 0xeacf; 58450var REACT_CONCURRENT_MODE_TYPE = hasSymbol ? Symbol.for('react.concurrent_mode') : 0xeacf; 58451var REACT_FORWARD_REF_TYPE = hasSymbol ? Symbol.for('react.forward_ref') : 0xead0; 58452var REACT_SUSPENSE_TYPE = hasSymbol ? Symbol.for('react.suspense') : 0xead1; 58453var REACT_SUSPENSE_LIST_TYPE = hasSymbol ? Symbol.for('react.suspense_list') : 0xead8; 58454var REACT_MEMO_TYPE = hasSymbol ? Symbol.for('react.memo') : 0xead3; 58455var REACT_LAZY_TYPE = hasSymbol ? Symbol.for('react.lazy') : 0xead4; 58456var REACT_BLOCK_TYPE = hasSymbol ? Symbol.for('react.block') : 0xead9; 58457var REACT_FUNDAMENTAL_TYPE = hasSymbol ? Symbol.for('react.fundamental') : 0xead5; 58458var REACT_RESPONDER_TYPE = hasSymbol ? Symbol.for('react.responder') : 0xead6; 58459var REACT_SCOPE_TYPE = hasSymbol ? Symbol.for('react.scope') : 0xead7; 58460 58461function isValidElementType(type) { 58462 return typeof type === 'string' || typeof type === 'function' || // Note: its typeof might be other than 'symbol' or 'number' if it's a polyfill. 58463 type === REACT_FRAGMENT_TYPE || type === REACT_CONCURRENT_MODE_TYPE || type === REACT_PROFILER_TYPE || type === REACT_STRICT_MODE_TYPE || type === REACT_SUSPENSE_TYPE || type === REACT_SUSPENSE_LIST_TYPE || typeof type === 'object' && type !== null && (type.$$typeof === REACT_LAZY_TYPE || type.$$typeof === REACT_MEMO_TYPE || type.$$typeof === REACT_PROVIDER_TYPE || type.$$typeof === REACT_CONTEXT_TYPE || type.$$typeof === REACT_FORWARD_REF_TYPE || type.$$typeof === REACT_FUNDAMENTAL_TYPE || type.$$typeof === REACT_RESPONDER_TYPE || type.$$typeof === REACT_SCOPE_TYPE || type.$$typeof === REACT_BLOCK_TYPE); 58464} 58465 58466function typeOf(object) { 58467 if (typeof object === 'object' && object !== null) { 58468 var $$typeof = object.$$typeof; 58469 58470 switch ($$typeof) { 58471 case REACT_ELEMENT_TYPE: 58472 var type = object.type; 58473 58474 switch (type) { 58475 case REACT_ASYNC_MODE_TYPE: 58476 case REACT_CONCURRENT_MODE_TYPE: 58477 case REACT_FRAGMENT_TYPE: 58478 case REACT_PROFILER_TYPE: 58479 case REACT_STRICT_MODE_TYPE: 58480 case REACT_SUSPENSE_TYPE: 58481 return type; 58482 58483 default: 58484 var $$typeofType = type && type.$$typeof; 58485 58486 switch ($$typeofType) { 58487 case REACT_CONTEXT_TYPE: 58488 case REACT_FORWARD_REF_TYPE: 58489 case REACT_LAZY_TYPE: 58490 case REACT_MEMO_TYPE: 58491 case REACT_PROVIDER_TYPE: 58492 return $$typeofType; 58493 58494 default: 58495 return $$typeof; 58496 } 58497 58498 } 58499 58500 case REACT_PORTAL_TYPE: 58501 return $$typeof; 58502 } 58503 } 58504 58505 return undefined; 58506} // AsyncMode is deprecated along with isAsyncMode 58507 58508var AsyncMode = REACT_ASYNC_MODE_TYPE; 58509var ConcurrentMode = REACT_CONCURRENT_MODE_TYPE; 58510var ContextConsumer = REACT_CONTEXT_TYPE; 58511var ContextProvider = REACT_PROVIDER_TYPE; 58512var Element = REACT_ELEMENT_TYPE; 58513var ForwardRef = REACT_FORWARD_REF_TYPE; 58514var Fragment = REACT_FRAGMENT_TYPE; 58515var Lazy = REACT_LAZY_TYPE; 58516var Memo = REACT_MEMO_TYPE; 58517var Portal = REACT_PORTAL_TYPE; 58518var Profiler = REACT_PROFILER_TYPE; 58519var StrictMode = REACT_STRICT_MODE_TYPE; 58520var Suspense = REACT_SUSPENSE_TYPE; 58521var hasWarnedAboutDeprecatedIsAsyncMode = false; // AsyncMode should be deprecated 58522 58523function isAsyncMode(object) { 58524 { 58525 if (!hasWarnedAboutDeprecatedIsAsyncMode) { 58526 hasWarnedAboutDeprecatedIsAsyncMode = true; // Using console['warn'] to evade Babel and ESLint 58527 58528 console['warn']('The ReactIs.isAsyncMode() alias has been deprecated, ' + 'and will be removed in React 17+. Update your code to use ' + 'ReactIs.isConcurrentMode() instead. It has the exact same API.'); 58529 } 58530 } 58531 58532 return isConcurrentMode(object) || typeOf(object) === REACT_ASYNC_MODE_TYPE; 58533} 58534function isConcurrentMode(object) { 58535 return typeOf(object) === REACT_CONCURRENT_MODE_TYPE; 58536} 58537function isContextConsumer(object) { 58538 return typeOf(object) === REACT_CONTEXT_TYPE; 58539} 58540function isContextProvider(object) { 58541 return typeOf(object) === REACT_PROVIDER_TYPE; 58542} 58543function isElement(object) { 58544 return typeof object === 'object' && object !== null && object.$$typeof === REACT_ELEMENT_TYPE; 58545} 58546function isForwardRef(object) { 58547 return typeOf(object) === REACT_FORWARD_REF_TYPE; 58548} 58549function isFragment(object) { 58550 return typeOf(object) === REACT_FRAGMENT_TYPE; 58551} 58552function isLazy(object) { 58553 return typeOf(object) === REACT_LAZY_TYPE; 58554} 58555function isMemo(object) { 58556 return typeOf(object) === REACT_MEMO_TYPE; 58557} 58558function isPortal(object) { 58559 return typeOf(object) === REACT_PORTAL_TYPE; 58560} 58561function isProfiler(object) { 58562 return typeOf(object) === REACT_PROFILER_TYPE; 58563} 58564function isStrictMode(object) { 58565 return typeOf(object) === REACT_STRICT_MODE_TYPE; 58566} 58567function isSuspense(object) { 58568 return typeOf(object) === REACT_SUSPENSE_TYPE; 58569} 58570 58571exports.AsyncMode = AsyncMode; 58572exports.ConcurrentMode = ConcurrentMode; 58573exports.ContextConsumer = ContextConsumer; 58574exports.ContextProvider = ContextProvider; 58575exports.Element = Element; 58576exports.ForwardRef = ForwardRef; 58577exports.Fragment = Fragment; 58578exports.Lazy = Lazy; 58579exports.Memo = Memo; 58580exports.Portal = Portal; 58581exports.Profiler = Profiler; 58582exports.StrictMode = StrictMode; 58583exports.Suspense = Suspense; 58584exports.isAsyncMode = isAsyncMode; 58585exports.isConcurrentMode = isConcurrentMode; 58586exports.isContextConsumer = isContextConsumer; 58587exports.isContextProvider = isContextProvider; 58588exports.isElement = isElement; 58589exports.isForwardRef = isForwardRef; 58590exports.isFragment = isFragment; 58591exports.isLazy = isLazy; 58592exports.isMemo = isMemo; 58593exports.isPortal = isPortal; 58594exports.isProfiler = isProfiler; 58595exports.isStrictMode = isStrictMode; 58596exports.isSuspense = isSuspense; 58597exports.isValidElementType = isValidElementType; 58598exports.typeOf = typeOf; 58599 })(); 58600} 58601 58602 58603/***/ }), 58604
vendor: 432 bytes, lines 58605-58620
58605/***/ "./node_modules/react-is/index.js": 58606/*!****************************************!*\ 58607 !*** ./node_modules/react-is/index.js ***! 58608 \****************************************/ 58609/***/ ((module, __unused_webpack_exports, __webpack_require__) => { 58610 58611"use strict"; 58612 58613 58614if (false) {} else { 58615 module.exports = __webpack_require__(/*! ./cjs/react-is.development.js */ "./node_modules/react-is/cjs/react-is.development.js"); 58616} 58617 58618 58619/***/ }), 58620
vendor: 69,735 bytes, lines 58621-60174
58621/***/ "./node_modules/react-router-dom/dist/index.js": 58622/*!*****************************************************!*\ 58623 !*** ./node_modules/react-router-dom/dist/index.js ***! 58624 \*****************************************************/ 58625/***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => { 58626 58627"use strict"; 58628var react__WEBPACK_IMPORTED_MODULE_0___namespace_cache; 58629var react_dom__WEBPACK_IMPORTED_MODULE_1___namespace_cache; 58630__webpack_require__.r(__webpack_exports__); 58631/* harmony export */ __webpack_require__.d(__webpack_exports__, { 58632/* harmony export */ AbortedDeferredError: () => (/* reexport safe */ react_router__WEBPACK_IMPORTED_MODULE_2__.AbortedDeferredError), 58633/* harmony export */ Await: () => (/* reexport safe */ react_router__WEBPACK_IMPORTED_MODULE_3__.Await), 58634/* harmony export */ BrowserRouter: () => (/* binding */ BrowserRouter), 58635/* harmony export */ Form: () => (/* binding */ Form), 58636/* harmony export */ HashRouter: () => (/* binding */ HashRouter), 58637/* harmony export */ Link: () => (/* binding */ Link), 58638/* harmony export */ MemoryRouter: () => (/* reexport safe */ react_router__WEBPACK_IMPORTED_MODULE_3__.MemoryRouter), 58639/* harmony export */ NavLink: () => (/* binding */ NavLink), 58640/* harmony export */ Navigate: () => (/* reexport safe */ react_router__WEBPACK_IMPORTED_MODULE_3__.Navigate), 58641/* harmony export */ NavigationType: () => (/* reexport safe */ react_router__WEBPACK_IMPORTED_MODULE_2__.Action), 58642/* harmony export */ Outlet: () => (/* reexport safe */ react_router__WEBPACK_IMPORTED_MODULE_3__.Outlet), 58643/* harmony export */ Route: () => (/* reexport safe */ react_router__WEBPACK_IMPORTED_MODULE_3__.Route), 58644/* harmony export */ Router: () => (/* reexport safe */ react_router__WEBPACK_IMPORTED_MODULE_3__.Router), 58645/* harmony export */ RouterProvider: () => (/* binding */ RouterProvider), 58646/* harmony export */ Routes: () => (/* reexport safe */ react_router__WEBPACK_IMPORTED_MODULE_3__.Routes), 58647/* harmony export */ ScrollRestoration: () => (/* binding */ ScrollRestoration), 58648/* harmony export */ UNSAFE_DataRouterContext: () => (/* reexport safe */ react_router__WEBPACK_IMPORTED_MODULE_3__.UNSAFE_DataRouterContext), 58649/* harmony export */ UNSAFE_DataRouterStateContext: () => (/* reexport safe */ react_router__WEBPACK_IMPORTED_MODULE_3__.UNSAFE_DataRouterStateContext), 58650/* harmony export */ UNSAFE_ErrorResponseImpl: () => (/* reexport safe */ react_router__WEBPACK_IMPORTED_MODULE_2__.UNSAFE_ErrorResponseImpl), 58651/* harmony export */ UNSAFE_FetchersContext: () => (/* binding */ FetchersContext), 58652/* harmony export */ UNSAFE_LocationContext: () => (/* reexport safe */ react_router__WEBPACK_IMPORTED_MODULE_3__.UNSAFE_LocationContext), 58653/* harmony export */ UNSAFE_NavigationContext: () => (/* reexport safe */ react_router__WEBPACK_IMPORTED_MODULE_3__.UNSAFE_NavigationContext), 58654/* harmony export */ UNSAFE_RouteContext: () => (/* reexport safe */ react_router__WEBPACK_IMPORTED_MODULE_3__.UNSAFE_RouteContext), 58655/* harmony export */ UNSAFE_ViewTransitionContext: () => (/* binding */ ViewTransitionContext), 58656/* harmony export */ UNSAFE_useRouteId: () => (/* reexport safe */ react_router__WEBPACK_IMPORTED_MODULE_3__.UNSAFE_useRouteId), 58657/* harmony export */ UNSAFE_useScrollRestoration: () => (/* binding */ useScrollRestoration), 58658/* harmony export */ createBrowserRouter: () => (/* binding */ createBrowserRouter), 58659/* harmony export */ createHashRouter: () => (/* binding */ createHashRouter), 58660/* harmony export */ createMemoryRouter: () => (/* reexport safe */ react_router__WEBPACK_IMPORTED_MODULE_3__.createMemoryRouter), 58661/* harmony export */ createPath: () => (/* reexport safe */ react_router__WEBPACK_IMPORTED_MODULE_2__.createPath), 58662/* harmony export */ createRoutesFromChildren: () => (/* reexport safe */ react_router__WEBPACK_IMPORTED_MODULE_3__.createRoutesFromChildren), 58663/* harmony export */ createRoutesFromElements: () => (/* reexport safe */ react_router__WEBPACK_IMPORTED_MODULE_3__.createRoutesFromElements), 58664/* harmony export */ createSearchParams: () => (/* binding */ createSearchParams), 58665/* harmony export */ defer: () => (/* reexport safe */ react_router__WEBPACK_IMPORTED_MODULE_2__.defer), 58666/* harmony export */ generatePath: () => (/* reexport safe */ react_router__WEBPACK_IMPORTED_MODULE_2__.generatePath), 58667/* harmony export */ isRouteErrorResponse: () => (/* reexport safe */ react_router__WEBPACK_IMPORTED_MODULE_2__.isRouteErrorResponse), 58668/* harmony export */ json: () => (/* reexport safe */ react_router__WEBPACK_IMPORTED_MODULE_2__.json), 58669/* harmony export */ matchPath: () => (/* reexport safe */ react_router__WEBPACK_IMPORTED_MODULE_2__.matchPath), 58670/* harmony export */ matchRoutes: () => (/* reexport safe */ react_router__WEBPACK_IMPORTED_MODULE_2__.matchRoutes), 58671/* harmony export */ parsePath: () => (/* reexport safe */ react_router__WEBPACK_IMPORTED_MODULE_2__.parsePath), 58672/* harmony export */ redirect: () => (/* reexport safe */ react_router__WEBPACK_IMPORTED_MODULE_2__.redirect), 58673/* harmony export */ redirectDocument: () => (/* reexport safe */ react_router__WEBPACK_IMPORTED_MODULE_2__.redirectDocument), 58674/* harmony export */ renderMatches: () => (/* reexport safe */ react_router__WEBPACK_IMPORTED_MODULE_3__.renderMatches), 58675/* harmony export */ replace: () => (/* reexport safe */ react_router__WEBPACK_IMPORTED_MODULE_2__.replace), 58676/* harmony export */ resolvePath: () => (/* reexport safe */ react_router__WEBPACK_IMPORTED_MODULE_2__.resolvePath), 58677/* harmony export */ unstable_HistoryRouter: () => (/* binding */ HistoryRouter), 58678/* harmony export */ unstable_usePrompt: () => (/* binding */ usePrompt), 58679/* harmony export */ useActionData: () => (/* reexport safe */ react_router__WEBPACK_IMPORTED_MODULE_3__.useActionData), 58680/* harmony export */ useAsyncError: () => (/* reexport safe */ react_router__WEBPACK_IMPORTED_MODULE_3__.useAsyncError), 58681/* harmony export */ useAsyncValue: () => (/* reexport safe */ react_router__WEBPACK_IMPORTED_MODULE_3__.useAsyncValue), 58682/* harmony export */ useBeforeUnload: () => (/* binding */ useBeforeUnload), 58683/* harmony export */ useBlocker: () => (/* reexport safe */ react_router__WEBPACK_IMPORTED_MODULE_3__.useBlocker), 58684/* harmony export */ useFetcher: () => (/* binding */ useFetcher), 58685/* harmony export */ useFetchers: () => (/* binding */ useFetchers), 58686/* harmony export */ useFormAction: () => (/* binding */ useFormAction), 58687/* harmony export */ useHref: () => (/* reexport safe */ react_router__WEBPACK_IMPORTED_MODULE_3__.useHref), 58688/* harmony export */ useInRouterContext: () => (/* reexport safe */ react_router__WEBPACK_IMPORTED_MODULE_3__.useInRouterContext), 58689/* harmony export */ useLinkClickHandler: () => (/* binding */ useLinkClickHandler), 58690/* harmony export */ useLoaderData: () => (/* reexport safe */ react_router__WEBPACK_IMPORTED_MODULE_3__.useLoaderData), 58691/* harmony export */ useLocation: () => (/* reexport safe */ react_router__WEBPACK_IMPORTED_MODULE_3__.useLocation), 58692/* harmony export */ useMatch: () => (/* reexport safe */ react_router__WEBPACK_IMPORTED_MODULE_3__.useMatch), 58693/* harmony export */ useMatches: () => (/* reexport safe */ react_router__WEBPACK_IMPORTED_MODULE_3__.useMatches), 58694/* harmony export */ useNavigate: () => (/* reexport safe */ react_router__WEBPACK_IMPORTED_MODULE_3__.useNavigate), 58695/* harmony export */ useNavigation: () => (/* reexport safe */ react_router__WEBPACK_IMPORTED_MODULE_3__.useNavigation), 58696/* harmony export */ useNavigationType: () => (/* reexport safe */ react_router__WEBPACK_IMPORTED_MODULE_3__.useNavigationType), 58697/* harmony export */ useOutlet: () => (/* reexport safe */ react_router__WEBPACK_IMPORTED_MODULE_3__.useOutlet), 58698/* harmony export */ useOutletContext: () => (/* reexport safe */ react_router__WEBPACK_IMPORTED_MODULE_3__.useOutletContext), 58699/* harmony export */ useParams: () => (/* reexport safe */ react_router__WEBPACK_IMPORTED_MODULE_3__.useParams), 58700/* harmony export */ useResolvedPath: () => (/* reexport safe */ react_router__WEBPACK_IMPORTED_MODULE_3__.useResolvedPath), 58701/* harmony export */ useRevalidator: () => (/* reexport safe */ react_router__WEBPACK_IMPORTED_MODULE_3__.useRevalidator), 58702/* harmony export */ useRouteError: () => (/* reexport safe */ react_router__WEBPACK_IMPORTED_MODULE_3__.useRouteError), 58703/* harmony export */ useRouteLoaderData: () => (/* reexport safe */ react_router__WEBPACK_IMPORTED_MODULE_3__.useRouteLoaderData), 58704/* harmony export */ useRoutes: () => (/* reexport safe */ react_router__WEBPACK_IMPORTED_MODULE_3__.useRoutes), 58705/* harmony export */ useSearchParams: () => (/* binding */ useSearchParams), 58706/* harmony export */ useSubmit: () => (/* binding */ useSubmit), 58707/* harmony export */ useViewTransitionState: () => (/* binding */ useViewTransitionState) 58708/* harmony export */ }); 58709/* harmony import */ var react__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! react */ "./node_modules/react/index.js"); 58710/* harmony import */ var react_dom__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! react-dom */ "./node_modules/react-dom/index.js"); 58711/* harmony import */ var react_router__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(/*! react-router */ "./node_modules/react-router/dist/index.js"); 58712/* harmony import */ var react_router__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! @remix-run/router */ "./node_modules/@remix-run/router/dist/router.js"); 58713/** 58714 * React Router DOM v6.28.1 58715 * 58716 * Copyright (c) Remix Software Inc. 58717 * 58718 * This source code is licensed under the MIT license found in the 58719 * LICENSE.md file in the root directory of this source tree. 58720 * 58721 * @license MIT 58722 */ 58723 58724 58725 58726 58727 58728 58729 58730function _extends() { 58731 _extends = Object.assign ? Object.assign.bind() : function (target) { 58732 for (var i = 1; i < arguments.length; i++) { 58733 var source = arguments[i]; 58734 for (var key in source) { 58735 if (Object.prototype.hasOwnProperty.call(source, key)) { 58736 target[key] = source[key]; 58737 } 58738 } 58739 } 58740 return target; 58741 }; 58742 return _extends.apply(this, arguments); 58743} 58744function _objectWithoutPropertiesLoose(source, excluded) { 58745 if (source == null) return {}; 58746 var target = {}; 58747 var sourceKeys = Object.keys(source); 58748 var key, i; 58749 for (i = 0; i < sourceKeys.length; i++) { 58750 key = sourceKeys[i]; 58751 if (excluded.indexOf(key) >= 0) continue; 58752 target[key] = source[key]; 58753 } 58754 return target; 58755} 58756 58757const defaultMethod = "get"; 58758const defaultEncType = "application/x-www-form-urlencoded"; 58759function isHtmlElement(object) { 58760 return object != null && typeof object.tagName === "string"; 58761} 58762function isButtonElement(object) { 58763 return isHtmlElement(object) && object.tagName.toLowerCase() === "button"; 58764} 58765function isFormElement(object) { 58766 return isHtmlElement(object) && object.tagName.toLowerCase() === "form"; 58767} 58768function isInputElement(object) { 58769 return isHtmlElement(object) && object.tagName.toLowerCase() === "input"; 58770} 58771function isModifiedEvent(event) { 58772 return !!(event.metaKey || event.altKey || event.ctrlKey || event.shiftKey); 58773} 58774function shouldProcessLinkClick(event, target) { 58775 return event.button === 0 && ( 58776 // Ignore everything but left clicks 58777 !target || target === "_self") && 58778 // Let browser handle "target=_blank" etc. 58779 !isModifiedEvent(event) // Ignore clicks with modifier keys 58780 ; 58781} 58782/** 58783 * Creates a URLSearchParams object using the given initializer. 58784 * 58785 * This is identical to `new URLSearchParams(init)` except it also 58786 * supports arrays as values in the object form of the initializer 58787 * instead of just strings. This is convenient when you need multiple 58788 * values for a given key, but don't want to use an array initializer. 58789 * 58790 * For example, instead of: 58791 * 58792 * let searchParams = new URLSearchParams([ 58793 * ['sort', 'name'], 58794 * ['sort', 'price'] 58795 * ]); 58796 * 58797 * you can do: 58798 * 58799 * let searchParams = createSearchParams({ 58800 * sort: ['name', 'price'] 58801 * }); 58802 */ 58803function createSearchParams(init) { 58804 if (init === void 0) { 58805 init = ""; 58806 } 58807 return new URLSearchParams(typeof init === "string" || Array.isArray(init) || init instanceof URLSearchParams ? init : Object.keys(init).reduce((memo, key) => { 58808 let value = init[key]; 58809 return memo.concat(Array.isArray(value) ? value.map(v => [key, v]) : [[key, value]]); 58810 }, [])); 58811} 58812function getSearchParamsForLocation(locationSearch, defaultSearchParams) { 58813 let searchParams = createSearchParams(locationSearch); 58814 if (defaultSearchParams) { 58815 // Use `defaultSearchParams.forEach(...)` here instead of iterating of 58816 // `defaultSearchParams.keys()` to work-around a bug in Firefox related to 58817 // web extensions. Relevant Bugzilla tickets: 58818 // https://bugzilla.mozilla.org/show_bug.cgi?id=1414602 58819 // https://bugzilla.mozilla.org/show_bug.cgi?id=1023984 58820 defaultSearchParams.forEach((_, key) => { 58821 if (!searchParams.has(key)) { 58822 defaultSearchParams.getAll(key).forEach(value => { 58823 searchParams.append(key, value); 58824 }); 58825 } 58826 }); 58827 } 58828 return searchParams; 58829} 58830// One-time check for submitter support 58831let _formDataSupportsSubmitter = null; 58832function isFormDataSubmitterSupported() { 58833 if (_formDataSupportsSubmitter === null) { 58834 try { 58835 new FormData(document.createElement("form"), 58836 // @ts-expect-error if FormData supports the submitter parameter, this will throw 58837 0); 58838 _formDataSupportsSubmitter = false; 58839 } catch (e) { 58840 _formDataSupportsSubmitter = true; 58841 } 58842 } 58843 return _formDataSupportsSubmitter; 58844} 58845const supportedFormEncTypes = new Set(["application/x-www-form-urlencoded", "multipart/form-data", "text/plain"]); 58846function getFormEncType(encType) { 58847 if (encType != null && !supportedFormEncTypes.has(encType)) { 58848 true ? (0,react_router__WEBPACK_IMPORTED_MODULE_2__.UNSAFE_warning)(false, "\"" + encType + "\" is not a valid `encType` for `<Form>`/`<fetcher.Form>` " + ("and will default to \"" + defaultEncType + "\"")) : 0; 58849 return null; 58850 } 58851 return encType; 58852} 58853function getFormSubmissionInfo(target, basename) { 58854 let method; 58855 let action; 58856 let encType; 58857 let formData; 58858 let body; 58859 if (isFormElement(target)) { 58860 // When grabbing the action from the element, it will have had the basename 58861 // prefixed to ensure non-JS scenarios work, so strip it since we'll 58862 // re-prefix in the router 58863 let attr = target.getAttribute("action"); 58864 action = attr ? (0,react_router__WEBPACK_IMPORTED_MODULE_2__.stripBasename)(attr, basename) : null; 58865 method = target.getAttribute("method") || defaultMethod; 58866 encType = getFormEncType(target.getAttribute("enctype")) || defaultEncType; 58867 formData = new FormData(target); 58868 } else if (isButtonElement(target) || isInputElement(target) && (target.type === "submit" || target.type === "image")) { 58869 let form = target.form; 58870 if (form == null) { 58871 throw new Error("Cannot submit a <button> or <input type=\"submit\"> without a <form>"); 58872 } 58873 // <button>/<input type="submit"> may override attributes of <form> 58874 // When grabbing the action from the element, it will have had the basename 58875 // prefixed to ensure non-JS scenarios work, so strip it since we'll 58876 // re-prefix in the router 58877 let attr = target.getAttribute("formaction") || form.getAttribute("action"); 58878 action = attr ? (0,react_router__WEBPACK_IMPORTED_MODULE_2__.stripBasename)(attr, basename) : null; 58879 method = target.getAttribute("formmethod") || form.getAttribute("method") || defaultMethod; 58880 encType = getFormEncType(target.getAttribute("formenctype")) || getFormEncType(form.getAttribute("enctype")) || defaultEncType; 58881 // Build a FormData object populated from a form and submitter 58882 formData = new FormData(form, target); 58883 // If this browser doesn't support the `FormData(el, submitter)` format, 58884 // then tack on the submitter value at the end. This is a lightweight 58885 // solution that is not 100% spec compliant. For complete support in older 58886 // browsers, consider using the `formdata-submitter-polyfill` package 58887 if (!isFormDataSubmitterSupported()) { 58888 let { 58889 name, 58890 type, 58891 value 58892 } = target; 58893 if (type === "image") { 58894 let prefix = name ? name + "." : ""; 58895 formData.append(prefix + "x", "0"); 58896 formData.append(prefix + "y", "0"); 58897 } else if (name) { 58898 formData.append(name, value); 58899 } 58900 } 58901 } else if (isHtmlElement(target)) { 58902 throw new Error("Cannot submit element that is not <form>, <button>, or " + "<input type=\"submit|image\">"); 58903 } else { 58904 method = defaultMethod; 58905 action = null; 58906 encType = defaultEncType; 58907 body = target; 58908 } 58909 // Send body for <Form encType="text/plain" so we encode it into text 58910 if (formData && encType === "text/plain") { 58911 body = formData; 58912 formData = undefined; 58913 } 58914 return { 58915 action, 58916 method: method.toLowerCase(), 58917 encType, 58918 formData, 58919 body 58920 }; 58921} 58922 58923const _excluded = ["onClick", "relative", "reloadDocument", "replace", "state", "target", "to", "preventScrollReset", "viewTransition"], 58924 _excluded2 = ["aria-current", "caseSensitive", "className", "end", "style", "to", "viewTransition", "children"], 58925 _excluded3 = ["fetcherKey", "navigate", "reloadDocument", "replace", "state", "method", "action", "onSubmit", "relative", "preventScrollReset", "viewTransition"]; 58926// HEY YOU! DON'T TOUCH THIS VARIABLE! 58927// 58928// It is replaced with the proper version at build time via a babel plugin in 58929// the rollup config. 58930// 58931// Export a global property onto the window for React Router detection by the 58932// Core Web Vitals Technology Report. This way they can configure the `wappalyzer` 58933// to detect and properly classify live websites as being built with React Router: 58934// https://github.com/HTTPArchive/wappalyzer/blob/main/src/technologies/r.json 58935const REACT_ROUTER_VERSION = "6"; 58936try { 58937 window.__reactRouterVersion = REACT_ROUTER_VERSION; 58938} catch (e) { 58939 // no-op 58940} 58941function createBrowserRouter(routes, opts) { 58942 return (0,react_router__WEBPACK_IMPORTED_MODULE_2__.createRouter)({ 58943 basename: opts == null ? void 0 : opts.basename, 58944 future: _extends({}, opts == null ? void 0 : opts.future, { 58945 v7_prependBasename: true 58946 }), 58947 history: (0,react_router__WEBPACK_IMPORTED_MODULE_2__.createBrowserHistory)({ 58948 window: opts == null ? void 0 : opts.window 58949 }), 58950 hydrationData: (opts == null ? void 0 : opts.hydrationData) || parseHydrationData(), 58951 routes, 58952 mapRouteProperties: react_router__WEBPACK_IMPORTED_MODULE_3__.UNSAFE_mapRouteProperties, 58953 dataStrategy: opts == null ? void 0 : opts.dataStrategy, 58954 patchRoutesOnNavigation: opts == null ? void 0 : opts.patchRoutesOnNavigation, 58955 window: opts == null ? void 0 : opts.window 58956 }).initialize(); 58957} 58958function createHashRouter(routes, opts) { 58959 return (0,react_router__WEBPACK_IMPORTED_MODULE_2__.createRouter)({ 58960 basename: opts == null ? void 0 : opts.basename, 58961 future: _extends({}, opts == null ? void 0 : opts.future, { 58962 v7_prependBasename: true 58963 }), 58964 history: (0,react_router__WEBPACK_IMPORTED_MODULE_2__.createHashHistory)({ 58965 window: opts == null ? void 0 : opts.window 58966 }), 58967 hydrationData: (opts == null ? void 0 : opts.hydrationData) || parseHydrationData(), 58968 routes, 58969 mapRouteProperties: react_router__WEBPACK_IMPORTED_MODULE_3__.UNSAFE_mapRouteProperties, 58970 dataStrategy: opts == null ? void 0 : opts.dataStrategy, 58971 patchRoutesOnNavigation: opts == null ? void 0 : opts.patchRoutesOnNavigation, 58972 window: opts == null ? void 0 : opts.window 58973 }).initialize(); 58974} 58975function parseHydrationData() { 58976 var _window; 58977 let state = (_window = window) == null ? void 0 : _window.__staticRouterHydrationData; 58978 if (state && state.errors) { 58979 state = _extends({}, state, { 58980 errors: deserializeErrors(state.errors) 58981 }); 58982 } 58983 return state; 58984} 58985function deserializeErrors(errors) { 58986 if (!errors) return null; 58987 let entries = Object.entries(errors); 58988 let serialized = {}; 58989 for (let [key, val] of entries) { 58990 // Hey you! If you change this, please change the corresponding logic in 58991 // serializeErrors in react-router-dom/server.tsx :) 58992 if (val && val.__type === "RouteErrorResponse") { 58993 serialized[key] = new react_router__WEBPACK_IMPORTED_MODULE_2__.UNSAFE_ErrorResponseImpl(val.status, val.statusText, val.data, val.internal === true); 58994 } else if (val && val.__type === "Error") { 58995 // Attempt to reconstruct the right type of Error (i.e., ReferenceError) 58996 if (val.__subType) { 58997 let ErrorConstructor = window[val.__subType]; 58998 if (typeof ErrorConstructor === "function") { 58999 try { 59000 // @ts-expect-error 59001 let error = new ErrorConstructor(val.message); 59002 // Wipe away the client-side stack trace. Nothing to fill it in with 59003 // because we don't serialize SSR stack traces for security reasons 59004 error.stack = ""; 59005 serialized[key] = error; 59006 } catch (e) { 59007 // no-op - fall through and create a normal Error 59008 } 59009 } 59010 } 59011 if (serialized[key] == null) { 59012 let error = new Error(val.message); 59013 // Wipe away the client-side stack trace. Nothing to fill it in with 59014 // because we don't serialize SSR stack traces for security reasons 59015 error.stack = ""; 59016 serialized[key] = error; 59017 } 59018 } else { 59019 serialized[key] = val; 59020 } 59021 } 59022 return serialized; 59023} 59024const ViewTransitionContext = /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0__.createContext({ 59025 isTransitioning: false 59026}); 59027if (true) { 59028 ViewTransitionContext.displayName = "ViewTransition"; 59029} 59030const FetchersContext = /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0__.createContext(new Map()); 59031if (true) { 59032 FetchersContext.displayName = "Fetchers"; 59033} 59034//#endregion 59035//////////////////////////////////////////////////////////////////////////////// 59036//#region Components 59037//////////////////////////////////////////////////////////////////////////////// 59038/** 59039 Webpack + React 17 fails to compile on any of the following because webpack 59040 complains that `startTransition` doesn't exist in `React`: 59041 * import { startTransition } from "react" 59042 * import * as React from from "react"; 59043 "startTransition" in React ? React.startTransition(() => setState()) : setState() 59044 * import * as React from from "react"; 59045 "startTransition" in React ? React["startTransition"](() => setState()) : setState() 59046 59047 Moving it to a constant such as the following solves the Webpack/React 17 issue: 59048 * import * as React from from "react"; 59049 const START_TRANSITION = "startTransition"; 59050 START_TRANSITION in React ? React[START_TRANSITION](() => setState()) : setState() 59051 59052 However, that introduces webpack/terser minification issues in production builds 59053 in React 18 where minification/obfuscation ends up removing the call of 59054 React.startTransition entirely from the first half of the ternary. Grabbing 59055 this exported reference once up front resolves that issue. 59056 59057 See https://github.com/remix-run/react-router/issues/10579 59058*/ 59059const START_TRANSITION = "startTransition"; 59060const startTransitionImpl = /*#__PURE__*/ (react__WEBPACK_IMPORTED_MODULE_0___namespace_cache || (react__WEBPACK_IMPORTED_MODULE_0___namespace_cache = __webpack_require__.t(react__WEBPACK_IMPORTED_MODULE_0__, 2)))[START_TRANSITION]; 59061const FLUSH_SYNC = "flushSync"; 59062const flushSyncImpl = /*#__PURE__*/ (react_dom__WEBPACK_IMPORTED_MODULE_1___namespace_cache || (react_dom__WEBPACK_IMPORTED_MODULE_1___namespace_cache = __webpack_require__.t(react_dom__WEBPACK_IMPORTED_MODULE_1__, 2)))[FLUSH_SYNC]; 59063const USE_ID = "useId"; 59064const useIdImpl = /*#__PURE__*/ (react__WEBPACK_IMPORTED_MODULE_0___namespace_cache || (react__WEBPACK_IMPORTED_MODULE_0___namespace_cache = __webpack_require__.t(react__WEBPACK_IMPORTED_MODULE_0__, 2)))[USE_ID]; 59065function startTransitionSafe(cb) { 59066 if (startTransitionImpl) { 59067 startTransitionImpl(cb); 59068 } else { 59069 cb(); 59070 } 59071} 59072function flushSyncSafe(cb) { 59073 if (flushSyncImpl) { 59074 flushSyncImpl(cb); 59075 } else { 59076 cb(); 59077 } 59078} 59079class Deferred { 59080 constructor() { 59081 this.status = "pending"; 59082 this.promise = new Promise((resolve, reject) => { 59083 this.resolve = value => { 59084 if (this.status === "pending") { 59085 this.status = "resolved"; 59086 resolve(value); 59087 } 59088 }; 59089 this.reject = reason => { 59090 if (this.status === "pending") { 59091 this.status = "rejected"; 59092 reject(reason); 59093 } 59094 }; 59095 }); 59096 } 59097} 59098/** 59099 * Given a Remix Router instance, render the appropriate UI 59100 */ 59101function RouterProvider(_ref) { 59102 let { 59103 fallbackElement, 59104 router, 59105 future 59106 } = _ref; 59107 let [state, setStateImpl] = react__WEBPACK_IMPORTED_MODULE_0__.useState(router.state); 59108 let [pendingState, setPendingState] = react__WEBPACK_IMPORTED_MODULE_0__.useState(); 59109 let [vtContext, setVtContext] = react__WEBPACK_IMPORTED_MODULE_0__.useState({ 59110 isTransitioning: false 59111 }); 59112 let [renderDfd, setRenderDfd] = react__WEBPACK_IMPORTED_MODULE_0__.useState(); 59113 let [transition, setTransition] = react__WEBPACK_IMPORTED_MODULE_0__.useState(); 59114 let [interruption, setInterruption] = react__WEBPACK_IMPORTED_MODULE_0__.useState(); 59115 let fetcherData = react__WEBPACK_IMPORTED_MODULE_0__.useRef(new Map()); 59116 let { 59117 v7_startTransition 59118 } = future || {}; 59119 let optInStartTransition = react__WEBPACK_IMPORTED_MODULE_0__.useCallback(cb => { 59120 if (v7_startTransition) { 59121 startTransitionSafe(cb); 59122 } else { 59123 cb(); 59124 } 59125 }, [v7_startTransition]); 59126 let setState = react__WEBPACK_IMPORTED_MODULE_0__.useCallback((newState, _ref2) => { 59127 let { 59128 deletedFetchers, 59129 flushSync: flushSync, 59130 viewTransitionOpts: viewTransitionOpts 59131 } = _ref2; 59132 deletedFetchers.forEach(key => fetcherData.current.delete(key)); 59133 newState.fetchers.forEach((fetcher, key) => { 59134 if (fetcher.data !== undefined) { 59135 fetcherData.current.set(key, fetcher.data); 59136 } 59137 }); 59138 let isViewTransitionUnavailable = router.window == null || router.window.document == null || typeof router.window.document.startViewTransition !== "function"; 59139 // If this isn't a view transition or it's not available in this browser, 59140 // just update and be done with it 59141 if (!viewTransitionOpts || isViewTransitionUnavailable) { 59142 if (flushSync) { 59143 flushSyncSafe(() => setStateImpl(newState)); 59144 } else { 59145 optInStartTransition(() => setStateImpl(newState)); 59146 } 59147 return; 59148 } 59149 // flushSync + startViewTransition 59150 if (flushSync) { 59151 // Flush through the context to mark DOM elements as transition=ing 59152 flushSyncSafe(() => { 59153 // Cancel any pending transitions 59154 if (transition) { 59155 renderDfd && renderDfd.resolve(); 59156 transition.skipTransition(); 59157 } 59158 setVtContext({ 59159 isTransitioning: true, 59160 flushSync: true, 59161 currentLocation: viewTransitionOpts.currentLocation, 59162 nextLocation: viewTransitionOpts.nextLocation 59163 }); 59164 }); 59165 // Update the DOM 59166 let t = router.window.document.startViewTransition(() => { 59167 flushSyncSafe(() => setStateImpl(newState)); 59168 }); 59169 // Clean up after the animation completes 59170 t.finished.finally(() => { 59171 flushSyncSafe(() => { 59172 setRenderDfd(undefined); 59173 setTransition(undefined); 59174 setPendingState(undefined); 59175 setVtContext({ 59176 isTransitioning: false 59177 }); 59178 }); 59179 }); 59180 flushSyncSafe(() => setTransition(t)); 59181 return; 59182 } 59183 // startTransition + startViewTransition 59184 if (transition) { 59185 // Interrupting an in-progress transition, cancel and let everything flush 59186 // out, and then kick off a new transition from the interruption state 59187 renderDfd && renderDfd.resolve(); 59188 transition.skipTransition(); 59189 setInterruption({ 59190 state: newState, 59191 currentLocation: viewTransitionOpts.currentLocation, 59192 nextLocation: viewTransitionOpts.nextLocation 59193 }); 59194 } else { 59195 // Completed navigation update with opted-in view transitions, let 'er rip 59196 setPendingState(newState); 59197 setVtContext({ 59198 isTransitioning: true, 59199 flushSync: false, 59200 currentLocation: viewTransitionOpts.currentLocation, 59201 nextLocation: viewTransitionOpts.nextLocation 59202 }); 59203 } 59204 }, [router.window, transition, renderDfd, fetcherData, optInStartTransition]); 59205 // Need to use a layout effect here so we are subscribed early enough to 59206 // pick up on any render-driven redirects/navigations (useEffect/<Navigate>) 59207 react__WEBPACK_IMPORTED_MODULE_0__.useLayoutEffect(() => router.subscribe(setState), [router, setState]); 59208 // When we start a view transition, create a Deferred we can use for the 59209 // eventual "completed" render 59210 react__WEBPACK_IMPORTED_MODULE_0__.useEffect(() => { 59211 if (vtContext.isTransitioning && !vtContext.flushSync) { 59212 setRenderDfd(new Deferred()); 59213 } 59214 }, [vtContext]); 59215 // Once the deferred is created, kick off startViewTransition() to update the 59216 // DOM and then wait on the Deferred to resolve (indicating the DOM update has 59217 // happened) 59218 react__WEBPACK_IMPORTED_MODULE_0__.useEffect(() => { 59219 if (renderDfd && pendingState && router.window) { 59220 let newState = pendingState; 59221 let renderPromise = renderDfd.promise; 59222 let transition = router.window.document.startViewTransition(async () => { 59223 optInStartTransition(() => setStateImpl(newState)); 59224 await renderPromise; 59225 }); 59226 transition.finished.finally(() => { 59227 setRenderDfd(undefined); 59228 setTransition(undefined); 59229 setPendingState(undefined); 59230 setVtContext({ 59231 isTransitioning: false 59232 }); 59233 }); 59234 setTransition(transition); 59235 } 59236 }, [optInStartTransition, pendingState, renderDfd, router.window]); 59237 // When the new location finally renders and is committed to the DOM, this 59238 // effect will run to resolve the transition 59239 react__WEBPACK_IMPORTED_MODULE_0__.useEffect(() => { 59240 if (renderDfd && pendingState && state.location.key === pendingState.location.key) { 59241 renderDfd.resolve(); 59242 } 59243 }, [renderDfd, transition, state.location, pendingState]); 59244 // If we get interrupted with a new navigation during a transition, we skip 59245 // the active transition, let it cleanup, then kick it off again here 59246 react__WEBPACK_IMPORTED_MODULE_0__.useEffect(() => { 59247 if (!vtContext.isTransitioning && interruption) { 59248 setPendingState(interruption.state); 59249 setVtContext({ 59250 isTransitioning: true, 59251 flushSync: false, 59252 currentLocation: interruption.currentLocation, 59253 nextLocation: interruption.nextLocation 59254 }); 59255 setInterruption(undefined); 59256 } 59257 }, [vtContext.isTransitioning, interruption]); 59258 react__WEBPACK_IMPORTED_MODULE_0__.useEffect(() => { 59259 true ? (0,react_router__WEBPACK_IMPORTED_MODULE_2__.UNSAFE_warning)(fallbackElement == null || !router.future.v7_partialHydration, "`<RouterProvider fallbackElement>` is deprecated when using " + "`v7_partialHydration`, use a `HydrateFallback` component instead") : 0; 59260 // Only log this once on initial mount 59261 // eslint-disable-next-line react-hooks/exhaustive-deps 59262 }, []); 59263 let navigator = react__WEBPACK_IMPORTED_MODULE_0__.useMemo(() => { 59264 return { 59265 createHref: router.createHref, 59266 encodeLocation: router.encodeLocation, 59267 go: n => router.navigate(n), 59268 push: (to, state, opts) => router.navigate(to, { 59269 state, 59270 preventScrollReset: opts == null ? void 0 : opts.preventScrollReset 59271 }), 59272 replace: (to, state, opts) => router.navigate(to, { 59273 replace: true, 59274 state, 59275 preventScrollReset: opts == null ? void 0 : opts.preventScrollReset 59276 }) 59277 }; 59278 }, [router]); 59279 let basename = router.basename || "/"; 59280 let dataRouterContext = react__WEBPACK_IMPORTED_MODULE_0__.useMemo(() => ({ 59281 router, 59282 navigator, 59283 static: false, 59284 basename 59285 }), [router, navigator, basename]); 59286 let routerFuture = react__WEBPACK_IMPORTED_MODULE_0__.useMemo(() => ({ 59287 v7_relativeSplatPath: router.future.v7_relativeSplatPath 59288 }), [router.future.v7_relativeSplatPath]); 59289 react__WEBPACK_IMPORTED_MODULE_0__.useEffect(() => (0,react_router__WEBPACK_IMPORTED_MODULE_3__.UNSAFE_logV6DeprecationWarnings)(future, router.future), [future, router.future]); 59290 // The fragment and {null} here are important! We need them to keep React 18's 59291 // useId happy when we are server-rendering since we may have a <script> here 59292 // containing the hydrated server-side staticContext (from StaticRouterProvider). 59293 // useId relies on the component tree structure to generate deterministic id's 59294 // so we need to ensure it remains the same on the client even though 59295 // we don't need the <script> tag 59296 return /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0__.createElement(react__WEBPACK_IMPORTED_MODULE_0__.Fragment, null, /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0__.createElement(react_router__WEBPACK_IMPORTED_MODULE_3__.UNSAFE_DataRouterContext.Provider, { 59297 value: dataRouterContext 59298 }, /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0__.createElement(react_router__WEBPACK_IMPORTED_MODULE_3__.UNSAFE_DataRouterStateContext.Provider, { 59299 value: state 59300 }, /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0__.createElement(FetchersContext.Provider, { 59301 value: fetcherData.current 59302 }, /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0__.createElement(ViewTransitionContext.Provider, { 59303 value: vtContext 59304 }, /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0__.createElement(react_router__WEBPACK_IMPORTED_MODULE_3__.Router, { 59305 basename: basename, 59306 location: state.location, 59307 navigationType: state.historyAction, 59308 navigator: navigator, 59309 future: routerFuture 59310 }, state.initialized || router.future.v7_partialHydration ? /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0__.createElement(MemoizedDataRoutes, { 59311 routes: router.routes, 59312 future: router.future, 59313 state: state 59314 }) : fallbackElement))))), null); 59315} 59316// Memoize to avoid re-renders when updating `ViewTransitionContext` 59317const MemoizedDataRoutes = /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0__.memo(DataRoutes); 59318function DataRoutes(_ref3) { 59319 let { 59320 routes, 59321 future, 59322 state 59323 } = _ref3; 59324 return (0,react_router__WEBPACK_IMPORTED_MODULE_3__.UNSAFE_useRoutesImpl)(routes, undefined, state, future); 59325} 59326/** 59327 * A `<Router>` for use in web browsers. Provides the cleanest URLs. 59328 */ 59329function BrowserRouter(_ref4) { 59330 let { 59331 basename, 59332 children, 59333 future, 59334 window 59335 } = _ref4; 59336 let historyRef = react__WEBPACK_IMPORTED_MODULE_0__.useRef(); 59337 if (historyRef.current == null) { 59338 historyRef.current = (0,react_router__WEBPACK_IMPORTED_MODULE_2__.createBrowserHistory)({ 59339 window, 59340 v5Compat: true 59341 }); 59342 } 59343 let history = historyRef.current; 59344 let [state, setStateImpl] = react__WEBPACK_IMPORTED_MODULE_0__.useState({ 59345 action: history.action, 59346 location: history.location 59347 }); 59348 let { 59349 v7_startTransition 59350 } = future || {}; 59351 let setState = react__WEBPACK_IMPORTED_MODULE_0__.useCallback(newState => { 59352 v7_startTransition && startTransitionImpl ? startTransitionImpl(() => setStateImpl(newState)) : setStateImpl(newState); 59353 }, [setStateImpl, v7_startTransition]); 59354 react__WEBPACK_IMPORTED_MODULE_0__.useLayoutEffect(() => history.listen(setState), [history, setState]); 59355 react__WEBPACK_IMPORTED_MODULE_0__.useEffect(() => (0,react_router__WEBPACK_IMPORTED_MODULE_3__.UNSAFE_logV6DeprecationWarnings)(future), [future]); 59356 return /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0__.createElement(react_router__WEBPACK_IMPORTED_MODULE_3__.Router, { 59357 basename: basename, 59358 children: children, 59359 location: state.location, 59360 navigationType: state.action, 59361 navigator: history, 59362 future: future 59363 }); 59364} 59365/** 59366 * A `<Router>` for use in web browsers. Stores the location in the hash 59367 * portion of the URL so it is not sent to the server. 59368 */ 59369function HashRouter(_ref5) { 59370 let { 59371 basename, 59372 children, 59373 future, 59374 window 59375 } = _ref5; 59376 let historyRef = react__WEBPACK_IMPORTED_MODULE_0__.useRef(); 59377 if (historyRef.current == null) { 59378 historyRef.current = (0,react_router__WEBPACK_IMPORTED_MODULE_2__.createHashHistory)({ 59379 window, 59380 v5Compat: true 59381 }); 59382 } 59383 let history = historyRef.current; 59384 let [state, setStateImpl] = react__WEBPACK_IMPORTED_MODULE_0__.useState({ 59385 action: history.action, 59386 location: history.location 59387 }); 59388 let { 59389 v7_startTransition 59390 } = future || {}; 59391 let setState = react__WEBPACK_IMPORTED_MODULE_0__.useCallback(newState => { 59392 v7_startTransition && startTransitionImpl ? startTransitionImpl(() => setStateImpl(newState)) : setStateImpl(newState); 59393 }, [setStateImpl, v7_startTransition]); 59394 react__WEBPACK_IMPORTED_MODULE_0__.useLayoutEffect(() => history.listen(setState), [history, setState]); 59395 react__WEBPACK_IMPORTED_MODULE_0__.useEffect(() => (0,react_router__WEBPACK_IMPORTED_MODULE_3__.UNSAFE_logV6DeprecationWarnings)(future), [future]); 59396 return /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0__.createElement(react_router__WEBPACK_IMPORTED_MODULE_3__.Router, { 59397 basename: basename, 59398 children: children, 59399 location: state.location, 59400 navigationType: state.action, 59401 navigator: history, 59402 future: future 59403 }); 59404} 59405/** 59406 * A `<Router>` that accepts a pre-instantiated history object. It's important 59407 * to note that using your own history object is highly discouraged and may add 59408 * two versions of the history library to your bundles unless you use the same 59409 * version of the history library that React Router uses internally. 59410 */ 59411function HistoryRouter(_ref6) { 59412 let { 59413 basename, 59414 children, 59415 future, 59416 history 59417 } = _ref6; 59418 let [state, setStateImpl] = react__WEBPACK_IMPORTED_MODULE_0__.useState({ 59419 action: history.action, 59420 location: history.location 59421 }); 59422 let { 59423 v7_startTransition 59424 } = future || {}; 59425 let setState = react__WEBPACK_IMPORTED_MODULE_0__.useCallback(newState => { 59426 v7_startTransition && startTransitionImpl ? startTransitionImpl(() => setStateImpl(newState)) : setStateImpl(newState); 59427 }, [setStateImpl, v7_startTransition]); 59428 react__WEBPACK_IMPORTED_MODULE_0__.useLayoutEffect(() => history.listen(setState), [history, setState]); 59429 react__WEBPACK_IMPORTED_MODULE_0__.useEffect(() => (0,react_router__WEBPACK_IMPORTED_MODULE_3__.UNSAFE_logV6DeprecationWarnings)(future), [future]); 59430 return /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0__.createElement(react_router__WEBPACK_IMPORTED_MODULE_3__.Router, { 59431 basename: basename, 59432 children: children, 59433 location: state.location, 59434 navigationType: state.action, 59435 navigator: history, 59436 future: future 59437 }); 59438} 59439if (true) { 59440 HistoryRouter.displayName = "unstable_HistoryRouter"; 59441} 59442const isBrowser = typeof window !== "undefined" && typeof window.document !== "undefined" && typeof window.document.createElement !== "undefined"; 59443const ABSOLUTE_URL_REGEX = /^(?:[a-z][a-z0-9+.-]*:|\/\/)/i; 59444/** 59445 * The public API for rendering a history-aware `<a>`. 59446 */ 59447const Link = /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0__.forwardRef(function LinkWithRef(_ref7, ref) { 59448 let { 59449 onClick, 59450 relative, 59451 reloadDocument, 59452 replace, 59453 state, 59454 target, 59455 to, 59456 preventScrollReset, 59457 viewTransition 59458 } = _ref7, 59459 rest = _objectWithoutPropertiesLoose(_ref7, _excluded); 59460 let { 59461 basename 59462 } = react__WEBPACK_IMPORTED_MODULE_0__.useContext(react_router__WEBPACK_IMPORTED_MODULE_3__.UNSAFE_NavigationContext); 59463 // Rendered into <a href> for absolute URLs 59464 let absoluteHref; 59465 let isExternal = false; 59466 if (typeof to === "string" && ABSOLUTE_URL_REGEX.test(to)) { 59467 // Render the absolute href server- and client-side 59468 absoluteHref = to; 59469 // Only check for external origins client-side 59470 if (isBrowser) { 59471 try { 59472 let currentUrl = new URL(window.location.href); 59473 let targetUrl = to.startsWith("//") ? new URL(currentUrl.protocol + to) : new URL(to); 59474 let path = (0,react_router__WEBPACK_IMPORTED_MODULE_2__.stripBasename)(targetUrl.pathname, basename); 59475 if (targetUrl.origin === currentUrl.origin && path != null) { 59476 // Strip the protocol/origin/basename for same-origin absolute URLs 59477 to = path + targetUrl.search + targetUrl.hash; 59478 } else { 59479 isExternal = true; 59480 } 59481 } catch (e) { 59482 // We can't do external URL detection without a valid URL 59483 true ? (0,react_router__WEBPACK_IMPORTED_MODULE_2__.UNSAFE_warning)(false, "<Link to=\"" + to + "\"> contains an invalid URL which will probably break " + "when clicked - please update to a valid URL path.") : 0; 59484 } 59485 } 59486 } 59487 // Rendered into <a href> for relative URLs 59488 let href = (0,react_router__WEBPACK_IMPORTED_MODULE_3__.useHref)(to, { 59489 relative 59490 }); 59491 let internalOnClick = useLinkClickHandler(to, { 59492 replace, 59493 state, 59494 target, 59495 preventScrollReset, 59496 relative, 59497 viewTransition 59498 }); 59499 function handleClick(event) { 59500 if (onClick) onClick(event); 59501 if (!event.defaultPrevented) { 59502 internalOnClick(event); 59503 } 59504 } 59505 return ( 59506 /*#__PURE__*/ 59507 // eslint-disable-next-line jsx-a11y/anchor-has-content 59508 react__WEBPACK_IMPORTED_MODULE_0__.createElement("a", _extends({}, rest, { 59509 href: absoluteHref || href, 59510 onClick: isExternal || reloadDocument ? onClick : handleClick, 59511 ref: ref, 59512 target: target 59513 })) 59514 ); 59515}); 59516if (true) { 59517 Link.displayName = "Link"; 59518} 59519/** 59520 * A `<Link>` wrapper that knows if it's "active" or not. 59521 */ 59522const NavLink = /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0__.forwardRef(function NavLinkWithRef(_ref8, ref) { 59523 let { 59524 "aria-current": ariaCurrentProp = "page", 59525 caseSensitive = false, 59526 className: classNameProp = "", 59527 end = false, 59528 style: styleProp, 59529 to, 59530 viewTransition, 59531 children 59532 } = _ref8, 59533 rest = _objectWithoutPropertiesLoose(_ref8, _excluded2); 59534 let path = (0,react_router__WEBPACK_IMPORTED_MODULE_3__.useResolvedPath)(to, { 59535 relative: rest.relative 59536 }); 59537 let location = (0,react_router__WEBPACK_IMPORTED_MODULE_3__.useLocation)(); 59538 let routerState = react__WEBPACK_IMPORTED_MODULE_0__.useContext(react_router__WEBPACK_IMPORTED_MODULE_3__.UNSAFE_DataRouterStateContext); 59539 let { 59540 navigator, 59541 basename 59542 } = react__WEBPACK_IMPORTED_MODULE_0__.useContext(react_router__WEBPACK_IMPORTED_MODULE_3__.UNSAFE_NavigationContext); 59543 let isTransitioning = routerState != null && 59544 // Conditional usage is OK here because the usage of a data router is static 59545 // eslint-disable-next-line react-hooks/rules-of-hooks 59546 useViewTransitionState(path) && viewTransition === true; 59547 let toPathname = navigator.encodeLocation ? navigator.encodeLocation(path).pathname : path.pathname; 59548 let locationPathname = location.pathname; 59549 let nextLocationPathname = routerState && routerState.navigation && routerState.navigation.location ? routerState.navigation.location.pathname : null; 59550 if (!caseSensitive) { 59551 locationPathname = locationPathname.toLowerCase(); 59552 nextLocationPathname = nextLocationPathname ? nextLocationPathname.toLowerCase() : null; 59553 toPathname = toPathname.toLowerCase(); 59554 } 59555 if (nextLocationPathname && basename) { 59556 nextLocationPathname = (0,react_router__WEBPACK_IMPORTED_MODULE_2__.stripBasename)(nextLocationPathname, basename) || nextLocationPathname; 59557 } 59558 // If the `to` has a trailing slash, look at that exact spot. Otherwise, 59559 // we're looking for a slash _after_ what's in `to`. For example: 59560 // 59561 // <NavLink to="/users"> and <NavLink to="/users/"> 59562 // both want to look for a / at index 6 to match URL `/users/matt` 59563 const endSlashPosition = toPathname !== "/" && toPathname.endsWith("/") ? toPathname.length - 1 : toPathname.length; 59564 let isActive = locationPathname === toPathname || !end && locationPathname.startsWith(toPathname) && locationPathname.charAt(endSlashPosition) === "/"; 59565 let isPending = nextLocationPathname != null && (nextLocationPathname === toPathname || !end && nextLocationPathname.startsWith(toPathname) && nextLocationPathname.charAt(toPathname.length) === "/"); 59566 let renderProps = { 59567 isActive, 59568 isPending, 59569 isTransitioning 59570 }; 59571 let ariaCurrent = isActive ? ariaCurrentProp : undefined; 59572 let className; 59573 if (typeof classNameProp === "function") { 59574 className = classNameProp(renderProps); 59575 } else { 59576 // If the className prop is not a function, we use a default `active` 59577 // class for <NavLink />s that are active. In v5 `active` was the default 59578 // value for `activeClassName`, but we are removing that API and can still 59579 // use the old default behavior for a cleaner upgrade path and keep the 59580 // simple styling rules working as they currently do. 59581 className = [classNameProp, isActive ? "active" : null, isPending ? "pending" : null, isTransitioning ? "transitioning" : null].filter(Boolean).join(" "); 59582 } 59583 let style = typeof styleProp === "function" ? styleProp(renderProps) : styleProp; 59584 return /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0__.createElement(Link, _extends({}, rest, { 59585 "aria-current": ariaCurrent, 59586 className: className, 59587 ref: ref, 59588 style: style, 59589 to: to, 59590 viewTransition: viewTransition 59591 }), typeof children === "function" ? children(renderProps) : children); 59592}); 59593if (true) { 59594 NavLink.displayName = "NavLink"; 59595} 59596/** 59597 * A `@remix-run/router`-aware `<form>`. It behaves like a normal form except 59598 * that the interaction with the server is with `fetch` instead of new document 59599 * requests, allowing components to add nicer UX to the page as the form is 59600 * submitted and returns with data. 59601 */ 59602const Form = /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0__.forwardRef((_ref9, forwardedRef) => { 59603 let { 59604 fetcherKey, 59605 navigate, 59606 reloadDocument, 59607 replace, 59608 state, 59609 method = defaultMethod, 59610 action, 59611 onSubmit, 59612 relative, 59613 preventScrollReset, 59614 viewTransition 59615 } = _ref9, 59616 props = _objectWithoutPropertiesLoose(_ref9, _excluded3); 59617 let submit = useSubmit(); 59618 let formAction = useFormAction(action, { 59619 relative 59620 }); 59621 let formMethod = method.toLowerCase() === "get" ? "get" : "post"; 59622 let submitHandler = event => { 59623 onSubmit && onSubmit(event); 59624 if (event.defaultPrevented) return; 59625 event.preventDefault(); 59626 let submitter = event.nativeEvent.submitter; 59627 let submitMethod = (submitter == null ? void 0 : submitter.getAttribute("formmethod")) || method; 59628 submit(submitter || event.currentTarget, { 59629 fetcherKey, 59630 method: submitMethod, 59631 navigate, 59632 replace, 59633 state, 59634 relative, 59635 preventScrollReset, 59636 viewTransition 59637 }); 59638 }; 59639 return /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0__.createElement("form", _extends({ 59640 ref: forwardedRef, 59641 method: formMethod, 59642 action: formAction, 59643 onSubmit: reloadDocument ? onSubmit : submitHandler 59644 }, props)); 59645}); 59646if (true) { 59647 Form.displayName = "Form"; 59648} 59649/** 59650 * This component will emulate the browser's scroll restoration on location 59651 * changes. 59652 */ 59653function ScrollRestoration(_ref10) { 59654 let { 59655 getKey, 59656 storageKey 59657 } = _ref10; 59658 useScrollRestoration({ 59659 getKey, 59660 storageKey 59661 }); 59662 return null; 59663} 59664if (true) { 59665 ScrollRestoration.displayName = "ScrollRestoration"; 59666} 59667//#endregion 59668//////////////////////////////////////////////////////////////////////////////// 59669//#region Hooks 59670//////////////////////////////////////////////////////////////////////////////// 59671var DataRouterHook; 59672(function (DataRouterHook) { 59673 DataRouterHook["UseScrollRestoration"] = "useScrollRestoration"; 59674 DataRouterHook["UseSubmit"] = "useSubmit"; 59675 DataRouterHook["UseSubmitFetcher"] = "useSubmitFetcher"; 59676 DataRouterHook["UseFetcher"] = "useFetcher"; 59677 DataRouterHook["useViewTransitionState"] = "useViewTransitionState"; 59678})(DataRouterHook || (DataRouterHook = {})); 59679var DataRouterStateHook; 59680(function (DataRouterStateHook) { 59681 DataRouterStateHook["UseFetcher"] = "useFetcher"; 59682 DataRouterStateHook["UseFetchers"] = "useFetchers"; 59683 DataRouterStateHook["UseScrollRestoration"] = "useScrollRestoration"; 59684})(DataRouterStateHook || (DataRouterStateHook = {})); 59685// Internal hooks 59686function getDataRouterConsoleError(hookName) { 59687 return hookName + " must be used within a data router. See https://reactrouter.com/v6/routers/picking-a-router."; 59688} 59689function useDataRouterContext(hookName) { 59690 let ctx = react__WEBPACK_IMPORTED_MODULE_0__.useContext(react_router__WEBPACK_IMPORTED_MODULE_3__.UNSAFE_DataRouterContext); 59691 !ctx ? true ? (0,react_router__WEBPACK_IMPORTED_MODULE_2__.UNSAFE_invariant)(false, getDataRouterConsoleError(hookName)) : 0 : void 0; 59692 return ctx; 59693} 59694function useDataRouterState(hookName) { 59695 let state = react__WEBPACK_IMPORTED_MODULE_0__.useContext(react_router__WEBPACK_IMPORTED_MODULE_3__.UNSAFE_DataRouterStateContext); 59696 !state ? true ? (0,react_router__WEBPACK_IMPORTED_MODULE_2__.UNSAFE_invariant)(false, getDataRouterConsoleError(hookName)) : 0 : void 0; 59697 return state; 59698} 59699// External hooks 59700/** 59701 * Handles the click behavior for router `<Link>` components. This is useful if 59702 * you need to create custom `<Link>` components with the same click behavior we 59703 * use in our exported `<Link>`. 59704 */ 59705function useLinkClickHandler(to, _temp) { 59706 let { 59707 target, 59708 replace: replaceProp, 59709 state, 59710 preventScrollReset, 59711 relative, 59712 viewTransition 59713 } = _temp === void 0 ? {} : _temp; 59714 let navigate = (0,react_router__WEBPACK_IMPORTED_MODULE_3__.useNavigate)(); 59715 let location = (0,react_router__WEBPACK_IMPORTED_MODULE_3__.useLocation)(); 59716 let path = (0,react_router__WEBPACK_IMPORTED_MODULE_3__.useResolvedPath)(to, { 59717 relative 59718 }); 59719 return react__WEBPACK_IMPORTED_MODULE_0__.useCallback(event => { 59720 if (shouldProcessLinkClick(event, target)) { 59721 event.preventDefault(); 59722 // If the URL hasn't changed, a regular <a> will do a replace instead of 59723 // a push, so do the same here unless the replace prop is explicitly set 59724 let replace = replaceProp !== undefined ? replaceProp : (0,react_router__WEBPACK_IMPORTED_MODULE_2__.createPath)(location) === (0,react_router__WEBPACK_IMPORTED_MODULE_2__.createPath)(path); 59725 navigate(to, { 59726 replace, 59727 state, 59728 preventScrollReset, 59729 relative, 59730 viewTransition 59731 }); 59732 } 59733 }, [location, navigate, path, replaceProp, state, target, to, preventScrollReset, relative, viewTransition]); 59734} 59735/** 59736 * A convenient wrapper for reading and writing search parameters via the 59737 * URLSearchParams interface. 59738 */ 59739function useSearchParams(defaultInit) { 59740 true ? (0,react_router__WEBPACK_IMPORTED_MODULE_2__.UNSAFE_warning)(typeof URLSearchParams !== "undefined", "You cannot use the `useSearchParams` hook in a browser that does not " + "support the URLSearchParams API. If you need to support Internet " + "Explorer 11, we recommend you load a polyfill such as " + "https://github.com/ungap/url-search-params.") : 0; 59741 let defaultSearchParamsRef = react__WEBPACK_IMPORTED_MODULE_0__.useRef(createSearchParams(defaultInit)); 59742 let hasSetSearchParamsRef = react__WEBPACK_IMPORTED_MODULE_0__.useRef(false); 59743 let location = (0,react_router__WEBPACK_IMPORTED_MODULE_3__.useLocation)(); 59744 let searchParams = react__WEBPACK_IMPORTED_MODULE_0__.useMemo(() => 59745 // Only merge in the defaults if we haven't yet called setSearchParams. 59746 // Once we call that we want those to take precedence, otherwise you can't 59747 // remove a param with setSearchParams({}) if it has an initial value 59748 getSearchParamsForLocation(location.search, hasSetSearchParamsRef.current ? null : defaultSearchParamsRef.current), [location.search]); 59749 let navigate = (0,react_router__WEBPACK_IMPORTED_MODULE_3__.useNavigate)(); 59750 let setSearchParams = react__WEBPACK_IMPORTED_MODULE_0__.useCallback((nextInit, navigateOptions) => { 59751 const newSearchParams = createSearchParams(typeof nextInit === "function" ? nextInit(searchParams) : nextInit); 59752 hasSetSearchParamsRef.current = true; 59753 navigate("?" + newSearchParams, navigateOptions); 59754 }, [navigate, searchParams]); 59755 return [searchParams, setSearchParams]; 59756} 59757function validateClientSideSubmission() { 59758 if (typeof document === "undefined") { 59759 throw new Error("You are calling submit during the server render. " + "Try calling submit within a `useEffect` or callback instead."); 59760 } 59761} 59762let fetcherId = 0; 59763let getUniqueFetcherId = () => "__" + String(++fetcherId) + "__"; 59764/** 59765 * Returns a function that may be used to programmatically submit a form (or 59766 * some arbitrary data) to the server. 59767 */ 59768function useSubmit() { 59769 let { 59770 router 59771 } = useDataRouterContext(DataRouterHook.UseSubmit); 59772 let { 59773 basename 59774 } = react__WEBPACK_IMPORTED_MODULE_0__.useContext(react_router__WEBPACK_IMPORTED_MODULE_3__.UNSAFE_NavigationContext); 59775 let currentRouteId = (0,react_router__WEBPACK_IMPORTED_MODULE_3__.UNSAFE_useRouteId)(); 59776 return react__WEBPACK_IMPORTED_MODULE_0__.useCallback(function (target, options) { 59777 if (options === void 0) { 59778 options = {}; 59779 } 59780 validateClientSideSubmission(); 59781 let { 59782 action, 59783 method, 59784 encType, 59785 formData, 59786 body 59787 } = getFormSubmissionInfo(target, basename); 59788 if (options.navigate === false) { 59789 let key = options.fetcherKey || getUniqueFetcherId(); 59790 router.fetch(key, currentRouteId, options.action || action, { 59791 preventScrollReset: options.preventScrollReset, 59792 formData, 59793 body, 59794 formMethod: options.method || method, 59795 formEncType: options.encType || encType, 59796 flushSync: options.flushSync 59797 }); 59798 } else { 59799 router.navigate(options.action || action, { 59800 preventScrollReset: options.preventScrollReset, 59801 formData, 59802 body, 59803 formMethod: options.method || method, 59804 formEncType: options.encType || encType, 59805 replace: options.replace, 59806 state: options.state, 59807 fromRouteId: currentRouteId, 59808 flushSync: options.flushSync, 59809 viewTransition: options.viewTransition 59810 }); 59811 } 59812 }, [router, basename, currentRouteId]); 59813} 59814// v7: Eventually we should deprecate this entirely in favor of using the 59815// router method directly? 59816function useFormAction(action, _temp2) { 59817 let { 59818 relative 59819 } = _temp2 === void 0 ? {} : _temp2; 59820 let { 59821 basename 59822 } = react__WEBPACK_IMPORTED_MODULE_0__.useContext(react_router__WEBPACK_IMPORTED_MODULE_3__.UNSAFE_NavigationContext); 59823 let routeContext = react__WEBPACK_IMPORTED_MODULE_0__.useContext(react_router__WEBPACK_IMPORTED_MODULE_3__.UNSAFE_RouteContext); 59824 !routeContext ? true ? (0,react_router__WEBPACK_IMPORTED_MODULE_2__.UNSAFE_invariant)(false, "useFormAction must be used inside a RouteContext") : 0 : void 0; 59825 let [match] = routeContext.matches.slice(-1); 59826 // Shallow clone path so we can modify it below, otherwise we modify the 59827 // object referenced by useMemo inside useResolvedPath 59828 let path = _extends({}, (0,react_router__WEBPACK_IMPORTED_MODULE_3__.useResolvedPath)(action ? action : ".", { 59829 relative 59830 })); 59831 // If no action was specified, browsers will persist current search params 59832 // when determining the path, so match that behavior 59833 // https://github.com/remix-run/remix/issues/927 59834 let location = (0,react_router__WEBPACK_IMPORTED_MODULE_3__.useLocation)(); 59835 if (action == null) { 59836 // Safe to write to this directly here since if action was undefined, we 59837 // would have called useResolvedPath(".") which will never include a search 59838 path.search = location.search; 59839 // When grabbing search params from the URL, remove any included ?index param 59840 // since it might not apply to our contextual route. We add it back based 59841 // on match.route.index below 59842 let params = new URLSearchParams(path.search); 59843 let indexValues = params.getAll("index"); 59844 let hasNakedIndexParam = indexValues.some(v => v === ""); 59845 if (hasNakedIndexParam) { 59846 params.delete("index"); 59847 indexValues.filter(v => v).forEach(v => params.append("index", v)); 59848 let qs = params.toString(); 59849 path.search = qs ? "?" + qs : ""; 59850 } 59851 } 59852 if ((!action || action === ".") && match.route.index) { 59853 path.search = path.search ? path.search.replace(/^\?/, "?index&") : "?index"; 59854 } 59855 // If we're operating within a basename, prepend it to the pathname prior 59856 // to creating the form action. If this is a root navigation, then just use 59857 // the raw basename which allows the basename to have full control over the 59858 // presence of a trailing slash on root actions 59859 if (basename !== "/") { 59860 path.pathname = path.pathname === "/" ? basename : (0,react_router__WEBPACK_IMPORTED_MODULE_2__.joinPaths)([basename, path.pathname]); 59861 } 59862 return (0,react_router__WEBPACK_IMPORTED_MODULE_2__.createPath)(path); 59863} 59864// TODO: (v7) Change the useFetcher generic default from `any` to `unknown` 59865/** 59866 * Interacts with route loaders and actions without causing a navigation. Great 59867 * for any interaction that stays on the same page. 59868 */ 59869function useFetcher(_temp3) { 59870 var _route$matches; 59871 let { 59872 key 59873 } = _temp3 === void 0 ? {} : _temp3; 59874 let { 59875 router 59876 } = useDataRouterContext(DataRouterHook.UseFetcher); 59877 let state = useDataRouterState(DataRouterStateHook.UseFetcher); 59878 let fetcherData = react__WEBPACK_IMPORTED_MODULE_0__.useContext(FetchersContext); 59879 let route = react__WEBPACK_IMPORTED_MODULE_0__.useContext(react_router__WEBPACK_IMPORTED_MODULE_3__.UNSAFE_RouteContext); 59880 let routeId = (_route$matches = route.matches[route.matches.length - 1]) == null ? void 0 : _route$matches.route.id; 59881 !fetcherData ? true ? (0,react_router__WEBPACK_IMPORTED_MODULE_2__.UNSAFE_invariant)(false, "useFetcher must be used inside a FetchersContext") : 0 : void 0; 59882 !route ? true ? (0,react_router__WEBPACK_IMPORTED_MODULE_2__.UNSAFE_invariant)(false, "useFetcher must be used inside a RouteContext") : 0 : void 0; 59883 !(routeId != null) ? true ? (0,react_router__WEBPACK_IMPORTED_MODULE_2__.UNSAFE_invariant)(false, "useFetcher can only be used on routes that contain a unique \"id\"") : 0 : void 0; 59884 // Fetcher key handling 59885 // OK to call conditionally to feature detect `useId` 59886 // eslint-disable-next-line react-hooks/rules-of-hooks 59887 let defaultKey = useIdImpl ? useIdImpl() : ""; 59888 let [fetcherKey, setFetcherKey] = react__WEBPACK_IMPORTED_MODULE_0__.useState(key || defaultKey); 59889 if (key && key !== fetcherKey) { 59890 setFetcherKey(key); 59891 } else if (!fetcherKey) { 59892 // We will only fall through here when `useId` is not available 59893 setFetcherKey(getUniqueFetcherId()); 59894 } 59895 // Registration/cleanup 59896 react__WEBPACK_IMPORTED_MODULE_0__.useEffect(() => { 59897 router.getFetcher(fetcherKey); 59898 return () => { 59899 // Tell the router we've unmounted - if v7_fetcherPersist is enabled this 59900 // will not delete immediately but instead queue up a delete after the 59901 // fetcher returns to an `idle` state 59902 router.deleteFetcher(fetcherKey); 59903 }; 59904 }, [router, fetcherKey]); 59905 // Fetcher additions 59906 let load = react__WEBPACK_IMPORTED_MODULE_0__.useCallback((href, opts) => { 59907 !routeId ? true ? (0,react_router__WEBPACK_IMPORTED_MODULE_2__.UNSAFE_invariant)(false, "No routeId available for fetcher.load()") : 0 : void 0; 59908 router.fetch(fetcherKey, routeId, href, opts); 59909 }, [fetcherKey, routeId, router]); 59910 let submitImpl = useSubmit(); 59911 let submit = react__WEBPACK_IMPORTED_MODULE_0__.useCallback((target, opts) => { 59912 submitImpl(target, _extends({}, opts, { 59913 navigate: false, 59914 fetcherKey 59915 })); 59916 }, [fetcherKey, submitImpl]); 59917 let FetcherForm = react__WEBPACK_IMPORTED_MODULE_0__.useMemo(() => { 59918 let FetcherForm = /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0__.forwardRef((props, ref) => { 59919 return /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0__.createElement(Form, _extends({}, props, { 59920 navigate: false, 59921 fetcherKey: fetcherKey, 59922 ref: ref 59923 })); 59924 }); 59925 if (true) { 59926 FetcherForm.displayName = "fetcher.Form"; 59927 } 59928 return FetcherForm; 59929 }, [fetcherKey]); 59930 // Exposed FetcherWithComponents 59931 let fetcher = state.fetchers.get(fetcherKey) || react_router__WEBPACK_IMPORTED_MODULE_2__.IDLE_FETCHER; 59932 let data = fetcherData.get(fetcherKey); 59933 let fetcherWithComponents = react__WEBPACK_IMPORTED_MODULE_0__.useMemo(() => _extends({ 59934 Form: FetcherForm, 59935 submit, 59936 load 59937 }, fetcher, { 59938 data 59939 }), [FetcherForm, submit, load, fetcher, data]); 59940 return fetcherWithComponents; 59941} 59942/** 59943 * Provides all fetchers currently on the page. Useful for layouts and parent 59944 * routes that need to provide pending/optimistic UI regarding the fetch. 59945 */ 59946function useFetchers() { 59947 let state = useDataRouterState(DataRouterStateHook.UseFetchers); 59948 return Array.from(state.fetchers.entries()).map(_ref11 => { 59949 let [key, fetcher] = _ref11; 59950 return _extends({}, fetcher, { 59951 key 59952 }); 59953 }); 59954} 59955const SCROLL_RESTORATION_STORAGE_KEY = "react-router-scroll-positions"; 59956let savedScrollPositions = {}; 59957/** 59958 * When rendered inside a RouterProvider, will restore scroll positions on navigations 59959 */ 59960function useScrollRestoration(_temp4) { 59961 let { 59962 getKey, 59963 storageKey 59964 } = _temp4 === void 0 ? {} : _temp4; 59965 let { 59966 router 59967 } = useDataRouterContext(DataRouterHook.UseScrollRestoration); 59968 let { 59969 restoreScrollPosition, 59970 preventScrollReset 59971 } = useDataRouterState(DataRouterStateHook.UseScrollRestoration); 59972 let { 59973 basename 59974 } = react__WEBPACK_IMPORTED_MODULE_0__.useContext(react_router__WEBPACK_IMPORTED_MODULE_3__.UNSAFE_NavigationContext); 59975 let location = (0,react_router__WEBPACK_IMPORTED_MODULE_3__.useLocation)(); 59976 let matches = (0,react_router__WEBPACK_IMPORTED_MODULE_3__.useMatches)(); 59977 let navigation = (0,react_router__WEBPACK_IMPORTED_MODULE_3__.useNavigation)(); 59978 // Trigger manual scroll restoration while we're active 59979 react__WEBPACK_IMPORTED_MODULE_0__.useEffect(() => { 59980 window.history.scrollRestoration = "manual"; 59981 return () => { 59982 window.history.scrollRestoration = "auto"; 59983 }; 59984 }, []); 59985 // Save positions on pagehide 59986 usePageHide(react__WEBPACK_IMPORTED_MODULE_0__.useCallback(() => { 59987 if (navigation.state === "idle") { 59988 let key = (getKey ? getKey(location, matches) : null) || location.key; 59989 savedScrollPositions[key] = window.scrollY; 59990 } 59991 try { 59992 sessionStorage.setItem(storageKey || SCROLL_RESTORATION_STORAGE_KEY, JSON.stringify(savedScrollPositions)); 59993 } catch (error) { 59994 true ? (0,react_router__WEBPACK_IMPORTED_MODULE_2__.UNSAFE_warning)(false, "Failed to save scroll positions in sessionStorage, <ScrollRestoration /> will not work properly (" + error + ").") : 0; 59995 } 59996 window.history.scrollRestoration = "auto"; 59997 }, [storageKey, getKey, navigation.state, location, matches])); 59998 // Read in any saved scroll locations 59999 if (typeof document !== "undefined") { 60000 // eslint-disable-next-line react-hooks/rules-of-hooks 60001 react__WEBPACK_IMPORTED_MODULE_0__.useLayoutEffect(() => { 60002 try { 60003 let sessionPositions = sessionStorage.getItem(storageKey || SCROLL_RESTORATION_STORAGE_KEY); 60004 if (sessionPositions) { 60005 savedScrollPositions = JSON.parse(sessionPositions); 60006 } 60007 } catch (e) { 60008 // no-op, use default empty object 60009 } 60010 }, [storageKey]); 60011 // Enable scroll restoration in the router 60012 // eslint-disable-next-line react-hooks/rules-of-hooks 60013 react__WEBPACK_IMPORTED_MODULE_0__.useLayoutEffect(() => { 60014 let getKeyWithoutBasename = getKey && basename !== "/" ? (location, matches) => getKey( // Strip the basename to match useLocation() 60015 _extends({}, location, { 60016 pathname: (0,react_router__WEBPACK_IMPORTED_MODULE_2__.stripBasename)(location.pathname, basename) || location.pathname 60017 }), matches) : getKey; 60018 let disableScrollRestoration = router == null ? void 0 : router.enableScrollRestoration(savedScrollPositions, () => window.scrollY, getKeyWithoutBasename); 60019 return () => disableScrollRestoration && disableScrollRestoration(); 60020 }, [router, basename, getKey]); 60021 // Restore scrolling when state.restoreScrollPosition changes 60022 // eslint-disable-next-line react-hooks/rules-of-hooks 60023 react__WEBPACK_IMPORTED_MODULE_0__.useLayoutEffect(() => { 60024 // Explicit false means don't do anything (used for submissions) 60025 if (restoreScrollPosition === false) { 60026 return; 60027 } 60028 // been here before, scroll to it 60029 if (typeof restoreScrollPosition === "number") { 60030 window.scrollTo(0, restoreScrollPosition); 60031 return; 60032 } 60033 // try to scroll to the hash 60034 if (location.hash) { 60035 let el = document.getElementById(decodeURIComponent(location.hash.slice(1))); 60036 if (el) { 60037 el.scrollIntoView(); 60038 return; 60039 } 60040 } 60041 // Don't reset if this navigation opted out 60042 if (preventScrollReset === true) { 60043 return; 60044 } 60045 // otherwise go to the top on new locations 60046 window.scrollTo(0, 0); 60047 }, [location, restoreScrollPosition, preventScrollReset]); 60048 } 60049} 60050/** 60051 * Setup a callback to be fired on the window's `beforeunload` event. This is 60052 * useful for saving some data to `window.localStorage` just before the page 60053 * refreshes. 60054 * 60055 * Note: The `callback` argument should be a function created with 60056 * `React.useCallback()`. 60057 */ 60058function useBeforeUnload(callback, options) { 60059 let { 60060 capture 60061 } = options || {}; 60062 react__WEBPACK_IMPORTED_MODULE_0__.useEffect(() => { 60063 let opts = capture != null ? { 60064 capture 60065 } : undefined; 60066 window.addEventListener("beforeunload", callback, opts); 60067 return () => { 60068 window.removeEventListener("beforeunload", callback, opts); 60069 }; 60070 }, [callback, capture]); 60071} 60072/** 60073 * Setup a callback to be fired on the window's `pagehide` event. This is 60074 * useful for saving some data to `window.localStorage` just before the page 60075 * refreshes. This event is better supported than beforeunload across browsers. 60076 * 60077 * Note: The `callback` argument should be a function created with 60078 * `React.useCallback()`. 60079 */ 60080function usePageHide(callback, options) { 60081 let { 60082 capture 60083 } = options || {}; 60084 react__WEBPACK_IMPORTED_MODULE_0__.useEffect(() => { 60085 let opts = capture != null ? { 60086 capture 60087 } : undefined; 60088 window.addEventListener("pagehide", callback, opts); 60089 return () => { 60090 window.removeEventListener("pagehide", callback, opts); 60091 }; 60092 }, [callback, capture]); 60093} 60094/** 60095 * Wrapper around useBlocker to show a window.confirm prompt to users instead 60096 * of building a custom UI with useBlocker. 60097 * 60098 * Warning: This has *a lot of rough edges* and behaves very differently (and 60099 * very incorrectly in some cases) across browsers if user click addition 60100 * back/forward navigations while the confirm is open. Use at your own risk. 60101 */ 60102function usePrompt(_ref12) { 60103 let { 60104 when, 60105 message 60106 } = _ref12; 60107 let blocker = (0,react_router__WEBPACK_IMPORTED_MODULE_3__.useBlocker)(when); 60108 react__WEBPACK_IMPORTED_MODULE_0__.useEffect(() => { 60109 if (blocker.state === "blocked") { 60110 let proceed = window.confirm(message); 60111 if (proceed) { 60112 // This timeout is needed to avoid a weird "race" on POP navigations 60113 // between the `window.history` revert navigation and the result of 60114 // `window.confirm` 60115 setTimeout(blocker.proceed, 0); 60116 } else { 60117 blocker.reset(); 60118 } 60119 } 60120 }, [blocker, message]); 60121 react__WEBPACK_IMPORTED_MODULE_0__.useEffect(() => { 60122 if (blocker.state === "blocked" && !when) { 60123 blocker.reset(); 60124 } 60125 }, [blocker, when]); 60126} 60127/** 60128 * Return a boolean indicating if there is an active view transition to the 60129 * given href. You can use this value to render CSS classes or viewTransitionName 60130 * styles onto your elements 60131 * 60132 * @param href The destination href 60133 * @param [opts.relative] Relative routing type ("route" | "path") 60134 */ 60135function useViewTransitionState(to, opts) { 60136 if (opts === void 0) { 60137 opts = {}; 60138 } 60139 let vtContext = react__WEBPACK_IMPORTED_MODULE_0__.useContext(ViewTransitionContext); 60140 !(vtContext != null) ? true ? (0,react_router__WEBPACK_IMPORTED_MODULE_2__.UNSAFE_invariant)(false, "`useViewTransitionState` must be used within `react-router-dom`'s `RouterProvider`. " + "Did you accidentally import `RouterProvider` from `react-router`?") : 0 : void 0; 60141 let { 60142 basename 60143 } = useDataRouterContext(DataRouterHook.useViewTransitionState); 60144 let path = (0,react_router__WEBPACK_IMPORTED_MODULE_3__.useResolvedPath)(to, { 60145 relative: opts.relative 60146 }); 60147 if (!vtContext.isTransitioning) { 60148 return false; 60149 } 60150 let currentPath = (0,react_router__WEBPACK_IMPORTED_MODULE_2__.stripBasename)(vtContext.currentLocation.pathname, basename) || vtContext.currentLocation.pathname; 60151 let nextPath = (0,react_router__WEBPACK_IMPORTED_MODULE_2__.stripBasename)(vtContext.nextLocation.pathname, basename) || vtContext.nextLocation.pathname; 60152 // Transition is active if we're going to or coming from the indicated 60153 // destination. This ensures that other PUSH navigations that reverse 60154 // an indicated transition apply. I.e., on the list view you have: 60155 // 60156 // <NavLink to="/details/1" viewTransition> 60157 // 60158 // If you click the breadcrumb back to the list view: 60159 // 60160 // <NavLink to="/list" viewTransition> 60161 // 60162 // We should apply the transition because it's indicated as active going 60163 // from /list -> /details/1 and therefore should be active on the reverse 60164 // (even though this isn't strictly a POP reverse) 60165 return (0,react_router__WEBPACK_IMPORTED_MODULE_2__.matchPath)(path.pathname, nextPath) != null || (0,react_router__WEBPACK_IMPORTED_MODULE_2__.matchPath)(path.pathname, currentPath) != null; 60166} 60167//#endregion 60168 60169 60170//# sourceMappingURL=index.js.map 60171 60172 60173/***/ }), 60174
vendor: 69,166 bytes, lines 60175-61747
60175/***/ "./node_modules/react-router/dist/index.js": 60176/*!*************************************************!*\ 60177 !*** ./node_modules/react-router/dist/index.js ***! 60178 \*************************************************/ 60179/***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => { 60180 60181"use strict"; 60182var react__WEBPACK_IMPORTED_MODULE_0___namespace_cache; 60183__webpack_require__.r(__webpack_exports__); 60184/* harmony export */ __webpack_require__.d(__webpack_exports__, { 60185/* harmony export */ AbortedDeferredError: () => (/* reexport safe */ _remix_run_router__WEBPACK_IMPORTED_MODULE_1__.AbortedDeferredError), 60186/* harmony export */ Await: () => (/* binding */ Await), 60187/* harmony export */ MemoryRouter: () => (/* binding */ MemoryRouter), 60188/* harmony export */ Navigate: () => (/* binding */ Navigate), 60189/* harmony export */ NavigationType: () => (/* reexport safe */ _remix_run_router__WEBPACK_IMPORTED_MODULE_1__.Action), 60190/* harmony export */ Outlet: () => (/* binding */ Outlet), 60191/* harmony export */ Route: () => (/* binding */ Route), 60192/* harmony export */ Router: () => (/* binding */ Router), 60193/* harmony export */ RouterProvider: () => (/* binding */ RouterProvider), 60194/* harmony export */ Routes: () => (/* binding */ Routes), 60195/* harmony export */ UNSAFE_DataRouterContext: () => (/* binding */ DataRouterContext), 60196/* harmony export */ UNSAFE_DataRouterStateContext: () => (/* binding */ DataRouterStateContext), 60197/* harmony export */ UNSAFE_LocationContext: () => (/* binding */ LocationContext), 60198/* harmony export */ UNSAFE_NavigationContext: () => (/* binding */ NavigationContext), 60199/* harmony export */ UNSAFE_RouteContext: () => (/* binding */ RouteContext), 60200/* harmony export */ UNSAFE_logV6DeprecationWarnings: () => (/* binding */ logV6DeprecationWarnings), 60201/* harmony export */ UNSAFE_mapRouteProperties: () => (/* binding */ mapRouteProperties), 60202/* harmony export */ UNSAFE_useRouteId: () => (/* binding */ useRouteId), 60203/* harmony export */ UNSAFE_useRoutesImpl: () => (/* binding */ useRoutesImpl), 60204/* harmony export */ createMemoryRouter: () => (/* binding */ createMemoryRouter), 60205/* harmony export */ createPath: () => (/* reexport safe */ _remix_run_router__WEBPACK_IMPORTED_MODULE_1__.createPath), 60206/* harmony export */ createRoutesFromChildren: () => (/* binding */ createRoutesFromChildren), 60207/* harmony export */ createRoutesFromElements: () => (/* binding */ createRoutesFromChildren), 60208/* harmony export */ defer: () => (/* reexport safe */ _remix_run_router__WEBPACK_IMPORTED_MODULE_1__.defer), 60209/* harmony export */ generatePath: () => (/* reexport safe */ _remix_run_router__WEBPACK_IMPORTED_MODULE_1__.generatePath), 60210/* harmony export */ isRouteErrorResponse: () => (/* reexport safe */ _remix_run_router__WEBPACK_IMPORTED_MODULE_1__.isRouteErrorResponse), 60211/* harmony export */ json: () => (/* reexport safe */ _remix_run_router__WEBPACK_IMPORTED_MODULE_1__.json), 60212/* harmony export */ matchPath: () => (/* reexport safe */ _remix_run_router__WEBPACK_IMPORTED_MODULE_1__.matchPath), 60213/* harmony export */ matchRoutes: () => (/* reexport safe */ _remix_run_router__WEBPACK_IMPORTED_MODULE_1__.matchRoutes), 60214/* harmony export */ parsePath: () => (/* reexport safe */ _remix_run_router__WEBPACK_IMPORTED_MODULE_1__.parsePath), 60215/* harmony export */ redirect: () => (/* reexport safe */ _remix_run_router__WEBPACK_IMPORTED_MODULE_1__.redirect), 60216/* harmony export */ redirectDocument: () => (/* reexport safe */ _remix_run_router__WEBPACK_IMPORTED_MODULE_1__.redirectDocument), 60217/* harmony export */ renderMatches: () => (/* binding */ renderMatches), 60218/* harmony export */ replace: () => (/* reexport safe */ _remix_run_router__WEBPACK_IMPORTED_MODULE_1__.replace), 60219/* harmony export */ resolvePath: () => (/* reexport safe */ _remix_run_router__WEBPACK_IMPORTED_MODULE_1__.resolvePath), 60220/* harmony export */ useActionData: () => (/* binding */ useActionData), 60221/* harmony export */ useAsyncError: () => (/* binding */ useAsyncError), 60222/* harmony export */ useAsyncValue: () => (/* binding */ useAsyncValue), 60223/* harmony export */ useBlocker: () => (/* binding */ useBlocker), 60224/* harmony export */ useHref: () => (/* binding */ useHref), 60225/* harmony export */ useInRouterContext: () => (/* binding */ useInRouterContext), 60226/* harmony export */ useLoaderData: () => (/* binding */ useLoaderData), 60227/* harmony export */ useLocation: () => (/* binding */ useLocation), 60228/* harmony export */ useMatch: () => (/* binding */ useMatch), 60229/* harmony export */ useMatches: () => (/* binding */ useMatches), 60230/* harmony export */ useNavigate: () => (/* binding */ useNavigate), 60231/* harmony export */ useNavigation: () => (/* binding */ useNavigation), 60232/* harmony export */ useNavigationType: () => (/* binding */ useNavigationType), 60233/* harmony export */ useOutlet: () => (/* binding */ useOutlet), 60234/* harmony export */ useOutletContext: () => (/* binding */ useOutletContext), 60235/* harmony export */ useParams: () => (/* binding */ useParams), 60236/* harmony export */ useResolvedPath: () => (/* binding */ useResolvedPath), 60237/* harmony export */ useRevalidator: () => (/* binding */ useRevalidator), 60238/* harmony export */ useRouteError: () => (/* binding */ useRouteError), 60239/* harmony export */ useRouteLoaderData: () => (/* binding */ useRouteLoaderData), 60240/* harmony export */ useRoutes: () => (/* binding */ useRoutes) 60241/* harmony export */ }); 60242/* harmony import */ var react__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! react */ "./node_modules/react/index.js"); 60243/* harmony import */ var _remix_run_router__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! @remix-run/router */ "./node_modules/@remix-run/router/dist/router.js"); 60244/** 60245 * React Router v6.28.1 60246 * 60247 * Copyright (c) Remix Software Inc. 60248 * 60249 * This source code is licensed under the MIT license found in the 60250 * LICENSE.md file in the root directory of this source tree. 60251 * 60252 * @license MIT 60253 */ 60254 60255 60256 60257 60258function _extends() { 60259 _extends = Object.assign ? Object.assign.bind() : function (target) { 60260 for (var i = 1; i < arguments.length; i++) { 60261 var source = arguments[i]; 60262 for (var key in source) { 60263 if (Object.prototype.hasOwnProperty.call(source, key)) { 60264 target[key] = source[key]; 60265 } 60266 } 60267 } 60268 return target; 60269 }; 60270 return _extends.apply(this, arguments); 60271} 60272 60273// Create react-specific types from the agnostic types in @remix-run/router to 60274// export from react-router 60275const DataRouterContext = /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0__.createContext(null); 60276if (true) { 60277 DataRouterContext.displayName = "DataRouter"; 60278} 60279const DataRouterStateContext = /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0__.createContext(null); 60280if (true) { 60281 DataRouterStateContext.displayName = "DataRouterState"; 60282} 60283const AwaitContext = /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0__.createContext(null); 60284if (true) { 60285 AwaitContext.displayName = "Await"; 60286} 60287 60288/** 60289 * A Navigator is a "location changer"; it's how you get to different locations. 60290 * 60291 * Every history instance conforms to the Navigator interface, but the 60292 * distinction is useful primarily when it comes to the low-level `<Router>` API 60293 * where both the location and a navigator must be provided separately in order 60294 * to avoid "tearing" that may occur in a suspense-enabled app if the action 60295 * and/or location were to be read directly from the history instance. 60296 */ 60297 60298const NavigationContext = /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0__.createContext(null); 60299if (true) { 60300 NavigationContext.displayName = "Navigation"; 60301} 60302const LocationContext = /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0__.createContext(null); 60303if (true) { 60304 LocationContext.displayName = "Location"; 60305} 60306const RouteContext = /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0__.createContext({ 60307 outlet: null, 60308 matches: [], 60309 isDataRoute: false 60310}); 60311if (true) { 60312 RouteContext.displayName = "Route"; 60313} 60314const RouteErrorContext = /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0__.createContext(null); 60315if (true) { 60316 RouteErrorContext.displayName = "RouteError"; 60317} 60318 60319/** 60320 * Returns the full href for the given "to" value. This is useful for building 60321 * custom links that are also accessible and preserve right-click behavior. 60322 * 60323 * @see https://reactrouter.com/v6/hooks/use-href 60324 */ 60325function useHref(to, _temp) { 60326 let { 60327 relative 60328 } = _temp === void 0 ? {} : _temp; 60329 !useInRouterContext() ? true ? (0,_remix_run_router__WEBPACK_IMPORTED_MODULE_1__.UNSAFE_invariant)(false, // TODO: This error is probably because they somehow have 2 versions of the 60330 // router loaded. We can help them understand how to avoid that. 60331 "useHref() may be used only in the context of a <Router> component.") : 0 : void 0; 60332 let { 60333 basename, 60334 navigator 60335 } = react__WEBPACK_IMPORTED_MODULE_0__.useContext(NavigationContext); 60336 let { 60337 hash, 60338 pathname, 60339 search 60340 } = useResolvedPath(to, { 60341 relative 60342 }); 60343 let joinedPathname = pathname; 60344 60345 // If we're operating within a basename, prepend it to the pathname prior 60346 // to creating the href. If this is a root navigation, then just use the raw 60347 // basename which allows the basename to have full control over the presence 60348 // of a trailing slash on root links 60349 if (basename !== "/") { 60350 joinedPathname = pathname === "/" ? basename : (0,_remix_run_router__WEBPACK_IMPORTED_MODULE_1__.joinPaths)([basename, pathname]); 60351 } 60352 return navigator.createHref({ 60353 pathname: joinedPathname, 60354 search, 60355 hash 60356 }); 60357} 60358 60359/** 60360 * Returns true if this component is a descendant of a `<Router>`. 60361 * 60362 * @see https://reactrouter.com/v6/hooks/use-in-router-context 60363 */ 60364function useInRouterContext() { 60365 return react__WEBPACK_IMPORTED_MODULE_0__.useContext(LocationContext) != null; 60366} 60367 60368/** 60369 * Returns the current location object, which represents the current URL in web 60370 * browsers. 60371 * 60372 * Note: If you're using this it may mean you're doing some of your own 60373 * "routing" in your app, and we'd like to know what your use case is. We may 60374 * be able to provide something higher-level to better suit your needs. 60375 * 60376 * @see https://reactrouter.com/v6/hooks/use-location 60377 */ 60378function useLocation() { 60379 !useInRouterContext() ? true ? (0,_remix_run_router__WEBPACK_IMPORTED_MODULE_1__.UNSAFE_invariant)(false, // TODO: This error is probably because they somehow have 2 versions of the 60380 // router loaded. We can help them understand how to avoid that. 60381 "useLocation() may be used only in the context of a <Router> component.") : 0 : void 0; 60382 return react__WEBPACK_IMPORTED_MODULE_0__.useContext(LocationContext).location; 60383} 60384 60385/** 60386 * Returns the current navigation action which describes how the router came to 60387 * the current location, either by a pop, push, or replace on the history stack. 60388 * 60389 * @see https://reactrouter.com/v6/hooks/use-navigation-type 60390 */ 60391function useNavigationType() { 60392 return react__WEBPACK_IMPORTED_MODULE_0__.useContext(LocationContext).navigationType; 60393} 60394 60395/** 60396 * Returns a PathMatch object if the given pattern matches the current URL. 60397 * This is useful for components that need to know "active" state, e.g. 60398 * `<NavLink>`. 60399 * 60400 * @see https://reactrouter.com/v6/hooks/use-match 60401 */ 60402function useMatch(pattern) { 60403 !useInRouterContext() ? true ? (0,_remix_run_router__WEBPACK_IMPORTED_MODULE_1__.UNSAFE_invariant)(false, // TODO: This error is probably because they somehow have 2 versions of the 60404 // router loaded. We can help them understand how to avoid that. 60405 "useMatch() may be used only in the context of a <Router> component.") : 0 : void 0; 60406 let { 60407 pathname 60408 } = useLocation(); 60409 return react__WEBPACK_IMPORTED_MODULE_0__.useMemo(() => (0,_remix_run_router__WEBPACK_IMPORTED_MODULE_1__.matchPath)(pattern, (0,_remix_run_router__WEBPACK_IMPORTED_MODULE_1__.UNSAFE_decodePath)(pathname)), [pathname, pattern]); 60410} 60411 60412/** 60413 * The interface for the navigate() function returned from useNavigate(). 60414 */ 60415 60416const navigateEffectWarning = "You should call navigate() in a React.useEffect(), not when " + "your component is first rendered."; 60417 60418// Mute warnings for calls to useNavigate in SSR environments 60419function useIsomorphicLayoutEffect(cb) { 60420 let isStatic = react__WEBPACK_IMPORTED_MODULE_0__.useContext(NavigationContext).static; 60421 if (!isStatic) { 60422 // We should be able to get rid of this once react 18.3 is released 60423 // See: https://github.com/facebook/react/pull/26395 60424 // eslint-disable-next-line react-hooks/rules-of-hooks 60425 react__WEBPACK_IMPORTED_MODULE_0__.useLayoutEffect(cb); 60426 } 60427} 60428 60429/** 60430 * Returns an imperative method for changing the location. Used by `<Link>`s, but 60431 * may also be used by other elements to change the location. 60432 * 60433 * @see https://reactrouter.com/v6/hooks/use-navigate 60434 */ 60435function useNavigate() { 60436 let { 60437 isDataRoute 60438 } = react__WEBPACK_IMPORTED_MODULE_0__.useContext(RouteContext); 60439 // Conditional usage is OK here because the usage of a data router is static 60440 // eslint-disable-next-line react-hooks/rules-of-hooks 60441 return isDataRoute ? useNavigateStable() : useNavigateUnstable(); 60442} 60443function useNavigateUnstable() { 60444 !useInRouterContext() ? true ? (0,_remix_run_router__WEBPACK_IMPORTED_MODULE_1__.UNSAFE_invariant)(false, // TODO: This error is probably because they somehow have 2 versions of the 60445 // router loaded. We can help them understand how to avoid that. 60446 "useNavigate() may be used only in the context of a <Router> component.") : 0 : void 0; 60447 let dataRouterContext = react__WEBPACK_IMPORTED_MODULE_0__.useContext(DataRouterContext); 60448 let { 60449 basename, 60450 future, 60451 navigator 60452 } = react__WEBPACK_IMPORTED_MODULE_0__.useContext(NavigationContext); 60453 let { 60454 matches 60455 } = react__WEBPACK_IMPORTED_MODULE_0__.useContext(RouteContext); 60456 let { 60457 pathname: locationPathname 60458 } = useLocation(); 60459 let routePathnamesJson = JSON.stringify((0,_remix_run_router__WEBPACK_IMPORTED_MODULE_1__.UNSAFE_getResolveToMatches)(matches, future.v7_relativeSplatPath)); 60460 let activeRef = react__WEBPACK_IMPORTED_MODULE_0__.useRef(false); 60461 useIsomorphicLayoutEffect(() => { 60462 activeRef.current = true; 60463 }); 60464 let navigate = react__WEBPACK_IMPORTED_MODULE_0__.useCallback(function (to, options) { 60465 if (options === void 0) { 60466 options = {}; 60467 } 60468 true ? (0,_remix_run_router__WEBPACK_IMPORTED_MODULE_1__.UNSAFE_warning)(activeRef.current, navigateEffectWarning) : 0; 60469 60470 // Short circuit here since if this happens on first render the navigate 60471 // is useless because we haven't wired up our history listener yet 60472 if (!activeRef.current) return; 60473 if (typeof to === "number") { 60474 navigator.go(to); 60475 return; 60476 } 60477 let path = (0,_remix_run_router__WEBPACK_IMPORTED_MODULE_1__.resolveTo)(to, JSON.parse(routePathnamesJson), locationPathname, options.relative === "path"); 60478 60479 // If we're operating within a basename, prepend it to the pathname prior 60480 // to handing off to history (but only if we're not in a data router, 60481 // otherwise it'll prepend the basename inside of the router). 60482 // If this is a root navigation, then we navigate to the raw basename 60483 // which allows the basename to have full control over the presence of a 60484 // trailing slash on root links 60485 if (dataRouterContext == null && basename !== "/") { 60486 path.pathname = path.pathname === "/" ? basename : (0,_remix_run_router__WEBPACK_IMPORTED_MODULE_1__.joinPaths)([basename, path.pathname]); 60487 } 60488 (!!options.replace ? navigator.replace : navigator.push)(path, options.state, options); 60489 }, [basename, navigator, routePathnamesJson, locationPathname, dataRouterContext]); 60490 return navigate; 60491} 60492const OutletContext = /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0__.createContext(null); 60493 60494/** 60495 * Returns the context (if provided) for the child route at this level of the route 60496 * hierarchy. 60497 * @see https://reactrouter.com/v6/hooks/use-outlet-context 60498 */ 60499function useOutletContext() { 60500 return react__WEBPACK_IMPORTED_MODULE_0__.useContext(OutletContext); 60501} 60502 60503/** 60504 * Returns the element for the child route at this level of the route 60505 * hierarchy. Used internally by `<Outlet>` to render child routes. 60506 * 60507 * @see https://reactrouter.com/v6/hooks/use-outlet 60508 */ 60509function useOutlet(context) { 60510 let outlet = react__WEBPACK_IMPORTED_MODULE_0__.useContext(RouteContext).outlet; 60511 if (outlet) { 60512 return /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0__.createElement(OutletContext.Provider, { 60513 value: context 60514 }, outlet); 60515 } 60516 return outlet; 60517} 60518 60519/** 60520 * Returns an object of key/value pairs of the dynamic params from the current 60521 * URL that were matched by the route path. 60522 * 60523 * @see https://reactrouter.com/v6/hooks/use-params 60524 */ 60525function useParams() { 60526 let { 60527 matches 60528 } = react__WEBPACK_IMPORTED_MODULE_0__.useContext(RouteContext); 60529 let routeMatch = matches[matches.length - 1]; 60530 return routeMatch ? routeMatch.params : {}; 60531} 60532 60533/** 60534 * Resolves the pathname of the given `to` value against the current location. 60535 * 60536 * @see https://reactrouter.com/v6/hooks/use-resolved-path 60537 */ 60538function useResolvedPath(to, _temp2) { 60539 let { 60540 relative 60541 } = _temp2 === void 0 ? {} : _temp2; 60542 let { 60543 future 60544 } = react__WEBPACK_IMPORTED_MODULE_0__.useContext(NavigationContext); 60545 let { 60546 matches 60547 } = react__WEBPACK_IMPORTED_MODULE_0__.useContext(RouteContext); 60548 let { 60549 pathname: locationPathname 60550 } = useLocation(); 60551 let routePathnamesJson = JSON.stringify((0,_remix_run_router__WEBPACK_IMPORTED_MODULE_1__.UNSAFE_getResolveToMatches)(matches, future.v7_relativeSplatPath)); 60552 return react__WEBPACK_IMPORTED_MODULE_0__.useMemo(() => (0,_remix_run_router__WEBPACK_IMPORTED_MODULE_1__.resolveTo)(to, JSON.parse(routePathnamesJson), locationPathname, relative === "path"), [to, routePathnamesJson, locationPathname, relative]); 60553} 60554 60555/** 60556 * Returns the element of the route that matched the current location, prepared 60557 * with the correct context to render the remainder of the route tree. Route 60558 * elements in the tree must render an `<Outlet>` to render their child route's 60559 * element. 60560 * 60561 * @see https://reactrouter.com/v6/hooks/use-routes 60562 */ 60563function useRoutes(routes, locationArg) { 60564 return useRoutesImpl(routes, locationArg); 60565} 60566 60567// Internal implementation with accept optional param for RouterProvider usage 60568function useRoutesImpl(routes, locationArg, dataRouterState, future) { 60569 !useInRouterContext() ? true ? (0,_remix_run_router__WEBPACK_IMPORTED_MODULE_1__.UNSAFE_invariant)(false, // TODO: This error is probably because they somehow have 2 versions of the 60570 // router loaded. We can help them understand how to avoid that. 60571 "useRoutes() may be used only in the context of a <Router> component.") : 0 : void 0; 60572 let { 60573 navigator 60574 } = react__WEBPACK_IMPORTED_MODULE_0__.useContext(NavigationContext); 60575 let { 60576 matches: parentMatches 60577 } = react__WEBPACK_IMPORTED_MODULE_0__.useContext(RouteContext); 60578 let routeMatch = parentMatches[parentMatches.length - 1]; 60579 let parentParams = routeMatch ? routeMatch.params : {}; 60580 let parentPathname = routeMatch ? routeMatch.pathname : "/"; 60581 let parentPathnameBase = routeMatch ? routeMatch.pathnameBase : "/"; 60582 let parentRoute = routeMatch && routeMatch.route; 60583 if (true) { 60584 // You won't get a warning about 2 different <Routes> under a <Route> 60585 // without a trailing *, but this is a best-effort warning anyway since we 60586 // cannot even give the warning unless they land at the parent route. 60587 // 60588 // Example: 60589 // 60590 // <Routes> 60591 // {/* This route path MUST end with /* because otherwise 60592 // it will never match /blog/post/123 */} 60593 // <Route path="blog" element={<Blog />} /> 60594 // <Route path="blog/feed" element={<BlogFeed />} /> 60595 // </Routes> 60596 // 60597 // function Blog() { 60598 // return ( 60599 // <Routes> 60600 // <Route path="post/:id" element={<Post />} /> 60601 // </Routes> 60602 // ); 60603 // } 60604 let parentPath = parentRoute && parentRoute.path || ""; 60605 warningOnce(parentPathname, !parentRoute || parentPath.endsWith("*"), "You rendered descendant <Routes> (or called `useRoutes()`) at " + ("\"" + parentPathname + "\" (under <Route path=\"" + parentPath + "\">) but the ") + "parent route path has no trailing \"*\". This means if you navigate " + "deeper, the parent won't match anymore and therefore the child " + "routes will never render.\n\n" + ("Please change the parent <Route path=\"" + parentPath + "\"> to <Route ") + ("path=\"" + (parentPath === "/" ? "*" : parentPath + "/*") + "\">.")); 60606 } 60607 let locationFromContext = useLocation(); 60608 let location; 60609 if (locationArg) { 60610 var _parsedLocationArg$pa; 60611 let parsedLocationArg = typeof locationArg === "string" ? (0,_remix_run_router__WEBPACK_IMPORTED_MODULE_1__.parsePath)(locationArg) : locationArg; 60612 !(parentPathnameBase === "/" || ((_parsedLocationArg$pa = parsedLocationArg.pathname) == null ? void 0 : _parsedLocationArg$pa.startsWith(parentPathnameBase))) ? true ? (0,_remix_run_router__WEBPACK_IMPORTED_MODULE_1__.UNSAFE_invariant)(false, "When overriding the location using `<Routes location>` or `useRoutes(routes, location)`, " + "the location pathname must begin with the portion of the URL pathname that was " + ("matched by all parent routes. The current pathname base is \"" + parentPathnameBase + "\" ") + ("but pathname \"" + parsedLocationArg.pathname + "\" was given in the `location` prop.")) : 0 : void 0; 60613 location = parsedLocationArg; 60614 } else { 60615 location = locationFromContext; 60616 } 60617 let pathname = location.pathname || "/"; 60618 let remainingPathname = pathname; 60619 if (parentPathnameBase !== "/") { 60620 // Determine the remaining pathname by removing the # of URL segments the 60621 // parentPathnameBase has, instead of removing based on character count. 60622 // This is because we can't guarantee that incoming/outgoing encodings/ 60623 // decodings will match exactly. 60624 // We decode paths before matching on a per-segment basis with 60625 // decodeURIComponent(), but we re-encode pathnames via `new URL()` so they 60626 // match what `window.location.pathname` would reflect. Those don't 100% 60627 // align when it comes to encoded URI characters such as % and &. 60628 // 60629 // So we may end up with: 60630 // pathname: "/descendant/a%25b/match" 60631 // parentPathnameBase: "/descendant/a%b" 60632 // 60633 // And the direct substring removal approach won't work :/ 60634 let parentSegments = parentPathnameBase.replace(/^\//, "").split("/"); 60635 let segments = pathname.replace(/^\//, "").split("/"); 60636 remainingPathname = "/" + segments.slice(parentSegments.length).join("/"); 60637 } 60638 let matches = (0,_remix_run_router__WEBPACK_IMPORTED_MODULE_1__.matchRoutes)(routes, { 60639 pathname: remainingPathname 60640 }); 60641 if (true) { 60642 true ? (0,_remix_run_router__WEBPACK_IMPORTED_MODULE_1__.UNSAFE_warning)(parentRoute || matches != null, "No routes matched location \"" + location.pathname + location.search + location.hash + "\" ") : 0; 60643 true ? (0,_remix_run_router__WEBPACK_IMPORTED_MODULE_1__.UNSAFE_warning)(matches == null || matches[matches.length - 1].route.element !== undefined || matches[matches.length - 1].route.Component !== undefined || matches[matches.length - 1].route.lazy !== undefined, "Matched leaf route at location \"" + location.pathname + location.search + location.hash + "\" " + "does not have an element or Component. This means it will render an <Outlet /> with a " + "null value by default resulting in an \"empty\" page.") : 0; 60644 } 60645 let renderedMatches = _renderMatches(matches && matches.map(match => Object.assign({}, match, { 60646 params: Object.assign({}, parentParams, match.params), 60647 pathname: (0,_remix_run_router__WEBPACK_IMPORTED_MODULE_1__.joinPaths)([parentPathnameBase, 60648 // Re-encode pathnames that were decoded inside matchRoutes 60649 navigator.encodeLocation ? navigator.encodeLocation(match.pathname).pathname : match.pathname]), 60650 pathnameBase: match.pathnameBase === "/" ? parentPathnameBase : (0,_remix_run_router__WEBPACK_IMPORTED_MODULE_1__.joinPaths)([parentPathnameBase, 60651 // Re-encode pathnames that were decoded inside matchRoutes 60652 navigator.encodeLocation ? navigator.encodeLocation(match.pathnameBase).pathname : match.pathnameBase]) 60653 })), parentMatches, dataRouterState, future); 60654 60655 // When a user passes in a `locationArg`, the associated routes need to 60656 // be wrapped in a new `LocationContext.Provider` in order for `useLocation` 60657 // to use the scoped location instead of the global location. 60658 if (locationArg && renderedMatches) { 60659 return /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0__.createElement(LocationContext.Provider, { 60660 value: { 60661 location: _extends({ 60662 pathname: "/", 60663 search: "", 60664 hash: "", 60665 state: null, 60666 key: "default" 60667 }, location), 60668 navigationType: _remix_run_router__WEBPACK_IMPORTED_MODULE_1__.Action.Pop 60669 } 60670 }, renderedMatches); 60671 } 60672 return renderedMatches; 60673} 60674function DefaultErrorComponent() { 60675 let error = useRouteError(); 60676 let message = (0,_remix_run_router__WEBPACK_IMPORTED_MODULE_1__.isRouteErrorResponse)(error) ? error.status + " " + error.statusText : error instanceof Error ? error.message : JSON.stringify(error); 60677 let stack = error instanceof Error ? error.stack : null; 60678 let lightgrey = "rgba(200,200,200, 0.5)"; 60679 let preStyles = { 60680 padding: "0.5rem", 60681 backgroundColor: lightgrey 60682 }; 60683 let codeStyles = { 60684 padding: "2px 4px", 60685 backgroundColor: lightgrey 60686 }; 60687 let devInfo = null; 60688 if (true) { 60689 console.error("Error handled by React Router default ErrorBoundary:", error); 60690 devInfo = /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0__.createElement(react__WEBPACK_IMPORTED_MODULE_0__.Fragment, null, /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0__.createElement("p", null, "\uD83D\uDCBF Hey developer \uD83D\uDC4B"), /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0__.createElement("p", null, "You can provide a way better UX than this when your app throws errors by providing your own ", /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0__.createElement("code", { 60691 style: codeStyles 60692 }, "ErrorBoundary"), " or", " ", /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0__.createElement("code", { 60693 style: codeStyles 60694 }, "errorElement"), " prop on your route.")); 60695 } 60696 return /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0__.createElement(react__WEBPACK_IMPORTED_MODULE_0__.Fragment, null, /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0__.createElement("h2", null, "Unexpected Application Error!"), /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0__.createElement("h3", { 60697 style: { 60698 fontStyle: "italic" 60699 } 60700 }, message), stack ? /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0__.createElement("pre", { 60701 style: preStyles 60702 }, stack) : null, devInfo); 60703} 60704const defaultErrorElement = /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0__.createElement(DefaultErrorComponent, null); 60705class RenderErrorBoundary extends react__WEBPACK_IMPORTED_MODULE_0__.Component { 60706 constructor(props) { 60707 super(props); 60708 this.state = { 60709 location: props.location, 60710 revalidation: props.revalidation, 60711 error: props.error 60712 }; 60713 } 60714 static getDerivedStateFromError(error) { 60715 return { 60716 error: error 60717 }; 60718 } 60719 static getDerivedStateFromProps(props, state) { 60720 // When we get into an error state, the user will likely click "back" to the 60721 // previous page that didn't have an error. Because this wraps the entire 60722 // application, that will have no effect--the error page continues to display. 60723 // This gives us a mechanism to recover from the error when the location changes. 60724 // 60725 // Whether we're in an error state or not, we update the location in state 60726 // so that when we are in an error state, it gets reset when a new location 60727 // comes in and the user recovers from the error. 60728 if (state.location !== props.location || state.revalidation !== "idle" && props.revalidation === "idle") { 60729 return { 60730 error: props.error, 60731 location: props.location, 60732 revalidation: props.revalidation 60733 }; 60734 } 60735 60736 // If we're not changing locations, preserve the location but still surface 60737 // any new errors that may come through. We retain the existing error, we do 60738 // this because the error provided from the app state may be cleared without 60739 // the location changing. 60740 return { 60741 error: props.error !== undefined ? props.error : state.error, 60742 location: state.location, 60743 revalidation: props.revalidation || state.revalidation 60744 }; 60745 } 60746 componentDidCatch(error, errorInfo) { 60747 console.error("React Router caught the following error during render", error, errorInfo); 60748 } 60749 render() { 60750 return this.state.error !== undefined ? /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0__.createElement(RouteContext.Provider, { 60751 value: this.props.routeContext 60752 }, /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0__.createElement(RouteErrorContext.Provider, { 60753 value: this.state.error, 60754 children: this.props.component 60755 })) : this.props.children; 60756 } 60757} 60758function RenderedRoute(_ref) { 60759 let { 60760 routeContext, 60761 match, 60762 children 60763 } = _ref; 60764 let dataRouterContext = react__WEBPACK_IMPORTED_MODULE_0__.useContext(DataRouterContext); 60765 60766 // Track how deep we got in our render pass to emulate SSR componentDidCatch 60767 // in a DataStaticRouter 60768 if (dataRouterContext && dataRouterContext.static && dataRouterContext.staticContext && (match.route.errorElement || match.route.ErrorBoundary)) { 60769 dataRouterContext.staticContext._deepestRenderedBoundaryId = match.route.id; 60770 } 60771 return /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0__.createElement(RouteContext.Provider, { 60772 value: routeContext 60773 }, children); 60774} 60775function _renderMatches(matches, parentMatches, dataRouterState, future) { 60776 var _dataRouterState; 60777 if (parentMatches === void 0) { 60778 parentMatches = []; 60779 } 60780 if (dataRouterState === void 0) { 60781 dataRouterState = null; 60782 } 60783 if (future === void 0) { 60784 future = null; 60785 } 60786 if (matches == null) { 60787 var _future; 60788 if (!dataRouterState) { 60789 return null; 60790 } 60791 if (dataRouterState.errors) { 60792 // Don't bail if we have data router errors so we can render them in the 60793 // boundary. Use the pre-matched (or shimmed) matches 60794 matches = dataRouterState.matches; 60795 } else if ((_future = future) != null && _future.v7_partialHydration && parentMatches.length === 0 && !dataRouterState.initialized && dataRouterState.matches.length > 0) { 60796 // Don't bail if we're initializing with partial hydration and we have 60797 // router matches. That means we're actively running `patchRoutesOnNavigation` 60798 // so we should render down the partial matches to the appropriate 60799 // `HydrateFallback`. We only do this if `parentMatches` is empty so it 60800 // only impacts the root matches for `RouterProvider` and no descendant 60801 // `<Routes>` 60802 matches = dataRouterState.matches; 60803 } else { 60804 return null; 60805 } 60806 } 60807 let renderedMatches = matches; 60808 60809 // If we have data errors, trim matches to the highest error boundary 60810 let errors = (_dataRouterState = dataRouterState) == null ? void 0 : _dataRouterState.errors; 60811 if (errors != null) { 60812 let errorIndex = renderedMatches.findIndex(m => m.route.id && (errors == null ? void 0 : errors[m.route.id]) !== undefined); 60813 !(errorIndex >= 0) ? true ? (0,_remix_run_router__WEBPACK_IMPORTED_MODULE_1__.UNSAFE_invariant)(false, "Could not find a matching route for errors on route IDs: " + Object.keys(errors).join(",")) : 0 : void 0; 60814 renderedMatches = renderedMatches.slice(0, Math.min(renderedMatches.length, errorIndex + 1)); 60815 } 60816 60817 // If we're in a partial hydration mode, detect if we need to render down to 60818 // a given HydrateFallback while we load the rest of the hydration data 60819 let renderFallback = false; 60820 let fallbackIndex = -1; 60821 if (dataRouterState && future && future.v7_partialHydration) { 60822 for (let i = 0; i < renderedMatches.length; i++) { 60823 let match = renderedMatches[i]; 60824 // Track the deepest fallback up until the first route without data 60825 if (match.route.HydrateFallback || match.route.hydrateFallbackElement) { 60826 fallbackIndex = i; 60827 } 60828 if (match.route.id) { 60829 let { 60830 loaderData, 60831 errors 60832 } = dataRouterState; 60833 let needsToRunLoader = match.route.loader && loaderData[match.route.id] === undefined && (!errors || errors[match.route.id] === undefined); 60834 if (match.route.lazy || needsToRunLoader) { 60835 // We found the first route that's not ready to render (waiting on 60836 // lazy, or has a loader that hasn't run yet). Flag that we need to 60837 // render a fallback and render up until the appropriate fallback 60838 renderFallback = true; 60839 if (fallbackIndex >= 0) { 60840 renderedMatches = renderedMatches.slice(0, fallbackIndex + 1); 60841 } else { 60842 renderedMatches = [renderedMatches[0]]; 60843 } 60844 break; 60845 } 60846 } 60847 } 60848 } 60849 return renderedMatches.reduceRight((outlet, match, index) => { 60850 // Only data routers handle errors/fallbacks 60851 let error; 60852 let shouldRenderHydrateFallback = false; 60853 let errorElement = null; 60854 let hydrateFallbackElement = null; 60855 if (dataRouterState) { 60856 error = errors && match.route.id ? errors[match.route.id] : undefined; 60857 errorElement = match.route.errorElement || defaultErrorElement; 60858 if (renderFallback) { 60859 if (fallbackIndex < 0 && index === 0) { 60860 warningOnce("route-fallback", false, "No `HydrateFallback` element provided to render during initial hydration"); 60861 shouldRenderHydrateFallback = true; 60862 hydrateFallbackElement = null; 60863 } else if (fallbackIndex === index) { 60864 shouldRenderHydrateFallback = true; 60865 hydrateFallbackElement = match.route.hydrateFallbackElement || null; 60866 } 60867 } 60868 } 60869 let matches = parentMatches.concat(renderedMatches.slice(0, index + 1)); 60870 let getChildren = () => { 60871 let children; 60872 if (error) { 60873 children = errorElement; 60874 } else if (shouldRenderHydrateFallback) { 60875 children = hydrateFallbackElement; 60876 } else if (match.route.Component) { 60877 // Note: This is a de-optimized path since React won't re-use the 60878 // ReactElement since it's identity changes with each new 60879 // React.createElement call. We keep this so folks can use 60880 // `<Route Component={...}>` in `<Routes>` but generally `Component` 60881 // usage is only advised in `RouterProvider` when we can convert it to 60882 // `element` ahead of time. 60883 children = /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0__.createElement(match.route.Component, null); 60884 } else if (match.route.element) { 60885 children = match.route.element; 60886 } else { 60887 children = outlet; 60888 } 60889 return /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0__.createElement(RenderedRoute, { 60890 match: match, 60891 routeContext: { 60892 outlet, 60893 matches, 60894 isDataRoute: dataRouterState != null 60895 }, 60896 children: children 60897 }); 60898 }; 60899 // Only wrap in an error boundary within data router usages when we have an 60900 // ErrorBoundary/errorElement on this route. Otherwise let it bubble up to 60901 // an ancestor ErrorBoundary/errorElement 60902 return dataRouterState && (match.route.ErrorBoundary || match.route.errorElement || index === 0) ? /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0__.createElement(RenderErrorBoundary, { 60903 location: dataRouterState.location, 60904 revalidation: dataRouterState.revalidation, 60905 component: errorElement, 60906 error: error, 60907 children: getChildren(), 60908 routeContext: { 60909 outlet: null, 60910 matches, 60911 isDataRoute: true 60912 } 60913 }) : getChildren(); 60914 }, null); 60915} 60916var DataRouterHook = /*#__PURE__*/function (DataRouterHook) { 60917 DataRouterHook["UseBlocker"] = "useBlocker"; 60918 DataRouterHook["UseRevalidator"] = "useRevalidator"; 60919 DataRouterHook["UseNavigateStable"] = "useNavigate"; 60920 return DataRouterHook; 60921}(DataRouterHook || {}); 60922var DataRouterStateHook = /*#__PURE__*/function (DataRouterStateHook) { 60923 DataRouterStateHook["UseBlocker"] = "useBlocker"; 60924 DataRouterStateHook["UseLoaderData"] = "useLoaderData"; 60925 DataRouterStateHook["UseActionData"] = "useActionData"; 60926 DataRouterStateHook["UseRouteError"] = "useRouteError"; 60927 DataRouterStateHook["UseNavigation"] = "useNavigation"; 60928 DataRouterStateHook["UseRouteLoaderData"] = "useRouteLoaderData"; 60929 DataRouterStateHook["UseMatches"] = "useMatches"; 60930 DataRouterStateHook["UseRevalidator"] = "useRevalidator"; 60931 DataRouterStateHook["UseNavigateStable"] = "useNavigate"; 60932 DataRouterStateHook["UseRouteId"] = "useRouteId"; 60933 return DataRouterStateHook; 60934}(DataRouterStateHook || {}); 60935function getDataRouterConsoleError(hookName) { 60936 return hookName + " must be used within a data router. See https://reactrouter.com/v6/routers/picking-a-router."; 60937} 60938function useDataRouterContext(hookName) { 60939 let ctx = react__WEBPACK_IMPORTED_MODULE_0__.useContext(DataRouterContext); 60940 !ctx ? true ? (0,_remix_run_router__WEBPACK_IMPORTED_MODULE_1__.UNSAFE_invariant)(false, getDataRouterConsoleError(hookName)) : 0 : void 0; 60941 return ctx; 60942} 60943function useDataRouterState(hookName) { 60944 let state = react__WEBPACK_IMPORTED_MODULE_0__.useContext(DataRouterStateContext); 60945 !state ? true ? (0,_remix_run_router__WEBPACK_IMPORTED_MODULE_1__.UNSAFE_invariant)(false, getDataRouterConsoleError(hookName)) : 0 : void 0; 60946 return state; 60947} 60948function useRouteContext(hookName) { 60949 let route = react__WEBPACK_IMPORTED_MODULE_0__.useContext(RouteContext); 60950 !route ? true ? (0,_remix_run_router__WEBPACK_IMPORTED_MODULE_1__.UNSAFE_invariant)(false, getDataRouterConsoleError(hookName)) : 0 : void 0; 60951 return route; 60952} 60953 60954// Internal version with hookName-aware debugging 60955function useCurrentRouteId(hookName) { 60956 let route = useRouteContext(hookName); 60957 let thisRoute = route.matches[route.matches.length - 1]; 60958 !thisRoute.route.id ? true ? (0,_remix_run_router__WEBPACK_IMPORTED_MODULE_1__.UNSAFE_invariant)(false, hookName + " can only be used on routes that contain a unique \"id\"") : 0 : void 0; 60959 return thisRoute.route.id; 60960} 60961 60962/** 60963 * Returns the ID for the nearest contextual route 60964 */ 60965function useRouteId() { 60966 return useCurrentRouteId(DataRouterStateHook.UseRouteId); 60967} 60968 60969/** 60970 * Returns the current navigation, defaulting to an "idle" navigation when 60971 * no navigation is in progress 60972 */ 60973function useNavigation() { 60974 let state = useDataRouterState(DataRouterStateHook.UseNavigation); 60975 return state.navigation; 60976} 60977 60978/** 60979 * Returns a revalidate function for manually triggering revalidation, as well 60980 * as the current state of any manual revalidations 60981 */ 60982function useRevalidator() { 60983 let dataRouterContext = useDataRouterContext(DataRouterHook.UseRevalidator); 60984 let state = useDataRouterState(DataRouterStateHook.UseRevalidator); 60985 return react__WEBPACK_IMPORTED_MODULE_0__.useMemo(() => ({ 60986 revalidate: dataRouterContext.router.revalidate, 60987 state: state.revalidation 60988 }), [dataRouterContext.router.revalidate, state.revalidation]); 60989} 60990 60991/** 60992 * Returns the active route matches, useful for accessing loaderData for 60993 * parent/child routes or the route "handle" property 60994 */ 60995function useMatches() { 60996 let { 60997 matches, 60998 loaderData 60999 } = useDataRouterState(DataRouterStateHook.UseMatches); 61000 return react__WEBPACK_IMPORTED_MODULE_0__.useMemo(() => matches.map(m => (0,_remix_run_router__WEBPACK_IMPORTED_MODULE_1__.UNSAFE_convertRouteMatchToUiMatch)(m, loaderData)), [matches, loaderData]); 61001} 61002 61003/** 61004 * Returns the loader data for the nearest ancestor Route loader 61005 */ 61006function useLoaderData() { 61007 let state = useDataRouterState(DataRouterStateHook.UseLoaderData); 61008 let routeId = useCurrentRouteId(DataRouterStateHook.UseLoaderData); 61009 if (state.errors && state.errors[routeId] != null) { 61010 console.error("You cannot `useLoaderData` in an errorElement (routeId: " + routeId + ")"); 61011 return undefined; 61012 } 61013 return state.loaderData[routeId]; 61014} 61015 61016/** 61017 * Returns the loaderData for the given routeId 61018 */ 61019function useRouteLoaderData(routeId) { 61020 let state = useDataRouterState(DataRouterStateHook.UseRouteLoaderData); 61021 return state.loaderData[routeId]; 61022} 61023 61024/** 61025 * Returns the action data for the nearest ancestor Route action 61026 */ 61027function useActionData() { 61028 let state = useDataRouterState(DataRouterStateHook.UseActionData); 61029 let routeId = useCurrentRouteId(DataRouterStateHook.UseLoaderData); 61030 return state.actionData ? state.actionData[routeId] : undefined; 61031} 61032 61033/** 61034 * Returns the nearest ancestor Route error, which could be a loader/action 61035 * error or a render error. This is intended to be called from your 61036 * ErrorBoundary/errorElement to display a proper error message. 61037 */ 61038function useRouteError() { 61039 var _state$errors; 61040 let error = react__WEBPACK_IMPORTED_MODULE_0__.useContext(RouteErrorContext); 61041 let state = useDataRouterState(DataRouterStateHook.UseRouteError); 61042 let routeId = useCurrentRouteId(DataRouterStateHook.UseRouteError); 61043 61044 // If this was a render error, we put it in a RouteError context inside 61045 // of RenderErrorBoundary 61046 if (error !== undefined) { 61047 return error; 61048 } 61049 61050 // Otherwise look for errors from our data router state 61051 return (_state$errors = state.errors) == null ? void 0 : _state$errors[routeId]; 61052} 61053 61054/** 61055 * Returns the happy-path data from the nearest ancestor `<Await />` value 61056 */ 61057function useAsyncValue() { 61058 let value = react__WEBPACK_IMPORTED_MODULE_0__.useContext(AwaitContext); 61059 return value == null ? void 0 : value._data; 61060} 61061 61062/** 61063 * Returns the error from the nearest ancestor `<Await />` value 61064 */ 61065function useAsyncError() { 61066 let value = react__WEBPACK_IMPORTED_MODULE_0__.useContext(AwaitContext); 61067 return value == null ? void 0 : value._error; 61068} 61069let blockerId = 0; 61070 61071/** 61072 * Allow the application to block navigations within the SPA and present the 61073 * user a confirmation dialog to confirm the navigation. Mostly used to avoid 61074 * using half-filled form data. This does not handle hard-reloads or 61075 * cross-origin navigations. 61076 */ 61077function useBlocker(shouldBlock) { 61078 let { 61079 router, 61080 basename 61081 } = useDataRouterContext(DataRouterHook.UseBlocker); 61082 let state = useDataRouterState(DataRouterStateHook.UseBlocker); 61083 let [blockerKey, setBlockerKey] = react__WEBPACK_IMPORTED_MODULE_0__.useState(""); 61084 let blockerFunction = react__WEBPACK_IMPORTED_MODULE_0__.useCallback(arg => { 61085 if (typeof shouldBlock !== "function") { 61086 return !!shouldBlock; 61087 } 61088 if (basename === "/") { 61089 return shouldBlock(arg); 61090 } 61091 61092 // If they provided us a function and we've got an active basename, strip 61093 // it from the locations we expose to the user to match the behavior of 61094 // useLocation 61095 let { 61096 currentLocation, 61097 nextLocation, 61098 historyAction 61099 } = arg; 61100 return shouldBlock({ 61101 currentLocation: _extends({}, currentLocation, { 61102 pathname: (0,_remix_run_router__WEBPACK_IMPORTED_MODULE_1__.stripBasename)(currentLocation.pathname, basename) || currentLocation.pathname 61103 }), 61104 nextLocation: _extends({}, nextLocation, { 61105 pathname: (0,_remix_run_router__WEBPACK_IMPORTED_MODULE_1__.stripBasename)(nextLocation.pathname, basename) || nextLocation.pathname 61106 }), 61107 historyAction 61108 }); 61109 }, [basename, shouldBlock]); 61110 61111 // This effect is in charge of blocker key assignment and deletion (which is 61112 // tightly coupled to the key) 61113 react__WEBPACK_IMPORTED_MODULE_0__.useEffect(() => { 61114 let key = String(++blockerId); 61115 setBlockerKey(key); 61116 return () => router.deleteBlocker(key); 61117 }, [router]); 61118 61119 // This effect handles assigning the blockerFunction. This is to handle 61120 // unstable blocker function identities, and happens only after the prior 61121 // effect so we don't get an orphaned blockerFunction in the router with a 61122 // key of "". Until then we just have the IDLE_BLOCKER. 61123 react__WEBPACK_IMPORTED_MODULE_0__.useEffect(() => { 61124 if (blockerKey !== "") { 61125 router.getBlocker(blockerKey, blockerFunction); 61126 } 61127 }, [router, blockerKey, blockerFunction]); 61128 61129 // Prefer the blocker from `state` not `router.state` since DataRouterContext 61130 // is memoized so this ensures we update on blocker state updates 61131 return blockerKey && state.blockers.has(blockerKey) ? state.blockers.get(blockerKey) : _remix_run_router__WEBPACK_IMPORTED_MODULE_1__.IDLE_BLOCKER; 61132} 61133 61134/** 61135 * Stable version of useNavigate that is used when we are in the context of 61136 * a RouterProvider. 61137 */ 61138function useNavigateStable() { 61139 let { 61140 router 61141 } = useDataRouterContext(DataRouterHook.UseNavigateStable); 61142 let id = useCurrentRouteId(DataRouterStateHook.UseNavigateStable); 61143 let activeRef = react__WEBPACK_IMPORTED_MODULE_0__.useRef(false); 61144 useIsomorphicLayoutEffect(() => { 61145 activeRef.current = true; 61146 }); 61147 let navigate = react__WEBPACK_IMPORTED_MODULE_0__.useCallback(function (to, options) { 61148 if (options === void 0) { 61149 options = {}; 61150 } 61151 true ? (0,_remix_run_router__WEBPACK_IMPORTED_MODULE_1__.UNSAFE_warning)(activeRef.current, navigateEffectWarning) : 0; 61152 61153 // Short circuit here since if this happens on first render the navigate 61154 // is useless because we haven't wired up our router subscriber yet 61155 if (!activeRef.current) return; 61156 if (typeof to === "number") { 61157 router.navigate(to); 61158 } else { 61159 router.navigate(to, _extends({ 61160 fromRouteId: id 61161 }, options)); 61162 } 61163 }, [router, id]); 61164 return navigate; 61165} 61166const alreadyWarned$1 = {}; 61167function warningOnce(key, cond, message) { 61168 if (!cond && !alreadyWarned$1[key]) { 61169 alreadyWarned$1[key] = true; 61170 true ? (0,_remix_run_router__WEBPACK_IMPORTED_MODULE_1__.UNSAFE_warning)(false, message) : 0; 61171 } 61172} 61173 61174const alreadyWarned = {}; 61175function warnOnce(key, message) { 61176 if (!alreadyWarned[message]) { 61177 alreadyWarned[message] = true; 61178 console.warn(message); 61179 } 61180} 61181const logDeprecation = (flag, msg, link) => warnOnce(flag, "\u26A0\uFE0F React Router Future Flag Warning: " + msg + ". " + ("You can use the `" + flag + "` future flag to opt-in early. ") + ("For more information, see " + link + ".")); 61182function logV6DeprecationWarnings(renderFuture, routerFuture) { 61183 if ((renderFuture == null ? void 0 : renderFuture.v7_startTransition) === undefined) { 61184 logDeprecation("v7_startTransition", "React Router will begin wrapping state updates in `React.startTransition` in v7", "https://reactrouter.com/v6/upgrading/future#v7_starttransition"); 61185 } 61186 if ((renderFuture == null ? void 0 : renderFuture.v7_relativeSplatPath) === undefined && (!routerFuture || !routerFuture.v7_relativeSplatPath)) { 61187 logDeprecation("v7_relativeSplatPath", "Relative route resolution within Splat routes is changing in v7", "https://reactrouter.com/v6/upgrading/future#v7_relativesplatpath"); 61188 } 61189 if (routerFuture) { 61190 if (routerFuture.v7_fetcherPersist === undefined) { 61191 logDeprecation("v7_fetcherPersist", "The persistence behavior of fetchers is changing in v7", "https://reactrouter.com/v6/upgrading/future#v7_fetcherpersist"); 61192 } 61193 if (routerFuture.v7_normalizeFormMethod === undefined) { 61194 logDeprecation("v7_normalizeFormMethod", "Casing of `formMethod` fields is being normalized to uppercase in v7", "https://reactrouter.com/v6/upgrading/future#v7_normalizeformmethod"); 61195 } 61196 if (routerFuture.v7_partialHydration === undefined) { 61197 logDeprecation("v7_partialHydration", "`RouterProvider` hydration behavior is changing in v7", "https://reactrouter.com/v6/upgrading/future#v7_partialhydration"); 61198 } 61199 if (routerFuture.v7_skipActionErrorRevalidation === undefined) { 61200 logDeprecation("v7_skipActionErrorRevalidation", "The revalidation behavior after 4xx/5xx `action` responses is changing in v7", "https://reactrouter.com/v6/upgrading/future#v7_skipactionerrorrevalidation"); 61201 } 61202 } 61203} 61204 61205/** 61206 Webpack + React 17 fails to compile on any of the following because webpack 61207 complains that `startTransition` doesn't exist in `React`: 61208 * import { startTransition } from "react" 61209 * import * as React from from "react"; 61210 "startTransition" in React ? React.startTransition(() => setState()) : setState() 61211 * import * as React from from "react"; 61212 "startTransition" in React ? React["startTransition"](() => setState()) : setState() 61213 61214 Moving it to a constant such as the following solves the Webpack/React 17 issue: 61215 * import * as React from from "react"; 61216 const START_TRANSITION = "startTransition"; 61217 START_TRANSITION in React ? React[START_TRANSITION](() => setState()) : setState() 61218 61219 However, that introduces webpack/terser minification issues in production builds 61220 in React 18 where minification/obfuscation ends up removing the call of 61221 React.startTransition entirely from the first half of the ternary. Grabbing 61222 this exported reference once up front resolves that issue. 61223 61224 See https://github.com/remix-run/react-router/issues/10579 61225*/ 61226const START_TRANSITION = "startTransition"; 61227const startTransitionImpl = /*#__PURE__*/ (react__WEBPACK_IMPORTED_MODULE_0___namespace_cache || (react__WEBPACK_IMPORTED_MODULE_0___namespace_cache = __webpack_require__.t(react__WEBPACK_IMPORTED_MODULE_0__, 2)))[START_TRANSITION]; 61228 61229/** 61230 * Given a Remix Router instance, render the appropriate UI 61231 */ 61232function RouterProvider(_ref) { 61233 let { 61234 fallbackElement, 61235 router, 61236 future 61237 } = _ref; 61238 let [state, setStateImpl] = react__WEBPACK_IMPORTED_MODULE_0__.useState(router.state); 61239 let { 61240 v7_startTransition 61241 } = future || {}; 61242 let setState = react__WEBPACK_IMPORTED_MODULE_0__.useCallback(newState => { 61243 if (v7_startTransition && startTransitionImpl) { 61244 startTransitionImpl(() => setStateImpl(newState)); 61245 } else { 61246 setStateImpl(newState); 61247 } 61248 }, [setStateImpl, v7_startTransition]); 61249 61250 // Need to use a layout effect here so we are subscribed early enough to 61251 // pick up on any render-driven redirects/navigations (useEffect/<Navigate>) 61252 react__WEBPACK_IMPORTED_MODULE_0__.useLayoutEffect(() => router.subscribe(setState), [router, setState]); 61253 react__WEBPACK_IMPORTED_MODULE_0__.useEffect(() => { 61254 true ? (0,_remix_run_router__WEBPACK_IMPORTED_MODULE_1__.UNSAFE_warning)(fallbackElement == null || !router.future.v7_partialHydration, "`<RouterProvider fallbackElement>` is deprecated when using " + "`v7_partialHydration`, use a `HydrateFallback` component instead") : 0; 61255 // Only log this once on initial mount 61256 // eslint-disable-next-line react-hooks/exhaustive-deps 61257 }, []); 61258 let navigator = react__WEBPACK_IMPORTED_MODULE_0__.useMemo(() => { 61259 return { 61260 createHref: router.createHref, 61261 encodeLocation: router.encodeLocation, 61262 go: n => router.navigate(n), 61263 push: (to, state, opts) => router.navigate(to, { 61264 state, 61265 preventScrollReset: opts == null ? void 0 : opts.preventScrollReset 61266 }), 61267 replace: (to, state, opts) => router.navigate(to, { 61268 replace: true, 61269 state, 61270 preventScrollReset: opts == null ? void 0 : opts.preventScrollReset 61271 }) 61272 }; 61273 }, [router]); 61274 let basename = router.basename || "/"; 61275 let dataRouterContext = react__WEBPACK_IMPORTED_MODULE_0__.useMemo(() => ({ 61276 router, 61277 navigator, 61278 static: false, 61279 basename 61280 }), [router, navigator, basename]); 61281 react__WEBPACK_IMPORTED_MODULE_0__.useEffect(() => logV6DeprecationWarnings(future, router.future), [router, future]); 61282 61283 // The fragment and {null} here are important! We need them to keep React 18's 61284 // useId happy when we are server-rendering since we may have a <script> here 61285 // containing the hydrated server-side staticContext (from StaticRouterProvider). 61286 // useId relies on the component tree structure to generate deterministic id's 61287 // so we need to ensure it remains the same on the client even though 61288 // we don't need the <script> tag 61289 return /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0__.createElement(react__WEBPACK_IMPORTED_MODULE_0__.Fragment, null, /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0__.createElement(DataRouterContext.Provider, { 61290 value: dataRouterContext 61291 }, /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0__.createElement(DataRouterStateContext.Provider, { 61292 value: state 61293 }, /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0__.createElement(Router, { 61294 basename: basename, 61295 location: state.location, 61296 navigationType: state.historyAction, 61297 navigator: navigator, 61298 future: { 61299 v7_relativeSplatPath: router.future.v7_relativeSplatPath 61300 } 61301 }, state.initialized || router.future.v7_partialHydration ? /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0__.createElement(DataRoutes, { 61302 routes: router.routes, 61303 future: router.future, 61304 state: state 61305 }) : fallbackElement))), null); 61306} 61307function DataRoutes(_ref2) { 61308 let { 61309 routes, 61310 future, 61311 state 61312 } = _ref2; 61313 return useRoutesImpl(routes, undefined, state, future); 61314} 61315/** 61316 * A `<Router>` that stores all entries in memory. 61317 * 61318 * @see https://reactrouter.com/v6/router-components/memory-router 61319 */ 61320function MemoryRouter(_ref3) { 61321 let { 61322 basename, 61323 children, 61324 initialEntries, 61325 initialIndex, 61326 future 61327 } = _ref3; 61328 let historyRef = react__WEBPACK_IMPORTED_MODULE_0__.useRef(); 61329 if (historyRef.current == null) { 61330 historyRef.current = (0,_remix_run_router__WEBPACK_IMPORTED_MODULE_1__.createMemoryHistory)({ 61331 initialEntries, 61332 initialIndex, 61333 v5Compat: true 61334 }); 61335 } 61336 let history = historyRef.current; 61337 let [state, setStateImpl] = react__WEBPACK_IMPORTED_MODULE_0__.useState({ 61338 action: history.action, 61339 location: history.location 61340 }); 61341 let { 61342 v7_startTransition 61343 } = future || {}; 61344 let setState = react__WEBPACK_IMPORTED_MODULE_0__.useCallback(newState => { 61345 v7_startTransition && startTransitionImpl ? startTransitionImpl(() => setStateImpl(newState)) : setStateImpl(newState); 61346 }, [setStateImpl, v7_startTransition]); 61347 react__WEBPACK_IMPORTED_MODULE_0__.useLayoutEffect(() => history.listen(setState), [history, setState]); 61348 react__WEBPACK_IMPORTED_MODULE_0__.useEffect(() => logV6DeprecationWarnings(future), [future]); 61349 return /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0__.createElement(Router, { 61350 basename: basename, 61351 children: children, 61352 location: state.location, 61353 navigationType: state.action, 61354 navigator: history, 61355 future: future 61356 }); 61357} 61358/** 61359 * Changes the current location. 61360 * 61361 * Note: This API is mostly useful in React.Component subclasses that are not 61362 * able to use hooks. In functional components, we recommend you use the 61363 * `useNavigate` hook instead. 61364 * 61365 * @see https://reactrouter.com/v6/components/navigate 61366 */ 61367function Navigate(_ref4) { 61368 let { 61369 to, 61370 replace, 61371 state, 61372 relative 61373 } = _ref4; 61374 !useInRouterContext() ? true ? (0,_remix_run_router__WEBPACK_IMPORTED_MODULE_1__.UNSAFE_invariant)(false, // TODO: This error is probably because they somehow have 2 versions of 61375 // the router loaded. We can help them understand how to avoid that. 61376 "<Navigate> may be used only in the context of a <Router> component.") : 0 : void 0; 61377 let { 61378 future, 61379 static: isStatic 61380 } = react__WEBPACK_IMPORTED_MODULE_0__.useContext(NavigationContext); 61381 true ? (0,_remix_run_router__WEBPACK_IMPORTED_MODULE_1__.UNSAFE_warning)(!isStatic, "<Navigate> must not be used on the initial render in a <StaticRouter>. " + "This is a no-op, but you should modify your code so the <Navigate> is " + "only ever rendered in response to some user interaction or state change.") : 0; 61382 let { 61383 matches 61384 } = react__WEBPACK_IMPORTED_MODULE_0__.useContext(RouteContext); 61385 let { 61386 pathname: locationPathname 61387 } = useLocation(); 61388 let navigate = useNavigate(); 61389 61390 // Resolve the path outside of the effect so that when effects run twice in 61391 // StrictMode they navigate to the same place 61392 let path = (0,_remix_run_router__WEBPACK_IMPORTED_MODULE_1__.resolveTo)(to, (0,_remix_run_router__WEBPACK_IMPORTED_MODULE_1__.UNSAFE_getResolveToMatches)(matches, future.v7_relativeSplatPath), locationPathname, relative === "path"); 61393 let jsonPath = JSON.stringify(path); 61394 react__WEBPACK_IMPORTED_MODULE_0__.useEffect(() => navigate(JSON.parse(jsonPath), { 61395 replace, 61396 state, 61397 relative 61398 }), [navigate, jsonPath, relative, replace, state]); 61399 return null; 61400} 61401/** 61402 * Renders the child route's element, if there is one. 61403 * 61404 * @see https://reactrouter.com/v6/components/outlet 61405 */ 61406function Outlet(props) { 61407 return useOutlet(props.context); 61408} 61409/** 61410 * Declares an element that should be rendered at a certain URL path. 61411 * 61412 * @see https://reactrouter.com/v6/components/route 61413 */ 61414function Route(_props) { 61415 true ? (0,_remix_run_router__WEBPACK_IMPORTED_MODULE_1__.UNSAFE_invariant)(false, "A <Route> is only ever to be used as the child of <Routes> element, " + "never rendered directly. Please wrap your <Route> in a <Routes>.") : 0 ; 61416} 61417/** 61418 * Provides location context for the rest of the app. 61419 * 61420 * Note: You usually won't render a `<Router>` directly. Instead, you'll render a 61421 * router that is more specific to your environment such as a `<BrowserRouter>` 61422 * in web browsers or a `<StaticRouter>` for server rendering. 61423 * 61424 * @see https://reactrouter.com/v6/router-components/router 61425 */ 61426function Router(_ref5) { 61427 let { 61428 basename: basenameProp = "/", 61429 children = null, 61430 location: locationProp, 61431 navigationType = _remix_run_router__WEBPACK_IMPORTED_MODULE_1__.Action.Pop, 61432 navigator, 61433 static: staticProp = false, 61434 future 61435 } = _ref5; 61436 !!useInRouterContext() ? true ? (0,_remix_run_router__WEBPACK_IMPORTED_MODULE_1__.UNSAFE_invariant)(false, "You cannot render a <Router> inside another <Router>." + " You should never have more than one in your app.") : 0 : void 0; 61437 61438 // Preserve trailing slashes on basename, so we can let the user control 61439 // the enforcement of trailing slashes throughout the app 61440 let basename = basenameProp.replace(/^\/*/, "/"); 61441 let navigationContext = react__WEBPACK_IMPORTED_MODULE_0__.useMemo(() => ({ 61442 basename, 61443 navigator, 61444 static: staticProp, 61445 future: _extends({ 61446 v7_relativeSplatPath: false 61447 }, future) 61448 }), [basename, future, navigator, staticProp]); 61449 if (typeof locationProp === "string") { 61450 locationProp = (0,_remix_run_router__WEBPACK_IMPORTED_MODULE_1__.parsePath)(locationProp); 61451 } 61452 let { 61453 pathname = "/", 61454 search = "", 61455 hash = "", 61456 state = null, 61457 key = "default" 61458 } = locationProp; 61459 let locationContext = react__WEBPACK_IMPORTED_MODULE_0__.useMemo(() => { 61460 let trailingPathname = (0,_remix_run_router__WEBPACK_IMPORTED_MODULE_1__.stripBasename)(pathname, basename); 61461 if (trailingPathname == null) { 61462 return null; 61463 } 61464 return { 61465 location: { 61466 pathname: trailingPathname, 61467 search, 61468 hash, 61469 state, 61470 key 61471 }, 61472 navigationType 61473 }; 61474 }, [basename, pathname, search, hash, state, key, navigationType]); 61475 true ? (0,_remix_run_router__WEBPACK_IMPORTED_MODULE_1__.UNSAFE_warning)(locationContext != null, "<Router basename=\"" + basename + "\"> is not able to match the URL " + ("\"" + pathname + search + hash + "\" because it does not start with the ") + "basename, so the <Router> won't render anything.") : 0; 61476 if (locationContext == null) { 61477 return null; 61478 } 61479 return /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0__.createElement(NavigationContext.Provider, { 61480 value: navigationContext 61481 }, /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0__.createElement(LocationContext.Provider, { 61482 children: children, 61483 value: locationContext 61484 })); 61485} 61486/** 61487 * A container for a nested tree of `<Route>` elements that renders the branch 61488 * that best matches the current location. 61489 * 61490 * @see https://reactrouter.com/v6/components/routes 61491 */ 61492function Routes(_ref6) { 61493 let { 61494 children, 61495 location 61496 } = _ref6; 61497 return useRoutes(createRoutesFromChildren(children), location); 61498} 61499/** 61500 * Component to use for rendering lazily loaded data from returning defer() 61501 * in a loader function 61502 */ 61503function Await(_ref7) { 61504 let { 61505 children, 61506 errorElement, 61507 resolve 61508 } = _ref7; 61509 return /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0__.createElement(AwaitErrorBoundary, { 61510 resolve: resolve, 61511 errorElement: errorElement 61512 }, /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0__.createElement(ResolveAwait, null, children)); 61513} 61514var AwaitRenderStatus = /*#__PURE__*/function (AwaitRenderStatus) { 61515 AwaitRenderStatus[AwaitRenderStatus["pending"] = 0] = "pending"; 61516 AwaitRenderStatus[AwaitRenderStatus["success"] = 1] = "success"; 61517 AwaitRenderStatus[AwaitRenderStatus["error"] = 2] = "error"; 61518 return AwaitRenderStatus; 61519}(AwaitRenderStatus || {}); 61520const neverSettledPromise = new Promise(() => {}); 61521class AwaitErrorBoundary extends react__WEBPACK_IMPORTED_MODULE_0__.Component { 61522 constructor(props) { 61523 super(props); 61524 this.state = { 61525 error: null 61526 }; 61527 } 61528 static getDerivedStateFromError(error) { 61529 return { 61530 error 61531 }; 61532 } 61533 componentDidCatch(error, errorInfo) { 61534 console.error("<Await> caught the following error during render", error, errorInfo); 61535 } 61536 render() { 61537 let { 61538 children, 61539 errorElement, 61540 resolve 61541 } = this.props; 61542 let promise = null; 61543 let status = AwaitRenderStatus.pending; 61544 if (!(resolve instanceof Promise)) { 61545 // Didn't get a promise - provide as a resolved promise 61546 status = AwaitRenderStatus.success; 61547 promise = Promise.resolve(); 61548 Object.defineProperty(promise, "_tracked", { 61549 get: () => true 61550 }); 61551 Object.defineProperty(promise, "_data", { 61552 get: () => resolve 61553 }); 61554 } else if (this.state.error) { 61555 // Caught a render error, provide it as a rejected promise 61556 status = AwaitRenderStatus.error; 61557 let renderError = this.state.error; 61558 promise = Promise.reject().catch(() => {}); // Avoid unhandled rejection warnings 61559 Object.defineProperty(promise, "_tracked", { 61560 get: () => true 61561 }); 61562 Object.defineProperty(promise, "_error", { 61563 get: () => renderError 61564 }); 61565 } else if (resolve._tracked) { 61566 // Already tracked promise - check contents 61567 promise = resolve; 61568 status = "_error" in promise ? AwaitRenderStatus.error : "_data" in promise ? AwaitRenderStatus.success : AwaitRenderStatus.pending; 61569 } else { 61570 // Raw (untracked) promise - track it 61571 status = AwaitRenderStatus.pending; 61572 Object.defineProperty(resolve, "_tracked", { 61573 get: () => true 61574 }); 61575 promise = resolve.then(data => Object.defineProperty(resolve, "_data", { 61576 get: () => data 61577 }), error => Object.defineProperty(resolve, "_error", { 61578 get: () => error 61579 })); 61580 } 61581 if (status === AwaitRenderStatus.error && promise._error instanceof _remix_run_router__WEBPACK_IMPORTED_MODULE_1__.AbortedDeferredError) { 61582 // Freeze the UI by throwing a never resolved promise 61583 throw neverSettledPromise; 61584 } 61585 if (status === AwaitRenderStatus.error && !errorElement) { 61586 // No errorElement, throw to the nearest route-level error boundary 61587 throw promise._error; 61588 } 61589 if (status === AwaitRenderStatus.error) { 61590 // Render via our errorElement 61591 return /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0__.createElement(AwaitContext.Provider, { 61592 value: promise, 61593 children: errorElement 61594 }); 61595 } 61596 if (status === AwaitRenderStatus.success) { 61597 // Render children with resolved value 61598 return /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0__.createElement(AwaitContext.Provider, { 61599 value: promise, 61600 children: children 61601 }); 61602 } 61603 61604 // Throw to the suspense boundary 61605 throw promise; 61606 } 61607} 61608 61609/** 61610 * @private 61611 * Indirection to leverage useAsyncValue for a render-prop API on `<Await>` 61612 */ 61613function ResolveAwait(_ref8) { 61614 let { 61615 children 61616 } = _ref8; 61617 let data = useAsyncValue(); 61618 let toRender = typeof children === "function" ? children(data) : children; 61619 return /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0__.createElement(react__WEBPACK_IMPORTED_MODULE_0__.Fragment, null, toRender); 61620} 61621 61622/////////////////////////////////////////////////////////////////////////////// 61623// UTILS 61624/////////////////////////////////////////////////////////////////////////////// 61625 61626/** 61627 * Creates a route config from a React "children" object, which is usually 61628 * either a `<Route>` element or an array of them. Used internally by 61629 * `<Routes>` to create a route config from its children. 61630 * 61631 * @see https://reactrouter.com/v6/utils/create-routes-from-children 61632 */ 61633function createRoutesFromChildren(children, parentPath) { 61634 if (parentPath === void 0) { 61635 parentPath = []; 61636 } 61637 let routes = []; 61638 react__WEBPACK_IMPORTED_MODULE_0__.Children.forEach(children, (element, index) => { 61639 if (! /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0__.isValidElement(element)) { 61640 // Ignore non-elements. This allows people to more easily inline 61641 // conditionals in their route config. 61642 return; 61643 } 61644 let treePath = [...parentPath, index]; 61645 if (element.type === react__WEBPACK_IMPORTED_MODULE_0__.Fragment) { 61646 // Transparently support React.Fragment and its children. 61647 routes.push.apply(routes, createRoutesFromChildren(element.props.children, treePath)); 61648 return; 61649 } 61650 !(element.type === Route) ? true ? (0,_remix_run_router__WEBPACK_IMPORTED_MODULE_1__.UNSAFE_invariant)(false, "[" + (typeof element.type === "string" ? element.type : element.type.name) + "] is not a <Route> component. All component children of <Routes> must be a <Route> or <React.Fragment>") : 0 : void 0; 61651 !(!element.props.index || !element.props.children) ? true ? (0,_remix_run_router__WEBPACK_IMPORTED_MODULE_1__.UNSAFE_invariant)(false, "An index route cannot have child routes.") : 0 : void 0; 61652 let route = { 61653 id: element.props.id || treePath.join("-"), 61654 caseSensitive: element.props.caseSensitive, 61655 element: element.props.element, 61656 Component: element.props.Component, 61657 index: element.props.index, 61658 path: element.props.path, 61659 loader: element.props.loader, 61660 action: element.props.action, 61661 errorElement: element.props.errorElement, 61662 ErrorBoundary: element.props.ErrorBoundary, 61663 hasErrorBoundary: element.props.ErrorBoundary != null || element.props.errorElement != null, 61664 shouldRevalidate: element.props.shouldRevalidate, 61665 handle: element.props.handle, 61666 lazy: element.props.lazy 61667 }; 61668 if (element.props.children) { 61669 route.children = createRoutesFromChildren(element.props.children, treePath); 61670 } 61671 routes.push(route); 61672 }); 61673 return routes; 61674} 61675 61676/** 61677 * Renders the result of `matchRoutes()` into a React element. 61678 */ 61679function renderMatches(matches) { 61680 return _renderMatches(matches); 61681} 61682 61683function mapRouteProperties(route) { 61684 let updates = { 61685 // Note: this check also occurs in createRoutesFromChildren so update 61686 // there if you change this -- please and thank you! 61687 hasErrorBoundary: route.ErrorBoundary != null || route.errorElement != null 61688 }; 61689 if (route.Component) { 61690 if (true) { 61691 if (route.element) { 61692 true ? (0,_remix_run_router__WEBPACK_IMPORTED_MODULE_1__.UNSAFE_warning)(false, "You should not include both `Component` and `element` on your route - " + "`Component` will be used.") : 0; 61693 } 61694 } 61695 Object.assign(updates, { 61696 element: /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0__.createElement(route.Component), 61697 Component: undefined 61698 }); 61699 } 61700 if (route.HydrateFallback) { 61701 if (true) { 61702 if (route.hydrateFallbackElement) { 61703 true ? (0,_remix_run_router__WEBPACK_IMPORTED_MODULE_1__.UNSAFE_warning)(false, "You should not include both `HydrateFallback` and `hydrateFallbackElement` on your route - " + "`HydrateFallback` will be used.") : 0; 61704 } 61705 } 61706 Object.assign(updates, { 61707 hydrateFallbackElement: /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0__.createElement(route.HydrateFallback), 61708 HydrateFallback: undefined 61709 }); 61710 } 61711 if (route.ErrorBoundary) { 61712 if (true) { 61713 if (route.errorElement) { 61714 true ? (0,_remix_run_router__WEBPACK_IMPORTED_MODULE_1__.UNSAFE_warning)(false, "You should not include both `ErrorBoundary` and `errorElement` on your route - " + "`ErrorBoundary` will be used.") : 0; 61715 } 61716 } 61717 Object.assign(updates, { 61718 errorElement: /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0__.createElement(route.ErrorBoundary), 61719 ErrorBoundary: undefined 61720 }); 61721 } 61722 return updates; 61723} 61724function createMemoryRouter(routes, opts) { 61725 return (0,_remix_run_router__WEBPACK_IMPORTED_MODULE_1__.createRouter)({ 61726 basename: opts == null ? void 0 : opts.basename, 61727 future: _extends({}, opts == null ? void 0 : opts.future, { 61728 v7_prependBasename: true 61729 }), 61730 history: (0,_remix_run_router__WEBPACK_IMPORTED_MODULE_1__.createMemoryHistory)({ 61731 initialEntries: opts == null ? void 0 : opts.initialEntries, 61732 initialIndex: opts == null ? void 0 : opts.initialIndex 61733 }), 61734 hydrationData: opts == null ? void 0 : opts.hydrationData, 61735 routes, 61736 mapRouteProperties, 61737 dataStrategy: opts == null ? void 0 : opts.dataStrategy, 61738 patchRoutesOnNavigation: opts == null ? void 0 : opts.patchRoutesOnNavigation 61739 }).initialize(); 61740} 61741 61742 61743//# sourceMappingURL=index.js.map 61744 61745 61746/***/ }), 61747
vendor: 1,008 bytes, lines 61748-61770
61748/***/ "./node_modules/react-share/es/EmailIcon.js": 61749/*!**************************************************!*\ 61750 !*** ./node_modules/react-share/es/EmailIcon.js ***! 61751 \**************************************************/ 61752/***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => { 61753 61754"use strict"; 61755__webpack_require__.r(__webpack_exports__); 61756/* harmony export */ __webpack_require__.d(__webpack_exports__, { 61757/* harmony export */ "default": () => (__WEBPACK_DEFAULT_EXPORT__) 61758/* harmony export */ }); 61759/* harmony import */ var _hocs_createIcon__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ./hocs/createIcon */ "./node_modules/react-share/es/hocs/createIcon.js"); 61760 61761var EmailIcon = (0,_hocs_createIcon__WEBPACK_IMPORTED_MODULE_0__["default"])({ 61762 color: '#7f7f7f', 61763 networkName: 'email', 61764 path: 'M17,22v20h30V22H17z M41.1,25L32,32.1L22.9,25H41.1z M20,39V26.6l12,9.3l12-9.3V39H20z', 61765}); 61766/* harmony default export */ const __WEBPACK_DEFAULT_EXPORT__ = (EmailIcon); 61767 61768 61769/***/ }), 61770
vendor: 1,649 bytes, lines 61771-61804
61771/***/ "./node_modules/react-share/es/EmailShareButton.js": 61772/*!*********************************************************!*\ 61773 !*** ./node_modules/react-share/es/EmailShareButton.js ***! 61774 \*********************************************************/ 61775/***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => { 61776 61777"use strict"; 61778__webpack_require__.r(__webpack_exports__); 61779/* harmony export */ __webpack_require__.d(__webpack_exports__, { 61780/* harmony export */ "default": () => (__WEBPACK_DEFAULT_EXPORT__) 61781/* harmony export */ }); 61782/* harmony import */ var _utils_objectToGetParams__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ./utils/objectToGetParams */ "./node_modules/react-share/es/utils/objectToGetParams.js"); 61783/* harmony import */ var _hocs_createShareButton__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ./hocs/createShareButton */ "./node_modules/react-share/es/hocs/createShareButton.js"); 61784 61785 61786function emailLink(url, _a) { 61787 var subject = _a.subject, body = _a.body, separator = _a.separator; 61788 return 'mailto:' + (0,_utils_objectToGetParams__WEBPACK_IMPORTED_MODULE_0__["default"])({ subject: subject, body: body ? body + separator + url : url }); 61789} 61790var EmailShareButton = (0,_hocs_createShareButton__WEBPACK_IMPORTED_MODULE_1__["default"])('email', emailLink, function (props) { return ({ 61791 subject: props.subject, 61792 body: props.body, 61793 separator: props.separator || ' ', 61794}); }, { 61795 openShareDialogOnClick: false, 61796 onClick: function (_, link) { 61797 window.location.href = link; 61798 }, 61799}); 61800/* harmony default export */ const __WEBPACK_DEFAULT_EXPORT__ = (EmailShareButton); 61801 61802 61803/***/ }), 61804
vendor: 1,084 bytes, lines 61805-61827
61805/***/ "./node_modules/react-share/es/FacebookIcon.js": 61806/*!*****************************************************!*\ 61807 !*** ./node_modules/react-share/es/FacebookIcon.js ***! 61808 \*****************************************************/ 61809/***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => { 61810 61811"use strict"; 61812__webpack_require__.r(__webpack_exports__); 61813/* harmony export */ __webpack_require__.d(__webpack_exports__, { 61814/* harmony export */ "default": () => (__WEBPACK_DEFAULT_EXPORT__) 61815/* harmony export */ }); 61816/* harmony import */ var _hocs_createIcon__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ./hocs/createIcon */ "./node_modules/react-share/es/hocs/createIcon.js"); 61817 61818var FacebookIcon = (0,_hocs_createIcon__WEBPACK_IMPORTED_MODULE_0__["default"])({ 61819 color: '#3b5998', 61820 networkName: 'facebook', 61821 path: 'M34.1,47V33.3h4.6l0.7-5.3h-5.3v-3.4c0-1.5,0.4-2.6,2.6-2.6l2.8,0v-4.8c-0.5-0.1-2.2-0.2-4.1-0.2 c-4.1,0-6.9,2.5-6.9,7V28H24v5.3h4.6V47H34.1z', 61822}); 61823/* harmony default export */ const __WEBPACK_DEFAULT_EXPORT__ = (FacebookIcon); 61824 61825 61826/***/ }), 61827
vendor: 1,550 bytes, lines 61828-61850
61828/***/ "./node_modules/react-share/es/FacebookMessengerIcon.js": 61829/*!**************************************************************!*\ 61830 !*** ./node_modules/react-share/es/FacebookMessengerIcon.js ***! 61831 \**************************************************************/ 61832/***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => { 61833 61834"use strict"; 61835__webpack_require__.r(__webpack_exports__); 61836/* harmony export */ __webpack_require__.d(__webpack_exports__, { 61837/* harmony export */ "default": () => (__WEBPACK_DEFAULT_EXPORT__) 61838/* harmony export */ }); 61839/* harmony import */ var _hocs_createIcon__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ./hocs/createIcon */ "./node_modules/react-share/es/hocs/createIcon.js"); 61840 61841var FacebookMessengerIcon = (0,_hocs_createIcon__WEBPACK_IMPORTED_MODULE_0__["default"])({ 61842 color: '#2196F3', 61843 networkName: 'facebookmessenger', 61844 path: 'M 53.066406 21.871094 C 52.667969 21.339844 51.941406 21.179688 51.359375 21.496094 L 37.492188 29.058594 L 28.867188 21.660156 C 28.339844 21.207031 27.550781 21.238281 27.054688 21.730469 L 11.058594 37.726562 C 10.539062 38.25 10.542969 39.09375 11.0625 39.613281 C 11.480469 40.027344 12.121094 40.121094 12.640625 39.839844 L 26.503906 32.28125 L 35.136719 39.679688 C 35.667969 40.132812 36.457031 40.101562 36.949219 39.609375 L 52.949219 23.613281 C 53.414062 23.140625 53.464844 22.398438 53.066406 21.871094 Z M 53.066406 21.871094', 61845}); 61846/* harmony default export */ const __WEBPACK_DEFAULT_EXPORT__ = (FacebookMessengerIcon); 61847 61848 61849/***/ }), 61850
vendor: 1,778 bytes, lines 61851-61888
61851/***/ "./node_modules/react-share/es/FacebookMessengerShareButton.js": 61852/*!*********************************************************************!*\ 61853 !*** ./node_modules/react-share/es/FacebookMessengerShareButton.js ***! 61854 \*********************************************************************/ 61855/***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => { 61856 61857"use strict"; 61858__webpack_require__.r(__webpack_exports__); 61859/* harmony export */ __webpack_require__.d(__webpack_exports__, { 61860/* harmony export */ "default": () => (__WEBPACK_DEFAULT_EXPORT__) 61861/* harmony export */ }); 61862/* harmony import */ var _utils_objectToGetParams__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ./utils/objectToGetParams */ "./node_modules/react-share/es/utils/objectToGetParams.js"); 61863/* harmony import */ var _hocs_createShareButton__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ./hocs/createShareButton */ "./node_modules/react-share/es/hocs/createShareButton.js"); 61864 61865 61866function facebookMessengerLink(url, _a) { 61867 var appId = _a.appId, redirectUri = _a.redirectUri, to = _a.to; 61868 return ('https://www.facebook.com/dialog/send' + 61869 (0,_utils_objectToGetParams__WEBPACK_IMPORTED_MODULE_0__["default"])({ 61870 link: url, 61871 redirect_uri: redirectUri || url, 61872 app_id: appId, 61873 to: to, 61874 })); 61875} 61876var FacebookMessengerShareButton = (0,_hocs_createShareButton__WEBPACK_IMPORTED_MODULE_1__["default"])('facebookmessenger', facebookMessengerLink, function (props) { return ({ 61877 appId: props.appId, 61878 redirectUri: props.redirectUri, 61879 to: props.to, 61880}); }, { 61881 windowWidth: 1000, 61882 windowHeight: 820, 61883}); 61884/* harmony default export */ const __WEBPACK_DEFAULT_EXPORT__ = (FacebookMessengerShareButton); 61885 61886 61887/***/ }), 61888
vendor: 1,863 bytes, lines 61889-61927
61889/***/ "./node_modules/react-share/es/FacebookShareButton.js": 61890/*!************************************************************!*\ 61891 !*** ./node_modules/react-share/es/FacebookShareButton.js ***! 61892 \************************************************************/ 61893/***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => { 61894 61895"use strict"; 61896__webpack_require__.r(__webpack_exports__); 61897/* harmony export */ __webpack_require__.d(__webpack_exports__, { 61898/* harmony export */ "default": () => (__WEBPACK_DEFAULT_EXPORT__) 61899/* harmony export */ }); 61900/* harmony import */ var _utils_assert__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ./utils/assert */ "./node_modules/react-share/es/utils/assert.js"); 61901/* harmony import */ var _utils_objectToGetParams__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ./utils/objectToGetParams */ "./node_modules/react-share/es/utils/objectToGetParams.js"); 61902/* harmony import */ var _hocs_createShareButton__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! ./hocs/createShareButton */ "./node_modules/react-share/es/hocs/createShareButton.js"); 61903 61904 61905 61906function facebookLink(url, _a) { 61907 var quote = _a.quote, hashtag = _a.hashtag; 61908 (0,_utils_assert__WEBPACK_IMPORTED_MODULE_0__["default"])(url, 'facebook.url'); 61909 return ('https://www.facebook.com/sharer/sharer.php' + 61910 (0,_utils_objectToGetParams__WEBPACK_IMPORTED_MODULE_1__["default"])({ 61911 u: url, 61912 quote: quote, 61913 hashtag: hashtag, 61914 })); 61915} 61916var FacebookShareButton = (0,_hocs_createShareButton__WEBPACK_IMPORTED_MODULE_2__["default"])('facebook', facebookLink, function (props) { return ({ 61917 quote: props.quote, 61918 hashtag: props.hashtag, 61919}); }, { 61920 windowWidth: 550, 61921 windowHeight: 400, 61922}); 61923/* harmony default export */ const __WEBPACK_DEFAULT_EXPORT__ = (FacebookShareButton); 61924 61925 61926/***/ }), 61927
vendor: 1,584 bytes, lines 61928-61956
61928/***/ "./node_modules/react-share/es/FacebookShareCount.js": 61929/*!***********************************************************!*\ 61930 !*** ./node_modules/react-share/es/FacebookShareCount.js ***! 61931 \***********************************************************/ 61932/***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => { 61933 61934"use strict"; 61935__webpack_require__.r(__webpack_exports__); 61936/* harmony export */ __webpack_require__.d(__webpack_exports__, { 61937/* harmony export */ "default": () => (__WEBPACK_DEFAULT_EXPORT__) 61938/* harmony export */ }); 61939/* harmony import */ var jsonp__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! jsonp */ "./node_modules/jsonp/index.js"); 61940/* harmony import */ var jsonp__WEBPACK_IMPORTED_MODULE_0___default = /*#__PURE__*/__webpack_require__.n(jsonp__WEBPACK_IMPORTED_MODULE_0__); 61941/* harmony import */ var _hocs_createShareCount__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ./hocs/createShareCount */ "./node_modules/react-share/es/hocs/createShareCount.js"); 61942 61943 61944function getFacebookShareCount(shareUrl, callback) { 61945 var endpoint = "https://graph.facebook.com/?id=".concat(shareUrl, "&fields=og_object{engagement}"); 61946 jsonp__WEBPACK_IMPORTED_MODULE_0___default()(endpoint, function (err, data) { 61947 callback(!err && data && data.og_object && data.og_object.engagement 61948 ? data.og_object.engagement.count 61949 : undefined); 61950 }); 61951} 61952/* harmony default export */ const __WEBPACK_DEFAULT_EXPORT__ = ((0,_hocs_createShareCount__WEBPACK_IMPORTED_MODULE_1__["default"])(getFacebookShareCount)); 61953 61954 61955/***/ }), 61956
vendor: 2,816 bytes, lines 61957-61979
61957/***/ "./node_modules/react-share/es/HatenaIcon.js": 61958/*!***************************************************!*\ 61959 !*** ./node_modules/react-share/es/HatenaIcon.js ***! 61960 \***************************************************/ 61961/***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => { 61962 61963"use strict"; 61964__webpack_require__.r(__webpack_exports__); 61965/* harmony export */ __webpack_require__.d(__webpack_exports__, { 61966/* harmony export */ "default": () => (__WEBPACK_DEFAULT_EXPORT__) 61967/* harmony export */ }); 61968/* harmony import */ var _hocs_createIcon__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ./hocs/createIcon */ "./node_modules/react-share/es/hocs/createIcon.js"); 61969 61970var HatenaIcon = (0,_hocs_createIcon__WEBPACK_IMPORTED_MODULE_0__["default"])({ 61971 color: '#009ad9', 61972 networkName: 'hatena', 61973 path: 'M 36.164062 33.554688 C 34.988281 32.234375 33.347656 31.5 31.253906 31.34375 C 33.125 30.835938 34.476562 30.09375 35.335938 29.09375 C 36.191406 28.09375 36.609375 26.78125 36.609375 25.101562 C 36.628906 23.875 36.332031 22.660156 35.75 21.578125 C 35.160156 20.558594 34.292969 19.71875 33.253906 19.160156 C 32.304688 18.640625 31.175781 18.265625 29.847656 18.042969 C 28.523438 17.824219 26.195312 17.730469 22.867188 17.730469 L 14.769531 17.730469 L 14.769531 47.269531 L 23.113281 47.269531 C 26.46875 47.269531 28.886719 47.15625 30.367188 46.929688 C 31.851562 46.695312 33.085938 46.304688 34.085938 45.773438 C 35.289062 45.148438 36.28125 44.179688 36.933594 42.992188 C 37.597656 41.796875 37.933594 40.402344 37.933594 38.816406 C 37.933594 36.621094 37.347656 34.867188 36.164062 33.554688 Z M 22.257812 24.269531 L 23.984375 24.269531 C 25.988281 24.269531 27.332031 24.496094 28.015625 24.945312 C 28.703125 25.402344 29.042969 26.183594 29.042969 27.285156 C 29.042969 28.390625 28.664062 29.105469 27.9375 29.550781 C 27.210938 29.992188 25.84375 30.199219 23.855469 30.199219 L 22.257812 30.199219 Z M 29.121094 41.210938 C 28.328125 41.691406 26.976562 41.925781 25.078125 41.925781 L 22.257812 41.925781 L 22.257812 35.488281 L 25.195312 35.488281 C 27.144531 35.488281 28.496094 35.738281 29.210938 36.230469 C 29.925781 36.726562 30.304688 37.582031 30.304688 38.832031 C 30.304688 40.078125 29.914062 40.742188 29.105469 41.222656 Z M 29.121094 41.210938 M 46.488281 39.792969 C 44.421875 39.792969 42.742188 41.46875 42.742188 43.535156 C 42.742188 45.605469 44.421875 47.28125 46.488281 47.28125 C 48.554688 47.28125 50.230469 45.605469 50.230469 43.535156 C 50.230469 41.46875 48.554688 39.792969 46.488281 39.792969 Z M 46.488281 39.792969 M 43.238281 17.730469 L 49.738281 17.730469 L 49.738281 37.429688 L 43.238281 37.429688 Z M 43.238281 17.730469 ', 61974}); 61975/* harmony default export */ const __WEBPACK_DEFAULT_EXPORT__ = (HatenaIcon); 61976 61977 61978/***/ }), 61979
vendor: 1,501 bytes, lines 61980-62011
61980/***/ "./node_modules/react-share/es/HatenaShareButton.js": 61981/*!**********************************************************!*\ 61982 !*** ./node_modules/react-share/es/HatenaShareButton.js ***! 61983 \**********************************************************/ 61984/***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => { 61985 61986"use strict"; 61987__webpack_require__.r(__webpack_exports__); 61988/* harmony export */ __webpack_require__.d(__webpack_exports__, { 61989/* harmony export */ "default": () => (__WEBPACK_DEFAULT_EXPORT__) 61990/* harmony export */ }); 61991/* harmony import */ var _utils_assert__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ./utils/assert */ "./node_modules/react-share/es/utils/assert.js"); 61992/* harmony import */ var _hocs_createShareButton__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ./hocs/createShareButton */ "./node_modules/react-share/es/hocs/createShareButton.js"); 61993 61994 61995function hatenaLink(url, _a) { 61996 var title = _a.title; 61997 (0,_utils_assert__WEBPACK_IMPORTED_MODULE_0__["default"])(url, 'hatena.url'); 61998 return "http://b.hatena.ne.jp/add?mode=confirm&url=".concat(url, "&title=").concat(title); 61999} 62000var HatenaShareButton = (0,_hocs_createShareButton__WEBPACK_IMPORTED_MODULE_1__["default"])('hatena', hatenaLink, function (props) { return ({ 62001 title: props.title, 62002}); }, { 62003 windowWidth: 660, 62004 windowHeight: 460, 62005 windowPosition: 'windowCenter', 62006}); 62007/* harmony default export */ const __WEBPACK_DEFAULT_EXPORT__ = (HatenaShareButton); 62008 62009 62010/***/ }), 62011
vendor: 1,733 bytes, lines 62012-62043
62012/***/ "./node_modules/react-share/es/HatenaShareCount.js": 62013/*!*********************************************************!*\ 62014 !*** ./node_modules/react-share/es/HatenaShareCount.js ***! 62015 \*********************************************************/ 62016/***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => { 62017 62018"use strict"; 62019__webpack_require__.r(__webpack_exports__); 62020/* harmony export */ __webpack_require__.d(__webpack_exports__, { 62021/* harmony export */ "default": () => (__WEBPACK_DEFAULT_EXPORT__) 62022/* harmony export */ }); 62023/* harmony import */ var jsonp__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! jsonp */ "./node_modules/jsonp/index.js"); 62024/* harmony import */ var jsonp__WEBPACK_IMPORTED_MODULE_0___default = /*#__PURE__*/__webpack_require__.n(jsonp__WEBPACK_IMPORTED_MODULE_0__); 62025/* harmony import */ var _utils_objectToGetParams__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ./utils/objectToGetParams */ "./node_modules/react-share/es/utils/objectToGetParams.js"); 62026/* harmony import */ var _hocs_createShareCount__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! ./hocs/createShareCount */ "./node_modules/react-share/es/hocs/createShareCount.js"); 62027 62028 62029 62030function getHatenaShareCount(shareUrl, callback) { 62031 var url = 'https://bookmark.hatenaapis.com/count/entry'; 62032 jsonp__WEBPACK_IMPORTED_MODULE_0___default()(url + 62033 (0,_utils_objectToGetParams__WEBPACK_IMPORTED_MODULE_1__["default"])({ 62034 url: shareUrl, 62035 }), function (err, data) { 62036 callback(data ? data : undefined); 62037 }); 62038} 62039/* harmony default export */ const __WEBPACK_DEFAULT_EXPORT__ = ((0,_hocs_createShareCount__WEBPACK_IMPORTED_MODULE_2__["default"])(getHatenaShareCount)); 62040 62041 62042/***/ }), 62043
vendor: 1,148 bytes, lines 62044-62066
62044/***/ "./node_modules/react-share/es/InstapaperIcon.js": 62045/*!*******************************************************!*\ 62046 !*** ./node_modules/react-share/es/InstapaperIcon.js ***! 62047 \*******************************************************/ 62048/***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => { 62049 62050"use strict"; 62051__webpack_require__.r(__webpack_exports__); 62052/* harmony export */ __webpack_require__.d(__webpack_exports__, { 62053/* harmony export */ "default": () => (__WEBPACK_DEFAULT_EXPORT__) 62054/* harmony export */ }); 62055/* harmony import */ var _hocs_createIcon__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ./hocs/createIcon */ "./node_modules/react-share/es/hocs/createIcon.js"); 62056 62057var InstapaperIcon = (0,_hocs_createIcon__WEBPACK_IMPORTED_MODULE_0__["default"])({ 62058 color: '#1F1F1F', 62059 networkName: 'instapaper', 62060 path: 'M35.688 43.012c0 2.425.361 2.785 3.912 3.056V48H24.401v-1.932c3.555-.27 3.912-.63 3.912-3.056V20.944c0-2.379-.36-2.785-3.912-3.056V16H39.6v1.888c-3.55.27-3.912.675-3.912 3.056v22.068h.001z', 62061}); 62062/* harmony default export */ const __WEBPACK_DEFAULT_EXPORT__ = (InstapaperIcon); 62063 62064 62065/***/ }), 62066
vendor: 1,935 bytes, lines 62067-62106
62067/***/ "./node_modules/react-share/es/InstapaperShareButton.js": 62068/*!**************************************************************!*\ 62069 !*** ./node_modules/react-share/es/InstapaperShareButton.js ***! 62070 \**************************************************************/ 62071/***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => { 62072 62073"use strict"; 62074__webpack_require__.r(__webpack_exports__); 62075/* harmony export */ __webpack_require__.d(__webpack_exports__, { 62076/* harmony export */ "default": () => (__WEBPACK_DEFAULT_EXPORT__) 62077/* harmony export */ }); 62078/* harmony import */ var _utils_assert__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ./utils/assert */ "./node_modules/react-share/es/utils/assert.js"); 62079/* harmony import */ var _hocs_createShareButton__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! ./hocs/createShareButton */ "./node_modules/react-share/es/hocs/createShareButton.js"); 62080/* harmony import */ var _utils_objectToGetParams__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ./utils/objectToGetParams */ "./node_modules/react-share/es/utils/objectToGetParams.js"); 62081 62082 62083 62084function instapaperLink(url, _a) { 62085 var title = _a.title, description = _a.description; 62086 (0,_utils_assert__WEBPACK_IMPORTED_MODULE_0__["default"])(url, 'instapaper.url'); 62087 return ('http://www.instapaper.com/hello2' + 62088 (0,_utils_objectToGetParams__WEBPACK_IMPORTED_MODULE_1__["default"])({ 62089 url: url, 62090 title: title, 62091 description: description, 62092 })); 62093} 62094var InstapaperShareButton = (0,_hocs_createShareButton__WEBPACK_IMPORTED_MODULE_2__["default"])('instapaper', instapaperLink, function (props) { return ({ 62095 title: props.title, 62096 description: props.description, 62097}); }, { 62098 windowWidth: 500, 62099 windowHeight: 500, 62100 windowPosition: 'windowCenter', 62101}); 62102/* harmony default export */ const __WEBPACK_DEFAULT_EXPORT__ = (InstapaperShareButton); 62103 62104 62105/***/ }), 62106
vendor: 2,467 bytes, lines 62107-62129
62107/***/ "./node_modules/react-share/es/LineIcon.js": 62108/*!*************************************************!*\ 62109 !*** ./node_modules/react-share/es/LineIcon.js ***! 62110 \*************************************************/ 62111/***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => { 62112 62113"use strict"; 62114__webpack_require__.r(__webpack_exports__); 62115/* harmony export */ __webpack_require__.d(__webpack_exports__, { 62116/* harmony export */ "default": () => (__WEBPACK_DEFAULT_EXPORT__) 62117/* harmony export */ }); 62118/* harmony import */ var _hocs_createIcon__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ./hocs/createIcon */ "./node_modules/react-share/es/hocs/createIcon.js"); 62119 62120var LineIcon = (0,_hocs_createIcon__WEBPACK_IMPORTED_MODULE_0__["default"])({ 62121 color: '#00b800', 62122 networkName: 'line', 62123 path: 'M52.62 30.138c0 3.693-1.432 7.019-4.42 10.296h.001c-4.326 4.979-14 11.044-16.201 11.972-2.2.927-1.876-.591-1.786-1.112l.294-1.765c.069-.527.142-1.343-.066-1.865-.232-.574-1.146-.872-1.817-1.016-9.909-1.31-17.245-8.238-17.245-16.51 0-9.226 9.251-16.733 20.62-16.733 11.37 0 20.62 7.507 20.62 16.733zM27.81 25.68h-1.446a.402.402 0 0 0-.402.401v8.985c0 .221.18.4.402.4h1.446a.401.401 0 0 0 .402-.4v-8.985a.402.402 0 0 0-.402-.401zm9.956 0H36.32a.402.402 0 0 0-.402.401v5.338L31.8 25.858a.39.39 0 0 0-.031-.04l-.002-.003-.024-.025-.008-.007a.313.313 0 0 0-.032-.026.255.255 0 0 1-.021-.014l-.012-.007-.021-.012-.013-.006-.023-.01-.013-.005-.024-.008-.014-.003-.023-.005-.017-.002-.021-.003-.021-.002h-1.46a.402.402 0 0 0-.402.401v8.985c0 .221.18.4.402.4h1.446a.401.401 0 0 0 .402-.4v-5.337l4.123 5.568c.028.04.063.072.101.099l.004.003a.236.236 0 0 0 .025.015l.012.006.019.01a.154.154 0 0 1 .019.008l.012.004.028.01.005.001a.442.442 0 0 0 .104.013h1.446a.4.4 0 0 0 .401-.4v-8.985a.402.402 0 0 0-.401-.401zm-13.442 7.537h-3.93v-7.136a.401.401 0 0 0-.401-.401h-1.447a.4.4 0 0 0-.401.401v8.984a.392.392 0 0 0 .123.29c.072.068.17.111.278.111h5.778a.4.4 0 0 0 .401-.401v-1.447a.401.401 0 0 0-.401-.401zm21.429-5.287c.222 0 .401-.18.401-.402v-1.446a.401.401 0 0 0-.401-.402h-5.778a.398.398 0 0 0-.279.113l-.005.004-.006.008a.397.397 0 0 0-.111.276v8.984c0 .108.043.206.112.278l.005.006a.401.401 0 0 0 .284.117h5.778a.4.4 0 0 0 .401-.401v-1.447a.401.401 0 0 0-.401-.401h-3.93v-1.519h3.93c.222 0 .401-.18.401-.402V29.85a.401.401 0 0 0-.401-.402h-3.93V27.93h3.93z', 62124}); 62125/* harmony default export */ const __WEBPACK_DEFAULT_EXPORT__ = (LineIcon); 62126 62127 62128/***/ }), 62129
vendor: 1,745 bytes, lines 62130-62166
62130/***/ "./node_modules/react-share/es/LineShareButton.js": 62131/*!********************************************************!*\ 62132 !*** ./node_modules/react-share/es/LineShareButton.js ***! 62133 \********************************************************/ 62134/***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => { 62135 62136"use strict"; 62137__webpack_require__.r(__webpack_exports__); 62138/* harmony export */ __webpack_require__.d(__webpack_exports__, { 62139/* harmony export */ "default": () => (__WEBPACK_DEFAULT_EXPORT__) 62140/* harmony export */ }); 62141/* harmony import */ var _utils_assert__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ./utils/assert */ "./node_modules/react-share/es/utils/assert.js"); 62142/* harmony import */ var _hocs_createShareButton__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! ./hocs/createShareButton */ "./node_modules/react-share/es/hocs/createShareButton.js"); 62143/* harmony import */ var _utils_objectToGetParams__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ./utils/objectToGetParams */ "./node_modules/react-share/es/utils/objectToGetParams.js"); 62144 62145 62146 62147function lineLink(url, _a) { 62148 var title = _a.title; 62149 (0,_utils_assert__WEBPACK_IMPORTED_MODULE_0__["default"])(url, 'line.url'); 62150 return ('https://social-plugins.line.me/lineit/share' + 62151 (0,_utils_objectToGetParams__WEBPACK_IMPORTED_MODULE_1__["default"])({ 62152 url: url, 62153 text: title, 62154 })); 62155} 62156var LineShareButton = (0,_hocs_createShareButton__WEBPACK_IMPORTED_MODULE_2__["default"])('line', lineLink, function (props) { return ({ 62157 title: props.title, 62158}); }, { 62159 windowWidth: 500, 62160 windowHeight: 500, 62161}); 62162/* harmony default export */ const __WEBPACK_DEFAULT_EXPORT__ = (LineShareButton); 62163 62164 62165/***/ }), 62166
vendor: 1,220 bytes, lines 62167-62189
62167/***/ "./node_modules/react-share/es/LinkedinIcon.js": 62168/*!*****************************************************!*\ 62169 !*** ./node_modules/react-share/es/LinkedinIcon.js ***! 62170 \*****************************************************/ 62171/***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => { 62172 62173"use strict"; 62174__webpack_require__.r(__webpack_exports__); 62175/* harmony export */ __webpack_require__.d(__webpack_exports__, { 62176/* harmony export */ "default": () => (__WEBPACK_DEFAULT_EXPORT__) 62177/* harmony export */ }); 62178/* harmony import */ var _hocs_createIcon__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ./hocs/createIcon */ "./node_modules/react-share/es/hocs/createIcon.js"); 62179 62180var LinkedinIcon = (0,_hocs_createIcon__WEBPACK_IMPORTED_MODULE_0__["default"])({ 62181 color: '#007fb1', 62182 networkName: 'linkedin', 62183 path: 'M20.4,44h5.4V26.6h-5.4V44z M23.1,18c-1.7,0-3.1,1.4-3.1,3.1c0,1.7,1.4,3.1,3.1,3.1 c1.7,0,3.1-1.4,3.1-3.1C26.2,19.4,24.8,18,23.1,18z M39.5,26.2c-2.6,0-4.4,1.4-5.1,2.8h-0.1v-2.4h-5.2V44h5.4v-8.6 c0-2.3,0.4-4.5,3.2-4.5c2.8,0,2.8,2.6,2.8,4.6V44H46v-9.5C46,29.8,45,26.2,39.5,26.2z', 62184}); 62185/* harmony default export */ const __WEBPACK_DEFAULT_EXPORT__ = (LinkedinIcon); 62186 62187 62188/***/ }), 62189
vendor: 1,925 bytes, lines 62190-62224
62190/***/ "./node_modules/react-share/es/LinkedinShareButton.js": 62191/*!************************************************************!*\ 62192 !*** ./node_modules/react-share/es/LinkedinShareButton.js ***! 62193 \************************************************************/ 62194/***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => { 62195 62196"use strict"; 62197__webpack_require__.r(__webpack_exports__); 62198/* harmony export */ __webpack_require__.d(__webpack_exports__, { 62199/* harmony export */ "default": () => (__WEBPACK_DEFAULT_EXPORT__) 62200/* harmony export */ }); 62201/* harmony import */ var _utils_assert__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ./utils/assert */ "./node_modules/react-share/es/utils/assert.js"); 62202/* harmony import */ var _utils_objectToGetParams__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ./utils/objectToGetParams */ "./node_modules/react-share/es/utils/objectToGetParams.js"); 62203/* harmony import */ var _hocs_createShareButton__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! ./hocs/createShareButton */ "./node_modules/react-share/es/hocs/createShareButton.js"); 62204 62205 62206 62207function linkedinLink(url, _a) { 62208 var title = _a.title, summary = _a.summary, source = _a.source; 62209 (0,_utils_assert__WEBPACK_IMPORTED_MODULE_0__["default"])(url, 'linkedin.url'); 62210 return ('https://linkedin.com/shareArticle' + 62211 (0,_utils_objectToGetParams__WEBPACK_IMPORTED_MODULE_1__["default"])({ url: url, mini: 'true', title: title, summary: summary, source: source })); 62212} 62213var LinkedinShareButton = (0,_hocs_createShareButton__WEBPACK_IMPORTED_MODULE_2__["default"])('linkedin', linkedinLink, function (_a) { 62214 var title = _a.title, summary = _a.summary, source = _a.source; 62215 return ({ title: title, summary: summary, source: source }); 62216}, { 62217 windowWidth: 750, 62218 windowHeight: 600, 62219}); 62220/* harmony default export */ const __WEBPACK_DEFAULT_EXPORT__ = (LinkedinShareButton); 62221 62222 62223/***/ }), 62224
vendor: 2,367 bytes, lines 62225-62247
62225/***/ "./node_modules/react-share/es/LivejournalIcon.js": 62226/*!********************************************************!*\ 62227 !*** ./node_modules/react-share/es/LivejournalIcon.js ***! 62228 \********************************************************/ 62229/***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => { 62230 62231"use strict"; 62232__webpack_require__.r(__webpack_exports__); 62233/* harmony export */ __webpack_require__.d(__webpack_exports__, { 62234/* harmony export */ "default": () => (__WEBPACK_DEFAULT_EXPORT__) 62235/* harmony export */ }); 62236/* harmony import */ var _hocs_createIcon__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ./hocs/createIcon */ "./node_modules/react-share/es/hocs/createIcon.js"); 62237 62238var LivejournalIcon = (0,_hocs_createIcon__WEBPACK_IMPORTED_MODULE_0__["default"])({ 62239 color: '#21A5D8', 62240 networkName: 'livejournal', 62241 path: 'M18.3407821,28.1764706 L21.9441341,31.789916 L33.0055865,42.882353 C33.0055865,42.882353 33.0893855,42.9663866 33.0893855,42.9663866 L46.6648046,47 C46.6648046,47 46.6648046,47 46.7486034,47 C46.8324022,47 46.8324022,47 46.9162012,46.9159664 C47,46.8319327 47,46.8319327 47,46.7478991 L42.9776536,33.1344537 C42.9776536,33.1344537 42.9776536,33.1344537 42.8938548,33.0504202 L31.1620111,21.3697479 L31.1620111,21.3697479 L28.1452514,18.2605042 C27.3072626,17.4201681 26.5530726,17 25.7150838,17 C24.2905028,17 23.0335195,18.3445378 21.5251397,19.8571429 C21.273743,20.1092437 20.9385475,20.4453781 20.6871508,20.697479 C20.3519553,21.0336134 20.1005586,21.2857143 19.849162,21.5378151 C18.3407821,22.9663866 17.0837989,24.2268908 17,25.7394958 C17.0837989,26.4957983 17.5027933,27.3361345 18.3407821,28.1764706 Z M39.9012319,39.6134454 C39.7336341,39.4453781 39.4822374,37.6806724 40.2364275,36.8403362 C40.9906174,36.0840337 41.6610084,36 42.1638017,36 C42.3313995,36 42.4989973,36 42.5827961,36 L44.8453659,43.5630253 L43.5883828,44.8235295 L36.0464833,42.5546218 C35.9626843,42.2184874 35.8788855,41.2100841 36.8844722,40.2016807 C37.2196676,39.8655463 37.8900587,39.6134454 38.5604498,39.6134454 C39.147042,39.6134454 39.5660364,39.7815126 39.5660364,39.7815126 C39.6498353,39.8655463 39.8174331,39.8655463 39.8174331,39.7815126 C39.9850307,39.7815126 39.9850307,39.697479 39.9012319,39.6134454 Z', 62242}); 62243/* harmony default export */ const __WEBPACK_DEFAULT_EXPORT__ = (LivejournalIcon); 62244 62245 62246/***/ }), 62247
vendor: 1,889 bytes, lines 62248-62285
62248/***/ "./node_modules/react-share/es/LivejournalShareButton.js": 62249/*!***************************************************************!*\ 62250 !*** ./node_modules/react-share/es/LivejournalShareButton.js ***! 62251 \***************************************************************/ 62252/***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => { 62253 62254"use strict"; 62255__webpack_require__.r(__webpack_exports__); 62256/* harmony export */ __webpack_require__.d(__webpack_exports__, { 62257/* harmony export */ "default": () => (__WEBPACK_DEFAULT_EXPORT__) 62258/* harmony export */ }); 62259/* harmony import */ var _utils_assert__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ./utils/assert */ "./node_modules/react-share/es/utils/assert.js"); 62260/* harmony import */ var _utils_objectToGetParams__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ./utils/objectToGetParams */ "./node_modules/react-share/es/utils/objectToGetParams.js"); 62261/* harmony import */ var _hocs_createShareButton__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! ./hocs/createShareButton */ "./node_modules/react-share/es/hocs/createShareButton.js"); 62262 62263 62264 62265function livejournalLink(url, _a) { 62266 var title = _a.title, description = _a.description; 62267 (0,_utils_assert__WEBPACK_IMPORTED_MODULE_0__["default"])(url, 'livejournal.url'); 62268 return ('https://www.livejournal.com/update.bml' + 62269 (0,_utils_objectToGetParams__WEBPACK_IMPORTED_MODULE_1__["default"])({ 62270 subject: title, 62271 event: description, 62272 })); 62273} 62274var LivejournalShareButton = (0,_hocs_createShareButton__WEBPACK_IMPORTED_MODULE_2__["default"])('livejournal', livejournalLink, function (props) { return ({ 62275 title: props.title, 62276 description: props.description, 62277}); }, { 62278 windowWidth: 660, 62279 windowHeight: 460, 62280}); 62281/* harmony default export */ const __WEBPACK_DEFAULT_EXPORT__ = (LivejournalShareButton); 62282 62283 62284/***/ }), 62285
vendor: 2,856 bytes, lines 62286-62308
62286/***/ "./node_modules/react-share/es/MailruIcon.js": 62287/*!***************************************************!*\ 62288 !*** ./node_modules/react-share/es/MailruIcon.js ***! 62289 \***************************************************/ 62290/***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => { 62291 62292"use strict"; 62293__webpack_require__.r(__webpack_exports__); 62294/* harmony export */ __webpack_require__.d(__webpack_exports__, { 62295/* harmony export */ "default": () => (__WEBPACK_DEFAULT_EXPORT__) 62296/* harmony export */ }); 62297/* harmony import */ var _hocs_createIcon__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ./hocs/createIcon */ "./node_modules/react-share/es/hocs/createIcon.js"); 62298 62299var MailruIcon = (0,_hocs_createIcon__WEBPACK_IMPORTED_MODULE_0__["default"])({ 62300 color: '#168DE2', 62301 networkName: 'mailru', 62302 path: 'M39.7107745,17 C41.6619755,17 43.3204965,18.732852 43.3204965,21.0072202 C43.3204965,23.2815885 41.7595357,25.0144404 39.7107745,25.0144404 C37.7595732,25.0144404 36.1010522,23.2815885 36.1010522,21.0072202 C36.1010522,18.732852 37.7595732,17 39.7107745,17 Z M24.3938451,17 C26.3450463,17 28.0035672,18.732852 28.0035672,21.0072202 C28.0035672,23.2815885 26.4426063,25.0144404 24.3938451,25.0144404 C22.4426439,25.0144404 20.7841229,23.2815885 20.7841229,21.0072202 C20.7841229,18.732852 22.4426439,17 24.3938451,17 Z M51.9057817,43.4259928 C51.7106617,44.0758123 51.4179815,44.6173285 50.9301812,44.9422383 C50.637501,45.1588448 50.2472607,45.267148 49.8570205,45.267148 C49.07654,45.267148 48.3936197,44.833935 48.0033795,44.0758123 L46.2472985,40.7184115 L45.759498,41.2599278 C42.5400162,44.9422383 37.466893,47 32.0035297,47 C26.5401664,47 21.5646034,44.9422383 18.2475614,41.2599278 L17.7597611,40.7184115 L16.00368,44.0758123 C15.6134398,44.833935 14.9305194,45.267148 14.1500389,45.267148 C13.7597986,45.267148 13.3695584,45.1588448 13.0768782,44.9422383 C12.0037176,44.2924187 11.7110374,42.7761733 12.2963978,41.5848375 L16.7841605,33.0288807 C17.1744007,32.270758 17.8573211,31.8375453 18.6378016,31.8375453 C19.0280418,31.8375453 19.4182821,31.9458485 19.7109623,32.1624548 C20.7841229,32.8122743 21.0768031,34.3285197 20.4914427,35.5198555 L20.1012025,36.2779783 L20.2963226,36.602888 C22.4426439,39.9602888 27.0279667,42.234657 31.9059697,42.234657 C36.7839727,42.234657 41.3692955,40.068592 43.5156167,36.602888 L43.7107367,36.2779783 L43.3204965,35.6281587 C43.0278165,35.0866425 42.9302562,34.436823 43.1253765,33.7870035 C43.3204965,33.137184 43.6131767,32.5956678 44.100977,32.270758 C44.3936572,32.0541515 44.7838975,31.9458485 45.1741377,31.9458485 C45.9546182,31.9458485 46.6375385,32.3790613 47.0277787,33.137184 L51.5155415,41.6931408 C52.003342,42.234657 52.100902,42.8844765 51.9057817,43.4259928 Z', 62303}); 62304/* harmony default export */ const __WEBPACK_DEFAULT_EXPORT__ = (MailruIcon); 62305 62306 62307/***/ }), 62308
vendor: 1,943 bytes, lines 62309-62349
62309/***/ "./node_modules/react-share/es/MailruShareButton.js": 62310/*!**********************************************************!*\ 62311 !*** ./node_modules/react-share/es/MailruShareButton.js ***! 62312 \**********************************************************/ 62313/***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => { 62314 62315"use strict"; 62316__webpack_require__.r(__webpack_exports__); 62317/* harmony export */ __webpack_require__.d(__webpack_exports__, { 62318/* harmony export */ "default": () => (__WEBPACK_DEFAULT_EXPORT__) 62319/* harmony export */ }); 62320/* harmony import */ var _utils_assert__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ./utils/assert */ "./node_modules/react-share/es/utils/assert.js"); 62321/* harmony import */ var _utils_objectToGetParams__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ./utils/objectToGetParams */ "./node_modules/react-share/es/utils/objectToGetParams.js"); 62322/* harmony import */ var _hocs_createShareButton__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! ./hocs/createShareButton */ "./node_modules/react-share/es/hocs/createShareButton.js"); 62323 62324 62325 62326function mailruLink(url, _a) { 62327 var title = _a.title, description = _a.description, imageUrl = _a.imageUrl; 62328 (0,_utils_assert__WEBPACK_IMPORTED_MODULE_0__["default"])(url, 'mailru.url'); 62329 return ('https://connect.mail.ru/share' + 62330 (0,_utils_objectToGetParams__WEBPACK_IMPORTED_MODULE_1__["default"])({ 62331 url: url, 62332 title: title, 62333 description: description, 62334 image_url: imageUrl, 62335 })); 62336} 62337var MailruShareButton = (0,_hocs_createShareButton__WEBPACK_IMPORTED_MODULE_2__["default"])('mailru', mailruLink, function (props) { return ({ 62338 title: props.title, 62339 description: props.description, 62340 imageUrl: props.imageUrl, 62341}); }, { 62342 windowWidth: 660, 62343 windowHeight: 460, 62344}); 62345/* harmony default export */ const __WEBPACK_DEFAULT_EXPORT__ = (MailruShareButton); 62346 62347 62348/***/ }), 62349
vendor: 1,381 bytes, lines 62350-62372
62350/***/ "./node_modules/react-share/es/OKIcon.js": 62351/*!***********************************************!*\ 62352 !*** ./node_modules/react-share/es/OKIcon.js ***! 62353 \***********************************************/ 62354/***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => { 62355 62356"use strict"; 62357__webpack_require__.r(__webpack_exports__); 62358/* harmony export */ __webpack_require__.d(__webpack_exports__, { 62359/* harmony export */ "default": () => (__WEBPACK_DEFAULT_EXPORT__) 62360/* harmony export */ }); 62361/* harmony import */ var _hocs_createIcon__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ./hocs/createIcon */ "./node_modules/react-share/es/hocs/createIcon.js"); 62362 62363var OKIcon = (0,_hocs_createIcon__WEBPACK_IMPORTED_MODULE_0__["default"])({ 62364 color: '#f2720c', 62365 networkName: 'ok', 62366 path: 'M39,30c-1,0-3,2-7,2s-6-2-7-2c-1.1,0-2,0.9-2,2c0,1,0.6,1.5,1,1.7c1.2,0.7,5,2.3,5,2.3l-4.3,5.4 c0,0-0.8,0.9-0.8,1.6c0,1.1,0.9,2,2,2c1,0,1.5-0.7,1.5-0.7S32,39,32,39c0,0,4.5,5.3,4.5,5.3S37,45,38,45c1.1,0,2-0.9,2-2 c0-0.6-0.8-1.6-0.8-1.6L35,36c0,0,3.8-1.6,5-2.3c0.4-0.3,1-0.7,1-1.7C41,30.9,40.1,30,39,30z M32,15c-3.9,0-7,3.1-7,7s3.1,7,7,7c3.9,0,7-3.1,7-7S35.9,15,32,15z M32,25.5 c-1.9,0-3.5-1.6-3.5-3.5c0-1.9,1.6-3.5,3.5-3.5c1.9,0,3.5,1.6,3.5,3.5C35.5,23.9,33.9,22.5,35,22.5z ', 62367}); 62368/* harmony default export */ const __WEBPACK_DEFAULT_EXPORT__ = (OKIcon); 62369 62370 62371/***/ }), 62372
vendor: 1,921 bytes, lines 62373-62414
62373/***/ "./node_modules/react-share/es/OKShareButton.js": 62374/*!******************************************************!*\ 62375 !*** ./node_modules/react-share/es/OKShareButton.js ***! 62376 \******************************************************/ 62377/***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => { 62378 62379"use strict"; 62380__webpack_require__.r(__webpack_exports__); 62381/* harmony export */ __webpack_require__.d(__webpack_exports__, { 62382/* harmony export */ "default": () => (__WEBPACK_DEFAULT_EXPORT__) 62383/* harmony export */ }); 62384/* harmony import */ var _utils_assert__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ./utils/assert */ "./node_modules/react-share/es/utils/assert.js"); 62385/* harmony import */ var _utils_objectToGetParams__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ./utils/objectToGetParams */ "./node_modules/react-share/es/utils/objectToGetParams.js"); 62386/* harmony import */ var _hocs_createShareButton__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! ./hocs/createShareButton */ "./node_modules/react-share/es/hocs/createShareButton.js"); 62387 62388 62389 62390function okLink(url, _a) { 62391 var title = _a.title, description = _a.description, image = _a.image; 62392 (0,_utils_assert__WEBPACK_IMPORTED_MODULE_0__["default"])(url, 'ok.url'); 62393 return ('https://connect.ok.ru/offer' + 62394 (0,_utils_objectToGetParams__WEBPACK_IMPORTED_MODULE_1__["default"])({ 62395 url: url, 62396 title: title, 62397 description: description, 62398 imageUrl: image, 62399 })); 62400} 62401var OKShareButton = (0,_hocs_createShareButton__WEBPACK_IMPORTED_MODULE_2__["default"])('ok', okLink, function (props) { return ({ 62402 title: props.title, 62403 description: props.description, 62404 image: props.image, 62405}); }, { 62406 windowWidth: 588, 62407 windowHeight: 480, 62408 windowPosition: 'screenCenter', 62409}); 62410/* harmony default export */ const __WEBPACK_DEFAULT_EXPORT__ = (OKShareButton); 62411 62412 62413/***/ }), 62414
vendor: 2,323 bytes, lines 62415-62464
62415/***/ "./node_modules/react-share/es/OKShareCount.js": 62416/*!*****************************************************!*\ 62417 !*** ./node_modules/react-share/es/OKShareCount.js ***! 62418 \*****************************************************/ 62419/***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => { 62420 62421"use strict"; 62422__webpack_require__.r(__webpack_exports__); 62423/* harmony export */ __webpack_require__.d(__webpack_exports__, { 62424/* harmony export */ "default": () => (__WEBPACK_DEFAULT_EXPORT__) 62425/* harmony export */ }); 62426/* harmony import */ var jsonp__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! jsonp */ "./node_modules/jsonp/index.js"); 62427/* harmony import */ var jsonp__WEBPACK_IMPORTED_MODULE_0___default = /*#__PURE__*/__webpack_require__.n(jsonp__WEBPACK_IMPORTED_MODULE_0__); 62428/* harmony import */ var _utils_objectToGetParams__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ./utils/objectToGetParams */ "./node_modules/react-share/es/utils/objectToGetParams.js"); 62429/* harmony import */ var _hocs_createShareCount__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! ./hocs/createShareCount */ "./node_modules/react-share/es/hocs/createShareCount.js"); 62430 62431 62432 62433function getOKShareCount(shareUrl, callback) { 62434 if (!window.OK) { 62435 window.OK = { 62436 Share: { 62437 count: function count(index, _count) { 62438 window.OK.callbacks[index](_count); 62439 }, 62440 }, 62441 callbacks: [], 62442 }; 62443 } 62444 var url = 'https://connect.ok.ru/dk'; 62445 var index = window.OK.callbacks.length; 62446 window.ODKL = { 62447 updateCount: function (index, count) { 62448 var callbackIndex = index === '' ? 0 : parseInt(index.replace('react-share-', ''), 10); 62449 window.OK.callbacks[callbackIndex](count === '' ? undefined : parseInt(count, 10)); 62450 }, 62451 }; 62452 window.OK.callbacks.push(callback); 62453 return jsonp__WEBPACK_IMPORTED_MODULE_0___default()(url + 62454 (0,_utils_objectToGetParams__WEBPACK_IMPORTED_MODULE_1__["default"])({ 62455 'st.cmd': 'extLike', 62456 uid: "react-share-".concat(index), 62457 ref: shareUrl, 62458 })); 62459} 62460/* harmony default export */ const __WEBPACK_DEFAULT_EXPORT__ = ((0,_hocs_createShareCount__WEBPACK_IMPORTED_MODULE_2__["default"])(getOKShareCount)); 62461 62462 62463/***/ }), 62464
vendor: 1,535 bytes, lines 62465-62487
62465/***/ "./node_modules/react-share/es/PinterestIcon.js": 62466/*!******************************************************!*\ 62467 !*** ./node_modules/react-share/es/PinterestIcon.js ***! 62468 \******************************************************/ 62469/***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => { 62470 62471"use strict"; 62472__webpack_require__.r(__webpack_exports__); 62473/* harmony export */ __webpack_require__.d(__webpack_exports__, { 62474/* harmony export */ "default": () => (__WEBPACK_DEFAULT_EXPORT__) 62475/* harmony export */ }); 62476/* harmony import */ var _hocs_createIcon__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ./hocs/createIcon */ "./node_modules/react-share/es/hocs/createIcon.js"); 62477 62478var PinterestIcon = (0,_hocs_createIcon__WEBPACK_IMPORTED_MODULE_0__["default"])({ 62479 color: '#cb2128', 62480 networkName: 'pinterest', 62481 path: 'M32,16c-8.8,0-16,7.2-16,16c0,6.6,3.9,12.2,9.6,14.7c0-1.1,0-2.5,0.3-3.7 c0.3-1.3,2.1-8.7,2.1-8.7s-0.5-1-0.5-2.5c0-2.4,1.4-4.1,3.1-4.1c1.5,0,2.2,1.1,2.2,2.4c0,1.5-0.9,3.7-1.4,5.7 c-0.4,1.7,0.9,3.1,2.5,3.1c3,0,5.1-3.9,5.1-8.5c0-3.5-2.4-6.1-6.7-6.1c-4.9,0-7.9,3.6-7.9,7.7c0,1.4,0.4,2.4,1.1,3.1 c0.3,0.3,0.3,0.5,0.2,0.9c-0.1,0.3-0.3,1-0.3,1.3c-0.1,0.4-0.4,0.6-0.8,0.4c-2.2-0.9-3.3-3.4-3.3-6.1c0-4.5,3.8-10,11.4-10 c6.1,0,10.1,4.4,10.1,9.2c0,6.3-3.5,11-8.6,11c-1.7,0-3.4-0.9-3.9-2c0,0-0.9,3.7-1.1,4.4c-0.3,1.2-1,2.5-1.6,3.4 c1.4,0.4,3,0.7,4.5,0.7c8.8,0,16-7.2,16-16C48,23.2,40.8,16,32,16z', 62482}); 62483/* harmony default export */ const __WEBPACK_DEFAULT_EXPORT__ = (PinterestIcon); 62484 62485 62486/***/ }), 62487
vendor: 1,987 bytes, lines 62488-62527
62488/***/ "./node_modules/react-share/es/PinterestShareButton.js": 62489/*!*************************************************************!*\ 62490 !*** ./node_modules/react-share/es/PinterestShareButton.js ***! 62491 \*************************************************************/ 62492/***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => { 62493 62494"use strict"; 62495__webpack_require__.r(__webpack_exports__); 62496/* harmony export */ __webpack_require__.d(__webpack_exports__, { 62497/* harmony export */ "default": () => (__WEBPACK_DEFAULT_EXPORT__) 62498/* harmony export */ }); 62499/* harmony import */ var _utils_assert__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ./utils/assert */ "./node_modules/react-share/es/utils/assert.js"); 62500/* harmony import */ var _utils_objectToGetParams__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ./utils/objectToGetParams */ "./node_modules/react-share/es/utils/objectToGetParams.js"); 62501/* harmony import */ var _hocs_createShareButton__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! ./hocs/createShareButton */ "./node_modules/react-share/es/hocs/createShareButton.js"); 62502 62503 62504 62505function pinterestLink(url, _a) { 62506 var media = _a.media, description = _a.description; 62507 (0,_utils_assert__WEBPACK_IMPORTED_MODULE_0__["default"])(url, 'pinterest.url'); 62508 (0,_utils_assert__WEBPACK_IMPORTED_MODULE_0__["default"])(media, 'pinterest.media'); 62509 return ('https://pinterest.com/pin/create/button/' + 62510 (0,_utils_objectToGetParams__WEBPACK_IMPORTED_MODULE_1__["default"])({ 62511 url: url, 62512 media: media, 62513 description: description, 62514 })); 62515} 62516var PinterestShareButton = (0,_hocs_createShareButton__WEBPACK_IMPORTED_MODULE_2__["default"])('pinterest', pinterestLink, function (props) { return ({ 62517 media: props.media, 62518 description: props.description, 62519}); }, { 62520 windowWidth: 1000, 62521 windowHeight: 730, 62522}); 62523/* harmony default export */ const __WEBPACK_DEFAULT_EXPORT__ = (PinterestShareButton); 62524 62525 62526/***/ }), 62527
vendor: 1,758 bytes, lines 62528-62559
62528/***/ "./node_modules/react-share/es/PinterestShareCount.js": 62529/*!************************************************************!*\ 62530 !*** ./node_modules/react-share/es/PinterestShareCount.js ***! 62531 \************************************************************/ 62532/***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => { 62533 62534"use strict"; 62535__webpack_require__.r(__webpack_exports__); 62536/* harmony export */ __webpack_require__.d(__webpack_exports__, { 62537/* harmony export */ "default": () => (__WEBPACK_DEFAULT_EXPORT__) 62538/* harmony export */ }); 62539/* harmony import */ var jsonp__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! jsonp */ "./node_modules/jsonp/index.js"); 62540/* harmony import */ var jsonp__WEBPACK_IMPORTED_MODULE_0___default = /*#__PURE__*/__webpack_require__.n(jsonp__WEBPACK_IMPORTED_MODULE_0__); 62541/* harmony import */ var _utils_objectToGetParams__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ./utils/objectToGetParams */ "./node_modules/react-share/es/utils/objectToGetParams.js"); 62542/* harmony import */ var _hocs_createShareCount__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! ./hocs/createShareCount */ "./node_modules/react-share/es/hocs/createShareCount.js"); 62543 62544 62545 62546function getPinterestShareCount(shareUrl, callback) { 62547 var url = 'https://api.pinterest.com/v1/urls/count.json'; 62548 jsonp__WEBPACK_IMPORTED_MODULE_0___default()(url + 62549 (0,_utils_objectToGetParams__WEBPACK_IMPORTED_MODULE_1__["default"])({ 62550 url: shareUrl, 62551 }), function (err, data) { 62552 callback(data ? data.count : undefined); 62553 }); 62554} 62555/* harmony default export */ const __WEBPACK_DEFAULT_EXPORT__ = ((0,_hocs_createShareCount__WEBPACK_IMPORTED_MODULE_2__["default"])(getPinterestShareCount)); 62556 62557 62558/***/ }), 62559
vendor: 1,631 bytes, lines 62560-62582
62560/***/ "./node_modules/react-share/es/PocketIcon.js": 62561/*!***************************************************!*\ 62562 !*** ./node_modules/react-share/es/PocketIcon.js ***! 62563 \***************************************************/ 62564/***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => { 62565 62566"use strict"; 62567__webpack_require__.r(__webpack_exports__); 62568/* harmony export */ __webpack_require__.d(__webpack_exports__, { 62569/* harmony export */ "default": () => (__WEBPACK_DEFAULT_EXPORT__) 62570/* harmony export */ }); 62571/* harmony import */ var _hocs_createIcon__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ./hocs/createIcon */ "./node_modules/react-share/es/hocs/createIcon.js"); 62572 62573var PocketIcon = (0,_hocs_createIcon__WEBPACK_IMPORTED_MODULE_0__["default"])({ 62574 color: '#EF3F56', 62575 networkName: 'pocket', 62576 path: 'M41.084 29.065l-7.528 7.882a2.104 2.104 0 0 1-1.521.666 2.106 2.106 0 0 1-1.522-.666l-7.528-7.882c-.876-.914-.902-2.43-.065-3.384.84-.955 2.228-.987 3.1-.072l6.015 6.286 6.022-6.286c.88-.918 2.263-.883 3.102.071.841.938.82 2.465-.06 3.383l-.015.002zm6.777-10.976C47.463 16.84 46.361 16 45.14 16H18.905c-1.2 0-2.289.82-2.716 2.044-.125.363-.189.743-.189 1.125v10.539l.112 2.096c.464 4.766 2.73 8.933 6.243 11.838.06.053.125.102.19.153l.04.033c1.882 1.499 3.986 2.514 6.259 3.014a14.662 14.662 0 0 0 6.13.052c.118-.042.235-.065.353-.087.03 0 .065-.022.098-.042a15.395 15.395 0 0 0 6.011-2.945l.039-.045.18-.153c3.502-2.902 5.765-7.072 6.248-11.852L48 29.674v-10.52c0-.366-.041-.728-.161-1.08l.022.015z', 62577}); 62578/* harmony default export */ const __WEBPACK_DEFAULT_EXPORT__ = (PocketIcon); 62579 62580 62581/***/ }), 62582
vendor: 1,749 bytes, lines 62583-62619
62583/***/ "./node_modules/react-share/es/PocketShareButton.js": 62584/*!**********************************************************!*\ 62585 !*** ./node_modules/react-share/es/PocketShareButton.js ***! 62586 \**********************************************************/ 62587/***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => { 62588 62589"use strict"; 62590__webpack_require__.r(__webpack_exports__); 62591/* harmony export */ __webpack_require__.d(__webpack_exports__, { 62592/* harmony export */ "default": () => (__WEBPACK_DEFAULT_EXPORT__) 62593/* harmony export */ }); 62594/* harmony import */ var _utils_assert__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ./utils/assert */ "./node_modules/react-share/es/utils/assert.js"); 62595/* harmony import */ var _hocs_createShareButton__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! ./hocs/createShareButton */ "./node_modules/react-share/es/hocs/createShareButton.js"); 62596/* harmony import */ var _utils_objectToGetParams__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ./utils/objectToGetParams */ "./node_modules/react-share/es/utils/objectToGetParams.js"); 62597 62598 62599 62600function pocketLink(url, _a) { 62601 var title = _a.title; 62602 (0,_utils_assert__WEBPACK_IMPORTED_MODULE_0__["default"])(url, 'pocket.url'); 62603 return ('https://getpocket.com/save' + 62604 (0,_utils_objectToGetParams__WEBPACK_IMPORTED_MODULE_1__["default"])({ 62605 url: url, 62606 title: title, 62607 })); 62608} 62609var PocketShareButton = (0,_hocs_createShareButton__WEBPACK_IMPORTED_MODULE_2__["default"])('pocket', pocketLink, function (props) { return ({ 62610 title: props.title, 62611}); }, { 62612 windowWidth: 500, 62613 windowHeight: 500, 62614}); 62615/* harmony default export */ const __WEBPACK_DEFAULT_EXPORT__ = (PocketShareButton); 62616 62617 62618/***/ }), 62619
vendor: 2,522 bytes, lines 62620-62642
62620/***/ "./node_modules/react-share/es/RedditIcon.js": 62621/*!***************************************************!*\ 62622 !*** ./node_modules/react-share/es/RedditIcon.js ***! 62623 \***************************************************/ 62624/***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => { 62625 62626"use strict"; 62627__webpack_require__.r(__webpack_exports__); 62628/* harmony export */ __webpack_require__.d(__webpack_exports__, { 62629/* harmony export */ "default": () => (__WEBPACK_DEFAULT_EXPORT__) 62630/* harmony export */ }); 62631/* harmony import */ var _hocs_createIcon__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ./hocs/createIcon */ "./node_modules/react-share/es/hocs/createIcon.js"); 62632 62633var RedditIcon = (0,_hocs_createIcon__WEBPACK_IMPORTED_MODULE_0__["default"])({ 62634 color: '#ff4500', 62635 networkName: 'reddit', 62636 path: 'm 52.8165,31.942362 c 0,-2.4803 -2.0264,-4.4965 -4.5169,-4.4965 -1.2155,0 -2.3171,0.4862 -3.128,1.2682 -3.077,-2.0247 -7.2403,-3.3133 -11.8507,-3.4782 l 2.5211,-7.9373 6.8272,1.5997 -0.0102,0.0986 c 0,2.0281 1.6575,3.6771 3.6958,3.6771 2.0366,0 3.6924,-1.649 3.6924,-3.6771 0,-2.0281 -1.6575,-3.6788 -3.6924,-3.6788 -1.564,0 -2.8968,0.9758 -3.4357,2.3443 l -7.3593,-1.7255 c -0.3213,-0.0782 -0.6477,0.1071 -0.748,0.4233 L 32,25.212062 c -4.8246,0.0578 -9.1953,1.3566 -12.41,3.4425 -0.8058,-0.7446 -1.8751,-1.2104 -3.0583,-1.2104 -2.4905,0 -4.5152,2.0179 -4.5152,4.4982 0,1.649 0.9061,3.0787 2.2389,3.8607 -0.0884,0.4794 -0.1462,0.9639 -0.1462,1.4569 0,6.6487 8.1736,12.0581 18.2223,12.0581 10.0487,0 18.224,-5.4094 18.224,-12.0581 0,-0.4658 -0.0493,-0.9248 -0.1275,-1.377 1.4144,-0.7599 2.3885,-2.2304 2.3885,-3.9406 z m -29.2808,3.0872 c 0,-1.4756 1.207,-2.6775 2.6894,-2.6775 1.4824,0 2.6877,1.2019 2.6877,2.6775 0,1.4756 -1.2053,2.6758 -2.6877,2.6758 -1.4824,0 -2.6894,-1.2002 -2.6894,-2.6758 z m 15.4037,7.9373 c -1.3549,1.3481 -3.4816,2.0043 -6.5008,2.0043 l -0.0221,-0.0051 -0.0221,0.0051 c -3.0209,0 -5.1476,-0.6562 -6.5008,-2.0043 -0.2465,-0.2448 -0.2465,-0.6443 0,-0.8891 0.2465,-0.2465 0.6477,-0.2465 0.8942,0 1.105,1.0999 2.9393,1.6337 5.6066,1.6337 l 0.0221,0.0051 0.0221,-0.0051 c 2.6673,0 4.5016,-0.5355 5.6066,-1.6354 0.2465,-0.2465 0.6477,-0.2448 0.8942,0 0.2465,0.2465 0.2465,0.6443 0,0.8908 z m -0.3213,-5.2615 c -1.4824,0 -2.6877,-1.2002 -2.6877,-2.6758 0,-1.4756 1.2053,-2.6775 2.6877,-2.6775 1.4824,0 2.6877,1.2019 2.6877,2.6775 0,1.4756 -1.2053,2.6758 -2.6877,2.6758 z', 62637}); 62638/* harmony default export */ const __WEBPACK_DEFAULT_EXPORT__ = (RedditIcon); 62639 62640 62641/***/ }), 62642
vendor: 1,788 bytes, lines 62643-62680
62643/***/ "./node_modules/react-share/es/RedditShareButton.js": 62644/*!**********************************************************!*\ 62645 !*** ./node_modules/react-share/es/RedditShareButton.js ***! 62646 \**********************************************************/ 62647/***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => { 62648 62649"use strict"; 62650__webpack_require__.r(__webpack_exports__); 62651/* harmony export */ __webpack_require__.d(__webpack_exports__, { 62652/* harmony export */ "default": () => (__WEBPACK_DEFAULT_EXPORT__) 62653/* harmony export */ }); 62654/* harmony import */ var _utils_assert__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ./utils/assert */ "./node_modules/react-share/es/utils/assert.js"); 62655/* harmony import */ var _utils_objectToGetParams__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ./utils/objectToGetParams */ "./node_modules/react-share/es/utils/objectToGetParams.js"); 62656/* harmony import */ var _hocs_createShareButton__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! ./hocs/createShareButton */ "./node_modules/react-share/es/hocs/createShareButton.js"); 62657 62658 62659 62660function redditLink(url, _a) { 62661 var title = _a.title; 62662 (0,_utils_assert__WEBPACK_IMPORTED_MODULE_0__["default"])(url, 'reddit.url'); 62663 return ('https://www.reddit.com/submit' + 62664 (0,_utils_objectToGetParams__WEBPACK_IMPORTED_MODULE_1__["default"])({ 62665 url: url, 62666 title: title, 62667 })); 62668} 62669var RedditShareButton = (0,_hocs_createShareButton__WEBPACK_IMPORTED_MODULE_2__["default"])('reddit', redditLink, function (props) { return ({ 62670 title: props.title, 62671}); }, { 62672 windowWidth: 660, 62673 windowHeight: 460, 62674 windowPosition: 'windowCenter', 62675}); 62676/* harmony default export */ const __WEBPACK_DEFAULT_EXPORT__ = (RedditShareButton); 62677 62678 62679/***/ }), 62680
vendor: 1,685 bytes, lines 62681-62713
62681/***/ "./node_modules/react-share/es/RedditShareCount.js": 62682/*!*********************************************************!*\ 62683 !*** ./node_modules/react-share/es/RedditShareCount.js ***! 62684 \*********************************************************/ 62685/***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => { 62686 62687"use strict"; 62688__webpack_require__.r(__webpack_exports__); 62689/* harmony export */ __webpack_require__.d(__webpack_exports__, { 62690/* harmony export */ "default": () => (__WEBPACK_DEFAULT_EXPORT__) 62691/* harmony export */ }); 62692/* harmony import */ var jsonp__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! jsonp */ "./node_modules/jsonp/index.js"); 62693/* harmony import */ var jsonp__WEBPACK_IMPORTED_MODULE_0___default = /*#__PURE__*/__webpack_require__.n(jsonp__WEBPACK_IMPORTED_MODULE_0__); 62694/* harmony import */ var _hocs_createShareCount__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ./hocs/createShareCount */ "./node_modules/react-share/es/hocs/createShareCount.js"); 62695 62696 62697function getRedditShareCount(shareUrl, callback) { 62698 var endpoint = "https://www.reddit.com/api/info.json?limit=1&url=".concat(shareUrl); 62699 jsonp__WEBPACK_IMPORTED_MODULE_0___default()(endpoint, { param: 'jsonp' }, function (err, response) { 62700 callback(!err && 62701 response && 62702 response.data && 62703 response.data.children.length > 0 && 62704 response.data.children[0].data.score 62705 ? response.data.children[0].data.score 62706 : undefined); 62707 }); 62708} 62709/* harmony default export */ const __WEBPACK_DEFAULT_EXPORT__ = ((0,_hocs_createShareCount__WEBPACK_IMPORTED_MODULE_1__["default"])(getRedditShareCount)); 62710 62711 62712/***/ }), 62713
vendor: 11,097 bytes, lines 62714-62900
62714/***/ "./node_modules/react-share/es/ShareButton.js": 62715/*!****************************************************!*\ 62716 !*** ./node_modules/react-share/es/ShareButton.js ***! 62717 \****************************************************/ 62718/***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => { 62719 62720"use strict"; 62721__webpack_require__.r(__webpack_exports__); 62722/* harmony export */ __webpack_require__.d(__webpack_exports__, { 62723/* harmony export */ "default": () => (__WEBPACK_DEFAULT_EXPORT__) 62724/* harmony export */ }); 62725/* harmony import */ var react__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! react */ "./node_modules/react/index.js"); 62726/* harmony import */ var classnames__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! classnames */ "./node_modules/classnames/index.js"); 62727/* harmony import */ var classnames__WEBPACK_IMPORTED_MODULE_1___default = /*#__PURE__*/__webpack_require__.n(classnames__WEBPACK_IMPORTED_MODULE_1__); 62728var __extends = (undefined && undefined.__extends) || (function () { 62729 var extendStatics = function (d, b) { 62730 extendStatics = Object.setPrototypeOf || 62731 ({ __proto__: [] } instanceof Array && function (d, b) { d.__proto__ = b; }) || 62732 function (d, b) { for (var p in b) if (Object.prototype.hasOwnProperty.call(b, p)) d[p] = b[p]; }; 62733 return extendStatics(d, b); 62734 }; 62735 return function (d, b) { 62736 if (typeof b !== "function" && b !== null) 62737 throw new TypeError("Class extends value " + String(b) + " is not a constructor or null"); 62738 extendStatics(d, b); 62739 function __() { this.constructor = d; } 62740 d.prototype = b === null ? Object.create(b) : (__.prototype = b.prototype, new __()); 62741 }; 62742})(); 62743var __assign = (undefined && undefined.__assign) || function () { 62744 __assign = Object.assign || function(t) { 62745 for (var s, i = 1, n = arguments.length; i < n; i++) { 62746 s = arguments[i]; 62747 for (var p in s) if (Object.prototype.hasOwnProperty.call(s, p)) 62748 t[p] = s[p]; 62749 } 62750 return t; 62751 }; 62752 return __assign.apply(this, arguments); 62753}; 62754var __awaiter = (undefined && undefined.__awaiter) || function (thisArg, _arguments, P, generator) { 62755 function adopt(value) { return value instanceof P ? value : new P(function (resolve) { resolve(value); }); } 62756 return new (P || (P = Promise))(function (resolve, reject) { 62757 function fulfilled(value) { try { step(generator.next(value)); } catch (e) { reject(e); } } 62758 function rejected(value) { try { step(generator["throw"](value)); } catch (e) { reject(e); } } 62759 function step(result) { result.done ? resolve(result.value) : adopt(result.value).then(fulfilled, rejected); } 62760 step((generator = generator.apply(thisArg, _arguments || [])).next()); 62761 }); 62762}; 62763var __generator = (undefined && undefined.__generator) || function (thisArg, body) { 62764 var _ = { label: 0, sent: function() { if (t[0] & 1) throw t[1]; return t[1]; }, trys: [], ops: [] }, f, y, t, g; 62765 return g = { next: verb(0), "throw": verb(1), "return": verb(2) }, typeof Symbol === "function" && (g[Symbol.iterator] = function() { return this; }), g; 62766 function verb(n) { return function (v) { return step([n, v]); }; } 62767 function step(op) { 62768 if (f) throw new TypeError("Generator is already executing."); 62769 while (_) try { 62770 if (f = 1, y && (t = op[0] & 2 ? y["return"] : op[0] ? y["throw"] || ((t = y["return"]) && t.call(y), 0) : y.next) && !(t = t.call(y, op[1])).done) return t; 62771 if (y = 0, t) op = [op[0] & 2, t.value]; 62772 switch (op[0]) { 62773 case 0: case 1: t = op; break; 62774 case 4: _.label++; return { value: op[1], done: false }; 62775 case 5: _.label++; y = op[1]; op = [0]; continue; 62776 case 7: op = _.ops.pop(); _.trys.pop(); continue; 62777 default: 62778 if (!(t = _.trys, t = t.length > 0 && t[t.length - 1]) && (op[0] === 6 || op[0] === 2)) { _ = 0; continue; } 62779 if (op[0] === 3 && (!t || (op[1] > t[0] && op[1] < t[3]))) { _.label = op[1]; break; } 62780 if (op[0] === 6 && _.label < t[1]) { _.label = t[1]; t = op; break; } 62781 if (t && _.label < t[2]) { _.label = t[2]; _.ops.push(op); break; } 62782 if (t[2]) _.ops.pop(); 62783 _.trys.pop(); continue; 62784 } 62785 op = body.call(thisArg, _); 62786 } catch (e) { op = [6, e]; y = 0; } finally { f = t = 0; } 62787 if (op[0] & 5) throw op[1]; return { value: op[0] ? op[1] : void 0, done: true }; 62788 } 62789}; 62790var __rest = (undefined && undefined.__rest) || function (s, e) { 62791 var t = {}; 62792 for (var p in s) if (Object.prototype.hasOwnProperty.call(s, p) && e.indexOf(p) < 0) 62793 t[p] = s[p]; 62794 if (s != null && typeof Object.getOwnPropertySymbols === "function") 62795 for (var i = 0, p = Object.getOwnPropertySymbols(s); i < p.length; i++) { 62796 if (e.indexOf(p[i]) < 0 && Object.prototype.propertyIsEnumerable.call(s, p[i])) 62797 t[p[i]] = s[p[i]]; 62798 } 62799 return t; 62800}; 62801 62802 62803var isPromise = function (obj) { 62804 return !!obj && (typeof obj === 'object' || typeof obj === 'function') && typeof obj.then === 'function'; 62805}; 62806var getBoxPositionOnWindowCenter = function (width, height) { return ({ 62807 left: window.outerWidth / 2 + (window.screenX || window.screenLeft || 0) - width / 2, 62808 top: window.outerHeight / 2 + (window.screenY || window.screenTop || 0) - height / 2, 62809}); }; 62810var getBoxPositionOnScreenCenter = function (width, height) { return ({ 62811 top: (window.screen.height - height) / 2, 62812 left: (window.screen.width - width) / 2, 62813}); }; 62814function windowOpen(url, _a, onClose) { 62815 var height = _a.height, width = _a.width, configRest = __rest(_a, ["height", "width"]); 62816 var config = __assign({ height: height, width: width, location: 'no', toolbar: 'no', status: 'no', directories: 'no', menubar: 'no', scrollbars: 'yes', resizable: 'no', centerscreen: 'yes', chrome: 'yes' }, configRest); 62817 var shareDialog = window.open(url, '', Object.keys(config) 62818 .map(function (key) { return "".concat(key, "=").concat(config[key]); }) 62819 .join(', ')); 62820 if (onClose) { 62821 var interval_1 = window.setInterval(function () { 62822 try { 62823 if (shareDialog === null || shareDialog.closed) { 62824 window.clearInterval(interval_1); 62825 onClose(shareDialog); 62826 } 62827 } 62828 catch (e) { 62829 /* eslint-disable no-console */ 62830 console.error(e); 62831 /* eslint-enable no-console */ 62832 } 62833 }, 1000); 62834 } 62835 return shareDialog; 62836} 62837var ShareButton = /** @class */ (function (_super) { 62838 __extends(ShareButton, _super); 62839 function ShareButton() { 62840 var _this = _super !== null && _super.apply(this, arguments) || this; 62841 _this.openShareDialog = function (link) { 62842 var _a = _this.props, onShareWindowClose = _a.onShareWindowClose, _b = _a.windowHeight, windowHeight = _b === void 0 ? 400 : _b, _c = _a.windowPosition, windowPosition = _c === void 0 ? 'windowCenter' : _c, _d = _a.windowWidth, windowWidth = _d === void 0 ? 550 : _d; 62843 var windowConfig = __assign({ height: windowHeight, width: windowWidth }, (windowPosition === 'windowCenter' 62844 ? getBoxPositionOnWindowCenter(windowWidth, windowHeight) 62845 : getBoxPositionOnScreenCenter(windowWidth, windowHeight))); 62846 windowOpen(link, windowConfig, onShareWindowClose); 62847 }; 62848 _this.handleClick = function (event) { return __awaiter(_this, void 0, void 0, function () { 62849 var _a, beforeOnClick, disabled, networkLink, onClick, url, openShareDialogOnClick, opts, link, returnVal; 62850 return __generator(this, function (_b) { 62851 switch (_b.label) { 62852 case 0: 62853 _a = this.props, beforeOnClick = _a.beforeOnClick, disabled = _a.disabled, networkLink = _a.networkLink, onClick = _a.onClick, url = _a.url, openShareDialogOnClick = _a.openShareDialogOnClick, opts = _a.opts; 62854 link = networkLink(url, opts); 62855 if (disabled) { 62856 return [2 /*return*/]; 62857 } 62858 event.preventDefault(); 62859 if (!beforeOnClick) return [3 /*break*/, 2]; 62860 returnVal = beforeOnClick(); 62861 if (!isPromise(returnVal)) return [3 /*break*/, 2]; 62862 return [4 /*yield*/, returnVal]; 62863 case 1: 62864 _b.sent(); 62865 _b.label = 2; 62866 case 2: 62867 if (openShareDialogOnClick) { 62868 this.openShareDialog(link); 62869 } 62870 if (onClick) { 62871 onClick(event, link); 62872 } 62873 return [2 /*return*/]; 62874 } 62875 }); 62876 }); }; 62877 return _this; 62878 } 62879 ShareButton.prototype.render = function () { 62880 var _a = this.props, beforeOnClick = _a.beforeOnClick, children = _a.children, className = _a.className, disabled = _a.disabled, disabledStyle = _a.disabledStyle, forwardedRef = _a.forwardedRef, networkLink = _a.networkLink, networkName = _a.networkName, onShareWindowClose = _a.onShareWindowClose, openShareDialogOnClick = _a.openShareDialogOnClick, opts = _a.opts, resetButtonStyle = _a.resetButtonStyle, style = _a.style, url = _a.url, windowHeight = _a.windowHeight, windowPosition = _a.windowPosition, windowWidth = _a.windowWidth, rest = __rest(_a, ["beforeOnClick", "children", "className", "disabled", "disabledStyle", "forwardedRef", "networkLink", "networkName", "onShareWindowClose", "openShareDialogOnClick", "opts", "resetButtonStyle", "style", "url", "windowHeight", "windowPosition", "windowWidth"]); 62881 var newClassName = classnames__WEBPACK_IMPORTED_MODULE_1___default()('react-share__ShareButton', { 62882 'react-share__ShareButton--disabled': !!disabled, 62883 disabled: !!disabled, 62884 }, className); 62885 var newStyle = resetButtonStyle 62886 ? __assign(__assign({ backgroundColor: 'transparent', border: 'none', padding: 0, font: 'inherit', color: 'inherit', cursor: 'pointer' }, style), (disabled && disabledStyle)) : __assign(__assign({}, style), (disabled && disabledStyle)); 62887 return (react__WEBPACK_IMPORTED_MODULE_0__.createElement("button", __assign({}, rest, { "aria-label": rest['aria-label'] || networkName, className: newClassName, onClick: this.handleClick, ref: forwardedRef, style: newStyle }), children)); 62888 }; 62889 ShareButton.defaultProps = { 62890 disabledStyle: { opacity: 0.6 }, 62891 openShareDialogOnClick: true, 62892 resetButtonStyle: true, 62893 }; 62894 return ShareButton; 62895}(react__WEBPACK_IMPORTED_MODULE_0__.Component)); 62896/* harmony default export */ const __WEBPACK_DEFAULT_EXPORT__ = (ShareButton); 62897 62898 62899/***/ }), 62900
vendor: 2,977 bytes, lines 62901-62923
62901/***/ "./node_modules/react-share/es/TelegramIcon.js": 62902/*!*****************************************************!*\ 62903 !*** ./node_modules/react-share/es/TelegramIcon.js ***! 62904 \*****************************************************/ 62905/***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => { 62906 62907"use strict"; 62908__webpack_require__.r(__webpack_exports__); 62909/* harmony export */ __webpack_require__.d(__webpack_exports__, { 62910/* harmony export */ "default": () => (__WEBPACK_DEFAULT_EXPORT__) 62911/* harmony export */ }); 62912/* harmony import */ var _hocs_createIcon__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ./hocs/createIcon */ "./node_modules/react-share/es/hocs/createIcon.js"); 62913 62914var TelegramIcon = (0,_hocs_createIcon__WEBPACK_IMPORTED_MODULE_0__["default"])({ 62915 color: '#37aee2', 62916 networkName: 'telegram', 62917 path: 'm45.90873,15.44335c-0.6901,-0.0281 -1.37668,0.14048 -1.96142,0.41265c-0.84989,0.32661 -8.63939,3.33986 -16.5237,6.39174c-3.9685,1.53296 -7.93349,3.06593 -10.98537,4.24067c-3.05012,1.1765 -5.34694,2.05098 -5.4681,2.09312c-0.80775,0.28096 -1.89996,0.63566 -2.82712,1.72788c-0.23354,0.27218 -0.46884,0.62161 -0.58825,1.10275c-0.11941,0.48114 -0.06673,1.09222 0.16682,1.5716c0.46533,0.96052 1.25376,1.35737 2.18443,1.71383c3.09051,0.99037 6.28638,1.93508 8.93263,2.8236c0.97632,3.44171 1.91401,6.89571 2.84116,10.34268c0.30554,0.69185 0.97105,0.94823 1.65764,0.95525l-0.00351,0.03512c0,0 0.53908,0.05268 1.06412,-0.07375c0.52679,-0.12292 1.18879,-0.42846 1.79109,-0.99212c0.662,-0.62161 2.45836,-2.38812 3.47683,-3.38552l7.6736,5.66477l0.06146,0.03512c0,0 0.84989,0.59703 2.09312,0.68132c0.62161,0.04214 1.4399,-0.07726 2.14229,-0.59176c0.70766,-0.51626 1.1765,-1.34683 1.396,-2.29506c0.65673,-2.86224 5.00979,-23.57745 5.75257,-27.00686l-0.02107,0.08077c0.51977,-1.93157 0.32837,-3.70159 -0.87096,-4.74991c-0.60054,-0.52152 -1.2924,-0.7498 -1.98425,-0.77965l0,0.00176zm-0.2072,3.29069c0.04741,0.0439 0.0439,0.0439 0.00351,0.04741c-0.01229,-0.00351 0.14048,0.2072 -0.15804,1.32576l-0.01229,0.04214l-0.00878,0.03863c-0.75858,3.50668 -5.15554,24.40802 -5.74203,26.96472c-0.08077,0.34417 -0.11414,0.31959 -0.09482,0.29852c-0.1756,-0.02634 -0.50045,-0.16506 -0.52679,-0.1756l-13.13468,-9.70175c4.4988,-4.33199 9.09945,-8.25307 13.744,-12.43229c0.8218,-0.41265 0.68483,-1.68573 -0.29852,-1.70681c-1.04305,0.24584 -1.92279,0.99564 -2.8798,1.47502c-5.49971,3.2626 -11.11882,6.13186 -16.55882,9.49279c-2.792,-0.97105 -5.57873,-1.77704 -8.15298,-2.57601c2.2336,-0.89555 4.00889,-1.55579 5.75608,-2.23009c3.05188,-1.1765 7.01687,-2.7042 10.98537,-4.24067c7.94051,-3.06944 15.92667,-6.16346 16.62028,-6.43037l0.05619,-0.02283l0.05268,-0.02283c0.19316,-0.0878 0.30378,-0.09658 0.35471,-0.10009c0,0 -0.01756,-0.05795 -0.00351,-0.04566l-0.00176,0zm-20.91715,22.0638l2.16687,1.60145c-0.93418,0.91311 -1.81743,1.77353 -2.45485,2.38812l0.28798,-3.98957', 62918}); 62919/* harmony default export */ const __WEBPACK_DEFAULT_EXPORT__ = (TelegramIcon); 62920 62921 62922/***/ }), 62923
vendor: 1,771 bytes, lines 62924-62960
62924/***/ "./node_modules/react-share/es/TelegramShareButton.js": 62925/*!************************************************************!*\ 62926 !*** ./node_modules/react-share/es/TelegramShareButton.js ***! 62927 \************************************************************/ 62928/***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => { 62929 62930"use strict"; 62931__webpack_require__.r(__webpack_exports__); 62932/* harmony export */ __webpack_require__.d(__webpack_exports__, { 62933/* harmony export */ "default": () => (__WEBPACK_DEFAULT_EXPORT__) 62934/* harmony export */ }); 62935/* harmony import */ var _utils_assert__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ./utils/assert */ "./node_modules/react-share/es/utils/assert.js"); 62936/* harmony import */ var _utils_objectToGetParams__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ./utils/objectToGetParams */ "./node_modules/react-share/es/utils/objectToGetParams.js"); 62937/* harmony import */ var _hocs_createShareButton__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! ./hocs/createShareButton */ "./node_modules/react-share/es/hocs/createShareButton.js"); 62938 62939 62940 62941function telegramLink(url, _a) { 62942 var title = _a.title; 62943 (0,_utils_assert__WEBPACK_IMPORTED_MODULE_0__["default"])(url, 'telegram.url'); 62944 return ('https://telegram.me/share/url' + 62945 (0,_utils_objectToGetParams__WEBPACK_IMPORTED_MODULE_1__["default"])({ 62946 url: url, 62947 text: title, 62948 })); 62949} 62950var TelegramShareButton = (0,_hocs_createShareButton__WEBPACK_IMPORTED_MODULE_2__["default"])('telegram', telegramLink, function (props) { return ({ 62951 title: props.title, 62952}); }, { 62953 windowWidth: 550, 62954 windowHeight: 400, 62955}); 62956/* harmony default export */ const __WEBPACK_DEFAULT_EXPORT__ = (TelegramShareButton); 62957 62958 62959/***/ }), 62960
vendor: 1,127 bytes, lines 62961-62983
62961/***/ "./node_modules/react-share/es/TumblrIcon.js": 62962/*!***************************************************!*\ 62963 !*** ./node_modules/react-share/es/TumblrIcon.js ***! 62964 \***************************************************/ 62965/***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => { 62966 62967"use strict"; 62968__webpack_require__.r(__webpack_exports__); 62969/* harmony export */ __webpack_require__.d(__webpack_exports__, { 62970/* harmony export */ "default": () => (__WEBPACK_DEFAULT_EXPORT__) 62971/* harmony export */ }); 62972/* harmony import */ var _hocs_createIcon__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ./hocs/createIcon */ "./node_modules/react-share/es/hocs/createIcon.js"); 62973 62974var TumblrIcon = (0,_hocs_createIcon__WEBPACK_IMPORTED_MODULE_0__["default"])({ 62975 color: '#2c4762', 62976 networkName: 'tumblr', 62977 path: 'M39.2,41c-0.6,0.3-1.6,0.5-2.4,0.5c-2.4,0.1-2.9-1.7-2.9-3v-9.3h6v-4.5h-6V17c0,0-4.3,0-4.4,0 c-0.1,0-0.2,0.1-0.2,0.2c-0.3,2.3-1.4,6.4-5.9,8.1v3.9h3V39c0,3.4,2.5,8.1,9,8c2.2,0,4.7-1,5.2-1.8L39.2,41z', 62978}); 62979/* harmony default export */ const __WEBPACK_DEFAULT_EXPORT__ = (TumblrIcon); 62980 62981 62982/***/ }), 62983
vendor: 2,029 bytes, lines 62984-63026
62984/***/ "./node_modules/react-share/es/TumblrShareButton.js": 62985/*!**********************************************************!*\ 62986 !*** ./node_modules/react-share/es/TumblrShareButton.js ***! 62987 \**********************************************************/ 62988/***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => { 62989 62990"use strict"; 62991__webpack_require__.r(__webpack_exports__); 62992/* harmony export */ __webpack_require__.d(__webpack_exports__, { 62993/* harmony export */ "default": () => (__WEBPACK_DEFAULT_EXPORT__) 62994/* harmony export */ }); 62995/* harmony import */ var _utils_assert__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ./utils/assert */ "./node_modules/react-share/es/utils/assert.js"); 62996/* harmony import */ var _utils_objectToGetParams__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ./utils/objectToGetParams */ "./node_modules/react-share/es/utils/objectToGetParams.js"); 62997/* harmony import */ var _hocs_createShareButton__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! ./hocs/createShareButton */ "./node_modules/react-share/es/hocs/createShareButton.js"); 62998 62999 63000 63001function tumblrLink(url, _a) { 63002 var title = _a.title, caption = _a.caption, tags = _a.tags, posttype = _a.posttype; 63003 (0,_utils_assert__WEBPACK_IMPORTED_MODULE_0__["default"])(url, 'tumblr.url'); 63004 return ('https://www.tumblr.com/widgets/share/tool' + 63005 (0,_utils_objectToGetParams__WEBPACK_IMPORTED_MODULE_1__["default"])({ 63006 canonicalUrl: url, 63007 title: title, 63008 caption: caption, 63009 tags: tags, 63010 posttype: posttype, 63011 })); 63012} 63013var TumblrShareButton = (0,_hocs_createShareButton__WEBPACK_IMPORTED_MODULE_2__["default"])('tumblr', tumblrLink, function (props) { return ({ 63014 title: props.title, 63015 tags: (props.tags || []).join(','), 63016 caption: props.caption, 63017 posttype: props.posttype || 'link', 63018}); }, { 63019 windowWidth: 660, 63020 windowHeight: 460, 63021}); 63022/* harmony default export */ const __WEBPACK_DEFAULT_EXPORT__ = (TumblrShareButton); 63023 63024 63025/***/ }), 63026
vendor: 1,789 bytes, lines 63027-63058
63027/***/ "./node_modules/react-share/es/TumblrShareCount.js": 63028/*!*********************************************************!*\ 63029 !*** ./node_modules/react-share/es/TumblrShareCount.js ***! 63030 \*********************************************************/ 63031/***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => { 63032 63033"use strict"; 63034__webpack_require__.r(__webpack_exports__); 63035/* harmony export */ __webpack_require__.d(__webpack_exports__, { 63036/* harmony export */ "default": () => (__WEBPACK_DEFAULT_EXPORT__) 63037/* harmony export */ }); 63038/* harmony import */ var jsonp__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! jsonp */ "./node_modules/jsonp/index.js"); 63039/* harmony import */ var jsonp__WEBPACK_IMPORTED_MODULE_0___default = /*#__PURE__*/__webpack_require__.n(jsonp__WEBPACK_IMPORTED_MODULE_0__); 63040/* harmony import */ var _utils_objectToGetParams__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ./utils/objectToGetParams */ "./node_modules/react-share/es/utils/objectToGetParams.js"); 63041/* harmony import */ var _hocs_createShareCount__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! ./hocs/createShareCount */ "./node_modules/react-share/es/hocs/createShareCount.js"); 63042 63043 63044 63045function getTumblrShareCount(shareUrl, callback) { 63046 var endpoint = 'https://api.tumblr.com/v2/share/stats'; 63047 return jsonp__WEBPACK_IMPORTED_MODULE_0___default()(endpoint + 63048 (0,_utils_objectToGetParams__WEBPACK_IMPORTED_MODULE_1__["default"])({ 63049 url: shareUrl, 63050 }), function (err, data) { 63051 callback(!err && data && data.response ? data.response.note_count : undefined); 63052 }); 63053} 63054/* harmony default export */ const __WEBPACK_DEFAULT_EXPORT__ = ((0,_hocs_createShareCount__WEBPACK_IMPORTED_MODULE_2__["default"])(getTumblrShareCount)); 63055 63056 63057/***/ }), 63058
vendor: 1,432 bytes, lines 63059-63081
63059/***/ "./node_modules/react-share/es/TwitterIcon.js": 63060/*!****************************************************!*\ 63061 !*** ./node_modules/react-share/es/TwitterIcon.js ***! 63062 \****************************************************/ 63063/***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => { 63064 63065"use strict"; 63066__webpack_require__.r(__webpack_exports__); 63067/* harmony export */ __webpack_require__.d(__webpack_exports__, { 63068/* harmony export */ "default": () => (__WEBPACK_DEFAULT_EXPORT__) 63069/* harmony export */ }); 63070/* harmony import */ var _hocs_createIcon__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ./hocs/createIcon */ "./node_modules/react-share/es/hocs/createIcon.js"); 63071 63072var TwitterIcon = (0,_hocs_createIcon__WEBPACK_IMPORTED_MODULE_0__["default"])({ 63073 color: '#00aced', 63074 networkName: 'twitter', 63075 path: 'M48,22.1c-1.2,0.5-2.4,0.9-3.8,1c1.4-0.8,2.4-2.1,2.9-3.6c-1.3,0.8-2.7,1.3-4.2,1.6 C41.7,19.8,40,19,38.2,19c-3.6,0-6.6,2.9-6.6,6.6c0,0.5,0.1,1,0.2,1.5c-5.5-0.3-10.3-2.9-13.5-6.9c-0.6,1-0.9,2.1-0.9,3.3 c0,2.3,1.2,4.3,2.9,5.5c-1.1,0-2.1-0.3-3-0.8c0,0,0,0.1,0,0.1c0,3.2,2.3,5.8,5.3,6.4c-0.6,0.1-1.1,0.2-1.7,0.2c-0.4,0-0.8,0-1.2-0.1 c0.8,2.6,3.3,4.5,6.1,4.6c-2.2,1.8-5.1,2.8-8.2,2.8c-0.5,0-1.1,0-1.6-0.1c2.9,1.9,6.4,2.9,10.1,2.9c12.1,0,18.7-10,18.7-18.7 c0-0.3,0-0.6,0-0.8C46,24.5,47.1,23.4,48,22.1z', 63076}); 63077/* harmony default export */ const __WEBPACK_DEFAULT_EXPORT__ = (TwitterIcon); 63078 63079 63080/***/ }), 63081
vendor: 2,372 bytes, lines 63082-63126
63082/***/ "./node_modules/react-share/es/TwitterShareButton.js": 63083/*!***********************************************************!*\ 63084 !*** ./node_modules/react-share/es/TwitterShareButton.js ***! 63085 \***********************************************************/ 63086/***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => { 63087 63088"use strict"; 63089__webpack_require__.r(__webpack_exports__); 63090/* harmony export */ __webpack_require__.d(__webpack_exports__, { 63091/* harmony export */ "default": () => (__WEBPACK_DEFAULT_EXPORT__) 63092/* harmony export */ }); 63093/* harmony import */ var _utils_assert__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ./utils/assert */ "./node_modules/react-share/es/utils/assert.js"); 63094/* harmony import */ var _utils_objectToGetParams__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ./utils/objectToGetParams */ "./node_modules/react-share/es/utils/objectToGetParams.js"); 63095/* harmony import */ var _hocs_createShareButton__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! ./hocs/createShareButton */ "./node_modules/react-share/es/hocs/createShareButton.js"); 63096 63097 63098 63099function twitterLink(url, _a) { 63100 var title = _a.title, via = _a.via, _b = _a.hashtags, hashtags = _b === void 0 ? [] : _b, _c = _a.related, related = _c === void 0 ? [] : _c; 63101 (0,_utils_assert__WEBPACK_IMPORTED_MODULE_0__["default"])(url, 'twitter.url'); 63102 (0,_utils_assert__WEBPACK_IMPORTED_MODULE_0__["default"])(Array.isArray(hashtags), 'twitter.hashtags is not an array'); 63103 (0,_utils_assert__WEBPACK_IMPORTED_MODULE_0__["default"])(Array.isArray(related), 'twitter.related is not an array'); 63104 return ('https://twitter.com/share' + 63105 (0,_utils_objectToGetParams__WEBPACK_IMPORTED_MODULE_1__["default"])({ 63106 url: url, 63107 text: title, 63108 via: via, 63109 hashtags: hashtags.length > 0 ? hashtags.join(',') : undefined, 63110 related: related.length > 0 ? related.join(',') : undefined, 63111 })); 63112} 63113var TwitterShareButton = (0,_hocs_createShareButton__WEBPACK_IMPORTED_MODULE_2__["default"])('twitter', twitterLink, function (props) { return ({ 63114 hashtags: props.hashtags, 63115 title: props.title, 63116 via: props.via, 63117 related: props.related, 63118}); }, { 63119 windowWidth: 550, 63120 windowHeight: 400, 63121}); 63122/* harmony default export */ const __WEBPACK_DEFAULT_EXPORT__ = (TwitterShareButton); 63123 63124 63125/***/ }), 63126
vendor: 1,716 bytes, lines 63127-63149
63127/***/ "./node_modules/react-share/es/VKIcon.js": 63128/*!***********************************************!*\ 63129 !*** ./node_modules/react-share/es/VKIcon.js ***! 63130 \***********************************************/ 63131/***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => { 63132 63133"use strict"; 63134__webpack_require__.r(__webpack_exports__); 63135/* harmony export */ __webpack_require__.d(__webpack_exports__, { 63136/* harmony export */ "default": () => (__WEBPACK_DEFAULT_EXPORT__) 63137/* harmony export */ }); 63138/* harmony import */ var _hocs_createIcon__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ./hocs/createIcon */ "./node_modules/react-share/es/hocs/createIcon.js"); 63139 63140var VKIcon = (0,_hocs_createIcon__WEBPACK_IMPORTED_MODULE_0__["default"])({ 63141 color: '#45668e', 63142 networkName: 'vk', 63143 path: 'M44.94,44.84h-0.2c-2.17-.36-3.66-1.92-4.92-3.37C39.1,40.66,38,38.81,36.7,39c-1.85.3-.93,3.52-1.71,4.9-0.62,1.11-3.29.91-5.12,0.71-5.79-.62-8.75-3.77-11.35-7.14A64.13,64.13,0,0,1,11.6,26a10.59,10.59,0,0,1-1.51-4.49C11,20.7,12.56,21,14.11,21c1.31,0,3.36-.29,4.32.2C19,21.46,19.57,23,20,24a37.18,37.18,0,0,0,3.31,5.82c0.56,0.81,1.41,2.35,2.41,2.14s1.06-2.63,1.1-4.18c0-1.77,0-4-.5-4.9S25,22,24.15,21.47c0.73-1.49,2.72-1.63,5.12-1.63,2,0,4.84-.23,5.62,1.12s0.25,3.85.2,5.71c-0.06,2.09-.41,4.25,1,5.21,1.09-.12,1.68-1.2,2.31-2A28,28,0,0,0,41.72,24c0.44-1,.91-2.65,1.71-3,1.21-.47,3.15-0.1,4.92-0.1,1.46,0,4.05-.41,4.52.61,0.39,0.85-.75,3-1.1,3.57a61.88,61.88,0,0,1-4.12,5.61c-0.58.78-1.78,2-1.71,3.27,0.05,0.94,1,1.67,1.71,2.35a33.12,33.12,0,0,1,3.92,4.18c0.47,0.62,1.5,2,1.4,2.76C52.66,45.81,46.88,44.24,44.94,44.84Z', 63144}); 63145/* harmony default export */ const __WEBPACK_DEFAULT_EXPORT__ = (VKIcon); 63146 63147 63148/***/ }), 63149
vendor: 1,965 bytes, lines 63150-63192
63150/***/ "./node_modules/react-share/es/VKShareButton.js": 63151/*!******************************************************!*\ 63152 !*** ./node_modules/react-share/es/VKShareButton.js ***! 63153 \******************************************************/ 63154/***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => { 63155 63156"use strict"; 63157__webpack_require__.r(__webpack_exports__); 63158/* harmony export */ __webpack_require__.d(__webpack_exports__, { 63159/* harmony export */ "default": () => (__WEBPACK_DEFAULT_EXPORT__) 63160/* harmony export */ }); 63161/* harmony import */ var _utils_assert__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ./utils/assert */ "./node_modules/react-share/es/utils/assert.js"); 63162/* harmony import */ var _utils_objectToGetParams__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ./utils/objectToGetParams */ "./node_modules/react-share/es/utils/objectToGetParams.js"); 63163/* harmony import */ var _hocs_createShareButton__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! ./hocs/createShareButton */ "./node_modules/react-share/es/hocs/createShareButton.js"); 63164 63165 63166 63167function vkLink(url, _a) { 63168 var title = _a.title, image = _a.image, noParse = _a.noParse, noVkLinks = _a.noVkLinks; 63169 (0,_utils_assert__WEBPACK_IMPORTED_MODULE_0__["default"])(url, 'vk.url'); 63170 return ('https://vk.com/share.php' + 63171 (0,_utils_objectToGetParams__WEBPACK_IMPORTED_MODULE_1__["default"])({ 63172 url: url, 63173 title: title, 63174 image: image, 63175 noparse: noParse ? 1 : 0, 63176 no_vk_links: noVkLinks ? 1 : 0, 63177 })); 63178} 63179var VKShareButton = (0,_hocs_createShareButton__WEBPACK_IMPORTED_MODULE_2__["default"])('vk', vkLink, function (props) { return ({ 63180 title: props.title, 63181 image: props.image, 63182 noParse: props.noParse, 63183 noVkLinks: props.noVkLinks, 63184}); }, { 63185 windowWidth: 660, 63186 windowHeight: 460, 63187}); 63188/* harmony default export */ const __WEBPACK_DEFAULT_EXPORT__ = (VKShareButton); 63189 63190 63191/***/ }), 63192
vendor: 2,028 bytes, lines 63193-63233
63193/***/ "./node_modules/react-share/es/VKShareCount.js": 63194/*!*****************************************************!*\ 63195 !*** ./node_modules/react-share/es/VKShareCount.js ***! 63196 \*****************************************************/ 63197/***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => { 63198 63199"use strict"; 63200__webpack_require__.r(__webpack_exports__); 63201/* harmony export */ __webpack_require__.d(__webpack_exports__, { 63202/* harmony export */ "default": () => (__WEBPACK_DEFAULT_EXPORT__) 63203/* harmony export */ }); 63204/* harmony import */ var jsonp__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! jsonp */ "./node_modules/jsonp/index.js"); 63205/* harmony import */ var jsonp__WEBPACK_IMPORTED_MODULE_0___default = /*#__PURE__*/__webpack_require__.n(jsonp__WEBPACK_IMPORTED_MODULE_0__); 63206/* harmony import */ var _utils_objectToGetParams__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ./utils/objectToGetParams */ "./node_modules/react-share/es/utils/objectToGetParams.js"); 63207/* harmony import */ var _hocs_createShareCount__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! ./hocs/createShareCount */ "./node_modules/react-share/es/hocs/createShareCount.js"); 63208 63209 63210 63211function getVKShareCount(shareUrl, callback) { 63212 if (!window.VK) 63213 window.VK = {}; 63214 window.VK.Share = { 63215 // eslint-disable-next-line @typescript-eslint/no-non-null-assertion 63216 count: function (index, count) { return window.VK.callbacks[index](count); }, 63217 }; 63218 window.VK.callbacks = []; 63219 var url = 'https://vk.com/share.php'; 63220 var index = window.VK.callbacks.length; 63221 window.VK.callbacks.push(callback); 63222 return jsonp__WEBPACK_IMPORTED_MODULE_0___default()(url + 63223 (0,_utils_objectToGetParams__WEBPACK_IMPORTED_MODULE_1__["default"])({ 63224 act: 'count', 63225 index: index, 63226 url: shareUrl, 63227 })); 63228} 63229/* harmony default export */ const __WEBPACK_DEFAULT_EXPORT__ = ((0,_hocs_createShareCount__WEBPACK_IMPORTED_MODULE_2__["default"])(getVKShareCount)); 63230 63231 63232/***/ }), 63233
vendor: 2,410 bytes, lines 63234-63256
63234/***/ "./node_modules/react-share/es/ViberIcon.js": 63235/*!**************************************************!*\ 63236 !*** ./node_modules/react-share/es/ViberIcon.js ***! 63237 \**************************************************/ 63238/***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => { 63239 63240"use strict"; 63241__webpack_require__.r(__webpack_exports__); 63242/* harmony export */ __webpack_require__.d(__webpack_exports__, { 63243/* harmony export */ "default": () => (__WEBPACK_DEFAULT_EXPORT__) 63244/* harmony export */ }); 63245/* harmony import */ var _hocs_createIcon__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ./hocs/createIcon */ "./node_modules/react-share/es/hocs/createIcon.js"); 63246 63247var ViberIcon = (0,_hocs_createIcon__WEBPACK_IMPORTED_MODULE_0__["default"])({ 63248 color: '#7C529E', 63249 networkName: 'viber', 63250 path: 'm31.0,12.3c9.0,0.2 16.4,6.2 18.0,15.2c0.2,1.5 0.3,3.0 0.4,4.6a1.0,1.0 0 0 1 -0.8,1.2l-0.1,0a1.1,1.1 0 0 1 -1.0,-1.2l0,0c-0.0,-1.2 -0.1,-2.5 -0.3,-3.8a16.1,16.1 0 0 0 -13.0,-13.5c-1.0,-0.1 -2.0,-0.2 -3.0,-0.3c-0.6,-0.0 -1.4,-0.1 -1.6,-0.8a1.1,1.1 0 0 1 0.9,-1.2l0.6,0l0.0,-0.0zm10.6,39.2a19.9,19.9 0 0 1 -2.1,-0.6c-6.9,-2.9 -13.2,-6.6 -18.3,-12.2a47.5,47.5 0 0 1 -7.0,-10.7c-0.8,-1.8 -1.6,-3.7 -2.4,-5.6c-0.6,-1.7 0.3,-3.4 1.4,-4.7a11.3,11.3 0 0 1 3.7,-2.8a2.4,2.4 0 0 1 3.0,0.7a39.0,39.0 0 0 1 4.7,6.5a3.1,3.1 0 0 1 -0.8,4.2c-0.3,0.2 -0.6,0.5 -1.0,0.8a3.3,3.3 0 0 0 -0.7,0.7a2.1,2.1 0 0 0 -0.1,1.9c1.7,4.9 4.7,8.7 9.7,10.8a5.0,5.0 0 0 0 2.5,0.6c1.5,-0.1 2.0,-1.8 3.1,-2.7a2.9,2.9 0 0 1 3.5,-0.1c1.1,0.7 2.2,1.4 3.3,2.2a37.8,37.8 0 0 1 3.1,2.4a2.4,2.4 0 0 1 0.7,3.0a10.4,10.4 0 0 1 -4.4,4.8a10.8,10.8 0 0 1 -1.9,0.6c-0.7,-0.2 0.6,-0.2 0,0l0.0,0l0,-0.0zm3.1,-21.4a4.2,4.2 0 0 1 -0.0,0.6a1.0,1.0 0 0 1 -1.9,0.1a2.7,2.7 0 0 1 -0.1,-0.8a10.9,10.9 0 0 0 -1.4,-5.5a10.2,10.2 0 0 0 -4.2,-4.0a12.3,12.3 0 0 0 -3.4,-1.0c-0.5,-0.0 -1.0,-0.1 -1.5,-0.2a0.9,0.9 0 0 1 -0.9,-1.0l0,-0.1a0.9,0.9 0 0 1 0.9,-0.9l0.1,0a14.1,14.1 0 0 1 5.9,1.5a11.9,11.9 0 0 1 6.5,9.3c0,0.1 0.0,0.3 0.0,0.5c0,0.4 0.0,0.9 0.0,1.5l0,0l0.0,0.0zm-5.6,-0.2a1.1,1.1 0 0 1 -1.2,-0.9l0,-0.1a11.3,11.3 0 0 0 -0.2,-1.4a4.0,4.0 0 0 0 -1.5,-2.3a3.9,3.9 0 0 0 -1.2,-0.5c-0.5,-0.1 -1.1,-0.1 -1.6,-0.2a1.0,1.0 0 0 1 -0.8,-1.1l0,0l0,0a1.0,1.0 0 0 1 1.1,-0.8c3.4,0.2 6.0,2.0 6.3,6.2a2.8,2.8 0 0 1 0,0.8a0.8,0.8 0 0 1 -0.8,0.7l0,0l0.0,-0.0z', 63251}); 63252/* harmony default export */ const __WEBPACK_DEFAULT_EXPORT__ = (ViberIcon); 63253 63254 63255/***/ }), 63256
vendor: 1,802 bytes, lines 63257-63293
63257/***/ "./node_modules/react-share/es/ViberShareButton.js": 63258/*!*********************************************************!*\ 63259 !*** ./node_modules/react-share/es/ViberShareButton.js ***! 63260 \*********************************************************/ 63261/***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => { 63262 63263"use strict"; 63264__webpack_require__.r(__webpack_exports__); 63265/* harmony export */ __webpack_require__.d(__webpack_exports__, { 63266/* harmony export */ "default": () => (__WEBPACK_DEFAULT_EXPORT__) 63267/* harmony export */ }); 63268/* harmony import */ var _utils_assert__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ./utils/assert */ "./node_modules/react-share/es/utils/assert.js"); 63269/* harmony import */ var _utils_objectToGetParams__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ./utils/objectToGetParams */ "./node_modules/react-share/es/utils/objectToGetParams.js"); 63270/* harmony import */ var _hocs_createShareButton__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! ./hocs/createShareButton */ "./node_modules/react-share/es/hocs/createShareButton.js"); 63271 63272 63273 63274function viberLink(url, _a) { 63275 var title = _a.title, separator = _a.separator; 63276 (0,_utils_assert__WEBPACK_IMPORTED_MODULE_0__["default"])(url, 'viber.url'); 63277 return ('viber://forward' + 63278 (0,_utils_objectToGetParams__WEBPACK_IMPORTED_MODULE_1__["default"])({ 63279 text: title ? title + separator + url : url, 63280 })); 63281} 63282var ViberShareButton = (0,_hocs_createShareButton__WEBPACK_IMPORTED_MODULE_2__["default"])('viber', viberLink, function (props) { return ({ 63283 title: props.title, 63284 separator: props.separator || ' ', 63285}); }, { 63286 windowWidth: 660, 63287 windowHeight: 460, 63288}); 63289/* harmony default export */ const __WEBPACK_DEFAULT_EXPORT__ = (ViberShareButton); 63290 63291 63292/***/ }), 63293
vendor: 4,021 bytes, lines 63294-63316
63294/***/ "./node_modules/react-share/es/WeiboIcon.js": 63295/*!**************************************************!*\ 63296 !*** ./node_modules/react-share/es/WeiboIcon.js ***! 63297 \**************************************************/ 63298/***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => { 63299 63300"use strict"; 63301__webpack_require__.r(__webpack_exports__); 63302/* harmony export */ __webpack_require__.d(__webpack_exports__, { 63303/* harmony export */ "default": () => (__WEBPACK_DEFAULT_EXPORT__) 63304/* harmony export */ }); 63305/* harmony import */ var _hocs_createIcon__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ./hocs/createIcon */ "./node_modules/react-share/es/hocs/createIcon.js"); 63306 63307var WeiboIcon = (0,_hocs_createIcon__WEBPACK_IMPORTED_MODULE_0__["default"])({ 63308 color: '#CD201F', 63309 networkName: 'weibo', 63310 path: 'M40.9756152,15.0217119 C40.5000732,15.0546301 39.9999314,15.1204666 39.5325878,15.2192213 C38.6634928,15.4085016 38.0977589,16.2643757 38.2863368,17.1284787 C38.4667163,18.0008129 39.3194143,18.5686519 40.1885094,18.3793715 C42.8613908,17.8115326 45.7720411,18.6427174 47.7316073,20.8153207 C49.6911735,22.996153 50.2077122,25.975254 49.3714112,28.5840234 C49.1008441,29.4316684 49.5763861,30.3533789 50.4208857,30.6249537 C51.2653852,30.8965286 52.1754769,30.4192153 52.4542425,29.5715703 C53.6349013,25.9011885 52.9133876,21.7699494 50.1585171,18.7085538 C48.0923641,16.4042776 45.2063093,15.1533848 42.3530505,15.0217119 C41.8775084,14.9970227 41.4511594,14.9887937 40.9756152,15.0217119 Z M27.9227762,19.8277737 C24.9957268,20.140498 20.863421,22.4365431 17.2312548,26.0822378 C13.2711279,30.0571148 11,34.2871065 11,37.9328012 C11,44.9032373 19.8713401,49.125 28.5786978,49.125 C39.9917329,49.125 47.600423,42.4261409 47.600423,37.1427636 C47.600423,33.9496952 44.9603397,32.1638816 42.549827,31.4149913 C41.9594976,31.2339421 41.5167516,31.1434164 41.8283133,30.3616079 C42.5006339,28.66632 42.6236176,27.1932286 41.8939054,26.1480742 C40.5328692,24.1894405 36.7203236,24.2881952 32.448635,26.0822378 C32.448635,26.0822378 31.1203949,26.6912261 31.4647526,25.6213825 C32.1206742,23.4981576 32.0304845,21.712342 31.0056075,20.6836478 C30.2840938,19.9512176 29.2510184,19.6878718 27.9227762,19.8277737 Z M42.0906819,20.6836478 C41.6233383,20.6589586 41.1723917,20.716566 40.7132466,20.8153207 C39.9671353,20.9716828 39.4997917,21.7781784 39.6637721,22.5270687 C39.8277525,23.275959 40.5574647,23.7450433 41.303576,23.5804521 C42.1972686,23.3911718 43.2057485,23.6380596 43.8616701,24.3704897 C44.5175916,25.1029198 44.6733735,26.0657797 44.3864073,26.9381118 C44.1486363,27.6705419 44.5093932,28.4770397 45.2391054,28.7156963 C45.9688176,28.9461239 46.780521,28.5922524 47.0100936,27.8598223 C47.584026,26.0740087 47.2396661,24.0248493 45.8950269,22.5270687 C44.886547,21.4078489 43.4845162,20.7494842 42.0906819,20.6836478 Z M29.496988,29.9665891 C35.3100922,30.1723275 39.9917329,33.0691319 40.3852858,37.0769272 C40.8362324,41.6607904 35.5970585,45.9319315 28.6442899,46.6232144 C21.6915214,47.3144973 15.6488446,44.154347 15.197898,39.5787128 C14.7469514,34.9948495 20.059916,30.7237084 27.004486,30.0324256 C27.8735831,29.950131 28.6688875,29.9336709 29.496988,29.9665891 Z M25.5614586,34.3776322 C23.183744,34.5916017 20.9372116,35.9577073 19.9205332,37.9328012 C18.5348994,40.6238672 19.9041362,43.6029661 23.0689567,44.582284 C26.340366,45.5945202 30.1857056,44.0638213 31.5303448,41.1587879 C32.8503864,38.3195909 31.1613894,35.3734082 27.9227762,34.5751416 C27.1438688,34.3776322 26.356763,34.3035667 25.5614586,34.3776322 Z M24.052839,38.7228388 C24.3316067,38.7310678 24.5857748,38.8215935 24.8399449,38.9203482 C25.8648218,39.3400561 26.1845841,40.4428158 25.5614586,41.4221338 C24.9219361,42.3932227 23.5690963,42.8623069 22.5442194,42.4096807 C21.5357395,41.9652856 21.2487754,40.8542948 21.8882979,39.9078951 C22.3638421,39.2001542 23.2247386,38.7146097 24.052839,38.7228388 Z', 63311}); 63312/* harmony default export */ const __WEBPACK_DEFAULT_EXPORT__ = (WeiboIcon); 63313 63314 63315/***/ }), 63316
vendor: 1,855 bytes, lines 63317-63356
63317/***/ "./node_modules/react-share/es/WeiboShareButton.js": 63318/*!*********************************************************!*\ 63319 !*** ./node_modules/react-share/es/WeiboShareButton.js ***! 63320 \*********************************************************/ 63321/***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => { 63322 63323"use strict"; 63324__webpack_require__.r(__webpack_exports__); 63325/* harmony export */ __webpack_require__.d(__webpack_exports__, { 63326/* harmony export */ "default": () => (__WEBPACK_DEFAULT_EXPORT__) 63327/* harmony export */ }); 63328/* harmony import */ var _utils_assert__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ./utils/assert */ "./node_modules/react-share/es/utils/assert.js"); 63329/* harmony import */ var _utils_objectToGetParams__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ./utils/objectToGetParams */ "./node_modules/react-share/es/utils/objectToGetParams.js"); 63330/* harmony import */ var _hocs_createShareButton__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! ./hocs/createShareButton */ "./node_modules/react-share/es/hocs/createShareButton.js"); 63331 63332 63333 63334function weiboLink(url, _a) { 63335 var title = _a.title, image = _a.image; 63336 (0,_utils_assert__WEBPACK_IMPORTED_MODULE_0__["default"])(url, 'weibo.url'); 63337 return ('http://service.weibo.com/share/share.php' + 63338 (0,_utils_objectToGetParams__WEBPACK_IMPORTED_MODULE_1__["default"])({ 63339 url: url, 63340 title: title, 63341 pic: image, 63342 })); 63343} 63344var WeiboShareButton = (0,_hocs_createShareButton__WEBPACK_IMPORTED_MODULE_2__["default"])('weibo', weiboLink, function (props) { return ({ 63345 title: props.title, 63346 image: props.image, 63347}); }, { 63348 windowWidth: 660, 63349 windowHeight: 550, 63350 windowPosition: 'screenCenter', 63351}); 63352/* harmony default export */ const __WEBPACK_DEFAULT_EXPORT__ = (WeiboShareButton); 63353 63354 63355/***/ }), 63356
vendor: 2,810 bytes, lines 63357-63379
63357/***/ "./node_modules/react-share/es/WhatsappIcon.js": 63358/*!*****************************************************!*\ 63359 !*** ./node_modules/react-share/es/WhatsappIcon.js ***! 63360 \*****************************************************/ 63361/***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => { 63362 63363"use strict"; 63364__webpack_require__.r(__webpack_exports__); 63365/* harmony export */ __webpack_require__.d(__webpack_exports__, { 63366/* harmony export */ "default": () => (__WEBPACK_DEFAULT_EXPORT__) 63367/* harmony export */ }); 63368/* harmony import */ var _hocs_createIcon__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ./hocs/createIcon */ "./node_modules/react-share/es/hocs/createIcon.js"); 63369 63370var WhatsappIcon = (0,_hocs_createIcon__WEBPACK_IMPORTED_MODULE_0__["default"])({ 63371 color: '#25D366', 63372 networkName: 'whatsapp', 63373 path: 'm42.32286,33.93287c-0.5178,-0.2589 -3.04726,-1.49644 -3.52105,-1.66732c-0.4712,-0.17346 -0.81554,-0.2589 -1.15987,0.2589c-0.34175,0.51004 -1.33075,1.66474 -1.63108,2.00648c-0.30032,0.33658 -0.60064,0.36247 -1.11327,0.12945c-0.5178,-0.2589 -2.17994,-0.80259 -4.14759,-2.56312c-1.53269,-1.37217 -2.56312,-3.05503 -2.86603,-3.57283c-0.30033,-0.5178 -0.03366,-0.80259 0.22524,-1.06149c0.23301,-0.23301 0.5178,-0.59547 0.7767,-0.90616c0.25372,-0.31068 0.33657,-0.5178 0.51262,-0.85437c0.17088,-0.36246 0.08544,-0.64725 -0.04402,-0.90615c-0.12945,-0.2589 -1.15987,-2.79613 -1.58964,-3.80584c-0.41424,-1.00971 -0.84142,-0.88027 -1.15987,-0.88027c-0.29773,-0.02588 -0.64208,-0.02588 -0.98382,-0.02588c-0.34693,0 -0.90616,0.12945 -1.37736,0.62136c-0.4712,0.5178 -1.80194,1.76053 -1.80194,4.27186c0,2.51134 1.84596,4.945 2.10227,5.30747c0.2589,0.33657 3.63497,5.51458 8.80262,7.74113c1.23237,0.5178 2.1903,0.82848 2.94111,1.08738c1.23237,0.38836 2.35599,0.33657 3.24402,0.20712c0.99159,-0.15534 3.04985,-1.24272 3.47963,-2.45956c0.44013,-1.21683 0.44013,-2.22654 0.31068,-2.45955c-0.12945,-0.23301 -0.46601,-0.36247 -0.98382,-0.59548m-9.40068,12.84407l-0.02589,0c-3.05503,0 -6.08417,-0.82849 -8.72495,-2.38189l-0.62136,-0.37023l-6.47252,1.68286l1.73463,-6.29129l-0.41424,-0.64725c-1.70875,-2.71846 -2.6149,-5.85116 -2.6149,-9.07706c0,-9.39809 7.68934,-17.06155 17.15993,-17.06155c4.58253,0 8.88029,1.78642 12.11655,5.02268c3.23625,3.21036 5.02267,7.50812 5.02267,12.06476c-0.0078,9.3981 -7.69712,17.06155 -17.14699,17.06155m14.58906,-31.58846c-3.93529,-3.80584 -9.1133,-5.95471 -14.62789,-5.95471c-11.36055,0 -20.60848,9.2065 -20.61625,20.52564c0,3.61684 0.94757,7.14565 2.75211,10.26282l-2.92557,10.63564l10.93337,-2.85309c3.0136,1.63108 6.4052,2.4958 9.85634,2.49839l0.01037,0c11.36574,0 20.61884,-9.2091 20.62403,-20.53082c0,-5.48093 -2.14111,-10.64081 -6.03239,-14.51915', 63374}); 63375/* harmony default export */ const __WEBPACK_DEFAULT_EXPORT__ = (WhatsappIcon); 63376 63377 63378/***/ }), 63379
vendor: 2,005 bytes, lines 63380-63421
63380/***/ "./node_modules/react-share/es/WhatsappShareButton.js": 63381/*!************************************************************!*\ 63382 !*** ./node_modules/react-share/es/WhatsappShareButton.js ***! 63383 \************************************************************/ 63384/***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => { 63385 63386"use strict"; 63387__webpack_require__.r(__webpack_exports__); 63388/* harmony export */ __webpack_require__.d(__webpack_exports__, { 63389/* harmony export */ "default": () => (__WEBPACK_DEFAULT_EXPORT__) 63390/* harmony export */ }); 63391/* harmony import */ var _utils_assert__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ./utils/assert */ "./node_modules/react-share/es/utils/assert.js"); 63392/* harmony import */ var _utils_objectToGetParams__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ./utils/objectToGetParams */ "./node_modules/react-share/es/utils/objectToGetParams.js"); 63393/* harmony import */ var _hocs_createShareButton__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! ./hocs/createShareButton */ "./node_modules/react-share/es/hocs/createShareButton.js"); 63394 63395 63396 63397function isMobileOrTablet() { 63398 return /(android|iphone|ipad|mobile)/i.test(navigator.userAgent); 63399} 63400function whatsappLink(url, _a) { 63401 var title = _a.title, separator = _a.separator; 63402 (0,_utils_assert__WEBPACK_IMPORTED_MODULE_0__["default"])(url, 'whatsapp.url'); 63403 return ('https://' + 63404 (isMobileOrTablet() ? 'api' : 'web') + 63405 '.whatsapp.com/send' + 63406 (0,_utils_objectToGetParams__WEBPACK_IMPORTED_MODULE_1__["default"])({ 63407 text: title ? title + separator + url : url, 63408 })); 63409} 63410var WhatsappShareButton = (0,_hocs_createShareButton__WEBPACK_IMPORTED_MODULE_2__["default"])('whatsapp', whatsappLink, function (props) { return ({ 63411 title: props.title, 63412 separator: props.separator || ' ', 63413}); }, { 63414 windowWidth: 550, 63415 windowHeight: 400, 63416}); 63417/* harmony default export */ const __WEBPACK_DEFAULT_EXPORT__ = (WhatsappShareButton); 63418 63419 63420/***/ }), 63421
vendor: 3,256 bytes, lines 63422-63444
63422/***/ "./node_modules/react-share/es/WorkplaceIcon.js": 63423/*!******************************************************!*\ 63424 !*** ./node_modules/react-share/es/WorkplaceIcon.js ***! 63425 \******************************************************/ 63426/***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => { 63427 63428"use strict"; 63429__webpack_require__.r(__webpack_exports__); 63430/* harmony export */ __webpack_require__.d(__webpack_exports__, { 63431/* harmony export */ "default": () => (__WEBPACK_DEFAULT_EXPORT__) 63432/* harmony export */ }); 63433/* harmony import */ var _hocs_createIcon__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ./hocs/createIcon */ "./node_modules/react-share/es/hocs/createIcon.js"); 63434 63435var WorkplaceIcon = (0,_hocs_createIcon__WEBPACK_IMPORTED_MODULE_0__["default"])({ 63436 color: '#3b3d4a', 63437 networkName: 'workplace', 63438 path: 'M34.019,10.292c0.21,0.017,0.423,0.034,0.636,0.049 c3.657,0.262,6.976,1.464,9.929,3.635c3.331,2.448,5.635,5.65,6.914,9.584c0.699,2.152,0.983,4.365,0.885,6.623 c-0.136,3.171-1.008,6.13-2.619,8.867c-0.442,0.75-0.908,1.492-1.495,2.141c-0.588,0.651-1.29,1.141-2.146,1.383 c-1.496,0.426-3.247-0.283-3.961-1.642c-0.26-0.494-0.442-1.028-0.654-1.548c-1.156-2.838-2.311-5.679-3.465-8.519 c-0.017-0.042-0.037-0.082-0.065-0.145c-0.101,0.245-0.192,0.472-0.284,0.698c-1.237,3.051-2.475,6.103-3.711,9.155 c-0.466,1.153-1.351,1.815-2.538,2.045c-1.391,0.267-2.577-0.154-3.496-1.247c-0.174-0.209-0.31-0.464-0.415-0.717 c-2.128-5.22-4.248-10.442-6.37-15.665c-0.012-0.029-0.021-0.059-0.036-0.104c0.054-0.003,0.103-0.006,0.15-0.006 c1.498-0.001,2.997,0,4.495-0.004c0.12-0.001,0.176,0.03,0.222,0.146c1.557,3.846,3.117,7.691,4.679,11.536 c0.018,0.046,0.039,0.091,0.067,0.159c0.273-0.673,0.536-1.32,0.797-1.968c1.064-2.627,2.137-5.25,3.19-7.883 c0.482-1.208,1.376-1.917,2.621-2.135c1.454-0.255,2.644,0.257,3.522,1.449c0.133,0.18,0.229,0.393,0.313,0.603 c1.425,3.495,2.848,6.991,4.269,10.488c0.02,0.047,0.04,0.093,0.073,0.172c0.196-0.327,0.385-0.625,0.559-0.935 c0.783-1.397,1.323-2.886,1.614-4.461c0.242-1.312,0.304-2.634,0.187-3.962c-0.242-2.721-1.16-5.192-2.792-7.38 c-2.193-2.939-5.086-4.824-8.673-5.625c-1.553-0.346-3.124-0.405-4.705-0.257c-3.162,0.298-6.036,1.366-8.585,3.258 c-3.414,2.534-5.638,5.871-6.623,10.016c-0.417,1.76-0.546,3.547-0.384,5.348c0.417,4.601,2.359,8.444,5.804,11.517 c2.325,2.073,5.037,3.393,8.094,3.989c1.617,0.317,3.247,0.395,4.889,0.242c1-0.094,1.982-0.268,2.952-0.529 c0.04-0.01,0.081-0.018,0.128-0.028c0,1.526,0,3.047,0,4.586c-0.402,0.074-0.805,0.154-1.21,0.221 c-0.861,0.14-1.728,0.231-2.601,0.258c-0.035,0.002-0.071,0.013-0.108,0.021c-0.493,0-0.983,0-1.476,0 c-0.049-0.007-0.1-0.018-0.149-0.022c-0.315-0.019-0.629-0.033-0.945-0.058c-1.362-0.105-2.702-0.346-4.017-0.716 c-3.254-0.914-6.145-2.495-8.66-4.752c-2.195-1.971-3.926-4.29-5.176-6.963c-1.152-2.466-1.822-5.057-1.993-7.774 c-0.014-0.226-0.033-0.451-0.05-0.676c0-0.502,0-1.003,0-1.504c0.008-0.049,0.02-0.099,0.022-0.148 c0.036-1.025,0.152-2.043,0.338-3.052c0.481-2.616,1.409-5.066,2.8-7.331c2.226-3.625,5.25-6.386,9.074-8.254 c2.536-1.24,5.217-1.947,8.037-2.126c0.23-0.015,0.461-0.034,0.691-0.051C33.052,10.292,33.535,10.292,34.019,10.292z', 63439}); 63440/* harmony default export */ const __WEBPACK_DEFAULT_EXPORT__ = (WorkplaceIcon); 63441 63442 63443/***/ }), 63444
vendor: 1,867 bytes, lines 63445-63483
63445/***/ "./node_modules/react-share/es/WorkplaceShareButton.js": 63446/*!*************************************************************!*\ 63447 !*** ./node_modules/react-share/es/WorkplaceShareButton.js ***! 63448 \*************************************************************/ 63449/***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => { 63450 63451"use strict"; 63452__webpack_require__.r(__webpack_exports__); 63453/* harmony export */ __webpack_require__.d(__webpack_exports__, { 63454/* harmony export */ "default": () => (__WEBPACK_DEFAULT_EXPORT__) 63455/* harmony export */ }); 63456/* harmony import */ var _utils_assert__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ./utils/assert */ "./node_modules/react-share/es/utils/assert.js"); 63457/* harmony import */ var _utils_objectToGetParams__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ./utils/objectToGetParams */ "./node_modules/react-share/es/utils/objectToGetParams.js"); 63458/* harmony import */ var _hocs_createShareButton__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! ./hocs/createShareButton */ "./node_modules/react-share/es/hocs/createShareButton.js"); 63459 63460 63461 63462function workplaceLink(url, _a) { 63463 var quote = _a.quote, hashtag = _a.hashtag; 63464 (0,_utils_assert__WEBPACK_IMPORTED_MODULE_0__["default"])(url, 'workplace.url'); 63465 return ('https://work.facebook.com/sharer.php' + 63466 (0,_utils_objectToGetParams__WEBPACK_IMPORTED_MODULE_1__["default"])({ 63467 u: url, 63468 quote: quote, 63469 hashtag: hashtag, 63470 })); 63471} 63472var WorkplaceShareButton = (0,_hocs_createShareButton__WEBPACK_IMPORTED_MODULE_2__["default"])('workplace', workplaceLink, function (props) { return ({ 63473 quote: props.quote, 63474 hashtag: props.hashtag, 63475}); }, { 63476 windowWidth: 550, 63477 windowHeight: 400, 63478}); 63479/* harmony default export */ const __WEBPACK_DEFAULT_EXPORT__ = (WorkplaceShareButton); 63480 63481 63482/***/ }), 63483
vendor: 2,594 bytes, lines 63484-63537
63484/***/ "./node_modules/react-share/es/hocs/createIcon.js": 63485/*!********************************************************!*\ 63486 !*** ./node_modules/react-share/es/hocs/createIcon.js ***! 63487 \********************************************************/ 63488/***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => { 63489 63490"use strict"; 63491__webpack_require__.r(__webpack_exports__); 63492/* harmony export */ __webpack_require__.d(__webpack_exports__, { 63493/* harmony export */ "default": () => (/* binding */ createIcon) 63494/* harmony export */ }); 63495/* harmony import */ var react__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! react */ "./node_modules/react/index.js"); 63496var __assign = (undefined && undefined.__assign) || function () { 63497 __assign = Object.assign || function(t) { 63498 for (var s, i = 1, n = arguments.length; i < n; i++) { 63499 s = arguments[i]; 63500 for (var p in s) if (Object.prototype.hasOwnProperty.call(s, p)) 63501 t[p] = s[p]; 63502 } 63503 return t; 63504 }; 63505 return __assign.apply(this, arguments); 63506}; 63507var __rest = (undefined && undefined.__rest) || function (s, e) { 63508 var t = {}; 63509 for (var p in s) if (Object.prototype.hasOwnProperty.call(s, p) && e.indexOf(p) < 0) 63510 t[p] = s[p]; 63511 if (s != null && typeof Object.getOwnPropertySymbols === "function") 63512 for (var i = 0, p = Object.getOwnPropertySymbols(s); i < p.length; i++) { 63513 if (e.indexOf(p[i]) < 0 && Object.prototype.propertyIsEnumerable.call(s, p[i])) 63514 t[p[i]] = s[p[i]]; 63515 } 63516 return t; 63517}; 63518 63519function createIcon(iconConfig) { 63520 var Icon = function (_a) { 63521 var bgStyle = _a.bgStyle, borderRadius = _a.borderRadius, iconFillColor = _a.iconFillColor, round = _a.round, size = _a.size, rest = __rest(_a, ["bgStyle", "borderRadius", "iconFillColor", "round", "size"]); 63522 return (react__WEBPACK_IMPORTED_MODULE_0__.createElement("svg", __assign({ viewBox: "0 0 64 64", width: size, height: size }, rest), 63523 round ? (react__WEBPACK_IMPORTED_MODULE_0__.createElement("circle", { cx: "32", cy: "32", r: "31", fill: iconConfig.color, style: bgStyle })) : (react__WEBPACK_IMPORTED_MODULE_0__.createElement("rect", { width: "64", height: "64", rx: borderRadius, ry: borderRadius, fill: iconConfig.color, style: bgStyle })), 63524 react__WEBPACK_IMPORTED_MODULE_0__.createElement("path", { d: iconConfig.path, fill: iconFillColor }))); 63525 }; 63526 Icon.defaultProps = { 63527 bgStyle: {}, 63528 borderRadius: 0, 63529 iconFillColor: 'white', 63530 size: 64, 63531 }; 63532 return Icon; 63533} 63534 63535 63536/***/ }), 63537
vendor: 2,149 bytes, lines 63538-63582
63538/***/ "./node_modules/react-share/es/hocs/createShareButton.js": 63539/*!***************************************************************!*\ 63540 !*** ./node_modules/react-share/es/hocs/createShareButton.js ***! 63541 \***************************************************************/ 63542/***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => { 63543 63544"use strict"; 63545__webpack_require__.r(__webpack_exports__); 63546/* harmony export */ __webpack_require__.d(__webpack_exports__, { 63547/* harmony export */ "default": () => (__WEBPACK_DEFAULT_EXPORT__) 63548/* harmony export */ }); 63549/* harmony import */ var react__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! react */ "./node_modules/react/index.js"); 63550/* harmony import */ var _ShareButton__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ../ShareButton */ "./node_modules/react-share/es/ShareButton.js"); 63551var __assign = (undefined && undefined.__assign) || function () { 63552 __assign = Object.assign || function(t) { 63553 for (var s, i = 1, n = arguments.length; i < n; i++) { 63554 s = arguments[i]; 63555 for (var p in s) if (Object.prototype.hasOwnProperty.call(s, p)) 63556 t[p] = s[p]; 63557 } 63558 return t; 63559 }; 63560 return __assign.apply(this, arguments); 63561}; 63562 63563 63564function createShareButton(networkName, link, optsMap, defaultProps) { 63565 function CreatedButton(props, ref) { 63566 var opts = optsMap(props); 63567 var passedProps = __assign({}, props); 63568 // remove keys from passed props that are passed as opts 63569 var optsKeys = Object.keys(opts); 63570 optsKeys.forEach(function (key) { 63571 delete passedProps[key]; 63572 }); 63573 return (react__WEBPACK_IMPORTED_MODULE_0__.createElement(_ShareButton__WEBPACK_IMPORTED_MODULE_1__["default"], __assign({}, defaultProps, passedProps, { forwardedRef: ref, networkName: networkName, networkLink: link, opts: optsMap(props) }))); 63574 } 63575 CreatedButton.displayName = "ShareButton-".concat(networkName); 63576 return (0,react__WEBPACK_IMPORTED_MODULE_0__.forwardRef)(CreatedButton); 63577} 63578/* harmony default export */ const __WEBPACK_DEFAULT_EXPORT__ = (createShareButton); 63579 63580 63581/***/ }), 63582
vendor: 4,896 bytes, lines 63583-63686
63583/***/ "./node_modules/react-share/es/hocs/createShareCount.js": 63584/*!**************************************************************!*\ 63585 !*** ./node_modules/react-share/es/hocs/createShareCount.js ***! 63586 \**************************************************************/ 63587/***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => { 63588 63589"use strict"; 63590__webpack_require__.r(__webpack_exports__); 63591/* harmony export */ __webpack_require__.d(__webpack_exports__, { 63592/* harmony export */ "default": () => (/* binding */ createShareCount) 63593/* harmony export */ }); 63594/* harmony import */ var react__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! react */ "./node_modules/react/index.js"); 63595/* harmony import */ var classnames__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! classnames */ "./node_modules/classnames/index.js"); 63596/* harmony import */ var classnames__WEBPACK_IMPORTED_MODULE_1___default = /*#__PURE__*/__webpack_require__.n(classnames__WEBPACK_IMPORTED_MODULE_1__); 63597var __extends = (undefined && undefined.__extends) || (function () { 63598 var extendStatics = function (d, b) { 63599 extendStatics = Object.setPrototypeOf || 63600 ({ __proto__: [] } instanceof Array && function (d, b) { d.__proto__ = b; }) || 63601 function (d, b) { for (var p in b) if (Object.prototype.hasOwnProperty.call(b, p)) d[p] = b[p]; }; 63602 return extendStatics(d, b); 63603 }; 63604 return function (d, b) { 63605 if (typeof b !== "function" && b !== null) 63606 throw new TypeError("Class extends value " + String(b) + " is not a constructor or null"); 63607 extendStatics(d, b); 63608 function __() { this.constructor = d; } 63609 d.prototype = b === null ? Object.create(b) : (__.prototype = b.prototype, new __()); 63610 }; 63611})(); 63612var __assign = (undefined && undefined.__assign) || function () { 63613 __assign = Object.assign || function(t) { 63614 for (var s, i = 1, n = arguments.length; i < n; i++) { 63615 s = arguments[i]; 63616 for (var p in s) if (Object.prototype.hasOwnProperty.call(s, p)) 63617 t[p] = s[p]; 63618 } 63619 return t; 63620 }; 63621 return __assign.apply(this, arguments); 63622}; 63623var __rest = (undefined && undefined.__rest) || function (s, e) { 63624 var t = {}; 63625 for (var p in s) if (Object.prototype.hasOwnProperty.call(s, p) && e.indexOf(p) < 0) 63626 t[p] = s[p]; 63627 if (s != null && typeof Object.getOwnPropertySymbols === "function") 63628 for (var i = 0, p = Object.getOwnPropertySymbols(s); i < p.length; i++) { 63629 if (e.indexOf(p[i]) < 0 && Object.prototype.propertyIsEnumerable.call(s, p[i])) 63630 t[p[i]] = s[p[i]]; 63631 } 63632 return t; 63633}; 63634 63635 63636var defaultChildren = function (shareCount) { return shareCount; }; 63637var SocialMediaShareCount = /** @class */ (function (_super) { 63638 __extends(SocialMediaShareCount, _super); 63639 function SocialMediaShareCount(props) { 63640 var _this = _super.call(this, props) || this; 63641 _this._isMounted = false; 63642 _this.state = { count: 0, isLoading: false }; 63643 return _this; 63644 } 63645 SocialMediaShareCount.prototype.componentDidMount = function () { 63646 this._isMounted = true; 63647 this.updateCount(this.props.url); 63648 }; 63649 SocialMediaShareCount.prototype.componentDidUpdate = function (prevProps) { 63650 if (this.props.url !== prevProps.url) { 63651 this.updateCount(this.props.url); 63652 } 63653 }; 63654 SocialMediaShareCount.prototype.componentWillUnmount = function () { 63655 this._isMounted = false; 63656 }; 63657 SocialMediaShareCount.prototype.updateCount = function (url) { 63658 var _this = this; 63659 this.setState({ 63660 isLoading: true, 63661 }); 63662 this.props.getCount(url, function (count) { 63663 if (_this._isMounted) { 63664 _this.setState({ 63665 count: count, 63666 isLoading: false, 63667 }); 63668 } 63669 }); 63670 }; 63671 SocialMediaShareCount.prototype.render = function () { 63672 var _a = this.state, count = _a.count, isLoading = _a.isLoading; 63673 var _b = this.props, _c = _b.children, children = _c === void 0 ? defaultChildren : _c, className = _b.className, _ = _b.getCount, rest = __rest(_b, ["children", "className", "getCount"]); 63674 return (react__WEBPACK_IMPORTED_MODULE_0__.createElement("span", __assign({ className: classnames__WEBPACK_IMPORTED_MODULE_1___default()('react-share__ShareCount', className) }, rest), !isLoading && count !== undefined && children(count))); 63675 }; 63676 return SocialMediaShareCount; 63677}(react__WEBPACK_IMPORTED_MODULE_0__.Component)); 63678function createShareCount(getCount) { 63679 var ShareCount = function (props) { return (react__WEBPACK_IMPORTED_MODULE_0__.createElement(SocialMediaShareCount, __assign({ getCount: getCount }, props))); }; 63680 ShareCount.displayName = "ShareCount(".concat(getCount.name, ")"); 63681 return ShareCount; 63682} 63683 63684 63685/***/ }), 63686
vendor: 15,050 bytes, lines 63687-63847
63687/***/ "./node_modules/react-share/es/index.js": 63688/*!**********************************************!*\ 63689 !*** ./node_modules/react-share/es/index.js ***! 63690 \**********************************************/ 63691/***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => { 63692 63693"use strict"; 63694__webpack_require__.r(__webpack_exports__); 63695/* harmony export */ __webpack_require__.d(__webpack_exports__, { 63696/* harmony export */ EmailIcon: () => (/* reexport safe */ _EmailIcon__WEBPACK_IMPORTED_MODULE_0__["default"]), 63697/* harmony export */ EmailShareButton: () => (/* reexport safe */ _EmailShareButton__WEBPACK_IMPORTED_MODULE_1__["default"]), 63698/* harmony export */ FacebookIcon: () => (/* reexport safe */ _FacebookIcon__WEBPACK_IMPORTED_MODULE_2__["default"]), 63699/* harmony export */ FacebookMessengerIcon: () => (/* reexport safe */ _FacebookMessengerIcon__WEBPACK_IMPORTED_MODULE_3__["default"]), 63700/* harmony export */ FacebookMessengerShareButton: () => (/* reexport safe */ _FacebookMessengerShareButton__WEBPACK_IMPORTED_MODULE_4__["default"]), 63701/* harmony export */ FacebookShareButton: () => (/* reexport safe */ _FacebookShareButton__WEBPACK_IMPORTED_MODULE_5__["default"]), 63702/* harmony export */ FacebookShareCount: () => (/* reexport safe */ _FacebookShareCount__WEBPACK_IMPORTED_MODULE_6__["default"]), 63703/* harmony export */ HatenaIcon: () => (/* reexport safe */ _HatenaIcon__WEBPACK_IMPORTED_MODULE_7__["default"]), 63704/* harmony export */ HatenaShareButton: () => (/* reexport safe */ _HatenaShareButton__WEBPACK_IMPORTED_MODULE_8__["default"]), 63705/* harmony export */ HatenaShareCount: () => (/* reexport safe */ _HatenaShareCount__WEBPACK_IMPORTED_MODULE_9__["default"]), 63706/* harmony export */ InstapaperIcon: () => (/* reexport safe */ _InstapaperIcon__WEBPACK_IMPORTED_MODULE_10__["default"]), 63707/* harmony export */ InstapaperShareButton: () => (/* reexport safe */ _InstapaperShareButton__WEBPACK_IMPORTED_MODULE_11__["default"]), 63708/* harmony export */ LineIcon: () => (/* reexport safe */ _LineIcon__WEBPACK_IMPORTED_MODULE_12__["default"]), 63709/* harmony export */ LineShareButton: () => (/* reexport safe */ _LineShareButton__WEBPACK_IMPORTED_MODULE_13__["default"]), 63710/* harmony export */ LinkedinIcon: () => (/* reexport safe */ _LinkedinIcon__WEBPACK_IMPORTED_MODULE_14__["default"]), 63711/* harmony export */ LinkedinShareButton: () => (/* reexport safe */ _LinkedinShareButton__WEBPACK_IMPORTED_MODULE_15__["default"]), 63712/* harmony export */ LivejournalIcon: () => (/* reexport safe */ _LivejournalIcon__WEBPACK_IMPORTED_MODULE_16__["default"]), 63713/* harmony export */ LivejournalShareButton: () => (/* reexport safe */ _LivejournalShareButton__WEBPACK_IMPORTED_MODULE_17__["default"]), 63714/* harmony export */ MailruIcon: () => (/* reexport safe */ _MailruIcon__WEBPACK_IMPORTED_MODULE_18__["default"]), 63715/* harmony export */ MailruShareButton: () => (/* reexport safe */ _MailruShareButton__WEBPACK_IMPORTED_MODULE_19__["default"]), 63716/* harmony export */ OKIcon: () => (/* reexport safe */ _OKIcon__WEBPACK_IMPORTED_MODULE_20__["default"]), 63717/* harmony export */ OKShareButton: () => (/* reexport safe */ _OKShareButton__WEBPACK_IMPORTED_MODULE_21__["default"]), 63718/* harmony export */ OKShareCount: () => (/* reexport safe */ _OKShareCount__WEBPACK_IMPORTED_MODULE_22__["default"]), 63719/* harmony export */ PinterestIcon: () => (/* reexport safe */ _PinterestIcon__WEBPACK_IMPORTED_MODULE_23__["default"]), 63720/* harmony export */ PinterestShareButton: () => (/* reexport safe */ _PinterestShareButton__WEBPACK_IMPORTED_MODULE_24__["default"]), 63721/* harmony export */ PinterestShareCount: () => (/* reexport safe */ _PinterestShareCount__WEBPACK_IMPORTED_MODULE_25__["default"]), 63722/* harmony export */ PocketIcon: () => (/* reexport safe */ _PocketIcon__WEBPACK_IMPORTED_MODULE_26__["default"]), 63723/* harmony export */ PocketShareButton: () => (/* reexport safe */ _PocketShareButton__WEBPACK_IMPORTED_MODULE_27__["default"]), 63724/* harmony export */ RedditIcon: () => (/* reexport safe */ _RedditIcon__WEBPACK_IMPORTED_MODULE_28__["default"]), 63725/* harmony export */ RedditShareButton: () => (/* reexport safe */ _RedditShareButton__WEBPACK_IMPORTED_MODULE_29__["default"]), 63726/* harmony export */ RedditShareCount: () => (/* reexport safe */ _RedditShareCount__WEBPACK_IMPORTED_MODULE_30__["default"]), 63727/* harmony export */ TelegramIcon: () => (/* reexport safe */ _TelegramIcon__WEBPACK_IMPORTED_MODULE_31__["default"]), 63728/* harmony export */ TelegramShareButton: () => (/* reexport safe */ _TelegramShareButton__WEBPACK_IMPORTED_MODULE_32__["default"]), 63729/* harmony export */ TumblrIcon: () => (/* reexport safe */ _TumblrIcon__WEBPACK_IMPORTED_MODULE_33__["default"]), 63730/* harmony export */ TumblrShareButton: () => (/* reexport safe */ _TumblrShareButton__WEBPACK_IMPORTED_MODULE_34__["default"]), 63731/* harmony export */ TumblrShareCount: () => (/* reexport safe */ _TumblrShareCount__WEBPACK_IMPORTED_MODULE_35__["default"]), 63732/* harmony export */ TwitterIcon: () => (/* reexport safe */ _TwitterIcon__WEBPACK_IMPORTED_MODULE_36__["default"]), 63733/* harmony export */ TwitterShareButton: () => (/* reexport safe */ _TwitterShareButton__WEBPACK_IMPORTED_MODULE_37__["default"]), 63734/* harmony export */ VKIcon: () => (/* reexport safe */ _VKIcon__WEBPACK_IMPORTED_MODULE_40__["default"]), 63735/* harmony export */ VKShareButton: () => (/* reexport safe */ _VKShareButton__WEBPACK_IMPORTED_MODULE_41__["default"]), 63736/* harmony export */ VKShareCount: () => (/* reexport safe */ _VKShareCount__WEBPACK_IMPORTED_MODULE_42__["default"]), 63737/* harmony export */ ViberIcon: () => (/* reexport safe */ _ViberIcon__WEBPACK_IMPORTED_MODULE_38__["default"]), 63738/* harmony export */ ViberShareButton: () => (/* reexport safe */ _ViberShareButton__WEBPACK_IMPORTED_MODULE_39__["default"]), 63739/* harmony export */ WeiboIcon: () => (/* reexport safe */ _WeiboIcon__WEBPACK_IMPORTED_MODULE_43__["default"]), 63740/* harmony export */ WeiboShareButton: () => (/* reexport safe */ _WeiboShareButton__WEBPACK_IMPORTED_MODULE_44__["default"]), 63741/* harmony export */ WhatsappIcon: () => (/* reexport safe */ _WhatsappIcon__WEBPACK_IMPORTED_MODULE_45__["default"]), 63742/* harmony export */ WhatsappShareButton: () => (/* reexport safe */ _WhatsappShareButton__WEBPACK_IMPORTED_MODULE_46__["default"]), 63743/* harmony export */ WorkplaceIcon: () => (/* reexport safe */ _WorkplaceIcon__WEBPACK_IMPORTED_MODULE_47__["default"]), 63744/* harmony export */ WorkplaceShareButton: () => (/* reexport safe */ _WorkplaceShareButton__WEBPACK_IMPORTED_MODULE_48__["default"]) 63745/* harmony export */ }); 63746/* harmony import */ var _EmailIcon__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ./EmailIcon */ "./node_modules/react-share/es/EmailIcon.js"); 63747/* harmony import */ var _EmailShareButton__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ./EmailShareButton */ "./node_modules/react-share/es/EmailShareButton.js"); 63748/* harmony import */ var _FacebookIcon__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! ./FacebookIcon */ "./node_modules/react-share/es/FacebookIcon.js"); 63749/* harmony import */ var _FacebookMessengerIcon__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(/*! ./FacebookMessengerIcon */ "./node_modules/react-share/es/FacebookMessengerIcon.js"); 63750/* harmony import */ var _FacebookMessengerShareButton__WEBPACK_IMPORTED_MODULE_4__ = __webpack_require__(/*! ./FacebookMessengerShareButton */ "./node_modules/react-share/es/FacebookMessengerShareButton.js"); 63751/* harmony import */ var _FacebookShareButton__WEBPACK_IMPORTED_MODULE_5__ = __webpack_require__(/*! ./FacebookShareButton */ "./node_modules/react-share/es/FacebookShareButton.js"); 63752/* harmony import */ var _FacebookShareCount__WEBPACK_IMPORTED_MODULE_6__ = __webpack_require__(/*! ./FacebookShareCount */ "./node_modules/react-share/es/FacebookShareCount.js"); 63753/* harmony import */ var _HatenaIcon__WEBPACK_IMPORTED_MODULE_7__ = __webpack_require__(/*! ./HatenaIcon */ "./node_modules/react-share/es/HatenaIcon.js"); 63754/* harmony import */ var _HatenaShareButton__WEBPACK_IMPORTED_MODULE_8__ = __webpack_require__(/*! ./HatenaShareButton */ "./node_modules/react-share/es/HatenaShareButton.js"); 63755/* harmony import */ var _HatenaShareCount__WEBPACK_IMPORTED_MODULE_9__ = __webpack_require__(/*! ./HatenaShareCount */ "./node_modules/react-share/es/HatenaShareCount.js"); 63756/* harmony import */ var _InstapaperIcon__WEBPACK_IMPORTED_MODULE_10__ = __webpack_require__(/*! ./InstapaperIcon */ "./node_modules/react-share/es/InstapaperIcon.js"); 63757/* harmony import */ var _InstapaperShareButton__WEBPACK_IMPORTED_MODULE_11__ = __webpack_require__(/*! ./InstapaperShareButton */ "./node_modules/react-share/es/InstapaperShareButton.js"); 63758/* harmony import */ var _LineIcon__WEBPACK_IMPORTED_MODULE_12__ = __webpack_require__(/*! ./LineIcon */ "./node_modules/react-share/es/LineIcon.js"); 63759/* harmony import */ var _LineShareButton__WEBPACK_IMPORTED_MODULE_13__ = __webpack_require__(/*! ./LineShareButton */ "./node_modules/react-share/es/LineShareButton.js"); 63760/* harmony import */ var _LinkedinIcon__WEBPACK_IMPORTED_MODULE_14__ = __webpack_require__(/*! ./LinkedinIcon */ "./node_modules/react-share/es/LinkedinIcon.js"); 63761/* harmony import */ var _LinkedinShareButton__WEBPACK_IMPORTED_MODULE_15__ = __webpack_require__(/*! ./LinkedinShareButton */ "./node_modules/react-share/es/LinkedinShareButton.js"); 63762/* harmony import */ var _LivejournalIcon__WEBPACK_IMPORTED_MODULE_16__ = __webpack_require__(/*! ./LivejournalIcon */ "./node_modules/react-share/es/LivejournalIcon.js"); 63763/* harmony import */ var _LivejournalShareButton__WEBPACK_IMPORTED_MODULE_17__ = __webpack_require__(/*! ./LivejournalShareButton */ "./node_modules/react-share/es/LivejournalShareButton.js"); 63764/* harmony import */ var _MailruIcon__WEBPACK_IMPORTED_MODULE_18__ = __webpack_require__(/*! ./MailruIcon */ "./node_modules/react-share/es/MailruIcon.js"); 63765/* harmony import */ var _MailruShareButton__WEBPACK_IMPORTED_MODULE_19__ = __webpack_require__(/*! ./MailruShareButton */ "./node_modules/react-share/es/MailruShareButton.js"); 63766/* harmony import */ var _OKIcon__WEBPACK_IMPORTED_MODULE_20__ = __webpack_require__(/*! ./OKIcon */ "./node_modules/react-share/es/OKIcon.js"); 63767/* harmony import */ var _OKShareButton__WEBPACK_IMPORTED_MODULE_21__ = __webpack_require__(/*! ./OKShareButton */ "./node_modules/react-share/es/OKShareButton.js"); 63768/* harmony import */ var _OKShareCount__WEBPACK_IMPORTED_MODULE_22__ = __webpack_require__(/*! ./OKShareCount */ "./node_modules/react-share/es/OKShareCount.js"); 63769/* harmony import */ var _PinterestIcon__WEBPACK_IMPORTED_MODULE_23__ = __webpack_require__(/*! ./PinterestIcon */ "./node_modules/react-share/es/PinterestIcon.js"); 63770/* harmony import */ var _PinterestShareButton__WEBPACK_IMPORTED_MODULE_24__ = __webpack_require__(/*! ./PinterestShareButton */ "./node_modules/react-share/es/PinterestShareButton.js"); 63771/* harmony import */ var _PinterestShareCount__WEBPACK_IMPORTED_MODULE_25__ = __webpack_require__(/*! ./PinterestShareCount */ "./node_modules/react-share/es/PinterestShareCount.js"); 63772/* harmony import */ var _PocketIcon__WEBPACK_IMPORTED_MODULE_26__ = __webpack_require__(/*! ./PocketIcon */ "./node_modules/react-share/es/PocketIcon.js"); 63773/* harmony import */ var _PocketShareButton__WEBPACK_IMPORTED_MODULE_27__ = __webpack_require__(/*! ./PocketShareButton */ "./node_modules/react-share/es/PocketShareButton.js"); 63774/* harmony import */ var _RedditIcon__WEBPACK_IMPORTED_MODULE_28__ = __webpack_require__(/*! ./RedditIcon */ "./node_modules/react-share/es/RedditIcon.js"); 63775/* harmony import */ var _RedditShareButton__WEBPACK_IMPORTED_MODULE_29__ = __webpack_require__(/*! ./RedditShareButton */ "./node_modules/react-share/es/RedditShareButton.js"); 63776/* harmony import */ var _RedditShareCount__WEBPACK_IMPORTED_MODULE_30__ = __webpack_require__(/*! ./RedditShareCount */ "./node_modules/react-share/es/RedditShareCount.js"); 63777/* harmony import */ var _TelegramIcon__WEBPACK_IMPORTED_MODULE_31__ = __webpack_require__(/*! ./TelegramIcon */ "./node_modules/react-share/es/TelegramIcon.js"); 63778/* harmony import */ var _TelegramShareButton__WEBPACK_IMPORTED_MODULE_32__ = __webpack_require__(/*! ./TelegramShareButton */ "./node_modules/react-share/es/TelegramShareButton.js"); 63779/* harmony import */ var _TumblrIcon__WEBPACK_IMPORTED_MODULE_33__ = __webpack_require__(/*! ./TumblrIcon */ "./node_modules/react-share/es/TumblrIcon.js"); 63780/* harmony import */ var _TumblrShareButton__WEBPACK_IMPORTED_MODULE_34__ = __webpack_require__(/*! ./TumblrShareButton */ "./node_modules/react-share/es/TumblrShareButton.js"); 63781/* harmony import */ var _TumblrShareCount__WEBPACK_IMPORTED_MODULE_35__ = __webpack_require__(/*! ./TumblrShareCount */ "./node_modules/react-share/es/TumblrShareCount.js"); 63782/* harmony import */ var _TwitterIcon__WEBPACK_IMPORTED_MODULE_36__ = __webpack_require__(/*! ./TwitterIcon */ "./node_modules/react-share/es/TwitterIcon.js"); 63783/* harmony import */ var _TwitterShareButton__WEBPACK_IMPORTED_MODULE_37__ = __webpack_require__(/*! ./TwitterShareButton */ "./node_modules/react-share/es/TwitterShareButton.js"); 63784/* harmony import */ var _ViberIcon__WEBPACK_IMPORTED_MODULE_38__ = __webpack_require__(/*! ./ViberIcon */ "./node_modules/react-share/es/ViberIcon.js"); 63785/* harmony import */ var _ViberShareButton__WEBPACK_IMPORTED_MODULE_39__ = __webpack_require__(/*! ./ViberShareButton */ "./node_modules/react-share/es/ViberShareButton.js"); 63786/* harmony import */ var _VKIcon__WEBPACK_IMPORTED_MODULE_40__ = __webpack_require__(/*! ./VKIcon */ "./node_modules/react-share/es/VKIcon.js"); 63787/* harmony import */ var _VKShareButton__WEBPACK_IMPORTED_MODULE_41__ = __webpack_require__(/*! ./VKShareButton */ "./node_modules/react-share/es/VKShareButton.js"); 63788/* harmony import */ var _VKShareCount__WEBPACK_IMPORTED_MODULE_42__ = __webpack_require__(/*! ./VKShareCount */ "./node_modules/react-share/es/VKShareCount.js"); 63789/* harmony import */ var _WeiboIcon__WEBPACK_IMPORTED_MODULE_43__ = __webpack_require__(/*! ./WeiboIcon */ "./node_modules/react-share/es/WeiboIcon.js"); 63790/* harmony import */ var _WeiboShareButton__WEBPACK_IMPORTED_MODULE_44__ = __webpack_require__(/*! ./WeiboShareButton */ "./node_modules/react-share/es/WeiboShareButton.js"); 63791/* harmony import */ var _WhatsappIcon__WEBPACK_IMPORTED_MODULE_45__ = __webpack_require__(/*! ./WhatsappIcon */ "./node_modules/react-share/es/WhatsappIcon.js"); 63792/* harmony import */ var _WhatsappShareButton__WEBPACK_IMPORTED_MODULE_46__ = __webpack_require__(/*! ./WhatsappShareButton */ "./node_modules/react-share/es/WhatsappShareButton.js"); 63793/* harmony import */ var _WorkplaceIcon__WEBPACK_IMPORTED_MODULE_47__ = __webpack_require__(/*! ./WorkplaceIcon */ "./node_modules/react-share/es/WorkplaceIcon.js"); 63794/* harmony import */ var _WorkplaceShareButton__WEBPACK_IMPORTED_MODULE_48__ = __webpack_require__(/*! ./WorkplaceShareButton */ "./node_modules/react-share/es/WorkplaceShareButton.js"); 63795 63796 63797 63798 63799 63800 63801 63802 63803 63804 63805 63806 63807 63808 63809 63810 63811 63812 63813 63814 63815 63816 63817 63818 63819 63820 63821 63822 63823 63824 63825 63826 63827 63828 63829 63830 63831 63832 63833 63834 63835 63836 63837 63838 63839 63840 63841 63842 63843 63844 63845 63846/***/ }), 63847
vendor: 1,708 bytes, lines 63848-63891
63848/***/ "./node_modules/react-share/es/utils/assert.js": 63849/*!*****************************************************!*\ 63850 !*** ./node_modules/react-share/es/utils/assert.js ***! 63851 \*****************************************************/ 63852/***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => { 63853 63854"use strict"; 63855__webpack_require__.r(__webpack_exports__); 63856/* harmony export */ __webpack_require__.d(__webpack_exports__, { 63857/* harmony export */ "default": () => (/* binding */ assert) 63858/* harmony export */ }); 63859var __extends = (undefined && undefined.__extends) || (function () { 63860 var extendStatics = function (d, b) { 63861 extendStatics = Object.setPrototypeOf || 63862 ({ __proto__: [] } instanceof Array && function (d, b) { d.__proto__ = b; }) || 63863 function (d, b) { for (var p in b) if (Object.prototype.hasOwnProperty.call(b, p)) d[p] = b[p]; }; 63864 return extendStatics(d, b); 63865 }; 63866 return function (d, b) { 63867 if (typeof b !== "function" && b !== null) 63868 throw new TypeError("Class extends value " + String(b) + " is not a constructor or null"); 63869 extendStatics(d, b); 63870 function __() { this.constructor = d; } 63871 d.prototype = b === null ? Object.create(b) : (__.prototype = b.prototype, new __()); 63872 }; 63873})(); 63874var AssertionError = /** @class */ (function (_super) { 63875 __extends(AssertionError, _super); 63876 function AssertionError(message) { 63877 var _this = _super.call(this, message) || this; 63878 _this.name = 'AssertionError'; 63879 return _this; 63880 } 63881 return AssertionError; 63882}(Error)); 63883function assert(value, message) { 63884 if (!value) { 63885 throw new AssertionError(message); 63886 } 63887} 63888 63889 63890/***/ }), 63891
vendor: 1,032 bytes, lines 63892-63918
63892/***/ "./node_modules/react-share/es/utils/objectToGetParams.js": 63893/*!****************************************************************!*\ 63894 !*** ./node_modules/react-share/es/utils/objectToGetParams.js ***! 63895 \****************************************************************/ 63896/***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => { 63897 63898"use strict"; 63899__webpack_require__.r(__webpack_exports__); 63900/* harmony export */ __webpack_require__.d(__webpack_exports__, { 63901/* harmony export */ "default": () => (/* binding */ objectToGetParams) 63902/* harmony export */ }); 63903function objectToGetParams(object) { 63904 var params = Object.entries(object) 63905 .filter(function (_a) { 63906 var value = _a[1]; 63907 return value !== undefined && value !== null; 63908 }) 63909 .map(function (_a) { 63910 var key = _a[0], value = _a[1]; 63911 return "".concat(encodeURIComponent(key), "=").concat(encodeURIComponent(String(value))); 63912 }); 63913 return params.length > 0 ? "?".concat(params.join('&')) : ''; 63914} 63915 63916 63917/***/ }), 63918
vendor: 3,966 bytes, lines 63919-64054
63919/***/ "./node_modules/react-side-effect/lib/index.js": 63920/*!*****************************************************!*\ 63921 !*** ./node_modules/react-side-effect/lib/index.js ***! 63922 \*****************************************************/ 63923/***/ ((module, __unused_webpack_exports, __webpack_require__) => { 63924 63925"use strict"; 63926 63927 63928function _interopDefault (ex) { return (ex && (typeof ex === 'object') && 'default' in ex) ? ex['default'] : ex; } 63929 63930var React = __webpack_require__(/*! react */ "./node_modules/react/index.js"); 63931var React__default = _interopDefault(React); 63932 63933function _defineProperty(obj, key, value) { 63934 if (key in obj) { 63935 Object.defineProperty(obj, key, { 63936 value: value, 63937 enumerable: true, 63938 configurable: true, 63939 writable: true 63940 }); 63941 } else { 63942 obj[key] = value; 63943 } 63944 63945 return obj; 63946} 63947 63948function _inheritsLoose(subClass, superClass) { 63949 subClass.prototype = Object.create(superClass.prototype); 63950 subClass.prototype.constructor = subClass; 63951 subClass.__proto__ = superClass; 63952} 63953 63954var canUseDOM = !!(typeof window !== 'undefined' && window.document && window.document.createElement); 63955function withSideEffect(reducePropsToState, handleStateChangeOnClient, mapStateOnServer) { 63956 if (typeof reducePropsToState !== 'function') { 63957 throw new Error('Expected reducePropsToState to be a function.'); 63958 } 63959 63960 if (typeof handleStateChangeOnClient !== 'function') { 63961 throw new Error('Expected handleStateChangeOnClient to be a function.'); 63962 } 63963 63964 if (typeof mapStateOnServer !== 'undefined' && typeof mapStateOnServer !== 'function') { 63965 throw new Error('Expected mapStateOnServer to either be undefined or a function.'); 63966 } 63967 63968 function getDisplayName(WrappedComponent) { 63969 return WrappedComponent.displayName || WrappedComponent.name || 'Component'; 63970 } 63971 63972 return function wrap(WrappedComponent) { 63973 if (typeof WrappedComponent !== 'function') { 63974 throw new Error('Expected WrappedComponent to be a React component.'); 63975 } 63976 63977 var mountedInstances = []; 63978 var state; 63979 63980 function emitChange() { 63981 state = reducePropsToState(mountedInstances.map(function (instance) { 63982 return instance.props; 63983 })); 63984 63985 if (SideEffect.canUseDOM) { 63986 handleStateChangeOnClient(state); 63987 } else if (mapStateOnServer) { 63988 state = mapStateOnServer(state); 63989 } 63990 } 63991 63992 var SideEffect = 63993 /*#__PURE__*/ 63994 function (_PureComponent) { 63995 _inheritsLoose(SideEffect, _PureComponent); 63996 63997 function SideEffect() { 63998 return _PureComponent.apply(this, arguments) || this; 63999 } 64000 64001 // Try to use displayName of wrapped component 64002 // Expose canUseDOM so tests can monkeypatch it 64003 SideEffect.peek = function peek() { 64004 return state; 64005 }; 64006 64007 SideEffect.rewind = function rewind() { 64008 if (SideEffect.canUseDOM) { 64009 throw new Error('You may only call rewind() on the server. Call peek() to read the current state.'); 64010 } 64011 64012 var recordedState = state; 64013 state = undefined; 64014 mountedInstances = []; 64015 return recordedState; 64016 }; 64017 64018 var _proto = SideEffect.prototype; 64019 64020 _proto.UNSAFE_componentWillMount = function UNSAFE_componentWillMount() { 64021 mountedInstances.push(this); 64022 emitChange(); 64023 }; 64024 64025 _proto.componentDidUpdate = function componentDidUpdate() { 64026 emitChange(); 64027 }; 64028 64029 _proto.componentWillUnmount = function componentWillUnmount() { 64030 var index = mountedInstances.indexOf(this); 64031 mountedInstances.splice(index, 1); 64032 emitChange(); 64033 }; 64034 64035 _proto.render = function render() { 64036 return React__default.createElement(WrappedComponent, this.props); 64037 }; 64038 64039 return SideEffect; 64040 }(React.PureComponent); 64041 64042 _defineProperty(SideEffect, "displayName", "SideEffect(" + getDisplayName(WrappedComponent) + ")"); 64043 64044 _defineProperty(SideEffect, "canUseDOM", canUseDOM); 64045 64046 return SideEffect; 64047 }; 64048} 64049 64050module.exports = withSideEffect; 64051 64052 64053/***/ }), 64054
vendor: 72,479 bytes, lines 64055-66398
64055/***/ "./node_modules/react/cjs/react.development.js": 64056/*!*****************************************************!*\ 64057 !*** ./node_modules/react/cjs/react.development.js ***! 64058 \*****************************************************/ 64059/***/ ((__unused_webpack_module, exports, __webpack_require__) => { 64060 64061"use strict"; 64062/** @license React v17.0.2 64063 * react.development.js 64064 * 64065 * Copyright (c) Facebook, Inc. and its affiliates. 64066 * 64067 * This source code is licensed under the MIT license found in the 64068 * LICENSE file in the root directory of this source tree. 64069 */ 64070 64071 64072 64073if (true) { 64074 (function() { 64075'use strict'; 64076 64077var _assign = __webpack_require__(/*! object-assign */ "./node_modules/object-assign/index.js"); 64078 64079// TODO: this is special because it gets imported during build. 64080var ReactVersion = '17.0.2'; 64081 64082// ATTENTION 64083// When adding new symbols to this file, 64084// Please consider also adding to 'react-devtools-shared/src/backend/ReactSymbols' 64085// The Symbol used to tag the ReactElement-like types. If there is no native Symbol 64086// nor polyfill, then a plain number is used for performance. 64087var REACT_ELEMENT_TYPE = 0xeac7; 64088var REACT_PORTAL_TYPE = 0xeaca; 64089exports.Fragment = 0xeacb; 64090exports.StrictMode = 0xeacc; 64091exports.Profiler = 0xead2; 64092var REACT_PROVIDER_TYPE = 0xeacd; 64093var REACT_CONTEXT_TYPE = 0xeace; 64094var REACT_FORWARD_REF_TYPE = 0xead0; 64095exports.Suspense = 0xead1; 64096var REACT_SUSPENSE_LIST_TYPE = 0xead8; 64097var REACT_MEMO_TYPE = 0xead3; 64098var REACT_LAZY_TYPE = 0xead4; 64099var REACT_BLOCK_TYPE = 0xead9; 64100var REACT_SERVER_BLOCK_TYPE = 0xeada; 64101var REACT_FUNDAMENTAL_TYPE = 0xead5; 64102var REACT_SCOPE_TYPE = 0xead7; 64103var REACT_OPAQUE_ID_TYPE = 0xeae0; 64104var REACT_DEBUG_TRACING_MODE_TYPE = 0xeae1; 64105var REACT_OFFSCREEN_TYPE = 0xeae2; 64106var REACT_LEGACY_HIDDEN_TYPE = 0xeae3; 64107 64108if (typeof Symbol === 'function' && Symbol.for) { 64109 var symbolFor = Symbol.for; 64110 REACT_ELEMENT_TYPE = symbolFor('react.element'); 64111 REACT_PORTAL_TYPE = symbolFor('react.portal'); 64112 exports.Fragment = symbolFor('react.fragment'); 64113 exports.StrictMode = symbolFor('react.strict_mode'); 64114 exports.Profiler = symbolFor('react.profiler'); 64115 REACT_PROVIDER_TYPE = symbolFor('react.provider'); 64116 REACT_CONTEXT_TYPE = symbolFor('react.context'); 64117 REACT_FORWARD_REF_TYPE = symbolFor('react.forward_ref'); 64118 exports.Suspense = symbolFor('react.suspense'); 64119 REACT_SUSPENSE_LIST_TYPE = symbolFor('react.suspense_list'); 64120 REACT_MEMO_TYPE = symbolFor('react.memo'); 64121 REACT_LAZY_TYPE = symbolFor('react.lazy'); 64122 REACT_BLOCK_TYPE = symbolFor('react.block'); 64123 REACT_SERVER_BLOCK_TYPE = symbolFor('react.server.block'); 64124 REACT_FUNDAMENTAL_TYPE = symbolFor('react.fundamental'); 64125 REACT_SCOPE_TYPE = symbolFor('react.scope'); 64126 REACT_OPAQUE_ID_TYPE = symbolFor('react.opaque.id'); 64127 REACT_DEBUG_TRACING_MODE_TYPE = symbolFor('react.debug_trace_mode'); 64128 REACT_OFFSCREEN_TYPE = symbolFor('react.offscreen'); 64129 REACT_LEGACY_HIDDEN_TYPE = symbolFor('react.legacy_hidden'); 64130} 64131 64132var MAYBE_ITERATOR_SYMBOL = typeof Symbol === 'function' && Symbol.iterator; 64133var FAUX_ITERATOR_SYMBOL = '@@iterator'; 64134function getIteratorFn(maybeIterable) { 64135 if (maybeIterable === null || typeof maybeIterable !== 'object') { 64136 return null; 64137 } 64138 64139 var maybeIterator = MAYBE_ITERATOR_SYMBOL && maybeIterable[MAYBE_ITERATOR_SYMBOL] || maybeIterable[FAUX_ITERATOR_SYMBOL]; 64140 64141 if (typeof maybeIterator === 'function') { 64142 return maybeIterator; 64143 } 64144 64145 return null; 64146} 64147 64148/** 64149 * Keeps track of the current dispatcher. 64150 */ 64151var ReactCurrentDispatcher = { 64152 /** 64153 * @internal 64154 * @type {ReactComponent} 64155 */ 64156 current: null 64157}; 64158 64159/** 64160 * Keeps track of the current batch's configuration such as how long an update 64161 * should suspend for if it needs to. 64162 */ 64163var ReactCurrentBatchConfig = { 64164 transition: 0 64165}; 64166 64167/** 64168 * Keeps track of the current owner. 64169 * 64170 * The current owner is the component who should own any components that are 64171 * currently being constructed. 64172 */ 64173var ReactCurrentOwner = { 64174 /** 64175 * @internal 64176 * @type {ReactComponent} 64177 */ 64178 current: null 64179}; 64180 64181var ReactDebugCurrentFrame = {}; 64182var currentExtraStackFrame = null; 64183function setExtraStackFrame(stack) { 64184 { 64185 currentExtraStackFrame = stack; 64186 } 64187} 64188 64189{ 64190 ReactDebugCurrentFrame.setExtraStackFrame = function (stack) { 64191 { 64192 currentExtraStackFrame = stack; 64193 } 64194 }; // Stack implementation injected by the current renderer. 64195 64196 64197 ReactDebugCurrentFrame.getCurrentStack = null; 64198 64199 ReactDebugCurrentFrame.getStackAddendum = function () { 64200 var stack = ''; // Add an extra top frame while an element is being validated 64201 64202 if (currentExtraStackFrame) { 64203 stack += currentExtraStackFrame; 64204 } // Delegate to the injected renderer-specific implementation 64205 64206 64207 var impl = ReactDebugCurrentFrame.getCurrentStack; 64208 64209 if (impl) { 64210 stack += impl() || ''; 64211 } 64212 64213 return stack; 64214 }; 64215} 64216 64217/** 64218 * Used by act() to track whether you're inside an act() scope. 64219 */ 64220var IsSomeRendererActing = { 64221 current: false 64222}; 64223 64224var ReactSharedInternals = { 64225 ReactCurrentDispatcher: ReactCurrentDispatcher, 64226 ReactCurrentBatchConfig: ReactCurrentBatchConfig, 64227 ReactCurrentOwner: ReactCurrentOwner, 64228 IsSomeRendererActing: IsSomeRendererActing, 64229 // Used by renderers to avoid bundling object-assign twice in UMD bundles: 64230 assign: _assign 64231}; 64232 64233{ 64234 ReactSharedInternals.ReactDebugCurrentFrame = ReactDebugCurrentFrame; 64235} 64236 64237// by calls to these methods by a Babel plugin. 64238// 64239// In PROD (or in packages without access to React internals), 64240// they are left as they are instead. 64241 64242function warn(format) { 64243 { 64244 for (var _len = arguments.length, args = new Array(_len > 1 ? _len - 1 : 0), _key = 1; _key < _len; _key++) { 64245 args[_key - 1] = arguments[_key]; 64246 } 64247 64248 printWarning('warn', format, args); 64249 } 64250} 64251function error(format) { 64252 { 64253 for (var _len2 = arguments.length, args = new Array(_len2 > 1 ? _len2 - 1 : 0), _key2 = 1; _key2 < _len2; _key2++) { 64254 args[_key2 - 1] = arguments[_key2]; 64255 } 64256 64257 printWarning('error', format, args); 64258 } 64259} 64260 64261function printWarning(level, format, args) { 64262 // When changing this logic, you might want to also 64263 // update consoleWithStackDev.www.js as well. 64264 { 64265 var ReactDebugCurrentFrame = ReactSharedInternals.ReactDebugCurrentFrame; 64266 var stack = ReactDebugCurrentFrame.getStackAddendum(); 64267 64268 if (stack !== '') { 64269 format += '%s'; 64270 args = args.concat([stack]); 64271 } 64272 64273 var argsWithFormat = args.map(function (item) { 64274 return '' + item; 64275 }); // Careful: RN currently depends on this prefix 64276 64277 argsWithFormat.unshift('Warning: ' + format); // We intentionally don't use spread (or .apply) directly because it 64278 // breaks IE9: https://github.com/facebook/react/issues/13610 64279 // eslint-disable-next-line react-internal/no-production-logging 64280 64281 Function.prototype.apply.call(console[level], console, argsWithFormat); 64282 } 64283} 64284 64285var didWarnStateUpdateForUnmountedComponent = {}; 64286 64287function warnNoop(publicInstance, callerName) { 64288 { 64289 var _constructor = publicInstance.constructor; 64290 var componentName = _constructor && (_constructor.displayName || _constructor.name) || 'ReactClass'; 64291 var warningKey = componentName + "." + callerName; 64292 64293 if (didWarnStateUpdateForUnmountedComponent[warningKey]) { 64294 return; 64295 } 64296 64297 error("Can't call %s on a component that is not yet mounted. " + 'This is a no-op, but it might indicate a bug in your application. ' + 'Instead, assign to `this.state` directly or define a `state = {};` ' + 'class property with the desired state in the %s component.', callerName, componentName); 64298 64299 didWarnStateUpdateForUnmountedComponent[warningKey] = true; 64300 } 64301} 64302/** 64303 * This is the abstract API for an update queue. 64304 */ 64305 64306 64307var ReactNoopUpdateQueue = { 64308 /** 64309 * Checks whether or not this composite component is mounted. 64310 * @param {ReactClass} publicInstance The instance we want to test. 64311 * @return {boolean} True if mounted, false otherwise. 64312 * @protected 64313 * @final 64314 */ 64315 isMounted: function (publicInstance) { 64316 return false; 64317 }, 64318 64319 /** 64320 * Forces an update. This should only be invoked when it is known with 64321 * certainty that we are **not** in a DOM transaction. 64322 * 64323 * You may want to call this when you know that some deeper aspect of the 64324 * component's state has changed but `setState` was not called. 64325 * 64326 * This will not invoke `shouldComponentUpdate`, but it will invoke 64327 * `componentWillUpdate` and `componentDidUpdate`. 64328 * 64329 * @param {ReactClass} publicInstance The instance that should rerender. 64330 * @param {?function} callback Called after component is updated. 64331 * @param {?string} callerName name of the calling function in the public API. 64332 * @internal 64333 */ 64334 enqueueForceUpdate: function (publicInstance, callback, callerName) { 64335 warnNoop(publicInstance, 'forceUpdate'); 64336 }, 64337 64338 /** 64339 * Replaces all of the state. Always use this or `setState` to mutate state. 64340 * You should treat `this.state` as immutable. 64341 * 64342 * There is no guarantee that `this.state` will be immediately updated, so 64343 * accessing `this.state` after calling this method may return the old value. 64344 * 64345 * @param {ReactClass} publicInstance The instance that should rerender. 64346 * @param {object} completeState Next state. 64347 * @param {?function} callback Called after component is updated. 64348 * @param {?string} callerName name of the calling function in the public API. 64349 * @internal 64350 */ 64351 enqueueReplaceState: function (publicInstance, completeState, callback, callerName) { 64352 warnNoop(publicInstance, 'replaceState'); 64353 }, 64354 64355 /** 64356 * Sets a subset of the state. This only exists because _pendingState is 64357 * internal. This provides a merging strategy that is not available to deep 64358 * properties which is confusing. TODO: Expose pendingState or don't use it 64359 * during the merge. 64360 * 64361 * @param {ReactClass} publicInstance The instance that should rerender. 64362 * @param {object} partialState Next partial state to be merged with state. 64363 * @param {?function} callback Called after component is updated. 64364 * @param {?string} Name of the calling function in the public API. 64365 * @internal 64366 */ 64367 enqueueSetState: function (publicInstance, partialState, callback, callerName) { 64368 warnNoop(publicInstance, 'setState'); 64369 } 64370}; 64371 64372var emptyObject = {}; 64373 64374{ 64375 Object.freeze(emptyObject); 64376} 64377/** 64378 * Base class helpers for the updating state of a component. 64379 */ 64380 64381 64382function Component(props, context, updater) { 64383 this.props = props; 64384 this.context = context; // If a component has string refs, we will assign a different object later. 64385 64386 this.refs = emptyObject; // We initialize the default updater but the real one gets injected by the 64387 // renderer. 64388 64389 this.updater = updater || ReactNoopUpdateQueue; 64390} 64391 64392Component.prototype.isReactComponent = {}; 64393/** 64394 * Sets a subset of the state. Always use this to mutate 64395 * state. You should treat `this.state` as immutable. 64396 * 64397 * There is no guarantee that `this.state` will be immediately updated, so 64398 * accessing `this.state` after calling this method may return the old value. 64399 * 64400 * There is no guarantee that calls to `setState` will run synchronously, 64401 * as they may eventually be batched together. You can provide an optional 64402 * callback that will be executed when the call to setState is actually 64403 * completed. 64404 * 64405 * When a function is provided to setState, it will be called at some point in 64406 * the future (not synchronously). It will be called with the up to date 64407 * component arguments (state, props, context). These values can be different 64408 * from this.* because your function may be called after receiveProps but before 64409 * shouldComponentUpdate, and this new state, props, and context will not yet be 64410 * assigned to this. 64411 * 64412 * @param {object|function} partialState Next partial state or function to 64413 * produce next partial state to be merged with current state. 64414 * @param {?function} callback Called after state is updated. 64415 * @final 64416 * @protected 64417 */ 64418 64419Component.prototype.setState = function (partialState, callback) { 64420 if (!(typeof partialState === 'object' || typeof partialState === 'function' || partialState == null)) { 64421 { 64422 throw Error( "setState(...): takes an object of state variables to update or a function which returns an object of state variables." ); 64423 } 64424 } 64425 64426 this.updater.enqueueSetState(this, partialState, callback, 'setState'); 64427}; 64428/** 64429 * Forces an update. This should only be invoked when it is known with 64430 * certainty that we are **not** in a DOM transaction. 64431 * 64432 * You may want to call this when you know that some deeper aspect of the 64433 * component's state has changed but `setState` was not called. 64434 * 64435 * This will not invoke `shouldComponentUpdate`, but it will invoke 64436 * `componentWillUpdate` and `componentDidUpdate`. 64437 * 64438 * @param {?function} callback Called after update is complete. 64439 * @final 64440 * @protected 64441 */ 64442 64443 64444Component.prototype.forceUpdate = function (callback) { 64445 this.updater.enqueueForceUpdate(this, callback, 'forceUpdate'); 64446}; 64447/** 64448 * Deprecated APIs. These APIs used to exist on classic React classes but since 64449 * we would like to deprecate them, we're not going to move them over to this 64450 * modern base class. Instead, we define a getter that warns if it's accessed. 64451 */ 64452 64453 64454{ 64455 var deprecatedAPIs = { 64456 isMounted: ['isMounted', 'Instead, make sure to clean up subscriptions and pending requests in ' + 'componentWillUnmount to prevent memory leaks.'], 64457 replaceState: ['replaceState', 'Refactor your code to use setState instead (see ' + 'https://github.com/facebook/react/issues/3236).'] 64458 }; 64459 64460 var defineDeprecationWarning = function (methodName, info) { 64461 Object.defineProperty(Component.prototype, methodName, { 64462 get: function () { 64463 warn('%s(...) is deprecated in plain JavaScript React classes. %s', info[0], info[1]); 64464 64465 return undefined; 64466 } 64467 }); 64468 }; 64469 64470 for (var fnName in deprecatedAPIs) { 64471 if (deprecatedAPIs.hasOwnProperty(fnName)) { 64472 defineDeprecationWarning(fnName, deprecatedAPIs[fnName]); 64473 } 64474 } 64475} 64476 64477function ComponentDummy() {} 64478 64479ComponentDummy.prototype = Component.prototype; 64480/** 64481 * Convenience component with default shallow equality check for sCU. 64482 */ 64483 64484function PureComponent(props, context, updater) { 64485 this.props = props; 64486 this.context = context; // If a component has string refs, we will assign a different object later. 64487 64488 this.refs = emptyObject; 64489 this.updater = updater || ReactNoopUpdateQueue; 64490} 64491 64492var pureComponentPrototype = PureComponent.prototype = new ComponentDummy(); 64493pureComponentPrototype.constructor = PureComponent; // Avoid an extra prototype jump for these methods. 64494 64495_assign(pureComponentPrototype, Component.prototype); 64496 64497pureComponentPrototype.isPureReactComponent = true; 64498 64499// an immutable object with a single mutable value 64500function createRef() { 64501 var refObject = { 64502 current: null 64503 }; 64504 64505 { 64506 Object.seal(refObject); 64507 } 64508 64509 return refObject; 64510} 64511 64512function getWrappedName(outerType, innerType, wrapperName) { 64513 var functionName = innerType.displayName || innerType.name || ''; 64514 return outerType.displayName || (functionName !== '' ? wrapperName + "(" + functionName + ")" : wrapperName); 64515} 64516 64517function getContextName(type) { 64518 return type.displayName || 'Context'; 64519} 64520 64521function getComponentName(type) { 64522 if (type == null) { 64523 // Host root, text node or just invalid type. 64524 return null; 64525 } 64526 64527 { 64528 if (typeof type.tag === 'number') { 64529 error('Received an unexpected object in getComponentName(). ' + 'This is likely a bug in React. Please file an issue.'); 64530 } 64531 } 64532 64533 if (typeof type === 'function') { 64534 return type.displayName || type.name || null; 64535 } 64536 64537 if (typeof type === 'string') { 64538 return type; 64539 } 64540 64541 switch (type) { 64542 case exports.Fragment: 64543 return 'Fragment'; 64544 64545 case REACT_PORTAL_TYPE: 64546 return 'Portal'; 64547 64548 case exports.Profiler: 64549 return 'Profiler'; 64550 64551 case exports.StrictMode: 64552 return 'StrictMode'; 64553 64554 case exports.Suspense: 64555 return 'Suspense'; 64556 64557 case REACT_SUSPENSE_LIST_TYPE: 64558 return 'SuspenseList'; 64559 } 64560 64561 if (typeof type === 'object') { 64562 switch (type.$$typeof) { 64563 case REACT_CONTEXT_TYPE: 64564 var context = type; 64565 return getContextName(context) + '.Consumer'; 64566 64567 case REACT_PROVIDER_TYPE: 64568 var provider = type; 64569 return getContextName(provider._context) + '.Provider'; 64570 64571 case REACT_FORWARD_REF_TYPE: 64572 return getWrappedName(type, type.render, 'ForwardRef'); 64573 64574 case REACT_MEMO_TYPE: 64575 return getComponentName(type.type); 64576 64577 case REACT_BLOCK_TYPE: 64578 return getComponentName(type._render); 64579 64580 case REACT_LAZY_TYPE: 64581 { 64582 var lazyComponent = type; 64583 var payload = lazyComponent._payload; 64584 var init = lazyComponent._init; 64585 64586 try { 64587 return getComponentName(init(payload)); 64588 } catch (x) { 64589 return null; 64590 } 64591 } 64592 } 64593 } 64594 64595 return null; 64596} 64597 64598var hasOwnProperty = Object.prototype.hasOwnProperty; 64599var RESERVED_PROPS = { 64600 key: true, 64601 ref: true, 64602 __self: true, 64603 __source: true 64604}; 64605var specialPropKeyWarningShown, specialPropRefWarningShown, didWarnAboutStringRefs; 64606 64607{ 64608 didWarnAboutStringRefs = {}; 64609} 64610 64611function hasValidRef(config) { 64612 { 64613 if (hasOwnProperty.call(config, 'ref')) { 64614 var getter = Object.getOwnPropertyDescriptor(config, 'ref').get; 64615 64616 if (getter && getter.isReactWarning) { 64617 return false; 64618 } 64619 } 64620 } 64621 64622 return config.ref !== undefined; 64623} 64624 64625function hasValidKey(config) { 64626 { 64627 if (hasOwnProperty.call(config, 'key')) { 64628 var getter = Object.getOwnPropertyDescriptor(config, 'key').get; 64629 64630 if (getter && getter.isReactWarning) { 64631 return false; 64632 } 64633 } 64634 } 64635 64636 return config.key !== undefined; 64637} 64638 64639function defineKeyPropWarningGetter(props, displayName) { 64640 var warnAboutAccessingKey = function () { 64641 { 64642 if (!specialPropKeyWarningShown) { 64643 specialPropKeyWarningShown = true; 64644 64645 error('%s: `key` is not a prop. Trying to access it will result ' + 'in `undefined` being returned. If you need to access the same ' + 'value within the child component, you should pass it as a different ' + 'prop. (https://reactjs.org/link/special-props)', displayName); 64646 } 64647 } 64648 }; 64649 64650 warnAboutAccessingKey.isReactWarning = true; 64651 Object.defineProperty(props, 'key', { 64652 get: warnAboutAccessingKey, 64653 configurable: true 64654 }); 64655} 64656 64657function defineRefPropWarningGetter(props, displayName) { 64658 var warnAboutAccessingRef = function () { 64659 { 64660 if (!specialPropRefWarningShown) { 64661 specialPropRefWarningShown = true; 64662 64663 error('%s: `ref` is not a prop. Trying to access it will result ' + 'in `undefined` being returned. If you need to access the same ' + 'value within the child component, you should pass it as a different ' + 'prop. (https://reactjs.org/link/special-props)', displayName); 64664 } 64665 } 64666 }; 64667 64668 warnAboutAccessingRef.isReactWarning = true; 64669 Object.defineProperty(props, 'ref', { 64670 get: warnAboutAccessingRef, 64671 configurable: true 64672 }); 64673} 64674 64675function warnIfStringRefCannotBeAutoConverted(config) { 64676 { 64677 if (typeof config.ref === 'string' && ReactCurrentOwner.current && config.__self && ReactCurrentOwner.current.stateNode !== config.__self) { 64678 var componentName = getComponentName(ReactCurrentOwner.current.type); 64679 64680 if (!didWarnAboutStringRefs[componentName]) { 64681 error('Component "%s" contains the string ref "%s". ' + 'Support for string refs will be removed in a future major release. ' + 'This case cannot be automatically converted to an arrow function. ' + 'We ask you to manually fix this case by using useRef() or createRef() instead. ' + 'Learn more about using refs safely here: ' + 'https://reactjs.org/link/strict-mode-string-ref', componentName, config.ref); 64682 64683 didWarnAboutStringRefs[componentName] = true; 64684 } 64685 } 64686 } 64687} 64688/** 64689 * Factory method to create a new React element. This no longer adheres to 64690 * the class pattern, so do not use new to call it. Also, instanceof check 64691 * will not work. Instead test $$typeof field against Symbol.for('react.element') to check 64692 * if something is a React Element. 64693 * 64694 * @param {*} type 64695 * @param {*} props 64696 * @param {*} key 64697 * @param {string|object} ref 64698 * @param {*} owner 64699 * @param {*} self A *temporary* helper to detect places where `this` is 64700 * different from the `owner` when React.createElement is called, so that we 64701 * can warn. We want to get rid of owner and replace string `ref`s with arrow 64702 * functions, and as long as `this` and owner are the same, there will be no 64703 * change in behavior. 64704 * @param {*} source An annotation object (added by a transpiler or otherwise) 64705 * indicating filename, line number, and/or other information. 64706 * @internal 64707 */ 64708 64709 64710var ReactElement = function (type, key, ref, self, source, owner, props) { 64711 var element = { 64712 // This tag allows us to uniquely identify this as a React Element 64713 $$typeof: REACT_ELEMENT_TYPE, 64714 // Built-in properties that belong on the element 64715 type: type, 64716 key: key, 64717 ref: ref, 64718 props: props, 64719 // Record the component responsible for creating this element. 64720 _owner: owner 64721 }; 64722 64723 { 64724 // The validation flag is currently mutative. We put it on 64725 // an external backing store so that we can freeze the whole object. 64726 // This can be replaced with a WeakMap once they are implemented in 64727 // commonly used development environments. 64728 element._store = {}; // To make comparing ReactElements easier for testing purposes, we make 64729 // the validation flag non-enumerable (where possible, which should 64730 // include every environment we run tests in), so the test framework 64731 // ignores it. 64732 64733 Object.defineProperty(element._store, 'validated', { 64734 configurable: false, 64735 enumerable: false, 64736 writable: true, 64737 value: false 64738 }); // self and source are DEV only properties. 64739 64740 Object.defineProperty(element, '_self', { 64741 configurable: false, 64742 enumerable: false, 64743 writable: false, 64744 value: self 64745 }); // Two elements created in two different places should be considered 64746 // equal for testing purposes and therefore we hide it from enumeration. 64747 64748 Object.defineProperty(element, '_source', { 64749 configurable: false, 64750 enumerable: false, 64751 writable: false, 64752 value: source 64753 }); 64754 64755 if (Object.freeze) { 64756 Object.freeze(element.props); 64757 Object.freeze(element); 64758 } 64759 } 64760 64761 return element; 64762}; 64763/** 64764 * Create and return a new ReactElement of the given type. 64765 * See https://reactjs.org/docs/react-api.html#createelement 64766 */ 64767 64768function createElement(type, config, children) { 64769 var propName; // Reserved names are extracted 64770 64771 var props = {}; 64772 var key = null; 64773 var ref = null; 64774 var self = null; 64775 var source = null; 64776 64777 if (config != null) { 64778 if (hasValidRef(config)) { 64779 ref = config.ref; 64780 64781 { 64782 warnIfStringRefCannotBeAutoConverted(config); 64783 } 64784 } 64785 64786 if (hasValidKey(config)) { 64787 key = '' + config.key; 64788 } 64789 64790 self = config.__self === undefined ? null : config.__self; 64791 source = config.__source === undefined ? null : config.__source; // Remaining properties are added to a new props object 64792 64793 for (propName in config) { 64794 if (hasOwnProperty.call(config, propName) && !RESERVED_PROPS.hasOwnProperty(propName)) { 64795 props[propName] = config[propName]; 64796 } 64797 } 64798 } // Children can be more than one argument, and those are transferred onto 64799 // the newly allocated props object. 64800 64801 64802 var childrenLength = arguments.length - 2; 64803 64804 if (childrenLength === 1) { 64805 props.children = children; 64806 } else if (childrenLength > 1) { 64807 var childArray = Array(childrenLength); 64808 64809 for (var i = 0; i < childrenLength; i++) { 64810 childArray[i] = arguments[i + 2]; 64811 } 64812 64813 { 64814 if (Object.freeze) { 64815 Object.freeze(childArray); 64816 } 64817 } 64818 64819 props.children = childArray; 64820 } // Resolve default props 64821 64822 64823 if (type && type.defaultProps) { 64824 var defaultProps = type.defaultProps; 64825 64826 for (propName in defaultProps) { 64827 if (props[propName] === undefined) { 64828 props[propName] = defaultProps[propName]; 64829 } 64830 } 64831 } 64832 64833 { 64834 if (key || ref) { 64835 var displayName = typeof type === 'function' ? type.displayName || type.name || 'Unknown' : type; 64836 64837 if (key) { 64838 defineKeyPropWarningGetter(props, displayName); 64839 } 64840 64841 if (ref) { 64842 defineRefPropWarningGetter(props, displayName); 64843 } 64844 } 64845 } 64846 64847 return ReactElement(type, key, ref, self, source, ReactCurrentOwner.current, props); 64848} 64849function cloneAndReplaceKey(oldElement, newKey) { 64850 var newElement = ReactElement(oldElement.type, newKey, oldElement.ref, oldElement._self, oldElement._source, oldElement._owner, oldElement.props); 64851 return newElement; 64852} 64853/** 64854 * Clone and return a new ReactElement using element as the starting point. 64855 * See https://reactjs.org/docs/react-api.html#cloneelement 64856 */ 64857 64858function cloneElement(element, config, children) { 64859 if (!!(element === null || element === undefined)) { 64860 { 64861 throw Error( "React.cloneElement(...): The argument must be a React element, but you passed " + element + "." ); 64862 } 64863 } 64864 64865 var propName; // Original props are copied 64866 64867 var props = _assign({}, element.props); // Reserved names are extracted 64868 64869 64870 var key = element.key; 64871 var ref = element.ref; // Self is preserved since the owner is preserved. 64872 64873 var self = element._self; // Source is preserved since cloneElement is unlikely to be targeted by a 64874 // transpiler, and the original source is probably a better indicator of the 64875 // true owner. 64876 64877 var source = element._source; // Owner will be preserved, unless ref is overridden 64878 64879 var owner = element._owner; 64880 64881 if (config != null) { 64882 if (hasValidRef(config)) { 64883 // Silently steal the ref from the parent. 64884 ref = config.ref; 64885 owner = ReactCurrentOwner.current; 64886 } 64887 64888 if (hasValidKey(config)) { 64889 key = '' + config.key; 64890 } // Remaining properties override existing props 64891 64892 64893 var defaultProps; 64894 64895 if (element.type && element.type.defaultProps) { 64896 defaultProps = element.type.defaultProps; 64897 } 64898 64899 for (propName in config) { 64900 if (hasOwnProperty.call(config, propName) && !RESERVED_PROPS.hasOwnProperty(propName)) { 64901 if (config[propName] === undefined && defaultProps !== undefined) { 64902 // Resolve default props 64903 props[propName] = defaultProps[propName]; 64904 } else { 64905 props[propName] = config[propName]; 64906 } 64907 } 64908 } 64909 } // Children can be more than one argument, and those are transferred onto 64910 // the newly allocated props object. 64911 64912 64913 var childrenLength = arguments.length - 2; 64914 64915 if (childrenLength === 1) { 64916 props.children = children; 64917 } else if (childrenLength > 1) { 64918 var childArray = Array(childrenLength); 64919 64920 for (var i = 0; i < childrenLength; i++) { 64921 childArray[i] = arguments[i + 2]; 64922 } 64923 64924 props.children = childArray; 64925 } 64926 64927 return ReactElement(element.type, key, ref, self, source, owner, props); 64928} 64929/** 64930 * Verifies the object is a ReactElement. 64931 * See https://reactjs.org/docs/react-api.html#isvalidelement 64932 * @param {?object} object 64933 * @return {boolean} True if `object` is a ReactElement. 64934 * @final 64935 */ 64936 64937function isValidElement(object) { 64938 return typeof object === 'object' && object !== null && object.$$typeof === REACT_ELEMENT_TYPE; 64939} 64940 64941var SEPARATOR = '.'; 64942var SUBSEPARATOR = ':'; 64943/** 64944 * Escape and wrap key so it is safe to use as a reactid 64945 * 64946 * @param {string} key to be escaped. 64947 * @return {string} the escaped key. 64948 */ 64949 64950function escape(key) { 64951 var escapeRegex = /[=:]/g; 64952 var escaperLookup = { 64953 '=': '=0', 64954 ':': '=2' 64955 }; 64956 var escapedString = key.replace(escapeRegex, function (match) { 64957 return escaperLookup[match]; 64958 }); 64959 return '$' + escapedString; 64960} 64961/** 64962 * TODO: Test that a single child and an array with one item have the same key 64963 * pattern. 64964 */ 64965 64966 64967var didWarnAboutMaps = false; 64968var userProvidedKeyEscapeRegex = /\/+/g; 64969 64970function escapeUserProvidedKey(text) { 64971 return text.replace(userProvidedKeyEscapeRegex, '$&/'); 64972} 64973/** 64974 * Generate a key string that identifies a element within a set. 64975 * 64976 * @param {*} element A element that could contain a manual key. 64977 * @param {number} index Index that is used if a manual key is not provided. 64978 * @return {string} 64979 */ 64980 64981 64982function getElementKey(element, index) { 64983 // Do some typechecking here since we call this blindly. We want to ensure 64984 // that we don't block potential future ES APIs. 64985 if (typeof element === 'object' && element !== null && element.key != null) { 64986 // Explicit key 64987 return escape('' + element.key); 64988 } // Implicit key determined by the index in the set 64989 64990 64991 return index.toString(36); 64992} 64993 64994function mapIntoArray(children, array, escapedPrefix, nameSoFar, callback) { 64995 var type = typeof children; 64996 64997 if (type === 'undefined' || type === 'boolean') { 64998 // All of the above are perceived as null. 64999 children = null; 65000 } 65001 65002 var invokeCallback = false; 65003 65004 if (children === null) { 65005 invokeCallback = true; 65006 } else { 65007 switch (type) { 65008 case 'string': 65009 case 'number': 65010 invokeCallback = true; 65011 break; 65012 65013 case 'object': 65014 switch (children.$$typeof) { 65015 case REACT_ELEMENT_TYPE: 65016 case REACT_PORTAL_TYPE: 65017 invokeCallback = true; 65018 } 65019 65020 } 65021 } 65022 65023 if (invokeCallback) { 65024 var _child = children; 65025 var mappedChild = callback(_child); // If it's the only child, treat the name as if it was wrapped in an array 65026 // so that it's consistent if the number of children grows: 65027 65028 var childKey = nameSoFar === '' ? SEPARATOR + getElementKey(_child, 0) : nameSoFar; 65029 65030 if (Array.isArray(mappedChild)) { 65031 var escapedChildKey = ''; 65032 65033 if (childKey != null) { 65034 escapedChildKey = escapeUserProvidedKey(childKey) + '/'; 65035 } 65036 65037 mapIntoArray(mappedChild, array, escapedChildKey, '', function (c) { 65038 return c; 65039 }); 65040 } else if (mappedChild != null) { 65041 if (isValidElement(mappedChild)) { 65042 mappedChild = cloneAndReplaceKey(mappedChild, // Keep both the (mapped) and old keys if they differ, just as 65043 // traverseAllChildren used to do for objects as children 65044 escapedPrefix + ( // $FlowFixMe Flow incorrectly thinks React.Portal doesn't have a key 65045 mappedChild.key && (!_child || _child.key !== mappedChild.key) ? // $FlowFixMe Flow incorrectly thinks existing element's key can be a number 65046 escapeUserProvidedKey('' + mappedChild.key) + '/' : '') + childKey); 65047 } 65048 65049 array.push(mappedChild); 65050 } 65051 65052 return 1; 65053 } 65054 65055 var child; 65056 var nextName; 65057 var subtreeCount = 0; // Count of children found in the current subtree. 65058 65059 var nextNamePrefix = nameSoFar === '' ? SEPARATOR : nameSoFar + SUBSEPARATOR; 65060 65061 if (Array.isArray(children)) { 65062 for (var i = 0; i < children.length; i++) { 65063 child = children[i]; 65064 nextName = nextNamePrefix + getElementKey(child, i); 65065 subtreeCount += mapIntoArray(child, array, escapedPrefix, nextName, callback); 65066 } 65067 } else { 65068 var iteratorFn = getIteratorFn(children); 65069 65070 if (typeof iteratorFn === 'function') { 65071 var iterableChildren = children; 65072 65073 { 65074 // Warn about using Maps as children 65075 if (iteratorFn === iterableChildren.entries) { 65076 if (!didWarnAboutMaps) { 65077 warn('Using Maps as children is not supported. ' + 'Use an array of keyed ReactElements instead.'); 65078 } 65079 65080 didWarnAboutMaps = true; 65081 } 65082 } 65083 65084 var iterator = iteratorFn.call(iterableChildren); 65085 var step; 65086 var ii = 0; 65087 65088 while (!(step = iterator.next()).done) { 65089 child = step.value; 65090 nextName = nextNamePrefix + getElementKey(child, ii++); 65091 subtreeCount += mapIntoArray(child, array, escapedPrefix, nextName, callback); 65092 } 65093 } else if (type === 'object') { 65094 var childrenString = '' + children; 65095 65096 { 65097 { 65098 throw Error( "Objects are not valid as a React child (found: " + (childrenString === '[object Object]' ? 'object with keys {' + Object.keys(children).join(', ') + '}' : childrenString) + "). If you meant to render a collection of children, use an array instead." ); 65099 } 65100 } 65101 } 65102 } 65103 65104 return subtreeCount; 65105} 65106 65107/** 65108 * Maps children that are typically specified as `props.children`. 65109 * 65110 * See https://reactjs.org/docs/react-api.html#reactchildrenmap 65111 * 65112 * The provided mapFunction(child, index) will be called for each 65113 * leaf child. 65114 * 65115 * @param {?*} children Children tree container. 65116 * @param {function(*, int)} func The map function. 65117 * @param {*} context Context for mapFunction. 65118 * @return {object} Object containing the ordered map of results. 65119 */ 65120function mapChildren(children, func, context) { 65121 if (children == null) { 65122 return children; 65123 } 65124 65125 var result = []; 65126 var count = 0; 65127 mapIntoArray(children, result, '', '', function (child) { 65128 return func.call(context, child, count++); 65129 }); 65130 return result; 65131} 65132/** 65133 * Count the number of children that are typically specified as 65134 * `props.children`. 65135 * 65136 * See https://reactjs.org/docs/react-api.html#reactchildrencount 65137 * 65138 * @param {?*} children Children tree container. 65139 * @return {number} The number of children. 65140 */ 65141 65142 65143function countChildren(children) { 65144 var n = 0; 65145 mapChildren(children, function () { 65146 n++; // Don't return anything 65147 }); 65148 return n; 65149} 65150 65151/** 65152 * Iterates through children that are typically specified as `props.children`. 65153 * 65154 * See https://reactjs.org/docs/react-api.html#reactchildrenforeach 65155 * 65156 * The provided forEachFunc(child, index) will be called for each 65157 * leaf child. 65158 * 65159 * @param {?*} children Children tree container. 65160 * @param {function(*, int)} forEachFunc 65161 * @param {*} forEachContext Context for forEachContext. 65162 */ 65163function forEachChildren(children, forEachFunc, forEachContext) { 65164 mapChildren(children, function () { 65165 forEachFunc.apply(this, arguments); // Don't return anything. 65166 }, forEachContext); 65167} 65168/** 65169 * Flatten a children object (typically specified as `props.children`) and 65170 * return an array with appropriately re-keyed children. 65171 * 65172 * See https://reactjs.org/docs/react-api.html#reactchildrentoarray 65173 */ 65174 65175 65176function toArray(children) { 65177 return mapChildren(children, function (child) { 65178 return child; 65179 }) || []; 65180} 65181/** 65182 * Returns the first child in a collection of children and verifies that there 65183 * is only one child in the collection. 65184 * 65185 * See https://reactjs.org/docs/react-api.html#reactchildrenonly 65186 * 65187 * The current implementation of this function assumes that a single child gets 65188 * passed without a wrapper, but the purpose of this helper function is to 65189 * abstract away the particular structure of children. 65190 * 65191 * @param {?object} children Child collection structure. 65192 * @return {ReactElement} The first and only `ReactElement` contained in the 65193 * structure. 65194 */ 65195 65196 65197function onlyChild(children) { 65198 if (!isValidElement(children)) { 65199 { 65200 throw Error( "React.Children.only expected to receive a single React element child." ); 65201 } 65202 } 65203 65204 return children; 65205} 65206 65207function createContext(defaultValue, calculateChangedBits) { 65208 if (calculateChangedBits === undefined) { 65209 calculateChangedBits = null; 65210 } else { 65211 { 65212 if (calculateChangedBits !== null && typeof calculateChangedBits !== 'function') { 65213 error('createContext: Expected the optional second argument to be a ' + 'function. Instead received: %s', calculateChangedBits); 65214 } 65215 } 65216 } 65217 65218 var context = { 65219 $$typeof: REACT_CONTEXT_TYPE, 65220 _calculateChangedBits: calculateChangedBits, 65221 // As a workaround to support multiple concurrent renderers, we categorize 65222 // some renderers as primary and others as secondary. We only expect 65223 // there to be two concurrent renderers at most: React Native (primary) and 65224 // Fabric (secondary); React DOM (primary) and React ART (secondary). 65225 // Secondary renderers store their context values on separate fields. 65226 _currentValue: defaultValue, 65227 _currentValue2: defaultValue, 65228 // Used to track how many concurrent renderers this context currently 65229 // supports within in a single renderer. Such as parallel server rendering. 65230 _threadCount: 0, 65231 // These are circular 65232 Provider: null, 65233 Consumer: null 65234 }; 65235 context.Provider = { 65236 $$typeof: REACT_PROVIDER_TYPE, 65237 _context: context 65238 }; 65239 var hasWarnedAboutUsingNestedContextConsumers = false; 65240 var hasWarnedAboutUsingConsumerProvider = false; 65241 var hasWarnedAboutDisplayNameOnConsumer = false; 65242 65243 { 65244 // A separate object, but proxies back to the original context object for 65245 // backwards compatibility. It has a different $$typeof, so we can properly 65246 // warn for the incorrect usage of Context as a Consumer. 65247 var Consumer = { 65248 $$typeof: REACT_CONTEXT_TYPE, 65249 _context: context, 65250 _calculateChangedBits: context._calculateChangedBits 65251 }; // $FlowFixMe: Flow complains about not setting a value, which is intentional here 65252 65253 Object.defineProperties(Consumer, { 65254 Provider: { 65255 get: function () { 65256 if (!hasWarnedAboutUsingConsumerProvider) { 65257 hasWarnedAboutUsingConsumerProvider = true; 65258 65259 error('Rendering <Context.Consumer.Provider> is not supported and will be removed in ' + 'a future major release. Did you mean to render <Context.Provider> instead?'); 65260 } 65261 65262 return context.Provider; 65263 }, 65264 set: function (_Provider) { 65265 context.Provider = _Provider; 65266 } 65267 }, 65268 _currentValue: { 65269 get: function () { 65270 return context._currentValue; 65271 }, 65272 set: function (_currentValue) { 65273 context._currentValue = _currentValue; 65274 } 65275 }, 65276 _currentValue2: { 65277 get: function () { 65278 return context._currentValue2; 65279 }, 65280 set: function (_currentValue2) { 65281 context._currentValue2 = _currentValue2; 65282 } 65283 }, 65284 _threadCount: { 65285 get: function () { 65286 return context._threadCount; 65287 }, 65288 set: function (_threadCount) { 65289 context._threadCount = _threadCount; 65290 } 65291 }, 65292 Consumer: { 65293 get: function () { 65294 if (!hasWarnedAboutUsingNestedContextConsumers) { 65295 hasWarnedAboutUsingNestedContextConsumers = true; 65296 65297 error('Rendering <Context.Consumer.Consumer> is not supported and will be removed in ' + 'a future major release. Did you mean to render <Context.Consumer> instead?'); 65298 } 65299 65300 return context.Consumer; 65301 } 65302 }, 65303 displayName: { 65304 get: function () { 65305 return context.displayName; 65306 }, 65307 set: function (displayName) { 65308 if (!hasWarnedAboutDisplayNameOnConsumer) { 65309 warn('Setting `displayName` on Context.Consumer has no effect. ' + "You should set it directly on the context with Context.displayName = '%s'.", displayName); 65310 65311 hasWarnedAboutDisplayNameOnConsumer = true; 65312 } 65313 } 65314 } 65315 }); // $FlowFixMe: Flow complains about missing properties because it doesn't understand defineProperty 65316 65317 context.Consumer = Consumer; 65318 } 65319 65320 { 65321 context._currentRenderer = null; 65322 context._currentRenderer2 = null; 65323 } 65324 65325 return context; 65326} 65327 65328var Uninitialized = -1; 65329var Pending = 0; 65330var Resolved = 1; 65331var Rejected = 2; 65332 65333function lazyInitializer(payload) { 65334 if (payload._status === Uninitialized) { 65335 var ctor = payload._result; 65336 var thenable = ctor(); // Transition to the next state. 65337 65338 var pending = payload; 65339 pending._status = Pending; 65340 pending._result = thenable; 65341 thenable.then(function (moduleObject) { 65342 if (payload._status === Pending) { 65343 var defaultExport = moduleObject.default; 65344 65345 { 65346 if (defaultExport === undefined) { 65347 error('lazy: Expected the result of a dynamic import() call. ' + 'Instead received: %s\n\nYour code should look like: \n ' + // Break up imports to avoid accidentally parsing them as dependencies. 65348 'const MyComponent = lazy(() => imp' + "ort('./MyComponent'))", moduleObject); 65349 } 65350 } // Transition to the next state. 65351 65352 65353 var resolved = payload; 65354 resolved._status = Resolved; 65355 resolved._result = defaultExport; 65356 } 65357 }, function (error) { 65358 if (payload._status === Pending) { 65359 // Transition to the next state. 65360 var rejected = payload; 65361 rejected._status = Rejected; 65362 rejected._result = error; 65363 } 65364 }); 65365 } 65366 65367 if (payload._status === Resolved) { 65368 return payload._result; 65369 } else { 65370 throw payload._result; 65371 } 65372} 65373 65374function lazy(ctor) { 65375 var payload = { 65376 // We use these fields to store the result. 65377 _status: -1, 65378 _result: ctor 65379 }; 65380 var lazyType = { 65381 $$typeof: REACT_LAZY_TYPE, 65382 _payload: payload, 65383 _init: lazyInitializer 65384 }; 65385 65386 { 65387 // In production, this would just set it on the object. 65388 var defaultProps; 65389 var propTypes; // $FlowFixMe 65390 65391 Object.defineProperties(lazyType, { 65392 defaultProps: { 65393 configurable: true, 65394 get: function () { 65395 return defaultProps; 65396 }, 65397 set: function (newDefaultProps) { 65398 error('React.lazy(...): It is not supported to assign `defaultProps` to ' + 'a lazy component import. Either specify them where the component ' + 'is defined, or create a wrapping component around it.'); 65399 65400 defaultProps = newDefaultProps; // Match production behavior more closely: 65401 // $FlowFixMe 65402 65403 Object.defineProperty(lazyType, 'defaultProps', { 65404 enumerable: true 65405 }); 65406 } 65407 }, 65408 propTypes: { 65409 configurable: true, 65410 get: function () { 65411 return propTypes; 65412 }, 65413 set: function (newPropTypes) { 65414 error('React.lazy(...): It is not supported to assign `propTypes` to ' + 'a lazy component import. Either specify them where the component ' + 'is defined, or create a wrapping component around it.'); 65415 65416 propTypes = newPropTypes; // Match production behavior more closely: 65417 // $FlowFixMe 65418 65419 Object.defineProperty(lazyType, 'propTypes', { 65420 enumerable: true 65421 }); 65422 } 65423 } 65424 }); 65425 } 65426 65427 return lazyType; 65428} 65429 65430function forwardRef(render) { 65431 { 65432 if (render != null && render.$$typeof === REACT_MEMO_TYPE) { 65433 error('forwardRef requires a render function but received a `memo` ' + 'component. Instead of forwardRef(memo(...)), use ' + 'memo(forwardRef(...)).'); 65434 } else if (typeof render !== 'function') { 65435 error('forwardRef requires a render function but was given %s.', render === null ? 'null' : typeof render); 65436 } else { 65437 if (render.length !== 0 && render.length !== 2) { 65438 error('forwardRef render functions accept exactly two parameters: props and ref. %s', render.length === 1 ? 'Did you forget to use the ref parameter?' : 'Any additional parameter will be undefined.'); 65439 } 65440 } 65441 65442 if (render != null) { 65443 if (render.defaultProps != null || render.propTypes != null) { 65444 error('forwardRef render functions do not support propTypes or defaultProps. ' + 'Did you accidentally pass a React component?'); 65445 } 65446 } 65447 } 65448 65449 var elementType = { 65450 $$typeof: REACT_FORWARD_REF_TYPE, 65451 render: render 65452 }; 65453 65454 { 65455 var ownName; 65456 Object.defineProperty(elementType, 'displayName', { 65457 enumerable: false, 65458 configurable: true, 65459 get: function () { 65460 return ownName; 65461 }, 65462 set: function (name) { 65463 ownName = name; 65464 65465 if (render.displayName == null) { 65466 render.displayName = name; 65467 } 65468 } 65469 }); 65470 } 65471 65472 return elementType; 65473} 65474 65475// Filter certain DOM attributes (e.g. src, href) if their values are empty strings. 65476 65477var enableScopeAPI = false; // Experimental Create Event Handle API. 65478 65479function isValidElementType(type) { 65480 if (typeof type === 'string' || typeof type === 'function') { 65481 return true; 65482 } // Note: typeof might be other than 'symbol' or 'number' (e.g. if it's a polyfill). 65483 65484 65485 if (type === exports.Fragment || type === exports.Profiler || type === REACT_DEBUG_TRACING_MODE_TYPE || type === exports.StrictMode || type === exports.Suspense || type === REACT_SUSPENSE_LIST_TYPE || type === REACT_LEGACY_HIDDEN_TYPE || enableScopeAPI ) { 65486 return true; 65487 } 65488 65489 if (typeof type === 'object' && type !== null) { 65490 if (type.$$typeof === REACT_LAZY_TYPE || type.$$typeof === REACT_MEMO_TYPE || type.$$typeof === REACT_PROVIDER_TYPE || type.$$typeof === REACT_CONTEXT_TYPE || type.$$typeof === REACT_FORWARD_REF_TYPE || type.$$typeof === REACT_FUNDAMENTAL_TYPE || type.$$typeof === REACT_BLOCK_TYPE || type[0] === REACT_SERVER_BLOCK_TYPE) { 65491 return true; 65492 } 65493 } 65494 65495 return false; 65496} 65497 65498function memo(type, compare) { 65499 { 65500 if (!isValidElementType(type)) { 65501 error('memo: The first argument must be a component. Instead ' + 'received: %s', type === null ? 'null' : typeof type); 65502 } 65503 } 65504 65505 var elementType = { 65506 $$typeof: REACT_MEMO_TYPE, 65507 type: type, 65508 compare: compare === undefined ? null : compare 65509 }; 65510 65511 { 65512 var ownName; 65513 Object.defineProperty(elementType, 'displayName', { 65514 enumerable: false, 65515 configurable: true, 65516 get: function () { 65517 return ownName; 65518 }, 65519 set: function (name) { 65520 ownName = name; 65521 65522 if (type.displayName == null) { 65523 type.displayName = name; 65524 } 65525 } 65526 }); 65527 } 65528 65529 return elementType; 65530} 65531 65532function resolveDispatcher() { 65533 var dispatcher = ReactCurrentDispatcher.current; 65534 65535 if (!(dispatcher !== null)) { 65536 { 65537 throw Error( "Invalid hook call. Hooks can only be called inside of the body of a function component. This could happen for one of the following reasons:\n1. You might have mismatching versions of React and the renderer (such as React DOM)\n2. You might be breaking the Rules of Hooks\n3. You might have more than one copy of React in the same app\nSee https://reactjs.org/link/invalid-hook-call for tips about how to debug and fix this problem." ); 65538 } 65539 } 65540 65541 return dispatcher; 65542} 65543 65544function useContext(Context, unstable_observedBits) { 65545 var dispatcher = resolveDispatcher(); 65546 65547 { 65548 if (unstable_observedBits !== undefined) { 65549 error('useContext() second argument is reserved for future ' + 'use in React. Passing it is not supported. ' + 'You passed: %s.%s', unstable_observedBits, typeof unstable_observedBits === 'number' && Array.isArray(arguments[2]) ? '\n\nDid you call array.map(useContext)? ' + 'Calling Hooks inside a loop is not supported. ' + 'Learn more at https://reactjs.org/link/rules-of-hooks' : ''); 65550 } // TODO: add a more generic warning for invalid values. 65551 65552 65553 if (Context._context !== undefined) { 65554 var realContext = Context._context; // Don't deduplicate because this legitimately causes bugs 65555 // and nobody should be using this in existing code. 65556 65557 if (realContext.Consumer === Context) { 65558 error('Calling useContext(Context.Consumer) is not supported, may cause bugs, and will be ' + 'removed in a future major release. Did you mean to call useContext(Context) instead?'); 65559 } else if (realContext.Provider === Context) { 65560 error('Calling useContext(Context.Provider) is not supported. ' + 'Did you mean to call useContext(Context) instead?'); 65561 } 65562 } 65563 } 65564 65565 return dispatcher.useContext(Context, unstable_observedBits); 65566} 65567function useState(initialState) { 65568 var dispatcher = resolveDispatcher(); 65569 return dispatcher.useState(initialState); 65570} 65571function useReducer(reducer, initialArg, init) { 65572 var dispatcher = resolveDispatcher(); 65573 return dispatcher.useReducer(reducer, initialArg, init); 65574} 65575function useRef(initialValue) { 65576 var dispatcher = resolveDispatcher(); 65577 return dispatcher.useRef(initialValue); 65578} 65579function useEffect(create, deps) { 65580 var dispatcher = resolveDispatcher(); 65581 return dispatcher.useEffect(create, deps); 65582} 65583function useLayoutEffect(create, deps) { 65584 var dispatcher = resolveDispatcher(); 65585 return dispatcher.useLayoutEffect(create, deps); 65586} 65587function useCallback(callback, deps) { 65588 var dispatcher = resolveDispatcher(); 65589 return dispatcher.useCallback(callback, deps); 65590} 65591function useMemo(create, deps) { 65592 var dispatcher = resolveDispatcher(); 65593 return dispatcher.useMemo(create, deps); 65594} 65595function useImperativeHandle(ref, create, deps) { 65596 var dispatcher = resolveDispatcher(); 65597 return dispatcher.useImperativeHandle(ref, create, deps); 65598} 65599function useDebugValue(value, formatterFn) { 65600 { 65601 var dispatcher = resolveDispatcher(); 65602 return dispatcher.useDebugValue(value, formatterFn); 65603 } 65604} 65605 65606// Helpers to patch console.logs to avoid logging during side-effect free 65607// replaying on render function. This currently only patches the object 65608// lazily which won't cover if the log function was extracted eagerly. 65609// We could also eagerly patch the method. 65610var disabledDepth = 0; 65611var prevLog; 65612var prevInfo; 65613var prevWarn; 65614var prevError; 65615var prevGroup; 65616var prevGroupCollapsed; 65617var prevGroupEnd; 65618 65619function disabledLog() {} 65620 65621disabledLog.__reactDisabledLog = true; 65622function disableLogs() { 65623 { 65624 if (disabledDepth === 0) { 65625 /* eslint-disable react-internal/no-production-logging */ 65626 prevLog = console.log; 65627 prevInfo = console.info; 65628 prevWarn = console.warn; 65629 prevError = console.error; 65630 prevGroup = console.group; 65631 prevGroupCollapsed = console.groupCollapsed; 65632 prevGroupEnd = console.groupEnd; // https://github.com/facebook/react/issues/19099 65633 65634 var props = { 65635 configurable: true, 65636 enumerable: true, 65637 value: disabledLog, 65638 writable: true 65639 }; // $FlowFixMe Flow thinks console is immutable. 65640 65641 Object.defineProperties(console, { 65642 info: props, 65643 log: props, 65644 warn: props, 65645 error: props, 65646 group: props, 65647 groupCollapsed: props, 65648 groupEnd: props 65649 }); 65650 /* eslint-enable react-internal/no-production-logging */ 65651 } 65652 65653 disabledDepth++; 65654 } 65655} 65656function reenableLogs() { 65657 { 65658 disabledDepth--; 65659 65660 if (disabledDepth === 0) { 65661 /* eslint-disable react-internal/no-production-logging */ 65662 var props = { 65663 configurable: true, 65664 enumerable: true, 65665 writable: true 65666 }; // $FlowFixMe Flow thinks console is immutable. 65667 65668 Object.defineProperties(console, { 65669 log: _assign({}, props, { 65670 value: prevLog 65671 }), 65672 info: _assign({}, props, { 65673 value: prevInfo 65674 }), 65675 warn: _assign({}, props, { 65676 value: prevWarn 65677 }), 65678 error: _assign({}, props, { 65679 value: prevError 65680 }), 65681 group: _assign({}, props, { 65682 value: prevGroup 65683 }), 65684 groupCollapsed: _assign({}, props, { 65685 value: prevGroupCollapsed 65686 }), 65687 groupEnd: _assign({}, props, { 65688 value: prevGroupEnd 65689 }) 65690 }); 65691 /* eslint-enable react-internal/no-production-logging */ 65692 } 65693 65694 if (disabledDepth < 0) { 65695 error('disabledDepth fell below zero. ' + 'This is a bug in React. Please file an issue.'); 65696 } 65697 } 65698} 65699 65700var ReactCurrentDispatcher$1 = ReactSharedInternals.ReactCurrentDispatcher; 65701var prefix; 65702function describeBuiltInComponentFrame(name, source, ownerFn) { 65703 { 65704 if (prefix === undefined) { 65705 // Extract the VM specific prefix used by each line. 65706 try { 65707 throw Error(); 65708 } catch (x) { 65709 var match = x.stack.trim().match(/\n( *(at )?)/); 65710 prefix = match && match[1] || ''; 65711 } 65712 } // We use the prefix to ensure our stacks line up with native stack frames. 65713 65714 65715 return '\n' + prefix + name; 65716 } 65717} 65718var reentry = false; 65719var componentFrameCache; 65720 65721{ 65722 var PossiblyWeakMap = typeof WeakMap === 'function' ? WeakMap : Map; 65723 componentFrameCache = new PossiblyWeakMap(); 65724} 65725 65726function describeNativeComponentFrame(fn, construct) { 65727 // If something asked for a stack inside a fake render, it should get ignored. 65728 if (!fn || reentry) { 65729 return ''; 65730 } 65731 65732 { 65733 var frame = componentFrameCache.get(fn); 65734 65735 if (frame !== undefined) { 65736 return frame; 65737 } 65738 } 65739 65740 var control; 65741 reentry = true; 65742 var previousPrepareStackTrace = Error.prepareStackTrace; // $FlowFixMe It does accept undefined. 65743 65744 Error.prepareStackTrace = undefined; 65745 var previousDispatcher; 65746 65747 { 65748 previousDispatcher = ReactCurrentDispatcher$1.current; // Set the dispatcher in DEV because this might be call in the render function 65749 // for warnings. 65750 65751 ReactCurrentDispatcher$1.current = null; 65752 disableLogs(); 65753 } 65754 65755 try { 65756 // This should throw. 65757 if (construct) { 65758 // Something should be setting the props in the constructor. 65759 var Fake = function () { 65760 throw Error(); 65761 }; // $FlowFixMe 65762 65763 65764 Object.defineProperty(Fake.prototype, 'props', { 65765 set: function () { 65766 // We use a throwing setter instead of frozen or non-writable props 65767 // because that won't throw in a non-strict mode function. 65768 throw Error(); 65769 } 65770 }); 65771 65772 if (typeof Reflect === 'object' && Reflect.construct) { 65773 // We construct a different control for this case to include any extra 65774 // frames added by the construct call. 65775 try { 65776 Reflect.construct(Fake, []); 65777 } catch (x) { 65778 control = x; 65779 } 65780 65781 Reflect.construct(fn, [], Fake); 65782 } else { 65783 try { 65784 Fake.call(); 65785 } catch (x) { 65786 control = x; 65787 } 65788 65789 fn.call(Fake.prototype); 65790 } 65791 } else { 65792 try { 65793 throw Error(); 65794 } catch (x) { 65795 control = x; 65796 } 65797 65798 fn(); 65799 } 65800 } catch (sample) { 65801 // This is inlined manually because closure doesn't do it for us. 65802 if (sample && control && typeof sample.stack === 'string') { 65803 // This extracts the first frame from the sample that isn't also in the control. 65804 // Skipping one frame that we assume is the frame that calls the two. 65805 var sampleLines = sample.stack.split('\n'); 65806 var controlLines = control.stack.split('\n'); 65807 var s = sampleLines.length - 1; 65808 var c = controlLines.length - 1; 65809 65810 while (s >= 1 && c >= 0 && sampleLines[s] !== controlLines[c]) { 65811 // We expect at least one stack frame to be shared. 65812 // Typically this will be the root most one. However, stack frames may be 65813 // cut off due to maximum stack limits. In this case, one maybe cut off 65814 // earlier than the other. We assume that the sample is longer or the same 65815 // and there for cut off earlier. So we should find the root most frame in 65816 // the sample somewhere in the control. 65817 c--; 65818 } 65819 65820 for (; s >= 1 && c >= 0; s--, c--) { 65821 // Next we find the first one that isn't the same which should be the 65822 // frame that called our sample function and the control. 65823 if (sampleLines[s] !== controlLines[c]) { 65824 // In V8, the first line is describing the message but other VMs don't. 65825 // If we're about to return the first line, and the control is also on the same 65826 // line, that's a pretty good indicator that our sample threw at same line as 65827 // the control. I.e. before we entered the sample frame. So we ignore this result. 65828 // This can happen if you passed a class to function component, or non-function. 65829 if (s !== 1 || c !== 1) { 65830 do { 65831 s--; 65832 c--; // We may still have similar intermediate frames from the construct call. 65833 // The next one that isn't the same should be our match though. 65834 65835 if (c < 0 || sampleLines[s] !== controlLines[c]) { 65836 // V8 adds a "new" prefix for native classes. Let's remove it to make it prettier. 65837 var _frame = '\n' + sampleLines[s].replace(' at new ', ' at '); 65838 65839 { 65840 if (typeof fn === 'function') { 65841 componentFrameCache.set(fn, _frame); 65842 } 65843 } // Return the line we found. 65844 65845 65846 return _frame; 65847 } 65848 } while (s >= 1 && c >= 0); 65849 } 65850 65851 break; 65852 } 65853 } 65854 } 65855 } finally { 65856 reentry = false; 65857 65858 { 65859 ReactCurrentDispatcher$1.current = previousDispatcher; 65860 reenableLogs(); 65861 } 65862 65863 Error.prepareStackTrace = previousPrepareStackTrace; 65864 } // Fallback to just using the name if we couldn't make it throw. 65865 65866 65867 var name = fn ? fn.displayName || fn.name : ''; 65868 var syntheticFrame = name ? describeBuiltInComponentFrame(name) : ''; 65869 65870 { 65871 if (typeof fn === 'function') { 65872 componentFrameCache.set(fn, syntheticFrame); 65873 } 65874 } 65875 65876 return syntheticFrame; 65877} 65878function describeFunctionComponentFrame(fn, source, ownerFn) { 65879 { 65880 return describeNativeComponentFrame(fn, false); 65881 } 65882} 65883 65884function shouldConstruct(Component) { 65885 var prototype = Component.prototype; 65886 return !!(prototype && prototype.isReactComponent); 65887} 65888 65889function describeUnknownElementTypeFrameInDEV(type, source, ownerFn) { 65890 65891 if (type == null) { 65892 return ''; 65893 } 65894 65895 if (typeof type === 'function') { 65896 { 65897 return describeNativeComponentFrame(type, shouldConstruct(type)); 65898 } 65899 } 65900 65901 if (typeof type === 'string') { 65902 return describeBuiltInComponentFrame(type); 65903 } 65904 65905 switch (type) { 65906 case exports.Suspense: 65907 return describeBuiltInComponentFrame('Suspense'); 65908 65909 case REACT_SUSPENSE_LIST_TYPE: 65910 return describeBuiltInComponentFrame('SuspenseList'); 65911 } 65912 65913 if (typeof type === 'object') { 65914 switch (type.$$typeof) { 65915 case REACT_FORWARD_REF_TYPE: 65916 return describeFunctionComponentFrame(type.render); 65917 65918 case REACT_MEMO_TYPE: 65919 // Memo may contain any component type so we recursively resolve it. 65920 return describeUnknownElementTypeFrameInDEV(type.type, source, ownerFn); 65921 65922 case REACT_BLOCK_TYPE: 65923 return describeFunctionComponentFrame(type._render); 65924 65925 case REACT_LAZY_TYPE: 65926 { 65927 var lazyComponent = type; 65928 var payload = lazyComponent._payload; 65929 var init = lazyComponent._init; 65930 65931 try { 65932 // Lazy may contain any component type so we recursively resolve it. 65933 return describeUnknownElementTypeFrameInDEV(init(payload), source, ownerFn); 65934 } catch (x) {} 65935 } 65936 } 65937 } 65938 65939 return ''; 65940} 65941 65942var loggedTypeFailures = {}; 65943var ReactDebugCurrentFrame$1 = ReactSharedInternals.ReactDebugCurrentFrame; 65944 65945function setCurrentlyValidatingElement(element) { 65946 { 65947 if (element) { 65948 var owner = element._owner; 65949 var stack = describeUnknownElementTypeFrameInDEV(element.type, element._source, owner ? owner.type : null); 65950 ReactDebugCurrentFrame$1.setExtraStackFrame(stack); 65951 } else { 65952 ReactDebugCurrentFrame$1.setExtraStackFrame(null); 65953 } 65954 } 65955} 65956 65957function checkPropTypes(typeSpecs, values, location, componentName, element) { 65958 { 65959 // $FlowFixMe This is okay but Flow doesn't know it. 65960 var has = Function.call.bind(Object.prototype.hasOwnProperty); 65961 65962 for (var typeSpecName in typeSpecs) { 65963 if (has(typeSpecs, typeSpecName)) { 65964 var error$1 = void 0; // Prop type validation may throw. In case they do, we don't want to 65965 // fail the render phase where it didn't fail before. So we log it. 65966 // After these have been cleaned up, we'll let them throw. 65967 65968 try { 65969 // This is intentionally an invariant that gets caught. It's the same 65970 // behavior as without this statement except with a better message. 65971 if (typeof typeSpecs[typeSpecName] !== 'function') { 65972 var err = Error((componentName || 'React class') + ': ' + location + ' type `' + typeSpecName + '` is invalid; ' + 'it must be a function, usually from the `prop-types` package, but received `' + typeof typeSpecs[typeSpecName] + '`.' + 'This often happens because of typos such as `PropTypes.function` instead of `PropTypes.func`.'); 65973 err.name = 'Invariant Violation'; 65974 throw err; 65975 } 65976 65977 error$1 = typeSpecs[typeSpecName](values, typeSpecName, componentName, location, null, 'SECRET_DO_NOT_PASS_THIS_OR_YOU_WILL_BE_FIRED'); 65978 } catch (ex) { 65979 error$1 = ex; 65980 } 65981 65982 if (error$1 && !(error$1 instanceof Error)) { 65983 setCurrentlyValidatingElement(element); 65984 65985 error('%s: type specification of %s' + ' `%s` is invalid; the type checker ' + 'function must return `null` or an `Error` but returned a %s. ' + 'You may have forgotten to pass an argument to the type checker ' + 'creator (arrayOf, instanceOf, objectOf, oneOf, oneOfType, and ' + 'shape all require an argument).', componentName || 'React class', location, typeSpecName, typeof error$1); 65986 65987 setCurrentlyValidatingElement(null); 65988 } 65989 65990 if (error$1 instanceof Error && !(error$1.message in loggedTypeFailures)) { 65991 // Only monitor this failure once because there tends to be a lot of the 65992 // same error. 65993 loggedTypeFailures[error$1.message] = true; 65994 setCurrentlyValidatingElement(element); 65995 65996 error('Failed %s type: %s', location, error$1.message); 65997 65998 setCurrentlyValidatingElement(null); 65999 } 66000 } 66001 } 66002 } 66003} 66004 66005function setCurrentlyValidatingElement$1(element) { 66006 { 66007 if (element) { 66008 var owner = element._owner; 66009 var stack = describeUnknownElementTypeFrameInDEV(element.type, element._source, owner ? owner.type : null); 66010 setExtraStackFrame(stack); 66011 } else { 66012 setExtraStackFrame(null); 66013 } 66014 } 66015} 66016 66017var propTypesMisspellWarningShown; 66018 66019{ 66020 propTypesMisspellWarningShown = false; 66021} 66022 66023function getDeclarationErrorAddendum() { 66024 if (ReactCurrentOwner.current) { 66025 var name = getComponentName(ReactCurrentOwner.current.type); 66026 66027 if (name) { 66028 return '\n\nCheck the render method of `' + name + '`.'; 66029 } 66030 } 66031 66032 return ''; 66033} 66034 66035function getSourceInfoErrorAddendum(source) { 66036 if (source !== undefined) { 66037 var fileName = source.fileName.replace(/^.*[\\\/]/, ''); 66038 var lineNumber = source.lineNumber; 66039 return '\n\nCheck your code at ' + fileName + ':' + lineNumber + '.'; 66040 } 66041 66042 return ''; 66043} 66044 66045function getSourceInfoErrorAddendumForProps(elementProps) { 66046 if (elementProps !== null && elementProps !== undefined) { 66047 return getSourceInfoErrorAddendum(elementProps.__source); 66048 } 66049 66050 return ''; 66051} 66052/** 66053 * Warn if there's no key explicitly set on dynamic arrays of children or 66054 * object keys are not valid. This allows us to keep track of children between 66055 * updates. 66056 */ 66057 66058 66059var ownerHasKeyUseWarning = {}; 66060 66061function getCurrentComponentErrorInfo(parentType) { 66062 var info = getDeclarationErrorAddendum(); 66063 66064 if (!info) { 66065 var parentName = typeof parentType === 'string' ? parentType : parentType.displayName || parentType.name; 66066 66067 if (parentName) { 66068 info = "\n\nCheck the top-level render call using <" + parentName + ">."; 66069 } 66070 } 66071 66072 return info; 66073} 66074/** 66075 * Warn if the element doesn't have an explicit key assigned to it. 66076 * This element is in an array. The array could grow and shrink or be 66077 * reordered. All children that haven't already been validated are required to 66078 * have a "key" property assigned to it. Error statuses are cached so a warning 66079 * will only be shown once. 66080 * 66081 * @internal 66082 * @param {ReactElement} element Element that requires a key. 66083 * @param {*} parentType element's parent's type. 66084 */ 66085 66086 66087function validateExplicitKey(element, parentType) { 66088 if (!element._store || element._store.validated || element.key != null) { 66089 return; 66090 } 66091 66092 element._store.validated = true; 66093 var currentComponentErrorInfo = getCurrentComponentErrorInfo(parentType); 66094 66095 if (ownerHasKeyUseWarning[currentComponentErrorInfo]) { 66096 return; 66097 } 66098 66099 ownerHasKeyUseWarning[currentComponentErrorInfo] = true; // Usually the current owner is the offender, but if it accepts children as a 66100 // property, it may be the creator of the child that's responsible for 66101 // assigning it a key. 66102 66103 var childOwner = ''; 66104 66105 if (element && element._owner && element._owner !== ReactCurrentOwner.current) { 66106 // Give the component that originally created this child. 66107 childOwner = " It was passed a child from " + getComponentName(element._owner.type) + "."; 66108 } 66109 66110 { 66111 setCurrentlyValidatingElement$1(element); 66112 66113 error('Each child in a list should have a unique "key" prop.' + '%s%s See https://reactjs.org/link/warning-keys for more information.', currentComponentErrorInfo, childOwner); 66114 66115 setCurrentlyValidatingElement$1(null); 66116 } 66117} 66118/** 66119 * Ensure that every element either is passed in a static location, in an 66120 * array with an explicit keys property defined, or in an object literal 66121 * with valid key property. 66122 * 66123 * @internal 66124 * @param {ReactNode} node Statically passed child of any type. 66125 * @param {*} parentType node's parent's type. 66126 */ 66127 66128 66129function validateChildKeys(node, parentType) { 66130 if (typeof node !== 'object') { 66131 return; 66132 } 66133 66134 if (Array.isArray(node)) { 66135 for (var i = 0; i < node.length; i++) { 66136 var child = node[i]; 66137 66138 if (isValidElement(child)) { 66139 validateExplicitKey(child, parentType); 66140 } 66141 } 66142 } else if (isValidElement(node)) { 66143 // This element was passed in a valid location. 66144 if (node._store) { 66145 node._store.validated = true; 66146 } 66147 } else if (node) { 66148 var iteratorFn = getIteratorFn(node); 66149 66150 if (typeof iteratorFn === 'function') { 66151 // Entry iterators used to provide implicit keys, 66152 // but now we print a separate warning for them later. 66153 if (iteratorFn !== node.entries) { 66154 var iterator = iteratorFn.call(node); 66155 var step; 66156 66157 while (!(step = iterator.next()).done) { 66158 if (isValidElement(step.value)) { 66159 validateExplicitKey(step.value, parentType); 66160 } 66161 } 66162 } 66163 } 66164 } 66165} 66166/** 66167 * Given an element, validate that its props follow the propTypes definition, 66168 * provided by the type. 66169 * 66170 * @param {ReactElement} element 66171 */ 66172 66173 66174function validatePropTypes(element) { 66175 { 66176 var type = element.type; 66177 66178 if (type === null || type === undefined || typeof type === 'string') { 66179 return; 66180 } 66181 66182 var propTypes; 66183 66184 if (typeof type === 'function') { 66185 propTypes = type.propTypes; 66186 } else if (typeof type === 'object' && (type.$$typeof === REACT_FORWARD_REF_TYPE || // Note: Memo only checks outer props here. 66187 // Inner props are checked in the reconciler. 66188 type.$$typeof === REACT_MEMO_TYPE)) { 66189 propTypes = type.propTypes; 66190 } else { 66191 return; 66192 } 66193 66194 if (propTypes) { 66195 // Intentionally inside to avoid triggering lazy initializers: 66196 var name = getComponentName(type); 66197 checkPropTypes(propTypes, element.props, 'prop', name, element); 66198 } else if (type.PropTypes !== undefined && !propTypesMisspellWarningShown) { 66199 propTypesMisspellWarningShown = true; // Intentionally inside to avoid triggering lazy initializers: 66200 66201 var _name = getComponentName(type); 66202 66203 error('Component %s declared `PropTypes` instead of `propTypes`. Did you misspell the property assignment?', _name || 'Unknown'); 66204 } 66205 66206 if (typeof type.getDefaultProps === 'function' && !type.getDefaultProps.isReactClassApproved) { 66207 error('getDefaultProps is only used on classic React.createClass ' + 'definitions. Use a static property named `defaultProps` instead.'); 66208 } 66209 } 66210} 66211/** 66212 * Given a fragment, validate that it can only be provided with fragment props 66213 * @param {ReactElement} fragment 66214 */ 66215 66216 66217function validateFragmentProps(fragment) { 66218 { 66219 var keys = Object.keys(fragment.props); 66220 66221 for (var i = 0; i < keys.length; i++) { 66222 var key = keys[i]; 66223 66224 if (key !== 'children' && key !== 'key') { 66225 setCurrentlyValidatingElement$1(fragment); 66226 66227 error('Invalid prop `%s` supplied to `React.Fragment`. ' + 'React.Fragment can only have `key` and `children` props.', key); 66228 66229 setCurrentlyValidatingElement$1(null); 66230 break; 66231 } 66232 } 66233 66234 if (fragment.ref !== null) { 66235 setCurrentlyValidatingElement$1(fragment); 66236 66237 error('Invalid attribute `ref` supplied to `React.Fragment`.'); 66238 66239 setCurrentlyValidatingElement$1(null); 66240 } 66241 } 66242} 66243function createElementWithValidation(type, props, children) { 66244 var validType = isValidElementType(type); // We warn in this case but don't throw. We expect the element creation to 66245 // succeed and there will likely be errors in render. 66246 66247 if (!validType) { 66248 var info = ''; 66249 66250 if (type === undefined || typeof type === 'object' && type !== null && Object.keys(type).length === 0) { 66251 info += ' You likely forgot to export your component from the file ' + "it's defined in, or you might have mixed up default and named imports."; 66252 } 66253 66254 var sourceInfo = getSourceInfoErrorAddendumForProps(props); 66255 66256 if (sourceInfo) { 66257 info += sourceInfo; 66258 } else { 66259 info += getDeclarationErrorAddendum(); 66260 } 66261 66262 var typeString; 66263 66264 if (type === null) { 66265 typeString = 'null'; 66266 } else if (Array.isArray(type)) { 66267 typeString = 'array'; 66268 } else if (type !== undefined && type.$$typeof === REACT_ELEMENT_TYPE) { 66269 typeString = "<" + (getComponentName(type.type) || 'Unknown') + " />"; 66270 info = ' Did you accidentally export a JSX literal instead of a component?'; 66271 } else { 66272 typeString = typeof type; 66273 } 66274 66275 { 66276 error('React.createElement: type is invalid -- expected a string (for ' + 'built-in components) or a class/function (for composite ' + 'components) but got: %s.%s', typeString, info); 66277 } 66278 } 66279 66280 var element = createElement.apply(this, arguments); // The result can be nullish if a mock or a custom function is used. 66281 // TODO: Drop this when these are no longer allowed as the type argument. 66282 66283 if (element == null) { 66284 return element; 66285 } // Skip key warning if the type isn't valid since our key validation logic 66286 // doesn't expect a non-string/function type and can throw confusing errors. 66287 // We don't want exception behavior to differ between dev and prod. 66288 // (Rendering will throw with a helpful message and as soon as the type is 66289 // fixed, the key warnings will appear.) 66290 66291 66292 if (validType) { 66293 for (var i = 2; i < arguments.length; i++) { 66294 validateChildKeys(arguments[i], type); 66295 } 66296 } 66297 66298 if (type === exports.Fragment) { 66299 validateFragmentProps(element); 66300 } else { 66301 validatePropTypes(element); 66302 } 66303 66304 return element; 66305} 66306var didWarnAboutDeprecatedCreateFactory = false; 66307function createFactoryWithValidation(type) { 66308 var validatedFactory = createElementWithValidation.bind(null, type); 66309 validatedFactory.type = type; 66310 66311 { 66312 if (!didWarnAboutDeprecatedCreateFactory) { 66313 didWarnAboutDeprecatedCreateFactory = true; 66314 66315 warn('React.createFactory() is deprecated and will be removed in ' + 'a future major release. Consider using JSX ' + 'or use React.createElement() directly instead.'); 66316 } // Legacy hook: remove it 66317 66318 66319 Object.defineProperty(validatedFactory, 'type', { 66320 enumerable: false, 66321 get: function () { 66322 warn('Factory.type is deprecated. Access the class directly ' + 'before passing it to createFactory.'); 66323 66324 Object.defineProperty(this, 'type', { 66325 value: type 66326 }); 66327 return type; 66328 } 66329 }); 66330 } 66331 66332 return validatedFactory; 66333} 66334function cloneElementWithValidation(element, props, children) { 66335 var newElement = cloneElement.apply(this, arguments); 66336 66337 for (var i = 2; i < arguments.length; i++) { 66338 validateChildKeys(arguments[i], newElement.type); 66339 } 66340 66341 validatePropTypes(newElement); 66342 return newElement; 66343} 66344 66345{ 66346 66347 try { 66348 var frozenObject = Object.freeze({}); 66349 /* eslint-disable no-new */ 66350 66351 new Map([[frozenObject, null]]); 66352 new Set([frozenObject]); 66353 /* eslint-enable no-new */ 66354 } catch (e) { 66355 } 66356} 66357 66358var createElement$1 = createElementWithValidation ; 66359var cloneElement$1 = cloneElementWithValidation ; 66360var createFactory = createFactoryWithValidation ; 66361var Children = { 66362 map: mapChildren, 66363 forEach: forEachChildren, 66364 count: countChildren, 66365 toArray: toArray, 66366 only: onlyChild 66367}; 66368 66369exports.Children = Children; 66370exports.Component = Component; 66371exports.PureComponent = PureComponent; 66372exports.__SECRET_INTERNALS_DO_NOT_USE_OR_YOU_WILL_BE_FIRED = ReactSharedInternals; 66373exports.cloneElement = cloneElement$1; 66374exports.createContext = createContext; 66375exports.createElement = createElement$1; 66376exports.createFactory = createFactory; 66377exports.createRef = createRef; 66378exports.forwardRef = forwardRef; 66379exports.isValidElement = isValidElement; 66380exports.lazy = lazy; 66381exports.memo = memo; 66382exports.useCallback = useCallback; 66383exports.useContext = useContext; 66384exports.useDebugValue = useDebugValue; 66385exports.useEffect = useEffect; 66386exports.useImperativeHandle = useImperativeHandle; 66387exports.useLayoutEffect = useLayoutEffect; 66388exports.useMemo = useMemo; 66389exports.useReducer = useReducer; 66390exports.useRef = useRef; 66391exports.useState = useState; 66392exports.version = ReactVersion; 66393 })(); 66394} 66395 66396 66397/***/ }), 66398
vendor: 411 bytes, lines 66399-66414
66399/***/ "./node_modules/react/index.js": 66400/*!*************************************!*\ 66401 !*** ./node_modules/react/index.js ***! 66402 \*************************************/ 66403/***/ ((module, __unused_webpack_exports, __webpack_require__) => { 66404 66405"use strict"; 66406 66407 66408if (false) {} else { 66409 module.exports = __webpack_require__(/*! ./cjs/react.development.js */ "./node_modules/react/cjs/react.development.js"); 66410} 66411 66412 66413/***/ }), 66414
vendor: 9,325 bytes, lines 66415-66772
66415/***/ "./node_modules/scheduler/cjs/scheduler-tracing.development.js": 66416/*!*********************************************************************!*\ 66417 !*** ./node_modules/scheduler/cjs/scheduler-tracing.development.js ***! 66418 \*********************************************************************/ 66419/***/ ((__unused_webpack_module, exports) => { 66420 66421"use strict"; 66422/** @license React v0.20.2 66423 * scheduler-tracing.development.js 66424 * 66425 * Copyright (c) Facebook, Inc. and its affiliates. 66426 * 66427 * This source code is licensed under the MIT license found in the 66428 * LICENSE file in the root directory of this source tree. 66429 */ 66430 66431 66432 66433if (true) { 66434 (function() { 66435'use strict'; 66436 66437var DEFAULT_THREAD_ID = 0; // Counters used to generate unique IDs. 66438 66439var interactionIDCounter = 0; 66440var threadIDCounter = 0; // Set of currently traced interactions. 66441// Interactions "stack"â 66442// Meaning that newly traced interactions are appended to the previously active set. 66443// When an interaction goes out of scope, the previous set (if any) is restored. 66444 66445exports.__interactionsRef = null; // Listener(s) to notify when interactions begin and end. 66446 66447exports.__subscriberRef = null; 66448 66449{ 66450 exports.__interactionsRef = { 66451 current: new Set() 66452 }; 66453 exports.__subscriberRef = { 66454 current: null 66455 }; 66456} 66457function unstable_clear(callback) { 66458 66459 var prevInteractions = exports.__interactionsRef.current; 66460 exports.__interactionsRef.current = new Set(); 66461 66462 try { 66463 return callback(); 66464 } finally { 66465 exports.__interactionsRef.current = prevInteractions; 66466 } 66467} 66468function unstable_getCurrent() { 66469 { 66470 return exports.__interactionsRef.current; 66471 } 66472} 66473function unstable_getThreadID() { 66474 return ++threadIDCounter; 66475} 66476function unstable_trace(name, timestamp, callback) { 66477 var threadID = arguments.length > 3 && arguments[3] !== undefined ? arguments[3] : DEFAULT_THREAD_ID; 66478 66479 var interaction = { 66480 __count: 1, 66481 id: interactionIDCounter++, 66482 name: name, 66483 timestamp: timestamp 66484 }; 66485 var prevInteractions = exports.__interactionsRef.current; // Traced interactions should stack/accumulate. 66486 // To do that, clone the current interactions. 66487 // The previous set will be restored upon completion. 66488 66489 var interactions = new Set(prevInteractions); 66490 interactions.add(interaction); 66491 exports.__interactionsRef.current = interactions; 66492 var subscriber = exports.__subscriberRef.current; 66493 var returnValue; 66494 66495 try { 66496 if (subscriber !== null) { 66497 subscriber.onInteractionTraced(interaction); 66498 } 66499 } finally { 66500 try { 66501 if (subscriber !== null) { 66502 subscriber.onWorkStarted(interactions, threadID); 66503 } 66504 } finally { 66505 try { 66506 returnValue = callback(); 66507 } finally { 66508 exports.__interactionsRef.current = prevInteractions; 66509 66510 try { 66511 if (subscriber !== null) { 66512 subscriber.onWorkStopped(interactions, threadID); 66513 } 66514 } finally { 66515 interaction.__count--; // If no async work was scheduled for this interaction, 66516 // Notify subscribers that it's completed. 66517 66518 if (subscriber !== null && interaction.__count === 0) { 66519 subscriber.onInteractionScheduledWorkCompleted(interaction); 66520 } 66521 } 66522 } 66523 } 66524 } 66525 66526 return returnValue; 66527} 66528function unstable_wrap(callback) { 66529 var threadID = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : DEFAULT_THREAD_ID; 66530 66531 var wrappedInteractions = exports.__interactionsRef.current; 66532 var subscriber = exports.__subscriberRef.current; 66533 66534 if (subscriber !== null) { 66535 subscriber.onWorkScheduled(wrappedInteractions, threadID); 66536 } // Update the pending async work count for the current interactions. 66537 // Update after calling subscribers in case of error. 66538 66539 66540 wrappedInteractions.forEach(function (interaction) { 66541 interaction.__count++; 66542 }); 66543 var hasRun = false; 66544 66545 function wrapped() { 66546 var prevInteractions = exports.__interactionsRef.current; 66547 exports.__interactionsRef.current = wrappedInteractions; 66548 subscriber = exports.__subscriberRef.current; 66549 66550 try { 66551 var returnValue; 66552 66553 try { 66554 if (subscriber !== null) { 66555 subscriber.onWorkStarted(wrappedInteractions, threadID); 66556 } 66557 } finally { 66558 try { 66559 returnValue = callback.apply(undefined, arguments); 66560 } finally { 66561 exports.__interactionsRef.current = prevInteractions; 66562 66563 if (subscriber !== null) { 66564 subscriber.onWorkStopped(wrappedInteractions, threadID); 66565 } 66566 } 66567 } 66568 66569 return returnValue; 66570 } finally { 66571 if (!hasRun) { 66572 // We only expect a wrapped function to be executed once, 66573 // But in the event that it's executed more than onceâ 66574 // Only decrement the outstanding interaction counts once. 66575 hasRun = true; // Update pending async counts for all wrapped interactions. 66576 // If this was the last scheduled async work for any of them, 66577 // Mark them as completed. 66578 66579 wrappedInteractions.forEach(function (interaction) { 66580 interaction.__count--; 66581 66582 if (subscriber !== null && interaction.__count === 0) { 66583 subscriber.onInteractionScheduledWorkCompleted(interaction); 66584 } 66585 }); 66586 } 66587 } 66588 } 66589 66590 wrapped.cancel = function cancel() { 66591 subscriber = exports.__subscriberRef.current; 66592 66593 try { 66594 if (subscriber !== null) { 66595 subscriber.onWorkCanceled(wrappedInteractions, threadID); 66596 } 66597 } finally { 66598 // Update pending async counts for all wrapped interactions. 66599 // If this was the last scheduled async work for any of them, 66600 // Mark them as completed. 66601 wrappedInteractions.forEach(function (interaction) { 66602 interaction.__count--; 66603 66604 if (subscriber && interaction.__count === 0) { 66605 subscriber.onInteractionScheduledWorkCompleted(interaction); 66606 } 66607 }); 66608 } 66609 }; 66610 66611 return wrapped; 66612} 66613 66614var subscribers = null; 66615 66616{ 66617 subscribers = new Set(); 66618} 66619 66620function unstable_subscribe(subscriber) { 66621 { 66622 subscribers.add(subscriber); 66623 66624 if (subscribers.size === 1) { 66625 exports.__subscriberRef.current = { 66626 onInteractionScheduledWorkCompleted: onInteractionScheduledWorkCompleted, 66627 onInteractionTraced: onInteractionTraced, 66628 onWorkCanceled: onWorkCanceled, 66629 onWorkScheduled: onWorkScheduled, 66630 onWorkStarted: onWorkStarted, 66631 onWorkStopped: onWorkStopped 66632 }; 66633 } 66634 } 66635} 66636function unstable_unsubscribe(subscriber) { 66637 { 66638 subscribers.delete(subscriber); 66639 66640 if (subscribers.size === 0) { 66641 exports.__subscriberRef.current = null; 66642 } 66643 } 66644} 66645 66646function onInteractionTraced(interaction) { 66647 var didCatchError = false; 66648 var caughtError = null; 66649 subscribers.forEach(function (subscriber) { 66650 try { 66651 subscriber.onInteractionTraced(interaction); 66652 } catch (error) { 66653 if (!didCatchError) { 66654 didCatchError = true; 66655 caughtError = error; 66656 } 66657 } 66658 }); 66659 66660 if (didCatchError) { 66661 throw caughtError; 66662 } 66663} 66664 66665function onInteractionScheduledWorkCompleted(interaction) { 66666 var didCatchError = false; 66667 var caughtError = null; 66668 subscribers.forEach(function (subscriber) { 66669 try { 66670 subscriber.onInteractionScheduledWorkCompleted(interaction); 66671 } catch (error) { 66672 if (!didCatchError) { 66673 didCatchError = true; 66674 caughtError = error; 66675 } 66676 } 66677 }); 66678 66679 if (didCatchError) { 66680 throw caughtError; 66681 } 66682} 66683 66684function onWorkScheduled(interactions, threadID) { 66685 var didCatchError = false; 66686 var caughtError = null; 66687 subscribers.forEach(function (subscriber) { 66688 try { 66689 subscriber.onWorkScheduled(interactions, threadID); 66690 } catch (error) { 66691 if (!didCatchError) { 66692 didCatchError = true; 66693 caughtError = error; 66694 } 66695 } 66696 }); 66697 66698 if (didCatchError) { 66699 throw caughtError; 66700 } 66701} 66702 66703function onWorkStarted(interactions, threadID) { 66704 var didCatchError = false; 66705 var caughtError = null; 66706 subscribers.forEach(function (subscriber) { 66707 try { 66708 subscriber.onWorkStarted(interactions, threadID); 66709 } catch (error) { 66710 if (!didCatchError) { 66711 didCatchError = true; 66712 caughtError = error; 66713 } 66714 } 66715 }); 66716 66717 if (didCatchError) { 66718 throw caughtError; 66719 } 66720} 66721 66722function onWorkStopped(interactions, threadID) { 66723 var didCatchError = false; 66724 var caughtError = null; 66725 subscribers.forEach(function (subscriber) { 66726 try { 66727 subscriber.onWorkStopped(interactions, threadID); 66728 } catch (error) { 66729 if (!didCatchError) { 66730 didCatchError = true; 66731 caughtError = error; 66732 } 66733 } 66734 }); 66735 66736 if (didCatchError) { 66737 throw caughtError; 66738 } 66739} 66740 66741function onWorkCanceled(interactions, threadID) { 66742 var didCatchError = false; 66743 var caughtError = null; 66744 subscribers.forEach(function (subscriber) { 66745 try { 66746 subscriber.onWorkCanceled(interactions, threadID); 66747 } catch (error) { 66748 if (!didCatchError) { 66749 didCatchError = true; 66750 caughtError = error; 66751 } 66752 } 66753 }); 66754 66755 if (didCatchError) { 66756 throw caughtError; 66757 } 66758} 66759 66760exports.unstable_clear = unstable_clear; 66761exports.unstable_getCurrent = unstable_getCurrent; 66762exports.unstable_getThreadID = unstable_getThreadID; 66763exports.unstable_subscribe = unstable_subscribe; 66764exports.unstable_trace = unstable_trace; 66765exports.unstable_unsubscribe = unstable_unsubscribe; 66766exports.unstable_wrap = unstable_wrap; 66767 })(); 66768} 66769 66770 66771/***/ }), 66772
vendor: 17,855 bytes, lines 66773-67429
66773/***/ "./node_modules/scheduler/cjs/scheduler.development.js": 66774/*!*************************************************************!*\ 66775 !*** ./node_modules/scheduler/cjs/scheduler.development.js ***! 66776 \*************************************************************/ 66777/***/ ((__unused_webpack_module, exports) => { 66778 66779"use strict"; 66780/** @license React v0.20.2 66781 * scheduler.development.js 66782 * 66783 * Copyright (c) Facebook, Inc. and its affiliates. 66784 * 66785 * This source code is licensed under the MIT license found in the 66786 * LICENSE file in the root directory of this source tree. 66787 */ 66788 66789 66790 66791if (true) { 66792 (function() { 66793'use strict'; 66794 66795var enableSchedulerDebugging = false; 66796var enableProfiling = false; 66797 66798var requestHostCallback; 66799var requestHostTimeout; 66800var cancelHostTimeout; 66801var requestPaint; 66802var hasPerformanceNow = typeof performance === 'object' && typeof performance.now === 'function'; 66803 66804if (hasPerformanceNow) { 66805 var localPerformance = performance; 66806 66807 exports.unstable_now = function () { 66808 return localPerformance.now(); 66809 }; 66810} else { 66811 var localDate = Date; 66812 var initialTime = localDate.now(); 66813 66814 exports.unstable_now = function () { 66815 return localDate.now() - initialTime; 66816 }; 66817} 66818 66819if ( // If Scheduler runs in a non-DOM environment, it falls back to a naive 66820// implementation using setTimeout. 66821typeof window === 'undefined' || // Check if MessageChannel is supported, too. 66822typeof MessageChannel !== 'function') { 66823 // If this accidentally gets imported in a non-browser environment, e.g. JavaScriptCore, 66824 // fallback to a naive implementation. 66825 var _callback = null; 66826 var _timeoutID = null; 66827 66828 var _flushCallback = function () { 66829 if (_callback !== null) { 66830 try { 66831 var currentTime = exports.unstable_now(); 66832 var hasRemainingTime = true; 66833 66834 _callback(hasRemainingTime, currentTime); 66835 66836 _callback = null; 66837 } catch (e) { 66838 setTimeout(_flushCallback, 0); 66839 throw e; 66840 } 66841 } 66842 }; 66843 66844 requestHostCallback = function (cb) { 66845 if (_callback !== null) { 66846 // Protect against re-entrancy. 66847 setTimeout(requestHostCallback, 0, cb); 66848 } else { 66849 _callback = cb; 66850 setTimeout(_flushCallback, 0); 66851 } 66852 }; 66853 66854 requestHostTimeout = function (cb, ms) { 66855 _timeoutID = setTimeout(cb, ms); 66856 }; 66857 66858 cancelHostTimeout = function () { 66859 clearTimeout(_timeoutID); 66860 }; 66861 66862 exports.unstable_shouldYield = function () { 66863 return false; 66864 }; 66865 66866 requestPaint = exports.unstable_forceFrameRate = function () {}; 66867} else { 66868 // Capture local references to native APIs, in case a polyfill overrides them. 66869 var _setTimeout = window.setTimeout; 66870 var _clearTimeout = window.clearTimeout; 66871 66872 if (typeof console !== 'undefined') { 66873 // TODO: Scheduler no longer requires these methods to be polyfilled. But 66874 // maybe we want to continue warning if they don't exist, to preserve the 66875 // option to rely on it in the future? 66876 var requestAnimationFrame = window.requestAnimationFrame; 66877 var cancelAnimationFrame = window.cancelAnimationFrame; 66878 66879 if (typeof requestAnimationFrame !== 'function') { 66880 // Using console['error'] to evade Babel and ESLint 66881 console['error']("This browser doesn't support requestAnimationFrame. " + 'Make sure that you load a ' + 'polyfill in older browsers. https://reactjs.org/link/react-polyfills'); 66882 } 66883 66884 if (typeof cancelAnimationFrame !== 'function') { 66885 // Using console['error'] to evade Babel and ESLint 66886 console['error']("This browser doesn't support cancelAnimationFrame. " + 'Make sure that you load a ' + 'polyfill in older browsers. https://reactjs.org/link/react-polyfills'); 66887 } 66888 } 66889 66890 var isMessageLoopRunning = false; 66891 var scheduledHostCallback = null; 66892 var taskTimeoutID = -1; // Scheduler periodically yields in case there is other work on the main 66893 // thread, like user events. By default, it yields multiple times per frame. 66894 // It does not attempt to align with frame boundaries, since most tasks don't 66895 // need to be frame aligned; for those that do, use requestAnimationFrame. 66896 66897 var yieldInterval = 5; 66898 var deadline = 0; // TODO: Make this configurable 66899 66900 { 66901 // `isInputPending` is not available. Since we have no way of knowing if 66902 // there's pending input, always yield at the end of the frame. 66903 exports.unstable_shouldYield = function () { 66904 return exports.unstable_now() >= deadline; 66905 }; // Since we yield every frame regardless, `requestPaint` has no effect. 66906 66907 66908 requestPaint = function () {}; 66909 } 66910 66911 exports.unstable_forceFrameRate = function (fps) { 66912 if (fps < 0 || fps > 125) { 66913 // Using console['error'] to evade Babel and ESLint 66914 console['error']('forceFrameRate takes a positive int between 0 and 125, ' + 'forcing frame rates higher than 125 fps is not supported'); 66915 return; 66916 } 66917 66918 if (fps > 0) { 66919 yieldInterval = Math.floor(1000 / fps); 66920 } else { 66921 // reset the framerate 66922 yieldInterval = 5; 66923 } 66924 }; 66925 66926 var performWorkUntilDeadline = function () { 66927 if (scheduledHostCallback !== null) { 66928 var currentTime = exports.unstable_now(); // Yield after `yieldInterval` ms, regardless of where we are in the vsync 66929 // cycle. This means there's always time remaining at the beginning of 66930 // the message event. 66931 66932 deadline = currentTime + yieldInterval; 66933 var hasTimeRemaining = true; 66934 66935 try { 66936 var hasMoreWork = scheduledHostCallback(hasTimeRemaining, currentTime); 66937 66938 if (!hasMoreWork) { 66939 isMessageLoopRunning = false; 66940 scheduledHostCallback = null; 66941 } else { 66942 // If there's more work, schedule the next message event at the end 66943 // of the preceding one. 66944 port.postMessage(null); 66945 } 66946 } catch (error) { 66947 // If a scheduler task throws, exit the current browser task so the 66948 // error can be observed. 66949 port.postMessage(null); 66950 throw error; 66951 } 66952 } else { 66953 isMessageLoopRunning = false; 66954 } // Yielding to the browser will give it a chance to paint, so we can 66955 }; 66956 66957 var channel = new MessageChannel(); 66958 var port = channel.port2; 66959 channel.port1.onmessage = performWorkUntilDeadline; 66960 66961 requestHostCallback = function (callback) { 66962 scheduledHostCallback = callback; 66963 66964 if (!isMessageLoopRunning) { 66965 isMessageLoopRunning = true; 66966 port.postMessage(null); 66967 } 66968 }; 66969 66970 requestHostTimeout = function (callback, ms) { 66971 taskTimeoutID = _setTimeout(function () { 66972 callback(exports.unstable_now()); 66973 }, ms); 66974 }; 66975 66976 cancelHostTimeout = function () { 66977 _clearTimeout(taskTimeoutID); 66978 66979 taskTimeoutID = -1; 66980 }; 66981} 66982 66983function push(heap, node) { 66984 var index = heap.length; 66985 heap.push(node); 66986 siftUp(heap, node, index); 66987} 66988function peek(heap) { 66989 var first = heap[0]; 66990 return first === undefined ? null : first; 66991} 66992function pop(heap) { 66993 var first = heap[0]; 66994 66995 if (first !== undefined) { 66996 var last = heap.pop(); 66997 66998 if (last !== first) { 66999 heap[0] = last; 67000 siftDown(heap, last, 0); 67001 } 67002 67003 return first; 67004 } else { 67005 return null; 67006 } 67007} 67008 67009function siftUp(heap, node, i) { 67010 var index = i; 67011 67012 while (true) { 67013 var parentIndex = index - 1 >>> 1; 67014 var parent = heap[parentIndex]; 67015 67016 if (parent !== undefined && compare(parent, node) > 0) { 67017 // The parent is larger. Swap positions. 67018 heap[parentIndex] = node; 67019 heap[index] = parent; 67020 index = parentIndex; 67021 } else { 67022 // The parent is smaller. Exit. 67023 return; 67024 } 67025 } 67026} 67027 67028function siftDown(heap, node, i) { 67029 var index = i; 67030 var length = heap.length; 67031 67032 while (index < length) { 67033 var leftIndex = (index + 1) * 2 - 1; 67034 var left = heap[leftIndex]; 67035 var rightIndex = leftIndex + 1; 67036 var right = heap[rightIndex]; // If the left or right node is smaller, swap with the smaller of those. 67037 67038 if (left !== undefined && compare(left, node) < 0) { 67039 if (right !== undefined && compare(right, left) < 0) { 67040 heap[index] = right; 67041 heap[rightIndex] = node; 67042 index = rightIndex; 67043 } else { 67044 heap[index] = left; 67045 heap[leftIndex] = node; 67046 index = leftIndex; 67047 } 67048 } else if (right !== undefined && compare(right, node) < 0) { 67049 heap[index] = right; 67050 heap[rightIndex] = node; 67051 index = rightIndex; 67052 } else { 67053 // Neither child is smaller. Exit. 67054 return; 67055 } 67056 } 67057} 67058 67059function compare(a, b) { 67060 // Compare sort index first, then task id. 67061 var diff = a.sortIndex - b.sortIndex; 67062 return diff !== 0 ? diff : a.id - b.id; 67063} 67064 67065// TODO: Use symbols? 67066var ImmediatePriority = 1; 67067var UserBlockingPriority = 2; 67068var NormalPriority = 3; 67069var LowPriority = 4; 67070var IdlePriority = 5; 67071 67072function markTaskErrored(task, ms) { 67073} 67074 67075/* eslint-disable no-var */ 67076// Math.pow(2, 30) - 1 67077// 0b111111111111111111111111111111 67078 67079var maxSigned31BitInt = 1073741823; // Times out immediately 67080 67081var IMMEDIATE_PRIORITY_TIMEOUT = -1; // Eventually times out 67082 67083var USER_BLOCKING_PRIORITY_TIMEOUT = 250; 67084var NORMAL_PRIORITY_TIMEOUT = 5000; 67085var LOW_PRIORITY_TIMEOUT = 10000; // Never times out 67086 67087var IDLE_PRIORITY_TIMEOUT = maxSigned31BitInt; // Tasks are stored on a min heap 67088 67089var taskQueue = []; 67090var timerQueue = []; // Incrementing id counter. Used to maintain insertion order. 67091 67092var taskIdCounter = 1; // Pausing the scheduler is useful for debugging. 67093var currentTask = null; 67094var currentPriorityLevel = NormalPriority; // This is set while performing work, to prevent re-entrancy. 67095 67096var isPerformingWork = false; 67097var isHostCallbackScheduled = false; 67098var isHostTimeoutScheduled = false; 67099 67100function advanceTimers(currentTime) { 67101 // Check for tasks that are no longer delayed and add them to the queue. 67102 var timer = peek(timerQueue); 67103 67104 while (timer !== null) { 67105 if (timer.callback === null) { 67106 // Timer was cancelled. 67107 pop(timerQueue); 67108 } else if (timer.startTime <= currentTime) { 67109 // Timer fired. Transfer to the task queue. 67110 pop(timerQueue); 67111 timer.sortIndex = timer.expirationTime; 67112 push(taskQueue, timer); 67113 } else { 67114 // Remaining timers are pending. 67115 return; 67116 } 67117 67118 timer = peek(timerQueue); 67119 } 67120} 67121 67122function handleTimeout(currentTime) { 67123 isHostTimeoutScheduled = false; 67124 advanceTimers(currentTime); 67125 67126 if (!isHostCallbackScheduled) { 67127 if (peek(taskQueue) !== null) { 67128 isHostCallbackScheduled = true; 67129 requestHostCallback(flushWork); 67130 } else { 67131 var firstTimer = peek(timerQueue); 67132 67133 if (firstTimer !== null) { 67134 requestHostTimeout(handleTimeout, firstTimer.startTime - currentTime); 67135 } 67136 } 67137 } 67138} 67139 67140function flushWork(hasTimeRemaining, initialTime) { 67141 67142 67143 isHostCallbackScheduled = false; 67144 67145 if (isHostTimeoutScheduled) { 67146 // We scheduled a timeout but it's no longer needed. Cancel it. 67147 isHostTimeoutScheduled = false; 67148 cancelHostTimeout(); 67149 } 67150 67151 isPerformingWork = true; 67152 var previousPriorityLevel = currentPriorityLevel; 67153 67154 try { 67155 if (enableProfiling) { 67156 try { 67157 return workLoop(hasTimeRemaining, initialTime); 67158 } catch (error) { 67159 if (currentTask !== null) { 67160 var currentTime = exports.unstable_now(); 67161 markTaskErrored(currentTask, currentTime); 67162 currentTask.isQueued = false; 67163 } 67164 67165 throw error; 67166 } 67167 } else { 67168 // No catch in prod code path. 67169 return workLoop(hasTimeRemaining, initialTime); 67170 } 67171 } finally { 67172 currentTask = null; 67173 currentPriorityLevel = previousPriorityLevel; 67174 isPerformingWork = false; 67175 } 67176} 67177 67178function workLoop(hasTimeRemaining, initialTime) { 67179 var currentTime = initialTime; 67180 advanceTimers(currentTime); 67181 currentTask = peek(taskQueue); 67182 67183 while (currentTask !== null && !(enableSchedulerDebugging )) { 67184 if (currentTask.expirationTime > currentTime && (!hasTimeRemaining || exports.unstable_shouldYield())) { 67185 // This currentTask hasn't expired, and we've reached the deadline. 67186 break; 67187 } 67188 67189 var callback = currentTask.callback; 67190 67191 if (typeof callback === 'function') { 67192 currentTask.callback = null; 67193 currentPriorityLevel = currentTask.priorityLevel; 67194 var didUserCallbackTimeout = currentTask.expirationTime <= currentTime; 67195 67196 var continuationCallback = callback(didUserCallbackTimeout); 67197 currentTime = exports.unstable_now(); 67198 67199 if (typeof continuationCallback === 'function') { 67200 currentTask.callback = continuationCallback; 67201 } else { 67202 67203 if (currentTask === peek(taskQueue)) { 67204 pop(taskQueue); 67205 } 67206 } 67207 67208 advanceTimers(currentTime); 67209 } else { 67210 pop(taskQueue); 67211 } 67212 67213 currentTask = peek(taskQueue); 67214 } // Return whether there's additional work 67215 67216 67217 if (currentTask !== null) { 67218 return true; 67219 } else { 67220 var firstTimer = peek(timerQueue); 67221 67222 if (firstTimer !== null) { 67223 requestHostTimeout(handleTimeout, firstTimer.startTime - currentTime); 67224 } 67225 67226 return false; 67227 } 67228} 67229 67230function unstable_runWithPriority(priorityLevel, eventHandler) { 67231 switch (priorityLevel) { 67232 case ImmediatePriority: 67233 case UserBlockingPriority: 67234 case NormalPriority: 67235 case LowPriority: 67236 case IdlePriority: 67237 break; 67238 67239 default: 67240 priorityLevel = NormalPriority; 67241 } 67242 67243 var previousPriorityLevel = currentPriorityLevel; 67244 currentPriorityLevel = priorityLevel; 67245 67246 try { 67247 return eventHandler(); 67248 } finally { 67249 currentPriorityLevel = previousPriorityLevel; 67250 } 67251} 67252 67253function unstable_next(eventHandler) { 67254 var priorityLevel; 67255 67256 switch (currentPriorityLevel) { 67257 case ImmediatePriority: 67258 case UserBlockingPriority: 67259 case NormalPriority: 67260 // Shift down to normal priority 67261 priorityLevel = NormalPriority; 67262 break; 67263 67264 default: 67265 // Anything lower than normal priority should remain at the current level. 67266 priorityLevel = currentPriorityLevel; 67267 break; 67268 } 67269 67270 var previousPriorityLevel = currentPriorityLevel; 67271 currentPriorityLevel = priorityLevel; 67272 67273 try { 67274 return eventHandler(); 67275 } finally { 67276 currentPriorityLevel = previousPriorityLevel; 67277 } 67278} 67279 67280function unstable_wrapCallback(callback) { 67281 var parentPriorityLevel = currentPriorityLevel; 67282 return function () { 67283 // This is a fork of runWithPriority, inlined for performance. 67284 var previousPriorityLevel = currentPriorityLevel; 67285 currentPriorityLevel = parentPriorityLevel; 67286 67287 try { 67288 return callback.apply(this, arguments); 67289 } finally { 67290 currentPriorityLevel = previousPriorityLevel; 67291 } 67292 }; 67293} 67294 67295function unstable_scheduleCallback(priorityLevel, callback, options) { 67296 var currentTime = exports.unstable_now(); 67297 var startTime; 67298 67299 if (typeof options === 'object' && options !== null) { 67300 var delay = options.delay; 67301 67302 if (typeof delay === 'number' && delay > 0) { 67303 startTime = currentTime + delay; 67304 } else { 67305 startTime = currentTime; 67306 } 67307 } else { 67308 startTime = currentTime; 67309 } 67310 67311 var timeout; 67312 67313 switch (priorityLevel) { 67314 case ImmediatePriority: 67315 timeout = IMMEDIATE_PRIORITY_TIMEOUT; 67316 break; 67317 67318 case UserBlockingPriority: 67319 timeout = USER_BLOCKING_PRIORITY_TIMEOUT; 67320 break; 67321 67322 case IdlePriority: 67323 timeout = IDLE_PRIORITY_TIMEOUT; 67324 break; 67325 67326 case LowPriority: 67327 timeout = LOW_PRIORITY_TIMEOUT; 67328 break; 67329 67330 case NormalPriority: 67331 default: 67332 timeout = NORMAL_PRIORITY_TIMEOUT; 67333 break; 67334 } 67335 67336 var expirationTime = startTime + timeout; 67337 var newTask = { 67338 id: taskIdCounter++, 67339 callback: callback, 67340 priorityLevel: priorityLevel, 67341 startTime: startTime, 67342 expirationTime: expirationTime, 67343 sortIndex: -1 67344 }; 67345 67346 if (startTime > currentTime) { 67347 // This is a delayed task. 67348 newTask.sortIndex = startTime; 67349 push(timerQueue, newTask); 67350 67351 if (peek(taskQueue) === null && newTask === peek(timerQueue)) { 67352 // All tasks are delayed, and this is the task with the earliest delay. 67353 if (isHostTimeoutScheduled) { 67354 // Cancel an existing timeout. 67355 cancelHostTimeout(); 67356 } else { 67357 isHostTimeoutScheduled = true; 67358 } // Schedule a timeout. 67359 67360 67361 requestHostTimeout(handleTimeout, startTime - currentTime); 67362 } 67363 } else { 67364 newTask.sortIndex = expirationTime; 67365 push(taskQueue, newTask); 67366 // wait until the next time we yield. 67367 67368 67369 if (!isHostCallbackScheduled && !isPerformingWork) { 67370 isHostCallbackScheduled = true; 67371 requestHostCallback(flushWork); 67372 } 67373 } 67374 67375 return newTask; 67376} 67377 67378function unstable_pauseExecution() { 67379} 67380 67381function unstable_continueExecution() { 67382 67383 if (!isHostCallbackScheduled && !isPerformingWork) { 67384 isHostCallbackScheduled = true; 67385 requestHostCallback(flushWork); 67386 } 67387} 67388 67389function unstable_getFirstCallbackNode() { 67390 return peek(taskQueue); 67391} 67392 67393function unstable_cancelCallback(task) { 67394 // remove from the queue because you can't remove arbitrary nodes from an 67395 // array based heap, only the first one.) 67396 67397 67398 task.callback = null; 67399} 67400 67401function unstable_getCurrentPriorityLevel() { 67402 return currentPriorityLevel; 67403} 67404 67405var unstable_requestPaint = requestPaint; 67406var unstable_Profiling = null; 67407 67408exports.unstable_IdlePriority = IdlePriority; 67409exports.unstable_ImmediatePriority = ImmediatePriority; 67410exports.unstable_LowPriority = LowPriority; 67411exports.unstable_NormalPriority = NormalPriority; 67412exports.unstable_Profiling = unstable_Profiling; 67413exports.unstable_UserBlockingPriority = UserBlockingPriority; 67414exports.unstable_cancelCallback = unstable_cancelCallback; 67415exports.unstable_continueExecution = unstable_continueExecution; 67416exports.unstable_getCurrentPriorityLevel = unstable_getCurrentPriorityLevel; 67417exports.unstable_getFirstCallbackNode = unstable_getFirstCallbackNode; 67418exports.unstable_next = unstable_next; 67419exports.unstable_pauseExecution = unstable_pauseExecution; 67420exports.unstable_requestPaint = unstable_requestPaint; 67421exports.unstable_runWithPriority = unstable_runWithPriority; 67422exports.unstable_scheduleCallback = unstable_scheduleCallback; 67423exports.unstable_wrapCallback = unstable_wrapCallback; 67424 })(); 67425} 67426 67427 67428/***/ }), 67429
vendor: 439 bytes, lines 67430-67445
67430/***/ "./node_modules/scheduler/index.js": 67431/*!*****************************************!*\ 67432 !*** ./node_modules/scheduler/index.js ***! 67433 \*****************************************/ 67434/***/ ((module, __unused_webpack_exports, __webpack_require__) => { 67435 67436"use strict"; 67437 67438 67439if (false) {} else { 67440 module.exports = __webpack_require__(/*! ./cjs/scheduler.development.js */ "./node_modules/scheduler/cjs/scheduler.development.js"); 67441} 67442 67443 67444/***/ }), 67445
vendor: 463 bytes, lines 67446-67461
67446/***/ "./node_modules/scheduler/tracing.js": 67447/*!*******************************************!*\ 67448 !*** ./node_modules/scheduler/tracing.js ***! 67449 \*******************************************/ 67450/***/ ((module, __unused_webpack_exports, __webpack_require__) => { 67451 67452"use strict"; 67453 67454 67455if (false) {} else { 67456 module.exports = __webpack_require__(/*! ./cjs/scheduler-tracing.development.js */ "./node_modules/scheduler/cjs/scheduler-tracing.development.js"); 67457} 67458 67459 67460/***/ }), 67461
67462/***/ "./resources/js/app/app.style.scss": 67463/*!*****************************************!*\ 67464 !*** ./resources/js/app/app.style.scss ***! 67465 \*****************************************/ 67466/***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => { 67467 67468"use strict"; 67469__webpack_require__.r(__webpack_exports__); 67470/* harmony export */ __webpack_require__.d(__webpack_exports__, { 67471/* harmony export */ "default": () => (__WEBPACK_DEFAULT_EXPORT__) 67472/* harmony export */ }); 67473/* harmony import */ var _node_modules_style_loader_dist_runtime_injectStylesIntoStyleTag_js__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! !../../../node_modules/style-loader/dist/runtime/injectStylesIntoStyleTag.js */ "./node_modules/style-loader/dist/runtime/injectStylesIntoStyleTag.js"); 67474/* harmony import */ var _node_modules_style_loader_dist_runtime_injectStylesIntoStyleTag_js__WEBPACK_IMPORTED_MODULE_0___default = /*#__PURE__*/__webpack_require__.n(_node_modules_style_loader_dist_runtime_injectStylesIntoStyleTag_js__WEBPACK_IMPORTED_MODULE_0__); 67475/* harmony import */ var _node_modules_css_loader_dist_cjs_js_ruleSet_1_rules_9_oneOf_1_use_1_node_modules_postcss_loader_dist_cjs_js_ruleSet_1_rules_9_oneOf_1_use_2_node_modules_sass_loader_dist_cjs_js_ruleSet_1_rules_9_oneOf_1_use_3_app_style_scss__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! !!../../../node_modules/css-loader/dist/cjs.js??ruleSet[1].rules[9].oneOf[1].use[1]!../../../node_modules/postcss-loader/dist/cjs.js??ruleSet[1].rules[9].oneOf[1].use[2]!../../../node_modules/sass-loader/dist/cjs.js??ruleSet[1].rules[9].oneOf[1].use[3]!./app.style.scss */ "./node_modules/css-loader/dist/cjs.js??ruleSet[1].rules[9].oneOf[1].use[1]!./node_modules/postcss-loader/dist/cjs.js??ruleSet[1].rules[9].oneOf[1].use[2]!./node_modules/sass-loader/dist/cjs.js??ruleSet[1].rules[9].oneOf[1].use[3]!./resources/js/app/app.style.scss"); 67476 67477 67478 67479var options = {}; 67480 67481options.insert = "head"; 67482options.singleton = false; 67483 67484var update = _node_modules_style_loader_dist_runtime_injectStylesIntoStyleTag_js__WEBPACK_IMPORTED_MODULE_0___default()(_node_modules_css_loader_dist_cjs_js_ruleSet_1_rules_9_oneOf_1_use_1_node_modules_postcss_loader_dist_cjs_js_ruleSet_1_rules_9_oneOf_1_use_2_node_modules_sass_loader_dist_cjs_js_ruleSet_1_rules_9_oneOf_1_use_3_app_style_scss__WEBPACK_IMPORTED_MODULE_1__["default"], options); 67485 67486 67487 67488/* harmony default export */ const __WEBPACK_DEFAULT_EXPORT__ = (_node_modules_css_loader_dist_cjs_js_ruleSet_1_rules_9_oneOf_1_use_1_node_modules_postcss_loader_dist_cjs_js_ruleSet_1_rules_9_oneOf_1_use_2_node_modules_sass_loader_dist_cjs_js_ruleSet_1_rules_9_oneOf_1_use_3_app_style_scss__WEBPACK_IMPORTED_MODULE_1__["default"].locals || {}); 67489 67490/***/ }), 67491
67492/***/ "./resources/js/components/category-list/category-list.style.scss": 67493/*!************************************************************************!*\ 67494 !*** ./resources/js/components/category-list/category-list.style.scss ***! 67495 \************************************************************************/ 67496/***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => { 67497 67498"use strict"; 67499__webpack_require__.r(__webpack_exports__); 67500/* harmony export */ __webpack_require__.d(__webpack_exports__, { 67501/* harmony export */ "default": () => (__WEBPACK_DEFAULT_EXPORT__) 67502/* harmony export */ }); 67503/* harmony import */ var _node_modules_style_loader_dist_runtime_injectStylesIntoStyleTag_js__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! !../../../../node_modules/style-loader/dist/runtime/injectStylesIntoStyleTag.js */ "./node_modules/style-loader/dist/runtime/injectStylesIntoStyleTag.js"); 67504/* harmony import */ var _node_modules_style_loader_dist_runtime_injectStylesIntoStyleTag_js__WEBPACK_IMPORTED_MODULE_0___default = /*#__PURE__*/__webpack_require__.n(_node_modules_style_loader_dist_runtime_injectStylesIntoStyleTag_js__WEBPACK_IMPORTED_MODULE_0__); 67505/* harmony import */ var _node_modules_css_loader_dist_cjs_js_ruleSet_1_rules_9_oneOf_1_use_1_node_modules_postcss_loader_dist_cjs_js_ruleSet_1_rules_9_oneOf_1_use_2_node_modules_sass_loader_dist_cjs_js_ruleSet_1_rules_9_oneOf_1_use_3_category_list_style_scss__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! !!../../../../node_modules/css-loader/dist/cjs.js??ruleSet[1].rules[9].oneOf[1].use[1]!../../../../node_modules/postcss-loader/dist/cjs.js??ruleSet[1].rules[9].oneOf[1].use[2]!../../../../node_modules/sass-loader/dist/cjs.js??ruleSet[1].rules[9].oneOf[1].use[3]!./category-list.style.scss */ "./node_modules/css-loader/dist/cjs.js??ruleSet[1].rules[9].oneOf[1].use[1]!./node_modules/postcss-loader/dist/cjs.js??ruleSet[1].rules[9].oneOf[1].use[2]!./node_modules/sass-loader/dist/cjs.js??ruleSet[1].rules[9].oneOf[1].use[3]!./resources/js/components/category-list/category-list.style.scss"); 67506 67507 67508 67509var options = {}; 67510 67511options.insert = "head"; 67512options.singleton = false; 67513 67514var update = _node_modules_style_loader_dist_runtime_injectStylesIntoStyleTag_js__WEBPACK_IMPORTED_MODULE_0___default()(_node_modules_css_loader_dist_cjs_js_ruleSet_1_rules_9_oneOf_1_use_1_node_modules_postcss_loader_dist_cjs_js_ruleSet_1_rules_9_oneOf_1_use_2_node_modules_sass_loader_dist_cjs_js_ruleSet_1_rules_9_oneOf_1_use_3_category_list_style_scss__WEBPACK_IMPORTED_MODULE_1__["default"], options); 67515 67516 67517 67518/* harmony default export */ const __WEBPACK_DEFAULT_EXPORT__ = (_node_modules_css_loader_dist_cjs_js_ruleSet_1_rules_9_oneOf_1_use_1_node_modules_postcss_loader_dist_cjs_js_ruleSet_1_rules_9_oneOf_1_use_2_node_modules_sass_loader_dist_cjs_js_ruleSet_1_rules_9_oneOf_1_use_3_category_list_style_scss__WEBPACK_IMPORTED_MODULE_1__["default"].locals || {}); 67519 67520/***/ }), 67521
67522/***/ "./resources/js/components/flash-sale/flash-sale.style.scss": 67523/*!******************************************************************!*\ 67524 !*** ./resources/js/components/flash-sale/flash-sale.style.scss ***! 67525 \******************************************************************/ 67526/***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => { 67527 67528"use strict"; 67529__webpack_require__.r(__webpack_exports__); 67530/* harmony export */ __webpack_require__.d(__webpack_exports__, { 67531/* harmony export */ "default": () => (__WEBPACK_DEFAULT_EXPORT__) 67532/* harmony export */ }); 67533/* harmony import */ var _node_modules_style_loader_dist_runtime_injectStylesIntoStyleTag_js__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! !../../../../node_modules/style-loader/dist/runtime/injectStylesIntoStyleTag.js */ "./node_modules/style-loader/dist/runtime/injectStylesIntoStyleTag.js"); 67534/* harmony import */ var _node_modules_style_loader_dist_runtime_injectStylesIntoStyleTag_js__WEBPACK_IMPORTED_MODULE_0___default = /*#__PURE__*/__webpack_require__.n(_node_modules_style_loader_dist_runtime_injectStylesIntoStyleTag_js__WEBPACK_IMPORTED_MODULE_0__); 67535/* harmony import */ var _node_modules_css_loader_dist_cjs_js_ruleSet_1_rules_9_oneOf_1_use_1_node_modules_postcss_loader_dist_cjs_js_ruleSet_1_rules_9_oneOf_1_use_2_node_modules_sass_loader_dist_cjs_js_ruleSet_1_rules_9_oneOf_1_use_3_flash_sale_style_scss__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! !!../../../../node_modules/css-loader/dist/cjs.js??ruleSet[1].rules[9].oneOf[1].use[1]!../../../../node_modules/postcss-loader/dist/cjs.js??ruleSet[1].rules[9].oneOf[1].use[2]!../../../../node_modules/sass-loader/dist/cjs.js??ruleSet[1].rules[9].oneOf[1].use[3]!./flash-sale.style.scss */ "./node_modules/css-loader/dist/cjs.js??ruleSet[1].rules[9].oneOf[1].use[1]!./node_modules/postcss-loader/dist/cjs.js??ruleSet[1].rules[9].oneOf[1].use[2]!./node_modules/sass-loader/dist/cjs.js??ruleSet[1].rules[9].oneOf[1].use[3]!./resources/js/components/flash-sale/flash-sale.style.scss"); 67536 67537 67538 67539var options = {}; 67540 67541options.insert = "head"; 67542options.singleton = false; 67543 67544var update = _node_modules_style_loader_dist_runtime_injectStylesIntoStyleTag_js__WEBPACK_IMPORTED_MODULE_0___default()(_node_modules_css_loader_dist_cjs_js_ruleSet_1_rules_9_oneOf_1_use_1_node_modules_postcss_loader_dist_cjs_js_ruleSet_1_rules_9_oneOf_1_use_2_node_modules_sass_loader_dist_cjs_js_ruleSet_1_rules_9_oneOf_1_use_3_flash_sale_style_scss__WEBPACK_IMPORTED_MODULE_1__["default"], options); 67545 67546 67547 67548/* harmony default export */ const __WEBPACK_DEFAULT_EXPORT__ = (_node_modules_css_loader_dist_cjs_js_ruleSet_1_rules_9_oneOf_1_use_1_node_modules_postcss_loader_dist_cjs_js_ruleSet_1_rules_9_oneOf_1_use_2_node_modules_sass_loader_dist_cjs_js_ruleSet_1_rules_9_oneOf_1_use_3_flash_sale_style_scss__WEBPACK_IMPORTED_MODULE_1__["default"].locals || {}); 67549 67550/***/ }), 67551
67552/***/ "./resources/js/components/products/products.style.scss": 67553/*!**************************************************************!*\ 67554 !*** ./resources/js/components/products/products.style.scss ***! 67555 \**************************************************************/ 67556/***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => { 67557 67558"use strict"; 67559__webpack_require__.r(__webpack_exports__); 67560/* harmony export */ __webpack_require__.d(__webpack_exports__, { 67561/* harmony export */ "default": () => (__WEBPACK_DEFAULT_EXPORT__) 67562/* harmony export */ }); 67563/* harmony import */ var _node_modules_style_loader_dist_runtime_injectStylesIntoStyleTag_js__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! !../../../../node_modules/style-loader/dist/runtime/injectStylesIntoStyleTag.js */ "./node_modules/style-loader/dist/runtime/injectStylesIntoStyleTag.js"); 67564/* harmony import */ var _node_modules_style_loader_dist_runtime_injectStylesIntoStyleTag_js__WEBPACK_IMPORTED_MODULE_0___default = /*#__PURE__*/__webpack_require__.n(_node_modules_style_loader_dist_runtime_injectStylesIntoStyleTag_js__WEBPACK_IMPORTED_MODULE_0__); 67565/* harmony import */ var _node_modules_css_loader_dist_cjs_js_ruleSet_1_rules_9_oneOf_1_use_1_node_modules_postcss_loader_dist_cjs_js_ruleSet_1_rules_9_oneOf_1_use_2_node_modules_sass_loader_dist_cjs_js_ruleSet_1_rules_9_oneOf_1_use_3_products_style_scss__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! !!../../../../node_modules/css-loader/dist/cjs.js??ruleSet[1].rules[9].oneOf[1].use[1]!../../../../node_modules/postcss-loader/dist/cjs.js??ruleSet[1].rules[9].oneOf[1].use[2]!../../../../node_modules/sass-loader/dist/cjs.js??ruleSet[1].rules[9].oneOf[1].use[3]!./products.style.scss */ "./node_modules/css-loader/dist/cjs.js??ruleSet[1].rules[9].oneOf[1].use[1]!./node_modules/postcss-loader/dist/cjs.js??ruleSet[1].rules[9].oneOf[1].use[2]!./node_modules/sass-loader/dist/cjs.js??ruleSet[1].rules[9].oneOf[1].use[3]!./resources/js/components/products/products.style.scss"); 67566 67567 67568 67569var options = {}; 67570 67571options.insert = "head"; 67572options.singleton = false; 67573 67574var update = _node_modules_style_loader_dist_runtime_injectStylesIntoStyleTag_js__WEBPACK_IMPORTED_MODULE_0___default()(_node_modules_css_loader_dist_cjs_js_ruleSet_1_rules_9_oneOf_1_use_1_node_modules_postcss_loader_dist_cjs_js_ruleSet_1_rules_9_oneOf_1_use_2_node_modules_sass_loader_dist_cjs_js_ruleSet_1_rules_9_oneOf_1_use_3_products_style_scss__WEBPACK_IMPORTED_MODULE_1__["default"], options); 67575 67576 67577 67578/* harmony default export */ const __WEBPACK_DEFAULT_EXPORT__ = (_node_modules_css_loader_dist_cjs_js_ruleSet_1_rules_9_oneOf_1_use_1_node_modules_postcss_loader_dist_cjs_js_ruleSet_1_rules_9_oneOf_1_use_2_node_modules_sass_loader_dist_cjs_js_ruleSet_1_rules_9_oneOf_1_use_3_products_style_scss__WEBPACK_IMPORTED_MODULE_1__["default"].locals || {}); 67579 67580/***/ }), 67581
67582/***/ "./resources/js/components/quick-action-shop/quick-action.scss": 67583/*!*********************************************************************!*\ 67584 !*** ./resources/js/components/quick-action-shop/quick-action.scss ***! 67585 \*********************************************************************/ 67586/***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => { 67587 67588"use strict"; 67589__webpack_require__.r(__webpack_exports__); 67590/* harmony export */ __webpack_require__.d(__webpack_exports__, { 67591/* harmony export */ "default": () => (__WEBPACK_DEFAULT_EXPORT__) 67592/* harmony export */ }); 67593/* harmony import */ var _node_modules_style_loader_dist_runtime_injectStylesIntoStyleTag_js__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! !../../../../node_modules/style-loader/dist/runtime/injectStylesIntoStyleTag.js */ "./node_modules/style-loader/dist/runtime/injectStylesIntoStyleTag.js"); 67594/* harmony import */ var _node_modules_style_loader_dist_runtime_injectStylesIntoStyleTag_js__WEBPACK_IMPORTED_MODULE_0___default = /*#__PURE__*/__webpack_require__.n(_node_modules_style_loader_dist_runtime_injectStylesIntoStyleTag_js__WEBPACK_IMPORTED_MODULE_0__); 67595/* harmony import */ var _node_modules_css_loader_dist_cjs_js_ruleSet_1_rules_9_oneOf_1_use_1_node_modules_postcss_loader_dist_cjs_js_ruleSet_1_rules_9_oneOf_1_use_2_node_modules_sass_loader_dist_cjs_js_ruleSet_1_rules_9_oneOf_1_use_3_quick_action_scss__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! !!../../../../node_modules/css-loader/dist/cjs.js??ruleSet[1].rules[9].oneOf[1].use[1]!../../../../node_modules/postcss-loader/dist/cjs.js??ruleSet[1].rules[9].oneOf[1].use[2]!../../../../node_modules/sass-loader/dist/cjs.js??ruleSet[1].rules[9].oneOf[1].use[3]!./quick-action.scss */ "./node_modules/css-loader/dist/cjs.js??ruleSet[1].rules[9].oneOf[1].use[1]!./node_modules/postcss-loader/dist/cjs.js??ruleSet[1].rules[9].oneOf[1].use[2]!./node_modules/sass-loader/dist/cjs.js??ruleSet[1].rules[9].oneOf[1].use[3]!./resources/js/components/quick-action-shop/quick-action.scss"); 67596 67597 67598 67599var options = {}; 67600 67601options.insert = "head"; 67602options.singleton = false; 67603 67604var update = _node_modules_style_loader_dist_runtime_injectStylesIntoStyleTag_js__WEBPACK_IMPORTED_MODULE_0___default()(_node_modules_css_loader_dist_cjs_js_ruleSet_1_rules_9_oneOf_1_use_1_node_modules_postcss_loader_dist_cjs_js_ruleSet_1_rules_9_oneOf_1_use_2_node_modules_sass_loader_dist_cjs_js_ruleSet_1_rules_9_oneOf_1_use_3_quick_action_scss__WEBPACK_IMPORTED_MODULE_1__["default"], options); 67605 67606 67607 67608/* harmony default export */ const __WEBPACK_DEFAULT_EXPORT__ = (_node_modules_css_loader_dist_cjs_js_ruleSet_1_rules_9_oneOf_1_use_1_node_modules_postcss_loader_dist_cjs_js_ruleSet_1_rules_9_oneOf_1_use_2_node_modules_sass_loader_dist_cjs_js_ruleSet_1_rules_9_oneOf_1_use_3_quick_action_scss__WEBPACK_IMPORTED_MODULE_1__["default"].locals || {}); 67609 67610/***/ }), 67611
67612/***/ "./resources/js/components/top-sale/top-sale.style.scss": 67613/*!**************************************************************!*\ 67614 !*** ./resources/js/components/top-sale/top-sale.style.scss ***! 67615 \**************************************************************/ 67616/***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => { 67617 67618"use strict"; 67619__webpack_require__.r(__webpack_exports__); 67620/* harmony export */ __webpack_require__.d(__webpack_exports__, { 67621/* harmony export */ "default": () => (__WEBPACK_DEFAULT_EXPORT__) 67622/* harmony export */ }); 67623/* harmony import */ var _node_modules_style_loader_dist_runtime_injectStylesIntoStyleTag_js__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! !../../../../node_modules/style-loader/dist/runtime/injectStylesIntoStyleTag.js */ "./node_modules/style-loader/dist/runtime/injectStylesIntoStyleTag.js"); 67624/* harmony import */ var _node_modules_style_loader_dist_runtime_injectStylesIntoStyleTag_js__WEBPACK_IMPORTED_MODULE_0___default = /*#__PURE__*/__webpack_require__.n(_node_modules_style_loader_dist_runtime_injectStylesIntoStyleTag_js__WEBPACK_IMPORTED_MODULE_0__); 67625/* harmony import */ var _node_modules_css_loader_dist_cjs_js_ruleSet_1_rules_9_oneOf_1_use_1_node_modules_postcss_loader_dist_cjs_js_ruleSet_1_rules_9_oneOf_1_use_2_node_modules_sass_loader_dist_cjs_js_ruleSet_1_rules_9_oneOf_1_use_3_top_sale_style_scss__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! !!../../../../node_modules/css-loader/dist/cjs.js??ruleSet[1].rules[9].oneOf[1].use[1]!../../../../node_modules/postcss-loader/dist/cjs.js??ruleSet[1].rules[9].oneOf[1].use[2]!../../../../node_modules/sass-loader/dist/cjs.js??ruleSet[1].rules[9].oneOf[1].use[3]!./top-sale.style.scss */ "./node_modules/css-loader/dist/cjs.js??ruleSet[1].rules[9].oneOf[1].use[1]!./node_modules/postcss-loader/dist/cjs.js??ruleSet[1].rules[9].oneOf[1].use[2]!./node_modules/sass-loader/dist/cjs.js??ruleSet[1].rules[9].oneOf[1].use[3]!./resources/js/components/top-sale/top-sale.style.scss"); 67626 67627 67628 67629var options = {}; 67630 67631options.insert = "head"; 67632options.singleton = false; 67633 67634var update = _node_modules_style_loader_dist_runtime_injectStylesIntoStyleTag_js__WEBPACK_IMPORTED_MODULE_0___default()(_node_modules_css_loader_dist_cjs_js_ruleSet_1_rules_9_oneOf_1_use_1_node_modules_postcss_loader_dist_cjs_js_ruleSet_1_rules_9_oneOf_1_use_2_node_modules_sass_loader_dist_cjs_js_ruleSet_1_rules_9_oneOf_1_use_3_top_sale_style_scss__WEBPACK_IMPORTED_MODULE_1__["default"], options); 67635 67636 67637 67638/* harmony default export */ const __WEBPACK_DEFAULT_EXPORT__ = (_node_modules_css_loader_dist_cjs_js_ruleSet_1_rules_9_oneOf_1_use_1_node_modules_postcss_loader_dist_cjs_js_ruleSet_1_rules_9_oneOf_1_use_2_node_modules_sass_loader_dist_cjs_js_ruleSet_1_rules_9_oneOf_1_use_3_top_sale_style_scss__WEBPACK_IMPORTED_MODULE_1__["default"].locals || {}); 67639 67640/***/ }), 67641
67642/***/ "./resources/sass/index.scss": 67643/*!***********************************!*\ 67644 !*** ./resources/sass/index.scss ***! 67645 \***********************************/ 67646/***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => { 67647 67648"use strict"; 67649__webpack_require__.r(__webpack_exports__); 67650/* harmony export */ __webpack_require__.d(__webpack_exports__, { 67651/* harmony export */ "default": () => (__WEBPACK_DEFAULT_EXPORT__) 67652/* harmony export */ }); 67653/* harmony import */ var _node_modules_style_loader_dist_runtime_injectStylesIntoStyleTag_js__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! !../../node_modules/style-loader/dist/runtime/injectStylesIntoStyleTag.js */ "./node_modules/style-loader/dist/runtime/injectStylesIntoStyleTag.js"); 67654/* harmony import */ var _node_modules_style_loader_dist_runtime_injectStylesIntoStyleTag_js__WEBPACK_IMPORTED_MODULE_0___default = /*#__PURE__*/__webpack_require__.n(_node_modules_style_loader_dist_runtime_injectStylesIntoStyleTag_js__WEBPACK_IMPORTED_MODULE_0__); 67655/* harmony import */ var _node_modules_css_loader_dist_cjs_js_ruleSet_1_rules_9_oneOf_1_use_1_node_modules_postcss_loader_dist_cjs_js_ruleSet_1_rules_9_oneOf_1_use_2_node_modules_sass_loader_dist_cjs_js_ruleSet_1_rules_9_oneOf_1_use_3_index_scss__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! !!../../node_modules/css-loader/dist/cjs.js??ruleSet[1].rules[9].oneOf[1].use[1]!../../node_modules/postcss-loader/dist/cjs.js??ruleSet[1].rules[9].oneOf[1].use[2]!../../node_modules/sass-loader/dist/cjs.js??ruleSet[1].rules[9].oneOf[1].use[3]!./index.scss */ "./node_modules/css-loader/dist/cjs.js??ruleSet[1].rules[9].oneOf[1].use[1]!./node_modules/postcss-loader/dist/cjs.js??ruleSet[1].rules[9].oneOf[1].use[2]!./node_modules/sass-loader/dist/cjs.js??ruleSet[1].rules[9].oneOf[1].use[3]!./resources/sass/index.scss"); 67656 67657 67658 67659var options = {}; 67660 67661options.insert = "head"; 67662options.singleton = false; 67663 67664var update = _node_modules_style_loader_dist_runtime_injectStylesIntoStyleTag_js__WEBPACK_IMPORTED_MODULE_0___default()(_node_modules_css_loader_dist_cjs_js_ruleSet_1_rules_9_oneOf_1_use_1_node_modules_postcss_loader_dist_cjs_js_ruleSet_1_rules_9_oneOf_1_use_2_node_modules_sass_loader_dist_cjs_js_ruleSet_1_rules_9_oneOf_1_use_3_index_scss__WEBPACK_IMPORTED_MODULE_1__["default"], options); 67665 67666 67667 67668/* harmony default export */ const __WEBPACK_DEFAULT_EXPORT__ = (_node_modules_css_loader_dist_cjs_js_ruleSet_1_rules_9_oneOf_1_use_1_node_modules_postcss_loader_dist_cjs_js_ruleSet_1_rules_9_oneOf_1_use_2_node_modules_sass_loader_dist_cjs_js_ruleSet_1_rules_9_oneOf_1_use_3_index_scss__WEBPACK_IMPORTED_MODULE_1__["default"].locals || {}); 67669 67670/***/ }), 67671
vendor: 7,200 bytes, lines 67672-67950
67672/***/ "./node_modules/style-loader/dist/runtime/injectStylesIntoStyleTag.js": 67673/*!****************************************************************************!*\ 67674 !*** ./node_modules/style-loader/dist/runtime/injectStylesIntoStyleTag.js ***! 67675 \****************************************************************************/ 67676/***/ ((module, __unused_webpack_exports, __webpack_require__) => { 67677 67678"use strict"; 67679 67680 67681var isOldIE = function isOldIE() { 67682 var memo; 67683 return function memorize() { 67684 if (typeof memo === 'undefined') { 67685 // Test for IE <= 9 as proposed by Browserhacks 67686 // @see http://browserhacks.com/#hack-e71d8692f65334173fee715c222cb805 67687 // Tests for existence of standard globals is to allow style-loader 67688 // to operate correctly into non-standard environments 67689 // @see https://github.com/webpack-contrib/style-loader/issues/177 67690 memo = Boolean(window && document && document.all && !window.atob); 67691 } 67692 67693 return memo; 67694 }; 67695}(); 67696 67697var getTarget = function getTarget() { 67698 var memo = {}; 67699 return function memorize(target) { 67700 if (typeof memo[target] === 'undefined') { 67701 var styleTarget = document.querySelector(target); // Special case to return head of iframe instead of iframe itself 67702 67703 if (window.HTMLIFrameElement && styleTarget instanceof window.HTMLIFrameElement) { 67704 try { 67705 // This will throw an exception if access to iframe is blocked 67706 // due to cross-origin restrictions 67707 styleTarget = styleTarget.contentDocument.head; 67708 } catch (e) { 67709 // istanbul ignore next 67710 styleTarget = null; 67711 } 67712 } 67713 67714 memo[target] = styleTarget; 67715 } 67716 67717 return memo[target]; 67718 }; 67719}(); 67720 67721var stylesInDom = []; 67722 67723function getIndexByIdentifier(identifier) { 67724 var result = -1; 67725 67726 for (var i = 0; i < stylesInDom.length; i++) { 67727 if (stylesInDom[i].identifier === identifier) { 67728 result = i; 67729 break; 67730 } 67731 } 67732 67733 return result; 67734} 67735 67736function modulesToDom(list, options) { 67737 var idCountMap = {}; 67738 var identifiers = []; 67739 67740 for (var i = 0; i < list.length; i++) { 67741 var item = list[i]; 67742 var id = options.base ? item[0] + options.base : item[0]; 67743 var count = idCountMap[id] || 0; 67744 var identifier = "".concat(id, " ").concat(count); 67745 idCountMap[id] = count + 1; 67746 var index = getIndexByIdentifier(identifier); 67747 var obj = { 67748 css: item[1], 67749 media: item[2], 67750 sourceMap: item[3] 67751 }; 67752 67753 if (index !== -1) { 67754 stylesInDom[index].references++; 67755 stylesInDom[index].updater(obj); 67756 } else { 67757 stylesInDom.push({ 67758 identifier: identifier, 67759 updater: addStyle(obj, options), 67760 references: 1 67761 }); 67762 } 67763 67764 identifiers.push(identifier); 67765 } 67766 67767 return identifiers; 67768} 67769 67770function insertStyleElement(options) { 67771 var style = document.createElement('style'); 67772 var attributes = options.attributes || {}; 67773 67774 if (typeof attributes.nonce === 'undefined') { 67775 var nonce = true ? __webpack_require__.nc : 0; 67776 67777 if (nonce) { 67778 attributes.nonce = nonce; 67779 } 67780 } 67781 67782 Object.keys(attributes).forEach(function (key) { 67783 style.setAttribute(key, attributes[key]); 67784 }); 67785 67786 if (typeof options.insert === 'function') { 67787 options.insert(style); 67788 } else { 67789 var target = getTarget(options.insert || 'head'); 67790 67791 if (!target) { 67792 throw new Error("Couldn't find a style target. This probably means that the value for the 'insert' parameter is invalid."); 67793 } 67794 67795 target.appendChild(style); 67796 } 67797 67798 return style; 67799} 67800 67801function removeStyleElement(style) { 67802 // istanbul ignore if 67803 if (style.parentNode === null) { 67804 return false; 67805 } 67806 67807 style.parentNode.removeChild(style); 67808} 67809/* istanbul ignore next */ 67810 67811 67812var replaceText = function replaceText() { 67813 var textStore = []; 67814 return function replace(index, replacement) { 67815 textStore[index] = replacement; 67816 return textStore.filter(Boolean).join('\n'); 67817 }; 67818}(); 67819 67820function applyToSingletonTag(style, index, remove, obj) { 67821 var css = remove ? '' : obj.media ? "@media ".concat(obj.media, " {").concat(obj.css, "}") : obj.css; // For old IE 67822 67823 /* istanbul ignore if */ 67824 67825 if (style.styleSheet) { 67826 style.styleSheet.cssText = replaceText(index, css); 67827 } else { 67828 var cssNode = document.createTextNode(css); 67829 var childNodes = style.childNodes; 67830 67831 if (childNodes[index]) { 67832 style.removeChild(childNodes[index]); 67833 } 67834 67835 if (childNodes.length) { 67836 style.insertBefore(cssNode, childNodes[index]); 67837 } else { 67838 style.appendChild(cssNode); 67839 } 67840 } 67841} 67842 67843function applyToTag(style, options, obj) { 67844 var css = obj.css; 67845 var media = obj.media; 67846 var sourceMap = obj.sourceMap; 67847 67848 if (media) { 67849 style.setAttribute('media', media); 67850 } else { 67851 style.removeAttribute('media'); 67852 } 67853 67854 if (sourceMap && typeof btoa !== 'undefined') { 67855 css += "\n/*# sourceMappingURL=data:application/json;base64,".concat(btoa(unescape(encodeURIComponent(JSON.stringify(sourceMap)))), " */"); 67856 } // For old IE 67857 67858 /* istanbul ignore if */ 67859 67860 67861 if (style.styleSheet) { 67862 style.styleSheet.cssText = css; 67863 } else { 67864 while (style.firstChild) { 67865 style.removeChild(style.firstChild); 67866 } 67867 67868 style.appendChild(document.createTextNode(css)); 67869 } 67870} 67871 67872var singleton = null; 67873var singletonCounter = 0; 67874 67875function addStyle(obj, options) { 67876 var style; 67877 var update; 67878 var remove; 67879 67880 if (options.singleton) { 67881 var styleIndex = singletonCounter++; 67882 style = singleton || (singleton = insertStyleElement(options)); 67883 update = applyToSingletonTag.bind(null, style, styleIndex, false); 67884 remove = applyToSingletonTag.bind(null, style, styleIndex, true); 67885 } else { 67886 style = insertStyleElement(options); 67887 update = applyToTag.bind(null, style, options); 67888 67889 remove = function remove() { 67890 removeStyleElement(style); 67891 }; 67892 } 67893 67894 update(obj); 67895 return function updateStyle(newObj) { 67896 if (newObj) { 67897 if (newObj.css === obj.css && newObj.media === obj.media && newObj.sourceMap === obj.sourceMap) { 67898 return; 67899 } 67900 67901 update(obj = newObj); 67902 } else { 67903 remove(); 67904 } 67905 }; 67906} 67907 67908module.exports = function (list, options) { 67909 options = options || {}; // Force single-tag solution on IE6-9, which has a hard limit on the # of <style> 67910 // tags it will allow on a page 67911 67912 if (!options.singleton && typeof options.singleton !== 'boolean') { 67913 options.singleton = isOldIE(); 67914 } 67915 67916 list = list || []; 67917 var lastIdentifiers = modulesToDom(list, options); 67918 return function update(newList) { 67919 newList = newList || []; 67920 67921 if (Object.prototype.toString.call(newList) !== '[object Array]') { 67922 return; 67923 } 67924 67925 for (var i = 0; i < lastIdentifiers.length; i++) { 67926 var identifier = lastIdentifiers[i]; 67927 var index = getIndexByIdentifier(identifier); 67928 stylesInDom[index].references--; 67929 } 67930 67931 var newLastIdentifiers = modulesToDom(newList, options); 67932 67933 for (var _i = 0; _i < lastIdentifiers.length; _i++) { 67934 var _identifier = lastIdentifiers[_i]; 67935 67936 var _index = getIndexByIdentifier(_identifier); 67937 67938 if (stylesInDom[_index].references === 0) { 67939 stylesInDom[_index].updater(); 67940 67941 stylesInDom.splice(_index, 1); 67942 } 67943 } 67944 67945 lastIdentifiers = newLastIdentifiers; 67946 }; 67947}; 67948 67949/***/ }), 67950
vendor: 1,026 bytes, lines 67951-67999
67951/***/ "./node_modules/toggle-selection/index.js": 67952/*!************************************************!*\ 67953 !*** ./node_modules/toggle-selection/index.js ***! 67954 \************************************************/ 67955/***/ ((module) => { 67956 67957 67958module.exports = function () { 67959 var selection = document.getSelection(); 67960 if (!selection.rangeCount) { 67961 return function () {}; 67962 } 67963 var active = document.activeElement; 67964 67965 var ranges = []; 67966 for (var i = 0; i < selection.rangeCount; i++) { 67967 ranges.push(selection.getRangeAt(i)); 67968 } 67969 67970 switch (active.tagName.toUpperCase()) { // .toUpperCase handles XHTML 67971 case 'INPUT': 67972 case 'TEXTAREA': 67973 active.blur(); 67974 break; 67975 67976 default: 67977 active = null; 67978 break; 67979 } 67980 67981 selection.removeAllRanges(); 67982 return function () { 67983 selection.type === 'Caret' && 67984 selection.removeAllRanges(); 67985 67986 if (!selection.rangeCount) { 67987 ranges.forEach(function(range) { 67988 selection.addRange(range); 67989 }); 67990 } 67991 67992 active && 67993 active.focus(); 67994 }; 67995}; 67996 67997 67998/***/ }), 67999
vendor: 1,880 bytes, lines 68000-68084
68000/***/ "./node_modules/classnames/index.js": 68001/*!******************************************!*\ 68002 !*** ./node_modules/classnames/index.js ***! 68003 \******************************************/ 68004/***/ ((module, exports) => { 68005 68006var __WEBPACK_AMD_DEFINE_ARRAY__, __WEBPACK_AMD_DEFINE_RESULT__;/*! 68007 Copyright (c) 2018 Jed Watson. 68008 Licensed under the MIT License (MIT), see 68009 http://jedwatson.github.io/classnames 68010*/ 68011/* global define */ 68012 68013(function () { 68014 'use strict'; 68015 68016 var hasOwn = {}.hasOwnProperty; 68017 68018 function classNames () { 68019 var classes = ''; 68020 68021 for (var i = 0; i < arguments.length; i++) { 68022 var arg = arguments[i]; 68023 if (arg) { 68024 classes = appendClass(classes, parseValue(arg)); 68025 } 68026 } 68027 68028 return classes; 68029 } 68030 68031 function parseValue (arg) { 68032 if (typeof arg === 'string' || typeof arg === 'number') { 68033 return arg; 68034 } 68035 68036 if (typeof arg !== 'object') { 68037 return ''; 68038 } 68039 68040 if (Array.isArray(arg)) { 68041 return classNames.apply(null, arg); 68042 } 68043 68044 if (arg.toString !== Object.prototype.toString && !arg.toString.toString().includes('[native code]')) { 68045 return arg.toString(); 68046 } 68047 68048 var classes = ''; 68049 68050 for (var key in arg) { 68051 if (hasOwn.call(arg, key) && arg[key]) { 68052 classes = appendClass(classes, key); 68053 } 68054 } 68055 68056 return classes; 68057 } 68058 68059 function appendClass (value, newClass) { 68060 if (!newClass) { 68061 return value; 68062 } 68063 68064 if (value) { 68065 return value + ' ' + newClass; 68066 } 68067 68068 return value + newClass; 68069 } 68070 68071 if ( true && module.exports) { 68072 classNames.default = classNames; 68073 module.exports = classNames; 68074 } else if (true) { 68075 // register as 'classnames', consistent with npm package name 68076 !(__WEBPACK_AMD_DEFINE_ARRAY__ = [], __WEBPACK_AMD_DEFINE_RESULT__ = (function () { 68077 return classNames; 68078 }).apply(exports, __WEBPACK_AMD_DEFINE_ARRAY__), 68079 __WEBPACK_AMD_DEFINE_RESULT__ !== undefined && (module.exports = __WEBPACK_AMD_DEFINE_RESULT__)); 68080 } else {} 68081}()); 68082 68083 68084/***/ })
vendor: 5,076 bytes, lines 68084-68208
68084 68085 68086/******/ }); 68087/************************************************************************/ 68088/******/ // The module cache 68089/******/ var __webpack_module_cache__ = {}; 68090/******/ 68091/******/ // The require function 68092/******/ function __webpack_require__(moduleId) { 68093/******/ // Check if module is in cache 68094/******/ var cachedModule = __webpack_module_cache__[moduleId]; 68095/******/ if (cachedModule !== undefined) { 68096/******/ return cachedModule.exports; 68097/******/ } 68098/******/ // Create a new module (and put it into the cache) 68099/******/ var module = __webpack_module_cache__[moduleId] = { 68100/******/ id: moduleId, 68101/******/ // no module.loaded needed 68102/******/ exports: {} 68103/******/ }; 68104/******/ 68105/******/ // Execute the module function 68106/******/ __webpack_modules__[moduleId].call(module.exports, module, module.exports, __webpack_require__); 68107/******/ 68108/******/ // Return the exports of the module 68109/******/ return module.exports; 68110/******/ } 68111/******/ 68112/************************************************************************/ 68113/******/ /* webpack/runtime/compat get default export */ 68114/******/ (() => { 68115/******/ // getDefaultExport function for compatibility with non-harmony modules 68116/******/ __webpack_require__.n = (module) => { 68117/******/ var getter = module && module.__esModule ? 68118/******/ () => (module['default']) : 68119/******/ () => (module); 68120/******/ __webpack_require__.d(getter, { a: getter }); 68121/******/ return getter; 68122/******/ }; 68123/******/ })(); 68124/******/ 68125/******/ /* webpack/runtime/create fake namespace object */ 68126/******/ (() => { 68127/******/ var getProto = Object.getPrototypeOf ? (obj) => (Object.getPrototypeOf(obj)) : (obj) => (obj.__proto__); 68128/******/ var leafPrototypes; 68129/******/ // create a fake namespace object 68130/******/ // mode & 1: value is a module id, require it 68131/******/ // mode & 2: merge all properties of value into the ns 68132/******/ // mode & 4: return value when already ns object 68133/******/ // mode & 16: return value when it's Promise-like 68134/******/ // mode & 8|1: behave like require 68135/******/ __webpack_require__.t = function(value, mode) { 68136/******/ if(mode & 1) value = this(value); 68137/******/ if(mode & 8) return value; 68138/******/ if(typeof value === 'object' && value) { 68139/******/ if((mode & 4) && value.__esModule) return value; 68140/******/ if((mode & 16) && typeof value.then === 'function') return value; 68141/******/ } 68142/******/ var ns = Object.create(null); 68143/******/ __webpack_require__.r(ns); 68144/******/ var def = {}; 68145/******/ leafPrototypes = leafPrototypes || [null, getProto({}), getProto([]), getProto(getProto)]; 68146/******/ for(var current = mode & 2 && value; typeof current == 'object' && !~leafPrototypes.indexOf(current); current = getProto(current)) { 68147/******/ Object.getOwnPropertyNames(current).forEach((key) => (def[key] = () => (value[key]))); 68148/******/ } 68149/******/ def['default'] = () => (value); 68150/******/ __webpack_require__.d(ns, def); 68151/******/ return ns; 68152/******/ }; 68153/******/ })(); 68154/******/ 68155/******/ /* webpack/runtime/define property getters */ 68156/******/ (() => { 68157/******/ // define getter functions for harmony exports 68158/******/ __webpack_require__.d = (exports, definition) => { 68159/******/ for(var key in definition) { 68160/******/ if(__webpack_require__.o(definition, key) && !__webpack_require__.o(exports, key)) { 68161/******/ Object.defineProperty(exports, key, { enumerable: true, get: definition[key] }); 68162/******/ } 68163/******/ } 68164/******/ }; 68165/******/ })(); 68166/******/ 68167/******/ /* webpack/runtime/global */ 68168/******/ (() => { 68169/******/ __webpack_require__.g = (function() { 68170/******/ if (typeof globalThis === 'object') return globalThis; 68171/******/ try { 68172/******/ return this || new Function('return this')(); 68173/******/ } catch (e) { 68174/******/ if (typeof window === 'object') return window; 68175/******/ } 68176/******/ })(); 68177/******/ })(); 68178/******/ 68179/******/ /* webpack/runtime/hasOwnProperty shorthand */ 68180/******/ (() => { 68181/******/ __webpack_require__.o = (obj, prop) => (Object.prototype.hasOwnProperty.call(obj, prop)) 68182/******/ })(); 68183/******/ 68184/******/ /* webpack/runtime/make namespace object */ 68185/******/ (() => { 68186/******/ // define __esModule on exports 68187/******/ __webpack_require__.r = (exports) => { 68188/******/ if(typeof Symbol !== 'undefined' && Symbol.toStringTag) { 68189/******/ Object.defineProperty(exports, Symbol.toStringTag, { value: 'Module' }); 68190/******/ } 68191/******/ Object.defineProperty(exports, '__esModule', { value: true }); 68192/******/ }; 68193/******/ })(); 68194/******/ 68195/******/ /* webpack/runtime/nonce */ 68196/******/ (() => { 68197/******/ __webpack_require__.nc = undefined; 68198/******/ })(); 68199/******/ 68200/************************************************************************/ 68201/******/ 68202/******/ // startup 68203/******/ // Load entry module and return exports 68204/******/ // This entry module is referenced by other modules so it can't be inlined 68205/******/ var __webpack_exports__ = __webpack_require__("./resources/js/index.tsx"); 68206/******/ 68207/******/ })() 68208;
Line numbers count LF bytes from the start of the resource, as the search results do. Vendor segments are library code the classifier recognised; they are stored but not indexed. Bytes are shown as Latin1 characters, one per byte.