@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/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,9 +94,6 @@
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
  }
@@ -154,6 +157,9 @@
154
157
  .mui-291952c2525a:where([data-mendy-ui], [data-mendy-ui] *) {
155
158
  margin-inline-start: -1px;
156
159
  }
160
+ .mui-5cf4ab3b6fa0:where([data-mendy-ui], [data-mendy-ui] *) {
161
+ margin-inline-start: auto;
162
+ }
157
163
  .mui-8cc46fa87f41:where([data-mendy-ui], [data-mendy-ui] *) {
158
164
  margin-inline-end: calc(var(--spacing) * -1.5);
159
165
  }
@@ -166,9 +172,6 @@
166
172
  .mui-f28fea81a5cd:where([data-mendy-ui], [data-mendy-ui] *) {
167
173
  margin-top: calc(var(--spacing) * 2);
168
174
  }
169
- .mui-cc51bda60e7e:where([data-mendy-ui], [data-mendy-ui] *) {
170
- margin-left: auto;
171
- }
172
175
  .mui-496aca80e4d8:where([data-mendy-ui], [data-mendy-ui] *) {
173
176
  display: block;
174
177
  }
@@ -537,17 +540,17 @@
537
540
  .mui-02e603944040:where([data-mendy-ui], [data-mendy-ui] *) {
538
541
  border-radius: max(0px, calc(var(--radius, 0.5rem) - 4px));
539
542
  }
543
+ .mui-7efd3a0ebfc6:where([data-mendy-ui], [data-mendy-ui] *) {
544
+ border-start-start-radius: max(0px, calc(var(--radius, 0.5rem) - 2px));
545
+ border-end-start-radius: max(0px, calc(var(--radius, 0.5rem) - 2px));
546
+ }
540
547
  .mui-b31810dbd8a9:where([data-mendy-ui], [data-mendy-ui] *) {
541
548
  border-start-start-radius: 0;
542
549
  border-end-start-radius: 0;
543
550
  }
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));
551
+ .mui-7f3780751c2e:where([data-mendy-ui], [data-mendy-ui] *) {
552
+ border-start-end-radius: max(0px, calc(var(--radius, 0.5rem) - 2px));
553
+ border-end-end-radius: max(0px, calc(var(--radius, 0.5rem) - 2px));
551
554
  }
552
555
  .mui-4f1a55de40bc:where([data-mendy-ui], [data-mendy-ui] *) {
553
556
  border-style: var(--mendy-tw-border-style);
@@ -691,12 +694,18 @@
691
694
  .mui-96b92a971c95:where([data-mendy-ui], [data-mendy-ui] *) {
692
695
  padding-block: calc(var(--spacing) * 5);
693
696
  }
697
+ .mui-6dd4e62564b2:where([data-mendy-ui], [data-mendy-ui] *) {
698
+ padding-inline-start: calc(var(--spacing) * 2);
699
+ }
694
700
  .mui-078d945937da:where([data-mendy-ui], [data-mendy-ui] *) {
695
701
  padding-inline-start: calc(var(--spacing) * 8);
696
702
  }
697
703
  .mui-b2100041c585:where([data-mendy-ui], [data-mendy-ui] *) {
698
704
  padding-inline-start: calc(var(--spacing) * 9);
699
705
  }
706
+ .mui-b15eee699c4b:where([data-mendy-ui], [data-mendy-ui] *) {
707
+ padding-inline-end: calc(var(--spacing) * 1);
708
+ }
700
709
  .mui-05d4103bd67f:where([data-mendy-ui], [data-mendy-ui] *) {
701
710
  padding-inline-end: calc(var(--spacing) * 2);
702
711
  }
@@ -712,12 +721,6 @@
712
721
  .mui-0a702d97ed7d:where([data-mendy-ui], [data-mendy-ui] *) {
713
722
  padding-top: calc(var(--spacing) * 3);
714
723
  }
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
724
  .mui-05ab12448317:where([data-mendy-ui], [data-mendy-ui] *) {
722
725
  text-align: center;
723
726
  }
@@ -1320,9 +1323,9 @@
1320
1323
  background-color: var(--accent, #f5f5f5);
1321
1324
  }
1322
1325
  }
1323
- .mui-6fa6a8ade7c4:where([data-mendy-ui], [data-mendy-ui] *) {
1326
+ .mui-1da7bb9a299c:where([data-mendy-ui], [data-mendy-ui] *) {
1324
1327
  &[data-inset] {
1325
- padding-left: calc(var(--spacing) * 8);
1328
+ padding-inline-start: calc(var(--spacing) * 8);
1326
1329
  }
1327
1330
  }
1328
1331
  .mui-bbaaa5969856:where([data-mendy-ui], [data-mendy-ui] *) {
@@ -1343,10 +1346,10 @@
1343
1346
  border-radius: max(0px, calc(var(--radius, 0.5rem) - 2px));
1344
1347
  }
1345
1348
  }
