@zydon/common 2.8.76 → 2.8.77

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (55) hide show
  1. package/dist/chunk-CBW32OUQ.js +13 -0
  2. package/dist/chunk-CBW32OUQ.js.map +1 -0
  3. package/dist/chunk-DRGARBKB.js +8 -0
  4. package/dist/chunk-DRGARBKB.js.map +1 -0
  5. package/dist/chunk-FYG3YWFZ.js +4 -0
  6. package/dist/chunk-FYG3YWFZ.js.map +1 -0
  7. package/dist/chunk-J5XGGHQ7.js +8 -0
  8. package/dist/chunk-J5XGGHQ7.js.map +1 -0
  9. package/dist/{chunk-NWT5TUJO.js → chunk-JM3SE72J.js} +2 -2
  10. package/dist/chunk-RMYYQLRJ.js +7 -0
  11. package/dist/chunk-RMYYQLRJ.js.map +1 -0
  12. package/dist/chunk-UC2R4AXD.js +14 -0
  13. package/dist/chunk-UC2R4AXD.js.map +1 -0
  14. package/dist/chunk-Y2SILVOR.js +4 -0
  15. package/dist/chunk-Y2SILVOR.js.map +1 -0
  16. package/dist/components/Analytics/OverviewAnalytics/index.d.ts +54 -0
  17. package/dist/components/Analytics/OverviewAnalytics/index.js +47 -0
  18. package/dist/components/Analytics/OverviewAnalytics/index.js.map +1 -0
  19. package/dist/components/Analytics/index.d.ts +83 -0
  20. package/dist/components/Analytics/index.js +34 -0
  21. package/dist/components/Analytics/index.js.map +1 -0
  22. package/dist/components/Avatar/index.d.ts +1 -1
  23. package/dist/components/AvatarButton/index.js +2 -2
  24. package/dist/components/Common/index.js +2 -2
  25. package/dist/components/DataView/index.d.ts +1 -1
  26. package/dist/components/Drawer/index.js +3 -12
  27. package/dist/components/Drawer/index.js.map +1 -1
  28. package/dist/components/DynamicDataView/index.js +1 -1
  29. package/dist/components/InfoCircle/index.js +3 -7
  30. package/dist/components/InfoCircle/index.js.map +1 -1
  31. package/dist/components/SimpleCard/index.js +1 -7
  32. package/dist/components/SimpleCard/index.js.map +1 -1
  33. package/dist/components/ToggleTheme/index.js +2 -2
  34. package/dist/hooks/useDatagrid.js +1 -6
  35. package/dist/hooks/useDatagrid.js.map +1 -1
  36. package/dist/hooks/useSnackbar.d.ts +1 -1
  37. package/dist/hooks/useThemeToggle.js +2 -2
  38. package/dist/index.d.ts +2 -2
  39. package/dist/index.js +2 -2
  40. package/dist/theme/core/index.d.ts +1 -1
  41. package/dist/theme/styles/index.d.ts +13 -13
  42. package/dist/theme/theme-provider.js +2 -2
  43. package/dist/types/analytics.d.ts +11 -0
  44. package/dist/types/analytics.js +2 -0
  45. package/dist/types/analytics.js.map +1 -0
  46. package/dist/types/overviewAnalytics.d.ts +88 -0
  47. package/dist/types/overviewAnalytics.js +2 -0
  48. package/dist/types/overviewAnalytics.js.map +1 -0
  49. package/dist/utils/buildExportPayload.js +1 -1
  50. package/dist/utils/chart.d.ts +6 -0
  51. package/dist/utils/chart.js +2 -0
  52. package/dist/utils/chart.js.map +1 -0
  53. package/package.json +12 -2
  54. package/dist/{chunk-NWT5TUJO.js.map → chunk-JM3SE72J.js.map} +0 -0
  55. package/dist/{index-5a5e5dc8.d.ts → index-c8f1e6e7.d.ts} +12 -12
