@zydon/common 2.8.76 → 2.8.78
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/chunk-ANEPP6QT.js +4 -0
- package/dist/chunk-ANEPP6QT.js.map +1 -0
- package/dist/chunk-BHYLHO5P.js +4 -0
- package/dist/chunk-BHYLHO5P.js.map +1 -0
- package/dist/chunk-CBW32OUQ.js +13 -0
- package/dist/chunk-CBW32OUQ.js.map +1 -0
- package/dist/chunk-DRGARBKB.js +8 -0
- package/dist/chunk-DRGARBKB.js.map +1 -0
- package/dist/chunk-FYG3YWFZ.js +4 -0
- package/dist/chunk-FYG3YWFZ.js.map +1 -0
- package/dist/chunk-J5XGGHQ7.js +8 -0
- package/dist/chunk-J5XGGHQ7.js.map +1 -0
- package/dist/chunk-J7RPKCIN.js +9 -0
- package/dist/chunk-J7RPKCIN.js.map +1 -0
- package/dist/{chunk-NWT5TUJO.js → chunk-JM3SE72J.js} +2 -2
- package/dist/chunk-RMYYQLRJ.js +7 -0
- package/dist/chunk-RMYYQLRJ.js.map +1 -0
- package/dist/chunk-SP5U3DJP.js +7 -0
- package/dist/chunk-SP5U3DJP.js.map +1 -0
- package/dist/chunk-VGTQYKAC.js +8 -0
- package/dist/chunk-VGTQYKAC.js.map +1 -0
- package/dist/chunk-XAPSXJZO.js +8 -0
- package/dist/chunk-XAPSXJZO.js.map +1 -0
- package/dist/chunk-XL6SZZGI.js +6 -0
- package/dist/chunk-XL6SZZGI.js.map +1 -0
- package/dist/chunk-XQZPUMVQ.js +14 -0
- package/dist/chunk-XQZPUMVQ.js.map +1 -0
- package/dist/components/Analytics/OverviewAnalytics/index.d.ts +54 -0
- package/dist/components/Analytics/OverviewAnalytics/index.js +47 -0
- package/dist/components/Analytics/OverviewAnalytics/index.js.map +1 -0
- package/dist/components/Analytics/PartnerAnalysis/index.d.ts +122 -0
- package/dist/components/Analytics/PartnerAnalysis/index.js +28 -0
- package/dist/components/Analytics/PartnerAnalysis/index.js.map +1 -0
- package/dist/components/Analytics/index.d.ts +117 -0
- package/dist/components/Analytics/index.js +47 -0
- package/dist/components/Analytics/index.js.map +1 -0
- package/dist/components/Avatar/index.d.ts +1 -1
- package/dist/components/AvatarButton/index.js +6 -6
- package/dist/components/AvatarButton/index.js.map +1 -1
- package/dist/components/Common/index.js +2 -2
- package/dist/components/DataView/index.d.ts +1 -1
- package/dist/components/DateRangeCalendar/index.js +1 -7
- package/dist/components/DateRangeCalendar/index.js.map +1 -1
- package/dist/components/Drawer/index.js +3 -12
- package/dist/components/Drawer/index.js.map +1 -1
- package/dist/components/DynamicDataView/index.js +1 -1
- package/dist/components/InfoCircle/index.js +3 -7
- package/dist/components/InfoCircle/index.js.map +1 -1
- package/dist/components/SimpleCard/index.js +1 -7
- package/dist/components/SimpleCard/index.js.map +1 -1
- package/dist/components/ToggleTheme/index.js +2 -2
- package/dist/components/form/DateField/index.js +1 -8
- package/dist/components/form/DateField/index.js.map +1 -1
- package/dist/components/form/Form/index.js +1 -7
- package/dist/components/form/Form/index.js.map +1 -1
- package/dist/hooks/useDatagrid.js +1 -6
- package/dist/hooks/useDatagrid.js.map +1 -1
- package/dist/hooks/useSnackbar.d.ts +1 -1
- package/dist/hooks/useThemeToggle.js +2 -2
- package/dist/index.d.ts +2 -2
- package/dist/index.js +2 -2
- package/dist/theme/core/index.d.ts +1 -1
- package/dist/theme/styles/index.d.ts +13 -13
- package/dist/theme/theme-provider.js +2 -2
- package/dist/types/analytics.d.ts +29 -0
- package/dist/types/analytics.js +2 -0
- package/dist/types/analytics.js.map +1 -0
- package/dist/types/overviewAnalytics.d.ts +88 -0
- package/dist/types/overviewAnalytics.js +2 -0
- package/dist/types/overviewAnalytics.js.map +1 -0
- package/dist/types/partnerAnalysis.d.ts +91 -0
- package/dist/types/partnerAnalysis.js +2 -0
- package/dist/types/partnerAnalysis.js.map +1 -0
- package/dist/utils/buildExportPayload.js +1 -1
- package/dist/utils/chart.d.ts +6 -0
- package/dist/utils/chart.js +2 -0
- package/dist/utils/chart.js.map +1 -0
- package/dist/utils/periodDates.d.ts +20 -0
- package/dist/utils/periodDates.js +3 -0
- package/dist/utils/periodDates.js.map +1 -0
- package/package.json +16 -2
- package/dist/{chunk-NWT5TUJO.js.map → chunk-JM3SE72J.js.map} +0 -0
- package/dist/{index-5a5e5dc8.d.ts → index-c8f1e6e7.d.ts} +12 -12
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"sources":["../../../../src/components/Analytics/OverviewAnalytics/OrdersByType/index.tsx","../../../../src/components/Analytics/OverviewAnalytics/OrdersByType/Chart/index.tsx","../../../../src/components/Analytics/OverviewAnalytics/OrdersByType/props.ts","../../../../src/components/Analytics/OverviewAnalytics/OrdersByType/Chart/BarBackground.tsx","../../../../src/components/Analytics/OverviewAnalytics/OrdersByType/Chart/BarLabel.tsx","../../../../src/components/Analytics/OverviewAnalytics/OrdersByType/Chart/Tooltip.tsx","../../../../src/components/Analytics/OverviewAnalytics/OrdersByType/Legend.tsx","../../../../src/components/Analytics/OverviewAnalytics/OrdersByType/Summary.tsx","../../../../src/components/Analytics/OverviewAnalytics/OverviewDetail/index.tsx","../../../../src/components/Analytics/OverviewAnalytics/OverviewDetail/Header.tsx","../../../../src/components/Analytics/OverviewAnalytics/OverviewDetail/styles.ts","../../../../src/components/Analytics/OverviewAnalytics/OverviewDetail/useOverviewDetailState.ts","../../../../src/components/Analytics/OverviewAnalytics/OverviewDetail/utils.ts","../../../../src/components/Analytics/OverviewAnalytics/SalesEvolution/index.tsx","../../../../src/components/Analytics/OverviewAnalytics/SalesEvolution/Chart/index.tsx","../../../../src/components/Analytics/OverviewAnalytics/SalesEvolution/Chart/DailyView.tsx","../../../../src/components/Analytics/OverviewAnalytics/SalesEvolution/props.ts","../../../../src/components/Analytics/OverviewAnalytics/SalesEvolution/Chart/BarBackground.tsx","../../../../src/components/Analytics/OverviewAnalytics/SalesEvolution/Chart/Tooltip.tsx","../../../../src/components/Analytics/OverviewAnalytics/SalesEvolution/Chart/MonthlyView.tsx","../../../../src/components/Analytics/OverviewAnalytics/SalesEvolution/Legend.tsx","../../../../src/components/Analytics/OverviewAnalytics/SalesEvolution/Summary.tsx","../../../../src/components/Analytics/OverviewAnalytics/SalesForecast/index.tsx","../../../../src/components/Analytics/OverviewAnalytics/SalesForecast/Chart/index.tsx","../../../../src/components/Analytics/OverviewAnalytics/SalesForecast/props.ts","../../../../src/components/Analytics/OverviewAnalytics/SalesForecast/Chart/BarBackground.tsx","../../../../src/components/Analytics/OverviewAnalytics/SalesForecast/Chart/RealizedBackground.tsx","../../../../src/components/Analytics/OverviewAnalytics/SalesForecast/Chart/Tooltip.tsx","../../../../src/components/Analytics/OverviewAnalytics/SalesForecast/Legend.tsx","../../../../src/components/Analytics/OverviewAnalytics/SalesForecast/Summary.tsx"],"names":["useCallback","useMemo","useState","CardContent","CardHeader","Stack","useRef","Bar","BarChart","CartesianGrid","ResponsiveContainer","Tooltip","XAxis","YAxis","COLORS","jsx","BarBackground","x","y","width","height","index","activeBarIndex","BarBackground_default","BarLabel","data","visibleSeries","isMonthly","shouldRotateLabels","item","total","BarLabel_default","Divider","Typography","jsxs","OrdersByTypeTooltip","active","payload","label","viewMode","isDaily","formattedLabel","parts","monthIndex","month","MONTH_FULL_LABELS","items","p","SimpleCard_default","entry","fCurrencyBRL","Tooltip_default","Chart","onMouseMove","onMouseLeave","onBarClick","containerWidth","setContainerWidth","observerRef","wrapperRefCallback","node","hasOrderData","hasQuotationData","yDomain","maxTotal","d","yTicks","max","step","_","i","quotationsOnTop","ordersIsTop","tickFormatter","formatMonthLabel","formatDayLabel","ChartWrapper","state","RotatedTick_default","v","fShortenNumber","Chart_default","Checkbox","FormControlLabel","OrdersByTypeLegend","onToggleSerie","Legend_default","Summary","ordersTotal","quotationsTotal","isMobile","useResponsive_default","Summary_default","Fragment","OrdersByType","selectedYear","DetailComponent","setVisibleSeries","setActiveBarIndex","detailOpen","setDetailOpen","selectedLabel","setSelectedLabel","selectedTotalValue","setSelectedTotalValue","handleToggleSerie","serie","prev","handleMouseMove","handleMouseLeave","handleBarClick","handleDetailClose","totals","acc","ChartCard","Result_default","EmptyState_default","OrdersByType_default","Link","Header","title","periodLabel","VIEW_MODE_LABELS","Header_default","MuiDivider","alpha","styled","StyledDivider","MobileItemContainer","theme","getOrderId","order","getPartnerName","buildPartnerLink","getOrderValue","getOrderDate","fDate","getOrderStatus","getDefaultMobileRender","OverviewDetail","open","onClose","totalValue","suffix","rows","isLoading","isFetching","page","perPage","onSearch","onPaginationChange","mobileItemSlot","content","SearchInput_default","DataView_default","row","header","Drawer_default","Modal_default","OverviewDetail_default","getDateRange","date","year","lastDay","getPeriodLabel","monthName","day","getPeriodSuffix","useOverviewDetailState","search","handlePaginationModelChange","handleSearch","useDatagrid_default","startDate","endDate","queryParams","handlePaginationChange","newPage","rowsPerPage","useOverviewDetailState_default","ComposedChart","Line","SalesEvolutionTooltip","realized","forecast","goal","achievement","gap","timeUnitStr","goalStr","DailyChart","formatYAxis","DailyView_default","MonthlyChart","barLabelConfig","value","MonthlyView_default","SalesEvolutionChart","SalesEvolutionLegend","kpis","editGoalAction","fPercent","InfoCircle_default","SalesEvolution","values","ticks","handleToggleSeries","key","toggle","SalesEvolution_default","RealizedBackground","bothRendered","RealizedBackground_default","SalesForecastTooltip","ForecastChart","hasRealizedData","hasForecastData","SalesForecastLegend","SalesForecastSummary","totalForecast","totalRealized","percentage","SalesForecast","SalesForecast_default"],"mappings":"4vCAAA,OAAS,eAAAA,GAAa,WAAAC,GAAS,YAAAC,OAAgB,QAC/C,OAAOC,OAAiB,4BACxB,OAAOC,OAAgB,2BACvB,OAAOC,OAAW,sBCHlB,OAAuB,eAAAL,GAAa,WAAAC,GAAS,UAAAK,GAAQ,YAAAJ,OAAgB,QACrE,OACE,OAAAK,GACA,YAAAC,GACA,iBAAAC,GACA,uBAAAC,GACA,WAAAC,GACA,SAAAC,GACA,SAAAC,OACK,WCsBA,IAAMC,GAAS,CACpB,OAAQ,UACR,WAAY,SACd,ECrBI,cAAAC,OAAA,oBAXJ,IAAMC,GAAgB,CAAC,CACrB,EAAAC,EAAI,EACJ,EAAAC,EAAI,EACJ,MAAAC,EAAQ,EACR,OAAAC,EAAS,EACT,MAAAC,EACA,eAAAC,CACF,IACMA,IAAmBD,EAAc,KAGnCN,GAAC,QACC,EAAGE,EAAI,EACP,EAAGC,EACH,MAAOC,EAAQ,GACf,OAAQC,EAAS,EACjB,KAAK,UACL,QAAS,IACT,GAAI,EACN,EAIGG,GAAQP,GCFX,cAAAD,OAAA,oBArBJ,IAAMS,GAAW,CAAC,CAChB,EAAAP,EAAI,EACJ,EAAAC,EAAI,EACJ,MAAAC,EAAQ,EACR,MAAAE,EAAQ,EACR,KAAAI,EACA,cAAAC,EACA,UAAAC,EACA,mBAAAC,CACF,IAAqB,CACnB,GAAI,CAACD,GAAaC,EAAoB,OAAO,KAE7C,IAAMC,EAAOJ,EAAKJ,CAAK,EACvB,GAAI,CAACQ,EAAM,OAAO,KAElB,IAAIC,EAAQ,EAGZ,OAFIJ,EAAc,SAAQI,GAASD,EAAK,aAAe,GACnDH,EAAc,aAAYI,GAASD,EAAK,iBAAmB,GAC1DC,EAGHf,GAAC,QACC,EAAGE,EAAIE,EAAQ,EACf,EAAGD,EAAI,EACP,WAAW,SACX,SAAU,GACV,KAAK,UAEJ,SAAAY,EACH,EAXiB,IAarB,EAEOC,GAAQP,GCnCf,OAAOQ,OAAa,wBACpB,OAAO3B,OAAW,sBAClB,OAAO4B,OAAgB,2BAqDjB,cAAAlB,GAgBM,QAAAmB,OAhBN,oBA5CN,IAAMC,GAAsB,CAAC,CAC3B,OAAAC,EACA,QAAAC,EACA,MAAAC,EACA,SAAAC,CACF,IAA0B,CACxB,GAAI,CAACH,GAAU,CAACC,GAAS,OAAQ,OAAO,KAExC,IAAMG,EAAUD,YAEZE,EAAiB,OAAOH,CAAK,EAC3BI,EAAQD,EAAe,MAAM,GAAG,EAEtC,GAAIC,EAAM,QAAU,EAAG,CACrB,IAAMC,EAAa,SAASD,EAAM,CAAC,EAAG,EAAE,EAAI,EACtCE,EAAQC,EAAkBF,CAAU,EAEtCH,GAAWE,EAAM,SAAW,EAC9BD,EAAiB,GAAG,SAASC,EAAM,CAAC,EAAG,EAAE,QAAQE,QAAYF,EAAM,CAAC,IAC1DF,IACVC,EAAiB,GAAGG,QAAYF,EAAM,CAAC,KAI3C,IAAMjB,EAAOY,EAAQ,CAAC,EAAE,QAElBS,EAAQ,CACZ,CACE,KAAM,SACN,MAAOrB,EAAK,aAAe,EAC3B,MAAOA,EAAK,aAAe,EAC3B,MAAOY,EAAQ,KAAKU,GAAKA,EAAE,UAAY,aAAa,GAAG,OAAS,SAClE,EACA,CACE,KAAM,gBACN,MAAOtB,EAAK,iBAAmB,EAC/B,MAAOA,EAAK,iBAAmB,EAC/B,MACEY,EAAQ,KAAKU,GAAKA,EAAE,UAAY,iBAAiB,GAAG,OAAS,SACjE,CACF,EAEA,OACEb,GAACc,EAAA,CAAW,SAAU,CAAE,GAAI,OAAQ,GAAI,GAAI,EAAG,EAAG,EAAG,IAAK,EACxD,UAAAjC,GAACkB,GAAA,CAAW,QAAQ,QAAQ,MAAM,iBAC/B,SAAAQ,EACH,EAEA1B,GAACiB,GAAA,EAAQ,EAETjB,GAACV,GAAA,CACE,SAAAyC,EAAM,IAAI,CAACG,EAAO5B,IACjBa,GAAC7B,GAAA,CAEC,UAAU,MACV,WAAW,SACX,eAAe,gBACf,IAAK,EACL,cAAa,gBAAgBgB,IAE7B,UAAAa,GAAC7B,GAAA,CAAM,UAAU,MAAM,WAAW,SAAS,IAAK,EAC9C,UAAAU,GAACV,GAAA,CACC,MAAO,EACP,OAAQ,EACR,aAAa,MACb,QAAS4C,EAAM,MACjB,EAEAlC,GAACkB,GAAA,CAAW,QAAQ,QAAQ,OAAM,GAC/B,SAAAgB,EAAM,KACT,GACF,EAEAf,GAACD,GAAA,CAAW,QAAQ,QAAQ,MAAM,gBAAgB,OAAM,GACrD,UAAAgB,EAAM,MAAM,IAAEA,EAAM,QAAU,EAAI,SAAW,UAAU,SACxDlC,GAACkB,GAAA,CAAW,UAAU,OAAO,QAAQ,QAAQ,MAAM,eAChD,SAAAiB,EAAaD,EAAM,KAAK,EAC3B,GACF,IAzBKA,EAAM,IA0Bb,CACD,EACH,GACF,CAEJ,EAEOE,GAAQhB,GJDP,OAkBE,OAAApB,EAlBF,QAAAmB,OAAA,oBAxER,IAAMkB,GAAQ,CAAC,CACb,KAAA3B,EACA,SAAAc,EACA,cAAAb,EACA,eAAAJ,EACA,YAAA+B,EACA,aAAAC,EACA,WAAAC,CACF,IAAkB,CAChB,IAAM5B,EAAYY,cACZ,CAACiB,EAAgBC,CAAiB,EAAIvD,GAAS,CAAC,EAChDwD,EAAcpD,GAA8B,IAAI,EAEhDqD,EAAqB3D,GAAa4D,GAAgC,CAClEF,EAAY,UACdA,EAAY,QAAQ,WAAW,EAC/BA,EAAY,QAAU,MAEpBE,IACFH,EAAkBG,EAAK,WAAW,EAClCF,EAAY,QAAU,IAAI,eAAe,IACvCD,EAAkBG,EAAK,WAAW,CACpC,EACAF,EAAY,QAAQ,QAAQE,CAAI,EAEpC,EAAG,CAAC,CAAC,EAEChC,EAAqB3B,GAAQ,IAC7B,CAAC0B,GACD6B,IAAmB,GAAK/B,EAAK,SAAW,EAAU,IAClC+B,EAAiB,IAAM/B,EAAK,OAC5B,GACnB,CAACE,EAAW6B,EAAgB/B,EAAK,MAAM,CAAC,EAErCoC,EAAe5D,GACnB,IAAMwB,EAAK,KAAK,IAAM,EAAE,aAAe,GAAK,CAAC,EAC7C,CAACA,CAAI,CACP,EAEMqC,EAAmB7D,GACvB,IAAMwB,EAAK,KAAK,IAAM,EAAE,iBAAmB,GAAK,CAAC,EACjD,CAACA,CAAI,CACP,EAEMsC,EAAU9D,GAAQ,IAAwB,CAC9C,GAAI,CAACwB,EAAK,OAAQ,MAAO,CAAC,EAAG,CAAC,EAC9B,IAAMuC,EAAW,KAAK,IACpB,GAAGvC,EAAK,IAAIwC,IAAMA,EAAE,aAAe,IAAMA,EAAE,iBAAmB,EAAE,CAClE,EACA,MAAO,CAAC,EAAGD,EAAW,EAAIA,EAAW,KAAO,CAAC,CAC/C,EAAG,CAACvC,CAAI,CAAC,EAEHyC,EAASjE,GAAQ,IAAM,CAC3B,GAAM,CAAC,CAAEkE,CAAG,EAAIJ,EACVK,EAAOD,EAAM,EACnB,MAAO,CACL,GAAG,IAAI,IAAI,MAAM,KAAK,CAAE,OAAQ,CAAE,EAAG,CAACE,EAAGC,IAAM,KAAK,MAAMF,EAAOE,CAAC,CAAC,CAAC,CACtE,CACF,EAAG,CAACP,CAAO,CAAC,EAENQ,EAAkB7C,EAAc,YAAcoC,EAE9CU,EAAc9C,EAAc,QAAUmC,GAAgB,CAACU,EAEvDE,EAAgBxE,GACpB,IAAO0B,EAAY+C,EAAmBC,EACtC,CAAChD,CAAS,CACZ,EAEA,OACEZ,EAAC6D,EAAA,CAAa,IAAKjB,EACjB,SAAA5C,EAACL,GAAA,CAAoB,MAAM,OAAO,OAAQ,IACxC,SAAAwB,GAAC1B,GAAA,CACC,KAAMiB,EACN,OAAQ,CACN,IAAK,GACL,MAAO,GACP,OAAQG,EAAqB,IAAM,EACnC,KAAM,EACR,EACA,eAAe,MACf,MAAO,CAAE,OAAQ,SAAU,EAC3B,YAAayB,EACb,aAAcC,EACd,QAASuB,GAAS,CACZA,GAAO,oBAAsB,MAC/BtB,IAAa,OAAOsB,EAAM,kBAAkB,CAAC,CAEjD,EAEA,UAAA9D,EAACN,GAAA,CACC,SAAU,GACV,gBAAgB,MAChB,OAAO,UACT,EAEAM,EAACH,GAAA,CACC,QAAQ,QACR,SAAU,GACV,SAAU,GACT,GAAIgB,GAAsB,CAAE,SAAU,EAAG,OAAQ,GAAI,EACtD,KACEA,EACEb,EAAC+D,EAAA,EAAY,EAEb,CAAE,SAAU,GAAI,KAAM,SAAU,EAGpC,cAAeL,EACjB,EAEA1D,EAACF,GAAA,CACC,SAAU,GACV,SAAU,GACV,KAAM,CAAE,SAAU,GAAI,KAAM,SAAU,EACtC,cAAgBkE,GAAcC,EAAeD,CAAC,EAC9C,OAAQhB,EACR,MAAOG,EACT,EAEAnD,EAACJ,GAAA,CACC,QAASI,EAACoC,GAAA,CAAoB,SAAUZ,EAAU,EAClD,OAAQ,GACV,EAEAxB,EAACR,GAAA,CACC,QAAQ,cACR,KAAK,SACL,KAAMO,GAAO,OACb,QAAQ,SACR,WAAY,GACZ,kBAAmB,GACnB,KAAM,CAACY,EAAc,OACrB,WAAYX,EAACQ,GAAA,CAAc,eAAgBD,EAAgB,EAC3D,OAAQkD,EAAc,CAAC,EAAG,EAAG,EAAG,CAAC,EAAI,OACpC,GAAIA,GAAe,CAClB,MAAO,CACL,SAAU,MACV,SAAU,GACV,KAAM,UACN,QACEzD,EAACgB,GAAA,CACC,KAAMN,EACN,cAAeC,EACf,UAAWC,EACX,mBAAoBC,EACtB,CAEJ,CACF,EACF,EAEAb,EAACR,GAAA,CACC,QAAQ,kBACR,KAAK,gBACL,KAAMO,GAAO,WACb,QAAQ,SACR,WAAY,GACZ,kBAAmB,GACnB,KAAM,CAACY,EAAc,WACrB,OAAQ6C,EAAkB,CAAC,EAAG,EAAG,EAAG,CAAC,EAAI,OACxC,GAAI,CAAC7C,EAAc,QAAU,CAC5B,WAAYX,EAACQ,GAAA,CAAc,eAAgBD,EAAgB,CAC7D,EACC,GAAIiD,GAAmB,CACtB,MAAO,CACL,SAAU,MACV,SAAU,GACV,KAAM,UACN,QACExD,EAACgB,GAAA,CACC,KAAMN,EACN,cAAeC,EACf,UAAWC,EACX,mBAAoBC,EACtB,CAEJ,CACF,EACF,GACF,EACF,EACF,CAEJ,EAEOqD,GAAQ7B,GKlNf,OAAO8B,OAAc,yBACrB,OAAOC,OAAsB,iCAC7B,OAAO9E,OAAW,sBAKhB,OAGM,OAAAU,GAHN,QAAAmB,OAAA,oBADF,IAAMkD,GAAqB,CAAC,CAAE,cAAA1D,EAAe,cAAA2D,CAAc,IACzDnD,GAAC7B,GAAA,CAAM,UAAU,MAAM,eAAe,SAAS,SAAS,OAAO,IAAK,EAClE,UAAAU,GAACoE,GAAA,CACC,QACEpE,GAACmE,GAAA,CACC,QAASxD,EAAc,OACvB,SAAU,IAAM2D,EAAc,QAAQ,EACtC,GAAI,CAAE,gBAAiB,CAAE,MAAOvE,GAAO,MAAO,CAAE,EAClD,EAEF,MAAM,SACR,EAEAC,GAACoE,GAAA,CACC,QACEpE,GAACmE,GAAA,CACC,QAASxD,EAAc,WACvB,SAAU,IAAM2D,EAAc,YAAY,EAC1C,GAAI,CAAE,gBAAiB,CAAE,MAAOvE,GAAO,UAAW,CAAE,EACtD,EAEF,MAAM,gBACR,GACF,EAGKwE,GAAQF,GChCf,OAAOpD,OAAa,wBACpB,OAAO3B,OAAW,sBAClB,OAAO4B,OAAgB,2BAiBf,cAAAlB,GAeA,QAAAmB,OAfA,oBAXR,IAAMqD,GAAU,CAAC,CAAE,YAAAC,EAAa,gBAAAC,EAAiB,UAAA9D,CAAU,IAAoB,CAC7E,IAAM+D,EAAWC,EAAc,OAAQ,IAAI,EAE3C,OACEzD,GAAC7B,GAAA,CACC,UAAW,CAAE,GAAI,SAAU,GAAI,KAAM,EACrC,WAAY,CAAE,GAAI,aAAc,GAAI,QAAS,EAC7C,SAAS,OACT,IAAK,EAEJ,UAAAqF,GACC3E,GAACiB,GAAA,CACC,YAAY,aACZ,SAAQ,GACR,GAAI,CACF,YAAa,SACb,GAAI,EACN,EACF,EAGFE,GAAC7B,GAAA,CACC,UAAAU,GAACkB,GAAA,CAAW,QAAQ,QAAQ,MAAM,iBAC/B,SAAAN,EAAY,gBAAkB,mBACjC,EAEAO,GAACD,GAAA,CAAW,QAAQ,YAAa,UAAAuD,EAAY,WAAO,GACtD,EAEAzE,GAACiB,GAAA,CACC,YAAa0D,EAAW,aAAe,WACvC,SAAQ,GACR,GAAI,CAAE,YAAaA,EAAW,QAAU,QAAS,EACnD,EAEAxD,GAAC7B,GAAA,CACC,UAAAU,GAACkB,GAAA,CAAW,QAAQ,QAAQ,MAAM,iBAC/B,SAAAN,EAAY,uBAAsB,0BACrC,EAEAO,GAACD,GAAA,CAAW,QAAQ,YACjB,UAAAwD,EAAgB,kBACnB,GACF,GACF,CAEJ,EAEOG,GAAQL,GPsBX,mBAAAM,GAEI,OAAA9E,EAII,QAAAmB,OANR,oBA9DJ,IAAM4D,GAAe,CAAC,CACpB,KAAArE,EACA,SAAAc,EACA,aAAAwD,EACA,gBAAAC,CACF,IAAyB,CACvB,IAAMrE,EAAYY,cAEZ,CAACb,EAAeuE,CAAgB,EAAI/F,GAAwB,CAChE,OAAQ,GACR,WAAY,EACd,CAAC,EAEK,CAACoB,EAAgB4E,CAAiB,EAAIhG,GAAwB,IAAI,EAElE,CAACiG,EAAYC,CAAa,EAAIlG,GAAS,EAAK,EAC5C,CAACmG,EAAeC,CAAgB,EAAIpG,GAAS,EAAE,EAC/C,CAACqG,EAAoBC,CAAqB,EAAItG,GAAS,CAAC,EAExDuG,EAAoBzG,GAAa0G,GAA+B,CACpET,EAAiBU,IAAS,CAAE,GAAGA,EAAM,CAACD,CAAK,EAAG,CAACC,EAAKD,CAAK,CAAE,EAAE,CAC/D,EAAG,CAAC,CAAC,EAECE,EAAkB5G,GAAkC6E,GAAS,CAC7DA,GAAO,oBAAsB,MAC/BqB,EAAkB,OAAOrB,EAAM,kBAAkB,CAAC,CAEtD,EAAG,CAAC,CAAC,EAECgC,EAAmB7G,GACvB,IAAMkG,EAAkB,IAAI,EAC5B,CAAC,CACH,EAEMY,EAAiB9G,GACpBqB,GAAkB,CACjB,IAAMQ,EAAOJ,EAAKJ,CAAK,EAClBQ,IACLyE,EAAiBzE,EAAK,KAAK,EAC3B2E,EAAsB3E,EAAK,WAAW,EACtCuE,EAAc,EAAI,EACpB,EACA,CAAC3E,CAAI,CACP,EAEMsF,EAAoB/G,GAAY,IAAM,CAC1CoG,EAAc,EAAK,CACrB,EAAG,CAAC,CAAC,EAECY,EAAS/G,GAAQ,IAAM,CAC3B,IAAMuF,EAAc/D,EAAK,OACvB,CAACwF,EAAKpF,IAASoF,GAAOpF,EAAK,aAAe,GAC1C,CACF,EACM4D,EAAkBhE,EAAK,OAC3B,CAACwF,EAAKpF,IAASoF,GAAOpF,EAAK,iBAAmB,GAC9C,CACF,EACA,MAAO,CAAE,YAAA2D,EAAa,gBAAAC,CAAgB,CACxC,EAAG,CAAChE,CAAI,CAAC,EAET,OACES,GAAA2D,GAAA,CACE,UAAA3D,GAACgF,EAAA,CACC,UAAAnG,EAACX,GAAA,CAAW,MAAM,iCAAiC,EAEnDW,EAACZ,GAAA,CACC,SAAAY,EAACoG,EAAA,CAAO,QAAS1F,EAAK,SAAW,EAAG,MAAOV,EAACqG,EAAA,EAAW,EACrD,SAAAlF,GAAC7B,GAAA,CAAM,IAAK,EACV,UAAAU,EAACV,GAAA,CAAM,QAAS,CAAE,GAAI,OAAQ,GAAI,OAAQ,EACxC,SAAAU,EAAC6E,GAAA,CACC,UAAWjE,EACX,YAAaqF,EAAO,YACpB,gBAAiBA,EAAO,gBAC1B,EACF,EAEAjG,EAACkE,GAAA,CACC,KAAMxD,EACN,SAAUc,EACV,cAAeb,EACf,eAAgBJ,EAChB,YAAasF,EACb,aAAcC,EACd,WAAYC,EACd,EAEA/F,EAACuE,GAAA,CACC,cAAe5D,EACf,cAAe+E,EACjB,EAEA1F,EAACV,GAAA,CAAM,QAAS,CAAE,GAAI,QAAS,GAAI,MAAO,EACxC,SAAAU,EAAC6E,GAAA,CACC,UAAWjE,EACX,YAAaqF,EAAO,YACpB,gBAAiBA,EAAO,gBAC1B,EACF,GACF,EACF,EACF,GACF,EAECX,GAAiBL,GAChBjF,EAACiF,EAAA,CACC,KAAMG,EACN,QAASY,EACT,MAAOV,EACP,SAAU9D,EACV,aAAcwD,EACd,WAAYQ,EACd,GAEJ,CAEJ,EAEOc,GAAQvB,GQtIf,OAAO9D,OAAa,wBACpB,OAAOsF,OAAU,qBACjB,OAAOjH,MAAW,sBAClB,OAAO4B,MAAgB,2BCHvB,OAAO5B,OAAW,sBAClB,OAAO4B,OAAgB,2BAcjB,cAAAlB,GAIA,QAAAmB,OAJA,oBARN,IAAMqF,GAAS,CAAC,CACd,MAAAC,EACA,SAAAjF,EACA,aAAAwD,EACA,YAAA0B,CACF,IAEIvF,GAAC7B,GAAA,CAAM,MAAM,OAAO,SAAU,EAAG,SAAS,SACxC,UAAAU,GAACkB,GAAA,CAAW,QAAQ,YAAY,OAAM,GAAC,oCAEvC,EAEAC,GAAC7B,GAAA,CACC,UAAU,MACV,WAAW,SACX,UAAW,IACX,OAAQ,EACR,SAAS,OAET,UAAAU,GAACkB,GAAA,CAAW,QAAQ,QAAQ,MAAM,iBAAiB,WAAY,EAC5D,SAAAuF,EACH,EAAa,SAEbzG,GAACkB,GAAA,CAAW,QAAQ,QAAQ,WAAY,EACrC,SAAAyF,GAAiBnF,CAAQ,EAC5B,EAAa,SAEbxB,GAACkB,GAAA,CAAW,QAAQ,QAAQ,WAAY,EACrC,SAAA8D,EACH,EAAa,SAEbhF,GAACkB,GAAA,CAAW,QAAQ,QAAQ,MAAM,iBAAiB,OAAM,GACtD,SAAAwF,EACH,GACF,GACF,EAIGE,GAAQJ,GC9Cf,OAAOK,OAAgB,wBACvB,OAAOvH,OAAW,sBAClB,OAAS,SAAAwH,GAAO,UAAAC,OAAc,uBAEvB,IAAMC,GAAgBD,GAAOF,EAAU,EAAE,KAAO,CACrD,OAAQ,GACR,UAAW,SAEX,YAAa,QACf,EAAE,EAEWI,GAAsBF,GAAOzH,EAAK,EAAE,CAAC,CAAE,MAAA4H,CAAM,KAAO,CAC/D,SAAU,WAEV,QAAS,OACT,cAAe,SACf,QAASA,EAAM,QAAQ,CAAC,EACxB,IAAKA,EAAM,QAAQ,CAAC,EACpB,MAAOA,EAAM,QAAQ,KAAK,QAE1B,MAAO,CACL,eAAgB,MAClB,EAEA,QAAS,CACP,UAAW,cAAcJ,GAAMI,EAAM,QAAQ,KAAK,GAAG,EAAG,EAAG,GAC7D,CACF,EAAE,EFNE,OA6LY,YAAApC,GA7LZ,OAAA9E,EA4DE,QAAAmB,MA5DF,oBAFJ,IAAMgG,GAAcC,GAClBpH,EAACV,EAAA,CAAM,eAAe,SAAS,OAAQ,EACrC,SAAAU,EAACkB,EAAA,CAAW,QAAQ,QAAQ,MAAM,eAC/B,SAAAkG,EAAM,GACT,EACF,EAGIC,GAAiB,CACrBD,EACAE,IAEAtH,EAACV,EAAA,CAAM,eAAe,SAAS,OAAQ,EACpC,SAAA8H,GAAO,SAAS,IAAME,EACrBtH,EAACuG,GAAA,CACC,UAAU,IACV,KAAMe,EAAiBF,EAAM,QAAQ,EAAE,EACvC,OAAO,SACP,IAAI,sBACJ,QAAQ,YACR,GAAI,CAAE,eAAgB,WAAY,EAClC,OAAM,GAEL,SAAAA,EAAM,SAAS,MAAQ,IAC1B,EAEApH,EAACkB,EAAA,CAAW,QAAQ,QAAQ,MAAM,eAAe,OAAM,GACpD,SAAAkG,EAAM,SAAS,MAAQ,IAC1B,EAEJ,EAGIG,GAAiBH,GACrBpH,EAACV,EAAA,CAAM,eAAe,SAAS,OAAQ,EACrC,SAAAU,EAACkB,EAAA,CAAW,QAAQ,QAAQ,MAAM,eAC/B,SAAAiB,EAAaiF,EAAM,WAAW,EACjC,EACF,EAGII,GAAgBJ,GACpBpH,EAACV,EAAA,CAAM,eAAe,SAAS,OAAQ,EACpC,SAAA8H,EAAM,iBACLpH,EAACkB,EAAA,CAAW,QAAQ,QAAQ,MAAM,eAC/B,SAAAuG,GAAML,EAAM,iBAAkB,YAAY,EAC7C,EAEA,IAEJ,EAGIM,GAAkBN,GACtBpH,EAACV,EAAA,CAAM,eAAe,SAAS,OAAQ,EACpC,SAAA8H,EAAM,QAAU,IACnB,EAGIO,GAA0BP,GAC9BpH,EAACiH,GAAA,CACC,SAAA9F,EAAC7B,EAAA,CAAM,IAAK,EACV,UAAA6B,EAAC7B,EAAA,CACC,UAAAU,EAACkB,EAAA,CAAW,QAAQ,QAAQ,MAAM,iBAAiB,kBAEnD,EACAlB,EAACkB,EAAA,CAAW,QAAQ,YAAY,MAAM,eACnC,SAAAkG,EAAM,GACT,GACF,EAEAjG,EAAC7B,EAAA,CACC,UAAAU,EAACkB,EAAA,CAAW,QAAQ,QAAQ,MAAM,iBAAiB,mBAEnD,EACAlB,EAACkB,EAAA,CAAW,QAAQ,YAAY,MAAM,eACnC,SAAAkG,EAAM,SAAS,MAAQ,IAC1B,GACF,EAEAjG,EAAC7B,EAAA,CAAM,UAAU,MAAM,WAAW,SAAS,IAAK,EAC9C,UAAA6B,EAAC7B,EAAA,CAAM,KAAM,EAAG,SAAS,SACvB,UAAAU,EAACkB,EAAA,CAAW,QAAQ,QAAQ,MAAM,iBAAiB,OAAM,GAAC,2BAE1D,EACAlB,EAACkB,EAAA,CAAW,QAAQ,YAAY,MAAM,eAAe,OAAM,GACxD,SAAAiB,EAAaiF,EAAM,WAAW,EACjC,GACF,EAEApH,EAACiB,GAAA,CACC,YAAY,WACZ,SAAQ,GACR,GAAI,CAAE,YAAa,SAAU,GAAI,CAAE,EACrC,EAEAE,EAAC7B,EAAA,CAAM,KAAM,EAAG,SAAS,SACvB,UAAAU,EAACkB,EAAA,CAAW,QAAQ,QAAQ,MAAM,iBAAiB,OAAM,GAAC,gBAE1D,EACAlB,EAACkB,EAAA,CAAW,QAAQ,YAAY,MAAM,eAAe,OAAM,GACxD,SAAAkG,EAAM,iBACHK,GAAML,EAAM,iBAAkB,YAAY,EAC1C,IACN,GACF,GACF,EAEAjG,EAAC7B,EAAA,CAAM,IAAK,GACV,UAAAU,EAACkB,EAAA,CAAW,QAAQ,QAAQ,MAAM,iBAAiB,kBAEnD,EACAlB,EAACkB,EAAA,CAAW,QAAQ,YAAY,MAAM,eACnC,SAAAkG,EAAM,QAAU,IACnB,GACF,GACF,GAxDwBA,EAAM,EAyDhC,EAGIQ,GAAiB,CAAC,CACtB,KAAAC,EACA,QAAAC,EACA,MAAArB,EACA,SAAAjF,EACA,aAAAwD,EACA,WAAA+C,EACA,YAAArB,EACA,OAAAsB,EACA,KAAAC,EACA,MAAAlH,EACA,UAAAmH,EACA,WAAAC,EACA,KAAAC,EACA,QAAAC,EACA,SAAAC,EACA,mBAAAC,EACA,iBAAAjB,EACA,eAAAkB,CACF,IAA2B,CACzB,IAAM7D,EAAWC,EAAc,OAAQ,IAAI,EAErC6D,EACJtH,EAAC7B,EAAA,CAAM,IAAK,EACV,UAAA6B,EAAC7B,EAAA,CACC,UAAW,CAAE,GAAI,SAAU,GAAI,KAAM,EACrC,eAAe,gBACf,IAAK,EAEL,UAAA6B,EAAC7B,EAAA,CACC,SAAU,EACV,UAAU,MACV,WAAW,SACX,IAAK,EACL,SAAS,OAET,UAAA6B,EAAC7B,EAAA,CACC,UAAA6B,EAACD,EAAA,CAAW,QAAQ,QAAQ,MAAM,iBAAiB,oBACzC8G,GACV,EAEAhI,EAACkB,EAAA,CAAW,QAAQ,YAAY,MAAM,eACnC,SAAAiB,EAAa4F,CAAU,EAC1B,GACF,EAEA/H,EAACgH,GAAA,CAAc,YAAY,WAAW,SAAQ,GAAC,EAE/C7F,EAAC7B,EAAA,CACC,UAAA6B,EAACD,EAAA,CAAW,QAAQ,QAAQ,MAAM,iBAAiB,6BAChC8G,GACnB,EAEAhI,EAACkB,EAAA,CAAW,QAAQ,YAAY,MAAM,eACnC,SAAAH,EACH,GACF,GACF,EAEAf,EAAC0I,GAAA,CACC,KAAK,QACL,YAAY,SACZ,SAAUJ,EACV,QAAQ,SACR,aAAa,QACb,GAAI,CAAE,SAAU,GAAI,EACtB,GACF,EAEAtI,EAAC2I,GAAA,CACC,MAAM,UACN,OAAQ3I,EAAA8E,GAAA,EAAE,EACV,YAAa,CAAE,EAAG,CAAE,EACpB,QAAS,CACP,CACE,MAAO,cACP,WAAY,SACZ,KAAM,EACN,WAAY,CAAC,CAAE,IAAA8D,CAAI,IAA4BzB,GAAWyB,CAAG,CAC/D,EACA,CACE,MAAO,eACP,WAAY,UACZ,KAAM,EACN,WAAY,CAAC,CAAE,IAAAA,CAAI,IACjBvB,GAAeuB,EAAKtB,CAAgB,CACxC,EACA,CACE,MAAO,cACP,WAAY,kBACZ,KAAM,EACN,WAAY,CAAC,CAAE,IAAAsB,CAAI,IAA4BrB,GAAcqB,CAAG,CAClE,EACA,CACE,MAAO,aACP,WAAY,OACZ,KAAM,EACN,WAAY,CAAC,CAAE,IAAAA,CAAI,IAA4BpB,GAAaoB,CAAG,CACjE,EACA,CACE,MAAO,cACP,WAAY,SACZ,KAAM,EACN,WAAY,CAAC,CAAE,IAAAA,CAAI,IAA4BlB,GAAekB,CAAG,CACnE,CACF,EACA,KAAMX,EACN,SAAUlH,EACV,aAAeL,GACb8H,EAAiBA,EAAe9H,CAAI,EAAIiH,GAAuBjH,CAAI,EAErE,QAASwH,EACT,SAAUC,EACV,gBAAiB,CAAE,KAAAC,EAAM,SAAUC,CAAQ,EAC3C,mBAAoBE,EACpB,eAAe,SACf,2BAA0B,GAC1B,kBAAiB,GACjB,eAAgB,CAAE,OAAQ,GAAI,EAChC,GACF,EAGIM,EACJ7I,EAAC4G,GAAA,CACC,MAAOH,EACP,SAAUjF,EACV,aAAcwD,EACd,YAAa0B,EACf,EAGF,OAAI/B,EAEA3E,EAAC8I,GAAA,CACC,KAAMjB,EACN,QAASC,EACT,YAAae,EACb,YAAa,CACX,UAAW,cACX,GAAI,CAAE,kBAAmB,CAAE,SAAU,EAAG,SAAU,QAAS,CAAE,CAC/D,EAEC,SAAAJ,EACH,EAKFzI,EAAC+I,GAAA,CACC,KAAMlB,EACN,QAASC,EACT,SAAS,KACT,YAAae,EACb,iBAAkB,CAAE,GAAI,CAAE,KAAM,EAAG,SAAU,QAAS,CAAE,EACxD,UAAS,GAER,SAAAJ,EACH,CAEJ,EAEOO,GAAQpB,GG7Sf,OAAS,eAAA3I,GAAa,WAAAC,OAAe,QCG9B,IAAM+J,GAAe,CAC1B1H,EACAC,IAC2C,CAC3C,IAAMG,EAAQJ,EAAM,MAAM,GAAG,EAE7B,GAAIC,aAA+BG,EAAM,SAAW,EAAG,CACrD,IAAMuH,EAAO,GAAGvH,EAAM,CAAC,KAAKA,EAAM,CAAC,KAAKA,EAAM,CAAC,IAC/C,MAAO,CAAE,UAAWuH,EAAM,QAASA,CAAK,EAG1C,IAAMC,EAAO,SAASxH,EAAM,CAAC,EAAG,EAAE,EAC5BE,EAAQ,SAASF,EAAM,CAAC,EAAG,EAAE,EAC7ByH,EAAU,IAAI,KAAKD,EAAMtH,EAAO,CAAC,EAAE,QAAQ,EAEjD,MAAO,CACL,UAAW,GAAGF,EAAM,CAAC,KAAKA,EAAM,CAAC,OACjC,QAAS,GAAGA,EAAM,CAAC,KAAKA,EAAM,CAAC,KAAK,OAAOyH,CAAO,EAAE,SAAS,EAAG,GAAG,GACrE,CACF,EAEaC,GAAiB,CAAC9H,EAAeC,IAA+B,CAC3E,IAAMG,EAAQJ,EAAM,MAAM,GAAG,EACvBK,EAAa,SAASD,EAAM,CAAC,EAAG,EAAE,EAAI,EACtC2H,EAAYxH,EAAkBF,CAAU,GAAK,GAEnD,GAAIJ,aAA+BG,EAAM,SAAW,EAAG,CACrD,IAAM4H,EAAM,SAAS5H,EAAM,CAAC,EAAG,EAAE,EACjC,MAAO,GAAG2H,WAAmBC,IAG/B,OAAOD,CACT,EAEaE,GAAmBhI,GAC9BA,cAAgC,YAAW,SD9B7C,IAAMiI,GAAyB,CAAClI,EAAeC,IAAuB,CACpE,GAAM,CAAE,KAAA4G,EAAM,QAAAC,EAAS,OAAAqB,EAAQ,4BAAAC,EAA6B,aAAAC,CAAa,EACvEC,GAAY,EAER,CAAE,UAAAC,EAAW,QAAAC,CAAQ,EAAI7K,GAC7B,IAAM+J,GAAa1H,EAAOC,CAAQ,EAClC,CAACD,EAAOC,CAAQ,CAClB,EAEMkF,EAAcxH,GAClB,IAAMmK,GAAe9H,EAAOC,CAAQ,EACpC,CAACD,EAAOC,CAAQ,CAClB,EAEMwG,EAASwB,GAAgBhI,CAAQ,EAEjCwI,EAAc9K,GAAQ,KACnB,CACL,KAAAkJ,EACA,QAAAC,EACA,GAAIqB,EAAS,CAAE,OAAAA,CAAO,EAAI,CAAC,EAC3B,OAAQ,CACN,SAAU,MACV,OAAQ,CACN,CACE,SAAU,MACV,aAAc,CACZ,CACE,UAAW,kBACX,YAAa,wBACb,MAAO,CAAC,GAAGI,YAAoB,CACjC,EACA,CACE,UAAW,kBACX,YAAa,qBACb,MAAO,CAAC,GAAGC,YAAkB,CAC/B,CACF,CACF,CACF,CACF,CACF,GACC,CAACA,EAAS3B,EAAMC,EAASqB,EAAQI,CAAS,CAAC,EAExCG,EAAyBhL,GAC7B,CAACiL,EAAiBC,IAAwB,CACxCR,EAA4B,CAAE,KAAMO,EAAS,SAAUC,CAAY,CAAC,CACtE,EACA,CAACR,CAA2B,CAC9B,EAEA,MAAO,CACL,KAAAvB,EACA,QAAAC,EACA,YAAA3B,EACA,OAAAsB,EACA,YAAAgC,EACA,aAAAJ,EACA,uBAAAK,CACF,CACF,EAEOG,GAAQX,GEtEf,OAAS,eAAAxK,GAAa,WAAAC,GAAS,YAAAC,OAAgB,QAC/C,OAAOC,OAAiB,4BACxB,OAAOC,OAAgB,2BACvB,OAAOC,OAAW,sBCHlB,OAAS,eAAAL,GAAa,WAAAC,GAAS,UAAAK,GAAQ,YAAAJ,OAAgB,QCAvD,OAAS,eAAAF,OAAmB,QAC5B,OACE,OAAAO,GACA,iBAAAE,GACA,iBAAA2K,GACA,QAAAC,GACA,uBAAA3K,GACA,WAAAC,GACA,SAAAC,GACA,SAAAC,OACK,WC0BA,IAAMC,EAAS,CACpB,MAAO,UACP,SAAU,UACV,KAAM,SACR,ECzBI,cAAAC,OAAA,oBAXJ,IAAMC,GAAgB,CAAC,CACrB,EAAAC,EAAI,EACJ,EAAAC,EAAI,EACJ,MAAAC,EAAQ,EACR,OAAAC,EAAS,EACT,MAAAC,EACA,eAAAC,CACF,IACMA,IAAmBD,EAAc,KAGnCN,GAAC,QACC,EAAGE,EAAI,EACP,EAAGC,EACH,MAAOC,EAAQ,EAAI,EACnB,OAAQC,EAAS,EACjB,KAAMN,EAAO,MACb,QAAS,IACT,GAAI,EACN,EAIGS,GAAQP,GC3Bf,OAAOgB,OAAa,wBACpB,OAAO3B,OAAW,sBAClB,OAAO4B,OAAgB,2BA4EjB,cAAAlB,GAgBM,QAAAmB,OAhBN,oBAjEN,IAAMoJ,GAAwB,CAAC,CAC7B,OAAAlJ,EACA,QAAAC,EACA,MAAAC,EACA,SAAAC,CACF,IAA0B,CACxB,GAAI,CAACH,GAAU,CAACC,GAAS,OAAQ,OAAO,KAExC,IAAMG,EAAUD,YAEVd,EAAOY,EAAQ,CAAC,EAAE,QAClBkJ,EAAW,OAAO9J,EAAK,QAAQ,GAAK,EACpC+J,EAAW,OAAO/J,EAAK,QAAQ,GAAK,EACpCgK,EAAO,OAAOhK,EAAK,IAAI,GAAK,EAE5BiK,EAAcD,EAAO,EAAKF,EAAWE,EAAQ,IAAM,EACnDE,EAAMF,EAAOF,EAAWE,EAAOF,EAAW,EAE1CK,EAAcpJ,EAAU,SAAW,YACnCqJ,EAAUrJ,EAAU,YAAW,SAEjCC,EAAiB,OAAOH,CAAK,EAC3BI,EAAQD,EAAe,MAAM,GAAG,EAEtC,GAAIC,EAAM,QAAU,EAAG,CACrB,IAAMC,EAAa,SAASD,EAAM,CAAC,EAAG,EAAE,EAAI,EACtCE,EAAQC,EAAkBF,CAAU,EAEtCH,GAAWE,EAAM,SAAW,EAC9BD,EAAiB,GAAG,SAASC,EAAM,CAAC,EAAG,EAAE,QAAQE,QAAYF,EAAM,CAAC,IAC1DF,IACVC,EAAiB,GAAGG,QAAYF,EAAM,CAAC,KAI3C,IAAMI,EAAQ,CACZ,CACE,KAAM,aAAa8I,IACnB,MAAO1I,EAAaqI,CAAQ,EAC5B,MAAOzK,EAAO,KAChB,EACA,CACE,KAAM,YAAY8K,IAClB,MAAO1I,EAAasI,CAAQ,EAC5B,MAAO1K,EAAO,QAChB,EACA,CACE,KAAM,QAAQ+K,IACd,MAAO3I,EAAauI,CAAI,EACxB,MAAO3K,EAAO,IAChB,EACA,CACE,KAAM,cACN,MAAO,GAAG4K,EAAY,QAAQ,CAAC,KAC/B,MAAO,SACT,EACA,CACE,KAAM,OAAOE,IACb,MAAO1I,EAAayI,CAAG,EACvB,MAAO,SACT,CACF,EAEA,OACEzJ,GAACc,EAAA,CAAW,SAAU,CAAE,GAAI,OAAQ,GAAI,GAAI,EAAG,EAAG,EAAG,IAAK,EACxD,UAAAjC,GAACkB,GAAA,CAAW,QAAQ,QAAQ,MAAM,iBAC/B,SAAAQ,EACH,EAEA1B,GAACiB,GAAA,EAAQ,EAETjB,GAACV,GAAA,CACE,SAAAyC,EAAM,IAAI,CAACG,EAAO5B,IACjBa,GAAC7B,GAAA,CAEC,UAAU,MACV,WAAW,SACX,eAAe,gBACf,IAAK,EACL,cAAa,gBAAgBgB,IAE7B,UAAAa,GAAC7B,GAAA,CAAM,UAAU,MAAM,WAAW,SAAS,IAAK,EAC9C,UAAAU,GAACV,GAAA,CACC,MAAO,EACP,OAAQ,EACR,aAAa,MACb,QAAS4C,EAAM,MACjB,EAEAlC,GAACkB,GAAA,CAAW,QAAQ,QAAQ,OAAM,GAC/B,SAAAgB,EAAM,KACT,GACF,EAEAlC,GAACkB,GAAA,CAAW,QAAQ,QAAS,SAAAgB,EAAM,MAAM,IApBpC5B,CAqBP,CACD,EACH,GACF,CAEJ,EAEO8B,GAAQmI,GH/ET,OAYE,OAAAvK,EAZF,QAAAmB,OAAA,oBAfN,IAAM4J,GAAa,CAAC,CAClB,KAAArK,EACA,cAAAC,EACA,QAAAqC,EACA,OAAAG,EACA,SAAA3B,EACA,eAAAjB,EACA,YAAA+B,EACA,aAAAC,EACA,WAAAC,CACF,IAAuB,CACrB,IAAMwI,EAAc/L,GAAa+E,GAAcC,EAAeD,CAAC,EAAG,CAAC,CAAC,EAEpE,OACEhE,EAACL,GAAA,CAAoB,MAAM,OAAO,OAAQ,IACxC,SAAAwB,GAACkJ,GAAA,CACC,KAAM3J,EACN,OAAQ,CAAE,IAAK,GAAI,MAAO,GAAI,OAAQ,EAAG,KAAM,EAAG,EAClD,MAAO,CAAE,OAAQ,SAAU,EAC3B,YAAa4B,EACb,aAAcC,EACd,QAASuB,GAAS,CACZA,GAAO,oBAAsB,MAC/BtB,IAAa,OAAOsB,EAAM,kBAAkB,CAAC,CAEjD,EAEA,UAAA9D,EAACN,GAAA,CACC,SAAU,GACV,gBAAgB,MAChB,OAAO,UACT,EAEAM,EAACH,GAAA,CACC,QAAQ,QACR,SAAU,GACV,SAAU,GACV,KAAM,CAAE,SAAU,GAAI,KAAM,SAAU,EACtC,cAAe+D,EACjB,EAEA5D,EAACF,GAAA,CACC,SAAU,GACV,SAAU,GACV,KAAM,CAAE,SAAU,GAAI,KAAM,SAAU,EACtC,cAAekL,EACf,OAAQhI,EACR,MAAOG,EACT,EAEAnD,EAACJ,GAAA,CAAQ,QAASI,EAACoC,GAAA,CAAsB,SAAUZ,EAAU,EAAI,EAEjExB,EAACR,GAAA,CACC,QAAQ,WACR,KAAK,cACL,kBAAmB,GACnB,WAAYQ,EAACQ,GAAA,CAAc,eAAgBD,EAAgB,EAC7D,EAECI,EAAc,MACbX,EAACsK,GAAA,CACC,QAAQ,OACR,KAAK,OACL,OAAQvK,EAAO,KACf,YAAa,EACb,gBAAgB,MAChB,IAAK,GACL,kBAAmB,GACrB,EAGDY,EAAc,UACbX,EAACsK,GAAA,CACC,QAAQ,WACR,KAAK,SACL,OAAQvK,EAAO,MACf,YAAa,EACb,IAAK,CACH,KAAMA,EAAO,MACb,EAAG,EACH,YAAa,CACf,EACA,kBAAmB,GACrB,EAGDY,EAAc,UACbX,EAACsK,GAAA,CACC,QAAQ,WACR,KAAK,WACL,OAAQvK,EAAO,SACf,YAAa,EACb,gBAAgB,MAChB,IAAK,CACH,KAAMA,EAAO,SACb,EAAG,EACH,YAAa,CACf,EACA,kBAAmB,GACrB,GAEJ,EACF,CAEJ,EAEOkL,GAAQF,GI/Hf,OAAS,WAAA7L,OAAe,QACxB,OACE,OAAAM,GACA,iBAAAE,GACA,iBAAA2K,GACA,QAAAC,GACA,uBAAA3K,GACA,WAAAC,GACA,SAAAC,GACA,SAAAC,OACK,WAuCD,OAkBE,OAAAE,EAlBF,QAAAmB,OAAA,oBA3BN,IAAM+J,GAAe,CAAC,CACpB,KAAAxK,EACA,cAAAC,EACA,QAAAqC,EACA,OAAAG,EACA,mBAAAtC,EACA,eAAAN,EACA,YAAA+B,EACA,aAAAC,EACA,WAAAC,EACA,SAAAhB,CACF,IAAyB,CACvB,IAAM2J,EAAiBjM,GACrB,IACE2B,EACI,GACA,CACE,SAAU,MACV,SAAU,GACV,KAAM,UACN,UAAYuK,GAAmBjJ,EAAa,OAAOiJ,CAAK,CAAC,CAC3D,EACN,CAACvK,CAAkB,CACrB,EAEA,OACEb,EAACL,GAAA,CAAoB,MAAM,OAAO,OAAQ,IACxC,SAAAwB,GAACkJ,GAAA,CACC,KAAM3J,EACN,OAAQ,CACN,IAAK,GACL,MAAO,GACP,OAAQG,EAAqB,IAAM,EACnC,KAAM,EACR,EACA,eAAe,MACf,MAAO,CAAE,OAAQ,SAAU,EAC3B,YAAayB,EACb,aAAcC,EACd,QAASuB,GAAS,CACZA,GAAO,oBAAsB,MAC/BtB,IAAa,OAAOsB,EAAM,kBAAkB,CAAC,CAEjD,EAEA,UAAA9D,EAACN,GAAA,CACC,SAAU,GACV,gBAAgB,MAChB,OAAO,UACT,EAEAM,EAACH,GAAA,CACC,QAAQ,QACR,SAAU,GACV,SAAU,GACT,GAAIgB,GAAsB,CAAE,SAAU,EAAG,OAAQ,GAAI,EACtD,KACEA,EACEb,EAAC+D,EAAA,EAAY,EAEb,CAAE,SAAU,GAAI,KAAM,SAAU,EAGpC,cAAeJ,EACjB,EAEA3D,EAACF,GAAA,CACC,SAAU,GACV,SAAU,GACV,KAAM,CAAE,SAAU,GAAI,KAAM,SAAU,EACtC,cAAgBkE,GAAcC,EAAeD,CAAC,EAC9C,OAAQhB,EACR,MAAOG,EACT,EAEAnD,EAACJ,GAAA,CAAQ,QAASI,EAACoC,GAAA,CAAsB,SAAUZ,EAAU,EAAI,EAEhEb,EAAc,MACbX,EAACsK,GAAA,CACC,QAAQ,OACR,KAAK,OACL,OAAQvK,EAAO,KACf,YAAa,EACb,gBAAgB,MAChB,IAAK,GACL,kBAAmB,GACrB,EAGDY,EAAc,UACbX,EAACR,GAAA,CACC,QAAQ,WACR,KAAK,SACL,KAAMO,EAAO,MACb,WAAY,GACZ,kBAAmB,GACnB,OAAQ,CAAC,EAAG,EAAG,EAAG,CAAC,EACnB,WAAYC,EAACQ,GAAA,CAAc,eAAgBD,EAAgB,EAC3D,MAAO4K,EACT,EAGDxK,EAAc,UACbX,EAACsK,GAAA,CACC,QAAQ,WACR,KAAK,WACL,OAAQvK,EAAO,SACf,YAAa,EACb,gBAAgB,MAChB,IAAK,CACH,KAAMA,EAAO,SACb,EAAG,EACH,YAAa,CACf,EACA,kBAAmB,GACrB,GAEJ,EACF,CAEJ,EAEOsL,GAAQH,GLhFP,cAAAlL,OAAA,oBAtDR,IAAMsL,GAAsB,CAAC,CAC3B,KAAA5K,EACA,SAAAc,EACA,cAAAb,EACA,QAAAqC,EACA,OAAAG,EACA,YAAA6H,EACA,WAAAxI,CACF,IAAgC,CAC9B,GAAM,CAACjC,EAAgB4E,CAAiB,EAAIhG,GAAwB,IAAI,EAClE,CAACsD,EAAgBC,CAAiB,EAAIvD,GAAS,CAAC,EAEhDwD,EAAcpD,GAA8B,IAAI,EAEhDqB,EAAYY,cAEZX,EAAqB3B,GAAQ,IAC7B,CAAC0B,GAAa6B,IAAmB,GAAK/B,EAAK,SAAW,EAAU,IAEhD+B,EAAiB,IAAM/B,EAAK,OAE5B,GACnB,CAAC+B,EAAgB/B,EAAK,OAAQE,CAAS,CAAC,EAErCkF,EAAmB7G,GACvB,IAAMkG,EAAkB,IAAI,EAC5B,CAAC,CACH,EAEMU,EAAkB5G,GAAkC6E,GAAS,CAC7DA,GAAO,oBAAsB,MAC/BqB,EAAkB,OAAOrB,EAAM,kBAAkB,CAAC,CAEtD,EAAG,CAAC,CAAC,EAEClB,EAAqB3D,GAAa4D,GAAgC,CAClEF,EAAY,UACdA,EAAY,QAAQ,WAAW,EAC/BA,EAAY,QAAU,MAGpBE,IACFH,EAAkBG,EAAK,WAAW,EAElCF,EAAY,QAAU,IAAI,eAAe,IACvCD,EAAkBG,EAAK,WAAW,CACpC,EACAF,EAAY,QAAQ,QAAQE,CAAI,EAEpC,EAAG,CAAC,CAAC,EAEL,OAAIjC,EAEAZ,GAAC6D,EAAA,CAAa,IAAKjB,EACjB,SAAA5C,GAACqL,GAAA,CACC,KAAM3K,EACN,cAAeC,EACf,QAASqC,EACT,OAAQG,EACR,YAAa6H,EACb,mBAAoBnK,EACpB,eAAgBN,EAChB,YAAasF,EACb,aAAcC,EACd,WAAYtD,EACZ,SAAUhB,EACZ,EACF,EAKFxB,GAAC6D,EAAA,CAAa,IAAKjB,EACjB,SAAA5C,GAACiL,GAAA,CACC,KAAMvK,EACN,cAAeC,EACf,QAASqC,EACT,OAAQG,EACR,YAAa6H,EACb,SAAUxJ,EACV,eAAgBjB,EAChB,YAAasF,EACb,aAAcC,EACd,WAAYtD,EACd,EACF,CAEJ,EAEO0B,GAAQoH,GMnGf,OAAOnH,OAAc,yBACrB,OAAOC,OAAsB,iCAC7B,OAAO9E,OAAW,sBAQhB,OAGM,OAAAU,GAHN,QAAAmB,OAAA,oBAJF,IAAMoK,GAAuB,CAAC,CAC5B,cAAA5K,EACA,cAAA2D,CACF,IACEnD,GAAC7B,GAAA,CAAM,UAAU,MAAM,eAAe,SAAS,SAAS,OAAO,IAAK,EAClE,UAAAU,GAACoE,GAAA,CACC,QACEpE,GAACmE,GAAA,CACC,QAASxD,EAAc,SACvB,SAAU,IAAM2D,EAAc,UAAU,EACxC,GAAI,CAAE,gBAAiB,CAAE,MAAOvE,EAAO,KAAM,CAAE,EACjD,EAEF,MAAM,SACR,EAEAC,GAACoE,GAAA,CACC,QACEpE,GAACmE,GAAA,CACC,QAASxD,EAAc,SACvB,SAAU,IAAM2D,EAAc,UAAU,EACxC,GAAI,CAAE,gBAAiB,CAAE,MAAOvE,EAAO,QAAS,CAAE,EACpD,EAEF,MAAM,WACR,EAEAC,GAACoE,GAAA,CACC,QACEpE,GAACmE,GAAA,CACC,QAASxD,EAAc,KACvB,SAAU,IAAM2D,EAAc,MAAM,EACpC,GAAI,CAAE,gBAAiB,CAAE,MAAOvE,EAAO,IAAK,CAAE,EAChD,EAEF,MAAM,OACR,GACF,EAGKwE,GAAQgH,GC9Cf,OAAOtK,OAAa,wBACpB,OAAO3B,MAAW,sBAClB,OAAO4B,MAAgB,2BAmBf,cAAAlB,EAWA,QAAAmB,MAXA,oBAXR,IAAMqD,GAAU,CAAC,CAAE,KAAAgH,EAAM,UAAA5K,EAAW,eAAA6K,CAAe,IAAoB,CACrE,IAAM9G,EAAWC,EAAc,OAAQ,IAAI,EAE3C,OACEzD,EAAC7B,EAAA,CACC,UAAW,CAAE,GAAI,SAAU,GAAI,KAAM,EACrC,WAAY,CAAE,GAAI,aAAc,GAAI,QAAS,EAC7C,SAAS,OACT,IAAK,EAEJ,UAAAqF,GACC3E,EAACiB,GAAA,CACC,YAAY,aACZ,SAAQ,GACR,GAAI,CACF,YAAa,SACb,GAAI,EACN,EACF,EAGFE,EAAC7B,EAAA,CACC,UAAA6B,EAACD,EAAA,CAAW,QAAQ,QAAQ,MAAM,iBAAiB,yBACpCN,EAAY,MAAQ,UACnC,EAEAZ,EAACkB,EAAA,CAAW,QAAQ,YACjB,SAAAiB,EAAaqJ,GAAM,QAAQ,EAC9B,GACF,EAEAxL,EAACiB,GAAA,CACC,YAAa0D,EAAW,aAAe,WACvC,SAAQ,GACR,GAAI,CAAE,YAAaA,EAAW,QAAU,QAAS,EACnD,EAEAxD,EAAC7B,EAAA,CACC,UAAA6B,EAACD,EAAA,CAAW,QAAQ,QAAQ,MAAM,iBAAiB,0BACnCN,EAAY,MAAQ,UACpC,EAEAZ,EAACkB,EAAA,CAAW,QAAQ,YACjB,SAAAiB,EAAaqJ,GAAM,QAAQ,EAC9B,GACF,EAEAxL,EAACiB,GAAA,CACC,YAAa0D,EAAW,aAAe,WACvC,SAAQ,GACR,GAAI,CAAE,YAAaA,EAAW,QAAU,QAAS,EACnD,EAEAxD,EAAC7B,EAAA,CACC,UAAA6B,EAAC7B,EAAA,CAAM,UAAU,MAAM,WAAW,SAAS,IAAK,EAC9C,UAAA6B,EAACD,EAAA,CAAW,QAAQ,QAAQ,MAAM,iBAAiB,kBAC3CN,EAAY,QAAU,UAC9B,EAEC6K,GACH,EAEAzL,EAACkB,EAAA,CAAW,QAAQ,YAAa,SAAAiB,EAAaqJ,GAAM,IAAI,EAAE,GAC5D,EAEAxL,EAACiB,GAAA,CACC,YAAa0D,EAAW,aAAe,WACvC,SAAQ,GACR,GAAI,CAAE,YAAaA,EAAW,QAAU,QAAS,EACnD,EAEAxD,EAAC7B,EAAA,CACC,UAAAU,EAACkB,EAAA,CAAW,QAAQ,QAAQ,MAAM,iBAAiB,uBAEnD,EAEAlB,EAACkB,EAAA,CAAW,QAAQ,YACjB,SAAAwK,GAASF,GAAM,aAAe,EAAG,CAChC,sBAAuB,EACvB,sBAAuB,CACzB,CAAC,EACH,GACF,EAEAxL,EAACiB,GAAA,CACC,YAAa0D,EAAW,aAAe,WACvC,SAAQ,GACR,GAAI,CAAE,YAAaA,EAAW,QAAU,QAAS,EACnD,EAEAxD,EAAC7B,EAAA,CACC,UAAA6B,EAAC7B,EAAA,CAAM,UAAU,MAAM,IAAK,GAC1B,UAAA6B,EAACD,EAAA,CAAW,QAAQ,QAAQ,MAAM,iBAAiB,oBACzCN,EAAY,MAAQ,UAC9B,EAEAZ,EAAC2L,GAAA,CACC,KAAK,8IACL,MAAO,GACP,MAAK,GACL,GAAI,CAAE,GAAI,GAAK,EACjB,GACF,EAEA3L,EAACkB,EAAA,CAAW,QAAQ,YAAa,SAAAiB,EAAaqJ,GAAM,GAAG,EAAE,GAC3D,GACF,CAEJ,EAEO3G,GAAQL,GRjCX,mBAAAM,GAEI,OAAA9E,EAII,QAAAmB,OANR,oBAvEJ,IAAMyK,GAAiB,CAAC,CACtB,KAAAlL,EACA,KAAA8K,EACA,SAAAhK,EACA,aAAAwD,EACA,eAAAyG,EACA,gBAAAxG,CACF,IAA2B,CACzB,GAAM,CAACtE,EAAeuE,CAAgB,EAAI/F,GAA2B,CACnE,SAAU,GACV,SAAU,GACV,KAAM,EACR,CAAC,EAEK,CAACiG,EAAYC,CAAa,EAAIlG,GAAS,EAAK,EAC5C,CAACmG,EAAeC,CAAgB,EAAIpG,GAAS,EAAE,EAC/C,CAACqG,EAAoBC,CAAqB,EAAItG,GAAS,CAAC,EAExDyB,EAAYY,cAEZwB,EAAU9D,GAAQ,IAAwB,CAC9C,GAAI,CAACwB,EAAK,OAAQ,MAAO,CAAC,EAAG,CAAC,EAE9B,IAAMmL,EAASnL,EAAK,QAAQI,GAAQ,CAClC,OAAOA,EAAK,QAAQ,GAAK,EACzB,OAAOA,EAAK,QAAQ,GAAK,EACzB,OAAOA,EAAK,IAAI,GAAK,CACvB,CAAC,EAEKsC,EAAM,KAAK,IAAI,GAAGyI,CAAM,EAE9B,MAAO,CAAC,EAAGzI,EAAM,EAAIA,EAAM,KAAO,CAAC,CACrC,EAAG,CAAC1C,CAAI,CAAC,EAEHyC,EAASjE,GAAQ,IAAM,CAC3B,GAAM,CAAC,CAAEkE,CAAG,EAAIJ,EAEVK,EAAOD,EAAM,EAEb0I,EAAQ,MAAM,KAAK,CAAE,OAAQ,CAAE,EAAG,CAACxI,GAAGC,KAAM,KAAK,MAAMF,EAAOE,EAAC,CAAC,EAEtE,MAAO,CAAC,GAAG,IAAI,IAAIuI,CAAK,CAAC,CAC3B,EAAG,CAAC9I,CAAO,CAAC,EAEN+I,EAAqB9M,GAAa+M,GAAgC,CACtE9G,EAAiBU,IAAS,CAAE,GAAGA,EAAM,CAACoG,CAAG,EAAG,CAACpG,EAAKoG,CAAG,CAAE,EAAE,CAC3D,EAAG,CAAC,CAAC,EAECtG,EAAoBzG,GACvBgN,GAAmBF,EAAmBE,CAAgC,EACvE,CAACF,CAAkB,CACrB,EAEMhG,EAAiB9G,GACpBqB,GAAkB,CACjB,IAAMQ,EAAOJ,EAAKJ,CAAK,EAClBQ,IACLyE,EAAiBzE,EAAK,KAAK,EAC3B2E,EAAsB3E,EAAK,QAAQ,EACnCuE,EAAc,EAAI,EACpB,EACA,CAAC3E,CAAI,CACP,EAEMsF,EAAoB/G,GAAY,IAAM,CAC1CoG,EAAc,EAAK,CACrB,EAAG,CAAC,CAAC,EAEC2F,EAAc/L,GAAa+E,GAAcC,EAAeD,CAAC,EAAG,CAAC,CAAC,EAEpE,OACE7C,GAAA2D,GAAA,CACE,UAAA3D,GAACgF,EAAA,CACC,UAAAnG,EAACX,GAAA,CAAW,MAAM,2BAAqB,EAEvCW,EAACZ,GAAA,CACC,SAAAY,EAACoG,EAAA,CAAO,QAAS1F,EAAK,SAAW,EAAG,MAAOV,EAACqG,EAAA,EAAW,EACrD,SAAAlF,GAAC7B,GAAA,CAAM,IAAK,EACV,UAAAU,EAACV,GAAA,CAAM,QAAS,CAAE,GAAI,OAAQ,GAAI,OAAQ,EACxC,SAAAU,EAAC6E,GAAA,CACC,KAAM2G,EACN,UAAW5K,EACX,eAAgB6K,EAClB,EACF,EAEAzL,EAACkE,GAAA,CACC,KAAMxD,EACN,SAAUc,EACV,cAAeb,EACf,QAASqC,EACT,OAAQG,EACR,YAAa6H,EACb,WAAYjF,EACd,EAEA/F,EAACuE,GAAA,CACC,cAAe5D,EACf,cAAe+E,EACjB,EAEA1F,EAACV,GAAA,CAAM,QAAS,CAAE,GAAI,QAAS,GAAI,MAAO,EACxC,SAAAU,EAAC6E,GAAA,CACC,KAAM2G,EACN,UAAW5K,EACX,eAAgB6K,EAClB,EACF,GACF,EACF,EACF,GACF,EAECnG,GAAiBL,GAChBjF,EAACiF,EAAA,CACC,KAAMG,EACN,QAASY,EACT,MAAOV,EACP,SAAU9D,EACV,aAAcwD,EACd,WAAYQ,EACd,GAEJ,CAEJ,EAEO0G,GAAQN,GS/If,OAAS,eAAA3M,GAAa,WAAAC,GAAS,YAAAC,OAAgB,QAC/C,OAAOC,OAAiB,4BACxB,OAAOC,OAAgB,2BACvB,OAAOC,OAAW,sBCHlB,OAAS,eAAAL,GAAa,WAAAC,GAAS,UAAAK,GAAQ,YAAAJ,OAAgB,QACvD,OACE,OAAAK,GACA,YAAAC,GACA,iBAAAC,GACA,uBAAAC,GACA,WAAAC,GACA,SAAAC,GACA,SAAAC,OACK,WCgBA,IAAMC,GAAS,CACpB,SAAU,UACV,SAAU,SACZ,ECfI,cAAAC,OAAA,oBAXJ,IAAMC,GAAgB,CAAC,CACrB,EAAAC,EAAI,EACJ,EAAAC,EAAI,EACJ,MAAAC,EAAQ,EACR,OAAAC,EAAS,EACT,MAAAC,EACA,eAAAC,CACF,IACMA,IAAmBD,EAAc,KAGnCN,GAAC,QACC,EAAGE,EAAI,EACP,EAAGC,EACH,MAAOC,EAAQ,GACf,OAAQC,EAAS,EACjB,KAAK,UACL,QAAS,IACT,GAAI,EACN,EAIGG,GAAQP,GCXX,cAAAD,OAAA,oBAZJ,IAAMmM,GAAqB,CAAC,CAC1B,EAAAjM,EAAI,EACJ,EAAAC,EAAI,EACJ,MAAAC,EAAQ,EACR,OAAAC,EAAS,EACT,MAAAC,EACA,eAAAC,EACA,aAAA6L,CACF,IACM7L,IAAmBD,EAAc,KAGnCN,GAAC,QACC,EAAGE,EAAI,EACP,EAAGC,EACH,MAAOiM,EAAehM,EAAQ,EAAI,EAAI,GAAKA,EAAQ,GACnD,OAAQC,EAAS,EACjB,KAAK,UACL,QAAS,IACT,GAAI,EACN,EAIGgM,GAAQF,GC1Bf,OAAOlL,OAAa,wBACpB,OAAO3B,OAAW,sBAClB,OAAO4B,OAAgB,2BAmCjB,cAAAlB,GAgBM,QAAAmB,OAhBN,oBA1BN,IAAMmL,GAAuB,CAAC,CAC5B,OAAAjL,EACA,QAAAC,EACA,MAAAC,EACA,SAAAC,CACF,IAA0B,CACxB,GAAI,CAACH,GAAU,CAACC,GAAS,OAAQ,OAAO,KAExC,IAAMG,EAAUD,YAEZE,EAAiB,OAAOH,CAAK,EAC3BI,EAAQD,EAAe,MAAM,GAAG,EAEtC,GAAIC,EAAM,QAAU,EAAG,CACrB,IAAMC,EAAa,SAASD,EAAM,CAAC,EAAG,EAAE,EAAI,EACtCE,EAAQC,EAAkBF,CAAU,EAEtCH,GAAWE,EAAM,SAAW,EAC9BD,EAAiB,GAAG,SAASC,EAAM,CAAC,EAAG,EAAE,QAAQE,QAAYF,EAAM,CAAC,IAC1DF,IACVC,EAAiB,GAAGG,QAAYF,EAAM,CAAC,KAI3C,OACER,GAACc,EAAA,CAAW,SAAU,CAAE,GAAI,OAAQ,GAAI,GAAI,EAAG,EAAG,EAAG,IAAK,EACxD,UAAAjC,GAACkB,GAAA,CAAW,QAAQ,QAAQ,MAAM,iBAC/B,SAAAQ,EACH,EAEA1B,GAACiB,GAAA,EAAQ,EAETjB,GAACV,GAAA,CACE,SAAAgC,EAAQ,IAAI,CAACY,EAAO5B,IACnBa,GAAC7B,GAAA,CAEC,UAAU,MACV,WAAW,SACX,eAAe,gBACf,IAAK,EACL,cAAa,gBAAgBgB,IAE7B,UAAAa,GAAC7B,GAAA,CAAM,UAAU,MAAM,WAAW,SAAS,IAAK,EAC9C,UAAAU,GAACV,GAAA,CACC,MAAO,EACP,OAAQ,EACR,aAAa,MACb,QAAS4C,EAAM,MACjB,EAEAlC,GAACkB,GAAA,CAAW,QAAQ,QAAQ,OAAM,GAC/B,SAAAgB,EAAM,KACT,GACF,EAEAlC,GAACkB,GAAA,CAAW,QAAQ,QAAS,SAAAiB,EAAaD,EAAM,KAAK,EAAE,IApBlDA,EAAM,IAqBb,CACD,EACH,GACF,CAEJ,EAEOE,GAAQkK,GJ0BP,OAaE,OAAAtM,EAbF,QAAAmB,OAAA,oBA5ER,IAAMoL,GAAgB,CAAC,CACrB,KAAA7L,EACA,SAAAc,EACA,cAAAb,EACA,eAAAJ,EACA,YAAA+B,EACA,aAAAC,CACF,IAAkB,CAChB,IAAM3B,EAAYY,cAEZ,CAACiB,EAAgBC,CAAiB,EAAIvD,GAAS,CAAC,EAChDwD,EAAcpD,GAA8B,IAAI,EAEhDqD,EAAqB3D,GAAa4D,GAAgC,CAClEF,EAAY,UACdA,EAAY,QAAQ,WAAW,EAC/BA,EAAY,QAAU,MAEpBE,IACFH,EAAkBG,EAAK,WAAW,EAClCF,EAAY,QAAU,IAAI,eAAe,IACvCD,EAAkBG,EAAK,WAAW,CACpC,EACAF,EAAY,QAAQ,QAAQE,CAAI,EAEpC,EAAG,CAAC,CAAC,EAEChC,EAAqB3B,GAAQ,IAC7B,CAAC0B,GACD6B,IAAmB,GAAK/B,EAAK,SAAW,EAAU,IAClC+B,EAAiB,IAAM/B,EAAK,OAC5B,GACnB,CAACE,EAAW6B,EAAgB/B,EAAK,MAAM,CAAC,EAErC8L,EAAkBtN,GACtB,IAAMwB,EAAK,KAAKI,GAAQA,EAAK,eAAiB,CAAC,EAC/C,CAACJ,CAAI,CACP,EAEM+L,EAAkBvN,GACtB,IAAMwB,EAAK,KAAKI,GAAQA,EAAK,eAAiB,CAAC,EAC/C,CAACJ,CAAI,CACP,EAEMsC,EAAU9D,GAAQ,IAAwB,CAC9C,GAAI,CAACwB,EAAK,OAAQ,MAAO,CAAC,EAAG,CAAC,EAC9B,IAAMmL,EAASnL,EAAK,QAAQI,GAAQ,CAClCA,EAAK,eACLA,EAAK,cACP,CAAC,EACKsC,EAAM,KAAK,IAAI,GAAGyI,CAAM,EAC9B,MAAO,CAAC,EAAGzI,EAAM,EAAIA,EAAM,KAAO,CAAC,CACrC,EAAG,CAAC1C,CAAI,CAAC,EAEHyC,EAASjE,GAAQ,IAAM,CAC3B,GAAM,CAAC,CAAEkE,CAAG,EAAIJ,EACVK,EAAOD,EAAM,EACnB,MAAO,CACL,GAAG,IAAI,IAAI,MAAM,KAAK,CAAE,OAAQ,CAAE,EAAG,CAACE,EAAGC,IAAM,KAAK,MAAMF,EAAOE,CAAC,CAAC,CAAC,CACtE,CACF,EAAG,CAACP,CAAO,CAAC,EAENU,EAAgBxE,GACpB,IAAO0B,EAAY+C,EAAmBC,EACtC,CAAChD,CAAS,CACZ,EAEMwL,EACJzL,EAAc,UACd6L,GACA7L,EAAc,UACd8L,EAEF,OACEzM,EAAC6D,EAAA,CAAa,IAAKjB,EACjB,SAAA5C,EAACL,GAAA,CAAoB,MAAM,OAAO,OAAQ,IACxC,SAAAwB,GAAC1B,GAAA,CACC,KAAMiB,EACN,OAAQ,CACN,IAAK,GACL,MAAO,GACP,OAAQG,EAAqB,IAAM,EACnC,KAAM,EACR,EACA,eAAe,MACf,OAAQ,EACR,YAAayB,EACb,aAAcC,EAEd,UAAAvC,EAACN,GAAA,CACC,SAAU,GACV,gBAAgB,MAChB,OAAO,UACT,EAEAM,EAACH,GAAA,CACC,QAAQ,QACR,SAAU,GACV,SAAU,GACT,GAAIgB,GAAsB,CAAE,SAAU,EAAG,OAAQ,GAAI,EACtD,KACEA,EACEb,EAAC+D,EAAA,EAAY,EAEb,CAAE,SAAU,GAAI,KAAM,SAAU,EAGpC,cAAeL,EACjB,EAEA1D,EAACF,GAAA,CACC,SAAU,GACV,SAAU,GACV,KAAM,CAAE,SAAU,GAAI,KAAM,SAAU,EACtC,cAAgB,GAAcmE,EAAe,CAAC,EAC9C,OAAQjB,EACR,MAAOG,EACT,EAEAnD,EAACJ,GAAA,CACC,QAASI,EAACoC,GAAA,CAAqB,SAAUZ,EAAU,EACnD,OAAQ,GACV,EAECb,EAAc,UAAY6L,GACzBxM,EAACR,GAAA,CACC,QAAQ,iBACR,KAAK,YACL,KAAMO,GAAO,SACb,WAAY,GACZ,kBAAmB,GACnB,OAAQ,CAAC,EAAG,EAAG,EAAG,CAAC,EACnB,WACEC,EAACqM,GAAA,CACC,eAAgB9L,EAChB,aAAc6L,EAChB,EAEJ,EAGDzL,EAAc,UAAY8L,GACzBzM,EAACR,GAAA,CACC,QAAQ,iBACR,KAAK,WACL,KAAMO,GAAO,SACb,WAAY,GACZ,kBAAmB,GACnB,OAAQ,CAAC,EAAG,EAAG,EAAG,CAAC,EAClB,GAAI,CAACY,EAAc,UAAY,CAC9B,WAAYX,EAACQ,GAAA,CAAc,eAAgBD,EAAgB,CAC7D,EACF,GAEJ,EACF,EACF,CAEJ,EAEO2D,GAAQqI,GKxLf,OAAOpI,OAAc,yBACrB,OAAOC,OAAsB,iCAC7B,OAAO9E,OAAW,sBAKhB,OAGM,OAAAU,GAHN,QAAAmB,OAAA,oBADF,IAAMuL,GAAsB,CAAC,CAAE,cAAA/L,EAAe,cAAA2D,CAAc,IAC1DnD,GAAC7B,GAAA,CAAM,UAAU,MAAM,eAAe,SAAS,SAAS,OAAO,IAAK,EAClE,UAAAU,GAACoE,GAAA,CACC,QACEpE,GAACmE,GAAA,CACC,QAASxD,EAAc,SACvB,SAAU,IAAM2D,EAAc,UAAU,EACxC,GAAI,CAAE,gBAAiB,CAAE,MAAOvE,GAAO,QAAS,CAAE,EACpD,EAEF,MAAM,YACR,EAEAC,GAACoE,GAAA,CACC,QACEpE,GAACmE,GAAA,CACC,QAASxD,EAAc,SACvB,SAAU,IAAM2D,EAAc,UAAU,EACxC,GAAI,CAAE,gBAAiB,CAAE,MAAOvE,GAAO,QAAS,CAAE,EACpD,EAEF,MAAM,WACR,GACF,EAGKwE,GAAQmI,GChCf,OAAOzL,OAAa,wBACpB,OAAO3B,OAAW,sBAClB,OAAO4B,OAAgB,2BAuBf,cAAAlB,EAUF,QAAAmB,OAVE,oBAhBR,IAAMwL,GAAuB,CAAC,CAC5B,cAAAC,EACA,cAAAC,EACA,WAAAC,EACA,UAAAlM,CACF,IAAoB,CAClB,IAAM+D,EAAWC,EAAc,OAAQ,IAAI,EAE3C,OACEzD,GAAC7B,GAAA,CACC,UAAW,CAAE,GAAI,SAAU,GAAI,KAAM,EACrC,WAAY,CAAE,GAAI,aAAc,GAAI,QAAS,EAC7C,SAAS,OACT,IAAK,EAEJ,UAAAqF,GACC3E,EAACiB,GAAA,CACC,YAAY,aACZ,SAAQ,GACR,GAAI,CACF,YAAa,SACb,GAAI,EACN,EACF,EAGFE,GAAC7B,GAAA,CACC,UAAAU,EAACkB,GAAA,CAAW,QAAQ,QAAQ,MAAM,iBAC/B,SAAAN,EAAY,wBAA0B,2BACzC,EAEAZ,EAACkB,GAAA,CAAW,QAAQ,YACjB,SAAAiB,EAAayK,CAAa,EAC7B,GACF,EAEA5M,EAACiB,GAAA,CACC,YAAa0D,EAAW,aAAe,WACvC,SAAQ,GACR,GAAI,CAAE,YAAaA,EAAW,QAAU,QAAS,EACnD,EAEAxD,GAAC7B,GAAA,CACC,UAAAU,EAACkB,GAAA,CAAW,QAAQ,QAAQ,MAAM,iBAC/B,SAAAN,EAAY,yBAA2B,4BAC1C,EAEAZ,EAACkB,GAAA,CAAW,QAAQ,YACjB,SAAAiB,EAAa0K,CAAa,EAC7B,GACF,EAEA7M,EAACiB,GAAA,CACC,YAAa0D,EAAW,aAAe,WACvC,SAAQ,GACR,GAAI,CAAE,YAAaA,EAAW,QAAU,QAAS,EACnD,EAEAxD,GAAC7B,GAAA,CACC,UAAAU,EAACkB,GAAA,CAAW,QAAQ,QAAQ,MAAM,iBAAiB,uBAEnD,EAEAC,GAACD,GAAA,CAAW,QAAQ,YAAa,UAAA4L,EAAW,KAAC,GAC/C,GACF,CAEJ,EAEOjI,GAAQ8H,GPpBT,cAAA3M,EAII,QAAAmB,OAJJ,oBA1CN,IAAM4L,GAAgB,CAAC,CAAE,KAAArM,EAAM,SAAAc,CAAS,IAA0B,CAChE,IAAMZ,EAAYY,cAEZ,CAACb,EAAeuE,CAAgB,EAAI/F,GAAwB,CAChE,SAAU,GACV,SAAU,EACZ,CAAC,EACK,CAACoB,EAAgB4E,CAAiB,EAAIhG,GAAwB,IAAI,EAElEuG,EAAoBzG,GAAa0G,GAA+B,CACpET,EAAiBU,IAAS,CAAE,GAAGA,EAAM,CAACD,CAAK,EAAG,CAACC,EAAKD,CAAK,CAAE,EAAE,CAC/D,EAAG,CAAC,CAAC,EAECE,EAAkB5G,GAAkC6E,GAAS,CAC7DA,GAAO,oBAAsB,MAC/BqB,EAAkB,OAAOrB,EAAM,kBAAkB,CAAC,CAEtD,EAAG,CAAC,CAAC,EAECgC,EAAmB7G,GACvB,IAAMkG,EAAkB,IAAI,EAC5B,CAAC,CACH,EAEMc,EAAS/G,GAAQ,IAAM,CAC3B,IAAM2N,EAAgBnM,EAAK,OACzB,CAACwF,EAAKpF,IAASoF,GAAOpF,EAAK,gBAAkB,GAC7C,CACF,EAEM8L,EAAgBlM,EAAK,OACzB,CAACwF,EAAKpF,IAASoF,GAAOpF,EAAK,gBAAkB,GAC7C,CACF,EAEMgM,EACJF,EAAgB,EAAI,KAAK,MAAOC,EAAgBD,EAAiB,GAAG,EAAI,EAC1E,MAAO,CAAE,cAAAC,EAAe,cAAAD,EAAe,WAAAE,CAAW,CACpD,EAAG,CAACpM,CAAI,CAAC,EAET,OACES,GAACgF,EAAA,CACC,UAAAnG,EAACX,GAAA,CAAW,MAAM,6CAAuC,EAEzDW,EAACZ,GAAA,CACC,SAAAY,EAACoG,EAAA,CAAO,QAAS1F,EAAK,SAAW,EAAG,MAAOV,EAACqG,EAAA,EAAW,EACrD,SAAAlF,GAAC7B,GAAA,CAAM,IAAK,EACV,UAAAU,EAACV,GAAA,CAAM,QAAS,CAAE,GAAI,OAAQ,GAAI,OAAQ,EACxC,SAAAU,EAAC6E,GAAA,CACC,cAAeoB,EAAO,cACtB,cAAeA,EAAO,cACtB,WAAYA,EAAO,WACnB,UAAWrF,EACb,EACF,EAEAZ,EAACkE,GAAA,CACC,KAAMxD,EACN,SAAUc,EACV,cAAeb,EACf,eAAgBJ,EAChB,YAAasF,EACb,aAAcC,EAChB,EAEA9F,EAACuE,GAAA,CACC,cAAe5D,EACf,cAAe+E,EACjB,EAEA1F,EAACV,GAAA,CAAM,QAAS,CAAE,GAAI,QAAS,GAAI,MAAO,EACxC,SAAAU,EAAC6E,GAAA,CACC,cAAeoB,EAAO,cACtB,cAAeA,EAAO,cACtB,WAAYA,EAAO,WACnB,UAAWrF,EACb,EACF,GACF,EACF,EACF,GACF,CAEJ,EAEOoM,GAAQD","sourcesContent":["import { useCallback, useMemo, useState } from 'react';\nimport CardContent from '@mui/material/CardContent';\nimport CardHeader from '@mui/material/CardHeader';\nimport Stack from '@mui/material/Stack';\nimport { CategoricalChartFunc } from 'recharts/types/chart/types';\n\nimport { ChartCard } from 'components/Analytics/ChartStyles';\nimport EmptyState from 'components/Analytics/EmptyState';\nimport Result from 'components/Result';\nimport { ViewMode } from 'types/analytics';\n\nimport Chart from './Chart';\nimport Legend from './Legend';\nimport { OrdersByTypeProps, VisibleSeries } from './props';\nimport Summary from './Summary';\n\nconst OrdersByType = ({\n data,\n viewMode,\n selectedYear,\n DetailComponent,\n}: OrdersByTypeProps) => {\n const isMonthly = viewMode === ViewMode.MONTHLY;\n\n const [visibleSeries, setVisibleSeries] = useState<VisibleSeries>({\n orders: true,\n quotations: true,\n });\n\n const [activeBarIndex, setActiveBarIndex] = useState<number | null>(null);\n\n const [detailOpen, setDetailOpen] = useState(false);\n const [selectedLabel, setSelectedLabel] = useState('');\n const [selectedTotalValue, setSelectedTotalValue] = useState(0);\n\n const handleToggleSerie = useCallback((serie: keyof VisibleSeries) => {\n setVisibleSeries(prev => ({ ...prev, [serie]: !prev[serie] }));\n }, []);\n\n const handleMouseMove = useCallback<CategoricalChartFunc>(state => {\n if (state?.activeTooltipIndex != null) {\n setActiveBarIndex(Number(state.activeTooltipIndex));\n }\n }, []);\n\n const handleMouseLeave = useCallback<CategoricalChartFunc>(\n () => setActiveBarIndex(null),\n [],\n );\n\n const handleBarClick = useCallback(\n (index: number) => {\n const item = data[index];\n if (!item) return;\n setSelectedLabel(item.label);\n setSelectedTotalValue(item.order_value);\n setDetailOpen(true);\n },\n [data],\n );\n\n const handleDetailClose = useCallback(() => {\n setDetailOpen(false);\n }, []);\n\n const totals = useMemo(() => {\n const ordersTotal = data.reduce(\n (acc, item) => acc + (item.order_count ?? 0),\n 0,\n );\n const quotationsTotal = data.reduce(\n (acc, item) => acc + (item.quotation_count ?? 0),\n 0,\n );\n return { ordersTotal, quotationsTotal };\n }, [data]);\n\n return (\n <>\n <ChartCard>\n <CardHeader title=\"Quantidade de pedidos por tipo\" />\n\n <CardContent>\n <Result isEmpty={data.length === 0} empty={<EmptyState />}>\n <Stack gap={3}>\n <Stack display={{ xs: 'none', md: 'block' }}>\n <Summary\n isMonthly={isMonthly}\n ordersTotal={totals.ordersTotal}\n quotationsTotal={totals.quotationsTotal}\n />\n </Stack>\n\n <Chart\n data={data}\n viewMode={viewMode}\n visibleSeries={visibleSeries}\n activeBarIndex={activeBarIndex}\n onMouseMove={handleMouseMove}\n onMouseLeave={handleMouseLeave}\n onBarClick={handleBarClick}\n />\n\n <Legend\n visibleSeries={visibleSeries}\n onToggleSerie={handleToggleSerie}\n />\n\n <Stack display={{ xs: 'block', md: 'none' }}>\n <Summary\n isMonthly={isMonthly}\n ordersTotal={totals.ordersTotal}\n quotationsTotal={totals.quotationsTotal}\n />\n </Stack>\n </Stack>\n </Result>\n </CardContent>\n </ChartCard>\n\n {selectedLabel && DetailComponent && (\n <DetailComponent\n open={detailOpen}\n onClose={handleDetailClose}\n label={selectedLabel}\n viewMode={viewMode}\n selectedYear={selectedYear}\n totalValue={selectedTotalValue}\n />\n )}\n </>\n );\n};\n\nexport default OrdersByType;\n","import { ReactElement, useCallback, useMemo, useRef, useState } from 'react';\nimport {\n Bar,\n BarChart,\n CartesianGrid,\n ResponsiveContainer,\n Tooltip,\n XAxis,\n YAxis,\n} from 'recharts';\n\nimport { ChartWrapper } from 'components/Analytics/ChartStyles';\nimport RotatedTick from 'components/Analytics/RotatedTick';\nimport { ViewMode } from 'types/analytics';\nimport { formatDayLabel, formatMonthLabel } from 'utils/chart';\nimport { fShortenNumber } from 'utils/formatNumber';\n\nimport { COLORS } from '../props';\n\nimport BarBackground from './BarBackground';\nimport BarLabel from './BarLabel';\nimport { ChartProps } from './props';\nimport OrdersByTypeTooltip from './Tooltip';\n\nconst Chart = ({\n data,\n viewMode,\n visibleSeries,\n activeBarIndex,\n onMouseMove,\n onMouseLeave,\n onBarClick,\n}: ChartProps) => {\n const isMonthly = viewMode === ViewMode.MONTHLY;\n const [containerWidth, setContainerWidth] = useState(0);\n const observerRef = useRef<ResizeObserver | null>(null);\n\n const wrapperRefCallback = useCallback((node: HTMLDivElement | null) => {\n if (observerRef.current) {\n observerRef.current.disconnect();\n observerRef.current = null;\n }\n if (node) {\n setContainerWidth(node.clientWidth);\n observerRef.current = new ResizeObserver(() =>\n setContainerWidth(node.clientWidth),\n );\n observerRef.current.observe(node);\n }\n }, []);\n\n const shouldRotateLabels = useMemo(() => {\n if (!isMonthly) return false;\n if (containerWidth === 0 || data.length === 0) return false;\n const slotPerBar = (containerWidth - 60) / data.length;\n return slotPerBar < 80;\n }, [isMonthly, containerWidth, data.length]);\n\n const hasOrderData = useMemo(\n () => data.some(d => (d.order_count ?? 0) > 0),\n [data],\n );\n\n const hasQuotationData = useMemo(\n () => data.some(d => (d.quotation_count ?? 0) > 0),\n [data],\n );\n\n const yDomain = useMemo((): [number, number] => {\n if (!data.length) return [0, 1];\n const maxTotal = Math.max(\n ...data.map(d => (d.order_count ?? 0) + (d.quotation_count ?? 0)),\n );\n return [0, maxTotal > 0 ? maxTotal * 1.15 : 1];\n }, [data]);\n\n const yTicks = useMemo(() => {\n const [, max] = yDomain;\n const step = max / 6;\n return [\n ...new Set(Array.from({ length: 7 }, (_, i) => Math.round(step * i))),\n ];\n }, [yDomain]);\n\n const quotationsOnTop = visibleSeries.quotations && hasQuotationData;\n\n const ordersIsTop = visibleSeries.orders && hasOrderData && !quotationsOnTop;\n\n const tickFormatter = useMemo(\n () => (isMonthly ? formatMonthLabel : formatDayLabel),\n [isMonthly],\n );\n\n return (\n <ChartWrapper ref={wrapperRefCallback}>\n <ResponsiveContainer width=\"100%\" height={250}>\n <BarChart\n data={data}\n margin={{\n top: 20,\n right: 10,\n bottom: shouldRotateLabels ? -90 : 0,\n left: 20,\n }}\n barCategoryGap=\"20%\"\n style={{ cursor: 'pointer' }}\n onMouseMove={onMouseMove}\n onMouseLeave={onMouseLeave}\n onClick={state => {\n if (state?.activeTooltipIndex != null) {\n onBarClick?.(Number(state.activeTooltipIndex));\n }\n }}\n >\n <CartesianGrid\n vertical={false}\n strokeDasharray=\"3 3\"\n stroke=\"#F4F6F8\"\n />\n\n <XAxis\n dataKey=\"label\"\n axisLine={false}\n tickLine={false}\n {...(shouldRotateLabels && { interval: 0, height: 120 })}\n tick={\n shouldRotateLabels ? (\n <RotatedTick />\n ) : (\n { fontSize: 12, fill: '#637381' }\n )\n }\n tickFormatter={tickFormatter}\n />\n\n <YAxis\n axisLine={false}\n tickLine={false}\n tick={{ fontSize: 12, fill: '#637381' }}\n tickFormatter={(v: number) => fShortenNumber(v)}\n domain={yDomain}\n ticks={yTicks}\n />\n\n <Tooltip\n content={<OrdersByTypeTooltip viewMode={viewMode} />}\n cursor={false}\n />\n\n <Bar\n dataKey=\"order_count\"\n name=\"Vendas\"\n fill={COLORS.orders}\n stackId=\"orders\"\n maxBarSize={48}\n isAnimationActive={false}\n hide={!visibleSeries.orders}\n background={<BarBackground activeBarIndex={activeBarIndex} />}\n radius={ordersIsTop ? [4, 4, 0, 0] : undefined}\n {...(ordersIsTop && {\n label: {\n position: 'top' as const,\n fontSize: 11,\n fill: '#212B36',\n content: (\n <BarLabel\n data={data}\n visibleSeries={visibleSeries}\n isMonthly={isMonthly}\n shouldRotateLabels={shouldRotateLabels}\n />\n ) as unknown as ReactElement,\n },\n })}\n />\n\n <Bar\n dataKey=\"quotation_count\"\n name=\"Orçamentos\"\n fill={COLORS.quotations}\n stackId=\"orders\"\n maxBarSize={48}\n isAnimationActive={false}\n hide={!visibleSeries.quotations}\n radius={quotationsOnTop ? [4, 4, 0, 0] : undefined}\n {...(!visibleSeries.orders && {\n background: <BarBackground activeBarIndex={activeBarIndex} />,\n })}\n {...(quotationsOnTop && {\n label: {\n position: 'top' as const,\n fontSize: 11,\n fill: '#212B36',\n content: (\n <BarLabel\n data={data}\n visibleSeries={visibleSeries}\n isMonthly={isMonthly}\n shouldRotateLabels={shouldRotateLabels}\n />\n ) as unknown as ReactElement,\n },\n })}\n />\n </BarChart>\n </ResponsiveContainer>\n </ChartWrapper>\n );\n};\n\nexport default Chart;\n","import { ComponentType } from 'react';\n\nimport { ViewMode } from 'types/analytics';\nimport {\n OverviewDetailBaseProps,\n QuotationDashboardSeriesItem,\n} from 'types/overviewAnalytics';\n\nexport interface OrdersByTypeProps {\n data: QuotationDashboardSeriesItem[];\n viewMode: ViewMode;\n selectedYear: number;\n DetailComponent?: ComponentType<OverviewDetailBaseProps>;\n}\n\nexport interface VisibleSeries {\n orders: boolean;\n quotations: boolean;\n}\n\nexport interface SummaryProps {\n isMonthly: boolean;\n ordersTotal: number;\n quotationsTotal: number;\n}\n\nexport interface LegendProps {\n visibleSeries: VisibleSeries;\n onToggleSerie: (serie: keyof VisibleSeries) => void;\n}\n\nexport const COLORS = {\n orders: '#22C55E',\n quotations: '#0EA5E9',\n} as const;\n","import { BarBackgroundComponentProps } from './props';\n\nconst BarBackground = ({\n x = 0,\n y = 0,\n width = 0,\n height = 0,\n index,\n activeBarIndex,\n}: BarBackgroundComponentProps) => {\n if (activeBarIndex !== index) return null;\n\n return (\n <rect\n x={x - 6}\n y={y}\n width={width + 12}\n height={height + 6}\n fill=\"#919EAB\"\n opacity={0.16}\n rx={6}\n />\n );\n};\n\nexport default BarBackground;\n","import { BarLabelProps } from './props';\n\nconst BarLabel = ({\n x = 0,\n y = 0,\n width = 0,\n index = 0,\n data,\n visibleSeries,\n isMonthly,\n shouldRotateLabels,\n}: BarLabelProps) => {\n if (!isMonthly || shouldRotateLabels) return null;\n\n const item = data[index];\n if (!item) return null;\n\n let total = 0;\n if (visibleSeries.orders) total += item.order_count ?? 0;\n if (visibleSeries.quotations) total += item.quotation_count ?? 0;\n if (!total) return null;\n\n return (\n <text\n x={x + width / 2}\n y={y - 8}\n textAnchor=\"middle\"\n fontSize={11}\n fill=\"#212B36\"\n >\n {total}\n </text>\n );\n};\n\nexport default BarLabel;\n","import Divider from '@mui/material/Divider';\nimport Stack from '@mui/material/Stack';\nimport Typography from '@mui/material/Typography';\n\nimport SimpleCard from 'components/SimpleCard';\nimport { ViewMode } from 'types/analytics';\nimport { MONTH_FULL_LABELS } from 'utils/chart';\nimport { fCurrencyBRL } from 'utils/formatNumber';\n\nimport { CustomTooltipProps } from './props';\n\nconst OrdersByTypeTooltip = ({\n active,\n payload,\n label,\n viewMode,\n}: CustomTooltipProps) => {\n if (!active || !payload?.length) return null;\n\n const isDaily = viewMode === ViewMode.DAILY;\n\n let formattedLabel = String(label);\n const parts = formattedLabel.split('-');\n\n if (parts.length >= 2) {\n const monthIndex = parseInt(parts[1], 10) - 1;\n const month = MONTH_FULL_LABELS[monthIndex];\n\n if (isDaily && parts.length === 3) {\n formattedLabel = `${parseInt(parts[2], 10)} de ${month} de ${parts[0]}`;\n } else if (!isDaily) {\n formattedLabel = `${month} de ${parts[0]}`;\n }\n }\n\n const data = payload[0].payload;\n\n const items = [\n {\n name: 'Vendas',\n count: data.order_count ?? 0,\n value: data.order_value ?? 0,\n color: payload.find(p => p.dataKey === 'order_count')?.color ?? '#22C55E',\n },\n {\n name: 'Orçamentos',\n count: data.quotation_count ?? 0,\n value: data.quotation_value ?? 0,\n color:\n payload.find(p => p.dataKey === 'quotation_count')?.color ?? '#0EA5E9',\n },\n ];\n\n return (\n <SimpleCard minWidth={{ xs: 'auto', sm: 300 }} p={1} gap={1}>\n <Typography variant=\"body2\" color=\"text.secondary\">\n {formattedLabel}\n </Typography>\n\n <Divider />\n\n <Stack>\n {items.map((entry, index) => (\n <Stack\n key={entry.name}\n direction=\"row\"\n alignItems=\"center\"\n justifyContent=\"space-between\"\n gap={2}\n data-testid={`tooltip-item-${index}`}\n >\n <Stack direction=\"row\" alignItems=\"center\" gap={1}>\n <Stack\n width={6}\n height={6}\n borderRadius=\"50%\"\n bgcolor={entry.color}\n />\n\n <Typography variant=\"body2\" noWrap>\n {entry.name}\n </Typography>\n </Stack>\n\n <Typography variant=\"body2\" color=\"text.disabled\" noWrap>\n {entry.count} {entry.count === 1 ? 'pedido' : 'pedidos'} \n <Typography component=\"span\" variant=\"body2\" color=\"text.primary\">\n {fCurrencyBRL(entry.value)}\n </Typography>\n </Typography>\n </Stack>\n ))}\n </Stack>\n </SimpleCard>\n );\n};\n\nexport default OrdersByTypeTooltip;\n","import Checkbox from '@mui/material/Checkbox';\nimport FormControlLabel from '@mui/material/FormControlLabel';\nimport Stack from '@mui/material/Stack';\n\nimport { COLORS, LegendProps } from './props';\n\nconst OrdersByTypeLegend = ({ visibleSeries, onToggleSerie }: LegendProps) => (\n <Stack direction=\"row\" justifyContent=\"center\" flexWrap=\"wrap\" gap={1}>\n <FormControlLabel\n control={\n <Checkbox\n checked={visibleSeries.orders}\n onChange={() => onToggleSerie('orders')}\n sx={{ '&.Mui-checked': { color: COLORS.orders } }}\n />\n }\n label=\"Vendas\"\n />\n\n <FormControlLabel\n control={\n <Checkbox\n checked={visibleSeries.quotations}\n onChange={() => onToggleSerie('quotations')}\n sx={{ '&.Mui-checked': { color: COLORS.quotations } }}\n />\n }\n label=\"Orçamentos\"\n />\n </Stack>\n);\n\nexport default OrdersByTypeLegend;\n","import Divider from '@mui/material/Divider';\nimport Stack from '@mui/material/Stack';\nimport Typography from '@mui/material/Typography';\n\nimport useResponsive from 'hooks/useResponsive';\n\nimport { SummaryProps } from './props';\n\nconst Summary = ({ ordersTotal, quotationsTotal, isMonthly }: SummaryProps) => {\n const isMobile = useResponsive('down', 'md');\n\n return (\n <Stack\n direction={{ xs: 'column', md: 'row' }}\n alignItems={{ xs: 'flex-start', md: 'center' }}\n flexWrap=\"wrap\"\n gap={3}\n >\n {isMobile && (\n <Divider\n orientation=\"horizontal\"\n flexItem\n sx={{\n borderStyle: 'dashed',\n mx: -3,\n }}\n />\n )}\n\n <Stack>\n <Typography variant=\"body2\" color=\"text.secondary\">\n {isMonthly ? 'Vendas no ano' : 'Vendas no mês'}\n </Typography>\n\n <Typography variant=\"subtitle2\">{ordersTotal} vendas</Typography>\n </Stack>\n\n <Divider\n orientation={isMobile ? 'horizontal' : 'vertical'}\n flexItem\n sx={{ borderStyle: isMobile ? 'solid' : 'dashed' }}\n />\n\n <Stack>\n <Typography variant=\"body2\" color=\"text.secondary\">\n {isMonthly ? 'Orçamentos no ano' : 'Orçamentos no mês'}\n </Typography>\n\n <Typography variant=\"subtitle2\">\n {quotationsTotal} orçamentos\n </Typography>\n </Stack>\n </Stack>\n );\n};\n\nexport default Summary;\n","import Divider from '@mui/material/Divider';\nimport Link from '@mui/material/Link';\nimport Stack from '@mui/material/Stack';\nimport Typography from '@mui/material/Typography';\nimport { GridRenderCellParams } from '@mui/x-data-grid-premium';\n\nimport DataView from 'components/DataView';\nimport Drawer from 'components/Drawer';\nimport Modal from 'components/Modal';\nimport SearchInput from 'components/SearchInput';\nimport useResponsive from 'hooks/useResponsive';\nimport { OverviewDetailOrder } from 'types/overviewAnalytics';\nimport { fCurrencyBRL } from 'utils/formatNumber';\nimport { fDate } from 'utils/formatTime';\n\nimport Header from './Header';\nimport { OverviewDetailProps } from './props';\nimport { MobileItemContainer, StyledDivider } from './styles';\n\nconst getOrderId = (order: OverviewDetailOrder) => (\n <Stack justifyContent=\"center\" height={1}>\n <Typography variant=\"body2\" color=\"text.primary\">\n {order.id}\n </Typography>\n </Stack>\n);\n\nconst getPartnerName = (\n order: OverviewDetailOrder,\n buildPartnerLink?: (partnerId: string) => string,\n) => (\n <Stack justifyContent=\"center\" height={1}>\n {order?.partner?.id && buildPartnerLink ? (\n <Link\n component=\"a\"\n href={buildPartnerLink(order.partner.id)}\n target=\"_blank\"\n rel=\"noopener noreferrer\"\n variant=\"subtitle2\"\n sx={{ textDecoration: 'underline' }}\n noWrap\n >\n {order.partner?.name || '-'}\n </Link>\n ) : (\n <Typography variant=\"body2\" color=\"text.primary\" noWrap>\n {order.partner?.name || '-'}\n </Typography>\n )}\n </Stack>\n);\n\nconst getOrderValue = (order: OverviewDetailOrder) => (\n <Stack justifyContent=\"center\" height={1}>\n <Typography variant=\"body2\" color=\"text.primary\">\n {fCurrencyBRL(order.total_value)}\n </Typography>\n </Stack>\n);\n\nconst getOrderDate = (order: OverviewDetailOrder) => (\n <Stack justifyContent=\"center\" height={1}>\n {order.negotiation_date ? (\n <Typography variant=\"body2\" color=\"text.primary\">\n {fDate(order.negotiation_date, 'DD/MM/YYYY')}\n </Typography>\n ) : (\n '-'\n )}\n </Stack>\n);\n\nconst getOrderStatus = (order: OverviewDetailOrder) => (\n <Stack justifyContent=\"center\" height={1}>\n {order.status || '-'}\n </Stack>\n);\n\nconst getDefaultMobileRender = (order: OverviewDetailOrder) => (\n <MobileItemContainer key={order.id}>\n <Stack gap={1}>\n <Stack>\n <Typography variant=\"body2\" color=\"text.secondary\">\n Pedido\n </Typography>\n <Typography variant=\"subtitle2\" color=\"text.primary\">\n {order.id}\n </Typography>\n </Stack>\n\n <Stack>\n <Typography variant=\"body2\" color=\"text.secondary\">\n Cliente\n </Typography>\n <Typography variant=\"subtitle2\" color=\"primary.main\">\n {order.partner?.name || '-'}\n </Typography>\n </Stack>\n\n <Stack direction=\"row\" alignItems=\"center\" gap={1}>\n <Stack flex={1} overflow=\"hidden\">\n <Typography variant=\"body2\" color=\"text.secondary\" noWrap>\n Valor do pedido\n </Typography>\n <Typography variant=\"subtitle2\" color=\"text.primary\" noWrap>\n {fCurrencyBRL(order.total_value)}\n </Typography>\n </Stack>\n\n <Divider\n orientation=\"vertical\"\n flexItem\n sx={{ borderStyle: 'dashed', mx: 3 }}\n />\n\n <Stack flex={1} overflow=\"hidden\">\n <Typography variant=\"body2\" color=\"text.secondary\" noWrap>\n Data\n </Typography>\n <Typography variant=\"subtitle2\" color=\"text.primary\" noWrap>\n {order.negotiation_date\n ? fDate(order.negotiation_date, 'DD/MM/YYYY')\n : '-'}\n </Typography>\n </Stack>\n </Stack>\n\n <Stack gap={0.5}>\n <Typography variant=\"body2\" color=\"text.secondary\">\n Status\n </Typography>\n <Typography variant=\"subtitle2\" color=\"text.primary\">\n {order.status || '-'}\n </Typography>\n </Stack>\n </Stack>\n </MobileItemContainer>\n);\n\nconst OverviewDetail = ({\n open,\n onClose,\n title,\n viewMode,\n selectedYear,\n totalValue,\n periodLabel,\n suffix,\n rows,\n total,\n isLoading,\n isFetching,\n page,\n perPage,\n onSearch,\n onPaginationChange,\n buildPartnerLink,\n mobileItemSlot,\n}: OverviewDetailProps) => {\n const isMobile = useResponsive('down', 'sm');\n\n const content = (\n <Stack gap={3}>\n <Stack\n direction={{ xs: 'column', sm: 'row' }}\n justifyContent=\"space-between\"\n gap={2}\n >\n <Stack\n minWidth={0}\n direction=\"row\"\n alignItems=\"center\"\n gap={3}\n flexWrap=\"wrap\"\n >\n <Stack>\n <Typography variant=\"body2\" color=\"text.secondary\">\n Vendas {suffix}\n </Typography>\n\n <Typography variant=\"subtitle2\" color=\"text.primary\">\n {fCurrencyBRL(totalValue)}\n </Typography>\n </Stack>\n\n <StyledDivider orientation=\"vertical\" flexItem />\n\n <Stack>\n <Typography variant=\"body2\" color=\"text.secondary\">\n Qtd. de pedidos {suffix}\n </Typography>\n\n <Typography variant=\"subtitle2\" color=\"text.primary\">\n {total}\n </Typography>\n </Stack>\n </Stack>\n\n <SearchInput\n size=\"small\"\n placeholder=\"Buscar\"\n onSearch={onSearch}\n trigger=\"change\"\n iconPosition=\"start\"\n sx={{ minWidth: 200 }}\n />\n </Stack>\n\n <DataView\n title=\"Pedidos\"\n header={<></>}\n headerProps={{ p: 0 }}\n columns={[\n {\n field: 'external_id',\n headerName: 'Pedido',\n flex: 1,\n renderCell: ({ row }: GridRenderCellParams) => getOrderId(row),\n },\n {\n field: 'partner_name',\n headerName: 'Cliente',\n flex: 1,\n renderCell: ({ row }: GridRenderCellParams) =>\n getPartnerName(row, buildPartnerLink),\n },\n {\n field: 'total_value',\n headerName: 'Valor do pedido',\n flex: 1,\n renderCell: ({ row }: GridRenderCellParams) => getOrderValue(row),\n },\n {\n field: 'created_at',\n headerName: 'Data',\n flex: 1,\n renderCell: ({ row }: GridRenderCellParams) => getOrderDate(row),\n },\n {\n field: 'last_status',\n headerName: 'Status',\n flex: 1,\n renderCell: ({ row }: GridRenderCellParams) => getOrderStatus(row),\n },\n ]}\n rows={rows}\n rowCount={total}\n mobileRender={(data: OverviewDetailOrder) =>\n mobileItemSlot ? mobileItemSlot(data) : getDefaultMobileRender(data)\n }\n loading={isLoading}\n fetching={isFetching}\n paginationModel={{ page, pageSize: perPage }}\n onPaginationChange={onPaginationChange}\n paginationMode=\"server\"\n disableRowSelectionOnClick\n disableColumnMenu\n containerProps={{ height: 400 }}\n />\n </Stack>\n );\n\n const header = (\n <Header\n title={title}\n viewMode={viewMode}\n selectedYear={selectedYear}\n periodLabel={periodLabel}\n />\n );\n\n if (isMobile) {\n return (\n <Drawer\n open={open}\n onClose={onClose}\n headerTitle={header}\n headerProps={{\n direction: 'row-reverse',\n sx: { '& > :last-child': { minWidth: 0, overflow: 'hidden' } },\n }}\n >\n {content}\n </Drawer>\n );\n }\n\n return (\n <Modal\n open={open}\n onClose={onClose}\n maxWidth=\"lg\"\n dialogTitle={header}\n dialogTitleProps={{ sx: { flex: 1, overflow: 'hidden' } }}\n fullWidth\n >\n {content}\n </Modal>\n );\n};\n\nexport default OverviewDetail;\n","import Stack from '@mui/material/Stack';\nimport Typography from '@mui/material/Typography';\n\nimport { VIEW_MODE_LABELS } from 'types/analytics';\n\nimport { DetailHeaderProps } from './props';\n\nconst Header = ({\n title,\n viewMode,\n selectedYear,\n periodLabel,\n}: DetailHeaderProps) => {\n return (\n <Stack width=\"100%\" minWidth={0} overflow=\"hidden\">\n <Typography variant=\"subtitle1\" noWrap>\n Detalhes do relatório\n </Typography>\n\n <Stack\n direction=\"row\"\n alignItems=\"center\"\n columnGap={1.5}\n rowGap={0}\n flexWrap=\"wrap\"\n >\n <Typography variant=\"body2\" color=\"text.secondary\" flexShrink={0}>\n {title}\n </Typography>\n •\n <Typography variant=\"body2\" flexShrink={0}>\n {VIEW_MODE_LABELS[viewMode]}\n </Typography>\n •\n <Typography variant=\"body2\" flexShrink={0}>\n {selectedYear}\n </Typography>\n •\n <Typography variant=\"body2\" color=\"text.secondary\" noWrap>\n {periodLabel}\n </Typography>\n </Stack>\n </Stack>\n );\n};\n\nexport default Header;\n","import MuiDivider from '@mui/material/Divider';\nimport Stack from '@mui/material/Stack';\nimport { alpha, styled } from '@mui/material/styles';\n\nexport const StyledDivider = styled(MuiDivider)(() => ({\n height: 30,\n alignSelf: 'center',\n\n borderStyle: 'dashed',\n}));\n\nexport const MobileItemContainer = styled(Stack)(({ theme }) => ({\n position: 'relative',\n\n display: 'flex',\n flexDirection: 'column',\n padding: theme.spacing(2),\n gap: theme.spacing(1),\n color: theme.palette.text.primary,\n\n '& a': {\n textDecoration: 'none',\n },\n\n '&+div': {\n borderTop: `1px dashed ${alpha(theme.palette.grey[500], 0.2)}`,\n },\n}));\n","import { useCallback, useMemo } from 'react';\n\nimport useDatagrid from 'hooks/useDatagrid';\nimport { ViewMode } from 'types/analytics';\nimport { Filter, GridQuery } from 'types/filter';\n\nimport { getDateRange, getPeriodLabel, getPeriodSuffix } from './utils';\n\nconst useOverviewDetailState = (label: string, viewMode: ViewMode) => {\n const { page, perPage, search, handlePaginationModelChange, handleSearch } =\n useDatagrid();\n\n const { startDate, endDate } = useMemo(\n () => getDateRange(label, viewMode),\n [label, viewMode],\n );\n\n const periodLabel = useMemo(\n () => getPeriodLabel(label, viewMode),\n [label, viewMode],\n );\n\n const suffix = getPeriodSuffix(viewMode);\n\n const queryParams = useMemo((): GridQuery => {\n return {\n page,\n perPage,\n ...(search ? { search } : {}),\n filter: {\n operator: 'AND',\n groups: [\n {\n operator: 'AND',\n conditionals: [\n {\n fieldName: 'negotiationDate',\n conditional: 'GREATER_THAN_OR_EQUAL',\n value: [`${startDate}T00:00:00`],\n },\n {\n fieldName: 'negotiationDate',\n conditional: 'LESS_THAN_OR_EQUAL',\n value: [`${endDate}T23:59:59`],\n },\n ],\n },\n ],\n } as Filter,\n };\n }, [endDate, page, perPage, search, startDate]);\n\n const handlePaginationChange = useCallback(\n (newPage: number, rowsPerPage: number) => {\n handlePaginationModelChange({ page: newPage, pageSize: rowsPerPage });\n },\n [handlePaginationModelChange],\n );\n\n return {\n page,\n perPage,\n periodLabel,\n suffix,\n queryParams,\n handleSearch,\n handlePaginationChange,\n };\n};\n\nexport default useOverviewDetailState;\n","import { ViewMode } from 'types/analytics';\nimport { MONTH_FULL_LABELS } from 'utils/chart';\n\nexport const getDateRange = (\n label: string,\n viewMode: ViewMode,\n): { startDate: string; endDate: string } => {\n const parts = label.split('-');\n\n if (viewMode === ViewMode.DAILY && parts.length === 3) {\n const date = `${parts[0]}-${parts[1]}-${parts[2]}`;\n return { startDate: date, endDate: date };\n }\n\n const year = parseInt(parts[0], 10);\n const month = parseInt(parts[1], 10);\n const lastDay = new Date(year, month, 0).getDate();\n\n return {\n startDate: `${parts[0]}-${parts[1]}-01`,\n endDate: `${parts[0]}-${parts[1]}-${String(lastDay).padStart(2, '0')}`,\n };\n};\n\nexport const getPeriodLabel = (label: string, viewMode: ViewMode): string => {\n const parts = label.split('-');\n const monthIndex = parseInt(parts[1], 10) - 1;\n const monthName = MONTH_FULL_LABELS[monthIndex] ?? '';\n\n if (viewMode === ViewMode.DAILY && parts.length === 3) {\n const day = parseInt(parts[2], 10);\n return `${monthName} - Dia ${day}`;\n }\n\n return monthName;\n};\n\nexport const getPeriodSuffix = (viewMode: ViewMode): string =>\n viewMode === ViewMode.MONTHLY ? 'no mês' : 'no dia';\n","import { useCallback, useMemo, useState } from 'react';\nimport CardContent from '@mui/material/CardContent';\nimport CardHeader from '@mui/material/CardHeader';\nimport Stack from '@mui/material/Stack';\n\nimport { ChartCard } from 'components/Analytics/ChartStyles';\nimport EmptyState from 'components/Analytics/EmptyState';\nimport Result from 'components/Result';\nimport { ViewMode } from 'types/analytics';\nimport { fShortenNumber } from 'utils/formatNumber';\n\nimport SalesEvolutionChart from './Chart';\nimport SalesEvolutionLegend from './Legend';\nimport { SalesEvolutionProps, SeriesVisibility } from './props';\nimport SalesEvolutionSummary from './Summary';\n\nconst SalesEvolution = ({\n data,\n kpis,\n viewMode,\n selectedYear,\n editGoalAction,\n DetailComponent,\n}: SalesEvolutionProps) => {\n const [visibleSeries, setVisibleSeries] = useState<SeriesVisibility>({\n realized: true,\n forecast: true,\n goal: true,\n });\n\n const [detailOpen, setDetailOpen] = useState(false);\n const [selectedLabel, setSelectedLabel] = useState('');\n const [selectedTotalValue, setSelectedTotalValue] = useState(0);\n\n const isMonthly = viewMode === ViewMode.MONTHLY;\n\n const yDomain = useMemo((): [number, number] => {\n if (!data.length) return [0, 1];\n\n const values = data.flatMap(item => [\n Number(item.realized) || 0,\n Number(item.forecast) || 0,\n Number(item.goal) || 0,\n ]);\n\n const max = Math.max(...values);\n\n return [0, max > 0 ? max * 1.15 : 1];\n }, [data]);\n\n const yTicks = useMemo(() => {\n const [, max] = yDomain;\n\n const step = max / 6;\n\n const ticks = Array.from({ length: 7 }, (_, i) => Math.round(step * i));\n\n return [...new Set(ticks)];\n }, [yDomain]);\n\n const handleToggleSeries = useCallback((key: keyof SeriesVisibility) => {\n setVisibleSeries(prev => ({ ...prev, [key]: !prev[key] }));\n }, []);\n\n const handleToggleSerie = useCallback(\n (toggle: string) => handleToggleSeries(toggle as keyof SeriesVisibility),\n [handleToggleSeries],\n );\n\n const handleBarClick = useCallback(\n (index: number) => {\n const item = data[index];\n if (!item) return;\n setSelectedLabel(item.label);\n setSelectedTotalValue(item.realized);\n setDetailOpen(true);\n },\n [data],\n );\n\n const handleDetailClose = useCallback(() => {\n setDetailOpen(false);\n }, []);\n\n const formatYAxis = useCallback((v: number) => fShortenNumber(v), []);\n\n return (\n <>\n <ChartCard>\n <CardHeader title=\"Evolução de vendas\" />\n\n <CardContent>\n <Result isEmpty={data.length === 0} empty={<EmptyState />}>\n <Stack gap={3}>\n <Stack display={{ xs: 'none', md: 'block' }}>\n <SalesEvolutionSummary\n kpis={kpis}\n isMonthly={isMonthly}\n editGoalAction={editGoalAction}\n />\n </Stack>\n\n <SalesEvolutionChart\n data={data}\n viewMode={viewMode}\n visibleSeries={visibleSeries}\n yDomain={yDomain}\n yTicks={yTicks}\n formatYAxis={formatYAxis}\n onBarClick={handleBarClick}\n />\n\n <SalesEvolutionLegend\n visibleSeries={visibleSeries}\n onToggleSerie={handleToggleSerie}\n />\n\n <Stack display={{ xs: 'block', md: 'none' }}>\n <SalesEvolutionSummary\n kpis={kpis}\n isMonthly={isMonthly}\n editGoalAction={editGoalAction}\n />\n </Stack>\n </Stack>\n </Result>\n </CardContent>\n </ChartCard>\n\n {selectedLabel && DetailComponent && (\n <DetailComponent\n open={detailOpen}\n onClose={handleDetailClose}\n label={selectedLabel}\n viewMode={viewMode}\n selectedYear={selectedYear}\n totalValue={selectedTotalValue}\n />\n )}\n </>\n );\n};\n\nexport default SalesEvolution;\n","import { useCallback, useMemo, useRef, useState } from 'react';\nimport { CategoricalChartFunc } from 'recharts/types/chart/types';\n\nimport { ChartWrapper } from 'components/Analytics/ChartStyles';\nimport { ViewMode } from 'types/analytics';\n\nimport DailyChart from './DailyView';\nimport MonthlyChart from './MonthlyView';\nimport { SalesEvolutionChartProps } from './props';\n\nconst SalesEvolutionChart = ({\n data,\n viewMode,\n visibleSeries,\n yDomain,\n yTicks,\n formatYAxis,\n onBarClick,\n}: SalesEvolutionChartProps) => {\n const [activeBarIndex, setActiveBarIndex] = useState<number | null>(null);\n const [containerWidth, setContainerWidth] = useState(0);\n\n const observerRef = useRef<ResizeObserver | null>(null);\n\n const isMonthly = viewMode === ViewMode.MONTHLY;\n\n const shouldRotateLabels = useMemo(() => {\n if (!isMonthly || containerWidth === 0 || data.length === 0) return false;\n\n const slotPerBar = (containerWidth - 60) / data.length;\n\n return slotPerBar < 60;\n }, [containerWidth, data.length, isMonthly]);\n\n const handleMouseLeave = useCallback<CategoricalChartFunc>(\n () => setActiveBarIndex(null),\n [],\n );\n\n const handleMouseMove = useCallback<CategoricalChartFunc>(state => {\n if (state?.activeTooltipIndex != null) {\n setActiveBarIndex(Number(state.activeTooltipIndex));\n }\n }, []);\n\n const wrapperRefCallback = useCallback((node: HTMLDivElement | null) => {\n if (observerRef.current) {\n observerRef.current.disconnect();\n observerRef.current = null;\n }\n\n if (node) {\n setContainerWidth(node.clientWidth);\n\n observerRef.current = new ResizeObserver(() =>\n setContainerWidth(node.clientWidth),\n );\n observerRef.current.observe(node);\n }\n }, []);\n\n if (isMonthly) {\n return (\n <ChartWrapper ref={wrapperRefCallback}>\n <MonthlyChart\n data={data}\n visibleSeries={visibleSeries}\n yDomain={yDomain}\n yTicks={yTicks}\n formatYAxis={formatYAxis}\n shouldRotateLabels={shouldRotateLabels}\n activeBarIndex={activeBarIndex}\n onMouseMove={handleMouseMove}\n onMouseLeave={handleMouseLeave}\n onBarClick={onBarClick}\n viewMode={viewMode}\n />\n </ChartWrapper>\n );\n }\n\n return (\n <ChartWrapper ref={wrapperRefCallback}>\n <DailyChart\n data={data}\n visibleSeries={visibleSeries}\n yDomain={yDomain}\n yTicks={yTicks}\n formatYAxis={formatYAxis}\n viewMode={viewMode}\n activeBarIndex={activeBarIndex}\n onMouseMove={handleMouseMove}\n onMouseLeave={handleMouseLeave}\n onBarClick={onBarClick}\n />\n </ChartWrapper>\n );\n};\n\nexport default SalesEvolutionChart;\n","import { useCallback } from 'react';\nimport {\n Bar,\n CartesianGrid,\n ComposedChart,\n Line,\n ResponsiveContainer,\n Tooltip,\n XAxis,\n YAxis,\n} from 'recharts';\n\nimport { formatDayLabel } from 'utils/chart';\nimport { fShortenNumber } from 'utils/formatNumber';\n\nimport { COLORS } from '../props';\n\nimport BarBackground from './BarBackground';\nimport { DailyChartProps } from './props';\nimport SalesEvolutionTooltip from './Tooltip';\n\nconst DailyChart = ({\n data,\n visibleSeries,\n yDomain,\n yTicks,\n viewMode,\n activeBarIndex,\n onMouseMove,\n onMouseLeave,\n onBarClick,\n}: DailyChartProps) => {\n const formatYAxis = useCallback((v: number) => fShortenNumber(v), []);\n\n return (\n <ResponsiveContainer width=\"100%\" height={350}>\n <ComposedChart\n data={data}\n margin={{ top: 20, right: 10, bottom: 0, left: 20 }}\n style={{ cursor: 'pointer' }}\n onMouseMove={onMouseMove}\n onMouseLeave={onMouseLeave}\n onClick={state => {\n if (state?.activeTooltipIndex != null) {\n onBarClick?.(Number(state.activeTooltipIndex));\n }\n }}\n >\n <CartesianGrid\n vertical={false}\n strokeDasharray=\"3 3\"\n stroke=\"#F4F6F8\"\n />\n\n <XAxis\n dataKey=\"label\"\n axisLine={false}\n tickLine={false}\n tick={{ fontSize: 12, fill: '#637381' }}\n tickFormatter={formatDayLabel}\n />\n\n <YAxis\n axisLine={false}\n tickLine={false}\n tick={{ fontSize: 12, fill: '#637381' }}\n tickFormatter={formatYAxis}\n domain={yDomain}\n ticks={yTicks}\n />\n\n <Tooltip content={<SalesEvolutionTooltip viewMode={viewMode} />} />\n\n <Bar\n dataKey=\"realized\"\n fill=\"transparent\"\n isAnimationActive={false}\n background={<BarBackground activeBarIndex={activeBarIndex} />}\n />\n\n {visibleSeries.goal && (\n <Line\n dataKey=\"goal\"\n name=\"Meta\"\n stroke={COLORS.goal}\n strokeWidth={2}\n strokeDasharray=\"8 4\"\n dot={false}\n isAnimationActive={false}\n />\n )}\n\n {visibleSeries.realized && (\n <Line\n dataKey=\"realized\"\n name=\"Vendas\"\n stroke={COLORS.sales}\n strokeWidth={2}\n dot={{\n fill: COLORS.sales,\n r: 4,\n strokeWidth: 0,\n }}\n isAnimationActive={false}\n />\n )}\n\n {visibleSeries.forecast && (\n <Line\n dataKey=\"forecast\"\n name=\"Previsto\"\n stroke={COLORS.forecast}\n strokeWidth={2}\n strokeDasharray=\"6 3\"\n dot={{\n fill: COLORS.forecast,\n r: 4,\n strokeWidth: 0,\n }}\n isAnimationActive={false}\n />\n )}\n </ComposedChart>\n </ResponsiveContainer>\n );\n};\n\nexport default DailyChart;\n","import { ReactNode } from 'react';\nimport { ComponentType } from 'react';\n\nimport { ViewMode } from 'types/analytics';\nimport {\n OverviewDetailBaseProps,\n RevenueGoalDashboardKpis,\n RevenueGoalDashboardSeriesItem,\n} from 'types/overviewAnalytics';\n\nexport interface SalesEvolutionProps {\n data: RevenueGoalDashboardSeriesItem[];\n kpis?: RevenueGoalDashboardKpis;\n viewMode: ViewMode;\n selectedYear: number;\n editGoalAction?: ReactNode;\n DetailComponent?: ComponentType<OverviewDetailBaseProps>;\n}\n\nexport interface SeriesVisibility {\n realized: boolean;\n forecast: boolean;\n goal: boolean;\n}\n\nexport interface SummaryProps {\n kpis?: RevenueGoalDashboardKpis;\n isMonthly: boolean;\n editGoalAction?: ReactNode;\n}\n\nexport interface LegendProps {\n visibleSeries: SeriesVisibility;\n onToggleSerie: (toggle: keyof SeriesVisibility) => void;\n}\n\nexport const COLORS = {\n sales: '#22C55E',\n forecast: '#F59E0B',\n goal: '#212B36',\n} as const;\n","import { COLORS } from '../props';\n\nimport { BarBackgroundComponentProps } from './props';\n\nconst BarBackground = ({\n x = 0,\n y = 0,\n width = 0,\n height = 0,\n index,\n activeBarIndex,\n}: BarBackgroundComponentProps) => {\n if (activeBarIndex !== index) return null;\n\n return (\n <rect\n x={x - 6}\n y={y}\n width={width + 6 * 2}\n height={height + 6}\n fill={COLORS.sales}\n opacity={0.16}\n rx={6}\n />\n );\n};\n\nexport default BarBackground;\n","import Divider from '@mui/material/Divider';\nimport Stack from '@mui/material/Stack';\nimport Typography from '@mui/material/Typography';\n\nimport SimpleCard from 'components/SimpleCard';\nimport { ViewMode } from 'types/analytics';\nimport { MONTH_FULL_LABELS } from 'utils/chart';\nimport { fCurrencyBRL } from 'utils/formatNumber';\n\nimport { COLORS } from '../props';\n\nimport { CustomTooltipProps, TooltipDataItem } from './props';\n\nconst SalesEvolutionTooltip = ({\n active,\n payload,\n label,\n viewMode,\n}: CustomTooltipProps) => {\n if (!active || !payload?.length) return null;\n\n const isDaily = viewMode === ViewMode.DAILY;\n\n const data = payload[0].payload as TooltipDataItem;\n const realized = Number(data.realized) || 0;\n const forecast = Number(data.forecast) || 0;\n const goal = Number(data.goal) || 0;\n\n const achievement = goal > 0 ? (realized / goal) * 100 : 0;\n const gap = goal > realized ? goal - realized : 0;\n\n const timeUnitStr = isDaily ? 'no dia' : 'no mês';\n const goalStr = isDaily ? 'diária' : 'mensal';\n\n let formattedLabel = String(label);\n const parts = formattedLabel.split('-');\n\n if (parts.length >= 2) {\n const monthIndex = parseInt(parts[1], 10) - 1;\n const month = MONTH_FULL_LABELS[monthIndex];\n\n if (isDaily && parts.length === 3) {\n formattedLabel = `${parseInt(parts[2], 10)} de ${month} de ${parts[0]}`;\n } else if (!isDaily) {\n formattedLabel = `${month} de ${parts[0]}`;\n }\n }\n\n const items = [\n {\n name: `Realizado ${timeUnitStr}`,\n value: fCurrencyBRL(realized),\n color: COLORS.sales,\n },\n {\n name: `Previsto ${timeUnitStr}`,\n value: fCurrencyBRL(forecast),\n color: COLORS.forecast,\n },\n {\n name: `Meta ${goalStr}`,\n value: fCurrencyBRL(goal),\n color: COLORS.goal,\n },\n {\n name: 'Atingimento',\n value: `${achievement.toFixed(0)}%`,\n color: '#00B8D9',\n },\n {\n name: `GAP ${timeUnitStr}`,\n value: fCurrencyBRL(gap),\n color: '#FF5630',\n },\n ];\n\n return (\n <SimpleCard minWidth={{ xs: 'auto', sm: 400 }} p={1} gap={1}>\n <Typography variant=\"body2\" color=\"text.secondary\">\n {formattedLabel}\n </Typography>\n\n <Divider />\n\n <Stack>\n {items.map((entry, index) => (\n <Stack\n key={index}\n direction=\"row\"\n alignItems=\"center\"\n justifyContent=\"space-between\"\n gap={3}\n data-testid={`tooltip-item-${index}`}\n >\n <Stack direction=\"row\" alignItems=\"center\" gap={1}>\n <Stack\n width={6}\n height={6}\n borderRadius=\"50%\"\n bgcolor={entry.color}\n />\n\n <Typography variant=\"body2\" noWrap>\n {entry.name}\n </Typography>\n </Stack>\n\n <Typography variant=\"body2\">{entry.value}</Typography>\n </Stack>\n ))}\n </Stack>\n </SimpleCard>\n );\n};\n\nexport default SalesEvolutionTooltip;\n","import { useMemo } from 'react';\nimport {\n Bar,\n CartesianGrid,\n ComposedChart,\n Line,\n ResponsiveContainer,\n Tooltip,\n XAxis,\n YAxis,\n} from 'recharts';\n\nimport RotatedTick from 'components/Analytics/RotatedTick';\nimport { formatMonthLabel } from 'utils/chart';\nimport { fCurrencyBRL, fShortenNumber } from 'utils/formatNumber';\n\nimport { COLORS } from '../props';\n\nimport BarBackground from './BarBackground';\nimport { MonthlyChartProps } from './props';\nimport SalesEvolutionTooltip from './Tooltip';\n\nconst MonthlyChart = ({\n data,\n visibleSeries,\n yDomain,\n yTicks,\n shouldRotateLabels,\n activeBarIndex,\n onMouseMove,\n onMouseLeave,\n onBarClick,\n viewMode,\n}: MonthlyChartProps) => {\n const barLabelConfig = useMemo(\n () =>\n shouldRotateLabels\n ? false\n : {\n position: 'top' as const,\n fontSize: 12,\n fill: '#212B36',\n formatter: (value: unknown) => fCurrencyBRL(Number(value)),\n },\n [shouldRotateLabels],\n );\n\n return (\n <ResponsiveContainer width=\"100%\" height={300}>\n <ComposedChart\n data={data}\n margin={{\n top: 20,\n right: 10,\n bottom: shouldRotateLabels ? -90 : 0,\n left: 20,\n }}\n barCategoryGap=\"20%\"\n style={{ cursor: 'pointer' }}\n onMouseMove={onMouseMove}\n onMouseLeave={onMouseLeave}\n onClick={state => {\n if (state?.activeTooltipIndex != null) {\n onBarClick?.(Number(state.activeTooltipIndex));\n }\n }}\n >\n <CartesianGrid\n vertical={false}\n strokeDasharray=\"3 3\"\n stroke=\"#F4F6F8\"\n />\n\n <XAxis\n dataKey=\"label\"\n axisLine={false}\n tickLine={false}\n {...(shouldRotateLabels && { interval: 0, height: 120 })}\n tick={\n shouldRotateLabels ? (\n <RotatedTick />\n ) : (\n { fontSize: 12, fill: '#637381' }\n )\n }\n tickFormatter={formatMonthLabel}\n />\n\n <YAxis\n axisLine={false}\n tickLine={false}\n tick={{ fontSize: 12, fill: '#637381' }}\n tickFormatter={(v: number) => fShortenNumber(v)}\n domain={yDomain}\n ticks={yTicks}\n />\n\n <Tooltip content={<SalesEvolutionTooltip viewMode={viewMode} />} />\n\n {visibleSeries.goal && (\n <Line\n dataKey=\"goal\"\n name=\"Meta\"\n stroke={COLORS.goal}\n strokeWidth={2}\n strokeDasharray=\"8 4\"\n dot={false}\n isAnimationActive={false}\n />\n )}\n\n {visibleSeries.realized && (\n <Bar\n dataKey=\"realized\"\n name=\"Vendas\"\n fill={COLORS.sales}\n maxBarSize={48}\n isAnimationActive={false}\n radius={[4, 4, 0, 0]}\n background={<BarBackground activeBarIndex={activeBarIndex} />}\n label={barLabelConfig}\n />\n )}\n\n {visibleSeries.forecast && (\n <Line\n dataKey=\"forecast\"\n name=\"Previsto\"\n stroke={COLORS.forecast}\n strokeWidth={2}\n strokeDasharray=\"6 3\"\n dot={{\n fill: COLORS.forecast,\n r: 4,\n strokeWidth: 0,\n }}\n isAnimationActive={false}\n />\n )}\n </ComposedChart>\n </ResponsiveContainer>\n );\n};\n\nexport default MonthlyChart;\n","import Checkbox from '@mui/material/Checkbox';\nimport FormControlLabel from '@mui/material/FormControlLabel';\nimport Stack from '@mui/material/Stack';\n\nimport { COLORS, LegendProps } from './props';\n\nconst SalesEvolutionLegend = ({\n visibleSeries,\n onToggleSerie,\n}: LegendProps) => (\n <Stack direction=\"row\" justifyContent=\"center\" flexWrap=\"wrap\" gap={1}>\n <FormControlLabel\n control={\n <Checkbox\n checked={visibleSeries.realized}\n onChange={() => onToggleSerie('realized')}\n sx={{ '&.Mui-checked': { color: COLORS.sales } }}\n />\n }\n label=\"Vendas\"\n />\n\n <FormControlLabel\n control={\n <Checkbox\n checked={visibleSeries.forecast}\n onChange={() => onToggleSerie('forecast')}\n sx={{ '&.Mui-checked': { color: COLORS.forecast } }}\n />\n }\n label=\"Previsto\"\n />\n\n <FormControlLabel\n control={\n <Checkbox\n checked={visibleSeries.goal}\n onChange={() => onToggleSerie('goal')}\n sx={{ '&.Mui-checked': { color: COLORS.goal } }}\n />\n }\n label=\"Meta\"\n />\n </Stack>\n);\n\nexport default SalesEvolutionLegend;\n","import Divider from '@mui/material/Divider';\nimport Stack from '@mui/material/Stack';\nimport Typography from '@mui/material/Typography';\n\nimport InfoCircle from 'components/InfoCircle';\nimport useResponsive from 'hooks/useResponsive';\nimport { fCurrencyBRL, fPercent } from 'utils/formatNumber';\n\nimport { SummaryProps } from './props';\n\nconst Summary = ({ kpis, isMonthly, editGoalAction }: SummaryProps) => {\n const isMobile = useResponsive('down', 'md');\n\n return (\n <Stack\n direction={{ xs: 'column', md: 'row' }}\n alignItems={{ xs: 'flex-start', md: 'center' }}\n flexWrap=\"wrap\"\n gap={3}\n >\n {isMobile && (\n <Divider\n orientation=\"horizontal\"\n flexItem\n sx={{\n borderStyle: 'dashed',\n mx: -3,\n }}\n />\n )}\n\n <Stack>\n <Typography variant=\"body2\" color=\"text.secondary\">\n Previsto no {isMonthly ? 'ano' : 'mês'}\n </Typography>\n\n <Typography variant=\"subtitle2\">\n {fCurrencyBRL(kpis?.forecast)}\n </Typography>\n </Stack>\n\n <Divider\n orientation={isMobile ? 'horizontal' : 'vertical'}\n flexItem\n sx={{ borderStyle: isMobile ? 'solid' : 'dashed' }}\n />\n\n <Stack>\n <Typography variant=\"body2\" color=\"text.secondary\">\n Realizado no {isMonthly ? 'ano' : 'mês'}\n </Typography>\n\n <Typography variant=\"subtitle2\">\n {fCurrencyBRL(kpis?.realized)}\n </Typography>\n </Stack>\n\n <Divider\n orientation={isMobile ? 'horizontal' : 'vertical'}\n flexItem\n sx={{ borderStyle: isMobile ? 'solid' : 'dashed' }}\n />\n\n <Stack>\n <Stack direction=\"row\" alignItems=\"center\" gap={3}>\n <Typography variant=\"body2\" color=\"text.secondary\">\n Meta {isMonthly ? 'anual' : 'mensal'}\n </Typography>\n\n {editGoalAction}\n </Stack>\n\n <Typography variant=\"subtitle2\">{fCurrencyBRL(kpis?.goal)}</Typography>\n </Stack>\n\n <Divider\n orientation={isMobile ? 'horizontal' : 'vertical'}\n flexItem\n sx={{ borderStyle: isMobile ? 'solid' : 'dashed' }}\n />\n\n <Stack>\n <Typography variant=\"body2\" color=\"text.secondary\">\n Atingimento\n </Typography>\n\n <Typography variant=\"subtitle2\">\n {fPercent(kpis?.achievement ?? 0, {\n maximumFractionDigits: 2,\n minimumFractionDigits: 2,\n })}\n </Typography>\n </Stack>\n\n <Divider\n orientation={isMobile ? 'horizontal' : 'vertical'}\n flexItem\n sx={{ borderStyle: isMobile ? 'solid' : 'dashed' }}\n />\n\n <Stack>\n <Stack direction=\"row\" gap={0.5}>\n <Typography variant=\"body2\" color=\"text.secondary\">\n GAP do {isMonthly ? 'ano' : 'mês'}\n </Typography>\n\n <InfoCircle\n text=\"Diferença entre o valor realizado e a meta. Um GAP significa que as vendas ainda estão abaixo do objetivo definido para o período.\"\n width={18}\n arrow\n sx={{ mt: -0.1 }}\n />\n </Stack>\n\n <Typography variant=\"subtitle2\">{fCurrencyBRL(kpis?.gap)}</Typography>\n </Stack>\n </Stack>\n );\n};\n\nexport default Summary;\n","import { useCallback, useMemo, useState } from 'react';\nimport CardContent from '@mui/material/CardContent';\nimport CardHeader from '@mui/material/CardHeader';\nimport Stack from '@mui/material/Stack';\nimport { CategoricalChartFunc } from 'recharts/types/chart/types';\n\nimport { ChartCard } from 'components/Analytics/ChartStyles';\nimport EmptyState from 'components/Analytics/EmptyState';\nimport Result from 'components/Result';\nimport { ViewMode } from 'types/analytics';\n\nimport ForecastChart from './Chart';\nimport SalesForecastLegend from './Legend';\nimport { SalesForecastProps, VisibleSeries } from './props';\nimport SalesForecastSummary from './Summary';\n\nconst SalesForecast = ({ data, viewMode }: SalesForecastProps) => {\n const isMonthly = viewMode === ViewMode.MONTHLY;\n\n const [visibleSeries, setVisibleSeries] = useState<VisibleSeries>({\n realized: true,\n forecast: true,\n });\n const [activeBarIndex, setActiveBarIndex] = useState<number | null>(null);\n\n const handleToggleSerie = useCallback((serie: keyof VisibleSeries) => {\n setVisibleSeries(prev => ({ ...prev, [serie]: !prev[serie] }));\n }, []);\n\n const handleMouseMove = useCallback<CategoricalChartFunc>(state => {\n if (state?.activeTooltipIndex != null) {\n setActiveBarIndex(Number(state.activeTooltipIndex));\n }\n }, []);\n\n const handleMouseLeave = useCallback<CategoricalChartFunc>(\n () => setActiveBarIndex(null),\n [],\n );\n\n const totals = useMemo(() => {\n const totalRealized = data.reduce(\n (acc, item) => acc + (item.realized_value ?? 0),\n 0,\n );\n\n const totalForecast = data.reduce(\n (acc, item) => acc + (item.forecast_value ?? 0),\n 0,\n );\n\n const percentage =\n totalForecast > 0 ? Math.round((totalRealized / totalForecast) * 100) : 0;\n return { totalRealized, totalForecast, percentage };\n }, [data]);\n\n return (\n <ChartCard>\n <CardHeader title=\"Previsto vs. Realizado (Positivação)\" />\n\n <CardContent>\n <Result isEmpty={data.length === 0} empty={<EmptyState />}>\n <Stack gap={3}>\n <Stack display={{ xs: 'none', md: 'block' }}>\n <SalesForecastSummary\n totalForecast={totals.totalForecast}\n totalRealized={totals.totalRealized}\n percentage={totals.percentage}\n isMonthly={isMonthly}\n />\n </Stack>\n\n <ForecastChart\n data={data}\n viewMode={viewMode}\n visibleSeries={visibleSeries}\n activeBarIndex={activeBarIndex}\n onMouseMove={handleMouseMove}\n onMouseLeave={handleMouseLeave}\n />\n\n <SalesForecastLegend\n visibleSeries={visibleSeries}\n onToggleSerie={handleToggleSerie}\n />\n\n <Stack display={{ xs: 'block', md: 'none' }}>\n <SalesForecastSummary\n totalForecast={totals.totalForecast}\n totalRealized={totals.totalRealized}\n percentage={totals.percentage}\n isMonthly={isMonthly}\n />\n </Stack>\n </Stack>\n </Result>\n </CardContent>\n </ChartCard>\n );\n};\n\nexport default SalesForecast;\n","import { useCallback, useMemo, useRef, useState } from 'react';\nimport {\n Bar,\n BarChart,\n CartesianGrid,\n ResponsiveContainer,\n Tooltip,\n XAxis,\n YAxis,\n} from 'recharts';\n\nimport { ChartWrapper } from 'components/Analytics/ChartStyles';\nimport RotatedTick from 'components/Analytics/RotatedTick';\nimport { ViewMode } from 'types/analytics';\nimport { formatDayLabel, formatMonthLabel } from 'utils/chart';\nimport { fShortenNumber } from 'utils/formatNumber';\n\nimport { COLORS } from '../props';\n\nimport BarBackground from './BarBackground';\nimport { ChartProps } from './props';\nimport RealizedBackground from './RealizedBackground';\nimport SalesForecastTooltip from './Tooltip';\n\nconst ForecastChart = ({\n data,\n viewMode,\n visibleSeries,\n activeBarIndex,\n onMouseMove,\n onMouseLeave,\n}: ChartProps) => {\n const isMonthly = viewMode === ViewMode.MONTHLY;\n\n const [containerWidth, setContainerWidth] = useState(0);\n const observerRef = useRef<ResizeObserver | null>(null);\n\n const wrapperRefCallback = useCallback((node: HTMLDivElement | null) => {\n if (observerRef.current) {\n observerRef.current.disconnect();\n observerRef.current = null;\n }\n if (node) {\n setContainerWidth(node.clientWidth);\n observerRef.current = new ResizeObserver(() =>\n setContainerWidth(node.clientWidth),\n );\n observerRef.current.observe(node);\n }\n }, []);\n\n const shouldRotateLabels = useMemo(() => {\n if (!isMonthly) return false;\n if (containerWidth === 0 || data.length === 0) return false;\n const slotPerBar = (containerWidth - 60) / data.length;\n return slotPerBar < 80;\n }, [isMonthly, containerWidth, data.length]);\n\n const hasRealizedData = useMemo(\n () => data.some(item => item.realized_value > 0),\n [data],\n );\n\n const hasForecastData = useMemo(\n () => data.some(item => item.forecast_value > 0),\n [data],\n );\n\n const yDomain = useMemo((): [number, number] => {\n if (!data.length) return [0, 1];\n const values = data.flatMap(item => [\n item.realized_value,\n item.forecast_value,\n ]);\n const max = Math.max(...values);\n return [0, max > 0 ? max * 1.15 : 1];\n }, [data]);\n\n const yTicks = useMemo(() => {\n const [, max] = yDomain;\n const step = max / 6;\n return [\n ...new Set(Array.from({ length: 7 }, (_, i) => Math.round(step * i))),\n ];\n }, [yDomain]);\n\n const tickFormatter = useMemo(\n () => (isMonthly ? formatMonthLabel : formatDayLabel),\n [isMonthly],\n );\n\n const bothRendered =\n visibleSeries.realized &&\n hasRealizedData &&\n visibleSeries.forecast &&\n hasForecastData;\n\n return (\n <ChartWrapper ref={wrapperRefCallback}>\n <ResponsiveContainer width=\"100%\" height={250}>\n <BarChart\n data={data}\n margin={{\n top: 20,\n right: 10,\n bottom: shouldRotateLabels ? -90 : 0,\n left: 20,\n }}\n barCategoryGap=\"20%\"\n barGap={4}\n onMouseMove={onMouseMove}\n onMouseLeave={onMouseLeave}\n >\n <CartesianGrid\n vertical={false}\n strokeDasharray=\"3 3\"\n stroke=\"#F4F6F8\"\n />\n\n <XAxis\n dataKey=\"label\"\n axisLine={false}\n tickLine={false}\n {...(shouldRotateLabels && { interval: 0, height: 120 })}\n tick={\n shouldRotateLabels ? (\n <RotatedTick />\n ) : (\n { fontSize: 12, fill: '#637381' }\n )\n }\n tickFormatter={tickFormatter}\n />\n\n <YAxis\n axisLine={false}\n tickLine={false}\n tick={{ fontSize: 12, fill: '#637381' }}\n tickFormatter={(v: number) => fShortenNumber(v)}\n domain={yDomain}\n ticks={yTicks}\n />\n\n <Tooltip\n content={<SalesForecastTooltip viewMode={viewMode} />}\n cursor={false}\n />\n\n {visibleSeries.realized && hasRealizedData && (\n <Bar\n dataKey=\"realized_value\"\n name=\"Realizado\"\n fill={COLORS.realized}\n maxBarSize={32}\n isAnimationActive={false}\n radius={[4, 4, 0, 0]}\n background={\n <RealizedBackground\n activeBarIndex={activeBarIndex}\n bothRendered={bothRendered}\n />\n }\n />\n )}\n\n {visibleSeries.forecast && hasForecastData && (\n <Bar\n dataKey=\"forecast_value\"\n name=\"Previsto\"\n fill={COLORS.forecast}\n maxBarSize={32}\n isAnimationActive={false}\n radius={[4, 4, 0, 0]}\n {...(!visibleSeries.realized && {\n background: <BarBackground activeBarIndex={activeBarIndex} />,\n })}\n />\n )}\n </BarChart>\n </ResponsiveContainer>\n </ChartWrapper>\n );\n};\n\nexport default ForecastChart;\n","import { ViewMode } from 'types/analytics';\nimport { SalesForecastDashboardSeriesItem } from 'types/overviewAnalytics';\n\nexport interface SalesForecastProps {\n data: SalesForecastDashboardSeriesItem[];\n viewMode: ViewMode;\n}\n\nexport interface VisibleSeries {\n realized: boolean;\n forecast: boolean;\n}\n\nexport interface SummaryProps {\n totalForecast: number;\n totalRealized: number;\n percentage: number;\n isMonthly: boolean;\n}\n\nexport interface LegendProps {\n visibleSeries: VisibleSeries;\n onToggleSerie: (serie: keyof VisibleSeries) => void;\n}\n\nexport const COLORS = {\n realized: '#22C55E',\n forecast: '#F59E0B',\n} as const;\n","import { BarBackgroundComponentProps } from './props';\n\nconst BarBackground = ({\n x = 0,\n y = 0,\n width = 0,\n height = 0,\n index,\n activeBarIndex,\n}: BarBackgroundComponentProps) => {\n if (activeBarIndex !== index) return null;\n\n return (\n <rect\n x={x - 6}\n y={y}\n width={width + 12}\n height={height + 6}\n fill=\"#919EAB\"\n opacity={0.16}\n rx={6}\n />\n );\n};\n\nexport default BarBackground;\n","import { RealizedBackgroundProps } from './props';\n\nconst RealizedBackground = ({\n x = 0,\n y = 0,\n width = 0,\n height = 0,\n index,\n activeBarIndex,\n bothRendered,\n}: RealizedBackgroundProps) => {\n if (activeBarIndex !== index) return null;\n\n return (\n <rect\n x={x - 6}\n y={y}\n width={bothRendered ? width * 2 + 4 + 12 : width + 12}\n height={height + 6}\n fill=\"#919EAB\"\n opacity={0.16}\n rx={6}\n />\n );\n};\n\nexport default RealizedBackground;\n","import Divider from '@mui/material/Divider';\nimport Stack from '@mui/material/Stack';\nimport Typography from '@mui/material/Typography';\n\nimport SimpleCard from 'components/SimpleCard';\nimport { ViewMode } from 'types/analytics';\nimport { MONTH_FULL_LABELS } from 'utils/chart';\nimport { fCurrencyBRL } from 'utils/formatNumber';\n\nimport { CustomTooltipProps } from './props';\n\nconst SalesForecastTooltip = ({\n active,\n payload,\n label,\n viewMode,\n}: CustomTooltipProps) => {\n if (!active || !payload?.length) return null;\n\n const isDaily = viewMode === ViewMode.DAILY;\n\n let formattedLabel = String(label);\n const parts = formattedLabel.split('-');\n\n if (parts.length >= 2) {\n const monthIndex = parseInt(parts[1], 10) - 1;\n const month = MONTH_FULL_LABELS[monthIndex];\n\n if (isDaily && parts.length === 3) {\n formattedLabel = `${parseInt(parts[2], 10)} de ${month} de ${parts[0]}`;\n } else if (!isDaily) {\n formattedLabel = `${month} de ${parts[0]}`;\n }\n }\n\n return (\n <SimpleCard minWidth={{ xs: 'auto', sm: 200 }} p={1} gap={1}>\n <Typography variant=\"body2\" color=\"text.secondary\">\n {formattedLabel}\n </Typography>\n\n <Divider />\n\n <Stack>\n {payload.map((entry, index) => (\n <Stack\n key={entry.name}\n direction=\"row\"\n alignItems=\"center\"\n justifyContent=\"space-between\"\n gap={3}\n data-testid={`tooltip-item-${index}`}\n >\n <Stack direction=\"row\" alignItems=\"center\" gap={1}>\n <Stack\n width={6}\n height={6}\n borderRadius=\"50%\"\n bgcolor={entry.color}\n />\n\n <Typography variant=\"body2\" noWrap>\n {entry.name}\n </Typography>\n </Stack>\n\n <Typography variant=\"body2\">{fCurrencyBRL(entry.value)}</Typography>\n </Stack>\n ))}\n </Stack>\n </SimpleCard>\n );\n};\n\nexport default SalesForecastTooltip;\n","import Checkbox from '@mui/material/Checkbox';\nimport FormControlLabel from '@mui/material/FormControlLabel';\nimport Stack from '@mui/material/Stack';\n\nimport { COLORS, LegendProps } from './props';\n\nconst SalesForecastLegend = ({ visibleSeries, onToggleSerie }: LegendProps) => (\n <Stack direction=\"row\" justifyContent=\"center\" flexWrap=\"wrap\" gap={1}>\n <FormControlLabel\n control={\n <Checkbox\n checked={visibleSeries.realized}\n onChange={() => onToggleSerie('realized')}\n sx={{ '&.Mui-checked': { color: COLORS.realized } }}\n />\n }\n label=\"Realizado\"\n />\n\n <FormControlLabel\n control={\n <Checkbox\n checked={visibleSeries.forecast}\n onChange={() => onToggleSerie('forecast')}\n sx={{ '&.Mui-checked': { color: COLORS.forecast } }}\n />\n }\n label=\"Previsto\"\n />\n </Stack>\n);\n\nexport default SalesForecastLegend;\n","import Divider from '@mui/material/Divider';\nimport Stack from '@mui/material/Stack';\nimport Typography from '@mui/material/Typography';\n\nimport useResponsive from 'hooks/useResponsive';\nimport { fCurrencyBRL } from 'utils/formatNumber';\n\nimport { SummaryProps } from './props';\n\nconst SalesForecastSummary = ({\n totalForecast,\n totalRealized,\n percentage,\n isMonthly,\n}: SummaryProps) => {\n const isMobile = useResponsive('down', 'md');\n\n return (\n <Stack\n direction={{ xs: 'column', md: 'row' }}\n alignItems={{ xs: 'flex-start', md: 'center' }}\n flexWrap=\"wrap\"\n gap={3}\n >\n {isMobile && (\n <Divider\n orientation=\"horizontal\"\n flexItem\n sx={{\n borderStyle: 'dashed',\n mx: -3,\n }}\n />\n )}\n\n <Stack>\n <Typography variant=\"body2\" color=\"text.secondary\">\n {isMonthly ? 'Total previsto no ano' : 'Total previsto no mês'}\n </Typography>\n\n <Typography variant=\"subtitle2\">\n {fCurrencyBRL(totalForecast)}\n </Typography>\n </Stack>\n\n <Divider\n orientation={isMobile ? 'horizontal' : 'vertical'}\n flexItem\n sx={{ borderStyle: isMobile ? 'solid' : 'dashed' }}\n />\n\n <Stack>\n <Typography variant=\"body2\" color=\"text.secondary\">\n {isMonthly ? 'Total realizado no ano' : 'Total realizado no mês'}\n </Typography>\n\n <Typography variant=\"subtitle2\">\n {fCurrencyBRL(totalRealized)}\n </Typography>\n </Stack>\n\n <Divider\n orientation={isMobile ? 'horizontal' : 'vertical'}\n flexItem\n sx={{ borderStyle: isMobile ? 'solid' : 'dashed' }}\n />\n\n <Stack>\n <Typography variant=\"body2\" color=\"text.secondary\">\n Atingimento\n </Typography>\n\n <Typography variant=\"subtitle2\">{percentage}%</Typography>\n </Stack>\n </Stack>\n );\n};\n\nexport default SalesForecastSummary;\n"]}
|
|
@@ -0,0 +1,122 @@
|
|
|
1
|
+
import * as react_jsx_runtime from 'react/jsx-runtime';
|
|
2
|
+
import * as react from 'react';
|
|
3
|
+
import { RankingItem, RankingType, SellerPortfolioQueryType } from '../../../types/partnerAnalysis.js';
|
|
4
|
+
import * as _emotion_styled from '@emotion/styled';
|
|
5
|
+
import * as _mui_system from '@mui/system';
|
|
6
|
+
import * as _mui_material_styles from '@mui/material/styles';
|
|
7
|
+
import * as _mui_material_OverridableComponent from '@mui/material/OverridableComponent';
|
|
8
|
+
import * as _mui_material from '@mui/material';
|
|
9
|
+
import * as _mui_material_Button from '@mui/material/Button';
|
|
10
|
+
|
|
11
|
+
interface ChartItem {
|
|
12
|
+
name: string;
|
|
13
|
+
value: number;
|
|
14
|
+
percentage: number;
|
|
15
|
+
fill: string;
|
|
16
|
+
}
|
|
17
|
+
interface LegendItem$1 {
|
|
18
|
+
key: string;
|
|
19
|
+
label: string;
|
|
20
|
+
color: string;
|
|
21
|
+
percentage: number;
|
|
22
|
+
count: number;
|
|
23
|
+
}
|
|
24
|
+
interface PartnerBreakdownProps {
|
|
25
|
+
title: string;
|
|
26
|
+
chartData: ChartItem[];
|
|
27
|
+
total: number;
|
|
28
|
+
isEmptyData: boolean;
|
|
29
|
+
legendItems: LegendItem$1[];
|
|
30
|
+
hiddenKeys: Set<string>;
|
|
31
|
+
onToggle: (key: string, checked: boolean) => void;
|
|
32
|
+
onPieClick?: (_: unknown, index: number) => void;
|
|
33
|
+
onItemClick?: (key: string, label: string) => void;
|
|
34
|
+
}
|
|
35
|
+
|
|
36
|
+
declare const PartnerBreakdown: ({ title, chartData, total, isEmptyData, legendItems, hiddenKeys, onToggle, onPieClick, onItemClick, }: PartnerBreakdownProps) => react_jsx_runtime.JSX.Element;
|
|
37
|
+
|
|
38
|
+
declare const SEGMENT_COLORS: string[];
|
|
39
|
+
declare const MAX_VISIBLE = 12;
|
|
40
|
+
interface LegendItem {
|
|
41
|
+
key: string;
|
|
42
|
+
label: string;
|
|
43
|
+
count: number;
|
|
44
|
+
percentage: number;
|
|
45
|
+
color: string;
|
|
46
|
+
}
|
|
47
|
+
interface PartnersByProfileProps {
|
|
48
|
+
data: LegendItem[];
|
|
49
|
+
chartData: SegmentChartItem[];
|
|
50
|
+
total: number;
|
|
51
|
+
isEmptyData: boolean;
|
|
52
|
+
onPieClick?: (_: unknown, index: number) => void;
|
|
53
|
+
onLegendClick?: (key: string) => void;
|
|
54
|
+
hiddenKeys: Set<string>;
|
|
55
|
+
onToggle: (key: string, checked: boolean) => void;
|
|
56
|
+
}
|
|
57
|
+
interface SegmentChartItem {
|
|
58
|
+
name: string;
|
|
59
|
+
value: number;
|
|
60
|
+
percentage: number;
|
|
61
|
+
fill: string;
|
|
62
|
+
}
|
|
63
|
+
|
|
64
|
+
declare const PartnersByProfile: ({ data, chartData, total, isEmptyData, onPieClick, onLegendClick, hiddenKeys, onToggle, }: PartnersByProfileProps) => react_jsx_runtime.JSX.Element;
|
|
65
|
+
|
|
66
|
+
interface RankingTypeConfig {
|
|
67
|
+
label: string;
|
|
68
|
+
color: string;
|
|
69
|
+
dataKey: keyof RankingItem;
|
|
70
|
+
barName: string;
|
|
71
|
+
averageName: string;
|
|
72
|
+
averageDataKey: string;
|
|
73
|
+
formatLabel: (value: number) => string;
|
|
74
|
+
formatYAxis: (value: number) => string;
|
|
75
|
+
floorAverage?: boolean;
|
|
76
|
+
}
|
|
77
|
+
interface RankingProps {
|
|
78
|
+
data: RankingItem[];
|
|
79
|
+
config: RankingTypeConfig;
|
|
80
|
+
average: number;
|
|
81
|
+
isFetching?: boolean;
|
|
82
|
+
onBarClick?: (item: RankingItem) => void;
|
|
83
|
+
}
|
|
84
|
+
declare const RANKING_CONFIG: Record<RankingType, RankingTypeConfig>;
|
|
85
|
+
|
|
86
|
+
declare const Ranking: react.MemoExoticComponent<({ data, config, average, onBarClick, children }: RankingProps & {
|
|
87
|
+
children?: React.ReactNode;
|
|
88
|
+
}) => react_jsx_runtime.JSX.Element>;
|
|
89
|
+
|
|
90
|
+
interface ItemButtonProps {
|
|
91
|
+
active?: boolean;
|
|
92
|
+
}
|
|
93
|
+
declare const ItemButton: _emotion_styled.StyledComponent<_mui_material_Button.ButtonOwnProps & Omit<_mui_material.ButtonBaseOwnProps, "classes"> & _mui_material_OverridableComponent.CommonProps & Omit<Omit<react.DetailedHTMLProps<react.ButtonHTMLAttributes<HTMLButtonElement>, HTMLButtonElement>, "ref"> & {
|
|
94
|
+
ref?: ((instance: HTMLButtonElement | null) => void) | react.RefObject<HTMLButtonElement> | null | undefined;
|
|
95
|
+
}, "children" | "disabled" | "className" | "style" | "classes" | "sx" | "variant" | "color" | "tabIndex" | "action" | "centerRipple" | "disableRipple" | "disableTouchRipple" | "focusRipple" | "focusVisibleClassName" | "LinkComponent" | "onFocusVisible" | "TouchRippleProps" | "touchRippleRef" | "size" | "href" | "fullWidth" | "disableElevation" | "disableFocusRipple" | "endIcon" | "startIcon"> & _mui_system.MUIStyledCommonProps<_mui_material_styles.Theme> & ItemButtonProps, {}, {}>;
|
|
96
|
+
|
|
97
|
+
interface StackedBarSeries {
|
|
98
|
+
dataKey: string;
|
|
99
|
+
name: string;
|
|
100
|
+
color: string;
|
|
101
|
+
}
|
|
102
|
+
interface SellerPortfolioTypeConfig {
|
|
103
|
+
label: string;
|
|
104
|
+
series: StackedBarSeries[];
|
|
105
|
+
formatYAxis: (value: number) => string;
|
|
106
|
+
}
|
|
107
|
+
interface ChartDataRow extends Record<string, string | number> {
|
|
108
|
+
seller_name: string;
|
|
109
|
+
seller_external_id: string;
|
|
110
|
+
_total: number;
|
|
111
|
+
}
|
|
112
|
+
interface SellerPortfolioProps {
|
|
113
|
+
data: ChartDataRow[];
|
|
114
|
+
config: SellerPortfolioTypeConfig;
|
|
115
|
+
onBarClick?: (sellerId: string, sellerName: string) => void;
|
|
116
|
+
children?: React.ReactNode;
|
|
117
|
+
}
|
|
118
|
+
declare const SELLER_PORTFOLIO_CONFIG: Record<SellerPortfolioQueryType, SellerPortfolioTypeConfig>;
|
|
119
|
+
|
|
120
|
+
declare const SellerPortfolio: ({ data, config, onBarClick, children, }: SellerPortfolioProps) => react_jsx_runtime.JSX.Element;
|
|
121
|
+
|
|
122
|
+
export { ChartItem as BreakdownChartItem, LegendItem$1 as BreakdownLegendItem, ChartDataRow, MAX_VISIBLE as PROFILE_MAX_VISIBLE, PartnerBreakdown, PartnerBreakdownProps, PartnersByProfile, PartnersByProfileProps, LegendItem as ProfileLegendItem, RANKING_CONFIG, Ranking, ItemButton as RankingItemButton, RankingProps, RankingTypeConfig, SEGMENT_COLORS, SELLER_PORTFOLIO_CONFIG, SegmentChartItem, SellerPortfolio, SellerPortfolioProps, SellerPortfolioTypeConfig };
|
|
@@ -0,0 +1,28 @@
|
|
|
1
|
+
import '../../../chunk-BHYLHO5P.js';
|
|
2
|
+
import { b as b$2, a as a$2 } from '../../../chunk-XL6SZZGI.js';
|
|
3
|
+
import { a, b as b$1, m, n, c } from '../../../chunk-XQZPUMVQ.js';
|
|
4
|
+
import { a as a$5 } from '../../../chunk-DRGARBKB.js';
|
|
5
|
+
import { h, d, a as a$3, c as c$1 } from '../../../chunk-OF6623HG.js';
|
|
6
|
+
import { a as a$1 } from '../../../chunk-4F2NKGF6.js';
|
|
7
|
+
import { a as a$4 } from '../../../chunk-F65ZXAGV.js';
|
|
8
|
+
import '../../../chunk-2GTD4JW2.js';
|
|
9
|
+
import '../../../chunk-PBLSVXV5.js';
|
|
10
|
+
import { b } from '../../../chunk-2ZJUGM2S.js';
|
|
11
|
+
import Lt from '@mui/material/CardContent';
|
|
12
|
+
import At from '@mui/material/CardHeader';
|
|
13
|
+
import N from '@mui/material/Stack';
|
|
14
|
+
import { ResponsiveContainer, ComposedChart, CartesianGrid, XAxis, YAxis, Tooltip, ReferenceLine, Bar, PieChart, Pie, BarChart } from 'recharts';
|
|
15
|
+
import { styled } from '@mui/material/styles';
|
|
16
|
+
import Ct from '@mui/material/Divider';
|
|
17
|
+
import ae from '@mui/material/Typography';
|
|
18
|
+
import { jsxs, jsx, Fragment } from 'react/jsx-runtime';
|
|
19
|
+
import ot from '@mui/material/Checkbox';
|
|
20
|
+
import at from '@mui/material/FormControlLabel';
|
|
21
|
+
import { memo, useState, useRef, useCallback, useMemo } from 'react';
|
|
22
|
+
import Lr from '@mui/material/Slider';
|
|
23
|
+
import Er from '@mui/material/Button';
|
|
24
|
+
|
|
25
|
+
var Fe=styled(N)(({theme:e})=>({position:"relative",alignSelf:"flex-start",flexShrink:0,"& .recharts-wrapper, & .recharts-wrapper *":{outline:"none !important",boxShadow:"none !important"},"& .recharts-pie-sector":{cursor:"pointer"},[e.breakpoints.down("md")]:{alignSelf:"center"}}));var De=e=>c$1(e,{maximumFractionDigits:2,...e>0&&e<100?{minimumFractionDigits:2}:{}}),bt=({active:e,payload:t,total:a})=>{if(!e||!t?.length)return null;let r=t[0];return jsxs(a$5,{minWidth:{xs:"auto",sm:200},p:1,gap:1,children:[jsx(ae,{variant:"body2",color:"text.secondary",children:r.name}),jsx(Ct,{}),jsxs(N,{children:[jsxs(N,{direction:"row",alignItems:"center",justifyContent:"space-between",gap:3,children:[jsxs(N,{direction:"row",alignItems:"center",gap:1,children:[jsx(N,{width:6,height:6,borderRadius:"50%",bgcolor:r.payload.fill}),jsx(ae,{variant:"body2",noWrap:!0,children:r.name})]}),jsxs(ae,{variant:"body2",noWrap:!0,children:[De(r.payload.percentage)," (",r.value,")"]})]}),jsxs(N,{direction:"row",alignItems:"center",justifyContent:"space-between",gap:3,children:[jsxs(N,{direction:"row",alignItems:"center",gap:1,children:[jsx(N,{width:6,height:6,borderRadius:"50%",bgcolor:"#919EAB"}),jsx(ae,{variant:"body2",noWrap:!0,children:"Total"})]}),jsxs(ae,{variant:"body2",noWrap:!0,children:[De(100)," (",a,")"]})]})]})]})},Me=bt;var Pt=({chartData:e,total:t,isEmptyData:a,onPieClick:r,clickable:o})=>jsx(Fe,{children:jsx(ResponsiveContainer,{width:200,height:200,children:jsxs(PieChart,{children:[jsx(Pie,{data:e,dataKey:"value",nameKey:"name",cx:"50%",cy:"50%",innerRadius:60,outerRadius:90,paddingAngle:2,strokeWidth:0,isAnimationActive:!1,onClick:r,cursor:o?"pointer":void 0}),jsx("text",{x:"50%",y:"46%",textAnchor:"middle",dominantBaseline:"middle",style:{fontSize:24,fontWeight:700},children:a$3(t)}),jsx("text",{x:"50%",y:"58%",textAnchor:"middle",dominantBaseline:"middle",style:{fontSize:12,fill:"#919EAB"},children:"clientes"}),!a&&jsx(Tooltip,{content:jsx(Me,{total:t})})]})})}),Ke=Pt;var Bt=({items:e,hiddenKeys:t,onToggle:a,onItemClick:r})=>jsx(N,{width:"100%",justifyContent:"center",children:e.map(o=>jsxs(N,{display:"grid",gridTemplateColumns:"1fr auto auto",alignItems:"center",gap:1.5,onClick:()=>r?.(o.key,o.label),sx:{...r?{cursor:"pointer"}:{}},children:[jsx(at,{label:o.label,onClick:i=>i.stopPropagation(),control:jsx(ot,{size:"small",checked:!t.has(o.key),onChange:(i,n)=>a(o.key,n),sx:{"&.Mui-checked":{color:o.color}}}),sx:{"& .MuiFormControlLabel-label":{overflow:"hidden",whiteSpace:"nowrap",textOverflow:"ellipsis"}}}),jsx(ae,{variant:"body2",color:"text.secondary",textAlign:"right",noWrap:!0,children:c$1(o.percentage,{maximumFractionDigits:2,...o.percentage>0&&o.percentage<100?{minimumFractionDigits:2}:{}})}),jsx(ae,{variant:"subtitle2",color:"text.primary",textAlign:"right",noWrap:!0,children:d(o.count)})]},o.key))}),Oe=Bt;var _t=({title:e,chartData:t,total:a$1,isEmptyData:r,legendItems:o,hiddenKeys:i,onToggle:n,onPieClick:p,onItemClick:c})=>jsxs(a,{children:[jsx(At,{title:e}),jsx(Lt,{children:jsxs(N,{direction:{xs:"column",sm:"row"},alignItems:"center",gap:1.5,minWidth:0,children:[jsx(Ke,{chartData:t,total:a$1,isEmptyData:r,onPieClick:p,clickable:!!p}),jsx(Oe,{items:o,hiddenKeys:i,onToggle:n,onItemClick:c})]})})]}),Ft=_t;var ze=Math.PI/180,Ge=22,Dt=2,Mt=e=>{let{cx:t,cy:a,midAngle:r,outerRadius:o,percentage:i}=e;if(i<Dt)return null;let n=Number(t),p=Number(a),c=Number(o),u=Number(r);if(isNaN(n)||isNaN(p)||isNaN(c))return null;let v=Math.sin(-u*ze),P=Math.cos(-u*ze),R=n+c*P,B=p+c*v,y=n+(c+Ge*.5)*P,s=p+(c+Ge*.5)*v,l=P>=0?1:-1,d=y+l*10,h=s,b=c$1(i,{maximumFractionDigits:1,...i>0&&i<100?{minimumFractionDigits:1}:{}}),g=b.length*7+10,T=l===1?d+2:d-g-2;return jsxs("g",{children:[jsx("path",{d:`M${R},${B} L${y},${s} L${d},${h}`,stroke:"#637381",fill:"none",strokeWidth:1}),jsx("rect",{x:T,y:h-10,width:g,height:20,rx:4,fill:"#212B36"}),jsx("text",{x:T+g/2,y:h,textAnchor:"middle",dominantBaseline:"central",fontSize:11,fontWeight:600,fill:"#FFFFFF",children:b})]})},He=Mt;var Xe=styled(N)({position:"relative",alignItems:"center",justifyContent:"center","& .recharts-wrapper, & .recharts-wrapper *":{outline:"none !important",boxShadow:"none !important"},"& .recharts-wrapper":{overflow:"visible !important"},"& .recharts-wrapper svg":{overflow:"visible"},"& .recharts-pie-sector":{cursor:"pointer"}});var Ye=e=>c$1(e,{maximumFractionDigits:2,...e>0&&e<100?{minimumFractionDigits:2}:{}}),Vt=({active:e,payload:t,total:a})=>{if(!e||!t?.length)return null;let r=t[0];return jsxs(a$5,{minWidth:{xs:"auto",sm:200},p:1,gap:1,children:[jsx(ae,{variant:"body2",color:"text.secondary",children:r.name}),jsx(Ct,{}),jsxs(N,{children:[jsxs(N,{direction:"row",alignItems:"center",justifyContent:"space-between",gap:3,children:[jsxs(N,{direction:"row",alignItems:"center",gap:1,children:[jsx(N,{width:6,height:6,borderRadius:"50%",bgcolor:r.payload.fill}),jsx(ae,{variant:"body2",noWrap:!0,children:r.name})]}),jsxs(ae,{variant:"body2",noWrap:!0,children:[Ye(r.payload.percentage)," (",r.value,")"]})]}),jsxs(N,{direction:"row",alignItems:"center",justifyContent:"space-between",gap:3,children:[jsxs(N,{direction:"row",alignItems:"center",gap:1,children:[jsx(N,{width:6,height:6,borderRadius:"50%",bgcolor:"#919EAB"}),jsx(ae,{variant:"body2",noWrap:!0,children:"Total"})]}),jsxs(ae,{variant:"body2",noWrap:!0,children:[Ye(100)," (",a,")"]})]})]})]})},$e=Vt;var Yt=e=>jsx(He,{...e}),$t=({chartData:e,total:t,isEmptyData:a,onPieClick:r})=>jsx(Xe,{children:jsx(ResponsiveContainer,{width:280,height:280,children:jsxs(PieChart,{children:[jsx(Pie,{data:e,dataKey:"value",nameKey:"name",cx:"50%",cy:"50%",outerRadius:90,paddingAngle:1,strokeWidth:0,isAnimationActive:!1,label:a?!1:Yt,labelLine:!1,onClick:r,cursor:r?"pointer":void 0}),!a&&jsx(Tooltip,{content:jsx($e,{total:t})})]})})}),Ue=$t;var Jt=e=>c$1(e,{maximumFractionDigits:2,...e>0&&e<100?{minimumFractionDigits:2}:{}}),jt=({items:e,hiddenKeys:t,onToggle:a,onItemClick:r})=>jsx(a$4,{sx:{maxHeight:280,width:"100%",pl:.5},children:e.map(o=>jsxs(N,{display:"grid",gridTemplateColumns:"1fr auto auto",alignItems:"center",gap:1.5,onClick:()=>r?.(o.key),sx:r?{cursor:"pointer"}:void 0,children:[jsx(at,{label:o.label,onClick:i=>i.stopPropagation(),control:jsx(ot,{size:"small",checked:!t.has(o.key),onChange:(i,n)=>a(o.key,n),sx:{"&.Mui-checked":{color:o.color}}}),sx:{"& .MuiFormControlLabel-label":{overflow:"hidden",whiteSpace:"nowrap",textOverflow:"ellipsis"}}}),jsx(ae,{variant:"body2",color:"text.secondary",textAlign:"right",noWrap:!0,children:Jt(o.percentage)}),jsx(ae,{variant:"subtitle2",color:"text.primary",textAlign:"right",noWrap:!0,children:d(o.count)})]},o.key))}),Ze=jt;var ar=({data:e,chartData:t,total:a$2,isEmptyData:r,onPieClick:o,onLegendClick:i,hiddenKeys:n,onToggle:p})=>jsxs(a,{children:[jsx(At,{title:"Clientes por segmentos"}),jsx(Lt,{children:jsx(a$1,{isEmpty:e.length===0,empty:jsx(m,{}),children:jsxs(N,{alignItems:"center",gap:2,children:[jsx(Ue,{chartData:t,total:a$2,isEmptyData:r,onPieClick:o}),jsx(Ze,{items:e,hiddenKeys:n,onToggle:p,onItemClick:i})]})})})]}),nr=ar;var ir=["#FF5630","#FFAB00","#22C55E","#C4CDD5","#8E33FF","#00B8D9","#3366FF","#FF6C40","#36B37E","#B76E00"],lr=12;var V="#212B36",sr={["SALE_TOTAL_VALUE"]:{label:"Por valor total",color:"#22C55E",dataKey:"total_sale_value",barName:"Valor total por cliente",averageName:"M\xE9dia total de valor por cliente",averageDataKey:"average_total_value",formatLabel:h,formatYAxis:d},["SALE_COUNT"]:{label:"Por pedidos",color:"#C684FF",dataKey:"total_value_by_customer",barName:"Quantidade de pedidos",averageName:"Quantidade total de pedidos",averageDataKey:"average_sale_count",formatLabel:String,formatYAxis:d,floorAverage:!0},["SALE_AVERAGE_VALUE"]:{label:"Por ticket m\xE9dio",color:"#00B8D9",dataKey:"total_sale_value",barName:"Ticket m\xE9dio por cliente",averageName:"M\xE9dia do ticket m\xE9dio",averageDataKey:"average_ticket",formatLabel:h,formatYAxis:d}};var mr=({x:e=0,y:t=0,width:a=0,height:r=0,index:o=0,activeBarIndex:i,color:n,data:p,onBarClick:c})=>i!==o?null:jsx("rect",{x:e-6,y:t,width:a+12,height:r+6,fill:n,opacity:.16,rx:6,style:{cursor:"pointer"},onClick:()=>c(p[o])}),Je=mr;var dr=({active:e,payload:t,label:a,config:r,average:o})=>!e||!t?.length?null:jsxs(a$5,{minWidth:{xs:"auto",sm:200},p:1,gap:1,children:[jsx(ae,{variant:"body2",color:"text.secondary",children:a}),jsx(Ct,{}),jsxs(N,{children:[t.map((i,n)=>jsxs(N,{direction:"row",alignItems:"center",justifyContent:"space-between",gap:3,"data-testid":`tooltip-item-${n}`,children:[jsxs(N,{direction:"row",alignItems:"center",gap:1,children:[jsx(N,{width:6,height:6,borderRadius:"50%",bgcolor:i.color}),jsx(ae,{variant:"body2",noWrap:!0,children:r.barName})]}),jsx(ae,{variant:"body2",children:r.formatLabel(i.value)})]},i.dataKey)),jsxs(N,{direction:"row",alignItems:"center",justifyContent:"space-between",gap:3,children:[jsxs(N,{direction:"row",alignItems:"center",gap:1,children:[jsx(N,{width:6,height:6,borderRadius:"50%",bgcolor:V}),jsx(ae,{variant:"body2",noWrap:!0,children:r.averageName})]}),jsx(ae,{variant:"body2",children:r.formatLabel(o)})]})]})]}),je=dr;var kr=48,Sr=kr/.8,xr=({data:e,config:t,visibleSeries:a,average:r,activeBarIndex:o,activeCoordX:i,shouldRotateLabels:n$1,onMouseMove:p,onMouseLeave:c$1,onBarClick:u})=>{let v=useMemo(()=>{if(!e.length)return [0,1];let l=e.map(h=>h[t.dataKey]||0);a.average&&r>0&&l.push(r);let d=Math.max(...l);return [0,d>0?d*1.15:1]},[e,t.dataKey,r,a.average]),P=useMemo(()=>{let[,l]=v,d=l/6;return [...new Set(Array.from({length:7},(h,b)=>Math.round(d*b)))]},[v]),R=useMemo(()=>n$1?!1:{position:"top",fontSize:11,fill:"#212B36",formatter:l=>t.formatLabel(Number(l))},[n$1,t]),B=useMemo(()=>jsx(je,{config:t,average:r}),[t,r]),y=useCallback(l=>n$1?jsx(n,{...l}):jsx(b$2,{x:l.x,y:l.y,payload:l.payload,slotWidth:Sr}),[n$1]),s=useCallback(l=>{l&&u(l);},[u]);return jsx(c,{children:jsx(ResponsiveContainer,{width:"100%",height:350,children:jsxs(ComposedChart,{data:e,margin:{top:20,right:10,bottom:0,left:20},barCategoryGap:"20%",onMouseMove:p,onMouseLeave:c$1,children:[jsx(CartesianGrid,{vertical:!1,strokeDasharray:"3 3",stroke:"#F4F6F8"}),jsx(XAxis,{dataKey:"partner_name",axisLine:!1,tickLine:!1,interval:0,height:n$1?70:50,tick:y}),jsx(YAxis,{axisLine:!1,tickLine:!1,tick:{fontSize:12,fill:"#637381"},tickFormatter:l=>d(l),domain:v,ticks:P}),jsx(Tooltip,{content:B}),a.average&&r>0&&jsx(ReferenceLine,{y:r,stroke:V,strokeDasharray:"8 4",strokeWidth:2,ifOverflow:"extendDomain"}),a.average&&r>0&&jsx(ReferenceLine,{y:r,stroke:"none",ifOverflow:"extendDomain",label:jsx(a$2,{activeCoordX:i,referenceCircleColor:V,activeIndex:o})}),a.bar&&jsx(Bar,{dataKey:t.dataKey,name:t.barName,fill:t.color,maxBarSize:48,isAnimationActive:!1,radius:[4,4,0,0],cursor:"pointer",onClick:s,background:jsx(Je,{activeBarIndex:o,color:t.color,data:e,onBarClick:u}),label:R})]})})})},rt=xr;var Rr=({visibleSeries:e,config:t,onToggleSerie:a})=>jsxs(N,{direction:"row",justifyContent:"center",flexWrap:"wrap",gap:1,children:[jsx(at,{control:jsx(ot,{checked:e.bar,onChange:()=>a("bar"),sx:{"&.Mui-checked":{color:t.color}}}),label:t.barName}),jsx(at,{control:jsx(ot,{checked:e.average,onChange:()=>a("average"),sx:{"&.Mui-checked":{color:V}}}),label:t.averageName})]}),nt=Rr;var st=memo(({data:e,config:t,average:a$2,onBarClick:r,children:o})=>{let i=b("down","sm"),n=b("down","lg"),[p,c]=useState({bar:!0,average:!0}),[u,v]=useState(12),[P,R]=useState(null),[B,y]=useState(null),[s,l]=useState(0),d=useRef(null),h=useCallback(m=>{d.current&&(d.current.disconnect(),d.current=null),m&&(l(m.clientWidth),d.current=new ResizeObserver(()=>l(m.clientWidth)),d.current.observe(m));},[]),b$2=useMemo(()=>[...e].sort((m,S)=>S[t.dataKey]-m[t.dataKey]),[e,t.dataKey]),g=b$2.length,T=useMemo(()=>i?10:n?25:30,[i,n]),ke=!i&&g>10,re=Math.min(g,T),oe=Math.min(i?g:u,g,T),K=useMemo(()=>b$2.slice(0,oe),[b$2,oe]),Se=useMemo(()=>s===0||K.length===0?!1:(s-60)/K.length<80,[s,K.length]),xe=useCallback(m=>{c(S=>({...S,[m]:!S[m]}));},[]),ve=useCallback(m=>{m?.activeTooltipIndex!=null&&R(Number(m.activeTooltipIndex)),m?.activeCoordinate?.x!=null&&y(m.activeCoordinate.x);},[]),Pe=useCallback(()=>{R(null),y(null);},[]),Re=useCallback(m=>{m&&r?.(m);},[r]),f=useCallback((m,S)=>{v(S);},[]);return jsxs(a,{children:[jsx(b$1,{title:"Ranking de clientes",action:o}),jsx(Lt,{children:jsx(a$1,{isEmpty:K.length===0,empty:jsx(m,{}),children:jsxs(N,{alignItems:"center",gap:1.5,children:[jsx(N,{width:"100%",ref:h,children:jsx(rt,{data:K,config:t,visibleSeries:p,average:a$2,activeBarIndex:P,activeCoordX:B,shouldRotateLabels:Se,onMouseMove:ve,onMouseLeave:Pe,onBarClick:Re})}),jsx(nt,{visibleSeries:p,config:t,onToggleSerie:xe}),ke&&jsx(Lr,{size:"small",min:10,max:re,value:oe,valueLabelDisplay:"auto",onChange:f})]})})})]})});st.displayName="Ranking";var Ar=st;var Fr=styled(Er,{shouldForwardProp:e=>e!=="active"})(({theme:e,active:t})=>({justifyContent:"flex-start",color:t?e.palette.primary.main:e.palette.text.secondary,fontWeight:t?800:400,"&:hover":{background:e.palette.action.hover}}));var Dr=({x:e=0,y:t=0,width:a=0,height:r=0,index:o=0,activeBarIndex:i,data:n,onBarClick:p})=>{if(i!==o)return null;let c=n[o];return jsx("rect",{x:e-6,y:t,width:a+12,height:r+6,fill:"#919EAB",opacity:.16,rx:6,style:{cursor:"pointer"},onClick:()=>{c&&p(String(c.seller_external_id),String(c.seller_name));}})},mt=Dr;var pt=e=>c$1(e,{maximumFractionDigits:2,...e>0&&e<100?{minimumFractionDigits:2}:{}}),Nr=({active:e,payload:t,label:a,config:r})=>{if(!e||!t?.length)return null;let o=t.filter(n=>n.value!=null&&n.value>0),i=o.reduce((n,p)=>n+p.value,0);return jsxs(a$5,{minWidth:{xs:"auto",sm:200},p:1,gap:1,children:[jsx(ae,{variant:"body2",color:"text.secondary",children:a}),jsx(Ct,{}),jsxs(N,{children:[o.map(n=>{let p=r.series.find(u=>u.dataKey===n.dataKey),c=i>0?pt(n.value/i*100):"0%";return jsxs(N,{direction:"row",alignItems:"center",justifyContent:"space-between",gap:3,children:[jsxs(N,{direction:"row",alignItems:"center",gap:1,children:[jsx(N,{width:6,height:6,borderRadius:"50%",bgcolor:n.color}),jsx(ae,{variant:"body2",noWrap:!0,children:p?.name??n.dataKey})]}),jsxs(ae,{variant:"body2",noWrap:!0,children:[c," (",n.value,")"]})]},n.dataKey)}),jsxs(N,{direction:"row",alignItems:"center",justifyContent:"space-between",gap:3,children:[jsxs(N,{direction:"row",alignItems:"center",gap:1,children:[jsx(N,{width:6,height:6,borderRadius:"50%",bgcolor:"#919EAB"}),jsx(ae,{variant:"body2",noWrap:!0,children:"Total"})]}),jsxs(ae,{variant:"body2",noWrap:!0,children:[pt(100)," (",i,")"]})]})]})]})},ct=Nr;var Yr=48,$r=Yr/.8,Ur=({data:e,config:t,visibleSeries:a,hiddenKeys:r,activeBarIndex:o,shouldRotateLabels:i,onMouseMove:n$1,onMouseLeave:p,onBarClick:c$1})=>{let u=useMemo(()=>{if(!e.length)return [0,1];let s=Math.max(...e.map(l=>l._visibleTotal));return [0,s>0?s*1.15:1]},[e]),v=useMemo(()=>{let[,s]=u,l=s/6;return [...new Set(Array.from({length:7},(d,h)=>Math.round(l*h)))]},[u]),P=useMemo(()=>jsx(ct,{config:t}),[t]),R=useCallback(s=>i?jsx(n,{...s}):jsx(b$2,{x:s.x,y:s.y,payload:s.payload,slotWidth:$r}),[i]),B=useCallback(s=>{if(!s)return;let l=s.payload;l&&c$1(String(l.seller_external_id),String(l.seller_name));},[c$1]),y=useCallback(s=>{let{x:l,y:d,width:h,index:b}=s,g=e[b]?._visibleTotal;return g?jsx("text",{x:l+h/2,y:d-6,textAnchor:"middle",fontSize:11,fill:"#212B36",children:g}):jsx(Fragment,{})},[e]);return jsx(c,{children:jsx(ResponsiveContainer,{width:"100%",height:350,children:jsxs(BarChart,{data:e,margin:{top:20,right:10,bottom:0,left:20},barCategoryGap:"20%",onMouseMove:n$1,onMouseLeave:p,children:[jsx(CartesianGrid,{vertical:!1,strokeDasharray:"3 3",stroke:"#F4F6F8"}),jsx(XAxis,{dataKey:"seller_name",axisLine:!1,tickLine:!1,interval:0,height:i?70:50,tick:R}),jsx(YAxis,{axisLine:!1,tickLine:!1,tick:{fontSize:12,fill:"#637381"},tickFormatter:s=>d(s),domain:u,ticks:v}),jsx(Tooltip,{content:P,cursor:!1}),t.series.map(s=>{let l=!r.has(s.dataKey),d=a[0],h=a[a.length-1],b=l&&s.dataKey===d?.dataKey,g=l&&s.dataKey===h?.dataKey;return jsx(Bar,{dataKey:l?s.dataKey:`_hidden_${s.dataKey}`,name:s.name,fill:s.color,stackId:"stack",maxBarSize:48,isAnimationActive:!1,cursor:"pointer",hide:!l,onClick:B,...b&&{background:jsx(mt,{activeBarIndex:o,data:e,onBarClick:c$1})},...g&&{radius:[4,4,0,0]},...g&&!i&&{label:{position:"top",fontSize:11,fill:"#212B36",content:y}}},s.dataKey)})]})})})},dt=Ur;var eo=({series:e,hiddenKeys:t,onToggleSerie:a})=>jsx(N,{direction:"row",justifyContent:"center",flexWrap:"wrap",gap:1,children:e.map(r=>jsx(at,{control:jsx(ot,{checked:!t.has(r.dataKey),onChange:()=>a(r.dataKey),sx:{"&.Mui-checked":{color:r.color}}}),label:r.name},r.dataKey))}),ft=eo;var ao=({data:e,config:t,onBarClick:a$2,children:r})=>{let o=b("down","sm"),i=b("down","lg"),[n,p]=useState(new Set),[c,u]=useState(12),[v,P]=useState(null),[R,B]=useState(0),y=useRef(null),s=useMemo(()=>[...e].sort((f,m)=>m._total-f._total),[e]),l=useMemo(()=>o?10:i?25:30,[i,o]),d=s.length,h=!o&&d>10,b$2=Math.min(d,l),g=Math.min(o?d:c,d,l),T=useMemo(()=>s.slice(0,g),[s,g]),ke=useMemo(()=>R===0||T.length===0?!1:(R-60)/T.length<80,[R,T.length]),re=useMemo(()=>t.series.filter(f=>!n.has(f.dataKey)),[t.series,n]),oe=useMemo(()=>T.map(f=>({...f,_visibleTotal:re.reduce((m,S)=>m+(Number(f[S.dataKey])||0),0)})),[T,re]),K=useCallback(f=>{y.current&&(y.current.disconnect(),y.current=null),f&&(B(f.clientWidth),y.current=new ResizeObserver(()=>B(f.clientWidth)),y.current.observe(f));},[]),Se=useCallback(f=>{p(m=>{let S=new Set(m);return S.has(f)?S.delete(f):S.add(f),S});},[]),xe=useCallback(f=>{f?.activeTooltipIndex!=null&&P(Number(f.activeTooltipIndex));},[]),ve=useCallback(()=>{P(null);},[]),Pe=useCallback((f,m)=>{a$2?.(f,m);},[a$2]),Re=useCallback((f,m)=>{u(m);},[]);return jsxs(a,{children:[jsx(b$1,{title:"Carteira de clientes do vendedor",action:r}),jsx(Lt,{children:jsx(a$1,{isEmpty:T.length===0,empty:jsx(m,{}),children:jsxs(N,{alignItems:"center",gap:1.5,children:[jsx(N,{width:"100%",ref:K,children:jsx(dt,{data:oe,config:t,visibleSeries:re,hiddenKeys:n,activeBarIndex:v,shouldRotateLabels:ke,onMouseMove:xe,onMouseLeave:ve,onBarClick:Pe})}),jsx(ft,{series:t.series,hiddenKeys:n,onToggleSerie:Se}),h&&jsx(Lr,{size:"small",min:10,max:b$2,value:g,valueLabelDisplay:"auto",onChange:Re})]})})})]})},no=ao;var io=[{dataKey:"ACTIVE",name:"Ativos",color:"#22C55E"},{dataKey:"AT_RISK",name:"Em risco",color:"#FFAB00"},{dataKey:"INACTIVE",name:"Inativos",color:"#FF5630"},{dataKey:"NEW_CLIENT",name:"Novos clientes",color:"#8E33FF"},{dataKey:"PROSPECT",name:"Prospects",color:"#00B8D9"},{dataKey:"LOST",name:"Perdidos",color:"#C4CDD5"}],lo=[{dataKey:"A",name:"Curva A",color:"#22C55E"},{dataKey:"B",name:"Curva B",color:"#FFAB00"},{dataKey:"C",name:"Curva C",color:"#FF5630"}],so={["CLASSIFICATION"]:{label:"Por classifica\xE7\xE3o",series:io,formatYAxis:d},["ABC_CURVE"]:{label:"Por curva ABC",series:lo,formatYAxis:d}};
|
|
26
|
+
|
|
27
|
+
export { lr as PROFILE_MAX_VISIBLE, Ft as PartnerBreakdown, nr as PartnersByProfile, sr as RANKING_CONFIG, Ar as Ranking, Fr as RankingItemButton, ir as SEGMENT_COLORS, so as SELLER_PORTFOLIO_CONFIG, no as SellerPortfolio };
|
|
28
|
+
//# sourceMappingURL=index.js.map
|