1346
- .mui-a55dbe6f3eec:where([data-mendy-ui], [data-mendy-ui] *) {
1349
+ .mui-35468f495139:where([data-mendy-ui], [data-mendy-ui] *) {
1347
1350
  &[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));
1351
+ border-start-end-radius: max(0px, calc(var(--radius, 0.5rem) - 2px));
1352
+ border-end-end-radius: max(0px, calc(var(--radius, 0.5rem) - 2px));
1350
1353
  }
1351
1354
  }
1352
1355
  .mui-714051e55e8e:where([data-mendy-ui], [data-mendy-ui] *) {
@@ -1379,10 +1382,10 @@
1379
1382
  border-radius: max(0px, calc(var(--radius, 0.5rem) - 2px));
1380
1383
  }
1381
1384
  }
1382
- .mui-ab65911baf1d:where([data-mendy-ui], [data-mendy-ui] *) {
1385
+ .mui-6143f152715b:where([data-mendy-ui], [data-mendy-ui] *) {
1383
1386
  &[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));
1387
+ border-start-start-radius: max(0px, calc(var(--radius, 0.5rem) - 2px));
1388
+ border-end-start-radius: max(0px, calc(var(--radius, 0.5rem) - 2px));
1386
1389
  }
1387
1390
  }
1388
1391
  .mui-f5460d79341c:where([data-mendy-ui], [data-mendy-ui] *) {
@@ -1740,10 +1743,10 @@
1740
1743
  appearance: none;
1741
1744
  }
1742
1745
  }
1743
- .mui-74ab31abd804:where([data-mendy-ui], [data-mendy-ui] *) {
1746
+ .mui-9b9b154fb4bf:where([data-mendy-ui], [data-mendy-ui] *) {
1744
1747
  &: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));
1748
+ border-start-start-radius: max(0px, calc(var(--radius, 0.5rem) - 2px));
1749
+ border-end-start-radius: max(0px, calc(var(--radius, 0.5rem) - 2px));
1747
1750
  }
1748
1751
  }
1749
1752
  .mui-13858191ca50:where([data-mendy-ui], [data-mendy-ui] *) {
@@ -1773,16 +1776,16 @@
1773
1776
  }
1774
1777
  }
1775
1778
  }
1776
- .mui-6ee0c74de40c:where([data-mendy-ui], [data-mendy-ui] *) {
1779
+ .mui-e9494a526550:where([data-mendy-ui], [data-mendy-ui] *) {
1777
1780
  &: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));
1781
+ border-start-end-radius: max(0px, calc(var(--radius, 0.5rem) - 2px));
1782
+ border-end-end-radius: max(0px, calc(var(--radius, 0.5rem) - 2px));
1780
1783
  }
1781
1784
  }
1782
- .mui-6162ab70efb5:where([data-mendy-ui], [data-mendy-ui] *) {
1785
+ .mui-167d036894df:where([data-mendy-ui], [data-mendy-ui] *) {
1783
1786
  &: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));
1787
+ border-start-start-radius: max(0px, calc(var(--radius, 0.5rem) - 2px));
1788
+ border-end-start-radius: max(0px, calc(var(--radius, 0.5rem) - 2px));
1786
1789
  }
1787
1790
  }
1788
1791
  .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,9 +93,6 @@
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
  }
@@ -153,6 +156,9 @@
153
156
  .mui-291952c2525a:where([data-mendy-ui], [data-mendy-ui] *) {
154
157
  margin-inline-start: -1px;
155
158
  }
159
+ .mui-5cf4ab3b6fa0:where([data-mendy-ui], [data-mendy-ui] *) {
160
+ margin-inline-start: auto;
161
+ }
156
162
  .mui-8cc46fa87f41:where([data-mendy-ui], [data-mendy-ui] *) {
157
163
  margin-inline-end: calc(var(--spacing) * -1.5);
158
164
  }
@@ -165,9 +171,6 @@
165
171
  .mui-f28fea81a5cd:where([data-mendy-ui], [data-mendy-ui] *) {
166
172
  margin-top: calc(var(--spacing) * 2);
167
173
  }
168
- .mui-cc51bda60e7e:where([data-mendy-ui], [data-mendy-ui] *) {
169
- margin-left: auto;
170
- }
171
174
  .mui-496aca80e4d8:where([data-mendy-ui], [data-mendy-ui] *) {
172
175
  display: block;
173
176
  }