@@ -0,0 +1 @@
1
+ {"version":3,"sources":["../../../../src/components/Analytics/OverviewAnalytics/OrdersByType/index.tsx","../../../../src/components/Analytics/OverviewAnalytics/OrdersByType/Chart/index.tsx","../../../../src/components/Analytics/OverviewAnalytics/OrdersByType/props.ts","../../../../src/components/Analytics/OverviewAnalytics/OrdersByType/Chart/BarBackground.tsx","../../../../src/components/Analytics/OverviewAnalytics/OrdersByType/Chart/BarLabel.tsx","../../../../src/components/Analytics/OverviewAnalytics/OrdersByType/Chart/Tooltip.tsx","../../../../src/components/Analytics/OverviewAnalytics/OrdersByType/Legend.tsx","../../../../src/components/Analytics/OverviewAnalytics/OrdersByType/Summary.tsx","../../../../src/components/Analytics/OverviewAnalytics/OverviewDetail/index.tsx","../../../../src/components/Analytics/OverviewAnalytics/OverviewDetail/Header.tsx","../../../../src/components/Analytics/OverviewAnalytics/OverviewDetail/styles.ts","../../../../src/components/Analytics/OverviewAnalytics/OverviewDetail/useOverviewDetailState.ts","../../../../src/components/Analytics/OverviewAnalytics/OverviewDetail/utils.ts","../../../../src/components/Analytics/OverviewAnalytics/SalesEvolution/index.tsx","../../../../src/components/Analytics/OverviewAnalytics/SalesEvolution/Chart/index.tsx","../../../../src/components/Analytics/OverviewAnalytics/SalesEvolution/Chart/DailyView.tsx","../../../../src/components/Analytics/OverviewAnalytics/SalesEvolution/props.ts","../../../../src/components/Analytics/OverviewAnalytics/SalesEvolution/Chart/BarBackground.tsx","../../../../src/components/Analytics/OverviewAnalytics/SalesEvolution/Chart/Tooltip.tsx","../../../../src/components/Analytics/OverviewAnalytics/SalesEvolution/Chart/MonthlyView.tsx","../../../../src/components/Analytics/OverviewAnalytics/SalesEvolution/Legend.tsx","../../../../src/components/Analytics/OverviewAnalytics/SalesEvolution/Summary.tsx","../../../../src/components/Analytics/OverviewAnalytics/SalesForecast/index.tsx","../../../../src/components/Analytics/OverviewAnalytics/SalesForecast/Chart/index.tsx","../../../../src/components/Analytics/OverviewAnalytics/SalesForecast/props.ts","../../../../src/components/Analytics/OverviewAnalytics/SalesForecast/Chart/BarBackground.tsx","../../../../src/components/Analytics/OverviewAnalytics/SalesForecast/Chart/RealizedBackground.tsx","../../../../src/components/Analytics/OverviewAnalytics/SalesForecast/Chart/Tooltip.tsx","../../../../src/components/Analytics/OverviewAnalytics/SalesForecast/Legend.tsx","../../../../src/components/Analytics/OverviewAnalytics/SalesForecast/Summary.tsx"],"names":["useCallback","useMemo","useState","CardContent","CardHeader","Stack","useRef","Bar","BarChart","CartesianGrid","ResponsiveContainer","Tooltip","XAxis","YAxis","COLORS","jsx","BarBackground","x","y","width","height","index","activeBarIndex","BarBackground_default","BarLabel","data","visibleSeries","isMonthly","shouldRotateLabels","item","total","BarLabel_default","Divider","Typography","jsxs","OrdersByTypeTooltip","active","payload","label","viewMode","isDaily","formattedLabel","parts","monthIndex","month","MONTH_FULL_LABELS","items","p","SimpleCard_default","entry","fCurrencyBRL","Tooltip_default","Chart","onMouseMove","onMouseLeave","onBarClick","containerWidth","setContainerWidth","observerRef","wrapperRefCallback","node","hasOrderData","hasQuotationData","yDomain","maxTotal","d","yTicks","max","step","_","i","quotationsOnTop","ordersIsTop","tickFormatter","formatMonthLabel","formatDayLabel","ChartWrapper","state","RotatedTick_default","v","fShortenNumber","Chart_default","Checkbox","FormControlLabel","OrdersByTypeLegend","onToggleSerie","Legend_default","Summary","ordersTotal","quotationsTotal","isMobile","useResponsive_default","Summary_default","Fragment","OrdersByType","selectedYear","DetailComponent","setVisibleSeries","setActiveBarIndex","detailOpen","setDetailOpen","selectedLabel","setSelectedLabel","selectedTotalValue","setSelectedTotalValue","handleToggleSerie","serie","prev","handleMouseMove","handleMouseLeave","handleBarClick","handleDetailClose","totals","acc","ChartCard","Result_default","EmptyState_default","OrdersByType_default","Link","Header","title","periodLabel","VIEW_MODE_LABELS","Header_default","MuiDivider","alpha","styled","StyledDivider","MobileItemContainer","theme","getOrderId","order","getPartnerName","buildPartnerLink","getOrderValue","getOrderDate","fDate","getOrderStatus","getDefaultMobileRender","OverviewDetail","open","onClose","totalValue","suffix","rows","isLoading","isFetching","page","perPage","onSearch","onPaginationChange","mobileItemSlot","content","SearchInput_default","DataView_default","row","header","Drawer_default","Modal_default","OverviewDetail_default","getDateRange","date","year","lastDay","getPeriodLabel","monthName","day","getPeriodSuffix","useOverviewDetailState","search","handlePaginationModelChange","handleSearch","useDatagrid_default","startDate","endDate","queryParams","handlePaginationChange","newPage","rowsPerPage","useOverviewDetailState_default","ComposedChart","Line","SalesEvolutionTooltip","realized","forecast","goal","achievement","gap","timeUnitStr","goalStr","DailyChart","formatYAxis","DailyView_default","MonthlyChart","barLabelConfig","value","MonthlyView_default","SalesEvolutionChart","SalesEvolutionLegend","kpis","editGoalAction","fPercent","InfoCircle_default","SalesEvolution","values","ticks","handleToggleSeries","key","toggle","SalesEvolution_default","RealizedBackground","bothRendered","RealizedBackground_default","SalesForecastTooltip","ForecastChart","hasRealizedData","hasForecastData","SalesForecastLegend","SalesForecastSummary","totalForecast","totalRealized","percentage","SalesForecast","SalesForecast_default"],"mappings":"4vCAAA,OAAS,eAAAA,GAAa,WAAAC,GAAS,YAAAC,OAAgB,QAC/C,OAAOC,OAAiB,4BACxB,OAAOC,OAAgB,2BACvB,OAAOC,OAAW,sBCHlB,OAAuB,eAAAL,GAAa,WAAAC,GAAS,UAAAK,GAAQ,YAAAJ,OAAgB,QACrE,OACE,OAAAK,GACA,YAAAC,GACA,iBAAAC,GACA,uBAAAC,GACA,WAAAC,GACA,SAAAC,GACA,SAAAC,OACK,WCsBA,IAAMC,GAAS,CACpB,OAAQ,UACR,WAAY,SACd,ECrBI,cAAAC,OAAA,oBAXJ,IAAMC,GAAgB,CAAC,CACrB,EAAAC,EAAI,EACJ,EAAAC,EAAI,EACJ,MAAAC,EAAQ,EACR,OAAAC,EAAS,EACT,MAAAC,EACA,eAAAC,CACF,IACMA,IAAmBD,EAAc,KAGnCN,GAAC,QACC,EAAGE,EAAI,EACP,EAAGC,EACH,MAAOC,EAAQ,GACf,OAAQC,EAAS,EACjB,KAAK,UACL,QAAS,IACT,GAAI,EACN,EAIGG,GAAQP,GCFX,cAAAD,OAAA,oBArBJ,IAAMS,GAAW,CAAC,CAChB,EAAAP,EAAI,EACJ,EAAAC,EAAI,EACJ,MAAAC,EAAQ,EACR,MAAAE,EAAQ,EACR,KAAAI,EACA,cAAAC,EACA,UAAAC,EACA,mBAAAC,CACF,IAAqB,CACnB,GAAI,CAACD,GAAaC,EAAoB,OAAO,KAE7C,IAAMC,EAAOJ,EAAKJ,CAAK,EACvB,GAAI,CAACQ,EAAM,OAAO,KAElB,IAAIC,EAAQ,EAGZ,OAFIJ,EAAc,SAAQI,GAASD,EAAK,aAAe,GACnDH,EAAc,aAAYI,GAASD,EAAK,iBAAmB,GAC1DC,EAGHf,GAAC,QACC,EAAGE,EAAIE,EAAQ,EACf,EAAGD,EAAI,EACP,WAAW,SACX,SAAU,GACV,KAAK,UAEJ,SAAAY,EACH,EAXiB,IAarB,EAEOC,GAAQP,GCnCf,OAAOQ,OAAa,wBACpB,OAAO3B,OAAW,sBAClB,OAAO4B,OAAgB,2BAqDjB,cAAAlB,GAoBM,QAAAmB,OApBN,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,CACC,QAAQ,QACR,SAAS,iBACT,MAAM,iBAEL,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,SAAS,iBAAiB,OAAM,GACzD,SAAAgB,EAAM,KACT,GACF,EAEAf,GAACD,GAAA,CACC,QAAQ,QACR,SAAS,iBACT,MAAM,gBACN,OAAM,GAEL,UAAAgB,EAAM,MAAM,IAAEA,EAAM,QAAU,EAAI,SAAW,UAAU,SACxDlC,GAACkB,GAAA,CACC,UAAU,OACV,QAAQ,QACR,SAAS,iBACT,MAAM,eAEL,SAAAiB,EAAaD,EAAM,KAAK,EAC3B,GACF,IAnCKA,EAAM,IAoCb,CACD,EACH,GACF,CAEJ,EAEOE,GAAQhB,GJfP,OAkBE,OAAApB,EAlBF,QAAAmB,OAAA,oBAxER,IAAMkB,GAAQ,CAAC,CACb,KAAA3B,EACA,SAAAc,EACA,cAAAb,EACA,eAAAJ,EACA,YAAA+B,EACA,aAAAC,EACA,WAAAC,CACF,IAAkB,CAChB,IAAM5B,EAAYY,cACZ,CAACiB,EAAgBC,CAAiB,EAAIvD,GAAS,CAAC,EAChDwD,EAAcpD,GAA8B,IAAI,EAEhDqD,EAAqB3D,GAAa4D,GAAgC,CAClEF,EAAY,UACdA,EAAY,QAAQ,WAAW,EAC/BA,EAAY,QAAU,MAEpBE,IACFH,EAAkBG,EAAK,WAAW,EAClCF,EAAY,QAAU,IAAI,eAAe,IACvCD,EAAkBG,EAAK,WAAW,CACpC,EACAF,EAAY,QAAQ,QAAQE,CAAI,EAEpC,EAAG,CAAC,CAAC,EAEChC,EAAqB3B,GAAQ,IAC7B,CAAC0B,GACD6B,IAAmB,GAAK/B,EAAK,SAAW,EAAU,IAClC+B,EAAiB,IAAM/B,EAAK,OAC5B,GACnB,CAACE,EAAW6B,EAAgB/B,EAAK,MAAM,CAAC,EAErCoC,EAAe5D,GACnB,IAAMwB,EAAK,KAAK,IAAM,EAAE,aAAe,GAAK,CAAC,EAC7C,CAACA,CAAI,CACP,EAEMqC,EAAmB7D,GACvB,IAAMwB,EAAK,KAAK,IAAM,EAAE,iBAAmB,GAAK,CAAC,EACjD,CAACA,CAAI,CACP,EAEMsC,EAAU9D,GAAQ,IAAwB,CAC9C,GAAI,CAACwB,EAAK,OAAQ,MAAO,CAAC,EAAG,CAAC,EAC9B,IAAMuC,EAAW,KAAK,IACpB,GAAGvC,EAAK,IAAIwC,IAAMA,EAAE,aAAe,IAAMA,EAAE,iBAAmB,EAAE,CAClE,EACA,MAAO,CAAC,EAAGD,EAAW,EAAIA,EAAW,KAAO,CAAC,CAC/C,EAAG,CAACvC,CAAI,CAAC,EAEHyC,EAASjE,GAAQ,IAAM,CAC3B,GAAM,CAAC,CAAEkE,CAAG,EAAIJ,EACVK,EAAOD,EAAM,EACnB,MAAO,CACL,GAAG,IAAI,IAAI,MAAM,KAAK,CAAE,OAAQ,CAAE,EAAG,CAACE,EAAGC,IAAM,KAAK,MAAMF,EAAOE,CAAC,CAAC,CAAC,CACtE,CACF,EAAG,CAACP,CAAO,CAAC,EAENQ,EAAkB7C,EAAc,YAAcoC,EAE9CU,EAAc9C,EAAc,QAAUmC,GAAgB,CAACU,EAEvDE,EAAgBxE,GACpB,IAAO0B,EAAY+C,EAAmBC,EACtC,CAAChD,CAAS,CACZ,EAEA,OACEZ,EAAC6D,EAAA,CAAa,IAAKjB,EACjB,SAAA5C,EAACL,GAAA,CAAoB,MAAM,OAAO,OAAQ,IACxC,SAAAwB,GAAC1B,GAAA,CACC,KAAMiB,EACN,OAAQ,CACN,IAAK,GACL,MAAO,GACP,OAAQG,EAAqB,IAAM,EACnC,KAAM,EACR,EACA,eAAe,MACf,MAAO,CAAE,OAAQ,SAAU,EAC3B,YAAayB,EACb,aAAcC,EACd,QAASuB,GAAS,CACZA,GAAO,oBAAsB,MAC/BtB,IAAa,OAAOsB,EAAM,kBAAkB,CAAC,CAEjD,EAEA,UAAA9D,EAACN,GAAA,CACC,SAAU,GACV,gBAAgB,MAChB,OAAO,UACT,EAEAM,EAACH,GAAA,CACC,QAAQ,QACR,SAAU,GACV,SAAU,GACT,GAAIgB,GAAsB,CAAE,SAAU,EAAG,OAAQ,GAAI,EACtD,KACEA,EACEb,EAAC+D,EAAA,EAAY,EAEb,CAAE,SAAU,GAAI,KAAM,SAAU,EAGpC,cAAeL,EACjB,EAEA1D,EAACF,GAAA,CACC,SAAU,GACV,SAAU,GACV,KAAM,CAAE,SAAU,GAAI,KAAM,SAAU,EACtC,cAAgBkE,GAAcC,EAAeD,CAAC,EAC9C,OAAQhB,EACR,MAAOG,EACT,EAEAnD,EAACJ,GAAA,CACC,QAASI,EAACoC,GAAA,CAAoB,SAAUZ,EAAU,EAClD,OAAQ,GACV,EAEAxB,EAACR,GAAA,CACC,QAAQ,cACR,KAAK,SACL,KAAMO,GAAO,OACb,QAAQ,SACR,WAAY,GACZ,kBAAmB,GACnB,KAAM,CAACY,EAAc,OACrB,WAAYX,EAACQ,GAAA,CAAc,eAAgBD,EAAgB,EAC3D,OAAQkD,EAAc,CAAC,EAAG,EAAG,EAAG,CAAC,EAAI,OACpC,GAAIA,GAAe,CAClB,MAAO,CACL,SAAU,MACV,SAAU,GACV,KAAM,UACN,QACEzD,EAACgB,GAAA,CACC,KAAMN,EACN,cAAeC,EACf,UAAWC,EACX,mBAAoBC,EACtB,CAEJ,CACF,EACF,EAEAb,EAACR,GAAA,CACC,QAAQ,kBACR,KAAK,gBACL,KAAMO,GAAO,WACb,QAAQ,SACR,WAAY,GACZ,kBAAmB,GACnB,KAAM,CAACY,EAAc,WACrB,OAAQ6C,EAAkB,CAAC,EAAG,EAAG,EAAG,CAAC,EAAI,OACxC,GAAI,CAAC7C,EAAc,QAAU,CAC5B,WAAYX,EAACQ,GAAA,CAAc,eAAgBD,EAAgB,CAC7D,EACC,GAAIiD,GAAmB,CACtB,MAAO,CACL,SAAU,MACV,SAAU,GACV,KAAM,UACN,QACExD,EAACgB,GAAA,CACC,KAAMN,EACN,cAAeC,EACf,UAAWC,EACX,mBAAoBC,EACtB,CAEJ,CACF,EACF,GACF,EACF,EACF,CAEJ,EAEOqD,GAAQ7B,GKlNf,OAAO8B,OAAc,yBACrB,OAAOC,OAAsB,iCAC7B,OAAO9E,OAAW,sBAKhB,OAGM,OAAAU,GAHN,QAAAmB,OAAA,oBADF,IAAMkD,GAAqB,CAAC,CAAE,cAAA1D,EAAe,cAAA2D,CAAc,IACzDnD,GAAC7B,GAAA,CAAM,UAAU,MAAM,eAAe,SAAS,SAAS,OAAO,IAAK,EAClE,UAAAU,GAACoE,GAAA,CACC,QACEpE,GAACmE,GAAA,CACC,QAASxD,EAAc,OACvB,SAAU,IAAM2D,EAAc,QAAQ,EACtC,GAAI,CAAE,gBAAiB,CAAE,MAAOvE,GAAO,MAAO,CAAE,EAClD,EAEF,MAAM,SACR,EAEAC,GAACoE,GAAA,CACC,QACEpE,GAACmE,GAAA,CACC,QAASxD,EAAc,WACvB,SAAU,IAAM2D,EAAc,YAAY,EAC1C,GAAI,CAAE,gBAAiB,CAAE,MAAOvE,GAAO,UAAW,CAAE,EACtD,EAEF,MAAM,gBACR,GACF,EAGKwE,GAAQF,GChCf,OAAOpD,OAAa,wBACpB,OAAO3B,OAAW,sBAClB,OAAO4B,OAAgB,2BAiBf,cAAAlB,GAmBA,QAAAmB,OAnBA,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,CACC,QAAQ,QACR,SAAS,iBACT,MAAM,iBAEL,SAAAN,EAAY,gBAAkB,mBACjC,EAEAO,GAACD,GAAA,CAAW,QAAQ,YAAY,SAAS,qBACtC,UAAAuD,EAAY,WACf,GACF,EAEAzE,GAACiB,GAAA,CACC,YAAa0D,EAAW,aAAe,WACvC,SAAQ,GACR,GAAI,CAAE,YAAaA,EAAW,QAAU,QAAS,EACnD,EAEAxD,GAAC7B,GAAA,CACC,UAAAU,GAACkB,GAAA,CACC,QAAQ,QACR,SAAS,iBACT,MAAM,iBAEL,SAAAN,EAAY,uBAAsB,0BACrC,EAEAO,GAACD,GAAA,CAAW,QAAQ,YAAY,SAAS,qBACtC,UAAAwD,EAAgB,kBACnB,GACF,GACF,CAEJ,EAEOG,GAAQL,GPYX,mBAAAM,GAEI,OAAA9E,EAII,QAAAmB,OANR,oBA9DJ,IAAM4D,GAAe,CAAC,CACpB,KAAArE,EACA,SAAAc,EACA,aAAAwD,EACA,gBAAAC,CACF,IAAyB,CACvB,IAAMrE,EAAYY,cAEZ,CAACb,EAAeuE,CAAgB,EAAI/F,GAAwB,CAChE,OAAQ,GACR,WAAY,EACd,CAAC,EAEK,CAACoB,EAAgB4E,CAAiB,EAAIhG,GAAwB,IAAI,EAElE,CAACiG,EAAYC,CAAa,EAAIlG,GAAS,EAAK,EAC5C,CAACmG,EAAeC,CAAgB,EAAIpG,GAAS,EAAE,EAC/C,CAACqG,EAAoBC,CAAqB,EAAItG,GAAS,CAAC,EAExDuG,EAAoBzG,GAAa0G,GAA+B,CACpET,EAAiBU,IAAS,CAAE,GAAGA,EAAM,CAACD,CAAK,EAAG,CAACC,EAAKD,CAAK,CAAE,EAAE,CAC/D,EAAG,CAAC,CAAC,EAECE,EAAkB5G,GAAkC6E,GAAS,CAC7DA,GAAO,oBAAsB,MAC/BqB,EAAkB,OAAOrB,EAAM,kBAAkB,CAAC,CAEtD,EAAG,CAAC,CAAC,EAECgC,EAAmB7G,GACvB,IAAMkG,EAAkB,IAAI,EAC5B,CAAC,CACH,EAEMY,EAAiB9G,GACpBqB,GAAkB,CACjB,IAAMQ,EAAOJ,EAAKJ,CAAK,EAClBQ,IACLyE,EAAiBzE,EAAK,KAAK,EAC3B2E,EAAsB3E,EAAK,WAAW,EACtCuE,EAAc,EAAI,EACpB,EACA,CAAC3E,CAAI,CACP,EAEMsF,EAAoB/G,GAAY,IAAM,CAC1CoG,EAAc,EAAK,CACrB,EAAG,CAAC,CAAC,EAECY,EAAS/G,GAAQ,IAAM,CAC3B,IAAMuF,EAAc/D,EAAK,OACvB,CAACwF,EAAKpF,IAASoF,GAAOpF,EAAK,aAAe,GAC1C,CACF,EACM4D,EAAkBhE,EAAK,OAC3B,CAACwF,EAAKpF,IAASoF,GAAOpF,EAAK,iBAAmB,GAC9C,CACF,EACA,MAAO,CAAE,YAAA2D,EAAa,gBAAAC,CAAgB,CACxC,EAAG,CAAChE,CAAI,CAAC,EAET,OACES,GAAA2D,GAAA,CACE,UAAA3D,GAACgF,EAAA,CACC,UAAAnG,EAACX,GAAA,CAAW,MAAM,iCAAiC,EAEnDW,EAACZ,GAAA,CACC,SAAAY,EAACoG,EAAA,CAAO,QAAS1F,EAAK,SAAW,EAAG,MAAOV,EAACqG,EAAA,EAAW,EACrD,SAAAlF,GAAC7B,GAAA,CAAM,IAAK,EACV,UAAAU,EAACV,GAAA,CAAM,QAAS,CAAE,GAAI,OAAQ,GAAI,OAAQ,EACxC,SAAAU,EAAC6E,GAAA,CACC,UAAWjE,EACX,YAAaqF,EAAO,YACpB,gBAAiBA,EAAO,gBAC1B,EACF,EAEAjG,EAACkE,GAAA,CACC,KAAMxD,EACN,SAAUc,EACV,cAAeb,EACf,eAAgBJ,EAChB,YAAasF,EACb,aAAcC,EACd,WAAYC,EACd,EAEA/F,EAACuE,GAAA,CACC,cAAe5D,EACf,cAAe+E,EACjB,EAEA1F,EAACV,GAAA,CAAM,QAAS,CAAE,GAAI,QAAS,GAAI,MAAO,EACxC,SAAAU,EAAC6E,GAAA,CACC,UAAWjE,EACX,YAAaqF,EAAO,YACpB,gBAAiBA,EAAO,gBAC1B,EACF,GACF,EACF,EACF,GACF,EAECX,GAAiBL,GAChBjF,EAACiF,EAAA,CACC,KAAMG,EACN,QAASY,EACT,MAAOV,EACP,SAAU9D,EACV,aAAcwD,EACd,WAAYQ,EACd,GAEJ,CAEJ,EAEOc,GAAQvB,GQtIf,OAAO9D,OAAa,wBACpB,OAAOsF,OAAU,qBACjB,OAAOjH,MAAW,sBAClB,OAAO4B,MAAgB,2BCHvB,OAAO5B,OAAW,sBAClB,OAAO4B,OAAgB,2BAcjB,cAAAlB,GAIA,QAAAmB,OAJA,oBARN,IAAMqF,GAAS,CAAC,CACd,MAAAC,EACA,SAAAjF,EACA,aAAAwD,EACA,YAAA0B,CACF,IAEIvF,GAAC7B,GAAA,CAAM,MAAM,OAAO,SAAU,EAAG,SAAS,SACxC,UAAAU,GAACkB,GAAA,CAAW,QAAQ,YAAY,SAAS,qBAAqB,OAAM,GAAC,oCAErE,EAEAC,GAAC7B,GAAA,CACC,UAAU,MACV,WAAW,SACX,UAAW,IACX,OAAQ,EACR,SAAS,OAET,UAAAU,GAACkB,GAAA,CACC,QAAQ,QACR,SAAS,iBACT,MAAM,iBACN,WAAY,EAEX,SAAAuF,EACH,EAAa,SAEbzG,GAACkB,GAAA,CAAW,QAAQ,QAAQ,SAAS,iBAAiB,WAAY,EAC/D,SAAAyF,GAAiBnF,CAAQ,EAC5B,EAAa,SAEbxB,GAACkB,GAAA,CAAW,QAAQ,QAAQ,SAAS,iBAAiB,WAAY,EAC/D,SAAA8D,EACH,EAAa,SAEbhF,GAACkB,GAAA,CACC,QAAQ,QACR,SAAS,iBACT,MAAM,iBACN,OAAM,GAEL,SAAAwF,EACH,GACF,GACF,EAIGE,GAAQJ,GCxDf,OAAOK,OAAgB,wBACvB,OAAOvH,OAAW,sBAClB,OAAS,SAAAwH,GAAO,UAAAC,OAAc,uBAEvB,IAAMC,GAAgBD,GAAOF,EAAU,EAAE,KAAO,CACrD,OAAQ,GACR,UAAW,SAEX,YAAa,QACf,EAAE,EAEWI,GAAsBF,GAAOzH,EAAK,EAAE,CAAC,CAAE,MAAA4H,CAAM,KAAO,CAC/D,SAAU,WAEV,QAAS,OACT,cAAe,SACf,QAASA,EAAM,QAAQ,CAAC,EACxB,IAAKA,EAAM,QAAQ,CAAC,EACpB,MAAOA,EAAM,QAAQ,KAAK,QAE1B,MAAO,CACL,eAAgB,MAClB,EAEA,QAAS,CACP,UAAW,cAAcJ,GAAMI,EAAM,QAAQ,KAAK,GAAG,EAAG,EAAG,GAC7D,CACF,EAAE,EFNE,OAmQY,YAAApC,GAnQZ,OAAA9E,EAsEE,QAAAmB,MAtEF,oBAFJ,IAAMgG,GAAcC,GAClBpH,EAACV,EAAA,CAAM,eAAe,SAAS,OAAQ,EACrC,SAAAU,EAACkB,EAAA,CAAW,QAAQ,QAAQ,SAAS,iBAAiB,MAAM,eACzD,SAAAkG,EAAM,GACT,EACF,EAGIC,GAAiB,CACrBD,EACAE,IAEAtH,EAACV,EAAA,CAAM,eAAe,SAAS,OAAQ,EACpC,SAAA8H,GAAO,SAAS,IAAME,EACrBtH,EAACuG,GAAA,CACC,UAAU,IACV,KAAMe,EAAiBF,EAAM,QAAQ,EAAE,EACvC,OAAO,SACP,IAAI,sBACJ,QAAQ,YACR,SAAS,qBACT,GAAI,CAAE,eAAgB,WAAY,EAClC,OAAM,GAEL,SAAAA,EAAM,SAAS,MAAQ,IAC1B,EAEApH,EAACkB,EAAA,CACC,QAAQ,QACR,SAAS,iBACT,MAAM,eACN,OAAM,GAEL,SAAAkG,EAAM,SAAS,MAAQ,IAC1B,EAEJ,EAGIG,GAAiBH,GACrBpH,EAACV,EAAA,CAAM,eAAe,SAAS,OAAQ,EACrC,SAAAU,EAACkB,EAAA,CAAW,QAAQ,QAAQ,SAAS,iBAAiB,MAAM,eACzD,SAAAiB,EAAaiF,EAAM,WAAW,EACjC,EACF,EAGII,GAAgBJ,GACpBpH,EAACV,EAAA,CAAM,eAAe,SAAS,OAAQ,EACpC,SAAA8H,EAAM,iBACLpH,EAACkB,EAAA,CACC,QAAQ,QACR,SAAS,iBACT,MAAM,eAEL,SAAAuG,GAAML,EAAM,iBAAkB,YAAY,EAC7C,EAEA,IAEJ,EAGIM,GAAkBN,GACtBpH,EAACV,EAAA,CAAM,eAAe,SAAS,OAAQ,EACpC,SAAA8H,EAAM,QAAU,IACnB,EAGIO,GAA0BP,GAC9BpH,EAACiH,GAAA,CACC,SAAA9F,EAAC7B,EAAA,CAAM,IAAK,EACV,UAAA6B,EAAC7B,EAAA,CACC,UAAAU,EAACkB,EAAA,CACC,QAAQ,QACR,SAAS,iBACT,MAAM,iBACP,kBAED,EACAlB,EAACkB,EAAA,CACC,QAAQ,YACR,SAAS,qBACT,MAAM,eAEL,SAAAkG,EAAM,GACT,GACF,EAEAjG,EAAC7B,EAAA,CACC,UAAAU,EAACkB,EAAA,CACC,QAAQ,QACR,SAAS,iBACT,MAAM,iBACP,mBAED,EACAlB,EAACkB,EAAA,CACC,QAAQ,YACR,SAAS,qBACT,MAAM,eAEL,SAAAkG,EAAM,SAAS,MAAQ,IAC1B,GACF,EAEAjG,EAAC7B,EAAA,CAAM,UAAU,MAAM,WAAW,SAAS,IAAK,EAC9C,UAAA6B,EAAC7B,EAAA,CAAM,KAAM,EAAG,SAAS,SACvB,UAAAU,EAACkB,EAAA,CACC,QAAQ,QACR,SAAS,iBACT,MAAM,iBACN,OAAM,GACP,2BAED,EACAlB,EAACkB,EAAA,CACC,QAAQ,YACR,SAAS,qBACT,MAAM,eACN,OAAM,GAEL,SAAAiB,EAAaiF,EAAM,WAAW,EACjC,GACF,EAEApH,EAACiB,GAAA,CACC,YAAY,WACZ,SAAQ,GACR,GAAI,CAAE,YAAa,SAAU,GAAI,CAAE,EACrC,EAEAE,EAAC7B,EAAA,CAAM,KAAM,EAAG,SAAS,SACvB,UAAAU,EAACkB,EAAA,CACC,QAAQ,QACR,SAAS,iBACT,MAAM,iBACN,OAAM,GACP,gBAED,EACAlB,EAACkB,EAAA,CACC,QAAQ,YACR,SAAS,qBACT,MAAM,eACN,OAAM,GAEL,SAAAkG,EAAM,iBACHK,GAAML,EAAM,iBAAkB,YAAY,EAC1C,IACN,GACF,GACF,EAEAjG,EAAC7B,EAAA,CAAM,IAAK,GACV,UAAAU,EAACkB,EAAA,CACC,QAAQ,QACR,SAAS,iBACT,MAAM,iBACP,kBAED,EACAlB,EAACkB,EAAA,CACC,QAAQ,YACR,SAAS,qBACT,MAAM,eAEL,SAAAkG,EAAM,QAAU,IACnB,GACF,GACF,GApGwBA,EAAM,EAqGhC,EAGIQ,GAAiB,CAAC,CACtB,KAAAC,EACA,QAAAC,EACA,MAAArB,EACA,SAAAjF,EACA,aAAAwD,EACA,WAAA+C,EACA,YAAArB,EACA,OAAAsB,EACA,KAAAC,EACA,MAAAlH,EACA,UAAAmH,EACA,WAAAC,EACA,KAAAC,EACA,QAAAC,EACA,SAAAC,EACA,mBAAAC,EACA,iBAAAjB,EACA,eAAAkB,CACF,IAA2B,CACzB,IAAM7D,EAAWC,EAAc,OAAQ,IAAI,EAErC6D,EACJtH,EAAC7B,EAAA,CAAM,IAAK,EACV,UAAA6B,EAAC7B,EAAA,CACC,UAAW,CAAE,GAAI,SAAU,GAAI,KAAM,EACrC,eAAe,gBACf,IAAK,EAEL,UAAA6B,EAAC7B,EAAA,CACC,SAAU,EACV,UAAU,MACV,WAAW,SACX,IAAK,EACL,SAAS,OAET,UAAA6B,EAAC7B,EAAA,CACC,UAAA6B,EAACD,EAAA,CACC,QAAQ,QACR,SAAS,iBACT,MAAM,iBACP,oBACS8G,GACV,EAEAhI,EAACkB,EAAA,CACC,QAAQ,YACR,SAAS,qBACT,MAAM,eAEL,SAAAiB,EAAa4F,CAAU,EAC1B,GACF,EAEA/H,EAACgH,GAAA,CAAc,YAAY,WAAW,SAAQ,GAAC,EAE/C7F,EAAC7B,EAAA,CACC,UAAA6B,EAACD,EAAA,CACC,QAAQ,QACR,SAAS,iBACT,MAAM,iBACP,6BACkB8G,GACnB,EAEAhI,EAACkB,EAAA,CACC,QAAQ,YACR,SAAS,qBACT,MAAM,eAEL,SAAAH,EACH,GACF,GACF,EAEAf,EAAC0I,GAAA,CACC,KAAK,QACL,YAAY,SACZ,SAAUJ,EACV,QAAQ,SACR,aAAa,QACb,GAAI,CAAE,SAAU,GAAI,EACtB,GACF,EAEAtI,EAAC2I,GAAA,CACC,MAAM,UACN,OAAQ3I,EAAA8E,GAAA,EAAE,EACV,YAAa,CAAE,EAAG,CAAE,EACpB,QAAS,CACP,CACE,MAAO,cACP,WAAY,SACZ,KAAM,EACN,WAAY,CAAC,CAAE,IAAA8D,CAAI,IAA4BzB,GAAWyB,CAAG,CAC/D,EACA,CACE,MAAO,eACP,WAAY,UACZ,KAAM,EACN,WAAY,CAAC,CAAE,IAAAA,CAAI,IACjBvB,GAAeuB,EAAKtB,CAAgB,CACxC,EACA,CACE,MAAO,cACP,WAAY,kBACZ,KAAM,EACN,WAAY,CAAC,CAAE,IAAAsB,CAAI,IAA4BrB,GAAcqB,CAAG,CAClE,EACA,CACE,MAAO,aACP,WAAY,OACZ,KAAM,EACN,WAAY,CAAC,CAAE,IAAAA,CAAI,IAA4BpB,GAAaoB,CAAG,CACjE,EACA,CACE,MAAO,cACP,WAAY,SACZ,KAAM,EACN,WAAY,CAAC,CAAE,IAAAA,CAAI,IAA4BlB,GAAekB,CAAG,CACnE,CACF,EACA,KAAMX,EACN,SAAUlH,EACV,aAAeL,GACb8H,EAAiBA,EAAe9H,CAAI,EAAIiH,GAAuBjH,CAAI,EAErE,QAASwH,EACT,SAAUC,EACV,gBAAiB,CAAE,KAAAC,EAAM,SAAUC,CAAQ,EAC3C,mBAAoBE,EACpB,eAAe,SACf,2BAA0B,GAC1B,kBAAiB,GACjB,eAAgB,CAAE,OAAQ,GAAI,EAChC,GACF,EAGIM,EACJ7I,EAAC4G,GAAA,CACC,MAAOH,EACP,SAAUjF,EACV,aAAcwD,EACd,YAAa0B,EACf,EAGF,OAAI/B,EAEA3E,EAAC8I,GAAA,CACC,KAAMjB,EACN,QAASC,EACT,YAAae,EACb,YAAa,CACX,UAAW,cACX,GAAI,CAAE,kBAAmB,CAAE,SAAU,EAAG,SAAU,QAAS,CAAE,CAC/D,EAEC,SAAAJ,EACH,EAKFzI,EAAC+I,GAAA,CACC,KAAMlB,EACN,QAASC,EACT,SAAS,KACT,YAAae,EACb,iBAAkB,CAAE,GAAI,CAAE,KAAM,EAAG,SAAU,QAAS,CAAE,EACxD,UAAS,GAER,SAAAJ,EACH,CAEJ,EAEOO,GAAQpB,GGnXf,OAAS,eAAA3I,GAAa,WAAAC,OAAe,QCG9B,IAAM+J,GAAe,CAC1B1H,EACAC,IAC2C,CAC3C,IAAMG,EAAQJ,EAAM,MAAM,GAAG,EAE7B,GAAIC,aAA+BG,EAAM,SAAW,EAAG,CACrD,IAAMuH,EAAO,GAAGvH,EAAM,CAAC,KAAKA,EAAM,CAAC,KAAKA,EAAM,CAAC,IAC/C,MAAO,CAAE,UAAWuH,EAAM,QAASA,CAAK,EAG1C,IAAMC,EAAO,SAASxH,EAAM,CAAC,EAAG,EAAE,EAC5BE,EAAQ,SAASF,EAAM,CAAC,EAAG,EAAE,EAC7ByH,EAAU,IAAI,KAAKD,EAAMtH,EAAO,CAAC,EAAE,QAAQ,EAEjD,MAAO,CACL,UAAW,GAAGF,EAAM,CAAC,KAAKA,EAAM,CAAC,OACjC,QAAS,GAAGA,EAAM,CAAC,KAAKA,EAAM,CAAC,KAAK,OAAOyH,CAAO,EAAE,SAAS,EAAG,GAAG,GACrE,CACF,EAEaC,GAAiB,CAAC9H,EAAeC,IAA+B,CAC3E,IAAMG,EAAQJ,EAAM,MAAM,GAAG,EACvBK,EAAa,SAASD,EAAM,CAAC,EAAG,EAAE,EAAI,EACtC2H,EAAYxH,EAAkBF,CAAU,GAAK,GAEnD,GAAIJ,aAA+BG,EAAM,SAAW,EAAG,CACrD,IAAM4H,EAAM,SAAS5H,EAAM,CAAC,EAAG,EAAE,EACjC,MAAO,GAAG2H,WAAmBC,IAG/B,OAAOD,CACT,EAEaE,GAAmBhI,GAC9BA,cAAgC,YAAW,SD9B7C,IAAMiI,GAAyB,CAAClI,EAAeC,IAAuB,CACpE,GAAM,CAAE,KAAA4G,EAAM,QAAAC,EAAS,OAAAqB,EAAQ,4BAAAC,EAA6B,aAAAC,CAAa,EACvEC,GAAY,EAER,CAAE,UAAAC,EAAW,QAAAC,CAAQ,EAAI7K,GAC7B,IAAM+J,GAAa1H,EAAOC,CAAQ,EAClC,CAACD,EAAOC,CAAQ,CAClB,EAEMkF,EAAcxH,GAClB,IAAMmK,GAAe9H,EAAOC,CAAQ,EACpC,CAACD,EAAOC,CAAQ,CAClB,EAEMwG,EAASwB,GAAgBhI,CAAQ,EAEjCwI,EAAc9K,GAAQ,KACnB,CACL,KAAAkJ,EACA,QAAAC,EACA,GAAIqB,EAAS,CAAE,OAAAA,CAAO,EAAI,CAAC,EAC3B,OAAQ,CACN,SAAU,MACV,OAAQ,CACN,CACE,SAAU,MACV,aAAc,CACZ,CACE,UAAW,kBACX,YAAa,wBACb,MAAO,CAAC,GAAGI,YAAoB,CACjC,EACA,CACE,UAAW,kBACX,YAAa,qBACb,MAAO,CAAC,GAAGC,YAAkB,CAC/B,CACF,CACF,CACF,CACF,CACF,GACC,CAACA,EAAS3B,EAAMC,EAASqB,EAAQI,CAAS,CAAC,EAExCG,EAAyBhL,GAC7B,CAACiL,EAAiBC,IAAwB,CACxCR,EAA4B,CAAE,KAAMO,EAAS,SAAUC,CAAY,CAAC,CACtE,EACA,CAACR,CAA2B,CAC9B,EAEA,MAAO,CACL,KAAAvB,EACA,QAAAC,EACA,YAAA3B,EACA,OAAAsB,EACA,YAAAgC,EACA,aAAAJ,EACA,uBAAAK,CACF,CACF,EAEOG,GAAQX,GEtEf,OAAS,eAAAxK,GAAa,WAAAC,GAAS,YAAAC,OAAgB,QAC/C,OAAOC,OAAiB,4BACxB,OAAOC,OAAgB,2BACvB,OAAOC,OAAW,sBCHlB,OAAS,eAAAL,GAAa,WAAAC,GAAS,UAAAK,GAAQ,YAAAJ,OAAgB,QCAvD,OAAS,eAAAF,OAAmB,QAC5B,OACE,OAAAO,GACA,iBAAAE,GACA,iBAAA2K,GACA,QAAAC,GACA,uBAAA3K,GACA,WAAAC,GACA,SAAAC,GACA,SAAAC,OACK,WC0BA,IAAMC,EAAS,CACpB,MAAO,UACP,SAAU,UACV,KAAM,SACR,ECzBI,cAAAC,OAAA,oBAXJ,IAAMC,GAAgB,CAAC,CACrB,EAAAC,EAAI,EACJ,EAAAC,EAAI,EACJ,MAAAC,EAAQ,EACR,OAAAC,EAAS,EACT,MAAAC,EACA,eAAAC,CACF,IACMA,IAAmBD,EAAc,KAGnCN,GAAC,QACC,EAAGE,EAAI,EACP,EAAGC,EACH,MAAOC,EAAQ,EAAI,EACnB,OAAQC,EAAS,EACjB,KAAMN,EAAO,MACb,QAAS,IACT,GAAI,EACN,EAIGS,GAAQP,GC3Bf,OAAOgB,OAAa,wBACpB,OAAO3B,OAAW,sBAClB,OAAO4B,OAAgB,2BA4EjB,cAAAlB,GAoBM,QAAAmB,OApBN,oBAjEN,IAAMoJ,GAAwB,CAAC,CAC7B,OAAAlJ,EACA,QAAAC,EACA,MAAAC,EACA,SAAAC,CACF,IAA0B,CACxB,GAAI,CAACH,GAAU,CAACC,GAAS,OAAQ,OAAO,KAExC,IAAMG,EAAUD,YAEVd,EAAOY,EAAQ,CAAC,EAAE,QAClBkJ,EAAW,OAAO9J,EAAK,QAAQ,GAAK,EACpC+J,EAAW,OAAO/J,EAAK,QAAQ,GAAK,EACpCgK,EAAO,OAAOhK,EAAK,IAAI,GAAK,EAE5BiK,EAAcD,EAAO,EAAKF,EAAWE,EAAQ,IAAM,EACnDE,EAAMF,EAAOF,EAAWE,EAAOF,EAAW,EAE1CK,EAAcpJ,EAAU,SAAW,YACnCqJ,EAAUrJ,EAAU,YAAW,SAEjCC,EAAiB,OAAOH,CAAK,EAC3BI,EAAQD,EAAe,MAAM,GAAG,EAEtC,GAAIC,EAAM,QAAU,EAAG,CACrB,IAAMC,EAAa,SAASD,EAAM,CAAC,EAAG,EAAE,EAAI,EACtCE,EAAQC,EAAkBF,CAAU,EAEtCH,GAAWE,EAAM,SAAW,EAC9BD,EAAiB,GAAG,SAASC,EAAM,CAAC,EAAG,EAAE,QAAQE,QAAYF,EAAM,CAAC,IAC1DF,IACVC,EAAiB,GAAGG,QAAYF,EAAM,CAAC,KAI3C,IAAMI,EAAQ,CACZ,CACE,KAAM,aAAa8I,IACnB,MAAO1I,EAAaqI,CAAQ,EAC5B,MAAOzK,EAAO,KAChB,EACA,CACE,KAAM,YAAY8K,IAClB,MAAO1I,EAAasI,CAAQ,EAC5B,MAAO1K,EAAO,QAChB,EACA,CACE,KAAM,QAAQ+K,IACd,MAAO3I,EAAauI,CAAI,EACxB,MAAO3K,EAAO,IAChB,EACA,CACE,KAAM,cACN,MAAO,GAAG4K,EAAY,QAAQ,CAAC,KAC/B,MAAO,SACT,EACA,CACE,KAAM,OAAOE,IACb,MAAO1I,EAAayI,CAAG,EACvB,MAAO,SACT,CACF,EAEA,OACEzJ,GAACc,EAAA,CAAW,SAAU,CAAE,GAAI,OAAQ,GAAI,GAAI,EAAG,EAAG,EAAG,IAAK,EACxD,UAAAjC,GAACkB,GAAA,CACC,QAAQ,QACR,SAAS,iBACT,MAAM,iBAEL,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,SAAS,iBAAiB,OAAM,GACzD,SAAAgB,EAAM,KACT,GACF,EAEAlC,GAACkB,GAAA,CAAW,QAAQ,QAAQ,SAAS,iBAClC,SAAAgB,EAAM,MACT,IAtBK5B,CAuBP,CACD,EACH,GACF,CAEJ,EAEO8B,GAAQmI,GHrFT,OAYE,OAAAvK,EAZF,QAAAmB,OAAA,oBAfN,IAAM4J,GAAa,CAAC,CAClB,KAAArK,EACA,cAAAC,EACA,QAAAqC,EACA,OAAAG,EACA,SAAA3B,EACA,eAAAjB,EACA,YAAA+B,EACA,aAAAC,EACA,WAAAC,CACF,IAAuB,CACrB,IAAMwI,EAAc/L,GAAa+E,GAAcC,EAAeD,CAAC,EAAG,CAAC,CAAC,EAEpE,OACEhE,EAACL,GAAA,CAAoB,MAAM,OAAO,OAAQ,IACxC,SAAAwB,GAACkJ,GAAA,CACC,KAAM3J,EACN,OAAQ,CAAE,IAAK,GAAI,MAAO,GAAI,OAAQ,EAAG,KAAM,EAAG,EAClD,MAAO,CAAE,OAAQ,SAAU,EAC3B,YAAa4B,EACb,aAAcC,EACd,QAASuB,GAAS,CACZA,GAAO,oBAAsB,MAC/BtB,IAAa,OAAOsB,EAAM,kBAAkB,CAAC,CAEjD,EAEA,UAAA9D,EAACN,GAAA,CACC,SAAU,GACV,gBAAgB,MAChB,OAAO,UACT,EAEAM,EAACH,GAAA,CACC,QAAQ,QACR,SAAU,GACV,SAAU,GACV,KAAM,CAAE,SAAU,GAAI,KAAM,SAAU,EACtC,cAAe+D,EACjB,EAEA5D,EAACF,GAAA,CACC,SAAU,GACV,SAAU,GACV,KAAM,CAAE,SAAU,GAAI,KAAM,SAAU,EACtC,cAAekL,EACf,OAAQhI,EACR,MAAOG,EACT,EAEAnD,EAACJ,GAAA,CAAQ,QAASI,EAACoC,GAAA,CAAsB,SAAUZ,EAAU,EAAI,EAEjExB,EAACR,GAAA,CACC,QAAQ,WACR,KAAK,cACL,kBAAmB,GACnB,WAAYQ,EAACQ,GAAA,CAAc,eAAgBD,EAAgB,EAC7D,EAECI,EAAc,MACbX,EAACsK,GAAA,CACC,QAAQ,OACR,KAAK,OACL,OAAQvK,EAAO,KACf,YAAa,EACb,gBAAgB,MAChB,IAAK,GACL,kBAAmB,GACrB,EAGDY,EAAc,UACbX,EAACsK,GAAA,CACC,QAAQ,WACR,KAAK,SACL,OAAQvK,EAAO,MACf,YAAa,EACb,IAAK,CACH,KAAMA,EAAO,MACb,EAAG,EACH,YAAa,CACf,EACA,kBAAmB,GACrB,EAGDY,EAAc,UACbX,EAACsK,GAAA,CACC,QAAQ,WACR,KAAK,WACL,OAAQvK,EAAO,SACf,YAAa,EACb,gBAAgB,MAChB,IAAK,CACH,KAAMA,EAAO,SACb,EAAG,EACH,YAAa,CACf,EACA,kBAAmB,GACrB,GAEJ,EACF,CAEJ,EAEOkL,GAAQF,GI/Hf,OAAS,WAAA7L,OAAe,QACxB,OACE,OAAAM,GACA,iBAAAE,GACA,iBAAA2K,GACA,QAAAC,GACA,uBAAA3K,GACA,WAAAC,GACA,SAAAC,GACA,SAAAC,OACK,WAuCD,OAkBE,OAAAE,EAlBF,QAAAmB,OAAA,oBA3BN,IAAM+J,GAAe,CAAC,CACpB,KAAAxK,EACA,cAAAC,EACA,QAAAqC,EACA,OAAAG,EACA,mBAAAtC,EACA,eAAAN,EACA,YAAA+B,EACA,aAAAC,EACA,WAAAC,EACA,SAAAhB,CACF,IAAyB,CACvB,IAAM2J,EAAiBjM,GACrB,IACE2B,EACI,GACA,CACE,SAAU,MACV,SAAU,GACV,KAAM,UACN,UAAYuK,GAAmBjJ,EAAa,OAAOiJ,CAAK,CAAC,CAC3D,EACN,CAACvK,CAAkB,CACrB,EAEA,OACEb,EAACL,GAAA,CAAoB,MAAM,OAAO,OAAQ,IACxC,SAAAwB,GAACkJ,GAAA,CACC,KAAM3J,EACN,OAAQ,CACN,IAAK,GACL,MAAO,GACP,OAAQG,EAAqB,IAAM,EACnC,KAAM,EACR,EACA,eAAe,MACf,MAAO,CAAE,OAAQ,SAAU,EAC3B,YAAayB,EACb,aAAcC,EACd,QAASuB,GAAS,CACZA,GAAO,oBAAsB,MAC/BtB,IAAa,OAAOsB,EAAM,kBAAkB,CAAC,CAEjD,EAEA,UAAA9D,EAACN,GAAA,CACC,SAAU,GACV,gBAAgB,MAChB,OAAO,UACT,EAEAM,EAACH,GAAA,CACC,QAAQ,QACR,SAAU,GACV,SAAU,GACT,GAAIgB,GAAsB,CAAE,SAAU,EAAG,OAAQ,GAAI,EACtD,KACEA,EACEb,EAAC+D,EAAA,EAAY,EAEb,CAAE,SAAU,GAAI,KAAM,SAAU,EAGpC,cAAeJ,EACjB,EAEA3D,EAACF,GAAA,CACC,SAAU,GACV,SAAU,GACV,KAAM,CAAE,SAAU,GAAI,KAAM,SAAU,EACtC,cAAgBkE,GAAcC,EAAeD,CAAC,EAC9C,OAAQhB,EACR,MAAOG,EACT,EAEAnD,EAACJ,GAAA,CAAQ,QAASI,EAACoC,GAAA,CAAsB,SAAUZ,EAAU,EAAI,EAEhEb,EAAc,MACbX,EAACsK,GAAA,CACC,QAAQ,OACR,KAAK,OACL,OAAQvK,EAAO,KACf,YAAa,EACb,gBAAgB,MAChB,IAAK,GACL,kBAAmB,GACrB,EAGDY,EAAc,UACbX,EAACR,GAAA,CACC,QAAQ,WACR,KAAK,SACL,KAAMO,EAAO,MACb,WAAY,GACZ,kBAAmB,GACnB,OAAQ,CAAC,EAAG,EAAG,EAAG,CAAC,EACnB,WAAYC,EAACQ,GAAA,CAAc,eAAgBD,EAAgB,EAC3D,MAAO4K,EACT,EAGDxK,EAAc,UACbX,EAACsK,GAAA,CACC,QAAQ,WACR,KAAK,WACL,OAAQvK,EAAO,SACf,YAAa,EACb,gBAAgB,MAChB,IAAK,CACH,KAAMA,EAAO,SACb,EAAG,EACH,YAAa,CACf,EACA,kBAAmB,GACrB,GAEJ,EACF,CAEJ,EAEOsL,GAAQH,GLhFP,cAAAlL,OAAA,oBAtDR,IAAMsL,GAAsB,CAAC,CAC3B,KAAA5K,EACA,SAAAc,EACA,cAAAb,EACA,QAAAqC,EACA,OAAAG,EACA,YAAA6H,EACA,WAAAxI,CACF,IAAgC,CAC9B,GAAM,CAACjC,EAAgB4E,CAAiB,EAAIhG,GAAwB,IAAI,EAClE,CAACsD,EAAgBC,CAAiB,EAAIvD,GAAS,CAAC,EAEhDwD,EAAcpD,GAA8B,IAAI,EAEhDqB,EAAYY,cAEZX,EAAqB3B,GAAQ,IAC7B,CAAC0B,GAAa6B,IAAmB,GAAK/B,EAAK,SAAW,EAAU,IAEhD+B,EAAiB,IAAM/B,EAAK,OAE5B,GACnB,CAAC+B,EAAgB/B,EAAK,OAAQE,CAAS,CAAC,EAErCkF,EAAmB7G,GACvB,IAAMkG,EAAkB,IAAI,EAC5B,CAAC,CACH,EAEMU,EAAkB5G,GAAkC6E,GAAS,CAC7DA,GAAO,oBAAsB,MAC/BqB,EAAkB,OAAOrB,EAAM,kBAAkB,CAAC,CAEtD,EAAG,CAAC,CAAC,EAEClB,EAAqB3D,GAAa4D,GAAgC,CAClEF,EAAY,UACdA,EAAY,QAAQ,WAAW,EAC/BA,EAAY,QAAU,MAGpBE,IACFH,EAAkBG,EAAK,WAAW,EAElCF,EAAY,QAAU,IAAI,eAAe,IACvCD,EAAkBG,EAAK,WAAW,CACpC,EACAF,EAAY,QAAQ,QAAQE,CAAI,EAEpC,EAAG,CAAC,CAAC,EAEL,OAAIjC,EAEAZ,GAAC6D,EAAA,CAAa,IAAKjB,EACjB,SAAA5C,GAACqL,GAAA,CACC,KAAM3K,EACN,cAAeC,EACf,QAASqC,EACT,OAAQG,EACR,YAAa6H,EACb,mBAAoBnK,EACpB,eAAgBN,EAChB,YAAasF,EACb,aAAcC,EACd,WAAYtD,EACZ,SAAUhB,EACZ,EACF,EAKFxB,GAAC6D,EAAA,CAAa,IAAKjB,EACjB,SAAA5C,GAACiL,GAAA,CACC,KAAMvK,EACN,cAAeC,EACf,QAASqC,EACT,OAAQG,EACR,YAAa6H,EACb,SAAUxJ,EACV,eAAgBjB,EAChB,YAAasF,EACb,aAAcC,EACd,WAAYtD,EACd,EACF,CAEJ,EAEO0B,GAAQoH,GMnGf,OAAOnH,OAAc,yBACrB,OAAOC,OAAsB,iCAC7B,OAAO9E,OAAW,sBAQhB,OAGM,OAAAU,GAHN,QAAAmB,OAAA,oBAJF,IAAMoK,GAAuB,CAAC,CAC5B,cAAA5K,EACA,cAAA2D,CACF,IACEnD,GAAC7B,GAAA,CAAM,UAAU,MAAM,eAAe,SAAS,SAAS,OAAO,IAAK,EAClE,UAAAU,GAACoE,GAAA,CACC,QACEpE,GAACmE,GAAA,CACC,QAASxD,EAAc,SACvB,SAAU,IAAM2D,EAAc,UAAU,EACxC,GAAI,CAAE,gBAAiB,CAAE,MAAOvE,EAAO,KAAM,CAAE,EACjD,EAEF,MAAM,SACR,EAEAC,GAACoE,GAAA,CACC,QACEpE,GAACmE,GAAA,CACC,QAASxD,EAAc,SACvB,SAAU,IAAM2D,EAAc,UAAU,EACxC,GAAI,CAAE,gBAAiB,CAAE,MAAOvE,EAAO,QAAS,CAAE,EACpD,EAEF,MAAM,WACR,EAEAC,GAACoE,GAAA,CACC,QACEpE,GAACmE,GAAA,CACC,QAASxD,EAAc,KACvB,SAAU,IAAM2D,EAAc,MAAM,EACpC,GAAI,CAAE,gBAAiB,CAAE,MAAOvE,EAAO,IAAK,CAAE,EAChD,EAEF,MAAM,OACR,GACF,EAGKwE,GAAQgH,GC9Cf,OAAOtK,OAAa,wBACpB,OAAO3B,MAAW,sBAClB,OAAO4B,MAAgB,2BAmBf,cAAAlB,EAWA,QAAAmB,MAXA,oBAXR,IAAMqD,GAAU,CAAC,CAAE,KAAAgH,EAAM,UAAA5K,EAAW,eAAA6K,CAAe,IAAoB,CACrE,IAAM9G,EAAWC,EAAc,OAAQ,IAAI,EAE3C,OACEzD,EAAC7B,EAAA,CACC,UAAW,CAAE,GAAI,SAAU,GAAI,KAAM,EACrC,WAAY,CAAE,GAAI,aAAc,GAAI,QAAS,EAC7C,SAAS,OACT,IAAK,EAEJ,UAAAqF,GACC3E,EAACiB,GAAA,CACC,YAAY,aACZ,SAAQ,GACR,GAAI,CACF,YAAa,SACb,GAAI,EACN,EACF,EAGFE,EAAC7B,EAAA,CACC,UAAA6B,EAACD,EAAA,CACC,QAAQ,QACR,SAAS,iBACT,MAAM,iBACP,yBACcN,EAAY,MAAQ,UACnC,EAEAZ,EAACkB,EAAA,CAAW,QAAQ,YAAY,SAAS,qBACtC,SAAAiB,EAAaqJ,GAAM,QAAQ,EAC9B,GACF,EAEAxL,EAACiB,GAAA,CACC,YAAa0D,EAAW,aAAe,WACvC,SAAQ,GACR,GAAI,CAAE,YAAaA,EAAW,QAAU,QAAS,EACnD,EAEAxD,EAAC7B,EAAA,CACC,UAAA6B,EAACD,EAAA,CACC,QAAQ,QACR,SAAS,iBACT,MAAM,iBACP,0BACeN,EAAY,MAAQ,UACpC,EAEAZ,EAACkB,EAAA,CAAW,QAAQ,YAAY,SAAS,qBACtC,SAAAiB,EAAaqJ,GAAM,QAAQ,EAC9B,GACF,EAEAxL,EAACiB,GAAA,CACC,YAAa0D,EAAW,aAAe,WACvC,SAAQ,GACR,GAAI,CAAE,YAAaA,EAAW,QAAU,QAAS,EACnD,EAEAxD,EAAC7B,EAAA,CACC,UAAA6B,EAAC7B,EAAA,CAAM,UAAU,MAAM,WAAW,SAAS,IAAK,EAC9C,UAAA6B,EAACD,EAAA,CACC,QAAQ,QACR,SAAS,iBACT,MAAM,iBACP,kBACON,EAAY,QAAU,UAC9B,EAEC6K,GACH,EAEAzL,EAACkB,EAAA,CAAW,QAAQ,YAAY,SAAS,qBACtC,SAAAiB,EAAaqJ,GAAM,IAAI,EAC1B,GACF,EAEAxL,EAACiB,GAAA,CACC,YAAa0D,EAAW,aAAe,WACvC,SAAQ,GACR,GAAI,CAAE,YAAaA,EAAW,QAAU,QAAS,EACnD,EAEAxD,EAAC7B,EAAA,CACC,UAAAU,EAACkB,EAAA,CACC,QAAQ,QACR,SAAS,iBACT,MAAM,iBACP,uBAED,EAEAlB,EAACkB,EAAA,CAAW,QAAQ,YAAY,SAAS,qBACtC,SAAAwK,GAASF,GAAM,aAAe,EAAG,CAChC,sBAAuB,EACvB,sBAAuB,CACzB,CAAC,EACH,GACF,EAEAxL,EAACiB,GAAA,CACC,YAAa0D,EAAW,aAAe,WACvC,SAAQ,GACR,GAAI,CAAE,YAAaA,EAAW,QAAU,QAAS,EACnD,EAEAxD,EAAC7B,EAAA,CACC,UAAA6B,EAAC7B,EAAA,CAAM,UAAU,MAAM,IAAK,GAC1B,UAAA6B,EAACD,EAAA,CACC,QAAQ,QACR,SAAS,iBACT,MAAM,iBACP,oBACSN,EAAY,MAAQ,UAC9B,EAEAZ,EAAC2L,GAAA,CACC,KAAK,8IACL,MAAO,GACP,MAAK,GACL,GAAI,CAAE,GAAI,GAAK,EACjB,GACF,EAEA3L,EAACkB,EAAA,CAAW,QAAQ,YAAY,SAAS,qBACtC,SAAAiB,EAAaqJ,GAAM,GAAG,EACzB,GACF,GACF,CAEJ,EAEO3G,GAAQL,GRzDX,mBAAAM,GAEI,OAAA9E,EAII,QAAAmB,OANR,oBAvEJ,IAAMyK,GAAiB,CAAC,CACtB,KAAAlL,EACA,KAAA8K,EACA,SAAAhK,EACA,aAAAwD,EACA,eAAAyG,EACA,gBAAAxG,CACF,IAA2B,CACzB,GAAM,CAACtE,EAAeuE,CAAgB,EAAI/F,GAA2B,CACnE,SAAU,GACV,SAAU,GACV,KAAM,EACR,CAAC,EAEK,CAACiG,EAAYC,CAAa,EAAIlG,GAAS,EAAK,EAC5C,CAACmG,EAAeC,CAAgB,EAAIpG,GAAS,EAAE,EAC/C,CAACqG,EAAoBC,CAAqB,EAAItG,GAAS,CAAC,EAExDyB,EAAYY,cAEZwB,EAAU9D,GAAQ,IAAwB,CAC9C,GAAI,CAACwB,EAAK,OAAQ,MAAO,CAAC,EAAG,CAAC,EAE9B,IAAMmL,EAASnL,EAAK,QAAQI,GAAQ,CAClC,OAAOA,EAAK,QAAQ,GAAK,EACzB,OAAOA,EAAK,QAAQ,GAAK,EACzB,OAAOA,EAAK,IAAI,GAAK,CACvB,CAAC,EAEKsC,EAAM,KAAK,IAAI,GAAGyI,CAAM,EAE9B,MAAO,CAAC,EAAGzI,EAAM,EAAIA,EAAM,KAAO,CAAC,CACrC,EAAG,CAAC1C,CAAI,CAAC,EAEHyC,EAASjE,GAAQ,IAAM,CAC3B,GAAM,CAAC,CAAEkE,CAAG,EAAIJ,EAEVK,EAAOD,EAAM,EAEb0I,EAAQ,MAAM,KAAK,CAAE,OAAQ,CAAE,EAAG,CAACxI,GAAGC,KAAM,KAAK,MAAMF,EAAOE,EAAC,CAAC,EAEtE,MAAO,CAAC,GAAG,IAAI,IAAIuI,CAAK,CAAC,CAC3B,EAAG,CAAC9I,CAAO,CAAC,EAEN+I,EAAqB9M,GAAa+M,GAAgC,CACtE9G,EAAiBU,IAAS,CAAE,GAAGA,EAAM,CAACoG,CAAG,EAAG,CAACpG,EAAKoG,CAAG,CAAE,EAAE,CAC3D,EAAG,CAAC,CAAC,EAECtG,EAAoBzG,GACvBgN,GAAmBF,EAAmBE,CAAgC,EACvE,CAACF,CAAkB,CACrB,EAEMhG,EAAiB9G,GACpBqB,GAAkB,CACjB,IAAMQ,EAAOJ,EAAKJ,CAAK,EAClBQ,IACLyE,EAAiBzE,EAAK,KAAK,EAC3B2E,EAAsB3E,EAAK,QAAQ,EACnCuE,EAAc,EAAI,EACpB,EACA,CAAC3E,CAAI,CACP,EAEMsF,EAAoB/G,GAAY,IAAM,CAC1CoG,EAAc,EAAK,CACrB,EAAG,CAAC,CAAC,EAEC2F,EAAc/L,GAAa+E,GAAcC,EAAeD,CAAC,EAAG,CAAC,CAAC,EAEpE,OACE7C,GAAA2D,GAAA,CACE,UAAA3D,GAACgF,EAAA,CACC,UAAAnG,EAACX,GAAA,CAAW,MAAM,2BAAqB,EAEvCW,EAACZ,GAAA,CACC,SAAAY,EAACoG,EAAA,CAAO,QAAS1F,EAAK,SAAW,EAAG,MAAOV,EAACqG,EAAA,EAAW,EACrD,SAAAlF,GAAC7B,GAAA,CAAM,IAAK,EACV,UAAAU,EAACV,GAAA,CAAM,QAAS,CAAE,GAAI,OAAQ,GAAI,OAAQ,EACxC,SAAAU,EAAC6E,GAAA,CACC,KAAM2G,EACN,UAAW5K,EACX,eAAgB6K,EAClB,EACF,EAEAzL,EAACkE,GAAA,CACC,KAAMxD,EACN,SAAUc,EACV,cAAeb,EACf,QAASqC,EACT,OAAQG,EACR,YAAa6H,EACb,WAAYjF,EACd,EAEA/F,EAACuE,GAAA,CACC,cAAe5D,EACf,cAAe+E,EACjB,EAEA1F,EAACV,GAAA,CAAM,QAAS,CAAE,GAAI,QAAS,GAAI,MAAO,EACxC,SAAAU,EAAC6E,GAAA,CACC,KAAM2G,EACN,UAAW5K,EACX,eAAgB6K,EAClB,EACF,GACF,EACF,EACF,GACF,EAECnG,GAAiBL,GAChBjF,EAACiF,EAAA,CACC,KAAMG,EACN,QAASY,EACT,MAAOV,EACP,SAAU9D,EACV,aAAcwD,EACd,WAAYQ,EACd,GAEJ,CAEJ,EAEO0G,GAAQN,GS/If,OAAS,eAAA3M,GAAa,WAAAC,GAAS,YAAAC,OAAgB,QAC/C,OAAOC,OAAiB,4BACxB,OAAOC,OAAgB,2BACvB,OAAOC,OAAW,sBCHlB,OAAS,eAAAL,GAAa,WAAAC,GAAS,UAAAK,GAAQ,YAAAJ,OAAgB,QACvD,OACE,OAAAK,GACA,YAAAC,GACA,iBAAAC,GACA,uBAAAC,GACA,WAAAC,GACA,SAAAC,GACA,SAAAC,OACK,WCgBA,IAAMC,GAAS,CACpB,SAAU,UACV,SAAU,SACZ,ECfI,cAAAC,OAAA,oBAXJ,IAAMC,GAAgB,CAAC,CACrB,EAAAC,EAAI,EACJ,EAAAC,EAAI,EACJ,MAAAC,EAAQ,EACR,OAAAC,EAAS,EACT,MAAAC,EACA,eAAAC,CACF,IACMA,IAAmBD,EAAc,KAGnCN,GAAC,QACC,EAAGE,EAAI,EACP,EAAGC,EACH,MAAOC,EAAQ,GACf,OAAQC,EAAS,EACjB,KAAK,UACL,QAAS,IACT,GAAI,EACN,EAIGG,GAAQP,GCXX,cAAAD,OAAA,oBAZJ,IAAMmM,GAAqB,CAAC,CAC1B,EAAAjM,EAAI,EACJ,EAAAC,EAAI,EACJ,MAAAC,EAAQ,EACR,OAAAC,EAAS,EACT,MAAAC,EACA,eAAAC,EACA,aAAA6L,CACF,IACM7L,IAAmBD,EAAc,KAGnCN,GAAC,QACC,EAAGE,EAAI,EACP,EAAGC,EACH,MAAOiM,EAAehM,EAAQ,EAAI,EAAI,GAAKA,EAAQ,GACnD,OAAQC,EAAS,EACjB,KAAK,UACL,QAAS,IACT,GAAI,EACN,EAIGgM,GAAQF,GC1Bf,OAAOlL,OAAa,wBACpB,OAAO3B,OAAW,sBAClB,OAAO4B,OAAgB,2BAmCjB,cAAAlB,GAoBM,QAAAmB,OApBN,oBA1BN,IAAMmL,GAAuB,CAAC,CAC5B,OAAAjL,EACA,QAAAC,EACA,MAAAC,EACA,SAAAC,CACF,IAA0B,CACxB,GAAI,CAACH,GAAU,CAACC,GAAS,OAAQ,OAAO,KAExC,IAAMG,EAAUD,YAEZE,EAAiB,OAAOH,CAAK,EAC3BI,EAAQD,EAAe,MAAM,GAAG,EAEtC,GAAIC,EAAM,QAAU,EAAG,CACrB,IAAMC,EAAa,SAASD,EAAM,CAAC,EAAG,EAAE,EAAI,EACtCE,EAAQC,EAAkBF,CAAU,EAEtCH,GAAWE,EAAM,SAAW,EAC9BD,EAAiB,GAAG,SAASC,EAAM,CAAC,EAAG,EAAE,QAAQE,QAAYF,EAAM,CAAC,IAC1DF,IACVC,EAAiB,GAAGG,QAAYF,EAAM,CAAC,KAI3C,OACER,GAACc,EAAA,CAAW,SAAU,CAAE,GAAI,OAAQ,GAAI,GAAI,EAAG,EAAG,EAAG,IAAK,EACxD,UAAAjC,GAACkB,GAAA,CACC,QAAQ,QACR,SAAS,iBACT,MAAM,iBAEL,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,SAAS,iBAAiB,OAAM,GACzD,SAAAgB,EAAM,KACT,GACF,EAEAlC,GAACkB,GAAA,CAAW,QAAQ,QAAQ,SAAS,iBAClC,SAAAiB,EAAaD,EAAM,KAAK,EAC3B,IAtBKA,EAAM,IAuBb,CACD,EACH,GACF,CAEJ,EAEOE,GAAQkK,GJoBP,OAaE,OAAAtM,EAbF,QAAAmB,OAAA,oBA5ER,IAAMoL,GAAgB,CAAC,CACrB,KAAA7L,EACA,SAAAc,EACA,cAAAb,EACA,eAAAJ,EACA,YAAA+B,EACA,aAAAC,CACF,IAAkB,CAChB,IAAM3B,EAAYY,cAEZ,CAACiB,EAAgBC,CAAiB,EAAIvD,GAAS,CAAC,EAChDwD,EAAcpD,GAA8B,IAAI,EAEhDqD,EAAqB3D,GAAa4D,GAAgC,CAClEF,EAAY,UACdA,EAAY,QAAQ,WAAW,EAC/BA,EAAY,QAAU,MAEpBE,IACFH,EAAkBG,EAAK,WAAW,EAClCF,EAAY,QAAU,IAAI,eAAe,IACvCD,EAAkBG,EAAK,WAAW,CACpC,EACAF,EAAY,QAAQ,QAAQE,CAAI,EAEpC,EAAG,CAAC,CAAC,EAEChC,EAAqB3B,GAAQ,IAC7B,CAAC0B,GACD6B,IAAmB,GAAK/B,EAAK,SAAW,EAAU,IAClC+B,EAAiB,IAAM/B,EAAK,OAC5B,GACnB,CAACE,EAAW6B,EAAgB/B,EAAK,MAAM,CAAC,EAErC8L,EAAkBtN,GACtB,IAAMwB,EAAK,KAAKI,GAAQA,EAAK,eAAiB,CAAC,EAC/C,CAACJ,CAAI,CACP,EAEM+L,EAAkBvN,GACtB,IAAMwB,EAAK,KAAKI,GAAQA,EAAK,eAAiB,CAAC,EAC/C,CAACJ,CAAI,CACP,EAEMsC,EAAU9D,GAAQ,IAAwB,CAC9C,GAAI,CAACwB,EAAK,OAAQ,MAAO,CAAC,EAAG,CAAC,EAC9B,IAAMmL,EAASnL,EAAK,QAAQI,GAAQ,CAClCA,EAAK,eACLA,EAAK,cACP,CAAC,EACKsC,EAAM,KAAK,IAAI,GAAGyI,CAAM,EAC9B,MAAO,CAAC,EAAGzI,EAAM,EAAIA,EAAM,KAAO,CAAC,CACrC,EAAG,CAAC1C,CAAI,CAAC,EAEHyC,EAASjE,GAAQ,IAAM,CAC3B,GAAM,CAAC,CAAEkE,CAAG,EAAIJ,EACVK,EAAOD,EAAM,EACnB,MAAO,CACL,GAAG,IAAI,IAAI,MAAM,KAAK,CAAE,OAAQ,CAAE,EAAG,CAACE,EAAGC,IAAM,KAAK,MAAMF,EAAOE,CAAC,CAAC,CAAC,CACtE,CACF,EAAG,CAACP,CAAO,CAAC,EAENU,EAAgBxE,GACpB,IAAO0B,EAAY+C,EAAmBC,EACtC,CAAChD,CAAS,CACZ,EAEMwL,EACJzL,EAAc,UACd6L,GACA7L,EAAc,UACd8L,EAEF,OACEzM,EAAC6D,EAAA,CAAa,IAAKjB,EACjB,SAAA5C,EAACL,GAAA,CAAoB,MAAM,OAAO,OAAQ,IACxC,SAAAwB,GAAC1B,GAAA,CACC,KAAMiB,EACN,OAAQ,CACN,IAAK,GACL,MAAO,GACP,OAAQG,EAAqB,IAAM,EACnC,KAAM,EACR,EACA,eAAe,MACf,OAAQ,EACR,YAAayB,EACb,aAAcC,EAEd,UAAAvC,EAACN,GAAA,CACC,SAAU,GACV,gBAAgB,MAChB,OAAO,UACT,EAEAM,EAACH,GAAA,CACC,QAAQ,QACR,SAAU,GACV,SAAU,GACT,GAAIgB,GAAsB,CAAE,SAAU,EAAG,OAAQ,GAAI,EACtD,KACEA,EACEb,EAAC+D,EAAA,EAAY,EAEb,CAAE,SAAU,GAAI,KAAM,SAAU,EAGpC,cAAeL,EACjB,EAEA1D,EAACF,GAAA,CACC,SAAU,GACV,SAAU,GACV,KAAM,CAAE,SAAU,GAAI,KAAM,SAAU,EACtC,cAAgBkE,GAAcC,EAAeD,CAAC,EAC9C,OAAQhB,EACR,MAAOG,EACT,EAEAnD,EAACJ,GAAA,CACC,QAASI,EAACoC,GAAA,CAAqB,SAAUZ,EAAU,EACnD,OAAQ,GACV,EAECb,EAAc,UAAY6L,GACzBxM,EAACR,GAAA,CACC,QAAQ,iBACR,KAAK,YACL,KAAMO,GAAO,SACb,WAAY,GACZ,kBAAmB,GACnB,OAAQ,CAAC,EAAG,EAAG,EAAG,CAAC,EACnB,WACEC,EAACqM,GAAA,CACC,eAAgB9L,EAChB,aAAc6L,EAChB,EAEJ,EAGDzL,EAAc,UAAY8L,GACzBzM,EAACR,GAAA,CACC,QAAQ,iBACR,KAAK,WACL,KAAMO,GAAO,SACb,WAAY,GACZ,kBAAmB,GACnB,OAAQ,CAAC,EAAG,EAAG,EAAG,CAAC,EAClB,GAAI,CAACY,EAAc,UAAY,CAC9B,WAAYX,EAACQ,GAAA,CAAc,eAAgBD,EAAgB,CAC7D,EACF,GAEJ,EACF,EACF,CAEJ,EAEO2D,GAAQqI,GKxLf,OAAOpI,OAAc,yBACrB,OAAOC,OAAsB,iCAC7B,OAAO9E,OAAW,sBAKhB,OAGM,OAAAU,GAHN,QAAAmB,OAAA,oBADF,IAAMuL,GAAsB,CAAC,CAAE,cAAA/L,EAAe,cAAA2D,CAAc,IAC1DnD,GAAC7B,GAAA,CAAM,UAAU,MAAM,eAAe,SAAS,SAAS,OAAO,IAAK,EAClE,UAAAU,GAACoE,GAAA,CACC,QACEpE,GAACmE,GAAA,CACC,QAASxD,EAAc,SACvB,SAAU,IAAM2D,EAAc,UAAU,EACxC,GAAI,CAAE,gBAAiB,CAAE,MAAOvE,GAAO,QAAS,CAAE,EACpD,EAEF,MAAM,YACR,EAEAC,GAACoE,GAAA,CACC,QACEpE,GAACmE,GAAA,CACC,QAASxD,EAAc,SACvB,SAAU,IAAM2D,EAAc,UAAU,EACxC,GAAI,CAAE,gBAAiB,CAAE,MAAOvE,GAAO,QAAS,CAAE,EACpD,EAEF,MAAM,WACR,GACF,EAGKwE,GAAQmI,GChCf,OAAOzL,OAAa,wBACpB,OAAO3B,OAAW,sBAClB,OAAO4B,OAAgB,2BAuBf,cAAAlB,EAUF,QAAAmB,OAVE,oBAhBR,IAAMwL,GAAuB,CAAC,CAC5B,cAAAC,EACA,cAAAC,EACA,WAAAC,EACA,UAAAlM,CACF,IAAoB,CAClB,IAAM+D,EAAWC,EAAc,OAAQ,IAAI,EAE3C,OACEzD,GAAC7B,GAAA,CACC,UAAW,CAAE,GAAI,SAAU,GAAI,KAAM,EACrC,WAAY,CAAE,GAAI,aAAc,GAAI,QAAS,EAC7C,SAAS,OACT,IAAK,EAEJ,UAAAqF,GACC3E,EAACiB,GAAA,CACC,YAAY,aACZ,SAAQ,GACR,GAAI,CACF,YAAa,SACb,GAAI,EACN,EACF,EAGFE,GAAC7B,GAAA,CACC,UAAAU,EAACkB,GAAA,CACC,QAAQ,QACR,SAAS,iBACT,MAAM,iBAEL,SAAAN,EAAY,wBAA0B,2BACzC,EAEAZ,EAACkB,GAAA,CAAW,QAAQ,YAAY,SAAS,qBACtC,SAAAiB,EAAayK,CAAa,EAC7B,GACF,EAEA5M,EAACiB,GAAA,CACC,YAAa0D,EAAW,aAAe,WACvC,SAAQ,GACR,GAAI,CAAE,YAAaA,EAAW,QAAU,QAAS,EACnD,EAEAxD,GAAC7B,GAAA,CACC,UAAAU,EAACkB,GAAA,CACC,QAAQ,QACR,SAAS,iBACT,MAAM,iBAEL,SAAAN,EAAY,yBAA2B,4BAC1C,EAEAZ,EAACkB,GAAA,CAAW,QAAQ,YAAY,SAAS,qBACtC,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,CACC,QAAQ,QACR,SAAS,iBACT,MAAM,iBACP,uBAED,EAEAC,GAACD,GAAA,CAAW,QAAQ,YAAY,SAAS,qBACtC,UAAA4L,EAAW,KACd,GACF,GACF,CAEJ,EAEOjI,GAAQ8H,GPlCT,cAAA3M,EAII,QAAAmB,OAJJ,oBA1CN,IAAM4L,GAAgB,CAAC,CAAE,KAAArM,EAAM,SAAAc,CAAS,IAA0B,CAChE,IAAMZ,EAAYY,cAEZ,CAACb,EAAeuE,CAAgB,EAAI/F,GAAwB,CAChE,SAAU,GACV,SAAU,EACZ,CAAC,EACK,CAACoB,EAAgB4E,CAAiB,EAAIhG,GAAwB,IAAI,EAElEuG,EAAoBzG,GAAa0G,GAA+B,CACpET,EAAiBU,IAAS,CAAE,GAAGA,EAAM,CAACD,CAAK,EAAG,CAACC,EAAKD,CAAK,CAAE,EAAE,CAC/D,EAAG,CAAC,CAAC,EAECE,EAAkB5G,GAAkC6E,GAAS,CAC7DA,GAAO,oBAAsB,MAC/BqB,EAAkB,OAAOrB,EAAM,kBAAkB,CAAC,CAEtD,EAAG,CAAC,CAAC,EAECgC,EAAmB7G,GACvB,IAAMkG,EAAkB,IAAI,EAC5B,CAAC,CACH,EAEMc,EAAS/G,GAAQ,IAAM,CAC3B,IAAM2N,EAAgBnM,EAAK,OACzB,CAACwF,EAAKpF,IAASoF,GAAOpF,EAAK,gBAAkB,GAC7C,CACF,EAEM8L,EAAgBlM,EAAK,OACzB,CAACwF,EAAKpF,IAASoF,GAAOpF,EAAK,gBAAkB,GAC7C,CACF,EAEMgM,EACJF,EAAgB,EAAI,KAAK,MAAOC,EAAgBD,EAAiB,GAAG,EAAI,EAC1E,MAAO,CAAE,cAAAC,EAAe,cAAAD,EAAe,WAAAE,CAAW,CACpD,EAAG,CAACpM,CAAI,CAAC,EAET,OACES,GAACgF,EAAA,CACC,UAAAnG,EAACX,GAAA,CAAW,MAAM,6CAAuC,EAEzDW,EAACZ,GAAA,CACC,SAAAY,EAACoG,EAAA,CAAO,QAAS1F,EAAK,SAAW,EAAG,MAAOV,EAACqG,EAAA,EAAW,EACrD,SAAAlF,GAAC7B,GAAA,CAAM,IAAK,EACV,UAAAU,EAACV,GAAA,CAAM,QAAS,CAAE,GAAI,OAAQ,GAAI,OAAQ,EACxC,SAAAU,EAAC6E,GAAA,CACC,cAAeoB,EAAO,cACtB,cAAeA,EAAO,cACtB,WAAYA,EAAO,WACnB,UAAWrF,EACb,EACF,EAEAZ,EAACkE,GAAA,CACC,KAAMxD,EACN,SAAUc,EACV,cAAeb,EACf,eAAgBJ,EAChB,YAAasF,EACb,aAAcC,EAChB,EAEA9F,EAACuE,GAAA,CACC,cAAe5D,EACf,cAAe+E,EACjB,EAEA1F,EAACV,GAAA,CAAM,QAAS,CAAE,GAAI,QAAS,GAAI,MAAO,EACxC,SAAAU,EAAC6E,GAAA,CACC,cAAeoB,EAAO,cACtB,cAAeA,EAAO,cACtB,WAAYA,EAAO,WACnB,UAAWrF,EACb,EACF,GACF,EACF,EACF,GACF,CAEJ,EAEOoM,GAAQD","sourcesContent":["import { useCallback, useMemo, useState } from 'react';\nimport CardContent from '@mui/material/CardContent';\nimport CardHeader from '@mui/material/CardHeader';\nimport Stack from '@mui/material/Stack';\nimport { CategoricalChartFunc } from 'recharts/types/chart/types';\n\nimport { ChartCard } from 'components/Analytics/ChartStyles';\nimport EmptyState from 'components/Analytics/EmptyState';\nimport Result from 'components/Result';\nimport { ViewMode } from 'types/analytics';\n\nimport Chart from './Chart';\nimport Legend from './Legend';\nimport { OrdersByTypeProps, VisibleSeries } from './props';\nimport Summary from './Summary';\n\nconst OrdersByType = ({\n data,\n viewMode,\n selectedYear,\n DetailComponent,\n}: OrdersByTypeProps) => {\n const isMonthly = viewMode === ViewMode.MONTHLY;\n\n const [visibleSeries, setVisibleSeries] = useState<VisibleSeries>({\n orders: true,\n quotations: true,\n });\n\n const [activeBarIndex, setActiveBarIndex] = useState<number | null>(null);\n\n const [detailOpen, setDetailOpen] = useState(false);\n const [selectedLabel, setSelectedLabel] = useState('');\n const [selectedTotalValue, setSelectedTotalValue] = useState(0);\n\n const handleToggleSerie = useCallback((serie: keyof VisibleSeries) => {\n setVisibleSeries(prev => ({ ...prev, [serie]: !prev[serie] }));\n }, []);\n\n const handleMouseMove = useCallback<CategoricalChartFunc>(state => {\n if (state?.activeTooltipIndex != null) {\n setActiveBarIndex(Number(state.activeTooltipIndex));\n }\n }, []);\n\n const handleMouseLeave = useCallback<CategoricalChartFunc>(\n () => setActiveBarIndex(null),\n [],\n );\n\n const handleBarClick = useCallback(\n (index: number) => {\n const item = data[index];\n if (!item) return;\n setSelectedLabel(item.label);\n setSelectedTotalValue(item.order_value);\n setDetailOpen(true);\n },\n [data],\n );\n\n const handleDetailClose = useCallback(() => {\n setDetailOpen(false);\n }, []);\n\n const totals = useMemo(() => {\n const ordersTotal = data.reduce(\n (acc, item) => acc + (item.order_count ?? 0),\n 0,\n );\n const quotationsTotal = data.reduce(\n (acc, item) => acc + (item.quotation_count ?? 0),\n 0,\n );\n return { ordersTotal, quotationsTotal };\n }, [data]);\n\n return (\n <>\n <ChartCard>\n <CardHeader title=\"Quantidade de pedidos por tipo\" />\n\n <CardContent>\n <Result isEmpty={data.length === 0} empty={<EmptyState />}>\n <Stack gap={3}>\n <Stack display={{ xs: 'none', md: 'block' }}>\n <Summary\n isMonthly={isMonthly}\n ordersTotal={totals.ordersTotal}\n quotationsTotal={totals.quotationsTotal}\n />\n </Stack>\n\n <Chart\n data={data}\n viewMode={viewMode}\n visibleSeries={visibleSeries}\n activeBarIndex={activeBarIndex}\n onMouseMove={handleMouseMove}\n onMouseLeave={handleMouseLeave}\n onBarClick={handleBarClick}\n />\n\n <Legend\n visibleSeries={visibleSeries}\n onToggleSerie={handleToggleSerie}\n />\n\n <Stack display={{ xs: 'block', md: 'none' }}>\n <Summary\n isMonthly={isMonthly}\n ordersTotal={totals.ordersTotal}\n quotationsTotal={totals.quotationsTotal}\n />\n </Stack>\n </Stack>\n </Result>\n </CardContent>\n </ChartCard>\n\n {selectedLabel && DetailComponent && (\n <DetailComponent\n open={detailOpen}\n onClose={handleDetailClose}\n label={selectedLabel}\n viewMode={viewMode}\n selectedYear={selectedYear}\n totalValue={selectedTotalValue}\n />\n )}\n </>\n );\n};\n\nexport default OrdersByType;\n","import { ReactElement, useCallback, useMemo, useRef, useState } from 'react';\nimport {\n Bar,\n BarChart,\n CartesianGrid,\n ResponsiveContainer,\n Tooltip,\n XAxis,\n YAxis,\n} from 'recharts';\n\nimport { ChartWrapper } from 'components/Analytics/ChartStyles';\nimport RotatedTick from 'components/Analytics/RotatedTick';\nimport { ViewMode } from 'types/analytics';\nimport { formatDayLabel, formatMonthLabel } from 'utils/chart';\nimport { fShortenNumber } from 'utils/formatNumber';\n\nimport { COLORS } from '../props';\n\nimport BarBackground from './BarBackground';\nimport BarLabel from './BarLabel';\nimport { ChartProps } from './props';\nimport OrdersByTypeTooltip from './Tooltip';\n\nconst Chart = ({\n data,\n viewMode,\n visibleSeries,\n activeBarIndex,\n onMouseMove,\n onMouseLeave,\n onBarClick,\n}: ChartProps) => {\n const isMonthly = viewMode === ViewMode.MONTHLY;\n const [containerWidth, setContainerWidth] = useState(0);\n const observerRef = useRef<ResizeObserver | null>(null);\n\n const wrapperRefCallback = useCallback((node: HTMLDivElement | null) => {\n if (observerRef.current) {\n observerRef.current.disconnect();\n observerRef.current = null;\n }\n if (node) {\n setContainerWidth(node.clientWidth);\n observerRef.current = new ResizeObserver(() =>\n setContainerWidth(node.clientWidth),\n );\n observerRef.current.observe(node);\n }\n }, []);\n\n const shouldRotateLabels = useMemo(() => {\n if (!isMonthly) return false;\n if (containerWidth === 0 || data.length === 0) return false;\n const slotPerBar = (containerWidth - 60) / data.length;\n return slotPerBar < 80;\n }, [isMonthly, containerWidth, data.length]);\n\n const hasOrderData = useMemo(\n () => data.some(d => (d.order_count ?? 0) > 0),\n [data],\n );\n\n const hasQuotationData = useMemo(\n () => data.some(d => (d.quotation_count ?? 0) > 0),\n [data],\n );\n\n const yDomain = useMemo((): [number, number] => {\n if (!data.length) return [0, 1];\n const maxTotal = Math.max(\n ...data.map(d => (d.order_count ?? 0) + (d.quotation_count ?? 0)),\n );\n return [0, maxTotal > 0 ? maxTotal * 1.15 : 1];\n }, [data]);\n\n const yTicks = useMemo(() => {\n const [, max] = yDomain;\n const step = max / 6;\n return [\n ...new Set(Array.from({ length: 7 }, (_, i) => Math.round(step * i))),\n ];\n }, [yDomain]);\n\n const quotationsOnTop = visibleSeries.quotations && hasQuotationData;\n\n const ordersIsTop = visibleSeries.orders && hasOrderData && !quotationsOnTop;\n\n const tickFormatter = useMemo(\n () => (isMonthly ? formatMonthLabel : formatDayLabel),\n [isMonthly],\n );\n\n return (\n <ChartWrapper ref={wrapperRefCallback}>\n <ResponsiveContainer width=\"100%\" height={250}>\n <BarChart\n data={data}\n margin={{\n top: 20,\n right: 10,\n bottom: shouldRotateLabels ? -90 : 0,\n left: 20,\n }}\n barCategoryGap=\"20%\"\n style={{ cursor: 'pointer' }}\n onMouseMove={onMouseMove}\n onMouseLeave={onMouseLeave}\n onClick={state => {\n if (state?.activeTooltipIndex != null) {\n onBarClick?.(Number(state.activeTooltipIndex));\n }\n }}\n >\n <CartesianGrid\n vertical={false}\n strokeDasharray=\"3 3\"\n stroke=\"#F4F6F8\"\n />\n\n <XAxis\n dataKey=\"label\"\n axisLine={false}\n tickLine={false}\n {...(shouldRotateLabels && { interval: 0, height: 120 })}\n tick={\n shouldRotateLabels ? (\n <RotatedTick />\n ) : (\n { fontSize: 12, fill: '#637381' }\n )\n }\n tickFormatter={tickFormatter}\n />\n\n <YAxis\n axisLine={false}\n tickLine={false}\n tick={{ fontSize: 12, fill: '#637381' }}\n tickFormatter={(v: number) => fShortenNumber(v)}\n domain={yDomain}\n ticks={yTicks}\n />\n\n <Tooltip\n content={<OrdersByTypeTooltip viewMode={viewMode} />}\n cursor={false}\n />\n\n <Bar\n dataKey=\"order_count\"\n name=\"Vendas\"\n fill={COLORS.orders}\n stackId=\"orders\"\n maxBarSize={48}\n isAnimationActive={false}\n hide={!visibleSeries.orders}\n background={<BarBackground activeBarIndex={activeBarIndex} />}\n radius={ordersIsTop ? [4, 4, 0, 0] : undefined}\n {...(ordersIsTop && {\n label: {\n position: 'top' as const,\n fontSize: 11,\n fill: '#212B36',\n content: (\n <BarLabel\n data={data}\n visibleSeries={visibleSeries}\n isMonthly={isMonthly}\n shouldRotateLabels={shouldRotateLabels}\n />\n ) as unknown as ReactElement,\n },\n })}\n />\n\n <Bar\n dataKey=\"quotation_count\"\n name=\"Orçamentos\"\n fill={COLORS.quotations}\n stackId=\"orders\"\n maxBarSize={48}\n isAnimationActive={false}\n hide={!visibleSeries.quotations}\n radius={quotationsOnTop ? [4, 4, 0, 0] : undefined}\n {...(!visibleSeries.orders && {\n background: <BarBackground activeBarIndex={activeBarIndex} />,\n })}\n {...(quotationsOnTop && {\n label: {\n position: 'top' as const,\n fontSize: 11,\n fill: '#212B36',\n content: (\n <BarLabel\n data={data}\n visibleSeries={visibleSeries}\n isMonthly={isMonthly}\n shouldRotateLabels={shouldRotateLabels}\n />\n ) as unknown as ReactElement,\n },\n })}\n />\n </BarChart>\n </ResponsiveContainer>\n </ChartWrapper>\n );\n};\n\nexport default Chart;\n","import { ComponentType } from 'react';\n\nimport { ViewMode } from 'types/analytics';\nimport {\n OverviewDetailBaseProps,\n QuotationDashboardSeriesItem,\n} from 'types/overviewAnalytics';\n\nexport interface OrdersByTypeProps {\n data: QuotationDashboardSeriesItem[];\n viewMode: ViewMode;\n selectedYear: number;\n DetailComponent?: ComponentType<OverviewDetailBaseProps>;\n}\n\nexport interface VisibleSeries {\n orders: boolean;\n quotations: boolean;\n}\n\nexport interface SummaryProps {\n isMonthly: boolean;\n ordersTotal: number;\n quotationsTotal: number;\n}\n\nexport interface LegendProps {\n visibleSeries: VisibleSeries;\n onToggleSerie: (serie: keyof VisibleSeries) => void;\n}\n\nexport const COLORS = {\n orders: '#22C55E',\n quotations: '#0EA5E9',\n} as const;\n","import { BarBackgroundComponentProps } from './props';\n\nconst BarBackground = ({\n x = 0,\n y = 0,\n width = 0,\n height = 0,\n index,\n activeBarIndex,\n}: BarBackgroundComponentProps) => {\n if (activeBarIndex !== index) return null;\n\n return (\n <rect\n x={x - 6}\n y={y}\n width={width + 12}\n height={height + 6}\n fill=\"#919EAB\"\n opacity={0.16}\n rx={6}\n />\n );\n};\n\nexport default BarBackground;\n","import { BarLabelProps } from './props';\n\nconst BarLabel = ({\n x = 0,\n y = 0,\n width = 0,\n index = 0,\n data,\n visibleSeries,\n isMonthly,\n shouldRotateLabels,\n}: BarLabelProps) => {\n if (!isMonthly || shouldRotateLabels) return null;\n\n const item = data[index];\n if (!item) return null;\n\n let total = 0;\n if (visibleSeries.orders) total += item.order_count ?? 0;\n if (visibleSeries.quotations) total += item.quotation_count ?? 0;\n if (!total) return null;\n\n return (\n <text\n x={x + width / 2}\n y={y - 8}\n textAnchor=\"middle\"\n fontSize={11}\n fill=\"#212B36\"\n >\n {total}\n </text>\n );\n};\n\nexport default BarLabel;\n","import Divider from '@mui/material/Divider';\nimport Stack from '@mui/material/Stack';\nimport Typography from '@mui/material/Typography';\n\nimport SimpleCard from 'components/SimpleCard';\nimport { ViewMode } from 'types/analytics';\nimport { MONTH_FULL_LABELS } from 'utils/chart';\nimport { fCurrencyBRL } from 'utils/formatNumber';\n\nimport { CustomTooltipProps } from './props';\n\nconst OrdersByTypeTooltip = ({\n active,\n payload,\n label,\n viewMode,\n}: CustomTooltipProps) => {\n if (!active || !payload?.length) return null;\n\n const isDaily = viewMode === ViewMode.DAILY;\n\n let formattedLabel = String(label);\n const parts = formattedLabel.split('-');\n\n if (parts.length >= 2) {\n const monthIndex = parseInt(parts[1], 10) - 1;\n const month = MONTH_FULL_LABELS[monthIndex];\n\n if (isDaily && parts.length === 3) {\n formattedLabel = `${parseInt(parts[2], 10)} de ${month} de ${parts[0]}`;\n } else if (!isDaily) {\n formattedLabel = `${month} de ${parts[0]}`;\n }\n }\n\n const data = payload[0].payload;\n\n const items = [\n {\n name: 'Vendas',\n count: data.order_count ?? 0,\n value: data.order_value ?? 0,\n color: payload.find(p => p.dataKey === 'order_count')?.color ?? '#22C55E',\n },\n {\n name: 'Orçamentos',\n count: data.quotation_count ?? 0,\n value: data.quotation_value ?? 0,\n color:\n payload.find(p => p.dataKey === 'quotation_count')?.color ?? '#0EA5E9',\n },\n ];\n\n return (\n <SimpleCard minWidth={{ xs: 'auto', sm: 300 }} p={1} gap={1}>\n <Typography\n variant=\"body2\"\n fontSize=\"body2.fontSize\"\n color=\"text.secondary\"\n >\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\" fontSize=\"body2.fontSize\" noWrap>\n {entry.name}\n </Typography>\n </Stack>\n\n <Typography\n variant=\"body2\"\n fontSize=\"body2.fontSize\"\n color=\"text.disabled\"\n noWrap\n >\n {entry.count} {entry.count === 1 ? 'pedido' : 'pedidos'}&ensp;\n <Typography\n component=\"span\"\n variant=\"body2\"\n fontSize=\"body2.fontSize\"\n color=\"text.primary\"\n >\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\n variant=\"body2\"\n fontSize=\"body2.fontSize\"\n color=\"text.secondary\"\n >\n {isMonthly ? 'Vendas no ano' : 'Vendas no mês'}\n </Typography>\n\n <Typography variant=\"subtitle2\" fontSize=\"subtitle2.fontSize\">\n {ordersTotal} vendas\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\n variant=\"body2\"\n fontSize=\"body2.fontSize\"\n color=\"text.secondary\"\n >\n {isMonthly ? 'Orçamentos no ano' : 'Orçamentos no mês'}\n </Typography>\n\n <Typography variant=\"subtitle2\" fontSize=\"subtitle2.fontSize\">\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\" fontSize=\"body2.fontSize\" 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 fontSize=\"subtitle2.fontSize\"\n sx={{ textDecoration: 'underline' }}\n noWrap\n >\n {order.partner?.name || '-'}\n </Link>\n ) : (\n <Typography\n variant=\"body2\"\n fontSize=\"body2.fontSize\"\n color=\"text.primary\"\n noWrap\n >\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\" fontSize=\"body2.fontSize\" 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\n variant=\"body2\"\n fontSize=\"body2.fontSize\"\n color=\"text.primary\"\n >\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\n variant=\"body2\"\n fontSize=\"body2.fontSize\"\n color=\"text.secondary\"\n >\n Pedido\n </Typography>\n <Typography\n variant=\"subtitle2\"\n fontSize=\"subtitle2.fontSize\"\n color=\"text.primary\"\n >\n {order.id}\n </Typography>\n </Stack>\n\n <Stack>\n <Typography\n variant=\"body2\"\n fontSize=\"body2.fontSize\"\n color=\"text.secondary\"\n >\n Cliente\n </Typography>\n <Typography\n variant=\"subtitle2\"\n fontSize=\"subtitle2.fontSize\"\n color=\"primary.main\"\n >\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\n variant=\"body2\"\n fontSize=\"body2.fontSize\"\n color=\"text.secondary\"\n noWrap\n >\n Valor do pedido\n </Typography>\n <Typography\n variant=\"subtitle2\"\n fontSize=\"subtitle2.fontSize\"\n color=\"text.primary\"\n noWrap\n >\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\n variant=\"body2\"\n fontSize=\"body2.fontSize\"\n color=\"text.secondary\"\n noWrap\n >\n Data\n </Typography>\n <Typography\n variant=\"subtitle2\"\n fontSize=\"subtitle2.fontSize\"\n color=\"text.primary\"\n noWrap\n >\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\n variant=\"body2\"\n fontSize=\"body2.fontSize\"\n color=\"text.secondary\"\n >\n Status\n </Typography>\n <Typography\n variant=\"subtitle2\"\n fontSize=\"subtitle2.fontSize\"\n color=\"text.primary\"\n >\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\n variant=\"body2\"\n fontSize=\"body2.fontSize\"\n color=\"text.secondary\"\n >\n Vendas {suffix}\n </Typography>\n\n <Typography\n variant=\"subtitle2\"\n fontSize=\"subtitle2.fontSize\"\n color=\"text.primary\"\n >\n {fCurrencyBRL(totalValue)}\n </Typography>\n </Stack>\n\n <StyledDivider orientation=\"vertical\" flexItem />\n\n <Stack>\n <Typography\n variant=\"body2\"\n fontSize=\"body2.fontSize\"\n color=\"text.secondary\"\n >\n Qtd. de pedidos {suffix}\n </Typography>\n\n <Typography\n variant=\"subtitle2\"\n fontSize=\"subtitle2.fontSize\"\n color=\"text.primary\"\n >\n {total}\n </Typography>\n </Stack>\n </Stack>\n\n <SearchInput\n size=\"small\"\n placeholder=\"Buscar\"\n onSearch={onSearch}\n trigger=\"change\"\n iconPosition=\"start\"\n sx={{ minWidth: 200 }}\n />\n </Stack>\n\n <DataView\n title=\"Pedidos\"\n header={<></>}\n headerProps={{ p: 0 }}\n columns={[\n {\n field: 'external_id',\n headerName: 'Pedido',\n flex: 1,\n renderCell: ({ row }: GridRenderCellParams) => getOrderId(row),\n },\n {\n field: 'partner_name',\n headerName: 'Cliente',\n flex: 1,\n renderCell: ({ row }: GridRenderCellParams) =>\n getPartnerName(row, buildPartnerLink),\n },\n {\n field: 'total_value',\n headerName: 'Valor do pedido',\n flex: 1,\n renderCell: ({ row }: GridRenderCellParams) => getOrderValue(row),\n },\n {\n field: 'created_at',\n headerName: 'Data',\n flex: 1,\n renderCell: ({ row }: GridRenderCellParams) => getOrderDate(row),\n },\n {\n field: 'last_status',\n headerName: 'Status',\n flex: 1,\n renderCell: ({ row }: GridRenderCellParams) => getOrderStatus(row),\n },\n ]}\n rows={rows}\n rowCount={total}\n mobileRender={(data: OverviewDetailOrder) =>\n mobileItemSlot ? mobileItemSlot(data) : getDefaultMobileRender(data)\n }\n loading={isLoading}\n fetching={isFetching}\n paginationModel={{ page, pageSize: perPage }}\n onPaginationChange={onPaginationChange}\n paginationMode=\"server\"\n disableRowSelectionOnClick\n disableColumnMenu\n containerProps={{ height: 400 }}\n />\n </Stack>\n );\n\n const header = (\n <Header\n title={title}\n viewMode={viewMode}\n selectedYear={selectedYear}\n periodLabel={periodLabel}\n />\n );\n\n if (isMobile) {\n return (\n <Drawer\n open={open}\n onClose={onClose}\n headerTitle={header}\n headerProps={{\n direction: 'row-reverse',\n sx: { '& > :last-child': { minWidth: 0, overflow: 'hidden' } },\n }}\n >\n {content}\n </Drawer>\n );\n }\n\n return (\n <Modal\n open={open}\n onClose={onClose}\n maxWidth=\"lg\"\n dialogTitle={header}\n dialogTitleProps={{ sx: { flex: 1, overflow: 'hidden' } }}\n fullWidth\n >\n {content}\n </Modal>\n );\n};\n\nexport default OverviewDetail;\n","import Stack from '@mui/material/Stack';\nimport Typography from '@mui/material/Typography';\n\nimport { VIEW_MODE_LABELS } from 'types/analytics';\n\nimport { DetailHeaderProps } from './props';\n\nconst Header = ({\n title,\n viewMode,\n selectedYear,\n periodLabel,\n}: DetailHeaderProps) => {\n return (\n <Stack width=\"100%\" minWidth={0} overflow=\"hidden\">\n <Typography variant=\"subtitle1\" fontSize=\"subtitle1.fontSize\" 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\n variant=\"body2\"\n fontSize=\"body2.fontSize\"\n color=\"text.secondary\"\n flexShrink={0}\n >\n {title}\n </Typography>\n &#x2022;\n <Typography variant=\"body2\" fontSize=\"body2.fontSize\" flexShrink={0}>\n {VIEW_MODE_LABELS[viewMode]}\n </Typography>\n &#x2022;\n <Typography variant=\"body2\" fontSize=\"body2.fontSize\" flexShrink={0}>\n {selectedYear}\n </Typography>\n &#x2022;\n <Typography\n variant=\"body2\"\n fontSize=\"body2.fontSize\"\n color=\"text.secondary\"\n noWrap\n >\n {periodLabel}\n </Typography>\n </Stack>\n </Stack>\n );\n};\n\nexport default Header;\n","import MuiDivider from '@mui/material/Divider';\nimport Stack from '@mui/material/Stack';\nimport { alpha, styled } from '@mui/material/styles';\n\nexport const StyledDivider = styled(MuiDivider)(() => ({\n height: 30,\n alignSelf: 'center',\n\n borderStyle: 'dashed',\n}));\n\nexport const MobileItemContainer = styled(Stack)(({ theme }) => ({\n position: 'relative',\n\n display: 'flex',\n flexDirection: 'column',\n padding: theme.spacing(2),\n gap: theme.spacing(1),\n color: theme.palette.text.primary,\n\n '& a': {\n textDecoration: 'none',\n },\n\n '&+div': {\n borderTop: `1px dashed ${alpha(theme.palette.grey[500], 0.2)}`,\n },\n}));\n","import { useCallback, useMemo } from 'react';\n\nimport useDatagrid from 'hooks/useDatagrid';\nimport { ViewMode } from 'types/analytics';\nimport { Filter, GridQuery } from 'types/filter';\n\nimport { getDateRange, getPeriodLabel, getPeriodSuffix } from './utils';\n\nconst useOverviewDetailState = (label: string, viewMode: ViewMode) => {\n const { page, perPage, search, handlePaginationModelChange, handleSearch } =\n useDatagrid();\n\n const { startDate, endDate } = useMemo(\n () => getDateRange(label, viewMode),\n [label, viewMode],\n );\n\n const periodLabel = useMemo(\n () => getPeriodLabel(label, viewMode),\n [label, viewMode],\n );\n\n const suffix = getPeriodSuffix(viewMode);\n\n const queryParams = useMemo((): GridQuery => {\n return {\n page,\n perPage,\n ...(search ? { search } : {}),\n filter: {\n operator: 'AND',\n groups: [\n {\n operator: 'AND',\n conditionals: [\n {\n fieldName: 'negotiationDate',\n conditional: 'GREATER_THAN_OR_EQUAL',\n value: [`${startDate}T00:00:00`],\n },\n {\n fieldName: 'negotiationDate',\n conditional: 'LESS_THAN_OR_EQUAL',\n value: [`${endDate}T23:59:59`],\n },\n ],\n },\n ],\n } as Filter,\n };\n }, [endDate, page, perPage, search, startDate]);\n\n const handlePaginationChange = useCallback(\n (newPage: number, rowsPerPage: number) => {\n handlePaginationModelChange({ page: newPage, pageSize: rowsPerPage });\n },\n [handlePaginationModelChange],\n );\n\n return {\n page,\n perPage,\n periodLabel,\n suffix,\n queryParams,\n handleSearch,\n handlePaginationChange,\n };\n};\n\nexport default useOverviewDetailState;\n","import { ViewMode } from 'types/analytics';\nimport { MONTH_FULL_LABELS } from 'utils/chart';\n\nexport const getDateRange = (\n label: string,\n viewMode: ViewMode,\n): { startDate: string; endDate: string } => {\n const parts = label.split('-');\n\n if (viewMode === ViewMode.DAILY && parts.length === 3) {\n const date = `${parts[0]}-${parts[1]}-${parts[2]}`;\n return { startDate: date, endDate: date };\n }\n\n const year = parseInt(parts[0], 10);\n const month = parseInt(parts[1], 10);\n const lastDay = new Date(year, month, 0).getDate();\n\n return {\n startDate: `${parts[0]}-${parts[1]}-01`,\n endDate: `${parts[0]}-${parts[1]}-${String(lastDay).padStart(2, '0')}`,\n };\n};\n\nexport const getPeriodLabel = (label: string, viewMode: ViewMode): string => {\n const parts = label.split('-');\n const monthIndex = parseInt(parts[1], 10) - 1;\n const monthName = MONTH_FULL_LABELS[monthIndex] ?? '';\n\n if (viewMode === ViewMode.DAILY && parts.length === 3) {\n const day = parseInt(parts[2], 10);\n return `${monthName} - Dia ${day}`;\n }\n\n return monthName;\n};\n\nexport const getPeriodSuffix = (viewMode: ViewMode): string =>\n viewMode === ViewMode.MONTHLY ? 'no mês' : 'no dia';\n","import { useCallback, useMemo, useState } from 'react';\nimport CardContent from '@mui/material/CardContent';\nimport CardHeader from '@mui/material/CardHeader';\nimport Stack from '@mui/material/Stack';\n\nimport { ChartCard } from 'components/Analytics/ChartStyles';\nimport EmptyState from 'components/Analytics/EmptyState';\nimport Result from 'components/Result';\nimport { ViewMode } from 'types/analytics';\nimport { fShortenNumber } from 'utils/formatNumber';\n\nimport SalesEvolutionChart from './Chart';\nimport SalesEvolutionLegend from './Legend';\nimport { SalesEvolutionProps, SeriesVisibility } from './props';\nimport SalesEvolutionSummary from './Summary';\n\nconst SalesEvolution = ({\n data,\n kpis,\n viewMode,\n selectedYear,\n editGoalAction,\n DetailComponent,\n}: SalesEvolutionProps) => {\n const [visibleSeries, setVisibleSeries] = useState<SeriesVisibility>({\n realized: true,\n forecast: true,\n goal: true,\n });\n\n const [detailOpen, setDetailOpen] = useState(false);\n const [selectedLabel, setSelectedLabel] = useState('');\n const [selectedTotalValue, setSelectedTotalValue] = useState(0);\n\n const isMonthly = viewMode === ViewMode.MONTHLY;\n\n const yDomain = useMemo((): [number, number] => {\n if (!data.length) return [0, 1];\n\n const values = data.flatMap(item => [\n Number(item.realized) || 0,\n Number(item.forecast) || 0,\n Number(item.goal) || 0,\n ]);\n\n const max = Math.max(...values);\n\n return [0, max > 0 ? max * 1.15 : 1];\n }, [data]);\n\n const yTicks = useMemo(() => {\n const [, max] = yDomain;\n\n const step = max / 6;\n\n const ticks = Array.from({ length: 7 }, (_, i) => Math.round(step * i));\n\n return [...new Set(ticks)];\n }, [yDomain]);\n\n const handleToggleSeries = useCallback((key: keyof SeriesVisibility) => {\n setVisibleSeries(prev => ({ ...prev, [key]: !prev[key] }));\n }, []);\n\n const handleToggleSerie = useCallback(\n (toggle: string) => handleToggleSeries(toggle as keyof SeriesVisibility),\n [handleToggleSeries],\n );\n\n const handleBarClick = useCallback(\n (index: number) => {\n const item = data[index];\n if (!item) return;\n setSelectedLabel(item.label);\n setSelectedTotalValue(item.realized);\n setDetailOpen(true);\n },\n [data],\n );\n\n const handleDetailClose = useCallback(() => {\n setDetailOpen(false);\n }, []);\n\n const formatYAxis = useCallback((v: number) => fShortenNumber(v), []);\n\n return (\n <>\n <ChartCard>\n <CardHeader title=\"Evolução de vendas\" />\n\n <CardContent>\n <Result isEmpty={data.length === 0} empty={<EmptyState />}>\n <Stack gap={3}>\n <Stack display={{ xs: 'none', md: 'block' }}>\n <SalesEvolutionSummary\n kpis={kpis}\n isMonthly={isMonthly}\n editGoalAction={editGoalAction}\n />\n </Stack>\n\n <SalesEvolutionChart\n data={data}\n viewMode={viewMode}\n visibleSeries={visibleSeries}\n yDomain={yDomain}\n yTicks={yTicks}\n formatYAxis={formatYAxis}\n onBarClick={handleBarClick}\n />\n\n <SalesEvolutionLegend\n visibleSeries={visibleSeries}\n onToggleSerie={handleToggleSerie}\n />\n\n <Stack display={{ xs: 'block', md: 'none' }}>\n <SalesEvolutionSummary\n kpis={kpis}\n isMonthly={isMonthly}\n editGoalAction={editGoalAction}\n />\n </Stack>\n </Stack>\n </Result>\n </CardContent>\n </ChartCard>\n\n {selectedLabel && DetailComponent && (\n <DetailComponent\n open={detailOpen}\n onClose={handleDetailClose}\n label={selectedLabel}\n viewMode={viewMode}\n selectedYear={selectedYear}\n totalValue={selectedTotalValue}\n />\n )}\n </>\n );\n};\n\nexport default SalesEvolution;\n","import { useCallback, useMemo, useRef, useState } from 'react';\nimport { CategoricalChartFunc } from 'recharts/types/chart/types';\n\nimport { ChartWrapper } from 'components/Analytics/ChartStyles';\nimport { ViewMode } from 'types/analytics';\n\nimport DailyChart from './DailyView';\nimport MonthlyChart from './MonthlyView';\nimport { SalesEvolutionChartProps } from './props';\n\nconst SalesEvolutionChart = ({\n data,\n viewMode,\n visibleSeries,\n yDomain,\n yTicks,\n formatYAxis,\n onBarClick,\n}: SalesEvolutionChartProps) => {\n const [activeBarIndex, setActiveBarIndex] = useState<number | null>(null);\n const [containerWidth, setContainerWidth] = useState(0);\n\n const observerRef = useRef<ResizeObserver | null>(null);\n\n const isMonthly = viewMode === ViewMode.MONTHLY;\n\n const shouldRotateLabels = useMemo(() => {\n if (!isMonthly || containerWidth === 0 || data.length === 0) return false;\n\n const slotPerBar = (containerWidth - 60) / data.length;\n\n return slotPerBar < 60;\n }, [containerWidth, data.length, isMonthly]);\n\n const handleMouseLeave = useCallback<CategoricalChartFunc>(\n () => setActiveBarIndex(null),\n [],\n );\n\n const handleMouseMove = useCallback<CategoricalChartFunc>(state => {\n if (state?.activeTooltipIndex != null) {\n setActiveBarIndex(Number(state.activeTooltipIndex));\n }\n }, []);\n\n const wrapperRefCallback = useCallback((node: HTMLDivElement | null) => {\n if (observerRef.current) {\n observerRef.current.disconnect();\n observerRef.current = null;\n }\n\n if (node) {\n setContainerWidth(node.clientWidth);\n\n observerRef.current = new ResizeObserver(() =>\n setContainerWidth(node.clientWidth),\n );\n observerRef.current.observe(node);\n }\n }, []);\n\n if (isMonthly) {\n return (\n <ChartWrapper ref={wrapperRefCallback}>\n <MonthlyChart\n data={data}\n visibleSeries={visibleSeries}\n yDomain={yDomain}\n yTicks={yTicks}\n formatYAxis={formatYAxis}\n shouldRotateLabels={shouldRotateLabels}\n activeBarIndex={activeBarIndex}\n onMouseMove={handleMouseMove}\n onMouseLeave={handleMouseLeave}\n onBarClick={onBarClick}\n viewMode={viewMode}\n />\n </ChartWrapper>\n );\n }\n\n return (\n <ChartWrapper ref={wrapperRefCallback}>\n <DailyChart\n data={data}\n visibleSeries={visibleSeries}\n yDomain={yDomain}\n yTicks={yTicks}\n formatYAxis={formatYAxis}\n viewMode={viewMode}\n activeBarIndex={activeBarIndex}\n onMouseMove={handleMouseMove}\n onMouseLeave={handleMouseLeave}\n onBarClick={onBarClick}\n />\n </ChartWrapper>\n );\n};\n\nexport default SalesEvolutionChart;\n","import { useCallback } from 'react';\nimport {\n Bar,\n CartesianGrid,\n ComposedChart,\n Line,\n ResponsiveContainer,\n Tooltip,\n XAxis,\n YAxis,\n} from 'recharts';\n\nimport { formatDayLabel } from 'utils/chart';\nimport { fShortenNumber } from 'utils/formatNumber';\n\nimport { COLORS } from '../props';\n\nimport BarBackground from './BarBackground';\nimport { DailyChartProps } from './props';\nimport SalesEvolutionTooltip from './Tooltip';\n\nconst DailyChart = ({\n data,\n visibleSeries,\n yDomain,\n yTicks,\n viewMode,\n activeBarIndex,\n onMouseMove,\n onMouseLeave,\n onBarClick,\n}: DailyChartProps) => {\n const formatYAxis = useCallback((v: number) => fShortenNumber(v), []);\n\n return (\n <ResponsiveContainer width=\"100%\" height={350}>\n <ComposedChart\n data={data}\n margin={{ top: 20, right: 10, bottom: 0, left: 20 }}\n style={{ cursor: 'pointer' }}\n onMouseMove={onMouseMove}\n onMouseLeave={onMouseLeave}\n onClick={state => {\n if (state?.activeTooltipIndex != null) {\n onBarClick?.(Number(state.activeTooltipIndex));\n }\n }}\n >\n <CartesianGrid\n vertical={false}\n strokeDasharray=\"3 3\"\n stroke=\"#F4F6F8\"\n />\n\n <XAxis\n dataKey=\"label\"\n axisLine={false}\n tickLine={false}\n tick={{ fontSize: 12, fill: '#637381' }}\n tickFormatter={formatDayLabel}\n />\n\n <YAxis\n axisLine={false}\n tickLine={false}\n tick={{ fontSize: 12, fill: '#637381' }}\n tickFormatter={formatYAxis}\n domain={yDomain}\n ticks={yTicks}\n />\n\n <Tooltip content={<SalesEvolutionTooltip viewMode={viewMode} />} />\n\n <Bar\n dataKey=\"realized\"\n fill=\"transparent\"\n isAnimationActive={false}\n background={<BarBackground activeBarIndex={activeBarIndex} />}\n />\n\n {visibleSeries.goal && (\n <Line\n dataKey=\"goal\"\n name=\"Meta\"\n stroke={COLORS.goal}\n strokeWidth={2}\n strokeDasharray=\"8 4\"\n dot={false}\n isAnimationActive={false}\n />\n )}\n\n {visibleSeries.realized && (\n <Line\n dataKey=\"realized\"\n name=\"Vendas\"\n stroke={COLORS.sales}\n strokeWidth={2}\n dot={{\n fill: COLORS.sales,\n r: 4,\n strokeWidth: 0,\n }}\n isAnimationActive={false}\n />\n )}\n\n {visibleSeries.forecast && (\n <Line\n dataKey=\"forecast\"\n name=\"Previsto\"\n stroke={COLORS.forecast}\n strokeWidth={2}\n strokeDasharray=\"6 3\"\n dot={{\n fill: COLORS.forecast,\n r: 4,\n strokeWidth: 0,\n }}\n isAnimationActive={false}\n />\n )}\n </ComposedChart>\n </ResponsiveContainer>\n );\n};\n\nexport default DailyChart;\n","import { ReactNode } from 'react';\nimport { ComponentType } from 'react';\n\nimport { ViewMode } from 'types/analytics';\nimport {\n OverviewDetailBaseProps,\n RevenueGoalDashboardKpis,\n RevenueGoalDashboardSeriesItem,\n} from 'types/overviewAnalytics';\n\nexport interface SalesEvolutionProps {\n data: RevenueGoalDashboardSeriesItem[];\n kpis?: RevenueGoalDashboardKpis;\n viewMode: ViewMode;\n selectedYear: number;\n editGoalAction?: ReactNode;\n DetailComponent?: ComponentType<OverviewDetailBaseProps>;\n}\n\nexport interface SeriesVisibility {\n realized: boolean;\n forecast: boolean;\n goal: boolean;\n}\n\nexport interface SummaryProps {\n kpis?: RevenueGoalDashboardKpis;\n isMonthly: boolean;\n editGoalAction?: ReactNode;\n}\n\nexport interface LegendProps {\n visibleSeries: SeriesVisibility;\n onToggleSerie: (toggle: keyof SeriesVisibility) => void;\n}\n\nexport const COLORS = {\n sales: '#22C55E',\n forecast: '#F59E0B',\n goal: '#212B36',\n} as const;\n","import { COLORS } from '../props';\n\nimport { BarBackgroundComponentProps } from './props';\n\nconst BarBackground = ({\n x = 0,\n y = 0,\n width = 0,\n height = 0,\n index,\n activeBarIndex,\n}: BarBackgroundComponentProps) => {\n if (activeBarIndex !== index) return null;\n\n return (\n <rect\n x={x - 6}\n y={y}\n width={width + 6 * 2}\n height={height + 6}\n fill={COLORS.sales}\n opacity={0.16}\n rx={6}\n />\n );\n};\n\nexport default BarBackground;\n","import Divider from '@mui/material/Divider';\nimport Stack from '@mui/material/Stack';\nimport Typography from '@mui/material/Typography';\n\nimport SimpleCard from 'components/SimpleCard';\nimport { ViewMode } from 'types/analytics';\nimport { MONTH_FULL_LABELS } from 'utils/chart';\nimport { fCurrencyBRL } from 'utils/formatNumber';\n\nimport { COLORS } from '../props';\n\nimport { CustomTooltipProps, TooltipDataItem } from './props';\n\nconst SalesEvolutionTooltip = ({\n active,\n payload,\n label,\n viewMode,\n}: CustomTooltipProps) => {\n if (!active || !payload?.length) return null;\n\n const isDaily = viewMode === ViewMode.DAILY;\n\n const data = payload[0].payload as TooltipDataItem;\n const realized = Number(data.realized) || 0;\n const forecast = Number(data.forecast) || 0;\n const goal = Number(data.goal) || 0;\n\n const achievement = goal > 0 ? (realized / goal) * 100 : 0;\n const gap = goal > realized ? goal - realized : 0;\n\n const timeUnitStr = isDaily ? 'no dia' : 'no mês';\n const goalStr = isDaily ? 'diária' : 'mensal';\n\n let formattedLabel = String(label);\n const parts = formattedLabel.split('-');\n\n if (parts.length >= 2) {\n const monthIndex = parseInt(parts[1], 10) - 1;\n const month = MONTH_FULL_LABELS[monthIndex];\n\n if (isDaily && parts.length === 3) {\n formattedLabel = `${parseInt(parts[2], 10)} de ${month} de ${parts[0]}`;\n } else if (!isDaily) {\n formattedLabel = `${month} de ${parts[0]}`;\n }\n }\n\n const items = [\n {\n name: `Realizado ${timeUnitStr}`,\n value: fCurrencyBRL(realized),\n color: COLORS.sales,\n },\n {\n name: `Previsto ${timeUnitStr}`,\n value: fCurrencyBRL(forecast),\n color: COLORS.forecast,\n },\n {\n name: `Meta ${goalStr}`,\n value: fCurrencyBRL(goal),\n color: COLORS.goal,\n },\n {\n name: 'Atingimento',\n value: `${achievement.toFixed(0)}%`,\n color: '#00B8D9',\n },\n {\n name: `GAP ${timeUnitStr}`,\n value: fCurrencyBRL(gap),\n color: '#FF5630',\n },\n ];\n\n return (\n <SimpleCard minWidth={{ xs: 'auto', sm: 400 }} p={1} gap={1}>\n <Typography\n variant=\"body2\"\n fontSize=\"body2.fontSize\"\n color=\"text.secondary\"\n >\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\" fontSize=\"body2.fontSize\" noWrap>\n {entry.name}\n </Typography>\n </Stack>\n\n <Typography variant=\"body2\" fontSize=\"body2.fontSize\">\n {entry.value}\n </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\n variant=\"body2\"\n fontSize=\"body2.fontSize\"\n color=\"text.secondary\"\n >\n Previsto no {isMonthly ? 'ano' : 'mês'}\n </Typography>\n\n <Typography variant=\"subtitle2\" fontSize=\"subtitle2.fontSize\">\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\n variant=\"body2\"\n fontSize=\"body2.fontSize\"\n color=\"text.secondary\"\n >\n Realizado no {isMonthly ? 'ano' : 'mês'}\n </Typography>\n\n <Typography variant=\"subtitle2\" fontSize=\"subtitle2.fontSize\">\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\n variant=\"body2\"\n fontSize=\"body2.fontSize\"\n color=\"text.secondary\"\n >\n Meta {isMonthly ? 'anual' : 'mensal'}\n </Typography>\n\n {editGoalAction}\n </Stack>\n\n <Typography variant=\"subtitle2\" fontSize=\"subtitle2.fontSize\">\n {fCurrencyBRL(kpis?.goal)}\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\n variant=\"body2\"\n fontSize=\"body2.fontSize\"\n color=\"text.secondary\"\n >\n Atingimento\n </Typography>\n\n <Typography variant=\"subtitle2\" fontSize=\"subtitle2.fontSize\">\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\n variant=\"body2\"\n fontSize=\"body2.fontSize\"\n color=\"text.secondary\"\n >\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\" fontSize=\"subtitle2.fontSize\">\n {fCurrencyBRL(kpis?.gap)}\n </Typography>\n </Stack>\n </Stack>\n );\n};\n\nexport default Summary;\n","import { useCallback, useMemo, useState } from 'react';\nimport CardContent from '@mui/material/CardContent';\nimport CardHeader from '@mui/material/CardHeader';\nimport Stack from '@mui/material/Stack';\nimport { CategoricalChartFunc } from 'recharts/types/chart/types';\n\nimport { ChartCard } from 'components/Analytics/ChartStyles';\nimport EmptyState from 'components/Analytics/EmptyState';\nimport Result from 'components/Result';\nimport { ViewMode } from 'types/analytics';\n\nimport ForecastChart from './Chart';\nimport SalesForecastLegend from './Legend';\nimport { SalesForecastProps, VisibleSeries } from './props';\nimport SalesForecastSummary from './Summary';\n\nconst SalesForecast = ({ data, viewMode }: SalesForecastProps) => {\n const isMonthly = viewMode === ViewMode.MONTHLY;\n\n const [visibleSeries, setVisibleSeries] = useState<VisibleSeries>({\n realized: true,\n forecast: true,\n });\n const [activeBarIndex, setActiveBarIndex] = useState<number | null>(null);\n\n const handleToggleSerie = useCallback((serie: keyof VisibleSeries) => {\n setVisibleSeries(prev => ({ ...prev, [serie]: !prev[serie] }));\n }, []);\n\n const handleMouseMove = useCallback<CategoricalChartFunc>(state => {\n if (state?.activeTooltipIndex != null) {\n setActiveBarIndex(Number(state.activeTooltipIndex));\n }\n }, []);\n\n const handleMouseLeave = useCallback<CategoricalChartFunc>(\n () => setActiveBarIndex(null),\n [],\n );\n\n const totals = useMemo(() => {\n const totalRealized = data.reduce(\n (acc, item) => acc + (item.realized_value ?? 0),\n 0,\n );\n\n const totalForecast = data.reduce(\n (acc, item) => acc + (item.forecast_value ?? 0),\n 0,\n );\n\n const percentage =\n totalForecast > 0 ? Math.round((totalRealized / totalForecast) * 100) : 0;\n return { totalRealized, totalForecast, percentage };\n }, [data]);\n\n return (\n <ChartCard>\n <CardHeader title=\"Previsto vs. Realizado (Positivação)\" />\n\n <CardContent>\n <Result isEmpty={data.length === 0} empty={<EmptyState />}>\n <Stack gap={3}>\n <Stack display={{ xs: 'none', md: 'block' }}>\n <SalesForecastSummary\n totalForecast={totals.totalForecast}\n totalRealized={totals.totalRealized}\n percentage={totals.percentage}\n isMonthly={isMonthly}\n />\n </Stack>\n\n <ForecastChart\n data={data}\n viewMode={viewMode}\n visibleSeries={visibleSeries}\n activeBarIndex={activeBarIndex}\n onMouseMove={handleMouseMove}\n onMouseLeave={handleMouseLeave}\n />\n\n <SalesForecastLegend\n visibleSeries={visibleSeries}\n onToggleSerie={handleToggleSerie}\n />\n\n <Stack display={{ xs: 'block', md: 'none' }}>\n <SalesForecastSummary\n totalForecast={totals.totalForecast}\n totalRealized={totals.totalRealized}\n percentage={totals.percentage}\n isMonthly={isMonthly}\n />\n </Stack>\n </Stack>\n </Result>\n </CardContent>\n </ChartCard>\n );\n};\n\nexport default SalesForecast;\n","import { useCallback, useMemo, useRef, useState } from 'react';\nimport {\n Bar,\n BarChart,\n CartesianGrid,\n ResponsiveContainer,\n Tooltip,\n XAxis,\n YAxis,\n} from 'recharts';\n\nimport { ChartWrapper } from 'components/Analytics/ChartStyles';\nimport RotatedTick from 'components/Analytics/RotatedTick';\nimport { ViewMode } from 'types/analytics';\nimport { formatDayLabel, formatMonthLabel } from 'utils/chart';\nimport { fShortenNumber } from 'utils/formatNumber';\n\nimport { COLORS } from '../props';\n\nimport BarBackground from './BarBackground';\nimport { ChartProps } from './props';\nimport RealizedBackground from './RealizedBackground';\nimport SalesForecastTooltip from './Tooltip';\n\nconst ForecastChart = ({\n data,\n viewMode,\n visibleSeries,\n activeBarIndex,\n onMouseMove,\n onMouseLeave,\n}: ChartProps) => {\n const isMonthly = viewMode === ViewMode.MONTHLY;\n\n const [containerWidth, setContainerWidth] = useState(0);\n const observerRef = useRef<ResizeObserver | null>(null);\n\n const wrapperRefCallback = useCallback((node: HTMLDivElement | null) => {\n if (observerRef.current) {\n observerRef.current.disconnect();\n observerRef.current = null;\n }\n if (node) {\n setContainerWidth(node.clientWidth);\n observerRef.current = new ResizeObserver(() =>\n setContainerWidth(node.clientWidth),\n );\n observerRef.current.observe(node);\n }\n }, []);\n\n const shouldRotateLabels = useMemo(() => {\n if (!isMonthly) return false;\n if (containerWidth === 0 || data.length === 0) return false;\n const slotPerBar = (containerWidth - 60) / data.length;\n return slotPerBar < 80;\n }, [isMonthly, containerWidth, data.length]);\n\n const hasRealizedData = useMemo(\n () => data.some(item => item.realized_value > 0),\n [data],\n );\n\n const hasForecastData = useMemo(\n () => data.some(item => item.forecast_value > 0),\n [data],\n );\n\n const yDomain = useMemo((): [number, number] => {\n if (!data.length) return [0, 1];\n const values = data.flatMap(item => [\n item.realized_value,\n item.forecast_value,\n ]);\n const max = Math.max(...values);\n return [0, max > 0 ? max * 1.15 : 1];\n }, [data]);\n\n const yTicks = useMemo(() => {\n const [, max] = yDomain;\n const step = max / 6;\n return [\n ...new Set(Array.from({ length: 7 }, (_, i) => Math.round(step * i))),\n ];\n }, [yDomain]);\n\n const tickFormatter = useMemo(\n () => (isMonthly ? formatMonthLabel : formatDayLabel),\n [isMonthly],\n );\n\n const bothRendered =\n visibleSeries.realized &&\n hasRealizedData &&\n visibleSeries.forecast &&\n hasForecastData;\n\n return (\n <ChartWrapper ref={wrapperRefCallback}>\n <ResponsiveContainer width=\"100%\" height={250}>\n <BarChart\n data={data}\n margin={{\n top: 20,\n right: 10,\n bottom: shouldRotateLabels ? -90 : 0,\n left: 20,\n }}\n barCategoryGap=\"20%\"\n barGap={4}\n onMouseMove={onMouseMove}\n onMouseLeave={onMouseLeave}\n >\n <CartesianGrid\n vertical={false}\n strokeDasharray=\"3 3\"\n stroke=\"#F4F6F8\"\n />\n\n <XAxis\n dataKey=\"label\"\n axisLine={false}\n tickLine={false}\n {...(shouldRotateLabels && { interval: 0, height: 120 })}\n tick={\n shouldRotateLabels ? (\n <RotatedTick />\n ) : (\n { fontSize: 12, fill: '#637381' }\n )\n }\n tickFormatter={tickFormatter}\n />\n\n <YAxis\n axisLine={false}\n tickLine={false}\n tick={{ fontSize: 12, fill: '#637381' }}\n tickFormatter={(v: number) => fShortenNumber(v)}\n domain={yDomain}\n ticks={yTicks}\n />\n\n <Tooltip\n content={<SalesForecastTooltip viewMode={viewMode} />}\n cursor={false}\n />\n\n {visibleSeries.realized && hasRealizedData && (\n <Bar\n dataKey=\"realized_value\"\n name=\"Realizado\"\n fill={COLORS.realized}\n maxBarSize={32}\n isAnimationActive={false}\n radius={[4, 4, 0, 0]}\n background={\n <RealizedBackground\n activeBarIndex={activeBarIndex}\n bothRendered={bothRendered}\n />\n }\n />\n )}\n\n {visibleSeries.forecast && hasForecastData && (\n <Bar\n dataKey=\"forecast_value\"\n name=\"Previsto\"\n fill={COLORS.forecast}\n maxBarSize={32}\n isAnimationActive={false}\n radius={[4, 4, 0, 0]}\n {...(!visibleSeries.realized && {\n background: <BarBackground activeBarIndex={activeBarIndex} />,\n })}\n />\n )}\n </BarChart>\n </ResponsiveContainer>\n </ChartWrapper>\n );\n};\n\nexport default ForecastChart;\n","import { ViewMode } from 'types/analytics';\nimport { SalesForecastDashboardSeriesItem } from 'types/overviewAnalytics';\n\nexport interface SalesForecastProps {\n data: SalesForecastDashboardSeriesItem[];\n viewMode: ViewMode;\n}\n\nexport interface VisibleSeries {\n realized: boolean;\n forecast: boolean;\n}\n\nexport interface SummaryProps {\n totalForecast: number;\n totalRealized: number;\n percentage: number;\n isMonthly: boolean;\n}\n\nexport interface LegendProps {\n visibleSeries: VisibleSeries;\n onToggleSerie: (serie: keyof VisibleSeries) => void;\n}\n\nexport const COLORS = {\n realized: '#22C55E',\n forecast: '#F59E0B',\n} as const;\n","import { BarBackgroundComponentProps } from './props';\n\nconst BarBackground = ({\n x = 0,\n y = 0,\n width = 0,\n height = 0,\n index,\n activeBarIndex,\n}: BarBackgroundComponentProps) => {\n if (activeBarIndex !== index) return null;\n\n return (\n <rect\n x={x - 6}\n y={y}\n width={width + 12}\n height={height + 6}\n fill=\"#919EAB\"\n opacity={0.16}\n rx={6}\n />\n );\n};\n\nexport default BarBackground;\n","import { RealizedBackgroundProps } from './props';\n\nconst RealizedBackground = ({\n x = 0,\n y = 0,\n width = 0,\n height = 0,\n index,\n activeBarIndex,\n bothRendered,\n}: RealizedBackgroundProps) => {\n if (activeBarIndex !== index) return null;\n\n return (\n <rect\n x={x - 6}\n y={y}\n width={bothRendered ? width * 2 + 4 + 12 : width + 12}\n height={height + 6}\n fill=\"#919EAB\"\n opacity={0.16}\n rx={6}\n />\n );\n};\n\nexport default RealizedBackground;\n","import Divider from '@mui/material/Divider';\nimport Stack from '@mui/material/Stack';\nimport Typography from '@mui/material/Typography';\n\nimport SimpleCard from 'components/SimpleCard';\nimport { ViewMode } from 'types/analytics';\nimport { MONTH_FULL_LABELS } from 'utils/chart';\nimport { fCurrencyBRL } from 'utils/formatNumber';\n\nimport { CustomTooltipProps } from './props';\n\nconst SalesForecastTooltip = ({\n active,\n payload,\n label,\n viewMode,\n}: CustomTooltipProps) => {\n if (!active || !payload?.length) return null;\n\n const isDaily = viewMode === ViewMode.DAILY;\n\n let formattedLabel = String(label);\n const parts = formattedLabel.split('-');\n\n if (parts.length >= 2) {\n const monthIndex = parseInt(parts[1], 10) - 1;\n const month = MONTH_FULL_LABELS[monthIndex];\n\n if (isDaily && parts.length === 3) {\n formattedLabel = `${parseInt(parts[2], 10)} de ${month} de ${parts[0]}`;\n } else if (!isDaily) {\n formattedLabel = `${month} de ${parts[0]}`;\n }\n }\n\n return (\n <SimpleCard minWidth={{ xs: 'auto', sm: 200 }} p={1} gap={1}>\n <Typography\n variant=\"body2\"\n fontSize=\"body2.fontSize\"\n color=\"text.secondary\"\n >\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\" fontSize=\"body2.fontSize\" noWrap>\n {entry.name}\n </Typography>\n </Stack>\n\n <Typography variant=\"body2\" fontSize=\"body2.fontSize\">\n {fCurrencyBRL(entry.value)}\n </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\n variant=\"body2\"\n fontSize=\"body2.fontSize\"\n color=\"text.secondary\"\n >\n {isMonthly ? 'Total previsto no ano' : 'Total previsto no mês'}\n </Typography>\n\n <Typography variant=\"subtitle2\" fontSize=\"subtitle2.fontSize\">\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\n variant=\"body2\"\n fontSize=\"body2.fontSize\"\n color=\"text.secondary\"\n >\n {isMonthly ? 'Total realizado no ano' : 'Total realizado no mês'}\n </Typography>\n\n <Typography variant=\"subtitle2\" fontSize=\"subtitle2.fontSize\">\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\n variant=\"body2\"\n fontSize=\"body2.fontSize\"\n color=\"text.secondary\"\n >\n Atingimento\n </Typography>\n\n <Typography variant=\"subtitle2\" fontSize=\"subtitle2.fontSize\">\n {percentage}%\n </Typography>\n </Stack>\n </Stack>\n );\n};\n\nexport default SalesForecastSummary;\n"]}
@@ -0,0 +1,83 @@
1
+ import * as react_jsx_runtime from 'react/jsx-runtime';
2
+ import * as _mui_material_Checkbox from '@mui/material/Checkbox';
3
+ import * as _mui_material_Stack from '@mui/material/Stack';
4
+ import * as _mui_material_CardHeader from '@mui/material/CardHeader';
5
+ import * as _emotion_styled from '@emotion/styled';
6
+ import * as _mui_system from '@mui/system';
7
+ import * as _mui_material_styles from '@mui/material/styles';
8
+ import * as react from 'react';
9
+ import * as _mui_material_OverridableComponent from '@mui/material/OverridableComponent';
10
+ import * as _mui_material_Card from '@mui/material/Card';
11
+ import { ExportFormat } from '../../types/analytics.js';
12
+
13
+ interface AiSummaryProps {
14
+ brief?: string;
15
+ detail?: string;
16
+ isLoading: boolean;
17
+ formatContent?: (text: string) => string;
18
+ }
19
+
20
+ declare const AiSummary: ({ brief, detail, isLoading, formatContent, }: AiSummaryProps) => react_jsx_runtime.JSX.Element | null;
21
+
22
+ declare const ChartCard: _emotion_styled.StyledComponent<_mui_material_Card.CardOwnProps & _mui_material_OverridableComponent.CommonProps & Omit<Omit<react.DetailedHTMLProps<react.HTMLAttributes<HTMLDivElement>, HTMLDivElement>, "ref"> & {
23
+ ref?: ((instance: HTMLDivElement | null) => void) | react.RefObject<HTMLDivElement> | null | undefined;
24
+ }, "children" | "className" | "style" | "classes" | "elevation" | "square" | "sx" | "variant" | "raised"> & _mui_system.MUIStyledCommonProps<_mui_material_styles.Theme>, {}, {}>;
25
+ declare const ChartCardHeader: _emotion_styled.StyledComponent<_mui_material_CardHeader.CardHeaderOwnProps<"span", "span"> & _mui_material_OverridableComponent.CommonProps & Omit<Omit<react.DetailedHTMLProps<react.HTMLAttributes<HTMLDivElement>, HTMLDivElement>, "ref"> & {
26
+ ref?: ((instance: HTMLDivElement | null) => void) | react.RefObject<HTMLDivElement> | null | undefined;
27
+ }, "className" | "style" | "classes" | "sx" | "title" | "action" | "avatar" | "disableTypography" | "subheader" | "subheaderTypographyProps" | "titleTypographyProps"> & _mui_system.MUIStyledCommonProps<_mui_material_styles.Theme>, {}, {}>;
28
+ declare const ChartWrapper: _emotion_styled.StyledComponent<_mui_material_Stack.StackOwnProps & _mui_material_OverridableComponent.CommonProps & Omit<Omit<react.DetailedHTMLProps<react.HTMLAttributes<HTMLDivElement>, HTMLDivElement>, "ref"> & {
29
+ ref?: ((instance: HTMLDivElement | null) => void) | react.RefObject<HTMLDivElement> | null | undefined;
30
+ }, keyof _mui_material_OverridableComponent.CommonProps | keyof _mui_material_Stack.StackOwnProps> & _mui_system.MUIStyledCommonProps<_mui_material_styles.Theme>, {}, {}>;
31
+ declare const TooltipContainer: _emotion_styled.StyledComponent<_mui_system.BoxOwnProps<_mui_material_styles.Theme> & Omit<Omit<react.DetailedHTMLProps<react.HTMLAttributes<HTMLDivElement>, HTMLDivElement>, "ref"> & {
32
+ ref?: ((instance: HTMLDivElement | null) => void) | react.RefObject<HTMLDivElement> | null | undefined;
33
+ }, keyof _mui_system.BoxOwnProps<_mui_material_styles.Theme>> & _mui_system.MUIStyledCommonProps<_mui_material_styles.Theme>, {}, {}>;
34
+ declare const TooltipDivider: _emotion_styled.StyledComponent<_mui_system.BoxOwnProps<_mui_material_styles.Theme> & Omit<Omit<react.DetailedHTMLProps<react.HTMLAttributes<HTMLDivElement>, HTMLDivElement>, "ref"> & {
35
+ ref?: ((instance: HTMLDivElement | null) => void) | react.RefObject<HTMLDivElement> | null | undefined;
36
+ }, keyof _mui_system.BoxOwnProps<_mui_material_styles.Theme>> & _mui_system.MUIStyledCommonProps<_mui_material_styles.Theme>, {}, {}>;
37
+ declare const TooltipDot: _emotion_styled.StyledComponent<_mui_system.BoxOwnProps<_mui_material_styles.Theme> & Omit<Omit<react.DetailedHTMLProps<react.HTMLAttributes<HTMLDivElement>, HTMLDivElement>, "ref"> & {
38
+ ref?: ((instance: HTMLDivElement | null) => void) | react.RefObject<HTMLDivElement> | null | undefined;
39
+ }, keyof _mui_system.BoxOwnProps<_mui_material_styles.Theme>> & _mui_system.MUIStyledCommonProps<_mui_material_styles.Theme> & {
40
+ dotColor: string;
41
+ }, {}, {}>;
42
+ declare const LegendContainer: _emotion_styled.StyledComponent<_mui_material_Stack.StackOwnProps & _mui_material_OverridableComponent.CommonProps & Omit<Omit<react.DetailedHTMLProps<react.HTMLAttributes<HTMLDivElement>, HTMLDivElement>, "ref"> & {
43
+ ref?: ((instance: HTMLDivElement | null) => void) | react.RefObject<HTMLDivElement> | null | undefined;
44
+ }, keyof _mui_material_OverridableComponent.CommonProps | keyof _mui_material_Stack.StackOwnProps> & _mui_system.MUIStyledCommonProps<_mui_material_styles.Theme>, {}, {}>;
45
+ declare const LegendItem: _emotion_styled.StyledComponent<_mui_material_Stack.StackOwnProps & _mui_material_OverridableComponent.CommonProps & Omit<Omit<react.DetailedHTMLProps<react.HTMLAttributes<HTMLDivElement>, HTMLDivElement>, "ref"> & {
46
+ ref?: ((instance: HTMLDivElement | null) => void) | react.RefObject<HTMLDivElement> | null | undefined;
47
+ }, keyof _mui_material_OverridableComponent.CommonProps | keyof _mui_material_Stack.StackOwnProps> & _mui_system.MUIStyledCommonProps<_mui_material_styles.Theme>, {}, {}>;
48
+ declare const ColoredCheckbox: _emotion_styled.StyledComponent<_mui_material_Checkbox.CheckboxProps & _mui_system.MUIStyledCommonProps<_mui_material_styles.Theme> & {
49
+ checkboxColor: string;
50
+ }, {}, {}>;
51
+ declare const SummaryStack: _emotion_styled.StyledComponent<_mui_material_Stack.StackOwnProps & _mui_material_OverridableComponent.CommonProps & Omit<Omit<react.DetailedHTMLProps<react.HTMLAttributes<HTMLDivElement>, HTMLDivElement>, "ref"> & {
52
+ ref?: ((instance: HTMLDivElement | null) => void) | react.RefObject<HTMLDivElement> | null | undefined;
53
+ }, keyof _mui_material_OverridableComponent.CommonProps | keyof _mui_material_Stack.StackOwnProps> & _mui_system.MUIStyledCommonProps<_mui_material_styles.Theme>, {}, {}>;
54
+ declare const SummaryDivider: _emotion_styled.StyledComponent<_mui_system.BoxOwnProps<_mui_material_styles.Theme> & Omit<Omit<react.DetailedHTMLProps<react.HTMLAttributes<HTMLDivElement>, HTMLDivElement>, "ref"> & {
55
+ ref?: ((instance: HTMLDivElement | null) => void) | react.RefObject<HTMLDivElement> | null | undefined;
56
+ }, keyof _mui_system.BoxOwnProps<_mui_material_styles.Theme>> & _mui_system.MUIStyledCommonProps<_mui_material_styles.Theme>, {}, {}>;
57
+ declare const EmptyStateContainer: _emotion_styled.StyledComponent<_mui_material_Stack.StackOwnProps & _mui_material_OverridableComponent.CommonProps & Omit<Omit<react.DetailedHTMLProps<react.HTMLAttributes<HTMLDivElement>, HTMLDivElement>, "ref"> & {
58
+ ref?: ((instance: HTMLDivElement | null) => void) | react.RefObject<HTMLDivElement> | null | undefined;
59
+ }, keyof _mui_material_OverridableComponent.CommonProps | keyof _mui_material_Stack.StackOwnProps> & _mui_system.MUIStyledCommonProps<_mui_material_styles.Theme>, {}, {}>;
60
+
61
+ declare const EmptyState: () => react_jsx_runtime.JSX.Element;
62
+
63
+ interface ExportButtonProps {
64
+ onExport: (format: ExportFormat) => void;
65
+ isExporting?: boolean;
66
+ }
67
+
68
+ declare const ExportButton: ({ onExport, isExporting }: ExportButtonProps) => react_jsx_runtime.JSX.Element;
69
+
70
+ interface RotatedTickProps {
71
+ x?: number;
72
+ y?: number;
73
+ payload?: {
74
+ value: string;
75
+ };
76
+ tickFormatter?: (value: string, index: number) => string;
77
+ index?: number;
78
+ maxChars?: number;
79
+ }
80
+
81
+ declare const RotatedTick: (props: RotatedTickProps) => react_jsx_runtime.JSX.Element | null;
82
+
83
+ export { AiSummary, AiSummaryProps, ChartCard, ChartCardHeader, ChartWrapper, ColoredCheckbox, EmptyState, EmptyStateContainer, ExportButton, ExportButtonProps, LegendContainer, LegendItem, RotatedTick, SummaryDivider, SummaryStack, TooltipContainer, TooltipDivider, TooltipDot };
@@ -0,0 +1,34 @@
1
+ export { a as ChartCard, b as ChartCardHeader, c as ChartWrapper, i as ColoredCheckbox, m as EmptyState, l as EmptyStateContainer, g as LegendContainer, h as LegendItem, n as RotatedTick, k as SummaryDivider, j as SummaryStack, d as TooltipContainer, e as TooltipDivider, f as TooltipDot } from '../../chunk-UC2R4AXD.js';
2
+ import { c } from '../../chunk-Y2SILVOR.js';
3
+ import { a as a$7 } from '../../chunk-RUABKHIV.js';
4
+ import { a as a$1 } from '../../chunk-J5B2YJSR.js';
5
+ import { a } from '../../chunk-CBW32OUQ.js';
6
+ import { a as a$3 } from '../../chunk-4F2NKGF6.js';
7
+ import '../../chunk-F65ZXAGV.js';
8
+ import { a as a$6 } from '../../chunk-CO2KQFUN.js';
9
+ import { a as a$4 } from '../../chunk-2GTD4JW2.js';
10
+ import '../../chunk-PBLSVXV5.js';
11
+ import { a as a$2 } from '../../chunk-E3R7W7GK.js';
12
+ import { a as a$5 } from '../../chunk-LQRRMVFN.js';
13
+ import { b } from '../../chunk-2ZJUGM2S.js';
14
+ import ro from '@mui/material/AlertTitle';
15
+ import fo from '@mui/material/Button';
16
+ import P from '@mui/material/Typography';
17
+ import M from '@mui/material/Stack';
18
+ import j from '@mui/material/Alert';
19
+ import { keyframes, styled, alpha } from '@mui/material/styles';
20
+ import { jsx, jsxs, Fragment } from 'react/jsx-runtime';
21
+ import { memo } from 'react';
22
+ import xo from '@mui/lab/LoadingButton';
23
+
24
+ var to=keyframes`
25
+ 0% {
26
+ background-position: 0% 50%;
27
+ }
28
+ 100% {
29
+ background-position: 200% 50%;
30
+ }
31
+ `,u=styled(j)(({theme:o})=>{let t=o.palette.primary.main,r=alpha(t,.1);return {position:"relative",backgroundColor:alpha(o.palette.primary.main,.01),border:"1px solid transparent",borderRadius:8,"&::before":{content:'""',position:"absolute",inset:0,borderRadius:"inherit",padding:"1px",background:`linear-gradient(90deg, ${t} 0%, ${r} 50%, ${t} 100%)`,WebkitMask:"linear-gradient(#fff 0 0) content-box, linear-gradient(#fff 0 0)",WebkitMaskComposite:"xor",mask:"linear-gradient(#fff 0 0) content-box, linear-gradient(#fff 0 0)",maskComposite:"exclude",pointerEvents:"none"},overflow:"hidden","& .MuiAlert-message":{width:"100%"}}}),I=styled(u)({border:"1px solid transparent","&::before":{content:'""',position:"absolute",inset:0,borderRadius:"inherit",padding:"1px",background:"linear-gradient(90deg, #e01cd5 0%, #1CB5E0 50%, #e01cd5 100%)",backgroundSize:"200% auto",WebkitMask:"linear-gradient(#fff 0 0) content-box, linear-gradient(#fff 0 0)",WebkitMaskComposite:"xor",mask:"linear-gradient(#fff 0 0) content-box, linear-gradient(#fff 0 0)",maskComposite:"exclude",pointerEvents:"none",animation:`${to} 2s linear infinite`}});var io=()=>jsxs(I,{icon:jsx(a$4,{icon:"AI_08_SOLID_ROUND",color:"primary.main"}),action:jsx(a$7,{variant:"text",width:100,height:30}),children:[jsx(ro,{variant:"subtitle1",fontSize:"subtitle1.fontSize",color:"text.primary",children:"Resumo inteligente"}),jsxs(M,{gap:.5,children:[jsx(a$7,{variant:"text",width:"100%",height:30}),jsx(a$7,{variant:"text",width:"80%",height:30})]})]}),z=io;var no=()=>jsxs(M,{direction:"row",alignItems:"center",gap:1.5,children:[jsx(a$4,{icon:"AI_08_SOLID_ROUND",color:"primary.main",sx:{flexGrow:0}}),jsxs(M,{children:[jsx(P,{variant:"subtitle1",fontSize:"subtitle1.fontSize",color:"text.primary",children:"Resumo inteligente"}),jsx(P,{variant:"body2",fontSize:"body2.fontSize",color:"text.secondary",children:"Gerado com base nos dados consolidados da p\xE1gina."})]})]}),y=no;var po=o=>o,D=({detail:o,formatContent:t})=>{let r=t??po,e=t!=null;return jsx(P,{variant:"body2",fontSize:"body2.fontSize",color:"text.primary",children:e?jsx("span",{dangerouslySetInnerHTML:{__html:r(o)}}):o})},lo=({open:o,toggleOpen:t,detail:r,formatContent:e})=>b("down","sm")?jsx(a,{open:o,onClose:t,headerTitle:jsx(y,{}),headerProps:{direction:"row-reverse",sx:{"& > :last-child":{minWidth:0,overflow:"hidden"}}},children:jsx(D,{detail:r,formatContent:e})}):jsx(a$1,{open:o,onClose:t,dialogTitle:jsx(y,{}),dialogTitleProps:{sx:{flex:1,overflow:"hidden"}},maxWidth:"md",fullWidth:!0,scroll:"paper",children:jsx(D,{detail:r,formatContent:e})}),R=memo(lo);var co=({brief:o,detail:t,isLoading:r=!1,formatContent:e})=>{let[m,s]=a$2(!1);return !(!!o&&!!t)&&!r?null:jsxs(Fragment,{children:[jsx(a$3,{isLoading:r,loading:jsx(z,{}),children:jsxs(u,{icon:jsx(a$4,{icon:"AI_08_SOLID_ROUND",color:"primary.main"}),action:jsx(fo,{variant:r?"contained":"text",color:"primary",size:"small",onClick:s,children:"Ver mais"}),children:[jsx(ro,{variant:"subtitle1",fontSize:"subtitle1.fontSize",color:"text.primary",children:"Resumo inteligente"}),jsx(P,{variant:"body2",fontSize:"body2.fontSize",color:"text.secondary",children:o})]})}),jsx(R,{open:m,toggleOpen:s,detail:t??"",formatContent:e})]})},yo=co;var W=styled(fo)(({theme:o})=>({color:o.palette.text.secondary,"&:hover":{background:o.palette.action.hover}})),_=styled(xo)(({theme:o})=>({justifyContent:"flex-start",color:o.palette.text.secondary,fontWeight:400,"&:hover":{background:o.palette.action.hover}}));var bo=({onExport:o,isExporting:t})=>{let{open:r,onOpen:e,onClose:m}=a$5(),s=p=>{o(p),m();};return jsxs(Fragment,{children:[jsx(W,{variant:"text",startIcon:jsx(a$4,{icon:"DOWNLOAD"}),color:"primary",size:"small",onClick:e,disabled:t,children:t?"Exportando...":"Exportar"}),jsx(a$6,{open:r,onClose:m,disabledArrow:!0,sx:{p:1,width:180},children:Object.values(c).map((p,g)=>jsx(_,{variant:"text",onClick:()=>s(p),loading:t,fullWidth:!0,"data-testid":`export-button-${g}`,children:p},g))})]})},ho=bo;
32
+
33
+ export { yo as AiSummary, ho as ExportButton };
34
+ //# sourceMappingURL=index.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"sources":["../../../src/components/Analytics/AiSummary/index.tsx","../../../src/components/Analytics/AiSummary/Skeleton.tsx","../../../src/components/Analytics/AiSummary/styles.ts","../../../src/components/Analytics/AiSummary/Summary.tsx","../../../src/components/Analytics/AiSummary/Header.tsx","../../../src/components/Analytics/ExportButton/styles.ts","../../../src/components/Analytics/ExportButton/index.tsx"],"names":["AlertTitle","Button","Typography","Stack","MuiAlert","alpha","keyframes","styled","gradientAnimation","Alert","theme","primaryMain","primaryLight","LoadingAlert","jsx","jsxs","AiSummarySkeleton","Icon_default","Skeleton_default","memo","Header","Header_default","defaultFormatContent","text","SummaryContent","detail","formatContent","format","isHtml","Summary","open","toggleOpen","useResponsive_default","Drawer_default","Modal_default","Summary_default","Fragment","AiSummary","brief","isLoading","useToggle_default","Result_default","AiSummary_default","LoadingButton","MuiButton","ItemButton","ExportButton","onExport","isExporting","onOpen","onClose","usePopover_default","handleExport","MenuPopover_default","ExportFormat","index","ExportButton_default"],"mappings":"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","sourcesContent":["import AlertTitle from '@mui/material/AlertTitle';\nimport Button from '@mui/material/Button';\nimport Typography from '@mui/material/Typography';\n\nimport Icon from 'components/Icon';\nimport Result from 'components/Result';\nimport useToggle from 'hooks/useToggle';\n\nimport { AiSummaryProps } from './props';\nimport AiSummarySkeleton from './Skeleton';\nimport { Alert } from './styles';\nimport Summary from './Summary';\n\nconst AiSummary = ({\n brief,\n detail,\n isLoading = false,\n formatContent,\n}: AiSummaryProps) => {\n const [open, toggleOpen] = useToggle(false);\n\n const hasSummary = !!brief && !!detail;\n\n if (!hasSummary && !isLoading) return null;\n\n return (\n <>\n <Result isLoading={isLoading} loading={<AiSummarySkeleton />}>\n <Alert\n icon={<Icon icon=\"AI_08_SOLID_ROUND\" color=\"primary.main\" />}\n action={\n <Button\n variant={isLoading ? 'contained' : 'text'}\n color=\"primary\"\n size=\"small\"\n onClick={toggleOpen}\n >\n Ver mais\n </Button>\n }\n >\n <AlertTitle\n variant=\"subtitle1\"\n fontSize=\"subtitle1.fontSize\"\n color=\"text.primary\"\n >\n Resumo inteligente\n </AlertTitle>\n\n <Typography\n variant=\"body2\"\n fontSize=\"body2.fontSize\"\n color=\"text.secondary\"\n >\n {brief}\n </Typography>\n </Alert>\n </Result>\n\n <Summary\n open={open}\n toggleOpen={toggleOpen}\n detail={detail ?? ''}\n formatContent={formatContent}\n />\n </>\n );\n};\n\nexport default AiSummary;\n","import AlertTitle from '@mui/material/AlertTitle';\nimport Stack from '@mui/material/Stack';\n\nimport Icon from 'components/Icon';\nimport Skeleton from 'components/Skeleton';\n\nimport { LoadingAlert } from './styles';\n\nconst AiSummarySkeleton = () => (\n <LoadingAlert\n icon={<Icon icon=\"AI_08_SOLID_ROUND\" color=\"primary.main\" />}\n action={<Skeleton variant=\"text\" width={100} height={30} />}\n >\n <AlertTitle\n variant=\"subtitle1\"\n fontSize=\"subtitle1.fontSize\"\n color=\"text.primary\"\n >\n Resumo inteligente\n </AlertTitle>\n\n <Stack gap={0.5}>\n <Skeleton variant=\"text\" width=\"100%\" height={30} />\n <Skeleton variant=\"text\" width=\"80%\" height={30} />\n </Stack>\n </LoadingAlert>\n);\n\nexport default AiSummarySkeleton;\n","import MuiAlert from '@mui/material/Alert';\nimport { alpha, keyframes, styled } from '@mui/material/styles';\n\nconst gradientAnimation = keyframes`\n 0% {\n background-position: 0% 50%;\n }\n 100% {\n background-position: 200% 50%;\n }\n`;\n\nexport const Alert = styled(MuiAlert)(({ theme }) => {\n const primaryMain = theme.palette.primary.main;\n const primaryLight = alpha(primaryMain, 0.1);\n\n return {\n position: 'relative',\n\n backgroundColor: alpha(theme.palette.primary.main, 0.01),\n border: '1px solid transparent',\n\n borderRadius: 8,\n\n '&::before': {\n content: '\"\"',\n position: 'absolute',\n inset: 0,\n borderRadius: 'inherit',\n padding: '1px',\n background: `linear-gradient(90deg, ${primaryMain} 0%, ${primaryLight} 50%, ${primaryMain} 100%)`,\n WebkitMask:\n 'linear-gradient(#fff 0 0) content-box, linear-gradient(#fff 0 0)',\n WebkitMaskComposite: 'xor',\n mask: 'linear-gradient(#fff 0 0) content-box, linear-gradient(#fff 0 0)',\n maskComposite: 'exclude',\n pointerEvents: 'none',\n },\n\n overflow: 'hidden',\n\n '& .MuiAlert-message': {\n width: '100%',\n },\n };\n});\n\nexport const LoadingAlert = styled(Alert)({\n border: '1px solid transparent',\n\n '&::before': {\n content: '\"\"',\n position: 'absolute',\n inset: 0,\n borderRadius: 'inherit',\n padding: '1px',\n background: 'linear-gradient(90deg, #e01cd5 0%, #1CB5E0 50%, #e01cd5 100%)',\n backgroundSize: '200% auto',\n WebkitMask:\n 'linear-gradient(#fff 0 0) content-box, linear-gradient(#fff 0 0)',\n WebkitMaskComposite: 'xor',\n mask: 'linear-gradient(#fff 0 0) content-box, linear-gradient(#fff 0 0)',\n maskComposite: 'exclude',\n pointerEvents: 'none',\n animation: `${gradientAnimation} 2s linear infinite`,\n },\n});\n","import { memo } from 'react';\nimport Typography from '@mui/material/Typography';\n\nimport Drawer from 'components/Drawer';\nimport Modal from 'components/Modal';\nimport useResponsive from 'hooks/useResponsive';\n\nimport Header from './Header';\nimport { SummaryContentProps, SummaryProps } from './props';\n\nconst defaultFormatContent = (text: string) => text;\n\nconst SummaryContent = ({ detail, formatContent }: SummaryContentProps) => {\n const format = formatContent ?? defaultFormatContent;\n const isHtml = formatContent != null;\n\n return (\n <Typography variant=\"body2\" fontSize=\"body2.fontSize\" color=\"text.primary\">\n {isHtml ? (\n <span dangerouslySetInnerHTML={{ __html: format(detail) }} />\n ) : (\n detail\n )}\n </Typography>\n );\n};\n\nconst Summary = ({ open, toggleOpen, detail, formatContent }: SummaryProps) => {\n const isMobile = useResponsive('down', 'sm');\n\n if (isMobile) {\n return (\n <Drawer\n open={open}\n onClose={toggleOpen}\n headerTitle={<Header />}\n headerProps={{\n direction: 'row-reverse',\n sx: { '& > :last-child': { minWidth: 0, overflow: 'hidden' } },\n }}\n >\n <SummaryContent detail={detail} formatContent={formatContent} />\n </Drawer>\n );\n }\n\n return (\n <Modal\n open={open}\n onClose={toggleOpen}\n dialogTitle={<Header />}\n dialogTitleProps={{ sx: { flex: 1, overflow: 'hidden' } }}\n maxWidth=\"md\"\n fullWidth\n scroll=\"paper\"\n >\n <SummaryContent detail={detail} formatContent={formatContent} />\n </Modal>\n );\n};\n\nexport default memo(Summary);\n","import Stack from '@mui/material/Stack';\nimport Typography from '@mui/material/Typography';\n\nimport Icon from 'components/Icon';\n\nconst Header = () => (\n <Stack direction=\"row\" alignItems=\"center\" gap={1.5}>\n <Icon icon=\"AI_08_SOLID_ROUND\" color=\"primary.main\" sx={{ flexGrow: 0 }} />\n\n <Stack>\n <Typography\n variant=\"subtitle1\"\n fontSize=\"subtitle1.fontSize\"\n color=\"text.primary\"\n >\n Resumo inteligente\n </Typography>\n\n <Typography\n variant=\"body2\"\n fontSize=\"body2.fontSize\"\n color=\"text.secondary\"\n >\n Gerado com base nos dados consolidados da página.\n </Typography>\n </Stack>\n </Stack>\n);\n\nexport default Header;\n","import LoadingButton from '@mui/lab/LoadingButton';\nimport MuiButton from '@mui/material/Button';\nimport { styled } from '@mui/material/styles';\n\nexport const Button = styled(MuiButton)(({ theme }) => ({\n color: theme.palette.text.secondary,\n\n '&:hover': {\n background: theme.palette.action.hover,\n },\n}));\n\nexport const ItemButton = styled(LoadingButton)(({ theme }) => ({\n justifyContent: 'flex-start',\n\n color: theme.palette.text.secondary,\n fontWeight: 400,\n\n '&:hover': {\n background: theme.palette.action.hover,\n },\n}));\n","import Icon from 'components/Icon';\nimport MenuPopover from 'components/MenuPopover';\nimport usePopover from 'hooks/usePopover';\nimport { ExportFormat } from 'types/analytics';\n\nimport { ExportButtonProps } from './props';\nimport { Button, ItemButton } from './styles';\n\nconst ExportButton = ({ onExport, isExporting }: ExportButtonProps) => {\n const { open, onOpen, onClose } = usePopover();\n\n const handleExport = (format: ExportFormat) => {\n onExport(format);\n onClose();\n };\n\n return (\n <>\n <Button\n variant=\"text\"\n startIcon={<Icon icon=\"DOWNLOAD\" />}\n color=\"primary\"\n size=\"small\"\n onClick={onOpen}\n disabled={isExporting}\n >\n {isExporting ? 'Exportando...' : 'Exportar'}\n </Button>\n\n <MenuPopover\n open={open}\n onClose={onClose}\n disabledArrow\n sx={{ p: 1, width: 180 }}\n >\n {Object.values(ExportFormat).map((format, index) => (\n <ItemButton\n key={index}\n variant=\"text\"\n onClick={() => handleExport(format)}\n loading={isExporting}\n fullWidth\n data-testid={`export-button-${index}`}\n >\n {format}\n </ItemButton>\n ))}\n </MenuPopover>\n </>\n );\n};\n\nexport default ExportButton;\n"]}
@@ -11,7 +11,7 @@ interface ImageContainerProps {
11
11
 
12
12
  declare const Avatar: react.MemoExoticComponent<react.ForwardRefExoticComponent<Omit<PropsWithChildren<ImageContainerProps & _mui_material_Avatar.AvatarOwnProps & _mui_material_Avatar.AvatarSlotsAndSlotProps & _mui_material_OverridableComponent.CommonProps & Omit<Omit<react.DetailedHTMLProps<react.HTMLAttributes<HTMLDivElement>, HTMLDivElement>, "ref"> & {
13
13
  ref?: ((instance: HTMLDivElement | null) => void) | react.RefObject<HTMLDivElement> | null | undefined;
14
- }, "children" | "className" | "style" | "classes" | "sx" | "variant" | "slots" | "slotProps" | "sizes" | "alt" | "src" | "srcSet" | "imgProps"> & {
14
+ }, "children" | "className" | "style" | "classes" | "sx" | "variant" | "slots" | "slotProps" | "alt" | "src" | "sizes" | "srcSet" | "imgProps"> & {
15
15
  component?: react.ElementType<any, keyof react.JSX.IntrinsicElements> | undefined;
16
16
  }>, "ref"> & react.RefAttributes<HTMLDivElement>>>;
17
17
 
@@ -6,15 +6,15 @@ import '../../chunk-PBLSVXV5.js';
6
6
  import { a as a$2 } from '../../chunk-VR3K2Y2C.js';
7
7
  import { a as a$1 } from '../../chunk-LQRRMVFN.js';
8
8
  import '../../chunk-U4I7JPER.js';
9
- import '../../chunk-NWT5TUJO.js';
9
+ import '../../chunk-JM3SE72J.js';
10
10
  import '../../chunk-373WGZZL.js';
11
+ import '../../chunk-WUFEPE2G.js';
11
12
  import '../../chunk-BX2DSNRV.js';
12
13
  import '../../chunk-X4F3O7PX.js';
13
14
  import '../../chunk-Q2AVS24Z.js';
14
15
  import '../../chunk-LNESYSHP.js';
15
16
  import '../../chunk-YPL4KIKN.js';
16
17
  import '../../chunk-HBOBTNB5.js';
17
- import '../../chunk-WUFEPE2G.js';
18
18
  import '../../chunk-GLRLKFPS.js';
19
19
  import j from '@mui/material/Avatar';
20
20
  import d from '@mui/material/Divider';
@@ -1,14 +1,14 @@
1
1
  import { a } from '../../chunk-2GTD4JW2.js';
2
2
  import '../../chunk-PBLSVXV5.js';
3
- import { b } from '../../chunk-NWT5TUJO.js';
3
+ import { b } from '../../chunk-JM3SE72J.js';
4
4
  import '../../chunk-373WGZZL.js';
5
+ import '../../chunk-WUFEPE2G.js';
5
6
  import '../../chunk-BX2DSNRV.js';
6
7
  import '../../chunk-X4F3O7PX.js';
7
8
  import '../../chunk-Q2AVS24Z.js';
8
9
  import '../../chunk-LNESYSHP.js';
9
10
  import '../../chunk-YPL4KIKN.js';
10
11
  import '../../chunk-HBOBTNB5.js';
11
- import '../../chunk-WUFEPE2G.js';
12
12
  import { k } from '../../chunk-GLRLKFPS.js';
13
13
  import 'dayjs/locale/pt-br';
14
14
  import _ from 'dayjs';
@@ -90,7 +90,7 @@ declare const SelectionOverlay: _emotion_styled.StyledComponent<_mui_material_St
90
90
  }, keyof _mui_material_OverridableComponent.CommonProps | keyof _mui_material_Stack.StackOwnProps> & _mui_system.MUIStyledCommonProps<_mui_material_styles.Theme>, {}, {}>;
