@mendylanda/ui 0.1.0

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 (64) hide show
  1. package/LICENSE +21 -0
  2. package/NOTICE.md +5 -0
  3. package/README.md +49 -0
  4. package/THIRD_PARTY_LICENSES/shadcn-ui.txt +21 -0
  5. package/THIRD_PARTY_LICENSES/startercn.txt +21 -0
  6. package/dist/class-names.d.ts +1 -0
  7. package/dist/class-names.js +1 -0
  8. package/dist/customization.d.ts +31 -0
  9. package/dist/customization.js +42 -0
  10. package/dist/filters/core.d.ts +3 -0
  11. package/dist/filters/core.js +3 -0
  12. package/dist/filters/filter-bar.d.ts +49 -0
  13. package/dist/filters/filter-bar.js +435 -0
  14. package/dist/filters/filter-date-editor.d.ts +10 -0
  15. package/dist/filters/filter-date-editor.js +31 -0
  16. package/dist/filters/filter-definition.d.ts +220 -0
  17. package/dist/filters/filter-definition.js +227 -0
  18. package/dist/filters/filter-menu-panel.d.ts +21 -0
  19. package/dist/filters/filter-menu-panel.js +164 -0
  20. package/dist/filters/filter-select-editor.d.ts +25 -0
  21. package/dist/filters/filter-select-editor.js +46 -0
  22. package/dist/filters/filter-state.d.ts +34 -0
  23. package/dist/filters/filter-state.js +107 -0
  24. package/dist/filters/filter-text-editor.d.ts +11 -0
  25. package/dist/filters/filter-text-editor.js +34 -0
  26. package/dist/filters/filter-utils.d.ts +1 -0
  27. package/dist/filters/filter-utils.js +8 -0
  28. package/dist/filters/filters.d.ts +38 -0
  29. package/dist/filters/filters.js +94 -0
  30. package/dist/filters/index.d.ts +10 -0
  31. package/dist/filters/index.js +10 -0
  32. package/dist/filters/nuqs.d.ts +1 -0
  33. package/dist/filters/nuqs.js +2 -0
  34. package/dist/filters/use-filter-options.d.ts +24 -0
  35. package/dist/filters/use-filter-options.js +221 -0
  36. package/dist/filters/use-filters.d.ts +78 -0
  37. package/dist/filters/use-filters.js +158 -0
  38. package/dist/filters/use-url-filters.d.ts +41 -0
  39. package/dist/filters/use-url-filters.js +197 -0
  40. package/dist/filters/use-value-draft.d.ts +2 -0
  41. package/dist/filters/use-value-draft.js +16 -0
  42. package/dist/index.d.ts +1 -0
  43. package/dist/index.js +1 -0
  44. package/dist/primitives/button.d.ts +10 -0
  45. package/dist/primitives/button.js +36 -0
  46. package/dist/primitives/calendar.d.ts +8 -0
  47. package/dist/primitives/calendar.js +75 -0
  48. package/dist/primitives/checkbox.d.ts +4 -0
  49. package/dist/primitives/checkbox.js +10 -0
  50. package/dist/primitives/dropdown-menu.d.ts +25 -0
  51. package/dist/primitives/dropdown-menu.js +54 -0
  52. package/dist/primitives/index.d.ts +8 -0
  53. package/dist/primitives/index.js +8 -0
  54. package/dist/primitives/input.d.ts +3 -0
  55. package/dist/primitives/input.js +7 -0
  56. package/dist/primitives/label.d.ts +4 -0
  57. package/dist/primitives/label.js +9 -0
  58. package/dist/primitives/textarea.d.ts +3 -0
  59. package/dist/primitives/textarea.js +7 -0
  60. package/dist/styles.css +1775 -0
  61. package/dist/styles.css.d.ts +1 -0
  62. package/dist/utils.d.ts +3 -0
  63. package/dist/utils.js +19 -0
  64. package/package.json +98 -0
