@mendylanda/ui 0.4.1-dev.61.619e1451770c → 0.4.2-dev.65.0f00a8efff6b

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-8368bbb62f66":"start-0","mui-207bd0b3f259":"start-2","mui-cea70f23972e":"start-3","mui-361e48d0308f":"end","mui-aa7bcba08429":"end-0","mui-13422ddc8d83":"end-1","mui-585f4729f611":"end-9","mui-98599e4ee250":"top-0","mui-4e45f4841abb":"top-1/2","mui-30150dd033ab":"bottom-0","mui-a5c36273c0f0":"bottom-2","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-5cf4ab3b6fa0":"ms-auto","mui-8cc46fa87f41":"-me-1.5","mui-477d8f4dfce9":"me-1","mui-68d781378b03":"me-2","mui-f28fea81a5cd":"mt-2","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-2c14b55d77e6":"animate-spin","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-7efd3a0ebfc6":"rounded-s-md","mui-b31810dbd8a9":"rounded-s-none","mui-7f3780751c2e":"rounded-e-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-6ba846e1630e":"bg-inherit","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-96b92a971c95":"py-5","mui-6dd4e62564b2":"ps-2","mui-078d945937da":"ps-8","mui-b2100041c585":"ps-9","mui-b15eee699c4b":"pe-1","mui-05d4103bd67f":"pe-2","mui-a202804a1738":"pe-3","mui-0e14c365f9e8":"pe-9","mui-559069d2c2e5":"pe-16","mui-0a702d97ed7d":"pt-3","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-e42932b7a79c":"blur","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-34a57d4b4103":"group-hover:opacity-50","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-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-b8b1747fa763":"focus-visible:opacity-100","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-d2e4a66bb430":"disabled:opacity-0!","mui-4600b77303d6":"disabled:opacity-50","mui-978f422895e5":"group-hover: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-1da7bb9a299c":"data-[inset]:ps-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-35468f495139":"data-[range-end=true]:rounded-e-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-6143f152715b":"data-[range-start=true]:rounded-s-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-d0c2ae8419e1":"data-[state=checked]:opacity-100","mui-9c02852bfc55":"data-[state=checked]:disabled:opacity-100!","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-e2ed522ed9b7":"data-[state=indeterminate]:opacity-100","mui-cbd3aed703f7":"data-[state=indeterminate]:disabled:opacity-100!","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-9b9b154fb4bf":"[&:first-child[data-selected=true]_button]:rounded-s-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-e9494a526550":"[&:last-child[data-selected=true]_button]:rounded-e-md","mui-167d036894df":"[&:nth-child(2)[data-selected=true]_button]:rounded-s-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-fa8e1efead3c":"[@media(hover:none)]:opacity-100","mui-eaedb91f8774":"[@media(hover:none)]:disabled:opacity-100!","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-992a93455c71":"fixed","mui-d2d9e1f13413":"relative","mui-964a9431ff49":"sticky","mui-ce13093ad8c9":"inset-0","mui-3ba24c062d55":"inset-x-0","mui-eb9e48c5dda9":"inset-y-0","mui-cced28c6dc3f":"start","mui-8368bbb62f66":"start-0","mui-207bd0b3f259":"start-2","mui-cea70f23972e":"start-3","mui-361e48d0308f":"end","mui-aa7bcba08429":"end-0","mui-13422ddc8d83":"end-1","mui-585f4729f611":"end-9","mui-98599e4ee250":"top-0","mui-4e45f4841abb":"top-1/2","mui-30150dd033ab":"bottom-0","mui-a5c36273c0f0":"bottom-2","mui-014aadadffad":"isolate","mui-d7efd1b0b0f9":"z-1","mui-418e44ad4f9e":"z-10","mui-4e8f0a87a0dc":"z-20","mui-fbb62f5cb6fe":"z-30","mui-3eef1ce97dba":"z-50","mui-29a5b1dea191":"col-start-2","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-5cf4ab3b6fa0":"ms-auto","mui-8cc46fa87f41":"-me-1.5","mui-477d8f4dfce9":"me-1","mui-68d781378b03":"me-2","mui-f28fea81a5cd":"mt-2","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-2c14b55d77e6":"animate-spin","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-7efd3a0ebfc6":"rounded-s-md","mui-2176687d6745":"rounded-ss-none","mui-7f3780751c2e":"rounded-e-md","mui-c9755c8858d9":"rounded-es-none","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-6ba846e1630e":"bg-inherit","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-96b92a971c95":"py-5","mui-6dd4e62564b2":"ps-2","mui-078d945937da":"ps-8","mui-b2100041c585":"ps-9","mui-b15eee699c4b":"pe-1","mui-05d4103bd67f":"pe-2","mui-a202804a1738":"pe-3","mui-0e14c365f9e8":"pe-9","mui-559069d2c2e5":"pe-16","mui-0a702d97ed7d":"pt-3","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-e42932b7a79c":"blur","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-34a57d4b4103":"group-hover:opacity-50","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-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-b8b1747fa763":"focus-visible:opacity-100","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-d2e4a66bb430":"disabled:opacity-0!","mui-4600b77303d6":"disabled:opacity-50","mui-978f422895e5":"group-hover: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-1da7bb9a299c":"data-[inset]:ps-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-35468f495139":"data-[range-end=true]:rounded-e-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-6143f152715b":"data-[range-start=true]:rounded-s-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-d0c2ae8419e1":"data-[state=checked]:opacity-100","mui-9c02852bfc55":"data-[state=checked]:disabled:opacity-100!","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-e2ed522ed9b7":"data-[state=indeterminate]:opacity-100","mui-cbd3aed703f7":"data-[state=indeterminate]:disabled:opacity-100!","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-9b9b154fb4bf":"[&:first-child[data-selected=true]_button]:rounded-s-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-e9494a526550":"[&:last-child[data-selected=true]_button]:rounded-e-md","mui-167d036894df":"[&:nth-child(2)[data-selected=true]_button]:rounded-s-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-fa8e1efead3c":"[@media(hover:none)]:opacity-100","mui-eaedb91f8774":"[@media(hover:none)]:disabled:opacity-100!","mui-b8293c91796c":"[[data-slot=card-content]_&]:bg-transparent","mui-8dd7e6b42262":"[[data-slot=popover-content]_&]:bg-transparent"};
@@ -11,6 +11,7 @@ export function FilterCollection({ items, children, renderBefore, className, rol
11
11
  const pending = useRef(null);
12
12
  const ownsFocus = useRef(false);
13
13
  const previousIndex = useRef(0);
14
+ const pointer = useRef(null);
14
15
  const { code } = useMendyLocale();
15
16
  const [focused, setFocused] = useState(initialKey ?? items.find((item) => !item.disabled)?.key);
16
17
  const typeahead = useRef({ text: "", at: 0 });
@@ -133,7 +134,16 @@ export function FilterCollection({ items, children, renderBefore, className, rol
133
134
  return row;
134
135
  return (_jsxs("div", { "data-index": index, "data-slot": "filter-collection-row", ref: virtual ? virtualizer.measureElement : undefined, style: rowStyle, children: [renderBefore(item, index), row] }, item.key));
135
136
  }
136
- return (_jsx("div", { ref: scroll, tabIndex: -1, role: role, "aria-label": label, "data-filter-collection": "", "data-virtual": virtual, className: cn("mui-410da8dfa8ac mui-2368e909f3a5 mui-998780cdef87 mui-1dee6e3ec67d", className), onBlurCapture: (event) => {
137
+ return (_jsx("div", { ref: scroll, tabIndex: -1, role: role, "aria-label": label, "data-filter-collection": "", "data-virtual": virtual, className: cn("mui-410da8dfa8ac mui-2368e909f3a5 mui-998780cdef87 mui-1dee6e3ec67d", className), onPointerMoveCapture: (event) => {
138
+ if (event.pointerType !== "mouse")
139
+ return;
140
+ const previous = pointer.current;
141
+ pointer.current = { x: event.clientX, y: event.clientY };
142
+ // WebKit re-hit-tests a stationary mouse after virtual scrolling. Do not
143
+ // let Radix move keyboard focus to the row now underneath that mouse.
144
+ if (previous?.x === event.clientX && previous.y === event.clientY)
145
+ event.preventDefault();
146
+ }, onBlurCapture: (event) => {
137
147
  if (event.relatedTarget && !event.currentTarget.contains(event.relatedTarget))
138
148
  ownsFocus.current = false;
139
149
  }, onFocusCapture: (event) => {
@@ -45,7 +45,7 @@ export function FilterMenuPanel({ sections, selectedId, onSelect, onClose, ancho
45
45
  const detached = desktop && menuLayout !== "connected";
46
46
  const setContent = useAnchoredPointerEvents(content, detached);
47
47
  const editorPanel = useRef(null);
48
- const editorOffset = useEditorOffset({
48
+ const editorPlacement = useEditorOffset({
49
49
  detached,
50
50
  editorPanel,
51
51
  content,
@@ -122,7 +122,7 @@ export function FilterMenuPanel({ sections, selectedId, onSelect, onClose, ancho
122
122
  back();
123
123
  }), className: cn("mui-971625533e56 mui-571ea69568d3 mui-34055e6f8c1b mui-d5111d0e9f48 mui-04760bcd507f mui-94ea94fde25f mui-393df0d154e0 mui-548a450e8e53", "mui-d7d803c609c5", sideBySide
124
124
  ? "mui-4415137b0467" : "mui-0b9c84552e40", detached && "mui-33228ff7d583 mui-0fc84a692dad mui-dad556abfe15 mui-8fca9236d191 mui-89c3006b2722", classNames?.menu), children: _jsxs("div", { className: cn("mui-80baa5d03af7", sideBySide
125
- ? "mui-0f2a693e93e2 mui-b5985369ee35 mui-eeb3a8b33f69" : "mui-222f930b8752 mui-302c0d124a94", detached && cn("mui-e0122edc668b", selected && "mui-b9677bd1cb66")), children: [showList && (_jsx(FilterMenuList, { sections: sections, selectedId: selected?.id, initialKey: selected?.id ?? lastSelection.current, panelId: panelId, desktop: desktop, detached: detached, rows: rows, choose: choose, keyboardNavigation: keyboardNavigation, onPointerMove: (id, event) => {
125
+ ? "mui-0f2a693e93e2 mui-b5985369ee35 mui-eeb3a8b33f69" : "mui-222f930b8752 mui-302c0d124a94", detached && cn("mui-d2d9e1f13413 mui-e0122edc668b", selected && "mui-b9677bd1cb66")), children: [showList && (_jsx(FilterMenuList, { sections: sections, selectedId: selected?.id, initialKey: selected?.id ?? lastSelection.current, panelId: panelId, desktop: desktop, detached: detached, rows: rows, choose: choose, keyboardNavigation: keyboardNavigation, onPointerMove: (id, event) => {
126
126
  if (desktop && event.pointerType === "mouse") {
127
127
  setKeyboardNavigation(false);
128
128
  const focused = document.activeElement;
@@ -134,7 +134,7 @@ export function FilterMenuPanel({ sections, selectedId, onSelect, onClose, ancho
134
134
  }
135
135
  pointer.move(id, event);
136
136
  }
137
- } })), selected && (_jsxs("div", { ref: editorPanel, "data-slot": "filter-menu-editor", onPointerEnter: pointer.cancel, style: detached ? { marginTop: editorOffset } : undefined, className: cn("mui-222f930b8752 mui-410da8dfa8ac mui-184ddc11e5f9 mui-80baa5d03af7 mui-302c0d124a94", detached && "mui-cb20bd519346 mui-291952c2525a mui-d5111d0e9f48 mui-3fa8c572949b mui-b31810dbd8a9 mui-4f1a55de40bc mui-e593c38256e0 mui-5bd2afe89f0b"), children: [_jsx(EditorHeading, { section: selected, desktop: desktop, back: back, onCleared: focusEditor }), _jsx("div", { ref: editor, id: `${panelId}-${selected.id}`, role: "group", "aria-label": selected.editorLabel, tabIndex: -1, className: cn("mui-410da8dfa8ac mui-184ddc11e5f9 mui-3b82279f859f mui-2368e909f3a5 mui-998780cdef87 mui-b30fc56058b6 mui-f157ee6bae99 mui-a1c8c43d9be2 mui-b43343fe71c0", classNames?.editor), children: selected.content }, selected.id)] }))] }) }));
137
+ } })), selected && (_jsxs("div", { ref: editorPanel, "data-slot": "filter-menu-editor", onPointerEnter: pointer.cancel, style: detached ? { marginTop: editorPlacement.offset } : undefined, className: cn("mui-222f930b8752 mui-410da8dfa8ac mui-184ddc11e5f9 mui-80baa5d03af7 mui-302c0d124a94", detached && "mui-747355bdc2a2 mui-29a5b1dea191 mui-3ba24c062d55 mui-98599e4ee250 mui-cb20bd519346 mui-291952c2525a mui-d5111d0e9f48 mui-3fa8c572949b mui-4f1a55de40bc mui-e593c38256e0 mui-5bd2afe89f0b", detached && editorPlacement.joinTop && "mui-2176687d6745", detached && editorPlacement.joinBottom && "mui-c9755c8858d9"), children: [_jsx(EditorHeading, { section: selected, desktop: desktop, back: back, onCleared: focusEditor }), _jsx("div", { ref: editor, id: `${panelId}-${selected.id}`, role: "group", "aria-label": selected.editorLabel, tabIndex: -1, className: cn("mui-410da8dfa8ac mui-184ddc11e5f9 mui-3b82279f859f mui-2368e909f3a5 mui-998780cdef87 mui-b30fc56058b6 mui-f157ee6bae99 mui-a1c8c43d9be2 mui-b43343fe71c0", classNames?.editor), children: selected.content }, selected.id)] }))] }) }));
138
138
  }
139
139
  function EditorHeading({ section, desktop, back, onCleared, }) {
140
140
  const { classNames } = useMendyUI();
@@ -1,3 +1,4 @@
1
+ import { decodeUrlValue, encodeUrlValue } from "./url-value.js";
1
2
  import { equalValues } from "./filter-definition.js";
2
3
  export function classifyPaste(text, entries) {
3
4
  const result = { changes: {}, unmatched: [], ambiguous: [] };
@@ -49,7 +50,8 @@ export function decodeFilters(definitions, params) {
49
50
  if (raw === "~null")
50
51
  return [key, null];
51
52
  try {
52
- const decoded = field.codec.parse(raw.startsWith("~~") ? raw.slice(1) : raw);
53
+ const unwrapped = decodeUrlValue(raw);
54
+ const decoded = field.codec.parse(unwrapped.startsWith("~~") ? unwrapped.slice(1) : unwrapped);
53
55
  if (decoded === null || field.validate(decoded))
54
56
  return [key, field.defaultValue];
55
57
  return [key, decoded];
@@ -68,7 +70,7 @@ export function encodeFilters(definitions, values, base = new URLSearchParams())
68
70
  params.delete(urlKey);
69
71
  else {
70
72
  const raw = value === null ? "~null" : field.codec.serialize(value);
71
- params.set(urlKey, value !== null && raw.startsWith("~") ? `~${raw}` : raw);
73
+ params.set(urlKey, value === null ? raw : raw.startsWith("~") ? `~${raw}` : encodeUrlValue(raw));
72
74
  }
73
75
  }
74
76
  return params;
@@ -0,0 +1,3 @@
1
+ import type { RuntimeField } from "./filter-definition.js";
2
+ /** Accept old JSON URLs even when an adapter presents their array as repeated keys. */
3
+ export declare function filterUrlParser(field: RuntimeField): import("nuqs").MultiParserBuilder<string>;
@@ -0,0 +1,40 @@
1
+ import { createMultiParser } from "nuqs";
2
+ import { decodeUrlValue } from "./url-value.js";
3
+ /** Accept old JSON URLs even when an adapter presents their array as repeated keys. */
4
+ export function filterUrlParser(field) {
5
+ return createMultiParser({
6
+ parse(values) {
7
+ if (!values.length)
8
+ return null;
9
+ const first = values[0];
10
+ if (values.length === 1) {
11
+ if (first === "~null" || first.startsWith("~~") || decodeUrlValue(first) !== first)
12
+ return first;
13
+ if (accepts(first))
14
+ return first;
15
+ }
16
+ const strings = JSON.stringify(values);
17
+ if (accepts(strings, true))
18
+ return strings;
19
+ const typed = JSON.stringify(values.map((value) => {
20
+ try {
21
+ return JSON.parse(value);
22
+ }
23
+ catch {
24
+ return value;
25
+ }
26
+ }));
27
+ return accepts(typed, true) ? typed : null;
28
+ },
29
+ serialize: (value) => [value],
30
+ });
31
+ function accepts(raw, arrayOnly = false) {
32
+ try {
33
+ const value = field.codec.parse(raw);
34
+ return value !== null && (!arrayOnly || Array.isArray(value)) && !field.validate(value);
35
+ }
36
+ catch {
37
+ return false;
38
+ }
39
+ }
40
+ }
@@ -0,0 +1,2 @@
1
+ export declare function encodeUrlValue(value: string): string;
2
+ export declare function decodeUrlValue(value: string): string;
@@ -0,0 +1,17 @@
1
+ // Routers that parse JSON globally must receive a string, even when the filter
2
+ // codec happens to serialize an array, object, number, or JSON-looking text.
3
+ const prefix = "~ui:";
4
+ export function encodeUrlValue(value) {
5
+ if (value.startsWith(prefix))
6
+ return prefix + value;
7
+ try {
8
+ JSON.parse(value);
9
+ return prefix + value;
10
+ }
11
+ catch {
12
+ return value;
13
+ }
14
+ }
15
+ export function decodeUrlValue(value) {
16
+ return value.startsWith(prefix) ? value.slice(prefix.length) : value;
17
+ }
@@ -12,6 +12,10 @@ export declare function useEditorOffset({ detached, editorPanel, content, rows,
12
12
  content: RefObject<HTMLDivElement | null>;
13
13
  rows: RefObject<Map<string, HTMLButtonElement>>;
14
14
  selectedId?: string;
15
- }): number;
15
+ }): {
16
+ offset: number;
17
+ joinTop: boolean;
18
+ joinBottom: boolean;
19
+ };
16
20
  /** Only the visible panels receive pointer events; the positioner's empty area does not. */
17
21
  export declare function useAnchoredPointerEvents(content: RefObject<HTMLDivElement | null>, detached: boolean): (node: HTMLDivElement | null) => void;
@@ -54,7 +54,7 @@ export function useMenuPlacement(anchor, trigger, desktop) {
54
54
  }
55
55
  /** Follow the selected row while keeping the editor inside the viewport. */
56
56
  export function useEditorOffset({ detached, editorPanel, content, rows, selectedId, }) {
57
- const [editorOffset, setEditorOffset] = useState(0);
57
+ const [placement, setPlacement] = useState({ offset: 0, joinTop: false, joinBottom: false });
58
58
  const measured = useRef({ id: selectedId, height: 0 });
59
59
  useLayoutEffect(() => {
60
60
  if (!detached)
@@ -66,7 +66,7 @@ export function useEditorOffset({ detached, editorPanel, content, rows, selected
66
66
  const update = () => {
67
67
  const row = rows.current.get(selectedId ?? "");
68
68
  if (!row) {
69
- setEditorOffset(0);
69
+ setPlacement({ offset: 0, joinTop: false, joinBottom: false });
70
70
  return;
71
71
  }
72
72
  const rootTop = root.getBoundingClientRect().top;
@@ -80,12 +80,34 @@ export function useEditorOffset({ detached, editorPanel, content, rows, selected
80
80
  measured.current.height = Math.max(measured.current.height, currentHeight);
81
81
  const height = measured.current.height;
82
82
  const viewport = window.visualViewport;
83
- const viewportBottom = (viewport?.offsetTop ?? 0) + (viewport?.height ?? window.innerHeight);
83
+ const viewportTop = viewport?.offsetTop ?? 0;
84
+ const viewportBottom = viewportTop + (viewport?.height ?? window.innerHeight);
84
85
  // Keep short editors inside the list's vertical span. Lower rows therefore
85
86
  // open upward even on a tall viewport, instead of dangling below the list.
86
87
  const latestTop = Math.max(rootTop, Math.min(listBottom, viewportBottom - 16) - height);
87
88
  const preferredTop = row.getBoundingClientRect().top - 5;
88
- setEditorOffset(Math.max(0, Math.min(preferredTop, latestTop) - rootTop));
89
+ // The editor does not size the floating list. A taller editor may extend
90
+ // above it, keeping the hovered row stationary when the menu opens upward.
91
+ const offset = Math.max(viewportTop + 16, Math.min(preferredTop, latestTop, viewportBottom - 16 - height)) - rootTop;
92
+ const listBounds = list?.getBoundingClientRect();
93
+ const listStyle = list ? getComputedStyle(list) : undefined;
94
+ const radiusLimit = listBounds ? Math.min(listBounds.width, listBounds.height) / 2 : 0;
95
+ const topRadius = Math.min(parseFloat(listStyle?.borderStartEndRadius ?? "0"), radiusLimit);
96
+ const bottomRadius = Math.min(parseFloat(listStyle?.borderEndEndRadius ?? "0"), radiusLimit);
97
+ const straightTop = (listBounds?.top ?? rootTop) + topRadius;
98
+ const straightBottom = listBottom - bottomRadius;
99
+ // The editor's inline-start corners are square only against the straight
100
+ // part of the list's inline-end edge. Use actual height here: search can
101
+ // shrink the editor while its anchored offset deliberately stays put.
102
+ const top = rootTop + offset;
103
+ const bottom = top + currentHeight;
104
+ const joinTop = top >= straightTop && top < straightBottom;
105
+ const joinBottom = bottom > straightTop && bottom <= straightBottom;
106
+ setPlacement((previous) => previous.offset === offset &&
107
+ previous.joinTop === joinTop &&
108
+ previous.joinBottom === joinBottom
109
+ ? previous
110
+ : { offset, joinTop, joinBottom });
89
111
  };
90
112
  update();
91
113
  const observer = new ResizeObserver(update);
@@ -100,7 +122,7 @@ export function useEditorOffset({ detached, editorPanel, content, rows, selected
100
122
  root.removeEventListener("scroll", update, true);
101
123
  };
102
124
  }, [detached, selectedId, editorPanel, content, rows]);
103
- return editorOffset;
125
+ return placement;
104
126
  }
105
127
  /** Only the visible panels receive pointer events; the positioner's empty area does not. */
106
128
  export function useAnchoredPointerEvents(content, detached) {
@@ -3,6 +3,8 @@ import { useMendyLocale } from "../locale-context.js";
3
3
  import { useEffect, useLayoutEffect, useRef, useState, useSyncExternalStore } from "react";
4
4
  import { parseAsString, useQueryStates } from "nuqs";
5
5
  import { decodeFilters, encodeFilters, validateDefinitions } from "./filter-state.js";
6
+ import { filterUrlParser } from "./url-parser.js";
7
+ import { decodeUrlValue, encodeUrlValue } from "./url-value.js";
6
8
  import { useFilterController } from "./use-filters.js";
7
9
  const subscribeStorage = () => () => { };
8
10
  function useStoredQuery(key) {
@@ -38,7 +40,14 @@ export function useUrlFilters(definitions, options) {
38
40
  searchKey,
39
41
  markerKey,
40
42
  ];
41
- const parsers = Object.fromEntries(keys.map((key) => [key, parseAsString]));
43
+ const parsers = Object.fromEntries([
44
+ ...Object.entries(definitions).map(([id, field]) => [
45
+ field.urlKey ?? id,
46
+ filterUrlParser(field),
47
+ ]),
48
+ [searchKey, parseAsString],
49
+ [markerKey, parseAsString],
50
+ ]);
42
51
  const [raw, setRaw] = useQueryStates(parsers, {
43
52
  history: options.history ?? "replace",
44
53
  shallow: options.shallow ?? true,
@@ -57,7 +66,7 @@ export function useUrlFilters(definitions, options) {
57
66
  const pending = useRef(null);
58
67
  const fullParams = appliedParams(raw, keys, marker, overflow, storedQuery, options.scope);
59
68
  const values = decodeFilters(definitions, fullParams);
60
- const search = fullParams.get(searchKey) ?? "";
69
+ const search = decodeUrlValue(fullParams.get(searchKey) ?? "");
61
70
  useLayoutEffect(() => {
62
71
  pending.current = { values, search };
63
72
  }, [values, search]);
@@ -80,7 +89,7 @@ export function useUrlFilters(definitions, options) {
80
89
  const full = encodeFilters(definitions, values, new URLSearchParams(window.location.search));
81
90
  full.delete(markerKey);
82
91
  if (search)
83
- full.set(searchKey, search);
92
+ full.set(searchKey, encodeUrlValue(search));
84
93
  else
85
94
  full.delete(searchKey);
86
95
  const owned = new URLSearchParams();
@@ -141,7 +150,7 @@ export function useUrlFilters(definitions, options) {
141
150
  if (saved) {
142
151
  const params = new URLSearchParams(saved.query);
143
152
  const restored = decodeFilters(current.definitions, params);
144
- update(restored, params.get(searchKey) ?? "", "edit");
153
+ update(restored, decodeUrlValue(params.get(searchKey) ?? ""), "edit");
145
154
  }
146
155
  }
147
156
  // Restoration runs once per storage scope. URL changes subsequently belong to nuqs.
@@ -170,7 +179,7 @@ export function useUrlFilters(definitions, options) {
170
179
  const params = encodeFilters(definitions, values, url.searchParams);
171
180
  params.delete(markerKey);
172
181
  if (search)
173
- params.set(searchKey, search);
182
+ params.set(searchKey, encodeUrlValue(search));
174
183
  else
175
184
  params.delete(searchKey);
176
185
  url.search = params.toString();
package/dist/styles.css CHANGED
@@ -49,6 +49,9 @@
49
49
  .mui-747355bdc2a2:where([data-mendy-ui], [data-mendy-ui] *) {
50
50
  position: absolute;
51
51
  }
52
+ .mui-992a93455c71:where([data-mendy-ui], [data-mendy-ui] *) {
53
+ position: fixed;
54
+ }
52
55
  .mui-d2d9e1f13413:where([data-mendy-ui], [data-mendy-ui] *) {
53
56
  position: relative;
54
57
  }
@@ -118,6 +121,9 @@
118
121
  .mui-3eef1ce97dba:where([data-mendy-ui], [data-mendy-ui] *) {
119
122
  z-index: 50;
120
123
  }
124
+ .mui-29a5b1dea191:where([data-mendy-ui], [data-mendy-ui] *) {
125
+ grid-column-start: 2;
126
+ }
121
127
  .mui-a42d519714d6:where([data-mendy-ui], [data-mendy-ui] *) {
122
128
  width: 100%;
123
129
  @media (width >= 40rem) {
@@ -541,14 +547,16 @@
541
547
  border-start-start-radius: max(0px, calc(var(--radius, 0.5rem) - 2px));
542
548
  border-end-start-radius: max(0px, calc(var(--radius, 0.5rem) - 2px));
543
549
  }
544
- .mui-b31810dbd8a9:where([data-mendy-ui], [data-mendy-ui] *) {
550
+ .mui-2176687d6745:where([data-mendy-ui], [data-mendy-ui] *) {
545
551
  border-start-start-radius: 0;
546
- border-end-start-radius: 0;
547
552
  }
548
553
  .mui-7f3780751c2e:where([data-mendy-ui], [data-mendy-ui] *) {
549
554
  border-start-end-radius: max(0px, calc(var(--radius, 0.5rem) - 2px));
550
555
  border-end-end-radius: max(0px, calc(var(--radius, 0.5rem) - 2px));
551
556
  }
557
+ .mui-c9755c8858d9:where([data-mendy-ui], [data-mendy-ui] *) {
558
+ border-end-start-radius: 0;
559
+ }
552
560
  .mui-4f1a55de40bc:where([data-mendy-ui], [data-mendy-ui] *) {
553
561
  border-style: var(--mendy-tw-border-style);
554
562
  border-width: 1px;
@@ -48,6 +48,9 @@
48
48
  .mui-747355bdc2a2:where([data-mendy-ui], [data-mendy-ui] *) {
49
49
  position: absolute;
50
50
  }
51
+ .mui-992a93455c71:where([data-mendy-ui], [data-mendy-ui] *) {
52
+ position: fixed;
53
+ }
51
54
  .mui-d2d9e1f13413:where([data-mendy-ui], [data-mendy-ui] *) {
52
55
  position: relative;
53
56
  }
@@ -117,6 +120,9 @@
117
120
  .mui-3eef1ce97dba:where([data-mendy-ui], [data-mendy-ui] *) {
118
121
  z-index: 50;
119
122
  }
123
+ .mui-29a5b1dea191:where([data-mendy-ui], [data-mendy-ui] *) {
124
+ grid-column-start: 2;
125
+ }
120
126
  .mui-a42d519714d6:where([data-mendy-ui], [data-mendy-ui] *) {
121
127
  width: 100%;
122
128
  @media (width >= 40rem) {
@@ -540,14 +546,16 @@
540
546
  border-start-start-radius: max(0px, calc(var(--radius, 0.5rem) - 2px));
541
547
  border-end-start-radius: max(0px, calc(var(--radius, 0.5rem) - 2px));
542
548
  }
543
- .mui-b31810dbd8a9:where([data-mendy-ui], [data-mendy-ui] *) {
549
+ .mui-2176687d6745:where([data-mendy-ui], [data-mendy-ui] *) {
544
550
  border-start-start-radius: 0;
545
- border-end-start-radius: 0;
546
551
  }
547
552
  .mui-7f3780751c2e:where([data-mendy-ui], [data-mendy-ui] *) {
548
553
  border-start-end-radius: max(0px, calc(var(--radius, 0.5rem) - 2px));
549
554
  border-end-end-radius: max(0px, calc(var(--radius, 0.5rem) - 2px));
550
555
  }
556
+ .mui-c9755c8858d9:where([data-mendy-ui], [data-mendy-ui] *) {
557
+ border-end-start-radius: 0;
558
+ }
551
559
  .mui-4f1a55de40bc:where([data-mendy-ui], [data-mendy-ui] *) {
552
560
  border-style: var(--mendy-tw-border-style);
553
561
  border-width: 1px;
@@ -0,0 +1,4 @@
1
+ import type { Row } from "@tanstack/react-table";
2
+ import type { DataTableFeatures } from "./features.js";
3
+ /** Read a record description without mounting its cell renderer or allocating every cell. */
4
+ export declare function rowSelectionLabel<T extends object>(row: Row<DataTableFeatures, T>): string | number;
@@ -0,0 +1,14 @@
1
+ /** Read a record description without mounting its cell renderer or allocating every cell. */
2
+ export function rowSelectionLabel(row) {
3
+ const { getRowLabel } = row.table.options;
4
+ if (getRowLabel)
5
+ return getRowLabel(row.original);
6
+ const column = row.table.getVisibleLeafColumns().find((column) => column.accessorFn);
7
+ if (column) {
8
+ const definition = column.columnDef;
9
+ const value = definition.copyValue?.(row.original) ?? row.getValue(column.id);
10
+ if ((typeof value === "string" && value.trim()) || typeof value === "number")
11
+ return value;
12
+ }
13
+ return row.index + 1;
14
+ }
@@ -14,11 +14,12 @@ export function TableColumnSettings({ table, children, }) {
14
14
  const id = useId();
15
15
  const { t, direction } = useMendyLocale();
16
16
  const { portalContainer } = useMendyUI();
17
- const columns = table.getAllLeafColumns();
17
+ const allColumns = table.getAllLeafColumns();
18
+ const columns = allColumns.filter((column) => column.getCanHide());
18
19
  const byId = new Map(columns.map((column) => [column.id, column]));
19
- const order = [
20
- ...new Set([...table.state.columnOrder, ...columns.map((column) => column.id)]),
21
- ].filter((key) => byId.has(key));
20
+ const allIds = new Set(allColumns.map((column) => column.id));
21
+ const fullOrder = [...new Set([...table.state.columnOrder, ...allIds])].filter((key) => allIds.has(key));
22
+ const order = fullOrder.filter((key) => byId.has(key));
22
23
  const ordered = order.map((key) => byId.get(key));
23
24
  const hidden = columns.filter((column) => !column.getIsVisible()).length;
24
25
  const start = columns.filter((column) => column.getIsPinned() === "start").length;
@@ -36,7 +37,9 @@ export function TableColumnSettings({ table, children, }) {
36
37
  const next = [...order];
37
38
  const [moved] = next.splice(result.source.index, 1);
38
39
  next.splice(result.destination.index, 0, moved);
39
- table.setColumnOrder(next);
40
+ // Keep fixed columns in their existing slots when editable columns move.
41
+ let index = 0;
42
+ table.setColumnOrder(fullOrder.map((key) => (byId.has(key) ? next[index++] : key)));
40
43
  }
41
44
  return (_jsxs(Popover, { children: [_jsx(PopoverTrigger, { asChild: true, children: _jsx(Button, { variant: "outline", size: "icon-sm", "aria-label": t("columnSettings"), title: t("columnSettings"), children: _jsx(SlidersHorizontal, { className: "mui-100c22d5776b" }) }) }), _jsxs(PopoverContent, { align: "end", "aria-label": t("columnSettings"), className: "mui-222f930b8752 mui-a4cce7869436 mui-302c0d124a94 mui-04760bcd507f", onCloseAutoFocus: (event) => {
42
45
  if (document.activeElement?.closest('[role="grid"]'))
@@ -1,5 +1,6 @@
1
1
  "use client";
2
2
  import { jsx as _jsx, jsxs as _jsxs } from "react/jsx-runtime";
3
+ import { rowSelectionLabel } from "./row-selection-label.js";
3
4
  import { useMendyLocale } from "../locale-context.js";
4
5
  import { useState } from "react";
5
6
  import { ChevronLeft, ChevronRight } from "lucide-react";
@@ -31,7 +32,7 @@ export function selectionColumn() {
31
32
  pin: "start",
32
33
  exportOptions: false,
33
34
  header: ({ table }) => (_jsx(SelectionCheckbox, { checked: table.getIsAllPageRowsSelected() || (table.getIsSomePageRowsSelected() && "indeterminate"), onCheckedChange: (value) => table.toggleAllPageRowsSelected(value === true) })),
34
- cell: ({ row }) => (_jsx(SelectionCheckbox, { rowId: row.id, checked: row.getIsSelected(), disabled: !row.getCanSelect(), onCheckedChange: (value) => row.toggleSelected(value === true) })),
35
+ cell: ({ row }) => (_jsx(SelectionCheckbox, { rowLabel: rowSelectionLabel(row), checked: row.getIsSelected(), disabled: !row.getCanSelect(), onCheckedChange: (value) => row.toggleSelected(value === true) })),
35
36
  };
36
37
  }
37
38
  export function TableActionBar({ count, children, onClear, }) {
@@ -65,7 +66,7 @@ export function TableSavedViews({ views, onApply, onSave, onDelete, }) {
65
66
  void run(() => onSave(name.trim()));
66
67
  }, children: [_jsx(Input, { "aria-label": t("newViewName"), value: name, onChange: (event) => setName(event.target.value), className: "mui-1fb07b38c63b mui-4ac4ec8dfbce" }), _jsx(Button, { type: "submit", size: "sm", disabled: pending || !name.trim(), children: t("saveView") })] }), error && (_jsx("span", { role: "alert", className: "mui-c74ab393b96d mui-887b9502d5c7", children: error }))] }));
67
68
  }
68
- function SelectionCheckbox({ rowId, ...props }) {
69
+ function SelectionCheckbox({ rowLabel, ...props }) {
69
70
  const { t } = useMendyLocale();
70
- return (_jsx(Checkbox, { ...props, "aria-label": rowId === undefined ? t("selectLoaded") : t("selectRow", { id: rowId }) }));
71
+ return (_jsx(Checkbox, { ...props, "aria-label": rowLabel === undefined ? t("selectLoaded") : t("selectRow", { id: rowLabel }) }));
71
72
  }
@@ -1,13 +1,16 @@
1
- import type { ReactNode } from "react";
1
+ import type { CSSProperties, ReactNode } from "react";
2
2
  import type { TableDataState } from "./table-view.js";
3
- export declare function TableFeedbackRow({ children, columnCount, rowIndex, className, }: {
3
+ export declare function TableFeedbackRow({ children, columnCount, rowIndex, className, style, }: {
4
4
  children: ReactNode;
5
5
  columnCount: number;
6
6
  rowIndex: number;
7
7
  className?: string;
8
+ style?: CSSProperties;
8
9
  }): import("react/jsx-runtime").JSX.Element;
9
- export declare function TableInitialState({ status, hasRows, loadingState, emptyState, error, retry, hasFilters, pageIndex, clearFilters, firstPage, columnCount, }: Pick<TableDataState, "status" | "error" | "retry"> & {
10
+ export declare function TableInitialState({ status, hasRows, loadingState, emptyState, error, retry, hasFilters, pageIndex, clearFilters, firstPage, columnCount, width, viewportWidth, }: Pick<TableDataState, "status" | "error" | "retry"> & {
10
11
  hasRows: boolean;
12
+ width: number;
13
+ viewportWidth: number | null;
11
14
  columnCount: number;
12
15
  loadingState?: ReactNode;
13
16
  emptyState?: ReactNode;
@@ -1,20 +1,23 @@
1
1
  import { jsx as _jsx, jsxs as _jsxs, Fragment as _Fragment } from "react/jsx-runtime";
2
2
  import { useMendyLocale } from "../locale-context.js";
3
3
  import { Button } from "../primitives/button.js";
4
- export function TableFeedbackRow({ children, columnCount, rowIndex, className, }) {
5
- return (_jsx("div", { role: "row", "aria-rowindex": rowIndex, className: className, children: _jsx("div", { role: "gridcell", "aria-colindex": 1, "aria-colspan": Math.max(1, columnCount), children: children }) }));
4
+ export function TableFeedbackRow({ children, columnCount, rowIndex, className, style, }) {
5
+ return (_jsx("div", { role: "row", "aria-rowindex": rowIndex, className: className, style: style, children: _jsx("div", { role: "gridcell", "aria-colindex": 1, "aria-colspan": Math.max(1, columnCount), children: children }) }));
6
6
  }
7
- export function TableInitialState({ status, hasRows, loadingState, emptyState, error, retry, hasFilters, pageIndex = 0, clearFilters, firstPage, columnCount, }) {
7
+ export function TableInitialState({ status, hasRows, loadingState, emptyState, error, retry, hasFilters, pageIndex = 0, clearFilters, firstPage, columnCount, width, viewportWidth, }) {
8
8
  const { t } = useMendyLocale();
9
9
  if (hasRows)
10
10
  return null;
11
11
  if (status === "loading")
12
12
  return (_jsx(TableFeedbackRow, { columnCount: columnCount, rowIndex: 2, children: loadingState }));
13
13
  if (status === "error")
14
- return (_jsx(TableFeedbackRow, { columnCount: columnCount, rowIndex: 2, children: _jsxs("div", { role: "alert", className: "mui-c432836760e3 mui-05ab12448317", children: [error ?? t("loadRowsError"), retry && (_jsx(Button, { variant: "outline", size: "sm", onClick: retry, children: t("retry") }))] }) }));
15
- return (_jsx(TableFeedbackRow, { columnCount: columnCount, rowIndex: 2, children: _jsx("div", { role: "status", className: "mui-222f930b8752 mui-302c0d124a94 mui-71556df3b421 mui-074569488cca mui-c7902d77ad80 mui-05ab12448317 mui-35f35c41d134", children: emptyState ??
14
+ return (_jsx(TableCenteredFeedback, { columnCount: columnCount, width: width, viewportWidth: viewportWidth, children: _jsxs("div", { role: "alert", className: "mui-c432836760e3 mui-05ab12448317", children: [error ?? t("loadRowsError"), retry && (_jsx(Button, { variant: "outline", size: "sm", onClick: retry, children: t("retry") }))] }) }));
15
+ return (_jsx(TableCenteredFeedback, { columnCount: columnCount, width: width, viewportWidth: viewportWidth, children: _jsx("div", { role: "status", className: "mui-222f930b8752 mui-302c0d124a94 mui-71556df3b421 mui-074569488cca mui-c7902d77ad80 mui-05ab12448317 mui-35f35c41d134", children: emptyState ??
16
16
  (pageIndex > 0 ? (_jsxs(_Fragment, { children: [_jsx("span", { children: t("noPageResults") }), _jsx(Button, { variant: "outline", size: "sm", onClick: firstPage, children: t("firstPage") })] })) : hasFilters ? (_jsxs(_Fragment, { children: [_jsx("span", { children: t("noFilterResults") }), clearFilters && (_jsx(Button, { variant: "outline", size: "sm", onClick: clearFilters, children: t("clearFilters") }))] })) : (t("noRows"))) }) }));
17
17
  }
18
+ function TableCenteredFeedback({ children, columnCount, width, viewportWidth, }) {
19
+ return (_jsx("div", { role: "rowgroup", className: "mui-222f930b8752 mui-7bd5bab6d7f4 mui-302c0d124a94", style: { width }, children: _jsx(TableFeedbackRow, { columnCount: columnCount, rowIndex: 2, style: { width: viewportWidth ?? "100%" }, className: "mui-964a9431ff49 mui-8368bbb62f66 mui-222f930b8752 mui-7bd5bab6d7f4 mui-71556df3b421 mui-a503dd374cca", children: children }) }));
20
+ }
18
21
  export function TableLoadMore({ loadMore, columnCount, rowIndex, onLoad, }) {
19
22
  const { t } = useMendyLocale();
20
23
  return (_jsx(TableFeedbackRow, { columnCount: columnCount, rowIndex: rowIndex, className: "mui-964a9431ff49 mui-8368bbb62f66", children: _jsxs("div", { className: "mui-222f930b8752 mui-71556df3b421 mui-a503dd374cca mui-074569488cca mui-96b92a971c95 mui-c74ab393b96d mui-35f35c41d134", children: [loadMore.loading ? (_jsxs("div", { role: "status", className: "mui-222f930b8752 mui-71556df3b421 mui-074569488cca", children: [_jsx("svg", { "aria-hidden": "true", viewBox: "0 0 24 24", fill: "none", stroke: "currentColor", strokeWidth: "1.5", strokeLinecap: "round", strokeLinejoin: "round", className: "mui-2bd43fb57913 mui-27ead27a81df mui-2c14b55d77e6 mui-237747164b60", children: _jsx("path", { d: "M12 3v3m6.366-.366-2.12 2.12M21 12h-3m.366 6.366-2.12-2.12M12 21v-3m-6.366.366 2.12-2.12M3 12h3m-.366-6.366 2.12 2.12" }) }), _jsx("span", { children: t("loadingMore") })] })) : (_jsx(Button, { size: "sm", variant: "ghost", onClick: onLoad, children: loadMore.error ? t("retryMore") : t("loadMore") })), loadMore.error && _jsx("span", { role: "alert", children: loadMore.error })] }) }));
@@ -7,6 +7,7 @@ import { ArrowDown, ArrowUp } from "lucide-react";
7
7
  import { Button } from "../primitives/button.js";
8
8
  import { Checkbox } from "../primitives/checkbox.js";
9
9
  import { cn } from "../utils.js";
10
+ import { rowSelectionLabel } from "./row-selection-label.js";
10
11
  import { interactiveSelector } from "./clipboard.js";
11
12
  export function TableHeaderCell({ table, header, index, style, renderHeader, contentClassName, selectLoaded, }) {
12
13
  const { t } = useMendyLocale();
@@ -58,11 +59,27 @@ function TableBodyRowImpl({ row, rowIndex, start, rowHeight, autoRowHeight, meas
58
59
  event.stopPropagation();
59
60
  event.currentTarget.focus({ preventScroll: true });
60
61
  cell.getSelectionStartHandler()(event);
61
- }, onMouseEnter: cell.getSelectionExtendHandler(), onClick: (event) => {
62
+ }, onMouseEnter: cell.getSelectionExtendHandler(), onKeyDown: (event) => {
63
+ if (cell.column.id !== "_selection" ||
64
+ event.target.closest(interactiveSelector))
65
+ return;
66
+ if (event.key === " " || event.key === "Enter") {
67
+ event.preventDefault();
68
+ event.stopPropagation();
69
+ if (!event.repeat && row.getCanSelect())
70
+ row.toggleSelected();
71
+ }
72
+ }, onClick: (event) => {
73
+ if (cell.column.id === "_selection") {
74
+ if (!event.target.closest(interactiveSelector) && row.getCanSelect())
75
+ row.toggleSelected();
76
+ return;
77
+ }
62
78
  if (event.detail <= 1 && !event.target.closest(interactiveSelector))
63
79
  onRowClick?.(row.original);
64
80
  }, onDoubleClick: (event) => {
65
- if (!event.target.closest(interactiveSelector))
81
+ if (cell.column.id !== "_selection" &&
82
+ !event.target.closest(interactiveSelector))
66
83
  onRowActivate?.(row.original);
67
84
  }, children: [selected && (_jsx("span", { "aria-hidden": "true", "data-selection-outline": "", className: "mui-33228ff7d583 mui-747355bdc2a2 mui-d7efd1b0b0f9 mui-515f9fdc6db7", style: {
68
85
  top: edge?.top ? 0 : -1,
@@ -73,7 +90,7 @@ function TableBodyRowImpl({ row, rowIndex, start, rowHeight, autoRowHeight, meas
73
90
  borderBottomWidth: edge?.bottom ? 2 : 0,
74
91
  borderLeftWidth: (direction === "rtl" ? edge?.right : edge?.left) ? 2 : 0,
75
92
  borderRightWidth: (direction === "rtl" ? edge?.left : edge?.right) ? 2 : 0,
76
- } })), inlineSelection && index === 0 && (_jsx(Checkbox, { "aria-label": t("selectRow", { id: rowIndex + 1 }), checked: row.getIsSelected(), disabled: !row.getCanSelect(), onCheckedChange: (value) => row.toggleSelected(value === true), onMouseDown: (event) => event.stopPropagation(), onClick: (event) => event.stopPropagation(), className: "mui-68d781378b03 mui-94f91922a10e mui-34a57d4b4103 mui-8da02faac748 mui-b8b1747fa763 mui-d2e4a66bb430 mui-978f422895e5 mui-d0c2ae8419e1 mui-9c02852bfc55 mui-e2ed522ed9b7 mui-cbd3aed703f7 mui-fa8e1efead3c mui-eaedb91f8774" })), _jsx("div", { className: cn("mui-184ddc11e5f9 mui-81b198a2db84", autoRowHeight ? "mui-726fca123972 mui-37cf9655f30a mui-b5edc3ea7c91" : "mui-7bd696ca6be3 mui-5a3a4ee420c2", contentClassName), children: _jsx(TableCellContent, { cell: cell, renderer: cell.column.columnDef.cell, version: contentVersion, state: contentState }) })] }, cell.id)] }, cell.id));
93
+ } })), inlineSelection && index === 0 && (_jsx(Checkbox, { "aria-label": t("selectRow", { id: rowSelectionLabel(row) }), checked: row.getIsSelected(), disabled: !row.getCanSelect(), onCheckedChange: (value) => row.toggleSelected(value === true), onMouseDown: (event) => event.stopPropagation(), onClick: (event) => event.stopPropagation(), className: "mui-68d781378b03 mui-94f91922a10e mui-34a57d4b4103 mui-8da02faac748 mui-b8b1747fa763 mui-d2e4a66bb430 mui-978f422895e5 mui-d0c2ae8419e1 mui-9c02852bfc55 mui-e2ed522ed9b7 mui-cbd3aed703f7 mui-fa8e1efead3c mui-eaedb91f8774" })), _jsx("div", { className: cn("mui-184ddc11e5f9 mui-81b198a2db84", autoRowHeight ? "mui-726fca123972 mui-37cf9655f30a mui-b5edc3ea7c91" : "mui-7bd696ca6be3 mui-5a3a4ee420c2", contentClassName), children: _jsx(TableCellContent, { cell: cell, renderer: cell.column.columnDef.cell, version: contentVersion, state: contentState }) })] }, cell.id)] }, cell.id));
77
94
  }) }, row.id));
78
95
  if (!renderRowDetail)
79
96
  return rowElement;
@@ -111,9 +111,9 @@ export function TableView({ table, label, height = "auto", layout: layoutMode =
111
111
  return (_jsxs(TableFrame, { layout: layoutMode, minHeight: minHeight, stretch: height === "100%", footer: footer, children: [_jsx("div", { "aria-live": "polite", className: "mui-32fb090591d9", children: announcement }), _jsxs("div", { ref: setContainer, role: "grid", tabIndex: -1, "aria-label": label ?? t("dataTable"), dir: direction, lang: code, "aria-rowcount": renderRowDetail ? -1 : rows.length + 1 + feedbackRowCount, "aria-colcount": layout.columns.length, "aria-busy": status === "loading" || refreshing, style: {
112
112
  height: fill || height === "auto" ? undefined : height,
113
113
  maxHeight: !fill && height === "auto" ? "65dvh" : undefined,
114
- }, className: cn("mui-d2d9e1f13413 mui-014aadadffad mui-1a26a0d28420 mui-3fa8c572949b mui-4f1a55de40bc mui-5b272f3c5076 mui-c74ab393b96d mui-b30fc56058b6", fill && "mui-410da8dfa8ac mui-7bd5bab6d7f4", 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) => (_jsxs(Fragment, { children: [columnGaps.has(column.id) && (_jsx("div", { "aria-hidden": "true", className: "mui-27ead27a81df", style: { width: columnGaps.get(column.id) } })), _jsx(TableHeaderCell, { table: table, header: headersById.get(column.id), index: columnIndexes.get(column.id), style: cellStyle(column), renderHeader: renderHeader, contentClassName: contentClassName, selectLoaded: selectLoaded }, column.id)] }, column.id))) }), _jsx(TableInitialState, { columnCount: layout.columns.length, status: status, hasRows: rows.length > 0, loadingState: loadingState ?? (_jsx(TableLoadingRows, { columns: columns, columnGaps: columnGaps, width: totalWidth, rowHeight: rowHeight, cellStyle: cellStyle, count: !fill && height === "auto"
114
+ }, className: cn("mui-d2d9e1f13413 mui-014aadadffad mui-1a26a0d28420 mui-3fa8c572949b mui-4f1a55de40bc mui-5b272f3c5076 mui-c74ab393b96d mui-b30fc56058b6", fill && "mui-410da8dfa8ac mui-7bd5bab6d7f4", hasInitialFeedback && status !== "loading" && "mui-222f930b8752 mui-302c0d124a94", className), onKeyDown: onKeyDown, children: [_jsx("div", { role: "row", "aria-rowindex": 1, className: "mui-964a9431ff49 mui-98599e4ee250 mui-4e8f0a87a0dc mui-222f930b8752 mui-27ead27a81df mui-2bf6510f1330 mui-bbe39cfb5cc6 mui-5b272f3c5076", style: { width: totalWidth }, children: columns.map((column) => (_jsxs(Fragment, { children: [columnGaps.has(column.id) && (_jsx("div", { "aria-hidden": "true", className: "mui-27ead27a81df", style: { width: columnGaps.get(column.id) } })), _jsx(TableHeaderCell, { table: table, header: headersById.get(column.id), index: columnIndexes.get(column.id), style: cellStyle(column), renderHeader: renderHeader, contentClassName: contentClassName, selectLoaded: selectLoaded }, column.id)] }, column.id))) }), _jsx(TableInitialState, { width: Math.max(totalWidth, viewportWidth ?? 0), viewportWidth: viewportWidth, columnCount: layout.columns.length, status: status, hasRows: rows.length > 0, loadingState: loadingState ?? (_jsx(TableLoadingRows, { columns: columns, columnGaps: columnGaps, width: totalWidth, rowHeight: rowHeight, cellStyle: cellStyle, count: !fill && height === "auto"
115
115
  ? 8
116
- : Math.max(1, Math.ceil(((virtual.scrollRect?.height ?? 400) - rowHeight) / rowHeight)) })), emptyState: emptyState, hasFilters: hasFilters, pageIndex: table.state.pagination.pageIndex, clearFilters: clearFilters, firstPage: () => table.setPageIndex(0), 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, autoRowHeight: autoRowHeight, measureElement: autoRowHeight ? virtual.measureElement : undefined, rowClassName: rowClassName, renderRowDetail: renderRowDetail, detailWidth: viewportWidth ?? totalWidth, cellStyle: cellStyle, columns: columns, columnGaps: columnGaps, columnIndexes: columnIndexes, contentVersion: table.options, contentState: table.state, focusedId: focused?.id, copied: copied, contentClassName: contentClassName, onRowClick: onRowClick, onRowActivate: onRowActivate, isRowHighlighted: isRowHighlighted, inlineSelection: inlineSelection }, item.key))) }), hasRefreshError && (_jsx(TableRefreshError, { columnCount: layout.columns.length, rowIndex: rows.length + 2, error: error, retry: retry })), loadMore?.available && (_jsx(TableLoadMore, { loadMore: loadMore, columnCount: layout.columns.length, rowIndex: rows.length + 2 + Number(hasInitialFeedback || hasRefreshError), onLoad: () => {
116
+ : Math.max(1, Math.ceil(((virtual.scrollRect?.height ?? 400) - rowHeight) / rowHeight)) })), emptyState: emptyState, hasFilters: hasFilters, pageIndex: table.state.pagination.pageIndex, clearFilters: clearFilters, firstPage: () => table.setPageIndex(0), error: error, retry: retry }), _jsx("div", { role: "rowgroup", className: "mui-d2d9e1f13413 mui-27ead27a81df 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, autoRowHeight: autoRowHeight, measureElement: autoRowHeight ? virtual.measureElement : undefined, rowClassName: rowClassName, renderRowDetail: renderRowDetail, detailWidth: viewportWidth ?? totalWidth, cellStyle: cellStyle, columns: columns, columnGaps: columnGaps, columnIndexes: columnIndexes, contentVersion: table.options, contentState: table.state, focusedId: focused?.id, copied: copied, contentClassName: contentClassName, onRowClick: onRowClick, onRowActivate: onRowActivate, isRowHighlighted: isRowHighlighted, inlineSelection: inlineSelection }, item.key))) }), hasRefreshError && (_jsx(TableRefreshError, { columnCount: layout.columns.length, rowIndex: rows.length + 2, error: error, retry: retry })), loadMore?.available && (_jsx(TableLoadMore, { loadMore: loadMore, columnCount: layout.columns.length, rowIndex: rows.length + 2 + Number(hasInitialFeedback || hasRefreshError), onLoad: () => {
117
117
  requested.current = null;
118
118
  void Promise.resolve()
119
119
  .then(() => loadMore.load())
@@ -7,6 +7,8 @@ export interface UseDataTableOptions<T extends object> extends Omit<TableOptions
7
7
  rows: readonly T[];
8
8
  columns: TableColumn<T>[];
9
9
  getRowId: (row: T, index: number) => string;
10
+ /** Human-readable record description for selection controls. Defaults to the first visible value column. */
11
+ getRowLabel?: (row: T) => string;
10
12
  processing?: {
11
13
  filtering?: "client" | "external";
12
14
  sorting?: "client" | "external";
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@mendylanda/ui",
3
- "version": "0.4.1-dev.61.619e1451770c",
3
+ "version": "0.4.2-dev.65.0f00a8efff6b",
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",
@@ -118,5 +118,5 @@
118
118
  "build": "tsc -p tsconfig.build.json && node scripts/build-css.mjs",
119
119
  "typecheck": "tsc -p tsconfig.build.json --noEmit"
120
120
  },
121
- "gitHead": "619e1451770c36dcc629ed48b5539001a9dc57e4"
121
+ "gitHead": "0f00a8efff6b77bb0b78300c773f9563e9d3c8e2"
122
122
  }