91
91
  declare const SelectionCount: _emotion_styled.StyledComponent<_mui_material_Typography.TypographyOwnProps & _mui_material_OverridableComponent.CommonProps & Omit<Omit<react.DetailedHTMLProps<react.HTMLAttributes<HTMLSpanElement>, HTMLSpanElement>, "ref"> & {
92
92
  ref?: ((instance: HTMLSpanElement | null) => void) | react.RefObject<HTMLSpanElement> | null | undefined;
93
- }, "typography" | "zIndex" | "fontFamily" | "fontWeight" | "children" | "pt" | "className" | "style" | "classes" | "sx" | "variant" | "border" | "boxShadow" | "alignContent" | "alignItems" | "alignSelf" | "bottom" | "boxSizing" | "color" | "columnGap" | "display" | "flexBasis" | "flexDirection" | "flexGrow" | "flexShrink" | "flexWrap" | "fontSize" | "fontStyle" | "gridAutoColumns" | "gridAutoFlow" | "gridAutoRows" | "gridTemplateAreas" | "gridTemplateColumns" | "gridTemplateRows" | "height" | "justifyContent" | "justifyItems" | "justifySelf" | "left" | "letterSpacing" | "lineHeight" | "marginBlockEnd" | "marginBlockStart" | "marginBottom" | "marginInlineEnd" | "marginInlineStart" | "marginLeft" | "marginRight" | "marginTop" | "maxHeight" | "maxWidth" | "minHeight" | "minWidth" | "order" | "paddingBlockEnd" | "paddingBlockStart" | "paddingBottom" | "paddingInlineEnd" | "paddingInlineStart" | "paddingLeft" | "paddingRight" | "paddingTop" | "position" | "right" | "rowGap" | "textAlign" | "textOverflow" | "textTransform" | "top" | "visibility" | "whiteSpace" | "width" | "borderBottom" | "borderColor" | "borderLeft" | "borderRadius" | "borderRight" | "borderTop" | "flex" | "gap" | "gridArea" | "gridColumn" | "gridRow" | "margin" | "marginBlock" | "marginInline" | "overflow" | "padding" | "paddingBlock" | "paddingInline" | "bgcolor" | "m" | "mt" | "mr" | "mb" | "ml" | "mx" | "marginX" | "my" | "marginY" | "p" | "pr" | "pb" | "pl" | "px" | "paddingX" | "py" | "paddingY" | "displayPrint" | "align" | "gutterBottom" | "noWrap" | "paragraph" | "variantMapping"> & _mui_system.MUIStyledCommonProps<_mui_material_styles.Theme>, {}, {}>;
93
+ }, "fontFamily" | "children" | "pt" | "className" | "style" | "classes" | "sx" | "variant" | "border" | "boxShadow" | "fontWeight" | "zIndex" | "alignContent" | "alignItems" | "alignSelf" | "bottom" | "boxSizing" | "color" | "columnGap" | "display" | "flexBasis" | "flexDirection" | "flexGrow" | "flexShrink" | "flexWrap" | "fontSize" | "fontStyle" | "gridAutoColumns" | "gridAutoFlow" | "gridAutoRows" | "gridTemplateAreas" | "gridTemplateColumns" | "gridTemplateRows" | "height" | "justifyContent" | "justifyItems" | "justifySelf" | "left" | "letterSpacing" | "lineHeight" | "marginBlockEnd" | "marginBlockStart" | "marginBottom" | "marginInlineEnd" | "marginInlineStart" | "marginLeft" | "marginRight" | "marginTop" | "maxHeight" | "maxWidth" | "minHeight" | "minWidth" | "order" | "paddingBlockEnd" | "paddingBlockStart" | "paddingBottom" | "paddingInlineEnd" | "paddingInlineStart" | "paddingLeft" | "paddingRight" | "paddingTop" | "position" | "right" | "rowGap" | "textAlign" | "textOverflow" | "textTransform" | "top" | "visibility" | "whiteSpace" | "width" | "borderBottom" | "borderColor" | "borderLeft" | "borderRadius" | "borderRight" | "borderTop" | "flex" | "gap" | "gridArea" | "gridColumn" | "gridRow" | "margin" | "marginBlock" | "marginInline" | "overflow" | "padding" | "paddingBlock" | "paddingInline" | "bgcolor" | "m" | "mt" | "mr" | "mb" | "ml" | "mx" | "marginX" | "my" | "marginY" | "p" | "pr" | "pb" | "pl" | "px" | "paddingX" | "py" | "paddingY" | "typography" | "displayPrint" | "align" | "gutterBottom" | "noWrap" | "paragraph" | "variantMapping"> & _mui_system.MUIStyledCommonProps<_mui_material_styles.Theme>, {}, {}>;
94
94
  declare const SelectionActions: _emotion_styled.StyledComponent<_mui_material_Stack.StackOwnProps & _mui_material_OverridableComponent.CommonProps & Omit<Omit<react.DetailedHTMLProps<react.HTMLAttributes<HTMLDivElement>, HTMLDivElement>, "ref"> & {
95
95
  ref?: ((instance: HTMLDivElement | null) => void) | react.RefObject<HTMLDivElement> | null | undefined;
96
96
  }, keyof _mui_material_OverridableComponent.CommonProps | keyof _mui_material_Stack.StackOwnProps> & _mui_system.MUIStyledCommonProps<_mui_material_styles.Theme>, {}, {}>;
