@mendylanda/ui 0.3.2-dev.56.581b055ea0a9 → 0.3.2-dev.57.4108694e944d

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (50) hide show
  1. package/README.md +15 -0
  2. package/dist/calendar-locale.d.ts +7 -0
  3. package/dist/calendar-locale.js +31 -0
  4. package/dist/class-names.js +1 -1
  5. package/dist/customization.d.ts +6 -1
  6. package/dist/customization.js +20 -2
  7. package/dist/filters/filter-bar.d.ts +1 -1
  8. package/dist/filters/filter-bar.js +56 -30
  9. package/dist/filters/filter-collection.js +3 -1
  10. package/dist/filters/filter-date-editor.js +5 -3
  11. package/dist/filters/filter-definition.d.ts +3 -2
  12. package/dist/filters/filter-definition.js +5 -6
  13. package/dist/filters/filter-menu-focus.js +1 -1
  14. package/dist/filters/filter-menu-panel.js +13 -9
  15. package/dist/filters/filter-select-editor.js +6 -4
  16. package/dist/filters/filter-text-editor.js +5 -3
  17. package/dist/filters/filters.js +8 -5
  18. package/dist/filters/index.d.ts +3 -0
  19. package/dist/filters/index.js +2 -0
  20. package/dist/filters/use-filter-options.d.ts +1 -1
  21. package/dist/filters/use-filter-options.js +13 -7
  22. package/dist/filters/use-filters.js +6 -2
  23. package/dist/filters/use-url-filters.js +9 -7
  24. package/dist/locale-context.d.ts +29 -0
  25. package/dist/locale-context.js +8 -0
  26. package/dist/locale.d.ts +37 -0
  27. package/dist/locale.js +26 -0
  28. package/dist/locales/en.d.ts +113 -0
  29. package/dist/locales/en.js +112 -0
  30. package/dist/locales/he.d.ts +116 -0
  31. package/dist/locales/he.js +116 -0
  32. package/dist/primitives/calendar.d.ts +1 -1
  33. package/dist/primitives/calendar.js +15 -10
  34. package/dist/primitives/dropdown-menu.js +7 -5
  35. package/dist/primitives/popover.js +3 -1
  36. package/dist/styles.css +39 -36
  37. package/dist/styles.tailwind3.css +39 -36
  38. package/dist/table/table-column-settings.js +27 -13
  39. package/dist/table/table-controls.js +21 -8
  40. package/dist/table/table-feedback.js +6 -3
  41. package/dist/table/table-frame.js +3 -1
  42. package/dist/table/table-layout.d.ts +1 -1
  43. package/dist/table/table-layout.js +5 -5
  44. package/dist/table/table-loading.js +3 -1
  45. package/dist/table/table-parts.js +15 -11
  46. package/dist/table/table-view.js +6 -4
  47. package/dist/table/use-column-window.js +1 -1
  48. package/dist/table/use-data-table.js +3 -0
  49. package/dist/table/use-table-interaction.js +12 -8
  50. package/package.json +8 -2
package/README.md CHANGED
@@ -128,3 +128,18 @@ Opening the menu shows the category list without choosing a filter. Focusing a c
128
128
  `FilterBar` and composed `FilterList` show Clear all after the chips when a removable filter is active. It clears filters and search. Search-only bars use the input’s clear control and hide the filter menu when no menu fields are available. Set `showClear={false}` to opt out. Choice search is enabled by default; use `searchable: false` for short lists. Menu selections keep the menu open, and selecting the current single choice again clears it. Chip editor popups open instantly; `editorAnimation` opts into their animation.
129
129
 
