{"version":3,"sources":["jsdelivr-header.js","/npm/preact@10.19.3/hooks/src/index.js"],"names":[],"mappings":"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","file":"/npm/preact@10.19.3/hooks/dist/hooks.module.js/+esm","sourceRoot":"","sourcesContent":["/**\n * Bundled by jsDelivr using Rollup v2.79.2 and Terser v5.39.0.\n * Original file: /npm/preact@10.19.3/hooks/dist/hooks.module.js\n *\n * Do NOT use SRI with dynamically generated files! More information: https://www.jsdelivr.com/using-sri-with-dynamic-files\n */\n","import { options } from 'preact';\n\n/** @type {number} */\nlet currentIndex;\n\n/** @type {import('./internal').Component} */\nlet currentComponent;\n\n/** @type {import('./internal').Component} */\nlet previousComponent;\n\n/** @type {number} */\nlet currentHook = 0;\n\n/** @type {Array<import('./internal').Component>} */\nlet afterPaintEffects = [];\n\nlet EMPTY = [];\n\nlet oldBeforeDiff = options._diff;\nlet oldBeforeRender = options._render;\nlet oldAfterDiff = options.diffed;\nlet oldCommit = options._commit;\nlet oldBeforeUnmount = options.unmount;\n\nconst RAF_TIMEOUT = 100;\nlet prevRaf;\n\noptions._diff = vnode => {\n\tcurrentComponent = null;\n\tif (oldBeforeDiff) oldBeforeDiff(vnode);\n};\n\noptions._render = vnode => {\n\tif (oldBeforeRender) oldBeforeRender(vnode);\n\n\tcurrentComponent = vnode._component;\n\tcurrentIndex = 0;\n\n\tconst hooks = currentComponent.__hooks;\n\tif (hooks) {\n\t\tif (previousComponent === currentComponent) {\n\t\t\thooks._pendingEffects = [];\n\t\t\tcurrentComponent._renderCallbacks = [];\n\t\t\thooks._list.forEach(hookItem => {\n\t\t\t\tif (hookItem._nextValue) {\n\t\t\t\t\thookItem._value = hookItem._nextValue;\n\t\t\t\t}\n\t\t\t\thookItem._pendingValue = EMPTY;\n\t\t\t\thookItem._nextValue = hookItem._pendingArgs = undefined;\n\t\t\t});\n\t\t} else {\n\t\t\thooks._pendingEffects.forEach(invokeCleanup);\n\t\t\thooks._pendingEffects.forEach(invokeEffect);\n\t\t\thooks._pendingEffects = [];\n\t\t\tcurrentIndex = 0;\n\t\t}\n\t}\n\tpreviousComponent = currentComponent;\n};\n\noptions.diffed = vnode => {\n\tif (oldAfterDiff) oldAfterDiff(vnode);\n\n\tconst c = vnode._component;\n\tif (c && c.__hooks) {\n\t\tif (c.__hooks._pendingEffects.length) afterPaint(afterPaintEffects.push(c));\n\t\tc.__hooks._list.forEach(hookItem => {\n\t\t\tif (hookItem._pendingArgs) {\n\t\t\t\thookItem._args = hookItem._pendingArgs;\n\t\t\t}\n\t\t\tif (hookItem._pendingValue !== EMPTY) {\n\t\t\t\thookItem._value = hookItem._pendingValue;\n\t\t\t}\n\t\t\thookItem._pendingArgs = undefined;\n\t\t\thookItem._pendingValue = EMPTY;\n\t\t});\n\t}\n\tpreviousComponent = currentComponent = null;\n};\n\noptions._commit = (vnode, commitQueue) => {\n\tcommitQueue.some(component => {\n\t\ttry {\n\t\t\tcomponent._renderCallbacks.forEach(invokeCleanup);\n\t\t\tcomponent._renderCallbacks = component._renderCallbacks.filter(cb =>\n\t\t\t\tcb._value ? invokeEffect(cb) : true\n\t\t\t);\n\t\t} catch (e) {\n\t\t\tcommitQueue.some(c => {\n\t\t\t\tif (c._renderCallbacks) c._renderCallbacks = [];\n\t\t\t});\n\t\t\tcommitQueue = [];\n\t\t\toptions._catchError(e, component._vnode);\n\t\t}\n\t});\n\n\tif (oldCommit) oldCommit(vnode, commitQueue);\n};\n\noptions.unmount = vnode => {\n\tif (oldBeforeUnmount) oldBeforeUnmount(vnode);\n\n\tconst c = vnode._component;\n\tif (c && c.__hooks) {\n\t\tlet hasErrored;\n\t\tc.__hooks._list.forEach(s => {\n\t\t\ttry {\n\t\t\t\tinvokeCleanup(s);\n\t\t\t} catch (e) {\n\t\t\t\thasErrored = e;\n\t\t\t}\n\t\t});\n\t\tc.__hooks = undefined;\n\t\tif (hasErrored) options._catchError(hasErrored, c._vnode);\n\t}\n};\n\n/**\n * Get a hook's state from the currentComponent\n * @param {number} index The index of the hook to get\n * @param {number} type The index of the hook to get\n * @returns {any}\n */\nfunction getHookState(index, type) {\n\tif (options._hook) {\n\t\toptions._hook(currentComponent, index, currentHook || type);\n\t}\n\tcurrentHook = 0;\n\n\t// Largely inspired by:\n\t// * https://github.com/michael-klein/funcy.js/blob/f6be73468e6ec46b0ff5aa3cc4c9baf72a29025a/src/hooks/core_hooks.mjs\n\t// * https://github.com/michael-klein/funcy.js/blob/650beaa58c43c33a74820a3c98b3c7079cf2e333/src/renderer.mjs\n\t// Other implementations to look at:\n\t// * https://codesandbox.io/s/mnox05qp8\n\tconst hooks =\n\t\tcurrentComponent.__hooks ||\n\t\t(currentComponent.__hooks = {\n\t\t\t_list: [],\n\t\t\t_pendingEffects: []\n\t\t});\n\n\tif (index >= hooks._list.length) {\n\t\thooks._list.push({ _pendingValue: EMPTY });\n\t}\n\treturn hooks._list[index];\n}\n\n/**\n * @param {import('./index').StateUpdater<any>} [initialState]\n */\nexport function useState(initialState) {\n\tcurrentHook = 1;\n\treturn useReducer(invokeOrReturn, initialState);\n}\n\n/**\n * @param {import('./index').Reducer<any, any>} reducer\n * @param {import('./index').StateUpdater<any>} initialState\n * @param {(initialState: any) => void} [init]\n * @returns {[ any, (state: any) => void ]}\n */\nexport function useReducer(reducer, initialState, init) {\n\t/** @type {import('./internal').ReducerHookState} */\n\tconst hookState = getHookState(currentIndex++, 2);\n\thookState._reducer = reducer;\n\tif (!hookState._component) {\n\t\thookState._value = [\n\t\t\t!init ? invokeOrReturn(undefined, initialState) : init(initialState),\n\n\t\t\taction => {\n\t\t\t\tconst currentValue = hookState._nextValue\n\t\t\t\t\t? hookState._nextValue[0]\n\t\t\t\t\t: hookState._value[0];\n\t\t\t\tconst nextValue = hookState._reducer(currentValue, action);\n\n\t\t\t\tif (currentValue !== nextValue) {\n\t\t\t\t\thookState._nextValue = [nextValue, hookState._value[1]];\n\t\t\t\t\thookState._component.setState({});\n\t\t\t\t}\n\t\t\t}\n\t\t];\n\n\t\thookState._component = currentComponent;\n\n\t\tif (!currentComponent._hasScuFromHooks) {\n\t\t\tcurrentComponent._hasScuFromHooks = true;\n\t\t\tlet prevScu = currentComponent.shouldComponentUpdate;\n\t\t\tconst prevCWU = currentComponent.componentWillUpdate;\n\n\t\t\t// If we're dealing with a forced update `shouldComponentUpdate` will\n\t\t\t// not be called. But we use that to update the hook values, so we\n\t\t\t// need to call it.\n\t\t\tcurrentComponent.componentWillUpdate = function (p, s, c) {\n\t\t\t\tif (this._force) {\n\t\t\t\t\tlet tmp = prevScu;\n\t\t\t\t\t// Clear to avoid other sCU hooks from being called\n\t\t\t\t\tprevScu = undefined;\n\t\t\t\t\tupdateHookState(p, s, c);\n\t\t\t\t\tprevScu = tmp;\n\t\t\t\t}\n\n\t\t\t\tif (prevCWU) prevCWU.call(this, p, s, c);\n\t\t\t};\n\n\t\t\t// This SCU has the purpose of bailing out after repeated updates\n\t\t\t// to stateful hooks.\n\t\t\t// we store the next value in _nextValue[0] and keep doing that for all\n\t\t\t// state setters, if we have next states and\n\t\t\t// all next states within a component end up being equal to their original state\n\t\t\t// we are safe to bail out for this specific component.\n\t\t\t/**\n\t\t\t *\n\t\t\t * @type {import('./internal').Component[\"shouldComponentUpdate\"]}\n\t\t\t */\n\t\t\t// @ts-ignore - We don't use TS to downtranspile\n\t\t\t// eslint-disable-next-line no-inner-declarations\n\t\t\tfunction updateHookState(p, s, c) {\n\t\t\t\tif (!hookState._component.__hooks) return true;\n\n\t\t\t\tconst stateHooks = hookState._component.__hooks._list.filter(\n\t\t\t\t\tx => x._component\n\t\t\t\t);\n\t\t\t\tconst allHooksEmpty = stateHooks.every(x => !x._nextValue);\n\t\t\t\t// When we have no updated hooks in the component we invoke the previous SCU or\n\t\t\t\t// traverse the VDOM tree further.\n\t\t\t\tif (allHooksEmpty) {\n\t\t\t\t\treturn prevScu ? prevScu.call(this, p, s, c) : true;\n\t\t\t\t}\n\n\t\t\t\t// We check whether we have components with a nextValue set that\n\t\t\t\t// have values that aren't equal to one another this pushes\n\t\t\t\t// us to update further down the tree\n\t\t\t\tlet shouldUpdate = false;\n\t\t\t\tstateHooks.forEach(hookItem => {\n\t\t\t\t\tif (hookItem._nextValue) {\n\t\t\t\t\t\tconst currentValue = hookItem._value[0];\n\t\t\t\t\t\thookItem._value = hookItem._nextValue;\n\t\t\t\t\t\thookItem._nextValue = undefined;\n\t\t\t\t\t\tif (currentValue !== hookItem._value[0]) shouldUpdate = true;\n\t\t\t\t\t}\n\t\t\t\t});\n\n\t\t\t\treturn shouldUpdate || hookState._component.props !== p\n\t\t\t\t\t? prevScu\n\t\t\t\t\t\t? prevScu.call(this, p, s, c)\n\t\t\t\t\t\t: true\n\t\t\t\t\t: false;\n\t\t\t}\n\n\t\t\tcurrentComponent.shouldComponentUpdate = updateHookState;\n\t\t}\n\t}\n\n\treturn hookState._nextValue || hookState._value;\n}\n\n/**\n * @param {import('./internal').Effect} callback\n * @param {any[]} args\n */\nexport function useEffect(callback, args) {\n\t/** @type {import('./internal').EffectHookState} */\n\tconst state = getHookState(currentIndex++, 3);\n\tif (!options._skipEffects && argsChanged(state._args, args)) {\n\t\tstate._value = callback;\n\t\tstate._pendingArgs = args;\n\n\t\tcurrentComponent.__hooks._pendingEffects.push(state);\n\t}\n}\n\n/**\n * @param {import('./internal').Effect} callback\n * @param {any[]} args\n */\nexport function useLayoutEffect(callback, args) {\n\t/** @type {import('./internal').EffectHookState} */\n\tconst state = getHookState(currentIndex++, 4);\n\tif (!options._skipEffects && argsChanged(state._args, args)) {\n\t\tstate._value = callback;\n\t\tstate._pendingArgs = args;\n\n\t\tcurrentComponent._renderCallbacks.push(state);\n\t}\n}\n\nexport function useRef(initialValue) {\n\tcurrentHook = 5;\n\treturn useMemo(() => ({ current: initialValue }), []);\n}\n\n/**\n * @param {object} ref\n * @param {() => object} createHandle\n * @param {any[]} args\n */\nexport function useImperativeHandle(ref, createHandle, args) {\n\tcurrentHook = 6;\n\tuseLayoutEffect(\n\t\t() => {\n\t\t\tif (typeof ref == 'function') {\n\t\t\t\tref(createHandle());\n\t\t\t\treturn () => ref(null);\n\t\t\t} else if (ref) {\n\t\t\t\tref.current = createHandle();\n\t\t\t\treturn () => (ref.current = null);\n\t\t\t}\n\t\t},\n\t\targs == null ? args : args.concat(ref)\n\t);\n}\n\n/**\n * @param {() => any} factory\n * @param {any[]} args\n */\nexport function useMemo(factory, args) {\n\t/** @type {import('./internal').MemoHookState} */\n\tconst state = getHookState(currentIndex++, 7);\n\tif (argsChanged(state._args, args)) {\n\t\tstate._pendingValue = factory();\n\t\tstate._pendingArgs = args;\n\t\tstate._factory = factory;\n\t\treturn state._pendingValue;\n\t}\n\n\treturn state._value;\n}\n\n/**\n * @param {() => void} callback\n * @param {any[]} args\n */\nexport function useCallback(callback, args) {\n\tcurrentHook = 8;\n\treturn useMemo(() => callback, args);\n}\n\n/**\n * @param {import('./internal').PreactContext} context\n */\nexport function useContext(context) {\n\tconst provider = currentComponent.context[context._id];\n\t// We could skip this call here, but than we'd not call\n\t// `options._hook`. We need to do that in order to make\n\t// the devtools aware of this hook.\n\t/** @type {import('./internal').ContextHookState} */\n\tconst state = getHookState(currentIndex++, 9);\n\t// The devtools needs access to the context object to\n\t// be able to pull of the default value when no provider\n\t// is present in the tree.\n\tstate._context = context;\n\tif (!provider) return context._defaultValue;\n\t// This is probably not safe to convert to \"!\"\n\tif (state._value == null) {\n\t\tstate._value = true;\n\t\tprovider.sub(currentComponent);\n\t}\n\treturn provider.props.value;\n}\n\n/**\n * Display a custom label for a custom hook for the devtools panel\n * @type {<T>(value: T, cb?: (value: T) => string | number) => void}\n */\nexport function useDebugValue(value, formatter) {\n\tif (options.useDebugValue) {\n\t\toptions.useDebugValue(formatter ? formatter(value) : value);\n\t}\n}\n\n/**\n * @param {(error: any, errorInfo: import('preact').ErrorInfo) => void} cb\n */\nexport function useErrorBoundary(cb) {\n\t/** @type {import('./internal').ErrorBoundaryHookState} */\n\tconst state = getHookState(currentIndex++, 10);\n\tconst errState = useState();\n\tstate._value = cb;\n\tif (!currentComponent.componentDidCatch) {\n\t\tcurrentComponent.componentDidCatch = (err, errorInfo) => {\n\t\t\tif (state._value) state._value(err, errorInfo);\n\t\t\terrState[1](err);\n\t\t};\n\t}\n\treturn [\n\t\terrState[0],\n\t\t() => {\n\t\t\terrState[1](undefined);\n\t\t}\n\t];\n}\n\nexport function useId() {\n\tconst state = getHookState(currentIndex++, 11);\n\tif (!state._value) {\n\t\t// Grab either the root node or the nearest async boundary node.\n\t\t/** @type {import('./internal.d').VNode} */\n\t\tlet root = currentComponent._vnode;\n\t\twhile (root !== null && !root._mask && root._parent !== null) {\n\t\t\troot = root._parent;\n\t\t}\n\n\t\tlet mask = root._mask || (root._mask = [0, 0]);\n\t\tstate._value = 'P' + mask[0] + '-' + mask[1]++;\n\t}\n\n\treturn state._value;\n}\n/**\n * After paint effects consumer.\n */\nfunction flushAfterPaintEffects() {\n\tlet component;\n\twhile ((component = afterPaintEffects.shift())) {\n\t\tif (!component._parentDom || !component.__hooks) continue;\n\t\ttry {\n\t\t\tcomponent.__hooks._pendingEffects.forEach(invokeCleanup);\n\t\t\tcomponent.__hooks._pendingEffects.forEach(invokeEffect);\n\t\t\tcomponent.__hooks._pendingEffects = [];\n\t\t} catch (e) {\n\t\t\tcomponent.__hooks._pendingEffects = [];\n\t\t\toptions._catchError(e, component._vnode);\n\t\t}\n\t}\n}\n\nlet HAS_RAF = typeof requestAnimationFrame == 'function';\n\n/**\n * Schedule a callback to be invoked after the browser has a chance to paint a new frame.\n * Do this by combining requestAnimationFrame (rAF) + setTimeout to invoke a callback after\n * the next browser frame.\n *\n * Also, schedule a timeout in parallel to the the rAF to ensure the callback is invoked\n * even if RAF doesn't fire (for example if the browser tab is not visible)\n *\n * @param {() => void} callback\n */\nfunction afterNextFrame(callback) {\n\tconst done = () => {\n\t\tclearTimeout(timeout);\n\t\tif (HAS_RAF) cancelAnimationFrame(raf);\n\t\tsetTimeout(callback);\n\t};\n\tconst timeout = setTimeout(done, RAF_TIMEOUT);\n\n\tlet raf;\n\tif (HAS_RAF) {\n\t\traf = requestAnimationFrame(done);\n\t}\n}\n\n// Note: if someone used options.debounceRendering = requestAnimationFrame,\n// then effects will ALWAYS run on the NEXT frame instead of the current one, incurring a ~16ms delay.\n// Perhaps this is not such a big deal.\n/**\n * Schedule afterPaintEffects flush after the browser paints\n * @param {number} newQueueLength\n */\nfunction afterPaint(newQueueLength) {\n\tif (newQueueLength === 1 || prevRaf !== options.requestAnimationFrame) {\n\t\tprevRaf = options.requestAnimationFrame;\n\t\t(prevRaf || afterNextFrame)(flushAfterPaintEffects);\n\t}\n}\n\n/**\n * @param {import('./internal').EffectHookState} hook\n */\nfunction invokeCleanup(hook) {\n\t// A hook cleanup can introduce a call to render which creates a new root, this will call options.vnode\n\t// and move the currentComponent away.\n\tconst comp = currentComponent;\n\tlet cleanup = hook._cleanup;\n\tif (typeof cleanup == 'function') {\n\t\thook._cleanup = undefined;\n\t\tcleanup();\n\t}\n\n\tcurrentComponent = comp;\n}\n\n/**\n * Invoke a Hook's effect\n * @param {import('./internal').EffectHookState} hook\n */\nfunction invokeEffect(hook) {\n\t// A hook call can introduce a call to render which creates a new root, this will call options.vnode\n\t// and move the currentComponent away.\n\tconst comp = currentComponent;\n\thook._cleanup = hook._value();\n\tcurrentComponent = comp;\n}\n\n/**\n * @param {any[]} oldArgs\n * @param {any[]} newArgs\n */\nfunction argsChanged(oldArgs, newArgs) {\n\treturn (\n\t\t!oldArgs ||\n\t\toldArgs.length !== newArgs.length ||\n\t\tnewArgs.some((arg, index) => arg !== oldArgs[index])\n\t);\n}\n\nfunction invokeOrReturn(arg, f) {\n\treturn typeof f == 'function' ? f(arg) : f;\n}\n"]}