@@ -1,14 +1,5 @@
1
- import { a as a$1 } from '../../chunk-F65ZXAGV.js';
2
- import { a } from '../../chunk-2GTD4JW2.js';
1
+ export { a as default } from '../../chunk-CBW32OUQ.js';
2
+ import '../../chunk-F65ZXAGV.js';
3
+ import '../../chunk-2GTD4JW2.js';
3
4
  import '../../chunk-PBLSVXV5.js';
4
- import S from '@mui/material/Drawer';
5
- import T from '@mui/material/IconButton';
6
- import l from '@mui/material/Stack';
7
- import y from '@mui/material/DialogActions';
8
- import { styled } from '@mui/material/styles';
9
- import { jsxs, jsx } from 'react/jsx-runtime';
10
-
11
- var c=styled(l)(({theme:r})=>({alignItems:"center",borderBottom:`1px solid ${r.palette.grey[300]}`,padding:"22px 20px",gap:16})),d=styled(l)(({theme:r})=>({flexDirection:"row",alignItems:"center",gap:8,flex:1,fontSize:r.typography.subtitle1.fontSize,fontWeight:r.typography.subtitle1.fontWeight,fontFamily:r.typography.fontFamily})),m=styled(y)(({theme:r})=>({borderTop:`1px solid ${r.palette.divider}`,backgroundColor:r.palette.background.paper}));var D=({children:r,actionsProps:t})=>jsx(m,{"data-testid":"drawer-actions",...t,children:r}),f=D;var C=({headerTitle:r,headerProps:t,onClose:i,children:w,contentProps:A,maxWidth:h=684,actions:a$2,actionsProps:x,id:p,...b})=>{let u=p||"actions";return jsxs(S,{anchor:"right",id:p,PaperProps:{sx:{width:1,maxWidth:h}},onClose:i,...b,children:[jsxs(c,{direction:"row",...t,children:[jsx(T,{"aria-label":"Fechar gaveta lateral","data-testid":"close-drawer-btn",size:"small",onClick:i,children:jsx(a,{icon:"CLOSE_MARK_BUTTON",width:18})}),jsx(d,{children:r})]}),jsx(a$1,{children:jsx(l,{p:3,...A,children:w})}),a$2&&jsx(f,{actionsProps:{...x,id:u},children:a$2})]})},K=C;
12
-
13
- export { K as default };
14
5
  //# sourceMappingURL=index.js.map