130
130
  See [defaults and app configuration](https://ui.mendylanda.com/docs/defaults) for the full behavior and [system reference](https://ui.mendylanda.com/docs/system) for query adapters, selected-label loading, grouped fields, and custom editors.
131
+
132
+ ## Localization
133
+
134
+ English is the default for Table and Filters. Set Hebrew once for built-in text, calendar labels, accessible announcements, and RTL behavior:
135
+
136
+ ```tsx
137
+ import { MendyUIProvider } from "@mendylanda/ui";
138
+ import { he } from "@mendylanda/ui/locales/he";
139
+
140
+ <MendyUIProvider locale={he}>
141
+ <YourTablesAndFilters />
142
+ </MendyUIProvider>;
143
+ ```
144
+
145
+ Use `messages` for individual wording overrides, or `defineLocale` to create a private dictionary with English fallbacks. Complete contributed dictionaries use the `MendyMessages` type. Application labels and values remain application-owned; locale changes preserve IDs and saved state. See [Localization](https://ui.mendylanda.com/docs/localization) for the live English/Hebrew example, Next.js usage, and formatting.
@@ -0,0 +1,7 @@
1
+ import type { Formatters, Labels } from "react-day-picker";
2
+ import type { createLocale } from "./locale.js";
3
+ /** Gregorian dates remain the data contract; Intl only changes their presentation. */
4
+ export declare function calendarLocale(locale: ReturnType<typeof createLocale>, timeZone?: string): {
5
+ formatters: Partial<Formatters>;
6
+ labels: Partial<Labels>;
7
+ };
@@ -0,0 +1,31 @@
1
+ /** Gregorian dates remain the data contract; Intl only changes their presentation. */
2
+ export function calendarLocale(locale, timeZone) {
3
+ const format = (options) => new Intl.DateTimeFormat(locale.code, { calendar: "gregory", timeZone, ...options }).format;
4
+ const caption = format({ month: "long", year: "numeric" });
5
+ const day = format({ dateStyle: "full" });
6
+ const { t } = locale;
7
+ const formatters = {
8
+ formatCaption: caption,
9
+ formatMonthDropdown: format({ month: "long" }),
10
+ formatYearDropdown: format({ year: "numeric" }),
11
+ formatDay: format({ day: "numeric" }),
12
+ formatWeekdayName: format({ weekday: "short" }),
13
+ formatWeekNumber: (week) => locale.number(week),
14
+ formatWeekNumberHeader: () => t("weekNumberHeader"),
15
+ };
16
+ const labels = {
17
+ labelNext: () => t("nextMonth"),
18
+ labelPrevious: () => t("previousMonth"),
19
+ labelMonthDropdown: () => t("monthDropdown"),
20
+ labelYearDropdown: () => t("yearDropdown"),
21
+ labelGrid: caption,
22
+ labelGridcell: day,
23
+ labelDayButton: (date, modifiers) => [modifiers.today && t("today"), day(date), modifiers.selected && t("selected")]
24
+ .filter(Boolean)
25
+ .join(", "),
26
+ labelWeekday: format({ weekday: "long" }),
27
+ labelWeekNumber: (week) => t("weekNumber", { week }),
28
+ labelWeekNumberHeader: () => t("weekNumberHeader"),
29
+ };
30
+ return { formatters, labels };
31
+ }
@@ -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-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-477d8f4dfce9":"me-1","mui-68d781378b03":"me-2","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-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-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-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-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-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-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-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-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-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-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-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-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,4 +1,5 @@
1
1
  import type { ComponentProps, ComponentType, ReactNode } from "react";
2
+ import type { MendyLocale, MendyMessages } from "./locale.js";
2
3
  import { Button as DefaultButton } from "./primitives/button.js";
3
4
  import { Input as DefaultInput } from "./primitives/input.js";
4
5
  import { Textarea as DefaultTextarea } from "./primitives/textarea.js";
@@ -14,6 +15,10 @@ export interface MendyUIComponents {
14
15
  export type FilterPart = "root" | "search" | "searchInput" | "menuTrigger" | "menu" | "menuList" | "menuRow" | "menuHeader" | "editor" | "chip" | "chipTrigger" | "chipRemove" | "option" | "clear";
15
16
  export type FilterClassNames = Partial<Record<FilterPart, string>>;
16
17
  export interface MendyUIOptions {
18
+ locale?: MendyLocale;
19
+ /** Override individual messages, inheriting the surrounding locale. */
20
+ messages?: Partial<MendyMessages>;
21
+ dir?: "ltr" | "rtl";
17
22
  /** Desktop editor placement. Phones always use one panel with Back. */
18
23
  menuLayout?: "connected" | "anchored";
19
24
  /** Animate chip editor popups. Off by default; chip entrance motion is independent. */
@@ -24,7 +29,7 @@ export interface MendyUIOptions {
24
29
  portalContainer?: HTMLElement | null;
25
30
  }
26
31
  /** Nested providers inherit defaults; local settings override matching keys. */
27
- export declare function MendyUIProvider({ children, components, classNames, portalContainer, menuLayout, editorAnimation, }: MendyUIOptions & {
32
+ export declare function MendyUIProvider({ children, components, classNames, portalContainer, menuLayout, editorAnimation, locale, messages, dir, }: MendyUIOptions & {
28
33
  children: ReactNode;
29
34
  }): import("react/jsx-runtime").JSX.Element;
30
35
  export declare function useMendyUI(): MendyUIOptions;
@@ -1,6 +1,9 @@
1
1
  "use client";
2
2
  import { jsx as _jsx } from "react/jsx-runtime";
3
3
  import { createContext, useContext, useMemo } from "react";
4
+ import { DirectionProvider } from "@radix-ui/react-direction";
5
+ import { createLocale } from "./locale.js";
6
+ import { LocaleContext, useMendyLocale } from "./locale-context.js";
4
7
  import { Button as DefaultButton } from "./primitives/button.js";
5
8
  import { Input as DefaultInput } from "./primitives/input.js";
6
9
  import { Textarea as DefaultTextarea } from "./primitives/textarea.js";
@@ -8,8 +11,23 @@ import { Label as DefaultLabel } from "./primitives/label.js";
8
11
  import { Calendar as DefaultCalendar } from "./primitives/calendar.js";
9
12
  const Context = createContext({ menuLayout: "anchored" });
10
13
  /** Nested providers inherit defaults; local settings override matching keys. */
11
- export function MendyUIProvider({ children, components, classNames, portalContainer, menuLayout, editorAnimation, }) {
14
+ export function MendyUIProvider({ children, components, classNames, portalContainer, menuLayout, editorAnimation, locale, messages, dir, }) {
12
15
  const parent = useContext(Context);
16
+ const parentLocale = useMendyLocale();
17
+ const localized = useMemo(() => !locale && !messages && !dir
18
+ ? parentLocale
19
+ : {
20
+ ...createLocale({
21
+ code: locale?.code ?? parentLocale.code,
22
+ weekStartsOn: locale ? locale.weekStartsOn : parentLocale.weekStartsOn,
23
+ firstWeekContainsDate: locale
24
+ ? locale.firstWeekContainsDate
25
+ : parentLocale.firstWeekContainsDate,
26
+ direction: dir ?? locale?.direction ?? parentLocale.direction,
27
+ messages: { ...(locale?.messages ?? parentLocale.messages), ...messages },
28
+ }),
29
+ configured: Boolean(locale || messages || dir || parentLocale.configured),
30
+ }, [locale, messages, dir, parentLocale]);
13
31
  const value = useMemo(() => ({
14
32
  menuLayout: menuLayout ?? parent.menuLayout,
15
33
  editorAnimation: editorAnimation ?? parent.editorAnimation,
@@ -17,7 +35,7 @@ export function MendyUIProvider({ children, components, classNames, portalContai
17
35
  classNames: { ...parent.classNames, ...classNames },
18
36
  portalContainer: portalContainer === undefined ? parent.portalContainer : portalContainer,
19
37
  }), [parent, components, classNames, portalContainer, menuLayout, editorAnimation]);
20
- return _jsx(Context.Provider, { value: value, children: children });
38
+ return (_jsx(LocaleContext.Provider, { value: localized, children: _jsx(DirectionProvider, { dir: localized.direction, children: _jsx(Context.Provider, { value: value, children: children }) }) }));
21
39
  }
22
40
  export function useMendyUI() {
23
41
  return useContext(Context);
@@ -28,7 +28,7 @@ export declare function FilterBar({ showClear, ...props }: Omit<FilterRootProps,
28
28
  /** Show Clear all after the applied chips. */
29
29
  showClear?: boolean;
30
30
  }): import("react/jsx-runtime").JSX.Element;
31
- export declare function FilterSearch({ label, placeholder, }: {
31
+ export declare function FilterSearch({ label, placeholder }: {
32
32
  label?: string;
33
33
  placeholder?: string;
34
34
  }): import("react/jsx-runtime").JSX.Element;
@@ -1,5 +1,6 @@
1
1
  "use client";
2
2
  import { jsx as _jsx, jsxs as _jsxs, Fragment as _Fragment } from "react/jsx-runtime";
3
+ import { useMendyLocale } from "../locale-context.js";
3
4
  import { FilterCollection } from "./filter-collection.js";
4
5
  import { createContext, useContext, useEffect, useLayoutEffect, useMemo, useId, useRef, useState, useSyncExternalStore, } from "react";
5
6
  import { ListFilter, Search, X, Circle, ListChecks, Type, Hash, CalendarDays, SlidersHorizontal, Layers, } from "lucide-react";
@@ -40,6 +41,7 @@ export function FilterRoot({ classNames, ...props }) {
40
41
  }
41
42
  function FilterRootContent({ filters, summary = defaultSummary, suggestions = "always", closeMenuOnApply = false, groups = defaultGroups, disabled: disabledProp = false, className, children, }) {
42
43
  const { classNames } = useMendyUI();
44
+ const locale = useMendyLocale();
43
45
  // Server HTML must not accept edits that React cannot handle yet. Client-only
44
46
  // renders are ready immediately; hydration enables the existing controls.
45
47
  const hydrated = useSyncExternalStore(subscribeHydration, clientHydrated, serverHydrated);
@@ -69,13 +71,14 @@ function FilterRootContent({ filters, summary = defaultSummary, suggestions = "a
69
71
  ambiguous,
70
72
  setAmbiguous,
71
73
  }), [filters, summary, suggestions, closeMenuOnApply, groups, disabled, ambiguous, direction]);
72
- return (_jsx(FilterOptionCache.Provider, { value: cache, children: _jsx(Context.Provider, { value: context, children: _jsx("div", { "data-mendy-ui": "", "aria-busy": !hydrated || undefined, className: cn("mui-222f930b8752 mui-faa8a23c68f6 mui-71556df3b421 mui-074569488cca", classNames?.root, className), children: children }) }) }));
74
+ return (_jsx(FilterOptionCache.Provider, { value: cache, children: _jsx(Context.Provider, { value: context, children: _jsx("div", { "data-mendy-ui": "", dir: locale.configured ? locale.direction : undefined, lang: locale.code, "aria-busy": !hydrated || undefined, className: cn("mui-222f930b8752 mui-faa8a23c68f6 mui-71556df3b421 mui-074569488cca", classNames?.root, className), children: children }) }) }));
73
75
  }
74
76
  export function FilterBar({ showClear = true, ...props }) {
75
77
  return (_jsxs(FilterRoot, { ...props, children: [_jsx(FilterSearch, { label: props.searchLabel, placeholder: props.searchPlaceholder }), _jsx(FilterList, { showClear: showClear }), _jsx(FilterFeedback, {})] }));
76
78
  }
77
- export function FilterSearch({ label = "Search", placeholder = "Search or filter", }) {
79
+ export function FilterSearch({ label, placeholder }) {
78
80
  const { filters, trigger, disabled, setAmbiguous, direction } = useRoot();
81
+ const { t } = useMendyLocale();
79
82
  const { classNames } = useMendyUI();
80
83
  const anchor = useRef(null);
81
84
  const input = useRef(null);
@@ -95,7 +98,7 @@ export function FilterSearch({ label = "Search", placeholder = "Search or filter
95
98
  if (!hasMenu && filters.menuOpen)
96
99
  filters.setMenuOpen(false);
97
100
  }, [filters, hasMenu]);
98
- return (_jsxs(DropdownMenu, { dir: direction, modal: false, open: hasMenu && filters.menuOpen, onOpenChange: filters.setMenuOpen, children: [_jsxs("div", { ref: anchor, className: cn("mui-d2d9e1f13413 mui-58d0413dd93c mui-81b198a2db84 mui-27ead27a81df mui-0cc20f4e20c8", classNames?.search), children: [_jsx(Search, { className: "mui-33228ff7d583 mui-747355bdc2a2 mui-cea70f23972e mui-4e45f4841abb mui-100c22d5776b mui-5dde0fd996f0", "aria-hidden": "true" }), _jsx(Input, { ref: input, type: "text", role: "searchbox", disabled: disabled, "aria-label": label, placeholder: placeholder, value: filters.search, autoComplete: "off", autoCapitalize: "none", autoCorrect: "off", spellCheck: false, className: cn("mui-58d0413dd93c mui-b2100041c585 mui-c74ab393b96d mui-4f05a238500e", filters.search ? (hasMenu ? "mui-559069d2c2e5" : "mui-0e14c365f9e8") : hasMenu ? "mui-0e14c365f9e8" : "mui-a202804a1738", classNames?.searchInput), onKeyDown: (event) => {
101
+ return (_jsxs(DropdownMenu, { dir: direction, modal: false, open: hasMenu && filters.menuOpen, onOpenChange: filters.setMenuOpen, children: [_jsxs("div", { ref: anchor, className: cn("mui-d2d9e1f13413 mui-58d0413dd93c mui-81b198a2db84 mui-27ead27a81df mui-0cc20f4e20c8", classNames?.search), children: [_jsx(Search, { className: "mui-33228ff7d583 mui-747355bdc2a2 mui-cea70f23972e mui-4e45f4841abb mui-100c22d5776b mui-5dde0fd996f0", "aria-hidden": "true" }), _jsx(Input, { ref: input, type: "text", role: "searchbox", disabled: disabled, "aria-label": label ?? t("search"), placeholder: placeholder ?? t("searchOrFilter"), value: filters.search, autoComplete: "off", autoCapitalize: "none", autoCorrect: "off", spellCheck: false, className: cn("mui-58d0413dd93c mui-b2100041c585 mui-c74ab393b96d mui-4f05a238500e", filters.search ? (hasMenu ? "mui-559069d2c2e5" : "mui-0e14c365f9e8") : hasMenu ? "mui-0e14c365f9e8" : "mui-a202804a1738", classNames?.searchInput), onKeyDown: (event) => {
99
102
  shift.current = event.shiftKey;
100
103
  if (event.key === "Enter" && !event.nativeEvent.isComposing && !event.shiftKey) {
101
104
  const classified = classifyPaste(event.currentTarget.value, filters.entries);
@@ -131,17 +134,18 @@ export function FilterSearch({ label = "Search", placeholder = "Search or filter
131
134
  after: element.value.slice(end),
132
135
  });
133
136
  setAmbiguous(result.ambiguous);
134
- } }), filters.search && (_jsx(Button, { variant: "ghost", size: "icon", type: "button", disabled: disabled, "aria-label": "Clear search", className: cn("mui-747355bdc2a2 mui-4e45f4841abb mui-222f930b8752 mui-0712570dcc9f mui-5dde0fd996f0 mui-71556df3b421 mui-a503dd374cca mui-02e603944040 mui-0b5a4d1257ab mui-8da02faac748 mui-2e357972fc10 mui-39be5a15b766 mui-db549d38ff19", hasMenu ? "mui-585f4729f611" : "mui-13422ddc8d83"), onClick: () => {
137
+ } }), filters.search && (_jsx(Button, { variant: "ghost", size: "icon", type: "button", disabled: disabled, "aria-label": t("clearSearch"), className: cn("mui-747355bdc2a2 mui-4e45f4841abb mui-222f930b8752 mui-0712570dcc9f mui-5dde0fd996f0 mui-71556df3b421 mui-a503dd374cca mui-02e603944040 mui-0b5a4d1257ab mui-8da02faac748 mui-2e357972fc10 mui-39be5a15b766 mui-db549d38ff19", hasMenu ? "mui-585f4729f611" : "mui-13422ddc8d83"), onClick: () => {
135
138
  setAmbiguous([]);
136
139
  filters.setSearch("");
137
140
  input.current?.focus();
138
141
  }, children: _jsx(X, { className: "mui-61c000c8a98a", "aria-hidden": "true" }) })), hasMenu && (_jsx(DropdownMenuTrigger, { asChild: true, children: _jsx(Button, { variant: "ghost", size: "icon", ref: (element) => {
139
142
  trigger.current = element;
140
- }, type: "button", disabled: disabled, "aria-label": "Open filters", "aria-haspopup": "dialog", className: cn("mui-747355bdc2a2 mui-13422ddc8d83 mui-4e45f4841abb mui-79ede756e761 mui-5dde0fd996f0 mui-2cdd01663c76 mui-8da02faac748 mui-2e357972fc10 mui-39be5a15b766 mui-db549d38ff19 mui-790ed041a953", filters.active.length ? "mui-65694092f002" : "mui-0b5a4d1257ab", classNames?.menuTrigger), children: _jsx(ListFilter, { className: "mui-100c22d5776b", "aria-hidden": "true" }) }) }))] }), hasMenu && filters.menuOpen && _jsx(FilterMenuContent, { anchor: anchor })] }));
143
+ }, type: "button", disabled: disabled, "aria-label": t("openFilters"), "aria-haspopup": "dialog", className: cn("mui-747355bdc2a2 mui-13422ddc8d83 mui-4e45f4841abb mui-79ede756e761 mui-5dde0fd996f0 mui-2cdd01663c76 mui-8da02faac748 mui-2e357972fc10 mui-39be5a15b766 mui-db549d38ff19 mui-790ed041a953", filters.active.length ? "mui-65694092f002" : "mui-0b5a4d1257ab", classNames?.menuTrigger), children: _jsx(ListFilter, { className: "mui-100c22d5776b", "aria-hidden": "true" }) }) }))] }), hasMenu && filters.menuOpen && _jsx(FilterMenuContent, { anchor: anchor })] }));
141
144
  }
142
145
  /** A standalone menu button for layouts without a search field. */
143
- export function FilterMenu({ children = "Add filter", asChild = false, anchor, }) {
146
+ export function FilterMenu({ children, asChild = false, anchor, }) {
144
147
  const { filters, trigger, disabled, direction } = useRoot();
148
+ const { t } = useMendyLocale();
145
149
  const { classNames } = useMendyUI();
146
150
  const hasMenu = availableMenuEntries(filters).length > 0;
147
151
  useEffect(() => {
@@ -152,7 +156,7 @@ export function FilterMenu({ children = "Add filter", asChild = false, anchor, }
152
156
  return null;
153
157
  return (_jsxs(DropdownMenu, { dir: direction, modal: false, open: filters.menuOpen, onOpenChange: filters.setMenuOpen, children: [_jsx(DropdownMenuTrigger, { asChild: true, children: _jsx(Button, { ref: (element) => {
154
158
  trigger.current = element;
155
- }, asChild: asChild, className: classNames?.menuTrigger, variant: "outline", disabled: disabled, "aria-haspopup": "dialog", children: children }) }), filters.menuOpen && _jsx(FilterMenuContent, { anchor: anchor })] }));
159
+ }, asChild: asChild, className: classNames?.menuTrigger, variant: "outline", disabled: disabled, "aria-haspopup": "dialog", children: children ?? t("addFilter") }) }), filters.menuOpen && _jsx(FilterMenuContent, { anchor: anchor })] }));
156
160
  }
157
161
  const fieldIcons = {
158
162
  single: Circle,
@@ -165,6 +169,7 @@ const fieldIcons = {
165
169
  };
166
170
  function FilterMenuContent({ anchor }) {
167
171
  const { filters, groups, disabled, trigger } = useRoot();
172
+ const { t, code } = useMendyLocale();
168
173
  const [clearEpoch, setClearEpoch] = useState(0);
169
174
  const [drafts] = useState(() => new Map());
170
175
  const grouped = new Set(groups.flatMap((group) => group.fields));
@@ -199,8 +204,8 @@ function FilterMenuContent({ anchor }) {
199
204
  icon: section.icon ?? _jsx(Icon, {}),
200
205
  editorLabel: single?.editorLabel ??
201
206
  (single?.kind === "text" || single?.kind === "tokens"
202
- ? `Set ${section.label.toLowerCase()} filter`
203
- : `Choose ${section.label.toLowerCase()}`),
207
+ ? t("setFilter", { label: section.label.toLocaleLowerCase(code) })
208
+ : t("choose", { label: section.label.toLocaleLowerCase(code) })),
204
209
  disabled: disabled || section.entries.every((entry) => entry.field.disabled),
205
210
  active,
206
211
  clear: !disabled && clearable.length
@@ -229,15 +234,22 @@ export function FilterList({ showClear = true }) {
229
234
  ? [_jsx(FieldChip, { entry: entry }, entry.id)]
230
235
  : []), showClear && hasClearableActiveField(filters) && _jsx(FilterClear, {})] }));
231
236
  }
232
- function summarize(field, value, choices) {
237
+ function summarize(field, value, choices, locale) {
238
+ const { t, number, date } = locale;
233
239
  if (field.kind === "numberRange" && Array.isArray(value))
234
- return `${value[0] ?? "Any"} – ${value[1] ?? "Any"}`;
240
+ return `${value[0] == null ? t("any") : number(value[0])} – ${value[1] == null ? t("any") : number(value[1])}`;
235
241
  if (Array.isArray(value)) {
236
242
  const labels = new Map(choices.map((choice) => [choice.value, choice.label]));
237
- return value.map((item) => labels.get(item) ?? String(item ?? "Any")).join(", ");
243
+ return value.map((item) => labels.get(item) ?? String(item ?? t("any"))).join(", ");
238
244
  }
245
+ if (field.kind === "dateRange" &&
246
+ value &&
247
+ typeof value === "object" &&
248
+ "from" in value &&
249
+ "to" in value)
250
+ return `${value.from ? date(new Date(`${value.from}T12:00:00`)) : t("any")} – ${value.to ? date(new Date(`${value.to}T12:00:00`)) : t("any")}`;
239
251
  if (value && typeof value === "object" && "from" in value && "to" in value)
240
- return `${value.from ?? "Any"} – ${value.to ?? "Any"}`;
252
+ return `${value.from ?? t("any")} – ${value.to ?? t("any")}`;
241
253
  return choices.find((choice) => choice.value === value)?.label ?? String(value ?? "");
242
254
  }
243
255
  export function FilterField({ id }) {
@@ -252,6 +264,7 @@ export function FilterFieldEditor({ id, autoFocus = true }) {
252
264
  return entry ? (_jsx(FieldEditor, { entry: entry, active: true, autoFocus: autoFocus, disabled: disabled || entry.field.disabled, close: () => filters.edit(null), location: "inline" }, id)) : null;
253
265
  }
254
266
  function FieldChip({ entry }) {
267
+ const { t } = useMendyLocale();
255
268
  const { classNames } = useMendyUI();
256
269
  const { filters, summary, suggestions, disabled, trigger } = useRoot();
257
270
  const { id, field, value } = entry;
@@ -269,7 +282,7 @@ function FieldChip({ entry }) {
269
282
  "aria-describedby": descriptionId,
270
283
  "aria-busy": options.resolving || undefined,
271
284
  className: classNames?.chipTrigger,
272
- }, editLabel: `${active ? "Edit" : "Apply"} ${field.label} filter`, open: filters.editField === id, onOpenChange: chipEditor.onOpenChange, onRemove: active && field.removable !== false
285
+ }, editLabel: t(active ? "editFilter" : "applyFilter", { label: field.label }), open: filters.editField === id, onOpenChange: chipEditor.onOpenChange, onRemove: active && field.removable !== false
273
286
  ? () => {
274
287
  filters.remove(id);
275
288
  requestAnimationFrame(() => trigger.current?.focus());
@@ -322,13 +335,18 @@ function chipDisabled(field, active, disabled) {
322
335
  field.disabled ||
323
336
  (!active && (field.suggestion?.disabled || field.suggestion?.loading)));
324
337
  }
325
- function summaryText(field, shownValue, choices, policy) {
326
- const full = summarize(field, shownValue, choices);
338
+ function summaryText(field, shownValue, choices, policy, locale) {
339
+ const full = summarize(field, shownValue, choices, locale);
327
340
  let text = full;
328
341
  if (policy.mode === "count" && field.kind !== "numberRange" && Array.isArray(shownValue)) {
329
342
  const limit = Math.max(0, policy.limit ?? 3);
330
343
  if (shownValue.length > limit)
331
- text = `${summarize(field, shownValue.slice(0, limit), choices)}${limit ? " and " : ""}${shownValue.length - limit} more`;
344
+ text = limit
345
+ ? locale.t("andMore", {
346
+ values: summarize(field, shownValue.slice(0, limit), choices, locale),
347
+ count: shownValue.length - limit,
348
+ })
349
+ : locale.t("more", { count: shownValue.length });
332
350
  }
333
351
  return text;
334
352
  }
@@ -341,12 +359,15 @@ function ChipLabel({ field, active, hasValue, }) {
341
359
  }
342
360
  function ChipSummary({ descriptionId, field, value, active, options, summary, }) {
343
361
  const policy = field.summary ?? summary;
362
+ const locale = useMendyLocale();
363
+ const { t } = locale;
344
364
  const shownValue = active ? value : field.suggestion?.value;
345
- const full = summarize(field, shownValue, options.selected);
346
- const text = summaryText(field, shownValue, options.selected, policy);
347
- return (_jsxs(_Fragment, { children: [_jsx("span", { id: descriptionId, className: "mui-32fb090591d9", children: options.resolving ? "Loading selected values" : full }), _jsx(ChipLabel, { field: field, active: active, hasValue: Boolean(full) }), options.resolving ? (_jsx("span", { "data-slot": "filter-summary-skeleton", "aria-hidden": "true", className: "mui-099be97e1fa4 mui-81b198a2db84 mui-27ead27a81df mui-7b3cd77eb999 mui-02e603944040 mui-810ae775809b mui-237747164b60", style: { width: Math.min(180, 100 + Math.max(0, options.selected.length - 1) * 40) } })) : field.renderSummary ? (field.renderSummary(shownValue, options.selected)) : (_jsx("span", { title: full, dir: "auto", className: cn("mui-184ddc11e5f9 mui-957a109f887f mui-393883c1db68 mui-14bd99410890", policy.mode !== "all" && "mui-5a3a4ee420c2", policy.mode === "all" && "mui-726fca123972 mui-37cf9655f30a mui-1fcf28756bb1"), style: policy.mode === "ellipsis" ? { maxWidth: policy.maxWidth ?? 180 } : undefined, children: text }))] }));
365
+ const full = summarize(field, shownValue, options.selected, locale);
366
+ const text = summaryText(field, shownValue, options.selected, policy, locale);
367
+ return (_jsxs(_Fragment, { children: [_jsx("span", { id: descriptionId, className: "mui-32fb090591d9", children: options.resolving ? t("loadingSelected") : full }), _jsx(ChipLabel, { field: field, active: active, hasValue: Boolean(full) }), options.resolving ? (_jsx("span", { "data-slot": "filter-summary-skeleton", "aria-hidden": "true", className: "mui-099be97e1fa4 mui-81b198a2db84 mui-27ead27a81df mui-7b3cd77eb999 mui-02e603944040 mui-810ae775809b mui-237747164b60", style: { width: Math.min(180, 100 + Math.max(0, options.selected.length - 1) * 40) } })) : field.renderSummary ? (field.renderSummary(shownValue, options.selected)) : (_jsx("span", { title: full, dir: "auto", className: cn("mui-184ddc11e5f9 mui-957a109f887f mui-393883c1db68 mui-14bd99410890", policy.mode !== "all" && "mui-5a3a4ee420c2", policy.mode === "all" && "mui-726fca123972 mui-37cf9655f30a mui-1fcf28756bb1"), style: policy.mode === "ellipsis" ? { maxWidth: policy.maxWidth ?? 180 } : undefined, children: text }))] }));
348
368
  }
349
- export function FilterClear({ children = "Clear all" }) {
369
+ export function FilterClear({ children }) {
370
+ const { t } = useMendyLocale();
350
371
  const { classNames } = useMendyUI();
351
372
  const { filters, disabled, trigger, setAmbiguous } = useRoot();
352
373
  if (!filters.active.length && !filters.search)
@@ -355,17 +376,18 @@ export function FilterClear({ children = "Clear all" }) {
355
376
  setAmbiguous([]);
356
377
  filters.clear();
357
378
  requestAnimationFrame(() => trigger.current?.focus());
358
- }, children: children }));
379
+ }, children: children ?? t("clearAll") }));
359
380
  }