package/LICENSE ADDED
@@ -0,0 +1,21 @@
1
+ MIT License
2
+
3
+ Copyright (c) 2026 Mendy Landa
4
+
5
+ Permission is hereby granted, free of charge, to any person obtaining a copy
6
+ of this software and associated documentation files (the "Software"), to deal
7
+ in the Software without restriction, including without limitation the rights
8
+ to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
9
+ copies of the Software, and to permit persons to whom the Software is
10
+ furnished to do so, subject to the following conditions:
11
+
12
+ The above copyright notice and this permission notice shall be included in all
13
+ copies or substantial portions of the Software.
14
+
15
+ THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
16
+ IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
17
+ FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
18
+ AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
19
+ LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
20
+ OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
21
+ SOFTWARE.
package/NOTICE.md ADDED
@@ -0,0 +1,5 @@
1
+ # Attribution
2
+
3
+ Mendy UI is maintained by Mendy Landa. Its documentation site is adapted from [startercn](https://github.com/shadcn-labs/startercn), copyright 2026 Shadcn Labs, distributed under the MIT license. The original license is retained in THIRD_PARTY_LICENSES/startercn.txt.
4
+
5
+ UI primitives come from [shadcn/ui](https://github.com/shadcn-ui/ui), licensed under MIT. Filter components originated in SimCall and were extracted for this project by Mendy Landa.
package/README.md ADDED
@@ -0,0 +1,49 @@
1
+ # Mendy UI
2
+
3
+ My personal collection of components I like to use. Maintained as one package and shared across projects.
4
+
5
+ ```sh
6
+ npm install @mendylanda/ui
7
+ ```
8
+
9
+ Import the stylesheet once:
10
+
11
+ ```tsx
12
+ import "@mendylanda/ui/styles.css";
13
+ ```
14
+
15
+ Define filters in your application:
16
+
17
+ ```tsx
18
+ "use client";
19
+ import { defineFilters, filter, FilterBar, useFilters } from "@mendylanda/ui/filters";
20
+
21
+ const definitions = defineFilters({
22
+ status: filter.select({
23
+ label: "Status",
24
+ options: [
25
+ { value: "open", label: "Open" },
26
+ { value: "closed", label: "Closed" },
27
+ ],
28
+ }),
29
+ });
30
+
31
+ export function IssueFilters() {
32
+ const filters = useFilters(definitions);
33
+ return <FilterBar filters={filters} />;
34
+ }
35
+ ```
36
+
37
+ Use `filters.values` and `filters.search` in your data queries. Menus, editable chips, keyboard interactions, focus, dynamic options, paste recognition, and predefined shortcuts come from the package.
38
+
39
+ React 19 is required. Tailwind and local shadcn files are not required. Compiled CSS is scoped to Mendy UI elements and follows your shadcn theme variables and radius. It inherits your font and does not reset unrelated application elements.
40
+
41
+ For URL persistence, install `nuqs`, configure its router adapter, and import `useUrlFilters` from `@mendylanda/ui/filters/nuqs`. Applications with existing state can use `bindFilters` and `useControlledFilters` instead.
42
+
43
+ Customize with named `classNames`, typed option/editor/summary renderers, `MendyUIProvider` control replacements, or composed layouts. The provider can also keep portals inside a local theme or dialog.
44
+
45
+ - [Documentation](https://ui.mendylanda.com/docs)
46
+ - [Customization](https://ui.mendylanda.com/docs/customization)
47
+ - [Source and releases](https://github.com/MendyLanda/mendy-ui)
48
+
49
+ Update the dependency and redeploy a project to receive shared fixes. MIT licensed. Shadcn attribution is included in the package.
@@ -0,0 +1,21 @@
1
+ MIT License
2
+
3
+ Copyright (c) 2023 shadcn
4
+
5
+ Permission is hereby granted, free of charge, to any person obtaining a copy
6
+ of this software and associated documentation files (the "Software"), to deal
7
+ in the Software without restriction, including without limitation the rights
8
+ to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
9
+ copies of the Software, and to permit persons to whom the Software is
10
+ furnished to do so, subject to the following conditions:
11
+
12
+ The above copyright notice and this permission notice shall be included in all
13
+ copies or substantial portions of the Software.
14
+
15
+ THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
16
+ IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
17
+ FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
18
+ AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
19
+ LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
20
+ OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
21
+ SOFTWARE.
@@ -0,0 +1,21 @@
1
+ MIT License
2
+
3
+ Copyright (c) 2026 Shadcn Labs
4
+
5
+ Permission is hereby granted, free of charge, to any person obtaining a copy
6
+ of this software and associated documentation files (the "Software"), to deal
7
+ in the Software without restriction, including without limitation the rights
8
+ to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
9
+ copies of the Software, and to permit persons to whom the Software is
10
+ furnished to do so, subject to the following conditions:
11
+
12
+ The above copyright notice and this permission notice shall be included in all
13
+ copies or substantial portions of the Software.
14
+
15
+ THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
16
+ IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
17
+ FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
18
+ AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
19
+ LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
20
+ OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
21
+ SOFTWARE.
@@ -0,0 +1 @@
1
+ export declare const originalClassNames: Record<string, string>;
@@ -0,0 +1 @@
1
+ export const originalClassNames = {"mui-33228ff7d583":"pointer-events-none","mui-b75af7ef6c4d":"invisible","mui-d42ef1497900":"visible","mui-32fb090591d9":"sr-only","mui-747355bdc2a2":"absolute","mui-d2d9e1f13413":"relative","mui-ce13093ad8c9":"inset-0","mui-3ba24c062d55":"inset-x-0","mui-cced28c6dc3f":"start","mui-361e48d0308f":"end","mui-98599e4ee250":"top-0","mui-4e45f4841abb":"top-1/2","mui-71fb77dd8ea7":"right-1","mui-5a6edca9f43a":"right-8","mui-5b9fdf1819c4":"left-2","mui-ea31f8b3a958":"left-3","mui-866c339ea145":"left-4","mui-3eef1ce97dba":"z-50","mui-a42d519714d6":"container","mui-abba77319850":"-mx-1","mui-d8747231f142":"my-1","mui-f28fea81a5cd":"mt-2","mui-9b2a4c5f630c":"-ml-2","mui-cc51bda60e7e":"ml-auto","mui-496aca80e4d8":"block","mui-222f930b8752":"flex","mui-0f2a693e93e2":"grid","mui-e564b4081d7a":"hidden","mui-995cf20a9c45":"inline","mui-123306850fe1":"inline-flex","mui-3da89b3ed14b":"field-sizing-content","mui-129d6f9b1e07":"aspect-square","mui-f7d12b41bceb":"size-(--cell-size)","mui-dc797fcc7165":"size-1.5","mui-9e7600197f38":"size-2","mui-61c000c8a98a":"size-3.5","mui-100c22d5776b":"size-4","mui-0712570dcc9f":"size-6","mui-79ede756e761":"size-7","mui-ebd37e04d422":"size-8","mui-3ee10ef4c057":"size-9","mui-d0a383a9c24f":"size-10","mui-9104ce433bba":"size-[15px]","mui-3c7e3f82f336":"size-[17px]","mui-4dad94bd15e3":"size-auto","mui-a5960ac1d283":"h-(--cell-size)","mui-ce1945804664":"h-6","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-dcd942c18ddc":"max-h-[var(--radix-dropdown-menu-content-available-height)]","mui-410da8dfa8ac":"min-h-0","mui-9974acedf3f7":"min-h-9","mui-8423dc94ee06":"min-h-10","mui-50312c3ce4a3":"min-h-[60px]","mui-d48fe95d4da8":"w-(--cell-size)","mui-8867d85ed290":"w-8","mui-72b37c1a040d":"w-64","mui-37535002f0f7":"w-72","mui-a4cce7869436":"w-[300px]","mui-9958eb2b312a":"w-[var(--mendy-filter-menu-width,512px)]","mui-8cfb5a42ef9f":"w-fit","mui-58d0413dd93c":"w-full","mui-a5c6864f064f":"max-w-[calc(100vw-1.5rem)]","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-7bd5bab6d7f4":"flex-1","mui-66b490dd6005":"shrink","mui-27ead27a81df":"shrink-0","mui-215061302c50":"border-collapse","mui-3a3774477287":"origin-(--radix-dropdown-menu-content-transform-origin)","mui-5dde0fd996f0":"-translate-y-1/2","mui-393df0d154e0":"animate-none!","mui-7b3cd77eb999":"animate-pulse","mui-d343f41ba73e":"cursor-default","mui-acd532d8913e":"resize","mui-50f2bcd37640":"grid-cols-[var(--mendy-filter-list-width,208px)_minmax(0,1fr)]","mui-302c0d124a94":"flex-col","mui-faa8a23c68f6":"flex-wrap","mui-8fd2e2355cbc":"place-content-center","mui-71556df3b421":"items-center","mui-32c92bb1fde4":"justify-between","mui-a503dd374cca":"justify-center","mui-c62ec162662e":"justify-start","mui-19e97f3f40e6":"gap-1","mui-70007b876865":"gap-1.5","mui-074569488cca":"gap-2","mui-90fc3ec35a37":"gap-4","mui-27e6c432192f":"space-y-1","mui-267171770524":"space-y-2","mui-5a3a4ee420c2":"truncate","mui-d5111d0e9f48":"overflow-hidden","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-10c0bae8cba9":"rounded-l-md","mui-34bbd346e74c":"rounded-r-md","mui-4f1a55de40bc":"border","mui-894c3815a57f":"border-t","mui-baf794b99c10":"border-r","mui-bbe39cfb5cc6":"border-b","mui-8d940fccb093":"border-l","mui-8450eb0f1857":"border-dashed","mui-163a623b3716":"border-border/50","mui-1267095cdeb7":"border-input","mui-9b76f456b8c9":"border-muted-foreground/50","mui-292affc1f780":"bg-accent","mui-5b272f3c5076":"bg-background","mui-a943bea85d66":"bg-border","mui-0cf6c2e8fe7e":"bg-current","mui-965cf6587342":"bg-destructive","mui-e593c38256e0":"bg-popover","mui-0c2864fba576":"bg-primary","mui-d191cb569aac":"bg-secondary","mui-8fca9236d191":"bg-transparent","mui-717b342c2d01":"fill-current","mui-04760bcd507f":"p-0","mui-1dee6e3ec67d":"p-1","mui-b97db4a9f432":"p-2","mui-094f5333853b":"p-3","mui-56b8f5e0fb12":"px-(--cell-size)","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-0a702d97ed7d":"pt-3","mui-1a52da5bc88c":"pr-1","mui-98a5b6fff1d2":"pr-2","mui-0359a07b64f9":"pr-9","mui-83ffc494bac4":"pr-16","mui-f5d8e661d857":"pl-2","mui-75b27e813dcc":"pl-8","mui-86486d7e416f":"pl-9","mui-05ab12448317":"text-center","mui-1a5d10977b93":"text-left","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-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-7de07d413c13":"shadow-xs","mui-59edd3d33673":"outline-hidden","mui-318678825324":"outline","mui-dfc3376b8266":"filter","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-981e5fc95664":"[--filter-menu-height:min(480px,var(--radix-dropdown-menu-content-available-height))]","mui-9af9a4182597":"group-data-[disabled=true]:pointer-events-none","mui-ad936fcbed63":"group","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-47cbd20a4dc0":"group-data-[focused=true]/day:ring-[3px]","mui-4eb7d653ae35":"group-data-[focused=true]/day:ring-ring/50","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-4fa4c190281c":"first:border-t-0","mui-37ad15a95595":"hover:bg-accent","mui-bb6a4b3e902d":"hover:bg-destructive/90","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-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-2e357972fc10":"focus-visible:outline-none","mui-50aafa8694bb":"focus-visible:ring-inset","mui-8d3c1014b967":"disabled:pointer-events-none","mui-db567af109b7":"disabled:cursor-not-allowed","mui-4600b77303d6":"disabled:opacity-50","mui-7eb7501a2ef0":"has-focus:border-ring","mui-d0449753ba7b":"has-focus:ring-[3px]","mui-fc19c8471f34":"has-focus:ring-ring/50","mui-e288cffc2ef4":"has-[>svg]:px-1.5","mui-3b01ee05b16d":"has-[>svg]:px-2.5","mui-9e08353b774f":"has-[>svg]:px-3","mui-2c0115d1c32a":"aria-disabled:opacity-50","mui-1fac1d7d1df3":"aria-invalid:border-destructive","mui-2d91b4cbc3cb":"aria-invalid:ring-destructive","mui-5491fd0b4dc5":"aria-invalid:ring-destructive/20","mui-7d900a71e5ba":"aria-selected:text-muted-foreground","mui-397f5ba426a0":"data-[disabled]:pointer-events-none","mui-9beb654fcb0d":"data-[disabled]:opacity-50","mui-6fa6a8ade7c4":"data-[inset]:pl-8","mui-96308b55e0d6":"data-[range-end=true]:rounded-md","mui-a55dbe6f3eec":"data-[range-end=true]:rounded-r-md","mui-714051e55e8e":"data-[range-end=true]:bg-primary","mui-c764cebcd540":"data-[range-end=true]:text-primary-foreground","mui-05ec0700cd48":"data-[range-middle=true]:rounded-none","mui-5fb598fb06f4":"data-[range-middle=true]:bg-accent","mui-0813905aa141":"data-[range-middle=true]:text-accent-foreground","mui-8020e31bff67":"data-[range-start=true]:rounded-md","mui-ab65911baf1d":"data-[range-start=true]:rounded-l-md","mui-f5460d79341c":"data-[range-start=true]:bg-primary","mui-421a7d3e6631":"data-[range-start=true]:text-primary-foreground","mui-a39af81d518c":"data-[selected-single=true]:bg-primary","mui-b6991ab170de":"data-[selected-single=true]:text-primary-foreground","mui-3cc0d07ef843":"data-[selected=true]:rounded-none","mui-89f6aab7a3f8":"data-[side=bottom]:slide-in-from-top-2","mui-3550f48d66b9":"data-[side=left]:slide-in-from-right-2","mui-7720fe004f5c":"data-[side=right]:slide-in-from-left-2","mui-66b560f839de":"data-[side=top]:slide-in-from-bottom-2","mui-20553d55d224":"data-[state=checked]:border-primary","mui-57d6d6401a2f":"data-[state=checked]:bg-primary","mui-7ca12016214f":"data-[state=checked]:text-primary-foreground","mui-37d8a3f448ff":"data-[state=closed]:animate-none!","mui-0cb4489c3645":"data-[state=closed]:animate-out","mui-bb5869ef903b":"data-[state=closed]:fade-out-0","mui-f4cf4be63707":"data-[state=closed]:zoom-out-95","mui-bae1e782f277":"data-[state=open]:animate-in","mui-4027d9c589b6":"data-[state=open]:bg-accent","mui-1952cd5b00aa":"data-[state=open]:text-accent-foreground","mui-6f73a280432e":"data-[state=open]:text-foreground","mui-790ed041a953":"data-[state=open]:opacity-100","mui-45464a92c1f6":"data-[state=open]:fade-in-0","mui-9ca352480f25":"data-[state=open]:zoom-in-95","mui-f3f7a9c5e1b3":"data-[variant=destructive]:text-destructive","mui-e2bb4ac97190":"data-[variant=destructive]:focus:bg-destructive/10","mui-353a727facfd":"data-[variant=destructive]:focus:text-destructive","mui-5e49f8678d00":"motion-safe:animate-in","mui-b225f0361d28":"motion-safe:duration-200","mui-3bc474178684":"motion-safe:fade-in-0","mui-bc94a66158a3":"motion-safe:fill-mode-backwards","mui-237747164b60":"motion-reduce:animate-none","mui-8c14b4d2e932":"sm:w-[350px]","mui-56760b222da0":"md:flex-row","mui-c05c9b99939d":"md:text-sm","mui-36b12e8339c7":"rtl:rotate-180","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-548a450e8e53":"[&_*]:transition-none!","mui-a1c8c43d9be2":"[&_[role^=menuitem]]:min-h-9","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-eb740dd32318":"[&>svg]:size-3.5","mui-019fd73c95db":"[&>svg]:text-muted-foreground","mui-b8293c91796c":"[[data-slot=card-content]_&]:bg-transparent","mui-8dd7e6b42262":"[[data-slot=popover-content]_&]:bg-transparent"};
@@ -0,0 +1,31 @@
1
+ import type { ComponentProps, ComponentType, ReactNode } from "react";
2
+ import { Button as DefaultButton } from "./primitives/button.js";
3
+ import { Input as DefaultInput } from "./primitives/input.js";
4
+ import { Textarea as DefaultTextarea } from "./primitives/textarea.js";
5
+ import { Label as DefaultLabel } from "./primitives/label.js";
6
+ import { Calendar as DefaultCalendar } from "./primitives/calendar.js";
7
+ export interface MendyUIComponents {
8
+ Button: ComponentType<ComponentProps<typeof DefaultButton>>;
9
+ Input: ComponentType<ComponentProps<typeof DefaultInput>>;
10
+ Textarea: ComponentType<ComponentProps<typeof DefaultTextarea>>;
11
+ Label: ComponentType<ComponentProps<typeof DefaultLabel>>;
12
+ Calendar: ComponentType<ComponentProps<typeof DefaultCalendar>>;
13
+ }
14
+ export type FilterPart = "root" | "search" | "searchInput" | "menuTrigger" | "menu" | "menuList" | "menuRow" | "menuHeader" | "editor" | "chip" | "chipTrigger" | "chipRemove" | "option" | "clear";
15
+ export type FilterClassNames = Partial<Record<FilterPart, string>>;
16
+ export interface MendyUIOptions {
17
+ components?: Partial<MendyUIComponents>;
18
+ classNames?: FilterClassNames;
19
+ /** Mount dropdowns inside a local theme or dialog instead of document.body. */
20
+ portalContainer?: HTMLElement | null;
21
+ }
22
+ /** Nested providers inherit defaults; local settings override matching keys. */
23
+ export declare function MendyUIProvider({ children, components, classNames, portalContainer, }: MendyUIOptions & {
24
+ children: ReactNode;
25
+ }): import("react/jsx-runtime").JSX.Element;
26
+ export declare function useMendyUI(): MendyUIOptions;
27
+ export declare function Button(props: ComponentProps<typeof DefaultButton>): import("react/jsx-runtime").JSX.Element;
28
+ export declare function Input(props: ComponentProps<typeof DefaultInput>): import("react/jsx-runtime").JSX.Element;
29
+ export declare function Textarea(props: ComponentProps<typeof DefaultTextarea>): import("react/jsx-runtime").JSX.Element;
30
+ export declare function Label(props: ComponentProps<typeof DefaultLabel>): import("react/jsx-runtime").JSX.Element;
31
+ export declare function Calendar(props: ComponentProps<typeof DefaultCalendar>): import("react/jsx-runtime").JSX.Element;
@@ -0,0 +1,42 @@
1
+ "use client";
2
+ import { jsx as _jsx } from "react/jsx-runtime";
3
+ import { createContext, useContext, useMemo } from "react";
4
+ import { Button as DefaultButton } from "./primitives/button.js";
5
+ import { Input as DefaultInput } from "./primitives/input.js";
6
+ import { Textarea as DefaultTextarea } from "./primitives/textarea.js";
7
+ import { Label as DefaultLabel } from "./primitives/label.js";
8
+ import { Calendar as DefaultCalendar } from "./primitives/calendar.js";
9
+ const Context = createContext({});
10
+ /** Nested providers inherit defaults; local settings override matching keys. */
11
+ export function MendyUIProvider({ children, components, classNames, portalContainer, }) {
12
+ const parent = useContext(Context);
13
+ const value = useMemo(() => ({
14
+ components: { ...parent.components, ...components },
15
+ classNames: { ...parent.classNames, ...classNames },
16
+ portalContainer: portalContainer === undefined ? parent.portalContainer : portalContainer,
17
+ }), [parent, components, classNames, portalContainer]);
18
+ return _jsx(Context.Provider, { value: value, children: children });
19
+ }
20
+ export function useMendyUI() {
21
+ return useContext(Context);
22
+ }
23
+ export function Button(props) {
24
+ const Control = useMendyUI().components?.Button ?? DefaultButton;
25
+ return _jsx(Control, { "data-mendy-ui": "", ...props });
26
+ }
27
+ export function Input(props) {
28
+ const Control = useMendyUI().components?.Input ?? DefaultInput;
29
+ return _jsx(Control, { "data-mendy-ui": "", ...props });
30
+ }
31
+ export function Textarea(props) {
32
+ const Control = useMendyUI().components?.Textarea ?? DefaultTextarea;
33
+ return _jsx(Control, { "data-mendy-ui": "", ...props });
34
+ }
35
+ export function Label(props) {
36
+ const Control = useMendyUI().components?.Label ?? DefaultLabel;
37
+ return _jsx(Control, { "data-mendy-ui": "", ...props });
38
+ }
39
+ export function Calendar(props) {
40
+ const Control = useMendyUI().components?.Calendar ?? DefaultCalendar;
41
+ return _jsx(Control, { ...props });
42
+ }
@@ -0,0 +1,3 @@
1
+ export * from "./filter-definition.js";
2
+ export * from "./filter-state.js";
3
+ export * from "./filter-utils.js";
@@ -0,0 +1,3 @@
1
+ export * from "./filter-definition.js";
2
+ export * from "./filter-state.js";
3
+ export * from "./filter-utils.js";
@@ -0,0 +1,49 @@
1
+ import type { ReactNode } from "react";
2
+ import type { SummaryPolicy } from "./filter-definition.js";
3
+ import type { FilterController } from "./use-filters.js";
4
+ import type { FilterClassNames } from "../customization.js";
5
+ export interface FilterMenuGroup {
6
+ id: string;
7
+ label: string;
8
+ fields: string[];
9
+ icon?: ReactNode;
10
+ }
11
+ export interface FilterRootProps {
12
+ classNames?: FilterClassNames;
13
+ filters: FilterController;
14
+ summary?: SummaryPolicy;
15
+ /** Keep the filter menu open for applying more filters by default. */
16
+ closeMenuOnApply?: boolean;
17
+ suggestions?: "when-empty" | "always" | "never";
18
+ groups?: FilterMenuGroup[];
19
+ disabled?: boolean;
20
+ className?: string;
21
+ children: ReactNode;
22
+ }
23
+ export declare function FilterRoot({ classNames, ...props }: FilterRootProps): import("react/jsx-runtime").JSX.Element;
24
+ export declare function FilterBar(props: Omit<FilterRootProps, "children"> & {
25
+ searchLabel?: string;
26
+ searchPlaceholder?: string;
27
+ }): import("react/jsx-runtime").JSX.Element;
28
+ export declare function FilterSearch({ label, placeholder, }: {
29
+ label?: string;
30
+ placeholder?: string;
31
+ }): import("react/jsx-runtime").JSX.Element;
32
+ /** A standalone menu button for layouts without a search field. */
33
+ export declare function FilterMenu({ children, asChild, }: {
34
+ children?: ReactNode;
35
+ asChild?: boolean;
36
+ }): import("react/jsx-runtime").JSX.Element;
37
+ export declare function FilterList(): import("react/jsx-runtime").JSX.Element;
38
+ export declare function FilterField({ id }: {
39
+ id: string;
40
+ }): import("react/jsx-runtime").JSX.Element | null;
41
+ /** Place a built-in or custom field editor in an application-defined layout. */
42
+ export declare function FilterFieldEditor({ id, autoFocus }: {
43
+ id: string;
44
+ autoFocus?: boolean;
45
+ }): import("react/jsx-runtime").JSX.Element | null;
46
+ export declare function FilterClear({ children }: {
47
+ children?: ReactNode;
48
+ }): import("react/jsx-runtime").JSX.Element | null;
49
+ export declare function FilterFeedback(): import("react/jsx-runtime").JSX.Element;