@@ -536,17 +539,17 @@
536
539
  .mui-02e603944040:where([data-mendy-ui], [data-mendy-ui] *) {
537
540
  border-radius: max(0px, calc(var(--radius, 0.5rem) - 4px));
538
541
  }
542
+ .mui-7efd3a0ebfc6:where([data-mendy-ui], [data-mendy-ui] *) {
543
+ border-start-start-radius: max(0px, calc(var(--radius, 0.5rem) - 2px));
544
+ border-end-start-radius: max(0px, calc(var(--radius, 0.5rem) - 2px));
545
+ }
539
546
  .mui-b31810dbd8a9:where([data-mendy-ui], [data-mendy-ui] *) {
540
547
  border-start-start-radius: 0;
541
548
  border-end-start-radius: 0;
542
549
  }
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));
550
+ .mui-7f3780751c2e:where([data-mendy-ui], [data-mendy-ui] *) {
551
+ border-start-end-radius: max(0px, calc(var(--radius, 0.5rem) - 2px));
552
+ border-end-end-radius: max(0px, calc(var(--radius, 0.5rem) - 2px));
550
553
  }
551
554
  .mui-4f1a55de40bc:where([data-mendy-ui], [data-mendy-ui] *) {
552
555
  border-style: var(--mendy-tw-border-style);
@@ -690,12 +693,18 @@
690
693
  .mui-96b92a971c95:where([data-mendy-ui], [data-mendy-ui] *) {
691
694
  padding-block: calc(var(--spacing) * 5);
692
695
  }
696
+ .mui-6dd4e62564b2:where([data-mendy-ui], [data-mendy-ui] *) {
697
+ padding-inline-start: calc(var(--spacing) * 2);
698
+ }
693
699
  .mui-078d945937da:where([data-mendy-ui], [data-mendy-ui] *) {
694
700
  padding-inline-start: calc(var(--spacing) * 8);
695
701
  }
696
702
  .mui-b2100041c585:where([data-mendy-ui], [data-mendy-ui] *) {
697
703
  padding-inline-start: calc(var(--spacing) * 9);
698
704
  }
705
+ .mui-b15eee699c4b:where([data-mendy-ui], [data-mendy-ui] *) {
706
+ padding-inline-end: calc(var(--spacing) * 1);
707
+ }
699
708
  .mui-05d4103bd67f:where([data-mendy-ui], [data-mendy-ui] *) {
700
709
  padding-inline-end: calc(var(--spacing) * 2);
701
710
  }
@@ -711,12 +720,6 @@
711
720
  .mui-0a702d97ed7d:where([data-mendy-ui], [data-mendy-ui] *) {
712
721
  padding-top: calc(var(--spacing) * 3);
713
722
  }
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
723
  .mui-05ab12448317:where([data-mendy-ui], [data-mendy-ui] *) {
721
724
  text-align: center;
722
725
  }
@@ -1319,9 +1322,9 @@
1319
1322
  background-color: var(--accent, #f5f5f5);
1320
1323
  }
1321
1324
  }
1322
- .mui-6fa6a8ade7c4:where([data-mendy-ui], [data-mendy-ui] *) {
1325
+ .mui-1da7bb9a299c:where([data-mendy-ui], [data-mendy-ui] *) {
1323
1326
  &[data-inset] {
1324
- padding-left: calc(var(--spacing) * 8);
1327
+ padding-inline-start: calc(var(--spacing) * 8);
1325
1328
  }
1326
1329
  }
1327
1330
  .mui-bbaaa5969856:where([data-mendy-ui], [data-mendy-ui] *) {
@@ -1342,10 +1345,10 @@
1342
1345
  border-radius: max(0px, calc(var(--radius, 0.5rem) - 2px));
1343
1346
  }
1344
1347
  }
1345
- .mui-a55dbe6f3eec:where([data-mendy-ui], [data-mendy-ui] *) {
1348
+ .mui-35468f495139:where([data-mendy-ui], [data-mendy-ui] *) {
1346
1349
  &[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));
1350
+ border-start-end-radius: max(0px, calc(var(--radius, 0.5rem) - 2px));
1351
+ border-end-end-radius: max(0px, calc(var(--radius, 0.5rem) - 2px));
1349
1352
  }
1350
1353
  }
1351
1354
  .mui-714051e55e8e:where([data-mendy-ui], [data-mendy-ui] *) {
@@ -1378,10 +1381,10 @@
1378
1381
  border-radius: max(0px, calc(var(--radius, 0.5rem) - 2px));
1379
1382
  }
1380
1383
  }