360
381
  export function FilterFeedback() {
382
+ const { t } = useMendyLocale();
361
383
  const { filters, ambiguous, setAmbiguous } = useRoot();
362
- return (_jsxs(_Fragment, { children: [filters.error && !filters.menuOpen && !filters.editField && (_jsx("p", { role: "alert", className: "mui-58d0413dd93c mui-c74ab393b96d mui-887b9502d5c7", children: filters.error })), filters.persistenceMessage && (_jsx("p", { role: "status", className: "mui-58d0413dd93c mui-3992de70b033 mui-35f35c41d134", children: filters.persistenceMessage })), ambiguous.map((item) => (_jsxs("div", { "data-mendy-ui": "", className: "mui-222f930b8752 mui-58d0413dd93c mui-faa8a23c68f6 mui-71556df3b421 mui-074569488cca mui-3fa8c572949b mui-4f1a55de40bc mui-b97db4a9f432 mui-c74ab393b96d", children: [_jsxs("span", { children: ["Use ", item.token, " as:"] }), item.candidates.map((candidate) => (_jsx(Button, { size: "sm", variant: "outline", onClick: () => {
384
+ return (_jsxs(_Fragment, { children: [filters.error && !filters.menuOpen && !filters.editField && (_jsx("p", { role: "alert", className: "mui-58d0413dd93c mui-c74ab393b96d mui-887b9502d5c7", children: filters.error })), filters.persistenceMessage && (_jsx("p", { role: "status", className: "mui-58d0413dd93c mui-3992de70b033 mui-35f35c41d134", children: filters.persistenceMessage })), ambiguous.map((item) => (_jsxs("div", { "data-mendy-ui": "", className: "mui-222f930b8752 mui-58d0413dd93c mui-faa8a23c68f6 mui-71556df3b421 mui-074569488cca mui-3fa8c572949b mui-4f1a55de40bc mui-b97db4a9f432 mui-c74ab393b96d", children: [_jsx("span", { children: t("useToken", { token: item.token }) }), item.candidates.map((candidate) => (_jsx(Button, { size: "sm", variant: "outline", onClick: () => {
363
385
  const entry = filters.entries.find((entry) => entry.id === candidate.id);
364
386
  const resolved = resolvePasteAmbiguity(filters.search, item, ambiguous);
365
387
  const error = filters.batch({ [candidate.id]: entry.field.merge(entry.value, candidate.value) }, resolved.search, "paste");
366
388
  if (!error)
367
389
  setAmbiguous(resolved.remaining);
368
- }, children: candidate.label }, candidate.id))), _jsx(Button, { size: "sm", variant: "ghost", onClick: () => setAmbiguous(ambiguous.filter((other) => other !== item)), children: "Keep in search" })] }, item.token)))] }));
390
+ }, children: candidate.label }, candidate.id))), _jsx(Button, { size: "sm", variant: "ghost", onClick: () => setAmbiguous(ambiguous.filter((other) => other !== item)), children: t("keepInSearch") })] }, item.token)))] }));
369
391
  }
