@mendylanda/ui 0.3.0-alpha.2 → 0.3.0-alpha.4

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
@@ -1 +1 @@
1
- export const originalClassNames = {"mui-cb20bd519346":"pointer-events-auto","mui-33228ff7d583":"pointer-events-none","mui-b75af7ef6c4d":"invisible","mui-d42ef1497900":"visible","mui-32fb090591d9":"sr-only","mui-747355bdc2a2":"absolute","mui-d2d9e1f13413":"relative","mui-964a9431ff49":"sticky","mui-ce13093ad8c9":"inset-0","mui-3ba24c062d55":"inset-x-0","mui-eb9e48c5dda9":"inset-y-0","mui-cced28c6dc3f":"start","mui-207bd0b3f259":"start-2","mui-cea70f23972e":"start-3","mui-361e48d0308f":"end","mui-13422ddc8d83":"end-1","mui-585f4729f611":"end-9","mui-98599e4ee250":"top-0","mui-4e45f4841abb":"top-1/2","mui-a74c4477017c":"right-0","mui-30150dd033ab":"bottom-0","mui-a5c36273c0f0":"bottom-2","mui-635702706586":"left-0","mui-014aadadffad":"isolate","mui-418e44ad4f9e":"z-10","mui-4e8f0a87a0dc":"z-20","mui-fbb62f5cb6fe":"z-30","mui-3eef1ce97dba":"z-50","mui-a42d519714d6":"container","mui-a2526bc2efa3":"m-0","mui-abba77319850":"-mx-1","mui-1752f11474a6":"mx-auto","mui-d8747231f142":"my-1","mui-958e2cfcf5b6":"-ms-2","mui-291952c2525a":"-ms-px","mui-8cc46fa87f41":"-me-1.5","mui-f28fea81a5cd":"mt-2","mui-cc51bda60e7e":"ml-auto","mui-496aca80e4d8":"block","mui-d1b2a59fbea7":"contents","mui-222f930b8752":"flex","mui-0f2a693e93e2":"grid","mui-e564b4081d7a":"hidden","mui-995cf20a9c45":"inline","mui-123306850fe1":"inline-flex","mui-0d4fc4a78d37":"table","mui-3da89b3ed14b":"field-sizing-content","mui-129d6f9b1e07":"aspect-square","mui-f7d12b41bceb":"size-(--cell-size)","mui-dc797fcc7165":"size-1.5","mui-5e34f5313859":"size-3","mui-61c000c8a98a":"size-3.5","mui-100c22d5776b":"size-4","mui-2bd43fb57913":"size-5","mui-0712570dcc9f":"size-6","mui-79ede756e761":"size-7","mui-ebd37e04d422":"size-8","mui-3ee10ef4c057":"size-9","mui-d0a383a9c24f":"size-10","mui-4dad94bd15e3":"size-auto","mui-a5960ac1d283":"h-(--cell-size)","mui-c7d5500b77ab":"h-0","mui-2edce89ef182":"h-3","mui-099be97e1fa4":"h-4","mui-ce1945804664":"h-6","mui-c8e50836f8a1":"h-7","mui-1fb07b38c63b":"h-8","mui-539ae144f076":"h-9","mui-fdd2f85cad6b":"h-10","mui-a66e9985b093":"h-auto","mui-57c930dc1c31":"h-full","mui-ae2c4b060bb9":"h-px","mui-571ea69568d3":"max-h-(--filter-menu-height)","mui-1f061e70178e":"max-h-(--radix-dropdown-menu-content-available-height)","mui-4d3f1304ebb2":"max-h-(--radix-popover-content-available-height)","mui-da0beef015c9":"max-h-[400px]","mui-80baa5d03af7":"max-h-[calc(var(--filter-menu-height)-2px)]","mui-1326520533f0":"max-h-[min(6rem,calc(var(--filter-menu-height)*0.25))]","mui-fb4a3e97b5bd":"max-h-[min(20rem,var(--radix-dropdown-menu-content-available-height,20rem))]","mui-dcd942c18ddc":"max-h-[var(--radix-dropdown-menu-content-available-height)]","mui-410da8dfa8ac":"min-h-0","mui-9974acedf3f7":"min-h-9","mui-8423dc94ee06":"min-h-10","mui-50312c3ce4a3":"min-h-[60px]","mui-d48fe95d4da8":"w-(--cell-size)","mui-d4ea834145ae":"w-2","mui-56bb14cbd1fe":"w-2/3","mui-8867d85ed290":"w-8","mui-4ac4ec8dfbce":"w-40","mui-37535002f0f7":"w-72","mui-a4cce7869436":"w-[300px]","mui-fc6a57ff7553":"w-[var(--mendy-filter-editor-width,19rem)]","mui-0b9c84552e40":"w-[var(--mendy-filter-list-width,var(--mendy-filter-anchor-width,18.75rem))]","mui-4415137b0467":"w-[var(--mendy-filter-menu-width,calc(var(--filter-list-width)_+_var(--mendy-filter-editor-width,19rem)))]","mui-8cfb5a42ef9f":"w-fit","mui-58d0413dd93c":"w-full","mui-91f82aa1df0c":"max-w-[60%]","mui-34055e6f8c1b":"max-w-[calc(100vw-2rem)]","mui-81b198a2db84":"max-w-full","mui-1458e495e3ae":"min-w-(--cell-size)","mui-184ddc11e5f9":"min-w-0","mui-e9ab1547c94d":"min-w-[8rem]","mui-2bf6510f1330":"min-w-full","mui-7bd5bab6d7f4":"flex-1","mui-66b490dd6005":"shrink","mui-27ead27a81df":"shrink-0","mui-215061302c50":"border-collapse","mui-3a3774477287":"origin-(--radix-dropdown-menu-content-transform-origin)","mui-5dde0fd996f0":"-translate-y-1/2","mui-4e3f08588318":"-rotate-45","mui-c80411b7591f":"rotate-45","mui-aa214ea38326":"transform","mui-393df0d154e0":"animate-none!","mui-7b3cd77eb999":"animate-pulse","mui-2194d094b585":"cursor-col-resize","mui-d343f41ba73e":"cursor-default","mui-f2e47d9c52ad":"cursor-grab","mui-d2fa8848968d":"cursor-pointer","mui-739a9a000791":"touch-none","mui-acd532d8913e":"resize","mui-ae112c903ef8":"resize-y","mui-eeb3a8b33f69":"grid-cols-[min(var(--filter-list-width),calc(100%_-_min(var(--mendy-filter-editor-width,19rem),50%)))_minmax(0,1fr)]","mui-b5985369ee35":"grid-rows-[minmax(0,1fr)]","mui-302c0d124a94":"flex-col","mui-faa8a23c68f6":"flex-wrap","mui-8fd2e2355cbc":"place-content-center","mui-71556df3b421":"items-center","mui-b9677bd1cb66":"items-start","mui-32c92bb1fde4":"justify-between","mui-a503dd374cca":"justify-center","mui-307644c34db6":"justify-end","mui-c62ec162662e":"justify-start","mui-19e97f3f40e6":"gap-1","mui-70007b876865":"gap-1.5","mui-074569488cca":"gap-2","mui-d7db3451d154":"gap-3","mui-90fc3ec35a37":"gap-4","mui-27e6c432192f":"space-y-1","mui-267171770524":"space-y-2","mui-5a3a4ee420c2":"truncate","mui-1a26a0d28420":"overflow-auto","mui-d5111d0e9f48":"overflow-hidden","mui-0fc84a692dad":"overflow-visible","mui-3b82279f859f":"overflow-x-hidden","mui-2368e909f3a5":"overflow-y-auto","mui-998780cdef87":"overscroll-contain","mui-b005d61d0953":"rounded-full","mui-3fa8c572949b":"rounded-md","mui-52417259a4f5":"rounded-none","mui-02e603944040":"rounded-sm","mui-b31810dbd8a9":"rounded-s-none","mui-10c0bae8cba9":"rounded-l-md","mui-34bbd346e74c":"rounded-r-md","mui-4f1a55de40bc":"border","mui-dad556abfe15":"border-0","mui-55860251be20":"border-s","mui-3b6d5fc7b061":"border-e","mui-894c3815a57f":"border-t","mui-bbe39cfb5cc6":"border-b","mui-8450eb0f1857":"border-dashed","mui-163a623b3716":"border-border/50","mui-1267095cdeb7":"border-input","mui-9b76f456b8c9":"border-muted-foreground/50","mui-292affc1f780":"bg-accent","mui-5b272f3c5076":"bg-background","mui-a943bea85d66":"bg-border","mui-0cf6c2e8fe7e":"bg-current","mui-965cf6587342":"bg-destructive","mui-047624ec0c39":"bg-green-100","mui-87ecb59f2d2d":"bg-muted","mui-810ae775809b":"bg-muted-foreground/20","mui-e593c38256e0":"bg-popover","mui-0c2864fba576":"bg-primary","mui-d191cb569aac":"bg-secondary","mui-8fca9236d191":"bg-transparent","mui-04760bcd507f":"p-0","mui-1dee6e3ec67d":"p-1","mui-b97db4a9f432":"p-2","mui-094f5333853b":"p-3","mui-c432836760e3":"p-6","mui-c7902d77ad80":"p-8","mui-56b8f5e0fb12":"px-(--cell-size)","mui-16e909e6f01d":"px-0","mui-1da2e8f173c5":"px-1.5","mui-e7e01cc7f4df":"px-2","mui-0f9e6672913a":"px-3","mui-9513b3968002":"px-4","mui-0194c6e46323":"px-8","mui-1fcf28756bb1":"py-1","mui-a8c1dfb1d4ef":"py-1.5","mui-b5edc3ea7c91":"py-2","mui-d3cea061f2f3":"py-3","mui-078d945937da":"ps-8","mui-b2100041c585":"ps-9","mui-05d4103bd67f":"pe-2","mui-a202804a1738":"pe-3","mui-0e14c365f9e8":"pe-9","mui-559069d2c2e5":"pe-16","mui-0a702d97ed7d":"pt-3","mui-1a52da5bc88c":"pr-1","mui-f5d8e661d857":"pl-2","mui-05ab12448317":"text-center","mui-10558dbb3a24":"text-end","mui-e9347b78185f":"text-start","mui-757071a1d1c4":"text-base","mui-c74ab393b96d":"text-sm","mui-3992de70b033":"text-xs","mui-5f120ad4b50b":"text-[0.8rem]","mui-761cdb81bddb":"leading-none","mui-daaac3fbf55e":"font-medium","mui-52101fc7d8bb":"font-normal","mui-e1683b3c030a":"tracking-widest","mui-393883c1db68":"[overflow-wrap:anywhere]","mui-37cf9655f30a":"break-words","mui-726fca123972":"whitespace-normal","mui-963f6168b7d6":"whitespace-nowrap","mui-cc209238d847":"text-accent-foreground","mui-5eafab9bbefc":"text-current","mui-887b9502d5c7":"text-destructive","mui-8d4bf2704c8d":"text-destructive-foreground","mui-957a109f887f":"text-foreground","mui-35f35c41d134":"text-muted-foreground","mui-5bd2afe89f0b":"text-popover-foreground","mui-249f14ee5b6b":"text-primary","mui-abd1aaa1f5b2":"text-primary-foreground","mui-80df79ec9bb5":"text-secondary-foreground","mui-944969efb294":"underline","mui-d52f902a57e8":"underline-offset-4","mui-94f91922a10e":"opacity-0","mui-0b5a4d1257ab":"opacity-50","mui-65694092f002":"opacity-100","mui-0d4ca75de41c":"shadow-lg","mui-94ea94fde25f":"shadow-md","mui-89c3006b2722":"shadow-none","mui-7de07d413c13":"shadow-xs","mui-853be6c11609":"ring-2","mui-fd9d0b696aac":"ring-primary","mui-59edd3d33673":"outline-hidden","mui-318678825324":"outline","mui-e0122edc668b":"drop-shadow-md","mui-dfc3376b8266":"filter","mui-70dd37c11434":"transition","mui-eae178841c68":"transition-colors","mui-2cdd01663c76":"transition-opacity","mui-2b48746f4314":"transition-shadow","mui-b4b2fd95f324":"transition-none","mui-b30fc56058b6":"outline-none","mui-78905c9e865c":"select-none","mui-d80b6593dae5":"[--cell-size:--spacing(8)]","mui-82c2977beb8e":"[--cell-size:min(2rem,calc((100vw-3.5rem)/7))]","mui-d7d803c609c5":"[--filter-list-width:var(--mendy-filter-list-width,var(--mendy-filter-anchor-width,13rem))]","mui-971625533e56":"[--filter-menu-height:min(var(--mendy-filter-menu-max-height,44rem),var(--radix-dropdown-menu-content-available-height,44rem))]","mui-cacb19aa9640":"[scrollbar-width:thin]","mui-14bd99410890":"[unicode-bidi:isolate]","mui-97b1c00ff005":"group-hover:bg-accent","mui-ad936fcbed63":"group","mui-9af9a4182597":"group-data-[disabled=true]:pointer-events-none","mui-272ef88d6a0c":"group-data-[disabled=true]:opacity-50","mui-60052b901494":"group-data-[focused=true]/day:relative","mui-d9c5891363f9":"group/day","mui-3f96bf138f7b":"group-data-[focused=true]/day:z-10","mui-d39eb62b8363":"group-data-[focused=true]/day:border-ring","mui-5892a880410a":"group-data-[focused=true]/day:ring-1","mui-31b75c623c06":"group-data-[focused=true]/day:ring-ring","mui-e6020023567a":"group-data-[highlighted=true]:bg-accent","mui-f0ee83167878":"peer-disabled:cursor-not-allowed","mui-2ffc1d06387e":"peer","mui-25d26df52a1d":"peer-disabled:opacity-50","mui-32713fefe32f":"file:border-0","mui-25a74d576c42":"file:bg-transparent","mui-844abccf1fd0":"file:text-sm","mui-dc43de54f42a":"file:font-medium","mui-20315da78444":"placeholder:text-muted-foreground","mui-3deb00079b4c":"first:border-s-0","mui-37ad15a95595":"hover:bg-accent","mui-63b29dace366":"hover:bg-accent/50","mui-bb6a4b3e902d":"hover:bg-destructive/90","mui-5cbdd1b32f1a":"hover:bg-muted/50","mui-4273133a876a":"hover:bg-primary/20","mui-af9ea085901b":"hover:bg-primary/90","mui-099700a5a311":"hover:bg-secondary/80","mui-71863717995b":"hover:bg-transparent","mui-9f1f77b92dcb":"hover:text-accent-foreground","mui-4d6720d47806":"hover:text-foreground","mui-b56720602554":"hover:underline","mui-8da02faac748":"hover:opacity-100","mui-a8c1861c5d03":"focus:bg-accent","mui-a85c4c5d7465":"focus:text-accent-foreground","mui-b906a32b31ee":"focus-visible:border-ring","mui-2f669cfad5aa":"focus-visible:bg-primary/20","mui-39be5a15b766":"focus-visible:ring-1","mui-355efe22aedb":"focus-visible:ring-2","mui-365a4654f7b1":"focus-visible:ring-[3px]","mui-db549d38ff19":"focus-visible:ring-ring","mui-392a26f4c1b0":"focus-visible:ring-ring/50","mui-a47d391255f3":"focus-visible:outline","mui-1df9125eebaf":"focus-visible:outline-1","mui-a8719ed8b095":"focus-visible:-outline-offset-2","mui-2b1c7d88acff":"focus-visible:outline-primary","mui-223daa83ed2d":"focus-visible:outline-ring","mui-2e357972fc10":"focus-visible:outline-none","mui-50aafa8694bb":"focus-visible:ring-inset","mui-71998ea7a2d0":"active:cursor-grabbing","mui-8d3c1014b967":"disabled:pointer-events-none","mui-db567af109b7":"disabled:cursor-not-allowed","mui-4600b77303d6":"disabled:opacity-50","mui-7eb7501a2ef0":"has-focus:border-ring","mui-d0449753ba7b":"has-focus:ring-[3px]","mui-fc19c8471f34":"has-focus:ring-ring/50","mui-e288cffc2ef4":"has-[>svg]:px-1.5","mui-3b01ee05b16d":"has-[>svg]:px-2.5","mui-9e08353b774f":"has-[>svg]:px-3","mui-2c0115d1c32a":"aria-disabled:opacity-50","mui-1fac1d7d1df3":"aria-invalid:border-destructive","mui-2d91b4cbc3cb":"aria-invalid:ring-destructive","mui-5491fd0b4dc5":"aria-invalid:ring-destructive/20","mui-2d6703b5473b":"aria-pressed:bg-accent","mui-ff2dcda51a27":"aria-pressed:text-accent-foreground","mui-7d900a71e5ba":"aria-selected:text-muted-foreground","mui-397f5ba426a0":"data-[disabled]:pointer-events-none","mui-9beb654fcb0d":"data-[disabled]:opacity-50","mui-9d7d1760cd8e":"data-[highlighted=true]:bg-accent","mui-6fa6a8ade7c4":"data-[inset]:pl-8","mui-bbaaa5969856":"data-[more-below=true]:[mask-image:linear-gradient(#000_calc(100%_-_1rem),transparent)]","mui-dfc89afd7885":"data-[navigation=pointer]:focus-visible:ring-0","mui-96308b55e0d6":"data-[range-end=true]:rounded-md","mui-a55dbe6f3eec":"data-[range-end=true]:rounded-r-md","mui-714051e55e8e":"data-[range-end=true]:bg-primary","mui-c764cebcd540":"data-[range-end=true]:text-primary-foreground","mui-05ec0700cd48":"data-[range-middle=true]:rounded-none","mui-5fb598fb06f4":"data-[range-middle=true]:bg-accent","mui-0813905aa141":"data-[range-middle=true]:text-accent-foreground","mui-8020e31bff67":"data-[range-start=true]:rounded-md","mui-ab65911baf1d":"data-[range-start=true]:rounded-l-md","mui-f5460d79341c":"data-[range-start=true]:bg-primary","mui-421a7d3e6631":"data-[range-start=true]:text-primary-foreground","mui-a39af81d518c":"data-[selected-single=true]:bg-primary","mui-b6991ab170de":"data-[selected-single=true]:text-primary-foreground","mui-3cc0d07ef843":"data-[selected=true]:rounded-none","mui-89f6aab7a3f8":"data-[side=bottom]:slide-in-from-top-2","mui-3550f48d66b9":"data-[side=left]:slide-in-from-right-2","mui-7720fe004f5c":"data-[side=right]:slide-in-from-left-2","mui-66b560f839de":"data-[side=top]:slide-in-from-bottom-2","mui-20553d55d224":"data-[state=checked]:border-primary","mui-57d6d6401a2f":"data-[state=checked]:bg-primary","mui-7ca12016214f":"data-[state=checked]:text-primary-foreground","mui-37d8a3f448ff":"data-[state=closed]:animate-none!","mui-0cb4489c3645":"data-[state=closed]:animate-out","mui-bb5869ef903b":"data-[state=closed]:fade-out-0","mui-f4cf4be63707":"data-[state=closed]:zoom-out-95","mui-bae1e782f277":"data-[state=open]:animate-in","mui-4027d9c589b6":"data-[state=open]:bg-accent","mui-1952cd5b00aa":"data-[state=open]:text-accent-foreground","mui-6f73a280432e":"data-[state=open]:text-foreground","mui-790ed041a953":"data-[state=open]:opacity-100","mui-45464a92c1f6":"data-[state=open]:fade-in-0","mui-9ca352480f25":"data-[state=open]:zoom-in-95","mui-f3f7a9c5e1b3":"data-[variant=destructive]:text-destructive","mui-e2bb4ac97190":"data-[variant=destructive]:focus:bg-destructive/10","mui-353a727facfd":"data-[variant=destructive]:focus:text-destructive","mui-237747164b60":"motion-reduce:animate-none","mui-0cc20f4e20c8":"sm:w-[21.875rem]","mui-56760b222da0":"md:flex-row","mui-c05c9b99939d":"md:text-sm","mui-36b12e8339c7":"rtl:rotate-180","mui-d254c96aea74":"dark:bg-green-950","mui-9daa2369a41b":"dark:bg-input/30","mui-b2786f463a62":"dark:hover:text-accent-foreground","mui-c88f65aa011e":"dark:aria-invalid:ring-destructive/40","mui-bd73d819941e":"dark:data-[state=checked]:bg-primary","mui-98a28c2293f7":"dark:data-[variant=destructive]:focus:bg-destructive/20","mui-d78a8526410d":"pointer-coarse:[--cell-size:min(2.5rem,calc((100vw-3.5rem)/7))]","mui-b51243872d85":"sm:pointer-fine:h-8","mui-e771a8b4d87d":"sm:pointer-fine:h-9","mui-aa0e3c036805":"sm:pointer-fine:min-h-8","mui-0288c4ea71ea":"sm:pointer-fine:py-0.5","mui-41d1475cf71a":"sm:pointer-fine:py-1.5","mui-548a450e8e53":"[&_*]:transition-none!","mui-a1c8c43d9be2":"[&_[role^=menuitem]]:min-h-9","mui-b43343fe71c0":"sm:pointer-fine:[&_[role^=menuitem]]:min-h-8","mui-cc310a330231":"[&_button]:font-semibold","mui-b7ff49878425":"[&_button]:underline","mui-d9bdd2c94504":"[&_button]:underline-offset-4","mui-bcae9d37090c":"[&_svg]:pointer-events-none","mui-c77732bd3ab4":"[&_svg]:size-3.5","mui-040e748a3fa0":"[&_svg]:shrink-0","mui-be87a4a64d81":"[&_svg:not([class*='size-'])]:size-3","mui-eb5ef2dbc2d4":"[&_svg:not([class*='size-'])]:size-4","mui-8637dfd54fbb":"[&_svg:not([class*='text-'])]:text-muted-foreground","mui-4f05a238500e":"[&::-webkit-search-cancel-button]:appearance-none","mui-74ab31abd804":"[&:first-child[data-selected=true]_button]:rounded-l-md","mui-13858191ca50":"rtl:**:[.rdp-button\\_next>svg]:rotate-180","mui-a324a7f99932":"rtl:**:[.rdp-button\\_previous>svg]:rotate-180","mui-82b114bbff3d":"data-[variant=destructive]:*:[svg]:text-destructive!","mui-6ee0c74de40c":"[&:last-child[data-selected=true]_button]:rounded-r-md","mui-6162ab70efb5":"[&:nth-child(2)[data-selected=true]_button]:rounded-l-md","mui-f157ee6bae99":"[&>div]:w-full","mui-ba417cf466b0":"[&>span]:text-xs","mui-829c8ef4f9c5":"[&>span]:opacity-70","mui-bf95f682e553":"[&>span:first-child]:mt-[calc(0.5lh-0.4375rem)]","mui-eb740dd32318":"[&>svg]:size-3.5","mui-019fd73c95db":"[&>svg]:text-muted-foreground","mui-b8293c91796c":"[[data-slot=card-content]_&]:bg-transparent","mui-8dd7e6b42262":"[[data-slot=popover-content]_&]:bg-transparent"};
1
+ export const originalClassNames = {"mui-cb20bd519346":"pointer-events-auto","mui-33228ff7d583":"pointer-events-none","mui-b75af7ef6c4d":"invisible","mui-d42ef1497900":"visible","mui-32fb090591d9":"sr-only","mui-747355bdc2a2":"absolute","mui-d2d9e1f13413":"relative","mui-964a9431ff49":"sticky","mui-ce13093ad8c9":"inset-0","mui-3ba24c062d55":"inset-x-0","mui-eb9e48c5dda9":"inset-y-0","mui-cced28c6dc3f":"start","mui-207bd0b3f259":"start-2","mui-cea70f23972e":"start-3","mui-361e48d0308f":"end","mui-13422ddc8d83":"end-1","mui-585f4729f611":"end-9","mui-98599e4ee250":"top-0","mui-4e45f4841abb":"top-1/2","mui-a74c4477017c":"right-0","mui-30150dd033ab":"bottom-0","mui-a5c36273c0f0":"bottom-2","mui-635702706586":"left-0","mui-014aadadffad":"isolate","mui-d7efd1b0b0f9":"z-1","mui-418e44ad4f9e":"z-10","mui-4e8f0a87a0dc":"z-20","mui-fbb62f5cb6fe":"z-30","mui-3eef1ce97dba":"z-50","mui-a42d519714d6":"container","mui-a2526bc2efa3":"m-0","mui-abba77319850":"-mx-1","mui-1752f11474a6":"mx-auto","mui-d8747231f142":"my-1","mui-958e2cfcf5b6":"-ms-2","mui-291952c2525a":"-ms-px","mui-8cc46fa87f41":"-me-1.5","mui-f28fea81a5cd":"mt-2","mui-cc51bda60e7e":"ml-auto","mui-496aca80e4d8":"block","mui-d1b2a59fbea7":"contents","mui-222f930b8752":"flex","mui-0f2a693e93e2":"grid","mui-e564b4081d7a":"hidden","mui-995cf20a9c45":"inline","mui-123306850fe1":"inline-flex","mui-0d4fc4a78d37":"table","mui-3da89b3ed14b":"field-sizing-content","mui-129d6f9b1e07":"aspect-square","mui-f7d12b41bceb":"size-(--cell-size)","mui-dc797fcc7165":"size-1.5","mui-5e34f5313859":"size-3","mui-61c000c8a98a":"size-3.5","mui-100c22d5776b":"size-4","mui-2bd43fb57913":"size-5","mui-0712570dcc9f":"size-6","mui-79ede756e761":"size-7","mui-ebd37e04d422":"size-8","mui-3ee10ef4c057":"size-9","mui-d0a383a9c24f":"size-10","mui-4dad94bd15e3":"size-auto","mui-a5960ac1d283":"h-(--cell-size)","mui-c7d5500b77ab":"h-0","mui-2edce89ef182":"h-3","mui-099be97e1fa4":"h-4","mui-ce1945804664":"h-6","mui-c8e50836f8a1":"h-7","mui-1fb07b38c63b":"h-8","mui-539ae144f076":"h-9","mui-fdd2f85cad6b":"h-10","mui-a66e9985b093":"h-auto","mui-57c930dc1c31":"h-full","mui-ae2c4b060bb9":"h-px","mui-571ea69568d3":"max-h-(--filter-menu-height)","mui-1f061e70178e":"max-h-(--radix-dropdown-menu-content-available-height)","mui-4d3f1304ebb2":"max-h-(--radix-popover-content-available-height)","mui-da0beef015c9":"max-h-[400px]","mui-80baa5d03af7":"max-h-[calc(var(--filter-menu-height)-2px)]","mui-1326520533f0":"max-h-[min(6rem,calc(var(--filter-menu-height)*0.25))]","mui-fb4a3e97b5bd":"max-h-[min(20rem,var(--radix-dropdown-menu-content-available-height,20rem))]","mui-dcd942c18ddc":"max-h-[var(--radix-dropdown-menu-content-available-height)]","mui-7bd696ca6be3":"max-h-full","mui-410da8dfa8ac":"min-h-0","mui-9974acedf3f7":"min-h-9","mui-8423dc94ee06":"min-h-10","mui-50312c3ce4a3":"min-h-[60px]","mui-d48fe95d4da8":"w-(--cell-size)","mui-d4ea834145ae":"w-2","mui-56bb14cbd1fe":"w-2/3","mui-8867d85ed290":"w-8","mui-4ac4ec8dfbce":"w-40","mui-37535002f0f7":"w-72","mui-a4cce7869436":"w-[300px]","mui-fc6a57ff7553":"w-[var(--mendy-filter-editor-width,19rem)]","mui-0b9c84552e40":"w-[var(--mendy-filter-list-width,var(--mendy-filter-anchor-width,18.75rem))]","mui-4415137b0467":"w-[var(--mendy-filter-menu-width,calc(var(--filter-list-width)_+_var(--mendy-filter-editor-width,19rem)))]","mui-8cfb5a42ef9f":"w-fit","mui-58d0413dd93c":"w-full","mui-91f82aa1df0c":"max-w-[60%]","mui-34055e6f8c1b":"max-w-[calc(100vw-2rem)]","mui-81b198a2db84":"max-w-full","mui-1458e495e3ae":"min-w-(--cell-size)","mui-184ddc11e5f9":"min-w-0","mui-e9ab1547c94d":"min-w-[8rem]","mui-2bf6510f1330":"min-w-full","mui-7bd5bab6d7f4":"flex-1","mui-66b490dd6005":"shrink","mui-27ead27a81df":"shrink-0","mui-adca5146416e":"grow","mui-215061302c50":"border-collapse","mui-3a3774477287":"origin-(--radix-dropdown-menu-content-transform-origin)","mui-5dde0fd996f0":"-translate-y-1/2","mui-4e3f08588318":"-rotate-45","mui-c80411b7591f":"rotate-45","mui-aa214ea38326":"transform","mui-393df0d154e0":"animate-none!","mui-7b3cd77eb999":"animate-pulse","mui-2194d094b585":"cursor-col-resize","mui-d343f41ba73e":"cursor-default","mui-f2e47d9c52ad":"cursor-grab","mui-d2fa8848968d":"cursor-pointer","mui-739a9a000791":"touch-none","mui-acd532d8913e":"resize","mui-ae112c903ef8":"resize-y","mui-eeb3a8b33f69":"grid-cols-[min(var(--filter-list-width),calc(100%_-_min(var(--mendy-filter-editor-width,19rem),50%)))_minmax(0,1fr)]","mui-b5985369ee35":"grid-rows-[minmax(0,1fr)]","mui-302c0d124a94":"flex-col","mui-faa8a23c68f6":"flex-wrap","mui-8fd2e2355cbc":"place-content-center","mui-71556df3b421":"items-center","mui-b9677bd1cb66":"items-start","mui-32c92bb1fde4":"justify-between","mui-a503dd374cca":"justify-center","mui-307644c34db6":"justify-end","mui-c62ec162662e":"justify-start","mui-19e97f3f40e6":"gap-1","mui-70007b876865":"gap-1.5","mui-074569488cca":"gap-2","mui-d7db3451d154":"gap-3","mui-90fc3ec35a37":"gap-4","mui-27e6c432192f":"space-y-1","mui-267171770524":"space-y-2","mui-5a3a4ee420c2":"truncate","mui-1a26a0d28420":"overflow-auto","mui-d5111d0e9f48":"overflow-hidden","mui-0fc84a692dad":"overflow-visible","mui-3b82279f859f":"overflow-x-hidden","mui-2368e909f3a5":"overflow-y-auto","mui-998780cdef87":"overscroll-contain","mui-b005d61d0953":"rounded-full","mui-3fa8c572949b":"rounded-md","mui-52417259a4f5":"rounded-none","mui-02e603944040":"rounded-sm","mui-b31810dbd8a9":"rounded-s-none","mui-10c0bae8cba9":"rounded-l-md","mui-34bbd346e74c":"rounded-r-md","mui-4f1a55de40bc":"border","mui-dad556abfe15":"border-0","mui-55860251be20":"border-s","mui-3b6d5fc7b061":"border-e","mui-894c3815a57f":"border-t","mui-bbe39cfb5cc6":"border-b","mui-8450eb0f1857":"border-dashed","mui-163a623b3716":"border-border/50","mui-1267095cdeb7":"border-input","mui-9b76f456b8c9":"border-muted-foreground/50","mui-515f9fdc6db7":"border-primary","mui-292affc1f780":"bg-accent","mui-5b272f3c5076":"bg-background","mui-a943bea85d66":"bg-border","mui-0cf6c2e8fe7e":"bg-current","mui-965cf6587342":"bg-destructive","mui-047624ec0c39":"bg-green-100","mui-87ecb59f2d2d":"bg-muted","mui-810ae775809b":"bg-muted-foreground/20","mui-e593c38256e0":"bg-popover","mui-0c2864fba576":"bg-primary","mui-d191cb569aac":"bg-secondary","mui-8fca9236d191":"bg-transparent","mui-04760bcd507f":"p-0","mui-1dee6e3ec67d":"p-1","mui-b97db4a9f432":"p-2","mui-094f5333853b":"p-3","mui-c432836760e3":"p-6","mui-c7902d77ad80":"p-8","mui-56b8f5e0fb12":"px-(--cell-size)","mui-16e909e6f01d":"px-0","mui-1da2e8f173c5":"px-1.5","mui-e7e01cc7f4df":"px-2","mui-0f9e6672913a":"px-3","mui-9513b3968002":"px-4","mui-0194c6e46323":"px-8","mui-1fcf28756bb1":"py-1","mui-a8c1dfb1d4ef":"py-1.5","mui-b5edc3ea7c91":"py-2","mui-d3cea061f2f3":"py-3","mui-078d945937da":"ps-8","mui-b2100041c585":"ps-9","mui-05d4103bd67f":"pe-2","mui-a202804a1738":"pe-3","mui-0e14c365f9e8":"pe-9","mui-559069d2c2e5":"pe-16","mui-0a702d97ed7d":"pt-3","mui-1a52da5bc88c":"pr-1","mui-f5d8e661d857":"pl-2","mui-05ab12448317":"text-center","mui-10558dbb3a24":"text-end","mui-e9347b78185f":"text-start","mui-757071a1d1c4":"text-base","mui-c74ab393b96d":"text-sm","mui-3992de70b033":"text-xs","mui-5f120ad4b50b":"text-[0.8rem]","mui-761cdb81bddb":"leading-none","mui-daaac3fbf55e":"font-medium","mui-52101fc7d8bb":"font-normal","mui-e1683b3c030a":"tracking-widest","mui-393883c1db68":"[overflow-wrap:anywhere]","mui-37cf9655f30a":"break-words","mui-726fca123972":"whitespace-normal","mui-963f6168b7d6":"whitespace-nowrap","mui-cc209238d847":"text-accent-foreground","mui-5eafab9bbefc":"text-current","mui-887b9502d5c7":"text-destructive","mui-8d4bf2704c8d":"text-destructive-foreground","mui-957a109f887f":"text-foreground","mui-35f35c41d134":"text-muted-foreground","mui-5bd2afe89f0b":"text-popover-foreground","mui-249f14ee5b6b":"text-primary","mui-abd1aaa1f5b2":"text-primary-foreground","mui-80df79ec9bb5":"text-secondary-foreground","mui-944969efb294":"underline","mui-d52f902a57e8":"underline-offset-4","mui-94f91922a10e":"opacity-0","mui-0b5a4d1257ab":"opacity-50","mui-65694092f002":"opacity-100","mui-0d4ca75de41c":"shadow-lg","mui-94ea94fde25f":"shadow-md","mui-89c3006b2722":"shadow-none","mui-7de07d413c13":"shadow-xs","mui-853be6c11609":"ring-2","mui-fd9d0b696aac":"ring-primary","mui-59edd3d33673":"outline-hidden","mui-318678825324":"outline","mui-e0122edc668b":"drop-shadow-md","mui-dfc3376b8266":"filter","mui-70dd37c11434":"transition","mui-eae178841c68":"transition-colors","mui-2cdd01663c76":"transition-opacity","mui-2b48746f4314":"transition-shadow","mui-b4b2fd95f324":"transition-none","mui-b30fc56058b6":"outline-none","mui-78905c9e865c":"select-none","mui-d80b6593dae5":"[--cell-size:--spacing(8)]","mui-82c2977beb8e":"[--cell-size:min(2rem,calc((100vw-3.5rem)/7))]","mui-d7d803c609c5":"[--filter-list-width:var(--mendy-filter-list-width,var(--mendy-filter-anchor-width,13rem))]","mui-971625533e56":"[--filter-menu-height:min(var(--mendy-filter-menu-max-height,44rem),var(--radix-dropdown-menu-content-available-height,44rem))]","mui-cacb19aa9640":"[scrollbar-width:thin]","mui-14bd99410890":"[unicode-bidi:isolate]","mui-97b1c00ff005":"group-hover:bg-accent","mui-ad936fcbed63":"group","mui-9af9a4182597":"group-data-[disabled=true]:pointer-events-none","mui-272ef88d6a0c":"group-data-[disabled=true]:opacity-50","mui-60052b901494":"group-data-[focused=true]/day:relative","mui-d9c5891363f9":"group/day","mui-3f96bf138f7b":"group-data-[focused=true]/day:z-10","mui-d39eb62b8363":"group-data-[focused=true]/day:border-ring","mui-5892a880410a":"group-data-[focused=true]/day:ring-1","mui-31b75c623c06":"group-data-[focused=true]/day:ring-ring","mui-e6020023567a":"group-data-[highlighted=true]:bg-accent","mui-f0ee83167878":"peer-disabled:cursor-not-allowed","mui-2ffc1d06387e":"peer","mui-25d26df52a1d":"peer-disabled:opacity-50","mui-32713fefe32f":"file:border-0","mui-25a74d576c42":"file:bg-transparent","mui-844abccf1fd0":"file:text-sm","mui-dc43de54f42a":"file:font-medium","mui-20315da78444":"placeholder:text-muted-foreground","mui-3deb00079b4c":"first:border-s-0","mui-37ad15a95595":"hover:bg-accent","mui-63b29dace366":"hover:bg-accent/50","mui-bb6a4b3e902d":"hover:bg-destructive/90","mui-5cbdd1b32f1a":"hover:bg-muted/50","mui-4273133a876a":"hover:bg-primary/20","mui-af9ea085901b":"hover:bg-primary/90","mui-099700a5a311":"hover:bg-secondary/80","mui-71863717995b":"hover:bg-transparent","mui-9f1f77b92dcb":"hover:text-accent-foreground","mui-4d6720d47806":"hover:text-foreground","mui-b56720602554":"hover:underline","mui-8da02faac748":"hover:opacity-100","mui-a8c1861c5d03":"focus:bg-accent","mui-a85c4c5d7465":"focus:text-accent-foreground","mui-b906a32b31ee":"focus-visible:border-ring","mui-2f669cfad5aa":"focus-visible:bg-primary/20","mui-39be5a15b766":"focus-visible:ring-1","mui-355efe22aedb":"focus-visible:ring-2","mui-365a4654f7b1":"focus-visible:ring-[3px]","mui-db549d38ff19":"focus-visible:ring-ring","mui-392a26f4c1b0":"focus-visible:ring-ring/50","mui-a47d391255f3":"focus-visible:outline","mui-1df9125eebaf":"focus-visible:outline-1","mui-a8719ed8b095":"focus-visible:-outline-offset-2","mui-2b1c7d88acff":"focus-visible:outline-primary","mui-223daa83ed2d":"focus-visible:outline-ring","mui-2e357972fc10":"focus-visible:outline-none","mui-50aafa8694bb":"focus-visible:ring-inset","mui-71998ea7a2d0":"active:cursor-grabbing","mui-8d3c1014b967":"disabled:pointer-events-none","mui-db567af109b7":"disabled:cursor-not-allowed","mui-4600b77303d6":"disabled:opacity-50","mui-7eb7501a2ef0":"has-focus:border-ring","mui-d0449753ba7b":"has-focus:ring-[3px]","mui-fc19c8471f34":"has-focus:ring-ring/50","mui-e288cffc2ef4":"has-[>svg]:px-1.5","mui-3b01ee05b16d":"has-[>svg]:px-2.5","mui-9e08353b774f":"has-[>svg]:px-3","mui-2c0115d1c32a":"aria-disabled:opacity-50","mui-1fac1d7d1df3":"aria-invalid:border-destructive","mui-2d91b4cbc3cb":"aria-invalid:ring-destructive","mui-5491fd0b4dc5":"aria-invalid:ring-destructive/20","mui-2d6703b5473b":"aria-pressed:bg-accent","mui-ff2dcda51a27":"aria-pressed:text-accent-foreground","mui-7d900a71e5ba":"aria-selected:text-muted-foreground","mui-397f5ba426a0":"data-[disabled]:pointer-events-none","mui-9beb654fcb0d":"data-[disabled]:opacity-50","mui-9d7d1760cd8e":"data-[highlighted=true]:bg-accent","mui-6fa6a8ade7c4":"data-[inset]:pl-8","mui-bbaaa5969856":"data-[more-below=true]:[mask-image:linear-gradient(#000_calc(100%_-_1rem),transparent)]","mui-dfc89afd7885":"data-[navigation=pointer]:focus-visible:ring-0","mui-96308b55e0d6":"data-[range-end=true]:rounded-md","mui-a55dbe6f3eec":"data-[range-end=true]:rounded-r-md","mui-714051e55e8e":"data-[range-end=true]:bg-primary","mui-c764cebcd540":"data-[range-end=true]:text-primary-foreground","mui-05ec0700cd48":"data-[range-middle=true]:rounded-none","mui-5fb598fb06f4":"data-[range-middle=true]:bg-accent","mui-0813905aa141":"data-[range-middle=true]:text-accent-foreground","mui-8020e31bff67":"data-[range-start=true]:rounded-md","mui-ab65911baf1d":"data-[range-start=true]:rounded-l-md","mui-f5460d79341c":"data-[range-start=true]:bg-primary","mui-421a7d3e6631":"data-[range-start=true]:text-primary-foreground","mui-a39af81d518c":"data-[selected-single=true]:bg-primary","mui-b6991ab170de":"data-[selected-single=true]:text-primary-foreground","mui-3cc0d07ef843":"data-[selected=true]:rounded-none","mui-89f6aab7a3f8":"data-[side=bottom]:slide-in-from-top-2","mui-3550f48d66b9":"data-[side=left]:slide-in-from-right-2","mui-7720fe004f5c":"data-[side=right]:slide-in-from-left-2","mui-66b560f839de":"data-[side=top]:slide-in-from-bottom-2","mui-20553d55d224":"data-[state=checked]:border-primary","mui-57d6d6401a2f":"data-[state=checked]:bg-primary","mui-7ca12016214f":"data-[state=checked]:text-primary-foreground","mui-37d8a3f448ff":"data-[state=closed]:animate-none!","mui-0cb4489c3645":"data-[state=closed]:animate-out","mui-bb5869ef903b":"data-[state=closed]:fade-out-0","mui-f4cf4be63707":"data-[state=closed]:zoom-out-95","mui-bae1e782f277":"data-[state=open]:animate-in","mui-4027d9c589b6":"data-[state=open]:bg-accent","mui-1952cd5b00aa":"data-[state=open]:text-accent-foreground","mui-6f73a280432e":"data-[state=open]:text-foreground","mui-790ed041a953":"data-[state=open]:opacity-100","mui-45464a92c1f6":"data-[state=open]:fade-in-0","mui-9ca352480f25":"data-[state=open]:zoom-in-95","mui-f3f7a9c5e1b3":"data-[variant=destructive]:text-destructive","mui-e2bb4ac97190":"data-[variant=destructive]:focus:bg-destructive/10","mui-353a727facfd":"data-[variant=destructive]:focus:text-destructive","mui-237747164b60":"motion-reduce:animate-none","mui-0cc20f4e20c8":"sm:w-[21.875rem]","mui-56760b222da0":"md:flex-row","mui-c05c9b99939d":"md:text-sm","mui-36b12e8339c7":"rtl:rotate-180","mui-d254c96aea74":"dark:bg-green-950","mui-9daa2369a41b":"dark:bg-input/30","mui-b2786f463a62":"dark:hover:text-accent-foreground","mui-c88f65aa011e":"dark:aria-invalid:ring-destructive/40","mui-bd73d819941e":"dark:data-[state=checked]:bg-primary","mui-98a28c2293f7":"dark:data-[variant=destructive]:focus:bg-destructive/20","mui-d78a8526410d":"pointer-coarse:[--cell-size:min(2.5rem,calc((100vw-3.5rem)/7))]","mui-b51243872d85":"sm:pointer-fine:h-8","mui-e771a8b4d87d":"sm:pointer-fine:h-9","mui-aa0e3c036805":"sm:pointer-fine:min-h-8","mui-0288c4ea71ea":"sm:pointer-fine:py-0.5","mui-41d1475cf71a":"sm:pointer-fine:py-1.5","mui-548a450e8e53":"[&_*]:transition-none!","mui-a1c8c43d9be2":"[&_[role^=menuitem]]:min-h-9","mui-b43343fe71c0":"sm:pointer-fine:[&_[role^=menuitem]]:min-h-8","mui-cc310a330231":"[&_button]:font-semibold","mui-b7ff49878425":"[&_button]:underline","mui-d9bdd2c94504":"[&_button]:underline-offset-4","mui-bcae9d37090c":"[&_svg]:pointer-events-none","mui-c77732bd3ab4":"[&_svg]:size-3.5","mui-040e748a3fa0":"[&_svg]:shrink-0","mui-be87a4a64d81":"[&_svg:not([class*='size-'])]:size-3","mui-eb5ef2dbc2d4":"[&_svg:not([class*='size-'])]:size-4","mui-8637dfd54fbb":"[&_svg:not([class*='text-'])]:text-muted-foreground","mui-4f05a238500e":"[&::-webkit-search-cancel-button]:appearance-none","mui-74ab31abd804":"[&:first-child[data-selected=true]_button]:rounded-l-md","mui-13858191ca50":"rtl:**:[.rdp-button\\_next>svg]:rotate-180","mui-a324a7f99932":"rtl:**:[.rdp-button\\_previous>svg]:rotate-180","mui-82b114bbff3d":"data-[variant=destructive]:*:[svg]:text-destructive!","mui-6ee0c74de40c":"[&:last-child[data-selected=true]_button]:rounded-r-md","mui-6162ab70efb5":"[&:nth-child(2)[data-selected=true]_button]:rounded-l-md","mui-f157ee6bae99":"[&>div]:w-full","mui-ba417cf466b0":"[&>span]:text-xs","mui-829c8ef4f9c5":"[&>span]:opacity-70","mui-bf95f682e553":"[&>span:first-child]:mt-[calc(0.5lh-0.4375rem)]","mui-eb740dd32318":"[&>svg]:size-3.5","mui-019fd73c95db":"[&>svg]:text-muted-foreground","mui-b8293c91796c":"[[data-slot=card-content]_&]:bg-transparent","mui-8dd7e6b42262":"[[data-slot=popover-content]_&]:bg-transparent"};
package/dist/styles.css CHANGED
@@ -102,6 +102,9 @@
102
102
  .mui-014aadadffad:where([data-mendy-ui], [data-mendy-ui] *) {
103
103
  isolation: isolate;
104
104
  }
