@actual-app/web 24.3.0 → 24.4.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (38) hide show
  1. package/build/.vite/manifest.json +27 -17
  2. package/build/index.html +1 -1
  3. package/build/kcab/{kcab.worker.fb5495b79632bd06ea0f.js → kcab.worker.d3576baccc44df86e1d9.js} +57 -57
  4. package/build/kcab/{kcab.worker.fb5495b79632bd06ea0f.js.map → kcab.worker.d3576baccc44df86e1d9.js.map} +1 -1
  5. package/build/static/js/AppliedFilters.6hw_SZMi.chunk.js +2 -0
  6. package/build/static/js/AppliedFilters.6hw_SZMi.chunk.js.map +1 -0
  7. package/build/static/js/{BackgroundImage.Jugq91td.chunk.js → BackgroundImage.UwhfLEYN.chunk.js} +2 -2
  8. package/build/static/js/{BackgroundImage.Jugq91td.chunk.js.map → BackgroundImage.UwhfLEYN.chunk.js.map} +1 -1
  9. package/build/static/js/BalanceTooltip.hDG0UB7U.chunk.js +2 -0
  10. package/build/static/js/BalanceTooltip.hDG0UB7U.chunk.js.map +1 -0
  11. package/build/static/js/ButtonLink.WYXFzja-.chunk.js +2 -0
  12. package/build/static/js/{ButtonLink.ElUV7DMx.chunk.js.map → ButtonLink.WYXFzja-.chunk.js.map} +1 -1
  13. package/build/static/js/ReportRouter.mLx3JUh2.chunk.js +66 -0
  14. package/build/static/js/ReportRouter.mLx3JUh2.chunk.js.map +1 -0
  15. package/build/static/js/import.M8LEm-Nc.chunk.js +2 -0
  16. package/build/static/js/import.M8LEm-Nc.chunk.js.map +1 -0
  17. package/build/static/js/index.MAk9r4yg.js +216 -0
  18. package/build/static/js/index.MAk9r4yg.js.map +1 -0
  19. package/build/static/js/narrow.vxy14QoE.chunk.js +108 -0
  20. package/build/static/js/narrow.vxy14QoE.chunk.js.map +1 -0
  21. package/build/static/js/wide.GDttRuTJ.chunk.js +2 -0
  22. package/build/static/js/wide.GDttRuTJ.chunk.js.map +1 -0
  23. package/build/sw.js +1 -1
  24. package/build/sw.js.map +1 -1
  25. package/package.json +3 -2
  26. package/build/static/js/AppliedFilters.ggJl8zjp.chunk.js +0 -2
  27. package/build/static/js/AppliedFilters.ggJl8zjp.chunk.js.map +0 -1
  28. package/build/static/js/BalanceTooltip.nSDrDsfc.chunk.js +0 -2
  29. package/build/static/js/BalanceTooltip.nSDrDsfc.chunk.js.map +0 -1
  30. package/build/static/js/ButtonLink.ElUV7DMx.chunk.js +0 -2
  31. package/build/static/js/ReportRouter.8mlKGqxC.chunk.js +0 -69
  32. package/build/static/js/ReportRouter.8mlKGqxC.chunk.js.map +0 -1
  33. package/build/static/js/index.O6ABAWXP.js +0 -216
  34. package/build/static/js/index.O6ABAWXP.js.map +0 -1
  35. package/build/static/js/narrow.BvCotSUP.chunk.js +0 -108
  36. package/build/static/js/narrow.BvCotSUP.chunk.js.map +0 -1
  37. package/build/static/js/wide.Puo4nQYF.chunk.js +0 -2
  38. package/build/static/js/wide.Puo4nQYF.chunk.js.map +0 -1