370
392
  function FieldEditor({ entry, active, disabled, close, location, autoFocus = true, showDateLabel = true, }) {
371
393
  const { filters, trigger, closeMenuOnApply } = useRoot();
@@ -440,10 +462,11 @@ function FieldEditor({ entry, active, disabled, close, location, autoFocus = tru
440
462
  }
441
463
  function ChoiceEditor({ field, value, input, options, disabled, apply, location, error, }) {
442
464
  const searchable = field.searchable !== false;
465
+ const { t, code } = useMendyLocale();
443
466
  const collection = useRef(null);
444
467
  const selected = Array.isArray(value) ? value : value === null ? [] : [value];
445
468
  const selectedSet = new Set(selected);
446
- const searchLabel = field.searchLabel ?? `Search ${field.label.toLowerCase()}`;
469
+ const searchLabel = field.searchLabel ?? t("searchField", { label: field.label.toLocaleLowerCase(code) });
447
470
  if (location === "menu" && field.menuLayout === "inline" && field.kind === "single")
448
471
  return (_jsxs("div", { "data-mendy-ui": "", className: "mui-184ddc11e5f9", children: [_jsx("div", { role: "group", "aria-label": field.label, className: "mui-123306850fe1 mui-81b198a2db84 mui-faa8a23c68f6 mui-d5111d0e9f48 mui-3fa8c572949b mui-4f1a55de40bc", children: options.items.map((choice) => (_jsx(Button, { type: "button", variant: "ghost", size: "sm", disabled: disabled || choice.disabled, "aria-pressed": selectedSet.has(choice.value), className: "mui-1fb07b38c63b mui-52417259a4f5 mui-55860251be20 mui-3deb00079b4c mui-0f9e6672913a mui-52101fc7d8bb mui-35f35c41d134 mui-2d6703b5473b mui-ff2dcda51a27", onClick: () => apply(singleChoiceValue(field, value, choice.value), false), children: field.renderOption?.(choice, { selected: selectedSet.has(choice.value) }) ??
449
472
  choice.label }, choice.value))) }), _jsx(OptionFeedback, { options: options, error: error })] }));
@@ -509,10 +532,12 @@ function singleChoiceValue(field, current, next) {
509
532
  : next || field.clearValue;
510
533
  }
511
534
  function OptionFeedback({ options, error, }) {
512
- return (_jsxs(_Fragment, { children: [error && (_jsx("p", { role: "alert", className: "mui-0f9e6672913a mui-b5edc3ea7c91 mui-c74ab393b96d mui-887b9502d5c7", children: error })), options.loading && (_jsx("p", { role: "status", className: "mui-0f9e6672913a mui-b5edc3ea7c91 mui-c74ab393b96d mui-35f35c41d134", children: "Loading options\u2026" })), !options.loading && !options.error && options.items.length === 0 && (_jsx("p", { role: "status", className: "mui-094f5333853b mui-c74ab393b96d mui-35f35c41d134", children: "No options found." })), options.error && (_jsxs("div", { "data-mendy-ui": "", className: "mui-267171770524 mui-094f5333853b", children: [_jsx("p", { role: "alert", className: "mui-c74ab393b96d mui-887b9502d5c7", children: options.error }), _jsx(Button, { size: "sm", variant: "outline", onClick: options.retry, children: "Retry" })] })), options.hasMore && (_jsx(Button, { variant: "ghost", className: "mui-58d0413dd93c", disabled: options.loading, onClick: options.loadMore, children: "Load more" }))] }));
535
+ const { t } = useMendyLocale();
536
+ return (_jsxs(_Fragment, { children: [error && (_jsx("p", { role: "alert", className: "mui-0f9e6672913a mui-b5edc3ea7c91 mui-c74ab393b96d mui-887b9502d5c7", children: error })), options.loading && (_jsx("p", { role: "status", className: "mui-0f9e6672913a mui-b5edc3ea7c91 mui-c74ab393b96d mui-35f35c41d134", children: t("loadingOptions") })), !options.loading && !options.error && options.items.length === 0 && (_jsx("p", { role: "status", className: "mui-094f5333853b mui-c74ab393b96d mui-35f35c41d134", children: t("noOptions") })), options.error && (_jsxs("div", { "data-mendy-ui": "", className: "mui-267171770524 mui-094f5333853b", children: [_jsx("p", { role: "alert", className: "mui-c74ab393b96d mui-887b9502d5c7", children: options.error }), _jsx(Button, { size: "sm", variant: "outline", onClick: options.retry, children: t("retry") })] })), options.hasMore && (_jsx(Button, { variant: "ghost", className: "mui-58d0413dd93c", disabled: options.loading, onClick: options.loadMore, children: t("loadMore") }))] }));
513
537
  }
514
538
  function ValueEditor({ location, field, draft, setDraft, text, setText, input, error, id, disabled, apply, }) {
515
539
  const [attempted, setAttempted] = useState(false);
540
+ const { t, messages } = useMendyLocale();
516
541
  const candidate = field.kind === "tokens"
517
542
  ? text.split(/[\r\n\t,]+/).flatMap((item) => (item.trim() ? [item.trim()] : []))
518
543
  : field.kind === "text"
@@ -520,10 +545,10 @@ function ValueEditor({ location, field, draft, setDraft, text, setText, input, e
520
545
  : draft;
521
546
  let validation;
522
547
  try {
523
- validation = field.validate(field.normalize(candidate));
548
+ validation = field.validate(field.normalize(candidate), messages);
524
549
  }
525
550
  catch {
526
- validation = "Enter a valid value.";
551
+ validation = t("invalidValue");
527
552
  }
528
553
  const message = (text.length > 0 || attempted || field.kind === "numberRange" ? validation : undefined) ??
529
554
  error;
@@ -533,7 +558,7 @@ function ValueEditor({ location, field, draft, setDraft, text, setText, input, e
533
558
  }, children: [field.kind === "numberRange" ? (_jsxs("fieldset", { disabled: disabled, className: "mui-a2526bc2efa3 mui-184ddc11e5f9 mui-267171770524 mui-dad556abfe15 mui-04760bcd507f", children: [_jsx("legend", { className: cn("mui-04760bcd507f mui-c74ab393b96d mui-daaac3fbf55e", location === "menu" && "mui-32fb090591d9"), children: field.label }), [0, 1].map((index) => {
534
559
  const key = index === 0 ? "from" : "to";
535
560
  const rangeValue = draft?.[index];
536
- return (_jsxs(Label, { className: "mui-496aca80e4d8 mui-27e6c432192f mui-3992de70b033", children: [index === 0 ? "Minimum" : "Maximum", _jsx(Input, { ref: index === 0
561
+ return (_jsxs(Label, { className: "mui-496aca80e4d8 mui-27e6c432192f mui-3992de70b033", children: [t(index === 0 ? "minimum" : "maximum"), _jsx(Input, { ref: index === 0
537
562
  ? (node) => {
538
563
  input.current = node;
539
564
  }
@@ -567,9 +592,10 @@ function ValueEditor({ location, field, draft, setDraft, text, setText, input, e
567
592
  } })] })), _jsx(ValueEditorFeedback, { message: message, id: id, hasHint: field.kind !== "numberRange" })] }));
568
593
  }
569
594
  function ValueEditorFeedback({ message, id, hasHint, }) {
595
+ const { t } = useMendyLocale();
570
596
  if (message)
571
597
  return (_jsx("p", { role: "alert", id: `${id}-error`, className: "mui-3992de70b033 mui-887b9502d5c7", children: message }));
572
598
  if (!hasHint)
573
599
  return null;
574
- return (_jsx("p", { id: `${id}-hint`, className: "mui-3992de70b033 mui-35f35c41d134", children: "Enter to save. Shift+Enter for a new line." }));
600
+ return (_jsx("p", { id: `${id}-hint`, className: "mui-3992de70b033 mui-35f35c41d134", children: t("saveHint") }));
575
601
  }
@@ -1,5 +1,6 @@
1
1
  "use client";
2
2
  import { jsxs as _jsxs, jsx as _jsx } from "react/jsx-runtime";
3
+ import { useMendyLocale } from "../locale-context.js";
3
4
  import { useCallback, useImperativeHandle, useLayoutEffect, useMemo, useRef, useState, } from "react";
4
5
  import { defaultRangeExtractor, useVirtualizer } from "@tanstack/react-virtual";
5
6
  import { cn } from "../utils.js";
@@ -10,6 +11,7 @@ export function FilterCollection({ items, children, renderBefore, className, rol
10
11
  const pending = useRef(null);
11
12
  const ownsFocus = useRef(false);
12
13
  const previousIndex = useRef(0);
14
+ const { code } = useMendyLocale();
13
15
  const [focused, setFocused] = useState(initialKey ?? items.find((item) => !item.disabled)?.key);
14
16
  const typeahead = useRef({ text: "", at: 0 });
15
17
  const virtual = items.length > 100;
@@ -180,7 +182,7 @@ export function FilterCollection({ items, children, renderBefore, className, rol
180
182
  typeahead.current = { text, at: now };
181
183
  const term = [...text].every((char) => char === text[0]) ? text[0] : text;
182
184
  const order = [...enabled.slice(index + 1), ...enabled.slice(0, index + 1)];
183
- next = order.find((item) => item.label.toLocaleLowerCase().startsWith(term.toLocaleLowerCase()));
185
+ next = order.find((item) => item.label.toLocaleLowerCase(code).startsWith(term.toLocaleLowerCase(code)));
184
186
  }
185
187
  }
186
188
  event.preventDefault();
@@ -1,5 +1,6 @@
1
1
  "use client";
2
2
  import { jsx as _jsx, jsxs as _jsxs } from "react/jsx-runtime";
3
+ import { useMendyLocale } from "../locale-context.js";
3
4
  import { useValueDraft } from "./use-value-draft.js";
4
5
  import { Calendar } from "../customization.js";
5
6
  import { Button } from "../customization.js";
@@ -13,8 +14,9 @@ function dateString(value) {
13
14
  return `${value.getFullYear()}-${String(value.getMonth() + 1).padStart(2, "0")}-${String(value.getDate()).padStart(2, "0")}`;
14
15
  }
15
16
  export function FilterDateEditor({ field, value, disabled, apply, error, draftKey, autoFocus = true, showLabel = true, showClear = true, }) {
17
+ const { t, direction, code, configured } = useMendyLocale();
16
18
  const [range, setRange] = useValueDraft(value, (current) => current ? { from: calendarDate(current.from), to: calendarDate(current.to) } : undefined, draftKey);
17
- return (_jsxs("div", { "data-mendy-ui": "", onKeyDown: (event) => {
19
+ return (_jsxs("div", { "data-mendy-ui": "", dir: configured ? direction : undefined, lang: code, onKeyDown: (event) => {
18
20
  // Calendar arrows navigate days. Escape still dismisses the surrounding editor.
19
21
  if (event.key !== "Escape")
20
22
  event.stopPropagation();
@@ -24,8 +26,8 @@ export function FilterDateEditor({ field, value, disabled, apply, error, draftKe
24
26
  apply(selected
25
27
  ? { from: dateString(selected.from), to: dateString(selected.to) }
26
28
  : field.clearValue, false);
27
- }, defaultMonth: range?.from ?? range?.to, disabled: disabled }), _jsxs("div", { "data-mendy-ui": "", className: "mui-267171770524 mui-894c3815a57f mui-094f5333853b", children: [_jsx("p", { className: "mui-3992de70b033 mui-35f35c41d134", children: "Pick a day, or two dates for a range." }), error && (_jsx("p", { role: "alert", className: "mui-c74ab393b96d mui-887b9502d5c7", children: error })), showClear && (_jsx("div", { "data-mendy-ui": "", className: "mui-222f930b8752 mui-074569488cca", children: _jsx(Button, { type: "button", size: "sm", variant: "ghost", className: "mui-958e2cfcf5b6 mui-e7e01cc7f4df", disabled: disabled || !range, onClick: () => {
29
+ }, defaultMonth: range?.from ?? range?.to, disabled: disabled }), _jsxs("div", { "data-mendy-ui": "", className: "mui-267171770524 mui-894c3815a57f mui-094f5333853b", children: [_jsx("p", { className: "mui-3992de70b033 mui-35f35c41d134", children: t("dateHint") }), error && (_jsx("p", { role: "alert", className: "mui-c74ab393b96d mui-887b9502d5c7", children: error })), showClear && (_jsx("div", { "data-mendy-ui": "", className: "mui-222f930b8752 mui-074569488cca", children: _jsx(Button, { type: "button", size: "sm", variant: "ghost", className: "mui-958e2cfcf5b6 mui-e7e01cc7f4df", disabled: disabled || !range, onClick: () => {
28
30
  setRange(undefined);
29
31
  apply(field.clearValue);
30
- }, children: "Clear date" }) }))] })] }));
32
+ }, children: t("clearDate") }) }))] })] }));
31
33
  }