@mendylanda/ui 0.3.2-dev.56.581b055ea0a9 → 0.3.2-dev.58.0ef9785a4046

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 -39
  37. package/dist/styles.tailwind3.css +39 -39
  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/dist/styles.css CHANGED
@@ -67,6 +67,9 @@
67
67
  .mui-cced28c6dc3f:where([data-mendy-ui], [data-mendy-ui] *) {
68
68
  inset-inline-start: var(--spacing);
69
69
  }
70
+ .mui-8368bbb62f66:where([data-mendy-ui], [data-mendy-ui] *) {
71
+ inset-inline-start: calc(var(--spacing) * 0);
72
+ }
70
73
  .mui-207bd0b3f259:where([data-mendy-ui], [data-mendy-ui] *) {
71
74
  inset-inline-start: calc(var(--spacing) * 2);
72
75
  }
@@ -76,6 +79,9 @@
76
79
  .mui-361e48d0308f:where([data-mendy-ui], [data-mendy-ui] *) {
77
80
  inset-inline-end: var(--spacing);
78
81
  }
82
+ .mui-aa7bcba08429:where([data-mendy-ui], [data-mendy-ui] *) {
83
+ inset-inline-end: calc(var(--spacing) * 0);
84
+ }
79
85
  .mui-13422ddc8d83:where([data-mendy-ui], [data-mendy-ui] *) {
80
86
  inset-inline-end: calc(var(--spacing) * 1);
81
87
  }
@@ -88,18 +94,12 @@
88
94
  .mui-4e45f4841abb:where([data-mendy-ui], [data-mendy-ui] *) {
89
95
  top: calc(1 / 2 * 100%);
90
96
  }
91
- .mui-a74c4477017c:where([data-mendy-ui], [data-mendy-ui] *) {
92
- right: calc(var(--spacing) * 0);
93
- }
94
97
  .mui-30150dd033ab:where([data-mendy-ui], [data-mendy-ui] *) {
95
98
  bottom: calc(var(--spacing) * 0);
96
99
  }
97
100
  .mui-a5c36273c0f0:where([data-mendy-ui], [data-mendy-ui] *) {
98
101
  bottom: calc(var(--spacing) * 2);
99
102
  }
100
- .mui-635702706586:where([data-mendy-ui], [data-mendy-ui] *) {
101
- left: calc(var(--spacing) * 0);
102
- }
103
103
  .mui-014aadadffad:where([data-mendy-ui], [data-mendy-ui] *) {
104
104
  isolation: isolate;
105
105
  }
@@ -154,6 +154,9 @@
154
154
  .mui-291952c2525a:where([data-mendy-ui], [data-mendy-ui] *) {
155
155
  margin-inline-start: -1px;
156
156
  }
157
+ .mui-5cf4ab3b6fa0:where([data-mendy-ui], [data-mendy-ui] *) {
158
+ margin-inline-start: auto;
159
+ }
157
160
  .mui-8cc46fa87f41:where([data-mendy-ui], [data-mendy-ui] *) {
158
161
  margin-inline-end: calc(var(--spacing) * -1.5);
159
162
  }
@@ -166,9 +169,6 @@
166
169
  .mui-f28fea81a5cd:where([data-mendy-ui], [data-mendy-ui] *) {
167
170
  margin-top: calc(var(--spacing) * 2);
168
171
  }
169
- .mui-cc51bda60e7e:where([data-mendy-ui], [data-mendy-ui] *) {
170
- margin-left: auto;
171
- }
172
172
  .mui-496aca80e4d8:where([data-mendy-ui], [data-mendy-ui] *) {
173
173
  display: block;
174
174
  }
@@ -537,17 +537,17 @@
537
537
  .mui-02e603944040:where([data-mendy-ui], [data-mendy-ui] *) {
538
538
  border-radius: max(0px, calc(var(--radius, 0.5rem) - 4px));
539
539
  }
540
+ .mui-7efd3a0ebfc6:where([data-mendy-ui], [data-mendy-ui] *) {
541
+ border-start-start-radius: max(0px, calc(var(--radius, 0.5rem) - 2px));
542
+ border-end-start-radius: max(0px, calc(var(--radius, 0.5rem) - 2px));
543
+ }
540
544
  .mui-b31810dbd8a9:where([data-mendy-ui], [data-mendy-ui] *) {
541
545
  border-start-start-radius: 0;
542
546
  border-end-start-radius: 0;
543
547
  }