@@ -0,0 +1 @@
1
+ {"version":3,"file":"narrow.vxy14QoE.chunk.js","sources":["../../../../../node_modules/@react-stately/utils/dist/import.mjs","../../../src/icons/v1/ArrowThinLeft.tsx","../../../src/components/SyncRefresh.tsx","../../../src/components/common/Card.tsx","../../../src/components/common/Label.tsx","../../../../../node_modules/react-simple-pull-to-refresh/build/index.esm.js","../../../src/components/mobile/PullToRefresh.tsx","../../../src/components/mobile/budget/ListItem.tsx","../../../src/components/mobile/budget/BudgetTable.jsx","../../../src/components/mobile/budget/index.tsx","../../../src/components/mobile/accounts/Accounts.jsx","../../../../../node_modules/lodash.debounce/index.js","../../../../../node_modules/usehooks-ts/dist/index.js","../../../../../node_modules/@react-stately/collections/dist/import.mjs","../../../../../node_modules/@react-aria/label/dist/import.mjs","../../../../../node_modules/@react-aria/i18n/dist/real-module.mjs","../../../../../node_modules/@react-aria/selection/dist/import.mjs","../../../../../node_modules/@react-aria/listbox/dist/import.mjs","../../../../../node_modules/@react-stately/selection/dist/import.mjs","../../../../../node_modules/@react-stately/list/dist/import.mjs","../../../src/components/mobile/transactions/Option.jsx","../../../src/components/mobile/transactions/ListBoxSection.jsx","../../../src/components/mobile/transactions/ListBox.jsx","../../../src/components/mobile/transactions/Transaction.jsx","../../../src/components/mobile/transactions/TransactionList.jsx","../../../src/components/mobile/accounts/AccountDetails.jsx","../../../src/components/mobile/accounts/Account.jsx"],"sourcesContent":["import {useState as $6imuh$useState, useRef as $6imuh$useRef, useEffect as $6imuh$useEffect, useCallback as $6imuh$useCallback} from \"react\";\n\n/*\n * Copyright 2020 Adobe. All rights reserved.\n * This file is licensed to you under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License. You may obtain a copy\n * of the License at http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software distributed under\n * the License is distributed on an \"AS IS\" BASIS, WITHOUT WARRANTIES OR REPRESENTATIONS\n * OF ANY KIND, either express or implied. See the License for the specific language\n * governing permissions and limitations under the License.\n */ /*\n * Copyright 2020 Adobe. All rights reserved.\n * This file is licensed to you under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License. You may obtain a copy\n * of the License at http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software distributed under\n * the License is distributed on an \"AS IS\" BASIS, WITHOUT WARRANTIES OR REPRESENTATIONS\n * OF ANY KIND, either express or implied. See the License for the specific language\n * governing permissions and limitations under the License.\n */ \nfunction $458b0a5536c1a7cf$export$40bfa8c7b0832715(value, defaultValue, onChange) {\n let [stateValue, setStateValue] = (0, $6imuh$useState)(value || defaultValue);\n let isControlledRef = (0, $6imuh$useRef)(value !== undefined);\n let isControlled = value !== undefined;\n (0, $6imuh$useEffect)(()=>{\n let wasControlled = isControlledRef.current;\n if (wasControlled !== isControlled) console.warn(`WARN: A component changed from ${wasControlled ? \"controlled\" : \"uncontrolled\"} to ${isControlled ? \"controlled\" : \"uncontrolled\"}.`);\n isControlledRef.current = isControlled;\n }, [\n isControlled\n ]);\n let currentValue = isControlled ? value : stateValue;\n let setValue = (0, $6imuh$useCallback)((value, ...args)=>{\n let onChangeCaller = (value, ...onChangeArgs)=>{\n if (onChange) {\n if (!Object.is(currentValue, value)) onChange(value, ...onChangeArgs);\n }\n if (!isControlled) // If uncontrolled, mutate the currentValue local variable so that\n // calling setState multiple times with the same value only emits onChange once.\n // We do not use a ref for this because we specifically _do_ want the value to\n // reset every render, and assigning to a ref in render breaks aborted suspended renders.\n // eslint-disable-next-line react-hooks/exhaustive-deps\n currentValue = value;\n };\n if (typeof value === \"function\") {\n console.warn(\"We can not support a function callback. See Github Issues for details https://github.com/adobe/react-spectrum/issues/2320\");\n // this supports functional updates https://reactjs.org/docs/hooks-reference.html#functional-updates\n // when someone using useControlledState calls setControlledState(myFunc)\n // this will call our useState setState with a function as well which invokes myFunc and calls onChange with the value from myFunc\n // if we're in an uncontrolled state, then we also return the value of myFunc which to setState looks as though it was just called with myFunc from the beginning\n // otherwise we just return the controlled value, which won't cause a rerender because React knows to bail out when the value is the same\n let updateFunction = (oldValue, ...functionArgs)=>{\n let interceptedValue = value(isControlled ? currentValue : oldValue, ...functionArgs);\n onChangeCaller(interceptedValue, ...args);\n if (!isControlled) return interceptedValue;\n return oldValue;\n };\n setStateValue(updateFunction);\n } else {\n if (!isControlled) setStateValue(value);\n onChangeCaller(value, ...args);\n }\n }, [\n isControlled,\n currentValue,\n onChange\n ]);\n return [\n currentValue,\n setValue\n ];\n}\n\n\n/*\n * Copyright 2020 Adobe. All rights reserved.\n * This file is licensed to you under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License. You may obtain a copy\n * of the License at http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software distributed under\n * the License is distributed on an \"AS IS\" BASIS, WITHOUT WARRANTIES OR REPRESENTATIONS\n * OF ANY KIND, either express or implied. See the License for the specific language\n * governing permissions and limitations under the License.\n */ /**\n * Takes a value and forces it to the closest min/max if it's outside. Also forces it to the closest valid step.\n */ function $9446cca9a3875146$export$7d15b64cf5a3a4c4(value, min = -Infinity, max = Infinity) {\n let newValue = Math.min(Math.max(value, min), max);\n return newValue;\n}\nfunction $9446cca9a3875146$export$cb6e0bb50bc19463(value, min, max, step) {\n min = Number(min);\n max = Number(max);\n let remainder = (value - (isNaN(min) ? 0 : min)) % step;\n let snappedValue = Math.abs(remainder) * 2 >= step ? value + Math.sign(remainder) * (step - Math.abs(remainder)) : value - remainder;\n if (!isNaN(min)) {\n if (snappedValue < min) snappedValue = min;\n else if (!isNaN(max) && snappedValue > max) snappedValue = min + Math.floor((max - min) / step) * step;\n } else if (!isNaN(max) && snappedValue > max) snappedValue = Math.floor(max / step) * step;\n // correct floating point behavior by rounding to step precision\n let string = step.toString();\n let index = string.indexOf(\".\");\n let precision = index >= 0 ? string.length - index : 0;\n if (precision > 0) {\n let pow = Math.pow(10, precision);\n snappedValue = Math.round(snappedValue * pow) / pow;\n }\n return snappedValue;\n}\nfunction $9446cca9a3875146$export$b6268554fba451f(value, digits, base = 10) {\n const pow = Math.pow(base, digits);\n return Math.round(value * pow) / pow;\n}\n\n\n\n\nexport {$458b0a5536c1a7cf$export$40bfa8c7b0832715 as useControlledState, $9446cca9a3875146$export$7d15b64cf5a3a4c4 as clamp, $9446cca9a3875146$export$cb6e0bb50bc19463 as snapValueToStep, $9446cca9a3875146$export$b6268554fba451f as toFixedNumber};\n//# sourceMappingURL=module.js.map\n","import * as React from 'react';\nimport type { SVGProps } from 'react';\nexport const SvgArrowThinLeft = (props: SVGProps<SVGSVGElement>) => (\n <svg\n {...props}\n xmlns=\"http://www.w3.org/2000/svg\"\n viewBox=\"0 0 20 20\"\n style={{\n color: 'inherit',\n ...props.style,\n }}\n >\n <path\n d=\"m3.828 9 6.071-6.071-1.414-1.414L0 10l.707.707 7.778 7.778 1.414-1.414L3.828 11H20V9H3.828z\"\n fill=\"currentColor\"\n />\n </svg>\n);\n","import React, { type ReactNode, useState } from 'react';\n\ntype ChildrenProps = {\n refreshing: boolean;\n onRefresh: () => Promise<void>;\n};\ntype SyncRefreshProps = {\n onSync: () => Promise<void>;\n children: (props: ChildrenProps) => ReactNode;\n};\nexport function SyncRefresh({ onSync, children }: SyncRefreshProps) {\n const [syncing, setSyncing] = useState(false);\n\n async function onSync_() {\n setSyncing(true);\n await onSync();\n setSyncing(false);\n }\n\n return <>{children({ refreshing: syncing, onRefresh: onSync_ })}</>;\n}\n","import { type ComponentProps, forwardRef } from 'react';\n\nimport { theme } from '../../style';\n\nimport { View } from './View';\n\ntype CardProps = ComponentProps<typeof View>;\n\nexport const Card = forwardRef<HTMLDivElement, CardProps>(\n ({ children, ...props }, ref) => {\n return (\n <View\n {...props}\n ref={ref}\n style={{\n marginTop: 15,\n marginLeft: 5,\n marginRight: 5,\n borderRadius: 6,\n backgroundColor: theme.cardBackground,\n borderColor: theme.cardBorder,\n boxShadow: '0 1px 2px #9594A8',\n ...props.style,\n }}\n >\n <View\n style={{\n borderRadius: 6,\n overflow: 'hidden',\n }}\n >\n {children}\n </View>\n </View>\n );\n },\n);\n\nCard.displayName = 'Card';\n","import { type ReactNode } from 'react';\n\nimport { type CSSProperties, theme, styles } from '../../style';\n\nimport { Text } from './Text';\n\ntype LabelProps = {\n title: ReactNode;\n style?: CSSProperties;\n};\n\nexport function Label({ title, style }: LabelProps) {\n return (\n <Text\n style={{\n ...styles.text,\n color: theme.tableRowHeaderText,\n textAlign: 'right',\n fontSize: 12,\n marginBottom: 2,\n ...style,\n }}\n >\n {title}\n </Text>\n );\n}\n","import React, { useRef, useEffect } from 'react';\n\nvar DIRECTION;\r\n(function (DIRECTION) {\r\n DIRECTION[DIRECTION[\"UP\"] = -1] = \"UP\";\r\n DIRECTION[DIRECTION[\"DOWN\"] = 1] = \"DOWN\";\r\n})(DIRECTION || (DIRECTION = {}));\n\nfunction isOverflowScrollable(element) {\r\n var overflowType = getComputedStyle(element).overflowY;\r\n if (element === document.scrollingElement && overflowType === 'visible') {\r\n return true;\r\n }\r\n if (overflowType !== 'scroll' && overflowType !== 'auto') {\r\n return false;\r\n }\r\n return true;\r\n}\r\nfunction isScrollable(element, direction) {\r\n if (!isOverflowScrollable(element)) {\r\n return false;\r\n }\r\n if (direction === DIRECTION.DOWN) {\r\n var bottomScroll = element.scrollTop + element.clientHeight;\r\n return bottomScroll < element.scrollHeight;\r\n }\r\n if (direction === DIRECTION.UP) {\r\n return element.scrollTop > 0;\r\n }\r\n throw new Error('unsupported direction');\r\n}\r\n/**\r\n * Returns whether a given element or any of its ancestors (up to rootElement) is scrollable in a given direction.\r\n */\r\nfunction isTreeScrollable(element, direction) {\r\n if (isScrollable(element, direction)) {\r\n return true;\r\n }\r\n if (element.parentElement == null) {\r\n return false;\r\n }\r\n return isTreeScrollable(element.parentElement, direction);\r\n}\n\nfunction styleInject(css, ref) {\n if ( ref === void 0 ) ref = {};\n var insertAt = ref.insertAt;\n\n if (!css || typeof document === 'undefined') { return; }\n\n var head = document.head || document.getElementsByTagName('head')[0];\n var style = document.createElement('style');\n style.type = 'text/css';\n\n if (insertAt === 'top') {\n if (head.firstChild) {\n head.insertBefore(style, head.firstChild);\n } else {\n head.appendChild(style);\n }\n } else {\n head.appendChild(style);\n }\n\n if (style.styleSheet) {\n style.styleSheet.cssText = css;\n } else {\n style.appendChild(document.createTextNode(css));\n }\n}\n\nvar css = \".lds-ellipsis {\\n display: inline-block;\\n position: relative;\\n width: 64px;\\n height: 64px; }\\n\\n.lds-ellipsis div {\\n position: absolute;\\n top: 27px;\\n width: 11px;\\n height: 11px;\\n border-radius: 50%;\\n background: #363636;\\n animation-timing-function: cubic-bezier(0, 1, 1, 0); }\\n\\n.lds-ellipsis div:nth-child(1) {\\n left: 6px;\\n animation: lds-ellipsis1 0.6s infinite; }\\n\\n.lds-ellipsis div:nth-child(2) {\\n left: 6px;\\n animation: lds-ellipsis2 0.6s infinite; }\\n\\n.lds-ellipsis div:nth-child(3) {\\n left: 26px;\\n animation: lds-ellipsis2 0.6s infinite; }\\n\\n.lds-ellipsis div:nth-child(4) {\\n left: 45px;\\n animation: lds-ellipsis3 0.6s infinite; }\\n\\n@keyframes lds-ellipsis1 {\\n 0% {\\n transform: scale(0); }\\n 100% {\\n transform: scale(1); } }\\n\\n@keyframes lds-ellipsis3 {\\n 0% {\\n transform: scale(1); }\\n 100% {\\n transform: scale(0); } }\\n\\n@keyframes lds-ellipsis2 {\\n 0% {\\n transform: translate(0, 0); }\\n 100% {\\n transform: translate(19px, 0); } }\\n\";\nstyleInject(css);\n\n// Source: https://loading.io/css/\r\nvar RefreshingContent = function () {\r\n return (React.createElement(\"div\", { className: \"lds-ellipsis\" },\r\n React.createElement(\"div\", null),\r\n React.createElement(\"div\", null),\r\n React.createElement(\"div\", null),\r\n React.createElement(\"div\", null)));\r\n};\n\nvar PullingContent = function () {\r\n return (React.createElement(\"div\", null,\r\n React.createElement(\"p\", null, \"\\u21A7\\u00A0\\u00A0pull to refresh\\u00A0\\u00A0\\u21A7\")));\r\n};\n\nvar css$1 = \".ptr,\\n.ptr__children {\\n height: 100%;\\n width: 100%;\\n overflow: hidden;\\n -webkit-overflow-scrolling: touch;\\n position: relative; }\\n\\n.ptr.ptr--fetch-more-treshold-breached .ptr__fetch-more {\\n display: block; }\\n\\n.ptr__fetch-more {\\n display: none; }\\n\\n/**\\n * Pull down transition \\n */\\n.ptr__children,\\n.ptr__pull-down {\\n transition: transform 0.2s cubic-bezier(0, 0, 0.31, 1); }\\n\\n.ptr__pull-down {\\n position: absolute;\\n overflow: hidden;\\n left: 0;\\n right: 0;\\n top: 0;\\n visibility: hidden; }\\n .ptr__pull-down > div {\\n display: none; }\\n\\n.ptr--dragging {\\n /**\\n * Hide PullMore content is treshold breached\\n */\\n /**\\n * Otherwize, display content\\n */ }\\n .ptr--dragging.ptr--pull-down-treshold-breached .ptr__pull-down--pull-more {\\n display: none; }\\n .ptr--dragging .ptr__pull-down--pull-more {\\n display: block; }\\n\\n.ptr--pull-down-treshold-breached {\\n /**\\n * Force opacity to 1 is pull down trashold breached\\n */\\n /**\\n * And display loader\\n */ }\\n .ptr--pull-down-treshold-breached .ptr__pull-down {\\n opacity: 1 !important; }\\n .ptr--pull-down-treshold-breached .ptr__pull-down--loading {\\n display: block; }\\n\\n.ptr__loader {\\n margin: 0 auto;\\n text-align: center; }\\n\";\nstyleInject(css$1);\n\nvar PullToRefresh = function (_a) {\r\n var _b = _a.isPullable, isPullable = _b === void 0 ? true : _b, _c = _a.canFetchMore, canFetchMore = _c === void 0 ? false : _c, onRefresh = _a.onRefresh, onFetchMore = _a.onFetchMore, _d = _a.refreshingContent, refreshingContent = _d === void 0 ? React.createElement(RefreshingContent, null) : _d, _e = _a.pullingContent, pullingContent = _e === void 0 ? React.createElement(PullingContent, null) : _e, children = _a.children, _f = _a.pullDownThreshold, pullDownThreshold = _f === void 0 ? 67 : _f, _g = _a.fetchMoreThreshold, fetchMoreThreshold = _g === void 0 ? 100 : _g, _h = _a.maxPullDownDistance, maxPullDownDistance = _h === void 0 ? 95 : _h, // max distance to scroll to trigger refresh\r\n _j = _a.resistance, // max distance to scroll to trigger refresh\r\n resistance = _j === void 0 ? 1 : _j, backgroundColor = _a.backgroundColor, _k = _a.className, className = _k === void 0 ? '' : _k;\r\n var containerRef = useRef(null);\r\n var childrenRef = useRef(null);\r\n var pullDownRef = useRef(null);\r\n var fetchMoreRef = useRef(null);\r\n var pullToRefreshThresholdBreached = false;\r\n var fetchMoreTresholdBreached = false; // if true, fetchMore loader is displayed\r\n var isDragging = false;\r\n var startY = 0;\r\n var currentY = 0;\r\n useEffect(function () {\r\n if (!isPullable || !childrenRef || !childrenRef.current)\r\n return;\r\n var childrenEl = childrenRef.current;\r\n childrenEl.addEventListener('touchstart', onTouchStart, { passive: true });\r\n childrenEl.addEventListener('mousedown', onTouchStart);\r\n childrenEl.addEventListener('touchmove', onTouchMove, { passive: false });\r\n childrenEl.addEventListener('mousemove', onTouchMove);\r\n window.addEventListener('scroll', onScroll);\r\n childrenEl.addEventListener('touchend', onEnd);\r\n childrenEl.addEventListener('mouseup', onEnd);\r\n document.body.addEventListener('mouseleave', onEnd);\r\n return function () {\r\n childrenEl.removeEventListener('touchstart', onTouchStart);\r\n childrenEl.removeEventListener('mousedown', onTouchStart);\r\n childrenEl.removeEventListener('touchmove', onTouchMove);\r\n childrenEl.removeEventListener('mousemove', onTouchMove);\r\n window.removeEventListener('scroll', onScroll);\r\n childrenEl.removeEventListener('touchend', onEnd);\r\n childrenEl.removeEventListener('mouseup', onEnd);\r\n document.body.removeEventListener('mouseleave', onEnd);\r\n };\r\n }, [\r\n children,\r\n isPullable,\r\n onRefresh,\r\n pullDownThreshold,\r\n maxPullDownDistance,\r\n canFetchMore,\r\n fetchMoreThreshold,\r\n ]);\r\n /**\r\n * Check onMount / canFetchMore becomes true\r\n * if fetchMoreThreshold is already breached\r\n */\r\n useEffect(function () {\r\n var _a;\r\n /**\r\n * Check if it is already in fetching more state\r\n */\r\n if (!((_a = containerRef) === null || _a === void 0 ? void 0 : _a.current))\r\n return;\r\n var isAlreadyFetchingMore = containerRef.current.classList.contains('ptr--fetch-more-treshold-breached');\r\n if (isAlreadyFetchingMore)\r\n return;\r\n /**\r\n * Proceed\r\n */\r\n if (canFetchMore && getScrollToBottomValue() < fetchMoreThreshold && onFetchMore) {\r\n containerRef.current.classList.add('ptr--fetch-more-treshold-breached');\r\n fetchMoreTresholdBreached = true;\r\n onFetchMore().then(initContainer).catch(initContainer);\r\n }\r\n }, [canFetchMore, children]);\r\n /**\r\n * Returns distance to bottom of the container\r\n */\r\n var getScrollToBottomValue = function () {\r\n if (!childrenRef || !childrenRef.current)\r\n return -1;\r\n var scrollTop = window.scrollY; // is the pixels hidden in top due to the scroll. With no scroll its value is 0.\r\n var scrollHeight = childrenRef.current.scrollHeight; // is the pixels of the whole container\r\n return scrollHeight - scrollTop - window.innerHeight;\r\n };\r\n var initContainer = function () {\r\n requestAnimationFrame(function () {\r\n /**\r\n * Reset Styles\r\n */\r\n if (childrenRef.current) {\r\n childrenRef.current.style.overflowX = 'hidden';\r\n childrenRef.current.style.overflowY = 'auto';\r\n childrenRef.current.style.transform = \"unset\";\r\n }\r\n if (pullDownRef.current) {\r\n pullDownRef.current.style.opacity = '0';\r\n }\r\n if (containerRef.current) {\r\n containerRef.current.classList.remove('ptr--pull-down-treshold-breached');\r\n containerRef.current.classList.remove('ptr--dragging');\r\n containerRef.current.classList.remove('ptr--fetch-more-treshold-breached');\r\n }\r\n if (pullToRefreshThresholdBreached)\r\n pullToRefreshThresholdBreached = false;\r\n if (fetchMoreTresholdBreached)\r\n fetchMoreTresholdBreached = false;\r\n });\r\n };\r\n var onTouchStart = function (e) {\r\n isDragging = false;\r\n if (e instanceof MouseEvent) {\r\n startY = e.pageY;\r\n }\r\n if (window.TouchEvent && e instanceof TouchEvent) {\r\n startY = e.touches[0].pageY;\r\n }\r\n currentY = startY;\r\n // Check if element can be scrolled\r\n if (e.type === 'touchstart' && isTreeScrollable(e.target, DIRECTION.UP)) {\r\n return;\r\n }\r\n // Top non visible so cancel\r\n if (childrenRef.current.getBoundingClientRect().top < 0) {\r\n return;\r\n }\r\n isDragging = true;\r\n };\r\n var onTouchMove = function (e) {\r\n if (!isDragging) {\r\n return;\r\n }\r\n if (window.TouchEvent && e instanceof TouchEvent) {\r\n currentY = e.touches[0].pageY;\r\n }\r\n else {\r\n currentY = e.pageY;\r\n }\r\n containerRef.current.classList.add('ptr--dragging');\r\n if (currentY < startY) {\r\n isDragging = false;\r\n return;\r\n }\r\n if (e.cancelable) {\r\n e.preventDefault();\r\n }\r\n var yDistanceMoved = Math.min((currentY - startY) / resistance, maxPullDownDistance);\r\n // Limit to trigger refresh has been breached\r\n if (yDistanceMoved >= pullDownThreshold) {\r\n isDragging = true;\r\n pullToRefreshThresholdBreached = true;\r\n containerRef.current.classList.remove('ptr--dragging');\r\n containerRef.current.classList.add('ptr--pull-down-treshold-breached');\r\n }\r\n // maxPullDownDistance breached, stop the animation\r\n if (yDistanceMoved >= maxPullDownDistance) {\r\n return;\r\n }\r\n pullDownRef.current.style.opacity = ((yDistanceMoved) / 65).toString();\r\n childrenRef.current.style.overflow = 'visible';\r\n childrenRef.current.style.transform = \"translate(0px, \" + yDistanceMoved + \"px)\";\r\n pullDownRef.current.style.visibility = 'visible';\r\n };\r\n var onScroll = function (e) {\r\n /**\r\n * Check if component has already called onFetchMore\r\n */\r\n if (fetchMoreTresholdBreached)\r\n return;\r\n /**\r\n * Check if user breached fetchMoreThreshold\r\n */\r\n if (canFetchMore && getScrollToBottomValue() < fetchMoreThreshold && onFetchMore) {\r\n fetchMoreTresholdBreached = true;\r\n containerRef.current.classList.add('ptr--fetch-more-treshold-breached');\r\n onFetchMore().then(initContainer).catch(initContainer);\r\n }\r\n };\r\n var onEnd = function () {\r\n isDragging = false;\r\n startY = 0;\r\n currentY = 0;\r\n // Container has not been dragged enough, put it back to it's initial state\r\n if (!pullToRefreshThresholdBreached) {\r\n if (pullDownRef.current)\r\n pullDownRef.current.style.visibility = 'hidden';\r\n initContainer();\r\n return;\r\n }\r\n if (childrenRef.current) {\r\n childrenRef.current.style.overflow = 'visible';\r\n childrenRef.current.style.transform = \"translate(0px, \" + pullDownThreshold + \"px)\";\r\n }\r\n onRefresh().then(initContainer).catch(initContainer);\r\n };\r\n return (React.createElement(\"div\", { className: \"ptr \" + className, style: { backgroundColor: backgroundColor }, ref: containerRef },\r\n React.createElement(\"div\", { className: \"ptr__pull-down\", ref: pullDownRef },\r\n React.createElement(\"div\", { className: \"ptr__loader ptr__pull-down--loading\" }, refreshingContent),\r\n React.createElement(\"div\", { className: \"ptr__pull-down--pull-more\" }, pullingContent)),\r\n React.createElement(\"div\", { className: \"ptr__children\", ref: childrenRef },\r\n children,\r\n React.createElement(\"div\", { className: \"ptr__fetch-more\", ref: fetchMoreRef },\r\n React.createElement(\"div\", { className: \"ptr__loader ptr__fetch-more--loading\" }, refreshingContent)))));\r\n};\n\nexport default PullToRefresh;\n","import React, { type ComponentProps } from 'react';\nimport BasePullToRefresh from 'react-simple-pull-to-refresh';\n\nimport { css } from 'glamor';\n\ntype PullToRefreshProps = ComponentProps<typeof BasePullToRefresh>;\n\nexport function PullToRefresh(props: PullToRefreshProps) {\n return (\n <div style={{ overflow: 'auto' }}>\n <BasePullToRefresh\n pullDownThreshold={80}\n resistance={2}\n className={String(\n css({\n '& .ptr__pull-down': {\n textAlign: 'center',\n },\n '& .ptr__children': {\n overflow: 'hidden auto',\n },\n }),\n )}\n {...props}\n // Force async because the library errors out when a sync onRefresh method is provided.\n onRefresh={async () => {\n await props.onRefresh?.();\n }}\n />\n </div>\n );\n}\n","import React, { type ComponentProps, type ReactNode } from 'react';\n\nimport { type CSSProperties, theme } from '../../../style';\nimport { View } from '../../common/View';\n\nexport const ROW_HEIGHT = 50;\n\ntype ListItemProps = ComponentProps<typeof View> & {\n children?: ReactNode;\n style: CSSProperties;\n};\n\nexport const ListItem = ({ children, style, ...props }: ListItemProps) => {\n return (\n <View\n style={{\n height: ROW_HEIGHT,\n borderBottomWidth: 1,\n borderColor: theme.tableBorder,\n flexDirection: 'row',\n alignItems: 'center',\n paddingLeft: 10,\n paddingRight: 10,\n zIndex: 1,\n ...style,\n }}\n {...props}\n >\n {children}\n </View>\n );\n};\n","import React, { memo, useRef, useState } from 'react';\nimport { useDispatch } from 'react-redux';\n\nimport memoizeOne from 'memoize-one';\n\nimport { pushModal } from 'loot-core/client/actions';\nimport { rolloverBudget, reportBudget } from 'loot-core/src/client/queries';\nimport * as monthUtils from 'loot-core/src/shared/months';\n\nimport { useFeatureFlag } from '../../../hooks/useFeatureFlag';\nimport { useLocalPref } from '../../../hooks/useLocalPref';\nimport {\n SingleActiveEditFormProvider,\n useSingleActiveEditForm,\n} from '../../../hooks/useSingleActiveEditForm';\nimport {\n SvgArrowThinLeft,\n SvgArrowThinRight,\n SvgDotsHorizontalTriple,\n} from '../../../icons/v1';\nimport { useResponsive } from '../../../ResponsiveProvider';\nimport { theme, styles } from '../../../style';\nimport { BalanceWithCarryover } from '../../budget/BalanceWithCarryover';\nimport { BalanceTooltip as ReportBudgetBalanceTooltip } from '../../budget/report/BalanceTooltip';\nimport { BalanceTooltip as RolloverBudgetBalanceTooltip } from '../../budget/rollover/BalanceTooltip';\nimport { makeAmountGrey } from '../../budget/util';\nimport { Button } from '../../common/Button';\nimport { Card } from '../../common/Card';\nimport { Label } from '../../common/Label';\nimport { Menu } from '../../common/Menu';\nimport { Text } from '../../common/Text';\nimport { View } from '../../common/View';\nimport { Page } from '../../Page';\nimport { CellValue } from '../../spreadsheet/CellValue';\nimport { NamespaceContext } from '../../spreadsheet/NamespaceContext';\nimport { useFormat } from '../../spreadsheet/useFormat';\nimport { useSheetValue } from '../../spreadsheet/useSheetValue';\nimport { Tooltip, useTooltip } from '../../tooltips';\nimport { AmountInput } from '../../util/AmountInput';\nimport { MOBILE_NAV_HEIGHT } from '../MobileNavTabs';\nimport { PullToRefresh } from '../PullToRefresh';\n// import {\n// AmountAccessoryContext,\n// MathOperations\n// } from '../mobile/AmountInput';\n\n// import { DragDrop, Draggable, Droppable, DragDropHighlight } from './dragdrop';\nimport { ListItem, ROW_HEIGHT } from './ListItem';\n\nfunction ToBudget({ toBudget, onClick }) {\n const amount = useSheetValue(toBudget);\n return (\n <Button\n type=\"bare\"\n style={{ flexDirection: 'column', alignItems: 'flex-start' }}\n onClick={onClick}\n >\n <Label\n title={amount < 0 ? 'OVERBUDGETED' : 'TO BUDGET'}\n style={{\n ...styles.underlinedText,\n color: theme.formInputText,\n flexShrink: 0,\n textAlign: 'left',\n }}\n />\n <CellValue\n binding={toBudget}\n type=\"financial\"\n style={{\n ...styles.smallText,\n fontWeight: '500',\n color: amount < 0 ? theme.errorText : theme.formInputText,\n }}\n />\n </Button>\n );\n}\n\nfunction Saved({ projected, onClick }) {\n const binding = projected\n ? reportBudget.totalBudgetedSaved\n : reportBudget.totalSaved;\n\n const saved = useSheetValue(binding) || 0;\n const isNegative = saved < 0;\n\n return (\n <Button\n type=\"bare\"\n style={{\n flexDirection: 'column',\n alignItems: 'flex-start',\n }}\n onClick={onClick}\n >\n {projected ? (\n <Label\n title=\"PROJECTED SAVINGS\"\n style={{\n ...styles.underlinedText,\n color: theme.formInputText,\n textAlign: 'left',\n fontSize: 9,\n }}\n />\n ) : (\n <Label\n title={isNegative ? 'OVERSPENT' : 'SAVED'}\n style={{\n ...styles.underlinedText,\n color: theme.formInputText,\n textAlign: 'left',\n }}\n />\n )}\n\n <CellValue\n binding={binding}\n type=\"financial\"\n style={{\n ...styles.smallText,\n fontWeight: '500',\n color: projected\n ? theme.warningText\n : isNegative\n ? theme.errorTextDark\n : theme.formInputText,\n }}\n />\n </Button>\n );\n}\n\nfunction BudgetCell({\n name,\n binding,\n style,\n textStyle,\n categoryId,\n month,\n onBudgetAction,\n onEdit,\n onBlur,\n isEditing,\n}) {\n const sheetValue = useSheetValue(binding);\n\n function updateBudgetAmount(amount) {\n onBudgetAction?.(month, 'budget-amount', {\n category: categoryId,\n amount,\n });\n }\n\n function onAmountClick() {\n onEdit?.();\n }\n\n return (\n <View style={style}>\n <AmountInput\n value={sheetValue}\n zeroSign=\"+\"\n style={{\n ...(!isEditing && { display: 'none' }),\n height: ROW_HEIGHT,\n transform: 'translateX(6px)',\n }}\n focused={isEditing}\n textStyle={{ ...styles.smallText, ...textStyle }}\n onUpdate={updateBudgetAmount}\n onBlur={onBlur}\n />\n <View\n role=\"button\"\n style={{\n ...(isEditing && { display: 'none' }),\n justifyContent: 'center',\n alignItems: 'flex-end',\n height: ROW_HEIGHT,\n }}\n >\n <CellValue\n binding={binding}\n type=\"financial\"\n style={{\n ...styles.smallText,\n ...textStyle,\n ...styles.underlinedText,\n }}\n getStyle={makeAmountGrey}\n data-testid={name}\n onPointerUp={onAmountClick}\n onPointerDown={e => e.preventDefault()}\n />\n </View>\n </View>\n );\n}\n\n// eslint-disable-next-line @typescript-eslint/no-unused-vars\nfunction ExpenseGroupPreview({ group, pending, style }) {\n return (\n <Card\n style={{\n marginTop: 7,\n marginBottom: 7,\n opacity: pending ? 1 : 0.4,\n }}\n >\n <ExpenseGroupTotals group={group} blank={true} />\n\n {group.categories.map((cat, index) => (\n <ExpenseCategory\n key={cat.id}\n category={cat}\n blank={true}\n index={index}\n />\n ))}\n </Card>\n );\n}\n\n// eslint-disable-next-line @typescript-eslint/no-unused-vars\nfunction ExpenseCategoryPreview({ name, pending, style }) {\n return (\n <ListItem\n style={{\n flex: 1,\n borderColor: 'transparent',\n borderRadius: 4,\n }}\n >\n <Text style={styles.smallText}>{name}</Text>\n </ListItem>\n );\n}\n\nconst ExpenseCategory = memo(function ExpenseCategory({\n type,\n category,\n goal,\n budgeted,\n spent,\n balance,\n carryover,\n index,\n // gestures,\n blank,\n style,\n month,\n onEdit,\n onBudgetAction,\n show3Cols,\n showBudgetedCol,\n}) {\n const opacity = blank ? 0 : 1;\n const balanceTooltip = useTooltip();\n\n const [isEditingBudget, setIsEditingBudget] = useState(false);\n const { onRequestActiveEdit, onClearActiveEdit } = useSingleActiveEditForm();\n\n const onEditBudget = () => {\n onRequestActiveEdit(`${category.id}-budget`, () => {\n setIsEditingBudget(true);\n return () => setIsEditingBudget(false);\n });\n };\n\n const onOpenBalanceActionMenu = () => {\n onRequestActiveEdit(`${category.id}-balance`, () => {\n balanceTooltip.open();\n return () => balanceTooltip.close();\n });\n };\n\n const listItemRef = useRef();\n\n const _onBudgetAction = (monthIndex, action, arg) => {\n onBudgetAction?.(\n monthUtils.getMonthFromIndex(monthUtils.getYear(month), monthIndex),\n action,\n arg,\n );\n };\n\n const content = (\n <ListItem\n style={{\n backgroundColor: 'transparent',\n borderBottomWidth: 0,\n borderTopWidth: index > 0 ? 1 : 0,\n opacity: !!category.hidden ? 0.5 : undefined,\n ...style,\n }}\n data-testid=\"row\"\n innerRef={listItemRef}\n >\n <View role=\"button\" style={{ flex: 1 }}>\n <Text\n style={{\n ...styles.smallText,\n ...styles.underlinedText,\n ...styles.lineClamp(2),\n }}\n onClick={() => onEdit?.(category.id)}\n data-testid=\"category-name\"\n >\n {category.name}\n </Text>\n </View>\n <View\n style={{\n justifyContent: 'center',\n alignItems: 'center',\n flexDirection: 'row',\n opacity,\n }}\n >\n <BudgetCell\n name=\"budgeted\"\n binding={budgeted}\n style={{\n ...(!show3Cols && !showBudgetedCol && { display: 'none' }),\n width: 90,\n }}\n textStyle={{ ...styles.smallText, textAlign: 'right' }}\n categoryId={category.id}\n month={month}\n onBudgetAction={onBudgetAction}\n isEditing={isEditingBudget}\n onEdit={onEditBudget}\n onBlur={onClearActiveEdit}\n />\n <View\n style={{\n ...(!show3Cols && showBudgetedCol && { display: 'none' }),\n justifyContent: 'center',\n alignItems: 'flex-end',\n width: 90,\n height: ROW_HEIGHT,\n }}\n >\n <CellValue\n name=\"spent\"\n binding={spent}\n style={{\n ...styles.smallText,\n textAlign: 'right',\n }}\n getStyle={makeAmountGrey}\n type=\"financial\"\n />\n </View>\n <View\n style={{\n ...styles.noTapHighlight,\n justifyContent: 'center',\n alignItems: 'flex-end',\n width: 90,\n height: ROW_HEIGHT,\n }}\n >\n <span\n role=\"button\"\n onPointerUp={() => onOpenBalanceActionMenu?.()}\n onPointerDown={e => e.preventDefault()}\n >\n <BalanceWithCarryover\n carryover={carryover}\n balance={balance}\n goal={goal}\n budgeted={budgeted}\n balanceStyle={{\n ...styles.smallText,\n ...styles.underlinedText,\n }}\n />\n {balanceTooltip.isOpen &&\n (type === 'report' ? (\n <ReportBudgetBalanceTooltip\n offset={5}\n categoryId={category.id}\n tooltip={balanceTooltip}\n monthIndex={monthUtils.getMonthIndex(month)}\n onBudgetAction={_onBudgetAction}\n onClose={() => {\n onClearActiveEdit();\n }}\n />\n ) : (\n <RolloverBudgetBalanceTooltip\n offset={5}\n categoryId={category.id}\n tooltip={balanceTooltip}\n monthIndex={monthUtils.getMonthIndex(month)}\n onBudgetAction={_onBudgetAction}\n onClose={() => {\n onClearActiveEdit();\n }}\n />\n ))}\n </span>\n </View>\n </View>\n </ListItem>\n );\n\n return <View>{content}</View>;\n\n // <Draggable\n // id={category.id}\n // type=\"category\"\n // preview={({ pending, style }) => (\n // <BudgetCategoryPreview\n // name={category.name}\n // pending={pending}\n // style={style}\n // />\n // )}\n // gestures={gestures}\n // >\n // <Droppable\n // type=\"category\"\n // getActiveStatus={(x, y, { layout }, { id }) => {\n // let pos = (y - layout.y) / layout.height;\n // return pos < 0.5 ? 'top' : 'bottom';\n // }}\n // onDrop={(id, type, droppable, status) =>\n // props.onReorder(id.replace('category:', ''), {\n // aroundCategory: {\n // id: category.id,\n // position: status\n // }\n // })\n // }\n // >\n // {() => content}\n // </Droppable>\n // </Draggable>\n});\n\nconst ExpenseGroupTotals = memo(function ExpenseGroupTotals({\n group,\n budgeted,\n spent,\n balance,\n editMode,\n onEdit,\n blank,\n show3Cols,\n showBudgetedCol,\n}) {\n const opacity = blank ? 0 : 1;\n const listItemRef = useRef();\n\n const content = (\n <ListItem\n style={{\n flexDirection: 'row',\n alignItems: 'center',\n backgroundColor: theme.tableRowHeaderBackground,\n opacity: !!group.hidden ? 0.5 : undefined,\n }}\n data-testid=\"totals\"\n innerRef={listItemRef}\n >\n <View role=\"button\" style={{ flex: 1 }}>\n <Text\n style={{\n ...styles.smallText,\n ...styles.underlinedText,\n ...styles.lineClamp(2),\n fontWeight: '500',\n }}\n onClick={() => onEdit?.(group.id)}\n data-testid=\"name\"\n >\n {group.name}\n </Text>\n </View>\n <View\n style={{\n flexDirection: 'row',\n justifyContent: 'center',\n alignItems: 'center',\n height: ROW_HEIGHT,\n opacity,\n }}\n >\n <View\n style={{\n ...(!show3Cols && !showBudgetedCol && { display: 'none' }),\n width: 90,\n height: ROW_HEIGHT,\n justifyContent: 'center',\n alignItems: 'flex-end',\n }}\n >\n <CellValue\n binding={budgeted}\n style={{\n ...styles.smallText,\n fontWeight: '500',\n textAlign: 'right',\n }}\n type=\"financial\"\n />\n </View>\n <View\n style={{\n ...(!show3Cols && showBudgetedCol && { display: 'none' }),\n width: 90,\n height: ROW_HEIGHT,\n justifyContent: 'center',\n alignItems: 'flex-end',\n }}\n >\n <CellValue\n binding={spent}\n style={{\n ...styles.smallText,\n fontWeight: '500',\n textAlign: 'right',\n }}\n type=\"financial\"\n />\n </View>\n <View\n style={{\n width: 90,\n height: ROW_HEIGHT,\n justifyContent: 'center',\n alignItems: 'flex-end',\n }}\n >\n <CellValue\n binding={balance}\n style={{\n ...styles.smallText,\n fontWeight: '500',\n textAlign: 'right',\n }}\n type=\"financial\"\n />\n </View>\n </View>\n\n {/* {editMode && (\n <View>\n <Button\n onClick={() => onAddCategory(group.id, group.is_income)}\n style={{ padding: 10 }}\n >\n <Add width={15} height={15} />\n </Button>\n </View>\n )} */}\n </ListItem>\n );\n\n if (!editMode) {\n return content;\n }\n\n return content;\n // <Droppable\n // type=\"category\"\n // getActiveStatus={(x, y, { layout }, { id }) => {\n // return 'bottom';\n // }}\n // onDrop={(id, type, droppable, status) =>\n // props.onReorderCategory(id, { inGroup: group.id })\n // }\n // >\n // {() => content}\n // </Droppable>\n});\n\nconst IncomeGroupTotals = memo(function IncomeGroupTotals({\n group,\n budgeted,\n balance,\n style,\n onEdit,\n}) {\n const listItemRef = useRef();\n\n return (\n <ListItem\n style={{\n flexDirection: 'row',\n alignItems: 'center',\n padding: 10,\n backgroundColor: theme.tableRowHeaderBackground,\n opacity: !!group.hidden ? 0.5 : undefined,\n ...style,\n }}\n innerRef={listItemRef}\n >\n <View\n role=\"button\"\n style={{\n flex: 1,\n justifyContent: 'center',\n alignItems: 'flex-start',\n height: ROW_HEIGHT,\n }}\n >\n <Text\n style={{\n ...styles.smallText,\n ...styles.underlinedText,\n ...styles.lineClamp(2),\n fontWeight: '500',\n }}\n onClick={() => onEdit?.(group.id)}\n data-testid=\"name\"\n >\n {group.name}\n </Text>\n </View>\n {budgeted && (\n <View\n style={{\n justifyContent: 'center',\n alignItems: 'flex-end',\n width: 90,\n height: ROW_HEIGHT,\n }}\n >\n <CellValue\n binding={budgeted}\n style={{\n ...styles.smallText,\n textAlign: 'right',\n fontWeight: '500',\n }}\n type=\"financial\"\n />\n </View>\n )}\n <View\n style={{\n justifyContent: 'center',\n alignItems: 'flex-end',\n width: 90,\n height: ROW_HEIGHT,\n }}\n >\n <CellValue\n binding={balance}\n style={{\n ...styles.smallText,\n textAlign: 'right',\n fontWeight: '500',\n }}\n type=\"financial\"\n />\n </View>\n </ListItem>\n );\n});\n\nconst IncomeCategory = memo(function IncomeCategory({\n index,\n category,\n budgeted,\n balance,\n month,\n style,\n onEdit,\n onBudgetAction,\n isEditingBudget,\n onEditBudget,\n}) {\n const listItemRef = useRef();\n\n return (\n <ListItem\n style={{\n flexDirection: 'row',\n alignItems: 'center',\n padding: 10,\n backgroundColor: 'transparent',\n borderBottomWidth: 0,\n borderTopWidth: index > 0 ? 1 : 0,\n opacity: !!category.hidden ? 0.5 : undefined,\n ...style,\n }}\n innerRef={listItemRef}\n >\n <View\n role=\"button\"\n style={{\n flex: 1,\n justifyContent: 'center',\n alignItems: 'flex-start',\n height: ROW_HEIGHT,\n }}\n >\n <Text\n style={{\n ...styles.smallText,\n ...styles.underlinedText,\n ...styles.lineClamp(2),\n }}\n onClick={() => onEdit?.(category.id)}\n data-testid=\"name\"\n >\n {category.name}\n </Text>\n </View>\n {budgeted && (\n <View\n style={{\n justifyContent: 'center',\n alignItems: 'flex-end',\n width: 90,\n height: ROW_HEIGHT,\n }}\n >\n <BudgetCell\n name=\"budgeted\"\n binding={budgeted}\n style={{\n width: 90,\n }}\n textStyle={{ ...styles.smallText, textAlign: 'right' }}\n categoryId={category.id}\n month={month}\n onBudgetAction={onBudgetAction}\n isEditing={isEditingBudget}\n onEdit={onEditBudget}\n />\n {/* <CellValue\n binding={budget}\n style={{\n ...styles.smallText,\n textAlign: 'right',\n }}\n type=\"financial\"\n /> */}\n </View>\n )}\n <View\n style={{\n justifyContent: 'center',\n alignItems: 'flex-end',\n width: 90,\n height: ROW_HEIGHT,\n }}\n >\n <CellValue\n binding={balance}\n style={{\n ...styles.smallText,\n textAlign: 'right',\n }}\n type=\"financial\"\n />\n </View>\n </ListItem>\n );\n});\n\n// export function BudgetAccessoryView() {\n// let emitter = useContext(AmountAccessoryContext);\n\n// return (\n// <View>\n// <View\n// style={{\n// flexDirection: 'row',\n// justifyContent: 'flex-end',\n// alignItems: 'stretch',\n// backgroundColor: colorsm.tableBackground,\n// padding: 5,\n// height: 45\n// }}\n// >\n// <MathOperations emitter={emitter} />\n// <View style={{ flex: 1 }} />\n// <Button\n// onClick={() => emitter.emit('moveUp')}\n// style={{ marginRight: 5 }}\n// data-testid=\"up\"\n// >\n// <ArrowThinUp width={13} height={13} />\n// </Button>\n// <Button\n// onClick={() => emitter.emit('moveDown')}\n// style={{ marginRight: 5 }}\n// data-testid=\"down\"\n// >\n// <ArrowThinDown width={13} height={13} />\n// </Button>\n// <Button onClick={() => emitter.emit('done')} data-testid=\"done\">\n// Done\n// </Button>\n// </View>\n// </View>\n// );\n// }\n\nconst ExpenseGroup = memo(function ExpenseGroup({\n type,\n group,\n editMode,\n onEditGroup,\n onEditCategory,\n // gestures,\n month,\n // onReorderCategory,\n // onReorderGroup,\n onAddCategory,\n onBudgetAction,\n showBudgetedCol,\n show3Cols,\n showHiddenCategories,\n}) {\n function editable(content) {\n if (!editMode) {\n return content;\n }\n\n return content;\n // <Draggable\n // id={group.id}\n // type=\"group\"\n // preview={({ pending, style }) => (\n // <BudgetGroupPreview group={group} pending={pending} style={style} />\n // )}\n // gestures={gestures}\n // >\n // <Droppable\n // type=\"group\"\n // getActiveStatus={(x, y, { layout }, { id }) => {\n // let pos = (y - layout.y) / layout.height;\n // return pos < 0.5 ? 'top' : 'bottom';\n // }}\n // onDrop={(id, type, droppable, status) => {\n // onReorderGroup(id, group.id, status);\n // }}\n // >\n // {() => content}\n // </Droppable>\n // </Draggable>\n }\n\n return editable(\n <Card\n style={{\n marginTop: 7,\n marginBottom: 7,\n }}\n >\n <ExpenseGroupTotals\n group={group}\n showBudgetedCol={showBudgetedCol}\n budgeted={\n type === 'report'\n ? reportBudget.groupBudgeted(group.id)\n : rolloverBudget.groupBudgeted(group.id)\n }\n spent={\n type === 'report'\n ? reportBudget.groupSumAmount(group.id)\n : rolloverBudget.groupSumAmount(group.id)\n }\n balance={\n type === 'report'\n ? reportBudget.groupBalance(group.id)\n : rolloverBudget.groupBalance(group.id)\n }\n show3Cols={show3Cols}\n editMode={editMode}\n onAddCategory={onAddCategory}\n onEdit={onEditGroup}\n // onReorderCategory={onReorderCategory}\n />\n\n {group.categories\n .filter(category => !category.hidden || showHiddenCategories)\n .map((category, index) => {\n return (\n <ExpenseCategory\n key={category.id}\n index={index}\n show3Cols={show3Cols}\n type={type}\n category={category}\n goal={\n type === 'report'\n ? reportBudget.catGoal(category.id)\n : rolloverBudget.catGoal(category.id)\n }\n budgeted={\n type === 'report'\n ? reportBudget.catBudgeted(category.id)\n : rolloverBudget.catBudgeted(category.id)\n }\n spent={\n type === 'report'\n ? reportBudget.catSumAmount(category.id)\n : rolloverBudget.catSumAmount(category.id)\n }\n balance={\n type === 'report'\n ? reportBudget.catBalance(category.id)\n : rolloverBudget.catBalance(category.id)\n }\n carryover={\n type === 'report'\n ? reportBudget.catCarryover(category.id)\n : rolloverBudget.catCarryover(category.id)\n }\n style={{\n backgroundColor: theme.tableBackground,\n }}\n showBudgetedCol={showBudgetedCol}\n editMode={editMode}\n onEdit={onEditCategory}\n // gestures={gestures}\n month={month}\n // onReorder={onReorderCategory}\n onBudgetAction={onBudgetAction}\n />\n );\n })}\n </Card>,\n );\n});\n\nfunction IncomeGroup({\n type,\n group,\n month,\n onAddCategory,\n showHiddenCategories,\n editMode,\n onEditGroup,\n onEditCategory,\n editingBudgetCategoryId,\n onEditCategoryBudget,\n onBudgetAction,\n}) {\n return (\n <View>\n <View\n style={{\n flexDirection: 'row',\n alignItems: 'center',\n justifyContent: 'flex-end',\n marginTop: 50,\n marginBottom: 5,\n marginRight: 14,\n }}\n >\n {type === 'report' && <Label title=\"BUDGETED\" style={{ width: 90 }} />}\n <Label title=\"RECEIVED\" style={{ width: 90 }} />\n </View>\n\n <Card style={{ marginTop: 0 }}>\n <IncomeGroupTotals\n group={group}\n budgeted={\n type === 'report' ? reportBudget.groupBudgeted(group.id) : null\n }\n balance={\n type === 'report'\n ? reportBudget.groupSumAmount(group.id)\n : rolloverBudget.groupSumAmount(group.id)\n }\n style={{\n backgroundColor: theme.tableRowHeaderBackground,\n }}\n onAddCategory={onAddCategory}\n editMode={editMode}\n onEdit={onEditGroup}\n />\n\n {group.categories\n .filter(category => !category.hidden || showHiddenCategories)\n .map((category, index) => {\n return (\n <IncomeCategory\n key={category.id}\n index={index}\n category={category}\n month={month}\n type={type}\n budgeted={\n type === 'report'\n ? reportBudget.catBudgeted(category.id)\n : null\n }\n balance={\n type === 'report'\n ? reportBudget.catSumAmount(category.id)\n : rolloverBudget.catSumAmount(category.id)\n }\n style={{\n backgroundColor: theme.tableBackground,\n }}\n editMode={editMode}\n onEdit={onEditCategory}\n onBudgetAction={onBudgetAction}\n isEditingBudget={editingBudgetCategoryId === category.id}\n onEditBudget={onEditCategoryBudget}\n />\n );\n })}\n </Card>\n </View>\n );\n}\n\nfunction BudgetGroups({\n type,\n categoryGroups,\n onEditGroup,\n onEditCategory,\n editMode,\n gestures,\n month,\n onSaveCategory,\n onDeleteCategory,\n onAddCategory,\n onAddGroup,\n onReorderCategory,\n onReorderGroup,\n onBudgetAction,\n showBudgetedCol,\n show3Cols,\n showHiddenCategories,\n}) {\n const separateGroups = memoizeOne(groups => {\n return {\n incomeGroup: groups.find(group => group.is_income),\n expenseGroups: groups.filter(group => !group.is_income),\n };\n });\n\n const { incomeGroup, expenseGroups } = separateGroups(categoryGroups);\n\n return (\n <SingleActiveEditFormProvider formName=\"mobile-budget-table\">\n <View\n data-testid=\"budget-groups\"\n style={{ flex: '1 0 auto', overflowY: 'auto', paddingBottom: 15 }}\n >\n {expenseGroups\n .filter(group => !group.hidden || showHiddenCategories)\n .map(group => {\n return (\n <ExpenseGroup\n key={group.id}\n type={type}\n group={group}\n showBudgetedCol={showBudgetedCol}\n gestures={gestures}\n month={month}\n editMode={editMode}\n onEditGroup={onEditGroup}\n onEditCategory={onEditCategory}\n onSaveCategory={onSaveCategory}\n onDeleteCategory={onDeleteCategory}\n onAddCategory={onAddCategory}\n onReorderCategory={onReorderCategory}\n onReorderGroup={onReorderGroup}\n onBudgetAction={onBudgetAction}\n show3Cols={show3Cols}\n showHiddenCategories={showHiddenCategories}\n />\n );\n })}\n\n <View\n style={{\n alignItems: 'flex-start',\n justifyContent: 'flex-start',\n }}\n >\n <Button onClick={onAddGroup} style={{ fontSize: 12, margin: 10 }}>\n Add Group\n </Button>\n </View>\n\n {incomeGroup && (\n <IncomeGroup\n type={type}\n group={incomeGroup}\n month={month}\n onAddCategory={onAddCategory}\n onSaveCategory={onSaveCategory}\n onDeleteCategory={onDeleteCategory}\n showHiddenCategories={showHiddenCategories}\n editMode={editMode}\n onEditGroup={onEditGroup}\n onEditCategory={onEditCategory}\n onBudgetAction={onBudgetAction}\n />\n )}\n </View>\n </SingleActiveEditFormProvider>\n );\n}\n\nexport function BudgetTable({\n type,\n categoryGroups,\n month,\n monthBounds,\n editMode,\n // refreshControl,\n onPrevMonth,\n onNextMonth,\n onSaveGroup,\n onDeleteGroup,\n onAddGroup,\n onAddCategory,\n onSaveCategory,\n onDeleteCategory,\n onEditMode,\n onReorderCategory,\n onReorderGroup,\n onShowBudgetSummary,\n onOpenMonthActionMenu,\n onBudgetAction,\n onRefresh,\n onSwitchBudgetType,\n onEditGroup,\n onEditCategory,\n}) {\n const { width } = useResponsive();\n const show3Cols = width >= 360;\n\n // let editMode = false; // neuter editMode -- sorry, not rewriting drag-n-drop right now\n const format = useFormat();\n const dispatch = useDispatch();\n\n const [showSpentColumn = false, setShowSpentColumnPref] = useLocalPref(\n 'mobile.showSpentColumn',\n );\n\n const [showHiddenCategories = false, setShowHiddenCategoriesPref] =\n useLocalPref('budget.showHiddenCategories');\n\n function toggleDisplay() {\n setShowSpentColumnPref(!showSpentColumn);\n }\n\n const buttonStyle = {\n padding: 0,\n backgroundColor: 'transparent',\n borderRadius: 'unset',\n };\n\n const _onSwitchBudgetType = () => {\n dispatch(\n pushModal('switch-budget-type', {\n onSwitch: onSwitchBudgetType,\n }),\n );\n };\n\n const onToggleHiddenCategories = () => {\n setShowHiddenCategoriesPref(!showHiddenCategories);\n };\n\n return (\n <NamespaceContext.Provider value={monthUtils.sheetForMonth(month, type)}>\n <Page\n padding={0}\n title={\n <MonthSelector\n month={month}\n monthBounds={monthBounds}\n onPrevMonth={onPrevMonth}\n onNextMonth={onNextMonth}\n />\n }\n headerRightContent={\n !editMode ? (\n <BudgetPageMenu\n onEditMode={onEditMode}\n onToggleHiddenCategories={onToggleHiddenCategories}\n onSwitchBudgetType={_onSwitchBudgetType}\n />\n ) : (\n <Button\n type=\"bare\"\n hoveredStyle={{\n color: theme.mobileHeaderText,\n background: theme.mobileHeaderTextHover,\n }}\n style={{\n ...styles.noTapHighlight,\n ...styles.text,\n backgroundColor: 'transparent',\n color: theme.mobileHeaderText,\n }}\n onClick={() => onEditMode?.(false)}\n >\n Done\n </Button>\n )\n }\n style={{ flex: 1 }}\n >\n <View\n style={{\n flexDirection: 'row',\n flexShrink: 0,\n padding: 10,\n paddingRight: 14,\n backgroundColor: theme.tableRowHeaderBackground,\n borderBottomWidth: 1,\n borderColor: theme.tableBorder,\n }}\n >\n {type === 'report' ? (\n <Saved\n projected={month >= monthUtils.currentMonth()}\n onClick={onShowBudgetSummary}\n />\n ) : (\n <ToBudget\n toBudget={rolloverBudget.toBudget}\n onClick={onShowBudgetSummary}\n />\n )}\n <View style={{ flex: 1 }} />\n {(show3Cols || !showSpentColumn) && (\n <Button\n type=\"bare\"\n disabled={show3Cols}\n onClick={toggleDisplay}\n style={{\n ...buttonStyle,\n padding: '0 8px',\n margin: '0 -8px',\n background:\n !showSpentColumn && !show3Cols\n ? `linear-gradient(-45deg, ${theme.formInputBackgroundSelection} 8px, transparent 0)`\n : null,\n }}\n >\n <View\n style={{\n flexBasis: 90,\n width: 90,\n justifyContent: 'center',\n alignItems: 'flex-end',\n }}\n >\n <Label\n title=\"BUDGETED\"\n style={{ color: theme.buttonNormalText }}\n />\n <CellValue\n binding={\n type === 'report'\n ? reportBudget.totalBudgetedExpense\n : rolloverBudget.totalBudgeted\n }\n type=\"financial\"\n style={{\n ...styles.smallText,\n color: theme.buttonNormalText,\n textAlign: 'right',\n fontWeight: '500',\n }}\n formatter={value => {\n return format(-parseFloat(value || '0'), 'financial');\n }}\n />\n </View>\n </Button>\n )}\n {(show3Cols || showSpentColumn) && (\n <Button\n type=\"bare\"\n disabled={show3Cols}\n onClick={toggleDisplay}\n style={{\n ...buttonStyle,\n background:\n showSpentColumn && !show3Cols\n ? `linear-gradient(45deg, ${theme.formInputBackgroundSelection} 8px, transparent 0)`\n : null,\n }}\n >\n <View\n style={{\n width: 90,\n justifyContent: 'center',\n alignItems: 'flex-end',\n }}\n >\n <Label title=\"SPENT\" style={{ color: theme.formInputText }} />\n <CellValue\n binding={\n type === 'report'\n ? reportBudget.totalSpent\n : rolloverBudget.totalSpent\n }\n type=\"financial\"\n style={{\n ...styles.smallText,\n color: theme.formInputText,\n textAlign: 'right',\n fontWeight: '500',\n }}\n />\n </View>\n </Button>\n )}\n <View\n style={{\n width: 90,\n justifyContent: 'center',\n alignItems: 'flex-end',\n }}\n >\n <Label title=\"BALANCE\" style={{ color: theme.formInputText }} />\n <CellValue\n binding={\n type === 'report'\n ? reportBudget.totalLeftover\n : rolloverBudget.totalBalance\n }\n type=\"financial\"\n style={{\n ...styles.smallText,\n color: theme.formInputText,\n textAlign: 'right',\n fontWeight: '500',\n }}\n />\n </View>\n </View>\n <PullToRefresh onRefresh={onRefresh}>\n {!editMode ? (\n // <ScrollView\n // ref={el => (this.list = el)}\n // keyboardShouldPersistTaps=\"always\"\n // refreshControl={refreshControl}\n // style={{ backgroundColor: colors.n10 }}\n // automaticallyAdjustContentInsets={false}\n // >\n <View\n data-testid=\"budget-table\"\n style={{\n paddingBottom: MOBILE_NAV_HEIGHT,\n }}\n >\n <BudgetGroups\n type={type}\n categoryGroups={categoryGroups}\n showBudgetedCol={!showSpentColumn}\n show3Cols={show3Cols}\n showHiddenCategories={showHiddenCategories}\n // gestures={gestures}\n month={month}\n editMode={editMode}\n onEditGroup={onEditGroup}\n onEditCategory={onEditCategory}\n onSaveCategory={onSaveCategory}\n onDeleteCategory={onDeleteCategory}\n onAddCategory={onAddCategory}\n onAddGroup={onAddGroup}\n onSaveGroup={onSaveGroup}\n onDeleteGroup={onDeleteGroup}\n onReorderCategory={onReorderCategory}\n onReorderGroup={onReorderGroup}\n onOpenMonthActionMenu={onOpenMonthActionMenu}\n onBudgetAction={onBudgetAction}\n />\n </View>\n ) : (\n // </ScrollView>\n // <DragDrop>\n // {({\n // dragging,\n // onGestureEvent,\n // onHandlerStateChange,\n // scrollRef,\n // onScroll\n // }) => (\n <View data-testid=\"budget-table\">\n <BudgetGroups\n type={type}\n categoryGroups={categoryGroups}\n showBudgetedCol={!showSpentColumn}\n show3Cols={show3Cols}\n showHiddenCategories={showHiddenCategories}\n // gestures={gestures}\n editMode={editMode}\n onEditGroup={onEditGroup}\n onEditCategory={onEditCategory}\n onSaveCategory={onSaveCategory}\n onDeleteCategory={onDeleteCategory}\n onAddCategory={onAddCategory}\n onAddGroup={onAddGroup}\n onSaveGroup={onSaveGroup}\n onDeleteGroup={onDeleteGroup}\n onReorderCategory={onReorderCategory}\n onReorderGroup={onReorderGroup}\n onOpenMonthActionMenu={onOpenMonthActionMenu}\n onBudgetAction={onBudgetAction}\n />\n </View>\n\n // <DragDropHighlight />\n // </DragDrop>\n )}\n </PullToRefresh>\n </Page>\n </NamespaceContext.Provider>\n );\n}\n\nfunction BudgetPageMenu({\n onEditMode,\n onToggleHiddenCategories,\n onSwitchBudgetType,\n}) {\n const tooltip = useTooltip();\n const isReportBudgetEnabled = useFeatureFlag('reportBudget');\n\n const onMenuSelect = name => {\n tooltip.close();\n switch (name) {\n case 'edit-mode':\n onEditMode?.(true);\n break;\n case 'toggle-hidden-categories':\n onToggleHiddenCategories?.();\n break;\n case 'switch-budget-type':\n onSwitchBudgetType?.();\n break;\n default:\n throw new Error(`Unrecognized menu option: ${name}`);\n }\n };\n\n return (\n <>\n <Button\n type=\"bare\"\n style={{\n ...styles.noTapHighlight,\n }}\n hoveredStyle={{\n color: theme.mobileHeaderText,\n background: theme.mobileHeaderTextHover,\n }}\n {...tooltip.getOpenEvents()}\n >\n <SvgDotsHorizontalTriple\n width=\"20\"\n height=\"20\"\n style={{ color: theme.mobileHeaderText }}\n />\n </Button>\n {tooltip.isOpen && (\n <Tooltip\n position=\"bottom-right\"\n width={250}\n style={{ padding: 0 }}\n onClose={tooltip.close}\n >\n <Menu\n onMenuSelect={onMenuSelect}\n items={[\n // Removing for now until we work on mobile category drag and drop.\n // { name: 'edit-mode', text: 'Edit mode' },\n {\n name: 'toggle-hidden-categories',\n text: 'Toggle hidden categories',\n },\n isReportBudgetEnabled && {\n name: 'switch-budget-type',\n text: 'Switch budget type',\n },\n ]}\n />\n </Tooltip>\n )}\n </>\n );\n}\n\nfunction MonthSelector({ month, monthBounds, onPrevMonth, onNextMonth }) {\n const prevEnabled = month > monthBounds.start;\n const nextEnabled = month < monthUtils.subMonths(monthBounds.end, 1);\n\n const arrowButtonStyle = {\n padding: 10,\n margin: 2,\n };\n\n return (\n <View\n style={{\n flex: 1,\n justifyContent: 'center',\n alignItems: 'center',\n flexDirection: 'row',\n }}\n >\n <Button\n type=\"bare\"\n onClick={prevEnabled && onPrevMonth}\n style={{\n ...styles.noTapHighlight,\n ...arrowButtonStyle,\n opacity: prevEnabled ? 1 : 0.6,\n color: theme.mobileHeaderText,\n }}\n hoveredStyle={{\n color: theme.mobileHeaderText,\n background: theme.mobileHeaderTextHover,\n }}\n >\n <SvgArrowThinLeft width=\"15\" height=\"15\" style={{ margin: -5 }} />\n </Button>\n <Text\n style={{\n color: theme.mobileHeaderText,\n textAlign: 'center',\n fontSize: 16,\n fontWeight: 500,\n }}\n >\n {/* eslint-disable-next-line rulesdir/typography */}\n {monthUtils.format(month, \"MMMM ''yy\")}\n </Text>\n <Button\n type=\"bare\"\n onClick={nextEnabled && onNextMonth}\n style={{\n ...styles.noTapHighlight,\n ...arrowButtonStyle,\n opacity: nextEnabled ? 1 : 0.6,\n color: theme.mobileHeaderText,\n }}\n hoveredStyle={{\n color: theme.mobileHeaderText,\n background: theme.mobileHeaderTextHover,\n }}\n >\n <SvgArrowThinRight width=\"15\" height=\"15\" style={{ margin: -5 }} />\n </Button>\n </View>\n );\n}\n","// @ts-strict-ignore\nimport React, { useEffect, useState } from 'react';\nimport { useDispatch } from 'react-redux';\n\nimport {\n applyBudgetAction,\n collapseModals,\n createCategory,\n createGroup,\n deleteCategory,\n deleteGroup,\n getCategories,\n moveCategory,\n moveCategoryGroup,\n pushModal,\n updateCategory,\n updateGroup,\n sync,\n loadPrefs,\n} from 'loot-core/client/actions';\nimport { useSpreadsheet } from 'loot-core/src/client/SpreadsheetProvider';\nimport { send, listen } from 'loot-core/src/platform/client/fetch';\nimport * as monthUtils from 'loot-core/src/shared/months';\nimport {\n type CategoryEntity,\n type CategoryGroupEntity,\n} from 'loot-core/src/types/models';\n\nimport { useCategories } from '../../../hooks/useCategories';\nimport { useLocalPref } from '../../../hooks/useLocalPref';\nimport { useSetThemeColor } from '../../../hooks/useSetThemeColor';\nimport { AnimatedLoading } from '../../../icons/AnimatedLoading';\nimport { theme } from '../../../style';\nimport { prewarmMonth, switchBudgetType } from '../../budget/util';\nimport { View } from '../../common/View';\nimport { SyncRefresh } from '../../SyncRefresh';\n\nimport { BudgetTable } from './BudgetTable';\n\ntype BudgetInnerProps = {\n categories: CategoryEntity[];\n categoryGroups: CategoryGroupEntity[];\n budgetType: 'rollover' | 'report';\n spreadsheet: ReturnType<typeof useSpreadsheet>;\n};\n\nfunction BudgetInner(props: BudgetInnerProps) {\n const { categoryGroups, categories, budgetType, spreadsheet } = props;\n\n const currMonth = monthUtils.currentMonth();\n\n const [bounds, setBounds] = useState({ start: currMonth, end: currMonth });\n const [currentMonth, setCurrentMonth] = useState(currMonth);\n const [initialized, setInitialized] = useState(false);\n const [editMode, setEditMode] = useState(false);\n\n const [_numberFormat] = useLocalPref('numberFormat');\n const numberFormat = _numberFormat || 'comma-dot';\n const [hideFraction = false] = useLocalPref('hideFraction');\n const dispatch = useDispatch();\n\n useEffect(() => {\n async function init() {\n const { start, end } = await send('get-budget-bounds');\n setBounds({ start, end });\n\n await prewarmMonth(budgetType, spreadsheet, currentMonth);\n\n setInitialized(true);\n }\n\n init();\n\n const unlisten = listen('sync-event', ({ type, tables }) => {\n if (\n type === 'success' &&\n (tables.includes('categories') ||\n tables.includes('category_mapping') ||\n tables.includes('category_groups'))\n ) {\n // TODO: is this loading every time?\n dispatch(getCategories());\n }\n });\n\n return () => unlisten();\n }, [budgetType, currentMonth, dispatch, spreadsheet]);\n\n const onBudgetAction = async (month, type, args) => {\n dispatch(applyBudgetAction(month, type, args));\n };\n\n const onShowBudgetSummary = () => {\n if (budgetType === 'report') {\n dispatch(\n pushModal('report-budget-summary', {\n month: currentMonth,\n }),\n );\n } else {\n dispatch(\n pushModal('rollover-budget-summary', {\n month: currentMonth,\n onBudgetAction,\n }),\n );\n }\n };\n\n const onAddGroup = () => {\n dispatch(\n pushModal('new-category-group', {\n onValidate: name => (!name ? 'Name is required.' : null),\n onSubmit: async name => {\n dispatch(createGroup(name));\n },\n }),\n );\n };\n\n const onAddCategory = (groupId, isIncome) => {\n dispatch(\n pushModal('new-category', {\n onValidate: name => (!name ? 'Name is required.' : null),\n onSubmit: async name => {\n dispatch(collapseModals('category-group-menu'));\n dispatch(createCategory(name, groupId, isIncome, false));\n },\n }),\n );\n };\n\n const onSaveGroup = group => {\n dispatch(updateGroup(group));\n };\n\n const onDeleteGroup = async groupId => {\n const group = categoryGroups?.find(g => g.id === groupId);\n\n if (!group) {\n return;\n }\n\n let mustTransfer = false;\n for (const category of group.categories ?? []) {\n if (await send('must-category-transfer', { id: category.id })) {\n mustTransfer = true;\n break;\n }\n }\n\n if (mustTransfer) {\n dispatch(\n pushModal('confirm-category-delete', {\n group: groupId,\n onDelete: transferCategory => {\n dispatch(collapseModals('category-group-menu'));\n dispatch(deleteGroup(groupId, transferCategory));\n },\n }),\n );\n } else {\n dispatch(collapseModals('category-group-menu'));\n dispatch(deleteGroup(groupId));\n }\n };\n\n const onSaveCategory = category => {\n dispatch(updateCategory(category));\n };\n\n const onDeleteCategory = async categoryId => {\n const mustTransfer = await send('must-category-transfer', {\n id: categoryId,\n });\n\n if (mustTransfer) {\n dispatch(\n pushModal('confirm-category-delete', {\n category: categoryId,\n onDelete: transferCategory => {\n if (categoryId !== transferCategory) {\n dispatch(collapseModals('category-menu'));\n dispatch(deleteCategory(categoryId, transferCategory));\n }\n },\n }),\n );\n } else {\n dispatch(collapseModals('category-menu'));\n dispatch(deleteCategory(categoryId));\n }\n };\n\n const onReorderCategory = (id, { inGroup, aroundCategory }) => {\n let groupId, targetId;\n\n if (inGroup) {\n groupId = inGroup;\n } else if (aroundCategory) {\n const { id: originalCatId, position } = aroundCategory;\n\n let catId = originalCatId;\n const group = categoryGroups.find(group =>\n group.categories?.find(cat => cat.id === catId),\n );\n\n if (position === 'bottom') {\n const idx = group?.categories?.findIndex(cat => cat.id === catId) ?? -1;\n catId = group?.categories\n ? idx < group.categories.length - 1\n ? group.categories[idx + 1].id\n : null\n : null;\n }\n\n groupId = group?.id;\n targetId = catId;\n }\n\n dispatch(moveCategory(id, groupId, targetId));\n };\n\n const onReorderGroup = (id, targetId, position) => {\n if (position === 'bottom') {\n const idx = categoryGroups.findIndex(group => group.id === targetId);\n targetId =\n idx < categoryGroups.length - 1 ? categoryGroups[idx + 1].id : null;\n }\n\n dispatch(moveCategoryGroup(id, targetId));\n };\n\n const onPrevMonth = async () => {\n const month = monthUtils.subMonths(currentMonth, 1);\n await prewarmMonth(budgetType, spreadsheet, month);\n setCurrentMonth(month);\n setInitialized(true);\n };\n\n const onNextMonth = async () => {\n const month = monthUtils.addMonths(currentMonth, 1);\n await prewarmMonth(budgetType, spreadsheet, month);\n setCurrentMonth(month);\n setInitialized(true);\n };\n\n // const onOpenMonthActionMenu = () => {\n // const options = [\n // 'Copy last month’s budget',\n // 'Set budgets to zero',\n // 'Set budgets to 3 month average',\n // budgetType === 'report' && 'Apply to all future budgets',\n // ].filter(Boolean);\n\n // props.showActionSheetWithOptions(\n // {\n // options,\n // cancelButtonIndex: options.length - 1,\n // title: 'Actions',\n // },\n // idx => {\n // switch (idx) {\n // case 0:\n // setEditMode(true);\n // break;\n // case 1:\n // onBudgetAction('copy-last');\n // break;\n // case 2:\n // onBudgetAction('set-zero');\n // break;\n // case 3:\n // onBudgetAction('set-3-avg');\n // break;\n // case 4:\n // if (budgetType === 'report') {\n // onBudgetAction('set-all-future');\n // }\n // break;\n // default:\n // }\n // },\n // );\n // };\n\n const onSwitchBudgetType = async () => {\n setInitialized(false);\n\n const newBudgetType = budgetType === 'rollover' ? 'report' : 'rollover';\n await switchBudgetType(\n newBudgetType,\n spreadsheet,\n bounds,\n currentMonth,\n async () => {\n dispatch(loadPrefs());\n },\n );\n\n setInitialized(true);\n };\n\n const onSaveNotes = async (id, notes) => {\n await send('notes-save', { id, note: notes });\n };\n\n const onEditGroupNotes = id => {\n const group = categoryGroups.find(g => g.id === id);\n dispatch(\n pushModal('notes', {\n id,\n name: group.name,\n onSave: onSaveNotes,\n }),\n );\n };\n\n const onEditCategoryNotes = id => {\n const category = categories.find(c => c.id === id);\n dispatch(\n pushModal('notes', {\n id,\n name: category.name,\n onSave: onSaveNotes,\n }),\n );\n };\n\n const onEditGroup = id => {\n const group = categoryGroups.find(g => g.id === id);\n dispatch(\n pushModal('category-group-menu', {\n groupId: group.id,\n onSave: onSaveGroup,\n onAddCategory,\n onEditNotes: onEditGroupNotes,\n onDelete: onDeleteGroup,\n }),\n );\n };\n\n const onEditCategory = id => {\n const category = categories.find(c => c.id === id);\n dispatch(\n pushModal('category-menu', {\n categoryId: category.id,\n onSave: onSaveCategory,\n onEditNotes: onEditCategoryNotes,\n onDelete: onDeleteCategory,\n }),\n );\n };\n\n if (!categoryGroups || !initialized) {\n return (\n <View\n style={{\n flex: 1,\n backgroundColor: theme.mobilePageBackground,\n alignItems: 'center',\n justifyContent: 'center',\n marginBottom: 25,\n }}\n >\n <AnimatedLoading width={25} height={25} />\n </View>\n );\n }\n\n return (\n <SyncRefresh\n onSync={async () => {\n dispatch(sync());\n }}\n >\n {({ onRefresh }) => (\n <BudgetTable\n // This key forces the whole table rerender when the number\n // format changes\n key={`${numberFormat}${hideFraction}`}\n categoryGroups={categoryGroups}\n type={budgetType}\n month={currentMonth}\n monthBounds={bounds}\n editMode={editMode}\n onEditMode={flag => setEditMode(flag)}\n onShowBudgetSummary={onShowBudgetSummary}\n onPrevMonth={onPrevMonth}\n onNextMonth={onNextMonth}\n onSaveGroup={onSaveGroup}\n onDeleteGroup={onDeleteGroup}\n onAddGroup={onAddGroup}\n onAddCategory={onAddCategory}\n onSaveCategory={onSaveCategory}\n onDeleteCategory={onDeleteCategory}\n onReorderCategory={onReorderCategory}\n onReorderGroup={onReorderGroup}\n onOpenMonthActionMenu={() => {}} //onOpenMonthActionMenu}\n onBudgetAction={onBudgetAction}\n onRefresh={onRefresh}\n onSwitchBudgetType={onSwitchBudgetType}\n onEditGroup={onEditGroup}\n onEditCategory={onEditCategory}\n />\n )}\n </SyncRefresh>\n );\n}\n\nexport function Budget() {\n const { list: categories, grouped: categoryGroups } = useCategories();\n const [_budgetType] = useLocalPref('budgetType');\n const budgetType = _budgetType || 'rollover';\n const spreadsheet = useSpreadsheet();\n useSetThemeColor(theme.mobileViewTheme);\n return (\n <BudgetInner\n categoryGroups={categoryGroups}\n categories={categories}\n budgetType={budgetType}\n spreadsheet={spreadsheet}\n />\n );\n}\n","import React, { useState } from 'react';\nimport { useDispatch, useSelector } from 'react-redux';\n\nimport { replaceModal, syncAndDownload } from 'loot-core/src/client/actions';\nimport * as queries from 'loot-core/src/client/queries';\n\nimport { useAccounts } from '../../../hooks/useAccounts';\nimport { useCategories } from '../../../hooks/useCategories';\nimport { useFailedAccounts } from '../../../hooks/useFailedAccounts';\nimport { useLocalPref } from '../../../hooks/useLocalPref';\nimport { useNavigate } from '../../../hooks/useNavigate';\nimport { useSetThemeColor } from '../../../hooks/useSetThemeColor';\nimport { SvgAdd } from '../../../icons/v1';\nimport { theme, styles } from '../../../style';\nimport { Button } from '../../common/Button';\nimport { Text } from '../../common/Text';\nimport { TextOneLine } from '../../common/TextOneLine';\nimport { View } from '../../common/View';\nimport { Page } from '../../Page';\nimport { CellValue } from '../../spreadsheet/CellValue';\nimport { MOBILE_NAV_HEIGHT } from '../MobileNavTabs';\nimport { PullToRefresh } from '../PullToRefresh';\n\nfunction AccountHeader({ name, amount, style = {} }) {\n return (\n <View\n style={{\n flex: 1,\n flexDirection: 'row',\n marginTop: 10,\n marginRight: 10,\n color: theme.pageTextLight,\n width: '100%',\n ...style,\n }}\n >\n <View style={{ flex: 1 }}>\n <Text\n style={{\n ...styles.text,\n textTransform: 'uppercase',\n fontSize: 13,\n }}\n data-testid=\"name\"\n >\n {name}\n </Text>\n </View>\n <CellValue\n binding={amount}\n style={{ ...styles.text, fontSize: 13 }}\n type=\"financial\"\n />\n </View>\n );\n}\n\nfunction AccountCard({\n account,\n updated,\n connected,\n pending,\n failed,\n getBalanceQuery,\n onSelect,\n}) {\n return (\n <View\n style={{\n flex: 1,\n flexDirection: 'row',\n backgroundColor: theme.tableBackground,\n boxShadow: `0 1px 1px ${theme.mobileAccountShadow}`,\n borderRadius: 6,\n marginTop: 10,\n marginRight: 10,\n width: '100%',\n }}\n data-testid=\"account\"\n >\n <Button\n onMouseDown={() => onSelect(account.id)}\n style={{\n flexDirection: 'row',\n border: '1px solid ' + theme.pillBorder,\n flex: 1,\n alignItems: 'center',\n borderRadius: 6,\n '&:active': {\n opacity: 0.1,\n },\n }}\n >\n <View\n style={{\n flex: 1,\n margin: '10px 0',\n }}\n >\n <View\n style={{\n flexDirection: 'row',\n alignItems: 'center',\n }}\n >\n {account.bankId && (\n <View\n style={{\n backgroundColor: pending\n ? theme.sidebarItemBackgroundPending\n : failed\n ? theme.sidebarItemBackgroundFailed\n : theme.sidebarItemBackgroundPositive,\n marginRight: '8px',\n width: 8,\n height: 8,\n borderRadius: 8,\n opacity: connected ? 1 : 0,\n }}\n />\n )}\n <TextOneLine\n style={{\n ...styles.text,\n fontSize: 17,\n fontWeight: 600,\n color: updated ? theme.mobileAccountText : theme.pillText,\n paddingRight: 30,\n }}\n data-testid=\"account-name\"\n >\n {account.name}\n </TextOneLine>\n </View>\n </View>\n <CellValue\n binding={getBalanceQuery(account)}\n type=\"financial\"\n style={{ fontSize: 16, color: 'inherit' }}\n getStyle={value => value < 0 && { color: 'inherit' }}\n data-testid=\"account-balance\"\n />\n </Button>\n </View>\n );\n}\n\nfunction EmptyMessage() {\n return (\n <View style={{ flex: 1, padding: 30 }}>\n <Text style={styles.text}>\n For Actual to be useful, you need to add an account. You can link an\n account to automatically download transactions, or manage it locally\n yourself.\n </Text>\n </View>\n );\n}\n\nfunction AccountList({\n accounts,\n updatedAccounts,\n getBalanceQuery,\n getOnBudgetBalance,\n getOffBudgetBalance,\n onAddAccount,\n onSelectAccount,\n onSync,\n}) {\n const failedAccounts = useFailedAccounts();\n const syncingAccountIds = useSelector(state => state.account.accountsSyncing);\n const budgetedAccounts = accounts.filter(account => account.offbudget === 0);\n const offbudgetAccounts = accounts.filter(account => account.offbudget === 1);\n const noBackgroundColorStyle = {\n backgroundColor: 'transparent',\n color: 'white',\n };\n\n return (\n <Page\n title=\"Accounts\"\n headerRightContent={\n <Button\n type=\"bare\"\n style={{\n color: theme.mobileHeaderText,\n margin: 10,\n }}\n activeStyle={noBackgroundColorStyle}\n hoveredStyle={noBackgroundColorStyle}\n onClick={onAddAccount}\n >\n <SvgAdd width={20} height={20} />\n </Button>\n }\n padding={0}\n style={{\n flex: 1,\n backgroundColor: theme.mobilePageBackground,\n paddingBottom: MOBILE_NAV_HEIGHT,\n }}\n >\n {accounts.length === 0 && <EmptyMessage />}\n <PullToRefresh onRefresh={onSync}>\n <View style={{ margin: 10 }}>\n {budgetedAccounts.length > 0 && (\n <AccountHeader name=\"For Budget\" amount={getOnBudgetBalance()} />\n )}\n {budgetedAccounts.map(acct => (\n <AccountCard\n account={acct}\n key={acct.id}\n updated={updatedAccounts && updatedAccounts.includes(acct.id)}\n connected={!!acct.bank}\n pending={syncingAccountIds.includes(acct.id)}\n failed={failedAccounts && failedAccounts.has(acct.id)}\n getBalanceQuery={getBalanceQuery}\n onSelect={onSelectAccount}\n />\n ))}\n\n {offbudgetAccounts.length > 0 && (\n <AccountHeader\n name=\"Off budget\"\n amount={getOffBudgetBalance()}\n style={{ marginTop: 30 }}\n />\n )}\n {offbudgetAccounts.map(acct => (\n <AccountCard\n account={acct}\n key={acct.id}\n updated={updatedAccounts && updatedAccounts.includes(acct.id)}\n connected={!!acct.bank}\n pending={syncingAccountIds.includes(acct.id)}\n failed={failedAccounts && failedAccounts.has(acct.id)}\n getBalanceQuery={getBalanceQuery}\n onSelect={onSelectAccount}\n />\n ))}\n </View>\n </PullToRefresh>\n </Page>\n );\n}\n\nexport function Accounts() {\n const dispatch = useDispatch();\n const accounts = useAccounts();\n const newTransactions = useSelector(state => state.queries.newTransactions);\n const updatedAccounts = useSelector(state => state.queries.updatedAccounts);\n const [_numberFormat] = useLocalPref('numberFormat');\n const numberFormat = _numberFormat || 'comma-dot';\n const [hideFraction = false] = useLocalPref('hideFraction');\n\n const { list: categories } = useCategories();\n\n const transactions = useState({});\n const navigate = useNavigate();\n\n const onSelectAccount = id => {\n navigate(`/accounts/${id}`);\n };\n\n const onSelectTransaction = transaction => {\n navigate(`/transaction/${transaction}`);\n };\n\n const onAddAccount = () => {\n dispatch(replaceModal('add-account'));\n };\n\n const onSync = () => {\n dispatch(syncAndDownload());\n };\n\n useSetThemeColor(theme.mobileViewTheme);\n\n return (\n <View style={{ flex: 1 }}>\n <AccountList\n // This key forces the whole table rerender when the number\n // format changes\n key={numberFormat + hideFraction}\n accounts={accounts.filter(account => !account.closed)}\n categories={categories}\n transactions={transactions || []}\n updatedAccounts={updatedAccounts}\n newTransactions={newTransactions}\n getBalanceQuery={queries.accountBalance}\n getOnBudgetBalance={queries.budgetedAccountBalance}\n getOffBudgetBalance={queries.offbudgetAccountBalance}\n onAddAccount={onAddAccount}\n onSelectAccount={onSelectAccount}\n onSelectTransaction={onSelectTransaction}\n onSync={onSync}\n />\n </View>\n );\n}\n","/**\n * lodash (Custom Build) <https://lodash.com/>\n * Build: `lodash modularize exports=\"npm\" -o ./`\n * Copyright jQuery Foundation and other contributors <https://jquery.org/>\n * Released under MIT license <https://lodash.com/license>\n * Based on Underscore.js 1.8.3 <http://underscorejs.org/LICENSE>\n * Copyright Jeremy Ashkenas, DocumentCloud and Investigative Reporters & Editors\n */\n\n/** Used as the `TypeError` message for \"Functions\" methods. */\nvar FUNC_ERROR_TEXT = 'Expected a function';\n\n/** Used as references for various `Number` constants. */\nvar NAN = 0 / 0;\n\n/** `Object#toString` result references. */\nvar symbolTag = '[object Symbol]';\n\n/** Used to match leading and trailing whitespace. */\nvar reTrim = /^\\s+|\\s+$/g;\n\n/** Used to detect bad signed hexadecimal string values. */\nvar reIsBadHex = /^[-+]0x[0-9a-f]+$/i;\n\n/** Used to detect binary string values. */\nvar reIsBinary = /^0b[01]+$/i;\n\n/** Used to detect octal string values. */\nvar reIsOctal = /^0o[0-7]+$/i;\n\n/** Built-in method references without a dependency on `root`. */\nvar freeParseInt = parseInt;\n\n/** Detect free variable `global` from Node.js. */\nvar freeGlobal = typeof global == 'object' && global && global.Object === Object && global;\n\n/** Detect free variable `self`. */\nvar freeSelf = typeof self == 'object' && self && self.Object === Object && self;\n\n/** Used as a reference to the global object. */\nvar root = freeGlobal || freeSelf || Function('return this')();\n\n/** Used for built-in method references. */\nvar objectProto = Object.prototype;\n\n/**\n * Used to resolve the\n * [`toStringTag`](http://ecma-international.org/ecma-262/7.0/#sec-object.prototype.tostring)\n * of values.\n */\nvar objectToString = objectProto.toString;\n\n/* Built-in method references for those with the same name as other `lodash` methods. */\nvar nativeMax = Math.max,\n nativeMin = Math.min;\n\n/**\n * Gets the timestamp of the number of milliseconds that have elapsed since\n * the Unix epoch (1 January 1970 00:00:00 UTC).\n *\n * @static\n * @memberOf _\n * @since 2.4.0\n * @category Date\n * @returns {number} Returns the timestamp.\n * @example\n *\n * _.defer(function(stamp) {\n * console.log(_.now() - stamp);\n * }, _.now());\n * // => Logs the number of milliseconds it took for the deferred invocation.\n */\nvar now = function() {\n return root.Date.now();\n};\n\n/**\n * Creates a debounced function that delays invoking `func` until after `wait`\n * milliseconds have elapsed since the last time the debounced function was\n * invoked. The debounced function comes with a `cancel` method to cancel\n * delayed `func` invocations and a `flush` method to immediately invoke them.\n * Provide `options` to indicate whether `func` should be invoked on the\n * leading and/or trailing edge of the `wait` timeout. The `func` is invoked\n * with the last arguments provided to the debounced function. Subsequent\n * calls to the debounced function return the result of the last `func`\n * invocation.\n *\n * **Note:** If `leading` and `trailing` options are `true`, `func` is\n * invoked on the trailing edge of the timeout only if the debounced function\n * is invoked more than once during the `wait` timeout.\n *\n * If `wait` is `0` and `leading` is `false`, `func` invocation is deferred\n * until to the next tick, similar to `setTimeout` with a timeout of `0`.\n *\n * See [David Corbacho's article](https://css-tricks.com/debouncing-throttling-explained-examples/)\n * for details over the differences between `_.debounce` and `_.throttle`.\n *\n * @static\n * @memberOf _\n * @since 0.1.0\n * @category Function\n * @param {Function} func The function to debounce.\n * @param {number} [wait=0] The number of milliseconds to delay.\n * @param {Object} [options={}] The options object.\n * @param {boolean} [options.leading=false]\n * Specify invoking on the leading edge of the timeout.\n * @param {number} [options.maxWait]\n * The maximum time `func` is allowed to be delayed before it's invoked.\n * @param {boolean} [options.trailing=true]\n * Specify invoking on the trailing edge of the timeout.\n * @returns {Function} Returns the new debounced function.\n * @example\n *\n * // Avoid costly calculations while the window size is in flux.\n * jQuery(window).on('resize', _.debounce(calculateLayout, 150));\n *\n * // Invoke `sendMail` when clicked, debouncing subsequent calls.\n * jQuery(element).on('click', _.debounce(sendMail, 300, {\n * 'leading': true,\n * 'trailing': false\n * }));\n *\n * // Ensure `batchLog` is invoked once after 1 second of debounced calls.\n * var debounced = _.debounce(batchLog, 250, { 'maxWait': 1000 });\n * var source = new EventSource('/stream');\n * jQuery(source).on('message', debounced);\n *\n * // Cancel the trailing debounced invocation.\n * jQuery(window).on('popstate', debounced.cancel);\n */\nfunction debounce(func, wait, options) {\n var lastArgs,\n lastThis,\n maxWait,\n result,\n timerId,\n lastCallTime,\n lastInvokeTime = 0,\n leading = false,\n maxing = false,\n trailing = true;\n\n if (typeof func != 'function') {\n throw new TypeError(FUNC_ERROR_TEXT);\n }\n wait = toNumber(wait) || 0;\n if (isObject(options)) {\n leading = !!options.leading;\n maxing = 'maxWait' in options;\n maxWait = maxing ? nativeMax(toNumber(options.maxWait) || 0, wait) : maxWait;\n trailing = 'trailing' in options ? !!options.trailing : trailing;\n }\n\n function invokeFunc(time) {\n var args = lastArgs,\n thisArg = lastThis;\n\n lastArgs = lastThis = undefined;\n lastInvokeTime = time;\n result = func.apply(thisArg, args);\n return result;\n }\n\n function leadingEdge(time) {\n // Reset any `maxWait` timer.\n lastInvokeTime = time;\n // Start the timer for the trailing edge.\n timerId = setTimeout(timerExpired, wait);\n // Invoke the leading edge.\n return leading ? invokeFunc(time) : result;\n }\n\n function remainingWait(time) {\n var timeSinceLastCall = time - lastCallTime,\n timeSinceLastInvoke = time - lastInvokeTime,\n result = wait - timeSinceLastCall;\n\n return maxing ? nativeMin(result, maxWait - timeSinceLastInvoke) : result;\n }\n\n function shouldInvoke(time) {\n var timeSinceLastCall = time - lastCallTime,\n timeSinceLastInvoke = time - lastInvokeTime;\n\n // Either this is the first call, activity has stopped and we're at the\n // trailing edge, the system time has gone backwards and we're treating\n // it as the trailing edge, or we've hit the `maxWait` limit.\n return (lastCallTime === undefined || (timeSinceLastCall >= wait) ||\n (timeSinceLastCall < 0) || (maxing && timeSinceLastInvoke >= maxWait));\n }\n\n function timerExpired() {\n var time = now();\n if (shouldInvoke(time)) {\n return trailingEdge(time);\n }\n // Restart the timer.\n timerId = setTimeout(timerExpired, remainingWait(time));\n }\n\n function trailingEdge(time) {\n timerId = undefined;\n\n // Only invoke if we have `lastArgs` which means `func` has been\n // debounced at least once.\n if (trailing && lastArgs) {\n return invokeFunc(time);\n }\n lastArgs = lastThis = undefined;\n return result;\n }\n\n function cancel() {\n if (timerId !== undefined) {\n clearTimeout(timerId);\n }\n lastInvokeTime = 0;\n lastArgs = lastCallTime = lastThis = timerId = undefined;\n }\n\n function flush() {\n return timerId === undefined ? result : trailingEdge(now());\n }\n\n function debounced() {\n var time = now(),\n isInvoking = shouldInvoke(time);\n\n lastArgs = arguments;\n lastThis = this;\n lastCallTime = time;\n\n if (isInvoking) {\n if (timerId === undefined) {\n return leadingEdge(lastCallTime);\n }\n if (maxing) {\n // Handle invocations in a tight loop.\n timerId = setTimeout(timerExpired, wait);\n return invokeFunc(lastCallTime);\n }\n }\n if (timerId === undefined) {\n timerId = setTimeout(timerExpired, wait);\n }\n return result;\n }\n debounced.cancel = cancel;\n debounced.flush = flush;\n return debounced;\n}\n\n/**\n * Checks if `value` is the\n * [language type](http://www.ecma-international.org/ecma-262/7.0/#sec-ecmascript-language-types)\n * of `Object`. (e.g. arrays, functions, objects, regexes, `new Number(0)`, and `new String('')`)\n *\n * @static\n * @memberOf _\n * @since 0.1.0\n * @category Lang\n * @param {*} value The value to check.\n * @returns {boolean} Returns `true` if `value` is an object, else `false`.\n * @example\n *\n * _.isObject({});\n * // => true\n *\n * _.isObject([1, 2, 3]);\n * // => true\n *\n * _.isObject(_.noop);\n * // => true\n *\n * _.isObject(null);\n * // => false\n */\nfunction isObject(value) {\n var type = typeof value;\n return !!value && (type == 'object' || type == 'function');\n}\n\n/**\n * Checks if `value` is object-like. A value is object-like if it's not `null`\n * and has a `typeof` result of \"object\".\n *\n * @static\n * @memberOf _\n * @since 4.0.0\n * @category Lang\n * @param {*} value The value to check.\n * @returns {boolean} Returns `true` if `value` is object-like, else `false`.\n * @example\n *\n * _.isObjectLike({});\n * // => true\n *\n * _.isObjectLike([1, 2, 3]);\n * // => true\n *\n * _.isObjectLike(_.noop);\n * // => false\n *\n * _.isObjectLike(null);\n * // => false\n */\nfunction isObjectLike(value) {\n return !!value && typeof value == 'object';\n}\n\n/**\n * Checks if `value` is classified as a `Symbol` primitive or object.\n *\n * @static\n * @memberOf _\n * @since 4.0.0\n * @category Lang\n * @param {*} value The value to check.\n * @returns {boolean} Returns `true` if `value` is a symbol, else `false`.\n * @example\n *\n * _.isSymbol(Symbol.iterator);\n * // => true\n *\n * _.isSymbol('abc');\n * // => false\n */\nfunction isSymbol(value) {\n return typeof value == 'symbol' ||\n (isObjectLike(value) && objectToString.call(value) == symbolTag);\n}\n\n/**\n * Converts `value` to a number.\n *\n * @static\n * @memberOf _\n * @since 4.0.0\n * @category Lang\n * @param {*} value The value to process.\n * @returns {number} Returns the number.\n * @example\n *\n * _.toNumber(3.2);\n * // => 3.2\n *\n * _.toNumber(Number.MIN_VALUE);\n * // => 5e-324\n *\n * _.toNumber(Infinity);\n * // => Infinity\n *\n * _.toNumber('3.2');\n * // => 3.2\n */\nfunction toNumber(value) {\n if (typeof value == 'number') {\n return value;\n }\n if (isSymbol(value)) {\n return NAN;\n }\n if (isObject(value)) {\n var other = typeof value.valueOf == 'function' ? value.valueOf() : value;\n value = isObject(other) ? (other + '') : other;\n }\n if (typeof value != 'string') {\n return value === 0 ? value : +value;\n }\n value = value.replace(reTrim, '');\n var isBinary = reIsBinary.test(value);\n return (isBinary || reIsOctal.test(value))\n ? freeParseInt(value.slice(2), isBinary ? 2 : 8)\n : (reIsBadHex.test(value) ? NAN : +value);\n}\n\nmodule.exports = debounce;\n","import { useState, useCallback, useLayoutEffect, useEffect, useRef, useMemo } from 'react';\nimport debounce from 'lodash.debounce';\n\n// src/useBoolean/useBoolean.ts\nfunction useBoolean(defaultValue) {\n const [value, setValue] = useState(!!defaultValue);\n const setTrue = useCallback(() => {\n setValue(true);\n }, []);\n const setFalse = useCallback(() => {\n setValue(false);\n }, []);\n const toggle = useCallback(() => {\n setValue((x) => !x);\n }, []);\n return { value, setValue, setTrue, setFalse, toggle };\n}\nvar useIsomorphicLayoutEffect = typeof window !== \"undefined\" ? useLayoutEffect : useEffect;\n\n// src/useEventListener/useEventListener.ts\nfunction useEventListener(eventName, handler, element, options) {\n const savedHandler = useRef(handler);\n useIsomorphicLayoutEffect(() => {\n savedHandler.current = handler;\n }, [handler]);\n useEffect(() => {\n const targetElement = (element == null ? void 0 : element.current) ?? window;\n if (!(targetElement && targetElement.addEventListener))\n return;\n const listener = (event) => {\n savedHandler.current(event);\n };\n targetElement.addEventListener(eventName, listener, options);\n return () => {\n targetElement.removeEventListener(eventName, listener, options);\n };\n }, [eventName, element, options]);\n}\n\n// src/useClickAnyWhere/useClickAnyWhere.ts\nfunction useClickAnyWhere(handler) {\n useEventListener(\"click\", (event) => {\n handler(event);\n });\n}\nfunction useCopyToClipboard() {\n const [copiedText, setCopiedText] = useState(null);\n const copy = useCallback(async (text) => {\n if (!(navigator == null ? void 0 : navigator.clipboard)) {\n console.warn(\"Clipboard not supported\");\n return false;\n }\n try {\n await navigator.clipboard.writeText(text);\n setCopiedText(text);\n return true;\n } catch (error) {\n console.warn(\"Copy failed\", error);\n setCopiedText(null);\n return false;\n }\n }, []);\n return [copiedText, copy];\n}\nfunction useCounter(initialValue) {\n const [count, setCount] = useState(initialValue ?? 0);\n const increment = useCallback(() => {\n setCount((x) => x + 1);\n }, []);\n const decrement = useCallback(() => {\n setCount((x) => x - 1);\n }, []);\n const reset = useCallback(() => {\n setCount(initialValue ?? 0);\n }, [initialValue]);\n return {\n count,\n increment,\n decrement,\n reset,\n setCount\n };\n}\nfunction useInterval(callback, delay) {\n const savedCallback = useRef(callback);\n useIsomorphicLayoutEffect(() => {\n savedCallback.current = callback;\n }, [callback]);\n useEffect(() => {\n if (delay === null) {\n return;\n }\n const id = setInterval(() => {\n savedCallback.current();\n }, delay);\n return () => {\n clearInterval(id);\n };\n }, [delay]);\n}\n\n// src/useCountdown/useCountdown.ts\nfunction useCountdown({\n countStart,\n countStop = 0,\n intervalMs = 1e3,\n isIncrement = false\n}) {\n const {\n count,\n increment,\n decrement,\n reset: resetCounter\n } = useCounter(countStart);\n const {\n value: isCountdownRunning,\n setTrue: startCountdown,\n setFalse: stopCountdown\n } = useBoolean(false);\n const resetCountdown = useCallback(() => {\n stopCountdown();\n resetCounter();\n }, [stopCountdown, resetCounter]);\n const countdownCallback = useCallback(() => {\n if (count === countStop) {\n stopCountdown();\n return;\n }\n if (isIncrement) {\n increment();\n } else {\n decrement();\n }\n }, [count, countStop, decrement, increment, isIncrement, stopCountdown]);\n useInterval(countdownCallback, isCountdownRunning ? intervalMs : null);\n return [count, { startCountdown, stopCountdown, resetCountdown }];\n}\nfunction useEventCallback(fn) {\n const ref = useRef(() => {\n throw new Error(\"Cannot call an event handler while rendering.\");\n });\n useIsomorphicLayoutEffect(() => {\n ref.current = fn;\n }, [fn]);\n return useCallback((...args) => ref.current(...args), [ref]);\n}\n\n// src/useLocalStorage/useLocalStorage.ts\nvar IS_SERVER = typeof window === \"undefined\";\nfunction useLocalStorage(key, initialValue, options = {}) {\n const { initializeWithValue = true } = options;\n const serializer = useCallback(\n (value) => {\n if (options.serializer) {\n return options.serializer(value);\n }\n return JSON.stringify(value);\n },\n [options]\n );\n const deserializer = useCallback(\n (value) => {\n if (options.deserializer) {\n return options.deserializer(value);\n }\n if (value === \"undefined\") {\n return void 0;\n }\n const defaultValue = initialValue instanceof Function ? initialValue() : initialValue;\n let parsed;\n try {\n parsed = JSON.parse(value);\n } catch (error) {\n console.error(\"Error parsing JSON:\", error);\n return defaultValue;\n }\n return parsed;\n },\n [options, initialValue]\n );\n const readValue = useCallback(() => {\n const initialValueToUse = initialValue instanceof Function ? initialValue() : initialValue;\n if (IS_SERVER) {\n return initialValueToUse;\n }\n try {\n const raw = window.localStorage.getItem(key);\n return raw ? deserializer(raw) : initialValueToUse;\n } catch (error) {\n console.warn(`Error reading localStorage key \\u201C${key}\\u201D:`, error);\n return initialValueToUse;\n }\n }, [initialValue, key, deserializer]);\n const [storedValue, setStoredValue] = useState(() => {\n if (initializeWithValue) {\n return readValue();\n }\n return initialValue instanceof Function ? initialValue() : initialValue;\n });\n const setValue = useEventCallback((value) => {\n if (IS_SERVER) {\n console.warn(\n `Tried setting localStorage key \\u201C${key}\\u201D even though environment is not a client`\n );\n }\n try {\n const newValue = value instanceof Function ? value(readValue()) : value;\n window.localStorage.setItem(key, serializer(newValue));\n setStoredValue(newValue);\n window.dispatchEvent(new StorageEvent(\"local-storage\", { key }));\n } catch (error) {\n console.warn(`Error setting localStorage key \\u201C${key}\\u201D:`, error);\n }\n });\n useEffect(() => {\n setStoredValue(readValue());\n }, [key]);\n const handleStorageChange = useCallback(\n (event) => {\n if (event.key && event.key !== key) {\n return;\n }\n setStoredValue(readValue());\n },\n [key, readValue]\n );\n useEventListener(\"storage\", handleStorageChange);\n useEventListener(\"local-storage\", handleStorageChange);\n return [storedValue, setValue];\n}\nvar IS_SERVER2 = typeof window === \"undefined\";\nfunction useMediaQuery(query, {\n defaultValue = false,\n initializeWithValue = true\n} = {}) {\n const getMatches = (query2) => {\n if (IS_SERVER2) {\n return defaultValue;\n }\n return window.matchMedia(query2).matches;\n };\n const [matches, setMatches] = useState(() => {\n if (initializeWithValue) {\n return getMatches(query);\n }\n return defaultValue;\n });\n function handleChange() {\n setMatches(getMatches(query));\n }\n useIsomorphicLayoutEffect(() => {\n const matchMedia = window.matchMedia(query);\n handleChange();\n if (matchMedia.addListener) {\n matchMedia.addListener(handleChange);\n } else {\n matchMedia.addEventListener(\"change\", handleChange);\n }\n return () => {\n if (matchMedia.removeListener) {\n matchMedia.removeListener(handleChange);\n } else {\n matchMedia.removeEventListener(\"change\", handleChange);\n }\n };\n }, [query]);\n return matches;\n}\n\n// src/useDarkMode/useDarkMode.ts\nvar COLOR_SCHEME_QUERY = \"(prefers-color-scheme: dark)\";\nvar LOCAL_STORAGE_KEY = \"usehooks-ts-dark-mode\";\nfunction useDarkMode(options = {}) {\n const {\n defaultValue,\n localStorageKey = LOCAL_STORAGE_KEY,\n initializeWithValue = true\n } = options;\n const isDarkOS = useMediaQuery(COLOR_SCHEME_QUERY, {\n initializeWithValue,\n defaultValue\n });\n const [isDarkMode, setDarkMode] = useLocalStorage(\n localStorageKey,\n defaultValue ?? isDarkOS ?? false,\n { initializeWithValue }\n );\n useIsomorphicLayoutEffect(() => {\n if (isDarkOS !== isDarkMode) {\n setDarkMode(isDarkOS);\n }\n }, [isDarkOS]);\n return {\n isDarkMode,\n toggle: () => {\n setDarkMode((prev) => !prev);\n },\n enable: () => {\n setDarkMode(true);\n },\n disable: () => {\n setDarkMode(false);\n },\n set: (value) => {\n setDarkMode(value);\n }\n };\n}\nfunction useUnmount(func) {\n const funcRef = useRef(func);\n funcRef.current = func;\n useEffect(\n () => () => {\n funcRef.current();\n },\n []\n );\n}\n\n// src/useDebounceCallback/useDebounceCallback.ts\nfunction useDebounceCallback(func, delay = 500, options) {\n const debouncedFunc = useRef();\n useUnmount(() => {\n if (debouncedFunc.current) {\n debouncedFunc.current.cancel();\n }\n });\n const debounced = useMemo(() => {\n const debouncedFuncInstance = debounce(func, delay, options);\n const wrappedFunc = (...args) => {\n return debouncedFuncInstance(...args);\n };\n wrappedFunc.cancel = () => {\n debouncedFuncInstance.cancel();\n };\n wrappedFunc.isPending = () => {\n return !!debouncedFunc.current;\n };\n wrappedFunc.flush = () => {\n return debouncedFuncInstance.flush();\n };\n return wrappedFunc;\n }, [func, delay, options]);\n useEffect(() => {\n debouncedFunc.current = debounce(func, delay, options);\n }, [func, delay, options]);\n return debounced;\n}\nfunction useDebounceValue(initialValue, delay, options) {\n const eq = (options == null ? void 0 : options.equalityFn) ?? ((left, right) => left === right);\n const unwrappedInitialValue = initialValue instanceof Function ? initialValue() : initialValue;\n const [debouncedValue, setDebouncedValue] = useState(unwrappedInitialValue);\n const previousValueRef = useRef(unwrappedInitialValue);\n const updateDebouncedValue = useDebounceCallback(\n setDebouncedValue,\n delay,\n options\n );\n if (!eq(previousValueRef.current, unwrappedInitialValue)) {\n updateDebouncedValue(unwrappedInitialValue);\n previousValueRef.current = unwrappedInitialValue;\n }\n return [debouncedValue, updateDebouncedValue];\n}\nfunction useDocumentTitle(title, options = {}) {\n const { preserveTitleOnUnmount = true } = options;\n const defaultTitle = useRef(null);\n useIsomorphicLayoutEffect(() => {\n defaultTitle.current = window.document.title;\n }, []);\n useIsomorphicLayoutEffect(() => {\n window.document.title = title;\n }, [title]);\n useUnmount(() => {\n if (!preserveTitleOnUnmount && defaultTitle.current) {\n window.document.title = defaultTitle.current;\n }\n });\n}\nfunction useHover(elementRef) {\n const [value, setValue] = useState(false);\n const handleMouseEnter = () => {\n setValue(true);\n };\n const handleMouseLeave = () => {\n setValue(false);\n };\n useEventListener(\"mouseenter\", handleMouseEnter, elementRef);\n useEventListener(\"mouseleave\", handleMouseLeave, elementRef);\n return value;\n}\nfunction useIntersectionObserver({\n threshold = 0,\n root = null,\n rootMargin = \"0%\",\n freezeOnceVisible = false,\n initialIsIntersecting = false,\n onChange\n} = {}) {\n var _a;\n const [ref, setRef] = useState(null);\n const [state, setState] = useState(() => ({\n isIntersecting: initialIsIntersecting,\n entry: void 0\n }));\n const callbackRef = useRef();\n callbackRef.current = onChange;\n const frozen = ((_a = state.entry) == null ? void 0 : _a.isIntersecting) && freezeOnceVisible;\n useEffect(() => {\n if (!ref)\n return;\n if (!(\"IntersectionObserver\" in window))\n return;\n if (frozen)\n return;\n let unobserve;\n const observer = new IntersectionObserver(\n (entries) => {\n const thresholds = Array.isArray(observer.thresholds) ? observer.thresholds : [observer.thresholds];\n entries.forEach((entry) => {\n const isIntersecting = entry.isIntersecting && thresholds.some((threshold2) => entry.intersectionRatio >= threshold2);\n setState({ isIntersecting, entry });\n if (callbackRef.current) {\n callbackRef.current(isIntersecting, entry);\n }\n if (isIntersecting && freezeOnceVisible && unobserve) {\n unobserve();\n unobserve = void 0;\n }\n });\n },\n { threshold, root, rootMargin }\n );\n observer.observe(ref);\n return () => {\n observer.disconnect();\n };\n }, [\n ref,\n // eslint-disable-next-line react-hooks/exhaustive-deps\n JSON.stringify(threshold),\n root,\n rootMargin,\n frozen,\n freezeOnceVisible\n ]);\n const prevRef = useRef(null);\n useEffect(() => {\n var _a2;\n if (!ref && ((_a2 = state.entry) == null ? void 0 : _a2.target) && !freezeOnceVisible && !frozen && prevRef.current !== state.entry.target) {\n prevRef.current = state.entry.target;\n setState({ isIntersecting: initialIsIntersecting, entry: void 0 });\n }\n }, [ref, state.entry, freezeOnceVisible, frozen, initialIsIntersecting]);\n const result = [\n setRef,\n !!state.isIntersecting,\n state.entry\n ];\n result.ref = result[0];\n result.isIntersecting = result[1];\n result.entry = result[2];\n return result;\n}\nfunction useIsClient() {\n const [isClient, setClient] = useState(false);\n useEffect(() => {\n setClient(true);\n }, []);\n return isClient;\n}\nfunction useIsMounted() {\n const isMounted = useRef(false);\n useEffect(() => {\n isMounted.current = true;\n return () => {\n isMounted.current = false;\n };\n }, []);\n return useCallback(() => isMounted.current, []);\n}\nfunction useMap(initialState = /* @__PURE__ */ new Map()) {\n const [map, setMap] = useState(new Map(initialState));\n const actions = {\n set: useCallback((key, value) => {\n setMap((prev) => {\n const copy = new Map(prev);\n copy.set(key, value);\n return copy;\n });\n }, []),\n setAll: useCallback((entries) => {\n setMap(() => new Map(entries));\n }, []),\n remove: useCallback((key) => {\n setMap((prev) => {\n const copy = new Map(prev);\n copy.delete(key);\n return copy;\n });\n }, []),\n reset: useCallback(() => {\n setMap(() => /* @__PURE__ */ new Map());\n }, [])\n };\n return [map, actions];\n}\n\n// src/useOnClickOutside/useOnClickOutside.ts\nfunction useOnClickOutside(ref, handler, eventType = \"mousedown\") {\n useEventListener(eventType, (event) => {\n const target = event.target;\n if (!target || !target.isConnected) {\n return;\n }\n const isOutside = Array.isArray(ref) ? ref.every((r) => r.current && !r.current.contains(target)) : ref.current && !ref.current.contains(target);\n if (isOutside) {\n handler(event);\n }\n });\n}\nvar IS_SERVER3 = typeof window === \"undefined\";\nfunction useReadLocalStorage(key, options = {}) {\n let { initializeWithValue = true } = options;\n if (IS_SERVER3) {\n initializeWithValue = false;\n }\n const deserializer = useCallback(\n (value) => {\n if (options.deserializer) {\n return options.deserializer(value);\n }\n if (value === \"undefined\") {\n return void 0;\n }\n let parsed;\n try {\n parsed = JSON.parse(value);\n } catch (error) {\n console.error(\"Error parsing JSON:\", error);\n return null;\n }\n return parsed;\n },\n [options]\n );\n const readValue = useCallback(() => {\n if (IS_SERVER3) {\n return null;\n }\n try {\n const raw = window.localStorage.getItem(key);\n return raw ? deserializer(raw) : null;\n } catch (error) {\n console.warn(`Error reading localStorage key \\u201C${key}\\u201D:`, error);\n return null;\n }\n }, [key, deserializer]);\n const [storedValue, setStoredValue] = useState(() => {\n if (initializeWithValue) {\n return readValue();\n }\n return void 0;\n });\n useEffect(() => {\n setStoredValue(readValue());\n }, [key]);\n const handleStorageChange = useCallback(\n (event) => {\n if (event.key && event.key !== key) {\n return;\n }\n setStoredValue(readValue());\n },\n [key, readValue]\n );\n useEventListener(\"storage\", handleStorageChange);\n useEventListener(\"local-storage\", handleStorageChange);\n return storedValue;\n}\nvar initialSize = {\n width: void 0,\n height: void 0\n};\nfunction useResizeObserver(options) {\n const { ref, box = \"content-box\" } = options;\n const [{ width, height }, setSize] = useState(initialSize);\n const isMounted = useIsMounted();\n const previousSize = useRef({ ...initialSize });\n const onResize = useRef(void 0);\n onResize.current = options.onResize;\n useEffect(() => {\n if (!ref.current)\n return;\n if (typeof window === \"undefined\" || !(\"ResizeObserver\" in window))\n return;\n const observer = new ResizeObserver(([entry]) => {\n const boxProp = box === \"border-box\" ? \"borderBoxSize\" : box === \"device-pixel-content-box\" ? \"devicePixelContentBoxSize\" : \"contentBoxSize\";\n const newWidth = extractSize(entry, boxProp, \"inlineSize\");\n const newHeight = extractSize(entry, boxProp, \"blockSize\");\n const hasChanged = previousSize.current.width !== newWidth || previousSize.current.height !== newHeight;\n if (hasChanged) {\n const newSize = { width: newWidth, height: newHeight };\n previousSize.current.width = newWidth;\n previousSize.current.height = newHeight;\n if (onResize.current) {\n onResize.current(newSize);\n } else {\n if (isMounted()) {\n setSize(newSize);\n }\n }\n }\n });\n observer.observe(ref.current, { box });\n return () => {\n observer.disconnect();\n };\n }, [box, ref, isMounted]);\n return { width, height };\n}\nfunction extractSize(entry, box, sizeType) {\n if (!entry[box]) {\n if (box === \"contentBoxSize\") {\n return entry.contentRect[sizeType === \"inlineSize\" ? \"width\" : \"height\"];\n }\n return void 0;\n }\n return Array.isArray(entry[box]) ? entry[box][0][sizeType] : (\n // @ts-ignore Support Firefox's non-standard behavior\n entry[box][sizeType]\n );\n}\nvar IS_SERVER4 = typeof window === \"undefined\";\nfunction useScreen(options = {}) {\n let { initializeWithValue = true } = options;\n if (IS_SERVER4) {\n initializeWithValue = false;\n }\n const readScreen = () => {\n if (IS_SERVER4) {\n return void 0;\n }\n return window.screen;\n };\n const [screen, setScreen] = useState(() => {\n if (initializeWithValue) {\n return readScreen();\n }\n return void 0;\n });\n const debouncedSetScreen = useDebounceCallback(\n setScreen,\n options.debounceDelay\n );\n function handleSize() {\n const newScreen = readScreen();\n const setSize = options.debounceDelay ? debouncedSetScreen : setScreen;\n if (newScreen) {\n const {\n width,\n height,\n availHeight,\n availWidth,\n colorDepth,\n orientation,\n pixelDepth\n } = newScreen;\n setSize({\n width,\n height,\n availHeight,\n availWidth,\n colorDepth,\n orientation,\n pixelDepth\n });\n }\n }\n useEventListener(\"resize\", handleSize);\n useIsomorphicLayoutEffect(() => {\n handleSize();\n }, []);\n return screen;\n}\nvar cachedScriptStatuses = /* @__PURE__ */ new Map();\nfunction getScriptNode(src) {\n const node = document.querySelector(\n `script[src=\"${src}\"]`\n );\n const status = node == null ? void 0 : node.getAttribute(\"data-status\");\n return {\n node,\n status\n };\n}\nfunction useScript(src, options) {\n const [status, setStatus] = useState(() => {\n if (!src || (options == null ? void 0 : options.shouldPreventLoad)) {\n return \"idle\";\n }\n if (typeof window === \"undefined\") {\n return \"loading\";\n }\n return cachedScriptStatuses.get(src) ?? \"loading\";\n });\n useEffect(() => {\n if (!src || (options == null ? void 0 : options.shouldPreventLoad)) {\n return;\n }\n const cachedScriptStatus = cachedScriptStatuses.get(src);\n if (cachedScriptStatus === \"ready\" || cachedScriptStatus === \"error\") {\n setStatus(cachedScriptStatus);\n return;\n }\n const script = getScriptNode(src);\n let scriptNode = script.node;\n if (!scriptNode) {\n scriptNode = document.createElement(\"script\");\n scriptNode.src = src;\n scriptNode.async = true;\n if (options == null ? void 0 : options.id) {\n scriptNode.id = options.id;\n }\n scriptNode.setAttribute(\"data-status\", \"loading\");\n document.body.appendChild(scriptNode);\n const setAttributeFromEvent = (event) => {\n const scriptStatus = event.type === \"load\" ? \"ready\" : \"error\";\n scriptNode == null ? void 0 : scriptNode.setAttribute(\"data-status\", scriptStatus);\n };\n scriptNode.addEventListener(\"load\", setAttributeFromEvent);\n scriptNode.addEventListener(\"error\", setAttributeFromEvent);\n } else {\n setStatus(script.status ?? cachedScriptStatus ?? \"loading\");\n }\n const setStateFromEvent = (event) => {\n const newStatus = event.type === \"load\" ? \"ready\" : \"error\";\n setStatus(newStatus);\n cachedScriptStatuses.set(src, newStatus);\n };\n scriptNode.addEventListener(\"load\", setStateFromEvent);\n scriptNode.addEventListener(\"error\", setStateFromEvent);\n return () => {\n if (scriptNode) {\n scriptNode.removeEventListener(\"load\", setStateFromEvent);\n scriptNode.removeEventListener(\"error\", setStateFromEvent);\n }\n if (scriptNode && (options == null ? void 0 : options.removeOnUnmount)) {\n scriptNode.remove();\n cachedScriptStatuses.delete(src);\n }\n };\n }, [src, options == null ? void 0 : options.shouldPreventLoad, options == null ? void 0 : options.removeOnUnmount, options == null ? void 0 : options.id]);\n return status;\n}\nvar IS_SERVER5 = typeof window === \"undefined\";\nfunction useScrollLock(options = {}) {\n const { autoLock = true, lockTarget, widthReflow = true } = options;\n const [isLocked, setIsLocked] = useState(false);\n const target = useRef(null);\n const originalStyle = useRef(null);\n const lock = () => {\n if (target.current) {\n const { overflow, paddingRight } = target.current.style;\n originalStyle.current = { overflow, paddingRight };\n if (widthReflow) {\n const offsetWidth = target.current === document.body ? window.innerWidth : target.current.offsetWidth;\n const currentPaddingRight = parseInt(window.getComputedStyle(target.current).paddingRight, 10) || 0;\n const scrollbarWidth = offsetWidth - target.current.scrollWidth;\n target.current.style.paddingRight = `${scrollbarWidth + currentPaddingRight}px`;\n }\n target.current.style.overflow = \"hidden\";\n setIsLocked(true);\n }\n };\n const unlock = () => {\n if (target.current && originalStyle.current) {\n target.current.style.overflow = originalStyle.current.overflow;\n if (widthReflow) {\n target.current.style.paddingRight = originalStyle.current.paddingRight;\n }\n }\n setIsLocked(false);\n };\n useIsomorphicLayoutEffect(() => {\n if (IS_SERVER5)\n return;\n if (lockTarget) {\n target.current = typeof lockTarget === \"string\" ? document.querySelector(lockTarget) : lockTarget;\n }\n if (!target.current) {\n target.current = document.body;\n }\n if (autoLock) {\n lock();\n }\n return () => {\n unlock();\n };\n }, [autoLock, lockTarget, widthReflow]);\n return { isLocked, lock, unlock };\n}\nvar IS_SERVER6 = typeof window === \"undefined\";\nfunction useSessionStorage(key, initialValue, options = {}) {\n const { initializeWithValue = true } = options;\n const serializer = useCallback(\n (value) => {\n if (options.serializer) {\n return options.serializer(value);\n }\n return JSON.stringify(value);\n },\n [options]\n );\n const deserializer = useCallback(\n (value) => {\n if (options.deserializer) {\n return options.deserializer(value);\n }\n if (value === \"undefined\") {\n return void 0;\n }\n const defaultValue = initialValue instanceof Function ? initialValue() : initialValue;\n let parsed;\n try {\n parsed = JSON.parse(value);\n } catch (error) {\n console.error(\"Error parsing JSON:\", error);\n return defaultValue;\n }\n return parsed;\n },\n [options, initialValue]\n );\n const readValue = useCallback(() => {\n const initialValueToUse = initialValue instanceof Function ? initialValue() : initialValue;\n if (IS_SERVER6) {\n return initialValueToUse;\n }\n try {\n const raw = window.sessionStorage.getItem(key);\n return raw ? deserializer(raw) : initialValueToUse;\n } catch (error) {\n console.warn(`Error reading sessionStorage key \\u201C${key}\\u201D:`, error);\n return initialValueToUse;\n }\n }, [initialValue, key, deserializer]);\n const [storedValue, setStoredValue] = useState(() => {\n if (initializeWithValue) {\n return readValue();\n }\n return initialValue instanceof Function ? initialValue() : initialValue;\n });\n const setValue = useEventCallback((value) => {\n if (IS_SERVER6) {\n console.warn(\n `Tried setting sessionStorage key \\u201C${key}\\u201D even though environment is not a client`\n );\n }\n try {\n const newValue = value instanceof Function ? value(readValue()) : value;\n window.sessionStorage.setItem(key, serializer(newValue));\n setStoredValue(newValue);\n window.dispatchEvent(new StorageEvent(\"session-storage\", { key }));\n } catch (error) {\n console.warn(`Error setting sessionStorage key \\u201C${key}\\u201D:`, error);\n }\n });\n useEffect(() => {\n setStoredValue(readValue());\n }, [key]);\n const handleStorageChange = useCallback(\n (event) => {\n if (event.key && event.key !== key) {\n return;\n }\n setStoredValue(readValue());\n },\n [key, readValue]\n );\n useEventListener(\"storage\", handleStorageChange);\n useEventListener(\"session-storage\", handleStorageChange);\n return [storedValue, setValue];\n}\nfunction useStep(maxStep) {\n const [currentStep, setCurrentStep] = useState(1);\n const canGoToNextStep = currentStep + 1 <= maxStep;\n const canGoToPrevStep = currentStep - 1 > 0;\n const setStep = useCallback(\n (step) => {\n const newStep = step instanceof Function ? step(currentStep) : step;\n if (newStep >= 1 && newStep <= maxStep) {\n setCurrentStep(newStep);\n return;\n }\n throw new Error(\"Step not valid\");\n },\n [maxStep, currentStep]\n );\n const goToNextStep = useCallback(() => {\n if (canGoToNextStep) {\n setCurrentStep((step) => step + 1);\n }\n }, [canGoToNextStep]);\n const goToPrevStep = useCallback(() => {\n if (canGoToPrevStep) {\n setCurrentStep((step) => step - 1);\n }\n }, [canGoToPrevStep]);\n const reset = useCallback(() => {\n setCurrentStep(1);\n }, []);\n return [\n currentStep,\n {\n goToNextStep,\n goToPrevStep,\n canGoToNextStep,\n canGoToPrevStep,\n setStep,\n reset\n }\n ];\n}\n\n// src/useTernaryDarkMode/useTernaryDarkMode.ts\nvar COLOR_SCHEME_QUERY2 = \"(prefers-color-scheme: dark)\";\nvar LOCAL_STORAGE_KEY2 = \"usehooks-ts-ternary-dark-mode\";\nfunction useTernaryDarkMode({\n defaultValue = \"system\",\n localStorageKey = LOCAL_STORAGE_KEY2,\n initializeWithValue = true\n} = {}) {\n const isDarkOS = useMediaQuery(COLOR_SCHEME_QUERY2, { initializeWithValue });\n const [mode, setMode] = useLocalStorage(localStorageKey, defaultValue, {\n initializeWithValue\n });\n const isDarkMode = mode === \"dark\" || mode === \"system\" && isDarkOS;\n const toggleTernaryDarkMode = () => {\n const modes = [\"light\", \"system\", \"dark\"];\n setMode((prevMode) => {\n const nextIndex = (modes.indexOf(prevMode) + 1) % modes.length;\n return modes[nextIndex];\n });\n };\n return {\n isDarkMode,\n ternaryDarkMode: mode,\n setTernaryDarkMode: setMode,\n toggleTernaryDarkMode\n };\n}\nfunction useTimeout(callback, delay) {\n const savedCallback = useRef(callback);\n useIsomorphicLayoutEffect(() => {\n savedCallback.current = callback;\n }, [callback]);\n useEffect(() => {\n if (!delay && delay !== 0) {\n return;\n }\n const id = setTimeout(() => {\n savedCallback.current();\n }, delay);\n return () => {\n clearTimeout(id);\n };\n }, [delay]);\n}\nfunction useToggle(defaultValue) {\n const [value, setValue] = useState(!!defaultValue);\n const toggle = useCallback(() => {\n setValue((x) => !x);\n }, []);\n return [value, toggle, setValue];\n}\nvar IS_SERVER7 = typeof window === \"undefined\";\nfunction useWindowSize(options = {}) {\n let { initializeWithValue = true } = options;\n if (IS_SERVER7) {\n initializeWithValue = false;\n }\n const [windowSize, setWindowSize] = useState(() => {\n if (initializeWithValue) {\n return {\n width: window.innerWidth,\n height: window.innerHeight\n };\n }\n return {\n width: void 0,\n height: void 0\n };\n });\n const debouncedSetWindowSize = useDebounceCallback(\n setWindowSize,\n options.debounceDelay\n );\n function handleSize() {\n const setSize = options.debounceDelay ? debouncedSetWindowSize : setWindowSize;\n setSize({\n width: window.innerWidth,\n height: window.innerHeight\n });\n }\n useEventListener(\"resize\", handleSize);\n useIsomorphicLayoutEffect(() => {\n handleSize();\n }, []);\n return windowSize;\n}\n\nexport { useBoolean, useClickAnyWhere, useCopyToClipboard, useCountdown, useCounter, useDarkMode, useDebounceCallback, useDebounceValue, useDocumentTitle, useEventCallback, useEventListener, useHover, useIntersectionObserver, useInterval, useIsClient, useIsMounted, useIsomorphicLayoutEffect, useLocalStorage, useMap, useMediaQuery, useOnClickOutside, useReadLocalStorage, useResizeObserver, useScreen, useScript, useScrollLock, useSessionStorage, useStep, useTernaryDarkMode, useTimeout, useToggle, useUnmount, useWindowSize };\n","import $tyW6A$react, {useMemo as $tyW6A$useMemo} from \"react\";\n\n/*\n * Copyright 2020 Adobe. All rights reserved.\n * This file is licensed to you under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License. You may obtain a copy\n * of the License at http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software distributed under\n * the License is distributed on an \"AS IS\" BASIS, WITHOUT WARRANTIES OR REPRESENTATIONS\n * OF ANY KIND, either express or implied. See the License for the specific language\n * governing permissions and limitations under the License.\n */ /*\n * Copyright 2020 Adobe. All rights reserved.\n * This file is licensed to you under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License. You may obtain a copy\n * of the License at http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software distributed under\n * the License is distributed on an \"AS IS\" BASIS, WITHOUT WARRANTIES OR REPRESENTATIONS\n * OF ANY KIND, either express or implied. See the License for the specific language\n * governing permissions and limitations under the License.\n */ \nfunction $c1d7fb2ec91bae71$var$Item(props) {\n return null;\n}\n$c1d7fb2ec91bae71$var$Item.getCollectionNode = function* getCollectionNode(props, context) {\n let { childItems: childItems, title: title, children: children } = props;\n let rendered = props.title || props.children;\n let textValue = props.textValue || (typeof rendered === \"string\" ? rendered : \"\") || props[\"aria-label\"] || \"\";\n // suppressTextValueWarning is used in components like Tabs, which don't have type to select support.\n if (!textValue && !(context === null || context === void 0 ? void 0 : context.suppressTextValueWarning)) console.warn(\"<Item> with non-plain text contents is unsupported by type to select for accessibility. Please add a `textValue` prop.\");\n yield {\n type: \"item\",\n props: props,\n rendered: rendered,\n textValue: textValue,\n \"aria-label\": props[\"aria-label\"],\n hasChildNodes: $c1d7fb2ec91bae71$var$hasChildItems(props),\n *childNodes () {\n if (childItems) for (let child of childItems)yield {\n type: \"item\",\n value: child\n };\n else if (title) {\n let items = [];\n (0, $tyW6A$react).Children.forEach(children, (child)=>{\n items.push({\n type: \"item\",\n element: child\n });\n });\n yield* items;\n }\n }\n };\n};\nfunction $c1d7fb2ec91bae71$var$hasChildItems(props) {\n if (props.hasChildItems != null) return props.hasChildItems;\n if (props.childItems) return true;\n if (props.title && (0, $tyW6A$react).Children.count(props.children) > 0) return true;\n return false;\n}\n// We don't want getCollectionNode to show up in the type definition\nlet $c1d7fb2ec91bae71$export$6d08773d2e66f8f2 = $c1d7fb2ec91bae71$var$Item;\n\n\n/*\n * Copyright 2020 Adobe. All rights reserved.\n * This file is licensed to you under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License. You may obtain a copy\n * of the License at http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software distributed under\n * the License is distributed on an \"AS IS\" BASIS, WITHOUT WARRANTIES OR REPRESENTATIONS\n * OF ANY KIND, either express or implied. See the License for the specific language\n * governing permissions and limitations under the License.\n */ \nfunction $9fc4852771d079eb$var$Section(props) {\n return null;\n}\n$9fc4852771d079eb$var$Section.getCollectionNode = function* getCollectionNode(props) {\n let { children: children, title: title, items: items } = props;\n yield {\n type: \"section\",\n props: props,\n hasChildNodes: true,\n rendered: title,\n \"aria-label\": props[\"aria-label\"],\n *childNodes () {\n if (typeof children === \"function\") {\n if (!items) throw new Error(\"props.children was a function but props.items is missing\");\n for (let item of items)yield {\n type: \"item\",\n value: item,\n renderer: children\n };\n } else {\n let items = [];\n (0, $tyW6A$react).Children.forEach(children, (child)=>{\n items.push({\n type: \"item\",\n element: child\n });\n });\n yield* items;\n }\n }\n };\n};\n// We don't want getCollectionNode to show up in the type definition\nlet $9fc4852771d079eb$export$6e2c8f0811a474ce = $9fc4852771d079eb$var$Section;\n\n\n/*\n * Copyright 2020 Adobe. All rights reserved.\n * This file is licensed to you under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License. You may obtain a copy\n * of the License at http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software distributed under\n * the License is distributed on an \"AS IS\" BASIS, WITHOUT WARRANTIES OR REPRESENTATIONS\n * OF ANY KIND, either express or implied. See the License for the specific language\n * governing permissions and limitations under the License.\n */ /*\n * Copyright 2020 Adobe. All rights reserved.\n * This file is licensed to you under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License. You may obtain a copy\n * of the License at http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software distributed under\n * the License is distributed on an \"AS IS\" BASIS, WITHOUT WARRANTIES OR REPRESENTATIONS\n * OF ANY KIND, either express or implied. See the License for the specific language\n * governing permissions and limitations under the License.\n */ \nclass $eb2240fc39a57fa5$export$bf788dd355e3a401 {\n build(props, context) {\n this.context = context;\n return $eb2240fc39a57fa5$var$iterable(()=>this.iterateCollection(props));\n }\n *iterateCollection(props) {\n let { children: children, items: items } = props;\n if (typeof children === \"function\") {\n if (!items) throw new Error(\"props.children was a function but props.items is missing\");\n for (let item of props.items)yield* this.getFullNode({\n value: item\n }, {\n renderer: children\n });\n } else {\n let items = [];\n (0, $tyW6A$react).Children.forEach(children, (child)=>{\n items.push(child);\n });\n let index = 0;\n for (let item of items){\n let nodes = this.getFullNode({\n element: item,\n index: index\n }, {});\n for (let node of nodes){\n index++;\n yield node;\n }\n }\n }\n }\n getKey(item, partialNode, state, parentKey) {\n if (item.key != null) return item.key;\n if (partialNode.type === \"cell\" && partialNode.key != null) return `${parentKey}${partialNode.key}`;\n let v = partialNode.value;\n if (v != null) {\n var _v_key;\n let key = (_v_key = v.key) !== null && _v_key !== void 0 ? _v_key : v.id;\n if (key == null) throw new Error(\"No key found for item\");\n return key;\n }\n return parentKey ? `${parentKey}.${partialNode.index}` : `$.${partialNode.index}`;\n }\n getChildState(state, partialNode) {\n return {\n renderer: partialNode.renderer || state.renderer\n };\n }\n *getFullNode(partialNode, state, parentKey, parentNode) {\n // If there's a value instead of an element on the node, and a parent renderer function is available,\n // use it to render an element for the value.\n let element = partialNode.element;\n if (!element && partialNode.value && state && state.renderer) {\n let cached = this.cache.get(partialNode.value);\n if (cached && (!cached.shouldInvalidate || !cached.shouldInvalidate(this.context))) {\n cached.index = partialNode.index;\n cached.parentKey = parentNode ? parentNode.key : null;\n yield cached;\n return;\n }\n element = state.renderer(partialNode.value);\n }\n // If there's an element with a getCollectionNode function on its type, then it's a supported component.\n // Call this function to get a partial node, and recursively build a full node from there.\n if ((0, $tyW6A$react).isValidElement(element)) {\n let type = element.type;\n if (typeof type !== \"function\" && typeof type.getCollectionNode !== \"function\") {\n let name = typeof element.type === \"function\" ? element.type.name : element.type;\n throw new Error(`Unknown element <${name}> in collection.`);\n }\n let childNodes = type.getCollectionNode(element.props, this.context);\n let index = partialNode.index;\n let result = childNodes.next();\n while(!result.done && result.value){\n let childNode = result.value;\n partialNode.index = index;\n let nodeKey = childNode.key;\n if (!nodeKey) nodeKey = childNode.element ? null : this.getKey(element, partialNode, state, parentKey);\n let nodes = this.getFullNode({\n ...childNode,\n key: nodeKey,\n index: index,\n wrapper: $eb2240fc39a57fa5$var$compose(partialNode.wrapper, childNode.wrapper)\n }, this.getChildState(state, childNode), parentKey ? `${parentKey}${element.key}` : element.key, parentNode);\n let children = [\n ...nodes\n ];\n for (let node of children){\n // Cache the node based on its value\n node.value = childNode.value || partialNode.value;\n if (node.value) this.cache.set(node.value, node);\n // The partial node may have specified a type for the child in order to specify a constraint.\n // Verify that the full node that was built recursively matches this type.\n if (partialNode.type && node.type !== partialNode.type) throw new Error(`Unsupported type <${$eb2240fc39a57fa5$var$capitalize(node.type)}> in <${$eb2240fc39a57fa5$var$capitalize(parentNode.type)}>. Only <${$eb2240fc39a57fa5$var$capitalize(partialNode.type)}> is supported.`);\n index++;\n yield node;\n }\n result = childNodes.next(children);\n }\n return;\n }\n // Ignore invalid elements\n if (partialNode.key == null) return;\n // Create full node\n let builder = this;\n let node = {\n type: partialNode.type,\n props: partialNode.props,\n key: partialNode.key,\n parentKey: parentNode ? parentNode.key : null,\n value: partialNode.value,\n level: parentNode ? parentNode.level + 1 : 0,\n index: partialNode.index,\n rendered: partialNode.rendered,\n textValue: partialNode.textValue,\n \"aria-label\": partialNode[\"aria-label\"],\n wrapper: partialNode.wrapper,\n shouldInvalidate: partialNode.shouldInvalidate,\n hasChildNodes: partialNode.hasChildNodes,\n childNodes: $eb2240fc39a57fa5$var$iterable(function*() {\n if (!partialNode.hasChildNodes) return;\n let index = 0;\n for (let child of partialNode.childNodes()){\n // Ensure child keys are globally unique by prepending the parent node's key\n if (child.key != null) // TODO: Remove this line entirely and enforce that users always provide unique keys.\n // Currently this line will have issues when a parent has a key `a` and a child with key `bc`\n // but another parent has key `ab` and its child has a key `c`. The combined keys would result in both\n // children having a key of `abc`.\n child.key = `${node.key}${child.key}`;\n child.index = index;\n let nodes = builder.getFullNode(child, builder.getChildState(state, child), node.key, node);\n for (let node of nodes){\n index++;\n yield node;\n }\n }\n })\n };\n yield node;\n }\n constructor(){\n this.cache = new WeakMap();\n }\n}\n// Wraps an iterator function as an iterable object, and caches the results.\nfunction $eb2240fc39a57fa5$var$iterable(iterator) {\n let cache = [];\n let iterable = null;\n return {\n *[Symbol.iterator] () {\n for (let item of cache)yield item;\n if (!iterable) iterable = iterator();\n for (let item of iterable){\n cache.push(item);\n yield item;\n }\n }\n };\n}\nfunction $eb2240fc39a57fa5$var$compose(outer, inner) {\n if (outer && inner) return (element)=>outer(inner(element));\n if (outer) return outer;\n if (inner) return inner;\n}\nfunction $eb2240fc39a57fa5$var$capitalize(str) {\n return str[0].toUpperCase() + str.slice(1);\n}\n\n\n\nfunction $7613b1592d41b092$export$6cd28814d92fa9c9(props, factory, context) {\n let builder = (0, $tyW6A$useMemo)(()=>new (0, $eb2240fc39a57fa5$export$bf788dd355e3a401)(), []);\n let { children: children, items: items, collection: collection } = props;\n let result = (0, $tyW6A$useMemo)(()=>{\n if (collection) return collection;\n let nodes = builder.build({\n children: children,\n items: items\n }, context);\n return factory(nodes);\n }, [\n builder,\n children,\n items,\n collection,\n context,\n factory\n ]);\n return result;\n}\n\n\n/*\n * Copyright 2020 Adobe. All rights reserved.\n * This file is licensed to you under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License. You may obtain a copy\n * of the License at http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software distributed under\n * the License is distributed on an \"AS IS\" BASIS, WITHOUT WARRANTIES OR REPRESENTATIONS\n * OF ANY KIND, either express or implied. See the License for the specific language\n * governing permissions and limitations under the License.\n */ /*\n * Copyright 2020 Adobe. All rights reserved.\n * This file is licensed to you under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License. You may obtain a copy\n * of the License at http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software distributed under\n * the License is distributed on an \"AS IS\" BASIS, WITHOUT WARRANTIES OR REPRESENTATIONS\n * OF ANY KIND, either express or implied. See the License for the specific language\n * governing permissions and limitations under the License.\n */ function $c5a24bc478652b5f$export$1005530eda016c13(node, collection) {\n // New API: call collection.getChildren with the node key.\n if (typeof collection.getChildren === \"function\") return collection.getChildren(node.key);\n // Old API: access childNodes directly.\n return node.childNodes;\n}\nfunction $c5a24bc478652b5f$export$fbdeaa6a76694f71(iterable) {\n return $c5a24bc478652b5f$export$5f3398f8733f90e2(iterable, 0);\n}\nfunction $c5a24bc478652b5f$export$5f3398f8733f90e2(iterable, index) {\n if (index < 0) return undefined;\n let i = 0;\n for (let item of iterable){\n if (i === index) return item;\n i++;\n }\n}\nfunction $c5a24bc478652b5f$export$7475b2c64539e4cf(iterable) {\n let lastItem = undefined;\n for (let value of iterable)lastItem = value;\n return lastItem;\n}\nfunction $c5a24bc478652b5f$export$8c434b3a7a4dad6(collection, a, b) {\n // If the two nodes have the same parent, compare their indices.\n if (a.parentKey === b.parentKey) return a.index - b.index;\n // Otherwise, collect all of the ancestors from each node, and find the first one that doesn't match starting from the root.\n // Include the base nodes in case we are comparing nodes of different levels so that we can compare the higher node to the lower level node's\n // ancestor of the same level\n let aAncestors = [\n ...$c5a24bc478652b5f$var$getAncestors(collection, a),\n a\n ];\n let bAncestors = [\n ...$c5a24bc478652b5f$var$getAncestors(collection, b),\n b\n ];\n let firstNonMatchingAncestor = aAncestors.slice(0, bAncestors.length).findIndex((a, i)=>a !== bAncestors[i]);\n if (firstNonMatchingAncestor !== -1) {\n // Compare the indices of two children within the common ancestor.\n a = aAncestors[firstNonMatchingAncestor];\n b = bAncestors[firstNonMatchingAncestor];\n return a.index - b.index;\n }\n // If there isn't a non matching ancestor, we might be in a case where one of the nodes is the ancestor of the other.\n if (aAncestors.findIndex((node)=>node === b) >= 0) return 1;\n else if (bAncestors.findIndex((node)=>node === a) >= 0) return -1;\n // 🤷\n return -1;\n}\nfunction $c5a24bc478652b5f$var$getAncestors(collection, node) {\n let parents = [];\n while((node === null || node === void 0 ? void 0 : node.parentKey) != null){\n node = collection.getItem(node.parentKey);\n parents.unshift(node);\n }\n return parents;\n}\n\n\nconst $453cc9f0df89c0a5$var$cache = new WeakMap();\nfunction $453cc9f0df89c0a5$export$77d5aafae4e095b2(collection) {\n let count = $453cc9f0df89c0a5$var$cache.get(collection);\n if (count != null) return count;\n count = 0;\n let countItems = (items)=>{\n for (let item of items)if (item.type === \"section\") countItems((0, $c5a24bc478652b5f$export$1005530eda016c13)(item, collection));\n else count++;\n };\n countItems(collection);\n $453cc9f0df89c0a5$var$cache.set(collection, count);\n return count;\n}\n\n\n\n\n\n\nexport {$c1d7fb2ec91bae71$export$6d08773d2e66f8f2 as Item, $9fc4852771d079eb$export$6e2c8f0811a474ce as Section, $7613b1592d41b092$export$6cd28814d92fa9c9 as useCollection, $453cc9f0df89c0a5$export$77d5aafae4e095b2 as getItemCount, $c5a24bc478652b5f$export$1005530eda016c13 as getChildNodes, $c5a24bc478652b5f$export$fbdeaa6a76694f71 as getFirstItem, $c5a24bc478652b5f$export$7475b2c64539e4cf as getLastItem, $c5a24bc478652b5f$export$5f3398f8733f90e2 as getNthItem, $c5a24bc478652b5f$export$8c434b3a7a4dad6 as compareNodeOrder, $eb2240fc39a57fa5$export$bf788dd355e3a401 as CollectionBuilder};\n//# sourceMappingURL=module.js.map\n","import {useSlotId as $iD7q0$useSlotId, mergeProps as $iD7q0$mergeProps, useId as $iD7q0$useId, useLabels as $iD7q0$useLabels} from \"@react-aria/utils\";\n\n/*\n * Copyright 2020 Adobe. All rights reserved.\n * This file is licensed to you under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License. You may obtain a copy\n * of the License at http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software distributed under\n * the License is distributed on an \"AS IS\" BASIS, WITHOUT WARRANTIES OR REPRESENTATIONS\n * OF ANY KIND, either express or implied. See the License for the specific language\n * governing permissions and limitations under the License.\n */ /*\n * Copyright 2021 Adobe. All rights reserved.\n * This file is licensed to you under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License. You may obtain a copy\n * of the License at http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software distributed under\n * the License is distributed on an \"AS IS\" BASIS, WITHOUT WARRANTIES OR REPRESENTATIONS\n * OF ANY KIND, either express or implied. See the License for the specific language\n * governing permissions and limitations under the License.\n */ /*\n * Copyright 2020 Adobe. All rights reserved.\n * This file is licensed to you under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License. You may obtain a copy\n * of the License at http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software distributed under\n * the License is distributed on an \"AS IS\" BASIS, WITHOUT WARRANTIES OR REPRESENTATIONS\n * OF ANY KIND, either express or implied. See the License for the specific language\n * governing permissions and limitations under the License.\n */ \nfunction $d191a55c9702f145$export$8467354a121f1b9f(props) {\n let { id: id, label: label, \"aria-labelledby\": ariaLabelledby, \"aria-label\": ariaLabel, labelElementType: labelElementType = \"label\" } = props;\n id = (0, $iD7q0$useId)(id);\n let labelId = (0, $iD7q0$useId)();\n let labelProps = {};\n if (label) {\n ariaLabelledby = ariaLabelledby ? `${labelId} ${ariaLabelledby}` : labelId;\n labelProps = {\n id: labelId,\n htmlFor: labelElementType === \"label\" ? id : undefined\n };\n } else if (!ariaLabelledby && !ariaLabel) console.warn(\"If you do not provide a visible label, you must specify an aria-label or aria-labelledby attribute for accessibility\");\n let fieldProps = (0, $iD7q0$useLabels)({\n id: id,\n \"aria-label\": ariaLabel,\n \"aria-labelledby\": ariaLabelledby\n });\n return {\n labelProps: labelProps,\n fieldProps: fieldProps\n };\n}\n\n\n\nfunction $2baaea4c71418dea$export$294aa081a6c6f55d(props) {\n let { description: description, errorMessage: errorMessage, isInvalid: isInvalid, validationState: validationState } = props;\n let { labelProps: labelProps, fieldProps: fieldProps } = (0, $d191a55c9702f145$export$8467354a121f1b9f)(props);\n let descriptionId = (0, $iD7q0$useSlotId)([\n Boolean(description),\n Boolean(errorMessage),\n isInvalid,\n validationState\n ]);\n let errorMessageId = (0, $iD7q0$useSlotId)([\n Boolean(description),\n Boolean(errorMessage),\n isInvalid,\n validationState\n ]);\n fieldProps = (0, $iD7q0$mergeProps)(fieldProps, {\n \"aria-describedby\": [\n descriptionId,\n // Use aria-describedby for error message because aria-errormessage is unsupported using VoiceOver or NVDA. See https://github.com/adobe/react-spectrum/issues/1346#issuecomment-740136268\n errorMessageId,\n props[\"aria-describedby\"]\n ].filter(Boolean).join(\" \") || undefined\n });\n return {\n labelProps: labelProps,\n fieldProps: fieldProps,\n descriptionProps: {\n id: descriptionId\n },\n errorMessageProps: {\n id: errorMessageId\n }\n };\n}\n\n\n\n\n\nexport {$2baaea4c71418dea$export$294aa081a6c6f55d as useField, $d191a55c9702f145$export$8467354a121f1b9f as useLabel};\n//# sourceMappingURL=module.js.map\n","import $iFADg$react, {useContext as $iFADg$useContext, useState as $iFADg$useState, useEffect as $iFADg$useEffect, useMemo as $iFADg$useMemo, useCallback as $iFADg$useCallback} from \"react\";\nimport {useIsSSR as $iFADg$useIsSSR} from \"@react-aria/ssr\";\nimport {LocalizedStringDictionary as $iFADg$LocalizedStringDictionary, LocalizedStringFormatter as $iFADg$LocalizedStringFormatter} from \"@internationalized/string\";\nimport {DateFormatter as $iFADg$DateFormatter} from \"@internationalized/date\";\nimport {useDeepMemo as $iFADg$useDeepMemo} from \"@react-aria/utils\";\nimport {NumberFormatter as $iFADg$NumberFormatter} from \"@internationalized/number\";\n\n/*\n * Copyright 2020 Adobe. All rights reserved.\n * This file is licensed to you under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License. You may obtain a copy\n * of the License at http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software distributed under\n * the License is distributed on an \"AS IS\" BASIS, WITHOUT WARRANTIES OR REPRESENTATIONS\n * OF ANY KIND, either express or implied. See the License for the specific language\n * governing permissions and limitations under the License.\n */ /*\n * Copyright 2020 Adobe. All rights reserved.\n * This file is licensed to you under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License. You may obtain a copy\n * of the License at http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software distributed under\n * the License is distributed on an \"AS IS\" BASIS, WITHOUT WARRANTIES OR REPRESENTATIONS\n * OF ANY KIND, either express or implied. See the License for the specific language\n * governing permissions and limitations under the License.\n */ /*\n * Copyright 2020 Adobe. All rights reserved.\n * This file is licensed to you under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License. You may obtain a copy\n * of the License at http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software distributed under\n * the License is distributed on an \"AS IS\" BASIS, WITHOUT WARRANTIES OR REPRESENTATIONS\n * OF ANY KIND, either express or implied. See the License for the specific language\n * governing permissions and limitations under the License.\n */ // https://en.wikipedia.org/wiki/Right-to-left\nconst $148a7a147e38ea7f$var$RTL_SCRIPTS = new Set([\n \"Arab\",\n \"Syrc\",\n \"Samr\",\n \"Mand\",\n \"Thaa\",\n \"Mend\",\n \"Nkoo\",\n \"Adlm\",\n \"Rohg\",\n \"Hebr\"\n]);\nconst $148a7a147e38ea7f$var$RTL_LANGS = new Set([\n \"ae\",\n \"ar\",\n \"arc\",\n \"bcc\",\n \"bqi\",\n \"ckb\",\n \"dv\",\n \"fa\",\n \"glk\",\n \"he\",\n \"ku\",\n \"mzn\",\n \"nqo\",\n \"pnb\",\n \"ps\",\n \"sd\",\n \"ug\",\n \"ur\",\n \"yi\"\n]);\nfunction $148a7a147e38ea7f$export$702d680b21cbd764(localeString) {\n // If the Intl.Locale API is available, use it to get the locale's text direction.\n // @ts-ignore\n if (Intl.Locale) {\n let locale = new Intl.Locale(localeString).maximize();\n // Use the text info object to get the direction if possible.\n // @ts-ignore - this was implemented as a property by some browsers before it was standardized as a function.\n // https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Intl/Locale/getTextInfo\n let textInfo = typeof locale.getTextInfo === \"function\" ? locale.getTextInfo() : locale.textInfo;\n if (textInfo) return textInfo.direction === \"rtl\";\n // Fallback: guess using the script.\n // This is more accurate than guessing by language, since languages can be written in multiple scripts.\n if (locale.script) return $148a7a147e38ea7f$var$RTL_SCRIPTS.has(locale.script);\n }\n // If not, just guess by the language (first part of the locale)\n let lang = localeString.split(\"-\")[0];\n return $148a7a147e38ea7f$var$RTL_LANGS.has(lang);\n}\n\n\n/*\n * Copyright 2020 Adobe. All rights reserved.\n * This file is licensed to you under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License. You may obtain a copy\n * of the License at http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software distributed under\n * the License is distributed on an \"AS IS\" BASIS, WITHOUT WARRANTIES OR REPRESENTATIONS\n * OF ANY KIND, either express or implied. See the License for the specific language\n * governing permissions and limitations under the License.\n */ \n\n\n// Locale passed from server by PackageLocalizationProvider.\nconst $1e5a04cdaf7d1af8$var$localeSymbol = Symbol.for(\"react-aria.i18n.locale\");\nfunction $1e5a04cdaf7d1af8$export$f09106e7c6677ec5() {\n let locale = typeof window !== \"undefined\" && window[$1e5a04cdaf7d1af8$var$localeSymbol] || typeof navigator !== \"undefined\" && (navigator.language || navigator.userLanguage) || \"en-US\";\n try {\n // @ts-ignore\n Intl.DateTimeFormat.supportedLocalesOf([\n locale\n ]);\n } catch (_err) {\n locale = \"en-US\";\n }\n return {\n locale: locale,\n direction: (0, $148a7a147e38ea7f$export$702d680b21cbd764)(locale) ? \"rtl\" : \"ltr\"\n };\n}\nlet $1e5a04cdaf7d1af8$var$currentLocale = $1e5a04cdaf7d1af8$export$f09106e7c6677ec5();\nlet $1e5a04cdaf7d1af8$var$listeners = new Set();\nfunction $1e5a04cdaf7d1af8$var$updateLocale() {\n $1e5a04cdaf7d1af8$var$currentLocale = $1e5a04cdaf7d1af8$export$f09106e7c6677ec5();\n for (let listener of $1e5a04cdaf7d1af8$var$listeners)listener($1e5a04cdaf7d1af8$var$currentLocale);\n}\nfunction $1e5a04cdaf7d1af8$export$188ec29ebc2bdc3a() {\n let isSSR = (0, $iFADg$useIsSSR)();\n let [defaultLocale, setDefaultLocale] = (0, $iFADg$useState)($1e5a04cdaf7d1af8$var$currentLocale);\n (0, $iFADg$useEffect)(()=>{\n if ($1e5a04cdaf7d1af8$var$listeners.size === 0) window.addEventListener(\"languagechange\", $1e5a04cdaf7d1af8$var$updateLocale);\n $1e5a04cdaf7d1af8$var$listeners.add(setDefaultLocale);\n return ()=>{\n $1e5a04cdaf7d1af8$var$listeners.delete(setDefaultLocale);\n if ($1e5a04cdaf7d1af8$var$listeners.size === 0) window.removeEventListener(\"languagechange\", $1e5a04cdaf7d1af8$var$updateLocale);\n };\n }, []);\n // We cannot determine the browser's language on the server, so default to\n // en-US. This will be updated after hydration on the client to the correct value.\n if (isSSR) return {\n locale: \"en-US\",\n direction: \"ltr\"\n };\n return defaultLocale;\n}\n\n\n\nconst $18f2051aff69b9bf$var$I18nContext = /*#__PURE__*/ (0, $iFADg$react).createContext(null);\nfunction $18f2051aff69b9bf$export$a54013f0d02a8f82(props) {\n let { locale: locale, children: children } = props;\n let defaultLocale = (0, $1e5a04cdaf7d1af8$export$188ec29ebc2bdc3a)();\n let value = locale ? {\n locale: locale,\n direction: (0, $148a7a147e38ea7f$export$702d680b21cbd764)(locale) ? \"rtl\" : \"ltr\"\n } : defaultLocale;\n return /*#__PURE__*/ (0, $iFADg$react).createElement($18f2051aff69b9bf$var$I18nContext.Provider, {\n value: value\n }, children);\n}\nfunction $18f2051aff69b9bf$export$43bb16f9c6d9e3f7() {\n let defaultLocale = (0, $1e5a04cdaf7d1af8$export$188ec29ebc2bdc3a)();\n let context = (0, $iFADg$useContext)($18f2051aff69b9bf$var$I18nContext);\n return context || defaultLocale;\n}\n\n\nvar $2aa2084a6c2b6b4f$exports = {};\n\"use strict\";\n\n\n/*\n * Copyright 2022 Adobe. All rights reserved.\n * This file is licensed to you under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License. You may obtain a copy\n * of the License at http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software distributed under\n * the License is distributed on an \"AS IS\" BASIS, WITHOUT WARRANTIES OR REPRESENTATIONS\n * OF ANY KIND, either express or implied. See the License for the specific language\n * governing permissions and limitations under the License.\n */ \n\n\nconst $fca6afa0e843324b$var$cache = new WeakMap();\nfunction $fca6afa0e843324b$var$getCachedDictionary(strings) {\n let dictionary = $fca6afa0e843324b$var$cache.get(strings);\n if (!dictionary) {\n dictionary = new (0, $iFADg$LocalizedStringDictionary)(strings);\n $fca6afa0e843324b$var$cache.set(strings, dictionary);\n }\n return dictionary;\n}\nfunction $fca6afa0e843324b$export$87b761675e8eaa10(strings, packageName) {\n return packageName && (0, $iFADg$LocalizedStringDictionary).getGlobalDictionaryForPackage(packageName) || $fca6afa0e843324b$var$getCachedDictionary(strings);\n}\nfunction $fca6afa0e843324b$export$f12b703ca79dfbb1(strings, packageName) {\n let { locale: locale } = (0, $18f2051aff69b9bf$export$43bb16f9c6d9e3f7)();\n let dictionary = $fca6afa0e843324b$export$87b761675e8eaa10(strings, packageName);\n return (0, $iFADg$useMemo)(()=>new (0, $iFADg$LocalizedStringFormatter)(locale, dictionary), [\n locale,\n dictionary\n ]);\n}\n\n\n/*\n * Copyright 2020 Adobe. All rights reserved.\n * This file is licensed to you under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License. You may obtain a copy\n * of the License at http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software distributed under\n * the License is distributed on an \"AS IS\" BASIS, WITHOUT WARRANTIES OR REPRESENTATIONS\n * OF ANY KIND, either express or implied. See the License for the specific language\n * governing permissions and limitations under the License.\n */ \n\nfunction $33bf17300c498528$export$a2f47a3d2973640(options = {}) {\n let { locale: locale } = (0, $18f2051aff69b9bf$export$43bb16f9c6d9e3f7)();\n return (0, $iFADg$useMemo)(()=>new Intl.ListFormat(locale, options), [\n locale,\n options\n ]);\n}\n\n\n/*\n * Copyright 2020 Adobe. All rights reserved.\n * This file is licensed to you under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License. You may obtain a copy\n * of the License at http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software distributed under\n * the License is distributed on an \"AS IS\" BASIS, WITHOUT WARRANTIES OR REPRESENTATIONS\n * OF ANY KIND, either express or implied. See the License for the specific language\n * governing permissions and limitations under the License.\n */ \n\n\n\nfunction $896ba0a80a8f4d36$export$85fd5fdf27bacc79(options) {\n // Reuse last options object if it is shallowly equal, which allows the useMemo result to also be reused.\n options = (0, $iFADg$useDeepMemo)(options !== null && options !== void 0 ? options : {}, $896ba0a80a8f4d36$var$isEqual);\n let { locale: locale } = (0, $18f2051aff69b9bf$export$43bb16f9c6d9e3f7)();\n return (0, $iFADg$useMemo)(()=>new (0, $iFADg$DateFormatter)(locale, options), [\n locale,\n options\n ]);\n}\nfunction $896ba0a80a8f4d36$var$isEqual(a, b) {\n if (a === b) return true;\n let aKeys = Object.keys(a);\n let bKeys = Object.keys(b);\n if (aKeys.length !== bKeys.length) return false;\n for (let key of aKeys){\n if (b[key] !== a[key]) return false;\n }\n return true;\n}\n\n\n/*\n * Copyright 2020 Adobe. All rights reserved.\n * This file is licensed to you under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License. You may obtain a copy\n * of the License at http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software distributed under\n * the License is distributed on an \"AS IS\" BASIS, WITHOUT WARRANTIES OR REPRESENTATIONS\n * OF ANY KIND, either express or implied. See the License for the specific language\n * governing permissions and limitations under the License.\n */ \n\n\nfunction $a916eb452884faea$export$b7a616150fdb9f44(options = {}) {\n let { locale: locale } = (0, $18f2051aff69b9bf$export$43bb16f9c6d9e3f7)();\n return (0, $iFADg$useMemo)(()=>new (0, $iFADg$NumberFormatter)(locale, options), [\n locale,\n options\n ]);\n}\n\n\n/*\n * Copyright 2020 Adobe. All rights reserved.\n * This file is licensed to you under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License. You may obtain a copy\n * of the License at http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software distributed under\n * the License is distributed on an \"AS IS\" BASIS, WITHOUT WARRANTIES OR REPRESENTATIONS\n * OF ANY KIND, either express or implied. See the License for the specific language\n * governing permissions and limitations under the License.\n */ \nlet $325a3faab7a68acd$var$cache = new Map();\nfunction $325a3faab7a68acd$export$a16aca283550c30d(options) {\n let { locale: locale } = (0, $18f2051aff69b9bf$export$43bb16f9c6d9e3f7)();\n let cacheKey = locale + (options ? Object.entries(options).sort((a, b)=>a[0] < b[0] ? -1 : 1).join() : \"\");\n if ($325a3faab7a68acd$var$cache.has(cacheKey)) return $325a3faab7a68acd$var$cache.get(cacheKey);\n let formatter = new Intl.Collator(locale, options);\n $325a3faab7a68acd$var$cache.set(cacheKey, formatter);\n return formatter;\n}\n\n\n/*\n * Copyright 2020 Adobe. All rights reserved.\n * This file is licensed to you under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License. You may obtain a copy\n * of the License at http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software distributed under\n * the License is distributed on an \"AS IS\" BASIS, WITHOUT WARRANTIES OR REPRESENTATIONS\n * OF ANY KIND, either express or implied. See the License for the specific language\n * governing permissions and limitations under the License.\n */ \n\nfunction $bb77f239b46e8c72$export$3274cf84b703fff(options) {\n let collator = (0, $325a3faab7a68acd$export$a16aca283550c30d)({\n usage: \"search\",\n ...options\n });\n // TODO(later): these methods don't currently support the ignorePunctuation option.\n let startsWith = (0, $iFADg$useCallback)((string, substring)=>{\n if (substring.length === 0) return true;\n // Normalize both strings so we can slice safely\n // TODO: take into account the ignorePunctuation option as well...\n string = string.normalize(\"NFC\");\n substring = substring.normalize(\"NFC\");\n return collator.compare(string.slice(0, substring.length), substring) === 0;\n }, [\n collator\n ]);\n let endsWith = (0, $iFADg$useCallback)((string, substring)=>{\n if (substring.length === 0) return true;\n string = string.normalize(\"NFC\");\n substring = substring.normalize(\"NFC\");\n return collator.compare(string.slice(-substring.length), substring) === 0;\n }, [\n collator\n ]);\n let contains = (0, $iFADg$useCallback)((string, substring)=>{\n if (substring.length === 0) return true;\n string = string.normalize(\"NFC\");\n substring = substring.normalize(\"NFC\");\n let scan = 0;\n let sliceLen = substring.length;\n for(; scan + sliceLen <= string.length; scan++){\n let slice = string.slice(scan, scan + sliceLen);\n if (collator.compare(substring, slice) === 0) return true;\n }\n return false;\n }, [\n collator\n ]);\n return (0, $iFADg$useMemo)(()=>({\n startsWith: startsWith,\n endsWith: endsWith,\n contains: contains\n }), [\n startsWith,\n endsWith,\n contains\n ]);\n}\n\n\n\n\nexport {$18f2051aff69b9bf$export$a54013f0d02a8f82 as I18nProvider, $18f2051aff69b9bf$export$43bb16f9c6d9e3f7 as useLocale, $fca6afa0e843324b$export$f12b703ca79dfbb1 as useLocalizedStringFormatter, $fca6afa0e843324b$export$87b761675e8eaa10 as useLocalizedStringDictionary, $33bf17300c498528$export$a2f47a3d2973640 as useListFormatter, $896ba0a80a8f4d36$export$85fd5fdf27bacc79 as useDateFormatter, $a916eb452884faea$export$b7a616150fdb9f44 as useNumberFormatter, $325a3faab7a68acd$export$a16aca283550c30d as useCollator, $bb77f239b46e8c72$export$3274cf84b703fff as useFilter};\n//# sourceMappingURL=real-module.js.map\n","import {flushSync as $eCAIO$flushSync} from \"react-dom\";\nimport {useRef as $eCAIO$useRef, useEffect as $eCAIO$useEffect, useMemo as $eCAIO$useMemo} from \"react\";\nimport {getFocusableTreeWalker as $eCAIO$getFocusableTreeWalker, focusSafely as $eCAIO$focusSafely} from \"@react-aria/focus\";\nimport {useRouter as $eCAIO$useRouter, focusWithoutScrolling as $eCAIO$focusWithoutScrolling, useEvent as $eCAIO$useEvent, scrollIntoViewport as $eCAIO$scrollIntoViewport, scrollIntoView as $eCAIO$scrollIntoView, mergeProps as $eCAIO$mergeProps, isAppleDevice as $eCAIO$isAppleDevice, isMac as $eCAIO$isMac, openLink as $eCAIO$openLink, isScrollable as $eCAIO$isScrollable} from \"@react-aria/utils\";\nimport {getInteractionModality as $eCAIO$getInteractionModality, usePress as $eCAIO$usePress, useLongPress as $eCAIO$useLongPress} from \"@react-aria/interactions\";\nimport {useLocale as $eCAIO$useLocale, useCollator as $eCAIO$useCollator} from \"@react-aria/i18n\";\n\n/*\n * Copyright 2020 Adobe. All rights reserved.\n * This file is licensed to you under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License. You may obtain a copy\n * of the License at http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software distributed under\n * the License is distributed on an \"AS IS\" BASIS, WITHOUT WARRANTIES OR REPRESENTATIONS\n * OF ANY KIND, either express or implied. See the License for the specific language\n * governing permissions and limitations under the License.\n */ /*\n * Copyright 2020 Adobe. All rights reserved.\n * This file is licensed to you under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License. You may obtain a copy\n * of the License at http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software distributed under\n * the License is distributed on an \"AS IS\" BASIS, WITHOUT WARRANTIES OR REPRESENTATIONS\n * OF ANY KIND, either express or implied. See the License for the specific language\n * governing permissions and limitations under the License.\n */ \n\n\n\n\n/*\n * Copyright 2020 Adobe. All rights reserved.\n * This file is licensed to you under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License. You may obtain a copy\n * of the License at http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software distributed under\n * the License is distributed on an \"AS IS\" BASIS, WITHOUT WARRANTIES OR REPRESENTATIONS\n * OF ANY KIND, either express or implied. See the License for the specific language\n * governing permissions and limitations under the License.\n */ \nfunction $feb5ffebff200149$export$d3e3bd3e26688c04(e) {\n // Ctrl + Arrow Up/Arrow Down has a system wide meaning on macOS, so use Alt instead.\n // On Windows and Ubuntu, Alt + Space has a system wide meaning.\n return (0, $eCAIO$isAppleDevice)() ? e.altKey : e.ctrlKey;\n}\nfunction $feb5ffebff200149$export$16792effe837dba3(e) {\n if ((0, $eCAIO$isMac)()) return e.metaKey;\n return e.ctrlKey;\n}\n\n\n\n/*\n * Copyright 2020 Adobe. All rights reserved.\n * This file is licensed to you under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License. You may obtain a copy\n * of the License at http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software distributed under\n * the License is distributed on an \"AS IS\" BASIS, WITHOUT WARRANTIES OR REPRESENTATIONS\n * OF ANY KIND, either express or implied. See the License for the specific language\n * governing permissions and limitations under the License.\n */ \n/**\n * Controls how long to wait before clearing the typeahead buffer.\n */ const $fb3050f43d946246$var$TYPEAHEAD_DEBOUNCE_WAIT_MS = 1000; // 1 second\nfunction $fb3050f43d946246$export$e32c88dfddc6e1d8(options) {\n let { keyboardDelegate: keyboardDelegate, selectionManager: selectionManager, onTypeSelect: onTypeSelect } = options;\n let state = (0, $eCAIO$useRef)({\n search: \"\",\n timeout: null\n }).current;\n let onKeyDown = (e)=>{\n let character = $fb3050f43d946246$var$getStringForKey(e.key);\n if (!character || e.ctrlKey || e.metaKey || !e.currentTarget.contains(e.target)) return;\n // Do not propagate the Spacebar event if it's meant to be part of the search.\n // When we time out, the search term becomes empty, hence the check on length.\n // Trimming is to account for the case of pressing the Spacebar more than once,\n // which should cycle through the selection/deselection of the focused item.\n if (character === \" \" && state.search.trim().length > 0) {\n e.preventDefault();\n if (!(\"continuePropagation\" in e)) e.stopPropagation();\n }\n state.search += character;\n // Use the delegate to find a key to focus.\n // Prioritize items after the currently focused item, falling back to searching the whole list.\n let key = keyboardDelegate.getKeyForSearch(state.search, selectionManager.focusedKey);\n // If no key found, search from the top.\n if (key == null) key = keyboardDelegate.getKeyForSearch(state.search);\n if (key != null) {\n selectionManager.setFocusedKey(key);\n if (onTypeSelect) onTypeSelect(key);\n }\n clearTimeout(state.timeout);\n state.timeout = setTimeout(()=>{\n state.search = \"\";\n }, $fb3050f43d946246$var$TYPEAHEAD_DEBOUNCE_WAIT_MS);\n };\n return {\n typeSelectProps: {\n // Using a capturing listener to catch the keydown event before\n // other hooks in order to handle the Spacebar event.\n onKeyDownCapture: keyboardDelegate.getKeyForSearch ? onKeyDown : null\n }\n };\n}\nfunction $fb3050f43d946246$var$getStringForKey(key) {\n // If the key is of length 1, it is an ASCII value.\n // Otherwise, if there are no ASCII characters in the key name,\n // it is a Unicode character.\n // See https://www.w3.org/TR/uievents-key/\n if (key.length === 1 || !/^[A-Z]/i.test(key)) return key;\n return \"\";\n}\n\n\nfunction $ae20dd8cbca75726$export$d6daf82dcd84e87c(options) {\n let { selectionManager: manager, keyboardDelegate: delegate, ref: ref, autoFocus: autoFocus = false, shouldFocusWrap: shouldFocusWrap = false, disallowEmptySelection: disallowEmptySelection = false, disallowSelectAll: disallowSelectAll = false, selectOnFocus: selectOnFocus = manager.selectionBehavior === \"replace\", disallowTypeAhead: disallowTypeAhead = false, shouldUseVirtualFocus: shouldUseVirtualFocus, allowsTabNavigation: allowsTabNavigation = false, isVirtualized: isVirtualized, scrollRef: // If no scrollRef is provided, assume the collection ref is the scrollable region\n scrollRef = ref, linkBehavior: linkBehavior = \"action\" } = options;\n let { direction: direction } = (0, $eCAIO$useLocale)();\n let router = (0, $eCAIO$useRouter)();\n let onKeyDown = (e)=>{\n // Prevent option + tab from doing anything since it doesn't move focus to the cells, only buttons/checkboxes\n if (e.altKey && e.key === \"Tab\") e.preventDefault();\n // Keyboard events bubble through portals. Don't handle keyboard events\n // for elements outside the collection (e.g. menus).\n if (!ref.current.contains(e.target)) return;\n const navigateToKey = (key, childFocus)=>{\n if (key != null) {\n if (manager.isLink(key) && linkBehavior === \"selection\" && selectOnFocus && !(0, $feb5ffebff200149$export$d3e3bd3e26688c04)(e)) {\n // Set focused key and re-render synchronously to bring item into view if needed.\n (0, $eCAIO$flushSync)(()=>{\n manager.setFocusedKey(key, childFocus);\n });\n let item = scrollRef.current.querySelector(`[data-key=\"${CSS.escape(key.toString())}\"]`);\n router.open(item, e);\n return;\n }\n manager.setFocusedKey(key, childFocus);\n if (manager.isLink(key) && linkBehavior === \"override\") return;\n if (e.shiftKey && manager.selectionMode === \"multiple\") manager.extendSelection(key);\n else if (selectOnFocus && !(0, $feb5ffebff200149$export$d3e3bd3e26688c04)(e)) manager.replaceSelection(key);\n }\n };\n switch(e.key){\n case \"ArrowDown\":\n if (delegate.getKeyBelow) {\n var _delegate_getFirstKey, _delegate_getFirstKey1;\n e.preventDefault();\n let nextKey = manager.focusedKey != null ? delegate.getKeyBelow(manager.focusedKey) : (_delegate_getFirstKey = delegate.getFirstKey) === null || _delegate_getFirstKey === void 0 ? void 0 : _delegate_getFirstKey.call(delegate);\n if (nextKey == null && shouldFocusWrap) nextKey = (_delegate_getFirstKey1 = delegate.getFirstKey) === null || _delegate_getFirstKey1 === void 0 ? void 0 : _delegate_getFirstKey1.call(delegate, manager.focusedKey);\n navigateToKey(nextKey);\n }\n break;\n case \"ArrowUp\":\n if (delegate.getKeyAbove) {\n var _delegate_getLastKey, _delegate_getLastKey1;\n e.preventDefault();\n let nextKey = manager.focusedKey != null ? delegate.getKeyAbove(manager.focusedKey) : (_delegate_getLastKey = delegate.getLastKey) === null || _delegate_getLastKey === void 0 ? void 0 : _delegate_getLastKey.call(delegate);\n if (nextKey == null && shouldFocusWrap) nextKey = (_delegate_getLastKey1 = delegate.getLastKey) === null || _delegate_getLastKey1 === void 0 ? void 0 : _delegate_getLastKey1.call(delegate, manager.focusedKey);\n navigateToKey(nextKey);\n }\n break;\n case \"ArrowLeft\":\n if (delegate.getKeyLeftOf) {\n var _delegate_getFirstKey2, _delegate_getLastKey2;\n e.preventDefault();\n let nextKey = delegate.getKeyLeftOf(manager.focusedKey);\n if (nextKey == null && shouldFocusWrap) nextKey = direction === \"rtl\" ? (_delegate_getFirstKey2 = delegate.getFirstKey) === null || _delegate_getFirstKey2 === void 0 ? void 0 : _delegate_getFirstKey2.call(delegate, manager.focusedKey) : (_delegate_getLastKey2 = delegate.getLastKey) === null || _delegate_getLastKey2 === void 0 ? void 0 : _delegate_getLastKey2.call(delegate, manager.focusedKey);\n navigateToKey(nextKey, direction === \"rtl\" ? \"first\" : \"last\");\n }\n break;\n case \"ArrowRight\":\n if (delegate.getKeyRightOf) {\n var _delegate_getLastKey3, _delegate_getFirstKey3;\n e.preventDefault();\n let nextKey = delegate.getKeyRightOf(manager.focusedKey);\n if (nextKey == null && shouldFocusWrap) nextKey = direction === \"rtl\" ? (_delegate_getLastKey3 = delegate.getLastKey) === null || _delegate_getLastKey3 === void 0 ? void 0 : _delegate_getLastKey3.call(delegate, manager.focusedKey) : (_delegate_getFirstKey3 = delegate.getFirstKey) === null || _delegate_getFirstKey3 === void 0 ? void 0 : _delegate_getFirstKey3.call(delegate, manager.focusedKey);\n navigateToKey(nextKey, direction === \"rtl\" ? \"last\" : \"first\");\n }\n break;\n case \"Home\":\n if (delegate.getFirstKey) {\n e.preventDefault();\n let firstKey = delegate.getFirstKey(manager.focusedKey, (0, $feb5ffebff200149$export$16792effe837dba3)(e));\n manager.setFocusedKey(firstKey);\n if ((0, $feb5ffebff200149$export$16792effe837dba3)(e) && e.shiftKey && manager.selectionMode === \"multiple\") manager.extendSelection(firstKey);\n else if (selectOnFocus) manager.replaceSelection(firstKey);\n }\n break;\n case \"End\":\n if (delegate.getLastKey) {\n e.preventDefault();\n let lastKey = delegate.getLastKey(manager.focusedKey, (0, $feb5ffebff200149$export$16792effe837dba3)(e));\n manager.setFocusedKey(lastKey);\n if ((0, $feb5ffebff200149$export$16792effe837dba3)(e) && e.shiftKey && manager.selectionMode === \"multiple\") manager.extendSelection(lastKey);\n else if (selectOnFocus) manager.replaceSelection(lastKey);\n }\n break;\n case \"PageDown\":\n if (delegate.getKeyPageBelow) {\n e.preventDefault();\n let nextKey = delegate.getKeyPageBelow(manager.focusedKey);\n navigateToKey(nextKey);\n }\n break;\n case \"PageUp\":\n if (delegate.getKeyPageAbove) {\n e.preventDefault();\n let nextKey = delegate.getKeyPageAbove(manager.focusedKey);\n navigateToKey(nextKey);\n }\n break;\n case \"a\":\n if ((0, $feb5ffebff200149$export$16792effe837dba3)(e) && manager.selectionMode === \"multiple\" && disallowSelectAll !== true) {\n e.preventDefault();\n manager.selectAll();\n }\n break;\n case \"Escape\":\n e.preventDefault();\n if (!disallowEmptySelection) manager.clearSelection();\n break;\n case \"Tab\":\n if (!allowsTabNavigation) {\n // There may be elements that are \"tabbable\" inside a collection (e.g. in a grid cell).\n // However, collections should be treated as a single tab stop, with arrow key navigation internally.\n // We don't control the rendering of these, so we can't override the tabIndex to prevent tabbing.\n // Instead, we handle the Tab key, and move focus manually to the first/last tabbable element\n // in the collection, so that the browser default behavior will apply starting from that element\n // rather than the currently focused one.\n if (e.shiftKey) ref.current.focus();\n else {\n let walker = (0, $eCAIO$getFocusableTreeWalker)(ref.current, {\n tabbable: true\n });\n let next;\n let last;\n do {\n last = walker.lastChild();\n if (last) next = last;\n }while (last);\n if (next && !next.contains(document.activeElement)) (0, $eCAIO$focusWithoutScrolling)(next);\n }\n break;\n }\n }\n };\n // Store the scroll position so we can restore it later.\n let scrollPos = (0, $eCAIO$useRef)({\n top: 0,\n left: 0\n });\n (0, $eCAIO$useEvent)(scrollRef, \"scroll\", isVirtualized ? null : ()=>{\n scrollPos.current = {\n top: scrollRef.current.scrollTop,\n left: scrollRef.current.scrollLeft\n };\n });\n let onFocus = (e)=>{\n if (manager.isFocused) {\n // If a focus event bubbled through a portal, reset focus state.\n if (!e.currentTarget.contains(e.target)) manager.setFocused(false);\n return;\n }\n // Focus events can bubble through portals. Ignore these events.\n if (!e.currentTarget.contains(e.target)) return;\n manager.setFocused(true);\n if (manager.focusedKey == null) {\n let navigateToFirstKey = (key)=>{\n if (key != null) {\n manager.setFocusedKey(key);\n if (selectOnFocus) manager.replaceSelection(key);\n }\n };\n // If the user hasn't yet interacted with the collection, there will be no focusedKey set.\n // Attempt to detect whether the user is tabbing forward or backward into the collection\n // and either focus the first or last item accordingly.\n let relatedTarget = e.relatedTarget;\n var _manager_lastSelectedKey, _manager_firstSelectedKey;\n if (relatedTarget && e.currentTarget.compareDocumentPosition(relatedTarget) & Node.DOCUMENT_POSITION_FOLLOWING) navigateToFirstKey((_manager_lastSelectedKey = manager.lastSelectedKey) !== null && _manager_lastSelectedKey !== void 0 ? _manager_lastSelectedKey : delegate.getLastKey());\n else navigateToFirstKey((_manager_firstSelectedKey = manager.firstSelectedKey) !== null && _manager_firstSelectedKey !== void 0 ? _manager_firstSelectedKey : delegate.getFirstKey());\n } else if (!isVirtualized) {\n // Restore the scroll position to what it was before.\n scrollRef.current.scrollTop = scrollPos.current.top;\n scrollRef.current.scrollLeft = scrollPos.current.left;\n }\n if (!isVirtualized && manager.focusedKey != null) {\n // Refocus and scroll the focused item into view if it exists within the scrollable region.\n let element = scrollRef.current.querySelector(`[data-key=\"${CSS.escape(manager.focusedKey.toString())}\"]`);\n if (element) {\n // This prevents a flash of focus on the first/last element in the collection, or the collection itself.\n if (!element.contains(document.activeElement)) (0, $eCAIO$focusWithoutScrolling)(element);\n let modality = (0, $eCAIO$getInteractionModality)();\n if (modality === \"keyboard\") (0, $eCAIO$scrollIntoViewport)(element, {\n containingElement: ref.current\n });\n }\n }\n };\n let onBlur = (e)=>{\n // Don't set blurred and then focused again if moving focus within the collection.\n if (!e.currentTarget.contains(e.relatedTarget)) manager.setFocused(false);\n };\n const autoFocusRef = (0, $eCAIO$useRef)(autoFocus);\n (0, $eCAIO$useEffect)(()=>{\n if (autoFocusRef.current) {\n let focusedKey = null;\n // Check focus strategy to determine which item to focus\n if (autoFocus === \"first\") focusedKey = delegate.getFirstKey();\n if (autoFocus === \"last\") focusedKey = delegate.getLastKey();\n // If there are any selected keys, make the first one the new focus target\n let selectedKeys = manager.selectedKeys;\n if (selectedKeys.size) {\n for (let key of selectedKeys)if (manager.canSelectItem(key)) {\n focusedKey = key;\n break;\n }\n }\n manager.setFocused(true);\n manager.setFocusedKey(focusedKey);\n // If no default focus key is selected, focus the collection itself.\n if (focusedKey == null && !shouldUseVirtualFocus) (0, $eCAIO$focusSafely)(ref.current);\n }\n // eslint-disable-next-line react-hooks/exhaustive-deps\n }, []);\n // If not virtualized, scroll the focused element into view when the focusedKey changes.\n // When virtualized, Virtualizer handles this internally.\n let lastFocusedKey = (0, $eCAIO$useRef)(manager.focusedKey);\n (0, $eCAIO$useEffect)(()=>{\n let modality = (0, $eCAIO$getInteractionModality)();\n if (manager.isFocused && manager.focusedKey != null && (scrollRef === null || scrollRef === void 0 ? void 0 : scrollRef.current)) {\n let element = scrollRef.current.querySelector(`[data-key=\"${CSS.escape(manager.focusedKey.toString())}\"]`);\n if (element && (modality === \"keyboard\" || autoFocusRef.current)) {\n if (!isVirtualized) (0, $eCAIO$scrollIntoView)(scrollRef.current, element);\n (0, $eCAIO$scrollIntoViewport)(element, {\n containingElement: ref.current\n });\n }\n }\n // If the focused key becomes null (e.g. the last item is deleted), focus the whole collection.\n if (manager.isFocused && manager.focusedKey == null && lastFocusedKey.current != null) (0, $eCAIO$focusSafely)(ref.current);\n lastFocusedKey.current = manager.focusedKey;\n autoFocusRef.current = false;\n }, [\n isVirtualized,\n scrollRef,\n manager.focusedKey,\n manager.isFocused,\n ref\n ]);\n let handlers = {\n onKeyDown: onKeyDown,\n onFocus: onFocus,\n onBlur: onBlur,\n onMouseDown (e) {\n // Ignore events that bubbled through portals.\n if (scrollRef.current === e.target) // Prevent focus going to the collection when clicking on the scrollbar.\n e.preventDefault();\n }\n };\n let { typeSelectProps: typeSelectProps } = (0, $fb3050f43d946246$export$e32c88dfddc6e1d8)({\n keyboardDelegate: delegate,\n selectionManager: manager\n });\n if (!disallowTypeAhead) handlers = (0, $eCAIO$mergeProps)(typeSelectProps, handlers);\n // If nothing is focused within the collection, make the collection itself tabbable.\n // This will be marshalled to either the first or last item depending on where focus came from.\n // If using virtual focus, don't set a tabIndex at all so that VoiceOver on iOS 14 doesn't try\n // to move real DOM focus to the element anyway.\n let tabIndex;\n if (!shouldUseVirtualFocus) tabIndex = manager.focusedKey == null ? 0 : -1;\n return {\n collectionProps: {\n ...handlers,\n tabIndex: tabIndex\n }\n };\n}\n\n\n/*\n * Copyright 2020 Adobe. All rights reserved.\n * This file is licensed to you under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License. You may obtain a copy\n * of the License at http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software distributed under\n * the License is distributed on an \"AS IS\" BASIS, WITHOUT WARRANTIES OR REPRESENTATIONS\n * OF ANY KIND, either express or implied. See the License for the specific language\n * governing permissions and limitations under the License.\n */ \n\n\n\n\nfunction $880e95eb8b93ba9a$export$ecf600387e221c37(options) {\n let { selectionManager: manager, key: key, ref: ref, shouldSelectOnPressUp: shouldSelectOnPressUp, shouldUseVirtualFocus: shouldUseVirtualFocus, focus: focus, isDisabled: isDisabled, onAction: onAction, allowsDifferentPressOrigin: allowsDifferentPressOrigin, linkBehavior: linkBehavior = \"action\" } = options;\n let router = (0, $eCAIO$useRouter)();\n let onSelect = (e)=>{\n if (e.pointerType === \"keyboard\" && (0, $feb5ffebff200149$export$d3e3bd3e26688c04)(e)) manager.toggleSelection(key);\n else {\n if (manager.selectionMode === \"none\") return;\n if (manager.isLink(key)) {\n if (linkBehavior === \"selection\") {\n router.open(ref.current, e);\n // Always set selected keys back to what they were so that select and combobox close.\n manager.setSelectedKeys(manager.selectedKeys);\n return;\n } else if (linkBehavior === \"override\" || linkBehavior === \"none\") return;\n }\n if (manager.selectionMode === \"single\") {\n if (manager.isSelected(key) && !manager.disallowEmptySelection) manager.toggleSelection(key);\n else manager.replaceSelection(key);\n } else if (e && e.shiftKey) manager.extendSelection(key);\n else if (manager.selectionBehavior === \"toggle\" || e && ((0, $feb5ffebff200149$export$16792effe837dba3)(e) || e.pointerType === \"touch\" || e.pointerType === \"virtual\")) // if touch or virtual (VO) then we just want to toggle, otherwise it's impossible to multi select because they don't have modifier keys\n manager.toggleSelection(key);\n else manager.replaceSelection(key);\n }\n };\n // Focus the associated DOM node when this item becomes the focusedKey\n (0, $eCAIO$useEffect)(()=>{\n let isFocused = key === manager.focusedKey;\n if (isFocused && manager.isFocused && !shouldUseVirtualFocus) {\n if (focus) focus();\n else if (document.activeElement !== ref.current) (0, $eCAIO$focusSafely)(ref.current);\n }\n // eslint-disable-next-line react-hooks/exhaustive-deps\n }, [\n ref,\n key,\n manager.focusedKey,\n manager.childFocusStrategy,\n manager.isFocused,\n shouldUseVirtualFocus\n ]);\n isDisabled = isDisabled || manager.isDisabled(key);\n // Set tabIndex to 0 if the element is focused, or -1 otherwise so that only the last focused\n // item is tabbable. If using virtual focus, don't set a tabIndex at all so that VoiceOver\n // on iOS 14 doesn't try to move real DOM focus to the item anyway.\n let itemProps = {};\n if (!shouldUseVirtualFocus && !isDisabled) itemProps = {\n tabIndex: key === manager.focusedKey ? 0 : -1,\n onFocus (e) {\n if (e.target === ref.current) manager.setFocusedKey(key);\n }\n };\n else if (isDisabled) itemProps.onMouseDown = (e)=>{\n // Prevent focus going to the body when clicking on a disabled item.\n e.preventDefault();\n };\n // With checkbox selection, onAction (i.e. navigation) becomes primary, and occurs on a single click of the row.\n // Clicking the checkbox enters selection mode, after which clicking anywhere on any row toggles selection for that row.\n // With highlight selection, onAction is secondary, and occurs on double click. Single click selects the row.\n // With touch, onAction occurs on single tap, and long press enters selection mode.\n let isLinkOverride = manager.isLink(key) && linkBehavior === \"override\";\n let hasLinkAction = manager.isLink(key) && linkBehavior !== \"selection\" && linkBehavior !== \"none\";\n let allowsSelection = !isDisabled && manager.canSelectItem(key) && !isLinkOverride;\n let allowsActions = (onAction || hasLinkAction) && !isDisabled;\n let hasPrimaryAction = allowsActions && (manager.selectionBehavior === \"replace\" ? !allowsSelection : !allowsSelection || manager.isEmpty);\n let hasSecondaryAction = allowsActions && allowsSelection && manager.selectionBehavior === \"replace\";\n let hasAction = hasPrimaryAction || hasSecondaryAction;\n let modality = (0, $eCAIO$useRef)(null);\n let longPressEnabled = hasAction && allowsSelection;\n let longPressEnabledOnPressStart = (0, $eCAIO$useRef)(false);\n let hadPrimaryActionOnPressStart = (0, $eCAIO$useRef)(false);\n let performAction = (e)=>{\n if (onAction) onAction();\n if (hasLinkAction) router.open(ref.current, e);\n };\n // By default, selection occurs on pointer down. This can be strange if selecting an\n // item causes the UI to disappear immediately (e.g. menus).\n // If shouldSelectOnPressUp is true, we use onPressUp instead of onPressStart.\n // onPress requires a pointer down event on the same element as pointer up. For menus,\n // we want to be able to have the pointer down on the trigger that opens the menu and\n // the pointer up on the menu item rather than requiring a separate press.\n // For keyboard events, selection still occurs on key down.\n let itemPressProps = {};\n if (shouldSelectOnPressUp) {\n itemPressProps.onPressStart = (e)=>{\n modality.current = e.pointerType;\n longPressEnabledOnPressStart.current = longPressEnabled;\n if (e.pointerType === \"keyboard\" && (!hasAction || $880e95eb8b93ba9a$var$isSelectionKey())) onSelect(e);\n };\n // If allowsDifferentPressOrigin, make selection happen on pressUp (e.g. open menu on press down, selection on menu item happens on press up.)\n // Otherwise, have selection happen onPress (prevents listview row selection when clicking on interactable elements in the row)\n if (!allowsDifferentPressOrigin) itemPressProps.onPress = (e)=>{\n if (hasPrimaryAction || hasSecondaryAction && e.pointerType !== \"mouse\") {\n if (e.pointerType === \"keyboard\" && !$880e95eb8b93ba9a$var$isActionKey()) return;\n performAction(e);\n } else if (e.pointerType !== \"keyboard\" && allowsSelection) onSelect(e);\n };\n else {\n itemPressProps.onPressUp = hasPrimaryAction ? null : (e)=>{\n if (e.pointerType !== \"keyboard\" && allowsSelection) onSelect(e);\n };\n itemPressProps.onPress = hasPrimaryAction ? performAction : null;\n }\n } else {\n itemPressProps.onPressStart = (e)=>{\n modality.current = e.pointerType;\n longPressEnabledOnPressStart.current = longPressEnabled;\n hadPrimaryActionOnPressStart.current = hasPrimaryAction;\n // Select on mouse down unless there is a primary action which will occur on mouse up.\n // For keyboard, select on key down. If there is an action, the Space key selects on key down,\n // and the Enter key performs onAction on key up.\n if (allowsSelection && (e.pointerType === \"mouse\" && !hasPrimaryAction || e.pointerType === \"keyboard\" && (!allowsActions || $880e95eb8b93ba9a$var$isSelectionKey()))) onSelect(e);\n };\n itemPressProps.onPress = (e)=>{\n // Selection occurs on touch up. Primary actions always occur on pointer up.\n // Both primary and secondary actions occur on Enter key up. The only exception\n // is secondary actions, which occur on double click with a mouse.\n if (e.pointerType === \"touch\" || e.pointerType === \"pen\" || e.pointerType === \"virtual\" || e.pointerType === \"keyboard\" && hasAction && $880e95eb8b93ba9a$var$isActionKey() || e.pointerType === \"mouse\" && hadPrimaryActionOnPressStart.current) {\n if (hasAction) performAction(e);\n else if (allowsSelection) onSelect(e);\n }\n };\n }\n itemProps[\"data-key\"] = key;\n itemPressProps.preventFocusOnPress = shouldUseVirtualFocus;\n let { pressProps: pressProps, isPressed: isPressed } = (0, $eCAIO$usePress)(itemPressProps);\n // Double clicking with a mouse with selectionBehavior = 'replace' performs an action.\n let onDoubleClick = hasSecondaryAction ? (e)=>{\n if (modality.current === \"mouse\") {\n e.stopPropagation();\n e.preventDefault();\n performAction(e);\n }\n } : undefined;\n // Long pressing an item with touch when selectionBehavior = 'replace' switches the selection behavior\n // to 'toggle'. This changes the single tap behavior from performing an action (i.e. navigating) to\n // selecting, and may toggle the appearance of a UI affordance like checkboxes on each item.\n let { longPressProps: longPressProps } = (0, $eCAIO$useLongPress)({\n isDisabled: !longPressEnabled,\n onLongPress (e) {\n if (e.pointerType === \"touch\") {\n onSelect(e);\n manager.setSelectionBehavior(\"toggle\");\n }\n }\n });\n // Prevent native drag and drop on long press if we also select on long press.\n // Once the user is in selection mode, they can long press again to drag.\n // Use a capturing listener to ensure this runs before useDrag, regardless of\n // the order the props get merged.\n let onDragStartCapture = (e)=>{\n if (modality.current === \"touch\" && longPressEnabledOnPressStart.current) e.preventDefault();\n };\n // Prevent default on link clicks so that we control exactly\n // when they open (to match selection behavior).\n let onClick = manager.isLink(key) ? (e)=>{\n if (!(0, $eCAIO$openLink).isOpening) e.preventDefault();\n } : undefined;\n return {\n itemProps: (0, $eCAIO$mergeProps)(itemProps, allowsSelection || hasPrimaryAction ? pressProps : {}, longPressEnabled ? longPressProps : {}, {\n onDoubleClick: onDoubleClick,\n onDragStartCapture: onDragStartCapture,\n onClick: onClick\n }),\n isPressed: isPressed,\n isSelected: manager.isSelected(key),\n isFocused: manager.isFocused && manager.focusedKey === key,\n isDisabled: isDisabled,\n allowsSelection: allowsSelection,\n hasAction: hasAction\n };\n}\nfunction $880e95eb8b93ba9a$var$isActionKey() {\n let event = window.event;\n return (event === null || event === void 0 ? void 0 : event.key) === \"Enter\";\n}\nfunction $880e95eb8b93ba9a$var$isSelectionKey() {\n let event = window.event;\n return (event === null || event === void 0 ? void 0 : event.key) === \" \" || (event === null || event === void 0 ? void 0 : event.code) === \"Space\";\n}\n\n\n/*\n * Copyright 2020 Adobe. All rights reserved.\n * This file is licensed to you under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License. You may obtain a copy\n * of the License at http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software distributed under\n * the License is distributed on an \"AS IS\" BASIS, WITHOUT WARRANTIES OR REPRESENTATIONS\n * OF ANY KIND, either express or implied. See the License for the specific language\n * governing permissions and limitations under the License.\n */ \n/*\n * Copyright 2020 Adobe. All rights reserved.\n * This file is licensed to you under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License. You may obtain a copy\n * of the License at http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software distributed under\n * the License is distributed on an \"AS IS\" BASIS, WITHOUT WARRANTIES OR REPRESENTATIONS\n * OF ANY KIND, either express or implied. See the License for the specific language\n * governing permissions and limitations under the License.\n */ \nclass $2a25aae57d74318e$export$a05409b8bb224a5a {\n getNextKey(key) {\n key = this.collection.getKeyAfter(key);\n while(key != null){\n let item = this.collection.getItem(key);\n if (item.type === \"item\" && !this.disabledKeys.has(key)) return key;\n key = this.collection.getKeyAfter(key);\n }\n return null;\n }\n getPreviousKey(key) {\n key = this.collection.getKeyBefore(key);\n while(key != null){\n let item = this.collection.getItem(key);\n if (item.type === \"item\" && !this.disabledKeys.has(key)) return key;\n key = this.collection.getKeyBefore(key);\n }\n return null;\n }\n findKey(key, nextKey, shouldSkip) {\n let item = this.getItem(key);\n if (!item) return null;\n // Find the item above or below in the same column.\n let prevRect = item.getBoundingClientRect();\n do {\n key = nextKey(key);\n item = this.getItem(key);\n }while (item && shouldSkip(prevRect, item.getBoundingClientRect()));\n return key;\n }\n isSameRow(prevRect, itemRect) {\n return prevRect.top === itemRect.top || prevRect.left !== itemRect.left;\n }\n isSameColumn(prevRect, itemRect) {\n return prevRect.left === itemRect.left || prevRect.top !== itemRect.top;\n }\n getKeyBelow(key) {\n if (this.layout === \"grid\" && this.orientation === \"vertical\") return this.findKey(key, (key)=>this.getNextKey(key), this.isSameRow);\n else return this.getNextKey(key);\n }\n getKeyAbove(key) {\n if (this.layout === \"grid\" && this.orientation === \"vertical\") return this.findKey(key, (key)=>this.getPreviousKey(key), this.isSameRow);\n else return this.getPreviousKey(key);\n }\n getNextColumn(key, right) {\n return right ? this.getPreviousKey(key) : this.getNextKey(key);\n }\n getKeyRightOf(key) {\n if (this.layout === \"grid\") {\n if (this.orientation === \"vertical\") return this.getNextColumn(key, this.direction === \"rtl\");\n else return this.findKey(key, (key)=>this.getNextColumn(key, this.direction === \"rtl\"), this.isSameColumn);\n } else if (this.orientation === \"horizontal\") return this.getNextColumn(key, this.direction === \"rtl\");\n return null;\n }\n getKeyLeftOf(key) {\n if (this.layout === \"grid\") {\n if (this.orientation === \"vertical\") return this.getNextColumn(key, this.direction === \"ltr\");\n else return this.findKey(key, (key)=>this.getNextColumn(key, this.direction === \"ltr\"), this.isSameColumn);\n } else if (this.orientation === \"horizontal\") return this.getNextColumn(key, this.direction === \"ltr\");\n return null;\n }\n getFirstKey() {\n let key = this.collection.getFirstKey();\n while(key != null){\n let item = this.collection.getItem(key);\n if (item.type === \"item\" && !this.disabledKeys.has(key)) return key;\n key = this.collection.getKeyAfter(key);\n }\n return null;\n }\n getLastKey() {\n let key = this.collection.getLastKey();\n while(key != null){\n let item = this.collection.getItem(key);\n if (item.type === \"item\" && !this.disabledKeys.has(key)) return key;\n key = this.collection.getKeyBefore(key);\n }\n return null;\n }\n getItem(key) {\n return this.ref.current.querySelector(`[data-key=\"${CSS.escape(key.toString())}\"]`);\n }\n getKeyPageAbove(key) {\n let menu = this.ref.current;\n let item = this.getItem(key);\n if (!item) return null;\n if (!(0, $eCAIO$isScrollable)(menu)) return this.getFirstKey();\n let containerRect = menu.getBoundingClientRect();\n let itemRect = item.getBoundingClientRect();\n if (this.orientation === \"horizontal\") {\n let containerX = containerRect.x - menu.scrollLeft;\n let pageX = Math.max(0, itemRect.x - containerX + itemRect.width - containerRect.width);\n while(item && itemRect.x - containerX > pageX){\n key = this.getKeyAbove(key);\n item = key == null ? null : this.getItem(key);\n itemRect = item === null || item === void 0 ? void 0 : item.getBoundingClientRect();\n }\n } else {\n let containerY = containerRect.y - menu.scrollTop;\n let pageY = Math.max(0, itemRect.y - containerY + itemRect.height - containerRect.height);\n while(item && itemRect.y - containerY > pageY){\n key = this.getKeyAbove(key);\n item = key == null ? null : this.getItem(key);\n itemRect = item === null || item === void 0 ? void 0 : item.getBoundingClientRect();\n }\n }\n return key !== null && key !== void 0 ? key : this.getFirstKey();\n }\n getKeyPageBelow(key) {\n let menu = this.ref.current;\n let item = this.getItem(key);\n if (!item) return null;\n if (!(0, $eCAIO$isScrollable)(menu)) return this.getLastKey();\n let containerRect = menu.getBoundingClientRect();\n let itemRect = item.getBoundingClientRect();\n if (this.orientation === \"horizontal\") {\n let containerX = containerRect.x - menu.scrollLeft;\n let pageX = Math.min(menu.scrollWidth, itemRect.x - containerX - itemRect.width + containerRect.width);\n while(item && itemRect.x - containerX < pageX){\n key = this.getKeyBelow(key);\n item = key == null ? null : this.getItem(key);\n itemRect = item === null || item === void 0 ? void 0 : item.getBoundingClientRect();\n }\n } else {\n let containerY = containerRect.y - menu.scrollTop;\n let pageY = Math.min(menu.scrollHeight, itemRect.y - containerY - itemRect.height + containerRect.height);\n while(item && itemRect.y - containerY < pageY){\n key = this.getKeyBelow(key);\n item = key == null ? null : this.getItem(key);\n itemRect = item === null || item === void 0 ? void 0 : item.getBoundingClientRect();\n }\n }\n return key !== null && key !== void 0 ? key : this.getLastKey();\n }\n getKeyForSearch(search, fromKey) {\n if (!this.collator) return null;\n let collection = this.collection;\n let key = fromKey || this.getFirstKey();\n while(key != null){\n let item = collection.getItem(key);\n let substring = item.textValue.slice(0, search.length);\n if (item.textValue && this.collator.compare(substring, search) === 0) return key;\n key = this.getKeyBelow(key);\n }\n return null;\n }\n constructor(...args){\n if (args.length === 1) {\n let opts = args[0];\n this.collection = opts.collection;\n this.ref = opts.ref;\n this.collator = opts.collator;\n this.disabledKeys = opts.disabledKeys || new Set();\n this.orientation = opts.orientation;\n this.direction = opts.direction;\n this.layout = opts.layout || \"stack\";\n } else {\n this.collection = args[0];\n this.disabledKeys = args[1];\n this.ref = args[2];\n this.collator = args[3];\n this.layout = \"stack\";\n this.orientation = \"vertical\";\n }\n // If this is a vertical stack, remove the left/right methods completely\n // so they aren't called by useDroppableCollection.\n if (this.layout === \"stack\" && this.orientation === \"vertical\") {\n this.getKeyLeftOf = undefined;\n this.getKeyRightOf = undefined;\n }\n }\n}\n\n\n\n\nfunction $982254629710d113$export$b95089534ab7c1fd(props) {\n let { selectionManager: selectionManager, collection: collection, disabledKeys: disabledKeys, ref: ref, keyboardDelegate: keyboardDelegate } = props;\n // By default, a KeyboardDelegate is provided which uses the DOM to query layout information (e.g. for page up/page down).\n // When virtualized, the layout object will be passed in as a prop and override this.\n let collator = (0, $eCAIO$useCollator)({\n usage: \"search\",\n sensitivity: \"base\"\n });\n let disabledBehavior = selectionManager.disabledBehavior;\n let delegate = (0, $eCAIO$useMemo)(()=>keyboardDelegate || new (0, $2a25aae57d74318e$export$a05409b8bb224a5a)(collection, disabledBehavior === \"selection\" ? new Set() : disabledKeys, ref, collator), [\n keyboardDelegate,\n collection,\n disabledKeys,\n ref,\n collator,\n disabledBehavior\n ]);\n let { collectionProps: collectionProps } = (0, $ae20dd8cbca75726$export$d6daf82dcd84e87c)({\n ...props,\n ref: ref,\n selectionManager: selectionManager,\n keyboardDelegate: delegate\n });\n return {\n listProps: collectionProps\n };\n}\n\n\n\n\n\n\nexport {$ae20dd8cbca75726$export$d6daf82dcd84e87c as useSelectableCollection, $880e95eb8b93ba9a$export$ecf600387e221c37 as useSelectableItem, $982254629710d113$export$b95089534ab7c1fd as useSelectableList, $2a25aae57d74318e$export$a05409b8bb224a5a as ListKeyboardDelegate, $fb3050f43d946246$export$e32c88dfddc6e1d8 as useTypeSelect};\n//# sourceMappingURL=module.js.map\n","import {filterDOMProps as $frWMC$filterDOMProps, useId as $frWMC$useId, mergeProps as $frWMC$mergeProps, useSlotId as $frWMC$useSlotId, isMac as $frWMC$isMac, isWebKit as $frWMC$isWebKit} from \"@react-aria/utils\";\nimport {useFocusWithin as $frWMC$useFocusWithin, useHover as $frWMC$useHover, isFocusVisible as $frWMC$isFocusVisible} from \"@react-aria/interactions\";\nimport {useLabel as $frWMC$useLabel} from \"@react-aria/label\";\nimport {useSelectableList as $frWMC$useSelectableList, useSelectableItem as $frWMC$useSelectableItem} from \"@react-aria/selection\";\nimport {getItemCount as $frWMC$getItemCount} from \"@react-stately/collections\";\n\n/*\n * Copyright 2020 Adobe. All rights reserved.\n * This file is licensed to you under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License. You may obtain a copy\n * of the License at http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software distributed under\n * the License is distributed on an \"AS IS\" BASIS, WITHOUT WARRANTIES OR REPRESENTATIONS\n * OF ANY KIND, either express or implied. See the License for the specific language\n * governing permissions and limitations under the License.\n */ /*\n * Copyright 2020 Adobe. All rights reserved.\n * This file is licensed to you under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License. You may obtain a copy\n * of the License at http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software distributed under\n * the License is distributed on an \"AS IS\" BASIS, WITHOUT WARRANTIES OR REPRESENTATIONS\n * OF ANY KIND, either express or implied. See the License for the specific language\n * governing permissions and limitations under the License.\n */ \n/*\n * Copyright 2020 Adobe. All rights reserved.\n * This file is licensed to you under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License. You may obtain a copy\n * of the License at http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software distributed under\n * the License is distributed on an \"AS IS\" BASIS, WITHOUT WARRANTIES OR REPRESENTATIONS\n * OF ANY KIND, either express or implied. See the License for the specific language\n * governing permissions and limitations under the License.\n */ const $b1f0cad8af73213b$export$3585ede4d035bf14 = new WeakMap();\nfunction $b1f0cad8af73213b$var$normalizeKey(key) {\n if (typeof key === \"string\") return key.replace(/\\s*/g, \"\");\n return \"\" + key;\n}\nfunction $b1f0cad8af73213b$export$9145995848b05025(state, itemKey) {\n let data = $b1f0cad8af73213b$export$3585ede4d035bf14.get(state);\n if (!data) throw new Error(\"Unknown list\");\n return `${data.id}-option-${$b1f0cad8af73213b$var$normalizeKey(itemKey)}`;\n}\n\n\n\n\n\nfunction $c132121280ec012d$export$50eacbbf140a3141(props, state, ref) {\n let domProps = (0, $frWMC$filterDOMProps)(props, {\n labelable: true\n });\n // Use props instead of state here. We don't want this to change due to long press.\n let selectionBehavior = props.selectionBehavior || \"toggle\";\n let linkBehavior = props.linkBehavior || (selectionBehavior === \"replace\" ? \"action\" : \"override\");\n if (selectionBehavior === \"toggle\" && linkBehavior === \"action\") // linkBehavior=\"action\" does not work with selectionBehavior=\"toggle\" because there is no way\n // to initiate selection (checkboxes are not allowed inside a listbox). Link items will not be\n // selectable in this configuration.\n linkBehavior = \"override\";\n let { listProps: listProps } = (0, $frWMC$useSelectableList)({\n ...props,\n ref: ref,\n selectionManager: state.selectionManager,\n collection: state.collection,\n disabledKeys: state.disabledKeys,\n linkBehavior: linkBehavior\n });\n let { focusWithinProps: focusWithinProps } = (0, $frWMC$useFocusWithin)({\n onFocusWithin: props.onFocus,\n onBlurWithin: props.onBlur,\n onFocusWithinChange: props.onFocusChange\n });\n // Share list id and some props with child options.\n let id = (0, $frWMC$useId)(props.id);\n (0, $b1f0cad8af73213b$export$3585ede4d035bf14).set(state, {\n id: id,\n shouldUseVirtualFocus: props.shouldUseVirtualFocus,\n shouldSelectOnPressUp: props.shouldSelectOnPressUp,\n shouldFocusOnHover: props.shouldFocusOnHover,\n isVirtualized: props.isVirtualized,\n onAction: props.onAction,\n linkBehavior: linkBehavior\n });\n let { labelProps: labelProps, fieldProps: fieldProps } = (0, $frWMC$useLabel)({\n ...props,\n id: id,\n // listbox is not an HTML input element so it\n // shouldn't be labeled by a <label> element.\n labelElementType: \"span\"\n });\n return {\n labelProps: labelProps,\n listBoxProps: (0, $frWMC$mergeProps)(domProps, focusWithinProps, state.selectionManager.selectionMode === \"multiple\" ? {\n \"aria-multiselectable\": \"true\"\n } : {}, {\n role: \"listbox\",\n ...(0, $frWMC$mergeProps)(fieldProps, listProps)\n })\n };\n}\n\n\n/*\n * Copyright 2020 Adobe. All rights reserved.\n * This file is licensed to you under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License. You may obtain a copy\n * of the License at http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software distributed under\n * the License is distributed on an \"AS IS\" BASIS, WITHOUT WARRANTIES OR REPRESENTATIONS\n * OF ANY KIND, either express or implied. See the License for the specific language\n * governing permissions and limitations under the License.\n */ \n\n\n\n\nfunction $293f70390ea03370$export$497855f14858aa34(props, state, ref) {\n var _item_props;\n let { key: key } = props;\n let data = (0, $b1f0cad8af73213b$export$3585ede4d035bf14).get(state);\n var _props_isDisabled;\n let isDisabled = (_props_isDisabled = props.isDisabled) !== null && _props_isDisabled !== void 0 ? _props_isDisabled : state.disabledKeys.has(key);\n var _props_isSelected;\n let isSelected = (_props_isSelected = props.isSelected) !== null && _props_isSelected !== void 0 ? _props_isSelected : state.selectionManager.isSelected(key);\n var _props_shouldSelectOnPressUp;\n let shouldSelectOnPressUp = (_props_shouldSelectOnPressUp = props.shouldSelectOnPressUp) !== null && _props_shouldSelectOnPressUp !== void 0 ? _props_shouldSelectOnPressUp : data === null || data === void 0 ? void 0 : data.shouldSelectOnPressUp;\n var _props_shouldFocusOnHover;\n let shouldFocusOnHover = (_props_shouldFocusOnHover = props.shouldFocusOnHover) !== null && _props_shouldFocusOnHover !== void 0 ? _props_shouldFocusOnHover : data === null || data === void 0 ? void 0 : data.shouldFocusOnHover;\n var _props_shouldUseVirtualFocus;\n let shouldUseVirtualFocus = (_props_shouldUseVirtualFocus = props.shouldUseVirtualFocus) !== null && _props_shouldUseVirtualFocus !== void 0 ? _props_shouldUseVirtualFocus : data === null || data === void 0 ? void 0 : data.shouldUseVirtualFocus;\n var _props_isVirtualized;\n let isVirtualized = (_props_isVirtualized = props.isVirtualized) !== null && _props_isVirtualized !== void 0 ? _props_isVirtualized : data === null || data === void 0 ? void 0 : data.isVirtualized;\n let labelId = (0, $frWMC$useSlotId)();\n let descriptionId = (0, $frWMC$useSlotId)();\n let optionProps = {\n role: \"option\",\n \"aria-disabled\": isDisabled || undefined,\n \"aria-selected\": state.selectionManager.selectionMode !== \"none\" ? isSelected : undefined\n };\n // Safari with VoiceOver on macOS misreads options with aria-labelledby or aria-label as simply \"text\".\n // We should not map slots to the label and description on Safari and instead just have VoiceOver read the textContent.\n // https://bugs.webkit.org/show_bug.cgi?id=209279\n if (!((0, $frWMC$isMac)() && (0, $frWMC$isWebKit)())) {\n optionProps[\"aria-label\"] = props[\"aria-label\"];\n optionProps[\"aria-labelledby\"] = labelId;\n optionProps[\"aria-describedby\"] = descriptionId;\n }\n let item = state.collection.getItem(key);\n if (isVirtualized) {\n let index = Number(item === null || item === void 0 ? void 0 : item.index);\n optionProps[\"aria-posinset\"] = Number.isNaN(index) ? undefined : index + 1;\n optionProps[\"aria-setsize\"] = (0, $frWMC$getItemCount)(state.collection);\n }\n let { itemProps: itemProps, isPressed: isPressed, isFocused: isFocused, hasAction: hasAction, allowsSelection: allowsSelection } = (0, $frWMC$useSelectableItem)({\n selectionManager: state.selectionManager,\n key: key,\n ref: ref,\n shouldSelectOnPressUp: shouldSelectOnPressUp,\n allowsDifferentPressOrigin: shouldSelectOnPressUp && shouldFocusOnHover,\n isVirtualized: isVirtualized,\n shouldUseVirtualFocus: shouldUseVirtualFocus,\n isDisabled: isDisabled,\n onAction: (data === null || data === void 0 ? void 0 : data.onAction) ? ()=>{\n var _data_onAction;\n return data === null || data === void 0 ? void 0 : (_data_onAction = data.onAction) === null || _data_onAction === void 0 ? void 0 : _data_onAction.call(data, key);\n } : undefined,\n linkBehavior: data === null || data === void 0 ? void 0 : data.linkBehavior\n });\n let { hoverProps: hoverProps } = (0, $frWMC$useHover)({\n isDisabled: isDisabled || !shouldFocusOnHover,\n onHoverStart () {\n if (!(0, $frWMC$isFocusVisible)()) {\n state.selectionManager.setFocused(true);\n state.selectionManager.setFocusedKey(key);\n }\n }\n });\n let domProps = (0, $frWMC$filterDOMProps)(item === null || item === void 0 ? void 0 : item.props, {\n isLink: !!(item === null || item === void 0 ? void 0 : (_item_props = item.props) === null || _item_props === void 0 ? void 0 : _item_props.href)\n });\n delete domProps.id;\n return {\n optionProps: {\n ...optionProps,\n ...(0, $frWMC$mergeProps)(domProps, itemProps, hoverProps),\n id: (0, $b1f0cad8af73213b$export$9145995848b05025)(state, key)\n },\n labelProps: {\n id: labelId\n },\n descriptionProps: {\n id: descriptionId\n },\n isFocused: isFocused,\n isFocusVisible: isFocused && (0, $frWMC$isFocusVisible)(),\n isSelected: isSelected,\n isDisabled: isDisabled,\n isPressed: isPressed,\n allowsSelection: allowsSelection,\n hasAction: hasAction\n };\n}\n\n\n/*\n * Copyright 2020 Adobe. All rights reserved.\n * This file is licensed to you under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License. You may obtain a copy\n * of the License at http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software distributed under\n * the License is distributed on an \"AS IS\" BASIS, WITHOUT WARRANTIES OR REPRESENTATIONS\n * OF ANY KIND, either express or implied. See the License for the specific language\n * governing permissions and limitations under the License.\n */ \nfunction $af383d3bef1cfdc9$export$c3f9f39876e4bc7(props) {\n let { heading: heading, \"aria-label\": ariaLabel } = props;\n let headingId = (0, $frWMC$useId)();\n return {\n itemProps: {\n role: \"presentation\"\n },\n headingProps: heading ? {\n // Techincally, listbox cannot contain headings according to ARIA.\n // We hide the heading from assistive technology, using role=\"presentation\",\n // and only use it as a visual label for the nested group.\n id: headingId,\n role: \"presentation\"\n } : {},\n groupProps: {\n role: \"group\",\n \"aria-label\": ariaLabel,\n \"aria-labelledby\": heading ? headingId : undefined\n }\n };\n}\n\n\n\n\n\nexport {$c132121280ec012d$export$50eacbbf140a3141 as useListBox, $293f70390ea03370$export$497855f14858aa34 as useOption, $af383d3bef1cfdc9$export$c3f9f39876e4bc7 as useListBoxSection, $b1f0cad8af73213b$export$3585ede4d035bf14 as listData, $b1f0cad8af73213b$export$9145995848b05025 as getItemId};\n//# sourceMappingURL=module.js.map\n","import {useControlledState as $Qsto2$useControlledState} from \"@react-stately/utils\";\nimport {useRef as $Qsto2$useRef, useState as $Qsto2$useState, useMemo as $Qsto2$useMemo, useEffect as $Qsto2$useEffect} from \"react\";\nimport {compareNodeOrder as $Qsto2$compareNodeOrder, getFirstItem as $Qsto2$getFirstItem, getChildNodes as $Qsto2$getChildNodes} from \"@react-stately/collections\";\n\n/*\n * Copyright 2020 Adobe. All rights reserved.\n * This file is licensed to you under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License. You may obtain a copy\n * of the License at http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software distributed under\n * the License is distributed on an \"AS IS\" BASIS, WITHOUT WARRANTIES OR REPRESENTATIONS\n * OF ANY KIND, either express or implied. See the License for the specific language\n * governing permissions and limitations under the License.\n */ /*\n * Copyright 2020 Adobe. All rights reserved.\n * This file is licensed to you under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License. You may obtain a copy\n * of the License at http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software distributed under\n * the License is distributed on an \"AS IS\" BASIS, WITHOUT WARRANTIES OR REPRESENTATIONS\n * OF ANY KIND, either express or implied. See the License for the specific language\n * governing permissions and limitations under the License.\n */ /*\n * Copyright 2020 Adobe. All rights reserved.\n * This file is licensed to you under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License. You may obtain a copy\n * of the License at http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software distributed under\n * the License is distributed on an \"AS IS\" BASIS, WITHOUT WARRANTIES OR REPRESENTATIONS\n * OF ANY KIND, either express or implied. See the License for the specific language\n * governing permissions and limitations under the License.\n */ class $e40ea825a81a3709$export$52baac22726c72bf extends Set {\n constructor(keys, anchorKey, currentKey){\n super(keys);\n if (keys instanceof $e40ea825a81a3709$export$52baac22726c72bf) {\n this.anchorKey = anchorKey || keys.anchorKey;\n this.currentKey = currentKey || keys.currentKey;\n } else {\n this.anchorKey = anchorKey;\n this.currentKey = currentKey;\n }\n }\n}\n\n\n\n\nfunction $7af3f5b51489e0b5$var$equalSets(setA, setB) {\n if (setA.size !== setB.size) return false;\n for (let item of setA){\n if (!setB.has(item)) return false;\n }\n return true;\n}\nfunction $7af3f5b51489e0b5$export$253fe78d46329472(props) {\n let { selectionMode: selectionMode = \"none\", disallowEmptySelection: disallowEmptySelection, allowDuplicateSelectionEvents: allowDuplicateSelectionEvents, selectionBehavior: selectionBehaviorProp = \"toggle\", disabledBehavior: disabledBehavior = \"all\" } = props;\n // We want synchronous updates to `isFocused` and `focusedKey` after their setters are called.\n // But we also need to trigger a react re-render. So, we have both a ref (sync) and state (async).\n let isFocusedRef = (0, $Qsto2$useRef)(false);\n let [, setFocused] = (0, $Qsto2$useState)(false);\n let focusedKeyRef = (0, $Qsto2$useRef)(null);\n let childFocusStrategyRef = (0, $Qsto2$useRef)(null);\n let [, setFocusedKey] = (0, $Qsto2$useState)(null);\n let selectedKeysProp = (0, $Qsto2$useMemo)(()=>$7af3f5b51489e0b5$var$convertSelection(props.selectedKeys), [\n props.selectedKeys\n ]);\n let defaultSelectedKeys = (0, $Qsto2$useMemo)(()=>$7af3f5b51489e0b5$var$convertSelection(props.defaultSelectedKeys, new (0, $e40ea825a81a3709$export$52baac22726c72bf)()), [\n props.defaultSelectedKeys\n ]);\n let [selectedKeys, setSelectedKeys] = (0, $Qsto2$useControlledState)(selectedKeysProp, defaultSelectedKeys, props.onSelectionChange);\n let disabledKeysProp = (0, $Qsto2$useMemo)(()=>props.disabledKeys ? new Set(props.disabledKeys) : new Set(), [\n props.disabledKeys\n ]);\n let [selectionBehavior, setSelectionBehavior] = (0, $Qsto2$useState)(selectionBehaviorProp);\n // If the selectionBehavior prop is set to replace, but the current state is toggle (e.g. due to long press\n // to enter selection mode on touch), and the selection becomes empty, reset the selection behavior.\n if (selectionBehaviorProp === \"replace\" && selectionBehavior === \"toggle\" && typeof selectedKeys === \"object\" && selectedKeys.size === 0) setSelectionBehavior(\"replace\");\n // If the selectionBehavior prop changes, update the state as well.\n let lastSelectionBehavior = (0, $Qsto2$useRef)(selectionBehaviorProp);\n (0, $Qsto2$useEffect)(()=>{\n if (selectionBehaviorProp !== lastSelectionBehavior.current) {\n setSelectionBehavior(selectionBehaviorProp);\n lastSelectionBehavior.current = selectionBehaviorProp;\n }\n }, [\n selectionBehaviorProp\n ]);\n return {\n selectionMode: selectionMode,\n disallowEmptySelection: disallowEmptySelection,\n selectionBehavior: selectionBehavior,\n setSelectionBehavior: setSelectionBehavior,\n get isFocused () {\n return isFocusedRef.current;\n },\n setFocused (f) {\n isFocusedRef.current = f;\n setFocused(f);\n },\n get focusedKey () {\n return focusedKeyRef.current;\n },\n get childFocusStrategy () {\n return childFocusStrategyRef.current;\n },\n setFocusedKey (k, childFocusStrategy = \"first\") {\n focusedKeyRef.current = k;\n childFocusStrategyRef.current = childFocusStrategy;\n setFocusedKey(k);\n },\n selectedKeys: selectedKeys,\n setSelectedKeys (keys) {\n if (allowDuplicateSelectionEvents || !$7af3f5b51489e0b5$var$equalSets(keys, selectedKeys)) setSelectedKeys(keys);\n },\n disabledKeys: disabledKeysProp,\n disabledBehavior: disabledBehavior\n };\n}\nfunction $7af3f5b51489e0b5$var$convertSelection(selection, defaultValue) {\n if (!selection) return defaultValue;\n return selection === \"all\" ? \"all\" : new (0, $e40ea825a81a3709$export$52baac22726c72bf)(selection);\n}\n\n\n/*\n * Copyright 2020 Adobe. All rights reserved.\n * This file is licensed to you under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License. You may obtain a copy\n * of the License at http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software distributed under\n * the License is distributed on an \"AS IS\" BASIS, WITHOUT WARRANTIES OR REPRESENTATIONS\n * OF ANY KIND, either express or implied. See the License for the specific language\n * governing permissions and limitations under the License.\n */ \n\nclass $d496c0a20b6e58ec$export$6c8a5aaad13c9852 {\n /**\n * The type of selection that is allowed in the collection.\n */ get selectionMode() {\n return this.state.selectionMode;\n }\n /**\n * Whether the collection allows empty selection.\n */ get disallowEmptySelection() {\n return this.state.disallowEmptySelection;\n }\n /**\n * The selection behavior for the collection.\n */ get selectionBehavior() {\n return this.state.selectionBehavior;\n }\n /**\n * Sets the selection behavior for the collection.\n */ setSelectionBehavior(selectionBehavior) {\n this.state.setSelectionBehavior(selectionBehavior);\n }\n /**\n * Whether the collection is currently focused.\n */ get isFocused() {\n return this.state.isFocused;\n }\n /**\n * Sets whether the collection is focused.\n */ setFocused(isFocused) {\n this.state.setFocused(isFocused);\n }\n /**\n * The current focused key in the collection.\n */ get focusedKey() {\n return this.state.focusedKey;\n }\n /** Whether the first or last child of the focused key should receive focus. */ get childFocusStrategy() {\n return this.state.childFocusStrategy;\n }\n /**\n * Sets the focused key.\n */ setFocusedKey(key, childFocusStrategy) {\n if (key == null || this.collection.getItem(key)) this.state.setFocusedKey(key, childFocusStrategy);\n }\n /**\n * The currently selected keys in the collection.\n */ get selectedKeys() {\n return this.state.selectedKeys === \"all\" ? new Set(this.getSelectAllKeys()) : this.state.selectedKeys;\n }\n /**\n * The raw selection value for the collection.\n * Either 'all' for select all, or a set of keys.\n */ get rawSelection() {\n return this.state.selectedKeys;\n }\n /**\n * Returns whether a key is selected.\n */ isSelected(key) {\n if (this.state.selectionMode === \"none\") return false;\n key = this.getKey(key);\n return this.state.selectedKeys === \"all\" ? this.canSelectItem(key) : this.state.selectedKeys.has(key);\n }\n /**\n * Whether the selection is empty.\n */ get isEmpty() {\n return this.state.selectedKeys !== \"all\" && this.state.selectedKeys.size === 0;\n }\n /**\n * Whether all items in the collection are selected.\n */ get isSelectAll() {\n if (this.isEmpty) return false;\n if (this.state.selectedKeys === \"all\") return true;\n if (this._isSelectAll != null) return this._isSelectAll;\n let allKeys = this.getSelectAllKeys();\n let selectedKeys = this.state.selectedKeys;\n this._isSelectAll = allKeys.every((k)=>selectedKeys.has(k));\n return this._isSelectAll;\n }\n get firstSelectedKey() {\n let first = null;\n for (let key of this.state.selectedKeys){\n let item = this.collection.getItem(key);\n if (!first || item && (0, $Qsto2$compareNodeOrder)(this.collection, item, first) < 0) first = item;\n }\n return first === null || first === void 0 ? void 0 : first.key;\n }\n get lastSelectedKey() {\n let last = null;\n for (let key of this.state.selectedKeys){\n let item = this.collection.getItem(key);\n if (!last || item && (0, $Qsto2$compareNodeOrder)(this.collection, item, last) > 0) last = item;\n }\n return last === null || last === void 0 ? void 0 : last.key;\n }\n get disabledKeys() {\n return this.state.disabledKeys;\n }\n get disabledBehavior() {\n return this.state.disabledBehavior;\n }\n /**\n * Extends the selection to the given key.\n */ extendSelection(toKey) {\n if (this.selectionMode === \"none\") return;\n if (this.selectionMode === \"single\") {\n this.replaceSelection(toKey);\n return;\n }\n toKey = this.getKey(toKey);\n let selection;\n // Only select the one key if coming from a select all.\n if (this.state.selectedKeys === \"all\") selection = new (0, $e40ea825a81a3709$export$52baac22726c72bf)([\n toKey\n ], toKey, toKey);\n else {\n let selectedKeys = this.state.selectedKeys;\n let anchorKey = selectedKeys.anchorKey || toKey;\n selection = new (0, $e40ea825a81a3709$export$52baac22726c72bf)(selectedKeys, anchorKey, toKey);\n for (let key of this.getKeyRange(anchorKey, selectedKeys.currentKey || toKey))selection.delete(key);\n for (let key of this.getKeyRange(toKey, anchorKey))if (this.canSelectItem(key)) selection.add(key);\n }\n this.state.setSelectedKeys(selection);\n }\n getKeyRange(from, to) {\n let fromItem = this.collection.getItem(from);\n let toItem = this.collection.getItem(to);\n if (fromItem && toItem) {\n if ((0, $Qsto2$compareNodeOrder)(this.collection, fromItem, toItem) <= 0) return this.getKeyRangeInternal(from, to);\n return this.getKeyRangeInternal(to, from);\n }\n return [];\n }\n getKeyRangeInternal(from, to) {\n let keys = [];\n let key = from;\n while(key){\n let item = this.collection.getItem(key);\n if (item && item.type === \"item\" || item.type === \"cell\" && this.allowsCellSelection) keys.push(key);\n if (key === to) return keys;\n key = this.collection.getKeyAfter(key);\n }\n return [];\n }\n getKey(key) {\n let item = this.collection.getItem(key);\n if (!item) // ¯\\_(ツ)_/¯\n return key;\n // If cell selection is allowed, just return the key.\n if (item.type === \"cell\" && this.allowsCellSelection) return key;\n // Find a parent item to select\n while(item.type !== \"item\" && item.parentKey != null)item = this.collection.getItem(item.parentKey);\n if (!item || item.type !== \"item\") return null;\n return item.key;\n }\n /**\n * Toggles whether the given key is selected.\n */ toggleSelection(key) {\n if (this.selectionMode === \"none\") return;\n if (this.selectionMode === \"single\" && !this.isSelected(key)) {\n this.replaceSelection(key);\n return;\n }\n key = this.getKey(key);\n if (key == null) return;\n let keys = new (0, $e40ea825a81a3709$export$52baac22726c72bf)(this.state.selectedKeys === \"all\" ? this.getSelectAllKeys() : this.state.selectedKeys);\n if (keys.has(key)) keys.delete(key);\n else if (this.canSelectItem(key)) {\n keys.add(key);\n keys.anchorKey = key;\n keys.currentKey = key;\n }\n if (this.disallowEmptySelection && keys.size === 0) return;\n this.state.setSelectedKeys(keys);\n }\n /**\n * Replaces the selection with only the given key.\n */ replaceSelection(key) {\n if (this.selectionMode === \"none\") return;\n key = this.getKey(key);\n if (key == null) return;\n let selection = this.canSelectItem(key) ? new (0, $e40ea825a81a3709$export$52baac22726c72bf)([\n key\n ], key, key) : new (0, $e40ea825a81a3709$export$52baac22726c72bf)();\n this.state.setSelectedKeys(selection);\n }\n /**\n * Replaces the selection with the given keys.\n */ setSelectedKeys(keys) {\n if (this.selectionMode === \"none\") return;\n let selection = new (0, $e40ea825a81a3709$export$52baac22726c72bf)();\n for (let key of keys){\n key = this.getKey(key);\n if (key != null) {\n selection.add(key);\n if (this.selectionMode === \"single\") break;\n }\n }\n this.state.setSelectedKeys(selection);\n }\n getSelectAllKeys() {\n let keys = [];\n let addKeys = (key)=>{\n while(key){\n if (this.canSelectItem(key)) {\n let item = this.collection.getItem(key);\n if (item.type === \"item\") keys.push(key);\n // Add child keys. If cell selection is allowed, then include item children too.\n if (item.hasChildNodes && (this.allowsCellSelection || item.type !== \"item\")) addKeys((0, $Qsto2$getFirstItem)((0, $Qsto2$getChildNodes)(item, this.collection)).key);\n }\n key = this.collection.getKeyAfter(key);\n }\n };\n addKeys(this.collection.getFirstKey());\n return keys;\n }\n /**\n * Selects all items in the collection.\n */ selectAll() {\n if (!this.isSelectAll && this.selectionMode === \"multiple\") this.state.setSelectedKeys(\"all\");\n }\n /**\n * Removes all keys from the selection.\n */ clearSelection() {\n if (!this.disallowEmptySelection && (this.state.selectedKeys === \"all\" || this.state.selectedKeys.size > 0)) this.state.setSelectedKeys(new (0, $e40ea825a81a3709$export$52baac22726c72bf)());\n }\n /**\n * Toggles between select all and an empty selection.\n */ toggleSelectAll() {\n if (this.isSelectAll) this.clearSelection();\n else this.selectAll();\n }\n select(key, e) {\n if (this.selectionMode === \"none\") return;\n if (this.selectionMode === \"single\") {\n if (this.isSelected(key) && !this.disallowEmptySelection) this.toggleSelection(key);\n else this.replaceSelection(key);\n } else if (this.selectionBehavior === \"toggle\" || e && (e.pointerType === \"touch\" || e.pointerType === \"virtual\")) // if touch or virtual (VO) then we just want to toggle, otherwise it's impossible to multi select because they don't have modifier keys\n this.toggleSelection(key);\n else this.replaceSelection(key);\n }\n /**\n * Returns whether the current selection is equal to the given selection.\n */ isSelectionEqual(selection) {\n if (selection === this.state.selectedKeys) return true;\n // Check if the set of keys match.\n let selectedKeys = this.selectedKeys;\n if (selection.size !== selectedKeys.size) return false;\n for (let key of selection){\n if (!selectedKeys.has(key)) return false;\n }\n for (let key of selectedKeys){\n if (!selection.has(key)) return false;\n }\n return true;\n }\n canSelectItem(key) {\n if (this.state.selectionMode === \"none\" || this.state.disabledKeys.has(key)) return false;\n let item = this.collection.getItem(key);\n if (!item || item.type === \"cell\" && !this.allowsCellSelection) return false;\n return true;\n }\n isDisabled(key) {\n return this.state.disabledKeys.has(key) && this.state.disabledBehavior === \"all\";\n }\n isLink(key) {\n var _this_collection_getItem_props, _this_collection_getItem;\n return !!((_this_collection_getItem = this.collection.getItem(key)) === null || _this_collection_getItem === void 0 ? void 0 : (_this_collection_getItem_props = _this_collection_getItem.props) === null || _this_collection_getItem_props === void 0 ? void 0 : _this_collection_getItem_props.href);\n }\n constructor(collection, state, options){\n this.collection = collection;\n this.state = state;\n var _options_allowsCellSelection;\n this.allowsCellSelection = (_options_allowsCellSelection = options === null || options === void 0 ? void 0 : options.allowsCellSelection) !== null && _options_allowsCellSelection !== void 0 ? _options_allowsCellSelection : false;\n this._isSelectAll = null;\n }\n}\n\n\n\n\nexport {$7af3f5b51489e0b5$export$253fe78d46329472 as useMultipleSelectionState, $d496c0a20b6e58ec$export$6c8a5aaad13c9852 as SelectionManager};\n//# sourceMappingURL=module.js.map\n","import {useMultipleSelectionState as $58Phs$useMultipleSelectionState, SelectionManager as $58Phs$SelectionManager} from \"@react-stately/selection\";\nimport {useMemo as $58Phs$useMemo, useCallback as $58Phs$useCallback, useRef as $58Phs$useRef, useEffect as $58Phs$useEffect} from \"react\";\nimport {useCollection as $58Phs$useCollection} from \"@react-stately/collections\";\nimport {useControlledState as $58Phs$useControlledState} from \"@react-stately/utils\";\n\n/*\n * Copyright 2020 Adobe. All rights reserved.\n * This file is licensed to you under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License. You may obtain a copy\n * of the License at http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software distributed under\n * the License is distributed on an \"AS IS\" BASIS, WITHOUT WARRANTIES OR REPRESENTATIONS\n * OF ANY KIND, either express or implied. See the License for the specific language\n * governing permissions and limitations under the License.\n */ /*\n * Copyright 2020 Adobe. All rights reserved.\n * This file is licensed to you under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License. You may obtain a copy\n * of the License at http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software distributed under\n * the License is distributed on an \"AS IS\" BASIS, WITHOUT WARRANTIES OR REPRESENTATIONS\n * OF ANY KIND, either express or implied. See the License for the specific language\n * governing permissions and limitations under the License.\n */ /*\n * Copyright 2020 Adobe. All rights reserved.\n * This file is licensed to you under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License. You may obtain a copy\n * of the License at http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software distributed under\n * the License is distributed on an \"AS IS\" BASIS, WITHOUT WARRANTIES OR REPRESENTATIONS\n * OF ANY KIND, either express or implied. See the License for the specific language\n * governing permissions and limitations under the License.\n */ class $a02d57049d202695$export$d085fb9e920b5ca7 {\n *[Symbol.iterator]() {\n yield* this.iterable;\n }\n get size() {\n return this.keyMap.size;\n }\n getKeys() {\n return this.keyMap.keys();\n }\n getKeyBefore(key) {\n let node = this.keyMap.get(key);\n return node ? node.prevKey : null;\n }\n getKeyAfter(key) {\n let node = this.keyMap.get(key);\n return node ? node.nextKey : null;\n }\n getFirstKey() {\n return this.firstKey;\n }\n getLastKey() {\n return this.lastKey;\n }\n getItem(key) {\n return this.keyMap.get(key);\n }\n at(idx) {\n const keys = [\n ...this.getKeys()\n ];\n return this.getItem(keys[idx]);\n }\n getChildren(key) {\n let node = this.keyMap.get(key);\n return (node === null || node === void 0 ? void 0 : node.childNodes) || [];\n }\n constructor(nodes){\n this.keyMap = new Map();\n this.iterable = nodes;\n let visit = (node)=>{\n this.keyMap.set(node.key, node);\n if (node.childNodes && node.type === \"section\") for (let child of node.childNodes)visit(child);\n };\n for (let node of nodes)visit(node);\n let last;\n let index = 0;\n for (let [key, node] of this.keyMap){\n if (last) {\n last.nextKey = key;\n node.prevKey = last.key;\n } else {\n this.firstKey = key;\n node.prevKey = undefined;\n }\n if (node.type === \"item\") node.index = index++;\n last = node;\n // Set nextKey as undefined since this might be the last node\n // If it isn't the last node, last.nextKey will properly set at start of new loop\n last.nextKey = undefined;\n }\n this.lastKey = last === null || last === void 0 ? void 0 : last.key;\n }\n}\n\n\n\n\n\nfunction $e72dd72e1c76a225$export$2f645645f7bca764(props) {\n let { filter: filter } = props;\n let selectionState = (0, $58Phs$useMultipleSelectionState)(props);\n let disabledKeys = (0, $58Phs$useMemo)(()=>props.disabledKeys ? new Set(props.disabledKeys) : new Set(), [\n props.disabledKeys\n ]);\n let factory = (0, $58Phs$useCallback)((nodes)=>filter ? new (0, $a02d57049d202695$export$d085fb9e920b5ca7)(filter(nodes)) : new (0, $a02d57049d202695$export$d085fb9e920b5ca7)(nodes), [\n filter\n ]);\n let context = (0, $58Phs$useMemo)(()=>({\n suppressTextValueWarning: props.suppressTextValueWarning\n }), [\n props.suppressTextValueWarning\n ]);\n let collection = (0, $58Phs$useCollection)(props, factory, context);\n let selectionManager = (0, $58Phs$useMemo)(()=>new (0, $58Phs$SelectionManager)(collection, selectionState), [\n collection,\n selectionState\n ]);\n // Reset focused key if that item is deleted from the collection.\n const cachedCollection = (0, $58Phs$useRef)(null);\n (0, $58Phs$useEffect)(()=>{\n if (selectionState.focusedKey != null && !collection.getItem(selectionState.focusedKey)) {\n const startItem = cachedCollection.current.getItem(selectionState.focusedKey);\n const cachedItemNodes = [\n ...cachedCollection.current.getKeys()\n ].map((key)=>{\n const itemNode = cachedCollection.current.getItem(key);\n return itemNode.type === \"item\" ? itemNode : null;\n }).filter((node)=>node !== null);\n const itemNodes = [\n ...collection.getKeys()\n ].map((key)=>{\n const itemNode = collection.getItem(key);\n return itemNode.type === \"item\" ? itemNode : null;\n }).filter((node)=>node !== null);\n const diff = cachedItemNodes.length - itemNodes.length;\n let index = Math.min(diff > 1 ? Math.max(startItem.index - diff + 1, 0) : startItem.index, itemNodes.length - 1);\n let newNode;\n while(index >= 0){\n if (!selectionManager.isDisabled(itemNodes[index].key)) {\n newNode = itemNodes[index];\n break;\n }\n // Find next, not disabled item.\n if (index < itemNodes.length - 1) index++;\n else {\n if (index > startItem.index) index = startItem.index;\n index--;\n }\n }\n selectionState.setFocusedKey(newNode ? newNode.key : null);\n }\n cachedCollection.current = collection;\n }, [\n collection,\n selectionManager,\n selectionState,\n selectionState.focusedKey\n ]);\n return {\n collection: collection,\n disabledKeys: disabledKeys,\n selectionManager: selectionManager\n };\n}\n\n\n/*\n * Copyright 2020 Adobe. All rights reserved.\n * This file is licensed to you under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License. You may obtain a copy\n * of the License at http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software distributed under\n * the License is distributed on an \"AS IS\" BASIS, WITHOUT WARRANTIES OR REPRESENTATIONS\n * OF ANY KIND, either express or implied. See the License for the specific language\n * governing permissions and limitations under the License.\n */ \n\n\nfunction $a0d645289fe9b86b$export$e7f05e985daf4b5f(props) {\n var _props_defaultSelectedKey;\n let [selectedKey, setSelectedKey] = (0, $58Phs$useControlledState)(props.selectedKey, (_props_defaultSelectedKey = props.defaultSelectedKey) !== null && _props_defaultSelectedKey !== void 0 ? _props_defaultSelectedKey : null, props.onSelectionChange);\n let selectedKeys = (0, $58Phs$useMemo)(()=>selectedKey != null ? [\n selectedKey\n ] : [], [\n selectedKey\n ]);\n let { collection: collection, disabledKeys: disabledKeys, selectionManager: selectionManager } = (0, $e72dd72e1c76a225$export$2f645645f7bca764)({\n ...props,\n selectionMode: \"single\",\n disallowEmptySelection: true,\n allowDuplicateSelectionEvents: true,\n selectedKeys: selectedKeys,\n onSelectionChange: (keys)=>{\n var _keys_values_next_value;\n let key = (_keys_values_next_value = keys.values().next().value) !== null && _keys_values_next_value !== void 0 ? _keys_values_next_value : null;\n // Always fire onSelectionChange, even if the key is the same\n // as the current key (useControlledState does not).\n if (key === selectedKey && props.onSelectionChange) props.onSelectionChange(key);\n setSelectedKey(key);\n }\n });\n let selectedItem = selectedKey != null ? collection.getItem(selectedKey) : null;\n return {\n collection: collection,\n disabledKeys: disabledKeys,\n selectionManager: selectionManager,\n selectedKey: selectedKey,\n setSelectedKey: setSelectedKey,\n selectedItem: selectedItem\n };\n}\n\n\n\n\n\nexport {$e72dd72e1c76a225$export$2f645645f7bca764 as useListState, $a0d645289fe9b86b$export$e7f05e985daf4b5f as useSingleSelectListState, $a02d57049d202695$export$d085fb9e920b5ca7 as ListCollection};\n//# sourceMappingURL=module.js.map\n","import React, { useRef } from 'react';\n\nimport { useFocusRing } from '@react-aria/focus';\nimport { useOption } from '@react-aria/listbox';\nimport { mergeProps } from '@react-aria/utils';\n\nimport { theme } from '../../../style';\n\nexport function Option({ isLast, item, state }) {\n // Get props for the option element\n const ref = useRef();\n const { optionProps, isSelected } = useOption({ key: item.key }, state, ref);\n\n // Determine whether we should show a keyboard\n const { isFocusVisible, focusProps } = useFocusRing();\n\n return (\n <li\n {...mergeProps(optionProps, focusProps)}\n ref={ref}\n style={{\n background: isSelected\n ? theme.tableRowBackgroundHighlight\n : theme.tableBackground,\n color: isSelected ? theme.mobileModalText : null,\n outline: isFocusVisible ? '2px solid orange' : 'none',\n ...(!isLast && { borderBottom: `1px solid ${theme.tableBorder}` }),\n }}\n >\n {item.rendered}\n </li>\n );\n}\n","import React from 'react';\n\nimport { useListBoxSection } from '@react-aria/listbox';\nimport { css } from 'glamor';\n\nimport { styles, theme } from '../../../style';\n\nimport { Option } from './Option';\n\nconst zIndices = { SECTION_HEADING: 10 };\n\nexport function ListBoxSection({ section, state }) {\n const { itemProps, headingProps, groupProps } = useListBoxSection({\n heading: section.rendered,\n 'aria-label': section['aria-label'],\n });\n\n // The heading is rendered inside an <li> element, which contains\n // a <ul> with the child items.\n return (\n <li {...itemProps} style={{ width: '100%' }}>\n {section.rendered && (\n <div\n {...headingProps}\n className={`${css(styles.smallText, {\n backgroundColor: theme.pageBackground,\n borderBottom: `1px solid ${theme.tableBorder}`,\n borderTop: `1px solid ${theme.tableBorder}`,\n color: theme.tableHeaderText,\n display: 'flex',\n justifyContent: 'center',\n paddingBottom: 4,\n paddingTop: 4,\n position: 'sticky',\n top: '0',\n width: '100%',\n zIndex: zIndices.SECTION_HEADING,\n })}`}\n >\n {section.rendered}\n </div>\n )}\n <ul\n {...groupProps}\n style={{\n padding: 0,\n listStyle: 'none',\n }}\n >\n {[...section.childNodes].map((node, index, nodes) => (\n <Option\n key={node.key}\n item={node}\n state={state}\n isLast={index === nodes.length - 1}\n />\n ))}\n </ul>\n </li>\n );\n}\n","import React, { useRef } from 'react';\n\nimport { useListBox } from '@react-aria/listbox';\nimport { useListState } from '@react-stately/list';\n\nimport { usePrevious } from '../../../hooks/usePrevious';\nimport { useScroll } from '../../ScrollProvider';\n\nimport { ListBoxSection } from './ListBoxSection';\n\nexport function ListBox(props) {\n const state = useListState(props);\n const listBoxRef = useRef();\n const { listBoxProps, labelProps } = useListBox(props, state, listBoxRef);\n const { loadMore } = props;\n\n const { hasScrolledToBottom } = useScroll();\n const scrolledToBottom = hasScrolledToBottom();\n const prevScrolledToBottom = usePrevious(scrolledToBottom);\n\n if (!prevScrolledToBottom && scrolledToBottom) {\n loadMore?.();\n }\n\n return (\n <>\n <div {...labelProps}>{props.label}</div>\n <ul\n {...listBoxProps}\n ref={listBoxRef}\n style={{\n padding: 0,\n listStyle: 'none',\n margin: 0,\n width: '100%',\n }}\n >\n {[...state.collection].map(item => (\n <ListBoxSection key={item.key} section={item} state={state} />\n ))}\n </ul>\n </>\n );\n}\n","import React, { memo, useMemo } from 'react';\n\nimport { getScheduledAmount } from 'loot-core/src/shared/schedules';\nimport { isPreviewId } from 'loot-core/src/shared/transactions';\nimport { integerToCurrency, groupById } from 'loot-core/src/shared/util';\n\nimport {\n SvgArrowsSynchronize,\n SvgCheckCircle1,\n SvgLockClosed,\n} from '../../../icons/v2';\nimport { styles, theme } from '../../../style';\nimport { Button } from '../../common/Button';\nimport { Text } from '../../common/Text';\nimport { TextOneLine } from '../../common/TextOneLine';\nimport { View } from '../../common/View';\n\nimport { lookupName, getDescriptionPretty, Status } from './TransactionEdit';\n\nconst ROW_HEIGHT = 50;\n\nconst ListItem = ({ children, style, ...props }) => {\n return (\n <View\n style={{\n height: ROW_HEIGHT,\n flexDirection: 'row',\n alignItems: 'center',\n paddingLeft: 10,\n paddingRight: 10,\n ...style,\n }}\n {...props}\n >\n {children}\n </View>\n );\n};\n\nListItem.displayName = 'ListItem';\n\nexport const Transaction = memo(function Transaction({\n transaction,\n account,\n accounts,\n categories,\n payees,\n added,\n onSelect,\n style,\n}) {\n const accountsById = useMemo(() => groupById(accounts), [accounts]);\n const payeesById = useMemo(() => groupById(payees), [payees]);\n\n const {\n id,\n payee: payeeId,\n amount: originalAmount,\n category: categoryId,\n cleared,\n is_parent: isParent,\n notes,\n schedule,\n } = transaction;\n\n const isPreview = isPreviewId(id);\n let amount = originalAmount;\n if (isPreview) {\n amount = getScheduledAmount(amount);\n }\n\n const categoryName = lookupName(categories, categoryId);\n\n const payee = payeesById && payeeId && payeesById[payeeId];\n const transferAcct =\n payee && payee.transfer_acct && accountsById[payee.transfer_acct];\n\n const prettyDescription = getDescriptionPretty(\n transaction,\n payee,\n transferAcct,\n );\n const specialCategory = account?.offbudget\n ? 'Off Budget'\n : transferAcct\n ? 'Transfer'\n : isParent\n ? 'Split'\n : null;\n\n const prettyCategory = specialCategory || categoryName;\n\n const isReconciled = transaction.reconciled;\n const textStyle = isPreview && {\n fontStyle: 'italic',\n color: theme.pageTextLight,\n };\n\n return (\n <Button\n onClick={() => onSelect(transaction)}\n style={{\n backgroundColor: theme.tableBackground,\n border: 'none',\n width: '100%',\n height: 60,\n ...(isPreview && {\n backgroundColor: theme.tableRowHeaderBackground,\n }),\n }}\n >\n <ListItem\n style={{\n flex: 1,\n ...style,\n }}\n >\n <View style={{ flex: 1 }}>\n <View style={{ flexDirection: 'row', alignItems: 'center' }}>\n {schedule && (\n <SvgArrowsSynchronize\n style={{\n width: 12,\n height: 12,\n marginRight: 5,\n color: textStyle.color || theme.menuItemText,\n }}\n />\n )}\n <TextOneLine\n style={{\n ...styles.text,\n ...textStyle,\n fontSize: 14,\n fontWeight: added ? '600' : '400',\n ...(prettyDescription === '' && {\n color: theme.tableTextLight,\n fontStyle: 'italic',\n }),\n }}\n >\n {prettyDescription || 'Empty'}\n </TextOneLine>\n </View>\n {isPreview ? (\n <Status status={notes} />\n ) : (\n <View\n style={{\n flexDirection: 'row',\n alignItems: 'center',\n marginTop: 3,\n }}\n >\n {isReconciled ? (\n <SvgLockClosed\n style={{\n width: 11,\n height: 11,\n color: theme.noticeTextLight,\n marginRight: 5,\n }}\n />\n ) : (\n <SvgCheckCircle1\n style={{\n width: 11,\n height: 11,\n color: cleared\n ? theme.noticeTextLight\n : theme.pageTextSubdued,\n marginRight: 5,\n }}\n />\n )}\n <TextOneLine\n style={{\n fontSize: 11,\n marginTop: 1,\n fontWeight: '400',\n color: prettyCategory\n ? theme.tableText\n : theme.menuItemTextSelected,\n fontStyle:\n specialCategory || !prettyCategory ? 'italic' : undefined,\n textAlign: 'left',\n }}\n >\n {prettyCategory || 'Uncategorized'}\n </TextOneLine>\n </View>\n )}\n </View>\n <Text\n style={{\n ...styles.text,\n ...textStyle,\n marginLeft: 25,\n marginRight: 5,\n fontSize: 14,\n }}\n >\n {integerToCurrency(amount)}\n </Text>\n </ListItem>\n </Button>\n );\n});\n","import React, { useMemo } from 'react';\n\nimport { Item, Section } from '@react-stately/collections';\n\nimport * as monthUtils from 'loot-core/src/shared/months';\nimport { isPreviewId } from 'loot-core/src/shared/transactions';\n\nimport { theme } from '../../../style';\nimport { Text } from '../../common/Text';\n\nimport { ListBox } from './ListBox';\nimport { Transaction } from './Transaction';\n\nexport function TransactionList({\n account,\n accounts,\n categories,\n payees,\n transactions,\n isNew,\n onSelect,\n scrollProps = {},\n onLoadMore,\n}) {\n const sections = useMemo(() => {\n // Group by date. We can assume transactions is ordered\n const sections = [];\n transactions.forEach(transaction => {\n if (\n sections.length === 0 ||\n transaction.date !== sections[sections.length - 1].date\n ) {\n // Mark the last transaction in the section so it can render\n // with a different border\n const lastSection = sections[sections.length - 1];\n if (lastSection && lastSection.data.length > 0) {\n const lastData = lastSection.data;\n lastData[lastData.length - 1].isLast = true;\n }\n\n sections.push({\n id: `${isPreviewId(transaction.id) ? 'preview/' : ''}${transaction.date}`,\n date: transaction.date,\n data: [],\n });\n }\n\n if (!transaction.is_child) {\n sections[sections.length - 1].data.push(transaction);\n }\n });\n return sections;\n }, [transactions]);\n\n return (\n <>\n {scrollProps.ListHeaderComponent}\n <ListBox\n {...scrollProps}\n aria-label=\"transaction list\"\n label=\"\"\n loadMore={onLoadMore}\n selectionMode=\"none\"\n >\n {sections.length === 0 ? (\n <Section>\n <Item textValue=\"No transactions\">\n <div\n style={{\n display: 'flex',\n justifyContent: 'center',\n width: '100%',\n backgroundColor: theme.mobilePageBackground,\n }}\n >\n <Text style={{ fontSize: 15 }}>No transactions</Text>\n </div>\n </Item>\n </Section>\n ) : null}\n {sections.map(section => {\n return (\n <Section\n title={\n <span>{monthUtils.format(section.date, 'MMMM dd, yyyy')}</span>\n }\n key={section.id}\n >\n {section.data.map((transaction, index, transactions) => {\n return (\n <Item\n key={transaction.id}\n style={{\n fontSize:\n index === transactions.length - 1 ? 98 : 'inherit',\n }}\n textValue={transaction.id}\n >\n <Transaction\n transaction={transaction}\n account={account}\n categories={categories}\n accounts={accounts}\n payees={payees}\n added={isNew(transaction.id)}\n onSelect={onSelect} // onSelect(transaction)}\n />\n </Item>\n );\n })}\n </Section>\n );\n })}\n </ListBox>\n </>\n );\n}\n","import React, { useState, useMemo } from 'react';\nimport { useDispatch } from 'react-redux';\n\nimport { syncAndDownload } from 'loot-core/client/actions';\n\nimport { SvgAdd } from '../../../icons/v1';\nimport { SvgSearchAlternate } from '../../../icons/v2';\nimport { styles, theme } from '../../../style';\nimport { ButtonLink } from '../../common/ButtonLink';\nimport { InputWithContent } from '../../common/InputWithContent';\nimport { Label } from '../../common/Label';\nimport { View } from '../../common/View';\nimport { MobileBackButton } from '../../MobileBackButton';\nimport { Page } from '../../Page';\nimport { CellValue } from '../../spreadsheet/CellValue';\nimport { useSheetValue } from '../../spreadsheet/useSheetValue';\nimport { PullToRefresh } from '../PullToRefresh';\nimport { TransactionList } from '../transactions/TransactionList';\n\nfunction TransactionSearchInput({ accountName, onSearch }) {\n const [text, setText] = useState('');\n\n return (\n <View\n style={{\n flexDirection: 'row',\n alignItems: 'center',\n backgroundColor: theme.mobilePageBackground,\n padding: 10,\n width: '100%',\n }}\n >\n <InputWithContent\n leftContent={\n <SvgSearchAlternate\n style={{\n width: 13,\n height: 13,\n flexShrink: 0,\n color: text ? theme.formInputTextHighlight : 'inherit',\n margin: 5,\n marginRight: 0,\n }}\n />\n }\n value={text}\n onChangeValue={text => {\n setText(text);\n onSearch(text);\n }}\n placeholder={`Search ${accountName}`}\n style={{\n backgroundColor: theme.tableBackground,\n border: `1px solid ${theme.formInputBorder}`,\n flex: 1,\n height: styles.mobileMinHeight,\n }}\n />\n </View>\n );\n}\n\nexport function AccountDetails({\n account,\n pending,\n failed,\n prependTransactions,\n transactions,\n accounts,\n categories,\n payees,\n balance,\n balanceCleared,\n balanceUncleared,\n isNewTransaction,\n onLoadMore,\n onSearch,\n onSelectTransaction,\n}) {\n const allTransactions = useMemo(() => {\n return prependTransactions.concat(transactions);\n }, [prependTransactions, transactions]);\n\n const dispatch = useDispatch();\n const onRefresh = async () => {\n await dispatch(syncAndDownload(account.id));\n };\n\n return (\n <Page\n title={\n !account.bankId ? (\n account.name\n ) : (\n <View\n style={{\n flexDirection: 'row',\n }}\n >\n <div\n style={{\n margin: 'auto',\n marginRight: 3,\n width: 8,\n height: 8,\n borderRadius: 8,\n backgroundColor: pending\n ? theme.sidebarItemBackgroundPending\n : failed\n ? theme.sidebarItemBackgroundFailed\n : theme.sidebarItemBackgroundPositive,\n transition: 'transform .3s',\n }}\n />\n {account.name}\n </View>\n )\n }\n headerLeftContent={<MobileBackButton />}\n headerRightContent={\n <ButtonLink\n to=\"transactions/new\"\n type=\"bare\"\n aria-label=\"Add Transaction\"\n style={{\n justifyContent: 'center',\n color: theme.mobileHeaderText,\n margin: 10,\n }}\n hoveredStyle={{\n color: theme.mobileHeaderText,\n background: theme.mobileHeaderTextHover,\n }}\n activeStyle={{ background: 'transparent' }}\n >\n <SvgAdd width={20} height={20} />\n </ButtonLink>\n }\n padding={0}\n style={{\n flex: 1,\n backgroundColor: theme.mobilePageBackground,\n }}\n >\n <View\n style={{\n alignItems: 'center',\n flexShrink: 0,\n marginTop: 10,\n }}\n >\n <View\n style={{\n flexDirection: 'row',\n boxSizing: 'content-box',\n width: '100%',\n justifyContent: 'space-evenly',\n }}\n >\n <View\n style={{\n visibility:\n useSheetValue(balanceUncleared) === 0 ? 'hidden' : 'visible',\n width: '33%',\n }}\n >\n <Label\n title=\"CLEARED\"\n style={{ textAlign: 'center', fontSize: 12 }}\n />\n <CellValue\n binding={balanceCleared}\n type=\"financial\"\n style={{\n fontSize: 12,\n textAlign: 'center',\n fontWeight: '500',\n }}\n data-testid=\"account-balance-cleared\"\n />\n </View>\n <View style={{ width: '33%' }}>\n <Label title=\"BALANCE\" style={{ textAlign: 'center' }} />\n <CellValue\n binding={balance}\n type=\"financial\"\n style={{\n fontSize: 18,\n textAlign: 'center',\n fontWeight: '500',\n }}\n getStyle={value => ({\n color: value < 0 ? theme.errorText : theme.pillTextHighlighted,\n })}\n data-testid=\"account-balance\"\n />\n </View>\n <View\n style={{\n visibility:\n useSheetValue(balanceUncleared) === 0 ? 'hidden' : 'visible',\n width: '33%',\n }}\n >\n <Label\n title=\"UNCLEARED\"\n style={{ textAlign: 'center', fontSize: 12 }}\n />\n <CellValue\n binding={balanceUncleared}\n type=\"financial\"\n style={{\n fontSize: 12,\n textAlign: 'center',\n fontWeight: '500',\n }}\n data-testid=\"account-balance-uncleared\"\n />\n </View>\n </View>\n <TransactionSearchInput\n accountName={account.name}\n onSearch={onSearch}\n />\n </View>\n <PullToRefresh onRefresh={onRefresh}>\n <TransactionList\n account={account}\n transactions={allTransactions}\n categories={categories}\n accounts={accounts}\n payees={payees}\n isNew={isNewTransaction}\n onLoadMore={onLoadMore}\n onSelect={onSelectTransaction}\n />\n </PullToRefresh>\n </Page>\n );\n}\n","import React, { useCallback, useEffect, useRef, useState } from 'react';\nimport { useDispatch, useSelector } from 'react-redux';\nimport { useParams } from 'react-router-dom';\n\nimport memoizeOne from 'memoize-one';\nimport { useDebounceCallback } from 'usehooks-ts';\n\nimport * as actions from 'loot-core/src/client/actions';\nimport {\n SchedulesProvider,\n useCachedSchedules,\n} from 'loot-core/src/client/data-hooks/schedules';\nimport * as queries from 'loot-core/src/client/queries';\nimport { pagedQuery } from 'loot-core/src/client/query-helpers';\nimport { listen } from 'loot-core/src/platform/client/fetch';\nimport {\n isPreviewId,\n ungroupTransactions,\n} from 'loot-core/src/shared/transactions';\n\nimport { useAccounts } from '../../../hooks/useAccounts';\nimport { useCategories } from '../../../hooks/useCategories';\nimport { useDateFormat } from '../../../hooks/useDateFormat';\nimport { useFailedAccounts } from '../../../hooks/useFailedAccounts';\nimport { useLocalPref } from '../../../hooks/useLocalPref';\nimport { useLocalPrefs } from '../../../hooks/useLocalPrefs';\nimport { useNavigate } from '../../../hooks/useNavigate';\nimport { usePayees } from '../../../hooks/usePayees';\nimport { useSetThemeColor } from '../../../hooks/useSetThemeColor';\nimport { theme, styles } from '../../../style';\nimport { Button } from '../../common/Button';\nimport { Text } from '../../common/Text';\nimport { View } from '../../common/View';\n\nimport { AccountDetails } from './AccountDetails';\n\nconst getSchedulesTransform = memoizeOne((id, hasSearch) => {\n let filter = queries.getAccountFilter(id, '_account');\n\n // Never show schedules on these pages\n if (hasSearch) {\n filter = { id: null };\n }\n\n return q => {\n q = q.filter({ $and: [filter, { '_account.closed': false }] });\n return q.orderBy({ next_date: 'desc' });\n };\n});\n\nfunction PreviewTransactions({ children }) {\n const scheduleData = useCachedSchedules();\n\n if (scheduleData == null) {\n return children(null);\n }\n\n const schedules = scheduleData.schedules.filter(\n s =>\n !s.completed &&\n ['due', 'upcoming', 'missed'].includes(scheduleData.statuses.get(s.id)),\n );\n\n return children(\n schedules.map(schedule => ({\n id: 'preview/' + schedule.id,\n payee: schedule._payee,\n account: schedule._account,\n amount: schedule._amount,\n date: schedule.next_date,\n notes: scheduleData.statuses.get(schedule.id),\n schedule: schedule.id,\n })),\n );\n}\n\nexport function Account(props) {\n const accounts = useAccounts();\n const payees = usePayees();\n\n const failedAccounts = useFailedAccounts();\n const syncingAccountIds = useSelector(state => state.account.accountsSyncing);\n\n const navigate = useNavigate();\n const [transactions, setTransactions] = useState([]);\n const [isSearching, setIsSearching] = useState(false);\n const [currentQuery, setCurrentQuery] = useState();\n\n const newTransactions = useSelector(state => state.queries.newTransactions);\n const prefs = useLocalPrefs();\n const dateFormat = useDateFormat() || 'MM/dd/yyyy';\n const [_numberFormat] = useLocalPref('numberFormat');\n const numberFormat = _numberFormat || 'comma-dot';\n const [hideFraction = false] = useLocalPref('hideFraction');\n\n const state = {\n payees,\n newTransactions,\n prefs,\n dateFormat,\n };\n\n const dispatch = useDispatch();\n\n const { id: accountId } = useParams();\n\n const makeRootQuery = useCallback(\n () => queries.makeTransactionsQuery(accountId),\n [accountId],\n );\n\n const paged = useRef(null);\n\n const updateQuery = useCallback(query => {\n paged.current?.unsubscribe();\n paged.current = pagedQuery(\n query.options({ splits: 'grouped' }).select('*'),\n data => setTransactions(data),\n { pageCount: 10, mapper: ungroupTransactions },\n );\n }, []);\n\n const fetchTransactions = useCallback(async () => {\n const query = makeRootQuery();\n setCurrentQuery(query);\n updateQuery(query);\n }, [makeRootQuery, updateQuery]);\n\n useEffect(() => {\n let unlisten;\n\n async function setUpAccount() {\n unlisten = listen('sync-event', ({ type, tables }) => {\n if (type === 'applied') {\n if (\n tables.includes('transactions') ||\n tables.includes('category_mapping') ||\n tables.includes('payee_mapping')\n ) {\n paged.current?.run();\n }\n\n if (tables.includes('payees') || tables.includes('payee_mapping')) {\n dispatch(actions.getPayees());\n }\n }\n });\n\n await fetchTransactions();\n\n dispatch(actions.markAccountRead(accountId));\n }\n\n setUpAccount();\n\n return () => unlisten();\n }, [accountId, dispatch, fetchTransactions]);\n\n // Load categories if necessary.\n const categories = useCategories();\n\n const updateSearchQuery = useDebounceCallback(\n useCallback(\n searchText => {\n if (searchText === '' && currentQuery) {\n updateQuery(currentQuery);\n } else if (searchText && currentQuery) {\n updateQuery(\n queries.makeTransactionSearchQuery(\n currentQuery,\n searchText,\n dateFormat,\n ),\n );\n }\n\n setIsSearching(searchText !== '');\n },\n [currentQuery, dateFormat, updateQuery],\n ),\n 150,\n );\n\n useSetThemeColor(theme.mobileViewTheme);\n\n if (!accounts || !accounts.length) {\n return null;\n }\n\n if (\n accountId === 'budgeted' ||\n accountId === 'offbudget' ||\n accountId === 'uncategorized'\n ) {\n return (\n <View style={{ flex: 1, padding: 30 }}>\n <Text style={(styles.text, { textAlign: 'center' })}>\n There is no Mobile View at the moment\n </Text>\n <Button\n type=\"normal\"\n style={{ fontSize: 15, marginLeft: 10, marginTop: 10 }}\n onClick={() => navigate('/accounts')}\n >\n Go back to Mobile Accounts\n </Button>\n </View>\n );\n }\n\n const account = accounts.find(acct => acct.id === accountId);\n\n const isNewTransaction = id => {\n return state.newTransactions.includes(id);\n };\n\n const onSearch = text => {\n updateSearchQuery(text);\n };\n\n const onSelectTransaction = transaction => {\n // details of how the native app used to handle preview transactions here can be found at commit 05e58279\n if (!isPreviewId(transaction.id)) {\n navigate(`transactions/${transaction.id}`);\n }\n };\n\n const balance = queries.accountBalance(account);\n const balanceCleared = queries.accountBalanceCleared(account);\n const balanceUncleared = queries.accountBalanceUncleared(account);\n\n return (\n <SchedulesProvider\n transform={getSchedulesTransform(accountId, isSearching)}\n >\n <PreviewTransactions accountId={props.accountId}>\n {prependTransactions =>\n prependTransactions == null ? null : (\n <AccountDetails\n // This key forces the whole table rerender when the number\n // format changes\n {...state}\n key={numberFormat + hideFraction}\n account={account}\n pending={syncingAccountIds.includes(account.id)}\n failed={failedAccounts && failedAccounts.has(account.id)}\n accounts={accounts}\n categories={categories.list}\n payees={state.payees}\n transactions={transactions}\n prependTransactions={prependTransactions || []}\n balance={balance}\n balanceCleared={balanceCleared}\n balanceUncleared={balanceUncleared}\n isNewTransaction={isNewTransaction}\n onLoadMore={() => {\n paged.current?.fetchNext();\n }}\n onSearch={onSearch}\n onSelectTransaction={onSelectTransaction}\n />\n )\n }\n </PreviewTransactions>\n </SchedulesProvider>\n );\n}\n"],"names":["$458b0a5536c1a7cf$export$40bfa8c7b0832715","value","defaultValue","onChange","stateValue","setStateValue","$6imuh$useState","isControlledRef","$6imuh$useRef","isControlled","$6imuh$useEffect","wasControlled","currentValue","setValue","$6imuh$useCallback","args","onChangeCaller","onChangeArgs","oldValue","functionArgs","interceptedValue","SvgArrowThinLeft","props","_jsx","svg","xmlns","viewBox","style","color","path","d","fill","SyncRefresh","onSync","children","syncing","setSyncing","useState","onSync_","_Fragment","refreshing","onRefresh","Card","ref","View","marginTop","marginLeft","marginRight","borderRadius","backgroundColor","theme","cardBackground","borderColor","cardBorder","boxShadow","overflow","displayName","Label","title","Text","styles","text","tableRowHeaderText","textAlign","fontSize","marginBottom","DIRECTION","isOverflowScrollable","element","overflowType","isScrollable","direction","bottomScroll","isTreeScrollable","styleInject","css","insertAt","head","RefreshingContent","React","PullingContent","css$1","PullToRefresh","_a","_b","isPullable","_c","canFetchMore","onFetchMore","_d","refreshingContent","_e","pullingContent","_f","pullDownThreshold","_g","fetchMoreThreshold","_h","maxPullDownDistance","_j","resistance","_k","className","containerRef","useRef","childrenRef","pullDownRef","fetchMoreRef","pullToRefreshThresholdBreached","fetchMoreTresholdBreached","isDragging","startY","currentY","useEffect","childrenEl","onTouchStart","onTouchMove","onScroll","onEnd","isAlreadyFetchingMore","getScrollToBottomValue","initContainer","scrollTop","scrollHeight","e","yDistanceMoved","div","BasePullToRefresh","String","ROW_HEIGHT","ListItem","height","borderBottomWidth","tableBorder","flexDirection","alignItems","paddingLeft","paddingRight","zIndex","ToBudget","toBudget","onClick","amount","useSheetValue","Button","type","underlinedText","formInputText","flexShrink","CellValue","binding","smallText","fontWeight","errorText","Saved","projected","reportBudget","totalBudgetedSaved","totalSaved","isNegative","warningText","errorTextDark","BudgetCell","name","textStyle","categoryId","month","onBudgetAction","onEdit","onBlur","isEditing","sheetValue","updateBudgetAmount","category","onAmountClick","AmountInput","zeroSign","display","transform","focused","onUpdate","role","justifyContent","getStyle","makeAmountGrey","data-testid","onPointerUp","onPointerDown","preventDefault","ExpenseCategory","memo","goal","budgeted","spent","balance","carryover","index","blank","show3Cols","showBudgetedCol","opacity","balanceTooltip","useTooltip","isEditingBudget","setIsEditingBudget","onRequestActiveEdit","onClearActiveEdit","useSingleActiveEditForm","onEditBudget","id","onOpenBalanceActionMenu","open","close","listItemRef","_onBudgetAction","monthIndex","action","arg","monthUtils","content","borderTopWidth","hidden","undefined","innerRef","flex","lineClamp","width","noTapHighlight","span","BalanceWithCarryover","balanceStyle","isOpen","ReportBudgetBalanceTooltip","offset","tooltip","onClose","RolloverBudgetBalanceTooltip","ExpenseGroupTotals","group","editMode","tableRowHeaderBackground","IncomeGroupTotals","padding","IncomeCategory","ExpenseGroup","onEditGroup","onEditCategory","onAddCategory","showHiddenCategories","editable","groupBudgeted","rolloverBudget","groupSumAmount","groupBalance","categories","filter","map","catGoal","catBudgeted","catSumAmount","catBalance","catCarryover","tableBackground","IncomeGroup","editingBudgetCategoryId","onEditCategoryBudget","BudgetGroups","categoryGroups","gestures","onSaveCategory","onDeleteCategory","onAddGroup","onReorderCategory","onReorderGroup","separateGroups","memoizeOne","groups","incomeGroup","find","is_income","expenseGroups","SingleActiveEditFormProvider","formName","overflowY","paddingBottom","margin","BudgetTable","monthBounds","onPrevMonth","onNextMonth","onSaveGroup","onDeleteGroup","onEditMode","onShowBudgetSummary","onOpenMonthActionMenu","onSwitchBudgetType","useResponsive","format","useFormat","dispatch","useDispatch","showSpentColumn","setShowSpentColumnPref","useLocalPref","setShowHiddenCategoriesPref","toggleDisplay","buttonStyle","_onSwitchBudgetType","pushModal","onSwitch","onToggleHiddenCategories","NamespaceContext","Provider","Page","MonthSelector","headerRightContent","hoveredStyle","mobileHeaderText","background","mobileHeaderTextHover","BudgetPageMenu","disabled","formInputBackgroundSelection","flexBasis","buttonNormalText","totalBudgetedExpense","totalBudgeted","formatter","parseFloat","totalSpent","totalLeftover","totalBalance","MOBILE_NAV_HEIGHT","isReportBudgetEnabled","useFeatureFlag","onMenuSelect","Error","getOpenEvents","SvgDotsHorizontalTriple","Tooltip","position","Menu","items","prevEnabled","start","nextEnabled","end","arrowButtonStyle","SvgArrowThinRight","BudgetInner","budgetType","spreadsheet","currMonth","bounds","setBounds","currentMonth","setCurrentMonth","initialized","setInitialized","setEditMode","_numberFormat","numberFormat","hideFraction","init","send","prewarmMonth","unlisten","listen","tables","includes","getCategories","applyBudgetAction","onValidate","onSubmit","createGroup","groupId","isIncome","collapseModals","createCategory","updateGroup","g","mustTransfer","onDelete","transferCategory","deleteGroup","updateCategory","deleteCategory","inGroup","aroundCategory","targetId","originalCatId","catId","cat","idx","findIndex","length","moveCategory","moveCategoryGroup","switchBudgetType","loadPrefs","onSaveNotes","notes","note","onEditGroupNotes","onSave","onEditCategoryNotes","c","onEditNotes","mobilePageBackground","AnimatedLoading","sync","flag","Budget","list","grouped","useCategories","_budgetType","useSpreadsheet","useSetThemeColor","mobileViewTheme","AccountHeader","pageTextLight","textTransform","AccountCard","account","updated","connected","pending","failed","getBalanceQuery","onSelect","mobileAccountShadow","onMouseDown","border","pillBorder","bankId","sidebarItemBackgroundPending","sidebarItemBackgroundFailed","sidebarItemBackgroundPositive","TextOneLine","mobileAccountText","pillText","EmptyMessage","AccountList","accounts","updatedAccounts","getOnBudgetBalance","getOffBudgetBalance","onAddAccount","onSelectAccount","failedAccounts","useFailedAccounts","syncingAccountIds","useSelector","state","accountsSyncing","budgetedAccounts","offbudget","offbudgetAccounts","noBackgroundColorStyle","activeStyle","SvgAdd","acct","bank","has","Accounts","useAccounts","newTransactions","queries","transactions","navigate","useNavigate","onSelectTransaction","transaction","replaceModal","syncAndDownload","closed","FUNC_ERROR_TEXT","NAN","symbolTag","reTrim","reIsBadHex","reIsBinary","reIsOctal","freeParseInt","freeGlobal","global","freeSelf","root","objectProto","objectToString","nativeMax","nativeMin","now","debounce","func","wait","options","lastArgs","lastThis","maxWait","result","timerId","lastCallTime","lastInvokeTime","leading","maxing","trailing","toNumber","isObject","invokeFunc","time","thisArg","leadingEdge","timerExpired","remainingWait","timeSinceLastCall","timeSinceLastInvoke","shouldInvoke","trailingEdge","cancel","flush","debounced","isInvoking","isObjectLike","isSymbol","other","isBinary","lodash_debounce","useUnmount","funcRef","useDebounceCallback","delay","debouncedFunc","useMemo","debouncedFuncInstance","wrappedFunc","$c1d7fb2ec91bae71$var$Item","context","childItems","rendered","textValue","$c1d7fb2ec91bae71$var$hasChildItems","child","$tyW6A$react","$c1d7fb2ec91bae71$export$6d08773d2e66f8f2","$9fc4852771d079eb$var$Section","item","$9fc4852771d079eb$export$6e2c8f0811a474ce","$eb2240fc39a57fa5$export$bf788dd355e3a401","$eb2240fc39a57fa5$var$iterable","nodes","node","partialNode","parentKey","v","_v_key","key","parentNode","cached","childNodes","childNode","nodeKey","$eb2240fc39a57fa5$var$compose","$eb2240fc39a57fa5$var$capitalize","builder","iterator","cache","iterable","outer","inner","str","$7613b1592d41b092$export$6cd28814d92fa9c9","factory","$tyW6A$useMemo","collection","$c5a24bc478652b5f$export$1005530eda016c13","$c5a24bc478652b5f$export$fbdeaa6a76694f71","$c5a24bc478652b5f$export$5f3398f8733f90e2","i","$c5a24bc478652b5f$export$8c434b3a7a4dad6","a","b","aAncestors","$c5a24bc478652b5f$var$getAncestors","bAncestors","firstNonMatchingAncestor","parents","$453cc9f0df89c0a5$var$cache","$453cc9f0df89c0a5$export$77d5aafae4e095b2","count","countItems","$d191a55c9702f145$export$8467354a121f1b9f","label","ariaLabelledby","ariaLabel","labelElementType","$iD7q0$useId","labelId","labelProps","fieldProps","$iD7q0$useLabels","$148a7a147e38ea7f$var$RTL_SCRIPTS","$148a7a147e38ea7f$var$RTL_LANGS","$148a7a147e38ea7f$export$702d680b21cbd764","localeString","locale","textInfo","lang","$1e5a04cdaf7d1af8$var$localeSymbol","$1e5a04cdaf7d1af8$export$f09106e7c6677ec5","$1e5a04cdaf7d1af8$var$currentLocale","$1e5a04cdaf7d1af8$var$listeners","$1e5a04cdaf7d1af8$var$updateLocale","listener","$1e5a04cdaf7d1af8$export$188ec29ebc2bdc3a","isSSR","$iFADg$useIsSSR","defaultLocale","setDefaultLocale","$iFADg$useState","$iFADg$useEffect","$18f2051aff69b9bf$var$I18nContext","$iFADg$react","$18f2051aff69b9bf$export$43bb16f9c6d9e3f7","$iFADg$useContext","$325a3faab7a68acd$var$cache","$325a3faab7a68acd$export$a16aca283550c30d","cacheKey","$feb5ffebff200149$export$d3e3bd3e26688c04","$eCAIO$isAppleDevice","$feb5ffebff200149$export$16792effe837dba3","$eCAIO$isMac","$fb3050f43d946246$var$TYPEAHEAD_DEBOUNCE_WAIT_MS","$fb3050f43d946246$export$e32c88dfddc6e1d8","keyboardDelegate","selectionManager","onTypeSelect","$eCAIO$useRef","onKeyDown","character","$fb3050f43d946246$var$getStringForKey","$ae20dd8cbca75726$export$d6daf82dcd84e87c","manager","delegate","autoFocus","shouldFocusWrap","disallowEmptySelection","disallowSelectAll","selectOnFocus","disallowTypeAhead","shouldUseVirtualFocus","allowsTabNavigation","isVirtualized","scrollRef","linkBehavior","$eCAIO$useLocale","router","$eCAIO$useRouter","navigateToKey","childFocus","$eCAIO$flushSync","_delegate_getFirstKey","_delegate_getFirstKey1","nextKey","_delegate_getLastKey","_delegate_getLastKey1","_delegate_getFirstKey2","_delegate_getLastKey2","_delegate_getLastKey3","_delegate_getFirstKey3","firstKey","lastKey","walker","$eCAIO$getFocusableTreeWalker","next","last","$eCAIO$focusWithoutScrolling","scrollPos","$eCAIO$useEvent","onFocus","navigateToFirstKey","relatedTarget","_manager_lastSelectedKey","_manager_firstSelectedKey","$eCAIO$getInteractionModality","$eCAIO$scrollIntoViewport","autoFocusRef","$eCAIO$useEffect","focusedKey","selectedKeys","$eCAIO$focusSafely","lastFocusedKey","modality","$eCAIO$scrollIntoView","handlers","typeSelectProps","$eCAIO$mergeProps","tabIndex","$880e95eb8b93ba9a$export$ecf600387e221c37","shouldSelectOnPressUp","focus","isDisabled","onAction","allowsDifferentPressOrigin","itemProps","isLinkOverride","hasLinkAction","allowsSelection","allowsActions","hasPrimaryAction","hasSecondaryAction","hasAction","longPressEnabled","longPressEnabledOnPressStart","hadPrimaryActionOnPressStart","performAction","itemPressProps","$880e95eb8b93ba9a$var$isSelectionKey","$880e95eb8b93ba9a$var$isActionKey","pressProps","isPressed","$eCAIO$usePress","onDoubleClick","longPressProps","$eCAIO$useLongPress","onDragStartCapture","$eCAIO$openLink","event","$2a25aae57d74318e$export$a05409b8bb224a5a","shouldSkip","prevRect","itemRect","right","menu","$eCAIO$isScrollable","containerRect","containerX","pageX","containerY","pageY","search","fromKey","substring","opts","$982254629710d113$export$b95089534ab7c1fd","disabledKeys","collator","$eCAIO$useCollator","disabledBehavior","$eCAIO$useMemo","collectionProps","$b1f0cad8af73213b$export$3585ede4d035bf14","$b1f0cad8af73213b$var$normalizeKey","$b1f0cad8af73213b$export$9145995848b05025","itemKey","data","$c132121280ec012d$export$50eacbbf140a3141","domProps","$frWMC$filterDOMProps","selectionBehavior","listProps","$frWMC$useSelectableList","focusWithinProps","$frWMC$useFocusWithin","$frWMC$useId","$frWMC$useLabel","$frWMC$mergeProps","$293f70390ea03370$export$497855f14858aa34","_item_props","_props_isDisabled","_props_isSelected","isSelected","_props_shouldSelectOnPressUp","_props_shouldFocusOnHover","shouldFocusOnHover","_props_shouldUseVirtualFocus","_props_isVirtualized","$frWMC$useSlotId","descriptionId","optionProps","$frWMC$isMac","$frWMC$isWebKit","$frWMC$getItemCount","isFocused","$frWMC$useSelectableItem","_data_onAction","hoverProps","$frWMC$useHover","$frWMC$isFocusVisible","$af383d3bef1cfdc9$export$c3f9f39876e4bc7","heading","headingId","$e40ea825a81a3709$export$52baac22726c72bf","keys","anchorKey","currentKey","$7af3f5b51489e0b5$var$equalSets","setA","setB","$7af3f5b51489e0b5$export$253fe78d46329472","selectionMode","allowDuplicateSelectionEvents","selectionBehaviorProp","isFocusedRef","$Qsto2$useRef","setFocused","$Qsto2$useState","focusedKeyRef","childFocusStrategyRef","setFocusedKey","selectedKeysProp","$Qsto2$useMemo","$7af3f5b51489e0b5$var$convertSelection","defaultSelectedKeys","setSelectedKeys","$Qsto2$useControlledState","disabledKeysProp","setSelectionBehavior","lastSelectionBehavior","$Qsto2$useEffect","f","k","childFocusStrategy","selection","$d496c0a20b6e58ec$export$6c8a5aaad13c9852","allKeys","first","$Qsto2$compareNodeOrder","toKey","from","to","fromItem","toItem","addKeys","$Qsto2$getFirstItem","$Qsto2$getChildNodes","_this_collection_getItem_props","_this_collection_getItem","_options_allowsCellSelection","$a02d57049d202695$export$d085fb9e920b5ca7","visit","$e72dd72e1c76a225$export$2f645645f7bca764","selectionState","$58Phs$useMultipleSelectionState","$58Phs$useMemo","$58Phs$useCallback","$58Phs$useCollection","$58Phs$SelectionManager","cachedCollection","$58Phs$useRef","$58Phs$useEffect","startItem","cachedItemNodes","itemNode","itemNodes","diff","newNode","Option","isLast","useOption","isFocusVisible","focusProps","useFocusRing","li","mergeProps","tableRowBackgroundHighlight","mobileModalText","outline","borderBottom","zIndices","SECTION_HEADING","ListBoxSection","section","headingProps","groupProps","useListBoxSection","pageBackground","borderTop","tableHeaderText","paddingTop","top","ul","listStyle","ListBox","useListState","listBoxRef","listBoxProps","useListBox","loadMore","hasScrolledToBottom","useScroll","scrolledToBottom","usePrevious","Transaction","payees","added","accountsById","groupById","payeesById","payee","payeeId","originalAmount","cleared","is_parent","isParent","schedule","isPreview","isPreviewId","getScheduledAmount","categoryName","lookupName","transferAcct","transfer_acct","prettyDescription","getDescriptionPretty","specialCategory","prettyCategory","isReconciled","reconciled","fontStyle","SvgArrowsSynchronize","menuItemText","tableTextLight","Status","status","_jsxs","SvgLockClosed","noticeTextLight","SvgCheckCircle1","pageTextSubdued","tableText","menuItemTextSelected","integerToCurrency","TransactionList","isNew","scrollProps","onLoadMore","sections","forEach","date","lastSection","lastData","push","is_child","ListHeaderComponent","aria-label","Section","Item","TransactionSearchInput","accountName","onSearch","setText","InputWithContent","leftContent","SvgSearchAlternate","formInputTextHighlight","onChangeValue","placeholder","formInputBorder","mobileMinHeight","AccountDetails","prependTransactions","balanceCleared","balanceUncleared","isNewTransaction","allTransactions","concat","transition","headerLeftContent","MobileBackButton","ButtonLink","boxSizing","visibility","pillTextHighlighted","getSchedulesTransform","hasSearch","q","$and","orderBy","next_date","PreviewTransactions","scheduleData","useCachedSchedules","schedules","s","completed","statuses","get","_payee","_account","_amount","Account","usePayees","setTransactions","isSearching","setIsSearching","currentQuery","setCurrentQuery","prefs","useLocalPrefs","dateFormat","useDateFormat","accountId","useParams","makeRootQuery","useCallback","paged","updateQuery","query","current","unsubscribe","pagedQuery","splits","select","pageCount","mapper","ungroupTransactions","fetchTransactions","setUpAccount","run","actions","updateSearchQuery","searchText","SchedulesProvider","fetchNext"],"mappings":"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","x_google_ignoreList":[0,5,11,12,13,14,15,16,17,18,19]}