105
+ .mui-d7efd1b0b0f9:where([data-mendy-ui], [data-mendy-ui] *) {
106
+ z-index: 1;
107
+ }
105
108
  .mui-418e44ad4f9e:where([data-mendy-ui], [data-mendy-ui] *) {
106
109
  z-index: 10;
107
110
  }
@@ -297,6 +300,9 @@
297
300
  .mui-dcd942c18ddc:where([data-mendy-ui], [data-mendy-ui] *) {
298
301
  max-height: var(--radix-dropdown-menu-content-available-height);
299
302
  }
303
+ .mui-7bd696ca6be3:where([data-mendy-ui], [data-mendy-ui] *) {
304
+ max-height: 100%;
305
+ }
300
306
  .mui-410da8dfa8ac:where([data-mendy-ui], [data-mendy-ui] *) {
301
307
  min-height: calc(var(--spacing) * 0);
302
308
  }
@@ -375,6 +381,9 @@
375
381
  .mui-27ead27a81df:where([data-mendy-ui], [data-mendy-ui] *) {
376
382
  flex-shrink: 0;
377
383
  }
384
+ .mui-adca5146416e:where([data-mendy-ui], [data-mendy-ui] *) {
385
+ flex-grow: 1;
386
+ }
378
387
  .mui-215061302c50:where([data-mendy-ui], [data-mendy-ui] *) {
379
388
  border-collapse: collapse;
380
389
  }