1381
- .mui-ab65911baf1d:where([data-mendy-ui], [data-mendy-ui] *) {
1384
+ .mui-6143f152715b:where([data-mendy-ui], [data-mendy-ui] *) {
1382
1385
  &[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));
1386
+ border-start-start-radius: max(0px, calc(var(--radius, 0.5rem) - 2px));
1387
+ border-end-start-radius: max(0px, calc(var(--radius, 0.5rem) - 2px));
1385
1388
  }
1386
1389
  }
1387
1390
  .mui-f5460d79341c:where([data-mendy-ui], [data-mendy-ui] *) {
@@ -1739,10 +1742,10 @@
1739
1742
  appearance: none;
1740
1743
  }
1741
1744
  }
1742
- .mui-74ab31abd804:where([data-mendy-ui], [data-mendy-ui] *) {
1745
+ .mui-9b9b154fb4bf:where([data-mendy-ui], [data-mendy-ui] *) {
1743
1746
  &: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));
1747
+ border-start-start-radius: max(0px, calc(var(--radius, 0.5rem) - 2px));
1748
+ border-end-start-radius: max(0px, calc(var(--radius, 0.5rem) - 2px));
1746
1749
  }
1747
1750
  }
1748
1751
  .mui-13858191ca50:where([data-mendy-ui], [data-mendy-ui] *) {
@@ -1772,16 +1775,16 @@
1772
1775
  }
1773
1776
  }
1774
1777
  }
1775
- .mui-6ee0c74de40c:where([data-mendy-ui], [data-mendy-ui] *) {
1778
+ .mui-e9494a526550:where([data-mendy-ui], [data-mendy-ui] *) {
1776
1779
  &: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));
1780
+ border-start-end-radius: max(0px, calc(var(--radius, 0.5rem) - 2px));
1781
+ border-end-end-radius: max(0px, calc(var(--radius, 0.5rem) - 2px));
1779
1782
  }
1780
1783
  }
1781
- .mui-6162ab70efb5:where([data-mendy-ui], [data-mendy-ui] *) {
1784
+ .mui-167d036894df:where([data-mendy-ui], [data-mendy-ui] *) {
1782
1785
  &: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));
1786
+ border-start-start-radius: max(0px, calc(var(--radius, 0.5rem) - 2px));
1787
+ border-end-start-radius: max(0px, calc(var(--radius, 0.5rem) - 2px));
1785
1788
  }
1786
1789
  }
1787
1790
  .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 } = useMendyLocale();
13
+ return (_jsxs("nav", { "data-mendy-ui": "", "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 } = 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": "", 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 } = 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": "", 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-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: 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;
@@ -1,6 +1,6 @@
1
1
  import { distributeColumnWidths } from "./column-widths.js";
2
2
  /** Keep headers, skeletons, and loaded cells on the same column geometry. */
3
- export function tableLayout(table, viewportWidth, rowHeight) {
3
+ export function tableLayout(table, viewportWidth, rowHeight, direction = "ltr") {
4
4
  const columns = [
5
5
  ...table.getStartVisibleLeafColumns(),
6
6
  ...table.getCenterVisibleLeafColumns(),
@@ -28,12 +28,12 @@ export function tableLayout(table, viewportWidth, rowHeight) {
28
28
  const positions = new Map();
29
29
  let offset = 0;
30
30
  for (const column of table.getStartVisibleLeafColumns()) {
31
- positions.set(column.id, { side: "left", offset });
31
+ positions.set(column.id, { side: direction === "rtl" ? "right" : "left", offset });
32
32
  offset += size(column);
33
33
  }
34
34
  offset = 0;
35
35
  for (const column of [...table.getEndVisibleLeafColumns()].reverse()) {
36
- positions.set(column.id, { side: "right", offset });
36
+ positions.set(column.id, { side: direction === "rtl" ? "left" : "right", offset });
37
37
  offset += size(column);
38
38
  }
39
39
  const styles = new Map();
@@ -54,10 +54,10 @@ export function tableLayout(table, viewportWidth, rowHeight) {
54
54
  [pin.side]: pin.offset,
55
55
  zIndex: 2,
56
56
  ...(column.id === table.getStartVisibleLeafColumns().at(-1)?.id
57
- ? { borderRightWidth: 4 }
57
+ ? { [direction === "rtl" ? "borderLeftWidth" : "borderRightWidth"]: 4 }
58
58
  : {}),
59
59
  ...(column.id === table.getEndVisibleLeafColumns()[0]?.id
60
- ? { borderLeftWidth: 4 }
60
+ ? { [direction === "rtl" ? "borderRightWidth" : "borderLeftWidth"]: 4 }
61
61
  : {}),
62
62
  }
63
63
  : {}),