@mx-cartographer/experiences 4.0.14-alpha.JB0 → 4.0.14-alpha.JB2

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (75) hide show
  1. package/dist/AccountStore-B23-oV1B.mjs +244 -0
  2. package/dist/AccountStore-B23-oV1B.mjs.map +1 -0
  3. package/dist/BeatApi-BxXgbSJY.mjs +99 -0
  4. package/dist/BeatApi-BxXgbSJY.mjs.map +1 -0
  5. package/dist/BudgetUtil-BSn9Zr71.mjs +208 -0
  6. package/dist/BudgetUtil-BSn9Zr71.mjs.map +1 -0
  7. package/dist/CashflowApi-zcebgnO1.mjs +103 -0
  8. package/dist/CashflowApi-zcebgnO1.mjs.map +1 -0
  9. package/dist/CashflowStore-gPEEBiXo.mjs +53 -0
  10. package/dist/CashflowStore-gPEEBiXo.mjs.map +1 -0
  11. package/dist/Categories-XVFviD23.mjs +117 -0
  12. package/dist/Categories-XVFviD23.mjs.map +1 -0
  13. package/dist/CategoryStore-CSNSMNA6.mjs +298 -0
  14. package/dist/CategoryStore-CSNSMNA6.mjs.map +1 -0
  15. package/dist/ConnectMiniWidget-Ep65CtHH.mjs +10854 -0
  16. package/dist/ConnectMiniWidget-Ep65CtHH.mjs.map +1 -0
  17. package/dist/DebtsStore-Duf3n1vZ.mjs +127 -0
  18. package/dist/DebtsStore-Duf3n1vZ.mjs.map +1 -0
  19. package/dist/Donut-DgMeKScZ.mjs +53 -0
  20. package/dist/Donut-DgMeKScZ.mjs.map +1 -0
  21. package/dist/Fetch-DpUi1_Dx.mjs +99 -0
  22. package/dist/Fetch-DpUi1_Dx.mjs.map +1 -0
  23. package/dist/GoalStore-BYoRLx99.mjs +128 -0
  24. package/dist/GoalStore-BYoRLx99.mjs.map +1 -0
  25. package/dist/MerchantStore-RhLvDvX-.mjs +118 -0
  26. package/dist/MerchantStore-RhLvDvX-.mjs.map +1 -0
  27. package/dist/NetWorthStore-syD1VnxE.mjs +66 -0
  28. package/dist/NetWorthStore-syD1VnxE.mjs.map +1 -0
  29. package/dist/NotificationStore-CqTYHfJC.mjs +141 -0
  30. package/dist/NotificationStore-CqTYHfJC.mjs.map +1 -0
  31. package/dist/RecurringActivityStore-B_COvGWG.mjs +304 -0
  32. package/dist/RecurringActivityStore-B_COvGWG.mjs.map +1 -0
  33. package/dist/StackedLineChart-CCqGRwvs.mjs +342 -0
  34. package/dist/StackedLineChart-CCqGRwvs.mjs.map +1 -0
  35. package/dist/TransactionStore-BUrjBWkk.mjs +478 -0
  36. package/dist/TransactionStore-BUrjBWkk.mjs.map +1 -0
  37. package/dist/index.es.js +12 -17869
  38. package/dist/index.es.js.map +1 -1
  39. package/dist/index.es10.js +107 -0
  40. package/dist/index.es10.js.map +1 -0
  41. package/dist/index.es11.js +159 -0
  42. package/dist/index.es11.js.map +1 -0
  43. package/dist/index.es12.js +483 -0
  44. package/dist/index.es12.js.map +1 -0
  45. package/dist/index.es13.js +620 -0
  46. package/dist/index.es13.js.map +1 -0
  47. package/dist/index.es14.js +788 -0
  48. package/dist/index.es14.js.map +1 -0
  49. package/dist/index.es15.js +891 -0
  50. package/dist/index.es15.js.map +1 -0
  51. package/dist/index.es16.js +962 -0
  52. package/dist/index.es16.js.map +1 -0
  53. package/dist/index.es17.js +1904 -0
  54. package/dist/index.es17.js.map +1 -0
  55. package/dist/index.es2.js +11 -0
  56. package/dist/index.es2.js.map +1 -0
  57. package/dist/index.es3.js +10 -0
  58. package/dist/index.es3.js.map +1 -0
  59. package/dist/index.es4.js +9 -0
  60. package/dist/index.es4.js.map +1 -0
  61. package/dist/index.es5.js +7 -0
  62. package/dist/index.es5.js.map +1 -0
  63. package/dist/index.es6.js +7 -0
  64. package/dist/index.es6.js.map +1 -0
  65. package/dist/index.es7.js +10 -0
  66. package/dist/index.es7.js.map +1 -0
  67. package/dist/index.es8.js +10 -0
  68. package/dist/index.es8.js.map +1 -0
  69. package/dist/index.es9.js +18 -0
  70. package/dist/index.es9.js.map +1 -0
  71. package/dist/useCombineEvents-CZUDHE96.mjs +170 -0
  72. package/dist/useCombineEvents-CZUDHE96.mjs.map +1 -0
  73. package/dist/usePrevious-BLb3umpI.mjs +11 -0
  74. package/dist/usePrevious-BLb3umpI.mjs.map +1 -0
  75. package/package.json +1 -1
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.es15.js","sources":["../src/common/constants/SpendingPlan.ts","../src/common/api/LocalizedCopyApi.ts","../src/common/api/UserApi.ts","../src/common/api/WidgetApi.ts","../src/common/components/barchart/Legend.tsx","../src/common/components/barchart/Bar.tsx","../src/common/components/barchart/BarColumn.tsx","../src/common/components/barchart/Util.ts","../src/common/components/barchart/BarChart.tsx","../src/common/components/donuts/MultiSegmentDonut.tsx","../src/common/components/ResponsiveButton.tsx","../src/common/stores/GlobalCopyStore.ts","../src/insights/store/BeatStore.ts","../src/budgets/api/BudgetsApi.ts","../src/budgets/store/BudgetsStore.ts","../src/common/types/Beat.ts","../src/common/types/Expense.ts","../src/common/types/ScreenSize.tsx","../src/common/stores/ConnectStore.ts","../src/common/stores/GlobalUiStore.ts","../src/common/stores/UserStore.ts","../src/common/stores/GlobalStore.ts"],"sourcesContent":["export const LOADING_STATUS = {\n ERROR: 'ERROR',\n LOADING: 'LOADING',\n SUCCESS: 'SUCCESS',\n}\n\nexport enum PlanTypes {\n SpendingPlan = 0,\n Budgets = 1,\n}\n\nexport enum IterationItemTypes {\n RecurringExpense = 0,\n PlannedExpense = 1,\n Other = 2,\n Income = 3,\n}\n","import Fetch from '../utils/Fetch'\n\nimport { ApiEndpoints } from '../constants/ApiEndpoints'\n\nexport class LocalizedCopyApi {\n fetchInstance: Fetch\n\n constructor(endpoint: string, token: string) {\n this.fetchInstance = new Fetch(endpoint, token)\n }\n\n getLocalizedCopy = async (req: any) => {\n return this.fetchInstance.post(ApiEndpoints.LOCALIZED_COPY, req).then((data) => data)\n }\n\n getLocalizedContent = async (namespace: string) => {\n return this.fetchInstance\n .post(`${ApiEndpoints.LOCALIZED_CONTENT}/${namespace}`)\n .then((data) => data)\n }\n}\n","import Fetch from '../utils/Fetch'\n\nimport { ApiEndpoints } from '../constants'\n\nimport type { UserProfile } from '../types'\n\nexport class UserApi {\n fetchInstance: Fetch\n\n constructor(endpoint: string, token: string) {\n this.fetchInstance = new Fetch(endpoint, token)\n }\n\n getUserProfile = async () => {\n return this.fetchInstance.get(ApiEndpoints.APP_DATA).then((data) => data.user_profile)\n }\n\n updateUserProfile = async (userProfile: UserProfile) => {\n return this.fetchInstance\n .put(`${ApiEndpoints.USER_PROFILES}/${userProfile.guid}`, userProfile)\n .then((data) => data.user_profile)\n }\n}\n","import Fetch from '../utils/Fetch'\n\nimport { ApiEndpoints } from '../constants'\n\nexport class WidgetApi {\n fetchInstance: Fetch\n\n constructor(endpoint: string, token: string) {\n this.fetchInstance = new Fetch(endpoint, token)\n }\n\n requestWidgetUrl = async (req: any) => {\n return this.fetchInstance.post(ApiEndpoints.WIDGET_URLS, req).then((data) => data.widget_url)\n }\n}\n","import React from 'react'\nimport { css } from '@mxenabled/cssinjs'\n\nimport { Text, useTokens } from '@kyper/mui'\n\ninterface BarChartLegendProps {\n color: string\n labelAverage: string\n labelMain: string\n}\n\nconst Legend: React.FC<BarChartLegendProps> = ({ color, labelAverage, labelMain }) => {\n const tokens = useTokens()\n const styles = getStyles(tokens, color)\n\n return (\n <div className={`mx-cmn-bar-chart-legend ${styles}`}>\n <div aria-label={labelMain} className=\"mx-cmn-color-square\" role=\"img\" />\n <Text variant=\"XSmall\">{labelMain}</Text>\n\n <div aria-label={labelAverage} className=\"mx-cmn-triple-dot\" role=\"img\">\n <div className=\"mx-cmn-dot\" />\n <div className=\"mx-cmn-dot\" />\n <div className=\"mx-cmn-dot\" />\n </div>\n <Text variant=\"XSmall\">{labelAverage}</Text>\n </div>\n )\n}\n\nconst getStyles = (tokens: any, color: string) =>\n css({\n alignItems: 'center',\n display: 'flex',\n gap: tokens.Spacing.XSmall,\n justifyContent: 'flex-end',\n marginRight: tokens.Spacing.XLarge,\n paddingBottom: tokens.Spacing.XSmall,\n width: '100%',\n '& .mx-cmn-color-square': {\n backgroundColor: color,\n height: 6,\n width: 6,\n },\n '& .mx-cmn-triple-dot': {\n display: 'flex',\n gap: 1,\n },\n '& .mx-cmn-dot': {\n backgroundColor: tokens.Color.Neutral500,\n height: 3,\n width: 3,\n borderRadius: 1.5,\n },\n '& > .kyper-text': {\n marginRight: tokens.Spacing.XSmall,\n },\n })\n\nexport default Legend\n","import React from 'react'\nimport { css, keyframes } from '@mxenabled/cssinjs'\n\nimport { Text, useTokens } from '@kyper/mui'\n\ninterface BarProps {\n ariaLabel?: string\n color: string\n height: number\n index: number\n label: string\n onClick?: (index: number) => void\n selectedIndex?: number\n value: number\n}\n\n/**\n * The Bar component is what displays the colored (optionally clickable) bar\n *\n * @param ariaLabel OPTIONAL aria label used on the bar\n * @param color The color of the bar\n * @param height The pixel height of the bar\n * @param index The index of the bar\n * @param label The label to use above (on positive bars) or below (on negative bars)\n * @param onClick OPTIONAL function to call if the bar is clicked\n * @param selectedIndex OPTIONAL indicates the selected bar\n * @param value Value representing the bar\n */\nconst Bar: React.FC<BarProps> = ({\n ariaLabel,\n color,\n height,\n index,\n label,\n onClick,\n selectedIndex,\n value,\n}) => {\n const tokens = useTokens()\n const styles = getStyles(tokens, color, height)\n\n const handleKeyDown = (event: React.KeyboardEvent<HTMLDivElement>) => {\n if (onClick && (event.key === ' ' || event.key === 'Enter')) {\n onClick(index)\n }\n }\n\n const labelColor =\n selectedIndex === undefined || selectedIndex === index ? 'primary' : 'secondary'\n\n const BarLabel = () => (\n <Text\n aria-hidden={true}\n bold={selectedIndex === index}\n className=\"mx-cmn-bar-text\"\n color={labelColor}\n component=\"div\"\n variant=\"Small\"\n >\n {label}\n </Text>\n )\n\n return (\n <div className={`mx-cmn-bar-container ${styles} ${value < 0 ? 'mx-cmn-negative' : ''}`}>\n {/* Display the value on top for positive values */}\n {value >= 0 && <BarLabel />}\n\n <div\n aria-label={ariaLabel}\n className={`mx-cmn-bar ${onClick ? 'mx-cmn-clickable' : ''} ${\n value < 0 ? 'mx-cmn-bar-negative' : ''\n }`}\n onClick={onClick ? () => onClick?.(index) : undefined}\n onKeyDown={handleKeyDown}\n role={ariaLabel ? 'button' : undefined}\n tabIndex={ariaLabel ? 0 : undefined}\n />\n\n {/* Display the value on bottom for negative values */}\n {value < 0 && <BarLabel />}\n </div>\n )\n}\n\nconst getStyles = (tokens: any, color: string, height: number) => {\n const frameName = `expandBar-${Math.round(height)}`\n const expandAnimation = keyframes(frameName, { from: { height: 0 }, to: { height } })\n\n return css({\n display: 'flex',\n flexDirection: 'column',\n justifyContent: 'flex-end',\n height: '100%',\n '&.mx-cmn-negative': {\n justifyContent: 'flex-start',\n },\n '& .mx-cmn-bar': {\n animationDelay: '.5s',\n animationDuration: '1s',\n animationFillMode: 'forwards',\n animationName: expandAnimation,\n animationTimingFunction: tokens.Easing.Default,\n backgroundColor: color,\n borderRadius: `${tokens.BorderRadius.Medium}px ${tokens.BorderRadius.Medium}px 0 0`,\n maxHeight: height,\n },\n '& .mx-cmn-bar-negative': {\n borderRadius: `0 0 ${tokens.BorderRadius.Medium}px ${tokens.BorderRadius.Medium}px`,\n marginTop: -tokens.Spacing.XTiny,\n },\n '& .mx-cmn-bar-text': {\n display: 'flex',\n justifyContent: 'center',\n marginBottom: tokens.Spacing.Tiny,\n marginTop: tokens.Spacing.Tiny,\n whiteSpace: 'nowrap',\n width: '100%',\n },\n })\n}\n\nexport default Bar\n","import React from 'react'\nimport { css } from '@mxenabled/cssinjs'\n\nimport { Text, useTokens } from '@kyper/mui'\n\nimport Bar from './Bar'\n\ninterface BarColumnProps {\n ariaLabel?: string\n averageLineHeight: number\n bottomHeight: number\n color: string\n index?: number\n onClick?: (index: number) => void\n range: number\n selectedIndex?: number\n topHeight: number\n value: number\n valueLabel?: string\n width?: number | string\n xAxisLabel?: string\n}\n\n/**\n * The BarColumn component represents a single vertical slice of the bar chart. It contains from top to bottom\n * the positive section, which will only display a bar if value > 0, the zero line, the average line, negative\n * section, which will only display a bar if value < 0 and the X-Axis label.\n *\n * @param ariaLabel OPTIONAL aria label used to label the bar\n * @param averageLineHeight the pixel height above/below the zero line for the dashed average line\n * @param bottomHeight the height of the bottom (negative) section\n * @param color the color of the bar\n * @param index OPTIONAL index of the bar (Only used when bar is clickable)\n * @param onClick OPTIONAL function to call if the bar is clicked\n * @param range\n * @param selectedIndex OPTIONAL indicates the selected bar\n * @param topHeight the pixel height of the top (positvie section)\n * @param value the value for the bar\n * @param valueLabel OPTIONAL string value to use for the bar\n * @param width OPTIONAL pixel or percentage width of the bar\n * @param xAxisLabel label for the X-Axis\n */\nconst BarColumn: React.FC<BarColumnProps> = ({\n ariaLabel,\n averageLineHeight,\n bottomHeight,\n color,\n index = -1,\n onClick,\n range,\n selectedIndex,\n topHeight,\n value,\n valueLabel = '',\n width,\n xAxisLabel = '',\n}) => {\n const tokens = useTokens()\n const styles = getStyles(tokens, width)\n\n const topBarHeight = (value / range) * topHeight\n const bottomBarHeight = (Math.abs(value) / range) * bottomHeight\n const xAxisColor =\n selectedIndex === undefined || selectedIndex === index ? 'primary' : 'secondary'\n\n return (\n <div className={`mx-cmn-barchart-bar-column ${styles}`}>\n {/* Top (Positive) Chart Area */}\n <div style={{ height: topHeight }}>\n {/* Only display the bar here if it has a positive value */}\n {value >= 0 && (\n <Bar\n ariaLabel={ariaLabel}\n color={color}\n height={topBarHeight}\n index={index}\n label={valueLabel}\n onClick={onClick}\n selectedIndex={selectedIndex}\n value={value}\n />\n )}\n </div>\n\n {/* Zero Line */}\n <div className=\"mx-cmn-zero-line\" />\n\n {/* Average Line - Only display if average is not 0 */}\n {averageLineHeight !== 0 && (\n <div className=\"mx-cmn-chart-average\" style={{ bottom: averageLineHeight }} />\n )}\n\n {/* Bottom (Negative) Chart Area */}\n <div style={{ height: bottomHeight }}>\n {/* Only display the bar here if it has a negative value */}\n {value < 0 && (\n <Bar\n ariaLabel={ariaLabel}\n color={color}\n height={bottomBarHeight}\n index={index}\n label={valueLabel}\n onClick={onClick}\n value={value}\n />\n )}\n </div>\n\n {/* X-Axis label */}\n <div\n className={`mx-cmn-bar-label ${onClick ? 'mx-cmn-clickable' : ''}`}\n onClick={onClick ? () => onClick(index) : undefined}\n >\n <Text bold={selectedIndex === index} color={xAxisColor} variant=\"Small\">\n {xAxisLabel}\n </Text>\n </div>\n </div>\n )\n}\n\nconst getStyles = (tokens: any, width: number | string | undefined) =>\n css({\n display: 'flex',\n flexDirection: 'column',\n flexGrow: width === undefined ? 1 : 0,\n width,\n '& .mx-cmn-chart-average': {\n borderTop: `${tokens.Spacing.XTiny}px dotted ${tokens.Color.Neutral500}`,\n position: 'relative',\n marginRight: tokens.Spacing.XTiny,\n },\n '& .mx-cmn-zero-line': {\n borderBottom: '1px solid text.primary',\n width: '100%',\n },\n '& .mx-cmn-bar-label': {\n minHeight: tokens.Spacing.Medium,\n maxHeight: tokens.Spacing.Medium,\n marginBottom: tokens.Spacing.XSmall,\n marginTop: tokens.Spacing.XSmall,\n textAlign: 'center',\n width: '100%',\n },\n '& .mx-cmn-clickable': {\n cursor: 'pointer',\n },\n })\n\nexport default BarColumn\n","/**\n * Returns a sum\n *\n * @param acc accumulator\n * @param value current value\n */\nexport const sumReducer = (acc: number, value: number) => acc + value\n\n/**\n * Returns the max range\n *\n * @param acc accumulator\n * @param value current value\n */\nexport const rangeReducer = (acc: number, value: number) =>\n Math.abs(value) > acc ? Math.abs(value) : acc\n\n/**\n * Returns an array with the value of an object added\n *\n * @param acc accumulator\n * @param value current value\n */\nexport const valueReducer = (acc: number[], value: { value: number }) => [...acc, value.value]\n\n/**\n * Returns full height if only the first section is visible, half height if both sections\n * are visible and 0 if the first section is not visible\n *\n * @param hasSection1 If the first section is visible\n * @param hasSection2 If the second section is visible\n * @param fullHeight The full height\n */\nexport const getSectionHeight = (\n hasSection1: boolean,\n hasSection2: boolean,\n fullHeight: number,\n) => {\n const height = hasSection1 && hasSection2 ? fullHeight / 2 : fullHeight\n return !hasSection1 ? 0 : height\n}\n\n/**\n * Returns the +/- pixel height of the average line. This is calcluated using the percentange of average\n * to max value multiplied by the height. If the max value is less than 0, then we use negative min value.\n *\n * @param average The average value\n * @param max The maximum value\n * @param min The minimum value\n * @param height The height of the container the average line displays in.\n */\nexport const getAverageLineHeight = (average: number, max: number, min: number, height: number) => {\n return (average / (max < 0 ? -min : max)) * height || 0\n}\n","import React from 'react'\nimport { css } from '@mxenabled/cssinjs'\n\nimport { useTokens } from '@kyper/mui'\n\nimport Legend from './Legend'\nimport BarColumn from './BarColumn'\nimport {\n getAverageLineHeight,\n getSectionHeight,\n rangeReducer,\n sumReducer,\n valueReducer,\n} from './Util'\n\nexport type BarChartData = {\n ariaLabel: string\n label: string\n value: number\n}\n\nexport interface BarChartProps {\n average?: number\n barWidth?: number | string\n color: string\n data: BarChartData[]\n height: number\n legendLabelAverage: string\n legendLabelMain: string\n onBarClick?: (index: number) => void\n selectedIndex?: number\n valueFormatter?: (value: number) => string\n}\n\n/**\n * BarChart component to display a vertical bar chart given an array of data\n *\n * @param average OPTIONAL custom average not based on average or all value\n * @param barWidth OPTIONAL pixel or percentage width of bars\n * @param color Color of the bars\n * @param data An array of chart data. Chart data must contain and aria label, label and value.\n * @param height Height in pixels of the chart\n * @param legendLabelAverage Label to use on legend for the average value\n * @param legendLabelMain Label to use on the legend for the data\n * @param onBarClick OPTIONAL function to call if bar is clicked\n * @param selectedIndex OPTIONAL indicates the selected bar\n * @param valueFormatter OPTIONAL function to call to format the value displayed with the bars\n */\nconst BarChart: React.FC<BarChartProps> = ({\n average,\n barWidth = '8%',\n color,\n data,\n height,\n legendLabelAverage,\n legendLabelMain,\n onBarClick,\n selectedIndex,\n valueFormatter = (value: number) => `${value}`,\n}) => {\n const tokens = useTokens()\n const styles = getStyles(tokens)\n\n const values = data.reduce(valueReducer, [])\n const avg = average !== undefined ? average : values.reduce(sumReducer, 0) / values.length\n const max = Math.max(...values)\n const min = Math.min(...values)\n const range = values.reduce(rangeReducer, 0)\n\n const hasTop = max >= 0\n const hasBottom = min < 0\n const topHeight = getSectionHeight(hasTop, hasBottom, height)\n const bottomHeight = getSectionHeight(hasBottom, hasTop, height)\n const averageLineHeight = getAverageLineHeight(avg, max, min, topHeight || bottomHeight)\n\n const getBarColor = (index: number) => {\n if (selectedIndex === undefined || index === selectedIndex) {\n return color\n }\n return `${color}80`\n }\n\n const EmptyColumn = () => (\n <BarColumn\n averageLineHeight={averageLineHeight}\n bottomHeight={bottomHeight}\n color={''}\n range={range}\n topHeight={topHeight}\n value={0}\n width={undefined}\n />\n )\n\n return (\n <div className={`mx-cmn-bar-chart ${styles}`}>\n <div className=\"mx-cmn-chart-container\">\n <EmptyColumn />\n {data.map((d, index) => (\n <React.Fragment key={`column-${index}`}>\n <BarColumn\n ariaLabel={d.ariaLabel}\n averageLineHeight={averageLineHeight}\n bottomHeight={bottomHeight}\n color={getBarColor(index)}\n index={index}\n onClick={onBarClick}\n range={range}\n selectedIndex={selectedIndex}\n topHeight={topHeight}\n value={d.value}\n valueLabel={valueFormatter(d.value)}\n width={barWidth}\n xAxisLabel={d.label}\n />\n <EmptyColumn />\n </React.Fragment>\n ))}\n </div>\n <Legend color={color} labelAverage={legendLabelAverage} labelMain={legendLabelMain} />\n </div>\n )\n}\n\nconst getStyles = (tokens: any) =>\n css({\n '& .mx-cmn-chart-container': {\n alignItems: 'flex-end',\n display: 'flex',\n justifyContent: 'space-evenly',\n marginTop: tokens.Spacing.Large,\n marginBottom: tokens.Spacing.Medium,\n },\n })\n\nexport default BarChart\n","import React from 'react'\nimport { css } from '@mxenabled/cssinjs'\n\nimport { useTokens } from '@kyper/mui'\n\nimport { DEFAULT_DONUT_SIZE, DEFAULT_STROKE_WIDTH } from '../../constants/Donut'\n\nexport interface Segment {\n percent: number\n color: string\n}\n\nexport interface MultiSegmentDonutProps {\n children: React.ReactNode\n hasGap?: boolean\n segments: Segment[]\n size?: number\n strokeWidth?: number\n}\n\nconst MultiSegmentDonut: React.FC<MultiSegmentDonutProps> = ({\n hasGap = false,\n segments,\n size = DEFAULT_DONUT_SIZE,\n strokeWidth = DEFAULT_STROKE_WIDTH,\n children,\n}) => {\n const tokens = useTokens()\n const styles = getStyles(tokens, size)\n\n const radius = (size - strokeWidth) / 2\n const halfSize = size / 2\n\n let offset = -90 - (hasGap ? 1 : 0)\n\n let length = 0\n\n return (\n <div className={`mx-cmn-multi-segment-donut ${styles}`}>\n <svg height={size} width={size}>\n <circle\n cx={halfSize}\n cy={halfSize}\n fill=\"none\"\n r={radius}\n stroke={tokens.Color.Neutral300}\n strokeWidth={strokeWidth}\n />\n {segments.map((segment, index) => {\n offset += 360 * length + (hasGap ? 1 : 0)\n length = (segment.percent - (hasGap ? 0.3 : 0)) / 100\n\n return (\n <circle\n cx={halfSize}\n cy={halfSize}\n fill=\"none\"\n key={index}\n r={radius}\n stroke={segment.color}\n strokeDasharray={2 * Math.PI * radius}\n strokeDashoffset={2 * Math.PI * radius * (1 - length)}\n strokeWidth={strokeWidth}\n transform={`rotate(${offset}, ${halfSize}, ${halfSize})`}\n />\n )\n })}\n </svg>\n <div className=\"mx-cmn-multi-segment-donut-children\">{children}</div>\n </div>\n )\n}\n\nconst getStyles = (tokens: any, size: number) =>\n css({\n height: size,\n marginTop: `-${tokens.Spacing.XSmall}px`,\n position: 'relative',\n width: size,\n '& .mx-cmn-multi-segment-donut-children': {\n left: '50%',\n position: 'absolute',\n textAlign: 'center',\n top: '50%',\n transform: 'translate(-50%, -50%)',\n },\n })\n\nexport default MultiSegmentDonut\n","import React from 'react'\n\nimport Button from '@mui/material/Button'\nimport IconButton from '@mui/material/IconButton'\nimport Tooltip from '@mui/material/Tooltip'\nimport useTheme from '@mui/material/styles/useTheme'\n\ninterface ResponsiveButtonProps {\n icon: React.ReactElement\n label: string\n onClick?: () => void\n placement?:\n | 'bottom-end'\n | 'bottom-start'\n | 'bottom'\n | 'left-end'\n | 'left-start'\n | 'left'\n | 'right-end'\n | 'right-start'\n | 'right'\n | 'top-end'\n | 'top-start'\n | 'top'\n tooltipText: string\n variant?: 'contained' | 'outlined' | 'text'\n}\n\nconst ResponsiveButton: React.FC<ResponsiveButtonProps> = ({\n icon,\n label,\n onClick,\n placement = 'bottom',\n tooltipText,\n variant = 'text',\n}) => {\n const theme = useTheme()\n\n return (\n <React.Fragment>\n <Button\n onClick={onClick}\n startIcon={icon}\n sx={{\n [theme.breakpoints.down('lg')]: { display: 'none' },\n [theme.breakpoints.up('lg')]: { display: 'inline-flex' },\n }}\n title={tooltipText}\n variant={variant}\n >\n {label}\n </Button>\n <Tooltip\n describeChild={true}\n placement={placement}\n sx={{ display: { xs: 'inline-flex', lg: 'none' } }}\n title={tooltipText}\n >\n <IconButton onClick={onClick}>{icon}</IconButton>\n </Tooltip>\n </React.Fragment>\n )\n}\n\nexport default ResponsiveButton\n","import { makeAutoObservable, runInAction } from 'mobx'\nimport { GlobalCopyApi } from '../api/GlobalCopyApi'\nimport { GlobalCopy } from '../types'\n\nexport class GlobalCopyStore {\n copy: GlobalCopy = {} as GlobalCopy\n featureNamespace = 'experiences'\n\n api: GlobalCopyApi = new GlobalCopyApi('/', '')\n isInitialized = false\n\n constructor() {\n makeAutoObservable(this)\n }\n\n initialize = async (endpoint: string, token: string) => {\n this.api = new GlobalCopyApi(endpoint, token)\n\n await this.getCopy(this.featureNamespace)\n runInAction(() => {\n this.isInitialized = true\n })\n }\n\n getCopy = async (namespace: string, translationKey: string = '') => {\n try {\n const newCopy = await this.api.getGlobalCopy(namespace, translationKey)\n\n runInAction(() => {\n this.copy = newCopy[namespace]\n })\n } catch (error) {\n console.error(`Error occurred while fetching ${this.featureNamespace} copy: ${error}`)\n }\n }\n}\n","import { makeAutoObservable, runInAction } from 'mobx'\n\nimport { Beat, BeatApi } from '../../common'\n\nexport class BeatStore {\n beats: Beat[] = []\n api: BeatApi = new BeatApi('/', '')\n\n constructor() {\n makeAutoObservable(this)\n }\n\n initialize = async (endpoint: string, token: string) => {\n this.api = new BeatApi(endpoint, token)\n await this.loadBeats()\n }\n\n loadBeats = async () => {\n const beats = await this.api.getBeats()\n\n runInAction(() => {\n this.beats = beats\n })\n }\n}\n","import { ApiEndpoints, type Budget, Category, Fetch } from '../../common'\n\nexport class BudgetsApi {\n fetchInstance: Fetch\n\n constructor(endpoint: string, token: string) {\n this.fetchInstance = new Fetch(endpoint, token)\n }\n\n addBudget = async (category: Category, amount: number, parentGuid: string | null = null) => {\n return this.fetchInstance\n .post(ApiEndpoints.BUDGETS, {\n amount,\n category_guid: category.guid,\n category_name: category.name,\n parent_guid: parentGuid,\n })\n .then((data) => data.budget)\n .catch((error) => error)\n }\n\n deleteBudget = async (guid: string) => {\n return this.fetchInstance.delete(`${ApiEndpoints.BUDGETS}/${guid}`).then((data) => data)\n }\n\n generateBudgets = async () => {\n return this.fetchInstance.post(`${ApiEndpoints.BUDGETS}/generate`).then((data) => data)\n }\n\n getBudgets = async () => {\n return this.fetchInstance\n .get(ApiEndpoints.BUDGETS)\n .then((data) => data.budgets)\n .catch((error) => error)\n }\n\n updateBudget = async (budget: Budget) => {\n return this.fetchInstance\n .put(`${ApiEndpoints.BUDGETS}/${budget.guid}`, budget)\n .then((data) => data.budget)\n .catch((error) => error)\n }\n}\n","import { makeAutoObservable, reaction, runInAction } from 'mobx'\n\nimport { endOfMonth } from 'date-fns/endOfMonth'\nimport { startOfMonth } from 'date-fns/startOfMonth'\nimport { startOfToday } from 'date-fns/startOfToday'\n\nimport { Theme } from '@mui/system'\n\nimport {\n type Budget,\n type Category,\n type DateRange,\n type DetailedBudget,\n type DetailedCategory,\n CategoryApi,\n CategoryGuids,\n GlobalStore,\n} from '../../common'\n\nimport { BudgetsApi } from '../api/BudgetsApi'\nimport { augmentBudgets, findBudget, findSubBudget } from '../utils/BudgetUtil'\n\nexport class BudgetsStore {\n api: BudgetsApi = new BudgetsApi('/', '')\n categoryApi: CategoryApi = new CategoryApi('/', '')\n\n globalStore: GlobalStore\n\n alert: string = ''\n dateRange: DateRange = { start: startOfMonth(startOfToday()), end: endOfMonth(startOfToday()) }\n budgets: Budget[] = []\n selectedBudget: DetailedBudget | undefined\n selectedSubBudget: DetailedBudget | undefined\n\n theme = {} as Theme\n\n constructor(globalStore: GlobalStore) {\n this.globalStore = globalStore\n makeAutoObservable(this)\n }\n\n initialize = async (endpoint: string, token: string) => {\n this.api = new BudgetsApi(endpoint, token)\n this.categoryApi = new CategoryApi(endpoint, token)\n\n /** Reaction to update the selected budget/sub-budget if detailedBudgets is updated **/\n reaction(\n () => this.detailedBudgets,\n (detailedBudgets) => {\n if (detailedBudgets) {\n const budget = this.selectedBudget\n if (budget) {\n this.selectedBudget = findBudget(detailedBudgets, budget.guid)\n }\n\n const subBudget = this.selectedSubBudget\n if (subBudget && subBudget.parent_guid) {\n this.selectedSubBudget = findSubBudget(\n detailedBudgets,\n subBudget.guid,\n subBudget.parent_guid,\n )\n }\n }\n },\n )\n }\n\n get detailedBudgets(): DetailedBudget[] {\n return augmentBudgets(\n this.budgets.filter(\n (budget: Budget) =>\n budget.category_guid !== CategoryGuids.INCOME &&\n budget.category_guid !== CategoryGuids.TRANSFER &&\n budget.category_guid !== CategoryGuids.INVESTMENTS,\n ),\n this.globalStore.categoryStore.detailedCategories,\n this.globalStore.copyStore.copy.budgets,\n this.theme,\n ).sort((a, b) => {\n if (a.percentage > b.percentage) return -1\n if (a.percentage < b.percentage) return 1\n return 0\n })\n }\n\n get unbudgetedCategories(): DetailedCategory[] {\n return this.globalStore.categoryStore.spendCategories.filter(\n (category) => !this.detailedBudgets.find((budget) => budget.category_guid === category.guid),\n )\n }\n\n get totalBudgeted(): number {\n return this.detailedBudgets.reduce((total, budget) => total + budget.amount, 0)\n }\n\n addBudget = async (category: Category, amount: number, parentGuid: string | null = null) => {\n try {\n const budget = await this.api.addBudget(category, amount, parentGuid)\n runInAction(() => {\n this.budgets.push(budget)\n })\n } catch (error) {\n console.error(`Error adding budget: ${error}`)\n }\n }\n\n deleteBudget = async (guid: string) => {\n try {\n await this.api.deleteBudget(guid)\n\n runInAction(() => {\n const index = this.budgets.findIndex((budget) => budget.guid === guid)\n if (index >= 0) {\n this.budgets.splice(index, 1)\n }\n })\n } catch (error) {\n console.error(`Error deleting budget: ${error}`)\n }\n }\n\n loadBudgets = async () => {\n try {\n const budgets = (await this.api.getBudgets()) as Budget[]\n\n runInAction(() => {\n this.budgets = budgets\n })\n } catch (error) {\n console.error(`Error occurred while loading budgets: ${error}`)\n }\n }\n\n setAlert = (alert: string) => (this.alert = alert)\n\n setDateRange = (dateRange: DateRange) => (this.dateRange = dateRange)\n\n setSelectedBudget = (budget: DetailedBudget | undefined) => (this.selectedBudget = budget)\n\n setSelectedSubBudget = (budget: DetailedBudget | undefined) => (this.selectedSubBudget = budget)\n\n setTheme = (theme: Theme) => (this.theme = theme)\n\n /**\n * Recalculate budget by using the average amount from top-level categories\n * @param categories Detailed categories\n */\n recalculateBudgets = async (categories: DetailedCategory[]) => {\n for (const category of categories) {\n const budget = this.budgets.find((budget) => budget.category_guid === category.guid)\n if (budget) {\n await this.api.updateBudget({ ...budget, amount: category.totalAverageAmount })\n } else {\n await this.api.addBudget(category, category.totalAverageAmount)\n }\n }\n\n const budgetsToDelete = this.budgets.filter(\n (budget) => !categories.find((c) => c.guid === budget.category_guid),\n )\n\n for (const budgetToDelete of budgetsToDelete) {\n await this.api.deleteBudget(budgetToDelete.guid)\n }\n await this.loadBudgets()\n }\n\n updateBudget = async (budget: Budget) => {\n try {\n const updatedBudget = await this.api.updateBudget(budget)\n\n runInAction(() => {\n const index = this.budgets.findIndex((b) => b.guid === budget.guid)\n if (index >= 0) {\n this.budgets[index] = updatedBudget\n }\n })\n } catch (error) {\n console.error(`Error updating budget: ${error}`)\n }\n }\n}\n","import { Account } from './Account'\nimport { Transaction } from './Transaction'\n\nexport interface Beat {\n account_guids: string[] | []\n active_at?: string | number\n associated_transaction_guid?: string | null\n call_to_action?: string | null\n category_guids?: string[] | []\n created_at?: string | number\n cta_clicked_at?: number | null\n data_series: DataSeries\n description?: string\n digest?: string\n dismissed_at?: number | null\n displayed_at?: string | null\n errors?: any\n guid: string\n has_been_displayed: boolean\n html_description?: string\n html_in_description_cta?: string\n html_micro_call_to_action?: string\n html_micro_description?: string\n html_micro_title?: string\n html_short_title?: string\n html_title: string\n icon_color?: string | null\n icon_type?: number | null\n in_description_cta?: string | null\n is_dismissed: boolean\n is_obsolete: boolean\n is_refreshable: boolean\n is_sampled: boolean\n merchant_guids: string[] | []\n metadata?: string | null\n micro_call_to_action?: string | null\n micro_description?: string | null\n micro_title?: string | null\n payload: any\n primary_account?: Account\n primary_account_guid?: string | null\n primary_category_guid?: string | null\n primary_goal_guid?: string | null\n primary_merchant_guid?: string | null\n primary_scheduled_payment_guid?: string | null\n primary_transaction?: Transaction\n primary_transaction_guid?: string | null\n power_action_completed_at?: string | null\n power_action_has_been_completed?: boolean\n scheduled_payment_guids: string[] | []\n short_title?: string | null\n supporting_action?: string | null\n template: string\n title: string\n transaction_guids: string[] | []\n transactions?: Transaction[]\n user_guid: string\n user_verification: UserVerification\n}\n\nexport interface DataSeries {\n names?: string[]\n types?: string[]\n data?: any[]\n}\n\nexport enum UserVerification {\n UNKNOWN = 0,\n CORRECT = 1,\n INCORRECT = 2,\n}\n","import { ScheduledPayment, Transaction } from '../index'\n\nexport enum ExpenseStatus {\n Missed = 'Missed',\n Paid = 'Paid',\n Upcoming = 'Upcoming expense',\n Income = 'Income',\n}\n\nexport interface Expense extends ScheduledPayment {\n status: ExpenseStatus\n payments: Transaction[]\n transactions: Transaction[]\n}\n\nexport enum ScheduledPaymentTypes {\n Unknown = 0,\n Subscription = 1,\n Bill = 2,\n}\n","export enum ScreenSize {\n Desktop = 'Desktop',\n Mobile = 'Mobile',\n}\n","import { makeAutoObservable } from 'mobx'\n\nimport { WidgetApi } from '../../common'\n\nimport type { GlobalStore } from '../../common'\n\nexport class ConnectStore {\n widgetApi: WidgetApi = new WidgetApi('/', '')\n\n globalStore: GlobalStore\n\n constructor(globalStore: GlobalStore) {\n this.globalStore = globalStore\n makeAutoObservable(this)\n }\n\n initialize = async (endpoint: string, token: string) => {\n this.widgetApi = new WidgetApi(endpoint, token)\n }\n\n loadWidget = async ({ widget = 'connect_widget', mode = 'light', ...rest }) => {\n return await this.widgetApi.requestWidgetUrl({\n widget_url: { widget_type: widget, color_scheme: mode, ...rest },\n })\n }\n}\n","import { makeAutoObservable } from 'mobx'\n\nimport { addMonths } from 'date-fns/addMonths'\nimport { endOfMonth } from 'date-fns/endOfMonth'\nimport { getMonth } from 'date-fns/getMonth'\nimport { startOfMonth } from 'date-fns/startOfMonth'\n\nimport { Account } from '../types'\nimport type { GlobalStore } from './GlobalStore'\n\nexport class GlobalUiStore {\n globalStore: GlobalStore\n isInitialized = false\n\n selectedAccounts: Account[] = []\n selectedAccountGuids: string[] = this.selectedAccounts.map((account) => account.guid)\n\n displayedDate = new Date()\n displayedDateRange = {\n start: startOfMonth(this.displayedDate),\n end: endOfMonth(this.displayedDate),\n }\n\n constructor(globalStore: GlobalStore) {\n makeAutoObservable(this)\n this.globalStore = globalStore\n }\n\n setInitialized = (isInitialized: boolean) => {\n this.isInitialized = isInitialized\n }\n\n setSelectedAccounts = (accounts: Account[]) => {\n this.selectedAccounts = accounts\n this.selectedAccountGuids = this.selectedAccounts.map((account) => account.guid)\n }\n // Sets an array of selected account guids for the AccountFilter component\n setSelectedAccountGuids = (guids: string[]) => {\n this.selectedAccounts = this.globalStore.accountStore.accounts.filter((account) =>\n guids.includes(account.guid),\n )\n this.selectedAccountGuids = guids\n }\n\n setDisplayedDate = (startDate: Date, endDate: Date) => {\n this.displayedDate = endDate\n this.displayedDateRange = {\n start: startDate,\n end: endDate,\n }\n }\n\n get shouldDisableNextDate() {\n const selectedMonth = getMonth(this.displayedDate)\n const nextMonth = getMonth(addMonths(new Date(), 1))\n\n return selectedMonth === nextMonth\n }\n\n get shouldDisablePrevDate() {\n const selectedMonth = getMonth(this.displayedDate)\n const currentMonth = getMonth(new Date())\n\n return selectedMonth === currentMonth\n }\n}\n","import { makeAutoObservable, runInAction } from 'mobx'\n\nimport { UserApi } from '../api'\n\nimport type { UserProfile } from '../types'\n\nexport class UserStore {\n api: UserApi = new UserApi('/', '')\n\n userProfile: UserProfile | null = null\n\n constructor() {\n makeAutoObservable(this)\n }\n\n initialize = async (endpoint: string, token: string) => {\n this.api = new UserApi(endpoint, token)\n\n await this.loadUserProfile()\n }\n\n loadUserProfile = async () => {\n try {\n const userProfile = await this.api.getUserProfile()\n\n runInAction(() => {\n this.userProfile = userProfile\n })\n } catch (error) {\n console.error(`Error occurred while loading user profile: ${error}`)\n }\n }\n\n updateUserProfile = async (userProfile: UserProfile) => {\n try {\n const updatedProfile = await this.api.updateUserProfile(userProfile)\n\n runInAction(() => {\n this.userProfile = updatedProfile\n })\n } catch (error) {\n console.error(`Error occurred while updating user profile: ${error}`)\n }\n }\n}\n","import { makeAutoObservable } from 'mobx'\n\nimport { AccountStore } from '../../accounts'\nimport { BeatStore } from '../../insights/store/BeatStore'\nimport { BudgetsStore } from '../../budgets/store/BudgetsStore'\nimport { CashflowStore } from '../../cashflow'\nimport { CategoryStore } from '../../categories'\nimport { ConnectStore } from './ConnectStore'\nimport { DebtsStore } from '../../debts/index'\nimport { GlobalUiStore } from './GlobalUiStore'\nimport { GoalStore } from '../../goals'\nimport { MerchantStore } from '../../merchants'\nimport { NetWorthStore } from '../../networth'\nimport { NotificationStore } from '../../notifications'\nimport { RecurringActivityStore } from '../../recurringactivity'\nimport { TransactionStore } from '../../transactions'\nimport { UserStore } from './UserStore'\nimport { GlobalCopyStore } from './GlobalCopyStore'\n\nexport class GlobalStore {\n accountStore: AccountStore\n beatStore: BeatStore\n budgetsStore: BudgetsStore\n cashflowStore: CashflowStore\n categoryStore: CategoryStore\n connectStore: ConnectStore\n copyStore: GlobalCopyStore\n goalStore: GoalStore\n debtsStore: DebtsStore\n merchantStore: MerchantStore\n netWorthStore: NetWorthStore\n notificationStore: NotificationStore\n recurringActivityStore: RecurringActivityStore\n transactionStore: TransactionStore\n userStore: UserStore\n\n globalUiStore: GlobalUiStore\n\n isInitialized = false\n\n constructor() {\n this.accountStore = new AccountStore(this)\n this.beatStore = new BeatStore()\n this.budgetsStore = new BudgetsStore(this)\n this.cashflowStore = new CashflowStore(this)\n this.categoryStore = new CategoryStore(this)\n this.connectStore = new ConnectStore(this)\n this.goalStore = new GoalStore(this)\n this.debtsStore = new DebtsStore(this)\n this.copyStore = new GlobalCopyStore()\n this.merchantStore = new MerchantStore()\n this.netWorthStore = new NetWorthStore(this)\n this.notificationStore = new NotificationStore()\n this.recurringActivityStore = new RecurringActivityStore(this)\n this.transactionStore = new TransactionStore(this)\n this.userStore = new UserStore()\n\n this.globalUiStore = new GlobalUiStore(this)\n\n makeAutoObservable(this)\n }\n\n initialize = async (endpoint: string, token: string) => {\n await this.copyStore.initialize(endpoint, token)\n\n Promise.all([\n this.accountStore.initialize(endpoint, token),\n this.beatStore.initialize(endpoint, token),\n this.goalStore.initialize(endpoint, token),\n this.merchantStore.initialize(endpoint, token),\n this.userStore.initialize(endpoint, token),\n this.categoryStore.initialize(endpoint, token),\n this.transactionStore.initialize(endpoint, token),\n this.recurringActivityStore.initialize(endpoint, token),\n this.budgetsStore.initialize(endpoint, token),\n this.notificationStore.initialize(endpoint, token),\n this.connectStore.initialize(endpoint, token),\n ]).then(() => {\n this.isInitialized = true\n this.globalUiStore.setInitialized(true)\n })\n }\n}\n"],"names":["LOADING_STATUS","PlanTypes","IterationItemTypes","LocalizedCopyApi","endpoint","token","Fetch","req","ApiEndpoints","data","namespace","UserApi","userProfile","WidgetApi","Legend","color","labelAverage","labelMain","tokens","useTokens","styles","getStyles","jsxs","jsx","Text","css","Bar","ariaLabel","height","index","label","onClick","selectedIndex","value","handleKeyDown","event","labelColor","BarLabel","frameName","expandAnimation","keyframes","BarColumn","averageLineHeight","bottomHeight","range","topHeight","valueLabel","width","xAxisLabel","topBarHeight","bottomBarHeight","xAxisColor","sumReducer","acc","rangeReducer","valueReducer","getSectionHeight","hasSection1","hasSection2","fullHeight","getAverageLineHeight","average","max","min","BarChart","barWidth","legendLabelAverage","legendLabelMain","onBarClick","valueFormatter","values","avg","hasTop","hasBottom","getBarColor","EmptyColumn","d","React","MultiSegmentDonut","hasGap","segments","size","DEFAULT_DONUT_SIZE","strokeWidth","DEFAULT_STROKE_WIDTH","children","radius","halfSize","offset","length","segment","ResponsiveButton","icon","placement","tooltipText","variant","theme","useTheme","Button","Tooltip","IconButton","GlobalCopyStore","GlobalCopyApi","makeAutoObservable","runInAction","translationKey","newCopy","error","BeatStore","BeatApi","beats","BudgetsApi","category","amount","parentGuid","guid","budget","BudgetsStore","CategoryApi","startOfMonth","startOfToday","endOfMonth","globalStore","reaction","detailedBudgets","findBudget","subBudget","findSubBudget","augmentBudgets","CategoryGuids","a","b","total","budgets","alert","dateRange","categories","budgetsToDelete","c","budgetToDelete","updatedBudget","UserVerification","ExpenseStatus","ScheduledPaymentTypes","ScreenSize","ConnectStore","widget","mode","rest","GlobalUiStore","account","isInitialized","accounts","guids","startDate","endDate","selectedMonth","getMonth","nextMonth","addMonths","currentMonth","UserStore","updatedProfile","GlobalStore","AccountStore","CashflowStore","CategoryStore","GoalStore","DebtsStore","MerchantStore","NetWorthStore","NotificationStore","RecurringActivityStore","TransactionStore"],"mappings":";;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;AAAO,MAAMA,KAAiB;AAAA,EAC5B,OAAO;AAAA,EACP,SAAS;AAAA,EACT,SAAS;AACX;AAEY,IAAAC,uBAAAA,OACVA,EAAAA,EAAA,eAAe,CAAf,IAAA,gBACAA,EAAAA,EAAA,UAAU,CAAV,IAAA,WAFUA,IAAAA,MAAA,CAAA,CAAA,GAKAC,uBAAAA,OACVA,EAAAA,EAAA,mBAAmB,CAAnB,IAAA,oBACAA,EAAAA,EAAA,iBAAiB,CAAjB,IAAA,kBACAA,EAAAA,EAAA,QAAQ,CAAR,IAAA,SACAA,EAAAA,EAAA,SAAS,CAAT,IAAA,UAJUA,IAAAA,MAAA,CAAA,CAAA;ACPL,MAAMC,GAAiB;AAAA,EAC5B;AAAA,EAEA,YAAYC,GAAkBC,GAAe;AAC3C,SAAK,gBAAgB,IAAIC,EAAMF,GAAUC,CAAK;AAAA,EAChD;AAAA,EAEA,mBAAmB,OAAOE,MACjB,KAAK,cAAc,KAAKC,EAAa,gBAAgBD,CAAG,EAAE,KAAK,CAACE,MAASA,CAAI;AAAA,EAGtF,sBAAsB,OAAOC,MACpB,KAAK,cACT,KAAK,GAAGF,EAAa,iBAAiB,IAAIE,CAAS,EAAE,EACrD,KAAK,CAACD,MAASA,CAAI;AAE1B;ACdO,MAAME,EAAQ;AAAA,EACnB;AAAA,EAEA,YAAYP,GAAkBC,GAAe;AAC3C,SAAK,gBAAgB,IAAIC,EAAMF,GAAUC,CAAK;AAAA,EAChD;AAAA,EAEA,iBAAiB,YACR,KAAK,cAAc,IAAIG,EAAa,QAAQ,EAAE,KAAK,CAACC,MAASA,EAAK,YAAY;AAAA,EAGvF,oBAAoB,OAAOG,MAClB,KAAK,cACT,IAAI,GAAGJ,EAAa,aAAa,IAAII,EAAY,IAAI,IAAIA,CAAW,EACpE,KAAK,CAACH,MAASA,EAAK,YAAY;AAEvC;AClBO,MAAMI,EAAU;AAAA,EACrB;AAAA,EAEA,YAAYT,GAAkBC,GAAe;AAC3C,SAAK,gBAAgB,IAAIC,EAAMF,GAAUC,CAAK;AAAA,EAChD;AAAA,EAEA,mBAAmB,OAAOE,MACjB,KAAK,cAAc,KAAKC,EAAa,aAAaD,CAAG,EAAE,KAAK,CAACE,MAASA,EAAK,UAAU;AAEhG;ACHA,MAAMK,KAAwC,CAAC,EAAE,OAAAC,GAAO,cAAAC,GAAc,WAAAC,QAAgB;AACpF,QAAMC,IAASC,KACTC,IAASC,GAAUH,GAAQH,CAAK;AAEtC,SACG,gBAAAO,EAAA,OAAA,EAAI,WAAW,2BAA2BF,CAAM,IAC/C,UAAA;AAAA,IAAA,gBAAAG,EAAC,SAAI,cAAYN,GAAW,WAAU,uBAAsB,MAAK,OAAM;AAAA,IACtE,gBAAAM,EAAAC,GAAA,EAAK,SAAQ,UAAU,UAAUP,GAAA;AAAA,sBAEjC,OAAI,EAAA,cAAYD,GAAc,WAAU,qBAAoB,MAAK,OAChE,UAAA;AAAA,MAAC,gBAAAO,EAAA,OAAA,EAAI,WAAU,aAAa,CAAA;AAAA,MAC5B,gBAAAA,EAAC,OAAI,EAAA,WAAU,aAAa,CAAA;AAAA,MAC5B,gBAAAA,EAAC,OAAI,EAAA,WAAU,aAAa,CAAA;AAAA,IAAA,GAC9B;AAAA,IACC,gBAAAA,EAAAC,GAAA,EAAK,SAAQ,UAAU,UAAaR,GAAA;AAAA,EACvC,EAAA,CAAA;AAEJ,GAEMK,KAAY,CAACH,GAAaH,MAC9BU,EAAI;AAAA,EACF,YAAY;AAAA,EACZ,SAAS;AAAA,EACT,KAAKP,EAAO,QAAQ;AAAA,EACpB,gBAAgB;AAAA,EAChB,aAAaA,EAAO,QAAQ;AAAA,EAC5B,eAAeA,EAAO,QAAQ;AAAA,EAC9B,OAAO;AAAA,EACP,0BAA0B;AAAA,IACxB,iBAAiBH;AAAA,IACjB,QAAQ;AAAA,IACR,OAAO;AAAA,EACT;AAAA,EACA,wBAAwB;AAAA,IACtB,SAAS;AAAA,IACT,KAAK;AAAA,EACP;AAAA,EACA,iBAAiB;AAAA,IACf,iBAAiBG,EAAO,MAAM;AAAA,IAC9B,QAAQ;AAAA,IACR,OAAO;AAAA,IACP,cAAc;AAAA,EAChB;AAAA,EACA,mBAAmB;AAAA,IACjB,aAAaA,EAAO,QAAQ;AAAA,EAC9B;AACF,CAAC,GC7BGQ,IAA0B,CAAC;AAAA,EAC/B,WAAAC;AAAA,EACA,OAAAZ;AAAA,EACA,QAAAa;AAAA,EACA,OAAAC;AAAA,EACA,OAAAC;AAAA,EACA,SAAAC;AAAA,EACA,eAAAC;AAAA,EACA,OAAAC;AACF,MAAM;AACJ,QAAMf,IAASC,KACTC,IAASC,GAAUH,GAAQH,GAAOa,CAAM,GAExCM,IAAgB,CAACC,MAA+C;AACpE,IAAIJ,MAAYI,EAAM,QAAQ,OAAOA,EAAM,QAAQ,YACjDJ,EAAQF,CAAK;AAAA,EACf,GAGIO,IACJJ,MAAkB,UAAaA,MAAkBH,IAAQ,YAAY,aAEjEQ,IAAW,MACf,gBAAAd;AAAA,IAACC;AAAA,IAAA;AAAA,MACC,eAAa;AAAA,MACb,MAAMQ,MAAkBH;AAAA,MACxB,WAAU;AAAA,MACV,OAAOO;AAAA,MACP,WAAU;AAAA,MACV,SAAQ;AAAA,MAEP,UAAAN;AAAA,IAAA;AAAA,EAAA;AAKH,SAAA,gBAAAR,EAAC,OAAI,EAAA,WAAW,wBAAwBF,CAAM,IAAIa,IAAQ,IAAI,oBAAoB,EAAE,IAEjF,UAAA;AAAA,IAASA,KAAA,uBAAMI,GAAS,CAAA,CAAA;AAAA,IAEzB,gBAAAd;AAAA,MAAC;AAAA,MAAA;AAAA,QACC,cAAYI;AAAA,QACZ,WAAW,cAAcI,IAAU,qBAAqB,EAAE,IACxDE,IAAQ,IAAI,wBAAwB,EACtC;AAAA,QACA,SAASF,IAAU,MAAMA,IAAUF,CAAK,IAAI;AAAA,QAC5C,WAAWK;AAAA,QACX,MAAMP,IAAY,WAAW;AAAA,QAC7B,UAAUA,IAAY,IAAI;AAAA,MAAA;AAAA,IAC5B;AAAA,IAGCM,IAAQ,KAAK,gBAAAV,EAACc,GAAS,CAAA,CAAA;AAAA,EAC1B,EAAA,CAAA;AAEJ,GAEMhB,KAAY,CAACH,GAAaH,GAAea,MAAmB;AAChE,QAAMU,IAAY,aAAa,KAAK,MAAMV,CAAM,CAAC,IAC3CW,IAAkBC,GAAUF,GAAW,EAAE,MAAM,EAAE,QAAQ,EAAK,GAAA,IAAI,EAAE,QAAAV,EAAA,EAAU,CAAA;AAEpF,SAAOH,EAAI;AAAA,IACT,SAAS;AAAA,IACT,eAAe;AAAA,IACf,gBAAgB;AAAA,IAChB,QAAQ;AAAA,IACR,qBAAqB;AAAA,MACnB,gBAAgB;AAAA,IAClB;AAAA,IACA,iBAAiB;AAAA,MACf,gBAAgB;AAAA,MAChB,mBAAmB;AAAA,MACnB,mBAAmB;AAAA,MACnB,eAAec;AAAA,MACf,yBAAyBrB,EAAO,OAAO;AAAA,MACvC,iBAAiBH;AAAA,MACjB,cAAc,GAAGG,EAAO,aAAa,MAAM,MAAMA,EAAO,aAAa,MAAM;AAAA,MAC3E,WAAWU;AAAA,IACb;AAAA,IACA,0BAA0B;AAAA,MACxB,cAAc,OAAOV,EAAO,aAAa,MAAM,MAAMA,EAAO,aAAa,MAAM;AAAA,MAC/E,WAAW,CAACA,EAAO,QAAQ;AAAA,IAC7B;AAAA,IACA,sBAAsB;AAAA,MACpB,SAAS;AAAA,MACT,gBAAgB;AAAA,MAChB,cAAcA,EAAO,QAAQ;AAAA,MAC7B,WAAWA,EAAO,QAAQ;AAAA,MAC1B,YAAY;AAAA,MACZ,OAAO;AAAA,IACT;AAAA,EAAA,CACD;AACH,GC9EMuB,IAAsC,CAAC;AAAA,EAC3C,WAAAd;AAAA,EACA,mBAAAe;AAAA,EACA,cAAAC;AAAA,EACA,OAAA5B;AAAA,EACA,OAAAc,IAAQ;AAAA,EACR,SAAAE;AAAA,EACA,OAAAa;AAAA,EACA,eAAAZ;AAAA,EACA,WAAAa;AAAA,EACA,OAAAZ;AAAA,EACA,YAAAa,IAAa;AAAA,EACb,OAAAC;AAAA,EACA,YAAAC,IAAa;AACf,MAAM;AACJ,QAAM9B,IAASC,KACTC,IAASC,GAAUH,GAAQ6B,CAAK,GAEhCE,IAAgBhB,IAAQW,IAASC,GACjCK,IAAmB,KAAK,IAAIjB,CAAK,IAAIW,IAASD,GAC9CQ,IACJnB,MAAkB,UAAaA,MAAkBH,IAAQ,YAAY;AAEvE,SACG,gBAAAP,EAAA,OAAA,EAAI,WAAW,8BAA8BF,CAAM,IAElD,UAAA;AAAA,IAAA,gBAAAG,EAAC,SAAI,OAAO,EAAE,QAAQsB,EAAU,GAE7B,eAAS,KACR,gBAAAtB;AAAA,MAACG;AAAA,MAAA;AAAA,QACC,WAAAC;AAAA,QACA,OAAAZ;AAAA,QACA,QAAQkC;AAAA,QACR,OAAApB;AAAA,QACA,OAAOiB;AAAA,QACP,SAAAf;AAAA,QACA,eAAAC;AAAA,QACA,OAAAC;AAAA,MAAA;AAAA,IAAA,GAGN;AAAA,IAGA,gBAAAV,EAAC,OAAI,EAAA,WAAU,mBAAmB,CAAA;AAAA,IAGjCmB,MAAsB,KACrB,gBAAAnB,EAAC,OAAI,EAAA,WAAU,wBAAuB,OAAO,EAAE,QAAQmB,EAAqB,EAAA,CAAA;AAAA,IAI9E,gBAAAnB,EAAC,SAAI,OAAO,EAAE,QAAQoB,EAAa,GAEhC,cAAQ,KACP,gBAAApB;AAAA,MAACG;AAAA,MAAA;AAAA,QACC,WAAAC;AAAA,QACA,OAAAZ;AAAA,QACA,QAAQmC;AAAA,QACR,OAAArB;AAAA,QACA,OAAOiB;AAAA,QACP,SAAAf;AAAA,QACA,OAAAE;AAAA,MAAA;AAAA,IAAA,GAGN;AAAA,IAGA,gBAAAV;AAAA,MAAC;AAAA,MAAA;AAAA,QACC,WAAW,oBAAoBQ,IAAU,qBAAqB,EAAE;AAAA,QAChE,SAASA,IAAU,MAAMA,EAAQF,CAAK,IAAI;AAAA,QAE1C,UAAA,gBAAAN,EAACC,KAAK,MAAMQ,MAAkBH,GAAO,OAAOsB,GAAY,SAAQ,SAC7D,UACHH,EAAA,CAAA;AAAA,MAAA;AAAA,IACF;AAAA,EACF,EAAA,CAAA;AAEJ,GAEM3B,KAAY,CAACH,GAAa6B,MAC9BtB,EAAI;AAAA,EACF,SAAS;AAAA,EACT,eAAe;AAAA,EACf,UAAUsB,MAAU,SAAY,IAAI;AAAA,EACpC,OAAAA;AAAA,EACA,2BAA2B;AAAA,IACzB,WAAW,GAAG7B,EAAO,QAAQ,KAAK,aAAaA,EAAO,MAAM,UAAU;AAAA,IACtE,UAAU;AAAA,IACV,aAAaA,EAAO,QAAQ;AAAA,EAC9B;AAAA,EACA,uBAAuB;AAAA,IACrB,cAAc;AAAA,IACd,OAAO;AAAA,EACT;AAAA,EACA,uBAAuB;AAAA,IACrB,WAAWA,EAAO,QAAQ;AAAA,IAC1B,WAAWA,EAAO,QAAQ;AAAA,IAC1B,cAAcA,EAAO,QAAQ;AAAA,IAC7B,WAAWA,EAAO,QAAQ;AAAA,IAC1B,WAAW;AAAA,IACX,OAAO;AAAA,EACT;AAAA,EACA,uBAAuB;AAAA,IACrB,QAAQ;AAAA,EACV;AACF,CAAC,GC7IUkC,KAAa,CAACC,GAAapB,MAAkBoB,IAAMpB,GAQnDqB,KAAe,CAACD,GAAapB,MACxC,KAAK,IAAIA,CAAK,IAAIoB,IAAM,KAAK,IAAIpB,CAAK,IAAIoB,GAQ/BE,KAAe,CAACF,GAAepB,MAA6B,CAAC,GAAGoB,GAAKpB,EAAM,KAAK,GAUhFuB,IAAmB,CAC9BC,GACAC,GACAC,MACG;AACH,QAAM/B,IAAS6B,KAAeC,IAAcC,IAAa,IAAIA;AACtD,SAACF,IAAkB7B,IAAJ;AACxB,GAWagC,KAAuB,CAACC,GAAiBC,GAAaC,GAAanC,MACtEiC,KAAWC,IAAM,IAAI,CAACC,IAAMD,KAAQlC,KAAU,GCJlDoC,KAAoC,CAAC;AAAA,EACzC,SAAAH;AAAA,EACA,UAAAI,IAAW;AAAA,EACX,OAAAlD;AAAA,EACA,MAAAN;AAAA,EACA,QAAAmB;AAAA,EACA,oBAAAsC;AAAA,EACA,iBAAAC;AAAA,EACA,YAAAC;AAAA,EACA,eAAApC;AAAA,EACA,gBAAAqC,IAAiB,CAACpC,MAAkB,GAAGA,CAAK;AAC9C,MAAM;AACJ,QAAMf,IAASC,KACTC,IAASC,GAAUH,CAAM,GAEzBoD,IAAS7D,EAAK,OAAO8C,IAAc,CAAE,CAAA,GACrCgB,IAAMV,MAAY,SAAYA,IAAUS,EAAO,OAAOlB,IAAY,CAAC,IAAIkB,EAAO,QAC9ER,IAAM,KAAK,IAAI,GAAGQ,CAAM,GACxBP,IAAM,KAAK,IAAI,GAAGO,CAAM,GACxB1B,IAAQ0B,EAAO,OAAOhB,IAAc,CAAC,GAErCkB,IAASV,KAAO,GAChBW,IAAYV,IAAM,GAClBlB,IAAYW,EAAiBgB,GAAQC,GAAW7C,CAAM,GACtDe,IAAea,EAAiBiB,GAAWD,GAAQ5C,CAAM,GACzDc,IAAoBkB,GAAqBW,GAAKT,GAAKC,GAAKlB,KAAaF,CAAY,GAEjF+B,IAAc,CAAC7C,MACfG,MAAkB,UAAaH,MAAUG,IACpCjB,IAEF,GAAGA,CAAK,MAGX4D,IAAc,MAClB,gBAAApD;AAAA,IAACkB;AAAA,IAAA;AAAA,MACC,mBAAAC;AAAA,MACA,cAAAC;AAAA,MACA,OAAO;AAAA,MACP,OAAAC;AAAA,MACA,WAAAC;AAAA,MACA,OAAO;AAAA,MACP,OAAO;AAAA,IAAA;AAAA,EAAA;AAIX,SACG,gBAAAvB,EAAA,OAAA,EAAI,WAAW,oBAAoBF,CAAM,IACxC,UAAA;AAAA,IAAC,gBAAAE,EAAA,OAAA,EAAI,WAAU,0BACb,UAAA;AAAA,MAAA,gBAAAC,EAACoD,GAAY,EAAA;AAAA,MACZlE,EAAK,IAAI,CAACmE,GAAG/C,MACX,gBAAAP,EAAAuD,EAAM,UAAN,EACC,UAAA;AAAA,QAAA,gBAAAtD;AAAA,UAACkB;AAAA,UAAA;AAAA,YACC,WAAWmC,EAAE;AAAA,YACb,mBAAAlC;AAAA,YACA,cAAAC;AAAA,YACA,OAAO+B,EAAY7C,CAAK;AAAA,YACxB,OAAAA;AAAA,YACA,SAASuC;AAAA,YACT,OAAAxB;AAAA,YACA,eAAAZ;AAAA,YACA,WAAAa;AAAA,YACA,OAAO+B,EAAE;AAAA,YACT,YAAYP,EAAeO,EAAE,KAAK;AAAA,YAClC,OAAOX;AAAA,YACP,YAAYW,EAAE;AAAA,UAAA;AAAA,QAChB;AAAA,0BACCD,GAAY,EAAA;AAAA,MAhBM,EAAA,GAAA,UAAU9C,CAAK,EAiBpC,CACD;AAAA,IAAA,GACH;AAAA,sBACCf,IAAO,EAAA,OAAAC,GAAc,cAAcmD,GAAoB,WAAWC,GAAiB;AAAA,EACtF,EAAA,CAAA;AAEJ,GAEM9C,KAAY,CAACH,MACjBO,EAAI;AAAA,EACF,6BAA6B;AAAA,IAC3B,YAAY;AAAA,IACZ,SAAS;AAAA,IACT,gBAAgB;AAAA,IAChB,WAAWP,EAAO,QAAQ;AAAA,IAC1B,cAAcA,EAAO,QAAQ;AAAA,EAC/B;AACF,CAAC,GCjHG4D,KAAsD,CAAC;AAAA,EAC3D,QAAAC,IAAS;AAAA,EACT,UAAAC;AAAA,EACA,MAAAC,IAAOC;AAAA,EACP,aAAAC,IAAcC;AAAA,EACd,UAAAC;AACF,MAAM;AACJ,QAAMnE,IAASC,KACTC,IAASC,GAAUH,GAAQ+D,CAAI,GAE/BK,KAAUL,IAAOE,KAAe,GAChCI,IAAWN,IAAO;AAEpB,MAAAO,IAAS,OAAOT,IAAS,IAAI,IAE7BU,IAAS;AAEb,SACG,gBAAAnE,EAAA,OAAA,EAAI,WAAW,8BAA8BF,CAAM,IAClD,UAAA;AAAA,IAAA,gBAAAE,EAAC,OAAI,EAAA,QAAQ2D,GAAM,OAAOA,GACxB,UAAA;AAAA,MAAA,gBAAA1D;AAAA,QAAC;AAAA,QAAA;AAAA,UACC,IAAIgE;AAAA,UACJ,IAAIA;AAAA,UACJ,MAAK;AAAA,UACL,GAAGD;AAAA,UACH,QAAQpE,EAAO,MAAM;AAAA,UACrB,aAAAiE;AAAA,QAAA;AAAA,MACF;AAAA,MACCH,EAAS,IAAI,CAACU,GAAS7D,OACZ2D,KAAA,MAAMC,KAAUV,IAAS,IAAI,IACvCU,KAAUC,EAAQ,WAAWX,IAAS,MAAM,MAAM,KAGhD,gBAAAxD;AAAA,QAAC;AAAA,QAAA;AAAA,UACC,IAAIgE;AAAA,UACJ,IAAIA;AAAA,UACJ,MAAK;AAAA,UAEL,GAAGD;AAAA,UACH,QAAQI,EAAQ;AAAA,UAChB,iBAAiB,IAAI,KAAK,KAAKJ;AAAA,UAC/B,kBAAkB,IAAI,KAAK,KAAKA,KAAU,IAAIG;AAAA,UAC9C,aAAAN;AAAA,UACA,WAAW,UAAUK,CAAM,KAAKD,CAAQ,KAAKA,CAAQ;AAAA,QAAA;AAAA,QANhD1D;AAAA,MAAA,EASV;AAAA,IAAA,GACH;AAAA,IACC,gBAAAN,EAAA,OAAA,EAAI,WAAU,uCAAuC,UAAA8D,EAAS,CAAA;AAAA,EACjE,EAAA,CAAA;AAEJ,GAEMhE,KAAY,CAACH,GAAa+D,MAC9BxD,EAAI;AAAA,EACF,QAAQwD;AAAA,EACR,WAAW,IAAI/D,EAAO,QAAQ,MAAM;AAAA,EACpC,UAAU;AAAA,EACV,OAAO+D;AAAA,EACP,0CAA0C;AAAA,IACxC,MAAM;AAAA,IACN,UAAU;AAAA,IACV,WAAW;AAAA,IACX,KAAK;AAAA,IACL,WAAW;AAAA,EACb;AACF,CAAC,GC1DGU,KAAoD,CAAC;AAAA,EACzD,MAAAC;AAAA,EACA,OAAA9D;AAAA,EACA,SAAAC;AAAA,EACA,WAAA8D,IAAY;AAAA,EACZ,aAAAC;AAAA,EACA,SAAAC,IAAU;AACZ,MAAM;AACJ,QAAMC,IAAQC;AAGZ,SAAA,gBAAA3E,EAACuD,EAAM,UAAN,EACC,UAAA;AAAA,IAAA,gBAAAtD;AAAA,MAAC2E;AAAA,MAAA;AAAA,QACC,SAAAnE;AAAA,QACA,WAAW6D;AAAA,QACX,IAAI;AAAA,UACF,CAACI,EAAM,YAAY,KAAK,IAAI,CAAC,GAAG,EAAE,SAAS,OAAO;AAAA,UAClD,CAACA,EAAM,YAAY,GAAG,IAAI,CAAC,GAAG,EAAE,SAAS,cAAc;AAAA,QACzD;AAAA,QACA,OAAOF;AAAA,QACP,SAAAC;AAAA,QAEC,UAAAjE;AAAA,MAAA;AAAA,IACH;AAAA,IACA,gBAAAP;AAAA,MAAC4E;AAAA,MAAA;AAAA,QACC,eAAe;AAAA,QACf,WAAAN;AAAA,QACA,IAAI,EAAE,SAAS,EAAE,IAAI,eAAe,IAAI,SAAS;AAAA,QACjD,OAAOC;AAAA,QAEP,UAAA,gBAAAvE,EAAC6E,IAAW,EAAA,SAAArE,GAAmB,UAAK6D,GAAA;AAAA,MAAA;AAAA,IACtC;AAAA,EACF,EAAA,CAAA;AAEJ;AC1DO,MAAMS,GAAgB;AAAA,EAC3B,OAAmB,CAAA;AAAA,EACnB,mBAAmB;AAAA,EAEnB,MAAqB,IAAIC,EAAc,KAAK,EAAE;AAAA,EAC9C,gBAAgB;AAAA,EAEhB,cAAc;AACZ,IAAAC,EAAmB,IAAI;AAAA,EACzB;AAAA,EAEA,aAAa,OAAOnG,GAAkBC,MAAkB;AACtD,SAAK,MAAM,IAAIiG,EAAclG,GAAUC,CAAK,GAEtC,MAAA,KAAK,QAAQ,KAAK,gBAAgB,GACxCmG,EAAY,MAAM;AAChB,WAAK,gBAAgB;AAAA,IAAA,CACtB;AAAA,EAAA;AAAA,EAGH,UAAU,OAAO9F,GAAmB+F,IAAyB,OAAO;AAC9D,QAAA;AACF,YAAMC,IAAU,MAAM,KAAK,IAAI,cAAchG,GAAW+F,CAAc;AAEtE,MAAAD,EAAY,MAAM;AACX,aAAA,OAAOE,EAAQhG,CAAS;AAAA,MAAA,CAC9B;AAAA,aACMiG,GAAO;AACd,cAAQ,MAAM,iCAAiC,KAAK,gBAAgB,UAAUA,CAAK,EAAE;AAAA,IACvF;AAAA,EAAA;AAEJ;AC/BO,MAAMC,GAAU;AAAA,EACrB,QAAgB,CAAA;AAAA,EAChB,MAAe,IAAIC,EAAQ,KAAK,EAAE;AAAA,EAElC,cAAc;AACZ,IAAAN,EAAmB,IAAI;AAAA,EACzB;AAAA,EAEA,aAAa,OAAOnG,GAAkBC,MAAkB;AACtD,SAAK,MAAM,IAAIwG,EAAQzG,GAAUC,CAAK,GACtC,MAAM,KAAK;EAAU;AAAA,EAGvB,YAAY,YAAY;AACtB,UAAMyG,IAAQ,MAAM,KAAK,IAAI,SAAS;AAEtC,IAAAN,EAAY,MAAM;AAChB,WAAK,QAAQM;AAAA,IAAA,CACd;AAAA,EAAA;AAEL;ACtBO,MAAMC,EAAW;AAAA,EACtB;AAAA,EAEA,YAAY3G,GAAkBC,GAAe;AAC3C,SAAK,gBAAgB,IAAIC,EAAMF,GAAUC,CAAK;AAAA,EAChD;AAAA,EAEA,YAAY,OAAO2G,GAAoBC,GAAgBC,IAA4B,SAC1E,KAAK,cACT,KAAK1G,EAAa,SAAS;AAAA,IAC1B,QAAAyG;AAAA,IACA,eAAeD,EAAS;AAAA,IACxB,eAAeA,EAAS;AAAA,IACxB,aAAaE;AAAA,EAAA,CACd,EACA,KAAK,CAACzG,MAASA,EAAK,MAAM,EAC1B,MAAM,CAACkG,MAAUA,CAAK;AAAA,EAG3B,eAAe,OAAOQ,MACb,KAAK,cAAc,OAAO,GAAG3G,EAAa,OAAO,IAAI2G,CAAI,EAAE,EAAE,KAAK,CAAC1G,MAASA,CAAI;AAAA,EAGzF,kBAAkB,YACT,KAAK,cAAc,KAAK,GAAGD,EAAa,OAAO,WAAW,EAAE,KAAK,CAACC,MAASA,CAAI;AAAA,EAGxF,aAAa,YACJ,KAAK,cACT,IAAID,EAAa,OAAO,EACxB,KAAK,CAACC,MAASA,EAAK,OAAO,EAC3B,MAAM,CAACkG,MAAUA,CAAK;AAAA,EAG3B,eAAe,OAAOS,MACb,KAAK,cACT,IAAI,GAAG5G,EAAa,OAAO,IAAI4G,EAAO,IAAI,IAAIA,CAAM,EACpD,KAAK,CAAC3G,MAASA,EAAK,MAAM,EAC1B,MAAM,CAACkG,MAAUA,CAAK;AAE7B;ACpBO,MAAMU,GAAa;AAAA,EACxB,MAAkB,IAAIN,EAAW,KAAK,EAAE;AAAA,EACxC,cAA2B,IAAIO,EAAY,KAAK,EAAE;AAAA,EAElD;AAAA,EAEA,QAAgB;AAAA,EAChB,YAAuB,EAAE,OAAOC,EAAaC,EAAA,CAAc,GAAG,KAAKC,EAAWD,EAAc,CAAA;EAC5F,UAAoB,CAAA;AAAA,EACpB;AAAA,EACA;AAAA,EAEA,QAAQ,CAAA;AAAA,EAER,YAAYE,GAA0B;AACpC,SAAK,cAAcA,GACnBnB,EAAmB,IAAI;AAAA,EACzB;AAAA,EAEA,aAAa,OAAOnG,GAAkBC,MAAkB;AACtD,SAAK,MAAM,IAAI0G,EAAW3G,GAAUC,CAAK,GACzC,KAAK,cAAc,IAAIiH,EAAYlH,GAAUC,CAAK,GAGlDsH;AAAA,MACE,MAAM,KAAK;AAAA,MACX,CAACC,MAAoB;AACnB,YAAIA,GAAiB;AACnB,gBAAMR,IAAS,KAAK;AACpB,UAAIA,MACF,KAAK,iBAAiBS,GAAWD,GAAiBR,EAAO,IAAI;AAG/D,gBAAMU,IAAY,KAAK;AACnB,UAAAA,KAAaA,EAAU,gBACzB,KAAK,oBAAoBC;AAAA,YACvBH;AAAA,YACAE,EAAU;AAAA,YACVA,EAAU;AAAA,UAAA;AAAA,QAGhB;AAAA,MACF;AAAA,IAAA;AAAA,EACF;AAAA,EAGF,IAAI,kBAAoC;AAC/B,WAAAE;AAAA,MACL,KAAK,QAAQ;AAAA,QACX,CAACZ,MACCA,EAAO,kBAAkBa,EAAc,UACvCb,EAAO,kBAAkBa,EAAc,YACvCb,EAAO,kBAAkBa,EAAc;AAAA,MAC3C;AAAA,MACA,KAAK,YAAY,cAAc;AAAA,MAC/B,KAAK,YAAY,UAAU,KAAK;AAAA,MAChC,KAAK;AAAA,IAAA,EACL,KAAK,CAACC,GAAGC,MACLD,EAAE,aAAaC,EAAE,aAAmB,KACpCD,EAAE,aAAaC,EAAE,aAAmB,IACjC,CACR;AAAA,EACH;AAAA,EAEA,IAAI,uBAA2C;AACtC,WAAA,KAAK,YAAY,cAAc,gBAAgB;AAAA,MACpD,CAACnB,MAAa,CAAC,KAAK,gBAAgB,KAAK,CAACI,MAAWA,EAAO,kBAAkBJ,EAAS,IAAI;AAAA,IAAA;AAAA,EAE/F;AAAA,EAEA,IAAI,gBAAwB;AACnB,WAAA,KAAK,gBAAgB,OAAO,CAACoB,GAAOhB,MAAWgB,IAAQhB,EAAO,QAAQ,CAAC;AAAA,EAChF;AAAA,EAEA,YAAY,OAAOJ,GAAoBC,GAAgBC,IAA4B,SAAS;AACtF,QAAA;AACF,YAAME,IAAS,MAAM,KAAK,IAAI,UAAUJ,GAAUC,GAAQC,CAAU;AACpE,MAAAV,EAAY,MAAM;AACX,aAAA,QAAQ,KAAKY,CAAM;AAAA,MAAA,CACzB;AAAA,aACMT,GAAO;AACN,cAAA,MAAM,wBAAwBA,CAAK,EAAE;AAAA,IAC/C;AAAA,EAAA;AAAA,EAGF,eAAe,OAAOQ,MAAiB;AACjC,QAAA;AACI,YAAA,KAAK,IAAI,aAAaA,CAAI,GAEhCX,EAAY,MAAM;AACV,cAAA3E,IAAQ,KAAK,QAAQ,UAAU,CAACuF,MAAWA,EAAO,SAASD,CAAI;AACrE,QAAItF,KAAS,KACN,KAAA,QAAQ,OAAOA,GAAO,CAAC;AAAA,MAC9B,CACD;AAAA,aACM8E,GAAO;AACN,cAAA,MAAM,0BAA0BA,CAAK,EAAE;AAAA,IACjD;AAAA,EAAA;AAAA,EAGF,cAAc,YAAY;AACpB,QAAA;AACF,YAAM0B,IAAW,MAAM,KAAK,IAAI,WAAW;AAE3C,MAAA7B,EAAY,MAAM;AAChB,aAAK,UAAU6B;AAAA,MAAA,CAChB;AAAA,aACM1B,GAAO;AACN,cAAA,MAAM,yCAAyCA,CAAK,EAAE;AAAA,IAChE;AAAA,EAAA;AAAA,EAGF,WAAW,CAAC2B,MAAmB,KAAK,QAAQA;AAAA,EAE5C,eAAe,CAACC,MAA0B,KAAK,YAAYA;AAAA,EAE3D,oBAAoB,CAACnB,MAAwC,KAAK,iBAAiBA;AAAA,EAEnF,uBAAuB,CAACA,MAAwC,KAAK,oBAAoBA;AAAA,EAEzF,WAAW,CAACpB,MAAkB,KAAK,QAAQA;AAAA;AAAA;AAAA;AAAA;AAAA,EAM3C,qBAAqB,OAAOwC,MAAmC;AAC7D,eAAWxB,KAAYwB,GAAY;AAC3B,YAAApB,IAAS,KAAK,QAAQ,KAAK,CAACA,MAAWA,EAAO,kBAAkBJ,EAAS,IAAI;AACnF,MAAII,IACI,MAAA,KAAK,IAAI,aAAa,EAAE,GAAGA,GAAQ,QAAQJ,EAAS,mBAAA,CAAoB,IAE9E,MAAM,KAAK,IAAI,UAAUA,GAAUA,EAAS,kBAAkB;AAAA,IAElE;AAEM,UAAAyB,IAAkB,KAAK,QAAQ;AAAA,MACnC,CAACrB,MAAW,CAACoB,EAAW,KAAK,CAACE,MAAMA,EAAE,SAAStB,EAAO,aAAa;AAAA,IAAA;AAGrE,eAAWuB,KAAkBF;AAC3B,YAAM,KAAK,IAAI,aAAaE,EAAe,IAAI;AAEjD,UAAM,KAAK;EAAY;AAAA,EAGzB,eAAe,OAAOvB,MAAmB;AACnC,QAAA;AACF,YAAMwB,IAAgB,MAAM,KAAK,IAAI,aAAaxB,CAAM;AAExD,MAAAZ,EAAY,MAAM;AACV,cAAA3E,IAAQ,KAAK,QAAQ,UAAU,CAACsG,MAAMA,EAAE,SAASf,EAAO,IAAI;AAClE,QAAIvF,KAAS,MACN,KAAA,QAAQA,CAAK,IAAI+G;AAAA,MACxB,CACD;AAAA,aACMjC,GAAO;AACN,cAAA,MAAM,0BAA0BA,CAAK,EAAE;AAAA,IACjD;AAAA,EAAA;AAEJ;ACpHY,IAAAkC,uBAAAA,OACVA,EAAAA,EAAA,UAAU,CAAV,IAAA,WACAA,EAAAA,EAAA,UAAU,CAAV,IAAA,WACAA,EAAAA,EAAA,YAAY,CAAZ,IAAA,aAHUA,IAAAA,MAAA,CAAA,CAAA,GChEAC,uBAAAA,OACVA,EAAA,SAAS,UACTA,EAAA,OAAO,QACPA,EAAA,WAAW,oBACXA,EAAA,SAAS,UAJCA,IAAAA,MAAA,CAAA,CAAA,GAaAC,uBAAAA,OACVA,EAAAA,EAAA,UAAU,CAAV,IAAA,WACAA,EAAAA,EAAA,eAAe,CAAf,IAAA,gBACAA,EAAAA,EAAA,OAAO,CAAP,IAAA,QAHUA,IAAAA,MAAA,CAAA,CAAA,GCfAC,uBAAAA,OACVA,EAAA,UAAU,WACVA,EAAA,SAAS,UAFCA,IAAAA,MAAA,CAAA,CAAA;ACML,MAAMC,GAAa;AAAA,EACxB,YAAuB,IAAIpI,EAAU,KAAK,EAAE;AAAA,EAE5C;AAAA,EAEA,YAAY6G,GAA0B;AACpC,SAAK,cAAcA,GACnBnB,EAAmB,IAAI;AAAA,EACzB;AAAA,EAEA,aAAa,OAAOnG,GAAkBC,MAAkB;AACtD,SAAK,YAAY,IAAIQ,EAAUT,GAAUC,CAAK;AAAA,EAAA;AAAA,EAGhD,aAAa,OAAO,EAAE,QAAA6I,IAAS,kBAAkB,MAAAC,IAAO,SAAS,GAAGC,QAC3D,MAAM,KAAK,UAAU,iBAAiB;AAAA,IAC3C,YAAY,EAAE,aAAaF,GAAQ,cAAcC,GAAM,GAAGC,EAAK;AAAA,EAAA,CAChE;AAEL;ACfO,MAAMC,GAAc;AAAA,EACzB;AAAA,EACA,gBAAgB;AAAA,EAEhB,mBAA8B,CAAA;AAAA,EAC9B,uBAAiC,KAAK,iBAAiB,IAAI,CAACC,MAAYA,EAAQ,IAAI;AAAA,EAEpF,oCAAoB;EACpB,qBAAqB;AAAA,IACnB,OAAO/B,EAAa,KAAK,aAAa;AAAA,IACtC,KAAKE,EAAW,KAAK,aAAa;AAAA,EAAA;AAAA,EAGpC,YAAYC,GAA0B;AACpC,IAAAnB,EAAmB,IAAI,GACvB,KAAK,cAAcmB;AAAA,EACrB;AAAA,EAEA,iBAAiB,CAAC6B,MAA2B;AAC3C,SAAK,gBAAgBA;AAAA,EAAA;AAAA,EAGvB,sBAAsB,CAACC,MAAwB;AAC7C,SAAK,mBAAmBA,GACxB,KAAK,uBAAuB,KAAK,iBAAiB,IAAI,CAACF,MAAYA,EAAQ,IAAI;AAAA,EAAA;AAAA;AAAA,EAGjF,0BAA0B,CAACG,MAAoB;AAC7C,SAAK,mBAAmB,KAAK,YAAY,aAAa,SAAS;AAAA,MAAO,CAACH,MACrEG,EAAM,SAASH,EAAQ,IAAI;AAAA,IAAA,GAE7B,KAAK,uBAAuBG;AAAA,EAAA;AAAA,EAG9B,mBAAmB,CAACC,GAAiBC,MAAkB;AACrD,SAAK,gBAAgBA,GACrB,KAAK,qBAAqB;AAAA,MACxB,OAAOD;AAAA,MACP,KAAKC;AAAA,IAAA;AAAA,EACP;AAAA,EAGF,IAAI,wBAAwB;AACpB,UAAAC,IAAgBC,EAAS,KAAK,aAAa,GAC3CC,IAAYD,EAASE,uBAAc,KAAK,GAAG,CAAC,CAAC;AAEnD,WAAOH,MAAkBE;AAAA,EAC3B;AAAA,EAEA,IAAI,wBAAwB;AACpB,UAAAF,IAAgBC,EAAS,KAAK,aAAa,GAC3CG,IAAeH,EAAa,oBAAA,KAAM,CAAA;AAExC,WAAOD,MAAkBI;AAAA,EAC3B;AACF;AC3DO,MAAMC,GAAU;AAAA,EACrB,MAAe,IAAItJ,EAAQ,KAAK,EAAE;AAAA,EAElC,cAAkC;AAAA,EAElC,cAAc;AACZ,IAAA4F,EAAmB,IAAI;AAAA,EACzB;AAAA,EAEA,aAAa,OAAOnG,GAAkBC,MAAkB;AACtD,SAAK,MAAM,IAAIM,EAAQP,GAAUC,CAAK,GAEtC,MAAM,KAAK;EAAgB;AAAA,EAG7B,kBAAkB,YAAY;AACxB,QAAA;AACF,YAAMO,IAAc,MAAM,KAAK,IAAI,eAAe;AAElD,MAAA4F,EAAY,MAAM;AAChB,aAAK,cAAc5F;AAAA,MAAA,CACpB;AAAA,aACM+F,GAAO;AACN,cAAA,MAAM,8CAA8CA,CAAK,EAAE;AAAA,IACrE;AAAA,EAAA;AAAA,EAGF,oBAAoB,OAAO/F,MAA6B;AAClD,QAAA;AACF,YAAMsJ,IAAiB,MAAM,KAAK,IAAI,kBAAkBtJ,CAAW;AAEnE,MAAA4F,EAAY,MAAM;AAChB,aAAK,cAAc0D;AAAA,MAAA,CACpB;AAAA,aACMvD,GAAO;AACN,cAAA,MAAM,+CAA+CA,CAAK,EAAE;AAAA,IACtE;AAAA,EAAA;AAEJ;ACzBO,MAAMwD,GAAY;AAAA,EACvB;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EAEA;AAAA,EAEA,gBAAgB;AAAA,EAEhB,cAAc;AACP,SAAA,eAAe,IAAIC,GAAa,IAAI,GACpC,KAAA,YAAY,IAAIxD,MAChB,KAAA,eAAe,IAAIS,GAAa,IAAI,GACpC,KAAA,gBAAgB,IAAIgD,GAAc,IAAI,GACtC,KAAA,gBAAgB,IAAIC,EAAc,IAAI,GACtC,KAAA,eAAe,IAAIrB,GAAa,IAAI,GACpC,KAAA,YAAY,IAAIsB,GAAU,IAAI,GAC9B,KAAA,aAAa,IAAIC,GAAW,IAAI,GAChC,KAAA,YAAY,IAAInE,MAChB,KAAA,gBAAgB,IAAIoE,MACpB,KAAA,gBAAgB,IAAIC,GAAc,IAAI,GACtC,KAAA,oBAAoB,IAAIC,KACxB,KAAA,yBAAyB,IAAIC,EAAuB,IAAI,GACxD,KAAA,mBAAmB,IAAIC,GAAiB,IAAI,GAC5C,KAAA,YAAY,IAAIZ,MAEhB,KAAA,gBAAgB,IAAIZ,GAAc,IAAI,GAE3C9C,EAAmB,IAAI;AAAA,EACzB;AAAA,EAEA,aAAa,OAAOnG,GAAkBC,MAAkB;AACtD,UAAM,KAAK,UAAU,WAAWD,GAAUC,CAAK,GAE/C,QAAQ,IAAI;AAAA,MACV,KAAK,aAAa,WAAWD,GAAUC,CAAK;AAAA,MAC5C,KAAK,UAAU,WAAWD,GAAUC,CAAK;AAAA,MACzC,KAAK,UAAU,WAAWD,GAAUC,CAAK;AAAA,MACzC,KAAK,cAAc,WAAWD,GAAUC,CAAK;AAAA,MAC7C,KAAK,UAAU,WAAWD,GAAUC,CAAK;AAAA,MACzC,KAAK,cAAc,WAAWD,GAAUC,CAAK;AAAA,MAC7C,KAAK,iBAAiB,WAAWD,GAAUC,CAAK;AAAA,MAChD,KAAK,uBAAuB,WAAWD,GAAUC,CAAK;AAAA,MACtD,KAAK,aAAa,WAAWD,GAAUC,CAAK;AAAA,MAC5C,KAAK,kBAAkB,WAAWD,GAAUC,CAAK;AAAA,MACjD,KAAK,aAAa,WAAWD,GAAUC,CAAK;AAAA,IAAA,CAC7C,EAAE,KAAK,MAAM;AACZ,WAAK,gBAAgB,IAChB,KAAA,cAAc,eAAe,EAAI;AAAA,IAAA,CACvC;AAAA,EAAA;AAEL;"}