@@ -573,6 +582,9 @@
573
582
  border-color: color-mix(in oklab, var(--muted-foreground, #737373) 50%, transparent);
574
583
  }
575
584
  }
585
+ .mui-515f9fdc6db7:where([data-mendy-ui], [data-mendy-ui] *) {
586
+ border-color: var(--primary, #171717);
587
+ }
576
588
  .mui-292affc1f780:where([data-mendy-ui], [data-mendy-ui] *) {
577
589
  background-color: var(--accent, #f5f5f5);
578
590
  }
@@ -101,6 +101,9 @@
101
101
  .mui-014aadadffad:where([data-mendy-ui], [data-mendy-ui] *) {
102
102
  isolation: isolate;
103
103
  }
104
+ .mui-d7efd1b0b0f9:where([data-mendy-ui], [data-mendy-ui] *) {
105
+ z-index: 1;
106
+ }
104
107
  .mui-418e44ad4f9e:where([data-mendy-ui], [data-mendy-ui] *) {
105
108
  z-index: 10;
106
109
  }
@@ -296,6 +299,9 @@
296
299
  .mui-dcd942c18ddc:where([data-mendy-ui], [data-mendy-ui] *) {
297
300
  max-height: var(--radix-dropdown-menu-content-available-height);
298
301
  }
302
+ .mui-7bd696ca6be3:where([data-mendy-ui], [data-mendy-ui] *) {
303
+ max-height: 100%;
304
+ }
299
305
  .mui-410da8dfa8ac:where([data-mendy-ui], [data-mendy-ui] *) {
300
306
  min-height: calc(var(--spacing) * 0);
301
307
  }
@@ -374,6 +380,9 @@
374
380
  .mui-27ead27a81df:where([data-mendy-ui], [data-mendy-ui] *) {
375
381
  flex-shrink: 0;
376
382
  }
383
+ .mui-adca5146416e:where([data-mendy-ui], [data-mendy-ui] *) {
384
+ flex-grow: 1;
385
+ }
377
386
  .mui-215061302c50:where([data-mendy-ui], [data-mendy-ui] *) {
378
387
  border-collapse: collapse;
379
388
  }
@@ -572,6 +581,9 @@
572
581
  border-color: color-mix(in oklab, var(--muted-foreground, #737373) 50%, transparent);
573
582
  }
574
583
  }
584
+ .mui-515f9fdc6db7:where([data-mendy-ui], [data-mendy-ui] *) {
585
+ border-color: var(--primary, #171717);
586
+ }
575
587
  .mui-292affc1f780:where([data-mendy-ui], [data-mendy-ui] *) {
576
588
  background-color: var(--accent, #f5f5f5);
577
589
  }
@@ -3,7 +3,9 @@ export const interactiveSelector = 'button, a, input, textarea, select, [content
3
3
  export function selectedCellsText(table) {
4
4
  const selected = new Set(table.getSelectedCellIds());
5
5
  const rows = table
6
- .getRowsInDisplayOrder()
6
+ .getCellSelectionRowIds()
7
+ .map((id) => table.getRow(id))
8
+ .sort((a, b) => a.getDisplayIndex() - b.getDisplayIndex())
7
9
  .filter((row) => row.getVisibleCells().some((cell) => selected.has(cell.id)));
8
10
  const columns = new Set(rows.flatMap((row) => row
9
11
  .getVisibleCells()
@@ -0,0 +1,9 @@
1
+ interface WidthColumn {
2
+ id: string;
3
+ size: number;
4
+ maxSize: number;
5
+ grow: number | false;
6
+ }
7
+ /** Allocate spare space without changing stored or user-resized column widths. */
8
+ export declare function distributeColumnWidths(columns: WidthColumn[], viewport: number | null): Map<string, number>;
9
+ export {};
@@ -0,0 +1,23 @@
1
+ /** Allocate spare space without changing stored or user-resized column widths. */
2
+ export function distributeColumnWidths(columns, viewport) {
3
+ const widths = new Map(columns.map((column) => [column.id, column.size]));
4
+ let spare = (viewport ?? 0) - columns.reduce((sum, column) => sum + column.size, 0);
5
+ let flexible = columns.filter((column) => typeof column.grow === "number" &&
6
+ Number.isFinite(column.grow) &&
7
+ column.grow > 0 &&
8
+ column.maxSize > column.size);
9
+ while (spare > 0.01 && flexible.length) {
10
+ const unit = flexible.reduce((max, column) => Math.max(max, Number(column.grow)), 0);
11
+ const weight = flexible.reduce((sum, column) => sum + Number(column.grow) / unit, 0);
12
+ let used = 0;
13
+ for (const column of flexible) {
14
+ const size = widths.get(column.id);
15
+ const extra = Math.min(column.maxSize - size, spare * (Number(column.grow) / unit / weight));
16
+ widths.set(column.id, size + extra);
17
+ used += extra;
18
+ }
19
+ spare -= used;
20
+ flexible = flexible.filter((column) => column.maxSize - widths.get(column.id) > 0.01);
21
+ }
22
+ return widths;
23
+ }
@@ -4,6 +4,8 @@ import type { DataTableFeatures } from "./features.js";
4
4
  export type TableColumn<T extends object> = ColumnDef<DataTableFeatures, T> & {
5
5
  label?: string;
6
6
  align?: "start" | "center" | "end";
7
+ /** Share of spare viewport width. Defaults to 1 for data columns, false for display columns. */
8
+ grow?: number | false;
7
9
  defaultHidden?: boolean;
8
10
  pin?: "start" | "end";
9
11
  copyValue?: (row: T) => string;
@@ -28,6 +30,7 @@ export interface ValueFormat<V> {
28
30
  interface ValueOptions<T extends object, V> {
29
31
  label: string;
30
32
  size?: number;
33
+ grow?: number | false;
31
34
  minSize?: number;
32
35
  maxSize?: number;
33
36
  hidden?: boolean;
@@ -48,6 +51,9 @@ interface ColumnBuilder<T extends object> {
48
51
  label: string;
49
52
  render: (row: T) => ReactNode;
50
53
  size?: number;
54
+ minSize?: number;
55
+ maxSize?: number;
56
+ grow?: number | false;
51
57
  pin?: "start" | "end";
52
58
  }): TableColumn<T>;
53
59
  }
@@ -9,6 +9,7 @@ function valueColumn(id, value, options) {
9
9
  header: options.label,
10
10
  label: options.label,
11
11
  size: options.size,
12
+ grow: options.grow,
12
13
  minSize: options.minSize,
13
14
  maxSize: options.maxSize,
14
15
  defaultHidden: options.hidden,
@@ -45,6 +46,9 @@ export function defineColumns(define) {
45
46
  label: options.label,
46
47
  header: options.label,
47
48
  size: options.size,
49
+ minSize: options.minSize,
50
+ maxSize: options.maxSize,
51
+ grow: options.grow ?? false,
48
52
  pin: options.pin,
49
53
  enableSorting: false,
50
54
  enableCellSelection: false,
@@ -40,4 +40,5 @@ export declare function tableLayout<T extends object>(table: DataTableInstance<T
40
40
  totalWidth: number;
41
41
  pinningActive: boolean;
42
42
  cellStyle: (column: Column<DataTableFeatures, T>) => CSSProperties;
43
+ offsets: number[];
43
44
  };
@@ -1,3 +1,4 @@
1
+ import { distributeColumnWidths } from "./column-widths.js";
1
2
  /** Keep headers, skeletons, and loaded cells on the same column geometry. */
2
3
  export function tableLayout(table, viewportWidth, rowHeight) {
3
4
  const columns = [
@@ -5,29 +6,44 @@ export function tableLayout(table, viewportWidth, rowHeight) {
5
6
  ...table.getCenterVisibleLeafColumns(),
6
7
  ...table.getEndVisibleLeafColumns(),
7
8
  ];
8
- const totalWidth = columns.reduce((sum, column) => sum + column.getSize(), 0);
9
+ const widths = distributeColumnWidths(columns.map((column) => {
10
+ const definition = column.columnDef;
11
+ return {
12
+ id: column.id,
13
+ size: column.getSize(),
14
+ maxSize: definition.maxSize ?? 1200,
15
+ grow: Object.hasOwn(table.state.columnSizing, column.id)
16
+ ? false
17
+ : (definition.grow ?? (column.accessorFn ? 1 : false)),
18
+ };
19
+ }), viewportWidth);
20
+ const size = (column) => widths.get(column.id);
21
+ const totalWidth = columns.reduce((sum, column) => sum + size(column), 0);
9
22
  const pinnedWidth = [
10
23
  ...table.getStartVisibleLeafColumns(),
11
24
  ...table.getEndVisibleLeafColumns(),
12
- ].reduce((sum, column) => sum + column.getSize(), 0);
25
+ ].reduce((sum, column) => sum + size(column), 0);
13
26
  // Preserve stored pins, but leave room to reach the middle columns on narrow screens.
14
27
  const pinningActive = (viewportWidth ?? Infinity) >= Math.min(totalWidth, pinnedWidth + 120);
15
28
  const positions = new Map();
16
29
  let offset = 0;
17
30
  for (const column of table.getStartVisibleLeafColumns()) {
18
31
  positions.set(column.id, { side: "left", offset });
19
- offset += column.getSize();
32
+ offset += size(column);
20
33
  }
21
34
  offset = 0;
22
35
  for (const column of [...table.getEndVisibleLeafColumns()].reverse()) {
23
36
  positions.set(column.id, { side: "right", offset });
24
- offset += column.getSize();
37
+ offset += size(column);
25
38
  }
26
- function cellStyle(column) {
39
+ const styles = new Map();
40
+ const offsets = [0];
41
+ for (const column of columns) {
42
+ offsets.push(offsets.at(-1) + size(column));
27
43
  const pin = pinningActive ? positions.get(column.id) : undefined;
28
- return {
29
- width: column.getSize(),
30
- minWidth: column.getSize(),
44
+ styles.set(column.id, {
45
+ width: size(column),
46
+ minWidth: size(column),
31
47
  height: rowHeight,
32
48
  ...(column.id === table.getEndVisibleLeafColumns()[0]?.id
33
49
  ? { marginInlineStart: "auto" }
@@ -45,7 +61,8 @@ export function tableLayout(table, viewportWidth, rowHeight) {
45
61
  : {}),
46
62
  }
47
63
  : {}),
48
- };
64
+ });
49
65
  }
50
- return { columns, totalWidth, pinningActive, cellStyle };
66
+ const cellStyle = (column) => styles.get(column.id);
67
+ return { columns, totalWidth, pinningActive, cellStyle, offsets };
51
68
  }
@@ -10,12 +10,16 @@ export declare function TableHeaderCell<T extends object>({ table, header, index
10
10
  renderHeader?: (header: Header<DataTableFeatures, T, unknown>) => ReactNode;
11
11
  contentClassName?: string;
12
12
  }): import("react/jsx-runtime").JSX.Element;
13
- export declare function TableBodyRow<T extends object>({ row, rowIndex, start, rowHeight, cellStyle, focusedId, copied, contentClassName, onRowActivate, isRowHighlighted, }: {
13
+ export declare function TableBodyRow<T extends object>({ row, rowIndex, start, rowHeight, cellStyle, columns, columnIndexes, contentVersion, contentState, focusedId, copied, contentClassName, onRowActivate, isRowHighlighted, }: {
14
14
  row: Row<DataTableFeatures, T>;
15
15
  rowIndex: number;
16
16
  start: number;
17
17
  rowHeight: number;
18
18
  cellStyle: (column: Column<DataTableFeatures, T>) => CSSProperties;
19
+ columns: Column<DataTableFeatures, T>[];
20
+ columnIndexes: Map<string, number>;
21
+ contentVersion: unknown;
22
+ contentState: unknown;
19
23
  focusedId?: string;
20
24
  copied: boolean;
21
25
  contentClassName?: string;
@@ -1,6 +1,7 @@
1
1
  "use client";
2
2
  import { jsx as _jsx, jsxs as _jsxs } from "react/jsx-runtime";
3
- import { flexRender } from "@tanstack/react-table";
3
+ import { memo, useMemo } from "react";
4
+ import { constructCell, flexRender } from "@tanstack/react-table";
4
5
  import { ArrowDown, ArrowUp } from "lucide-react";
5
6
  import { Button } from "../primitives/button.js";
6
7
  import { cn } from "../utils.js";
@@ -10,26 +11,26 @@ export function TableHeaderCell({ table, header, index, style, renderHeader, con
10
11
  const definition = column.columnDef;
11
12
  const title = definition.label ?? (typeof definition.header === "string" ? definition.header : column.id);
12
13
  const sorted = column.getIsSorted();
13
- return (_jsxs("div", { role: "columnheader", "aria-colindex": index + 1, "aria-sort": sorted === "asc" ? "ascending" : sorted === "desc" ? "descending" : undefined, style: style, className: "mui-d2d9e1f13413 mui-222f930b8752 mui-27ead27a81df mui-71556df3b421 mui-19e97f3f40e6 mui-3b6d5fc7b061 mui-5b272f3c5076 mui-0f9e6672913a mui-daaac3fbf55e mui-35f35c41d134", children: [_jsx("div", { className: cn("mui-184ddc11e5f9 mui-7bd5bab6d7f4 mui-d5111d0e9f48", (renderHeader || typeof definition.header === "function") && contentClassName), children: _jsx(TableHeaderContent, { header: header, renderHeader: renderHeader, title: title }) }), column.getCanResize() && _jsx(TableResizeHandle, { table: table, header: header, title: title })] }, column.id));
14
+ return (_jsxs("div", { role: "columnheader", "data-column-id": column.id, "aria-colindex": index + 1, "aria-sort": sorted === "asc" ? "ascending" : sorted === "desc" ? "descending" : undefined, style: style, className: "mui-d2d9e1f13413 mui-222f930b8752 mui-27ead27a81df mui-71556df3b421 mui-19e97f3f40e6 mui-3b6d5fc7b061 mui-5b272f3c5076 mui-0f9e6672913a mui-daaac3fbf55e mui-35f35c41d134", children: [_jsx("div", { className: cn("mui-184ddc11e5f9 mui-7bd5bab6d7f4 mui-d5111d0e9f48", (renderHeader || typeof definition.header === "function") && contentClassName), children: _jsx(TableHeaderContent, { header: header, renderHeader: renderHeader, title: title }) }), column.getCanResize() && (_jsx(TableResizeHandle, { table: table, header: header, title: title, width: Number(style.width) }))] }, column.id));
14
15
  }
15
- export function TableBodyRow({ row, rowIndex, start, rowHeight, cellStyle, focusedId, copied, contentClassName, onRowActivate, isRowHighlighted, }) {
16
- const cells = [
17
- ...row.getStartVisibleCells(),
18
- ...row.getCenterVisibleCells(),
19
- ...row.getEndVisibleCells(),
20
- ];
21
- return (_jsx("div", { role: "row", "aria-rowindex": rowIndex + 2, "aria-selected": row.getIsSelected(), "data-highlighted": isRowHighlighted?.(row.original), "data-index": rowIndex, className: "mui-ad936fcbed63 mui-747355bdc2a2 mui-635702706586 mui-98599e4ee250 mui-222f930b8752 mui-2bf6510f1330 mui-63b29dace366 mui-9d7d1760cd8e", style: { height: rowHeight, transform: `translateY(${start}px)` }, children: cells.map((cell, index) => {
16
+ export function TableBodyRow({ row, rowIndex, start, rowHeight, cellStyle, columns, columnIndexes, contentVersion, contentState, focusedId, copied, contentClassName, onRowActivate, isRowHighlighted, }) {
17
+ // The engine's getAllCells API eagerly allocates every column. Build only the
18
+ // viewport cells with its public constructor, and release them with this row.
19
+ const cache = useMemo(() => new WeakMap(), [row]);
20
+ const cells = columns.map((column) => {
21
+ let cell = cache.get(column);
22
+ if (!cell) {
23
+ cell = constructCell(column, row, row.table);
24
+ cache.set(column, cell);
25
+ }
26
+ return cell;
27
+ });
28
+ return (_jsx("div", { role: "row", "aria-rowindex": rowIndex + 2, "aria-selected": row.getIsSelected(), "data-highlighted": isRowHighlighted?.(row.original), "data-index": rowIndex, className: "mui-ad936fcbed63 mui-747355bdc2a2 mui-635702706586 mui-98599e4ee250 mui-222f930b8752 mui-2bf6510f1330 mui-63b29dace366 mui-9d7d1760cd8e", style: { height: rowHeight, transform: `translateY(${start}px)` }, children: cells.map((cell) => {
29
+ const index = columnIndexes.get(cell.column.id);
22
30
  const selected = cell.getIsSelected();
23
31
  const definition = cell.column.columnDef;
24
32
  const edge = selected ? cell.getSelectionEdges() : null;
25
- return (_jsx("div", { role: "gridcell", "aria-colindex": index + 1, "aria-selected": selected, "data-row-id": row.id, "data-column-id": cell.column.id, tabIndex: focusedId ? (focusedId === cell.id ? 0 : -1) : rowIndex === 0 && index === 0 ? 0 : -1, style: {
26
- ...cellStyle(cell.column),
27
- ...(selected
28
- ? {
29
- boxShadow: `${edge?.top ? "inset 0 2px var(--primary)," : ""}${edge?.bottom ? "inset 0 -2px var(--primary)," : ""}${edge?.left ? "inset 2px 0 var(--primary)," : ""}${edge?.right ? "inset -2px 0 var(--primary)," : ""} inset 0 0 0 0 transparent`,
30
- }
31
- : {}),
32
- }, className: cn("mui-222f930b8752 mui-27ead27a81df mui-71556df3b421 mui-d5111d0e9f48 mui-bbe39cfb5cc6 mui-3b6d5fc7b061 mui-5b272f3c5076 mui-0f9e6672913a mui-97b1c00ff005 mui-e6020023567a mui-a47d391255f3 mui-a8719ed8b095 mui-2b1c7d88acff", definition.align === "end" && "mui-307644c34db6 mui-10558dbb3a24", definition.align === "center" && "mui-a503dd374cca mui-05ab12448317", selected && "mui-292affc1f780", selected && copied && "mui-047624ec0c39 mui-d254c96aea74"), onMouseDown: (event) => {
33
+ return (_jsxs("div", { role: "gridcell", "aria-colindex": index + 1, "aria-selected": selected, "data-row-id": row.id, "data-column-id": cell.column.id, tabIndex: focusedId ? (focusedId === cell.id ? 0 : -1) : rowIndex === 0 && index === 0 ? 0 : -1, style: cellStyle(cell.column), className: cn("mui-d2d9e1f13413 mui-222f930b8752 mui-27ead27a81df mui-71556df3b421 mui-bbe39cfb5cc6 mui-3b6d5fc7b061 mui-5b272f3c5076 mui-0f9e6672913a mui-97b1c00ff005 mui-e6020023567a mui-a47d391255f3 mui-a8719ed8b095 mui-2b1c7d88acff", definition.align === "end" && "mui-307644c34db6 mui-10558dbb3a24", definition.align === "center" && "mui-a503dd374cca mui-05ab12448317", selected && "mui-292affc1f780", selected && copied && "mui-047624ec0c39 mui-d254c96aea74"), onMouseDown: (event) => {
33
34
  if (event.button !== 0 ||
34
35
  event.detail > 1 ||
35
36
  !cell.getCanSelect() ||
@@ -43,21 +44,48 @@ export function TableBodyRow({ row, rowIndex, start, rowHeight, cellStyle, focus
43
44
  }, onMouseEnter: cell.getSelectionExtendHandler(), onDoubleClick: (event) => {
44
45
  if (!event.target.closest(interactiveSelector))
45
46
  onRowActivate?.(row.original);
46
- }, children: _jsx("div", { className: cn("mui-184ddc11e5f9 mui-81b198a2db84 mui-5a3a4ee420c2", contentClassName), children: flexRender(cell.column.columnDef.cell ?? (() => String(cell.getValue() ?? "")), cell.getContext()) }) }, cell.id));
47
+ }, children: [selected && (_jsx("span", { "aria-hidden": "true", "data-selection-outline": "", className: "mui-33228ff7d583 mui-747355bdc2a2 mui-d7efd1b0b0f9 mui-515f9fdc6db7", style: {
48
+ top: edge?.top ? 0 : -1,
49
+ bottom: edge?.bottom ? -1 : -2,
50
+ left: -Number(cellStyle(cell.column).borderLeftWidth ?? 0),
51
+ right: -Number(cellStyle(cell.column).borderRightWidth ?? 1),
52
+ borderTopWidth: edge?.top ? 2 : 0,
53
+ borderBottomWidth: edge?.bottom ? 2 : 0,
54
+ borderLeftWidth: edge?.left ? 2 : 0,
55
+ borderRightWidth: edge?.right ? 2 : 0,
56
+ } })), _jsx("div", { className: cn("mui-7bd696ca6be3 mui-184ddc11e5f9 mui-81b198a2db84 mui-5a3a4ee420c2", contentClassName), children: _jsx(TableCellContent, { cell: cell, renderer: cell.column.columnDef.cell, version: contentVersion, state: contentState }) })] }, cell.id));
47
57
  }) }, row.id));
48
58
  }
49
- function TableResizeHandle({ table, header, title, }) {
59
+ function TableResizeHandle({ table, header, title, width, }) {
50
60
  const column = header.column;
51
- return (_jsx("div", { role: "separator", tabIndex: 0, "aria-label": `Resize ${title}`, "aria-orientation": "vertical", "aria-valuenow": Math.round(column.getSize()), "aria-valuemin": column.columnDef.minSize ?? 48, "aria-valuemax": column.columnDef.maxSize ?? 1200, onDoubleClick: () => column.resetSize(), onMouseDown: header.getResizeHandler(), onTouchStart: header.getResizeHandler(), onKeyDown: (event) => {
61
+ const beginResize = (event) => {
62
+ if ("touches" in event && event.touches.length > 1)
63
+ return;
64
+ if ("button" in event) {
65
+ if (event.button !== 0)
66
+ return;
67
+ event.preventDefault();
68
+ event.currentTarget.focus({ preventScroll: true });
69
+ }
70
+ // Start dragging from the visible width, not the smaller configured base width.
71
+ header.getResizeHandler()(event);
72
+ table.setColumnSizing((sizes) => ({ ...sizes, [column.id]: width }));
73
+ table.setColumnResizing((state) => ({
74
+ ...state,
75
+ startSize: width,
76
+ columnSizingStart: [[column.id, width]],
77
+ }));
78
+ };
79
+ return (_jsx("div", { role: "separator", tabIndex: 0, "aria-label": `Resize ${title}`, "aria-orientation": "vertical", "aria-valuenow": Math.round(width), "aria-valuemin": column.columnDef.minSize ?? 48, "aria-valuemax": column.columnDef.maxSize ?? 1200, onDoubleClick: () => column.resetSize(), onMouseDown: beginResize, onTouchStart: beginResize, onKeyDown: (event) => {
52
80
  if (event.key === "ArrowLeft" || event.key === "ArrowRight") {
53
81
  event.preventDefault();
54
82
  event.stopPropagation();
55
83
  table.setColumnSizing((sizes) => ({
56
84
  ...sizes,
57
- [column.id]: Math.min(column.columnDef.maxSize ?? 1200, Math.max(column.columnDef.minSize ?? 48, column.getSize() + (event.key === "ArrowLeft" ? -10 : 10))),
85
+ [column.id]: Math.min(column.columnDef.maxSize ?? 1200, Math.max(column.columnDef.minSize ?? 48, width + (event.key === "ArrowLeft" ? -10 : 10))),
58
86
  }));
59
87
  }
60
- }, className: "mui-747355bdc2a2 mui-eb9e48c5dda9 mui-a74c4477017c mui-418e44ad4f9e mui-d4ea834145ae mui-2194d094b585 mui-739a9a000791 mui-4273133a876a mui-2f669cfad5aa mui-2e357972fc10" }));
88
+ }, className: "mui-747355bdc2a2 mui-eb9e48c5dda9 mui-a74c4477017c mui-418e44ad4f9e mui-d4ea834145ae mui-2194d094b585 mui-739a9a000791 mui-78905c9e865c mui-4273133a876a mui-2f669cfad5aa mui-2e357972fc10" }));
61
89
  }
62
90
  function TableHeaderContent({ header, renderHeader, title, }) {
63
91
  const column = header.column;
@@ -65,3 +93,7 @@ function TableHeaderContent({ header, renderHeader, title, }) {
65
93
  const sorted = column.getIsSorted();
66
94
  return renderHeader ? (renderHeader(header)) : typeof definition.header === "function" ? (flexRender(definition.header, header.getContext())) : !column.getCanSort() ? (_jsx("span", { className: "mui-496aca80e4d8 mui-5a3a4ee420c2", title: title, children: title })) : (_jsxs(Button, { variant: "ghost", size: "sm", className: "mui-1fb07b38c63b mui-81b198a2db84 mui-c62ec162662e mui-19e97f3f40e6 mui-16e909e6f01d mui-daaac3fbf55e mui-35f35c41d134 mui-71863717995b mui-4d6720d47806", onClick: column.getToggleSortingHandler(), title: title, children: [_jsx("span", { className: "mui-5a3a4ee420c2", children: title }), sorted === "asc" ? (_jsx(ArrowUp, { className: "mui-5e34f5313859 mui-27ead27a81df" })) : sorted === "desc" ? (_jsx(ArrowDown, { className: "mui-5e34f5313859 mui-27ead27a81df" })) : null] }));
67
95
  }
96
+ // Geometry-only updates do not need to rerun application-owned cell renderers.
97
+ const TableCellContent = memo(function TableCellContent({ cell, renderer, }) {
98
+ return renderer ? flexRender(renderer, cell.getContext()) : String(cell.getValue() ?? "");
99
+ });
@@ -1,10 +1,11 @@
1
1
  "use client";
2
2
  import { jsx as _jsx, jsxs as _jsxs } from "react/jsx-runtime";
3
- import { useCallback, useEffect, useLayoutEffect, useRef } from "react";
3
+ import { useCallback, useEffect, useLayoutEffect, useMemo, useRef } from "react";
4
4
  import { useVirtualizer } from "@tanstack/react-virtual";
5
5
  import { TableHeaderCell, TableBodyRow } from "./table-parts.js";
6
6
  import { Button } from "../primitives/button.js";
7
7
  import { cn } from "../utils.js";
8
+ import { useColumnWindow } from "./use-column-window.js";
8
9
  import { useViewportWidth } from "./use-viewport-width.js";
9
10
  import { tableLayout } from "./table-layout.js";
10
11
  import { TableLoadingRows } from "./table-loading.js";
@@ -20,15 +21,26 @@ export function TableView({ table, label = "Data table", height = "min(65dvh, 64
20
21
  scrollRef.current = node;
21
22
  }, [scrollRef]);
22
23
  const rows = table.getRowModel().rows;
24
+ const getScrollElement = useCallback(() => container.current, []);
25
+ const estimateSize = useCallback(() => rowHeight, [rowHeight]);
26
+ const getItemKey = useCallback((index) => rows[index]?.id ?? index, [rows]);
23
27
  const virtual = useVirtualizer({
24
28
  count: rows.length,
25
- getScrollElement: () => container.current,
26
- estimateSize: () => rowHeight,
27
- getItemKey: (index) => rows[index]?.id ?? index,
29
+ getScrollElement,
30
+ estimateSize,
31
+ getItemKey,
28
32
  overscan: 8,
29
33
  });
30
34
  const viewportWidth = useViewportWidth(container);
31
- const { columns, totalWidth, pinningActive, cellStyle } = tableLayout(table, viewportWidth, rowHeight);
35
+ const startColumns = table.getStartVisibleLeafColumns();
36
+ const centerColumns = table.getCenterVisibleLeafColumns();
37
+ const endColumns = table.getEndVisibleLeafColumns();
38
+ const sizing = table.state.columnSizing;
39
+ const layout = useMemo(() => tableLayout(table, viewportWidth, rowHeight), [table, startColumns, centerColumns, endColumns, sizing, viewportWidth, rowHeight]);
40
+ const { totalWidth, pinningActive } = layout;
41
+ const focused = table.getFocusedCell();
42
+ const { columns, cellStyle } = useColumnWindow(layout, container, focused?.column.id);
43
+ const columnIndexes = new Map(layout.columns.map((column, index) => [column.id, index]));
32
44
  const { announcement, copied, onKeyDown } = useTableInteraction({
33
45
  table,
34
46
  pinningActive,
@@ -45,10 +57,18 @@ export function TableView({ table, label = "Data table", height = "min(65dvh, 64
45
57
  useLayoutEffect(() => {
46
58
  load.current = loadMore;
47
59
  }, [loadMore]);
60
+ useEffect(() => {
61
+ requested.current = null;
62
+ }, [queryKey]);
48
63
  useEffect(() => {
49
64
  const data = load.current;
50
65
  const requestKey = `${queryKey}:${rows.length}`;
51
- if (!data?.available ||
66
+ const element = container.current;
67
+ // The virtual range can briefly describe the previous query after scroll resets.
68
+ const nearEnd = element &&
69
+ element.scrollTop + element.clientHeight + rowHeight * 10 >= (rows.length + 1) * rowHeight;
70
+ if (!nearEnd ||
71
+ !data?.available ||
52
72
  data.loading ||
53
73
  data.error ||
54
74
  last < rows.length - 10 ||
@@ -60,10 +80,17 @@ export function TableView({ table, label = "Data table", height = "min(65dvh, 64
60
80
  .catch(() => {
61
81
  requested.current = null;
62
82
  });
63
- }, [last, rows.length, queryKey, loadMore?.available, loadMore?.loading, loadMore?.error]);
64
- const focused = table.getFocusedCell();
83
+ }, [
84
+ last,
85
+ rows.length,
86
+ rowHeight,
87
+ queryKey,
88
+ loadMore?.available,
89
+ loadMore?.loading,
90
+ loadMore?.error,
91
+ ]);
65
92
  const headersById = new Map(table.getFlatHeaders().map((header) => [header.column.id, header]));
66
- return (_jsxs("div", { "data-mendy-ui": "", className: "mui-184ddc11e5f9", children: [_jsx("div", { "aria-live": "polite", className: "mui-32fb090591d9", children: announcement }), _jsxs("div", { ref: setContainer, role: "grid", "aria-label": label, "aria-rowcount": rows.length + 1, "aria-colcount": columns.length, "aria-busy": status === "loading" || refreshing, style: { height }, className: cn("mui-d2d9e1f13413 mui-014aadadffad mui-1a26a0d28420 mui-3fa8c572949b mui-4f1a55de40bc mui-5b272f3c5076 mui-c74ab393b96d mui-b30fc56058b6", className), onKeyDown: onKeyDown, children: [_jsx("div", { role: "row", "aria-rowindex": 1, className: "mui-964a9431ff49 mui-98599e4ee250 mui-4e8f0a87a0dc mui-222f930b8752 mui-2bf6510f1330 mui-bbe39cfb5cc6 mui-5b272f3c5076", style: { width: totalWidth }, children: columns.map((column, index) => (_jsx(TableHeaderCell, { table: table, header: headersById.get(column.id), index: index, style: cellStyle(column), renderHeader: renderHeader, contentClassName: contentClassName }, column.id))) }), _jsx(TableInitialState, { status: status, hasRows: rows.length > 0, loadingState: loadingState ?? (_jsx(TableLoadingRows, { columns: columns, width: totalWidth, rowHeight: rowHeight, cellStyle: cellStyle, count: Math.max(1, Math.ceil(((virtual.scrollRect?.height ?? 400) - rowHeight) / rowHeight)) })), emptyState: emptyState, error: error, retry: retry }), _jsx("div", { role: "rowgroup", className: "mui-d2d9e1f13413 mui-2bf6510f1330", style: { height: virtual.getTotalSize(), width: totalWidth }, children: items.map((item) => (_jsx(TableBodyRow, { row: rows[item.index], rowIndex: item.index, start: item.start, rowHeight: rowHeight, cellStyle: cellStyle, focusedId: focused?.id, copied: copied, contentClassName: contentClassName, onRowActivate: onRowActivate, isRowHighlighted: isRowHighlighted }, item.key))) }), rows.length > 0 && status === "error" && (_jsxs("div", { role: "alert", className: "mui-964a9431ff49 mui-30150dd033ab mui-5b272f3c5076 mui-094f5333853b", children: [error ?? "Could not refresh rows.", retry && (_jsx(Button, { onClick: retry, variant: "outline", size: "sm", children: "Retry" }))] })), loadMore?.available && (_jsxs("div", { className: "mui-964a9431ff49 mui-635702706586 mui-222f930b8752 mui-a503dd374cca mui-b97db4a9f432", children: [_jsx(Button, { size: "sm", variant: "ghost", disabled: loadMore.loading, onClick: () => {
93
+ return (_jsxs("div", { "data-mendy-ui": "", className: "mui-184ddc11e5f9", children: [_jsx("div", { "aria-live": "polite", className: "mui-32fb090591d9", children: announcement }), _jsxs("div", { ref: setContainer, role: "grid", "aria-label": label, "aria-rowcount": rows.length + 1, "aria-colcount": layout.columns.length, "aria-busy": status === "loading" || refreshing, style: { height }, className: cn("mui-d2d9e1f13413 mui-014aadadffad mui-1a26a0d28420 mui-3fa8c572949b mui-4f1a55de40bc mui-5b272f3c5076 mui-c74ab393b96d mui-b30fc56058b6", className), onKeyDown: onKeyDown, children: [_jsx("div", { role: "row", "aria-rowindex": 1, className: "mui-964a9431ff49 mui-98599e4ee250 mui-4e8f0a87a0dc mui-222f930b8752 mui-2bf6510f1330 mui-bbe39cfb5cc6 mui-5b272f3c5076", style: { width: totalWidth }, children: columns.map((column) => (_jsx(TableHeaderCell, { table: table, header: headersById.get(column.id), index: columnIndexes.get(column.id), style: cellStyle(column), renderHeader: renderHeader, contentClassName: contentClassName }, column.id))) }), _jsx(TableInitialState, { status: status, hasRows: rows.length > 0, loadingState: loadingState ?? (_jsx(TableLoadingRows, { columns: columns, width: totalWidth, rowHeight: rowHeight, cellStyle: cellStyle, count: Math.max(1, Math.ceil(((virtual.scrollRect?.height ?? 400) - rowHeight) / rowHeight)) })), emptyState: emptyState, error: error, retry: retry }), _jsx("div", { role: "rowgroup", className: "mui-d2d9e1f13413 mui-2bf6510f1330", style: { height: virtual.getTotalSize(), width: totalWidth }, children: items.map((item) => (_jsx(TableBodyRow, { row: rows[item.index], rowIndex: item.index, start: item.start, rowHeight: rowHeight, cellStyle: cellStyle, columns: columns, columnIndexes: columnIndexes, contentVersion: table.options, contentState: table.state, focusedId: focused?.id, copied: copied, contentClassName: contentClassName, onRowActivate: onRowActivate, isRowHighlighted: isRowHighlighted }, item.key))) }), rows.length > 0 && status === "error" && (_jsxs("div", { role: "alert", className: "mui-964a9431ff49 mui-30150dd033ab mui-5b272f3c5076 mui-094f5333853b", children: [error ?? "Could not refresh rows.", retry && (_jsx(Button, { onClick: retry, variant: "outline", size: "sm", children: "Retry" }))] })), loadMore?.available && (_jsxs("div", { className: "mui-964a9431ff49 mui-635702706586 mui-222f930b8752 mui-a503dd374cca mui-b97db4a9f432", children: [_jsx(Button, { size: "sm", variant: "ghost", disabled: loadMore.loading, onClick: () => {
67
94
  requested.current = null;
68
95
  void Promise.resolve()
69
96
  .then(() => loadMore.load())
@@ -0,0 +1,41 @@
1
+ import type { RefObject } from "react";
2
+ import type { Column } from "@tanstack/react-table";
3
+ import type { DataTableFeatures } from "./features.js";
4
+ import type { tableLayout } from "./table-layout.js";
5
+ /** Keep pinned and focused columns mounted, with two columns of overscan. */
6
+ export declare function useColumnWindow<T extends object>(layout: ReturnType<typeof tableLayout<T>>, container: RefObject<HTMLDivElement | null>, focusedColumn?: string): {
7
+ columns: Column<{
8
+ cellSelectionFeature: import("@tanstack/react-table").TableFeature;
9
+ columnResizingFeature: import("@tanstack/react-table").TableFeature;
10
+ columnOrderingFeature: import("@tanstack/react-table").TableFeature;
11
+ columnPinningFeature: import("@tanstack/react-table").TableFeature;
12
+ columnSizingFeature: import("@tanstack/react-table").TableFeature;
13
+ columnVisibilityFeature: import("@tanstack/react-table").TableFeature;
14
+ columnFilteringFeature: import("@tanstack/react-table").TableFeature;
15
+ columnFacetingFeature: import("@tanstack/react-table").TableFeature;
16
+ globalFilteringFeature: import("@tanstack/react-table").TableFeature;
17
+ rowPaginationFeature: import("@tanstack/react-table").TableFeature;
18
+ rowSelectionFeature: import("@tanstack/react-table").TableFeature;
19
+ rowSortingFeature: import("@tanstack/react-table").TableFeature;
20
+ filteredRowModel: (table: import("@tanstack/react-table").Table<any, any>) => () => import("@tanstack/react-table").RowModel<any, any>;
21
+ sortedRowModel: (table: import("@tanstack/react-table").Table<any, any>) => () => import("@tanstack/react-table").RowModel<any, any>;
22
+ paginatedRowModel: (table: import("@tanstack/react-table").Table<any, any>) => () => import("@tanstack/react-table").RowModel<any, any>;
23
+ facetedRowModel: (table: import("@tanstack/react-table").Table<any, any>, columnId: string) => () => import("@tanstack/react-table").RowModel<any, any>;
24
+ facetedUniqueValues: (table: import("@tanstack/react-table").Table<import("@tanstack/react-table").TableFeatures, any>, columnId: string) => () => Map<any, number>;
25
+ filterFns: {
26
+ includesString: import("@tanstack/react-table").CreatedFilterFn<any, any>;
27
+ inNumberRange: import("@tanstack/react-table").CreatedFilterFn<any, any>;
28
+ inDateRange: import("@tanstack/react-table").CreatedFilterFn<any, any>;
29
+ equals: import("@tanstack/react-table").CreatedFilterFn<any, any>;
30
+ arrIncludes: import("@tanstack/react-table").CreatedFilterFn<any, any>;
31
+ weakEquals: import("@tanstack/react-table").CreatedFilterFn<any, any>;
32
+ };
33
+ sortFns: {
34
+ alphanumeric: import("@tanstack/react-table").CreatedSortFn<any, any>;
35
+ basic: import("@tanstack/react-table").CreatedSortFn<any, any>;
36
+ datetime: import("@tanstack/react-table").CreatedSortFn<any, any>;
37
+ text: import("@tanstack/react-table").CreatedSortFn<any, any>;
38
+ };
39
+ }, T>[];
40
+ cellStyle: (column: Column<DataTableFeatures, T>) => import("react").CSSProperties;
41
+ };
@@ -0,0 +1,57 @@
1
+ "use client";
2
+ import { useLayoutEffect, useState } from "react";
3
+ /** Keep pinned and focused columns mounted, with two columns of overscan. */
4
+ export function useColumnWindow(layout, container, focusedColumn) {
5
+ const [range, setRange] = useState({ start: 0, end: 12 });
6
+ const [activeColumn, setActiveColumn] = useState();
7
+ useLayoutEffect(() => {
8
+ const element = container.current;
9
+ if (!element)
10
+ return;
11
+ const rememberFocus = (event) => {
12
+ setActiveColumn(event.target.closest("[data-column-id]")?.dataset.columnId);
13
+ };
14
+ element.addEventListener("focusin", rememberFocus);
15
+ return () => element.removeEventListener("focusin", rememberFocus);
16
+ }, [container]);
17
+ useLayoutEffect(() => {
18
+ const element = container.current;
19
+ if (!element)
20
+ return;
21
+ const measure = () => {
22
+ const left = element.scrollLeft;
23
+ const right = left + element.clientWidth;
24
+ let start = 0;
25
+ let end = layout.columns.length - 1;
26
+ while (start < end && layout.offsets[start + 1] < left)
27
+ start++;
28
+ end = start;
29
+ while (end < layout.columns.length - 1 && layout.offsets[end] < right)
30
+ end++;
31
+ start = Math.max(0, start - 2);
32
+ end = Math.min(layout.columns.length - 1, end + 2);
33
+ setRange((old) => (old.start === start && old.end === end ? old : { start, end }));
34
+ };
35
+ measure();
36
+ element.addEventListener("scroll", measure, { passive: true });
37
+ return () => element.removeEventListener("scroll", measure);
38
+ }, [layout, container]);
39
+ const columns = [];
40
+ const styles = new Map();
41
+ let previousEnd = 0;
42
+ layout.columns.forEach((column, index) => {
43
+ if ((index >= range.start && index <= range.end) ||
44
+ (layout.pinningActive && column.getIsPinned()) ||
45
+ column.id === focusedColumn ||
46
+ column.id === activeColumn) {
47
+ columns.push(column);
48
+ const gap = layout.offsets[index] - previousEnd;
49
+ styles.set(column.id, {
50
+ ...layout.cellStyle(column),
51
+ ...(gap > 0 ? { marginInlineStart: gap } : {}),
52
+ });
53
+ previousEnd = layout.offsets[index + 1];
54
+ }
55
+ });
56
+ return { columns, cellStyle: (column) => styles.get(column.id) };
57
+ }
@@ -21,4 +21,4 @@ export interface UseDataTableOptions<T extends object> extends Omit<TableOptions
21
21
  }
22
22
  export declare function captureTablePreferences<T extends object>(table: DataTableInstance<T>): TablePreferences;
23
23
  export declare function applyTablePreferences<T extends object>(table: DataTableInstance<T>, input: unknown): void;
24
- export declare function useDataTable<T extends object>({ rows, columns, processing, preferences, ...options }: UseDataTableOptions<T>): DataTableInstance<T>;
24
+ export declare function useDataTable<T extends object>({ rows: inputRows, columns: inputColumns, processing, preferences, ...options }: UseDataTableOptions<T>): DataTableInstance<T>;
@@ -2,6 +2,7 @@
2
2
  import { useEffect, useLayoutEffect, useMemo, useRef, useState } from "react";
3
3
  import { useTable } from "@tanstack/react-table";
4
4
  import { tableFeaturesDefault } from "./features.js";
5
+ import { useStableArray } from "./use-stable-array.js";
5
6
  import { reconcilePreferences } from "./state.js";
6
7
  const browserStorage = {
7
8
  read: (key) => {
@@ -26,7 +27,9 @@ export function applyTablePreferences(table, input) {
26
27
  table.setColumnSizing(value.columnSizing);
27
28
  table.setColumnPinning(value.columnPinning);
28
29
  }
29
- export function useDataTable({ rows, columns, processing, preferences, ...options }) {
30
+ export function useDataTable({ rows: inputRows, columns: inputColumns, processing, preferences, ...options }) {
31
+ const rows = useStableArray(inputRows);
32
+ const columns = useStableArray(inputColumns);
30
33
  const defaults = useMemo(() => reconcilePreferences(null, columns, options.initialState), [columns, options.initialState]);
31
34
  const table = useTable({
32
35
  features: tableFeaturesDefault,
@@ -82,7 +85,14 @@ export function useDataTable({ rows, columns, processing, preferences, ...option
82
85
  active = false;
83
86
  };
84
87
  }, [key, storage]);
85
- const serialized = JSON.stringify(captureTablePreferences(table));
88
+ const { columnOrder, columnPinning, columnSizing, columnVisibility } = table.state;
89
+ const serialized = useMemo(() => JSON.stringify({
90
+ version: 1,
91
+ columnOrder,
92
+ columnPinning,
93
+ columnSizing,
94
+ columnVisibility,
95
+ }), [columnOrder, columnPinning, columnSizing, columnVisibility]);
86
96
  useEffect(() => {
87
97
  if (!key || restoredKey !== key)
88
98
  return;
@@ -0,0 +1,2 @@
1
+ /** Reuse equal array shells; never deep-compare records or ignore changed callbacks. */
2
+ export declare function useStableArray<T>(input: T[]): T[];
@@ -0,0 +1,17 @@
1
+ "use client";
2
+ import { useLayoutEffect, useMemo, useRef } from "react";
3
+ /** Reuse equal array shells; never deep-compare records or ignore changed callbacks. */
4
+ export function useStableArray(input) {
5
+ const committed = useRef(input);
6
+ const value = useMemo(() => {
7
+ const previous = committed.current;
8
+ return input.length === previous.length &&
9
+ input.every((item, index) => item === previous[index])
10
+ ? previous
11
+ : input;
12
+ }, [input]);
13
+ useLayoutEffect(() => {
14
+ committed.current = value;
15
+ }, [value]);
16
+ return value;
17
+ }
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@mendylanda/ui",
3
- "version": "0.3.0-alpha.2",
3
+ "version": "0.3.0-alpha.4",
4
4
  "description": "Mendy Landa’s reusable React components. Typed filters and tables with shared interaction behavior and customizable UI.",
5
5
  "homepage": "https://ui.mendylanda.com",
6
6
  "license": "MIT",