@@ -1 +1 @@
1
- {"version":3,"sources":["../../../src/components/Drawer/index.tsx","../../../src/components/Drawer/styles.ts","../../../src/components/Drawer/Actions.tsx"],"names":["MuiDrawer","IconButton","Stack","DialogActions","styled","Header","theme","HeaderTitle","Actions","jsx","children","actionsProps","Actions_default","jsxs","Drawer","headerTitle","headerProps","onClose","contentProps","maxWidth","actions","id","other","DRAWER_ACTIONS","Icon_default","Scrollbar_default","Drawer_default"],"mappings":"wHAAA,OAAOA,MAAe,uBACtB,OAAOC,MAAgB,2BACvB,OAAOC,MAAW,sBCFlB,OAAOC,MAAmB,8BAC1B,OAAOD,MAAW,sBAClB,OAAS,UAAAE,MAAc,uBAEhB,IAAMC,EAASD,EAAOF,CAAK,EAAE,CAAC,CAAE,MAAAI,CAAM,KAAO,CAClD,WAAY,SACZ,aAAc,aAAaA,EAAM,QAAQ,KAAK,GAAG,IACjD,QAAS,YACT,IAAK,EACP,EAAE,EAEWC,EAAcH,EAAOF,CAAK,EAAE,CAAC,CAAE,MAAAI,CAAM,KAAO,CACvD,cAAe,MACf,WAAY,SACZ,IAAK,EACL,KAAM,EACN,SAAUA,EAAM,WAAW,UAAU,SACrC,WAAYA,EAAM,WAAW,UAAU,WACvC,WAAYA,EAAM,WAAW,UAC/B,EAAE,EAEWE,EAAUJ,EAAOD,CAAa,EAAE,CAAC,CAAE,MAAAG,CAAM,KAAO,CAC3D,UAAW,aAAaA,EAAM,QAAQ,UACtC,gBAAiBA,EAAM,QAAQ,WAAW,KAC5C,EAAE,ECdE,cAAAG,MAAA,oBALJ,IAAMD,EAAU,CAAC,CACf,SAAAE,EACA,aAAAC,CACF,IAEIF,EAACD,EAAA,CAAY,cAAY,iBAAkB,GAAGG,EAC3C,SAAAD,EACH,EAIGE,EAAQJ,EFkBT,OAOI,OAAAC,EAPJ,QAAAI,MAAA,oBAvBN,IAAMC,EAAS,CAAC,CACd,YAAAC,EACA,YAAAC,EACA,QAAAC,EACA,SAAAP,EACA,aAAAQ,EACA,SAAAC,EAAW,IACX,QAAAC,EACA,aAAAT,EACA,GAAAU,EACA,GAAGC,CACL,IAAmB,CACjB,IAAMC,EAAiBF,GAAM,UAC7B,OACER,EAACb,EAAA,CACC,OAAO,QACP,GAAIqB,EACJ,WAAY,CACV,GAAI,CAAE,MAAO,EAAG,SAAUF,CAAS,CACrC,EACA,QAASF,EACR,GAAGK,EAEJ,UAAAT,EAACR,EAAA,CAAO,UAAU,MAAO,GAAGW,EAC1B,UAAAP,EAACR,EAAA,CACC,aAAW,wBACX,cAAY,mBACZ,KAAK,QACL,QAASgB,EAET,SAAAR,EAACe,EAAA,CAAK,KAAK,oBAAoB,MAAO,GAAI,EAC5C,EAEAf,EAACF,EAAA,CAAa,SAAAQ,EAAY,GAC5B,EACAN,EAACgB,EAAA,CACC,SAAAhB,EAACP,EAAA,CAAM,EAAG,EAAI,GAAGgB,EACd,SAAAR,EACH,EACF,EAECU,GACCX,EAACG,EAAA,CAAQ,aAAc,CAAE,GAAGD,EAAc,GAAIY,CAAe,EAC1D,SAAAH,EACH,GAEJ,CAEJ,EAEOM,EAAQZ","sourcesContent":["import MuiDrawer from '@mui/material/Drawer';\nimport IconButton from '@mui/material/IconButton';\nimport Stack from '@mui/material/Stack';\n\nimport Icon from '../Icon';\nimport Scrollbar from '../Scrollbar';\n\nimport Actions from './Actions';\nimport { DrawerProps } from './props';\nimport { Header, HeaderTitle } from './styles';\n\nconst Drawer = ({\n headerTitle,\n headerProps,\n onClose,\n children,\n contentProps,\n maxWidth = 684,\n actions,\n actionsProps,\n id,\n ...other\n}: DrawerProps) => {\n const DRAWER_ACTIONS = id || '' + 'actions';\n return (\n <MuiDrawer\n anchor=\"right\"\n id={id}\n PaperProps={{\n sx: { width: 1, maxWidth: maxWidth },\n }}\n onClose={onClose}\n {...other}\n >\n <Header direction=\"row\" {...headerProps}>\n <IconButton\n aria-label=\"Fechar gaveta lateral\"\n data-testid=\"close-drawer-btn\"\n size=\"small\"\n onClick={onClose}\n >\n <Icon icon=\"CLOSE_MARK_BUTTON\" width={18} />\n </IconButton>\n\n <HeaderTitle>{headerTitle}</HeaderTitle>\n </Header>\n <Scrollbar>\n <Stack p={3} {...contentProps}>\n {children}\n </Stack>\n </Scrollbar>\n\n {actions && (\n <Actions actionsProps={{ ...actionsProps, id: DRAWER_ACTIONS }}>\n {actions}\n </Actions>\n )}\n </MuiDrawer>\n );\n};\n\nexport default Drawer;\n","import DialogActions from '@mui/material/DialogActions';\nimport Stack from '@mui/material/Stack';\nimport { styled } from '@mui/material/styles';\n\nexport const Header = styled(Stack)(({ theme }) => ({\n alignItems: 'center',\n borderBottom: `1px solid ${theme.palette.grey[300]}`,\n padding: '22px 20px',\n gap: 16,\n}));\n\nexport const HeaderTitle = styled(Stack)(({ theme }) => ({\n flexDirection: 'row',\n alignItems: 'center',\n gap: 8,\n flex: 1,\n fontSize: theme.typography.subtitle1.fontSize,\n fontWeight: theme.typography.subtitle1.fontWeight,\n fontFamily: theme.typography.fontFamily,\n}));\n\nexport const Actions = styled(DialogActions)(({ theme }) => ({\n borderTop: `1px solid ${theme.palette.divider}`,\n backgroundColor: theme.palette.background.paper,\n}));\n","import { PropsWithChildren } from 'react';\n\nimport { DrawerActionsProps } from './props';\nimport { Actions as ActionsElem } from './styles';\n\nconst Actions = ({\n children,\n actionsProps,\n}: PropsWithChildren<DrawerActionsProps>) => {\n return (\n <ActionsElem data-testid=\"drawer-actions\" {...actionsProps}>\n {children}\n </ActionsElem>\n );\n};\n\nexport default Actions;\n"]}
1
+ {"version":3,"sources":[],"names":[],"mappings":""}
@@ -1,5 +1,5 @@
1
- export { a as FilterOperator, b as SortType } from '../../chunk-M62EJMQ6.js';
2
1
  import '../../chunk-4P2L7UJA.js';
2
+ export { a as FilterOperator, b as SortType } from '../../chunk-M62EJMQ6.js';
3
3
  import { a as a$3 } from '../../chunk-WLRSUL67.js';
4
4
  import { d, c } from '../../chunk-N7IK5EUP.js';
5
5
  import { h, a as a$5 } from '../../chunk-OF6623HG.js';