@burdenoff/microfe-brainyrich 2026.706.1 → 2026.706.3
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.
- package/dist/_virtual/_rolldown/runtime.js +20 -0
- package/dist/brainyrich/components/LoadMore.js.map +1 -1
- package/dist/brainyrich/components/index.js +1 -0
- package/dist/brainyrich/components/pickers.js.map +1 -1
- package/dist/brainyrich/components/reuse/CommentThread.js.map +1 -1
- package/dist/brainyrich/components/reuse/DocumentsPanel.js.map +1 -1
- package/dist/brainyrich/components/reuse/TagField.js.map +1 -1
- package/dist/brainyrich/components/viz.js +628 -0
- package/dist/brainyrich/components/viz.js.map +1 -0
- package/dist/brainyrich/hooks/useBrainyRichApi.js.map +1 -1
- package/dist/brainyrich/pages/AccountsPage.js +732 -530
- package/dist/brainyrich/pages/AccountsPage.js.map +1 -1
- package/dist/brainyrich/pages/AiAssistantPage.js +475 -343
- package/dist/brainyrich/pages/AiAssistantPage.js.map +1 -1
- package/dist/brainyrich/pages/AnalyticsPage.js +555 -392
- package/dist/brainyrich/pages/AnalyticsPage.js.map +1 -1
- package/dist/brainyrich/pages/DashboardPage.js +318 -194
- package/dist/brainyrich/pages/DashboardPage.js.map +1 -1
- package/dist/brainyrich/pages/FamilyPage.js +723 -355
- package/dist/brainyrich/pages/FamilyPage.js.map +1 -1
- package/dist/brainyrich/pages/GoalsPage.js +573 -419
- package/dist/brainyrich/pages/GoalsPage.js.map +1 -1
- package/dist/brainyrich/pages/InvestmentsPage.js +357 -213
- package/dist/brainyrich/pages/InvestmentsPage.js.map +1 -1
- package/dist/brainyrich/pages/PortfoliosPage.js +525 -399
- package/dist/brainyrich/pages/PortfoliosPage.js.map +1 -1
- package/dist/brainyrich/pages/ReportsPage.js +845 -258
- package/dist/brainyrich/pages/ReportsPage.js.map +1 -1
- package/dist/brainyrich/pages/RiskPage.js +667 -346
- package/dist/brainyrich/pages/RiskPage.js.map +1 -1
- package/dist/brainyrich/pages/TaxPage.js +687 -347
- package/dist/brainyrich/pages/TaxPage.js.map +1 -1
- package/dist/brainyrich/pages/_shared.js +81 -101
- package/dist/brainyrich/pages/_shared.js.map +1 -1
- package/dist/node_modules/@emotion/is-prop-valid/dist/emotion-is-prop-valid.esm.js +13 -0
- package/dist/node_modules/@emotion/is-prop-valid/dist/emotion-is-prop-valid.esm.js.map +1 -0
- package/dist/node_modules/@emotion/memoize/dist/emotion-memoize.esm.js +14 -0
- package/dist/node_modules/@emotion/memoize/dist/emotion-memoize.esm.js.map +1 -0
- package/dist/node_modules/clsx/dist/clsx.js +18 -0
- package/dist/node_modules/clsx/dist/clsx.js.map +1 -0
- package/dist/node_modules/d3-array/src/ascending.js +8 -0
- package/dist/node_modules/d3-array/src/ascending.js.map +1 -0
- package/dist/node_modules/d3-array/src/bisect.js +10 -0
- package/dist/node_modules/d3-array/src/bisect.js.map +1 -0
- package/dist/node_modules/d3-array/src/bisector.js +43 -0
- package/dist/node_modules/d3-array/src/bisector.js.map +1 -0
- package/dist/node_modules/d3-array/src/descending.js +8 -0
- package/dist/node_modules/d3-array/src/descending.js.map +1 -0
- package/dist/node_modules/d3-array/src/max.js +14 -0
- package/dist/node_modules/d3-array/src/max.js.map +1 -0
- package/dist/node_modules/d3-array/src/min.js +14 -0
- package/dist/node_modules/d3-array/src/min.js.map +1 -0
- package/dist/node_modules/d3-array/src/number.js +15 -0
- package/dist/node_modules/d3-array/src/number.js.map +1 -0
- package/dist/node_modules/d3-array/src/quantile.js +25 -0
- package/dist/node_modules/d3-array/src/quantile.js.map +1 -0
- package/dist/node_modules/d3-array/src/quickselect.js +26 -0
- package/dist/node_modules/d3-array/src/quickselect.js.map +1 -0
- package/dist/node_modules/d3-array/src/range.js +10 -0
- package/dist/node_modules/d3-array/src/range.js.map +1 -0
- package/dist/node_modules/d3-array/src/sort.js +17 -0
- package/dist/node_modules/d3-array/src/sort.js.map +1 -0
- package/dist/node_modules/d3-array/src/ticks.js +34 -0
- package/dist/node_modules/d3-array/src/ticks.js.map +1 -0
- package/dist/node_modules/d3-color/src/color.js +291 -0
- package/dist/node_modules/d3-color/src/color.js.map +1 -0
- package/dist/node_modules/d3-color/src/define.js +13 -0
- package/dist/node_modules/d3-color/src/define.js.map +1 -0
- package/dist/node_modules/d3-format/src/defaultLocale.js +15 -0
- package/dist/node_modules/d3-format/src/defaultLocale.js.map +1 -0
- package/dist/node_modules/d3-format/src/exponent.js +9 -0
- package/dist/node_modules/d3-format/src/exponent.js.map +1 -0
- package/dist/node_modules/d3-format/src/formatDecimal.js +13 -0
- package/dist/node_modules/d3-format/src/formatDecimal.js.map +1 -0
- package/dist/node_modules/d3-format/src/formatGroup.js +11 -0
- package/dist/node_modules/d3-format/src/formatGroup.js.map +1 -0
- package/dist/node_modules/d3-format/src/formatNumerals.js +12 -0
- package/dist/node_modules/d3-format/src/formatNumerals.js.map +1 -0
- package/dist/node_modules/d3-format/src/formatPrefixAuto.js +13 -0
- package/dist/node_modules/d3-format/src/formatPrefixAuto.js.map +1 -0
- package/dist/node_modules/d3-format/src/formatRounded.js +12 -0
- package/dist/node_modules/d3-format/src/formatRounded.js.map +1 -0
- package/dist/node_modules/d3-format/src/formatSpecifier.js +29 -0
- package/dist/node_modules/d3-format/src/formatSpecifier.js.map +1 -0
- package/dist/node_modules/d3-format/src/formatTrim.js +20 -0
- package/dist/node_modules/d3-format/src/formatTrim.js.map +1 -0
- package/dist/node_modules/d3-format/src/formatTypes.js +23 -0
- package/dist/node_modules/d3-format/src/formatTypes.js.map +1 -0
- package/dist/node_modules/d3-format/src/identity.js +8 -0
- package/dist/node_modules/d3-format/src/identity.js.map +1 -0
- package/dist/node_modules/d3-format/src/locale.js +86 -0
- package/dist/node_modules/d3-format/src/locale.js.map +1 -0
- package/dist/node_modules/d3-format/src/precisionFixed.js +9 -0
- package/dist/node_modules/d3-format/src/precisionFixed.js.map +1 -0
- package/dist/node_modules/d3-format/src/precisionPrefix.js +9 -0
- package/dist/node_modules/d3-format/src/precisionPrefix.js.map +1 -0
- package/dist/node_modules/d3-format/src/precisionRound.js +9 -0
- package/dist/node_modules/d3-format/src/precisionRound.js.map +1 -0
- package/dist/node_modules/d3-interpolate/src/array.js +15 -0
- package/dist/node_modules/d3-interpolate/src/array.js.map +1 -0
- package/dist/node_modules/d3-interpolate/src/basis.js +16 -0
- package/dist/node_modules/d3-interpolate/src/basis.js.map +1 -0
- package/dist/node_modules/d3-interpolate/src/basisClosed.js +13 -0
- package/dist/node_modules/d3-interpolate/src/basisClosed.js.map +1 -0
- package/dist/node_modules/d3-interpolate/src/color.js +25 -0
- package/dist/node_modules/d3-interpolate/src/color.js.map +1 -0
- package/dist/node_modules/d3-interpolate/src/constant.js +6 -0
- package/dist/node_modules/d3-interpolate/src/constant.js.map +1 -0
- package/dist/node_modules/d3-interpolate/src/date.js +11 -0
- package/dist/node_modules/d3-interpolate/src/date.js.map +1 -0
- package/dist/node_modules/d3-interpolate/src/number.js +10 -0
- package/dist/node_modules/d3-interpolate/src/number.js.map +1 -0
- package/dist/node_modules/d3-interpolate/src/numberArray.js +16 -0
- package/dist/node_modules/d3-interpolate/src/numberArray.js.map +1 -0
- package/dist/node_modules/d3-interpolate/src/object.js +14 -0
- package/dist/node_modules/d3-interpolate/src/object.js.map +1 -0
- package/dist/node_modules/d3-interpolate/src/piecewise.js +14 -0
- package/dist/node_modules/d3-interpolate/src/piecewise.js.map +1 -0
- package/dist/node_modules/d3-interpolate/src/rgb.js +19 -0
- package/dist/node_modules/d3-interpolate/src/rgb.js.map +1 -0
- package/dist/node_modules/d3-interpolate/src/round.js +10 -0
- package/dist/node_modules/d3-interpolate/src/round.js.map +1 -0
- package/dist/node_modules/d3-interpolate/src/string.js +28 -0
- package/dist/node_modules/d3-interpolate/src/string.js.map +1 -0
- package/dist/node_modules/d3-interpolate/src/value.js +18 -0
- package/dist/node_modules/d3-interpolate/src/value.js.map +1 -0
- package/dist/node_modules/d3-path/src/path.js +65 -0
- package/dist/node_modules/d3-path/src/path.js.map +1 -0
- package/dist/node_modules/d3-scale/src/band.js +52 -0
- package/dist/node_modules/d3-scale/src/band.js.map +1 -0
- package/dist/node_modules/d3-scale/src/constant.js +10 -0
- package/dist/node_modules/d3-scale/src/constant.js.map +1 -0
- package/dist/node_modules/d3-scale/src/continuous.js +73 -0
- package/dist/node_modules/d3-scale/src/continuous.js.map +1 -0
- package/dist/node_modules/d3-scale/src/diverging.js +82 -0
- package/dist/node_modules/d3-scale/src/diverging.js.map +1 -0
- package/dist/node_modules/d3-scale/src/identity.js +20 -0
- package/dist/node_modules/d3-scale/src/identity.js.map +1 -0
- package/dist/node_modules/d3-scale/src/init.js +29 -0
- package/dist/node_modules/d3-scale/src/init.js.map +1 -0
- package/dist/node_modules/d3-scale/src/linear.js +36 -0
- package/dist/node_modules/d3-scale/src/linear.js.map +1 -0
- package/dist/node_modules/d3-scale/src/log.js +77 -0
- package/dist/node_modules/d3-scale/src/log.js.map +1 -0
- package/dist/node_modules/d3-scale/src/nice.js +10 -0
- package/dist/node_modules/d3-scale/src/nice.js.map +1 -0
- package/dist/node_modules/d3-scale/src/number.js +8 -0
- package/dist/node_modules/d3-scale/src/number.js.map +1 -0
- package/dist/node_modules/d3-scale/src/ordinal.js +31 -0
- package/dist/node_modules/d3-scale/src/ordinal.js.map +1 -0
- package/dist/node_modules/d3-scale/src/pow.js +37 -0
- package/dist/node_modules/d3-scale/src/pow.js.map +1 -0
- package/dist/node_modules/d3-scale/src/quantile.js +37 -0
- package/dist/node_modules/d3-scale/src/quantile.js.map +1 -0
- package/dist/node_modules/d3-scale/src/quantize.js +33 -0
- package/dist/node_modules/d3-scale/src/quantize.js.map +1 -0
- package/dist/node_modules/d3-scale/src/radial.js +39 -0
- package/dist/node_modules/d3-scale/src/radial.js.map +1 -0
- package/dist/node_modules/d3-scale/src/sequential.js +67 -0
- package/dist/node_modules/d3-scale/src/sequential.js.map +1 -0
- package/dist/node_modules/d3-scale/src/sequentialQuantile.js +30 -0
- package/dist/node_modules/d3-scale/src/sequentialQuantile.js.map +1 -0
- package/dist/node_modules/d3-scale/src/symlog.js +30 -0
- package/dist/node_modules/d3-scale/src/symlog.js.map +1 -0
- package/dist/node_modules/d3-scale/src/threshold.js +25 -0
- package/dist/node_modules/d3-scale/src/threshold.js.map +1 -0
- package/dist/node_modules/d3-scale/src/tickFormat.js +31 -0
- package/dist/node_modules/d3-scale/src/tickFormat.js.map +1 -0
- package/dist/node_modules/d3-scale/src/time.js +47 -0
- package/dist/node_modules/d3-scale/src/time.js.map +1 -0
- package/dist/node_modules/d3-scale/src/utcTime.js +19 -0
- package/dist/node_modules/d3-scale/src/utcTime.js.map +1 -0
- package/dist/node_modules/d3-shape/src/area.js +55 -0
- package/dist/node_modules/d3-shape/src/area.js.map +1 -0
- package/dist/node_modules/d3-shape/src/array.js +8 -0
- package/dist/node_modules/d3-shape/src/array.js.map +1 -0
- package/dist/node_modules/d3-shape/src/constant.js +10 -0
- package/dist/node_modules/d3-shape/src/constant.js.map +1 -0
- package/dist/node_modules/d3-shape/src/curve/basis.js +49 -0
- package/dist/node_modules/d3-shape/src/curve/basis.js.map +1 -0
- package/dist/node_modules/d3-shape/src/curve/basisClosed.js +50 -0
- package/dist/node_modules/d3-shape/src/curve/basisClosed.js.map +1 -0
- package/dist/node_modules/d3-shape/src/curve/basisOpen.js +46 -0
- package/dist/node_modules/d3-shape/src/curve/basisOpen.js.map +1 -0
- package/dist/node_modules/d3-shape/src/curve/bump.js +40 -0
- package/dist/node_modules/d3-shape/src/curve/bump.js.map +1 -0
- package/dist/node_modules/d3-shape/src/curve/linear.js +36 -0
- package/dist/node_modules/d3-shape/src/curve/linear.js.map +1 -0
- package/dist/node_modules/d3-shape/src/curve/linearClosed.js +25 -0
- package/dist/node_modules/d3-shape/src/curve/linearClosed.js.map +1 -0
- package/dist/node_modules/d3-shape/src/curve/monotone.js +94 -0
- package/dist/node_modules/d3-shape/src/curve/monotone.js.map +1 -0
- package/dist/node_modules/d3-shape/src/curve/natural.js +39 -0
- package/dist/node_modules/d3-shape/src/curve/natural.js.map +1 -0
- package/dist/node_modules/d3-shape/src/curve/step.js +47 -0
- package/dist/node_modules/d3-shape/src/curve/step.js.map +1 -0
- package/dist/node_modules/d3-shape/src/line.js +30 -0
- package/dist/node_modules/d3-shape/src/line.js.map +1 -0
- package/dist/node_modules/d3-shape/src/math.js +8 -0
- package/dist/node_modules/d3-shape/src/math.js.map +1 -0
- package/dist/node_modules/d3-shape/src/noop.js +6 -0
- package/dist/node_modules/d3-shape/src/noop.js.map +1 -0
- package/dist/node_modules/d3-shape/src/offset/expand.js +15 -0
- package/dist/node_modules/d3-shape/src/offset/expand.js.map +1 -0
- package/dist/node_modules/d3-shape/src/offset/none.js +8 -0
- package/dist/node_modules/d3-shape/src/offset/none.js.map +1 -0
- package/dist/node_modules/d3-shape/src/offset/silhouette.js +15 -0
- package/dist/node_modules/d3-shape/src/offset/silhouette.js.map +1 -0
- package/dist/node_modules/d3-shape/src/offset/wiggle.js +21 -0
- package/dist/node_modules/d3-shape/src/offset/wiggle.js.map +1 -0
- package/dist/node_modules/d3-shape/src/order/none.js +9 -0
- package/dist/node_modules/d3-shape/src/order/none.js.map +1 -0
- package/dist/node_modules/d3-shape/src/path.js +19 -0
- package/dist/node_modules/d3-shape/src/path.js.map +1 -0
- package/dist/node_modules/d3-shape/src/point.js +11 -0
- package/dist/node_modules/d3-shape/src/point.js.map +1 -0
- package/dist/node_modules/d3-shape/src/stack.js +34 -0
- package/dist/node_modules/d3-shape/src/stack.js.map +1 -0
- package/dist/node_modules/d3-shape/src/symbol/circle.js +10 -0
- package/dist/node_modules/d3-shape/src/symbol/circle.js.map +1 -0
- package/dist/node_modules/d3-shape/src/symbol/cross.js +10 -0
- package/dist/node_modules/d3-shape/src/symbol/cross.js.map +1 -0
- package/dist/node_modules/d3-shape/src/symbol/diamond.js +10 -0
- package/dist/node_modules/d3-shape/src/symbol/diamond.js.map +1 -0
- package/dist/node_modules/d3-shape/src/symbol/square.js +10 -0
- package/dist/node_modules/d3-shape/src/symbol/square.js.map +1 -0
- package/dist/node_modules/d3-shape/src/symbol/star.js +15 -0
- package/dist/node_modules/d3-shape/src/symbol/star.js.map +1 -0
- package/dist/node_modules/d3-shape/src/symbol/triangle.js +10 -0
- package/dist/node_modules/d3-shape/src/symbol/triangle.js.map +1 -0
- package/dist/node_modules/d3-shape/src/symbol/wye.js +10 -0
- package/dist/node_modules/d3-shape/src/symbol/wye.js.map +1 -0
- package/dist/node_modules/d3-shape/src/symbol.js +23 -0
- package/dist/node_modules/d3-shape/src/symbol.js.map +1 -0
- package/dist/node_modules/d3-time/src/day.js +21 -0
- package/dist/node_modules/d3-time/src/day.js.map +1 -0
- package/dist/node_modules/d3-time/src/duration.js +6 -0
- package/dist/node_modules/d3-time/src/duration.js.map +1 -0
- package/dist/node_modules/d3-time/src/hour.js +19 -0
- package/dist/node_modules/d3-time/src/hour.js.map +1 -0
- package/dist/node_modules/d3-time/src/interval.js +28 -0
- package/dist/node_modules/d3-time/src/interval.js.map +1 -0
- package/dist/node_modules/d3-time/src/millisecond.js +14 -0
- package/dist/node_modules/d3-time/src/millisecond.js.map +1 -0
- package/dist/node_modules/d3-time/src/minute.js +19 -0
- package/dist/node_modules/d3-time/src/minute.js.map +1 -0
- package/dist/node_modules/d3-time/src/month.js +18 -0
- package/dist/node_modules/d3-time/src/month.js.map +1 -0
- package/dist/node_modules/d3-time/src/second.js +13 -0
- package/dist/node_modules/d3-time/src/second.js.map +1 -0
- package/dist/node_modules/d3-time/src/ticks.js +125 -0
- package/dist/node_modules/d3-time/src/ticks.js.map +1 -0
- package/dist/node_modules/d3-time/src/week.js +25 -0
- package/dist/node_modules/d3-time/src/week.js.map +1 -0
- package/dist/node_modules/d3-time/src/year.js +26 -0
- package/dist/node_modules/d3-time/src/year.js.map +1 -0
- package/dist/node_modules/d3-time-format/src/defaultLocale.js +62 -0
- package/dist/node_modules/d3-time-format/src/defaultLocale.js.map +1 -0
- package/dist/node_modules/d3-time-format/src/locale.js +490 -0
- package/dist/node_modules/d3-time-format/src/locale.js.map +1 -0
- package/dist/node_modules/decimal.js-light/decimal.js +378 -0
- package/dist/node_modules/decimal.js-light/decimal.js.map +1 -0
- package/dist/node_modules/eventemitter3/index.js +95 -0
- package/dist/node_modules/eventemitter3/index.js.map +1 -0
- package/dist/node_modules/fast-equals/dist/es/index.js +267 -0
- package/dist/node_modules/fast-equals/dist/es/index.js.map +1 -0
- package/dist/node_modules/framer-motion/dist/es/components/AnimatePresence/use-presence.js +22 -0
- package/dist/node_modules/framer-motion/dist/es/components/AnimatePresence/use-presence.js.map +1 -0
- package/dist/node_modules/framer-motion/dist/es/context/LayoutGroupContext.js +8 -0
- package/dist/node_modules/framer-motion/dist/es/context/LayoutGroupContext.js.map +1 -0
- package/dist/node_modules/framer-motion/dist/es/context/LazyContext.js +8 -0
- package/dist/node_modules/framer-motion/dist/es/context/LazyContext.js.map +1 -0
- package/dist/node_modules/framer-motion/dist/es/context/MotionConfigContext.js +12 -0
- package/dist/node_modules/framer-motion/dist/es/context/MotionConfigContext.js.map +1 -0
- package/dist/node_modules/framer-motion/dist/es/context/MotionContext/create.js +19 -0
- package/dist/node_modules/framer-motion/dist/es/context/MotionContext/create.js.map +1 -0
- package/dist/node_modules/framer-motion/dist/es/context/MotionContext/index.js +8 -0
- package/dist/node_modules/framer-motion/dist/es/context/MotionContext/index.js.map +1 -0
- package/dist/node_modules/framer-motion/dist/es/context/MotionContext/utils.js +17 -0
- package/dist/node_modules/framer-motion/dist/es/context/MotionContext/utils.js.map +1 -0
- package/dist/node_modules/framer-motion/dist/es/context/PresenceContext.js +8 -0
- package/dist/node_modules/framer-motion/dist/es/context/PresenceContext.js.map +1 -0
- package/dist/node_modules/framer-motion/dist/es/context/SwitchLayoutGroupContext.js +8 -0
- package/dist/node_modules/framer-motion/dist/es/context/SwitchLayoutGroupContext.js.map +1 -0
- package/dist/node_modules/framer-motion/dist/es/events/add-pointer-event.js +10 -0
- package/dist/node_modules/framer-motion/dist/es/events/add-pointer-event.js.map +1 -0
- package/dist/node_modules/framer-motion/dist/es/events/event-info.js +13 -0
- package/dist/node_modules/framer-motion/dist/es/events/event-info.js.map +1 -0
- package/dist/node_modules/framer-motion/dist/es/gestures/drag/VisualElementDragControls.js +259 -0
- package/dist/node_modules/framer-motion/dist/es/gestures/drag/VisualElementDragControls.js.map +1 -0
- package/dist/node_modules/framer-motion/dist/es/gestures/drag/index.js +24 -0
- package/dist/node_modules/framer-motion/dist/es/gestures/drag/index.js.map +1 -0
- package/dist/node_modules/framer-motion/dist/es/gestures/drag/utils/constraints.js +61 -0
- package/dist/node_modules/framer-motion/dist/es/gestures/drag/utils/constraints.js.map +1 -0
- package/dist/node_modules/framer-motion/dist/es/gestures/focus.js +29 -0
- package/dist/node_modules/framer-motion/dist/es/gestures/focus.js.map +1 -0
- package/dist/node_modules/framer-motion/dist/es/gestures/hover.js +22 -0
- package/dist/node_modules/framer-motion/dist/es/gestures/hover.js.map +1 -0
- package/dist/node_modules/framer-motion/dist/es/gestures/pan/PanSession.js +135 -0
- package/dist/node_modules/framer-motion/dist/es/gestures/pan/PanSession.js.map +1 -0
- package/dist/node_modules/framer-motion/dist/es/gestures/pan/index.js +44 -0
- package/dist/node_modules/framer-motion/dist/es/gestures/pan/index.js.map +1 -0
- package/dist/node_modules/framer-motion/dist/es/gestures/press.js +28 -0
- package/dist/node_modules/framer-motion/dist/es/gestures/press.js.map +1 -0
- package/dist/node_modules/framer-motion/dist/es/motion/features/animation/exit.js +41 -0
- package/dist/node_modules/framer-motion/dist/es/motion/features/animation/exit.js.map +1 -0
- package/dist/node_modules/framer-motion/dist/es/motion/features/animation/index.js +27 -0
- package/dist/node_modules/framer-motion/dist/es/motion/features/animation/index.js.map +1 -0
- package/dist/node_modules/framer-motion/dist/es/motion/features/animations.js +11 -0
- package/dist/node_modules/framer-motion/dist/es/motion/features/animations.js.map +1 -0
- package/dist/node_modules/framer-motion/dist/es/motion/features/definitions.js +53 -0
- package/dist/node_modules/framer-motion/dist/es/motion/features/definitions.js.map +1 -0
- package/dist/node_modules/framer-motion/dist/es/motion/features/drag.js +17 -0
- package/dist/node_modules/framer-motion/dist/es/motion/features/drag.js.map +1 -0
- package/dist/node_modules/framer-motion/dist/es/motion/features/gestures.js +15 -0
- package/dist/node_modules/framer-motion/dist/es/motion/features/gestures.js.map +1 -0
- package/dist/node_modules/framer-motion/dist/es/motion/features/layout/MeasureLayout.js +63 -0
- package/dist/node_modules/framer-motion/dist/es/motion/features/layout/MeasureLayout.js.map +1 -0
- package/dist/node_modules/framer-motion/dist/es/motion/features/layout.js +11 -0
- package/dist/node_modules/framer-motion/dist/es/motion/features/layout.js.map +1 -0
- package/dist/node_modules/framer-motion/dist/es/motion/features/load-features.js +15 -0
- package/dist/node_modules/framer-motion/dist/es/motion/features/load-features.js.map +1 -0
- package/dist/node_modules/framer-motion/dist/es/motion/features/viewport/index.js +48 -0
- package/dist/node_modules/framer-motion/dist/es/motion/features/viewport/index.js.map +1 -0
- package/dist/node_modules/framer-motion/dist/es/motion/features/viewport/observers.js +26 -0
- package/dist/node_modules/framer-motion/dist/es/motion/features/viewport/observers.js.map +1 -0
- package/dist/node_modules/framer-motion/dist/es/motion/index.js +72 -0
- package/dist/node_modules/framer-motion/dist/es/motion/index.js.map +1 -0
- package/dist/node_modules/framer-motion/dist/es/motion/utils/symbol.js +6 -0
- package/dist/node_modules/framer-motion/dist/es/motion/utils/symbol.js.map +1 -0
- package/dist/node_modules/framer-motion/dist/es/motion/utils/use-motion-ref.js +24 -0
- package/dist/node_modules/framer-motion/dist/es/motion/utils/use-motion-ref.js.map +1 -0
- package/dist/node_modules/framer-motion/dist/es/motion/utils/use-visual-element.js +60 -0
- package/dist/node_modules/framer-motion/dist/es/motion/utils/use-visual-element.js.map +1 -0
- package/dist/node_modules/framer-motion/dist/es/motion/utils/use-visual-state.js +52 -0
- package/dist/node_modules/framer-motion/dist/es/motion/utils/use-visual-state.js.map +1 -0
- package/dist/node_modules/framer-motion/dist/es/motion/utils/valid-prop.js +9 -0
- package/dist/node_modules/framer-motion/dist/es/motion/utils/valid-prop.js.map +1 -0
- package/dist/node_modules/framer-motion/dist/es/render/components/create-proxy.js +12 -0
- package/dist/node_modules/framer-motion/dist/es/render/components/create-proxy.js.map +1 -0
- package/dist/node_modules/framer-motion/dist/es/render/components/motion/feature-bundle.js +15 -0
- package/dist/node_modules/framer-motion/dist/es/render/components/motion/feature-bundle.js.map +1 -0
- package/dist/node_modules/framer-motion/dist/es/render/components/motion/proxy.js +9 -0
- package/dist/node_modules/framer-motion/dist/es/render/components/motion/proxy.js.map +1 -0
- package/dist/node_modules/framer-motion/dist/es/render/dom/create-visual-element.js +10 -0
- package/dist/node_modules/framer-motion/dist/es/render/dom/create-visual-element.js.map +1 -0
- package/dist/node_modules/framer-motion/dist/es/render/dom/use-render.js +23 -0
- package/dist/node_modules/framer-motion/dist/es/render/dom/use-render.js.map +1 -0
- package/dist/node_modules/framer-motion/dist/es/render/dom/utils/filter-props.js +21 -0
- package/dist/node_modules/framer-motion/dist/es/render/dom/utils/filter-props.js.map +1 -0
- package/dist/node_modules/framer-motion/dist/es/render/dom/utils/is-svg-component.js +9 -0
- package/dist/node_modules/framer-motion/dist/es/render/dom/utils/is-svg-component.js.map +1 -0
- package/dist/node_modules/framer-motion/dist/es/render/html/use-html-visual-state.js +13 -0
- package/dist/node_modules/framer-motion/dist/es/render/html/use-html-visual-state.js.map +1 -0
- package/dist/node_modules/framer-motion/dist/es/render/html/use-props.js +28 -0
- package/dist/node_modules/framer-motion/dist/es/render/html/use-props.js.map +1 -0
- package/dist/node_modules/framer-motion/dist/es/render/html/utils/create-render-state.js +11 -0
- package/dist/node_modules/framer-motion/dist/es/render/html/utils/create-render-state.js.map +1 -0
- package/dist/node_modules/framer-motion/dist/es/render/svg/lowercase-elements.js +32 -0
- package/dist/node_modules/framer-motion/dist/es/render/svg/lowercase-elements.js.map +1 -0
- package/dist/node_modules/framer-motion/dist/es/render/svg/use-props.js +28 -0
- package/dist/node_modules/framer-motion/dist/es/render/svg/use-props.js.map +1 -0
- package/dist/node_modules/framer-motion/dist/es/render/svg/use-svg-visual-state.js +13 -0
- package/dist/node_modules/framer-motion/dist/es/render/svg/use-svg-visual-state.js.map +1 -0
- package/dist/node_modules/framer-motion/dist/es/render/svg/utils/create-render-state.js +10 -0
- package/dist/node_modules/framer-motion/dist/es/render/svg/utils/create-render-state.js.map +1 -0
- package/dist/node_modules/framer-motion/dist/es/utils/distance.js +10 -0
- package/dist/node_modules/framer-motion/dist/es/utils/distance.js.map +1 -0
- package/dist/node_modules/framer-motion/dist/es/utils/get-context-window.js +6 -0
- package/dist/node_modules/framer-motion/dist/es/utils/get-context-window.js.map +1 -0
- package/dist/node_modules/framer-motion/dist/es/utils/is-browser.js +6 -0
- package/dist/node_modules/framer-motion/dist/es/utils/is-browser.js.map +1 -0
- package/dist/node_modules/framer-motion/dist/es/utils/is-ref-object.js +8 -0
- package/dist/node_modules/framer-motion/dist/es/utils/is-ref-object.js.map +1 -0
- package/dist/node_modules/framer-motion/dist/es/utils/reduced-motion/use-reduced-motion.js +15 -0
- package/dist/node_modules/framer-motion/dist/es/utils/reduced-motion/use-reduced-motion.js.map +1 -0
- package/dist/node_modules/framer-motion/dist/es/utils/use-constant.js +11 -0
- package/dist/node_modules/framer-motion/dist/es/utils/use-constant.js.map +1 -0
- package/dist/node_modules/framer-motion/dist/es/utils/use-isomorphic-effect.js +9 -0
- package/dist/node_modules/framer-motion/dist/es/utils/use-isomorphic-effect.js.map +1 -0
- package/dist/node_modules/internmap/src/index.js +40 -0
- package/dist/node_modules/internmap/src/index.js.map +1 -0
- package/dist/node_modules/lodash/_DataView.js +12 -0
- package/dist/node_modules/lodash/_DataView.js.map +1 -0
- package/dist/node_modules/lodash/_Hash.js +23 -0
- package/dist/node_modules/lodash/_Hash.js.map +1 -0
- package/dist/node_modules/lodash/_ListCache.js +23 -0
- package/dist/node_modules/lodash/_ListCache.js.map +1 -0
- package/dist/node_modules/lodash/_Map.js +12 -0
- package/dist/node_modules/lodash/_Map.js.map +1 -0
- package/dist/node_modules/lodash/_MapCache.js +23 -0
- package/dist/node_modules/lodash/_MapCache.js.map +1 -0
- package/dist/node_modules/lodash/_Promise.js +12 -0
- package/dist/node_modules/lodash/_Promise.js.map +1 -0
- package/dist/node_modules/lodash/_Set.js +12 -0
- package/dist/node_modules/lodash/_Set.js.map +1 -0
- package/dist/node_modules/lodash/_SetCache.js +18 -0
- package/dist/node_modules/lodash/_SetCache.js.map +1 -0
- package/dist/node_modules/lodash/_Stack.js +20 -0
- package/dist/node_modules/lodash/_Stack.js.map +1 -0
- package/dist/node_modules/lodash/_Symbol.js +11 -0
- package/dist/node_modules/lodash/_Symbol.js.map +1 -0
- package/dist/node_modules/lodash/_Uint8Array.js +11 -0
- package/dist/node_modules/lodash/_Uint8Array.js.map +1 -0
- package/dist/node_modules/lodash/_WeakMap.js +12 -0
- package/dist/node_modules/lodash/_WeakMap.js.map +1 -0
- package/dist/node_modules/lodash/_apply.js +19 -0
- package/dist/node_modules/lodash/_apply.js.map +1 -0
- package/dist/node_modules/lodash/_arrayEvery.js +14 -0
- package/dist/node_modules/lodash/_arrayEvery.js.map +1 -0
- package/dist/node_modules/lodash/_arrayFilter.js +17 -0
- package/dist/node_modules/lodash/_arrayFilter.js.map +1 -0
- package/dist/node_modules/lodash/_arrayIncludes.js +15 -0
- package/dist/node_modules/lodash/_arrayIncludes.js.map +1 -0
- package/dist/node_modules/lodash/_arrayIncludesWith.js +14 -0
- package/dist/node_modules/lodash/_arrayIncludesWith.js.map +1 -0
- package/dist/node_modules/lodash/_arrayLikeKeys.js +22 -0
- package/dist/node_modules/lodash/_arrayLikeKeys.js.map +1 -0
- package/dist/node_modules/lodash/_arrayMap.js +14 -0
- package/dist/node_modules/lodash/_arrayMap.js.map +1 -0
- package/dist/node_modules/lodash/_arrayPush.js +14 -0
- package/dist/node_modules/lodash/_arrayPush.js.map +1 -0
- package/dist/node_modules/lodash/_arraySome.js +14 -0
- package/dist/node_modules/lodash/_arraySome.js.map +1 -0
- package/dist/node_modules/lodash/_asciiToArray.js +13 -0
- package/dist/node_modules/lodash/_asciiToArray.js.map +1 -0
- package/dist/node_modules/lodash/_assocIndexOf.js +16 -0
- package/dist/node_modules/lodash/_assocIndexOf.js.map +1 -0
- package/dist/node_modules/lodash/_baseAssignValue.js +20 -0
- package/dist/node_modules/lodash/_baseAssignValue.js.map +1 -0
- package/dist/node_modules/lodash/_baseEach.js +13 -0
- package/dist/node_modules/lodash/_baseEach.js.map +1 -0
- package/dist/node_modules/lodash/_baseEvery.js +18 -0
- package/dist/node_modules/lodash/_baseEvery.js.map +1 -0
- package/dist/node_modules/lodash/_baseExtremum.js +19 -0
- package/dist/node_modules/lodash/_baseExtremum.js.map +1 -0
- package/dist/node_modules/lodash/_baseFindIndex.js +14 -0
- package/dist/node_modules/lodash/_baseFindIndex.js.map +1 -0
- package/dist/node_modules/lodash/_baseFlatten.js +21 -0
- package/dist/node_modules/lodash/_baseFlatten.js.map +1 -0
- package/dist/node_modules/lodash/_baseFor.js +11 -0
- package/dist/node_modules/lodash/_baseFor.js.map +1 -0
- package/dist/node_modules/lodash/_baseForOwn.js +16 -0
- package/dist/node_modules/lodash/_baseForOwn.js.map +1 -0
- package/dist/node_modules/lodash/_baseGet.js +18 -0
- package/dist/node_modules/lodash/_baseGet.js.map +1 -0
- package/dist/node_modules/lodash/_baseGetAllKeys.js +17 -0
- package/dist/node_modules/lodash/_baseGetAllKeys.js.map +1 -0
- package/dist/node_modules/lodash/_baseGetTag.js +17 -0
- package/dist/node_modules/lodash/_baseGetTag.js.map +1 -0
- package/dist/node_modules/lodash/_baseGt.js +13 -0
- package/dist/node_modules/lodash/_baseGt.js.map +1 -0
- package/dist/node_modules/lodash/_baseHasIn.js +13 -0
- package/dist/node_modules/lodash/_baseHasIn.js.map +1 -0
- package/dist/node_modules/lodash/_baseIndexOf.js +17 -0
- package/dist/node_modules/lodash/_baseIndexOf.js.map +1 -0
- package/dist/node_modules/lodash/_baseIsArguments.js +16 -0
- package/dist/node_modules/lodash/_baseIsArguments.js.map +1 -0
- package/dist/node_modules/lodash/_baseIsEqual.js +16 -0
- package/dist/node_modules/lodash/_baseIsEqual.js.map +1 -0
- package/dist/node_modules/lodash/_baseIsEqualDeep.js +37 -0
- package/dist/node_modules/lodash/_baseIsEqualDeep.js.map +1 -0
- package/dist/node_modules/lodash/_baseIsMatch.js +33 -0
- package/dist/node_modules/lodash/_baseIsMatch.js.map +1 -0
- package/dist/node_modules/lodash/_baseIsNaN.js +13 -0
- package/dist/node_modules/lodash/_baseIsNaN.js.map +1 -0
- package/dist/node_modules/lodash/_baseIsNative.js +18 -0
- package/dist/node_modules/lodash/_baseIsNative.js.map +1 -0
- package/dist/node_modules/lodash/_baseIsTypedArray.js +18 -0
- package/dist/node_modules/lodash/_baseIsTypedArray.js.map +1 -0
- package/dist/node_modules/lodash/_baseIteratee.js +19 -0
- package/dist/node_modules/lodash/_baseIteratee.js.map +1 -0
- package/dist/node_modules/lodash/_baseKeys.js +19 -0
- package/dist/node_modules/lodash/_baseKeys.js.map +1 -0
- package/dist/node_modules/lodash/_baseLt.js +13 -0
- package/dist/node_modules/lodash/_baseLt.js.map +1 -0
- package/dist/node_modules/lodash/_baseMap.js +19 -0
- package/dist/node_modules/lodash/_baseMap.js.map +1 -0
- package/dist/node_modules/lodash/_baseMatches.js +20 -0
- package/dist/node_modules/lodash/_baseMatches.js.map +1 -0
- package/dist/node_modules/lodash/_baseMatchesProperty.js +24 -0
- package/dist/node_modules/lodash/_baseMatchesProperty.js.map +1 -0
- package/dist/node_modules/lodash/_baseOrderBy.js +39 -0
- package/dist/node_modules/lodash/_baseOrderBy.js.map +1 -0
- package/dist/node_modules/lodash/_baseProperty.js +15 -0
- package/dist/node_modules/lodash/_baseProperty.js.map +1 -0
- package/dist/node_modules/lodash/_basePropertyDeep.js +17 -0
- package/dist/node_modules/lodash/_basePropertyDeep.js.map +1 -0
- package/dist/node_modules/lodash/_baseRange.js +15 -0
- package/dist/node_modules/lodash/_baseRange.js.map +1 -0
- package/dist/node_modules/lodash/_baseRest.js +17 -0
- package/dist/node_modules/lodash/_baseRest.js.map +1 -0
- package/dist/node_modules/lodash/_baseSetToString.js +21 -0
- package/dist/node_modules/lodash/_baseSetToString.js.map +1 -0
- package/dist/node_modules/lodash/_baseSlice.js +16 -0
- package/dist/node_modules/lodash/_baseSlice.js.map +1 -0
- package/dist/node_modules/lodash/_baseSome.js +18 -0
- package/dist/node_modules/lodash/_baseSome.js.map +1 -0
- package/dist/node_modules/lodash/_baseSortBy.js +15 -0
- package/dist/node_modules/lodash/_baseSortBy.js.map +1 -0
- package/dist/node_modules/lodash/_baseTimes.js +14 -0
- package/dist/node_modules/lodash/_baseTimes.js.map +1 -0
- package/dist/node_modules/lodash/_baseToString.js +22 -0
- package/dist/node_modules/lodash/_baseToString.js.map +1 -0
- package/dist/node_modules/lodash/_baseTrim.js +15 -0
- package/dist/node_modules/lodash/_baseTrim.js.map +1 -0
- package/dist/node_modules/lodash/_baseUnary.js +15 -0
- package/dist/node_modules/lodash/_baseUnary.js.map +1 -0
- package/dist/node_modules/lodash/_baseUniq.js +34 -0
- package/dist/node_modules/lodash/_baseUniq.js.map +1 -0
- package/dist/node_modules/lodash/_cacheHas.js +13 -0
- package/dist/node_modules/lodash/_cacheHas.js.map +1 -0
- package/dist/node_modules/lodash/_castPath.js +18 -0
- package/dist/node_modules/lodash/_castPath.js.map +1 -0
- package/dist/node_modules/lodash/_castSlice.js +16 -0
- package/dist/node_modules/lodash/_castSlice.js.map +1 -0
- package/dist/node_modules/lodash/_compareAscending.js +20 -0
- package/dist/node_modules/lodash/_compareAscending.js.map +1 -0
- package/dist/node_modules/lodash/_compareMultiple.js +19 -0
- package/dist/node_modules/lodash/_compareMultiple.js.map +1 -0
- package/dist/node_modules/lodash/_coreJsData.js +11 -0
- package/dist/node_modules/lodash/_coreJsData.js.map +1 -0
- package/dist/node_modules/lodash/_createBaseEach.js +20 -0
- package/dist/node_modules/lodash/_createBaseEach.js.map +1 -0
- package/dist/node_modules/lodash/_createBaseFor.js +19 -0
- package/dist/node_modules/lodash/_createBaseFor.js.map +1 -0
- package/dist/node_modules/lodash/_createCaseFirst.js +22 -0
- package/dist/node_modules/lodash/_createCaseFirst.js.map +1 -0
- package/dist/node_modules/lodash/_createFind.js +27 -0
- package/dist/node_modules/lodash/_createFind.js.map +1 -0
- package/dist/node_modules/lodash/_createRange.js +19 -0
- package/dist/node_modules/lodash/_createRange.js.map +1 -0
- package/dist/node_modules/lodash/_createSet.js +16 -0
- package/dist/node_modules/lodash/_createSet.js.map +1 -0
- package/dist/node_modules/lodash/_defineProperty.js +17 -0
- package/dist/node_modules/lodash/_defineProperty.js.map +1 -0
- package/dist/node_modules/lodash/_equalArrays.js +42 -0
- package/dist/node_modules/lodash/_equalArrays.js.map +1 -0
- package/dist/node_modules/lodash/_equalByTag.js +42 -0
- package/dist/node_modules/lodash/_equalByTag.js.map +1 -0
- package/dist/node_modules/lodash/_equalObjects.js +39 -0
- package/dist/node_modules/lodash/_equalObjects.js.map +1 -0
- package/dist/node_modules/lodash/_freeGlobal.js +10 -0
- package/dist/node_modules/lodash/_freeGlobal.js.map +1 -0
- package/dist/node_modules/lodash/_getAllKeys.js +17 -0
- package/dist/node_modules/lodash/_getAllKeys.js.map +1 -0
- package/dist/node_modules/lodash/_getMapData.js +16 -0
- package/dist/node_modules/lodash/_getMapData.js.map +1 -0
- package/dist/node_modules/lodash/_getMatchData.js +24 -0
- package/dist/node_modules/lodash/_getMatchData.js.map +1 -0
- package/dist/node_modules/lodash/_getNative.js +17 -0
- package/dist/node_modules/lodash/_getNative.js.map +1 -0
- package/dist/node_modules/lodash/_getPrototype.js +11 -0
- package/dist/node_modules/lodash/_getPrototype.js.map +1 -0
- package/dist/node_modules/lodash/_getRawTag.js +21 -0
- package/dist/node_modules/lodash/_getRawTag.js.map +1 -0
- package/dist/node_modules/lodash/_getSymbols.js +17 -0
- package/dist/node_modules/lodash/_getSymbols.js.map +1 -0
- package/dist/node_modules/lodash/_getTag.js +28 -0
- package/dist/node_modules/lodash/_getTag.js.map +1 -0
- package/dist/node_modules/lodash/_getValue.js +13 -0
- package/dist/node_modules/lodash/_getValue.js.map +1 -0
- package/dist/node_modules/lodash/_hasPath.js +26 -0
- package/dist/node_modules/lodash/_hasPath.js.map +1 -0
- package/dist/node_modules/lodash/_hasUnicode.js +14 -0
- package/dist/node_modules/lodash/_hasUnicode.js.map +1 -0
- package/dist/node_modules/lodash/_hashClear.js +15 -0
- package/dist/node_modules/lodash/_hashClear.js.map +1 -0
- package/dist/node_modules/lodash/_hashDelete.js +14 -0
- package/dist/node_modules/lodash/_hashDelete.js.map +1 -0
- package/dist/node_modules/lodash/_hashGet.js +20 -0
- package/dist/node_modules/lodash/_hashGet.js.map +1 -0
- package/dist/node_modules/lodash/_hashHas.js +16 -0
- package/dist/node_modules/lodash/_hashHas.js.map +1 -0
- package/dist/node_modules/lodash/_hashSet.js +16 -0
- package/dist/node_modules/lodash/_hashSet.js.map +1 -0
- package/dist/node_modules/lodash/_isFlattenable.js +17 -0
- package/dist/node_modules/lodash/_isFlattenable.js.map +1 -0
- package/dist/node_modules/lodash/_isIndex.js +15 -0
- package/dist/node_modules/lodash/_isIndex.js.map +1 -0
- package/dist/node_modules/lodash/_isIterateeCall.js +20 -0
- package/dist/node_modules/lodash/_isIterateeCall.js.map +1 -0
- package/dist/node_modules/lodash/_isKey.js +18 -0
- package/dist/node_modules/lodash/_isKey.js.map +1 -0
- package/dist/node_modules/lodash/_isKeyable.js +14 -0
- package/dist/node_modules/lodash/_isKeyable.js.map +1 -0
- package/dist/node_modules/lodash/_isMasked.js +18 -0
- package/dist/node_modules/lodash/_isMasked.js.map +1 -0
- package/dist/node_modules/lodash/_isPrototype.js +15 -0
- package/dist/node_modules/lodash/_isPrototype.js.map +1 -0
- package/dist/node_modules/lodash/_isStrictComparable.js +15 -0
- package/dist/node_modules/lodash/_isStrictComparable.js.map +1 -0
- package/dist/node_modules/lodash/_listCacheClear.js +13 -0
- package/dist/node_modules/lodash/_listCacheClear.js.map +1 -0
- package/dist/node_modules/lodash/_listCacheDelete.js +16 -0
- package/dist/node_modules/lodash/_listCacheDelete.js.map +1 -0
- package/dist/node_modules/lodash/_listCacheGet.js +16 -0
- package/dist/node_modules/lodash/_listCacheGet.js.map +1 -0
- package/dist/node_modules/lodash/_listCacheHas.js +15 -0
- package/dist/node_modules/lodash/_listCacheHas.js.map +1 -0
- package/dist/node_modules/lodash/_listCacheSet.js +16 -0
- package/dist/node_modules/lodash/_listCacheSet.js.map +1 -0
- package/dist/node_modules/lodash/_mapCacheClear.js +21 -0
- package/dist/node_modules/lodash/_mapCacheClear.js.map +1 -0
- package/dist/node_modules/lodash/_mapCacheDelete.js +16 -0
- package/dist/node_modules/lodash/_mapCacheDelete.js.map +1 -0
- package/dist/node_modules/lodash/_mapCacheGet.js +15 -0
- package/dist/node_modules/lodash/_mapCacheGet.js.map +1 -0
- package/dist/node_modules/lodash/_mapCacheHas.js +15 -0
- package/dist/node_modules/lodash/_mapCacheHas.js.map +1 -0
- package/dist/node_modules/lodash/_mapCacheSet.js +16 -0
- package/dist/node_modules/lodash/_mapCacheSet.js.map +1 -0
- package/dist/node_modules/lodash/_mapToArray.js +16 -0
- package/dist/node_modules/lodash/_mapToArray.js.map +1 -0
- package/dist/node_modules/lodash/_matchesStrictComparable.js +15 -0
- package/dist/node_modules/lodash/_matchesStrictComparable.js.map +1 -0
- package/dist/node_modules/lodash/_memoizeCapped.js +18 -0
- package/dist/node_modules/lodash/_memoizeCapped.js.map +1 -0
- package/dist/node_modules/lodash/_nativeCreate.js +11 -0
- package/dist/node_modules/lodash/_nativeCreate.js.map +1 -0
- package/dist/node_modules/lodash/_nativeKeys.js +11 -0
- package/dist/node_modules/lodash/_nativeKeys.js.map +1 -0
- package/dist/node_modules/lodash/_nodeUtil.js +16 -0
- package/dist/node_modules/lodash/_nodeUtil.js.map +1 -0
- package/dist/node_modules/lodash/_objectToString.js +14 -0
- package/dist/node_modules/lodash/_objectToString.js.map +1 -0
- package/dist/node_modules/lodash/_overArg.js +15 -0
- package/dist/node_modules/lodash/_overArg.js.map +1 -0
- package/dist/node_modules/lodash/_overRest.js +20 -0
- package/dist/node_modules/lodash/_overRest.js.map +1 -0
- package/dist/node_modules/lodash/_root.js +12 -0
- package/dist/node_modules/lodash/_root.js.map +1 -0
- package/dist/node_modules/lodash/_setCacheAdd.js +14 -0
- package/dist/node_modules/lodash/_setCacheAdd.js.map +1 -0
- package/dist/node_modules/lodash/_setCacheHas.js +13 -0
- package/dist/node_modules/lodash/_setCacheHas.js.map +1 -0
- package/dist/node_modules/lodash/_setToArray.js +16 -0
- package/dist/node_modules/lodash/_setToArray.js.map +1 -0
- package/dist/node_modules/lodash/_setToString.js +13 -0
- package/dist/node_modules/lodash/_setToString.js.map +1 -0
- package/dist/node_modules/lodash/_shortOut.js +21 -0
- package/dist/node_modules/lodash/_shortOut.js.map +1 -0
- package/dist/node_modules/lodash/_stackClear.js +15 -0
- package/dist/node_modules/lodash/_stackClear.js.map +1 -0
- package/dist/node_modules/lodash/_stackDelete.js +14 -0
- package/dist/node_modules/lodash/_stackDelete.js.map +1 -0
- package/dist/node_modules/lodash/_stackGet.js +13 -0
- package/dist/node_modules/lodash/_stackGet.js.map +1 -0
- package/dist/node_modules/lodash/_stackHas.js +13 -0
- package/dist/node_modules/lodash/_stackHas.js.map +1 -0
- package/dist/node_modules/lodash/_stackSet.js +23 -0
- package/dist/node_modules/lodash/_stackSet.js.map +1 -0
- package/dist/node_modules/lodash/_strictIndexOf.js +14 -0
- package/dist/node_modules/lodash/_strictIndexOf.js.map +1 -0
- package/dist/node_modules/lodash/_stringToArray.js +17 -0
- package/dist/node_modules/lodash/_stringToArray.js.map +1 -0
- package/dist/node_modules/lodash/_stringToPath.js +17 -0
- package/dist/node_modules/lodash/_stringToPath.js.map +1 -0
- package/dist/node_modules/lodash/_toKey.js +17 -0
- package/dist/node_modules/lodash/_toKey.js.map +1 -0
- package/dist/node_modules/lodash/_toSource.js +22 -0
- package/dist/node_modules/lodash/_toSource.js.map +1 -0
- package/dist/node_modules/lodash/_trimmedEndIndex.js +15 -0
- package/dist/node_modules/lodash/_trimmedEndIndex.js.map +1 -0
- package/dist/node_modules/lodash/_unicodeToArray.js +24 -0
- package/dist/node_modules/lodash/_unicodeToArray.js.map +1 -0
- package/dist/node_modules/lodash/constant.js +15 -0
- package/dist/node_modules/lodash/constant.js.map +1 -0
- package/dist/node_modules/lodash/debounce.js +57 -0
- package/dist/node_modules/lodash/debounce.js.map +1 -0
- package/dist/node_modules/lodash/eq.js +13 -0
- package/dist/node_modules/lodash/eq.js.map +1 -0
- package/dist/node_modules/lodash/every.js +20 -0
- package/dist/node_modules/lodash/every.js.map +1 -0
- package/dist/node_modules/lodash/find.js +12 -0
- package/dist/node_modules/lodash/find.js.map +1 -0
- package/dist/node_modules/lodash/findIndex.js +20 -0
- package/dist/node_modules/lodash/findIndex.js.map +1 -0
- package/dist/node_modules/lodash/flatMap.js +16 -0
- package/dist/node_modules/lodash/flatMap.js.map +1 -0
- package/dist/node_modules/lodash/get.js +16 -0
- package/dist/node_modules/lodash/get.js.map +1 -0
- package/dist/node_modules/lodash/hasIn.js +16 -0
- package/dist/node_modules/lodash/hasIn.js.map +1 -0
- package/dist/node_modules/lodash/identity.js +13 -0
- package/dist/node_modules/lodash/identity.js.map +1 -0
- package/dist/node_modules/lodash/isArguments.js +17 -0
- package/dist/node_modules/lodash/isArguments.js.map +1 -0
- package/dist/node_modules/lodash/isArray.js +10 -0
- package/dist/node_modules/lodash/isArray.js.map +1 -0
- package/dist/node_modules/lodash/isArrayLike.js +16 -0
- package/dist/node_modules/lodash/isArrayLike.js.map +1 -0
- package/dist/node_modules/lodash/isBoolean.js +16 -0
- package/dist/node_modules/lodash/isBoolean.js.map +1 -0
- package/dist/node_modules/lodash/isBuffer.js +13 -0
- package/dist/node_modules/lodash/isBuffer.js.map +1 -0
- package/dist/node_modules/lodash/isEqual.js +15 -0
- package/dist/node_modules/lodash/isEqual.js.map +1 -0
- package/dist/node_modules/lodash/isFunction.js +18 -0
- package/dist/node_modules/lodash/isFunction.js.map +1 -0
- package/dist/node_modules/lodash/isLength.js +14 -0
- package/dist/node_modules/lodash/isLength.js.map +1 -0
- package/dist/node_modules/lodash/isNaN.js +15 -0
- package/dist/node_modules/lodash/isNaN.js.map +1 -0
- package/dist/node_modules/lodash/isNil.js +13 -0
- package/dist/node_modules/lodash/isNil.js.map +1 -0
- package/dist/node_modules/lodash/isNumber.js +16 -0
- package/dist/node_modules/lodash/isNumber.js.map +1 -0
- package/dist/node_modules/lodash/isObject.js +14 -0
- package/dist/node_modules/lodash/isObject.js.map +1 -0
- package/dist/node_modules/lodash/isObjectLike.js +13 -0
- package/dist/node_modules/lodash/isObjectLike.js.map +1 -0
- package/dist/node_modules/lodash/isPlainObject.js +21 -0
- package/dist/node_modules/lodash/isPlainObject.js.map +1 -0
- package/dist/node_modules/lodash/isString.js +17 -0
- package/dist/node_modules/lodash/isString.js.map +1 -0
- package/dist/node_modules/lodash/isSymbol.js +16 -0
- package/dist/node_modules/lodash/isSymbol.js.map +1 -0
- package/dist/node_modules/lodash/isTypedArray.js +14 -0
- package/dist/node_modules/lodash/isTypedArray.js.map +1 -0
- package/dist/node_modules/lodash/keys.js +17 -0
- package/dist/node_modules/lodash/keys.js.map +1 -0
- package/dist/node_modules/lodash/last.js +14 -0
- package/dist/node_modules/lodash/last.js.map +1 -0
- package/dist/node_modules/lodash/map.js +18 -0
- package/dist/node_modules/lodash/map.js.map +1 -0
- package/dist/node_modules/lodash/mapValues.js +20 -0
- package/dist/node_modules/lodash/mapValues.js.map +1 -0
- package/dist/node_modules/lodash/max.js +17 -0
- package/dist/node_modules/lodash/max.js.map +1 -0
- package/dist/node_modules/lodash/maxBy.js +17 -0
- package/dist/node_modules/lodash/maxBy.js.map +1 -0
- package/dist/node_modules/lodash/memoize.js +22 -0
- package/dist/node_modules/lodash/memoize.js.map +1 -0
- package/dist/node_modules/lodash/min.js +17 -0
- package/dist/node_modules/lodash/min.js.map +1 -0
- package/dist/node_modules/lodash/minBy.js +17 -0
- package/dist/node_modules/lodash/minBy.js.map +1 -0
- package/dist/node_modules/lodash/noop.js +11 -0
- package/dist/node_modules/lodash/noop.js.map +1 -0
- package/dist/node_modules/lodash/now.js +14 -0
- package/dist/node_modules/lodash/now.js.map +1 -0
- package/dist/node_modules/lodash/property.js +18 -0
- package/dist/node_modules/lodash/property.js.map +1 -0
- package/dist/node_modules/lodash/range.js +11 -0
- package/dist/node_modules/lodash/range.js.map +1 -0
- package/dist/node_modules/lodash/some.js +20 -0
- package/dist/node_modules/lodash/some.js.map +1 -0
- package/dist/node_modules/lodash/sortBy.js +19 -0
- package/dist/node_modules/lodash/sortBy.js.map +1 -0
- package/dist/node_modules/lodash/stubArray.js +13 -0
- package/dist/node_modules/lodash/stubArray.js.map +1 -0
- package/dist/node_modules/lodash/stubFalse.js +13 -0
- package/dist/node_modules/lodash/stubFalse.js.map +1 -0
- package/dist/node_modules/lodash/throttle.js +22 -0
- package/dist/node_modules/lodash/throttle.js.map +1 -0
- package/dist/node_modules/lodash/toFinite.js +15 -0
- package/dist/node_modules/lodash/toFinite.js.map +1 -0
- package/dist/node_modules/lodash/toInteger.js +16 -0
- package/dist/node_modules/lodash/toInteger.js.map +1 -0
- package/dist/node_modules/lodash/toNumber.js +26 -0
- package/dist/node_modules/lodash/toNumber.js.map +1 -0
- package/dist/node_modules/lodash/toString.js +15 -0
- package/dist/node_modules/lodash/toString.js.map +1 -0
- package/dist/node_modules/lodash/uniqBy.js +16 -0
- package/dist/node_modules/lodash/uniqBy.js.map +1 -0
- package/dist/node_modules/lodash/upperFirst.js +11 -0
- package/dist/node_modules/lodash/upperFirst.js.map +1 -0
- package/dist/node_modules/motion-dom/dist/es/animation/AsyncMotionValueAnimation.js +109 -0
- package/dist/node_modules/motion-dom/dist/es/animation/AsyncMotionValueAnimation.js.map +1 -0
- package/dist/node_modules/motion-dom/dist/es/animation/JSAnimation.js +132 -0
- package/dist/node_modules/motion-dom/dist/es/animation/JSAnimation.js.map +1 -0
- package/dist/node_modules/motion-dom/dist/es/animation/NativeAnimation.js +86 -0
- package/dist/node_modules/motion-dom/dist/es/animation/NativeAnimation.js.map +1 -0
- package/dist/node_modules/motion-dom/dist/es/animation/NativeAnimationExtended.js +30 -0
- package/dist/node_modules/motion-dom/dist/es/animation/NativeAnimationExtended.js.map +1 -0
- package/dist/node_modules/motion-dom/dist/es/animation/animate/single-value.js +12 -0
- package/dist/node_modules/motion-dom/dist/es/animation/animate/single-value.js.map +1 -0
- package/dist/node_modules/motion-dom/dist/es/animation/drivers/frame.js +15 -0
- package/dist/node_modules/motion-dom/dist/es/animation/drivers/frame.js.map +1 -0
- package/dist/node_modules/motion-dom/dist/es/animation/generators/inertia.js +34 -0
- package/dist/node_modules/motion-dom/dist/es/animation/generators/inertia.js.map +1 -0
- package/dist/node_modules/motion-dom/dist/es/animation/generators/keyframes.js +24 -0
- package/dist/node_modules/motion-dom/dist/es/animation/generators/keyframes.js.map +1 -0
- package/dist/node_modules/motion-dom/dist/es/animation/generators/spring.js +168 -0
- package/dist/node_modules/motion-dom/dist/es/animation/generators/spring.js.map +1 -0
- package/dist/node_modules/motion-dom/dist/es/animation/generators/utils/calc-duration.js +11 -0
- package/dist/node_modules/motion-dom/dist/es/animation/generators/utils/calc-duration.js.map +1 -0
- package/dist/node_modules/motion-dom/dist/es/animation/generators/utils/create-generator-easing.js +18 -0
- package/dist/node_modules/motion-dom/dist/es/animation/generators/utils/create-generator-easing.js.map +1 -0
- package/dist/node_modules/motion-dom/dist/es/animation/generators/utils/is-generator.js +8 -0
- package/dist/node_modules/motion-dom/dist/es/animation/generators/utils/is-generator.js.map +1 -0
- package/dist/node_modules/motion-dom/dist/es/animation/generators/utils/velocity.js +11 -0
- package/dist/node_modules/motion-dom/dist/es/animation/generators/utils/velocity.js.map +1 -0
- package/dist/node_modules/motion-dom/dist/es/animation/interfaces/motion-value.js +47 -0
- package/dist/node_modules/motion-dom/dist/es/animation/interfaces/motion-value.js.map +1 -0
- package/dist/node_modules/motion-dom/dist/es/animation/interfaces/visual-element-target.js +56 -0
- package/dist/node_modules/motion-dom/dist/es/animation/interfaces/visual-element-target.js.map +1 -0
- package/dist/node_modules/motion-dom/dist/es/animation/interfaces/visual-element-variant.js +28 -0
- package/dist/node_modules/motion-dom/dist/es/animation/interfaces/visual-element-variant.js.map +1 -0
- package/dist/node_modules/motion-dom/dist/es/animation/interfaces/visual-element.js +23 -0
- package/dist/node_modules/motion-dom/dist/es/animation/interfaces/visual-element.js.map +1 -0
- package/dist/node_modules/motion-dom/dist/es/animation/keyframes/DOMKeyframesResolver.js +63 -0
- package/dist/node_modules/motion-dom/dist/es/animation/keyframes/DOMKeyframesResolver.js.map +1 -0
- package/dist/node_modules/motion-dom/dist/es/animation/keyframes/KeyframesResolver.js +69 -0
- package/dist/node_modules/motion-dom/dist/es/animation/keyframes/KeyframesResolver.js.map +1 -0
- package/dist/node_modules/motion-dom/dist/es/animation/keyframes/get-final.js +10 -0
- package/dist/node_modules/motion-dom/dist/es/animation/keyframes/get-final.js.map +1 -0
- package/dist/node_modules/motion-dom/dist/es/animation/keyframes/offsets/default.js +10 -0
- package/dist/node_modules/motion-dom/dist/es/animation/keyframes/offsets/default.js.map +1 -0
- package/dist/node_modules/motion-dom/dist/es/animation/keyframes/offsets/fill.js +14 -0
- package/dist/node_modules/motion-dom/dist/es/animation/keyframes/offsets/fill.js.map +1 -0
- package/dist/node_modules/motion-dom/dist/es/animation/keyframes/offsets/time.js +8 -0
- package/dist/node_modules/motion-dom/dist/es/animation/keyframes/offsets/time.js.map +1 -0
- package/dist/node_modules/motion-dom/dist/es/animation/keyframes/utils/fill-wildcards.js +8 -0
- package/dist/node_modules/motion-dom/dist/es/animation/keyframes/utils/fill-wildcards.js.map +1 -0
- package/dist/node_modules/motion-dom/dist/es/animation/keyframes/utils/is-none.js +9 -0
- package/dist/node_modules/motion-dom/dist/es/animation/keyframes/utils/is-none.js.map +1 -0
- package/dist/node_modules/motion-dom/dist/es/animation/keyframes/utils/make-none-animatable.js +20 -0
- package/dist/node_modules/motion-dom/dist/es/animation/keyframes/utils/make-none-animatable.js.map +1 -0
- package/dist/node_modules/motion-dom/dist/es/animation/keyframes/utils/unit-conversion.js +38 -0
- package/dist/node_modules/motion-dom/dist/es/animation/keyframes/utils/unit-conversion.js.map +1 -0
- package/dist/node_modules/motion-dom/dist/es/animation/optimized-appear/data-id.js +6 -0
- package/dist/node_modules/motion-dom/dist/es/animation/optimized-appear/data-id.js.map +1 -0
- package/dist/node_modules/motion-dom/dist/es/animation/optimized-appear/get-appear-id.js +9 -0
- package/dist/node_modules/motion-dom/dist/es/animation/optimized-appear/get-appear-id.js.map +1 -0
- package/dist/node_modules/motion-dom/dist/es/animation/utils/WithPromise.js +24 -0
- package/dist/node_modules/motion-dom/dist/es/animation/utils/WithPromise.js.map +1 -0
- package/dist/node_modules/motion-dom/dist/es/animation/utils/calc-child-stagger.js +9 -0
- package/dist/node_modules/motion-dom/dist/es/animation/utils/calc-child-stagger.js.map +1 -0
- package/dist/node_modules/motion-dom/dist/es/animation/utils/can-animate.js +20 -0
- package/dist/node_modules/motion-dom/dist/es/animation/utils/can-animate.js.map +1 -0
- package/dist/node_modules/motion-dom/dist/es/animation/utils/css-variables-conversion.js +27 -0
- package/dist/node_modules/motion-dom/dist/es/animation/utils/css-variables-conversion.js.map +1 -0
- package/dist/node_modules/motion-dom/dist/es/animation/utils/default-transitions.js +29 -0
- package/dist/node_modules/motion-dom/dist/es/animation/utils/default-transitions.js.map +1 -0
- package/dist/node_modules/motion-dom/dist/es/animation/utils/get-value-transition.js +10 -0
- package/dist/node_modules/motion-dom/dist/es/animation/utils/get-value-transition.js.map +1 -0
- package/dist/node_modules/motion-dom/dist/es/animation/utils/is-animatable.js +7 -0
- package/dist/node_modules/motion-dom/dist/es/animation/utils/is-animatable.js.map +1 -0
- package/dist/node_modules/motion-dom/dist/es/animation/utils/is-css-variable.js +9 -0
- package/dist/node_modules/motion-dom/dist/es/animation/utils/is-css-variable.js.map +1 -0
- package/dist/node_modules/motion-dom/dist/es/animation/utils/is-transition-defined.js +21 -0
- package/dist/node_modules/motion-dom/dist/es/animation/utils/is-transition-defined.js.map +1 -0
- package/dist/node_modules/motion-dom/dist/es/animation/utils/make-animation-instant.js +8 -0
- package/dist/node_modules/motion-dom/dist/es/animation/utils/make-animation-instant.js.map +1 -0
- package/dist/node_modules/motion-dom/dist/es/animation/utils/replace-transition-type.js +18 -0
- package/dist/node_modules/motion-dom/dist/es/animation/utils/replace-transition-type.js.map +1 -0
- package/dist/node_modules/motion-dom/dist/es/animation/utils/resolve-transition.js +15 -0
- package/dist/node_modules/motion-dom/dist/es/animation/utils/resolve-transition.js.map +1 -0
- package/dist/node_modules/motion-dom/dist/es/animation/waapi/easing/cubic-bezier.js +6 -0
- package/dist/node_modules/motion-dom/dist/es/animation/waapi/easing/cubic-bezier.js.map +1 -0
- package/dist/node_modules/motion-dom/dist/es/animation/waapi/easing/map-easing.js +13 -0
- package/dist/node_modules/motion-dom/dist/es/animation/waapi/easing/map-easing.js.map +1 -0
- package/dist/node_modules/motion-dom/dist/es/animation/waapi/easing/supported.js +37 -0
- package/dist/node_modules/motion-dom/dist/es/animation/waapi/easing/supported.js.map +1 -0
- package/dist/node_modules/motion-dom/dist/es/animation/waapi/start-waapi-animation.js +27 -0
- package/dist/node_modules/motion-dom/dist/es/animation/waapi/start-waapi-animation.js.map +1 -0
- package/dist/node_modules/motion-dom/dist/es/animation/waapi/supports/waapi.js +26 -0
- package/dist/node_modules/motion-dom/dist/es/animation/waapi/supports/waapi.js.map +1 -0
- package/dist/node_modules/motion-dom/dist/es/animation/waapi/utils/accelerated-values.js +11 -0
- package/dist/node_modules/motion-dom/dist/es/animation/waapi/utils/accelerated-values.js.map +1 -0
- package/dist/node_modules/motion-dom/dist/es/animation/waapi/utils/apply-generator.js +10 -0
- package/dist/node_modules/motion-dom/dist/es/animation/waapi/utils/apply-generator.js.map +1 -0
- package/dist/node_modules/motion-dom/dist/es/animation/waapi/utils/is-browser-color.js +10 -0
- package/dist/node_modules/motion-dom/dist/es/animation/waapi/utils/is-browser-color.js.map +1 -0
- package/dist/node_modules/motion-dom/dist/es/animation/waapi/utils/linear.js +10 -0
- package/dist/node_modules/motion-dom/dist/es/animation/waapi/utils/linear.js.map +1 -0
- package/dist/node_modules/motion-dom/dist/es/animation/waapi/utils/unsupported-easing.js +19 -0
- package/dist/node_modules/motion-dom/dist/es/animation/waapi/utils/unsupported-easing.js.map +1 -0
- package/dist/node_modules/motion-dom/dist/es/events/add-dom-event.js +8 -0
- package/dist/node_modules/motion-dom/dist/es/events/add-dom-event.js.map +1 -0
- package/dist/node_modules/motion-dom/dist/es/frameloop/batcher.js +32 -0
- package/dist/node_modules/motion-dom/dist/es/frameloop/batcher.js.map +1 -0
- package/dist/node_modules/motion-dom/dist/es/frameloop/frame.js +8 -0
- package/dist/node_modules/motion-dom/dist/es/frameloop/frame.js.map +1 -0
- package/dist/node_modules/motion-dom/dist/es/frameloop/microtask.js +7 -0
- package/dist/node_modules/motion-dom/dist/es/frameloop/microtask.js.map +1 -0
- package/dist/node_modules/motion-dom/dist/es/frameloop/order.js +15 -0
- package/dist/node_modules/motion-dom/dist/es/frameloop/order.js.map +1 -0
- package/dist/node_modules/motion-dom/dist/es/frameloop/render-step.js +35 -0
- package/dist/node_modules/motion-dom/dist/es/frameloop/render-step.js.map +1 -0
- package/dist/node_modules/motion-dom/dist/es/frameloop/sync-time.js +17 -0
- package/dist/node_modules/motion-dom/dist/es/frameloop/sync-time.js.map +1 -0
- package/dist/node_modules/motion-dom/dist/es/gestures/drag/state/is-active.js +12 -0
- package/dist/node_modules/motion-dom/dist/es/gestures/drag/state/is-active.js.map +1 -0
- package/dist/node_modules/motion-dom/dist/es/gestures/drag/state/set-active.js +13 -0
- package/dist/node_modules/motion-dom/dist/es/gestures/drag/state/set-active.js.map +1 -0
- package/dist/node_modules/motion-dom/dist/es/gestures/hover.js +38 -0
- package/dist/node_modules/motion-dom/dist/es/gestures/hover.js.map +1 -0
- package/dist/node_modules/motion-dom/dist/es/gestures/press/index.js +35 -0
- package/dist/node_modules/motion-dom/dist/es/gestures/press/index.js.map +1 -0
- package/dist/node_modules/motion-dom/dist/es/gestures/press/utils/is-keyboard-accessible.js +23 -0
- package/dist/node_modules/motion-dom/dist/es/gestures/press/utils/is-keyboard-accessible.js.map +1 -0
- package/dist/node_modules/motion-dom/dist/es/gestures/press/utils/keyboard.js +30 -0
- package/dist/node_modules/motion-dom/dist/es/gestures/press/utils/keyboard.js.map +1 -0
- package/dist/node_modules/motion-dom/dist/es/gestures/press/utils/state.js +6 -0
- package/dist/node_modules/motion-dom/dist/es/gestures/press/utils/state.js.map +1 -0
- package/dist/node_modules/motion-dom/dist/es/gestures/utils/is-node-or-child.js +6 -0
- package/dist/node_modules/motion-dom/dist/es/gestures/utils/is-node-or-child.js.map +1 -0
- package/dist/node_modules/motion-dom/dist/es/gestures/utils/is-primary-pointer.js +6 -0
- package/dist/node_modules/motion-dom/dist/es/gestures/utils/is-primary-pointer.js.map +1 -0
- package/dist/node_modules/motion-dom/dist/es/gestures/utils/setup.js +18 -0
- package/dist/node_modules/motion-dom/dist/es/gestures/utils/setup.js.map +1 -0
- package/dist/node_modules/motion-dom/dist/es/projection/animation/mix-values.js +31 -0
- package/dist/node_modules/motion-dom/dist/es/projection/animation/mix-values.js.map +1 -0
- package/dist/node_modules/motion-dom/dist/es/projection/geometry/conversion.js +41 -0
- package/dist/node_modules/motion-dom/dist/es/projection/geometry/conversion.js.map +1 -0
- package/dist/node_modules/motion-dom/dist/es/projection/geometry/copy.js +14 -0
- package/dist/node_modules/motion-dom/dist/es/projection/geometry/copy.js.map +1 -0
- package/dist/node_modules/motion-dom/dist/es/projection/geometry/delta-apply.js +45 -0
- package/dist/node_modules/motion-dom/dist/es/projection/geometry/delta-apply.js.map +1 -0
- package/dist/node_modules/motion-dom/dist/es/projection/geometry/delta-calc.js +32 -0
- package/dist/node_modules/motion-dom/dist/es/projection/geometry/delta-calc.js.map +1 -0
- package/dist/node_modules/motion-dom/dist/es/projection/geometry/delta-remove.js +31 -0
- package/dist/node_modules/motion-dom/dist/es/projection/geometry/delta-remove.js.map +1 -0
- package/dist/node_modules/motion-dom/dist/es/projection/geometry/models.js +20 -0
- package/dist/node_modules/motion-dom/dist/es/projection/geometry/models.js.map +1 -0
- package/dist/node_modules/motion-dom/dist/es/projection/geometry/utils.js +30 -0
- package/dist/node_modules/motion-dom/dist/es/projection/geometry/utils.js.map +1 -0
- package/dist/node_modules/motion-dom/dist/es/projection/node/DocumentProjectionNode.js +15 -0
- package/dist/node_modules/motion-dom/dist/es/projection/node/DocumentProjectionNode.js.map +1 -0
- package/dist/node_modules/motion-dom/dist/es/projection/node/HTMLProjectionNode.js +24 -0
- package/dist/node_modules/motion-dom/dist/es/projection/node/HTMLProjectionNode.js.map +1 -0
- package/dist/node_modules/motion-dom/dist/es/projection/node/create-projection-node.js +590 -0
- package/dist/node_modules/motion-dom/dist/es/projection/node/create-projection-node.js.map +1 -0
- package/dist/node_modules/motion-dom/dist/es/projection/node/state.js +9 -0
- package/dist/node_modules/motion-dom/dist/es/projection/node/state.js.map +1 -0
- package/dist/node_modules/motion-dom/dist/es/projection/shared/stack.js +53 -0
- package/dist/node_modules/motion-dom/dist/es/projection/shared/stack.js.map +1 -0
- package/dist/node_modules/motion-dom/dist/es/projection/styles/scale-border-radius.js +15 -0
- package/dist/node_modules/motion-dom/dist/es/projection/styles/scale-border-radius.js.map +1 -0
- package/dist/node_modules/motion-dom/dist/es/projection/styles/scale-box-shadow.js +15 -0
- package/dist/node_modules/motion-dom/dist/es/projection/styles/scale-box-shadow.js.map +1 -0
- package/dist/node_modules/motion-dom/dist/es/projection/styles/scale-correction.js +23 -0
- package/dist/node_modules/motion-dom/dist/es/projection/styles/scale-correction.js.map +1 -0
- package/dist/node_modules/motion-dom/dist/es/projection/styles/transform.js +14 -0
- package/dist/node_modules/motion-dom/dist/es/projection/styles/transform.js.map +1 -0
- package/dist/node_modules/motion-dom/dist/es/projection/utils/compare-by-depth.js +6 -0
- package/dist/node_modules/motion-dom/dist/es/projection/utils/compare-by-depth.js.map +1 -0
- package/dist/node_modules/motion-dom/dist/es/projection/utils/each-axis.js +8 -0
- package/dist/node_modules/motion-dom/dist/es/projection/utils/each-axis.js.map +1 -0
- package/dist/node_modules/motion-dom/dist/es/projection/utils/flat-tree.js +21 -0
- package/dist/node_modules/motion-dom/dist/es/projection/utils/flat-tree.js.map +1 -0
- package/dist/node_modules/motion-dom/dist/es/projection/utils/has-transform.js +20 -0
- package/dist/node_modules/motion-dom/dist/es/projection/utils/has-transform.js.map +1 -0
- package/dist/node_modules/motion-dom/dist/es/projection/utils/measure.js +14 -0
- package/dist/node_modules/motion-dom/dist/es/projection/utils/measure.js.map +1 -0
- package/dist/node_modules/motion-dom/dist/es/render/Feature.js +11 -0
- package/dist/node_modules/motion-dom/dist/es/render/Feature.js.map +1 -0
- package/dist/node_modules/motion-dom/dist/es/render/VisualElement.js +206 -0
- package/dist/node_modules/motion-dom/dist/es/render/VisualElement.js.map +1 -0
- package/dist/node_modules/motion-dom/dist/es/render/dom/DOMVisualElement.js +30 -0
- package/dist/node_modules/motion-dom/dist/es/render/dom/DOMVisualElement.js.map +1 -0
- package/dist/node_modules/motion-dom/dist/es/render/dom/is-css-var.js +6 -0
- package/dist/node_modules/motion-dom/dist/es/render/dom/is-css-var.js.map +1 -0
- package/dist/node_modules/motion-dom/dist/es/render/dom/parse-transform.js +58 -0
- package/dist/node_modules/motion-dom/dist/es/render/dom/parse-transform.js.map +1 -0
- package/dist/node_modules/motion-dom/dist/es/render/dom/style-set.js +9 -0
- package/dist/node_modules/motion-dom/dist/es/render/dom/style-set.js.map +1 -0
- package/dist/node_modules/motion-dom/dist/es/render/dom/utils/camel-to-dash.js +8 -0
- package/dist/node_modules/motion-dom/dist/es/render/dom/utils/camel-to-dash.js.map +1 -0
- package/dist/node_modules/motion-dom/dist/es/render/html/HTMLVisualElement.js +37 -0
- package/dist/node_modules/motion-dom/dist/es/render/html/HTMLVisualElement.js.map +1 -0
- package/dist/node_modules/motion-dom/dist/es/render/html/utils/build-styles.js +30 -0
- package/dist/node_modules/motion-dom/dist/es/render/html/utils/build-styles.js.map +1 -0
- package/dist/node_modules/motion-dom/dist/es/render/html/utils/build-transform.js +37 -0
- package/dist/node_modules/motion-dom/dist/es/render/html/utils/build-transform.js.map +1 -0
- package/dist/node_modules/motion-dom/dist/es/render/html/utils/render.js +10 -0
- package/dist/node_modules/motion-dom/dist/es/render/html/utils/render.js.map +1 -0
- package/dist/node_modules/motion-dom/dist/es/render/html/utils/scrape-motion-values.js +13 -0
- package/dist/node_modules/motion-dom/dist/es/render/html/utils/scrape-motion-values.js.map +1 -0
- package/dist/node_modules/motion-dom/dist/es/render/store.js +6 -0
- package/dist/node_modules/motion-dom/dist/es/render/store.js.map +1 -0
- package/dist/node_modules/motion-dom/dist/es/render/svg/SVGVisualElement.js +42 -0
- package/dist/node_modules/motion-dom/dist/es/render/svg/SVGVisualElement.js.map +1 -0
- package/dist/node_modules/motion-dom/dist/es/render/svg/utils/build-attrs.js +24 -0
- package/dist/node_modules/motion-dom/dist/es/render/svg/utils/build-attrs.js.map +1 -0
- package/dist/node_modules/motion-dom/dist/es/render/svg/utils/camel-case-attrs.js +30 -0
- package/dist/node_modules/motion-dom/dist/es/render/svg/utils/camel-case-attrs.js.map +1 -0
- package/dist/node_modules/motion-dom/dist/es/render/svg/utils/is-svg-tag.js +6 -0
- package/dist/node_modules/motion-dom/dist/es/render/svg/utils/is-svg-tag.js.map +1 -0
- package/dist/node_modules/motion-dom/dist/es/render/svg/utils/path.js +17 -0
- package/dist/node_modules/motion-dom/dist/es/render/svg/utils/path.js.map +1 -0
- package/dist/node_modules/motion-dom/dist/es/render/svg/utils/render.js +12 -0
- package/dist/node_modules/motion-dom/dist/es/render/svg/utils/render.js.map +1 -0
- package/dist/node_modules/motion-dom/dist/es/render/svg/utils/scrape-motion-values.js +16 -0
- package/dist/node_modules/motion-dom/dist/es/render/svg/utils/scrape-motion-values.js.map +1 -0
- package/dist/node_modules/motion-dom/dist/es/render/utils/animation-state.js +137 -0
- package/dist/node_modules/motion-dom/dist/es/render/utils/animation-state.js.map +1 -0
- package/dist/node_modules/motion-dom/dist/es/render/utils/get-variant-context.js +21 -0
- package/dist/node_modules/motion-dom/dist/es/render/utils/get-variant-context.js.map +1 -0
- package/dist/node_modules/motion-dom/dist/es/render/utils/is-animation-controls.js +8 -0
- package/dist/node_modules/motion-dom/dist/es/render/utils/is-animation-controls.js.map +1 -0
- package/dist/node_modules/motion-dom/dist/es/render/utils/is-controlling-variants.js +14 -0
- package/dist/node_modules/motion-dom/dist/es/render/utils/is-controlling-variants.js.map +1 -0
- package/dist/node_modules/motion-dom/dist/es/render/utils/is-forced-motion-value.js +10 -0
- package/dist/node_modules/motion-dom/dist/es/render/utils/is-forced-motion-value.js.map +1 -0
- package/dist/node_modules/motion-dom/dist/es/render/utils/is-keyframes-target.js +6 -0
- package/dist/node_modules/motion-dom/dist/es/render/utils/is-keyframes-target.js.map +1 -0
- package/dist/node_modules/motion-dom/dist/es/render/utils/is-variant-label.js +8 -0
- package/dist/node_modules/motion-dom/dist/es/render/utils/is-variant-label.js.map +1 -0
- package/dist/node_modules/motion-dom/dist/es/render/utils/keys-position.js +15 -0
- package/dist/node_modules/motion-dom/dist/es/render/utils/keys-position.js.map +1 -0
- package/dist/node_modules/motion-dom/dist/es/render/utils/keys-transform.js +24 -0
- package/dist/node_modules/motion-dom/dist/es/render/utils/keys-transform.js.map +1 -0
- package/dist/node_modules/motion-dom/dist/es/render/utils/motion-values.js +23 -0
- package/dist/node_modules/motion-dom/dist/es/render/utils/motion-values.js.map +1 -0
- package/dist/node_modules/motion-dom/dist/es/render/utils/reduced-motion/index.js +13 -0
- package/dist/node_modules/motion-dom/dist/es/render/utils/reduced-motion/index.js.map +1 -0
- package/dist/node_modules/motion-dom/dist/es/render/utils/reduced-motion/state.js +6 -0
- package/dist/node_modules/motion-dom/dist/es/render/utils/reduced-motion/state.js.map +1 -0
- package/dist/node_modules/motion-dom/dist/es/render/utils/resolve-dynamic-variants.js +10 -0
- package/dist/node_modules/motion-dom/dist/es/render/utils/resolve-dynamic-variants.js.map +1 -0
- package/dist/node_modules/motion-dom/dist/es/render/utils/resolve-variants.js +22 -0
- package/dist/node_modules/motion-dom/dist/es/render/utils/resolve-variants.js.map +1 -0
- package/dist/node_modules/motion-dom/dist/es/render/utils/setters.js +22 -0
- package/dist/node_modules/motion-dom/dist/es/render/utils/setters.js.map +1 -0
- package/dist/node_modules/motion-dom/dist/es/render/utils/shallow-compare.js +12 -0
- package/dist/node_modules/motion-dom/dist/es/render/utils/shallow-compare.js.map +1 -0
- package/dist/node_modules/motion-dom/dist/es/render/utils/variant-props.js +14 -0
- package/dist/node_modules/motion-dom/dist/es/render/utils/variant-props.js.map +1 -0
- package/dist/node_modules/motion-dom/dist/es/resize/handle-element.js +39 -0
- package/dist/node_modules/motion-dom/dist/es/resize/handle-element.js.map +1 -0
- package/dist/node_modules/motion-dom/dist/es/resize/handle-window.js +24 -0
- package/dist/node_modules/motion-dom/dist/es/resize/handle-window.js.map +1 -0
- package/dist/node_modules/motion-dom/dist/es/resize/index.js +10 -0
- package/dist/node_modules/motion-dom/dist/es/resize/index.js.map +1 -0
- package/dist/node_modules/motion-dom/dist/es/stats/animation-count.js +10 -0
- package/dist/node_modules/motion-dom/dist/es/stats/animation-count.js.map +1 -0
- package/dist/node_modules/motion-dom/dist/es/stats/buffer.js +9 -0
- package/dist/node_modules/motion-dom/dist/es/stats/buffer.js.map +1 -0
- package/dist/node_modules/motion-dom/dist/es/utils/delay.js +14 -0
- package/dist/node_modules/motion-dom/dist/es/utils/delay.js.map +1 -0
- package/dist/node_modules/motion-dom/dist/es/utils/interpolate.js +35 -0
- package/dist/node_modules/motion-dom/dist/es/utils/interpolate.js.map +1 -0
- package/dist/node_modules/motion-dom/dist/es/utils/is-html-element.js +9 -0
- package/dist/node_modules/motion-dom/dist/es/utils/is-html-element.js.map +1 -0
- package/dist/node_modules/motion-dom/dist/es/utils/is-svg-element.js +9 -0
- package/dist/node_modules/motion-dom/dist/es/utils/is-svg-element.js.map +1 -0
- package/dist/node_modules/motion-dom/dist/es/utils/is-svg-svg-element.js +9 -0
- package/dist/node_modules/motion-dom/dist/es/utils/is-svg-svg-element.js.map +1 -0
- package/dist/node_modules/motion-dom/dist/es/utils/mix/color.js +32 -0
- package/dist/node_modules/motion-dom/dist/es/utils/mix/color.js.map +1 -0
- package/dist/node_modules/motion-dom/dist/es/utils/mix/complex.js +54 -0
- package/dist/node_modules/motion-dom/dist/es/utils/mix/complex.js.map +1 -0
- package/dist/node_modules/motion-dom/dist/es/utils/mix/immediate.js +8 -0
- package/dist/node_modules/motion-dom/dist/es/utils/mix/immediate.js.map +1 -0
- package/dist/node_modules/motion-dom/dist/es/utils/mix/index.js +10 -0
- package/dist/node_modules/motion-dom/dist/es/utils/mix/index.js.map +1 -0
- package/dist/node_modules/motion-dom/dist/es/utils/mix/number.js +6 -0
- package/dist/node_modules/motion-dom/dist/es/utils/mix/number.js.map +1 -0
- package/dist/node_modules/motion-dom/dist/es/utils/mix/visibility.js +9 -0
- package/dist/node_modules/motion-dom/dist/es/utils/mix/visibility.js.map +1 -0
- package/dist/node_modules/motion-dom/dist/es/utils/resolve-elements.js +16 -0
- package/dist/node_modules/motion-dom/dist/es/utils/resolve-elements.js.map +1 -0
- package/dist/node_modules/motion-dom/dist/es/utils/supports/flags.js +6 -0
- package/dist/node_modules/motion-dom/dist/es/utils/supports/flags.js.map +1 -0
- package/dist/node_modules/motion-dom/dist/es/utils/supports/linear-easing.js +14 -0
- package/dist/node_modules/motion-dom/dist/es/utils/supports/linear-easing.js.map +1 -0
- package/dist/node_modules/motion-dom/dist/es/utils/supports/memo.js +11 -0
- package/dist/node_modules/motion-dom/dist/es/utils/supports/memo.js.map +1 -0
- package/dist/node_modules/motion-dom/dist/es/utils/supports/scroll-timeline.js +7 -0
- package/dist/node_modules/motion-dom/dist/es/utils/supports/scroll-timeline.js.map +1 -0
- package/dist/node_modules/motion-dom/dist/es/value/index.js +94 -0
- package/dist/node_modules/motion-dom/dist/es/value/index.js.map +1 -0
- package/dist/node_modules/motion-dom/dist/es/value/types/auto.js +9 -0
- package/dist/node_modules/motion-dom/dist/es/value/types/auto.js.map +1 -0
- package/dist/node_modules/motion-dom/dist/es/value/types/color/hex.js +21 -0
- package/dist/node_modules/motion-dom/dist/es/value/types/color/hex.js.map +1 -0
- package/dist/node_modules/motion-dom/dist/es/value/types/color/hsla-to-rgba.js +23 -0
- package/dist/node_modules/motion-dom/dist/es/value/types/color/hsla-to-rgba.js.map +1 -0
- package/dist/node_modules/motion-dom/dist/es/value/types/color/hsla.js +14 -0
- package/dist/node_modules/motion-dom/dist/es/value/types/color/hsla.js.map +1 -0
- package/dist/node_modules/motion-dom/dist/es/value/types/color/index.js +17 -0
- package/dist/node_modules/motion-dom/dist/es/value/types/color/index.js.map +1 -0
- package/dist/node_modules/motion-dom/dist/es/value/types/color/rgba.js +17 -0
- package/dist/node_modules/motion-dom/dist/es/value/types/color/rgba.js.map +1 -0
- package/dist/node_modules/motion-dom/dist/es/value/types/color/utils.js +18 -0
- package/dist/node_modules/motion-dom/dist/es/value/types/color/utils.js.map +1 -0
- package/dist/node_modules/motion-dom/dist/es/value/types/complex/filter.js +28 -0
- package/dist/node_modules/motion-dom/dist/es/value/types/complex/filter.js.map +1 -0
- package/dist/node_modules/motion-dom/dist/es/value/types/complex/index.js +54 -0
- package/dist/node_modules/motion-dom/dist/es/value/types/complex/index.js.map +1 -0
- package/dist/node_modules/motion-dom/dist/es/value/types/complex/mask.js +16 -0
- package/dist/node_modules/motion-dom/dist/es/value/types/complex/mask.js.map +1 -0
- package/dist/node_modules/motion-dom/dist/es/value/types/dimensions.js +18 -0
- package/dist/node_modules/motion-dom/dist/es/value/types/dimensions.js.map +1 -0
- package/dist/node_modules/motion-dom/dist/es/value/types/int.js +10 -0
- package/dist/node_modules/motion-dom/dist/es/value/types/int.js.map +1 -0
- package/dist/node_modules/motion-dom/dist/es/value/types/maps/defaults.js +26 -0
- package/dist/node_modules/motion-dom/dist/es/value/types/maps/defaults.js.map +1 -0
- package/dist/node_modules/motion-dom/dist/es/value/types/maps/number.js +66 -0
- package/dist/node_modules/motion-dom/dist/es/value/types/maps/number.js.map +1 -0
- package/dist/node_modules/motion-dom/dist/es/value/types/maps/transform.js +33 -0
- package/dist/node_modules/motion-dom/dist/es/value/types/maps/transform.js.map +1 -0
- package/dist/node_modules/motion-dom/dist/es/value/types/numbers/index.js +17 -0
- package/dist/node_modules/motion-dom/dist/es/value/types/numbers/index.js.map +1 -0
- package/dist/node_modules/motion-dom/dist/es/value/types/numbers/units.js +14 -0
- package/dist/node_modules/motion-dom/dist/es/value/types/numbers/units.js.map +1 -0
- package/dist/node_modules/motion-dom/dist/es/value/types/test.js +6 -0
- package/dist/node_modules/motion-dom/dist/es/value/types/test.js.map +1 -0
- package/dist/node_modules/motion-dom/dist/es/value/types/utils/animatable-none.js +14 -0
- package/dist/node_modules/motion-dom/dist/es/value/types/utils/animatable-none.js.map +1 -0
- package/dist/node_modules/motion-dom/dist/es/value/types/utils/color-regex.js +6 -0
- package/dist/node_modules/motion-dom/dist/es/value/types/utils/color-regex.js.map +1 -0
- package/dist/node_modules/motion-dom/dist/es/value/types/utils/find.js +14 -0
- package/dist/node_modules/motion-dom/dist/es/value/types/utils/find.js.map +1 -0
- package/dist/node_modules/motion-dom/dist/es/value/types/utils/float-regex.js +6 -0
- package/dist/node_modules/motion-dom/dist/es/value/types/utils/float-regex.js.map +1 -0
- package/dist/node_modules/motion-dom/dist/es/value/types/utils/get-as-type.js +6 -0
- package/dist/node_modules/motion-dom/dist/es/value/types/utils/get-as-type.js.map +1 -0
- package/dist/node_modules/motion-dom/dist/es/value/types/utils/is-nullish.js +8 -0
- package/dist/node_modules/motion-dom/dist/es/value/types/utils/is-nullish.js.map +1 -0
- package/dist/node_modules/motion-dom/dist/es/value/types/utils/sanitize.js +6 -0
- package/dist/node_modules/motion-dom/dist/es/value/types/utils/sanitize.js.map +1 -0
- package/dist/node_modules/motion-dom/dist/es/value/types/utils/single-color-regex.js +6 -0
- package/dist/node_modules/motion-dom/dist/es/value/types/utils/single-color-regex.js.map +1 -0
- package/dist/node_modules/motion-dom/dist/es/value/utils/is-motion-value.js +6 -0
- package/dist/node_modules/motion-dom/dist/es/value/utils/is-motion-value.js.map +1 -0
- package/dist/node_modules/motion-dom/dist/es/value/utils/resolve-motion-value.js +9 -0
- package/dist/node_modules/motion-dom/dist/es/value/utils/resolve-motion-value.js.map +1 -0
- package/dist/node_modules/motion-dom/dist/es/value/will-change/add-will-change.js +15 -0
- package/dist/node_modules/motion-dom/dist/es/value/will-change/add-will-change.js.map +1 -0
- package/dist/node_modules/motion-dom/dist/es/value/will-change/is.js +9 -0
- package/dist/node_modules/motion-dom/dist/es/value/will-change/is.js.map +1 -0
- package/dist/node_modules/motion-utils/dist/es/array.js +12 -0
- package/dist/node_modules/motion-utils/dist/es/array.js.map +1 -0
- package/dist/node_modules/motion-utils/dist/es/clamp.js +6 -0
- package/dist/node_modules/motion-utils/dist/es/clamp.js.map +1 -0
- package/dist/node_modules/motion-utils/dist/es/easing/anticipate.js +7 -0
- package/dist/node_modules/motion-utils/dist/es/easing/anticipate.js.map +1 -0
- package/dist/node_modules/motion-utils/dist/es/easing/back.js +9 -0
- package/dist/node_modules/motion-utils/dist/es/easing/back.js.map +1 -0
- package/dist/node_modules/motion-utils/dist/es/easing/circ.js +8 -0
- package/dist/node_modules/motion-utils/dist/es/easing/circ.js.map +1 -0
- package/dist/node_modules/motion-utils/dist/es/easing/cubic-bezier.js +19 -0
- package/dist/node_modules/motion-utils/dist/es/easing/cubic-bezier.js.map +1 -0
- package/dist/node_modules/motion-utils/dist/es/easing/ease.js +7 -0
- package/dist/node_modules/motion-utils/dist/es/easing/ease.js.map +1 -0
- package/dist/node_modules/motion-utils/dist/es/easing/modifiers/mirror.js +6 -0
- package/dist/node_modules/motion-utils/dist/es/easing/modifiers/mirror.js.map +1 -0
- package/dist/node_modules/motion-utils/dist/es/easing/modifiers/reverse.js +6 -0
- package/dist/node_modules/motion-utils/dist/es/easing/modifiers/reverse.js.map +1 -0
- package/dist/node_modules/motion-utils/dist/es/easing/utils/is-bezier-definition.js +6 -0
- package/dist/node_modules/motion-utils/dist/es/easing/utils/is-bezier-definition.js.map +1 -0
- package/dist/node_modules/motion-utils/dist/es/easing/utils/is-easing-array.js +6 -0
- package/dist/node_modules/motion-utils/dist/es/easing/utils/is-easing-array.js.map +1 -0
- package/dist/node_modules/motion-utils/dist/es/easing/utils/map.js +33 -0
- package/dist/node_modules/motion-utils/dist/es/easing/utils/map.js.map +1 -0
- package/dist/node_modules/motion-utils/dist/es/errors.js +12 -0
- package/dist/node_modules/motion-utils/dist/es/errors.js.map +1 -0
- package/dist/node_modules/motion-utils/dist/es/format-error-message.js +8 -0
- package/dist/node_modules/motion-utils/dist/es/format-error-message.js.map +1 -0
- package/dist/node_modules/motion-utils/dist/es/global-config.js +6 -0
- package/dist/node_modules/motion-utils/dist/es/global-config.js.map +1 -0
- package/dist/node_modules/motion-utils/dist/es/is-numerical-string.js +6 -0
- package/dist/node_modules/motion-utils/dist/es/is-numerical-string.js.map +1 -0
- package/dist/node_modules/motion-utils/dist/es/is-object.js +8 -0
- package/dist/node_modules/motion-utils/dist/es/is-object.js.map +1 -0
- package/dist/node_modules/motion-utils/dist/es/is-zero-value-string.js +6 -0
- package/dist/node_modules/motion-utils/dist/es/is-zero-value-string.js.map +1 -0
- package/dist/node_modules/motion-utils/dist/es/memo.js +10 -0
- package/dist/node_modules/motion-utils/dist/es/memo.js.map +1 -0
- package/dist/node_modules/motion-utils/dist/es/noop.js +6 -0
- package/dist/node_modules/motion-utils/dist/es/noop.js.map +1 -0
- package/dist/node_modules/motion-utils/dist/es/pipe.js +6 -0
- package/dist/node_modules/motion-utils/dist/es/pipe.js.map +1 -0
- package/dist/node_modules/motion-utils/dist/es/progress.js +9 -0
- package/dist/node_modules/motion-utils/dist/es/progress.js.map +1 -0
- package/dist/node_modules/motion-utils/dist/es/subscription-manager.js +28 -0
- package/dist/node_modules/motion-utils/dist/es/subscription-manager.js.map +1 -0
- package/dist/node_modules/motion-utils/dist/es/time-conversion.js +6 -0
- package/dist/node_modules/motion-utils/dist/es/time-conversion.js.map +1 -0
- package/dist/node_modules/motion-utils/dist/es/velocity-per-second.js +8 -0
- package/dist/node_modules/motion-utils/dist/es/velocity-per-second.js.map +1 -0
- package/dist/node_modules/motion-utils/dist/es/warn-once.js +10 -0
- package/dist/node_modules/motion-utils/dist/es/warn-once.js.map +1 -0
- package/dist/node_modules/object-assign/index.js +41 -0
- package/dist/node_modules/object-assign/index.js.map +1 -0
- package/dist/node_modules/prop-types/checkPropTypes.js +46 -0
- package/dist/node_modules/prop-types/checkPropTypes.js.map +1 -0
- package/dist/node_modules/prop-types/factoryWithThrowingShims.js +49 -0
- package/dist/node_modules/prop-types/factoryWithThrowingShims.js.map +1 -0
- package/dist/node_modules/prop-types/factoryWithTypeCheckers.js +272 -0
- package/dist/node_modules/prop-types/factoryWithTypeCheckers.js.map +1 -0
- package/dist/node_modules/prop-types/index.js +16 -0
- package/dist/node_modules/prop-types/index.js.map +1 -0
- package/dist/node_modules/prop-types/lib/ReactPropTypesSecret.js +10 -0
- package/dist/node_modules/prop-types/lib/ReactPropTypesSecret.js.map +1 -0
- package/dist/node_modules/prop-types/lib/has.js +10 -0
- package/dist/node_modules/prop-types/lib/has.js.map +1 -0
- package/dist/node_modules/prop-types/node_modules/react-is/cjs/react-is.development.js +84 -0
- package/dist/node_modules/prop-types/node_modules/react-is/cjs/react-is.development.js.map +1 -0
- package/dist/node_modules/prop-types/node_modules/react-is/cjs/react-is.production.min.js +64 -0
- package/dist/node_modules/prop-types/node_modules/react-is/cjs/react-is.production.min.js.map +1 -0
- package/dist/node_modules/prop-types/node_modules/react-is/index.js +12 -0
- package/dist/node_modules/prop-types/node_modules/react-is/index.js.map +1 -0
- package/dist/node_modules/react-is/cjs/react-is.development.js +87 -0
- package/dist/node_modules/react-is/cjs/react-is.development.js.map +1 -0
- package/dist/node_modules/react-is/cjs/react-is.production.min.js +65 -0
- package/dist/node_modules/react-is/cjs/react-is.production.min.js.map +1 -0
- package/dist/node_modules/react-is/index.js +12 -0
- package/dist/node_modules/react-is/index.js.map +1 -0
- package/dist/node_modules/react-smooth/es6/Animate.js +374 -0
- package/dist/node_modules/react-smooth/es6/Animate.js.map +1 -0
- package/dist/node_modules/react-smooth/es6/AnimateManager.js +73 -0
- package/dist/node_modules/react-smooth/es6/AnimateManager.js.map +1 -0
- package/dist/node_modules/react-smooth/es6/configUpdate.js +173 -0
- package/dist/node_modules/react-smooth/es6/configUpdate.js.map +1 -0
- package/dist/node_modules/react-smooth/es6/easing.js +152 -0
- package/dist/node_modules/react-smooth/es6/easing.js.map +1 -0
- package/dist/node_modules/react-smooth/es6/index.js +9 -0
- package/dist/node_modules/react-smooth/es6/index.js.map +1 -0
- package/dist/node_modules/react-smooth/es6/setRafTimeout.js +14 -0
- package/dist/node_modules/react-smooth/es6/setRafTimeout.js.map +1 -0
- package/dist/node_modules/react-smooth/es6/util.js +92 -0
- package/dist/node_modules/react-smooth/es6/util.js.map +1 -0
- package/dist/node_modules/recharts/es6/cartesian/Area.js +435 -0
- package/dist/node_modules/recharts/es6/cartesian/Area.js.map +1 -0
- package/dist/node_modules/recharts/es6/cartesian/Bar.js +387 -0
- package/dist/node_modules/recharts/es6/cartesian/Bar.js.map +1 -0
- package/dist/node_modules/recharts/es6/cartesian/Brush.js +499 -0
- package/dist/node_modules/recharts/es6/cartesian/Brush.js.map +1 -0
- package/dist/node_modules/recharts/es6/cartesian/CartesianAxis.js +338 -0
- package/dist/node_modules/recharts/es6/cartesian/CartesianAxis.js.map +1 -0
- package/dist/node_modules/recharts/es6/cartesian/ErrorBar.js +243 -0
- package/dist/node_modules/recharts/es6/cartesian/ErrorBar.js.map +1 -0
- package/dist/node_modules/recharts/es6/cartesian/ReferenceArea.js +173 -0
- package/dist/node_modules/recharts/es6/cartesian/ReferenceArea.js.map +1 -0
- package/dist/node_modules/recharts/es6/cartesian/ReferenceDot.js +178 -0
- package/dist/node_modules/recharts/es6/cartesian/ReferenceDot.js.map +1 -0
- package/dist/node_modules/recharts/es6/cartesian/ReferenceLine.js +254 -0
- package/dist/node_modules/recharts/es6/cartesian/ReferenceLine.js.map +1 -0
- package/dist/node_modules/recharts/es6/cartesian/XAxis.js +144 -0
- package/dist/node_modules/recharts/es6/cartesian/XAxis.js.map +1 -0
- package/dist/node_modules/recharts/es6/cartesian/YAxis.js +143 -0
- package/dist/node_modules/recharts/es6/cartesian/YAxis.js.map +1 -0
- package/dist/node_modules/recharts/es6/cartesian/getEquidistantTicks.js +18 -0
- package/dist/node_modules/recharts/es6/cartesian/getEquidistantTicks.js.map +1 -0
- package/dist/node_modules/recharts/es6/cartesian/getTicks.js +121 -0
- package/dist/node_modules/recharts/es6/cartesian/getTicks.js.map +1 -0
- package/dist/node_modules/recharts/es6/chart/AccessibilityManager.js +101 -0
- package/dist/node_modules/recharts/es6/chart/AccessibilityManager.js.map +1 -0
- package/dist/node_modules/recharts/es6/chart/AreaChart.js +22 -0
- package/dist/node_modules/recharts/es6/chart/AreaChart.js.map +1 -0
- package/dist/node_modules/recharts/es6/chart/BarChart.js +24 -0
- package/dist/node_modules/recharts/es6/chart/BarChart.js.map +1 -0
- package/dist/node_modules/recharts/es6/chart/PieChart.js +34 -0
- package/dist/node_modules/recharts/es6/chart/PieChart.js.map +1 -0
- package/dist/node_modules/recharts/es6/chart/generateCategoricalChart.js +1245 -0
- package/dist/node_modules/recharts/es6/chart/generateCategoricalChart.js.map +1 -0
- package/dist/node_modules/recharts/es6/component/Cell.js +9 -0
- package/dist/node_modules/recharts/es6/component/Cell.js.map +1 -0
- package/dist/node_modules/recharts/es6/component/Cursor.js +93 -0
- package/dist/node_modules/recharts/es6/component/Cursor.js.map +1 -0
- package/dist/node_modules/recharts/es6/component/DefaultLegendContent.js +237 -0
- package/dist/node_modules/recharts/es6/component/DefaultLegendContent.js.map +1 -0
- package/dist/node_modules/recharts/es6/component/DefaultTooltipContent.js +171 -0
- package/dist/node_modules/recharts/es6/component/DefaultTooltipContent.js.map +1 -0
- package/dist/node_modules/recharts/es6/component/Label.js +353 -0
- package/dist/node_modules/recharts/es6/component/Label.js.map +1 -0
- package/dist/node_modules/recharts/es6/component/LabelList.js +166 -0
- package/dist/node_modules/recharts/es6/component/LabelList.js.map +1 -0
- package/dist/node_modules/recharts/es6/component/Legend.js +234 -0
- package/dist/node_modules/recharts/es6/component/Legend.js.map +1 -0
- package/dist/node_modules/recharts/es6/component/ResponsiveContainer.js +187 -0
- package/dist/node_modules/recharts/es6/component/ResponsiveContainer.js.map +1 -0
- package/dist/node_modules/recharts/es6/component/Text.js +225 -0
- package/dist/node_modules/recharts/es6/component/Text.js.map +1 -0
- package/dist/node_modules/recharts/es6/component/Tooltip.js +182 -0
- package/dist/node_modules/recharts/es6/component/Tooltip.js.map +1 -0
- package/dist/node_modules/recharts/es6/component/TooltipBoundingBox.js +198 -0
- package/dist/node_modules/recharts/es6/component/TooltipBoundingBox.js.map +1 -0
- package/dist/node_modules/recharts/es6/container/Layer.js +40 -0
- package/dist/node_modules/recharts/es6/container/Layer.js.map +1 -0
- package/dist/node_modules/recharts/es6/container/Surface.js +60 -0
- package/dist/node_modules/recharts/es6/container/Surface.js.map +1 -0
- package/dist/node_modules/recharts/es6/context/chartLayoutContext.js +46 -0
- package/dist/node_modules/recharts/es6/context/chartLayoutContext.js.map +1 -0
- package/dist/node_modules/recharts/es6/polar/Pie.js +435 -0
- package/dist/node_modules/recharts/es6/polar/Pie.js.map +1 -0
- package/dist/node_modules/recharts/es6/polar/PolarAngleAxis.js +215 -0
- package/dist/node_modules/recharts/es6/polar/PolarAngleAxis.js.map +1 -0
- package/dist/node_modules/recharts/es6/polar/PolarRadiusAxis.js +268 -0
- package/dist/node_modules/recharts/es6/polar/PolarRadiusAxis.js.map +1 -0
- package/dist/node_modules/recharts/es6/shape/Cross.js +112 -0
- package/dist/node_modules/recharts/es6/shape/Cross.js.map +1 -0
- package/dist/node_modules/recharts/es6/shape/Curve.js +136 -0
- package/dist/node_modules/recharts/es6/shape/Curve.js.map +1 -0
- package/dist/node_modules/recharts/es6/shape/Dot.js +27 -0
- package/dist/node_modules/recharts/es6/shape/Dot.js.map +1 -0
- package/dist/node_modules/recharts/es6/shape/Polygon.js +112 -0
- package/dist/node_modules/recharts/es6/shape/Polygon.js.map +1 -0
- package/dist/node_modules/recharts/es6/shape/Rectangle.js +205 -0
- package/dist/node_modules/recharts/es6/shape/Rectangle.js.map +1 -0
- package/dist/node_modules/recharts/es6/shape/Sector.js +192 -0
- package/dist/node_modules/recharts/es6/shape/Sector.js.map +1 -0
- package/dist/node_modules/recharts/es6/shape/Symbols.js +143 -0
- package/dist/node_modules/recharts/es6/shape/Symbols.js.map +1 -0
- package/dist/node_modules/recharts/es6/shape/Trapezoid.js +175 -0
- package/dist/node_modules/recharts/es6/shape/Trapezoid.js.map +1 -0
- package/dist/node_modules/recharts/es6/util/ActiveShapeUtils.js +181 -0
- package/dist/node_modules/recharts/es6/util/ActiveShapeUtils.js.map +1 -0
- package/dist/node_modules/recharts/es6/util/BarUtils.js +112 -0
- package/dist/node_modules/recharts/es6/util/BarUtils.js.map +1 -0
- package/dist/node_modules/recharts/es6/util/CartesianUtils.js +234 -0
- package/dist/node_modules/recharts/es6/util/CartesianUtils.js.map +1 -0
- package/dist/node_modules/recharts/es6/util/ChartUtils.js +554 -0
- package/dist/node_modules/recharts/es6/util/ChartUtils.js.map +1 -0
- package/dist/node_modules/recharts/es6/util/CssPrefixUtils.js +70 -0
- package/dist/node_modules/recharts/es6/util/CssPrefixUtils.js.map +1 -0
- package/dist/node_modules/recharts/es6/util/DOMUtils.js +108 -0
- package/dist/node_modules/recharts/es6/util/DOMUtils.js.map +1 -0
- package/dist/node_modules/recharts/es6/util/DataUtils.js +57 -0
- package/dist/node_modules/recharts/es6/util/DataUtils.js.map +1 -0
- package/dist/node_modules/recharts/es6/util/DetectReferenceElementsDomain.js +58 -0
- package/dist/node_modules/recharts/es6/util/DetectReferenceElementsDomain.js.map +1 -0
- package/dist/node_modules/recharts/es6/util/Events.js +7 -0
- package/dist/node_modules/recharts/es6/util/Events.js.map +1 -0
- package/dist/node_modules/recharts/es6/util/Global.js +21 -0
- package/dist/node_modules/recharts/es6/util/Global.js.map +1 -0
- package/dist/node_modules/recharts/es6/util/IfOverflowMatches.js +9 -0
- package/dist/node_modules/recharts/es6/util/IfOverflowMatches.js.map +1 -0
- package/dist/node_modules/recharts/es6/util/LogUtils.js +15 -0
- package/dist/node_modules/recharts/es6/util/LogUtils.js.map +1 -0
- package/dist/node_modules/recharts/es6/util/PolarUtils.js +198 -0
- package/dist/node_modules/recharts/es6/util/PolarUtils.js.map +1 -0
- package/dist/node_modules/recharts/es6/util/ReactUtils.js +137 -0
- package/dist/node_modules/recharts/es6/util/ReactUtils.js.map +1 -0
- package/dist/node_modules/recharts/es6/util/ReduceCSSCalc.js +181 -0
- package/dist/node_modules/recharts/es6/util/ReduceCSSCalc.js.map +1 -0
- package/dist/node_modules/recharts/es6/util/ShallowEqual.js +10 -0
- package/dist/node_modules/recharts/es6/util/ShallowEqual.js.map +1 -0
- package/dist/node_modules/recharts/es6/util/TickUtils.js +31 -0
- package/dist/node_modules/recharts/es6/util/TickUtils.js.map +1 -0
- package/dist/node_modules/recharts/es6/util/calculateViewBox.js +25 -0
- package/dist/node_modules/recharts/es6/util/calculateViewBox.js.map +1 -0
- package/dist/node_modules/recharts/es6/util/cursor/getCursorPoints.js +23 -0
- package/dist/node_modules/recharts/es6/util/cursor/getCursorPoints.js.map +1 -0
- package/dist/node_modules/recharts/es6/util/cursor/getCursorRectangle.js +16 -0
- package/dist/node_modules/recharts/es6/util/cursor/getCursorRectangle.js.map +1 -0
- package/dist/node_modules/recharts/es6/util/cursor/getRadialCursorPoints.js +17 -0
- package/dist/node_modules/recharts/es6/util/cursor/getRadialCursorPoints.js.map +1 -0
- package/dist/node_modules/recharts/es6/util/getEveryNthWithCondition.js +12 -0
- package/dist/node_modules/recharts/es6/util/getEveryNthWithCondition.js.map +1 -0
- package/dist/node_modules/recharts/es6/util/getLegendProps.js +88 -0
- package/dist/node_modules/recharts/es6/util/getLegendProps.js.map +1 -0
- package/dist/node_modules/recharts/es6/util/isDomainSpecifiedByUser.js +13 -0
- package/dist/node_modules/recharts/es6/util/isDomainSpecifiedByUser.js.map +1 -0
- package/dist/node_modules/recharts/es6/util/payload/getUniqPayload.js +12 -0
- package/dist/node_modules/recharts/es6/util/payload/getUniqPayload.js.map +1 -0
- package/dist/node_modules/recharts/es6/util/tooltip/translate.js +87 -0
- package/dist/node_modules/recharts/es6/util/tooltip/translate.js.map +1 -0
- package/dist/node_modules/recharts/es6/util/types.js +43 -0
- package/dist/node_modules/recharts/es6/util/types.js.map +1 -0
- package/dist/node_modules/recharts-scale/es6/getNiceTickValues.js +132 -0
- package/dist/node_modules/recharts-scale/es6/getNiceTickValues.js.map +1 -0
- package/dist/node_modules/recharts-scale/es6/index.js +1 -0
- package/dist/node_modules/recharts-scale/es6/util/arithmetic.js +32 -0
- package/dist/node_modules/recharts-scale/es6/util/arithmetic.js.map +1 -0
- package/dist/node_modules/recharts-scale/es6/util/utils.js +79 -0
- package/dist/node_modules/recharts-scale/es6/util/utils.js.map +1 -0
- package/dist/node_modules/tailwind-merge/dist/bundle-mjs.js +1716 -0
- package/dist/node_modules/tailwind-merge/dist/bundle-mjs.js.map +1 -0
- package/dist/node_modules/tiny-invariant/dist/esm/tiny-invariant.js +13 -0
- package/dist/node_modules/tiny-invariant/dist/esm/tiny-invariant.js.map +1 -0
- package/dist/node_modules/victory-vendor/es/d3-scale.js +53 -0
- package/dist/node_modules/victory-vendor/es/d3-scale.js.map +1 -0
- package/package.json +5 -4
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"viz.js","names":[],"sources":["../../../src/brainyrich/components/viz.tsx"],"sourcesContent":["/**\n * BrainyRich data-viz + polish kit.\n * @module brainyrich/components/viz\n *\n * A tokenized, responsive, dark-mode-first visualization + motion kit built on\n * recharts (^2.15) and framer-motion (^12). Every colour is read from the\n * platform's SEMANTIC CSS variables at runtime (see {@link useVizColors}) so\n * charts always track the active theme and the emerald BrainyRich brand\n * (`--color-action-primary-bg`). No raw hex/rgb literals live in this file.\n *\n * All chart components are wrapped in a recharts `<ResponsiveContainer>` so they\n * resize with their parent. Motion is tasteful (<=250ms) and disabled under\n * `prefers-reduced-motion`.\n *\n * Page agents: import from `#brainyrich/components/viz` (or the components\n * barrel). Pass values straight from the real `bra*` hooks — this kit only\n * renders; it never fabricates data.\n */\nimport { useEffect, useId, useMemo, useState, type CSSProperties, type ReactNode } from 'react';\nimport {\n Area,\n AreaChart,\n Bar,\n BarChart,\n Cell,\n Line,\n LineChart,\n Pie,\n PieChart,\n ReferenceLine,\n ResponsiveContainer,\n Tooltip,\n XAxis,\n YAxis,\n} from 'recharts';\nimport { AnimatePresence, motion, useReducedMotion } from 'framer-motion';\nimport { clsx, type ClassValue } from 'clsx';\nimport { twMerge } from 'tailwind-merge';\n\nfunction cn(...inputs: ClassValue[]): string {\n return twMerge(clsx(inputs));\n}\n\n// ============================================================================\n// Token → colour resolution\n// ============================================================================\n//\n// recharts needs concrete colour strings (fills, stroke, gradient stops), so we\n// resolve each semantic CSS variable to its computed value off\n// `document.documentElement` and re-read whenever the theme attribute flips.\n// Consumers NEVER hard-code colours: they name a semantic token here.\n\nconst CORE_TOKENS = {\n brand: '--color-action-primary-bg',\n brandBorder: '--color-action-primary-border',\n grid: '--color-chart-grid',\n axis: '--color-chart-axis',\n positive: '--color-chart-positive',\n negative: '--color-chart-negative',\n success: '--color-status-success',\n error: '--color-status-error',\n warning: '--color-status-warning',\n info: '--color-status-info',\n teal: '--color-accent-teal',\n blue: '--color-accent-blue',\n purple: '--color-accent-purple',\n indigo: '--color-accent-indigo',\n textPrimary: '--color-text-primary',\n textSecondary: '--color-text-secondary',\n surface: '--color-bg-elevated',\n border: '--color-border-subtle',\n} as const;\n\ntype CoreToken = keyof typeof CORE_TOKENS;\n\n/** Ordered categorical palette — emerald brand first, then distinct chart hues. */\nconst PALETTE_VARS = [\n '--color-action-primary-bg',\n '--color-chart-2',\n '--color-chart-3',\n '--color-chart-4',\n '--color-chart-5',\n '--color-chart-6',\n '--color-chart-7',\n '--color-chart-8',\n '--color-chart-9',\n '--color-chart-10',\n '--color-chart-11',\n '--color-chart-12',\n];\n\nexport type VizColors = Record<CoreToken, string> & {\n /** Categorical palette (index 0 = emerald brand). */\n palette: string[];\n /** Resolve any semantic tone name to a concrete colour string. */\n tone: (tone?: VizTone) => string;\n};\n\n/** Named tones a datum may request; falls back to the categorical palette. */\nexport type VizTone =\n | 'brand'\n | 'primary'\n | 'success'\n | 'positive'\n | 'error'\n | 'negative'\n | 'warning'\n | 'info'\n | 'teal'\n | 'blue'\n | 'purple'\n | 'indigo'\n | 'neutral';\n\nfunction readVar(name: string): string {\n if (typeof window === 'undefined') return `var(${name})`;\n const v = getComputedStyle(document.documentElement).getPropertyValue(name).trim();\n return v || `var(${name})`;\n}\n\n/**\n * Resolve the semantic viz palette from CSS variables and keep it in sync with\n * the active theme. Returns concrete colour strings for use in recharts props.\n */\nexport function useVizColors(): VizColors {\n const [tick, setTick] = useState(0);\n\n useEffect(() => {\n if (typeof window === 'undefined') return;\n const rerender = () => setTick((t) => t + 1);\n const obs = new MutationObserver(rerender);\n obs.observe(document.documentElement, {\n attributes: true,\n attributeFilter: ['data-theme', 'class', 'style'],\n });\n return () => obs.disconnect();\n }, []);\n\n return useMemo(() => {\n void tick; // re-resolve whenever the theme attribute changes\n const core = Object.fromEntries(\n (Object.keys(CORE_TOKENS) as CoreToken[]).map((k) => [k, readVar(CORE_TOKENS[k])])\n ) as Record<CoreToken, string>;\n const palette = PALETTE_VARS.map(readVar);\n\n const tone = (t?: VizTone): string => {\n switch (t) {\n case 'brand':\n case 'primary':\n return core.brand;\n case 'success':\n case 'positive':\n return core.success;\n case 'error':\n case 'negative':\n return core.error;\n case 'warning':\n return core.warning;\n case 'info':\n return core.info;\n case 'teal':\n return core.teal;\n case 'blue':\n return core.blue;\n case 'purple':\n return core.purple;\n case 'indigo':\n return core.indigo;\n case 'neutral':\n return core.textSecondary;\n default:\n return core.brand;\n }\n };\n\n return { ...core, palette, tone };\n }, [tick]);\n}\n\n// ============================================================================\n// Shared chart tooltip (themed — recharts' default is light-only)\n// ============================================================================\n\ninterface TooltipEntry {\n name?: string | number;\n value?: string | number;\n color?: string;\n payload?: Record<string, unknown>;\n}\n\nfunction useTooltipStyles(): { wrapper: CSSProperties; label: CSSProperties } {\n const c = useVizColors();\n return {\n wrapper: {\n background: c.surface,\n border: `1px solid ${c.border}`,\n borderRadius: 10,\n padding: '8px 12px',\n color: c.textPrimary,\n fontSize: 12,\n boxShadow: 'var(--shadow-pop, 0 8px 24px rgba(0,0,0,0.35))',\n },\n label: { color: c.textSecondary, marginBottom: 4, fontSize: 11 },\n };\n}\n\nfunction ChartTooltip({\n active,\n payload,\n label,\n valueFormatter,\n}: {\n active?: boolean;\n payload?: TooltipEntry[];\n label?: string | number;\n valueFormatter?: (v: number) => string;\n}) {\n const styles = useTooltipStyles();\n if (!active || !payload || payload.length === 0) return null;\n return (\n <div style={styles.wrapper} role=\"tooltip\">\n {label !== undefined && label !== '' ? <div style={styles.label}>{label}</div> : null}\n {payload.map((entry, i) => {\n const raw = typeof entry.value === 'number' ? entry.value : Number(entry.value);\n const shown =\n valueFormatter && Number.isFinite(raw) ? valueFormatter(raw) : String(entry.value ?? '');\n return (\n <div key={i} className=\"flex items-center gap-2\">\n {entry.color ? (\n <span\n aria-hidden=\"true\"\n style={{\n width: 8,\n height: 8,\n borderRadius: 9999,\n background: entry.color,\n display: 'inline-block',\n }}\n />\n ) : null}\n {entry.name ? <span style={{ color: styles.label.color }}>{entry.name}:</span> : null}\n <span style={{ fontWeight: 600 }}>{shown}</span>\n </div>\n );\n })}\n </div>\n );\n}\n\n// ============================================================================\n// Motion helpers\n// ============================================================================\n\n/**\n * Staggered enter animation (translateY + opacity). Fully disabled under\n * `prefers-reduced-motion` (renders a plain element). Use `index` to stagger a\n * list/grid of cards.\n */\nexport function FadeIn({\n children,\n index = 0,\n delay = 0,\n className,\n as = 'div',\n}: {\n children: ReactNode;\n index?: number;\n delay?: number;\n className?: string;\n as?: 'div' | 'li' | 'section';\n}) {\n const reduce = useReducedMotion();\n if (reduce) {\n const Tag = as;\n return <Tag className={className}>{children}</Tag>;\n }\n const MotionTag = motion[as];\n return (\n <MotionTag\n className={className}\n initial={{ opacity: 0, y: 8 }}\n animate={{ opacity: 1, y: 0 }}\n transition={{ duration: 0.25, ease: 'easeOut', delay: delay + index * 0.04 }}\n >\n {children}\n </MotionTag>\n );\n}\n\n// ============================================================================\n// GlassCard — sanctioned glass/elevation surface with graceful fallback\n// ============================================================================\n\n/**\n * Floating/hero surface using the sanctioned glass tokens. Falls back to the\n * standard elevated surface when a glass token is absent (older brand builds).\n */\nexport function GlassCard({\n children,\n className,\n glow = false,\n}: {\n children: ReactNode;\n className?: string;\n /** Add a subtle emerald glow ring. */\n glow?: boolean;\n}) {\n return (\n <div\n className={cn(\n 'rounded-2xl border p-5',\n // Glass tokens with hard fallbacks to always-present semantic tokens.\n 'border-[var(--color-border-glass,var(--color-border-subtle))]',\n 'bg-[var(--color-surface-glass,var(--color-bg-elevated))]',\n 'shadow-[var(--shadow-float,var(--shadow-elevation-3))]',\n 'backdrop-blur-[var(--blur-glass,12px)]',\n glow && 'ring-1 ring-[var(--color-action-primary-border)]/40',\n className\n )}\n >\n {children}\n </div>\n );\n}\n\n// ============================================================================\n// DonutChart\n// ============================================================================\n\nexport interface DonutDatum {\n label: string;\n value: number;\n tone?: VizTone;\n}\n\nexport function DonutChart({\n data,\n centerLabel,\n centerValue,\n legend = true,\n height = 220,\n valueFormatter,\n}: {\n data: DonutDatum[];\n centerLabel?: string;\n centerValue?: string;\n legend?: boolean;\n height?: number;\n valueFormatter?: (v: number) => string;\n}) {\n const c = useVizColors();\n const reduce = useReducedMotion();\n const rows = data.filter((d) => Number.isFinite(d.value) && d.value > 0);\n\n if (rows.length === 0) {\n return <p className=\"text-sm text-text-secondary\">No data.</p>;\n }\n\n const colorFor = (d: DonutDatum, i: number) =>\n d.tone ? c.tone(d.tone) : c.palette[i % c.palette.length];\n\n return (\n <div className=\"flex flex-col items-center gap-4 sm:flex-row sm:items-center\">\n <div className=\"relative\" style={{ width: '100%', maxWidth: 260, height }}>\n <ResponsiveContainer width=\"100%\" height=\"100%\">\n <PieChart>\n <Pie\n data={rows}\n dataKey=\"value\"\n nameKey=\"label\"\n innerRadius=\"62%\"\n outerRadius=\"90%\"\n paddingAngle={2}\n stroke=\"transparent\"\n isAnimationActive={!reduce}\n animationDuration={250}\n >\n {rows.map((d, i) => (\n <Cell key={d.label} fill={colorFor(d, i)} />\n ))}\n </Pie>\n <Tooltip content={<ChartTooltip valueFormatter={valueFormatter} />} />\n </PieChart>\n </ResponsiveContainer>\n {centerValue || centerLabel ? (\n <div className=\"pointer-events-none absolute inset-0 flex flex-col items-center justify-center\">\n {centerValue ? (\n <span className=\"text-xl font-semibold text-text-primary\">{centerValue}</span>\n ) : null}\n {centerLabel ? (\n <span className=\"text-xs text-text-secondary\">{centerLabel}</span>\n ) : null}\n </div>\n ) : null}\n </div>\n {legend ? (\n <ul className=\"grid flex-1 grid-cols-1 gap-2 sm:grid-cols-2\" aria-label=\"Legend\">\n {rows.map((d, i) => (\n <li key={d.label} className=\"flex items-center gap-2 text-xs\">\n <span\n aria-hidden=\"true\"\n className=\"size-2.5 shrink-0 rounded-full\"\n style={{ background: colorFor(d, i) }}\n />\n <span className=\"truncate text-text-secondary\">{d.label}</span>\n <span className=\"ml-auto font-medium text-text-primary\">\n {valueFormatter ? valueFormatter(d.value) : d.value}\n </span>\n </li>\n ))}\n </ul>\n ) : null}\n </div>\n );\n}\n\n// ============================================================================\n// Sparkline\n// ============================================================================\n\nexport function Sparkline({\n data,\n tone = 'brand',\n height = 40,\n className,\n}: {\n data: number[];\n tone?: VizTone;\n height?: number;\n className?: string;\n}) {\n const c = useVizColors();\n const stroke = c.tone(tone);\n const points = data.filter((n) => Number.isFinite(n));\n const gradientId = `spark-${useId().replace(/:/g, '')}`;\n if (points.length < 2) {\n return <div className={className} style={{ height }} aria-hidden=\"true\" />;\n }\n const chartData = points.map((y, x) => ({ x, y }));\n return (\n <div className={className} style={{ width: '100%', height }} aria-hidden=\"true\">\n <ResponsiveContainer width=\"100%\" height=\"100%\">\n <AreaChart data={chartData} margin={{ top: 2, right: 0, bottom: 0, left: 0 }}>\n <defs>\n <linearGradient id={gradientId} x1=\"0\" y1=\"0\" x2=\"0\" y2=\"1\">\n <stop offset=\"0%\" stopColor={stroke} stopOpacity={0.28} />\n <stop offset=\"100%\" stopColor={stroke} stopOpacity={0} />\n </linearGradient>\n </defs>\n <Area\n type=\"monotone\"\n dataKey=\"y\"\n stroke={stroke}\n strokeWidth={2}\n fill={`url(#${gradientId})`}\n isAnimationActive={false}\n dot={false}\n />\n </AreaChart>\n </ResponsiveContainer>\n </div>\n );\n}\n\n// ============================================================================\n// ProgressRing — clean SVG radial progress\n// ============================================================================\n\nexport function ProgressRing({\n value,\n label,\n tone = 'brand',\n size = 120,\n strokeWidth = 10,\n}: {\n value: number;\n label?: string;\n tone?: VizTone;\n size?: number;\n strokeWidth?: number;\n}) {\n const c = useVizColors();\n const reduce = useReducedMotion();\n const pct = Math.max(0, Math.min(100, Number.isFinite(value) ? value : 0));\n const r = (size - strokeWidth) / 2;\n const circ = 2 * Math.PI * r;\n const dash = (pct / 100) * circ;\n const stroke = c.tone(tone);\n\n return (\n <div\n className=\"relative inline-flex items-center justify-center\"\n style={{ width: size, height: size }}\n role=\"progressbar\"\n aria-valuenow={Math.round(pct)}\n aria-valuemin={0}\n aria-valuemax={100}\n aria-label={label ?? 'Progress'}\n >\n <svg width={size} height={size} className=\"-rotate-90\">\n <circle\n cx={size / 2}\n cy={size / 2}\n r={r}\n fill=\"none\"\n stroke={c.border}\n strokeWidth={strokeWidth}\n />\n <motion.circle\n cx={size / 2}\n cy={size / 2}\n r={r}\n fill=\"none\"\n stroke={stroke}\n strokeWidth={strokeWidth}\n strokeLinecap=\"round\"\n strokeDasharray={circ}\n initial={{ strokeDashoffset: reduce ? circ - dash : circ }}\n animate={{ strokeDashoffset: circ - dash }}\n transition={{ duration: reduce ? 0 : 0.25, ease: 'easeOut' }}\n />\n </svg>\n <div className=\"absolute inset-0 flex flex-col items-center justify-center\">\n <span className=\"text-lg font-semibold text-text-primary\">{Math.round(pct)}%</span>\n {label ? <span className=\"text-[10px] text-text-secondary\">{label}</span> : null}\n </div>\n </div>\n );\n}\n\n// ============================================================================\n// TrendBars — diverging inflow/outflow cashflow bars\n// ============================================================================\n\nexport interface TrendDatum {\n label: string;\n inflow: number;\n outflow: number;\n}\n\nexport function TrendBars({\n data,\n height = 240,\n valueFormatter,\n}: {\n data: TrendDatum[];\n height?: number;\n valueFormatter?: (v: number) => string;\n}) {\n const c = useVizColors();\n const reduce = useReducedMotion();\n const rows = data.filter((d) => Number.isFinite(d.inflow) && Number.isFinite(d.outflow));\n if (rows.length === 0) {\n return <p className=\"text-sm text-text-secondary\">No cashflow data.</p>;\n }\n // Diverging: inflow up (positive), outflow down (negative).\n const chartData = rows.map((d) => ({\n label: d.label,\n inflow: Math.abs(d.inflow),\n outflow: -Math.abs(d.outflow),\n }));\n\n return (\n <div style={{ width: '100%', height }}>\n <ResponsiveContainer width=\"100%\" height=\"100%\">\n <BarChart\n data={chartData}\n margin={{ top: 8, right: 8, bottom: 0, left: 8 }}\n stackOffset=\"sign\"\n >\n <XAxis\n dataKey=\"label\"\n tick={{ fill: c.textSecondary, fontSize: 11 }}\n axisLine={{ stroke: c.grid }}\n tickLine={false}\n />\n <YAxis\n tick={{ fill: c.textSecondary, fontSize: 11 }}\n axisLine={false}\n tickLine={false}\n width={44}\n tickFormatter={(v: number) =>\n valueFormatter ? valueFormatter(Math.abs(v)) : String(Math.abs(v))\n }\n />\n <ReferenceLine y={0} stroke={c.grid} />\n <Tooltip\n cursor={{ fill: c.border, opacity: 0.25 }}\n content={\n <ChartTooltip\n valueFormatter={(v) =>\n valueFormatter ? valueFormatter(Math.abs(v)) : String(Math.abs(v))\n }\n />\n }\n />\n <Bar\n dataKey=\"inflow\"\n name=\"Inflow\"\n fill={c.positive}\n radius={[4, 4, 0, 0]}\n isAnimationActive={!reduce}\n animationDuration={250}\n />\n <Bar\n dataKey=\"outflow\"\n name=\"Outflow\"\n fill={c.negative}\n radius={[0, 0, 4, 4]}\n isAnimationActive={!reduce}\n animationDuration={250}\n />\n </BarChart>\n </ResponsiveContainer>\n </div>\n );\n}\n\n// ============================================================================\n// MiniAreaChart — projection with optional dashed target line\n// ============================================================================\n\nexport interface AreaDatum {\n x: string | number;\n y: number;\n}\n\nexport function MiniAreaChart({\n data,\n target,\n tone = 'brand',\n height = 200,\n valueFormatter,\n}: {\n data: AreaDatum[];\n target?: number;\n tone?: VizTone;\n height?: number;\n valueFormatter?: (v: number) => string;\n}) {\n const c = useVizColors();\n const reduce = useReducedMotion();\n const stroke = c.tone(tone);\n const rows = data.filter((d) => Number.isFinite(d.y));\n const gradientId = `area-${useId().replace(/:/g, '')}`;\n if (rows.length < 2) {\n return <p className=\"text-sm text-text-secondary\">Not enough data to chart.</p>;\n }\n return (\n <div style={{ width: '100%', height }}>\n <ResponsiveContainer width=\"100%\" height=\"100%\">\n <AreaChart data={rows} margin={{ top: 8, right: 8, bottom: 0, left: 8 }}>\n <defs>\n <linearGradient id={gradientId} x1=\"0\" y1=\"0\" x2=\"0\" y2=\"1\">\n <stop offset=\"0%\" stopColor={stroke} stopOpacity={0.3} />\n <stop offset=\"100%\" stopColor={stroke} stopOpacity={0.02} />\n </linearGradient>\n </defs>\n <XAxis\n dataKey=\"x\"\n tick={{ fill: c.textSecondary, fontSize: 11 }}\n axisLine={{ stroke: c.grid }}\n tickLine={false}\n />\n <YAxis\n tick={{ fill: c.textSecondary, fontSize: 11 }}\n axisLine={false}\n tickLine={false}\n width={44}\n tickFormatter={(v: number) => (valueFormatter ? valueFormatter(v) : String(v))}\n />\n <Tooltip content={<ChartTooltip valueFormatter={valueFormatter} />} />\n {target !== undefined && Number.isFinite(target) ? (\n <ReferenceLine\n y={target}\n stroke={c.textSecondary}\n strokeDasharray=\"5 4\"\n label={{\n value: valueFormatter ? `Target ${valueFormatter(target)}` : `Target ${target}`,\n position: 'insideTopRight',\n fill: c.textSecondary,\n fontSize: 10,\n }}\n />\n ) : null}\n <Area\n type=\"monotone\"\n dataKey=\"y\"\n stroke={stroke}\n strokeWidth={2}\n fill={`url(#${gradientId})`}\n isAnimationActive={!reduce}\n animationDuration={250}\n dot={false}\n />\n </AreaChart>\n </ResponsiveContainer>\n </div>\n );\n}\n\n// ============================================================================\n// LifecycleStepper — horizontal proposal/rebalance lifecycle\n// ============================================================================\n\nconst NEGATIVE_TERMINAL = /reject|cancel|abandon|decline|fail/i;\n\nexport function LifecycleStepper({\n steps,\n current,\n className,\n}: {\n steps: string[];\n current: string;\n className?: string;\n}) {\n const isNegativeTerminal = NEGATIVE_TERMINAL.test(current);\n const currentIndex = steps.findIndex((s) => s.toLowerCase() === current.toLowerCase());\n\n return (\n <ol\n className={cn('flex w-full items-center overflow-x-auto', className)}\n aria-label=\"Lifecycle progress\"\n >\n {steps.map((step, i) => {\n const isLast = i === steps.length - 1;\n const done = currentIndex >= 0 && i < currentIndex;\n const active = currentIndex >= 0 && i === currentIndex && !isNegativeTerminal;\n const state = done ? 'done' : active ? 'active' : 'upcoming';\n return (\n <li\n key={step}\n className=\"flex min-w-fit flex-1 items-center\"\n aria-current={active ? 'step' : undefined}\n >\n <div className=\"flex flex-col items-center gap-1.5 px-1\">\n <span\n className={cn(\n 'flex size-7 items-center justify-center rounded-full border text-xs font-semibold transition-colors',\n state === 'done' &&\n 'border-transparent bg-[var(--color-action-primary-bg)] text-[var(--color-action-primary-text)]',\n state === 'active' &&\n 'border-[var(--color-action-primary-border)] bg-[var(--color-action-primary-bg)]/15 text-[var(--color-action-primary-text)]',\n state === 'upcoming' && 'border-border-subtle bg-bg-sunken text-text-secondary'\n )}\n aria-hidden=\"true\"\n >\n {done ? '✓' : i + 1}\n </span>\n <span\n className={cn(\n 'whitespace-nowrap text-[11px]',\n active ? 'font-medium text-text-primary' : 'text-text-secondary'\n )}\n >\n {step}\n </span>\n </div>\n {!isLast ? (\n <span\n aria-hidden=\"true\"\n className={cn(\n 'mx-1 h-0.5 flex-1 rounded-full',\n done ? 'bg-[var(--color-action-primary-bg)]' : 'bg-border-subtle'\n )}\n />\n ) : null}\n </li>\n );\n })}\n {isNegativeTerminal ? (\n <li className=\"ml-2 flex min-w-fit items-center gap-1.5\" aria-current=\"step\">\n <span className=\"mx-1 h-0.5 w-6 rounded-full bg-status-error-border\" aria-hidden=\"true\" />\n <div className=\"flex flex-col items-center gap-1.5 px-1\">\n <span\n className=\"flex size-7 items-center justify-center rounded-full border border-transparent bg-status-error text-xs font-semibold text-status-error-text\"\n aria-hidden=\"true\"\n >\n ✕\n </span>\n <span className=\"whitespace-nowrap text-[11px] font-medium text-status-error-text\">\n {current}\n </span>\n </div>\n </li>\n ) : null}\n </ol>\n );\n}\n\n// ============================================================================\n// StatTile — premium KPI tile\n// ============================================================================\n\nexport function StatTile({\n label,\n value,\n delta,\n deltaTone,\n deltaSuffix = '%',\n spark,\n sparkTone = 'brand',\n glow = false,\n icon,\n className,\n}: {\n label: string;\n value: string;\n /** Optional signed delta rendered as a chip (icon + sign + status colour). */\n delta?: number;\n /** Override the auto tone derived from the delta sign. */\n deltaTone?: 'positive' | 'negative' | 'neutral';\n deltaSuffix?: string;\n /** Optional inline sparkline series. */\n spark?: number[];\n sparkTone?: VizTone;\n /** Subtle emerald glow ring for hero tiles. */\n glow?: boolean;\n icon?: ReactNode;\n className?: string;\n}) {\n const positive = deltaTone ? deltaTone === 'positive' : (delta ?? 0) > 0;\n const negative = deltaTone ? deltaTone === 'negative' : (delta ?? 0) < 0;\n const deltaClass = positive\n ? 'text-status-success-text bg-status-success-bg'\n : negative\n ? 'text-status-error-text bg-status-error-bg'\n : 'text-text-secondary bg-bg-sunken';\n const sign = delta !== undefined && delta > 0 ? '+' : '';\n\n return (\n <div\n className={cn(\n 'group relative overflow-hidden rounded-xl border border-border-subtle bg-bg-surface p-4 transition-shadow',\n 'motion-safe:hover:shadow-[var(--shadow-pop-hover,var(--shadow-elevation-2))]',\n glow && 'ring-1 ring-[var(--color-action-primary-border)]/40',\n className\n )}\n >\n {glow ? (\n <span\n aria-hidden=\"true\"\n className=\"pointer-events-none absolute -right-8 -top-8 size-24 rounded-full bg-[var(--color-action-primary-bg)]/15 blur-2xl\"\n />\n ) : null}\n <div className=\"flex items-start justify-between gap-2\">\n <p className=\"text-xs text-text-secondary\">{label}</p>\n {icon ? <span className=\"text-text-secondary\">{icon}</span> : null}\n </div>\n <p className=\"mt-1 text-2xl font-semibold text-text-primary\">{value}</p>\n <div className=\"mt-2 flex items-center justify-between gap-2\">\n {delta !== undefined && Number.isFinite(delta) ? (\n <span\n className={cn(\n 'inline-flex items-center gap-0.5 rounded-full px-1.5 py-0.5 text-xs font-medium',\n deltaClass\n )}\n >\n <span aria-hidden=\"true\">{positive ? '▲' : negative ? '▼' : '—'}</span>\n {sign}\n {delta.toFixed(1)}\n {deltaSuffix}\n </span>\n ) : (\n <span />\n )}\n {spark && spark.length > 1 ? (\n <div className=\"w-20 shrink-0\">\n <Sparkline data={spark} tone={sparkTone} height={28} />\n </div>\n ) : null}\n </div>\n </div>\n );\n}\n\nexport { AnimatePresence };\n"],"mappings":";;;;;;;;;;;;;;;;;;;AAuCA,SAAS,EAAG,GAAG,GAA8B;AAC3C,QAAO,EAAQ,EAAK,EAAO,CAAC;;AAY9B,IAAM,IAAc;CAClB,OAAO;CACP,aAAa;CACb,MAAM;CACN,MAAM;CACN,UAAU;CACV,UAAU;CACV,SAAS;CACT,OAAO;CACP,SAAS;CACT,MAAM;CACN,MAAM;CACN,MAAM;CACN,QAAQ;CACR,QAAQ;CACR,aAAa;CACb,eAAe;CACf,SAAS;CACT,QAAQ;CACT,EAKK,IAAe;CACnB;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACD;AAyBD,SAAS,EAAQ,GAAsB;AAGrC,QAFI,OAAO,SAAW,MAAoB,OAAO,EAAK,KAC5C,iBAAiB,SAAS,gBAAgB,CAAC,iBAAiB,EAAK,CAAC,MAAM,IACtE,OAAO,EAAK;;AAO1B,SAAgB,IAA0B;CACxC,IAAM,CAAC,GAAM,KAAW,EAAS,EAAE;AAanC,QAXA,QAAgB;AACd,MAAI,OAAO,SAAW,IAAa;EAEnC,IAAM,IAAM,IAAI,uBADO,GAAS,MAAM,IAAI,EAAE,CACF;AAK1C,SAJA,EAAI,QAAQ,SAAS,iBAAiB;GACpC,YAAY;GACZ,iBAAiB;IAAC;IAAc;IAAS;IAAQ;GAClD,CAAC,QACW,EAAI,YAAY;IAC5B,EAAE,CAAC,EAEC,QAAc;EAEnB,IAAM,IAAO,OAAO,YACjB,OAAO,KAAK,EAAY,CAAiB,KAAK,MAAM,CAAC,GAAG,EAAQ,EAAY,GAAG,CAAC,CAAC,CACnF,EACK,IAAU,EAAa,IAAI,EAAQ,EAEnC,KAAQ,MAAwB;AACpC,WAAQ,GAAR;IACE,KAAK;IACL,KAAK,UACH,QAAO,EAAK;IACd,KAAK;IACL,KAAK,WACH,QAAO,EAAK;IACd,KAAK;IACL,KAAK,WACH,QAAO,EAAK;IACd,KAAK,UACH,QAAO,EAAK;IACd,KAAK,OACH,QAAO,EAAK;IACd,KAAK,OACH,QAAO,EAAK;IACd,KAAK,OACH,QAAO,EAAK;IACd,KAAK,SACH,QAAO,EAAK;IACd,KAAK,SACH,QAAO,EAAK;IACd,KAAK,UACH,QAAO,EAAK;IACd,QACE,QAAO,EAAK;;;AAIlB,SAAO;GAAE,GAAG;GAAM;GAAS;GAAM;IAChC,CAAC,EAAK,CAAC;;AAcZ,SAAS,IAAqE;CAC5E,IAAM,IAAI,GAAc;AACxB,QAAO;EACL,SAAS;GACP,YAAY,EAAE;GACd,QAAQ,aAAa,EAAE;GACvB,cAAc;GACd,SAAS;GACT,OAAO,EAAE;GACT,UAAU;GACV,WAAW;GACZ;EACD,OAAO;GAAE,OAAO,EAAE;GAAe,cAAc;GAAG,UAAU;GAAI;EACjE;;AAGH,SAAS,EAAa,EACpB,WACA,YACA,UACA,qBAMC;CACD,IAAM,IAAS,GAAkB;AAEjC,QADI,CAAC,KAAU,CAAC,KAAW,EAAQ,WAAW,IAAU,OAEtD,kBAAC,OAAD;EAAK,OAAO,EAAO;EAAS,MAAK;YAAjC,CACG,MAAU,KAAA,KAAa,MAAU,KAAK,kBAAC,OAAD;GAAK,OAAO,EAAO;aAAQ;GAAY,CAAA,GAAG,MAChF,EAAQ,KAAK,GAAO,MAAM;GACzB,IAAM,IAAM,OAAO,EAAM,SAAU,WAAW,EAAM,QAAQ,OAAO,EAAM,MAAM,EACzE,IACJ,KAAkB,OAAO,SAAS,EAAI,GAAG,EAAe,EAAI,GAAG,OAAO,EAAM,SAAS,GAAG;AAC1F,UACE,kBAAC,OAAD;IAAa,WAAU;cAAvB;KACG,EAAM,QACL,kBAAC,QAAD;MACE,eAAY;MACZ,OAAO;OACL,OAAO;OACP,QAAQ;OACR,cAAc;OACd,YAAY,EAAM;OAClB,SAAS;OACV;MACD,CAAA,GACA;KACH,EAAM,OAAO,kBAAC,QAAD;MAAM,OAAO,EAAE,OAAO,EAAO,MAAM,OAAO;gBAA1C,CAA6C,EAAM,MAAK,IAAQ;UAAG;KACjF,kBAAC,QAAD;MAAM,OAAO,EAAE,YAAY,KAAK;gBAAG;MAAa,CAAA;KAC5C;MAfI,EAeJ;IAER,CACE;;;AAaV,SAAgB,EAAO,EACrB,aACA,WAAQ,GACR,WAAQ,GACR,cACA,QAAK,SAOJ;AAED,KADe,GAAkB,CAG/B,QAAO,kBADK,GACL;EAAgB;EAAY;EAAe,CAAA;CAEpD,IAAM,IAAY,EAAO;AACzB,QACE,kBAAC,GAAD;EACa;EACX,SAAS;GAAE,SAAS;GAAG,GAAG;GAAG;EAC7B,SAAS;GAAE,SAAS;GAAG,GAAG;GAAG;EAC7B,YAAY;GAAE,UAAU;GAAM,MAAM;GAAW,OAAO,IAAQ,IAAQ;GAAM;EAE3E;EACS,CAAA;;AAYhB,SAAgB,EAAU,EACxB,aACA,cACA,UAAO,MAMN;AACD,QACE,kBAAC,OAAD;EACE,WAAW,EACT,0BAEA,iEACA,4DACA,0DACA,0CACA,KAAQ,uDACR,EACD;EAEA;EACG,CAAA;;AAcV,SAAgB,EAAW,EACzB,SACA,gBACA,gBACA,YAAS,IACT,YAAS,KACT,qBAQC;CACD,IAAM,IAAI,GAAc,EAClB,IAAS,GAAkB,EAC3B,IAAO,EAAK,QAAQ,MAAM,OAAO,SAAS,EAAE,MAAM,IAAI,EAAE,QAAQ,EAAE;AAExE,KAAI,EAAK,WAAW,EAClB,QAAO,kBAAC,KAAD;EAAG,WAAU;YAA8B;EAAY,CAAA;CAGhE,IAAM,KAAY,GAAe,MAC/B,EAAE,OAAO,EAAE,KAAK,EAAE,KAAK,GAAG,EAAE,QAAQ,IAAI,EAAE,QAAQ;AAEpD,QACE,kBAAC,OAAD;EAAK,WAAU;YAAf,CACE,kBAAC,OAAD;GAAK,WAAU;GAAW,OAAO;IAAE,OAAO;IAAQ,UAAU;IAAK;IAAQ;aAAzE,CACE,kBAAC,GAAD;IAAqB,OAAM;IAAO,QAAO;cACvC,kBAAC,GAAD,EAAA,UAAA,CACE,kBAAC,GAAD;KACE,MAAM;KACN,SAAQ;KACR,SAAQ;KACR,aAAY;KACZ,aAAY;KACZ,cAAc;KACd,QAAO;KACP,mBAAmB,CAAC;KACpB,mBAAmB;eAElB,EAAK,KAAK,GAAG,MACZ,kBAAC,GAAD,EAAoB,MAAM,EAAS,GAAG,EAAE,EAAI,EAAjC,EAAE,MAA+B,CAC5C;KACE,CAAA,EACN,kBAAC,GAAD,EAAS,SAAS,kBAAC,GAAD,EAA8B,mBAAkB,CAAA,EAAI,CAAA,CAC7D,EAAA,CAAA;IACS,CAAA,EACrB,KAAe,IACd,kBAAC,OAAD;IAAK,WAAU;cAAf,CACG,IACC,kBAAC,QAAD;KAAM,WAAU;eAA2C;KAAmB,CAAA,GAC5E,MACH,IACC,kBAAC,QAAD;KAAM,WAAU;eAA+B;KAAmB,CAAA,GAChE,KACA;QACJ,KACA;MACL,IACC,kBAAC,MAAD;GAAI,WAAU;GAA+C,cAAW;aACrE,EAAK,KAAK,GAAG,MACZ,kBAAC,MAAD;IAAkB,WAAU;cAA5B;KACE,kBAAC,QAAD;MACE,eAAY;MACZ,WAAU;MACV,OAAO,EAAE,YAAY,EAAS,GAAG,EAAE,EAAE;MACrC,CAAA;KACF,kBAAC,QAAD;MAAM,WAAU;gBAAgC,EAAE;MAAa,CAAA;KAC/D,kBAAC,QAAD;MAAM,WAAU;gBACb,IAAiB,EAAe,EAAE,MAAM,GAAG,EAAE;MACzC,CAAA;KACJ;MAVI,EAAE,MAUN,CACL;GACC,CAAA,GACH,KACA;;;AAQV,SAAgB,EAAU,EACxB,SACA,UAAO,SACP,YAAS,IACT,gBAMC;CAED,IAAM,IADI,GAAc,CACP,KAAK,EAAK,EACrB,IAAS,EAAK,QAAQ,MAAM,OAAO,SAAS,EAAE,CAAC,EAC/C,IAAa,SAAS,GAAO,CAAC,QAAQ,MAAM,GAAG;AACrD,KAAI,EAAO,SAAS,EAClB,QAAO,kBAAC,OAAD;EAAgB;EAAW,OAAO,EAAE,WAAQ;EAAE,eAAY;EAAS,CAAA;CAE5E,IAAM,IAAY,EAAO,KAAK,GAAG,OAAO;EAAE;EAAG;EAAG,EAAE;AAClD,QACE,kBAAC,OAAD;EAAgB;EAAW,OAAO;GAAE,OAAO;GAAQ;GAAQ;EAAE,eAAY;YACvE,kBAAC,GAAD;GAAqB,OAAM;GAAO,QAAO;aACvC,kBAAC,GAAD;IAAW,MAAM;IAAW,QAAQ;KAAE,KAAK;KAAG,OAAO;KAAG,QAAQ;KAAG,MAAM;KAAG;cAA5E,CACE,kBAAC,QAAD,EAAA,UACE,kBAAC,kBAAD;KAAgB,IAAI;KAAY,IAAG;KAAI,IAAG;KAAI,IAAG;KAAI,IAAG;eAAxD,CACE,kBAAC,QAAD;MAAM,QAAO;MAAK,WAAW;MAAQ,aAAa;MAAQ,CAAA,EAC1D,kBAAC,QAAD;MAAM,QAAO;MAAO,WAAW;MAAQ,aAAa;MAAK,CAAA,CAC1C;QACZ,CAAA,EACP,kBAAC,GAAD;KACE,MAAK;KACL,SAAQ;KACA;KACR,aAAa;KACb,MAAM,QAAQ,EAAW;KACzB,mBAAmB;KACnB,KAAK;KACL,CAAA,CACQ;;GACQ,CAAA;EAClB,CAAA;;AAQV,SAAgB,EAAa,EAC3B,UACA,UACA,UAAO,SACP,UAAO,KACP,iBAAc,MAOb;CACD,IAAM,IAAI,GAAc,EAClB,IAAS,GAAkB,EAC3B,IAAM,KAAK,IAAI,GAAG,KAAK,IAAI,KAAK,OAAO,SAAS,EAAM,GAAG,IAAQ,EAAE,CAAC,EACpE,KAAK,IAAO,KAAe,GAC3B,IAAO,IAAI,KAAK,KAAK,GACrB,IAAQ,IAAM,MAAO,GACrB,IAAS,EAAE,KAAK,EAAK;AAE3B,QACE,kBAAC,OAAD;EACE,WAAU;EACV,OAAO;GAAE,OAAO;GAAM,QAAQ;GAAM;EACpC,MAAK;EACL,iBAAe,KAAK,MAAM,EAAI;EAC9B,iBAAe;EACf,iBAAe;EACf,cAAY,KAAS;YAPvB,CASE,kBAAC,OAAD;GAAK,OAAO;GAAM,QAAQ;GAAM,WAAU;aAA1C,CACE,kBAAC,UAAD;IACE,IAAI,IAAO;IACX,IAAI,IAAO;IACR;IACH,MAAK;IACL,QAAQ,EAAE;IACG;IACb,CAAA,EACF,kBAAC,EAAO,QAAR;IACE,IAAI,IAAO;IACX,IAAI,IAAO;IACR;IACH,MAAK;IACG;IACK;IACb,eAAc;IACd,iBAAiB;IACjB,SAAS,EAAE,kBAAkB,IAAS,IAAO,IAAO,GAAM;IAC1D,SAAS,EAAE,kBAAkB,IAAO,GAAM;IAC1C,YAAY;KAAE,UAAU,IAAS,IAAI;KAAM,MAAM;KAAW;IAC5D,CAAA,CACE;MACN,kBAAC,OAAD;GAAK,WAAU;aAAf,CACE,kBAAC,QAAD;IAAM,WAAU;cAAhB,CAA2D,KAAK,MAAM,EAAI,EAAC,IAAQ;OAClF,IAAQ,kBAAC,QAAD;IAAM,WAAU;cAAmC;IAAa,CAAA,GAAG,KACxE;KACF;;;AAcV,SAAgB,EAAU,EACxB,SACA,YAAS,KACT,qBAKC;CACD,IAAM,IAAI,GAAc,EAClB,IAAS,GAAkB,EAC3B,IAAO,EAAK,QAAQ,MAAM,OAAO,SAAS,EAAE,OAAO,IAAI,OAAO,SAAS,EAAE,QAAQ,CAAC;AACxF,KAAI,EAAK,WAAW,EAClB,QAAO,kBAAC,KAAD;EAAG,WAAU;YAA8B;EAAqB,CAAA;CAGzE,IAAM,IAAY,EAAK,KAAK,OAAO;EACjC,OAAO,EAAE;EACT,QAAQ,KAAK,IAAI,EAAE,OAAO;EAC1B,SAAS,CAAC,KAAK,IAAI,EAAE,QAAQ;EAC9B,EAAE;AAEH,QACE,kBAAC,OAAD;EAAK,OAAO;GAAE,OAAO;GAAQ;GAAQ;YACnC,kBAAC,GAAD;GAAqB,OAAM;GAAO,QAAO;aACvC,kBAAC,GAAD;IACE,MAAM;IACN,QAAQ;KAAE,KAAK;KAAG,OAAO;KAAG,QAAQ;KAAG,MAAM;KAAG;IAChD,aAAY;cAHd;KAKE,kBAAC,GAAD;MACE,SAAQ;MACR,MAAM;OAAE,MAAM,EAAE;OAAe,UAAU;OAAI;MAC7C,UAAU,EAAE,QAAQ,EAAE,MAAM;MAC5B,UAAU;MACV,CAAA;KACF,kBAAC,GAAD;MACE,MAAM;OAAE,MAAM,EAAE;OAAe,UAAU;OAAI;MAC7C,UAAU;MACV,UAAU;MACV,OAAO;MACP,gBAAgB,MACd,IAAiB,EAAe,KAAK,IAAI,EAAE,CAAC,GAAG,OAAO,KAAK,IAAI,EAAE,CAAC;MAEpE,CAAA;KACF,kBAAC,GAAD;MAAe,GAAG;MAAG,QAAQ,EAAE;MAAQ,CAAA;KACvC,kBAAC,GAAD;MACE,QAAQ;OAAE,MAAM,EAAE;OAAQ,SAAS;OAAM;MACzC,SACE,kBAAC,GAAD,EACE,iBAAiB,MACf,IAAiB,EAAe,KAAK,IAAI,EAAE,CAAC,GAAG,OAAO,KAAK,IAAI,EAAE,CAAC,EAEpE,CAAA;MAEJ,CAAA;KACF,kBAAC,GAAD;MACE,SAAQ;MACR,MAAK;MACL,MAAM,EAAE;MACR,QAAQ;OAAC;OAAG;OAAG;OAAG;OAAE;MACpB,mBAAmB,CAAC;MACpB,mBAAmB;MACnB,CAAA;KACF,kBAAC,GAAD;MACE,SAAQ;MACR,MAAK;MACL,MAAM,EAAE;MACR,QAAQ;OAAC;OAAG;OAAG;OAAG;OAAE;MACpB,mBAAmB,CAAC;MACpB,mBAAmB;MACnB,CAAA;KACO;;GACS,CAAA;EAClB,CAAA;;AAaV,SAAgB,EAAc,EAC5B,SACA,WACA,UAAO,SACP,YAAS,KACT,qBAOC;CACD,IAAM,IAAI,GAAc,EAClB,IAAS,GAAkB,EAC3B,IAAS,EAAE,KAAK,EAAK,EACrB,IAAO,EAAK,QAAQ,MAAM,OAAO,SAAS,EAAE,EAAE,CAAC,EAC/C,IAAa,QAAQ,GAAO,CAAC,QAAQ,MAAM,GAAG;AAIpD,QAHI,EAAK,SAAS,IACT,kBAAC,KAAD;EAAG,WAAU;YAA8B;EAA6B,CAAA,GAG/E,kBAAC,OAAD;EAAK,OAAO;GAAE,OAAO;GAAQ;GAAQ;YACnC,kBAAC,GAAD;GAAqB,OAAM;GAAO,QAAO;aACvC,kBAAC,GAAD;IAAW,MAAM;IAAM,QAAQ;KAAE,KAAK;KAAG,OAAO;KAAG,QAAQ;KAAG,MAAM;KAAG;cAAvE;KACE,kBAAC,QAAD,EAAA,UACE,kBAAC,kBAAD;MAAgB,IAAI;MAAY,IAAG;MAAI,IAAG;MAAI,IAAG;MAAI,IAAG;gBAAxD,CACE,kBAAC,QAAD;OAAM,QAAO;OAAK,WAAW;OAAQ,aAAa;OAAO,CAAA,EACzD,kBAAC,QAAD;OAAM,QAAO;OAAO,WAAW;OAAQ,aAAa;OAAQ,CAAA,CAC7C;SACZ,CAAA;KACP,kBAAC,GAAD;MACE,SAAQ;MACR,MAAM;OAAE,MAAM,EAAE;OAAe,UAAU;OAAI;MAC7C,UAAU,EAAE,QAAQ,EAAE,MAAM;MAC5B,UAAU;MACV,CAAA;KACF,kBAAC,GAAD;MACE,MAAM;OAAE,MAAM,EAAE;OAAe,UAAU;OAAI;MAC7C,UAAU;MACV,UAAU;MACV,OAAO;MACP,gBAAgB,MAAe,IAAiB,EAAe,EAAE,GAAG,OAAO,EAAE;MAC7E,CAAA;KACF,kBAAC,GAAD,EAAS,SAAS,kBAAC,GAAD,EAA8B,mBAAkB,CAAA,EAAI,CAAA;KACrE,MAAW,KAAA,KAAa,OAAO,SAAS,EAAO,GAC9C,kBAAC,GAAD;MACE,GAAG;MACH,QAAQ,EAAE;MACV,iBAAgB;MAChB,OAAO;OACL,OAAO,IAAiB,UAAU,EAAe,EAAO,KAAK,UAAU;OACvE,UAAU;OACV,MAAM,EAAE;OACR,UAAU;OACX;MACD,CAAA,GACA;KACJ,kBAAC,GAAD;MACE,MAAK;MACL,SAAQ;MACA;MACR,aAAa;MACb,MAAM,QAAQ,EAAW;MACzB,mBAAmB,CAAC;MACpB,mBAAmB;MACnB,KAAK;MACL,CAAA;KACQ;;GACQ,CAAA;EAClB,CAAA;;AAQV,IAAM,IAAoB;AAE1B,SAAgB,EAAiB,EAC/B,UACA,YACA,gBAKC;CACD,IAAM,IAAqB,EAAkB,KAAK,EAAQ,EACpD,IAAe,EAAM,WAAW,MAAM,EAAE,aAAa,KAAK,EAAQ,aAAa,CAAC;AAEtF,QACE,kBAAC,MAAD;EACE,WAAW,EAAG,4CAA4C,EAAU;EACpE,cAAW;YAFb,CAIG,EAAM,KAAK,GAAM,MAAM;GACtB,IAAM,IAAS,MAAM,EAAM,SAAS,GAC9B,IAAO,KAAgB,KAAK,IAAI,GAChC,IAAS,KAAgB,KAAK,MAAM,KAAgB,CAAC,GACrD,IAAQ,IAAO,SAAS,IAAS,WAAW;AAClD,UACE,kBAAC,MAAD;IAEE,WAAU;IACV,gBAAc,IAAS,SAAS,KAAA;cAHlC,CAKE,kBAAC,OAAD;KAAK,WAAU;eAAf,CACE,kBAAC,QAAD;MACE,WAAW,EACT,uGACA,MAAU,UACR,kGACF,MAAU,YACR,8HACF,MAAU,cAAc,wDACzB;MACD,eAAY;gBAEX,IAAO,MAAM,IAAI;MACb,CAAA,EACP,kBAAC,QAAD;MACE,WAAW,EACT,iCACA,IAAS,kCAAkC,sBAC5C;gBAEA;MACI,CAAA,CACH;QACJ,IAQE,OAPF,kBAAC,QAAD;KACE,eAAY;KACZ,WAAW,EACT,kCACA,IAAO,wCAAwC,mBAChD;KACD,CAAA,CAED;MApCE,EAoCF;IAEP,EACD,IACC,kBAAC,MAAD;GAAI,WAAU;GAA2C,gBAAa;aAAtE,CACE,kBAAC,QAAD;IAAM,WAAU;IAAqD,eAAY;IAAS,CAAA,EAC1F,kBAAC,OAAD;IAAK,WAAU;cAAf,CACE,kBAAC,QAAD;KACE,WAAU;KACV,eAAY;eACb;KAEM,CAAA,EACP,kBAAC,QAAD;KAAM,WAAU;eACb;KACI,CAAA,CACH;MACH;OACH,KACD;;;AAQT,SAAgB,EAAS,EACvB,UACA,UACA,UACA,cACA,iBAAc,KACd,UACA,eAAY,SACZ,UAAO,IACP,SACA,gBAgBC;CACD,IAAM,IAAW,IAAY,MAAc,cAAc,KAAS,KAAK,GACjE,IAAW,IAAY,MAAc,cAAc,KAAS,KAAK,GACjE,IAAa,IACf,kDACA,IACE,8CACA,oCACA,IAAO,MAAU,KAAA,KAAa,IAAQ,IAAI,MAAM;AAEtD,QACE,kBAAC,OAAD;EACE,WAAW,EACT,6GACA,gFACA,KAAQ,uDACR,EACD;YANH;GAQG,IACC,kBAAC,QAAD;IACE,eAAY;IACZ,WAAU;IACV,CAAA,GACA;GACJ,kBAAC,OAAD;IAAK,WAAU;cAAf,CACE,kBAAC,KAAD;KAAG,WAAU;eAA+B;KAAU,CAAA,EACrD,IAAO,kBAAC,QAAD;KAAM,WAAU;eAAuB;KAAY,CAAA,GAAG,KAC1D;;GACN,kBAAC,KAAD;IAAG,WAAU;cAAiD;IAAU,CAAA;GACxE,kBAAC,OAAD;IAAK,WAAU;cAAf,CACG,MAAU,KAAA,KAAa,OAAO,SAAS,EAAM,GAC5C,kBAAC,QAAD;KACE,WAAW,EACT,mFACA,EACD;eAJH;MAME,kBAAC,QAAD;OAAM,eAAY;iBAAQ,IAAW,MAAM,IAAW,MAAM;OAAW,CAAA;MACtE;MACA,EAAM,QAAQ,EAAE;MAChB;MACI;SAEP,kBAAC,QAAD,EAAQ,CAAA,EAET,KAAS,EAAM,SAAS,IACvB,kBAAC,OAAD;KAAK,WAAU;eACb,kBAAC,GAAD;MAAW,MAAM;MAAO,MAAM;MAAW,QAAQ;MAAM,CAAA;KACnD,CAAA,GACJ,KACA;;GACF"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"useBrainyRichApi.js","names":[],"sources":["../../../src/brainyrich/hooks/useBrainyRichApi.ts"],"sourcesContent":["/**\n * BrainyRich API hooks\n * @module brainyrich/hooks\n *\n * React-Query hooks wired DIRECTLY to the real `wspace-brainyrich-svc`\n * federated GraphQL contract (the `bra*` operations). Every query/mutation\n * below uses an inline gql string whose fields match the svc\n * `.hive-schema.graphql` exactly. No mock data.\n *\n * Transport: `graphqlFetch({ gateway: 'workspace', workspaceToken: true })` —\n * the host shell supplies the gateway base URL (via `BrainyRichRootProps.apiGatewayUrl`,\n * threaded from `useBrainyRich()`) + a workspace-scoped token.\n */\n\nimport { useInfiniteQuery, useMutation, useQuery, useQueryClient } from '@tanstack/react-query';\nimport { graphqlFetch } from '@burdenoff/fe-libs/shared/graphql';\n\nimport { useBrainyRich } from '../providers/BrainyRichProvider';\nimport { notify, errorMessage } from '../components/notify';\nimport type {\n Connection,\n BraNetWorthSummary,\n BraAccount,\n BraAccountStatus,\n BraPortfolio,\n BraPortfolioStatus,\n BraHolding,\n BraModelPortfolio,\n BraGoal,\n BraGoalStatus,\n BraGoalFunding,\n BraHousehold,\n BraHouseholdStatus,\n BraInsight,\n BraInsightSeverity,\n BraInsightStatus,\n BraTransaction,\n BraTransactionType,\n BraRebalanceProposal,\n BraRebalanceStatus,\n BraCreateAccountInput,\n BraUpdateAccountInput,\n BraCreatePortfolioInput,\n BraUpdatePortfolioInput,\n BraCreateHoldingInput,\n BraUpdateHoldingInput,\n BraCreateModelPortfolioInput,\n BraCreateGoalInput,\n BraUpdateGoalInput,\n BraLinkGoalFundingInput,\n BraCreateHouseholdInput,\n BraUpdateHouseholdInput,\n BraCreateInsightInput,\n BraCreateTransactionInput,\n BraCreateRebalanceProposalInput,\n PaginationInput,\n} from '../types/bra';\n\n// ============================================================================\n// Transport\n// ============================================================================\n\n/**\n * fe-libs `graphqlFetch` coalesces `query` responses in an in-memory cache keyed\n * by operationName+variables for ~15s (mutations are never cached). A read issued\n * right after a write (e.g. the React-Query refetch our `invalidateQueries`\n * triggers) would otherwise return the PRE-mutation response until the TTL\n * expires — making just-created/updated rows invisible until a full reload.\n * fe-libs' documented remedy is that write-performing callers clear those caches;\n * we do exactly that after every bra mutation so every follow-up read is fresh.\n */\ntype GraphqlReadCacheGlobals = {\n __graphqlFetchResponseCache?: { clear: () => void };\n __graphqlFetchPendingResponses?: { clear: () => void };\n __boffGraphQLResponseCache?: { clear: () => void };\n};\n\nconst clearGraphqlReadCaches = (): void => {\n const g = globalThis as GraphqlReadCacheGlobals;\n g.__graphqlFetchResponseCache?.clear();\n g.__graphqlFetchPendingResponses?.clear();\n g.__boffGraphQLResponseCache?.clear();\n};\n\nconst braQuery = async <TData>(\n query: string,\n variables: Record<string, unknown>,\n baseUrl?: string,\n opts?: { suppressGlobalError?: boolean }\n): Promise<TData> => {\n const response = await graphqlFetch<TData>({\n gateway: 'workspace',\n baseUrl,\n query,\n variables,\n workspaceToken: true,\n // When suppressed, fe-libs does NOT dispatch the global BACKEND_ERROR_EVENT\n // (which the host app-shell auto-toasts). Mutations suppress it so their\n // centralized `onError` (mutationFeedback) is the SINGLE toast source — no\n // double-toast against the shell listener. Reads leave it un-suppressed so a\n // failed read still drives the shell's connection indicator / error toast in\n // addition to the page's own ErrorState.\n suppressGlobalErrorEvent: opts?.suppressGlobalError ?? false,\n });\n\n if (response.errors?.length) {\n throw new Error(response.errors[0]?.message ?? 'GraphQL request failed');\n }\n if (!response.data) {\n throw new Error('GraphQL response did not include data');\n }\n return response.data;\n};\n\n/**\n * Mutation transport — identical to `braQuery` but (a) suppresses the global\n * error event so mutation feedback is owned solely by the hooks' `onError`, and\n * (b) clears read caches after so follow-up reads are fresh.\n */\nconst braMutate = async <TData>(\n query: string,\n variables: Record<string, unknown>,\n baseUrl?: string\n): Promise<TData> => {\n const data = await braQuery<TData>(query, variables, baseUrl, { suppressGlobalError: true });\n clearGraphqlReadCaches();\n return data;\n};\n\n// ============================================================================\n// Centralized mutation feedback (fixes the silent-mutation-failure defect)\n// ============================================================================\n\n/**\n * Compose success/error toast feedback onto a React-Query mutation WITHOUT\n * discarding the hook's existing `onSuccess` side-effects (cache invalidation).\n *\n * - `onError` always fires `notify.error(<friendly message>)` — this is the one\n * place mutation failures surface, for every hook, so pages need no per-call\n * error handling.\n * - `onSuccess` runs the caller's invalidation first, then `notify.success`.\n *\n * Call-site handlers passed to `mutate(vars, { onSuccess, onError })` STILL run\n * (React-Query invokes both the hook-level and call-level callbacks), so pages\n * keep closing dialogs etc. on success.\n */\nfunction mutationFeedback<TData, TVars>(opts: {\n success?: string | ((data: TData, vars: TVars) => string);\n onSuccess?: (data: TData, vars: TVars) => void;\n}): {\n onSuccess: (data: TData, vars: TVars) => void;\n onError: (error: unknown) => void;\n} {\n return {\n onSuccess: (data, vars) => {\n opts.onSuccess?.(data, vars);\n if (opts.success) {\n notify.success(typeof opts.success === 'function' ? opts.success(data, vars) : opts.success);\n }\n },\n onError: (error) => notify.error(errorMessage(error)),\n };\n}\n\n// React-Query key roots (one namespace per domain entity).\nconst KEY = {\n netWorth: ['brainyrich', 'net-worth'] as const,\n accounts: ['brainyrich', 'accounts'] as const,\n account: (id: string) => ['brainyrich', 'account', id] as const,\n portfolios: ['brainyrich', 'portfolios'] as const,\n portfolio: (id: string) => ['brainyrich', 'portfolio', id] as const,\n holdings: ['brainyrich', 'holdings'] as const,\n modelPortfolios: ['brainyrich', 'model-portfolios'] as const,\n modelPortfolio: (id: string) => ['brainyrich', 'model-portfolio', id] as const,\n goals: ['brainyrich', 'goals'] as const,\n goal: (id: string) => ['brainyrich', 'goal', id] as const,\n goalFundings: (goalId: string) => ['brainyrich', 'goal-fundings', goalId] as const,\n households: ['brainyrich', 'households'] as const,\n household: (id: string) => ['brainyrich', 'household', id] as const,\n insights: ['brainyrich', 'insights'] as const,\n insight: (id: string) => ['brainyrich', 'insight', id] as const,\n transactions: ['brainyrich', 'transactions'] as const,\n rebalances: ['brainyrich', 'rebalance-proposals'] as const,\n health: ['brainyrich', 'health'] as const,\n};\n\n/** Gateway is offset-based; OMIT `cursor` on the first page (explicit null → 500). */\nconst DEFAULT_PAGE: PaginationInput = { limit: 100 };\n\n// ============================================================================\n// Reusable gql field selections (codegen-free strictness — mirror bra.ts)\n// ============================================================================\n\nconst HOLDING_FIELDS = `\n id workspaceId accountId portfolioId symbol name assetClass quantity lastPrice\n costBasis marketValue currency asOf createdAt updatedAt\n`;\n\nconst TRANSACTION_FIELDS = `\n id workspaceId accountId holdingId type symbol quantity price amount fee currency\n tradeDate settleDate notes createdAt updatedAt\n`;\n\nconst ACCOUNT_FIELDS = `\n id workspaceId ownerId householdId name type status institution accountMask\n cashBalance currency isManual createdAt updatedAt\n`;\n\nconst PORTFOLIO_FIELDS = `\n id workspaceId ownerId householdId name description status baseCurrency\n modelPortfolioId driftThresholdPct targetAllocation tags createdAt updatedAt\n`;\n\nconst MODEL_ALLOCATION_FIELDS = `\n id workspaceId modelPortfolioId assetClass targetPct createdAt updatedAt\n`;\n\nconst MODEL_PORTFOLIO_FIELDS = `\n id workspaceId name description riskProfile baseCurrency isActive createdAt updatedAt\n`;\n\nconst GOAL_FUNDING_FIELDS = `\n id workspaceId goalId accountId allocationPct fixedAmount createdAt updatedAt\n`;\n\nconst GOAL_FIELDS = `\n id workspaceId ownerId householdId name type status projection targetAmount\n targetDate monthlyContribution priority currency notes tags createdAt updatedAt\n`;\n\nconst HOUSEHOLD_FIELDS = `\n id workspaceId name status riskProfile advisorId aum currency primaryContactName\n primaryContactEmail notes tags createdAt updatedAt\n`;\n\nconst INSIGHT_FIELDS = `\n id workspaceId ownerId type severity status title detail metrics subjectId\n subjectType acknowledgedById resolvedAt createdAt updatedAt\n`;\n\nconst REBALANCE_FIELDS = `\n id workspaceId portfolioId householdId status driftPct rationale trades\n proposedById approvedById executedAt createdAt updatedAt\n`;\n\nconst NET_WORTH_FIELDS = `\n workspaceId ownerId totalNetWorth totalMarketValue totalCash accountCount currency\n byAssetClass { assetClass marketValue }\n`;\n\n// ============================================================================\n// Filter param shapes (exported so page agents can type their call sites)\n// ============================================================================\n\nexport interface AccountFilters {\n householdId?: string;\n status?: BraAccountStatus;\n pagination?: PaginationInput;\n}\n\nexport interface PortfolioFilters {\n householdId?: string;\n status?: BraPortfolioStatus;\n pagination?: PaginationInput;\n}\n\nexport interface HoldingFilters {\n accountId?: string;\n portfolioId?: string;\n}\n\nexport interface GoalFilters {\n householdId?: string;\n status?: BraGoalStatus;\n pagination?: PaginationInput;\n}\n\nexport interface HouseholdFilters {\n status?: BraHouseholdStatus;\n pagination?: PaginationInput;\n}\n\nexport interface InsightFilters {\n severity?: BraInsightSeverity;\n status?: BraInsightStatus;\n subjectId?: string;\n subjectType?: string;\n pagination?: PaginationInput;\n}\n\nexport interface TransactionFilters {\n accountId?: string;\n type?: BraTransactionType;\n pagination?: PaginationInput;\n}\n\nexport interface RebalanceFilters {\n householdId?: string;\n portfolioId?: string;\n status?: BraRebalanceStatus;\n}\n\n// ============================================================================\n// Health\n// ============================================================================\n\nexport const useBraHealth = () => {\n const { apiGatewayUrl } = useBrainyRich();\n return useQuery({\n queryKey: KEY.health,\n queryFn: async () => {\n const result = await braQuery<{ braHealth: string }>(\n `query BraHealth { braHealth }`,\n {},\n apiGatewayUrl\n );\n return result.braHealth;\n },\n });\n};\n\n// ============================================================================\n// Net worth (Overview)\n// ============================================================================\n\nexport const useNetWorthSummary = (ownerId?: string) => {\n const { apiGatewayUrl } = useBrainyRich();\n return useQuery({\n queryKey: [...KEY.netWorth, ownerId ?? 'me'],\n queryFn: async () => {\n const result = await braQuery<{ braNetWorthSummary: BraNetWorthSummary }>(\n `query BraNetWorthSummary($ownerId: ID) {\n braNetWorthSummary(ownerId: $ownerId) { ${NET_WORTH_FIELDS} }\n }`,\n { ownerId },\n apiGatewayUrl\n );\n return result.braNetWorthSummary;\n },\n });\n};\n\n// ============================================================================\n// Accounts\n// ============================================================================\n\nexport const useAccounts = (params: AccountFilters = {}) => {\n const { apiGatewayUrl } = useBrainyRich();\n const query = useQuery({\n queryKey: [...KEY.accounts, params],\n queryFn: async () => {\n const result = await braQuery<{ braListAccounts: Connection<BraAccount> }>(\n `query BraListAccounts($householdId: ID, $status: BraAccountStatus, $pagination: PaginationInput) {\n braListAccounts(householdId: $householdId, status: $status, pagination: $pagination) {\n items { ${ACCOUNT_FIELDS} }\n pageInfo { cursor hasMore }\n }\n }`,\n {\n householdId: params.householdId,\n status: params.status,\n pagination: params.pagination ?? DEFAULT_PAGE,\n },\n apiGatewayUrl\n );\n return result.braListAccounts;\n },\n });\n return {\n ...query,\n data: query.data?.items ?? [],\n pageInfo: query.data?.pageInfo,\n };\n};\n\nexport const useAccount = (id: string | undefined) => {\n const { apiGatewayUrl } = useBrainyRich();\n return useQuery({\n queryKey: KEY.account(id ?? ''),\n enabled: Boolean(id),\n queryFn: async () => {\n const result = await braQuery<{ braAccount: BraAccount | null }>(\n `query BraAccount($id: ID!) {\n braAccount(id: $id) {\n ${ACCOUNT_FIELDS}\n holdings { ${HOLDING_FIELDS} }\n transactions { ${TRANSACTION_FIELDS} }\n }\n }`,\n { id },\n apiGatewayUrl\n );\n return result.braAccount;\n },\n });\n};\n\nexport const useCreateAccount = () => {\n const { apiGatewayUrl } = useBrainyRich();\n const qc = useQueryClient();\n return useMutation({\n mutationFn: async (input: BraCreateAccountInput) => {\n const result = await braMutate<{ braCreateAccount: BraAccount }>(\n `mutation BraCreateAccount($input: BraCreateAccountInput!) {\n braCreateAccount(input: $input) { ${ACCOUNT_FIELDS} }\n }`,\n { input },\n apiGatewayUrl\n );\n return result.braCreateAccount;\n },\n ...mutationFeedback<BraAccount, BraCreateAccountInput>({\n success: 'Account created',\n onSuccess: () => {\n qc.invalidateQueries({ queryKey: KEY.accounts });\n qc.invalidateQueries({ queryKey: KEY.netWorth });\n },\n }),\n });\n};\n\nexport const useUpdateAccount = () => {\n const { apiGatewayUrl } = useBrainyRich();\n const qc = useQueryClient();\n return useMutation({\n mutationFn: async (vars: { id: string; input: BraUpdateAccountInput }) => {\n const result = await braMutate<{ braUpdateAccount: BraAccount }>(\n `mutation BraUpdateAccount($id: ID!, $input: BraUpdateAccountInput!) {\n braUpdateAccount(id: $id, input: $input) { ${ACCOUNT_FIELDS} }\n }`,\n vars,\n apiGatewayUrl\n );\n return result.braUpdateAccount;\n },\n ...mutationFeedback<BraAccount, { id: string; input: BraUpdateAccountInput }>({\n success: 'Account updated',\n onSuccess: (data) => {\n qc.invalidateQueries({ queryKey: KEY.accounts });\n qc.invalidateQueries({ queryKey: KEY.account(data.id) });\n qc.invalidateQueries({ queryKey: KEY.netWorth });\n },\n }),\n });\n};\n\nexport const useArchiveAccount = () => {\n const { apiGatewayUrl } = useBrainyRich();\n const qc = useQueryClient();\n return useMutation({\n mutationFn: async (id: string) => {\n const result = await braMutate<{ braArchiveAccount: boolean }>(\n `mutation BraArchiveAccount($id: ID!) { braArchiveAccount(id: $id) }`,\n { id },\n apiGatewayUrl\n );\n return result.braArchiveAccount;\n },\n ...mutationFeedback<boolean, string>({\n success: 'Account archived',\n onSuccess: () => {\n qc.invalidateQueries({ queryKey: KEY.accounts });\n qc.invalidateQueries({ queryKey: KEY.netWorth });\n },\n }),\n });\n};\n\n// ============================================================================\n// Portfolios\n// ============================================================================\n\nexport const usePortfolios = (params: PortfolioFilters = {}) => {\n const { apiGatewayUrl } = useBrainyRich();\n const query = useQuery({\n queryKey: [...KEY.portfolios, params],\n queryFn: async () => {\n const result = await braQuery<{ braListPortfolios: Connection<BraPortfolio> }>(\n `query BraListPortfolios($householdId: ID, $status: BraPortfolioStatus, $pagination: PaginationInput) {\n braListPortfolios(householdId: $householdId, status: $status, pagination: $pagination) {\n items { ${PORTFOLIO_FIELDS} }\n pageInfo { cursor hasMore }\n }\n }`,\n {\n householdId: params.householdId,\n status: params.status,\n pagination: params.pagination ?? DEFAULT_PAGE,\n },\n apiGatewayUrl\n );\n return result.braListPortfolios;\n },\n });\n return {\n ...query,\n data: query.data?.items ?? [],\n pageInfo: query.data?.pageInfo,\n };\n};\n\nexport const usePortfolio = (id: string | undefined) => {\n const { apiGatewayUrl } = useBrainyRich();\n return useQuery({\n queryKey: KEY.portfolio(id ?? ''),\n enabled: Boolean(id),\n queryFn: async () => {\n const result = await braQuery<{ braPortfolio: BraPortfolio | null }>(\n `query BraPortfolio($id: ID!) {\n braPortfolio(id: $id) {\n ${PORTFOLIO_FIELDS}\n holdings { ${HOLDING_FIELDS} }\n }\n }`,\n { id },\n apiGatewayUrl\n );\n return result.braPortfolio;\n },\n });\n};\n\nexport const useCreatePortfolio = () => {\n const { apiGatewayUrl } = useBrainyRich();\n const qc = useQueryClient();\n return useMutation({\n mutationFn: async (input: BraCreatePortfolioInput) => {\n const result = await braMutate<{ braCreatePortfolio: BraPortfolio }>(\n `mutation BraCreatePortfolio($input: BraCreatePortfolioInput!) {\n braCreatePortfolio(input: $input) { ${PORTFOLIO_FIELDS} }\n }`,\n { input },\n apiGatewayUrl\n );\n return result.braCreatePortfolio;\n },\n ...mutationFeedback<BraPortfolio, BraCreatePortfolioInput>({\n success: 'Portfolio created',\n onSuccess: () => qc.invalidateQueries({ queryKey: KEY.portfolios }),\n }),\n });\n};\n\nexport const useUpdatePortfolio = () => {\n const { apiGatewayUrl } = useBrainyRich();\n const qc = useQueryClient();\n return useMutation({\n mutationFn: async (vars: { id: string; input: BraUpdatePortfolioInput }) => {\n const result = await braMutate<{ braUpdatePortfolio: BraPortfolio }>(\n `mutation BraUpdatePortfolio($id: ID!, $input: BraUpdatePortfolioInput!) {\n braUpdatePortfolio(id: $id, input: $input) { ${PORTFOLIO_FIELDS} }\n }`,\n vars,\n apiGatewayUrl\n );\n return result.braUpdatePortfolio;\n },\n ...mutationFeedback<BraPortfolio, { id: string; input: BraUpdatePortfolioInput }>({\n success: 'Portfolio updated',\n onSuccess: (data) => {\n qc.invalidateQueries({ queryKey: KEY.portfolios });\n qc.invalidateQueries({ queryKey: KEY.portfolio(data.id) });\n },\n }),\n });\n};\n\nexport const useArchivePortfolio = () => {\n const { apiGatewayUrl } = useBrainyRich();\n const qc = useQueryClient();\n return useMutation({\n mutationFn: async (id: string) => {\n const result = await braMutate<{ braArchivePortfolio: boolean }>(\n `mutation BraArchivePortfolio($id: ID!) { braArchivePortfolio(id: $id) }`,\n { id },\n apiGatewayUrl\n );\n return result.braArchivePortfolio;\n },\n ...mutationFeedback<boolean, string>({\n success: 'Portfolio archived',\n onSuccess: () => qc.invalidateQueries({ queryKey: KEY.portfolios }),\n }),\n });\n};\n\n// ============================================================================\n// Holdings\n// ============================================================================\n\nexport const useHoldings = (params: HoldingFilters) => {\n const { apiGatewayUrl } = useBrainyRich();\n const query = useQuery({\n queryKey: [...KEY.holdings, params],\n enabled: Boolean(params.accountId || params.portfolioId),\n queryFn: async () => {\n const result = await braQuery<{ braListHoldings: BraHolding[] }>(\n `query BraListHoldings($accountId: ID, $portfolioId: ID) {\n braListHoldings(accountId: $accountId, portfolioId: $portfolioId) { ${HOLDING_FIELDS} }\n }`,\n { accountId: params.accountId, portfolioId: params.portfolioId },\n apiGatewayUrl\n );\n return result.braListHoldings;\n },\n });\n return { ...query, data: query.data ?? [] };\n};\n\nexport const useCreateHolding = () => {\n const { apiGatewayUrl } = useBrainyRich();\n const qc = useQueryClient();\n return useMutation({\n mutationFn: async (input: BraCreateHoldingInput) => {\n const result = await braMutate<{ braCreateHolding: BraHolding }>(\n `mutation BraCreateHolding($input: BraCreateHoldingInput!) {\n braCreateHolding(input: $input) { ${HOLDING_FIELDS} }\n }`,\n { input },\n apiGatewayUrl\n );\n return result.braCreateHolding;\n },\n ...mutationFeedback<BraHolding, BraCreateHoldingInput>({\n success: 'Holding added',\n onSuccess: (data) => {\n qc.invalidateQueries({ queryKey: KEY.holdings });\n qc.invalidateQueries({ queryKey: KEY.account(data.accountId) });\n if (data.portfolioId) qc.invalidateQueries({ queryKey: KEY.portfolio(data.portfolioId) });\n qc.invalidateQueries({ queryKey: KEY.netWorth });\n },\n }),\n });\n};\n\nexport const useUpdateHolding = () => {\n const { apiGatewayUrl } = useBrainyRich();\n const qc = useQueryClient();\n return useMutation({\n mutationFn: async (vars: { id: string; input: BraUpdateHoldingInput }) => {\n const result = await braMutate<{ braUpdateHolding: BraHolding }>(\n `mutation BraUpdateHolding($id: ID!, $input: BraUpdateHoldingInput!) {\n braUpdateHolding(id: $id, input: $input) { ${HOLDING_FIELDS} }\n }`,\n vars,\n apiGatewayUrl\n );\n return result.braUpdateHolding;\n },\n ...mutationFeedback<BraHolding, { id: string; input: BraUpdateHoldingInput }>({\n success: 'Holding updated',\n onSuccess: (data) => {\n qc.invalidateQueries({ queryKey: KEY.holdings });\n qc.invalidateQueries({ queryKey: KEY.account(data.accountId) });\n if (data.portfolioId) qc.invalidateQueries({ queryKey: KEY.portfolio(data.portfolioId) });\n qc.invalidateQueries({ queryKey: KEY.netWorth });\n },\n }),\n });\n};\n\nexport const useDeleteHolding = () => {\n const { apiGatewayUrl } = useBrainyRich();\n const qc = useQueryClient();\n return useMutation({\n mutationFn: async (id: string) => {\n const result = await braMutate<{ braDeleteHolding: boolean }>(\n `mutation BraDeleteHolding($id: ID!) { braDeleteHolding(id: $id) }`,\n { id },\n apiGatewayUrl\n );\n return result.braDeleteHolding;\n },\n ...mutationFeedback<boolean, string>({\n success: 'Holding removed',\n onSuccess: () => {\n qc.invalidateQueries({ queryKey: KEY.holdings });\n qc.invalidateQueries({ queryKey: KEY.accounts });\n qc.invalidateQueries({ queryKey: KEY.portfolios });\n qc.invalidateQueries({ queryKey: KEY.netWorth });\n },\n }),\n });\n};\n\n// ============================================================================\n// Model portfolios\n// ============================================================================\n\nexport const useModelPortfolios = () => {\n const { apiGatewayUrl } = useBrainyRich();\n const query = useQuery({\n queryKey: KEY.modelPortfolios,\n queryFn: async () => {\n const result = await braQuery<{ braListModelPortfolios: BraModelPortfolio[] }>(\n `query BraListModelPortfolios {\n braListModelPortfolios {\n ${MODEL_PORTFOLIO_FIELDS}\n allocations { ${MODEL_ALLOCATION_FIELDS} }\n }\n }`,\n {},\n apiGatewayUrl\n );\n return result.braListModelPortfolios;\n },\n });\n return { ...query, data: query.data ?? [] };\n};\n\nexport const useModelPortfolio = (id: string | undefined) => {\n const { apiGatewayUrl } = useBrainyRich();\n return useQuery({\n queryKey: KEY.modelPortfolio(id ?? ''),\n enabled: Boolean(id),\n queryFn: async () => {\n const result = await braQuery<{ braModelPortfolio: BraModelPortfolio | null }>(\n `query BraModelPortfolio($id: ID!) {\n braModelPortfolio(id: $id) {\n ${MODEL_PORTFOLIO_FIELDS}\n allocations { ${MODEL_ALLOCATION_FIELDS} }\n }\n }`,\n { id },\n apiGatewayUrl\n );\n return result.braModelPortfolio;\n },\n });\n};\n\nexport const useCreateModelPortfolio = () => {\n const { apiGatewayUrl } = useBrainyRich();\n const qc = useQueryClient();\n return useMutation({\n mutationFn: async (input: BraCreateModelPortfolioInput) => {\n const result = await braMutate<{ braCreateModelPortfolio: BraModelPortfolio }>(\n `mutation BraCreateModelPortfolio($input: BraCreateModelPortfolioInput!) {\n braCreateModelPortfolio(input: $input) {\n ${MODEL_PORTFOLIO_FIELDS}\n allocations { ${MODEL_ALLOCATION_FIELDS} }\n }\n }`,\n { input },\n apiGatewayUrl\n );\n return result.braCreateModelPortfolio;\n },\n ...mutationFeedback<BraModelPortfolio, BraCreateModelPortfolioInput>({\n success: 'Model portfolio created',\n onSuccess: () => qc.invalidateQueries({ queryKey: KEY.modelPortfolios }),\n }),\n });\n};\n\n// ============================================================================\n// Goals\n// ============================================================================\n\nexport const useGoals = (params: GoalFilters = {}) => {\n const { apiGatewayUrl } = useBrainyRich();\n const query = useQuery({\n queryKey: [...KEY.goals, params],\n queryFn: async () => {\n const result = await braQuery<{ braListGoals: Connection<BraGoal> }>(\n `query BraListGoals($householdId: ID, $status: BraGoalStatus, $pagination: PaginationInput) {\n braListGoals(householdId: $householdId, status: $status, pagination: $pagination) {\n items { ${GOAL_FIELDS} }\n pageInfo { cursor hasMore }\n }\n }`,\n {\n householdId: params.householdId,\n status: params.status,\n pagination: params.pagination ?? DEFAULT_PAGE,\n },\n apiGatewayUrl\n );\n return result.braListGoals;\n },\n });\n return {\n ...query,\n data: query.data?.items ?? [],\n pageInfo: query.data?.pageInfo,\n };\n};\n\nexport const useGoal = (id: string | undefined) => {\n const { apiGatewayUrl } = useBrainyRich();\n return useQuery({\n queryKey: KEY.goal(id ?? ''),\n enabled: Boolean(id),\n queryFn: async () => {\n const result = await braQuery<{ braGoal: BraGoal | null }>(\n `query BraGoal($id: ID!) {\n braGoal(id: $id) {\n ${GOAL_FIELDS}\n fundings { ${GOAL_FUNDING_FIELDS} }\n }\n }`,\n { id },\n apiGatewayUrl\n );\n return result.braGoal;\n },\n });\n};\n\nexport const useGoalFundings = (goalId: string | undefined) => {\n const { apiGatewayUrl } = useBrainyRich();\n const query = useQuery({\n queryKey: KEY.goalFundings(goalId ?? ''),\n enabled: Boolean(goalId),\n queryFn: async () => {\n const result = await braQuery<{ braListGoalFundings: BraGoalFunding[] }>(\n `query BraListGoalFundings($goalId: ID!) {\n braListGoalFundings(goalId: $goalId) { ${GOAL_FUNDING_FIELDS} }\n }`,\n { goalId },\n apiGatewayUrl\n );\n return result.braListGoalFundings;\n },\n });\n return { ...query, data: query.data ?? [] };\n};\n\nexport const useCreateGoal = () => {\n const { apiGatewayUrl } = useBrainyRich();\n const qc = useQueryClient();\n return useMutation({\n mutationFn: async (input: BraCreateGoalInput) => {\n const result = await braMutate<{ braCreateGoal: BraGoal }>(\n `mutation BraCreateGoal($input: BraCreateGoalInput!) {\n braCreateGoal(input: $input) { ${GOAL_FIELDS} }\n }`,\n { input },\n apiGatewayUrl\n );\n return result.braCreateGoal;\n },\n ...mutationFeedback<BraGoal, BraCreateGoalInput>({\n success: 'Goal created',\n onSuccess: () => qc.invalidateQueries({ queryKey: KEY.goals }),\n }),\n });\n};\n\nexport const useUpdateGoal = () => {\n const { apiGatewayUrl } = useBrainyRich();\n const qc = useQueryClient();\n return useMutation({\n mutationFn: async (vars: { id: string; input: BraUpdateGoalInput }) => {\n const result = await braMutate<{ braUpdateGoal: BraGoal }>(\n `mutation BraUpdateGoal($id: ID!, $input: BraUpdateGoalInput!) {\n braUpdateGoal(id: $id, input: $input) { ${GOAL_FIELDS} }\n }`,\n vars,\n apiGatewayUrl\n );\n return result.braUpdateGoal;\n },\n ...mutationFeedback<BraGoal, { id: string; input: BraUpdateGoalInput }>({\n success: 'Goal updated',\n onSuccess: (data) => {\n qc.invalidateQueries({ queryKey: KEY.goals });\n qc.invalidateQueries({ queryKey: KEY.goal(data.id) });\n },\n }),\n });\n};\n\nexport const useArchiveGoal = () => {\n const { apiGatewayUrl } = useBrainyRich();\n const qc = useQueryClient();\n return useMutation({\n mutationFn: async (id: string) => {\n const result = await braMutate<{ braArchiveGoal: boolean }>(\n `mutation BraArchiveGoal($id: ID!) { braArchiveGoal(id: $id) }`,\n { id },\n apiGatewayUrl\n );\n return result.braArchiveGoal;\n },\n ...mutationFeedback<boolean, string>({\n success: 'Goal archived',\n onSuccess: () => qc.invalidateQueries({ queryKey: KEY.goals }),\n }),\n });\n};\n\nexport const useRecalcGoalProjection = () => {\n const { apiGatewayUrl } = useBrainyRich();\n const qc = useQueryClient();\n return useMutation({\n mutationFn: async (vars: { id: string; fundedAmount: number }) => {\n const result = await braMutate<{ braRecalcGoalProjection: BraGoal }>(\n `mutation BraRecalcGoalProjection($id: ID!, $fundedAmount: Float!) {\n braRecalcGoalProjection(id: $id, fundedAmount: $fundedAmount) { ${GOAL_FIELDS} }\n }`,\n vars,\n apiGatewayUrl\n );\n return result.braRecalcGoalProjection;\n },\n ...mutationFeedback<BraGoal, { id: string; fundedAmount: number }>({\n success: 'Projection recalculated',\n onSuccess: (data) => {\n qc.invalidateQueries({ queryKey: KEY.goals });\n qc.invalidateQueries({ queryKey: KEY.goal(data.id) });\n },\n }),\n });\n};\n\nexport const useLinkGoalFunding = () => {\n const { apiGatewayUrl } = useBrainyRich();\n const qc = useQueryClient();\n return useMutation({\n mutationFn: async (input: BraLinkGoalFundingInput) => {\n const result = await braMutate<{ braLinkGoalFunding: BraGoalFunding }>(\n `mutation BraLinkGoalFunding($input: BraLinkGoalFundingInput!) {\n braLinkGoalFunding(input: $input) { ${GOAL_FUNDING_FIELDS} }\n }`,\n { input },\n apiGatewayUrl\n );\n return result.braLinkGoalFunding;\n },\n ...mutationFeedback<BraGoalFunding, BraLinkGoalFundingInput>({\n success: 'Funding linked',\n onSuccess: (data) => {\n qc.invalidateQueries({ queryKey: KEY.goalFundings(data.goalId) });\n qc.invalidateQueries({ queryKey: KEY.goal(data.goalId) });\n },\n }),\n });\n};\n\nexport const useUnlinkGoalFunding = () => {\n const { apiGatewayUrl } = useBrainyRich();\n const qc = useQueryClient();\n return useMutation({\n mutationFn: async (id: string) => {\n const result = await braMutate<{ braUnlinkGoalFunding: boolean }>(\n `mutation BraUnlinkGoalFunding($id: ID!) { braUnlinkGoalFunding(id: $id) }`,\n { id },\n apiGatewayUrl\n );\n return result.braUnlinkGoalFunding;\n },\n ...mutationFeedback<boolean, string>({\n success: 'Funding unlinked',\n onSuccess: () => {\n qc.invalidateQueries({ queryKey: KEY.goals });\n qc.invalidateQueries({ queryKey: [...KEY.goals] });\n qc.invalidateQueries({ queryKey: ['brainyrich', 'goal-fundings'] });\n qc.invalidateQueries({ queryKey: ['brainyrich', 'goal'] });\n },\n }),\n });\n};\n\n// ============================================================================\n// Households\n// ============================================================================\n\nexport const useHouseholds = (params: HouseholdFilters = {}) => {\n const { apiGatewayUrl } = useBrainyRich();\n const query = useQuery({\n queryKey: [...KEY.households, params],\n queryFn: async () => {\n const result = await braQuery<{ braListHouseholds: Connection<BraHousehold> }>(\n `query BraListHouseholds($status: BraHouseholdStatus, $pagination: PaginationInput) {\n braListHouseholds(status: $status, pagination: $pagination) {\n items { ${HOUSEHOLD_FIELDS} }\n pageInfo { cursor hasMore }\n }\n }`,\n { status: params.status, pagination: params.pagination ?? DEFAULT_PAGE },\n apiGatewayUrl\n );\n return result.braListHouseholds;\n },\n });\n return {\n ...query,\n data: query.data?.items ?? [],\n pageInfo: query.data?.pageInfo,\n };\n};\n\nexport const useHousehold = (id: string | undefined) => {\n const { apiGatewayUrl } = useBrainyRich();\n return useQuery({\n queryKey: KEY.household(id ?? ''),\n enabled: Boolean(id),\n queryFn: async () => {\n const result = await braQuery<{ braHousehold: BraHousehold | null }>(\n `query BraHousehold($id: ID!) {\n braHousehold(id: $id) { ${HOUSEHOLD_FIELDS} }\n }`,\n { id },\n apiGatewayUrl\n );\n return result.braHousehold;\n },\n });\n};\n\nexport const useCreateHousehold = () => {\n const { apiGatewayUrl } = useBrainyRich();\n const qc = useQueryClient();\n return useMutation({\n mutationFn: async (input: BraCreateHouseholdInput) => {\n const result = await braMutate<{ braCreateHousehold: BraHousehold }>(\n `mutation BraCreateHousehold($input: BraCreateHouseholdInput!) {\n braCreateHousehold(input: $input) { ${HOUSEHOLD_FIELDS} }\n }`,\n { input },\n apiGatewayUrl\n );\n return result.braCreateHousehold;\n },\n ...mutationFeedback<BraHousehold, BraCreateHouseholdInput>({\n success: 'Household created',\n onSuccess: () => qc.invalidateQueries({ queryKey: KEY.households }),\n }),\n });\n};\n\nexport const useUpdateHousehold = () => {\n const { apiGatewayUrl } = useBrainyRich();\n const qc = useQueryClient();\n return useMutation({\n mutationFn: async (vars: { id: string; input: BraUpdateHouseholdInput }) => {\n const result = await braMutate<{ braUpdateHousehold: BraHousehold }>(\n `mutation BraUpdateHousehold($id: ID!, $input: BraUpdateHouseholdInput!) {\n braUpdateHousehold(id: $id, input: $input) { ${HOUSEHOLD_FIELDS} }\n }`,\n vars,\n apiGatewayUrl\n );\n return result.braUpdateHousehold;\n },\n ...mutationFeedback<BraHousehold, { id: string; input: BraUpdateHouseholdInput }>({\n success: 'Household updated',\n onSuccess: (data) => {\n qc.invalidateQueries({ queryKey: KEY.households });\n qc.invalidateQueries({ queryKey: KEY.household(data.id) });\n },\n }),\n });\n};\n\nexport const useArchiveHousehold = () => {\n const { apiGatewayUrl } = useBrainyRich();\n const qc = useQueryClient();\n return useMutation({\n mutationFn: async (id: string) => {\n const result = await braMutate<{ braArchiveHousehold: boolean }>(\n `mutation BraArchiveHousehold($id: ID!) { braArchiveHousehold(id: $id) }`,\n { id },\n apiGatewayUrl\n );\n return result.braArchiveHousehold;\n },\n ...mutationFeedback<boolean, string>({\n success: 'Household archived',\n onSuccess: () => qc.invalidateQueries({ queryKey: KEY.households }),\n }),\n });\n};\n\n// ============================================================================\n// Insights\n// ============================================================================\n\nexport const useInsights = (params: InsightFilters = {}) => {\n const { apiGatewayUrl } = useBrainyRich();\n const query = useQuery({\n queryKey: [...KEY.insights, params],\n queryFn: async () => {\n const result = await braQuery<{ braListInsights: Connection<BraInsight> }>(\n `query BraListInsights($severity: BraInsightSeverity, $status: BraInsightStatus, $subjectId: ID, $subjectType: String, $pagination: PaginationInput) {\n braListInsights(severity: $severity, status: $status, subjectId: $subjectId, subjectType: $subjectType, pagination: $pagination) {\n items { ${INSIGHT_FIELDS} }\n pageInfo { cursor hasMore }\n }\n }`,\n {\n severity: params.severity,\n status: params.status,\n subjectId: params.subjectId,\n subjectType: params.subjectType,\n pagination: params.pagination ?? DEFAULT_PAGE,\n },\n apiGatewayUrl\n );\n return result.braListInsights;\n },\n });\n return {\n ...query,\n data: query.data?.items ?? [],\n pageInfo: query.data?.pageInfo,\n };\n};\n\nexport const useInsight = (id: string | undefined) => {\n const { apiGatewayUrl } = useBrainyRich();\n return useQuery({\n queryKey: KEY.insight(id ?? ''),\n enabled: Boolean(id),\n queryFn: async () => {\n const result = await braQuery<{ braInsight: BraInsight | null }>(\n `query BraInsight($id: ID!) {\n braInsight(id: $id) { ${INSIGHT_FIELDS} }\n }`,\n { id },\n apiGatewayUrl\n );\n return result.braInsight;\n },\n });\n};\n\nexport const useCreateInsight = () => {\n const { apiGatewayUrl } = useBrainyRich();\n const qc = useQueryClient();\n return useMutation({\n mutationFn: async (input: BraCreateInsightInput) => {\n const result = await braMutate<{ braCreateInsight: BraInsight }>(\n `mutation BraCreateInsight($input: BraCreateInsightInput!) {\n braCreateInsight(input: $input) { ${INSIGHT_FIELDS} }\n }`,\n { input },\n apiGatewayUrl\n );\n return result.braCreateInsight;\n },\n ...mutationFeedback<BraInsight, BraCreateInsightInput>({\n success: 'Insight created',\n onSuccess: () => qc.invalidateQueries({ queryKey: KEY.insights }),\n }),\n });\n};\n\nexport const useAcknowledgeInsight = () => {\n const { apiGatewayUrl } = useBrainyRich();\n const qc = useQueryClient();\n return useMutation({\n mutationFn: async (id: string) => {\n const result = await braMutate<{ braAcknowledgeInsight: BraInsight }>(\n `mutation BraAcknowledgeInsight($id: ID!) {\n braAcknowledgeInsight(id: $id) { ${INSIGHT_FIELDS} }\n }`,\n { id },\n apiGatewayUrl\n );\n return result.braAcknowledgeInsight;\n },\n ...mutationFeedback<BraInsight, string>({\n success: 'Insight acknowledged',\n onSuccess: (data) => {\n qc.invalidateQueries({ queryKey: KEY.insights });\n qc.invalidateQueries({ queryKey: KEY.insight(data.id) });\n },\n }),\n });\n};\n\nexport const useDismissInsight = () => {\n const { apiGatewayUrl } = useBrainyRich();\n const qc = useQueryClient();\n return useMutation({\n mutationFn: async (id: string) => {\n const result = await braMutate<{ braDismissInsight: BraInsight }>(\n `mutation BraDismissInsight($id: ID!) {\n braDismissInsight(id: $id) { ${INSIGHT_FIELDS} }\n }`,\n { id },\n apiGatewayUrl\n );\n return result.braDismissInsight;\n },\n ...mutationFeedback<BraInsight, string>({\n success: 'Insight dismissed',\n onSuccess: (data) => {\n qc.invalidateQueries({ queryKey: KEY.insights });\n qc.invalidateQueries({ queryKey: KEY.insight(data.id) });\n },\n }),\n });\n};\n\nexport const useResolveInsight = () => {\n const { apiGatewayUrl } = useBrainyRich();\n const qc = useQueryClient();\n return useMutation({\n mutationFn: async (id: string) => {\n const result = await braMutate<{ braResolveInsight: BraInsight }>(\n `mutation BraResolveInsight($id: ID!) {\n braResolveInsight(id: $id) { ${INSIGHT_FIELDS} }\n }`,\n { id },\n apiGatewayUrl\n );\n return result.braResolveInsight;\n },\n ...mutationFeedback<BraInsight, string>({\n success: 'Insight resolved',\n onSuccess: (data) => {\n qc.invalidateQueries({ queryKey: KEY.insights });\n qc.invalidateQueries({ queryKey: KEY.insight(data.id) });\n },\n }),\n });\n};\n\n// ============================================================================\n// Transactions\n// ============================================================================\n\nexport const useTransactions = (params: TransactionFilters = {}) => {\n const { apiGatewayUrl } = useBrainyRich();\n const query = useQuery({\n queryKey: [...KEY.transactions, params],\n queryFn: async () => {\n const result = await braQuery<{ braListTransactions: Connection<BraTransaction> }>(\n `query BraListTransactions($accountId: ID, $type: BraTransactionType, $pagination: PaginationInput) {\n braListTransactions(accountId: $accountId, type: $type, pagination: $pagination) {\n items { ${TRANSACTION_FIELDS} }\n pageInfo { cursor hasMore }\n }\n }`,\n {\n accountId: params.accountId,\n type: params.type,\n pagination: params.pagination ?? DEFAULT_PAGE,\n },\n apiGatewayUrl\n );\n return result.braListTransactions;\n },\n });\n return {\n ...query,\n data: query.data?.items ?? [],\n pageInfo: query.data?.pageInfo,\n };\n};\n\nexport const useRecordTransaction = () => {\n const { apiGatewayUrl } = useBrainyRich();\n const qc = useQueryClient();\n return useMutation({\n mutationFn: async (input: BraCreateTransactionInput) => {\n const result = await braMutate<{ braRecordTransaction: BraTransaction }>(\n `mutation BraRecordTransaction($input: BraCreateTransactionInput!) {\n braRecordTransaction(input: $input) { ${TRANSACTION_FIELDS} }\n }`,\n { input },\n apiGatewayUrl\n );\n return result.braRecordTransaction;\n },\n ...mutationFeedback<BraTransaction, BraCreateTransactionInput>({\n success: 'Transaction recorded',\n onSuccess: (data) => {\n qc.invalidateQueries({ queryKey: KEY.transactions });\n qc.invalidateQueries({ queryKey: KEY.account(data.accountId) });\n qc.invalidateQueries({ queryKey: KEY.netWorth });\n },\n }),\n });\n};\n\n// ============================================================================\n// Rebalance proposals\n// ============================================================================\n\nexport const useRebalanceProposals = (params: RebalanceFilters = {}) => {\n const { apiGatewayUrl } = useBrainyRich();\n const query = useQuery({\n queryKey: [...KEY.rebalances, params],\n queryFn: async () => {\n const result = await braQuery<{ braListRebalanceProposals: BraRebalanceProposal[] }>(\n `query BraListRebalanceProposals($householdId: ID, $portfolioId: ID, $status: BraRebalanceStatus) {\n braListRebalanceProposals(householdId: $householdId, portfolioId: $portfolioId, status: $status) {\n ${REBALANCE_FIELDS}\n }\n }`,\n {\n householdId: params.householdId,\n portfolioId: params.portfolioId,\n status: params.status,\n },\n apiGatewayUrl\n );\n return result.braListRebalanceProposals;\n },\n });\n return { ...query, data: query.data ?? [] };\n};\n\nexport const useCreateRebalanceProposal = () => {\n const { apiGatewayUrl } = useBrainyRich();\n const qc = useQueryClient();\n return useMutation({\n mutationFn: async (input: BraCreateRebalanceProposalInput) => {\n const result = await braMutate<{ braCreateRebalanceProposal: BraRebalanceProposal }>(\n `mutation BraCreateRebalanceProposal($input: BraCreateRebalanceProposalInput!) {\n braCreateRebalanceProposal(input: $input) { ${REBALANCE_FIELDS} }\n }`,\n { input },\n apiGatewayUrl\n );\n return result.braCreateRebalanceProposal;\n },\n ...mutationFeedback<BraRebalanceProposal, BraCreateRebalanceProposalInput>({\n success: 'Rebalance proposal created',\n onSuccess: () => qc.invalidateQueries({ queryKey: KEY.rebalances }),\n }),\n });\n};\n\nexport const useTransitionRebalanceProposal = () => {\n const { apiGatewayUrl } = useBrainyRich();\n const qc = useQueryClient();\n return useMutation({\n mutationFn: async (vars: { id: string; status: BraRebalanceStatus }) => {\n const result = await braMutate<{ braTransitionRebalanceProposal: BraRebalanceProposal }>(\n `mutation BraTransitionRebalanceProposal($id: ID!, $status: BraRebalanceStatus!) {\n braTransitionRebalanceProposal(id: $id, status: $status) { ${REBALANCE_FIELDS} }\n }`,\n vars,\n apiGatewayUrl\n );\n return result.braTransitionRebalanceProposal;\n },\n ...mutationFeedback<BraRebalanceProposal, { id: string; status: BraRebalanceStatus }>({\n success: (data) => `Rebalance ${data.status.toLowerCase()}`,\n onSuccess: () => qc.invalidateQueries({ queryKey: KEY.rebalances }),\n }),\n });\n};\n\n// ============================================================================\n// Pagination — \"load more\" for list pages + full-set pagers for aggregations\n// ============================================================================\n//\n// Every `braList*` connection returns `pageInfo { cursor hasMore }`. The gateway\n// is offset-based, so the FIRST page must OMIT `cursor` (explicit null → 500);\n// subsequent pages pass the previous page's `pageInfo.cursor`. Both helpers\n// below honor that rule.\n//\n// • `usePaged*` — incremental \"load more\" for interactive lists. Returns\n// a FLAT `items` array plus `hasMore` / `loadMore`,\n// pairs with the `<LoadMore/>` component.\n// • `fetchAll* / useAll*` — page through to `hasMore === false` so AGGREGATION\n// pages (Analytics net-cash-flow, Tax realized proceeds,\n// Reports ledger) compute over the FULL set, never a\n// truncated first 100.\n\nexport interface PagedListResult<T> {\n /** Flattened items across every fetched page. */\n items: T[];\n /** Another page exists. */\n hasMore: boolean;\n /** Fetch the next page (appends to `items`). */\n loadMore: () => void;\n /** First page in flight. */\n isLoading: boolean;\n /** A subsequent page in flight (drive the `<LoadMore/>` spinner off this). */\n isFetchingNextPage: boolean;\n isError: boolean;\n refetch: () => void;\n}\n\n/**\n * Generic cursor-accumulating list hook built on React-Query `useInfiniteQuery`.\n * Concrete `usePaged*` wrappers below supply the query + variables; page agents\n * consume those, not this directly.\n */\nfunction usePagedConnection<T>(config: {\n queryKey: readonly unknown[];\n query: string;\n buildVariables: (pagination: PaginationInput) => Record<string, unknown>;\n select: (data: unknown) => Connection<T>;\n enabled?: boolean;\n pageSize?: number;\n}): PagedListResult<T> {\n const { apiGatewayUrl } = useBrainyRich();\n const pageSize = config.pageSize ?? DEFAULT_PAGE.limit ?? 100;\n const infinite = useInfiniteQuery({\n queryKey: config.queryKey,\n enabled: config.enabled ?? true,\n initialPageParam: null as string | null,\n queryFn: async ({ pageParam }) => {\n const pagination: PaginationInput = pageParam\n ? { limit: pageSize, cursor: pageParam }\n : { limit: pageSize };\n const data = await braQuery<unknown>(\n config.query,\n config.buildVariables(pagination),\n apiGatewayUrl\n );\n return config.select(data);\n },\n getNextPageParam: (last) =>\n last.pageInfo.hasMore && last.pageInfo.cursor ? last.pageInfo.cursor : undefined,\n });\n\n return {\n items: (infinite.data?.pages ?? []).flatMap((page) => page.items),\n hasMore: Boolean(infinite.hasNextPage),\n loadMore: () => {\n void infinite.fetchNextPage();\n },\n isLoading: infinite.isLoading,\n isFetchingNextPage: infinite.isFetchingNextPage,\n isError: infinite.isError,\n refetch: () => {\n void infinite.refetch();\n },\n };\n}\n\nexport const usePagedAccounts = (params: AccountFilters = {}): PagedListResult<BraAccount> =>\n usePagedConnection<BraAccount>({\n queryKey: [...KEY.accounts, 'paged', params],\n query: `query BraListAccounts($householdId: ID, $status: BraAccountStatus, $pagination: PaginationInput) {\n braListAccounts(householdId: $householdId, status: $status, pagination: $pagination) {\n items { ${ACCOUNT_FIELDS} }\n pageInfo { cursor hasMore }\n }\n }`,\n buildVariables: (pagination) => ({\n householdId: params.householdId,\n status: params.status,\n pagination,\n }),\n select: (data) => (data as { braListAccounts: Connection<BraAccount> }).braListAccounts,\n });\n\nexport const usePagedPortfolios = (params: PortfolioFilters = {}): PagedListResult<BraPortfolio> =>\n usePagedConnection<BraPortfolio>({\n queryKey: [...KEY.portfolios, 'paged', params],\n query: `query BraListPortfolios($householdId: ID, $status: BraPortfolioStatus, $pagination: PaginationInput) {\n braListPortfolios(householdId: $householdId, status: $status, pagination: $pagination) {\n items { ${PORTFOLIO_FIELDS} }\n pageInfo { cursor hasMore }\n }\n }`,\n buildVariables: (pagination) => ({\n householdId: params.householdId,\n status: params.status,\n pagination,\n }),\n select: (data) => (data as { braListPortfolios: Connection<BraPortfolio> }).braListPortfolios,\n });\n\nexport const usePagedGoals = (params: GoalFilters = {}): PagedListResult<BraGoal> =>\n usePagedConnection<BraGoal>({\n queryKey: [...KEY.goals, 'paged', params],\n query: `query BraListGoals($householdId: ID, $status: BraGoalStatus, $pagination: PaginationInput) {\n braListGoals(householdId: $householdId, status: $status, pagination: $pagination) {\n items { ${GOAL_FIELDS} }\n pageInfo { cursor hasMore }\n }\n }`,\n buildVariables: (pagination) => ({\n householdId: params.householdId,\n status: params.status,\n pagination,\n }),\n select: (data) => (data as { braListGoals: Connection<BraGoal> }).braListGoals,\n });\n\nexport const usePagedHouseholds = (\n params: HouseholdFilters = {}\n): PagedListResult<BraHousehold> =>\n usePagedConnection<BraHousehold>({\n queryKey: [...KEY.households, 'paged', params],\n query: `query BraListHouseholds($status: BraHouseholdStatus, $pagination: PaginationInput) {\n braListHouseholds(status: $status, pagination: $pagination) {\n items { ${HOUSEHOLD_FIELDS} }\n pageInfo { cursor hasMore }\n }\n }`,\n buildVariables: (pagination) => ({ status: params.status, pagination }),\n select: (data) => (data as { braListHouseholds: Connection<BraHousehold> }).braListHouseholds,\n });\n\nexport const usePagedInsights = (params: InsightFilters = {}): PagedListResult<BraInsight> =>\n usePagedConnection<BraInsight>({\n queryKey: [...KEY.insights, 'paged', params],\n query: `query BraListInsights($severity: BraInsightSeverity, $status: BraInsightStatus, $subjectId: ID, $subjectType: String, $pagination: PaginationInput) {\n braListInsights(severity: $severity, status: $status, subjectId: $subjectId, subjectType: $subjectType, pagination: $pagination) {\n items { ${INSIGHT_FIELDS} }\n pageInfo { cursor hasMore }\n }\n }`,\n buildVariables: (pagination) => ({\n severity: params.severity,\n status: params.status,\n subjectId: params.subjectId,\n subjectType: params.subjectType,\n pagination,\n }),\n select: (data) => (data as { braListInsights: Connection<BraInsight> }).braListInsights,\n });\n\nexport const usePagedTransactions = (\n params: TransactionFilters = {}\n): PagedListResult<BraTransaction> =>\n usePagedConnection<BraTransaction>({\n queryKey: [...KEY.transactions, 'paged', params],\n query: `query BraListTransactions($accountId: ID, $type: BraTransactionType, $pagination: PaginationInput) {\n braListTransactions(accountId: $accountId, type: $type, pagination: $pagination) {\n items { ${TRANSACTION_FIELDS} }\n pageInfo { cursor hasMore }\n }\n }`,\n buildVariables: (pagination) => ({\n accountId: params.accountId,\n type: params.type,\n pagination,\n }),\n select: (data) =>\n (data as { braListTransactions: Connection<BraTransaction> }).braListTransactions,\n });\n\n// ----------------------------------------------------------------------------\n// Full-set pagers (aggregation)\n// ----------------------------------------------------------------------------\n\n/** Page through a connection until `hasMore === false`, returning every item. */\nasync function fetchAllConnection<T>(\n fetchPage: (pagination: PaginationInput) => Promise<Connection<T>>,\n pageSize = 200,\n maxPages = 500\n): Promise<T[]> {\n const all: T[] = [];\n let cursor: string | null | undefined;\n for (let i = 0; i < maxPages; i++) {\n const pagination: PaginationInput = cursor ? { limit: pageSize, cursor } : { limit: pageSize };\n const connection = await fetchPage(pagination);\n all.push(...connection.items);\n if (!connection.pageInfo.hasMore || !connection.pageInfo.cursor) break;\n cursor = connection.pageInfo.cursor;\n }\n return all;\n}\n\n/** Fetch EVERY transaction matching `filters` (all pages). */\nexport async function fetchAllTransactions(\n apiGatewayUrl: string | undefined,\n filters: Omit<TransactionFilters, 'pagination'> = {},\n pageSize = 200\n): Promise<BraTransaction[]> {\n return fetchAllConnection<BraTransaction>(async (pagination) => {\n const data = await braQuery<{ braListTransactions: Connection<BraTransaction> }>(\n `query BraListTransactions($accountId: ID, $type: BraTransactionType, $pagination: PaginationInput) {\n braListTransactions(accountId: $accountId, type: $type, pagination: $pagination) {\n items { ${TRANSACTION_FIELDS} }\n pageInfo { cursor hasMore }\n }\n }`,\n { accountId: filters.accountId, type: filters.type, pagination },\n apiGatewayUrl\n );\n return data.braListTransactions;\n }, pageSize);\n}\n\n/**\n * Aggregation-ready hook: ALL transactions matching `filters`. Use on Analytics\n * (net-cash-flow), Tax (realized proceeds) and Reports (ledger) so totals are\n * computed over the complete set rather than a truncated first page.\n */\nexport const useAllTransactions = (filters: Omit<TransactionFilters, 'pagination'> = {}) => {\n const { apiGatewayUrl } = useBrainyRich();\n const query = useQuery({\n queryKey: [...KEY.transactions, 'all', filters],\n queryFn: () => fetchAllTransactions(apiGatewayUrl, filters),\n });\n return { ...query, data: query.data ?? [] };\n};\n\n/** Fetch EVERY account matching `filters` (all pages). */\nexport async function fetchAllAccounts(\n apiGatewayUrl: string | undefined,\n filters: Omit<AccountFilters, 'pagination'> = {},\n pageSize = 200\n): Promise<BraAccount[]> {\n return fetchAllConnection<BraAccount>(async (pagination) => {\n const data = await braQuery<{ braListAccounts: Connection<BraAccount> }>(\n `query BraListAccounts($householdId: ID, $status: BraAccountStatus, $pagination: PaginationInput) {\n braListAccounts(householdId: $householdId, status: $status, pagination: $pagination) {\n items { ${ACCOUNT_FIELDS} }\n pageInfo { cursor hasMore }\n }\n }`,\n { householdId: filters.householdId, status: filters.status, pagination },\n apiGatewayUrl\n );\n return data.braListAccounts;\n }, pageSize);\n}\n\n/**\n * Aggregation-ready hook: ALL accounts matching `filters`. Because\n * `braListHoldings` is itself un-paginated (returns the full array for an\n * account/portfolio), holdings-heavy aggregations become complete by iterating\n * the full account set from here and reading each account's holdings.\n */\nexport const useAllAccounts = (filters: Omit<AccountFilters, 'pagination'> = {}) => {\n const { apiGatewayUrl } = useBrainyRich();\n const query = useQuery({\n queryKey: [...KEY.accounts, 'all', filters],\n queryFn: () => fetchAllAccounts(apiGatewayUrl, filters),\n });\n return { ...query, data: query.data ?? [] };\n};\n"],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"useBrainyRichApi.js","names":[],"sources":["../../../src/brainyrich/hooks/useBrainyRichApi.ts"],"sourcesContent":["/**\n * BrainyRich API hooks\n * @module brainyrich/hooks\n *\n * React-Query hooks wired DIRECTLY to the real `wspace-brainyrich-svc`\n * federated GraphQL contract (the `bra*` operations). Every query/mutation\n * below uses an inline gql string whose fields match the svc\n * `.hive-schema.graphql` exactly. No mock data.\n *\n * Transport: `graphqlFetch({ gateway: 'workspace', workspaceToken: true })` —\n * the host shell supplies the gateway base URL (via `BrainyRichRootProps.apiGatewayUrl`,\n * threaded from `useBrainyRich()`) + a workspace-scoped token.\n */\n\nimport { useInfiniteQuery, useMutation, useQuery, useQueryClient } from '@tanstack/react-query';\nimport { graphqlFetch } from '@burdenoff/fe-libs/shared/graphql';\n\nimport { useBrainyRich } from '../providers/BrainyRichProvider';\nimport { notify, errorMessage } from '../components/notify';\nimport type {\n Connection,\n BraNetWorthSummary,\n BraAccount,\n BraAccountStatus,\n BraPortfolio,\n BraPortfolioStatus,\n BraHolding,\n BraModelPortfolio,\n BraGoal,\n BraGoalStatus,\n BraGoalFunding,\n BraHousehold,\n BraHouseholdStatus,\n BraInsight,\n BraInsightSeverity,\n BraInsightStatus,\n BraTransaction,\n BraTransactionType,\n BraRebalanceProposal,\n BraRebalanceStatus,\n BraCreateAccountInput,\n BraUpdateAccountInput,\n BraCreatePortfolioInput,\n BraUpdatePortfolioInput,\n BraCreateHoldingInput,\n BraUpdateHoldingInput,\n BraCreateModelPortfolioInput,\n BraCreateGoalInput,\n BraUpdateGoalInput,\n BraLinkGoalFundingInput,\n BraCreateHouseholdInput,\n BraUpdateHouseholdInput,\n BraCreateInsightInput,\n BraCreateTransactionInput,\n BraCreateRebalanceProposalInput,\n PaginationInput,\n} from '../types/bra';\n\n// ============================================================================\n// Transport\n// ============================================================================\n\n/**\n * fe-libs `graphqlFetch` coalesces `query` responses in an in-memory cache keyed\n * by operationName+variables for ~15s (mutations are never cached). A read issued\n * right after a write (e.g. the React-Query refetch our `invalidateQueries`\n * triggers) would otherwise return the PRE-mutation response until the TTL\n * expires — making just-created/updated rows invisible until a full reload.\n * fe-libs' documented remedy is that write-performing callers clear those caches;\n * we do exactly that after every bra mutation so every follow-up read is fresh.\n */\ntype GraphqlReadCacheGlobals = {\n __graphqlFetchResponseCache?: { clear: () => void };\n __graphqlFetchPendingResponses?: { clear: () => void };\n __boffGraphQLResponseCache?: { clear: () => void };\n};\n\nconst clearGraphqlReadCaches = (): void => {\n const g = globalThis as GraphqlReadCacheGlobals;\n g.__graphqlFetchResponseCache?.clear();\n g.__graphqlFetchPendingResponses?.clear();\n g.__boffGraphQLResponseCache?.clear();\n};\n\nconst braQuery = async <TData>(\n query: string,\n variables: Record<string, unknown>,\n baseUrl?: string,\n opts?: { suppressGlobalError?: boolean }\n): Promise<TData> => {\n const response = await graphqlFetch<TData>({\n gateway: 'workspace',\n baseUrl,\n query,\n variables,\n workspaceToken: true,\n // When suppressed, fe-libs does NOT dispatch the global BACKEND_ERROR_EVENT\n // (which the host app-shell auto-toasts). Mutations suppress it so their\n // centralized `onError` (mutationFeedback) is the SINGLE toast source — no\n // double-toast against the shell listener. Reads leave it un-suppressed so a\n // failed read still drives the shell's connection indicator / error toast in\n // addition to the page's own ErrorState.\n suppressGlobalErrorEvent: opts?.suppressGlobalError ?? false,\n });\n\n if (response.errors?.length) {\n throw new Error(response.errors[0]?.message ?? 'GraphQL request failed');\n }\n if (!response.data) {\n throw new Error('GraphQL response did not include data');\n }\n return response.data;\n};\n\n/**\n * Mutation transport — identical to `braQuery` but (a) suppresses the global\n * error event so mutation feedback is owned solely by the hooks' `onError`, and\n * (b) clears read caches after so follow-up reads are fresh.\n */\nconst braMutate = async <TData>(\n query: string,\n variables: Record<string, unknown>,\n baseUrl?: string\n): Promise<TData> => {\n const data = await braQuery<TData>(query, variables, baseUrl, { suppressGlobalError: true });\n clearGraphqlReadCaches();\n return data;\n};\n\n// ============================================================================\n// Centralized mutation feedback (fixes the silent-mutation-failure defect)\n// ============================================================================\n\n/**\n * Compose success/error toast feedback onto a React-Query mutation WITHOUT\n * discarding the hook's existing `onSuccess` side-effects (cache invalidation).\n *\n * - `onError` always fires `notify.error(<friendly message>)` — this is the one\n * place mutation failures surface, for every hook, so pages need no per-call\n * error handling.\n * - `onSuccess` runs the caller's invalidation first, then `notify.success`.\n *\n * Call-site handlers passed to `mutate(vars, { onSuccess, onError })` STILL run\n * (React-Query invokes both the hook-level and call-level callbacks), so pages\n * keep closing dialogs etc. on success.\n */\nfunction mutationFeedback<TData, TVars>(opts: {\n success?: string | ((data: TData, vars: TVars) => string);\n onSuccess?: (data: TData, vars: TVars) => void;\n}): {\n onSuccess: (data: TData, vars: TVars) => void;\n onError: (error: unknown) => void;\n} {\n return {\n onSuccess: (data, vars) => {\n opts.onSuccess?.(data, vars);\n if (opts.success) {\n notify.success(\n typeof opts.success === 'function' ? opts.success(data, vars) : opts.success\n );\n }\n },\n onError: (error) => notify.error(errorMessage(error)),\n };\n}\n\n// React-Query key roots (one namespace per domain entity).\nconst KEY = {\n netWorth: ['brainyrich', 'net-worth'] as const,\n accounts: ['brainyrich', 'accounts'] as const,\n account: (id: string) => ['brainyrich', 'account', id] as const,\n portfolios: ['brainyrich', 'portfolios'] as const,\n portfolio: (id: string) => ['brainyrich', 'portfolio', id] as const,\n holdings: ['brainyrich', 'holdings'] as const,\n modelPortfolios: ['brainyrich', 'model-portfolios'] as const,\n modelPortfolio: (id: string) => ['brainyrich', 'model-portfolio', id] as const,\n goals: ['brainyrich', 'goals'] as const,\n goal: (id: string) => ['brainyrich', 'goal', id] as const,\n goalFundings: (goalId: string) => ['brainyrich', 'goal-fundings', goalId] as const,\n households: ['brainyrich', 'households'] as const,\n household: (id: string) => ['brainyrich', 'household', id] as const,\n insights: ['brainyrich', 'insights'] as const,\n insight: (id: string) => ['brainyrich', 'insight', id] as const,\n transactions: ['brainyrich', 'transactions'] as const,\n rebalances: ['brainyrich', 'rebalance-proposals'] as const,\n health: ['brainyrich', 'health'] as const,\n};\n\n/** Gateway is offset-based; OMIT `cursor` on the first page (explicit null → 500). */\nconst DEFAULT_PAGE: PaginationInput = { limit: 100 };\n\n// ============================================================================\n// Reusable gql field selections (codegen-free strictness — mirror bra.ts)\n// ============================================================================\n\nconst HOLDING_FIELDS = `\n id workspaceId accountId portfolioId symbol name assetClass quantity lastPrice\n costBasis marketValue currency asOf createdAt updatedAt\n`;\n\nconst TRANSACTION_FIELDS = `\n id workspaceId accountId holdingId type symbol quantity price amount fee currency\n tradeDate settleDate notes createdAt updatedAt\n`;\n\nconst ACCOUNT_FIELDS = `\n id workspaceId ownerId householdId name type status institution accountMask\n cashBalance currency isManual createdAt updatedAt\n`;\n\nconst PORTFOLIO_FIELDS = `\n id workspaceId ownerId householdId name description status baseCurrency\n modelPortfolioId driftThresholdPct targetAllocation tags createdAt updatedAt\n`;\n\nconst MODEL_ALLOCATION_FIELDS = `\n id workspaceId modelPortfolioId assetClass targetPct createdAt updatedAt\n`;\n\nconst MODEL_PORTFOLIO_FIELDS = `\n id workspaceId name description riskProfile baseCurrency isActive createdAt updatedAt\n`;\n\nconst GOAL_FUNDING_FIELDS = `\n id workspaceId goalId accountId allocationPct fixedAmount createdAt updatedAt\n`;\n\nconst GOAL_FIELDS = `\n id workspaceId ownerId householdId name type status projection targetAmount\n targetDate monthlyContribution priority currency notes tags createdAt updatedAt\n`;\n\nconst HOUSEHOLD_FIELDS = `\n id workspaceId name status riskProfile advisorId aum currency primaryContactName\n primaryContactEmail notes tags createdAt updatedAt\n`;\n\nconst INSIGHT_FIELDS = `\n id workspaceId ownerId type severity status title detail metrics subjectId\n subjectType acknowledgedById resolvedAt createdAt updatedAt\n`;\n\nconst REBALANCE_FIELDS = `\n id workspaceId portfolioId householdId status driftPct rationale trades\n proposedById approvedById executedAt createdAt updatedAt\n`;\n\nconst NET_WORTH_FIELDS = `\n workspaceId ownerId totalNetWorth totalMarketValue totalCash accountCount currency\n byAssetClass { assetClass marketValue }\n`;\n\n// ============================================================================\n// Filter param shapes (exported so page agents can type their call sites)\n// ============================================================================\n\nexport interface AccountFilters {\n householdId?: string;\n status?: BraAccountStatus;\n pagination?: PaginationInput;\n}\n\nexport interface PortfolioFilters {\n householdId?: string;\n status?: BraPortfolioStatus;\n pagination?: PaginationInput;\n}\n\nexport interface HoldingFilters {\n accountId?: string;\n portfolioId?: string;\n}\n\nexport interface GoalFilters {\n householdId?: string;\n status?: BraGoalStatus;\n pagination?: PaginationInput;\n}\n\nexport interface HouseholdFilters {\n status?: BraHouseholdStatus;\n pagination?: PaginationInput;\n}\n\nexport interface InsightFilters {\n severity?: BraInsightSeverity;\n status?: BraInsightStatus;\n subjectId?: string;\n subjectType?: string;\n pagination?: PaginationInput;\n}\n\nexport interface TransactionFilters {\n accountId?: string;\n type?: BraTransactionType;\n pagination?: PaginationInput;\n}\n\nexport interface RebalanceFilters {\n householdId?: string;\n portfolioId?: string;\n status?: BraRebalanceStatus;\n}\n\n// ============================================================================\n// Health\n// ============================================================================\n\nexport const useBraHealth = () => {\n const { apiGatewayUrl } = useBrainyRich();\n return useQuery({\n queryKey: KEY.health,\n queryFn: async () => {\n const result = await braQuery<{ braHealth: string }>(\n `query BraHealth { braHealth }`,\n {},\n apiGatewayUrl\n );\n return result.braHealth;\n },\n });\n};\n\n// ============================================================================\n// Net worth (Overview)\n// ============================================================================\n\nexport const useNetWorthSummary = (ownerId?: string) => {\n const { apiGatewayUrl } = useBrainyRich();\n return useQuery({\n queryKey: [...KEY.netWorth, ownerId ?? 'me'],\n queryFn: async () => {\n const result = await braQuery<{ braNetWorthSummary: BraNetWorthSummary }>(\n `query BraNetWorthSummary($ownerId: ID) {\n braNetWorthSummary(ownerId: $ownerId) { ${NET_WORTH_FIELDS} }\n }`,\n { ownerId },\n apiGatewayUrl\n );\n return result.braNetWorthSummary;\n },\n });\n};\n\n// ============================================================================\n// Accounts\n// ============================================================================\n\nexport const useAccounts = (params: AccountFilters = {}) => {\n const { apiGatewayUrl } = useBrainyRich();\n const query = useQuery({\n queryKey: [...KEY.accounts, params],\n queryFn: async () => {\n const result = await braQuery<{ braListAccounts: Connection<BraAccount> }>(\n `query BraListAccounts($householdId: ID, $status: BraAccountStatus, $pagination: PaginationInput) {\n braListAccounts(householdId: $householdId, status: $status, pagination: $pagination) {\n items { ${ACCOUNT_FIELDS} }\n pageInfo { cursor hasMore }\n }\n }`,\n {\n householdId: params.householdId,\n status: params.status,\n pagination: params.pagination ?? DEFAULT_PAGE,\n },\n apiGatewayUrl\n );\n return result.braListAccounts;\n },\n });\n return {\n ...query,\n data: query.data?.items ?? [],\n pageInfo: query.data?.pageInfo,\n };\n};\n\nexport const useAccount = (id: string | undefined) => {\n const { apiGatewayUrl } = useBrainyRich();\n return useQuery({\n queryKey: KEY.account(id ?? ''),\n enabled: Boolean(id),\n queryFn: async () => {\n const result = await braQuery<{ braAccount: BraAccount | null }>(\n `query BraAccount($id: ID!) {\n braAccount(id: $id) {\n ${ACCOUNT_FIELDS}\n holdings { ${HOLDING_FIELDS} }\n transactions { ${TRANSACTION_FIELDS} }\n }\n }`,\n { id },\n apiGatewayUrl\n );\n return result.braAccount;\n },\n });\n};\n\nexport const useCreateAccount = () => {\n const { apiGatewayUrl } = useBrainyRich();\n const qc = useQueryClient();\n return useMutation({\n mutationFn: async (input: BraCreateAccountInput) => {\n const result = await braMutate<{ braCreateAccount: BraAccount }>(\n `mutation BraCreateAccount($input: BraCreateAccountInput!) {\n braCreateAccount(input: $input) { ${ACCOUNT_FIELDS} }\n }`,\n { input },\n apiGatewayUrl\n );\n return result.braCreateAccount;\n },\n ...mutationFeedback<BraAccount, BraCreateAccountInput>({\n success: 'Account created',\n onSuccess: () => {\n qc.invalidateQueries({ queryKey: KEY.accounts });\n qc.invalidateQueries({ queryKey: KEY.netWorth });\n },\n }),\n });\n};\n\nexport const useUpdateAccount = () => {\n const { apiGatewayUrl } = useBrainyRich();\n const qc = useQueryClient();\n return useMutation({\n mutationFn: async (vars: { id: string; input: BraUpdateAccountInput }) => {\n const result = await braMutate<{ braUpdateAccount: BraAccount }>(\n `mutation BraUpdateAccount($id: ID!, $input: BraUpdateAccountInput!) {\n braUpdateAccount(id: $id, input: $input) { ${ACCOUNT_FIELDS} }\n }`,\n vars,\n apiGatewayUrl\n );\n return result.braUpdateAccount;\n },\n ...mutationFeedback<BraAccount, { id: string; input: BraUpdateAccountInput }>({\n success: 'Account updated',\n onSuccess: (data) => {\n qc.invalidateQueries({ queryKey: KEY.accounts });\n qc.invalidateQueries({ queryKey: KEY.account(data.id) });\n qc.invalidateQueries({ queryKey: KEY.netWorth });\n },\n }),\n });\n};\n\nexport const useArchiveAccount = () => {\n const { apiGatewayUrl } = useBrainyRich();\n const qc = useQueryClient();\n return useMutation({\n mutationFn: async (id: string) => {\n const result = await braMutate<{ braArchiveAccount: boolean }>(\n `mutation BraArchiveAccount($id: ID!) { braArchiveAccount(id: $id) }`,\n { id },\n apiGatewayUrl\n );\n return result.braArchiveAccount;\n },\n ...mutationFeedback<boolean, string>({\n success: 'Account archived',\n onSuccess: () => {\n qc.invalidateQueries({ queryKey: KEY.accounts });\n qc.invalidateQueries({ queryKey: KEY.netWorth });\n },\n }),\n });\n};\n\n// ============================================================================\n// Portfolios\n// ============================================================================\n\nexport const usePortfolios = (params: PortfolioFilters = {}) => {\n const { apiGatewayUrl } = useBrainyRich();\n const query = useQuery({\n queryKey: [...KEY.portfolios, params],\n queryFn: async () => {\n const result = await braQuery<{ braListPortfolios: Connection<BraPortfolio> }>(\n `query BraListPortfolios($householdId: ID, $status: BraPortfolioStatus, $pagination: PaginationInput) {\n braListPortfolios(householdId: $householdId, status: $status, pagination: $pagination) {\n items { ${PORTFOLIO_FIELDS} }\n pageInfo { cursor hasMore }\n }\n }`,\n {\n householdId: params.householdId,\n status: params.status,\n pagination: params.pagination ?? DEFAULT_PAGE,\n },\n apiGatewayUrl\n );\n return result.braListPortfolios;\n },\n });\n return {\n ...query,\n data: query.data?.items ?? [],\n pageInfo: query.data?.pageInfo,\n };\n};\n\nexport const usePortfolio = (id: string | undefined) => {\n const { apiGatewayUrl } = useBrainyRich();\n return useQuery({\n queryKey: KEY.portfolio(id ?? ''),\n enabled: Boolean(id),\n queryFn: async () => {\n const result = await braQuery<{ braPortfolio: BraPortfolio | null }>(\n `query BraPortfolio($id: ID!) {\n braPortfolio(id: $id) {\n ${PORTFOLIO_FIELDS}\n holdings { ${HOLDING_FIELDS} }\n }\n }`,\n { id },\n apiGatewayUrl\n );\n return result.braPortfolio;\n },\n });\n};\n\nexport const useCreatePortfolio = () => {\n const { apiGatewayUrl } = useBrainyRich();\n const qc = useQueryClient();\n return useMutation({\n mutationFn: async (input: BraCreatePortfolioInput) => {\n const result = await braMutate<{ braCreatePortfolio: BraPortfolio }>(\n `mutation BraCreatePortfolio($input: BraCreatePortfolioInput!) {\n braCreatePortfolio(input: $input) { ${PORTFOLIO_FIELDS} }\n }`,\n { input },\n apiGatewayUrl\n );\n return result.braCreatePortfolio;\n },\n ...mutationFeedback<BraPortfolio, BraCreatePortfolioInput>({\n success: 'Portfolio created',\n onSuccess: () => qc.invalidateQueries({ queryKey: KEY.portfolios }),\n }),\n });\n};\n\nexport const useUpdatePortfolio = () => {\n const { apiGatewayUrl } = useBrainyRich();\n const qc = useQueryClient();\n return useMutation({\n mutationFn: async (vars: { id: string; input: BraUpdatePortfolioInput }) => {\n const result = await braMutate<{ braUpdatePortfolio: BraPortfolio }>(\n `mutation BraUpdatePortfolio($id: ID!, $input: BraUpdatePortfolioInput!) {\n braUpdatePortfolio(id: $id, input: $input) { ${PORTFOLIO_FIELDS} }\n }`,\n vars,\n apiGatewayUrl\n );\n return result.braUpdatePortfolio;\n },\n ...mutationFeedback<BraPortfolio, { id: string; input: BraUpdatePortfolioInput }>({\n success: 'Portfolio updated',\n onSuccess: (data) => {\n qc.invalidateQueries({ queryKey: KEY.portfolios });\n qc.invalidateQueries({ queryKey: KEY.portfolio(data.id) });\n },\n }),\n });\n};\n\nexport const useArchivePortfolio = () => {\n const { apiGatewayUrl } = useBrainyRich();\n const qc = useQueryClient();\n return useMutation({\n mutationFn: async (id: string) => {\n const result = await braMutate<{ braArchivePortfolio: boolean }>(\n `mutation BraArchivePortfolio($id: ID!) { braArchivePortfolio(id: $id) }`,\n { id },\n apiGatewayUrl\n );\n return result.braArchivePortfolio;\n },\n ...mutationFeedback<boolean, string>({\n success: 'Portfolio archived',\n onSuccess: () => qc.invalidateQueries({ queryKey: KEY.portfolios }),\n }),\n });\n};\n\n// ============================================================================\n// Holdings\n// ============================================================================\n\nexport const useHoldings = (params: HoldingFilters) => {\n const { apiGatewayUrl } = useBrainyRich();\n const query = useQuery({\n queryKey: [...KEY.holdings, params],\n enabled: Boolean(params.accountId || params.portfolioId),\n queryFn: async () => {\n const result = await braQuery<{ braListHoldings: BraHolding[] }>(\n `query BraListHoldings($accountId: ID, $portfolioId: ID) {\n braListHoldings(accountId: $accountId, portfolioId: $portfolioId) { ${HOLDING_FIELDS} }\n }`,\n { accountId: params.accountId, portfolioId: params.portfolioId },\n apiGatewayUrl\n );\n return result.braListHoldings;\n },\n });\n return { ...query, data: query.data ?? [] };\n};\n\nexport const useCreateHolding = () => {\n const { apiGatewayUrl } = useBrainyRich();\n const qc = useQueryClient();\n return useMutation({\n mutationFn: async (input: BraCreateHoldingInput) => {\n const result = await braMutate<{ braCreateHolding: BraHolding }>(\n `mutation BraCreateHolding($input: BraCreateHoldingInput!) {\n braCreateHolding(input: $input) { ${HOLDING_FIELDS} }\n }`,\n { input },\n apiGatewayUrl\n );\n return result.braCreateHolding;\n },\n ...mutationFeedback<BraHolding, BraCreateHoldingInput>({\n success: 'Holding added',\n onSuccess: (data) => {\n qc.invalidateQueries({ queryKey: KEY.holdings });\n qc.invalidateQueries({ queryKey: KEY.account(data.accountId) });\n if (data.portfolioId) qc.invalidateQueries({ queryKey: KEY.portfolio(data.portfolioId) });\n qc.invalidateQueries({ queryKey: KEY.netWorth });\n },\n }),\n });\n};\n\nexport const useUpdateHolding = () => {\n const { apiGatewayUrl } = useBrainyRich();\n const qc = useQueryClient();\n return useMutation({\n mutationFn: async (vars: { id: string; input: BraUpdateHoldingInput }) => {\n const result = await braMutate<{ braUpdateHolding: BraHolding }>(\n `mutation BraUpdateHolding($id: ID!, $input: BraUpdateHoldingInput!) {\n braUpdateHolding(id: $id, input: $input) { ${HOLDING_FIELDS} }\n }`,\n vars,\n apiGatewayUrl\n );\n return result.braUpdateHolding;\n },\n ...mutationFeedback<BraHolding, { id: string; input: BraUpdateHoldingInput }>({\n success: 'Holding updated',\n onSuccess: (data) => {\n qc.invalidateQueries({ queryKey: KEY.holdings });\n qc.invalidateQueries({ queryKey: KEY.account(data.accountId) });\n if (data.portfolioId) qc.invalidateQueries({ queryKey: KEY.portfolio(data.portfolioId) });\n qc.invalidateQueries({ queryKey: KEY.netWorth });\n },\n }),\n });\n};\n\nexport const useDeleteHolding = () => {\n const { apiGatewayUrl } = useBrainyRich();\n const qc = useQueryClient();\n return useMutation({\n mutationFn: async (id: string) => {\n const result = await braMutate<{ braDeleteHolding: boolean }>(\n `mutation BraDeleteHolding($id: ID!) { braDeleteHolding(id: $id) }`,\n { id },\n apiGatewayUrl\n );\n return result.braDeleteHolding;\n },\n ...mutationFeedback<boolean, string>({\n success: 'Holding removed',\n onSuccess: () => {\n qc.invalidateQueries({ queryKey: KEY.holdings });\n qc.invalidateQueries({ queryKey: KEY.accounts });\n qc.invalidateQueries({ queryKey: KEY.portfolios });\n qc.invalidateQueries({ queryKey: KEY.netWorth });\n },\n }),\n });\n};\n\n// ============================================================================\n// Model portfolios\n// ============================================================================\n\nexport const useModelPortfolios = () => {\n const { apiGatewayUrl } = useBrainyRich();\n const query = useQuery({\n queryKey: KEY.modelPortfolios,\n queryFn: async () => {\n const result = await braQuery<{ braListModelPortfolios: BraModelPortfolio[] }>(\n `query BraListModelPortfolios {\n braListModelPortfolios {\n ${MODEL_PORTFOLIO_FIELDS}\n allocations { ${MODEL_ALLOCATION_FIELDS} }\n }\n }`,\n {},\n apiGatewayUrl\n );\n return result.braListModelPortfolios;\n },\n });\n return { ...query, data: query.data ?? [] };\n};\n\nexport const useModelPortfolio = (id: string | undefined) => {\n const { apiGatewayUrl } = useBrainyRich();\n return useQuery({\n queryKey: KEY.modelPortfolio(id ?? ''),\n enabled: Boolean(id),\n queryFn: async () => {\n const result = await braQuery<{ braModelPortfolio: BraModelPortfolio | null }>(\n `query BraModelPortfolio($id: ID!) {\n braModelPortfolio(id: $id) {\n ${MODEL_PORTFOLIO_FIELDS}\n allocations { ${MODEL_ALLOCATION_FIELDS} }\n }\n }`,\n { id },\n apiGatewayUrl\n );\n return result.braModelPortfolio;\n },\n });\n};\n\nexport const useCreateModelPortfolio = () => {\n const { apiGatewayUrl } = useBrainyRich();\n const qc = useQueryClient();\n return useMutation({\n mutationFn: async (input: BraCreateModelPortfolioInput) => {\n const result = await braMutate<{ braCreateModelPortfolio: BraModelPortfolio }>(\n `mutation BraCreateModelPortfolio($input: BraCreateModelPortfolioInput!) {\n braCreateModelPortfolio(input: $input) {\n ${MODEL_PORTFOLIO_FIELDS}\n allocations { ${MODEL_ALLOCATION_FIELDS} }\n }\n }`,\n { input },\n apiGatewayUrl\n );\n return result.braCreateModelPortfolio;\n },\n ...mutationFeedback<BraModelPortfolio, BraCreateModelPortfolioInput>({\n success: 'Model portfolio created',\n onSuccess: () => qc.invalidateQueries({ queryKey: KEY.modelPortfolios }),\n }),\n });\n};\n\n// ============================================================================\n// Goals\n// ============================================================================\n\nexport const useGoals = (params: GoalFilters = {}) => {\n const { apiGatewayUrl } = useBrainyRich();\n const query = useQuery({\n queryKey: [...KEY.goals, params],\n queryFn: async () => {\n const result = await braQuery<{ braListGoals: Connection<BraGoal> }>(\n `query BraListGoals($householdId: ID, $status: BraGoalStatus, $pagination: PaginationInput) {\n braListGoals(householdId: $householdId, status: $status, pagination: $pagination) {\n items { ${GOAL_FIELDS} }\n pageInfo { cursor hasMore }\n }\n }`,\n {\n householdId: params.householdId,\n status: params.status,\n pagination: params.pagination ?? DEFAULT_PAGE,\n },\n apiGatewayUrl\n );\n return result.braListGoals;\n },\n });\n return {\n ...query,\n data: query.data?.items ?? [],\n pageInfo: query.data?.pageInfo,\n };\n};\n\nexport const useGoal = (id: string | undefined) => {\n const { apiGatewayUrl } = useBrainyRich();\n return useQuery({\n queryKey: KEY.goal(id ?? ''),\n enabled: Boolean(id),\n queryFn: async () => {\n const result = await braQuery<{ braGoal: BraGoal | null }>(\n `query BraGoal($id: ID!) {\n braGoal(id: $id) {\n ${GOAL_FIELDS}\n fundings { ${GOAL_FUNDING_FIELDS} }\n }\n }`,\n { id },\n apiGatewayUrl\n );\n return result.braGoal;\n },\n });\n};\n\nexport const useGoalFundings = (goalId: string | undefined) => {\n const { apiGatewayUrl } = useBrainyRich();\n const query = useQuery({\n queryKey: KEY.goalFundings(goalId ?? ''),\n enabled: Boolean(goalId),\n queryFn: async () => {\n const result = await braQuery<{ braListGoalFundings: BraGoalFunding[] }>(\n `query BraListGoalFundings($goalId: ID!) {\n braListGoalFundings(goalId: $goalId) { ${GOAL_FUNDING_FIELDS} }\n }`,\n { goalId },\n apiGatewayUrl\n );\n return result.braListGoalFundings;\n },\n });\n return { ...query, data: query.data ?? [] };\n};\n\nexport const useCreateGoal = () => {\n const { apiGatewayUrl } = useBrainyRich();\n const qc = useQueryClient();\n return useMutation({\n mutationFn: async (input: BraCreateGoalInput) => {\n const result = await braMutate<{ braCreateGoal: BraGoal }>(\n `mutation BraCreateGoal($input: BraCreateGoalInput!) {\n braCreateGoal(input: $input) { ${GOAL_FIELDS} }\n }`,\n { input },\n apiGatewayUrl\n );\n return result.braCreateGoal;\n },\n ...mutationFeedback<BraGoal, BraCreateGoalInput>({\n success: 'Goal created',\n onSuccess: () => qc.invalidateQueries({ queryKey: KEY.goals }),\n }),\n });\n};\n\nexport const useUpdateGoal = () => {\n const { apiGatewayUrl } = useBrainyRich();\n const qc = useQueryClient();\n return useMutation({\n mutationFn: async (vars: { id: string; input: BraUpdateGoalInput }) => {\n const result = await braMutate<{ braUpdateGoal: BraGoal }>(\n `mutation BraUpdateGoal($id: ID!, $input: BraUpdateGoalInput!) {\n braUpdateGoal(id: $id, input: $input) { ${GOAL_FIELDS} }\n }`,\n vars,\n apiGatewayUrl\n );\n return result.braUpdateGoal;\n },\n ...mutationFeedback<BraGoal, { id: string; input: BraUpdateGoalInput }>({\n success: 'Goal updated',\n onSuccess: (data) => {\n qc.invalidateQueries({ queryKey: KEY.goals });\n qc.invalidateQueries({ queryKey: KEY.goal(data.id) });\n },\n }),\n });\n};\n\nexport const useArchiveGoal = () => {\n const { apiGatewayUrl } = useBrainyRich();\n const qc = useQueryClient();\n return useMutation({\n mutationFn: async (id: string) => {\n const result = await braMutate<{ braArchiveGoal: boolean }>(\n `mutation BraArchiveGoal($id: ID!) { braArchiveGoal(id: $id) }`,\n { id },\n apiGatewayUrl\n );\n return result.braArchiveGoal;\n },\n ...mutationFeedback<boolean, string>({\n success: 'Goal archived',\n onSuccess: () => qc.invalidateQueries({ queryKey: KEY.goals }),\n }),\n });\n};\n\nexport const useRecalcGoalProjection = () => {\n const { apiGatewayUrl } = useBrainyRich();\n const qc = useQueryClient();\n return useMutation({\n mutationFn: async (vars: { id: string; fundedAmount: number }) => {\n const result = await braMutate<{ braRecalcGoalProjection: BraGoal }>(\n `mutation BraRecalcGoalProjection($id: ID!, $fundedAmount: Float!) {\n braRecalcGoalProjection(id: $id, fundedAmount: $fundedAmount) { ${GOAL_FIELDS} }\n }`,\n vars,\n apiGatewayUrl\n );\n return result.braRecalcGoalProjection;\n },\n ...mutationFeedback<BraGoal, { id: string; fundedAmount: number }>({\n success: 'Projection recalculated',\n onSuccess: (data) => {\n qc.invalidateQueries({ queryKey: KEY.goals });\n qc.invalidateQueries({ queryKey: KEY.goal(data.id) });\n },\n }),\n });\n};\n\nexport const useLinkGoalFunding = () => {\n const { apiGatewayUrl } = useBrainyRich();\n const qc = useQueryClient();\n return useMutation({\n mutationFn: async (input: BraLinkGoalFundingInput) => {\n const result = await braMutate<{ braLinkGoalFunding: BraGoalFunding }>(\n `mutation BraLinkGoalFunding($input: BraLinkGoalFundingInput!) {\n braLinkGoalFunding(input: $input) { ${GOAL_FUNDING_FIELDS} }\n }`,\n { input },\n apiGatewayUrl\n );\n return result.braLinkGoalFunding;\n },\n ...mutationFeedback<BraGoalFunding, BraLinkGoalFundingInput>({\n success: 'Funding linked',\n onSuccess: (data) => {\n qc.invalidateQueries({ queryKey: KEY.goalFundings(data.goalId) });\n qc.invalidateQueries({ queryKey: KEY.goal(data.goalId) });\n },\n }),\n });\n};\n\nexport const useUnlinkGoalFunding = () => {\n const { apiGatewayUrl } = useBrainyRich();\n const qc = useQueryClient();\n return useMutation({\n mutationFn: async (id: string) => {\n const result = await braMutate<{ braUnlinkGoalFunding: boolean }>(\n `mutation BraUnlinkGoalFunding($id: ID!) { braUnlinkGoalFunding(id: $id) }`,\n { id },\n apiGatewayUrl\n );\n return result.braUnlinkGoalFunding;\n },\n ...mutationFeedback<boolean, string>({\n success: 'Funding unlinked',\n onSuccess: () => {\n qc.invalidateQueries({ queryKey: KEY.goals });\n qc.invalidateQueries({ queryKey: [...KEY.goals] });\n qc.invalidateQueries({ queryKey: ['brainyrich', 'goal-fundings'] });\n qc.invalidateQueries({ queryKey: ['brainyrich', 'goal'] });\n },\n }),\n });\n};\n\n// ============================================================================\n// Households\n// ============================================================================\n\nexport const useHouseholds = (params: HouseholdFilters = {}) => {\n const { apiGatewayUrl } = useBrainyRich();\n const query = useQuery({\n queryKey: [...KEY.households, params],\n queryFn: async () => {\n const result = await braQuery<{ braListHouseholds: Connection<BraHousehold> }>(\n `query BraListHouseholds($status: BraHouseholdStatus, $pagination: PaginationInput) {\n braListHouseholds(status: $status, pagination: $pagination) {\n items { ${HOUSEHOLD_FIELDS} }\n pageInfo { cursor hasMore }\n }\n }`,\n { status: params.status, pagination: params.pagination ?? DEFAULT_PAGE },\n apiGatewayUrl\n );\n return result.braListHouseholds;\n },\n });\n return {\n ...query,\n data: query.data?.items ?? [],\n pageInfo: query.data?.pageInfo,\n };\n};\n\nexport const useHousehold = (id: string | undefined) => {\n const { apiGatewayUrl } = useBrainyRich();\n return useQuery({\n queryKey: KEY.household(id ?? ''),\n enabled: Boolean(id),\n queryFn: async () => {\n const result = await braQuery<{ braHousehold: BraHousehold | null }>(\n `query BraHousehold($id: ID!) {\n braHousehold(id: $id) { ${HOUSEHOLD_FIELDS} }\n }`,\n { id },\n apiGatewayUrl\n );\n return result.braHousehold;\n },\n });\n};\n\nexport const useCreateHousehold = () => {\n const { apiGatewayUrl } = useBrainyRich();\n const qc = useQueryClient();\n return useMutation({\n mutationFn: async (input: BraCreateHouseholdInput) => {\n const result = await braMutate<{ braCreateHousehold: BraHousehold }>(\n `mutation BraCreateHousehold($input: BraCreateHouseholdInput!) {\n braCreateHousehold(input: $input) { ${HOUSEHOLD_FIELDS} }\n }`,\n { input },\n apiGatewayUrl\n );\n return result.braCreateHousehold;\n },\n ...mutationFeedback<BraHousehold, BraCreateHouseholdInput>({\n success: 'Household created',\n onSuccess: () => qc.invalidateQueries({ queryKey: KEY.households }),\n }),\n });\n};\n\nexport const useUpdateHousehold = () => {\n const { apiGatewayUrl } = useBrainyRich();\n const qc = useQueryClient();\n return useMutation({\n mutationFn: async (vars: { id: string; input: BraUpdateHouseholdInput }) => {\n const result = await braMutate<{ braUpdateHousehold: BraHousehold }>(\n `mutation BraUpdateHousehold($id: ID!, $input: BraUpdateHouseholdInput!) {\n braUpdateHousehold(id: $id, input: $input) { ${HOUSEHOLD_FIELDS} }\n }`,\n vars,\n apiGatewayUrl\n );\n return result.braUpdateHousehold;\n },\n ...mutationFeedback<BraHousehold, { id: string; input: BraUpdateHouseholdInput }>({\n success: 'Household updated',\n onSuccess: (data) => {\n qc.invalidateQueries({ queryKey: KEY.households });\n qc.invalidateQueries({ queryKey: KEY.household(data.id) });\n },\n }),\n });\n};\n\nexport const useArchiveHousehold = () => {\n const { apiGatewayUrl } = useBrainyRich();\n const qc = useQueryClient();\n return useMutation({\n mutationFn: async (id: string) => {\n const result = await braMutate<{ braArchiveHousehold: boolean }>(\n `mutation BraArchiveHousehold($id: ID!) { braArchiveHousehold(id: $id) }`,\n { id },\n apiGatewayUrl\n );\n return result.braArchiveHousehold;\n },\n ...mutationFeedback<boolean, string>({\n success: 'Household archived',\n onSuccess: () => qc.invalidateQueries({ queryKey: KEY.households }),\n }),\n });\n};\n\n// ============================================================================\n// Insights\n// ============================================================================\n\nexport const useInsights = (params: InsightFilters = {}) => {\n const { apiGatewayUrl } = useBrainyRich();\n const query = useQuery({\n queryKey: [...KEY.insights, params],\n queryFn: async () => {\n const result = await braQuery<{ braListInsights: Connection<BraInsight> }>(\n `query BraListInsights($severity: BraInsightSeverity, $status: BraInsightStatus, $subjectId: ID, $subjectType: String, $pagination: PaginationInput) {\n braListInsights(severity: $severity, status: $status, subjectId: $subjectId, subjectType: $subjectType, pagination: $pagination) {\n items { ${INSIGHT_FIELDS} }\n pageInfo { cursor hasMore }\n }\n }`,\n {\n severity: params.severity,\n status: params.status,\n subjectId: params.subjectId,\n subjectType: params.subjectType,\n pagination: params.pagination ?? DEFAULT_PAGE,\n },\n apiGatewayUrl\n );\n return result.braListInsights;\n },\n });\n return {\n ...query,\n data: query.data?.items ?? [],\n pageInfo: query.data?.pageInfo,\n };\n};\n\nexport const useInsight = (id: string | undefined) => {\n const { apiGatewayUrl } = useBrainyRich();\n return useQuery({\n queryKey: KEY.insight(id ?? ''),\n enabled: Boolean(id),\n queryFn: async () => {\n const result = await braQuery<{ braInsight: BraInsight | null }>(\n `query BraInsight($id: ID!) {\n braInsight(id: $id) { ${INSIGHT_FIELDS} }\n }`,\n { id },\n apiGatewayUrl\n );\n return result.braInsight;\n },\n });\n};\n\nexport const useCreateInsight = () => {\n const { apiGatewayUrl } = useBrainyRich();\n const qc = useQueryClient();\n return useMutation({\n mutationFn: async (input: BraCreateInsightInput) => {\n const result = await braMutate<{ braCreateInsight: BraInsight }>(\n `mutation BraCreateInsight($input: BraCreateInsightInput!) {\n braCreateInsight(input: $input) { ${INSIGHT_FIELDS} }\n }`,\n { input },\n apiGatewayUrl\n );\n return result.braCreateInsight;\n },\n ...mutationFeedback<BraInsight, BraCreateInsightInput>({\n success: 'Insight created',\n onSuccess: () => qc.invalidateQueries({ queryKey: KEY.insights }),\n }),\n });\n};\n\nexport const useAcknowledgeInsight = () => {\n const { apiGatewayUrl } = useBrainyRich();\n const qc = useQueryClient();\n return useMutation({\n mutationFn: async (id: string) => {\n const result = await braMutate<{ braAcknowledgeInsight: BraInsight }>(\n `mutation BraAcknowledgeInsight($id: ID!) {\n braAcknowledgeInsight(id: $id) { ${INSIGHT_FIELDS} }\n }`,\n { id },\n apiGatewayUrl\n );\n return result.braAcknowledgeInsight;\n },\n ...mutationFeedback<BraInsight, string>({\n success: 'Insight acknowledged',\n onSuccess: (data) => {\n qc.invalidateQueries({ queryKey: KEY.insights });\n qc.invalidateQueries({ queryKey: KEY.insight(data.id) });\n },\n }),\n });\n};\n\nexport const useDismissInsight = () => {\n const { apiGatewayUrl } = useBrainyRich();\n const qc = useQueryClient();\n return useMutation({\n mutationFn: async (id: string) => {\n const result = await braMutate<{ braDismissInsight: BraInsight }>(\n `mutation BraDismissInsight($id: ID!) {\n braDismissInsight(id: $id) { ${INSIGHT_FIELDS} }\n }`,\n { id },\n apiGatewayUrl\n );\n return result.braDismissInsight;\n },\n ...mutationFeedback<BraInsight, string>({\n success: 'Insight dismissed',\n onSuccess: (data) => {\n qc.invalidateQueries({ queryKey: KEY.insights });\n qc.invalidateQueries({ queryKey: KEY.insight(data.id) });\n },\n }),\n });\n};\n\nexport const useResolveInsight = () => {\n const { apiGatewayUrl } = useBrainyRich();\n const qc = useQueryClient();\n return useMutation({\n mutationFn: async (id: string) => {\n const result = await braMutate<{ braResolveInsight: BraInsight }>(\n `mutation BraResolveInsight($id: ID!) {\n braResolveInsight(id: $id) { ${INSIGHT_FIELDS} }\n }`,\n { id },\n apiGatewayUrl\n );\n return result.braResolveInsight;\n },\n ...mutationFeedback<BraInsight, string>({\n success: 'Insight resolved',\n onSuccess: (data) => {\n qc.invalidateQueries({ queryKey: KEY.insights });\n qc.invalidateQueries({ queryKey: KEY.insight(data.id) });\n },\n }),\n });\n};\n\n// ============================================================================\n// Transactions\n// ============================================================================\n\nexport const useTransactions = (params: TransactionFilters = {}) => {\n const { apiGatewayUrl } = useBrainyRich();\n const query = useQuery({\n queryKey: [...KEY.transactions, params],\n queryFn: async () => {\n const result = await braQuery<{ braListTransactions: Connection<BraTransaction> }>(\n `query BraListTransactions($accountId: ID, $type: BraTransactionType, $pagination: PaginationInput) {\n braListTransactions(accountId: $accountId, type: $type, pagination: $pagination) {\n items { ${TRANSACTION_FIELDS} }\n pageInfo { cursor hasMore }\n }\n }`,\n {\n accountId: params.accountId,\n type: params.type,\n pagination: params.pagination ?? DEFAULT_PAGE,\n },\n apiGatewayUrl\n );\n return result.braListTransactions;\n },\n });\n return {\n ...query,\n data: query.data?.items ?? [],\n pageInfo: query.data?.pageInfo,\n };\n};\n\nexport const useRecordTransaction = () => {\n const { apiGatewayUrl } = useBrainyRich();\n const qc = useQueryClient();\n return useMutation({\n mutationFn: async (input: BraCreateTransactionInput) => {\n const result = await braMutate<{ braRecordTransaction: BraTransaction }>(\n `mutation BraRecordTransaction($input: BraCreateTransactionInput!) {\n braRecordTransaction(input: $input) { ${TRANSACTION_FIELDS} }\n }`,\n { input },\n apiGatewayUrl\n );\n return result.braRecordTransaction;\n },\n ...mutationFeedback<BraTransaction, BraCreateTransactionInput>({\n success: 'Transaction recorded',\n onSuccess: (data) => {\n qc.invalidateQueries({ queryKey: KEY.transactions });\n qc.invalidateQueries({ queryKey: KEY.account(data.accountId) });\n qc.invalidateQueries({ queryKey: KEY.netWorth });\n },\n }),\n });\n};\n\n// ============================================================================\n// Rebalance proposals\n// ============================================================================\n\nexport const useRebalanceProposals = (params: RebalanceFilters = {}) => {\n const { apiGatewayUrl } = useBrainyRich();\n const query = useQuery({\n queryKey: [...KEY.rebalances, params],\n queryFn: async () => {\n const result = await braQuery<{ braListRebalanceProposals: BraRebalanceProposal[] }>(\n `query BraListRebalanceProposals($householdId: ID, $portfolioId: ID, $status: BraRebalanceStatus) {\n braListRebalanceProposals(householdId: $householdId, portfolioId: $portfolioId, status: $status) {\n ${REBALANCE_FIELDS}\n }\n }`,\n {\n householdId: params.householdId,\n portfolioId: params.portfolioId,\n status: params.status,\n },\n apiGatewayUrl\n );\n return result.braListRebalanceProposals;\n },\n });\n return { ...query, data: query.data ?? [] };\n};\n\nexport const useCreateRebalanceProposal = () => {\n const { apiGatewayUrl } = useBrainyRich();\n const qc = useQueryClient();\n return useMutation({\n mutationFn: async (input: BraCreateRebalanceProposalInput) => {\n const result = await braMutate<{ braCreateRebalanceProposal: BraRebalanceProposal }>(\n `mutation BraCreateRebalanceProposal($input: BraCreateRebalanceProposalInput!) {\n braCreateRebalanceProposal(input: $input) { ${REBALANCE_FIELDS} }\n }`,\n { input },\n apiGatewayUrl\n );\n return result.braCreateRebalanceProposal;\n },\n ...mutationFeedback<BraRebalanceProposal, BraCreateRebalanceProposalInput>({\n success: 'Rebalance proposal created',\n onSuccess: () => qc.invalidateQueries({ queryKey: KEY.rebalances }),\n }),\n });\n};\n\nexport const useTransitionRebalanceProposal = () => {\n const { apiGatewayUrl } = useBrainyRich();\n const qc = useQueryClient();\n return useMutation({\n mutationFn: async (vars: { id: string; status: BraRebalanceStatus }) => {\n const result = await braMutate<{ braTransitionRebalanceProposal: BraRebalanceProposal }>(\n `mutation BraTransitionRebalanceProposal($id: ID!, $status: BraRebalanceStatus!) {\n braTransitionRebalanceProposal(id: $id, status: $status) { ${REBALANCE_FIELDS} }\n }`,\n vars,\n apiGatewayUrl\n );\n return result.braTransitionRebalanceProposal;\n },\n ...mutationFeedback<BraRebalanceProposal, { id: string; status: BraRebalanceStatus }>({\n success: (data) => `Rebalance ${data.status.toLowerCase()}`,\n onSuccess: () => qc.invalidateQueries({ queryKey: KEY.rebalances }),\n }),\n });\n};\n\n// ============================================================================\n// Pagination — \"load more\" for list pages + full-set pagers for aggregations\n// ============================================================================\n//\n// Every `braList*` connection returns `pageInfo { cursor hasMore }`. The gateway\n// is offset-based, so the FIRST page must OMIT `cursor` (explicit null → 500);\n// subsequent pages pass the previous page's `pageInfo.cursor`. Both helpers\n// below honor that rule.\n//\n// • `usePaged*` — incremental \"load more\" for interactive lists. Returns\n// a FLAT `items` array plus `hasMore` / `loadMore`,\n// pairs with the `<LoadMore/>` component.\n// • `fetchAll* / useAll*` — page through to `hasMore === false` so AGGREGATION\n// pages (Analytics net-cash-flow, Tax realized proceeds,\n// Reports ledger) compute over the FULL set, never a\n// truncated first 100.\n\nexport interface PagedListResult<T> {\n /** Flattened items across every fetched page. */\n items: T[];\n /** Another page exists. */\n hasMore: boolean;\n /** Fetch the next page (appends to `items`). */\n loadMore: () => void;\n /** First page in flight. */\n isLoading: boolean;\n /** A subsequent page in flight (drive the `<LoadMore/>` spinner off this). */\n isFetchingNextPage: boolean;\n isError: boolean;\n refetch: () => void;\n}\n\n/**\n * Generic cursor-accumulating list hook built on React-Query `useInfiniteQuery`.\n * Concrete `usePaged*` wrappers below supply the query + variables; page agents\n * consume those, not this directly.\n */\nfunction usePagedConnection<T>(config: {\n queryKey: readonly unknown[];\n query: string;\n buildVariables: (pagination: PaginationInput) => Record<string, unknown>;\n select: (data: unknown) => Connection<T>;\n enabled?: boolean;\n pageSize?: number;\n}): PagedListResult<T> {\n const { apiGatewayUrl } = useBrainyRich();\n const pageSize = config.pageSize ?? DEFAULT_PAGE.limit ?? 100;\n const infinite = useInfiniteQuery({\n queryKey: config.queryKey,\n enabled: config.enabled ?? true,\n initialPageParam: null as string | null,\n queryFn: async ({ pageParam }) => {\n const pagination: PaginationInput = pageParam\n ? { limit: pageSize, cursor: pageParam }\n : { limit: pageSize };\n const data = await braQuery<unknown>(\n config.query,\n config.buildVariables(pagination),\n apiGatewayUrl\n );\n return config.select(data);\n },\n getNextPageParam: (last) =>\n last.pageInfo.hasMore && last.pageInfo.cursor ? last.pageInfo.cursor : undefined,\n });\n\n return {\n items: (infinite.data?.pages ?? []).flatMap((page) => page.items),\n hasMore: Boolean(infinite.hasNextPage),\n loadMore: () => {\n void infinite.fetchNextPage();\n },\n isLoading: infinite.isLoading,\n isFetchingNextPage: infinite.isFetchingNextPage,\n isError: infinite.isError,\n refetch: () => {\n void infinite.refetch();\n },\n };\n}\n\nexport const usePagedAccounts = (params: AccountFilters = {}): PagedListResult<BraAccount> =>\n usePagedConnection<BraAccount>({\n queryKey: [...KEY.accounts, 'paged', params],\n query: `query BraListAccounts($householdId: ID, $status: BraAccountStatus, $pagination: PaginationInput) {\n braListAccounts(householdId: $householdId, status: $status, pagination: $pagination) {\n items { ${ACCOUNT_FIELDS} }\n pageInfo { cursor hasMore }\n }\n }`,\n buildVariables: (pagination) => ({\n householdId: params.householdId,\n status: params.status,\n pagination,\n }),\n select: (data) => (data as { braListAccounts: Connection<BraAccount> }).braListAccounts,\n });\n\nexport const usePagedPortfolios = (params: PortfolioFilters = {}): PagedListResult<BraPortfolio> =>\n usePagedConnection<BraPortfolio>({\n queryKey: [...KEY.portfolios, 'paged', params],\n query: `query BraListPortfolios($householdId: ID, $status: BraPortfolioStatus, $pagination: PaginationInput) {\n braListPortfolios(householdId: $householdId, status: $status, pagination: $pagination) {\n items { ${PORTFOLIO_FIELDS} }\n pageInfo { cursor hasMore }\n }\n }`,\n buildVariables: (pagination) => ({\n householdId: params.householdId,\n status: params.status,\n pagination,\n }),\n select: (data) => (data as { braListPortfolios: Connection<BraPortfolio> }).braListPortfolios,\n });\n\nexport const usePagedGoals = (params: GoalFilters = {}): PagedListResult<BraGoal> =>\n usePagedConnection<BraGoal>({\n queryKey: [...KEY.goals, 'paged', params],\n query: `query BraListGoals($householdId: ID, $status: BraGoalStatus, $pagination: PaginationInput) {\n braListGoals(householdId: $householdId, status: $status, pagination: $pagination) {\n items { ${GOAL_FIELDS} }\n pageInfo { cursor hasMore }\n }\n }`,\n buildVariables: (pagination) => ({\n householdId: params.householdId,\n status: params.status,\n pagination,\n }),\n select: (data) => (data as { braListGoals: Connection<BraGoal> }).braListGoals,\n });\n\nexport const usePagedHouseholds = (params: HouseholdFilters = {}): PagedListResult<BraHousehold> =>\n usePagedConnection<BraHousehold>({\n queryKey: [...KEY.households, 'paged', params],\n query: `query BraListHouseholds($status: BraHouseholdStatus, $pagination: PaginationInput) {\n braListHouseholds(status: $status, pagination: $pagination) {\n items { ${HOUSEHOLD_FIELDS} }\n pageInfo { cursor hasMore }\n }\n }`,\n buildVariables: (pagination) => ({ status: params.status, pagination }),\n select: (data) => (data as { braListHouseholds: Connection<BraHousehold> }).braListHouseholds,\n });\n\nexport const usePagedInsights = (params: InsightFilters = {}): PagedListResult<BraInsight> =>\n usePagedConnection<BraInsight>({\n queryKey: [...KEY.insights, 'paged', params],\n query: `query BraListInsights($severity: BraInsightSeverity, $status: BraInsightStatus, $subjectId: ID, $subjectType: String, $pagination: PaginationInput) {\n braListInsights(severity: $severity, status: $status, subjectId: $subjectId, subjectType: $subjectType, pagination: $pagination) {\n items { ${INSIGHT_FIELDS} }\n pageInfo { cursor hasMore }\n }\n }`,\n buildVariables: (pagination) => ({\n severity: params.severity,\n status: params.status,\n subjectId: params.subjectId,\n subjectType: params.subjectType,\n pagination,\n }),\n select: (data) => (data as { braListInsights: Connection<BraInsight> }).braListInsights,\n });\n\nexport const usePagedTransactions = (\n params: TransactionFilters = {}\n): PagedListResult<BraTransaction> =>\n usePagedConnection<BraTransaction>({\n queryKey: [...KEY.transactions, 'paged', params],\n query: `query BraListTransactions($accountId: ID, $type: BraTransactionType, $pagination: PaginationInput) {\n braListTransactions(accountId: $accountId, type: $type, pagination: $pagination) {\n items { ${TRANSACTION_FIELDS} }\n pageInfo { cursor hasMore }\n }\n }`,\n buildVariables: (pagination) => ({\n accountId: params.accountId,\n type: params.type,\n pagination,\n }),\n select: (data) =>\n (data as { braListTransactions: Connection<BraTransaction> }).braListTransactions,\n });\n\n// ----------------------------------------------------------------------------\n// Full-set pagers (aggregation)\n// ----------------------------------------------------------------------------\n\n/** Page through a connection until `hasMore === false`, returning every item. */\nasync function fetchAllConnection<T>(\n fetchPage: (pagination: PaginationInput) => Promise<Connection<T>>,\n pageSize = 200,\n maxPages = 500\n): Promise<T[]> {\n const all: T[] = [];\n let cursor: string | null | undefined;\n for (let i = 0; i < maxPages; i++) {\n const pagination: PaginationInput = cursor ? { limit: pageSize, cursor } : { limit: pageSize };\n const connection = await fetchPage(pagination);\n all.push(...connection.items);\n if (!connection.pageInfo.hasMore || !connection.pageInfo.cursor) break;\n cursor = connection.pageInfo.cursor;\n }\n return all;\n}\n\n/** Fetch EVERY transaction matching `filters` (all pages). */\nexport async function fetchAllTransactions(\n apiGatewayUrl: string | undefined,\n filters: Omit<TransactionFilters, 'pagination'> = {},\n pageSize = 200\n): Promise<BraTransaction[]> {\n return fetchAllConnection<BraTransaction>(async (pagination) => {\n const data = await braQuery<{ braListTransactions: Connection<BraTransaction> }>(\n `query BraListTransactions($accountId: ID, $type: BraTransactionType, $pagination: PaginationInput) {\n braListTransactions(accountId: $accountId, type: $type, pagination: $pagination) {\n items { ${TRANSACTION_FIELDS} }\n pageInfo { cursor hasMore }\n }\n }`,\n { accountId: filters.accountId, type: filters.type, pagination },\n apiGatewayUrl\n );\n return data.braListTransactions;\n }, pageSize);\n}\n\n/**\n * Aggregation-ready hook: ALL transactions matching `filters`. Use on Analytics\n * (net-cash-flow), Tax (realized proceeds) and Reports (ledger) so totals are\n * computed over the complete set rather than a truncated first page.\n */\nexport const useAllTransactions = (filters: Omit<TransactionFilters, 'pagination'> = {}) => {\n const { apiGatewayUrl } = useBrainyRich();\n const query = useQuery({\n queryKey: [...KEY.transactions, 'all', filters],\n queryFn: () => fetchAllTransactions(apiGatewayUrl, filters),\n });\n return { ...query, data: query.data ?? [] };\n};\n\n/** Fetch EVERY account matching `filters` (all pages). */\nexport async function fetchAllAccounts(\n apiGatewayUrl: string | undefined,\n filters: Omit<AccountFilters, 'pagination'> = {},\n pageSize = 200\n): Promise<BraAccount[]> {\n return fetchAllConnection<BraAccount>(async (pagination) => {\n const data = await braQuery<{ braListAccounts: Connection<BraAccount> }>(\n `query BraListAccounts($householdId: ID, $status: BraAccountStatus, $pagination: PaginationInput) {\n braListAccounts(householdId: $householdId, status: $status, pagination: $pagination) {\n items { ${ACCOUNT_FIELDS} }\n pageInfo { cursor hasMore }\n }\n }`,\n { householdId: filters.householdId, status: filters.status, pagination },\n apiGatewayUrl\n );\n return data.braListAccounts;\n }, pageSize);\n}\n\n/**\n * Aggregation-ready hook: ALL accounts matching `filters`. Because\n * `braListHoldings` is itself un-paginated (returns the full array for an\n * account/portfolio), holdings-heavy aggregations become complete by iterating\n * the full account set from here and reading each account's holdings.\n */\nexport const useAllAccounts = (filters: Omit<AccountFilters, 'pagination'> = {}) => {\n const { apiGatewayUrl } = useBrainyRich();\n const query = useQuery({\n queryKey: [...KEY.accounts, 'all', filters],\n queryFn: () => fetchAllAccounts(apiGatewayUrl, filters),\n });\n return { ...query, data: query.data ?? [] };\n};\n"],"mappings":"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"}
|