@zydon/common 2.9.56 → 2.9.58

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.
@@ -1 +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","d","hasQuotationData","yDomain","maxTotal","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","isFetching","selectedYear","DetailComponent","setVisibleSeries","setActiveBarIndex","detailOpen","setDetailOpen","selectedLabel","setSelectedLabel","selectedTotalValue","setSelectedTotalValue","handleToggleSerie","serie","prev","handleMouseMove","handleMouseLeave","handleBarClick","handleDetailClose","totals","acc","ChartCard","Result_default","EmptyState_default","ChartLoading_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","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":"6yCAAA,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,WCuBA,IAAMC,GAAS,CACpB,OAAQ,UACR,WAAY,SACd,ECtBI,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,KAAKqC,IAAMA,EAAE,aAAe,GAAK,CAAC,EAC7C,CAACrC,CAAI,CACP,EAEMsC,EAAmB9D,GACvB,IAAMwB,EAAK,KAAKqC,IAAMA,EAAE,iBAAmB,GAAK,CAAC,EACjD,CAACrC,CAAI,CACP,EAEMuC,EAAU/D,GAAQ,IAAwB,CAC9C,GAAI,CAACwB,EAAK,OAAQ,MAAO,CAAC,EAAG,CAAC,EAC9B,IAAMwC,EAAW,KAAK,IACpB,GAAGxC,EAAK,IAAIqC,IAAMA,EAAE,aAAe,IAAMA,EAAE,iBAAmB,EAAE,CAClE,EACA,MAAO,CAAC,EAAGG,EAAW,EAAIA,EAAW,KAAO,CAAC,CAC/C,EAAG,CAACxC,CAAI,CAAC,EAEHyC,EAASjE,GAAQ,IAAM,CAC3B,GAAM,CAAC,CAAEkE,CAAG,EAAIH,EACVI,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,CAACN,CAAO,CAAC,EAENO,EAAkB7C,EAAc,YAAcqC,EAE9CS,EAAc9C,EAAc,QAAUmC,GAAgB,CAACU,EAEvDE,EAAgBxE,GACpB,IAAO0B,EAAY+C,GAAmBC,GACtC,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,OAAQf,EACR,MAAOE,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,GPwBX,mBAAAM,GAEI,OAAA9E,EAII,QAAAmB,OANR,oBA/DJ,IAAM4D,GAAe,CAAC,CACpB,KAAArE,EACA,WAAAsE,EACA,SAAAxD,EACA,aAAAyD,EACA,gBAAAC,CACF,IAAyB,CACvB,IAAMtE,EAAYY,cAEZ,CAACb,EAAewE,CAAgB,EAAIhG,GAAwB,CAChE,OAAQ,GACR,WAAY,EACd,CAAC,EAEK,CAACoB,EAAgB6E,CAAiB,EAAIjG,GAAwB,IAAI,EAElE,CAACkG,EAAYC,CAAa,EAAInG,GAAS,EAAK,EAC5C,CAACoG,EAAeC,CAAgB,EAAIrG,GAAS,EAAE,EAC/C,CAACsG,EAAoBC,CAAqB,EAAIvG,GAAS,CAAC,EAExDwG,EAAoB1G,GAAa2G,GAA+B,CACpET,EAAiBU,IAAS,CAAE,GAAGA,EAAM,CAACD,CAAK,EAAG,CAACC,EAAKD,CAAK,CAAE,EAAE,CAC/D,EAAG,CAAC,CAAC,EAECE,EAAkB7G,GAAkC6E,GAAS,CAC7DA,GAAO,oBAAsB,MAC/BsB,EAAkB,OAAOtB,EAAM,kBAAkB,CAAC,CAEtD,EAAG,CAAC,CAAC,EAECiC,EAAmB9G,GACvB,IAAMmG,EAAkB,IAAI,EAC5B,CAAC,CACH,EAEMY,EAAiB/G,GACpBqB,GAAkB,CACjB,IAAMQ,EAAOJ,EAAKJ,CAAK,EAClBQ,IACL0E,EAAiB1E,EAAK,KAAK,EAC3B4E,EAAsB5E,EAAK,WAAW,EACtCwE,EAAc,EAAI,EACpB,EACA,CAAC5E,CAAI,CACP,EAEMuF,EAAoBhH,GAAY,IAAM,CAC1CqG,EAAc,EAAK,CACrB,EAAG,CAAC,CAAC,EAECY,EAAShH,GAAQ,IAAM,CAC3B,IAAMuF,EAAc/D,EAAK,OACvB,CAACyF,EAAKrF,IAASqF,GAAOrF,EAAK,aAAe,GAC1C,CACF,EACM4D,EAAkBhE,EAAK,OAC3B,CAACyF,EAAKrF,IAASqF,GAAOrF,EAAK,iBAAmB,GAC9C,CACF,EACA,MAAO,CAAE,YAAA2D,EAAa,gBAAAC,CAAgB,CACxC,EAAG,CAAChE,CAAI,CAAC,EAET,OACES,GAAA2D,GAAA,CACE,UAAA3D,GAACiF,EAAA,CACC,UAAApG,EAACX,GAAA,CAAW,MAAM,iCAAiC,EAEnDW,EAACZ,GAAA,CACC,SAAAY,EAACqG,EAAA,CAAO,QAAS3F,EAAK,SAAW,EAAG,MAAOV,EAACsG,EAAA,EAAW,EACrD,SAAAnF,GAAC7B,GAAA,CAAM,IAAK,EACV,UAAAU,EAACV,GAAA,CAAM,QAAS,CAAE,GAAI,OAAQ,GAAI,OAAQ,EACxC,SAAAU,EAAC6E,GAAA,CACC,UAAWjE,EACX,YAAasF,EAAO,YACpB,gBAAiBA,EAAO,gBAC1B,EACF,EAEAlG,EAACuG,EAAA,CAAa,OAAQvB,EACpB,SAAAhF,EAACkE,GAAA,CACC,KAAMxD,EACN,SAAUc,EACV,cAAeb,EACf,eAAgBJ,EAChB,YAAauF,EACb,aAAcC,EACd,WAAYC,EACd,EACF,EAEAhG,EAACuE,GAAA,CACC,cAAe5D,EACf,cAAegF,EACjB,EAEA3F,EAACV,GAAA,CAAM,QAAS,CAAE,GAAI,QAAS,GAAI,MAAO,EACxC,SAAAU,EAAC6E,GAAA,CACC,UAAWjE,EACX,YAAasF,EAAO,YACpB,gBAAiBA,EAAO,gBAC1B,EACF,GACF,EACF,EACF,GACF,EAECX,GAAiBL,GAChBlF,EAACkF,EAAA,CACC,KAAMG,EACN,QAASY,EACT,MAAOV,EACP,SAAU/D,EACV,aAAcyD,EACd,WAAYQ,EACd,GAEJ,CAEJ,EAEOe,GAAQzB,GQ1If,OAAO9D,OAAa,wBACpB,OAAOwF,OAAU,qBACjB,OAAOnH,MAAW,sBAClB,OAAO4B,MAAgB,2BCHvB,OAAO5B,OAAW,sBAClB,OAAO4B,OAAgB,2BAcjB,cAAAlB,GAIA,QAAAmB,OAJA,oBARN,IAAMuF,GAAS,CAAC,CACd,MAAAC,EACA,SAAAnF,EACA,aAAAyD,EACA,YAAA2B,CACF,IAEIzF,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,SAAAyF,EACH,EAAa,SAEb3G,GAACkB,GAAA,CAAW,QAAQ,QAAQ,WAAY,EACrC,SAAA2F,GAAiBrF,CAAQ,EAC5B,EAAa,SAEbxB,GAACkB,GAAA,CAAW,QAAQ,QAAQ,WAAY,EACrC,SAAA+D,EACH,EAAa,SAEbjF,GAACkB,GAAA,CAAW,QAAQ,QAAQ,MAAM,iBAAiB,OAAM,GACtD,SAAA0F,EACH,GACF,GACF,EAIGE,GAAQJ,GC9Cf,OAAOK,OAAgB,wBACvB,OAAOzH,OAAW,sBAClB,OAAS,SAAA0H,GAAO,UAAAC,OAAc,uBAEvB,IAAMC,GAAgBD,GAAOF,EAAU,EAAE,KAAO,CACrD,OAAQ,GACR,UAAW,SAEX,YAAa,QACf,EAAE,EAEWI,GAAsBF,GAAO3H,EAAK,EAAE,CAAC,CAAE,MAAA8H,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,YAAAtC,GA7LZ,OAAA9E,EA4DE,QAAAmB,MA5DF,oBAFJ,IAAMkG,GAAcC,GAClBtH,EAACV,EAAA,CAAM,eAAe,SAAS,OAAQ,EACrC,SAAAU,EAACkB,EAAA,CAAW,QAAQ,QAAQ,MAAM,eAC/B,SAAAoG,EAAM,GACT,EACF,EAGIC,GAAiB,CACrBD,EACAE,IAEAxH,EAACV,EAAA,CAAM,eAAe,SAAS,OAAQ,EACpC,SAAAgI,GAAO,SAAS,IAAME,EACrBxH,EAACyG,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,EAEAtH,EAACkB,EAAA,CAAW,QAAQ,QAAQ,MAAM,eAAe,OAAM,GACpD,SAAAoG,EAAM,SAAS,MAAQ,IAC1B,EAEJ,EAGIG,GAAiBH,GACrBtH,EAACV,EAAA,CAAM,eAAe,SAAS,OAAQ,EACrC,SAAAU,EAACkB,EAAA,CAAW,QAAQ,QAAQ,MAAM,eAC/B,SAAAiB,EAAamF,EAAM,WAAW,EACjC,EACF,EAGII,GAAgBJ,GACpBtH,EAACV,EAAA,CAAM,eAAe,SAAS,OAAQ,EACpC,SAAAgI,EAAM,iBACLtH,EAACkB,EAAA,CAAW,QAAQ,QAAQ,MAAM,eAC/B,SAAAyG,GAAML,EAAM,iBAAkB,YAAY,EAC7C,EAEA,IAEJ,EAGIM,GAAkBN,GACtBtH,EAACV,EAAA,CAAM,eAAe,SAAS,OAAQ,EACpC,SAAAgI,EAAM,QAAU,IACnB,EAGIO,GAA0BP,GAC9BtH,EAACmH,GAAA,CACC,SAAAhG,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,SAAAoG,EAAM,GACT,GACF,EAEAnG,EAAC7B,EAAA,CACC,UAAAU,EAACkB,EAAA,CAAW,QAAQ,QAAQ,MAAM,iBAAiB,mBAEnD,EACAlB,EAACkB,EAAA,CAAW,QAAQ,YAAY,MAAM,eACnC,SAAAoG,EAAM,SAAS,MAAQ,IAC1B,GACF,EAEAnG,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,EAAamF,EAAM,WAAW,EACjC,GACF,EAEAtH,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,SAAAoG,EAAM,iBACHK,GAAML,EAAM,iBAAkB,YAAY,EAC1C,IACN,GACF,GACF,EAEAnG,EAAC7B,EAAA,CAAM,IAAK,GACV,UAAAU,EAACkB,EAAA,CAAW,QAAQ,QAAQ,MAAM,iBAAiB,kBAEnD,EACAlB,EAACkB,EAAA,CAAW,QAAQ,YAAY,MAAM,eACnC,SAAAoG,EAAM,QAAU,IACnB,GACF,GACF,GAxDwBA,EAAM,EAyDhC,EAGIQ,GAAiB,CAAC,CACtB,KAAAC,EACA,QAAAC,EACA,MAAArB,EACA,SAAAnF,EACA,aAAAyD,EACA,WAAAgD,EACA,YAAArB,EACA,OAAAsB,EACA,KAAAC,EACA,MAAApH,EACA,UAAAqH,EACA,WAAApD,EACA,KAAAqD,EACA,QAAAC,EACA,SAAAC,EACA,mBAAAC,EACA,iBAAAhB,EACA,eAAAiB,CACF,IAA2B,CACzB,IAAM9D,EAAWC,EAAc,OAAQ,IAAI,EAErC8D,EACJvH,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,oBACzCgH,GACV,EAEAlI,EAACkB,EAAA,CAAW,QAAQ,YAAY,MAAM,eACnC,SAAAiB,EAAa8F,CAAU,EAC1B,GACF,EAEAjI,EAACkH,GAAA,CAAc,YAAY,WAAW,SAAQ,GAAC,EAE/C/F,EAAC7B,EAAA,CACC,UAAA6B,EAACD,EAAA,CAAW,QAAQ,QAAQ,MAAM,iBAAiB,6BAChCgH,GACnB,EAEAlI,EAACkB,EAAA,CAAW,QAAQ,YAAY,MAAM,eACnC,SAAAH,EACH,GACF,GACF,EAEAf,EAAC2I,GAAA,CACC,KAAK,QACL,YAAY,SACZ,SAAUJ,EACV,QAAQ,SACR,aAAa,QACb,GAAI,CAAE,SAAU,GAAI,EACtB,GACF,EAEAvI,EAAC4I,GAAA,CACC,MAAM,UACN,OAAQ5I,EAAA8E,GAAA,EAAE,EACV,YAAa,CAAE,EAAG,CAAE,EACpB,QAAS,CACP,CACE,MAAO,cACP,WAAY,SACZ,KAAM,EACN,WAAY,CAAC,CAAE,IAAA+D,CAAI,IAA4BxB,GAAWwB,CAAG,CAC/D,EACA,CACE,MAAO,eACP,WAAY,UACZ,KAAM,EACN,WAAY,CAAC,CAAE,IAAAA,CAAI,IACjBtB,GAAesB,EAAKrB,CAAgB,CACxC,EACA,CACE,MAAO,cACP,WAAY,kBACZ,KAAM,EACN,WAAY,CAAC,CAAE,IAAAqB,CAAI,IAA4BpB,GAAcoB,CAAG,CAClE,EACA,CACE,MAAO,aACP,WAAY,OACZ,KAAM,EACN,WAAY,CAAC,CAAE,IAAAA,CAAI,IAA4BnB,GAAamB,CAAG,CACjE,EACA,CACE,MAAO,cACP,WAAY,SACZ,KAAM,EACN,WAAY,CAAC,CAAE,IAAAA,CAAI,IAA4BjB,GAAeiB,CAAG,CACnE,CACF,EACA,KAAMV,EACN,SAAUpH,EACV,aAAeL,GACb+H,EAAiBA,EAAe/H,CAAI,EAAImH,GAAuBnH,CAAI,EAErE,QAAS0H,EACT,SAAUpD,EACV,gBAAiB,CAAE,KAAAqD,EAAM,SAAUC,CAAQ,EAC3C,mBAAoBE,EACpB,eAAe,SACf,2BAA0B,GAC1B,kBAAiB,GACjB,eAAgB,CAAE,OAAQ,GAAI,EAChC,GACF,EAGIM,EACJ9I,EAAC8G,GAAA,CACC,MAAOH,EACP,SAAUnF,EACV,aAAcyD,EACd,YAAa2B,EACf,EAGF,OAAIjC,EAEA3E,EAAC+I,GAAA,CACC,KAAMhB,EACN,QAASC,EACT,YAAac,EACb,YAAa,CACX,UAAW,cACX,GAAI,CAAE,kBAAmB,CAAE,SAAU,EAAG,SAAU,QAAS,CAAE,CAC/D,EAEC,SAAAJ,EACH,EAKF1I,EAACgJ,GAAA,CACC,KAAMjB,EACN,QAASC,EACT,SAAS,KACT,YAAac,EACb,iBAAkB,CAAE,GAAI,CAAE,KAAM,EAAG,SAAU,QAAS,CAAE,EACxD,UAAS,GAER,SAAAJ,EACH,CAEJ,EAEOO,GAAQnB,GG7Sf,OAAS,eAAA7I,GAAa,WAAAC,OAAe,QCG9B,IAAMgK,GAAe,CAC1B3H,EACAC,IAC2C,CAC3C,IAAMG,EAAQJ,EAAM,MAAM,GAAG,EAE7B,GAAIC,aAA+BG,EAAM,SAAW,EAAG,CACrD,IAAMwH,EAAO,GAAGxH,EAAM,CAAC,KAAKA,EAAM,CAAC,KAAKA,EAAM,CAAC,IAC/C,MAAO,CAAE,UAAWwH,EAAM,QAASA,CAAK,EAG1C,IAAMC,EAAO,SAASzH,EAAM,CAAC,EAAG,EAAE,EAC5BE,EAAQ,SAASF,EAAM,CAAC,EAAG,EAAE,EAC7B0H,EAAU,IAAI,KAAKD,EAAMvH,EAAO,CAAC,EAAE,QAAQ,EAEjD,MAAO,CACL,UAAW,GAAGF,EAAM,CAAC,KAAKA,EAAM,CAAC,OACjC,QAAS,GAAGA,EAAM,CAAC,KAAKA,EAAM,CAAC,KAAK,OAAO0H,CAAO,EAAE,SAAS,EAAG,GAAG,GACrE,CACF,EAEaC,GAAiB,CAAC/H,EAAeC,IAA+B,CAC3E,IAAMG,EAAQJ,EAAM,MAAM,GAAG,EACvBK,EAAa,SAASD,EAAM,CAAC,EAAG,EAAE,EAAI,EACtC4H,EAAYzH,EAAkBF,CAAU,GAAK,GAEnD,GAAIJ,aAA+BG,EAAM,SAAW,EAAG,CACrD,IAAM6H,EAAM,SAAS7H,EAAM,CAAC,EAAG,EAAE,EACjC,MAAO,GAAG4H,WAAmBC,IAG/B,OAAOD,CACT,EAEaE,GAAmBjI,GAC9BA,cAAgC,YAAW,SD9B7C,IAAMkI,GAAyB,CAACnI,EAAeC,IAAuB,CACpE,GAAM,CAAE,KAAA6G,EAAM,QAAAC,EAAS,OAAAqB,EAAQ,4BAAAC,EAA6B,aAAAC,CAAa,EACvEC,GAAY,EAER,CAAE,UAAAC,EAAW,QAAAC,CAAQ,EAAI9K,GAC7B,IAAMgK,GAAa3H,EAAOC,CAAQ,EAClC,CAACD,EAAOC,CAAQ,CAClB,EAEMoF,EAAc1H,GAClB,IAAMoK,GAAe/H,EAAOC,CAAQ,EACpC,CAACD,EAAOC,CAAQ,CAClB,EAEM0G,EAASuB,GAAgBjI,CAAQ,EAEjCyI,EAAc/K,GAAQ,KACnB,CACL,KAAAmJ,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,EAAyBjL,GAC7B,CAACkL,EAAiBC,IAAwB,CACxCR,EAA4B,CAAE,KAAMO,EAAS,SAAUC,CAAY,CAAC,CACtE,EACA,CAACR,CAA2B,CAC9B,EAEA,MAAO,CACL,KAAAvB,EACA,QAAAC,EACA,YAAA1B,EACA,OAAAsB,EACA,YAAA+B,EACA,aAAAJ,EACA,uBAAAK,CACF,CACF,EAEOG,GAAQX,GEtEf,OAAS,eAAAzK,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,iBAAA4K,GACA,QAAAC,GACA,uBAAA5K,GACA,WAAAC,GACA,SAAAC,GACA,SAAAC,OACK,WC2BA,IAAMC,EAAS,CACpB,MAAO,UACP,SAAU,UACV,KAAM,SACR,EC1BI,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,IAAMqJ,GAAwB,CAAC,CAC7B,OAAAnJ,EACA,QAAAC,EACA,MAAAC,EACA,SAAAC,CACF,IAA0B,CACxB,GAAI,CAACH,GAAU,CAACC,GAAS,OAAQ,OAAO,KAExC,IAAMG,EAAUD,YAEVd,EAAOY,EAAQ,CAAC,EAAE,QAClBmJ,EAAW,OAAO/J,EAAK,QAAQ,GAAK,EACpCgK,EAAW,OAAOhK,EAAK,QAAQ,GAAK,EACpCiK,EAAO,OAAOjK,EAAK,IAAI,GAAK,EAE5BkK,EAAcD,EAAO,EAAKF,EAAWE,EAAQ,IAAM,EACnDE,EAAMF,EAAOF,EAAWE,EAAOF,EAAW,EAE1CK,EAAcrJ,EAAU,SAAW,YACnCsJ,EAAUtJ,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,aAAa+I,IACnB,MAAO3I,EAAasI,CAAQ,EAC5B,MAAO1K,EAAO,KAChB,EACA,CACE,KAAM,YAAY+K,IAClB,MAAO3I,EAAauI,CAAQ,EAC5B,MAAO3K,EAAO,QAChB,EACA,CACE,KAAM,QAAQgL,IACd,MAAO5I,EAAawI,CAAI,EACxB,MAAO5K,EAAO,IAChB,EACA,CACE,KAAM,cACN,MAAO,GAAG6K,EAAY,QAAQ,CAAC,KAC/B,MAAO,SACT,EACA,CACE,KAAM,OAAOE,IACb,MAAO3I,EAAa0I,CAAG,EACvB,MAAO,SACT,CACF,EAEA,OACE1J,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,GAAQoI,GH/ET,OAYE,OAAAxK,EAZF,QAAAmB,OAAA,oBAfN,IAAM6J,GAAa,CAAC,CAClB,KAAAtK,EACA,cAAAC,EACA,QAAAsC,EACA,OAAAE,EACA,SAAA3B,EACA,eAAAjB,EACA,YAAA+B,EACA,aAAAC,EACA,WAAAC,CACF,IAAuB,CACrB,IAAMyI,EAAchM,GAAa+E,GAAcC,EAAeD,CAAC,EAAG,CAAC,CAAC,EAEpE,OACEhE,EAACL,GAAA,CAAoB,MAAM,OAAO,OAAQ,IACxC,SAAAwB,GAACmJ,GAAA,CACC,KAAM5J,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,GACjB,EAEA5D,EAACF,GAAA,CACC,SAAU,GACV,SAAU,GACV,KAAM,CAAE,SAAU,GAAI,KAAM,SAAU,EACtC,cAAemL,EACf,OAAQhI,EACR,MAAOE,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,EAACuK,GAAA,CACC,QAAQ,OACR,KAAK,OACL,OAAQxK,EAAO,KACf,YAAa,EACb,gBAAgB,MAChB,IAAK,GACL,kBAAmB,GACrB,EAGDY,EAAc,UACbX,EAACuK,GAAA,CACC,QAAQ,WACR,KAAK,SACL,OAAQxK,EAAO,MACf,YAAa,EACb,IAAK,CACH,KAAMA,EAAO,MACb,EAAG,EACH,YAAa,CACf,EACA,kBAAmB,GACrB,EAGDY,EAAc,UACbX,EAACuK,GAAA,CACC,QAAQ,WACR,KAAK,WACL,OAAQxK,EAAO,SACf,YAAa,EACb,gBAAgB,MAChB,IAAK,CACH,KAAMA,EAAO,SACb,EAAG,EACH,YAAa,CACf,EACA,kBAAmB,GACrB,GAEJ,EACF,CAEJ,EAEOmL,GAAQF,GI/Hf,OAAS,WAAA9L,OAAe,QACxB,OACE,OAAAM,GACA,iBAAAE,GACA,iBAAA4K,GACA,QAAAC,GACA,uBAAA5K,GACA,WAAAC,GACA,SAAAC,GACA,SAAAC,OACK,WAuCD,OAkBE,OAAAE,EAlBF,QAAAmB,OAAA,oBA3BN,IAAMgK,GAAe,CAAC,CACpB,KAAAzK,EACA,cAAAC,EACA,QAAAsC,EACA,OAAAE,EACA,mBAAAtC,EACA,eAAAN,EACA,YAAA+B,EACA,aAAAC,EACA,WAAAC,EACA,SAAAhB,CACF,IAAyB,CACvB,IAAM4J,EAAiBlM,GACrB,IACE2B,EACI,GACA,CACE,SAAU,MACV,SAAU,GACV,KAAM,UACN,UAAYwK,GAAmBlJ,EAAa,OAAOkJ,CAAK,CAAC,CAC3D,EACN,CAACxK,CAAkB,CACrB,EAEA,OACEb,EAACL,GAAA,CAAoB,MAAM,OAAO,OAAQ,IACxC,SAAAwB,GAACmJ,GAAA,CACC,KAAM5J,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,GACjB,EAEA3D,EAACF,GAAA,CACC,SAAU,GACV,SAAU,GACV,KAAM,CAAE,SAAU,GAAI,KAAM,SAAU,EACtC,cAAgBkE,GAAcC,EAAeD,CAAC,EAC9C,OAAQf,EACR,MAAOE,EACT,EAEAnD,EAACJ,GAAA,CAAQ,QAASI,EAACoC,GAAA,CAAsB,SAAUZ,EAAU,EAAI,EAEhEb,EAAc,MACbX,EAACuK,GAAA,CACC,QAAQ,OACR,KAAK,OACL,OAAQxK,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,MAAO6K,EACT,EAGDzK,EAAc,UACbX,EAACuK,GAAA,CACC,QAAQ,WACR,KAAK,WACL,OAAQxK,EAAO,SACf,YAAa,EACb,gBAAgB,MAChB,IAAK,CACH,KAAMA,EAAO,SACb,EAAG,EACH,YAAa,CACf,EACA,kBAAmB,GACrB,GAEJ,EACF,CAEJ,EAEOuL,GAAQH,GLhFP,cAAAnL,OAAA,oBAtDR,IAAMuL,GAAsB,CAAC,CAC3B,KAAA7K,EACA,SAAAc,EACA,cAAAb,EACA,QAAAsC,EACA,OAAAE,EACA,YAAA8H,EACA,WAAAzI,CACF,IAAgC,CAC9B,GAAM,CAACjC,EAAgB6E,CAAiB,EAAIjG,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,EAErCmF,EAAmB9G,GACvB,IAAMmG,EAAkB,IAAI,EAC5B,CAAC,CACH,EAEMU,EAAkB7G,GAAkC6E,GAAS,CAC7DA,GAAO,oBAAsB,MAC/BsB,EAAkB,OAAOtB,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,GAACsL,GAAA,CACC,KAAM5K,EACN,cAAeC,EACf,QAASsC,EACT,OAAQE,EACR,YAAa8H,EACb,mBAAoBpK,EACpB,eAAgBN,EAChB,YAAauF,EACb,aAAcC,EACd,WAAYvD,EACZ,SAAUhB,EACZ,EACF,EAKFxB,GAAC6D,EAAA,CAAa,IAAKjB,EACjB,SAAA5C,GAACkL,GAAA,CACC,KAAMxK,EACN,cAAeC,EACf,QAASsC,EACT,OAAQE,EACR,YAAa8H,EACb,SAAUzJ,EACV,eAAgBjB,EAChB,YAAauF,EACb,aAAcC,EACd,WAAYvD,EACd,EACF,CAEJ,EAEO0B,GAAQqH,GMnGf,OAAOpH,OAAc,yBACrB,OAAOC,OAAsB,iCAC7B,OAAO9E,OAAW,sBAQhB,OAGM,OAAAU,GAHN,QAAAmB,OAAA,oBAJF,IAAMqK,GAAuB,CAAC,CAC5B,cAAA7K,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,GAAQiH,GC9Cf,OAAOvK,OAAa,wBACpB,OAAO3B,MAAW,sBAClB,OAAO4B,MAAgB,2BAmBf,cAAAlB,EAWA,QAAAmB,MAXA,oBAXR,IAAMqD,GAAU,CAAC,CAAE,KAAAiH,EAAM,UAAA7K,EAAW,eAAA8K,CAAe,IAAoB,CACrE,IAAM/G,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,EAAasJ,GAAM,QAAQ,EAC9B,GACF,EAEAzL,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,EAAasJ,GAAM,QAAQ,EAC9B,GACF,EAEAzL,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,EAEC8K,GACH,EAEA1L,EAACkB,EAAA,CAAW,QAAQ,YAAa,SAAAiB,EAAasJ,GAAM,IAAI,EAAE,GAC5D,EAEAzL,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,SAAAyK,GAASF,GAAM,aAAe,EAAG,CAChC,sBAAuB,EACvB,sBAAuB,CACzB,CAAC,EACH,GACF,EAEAzL,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,EAAC4L,GAAA,CACC,KAAK,8IACL,MAAO,GACP,MAAK,GACL,GAAI,CAAE,GAAI,GAAK,EACjB,GACF,EAEA5L,EAACkB,EAAA,CAAW,QAAQ,YAAa,SAAAiB,EAAasJ,GAAM,GAAG,EAAE,GAC3D,GACF,CAEJ,EAEO5G,GAAQL,GR/BX,mBAAAM,GAEI,OAAA9E,EAII,QAAAmB,OANR,oBAxEJ,IAAM0K,GAAiB,CAAC,CACtB,KAAAnL,EACA,WAAAsE,EACA,KAAAyG,EACA,SAAAjK,EACA,aAAAyD,EACA,eAAAyG,EACA,gBAAAxG,CACF,IAA2B,CACzB,GAAM,CAACvE,EAAewE,CAAgB,EAAIhG,GAA2B,CACnE,SAAU,GACV,SAAU,GACV,KAAM,EACR,CAAC,EAEK,CAACkG,EAAYC,CAAa,EAAInG,GAAS,EAAK,EAC5C,CAACoG,EAAeC,CAAgB,EAAIrG,GAAS,EAAE,EAC/C,CAACsG,EAAoBC,CAAqB,EAAIvG,GAAS,CAAC,EAExDyB,EAAYY,cAEZyB,EAAU/D,GAAQ,IAAwB,CAC9C,GAAI,CAACwB,EAAK,OAAQ,MAAO,CAAC,EAAG,CAAC,EAE9B,IAAMoL,EAASpL,EAAK,QAAQI,GAAQ,CAClC,OAAOA,EAAK,QAAQ,GAAK,EACzB,OAAOA,EAAK,QAAQ,GAAK,EACzB,OAAOA,EAAK,IAAI,GAAK,CACvB,CAAC,EAEKsC,EAAM,KAAK,IAAI,GAAG0I,CAAM,EAE9B,MAAO,CAAC,EAAG1I,EAAM,EAAIA,EAAM,KAAO,CAAC,CACrC,EAAG,CAAC1C,CAAI,CAAC,EAEHyC,EAASjE,GAAQ,IAAM,CAC3B,GAAM,CAAC,CAAEkE,CAAG,EAAIH,EAEVI,EAAOD,EAAM,EAEb2I,EAAQ,MAAM,KAAK,CAAE,OAAQ,CAAE,EAAG,CAACzI,GAAGC,KAAM,KAAK,MAAMF,EAAOE,EAAC,CAAC,EAEtE,MAAO,CAAC,GAAG,IAAI,IAAIwI,CAAK,CAAC,CAC3B,EAAG,CAAC9I,CAAO,CAAC,EAEN+I,EAAqB/M,GAAagN,GAAgC,CACtE9G,EAAiBU,IAAS,CAAE,GAAGA,EAAM,CAACoG,CAAG,EAAG,CAACpG,EAAKoG,CAAG,CAAE,EAAE,CAC3D,EAAG,CAAC,CAAC,EAECtG,EAAoB1G,GACvBiN,GAAmBF,EAAmBE,CAAgC,EACvE,CAACF,CAAkB,CACrB,EAEMhG,EAAiB/G,GACpBqB,GAAkB,CACjB,IAAMQ,EAAOJ,EAAKJ,CAAK,EAClBQ,IACL0E,EAAiB1E,EAAK,KAAK,EAC3B4E,EAAsB5E,EAAK,QAAQ,EACnCwE,EAAc,EAAI,EACpB,EACA,CAAC5E,CAAI,CACP,EAEMuF,EAAoBhH,GAAY,IAAM,CAC1CqG,EAAc,EAAK,CACrB,EAAG,CAAC,CAAC,EAEC2F,EAAchM,GAAa+E,GAAcC,EAAeD,CAAC,EAAG,CAAC,CAAC,EAEpE,OACE7C,GAAA2D,GAAA,CACE,UAAA3D,GAACiF,EAAA,CACC,UAAApG,EAACX,GAAA,CAAW,MAAM,2BAAqB,EAEvCW,EAACZ,GAAA,CACC,SAAAY,EAACqG,EAAA,CAAO,QAAS3F,EAAK,SAAW,EAAG,MAAOV,EAACsG,EAAA,EAAW,EACrD,SAAAnF,GAAC7B,GAAA,CAAM,IAAK,EACV,UAAAU,EAACV,GAAA,CAAM,QAAS,CAAE,GAAI,OAAQ,GAAI,OAAQ,EACxC,SAAAU,EAAC6E,GAAA,CACC,KAAM4G,EACN,UAAW7K,EACX,eAAgB8K,EAClB,EACF,EAEA1L,EAACuG,EAAA,CAAa,OAAQvB,EACpB,SAAAhF,EAACkE,GAAA,CACC,KAAMxD,EACN,SAAUc,EACV,cAAeb,EACf,QAASsC,EACT,OAAQE,EACR,YAAa8H,EACb,WAAYjF,EACd,EACF,EAEAhG,EAACuE,GAAA,CACC,cAAe5D,EACf,cAAegF,EACjB,EAEA3F,EAACV,GAAA,CAAM,QAAS,CAAE,GAAI,QAAS,GAAI,MAAO,EACxC,SAAAU,EAAC6E,GAAA,CACC,KAAM4G,EACN,UAAW7K,EACX,eAAgB8K,EAClB,EACF,GACF,EACF,EACF,GACF,EAECnG,GAAiBL,GAChBlF,EAACkF,EAAA,CACC,KAAMG,EACN,QAASY,EACT,MAAOV,EACP,SAAU/D,EACV,aAAcyD,EACd,WAAYQ,EACd,GAEJ,CAEJ,EAEO0G,GAAQN,GSnJf,OAAS,eAAA5M,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,WCiBA,IAAMC,GAAS,CACpB,SAAU,UACV,SAAU,SACZ,EChBI,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,IAAMoM,GAAqB,CAAC,CAC1B,EAAAlM,EAAI,EACJ,EAAAC,EAAI,EACJ,MAAAC,EAAQ,EACR,OAAAC,EAAS,EACT,MAAAC,EACA,eAAAC,EACA,aAAA8L,CACF,IACM9L,IAAmBD,EAAc,KAGnCN,GAAC,QACC,EAAGE,EAAI,EACP,EAAGC,EACH,MAAOkM,EAAejM,EAAQ,EAAI,EAAI,GAAKA,EAAQ,GACnD,OAAQC,EAAS,EACjB,KAAK,UACL,QAAS,IACT,GAAI,EACN,EAIGiM,GAAQF,GC1Bf,OAAOnL,OAAa,wBACpB,OAAO3B,OAAW,sBAClB,OAAO4B,OAAgB,2BAmCjB,cAAAlB,GAgBM,QAAAmB,OAhBN,oBA1BN,IAAMoL,GAAuB,CAAC,CAC5B,OAAAlL,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,GAAQmK,GJ0BP,OAaE,OAAAvM,EAbF,QAAAmB,OAAA,oBA5ER,IAAMqL,GAAgB,CAAC,CACrB,KAAA9L,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,EAErC+L,EAAkBvN,GACtB,IAAMwB,EAAK,KAAKI,GAAQA,EAAK,eAAiB,CAAC,EAC/C,CAACJ,CAAI,CACP,EAEMgM,EAAkBxN,GACtB,IAAMwB,EAAK,KAAKI,GAAQA,EAAK,eAAiB,CAAC,EAC/C,CAACJ,CAAI,CACP,EAEMuC,EAAU/D,GAAQ,IAAwB,CAC9C,GAAI,CAACwB,EAAK,OAAQ,MAAO,CAAC,EAAG,CAAC,EAC9B,IAAMoL,EAASpL,EAAK,QAAQI,GAAQ,CAClCA,EAAK,eACLA,EAAK,cACP,CAAC,EACKsC,EAAM,KAAK,IAAI,GAAG0I,CAAM,EAC9B,MAAO,CAAC,EAAG1I,EAAM,EAAIA,EAAM,KAAO,CAAC,CACrC,EAAG,CAAC1C,CAAI,CAAC,EAEHyC,EAASjE,GAAQ,IAAM,CAC3B,GAAM,CAAC,CAAEkE,CAAG,EAAIH,EACVI,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,CAACN,CAAO,CAAC,EAENS,EAAgBxE,GACpB,IAAO0B,EAAY+C,GAAmBC,GACtC,CAAChD,CAAS,CACZ,EAEMyL,EACJ1L,EAAc,UACd8L,GACA9L,EAAc,UACd+L,EAEF,OACE1M,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,cAAgBkE,GAAcC,EAAeD,CAAC,EAC9C,OAAQf,EACR,MAAOE,EACT,EAEAnD,EAACJ,GAAA,CACC,QAASI,EAACoC,GAAA,CAAqB,SAAUZ,EAAU,EACnD,OAAQ,GACV,EAECb,EAAc,UAAY8L,GACzBzM,EAACR,GAAA,CACC,QAAQ,iBACR,KAAK,YACL,KAAMO,GAAO,SACb,WAAY,GACZ,kBAAmB,GACnB,OAAQ,CAAC,EAAG,EAAG,EAAG,CAAC,EACnB,WACEC,EAACsM,GAAA,CACC,eAAgB/L,EAChB,aAAc8L,EAChB,EAEJ,EAGD1L,EAAc,UAAY+L,GACzB1M,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,GAAQsI,GKxLf,OAAOrI,OAAc,yBACrB,OAAOC,OAAsB,iCAC7B,OAAO9E,OAAW,sBAKhB,OAGM,OAAAU,GAHN,QAAAmB,OAAA,oBADF,IAAMwL,GAAsB,CAAC,CAAE,cAAAhM,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,GAAQoI,GChCf,OAAO1L,OAAa,wBACpB,OAAO3B,OAAW,sBAClB,OAAO4B,OAAgB,2BAuBf,cAAAlB,EAUF,QAAAmB,OAVE,oBAhBR,IAAMyL,GAAuB,CAAC,CAC5B,cAAAC,EACA,cAAAC,EACA,WAAAC,EACA,UAAAnM,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,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,iBAC/B,SAAAN,EAAY,yBAA2B,4BAC1C,EAEAZ,EAACkB,GAAA,CAAW,QAAQ,YACjB,SAAAiB,EAAa2K,CAAa,EAC7B,GACF,EAEA9M,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,UAAA6L,EAAW,KAAC,GAC/C,GACF,CAEJ,EAEOlI,GAAQ+H,GPnBT,cAAA5M,EAII,QAAAmB,OAJJ,oBA1CN,IAAM6L,GAAgB,CAAC,CAAE,KAAAtM,EAAM,SAAAc,EAAU,WAAAwD,CAAW,IAA0B,CAC5E,IAAMpE,EAAYY,cAEZ,CAACb,EAAewE,CAAgB,EAAIhG,GAAwB,CAChE,SAAU,GACV,SAAU,EACZ,CAAC,EACK,CAACoB,EAAgB6E,CAAiB,EAAIjG,GAAwB,IAAI,EAElEwG,EAAoB1G,GAAa2G,GAA+B,CACpET,EAAiBU,IAAS,CAAE,GAAGA,EAAM,CAACD,CAAK,EAAG,CAACC,EAAKD,CAAK,CAAE,EAAE,CAC/D,EAAG,CAAC,CAAC,EAECE,EAAkB7G,GAAkC6E,GAAS,CAC7DA,GAAO,oBAAsB,MAC/BsB,EAAkB,OAAOtB,EAAM,kBAAkB,CAAC,CAEtD,EAAG,CAAC,CAAC,EAECiC,EAAmB9G,GACvB,IAAMmG,EAAkB,IAAI,EAC5B,CAAC,CACH,EAEMc,EAAShH,GAAQ,IAAM,CAC3B,IAAM4N,EAAgBpM,EAAK,OACzB,CAACyF,EAAKrF,IAASqF,GAAOrF,EAAK,gBAAkB,GAC7C,CACF,EAEM+L,EAAgBnM,EAAK,OACzB,CAACyF,EAAKrF,IAASqF,GAAOrF,EAAK,gBAAkB,GAC7C,CACF,EAEMiM,EACJF,EAAgB,EAAI,KAAK,MAAOC,EAAgBD,EAAiB,GAAG,EAAI,EAC1E,MAAO,CAAE,cAAAC,EAAe,cAAAD,EAAe,WAAAE,CAAW,CACpD,EAAG,CAACrM,CAAI,CAAC,EAET,OACES,GAACiF,EAAA,CACC,UAAApG,EAACX,GAAA,CAAW,MAAM,6CAAuC,EAEzDW,EAACZ,GAAA,CACC,SAAAY,EAACqG,EAAA,CAAO,QAAS3F,EAAK,SAAW,EAAG,MAAOV,EAACsG,EAAA,EAAW,EACrD,SAAAnF,GAAC7B,GAAA,CAAM,IAAK,EACV,UAAAU,EAACV,GAAA,CAAM,QAAS,CAAE,GAAI,OAAQ,GAAI,OAAQ,EACxC,SAAAU,EAAC6E,GAAA,CACC,cAAeqB,EAAO,cACtB,cAAeA,EAAO,cACtB,WAAYA,EAAO,WACnB,UAAWtF,EACb,EACF,EAEAZ,EAACuG,EAAA,CAAa,OAAQvB,EACpB,SAAAhF,EAACkE,GAAA,CACC,KAAMxD,EACN,SAAUc,EACV,cAAeb,EACf,eAAgBJ,EAChB,YAAauF,EACb,aAAcC,EAChB,EACF,EAEA/F,EAACuE,GAAA,CACC,cAAe5D,EACf,cAAegF,EACjB,EAEA3F,EAACV,GAAA,CAAM,QAAS,CAAE,GAAI,QAAS,GAAI,MAAO,EACxC,SAAAU,EAAC6E,GAAA,CACC,cAAeqB,EAAO,cACtB,cAAeA,EAAO,cACtB,WAAYA,EAAO,WACnB,UAAWtF,EACb,EACF,GACF,EACF,EACF,GACF,CAEJ,EAEOqM,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 ChartLoading from 'components/Analytics/ChartLoading';\nimport { ChartCard } from 'components/Analytics/ChartStyles';\nimport EmptyState from 'components/Analytics/EmptyState';\nimport Result from 'components/Result';\nimport { ViewMode } from 'utils/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 isFetching,\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 <ChartLoading active={isFetching}>\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 </ChartLoading>\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 'utils/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 {\n OverviewDetailBaseProps,\n QuotationDashboardSeriesItem,\n} from 'types/overviewAnalytics';\nimport { ViewMode } from 'utils/analytics';\n\nexport interface OrdersByTypeProps {\n data: QuotationDashboardSeriesItem[];\n isFetching?: boolean;\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 'utils/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'}&ensp;\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 'utils/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 &#x2022;\n <Typography variant=\"body2\" flexShrink={0}>\n {VIEW_MODE_LABELS[viewMode]}\n </Typography>\n &#x2022;\n <Typography variant=\"body2\" flexShrink={0}>\n {selectedYear}\n </Typography>\n &#x2022;\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 { Filter, GridQuery } from 'types/filter';\nimport { ViewMode } from 'utils/analytics';\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 'utils/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 ChartLoading from 'components/Analytics/ChartLoading';\nimport { ChartCard } from 'components/Analytics/ChartStyles';\nimport EmptyState from 'components/Analytics/EmptyState';\nimport Result from 'components/Result';\nimport { ViewMode } from 'utils/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 isFetching,\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 <ChartLoading active={isFetching}>\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 </ChartLoading>\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 'utils/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 {\n OverviewDetailBaseProps,\n RevenueGoalDashboardKpis,\n RevenueGoalDashboardSeriesItem,\n} from 'types/overviewAnalytics';\nimport { ViewMode } from 'utils/analytics';\n\nexport interface SalesEvolutionProps {\n data: RevenueGoalDashboardSeriesItem[];\n kpis?: RevenueGoalDashboardKpis;\n isFetching?: boolean;\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 'utils/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 ChartLoading from 'components/Analytics/ChartLoading';\nimport { ChartCard } from 'components/Analytics/ChartStyles';\nimport EmptyState from 'components/Analytics/EmptyState';\nimport Result from 'components/Result';\nimport { ViewMode } from 'utils/analytics';\n\nimport ForecastChart from './Chart';\nimport SalesForecastLegend from './Legend';\nimport { SalesForecastProps, VisibleSeries } from './props';\nimport SalesForecastSummary from './Summary';\n\nconst SalesForecast = ({ data, viewMode, isFetching }: 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 <ChartLoading active={isFetching}>\n <ForecastChart\n data={data}\n viewMode={viewMode}\n visibleSeries={visibleSeries}\n activeBarIndex={activeBarIndex}\n onMouseMove={handleMouseMove}\n onMouseLeave={handleMouseLeave}\n />\n </ChartLoading>\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 'utils/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 { SalesForecastDashboardSeriesItem } from 'types/overviewAnalytics';\nimport { ViewMode } from 'utils/analytics';\n\nexport interface SalesForecastProps {\n data: SalesForecastDashboardSeriesItem[];\n isFetching?: boolean;\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 'utils/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"]}
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","d","hasQuotationData","yDomain","maxTotal","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","isFetching","selectedYear","DetailComponent","setVisibleSeries","setActiveBarIndex","detailOpen","setDetailOpen","selectedLabel","setSelectedLabel","selectedTotalValue","setSelectedTotalValue","handleToggleSerie","serie","prev","handleMouseMove","handleMouseLeave","handleBarClick","handleDetailClose","totals","acc","ChartCard","Result_default","EmptyState_default","ChartLoading_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","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":"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","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 ChartLoading from 'components/Analytics/ChartLoading';\nimport { ChartCard } from 'components/Analytics/ChartStyles';\nimport EmptyState from 'components/Analytics/EmptyState';\nimport Result from 'components/Result';\nimport { ViewMode } from 'utils/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 isFetching,\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 <ChartLoading active={isFetching}>\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 </ChartLoading>\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 'utils/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 {\n OverviewDetailBaseProps,\n QuotationDashboardSeriesItem,\n} from 'types/overviewAnalytics';\nimport { ViewMode } from 'utils/analytics';\n\nexport interface OrdersByTypeProps {\n data: QuotationDashboardSeriesItem[];\n isFetching?: boolean;\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 'utils/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'}&ensp;\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 'utils/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 &#x2022;\n <Typography variant=\"body2\" flexShrink={0}>\n {VIEW_MODE_LABELS[viewMode]}\n </Typography>\n &#x2022;\n <Typography variant=\"body2\" flexShrink={0}>\n {selectedYear}\n </Typography>\n &#x2022;\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 { Filter, GridQuery } from 'types/filter';\nimport { ViewMode } from 'utils/analytics';\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 'utils/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 ChartLoading from 'components/Analytics/ChartLoading';\nimport { ChartCard } from 'components/Analytics/ChartStyles';\nimport EmptyState from 'components/Analytics/EmptyState';\nimport Result from 'components/Result';\nimport { ViewMode } from 'utils/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 isFetching,\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 <ChartLoading active={isFetching}>\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 </ChartLoading>\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 'utils/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 {\n OverviewDetailBaseProps,\n RevenueGoalDashboardKpis,\n RevenueGoalDashboardSeriesItem,\n} from 'types/overviewAnalytics';\nimport { ViewMode } from 'utils/analytics';\n\nexport interface SalesEvolutionProps {\n data: RevenueGoalDashboardSeriesItem[];\n kpis?: RevenueGoalDashboardKpis;\n isFetching?: boolean;\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 'utils/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 ChartLoading from 'components/Analytics/ChartLoading';\nimport { ChartCard } from 'components/Analytics/ChartStyles';\nimport EmptyState from 'components/Analytics/EmptyState';\nimport Result from 'components/Result';\nimport { ViewMode } from 'utils/analytics';\n\nimport ForecastChart from './Chart';\nimport SalesForecastLegend from './Legend';\nimport { SalesForecastProps, VisibleSeries } from './props';\nimport SalesForecastSummary from './Summary';\n\nconst SalesForecast = ({ data, viewMode, isFetching }: 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 <ChartLoading active={isFetching}>\n <ForecastChart\n data={data}\n viewMode={viewMode}\n visibleSeries={visibleSeries}\n activeBarIndex={activeBarIndex}\n onMouseMove={handleMouseMove}\n onMouseLeave={handleMouseLeave}\n />\n </ChartLoading>\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 'utils/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 { SalesForecastDashboardSeriesItem } from 'types/overviewAnalytics';\nimport { ViewMode } from 'utils/analytics';\n\nexport interface SalesForecastProps {\n data: SalesForecastDashboardSeriesItem[];\n isFetching?: boolean;\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 'utils/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"]}