544
- .mui-10c0bae8cba9:where([data-mendy-ui], [data-mendy-ui] *) {
545
- border-top-left-radius: max(0px, calc(var(--radius, 0.5rem) - 2px));
546
- border-bottom-left-radius: max(0px, calc(var(--radius, 0.5rem) - 2px));
547
- }
548
- .mui-34bbd346e74c:where([data-mendy-ui], [data-mendy-ui] *) {
549
- border-top-right-radius: max(0px, calc(var(--radius, 0.5rem) - 2px));
550
- border-bottom-right-radius: max(0px, calc(var(--radius, 0.5rem) - 2px));
548
+ .mui-7f3780751c2e:where([data-mendy-ui], [data-mendy-ui] *) {
549
+ border-start-end-radius: max(0px, calc(var(--radius, 0.5rem) - 2px));
550
+ border-end-end-radius: max(0px, calc(var(--radius, 0.5rem) - 2px));
551
551
  }
552
552
  .mui-4f1a55de40bc:where([data-mendy-ui], [data-mendy-ui] *) {
553
553
  border-style: var(--mendy-tw-border-style);
@@ -691,12 +691,18 @@
691
691
  .mui-96b92a971c95:where([data-mendy-ui], [data-mendy-ui] *) {
692
692
  padding-block: calc(var(--spacing) * 5);
693
693
  }
694
+ .mui-6dd4e62564b2:where([data-mendy-ui], [data-mendy-ui] *) {
695
+ padding-inline-start: calc(var(--spacing) * 2);
696
+ }
694
697
  .mui-078d945937da:where([data-mendy-ui], [data-mendy-ui] *) {
695
698
  padding-inline-start: calc(var(--spacing) * 8);
696
699
  }
697
700
  .mui-b2100041c585:where([data-mendy-ui], [data-mendy-ui] *) {
698
701
  padding-inline-start: calc(var(--spacing) * 9);
699
702
  }
703
+ .mui-b15eee699c4b:where([data-mendy-ui], [data-mendy-ui] *) {
704
+ padding-inline-end: calc(var(--spacing) * 1);
705
+ }
700
706
  .mui-05d4103bd67f:where([data-mendy-ui], [data-mendy-ui] *) {
701
707
  padding-inline-end: calc(var(--spacing) * 2);
702
708
  }
@@ -712,12 +718,6 @@
712
718
  .mui-0a702d97ed7d:where([data-mendy-ui], [data-mendy-ui] *) {
713
719
  padding-top: calc(var(--spacing) * 3);
714
720
  }
715
- .mui-1a52da5bc88c:where([data-mendy-ui], [data-mendy-ui] *) {
716
- padding-right: calc(var(--spacing) * 1);
717
- }
718
- .mui-f5d8e661d857:where([data-mendy-ui], [data-mendy-ui] *) {
719
- padding-left: calc(var(--spacing) * 2);
720
- }
721
721
  .mui-05ab12448317:where([data-mendy-ui], [data-mendy-ui] *) {
722
722
  text-align: center;
723
723
  }
@@ -1320,9 +1320,9 @@
1320
1320
  background-color: var(--accent, #f5f5f5);
1321
1321
  }
1322
1322
  }
1323
- .mui-6fa6a8ade7c4:where([data-mendy-ui], [data-mendy-ui] *) {
1323
+ .mui-1da7bb9a299c:where([data-mendy-ui], [data-mendy-ui] *) {
1324
1324
  &[data-inset] {
1325
- padding-left: calc(var(--spacing) * 8);
1325
+ padding-inline-start: calc(var(--spacing) * 8);
1326
1326
  }
1327
1327
  }
1328
1328
  .mui-bbaaa5969856:where([data-mendy-ui], [data-mendy-ui] *) {
@@ -1343,10 +1343,10 @@
1343
1343
  border-radius: max(0px, calc(var(--radius, 0.5rem) - 2px));
1344
1344
  }
1345
1345
  }
1346
- .mui-a55dbe6f3eec:where([data-mendy-ui], [data-mendy-ui] *) {
1346
+ .mui-35468f495139:where([data-mendy-ui], [data-mendy-ui] *) {
1347
1347
  &[data-range-end="true"] {
1348
- border-top-right-radius: max(0px, calc(var(--radius, 0.5rem) - 2px));
1349
- border-bottom-right-radius: max(0px, calc(var(--radius, 0.5rem) - 2px));
1348
+ border-start-end-radius: max(0px, calc(var(--radius, 0.5rem) - 2px));
1349
+ border-end-end-radius: max(0px, calc(var(--radius, 0.5rem) - 2px));
1350
1350
  }
1351
1351
  }
1352
1352
  .mui-714051e55e8e:where([data-mendy-ui], [data-mendy-ui] *) {
@@ -1379,10 +1379,10 @@
1379
1379
  border-radius: max(0px, calc(var(--radius, 0.5rem) - 2px));
1380
1380
  }
1381
1381
  }
1382
- .mui-ab65911baf1d:where([data-mendy-ui], [data-mendy-ui] *) {
1382
+ .mui-6143f152715b:where([data-mendy-ui], [data-mendy-ui] *) {
1383
1383
  &[data-range-start="true"] {
1384
- border-top-left-radius: max(0px, calc(var(--radius, 0.5rem) - 2px));
1385
- border-bottom-left-radius: max(0px, calc(var(--radius, 0.5rem) - 2px));
1384
+ border-start-start-radius: max(0px, calc(var(--radius, 0.5rem) - 2px));
1385
+ border-end-start-radius: max(0px, calc(var(--radius, 0.5rem) - 2px));
1386
1386
  }
1387
1387
  }
1388
1388
  .mui-f5460d79341c:where([data-mendy-ui], [data-mendy-ui] *) {
@@ -1740,10 +1740,10 @@
1740
1740
  appearance: none;
1741
1741
  }
1742
1742
  }
1743
- .mui-74ab31abd804:where([data-mendy-ui], [data-mendy-ui] *) {
1743
+ .mui-9b9b154fb4bf:where([data-mendy-ui], [data-mendy-ui] *) {
1744
1744
  &:first-child[data-selected=true] button {
1745
- border-top-left-radius: max(0px, calc(var(--radius, 0.5rem) - 2px));
1746
- border-bottom-left-radius: max(0px, calc(var(--radius, 0.5rem) - 2px));
1745
+ border-start-start-radius: max(0px, calc(var(--radius, 0.5rem) - 2px));
1746
+ border-end-start-radius: max(0px, calc(var(--radius, 0.5rem) - 2px));
1747
1747
  }
1748
1748
  }
1749
1749
  .mui-13858191ca50:where([data-mendy-ui], [data-mendy-ui] *) {
@@ -1773,16 +1773,16 @@
1773
1773
  }
1774
1774
  }
1775
1775
  }
