@zydon/common 2.9.5 → 2.9.8
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/README.md +1 -0
- package/dist/Ai-HRRBCJSS.js +2 -0
- package/dist/Ai-HRRBCJSS.js.map +1 -0
- package/dist/AiChatBubbleIcon-CACZGYSH.js +2 -0
- package/dist/AiChatBubbleIcon-CACZGYSH.js.map +1 -0
- package/dist/AmazonPayIcon-ESKLYXQZ.js +2 -0
- package/dist/AmazonPayIcon-ESKLYXQZ.js.map +1 -0
- package/dist/AmericanExpressBadge-JPJAPW3B.js +2 -0
- package/dist/AmericanExpressBadge-JPJAPW3B.js.map +1 -0
- package/dist/AmericanExpressIcon-YBRR647B.js +2 -0
- package/dist/AmericanExpressIcon-YBRR647B.js.map +1 -0
- package/dist/Analytics02StrokeRounded-3VDFFHG7.js +2 -0
- package/dist/Analytics02StrokeRounded-3VDFFHG7.js.map +1 -0
- package/dist/ApplePayBadge-K4322NW2.js +2 -0
- package/dist/ApplePayBadge-K4322NW2.js.map +1 -0
- package/dist/ApplePayIcon-BRMDGVNO.js +2 -0
- package/dist/ApplePayIcon-BRMDGVNO.js.map +1 -0
- package/dist/ArrowDownWard-OAIJ5GFX.js +2 -0
- package/dist/ArrowDownWard-OAIJ5GFX.js.map +1 -0
- package/dist/ArrowGoBackIcon-RQAGWSBC.js +2 -0
- package/dist/ArrowGoBackIcon-RQAGWSBC.js.map +1 -0
- package/dist/ArrowGoFowardIcon-YCO6AWFM.js +2 -0
- package/dist/ArrowGoFowardIcon-YCO6AWFM.js.map +1 -0
- package/dist/ArrowiOSDownwardFillIcon-QCG3657O.js +2 -0
- package/dist/ArrowiOSDownwardFillIcon-QCG3657O.js.map +1 -0
- package/dist/ArtificialIntelligence08-QNUOVBLK.js +2 -0
- package/dist/ArtificialIntelligence08-QNUOVBLK.js.map +1 -0
- package/dist/ArtificialIntelligence08SolidRound-3MTVNRQB.js +2 -0
- package/dist/ArtificialIntelligence08SolidRound-3MTVNRQB.js.map +1 -0
- package/dist/ArtificialIntelligenceicon-FXDOFHDT.js +2 -0
- package/dist/ArtificialIntelligenceicon-FXDOFHDT.js.map +1 -0
- package/dist/Audio-WIIMGOFF.js +2 -0
- package/dist/Audio-WIIMGOFF.js.map +1 -0
- package/dist/BNBBadge-LUCCEXY3.js +2 -0
- package/dist/BNBBadge-LUCCEXY3.js.map +1 -0
- package/dist/BannerIcon-JXGMNBNZ.js +2 -0
- package/dist/BannerIcon-JXGMNBNZ.js.map +1 -0
- package/dist/BellDuotone-LNSNM4RG.js +2 -0
- package/dist/BellDuotone-LNSNM4RG.js.map +1 -0
- package/dist/BoletoBadge-KBXYSNUX.js +2 -0
- package/dist/BoletoBadge-KBXYSNUX.js.map +1 -0
- package/dist/BrandingIcon-5WHENYBN.js +2 -0
- package/dist/BrandingIcon-5WHENYBN.js.map +1 -0
- package/dist/CVCIcon-2WG6A6TR.js +2 -0
- package/dist/CVCIcon-2WG6A6TR.js.map +1 -0
- package/dist/CalculatorMoneyIcon-2L3SDBGK.js +2 -0
- package/dist/CalculatorMoneyIcon-2L3SDBGK.js.map +1 -0
- package/dist/CalendarClockIcon-QBEKKTAY.js +2 -0
- package/dist/CalendarClockIcon-QBEKKTAY.js.map +1 -0
- package/dist/CancelCircleSolidIcon-QLATPMES.js +2 -0
- package/dist/CancelCircleSolidIcon-QLATPMES.js.map +1 -0
- package/dist/CardsIcon-R7Z3RJZ3.js +2 -0
- package/dist/CardsIcon-R7Z3RJZ3.js.map +1 -0
- package/dist/CartCheck-IQTJA6TL.js +2 -0
- package/dist/CartCheck-IQTJA6TL.js.map +1 -0
- package/dist/Chart-BG54VMQ3.js +2 -0
- package/dist/Chart-BG54VMQ3.js.map +1 -0
- package/dist/CheckSuccessFileIcon-DOP7W7WP.js +2 -0
- package/dist/CheckSuccessFileIcon-DOP7W7WP.js.map +1 -0
- package/dist/CheckmarkCircleIcon-UPJ64LCA.js +2 -0
- package/dist/CheckmarkCircleIcon-UPJ64LCA.js.map +1 -0
- package/dist/CheckmarkCircleRoundedIcon-ZSP2JY73.js +2 -0
- package/dist/CheckmarkCircleRoundedIcon-ZSP2JY73.js.map +1 -0
- package/dist/CieloBadge-BOGXJRG5.js +2 -0
- package/dist/CieloBadge-BOGXJRG5.js.map +1 -0
- package/dist/CirculeIcon-TX3PYHT2.js +2 -0
- package/dist/CirculeIcon-TX3PYHT2.js.map +1 -0
- package/dist/CirrusIcon-SFVZTQLR.js +2 -0
- package/dist/CirrusIcon-SFVZTQLR.js.map +1 -0
- package/dist/DecimalIcon-T67IAYRX.js +2 -0
- package/dist/DecimalIcon-T67IAYRX.js.map +1 -0
- package/dist/DecimalIncreaseIcon-JDNIQET7.js +2 -0
- package/dist/DecimalIncreaseIcon-JDNIQET7.js.map +1 -0
- package/dist/DinersClubIcon-SJQ37PMB.js +2 -0
- package/dist/DinersClubIcon-SJQ37PMB.js.map +1 -0
- package/dist/DiscoverIcon-NYAHQC6O.js +2 -0
- package/dist/DiscoverIcon-NYAHQC6O.js.map +1 -0
- package/dist/Doc-TEOHKZH7.js +2 -0
- package/dist/Doc-TEOHKZH7.js.map +1 -0
- package/dist/Document-3YST3EZP.js +2 -0
- package/dist/Document-3YST3EZP.js.map +1 -0
- package/dist/DotIcon-OBYWESHI.js +2 -0
- package/dist/DotIcon-OBYWESHI.js.map +1 -0
- package/dist/DoubleChatBubbleIcon-6HERGTPB.js +2 -0
- package/dist/DoubleChatBubbleIcon-6HERGTPB.js.map +1 -0
- package/dist/DragAndDrop-A43BXSQU.js +2 -0
- package/dist/DragAndDrop-A43BXSQU.js.map +1 -0
- package/dist/DropdownIcon-GFXXDNWB.js +2 -0
- package/dist/DropdownIcon-GFXXDNWB.js.map +1 -0
- package/dist/EloBadge-6AKGKZEK.js +2 -0
- package/dist/EloBadge-6AKGKZEK.js.map +1 -0
- package/dist/EloIcon-UTEC5BSJ.js +2 -0
- package/dist/EloIcon-UTEC5BSJ.js.map +1 -0
- package/dist/ErrorBellIcon-TUS3Q4UE.js +2 -0
- package/dist/ErrorBellIcon-TUS3Q4UE.js.map +1 -0
- package/dist/Excel-S6W6DDHP.js +2 -0
- package/dist/Excel-S6W6DDHP.js.map +1 -0
- package/dist/FavouriteIcon-FE3K2S6D.js +2 -0
- package/dist/FavouriteIcon-FE3K2S6D.js.map +1 -0
- package/dist/FavouriteRoundedIcon-HAOEQ5QL.js +2 -0
- package/dist/FavouriteRoundedIcon-HAOEQ5QL.js.map +1 -0
- package/dist/File-EIHAPUR2.js +2 -0
- package/dist/File-EIHAPUR2.js.map +1 -0
- package/dist/FileCheckDuotone-W5CWO2XU.js +2 -0
- package/dist/FileCheckDuotone-W5CWO2XU.js.map +1 -0
- package/dist/FileCorruptedDuotone-MPVVWVXH.js +2 -0
- package/dist/FileCorruptedDuotone-MPVVWVXH.js.map +1 -0
- package/dist/FilterListIcon-3FGGJL63.js +2 -0
- package/dist/FilterListIcon-3FGGJL63.js.map +1 -0
- package/dist/FilterPersonalization-WRVUTOMS.js +2 -0
- package/dist/FilterPersonalization-WRVUTOMS.js.map +1 -0
- package/dist/FlashRoundedIcon-CTI5NE2Q.js +2 -0
- package/dist/FlashRoundedIcon-CTI5NE2Q.js.map +1 -0
- package/dist/Folder-BJE54IAC.js +2 -0
- package/dist/Folder-BJE54IAC.js.map +1 -0
- package/dist/GithubIcon-Y6UXGZAN.js +2 -0
- package/dist/GithubIcon-Y6UXGZAN.js.map +1 -0
- package/dist/GithubStrokedIcon-U5Y7RKWB.js +2 -0
- package/dist/GithubStrokedIcon-U5Y7RKWB.js.map +1 -0
- package/dist/GooglePayIcon-WSVU5UQ7.js +2 -0
- package/dist/GooglePayIcon-WSVU5UQ7.js.map +1 -0
- package/dist/HexagonWarning-PG757W73.js +2 -0
- package/dist/HexagonWarning-PG757W73.js.map +1 -0
- package/dist/HiperIcon-Q5XF5HIT.js +2 -0
- package/dist/HiperIcon-Q5XF5HIT.js.map +1 -0
- package/dist/HipercardIcon-NIIGEQDE.js +2 -0
- package/dist/HipercardIcon-NIIGEQDE.js.map +1 -0
- package/dist/HorizontalLinesIcon-JFFFCIMN.js +2 -0
- package/dist/HorizontalLinesIcon-JFFFCIMN.js.map +1 -0
- package/dist/HorizontalListIcon-VYTATWOB.js +2 -0
- package/dist/HorizontalListIcon-VYTATWOB.js.map +1 -0
- package/dist/HtmlIcon-SX2CMSLK.js +2 -0
- package/dist/HtmlIcon-SX2CMSLK.js.map +1 -0
- package/dist/Img-CYUIID5D.js +2 -0
- package/dist/Img-CYUIID5D.js.map +1 -0
- package/dist/InfoIcon-Z3XET4MH.js +2 -0
- package/dist/InfoIcon-Z3XET4MH.js.map +1 -0
- package/dist/InformationsIcon-SQEJKVPA.js +2 -0
- package/dist/InformationsIcon-SQEJKVPA.js.map +1 -0
- package/dist/IntegerNumberIcon-MTTBRM6U.js +2 -0
- package/dist/IntegerNumberIcon-MTTBRM6U.js.map +1 -0
- package/dist/Invoice01Icon-OC6PMY4O.js +2 -0
- package/dist/Invoice01Icon-OC6PMY4O.js.map +1 -0
- package/dist/Invoice03Icon-B4M4AFH6.js +2 -0
- package/dist/Invoice03Icon-B4M4AFH6.js.map +1 -0
- package/dist/JCBIcon-ATF2XSYG.js +2 -0
- package/dist/JCBIcon-ATF2XSYG.js.map +1 -0
- package/dist/Js-7JJD4LND.js +2 -0
- package/dist/Js-7JJD4LND.js.map +1 -0
- package/dist/KeyAccessIcon-6VUHFADF.js +2 -0
- package/dist/KeyAccessIcon-6VUHFADF.js.map +1 -0
- package/dist/ListDuotone-N574ZFMO.js +2 -0
- package/dist/ListDuotone-N574ZFMO.js.map +1 -0
- package/dist/ListSquareIcon-DFKXPOAP.js +2 -0
- package/dist/ListSquareIcon-DFKXPOAP.js.map +1 -0
- package/dist/LowPriorityIcon-7XQ7E52G.js +2 -0
- package/dist/LowPriorityIcon-7XQ7E52G.js.map +1 -0
- package/dist/MaestroIcon-3Z6PCJQK.js +2 -0
- package/dist/MaestroIcon-3Z6PCJQK.js.map +1 -0
- package/dist/ManagerIcon-JNQC4CRV.js +2 -0
- package/dist/ManagerIcon-JNQC4CRV.js.map +1 -0
- package/dist/MastercardBadge-NIXYRVEF.js +2 -0
- package/dist/MastercardBadge-NIXYRVEF.js.map +1 -0
- package/dist/MastercardIcon-2UOY62G2.js +2 -0
- package/dist/MastercardIcon-2UOY62G2.js.map +1 -0
- package/dist/MediaAudioFilesIcon-I2NV4SPL.js +2 -0
- package/dist/MediaAudioFilesIcon-I2NV4SPL.js.map +1 -0
- package/dist/MediaDocFilesIcon-ZD7INJFK.js +2 -0
- package/dist/MediaDocFilesIcon-ZD7INJFK.js.map +1 -0
- package/dist/MediaGenericFilesIcon-CRRDQR3R.js +2 -0
- package/dist/MediaGenericFilesIcon-CRRDQR3R.js.map +1 -0
- package/dist/MediaImageFilesIcon-V6QERF7A.js +2 -0
- package/dist/MediaImageFilesIcon-V6QERF7A.js.map +1 -0
- package/dist/MediaPDFFilesIcon-KZX435I4.js +2 -0
- package/dist/MediaPDFFilesIcon-KZX435I4.js.map +1 -0
- package/dist/MediaPPSXFilesIcon-WLMCDNMC.js +2 -0
- package/dist/MediaPPSXFilesIcon-WLMCDNMC.js.map +1 -0
- package/dist/MediaSheetFilesIcon-EMM5UJAH.js +2 -0
- package/dist/MediaSheetFilesIcon-EMM5UJAH.js.map +1 -0
- package/dist/MediaTxtFilesIcon-ZVV7COTG.js +2 -0
- package/dist/MediaTxtFilesIcon-ZVV7COTG.js.map +1 -0
- package/dist/MediaVideoFilesIcon-IPFV4MTP.js +2 -0
- package/dist/MediaVideoFilesIcon-IPFV4MTP.js.map +1 -0
- package/dist/MediaZipFilesIcon-HZHTWXYX.js +2 -0
- package/dist/MediaZipFilesIcon-HZHTWXYX.js.map +1 -0
- package/dist/MercadoPagoIcon-M7J7N2I2.js +2 -0
- package/dist/MercadoPagoIcon-M7J7N2I2.js.map +1 -0
- package/dist/MiniBannerIcon-APEKOIEK.js +2 -0
- package/dist/MiniBannerIcon-APEKOIEK.js.map +1 -0
- package/dist/MoneyIcon-SZAJJUTN.js +2 -0
- package/dist/MoneyIcon-SZAJJUTN.js.map +1 -0
- package/dist/MoreGrid-TJ25UUM4.js +2 -0
- package/dist/MoreGrid-TJ25UUM4.js.map +1 -0
- package/dist/MoreIcon-3CHGTRN4.js +2 -0
- package/dist/MoreIcon-3CHGTRN4.js.map +1 -0
- package/dist/NumberOneOutlinedIcon-352KD4CW.js +2 -0
- package/dist/NumberOneOutlinedIcon-352KD4CW.js.map +1 -0
- package/dist/OpenedBoxIcon-WYZUBMY3.js +2 -0
- package/dist/OpenedBoxIcon-WYZUBMY3.js.map +1 -0
- package/dist/OrdenatingIcon-XVNXQIBA.js +2 -0
- package/dist/OrdenatingIcon-XVNXQIBA.js.map +1 -0
- package/dist/OrdersIcon-ZX47YHXN.js +2 -0
- package/dist/OrdersIcon-ZX47YHXN.js.map +1 -0
- package/dist/PauseSolidIcon-5VO5KMVS.js +2 -0
- package/dist/PauseSolidIcon-5VO5KMVS.js.map +1 -0
- package/dist/PayPalIcon-6U2IPMIR.js +2 -0
- package/dist/PayPalIcon-6U2IPMIR.js.map +1 -0
- package/dist/Pdf-3MIKBHWC.js +2 -0
- package/dist/Pdf-3MIKBHWC.js.map +1 -0
- package/dist/Pdf-O532QILP.js +2 -0
- package/dist/Pdf-O532QILP.js.map +1 -0
- package/dist/PencilEditAiIcon-DKO3PHLZ.js +2 -0
- package/dist/PencilEditAiIcon-DKO3PHLZ.js.map +1 -0
- package/dist/PencilIcon-AJ42SH5O.js +2 -0
- package/dist/PencilIcon-AJ42SH5O.js.map +1 -0
- package/dist/PermanentJobIcon-WKICOFHL.js +2 -0
- package/dist/PermanentJobIcon-WKICOFHL.js.map +1 -0
- package/dist/PersonChatBubbleIcon-K6VX75XA.js +2 -0
- package/dist/PersonChatBubbleIcon-K6VX75XA.js.map +1 -0
- package/dist/PixBadge-KU5XDGOF.js +2 -0
- package/dist/PixBadge-KU5XDGOF.js.map +1 -0
- package/dist/PixIcon-WQ7XHTCY.js +2 -0
- package/dist/PixIcon-WQ7XHTCY.js.map +1 -0
- package/dist/PlaySolidIcon-EKAVZ5W4.js +2 -0
- package/dist/PlaySolidIcon-EKAVZ5W4.js.map +1 -0
- package/dist/PowerPoint-FFF5LH3W.js +2 -0
- package/dist/PowerPoint-FFF5LH3W.js.map +1 -0
- package/dist/ProductBoxIcon-5V3V6NF3.js +2 -0
- package/dist/ProductBoxIcon-5V3V6NF3.js.map +1 -0
- package/dist/ProductSearchBoxIcon-KCCT725M.js +2 -0
- package/dist/ProductSearchBoxIcon-KCCT725M.js.map +1 -0
- package/dist/ProductsIcon-JO2KNTSS.js +2 -0
- package/dist/ProductsIcon-JO2KNTSS.js.map +1 -0
- package/dist/Pts-67NTPGDS.js +2 -0
- package/dist/Pts-67NTPGDS.js.map +1 -0
- package/dist/RadioButtonCheckedIcon-EWTWPQFW.js +2 -0
- package/dist/RadioButtonCheckedIcon-EWTWPQFW.js.map +1 -0
- package/dist/ReverseIcon-OFJ4LNQH.js +2 -0
- package/dist/ReverseIcon-OFJ4LNQH.js.map +1 -0
- package/dist/RocketIcon-L534C4EJ.js +2 -0
- package/dist/RocketIcon-L534C4EJ.js.map +1 -0
- package/dist/RowInsertIcon-G45YHGLO.js +2 -0
- package/dist/RowInsertIcon-G45YHGLO.js.map +1 -0
- package/dist/SamsungPayBadge-2VAXUKJ2.js +2 -0
- package/dist/SamsungPayBadge-2VAXUKJ2.js.map +1 -0
- package/dist/SaveDiskIcon-5JXIKO3M.js +2 -0
- package/dist/SaveDiskIcon-5JXIKO3M.js.map +1 -0
- package/dist/SettingsError02Icon-QZIG4WXQ.js +2 -0
- package/dist/SettingsError02Icon-QZIG4WXQ.js.map +1 -0
- package/dist/ShoppingCartIcon-TBGUTNED.js +2 -0
- package/dist/ShoppingCartIcon-TBGUTNED.js.map +1 -0
- package/dist/SizeBoxIcon-DBXZR3VE.js +2 -0
- package/dist/SizeBoxIcon-DBXZR3VE.js.map +1 -0
- package/dist/SortByTimeDuotone-MTS7VKYE.js +2 -0
- package/dist/SortByTimeDuotone-MTS7VKYE.js.map +1 -0
- package/dist/Star02Icon-FNFBLGJF.js +2 -0
- package/dist/Star02Icon-FNFBLGJF.js.map +1 -0
- package/dist/TapeMeasureIcon-HDAVEKIQ.js +2 -0
- package/dist/TapeMeasureIcon-HDAVEKIQ.js.map +1 -0
- package/dist/ThumbsDownRoundedIcon-7THAELTG.js +2 -0
- package/dist/ThumbsDownRoundedIcon-7THAELTG.js.map +1 -0
- package/dist/ThumbsUpRoundedIcon-XGYWY3JR.js +2 -0
- package/dist/ThumbsUpRoundedIcon-XGYWY3JR.js.map +1 -0
- package/dist/TicketBarCodeIcon-6YBNKJAO.js +2 -0
- package/dist/TicketBarCodeIcon-6YBNKJAO.js.map +1 -0
- package/dist/TimeListIcon-4ZWXGWEI.js +2 -0
- package/dist/TimeListIcon-4ZWXGWEI.js.map +1 -0
- package/dist/TornListIcon-TEIS2FAB.js +2 -0
- package/dist/TornListIcon-TEIS2FAB.js.map +1 -0
- package/dist/Txt-WC5UCDET.js +2 -0
- package/dist/Txt-WC5UCDET.js.map +1 -0
- package/dist/UnionPayIcon-Z7IYZ4Y2.js +2 -0
- package/dist/UnionPayIcon-Z7IYZ4Y2.js.map +1 -0
- package/dist/UserDeniedAccessIcon-ZWVL6R4A.js +2 -0
- package/dist/UserDeniedAccessIcon-ZWVL6R4A.js.map +1 -0
- package/dist/UserGrantedAccessIcon-B3NLERNI.js +2 -0
- package/dist/UserGrantedAccessIcon-B3NLERNI.js.map +1 -0
- package/dist/VerifiedIcon-V47B7YEF.js +2 -0
- package/dist/VerifiedIcon-V47B7YEF.js.map +1 -0
- package/dist/Video-OHLCKWI4.js +2 -0
- package/dist/Video-OHLCKWI4.js.map +1 -0
- package/dist/ViewColumnIcon-643QS4QM.js +2 -0
- package/dist/ViewColumnIcon-643QS4QM.js.map +1 -0
- package/dist/VisaBadge-I4DM7OIR.js +2 -0
- package/dist/VisaBadge-I4DM7OIR.js.map +1 -0
- package/dist/VisaIcon-2MBUERWN.js +2 -0
- package/dist/VisaIcon-2MBUERWN.js.map +1 -0
- package/dist/Wallet03SolidRounded-OJOGIKTN.js +2 -0
- package/dist/Wallet03SolidRounded-OJOGIKTN.js.map +1 -0
- package/dist/WarehouseIcon-VHFQRYGZ.js +2 -0
- package/dist/WarehouseIcon-VHFQRYGZ.js.map +1 -0
- package/dist/WarningTriangleSolidIcon-MOCG2TDP.js +2 -0
- package/dist/WarningTriangleSolidIcon-MOCG2TDP.js.map +1 -0
- package/dist/WaveFileIcon-NVDMI5CT.js +2 -0
- package/dist/WaveFileIcon-NVDMI5CT.js.map +1 -0
- package/dist/WhatsappButtonIcon-YFJJN4Y3.js +2 -0
- package/dist/WhatsappButtonIcon-YFJJN4Y3.js.map +1 -0
- package/dist/WithdrawIcon-7EJAE26Q.js +2 -0
- package/dist/WithdrawIcon-7EJAE26Q.js.map +1 -0
- package/dist/Word-WP62OZHI.js +2 -0
- package/dist/Word-WP62OZHI.js.map +1 -0
- package/dist/Zip-DMOUO6UD.js +2 -0
- package/dist/Zip-DMOUO6UD.js.map +1 -0
- package/dist/ZoeAiIcon-T2NCFUE3.js +2 -0
- package/dist/ZoeAiIcon-T2NCFUE3.js.map +1 -0
- package/dist/ZydonIcon-G777IXYM.js +2 -0
- package/dist/ZydonIcon-G777IXYM.js.map +1 -0
- package/dist/ZydonPayIcon-CLINWXF5.js +2 -0
- package/dist/ZydonPayIcon-CLINWXF5.js.map +1 -0
- package/dist/brazil-TQ5YVZEI.js +2 -0
- package/dist/brazil-TQ5YVZEI.js.map +1 -0
- package/dist/chunk-23HPXWBG.js +6 -0
- package/dist/chunk-23HPXWBG.js.map +1 -0
- package/dist/chunk-2A3JEAR2.js +6 -0
- package/dist/chunk-2A3JEAR2.js.map +1 -0
- package/dist/chunk-2E3WI5RW.js +6 -0
- package/dist/chunk-2E3WI5RW.js.map +1 -0
- package/dist/chunk-2I3FMGM3.js +6 -0
- package/dist/chunk-2I3FMGM3.js.map +1 -0
- package/dist/chunk-2OSAD34A.js +6 -0
- package/dist/chunk-2OSAD34A.js.map +1 -0
- package/dist/chunk-2TEGEJGR.js +6 -0
- package/dist/chunk-2TEGEJGR.js.map +1 -0
- package/dist/chunk-2ZGXYB4B.js +6 -0
- package/dist/chunk-2ZGXYB4B.js.map +1 -0
- package/dist/chunk-34CI5VGF.js +6 -0
- package/dist/chunk-34CI5VGF.js.map +1 -0
- package/dist/chunk-35FR4FOA.js +6 -0
- package/dist/chunk-35FR4FOA.js.map +1 -0
- package/dist/chunk-36LUOVQV.js +6 -0
- package/dist/chunk-36LUOVQV.js.map +1 -0
- package/dist/chunk-3E2CZNAB.js +6 -0
- package/dist/chunk-3E2CZNAB.js.map +1 -0
- package/dist/chunk-3EFT6YSD.js +6 -0
- package/dist/chunk-3EFT6YSD.js.map +1 -0
- package/dist/chunk-3GJ5AP7R.js +6 -0
- package/dist/chunk-3GJ5AP7R.js.map +1 -0
- package/dist/chunk-3JN2ENSO.js +6 -0
- package/dist/chunk-3JN2ENSO.js.map +1 -0
- package/dist/chunk-3O6DQK2Y.js +6 -0
- package/dist/chunk-3O6DQK2Y.js.map +1 -0
- package/dist/chunk-3PF55BQ7.js +6 -0
- package/dist/chunk-3PF55BQ7.js.map +1 -0
- package/dist/chunk-3SPYJ5KY.js +6 -0
- package/dist/chunk-3SPYJ5KY.js.map +1 -0
- package/dist/chunk-3TBO3DSP.js +6 -0
- package/dist/chunk-3TBO3DSP.js.map +1 -0
- package/dist/chunk-3TJSB74Q.js +6 -0
- package/dist/chunk-3TJSB74Q.js.map +1 -0
- package/dist/{chunk-J5B2YJSR.js → chunk-3VT6LTJ7.js} +2 -2
- package/dist/chunk-3VYKHXMB.js +6 -0
- package/dist/chunk-3VYKHXMB.js.map +1 -0
- package/dist/{chunk-CBW32OUQ.js → chunk-437QYAEM.js} +2 -2
- package/dist/chunk-467QIKOJ.js +6 -0
- package/dist/chunk-467QIKOJ.js.map +1 -0
- package/dist/chunk-47GVGG4B.js +6 -0
- package/dist/chunk-47GVGG4B.js.map +1 -0
- package/dist/chunk-4B4SAKN4.js +6 -0
- package/dist/chunk-4B4SAKN4.js.map +1 -0
- package/dist/chunk-4HT344UK.js +6 -0
- package/dist/chunk-4HT344UK.js.map +1 -0
- package/dist/chunk-4PK45LZ6.js +6 -0
- package/dist/chunk-4PK45LZ6.js.map +1 -0
- package/dist/chunk-4XW2XJLH.js +6 -0
- package/dist/chunk-4XW2XJLH.js.map +1 -0
- package/dist/chunk-4XYO73JX.js +6 -0
- package/dist/chunk-4XYO73JX.js.map +1 -0
- package/dist/chunk-5GLDXPBY.js +6 -0
- package/dist/chunk-5GLDXPBY.js.map +1 -0
- package/dist/chunk-5NGWT3M5.js +6 -0
- package/dist/chunk-5NGWT3M5.js.map +1 -0
- package/dist/chunk-5P366VJV.js +6 -0
- package/dist/chunk-5P366VJV.js.map +1 -0
- package/dist/chunk-62MXETHC.js +6 -0
- package/dist/chunk-62MXETHC.js.map +1 -0
- package/dist/chunk-66NGYJR5.js +6 -0
- package/dist/chunk-66NGYJR5.js.map +1 -0
- package/dist/chunk-6HGX6PF6.js +6 -0
- package/dist/chunk-6HGX6PF6.js.map +1 -0
- package/dist/chunk-6MIB3Y74.js +6 -0
- package/dist/chunk-6MIB3Y74.js.map +1 -0
- package/dist/chunk-6Q272Q44.js +6 -0
- package/dist/chunk-6Q272Q44.js.map +1 -0
- package/dist/chunk-6VHOHMT5.js +6 -0
- package/dist/chunk-6VHOHMT5.js.map +1 -0
- package/dist/chunk-6VNI2SDX.js +6 -0
- package/dist/chunk-6VNI2SDX.js.map +1 -0
- package/dist/chunk-6YJXV77R.js +6 -0
- package/dist/chunk-6YJXV77R.js.map +1 -0
- package/dist/chunk-77GXDO2J.js +6 -0
- package/dist/chunk-77GXDO2J.js.map +1 -0
- package/dist/chunk-7ITH2BHN.js +6 -0
- package/dist/chunk-7ITH2BHN.js.map +1 -0
- package/dist/chunk-7JCS6XUD.js +6 -0
- package/dist/chunk-7JCS6XUD.js.map +1 -0
- package/dist/{chunk-DW6BOI43.js → chunk-7MUFLAMK.js} +2 -2
- package/dist/chunk-7NSBILAB.js +6 -0
- package/dist/chunk-7NSBILAB.js.map +1 -0
- package/dist/chunk-ABGWQJMQ.js +6 -0
- package/dist/chunk-ABGWQJMQ.js.map +1 -0
- package/dist/{chunk-Y6ZAN7C6.js → chunk-AFPC4CCM.js} +2 -2
- package/dist/chunk-AGR54T2W.js +6 -0
- package/dist/chunk-AGR54T2W.js.map +1 -0
- package/dist/chunk-AOYZX4RD.js +6 -0
- package/dist/chunk-AOYZX4RD.js.map +1 -0
- package/dist/chunk-AXS455TH.js +6 -0
- package/dist/chunk-AXS455TH.js.map +1 -0
- package/dist/chunk-B5AEISFL.js +6 -0
- package/dist/chunk-B5AEISFL.js.map +1 -0
- package/dist/chunk-BHGV4CYW.js +6 -0
- package/dist/chunk-BHGV4CYW.js.map +1 -0
- package/dist/chunk-BTVUQ4XU.js +6 -0
- package/dist/chunk-BTVUQ4XU.js.map +1 -0
- package/dist/chunk-BXJEICPS.js +6 -0
- package/dist/chunk-BXJEICPS.js.map +1 -0
- package/dist/chunk-CA3ERMCD.js +6 -0
- package/dist/chunk-CA3ERMCD.js.map +1 -0
- package/dist/{chunk-73YFRAEU.js → chunk-CAB6KNWY.js} +5 -5
- package/dist/chunk-CG5OVPIM.js +6 -0
- package/dist/chunk-CG5OVPIM.js.map +1 -0
- package/dist/{chunk-XMNDLI4A.js → chunk-CQBXYALD.js} +3 -3
- package/dist/chunk-CRWHTBBL.js +6 -0
- package/dist/chunk-CRWHTBBL.js.map +1 -0
- package/dist/chunk-DMC7LQ4N.js +6 -0
- package/dist/chunk-DMC7LQ4N.js.map +1 -0
- package/dist/chunk-DSQHDHEJ.js +6 -0
- package/dist/chunk-DSQHDHEJ.js.map +1 -0
- package/dist/chunk-DTZ47O5J.js +6 -0
- package/dist/chunk-DTZ47O5J.js.map +1 -0
- package/dist/chunk-DVN7YBAX.js +6 -0
- package/dist/chunk-DVN7YBAX.js.map +1 -0
- package/dist/chunk-E2XW3ALY.js +6 -0
- package/dist/chunk-E2XW3ALY.js.map +1 -0
- package/dist/chunk-EAYBPL7I.js +6 -0
- package/dist/chunk-EAYBPL7I.js.map +1 -0
- package/dist/chunk-EDZ6ZOEL.js +6 -0
- package/dist/chunk-EDZ6ZOEL.js.map +1 -0
- package/dist/chunk-EKZYDHUV.js +6 -0
- package/dist/chunk-EKZYDHUV.js.map +1 -0
- package/dist/chunk-EVCYTUOO.js +6 -0
- package/dist/chunk-EVCYTUOO.js.map +1 -0
- package/dist/chunk-FGIQXYQH.js +6 -0
- package/dist/chunk-FGIQXYQH.js.map +1 -0
- package/dist/chunk-FIUVFX7R.js +6 -0
- package/dist/chunk-FIUVFX7R.js.map +1 -0
- package/dist/chunk-FJYFLKYT.js +6 -0
- package/dist/chunk-FJYFLKYT.js.map +1 -0
- package/dist/chunk-FUVYZQLW.js +6 -0
- package/dist/chunk-FUVYZQLW.js.map +1 -0
- package/dist/chunk-FZEGQP3E.js +6 -0
- package/dist/chunk-FZEGQP3E.js.map +1 -0
- package/dist/{chunk-M7AU7VPZ.js → chunk-G2JHTPSE.js} +2 -2
- package/dist/chunk-GFCDZMNY.js +6 -0
- package/dist/chunk-GFCDZMNY.js.map +1 -0
- package/dist/chunk-GI2Q5ZKI.js +6 -0
- package/dist/chunk-GI2Q5ZKI.js.map +1 -0
- package/dist/chunk-GNE65ADW.js +6 -0
- package/dist/chunk-GNE65ADW.js.map +1 -0
- package/dist/chunk-GVWYETWT.js +6 -0
- package/dist/chunk-GVWYETWT.js.map +1 -0
- package/dist/chunk-HNQ253ZD.js +7 -0
- package/dist/chunk-HNQ253ZD.js.map +1 -0
- package/dist/{chunk-3PMDTIVB.js → chunk-HVOXV2ZU.js} +2 -2
- package/dist/chunk-HWADDMHQ.js +6 -0
- package/dist/chunk-HWADDMHQ.js.map +1 -0
- package/dist/chunk-I3JOQYPX.js +6 -0
- package/dist/chunk-I3JOQYPX.js.map +1 -0
- package/dist/chunk-I65NZFOS.js +6 -0
- package/dist/chunk-I65NZFOS.js.map +1 -0
- package/dist/{chunk-R2BCPHRH.js → chunk-IAUY4JGB.js} +2 -2
- package/dist/chunk-IPCUGUUQ.js +6 -0
- package/dist/chunk-IPCUGUUQ.js.map +1 -0
- package/dist/chunk-IPKFFCW7.js +6 -0
- package/dist/chunk-IPKFFCW7.js.map +1 -0
- package/dist/chunk-ISPMY4EO.js +6 -0
- package/dist/chunk-ISPMY4EO.js.map +1 -0
- package/dist/chunk-ISUBGMY4.js +6 -0
- package/dist/chunk-ISUBGMY4.js.map +1 -0
- package/dist/{chunk-SYOUADDE.js → chunk-IWTQKOTE.js} +2 -2
- package/dist/{chunk-XI3ZEBE3.js → chunk-IXUBDPJH.js} +2 -2
- package/dist/chunk-J5CCDUEI.js +6 -0
- package/dist/chunk-J5CCDUEI.js.map +1 -0
- package/dist/chunk-J5KDPAWP.js +6 -0
- package/dist/chunk-J5KDPAWP.js.map +1 -0
- package/dist/{chunk-ZLPEDESQ.js → chunk-JCUZG6H4.js} +3 -3
- package/dist/chunk-JDYJQJDC.js +6 -0
- package/dist/chunk-JDYJQJDC.js.map +1 -0
- package/dist/chunk-JYHFX7VQ.js +6 -0
- package/dist/chunk-JYHFX7VQ.js.map +1 -0
- package/dist/chunk-K36XVEPZ.js +6 -0
- package/dist/chunk-K36XVEPZ.js.map +1 -0
- package/dist/chunk-KC5WXOCZ.js +6 -0
- package/dist/chunk-KC5WXOCZ.js.map +1 -0
- package/dist/chunk-KECDPJAX.js +6 -0
- package/dist/chunk-KECDPJAX.js.map +1 -0
- package/dist/chunk-KFSNHVPI.js +6 -0
- package/dist/chunk-KFSNHVPI.js.map +1 -0
- package/dist/chunk-KIUSOVMC.js +6 -0
- package/dist/chunk-KIUSOVMC.js.map +1 -0
- package/dist/chunk-KJNTTEAK.js +6 -0
- package/dist/chunk-KJNTTEAK.js.map +1 -0
- package/dist/chunk-KP4SEXGX.js +6 -0
- package/dist/chunk-KP4SEXGX.js.map +1 -0
- package/dist/chunk-L3CADPDV.js +7 -0
- package/dist/chunk-L3CADPDV.js.map +1 -0
- package/dist/chunk-L3YFWYLR.js +6 -0
- package/dist/chunk-L3YFWYLR.js.map +1 -0
- package/dist/chunk-L4BJKCBQ.js +6 -0
- package/dist/chunk-L4BJKCBQ.js.map +1 -0
- package/dist/chunk-LA3IVJH3.js +6 -0
- package/dist/chunk-LA3IVJH3.js.map +1 -0
- package/dist/chunk-LAW2SJKD.js +6 -0
- package/dist/chunk-LAW2SJKD.js.map +1 -0
- package/dist/chunk-LAXL2FZH.js +6 -0
- package/dist/chunk-LAXL2FZH.js.map +1 -0
- package/dist/chunk-LECYUASO.js +6 -0
- package/dist/chunk-LECYUASO.js.map +1 -0
- package/dist/chunk-LFFKQ5UY.js +6 -0
- package/dist/chunk-LFFKQ5UY.js.map +1 -0
- package/dist/{chunk-PSG5JWK7.js → chunk-LFWPNKUM.js} +2 -2
- package/dist/chunk-LQ2SLABO.js +6 -0
- package/dist/chunk-LQ2SLABO.js.map +1 -0
- package/dist/chunk-M22MNKOD.js +6 -0
- package/dist/chunk-M22MNKOD.js.map +1 -0
- package/dist/chunk-MAQJHBRG.js +6 -0
- package/dist/chunk-MAQJHBRG.js.map +1 -0
- package/dist/{chunk-EN24URDV.js → chunk-MHQKQ4VE.js} +2 -2
- package/dist/{chunk-DGO4CLGJ.js → chunk-MMOGWTW7.js} +2 -2
- package/dist/chunk-N3QD4762.js +6 -0
- package/dist/chunk-N3QD4762.js.map +1 -0
- package/dist/chunk-N63KFRAE.js +6 -0
- package/dist/chunk-N63KFRAE.js.map +1 -0
- package/dist/{chunk-XQZPUMVQ.js → chunk-NIT26MGD.js} +2 -2
- package/dist/{chunk-NAGBHM6W.js → chunk-NJ55GFRA.js} +2 -2
- package/dist/{chunk-AYUKIKNC.js → chunk-NWT5TUJO.js} +2 -2
- package/dist/chunk-NY7OH64D.js +6 -0
- package/dist/chunk-NY7OH64D.js.map +1 -0
- package/dist/chunk-O5AVZ4XZ.js +6 -0
- package/dist/chunk-O5AVZ4XZ.js.map +1 -0
- package/dist/chunk-PANXFSBJ.js +6 -0
- package/dist/chunk-PANXFSBJ.js.map +1 -0
- package/dist/chunk-PB74EKXH.js +6 -0
- package/dist/chunk-PB74EKXH.js.map +1 -0
- package/dist/chunk-PE4NNNW3.js +6 -0
- package/dist/chunk-PE4NNNW3.js.map +1 -0
- package/dist/chunk-PEVNYPIT.js +6 -0
- package/dist/chunk-PEVNYPIT.js.map +1 -0
- package/dist/chunk-PGPNLB6H.js +6 -0
- package/dist/chunk-PGPNLB6H.js.map +1 -0
- package/dist/chunk-PPJJQFNS.js +6 -0
- package/dist/chunk-PPJJQFNS.js.map +1 -0
- package/dist/{chunk-J5XGGHQ7.js → chunk-QBKRR7YK.js} +2 -2
- package/dist/chunk-QGXUR7SS.js +6 -0
- package/dist/chunk-QGXUR7SS.js.map +1 -0
- package/dist/chunk-QLECZZYA.js +6 -0
- package/dist/chunk-QLECZZYA.js.map +1 -0
- package/dist/chunk-QNXYDH4Z.js +6 -0
- package/dist/chunk-QNXYDH4Z.js.map +1 -0
- package/dist/chunk-QOPUYMDW.js +6 -0
- package/dist/chunk-QOPUYMDW.js.map +1 -0
- package/dist/chunk-R4BWG6IP.js +6 -0
- package/dist/chunk-R4BWG6IP.js.map +1 -0
- package/dist/chunk-RCVDECZO.js +6 -0
- package/dist/chunk-RCVDECZO.js.map +1 -0
- package/dist/chunk-REVEMW2Z.js +6 -0
- package/dist/chunk-REVEMW2Z.js.map +1 -0
- package/dist/chunk-RG3WUQ4U.js +6 -0
- package/dist/chunk-RG3WUQ4U.js.map +1 -0
- package/dist/chunk-RMM5IYNJ.js +6 -0
- package/dist/chunk-RMM5IYNJ.js.map +1 -0
- package/dist/chunk-RP27UYVF.js +6 -0
- package/dist/chunk-RP27UYVF.js.map +1 -0
- package/dist/{chunk-BS4IU5BG.js → chunk-RX46STPN.js} +3 -3
- package/dist/chunk-SQ3T74SK.js +6 -0
- package/dist/chunk-SQ3T74SK.js.map +1 -0
- package/dist/chunk-SQKLWJ23.js +6 -0
- package/dist/chunk-SQKLWJ23.js.map +1 -0
- package/dist/chunk-SRI4ERT7.js +6 -0
- package/dist/chunk-SRI4ERT7.js.map +1 -0
- package/dist/chunk-STILB7RV.js +6 -0
- package/dist/chunk-STILB7RV.js.map +1 -0
- package/dist/chunk-SWQTSSZB.js +6 -0
- package/dist/chunk-SWQTSSZB.js.map +1 -0
- package/dist/chunk-T3IMQCA4.js +6 -0
- package/dist/chunk-T3IMQCA4.js.map +1 -0
- package/dist/chunk-TF7C2MZM.js +6 -0
- package/dist/chunk-TF7C2MZM.js.map +1 -0
- package/dist/chunk-TJDQSDGI.js +6 -0
- package/dist/chunk-TJDQSDGI.js.map +1 -0
- package/dist/chunk-TP556MUN.js +6 -0
- package/dist/chunk-TP556MUN.js.map +1 -0
- package/dist/{chunk-PBLSVXV5.js → chunk-TPOL2YXC.js} +2 -2
- package/dist/chunk-TPOL2YXC.js.map +1 -0
- package/dist/chunk-U4CAICN5.js +6 -0
- package/dist/chunk-U4CAICN5.js.map +1 -0
- package/dist/chunk-UALPBWPM.js +6 -0
- package/dist/chunk-UALPBWPM.js.map +1 -0
- package/dist/chunk-UK2F7TWJ.js +166 -0
- package/dist/chunk-UK2F7TWJ.js.map +1 -0
- package/dist/chunk-UVBYI6Q4.js +6 -0
- package/dist/chunk-UVBYI6Q4.js.map +1 -0
- package/dist/chunk-UVPHAGRR.js +6 -0
- package/dist/chunk-UVPHAGRR.js.map +1 -0
- package/dist/chunk-VJXZF4JZ.js +6 -0
- package/dist/chunk-VJXZF4JZ.js.map +1 -0
- package/dist/chunk-VQGBKDR7.js +6 -0
- package/dist/chunk-VQGBKDR7.js.map +1 -0
- package/dist/chunk-VS3HUF6I.js +6 -0
- package/dist/chunk-VS3HUF6I.js.map +1 -0
- package/dist/chunk-VV3FVOPK.js +6 -0
- package/dist/chunk-VV3FVOPK.js.map +1 -0
- package/dist/chunk-VXLXFRSL.js +6 -0
- package/dist/chunk-VXLXFRSL.js.map +1 -0
- package/dist/chunk-VXTPFEPK.js +6 -0
- package/dist/chunk-VXTPFEPK.js.map +1 -0
- package/dist/chunk-VZQQHRES.js +6 -0
- package/dist/chunk-VZQQHRES.js.map +1 -0
- package/dist/{chunk-CKCNZJL6.js → chunk-VZVY6HGD.js} +2 -2
- package/dist/chunk-W6CDOZMZ.js +6 -0
- package/dist/chunk-W6CDOZMZ.js.map +1 -0
- package/dist/chunk-W6OLLGA5.js +6 -0
- package/dist/chunk-W6OLLGA5.js.map +1 -0
- package/dist/chunk-WBTIOMTF.js +6 -0
- package/dist/chunk-WBTIOMTF.js.map +1 -0
- package/dist/chunk-WENSCH6W.js +6 -0
- package/dist/chunk-WENSCH6W.js.map +1 -0
- package/dist/chunk-WO6NCPDR.js +6 -0
- package/dist/chunk-WO6NCPDR.js.map +1 -0
- package/dist/chunk-WU5EGX2L.js +6 -0
- package/dist/chunk-WU5EGX2L.js.map +1 -0
- package/dist/chunk-XBXD5FTK.js +6 -0
- package/dist/chunk-XBXD5FTK.js.map +1 -0
- package/dist/chunk-XC42LUQQ.js +6 -0
- package/dist/chunk-XC42LUQQ.js.map +1 -0
- package/dist/chunk-XT2VU2IS.js +6 -0
- package/dist/chunk-XT2VU2IS.js.map +1 -0
- package/dist/chunk-YRPX7STA.js +6 -0
- package/dist/chunk-YRPX7STA.js.map +1 -0
- package/dist/chunk-YYABA4NC.js +6 -0
- package/dist/chunk-YYABA4NC.js.map +1 -0
- package/dist/chunk-YYGFBIXE.js +6 -0
- package/dist/chunk-YYGFBIXE.js.map +1 -0
- package/dist/chunk-ZCXQFAMG.js +6 -0
- package/dist/chunk-ZCXQFAMG.js.map +1 -0
- package/dist/chunk-ZHHHHVP3.js +6 -0
- package/dist/chunk-ZHHHHVP3.js.map +1 -0
- package/dist/chunk-ZZYKPI33.js +6 -0
- package/dist/chunk-ZZYKPI33.js.map +1 -0
- package/dist/components/ActionButton/index.js +159 -3
- package/dist/components/Analytics/OverviewAnalytics/index.js +164 -8
- package/dist/components/Analytics/OverviewAnalytics/index.js.map +1 -1
- package/dist/components/Analytics/PartnerAnalysis/index.js +163 -7
- package/dist/components/Analytics/PartnerAnalysis/index.js.map +1 -1
- package/dist/components/Analytics/index.js +162 -6
- package/dist/components/Analytics/index.js.map +1 -1
- package/dist/components/Autocomplete/index.js +159 -3
- package/dist/components/AvatarButton/index.js +160 -4
- package/dist/components/AvatarButton/index.js.map +1 -1
- package/dist/components/BuilderLayout/index.js +159 -3
- package/dist/components/BuilderLayout/index.js.map +1 -1
- package/dist/components/BuilderSidebar/index.js +158 -2
- package/dist/components/BuilderSidebar/index.js.map +1 -1
- package/dist/components/BulkEditModal/index.js +160 -4
- package/dist/components/BulkEditModal/index.js.map +1 -1
- package/dist/components/CardBrand/index.js +158 -2
- package/dist/components/CardBrand/index.js.map +1 -1
- package/dist/components/Common/index.js +160 -4
- package/dist/components/Common/index.js.map +1 -1
- package/dist/components/CopyButton/index.js +159 -3
- package/dist/components/DataView/index.js +160 -4
- package/dist/components/DragButton/index.js +159 -3
- package/dist/components/Drawer/index.js +159 -3
- package/dist/components/DynamicDataView/index.js +162 -6
- package/dist/components/DynamicDataView/index.js.map +1 -1
- package/dist/components/EasyCropModal/index.js +160 -4
- package/dist/components/Error/index.js +158 -2
- package/dist/components/Error/index.js.map +1 -1
- package/dist/components/ExpandableGroup/index.js +158 -2
- package/dist/components/ExpandableGroup/index.js.map +1 -1
- package/dist/components/FileUpload/index.js +163 -7
- package/dist/components/Filters/index.js +160 -4
- package/dist/components/Filters/index.js.map +1 -1
- package/dist/components/FrameSkeleton/index.js +158 -2
- package/dist/components/FrameSkeleton/index.js.map +1 -1
- package/dist/components/HelpButton/index.js +159 -3
- package/dist/components/Icon/index.js +158 -2
- package/dist/components/IconButton/index.js +159 -3
- package/dist/components/IconLazy/index.d.ts +13 -0
- package/dist/components/IconLazy/index.js +10 -0
- package/dist/components/IconLazy/index.js.map +1 -0
- package/dist/components/ImageCropModal/index.js +159 -3
- package/dist/components/ImageCropModal/index.js.map +1 -1
- package/dist/components/Incrementer/index.js +159 -3
- package/dist/components/InfoCircle/index.js +159 -3
- package/dist/components/ListBundles/index.js +159 -3
- package/dist/components/ListBundles/index.js.map +1 -1
- package/dist/components/MenuItem/index.js +158 -2
- package/dist/components/MenuItem/index.js.map +1 -1
- package/dist/components/Modal/index.js +159 -3
- package/dist/components/MoreMenu/index.js +158 -2
- package/dist/components/MoreMenu/index.js.map +1 -1
- package/dist/components/NotFound/index.js +158 -2
- package/dist/components/NotFound/index.js.map +1 -1
- package/dist/components/PasswordRules/index.js +158 -2
- package/dist/components/PasswordRules/index.js.map +1 -1
- package/dist/components/PopoverSelect/index.js +158 -2
- package/dist/components/PopoverSelect/index.js.map +1 -1
- package/dist/components/SearchInput/index.js +159 -3
- package/dist/components/SelectList/index.js +161 -5
- package/dist/components/SelectableCards/index.js +160 -4
- package/dist/components/SeoPreview/index.js +158 -2
- package/dist/components/SeoPreview/index.js.map +1 -1
- package/dist/components/StateDisplay/index.js +159 -3
- package/dist/components/Steps/index.js +158 -2
- package/dist/components/Steps/index.js.map +1 -1
- package/dist/components/StyledTab/index.js +158 -2
- package/dist/components/StyledTab/index.js.map +1 -1
- package/dist/components/SwapList/index.js +159 -3
- package/dist/components/SwapList/index.js.map +1 -1
- package/dist/components/ToggleTheme/index.js +2 -2
- package/dist/components/WebhookCard/index.js +158 -2
- package/dist/components/WebhookCard/index.js.map +1 -1
- package/dist/components/carousel/index.js +159 -3
- package/dist/components/form/Address/index.js +161 -5
- package/dist/components/form/Address/index.js.map +1 -1
- package/dist/components/form/Autocomplete/index.js +160 -4
- package/dist/components/form/FileUpload/index.js +163 -7
- package/dist/components/form/FileUpload/index.js.map +1 -1
- package/dist/components/form/Incrementer/index.js +159 -3
- package/dist/components/form/Incrementer/index.js.map +1 -1
- package/dist/components/form/Password/index.js +158 -2
- package/dist/components/form/Password/index.js.map +1 -1
- package/dist/components/form/SelectList/index.js +161 -5
- package/dist/components/form/SelectList/index.js.map +1 -1
- package/dist/components/form/SelectableCards/index.js +160 -4
- package/dist/components/form/SelectableCards/index.js.map +1 -1
- package/dist/components/form/Webhook/index.js +161 -5
- package/dist/components/form/Webhook/index.js.map +1 -1
- package/dist/components/lightbox/index.js +158 -2
- package/dist/components/lightbox/index.js.map +1 -1
- package/dist/components/table/index.js +159 -3
- package/dist/components/table/index.js.map +1 -1
- package/dist/hooks/useThemeToggle.js +2 -2
- package/dist/index.js +2 -2
- package/dist/theme/theme-provider.js +2 -2
- package/dist/types/icon.d.ts +1 -0
- package/dist/types/icon.js +1 -1
- package/dist/usa-2UKYSJ5Q.js +2 -0
- package/dist/usa-2UKYSJ5Q.js.map +1 -0
- package/package.json +1 -1
- package/dist/chunk-2GTD4JW2.js +0 -11
- package/dist/chunk-2GTD4JW2.js.map +0 -1
- package/dist/chunk-PBLSVXV5.js.map +0 -1
- /package/dist/{chunk-J5B2YJSR.js.map → chunk-3VT6LTJ7.js.map} +0 -0
- /package/dist/{chunk-CBW32OUQ.js.map → chunk-437QYAEM.js.map} +0 -0
- /package/dist/{chunk-DW6BOI43.js.map → chunk-7MUFLAMK.js.map} +0 -0
- /package/dist/{chunk-Y6ZAN7C6.js.map → chunk-AFPC4CCM.js.map} +0 -0
- /package/dist/{chunk-73YFRAEU.js.map → chunk-CAB6KNWY.js.map} +0 -0
- /package/dist/{chunk-XMNDLI4A.js.map → chunk-CQBXYALD.js.map} +0 -0
- /package/dist/{chunk-M7AU7VPZ.js.map → chunk-G2JHTPSE.js.map} +0 -0
- /package/dist/{chunk-3PMDTIVB.js.map → chunk-HVOXV2ZU.js.map} +0 -0
- /package/dist/{chunk-R2BCPHRH.js.map → chunk-IAUY4JGB.js.map} +0 -0
- /package/dist/{chunk-SYOUADDE.js.map → chunk-IWTQKOTE.js.map} +0 -0
- /package/dist/{chunk-XI3ZEBE3.js.map → chunk-IXUBDPJH.js.map} +0 -0
- /package/dist/{chunk-ZLPEDESQ.js.map → chunk-JCUZG6H4.js.map} +0 -0
- /package/dist/{chunk-PSG5JWK7.js.map → chunk-LFWPNKUM.js.map} +0 -0
- /package/dist/{chunk-EN24URDV.js.map → chunk-MHQKQ4VE.js.map} +0 -0
- /package/dist/{chunk-DGO4CLGJ.js.map → chunk-MMOGWTW7.js.map} +0 -0
- /package/dist/{chunk-XQZPUMVQ.js.map → chunk-NIT26MGD.js.map} +0 -0
- /package/dist/{chunk-NAGBHM6W.js.map → chunk-NJ55GFRA.js.map} +0 -0
- /package/dist/{chunk-AYUKIKNC.js.map → chunk-NWT5TUJO.js.map} +0 -0
- /package/dist/{chunk-J5XGGHQ7.js.map → chunk-QBKRR7YK.js.map} +0 -0
- /package/dist/{chunk-BS4IU5BG.js.map → chunk-RX46STPN.js.map} +0 -0
- /package/dist/{chunk-CKCNZJL6.js.map → chunk-VZVY6HGD.js.map} +0 -0
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"sources":["../../../src/components/DynamicDataView/DynamicDataView.tsx","../../../src/components/DynamicDataView/components/FilterButton.tsx","../../../src/components/DynamicDataView/components/FiltersSection.tsx","../../../src/components/DynamicDataView/components/filters/FiltersContainer.tsx","../../../src/components/DynamicDataView/components/filters/FiltersContent.tsx","../../../src/components/DynamicDataView/utils/filter.ts","../../../src/components/DynamicDataView/components/filters/FiltersList.tsx","../../../src/components/DynamicDataView/components/filters/FilterRow.tsx","../../../src/components/DynamicDataView/constants/filter.ts","../../../src/components/DynamicDataView/components/filters/EntityFilter.tsx","../../../src/components/DynamicDataView/components/filters/OperatorSelect.tsx","../../../src/components/DynamicDataView/components/filters/styles.ts","../../../src/components/DynamicDataView/components/SortModal/index.tsx","../../../src/components/DynamicDataView/components/SortModal/style.ts","../../../src/components/DynamicDataView/hooks/useColumnOrdering.ts","../../../src/components/DynamicDataView/hooks/useColumnVisibility.ts","../../../src/components/DynamicDataView/hooks/useDynamicColumns.ts","../../../src/components/DynamicDataView/constants/columnDefaults.ts","../../../src/components/DynamicDataView/utils/columnStrategies.ts","../../../src/components/DynamicDataView/hooks/useFilters.ts","../../../src/components/DynamicDataView/hooks/useFilterSortStorage.ts","../../../src/components/DynamicDataView/hooks/useSorting.ts","../../../src/components/DynamicDataView/utils/addActionsField.ts","../../../src/components/DynamicDataView/renderers/DateRenderer.ts","../../../src/components/DynamicDataView/renderers/DateTimeRenderer.ts","../../../src/components/DynamicDataView/renderers/EntityRenderer.tsx","../../../src/components/DynamicDataView/renderers/IconRenderer.tsx","../../../src/components/DynamicDataView/renderers/ImageRenderer.tsx","../../../src/components/DynamicDataView/renderers/style.ts","../../../src/components/DynamicDataView/renderers/NameRenderer.tsx","../../../src/components/DynamicDataView/renderers/NumberRenderer.tsx","../../../src/components/DynamicDataView/renderers/StatusRenderer.tsx","../../../src/components/DynamicDataView/renderers/TextRenderer.tsx","../../../src/components/DynamicDataView/utils/createCellRenderer.tsx","../../../src/components/DynamicDataView/utils/fields.ts"],"names":["memo","useCallback","useMemo","useState","isEqual","Badge","Button","IconButton","Stack","jsx","jsxs","FilterButton","showFilterButton","isMobile","hasActiveFilters","activeFiltersCount","sort","onFilterClick","onSortClick","Icon_default","ToolbarActionsDivider","FilterButton_default","Divider","Typography","getFilterableFields","fields","field","getDefaultCondition","type","available_filter_conditions","isValidCondition","condition","buildFilterFromConditions","conditions","validConditions","c","FormControl","InputLabel","MenuItem","Select","TextField","CONDITION_LABELS","EntityFilter","config","metadata","value","initialLabel","onChange","disabled","open","toggleOpen","setOpen","useToggle_default","inputValue","setInputValue","debouncedSearch","useDebounceValue_default","data","isLoading","isFetching","loading","selectedOption","options","items","item","opt","handleClose","handleChange","newValue","option","handleInputChange","_event","newInputValue","reason","Autocomplete_default","x","EntityFilter_default","OperatorSelect","totalConditions","isFirst","e","OperatorSelect_default","ellipsisStyle","FilterRow","onRemove","entityFilterConfig","selectedField","f","availableConditions","isValueDisabled","handleFieldChange","fieldName","newField","defaultCondition","handleConditionChange","conditional","handleValueChange","handleEntityValueChange","label","valueLabels","handleOperatorChange","operator","renderValueInput","currentValue","cond","FilterRow_default","Fragment","FiltersList","filterableFields","onUpdateCondition","onRemoveCondition","handleUpdateCondition","updated","handleRemoveCondition","id","usedFieldNames","name","getAvailableFields","currentFieldName","index","FiltersList_default","Box","styled","Container","Header","theme","Content","Footer","FiltersContent","onClose","onAddCondition","onApply","onClear","onCancel","hasConditions","handleApply","handleClear","handleCancel","FiltersContent_default","FiltersContainer","props","ResponsivePopover_default","FiltersContainer_default","FiltersSection","isOpen","filterAnchorEl","FiltersSection_default","useEffect","Dialog","DialogActions","DialogContent","DialogTitle","StyledDialog","StyledDialogTitle","StyledDialogContent","StyledDialogActions","ApplyButton","LabelButton","SortModal","onSortChange","setSelectedField","selectedDirection","setSelectedDirection","sortableFields","selectedFieldObj","isNumberField","SortModal_default","useColumnOrdering","columns","preferredFieldOrder","columnsByFieldId","column","fieldsByName","actionFieldName","preferredWithoutActions","usedColumnFieldIds","ordered","pushColumnForField","EMPTY_MODEL","useColumnVisibility","columnVisibilityStorageKey","onColumnVisibilityModelChange","hasStorageKey","storedVisibilityModel","setStoredVisibilityModel","useLocalStorage_default","columnVisibilityModel","handleColumnVisibilityModelChange","model","modelToSave","COLUMN_DEFAULTS","ACCESS_TYPES","CURRENCY_FIELD_NAMES","createImageColumn","renderCell","params","createIdColumn","createEntityColumn","createDefaultColumn","createActionsColumn","getColumnStrategy","useDynamicColumns","columnStrategies","columnsMap","useRef","parseInitialConditions","initialFilter","uuidv4","useFilters","setIsOpen","appliedConditions","setAppliedConditions","appliedFilter","setAppliedFilter","setConditions","snapshotRef","openDrawer","closeDrawer","addCondition","availableFields","currentOperator","firstField","newCondition","prev","updateCondition","changes","targetCondition","newOperator","removeCondition","clearAllFilters","applyFilters","filter","cancelChanges","getStoredValue","key","setStoredValue","useFilterStorage","storageKey","externalFilter","onFilterChange","filterKey","internalFilter","setInternalFilter","handleFilterChange","newFilter","useSortStorage","externalSort","sortKey","internalSort","setInternalSort","handleSortChange","newSort","resolveApiFieldName","resolveColumnFieldName","useSorting","sortModel","handleSortModelChange","firstItem","createActionsField","addActionsFieldToMetadata","DateRenderer","format","fDate","DateRenderer_default","DateTimeRenderer","fDateTime","DateTimeRenderer_default","Chip","EntityRenderer","entityValue","EntityRenderer_default","IconRenderer","trueIcon","falseIcon","color","width","IconRenderer_default","StatusLabel","isActive","ImageContainer","prop","size","noImage","clickable","ImageRenderer","imageResourceId","getImageUrl","alt","onClick","sx","hasImage","imageUrl","ImageRenderer_default","NameRenderer","displayName","copyMessage","CopyButton_default","NameRenderer_default","NumberRenderer","isCurrency","fCurrencyBRL","fNumber","NumberRenderer_default","StatusRenderer","active","activeLabel","inactiveLabel","StatusRenderer_default","sanitizeHtml","text","TextRenderer","showCopyButton","copyLabel","mask","stringValue","formattedValue","TextRenderer_default","getIsCurrency","createCellRenderer","context","onRowAction","CellRendererComponent","row","DynamicDataView","title","page","perPage","searchValue","onSearchChange","onSearch","onPaginationChange","onAdd","onRowDoubleClick","actions","moreActions","bulkActions","rowSelectionModel","onRowSelectionModelChange","slots","mobileRender","containerHeight","showColumnButton","rows","total","preloadedMetadata","firstRow","effectiveMetadata","effectiveMetadataFields","orderedColumns","handleRowDoubleClick","rowId","useResponsive_default","setFilterAnchorEl","storedFilter","setStoredFilter","storedSort","setStoredSort","effectiveFilter","effectiveSort","handleApplyFilters","handleClearFilters","handleFilterButtonClick","event","handleCancelFilters","isSortModalOpen","setIsSortModalOpen","handleFiltersClose","hasSelectionActions","DataView_default","DynamicDataView_default","buildVisibleFields","visible","a","b","rawA","rawB"],"mappings":"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","sourcesContent":["import { memo, useCallback, useMemo, useState } from 'react';\nimport isEqual from 'react-fast-compare';\nimport { AccessType, DataType } from 'model/entity-metadata';\n\nimport useResponsive from 'hooks/useResponsive';\n\nimport DataView from '../DataView';\n\nimport FilterButton from './components/FilterButton';\nimport FiltersSection from './components/FiltersSection';\nimport SortModal from './components/SortModal';\nimport { useColumnOrdering } from './hooks/useColumnOrdering';\nimport { useColumnVisibility } from './hooks/useColumnVisibility';\nimport { useDynamicColumns } from './hooks/useDynamicColumns';\nimport { useFilters } from './hooks/useFilters';\nimport { useFilterStorage, useSortStorage } from './hooks/useFilterSortStorage';\nimport { useSorting } from './hooks/useSorting';\nimport { addActionsFieldToMetadata } from './utils/addActionsField';\nimport { createCellRenderer } from './utils/createCellRenderer';\nimport { DynamicDataViewProps, DynamicRowData } from './props';\n\nconst DynamicDataView = <T extends object = object>({\n title,\n metadata,\n data,\n isLoading,\n isFetching,\n page,\n perPage,\n searchValue,\n onSearchChange,\n onSearch,\n onPaginationChange,\n onAdd,\n onRowAction,\n onRowDoubleClick,\n actions,\n moreActions,\n bulkActions,\n rowSelectionModel,\n onRowSelectionModelChange,\n slots,\n mobileRender,\n containerHeight = 600,\n showColumnButton = false,\n showFilterButton = false,\n filter,\n onFilterChange,\n sort,\n onSortChange,\n preferredFieldOrder,\n columnStrategies,\n onColumnVisibilityModelChange,\n storageKey,\n entityFilterConfig,\n}: DynamicDataViewProps<T>) => {\n const { items: rows = [], total = 0 } = data || {};\n\n // Criar metadata temporário baseado em data quando metadata não disponível\n const preloadedMetadata = useMemo(() => {\n if (metadata) return metadata;\n\n // Se não tem metadata mas tem dados, criar metadata baseado nas keys do primeiro item\n if (rows.length > 0) {\n const firstRow = rows[0];\n const fields = Object.keys(firstRow).map(key => ({\n name: key,\n type: DataType.TEXT,\n description: key,\n filter_field_name: null,\n metadata: null,\n access_type: AccessType.READ_ONLY,\n relation_field_name: null,\n available_filter_conditions: [],\n }));\n\n return {\n name: 'loading',\n description: 'Loading...',\n id_field_name: 'id',\n description_field_name: fields[0]?.name || 'id',\n access_type: AccessType.READ_ONLY,\n fields,\n };\n }\n\n return undefined;\n }, [metadata, rows]);\n\n const effectiveMetadata = useMemo(\n () =>\n preloadedMetadata && onRowAction\n ? addActionsFieldToMetadata(preloadedMetadata)\n : preloadedMetadata,\n [preloadedMetadata, onRowAction],\n );\n\n const effectiveMetadataFields = useMemo(\n () => effectiveMetadata?.fields || [],\n [effectiveMetadata],\n );\n\n const renderCell = useMemo(\n () =>\n createCellRenderer<T>({\n onRowAction,\n }),\n [onRowAction],\n );\n\n const columns = useDynamicColumns<T>({\n metadata: effectiveMetadata,\n renderCell,\n columnStrategies,\n });\n\n const { orderedColumns } = useColumnOrdering({\n columns,\n fields: effectiveMetadata?.fields,\n preferredFieldOrder,\n });\n\n const { columnVisibilityModel, handleColumnVisibilityModelChange } =\n useColumnVisibility({\n columnVisibilityStorageKey: `${storageKey}:columns`,\n onColumnVisibilityModelChange,\n });\n\n const handleRowDoubleClick = useCallback(\n (params: { id: string | number; row: DynamicRowData<T> }) => {\n if (!onRowDoubleClick) return;\n\n const rowId = params.id?.toString() || '';\n onRowDoubleClick(rowId, params.row);\n },\n [onRowDoubleClick],\n );\n\n const isMobile = useResponsive('down', 'md');\n const [filterAnchorEl, setFilterAnchorEl] = useState<HTMLElement | null>(\n null,\n );\n\n const { filter: storedFilter, setFilter: setStoredFilter } = useFilterStorage(\n storageKey,\n filter,\n onFilterChange,\n );\n\n const { sort: storedSort, setSort: setStoredSort } = useSortStorage(\n storageKey,\n sort,\n onSortChange,\n );\n\n const effectiveFilter = filter ?? storedFilter;\n const effectiveSort = sort ?? storedSort;\n\n const { sortModel, handleSortModelChange } = useSorting({\n sort: effectiveSort,\n onSortChange: setStoredSort,\n fields: effectiveMetadataFields,\n });\n\n const {\n conditions,\n isOpen,\n openDrawer,\n closeDrawer,\n addCondition,\n updateCondition,\n removeCondition,\n clearAllFilters,\n applyFilters,\n cancelChanges,\n hasActiveFilters,\n activeFiltersCount,\n } = useFilters({\n fields: effectiveMetadataFields,\n initialFilter: effectiveFilter,\n });\n\n const handleApplyFilters = useCallback(() => {\n const newFilter = applyFilters();\n setStoredFilter(newFilter);\n }, [applyFilters, setStoredFilter]);\n\n const handleClearFilters = useCallback(() => {\n clearAllFilters();\n setStoredFilter(undefined);\n }, [clearAllFilters, setStoredFilter]);\n\n const handleFilterButtonClick = useCallback(\n (event: React.MouseEvent<HTMLElement>) => {\n if (isMobile) {\n openDrawer();\n } else {\n openDrawer();\n setFilterAnchorEl(event.currentTarget);\n }\n },\n [isMobile, openDrawer],\n );\n\n const handleCancelFilters = useCallback(() => {\n cancelChanges();\n setFilterAnchorEl(null);\n }, [cancelChanges]);\n\n const [isSortModalOpen, setIsSortModalOpen] = useState(false);\n\n const handleFiltersClose = useCallback(() => {\n setFilterAnchorEl(null);\n closeDrawer();\n }, [closeDrawer]);\n const hasSelectionActions = !!bulkActions?.length;\n\n return (\n <>\n <DataView<DynamicRowData<T>>\n title={title}\n columns={orderedColumns}\n rows={rows}\n mobileRender={mobileRender}\n rowCount={total}\n loading={isLoading || !metadata}\n fetching={isFetching}\n searchValue={searchValue}\n onSearch={onSearch}\n onSearchChange={onSearchChange}\n paginationModel={{\n page,\n pageSize: perPage,\n }}\n onPaginationChange={onPaginationChange}\n actions={actions}\n moreActions={moreActions}\n onAdd={onAdd}\n onRowDoubleClick={onRowDoubleClick ? handleRowDoubleClick : undefined}\n bulkActions={bulkActions}\n checkboxSelection={hasSelectionActions}\n rowSelectionModel={rowSelectionModel}\n onRowSelectionModelChange={onRowSelectionModelChange}\n keepNonExistentRowsSelected={hasSelectionActions}\n disableRowSelectionOnClick\n slots={slots}\n columnVisibilityModel={columnVisibilityModel}\n showColumnButton={showColumnButton}\n containerProps={{\n height: containerHeight,\n maxHeight: containerHeight,\n }}\n onColumnVisibilityModelChange={handleColumnVisibilityModelChange}\n filterButton={\n <FilterButton\n showFilterButton={showFilterButton}\n isMobile={isMobile}\n hasActiveFilters={hasActiveFilters}\n activeFiltersCount={activeFiltersCount}\n sort={effectiveSort}\n onFilterClick={handleFilterButtonClick}\n onSortClick={() => setIsSortModalOpen(true)}\n />\n }\n sortingMode=\"server\"\n sortModel={sortModel}\n onSortModelChange={handleSortModelChange}\n disableColumnFilter\n />\n {metadata && (\n <>\n <FiltersSection\n showFilterButton={showFilterButton}\n isOpen={isOpen}\n filterAnchorEl={filterAnchorEl}\n fields={effectiveMetadataFields}\n conditions={conditions}\n isMobile={isMobile}\n onClose={handleFiltersClose}\n onAddCondition={addCondition}\n onUpdateCondition={updateCondition}\n onRemoveCondition={removeCondition}\n onApply={handleApplyFilters}\n onClear={handleClearFilters}\n onCancel={handleCancelFilters}\n entityFilterConfig={entityFilterConfig}\n />\n\n <SortModal\n open={isSortModalOpen}\n onClose={() => setIsSortModalOpen(false)}\n fields={effectiveMetadataFields}\n sort={effectiveSort}\n onSortChange={setStoredSort}\n />\n </>\n )}\n </>\n );\n};\n\nexport default memo(DynamicDataView, isEqual) as typeof DynamicDataView;\nexport type { DynamicDataViewProps, DynamicRowData } from './props';\n","import { memo } from 'react';\nimport isEqual from 'react-fast-compare';\nimport Badge from '@mui/material/Badge';\nimport Button from '@mui/material/Button';\nimport IconButton from '@mui/material/IconButton';\nimport Stack from '@mui/material/Stack';\n\nimport { ToolbarActionsDivider } from 'components/DataView';\nimport Icon from 'components/Icon';\n\nimport { FilterButtonProps } from '../props';\n\nconst FilterButton = ({\n showFilterButton,\n isMobile,\n hasActiveFilters,\n activeFiltersCount,\n sort,\n onFilterClick,\n onSortClick,\n}: FilterButtonProps) => {\n if (!showFilterButton) return null;\n\n if (isMobile) {\n return (\n <Stack direction=\"row\" spacing={0.5}>\n <Badge\n badgeContent={activeFiltersCount}\n color=\"primary\"\n invisible={activeFiltersCount === 0}\n sx={{\n '& .MuiBadge-badge': {\n transform: 'scale(0.9) translate(10px, 9px)',\n opacity: activeFiltersCount === 0 ? 0 : 1,\n },\n }}\n >\n <IconButton\n color={hasActiveFilters ? 'primary' : 'default'}\n onClick={onFilterClick}\n size=\"small\"\n aria-label=\"Filtrar\"\n sx={{ overflow: 'visible' }}\n >\n <Icon icon=\"FILTER_VERTICAL\" />\n </IconButton>\n </Badge>\n\n <ToolbarActionsDivider\n sx={{ height: 16 }}\n orientation=\"vertical\"\n flexItem\n />\n\n <IconButton\n color={sort ? 'primary' : 'default'}\n onClick={onSortClick}\n size=\"small\"\n aria-label=\"Ordenar\"\n >\n <Icon\n icon={sort?.sortType === 'DESC' ? 'SORTING_DESC' : 'SORTING_ASC'}\n />\n </IconButton>\n </Stack>\n );\n }\n\n return (\n <Badge\n badgeContent={activeFiltersCount}\n color=\"primary\"\n invisible={activeFiltersCount === 0}\n sx={{\n '& .MuiBadge-badge': activeFiltersCount\n ? {\n transform: 'scale(0.9) translate(-3px, 7px)',\n position: 'relative',\n opacity: 1,\n transition: 'none',\n }\n : {\n transition: 'none',\n opacity: 0,\n },\n }}\n >\n <Button\n variant=\"text\"\n color={hasActiveFilters ? 'primary' : 'inherit'}\n startIcon={<Icon icon=\"FILTER_VERTICAL\" />}\n onClick={onFilterClick}\n size=\"small\"\n >\n Filtrar\n </Button>\n </Badge>\n );\n};\n\nexport default memo(FilterButton, isEqual);\n","import { memo } from 'react';\nimport isEqual from 'react-fast-compare';\n\nimport { FiltersSectionProps } from '../props';\n\nimport FiltersContainer from './filters/FiltersContainer';\n\nconst FiltersSection = ({\n showFilterButton,\n isOpen,\n filterAnchorEl,\n fields,\n conditions,\n isMobile,\n onClose,\n onAddCondition,\n onUpdateCondition,\n onRemoveCondition,\n onApply,\n onClear,\n onCancel,\n entityFilterConfig,\n}: FiltersSectionProps) => {\n if (!showFilterButton) return null;\n\n return (\n <FiltersContainer\n open={isOpen || Boolean(filterAnchorEl)}\n anchorEl={filterAnchorEl}\n onClose={onClose}\n fields={fields}\n conditions={conditions}\n onAddCondition={onAddCondition}\n onUpdateCondition={onUpdateCondition}\n onRemoveCondition={onRemoveCondition}\n onApply={onApply}\n onClear={onClear}\n onCancel={onCancel}\n isMobileProp={isMobile}\n entityFilterConfig={entityFilterConfig}\n />\n );\n};\n\nexport default memo(FiltersSection, isEqual);\n","import { memo } from 'react';\nimport isEqual from 'react-fast-compare';\n\nimport ResponsivePopover from 'components/ResponsivePopover';\n\nimport FiltersContent from './FiltersContent';\nimport type { FiltersContainerProps } from './props';\n\nconst FiltersContainer = (props: FiltersContainerProps) => {\n return (\n <ResponsivePopover\n open={props.open}\n onClose={props.onClose}\n anchorEl={props.anchorEl}\n isMobile={props.isMobileProp}\n popoverProps={{\n slotProps: {\n paper: {\n sx: {\n width: 520,\n maxWidth: 'calc(100vw - 24px)',\n maxHeight: 600,\n mt: 1,\n },\n },\n },\n }}\n drawerProps={{\n anchor: 'right',\n PaperProps: {\n sx: {\n width: '100%',\n maxWidth: '100%',\n height: '100%',\n maxHeight: '100%',\n borderRadius: 0,\n },\n },\n }}\n >\n <FiltersContent {...props} />\n </ResponsivePopover>\n );\n};\n\nexport default memo(FiltersContainer, isEqual);\n","import { memo, useCallback } from 'react';\nimport isEqual from 'react-fast-compare';\nimport Button from '@mui/material/Button';\nimport Divider from '@mui/material/Divider';\nimport IconButton from '@mui/material/IconButton';\nimport Stack from '@mui/material/Stack';\nimport Typography from '@mui/material/Typography';\n\nimport Icon from 'components/Icon';\n\nimport { getFilterableFields } from '../../utils/filter';\n\nimport FiltersList from './FiltersList';\nimport type { FiltersPopoverProps } from './props';\nimport { Container, Content, Footer, Header } from './styles';\n\nconst FiltersContent = ({\n onClose,\n fields,\n conditions,\n onAddCondition,\n onUpdateCondition,\n onRemoveCondition,\n onApply,\n onClear,\n onCancel,\n entityFilterConfig,\n}: FiltersPopoverProps) => {\n const filterableFields = getFilterableFields(fields);\n const hasConditions = conditions.length > 0;\n\n const handleApply = useCallback(() => {\n onApply();\n onClose();\n }, [onApply, onClose]);\n\n const handleClear = useCallback(() => {\n onClear();\n onClose();\n }, [onClear, onClose]);\n\n const handleCancel = useCallback(() => {\n onCancel();\n }, [onCancel]);\n\n return (\n <Container>\n <Header>\n <Typography variant=\"overline\" fontWeight={600} color=\"text.secondary\">\n Defina as condições para filtrar\n </Typography>\n\n <IconButton\n onClick={onAddCondition}\n size=\"small\"\n aria-label=\"Adicionar filtro\"\n title=\"Adicionar filtro\"\n disabled={conditions.length >= filterableFields.length}\n >\n <Icon icon=\"SIMPLE_ADD\" />\n </IconButton>\n </Header>\n\n <Divider />\n\n <Content>\n <FiltersList\n filterableFields={filterableFields}\n conditions={conditions}\n onUpdateCondition={onUpdateCondition}\n onRemoveCondition={onRemoveCondition}\n entityFilterConfig={entityFilterConfig}\n />\n </Content>\n\n <Divider />\n\n <Footer>\n <Button variant=\"text\" color=\"inherit\" onClick={handleClear}>\n Limpar\n </Button>\n\n <Stack direction=\"row\" spacing={1}>\n <Button\n variant=\"outlined\"\n color=\"inherit\"\n onClick={handleCancel}\n startIcon={<Icon icon=\"CANCEL_CIRCLE\" />}\n >\n Cancelar\n </Button>\n <Button\n variant=\"contained\"\n onClick={handleApply}\n disabled={!hasConditions}\n startIcon={<Icon icon=\"SIMPLE_CHECK\" />}\n >\n Aplicar\n </Button>\n </Stack>\n </Footer>\n </Container>\n );\n};\n\nexport default memo(FiltersContent, isEqual);\n","import { Condition, DataType, Field } from 'model/entity-metadata';\nimport {\n Filter,\n FilterCondition,\n FilterOperator,\n FilterState,\n} from 'model/filter';\n\n/**\n * Campos filtráveis (campos com condições disponíveis)\n */\nexport const getFilterableFields = (fields: Field[]): Field[] => {\n return fields.filter(\n field =>\n field.available_filter_conditions &&\n field.available_filter_conditions.length > 0 &&\n field.name !== 'ACTIONS',\n );\n};\n\n/**\n * Converte FilterState para formato de API\n */\nexport const buildFilterFromState = (\n state: FilterState,\n): Filter | undefined => {\n const entries = Object.entries(state).filter(\n ([, value]) => value.value.length > 0,\n );\n if (entries.length === 0) return undefined;\n return {\n operator: FilterOperator.AND,\n groups: [\n {\n operator: FilterOperator.AND,\n conditionals: entries.map(([, filterValue]) => ({\n fieldName: filterValue.fieldName,\n conditional: filterValue.conditional,\n value: filterValue.value,\n })),\n },\n ],\n };\n};\n\n/**\n * Retorna o conditional padrão para um tipo de campo\n */\nexport const getDefaultCondition = (field: Field): Condition => {\n const { type, available_filter_conditions } = field;\n if (available_filter_conditions.length === 0) return Condition.EQUALS;\n if (\n type === DataType.TEXT &&\n available_filter_conditions.includes(Condition.LIKE)\n ) {\n return Condition.LIKE;\n }\n return available_filter_conditions[0];\n};\n\n/**\n * Verifica se uma condição é válida (tem valor ou não requer valor)\n */\nexport const isValidCondition = (condition: FilterCondition): boolean => {\n return (\n condition.value.length > 0 ||\n condition.conditional === Condition.IS_NULL ||\n condition.conditional === Condition.IS_NOT_NULL\n );\n};\n\n/**\n * Converte array de FilterCondition para Filter API\n */\nexport const buildFilterFromConditions = (\n conditions: FilterCondition[],\n): Filter | undefined => {\n if (conditions.length === 0) return undefined;\n\n const validConditions = conditions.filter(isValidCondition);\n if (validConditions.length === 0) return undefined;\n\n return {\n operator: FilterOperator.AND,\n groups: [\n {\n operator: validConditions[0]?.operator || FilterOperator.AND,\n conditionals: validConditions.map(c => ({\n fieldName: c.fieldName,\n conditional: c.conditional,\n value: c.value,\n valueLabels: c.valueLabels,\n })),\n },\n ],\n };\n};\n","import { memo, useCallback, useMemo } from 'react';\nimport isEqual from 'react-fast-compare';\nimport Typography from '@mui/material/Typography';\nimport type { FilterCondition } from 'model/filter';\n\nimport FilterRow from './FilterRow';\nimport type { FiltersListProps } from './props';\n\nconst FiltersList = ({\n filterableFields,\n conditions,\n onUpdateCondition,\n onRemoveCondition,\n entityFilterConfig,\n}: FiltersListProps) => {\n const handleUpdateCondition = useCallback(\n (updated: FilterCondition) => {\n onUpdateCondition(updated.id, updated);\n },\n [onUpdateCondition],\n );\n\n const handleRemoveCondition = useCallback(\n (id: string) => () => {\n onRemoveCondition(id);\n },\n [onRemoveCondition],\n );\n\n const usedFieldNames = useMemo(\n () =>\n conditions.map(c => c.fieldName).filter((name): name is string => !!name),\n [conditions],\n );\n\n const getAvailableFields = useCallback(\n (currentFieldName: string | undefined) =>\n filterableFields.filter(\n field =>\n !usedFieldNames.includes(field.name) ||\n field.name === currentFieldName,\n ),\n [filterableFields, usedFieldNames],\n );\n\n if (filterableFields.length === 0) {\n return (\n <Typography variant=\"body2\" color=\"text.secondary\" textAlign=\"center\">\n Nenhum filtro disponível\n </Typography>\n );\n }\n\n if (conditions.length === 0) {\n return (\n <Typography variant=\"body2\" color=\"text.secondary\" textAlign=\"center\">\n Clique em{' '}\n <Typography\n component=\"strong\"\n variant=\"body2\"\n fontWeight={600}\n color=\"text.primary\"\n >\n "+"\n </Typography>{' '}\n para adicionar um filtro\n </Typography>\n );\n }\n\n return (\n <>\n {conditions.map((condition, index) => (\n <FilterRow\n key={condition.id}\n condition={condition}\n fields={getAvailableFields(condition.fieldName)}\n onChange={handleUpdateCondition}\n onRemove={handleRemoveCondition(condition.id)}\n showOperator={index > 0}\n totalConditions={conditions.length}\n isFirst={index === 0}\n entityFilterConfig={entityFilterConfig}\n />\n ))}\n </>\n );\n};\n\nexport default memo(FiltersList, isEqual);\n","import { memo, useCallback, useMemo } from 'react';\nimport isEqual from 'react-fast-compare';\nimport FormControl from '@mui/material/FormControl';\nimport IconButton from '@mui/material/IconButton';\nimport InputLabel from '@mui/material/InputLabel';\nimport MenuItem from '@mui/material/MenuItem';\nimport Select from '@mui/material/Select';\nimport Stack from '@mui/material/Stack';\nimport TextField from '@mui/material/TextField';\nimport { Condition } from 'model/entity-metadata';\nimport { FilterOperator } from 'model/filter';\n\nimport Icon from 'components/Icon';\n\nimport { CONDITION_LABELS } from '../../constants/filter';\n\nimport EntityFilter from './EntityFilter';\nimport OperatorSelect from './OperatorSelect';\nimport type { FilterRowProps } from './props';\n\nconst ellipsisStyle = {\n whiteSpace: 'nowrap',\n overflow: 'hidden',\n textOverflow: 'ellipsis',\n} as const;\n\nconst FilterRow = ({\n condition,\n fields,\n onChange,\n onRemove,\n totalConditions,\n isFirst,\n entityFilterConfig,\n}: FilterRowProps) => {\n const selectedField = useMemo(\n () =>\n fields.find(f => (f.filter_field_name ?? f.name) === condition.fieldName),\n [fields, condition.fieldName],\n );\n\n const availableConditions = useMemo(\n () => selectedField?.available_filter_conditions || [],\n [selectedField],\n );\n\n const isValueDisabled = useMemo(\n () =>\n !condition.fieldName ||\n condition.conditional === 'IS_NULL' ||\n condition.conditional === 'IS_NOT_NULL',\n [condition.fieldName, condition.conditional],\n );\n\n const handleFieldChange = useCallback(\n (fieldName: string) => {\n const newField = fields.find(\n f => (f.filter_field_name ?? f.name) === fieldName,\n );\n if (!newField) return;\n\n const defaultCondition =\n newField.available_filter_conditions[0] || 'EQUALS';\n\n onChange({\n ...condition,\n fieldName,\n conditional: defaultCondition,\n value: [],\n });\n },\n [fields, condition, onChange],\n );\n\n const handleConditionChange = useCallback(\n (conditional: Condition) => {\n onChange({\n ...condition,\n conditional,\n });\n },\n [condition, onChange],\n );\n\n const handleValueChange = useCallback(\n (value: string) => {\n onChange({\n ...condition,\n value: value ? [value] : [],\n });\n },\n [condition, onChange],\n );\n\n const handleEntityValueChange = useCallback(\n (value: string, label?: string) => {\n const valueLabels = { ...condition.valueLabels };\n if (value && label) {\n valueLabels[value] = label;\n }\n onChange({\n ...condition,\n value: value ? [value] : [],\n valueLabels,\n });\n },\n [condition, onChange],\n );\n\n const handleOperatorChange = useCallback(\n (operator: FilterOperator) => {\n onChange({\n ...condition,\n operator,\n });\n },\n [condition, onChange],\n );\n\n const renderValueInput = () => {\n if (selectedField?.type === 'BOOLEAN') {\n return (\n <FormControl\n size=\"small\"\n sx={{ flex: 1, minWidth: 120 }}\n disabled={isValueDisabled}\n >\n <InputLabel id={`value-label-${condition.id}`}>Valor</InputLabel>\n <Select\n labelId={`value-label-${condition.id}`}\n label=\"Valor\"\n value={condition.value[0] || ''}\n onChange={e => handleValueChange(e.target.value)}\n size=\"small\"\n sx={{\n '& .MuiSelect-select': ellipsisStyle,\n }}\n >\n <MenuItem value=\"true\">Verdadeiro</MenuItem>\n <MenuItem value=\"false\">Falso</MenuItem>\n </Select>\n </FormControl>\n );\n }\n\n if (\n selectedField?.type === 'ENTITY' &&\n selectedField.metadata &&\n entityFilterConfig?.[selectedField.metadata.name]\n ) {\n const currentValue = condition.value[0] || '';\n\n return (\n <EntityFilter\n config={entityFilterConfig[selectedField.metadata.name]}\n metadata={selectedField.metadata}\n value={currentValue}\n initialLabel={condition.valueLabels?.[currentValue]}\n onChange={handleEntityValueChange}\n disabled={isValueDisabled}\n />\n );\n }\n\n return (\n <TextField\n label=\"Filtro\"\n value={condition.value[0] || ''}\n onChange={e => handleValueChange(e.target.value)}\n size=\"small\"\n disabled={isValueDisabled}\n InputLabelProps={{ shrink: true }}\n sx={{ flex: 1, minWidth: 120 }}\n />\n );\n };\n\n return (\n <Stack direction=\"row\" spacing={1} alignItems=\"center\">\n <IconButton\n onClick={onRemove}\n size=\"small\"\n aria-label=\"Remover filtro\"\n sx={{ flexShrink: 0 }}\n >\n <Icon icon=\"CLOSE_MARK_BUTTON\" width={18} />\n </IconButton>\n\n <OperatorSelect\n value={condition.operator}\n onChange={handleOperatorChange}\n totalConditions={totalConditions}\n isFirst={isFirst}\n />\n\n <FormControl size=\"small\" sx={{ minWidth: 150, flex: 1 }}>\n <InputLabel id={`field-label-${condition.id}`}>Coluna</InputLabel>\n <Select\n labelId={`field-label-${condition.id}`}\n label=\"Coluna\"\n value={condition.fieldName}\n onChange={e => handleFieldChange(e.target.value)}\n size=\"small\"\n sx={{\n '& .MuiSelect-select': ellipsisStyle,\n }}\n >\n {fields.map(field => (\n <MenuItem\n key={field.name}\n value={field.filter_field_name ?? field.name}\n sx={ellipsisStyle}\n title={field.description || field.name}\n >\n {field.description || field.name}\n </MenuItem>\n ))}\n </Select>\n </FormControl>\n\n <FormControl\n size=\"small\"\n sx={{ minWidth: 90 }}\n disabled={!condition.fieldName}\n >\n <InputLabel id={`condition-label-${condition.id}`}>Condição</InputLabel>\n <Select\n labelId={`condition-label-${condition.id}`}\n label=\"Condição\"\n value={condition.conditional}\n onChange={e => handleConditionChange(e.target.value as Condition)}\n size=\"small\"\n sx={{\n '& .MuiSelect-select': ellipsisStyle,\n }}\n >\n {availableConditions.map(cond => (\n <MenuItem key={cond} value={cond} sx={ellipsisStyle}>\n {CONDITION_LABELS[cond as Condition] || cond}\n </MenuItem>\n ))}\n </Select>\n </FormControl>\n\n {renderValueInput()}\n </Stack>\n );\n};\n\nexport default memo(FilterRow, isEqual);\n","import { Condition } from 'model/entity-metadata';\n\nexport const CONDITION_LABELS: Record<Condition, string> = {\n [Condition.EQUALS]: 'Igual a',\n [Condition.NOT_EQUALS]: 'Diferente de',\n [Condition.LIKE]: 'Contém',\n [Condition.NOT_LIKE]: 'Não contém',\n [Condition.GREATER_THAN]: 'Maior que',\n [Condition.LESS_THAN]: 'Menor que',\n [Condition.GREATER_THAN_OR_EQUAL]: 'Maior ou igual a',\n [Condition.LESS_THAN_OR_EQUAL]: 'Menor ou igual a',\n [Condition.IN]: 'Em',\n [Condition.NOT_IN]: 'Não em',\n [Condition.IS_NULL]: 'É nulo',\n [Condition.IS_NOT_NULL]: 'Não é nulo',\n};\n","import { memo, useCallback, useMemo, useState } from 'react';\n\nimport Autocomplete from 'components/Autocomplete';\nimport useDebounceValue from 'hooks/useDebounceValue';\nimport useToggle from 'hooks/useToggle';\n\nimport type { EntityFilterOption, EntityFilterProps } from './props';\n\nconst EntityFilter = ({\n config,\n metadata,\n value,\n initialLabel,\n onChange,\n disabled = false,\n}: EntityFilterProps) => {\n const [open, toggleOpen, setOpen] = useToggle(false);\n const [inputValue, setInputValue] = useState('');\n const debouncedSearch = useDebounceValue(inputValue, 400);\n\n const { data, isLoading, isFetching } = config.useQuery(\n {\n search: debouncedSearch || undefined,\n page: 0,\n perPage: 25,\n ...config.queryParams,\n },\n {\n skip: !open,\n },\n );\n\n const loading = isLoading || isFetching;\n\n const selectedOption = useMemo<EntityFilterOption | null>(() => {\n if (!value) return null;\n return { value, label: initialLabel ?? value };\n }, [value, initialLabel]);\n\n const options = useMemo(() => {\n const items = (data?.items ?? [])\n .map(item => ({\n label: String(item[metadata.description_field_name] ?? ''),\n value: String(item[metadata.id_field_name] ?? ''),\n }))\n .filter(opt => opt.value && opt.label);\n\n if (\n selectedOption &&\n !items.some(opt => opt.value === selectedOption.value)\n ) {\n items.unshift(selectedOption);\n }\n\n return items;\n }, [\n data,\n metadata.id_field_name,\n metadata.description_field_name,\n selectedOption,\n ]);\n\n const handleClose = useCallback(() => {\n setOpen(false);\n setInputValue('');\n }, [setOpen]);\n\n const handleChange = useCallback(\n (newValue: unknown) => {\n if (typeof newValue !== 'string' || !newValue) {\n onChange('', undefined);\n return;\n }\n const option = options.find(opt => opt.value === newValue);\n onChange(newValue, option?.label);\n },\n [onChange, options],\n );\n\n const handleInputChange = useCallback(\n (_event: React.SyntheticEvent, newInputValue: string, reason: string) => {\n if (reason === 'input') {\n setInputValue(newInputValue);\n }\n },\n [],\n );\n\n return (\n <Autocomplete\n name={`entity-filter-${metadata.name}`}\n label=\"Filtro\"\n open={open}\n onOpen={toggleOpen}\n onClose={handleClose}\n value={value || ''}\n onChange={handleChange}\n inputValue={open ? inputValue : (selectedOption?.label ?? '')}\n onInputChange={handleInputChange}\n options={options}\n loading={loading}\n disabled={disabled}\n size=\"small\"\n filterOptions={x => x}\n noOptionsText={\n inputValue !== debouncedSearch ? 'Buscando...' : 'Nenhum resultado'\n }\n sx={{ flex: 1, minWidth: 120 }}\n />\n );\n};\n\nexport default memo(EntityFilter);\n","import { memo } from 'react';\nimport isEqual from 'react-fast-compare';\nimport MenuItem from '@mui/material/MenuItem';\nimport Select from '@mui/material/Select';\nimport Stack from '@mui/material/Stack';\nimport { FilterOperator } from 'model/filter';\n\nimport type { OperatorSelectProps } from './props';\n\nconst OperatorSelect = ({\n value,\n onChange,\n totalConditions,\n isFirst,\n}: OperatorSelectProps) => {\n if (totalConditions === 1) {\n return null;\n }\n\n if (isFirst) {\n return <Stack sx={{ width: 55, flexShrink: 0 }} />;\n }\n\n return (\n <Select\n value={value}\n onChange={e => onChange(e.target.value as FilterOperator)}\n size=\"small\"\n sx={{ width: 55, flexShrink: 0 }}\n >\n <MenuItem value={FilterOperator.AND}>e</MenuItem>\n <MenuItem value={FilterOperator.OR}>ou</MenuItem>\n </Select>\n );\n};\n\nexport default memo(OperatorSelect, isEqual);\n","import Box from '@mui/material/Box';\nimport { styled } from '@mui/material/styles';\n\n// Estilos baseados no Drawer/Popover para garantir consistência\nexport const Container = styled(Box)({\n display: 'flex',\n flexDirection: 'column',\n height: '100%',\n // No popover, a altura será controlada pelo max-height do container\n});\n\nexport const Header = styled(Box)(({ theme }) => ({\n display: 'flex',\n alignItems: 'center',\n justifyContent: 'space-between',\n padding: theme.spacing(2, 3),\n}));\n\nexport const Content = styled(Box)(({ theme }) => ({\n flex: 1,\n overflowY: 'auto',\n padding: theme.spacing(3),\n display: 'flex',\n flexDirection: 'column',\n gap: theme.spacing(2),\n}));\n\nexport const Footer = styled(Box)(({ theme }) => ({\n display: 'flex',\n alignItems: 'center',\n justifyContent: 'space-between',\n padding: theme.spacing(2),\n}));\n","import { memo, useCallback, useEffect, useMemo, useState } from 'react';\nimport Button from '@mui/material/Button';\nimport FormControl from '@mui/material/FormControl';\nimport InputLabel from '@mui/material/InputLabel';\nimport MenuItem from '@mui/material/MenuItem';\nimport Select from '@mui/material/Select';\nimport Stack from '@mui/material/Stack';\nimport Typography from '@mui/material/Typography';\nimport { SortType } from 'model/filter';\n\nimport Icon from 'components/Icon';\n\nimport { SortModalProps } from './props';\nimport {\n ApplyButton,\n LabelButton,\n StyledDialog,\n StyledDialogActions,\n StyledDialogContent,\n StyledDialogTitle,\n} from './style';\n\nconst SortModal = ({\n open,\n onClose,\n fields,\n sort,\n onSortChange,\n}: SortModalProps) => {\n const [selectedField, setSelectedField] = useState<string>(\n sort?.fieldName || '',\n );\n const [selectedDirection, setSelectedDirection] = useState<SortType>(\n sort?.sortType || SortType.ASC,\n );\n\n const sortableFields = useMemo(\n () =>\n fields.filter(\n field => field.name !== 'ACTIONS' && field.access_type !== 'WRITE_ONLY',\n ),\n [fields],\n );\n\n const selectedFieldObj = useMemo(\n () =>\n fields.find(\n field => (field.filter_field_name ?? field.name) === selectedField,\n ),\n [fields, selectedField],\n );\n\n const isNumberField =\n selectedFieldObj?.type === 'DECIMAL' ||\n selectedFieldObj?.type === 'INTEGER';\n\n useEffect(() => {\n if (open) {\n setSelectedField(sort?.fieldName || '');\n setSelectedDirection(sort?.sortType || SortType.ASC);\n }\n }, [open, sort]);\n\n const handleApply = useCallback(() => {\n if (onSortChange) {\n if (!selectedField) {\n onSortChange(undefined);\n } else {\n onSortChange({\n fieldName: selectedField,\n sortType: selectedDirection,\n });\n }\n }\n onClose();\n }, [onSortChange, selectedField, selectedDirection, onClose]);\n\n const handleClear = useCallback(() => {\n if (!onSortChange) return;\n\n setSelectedField('');\n setSelectedDirection(SortType.ASC);\n\n onSortChange(undefined);\n onClose();\n }, [onSortChange, onClose]);\n\n return (\n <StyledDialog open={open} onClose={onClose} maxWidth=\"xs\" fullWidth>\n <StyledDialogTitle>\n <Typography variant=\"overline\" color=\"text.secondary\">\n Ordenar por\n </Typography>\n </StyledDialogTitle>\n <StyledDialogContent>\n <Stack spacing={2} pt={2}>\n <FormControl fullWidth size=\"small\">\n <InputLabel id=\"sort-field-label\">Campo</InputLabel>\n <Select\n labelId=\"sort-field-label\"\n value={selectedField}\n label=\"Campo\"\n onChange={e => setSelectedField(e.target.value)}\n >\n <MenuItem value=\"\">\n <em>Nenhum</em>\n </MenuItem>\n {sortableFields.map(field => (\n <MenuItem\n key={field.name}\n value={field.filter_field_name ?? field.name}\n >\n {field.description || field.name}\n </MenuItem>\n ))}\n </Select>\n </FormControl>\n <FormControl fullWidth size=\"small\" disabled={!selectedField}>\n <InputLabel id=\"sort-direction-label\">Direção</InputLabel>\n <Select\n labelId=\"sort-direction-label\"\n value={selectedDirection}\n label=\"Direção\"\n onChange={e => setSelectedDirection(e.target.value as SortType)}\n >\n <MenuItem value={SortType.ASC}>\n Crescente {isNumberField ? '(1-9)' : '(A-Z)'}\n </MenuItem>\n <MenuItem value={SortType.DESC}>\n Decrescente {isNumberField ? '(9-1)' : '(Z-A)'}\n </MenuItem>\n </Select>\n </FormControl>\n </Stack>\n </StyledDialogContent>\n <StyledDialogActions>\n <Stack flex={1} width=\"100%\" direction=\"row\">\n <Button color=\"inherit\" onClick={handleClear}>\n Limpar\n </Button>\n </Stack>\n <Button\n onClick={onClose}\n variant=\"outlined\"\n color=\"inherit\"\n sx={{ minWidth: 24 }}\n >\n <Icon icon=\"CANCEL_CIRCLE\" />\n <LabelButton>Cancelar</LabelButton>\n </Button>\n <ApplyButton onClick={handleApply} variant=\"contained\">\n <Icon icon=\"SIMPLE_CHECK\" />\n <LabelButton>Aplicar</LabelButton>\n </ApplyButton>\n </StyledDialogActions>\n </StyledDialog>\n );\n};\n\nSortModal.displayName = 'SortModal';\n\nexport default memo(SortModal);\n","import Button from '@mui/material/Button';\nimport Dialog from '@mui/material/Dialog';\nimport DialogActions from '@mui/material/DialogActions';\nimport DialogContent from '@mui/material/DialogContent';\nimport DialogTitle from '@mui/material/DialogTitle';\nimport { styled } from '@mui/material/styles';\nimport Typography from '@mui/material/Typography';\n\nexport const StyledDialog = styled(Dialog)(() => ({\n '& .MuiDialog-paper': { width: '100%' },\n}));\n\nexport const StyledDialogTitle = styled(DialogTitle)(({ theme }) => ({\n borderBottom: '1px solid',\n borderColor: theme.palette.divider,\n padding: theme.spacing(1.5, 2),\n}));\n\nexport const StyledDialogContent = styled(DialogContent)(({ theme }) => ({\n padding: theme.spacing(2),\n}));\n\nexport const StyledDialogActions = styled(DialogActions)(({ theme }) => ({\n borderTop: '1px solid',\n borderColor: theme.palette.divider,\n padding: theme.spacing(1.5, 2),\n}));\n\nexport const ApplyButton = styled(Button)(({ theme }) => ({\n minWidth: 24,\n [theme.breakpoints.down(330)]: {\n padding: theme.spacing(1),\n },\n}));\n\nexport const LabelButton = styled(Typography)(({ theme }) => ({\n fontWeight: '600',\n margin: theme.spacing(0, 1),\n [theme.breakpoints.down(330)]: {\n fontSize: 0,\n margin: 0,\n },\n}));\n","import { useMemo } from 'react';\nimport type { GridColDef } from '@mui/x-data-grid-premium';\n\nimport { UseColumnOrderingParams } from '../props';\n\nexport const useColumnOrdering = ({\n columns,\n fields,\n preferredFieldOrder,\n}: UseColumnOrderingParams) => {\n const columnsByFieldId = useMemo(\n () => new Map(columns.map(column => [column.field, column])),\n [columns],\n );\n\n const fieldsByName = useMemo(\n () => new Map(fields?.map(f => [f.name, f]) || []),\n [fields],\n );\n\n const orderedColumns = useMemo(() => {\n if (!preferredFieldOrder || preferredFieldOrder.length === 0 || !fields) {\n return columns;\n }\n\n const actionFieldName = 'ACTIONS';\n const preferredWithoutActions = preferredFieldOrder.filter(\n fieldName => fieldName !== actionFieldName,\n );\n\n const usedColumnFieldIds = new Set<string>();\n const ordered: GridColDef[] = [];\n\n const pushColumnForField = (fieldName: string) => {\n const field = fieldsByName.get(fieldName);\n if (!field) return;\n\n const column = columnsByFieldId.get(field.name);\n\n if (!column || usedColumnFieldIds.has(field.name)) return;\n\n ordered.push(column);\n usedColumnFieldIds.add(field.name);\n };\n\n preferredWithoutActions.forEach(fieldName => {\n pushColumnForField(fieldName);\n });\n\n fields.forEach(field => {\n if (field.name === actionFieldName) return;\n if (preferredWithoutActions.includes(field.name)) return;\n\n const column = columnsByFieldId.get(field.name);\n\n if (!column || usedColumnFieldIds.has(field.name)) return;\n\n ordered.push(column);\n usedColumnFieldIds.add(field.name);\n });\n\n pushColumnForField(actionFieldName);\n\n return ordered.length === 0 ? columns : ordered;\n }, [columns, columnsByFieldId, fieldsByName, preferredFieldOrder, fields]);\n\n return { orderedColumns, columnsByFieldId, fieldsByName };\n};\n","import { useCallback } from 'react';\nimport type { GridColumnVisibilityModel } from '@mui/x-data-grid-premium';\n\nimport useLocalStorage from 'hooks/useLocalStorage';\n\nimport { UseColumnVisibilityParams } from '../props';\n\nconst EMPTY_MODEL: GridColumnVisibilityModel = {};\n\nexport const useColumnVisibility = ({\n columnVisibilityStorageKey,\n onColumnVisibilityModelChange,\n}: UseColumnVisibilityParams) => {\n const hasStorageKey = Boolean(columnVisibilityStorageKey);\n\n const [storedVisibilityModel, setStoredVisibilityModel] = useLocalStorage<\n GridColumnVisibilityModel | undefined\n >(columnVisibilityStorageKey || '__dynamic-data-view:columns__', undefined, {\n initializeWithValue: hasStorageKey,\n });\n\n const columnVisibilityModel = storedVisibilityModel ?? EMPTY_MODEL;\n\n const handleColumnVisibilityModelChange = useCallback(\n (model: GridColumnVisibilityModel) => {\n if (hasStorageKey) {\n const modelToSave = { ...model };\n // Prevents __check__ (checkboxSelection column) from being permanently hidden in local storage\n delete modelToSave['__check__'];\n setStoredVisibilityModel(modelToSave);\n }\n\n if (onColumnVisibilityModelChange) {\n onColumnVisibilityModelChange(model);\n }\n },\n [hasStorageKey, onColumnVisibilityModelChange, setStoredVisibilityModel],\n );\n\n return {\n columnVisibilityModel,\n handleColumnVisibilityModelChange,\n };\n};\n","import { useMemo } from 'react';\nimport { GridColDef } from '@mui/x-data-grid-premium';\n\nimport { Columns } from 'types/datagrid';\n\nimport { ACCESS_TYPES } from '../constants/columnDefaults';\nimport { UseDynamicColumnsProps } from '../props';\nimport { getColumnStrategy } from '../utils/columnStrategies';\n\nexport const useDynamicColumns = <T extends object>({\n metadata,\n renderCell,\n columnStrategies,\n}: UseDynamicColumnsProps<T>): Columns => {\n return useMemo(() => {\n if (!metadata?.fields) return [];\n\n const columnsMap = new Map<string, GridColDef>();\n\n const visibleFields = metadata.fields.filter(field => {\n if (\n field.access_type === ACCESS_TYPES.READ_ONLY ||\n field.access_type === ACCESS_TYPES.READ_AND_WRITE\n ) {\n return true;\n }\n\n return (\n field.name === 'ACTIONS' ||\n field.name === metadata?.id_field_name ||\n field.name === 'NAME'\n );\n });\n\n visibleFields.forEach(field => {\n if (columnsMap.has(field.name)) {\n return;\n }\n\n const strategy =\n columnStrategies?.[field.name] ?? getColumnStrategy<T>(field, metadata);\n const column = strategy(field, renderCell, metadata);\n\n columnsMap.set(field.name, column);\n });\n\n return Array.from(columnsMap.values());\n }, [columnStrategies, metadata, renderCell]);\n};\n","export const COLUMN_DEFAULTS = {\n IMAGE_WIDTH: 90,\n MIN_WIDTH: 130,\n ENTITY_MIN_WIDTH: 100,\n ENTITY_FLEX: 0.5,\n ID_MIN_WIDTH: 200,\n ID_FLEX: 1,\n ACTIONS_WIDTH: 80,\n} as const;\n\nexport const ACCESS_TYPES = {\n READ_ONLY: 'READ_ONLY',\n READ_AND_WRITE: 'READ_AND_WRITE',\n} as const;\n\nexport const CURRENCY_FIELD_NAMES: readonly string[] = [\n 'price',\n 'base_price',\n 'minimum_value',\n 'maximum_value',\n 'minimum_installment_value',\n];\n","import { GridColDef, GridRenderCellParams } from '@mui/x-data-grid-premium';\nimport { Field } from 'model/entity-metadata';\n\nimport { COLUMN_DEFAULTS } from '../constants/columnDefaults';\nimport { CellRenderer, ColumnStrategy, DynamicRowData } from '../props';\n\nconst createImageColumn = <T extends object>(\n field: Field,\n renderCell: CellRenderer<T>,\n): GridColDef => ({\n field: field.name,\n headerName: field.description,\n sortable: false,\n width: COLUMN_DEFAULTS.IMAGE_WIDTH,\n resizable: false,\n headerAlign: 'center',\n align: 'center',\n renderCell: (params: GridRenderCellParams) =>\n renderCell(field, params.row as DynamicRowData<T>),\n});\n\nconst createIdColumn = <T extends object>(\n field: Field,\n renderCell: CellRenderer<T>,\n): GridColDef => ({\n field: field.name,\n headerName: field.description,\n minWidth: COLUMN_DEFAULTS.ID_MIN_WIDTH,\n flex: COLUMN_DEFAULTS.ID_FLEX,\n renderCell: (params: GridRenderCellParams) =>\n renderCell(field, params.row as DynamicRowData<T>),\n});\n\nconst createEntityColumn = <T extends object>(\n field: Field,\n renderCell: CellRenderer<T>,\n): GridColDef => ({\n field: field.name,\n headerName: field.description,\n minWidth: COLUMN_DEFAULTS.ENTITY_MIN_WIDTH,\n flex: COLUMN_DEFAULTS.ENTITY_FLEX,\n renderCell: (params: GridRenderCellParams) =>\n renderCell(field, params.row as DynamicRowData<T>),\n});\n\nconst createDefaultColumn = <T extends object>(\n field: Field,\n renderCell: CellRenderer<T>,\n): GridColDef => ({\n field: field.name,\n headerName: field.description,\n minWidth: COLUMN_DEFAULTS.MIN_WIDTH,\n renderCell: (params: GridRenderCellParams) =>\n renderCell(field, params.row as DynamicRowData<T>),\n});\n\nconst createActionsColumn = <T extends object>(\n field: Field,\n renderCell: CellRenderer<T>,\n): GridColDef => ({\n field: field.name,\n headerName: 'Ações',\n width: COLUMN_DEFAULTS.ACTIONS_WIDTH,\n sortable: false,\n resizable: false,\n disableReorder: true,\n hideable: false,\n headerAlign: 'center',\n disableColumnMenu: true,\n align: 'center',\n renderCell: (params: GridRenderCellParams) =>\n renderCell(field, params.row as DynamicRowData<T>),\n});\n\nexport const getColumnStrategy = <T extends object>(\n field: Field,\n metadata?: { id_field_name?: string },\n): ColumnStrategy<T> => {\n if (field.name === metadata?.id_field_name || field.name === 'name') {\n return createIdColumn;\n }\n\n if (field.name === 'ACTIONS') {\n return createActionsColumn;\n }\n\n if (field.type === 'FILE') {\n return createImageColumn;\n }\n\n if (field.type === 'ENTITY') {\n return createEntityColumn;\n }\n\n return createDefaultColumn;\n};\n","import { useCallback, useRef, useState } from 'react';\nimport {\n type Filter,\n type FilterCondition,\n FilterOperator,\n} from 'model/filter';\n\nimport uuidv4 from 'utils/uuidv4';\n\nimport { UseFiltersProps, UseFiltersReturn } from '../props';\nimport {\n buildFilterFromConditions,\n getDefaultCondition,\n isValidCondition,\n} from '../utils/filter';\n\n// Converte filtro inicial em condições\nconst parseInitialConditions = (initialFilter?: Filter): FilterCondition[] => {\n if (!initialFilter?.groups?.[0]?.conditionals) return [];\n return initialFilter.groups[0].conditionals.map(cond => ({\n id: uuidv4(),\n operator: initialFilter.groups[0].operator,\n fieldName: cond.fieldName,\n conditional: cond.conditional,\n value: cond.value,\n valueLabels: cond.valueLabels,\n }));\n};\n\n/**\n * Hook para gerenciar estado de filtros do DynamicDataView com condições dinâmicas\n *\n * - conditions: estado de edição (o que o usuário vê no popover)\n * - appliedConditions: estado aplicado (o que está efetivamente filtrando)\n * - hasActiveFilters/activeFiltersCount: calculados com base em appliedConditions\n */\nexport const useFilters = ({\n fields,\n initialFilter,\n}: UseFiltersProps): UseFiltersReturn => {\n const [isOpen, setIsOpen] = useState(false);\n\n // Estado aplicado (efetivamente filtrando)\n const [appliedConditions, setAppliedConditions] = useState<FilterCondition[]>(\n () => parseInitialConditions(initialFilter),\n );\n const [appliedFilter, setAppliedFilter] = useState<Filter | undefined>(\n initialFilter,\n );\n\n // Estado de edição (o que o usuário vê/edita no popover)\n const [conditions, setConditions] = useState<FilterCondition[]>(() =>\n parseInitialConditions(initialFilter),\n );\n\n // Referência para snapshot antes de abrir o popover\n const snapshotRef = useRef<FilterCondition[]>([]);\n\n const openDrawer = useCallback(() => {\n // Salva snapshot das condições atuais (aplicadas) ao abrir\n snapshotRef.current = appliedConditions.map(c => ({ ...c }));\n // Sincroniza edição com aplicado ao abrir\n setConditions(appliedConditions.map(c => ({ ...c })));\n setIsOpen(true);\n }, [appliedConditions]);\n\n const closeDrawer = () => setIsOpen(false);\n\n const addCondition = useCallback(() => {\n const filterableFields = fields.filter(\n f => f.available_filter_conditions?.length > 0,\n );\n if (filterableFields.length === 0) return;\n\n const usedFieldNames = conditions.map(c => c.fieldName);\n const availableFields = filterableFields.filter(\n f => !usedFieldNames.includes(f.filter_field_name ?? f.name),\n );\n if (availableFields.length === 0) return;\n\n const currentOperator =\n conditions.length > 0 ? conditions[0].operator : FilterOperator.AND;\n const firstField = availableFields[0];\n const newCondition: FilterCondition = {\n id: uuidv4(),\n operator: currentOperator,\n fieldName: firstField.filter_field_name ?? firstField.name,\n conditional: getDefaultCondition(firstField),\n value: [],\n };\n\n setConditions(prev => [...prev, newCondition]);\n }, [fields, conditions]);\n\n const updateCondition = useCallback(\n (id: string, changes: Partial<FilterCondition>) => {\n setConditions(prev => {\n const targetCondition = prev.find(c => c.id === id);\n if (!targetCondition) return prev;\n\n if (changes.operator && changes.operator !== targetCondition.operator) {\n const newOperator = changes.operator;\n return prev.map(c => {\n if (c.id === id) {\n return { ...c, ...changes };\n }\n return { ...c, operator: newOperator };\n });\n }\n\n return prev.map(c => (c.id === id ? { ...c, ...changes } : c));\n });\n },\n [],\n );\n\n const removeCondition = useCallback((id: string) => {\n setConditions(prev => prev.filter(c => c.id !== id));\n }, []);\n\n const clearAllFilters = () => {\n setConditions([]);\n setAppliedConditions([]);\n setAppliedFilter(undefined);\n };\n\n const applyFilters = () => {\n const filter = buildFilterFromConditions(conditions);\n setAppliedConditions(conditions.map(c => ({ ...c })));\n setAppliedFilter(filter);\n setIsOpen(false);\n return filter;\n };\n\n const cancelChanges = () => {\n // Reverte para o snapshot salvo ao abrir\n setConditions(snapshotRef.current.map(c => ({ ...c })));\n setIsOpen(false);\n };\n\n // Calculado com base nos filtros APLICADOS (não em edição)\n const hasActiveFilters = appliedConditions.some(isValidCondition);\n const activeFiltersCount = appliedConditions.filter(isValidCondition).length;\n\n return {\n conditions,\n filter: appliedFilter,\n isOpen,\n hasActiveFilters,\n activeFiltersCount,\n openDrawer,\n closeDrawer,\n addCondition,\n updateCondition,\n removeCondition,\n clearAllFilters,\n applyFilters,\n cancelChanges,\n };\n};\n\nexport default useFilters;\n","import { useCallback, useEffect, useState } from 'react';\nimport { Filter, Sort } from 'model/filter';\n\nconst getStoredValue = <T>(key: string): T | undefined => {\n try {\n const item = localStorage.getItem(key);\n return item ? JSON.parse(item) : undefined;\n } catch {\n return undefined;\n }\n};\n\nconst setStoredValue = <T>(key: string, value: T | undefined): void => {\n try {\n if (value === undefined) {\n localStorage.removeItem(key);\n } else {\n localStorage.setItem(key, JSON.stringify(value));\n }\n } catch {\n // Silently ignore localStorage errors\n }\n};\n\nexport const useFilterStorage = (\n storageKey: string,\n externalFilter?: Filter,\n onFilterChange?: (filter: Filter | undefined) => void,\n) => {\n const filterKey = `${storageKey}:filter`;\n\n const [internalFilter, setInternalFilter] = useState<Filter | undefined>(\n () => {\n return getStoredValue<Filter>(filterKey) || externalFilter;\n },\n );\n\n // Sync with external filter\n useEffect(() => {\n if (externalFilter !== undefined) {\n setInternalFilter(externalFilter);\n }\n }, [externalFilter]);\n\n const handleFilterChange = useCallback(\n (newFilter: Filter | undefined) => {\n setInternalFilter(newFilter);\n setStoredValue(filterKey, newFilter);\n onFilterChange?.(newFilter);\n },\n [filterKey, onFilterChange],\n );\n\n return {\n filter: internalFilter,\n setFilter: handleFilterChange,\n };\n};\n\nexport const useSortStorage = (\n storageKey: string,\n externalSort?: Sort,\n onSortChange?: (sort: Sort | undefined) => void,\n) => {\n const sortKey = `${storageKey}:sort`;\n\n const [internalSort, setInternalSort] = useState<Sort | undefined>(() => {\n return getStoredValue<Sort>(sortKey) || externalSort;\n });\n\n // Sync with external sort\n useEffect(() => {\n if (externalSort !== undefined) {\n setInternalSort(externalSort);\n }\n }, [externalSort]);\n\n const handleSortChange = useCallback(\n (newSort: Sort | undefined) => {\n setInternalSort(newSort);\n setStoredValue(sortKey, newSort);\n onSortChange?.(newSort);\n },\n [sortKey, onSortChange],\n );\n\n return {\n sort: internalSort,\n setSort: handleSortChange,\n };\n};\n","import { useCallback, useMemo } from 'react';\nimport type { GridSortModel } from '@mui/x-data-grid-premium';\nimport { Field } from 'model/entity-metadata';\nimport { Sort, SortType } from 'model/filter';\n\nimport { UseSortingParams } from '../props';\n\n/**\n * Mapeia field.name (coluna do DataGrid) → filter_field_name (campo da API).\n * Usado quando o usuário clica no header da coluna para ordenar.\n */\nconst resolveApiFieldName = (\n fields: Field[] | undefined,\n fieldName: string,\n): string => {\n if (!fields) return fieldName;\n const field = fields.find(f => f.name === fieldName);\n return field?.filter_field_name ?? fieldName;\n};\n\n/**\n * Mapeia filter_field_name (campo da API) → field.name (coluna do DataGrid).\n * Usado para o sortModel destacar a coluna correta na UI.\n */\nconst resolveColumnFieldName = (\n fields: Field[] | undefined,\n fieldName: string,\n): string => {\n if (!fields) return fieldName;\n const field = fields.find(\n f => f.filter_field_name === fieldName || f.name === fieldName,\n );\n return field?.name ?? fieldName;\n};\n\nexport const useSorting = ({\n sort,\n onSortChange,\n fields,\n}: UseSortingParams) => {\n const sortModel: GridSortModel = useMemo(() => {\n if (!sort) return [];\n return [\n {\n field: resolveColumnFieldName(fields, sort.fieldName),\n sort: sort.sortType.toLowerCase() as 'asc' | 'desc',\n },\n ];\n }, [sort, fields]);\n\n const handleSortModelChange = useCallback(\n (model: GridSortModel) => {\n if (!onSortChange) return;\n\n const firstItem = model[0];\n if (!firstItem || !firstItem.sort) {\n onSortChange(undefined);\n return;\n }\n\n const newSort: Sort = {\n fieldName: resolveApiFieldName(fields, firstItem.field),\n sortType: firstItem.sort.toUpperCase() as SortType,\n };\n onSortChange(newSort);\n },\n [onSortChange, fields],\n );\n\n return {\n sortModel,\n handleSortModelChange,\n };\n};\n","import {\n AccessType,\n DataType,\n EntityMetadataResponse,\n Field,\n} from 'model/entity-metadata';\n\nexport const createActionsField = (): Field => ({\n name: 'ACTIONS',\n description: '',\n filter_field_name: null,\n type: DataType.TEXT,\n metadata: null,\n access_type: AccessType.READ_ONLY,\n relation_field_name: null,\n available_filter_conditions: [],\n});\n\nexport const addActionsFieldToMetadata = (\n metadata: EntityMetadataResponse,\n): EntityMetadataResponse => {\n const hasActionsField = metadata.fields.some(\n field => field.name === 'ACTIONS',\n );\n\n if (hasActionsField) {\n return metadata;\n }\n\n return {\n ...metadata,\n fields: [...metadata.fields, createActionsField()],\n };\n};\n","import { memo, ReactNode } from 'react';\n\nimport { DatePickerFormat, fDate } from 'utils/formatTime';\n\nimport type { DateRendererProps } from './props';\n\nconst DateRenderer = ({ value, format }: DateRendererProps): ReactNode => {\n if (value === null || value === undefined) return '-';\n\n return fDate(value as DatePickerFormat, format);\n};\n\nexport default memo(DateRenderer);\n","import { memo, ReactNode } from 'react';\n\nimport { DatePickerFormat, fDateTime } from 'utils/formatTime';\n\nimport type { DateTimeRendererProps } from './props';\n\nconst DateTimeRenderer = ({\n value,\n format,\n}: DateTimeRendererProps): ReactNode => {\n if (value === null || value === undefined) return '-';\n\n return fDateTime(value as DatePickerFormat, format);\n};\n\nexport default memo(DateTimeRenderer);\n","import { memo, ReactNode } from 'react';\nimport Chip from '@mui/material/Chip';\n\nimport { EntityRendererProps } from './props';\n\nconst EntityRenderer = ({ value, field }: EntityRendererProps): ReactNode => {\n if (!field.metadata || typeof value !== 'object' || value === null) {\n return value ? String(value) : '-';\n }\n\n const entityValue = (value as Record<string, unknown>)[\n field.metadata.description_field_name\n ];\n\n if (!entityValue) return null;\n\n return (\n <Chip\n label={String(entityValue)}\n variant=\"outlined\"\n size=\"small\"\n sx={{\n width: 'fit-content',\n color: 'text.secondary',\n borderColor: 'divider',\n borderRadius: 3,\n }}\n />\n );\n};\n\nexport default memo(EntityRenderer);\n","import { memo, ReactNode } from 'react';\n\nimport Icon, { IconEnum } from '../../Icon';\n\nimport { IconRendererProps } from './props';\n\nconst IconRenderer = ({\n value,\n trueIcon = IconEnum.STAR_02,\n falseIcon = IconEnum.STAR,\n color = 'primary.main',\n width = 18,\n}: IconRendererProps): ReactNode => {\n return (\n <Icon icon={value ? trueIcon : falseIcon} color={color} width={width} />\n );\n};\n\nexport default memo(IconRenderer);\n","import { memo, ReactNode } from 'react';\n\nimport Icon from 'components/Icon';\n\nimport { ImageRendererProps } from './props';\nimport { ImageContainer } from './style';\n\nconst ImageRenderer = ({\n imageResourceId,\n getImageUrl,\n size = 48,\n alt = 'Imagem',\n onClick,\n sx,\n}: ImageRendererProps): ReactNode => {\n const hasImage = !!imageResourceId;\n const imageUrl =\n hasImage && getImageUrl ? getImageUrl(imageResourceId) : undefined;\n const clickable = !!onClick;\n\n return (\n <ImageContainer\n size={size}\n noImage={!hasImage}\n clickable={clickable}\n onClick={onClick}\n sx={sx}\n >\n {imageUrl ? (\n <img src={imageUrl} alt={alt} />\n ) : (\n <Icon\n icon=\"SEARCH_IMAGE\"\n width={Math.round(size / 2)}\n color=\"text.disabled\"\n />\n )}\n </ImageContainer>\n );\n};\n\nexport default memo(ImageRenderer);\n","import Box from '@mui/material/Box';\nimport { styled } from '@mui/material/styles';\n\n// StatusRenderer styles\nexport interface StatusLabelProps {\n isActive: boolean;\n}\n\nexport const StatusLabel = styled('span')<StatusLabelProps>(\n ({ theme, isActive }) => ({\n display: 'inline-flex',\n alignItems: 'center',\n justifyContent: 'center',\n padding: theme.spacing(0.2, 1),\n borderRadius: theme.shape.borderRadius,\n fontSize: '0.75rem',\n fontWeight: 600,\n width: 'fit-content',\n height: 'auto',\n lineHeight: '1.25rem',\n whiteSpace: 'nowrap',\n margin: 'auto',\n backgroundColor: isActive\n ? theme.palette.success.lighter || '#00A76F29'\n : theme.palette.warning.lighter || '#FF563029',\n color: isActive\n ? theme.palette.success.darker || '#007867'\n : theme.palette.warning.darker || '#B71D18',\n }),\n);\n\n// ImageRenderer styles\nexport interface ImageContainerProps {\n size: number;\n noImage: boolean;\n clickable: boolean;\n}\n\nexport const ImageContainer = styled(Box, {\n shouldForwardProp: prop =>\n !['size', 'noImage', 'clickable'].includes(prop as string),\n})<ImageContainerProps>(({ theme, size, noImage, clickable }) => ({\n width: size,\n height: size,\n minWidth: size,\n borderRadius: '50%',\n display: 'flex',\n alignItems: 'center',\n justifyContent: 'center',\n overflow: 'hidden',\n cursor: clickable ? 'pointer' : 'default',\n transition: 'opacity 0.2s ease-in-out',\n color: theme.palette.text.disabled,\n ...(noImage && {\n border: `1px dashed ${theme.palette.divider}`,\n backgroundColor: theme.palette.grey[100],\n }),\n ...(clickable && {\n '&:hover': {\n opacity: 0.8,\n },\n }),\n '& img': {\n width: '100%',\n height: '100%',\n objectFit: 'cover',\n borderRadius: '50%',\n },\n [theme.breakpoints.down('sm')]: {\n justifyContent: 'flex-start',\n alignItems: 'flex-start',\n },\n}));\n","import { memo, ReactNode } from 'react';\nimport Stack from '@mui/material/Stack';\nimport Typography from '@mui/material/Typography';\n\nimport CopyButton from 'components/CopyButton';\n\nimport { NameRendererProps } from './props';\n\nconst NameRenderer = ({\n id,\n displayName,\n copyMessage = 'ID copiado!',\n}: NameRendererProps): ReactNode => {\n return (\n <Stack height={1} justifyContent=\"center\">\n <Typography variant=\"subtitle2\" noWrap title={displayName}>\n {displayName}\n </Typography>\n <Stack direction=\"row\" gap={1} alignItems=\"center\">\n <Typography color=\"grey.600\" variant=\"body2\" noWrap>\n ID: {id}\n </Typography>\n <CopyButton toCopy={id} message={copyMessage} />\n </Stack>\n </Stack>\n );\n};\n\nexport default memo(NameRenderer);\n","import { memo, ReactNode } from 'react';\nimport Stack from '@mui/material/Stack';\nimport Typography from '@mui/material/Typography';\n\nimport { fCurrencyBRL, fNumber } from 'utils/formatNumber';\n\nimport { NumberRendererProps } from './props';\n\nconst NumberRenderer = ({\n value,\n isCurrency = false,\n}: NumberRendererProps): ReactNode => {\n if (value === null || value === undefined) return '-';\n\n return (\n <Stack direction=\"row\" alignItems=\"center\" height=\"100%\">\n <Typography variant=\"body2\" noWrap width=\"fit-content\">\n {isCurrency ? fCurrencyBRL(Number(value)) : fNumber(Number(value))}\n </Typography>\n </Stack>\n );\n};\n\nexport default memo(NumberRenderer);\n","import { memo, ReactNode } from 'react';\n\nimport { StatusRendererProps } from './props';\nimport { StatusLabel } from './style';\n\nconst StatusRenderer = ({\n active,\n activeLabel = 'Ativo',\n inactiveLabel = 'Inativo',\n}: StatusRendererProps): ReactNode => {\n return (\n <StatusLabel isActive={active}>\n {active ? activeLabel : inactiveLabel}\n </StatusLabel>\n );\n};\n\nexport default memo(StatusRenderer);\n","import { memo, ReactNode } from 'react';\nimport Stack from '@mui/material/Stack';\nimport Typography from '@mui/material/Typography';\n\nimport CopyButton from 'components/CopyButton';\n\nimport { TextRendererProps } from './props';\n\nconst sanitizeHtml = (text: string): string => {\n const withoutTags = text.replace(/<[^>]*>/g, '');\n return (\n withoutTags\n .replace(/ /g, ' ')\n .replace(/&/g, '&')\n .replace(/</g, '<')\n .replace(/>/g, '>')\n .replace(/"/g, '\"')\n // prettier-ignore\n .replace(/'/g, '\\'')\n .trim()\n );\n};\n\nconst TextRenderer = ({\n value,\n showCopyButton = false,\n copyMessage = 'Copiado',\n copyLabel,\n mask,\n}: TextRendererProps): ReactNode => {\n if (!value) return '-';\n\n const stringValue = String(value);\n const formattedValue = mask ? mask(stringValue) : sanitizeHtml(stringValue);\n\n if (showCopyButton) {\n return (\n <Stack direction=\"row\" gap={1} alignItems=\"center\">\n <Typography variant=\"body2\" noWrap>\n {formattedValue}\n </Typography>\n <CopyButton\n toCopy={stringValue}\n message={copyMessage}\n label={copyLabel}\n />\n </Stack>\n );\n }\n\n return formattedValue;\n};\n\nexport default memo(TextRenderer);\n","import { ReactNode } from 'react';\nimport { Field } from 'model/entity-metadata';\n\nimport { CURRENCY_FIELD_NAMES } from '../constants/columnDefaults';\nimport { CellRenderer, DynamicRowData } from '../props';\nimport {\n DateRenderer,\n DateTimeRenderer,\n EntityRenderer,\n NumberRenderer,\n StatusRenderer,\n TextRenderer,\n} from '../renderers';\n\nfunction getIsCurrency(fieldName: string): boolean {\n return CURRENCY_FIELD_NAMES.includes(fieldName);\n}\n\nexport const createCellRenderer = <T extends object = object>(context: {\n onRowAction?: (rowId: string, row: DynamicRowData<T>) => ReactNode;\n}): CellRenderer<T> => {\n const { onRowAction } = context;\n\n const CellRendererComponent = (\n field: Field,\n row: DynamicRowData<T>,\n ): ReactNode => {\n const value = row[field.name];\n\n if (field.name === 'ACTIONS') {\n return onRowAction?.(row.id, row);\n }\n\n switch (field.type) {\n case 'BOOLEAN':\n return (\n <StatusRenderer\n active={Boolean(value)}\n activeLabel=\"Ativo\"\n inactiveLabel=\"Inativo\"\n />\n );\n\n case 'DATE':\n return <DateRenderer value={value} />;\n\n case 'DATETIME':\n return <DateTimeRenderer value={value} />;\n\n case 'DECIMAL':\n case 'INTEGER':\n return (\n <NumberRenderer\n value={value}\n isCurrency={getIsCurrency(field.name)}\n />\n );\n\n case 'FILE':\n case 'ENTITY':\n return <EntityRenderer value={value} field={field} />;\n case 'TEXT':\n default:\n return <TextRenderer value={value} />;\n }\n };\n\n CellRendererComponent.displayName = 'CellRendererComponent';\n return CellRendererComponent;\n};\n","import { GridColumnVisibilityModel } from '@mui/x-data-grid-premium';\nimport { EntityMetadataResponse } from 'model/entity-metadata';\n\ninterface BuildVisibleFieldsParams {\n metadata?: EntityMetadataResponse;\n columnVisibilityModel?: GridColumnVisibilityModel;\n preferredFieldOrder?: string[];\n}\n\nexport const buildVisibleFields = ({\n metadata,\n columnVisibilityModel,\n preferredFieldOrder,\n}: BuildVisibleFieldsParams): string[] | undefined => {\n if (!metadata?.fields) return undefined;\n\n const allFields = metadata.fields.map(f => f.name);\n\n const visible = allFields.filter(fieldName => {\n if (fieldName === 'ACTIONS') return false;\n return columnVisibilityModel?.[fieldName] !== false;\n });\n\n if (!preferredFieldOrder) return visible;\n\n return visible.sort((a, b) => {\n const rawA = preferredFieldOrder.indexOf(a);\n const rawB = preferredFieldOrder.indexOf(b);\n const indexA = rawA === -1 ? Infinity : rawA;\n const indexB = rawB === -1 ? Infinity : rawB;\n\n return indexA - indexB || 0;\n });\n};\n"]}
|
|
1
|
+
{"version":3,"sources":["../../../src/components/DynamicDataView/DynamicDataView.tsx","../../../src/components/DynamicDataView/components/FilterButton.tsx","../../../src/components/DynamicDataView/components/FiltersSection.tsx","../../../src/components/DynamicDataView/components/filters/FiltersContainer.tsx","../../../src/components/DynamicDataView/components/filters/FiltersContent.tsx","../../../src/components/DynamicDataView/utils/filter.ts","../../../src/components/DynamicDataView/components/filters/FiltersList.tsx","../../../src/components/DynamicDataView/components/filters/FilterRow.tsx","../../../src/components/DynamicDataView/constants/filter.ts","../../../src/components/DynamicDataView/components/filters/EntityFilter.tsx","../../../src/components/DynamicDataView/components/filters/OperatorSelect.tsx","../../../src/components/DynamicDataView/components/filters/styles.ts","../../../src/components/DynamicDataView/components/SortModal/index.tsx","../../../src/components/DynamicDataView/components/SortModal/style.ts","../../../src/components/DynamicDataView/hooks/useColumnOrdering.ts","../../../src/components/DynamicDataView/hooks/useColumnVisibility.ts","../../../src/components/DynamicDataView/hooks/useDynamicColumns.ts","../../../src/components/DynamicDataView/constants/columnDefaults.ts","../../../src/components/DynamicDataView/utils/columnStrategies.ts","../../../src/components/DynamicDataView/hooks/useFilters.ts","../../../src/components/DynamicDataView/hooks/useFilterSortStorage.ts","../../../src/components/DynamicDataView/hooks/useSorting.ts","../../../src/components/DynamicDataView/utils/addActionsField.ts","../../../src/components/DynamicDataView/renderers/DateRenderer.ts","../../../src/components/DynamicDataView/renderers/DateTimeRenderer.ts","../../../src/components/DynamicDataView/renderers/EntityRenderer.tsx","../../../src/components/DynamicDataView/renderers/IconRenderer.tsx","../../../src/components/DynamicDataView/renderers/ImageRenderer.tsx","../../../src/components/DynamicDataView/renderers/style.ts","../../../src/components/DynamicDataView/renderers/NameRenderer.tsx","../../../src/components/DynamicDataView/renderers/NumberRenderer.tsx","../../../src/components/DynamicDataView/renderers/StatusRenderer.tsx","../../../src/components/DynamicDataView/renderers/TextRenderer.tsx","../../../src/components/DynamicDataView/utils/createCellRenderer.tsx","../../../src/components/DynamicDataView/utils/fields.ts"],"names":["memo","useCallback","useMemo","useState","isEqual","Badge","Button","IconButton","Stack","jsx","jsxs","FilterButton","showFilterButton","isMobile","hasActiveFilters","activeFiltersCount","sort","onFilterClick","onSortClick","Icon_default","ToolbarActionsDivider","FilterButton_default","Divider","Typography","getFilterableFields","fields","field","getDefaultCondition","type","available_filter_conditions","isValidCondition","condition","buildFilterFromConditions","conditions","validConditions","c","FormControl","InputLabel","MenuItem","Select","TextField","CONDITION_LABELS","EntityFilter","config","metadata","value","initialLabel","onChange","disabled","open","toggleOpen","setOpen","useToggle_default","inputValue","setInputValue","debouncedSearch","useDebounceValue_default","data","isLoading","isFetching","loading","selectedOption","options","items","item","opt","handleClose","handleChange","newValue","option","handleInputChange","_event","newInputValue","reason","Autocomplete_default","x","EntityFilter_default","OperatorSelect","totalConditions","isFirst","e","OperatorSelect_default","ellipsisStyle","FilterRow","onRemove","entityFilterConfig","selectedField","f","availableConditions","isValueDisabled","handleFieldChange","fieldName","newField","defaultCondition","handleConditionChange","conditional","handleValueChange","handleEntityValueChange","label","valueLabels","handleOperatorChange","operator","renderValueInput","currentValue","cond","FilterRow_default","Fragment","FiltersList","filterableFields","onUpdateCondition","onRemoveCondition","handleUpdateCondition","updated","handleRemoveCondition","id","usedFieldNames","name","getAvailableFields","currentFieldName","index","FiltersList_default","Box","styled","Container","Header","theme","Content","Footer","FiltersContent","onClose","onAddCondition","onApply","onClear","onCancel","hasConditions","handleApply","handleClear","handleCancel","FiltersContent_default","FiltersContainer","props","ResponsivePopover_default","FiltersContainer_default","FiltersSection","isOpen","filterAnchorEl","FiltersSection_default","useEffect","Dialog","DialogActions","DialogContent","DialogTitle","StyledDialog","StyledDialogTitle","StyledDialogContent","StyledDialogActions","ApplyButton","LabelButton","SortModal","onSortChange","setSelectedField","selectedDirection","setSelectedDirection","sortableFields","selectedFieldObj","isNumberField","SortModal_default","useColumnOrdering","columns","preferredFieldOrder","columnsByFieldId","column","fieldsByName","actionFieldName","preferredWithoutActions","usedColumnFieldIds","ordered","pushColumnForField","EMPTY_MODEL","useColumnVisibility","columnVisibilityStorageKey","onColumnVisibilityModelChange","hasStorageKey","storedVisibilityModel","setStoredVisibilityModel","useLocalStorage_default","columnVisibilityModel","handleColumnVisibilityModelChange","model","modelToSave","COLUMN_DEFAULTS","ACCESS_TYPES","CURRENCY_FIELD_NAMES","createImageColumn","renderCell","params","createIdColumn","createEntityColumn","createDefaultColumn","createActionsColumn","getColumnStrategy","useDynamicColumns","columnStrategies","columnsMap","useRef","parseInitialConditions","initialFilter","uuidv4","useFilters","setIsOpen","appliedConditions","setAppliedConditions","appliedFilter","setAppliedFilter","setConditions","snapshotRef","openDrawer","closeDrawer","addCondition","availableFields","currentOperator","firstField","newCondition","prev","updateCondition","changes","targetCondition","newOperator","removeCondition","clearAllFilters","applyFilters","filter","cancelChanges","getStoredValue","key","setStoredValue","useFilterStorage","storageKey","externalFilter","onFilterChange","filterKey","internalFilter","setInternalFilter","handleFilterChange","newFilter","useSortStorage","externalSort","sortKey","internalSort","setInternalSort","handleSortChange","newSort","resolveApiFieldName","resolveColumnFieldName","useSorting","sortModel","handleSortModelChange","firstItem","createActionsField","addActionsFieldToMetadata","DateRenderer","format","fDate","DateRenderer_default","DateTimeRenderer","fDateTime","DateTimeRenderer_default","Chip","EntityRenderer","entityValue","EntityRenderer_default","IconRenderer","trueIcon","falseIcon","color","width","IconRenderer_default","StatusLabel","isActive","ImageContainer","prop","size","noImage","clickable","ImageRenderer","imageResourceId","getImageUrl","alt","onClick","sx","hasImage","imageUrl","ImageRenderer_default","NameRenderer","displayName","copyMessage","CopyButton_default","NameRenderer_default","NumberRenderer","isCurrency","fCurrencyBRL","fNumber","NumberRenderer_default","StatusRenderer","active","activeLabel","inactiveLabel","StatusRenderer_default","sanitizeHtml","text","TextRenderer","showCopyButton","copyLabel","mask","stringValue","formattedValue","TextRenderer_default","getIsCurrency","createCellRenderer","context","onRowAction","CellRendererComponent","row","DynamicDataView","title","page","perPage","searchValue","onSearchChange","onSearch","onPaginationChange","onAdd","onRowDoubleClick","actions","moreActions","bulkActions","rowSelectionModel","onRowSelectionModelChange","slots","mobileRender","containerHeight","showColumnButton","rows","total","preloadedMetadata","firstRow","effectiveMetadata","effectiveMetadataFields","orderedColumns","handleRowDoubleClick","rowId","useResponsive_default","setFilterAnchorEl","storedFilter","setStoredFilter","storedSort","setStoredSort","effectiveFilter","effectiveSort","handleApplyFilters","handleClearFilters","handleFilterButtonClick","event","handleCancelFilters","isSortModalOpen","setIsSortModalOpen","handleFiltersClose","hasSelectionActions","DataView_default","DynamicDataView_default","buildVisibleFields","visible","a","b","rawA","rawB"],"mappings":"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","sourcesContent":["import { memo, useCallback, useMemo, useState } from 'react';\nimport isEqual from 'react-fast-compare';\nimport { AccessType, DataType } from 'model/entity-metadata';\n\nimport useResponsive from 'hooks/useResponsive';\n\nimport DataView from '../DataView';\n\nimport FilterButton from './components/FilterButton';\nimport FiltersSection from './components/FiltersSection';\nimport SortModal from './components/SortModal';\nimport { useColumnOrdering } from './hooks/useColumnOrdering';\nimport { useColumnVisibility } from './hooks/useColumnVisibility';\nimport { useDynamicColumns } from './hooks/useDynamicColumns';\nimport { useFilters } from './hooks/useFilters';\nimport { useFilterStorage, useSortStorage } from './hooks/useFilterSortStorage';\nimport { useSorting } from './hooks/useSorting';\nimport { addActionsFieldToMetadata } from './utils/addActionsField';\nimport { createCellRenderer } from './utils/createCellRenderer';\nimport { DynamicDataViewProps, DynamicRowData } from './props';\n\nconst DynamicDataView = <T extends object = object>({\n title,\n metadata,\n data,\n isLoading,\n isFetching,\n page,\n perPage,\n searchValue,\n onSearchChange,\n onSearch,\n onPaginationChange,\n onAdd,\n onRowAction,\n onRowDoubleClick,\n actions,\n moreActions,\n bulkActions,\n rowSelectionModel,\n onRowSelectionModelChange,\n slots,\n mobileRender,\n containerHeight = 600,\n showColumnButton = false,\n showFilterButton = false,\n filter,\n onFilterChange,\n sort,\n onSortChange,\n preferredFieldOrder,\n columnStrategies,\n onColumnVisibilityModelChange,\n storageKey,\n entityFilterConfig,\n}: DynamicDataViewProps<T>) => {\n const { items: rows = [], total = 0 } = data || {};\n\n // Criar metadata temporário baseado em data quando metadata não disponível\n const preloadedMetadata = useMemo(() => {\n if (metadata) return metadata;\n\n // Se não tem metadata mas tem dados, criar metadata baseado nas keys do primeiro item\n if (rows.length > 0) {\n const firstRow = rows[0];\n const fields = Object.keys(firstRow).map(key => ({\n name: key,\n type: DataType.TEXT,\n description: key,\n filter_field_name: null,\n metadata: null,\n access_type: AccessType.READ_ONLY,\n relation_field_name: null,\n available_filter_conditions: [],\n }));\n\n return {\n name: 'loading',\n description: 'Loading...',\n id_field_name: 'id',\n description_field_name: fields[0]?.name || 'id',\n access_type: AccessType.READ_ONLY,\n fields,\n };\n }\n\n return undefined;\n }, [metadata, rows]);\n\n const effectiveMetadata = useMemo(\n () =>\n preloadedMetadata && onRowAction\n ? addActionsFieldToMetadata(preloadedMetadata)\n : preloadedMetadata,\n [preloadedMetadata, onRowAction],\n );\n\n const effectiveMetadataFields = useMemo(\n () => effectiveMetadata?.fields || [],\n [effectiveMetadata],\n );\n\n const renderCell = useMemo(\n () =>\n createCellRenderer<T>({\n onRowAction,\n }),\n [onRowAction],\n );\n\n const columns = useDynamicColumns<T>({\n metadata: effectiveMetadata,\n renderCell,\n columnStrategies,\n });\n\n const { orderedColumns } = useColumnOrdering({\n columns,\n fields: effectiveMetadata?.fields,\n preferredFieldOrder,\n });\n\n const { columnVisibilityModel, handleColumnVisibilityModelChange } =\n useColumnVisibility({\n columnVisibilityStorageKey: `${storageKey}:columns`,\n onColumnVisibilityModelChange,\n });\n\n const handleRowDoubleClick = useCallback(\n (params: { id: string | number; row: DynamicRowData<T> }) => {\n if (!onRowDoubleClick) return;\n\n const rowId = params.id?.toString() || '';\n onRowDoubleClick(rowId, params.row);\n },\n [onRowDoubleClick],\n );\n\n const isMobile = useResponsive('down', 'md');\n const [filterAnchorEl, setFilterAnchorEl] = useState<HTMLElement | null>(\n null,\n );\n\n const { filter: storedFilter, setFilter: setStoredFilter } = useFilterStorage(\n storageKey,\n filter,\n onFilterChange,\n );\n\n const { sort: storedSort, setSort: setStoredSort } = useSortStorage(\n storageKey,\n sort,\n onSortChange,\n );\n\n const effectiveFilter = filter ?? storedFilter;\n const effectiveSort = sort ?? storedSort;\n\n const { sortModel, handleSortModelChange } = useSorting({\n sort: effectiveSort,\n onSortChange: setStoredSort,\n fields: effectiveMetadataFields,\n });\n\n const {\n conditions,\n isOpen,\n openDrawer,\n closeDrawer,\n addCondition,\n updateCondition,\n removeCondition,\n clearAllFilters,\n applyFilters,\n cancelChanges,\n hasActiveFilters,\n activeFiltersCount,\n } = useFilters({\n fields: effectiveMetadataFields,\n initialFilter: effectiveFilter,\n });\n\n const handleApplyFilters = useCallback(() => {\n const newFilter = applyFilters();\n setStoredFilter(newFilter);\n }, [applyFilters, setStoredFilter]);\n\n const handleClearFilters = useCallback(() => {\n clearAllFilters();\n setStoredFilter(undefined);\n }, [clearAllFilters, setStoredFilter]);\n\n const handleFilterButtonClick = useCallback(\n (event: React.MouseEvent<HTMLElement>) => {\n if (isMobile) {\n openDrawer();\n } else {\n openDrawer();\n setFilterAnchorEl(event.currentTarget);\n }\n },\n [isMobile, openDrawer],\n );\n\n const handleCancelFilters = useCallback(() => {\n cancelChanges();\n setFilterAnchorEl(null);\n }, [cancelChanges]);\n\n const [isSortModalOpen, setIsSortModalOpen] = useState(false);\n\n const handleFiltersClose = useCallback(() => {\n setFilterAnchorEl(null);\n closeDrawer();\n }, [closeDrawer]);\n const hasSelectionActions = !!bulkActions?.length;\n\n return (\n <>\n <DataView<DynamicRowData<T>>\n title={title}\n columns={orderedColumns}\n rows={rows}\n mobileRender={mobileRender}\n rowCount={total}\n loading={isLoading || !metadata}\n fetching={isFetching}\n searchValue={searchValue}\n onSearch={onSearch}\n onSearchChange={onSearchChange}\n paginationModel={{\n page,\n pageSize: perPage,\n }}\n onPaginationChange={onPaginationChange}\n actions={actions}\n moreActions={moreActions}\n onAdd={onAdd}\n onRowDoubleClick={onRowDoubleClick ? handleRowDoubleClick : undefined}\n bulkActions={bulkActions}\n checkboxSelection={hasSelectionActions}\n rowSelectionModel={rowSelectionModel}\n onRowSelectionModelChange={onRowSelectionModelChange}\n keepNonExistentRowsSelected={hasSelectionActions}\n disableRowSelectionOnClick\n slots={slots}\n columnVisibilityModel={columnVisibilityModel}\n showColumnButton={showColumnButton}\n containerProps={{\n height: containerHeight,\n maxHeight: containerHeight,\n }}\n onColumnVisibilityModelChange={handleColumnVisibilityModelChange}\n filterButton={\n <FilterButton\n showFilterButton={showFilterButton}\n isMobile={isMobile}\n hasActiveFilters={hasActiveFilters}\n activeFiltersCount={activeFiltersCount}\n sort={effectiveSort}\n onFilterClick={handleFilterButtonClick}\n onSortClick={() => setIsSortModalOpen(true)}\n />\n }\n sortingMode=\"server\"\n sortModel={sortModel}\n onSortModelChange={handleSortModelChange}\n disableColumnFilter\n />\n {metadata && (\n <>\n <FiltersSection\n showFilterButton={showFilterButton}\n isOpen={isOpen}\n filterAnchorEl={filterAnchorEl}\n fields={effectiveMetadataFields}\n conditions={conditions}\n isMobile={isMobile}\n onClose={handleFiltersClose}\n onAddCondition={addCondition}\n onUpdateCondition={updateCondition}\n onRemoveCondition={removeCondition}\n onApply={handleApplyFilters}\n onClear={handleClearFilters}\n onCancel={handleCancelFilters}\n entityFilterConfig={entityFilterConfig}\n />\n\n <SortModal\n open={isSortModalOpen}\n onClose={() => setIsSortModalOpen(false)}\n fields={effectiveMetadataFields}\n sort={effectiveSort}\n onSortChange={setStoredSort}\n />\n </>\n )}\n </>\n );\n};\n\nexport default memo(DynamicDataView, isEqual) as typeof DynamicDataView;\nexport type { DynamicDataViewProps, DynamicRowData } from './props';\n","import { memo } from 'react';\nimport isEqual from 'react-fast-compare';\nimport Badge from '@mui/material/Badge';\nimport Button from '@mui/material/Button';\nimport IconButton from '@mui/material/IconButton';\nimport Stack from '@mui/material/Stack';\n\nimport { ToolbarActionsDivider } from 'components/DataView';\nimport Icon from 'components/Icon';\n\nimport { FilterButtonProps } from '../props';\n\nconst FilterButton = ({\n showFilterButton,\n isMobile,\n hasActiveFilters,\n activeFiltersCount,\n sort,\n onFilterClick,\n onSortClick,\n}: FilterButtonProps) => {\n if (!showFilterButton) return null;\n\n if (isMobile) {\n return (\n <Stack direction=\"row\" spacing={0.5}>\n <Badge\n badgeContent={activeFiltersCount}\n color=\"primary\"\n invisible={activeFiltersCount === 0}\n sx={{\n '& .MuiBadge-badge': {\n transform: 'scale(0.9) translate(10px, 9px)',\n opacity: activeFiltersCount === 0 ? 0 : 1,\n },\n }}\n >\n <IconButton\n color={hasActiveFilters ? 'primary' : 'default'}\n onClick={onFilterClick}\n size=\"small\"\n aria-label=\"Filtrar\"\n sx={{ overflow: 'visible' }}\n >\n <Icon icon=\"FILTER_VERTICAL\" />\n </IconButton>\n </Badge>\n\n <ToolbarActionsDivider\n sx={{ height: 16 }}\n orientation=\"vertical\"\n flexItem\n />\n\n <IconButton\n color={sort ? 'primary' : 'default'}\n onClick={onSortClick}\n size=\"small\"\n aria-label=\"Ordenar\"\n >\n <Icon\n icon={sort?.sortType === 'DESC' ? 'SORTING_DESC' : 'SORTING_ASC'}\n />\n </IconButton>\n </Stack>\n );\n }\n\n return (\n <Badge\n badgeContent={activeFiltersCount}\n color=\"primary\"\n invisible={activeFiltersCount === 0}\n sx={{\n '& .MuiBadge-badge': activeFiltersCount\n ? {\n transform: 'scale(0.9) translate(-3px, 7px)',\n position: 'relative',\n opacity: 1,\n transition: 'none',\n }\n : {\n transition: 'none',\n opacity: 0,\n },\n }}\n >\n <Button\n variant=\"text\"\n color={hasActiveFilters ? 'primary' : 'inherit'}\n startIcon={<Icon icon=\"FILTER_VERTICAL\" />}\n onClick={onFilterClick}\n size=\"small\"\n >\n Filtrar\n </Button>\n </Badge>\n );\n};\n\nexport default memo(FilterButton, isEqual);\n","import { memo } from 'react';\nimport isEqual from 'react-fast-compare';\n\nimport { FiltersSectionProps } from '../props';\n\nimport FiltersContainer from './filters/FiltersContainer';\n\nconst FiltersSection = ({\n showFilterButton,\n isOpen,\n filterAnchorEl,\n fields,\n conditions,\n isMobile,\n onClose,\n onAddCondition,\n onUpdateCondition,\n onRemoveCondition,\n onApply,\n onClear,\n onCancel,\n entityFilterConfig,\n}: FiltersSectionProps) => {\n if (!showFilterButton) return null;\n\n return (\n <FiltersContainer\n open={isOpen || Boolean(filterAnchorEl)}\n anchorEl={filterAnchorEl}\n onClose={onClose}\n fields={fields}\n conditions={conditions}\n onAddCondition={onAddCondition}\n onUpdateCondition={onUpdateCondition}\n onRemoveCondition={onRemoveCondition}\n onApply={onApply}\n onClear={onClear}\n onCancel={onCancel}\n isMobileProp={isMobile}\n entityFilterConfig={entityFilterConfig}\n />\n );\n};\n\nexport default memo(FiltersSection, isEqual);\n","import { memo } from 'react';\nimport isEqual from 'react-fast-compare';\n\nimport ResponsivePopover from 'components/ResponsivePopover';\n\nimport FiltersContent from './FiltersContent';\nimport type { FiltersContainerProps } from './props';\n\nconst FiltersContainer = (props: FiltersContainerProps) => {\n return (\n <ResponsivePopover\n open={props.open}\n onClose={props.onClose}\n anchorEl={props.anchorEl}\n isMobile={props.isMobileProp}\n popoverProps={{\n slotProps: {\n paper: {\n sx: {\n width: 520,\n maxWidth: 'calc(100vw - 24px)',\n maxHeight: 600,\n mt: 1,\n },\n },\n },\n }}\n drawerProps={{\n anchor: 'right',\n PaperProps: {\n sx: {\n width: '100%',\n maxWidth: '100%',\n height: '100%',\n maxHeight: '100%',\n borderRadius: 0,\n },\n },\n }}\n >\n <FiltersContent {...props} />\n </ResponsivePopover>\n );\n};\n\nexport default memo(FiltersContainer, isEqual);\n","import { memo, useCallback } from 'react';\nimport isEqual from 'react-fast-compare';\nimport Button from '@mui/material/Button';\nimport Divider from '@mui/material/Divider';\nimport IconButton from '@mui/material/IconButton';\nimport Stack from '@mui/material/Stack';\nimport Typography from '@mui/material/Typography';\n\nimport Icon from 'components/Icon';\n\nimport { getFilterableFields } from '../../utils/filter';\n\nimport FiltersList from './FiltersList';\nimport type { FiltersPopoverProps } from './props';\nimport { Container, Content, Footer, Header } from './styles';\n\nconst FiltersContent = ({\n onClose,\n fields,\n conditions,\n onAddCondition,\n onUpdateCondition,\n onRemoveCondition,\n onApply,\n onClear,\n onCancel,\n entityFilterConfig,\n}: FiltersPopoverProps) => {\n const filterableFields = getFilterableFields(fields);\n const hasConditions = conditions.length > 0;\n\n const handleApply = useCallback(() => {\n onApply();\n onClose();\n }, [onApply, onClose]);\n\n const handleClear = useCallback(() => {\n onClear();\n onClose();\n }, [onClear, onClose]);\n\n const handleCancel = useCallback(() => {\n onCancel();\n }, [onCancel]);\n\n return (\n <Container>\n <Header>\n <Typography variant=\"overline\" fontWeight={600} color=\"text.secondary\">\n Defina as condições para filtrar\n </Typography>\n\n <IconButton\n onClick={onAddCondition}\n size=\"small\"\n aria-label=\"Adicionar filtro\"\n title=\"Adicionar filtro\"\n disabled={conditions.length >= filterableFields.length}\n >\n <Icon icon=\"SIMPLE_ADD\" />\n </IconButton>\n </Header>\n\n <Divider />\n\n <Content>\n <FiltersList\n filterableFields={filterableFields}\n conditions={conditions}\n onUpdateCondition={onUpdateCondition}\n onRemoveCondition={onRemoveCondition}\n entityFilterConfig={entityFilterConfig}\n />\n </Content>\n\n <Divider />\n\n <Footer>\n <Button variant=\"text\" color=\"inherit\" onClick={handleClear}>\n Limpar\n </Button>\n\n <Stack direction=\"row\" spacing={1}>\n <Button\n variant=\"outlined\"\n color=\"inherit\"\n onClick={handleCancel}\n startIcon={<Icon icon=\"CANCEL_CIRCLE\" />}\n >\n Cancelar\n </Button>\n <Button\n variant=\"contained\"\n onClick={handleApply}\n disabled={!hasConditions}\n startIcon={<Icon icon=\"SIMPLE_CHECK\" />}\n >\n Aplicar\n </Button>\n </Stack>\n </Footer>\n </Container>\n );\n};\n\nexport default memo(FiltersContent, isEqual);\n","import { Condition, DataType, Field } from 'model/entity-metadata';\nimport {\n Filter,\n FilterCondition,\n FilterOperator,\n FilterState,\n} from 'model/filter';\n\n/**\n * Campos filtráveis (campos com condições disponíveis)\n */\nexport const getFilterableFields = (fields: Field[]): Field[] => {\n return fields.filter(\n field =>\n field.available_filter_conditions &&\n field.available_filter_conditions.length > 0 &&\n field.name !== 'ACTIONS',\n );\n};\n\n/**\n * Converte FilterState para formato de API\n */\nexport const buildFilterFromState = (\n state: FilterState,\n): Filter | undefined => {\n const entries = Object.entries(state).filter(\n ([, value]) => value.value.length > 0,\n );\n if (entries.length === 0) return undefined;\n return {\n operator: FilterOperator.AND,\n groups: [\n {\n operator: FilterOperator.AND,\n conditionals: entries.map(([, filterValue]) => ({\n fieldName: filterValue.fieldName,\n conditional: filterValue.conditional,\n value: filterValue.value,\n })),\n },\n ],\n };\n};\n\n/**\n * Retorna o conditional padrão para um tipo de campo\n */\nexport const getDefaultCondition = (field: Field): Condition => {\n const { type, available_filter_conditions } = field;\n if (available_filter_conditions.length === 0) return Condition.EQUALS;\n if (\n type === DataType.TEXT &&\n available_filter_conditions.includes(Condition.LIKE)\n ) {\n return Condition.LIKE;\n }\n return available_filter_conditions[0];\n};\n\n/**\n * Verifica se uma condição é válida (tem valor ou não requer valor)\n */\nexport const isValidCondition = (condition: FilterCondition): boolean => {\n return (\n condition.value.length > 0 ||\n condition.conditional === Condition.IS_NULL ||\n condition.conditional === Condition.IS_NOT_NULL\n );\n};\n\n/**\n * Converte array de FilterCondition para Filter API\n */\nexport const buildFilterFromConditions = (\n conditions: FilterCondition[],\n): Filter | undefined => {\n if (conditions.length === 0) return undefined;\n\n const validConditions = conditions.filter(isValidCondition);\n if (validConditions.length === 0) return undefined;\n\n return {\n operator: FilterOperator.AND,\n groups: [\n {\n operator: validConditions[0]?.operator || FilterOperator.AND,\n conditionals: validConditions.map(c => ({\n fieldName: c.fieldName,\n conditional: c.conditional,\n value: c.value,\n valueLabels: c.valueLabels,\n })),\n },\n ],\n };\n};\n","import { memo, useCallback, useMemo } from 'react';\nimport isEqual from 'react-fast-compare';\nimport Typography from '@mui/material/Typography';\nimport type { FilterCondition } from 'model/filter';\n\nimport FilterRow from './FilterRow';\nimport type { FiltersListProps } from './props';\n\nconst FiltersList = ({\n filterableFields,\n conditions,\n onUpdateCondition,\n onRemoveCondition,\n entityFilterConfig,\n}: FiltersListProps) => {\n const handleUpdateCondition = useCallback(\n (updated: FilterCondition) => {\n onUpdateCondition(updated.id, updated);\n },\n [onUpdateCondition],\n );\n\n const handleRemoveCondition = useCallback(\n (id: string) => () => {\n onRemoveCondition(id);\n },\n [onRemoveCondition],\n );\n\n const usedFieldNames = useMemo(\n () =>\n conditions.map(c => c.fieldName).filter((name): name is string => !!name),\n [conditions],\n );\n\n const getAvailableFields = useCallback(\n (currentFieldName: string | undefined) =>\n filterableFields.filter(\n field =>\n !usedFieldNames.includes(field.name) ||\n field.name === currentFieldName,\n ),\n [filterableFields, usedFieldNames],\n );\n\n if (filterableFields.length === 0) {\n return (\n <Typography variant=\"body2\" color=\"text.secondary\" textAlign=\"center\">\n Nenhum filtro disponível\n </Typography>\n );\n }\n\n if (conditions.length === 0) {\n return (\n <Typography variant=\"body2\" color=\"text.secondary\" textAlign=\"center\">\n Clique em{' '}\n <Typography\n component=\"strong\"\n variant=\"body2\"\n fontWeight={600}\n color=\"text.primary\"\n >\n "+"\n </Typography>{' '}\n para adicionar um filtro\n </Typography>\n );\n }\n\n return (\n <>\n {conditions.map((condition, index) => (\n <FilterRow\n key={condition.id}\n condition={condition}\n fields={getAvailableFields(condition.fieldName)}\n onChange={handleUpdateCondition}\n onRemove={handleRemoveCondition(condition.id)}\n showOperator={index > 0}\n totalConditions={conditions.length}\n isFirst={index === 0}\n entityFilterConfig={entityFilterConfig}\n />\n ))}\n </>\n );\n};\n\nexport default memo(FiltersList, isEqual);\n","import { memo, useCallback, useMemo } from 'react';\nimport isEqual from 'react-fast-compare';\nimport FormControl from '@mui/material/FormControl';\nimport IconButton from '@mui/material/IconButton';\nimport InputLabel from '@mui/material/InputLabel';\nimport MenuItem from '@mui/material/MenuItem';\nimport Select from '@mui/material/Select';\nimport Stack from '@mui/material/Stack';\nimport TextField from '@mui/material/TextField';\nimport { Condition } from 'model/entity-metadata';\nimport { FilterOperator } from 'model/filter';\n\nimport Icon from 'components/Icon';\n\nimport { CONDITION_LABELS } from '../../constants/filter';\n\nimport EntityFilter from './EntityFilter';\nimport OperatorSelect from './OperatorSelect';\nimport type { FilterRowProps } from './props';\n\nconst ellipsisStyle = {\n whiteSpace: 'nowrap',\n overflow: 'hidden',\n textOverflow: 'ellipsis',\n} as const;\n\nconst FilterRow = ({\n condition,\n fields,\n onChange,\n onRemove,\n totalConditions,\n isFirst,\n entityFilterConfig,\n}: FilterRowProps) => {\n const selectedField = useMemo(\n () =>\n fields.find(f => (f.filter_field_name ?? f.name) === condition.fieldName),\n [fields, condition.fieldName],\n );\n\n const availableConditions = useMemo(\n () => selectedField?.available_filter_conditions || [],\n [selectedField],\n );\n\n const isValueDisabled = useMemo(\n () =>\n !condition.fieldName ||\n condition.conditional === 'IS_NULL' ||\n condition.conditional === 'IS_NOT_NULL',\n [condition.fieldName, condition.conditional],\n );\n\n const handleFieldChange = useCallback(\n (fieldName: string) => {\n const newField = fields.find(\n f => (f.filter_field_name ?? f.name) === fieldName,\n );\n if (!newField) return;\n\n const defaultCondition =\n newField.available_filter_conditions[0] || 'EQUALS';\n\n onChange({\n ...condition,\n fieldName,\n conditional: defaultCondition,\n value: [],\n });\n },\n [fields, condition, onChange],\n );\n\n const handleConditionChange = useCallback(\n (conditional: Condition) => {\n onChange({\n ...condition,\n conditional,\n });\n },\n [condition, onChange],\n );\n\n const handleValueChange = useCallback(\n (value: string) => {\n onChange({\n ...condition,\n value: value ? [value] : [],\n });\n },\n [condition, onChange],\n );\n\n const handleEntityValueChange = useCallback(\n (value: string, label?: string) => {\n const valueLabels = { ...condition.valueLabels };\n if (value && label) {\n valueLabels[value] = label;\n }\n onChange({\n ...condition,\n value: value ? [value] : [],\n valueLabels,\n });\n },\n [condition, onChange],\n );\n\n const handleOperatorChange = useCallback(\n (operator: FilterOperator) => {\n onChange({\n ...condition,\n operator,\n });\n },\n [condition, onChange],\n );\n\n const renderValueInput = () => {\n if (selectedField?.type === 'BOOLEAN') {\n return (\n <FormControl\n size=\"small\"\n sx={{ flex: 1, minWidth: 120 }}\n disabled={isValueDisabled}\n >\n <InputLabel id={`value-label-${condition.id}`}>Valor</InputLabel>\n <Select\n labelId={`value-label-${condition.id}`}\n label=\"Valor\"\n value={condition.value[0] || ''}\n onChange={e => handleValueChange(e.target.value)}\n size=\"small\"\n sx={{\n '& .MuiSelect-select': ellipsisStyle,\n }}\n >\n <MenuItem value=\"true\">Verdadeiro</MenuItem>\n <MenuItem value=\"false\">Falso</MenuItem>\n </Select>\n </FormControl>\n );\n }\n\n if (\n selectedField?.type === 'ENTITY' &&\n selectedField.metadata &&\n entityFilterConfig?.[selectedField.metadata.name]\n ) {\n const currentValue = condition.value[0] || '';\n\n return (\n <EntityFilter\n config={entityFilterConfig[selectedField.metadata.name]}\n metadata={selectedField.metadata}\n value={currentValue}\n initialLabel={condition.valueLabels?.[currentValue]}\n onChange={handleEntityValueChange}\n disabled={isValueDisabled}\n />\n );\n }\n\n return (\n <TextField\n label=\"Filtro\"\n value={condition.value[0] || ''}\n onChange={e => handleValueChange(e.target.value)}\n size=\"small\"\n disabled={isValueDisabled}\n InputLabelProps={{ shrink: true }}\n sx={{ flex: 1, minWidth: 120 }}\n />\n );\n };\n\n return (\n <Stack direction=\"row\" spacing={1} alignItems=\"center\">\n <IconButton\n onClick={onRemove}\n size=\"small\"\n aria-label=\"Remover filtro\"\n sx={{ flexShrink: 0 }}\n >\n <Icon icon=\"CLOSE_MARK_BUTTON\" width={18} />\n </IconButton>\n\n <OperatorSelect\n value={condition.operator}\n onChange={handleOperatorChange}\n totalConditions={totalConditions}\n isFirst={isFirst}\n />\n\n <FormControl size=\"small\" sx={{ minWidth: 150, flex: 1 }}>\n <InputLabel id={`field-label-${condition.id}`}>Coluna</InputLabel>\n <Select\n labelId={`field-label-${condition.id}`}\n label=\"Coluna\"\n value={condition.fieldName}\n onChange={e => handleFieldChange(e.target.value)}\n size=\"small\"\n sx={{\n '& .MuiSelect-select': ellipsisStyle,\n }}\n >\n {fields.map(field => (\n <MenuItem\n key={field.name}\n value={field.filter_field_name ?? field.name}\n sx={ellipsisStyle}\n title={field.description || field.name}\n >\n {field.description || field.name}\n </MenuItem>\n ))}\n </Select>\n </FormControl>\n\n <FormControl\n size=\"small\"\n sx={{ minWidth: 90 }}\n disabled={!condition.fieldName}\n >\n <InputLabel id={`condition-label-${condition.id}`}>Condição</InputLabel>\n <Select\n labelId={`condition-label-${condition.id}`}\n label=\"Condição\"\n value={condition.conditional}\n onChange={e => handleConditionChange(e.target.value as Condition)}\n size=\"small\"\n sx={{\n '& .MuiSelect-select': ellipsisStyle,\n }}\n >\n {availableConditions.map(cond => (\n <MenuItem key={cond} value={cond} sx={ellipsisStyle}>\n {CONDITION_LABELS[cond as Condition] || cond}\n </MenuItem>\n ))}\n </Select>\n </FormControl>\n\n {renderValueInput()}\n </Stack>\n );\n};\n\nexport default memo(FilterRow, isEqual);\n","import { Condition } from 'model/entity-metadata';\n\nexport const CONDITION_LABELS: Record<Condition, string> = {\n [Condition.EQUALS]: 'Igual a',\n [Condition.NOT_EQUALS]: 'Diferente de',\n [Condition.LIKE]: 'Contém',\n [Condition.NOT_LIKE]: 'Não contém',\n [Condition.GREATER_THAN]: 'Maior que',\n [Condition.LESS_THAN]: 'Menor que',\n [Condition.GREATER_THAN_OR_EQUAL]: 'Maior ou igual a',\n [Condition.LESS_THAN_OR_EQUAL]: 'Menor ou igual a',\n [Condition.IN]: 'Em',\n [Condition.NOT_IN]: 'Não em',\n [Condition.IS_NULL]: 'É nulo',\n [Condition.IS_NOT_NULL]: 'Não é nulo',\n};\n","import { memo, useCallback, useMemo, useState } from 'react';\n\nimport Autocomplete from 'components/Autocomplete';\nimport useDebounceValue from 'hooks/useDebounceValue';\nimport useToggle from 'hooks/useToggle';\n\nimport type { EntityFilterOption, EntityFilterProps } from './props';\n\nconst EntityFilter = ({\n config,\n metadata,\n value,\n initialLabel,\n onChange,\n disabled = false,\n}: EntityFilterProps) => {\n const [open, toggleOpen, setOpen] = useToggle(false);\n const [inputValue, setInputValue] = useState('');\n const debouncedSearch = useDebounceValue(inputValue, 400);\n\n const { data, isLoading, isFetching } = config.useQuery(\n {\n search: debouncedSearch || undefined,\n page: 0,\n perPage: 25,\n ...config.queryParams,\n },\n {\n skip: !open,\n },\n );\n\n const loading = isLoading || isFetching;\n\n const selectedOption = useMemo<EntityFilterOption | null>(() => {\n if (!value) return null;\n return { value, label: initialLabel ?? value };\n }, [value, initialLabel]);\n\n const options = useMemo(() => {\n const items = (data?.items ?? [])\n .map(item => ({\n label: String(item[metadata.description_field_name] ?? ''),\n value: String(item[metadata.id_field_name] ?? ''),\n }))\n .filter(opt => opt.value && opt.label);\n\n if (\n selectedOption &&\n !items.some(opt => opt.value === selectedOption.value)\n ) {\n items.unshift(selectedOption);\n }\n\n return items;\n }, [\n data,\n metadata.id_field_name,\n metadata.description_field_name,\n selectedOption,\n ]);\n\n const handleClose = useCallback(() => {\n setOpen(false);\n setInputValue('');\n }, [setOpen]);\n\n const handleChange = useCallback(\n (newValue: unknown) => {\n if (typeof newValue !== 'string' || !newValue) {\n onChange('', undefined);\n return;\n }\n const option = options.find(opt => opt.value === newValue);\n onChange(newValue, option?.label);\n },\n [onChange, options],\n );\n\n const handleInputChange = useCallback(\n (_event: React.SyntheticEvent, newInputValue: string, reason: string) => {\n if (reason === 'input') {\n setInputValue(newInputValue);\n }\n },\n [],\n );\n\n return (\n <Autocomplete\n name={`entity-filter-${metadata.name}`}\n label=\"Filtro\"\n open={open}\n onOpen={toggleOpen}\n onClose={handleClose}\n value={value || ''}\n onChange={handleChange}\n inputValue={open ? inputValue : (selectedOption?.label ?? '')}\n onInputChange={handleInputChange}\n options={options}\n loading={loading}\n disabled={disabled}\n size=\"small\"\n filterOptions={x => x}\n noOptionsText={\n inputValue !== debouncedSearch ? 'Buscando...' : 'Nenhum resultado'\n }\n sx={{ flex: 1, minWidth: 120 }}\n />\n );\n};\n\nexport default memo(EntityFilter);\n","import { memo } from 'react';\nimport isEqual from 'react-fast-compare';\nimport MenuItem from '@mui/material/MenuItem';\nimport Select from '@mui/material/Select';\nimport Stack from '@mui/material/Stack';\nimport { FilterOperator } from 'model/filter';\n\nimport type { OperatorSelectProps } from './props';\n\nconst OperatorSelect = ({\n value,\n onChange,\n totalConditions,\n isFirst,\n}: OperatorSelectProps) => {\n if (totalConditions === 1) {\n return null;\n }\n\n if (isFirst) {\n return <Stack sx={{ width: 55, flexShrink: 0 }} />;\n }\n\n return (\n <Select\n value={value}\n onChange={e => onChange(e.target.value as FilterOperator)}\n size=\"small\"\n sx={{ width: 55, flexShrink: 0 }}\n >\n <MenuItem value={FilterOperator.AND}>e</MenuItem>\n <MenuItem value={FilterOperator.OR}>ou</MenuItem>\n </Select>\n );\n};\n\nexport default memo(OperatorSelect, isEqual);\n","import Box from '@mui/material/Box';\nimport { styled } from '@mui/material/styles';\n\n// Estilos baseados no Drawer/Popover para garantir consistência\nexport const Container = styled(Box)({\n display: 'flex',\n flexDirection: 'column',\n height: '100%',\n // No popover, a altura será controlada pelo max-height do container\n});\n\nexport const Header = styled(Box)(({ theme }) => ({\n display: 'flex',\n alignItems: 'center',\n justifyContent: 'space-between',\n padding: theme.spacing(2, 3),\n}));\n\nexport const Content = styled(Box)(({ theme }) => ({\n flex: 1,\n overflowY: 'auto',\n padding: theme.spacing(3),\n display: 'flex',\n flexDirection: 'column',\n gap: theme.spacing(2),\n}));\n\nexport const Footer = styled(Box)(({ theme }) => ({\n display: 'flex',\n alignItems: 'center',\n justifyContent: 'space-between',\n padding: theme.spacing(2),\n}));\n","import { memo, useCallback, useEffect, useMemo, useState } from 'react';\nimport Button from '@mui/material/Button';\nimport FormControl from '@mui/material/FormControl';\nimport InputLabel from '@mui/material/InputLabel';\nimport MenuItem from '@mui/material/MenuItem';\nimport Select from '@mui/material/Select';\nimport Stack from '@mui/material/Stack';\nimport Typography from '@mui/material/Typography';\nimport { SortType } from 'model/filter';\n\nimport Icon from 'components/Icon';\n\nimport { SortModalProps } from './props';\nimport {\n ApplyButton,\n LabelButton,\n StyledDialog,\n StyledDialogActions,\n StyledDialogContent,\n StyledDialogTitle,\n} from './style';\n\nconst SortModal = ({\n open,\n onClose,\n fields,\n sort,\n onSortChange,\n}: SortModalProps) => {\n const [selectedField, setSelectedField] = useState<string>(\n sort?.fieldName || '',\n );\n const [selectedDirection, setSelectedDirection] = useState<SortType>(\n sort?.sortType || SortType.ASC,\n );\n\n const sortableFields = useMemo(\n () =>\n fields.filter(\n field => field.name !== 'ACTIONS' && field.access_type !== 'WRITE_ONLY',\n ),\n [fields],\n );\n\n const selectedFieldObj = useMemo(\n () =>\n fields.find(\n field => (field.filter_field_name ?? field.name) === selectedField,\n ),\n [fields, selectedField],\n );\n\n const isNumberField =\n selectedFieldObj?.type === 'DECIMAL' ||\n selectedFieldObj?.type === 'INTEGER';\n\n useEffect(() => {\n if (open) {\n setSelectedField(sort?.fieldName || '');\n setSelectedDirection(sort?.sortType || SortType.ASC);\n }\n }, [open, sort]);\n\n const handleApply = useCallback(() => {\n if (onSortChange) {\n if (!selectedField) {\n onSortChange(undefined);\n } else {\n onSortChange({\n fieldName: selectedField,\n sortType: selectedDirection,\n });\n }\n }\n onClose();\n }, [onSortChange, selectedField, selectedDirection, onClose]);\n\n const handleClear = useCallback(() => {\n if (!onSortChange) return;\n\n setSelectedField('');\n setSelectedDirection(SortType.ASC);\n\n onSortChange(undefined);\n onClose();\n }, [onSortChange, onClose]);\n\n return (\n <StyledDialog open={open} onClose={onClose} maxWidth=\"xs\" fullWidth>\n <StyledDialogTitle>\n <Typography variant=\"overline\" color=\"text.secondary\">\n Ordenar por\n </Typography>\n </StyledDialogTitle>\n <StyledDialogContent>\n <Stack spacing={2} pt={2}>\n <FormControl fullWidth size=\"small\">\n <InputLabel id=\"sort-field-label\">Campo</InputLabel>\n <Select\n labelId=\"sort-field-label\"\n value={selectedField}\n label=\"Campo\"\n onChange={e => setSelectedField(e.target.value)}\n >\n <MenuItem value=\"\">\n <em>Nenhum</em>\n </MenuItem>\n {sortableFields.map(field => (\n <MenuItem\n key={field.name}\n value={field.filter_field_name ?? field.name}\n >\n {field.description || field.name}\n </MenuItem>\n ))}\n </Select>\n </FormControl>\n <FormControl fullWidth size=\"small\" disabled={!selectedField}>\n <InputLabel id=\"sort-direction-label\">Direção</InputLabel>\n <Select\n labelId=\"sort-direction-label\"\n value={selectedDirection}\n label=\"Direção\"\n onChange={e => setSelectedDirection(e.target.value as SortType)}\n >\n <MenuItem value={SortType.ASC}>\n Crescente {isNumberField ? '(1-9)' : '(A-Z)'}\n </MenuItem>\n <MenuItem value={SortType.DESC}>\n Decrescente {isNumberField ? '(9-1)' : '(Z-A)'}\n </MenuItem>\n </Select>\n </FormControl>\n </Stack>\n </StyledDialogContent>\n <StyledDialogActions>\n <Stack flex={1} width=\"100%\" direction=\"row\">\n <Button color=\"inherit\" onClick={handleClear}>\n Limpar\n </Button>\n </Stack>\n <Button\n onClick={onClose}\n variant=\"outlined\"\n color=\"inherit\"\n sx={{ minWidth: 24 }}\n >\n <Icon icon=\"CANCEL_CIRCLE\" />\n <LabelButton>Cancelar</LabelButton>\n </Button>\n <ApplyButton onClick={handleApply} variant=\"contained\">\n <Icon icon=\"SIMPLE_CHECK\" />\n <LabelButton>Aplicar</LabelButton>\n </ApplyButton>\n </StyledDialogActions>\n </StyledDialog>\n );\n};\n\nSortModal.displayName = 'SortModal';\n\nexport default memo(SortModal);\n","import Button from '@mui/material/Button';\nimport Dialog from '@mui/material/Dialog';\nimport DialogActions from '@mui/material/DialogActions';\nimport DialogContent from '@mui/material/DialogContent';\nimport DialogTitle from '@mui/material/DialogTitle';\nimport { styled } from '@mui/material/styles';\nimport Typography from '@mui/material/Typography';\n\nexport const StyledDialog = styled(Dialog)(() => ({\n '& .MuiDialog-paper': { width: '100%' },\n}));\n\nexport const StyledDialogTitle = styled(DialogTitle)(({ theme }) => ({\n borderBottom: '1px solid',\n borderColor: theme.palette.divider,\n padding: theme.spacing(1.5, 2),\n}));\n\nexport const StyledDialogContent = styled(DialogContent)(({ theme }) => ({\n padding: theme.spacing(2),\n}));\n\nexport const StyledDialogActions = styled(DialogActions)(({ theme }) => ({\n borderTop: '1px solid',\n borderColor: theme.palette.divider,\n padding: theme.spacing(1.5, 2),\n}));\n\nexport const ApplyButton = styled(Button)(({ theme }) => ({\n minWidth: 24,\n [theme.breakpoints.down(330)]: {\n padding: theme.spacing(1),\n },\n}));\n\nexport const LabelButton = styled(Typography)(({ theme }) => ({\n fontWeight: '600',\n margin: theme.spacing(0, 1),\n [theme.breakpoints.down(330)]: {\n fontSize: 0,\n margin: 0,\n },\n}));\n","import { useMemo } from 'react';\nimport type { GridColDef } from '@mui/x-data-grid-premium';\n\nimport { UseColumnOrderingParams } from '../props';\n\nexport const useColumnOrdering = ({\n columns,\n fields,\n preferredFieldOrder,\n}: UseColumnOrderingParams) => {\n const columnsByFieldId = useMemo(\n () => new Map(columns.map(column => [column.field, column])),\n [columns],\n );\n\n const fieldsByName = useMemo(\n () => new Map(fields?.map(f => [f.name, f]) || []),\n [fields],\n );\n\n const orderedColumns = useMemo(() => {\n if (!preferredFieldOrder || preferredFieldOrder.length === 0 || !fields) {\n return columns;\n }\n\n const actionFieldName = 'ACTIONS';\n const preferredWithoutActions = preferredFieldOrder.filter(\n fieldName => fieldName !== actionFieldName,\n );\n\n const usedColumnFieldIds = new Set<string>();\n const ordered: GridColDef[] = [];\n\n const pushColumnForField = (fieldName: string) => {\n const field = fieldsByName.get(fieldName);\n if (!field) return;\n\n const column = columnsByFieldId.get(field.name);\n\n if (!column || usedColumnFieldIds.has(field.name)) return;\n\n ordered.push(column);\n usedColumnFieldIds.add(field.name);\n };\n\n preferredWithoutActions.forEach(fieldName => {\n pushColumnForField(fieldName);\n });\n\n fields.forEach(field => {\n if (field.name === actionFieldName) return;\n if (preferredWithoutActions.includes(field.name)) return;\n\n const column = columnsByFieldId.get(field.name);\n\n if (!column || usedColumnFieldIds.has(field.name)) return;\n\n ordered.push(column);\n usedColumnFieldIds.add(field.name);\n });\n\n pushColumnForField(actionFieldName);\n\n return ordered.length === 0 ? columns : ordered;\n }, [columns, columnsByFieldId, fieldsByName, preferredFieldOrder, fields]);\n\n return { orderedColumns, columnsByFieldId, fieldsByName };\n};\n","import { useCallback } from 'react';\nimport type { GridColumnVisibilityModel } from '@mui/x-data-grid-premium';\n\nimport useLocalStorage from 'hooks/useLocalStorage';\n\nimport { UseColumnVisibilityParams } from '../props';\n\nconst EMPTY_MODEL: GridColumnVisibilityModel = {};\n\nexport const useColumnVisibility = ({\n columnVisibilityStorageKey,\n onColumnVisibilityModelChange,\n}: UseColumnVisibilityParams) => {\n const hasStorageKey = Boolean(columnVisibilityStorageKey);\n\n const [storedVisibilityModel, setStoredVisibilityModel] = useLocalStorage<\n GridColumnVisibilityModel | undefined\n >(columnVisibilityStorageKey || '__dynamic-data-view:columns__', undefined, {\n initializeWithValue: hasStorageKey,\n });\n\n const columnVisibilityModel = storedVisibilityModel ?? EMPTY_MODEL;\n\n const handleColumnVisibilityModelChange = useCallback(\n (model: GridColumnVisibilityModel) => {\n if (hasStorageKey) {\n const modelToSave = { ...model };\n // Prevents __check__ (checkboxSelection column) from being permanently hidden in local storage\n delete modelToSave['__check__'];\n setStoredVisibilityModel(modelToSave);\n }\n\n if (onColumnVisibilityModelChange) {\n onColumnVisibilityModelChange(model);\n }\n },\n [hasStorageKey, onColumnVisibilityModelChange, setStoredVisibilityModel],\n );\n\n return {\n columnVisibilityModel,\n handleColumnVisibilityModelChange,\n };\n};\n","import { useMemo } from 'react';\nimport { GridColDef } from '@mui/x-data-grid-premium';\n\nimport { Columns } from 'types/datagrid';\n\nimport { ACCESS_TYPES } from '../constants/columnDefaults';\nimport { UseDynamicColumnsProps } from '../props';\nimport { getColumnStrategy } from '../utils/columnStrategies';\n\nexport const useDynamicColumns = <T extends object>({\n metadata,\n renderCell,\n columnStrategies,\n}: UseDynamicColumnsProps<T>): Columns => {\n return useMemo(() => {\n if (!metadata?.fields) return [];\n\n const columnsMap = new Map<string, GridColDef>();\n\n const visibleFields = metadata.fields.filter(field => {\n if (\n field.access_type === ACCESS_TYPES.READ_ONLY ||\n field.access_type === ACCESS_TYPES.READ_AND_WRITE\n ) {\n return true;\n }\n\n return (\n field.name === 'ACTIONS' ||\n field.name === metadata?.id_field_name ||\n field.name === 'NAME'\n );\n });\n\n visibleFields.forEach(field => {\n if (columnsMap.has(field.name)) {\n return;\n }\n\n const strategy =\n columnStrategies?.[field.name] ?? getColumnStrategy<T>(field, metadata);\n const column = strategy(field, renderCell, metadata);\n\n columnsMap.set(field.name, column);\n });\n\n return Array.from(columnsMap.values());\n }, [columnStrategies, metadata, renderCell]);\n};\n","export const COLUMN_DEFAULTS = {\n IMAGE_WIDTH: 90,\n MIN_WIDTH: 130,\n ENTITY_MIN_WIDTH: 100,\n ENTITY_FLEX: 0.5,\n ID_MIN_WIDTH: 200,\n ID_FLEX: 1,\n ACTIONS_WIDTH: 80,\n} as const;\n\nexport const ACCESS_TYPES = {\n READ_ONLY: 'READ_ONLY',\n READ_AND_WRITE: 'READ_AND_WRITE',\n} as const;\n\nexport const CURRENCY_FIELD_NAMES: readonly string[] = [\n 'price',\n 'base_price',\n 'minimum_value',\n 'maximum_value',\n 'minimum_installment_value',\n];\n","import { GridColDef, GridRenderCellParams } from '@mui/x-data-grid-premium';\nimport { Field } from 'model/entity-metadata';\n\nimport { COLUMN_DEFAULTS } from '../constants/columnDefaults';\nimport { CellRenderer, ColumnStrategy, DynamicRowData } from '../props';\n\nconst createImageColumn = <T extends object>(\n field: Field,\n renderCell: CellRenderer<T>,\n): GridColDef => ({\n field: field.name,\n headerName: field.description,\n sortable: false,\n width: COLUMN_DEFAULTS.IMAGE_WIDTH,\n resizable: false,\n headerAlign: 'center',\n align: 'center',\n renderCell: (params: GridRenderCellParams) =>\n renderCell(field, params.row as DynamicRowData<T>),\n});\n\nconst createIdColumn = <T extends object>(\n field: Field,\n renderCell: CellRenderer<T>,\n): GridColDef => ({\n field: field.name,\n headerName: field.description,\n minWidth: COLUMN_DEFAULTS.ID_MIN_WIDTH,\n flex: COLUMN_DEFAULTS.ID_FLEX,\n renderCell: (params: GridRenderCellParams) =>\n renderCell(field, params.row as DynamicRowData<T>),\n});\n\nconst createEntityColumn = <T extends object>(\n field: Field,\n renderCell: CellRenderer<T>,\n): GridColDef => ({\n field: field.name,\n headerName: field.description,\n minWidth: COLUMN_DEFAULTS.ENTITY_MIN_WIDTH,\n flex: COLUMN_DEFAULTS.ENTITY_FLEX,\n renderCell: (params: GridRenderCellParams) =>\n renderCell(field, params.row as DynamicRowData<T>),\n});\n\nconst createDefaultColumn = <T extends object>(\n field: Field,\n renderCell: CellRenderer<T>,\n): GridColDef => ({\n field: field.name,\n headerName: field.description,\n minWidth: COLUMN_DEFAULTS.MIN_WIDTH,\n renderCell: (params: GridRenderCellParams) =>\n renderCell(field, params.row as DynamicRowData<T>),\n});\n\nconst createActionsColumn = <T extends object>(\n field: Field,\n renderCell: CellRenderer<T>,\n): GridColDef => ({\n field: field.name,\n headerName: 'Ações',\n width: COLUMN_DEFAULTS.ACTIONS_WIDTH,\n sortable: false,\n resizable: false,\n disableReorder: true,\n hideable: false,\n headerAlign: 'center',\n disableColumnMenu: true,\n align: 'center',\n renderCell: (params: GridRenderCellParams) =>\n renderCell(field, params.row as DynamicRowData<T>),\n});\n\nexport const getColumnStrategy = <T extends object>(\n field: Field,\n metadata?: { id_field_name?: string },\n): ColumnStrategy<T> => {\n if (field.name === metadata?.id_field_name || field.name === 'name') {\n return createIdColumn;\n }\n\n if (field.name === 'ACTIONS') {\n return createActionsColumn;\n }\n\n if (field.type === 'FILE') {\n return createImageColumn;\n }\n\n if (field.type === 'ENTITY') {\n return createEntityColumn;\n }\n\n return createDefaultColumn;\n};\n","import { useCallback, useRef, useState } from 'react';\nimport {\n type Filter,\n type FilterCondition,\n FilterOperator,\n} from 'model/filter';\n\nimport uuidv4 from 'utils/uuidv4';\n\nimport { UseFiltersProps, UseFiltersReturn } from '../props';\nimport {\n buildFilterFromConditions,\n getDefaultCondition,\n isValidCondition,\n} from '../utils/filter';\n\n// Converte filtro inicial em condições\nconst parseInitialConditions = (initialFilter?: Filter): FilterCondition[] => {\n if (!initialFilter?.groups?.[0]?.conditionals) return [];\n return initialFilter.groups[0].conditionals.map(cond => ({\n id: uuidv4(),\n operator: initialFilter.groups[0].operator,\n fieldName: cond.fieldName,\n conditional: cond.conditional,\n value: cond.value,\n valueLabels: cond.valueLabels,\n }));\n};\n\n/**\n * Hook para gerenciar estado de filtros do DynamicDataView com condições dinâmicas\n *\n * - conditions: estado de edição (o que o usuário vê no popover)\n * - appliedConditions: estado aplicado (o que está efetivamente filtrando)\n * - hasActiveFilters/activeFiltersCount: calculados com base em appliedConditions\n */\nexport const useFilters = ({\n fields,\n initialFilter,\n}: UseFiltersProps): UseFiltersReturn => {\n const [isOpen, setIsOpen] = useState(false);\n\n // Estado aplicado (efetivamente filtrando)\n const [appliedConditions, setAppliedConditions] = useState<FilterCondition[]>(\n () => parseInitialConditions(initialFilter),\n );\n const [appliedFilter, setAppliedFilter] = useState<Filter | undefined>(\n initialFilter,\n );\n\n // Estado de edição (o que o usuário vê/edita no popover)\n const [conditions, setConditions] = useState<FilterCondition[]>(() =>\n parseInitialConditions(initialFilter),\n );\n\n // Referência para snapshot antes de abrir o popover\n const snapshotRef = useRef<FilterCondition[]>([]);\n\n const openDrawer = useCallback(() => {\n // Salva snapshot das condições atuais (aplicadas) ao abrir\n snapshotRef.current = appliedConditions.map(c => ({ ...c }));\n // Sincroniza edição com aplicado ao abrir\n setConditions(appliedConditions.map(c => ({ ...c })));\n setIsOpen(true);\n }, [appliedConditions]);\n\n const closeDrawer = () => setIsOpen(false);\n\n const addCondition = useCallback(() => {\n const filterableFields = fields.filter(\n f => f.available_filter_conditions?.length > 0,\n );\n if (filterableFields.length === 0) return;\n\n const usedFieldNames = conditions.map(c => c.fieldName);\n const availableFields = filterableFields.filter(\n f => !usedFieldNames.includes(f.filter_field_name ?? f.name),\n );\n if (availableFields.length === 0) return;\n\n const currentOperator =\n conditions.length > 0 ? conditions[0].operator : FilterOperator.AND;\n const firstField = availableFields[0];\n const newCondition: FilterCondition = {\n id: uuidv4(),\n operator: currentOperator,\n fieldName: firstField.filter_field_name ?? firstField.name,\n conditional: getDefaultCondition(firstField),\n value: [],\n };\n\n setConditions(prev => [...prev, newCondition]);\n }, [fields, conditions]);\n\n const updateCondition = useCallback(\n (id: string, changes: Partial<FilterCondition>) => {\n setConditions(prev => {\n const targetCondition = prev.find(c => c.id === id);\n if (!targetCondition) return prev;\n\n if (changes.operator && changes.operator !== targetCondition.operator) {\n const newOperator = changes.operator;\n return prev.map(c => {\n if (c.id === id) {\n return { ...c, ...changes };\n }\n return { ...c, operator: newOperator };\n });\n }\n\n return prev.map(c => (c.id === id ? { ...c, ...changes } : c));\n });\n },\n [],\n );\n\n const removeCondition = useCallback((id: string) => {\n setConditions(prev => prev.filter(c => c.id !== id));\n }, []);\n\n const clearAllFilters = () => {\n setConditions([]);\n setAppliedConditions([]);\n setAppliedFilter(undefined);\n };\n\n const applyFilters = () => {\n const filter = buildFilterFromConditions(conditions);\n setAppliedConditions(conditions.map(c => ({ ...c })));\n setAppliedFilter(filter);\n setIsOpen(false);\n return filter;\n };\n\n const cancelChanges = () => {\n // Reverte para o snapshot salvo ao abrir\n setConditions(snapshotRef.current.map(c => ({ ...c })));\n setIsOpen(false);\n };\n\n // Calculado com base nos filtros APLICADOS (não em edição)\n const hasActiveFilters = appliedConditions.some(isValidCondition);\n const activeFiltersCount = appliedConditions.filter(isValidCondition).length;\n\n return {\n conditions,\n filter: appliedFilter,\n isOpen,\n hasActiveFilters,\n activeFiltersCount,\n openDrawer,\n closeDrawer,\n addCondition,\n updateCondition,\n removeCondition,\n clearAllFilters,\n applyFilters,\n cancelChanges,\n };\n};\n\nexport default useFilters;\n","import { useCallback, useEffect, useState } from 'react';\nimport { Filter, Sort } from 'model/filter';\n\nconst getStoredValue = <T>(key: string): T | undefined => {\n try {\n const item = localStorage.getItem(key);\n return item ? JSON.parse(item) : undefined;\n } catch {\n return undefined;\n }\n};\n\nconst setStoredValue = <T>(key: string, value: T | undefined): void => {\n try {\n if (value === undefined) {\n localStorage.removeItem(key);\n } else {\n localStorage.setItem(key, JSON.stringify(value));\n }\n } catch {\n // Silently ignore localStorage errors\n }\n};\n\nexport const useFilterStorage = (\n storageKey: string,\n externalFilter?: Filter,\n onFilterChange?: (filter: Filter | undefined) => void,\n) => {\n const filterKey = `${storageKey}:filter`;\n\n const [internalFilter, setInternalFilter] = useState<Filter | undefined>(\n () => {\n return getStoredValue<Filter>(filterKey) || externalFilter;\n },\n );\n\n // Sync with external filter\n useEffect(() => {\n if (externalFilter !== undefined) {\n setInternalFilter(externalFilter);\n }\n }, [externalFilter]);\n\n const handleFilterChange = useCallback(\n (newFilter: Filter | undefined) => {\n setInternalFilter(newFilter);\n setStoredValue(filterKey, newFilter);\n onFilterChange?.(newFilter);\n },\n [filterKey, onFilterChange],\n );\n\n return {\n filter: internalFilter,\n setFilter: handleFilterChange,\n };\n};\n\nexport const useSortStorage = (\n storageKey: string,\n externalSort?: Sort,\n onSortChange?: (sort: Sort | undefined) => void,\n) => {\n const sortKey = `${storageKey}:sort`;\n\n const [internalSort, setInternalSort] = useState<Sort | undefined>(() => {\n return getStoredValue<Sort>(sortKey) || externalSort;\n });\n\n // Sync with external sort\n useEffect(() => {\n if (externalSort !== undefined) {\n setInternalSort(externalSort);\n }\n }, [externalSort]);\n\n const handleSortChange = useCallback(\n (newSort: Sort | undefined) => {\n setInternalSort(newSort);\n setStoredValue(sortKey, newSort);\n onSortChange?.(newSort);\n },\n [sortKey, onSortChange],\n );\n\n return {\n sort: internalSort,\n setSort: handleSortChange,\n };\n};\n","import { useCallback, useMemo } from 'react';\nimport type { GridSortModel } from '@mui/x-data-grid-premium';\nimport { Field } from 'model/entity-metadata';\nimport { Sort, SortType } from 'model/filter';\n\nimport { UseSortingParams } from '../props';\n\n/**\n * Mapeia field.name (coluna do DataGrid) → filter_field_name (campo da API).\n * Usado quando o usuário clica no header da coluna para ordenar.\n */\nconst resolveApiFieldName = (\n fields: Field[] | undefined,\n fieldName: string,\n): string => {\n if (!fields) return fieldName;\n const field = fields.find(f => f.name === fieldName);\n return field?.filter_field_name ?? fieldName;\n};\n\n/**\n * Mapeia filter_field_name (campo da API) → field.name (coluna do DataGrid).\n * Usado para o sortModel destacar a coluna correta na UI.\n */\nconst resolveColumnFieldName = (\n fields: Field[] | undefined,\n fieldName: string,\n): string => {\n if (!fields) return fieldName;\n const field = fields.find(\n f => f.filter_field_name === fieldName || f.name === fieldName,\n );\n return field?.name ?? fieldName;\n};\n\nexport const useSorting = ({\n sort,\n onSortChange,\n fields,\n}: UseSortingParams) => {\n const sortModel: GridSortModel = useMemo(() => {\n if (!sort) return [];\n return [\n {\n field: resolveColumnFieldName(fields, sort.fieldName),\n sort: sort.sortType.toLowerCase() as 'asc' | 'desc',\n },\n ];\n }, [sort, fields]);\n\n const handleSortModelChange = useCallback(\n (model: GridSortModel) => {\n if (!onSortChange) return;\n\n const firstItem = model[0];\n if (!firstItem || !firstItem.sort) {\n onSortChange(undefined);\n return;\n }\n\n const newSort: Sort = {\n fieldName: resolveApiFieldName(fields, firstItem.field),\n sortType: firstItem.sort.toUpperCase() as SortType,\n };\n onSortChange(newSort);\n },\n [onSortChange, fields],\n );\n\n return {\n sortModel,\n handleSortModelChange,\n };\n};\n","import {\n AccessType,\n DataType,\n EntityMetadataResponse,\n Field,\n} from 'model/entity-metadata';\n\nexport const createActionsField = (): Field => ({\n name: 'ACTIONS',\n description: '',\n filter_field_name: null,\n type: DataType.TEXT,\n metadata: null,\n access_type: AccessType.READ_ONLY,\n relation_field_name: null,\n available_filter_conditions: [],\n});\n\nexport const addActionsFieldToMetadata = (\n metadata: EntityMetadataResponse,\n): EntityMetadataResponse => {\n const hasActionsField = metadata.fields.some(\n field => field.name === 'ACTIONS',\n );\n\n if (hasActionsField) {\n return metadata;\n }\n\n return {\n ...metadata,\n fields: [...metadata.fields, createActionsField()],\n };\n};\n","import { memo, ReactNode } from 'react';\n\nimport { DatePickerFormat, fDate } from 'utils/formatTime';\n\nimport type { DateRendererProps } from './props';\n\nconst DateRenderer = ({ value, format }: DateRendererProps): ReactNode => {\n if (value === null || value === undefined) return '-';\n\n return fDate(value as DatePickerFormat, format);\n};\n\nexport default memo(DateRenderer);\n","import { memo, ReactNode } from 'react';\n\nimport { DatePickerFormat, fDateTime } from 'utils/formatTime';\n\nimport type { DateTimeRendererProps } from './props';\n\nconst DateTimeRenderer = ({\n value,\n format,\n}: DateTimeRendererProps): ReactNode => {\n if (value === null || value === undefined) return '-';\n\n return fDateTime(value as DatePickerFormat, format);\n};\n\nexport default memo(DateTimeRenderer);\n","import { memo, ReactNode } from 'react';\nimport Chip from '@mui/material/Chip';\n\nimport { EntityRendererProps } from './props';\n\nconst EntityRenderer = ({ value, field }: EntityRendererProps): ReactNode => {\n if (!field.metadata || typeof value !== 'object' || value === null) {\n return value ? String(value) : '-';\n }\n\n const entityValue = (value as Record<string, unknown>)[\n field.metadata.description_field_name\n ];\n\n if (!entityValue) return null;\n\n return (\n <Chip\n label={String(entityValue)}\n variant=\"outlined\"\n size=\"small\"\n sx={{\n width: 'fit-content',\n color: 'text.secondary',\n borderColor: 'divider',\n borderRadius: 3,\n }}\n />\n );\n};\n\nexport default memo(EntityRenderer);\n","import { memo, ReactNode } from 'react';\n\nimport Icon, { IconEnum } from '../../Icon';\n\nimport { IconRendererProps } from './props';\n\nconst IconRenderer = ({\n value,\n trueIcon = IconEnum.STAR_02,\n falseIcon = IconEnum.STAR,\n color = 'primary.main',\n width = 18,\n}: IconRendererProps): ReactNode => {\n return (\n <Icon icon={value ? trueIcon : falseIcon} color={color} width={width} />\n );\n};\n\nexport default memo(IconRenderer);\n","import { memo, ReactNode } from 'react';\n\nimport Icon from 'components/Icon';\n\nimport { ImageRendererProps } from './props';\nimport { ImageContainer } from './style';\n\nconst ImageRenderer = ({\n imageResourceId,\n getImageUrl,\n size = 48,\n alt = 'Imagem',\n onClick,\n sx,\n}: ImageRendererProps): ReactNode => {\n const hasImage = !!imageResourceId;\n const imageUrl =\n hasImage && getImageUrl ? getImageUrl(imageResourceId) : undefined;\n const clickable = !!onClick;\n\n return (\n <ImageContainer\n size={size}\n noImage={!hasImage}\n clickable={clickable}\n onClick={onClick}\n sx={sx}\n >\n {imageUrl ? (\n <img src={imageUrl} alt={alt} />\n ) : (\n <Icon\n icon=\"SEARCH_IMAGE\"\n width={Math.round(size / 2)}\n color=\"text.disabled\"\n />\n )}\n </ImageContainer>\n );\n};\n\nexport default memo(ImageRenderer);\n","import Box from '@mui/material/Box';\nimport { styled } from '@mui/material/styles';\n\n// StatusRenderer styles\nexport interface StatusLabelProps {\n isActive: boolean;\n}\n\nexport const StatusLabel = styled('span')<StatusLabelProps>(\n ({ theme, isActive }) => ({\n display: 'inline-flex',\n alignItems: 'center',\n justifyContent: 'center',\n padding: theme.spacing(0.2, 1),\n borderRadius: theme.shape.borderRadius,\n fontSize: '0.75rem',\n fontWeight: 600,\n width: 'fit-content',\n height: 'auto',\n lineHeight: '1.25rem',\n whiteSpace: 'nowrap',\n margin: 'auto',\n backgroundColor: isActive\n ? theme.palette.success.lighter || '#00A76F29'\n : theme.palette.warning.lighter || '#FF563029',\n color: isActive\n ? theme.palette.success.darker || '#007867'\n : theme.palette.warning.darker || '#B71D18',\n }),\n);\n\n// ImageRenderer styles\nexport interface ImageContainerProps {\n size: number;\n noImage: boolean;\n clickable: boolean;\n}\n\nexport const ImageContainer = styled(Box, {\n shouldForwardProp: prop =>\n !['size', 'noImage', 'clickable'].includes(prop as string),\n})<ImageContainerProps>(({ theme, size, noImage, clickable }) => ({\n width: size,\n height: size,\n minWidth: size,\n borderRadius: '50%',\n display: 'flex',\n alignItems: 'center',\n justifyContent: 'center',\n overflow: 'hidden',\n cursor: clickable ? 'pointer' : 'default',\n transition: 'opacity 0.2s ease-in-out',\n color: theme.palette.text.disabled,\n ...(noImage && {\n border: `1px dashed ${theme.palette.divider}`,\n backgroundColor: theme.palette.grey[100],\n }),\n ...(clickable && {\n '&:hover': {\n opacity: 0.8,\n },\n }),\n '& img': {\n width: '100%',\n height: '100%',\n objectFit: 'cover',\n borderRadius: '50%',\n },\n [theme.breakpoints.down('sm')]: {\n justifyContent: 'flex-start',\n alignItems: 'flex-start',\n },\n}));\n","import { memo, ReactNode } from 'react';\nimport Stack from '@mui/material/Stack';\nimport Typography from '@mui/material/Typography';\n\nimport CopyButton from 'components/CopyButton';\n\nimport { NameRendererProps } from './props';\n\nconst NameRenderer = ({\n id,\n displayName,\n copyMessage = 'ID copiado!',\n}: NameRendererProps): ReactNode => {\n return (\n <Stack height={1} justifyContent=\"center\">\n <Typography variant=\"subtitle2\" noWrap title={displayName}>\n {displayName}\n </Typography>\n <Stack direction=\"row\" gap={1} alignItems=\"center\">\n <Typography color=\"grey.600\" variant=\"body2\" noWrap>\n ID: {id}\n </Typography>\n <CopyButton toCopy={id} message={copyMessage} />\n </Stack>\n </Stack>\n );\n};\n\nexport default memo(NameRenderer);\n","import { memo, ReactNode } from 'react';\nimport Stack from '@mui/material/Stack';\nimport Typography from '@mui/material/Typography';\n\nimport { fCurrencyBRL, fNumber } from 'utils/formatNumber';\n\nimport { NumberRendererProps } from './props';\n\nconst NumberRenderer = ({\n value,\n isCurrency = false,\n}: NumberRendererProps): ReactNode => {\n if (value === null || value === undefined) return '-';\n\n return (\n <Stack direction=\"row\" alignItems=\"center\" height=\"100%\">\n <Typography variant=\"body2\" noWrap width=\"fit-content\">\n {isCurrency ? fCurrencyBRL(Number(value)) : fNumber(Number(value))}\n </Typography>\n </Stack>\n );\n};\n\nexport default memo(NumberRenderer);\n","import { memo, ReactNode } from 'react';\n\nimport { StatusRendererProps } from './props';\nimport { StatusLabel } from './style';\n\nconst StatusRenderer = ({\n active,\n activeLabel = 'Ativo',\n inactiveLabel = 'Inativo',\n}: StatusRendererProps): ReactNode => {\n return (\n <StatusLabel isActive={active}>\n {active ? activeLabel : inactiveLabel}\n </StatusLabel>\n );\n};\n\nexport default memo(StatusRenderer);\n","import { memo, ReactNode } from 'react';\nimport Stack from '@mui/material/Stack';\nimport Typography from '@mui/material/Typography';\n\nimport CopyButton from 'components/CopyButton';\n\nimport { TextRendererProps } from './props';\n\nconst sanitizeHtml = (text: string): string => {\n const withoutTags = text.replace(/<[^>]*>/g, '');\n return (\n withoutTags\n .replace(/ /g, ' ')\n .replace(/&/g, '&')\n .replace(/</g, '<')\n .replace(/>/g, '>')\n .replace(/"/g, '\"')\n // prettier-ignore\n .replace(/'/g, '\\'')\n .trim()\n );\n};\n\nconst TextRenderer = ({\n value,\n showCopyButton = false,\n copyMessage = 'Copiado',\n copyLabel,\n mask,\n}: TextRendererProps): ReactNode => {\n if (!value) return '-';\n\n const stringValue = String(value);\n const formattedValue = mask ? mask(stringValue) : sanitizeHtml(stringValue);\n\n if (showCopyButton) {\n return (\n <Stack direction=\"row\" gap={1} alignItems=\"center\">\n <Typography variant=\"body2\" noWrap>\n {formattedValue}\n </Typography>\n <CopyButton\n toCopy={stringValue}\n message={copyMessage}\n label={copyLabel}\n />\n </Stack>\n );\n }\n\n return formattedValue;\n};\n\nexport default memo(TextRenderer);\n","import { ReactNode } from 'react';\nimport { Field } from 'model/entity-metadata';\n\nimport { CURRENCY_FIELD_NAMES } from '../constants/columnDefaults';\nimport { CellRenderer, DynamicRowData } from '../props';\nimport {\n DateRenderer,\n DateTimeRenderer,\n EntityRenderer,\n NumberRenderer,\n StatusRenderer,\n TextRenderer,\n} from '../renderers';\n\nfunction getIsCurrency(fieldName: string): boolean {\n return CURRENCY_FIELD_NAMES.includes(fieldName);\n}\n\nexport const createCellRenderer = <T extends object = object>(context: {\n onRowAction?: (rowId: string, row: DynamicRowData<T>) => ReactNode;\n}): CellRenderer<T> => {\n const { onRowAction } = context;\n\n const CellRendererComponent = (\n field: Field,\n row: DynamicRowData<T>,\n ): ReactNode => {\n const value = row[field.name];\n\n if (field.name === 'ACTIONS') {\n return onRowAction?.(row.id, row);\n }\n\n switch (field.type) {\n case 'BOOLEAN':\n return (\n <StatusRenderer\n active={Boolean(value)}\n activeLabel=\"Ativo\"\n inactiveLabel=\"Inativo\"\n />\n );\n\n case 'DATE':\n return <DateRenderer value={value} />;\n\n case 'DATETIME':\n return <DateTimeRenderer value={value} />;\n\n case 'DECIMAL':\n case 'INTEGER':\n return (\n <NumberRenderer\n value={value}\n isCurrency={getIsCurrency(field.name)}\n />\n );\n\n case 'FILE':\n case 'ENTITY':\n return <EntityRenderer value={value} field={field} />;\n case 'TEXT':\n default:\n return <TextRenderer value={value} />;\n }\n };\n\n CellRendererComponent.displayName = 'CellRendererComponent';\n return CellRendererComponent;\n};\n","import { GridColumnVisibilityModel } from '@mui/x-data-grid-premium';\nimport { EntityMetadataResponse } from 'model/entity-metadata';\n\ninterface BuildVisibleFieldsParams {\n metadata?: EntityMetadataResponse;\n columnVisibilityModel?: GridColumnVisibilityModel;\n preferredFieldOrder?: string[];\n}\n\nexport const buildVisibleFields = ({\n metadata,\n columnVisibilityModel,\n preferredFieldOrder,\n}: BuildVisibleFieldsParams): string[] | undefined => {\n if (!metadata?.fields) return undefined;\n\n const allFields = metadata.fields.map(f => f.name);\n\n const visible = allFields.filter(fieldName => {\n if (fieldName === 'ACTIONS') return false;\n return columnVisibilityModel?.[fieldName] !== false;\n });\n\n if (!preferredFieldOrder) return visible;\n\n return visible.sort((a, b) => {\n const rawA = preferredFieldOrder.indexOf(a);\n const rawB = preferredFieldOrder.indexOf(b);\n const indexA = rawA === -1 ? Infinity : rawA;\n const indexB = rawB === -1 ? Infinity : rawB;\n\n return indexA - indexB || 0;\n });\n};\n"]}
|