1776
- .mui-6ee0c74de40c:where([data-mendy-ui], [data-mendy-ui] *) {
1776
+ .mui-e9494a526550:where([data-mendy-ui], [data-mendy-ui] *) {
1777
1777
  &:last-child[data-selected=true] button {
1778
- border-top-right-radius: max(0px, calc(var(--radius, 0.5rem) - 2px));
1779
- border-bottom-right-radius: max(0px, calc(var(--radius, 0.5rem) - 2px));
1778
+ border-start-end-radius: max(0px, calc(var(--radius, 0.5rem) - 2px));
1779
+ border-end-end-radius: max(0px, calc(var(--radius, 0.5rem) - 2px));
1780
1780
  }
1781
1781
  }
1782
- .mui-6162ab70efb5:where([data-mendy-ui], [data-mendy-ui] *) {
1782
+ .mui-167d036894df:where([data-mendy-ui], [data-mendy-ui] *) {
1783
1783
  &:nth-child(2)[data-selected=true] button {
1784
- border-top-left-radius: max(0px, calc(var(--radius, 0.5rem) - 2px));
1785
- border-bottom-left-radius: max(0px, calc(var(--radius, 0.5rem) - 2px));
1784
+ border-start-start-radius: max(0px, calc(var(--radius, 0.5rem) - 2px));
1785
+ border-end-start-radius: max(0px, calc(var(--radius, 0.5rem) - 2px));
1786
1786
  }
1787
1787
  }
1788
1788
  .mui-f157ee6bae99:where([data-mendy-ui], [data-mendy-ui] *) {
@@ -66,6 +66,9 @@
66
66
  .mui-cced28c6dc3f:where([data-mendy-ui], [data-mendy-ui] *) {
67
67
  inset-inline-start: var(--spacing);
68
68
  }
69
+ .mui-8368bbb62f66:where([data-mendy-ui], [data-mendy-ui] *) {
70
+ inset-inline-start: calc(var(--spacing) * 0);
71
+ }
69
72
  .mui-207bd0b3f259:where([data-mendy-ui], [data-mendy-ui] *) {
70
73
  inset-inline-start: calc(var(--spacing) * 2);
71
74
  }
@@ -75,6 +78,9 @@
75
78
  .mui-361e48d0308f:where([data-mendy-ui], [data-mendy-ui] *) {
76
79
  inset-inline-end: var(--spacing);
77
80
  }
81
+ .mui-aa7bcba08429:where([data-mendy-ui], [data-mendy-ui] *) {
82
+ inset-inline-end: calc(var(--spacing) * 0);
83
+ }
78
84
  .mui-13422ddc8d83:where([data-mendy-ui], [data-mendy-ui] *) {
79
85
  inset-inline-end: calc(var(--spacing) * 1);
80
86
  }
@@ -87,18 +93,12 @@
87
93
  .mui-4e45f4841abb:where([data-mendy-ui], [data-mendy-ui] *) {
88
94
  top: calc(1 / 2 * 100%);
89
95
  }
90
- .mui-a74c4477017c:where([data-mendy-ui], [data-mendy-ui] *) {
91
- right: calc(var(--spacing) * 0);
92
- }
93
96
  .mui-30150dd033ab:where([data-mendy-ui], [data-mendy-ui] *) {
94
97
  bottom: calc(var(--spacing) * 0);
95
98
  }
96
99
  .mui-a5c36273c0f0:where([data-mendy-ui], [data-mendy-ui] *) {
97
100
  bottom: calc(var(--spacing) * 2);
98
101
  }
99
- .mui-635702706586:where([data-mendy-ui], [data-mendy-ui] *) {
100
- left: calc(var(--spacing) * 0);
101
- }
102
102
  .mui-014aadadffad:where([data-mendy-ui], [data-mendy-ui] *) {
103
103
  isolation: isolate;
104
104
  }
@@ -153,6 +153,9 @@
153
153
  .mui-291952c2525a:where([data-mendy-ui], [data-mendy-ui] *) {
154
154
  margin-inline-start: -1px;
155
155
  }
156
+ .mui-5cf4ab3b6fa0:where([data-mendy-ui], [data-mendy-ui] *) {
157
+ margin-inline-start: auto;
158
+ }
156
159
  .mui-8cc46fa87f41:where([data-mendy-ui], [data-mendy-ui] *) {
157
160
  margin-inline-end: calc(var(--spacing) * -1.5);
158
161
  }
@@ -165,9 +168,6 @@
165
168
  .mui-f28fea81a5cd:where([data-mendy-ui], [data-mendy-ui] *) {
166
169
  margin-top: calc(var(--spacing) * 2);
167
170
  }
168
- .mui-cc51bda60e7e:where([data-mendy-ui], [data-mendy-ui] *) {
169
- margin-left: auto;
170
- }
171
171
  .mui-496aca80e4d8:where([data-mendy-ui], [data-mendy-ui] *) {
172
172
  display: block;
173
173
  }
@@ -536,17 +536,17 @@
536
536
  .mui-02e603944040:where([data-mendy-ui], [data-mendy-ui] *) {
537
537
  border-radius: max(0px, calc(var(--radius, 0.5rem) - 4px));
538
538
  }
539
+ .mui-7efd3a0ebfc6:where([data-mendy-ui], [data-mendy-ui] *) {
540
+ border-start-start-radius: max(0px, calc(var(--radius, 0.5rem) - 2px));
541
+ border-end-start-radius: max(0px, calc(var(--radius, 0.5rem) - 2px));
542
+ }
539
543
  .mui-b31810dbd8a9:where([data-mendy-ui], [data-mendy-ui] *) {
540
544
  border-start-start-radius: 0;
541
545
  border-end-start-radius: 0;
542
546
  }
543
- .mui-10c0bae8cba9:where([data-mendy-ui], [data-mendy-ui] *) {
544
- border-top-left-radius: max(0px, calc(var(--radius, 0.5rem) - 2px));
545
- border-bottom-left-radius: max(0px, calc(var(--radius, 0.5rem) - 2px));
546
- }
547
- .mui-34bbd346e74c:where([data-mendy-ui], [data-mendy-ui] *) {
548
- border-top-right-radius: max(0px, calc(var(--radius, 0.5rem) - 2px));
549
- border-bottom-right-radius: max(0px, calc(var(--radius, 0.5rem) - 2px));
547
+ .mui-7f3780751c2e:where([data-mendy-ui], [data-mendy-ui] *) {
548
+ border-start-end-radius: max(0px, calc(var(--radius, 0.5rem) - 2px));
549
+ border-end-end-radius: max(0px, calc(var(--radius, 0.5rem) - 2px));
550
550
  }
551
551
  .mui-4f1a55de40bc:where([data-mendy-ui], [data-mendy-ui] *) {
552
552
  border-style: var(--mendy-tw-border-style);
@@ -690,12 +690,18 @@
690
690
  .mui-96b92a971c95:where([data-mendy-ui], [data-mendy-ui] *) {
691
691
  padding-block: calc(var(--spacing) * 5);
692
692
  }
693
+ .mui-6dd4e62564b2:where([data-mendy-ui], [data-mendy-ui] *) {
694
+ padding-inline-start: calc(var(--spacing) * 2);
695
+ }
693
696
  .mui-078d945937da:where([data-mendy-ui], [data-mendy-ui] *) {
694
697
  padding-inline-start: calc(var(--spacing) * 8);
695
698
  }
696
699
  .mui-b2100041c585:where([data-mendy-ui], [data-mendy-ui] *) {
697
700
  padding-inline-start: calc(var(--spacing) * 9);
698
701
  }
702
+ .mui-b15eee699c4b:where([data-mendy-ui], [data-mendy-ui] *) {
703
+ padding-inline-end: calc(var(--spacing) * 1);
704
+ }
699
705
  .mui-05d4103bd67f:where([data-mendy-ui], [data-mendy-ui] *) {
700
706
  padding-inline-end: calc(var(--spacing) * 2);
701
707
  }
@@ -711,12 +717,6 @@
711
717
  .mui-0a702d97ed7d:where([data-mendy-ui], [data-mendy-ui] *) {
712
718
  padding-top: calc(var(--spacing) * 3);
713
719
  }
714
- .mui-1a52da5bc88c:where([data-mendy-ui], [data-mendy-ui] *) {
715
- padding-right: calc(var(--spacing) * 1);
716
- }
717
- .mui-f5d8e661d857:where([data-mendy-ui], [data-mendy-ui] *) {
718
- padding-left: calc(var(--spacing) * 2);
719
- }
720
720
  .mui-05ab12448317:where([data-mendy-ui], [data-mendy-ui] *) {
721
721
  text-align: center;
722
722
  }
@@ -1319,9 +1319,9 @@
1319
1319
  background-color: var(--accent, #f5f5f5);
1320
1320
  }
1321
1321
  }
1322
- .mui-6fa6a8ade7c4:where([data-mendy-ui], [data-mendy-ui] *) {
1322
+ .mui-1da7bb9a299c:where([data-mendy-ui], [data-mendy-ui] *) {
1323
1323
  &[data-inset] {
1324
- padding-left: calc(var(--spacing) * 8);
1324
+ padding-inline-start: calc(var(--spacing) * 8);
1325
1325
  }
1326
1326
  }
1327
1327
  .mui-bbaaa5969856:where([data-mendy-ui], [data-mendy-ui] *) {
@@ -1342,10 +1342,10 @@
1342
1342
  border-radius: max(0px, calc(var(--radius, 0.5rem) - 2px));
1343
1343
  }
1344
1344
  }
1345
- .mui-a55dbe6f3eec:where([data-mendy-ui], [data-mendy-ui] *) {
1345
+ .mui-35468f495139:where([data-mendy-ui], [data-mendy-ui] *) {
1346
1346
  &[data-range-end="true"] {
1347
- border-top-right-radius: max(0px, calc(var(--radius, 0.5rem) - 2px));
1348
- border-bottom-right-radius: max(0px, calc(var(--radius, 0.5rem) - 2px));
1347
+ border-start-end-radius: max(0px, calc(var(--radius, 0.5rem) - 2px));
1348
+ border-end-end-radius: max(0px, calc(var(--radius, 0.5rem) - 2px));
1349
1349
  }
1350
1350
  }
1351
1351
  .mui-714051e55e8e:where([data-mendy-ui], [data-mendy-ui] *) {
@@ -1378,10 +1378,10 @@
1378
1378
  border-radius: max(0px, calc(var(--radius, 0.5rem) - 2px));
1379
1379
  }
1380
1380
  }
1381
- .mui-ab65911baf1d:where([data-mendy-ui], [data-mendy-ui] *) {
1381
+ .mui-6143f152715b:where([data-mendy-ui], [data-mendy-ui] *) {
1382
1382
  &[data-range-start="true"] {
1383
- border-top-left-radius: max(0px, calc(var(--radius, 0.5rem) - 2px));
1384
- border-bottom-left-radius: max(0px, calc(var(--radius, 0.5rem) - 2px));
1383
+ border-start-start-radius: max(0px, calc(var(--radius, 0.5rem) - 2px));
1384
+ border-end-start-radius: max(0px, calc(var(--radius, 0.5rem) - 2px));
1385
1385
  }
1386
1386
  }
1387
1387
  .mui-f5460d79341c:where([data-mendy-ui], [data-mendy-ui] *) {
@@ -1739,10 +1739,10 @@
1739
1739
  appearance: none;
1740
1740
  }
1741
1741
  }
1742
- .mui-74ab31abd804:where([data-mendy-ui], [data-mendy-ui] *) {
1742
+ .mui-9b9b154fb4bf:where([data-mendy-ui], [data-mendy-ui] *) {
1743
1743
  &:first-child[data-selected=true] button {
1744
- border-top-left-radius: max(0px, calc(var(--radius, 0.5rem) - 2px));
1745
- border-bottom-left-radius: max(0px, calc(var(--radius, 0.5rem) - 2px));
1744
+ border-start-start-radius: max(0px, calc(var(--radius, 0.5rem) - 2px));
1745
+ border-end-start-radius: max(0px, calc(var(--radius, 0.5rem) - 2px));
1746
1746
  }
1747
1747
  }
1748
1748
  .mui-13858191ca50:where([data-mendy-ui], [data-mendy-ui] *) {
@@ -1772,16 +1772,16 @@
1772
1772
  }
1773
1773
  }
1774
1774
  }
1775
- .mui-6ee0c74de40c:where([data-mendy-ui], [data-mendy-ui] *) {
1775
+ .mui-e9494a526550:where([data-mendy-ui], [data-mendy-ui] *) {
1776
1776
  &:last-child[data-selected=true] button {
1777
- border-top-right-radius: max(0px, calc(var(--radius, 0.5rem) - 2px));
1778
- border-bottom-right-radius: max(0px, calc(var(--radius, 0.5rem) - 2px));
1777
+ border-start-end-radius: max(0px, calc(var(--radius, 0.5rem) - 2px));
1778
+ border-end-end-radius: max(0px, calc(var(--radius, 0.5rem) - 2px));
1779
1779
  }
1780
1780
  }
1781
- .mui-6162ab70efb5:where([data-mendy-ui], [data-mendy-ui] *) {
1781
+ .mui-167d036894df:where([data-mendy-ui], [data-mendy-ui] *) {
1782
1782
  &:nth-child(2)[data-selected=true] button {
1783
- border-top-left-radius: max(0px, calc(var(--radius, 0.5rem) - 2px));
1784
- border-bottom-left-radius: max(0px, calc(var(--radius, 0.5rem) - 2px));
1783
+ border-start-start-radius: max(0px, calc(var(--radius, 0.5rem) - 2px));
1784
+ border-end-start-radius: max(0px, calc(var(--radius, 0.5rem) - 2px));
1785
1785
  }
1786
1786
  }
1787
1787
  .mui-f157ee6bae99:where([data-mendy-ui], [data-mendy-ui] *) {
@@ -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 { useId } from "react";
4
5
  import { DragDropContext, Draggable, Droppable } from "@hello-pangea/dnd";
5
6
  import { GripVertical, Pin, RotateCcw, SlidersHorizontal } from "lucide-react";
@@ -11,6 +12,7 @@ import { cn } from "../utils.js";
11
12
  import { applyTablePreferences } from "./use-data-table.js";
12
13
  export function TableColumnSettings({ table, children, }) {
13
14
  const id = useId();
15
+ const { t, direction } = useMendyLocale();
14
16
  const { portalContainer } = useMendyUI();
15
17
  const columns = table.getAllLeafColumns();
16
18
  const byId = new Map(columns.map((column) => [column.id, column]));
@@ -22,9 +24,9 @@ export function TableColumnSettings({ table, children, }) {
22
24
  const start = columns.filter((column) => column.getIsPinned() === "start").length;
23
25
  const end = columns.filter((column) => column.getIsPinned() === "end").length;
24
26
  const summary = [
25
- hidden && `${hidden} hidden`,
26
- start && `${start} pinned left`,
27
- end && `${end} pinned right`,
27
+ hidden && t("hiddenColumns", { count: hidden }),
28
+ start && t(direction === "rtl" ? "pinnedRight" : "pinnedLeft", { count: start }),
29
+ end && t(direction === "rtl" ? "pinnedLeft" : "pinnedRight", { count: end }),
28
30
  ]
29
31
  .filter(Boolean)
30
32
  .join(", ");
@@ -36,20 +38,32 @@ export function TableColumnSettings({ table, children, }) {
36
38
  next.splice(result.destination.index, 0, moved);
37
39
  table.setColumnOrder(next);
38
40
  }
39
- return (_jsxs(Popover, { children: [_jsx(PopoverTrigger, { asChild: true, children: _jsx(Button, { variant: "outline", size: "icon-sm", "aria-label": "Column settings", title: "Column settings", children: _jsx(SlidersHorizontal, { className: "mui-100c22d5776b" }) }) }), _jsxs(PopoverContent, { align: "end", "aria-label": "Column settings", className: "mui-222f930b8752 mui-a4cce7869436 mui-302c0d124a94 mui-04760bcd507f", onCloseAutoFocus: (event) => {
41
+ return (_jsxs(Popover, { children: [_jsx(PopoverTrigger, { asChild: true, children: _jsx(Button, { variant: "outline", size: "icon-sm", "aria-label": t("columnSettings"), title: t("columnSettings"), children: _jsx(SlidersHorizontal, { className: "mui-100c22d5776b" }) }) }), _jsxs(PopoverContent, { align: "end", "aria-label": t("columnSettings"), className: "mui-222f930b8752 mui-a4cce7869436 mui-302c0d124a94 mui-04760bcd507f", onCloseAutoFocus: (event) => {
40
42
  if (document.activeElement?.closest('[role="grid"]'))
41
43
  event.preventDefault();
42
- }, children: [_jsxs("div", { className: "mui-27ead27a81df mui-bbe39cfb5cc6 mui-9513b3968002 mui-d3cea061f2f3", children: [_jsx("h4", { className: "mui-c74ab393b96d mui-daaac3fbf55e", children: "Column settings" }), _jsx("p", { className: "mui-3992de70b033 mui-35f35c41d134", children: "Drag to reorder, toggle visibility, and pin columns." })] }), children, _jsx(DragDropContext, { onDragEnd: reorder, children: _jsx(Droppable, { droppableId: id, getContainerForClone: () => portalContainer ?? document.body, renderClone: (provided, snapshot, rubric) => (_jsx(ColumnSettingsRow, { column: ordered[rubric.source.index], provided: provided, dragging: snapshot.isDragging })), children: (provided) => (_jsxs("div", { ref: provided.innerRef, ...provided.droppableProps, className: "mui-410da8dfa8ac mui-da0beef015c9 mui-2368e909f3a5 mui-b97db4a9f432", children: [ordered.map((column, index) => (_jsx(Draggable, { draggableId: `${id}-${column.id}`, disableInteractiveElementBlocking: true, index: index, children: (provided, snapshot) => (_jsx(ColumnSettingsRow, { column: column, provided: provided, dragging: snapshot.isDragging })) }, column.id))), provided.placeholder] })) }) }), _jsxs("div", { className: "mui-222f930b8752 mui-27ead27a81df mui-71556df3b421 mui-32c92bb1fde4 mui-074569488cca mui-894c3815a57f mui-9513b3968002 mui-b5edc3ea7c91", children: [_jsx("p", { className: "mui-3992de70b033 mui-35f35c41d134", "aria-live": "polite", children: summary || "No changes" }), _jsxs(Button, { variant: "ghost", size: "sm", className: "mui-c8e50836f8a1 mui-e7e01cc7f4df mui-3992de70b033", "aria-label": "Reset columns", onClick: () => applyTablePreferences(table, { version: 1, ...table.initialState }), children: [_jsx(RotateCcw, { className: "mui-5e34f5313859" }), "Reset"] })] })] })] }));
44
+ }, children: [_jsxs("div", { className: "mui-27ead27a81df mui-bbe39cfb5cc6 mui-9513b3968002 mui-d3cea061f2f3", children: [_jsx("h4", { className: "mui-c74ab393b96d mui-daaac3fbf55e", children: t("columnSettings") }), _jsx("p", { className: "mui-3992de70b033 mui-35f35c41d134", children: t("columnSettingsHint") })] }), children, _jsx(DragDropContext, { dragHandleUsageInstructions: t("dragInstructions"), onDragStart: (start, { announce }) => announce(t("dragStart", { index: start.source.index + 1 })), onDragUpdate: (update, { announce }) => announce(t("dragMove", { index: (update.destination ?? update.source).index + 1 })), onDragEnd: (result, { announce }) => {
45
+ reorder(result);
46
+ announce(result.reason === "CANCEL" || !result.destination
47
+ ? t("dragCancel")
48
+ : t("dragEnd", { index: result.destination.index + 1 }));
49
+ }, children: _jsx(Droppable, { droppableId: id, getContainerForClone: () => portalContainer ?? document.body, renderClone: (provided, snapshot, rubric) => (_jsx(ColumnSettingsRow, { column: ordered[rubric.source.index], provided: provided, dragging: snapshot.isDragging })), children: (provided) => (_jsxs("div", { ref: provided.innerRef, ...provided.droppableProps, className: "mui-410da8dfa8ac mui-da0beef015c9 mui-2368e909f3a5 mui-b97db4a9f432", children: [ordered.map((column, index) => (_jsx(Draggable, { draggableId: `${id}-${column.id}`, disableInteractiveElementBlocking: true, index: index, children: (provided, snapshot) => (_jsx(ColumnSettingsRow, { column: column, provided: provided, dragging: snapshot.isDragging })) }, column.id))), provided.placeholder] })) }) }), _jsxs("div", { className: "mui-222f930b8752 mui-27ead27a81df mui-71556df3b421 mui-32c92bb1fde4 mui-074569488cca mui-894c3815a57f mui-9513b3968002 mui-b5edc3ea7c91", children: [_jsx("p", { className: "mui-3992de70b033 mui-35f35c41d134", "aria-live": "polite", children: summary || t("noChanges") }), _jsxs(Button, { variant: "ghost", size: "sm", className: "mui-c8e50836f8a1 mui-e7e01cc7f4df mui-3992de70b033", "aria-label": t("resetColumns"), onClick: () => applyTablePreferences(table, { version: 1, ...table.initialState }), children: [_jsx(RotateCcw, { className: "mui-5e34f5313859" }), t("reset")] })] })] })] }));
43
50
  }
44
51
  function ColumnSettingsRow({ column, provided, dragging, }) {
45
52
  const definition = column.columnDef;
46
- const label = definition.label ?? (typeof definition.header === "string" ? definition.header : column.id);
53
+ const { t, direction, code } = useMendyLocale();
54
+ const label = (column.id === "_selection" && definition.label === "Select rows"
55
+ ? t("selectRows")
56
+ : definition.label) ??
57
+ (typeof definition.header === "string" ? definition.header : column.id);
47
58
  const pin = column.getIsPinned();
48
- const next = pin === "start" ? "end" : pin === "end" ? false : "start";
49
- const pinLabel = next === "start"
50
- ? `Pin ${label} to left`
51
- : next === "end"
52
- ? `Pin ${label} to right`
53
- : `Unpin ${label}`;
54
- return (_jsxs("div", { ref: provided.innerRef, ...provided.draggableProps, "data-mendy-ui": "", "data-column-setting": column.id, "data-dragging": dragging, style: provided.draggableProps.style, className: cn("mui-222f930b8752 mui-71556df3b421 mui-074569488cca mui-3fa8c572949b mui-5b272f3c5076 mui-e7e01cc7f4df mui-a8c1dfb1d4ef mui-c74ab393b96d mui-957a109f887f", dragging ? "mui-3eef1ce97dba mui-0d4ca75de41c mui-853be6c11609 mui-fd9d0b696aac" : "mui-5cbdd1b32f1a"), children: [_jsx("button", { type: "button", ...provided.dragHandleProps, "aria-label": `Reorder ${label}`, title: "Drag to reorder. Press Space to move with arrow keys.", className: "mui-222f930b8752 mui-2bd43fb57913 mui-27ead27a81df mui-f2e47d9c52ad mui-71556df3b421 mui-a503dd374cca mui-02e603944040 mui-35f35c41d134 mui-b30fc56058b6 mui-355efe22aedb mui-db549d38ff19 mui-71998ea7a2d0", children: _jsx(GripVertical, { className: "mui-61c000c8a98a" }) }), _jsxs("label", { className: "mui-222f930b8752 mui-184ddc11e5f9 mui-7bd5bab6d7f4 mui-d2fa8848968d mui-71556df3b421 mui-074569488cca", children: [_jsx(Checkbox, { checked: column.getIsVisible(), disabled: !column.getCanHide(), onCheckedChange: (value) => column.toggleVisibility(value === true), "aria-label": `Show ${label}` }), _jsx("span", { className: "mui-5a3a4ee420c2", title: label, children: label })] }), _jsx(Button, { variant: "ghost", size: "icon-sm", disabled: !column.getCanPin(), "aria-label": pinLabel, title: pinLabel, className: cn("mui-0712570dcc9f mui-27ead27a81df", pin && "mui-87ecb59f2d2d"), onClick: () => column.pin(next), children: _jsx(Pin, { className: cn("mui-61c000c8a98a", pin === "start" && "mui-4e3f08588318", pin === "end" && "mui-c80411b7591f", !pin && "mui-35f35c41d134") }) })] }));
59
+ const { next, message } = pinAction(pin, direction);
60
+ const pinLabel = t(message, { label });
61
+ return (_jsxs("div", { ref: provided.innerRef, ...provided.draggableProps, "data-mendy-ui": "", "data-column-setting": column.id, dir: direction, lang: code, "data-dragging": dragging, style: provided.draggableProps.style, className: cn("mui-222f930b8752 mui-71556df3b421 mui-074569488cca mui-3fa8c572949b mui-5b272f3c5076 mui-e7e01cc7f4df mui-a8c1dfb1d4ef mui-c74ab393b96d mui-957a109f887f", dragging ? "mui-3eef1ce97dba mui-0d4ca75de41c mui-853be6c11609 mui-fd9d0b696aac" : "mui-5cbdd1b32f1a"), children: [_jsx("button", { type: "button", ...provided.dragHandleProps, "aria-label": t("reorder", { label }), title: t("dragHint"), className: "mui-222f930b8752 mui-2bd43fb57913 mui-27ead27a81df mui-f2e47d9c52ad mui-71556df3b421 mui-a503dd374cca mui-02e603944040 mui-35f35c41d134 mui-b30fc56058b6 mui-355efe22aedb mui-db549d38ff19 mui-71998ea7a2d0", children: _jsx(GripVertical, { className: "mui-61c000c8a98a" }) }), _jsxs("label", { className: "mui-222f930b8752 mui-184ddc11e5f9 mui-7bd5bab6d7f4 mui-d2fa8848968d mui-71556df3b421 mui-074569488cca", children: [_jsx(Checkbox, { checked: column.getIsVisible(), disabled: !column.getCanHide(), onCheckedChange: (value) => column.toggleVisibility(value === true), "aria-label": t("showColumn", { label }) }), _jsx("span", { className: "mui-5a3a4ee420c2", title: label, children: label })] }), _jsx(Button, { variant: "ghost", size: "icon-sm", disabled: !column.getCanPin(), "aria-label": pinLabel, title: pinLabel, className: cn("mui-0712570dcc9f mui-27ead27a81df", pin && "mui-87ecb59f2d2d"), onClick: () => column.pin(next), children: _jsx(Pin, { className: cn("mui-61c000c8a98a", pin === "start" && "mui-4e3f08588318", pin === "end" && "mui-c80411b7591f", !pin && "mui-35f35c41d134") }) })] }));
62
+ }
63
+ function pinAction(pin, direction) {
64
+ if (pin === "end")
65
+ return { next: false, message: "unpin" };
66
+ if (pin === "start")
67
+ return { next: "end", message: direction === "rtl" ? "pinLeft" : "pinRight" };
68
+ return { next: "start", message: direction === "rtl" ? "pinRight" : "pinLeft" };
55
69
  }
@@ -1,5 +1,6 @@
1
1
  "use client";
2
- import { jsxs as _jsxs, jsx as _jsx } from "react/jsx-runtime";
2
+ import { jsx as _jsx, jsxs as _jsxs } from "react/jsx-runtime";
3
+ import { useMendyLocale } from "../locale-context.js";
3
4
  import { useState } from "react";
4
5
  import { ChevronLeft, ChevronRight } from "lucide-react";
5
6
  import { Button } from "../primitives/button.js";
@@ -8,7 +9,13 @@ import { Input } from "../primitives/input.js";
8
9
  import { DropdownMenu, DropdownMenuTrigger, DropdownMenuContent, DropdownMenuItem, DropdownMenuSub, DropdownMenuSubTrigger, DropdownMenuSubContent, } from "../primitives/dropdown-menu.js";
9
10
  export { TableColumnSettings } from "./table-column-settings.js";
10
11
  export function TablePagination({ table, loading, }) {
11
- return (_jsxs("nav", { "data-mendy-ui": "", "aria-label": "Table pagination", className: "mui-222f930b8752 mui-faa8a23c68f6 mui-71556df3b421 mui-307644c34db6 mui-d7db3451d154 mui-b5edc3ea7c91 mui-c74ab393b96d", children: [_jsxs("span", { children: ["Page ", table.state.pagination.pageIndex + 1, table.getPageCount() >= 0 ? ` of ${Math.max(1, table.getPageCount())}` : ""] }), _jsxs(DropdownMenu, { children: [_jsx(DropdownMenuTrigger, { asChild: true, children: _jsxs(Button, { variant: "outline", size: "sm", children: [table.state.pagination.pageSize, " rows"] }) }), _jsx(DropdownMenuContent, { children: [10, 20, 50, 100].map((size) => (_jsxs(DropdownMenuItem, { onSelect: () => table.setPageSize(size), children: [size, " rows"] }, size))) })] }), _jsx(Button, { variant: "outline", size: "icon-sm", disabled: loading || !table.getCanPreviousPage(), "aria-label": "Previous page", onClick: () => table.previousPage(), children: _jsx(ChevronLeft, { className: "mui-100c22d5776b" }) }), _jsx(Button, { variant: "outline", size: "icon-sm", disabled: loading || !table.getCanNextPage(), "aria-label": "Next page", onClick: () => table.nextPage(), children: _jsx(ChevronRight, { className: "mui-100c22d5776b" }) })] }));
12
+ const { t, direction, code, configured } = useMendyLocale();
13
+ return (_jsxs("nav", { "data-mendy-ui": "", dir: configured ? direction : undefined, lang: code, "aria-label": t("pagination"), className: "mui-222f930b8752 mui-faa8a23c68f6 mui-71556df3b421 mui-307644c34db6 mui-d7db3451d154 mui-b5edc3ea7c91 mui-c74ab393b96d", children: [_jsx("span", { children: table.getPageCount() >= 0
14
+ ? t("pageOf", {
15
+ page: table.state.pagination.pageIndex + 1,
16
+ count: Math.max(1, table.getPageCount()),
17
+ })
18
+ : t("page", { page: table.state.pagination.pageIndex + 1 }) }), _jsxs(DropdownMenu, { children: [_jsx(DropdownMenuTrigger, { asChild: true, children: _jsx(Button, { variant: "outline", size: "sm", children: t("rowsPerPage", { count: table.state.pagination.pageSize }) }) }), _jsx(DropdownMenuContent, { children: [10, 20, 50, 100].map((size) => (_jsx(DropdownMenuItem, { onSelect: () => table.setPageSize(size), children: t("rowsPerPage", { count: size }) }, size))) })] }), _jsx(Button, { variant: "outline", size: "icon-sm", disabled: loading || !table.getCanPreviousPage(), "aria-label": t("previousPage"), onClick: () => table.previousPage(), children: _jsx(ChevronLeft, { className: "mui-100c22d5776b mui-36b12e8339c7" }) }), _jsx(Button, { variant: "outline", size: "icon-sm", disabled: loading || !table.getCanNextPage(), "aria-label": t("nextPage"), onClick: () => table.nextPage(), children: _jsx(ChevronRight, { className: "mui-100c22d5776b mui-36b12e8339c7" }) })] }));
12
19
  }
13
20
  export function selectionColumn() {
14
21
  return {
@@ -23,17 +30,19 @@ export function selectionColumn() {
23
30
  enableCellSelection: false,
24
31
  pin: "start",
25
32
  exportOptions: false,
26
- header: ({ table }) => (_jsx(Checkbox, { "data-mendy-ui": "", "aria-label": "Select loaded rows", checked: table.getIsAllPageRowsSelected() || (table.getIsSomePageRowsSelected() && "indeterminate"), onCheckedChange: (value) => table.toggleAllPageRowsSelected(value === true) })),
27
- cell: ({ row }) => (_jsx(Checkbox, { "data-mendy-ui": "", "aria-label": `Select row ${row.id}`, checked: row.getIsSelected(), disabled: !row.getCanSelect(), onCheckedChange: (value) => row.toggleSelected(value === true) })),
33
+ header: ({ table }) => (_jsx(SelectionCheckbox, { checked: table.getIsAllPageRowsSelected() || (table.getIsSomePageRowsSelected() && "indeterminate"), onCheckedChange: (value) => table.toggleAllPageRowsSelected(value === true) })),
34
+ cell: ({ row }) => (_jsx(SelectionCheckbox, { rowId: row.id, checked: row.getIsSelected(), disabled: !row.getCanSelect(), onCheckedChange: (value) => row.toggleSelected(value === true) })),
28
35
  };
29
36
  }
30
37
  export function TableActionBar({ count, children, onClear, }) {
38
+ const { t, direction, code, configured } = useMendyLocale();
31
39
  if (!count)
32
40
  return null;
33
- return (_jsxs("div", { "data-mendy-ui": "", role: "region", "aria-label": "Selected row actions", className: "mui-964a9431ff49 mui-a5c36273c0f0 mui-fbb62f5cb6fe mui-1752f11474a6 mui-222f930b8752 mui-8cfb5a42ef9f mui-81b198a2db84 mui-faa8a23c68f6 mui-71556df3b421 mui-d7db3451d154 mui-3fa8c572949b mui-4f1a55de40bc mui-5b272f3c5076 mui-0f9e6672913a mui-b5edc3ea7c91 mui-94ea94fde25f", children: [_jsxs("span", { className: "mui-c74ab393b96d", children: [count, " selected"] }), children, _jsx(Button, { variant: "ghost", size: "sm", onClick: onClear, children: "Clear selection" })] }));
41
+ return (_jsxs("div", { "data-mendy-ui": "", dir: configured ? direction : undefined, lang: code, role: "region", "aria-label": t("selectedActions"), className: "mui-964a9431ff49 mui-a5c36273c0f0 mui-fbb62f5cb6fe mui-1752f11474a6 mui-222f930b8752 mui-8cfb5a42ef9f mui-81b198a2db84 mui-faa8a23c68f6 mui-71556df3b421 mui-d7db3451d154 mui-3fa8c572949b mui-4f1a55de40bc mui-5b272f3c5076 mui-0f9e6672913a mui-b5edc3ea7c91 mui-94ea94fde25f", children: [_jsx("span", { className: "mui-c74ab393b96d", children: t("selectedCount", { count }) }), children, _jsx(Button, { variant: "ghost", size: "sm", onClick: onClear, children: t("clearSelection") })] }));
34
42
  }
35
43
  export function TableSavedViews({ views, onApply, onSave, onDelete, }) {
36
44
  const [name, setName] = useState("");
45
+ const { t, direction, code, configured } = useMendyLocale();
37
46
  const [pending, setPending] = useState(false);
38
47
  const [error, setError] = useState(null);
39
48
  async function run(action) {
@@ -44,15 +53,19 @@ export function TableSavedViews({ views, onApply, onSave, onDelete, }) {
44
53
  setName("");
45
54
  }
46
55
  catch (reason) {
47
- setError(reason instanceof Error ? reason.message : "Could not save changes.");
56
+ setError(reason instanceof Error ? reason.message : t("saveError"));
48
57
  }
49
58
  finally {
50
59
  setPending(false);
51
60
  }
52
61
  }
53
- return (_jsxs("div", { "data-mendy-ui": "", className: "mui-222f930b8752 mui-faa8a23c68f6 mui-71556df3b421 mui-074569488cca", children: [_jsxs(DropdownMenu, { children: [_jsx(DropdownMenuTrigger, { asChild: true, children: _jsx(Button, { size: "sm", variant: "outline", children: "Saved views" }) }), _jsx(DropdownMenuContent, { children: views.length ? (views.map((view) => (_jsxs(DropdownMenuSub, { children: [_jsx(DropdownMenuSubTrigger, { children: view.name }), _jsxs(DropdownMenuSubContent, { children: [_jsx(DropdownMenuItem, { onSelect: () => onApply(view), children: "Apply" }), onDelete && (_jsx(DropdownMenuItem, { disabled: pending, onSelect: () => void run(() => onDelete(view)), children: "Delete" }))] })] }, view.id)))) : (_jsx(DropdownMenuItem, { disabled: true, children: "No saved views" })) })] }), _jsxs("form", { className: "mui-222f930b8752 mui-71556df3b421 mui-074569488cca", onSubmit: (event) => {
62
+ return (_jsxs("div", { "data-mendy-ui": "", dir: configured ? direction : undefined, lang: code, className: "mui-222f930b8752 mui-faa8a23c68f6 mui-71556df3b421 mui-074569488cca", children: [_jsxs(DropdownMenu, { children: [_jsx(DropdownMenuTrigger, { asChild: true, children: _jsx(Button, { size: "sm", variant: "outline", children: t("savedViews") }) }), _jsx(DropdownMenuContent, { children: views.length ? (views.map((view) => (_jsxs(DropdownMenuSub, { children: [_jsx(DropdownMenuSubTrigger, { children: view.name }), _jsxs(DropdownMenuSubContent, { children: [_jsx(DropdownMenuItem, { onSelect: () => onApply(view), children: t("apply") }), onDelete && (_jsx(DropdownMenuItem, { disabled: pending, onSelect: () => void run(() => onDelete(view)), children: t("delete") }))] })] }, view.id)))) : (_jsx(DropdownMenuItem, { disabled: true, children: t("noSavedViews") })) })] }), _jsxs("form", { className: "mui-222f930b8752 mui-71556df3b421 mui-074569488cca", onSubmit: (event) => {
54
63
  event.preventDefault();
55
64
  if (name.trim() && !pending)
56
65
  void run(() => onSave(name.trim()));
57
- }, children: [_jsx(Input, { "aria-label": "New view name", value: name, onChange: (event) => setName(event.target.value), className: "mui-1fb07b38c63b mui-4ac4ec8dfbce" }), _jsx(Button, { type: "submit", size: "sm", disabled: pending || !name.trim(), children: "Save view" })] }), error && (_jsx("span", { role: "alert", className: "mui-c74ab393b96d mui-887b9502d5c7", children: error }))] }));
66
+ }, children: [_jsx(Input, { "aria-label": t("newViewName"), value: name, onChange: (event) => setName(event.target.value), className: "mui-1fb07b38c63b mui-4ac4ec8dfbce" }), _jsx(Button, { type: "submit", size: "sm", disabled: pending || !name.trim(), children: t("saveView") })] }), error && (_jsx("span", { role: "alert", className: "mui-c74ab393b96d mui-887b9502d5c7", children: error }))] }));
67
+ }
68
+ function SelectionCheckbox({ rowId, ...props }) {
69
+ const { t } = useMendyLocale();
70
+ return (_jsx(Checkbox, { ...props, "aria-label": rowId === undefined ? t("selectLoaded") : t("selectRow", { id: rowId }) }));
58
71
  }
@@ -1,18 +1,21 @@
1
1
  import { jsx as _jsx, jsxs as _jsxs, Fragment as _Fragment } from "react/jsx-runtime";
2
+ import { useMendyLocale } from "../locale-context.js";
2
3
  import { Button } from "../primitives/button.js";
3
4
  export function TableFeedbackRow({ children, columnCount, rowIndex, className, }) {
4
5
  return (_jsx("div", { role: "row", "aria-rowindex": rowIndex, className: className, children: _jsx("div", { role: "gridcell", "aria-colindex": 1, "aria-colspan": Math.max(1, columnCount), children: children }) }));
5
6
  }
6
7
  export function TableInitialState({ status, hasRows, loadingState, emptyState, error, retry, hasFilters, pageIndex = 0, clearFilters, firstPage, columnCount, }) {
8
+ const { t } = useMendyLocale();
7
9
  if (hasRows)
8
10
  return null;
9
11
  if (status === "loading")
10
12
  return (_jsx(TableFeedbackRow, { columnCount: columnCount, rowIndex: 2, children: loadingState }));
11
13
  if (status === "error")
12
- return (_jsx(TableFeedbackRow, { columnCount: columnCount, rowIndex: 2, children: _jsxs("div", { role: "alert", className: "mui-c432836760e3 mui-05ab12448317", children: [error ?? "Could not load rows.", retry && (_jsx(Button, { variant: "outline", size: "sm", onClick: retry, children: "Retry" }))] }) }));
14
+ return (_jsx(TableFeedbackRow, { columnCount: columnCount, rowIndex: 2, children: _jsxs("div", { role: "alert", className: "mui-c432836760e3 mui-05ab12448317", children: [error ?? t("loadRowsError"), retry && (_jsx(Button, { variant: "outline", size: "sm", onClick: retry, children: t("retry") }))] }) }));
13
15
  return (_jsx(TableFeedbackRow, { columnCount: columnCount, rowIndex: 2, children: _jsx("div", { role: "status", className: "mui-222f930b8752 mui-302c0d124a94 mui-71556df3b421 mui-074569488cca mui-c7902d77ad80 mui-05ab12448317 mui-35f35c41d134", children: emptyState ??
14
- (pageIndex > 0 ? (_jsxs(_Fragment, { children: [_jsx("span", { children: "No results on this page." }), _jsx(Button, { variant: "outline", size: "sm", onClick: firstPage, children: "Go to first page" })] })) : hasFilters ? (_jsxs(_Fragment, { children: [_jsx("span", { children: "No results match your filters." }), clearFilters && (_jsx(Button, { variant: "outline", size: "sm", onClick: clearFilters, children: "Clear filters" }))] })) : ("No rows yet.")) }) }));
16
+ (pageIndex > 0 ? (_jsxs(_Fragment, { children: [_jsx("span", { children: t("noPageResults") }), _jsx(Button, { variant: "outline", size: "sm", onClick: firstPage, children: t("firstPage") })] })) : hasFilters ? (_jsxs(_Fragment, { children: [_jsx("span", { children: t("noFilterResults") }), clearFilters && (_jsx(Button, { variant: "outline", size: "sm", onClick: clearFilters, children: t("clearFilters") }))] })) : (t("noRows"))) }) }));
15
17
  }
16
18
  export function TableLoadMore({ loadMore, columnCount, rowIndex, onLoad, }) {
17
- return (_jsx(TableFeedbackRow, { columnCount: columnCount, rowIndex: rowIndex, className: "mui-964a9431ff49 mui-635702706586", children: _jsxs("div", { className: "mui-222f930b8752 mui-71556df3b421 mui-a503dd374cca mui-074569488cca mui-96b92a971c95 mui-c74ab393b96d mui-35f35c41d134", children: [loadMore.loading ? (_jsxs("div", { role: "status", className: "mui-222f930b8752 mui-71556df3b421 mui-074569488cca", children: [_jsx("svg", { "aria-hidden": "true", viewBox: "0 0 24 24", fill: "none", stroke: "currentColor", strokeWidth: "1.5", strokeLinecap: "round", strokeLinejoin: "round", className: "mui-2bd43fb57913 mui-27ead27a81df mui-2c14b55d77e6 mui-237747164b60", children: _jsx("path", { d: "M12 3v3m6.366-.366-2.12 2.12M21 12h-3m.366 6.366-2.12-2.12M12 21v-3m-6.366.366 2.12-2.12M3 12h3m-.366-6.366 2.12 2.12" }) }), _jsx("span", { children: "Loading more\u2026" })] })) : (_jsx(Button, { size: "sm", variant: "ghost", onClick: onLoad, children: loadMore.error ? "Retry loading more" : "Load more" })), loadMore.error && _jsx("span", { role: "alert", children: loadMore.error })] }) }));
19
+ const { t } = useMendyLocale();
20
+ return (_jsx(TableFeedbackRow, { columnCount: columnCount, rowIndex: rowIndex, className: "mui-964a9431ff49 mui-8368bbb62f66", children: _jsxs("div", { className: "mui-222f930b8752 mui-71556df3b421 mui-a503dd374cca mui-074569488cca mui-96b92a971c95 mui-c74ab393b96d mui-35f35c41d134", children: [loadMore.loading ? (_jsxs("div", { role: "status", className: "mui-222f930b8752 mui-71556df3b421 mui-074569488cca", children: [_jsx("svg", { "aria-hidden": "true", viewBox: "0 0 24 24", fill: "none", stroke: "currentColor", strokeWidth: "1.5", strokeLinecap: "round", strokeLinejoin: "round", className: "mui-2bd43fb57913 mui-27ead27a81df mui-2c14b55d77e6 mui-237747164b60", children: _jsx("path", { d: "M12 3v3m6.366-.366-2.12 2.12M21 12h-3m.366 6.366-2.12-2.12M12 21v-3m-6.366.366 2.12-2.12M3 12h3m-.366-6.366 2.12 2.12" }) }), _jsx("span", { children: t("loadingMore") })] })) : (_jsx(Button, { size: "sm", variant: "ghost", onClick: onLoad, children: loadMore.error ? t("retryMore") : t("loadMore") })), loadMore.error && _jsx("span", { role: "alert", children: loadMore.error })] }) }));
18
21
  }
@@ -1,10 +1,12 @@
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 { cn } from "../utils.js";
4
5
  import { useFillLayout } from "./use-fill-layout.js";
5
6
  /** Shared sizing for the composed view and the table with built-in controls. */
6
7
  export function TableFrame({ layout, stretch = false, slot = "table-view", header, footer, children, }) {
8
+ const { direction, code, configured } = useMendyLocale();
7
9
  const fill = layout === "fill";
8
10
  const ref = useFillLayout(fill);
9
- return (_jsxs("div", { ref: ref, "data-mendy-ui": "", "data-slot": slot, "data-layout": layout, className: cn("mui-184ddc11e5f9", fill ? "mui-222f930b8752 mui-410da8dfa8ac mui-302c0d124a94 mui-074569488cca" : "mui-267171770524"), style: !fill && stretch ? { height: "100%" } : undefined, children: [header && _jsx("div", { className: "mui-27ead27a81df", children: header }), _jsx("div", { className: fill ? "mui-0f2a693e93e2 mui-410da8dfa8ac mui-7bd5bab6d7f4 mui-b5985369ee35" : undefined, style: !fill && stretch ? { height: "100%" } : undefined, children: children }), footer && _jsx("div", { className: "mui-27ead27a81df mui-267171770524", children: footer })] }));
11
+ return (_jsxs("div", { ref: ref, "data-mendy-ui": "", "data-slot": slot, dir: configured ? direction : undefined, lang: code, "data-layout": layout, className: cn("mui-184ddc11e5f9", fill ? "mui-222f930b8752 mui-410da8dfa8ac mui-302c0d124a94 mui-074569488cca" : "mui-267171770524"), style: !fill && stretch ? { height: "100%" } : undefined, children: [header && _jsx("div", { className: "mui-27ead27a81df", children: header }), _jsx("div", { className: fill ? "mui-0f2a693e93e2 mui-410da8dfa8ac mui-7bd5bab6d7f4 mui-b5985369ee35" : undefined, style: !fill && stretch ? { height: "100%" } : undefined, children: children }), footer && _jsx("div", { className: "mui-27ead27a81df mui-267171770524", children: footer })] }));
10
12
  }
@@ -3,7 +3,7 @@ import type { Column } from "@tanstack/react-table";
3
3
  import type { DataTableFeatures } from "./features.js";
4
4
  import type { DataTableInstance } from "./use-data-table.js";
5
5
  /** Keep headers, skeletons, and loaded cells on the same column geometry. */
6
- export declare function tableLayout<T extends object>(table: DataTableInstance<T>, viewportWidth: number | null, rowHeight: number): {
6
+ export declare function tableLayout<T extends object>(table: DataTableInstance<T>, viewportWidth: number | null, rowHeight: number, direction?: "ltr" | "rtl"): {
7
7
  columns: Column<{
8
8
  cellSelectionFeature: import("@tanstack/react-table").TableFeature;
9
9
  columnResizingFeature: import("@tanstack/react-table").TableFeature;