shadcn-data-views 1.0.4 → 1.0.5

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.
package/dist/index.mjs CHANGED
@@ -950,9 +950,21 @@ body {
950
950
  .w-\\[100px\\] {
951
951
  width: 100px;
952
952
  }
953
+ .w-\\[120px\\] {
954
+ width: 120px;
955
+ }
956
+ .w-\\[150px\\] {
957
+ width: 150px;
958
+ }
959
+ .w-\\[180px\\] {
960
+ width: 180px;
961
+ }
953
962
  .w-\\[1px\\] {
954
963
  width: 1px;
955
964
  }
965
+ .w-\\[200px\\] {
966
+ width: 200px;
967
+ }
956
968
  .w-\\[264px\\] {
957
969
  width: 264px;
958
970
  }
@@ -1229,6 +1241,11 @@ body {
1229
1241
  margin-top: calc(0.5rem * calc(1 - var(--tw-space-y-reverse)));
1230
1242
  margin-bottom: calc(0.5rem * var(--tw-space-y-reverse));
1231
1243
  }
1244
+ .space-y-3 > :not([hidden]) ~ :not([hidden]) {
1245
+ --tw-space-y-reverse: 0;
1246
+ margin-top: calc(0.75rem * calc(1 - var(--tw-space-y-reverse)));
1247
+ margin-bottom: calc(0.75rem * var(--tw-space-y-reverse));
1248
+ }
1232
1249
  .space-y-5 > :not([hidden]) ~ :not([hidden]) {
1233
1250
  --tw-space-y-reverse: 0;
1234
1251
  margin-top: calc(1.25rem * calc(1 - var(--tw-space-y-reverse)));
@@ -1407,15 +1424,27 @@ body {
1407
1424
  --tw-bg-opacity: 1;
1408
1425
  background-color: rgb(254 243 199 / var(--tw-bg-opacity, 1));
1409
1426
  }
1427
+ .bg-amber-200 {
1428
+ --tw-bg-opacity: 1;
1429
+ background-color: rgb(253 230 138 / var(--tw-bg-opacity, 1));
1430
+ }
1431
+ .bg-amber-50 {
1432
+ --tw-bg-opacity: 1;
1433
+ background-color: rgb(255 251 235 / var(--tw-bg-opacity, 1));
1434
+ }
1410
1435
  .bg-amber-500 {
1411
1436
  --tw-bg-opacity: 1;
1412
1437
  background-color: rgb(245 158 11 / var(--tw-bg-opacity, 1));
1413
1438
  }
1439
+ .bg-amber-700 {
1440
+ --tw-bg-opacity: 1;
1441
+ background-color: rgb(180 83 9 / var(--tw-bg-opacity, 1));
1442
+ }
1414
1443
  .bg-background {
1415
1444
  background-color: hsl(var(--background));
1416
1445
  }
1417
- .bg-background\\/80 {
1418
- background-color: hsl(var(--background) / 0.8);
1446
+ .bg-background\\/90 {
1447
+ background-color: hsl(var(--background) / 0.9);
1419
1448
  }
1420
1449
  .bg-black\\/80 {
1421
1450
  background-color: rgb(0 0 0 / 0.8);
@@ -1428,22 +1457,82 @@ body {
1428
1457
  --tw-bg-opacity: 1;
1429
1458
  background-color: rgb(59 130 246 / var(--tw-bg-opacity, 1));
1430
1459
  }
1460
+ .bg-blue-900 {
1461
+ --tw-bg-opacity: 1;
1462
+ background-color: rgb(30 58 138 / var(--tw-bg-opacity, 1));
1463
+ }
1431
1464
  .bg-border {
1432
1465
  background-color: hsl(var(--border));
1433
1466
  }
1434
1467
  .bg-card {
1435
1468
  background-color: hsl(var(--card));
1436
1469
  }
1470
+ .bg-cyan-100 {
1471
+ --tw-bg-opacity: 1;
1472
+ background-color: rgb(207 250 254 / var(--tw-bg-opacity, 1));
1473
+ }
1474
+ .bg-cyan-400 {
1475
+ --tw-bg-opacity: 1;
1476
+ background-color: rgb(34 211 238 / var(--tw-bg-opacity, 1));
1477
+ }
1478
+ .bg-cyan-500 {
1479
+ --tw-bg-opacity: 1;
1480
+ background-color: rgb(6 182 212 / var(--tw-bg-opacity, 1));
1481
+ }
1437
1482
  .bg-destructive {
1438
1483
  background-color: hsl(var(--destructive));
1439
1484
  }
1485
+ .bg-emerald-100 {
1486
+ --tw-bg-opacity: 1;
1487
+ background-color: rgb(209 250 229 / var(--tw-bg-opacity, 1));
1488
+ }
1489
+ .bg-emerald-400 {
1490
+ --tw-bg-opacity: 1;
1491
+ background-color: rgb(52 211 153 / var(--tw-bg-opacity, 1));
1492
+ }
1493
+ .bg-emerald-500 {
1494
+ --tw-bg-opacity: 1;
1495
+ background-color: rgb(16 185 129 / var(--tw-bg-opacity, 1));
1496
+ }
1440
1497
  .bg-foreground {
1441
1498
  background-color: hsl(var(--foreground));
1442
1499
  }
1500
+ .bg-fuchsia-100 {
1501
+ --tw-bg-opacity: 1;
1502
+ background-color: rgb(250 232 255 / var(--tw-bg-opacity, 1));
1503
+ }
1504
+ .bg-fuchsia-400 {
1505
+ --tw-bg-opacity: 1;
1506
+ background-color: rgb(232 121 249 / var(--tw-bg-opacity, 1));
1507
+ }
1508
+ .bg-fuchsia-500 {
1509
+ --tw-bg-opacity: 1;
1510
+ background-color: rgb(217 70 239 / var(--tw-bg-opacity, 1));
1511
+ }
1512
+ .bg-fuchsia-600 {
1513
+ --tw-bg-opacity: 1;
1514
+ background-color: rgb(192 38 211 / var(--tw-bg-opacity, 1));
1515
+ }
1516
+ .bg-gray-100 {
1517
+ --tw-bg-opacity: 1;
1518
+ background-color: rgb(243 244 246 / var(--tw-bg-opacity, 1));
1519
+ }
1443
1520
  .bg-gray-400 {
1444
1521
  --tw-bg-opacity: 1;
1445
1522
  background-color: rgb(156 163 175 / var(--tw-bg-opacity, 1));
1446
1523
  }
1524
+ .bg-gray-50 {
1525
+ --tw-bg-opacity: 1;
1526
+ background-color: rgb(249 250 251 / var(--tw-bg-opacity, 1));
1527
+ }
1528
+ .bg-gray-800 {
1529
+ --tw-bg-opacity: 1;
1530
+ background-color: rgb(31 41 55 / var(--tw-bg-opacity, 1));
1531
+ }
1532
+ .bg-gray-900 {
1533
+ --tw-bg-opacity: 1;
1534
+ background-color: rgb(17 24 39 / var(--tw-bg-opacity, 1));
1535
+ }
1447
1536
  .bg-green-100 {
1448
1537
  --tw-bg-opacity: 1;
1449
1538
  background-color: rgb(220 252 231 / var(--tw-bg-opacity, 1));
@@ -1456,15 +1545,78 @@ body {
1456
1545
  --tw-bg-opacity: 1;
1457
1546
  background-color: rgb(34 197 94 / var(--tw-bg-opacity, 1));
1458
1547
  }
1548
+ .bg-indigo-100 {
1549
+ --tw-bg-opacity: 1;
1550
+ background-color: rgb(224 231 255 / var(--tw-bg-opacity, 1));
1551
+ }
1552
+ .bg-indigo-500 {
1553
+ --tw-bg-opacity: 1;
1554
+ background-color: rgb(99 102 241 / var(--tw-bg-opacity, 1));
1555
+ }
1556
+ .bg-lime-100 {
1557
+ --tw-bg-opacity: 1;
1558
+ background-color: rgb(236 252 203 / var(--tw-bg-opacity, 1));
1559
+ }
1560
+ .bg-lime-500 {
1561
+ --tw-bg-opacity: 1;
1562
+ background-color: rgb(132 204 22 / var(--tw-bg-opacity, 1));
1563
+ }
1564
+ .bg-lime-700 {
1565
+ --tw-bg-opacity: 1;
1566
+ background-color: rgb(77 124 15 / var(--tw-bg-opacity, 1));
1567
+ }
1459
1568
  .bg-muted {
1460
1569
  background-color: hsl(var(--muted));
1461
1570
  }
1571
+ .bg-muted\\/20 {
1572
+ background-color: hsl(var(--muted) / 0.2);
1573
+ }
1462
1574
  .bg-muted\\/30 {
1463
1575
  background-color: hsl(var(--muted) / 0.3);
1464
1576
  }
1465
1577
  .bg-muted\\/50 {
1466
1578
  background-color: hsl(var(--muted) / 0.5);
1467
1579
  }
1580
+ .bg-neutral-100 {
1581
+ --tw-bg-opacity: 1;
1582
+ background-color: rgb(245 245 245 / var(--tw-bg-opacity, 1));
1583
+ }
1584
+ .bg-neutral-400 {
1585
+ --tw-bg-opacity: 1;
1586
+ background-color: rgb(163 163 163 / var(--tw-bg-opacity, 1));
1587
+ }
1588
+ .bg-orange-100 {
1589
+ --tw-bg-opacity: 1;
1590
+ background-color: rgb(255 237 213 / var(--tw-bg-opacity, 1));
1591
+ }
1592
+ .bg-orange-300 {
1593
+ --tw-bg-opacity: 1;
1594
+ background-color: rgb(253 186 116 / var(--tw-bg-opacity, 1));
1595
+ }
1596
+ .bg-orange-400 {
1597
+ --tw-bg-opacity: 1;
1598
+ background-color: rgb(251 146 60 / var(--tw-bg-opacity, 1));
1599
+ }
1600
+ .bg-orange-500 {
1601
+ --tw-bg-opacity: 1;
1602
+ background-color: rgb(249 115 22 / var(--tw-bg-opacity, 1));
1603
+ }
1604
+ .bg-orange-700 {
1605
+ --tw-bg-opacity: 1;
1606
+ background-color: rgb(194 65 12 / var(--tw-bg-opacity, 1));
1607
+ }
1608
+ .bg-pink-100 {
1609
+ --tw-bg-opacity: 1;
1610
+ background-color: rgb(252 231 243 / var(--tw-bg-opacity, 1));
1611
+ }
1612
+ .bg-pink-400 {
1613
+ --tw-bg-opacity: 1;
1614
+ background-color: rgb(244 114 182 / var(--tw-bg-opacity, 1));
1615
+ }
1616
+ .bg-pink-500 {
1617
+ --tw-bg-opacity: 1;
1618
+ background-color: rgb(236 72 153 / var(--tw-bg-opacity, 1));
1619
+ }
1468
1620
  .bg-popover {
1469
1621
  background-color: hsl(var(--popover));
1470
1622
  }
@@ -1481,10 +1633,18 @@ body {
1481
1633
  --tw-bg-opacity: 1;
1482
1634
  background-color: rgb(243 232 255 / var(--tw-bg-opacity, 1));
1483
1635
  }
1636
+ .bg-purple-400 {
1637
+ --tw-bg-opacity: 1;
1638
+ background-color: rgb(192 132 252 / var(--tw-bg-opacity, 1));
1639
+ }
1484
1640
  .bg-purple-500 {
1485
1641
  --tw-bg-opacity: 1;
1486
1642
  background-color: rgb(168 85 247 / var(--tw-bg-opacity, 1));
1487
1643
  }
1644
+ .bg-purple-600 {
1645
+ --tw-bg-opacity: 1;
1646
+ background-color: rgb(147 51 234 / var(--tw-bg-opacity, 1));
1647
+ }
1488
1648
  .bg-red-100 {
1489
1649
  --tw-bg-opacity: 1;
1490
1650
  background-color: rgb(254 226 226 / var(--tw-bg-opacity, 1));
@@ -1493,6 +1653,22 @@ body {
1493
1653
  --tw-bg-opacity: 1;
1494
1654
  background-color: rgb(239 68 68 / var(--tw-bg-opacity, 1));
1495
1655
  }
1656
+ .bg-red-700 {
1657
+ --tw-bg-opacity: 1;
1658
+ background-color: rgb(185 28 28 / var(--tw-bg-opacity, 1));
1659
+ }
1660
+ .bg-red-900 {
1661
+ --tw-bg-opacity: 1;
1662
+ background-color: rgb(127 29 29 / var(--tw-bg-opacity, 1));
1663
+ }
1664
+ .bg-rose-100 {
1665
+ --tw-bg-opacity: 1;
1666
+ background-color: rgb(255 228 230 / var(--tw-bg-opacity, 1));
1667
+ }
1668
+ .bg-rose-500 {
1669
+ --tw-bg-opacity: 1;
1670
+ background-color: rgb(244 63 94 / var(--tw-bg-opacity, 1));
1671
+ }
1496
1672
  .bg-secondary {
1497
1673
  background-color: hsl(var(--secondary));
1498
1674
  }
@@ -1502,17 +1678,93 @@ body {
1502
1678
  .bg-sidebar-border {
1503
1679
  background-color: hsl(var(--sidebar-border));
1504
1680
  }
1681
+ .bg-sky-100 {
1682
+ --tw-bg-opacity: 1;
1683
+ background-color: rgb(224 242 254 / var(--tw-bg-opacity, 1));
1684
+ }
1685
+ .bg-sky-500 {
1686
+ --tw-bg-opacity: 1;
1687
+ background-color: rgb(14 165 233 / var(--tw-bg-opacity, 1));
1688
+ }
1689
+ .bg-slate-100 {
1690
+ --tw-bg-opacity: 1;
1691
+ background-color: rgb(241 245 249 / var(--tw-bg-opacity, 1));
1692
+ }
1693
+ .bg-slate-400 {
1694
+ --tw-bg-opacity: 1;
1695
+ background-color: rgb(148 163 184 / var(--tw-bg-opacity, 1));
1696
+ }
1505
1697
  .bg-slate-50 {
1506
1698
  --tw-bg-opacity: 1;
1507
1699
  background-color: rgb(248 250 252 / var(--tw-bg-opacity, 1));
1508
1700
  }
1701
+ .bg-stone-100 {
1702
+ --tw-bg-opacity: 1;
1703
+ background-color: rgb(245 245 244 / var(--tw-bg-opacity, 1));
1704
+ }
1705
+ .bg-stone-400 {
1706
+ --tw-bg-opacity: 1;
1707
+ background-color: rgb(168 162 158 / var(--tw-bg-opacity, 1));
1708
+ }
1709
+ .bg-teal-100 {
1710
+ --tw-bg-opacity: 1;
1711
+ background-color: rgb(204 251 241 / var(--tw-bg-opacity, 1));
1712
+ }
1713
+ .bg-teal-400 {
1714
+ --tw-bg-opacity: 1;
1715
+ background-color: rgb(45 212 191 / var(--tw-bg-opacity, 1));
1716
+ }
1717
+ .bg-teal-500 {
1718
+ --tw-bg-opacity: 1;
1719
+ background-color: rgb(20 184 166 / var(--tw-bg-opacity, 1));
1720
+ }
1509
1721
  .bg-transparent {
1510
1722
  background-color: transparent;
1511
1723
  }
1724
+ .bg-violet-100 {
1725
+ --tw-bg-opacity: 1;
1726
+ background-color: rgb(237 233 254 / var(--tw-bg-opacity, 1));
1727
+ }
1512
1728
  .bg-violet-200 {
1513
1729
  --tw-bg-opacity: 1;
1514
1730
  background-color: rgb(221 214 254 / var(--tw-bg-opacity, 1));
1515
1731
  }
1732
+ .bg-violet-500 {
1733
+ --tw-bg-opacity: 1;
1734
+ background-color: rgb(139 92 246 / var(--tw-bg-opacity, 1));
1735
+ }
1736
+ .bg-yellow-100 {
1737
+ --tw-bg-opacity: 1;
1738
+ background-color: rgb(254 249 195 / var(--tw-bg-opacity, 1));
1739
+ }
1740
+ .bg-yellow-400 {
1741
+ --tw-bg-opacity: 1;
1742
+ background-color: rgb(250 204 21 / var(--tw-bg-opacity, 1));
1743
+ }
1744
+ .bg-yellow-50 {
1745
+ --tw-bg-opacity: 1;
1746
+ background-color: rgb(254 252 232 / var(--tw-bg-opacity, 1));
1747
+ }
1748
+ .bg-yellow-500 {
1749
+ --tw-bg-opacity: 1;
1750
+ background-color: rgb(234 179 8 / var(--tw-bg-opacity, 1));
1751
+ }
1752
+ .bg-yellow-600 {
1753
+ --tw-bg-opacity: 1;
1754
+ background-color: rgb(202 138 4 / var(--tw-bg-opacity, 1));
1755
+ }
1756
+ .bg-yellow-700 {
1757
+ --tw-bg-opacity: 1;
1758
+ background-color: rgb(161 98 7 / var(--tw-bg-opacity, 1));
1759
+ }
1760
+ .bg-zinc-100 {
1761
+ --tw-bg-opacity: 1;
1762
+ background-color: rgb(244 244 245 / var(--tw-bg-opacity, 1));
1763
+ }
1764
+ .bg-zinc-400 {
1765
+ --tw-bg-opacity: 1;
1766
+ background-color: rgb(161 161 170 / var(--tw-bg-opacity, 1));
1767
+ }
1516
1768
  .fill-current {
1517
1769
  fill: currentColor;
1518
1770
  }
@@ -1549,6 +1801,10 @@ body {
1549
1801
  .p-\\[2px\\] {
1550
1802
  padding: 2px;
1551
1803
  }
1804
+ .px-0\\.5 {
1805
+ padding-left: 0.125rem;
1806
+ padding-right: 0.125rem;
1807
+ }
1552
1808
  .px-1 {
1553
1809
  padding-left: 0.25rem;
1554
1810
  padding-right: 0.25rem;
@@ -1670,6 +1926,9 @@ body {
1670
1926
  .text-right {
1671
1927
  text-align: right;
1672
1928
  }
1929
+ .text-start {
1930
+ text-align: start;
1931
+ }
1673
1932
  .align-middle {
1674
1933
  vertical-align: middle;
1675
1934
  }
@@ -1713,6 +1972,9 @@ body {
1713
1972
  .text-\\[0\\.8rem\\] {
1714
1973
  font-size: 0.8rem;
1715
1974
  }
1975
+ .text-\\[11px\\] {
1976
+ font-size: 11px;
1977
+ }
1716
1978
  .text-\\[13px\\] {
1717
1979
  font-size: 13px;
1718
1980
  }
@@ -1745,6 +2007,9 @@ body {
1745
2007
  .font-semibold {
1746
2008
  font-weight: 600;
1747
2009
  }
2010
+ .uppercase {
2011
+ text-transform: uppercase;
2012
+ }
1748
2013
  .tabular-nums {
1749
2014
  --tw-numeric-spacing: tabular-nums;
1750
2015
  font-variant-numeric: var(--tw-ordinal) var(--tw-slashed-zero) var(--tw-numeric-figure) var(--tw-numeric-spacing) var(--tw-numeric-fraction);
@@ -1758,6 +2023,9 @@ body {
1758
2023
  .tracking-tight {
1759
2024
  letter-spacing: -0.025em;
1760
2025
  }
2026
+ .tracking-wider {
2027
+ letter-spacing: 0.05em;
2028
+ }
1761
2029
  .tracking-widest {
1762
2030
  letter-spacing: 0.1em;
1763
2031
  }
@@ -1768,28 +2036,72 @@ body {
1768
2036
  --tw-text-opacity: 1;
1769
2037
  color: rgb(180 83 9 / var(--tw-text-opacity, 1));
1770
2038
  }
2039
+ .text-amber-800 {
2040
+ --tw-text-opacity: 1;
2041
+ color: rgb(146 64 14 / var(--tw-text-opacity, 1));
2042
+ }
1771
2043
  .text-blue-700 {
1772
2044
  --tw-text-opacity: 1;
1773
2045
  color: rgb(29 78 216 / var(--tw-text-opacity, 1));
1774
2046
  }
2047
+ .text-blue-900 {
2048
+ --tw-text-opacity: 1;
2049
+ color: rgb(30 58 138 / var(--tw-text-opacity, 1));
2050
+ }
1775
2051
  .text-card-foreground {
1776
2052
  color: hsl(var(--card-foreground));
1777
2053
  }
1778
2054
  .text-current {
1779
2055
  color: currentColor;
1780
2056
  }
2057
+ .text-cyan-600 {
2058
+ --tw-text-opacity: 1;
2059
+ color: rgb(8 145 178 / var(--tw-text-opacity, 1));
2060
+ }
2061
+ .text-cyan-700 {
2062
+ --tw-text-opacity: 1;
2063
+ color: rgb(14 116 144 / var(--tw-text-opacity, 1));
2064
+ }
1781
2065
  .text-destructive {
1782
2066
  color: hsl(var(--destructive));
1783
2067
  }
1784
2068
  .text-destructive-foreground {
1785
2069
  color: hsl(var(--destructive-foreground));
1786
2070
  }
2071
+ .text-emerald-600 {
2072
+ --tw-text-opacity: 1;
2073
+ color: rgb(5 150 105 / var(--tw-text-opacity, 1));
2074
+ }
2075
+ .text-emerald-700 {
2076
+ --tw-text-opacity: 1;
2077
+ color: rgb(4 120 87 / var(--tw-text-opacity, 1));
2078
+ }
1787
2079
  .text-foreground {
1788
2080
  color: hsl(var(--foreground));
1789
2081
  }
1790
2082
  .text-foreground\\/50 {
1791
2083
  color: hsl(var(--foreground) / 0.5);
1792
2084
  }
2085
+ .text-fuchsia-700 {
2086
+ --tw-text-opacity: 1;
2087
+ color: rgb(162 28 175 / var(--tw-text-opacity, 1));
2088
+ }
2089
+ .text-gray-100 {
2090
+ --tw-text-opacity: 1;
2091
+ color: rgb(243 244 246 / var(--tw-text-opacity, 1));
2092
+ }
2093
+ .text-gray-600 {
2094
+ --tw-text-opacity: 1;
2095
+ color: rgb(75 85 99 / var(--tw-text-opacity, 1));
2096
+ }
2097
+ .text-gray-700 {
2098
+ --tw-text-opacity: 1;
2099
+ color: rgb(55 65 81 / var(--tw-text-opacity, 1));
2100
+ }
2101
+ .text-gray-900 {
2102
+ --tw-text-opacity: 1;
2103
+ color: rgb(17 24 39 / var(--tw-text-opacity, 1));
2104
+ }
1793
2105
  .text-green-700 {
1794
2106
  --tw-text-opacity: 1;
1795
2107
  color: rgb(21 128 61 / var(--tw-text-opacity, 1));
@@ -1798,14 +2110,54 @@ body {
1798
2110
  --tw-text-opacity: 1;
1799
2111
  color: rgb(22 101 52 / var(--tw-text-opacity, 1));
1800
2112
  }
2113
+ .text-indigo-700 {
2114
+ --tw-text-opacity: 1;
2115
+ color: rgb(67 56 202 / var(--tw-text-opacity, 1));
2116
+ }
2117
+ .text-lime-700 {
2118
+ --tw-text-opacity: 1;
2119
+ color: rgb(77 124 15 / var(--tw-text-opacity, 1));
2120
+ }
2121
+ .text-lime-800 {
2122
+ --tw-text-opacity: 1;
2123
+ color: rgb(63 98 18 / var(--tw-text-opacity, 1));
2124
+ }
1801
2125
  .text-muted-foreground {
1802
2126
  color: hsl(var(--muted-foreground));
1803
2127
  }
1804
2128
  .text-muted-foreground\\/20 {
1805
2129
  color: hsl(var(--muted-foreground) / 0.2);
1806
2130
  }
1807
- .text-muted-foreground\\/50 {
1808
- color: hsl(var(--muted-foreground) / 0.5);
2131
+ .text-muted-foreground\\/40 {
2132
+ color: hsl(var(--muted-foreground) / 0.4);
2133
+ }
2134
+ .text-neutral-700 {
2135
+ --tw-text-opacity: 1;
2136
+ color: rgb(64 64 64 / var(--tw-text-opacity, 1));
2137
+ }
2138
+ .text-orange-500 {
2139
+ --tw-text-opacity: 1;
2140
+ color: rgb(249 115 22 / var(--tw-text-opacity, 1));
2141
+ }
2142
+ .text-orange-600 {
2143
+ --tw-text-opacity: 1;
2144
+ color: rgb(234 88 12 / var(--tw-text-opacity, 1));
2145
+ }
2146
+ .text-orange-700 {
2147
+ --tw-text-opacity: 1;
2148
+ color: rgb(194 65 12 / var(--tw-text-opacity, 1));
2149
+ }
2150
+ .text-orange-800 {
2151
+ --tw-text-opacity: 1;
2152
+ color: rgb(154 52 18 / var(--tw-text-opacity, 1));
2153
+ }
2154
+ .text-pink-600 {
2155
+ --tw-text-opacity: 1;
2156
+ color: rgb(219 39 119 / var(--tw-text-opacity, 1));
2157
+ }
2158
+ .text-pink-700 {
2159
+ --tw-text-opacity: 1;
2160
+ color: rgb(190 24 93 / var(--tw-text-opacity, 1));
1809
2161
  }
1810
2162
  .text-popover-foreground {
1811
2163
  color: hsl(var(--popover-foreground));
@@ -1816,6 +2168,10 @@ body {
1816
2168
  .text-primary-foreground {
1817
2169
  color: hsl(var(--primary-foreground));
1818
2170
  }
2171
+ .text-purple-600 {
2172
+ --tw-text-opacity: 1;
2173
+ color: rgb(147 51 234 / var(--tw-text-opacity, 1));
2174
+ }
1819
2175
  .text-purple-700 {
1820
2176
  --tw-text-opacity: 1;
1821
2177
  color: rgb(126 34 206 / var(--tw-text-opacity, 1));
@@ -1824,6 +2180,18 @@ body {
1824
2180
  --tw-text-opacity: 1;
1825
2181
  color: rgb(185 28 28 / var(--tw-text-opacity, 1));
1826
2182
  }
2183
+ .text-red-800 {
2184
+ --tw-text-opacity: 1;
2185
+ color: rgb(153 27 27 / var(--tw-text-opacity, 1));
2186
+ }
2187
+ .text-red-900 {
2188
+ --tw-text-opacity: 1;
2189
+ color: rgb(127 29 29 / var(--tw-text-opacity, 1));
2190
+ }
2191
+ .text-rose-700 {
2192
+ --tw-text-opacity: 1;
2193
+ color: rgb(190 18 60 / var(--tw-text-opacity, 1));
2194
+ }
1827
2195
  .text-secondary-foreground {
1828
2196
  color: hsl(var(--secondary-foreground));
1829
2197
  }
@@ -1833,6 +2201,42 @@ body {
1833
2201
  .text-sidebar-foreground\\/70 {
1834
2202
  color: hsl(var(--sidebar-foreground) / 0.7);
1835
2203
  }
2204
+ .text-sky-700 {
2205
+ --tw-text-opacity: 1;
2206
+ color: rgb(3 105 161 / var(--tw-text-opacity, 1));
2207
+ }
2208
+ .text-slate-700 {
2209
+ --tw-text-opacity: 1;
2210
+ color: rgb(51 65 85 / var(--tw-text-opacity, 1));
2211
+ }
2212
+ .text-stone-700 {
2213
+ --tw-text-opacity: 1;
2214
+ color: rgb(68 64 60 / var(--tw-text-opacity, 1));
2215
+ }
2216
+ .text-teal-600 {
2217
+ --tw-text-opacity: 1;
2218
+ color: rgb(13 148 136 / var(--tw-text-opacity, 1));
2219
+ }
2220
+ .text-teal-700 {
2221
+ --tw-text-opacity: 1;
2222
+ color: rgb(15 118 110 / var(--tw-text-opacity, 1));
2223
+ }
2224
+ .text-violet-700 {
2225
+ --tw-text-opacity: 1;
2226
+ color: rgb(109 40 217 / var(--tw-text-opacity, 1));
2227
+ }
2228
+ .text-yellow-700 {
2229
+ --tw-text-opacity: 1;
2230
+ color: rgb(161 98 7 / var(--tw-text-opacity, 1));
2231
+ }
2232
+ .text-yellow-800 {
2233
+ --tw-text-opacity: 1;
2234
+ color: rgb(133 77 14 / var(--tw-text-opacity, 1));
2235
+ }
2236
+ .text-zinc-700 {
2237
+ --tw-text-opacity: 1;
2238
+ color: rgb(63 63 70 / var(--tw-text-opacity, 1));
2239
+ }
1836
2240
  .underline-offset-4 {
1837
2241
  text-underline-offset: 4px;
1838
2242
  }
@@ -2157,6 +2561,11 @@ svg.icon {
2157
2561
  border-top-right-radius: calc(var(--radius) - 2px);
2158
2562
  border-bottom-right-radius: calc(var(--radius) - 2px);
2159
2563
  }
2564
+ .hover\\:scale-\\[1\\.02\\]:hover {
2565
+ --tw-scale-x: 1.02;
2566
+ --tw-scale-y: 1.02;
2567
+ transform: translate(var(--tw-translate-x), var(--tw-translate-y)) rotate(var(--tw-rotate)) skewX(var(--tw-skew-x)) skewY(var(--tw-skew-y)) scaleX(var(--tw-scale-x)) scaleY(var(--tw-scale-y));
2568
+ }
2160
2569
  .hover\\:border-primary:hover {
2161
2570
  border-color: hsl(var(--primary));
2162
2571
  }
@@ -2169,32 +2578,62 @@ svg.icon {
2169
2578
  .hover\\:bg-amber-100\\/80:hover {
2170
2579
  background-color: rgb(254 243 199 / 0.8);
2171
2580
  }
2581
+ .hover\\:bg-amber-50\\/80:hover {
2582
+ background-color: rgb(255 251 235 / 0.8);
2583
+ }
2172
2584
  .hover\\:bg-blue-100\\/80:hover {
2173
2585
  background-color: rgb(219 234 254 / 0.8);
2174
2586
  }
2587
+ .hover\\:bg-cyan-100\\/80:hover {
2588
+ background-color: rgb(207 250 254 / 0.8);
2589
+ }
2175
2590
  .hover\\:bg-destructive\\/80:hover {
2176
2591
  background-color: hsl(var(--destructive) / 0.8);
2177
2592
  }
2178
2593
  .hover\\:bg-destructive\\/90:hover {
2179
2594
  background-color: hsl(var(--destructive) / 0.9);
2180
2595
  }
2596
+ .hover\\:bg-emerald-100\\/80:hover {
2597
+ background-color: rgb(209 250 229 / 0.8);
2598
+ }
2599
+ .hover\\:bg-fuchsia-100\\/80:hover {
2600
+ background-color: rgb(250 232 255 / 0.8);
2601
+ }
2602
+ .hover\\:bg-gray-100\\/80:hover {
2603
+ background-color: rgb(243 244 246 / 0.8);
2604
+ }
2605
+ .hover\\:bg-gray-50\\/80:hover {
2606
+ background-color: rgb(249 250 251 / 0.8);
2607
+ }
2608
+ .hover\\:bg-gray-900\\/80:hover {
2609
+ background-color: rgb(17 24 39 / 0.8);
2610
+ }
2181
2611
  .hover\\:bg-green-100\\/80:hover {
2182
2612
  background-color: rgb(220 252 231 / 0.8);
2183
2613
  }
2614
+ .hover\\:bg-indigo-100\\/80:hover {
2615
+ background-color: rgb(224 231 255 / 0.8);
2616
+ }
2617
+ .hover\\:bg-lime-100\\/80:hover {
2618
+ background-color: rgb(236 252 203 / 0.8);
2619
+ }
2184
2620
  .hover\\:bg-muted:hover {
2185
2621
  background-color: hsl(var(--muted));
2186
2622
  }
2187
- .hover\\:bg-muted\\/10:hover {
2188
- background-color: hsl(var(--muted) / 0.1);
2623
+ .hover\\:bg-muted\\/5:hover {
2624
+ background-color: hsl(var(--muted) / 0.05);
2189
2625
  }
2190
2626
  .hover\\:bg-muted\\/50:hover {
2191
2627
  background-color: hsl(var(--muted) / 0.5);
2192
2628
  }
2193
- .hover\\:bg-muted\\/80:hover {
2194
- background-color: hsl(var(--muted) / 0.8);
2629
+ .hover\\:bg-neutral-100\\/80:hover {
2630
+ background-color: rgb(245 245 245 / 0.8);
2195
2631
  }
2196
- .hover\\:bg-primary\\/10:hover {
2197
- background-color: hsl(var(--primary) / 0.1);
2632
+ .hover\\:bg-orange-100\\/80:hover {
2633
+ background-color: rgb(255 237 213 / 0.8);
2634
+ }
2635
+ .hover\\:bg-pink-100\\/80:hover {
2636
+ background-color: rgb(252 231 243 / 0.8);
2198
2637
  }
2199
2638
  .hover\\:bg-primary\\/80:hover {
2200
2639
  background-color: hsl(var(--primary) / 0.8);
@@ -2208,6 +2647,9 @@ svg.icon {
2208
2647
  .hover\\:bg-red-100\\/80:hover {
2209
2648
  background-color: rgb(254 226 226 / 0.8);
2210
2649
  }
2650
+ .hover\\:bg-rose-100\\/80:hover {
2651
+ background-color: rgb(255 228 230 / 0.8);
2652
+ }
2211
2653
  .hover\\:bg-secondary:hover {
2212
2654
  background-color: hsl(var(--secondary));
2213
2655
  }
@@ -2217,14 +2659,38 @@ svg.icon {
2217
2659
  .hover\\:bg-sidebar-accent:hover {
2218
2660
  background-color: hsl(var(--sidebar-accent));
2219
2661
  }
2662
+ .hover\\:bg-sky-100\\/80:hover {
2663
+ background-color: rgb(224 242 254 / 0.8);
2664
+ }
2665
+ .hover\\:bg-slate-100\\/80:hover {
2666
+ background-color: rgb(241 245 249 / 0.8);
2667
+ }
2668
+ .hover\\:bg-stone-100\\/80:hover {
2669
+ background-color: rgb(245 245 244 / 0.8);
2670
+ }
2671
+ .hover\\:bg-teal-100\\/80:hover {
2672
+ background-color: rgb(204 251 241 / 0.8);
2673
+ }
2674
+ .hover\\:bg-violet-100\\/80:hover {
2675
+ background-color: rgb(237 233 254 / 0.8);
2676
+ }
2220
2677
  .hover\\:bg-violet-300:hover {
2221
2678
  --tw-bg-opacity: 1;
2222
2679
  background-color: rgb(196 181 253 / var(--tw-bg-opacity, 1));
2223
2680
  }
2681
+ .hover\\:bg-yellow-100\\/80:hover {
2682
+ background-color: rgb(254 249 195 / 0.8);
2683
+ }
2684
+ .hover\\:bg-yellow-50\\/80:hover {
2685
+ background-color: rgb(254 252 232 / 0.8);
2686
+ }
2224
2687
  .hover\\:bg-zinc-100:hover {
2225
2688
  --tw-bg-opacity: 1;
2226
2689
  background-color: rgb(244 244 245 / var(--tw-bg-opacity, 1));
2227
2690
  }
2691
+ .hover\\:bg-zinc-100\\/80:hover {
2692
+ background-color: rgb(244 244 245 / 0.8);
2693
+ }
2228
2694
  .hover\\:text-accent-foreground:hover {
2229
2695
  color: hsl(var(--accent-foreground));
2230
2696
  }
@@ -2360,6 +2826,9 @@ svg.icon {
2360
2826
  .group\\/menu-item:focus-within .group-focus-within\\/menu-item\\:opacity-100 {
2361
2827
  opacity: 1;
2362
2828
  }
2829
+ .group:hover .group-hover\\:text-foreground {
2830
+ color: hsl(var(--foreground));
2831
+ }
2363
2832
  .group\\/item:hover .group-hover\\/item\\:opacity-100 {
2364
2833
  opacity: 1;
2365
2834
  }
@@ -2991,12 +3460,34 @@ svg.icon {
2991
3460
  --tw-border-opacity: 1;
2992
3461
  border-color: rgb(22 101 52 / var(--tw-border-opacity, 1));
2993
3462
  }
3463
+ .dark\\:bg-amber-900\\/30:is(.dark *) {
3464
+ background-color: rgb(120 53 15 / 0.3);
3465
+ }
2994
3466
  .dark\\:bg-amber-900\\/50:is(.dark *) {
2995
3467
  background-color: rgb(120 53 15 / 0.5);
2996
3468
  }
2997
3469
  .dark\\:bg-blue-900\\/50:is(.dark *) {
2998
3470
  background-color: rgb(30 58 138 / 0.5);
2999
3471
  }
3472
+ .dark\\:bg-cyan-900\\/50:is(.dark *) {
3473
+ background-color: rgb(22 78 99 / 0.5);
3474
+ }
3475
+ .dark\\:bg-emerald-900\\/50:is(.dark *) {
3476
+ background-color: rgb(6 78 59 / 0.5);
3477
+ }
3478
+ .dark\\:bg-fuchsia-900\\/50:is(.dark *) {
3479
+ background-color: rgb(112 26 117 / 0.5);
3480
+ }
3481
+ .dark\\:bg-gray-100:is(.dark *) {
3482
+ --tw-bg-opacity: 1;
3483
+ background-color: rgb(243 244 246 / var(--tw-bg-opacity, 1));
3484
+ }
3485
+ .dark\\:bg-gray-900\\/30:is(.dark *) {
3486
+ background-color: rgb(17 24 39 / 0.3);
3487
+ }
3488
+ .dark\\:bg-gray-900\\/50:is(.dark *) {
3489
+ background-color: rgb(17 24 39 / 0.5);
3490
+ }
3000
3491
  .dark\\:bg-green-900\\/50:is(.dark *) {
3001
3492
  background-color: rgb(20 83 45 / 0.5);
3002
3493
  }
@@ -3004,47 +3495,193 @@ svg.icon {
3004
3495
  --tw-bg-opacity: 1;
3005
3496
  background-color: rgb(5 46 22 / var(--tw-bg-opacity, 1));
3006
3497
  }
3498
+ .dark\\:bg-indigo-900\\/50:is(.dark *) {
3499
+ background-color: rgb(49 46 129 / 0.5);
3500
+ }
3501
+ .dark\\:bg-lime-900\\/50:is(.dark *) {
3502
+ background-color: rgb(54 83 20 / 0.5);
3503
+ }
3007
3504
  .dark\\:bg-muted:is(.dark *) {
3008
3505
  background-color: hsl(var(--muted));
3009
3506
  }
3507
+ .dark\\:bg-neutral-900\\/50:is(.dark *) {
3508
+ background-color: rgb(23 23 23 / 0.5);
3509
+ }
3510
+ .dark\\:bg-orange-900\\/50:is(.dark *) {
3511
+ background-color: rgb(124 45 18 / 0.5);
3512
+ }
3513
+ .dark\\:bg-pink-900\\/50:is(.dark *) {
3514
+ background-color: rgb(131 24 67 / 0.5);
3515
+ }
3010
3516
  .dark\\:bg-purple-900\\/50:is(.dark *) {
3011
3517
  background-color: rgb(88 28 135 / 0.5);
3012
3518
  }
3013
3519
  .dark\\:bg-red-900\\/50:is(.dark *) {
3014
3520
  background-color: rgb(127 29 29 / 0.5);
3015
3521
  }
3522
+ .dark\\:bg-rose-900\\/50:is(.dark *) {
3523
+ background-color: rgb(136 19 55 / 0.5);
3524
+ }
3525
+ .dark\\:bg-sky-900\\/50:is(.dark *) {
3526
+ background-color: rgb(12 74 110 / 0.5);
3527
+ }
3528
+ .dark\\:bg-slate-900\\/50:is(.dark *) {
3529
+ background-color: rgb(15 23 42 / 0.5);
3530
+ }
3531
+ .dark\\:bg-stone-900\\/50:is(.dark *) {
3532
+ background-color: rgb(28 25 23 / 0.5);
3533
+ }
3534
+ .dark\\:bg-teal-900\\/50:is(.dark *) {
3535
+ background-color: rgb(19 78 74 / 0.5);
3536
+ }
3537
+ .dark\\:bg-violet-900\\/50:is(.dark *) {
3538
+ background-color: rgb(76 29 149 / 0.5);
3539
+ }
3016
3540
  .dark\\:bg-white\\/5:is(.dark *) {
3017
3541
  background-color: rgb(255 255 255 / 0.05);
3018
3542
  }
3543
+ .dark\\:bg-yellow-900\\/30:is(.dark *) {
3544
+ background-color: rgb(113 63 18 / 0.3);
3545
+ }
3546
+ .dark\\:bg-yellow-900\\/50:is(.dark *) {
3547
+ background-color: rgb(113 63 18 / 0.5);
3548
+ }
3019
3549
  .dark\\:bg-zinc-600:is(.dark *) {
3020
3550
  --tw-bg-opacity: 1;
3021
3551
  background-color: rgb(82 82 91 / var(--tw-bg-opacity, 1));
3022
3552
  }
3553
+ .dark\\:bg-zinc-900\\/50:is(.dark *) {
3554
+ background-color: rgb(24 24 27 / 0.5);
3555
+ }
3556
+ .dark\\:text-amber-200:is(.dark *) {
3557
+ --tw-text-opacity: 1;
3558
+ color: rgb(253 230 138 / var(--tw-text-opacity, 1));
3559
+ }
3023
3560
  .dark\\:text-amber-300:is(.dark *) {
3024
3561
  --tw-text-opacity: 1;
3025
3562
  color: rgb(252 211 77 / var(--tw-text-opacity, 1));
3026
3563
  }
3564
+ .dark\\:text-blue-200:is(.dark *) {
3565
+ --tw-text-opacity: 1;
3566
+ color: rgb(191 219 254 / var(--tw-text-opacity, 1));
3567
+ }
3027
3568
  .dark\\:text-blue-300:is(.dark *) {
3028
3569
  --tw-text-opacity: 1;
3029
3570
  color: rgb(147 197 253 / var(--tw-text-opacity, 1));
3030
3571
  }
3031
- .dark\\:text-green-200:is(.dark *) {
3572
+ .dark\\:text-cyan-300:is(.dark *) {
3032
3573
  --tw-text-opacity: 1;
3033
- color: rgb(187 247 208 / var(--tw-text-opacity, 1));
3574
+ color: rgb(103 232 249 / var(--tw-text-opacity, 1));
3034
3575
  }
3035
- .dark\\:text-green-300:is(.dark *) {
3576
+ .dark\\:text-emerald-300:is(.dark *) {
3036
3577
  --tw-text-opacity: 1;
3037
- color: rgb(134 239 172 / var(--tw-text-opacity, 1));
3578
+ color: rgb(110 231 183 / var(--tw-text-opacity, 1));
3038
3579
  }
3039
- .dark\\:text-purple-300:is(.dark *) {
3580
+ .dark\\:text-fuchsia-300:is(.dark *) {
3040
3581
  --tw-text-opacity: 1;
3041
- color: rgb(216 180 254 / var(--tw-text-opacity, 1));
3582
+ color: rgb(240 171 252 / var(--tw-text-opacity, 1));
3042
3583
  }
3043
- .dark\\:text-red-300:is(.dark *) {
3584
+ .dark\\:text-gray-100:is(.dark *) {
3044
3585
  --tw-text-opacity: 1;
3045
- color: rgb(252 165 165 / var(--tw-text-opacity, 1));
3586
+ color: rgb(243 244 246 / var(--tw-text-opacity, 1));
3046
3587
  }
3047
- .dark\\:hover\\:bg-white\\/10:hover:is(.dark *) {
3588
+ .dark\\:text-gray-200:is(.dark *) {
3589
+ --tw-text-opacity: 1;
3590
+ color: rgb(229 231 235 / var(--tw-text-opacity, 1));
3591
+ }
3592
+ .dark\\:text-gray-300:is(.dark *) {
3593
+ --tw-text-opacity: 1;
3594
+ color: rgb(209 213 219 / var(--tw-text-opacity, 1));
3595
+ }
3596
+ .dark\\:text-gray-900:is(.dark *) {
3597
+ --tw-text-opacity: 1;
3598
+ color: rgb(17 24 39 / var(--tw-text-opacity, 1));
3599
+ }
3600
+ .dark\\:text-green-200:is(.dark *) {
3601
+ --tw-text-opacity: 1;
3602
+ color: rgb(187 247 208 / var(--tw-text-opacity, 1));
3603
+ }
3604
+ .dark\\:text-green-300:is(.dark *) {
3605
+ --tw-text-opacity: 1;
3606
+ color: rgb(134 239 172 / var(--tw-text-opacity, 1));
3607
+ }
3608
+ .dark\\:text-indigo-300:is(.dark *) {
3609
+ --tw-text-opacity: 1;
3610
+ color: rgb(165 180 252 / var(--tw-text-opacity, 1));
3611
+ }
3612
+ .dark\\:text-lime-200:is(.dark *) {
3613
+ --tw-text-opacity: 1;
3614
+ color: rgb(217 249 157 / var(--tw-text-opacity, 1));
3615
+ }
3616
+ .dark\\:text-lime-300:is(.dark *) {
3617
+ --tw-text-opacity: 1;
3618
+ color: rgb(190 242 100 / var(--tw-text-opacity, 1));
3619
+ }
3620
+ .dark\\:text-neutral-300:is(.dark *) {
3621
+ --tw-text-opacity: 1;
3622
+ color: rgb(212 212 212 / var(--tw-text-opacity, 1));
3623
+ }
3624
+ .dark\\:text-orange-200:is(.dark *) {
3625
+ --tw-text-opacity: 1;
3626
+ color: rgb(254 215 170 / var(--tw-text-opacity, 1));
3627
+ }
3628
+ .dark\\:text-orange-300:is(.dark *) {
3629
+ --tw-text-opacity: 1;
3630
+ color: rgb(253 186 116 / var(--tw-text-opacity, 1));
3631
+ }
3632
+ .dark\\:text-pink-300:is(.dark *) {
3633
+ --tw-text-opacity: 1;
3634
+ color: rgb(249 168 212 / var(--tw-text-opacity, 1));
3635
+ }
3636
+ .dark\\:text-purple-300:is(.dark *) {
3637
+ --tw-text-opacity: 1;
3638
+ color: rgb(216 180 254 / var(--tw-text-opacity, 1));
3639
+ }
3640
+ .dark\\:text-red-200:is(.dark *) {
3641
+ --tw-text-opacity: 1;
3642
+ color: rgb(254 202 202 / var(--tw-text-opacity, 1));
3643
+ }
3644
+ .dark\\:text-red-300:is(.dark *) {
3645
+ --tw-text-opacity: 1;
3646
+ color: rgb(252 165 165 / var(--tw-text-opacity, 1));
3647
+ }
3648
+ .dark\\:text-rose-300:is(.dark *) {
3649
+ --tw-text-opacity: 1;
3650
+ color: rgb(253 164 175 / var(--tw-text-opacity, 1));
3651
+ }
3652
+ .dark\\:text-sky-300:is(.dark *) {
3653
+ --tw-text-opacity: 1;
3654
+ color: rgb(125 211 252 / var(--tw-text-opacity, 1));
3655
+ }
3656
+ .dark\\:text-slate-300:is(.dark *) {
3657
+ --tw-text-opacity: 1;
3658
+ color: rgb(203 213 225 / var(--tw-text-opacity, 1));
3659
+ }
3660
+ .dark\\:text-stone-300:is(.dark *) {
3661
+ --tw-text-opacity: 1;
3662
+ color: rgb(214 211 209 / var(--tw-text-opacity, 1));
3663
+ }
3664
+ .dark\\:text-teal-300:is(.dark *) {
3665
+ --tw-text-opacity: 1;
3666
+ color: rgb(94 234 212 / var(--tw-text-opacity, 1));
3667
+ }
3668
+ .dark\\:text-violet-300:is(.dark *) {
3669
+ --tw-text-opacity: 1;
3670
+ color: rgb(196 181 253 / var(--tw-text-opacity, 1));
3671
+ }
3672
+ .dark\\:text-yellow-200:is(.dark *) {
3673
+ --tw-text-opacity: 1;
3674
+ color: rgb(254 240 138 / var(--tw-text-opacity, 1));
3675
+ }
3676
+ .dark\\:text-yellow-300:is(.dark *) {
3677
+ --tw-text-opacity: 1;
3678
+ color: rgb(253 224 71 / var(--tw-text-opacity, 1));
3679
+ }
3680
+ .dark\\:text-zinc-300:is(.dark *) {
3681
+ --tw-text-opacity: 1;
3682
+ color: rgb(212 212 216 / var(--tw-text-opacity, 1));
3683
+ }
3684
+ .dark\\:hover\\:bg-white\\/10:hover:is(.dark *) {
3048
3685
  background-color: rgb(255 255 255 / 0.1);
3049
3686
  }
3050
3687
  .dark\\:hover\\:bg-zinc-500:hover:is(.dark *) {
@@ -3415,7 +4052,172 @@ svg.icon {
3415
4052
  `);
3416
4053
 
3417
4054
  // src/components/DataViews.tsx
3418
- import { useState as useState5, useEffect as useEffect2 } from "react";
4055
+ import { useState as useState6, useEffect as useEffect2 } from "react";
4056
+
4057
+ // src/lib/colors.ts
4058
+ var PRESET_COLORS = [
4059
+ { name: "Red", value: "red" },
4060
+ { name: "Blue", value: "blue" },
4061
+ { name: "Green", value: "green" },
4062
+ { name: "Yellow", value: "yellow" },
4063
+ { name: "Orange", value: "orange" },
4064
+ { name: "Purple", value: "purple" },
4065
+ { name: "Pink", value: "pink" },
4066
+ { name: "Brown", value: "brown" },
4067
+ { name: "Gray", value: "gray" },
4068
+ { name: "Black", value: "black" },
4069
+ { name: "White", value: "white" },
4070
+ { name: "Cyan", value: "cyan" },
4071
+ { name: "Magenta", value: "magenta" },
4072
+ { name: "Lime", value: "lime" },
4073
+ { name: "Indigo", value: "indigo" },
4074
+ { name: "Teal", value: "teal" },
4075
+ { name: "Violet", value: "violet" },
4076
+ { name: "Rose", value: "rose" },
4077
+ { name: "Fuchsia", value: "fuchsia" },
4078
+ { name: "Sky", value: "sky" },
4079
+ { name: "Emerald", value: "emerald" },
4080
+ { name: "Amber", value: "amber" },
4081
+ { name: "Slate", value: "slate" },
4082
+ { name: "Zinc", value: "zinc" },
4083
+ { name: "Stone", value: "stone" },
4084
+ { name: "Neutral", value: "neutral" },
4085
+ { name: "Crimson", value: "crimson" },
4086
+ { name: "Navy", value: "navy" },
4087
+ { name: "Maroon", value: "maroon" },
4088
+ { name: "Olive", value: "olive" },
4089
+ { name: "Coral", value: "coral" },
4090
+ { name: "Salmon", value: "salmon" },
4091
+ { name: "Gold", value: "gold" },
4092
+ { name: "Silver", value: "silver" },
4093
+ { name: "Turquoise", value: "turquoise" },
4094
+ { name: "Aqua", value: "aqua" },
4095
+ { name: "Mint", value: "mint" },
4096
+ { name: "Lavender", value: "lavender" },
4097
+ { name: "Peach", value: "peach" },
4098
+ { name: "Beige", value: "beige" },
4099
+ { name: "Ivory", value: "ivory" },
4100
+ { name: "Khaki", value: "khaki" },
4101
+ { name: "Plum", value: "plum" },
4102
+ { name: "Orchid", value: "orchid" },
4103
+ { name: "Tan", value: "tan" },
4104
+ { name: "Chocolate", value: "chocolate" },
4105
+ { name: "Sienna", value: "sienna" },
4106
+ { name: "Burgundy", value: "burgundy" },
4107
+ { name: "Mustard", value: "mustard" },
4108
+ { name: "Charcoal", value: "charcoal" }
4109
+ ];
4110
+ var BADGE_COLOR_MAP = {
4111
+ gray: "bg-gray-100 text-gray-700 dark:bg-gray-900/50 dark:text-gray-300 hover:bg-gray-100/80",
4112
+ slate: "bg-slate-100 text-slate-700 dark:bg-slate-900/50 dark:text-slate-300 hover:bg-slate-100/80",
4113
+ zinc: "bg-zinc-100 text-zinc-700 dark:bg-zinc-900/50 dark:text-zinc-300 hover:bg-zinc-100/80",
4114
+ neutral: "bg-neutral-100 text-neutral-700 dark:bg-neutral-900/50 dark:text-neutral-300 hover:bg-neutral-100/80",
4115
+ stone: "bg-stone-100 text-stone-700 dark:bg-stone-900/50 dark:text-stone-300 hover:bg-stone-100/80",
4116
+ red: "bg-red-100 text-red-700 dark:bg-red-900/50 dark:text-red-300 hover:bg-red-100/80",
4117
+ orange: "bg-orange-100 text-orange-700 dark:bg-orange-900/50 dark:text-orange-300 hover:bg-orange-100/80",
4118
+ amber: "bg-amber-100 text-amber-700 dark:bg-amber-900/50 dark:text-amber-300 hover:bg-amber-100/80",
4119
+ yellow: "bg-yellow-100 text-yellow-700 dark:bg-yellow-900/50 dark:text-yellow-300 hover:bg-yellow-100/80",
4120
+ lime: "bg-lime-100 text-lime-700 dark:bg-lime-900/50 dark:text-lime-300 hover:bg-lime-100/80",
4121
+ green: "bg-green-100 text-green-700 dark:bg-green-900/50 dark:text-green-300 hover:bg-green-100/80",
4122
+ emerald: "bg-emerald-100 text-emerald-700 dark:bg-emerald-900/50 dark:text-emerald-300 hover:bg-emerald-100/80",
4123
+ teal: "bg-teal-100 text-teal-700 dark:bg-teal-900/50 dark:text-teal-300 hover:bg-teal-100/80",
4124
+ cyan: "bg-cyan-100 text-cyan-700 dark:bg-cyan-900/50 dark:text-cyan-300 hover:bg-cyan-100/80",
4125
+ sky: "bg-sky-100 text-sky-700 dark:bg-sky-900/50 dark:text-sky-300 hover:bg-sky-100/80",
4126
+ blue: "bg-blue-100 text-blue-700 dark:bg-blue-900/50 dark:text-blue-300 hover:bg-blue-100/80",
4127
+ indigo: "bg-indigo-100 text-indigo-700 dark:bg-indigo-900/50 dark:text-indigo-300 hover:bg-indigo-100/80",
4128
+ violet: "bg-violet-100 text-violet-700 dark:bg-violet-900/50 dark:text-violet-300 hover:bg-violet-100/80",
4129
+ purple: "bg-purple-100 text-purple-700 dark:bg-purple-900/50 dark:text-purple-300 hover:bg-purple-100/80",
4130
+ fuchsia: "bg-fuchsia-100 text-fuchsia-700 dark:bg-fuchsia-900/50 dark:text-fuchsia-300 hover:bg-fuchsia-100/80",
4131
+ pink: "bg-pink-100 text-pink-700 dark:bg-pink-900/50 dark:text-pink-300 hover:bg-pink-100/80",
4132
+ rose: "bg-rose-100 text-rose-700 dark:bg-rose-900/50 dark:text-rose-300 hover:bg-rose-100/80",
4133
+ brown: "bg-amber-100 text-amber-800 dark:bg-amber-900/50 dark:text-amber-200 hover:bg-amber-100/80",
4134
+ // Additional colors
4135
+ crimson: "bg-red-100 text-red-800 dark:bg-red-900/50 dark:text-red-200 hover:bg-red-100/80",
4136
+ navy: "bg-blue-100 text-blue-900 dark:bg-blue-900/50 dark:text-blue-200 hover:bg-blue-100/80",
4137
+ maroon: "bg-red-100 text-red-900 dark:bg-red-900/50 dark:text-red-200 hover:bg-red-100/80",
4138
+ olive: "bg-lime-100 text-lime-800 dark:bg-lime-900/50 dark:text-lime-200 hover:bg-lime-100/80",
4139
+ coral: "bg-orange-100 text-orange-600 dark:bg-orange-900/50 dark:text-orange-300 hover:bg-orange-100/80",
4140
+ salmon: "bg-pink-100 text-pink-600 dark:bg-pink-900/50 dark:text-pink-300 hover:bg-pink-100/80",
4141
+ gold: "bg-yellow-100 text-yellow-800 dark:bg-yellow-900/50 dark:text-yellow-200 hover:bg-yellow-100/80",
4142
+ silver: "bg-gray-100 text-gray-600 dark:bg-gray-900/50 dark:text-gray-300 hover:bg-gray-100/80",
4143
+ turquoise: "bg-teal-100 text-teal-600 dark:bg-teal-900/50 dark:text-teal-300 hover:bg-teal-100/80",
4144
+ aqua: "bg-cyan-100 text-cyan-600 dark:bg-cyan-900/50 dark:text-cyan-300 hover:bg-cyan-100/80",
4145
+ mint: "bg-emerald-100 text-emerald-600 dark:bg-emerald-900/50 dark:text-emerald-300 hover:bg-emerald-100/80",
4146
+ lavender: "bg-purple-100 text-purple-600 dark:bg-purple-900/50 dark:text-purple-300 hover:bg-purple-100/80",
4147
+ peach: "bg-orange-100 text-orange-500 dark:bg-orange-900/50 dark:text-orange-300 hover:bg-orange-100/80",
4148
+ beige: "bg-amber-50 text-amber-700 dark:bg-amber-900/30 dark:text-amber-300 hover:bg-amber-50/80",
4149
+ ivory: "bg-yellow-50 text-yellow-700 dark:bg-yellow-900/30 dark:text-yellow-300 hover:bg-yellow-50/80",
4150
+ khaki: "bg-yellow-100 text-yellow-700 dark:bg-yellow-900/50 dark:text-yellow-300 hover:bg-yellow-100/80",
4151
+ plum: "bg-purple-100 text-purple-700 dark:bg-purple-900/50 dark:text-purple-300 hover:bg-purple-100/80",
4152
+ orchid: "bg-fuchsia-100 text-fuchsia-700 dark:bg-fuchsia-900/50 dark:text-fuchsia-300 hover:bg-fuchsia-100/80",
4153
+ tan: "bg-orange-100 text-orange-700 dark:bg-orange-900/50 dark:text-orange-300 hover:bg-orange-100/80",
4154
+ chocolate: "bg-amber-100 text-amber-800 dark:bg-amber-900/50 dark:text-amber-200 hover:bg-amber-100/80",
4155
+ sienna: "bg-orange-100 text-orange-800 dark:bg-orange-900/50 dark:text-orange-200 hover:bg-orange-100/80",
4156
+ burgundy: "bg-red-100 text-red-900 dark:bg-red-900/50 dark:text-red-200 hover:bg-red-100/80",
4157
+ mustard: "bg-yellow-100 text-yellow-800 dark:bg-yellow-900/50 dark:text-yellow-200 hover:bg-yellow-100/80",
4158
+ charcoal: "bg-gray-100 text-gray-900 dark:bg-gray-900/50 dark:text-gray-200 hover:bg-gray-100/80",
4159
+ black: "bg-gray-900 text-gray-100 dark:bg-gray-100 dark:text-gray-900 hover:bg-gray-900/80",
4160
+ white: "bg-gray-50 text-gray-900 dark:bg-gray-900/30 dark:text-gray-100 hover:bg-gray-50/80",
4161
+ magenta: "bg-fuchsia-100 text-fuchsia-700 dark:bg-fuchsia-900/50 dark:text-fuchsia-300 hover:bg-fuchsia-100/80"
4162
+ };
4163
+ var DOT_COLOR_MAP = {
4164
+ gray: "bg-gray-400",
4165
+ slate: "bg-slate-400",
4166
+ zinc: "bg-zinc-400",
4167
+ neutral: "bg-neutral-400",
4168
+ stone: "bg-stone-400",
4169
+ red: "bg-red-500",
4170
+ orange: "bg-orange-500",
4171
+ amber: "bg-amber-500",
4172
+ yellow: "bg-yellow-500",
4173
+ lime: "bg-lime-500",
4174
+ green: "bg-green-500",
4175
+ emerald: "bg-emerald-500",
4176
+ teal: "bg-teal-500",
4177
+ cyan: "bg-cyan-500",
4178
+ sky: "bg-sky-500",
4179
+ blue: "bg-blue-500",
4180
+ indigo: "bg-indigo-500",
4181
+ violet: "bg-violet-500",
4182
+ purple: "bg-purple-500",
4183
+ fuchsia: "bg-fuchsia-500",
4184
+ pink: "bg-pink-500",
4185
+ rose: "bg-rose-500",
4186
+ brown: "bg-amber-700",
4187
+ crimson: "bg-red-700",
4188
+ navy: "bg-blue-900",
4189
+ maroon: "bg-red-900",
4190
+ olive: "bg-lime-700",
4191
+ coral: "bg-orange-400",
4192
+ salmon: "bg-pink-400",
4193
+ gold: "bg-yellow-600",
4194
+ silver: "bg-gray-400",
4195
+ turquoise: "bg-teal-400",
4196
+ aqua: "bg-cyan-400",
4197
+ mint: "bg-emerald-400",
4198
+ lavender: "bg-purple-400",
4199
+ peach: "bg-orange-300",
4200
+ beige: "bg-amber-200",
4201
+ ivory: "bg-yellow-100",
4202
+ khaki: "bg-yellow-400",
4203
+ plum: "bg-purple-600",
4204
+ orchid: "bg-fuchsia-400",
4205
+ tan: "bg-orange-400",
4206
+ chocolate: "bg-amber-700",
4207
+ sienna: "bg-orange-700",
4208
+ burgundy: "bg-red-900",
4209
+ mustard: "bg-yellow-700",
4210
+ charcoal: "bg-gray-800",
4211
+ black: "bg-gray-900",
4212
+ white: "bg-gray-100",
4213
+ magenta: "bg-fuchsia-600"
4214
+ };
4215
+ function getBadgeColor(color) {
4216
+ return BADGE_COLOR_MAP[color || "gray"] || BADGE_COLOR_MAP.gray;
4217
+ }
4218
+ function getDotColor(color) {
4219
+ return DOT_COLOR_MAP[color || "gray"] || DOT_COLOR_MAP.gray;
4220
+ }
3419
4221
 
3420
4222
  // src/lib/schema.ts
3421
4223
  var tableSchema = {
@@ -3521,7 +4323,8 @@ TabsContent.displayName = TabsPrimitive.Content.displayName;
3521
4323
  import { LayoutGrid, Columns, Calendar as CalendarIcon, Image, FileText } from "lucide-react";
3522
4324
 
3523
4325
  // src/components/views/GridView.tsx
3524
- import { Plus, Trash2, Eye, Pencil } from "lucide-react";
4326
+ import { useState, useMemo } from "react";
4327
+ import { Plus, Trash2, Eye, Pencil, ArrowUpDown, Filter, X } from "lucide-react";
3525
4328
 
3526
4329
  // src/components/ui/button.tsx
3527
4330
  import * as React2 from "react";
@@ -3718,23 +4521,952 @@ function Badge(_a) {
3718
4521
  return /* @__PURE__ */ jsx5("div", __spreadValues({ className: cn(badgeVariants({ variant }), className) }, props));
3719
4522
  }
3720
4523
 
3721
- // src/components/views/GridView.tsx
4524
+ // src/components/ui/select.tsx
4525
+ import * as React5 from "react";
4526
+ import * as SelectPrimitive from "@radix-ui/react-select";
4527
+ import { Check as Check2, ChevronDown, ChevronUp } from "lucide-react";
3722
4528
  import { jsx as jsx6, jsxs } from "react/jsx-runtime";
3723
- var BADGE_COLOR_MAP = {
3724
- gray: "bg-muted text-muted-foreground",
3725
- blue: "bg-blue-100 text-blue-700 dark:bg-blue-900/50 dark:text-blue-300",
3726
- green: "bg-green-100 text-green-700 dark:bg-green-900/50 dark:text-green-300",
3727
- yellow: "bg-amber-100 text-amber-700 dark:bg-amber-900/50 dark:text-amber-300",
3728
- red: "bg-red-100 text-red-700 dark:bg-red-900/50 dark:text-red-300",
3729
- purple: "bg-purple-100 text-purple-700 dark:bg-purple-900/50 dark:text-purple-300"
4529
+ var Select = SelectPrimitive.Root;
4530
+ var SelectValue = SelectPrimitive.Value;
4531
+ var SelectTrigger = React5.forwardRef((_a, ref) => {
4532
+ var _b = _a, { className, children } = _b, props = __objRest(_b, ["className", "children"]);
4533
+ return /* @__PURE__ */ jsxs(
4534
+ SelectPrimitive.Trigger,
4535
+ __spreadProps(__spreadValues({
4536
+ ref,
4537
+ className: cn(
4538
+ "flex h-9 w-full items-center justify-between whitespace-nowrap rounded-md border border-input bg-transparent px-3 py-2 text-sm shadow-sm ring-offset-background data-[placeholder]:text-muted-foreground focus:outline-none focus:ring-1 focus:ring-ring disabled:cursor-not-allowed disabled:opacity-50 [&>span]:line-clamp-1",
4539
+ className
4540
+ )
4541
+ }, props), {
4542
+ children: [
4543
+ children,
4544
+ /* @__PURE__ */ jsx6(SelectPrimitive.Icon, { asChild: true, children: /* @__PURE__ */ jsx6(ChevronDown, { className: "h-4 w-4 opacity-50" }) })
4545
+ ]
4546
+ })
4547
+ );
4548
+ });
4549
+ SelectTrigger.displayName = SelectPrimitive.Trigger.displayName;
4550
+ var SelectScrollUpButton = React5.forwardRef((_a, ref) => {
4551
+ var _b = _a, { className } = _b, props = __objRest(_b, ["className"]);
4552
+ return /* @__PURE__ */ jsx6(
4553
+ SelectPrimitive.ScrollUpButton,
4554
+ __spreadProps(__spreadValues({
4555
+ ref,
4556
+ className: cn(
4557
+ "flex cursor-default items-center justify-center py-1",
4558
+ className
4559
+ )
4560
+ }, props), {
4561
+ children: /* @__PURE__ */ jsx6(ChevronUp, { className: "h-4 w-4" })
4562
+ })
4563
+ );
4564
+ });
4565
+ SelectScrollUpButton.displayName = SelectPrimitive.ScrollUpButton.displayName;
4566
+ var SelectScrollDownButton = React5.forwardRef((_a, ref) => {
4567
+ var _b = _a, { className } = _b, props = __objRest(_b, ["className"]);
4568
+ return /* @__PURE__ */ jsx6(
4569
+ SelectPrimitive.ScrollDownButton,
4570
+ __spreadProps(__spreadValues({
4571
+ ref,
4572
+ className: cn(
4573
+ "flex cursor-default items-center justify-center py-1",
4574
+ className
4575
+ )
4576
+ }, props), {
4577
+ children: /* @__PURE__ */ jsx6(ChevronDown, { className: "h-4 w-4" })
4578
+ })
4579
+ );
4580
+ });
4581
+ SelectScrollDownButton.displayName = SelectPrimitive.ScrollDownButton.displayName;
4582
+ var SelectContent = React5.forwardRef((_a, ref) => {
4583
+ var _b = _a, { className, children, position = "popper" } = _b, props = __objRest(_b, ["className", "children", "position"]);
4584
+ return /* @__PURE__ */ jsx6(SelectPrimitive.Portal, { children: /* @__PURE__ */ jsxs(
4585
+ SelectPrimitive.Content,
4586
+ __spreadProps(__spreadValues({
4587
+ ref,
4588
+ className: cn(
4589
+ "relative z-50 max-h-[--radix-select-content-available-height] min-w-[8rem] overflow-y-auto overflow-x-hidden rounded-md border bg-popover text-popover-foreground shadow-md data-[state=open]:animate-in data-[state=closed]:animate-out data-[state=closed]:fade-out-0 data-[state=open]:fade-in-0 data-[state=closed]:zoom-out-95 data-[state=open]:zoom-in-95 data-[side=bottom]:slide-in-from-top-2 data-[side=left]:slide-in-from-right-2 data-[side=right]:slide-in-from-left-2 data-[side=top]:slide-in-from-bottom-2 origin-[--radix-select-content-transform-origin]",
4590
+ position === "popper" && "data-[side=bottom]:translate-y-1 data-[side=left]:-translate-x-1 data-[side=right]:translate-x-1 data-[side=top]:-translate-y-1",
4591
+ className
4592
+ ),
4593
+ position
4594
+ }, props), {
4595
+ children: [
4596
+ /* @__PURE__ */ jsx6(SelectScrollUpButton, {}),
4597
+ /* @__PURE__ */ jsx6(
4598
+ SelectPrimitive.Viewport,
4599
+ {
4600
+ className: cn(
4601
+ "p-1",
4602
+ position === "popper" && "h-[var(--radix-select-trigger-height)] w-full min-w-[var(--radix-select-trigger-width)]"
4603
+ ),
4604
+ children
4605
+ }
4606
+ ),
4607
+ /* @__PURE__ */ jsx6(SelectScrollDownButton, {})
4608
+ ]
4609
+ })
4610
+ ) });
4611
+ });
4612
+ SelectContent.displayName = SelectPrimitive.Content.displayName;
4613
+ var SelectLabel = React5.forwardRef((_a, ref) => {
4614
+ var _b = _a, { className } = _b, props = __objRest(_b, ["className"]);
4615
+ return /* @__PURE__ */ jsx6(
4616
+ SelectPrimitive.Label,
4617
+ __spreadValues({
4618
+ ref,
4619
+ className: cn("px-2 py-1.5 text-sm font-semibold", className)
4620
+ }, props)
4621
+ );
4622
+ });
4623
+ SelectLabel.displayName = SelectPrimitive.Label.displayName;
4624
+ var SelectItem = React5.forwardRef((_a, ref) => {
4625
+ var _b = _a, { className, children } = _b, props = __objRest(_b, ["className", "children"]);
4626
+ return /* @__PURE__ */ jsxs(
4627
+ SelectPrimitive.Item,
4628
+ __spreadProps(__spreadValues({
4629
+ ref,
4630
+ className: cn(
4631
+ "relative flex w-full cursor-default select-none items-center rounded-sm py-1.5 pl-2 pr-8 text-sm outline-none focus:bg-accent focus:text-accent-foreground data-[disabled]:pointer-events-none data-[disabled]:opacity-50",
4632
+ className
4633
+ )
4634
+ }, props), {
4635
+ children: [
4636
+ /* @__PURE__ */ jsx6("span", { className: "absolute right-2 flex h-3.5 w-3.5 items-center justify-center", children: /* @__PURE__ */ jsx6(SelectPrimitive.ItemIndicator, { children: /* @__PURE__ */ jsx6(Check2, { className: "h-4 w-4" }) }) }),
4637
+ /* @__PURE__ */ jsx6(SelectPrimitive.ItemText, { children })
4638
+ ]
4639
+ })
4640
+ );
4641
+ });
4642
+ SelectItem.displayName = SelectPrimitive.Item.displayName;
4643
+ var SelectSeparator = React5.forwardRef((_a, ref) => {
4644
+ var _b = _a, { className } = _b, props = __objRest(_b, ["className"]);
4645
+ return /* @__PURE__ */ jsx6(
4646
+ SelectPrimitive.Separator,
4647
+ __spreadValues({
4648
+ ref,
4649
+ className: cn("-mx-1 my-1 h-px bg-muted", className)
4650
+ }, props)
4651
+ );
4652
+ });
4653
+ SelectSeparator.displayName = SelectPrimitive.Separator.displayName;
4654
+
4655
+ // src/components/ui/input.tsx
4656
+ import * as React6 from "react";
4657
+ import { jsx as jsx7 } from "react/jsx-runtime";
4658
+ var Input = React6.forwardRef(
4659
+ (_a, ref) => {
4660
+ var _b = _a, { className, type } = _b, props = __objRest(_b, ["className", "type"]);
4661
+ return /* @__PURE__ */ jsx7(
4662
+ "input",
4663
+ __spreadValues({
4664
+ type,
4665
+ className: cn(
4666
+ "flex h-9 w-full rounded-md border border-input bg-transparent px-3 py-1 text-base shadow-sm transition-colors file:border-0 file:bg-transparent file:text-sm file:font-medium file:text-foreground placeholder:text-muted-foreground focus-visible:outline-none focus-visible:ring-1 focus-visible:ring-ring disabled:cursor-not-allowed disabled:opacity-50 md:text-sm",
4667
+ className
4668
+ ),
4669
+ ref
4670
+ }, props)
4671
+ );
4672
+ }
4673
+ );
4674
+ Input.displayName = "Input";
4675
+
4676
+ // src/components/I18nProvider.tsx
4677
+ import { createContext, useContext } from "react";
4678
+
4679
+ // src/lib/i18n.ts
4680
+ var LANGUAGES = {
4681
+ en: { name: "English", dir: "ltr" },
4682
+ es: { name: "Espa\xF1ol", dir: "ltr" },
4683
+ zh: { name: "\u4E2D\u6587", dir: "ltr" },
4684
+ ar: { name: "\u0627\u0644\u0639\u0631\u0628\u064A\u0629", dir: "rtl" },
4685
+ hi: { name: "\u0939\u093F\u0928\u094D\u0926\u0940", dir: "ltr" },
4686
+ fr: { name: "Fran\xE7ais", dir: "ltr" },
4687
+ pt: { name: "Portugu\xEAs", dir: "ltr" },
4688
+ ru: { name: "\u0420\u0443\u0441\u0441\u043A\u0438\u0439", dir: "ltr" },
4689
+ de: { name: "Deutsch", dir: "ltr" },
4690
+ ja: { name: "\u65E5\u672C\u8A9E", dir: "ltr" }
3730
4691
  };
4692
+ var translations = {
4693
+ en: {
4694
+ // Common
4695
+ add: "Add",
4696
+ edit: "Edit",
4697
+ delete: "Delete",
4698
+ view: "View",
4699
+ save: "Save",
4700
+ cancel: "Cancel",
4701
+ close: "Close",
4702
+ search: "Search",
4703
+ filter: "Filter",
4704
+ sort: "Sort",
4705
+ // Records
4706
+ addRecord: "Add Record",
4707
+ createRecord: "Create Record",
4708
+ editRecord: "Edit Record",
4709
+ deleteRecord: "Delete Record",
4710
+ viewRecord: "View Record",
4711
+ recordDetails: "Record Details",
4712
+ records: "records",
4713
+ of: "of",
4714
+ // Views
4715
+ gridView: "Grid",
4716
+ kanbanView: "Kanban",
4717
+ galleryView: "Gallery",
4718
+ calendarView: "Calendar",
4719
+ formView: "Form",
4720
+ // Fields
4721
+ title: "Title",
4722
+ description: "Description",
4723
+ status: "Status",
4724
+ priority: "Priority",
4725
+ dueDate: "Due Date",
4726
+ completed: "Completed",
4727
+ primary: "Primary",
4728
+ // Actions
4729
+ createNewRecord: "Create New Record",
4730
+ enterDetails: "Enter the details for the new record.",
4731
+ modifyValues: "Modify the values for this record.",
4732
+ viewData: "View the data for this record.",
4733
+ addNewRecord: "Add new record",
4734
+ // Sorting
4735
+ sortBy: "Sort by...",
4736
+ noSorting: "No sorting",
4737
+ ascending: "\u2191 A-Z",
4738
+ descending: "\u2193 Z-A",
4739
+ // Filtering
4740
+ filterBy: "Filter by...",
4741
+ noFilter: "No filter",
4742
+ filterValue: "Filter value...",
4743
+ selectValue: "Select value...",
4744
+ // Operators
4745
+ equals: "=",
4746
+ greater: ">",
4747
+ less: "<",
4748
+ greaterEqual: "\u2265",
4749
+ lessEqual: "\u2264",
4750
+ on: "On",
4751
+ before: "Before",
4752
+ after: "After",
4753
+ yes: "Yes",
4754
+ no: "No",
4755
+ // Messages
4756
+ noDateField: "No date field found in schema. Add a date field to enable Calendar view.",
4757
+ noSelectField: "No select field found in schema. Add a select field to enable Kanban view.",
4758
+ uncategorized: "Uncategorized",
4759
+ untitled: "Untitled",
4760
+ event: "Event",
4761
+ none: "None",
4762
+ today: "Today",
4763
+ weekDays: "Sun,Mon,Tue,Wed,Thu,Fri,Sat",
4764
+ monthNames: "January,February,March,April,May,June,July,August,September,October,November,December"
4765
+ },
4766
+ es: {
4767
+ add: "Agregar",
4768
+ edit: "Editar",
4769
+ delete: "Eliminar",
4770
+ view: "Ver",
4771
+ save: "Guardar",
4772
+ cancel: "Cancelar",
4773
+ close: "Cerrar",
4774
+ search: "Buscar",
4775
+ filter: "Filtrar",
4776
+ sort: "Ordenar",
4777
+ addRecord: "Agregar Registro",
4778
+ createRecord: "Crear Registro",
4779
+ editRecord: "Editar Registro",
4780
+ deleteRecord: "Eliminar Registro",
4781
+ viewRecord: "Ver Registro",
4782
+ recordDetails: "Detalles del Registro",
4783
+ records: "registros",
4784
+ of: "de",
4785
+ gridView: "Cuadr\xEDcula",
4786
+ kanbanView: "Kanban",
4787
+ galleryView: "Galer\xEDa",
4788
+ calendarView: "Calendario",
4789
+ formView: "Formulario",
4790
+ title: "T\xEDtulo",
4791
+ description: "Descripci\xF3n",
4792
+ status: "Estado",
4793
+ priority: "Prioridad",
4794
+ dueDate: "Fecha de Vencimiento",
4795
+ completed: "Completado",
4796
+ primary: "Principal",
4797
+ createNewRecord: "Crear Nuevo Registro",
4798
+ enterDetails: "Ingrese los detalles del nuevo registro.",
4799
+ modifyValues: "Modifique los valores de este registro.",
4800
+ viewData: "Ver los datos de este registro.",
4801
+ addNewRecord: "Agregar nuevo registro",
4802
+ sortBy: "Ordenar por...",
4803
+ noSorting: "Sin ordenar",
4804
+ ascending: "\u2191 A-Z",
4805
+ descending: "\u2193 Z-A",
4806
+ filterBy: "Filtrar por...",
4807
+ noFilter: "Sin filtro",
4808
+ filterValue: "Valor del filtro...",
4809
+ selectValue: "Seleccionar valor...",
4810
+ equals: "=",
4811
+ greater: ">",
4812
+ less: "<",
4813
+ greaterEqual: "\u2265",
4814
+ lessEqual: "\u2264",
4815
+ on: "En",
4816
+ before: "Antes",
4817
+ after: "Despu\xE9s",
4818
+ yes: "S\xED",
4819
+ no: "No",
4820
+ noDateField: "No se encontr\xF3 campo de fecha en el esquema. Agregue un campo de fecha para habilitar la vista de Calendario.",
4821
+ noSelectField: "No se encontr\xF3 campo de selecci\xF3n en el esquema. Agregue un campo de selecci\xF3n para habilitar la vista Kanban.",
4822
+ uncategorized: "Sin categor\xEDa",
4823
+ untitled: "Sin t\xEDtulo",
4824
+ event: "Evento",
4825
+ none: "Ninguno",
4826
+ today: "Hoy",
4827
+ weekDays: "Dom,Lun,Mar,Mi\xE9,Jue,Vie,S\xE1b",
4828
+ monthNames: "Enero,Febrero,Marzo,Abril,Mayo,Junio,Julio,Agosto,Septiembre,Octubre,Noviembre,Diciembre"
4829
+ },
4830
+ zh: {
4831
+ add: "\u6DFB\u52A0",
4832
+ edit: "\u7F16\u8F91",
4833
+ delete: "\u5220\u9664",
4834
+ view: "\u67E5\u770B",
4835
+ save: "\u4FDD\u5B58",
4836
+ cancel: "\u53D6\u6D88",
4837
+ close: "\u5173\u95ED",
4838
+ search: "\u641C\u7D22",
4839
+ filter: "\u7B5B\u9009",
4840
+ sort: "\u6392\u5E8F",
4841
+ addRecord: "\u6DFB\u52A0\u8BB0\u5F55",
4842
+ createRecord: "\u521B\u5EFA\u8BB0\u5F55",
4843
+ editRecord: "\u7F16\u8F91\u8BB0\u5F55",
4844
+ deleteRecord: "\u5220\u9664\u8BB0\u5F55",
4845
+ viewRecord: "\u67E5\u770B\u8BB0\u5F55",
4846
+ recordDetails: "\u8BB0\u5F55\u8BE6\u60C5",
4847
+ records: "\u6761\u8BB0\u5F55",
4848
+ of: "\u5171",
4849
+ gridView: "\u8868\u683C",
4850
+ kanbanView: "\u770B\u677F",
4851
+ galleryView: "\u753B\u5ECA",
4852
+ calendarView: "\u65E5\u5386",
4853
+ formView: "\u8868\u5355",
4854
+ title: "\u6807\u9898",
4855
+ description: "\u63CF\u8FF0",
4856
+ status: "\u72B6\u6001",
4857
+ priority: "\u4F18\u5148\u7EA7",
4858
+ dueDate: "\u622A\u6B62\u65E5\u671F",
4859
+ completed: "\u5DF2\u5B8C\u6210",
4860
+ primary: "\u4E3B\u8981",
4861
+ createNewRecord: "\u521B\u5EFA\u65B0\u8BB0\u5F55",
4862
+ enterDetails: "\u8F93\u5165\u65B0\u8BB0\u5F55\u7684\u8BE6\u7EC6\u4FE1\u606F\u3002",
4863
+ modifyValues: "\u4FEE\u6539\u6B64\u8BB0\u5F55\u7684\u503C\u3002",
4864
+ viewData: "\u67E5\u770B\u6B64\u8BB0\u5F55\u7684\u6570\u636E\u3002",
4865
+ addNewRecord: "\u6DFB\u52A0\u65B0\u8BB0\u5F55",
4866
+ sortBy: "\u6392\u5E8F\u65B9\u5F0F...",
4867
+ noSorting: "\u4E0D\u6392\u5E8F",
4868
+ ascending: "\u2191 A-Z",
4869
+ descending: "\u2193 Z-A",
4870
+ filterBy: "\u7B5B\u9009\u6761\u4EF6...",
4871
+ noFilter: "\u65E0\u7B5B\u9009",
4872
+ filterValue: "\u7B5B\u9009\u503C...",
4873
+ selectValue: "\u9009\u62E9\u503C...",
4874
+ equals: "=",
4875
+ greater: ">",
4876
+ less: "<",
4877
+ greaterEqual: "\u2265",
4878
+ lessEqual: "\u2264",
4879
+ on: "\u5728",
4880
+ before: "\u4E4B\u524D",
4881
+ after: "\u4E4B\u540E",
4882
+ yes: "\u662F",
4883
+ no: "\u5426",
4884
+ noDateField: "\u67B6\u6784\u4E2D\u672A\u627E\u5230\u65E5\u671F\u5B57\u6BB5\u3002\u6DFB\u52A0\u65E5\u671F\u5B57\u6BB5\u4EE5\u542F\u7528\u65E5\u5386\u89C6\u56FE\u3002",
4885
+ noSelectField: "\u67B6\u6784\u4E2D\u672A\u627E\u5230\u9009\u62E9\u5B57\u6BB5\u3002\u6DFB\u52A0\u9009\u62E9\u5B57\u6BB5\u4EE5\u542F\u7528\u770B\u677F\u89C6\u56FE\u3002",
4886
+ uncategorized: "\u672A\u5206\u7C7B",
4887
+ untitled: "\u65E0\u6807\u9898",
4888
+ event: "\u4E8B\u4EF6",
4889
+ none: "\u65E0",
4890
+ today: "\u4ECA\u5929",
4891
+ weekDays: "\u65E5,\u4E00,\u4E8C,\u4E09,\u56DB,\u4E94,\u516D",
4892
+ monthNames: "\u4E00\u6708,\u4E8C\u6708,\u4E09\u6708,\u56DB\u6708,\u4E94\u6708,\u516D\u6708,\u4E03\u6708,\u516B\u6708,\u4E5D\u6708,\u5341\u6708,\u5341\u4E00\u6708,\u5341\u4E8C\u6708"
4893
+ },
4894
+ ar: {
4895
+ add: "\u0625\u0636\u0627\u0641\u0629",
4896
+ edit: "\u062A\u0639\u062F\u064A\u0644",
4897
+ delete: "\u062D\u0630\u0641",
4898
+ view: "\u0639\u0631\u0636",
4899
+ save: "\u062D\u0641\u0638",
4900
+ cancel: "\u0625\u0644\u063A\u0627\u0621",
4901
+ close: "\u0625\u063A\u0644\u0627\u0642",
4902
+ search: "\u0628\u062D\u062B",
4903
+ filter: "\u062A\u0635\u0641\u064A\u0629",
4904
+ sort: "\u062A\u0631\u062A\u064A\u0628",
4905
+ addRecord: "\u0625\u0636\u0627\u0641\u0629 \u0633\u062C\u0644",
4906
+ createRecord: "\u0625\u0646\u0634\u0627\u0621 \u0633\u062C\u0644",
4907
+ editRecord: "\u062A\u0639\u062F\u064A\u0644 \u0627\u0644\u0633\u062C\u0644",
4908
+ deleteRecord: "\u062D\u0630\u0641 \u0627\u0644\u0633\u062C\u0644",
4909
+ viewRecord: "\u0639\u0631\u0636 \u0627\u0644\u0633\u062C\u0644",
4910
+ recordDetails: "\u062A\u0641\u0627\u0635\u064A\u0644 \u0627\u0644\u0633\u062C\u0644",
4911
+ records: "\u0633\u062C\u0644\u0627\u062A",
4912
+ of: "\u0645\u0646",
4913
+ gridView: "\u0634\u0628\u0643\u0629",
4914
+ kanbanView: "\u0643\u0627\u0646\u0628\u0627\u0646",
4915
+ galleryView: "\u0645\u0639\u0631\u0636",
4916
+ calendarView: "\u062A\u0642\u0648\u064A\u0645",
4917
+ formView: "\u0646\u0645\u0648\u0630\u062C",
4918
+ title: "\u0627\u0644\u0639\u0646\u0648\u0627\u0646",
4919
+ description: "\u0627\u0644\u0648\u0635\u0641",
4920
+ status: "\u0627\u0644\u062D\u0627\u0644\u0629",
4921
+ priority: "\u0627\u0644\u0623\u0648\u0644\u0648\u064A\u0629",
4922
+ dueDate: "\u062A\u0627\u0631\u064A\u062E \u0627\u0644\u0627\u0633\u062A\u062D\u0642\u0627\u0642",
4923
+ completed: "\u0645\u0643\u062A\u0645\u0644",
4924
+ primary: "\u0623\u0633\u0627\u0633\u064A",
4925
+ createNewRecord: "\u0625\u0646\u0634\u0627\u0621 \u0633\u062C\u0644 \u062C\u062F\u064A\u062F",
4926
+ enterDetails: "\u0623\u062F\u062E\u0644 \u062A\u0641\u0627\u0635\u064A\u0644 \u0627\u0644\u0633\u062C\u0644 \u0627\u0644\u062C\u062F\u064A\u062F.",
4927
+ modifyValues: "\u062A\u0639\u062F\u064A\u0644 \u0642\u064A\u0645 \u0647\u0630\u0627 \u0627\u0644\u0633\u062C\u0644.",
4928
+ viewData: "\u0639\u0631\u0636 \u0628\u064A\u0627\u0646\u0627\u062A \u0647\u0630\u0627 \u0627\u0644\u0633\u062C\u0644.",
4929
+ addNewRecord: "\u0625\u0636\u0627\u0641\u0629 \u0633\u062C\u0644 \u062C\u062F\u064A\u062F",
4930
+ sortBy: "\u062A\u0631\u062A\u064A\u0628 \u062D\u0633\u0628...",
4931
+ noSorting: "\u0628\u062F\u0648\u0646 \u062A\u0631\u062A\u064A\u0628",
4932
+ ascending: "\u2191 \u0623-\u064A",
4933
+ descending: "\u2193 \u064A-\u0623",
4934
+ filterBy: "\u062A\u0635\u0641\u064A\u0629 \u062D\u0633\u0628...",
4935
+ noFilter: "\u0628\u062F\u0648\u0646 \u062A\u0635\u0641\u064A\u0629",
4936
+ filterValue: "\u0642\u064A\u0645\u0629 \u0627\u0644\u062A\u0635\u0641\u064A\u0629...",
4937
+ selectValue: "\u0627\u062E\u062A\u0631 \u0642\u064A\u0645\u0629...",
4938
+ equals: "=",
4939
+ greater: ">",
4940
+ less: "<",
4941
+ greaterEqual: "\u2265",
4942
+ lessEqual: "\u2264",
4943
+ on: "\u0641\u064A",
4944
+ before: "\u0642\u0628\u0644",
4945
+ after: "\u0628\u0639\u062F",
4946
+ yes: "\u0646\u0639\u0645",
4947
+ no: "\u0644\u0627",
4948
+ noDateField: "\u0644\u0645 \u064A\u062A\u0645 \u0627\u0644\u0639\u062B\u0648\u0631 \u0639\u0644\u0649 \u062D\u0642\u0644 \u062A\u0627\u0631\u064A\u062E \u0641\u064A \u0627\u0644\u0645\u062E\u0637\u0637. \u0623\u0636\u0641 \u062D\u0642\u0644 \u062A\u0627\u0631\u064A\u062E \u0644\u062A\u0645\u0643\u064A\u0646 \u0639\u0631\u0636 \u0627\u0644\u062A\u0642\u0648\u064A\u0645.",
4949
+ noSelectField: "\u0644\u0645 \u064A\u062A\u0645 \u0627\u0644\u0639\u062B\u0648\u0631 \u0639\u0644\u0649 \u062D\u0642\u0644 \u0627\u062E\u062A\u064A\u0627\u0631 \u0641\u064A \u0627\u0644\u0645\u062E\u0637\u0637. \u0623\u0636\u0641 \u062D\u0642\u0644 \u0627\u062E\u062A\u064A\u0627\u0631 \u0644\u062A\u0645\u0643\u064A\u0646 \u0639\u0631\u0636 \u0643\u0627\u0646\u0628\u0627\u0646.",
4950
+ uncategorized: "\u063A\u064A\u0631 \u0645\u0635\u0646\u0641",
4951
+ untitled: "\u0628\u062F\u0648\u0646 \u0639\u0646\u0648\u0627\u0646",
4952
+ event: "\u062D\u062F\u062B",
4953
+ none: "\u0644\u0627 \u0634\u064A\u0621",
4954
+ today: "\u0627\u0644\u064A\u0648\u0645",
4955
+ weekDays: "\u0623\u062D\u062F,\u0625\u062B\u0646\u064A\u0646,\u062B\u0644\u0627\u062B\u0627\u0621,\u0623\u0631\u0628\u0639\u0627\u0621,\u062E\u0645\u064A\u0633,\u062C\u0645\u0639\u0629,\u0633\u0628\u062A",
4956
+ monthNames: "\u064A\u0646\u0627\u064A\u0631,\u0641\u0628\u0631\u0627\u064A\u0631,\u0645\u0627\u0631\u0633,\u0623\u0628\u0631\u064A\u0644,\u0645\u0627\u064A\u0648,\u064A\u0648\u0646\u064A\u0648,\u064A\u0648\u0644\u064A\u0648,\u0623\u063A\u0633\u0637\u0633,\u0633\u0628\u062A\u0645\u0628\u0631,\u0623\u0643\u062A\u0648\u0628\u0631,\u0646\u0648\u0641\u0645\u0628\u0631,\u062F\u064A\u0633\u0645\u0628\u0631"
4957
+ },
4958
+ hi: {
4959
+ add: "\u091C\u094B\u0921\u093C\u0947\u0902",
4960
+ edit: "\u0938\u0902\u092A\u093E\u0926\u093F\u0924 \u0915\u0930\u0947\u0902",
4961
+ delete: "\u0939\u091F\u093E\u090F\u0902",
4962
+ view: "\u0926\u0947\u0916\u0947\u0902",
4963
+ save: "\u0938\u0939\u0947\u091C\u0947\u0902",
4964
+ cancel: "\u0930\u0926\u094D\u0926 \u0915\u0930\u0947\u0902",
4965
+ close: "\u092C\u0902\u0926 \u0915\u0930\u0947\u0902",
4966
+ search: "\u0916\u094B\u091C\u0947\u0902",
4967
+ filter: "\u092B\u093C\u093F\u0932\u094D\u091F\u0930",
4968
+ sort: "\u0915\u094D\u0930\u092E\u092C\u0926\u094D\u0927 \u0915\u0930\u0947\u0902",
4969
+ addRecord: "\u0930\u093F\u0915\u0949\u0930\u094D\u0921 \u091C\u094B\u0921\u093C\u0947\u0902",
4970
+ createRecord: "\u0930\u093F\u0915\u0949\u0930\u094D\u0921 \u092C\u0928\u093E\u090F\u0902",
4971
+ editRecord: "\u0930\u093F\u0915\u0949\u0930\u094D\u0921 \u0938\u0902\u092A\u093E\u0926\u093F\u0924 \u0915\u0930\u0947\u0902",
4972
+ deleteRecord: "\u0930\u093F\u0915\u0949\u0930\u094D\u0921 \u0939\u091F\u093E\u090F\u0902",
4973
+ viewRecord: "\u0930\u093F\u0915\u0949\u0930\u094D\u0921 \u0926\u0947\u0916\u0947\u0902",
4974
+ recordDetails: "\u0930\u093F\u0915\u0949\u0930\u094D\u0921 \u0935\u093F\u0935\u0930\u0923",
4975
+ records: "\u0930\u093F\u0915\u0949\u0930\u094D\u0921",
4976
+ of: "\u092E\u0947\u0902 \u0938\u0947",
4977
+ gridView: "\u0917\u094D\u0930\u093F\u0921",
4978
+ kanbanView: "\u0915\u093E\u0928\u092C\u093E\u0928",
4979
+ galleryView: "\u0917\u0948\u0932\u0930\u0940",
4980
+ calendarView: "\u0915\u0948\u0932\u0947\u0902\u0921\u0930",
4981
+ formView: "\u092B\u0949\u0930\u094D\u092E",
4982
+ title: "\u0936\u0940\u0930\u094D\u0937\u0915",
4983
+ description: "\u0935\u093F\u0935\u0930\u0923",
4984
+ status: "\u0938\u094D\u0925\u093F\u0924\u093F",
4985
+ priority: "\u092A\u094D\u0930\u093E\u0925\u092E\u093F\u0915\u0924\u093E",
4986
+ dueDate: "\u0928\u093F\u092F\u0924 \u0924\u093E\u0930\u0940\u0916",
4987
+ completed: "\u092A\u0942\u0930\u094D\u0923",
4988
+ primary: "\u092A\u094D\u0930\u093E\u0925\u092E\u093F\u0915",
4989
+ createNewRecord: "\u0928\u092F\u093E \u0930\u093F\u0915\u0949\u0930\u094D\u0921 \u092C\u0928\u093E\u090F\u0902",
4990
+ enterDetails: "\u0928\u090F \u0930\u093F\u0915\u0949\u0930\u094D\u0921 \u0915\u0947 \u0932\u093F\u090F \u0935\u093F\u0935\u0930\u0923 \u0926\u0930\u094D\u091C \u0915\u0930\u0947\u0902\u0964",
4991
+ modifyValues: "\u0907\u0938 \u0930\u093F\u0915\u0949\u0930\u094D\u0921 \u0915\u0947 \u092E\u093E\u0928 \u0938\u0902\u0936\u094B\u0927\u093F\u0924 \u0915\u0930\u0947\u0902\u0964",
4992
+ viewData: "\u0907\u0938 \u0930\u093F\u0915\u0949\u0930\u094D\u0921 \u0915\u093E \u0921\u0947\u091F\u093E \u0926\u0947\u0916\u0947\u0902\u0964",
4993
+ addNewRecord: "\u0928\u092F\u093E \u0930\u093F\u0915\u0949\u0930\u094D\u0921 \u091C\u094B\u0921\u093C\u0947\u0902",
4994
+ sortBy: "\u0907\u0938\u0915\u0947 \u0905\u0928\u0941\u0938\u093E\u0930 \u0915\u094D\u0930\u092E\u092C\u0926\u094D\u0927 \u0915\u0930\u0947\u0902...",
4995
+ noSorting: "\u0915\u094B\u0908 \u0915\u094D\u0930\u092E\u092C\u0926\u094D\u0927\u0924\u093E \u0928\u0939\u0940\u0902",
4996
+ ascending: "\u2191 \u0905-\u0939",
4997
+ descending: "\u2193 \u0939-\u0905",
4998
+ filterBy: "\u0907\u0938\u0915\u0947 \u0905\u0928\u0941\u0938\u093E\u0930 \u092B\u093C\u093F\u0932\u094D\u091F\u0930 \u0915\u0930\u0947\u0902...",
4999
+ noFilter: "\u0915\u094B\u0908 \u092B\u093C\u093F\u0932\u094D\u091F\u0930 \u0928\u0939\u0940\u0902",
5000
+ filterValue: "\u092B\u093C\u093F\u0932\u094D\u091F\u0930 \u092E\u093E\u0928...",
5001
+ selectValue: "\u092E\u093E\u0928 \u091A\u0941\u0928\u0947\u0902...",
5002
+ equals: "=",
5003
+ greater: ">",
5004
+ less: "<",
5005
+ greaterEqual: "\u2265",
5006
+ lessEqual: "\u2264",
5007
+ on: "\u092A\u0930",
5008
+ before: "\u092A\u0939\u0932\u0947",
5009
+ after: "\u092C\u093E\u0926 \u092E\u0947\u0902",
5010
+ yes: "\u0939\u093E\u0902",
5011
+ no: "\u0928\u0939\u0940\u0902",
5012
+ noDateField: "\u0938\u094D\u0915\u0940\u092E\u093E \u092E\u0947\u0902 \u0915\u094B\u0908 \u0926\u093F\u0928\u093E\u0902\u0915 \u092B\u093C\u0940\u0932\u094D\u0921 \u0928\u0939\u0940\u0902 \u092E\u093F\u0932\u0940\u0964 \u0915\u0948\u0932\u0947\u0902\u0921\u0930 \u0926\u0943\u0936\u094D\u092F \u0938\u0915\u094D\u0937\u092E \u0915\u0930\u0928\u0947 \u0915\u0947 \u0932\u093F\u090F \u0926\u093F\u0928\u093E\u0902\u0915 \u092B\u093C\u0940\u0932\u094D\u0921 \u091C\u094B\u0921\u093C\u0947\u0902\u0964",
5013
+ noSelectField: "\u0938\u094D\u0915\u0940\u092E\u093E \u092E\u0947\u0902 \u0915\u094B\u0908 \u091A\u092F\u0928 \u092B\u093C\u0940\u0932\u094D\u0921 \u0928\u0939\u0940\u0902 \u092E\u093F\u0932\u0940\u0964 \u0915\u093E\u0928\u092C\u093E\u0928 \u0926\u0943\u0936\u094D\u092F \u0938\u0915\u094D\u0937\u092E \u0915\u0930\u0928\u0947 \u0915\u0947 \u0932\u093F\u090F \u091A\u092F\u0928 \u092B\u093C\u0940\u0932\u094D\u0921 \u091C\u094B\u0921\u093C\u0947\u0902\u0964",
5014
+ uncategorized: "\u0905\u0935\u0930\u094D\u0917\u0940\u0915\u0943\u0924",
5015
+ untitled: "\u0936\u0940\u0930\u094D\u0937\u0915\u0939\u0940\u0928",
5016
+ event: "\u0918\u091F\u0928\u093E",
5017
+ none: "\u0915\u094B\u0908 \u0928\u0939\u0940\u0902",
5018
+ today: "\u0906\u091C",
5019
+ weekDays: "\u0930\u0935\u093F,\u0938\u094B\u092E,\u092E\u0902\u0917\u0932,\u092C\u0941\u0927,\u0917\u0941\u0930\u0941,\u0936\u0941\u0915\u094D\u0930,\u0936\u0928\u093F",
5020
+ monthNames: "\u091C\u0928\u0935\u0930\u0940,\u092B\u0930\u0935\u0930\u0940,\u092E\u093E\u0930\u094D\u091A,\u0905\u092A\u094D\u0930\u0948\u0932,\u092E\u0908,\u091C\u0942\u0928,\u091C\u0941\u0932\u093E\u0908,\u0905\u0917\u0938\u094D\u0924,\u0938\u093F\u0924\u0902\u092C\u0930,\u0905\u0915\u094D\u091F\u0942\u092C\u0930,\u0928\u0935\u0902\u092C\u0930,\u0926\u093F\u0938\u0902\u092C\u0930"
5021
+ },
5022
+ fr: {
5023
+ add: "Ajouter",
5024
+ edit: "Modifier",
5025
+ delete: "Supprimer",
5026
+ view: "Voir",
5027
+ save: "Enregistrer",
5028
+ cancel: "Annuler",
5029
+ close: "Fermer",
5030
+ search: "Rechercher",
5031
+ filter: "Filtrer",
5032
+ sort: "Trier",
5033
+ addRecord: "Ajouter un Enregistrement",
5034
+ createRecord: "Cr\xE9er un Enregistrement",
5035
+ editRecord: "Modifier l'Enregistrement",
5036
+ deleteRecord: "Supprimer l'Enregistrement",
5037
+ viewRecord: "Voir l'Enregistrement",
5038
+ recordDetails: "D\xE9tails de l'Enregistrement",
5039
+ records: "enregistrements",
5040
+ of: "sur",
5041
+ gridView: "Grille",
5042
+ kanbanView: "Kanban",
5043
+ galleryView: "Galerie",
5044
+ calendarView: "Calendrier",
5045
+ formView: "Formulaire",
5046
+ title: "Titre",
5047
+ description: "Description",
5048
+ status: "Statut",
5049
+ priority: "Priorit\xE9",
5050
+ dueDate: "Date d'\xC9ch\xE9ance",
5051
+ completed: "Termin\xE9",
5052
+ primary: "Principal",
5053
+ createNewRecord: "Cr\xE9er un Nouvel Enregistrement",
5054
+ enterDetails: "Entrez les d\xE9tails du nouvel enregistrement.",
5055
+ modifyValues: "Modifiez les valeurs de cet enregistrement.",
5056
+ viewData: "Voir les donn\xE9es de cet enregistrement.",
5057
+ addNewRecord: "Ajouter un nouvel enregistrement",
5058
+ sortBy: "Trier par...",
5059
+ noSorting: "Aucun tri",
5060
+ ascending: "\u2191 A-Z",
5061
+ descending: "\u2193 Z-A",
5062
+ filterBy: "Filtrer par...",
5063
+ noFilter: "Aucun filtre",
5064
+ filterValue: "Valeur du filtre...",
5065
+ selectValue: "S\xE9lectionner une valeur...",
5066
+ equals: "=",
5067
+ greater: ">",
5068
+ less: "<",
5069
+ greaterEqual: "\u2265",
5070
+ lessEqual: "\u2264",
5071
+ on: "Le",
5072
+ before: "Avant",
5073
+ after: "Apr\xE8s",
5074
+ yes: "Oui",
5075
+ no: "Non",
5076
+ noDateField: "Aucun champ de date trouv\xE9 dans le sch\xE9ma. Ajoutez un champ de date pour activer la vue Calendrier.",
5077
+ noSelectField: "Aucun champ de s\xE9lection trouv\xE9 dans le sch\xE9ma. Ajoutez un champ de s\xE9lection pour activer la vue Kanban.",
5078
+ uncategorized: "Non cat\xE9goris\xE9",
5079
+ untitled: "Sans titre",
5080
+ event: "\xC9v\xE9nement",
5081
+ none: "Aucun",
5082
+ today: "Aujourd'hui",
5083
+ weekDays: "Dim,Lun,Mar,Mer,Jeu,Ven,Sam",
5084
+ monthNames: "Janvier,F\xE9vrier,Mars,Avril,Mai,Juin,Juillet,Ao\xFBt,Septembre,Octobre,Novembre,D\xE9cembre"
5085
+ },
5086
+ pt: {
5087
+ add: "Adicionar",
5088
+ edit: "Editar",
5089
+ delete: "Excluir",
5090
+ view: "Visualizar",
5091
+ save: "Salvar",
5092
+ cancel: "Cancelar",
5093
+ close: "Fechar",
5094
+ search: "Pesquisar",
5095
+ filter: "Filtrar",
5096
+ sort: "Ordenar",
5097
+ addRecord: "Adicionar Registro",
5098
+ createRecord: "Criar Registro",
5099
+ editRecord: "Editar Registro",
5100
+ deleteRecord: "Excluir Registro",
5101
+ viewRecord: "Visualizar Registro",
5102
+ recordDetails: "Detalhes do Registro",
5103
+ records: "registros",
5104
+ of: "de",
5105
+ gridView: "Grade",
5106
+ kanbanView: "Kanban",
5107
+ galleryView: "Galeria",
5108
+ calendarView: "Calend\xE1rio",
5109
+ formView: "Formul\xE1rio",
5110
+ title: "T\xEDtulo",
5111
+ description: "Descri\xE7\xE3o",
5112
+ status: "Status",
5113
+ priority: "Prioridade",
5114
+ dueDate: "Data de Vencimento",
5115
+ completed: "Conclu\xEDdo",
5116
+ primary: "Principal",
5117
+ createNewRecord: "Criar Novo Registro",
5118
+ enterDetails: "Insira os detalhes do novo registro.",
5119
+ modifyValues: "Modifique os valores deste registro.",
5120
+ viewData: "Visualize os dados deste registro.",
5121
+ addNewRecord: "Adicionar novo registro",
5122
+ sortBy: "Ordenar por...",
5123
+ noSorting: "Sem ordena\xE7\xE3o",
5124
+ ascending: "\u2191 A-Z",
5125
+ descending: "\u2193 Z-A",
5126
+ filterBy: "Filtrar por...",
5127
+ noFilter: "Sem filtro",
5128
+ filterValue: "Valor do filtro...",
5129
+ selectValue: "Selecionar valor...",
5130
+ equals: "=",
5131
+ greater: ">",
5132
+ less: "<",
5133
+ greaterEqual: "\u2265",
5134
+ lessEqual: "\u2264",
5135
+ on: "Em",
5136
+ before: "Antes",
5137
+ after: "Depois",
5138
+ yes: "Sim",
5139
+ no: "N\xE3o",
5140
+ noDateField: "Nenhum campo de data encontrado no esquema. Adicione um campo de data para ativar a visualiza\xE7\xE3o de Calend\xE1rio.",
5141
+ noSelectField: "Nenhum campo de sele\xE7\xE3o encontrado no esquema. Adicione um campo de sele\xE7\xE3o para ativar a visualiza\xE7\xE3o Kanban.",
5142
+ uncategorized: "Sem categoria",
5143
+ untitled: "Sem t\xEDtulo",
5144
+ event: "Evento",
5145
+ none: "Nenhum",
5146
+ today: "Hoje",
5147
+ weekDays: "Dom,Seg,Ter,Qua,Qui,Sex,S\xE1b",
5148
+ monthNames: "Janeiro,Fevereiro,Mar\xE7o,Abril,Maio,Junho,Julho,Agosto,Setembro,Outubro,Novembro,Dezembro"
5149
+ },
5150
+ ru: {
5151
+ add: "\u0414\u043E\u0431\u0430\u0432\u0438\u0442\u044C",
5152
+ edit: "\u0420\u0435\u0434\u0430\u043A\u0442\u0438\u0440\u043E\u0432\u0430\u0442\u044C",
5153
+ delete: "\u0423\u0434\u0430\u043B\u0438\u0442\u044C",
5154
+ view: "\u041F\u0440\u043E\u0441\u043C\u043E\u0442\u0440",
5155
+ save: "\u0421\u043E\u0445\u0440\u0430\u043D\u0438\u0442\u044C",
5156
+ cancel: "\u041E\u0442\u043C\u0435\u043D\u0430",
5157
+ close: "\u0417\u0430\u043A\u0440\u044B\u0442\u044C",
5158
+ search: "\u041F\u043E\u0438\u0441\u043A",
5159
+ filter: "\u0424\u0438\u043B\u044C\u0442\u0440",
5160
+ sort: "\u0421\u043E\u0440\u0442\u0438\u0440\u043E\u0432\u043A\u0430",
5161
+ addRecord: "\u0414\u043E\u0431\u0430\u0432\u0438\u0442\u044C \u0417\u0430\u043F\u0438\u0441\u044C",
5162
+ createRecord: "\u0421\u043E\u0437\u0434\u0430\u0442\u044C \u0417\u0430\u043F\u0438\u0441\u044C",
5163
+ editRecord: "\u0420\u0435\u0434\u0430\u043A\u0442\u0438\u0440\u043E\u0432\u0430\u0442\u044C \u0417\u0430\u043F\u0438\u0441\u044C",
5164
+ deleteRecord: "\u0423\u0434\u0430\u043B\u0438\u0442\u044C \u0417\u0430\u043F\u0438\u0441\u044C",
5165
+ viewRecord: "\u041F\u0440\u043E\u0441\u043C\u043E\u0442\u0440 \u0417\u0430\u043F\u0438\u0441\u0438",
5166
+ recordDetails: "\u0414\u0435\u0442\u0430\u043B\u0438 \u0417\u0430\u043F\u0438\u0441\u0438",
5167
+ records: "\u0437\u0430\u043F\u0438\u0441\u0435\u0439",
5168
+ of: "\u0438\u0437",
5169
+ gridView: "\u0421\u0435\u0442\u043A\u0430",
5170
+ kanbanView: "\u041A\u0430\u043D\u0431\u0430\u043D",
5171
+ galleryView: "\u0413\u0430\u043B\u0435\u0440\u0435\u044F",
5172
+ calendarView: "\u041A\u0430\u043B\u0435\u043D\u0434\u0430\u0440\u044C",
5173
+ formView: "\u0424\u043E\u0440\u043C\u0430",
5174
+ title: "\u0417\u0430\u0433\u043E\u043B\u043E\u0432\u043E\u043A",
5175
+ description: "\u041E\u043F\u0438\u0441\u0430\u043D\u0438\u0435",
5176
+ status: "\u0421\u0442\u0430\u0442\u0443\u0441",
5177
+ priority: "\u041F\u0440\u0438\u043E\u0440\u0438\u0442\u0435\u0442",
5178
+ dueDate: "\u0421\u0440\u043E\u043A",
5179
+ completed: "\u0417\u0430\u0432\u0435\u0440\u0448\u0435\u043D\u043E",
5180
+ primary: "\u041E\u0441\u043D\u043E\u0432\u043D\u043E\u0439",
5181
+ createNewRecord: "\u0421\u043E\u0437\u0434\u0430\u0442\u044C \u041D\u043E\u0432\u0443\u044E \u0417\u0430\u043F\u0438\u0441\u044C",
5182
+ enterDetails: "\u0412\u0432\u0435\u0434\u0438\u0442\u0435 \u0434\u0435\u0442\u0430\u043B\u0438 \u043D\u043E\u0432\u043E\u0439 \u0437\u0430\u043F\u0438\u0441\u0438.",
5183
+ modifyValues: "\u0418\u0437\u043C\u0435\u043D\u0438\u0442\u0435 \u0437\u043D\u0430\u0447\u0435\u043D\u0438\u044F \u044D\u0442\u043E\u0439 \u0437\u0430\u043F\u0438\u0441\u0438.",
5184
+ viewData: "\u041F\u0440\u043E\u0441\u043C\u043E\u0442\u0440\u0438\u0442\u0435 \u0434\u0430\u043D\u043D\u044B\u0435 \u044D\u0442\u043E\u0439 \u0437\u0430\u043F\u0438\u0441\u0438.",
5185
+ addNewRecord: "\u0414\u043E\u0431\u0430\u0432\u0438\u0442\u044C \u043D\u043E\u0432\u0443\u044E \u0437\u0430\u043F\u0438\u0441\u044C",
5186
+ sortBy: "\u0421\u043E\u0440\u0442\u0438\u0440\u043E\u0432\u0430\u0442\u044C \u043F\u043E...",
5187
+ noSorting: "\u0411\u0435\u0437 \u0441\u043E\u0440\u0442\u0438\u0440\u043E\u0432\u043A\u0438",
5188
+ ascending: "\u2191 \u0410-\u042F",
5189
+ descending: "\u2193 \u042F-\u0410",
5190
+ filterBy: "\u0424\u0438\u043B\u044C\u0442\u0440\u043E\u0432\u0430\u0442\u044C \u043F\u043E...",
5191
+ noFilter: "\u0411\u0435\u0437 \u0444\u0438\u043B\u044C\u0442\u0440\u0430",
5192
+ filterValue: "\u0417\u043D\u0430\u0447\u0435\u043D\u0438\u0435 \u0444\u0438\u043B\u044C\u0442\u0440\u0430...",
5193
+ selectValue: "\u0412\u044B\u0431\u0440\u0430\u0442\u044C \u0437\u043D\u0430\u0447\u0435\u043D\u0438\u0435...",
5194
+ equals: "=",
5195
+ greater: ">",
5196
+ less: "<",
5197
+ greaterEqual: "\u2265",
5198
+ lessEqual: "\u2264",
5199
+ on: "\u0412",
5200
+ before: "\u0414\u043E",
5201
+ after: "\u041F\u043E\u0441\u043B\u0435",
5202
+ yes: "\u0414\u0430",
5203
+ no: "\u041D\u0435\u0442",
5204
+ noDateField: "\u041F\u043E\u043B\u0435 \u0434\u0430\u0442\u044B \u043D\u0435 \u043D\u0430\u0439\u0434\u0435\u043D\u043E \u0432 \u0441\u0445\u0435\u043C\u0435. \u0414\u043E\u0431\u0430\u0432\u044C\u0442\u0435 \u043F\u043E\u043B\u0435 \u0434\u0430\u0442\u044B \u0434\u043B\u044F \u0432\u043A\u043B\u044E\u0447\u0435\u043D\u0438\u044F \u043F\u0440\u0435\u0434\u0441\u0442\u0430\u0432\u043B\u0435\u043D\u0438\u044F \u041A\u0430\u043B\u0435\u043D\u0434\u0430\u0440\u044C.",
5205
+ noSelectField: "\u041F\u043E\u043B\u0435 \u0432\u044B\u0431\u043E\u0440\u0430 \u043D\u0435 \u043D\u0430\u0439\u0434\u0435\u043D\u043E \u0432 \u0441\u0445\u0435\u043C\u0435. \u0414\u043E\u0431\u0430\u0432\u044C\u0442\u0435 \u043F\u043E\u043B\u0435 \u0432\u044B\u0431\u043E\u0440\u0430 \u0434\u043B\u044F \u0432\u043A\u043B\u044E\u0447\u0435\u043D\u0438\u044F \u043F\u0440\u0435\u0434\u0441\u0442\u0430\u0432\u043B\u0435\u043D\u0438\u044F \u041A\u0430\u043D\u0431\u0430\u043D.",
5206
+ uncategorized: "\u0411\u0435\u0437 \u043A\u0430\u0442\u0435\u0433\u043E\u0440\u0438\u0438",
5207
+ untitled: "\u0411\u0435\u0437 \u043D\u0430\u0437\u0432\u0430\u043D\u0438\u044F",
5208
+ event: "\u0421\u043E\u0431\u044B\u0442\u0438\u0435",
5209
+ none: "\u041D\u0435\u0442",
5210
+ today: "\u0421\u0435\u0433\u043E\u0434\u043D\u044F",
5211
+ weekDays: "\u0412\u0441,\u041F\u043D,\u0412\u0442,\u0421\u0440,\u0427\u0442,\u041F\u0442,\u0421\u0431",
5212
+ monthNames: "\u042F\u043D\u0432\u0430\u0440\u044C,\u0424\u0435\u0432\u0440\u0430\u043B\u044C,\u041C\u0430\u0440\u0442,\u0410\u043F\u0440\u0435\u043B\u044C,\u041C\u0430\u0439,\u0418\u044E\u043D\u044C,\u0418\u044E\u043B\u044C,\u0410\u0432\u0433\u0443\u0441\u0442,\u0421\u0435\u043D\u0442\u044F\u0431\u0440\u044C,\u041E\u043A\u0442\u044F\u0431\u0440\u044C,\u041D\u043E\u044F\u0431\u0440\u044C,\u0414\u0435\u043A\u0430\u0431\u0440\u044C"
5213
+ },
5214
+ de: {
5215
+ add: "Hinzuf\xFCgen",
5216
+ edit: "Bearbeiten",
5217
+ delete: "L\xF6schen",
5218
+ view: "Ansehen",
5219
+ save: "Speichern",
5220
+ cancel: "Abbrechen",
5221
+ close: "Schlie\xDFen",
5222
+ search: "Suchen",
5223
+ filter: "Filtern",
5224
+ sort: "Sortieren",
5225
+ addRecord: "Datensatz Hinzuf\xFCgen",
5226
+ createRecord: "Datensatz Erstellen",
5227
+ editRecord: "Datensatz Bearbeiten",
5228
+ deleteRecord: "Datensatz L\xF6schen",
5229
+ viewRecord: "Datensatz Ansehen",
5230
+ recordDetails: "Datensatz-Details",
5231
+ records: "Datens\xE4tze",
5232
+ of: "von",
5233
+ gridView: "Raster",
5234
+ kanbanView: "Kanban",
5235
+ galleryView: "Galerie",
5236
+ calendarView: "Kalender",
5237
+ formView: "Formular",
5238
+ title: "Titel",
5239
+ description: "Beschreibung",
5240
+ status: "Status",
5241
+ priority: "Priorit\xE4t",
5242
+ dueDate: "F\xE4lligkeitsdatum",
5243
+ completed: "Abgeschlossen",
5244
+ primary: "Prim\xE4r",
5245
+ createNewRecord: "Neuen Datensatz Erstellen",
5246
+ enterDetails: "Geben Sie die Details f\xFCr den neuen Datensatz ein.",
5247
+ modifyValues: "\xC4ndern Sie die Werte f\xFCr diesen Datensatz.",
5248
+ viewData: "Sehen Sie sich die Daten f\xFCr diesen Datensatz an.",
5249
+ addNewRecord: "Neuen Datensatz hinzuf\xFCgen",
5250
+ sortBy: "Sortieren nach...",
5251
+ noSorting: "Keine Sortierung",
5252
+ ascending: "\u2191 A-Z",
5253
+ descending: "\u2193 Z-A",
5254
+ filterBy: "Filtern nach...",
5255
+ noFilter: "Kein Filter",
5256
+ filterValue: "Filterwert...",
5257
+ selectValue: "Wert ausw\xE4hlen...",
5258
+ equals: "=",
5259
+ greater: ">",
5260
+ less: "<",
5261
+ greaterEqual: "\u2265",
5262
+ lessEqual: "\u2264",
5263
+ on: "Am",
5264
+ before: "Vor",
5265
+ after: "Nach",
5266
+ yes: "Ja",
5267
+ no: "Nein",
5268
+ noDateField: "Kein Datumsfeld im Schema gefunden. F\xFCgen Sie ein Datumsfeld hinzu, um die Kalenderansicht zu aktivieren.",
5269
+ noSelectField: "Kein Auswahlfeld im Schema gefunden. F\xFCgen Sie ein Auswahlfeld hinzu, um die Kanban-Ansicht zu aktivieren.",
5270
+ uncategorized: "Unkategorisiert",
5271
+ untitled: "Ohne Titel",
5272
+ event: "Ereignis",
5273
+ none: "Keine",
5274
+ today: "Heute",
5275
+ weekDays: "So,Mo,Di,Mi,Do,Fr,Sa",
5276
+ monthNames: "Januar,Februar,M\xE4rz,April,Mai,Juni,Juli,August,September,Oktober,November,Dezember"
5277
+ },
5278
+ ja: {
5279
+ add: "\u8FFD\u52A0",
5280
+ edit: "\u7DE8\u96C6",
5281
+ delete: "\u524A\u9664",
5282
+ view: "\u8868\u793A",
5283
+ save: "\u4FDD\u5B58",
5284
+ cancel: "\u30AD\u30E3\u30F3\u30BB\u30EB",
5285
+ close: "\u9589\u3058\u308B",
5286
+ search: "\u691C\u7D22",
5287
+ filter: "\u30D5\u30A3\u30EB\u30BF\u30FC",
5288
+ sort: "\u4E26\u3079\u66FF\u3048",
5289
+ addRecord: "\u30EC\u30B3\u30FC\u30C9\u3092\u8FFD\u52A0",
5290
+ createRecord: "\u30EC\u30B3\u30FC\u30C9\u3092\u4F5C\u6210",
5291
+ editRecord: "\u30EC\u30B3\u30FC\u30C9\u3092\u7DE8\u96C6",
5292
+ deleteRecord: "\u30EC\u30B3\u30FC\u30C9\u3092\u524A\u9664",
5293
+ viewRecord: "\u30EC\u30B3\u30FC\u30C9\u3092\u8868\u793A",
5294
+ recordDetails: "\u30EC\u30B3\u30FC\u30C9\u306E\u8A73\u7D30",
5295
+ records: "\u4EF6\u306E\u30EC\u30B3\u30FC\u30C9",
5296
+ of: "/",
5297
+ gridView: "\u30B0\u30EA\u30C3\u30C9",
5298
+ kanbanView: "\u30AB\u30F3\u30D0\u30F3",
5299
+ galleryView: "\u30AE\u30E3\u30E9\u30EA\u30FC",
5300
+ calendarView: "\u30AB\u30EC\u30F3\u30C0\u30FC",
5301
+ formView: "\u30D5\u30A9\u30FC\u30E0",
5302
+ title: "\u30BF\u30A4\u30C8\u30EB",
5303
+ description: "\u8AAC\u660E",
5304
+ status: "\u30B9\u30C6\u30FC\u30BF\u30B9",
5305
+ priority: "\u512A\u5148\u5EA6",
5306
+ dueDate: "\u671F\u9650",
5307
+ completed: "\u5B8C\u4E86",
5308
+ primary: "\u30D7\u30E9\u30A4\u30DE\u30EA",
5309
+ createNewRecord: "\u65B0\u3057\u3044\u30EC\u30B3\u30FC\u30C9\u3092\u4F5C\u6210",
5310
+ enterDetails: "\u65B0\u3057\u3044\u30EC\u30B3\u30FC\u30C9\u306E\u8A73\u7D30\u3092\u5165\u529B\u3057\u3066\u304F\u3060\u3055\u3044\u3002",
5311
+ modifyValues: "\u3053\u306E\u30EC\u30B3\u30FC\u30C9\u306E\u5024\u3092\u5909\u66F4\u3057\u3066\u304F\u3060\u3055\u3044\u3002",
5312
+ viewData: "\u3053\u306E\u30EC\u30B3\u30FC\u30C9\u306E\u30C7\u30FC\u30BF\u3092\u8868\u793A\u3057\u307E\u3059\u3002",
5313
+ addNewRecord: "\u65B0\u3057\u3044\u30EC\u30B3\u30FC\u30C9\u3092\u8FFD\u52A0",
5314
+ sortBy: "\u4E26\u3079\u66FF\u3048...",
5315
+ noSorting: "\u4E26\u3079\u66FF\u3048\u306A\u3057",
5316
+ ascending: "\u2191 \u3042-\u3093",
5317
+ descending: "\u2193 \u3093-\u3042",
5318
+ filterBy: "\u30D5\u30A3\u30EB\u30BF\u30FC...",
5319
+ noFilter: "\u30D5\u30A3\u30EB\u30BF\u30FC\u306A\u3057",
5320
+ filterValue: "\u30D5\u30A3\u30EB\u30BF\u30FC\u5024...",
5321
+ selectValue: "\u5024\u3092\u9078\u629E...",
5322
+ equals: "=",
5323
+ greater: ">",
5324
+ less: "<",
5325
+ greaterEqual: "\u2265",
5326
+ lessEqual: "\u2264",
5327
+ on: "\u65E5\u4ED8",
5328
+ before: "\u4EE5\u524D",
5329
+ after: "\u4EE5\u964D",
5330
+ yes: "\u306F\u3044",
5331
+ no: "\u3044\u3044\u3048",
5332
+ noDateField: "\u30B9\u30AD\u30FC\u30DE\u306B\u65E5\u4ED8\u30D5\u30A3\u30FC\u30EB\u30C9\u304C\u898B\u3064\u304B\u308A\u307E\u305B\u3093\u3002\u30AB\u30EC\u30F3\u30C0\u30FC\u30D3\u30E5\u30FC\u3092\u6709\u52B9\u306B\u3059\u308B\u306B\u306F\u3001\u65E5\u4ED8\u30D5\u30A3\u30FC\u30EB\u30C9\u3092\u8FFD\u52A0\u3057\u3066\u304F\u3060\u3055\u3044\u3002",
5333
+ noSelectField: "\u30B9\u30AD\u30FC\u30DE\u306B\u9078\u629E\u30D5\u30A3\u30FC\u30EB\u30C9\u304C\u898B\u3064\u304B\u308A\u307E\u305B\u3093\u3002\u30AB\u30F3\u30D0\u30F3\u30D3\u30E5\u30FC\u3092\u6709\u52B9\u306B\u3059\u308B\u306B\u306F\u3001\u9078\u629E\u30D5\u30A3\u30FC\u30EB\u30C9\u3092\u8FFD\u52A0\u3057\u3066\u304F\u3060\u3055\u3044\u3002",
5334
+ uncategorized: "\u672A\u5206\u985E",
5335
+ untitled: "\u7121\u984C",
5336
+ event: "\u30A4\u30D9\u30F3\u30C8",
5337
+ none: "\u306A\u3057",
5338
+ today: "\u4ECA\u65E5",
5339
+ weekDays: "\u65E5,\u6708,\u706B,\u6C34,\u6728,\u91D1,\u571F",
5340
+ monthNames: "1\u6708,2\u6708,3\u6708,4\u6708,5\u6708,6\u6708,7\u6708,8\u6708,9\u6708,10\u6708,11\u6708,12\u6708"
5341
+ }
5342
+ };
5343
+ function getTranslation(lang, key) {
5344
+ var _a;
5345
+ return ((_a = translations[lang]) == null ? void 0 : _a[key]) || translations.en[key] || key;
5346
+ }
5347
+ function getDirection(lang) {
5348
+ var _a;
5349
+ return ((_a = LANGUAGES[lang]) == null ? void 0 : _a.dir) || "ltr";
5350
+ }
5351
+
5352
+ // src/components/I18nProvider.tsx
5353
+ import { jsx as jsx8 } from "react/jsx-runtime";
5354
+ var I18nContext = createContext(void 0);
5355
+ function I18nProvider({
5356
+ lang = "en",
5357
+ children
5358
+ }) {
5359
+ const t = (key) => getTranslation(lang, key);
5360
+ const dir = getDirection(lang);
5361
+ return /* @__PURE__ */ jsx8(I18nContext.Provider, { value: { lang, t, dir }, children: /* @__PURE__ */ jsx8("div", { dir, className: "w-full h-full", children }) });
5362
+ }
5363
+ function useI18n() {
5364
+ const context = useContext(I18nContext);
5365
+ if (!context) {
5366
+ return {
5367
+ lang: "en",
5368
+ t: (key) => getTranslation("en", key),
5369
+ dir: "ltr"
5370
+ };
5371
+ }
5372
+ return context;
5373
+ }
5374
+
5375
+ // src/components/views/GridView.tsx
5376
+ import { Fragment, jsx as jsx9, jsxs as jsxs2 } from "react/jsx-runtime";
3731
5377
  function GridView({ schema, records, onUpdateRecord, onDeleteRecord, onOpenModal }) {
5378
+ var _a;
5379
+ const { t } = useI18n();
5380
+ const [sortField, setSortField] = useState("");
5381
+ const [sortDirection, setSortDirection] = useState("asc");
5382
+ const [filterField, setFilterField] = useState("");
5383
+ const [filterValue, setFilterValue] = useState("");
5384
+ const [filterOperator, setFilterOperator] = useState("contains");
5385
+ const selectedFilterField = useMemo(() => {
5386
+ return schema.fields.find((f) => f.id === filterField);
5387
+ }, [filterField, schema.fields]);
5388
+ const processedRecords = useMemo(() => {
5389
+ let filtered = [...records];
5390
+ if (filterField && filterValue) {
5391
+ filtered = filtered.filter((record) => {
5392
+ const value = record.fields[filterField];
5393
+ const field = schema.fields.find((f) => f.id === filterField);
5394
+ if (!field) return false;
5395
+ switch (field.type) {
5396
+ case "text":
5397
+ if (value == null) return false;
5398
+ return String(value).toLowerCase().includes(filterValue.toLowerCase());
5399
+ case "number":
5400
+ if (value == null) return false;
5401
+ const numValue = Number(value);
5402
+ const filterNum = Number(filterValue);
5403
+ switch (filterOperator) {
5404
+ case "equals":
5405
+ return numValue === filterNum;
5406
+ case "greater":
5407
+ return numValue > filterNum;
5408
+ case "less":
5409
+ return numValue < filterNum;
5410
+ case "greaterEqual":
5411
+ return numValue >= filterNum;
5412
+ case "lessEqual":
5413
+ return numValue <= filterNum;
5414
+ default:
5415
+ return false;
5416
+ }
5417
+ case "select":
5418
+ case "multiSelect":
5419
+ if (value == null) return false;
5420
+ if (Array.isArray(value)) {
5421
+ return value.includes(filterValue);
5422
+ }
5423
+ return value === filterValue;
5424
+ case "checkbox":
5425
+ return filterValue === "true" ? !!value : !value;
5426
+ case "date":
5427
+ if (value == null) return false;
5428
+ const recordDate = new Date(value);
5429
+ const filterDate = new Date(filterValue);
5430
+ switch (filterOperator) {
5431
+ case "before":
5432
+ return recordDate < filterDate;
5433
+ case "after":
5434
+ return recordDate > filterDate;
5435
+ case "equals":
5436
+ return recordDate.toDateString() === filterDate.toDateString();
5437
+ default:
5438
+ return false;
5439
+ }
5440
+ default:
5441
+ if (value == null) return false;
5442
+ return String(value).toLowerCase().includes(filterValue.toLowerCase());
5443
+ }
5444
+ });
5445
+ }
5446
+ if (sortField) {
5447
+ filtered.sort((a, b) => {
5448
+ const aVal = a.fields[sortField];
5449
+ const bVal = b.fields[sortField];
5450
+ if (aVal == null && bVal == null) return 0;
5451
+ if (aVal == null) return 1;
5452
+ if (bVal == null) return -1;
5453
+ let comparison = 0;
5454
+ if (typeof aVal === "number" && typeof bVal === "number") {
5455
+ comparison = aVal - bVal;
5456
+ } else {
5457
+ comparison = String(aVal).localeCompare(String(bVal));
5458
+ }
5459
+ return sortDirection === "asc" ? comparison : -comparison;
5460
+ });
5461
+ }
5462
+ return filtered;
5463
+ }, [records, sortField, sortDirection, filterField, filterValue, filterOperator, schema.fields]);
3732
5464
  const renderCellValue = (record, field) => {
3733
- var _a;
5465
+ var _a2;
3734
5466
  const value = record.fields[field.id];
3735
5467
  switch (field.type) {
3736
5468
  case "checkbox":
3737
- return /* @__PURE__ */ jsx6(
5469
+ return /* @__PURE__ */ jsx9(
3738
5470
  Checkbox,
3739
5471
  {
3740
5472
  checked: !!value,
@@ -3743,14 +5475,14 @@ function GridView({ schema, records, onUpdateRecord, onDeleteRecord, onOpenModal
3743
5475
  }
3744
5476
  );
3745
5477
  case "select":
3746
- const option = (_a = field.options) == null ? void 0 : _a.find((o) => o.name === value);
3747
- return value ? /* @__PURE__ */ jsx6(Badge, { variant: "secondary", className: cn("font-normal", BADGE_COLOR_MAP[(option == null ? void 0 : option.color) || "gray"]), children: value }) : null;
5478
+ const option = (_a2 = field.options) == null ? void 0 : _a2.find((o) => o.name === value);
5479
+ return value ? /* @__PURE__ */ jsx9(Badge, { variant: "secondary", className: cn("font-normal", getBadgeColor(option == null ? void 0 : option.color)), children: value }) : null;
3748
5480
  case "multiSelect":
3749
5481
  const values = Array.isArray(value) ? value : [];
3750
- return /* @__PURE__ */ jsx6("div", { className: "flex flex-wrap gap-1", children: values.map((v) => {
3751
- var _a2;
3752
- const opt = (_a2 = field.options) == null ? void 0 : _a2.find((o) => o.name === v);
3753
- return /* @__PURE__ */ jsx6(Badge, { variant: "secondary", className: cn("font-normal", BADGE_COLOR_MAP[(opt == null ? void 0 : opt.color) || "gray"]), children: v }, v);
5482
+ return /* @__PURE__ */ jsx9("div", { className: "flex flex-wrap gap-1", children: values.map((v) => {
5483
+ var _a3;
5484
+ const opt = (_a3 = field.options) == null ? void 0 : _a3.find((o) => o.name === v);
5485
+ return /* @__PURE__ */ jsx9(Badge, { variant: "secondary", className: cn("font-normal", getBadgeColor(opt == null ? void 0 : opt.color)), children: v }, v);
3754
5486
  }) });
3755
5487
  case "date":
3756
5488
  return value ? new Date(value).toLocaleDateString() : null;
@@ -3760,93 +5492,225 @@ function GridView({ schema, records, onUpdateRecord, onDeleteRecord, onOpenModal
3760
5492
  return value;
3761
5493
  }
3762
5494
  };
3763
- return /* @__PURE__ */ jsxs("div", { className: "w-full grow overflow-hidden sm:pl-2 relative group flex flex-col h-full", children: [
3764
- /* @__PURE__ */ jsx6("div", { className: "relative w-full h-full", children: /* @__PURE__ */ jsx6("div", { className: "w-full h-full", style: { pointerEvents: "auto" }, children: /* @__PURE__ */ jsx6("div", { "data-t-grid-container": "true", tabIndex: 0, className: "relative outline-none w-full h-full", children: /* @__PURE__ */ jsx6("div", { className: "w-full h-full overflow-auto pb-10", children: /* @__PURE__ */ jsxs(Table, { children: [
3765
- /* @__PURE__ */ jsx6(TableHeader, { className: "bg-muted/50 sticky top-0 z-10", children: /* @__PURE__ */ jsxs(TableRow, { children: [
3766
- /* @__PURE__ */ jsx6(TableHead, { className: "w-12 text-muted-foreground", children: "#" }),
3767
- schema.fields.map((field) => /* @__PURE__ */ jsxs(TableHead, { className: "min-w-[150px]", children: [
3768
- /* @__PURE__ */ jsx6("span", { className: "font-medium", children: field.name }),
3769
- field.isPrimary && /* @__PURE__ */ jsx6(Badge, { variant: "outline", className: "ml-2 text-xs", children: "Primary" })
3770
- ] }, field.id)),
3771
- /* @__PURE__ */ jsx6(TableHead, { className: "w-[100px] text-right", children: "Actions" })
3772
- ] }) }),
3773
- /* @__PURE__ */ jsxs(TableBody, { children: [
3774
- records.map((record, index) => /* @__PURE__ */ jsxs(
3775
- TableRow,
3776
- {
3777
- className: "group cursor-pointer hover:bg-muted/50",
3778
- onClick: () => onOpenModal("view", record),
3779
- children: [
3780
- /* @__PURE__ */ jsx6(TableCell, { className: "text-muted-foreground tabular-nums", children: index + 1 }),
3781
- schema.fields.map((field) => /* @__PURE__ */ jsx6(TableCell, { children: /* @__PURE__ */ jsx6("div", { className: "min-h-[24px] flex items-center", children: renderCellValue(record, field) }) }, field.id)),
3782
- /* @__PURE__ */ jsx6(TableCell, { className: "text-right", onClick: (e) => e.stopPropagation(), children: /* @__PURE__ */ jsxs("div", { className: "flex justify-end gap-1 opacity-0 group-hover:opacity-100 transition-opacity", children: [
3783
- /* @__PURE__ */ jsx6(
3784
- Button,
3785
- {
3786
- variant: "ghost",
3787
- size: "icon",
3788
- className: "h-8 w-8",
3789
- onClick: () => onOpenModal("view", record),
3790
- children: /* @__PURE__ */ jsx6(Eye, { className: "h-4 w-4" })
3791
- }
3792
- ),
3793
- /* @__PURE__ */ jsx6(
3794
- Button,
3795
- {
3796
- variant: "ghost",
3797
- size: "icon",
3798
- className: "h-8 w-8",
3799
- onClick: () => onOpenModal("edit", record),
3800
- children: /* @__PURE__ */ jsx6(Pencil, { className: "h-4 w-4" })
3801
- }
3802
- ),
3803
- /* @__PURE__ */ jsx6(
3804
- Button,
3805
- {
3806
- variant: "ghost",
3807
- size: "icon",
3808
- className: "h-8 w-8 text-muted-foreground hover:text-destructive",
3809
- onClick: () => onDeleteRecord(record.id),
3810
- children: /* @__PURE__ */ jsx6(Trash2, { className: "h-4 w-4" })
3811
- }
3812
- )
3813
- ] }) })
3814
- ]
3815
- },
3816
- record.id
3817
- )),
3818
- /* @__PURE__ */ jsx6(TableRow, { children: /* @__PURE__ */ jsx6(TableCell, { colSpan: schema.fields.length + 2, className: "p-0", children: /* @__PURE__ */ jsxs(
3819
- Button,
3820
- {
3821
- variant: "ghost",
3822
- size: "sm",
3823
- onClick: () => onOpenModal("add"),
3824
- className: "w-full justify-start px-4 h-10 text-muted-foreground hover:text-foreground rounded-none",
3825
- children: [
3826
- /* @__PURE__ */ jsx6(Plus, { className: "h-4 w-4 mr-2" }),
3827
- "Add new record"
3828
- ]
3829
- }
3830
- ) }) })
3831
- ] })
3832
- ] }) }) }) }) }),
3833
- /* @__PURE__ */ jsxs("div", { className: "flex items-center h-6 pl-2 ml-1 text-xs bg-violet-200 dark:bg-zinc-600 rounded absolute bottom-3 left-0 shadow-sm z-20", children: [
5495
+ return /* @__PURE__ */ jsxs2("div", { className: "w-full grow overflow-hidden sm:pl-2 relative group flex flex-col h-full", children: [
5496
+ /* @__PURE__ */ jsxs2("div", { className: "relative w-full h-full flex flex-col", children: [
5497
+ /* @__PURE__ */ jsxs2("div", { className: "flex items-center gap-3 p-3 border-b bg-muted/30", children: [
5498
+ /* @__PURE__ */ jsxs2(Button, { onClick: () => onOpenModal("add"), className: "h-9", children: [
5499
+ /* @__PURE__ */ jsx9(Plus, { className: "h-4 w-4 mr-2" }),
5500
+ t("addRecord")
5501
+ ] }),
5502
+ /* @__PURE__ */ jsx9("div", { className: "h-6 w-px bg-border" }),
5503
+ /* @__PURE__ */ jsxs2("div", { className: "flex items-center gap-2", children: [
5504
+ /* @__PURE__ */ jsx9(ArrowUpDown, { className: "h-4 w-4 text-muted-foreground" }),
5505
+ /* @__PURE__ */ jsxs2(Select, { value: sortField || "none", onValueChange: (v) => setSortField(v === "none" ? "" : v), children: [
5506
+ /* @__PURE__ */ jsx9(SelectTrigger, { className: "w-[180px] h-9", children: /* @__PURE__ */ jsx9(SelectValue, { placeholder: t("sortBy") }) }),
5507
+ /* @__PURE__ */ jsxs2(SelectContent, { children: [
5508
+ /* @__PURE__ */ jsx9(SelectItem, { value: "none", children: t("noSorting") }),
5509
+ schema.fields.map((field) => /* @__PURE__ */ jsx9(SelectItem, { value: field.id, children: field.name }, field.id))
5510
+ ] })
5511
+ ] }),
5512
+ sortField && /* @__PURE__ */ jsx9(
5513
+ Button,
5514
+ {
5515
+ variant: "outline",
5516
+ size: "sm",
5517
+ className: "h-9",
5518
+ onClick: () => setSortDirection(sortDirection === "asc" ? "desc" : "asc"),
5519
+ children: sortDirection === "asc" ? t("ascending") : t("descending")
5520
+ }
5521
+ )
5522
+ ] }),
5523
+ /* @__PURE__ */ jsxs2("div", { className: "flex items-center gap-2 flex-1", children: [
5524
+ /* @__PURE__ */ jsx9(Filter, { className: "h-4 w-4 text-muted-foreground" }),
5525
+ /* @__PURE__ */ jsxs2(Select, { value: filterField || "none", onValueChange: (v) => {
5526
+ const newField = v === "none" ? "" : v;
5527
+ setFilterField(newField);
5528
+ setFilterValue("");
5529
+ if (newField) {
5530
+ const field = schema.fields.find((f) => f.id === newField);
5531
+ if ((field == null ? void 0 : field.type) === "number") setFilterOperator("equals");
5532
+ else if ((field == null ? void 0 : field.type) === "date") setFilterOperator("equals");
5533
+ else setFilterOperator("contains");
5534
+ }
5535
+ }, children: [
5536
+ /* @__PURE__ */ jsx9(SelectTrigger, { className: "w-[180px] h-9", children: /* @__PURE__ */ jsx9(SelectValue, { placeholder: t("filterBy") }) }),
5537
+ /* @__PURE__ */ jsxs2(SelectContent, { children: [
5538
+ /* @__PURE__ */ jsx9(SelectItem, { value: "none", children: t("noFilter") }),
5539
+ schema.fields.map((field) => /* @__PURE__ */ jsx9(SelectItem, { value: field.id, children: field.name }, field.id))
5540
+ ] })
5541
+ ] }),
5542
+ filterField && selectedFilterField && /* @__PURE__ */ jsxs2(Fragment, { children: [
5543
+ selectedFilterField.type === "number" && /* @__PURE__ */ jsxs2(Fragment, { children: [
5544
+ /* @__PURE__ */ jsxs2(Select, { value: filterOperator, onValueChange: setFilterOperator, children: [
5545
+ /* @__PURE__ */ jsx9(SelectTrigger, { className: "w-[120px] h-9", children: /* @__PURE__ */ jsx9(SelectValue, {}) }),
5546
+ /* @__PURE__ */ jsxs2(SelectContent, { children: [
5547
+ /* @__PURE__ */ jsx9(SelectItem, { value: "equals", children: t("equals") }),
5548
+ /* @__PURE__ */ jsx9(SelectItem, { value: "greater", children: t("greater") }),
5549
+ /* @__PURE__ */ jsx9(SelectItem, { value: "less", children: t("less") }),
5550
+ /* @__PURE__ */ jsx9(SelectItem, { value: "greaterEqual", children: t("greaterEqual") }),
5551
+ /* @__PURE__ */ jsx9(SelectItem, { value: "lessEqual", children: t("lessEqual") })
5552
+ ] })
5553
+ ] }),
5554
+ /* @__PURE__ */ jsx9(
5555
+ Input,
5556
+ {
5557
+ type: "number",
5558
+ placeholder: t("filterValue"),
5559
+ value: filterValue,
5560
+ onChange: (e) => setFilterValue(e.target.value),
5561
+ className: "w-[150px] h-9"
5562
+ }
5563
+ )
5564
+ ] }),
5565
+ selectedFilterField.type === "date" && /* @__PURE__ */ jsxs2(Fragment, { children: [
5566
+ /* @__PURE__ */ jsxs2(Select, { value: filterOperator, onValueChange: setFilterOperator, children: [
5567
+ /* @__PURE__ */ jsx9(SelectTrigger, { className: "w-[120px] h-9", children: /* @__PURE__ */ jsx9(SelectValue, {}) }),
5568
+ /* @__PURE__ */ jsxs2(SelectContent, { children: [
5569
+ /* @__PURE__ */ jsx9(SelectItem, { value: "equals", children: t("on") }),
5570
+ /* @__PURE__ */ jsx9(SelectItem, { value: "before", children: t("before") }),
5571
+ /* @__PURE__ */ jsx9(SelectItem, { value: "after", children: t("after") })
5572
+ ] })
5573
+ ] }),
5574
+ /* @__PURE__ */ jsx9(
5575
+ Input,
5576
+ {
5577
+ type: "date",
5578
+ value: filterValue,
5579
+ onChange: (e) => setFilterValue(e.target.value),
5580
+ className: "w-[180px] h-9"
5581
+ }
5582
+ )
5583
+ ] }),
5584
+ (selectedFilterField.type === "select" || selectedFilterField.type === "multiSelect") && /* @__PURE__ */ jsxs2(Select, { value: filterValue, onValueChange: setFilterValue, children: [
5585
+ /* @__PURE__ */ jsx9(SelectTrigger, { className: "w-[200px] h-9", children: /* @__PURE__ */ jsx9(SelectValue, { placeholder: t("selectValue") }) }),
5586
+ /* @__PURE__ */ jsx9(SelectContent, { children: (_a = selectedFilterField.options) == null ? void 0 : _a.map((option) => /* @__PURE__ */ jsx9(SelectItem, { value: option.name, children: option.name }, option.id)) })
5587
+ ] }),
5588
+ selectedFilterField.type === "checkbox" && /* @__PURE__ */ jsxs2(Select, { value: filterValue, onValueChange: setFilterValue, children: [
5589
+ /* @__PURE__ */ jsx9(SelectTrigger, { className: "w-[150px] h-9", children: /* @__PURE__ */ jsx9(SelectValue, { placeholder: t("selectValue") }) }),
5590
+ /* @__PURE__ */ jsxs2(SelectContent, { children: [
5591
+ /* @__PURE__ */ jsx9(SelectItem, { value: "true", children: t("yes") }),
5592
+ /* @__PURE__ */ jsx9(SelectItem, { value: "false", children: t("no") })
5593
+ ] })
5594
+ ] }),
5595
+ selectedFilterField.type === "text" && /* @__PURE__ */ jsx9(
5596
+ Input,
5597
+ {
5598
+ placeholder: t("filterValue"),
5599
+ value: filterValue,
5600
+ onChange: (e) => setFilterValue(e.target.value),
5601
+ className: "w-[200px] h-9"
5602
+ }
5603
+ ),
5604
+ /* @__PURE__ */ jsx9(
5605
+ Button,
5606
+ {
5607
+ variant: "ghost",
5608
+ size: "sm",
5609
+ className: "h-9 w-9 p-0",
5610
+ onClick: () => {
5611
+ setFilterField("");
5612
+ setFilterValue("");
5613
+ setFilterOperator("contains");
5614
+ },
5615
+ children: /* @__PURE__ */ jsx9(X, { className: "h-4 w-4" })
5616
+ }
5617
+ )
5618
+ ] })
5619
+ ] }),
5620
+ /* @__PURE__ */ jsxs2("div", { className: "text-sm text-muted-foreground", children: [
5621
+ processedRecords.length,
5622
+ " of ",
5623
+ records.length,
5624
+ " records"
5625
+ ] })
5626
+ ] }),
5627
+ /* @__PURE__ */ jsx9("div", { className: "w-full flex-1", style: { pointerEvents: "auto" }, children: /* @__PURE__ */ jsx9("div", { "data-t-grid-container": "true", tabIndex: 0, className: "relative outline-none w-full h-full", children: /* @__PURE__ */ jsx9("div", { className: "w-full h-full overflow-auto pb-10", children: /* @__PURE__ */ jsxs2(Table, { children: [
5628
+ /* @__PURE__ */ jsx9(TableHeader, { className: "bg-muted/50 sticky top-0 z-10", children: /* @__PURE__ */ jsxs2(TableRow, { children: [
5629
+ /* @__PURE__ */ jsx9(TableHead, { className: "w-12 text-muted-foreground", children: "#" }),
5630
+ schema.fields.map((field) => /* @__PURE__ */ jsxs2(TableHead, { className: "min-w-[150px]", children: [
5631
+ /* @__PURE__ */ jsx9("span", { className: "font-medium", children: field.name }),
5632
+ field.isPrimary && /* @__PURE__ */ jsx9(Badge, { variant: "outline", className: "ml-2 text-xs", children: "Primary" })
5633
+ ] }, field.id)),
5634
+ /* @__PURE__ */ jsx9(TableHead, { className: "w-[100px] text-right", children: "Actions" })
5635
+ ] }) }),
5636
+ /* @__PURE__ */ jsxs2(TableBody, { children: [
5637
+ processedRecords.map((record, index) => /* @__PURE__ */ jsxs2(
5638
+ TableRow,
5639
+ {
5640
+ className: "group cursor-pointer hover:bg-muted/50",
5641
+ onClick: () => onOpenModal("view", record),
5642
+ children: [
5643
+ /* @__PURE__ */ jsx9(TableCell, { className: "text-muted-foreground tabular-nums", children: index + 1 }),
5644
+ schema.fields.map((field) => /* @__PURE__ */ jsx9(TableCell, { children: /* @__PURE__ */ jsx9("div", { className: "min-h-[24px] flex items-center", children: renderCellValue(record, field) }) }, field.id)),
5645
+ /* @__PURE__ */ jsx9(TableCell, { className: "text-right", onClick: (e) => e.stopPropagation(), children: /* @__PURE__ */ jsxs2("div", { className: "flex justify-end gap-1 opacity-0 group-hover:opacity-100 transition-opacity", children: [
5646
+ /* @__PURE__ */ jsx9(
5647
+ Button,
5648
+ {
5649
+ variant: "ghost",
5650
+ size: "icon",
5651
+ className: "h-8 w-8",
5652
+ onClick: () => onOpenModal("view", record),
5653
+ children: /* @__PURE__ */ jsx9(Eye, { className: "h-4 w-4" })
5654
+ }
5655
+ ),
5656
+ /* @__PURE__ */ jsx9(
5657
+ Button,
5658
+ {
5659
+ variant: "ghost",
5660
+ size: "icon",
5661
+ className: "h-8 w-8",
5662
+ onClick: () => onOpenModal("edit", record),
5663
+ children: /* @__PURE__ */ jsx9(Pencil, { className: "h-4 w-4" })
5664
+ }
5665
+ ),
5666
+ /* @__PURE__ */ jsx9(
5667
+ Button,
5668
+ {
5669
+ variant: "ghost",
5670
+ size: "icon",
5671
+ className: "h-8 w-8 text-muted-foreground hover:text-destructive",
5672
+ onClick: () => onDeleteRecord(record.id),
5673
+ children: /* @__PURE__ */ jsx9(Trash2, { className: "h-4 w-4" })
5674
+ }
5675
+ )
5676
+ ] }) })
5677
+ ]
5678
+ },
5679
+ record.id
5680
+ )),
5681
+ /* @__PURE__ */ jsx9(TableRow, { children: /* @__PURE__ */ jsx9(TableCell, { colSpan: schema.fields.length + 2, className: "p-0", children: /* @__PURE__ */ jsxs2(
5682
+ Button,
5683
+ {
5684
+ variant: "ghost",
5685
+ size: "sm",
5686
+ onClick: () => onOpenModal("add"),
5687
+ className: "w-full justify-start px-4 h-10 text-muted-foreground hover:text-foreground rounded-none",
5688
+ children: [
5689
+ /* @__PURE__ */ jsx9(Plus, { className: "h-4 w-4 mr-2" }),
5690
+ "Add new record"
5691
+ ]
5692
+ }
5693
+ ) }) })
5694
+ ] })
5695
+ ] }) }) }) })
5696
+ ] }),
5697
+ /* @__PURE__ */ jsxs2("div", { className: "flex items-center h-6 pl-2 ml-1 text-xs bg-violet-200 dark:bg-zinc-600 rounded absolute bottom-3 left-0 shadow-sm z-20", children: [
3834
5698
  records.length,
3835
5699
  " records",
3836
- /* @__PURE__ */ jsx6("button", { className: "inline-flex items-center justify-center whitespace-nowrap font-medium transition-colors focus-visible:outline-none focus-visible:ring-1 focus-visible:ring-ring disabled:pointer-events-none disabled:opacity-50 gap-2 hover:text-accent-foreground rounded-md text-xs ml-[2px] h-full rounded-l-none p-[2px] hover:bg-violet-300 dark:hover:bg-zinc-500", children: /* @__PURE__ */ jsx6("svg", { xmlns: "http://www.w3.org/2000/svg", width: "1em", height: "1em", fill: "none", viewBox: "0 0 24 24", className: "w-3 h-3", children: /* @__PURE__ */ jsx6("path", { stroke: "currentColor", strokeLinecap: "round", strokeLinejoin: "round", strokeWidth: "2", d: "m15 18-6-6 6-6" }) }) })
5700
+ /* @__PURE__ */ jsx9("button", { className: "inline-flex items-center justify-center whitespace-nowrap font-medium transition-colors focus-visible:outline-none focus-visible:ring-1 focus-visible:ring-ring disabled:pointer-events-none disabled:opacity-50 gap-2 hover:text-accent-foreground rounded-md text-xs ml-[2px] h-full rounded-l-none p-[2px] hover:bg-violet-300 dark:hover:bg-zinc-500", children: /* @__PURE__ */ jsx9("svg", { xmlns: "http://www.w3.org/2000/svg", width: "1em", height: "1em", fill: "none", viewBox: "0 0 24 24", className: "w-3 h-3", children: /* @__PURE__ */ jsx9("path", { stroke: "currentColor", strokeLinecap: "round", strokeLinejoin: "round", strokeWidth: "2", d: "m15 18-6-6 6-6" }) }) })
3837
5701
  ] })
3838
5702
  ] });
3839
5703
  }
3840
5704
 
3841
5705
  // src/components/views/FormView.tsx
3842
- import { useState as useState2 } from "react";
5706
+ import { useState as useState3 } from "react";
3843
5707
 
3844
5708
  // src/components/ui/card.tsx
3845
- import * as React5 from "react";
3846
- import { jsx as jsx7 } from "react/jsx-runtime";
3847
- var Card = React5.forwardRef((_a, ref) => {
5709
+ import * as React8 from "react";
5710
+ import { jsx as jsx10 } from "react/jsx-runtime";
5711
+ var Card = React8.forwardRef((_a, ref) => {
3848
5712
  var _b = _a, { className } = _b, props = __objRest(_b, ["className"]);
3849
- return /* @__PURE__ */ jsx7(
5713
+ return /* @__PURE__ */ jsx10(
3850
5714
  "div",
3851
5715
  __spreadValues({
3852
5716
  ref,
@@ -3858,9 +5722,9 @@ var Card = React5.forwardRef((_a, ref) => {
3858
5722
  );
3859
5723
  });
3860
5724
  Card.displayName = "Card";
3861
- var CardHeader = React5.forwardRef((_a, ref) => {
5725
+ var CardHeader = React8.forwardRef((_a, ref) => {
3862
5726
  var _b = _a, { className } = _b, props = __objRest(_b, ["className"]);
3863
- return /* @__PURE__ */ jsx7(
5727
+ return /* @__PURE__ */ jsx10(
3864
5728
  "div",
3865
5729
  __spreadValues({
3866
5730
  ref,
@@ -3869,9 +5733,9 @@ var CardHeader = React5.forwardRef((_a, ref) => {
3869
5733
  );
3870
5734
  });
3871
5735
  CardHeader.displayName = "CardHeader";
3872
- var CardTitle = React5.forwardRef((_a, ref) => {
5736
+ var CardTitle = React8.forwardRef((_a, ref) => {
3873
5737
  var _b = _a, { className } = _b, props = __objRest(_b, ["className"]);
3874
- return /* @__PURE__ */ jsx7(
5738
+ return /* @__PURE__ */ jsx10(
3875
5739
  "div",
3876
5740
  __spreadValues({
3877
5741
  ref,
@@ -3880,9 +5744,9 @@ var CardTitle = React5.forwardRef((_a, ref) => {
3880
5744
  );
3881
5745
  });
3882
5746
  CardTitle.displayName = "CardTitle";
3883
- var CardDescription = React5.forwardRef((_a, ref) => {
5747
+ var CardDescription = React8.forwardRef((_a, ref) => {
3884
5748
  var _b = _a, { className } = _b, props = __objRest(_b, ["className"]);
3885
- return /* @__PURE__ */ jsx7(
5749
+ return /* @__PURE__ */ jsx10(
3886
5750
  "div",
3887
5751
  __spreadValues({
3888
5752
  ref,
@@ -3891,14 +5755,14 @@ var CardDescription = React5.forwardRef((_a, ref) => {
3891
5755
  );
3892
5756
  });
3893
5757
  CardDescription.displayName = "CardDescription";
3894
- var CardContent = React5.forwardRef((_a, ref) => {
5758
+ var CardContent = React8.forwardRef((_a, ref) => {
3895
5759
  var _b = _a, { className } = _b, props = __objRest(_b, ["className"]);
3896
- return /* @__PURE__ */ jsx7("div", __spreadValues({ ref, className: cn("p-6 pt-0", className) }, props));
5760
+ return /* @__PURE__ */ jsx10("div", __spreadValues({ ref, className: cn("p-6 pt-0", className) }, props));
3897
5761
  });
3898
5762
  CardContent.displayName = "CardContent";
3899
- var CardFooter = React5.forwardRef((_a, ref) => {
5763
+ var CardFooter = React8.forwardRef((_a, ref) => {
3900
5764
  var _b = _a, { className } = _b, props = __objRest(_b, ["className"]);
3901
- return /* @__PURE__ */ jsx7(
5765
+ return /* @__PURE__ */ jsx10(
3902
5766
  "div",
3903
5767
  __spreadValues({
3904
5768
  ref,
@@ -3909,9 +5773,9 @@ var CardFooter = React5.forwardRef((_a, ref) => {
3909
5773
  CardFooter.displayName = "CardFooter";
3910
5774
 
3911
5775
  // src/components/ui/alert.tsx
3912
- import * as React6 from "react";
5776
+ import * as React9 from "react";
3913
5777
  import { cva as cva3 } from "class-variance-authority";
3914
- import { jsx as jsx8 } from "react/jsx-runtime";
5778
+ import { jsx as jsx11 } from "react/jsx-runtime";
3915
5779
  var alertVariants = cva3(
3916
5780
  "relative w-full rounded-lg border px-4 py-3 text-sm [&>svg+div]:translate-y-[-3px] [&>svg]:absolute [&>svg]:left-4 [&>svg]:top-4 [&>svg]:text-foreground [&>svg~*]:pl-7",
3917
5781
  {
@@ -3926,9 +5790,9 @@ var alertVariants = cva3(
3926
5790
  }
3927
5791
  }
3928
5792
  );
3929
- var Alert = React6.forwardRef((_a, ref) => {
5793
+ var Alert = React9.forwardRef((_a, ref) => {
3930
5794
  var _b = _a, { className, variant } = _b, props = __objRest(_b, ["className", "variant"]);
3931
- return /* @__PURE__ */ jsx8(
5795
+ return /* @__PURE__ */ jsx11(
3932
5796
  "div",
3933
5797
  __spreadValues({
3934
5798
  ref,
@@ -3938,213 +5802,61 @@ var Alert = React6.forwardRef((_a, ref) => {
3938
5802
  );
3939
5803
  });
3940
5804
  Alert.displayName = "Alert";
3941
- var AlertTitle = React6.forwardRef((_a, ref) => {
3942
- var _b = _a, { className } = _b, props = __objRest(_b, ["className"]);
3943
- return /* @__PURE__ */ jsx8(
3944
- "h5",
3945
- __spreadValues({
3946
- ref,
3947
- className: cn("mb-1 font-medium leading-none tracking-tight", className)
3948
- }, props)
3949
- );
3950
- });
3951
- AlertTitle.displayName = "AlertTitle";
3952
- var AlertDescription = React6.forwardRef((_a, ref) => {
3953
- var _b = _a, { className } = _b, props = __objRest(_b, ["className"]);
3954
- return /* @__PURE__ */ jsx8(
3955
- "div",
3956
- __spreadValues({
3957
- ref,
3958
- className: cn("text-sm [&_p]:leading-relaxed", className)
3959
- }, props)
3960
- );
3961
- });
3962
- AlertDescription.displayName = "AlertDescription";
3963
-
3964
- // src/components/views/FormView.tsx
3965
- import { CheckCircle2 } from "lucide-react";
3966
-
3967
- // src/components/RecordForm.tsx
3968
- import { useState, useEffect } from "react";
3969
-
3970
- // src/components/ui/input.tsx
3971
- import * as React7 from "react";
3972
- import { jsx as jsx9 } from "react/jsx-runtime";
3973
- var Input = React7.forwardRef(
3974
- (_a, ref) => {
3975
- var _b = _a, { className, type } = _b, props = __objRest(_b, ["className", "type"]);
3976
- return /* @__PURE__ */ jsx9(
3977
- "input",
3978
- __spreadValues({
3979
- type,
3980
- className: cn(
3981
- "flex h-9 w-full rounded-md border border-input bg-transparent px-3 py-1 text-base shadow-sm transition-colors file:border-0 file:bg-transparent file:text-sm file:font-medium file:text-foreground placeholder:text-muted-foreground focus-visible:outline-none focus-visible:ring-1 focus-visible:ring-ring disabled:cursor-not-allowed disabled:opacity-50 md:text-sm",
3982
- className
3983
- ),
3984
- ref
3985
- }, props)
3986
- );
3987
- }
3988
- );
3989
- Input.displayName = "Input";
3990
-
3991
- // src/components/ui/label.tsx
3992
- import * as React8 from "react";
3993
- import * as LabelPrimitive from "@radix-ui/react-label";
3994
- import { cva as cva4 } from "class-variance-authority";
3995
- import { jsx as jsx10 } from "react/jsx-runtime";
3996
- var labelVariants = cva4(
3997
- "text-sm font-medium leading-none peer-disabled:cursor-not-allowed peer-disabled:opacity-70"
3998
- );
3999
- var Label = React8.forwardRef((_a, ref) => {
4000
- var _b = _a, { className } = _b, props = __objRest(_b, ["className"]);
4001
- return /* @__PURE__ */ jsx10(
4002
- LabelPrimitive.Root,
4003
- __spreadValues({
4004
- ref,
4005
- className: cn(labelVariants(), className)
4006
- }, props)
4007
- );
4008
- });
4009
- Label.displayName = LabelPrimitive.Root.displayName;
4010
-
4011
- // src/components/ui/select.tsx
4012
- import * as React9 from "react";
4013
- import * as SelectPrimitive from "@radix-ui/react-select";
4014
- import { Check as Check2, ChevronDown, ChevronUp } from "lucide-react";
4015
- import { jsx as jsx11, jsxs as jsxs2 } from "react/jsx-runtime";
4016
- var Select = SelectPrimitive.Root;
4017
- var SelectValue = SelectPrimitive.Value;
4018
- var SelectTrigger = React9.forwardRef((_a, ref) => {
4019
- var _b = _a, { className, children } = _b, props = __objRest(_b, ["className", "children"]);
4020
- return /* @__PURE__ */ jsxs2(
4021
- SelectPrimitive.Trigger,
4022
- __spreadProps(__spreadValues({
4023
- ref,
4024
- className: cn(
4025
- "flex h-9 w-full items-center justify-between whitespace-nowrap rounded-md border border-input bg-transparent px-3 py-2 text-sm shadow-sm ring-offset-background data-[placeholder]:text-muted-foreground focus:outline-none focus:ring-1 focus:ring-ring disabled:cursor-not-allowed disabled:opacity-50 [&>span]:line-clamp-1",
4026
- className
4027
- )
4028
- }, props), {
4029
- children: [
4030
- children,
4031
- /* @__PURE__ */ jsx11(SelectPrimitive.Icon, { asChild: true, children: /* @__PURE__ */ jsx11(ChevronDown, { className: "h-4 w-4 opacity-50" }) })
4032
- ]
4033
- })
4034
- );
4035
- });
4036
- SelectTrigger.displayName = SelectPrimitive.Trigger.displayName;
4037
- var SelectScrollUpButton = React9.forwardRef((_a, ref) => {
4038
- var _b = _a, { className } = _b, props = __objRest(_b, ["className"]);
4039
- return /* @__PURE__ */ jsx11(
4040
- SelectPrimitive.ScrollUpButton,
4041
- __spreadProps(__spreadValues({
4042
- ref,
4043
- className: cn(
4044
- "flex cursor-default items-center justify-center py-1",
4045
- className
4046
- )
4047
- }, props), {
4048
- children: /* @__PURE__ */ jsx11(ChevronUp, { className: "h-4 w-4" })
4049
- })
4050
- );
4051
- });
4052
- SelectScrollUpButton.displayName = SelectPrimitive.ScrollUpButton.displayName;
4053
- var SelectScrollDownButton = React9.forwardRef((_a, ref) => {
4054
- var _b = _a, { className } = _b, props = __objRest(_b, ["className"]);
4055
- return /* @__PURE__ */ jsx11(
4056
- SelectPrimitive.ScrollDownButton,
4057
- __spreadProps(__spreadValues({
4058
- ref,
4059
- className: cn(
4060
- "flex cursor-default items-center justify-center py-1",
4061
- className
4062
- )
4063
- }, props), {
4064
- children: /* @__PURE__ */ jsx11(ChevronDown, { className: "h-4 w-4" })
4065
- })
4066
- );
4067
- });
4068
- SelectScrollDownButton.displayName = SelectPrimitive.ScrollDownButton.displayName;
4069
- var SelectContent = React9.forwardRef((_a, ref) => {
4070
- var _b = _a, { className, children, position = "popper" } = _b, props = __objRest(_b, ["className", "children", "position"]);
4071
- return /* @__PURE__ */ jsx11(SelectPrimitive.Portal, { children: /* @__PURE__ */ jsxs2(
4072
- SelectPrimitive.Content,
4073
- __spreadProps(__spreadValues({
4074
- ref,
4075
- className: cn(
4076
- "relative z-50 max-h-[--radix-select-content-available-height] min-w-[8rem] overflow-y-auto overflow-x-hidden rounded-md border bg-popover text-popover-foreground shadow-md data-[state=open]:animate-in data-[state=closed]:animate-out data-[state=closed]:fade-out-0 data-[state=open]:fade-in-0 data-[state=closed]:zoom-out-95 data-[state=open]:zoom-in-95 data-[side=bottom]:slide-in-from-top-2 data-[side=left]:slide-in-from-right-2 data-[side=right]:slide-in-from-left-2 data-[side=top]:slide-in-from-bottom-2 origin-[--radix-select-content-transform-origin]",
4077
- position === "popper" && "data-[side=bottom]:translate-y-1 data-[side=left]:-translate-x-1 data-[side=right]:translate-x-1 data-[side=top]:-translate-y-1",
4078
- className
4079
- ),
4080
- position
4081
- }, props), {
4082
- children: [
4083
- /* @__PURE__ */ jsx11(SelectScrollUpButton, {}),
4084
- /* @__PURE__ */ jsx11(
4085
- SelectPrimitive.Viewport,
4086
- {
4087
- className: cn(
4088
- "p-1",
4089
- position === "popper" && "h-[var(--radix-select-trigger-height)] w-full min-w-[var(--radix-select-trigger-width)]"
4090
- ),
4091
- children
4092
- }
4093
- ),
4094
- /* @__PURE__ */ jsx11(SelectScrollDownButton, {})
4095
- ]
4096
- })
4097
- ) });
4098
- });
4099
- SelectContent.displayName = SelectPrimitive.Content.displayName;
4100
- var SelectLabel = React9.forwardRef((_a, ref) => {
5805
+ var AlertTitle = React9.forwardRef((_a, ref) => {
4101
5806
  var _b = _a, { className } = _b, props = __objRest(_b, ["className"]);
4102
5807
  return /* @__PURE__ */ jsx11(
4103
- SelectPrimitive.Label,
5808
+ "h5",
4104
5809
  __spreadValues({
4105
5810
  ref,
4106
- className: cn("px-2 py-1.5 text-sm font-semibold", className)
4107
- }, props)
4108
- );
4109
- });
4110
- SelectLabel.displayName = SelectPrimitive.Label.displayName;
4111
- var SelectItem = React9.forwardRef((_a, ref) => {
4112
- var _b = _a, { className, children } = _b, props = __objRest(_b, ["className", "children"]);
4113
- return /* @__PURE__ */ jsxs2(
4114
- SelectPrimitive.Item,
4115
- __spreadProps(__spreadValues({
4116
- ref,
4117
- className: cn(
4118
- "relative flex w-full cursor-default select-none items-center rounded-sm py-1.5 pl-2 pr-8 text-sm outline-none focus:bg-accent focus:text-accent-foreground data-[disabled]:pointer-events-none data-[disabled]:opacity-50",
4119
- className
4120
- )
4121
- }, props), {
4122
- children: [
4123
- /* @__PURE__ */ jsx11("span", { className: "absolute right-2 flex h-3.5 w-3.5 items-center justify-center", children: /* @__PURE__ */ jsx11(SelectPrimitive.ItemIndicator, { children: /* @__PURE__ */ jsx11(Check2, { className: "h-4 w-4" }) }) }),
4124
- /* @__PURE__ */ jsx11(SelectPrimitive.ItemText, { children })
4125
- ]
4126
- })
5811
+ className: cn("mb-1 font-medium leading-none tracking-tight", className)
5812
+ }, props)
4127
5813
  );
4128
5814
  });
4129
- SelectItem.displayName = SelectPrimitive.Item.displayName;
4130
- var SelectSeparator = React9.forwardRef((_a, ref) => {
5815
+ AlertTitle.displayName = "AlertTitle";
5816
+ var AlertDescription = React9.forwardRef((_a, ref) => {
4131
5817
  var _b = _a, { className } = _b, props = __objRest(_b, ["className"]);
4132
5818
  return /* @__PURE__ */ jsx11(
4133
- SelectPrimitive.Separator,
5819
+ "div",
4134
5820
  __spreadValues({
4135
5821
  ref,
4136
- className: cn("-mx-1 my-1 h-px bg-muted", className)
5822
+ className: cn("text-sm [&_p]:leading-relaxed", className)
4137
5823
  }, props)
4138
5824
  );
4139
5825
  });
4140
- SelectSeparator.displayName = SelectPrimitive.Separator.displayName;
5826
+ AlertDescription.displayName = "AlertDescription";
4141
5827
 
4142
- // src/components/ui/textarea.tsx
5828
+ // src/components/views/FormView.tsx
5829
+ import { CheckCircle2 } from "lucide-react";
5830
+
5831
+ // src/components/RecordForm.tsx
5832
+ import { useState as useState2, useEffect } from "react";
5833
+
5834
+ // src/components/ui/label.tsx
4143
5835
  import * as React10 from "react";
5836
+ import * as LabelPrimitive from "@radix-ui/react-label";
5837
+ import { cva as cva4 } from "class-variance-authority";
4144
5838
  import { jsx as jsx12 } from "react/jsx-runtime";
4145
- var Textarea = React10.forwardRef((_a, ref) => {
5839
+ var labelVariants = cva4(
5840
+ "text-sm font-medium leading-none peer-disabled:cursor-not-allowed peer-disabled:opacity-70"
5841
+ );
5842
+ var Label2 = React10.forwardRef((_a, ref) => {
4146
5843
  var _b = _a, { className } = _b, props = __objRest(_b, ["className"]);
4147
5844
  return /* @__PURE__ */ jsx12(
5845
+ LabelPrimitive.Root,
5846
+ __spreadValues({
5847
+ ref,
5848
+ className: cn(labelVariants(), className)
5849
+ }, props)
5850
+ );
5851
+ });
5852
+ Label2.displayName = LabelPrimitive.Root.displayName;
5853
+
5854
+ // src/components/ui/textarea.tsx
5855
+ import * as React11 from "react";
5856
+ import { jsx as jsx13 } from "react/jsx-runtime";
5857
+ var Textarea = React11.forwardRef((_a, ref) => {
5858
+ var _b = _a, { className } = _b, props = __objRest(_b, ["className"]);
5859
+ return /* @__PURE__ */ jsx13(
4148
5860
  "textarea",
4149
5861
  __spreadValues({
4150
5862
  className: cn(
@@ -4158,18 +5870,11 @@ var Textarea = React10.forwardRef((_a, ref) => {
4158
5870
  Textarea.displayName = "Textarea";
4159
5871
 
4160
5872
  // src/components/RecordForm.tsx
4161
- import { jsx as jsx13, jsxs as jsxs3 } from "react/jsx-runtime";
4162
- var COLOR_MAP = {
4163
- gray: "bg-muted",
4164
- blue: "bg-blue-500",
4165
- green: "bg-green-500",
4166
- yellow: "bg-amber-500",
4167
- red: "bg-red-500",
4168
- purple: "bg-purple-500"
4169
- };
5873
+ import { jsx as jsx14, jsxs as jsxs3 } from "react/jsx-runtime";
4170
5874
  var DEFAULT_INITIAL_VALUES = {};
4171
5875
  function RecordForm({ schema, initialValues = DEFAULT_INITIAL_VALUES, onSubmit, mode }) {
4172
- const [formData, setFormData] = useState(initialValues);
5876
+ const { t } = useI18n();
5877
+ const [formData, setFormData] = useState2(initialValues);
4173
5878
  useEffect(() => {
4174
5879
  setFormData(initialValues);
4175
5880
  }, [initialValues]);
@@ -4183,44 +5888,44 @@ function RecordForm({ schema, initialValues = DEFAULT_INITIAL_VALUES, onSubmit,
4183
5888
  };
4184
5889
  const isReadOnly = mode === "view";
4185
5890
  const renderField = (field) => {
4186
- var _a, _b, _c;
5891
+ var _a, _b, _c, _d;
4187
5892
  const value = (_a = formData[field.id]) != null ? _a : "";
4188
5893
  if (field.id === "description" || field.type === "text" && field.name.toLowerCase().includes("description")) {
4189
- return /* @__PURE__ */ jsx13(
5894
+ return /* @__PURE__ */ jsx14(
4190
5895
  Textarea,
4191
5896
  {
4192
5897
  value,
4193
5898
  disabled: isReadOnly,
4194
5899
  onChange: (e) => handleChange(field.id, e.target.value),
4195
- placeholder: isReadOnly ? "" : `Enter ${field.name}...`,
5900
+ placeholder: isReadOnly ? "" : `${t("enterDetails")}...`,
4196
5901
  className: "min-h-[100px] resize-none"
4197
5902
  }
4198
5903
  );
4199
5904
  }
4200
5905
  switch (field.type) {
4201
5906
  case "text":
4202
- return /* @__PURE__ */ jsx13(
5907
+ return /* @__PURE__ */ jsx14(
4203
5908
  Input,
4204
5909
  {
4205
5910
  value,
4206
5911
  disabled: isReadOnly,
4207
5912
  onChange: (e) => handleChange(field.id, e.target.value),
4208
- placeholder: isReadOnly ? "" : `Enter ${field.name}...`
5913
+ placeholder: isReadOnly ? "" : `${t("add")} ${field.name}...`
4209
5914
  }
4210
5915
  );
4211
5916
  case "number":
4212
- return /* @__PURE__ */ jsx13(
5917
+ return /* @__PURE__ */ jsx14(
4213
5918
  Input,
4214
5919
  {
4215
5920
  type: "number",
4216
5921
  value,
4217
5922
  disabled: isReadOnly,
4218
5923
  onChange: (e) => handleChange(field.id, e.target.value),
4219
- placeholder: isReadOnly ? "" : `Enter ${field.name}...`
5924
+ placeholder: isReadOnly ? "" : `${t("add")} ${field.name}...`
4220
5925
  }
4221
5926
  );
4222
5927
  case "date":
4223
- return /* @__PURE__ */ jsx13(
5928
+ return /* @__PURE__ */ jsx14(
4224
5929
  Input,
4225
5930
  {
4226
5931
  type: "date",
@@ -4231,7 +5936,7 @@ function RecordForm({ schema, initialValues = DEFAULT_INITIAL_VALUES, onSubmit,
4231
5936
  );
4232
5937
  case "checkbox":
4233
5938
  return /* @__PURE__ */ jsxs3("div", { className: "flex items-center gap-2", children: [
4234
- /* @__PURE__ */ jsx13(
5939
+ /* @__PURE__ */ jsx14(
4235
5940
  Checkbox,
4236
5941
  {
4237
5942
  id: field.id,
@@ -4240,16 +5945,21 @@ function RecordForm({ schema, initialValues = DEFAULT_INITIAL_VALUES, onSubmit,
4240
5945
  onCheckedChange: (checked) => handleChange(field.id, checked)
4241
5946
  }
4242
5947
  ),
4243
- /* @__PURE__ */ jsx13(Label, { htmlFor: field.id, className: "cursor-pointer text-sm", children: value ? "Yes" : "No" })
5948
+ /* @__PURE__ */ jsx14(Label2, { htmlFor: field.id, className: "cursor-pointer text-sm", children: value ? t("yes") : t("no") })
4244
5949
  ] });
4245
5950
  case "select":
4246
5951
  if (isReadOnly) {
4247
- return value ? /* @__PURE__ */ jsx13(Badge, { variant: "secondary", children: value }) : /* @__PURE__ */ jsx13("span", { className: "text-muted-foreground text-sm", children: "None" });
5952
+ if (!value) return /* @__PURE__ */ jsx14("span", { className: "text-muted-foreground text-sm", children: t("none") });
5953
+ const option = (_b = field.options) == null ? void 0 : _b.find((o) => o.name === value);
5954
+ return /* @__PURE__ */ jsxs3("div", { className: cn("inline-flex items-center gap-2 px-2 py-1 rounded-md text-sm mt-2", getBadgeColor(option == null ? void 0 : option.color)), children: [
5955
+ /* @__PURE__ */ jsx14("div", { className: cn("w-2 h-2 rounded-full", getDotColor(option == null ? void 0 : option.color)) }),
5956
+ value
5957
+ ] });
4248
5958
  }
4249
5959
  return /* @__PURE__ */ jsxs3(Select, { value, onValueChange: (v) => handleChange(field.id, v), children: [
4250
- /* @__PURE__ */ jsx13(SelectTrigger, { children: /* @__PURE__ */ jsx13(SelectValue, { placeholder: "Select..." }) }),
4251
- /* @__PURE__ */ jsx13(SelectContent, { children: (_b = field.options) == null ? void 0 : _b.map((opt) => /* @__PURE__ */ jsx13(SelectItem, { value: opt.name, children: /* @__PURE__ */ jsxs3("div", { className: "flex items-center gap-2", children: [
4252
- /* @__PURE__ */ jsx13("div", { className: cn("w-2 h-2 rounded-full", COLOR_MAP[opt.color || "gray"]) }),
5960
+ /* @__PURE__ */ jsx14(SelectTrigger, { children: /* @__PURE__ */ jsx14(SelectValue, { placeholder: t("selectValue") }) }),
5961
+ /* @__PURE__ */ jsx14(SelectContent, { children: (_c = field.options) == null ? void 0 : _c.map((opt) => /* @__PURE__ */ jsx14(SelectItem, { value: opt.name, children: /* @__PURE__ */ jsxs3("div", { className: "flex items-center gap-2", children: [
5962
+ /* @__PURE__ */ jsx14("div", { className: cn("w-2 h-2 rounded-full", getDotColor(opt.color)) }),
4253
5963
  opt.name
4254
5964
  ] }) }, opt.id)) })
4255
5965
  ] });
@@ -4257,11 +5967,11 @@ function RecordForm({ schema, initialValues = DEFAULT_INITIAL_VALUES, onSubmit,
4257
5967
  const selectedValues = Array.isArray(value) ? value : [];
4258
5968
  if (isReadOnly) {
4259
5969
  return /* @__PURE__ */ jsxs3("div", { className: "flex flex-wrap gap-1", children: [
4260
- selectedValues.map((v) => /* @__PURE__ */ jsx13(Badge, { variant: "secondary", children: v }, v)),
4261
- selectedValues.length === 0 && /* @__PURE__ */ jsx13("span", { className: "text-muted-foreground text-sm", children: "None" })
5970
+ selectedValues.map((v) => /* @__PURE__ */ jsx14(Badge, { variant: "secondary", children: v }, v)),
5971
+ selectedValues.length === 0 && /* @__PURE__ */ jsx14("span", { className: "text-muted-foreground text-sm", children: t("none") })
4262
5972
  ] });
4263
5973
  }
4264
- return /* @__PURE__ */ jsx13("div", { className: "flex flex-wrap gap-2", children: (_c = field.options) == null ? void 0 : _c.map((opt) => /* @__PURE__ */ jsx13(
5974
+ return /* @__PURE__ */ jsx14("div", { className: "flex flex-wrap gap-2", children: (_d = field.options) == null ? void 0 : _d.map((opt) => /* @__PURE__ */ jsx14(
4265
5975
  Badge,
4266
5976
  {
4267
5977
  variant: selectedValues.includes(opt.name) ? "default" : "outline",
@@ -4275,49 +5985,49 @@ function RecordForm({ schema, initialValues = DEFAULT_INITIAL_VALUES, onSubmit,
4275
5985
  opt.id
4276
5986
  )) });
4277
5987
  default:
4278
- return /* @__PURE__ */ jsx13(
5988
+ return /* @__PURE__ */ jsx14(
4279
5989
  Input,
4280
5990
  {
4281
5991
  value,
4282
5992
  disabled: isReadOnly,
4283
5993
  onChange: (e) => handleChange(field.id, e.target.value),
4284
- placeholder: isReadOnly ? "" : `Enter ${field.name}...`
5994
+ placeholder: isReadOnly ? "" : `${t("add")} ${field.name}...`
4285
5995
  }
4286
5996
  );
4287
5997
  }
4288
5998
  };
4289
5999
  return /* @__PURE__ */ jsxs3("form", { id: "record-form", onSubmit: handleSubmit, className: "space-y-5", children: [
4290
- schema.fields.map((field) => /* @__PURE__ */ jsxs3("div", { className: "space-y-2", children: [
4291
- /* @__PURE__ */ jsxs3(Label, { className: "text-sm font-medium", children: [
6000
+ schema.fields.map((field) => /* @__PURE__ */ jsxs3("div", { className: "space-y-3", children: [
6001
+ /* @__PURE__ */ jsxs3(Label2, { className: "text-sm font-medium mb-2 block", children: [
4292
6002
  field.name,
4293
- field.isPrimary && /* @__PURE__ */ jsx13(Badge, { variant: "outline", className: "ml-2 text-xs", children: "Primary" })
6003
+ field.isPrimary && /* @__PURE__ */ jsx14(Badge, { variant: "outline", className: "ml-2 text-xs", children: t("primary") })
4294
6004
  ] }),
4295
6005
  renderField(field)
4296
6006
  ] }, field.id)),
4297
- mode !== "view" && /* @__PURE__ */ jsx13("div", { className: "flex justify-end pt-4 border-t", children: /* @__PURE__ */ jsx13(Button, { type: "submit", children: mode === "add" ? "Create Record" : "Save Changes" }) })
6007
+ mode !== "view" && /* @__PURE__ */ jsx14("div", { className: "flex justify-end pt-4 border-t", children: /* @__PURE__ */ jsx14(Button, { type: "submit", children: mode === "add" ? t("createRecord") : t("save") }) })
4298
6008
  ] });
4299
6009
  }
4300
6010
 
4301
6011
  // src/components/views/FormView.tsx
4302
- import { jsx as jsx14, jsxs as jsxs4 } from "react/jsx-runtime";
6012
+ import { jsx as jsx15, jsxs as jsxs4 } from "react/jsx-runtime";
4303
6013
  function FormView({ schema, onCreateRecord }) {
4304
- const [success, setSuccess] = useState2(false);
6014
+ const [success, setSuccess] = useState3(false);
4305
6015
  const handleSubmit = (formData) => {
4306
6016
  onCreateRecord(formData);
4307
6017
  setSuccess(true);
4308
6018
  setTimeout(() => setSuccess(false), 3e3);
4309
6019
  };
4310
- return /* @__PURE__ */ jsx14("div", { className: "h-full overflow-auto p-8 bg-muted/30", children: /* @__PURE__ */ jsx14("div", { className: "max-w-xl mx-auto", children: /* @__PURE__ */ jsxs4(Card, { children: [
6020
+ return /* @__PURE__ */ jsx15("div", { className: "h-full overflow-auto p-8 bg-muted/30", children: /* @__PURE__ */ jsx15("div", { className: "max-w-xl mx-auto", children: /* @__PURE__ */ jsxs4(Card, { children: [
4311
6021
  /* @__PURE__ */ jsxs4(CardHeader, { children: [
4312
- /* @__PURE__ */ jsx14(CardTitle, { children: "Add New Record" }),
4313
- /* @__PURE__ */ jsx14(CardDescription, { children: "Fill out the form below to add a new entry to the database." })
6022
+ /* @__PURE__ */ jsx15(CardTitle, { children: "Add New Record" }),
6023
+ /* @__PURE__ */ jsx15(CardDescription, { children: "Fill out the form below to add a new entry to the database." })
4314
6024
  ] }),
4315
6025
  /* @__PURE__ */ jsxs4(CardContent, { children: [
4316
6026
  success && /* @__PURE__ */ jsxs4(Alert, { className: "mb-6 border-green-200 bg-green-50 text-green-800 dark:border-green-800 dark:bg-green-950 dark:text-green-200", children: [
4317
- /* @__PURE__ */ jsx14(CheckCircle2, { className: "h-4 w-4" }),
4318
- /* @__PURE__ */ jsx14(AlertDescription, { children: "Record created successfully!" })
6027
+ /* @__PURE__ */ jsx15(CheckCircle2, { className: "h-4 w-4" }),
6028
+ /* @__PURE__ */ jsx15(AlertDescription, { children: "Record created successfully!" })
4319
6029
  ] }),
4320
- /* @__PURE__ */ jsx14(
6030
+ /* @__PURE__ */ jsx15(
4321
6031
  RecordForm,
4322
6032
  {
4323
6033
  schema,
@@ -4330,9 +6040,13 @@ function FormView({ schema, onCreateRecord }) {
4330
6040
  }
4331
6041
 
4332
6042
  // src/components/views/KanbanView.tsx
4333
- import { useState as useState3, useMemo } from "react";
6043
+ import { useState as useState4, useMemo as useMemo2 } from "react";
4334
6044
  import {
4335
6045
  Plus as Plus2,
6046
+ MoreHorizontal,
6047
+ Trash2 as Trash22,
6048
+ Eye as Eye2,
6049
+ Pencil as Pencil2,
4336
6050
  Calendar,
4337
6051
  AlignLeft,
4338
6052
  CheckSquare,
@@ -4341,156 +6055,17 @@ import {
4341
6055
  Tags,
4342
6056
  User as UserIcon
4343
6057
  } from "lucide-react";
4344
- import { jsx as jsx15, jsxs as jsxs5 } from "react/jsx-runtime";
4345
- var BADGE_COLOR_MAP2 = {
4346
- gray: "bg-muted text-muted-foreground hover:bg-muted/80",
4347
- blue: "bg-blue-100 text-blue-700 dark:bg-blue-900/50 dark:text-blue-300 hover:bg-blue-100/80",
4348
- green: "bg-green-100 text-green-700 dark:bg-green-900/50 dark:text-green-300 hover:bg-green-100/80",
4349
- yellow: "bg-amber-100 text-amber-700 dark:bg-amber-900/50 dark:text-amber-300 hover:bg-amber-100/80",
4350
- red: "bg-red-100 text-red-700 dark:bg-red-900/50 dark:text-red-300 hover:bg-red-100/80",
4351
- purple: "bg-purple-100 text-purple-700 dark:bg-purple-900/50 dark:text-purple-300 hover:bg-purple-100/80"
4352
- };
4353
- var COLUMN_DOT_COLOR_MAP = {
4354
- gray: "bg-gray-400",
4355
- blue: "bg-blue-500",
4356
- green: "bg-green-500",
4357
- yellow: "bg-amber-500",
4358
- red: "bg-red-500",
4359
- purple: "bg-purple-500"
4360
- };
4361
- var FIELD_ICON_MAP = {
4362
- text: AlignLeft,
4363
- number: Hash,
4364
- select: Tag,
4365
- multiSelect: Tags,
4366
- date: Calendar,
4367
- checkbox: CheckSquare,
4368
- user: UserIcon
4369
- };
4370
- function KanbanView({ schema, records, onUpdateRecord, onDeleteRecord, onOpenModal }) {
4371
- const [draggedRecord, setDraggedRecord] = useState3(null);
4372
- const selectField = getSelectField(schema);
4373
- const primaryField = getPrimaryField(schema);
4374
- const columns = useMemo(() => {
4375
- if (!(selectField == null ? void 0 : selectField.options)) return [];
4376
- return [
4377
- { id: "__empty__", name: "Uncategorized", color: "gray" },
4378
- ...selectField.options
4379
- ];
4380
- }, [selectField]);
4381
- const recordsByColumn = useMemo(() => {
4382
- const grouped = {};
4383
- columns.forEach((col) => {
4384
- grouped[col.id] = [];
4385
- });
4386
- records.forEach((record) => {
4387
- var _a, _b;
4388
- if (!selectField) return;
4389
- const value = record.fields[selectField.id];
4390
- const option = (_a = selectField.options) == null ? void 0 : _a.find((o) => o.name === value);
4391
- const colId = (option == null ? void 0 : option.id) || "__empty__";
4392
- (_b = grouped[colId]) == null ? void 0 : _b.push(record);
4393
- });
4394
- return grouped;
4395
- }, [records, columns, selectField]);
4396
- const handleDragOver = (e) => {
4397
- e.preventDefault();
4398
- };
4399
- const handleDrop = (columnId) => {
4400
- if (!draggedRecord || !selectField) return;
4401
- const column = columns.find((c) => c.id === columnId);
4402
- const value = columnId === "__empty__" ? "" : (column == null ? void 0 : column.name) || "";
4403
- onUpdateRecord(draggedRecord, { [selectField.id]: value });
4404
- setDraggedRecord(null);
4405
- };
4406
- if (!selectField) {
4407
- return /* @__PURE__ */ jsx15("div", { className: "h-full flex items-center justify-center text-muted-foreground", children: "No select field found in schema. Add a select field to enable Kanban view." });
4408
- }
4409
- return /* @__PURE__ */ jsx15("div", { className: "w-full grow overflow-hidden bg-background", children: /* @__PURE__ */ jsx15("div", { className: "relative w-full h-full overflow-x-auto overflow-y-hidden p-2", children: /* @__PURE__ */ jsx15("div", { className: "flex h-full", children: columns.map((column) => {
4410
- var _a, _b;
4411
- return /* @__PURE__ */ jsx15("div", { className: "h-full pr-4", children: /* @__PURE__ */ jsxs5("div", { className: "w-[264px] h-full border bg-muted rounded-md shrink-0 flex flex-col overflow-hidden", children: [
4412
- /* @__PURE__ */ jsx15("div", { className: "w-full", children: /* @__PURE__ */ jsx15("div", { className: "flex h-12 w-full shrink-0 items-center justify-between border-b bg-card px-4", children: /* @__PURE__ */ jsxs5("div", { className: "flex items-center space-x-2 overflow-hidden text-muted-foreground", children: [
4413
- /* @__PURE__ */ jsx15("div", { className: cn("w-2 h-2 rounded-full shrink-0", COLUMN_DOT_COLOR_MAP[column.color || "gray"]) }),
4414
- /* @__PURE__ */ jsx15("span", { className: "text-sm font-semibold truncate", children: column.name }),
4415
- /* @__PURE__ */ jsx15("span", { className: "rounded-xl border px-2 text-xs", children: ((_a = recordsByColumn[column.id]) == null ? void 0 : _a.length) || 0 })
4416
- ] }) }) }),
4417
- /* @__PURE__ */ jsx15(
4418
- "div",
4419
- {
4420
- className: "flex-1 w-full overflow-y-auto min-h-0",
4421
- onDragOver: handleDragOver,
4422
- onDrop: () => handleDrop(column.id),
4423
- children: /* @__PURE__ */ jsx15("div", { className: "flex flex-col pt-3 pb-3", children: (_b = recordsByColumn[column.id]) == null ? void 0 : _b.map((record) => /* @__PURE__ */ jsx15("div", { className: "w-full px-3 mb-2", children: /* @__PURE__ */ jsxs5(
4424
- "div",
4425
- {
4426
- draggable: true,
4427
- onDragStart: () => setDraggedRecord(record.id),
4428
- onClick: () => onOpenModal("view", record),
4429
- className: cn(
4430
- "relative flex w-full grow flex-col space-y-2 gap-1 overflow-hidden rounded-md border border-border bg-card hover:border-primary/15 p-3 cursor-pointer transition-all",
4431
- draggedRecord === record.id && "opacity-50 ring-2 ring-primary"
4432
- ),
4433
- children: [
4434
- /* @__PURE__ */ jsx15("div", { className: "text-base font-semibold", children: primaryField ? record.fields[primaryField.id] || "Untitled" : "Untitled" }),
4435
- schema.fields.filter((f) => !f.isPrimary && f.id !== selectField.id).map((field) => {
4436
- const value = record.fields[field.id];
4437
- if (value === void 0 || value === null || value === "" || value === false) return null;
4438
- const Icon2 = FIELD_ICON_MAP[field.type] || AlignLeft;
4439
- return /* @__PURE__ */ jsxs5("div", { children: [
4440
- /* @__PURE__ */ jsxs5("div", { className: "mb-1 flex items-center space-x-1 text-muted-foreground", children: [
4441
- /* @__PURE__ */ jsx15(Icon2, { className: "w-4 h-4 text-sm" }),
4442
- /* @__PURE__ */ jsx15("span", { className: "text-xs", children: field.name })
4443
- ] }),
4444
- /* @__PURE__ */ jsx15("div", { className: "w-full text-[13px] leading-5 breaking-all line-clamp-6", children: field.type === "select" ? /* @__PURE__ */ jsx15("div", { className: "flex gap-1 flex-wrap", children: (() => {
4445
- var _a2;
4446
- const option = (_a2 = field.options) == null ? void 0 : _a2.find((o) => o.name === value);
4447
- return /* @__PURE__ */ jsx15(
4448
- "div",
4449
- {
4450
- className: cn(
4451
- "text-xs px-2 h-5 rounded-md flex items-center gap-1 min-w-0 truncate",
4452
- BADGE_COLOR_MAP2[(option == null ? void 0 : option.color) || "gray"]
4453
- ),
4454
- title: String(value),
4455
- children: /* @__PURE__ */ jsx15("span", { className: "min-w-0 truncate", children: String(value) })
4456
- }
4457
- );
4458
- })() }) : field.type === "checkbox" ? /* @__PURE__ */ jsx15("div", { className: "flex gap-1 flex-wrap", children: /* @__PURE__ */ jsx15("div", { className: cn(
4459
- "flex items-center justify-center w-5 h-5 rounded-sm border border-primary shadow bg-primary text-primary-foreground"
4460
- ), children: /* @__PURE__ */ jsx15(CheckSquare, { className: "h-4 w-4" }) }) }) : /* @__PURE__ */ jsx15("span", { title: String(value), className: "whitespace-pre-wrap break-all", children: String(value) }) })
4461
- ] }, field.id);
4462
- })
4463
- ]
4464
- }
4465
- ) }, record.id)) })
4466
- }
4467
- ),
4468
- /* @__PURE__ */ jsx15("div", { className: "flex items-center justify-center rounded-b-md bg-slate-50 px-3 py-2 dark:bg-muted", children: /* @__PURE__ */ jsx15(
4469
- Button,
4470
- {
4471
- variant: "outline",
4472
- className: "w-full h-9 gap-2 bg-background dark:bg-white/5 dark:hover:bg-white/10 shadow-none hover:bg-zinc-100 dark:hover:bg-zinc-800",
4473
- onClick: () => onOpenModal("add"),
4474
- children: /* @__PURE__ */ jsx15(Plus2, { className: "w-5 h-5" })
4475
- }
4476
- ) })
4477
- ] }) }, column.id);
4478
- }) }) }) });
4479
- }
4480
-
4481
- // src/components/views/GalleryView.tsx
4482
- import { Plus as Plus3, Trash2 as Trash23, MoreHorizontal as MoreHorizontal2, Eye as Eye3, Pencil as Pencil3 } from "lucide-react";
4483
6058
 
4484
6059
  // src/components/ui/dropdown-menu.tsx
4485
- import * as React11 from "react";
6060
+ import * as React12 from "react";
4486
6061
  import * as DropdownMenuPrimitive from "@radix-ui/react-dropdown-menu";
4487
6062
  import { Check as Check3, ChevronRight, Circle } from "lucide-react";
4488
- import { jsx as jsx16, jsxs as jsxs6 } from "react/jsx-runtime";
6063
+ import { jsx as jsx16, jsxs as jsxs5 } from "react/jsx-runtime";
4489
6064
  var DropdownMenu = DropdownMenuPrimitive.Root;
4490
6065
  var DropdownMenuTrigger = DropdownMenuPrimitive.Trigger;
4491
- var DropdownMenuSubTrigger = React11.forwardRef((_a, ref) => {
6066
+ var DropdownMenuSubTrigger = React12.forwardRef((_a, ref) => {
4492
6067
  var _b = _a, { className, inset, children } = _b, props = __objRest(_b, ["className", "inset", "children"]);
4493
- return /* @__PURE__ */ jsxs6(
6068
+ return /* @__PURE__ */ jsxs5(
4494
6069
  DropdownMenuPrimitive.SubTrigger,
4495
6070
  __spreadProps(__spreadValues({
4496
6071
  ref,
@@ -4508,7 +6083,7 @@ var DropdownMenuSubTrigger = React11.forwardRef((_a, ref) => {
4508
6083
  );
4509
6084
  });
4510
6085
  DropdownMenuSubTrigger.displayName = DropdownMenuPrimitive.SubTrigger.displayName;
4511
- var DropdownMenuSubContent = React11.forwardRef((_a, ref) => {
6086
+ var DropdownMenuSubContent = React12.forwardRef((_a, ref) => {
4512
6087
  var _b = _a, { className } = _b, props = __objRest(_b, ["className"]);
4513
6088
  return /* @__PURE__ */ jsx16(
4514
6089
  DropdownMenuPrimitive.SubContent,
@@ -4522,7 +6097,7 @@ var DropdownMenuSubContent = React11.forwardRef((_a, ref) => {
4522
6097
  );
4523
6098
  });
4524
6099
  DropdownMenuSubContent.displayName = DropdownMenuPrimitive.SubContent.displayName;
4525
- var DropdownMenuContent = React11.forwardRef((_a, ref) => {
6100
+ var DropdownMenuContent = React12.forwardRef((_a, ref) => {
4526
6101
  var _b = _a, { className, sideOffset = 4 } = _b, props = __objRest(_b, ["className", "sideOffset"]);
4527
6102
  return /* @__PURE__ */ jsx16(DropdownMenuPrimitive.Portal, { children: /* @__PURE__ */ jsx16(
4528
6103
  DropdownMenuPrimitive.Content,
@@ -4538,7 +6113,7 @@ var DropdownMenuContent = React11.forwardRef((_a, ref) => {
4538
6113
  ) });
4539
6114
  });
4540
6115
  DropdownMenuContent.displayName = DropdownMenuPrimitive.Content.displayName;
4541
- var DropdownMenuItem = React11.forwardRef((_a, ref) => {
6116
+ var DropdownMenuItem = React12.forwardRef((_a, ref) => {
4542
6117
  var _b = _a, { className, inset } = _b, props = __objRest(_b, ["className", "inset"]);
4543
6118
  return /* @__PURE__ */ jsx16(
4544
6119
  DropdownMenuPrimitive.Item,
@@ -4553,9 +6128,9 @@ var DropdownMenuItem = React11.forwardRef((_a, ref) => {
4553
6128
  );
4554
6129
  });
4555
6130
  DropdownMenuItem.displayName = DropdownMenuPrimitive.Item.displayName;
4556
- var DropdownMenuCheckboxItem = React11.forwardRef((_a, ref) => {
6131
+ var DropdownMenuCheckboxItem = React12.forwardRef((_a, ref) => {
4557
6132
  var _b = _a, { className, children, checked } = _b, props = __objRest(_b, ["className", "children", "checked"]);
4558
- return /* @__PURE__ */ jsxs6(
6133
+ return /* @__PURE__ */ jsxs5(
4559
6134
  DropdownMenuPrimitive.CheckboxItem,
4560
6135
  __spreadProps(__spreadValues({
4561
6136
  ref,
@@ -4573,9 +6148,9 @@ var DropdownMenuCheckboxItem = React11.forwardRef((_a, ref) => {
4573
6148
  );
4574
6149
  });
4575
6150
  DropdownMenuCheckboxItem.displayName = DropdownMenuPrimitive.CheckboxItem.displayName;
4576
- var DropdownMenuRadioItem = React11.forwardRef((_a, ref) => {
6151
+ var DropdownMenuRadioItem = React12.forwardRef((_a, ref) => {
4577
6152
  var _b = _a, { className, children } = _b, props = __objRest(_b, ["className", "children"]);
4578
- return /* @__PURE__ */ jsxs6(
6153
+ return /* @__PURE__ */ jsxs5(
4579
6154
  DropdownMenuPrimitive.RadioItem,
4580
6155
  __spreadProps(__spreadValues({
4581
6156
  ref,
@@ -4592,7 +6167,7 @@ var DropdownMenuRadioItem = React11.forwardRef((_a, ref) => {
4592
6167
  );
4593
6168
  });
4594
6169
  DropdownMenuRadioItem.displayName = DropdownMenuPrimitive.RadioItem.displayName;
4595
- var DropdownMenuLabel = React11.forwardRef((_a, ref) => {
6170
+ var DropdownMenuLabel = React12.forwardRef((_a, ref) => {
4596
6171
  var _b = _a, { className, inset } = _b, props = __objRest(_b, ["className", "inset"]);
4597
6172
  return /* @__PURE__ */ jsx16(
4598
6173
  DropdownMenuPrimitive.Label,
@@ -4607,7 +6182,7 @@ var DropdownMenuLabel = React11.forwardRef((_a, ref) => {
4607
6182
  );
4608
6183
  });
4609
6184
  DropdownMenuLabel.displayName = DropdownMenuPrimitive.Label.displayName;
4610
- var DropdownMenuSeparator = React11.forwardRef((_a, ref) => {
6185
+ var DropdownMenuSeparator = React12.forwardRef((_a, ref) => {
4611
6186
  var _b = _a, { className } = _b, props = __objRest(_b, ["className"]);
4612
6187
  return /* @__PURE__ */ jsx16(
4613
6188
  DropdownMenuPrimitive.Separator,
@@ -4633,32 +6208,223 @@ var DropdownMenuShortcut = (_a) => {
4633
6208
  };
4634
6209
  DropdownMenuShortcut.displayName = "DropdownMenuShortcut";
4635
6210
 
6211
+ // src/components/views/KanbanView.tsx
6212
+ import { jsx as jsx17, jsxs as jsxs6 } from "react/jsx-runtime";
6213
+ var FIELD_ICON_MAP = {
6214
+ text: AlignLeft,
6215
+ number: Hash,
6216
+ select: Tag,
6217
+ multiSelect: Tags,
6218
+ date: Calendar,
6219
+ checkbox: CheckSquare,
6220
+ user: UserIcon
6221
+ };
6222
+ function KanbanView({ schema, records, onUpdateRecord, onDeleteRecord, onOpenModal }) {
6223
+ const [draggedRecord, setDraggedRecord] = useState4(null);
6224
+ const { t } = useI18n();
6225
+ const selectField = getSelectField(schema);
6226
+ const primaryField = getPrimaryField(schema);
6227
+ const columns = useMemo2(() => {
6228
+ var _a, _b;
6229
+ if (!selectField) return [];
6230
+ const groups = {
6231
+ "uncategorized": []
6232
+ };
6233
+ (_a = selectField.options) == null ? void 0 : _a.forEach((opt) => {
6234
+ groups[opt.name] = [];
6235
+ });
6236
+ records.forEach((record) => {
6237
+ const value = record.fields[selectField.id];
6238
+ if (value && groups[value]) {
6239
+ groups[value].push(record);
6240
+ } else {
6241
+ groups["uncategorized"].push(record);
6242
+ }
6243
+ });
6244
+ return [
6245
+ ...((_b = selectField.options) == null ? void 0 : _b.map((opt) => ({
6246
+ id: opt.name,
6247
+ name: opt.name,
6248
+ color: opt.color,
6249
+ records: groups[opt.name] || []
6250
+ }))) || [],
6251
+ {
6252
+ id: "uncategorized",
6253
+ name: t("uncategorized"),
6254
+ color: "gray",
6255
+ records: groups["uncategorized"]
6256
+ }
6257
+ ];
6258
+ }, [selectField, records, t]);
6259
+ const recordsByColumn = useMemo2(() => {
6260
+ const grouped = {};
6261
+ columns.forEach((col) => {
6262
+ grouped[col.id] = col.records;
6263
+ });
6264
+ return grouped;
6265
+ }, [columns]);
6266
+ const handleDragOver = (e) => {
6267
+ e.preventDefault();
6268
+ };
6269
+ const handleDrop = (columnId) => {
6270
+ if (!draggedRecord || !selectField) return;
6271
+ const column = columns.find((c) => c.id === columnId);
6272
+ const value = columnId === "__empty__" ? "" : (column == null ? void 0 : column.name) || "";
6273
+ onUpdateRecord(draggedRecord, { [selectField.id]: value });
6274
+ setDraggedRecord(null);
6275
+ };
6276
+ if (!selectField) {
6277
+ return /* @__PURE__ */ jsx17("div", { className: "h-full flex items-center justify-center text-muted-foreground", children: "No select field found in schema. Add a select field to enable Kanban view." });
6278
+ }
6279
+ return /* @__PURE__ */ jsx17("div", { className: "w-full grow overflow-hidden bg-background", children: /* @__PURE__ */ jsx17("div", { className: "relative w-full h-full overflow-x-auto overflow-y-hidden p-2", children: /* @__PURE__ */ jsx17("div", { className: "flex h-full", children: columns.map((column) => {
6280
+ var _a, _b;
6281
+ return /* @__PURE__ */ jsx17("div", { className: "h-full pr-4", children: /* @__PURE__ */ jsxs6("div", { className: "w-[264px] h-full border bg-muted rounded-md shrink-0 flex flex-col overflow-hidden", children: [
6282
+ /* @__PURE__ */ jsx17("div", { className: "w-full", children: /* @__PURE__ */ jsx17("div", { className: "flex h-12 w-full shrink-0 items-center justify-between border-b bg-card px-4", children: /* @__PURE__ */ jsxs6("div", { className: "flex items-center space-x-2 overflow-hidden text-muted-foreground", children: [
6283
+ /* @__PURE__ */ jsx17("div", { className: cn("w-2 h-2 rounded-full shrink-0", getDotColor(column.color)) }),
6284
+ /* @__PURE__ */ jsx17("span", { className: "text-sm font-semibold truncate", children: column.name }),
6285
+ /* @__PURE__ */ jsx17("span", { className: "rounded-xl border px-2 text-xs", children: ((_a = recordsByColumn[column.id]) == null ? void 0 : _a.length) || 0 })
6286
+ ] }) }) }),
6287
+ /* @__PURE__ */ jsx17(
6288
+ "div",
6289
+ {
6290
+ className: "flex-1 w-full overflow-y-auto min-h-0",
6291
+ onDragOver: handleDragOver,
6292
+ onDrop: () => handleDrop(column.id),
6293
+ children: /* @__PURE__ */ jsx17("div", { className: "flex flex-col pt-3 pb-3", children: (_b = recordsByColumn[column.id]) == null ? void 0 : _b.map((record) => /* @__PURE__ */ jsx17("div", { className: "w-full px-3 mb-2", children: /* @__PURE__ */ jsxs6(
6294
+ "div",
6295
+ {
6296
+ draggable: true,
6297
+ onDragStart: () => setDraggedRecord(record.id),
6298
+ className: cn(
6299
+ "relative flex w-full grow flex-col space-y-2 gap-1 overflow-hidden rounded-md border border-border bg-card hover:border-primary/15 p-3 cursor-pointer transition-all group",
6300
+ draggedRecord === record.id && "opacity-50 ring-2 ring-primary"
6301
+ ),
6302
+ children: [
6303
+ /* @__PURE__ */ jsxs6("div", { className: "flex items-start justify-between gap-2", children: [
6304
+ /* @__PURE__ */ jsx17(
6305
+ "div",
6306
+ {
6307
+ className: "text-base font-semibold flex-1 min-w-0",
6308
+ onClick: () => onOpenModal("view", record),
6309
+ children: primaryField ? record.fields[primaryField.id] || t("untitled") : t("untitled")
6310
+ }
6311
+ ),
6312
+ /* @__PURE__ */ jsxs6(DropdownMenu, { children: [
6313
+ /* @__PURE__ */ jsx17(DropdownMenuTrigger, { asChild: true, onClick: (e) => e.stopPropagation(), children: /* @__PURE__ */ jsx17(
6314
+ Button,
6315
+ {
6316
+ variant: "ghost",
6317
+ size: "icon",
6318
+ className: "h-6 w-6 opacity-0 group-hover:opacity-100 transition-opacity shrink-0",
6319
+ children: /* @__PURE__ */ jsx17(MoreHorizontal, { className: "h-4 w-4" })
6320
+ }
6321
+ ) }),
6322
+ /* @__PURE__ */ jsxs6(DropdownMenuContent, { align: "end", onClick: (e) => e.stopPropagation(), children: [
6323
+ /* @__PURE__ */ jsxs6(DropdownMenuItem, { onClick: (e) => {
6324
+ e.stopPropagation();
6325
+ onOpenModal("view", record);
6326
+ }, children: [
6327
+ /* @__PURE__ */ jsx17(Eye2, { className: "h-4 w-4 mr-2" }),
6328
+ t("view")
6329
+ ] }),
6330
+ /* @__PURE__ */ jsxs6(DropdownMenuItem, { onClick: (e) => {
6331
+ e.stopPropagation();
6332
+ onOpenModal("edit", record);
6333
+ }, children: [
6334
+ /* @__PURE__ */ jsx17(Pencil2, { className: "h-4 w-4 mr-2" }),
6335
+ t("edit")
6336
+ ] }),
6337
+ /* @__PURE__ */ jsxs6(
6338
+ DropdownMenuItem,
6339
+ {
6340
+ className: "text-destructive focus:text-destructive",
6341
+ onClick: (e) => {
6342
+ e.stopPropagation();
6343
+ onDeleteRecord(record.id);
6344
+ },
6345
+ children: [
6346
+ /* @__PURE__ */ jsx17(Trash22, { className: "h-4 w-4 mr-2" }),
6347
+ t("delete")
6348
+ ]
6349
+ }
6350
+ )
6351
+ ] })
6352
+ ] })
6353
+ ] }),
6354
+ schema.fields.filter((f) => !f.isPrimary && f.id !== selectField.id).map((field) => {
6355
+ const value = record.fields[field.id];
6356
+ if (value === void 0 || value === null || value === "" || value === false) return null;
6357
+ const Icon2 = FIELD_ICON_MAP[field.type] || AlignLeft;
6358
+ return /* @__PURE__ */ jsxs6("div", { children: [
6359
+ /* @__PURE__ */ jsxs6("div", { className: "mb-1 flex items-center space-x-1 text-muted-foreground", children: [
6360
+ /* @__PURE__ */ jsx17(Icon2, { className: "w-4 h-4 text-sm" }),
6361
+ /* @__PURE__ */ jsx17("span", { className: "text-xs", children: field.name })
6362
+ ] }),
6363
+ /* @__PURE__ */ jsx17("div", { className: "w-full text-[13px] leading-5 breaking-all line-clamp-6", children: field.type === "select" ? /* @__PURE__ */ jsx17("div", { className: "flex gap-1 flex-wrap", children: (() => {
6364
+ var _a2;
6365
+ const option = (_a2 = field.options) == null ? void 0 : _a2.find((o) => o.name === value);
6366
+ return /* @__PURE__ */ jsx17(
6367
+ "div",
6368
+ {
6369
+ className: cn(
6370
+ "text-xs px-2 h-5 rounded-md flex items-center gap-1 min-w-0 truncate",
6371
+ getBadgeColor(option == null ? void 0 : option.color)
6372
+ ),
6373
+ title: String(value),
6374
+ children: /* @__PURE__ */ jsx17("span", { className: "min-w-0 truncate", children: String(value) })
6375
+ }
6376
+ );
6377
+ })() }) : field.type === "checkbox" ? /* @__PURE__ */ jsx17("div", { className: "flex gap-1 flex-wrap", children: /* @__PURE__ */ jsx17("div", { className: cn(
6378
+ "flex items-center justify-center w-5 h-5 rounded-sm border border-primary shadow bg-primary text-primary-foreground"
6379
+ ), children: /* @__PURE__ */ jsx17(CheckSquare, { className: "h-4 w-4" }) }) }) : /* @__PURE__ */ jsx17("span", { title: String(value), className: "whitespace-pre-wrap break-all", children: String(value) }) })
6380
+ ] }, field.id);
6381
+ })
6382
+ ]
6383
+ }
6384
+ ) }, record.id)) })
6385
+ }
6386
+ ),
6387
+ /* @__PURE__ */ jsx17("div", { className: "flex items-center justify-center rounded-b-md bg-slate-50 px-3 py-2 dark:bg-muted", children: /* @__PURE__ */ jsx17(
6388
+ Button,
6389
+ {
6390
+ variant: "outline",
6391
+ className: "w-full h-9 gap-2 bg-background dark:bg-white/5 dark:hover:bg-white/10 shadow-none hover:bg-zinc-100 dark:hover:bg-zinc-800",
6392
+ onClick: () => onOpenModal("add"),
6393
+ children: /* @__PURE__ */ jsx17(Plus2, { className: "w-5 h-5" })
6394
+ }
6395
+ ) })
6396
+ ] }) }, column.id);
6397
+ }) }) }) });
6398
+ }
6399
+
4636
6400
  // src/components/views/GalleryView.tsx
4637
- import { jsx as jsx17, jsxs as jsxs7 } from "react/jsx-runtime";
6401
+ import { Plus as Plus3, Trash2 as Trash23, MoreHorizontal as MoreHorizontal2, Eye as Eye3, Pencil as Pencil3 } from "lucide-react";
6402
+ import { jsx as jsx18, jsxs as jsxs7 } from "react/jsx-runtime";
4638
6403
  function GalleryView({ schema, records, onDeleteRecord, onOpenModal }) {
6404
+ const { t } = useI18n();
4639
6405
  const primaryField = getPrimaryField(schema);
4640
6406
  const displayFields = schema.fields.filter((f) => f.id !== (primaryField == null ? void 0 : primaryField.id)).slice(0, 3);
4641
- return /* @__PURE__ */ jsx17("div", { className: "h-full overflow-auto p-6 bg-muted/30", children: /* @__PURE__ */ jsxs7("div", { className: "grid grid-cols-1 sm:grid-cols-2 lg:grid-cols-3 xl:grid-cols-4 gap-4", children: [
6407
+ return /* @__PURE__ */ jsx18("div", { className: "h-full overflow-auto p-6 bg-muted/30", children: /* @__PURE__ */ jsxs7("div", { className: "grid grid-cols-1 sm:grid-cols-2 lg:grid-cols-3 xl:grid-cols-4 gap-4", children: [
4642
6408
  records.map((record) => {
4643
- const title = primaryField ? record.fields[primaryField.id] : "Untitled";
6409
+ const title = primaryField ? record.fields[primaryField.id] : t("untitled");
4644
6410
  return /* @__PURE__ */ jsxs7(
4645
6411
  Card,
4646
6412
  {
4647
- className: "group hover:shadow-md transition-all cursor-pointer overflow-hidden",
6413
+ className: "group hover:shadow-md transition-all cursor-pointer overflow-hidden text-start",
4648
6414
  onClick: () => onOpenModal("view", record),
4649
6415
  children: [
4650
6416
  /* @__PURE__ */ jsxs7("div", { className: "aspect-[16/10] bg-muted flex items-center justify-center relative", children: [
4651
- /* @__PURE__ */ jsx17("span", { className: "text-4xl font-semibold text-muted-foreground/20 select-none", children: (title || "U").charAt(0).toUpperCase() }),
4652
- /* @__PURE__ */ jsx17("div", { className: "absolute top-2 right-2 opacity-0 group-hover:opacity-100 transition-opacity", children: /* @__PURE__ */ jsxs7(DropdownMenu, { children: [
4653
- /* @__PURE__ */ jsx17(DropdownMenuTrigger, { asChild: true, onClick: (e) => e.stopPropagation(), children: /* @__PURE__ */ jsx17(Button, { variant: "secondary", size: "icon", className: "h-8 w-8", children: /* @__PURE__ */ jsx17(MoreHorizontal2, { className: "h-4 w-4" }) }) }),
6417
+ /* @__PURE__ */ jsx18("span", { className: "text-4xl font-semibold text-muted-foreground/20 select-none", children: String(title || t("untitled")).charAt(0).toUpperCase() }),
6418
+ /* @__PURE__ */ jsx18("div", { className: "absolute top-2 right-2 opacity-0 group-hover:opacity-100 transition-opacity", children: /* @__PURE__ */ jsxs7(DropdownMenu, { children: [
6419
+ /* @__PURE__ */ jsx18(DropdownMenuTrigger, { asChild: true, onClick: (e) => e.stopPropagation(), children: /* @__PURE__ */ jsx18(Button, { variant: "secondary", size: "icon", className: "h-8 w-8", children: /* @__PURE__ */ jsx18(MoreHorizontal2, { className: "h-4 w-4" }) }) }),
4654
6420
  /* @__PURE__ */ jsxs7(DropdownMenuContent, { align: "end", children: [
4655
6421
  /* @__PURE__ */ jsxs7(DropdownMenuItem, { onClick: () => onOpenModal("view", record), children: [
4656
- /* @__PURE__ */ jsx17(Eye3, { className: "h-4 w-4 mr-2" }),
4657
- "View"
6422
+ /* @__PURE__ */ jsx18(Eye3, { className: "h-4 w-4 mr-2" }),
6423
+ t("view")
4658
6424
  ] }),
4659
6425
  /* @__PURE__ */ jsxs7(DropdownMenuItem, { onClick: () => onOpenModal("edit", record), children: [
4660
- /* @__PURE__ */ jsx17(Pencil3, { className: "h-4 w-4 mr-2" }),
4661
- "Edit"
6426
+ /* @__PURE__ */ jsx18(Pencil3, { className: "h-4 w-4 mr-2" }),
6427
+ t("edit")
4662
6428
  ] }),
4663
6429
  /* @__PURE__ */ jsxs7(
4664
6430
  DropdownMenuItem,
@@ -4666,8 +6432,8 @@ function GalleryView({ schema, records, onDeleteRecord, onOpenModal }) {
4666
6432
  className: "text-destructive focus:text-destructive",
4667
6433
  onClick: () => onDeleteRecord(record.id),
4668
6434
  children: [
4669
- /* @__PURE__ */ jsx17(Trash23, { className: "h-4 w-4 mr-2" }),
4670
- "Delete"
6435
+ /* @__PURE__ */ jsx18(Trash23, { className: "h-4 w-4 mr-2" }),
6436
+ t("delete")
4671
6437
  ]
4672
6438
  }
4673
6439
  )
@@ -4675,20 +6441,40 @@ function GalleryView({ schema, records, onDeleteRecord, onOpenModal }) {
4675
6441
  ] }) })
4676
6442
  ] }),
4677
6443
  /* @__PURE__ */ jsxs7(CardContent, { className: "p-4", children: [
4678
- /* @__PURE__ */ jsx17("h3", { className: "font-medium text-sm truncate mb-2", children: title || "Untitled" }),
4679
- /* @__PURE__ */ jsx17("div", { className: "space-y-1.5", children: displayFields.map((field) => {
6444
+ /* @__PURE__ */ jsx18("h3", { className: "font-medium text-sm truncate mb-2", children: title || t("untitled") }),
6445
+ /* @__PURE__ */ jsx18("div", { className: "space-y-1.5", children: displayFields.map((field) => {
6446
+ var _a;
4680
6447
  const value = record.fields[field.id];
4681
6448
  if (value === void 0 || value === null || value === "" || value === false) return null;
4682
6449
  let displayValue = value;
6450
+ if (field.type === "select") {
6451
+ const option = (_a = field.options) == null ? void 0 : _a.find((o) => o.name === value);
6452
+ return /* @__PURE__ */ jsxs7("div", { className: "flex items-baseline gap-2 text-xs", children: [
6453
+ /* @__PURE__ */ jsxs7("span", { className: "text-muted-foreground flex-shrink-0", children: [
6454
+ field.name,
6455
+ ":"
6456
+ ] }),
6457
+ /* @__PURE__ */ jsx18(
6458
+ "div",
6459
+ {
6460
+ className: cn(
6461
+ "text-xs px-2 py-0.5 rounded-md inline-flex items-center gap-1",
6462
+ getBadgeColor(option == null ? void 0 : option.color)
6463
+ ),
6464
+ children: value
6465
+ }
6466
+ )
6467
+ ] }, field.id);
6468
+ }
4683
6469
  if (Array.isArray(value)) displayValue = value.join(", ");
4684
- else if (typeof value === "boolean") displayValue = value ? "Yes" : "No";
6470
+ else if (typeof value === "boolean") displayValue = value ? t("yes") : t("no");
4685
6471
  else if (field.type === "date") displayValue = new Date(value).toLocaleDateString();
4686
6472
  return /* @__PURE__ */ jsxs7("div", { className: "flex items-baseline gap-2 text-xs", children: [
4687
6473
  /* @__PURE__ */ jsxs7("span", { className: "text-muted-foreground flex-shrink-0", children: [
4688
6474
  field.name,
4689
6475
  ":"
4690
6476
  ] }),
4691
- /* @__PURE__ */ jsx17("span", { className: "text-foreground truncate", children: displayValue })
6477
+ /* @__PURE__ */ jsx18("span", { className: "text-foreground truncate", children: String(displayValue) })
4692
6478
  ] }, field.id);
4693
6479
  }) })
4694
6480
  ] })
@@ -4703,8 +6489,8 @@ function GalleryView({ schema, records, onDeleteRecord, onOpenModal }) {
4703
6489
  className: "flex flex-col items-center justify-center cursor-pointer border-2 border-dashed border-muted-foreground/20 rounded-lg transition-all hover:border-primary hover:bg-muted/50 min-h-[200px]",
4704
6490
  onClick: () => onOpenModal("add"),
4705
6491
  children: [
4706
- /* @__PURE__ */ jsx17("div", { className: "h-10 w-10 rounded-full bg-muted flex items-center justify-center mb-3", children: /* @__PURE__ */ jsx17(Plus3, { className: "h-5 w-5 text-muted-foreground" }) }),
4707
- /* @__PURE__ */ jsx17("span", { className: "text-sm font-medium text-muted-foreground", children: "Add Record" })
6492
+ /* @__PURE__ */ jsx18("div", { className: "h-10 w-10 rounded-full bg-muted flex items-center justify-center mb-3", children: /* @__PURE__ */ jsx18(Plus3, { className: "h-5 w-5 text-muted-foreground" }) }),
6493
+ /* @__PURE__ */ jsx18("span", { className: "text-sm font-medium text-muted-foreground", children: t("addRecord") })
4708
6494
  ]
4709
6495
  }
4710
6496
  )
@@ -4712,16 +6498,38 @@ function GalleryView({ schema, records, onDeleteRecord, onOpenModal }) {
4712
6498
  }
4713
6499
 
4714
6500
  // src/components/views/CalendarView.tsx
4715
- import { useMemo as useMemo2, useState as useState4 } from "react";
6501
+ import { useMemo as useMemo3, useState as useState5 } from "react";
4716
6502
  import { ChevronLeft, ChevronRight as ChevronRight2, Plus as Plus4, Eye as Eye4, Pencil as Pencil4, Trash2 as Trash24, MoreHorizontal as MoreHorizontal3 } from "lucide-react";
4717
- import { jsx as jsx18, jsxs as jsxs8 } from "react/jsx-runtime";
6503
+ import { jsx as jsx19, jsxs as jsxs8 } from "react/jsx-runtime";
6504
+ var CALENDAR_COLORS = [
6505
+ "blue",
6506
+ "green",
6507
+ "purple",
6508
+ "orange",
6509
+ "pink",
6510
+ "cyan",
6511
+ "indigo",
6512
+ "teal",
6513
+ "rose",
6514
+ "amber",
6515
+ "emerald",
6516
+ "violet"
6517
+ ];
6518
+ function getRecordColor(recordId) {
6519
+ const hash = recordId.split("").reduce((acc, char) => {
6520
+ return char.charCodeAt(0) + ((acc << 5) - acc);
6521
+ }, 0);
6522
+ const index = Math.abs(hash) % CALENDAR_COLORS.length;
6523
+ return CALENDAR_COLORS[index];
6524
+ }
4718
6525
  function CalendarView({ schema, records, onUpdateRecord, onDeleteRecord, onOpenModal }) {
4719
- const [currentDate, setCurrentDate] = useState4(/* @__PURE__ */ new Date());
6526
+ const { t, lang } = useI18n();
6527
+ const [currentDate, setCurrentDate] = useState5(/* @__PURE__ */ new Date());
4720
6528
  const dateField = getDateField(schema);
4721
6529
  const primaryField = getPrimaryField(schema);
4722
6530
  const monthStart = new Date(currentDate.getFullYear(), currentDate.getMonth(), 1);
4723
6531
  const monthEnd = new Date(currentDate.getFullYear(), currentDate.getMonth() + 1, 0);
4724
- const calendarDays = useMemo2(() => {
6532
+ const calendarDays = useMemo3(() => {
4725
6533
  const days = [];
4726
6534
  const firstDayOfWeek = monthStart.getDay();
4727
6535
  for (let i = firstDayOfWeek - 1; i >= 0; i--) {
@@ -4740,7 +6548,7 @@ function CalendarView({ schema, records, onUpdateRecord, onDeleteRecord, onOpenM
4740
6548
  }
4741
6549
  return days;
4742
6550
  }, [currentDate, monthStart, monthEnd]);
4743
- const recordsByDate = useMemo2(() => {
6551
+ const recordsByDate = useMemo3(() => {
4744
6552
  const map = {};
4745
6553
  if (!dateField) return map;
4746
6554
  records.forEach((record) => {
@@ -4764,23 +6572,10 @@ function CalendarView({ schema, records, onUpdateRecord, onDeleteRecord, onOpenM
4764
6572
  if (!dateField) return;
4765
6573
  onUpdateRecord(recordId, { [dateField.id]: newDate.toISOString().split("T")[0] });
4766
6574
  };
4767
- const weekDays = ["Sun", "Mon", "Tue", "Wed", "Thu", "Fri", "Sat"];
4768
- const monthNames = [
4769
- "January",
4770
- "February",
4771
- "March",
4772
- "April",
4773
- "May",
4774
- "June",
4775
- "July",
4776
- "August",
4777
- "September",
4778
- "October",
4779
- "November",
4780
- "December"
4781
- ];
6575
+ const weekDays = t("weekDays").split(",");
6576
+ const monthNames = t("monthNames").split(",");
4782
6577
  if (!dateField) {
4783
- return /* @__PURE__ */ jsx18("div", { className: "h-full flex items-center justify-center text-muted-foreground", children: "No date field found in schema. Add a date field to enable Calendar view." });
6578
+ return /* @__PURE__ */ jsx19("div", { className: "h-full flex items-center justify-center text-muted-foreground", children: t("noDateField") });
4784
6579
  }
4785
6580
  return /* @__PURE__ */ jsxs8("div", { className: "h-full flex flex-col p-6 bg-muted/30", children: [
4786
6581
  /* @__PURE__ */ jsxs8("div", { className: "flex items-center justify-between mb-4", children: [
@@ -4790,42 +6585,42 @@ function CalendarView({ schema, records, onUpdateRecord, onDeleteRecord, onOpenM
4790
6585
  " ",
4791
6586
  currentDate.getFullYear()
4792
6587
  ] }),
4793
- /* @__PURE__ */ jsx18(
6588
+ /* @__PURE__ */ jsx19(
4794
6589
  Button,
4795
6590
  {
4796
6591
  variant: "outline",
4797
6592
  size: "sm",
4798
6593
  onClick: () => setCurrentDate(/* @__PURE__ */ new Date()),
4799
- children: "Today"
6594
+ children: t("today")
4800
6595
  }
4801
6596
  )
4802
6597
  ] }),
4803
6598
  /* @__PURE__ */ jsxs8("div", { className: "flex items-center gap-1", children: [
4804
- /* @__PURE__ */ jsx18(
6599
+ /* @__PURE__ */ jsx19(
4805
6600
  Button,
4806
6601
  {
4807
6602
  variant: "outline",
4808
6603
  size: "icon",
4809
6604
  className: "h-8 w-8",
4810
6605
  onClick: () => setCurrentDate(new Date(currentDate.getFullYear(), currentDate.getMonth() - 1, 1)),
4811
- children: /* @__PURE__ */ jsx18(ChevronLeft, { className: "h-4 w-4" })
6606
+ children: /* @__PURE__ */ jsx19(ChevronLeft, { className: "h-4 w-4" })
4812
6607
  }
4813
6608
  ),
4814
- /* @__PURE__ */ jsx18(
6609
+ /* @__PURE__ */ jsx19(
4815
6610
  Button,
4816
6611
  {
4817
6612
  variant: "outline",
4818
6613
  size: "icon",
4819
6614
  className: "h-8 w-8",
4820
6615
  onClick: () => setCurrentDate(new Date(currentDate.getFullYear(), currentDate.getMonth() + 1, 1)),
4821
- children: /* @__PURE__ */ jsx18(ChevronRight2, { className: "h-4 w-4" })
6616
+ children: /* @__PURE__ */ jsx19(ChevronRight2, { className: "h-4 w-4" })
4822
6617
  }
4823
6618
  )
4824
6619
  ] })
4825
6620
  ] }),
4826
- /* @__PURE__ */ jsxs8("div", { className: "flex-1 border rounded-lg overflow-hidden bg-background flex flex-col", children: [
4827
- /* @__PURE__ */ jsx18("div", { className: "grid grid-cols-7 bg-muted/50 border-b", children: weekDays.map((day) => /* @__PURE__ */ jsx18("div", { className: "px-2 py-2 text-center text-xs font-medium text-muted-foreground", children: day }, day)) }),
4828
- /* @__PURE__ */ jsx18("div", { className: "grid grid-cols-7 flex-1", children: calendarDays.map((date, index) => {
6621
+ /* @__PURE__ */ jsxs8("div", { className: "flex-1 border rounded-lg overflow-hidden bg-background flex flex-col shadow-sm", children: [
6622
+ /* @__PURE__ */ jsx19("div", { className: "grid grid-cols-7 bg-muted/50 border-b", children: weekDays.map((day) => /* @__PURE__ */ jsx19("div", { className: "px-2 py-2 text-center text-xs font-medium text-muted-foreground uppercase tracking-wider", children: day }, day)) }),
6623
+ /* @__PURE__ */ jsx19("div", { className: "grid grid-cols-7 flex-1", children: calendarDays.map((date, index) => {
4829
6624
  const dateKey = date.toISOString().split("T")[0];
4830
6625
  const dayRecords = recordsByDate[dateKey] || [];
4831
6626
  return /* @__PURE__ */ jsxs8(
@@ -4833,8 +6628,8 @@ function CalendarView({ schema, records, onUpdateRecord, onDeleteRecord, onOpenM
4833
6628
  {
4834
6629
  className: cn(
4835
6630
  "min-h-[100px] p-1.5 border-b border-r transition-all group relative flex flex-col",
4836
- !isCurrentMonth(date) && "bg-muted/30 text-muted-foreground/50",
4837
- isCurrentMonth(date) && "hover:bg-muted/10",
6631
+ !isCurrentMonth(date) && "bg-muted/20 text-muted-foreground/40",
6632
+ isCurrentMonth(date) && "hover:bg-muted/5",
4838
6633
  index % 7 === 6 && "border-r-0"
4839
6634
  ),
4840
6635
  onDragOver: (e) => e.preventDefault(),
@@ -4844,22 +6639,22 @@ function CalendarView({ schema, records, onUpdateRecord, onDeleteRecord, onOpenM
4844
6639
  },
4845
6640
  children: [
4846
6641
  /* @__PURE__ */ jsxs8("div", { className: "flex items-center justify-between mb-1", children: [
4847
- /* @__PURE__ */ jsx18("span", { className: cn(
4848
- "text-xs w-6 h-6 flex items-center justify-center rounded-full",
4849
- isToday(date) ? "bg-primary text-primary-foreground font-medium" : ""
6642
+ /* @__PURE__ */ jsx19("span", { className: cn(
6643
+ "text-xs w-6 h-6 flex items-center justify-center rounded-full transition-colors",
6644
+ isToday(date) ? "bg-primary text-primary-foreground font-semibold shadow-sm" : "text-muted-foreground group-hover:text-foreground"
4850
6645
  ), children: date.getDate() }),
4851
- /* @__PURE__ */ jsx18(
6646
+ /* @__PURE__ */ jsx19(
4852
6647
  Button,
4853
6648
  {
4854
6649
  variant: "ghost",
4855
6650
  size: "icon",
4856
6651
  className: "h-5 w-5 opacity-0 group-hover:opacity-100 transition-opacity",
4857
6652
  onClick: () => handleDayClick(date),
4858
- children: /* @__PURE__ */ jsx18(Plus4, { className: "h-3 w-3" })
6653
+ children: /* @__PURE__ */ jsx19(Plus4, { className: "h-3 w-3" })
4859
6654
  }
4860
6655
  )
4861
6656
  ] }),
4862
- /* @__PURE__ */ jsx18("div", { className: "flex-1 space-y-0.5 overflow-y-auto", children: dayRecords.map((record) => /* @__PURE__ */ jsxs8(
6657
+ /* @__PURE__ */ jsx19("div", { className: "flex-1 space-y-0.5 overflow-y-auto", children: dayRecords.map((record) => /* @__PURE__ */ jsxs8(
4863
6658
  "div",
4864
6659
  {
4865
6660
  draggable: true,
@@ -4873,28 +6668,30 @@ function CalendarView({ schema, records, onUpdateRecord, onDeleteRecord, onOpenM
4873
6668
  },
4874
6669
  className: "group/item relative",
4875
6670
  children: [
4876
- /* @__PURE__ */ jsx18(
4877
- Badge,
6671
+ /* @__PURE__ */ jsx19(
6672
+ "div",
4878
6673
  {
4879
- variant: "secondary",
4880
- className: "w-full justify-start truncate text-xs py-0.5 cursor-grab active:cursor-grabbing hover:bg-primary/10",
4881
- children: primaryField ? record.fields[primaryField.id] || "Untitled" : "Event"
6674
+ className: cn(
6675
+ "w-full justify-start truncate text-[11px] py-0.5 px-2 rounded-md cursor-grab active:cursor-grabbing transition-all hover:scale-[1.02] shadow-sm",
6676
+ getBadgeColor(getRecordColor(record.id))
6677
+ ),
6678
+ children: primaryField ? record.fields[primaryField.id] || t("untitled") : t("untitled")
4882
6679
  }
4883
6680
  ),
4884
- /* @__PURE__ */ jsx18("div", { className: "absolute right-0 top-0 h-full flex items-center opacity-0 group-hover/item:opacity-100 bg-background/80 pr-1 rounded-r", children: /* @__PURE__ */ jsxs8(DropdownMenu, { children: [
4885
- /* @__PURE__ */ jsx18(DropdownMenuTrigger, { asChild: true, onClick: (e) => e.stopPropagation(), children: /* @__PURE__ */ jsx18(MoreHorizontal3, { className: "h-3 w-3 text-muted-foreground cursor-pointer" }) }),
6681
+ /* @__PURE__ */ jsx19("div", { className: "absolute right-0 top-0 h-full flex items-center opacity-0 group-hover/item:opacity-100 bg-background/90 px-0.5 rounded-r border-l", children: /* @__PURE__ */ jsxs8(DropdownMenu, { children: [
6682
+ /* @__PURE__ */ jsx19(DropdownMenuTrigger, { asChild: true, onClick: (e) => e.stopPropagation(), children: /* @__PURE__ */ jsx19(MoreHorizontal3, { className: "h-3 w-3 text-muted-foreground cursor-pointer hover:text-foreground" }) }),
4886
6683
  /* @__PURE__ */ jsxs8(DropdownMenuContent, { align: "end", children: [
4887
6684
  /* @__PURE__ */ jsxs8(DropdownMenuItem, { onClick: () => onOpenModal("view", record), children: [
4888
- /* @__PURE__ */ jsx18(Eye4, { className: "h-4 w-4 mr-2" }),
4889
- "View"
6685
+ /* @__PURE__ */ jsx19(Eye4, { className: "h-4 w-4 mr-2" }),
6686
+ t("view")
4890
6687
  ] }),
4891
6688
  /* @__PURE__ */ jsxs8(DropdownMenuItem, { onClick: () => onOpenModal("edit", record), children: [
4892
- /* @__PURE__ */ jsx18(Pencil4, { className: "h-4 w-4 mr-2" }),
4893
- "Edit"
6689
+ /* @__PURE__ */ jsx19(Pencil4, { className: "h-4 w-4 mr-2" }),
6690
+ t("edit")
4894
6691
  ] }),
4895
6692
  /* @__PURE__ */ jsxs8(DropdownMenuItem, { className: "text-destructive focus:text-destructive", onClick: () => onDeleteRecord(record.id), children: [
4896
- /* @__PURE__ */ jsx18(Trash24, { className: "h-4 w-4 mr-2" }),
4897
- "Delete"
6693
+ /* @__PURE__ */ jsx19(Trash24, { className: "h-4 w-4 mr-2" }),
6694
+ t("delete")
4898
6695
  ] })
4899
6696
  ] })
4900
6697
  ] }) })
@@ -4912,15 +6709,15 @@ function CalendarView({ schema, records, onUpdateRecord, onDeleteRecord, onOpenM
4912
6709
  }
4913
6710
 
4914
6711
  // src/components/ui/dialog.tsx
4915
- import * as React12 from "react";
6712
+ import * as React13 from "react";
4916
6713
  import * as DialogPrimitive from "@radix-ui/react-dialog";
4917
- import { X } from "lucide-react";
4918
- import { jsx as jsx19, jsxs as jsxs9 } from "react/jsx-runtime";
6714
+ import { X as X2 } from "lucide-react";
6715
+ import { jsx as jsx20, jsxs as jsxs9 } from "react/jsx-runtime";
4919
6716
  var Dialog = DialogPrimitive.Root;
4920
6717
  var DialogPortal = DialogPrimitive.Portal;
4921
- var DialogOverlay = React12.forwardRef((_a, ref) => {
6718
+ var DialogOverlay = React13.forwardRef((_a, ref) => {
4922
6719
  var _b = _a, { className } = _b, props = __objRest(_b, ["className"]);
4923
- return /* @__PURE__ */ jsx19(
6720
+ return /* @__PURE__ */ jsx20(
4924
6721
  DialogPrimitive.Overlay,
4925
6722
  __spreadValues({
4926
6723
  ref,
@@ -4932,10 +6729,10 @@ var DialogOverlay = React12.forwardRef((_a, ref) => {
4932
6729
  );
4933
6730
  });
4934
6731
  DialogOverlay.displayName = DialogPrimitive.Overlay.displayName;
4935
- var DialogContent = React12.forwardRef((_a, ref) => {
6732
+ var DialogContent = React13.forwardRef((_a, ref) => {
4936
6733
  var _b = _a, { className, children } = _b, props = __objRest(_b, ["className", "children"]);
4937
6734
  return /* @__PURE__ */ jsxs9(DialogPortal, { children: [
4938
- /* @__PURE__ */ jsx19(DialogOverlay, {}),
6735
+ /* @__PURE__ */ jsx20(DialogOverlay, {}),
4939
6736
  /* @__PURE__ */ jsxs9(
4940
6737
  DialogPrimitive.Content,
4941
6738
  __spreadProps(__spreadValues({
@@ -4948,8 +6745,8 @@ var DialogContent = React12.forwardRef((_a, ref) => {
4948
6745
  children: [
4949
6746
  children,
4950
6747
  /* @__PURE__ */ jsxs9(DialogPrimitive.Close, { className: "absolute right-4 top-4 rounded-sm opacity-70 ring-offset-background transition-opacity hover:opacity-100 focus:outline-none focus:ring-2 focus:ring-ring focus:ring-offset-2 disabled:pointer-events-none data-[state=open]:bg-accent data-[state=open]:text-muted-foreground", children: [
4951
- /* @__PURE__ */ jsx19(X, { className: "h-4 w-4" }),
4952
- /* @__PURE__ */ jsx19("span", { className: "sr-only", children: "Close" })
6748
+ /* @__PURE__ */ jsx20(X2, { className: "h-4 w-4" }),
6749
+ /* @__PURE__ */ jsx20("span", { className: "sr-only", children: "Close" })
4953
6750
  ] })
4954
6751
  ]
4955
6752
  })
@@ -4963,7 +6760,7 @@ var DialogHeader = (_a) => {
4963
6760
  } = _b, props = __objRest(_b, [
4964
6761
  "className"
4965
6762
  ]);
4966
- return /* @__PURE__ */ jsx19(
6763
+ return /* @__PURE__ */ jsx20(
4967
6764
  "div",
4968
6765
  __spreadValues({
4969
6766
  className: cn(
@@ -4980,7 +6777,7 @@ var DialogFooter = (_a) => {
4980
6777
  } = _b, props = __objRest(_b, [
4981
6778
  "className"
4982
6779
  ]);
4983
- return /* @__PURE__ */ jsx19(
6780
+ return /* @__PURE__ */ jsx20(
4984
6781
  "div",
4985
6782
  __spreadValues({
4986
6783
  className: cn(
@@ -4991,9 +6788,9 @@ var DialogFooter = (_a) => {
4991
6788
  );
4992
6789
  };
4993
6790
  DialogFooter.displayName = "DialogFooter";
4994
- var DialogTitle = React12.forwardRef((_a, ref) => {
6791
+ var DialogTitle = React13.forwardRef((_a, ref) => {
4995
6792
  var _b = _a, { className } = _b, props = __objRest(_b, ["className"]);
4996
- return /* @__PURE__ */ jsx19(
6793
+ return /* @__PURE__ */ jsx20(
4997
6794
  DialogPrimitive.Title,
4998
6795
  __spreadValues({
4999
6796
  ref,
@@ -5005,9 +6802,9 @@ var DialogTitle = React12.forwardRef((_a, ref) => {
5005
6802
  );
5006
6803
  });
5007
6804
  DialogTitle.displayName = DialogPrimitive.Title.displayName;
5008
- var DialogDescription = React12.forwardRef((_a, ref) => {
6805
+ var DialogDescription = React13.forwardRef((_a, ref) => {
5009
6806
  var _b = _a, { className } = _b, props = __objRest(_b, ["className"]);
5010
- return /* @__PURE__ */ jsx19(
6807
+ return /* @__PURE__ */ jsx20(
5011
6808
  DialogPrimitive.Description,
5012
6809
  __spreadValues({
5013
6810
  ref,
@@ -5018,10 +6815,10 @@ var DialogDescription = React12.forwardRef((_a, ref) => {
5018
6815
  DialogDescription.displayName = DialogPrimitive.Description.displayName;
5019
6816
 
5020
6817
  // src/components/ui/scroll-area.tsx
5021
- import * as React13 from "react";
6818
+ import * as React14 from "react";
5022
6819
  import * as ScrollAreaPrimitive from "@radix-ui/react-scroll-area";
5023
- import { jsx as jsx20, jsxs as jsxs10 } from "react/jsx-runtime";
5024
- var ScrollArea = React13.forwardRef((_a, ref) => {
6820
+ import { jsx as jsx21, jsxs as jsxs10 } from "react/jsx-runtime";
6821
+ var ScrollArea = React14.forwardRef((_a, ref) => {
5025
6822
  var _b = _a, { className, children } = _b, props = __objRest(_b, ["className", "children"]);
5026
6823
  return /* @__PURE__ */ jsxs10(
5027
6824
  ScrollAreaPrimitive.Root,
@@ -5030,17 +6827,17 @@ var ScrollArea = React13.forwardRef((_a, ref) => {
5030
6827
  className: cn("relative overflow-hidden", className)
5031
6828
  }, props), {
5032
6829
  children: [
5033
- /* @__PURE__ */ jsx20(ScrollAreaPrimitive.Viewport, { className: "h-full w-full rounded-[inherit]", children }),
5034
- /* @__PURE__ */ jsx20(ScrollBar, {}),
5035
- /* @__PURE__ */ jsx20(ScrollAreaPrimitive.Corner, {})
6830
+ /* @__PURE__ */ jsx21(ScrollAreaPrimitive.Viewport, { className: "h-full w-full rounded-[inherit]", children }),
6831
+ /* @__PURE__ */ jsx21(ScrollBar, {}),
6832
+ /* @__PURE__ */ jsx21(ScrollAreaPrimitive.Corner, {})
5036
6833
  ]
5037
6834
  })
5038
6835
  );
5039
6836
  });
5040
6837
  ScrollArea.displayName = ScrollAreaPrimitive.Root.displayName;
5041
- var ScrollBar = React13.forwardRef((_a, ref) => {
6838
+ var ScrollBar = React14.forwardRef((_a, ref) => {
5042
6839
  var _b = _a, { className, orientation = "vertical" } = _b, props = __objRest(_b, ["className", "orientation"]);
5043
- return /* @__PURE__ */ jsx20(
6840
+ return /* @__PURE__ */ jsx21(
5044
6841
  ScrollAreaPrimitive.ScrollAreaScrollbar,
5045
6842
  __spreadProps(__spreadValues({
5046
6843
  ref,
@@ -5052,14 +6849,14 @@ var ScrollBar = React13.forwardRef((_a, ref) => {
5052
6849
  className
5053
6850
  )
5054
6851
  }, props), {
5055
- children: /* @__PURE__ */ jsx20(ScrollAreaPrimitive.ScrollAreaThumb, { className: "relative flex-1 rounded-full bg-border" })
6852
+ children: /* @__PURE__ */ jsx21(ScrollAreaPrimitive.ScrollAreaThumb, { className: "relative flex-1 rounded-full bg-border" })
5056
6853
  })
5057
6854
  );
5058
6855
  });
5059
6856
  ScrollBar.displayName = ScrollAreaPrimitive.ScrollAreaScrollbar.displayName;
5060
6857
 
5061
6858
  // src/components/RecordModal.tsx
5062
- import { jsx as jsx21, jsxs as jsxs11 } from "react/jsx-runtime";
6859
+ import { jsx as jsx22, jsxs as jsxs11 } from "react/jsx-runtime";
5063
6860
  function RecordModal({
5064
6861
  isOpen,
5065
6862
  onClose,
@@ -5069,27 +6866,28 @@ function RecordModal({
5069
6866
  initialValues,
5070
6867
  onSubmit
5071
6868
  }) {
6869
+ const { t } = useI18n();
5072
6870
  const titles = {
5073
- add: "Create New Record",
5074
- edit: "Edit Record",
5075
- view: "Record Details"
6871
+ add: t("createNewRecord"),
6872
+ edit: t("editRecord"),
6873
+ view: t("recordDetails")
5076
6874
  };
5077
6875
  const descriptions = {
5078
- add: "Enter the details for the new record.",
5079
- edit: "Modify the values for this record.",
5080
- view: "View the data for this record."
6876
+ add: t("enterDetails"),
6877
+ edit: t("modifyValues"),
6878
+ view: t("viewData")
5081
6879
  };
5082
6880
  const handleSubmit = (values) => {
5083
6881
  onSubmit(values);
5084
6882
  onClose();
5085
6883
  };
5086
6884
  const formValues = mode === "add" ? initialValues : record == null ? void 0 : record.fields;
5087
- return /* @__PURE__ */ jsx21(Dialog, { open: isOpen, onOpenChange: (open) => !open && onClose(), children: /* @__PURE__ */ jsxs11(DialogContent, { className: "sm:max-w-[500px] max-h-[85vh] flex flex-col", children: [
5088
- /* @__PURE__ */ jsxs11(DialogHeader, { children: [
5089
- /* @__PURE__ */ jsx21(DialogTitle, { children: titles[mode] }),
5090
- /* @__PURE__ */ jsx21(DialogDescription, { children: descriptions[mode] })
6885
+ return /* @__PURE__ */ jsx22(Dialog, { open: isOpen, onOpenChange: (open) => !open && onClose(), children: /* @__PURE__ */ jsxs11(DialogContent, { className: "sm:max-w-[500px] max-h-[85vh] flex flex-col", children: [
6886
+ /* @__PURE__ */ jsxs11(DialogHeader, { className: "space-y-1.5", children: [
6887
+ /* @__PURE__ */ jsx22(DialogTitle, { children: titles[mode] }),
6888
+ /* @__PURE__ */ jsx22(DialogDescription, { children: descriptions[mode] })
5091
6889
  ] }),
5092
- /* @__PURE__ */ jsx21(ScrollArea, { className: "flex-1 -mx-6 px-6", children: /* @__PURE__ */ jsx21(
6890
+ /* @__PURE__ */ jsx22(ScrollArea, { className: "flex-1 -mx-6 px-6 mt-4", children: /* @__PURE__ */ jsx22(
5093
6891
  RecordForm,
5094
6892
  {
5095
6893
  schema,
@@ -5104,33 +6902,34 @@ function RecordModal({
5104
6902
  // src/components/ThemeToggle.tsx
5105
6903
  import { useTheme } from "next-themes";
5106
6904
  import { Moon, Sun } from "lucide-react";
5107
- import { jsx as jsx22, jsxs as jsxs12 } from "react/jsx-runtime";
6905
+ import { jsx as jsx23, jsxs as jsxs12 } from "react/jsx-runtime";
5108
6906
  function ThemeToggle() {
5109
6907
  const { setTheme, theme } = useTheme();
5110
6908
  return /* @__PURE__ */ jsxs12(DropdownMenu, { children: [
5111
- /* @__PURE__ */ jsx22(DropdownMenuTrigger, { asChild: true, children: /* @__PURE__ */ jsxs12(Button, { variant: "ghost", size: "icon", className: "h-9 w-9", children: [
5112
- /* @__PURE__ */ jsx22(Sun, { className: "h-4 w-4 rotate-0 scale-100 transition-all dark:-rotate-90 dark:scale-0" }),
5113
- /* @__PURE__ */ jsx22(Moon, { className: "absolute h-4 w-4 rotate-90 scale-0 transition-all dark:rotate-0 dark:scale-100" }),
5114
- /* @__PURE__ */ jsx22("span", { className: "sr-only", children: "Toggle theme" })
6909
+ /* @__PURE__ */ jsx23(DropdownMenuTrigger, { asChild: true, children: /* @__PURE__ */ jsxs12(Button, { variant: "ghost", size: "icon", className: "h-9 w-9", children: [
6910
+ /* @__PURE__ */ jsx23(Sun, { className: "h-4 w-4 rotate-0 scale-100 transition-all dark:-rotate-90 dark:scale-0" }),
6911
+ /* @__PURE__ */ jsx23(Moon, { className: "absolute h-4 w-4 rotate-90 scale-0 transition-all dark:rotate-0 dark:scale-100" }),
6912
+ /* @__PURE__ */ jsx23("span", { className: "sr-only", children: "Toggle theme" })
5115
6913
  ] }) }),
5116
6914
  /* @__PURE__ */ jsxs12(DropdownMenuContent, { align: "end", children: [
5117
- /* @__PURE__ */ jsx22(DropdownMenuItem, { onClick: () => setTheme("light"), children: "Light" }),
5118
- /* @__PURE__ */ jsx22(DropdownMenuItem, { onClick: () => setTheme("dark"), children: "Dark" }),
5119
- /* @__PURE__ */ jsx22(DropdownMenuItem, { onClick: () => setTheme("system"), children: "System" })
6915
+ /* @__PURE__ */ jsx23(DropdownMenuItem, { onClick: () => setTheme("light"), children: "Light" }),
6916
+ /* @__PURE__ */ jsx23(DropdownMenuItem, { onClick: () => setTheme("dark"), children: "Dark" }),
6917
+ /* @__PURE__ */ jsx23(DropdownMenuItem, { onClick: () => setTheme("system"), children: "System" })
5120
6918
  ] })
5121
6919
  ] });
5122
6920
  }
5123
6921
 
5124
6922
  // src/components/DataViews.tsx
5125
- import { jsx as jsx23, jsxs as jsxs13 } from "react/jsx-runtime";
5126
- function DataViews({ schema, dbClient, config }) {
5127
- const [records, setRecords] = useState5([]);
5128
- const [activeView, setActiveView] = useState5((config == null ? void 0 : config.defaultView) || "grid");
5129
- const [modalState, setModalState] = useState5({
6923
+ import { jsx as jsx24, jsxs as jsxs13 } from "react/jsx-runtime";
6924
+ function DataViewsInner({ schema, dbClient, config }) {
6925
+ const { t } = useI18n();
6926
+ const [records, setRecords] = useState6([]);
6927
+ const [activeView, setActiveView] = useState6((config == null ? void 0 : config.defaultView) || "grid");
6928
+ const [modalState, setModalState] = useState6({
5130
6929
  isOpen: false,
5131
6930
  mode: "add"
5132
6931
  });
5133
- const [mounted, setMounted] = useState5(false);
6932
+ const [mounted, setMounted] = useState6(false);
5134
6933
  const hasSelectField = !!getSelectField(schema);
5135
6934
  const hasDateField = !!getDateField(schema);
5136
6935
  const fetchRecords = async () => {
@@ -5187,43 +6986,43 @@ function DataViews({ schema, dbClient, config }) {
5187
6986
  return /* @__PURE__ */ jsxs13("div", { className: "h-full w-full flex flex-col bg-background", children: [
5188
6987
  /* @__PURE__ */ jsxs13("header", { className: "border-b px-6 py-3 flex items-center justify-between shrink-0", children: [
5189
6988
  /* @__PURE__ */ jsxs13("div", { className: "flex items-center gap-3", children: [
5190
- /* @__PURE__ */ jsx23("span", { className: "text-2xl", children: schema.icon }),
5191
- /* @__PURE__ */ jsx23("h1", { className: "text-lg font-semibold", children: schema.name })
6989
+ /* @__PURE__ */ jsx24("span", { className: "text-2xl", children: schema.icon }),
6990
+ /* @__PURE__ */ jsx24("h1", { className: "text-lg font-semibold", children: schema.name })
5192
6991
  ] }),
5193
- /* @__PURE__ */ jsx23(ThemeToggle, {})
6992
+ /* @__PURE__ */ jsx24(ThemeToggle, {})
5194
6993
  ] }),
5195
6994
  /* @__PURE__ */ jsxs13(Tabs, { value: activeView, onValueChange: (v) => setActiveView(v), className: "flex-1 flex flex-col overflow-hidden", children: [
5196
- /* @__PURE__ */ jsx23("div", { className: "border-b px-4 shrink-0", children: /* @__PURE__ */ jsxs13(TabsList, { className: "h-10", children: [
6995
+ /* @__PURE__ */ jsx24("div", { className: "border-b px-4 shrink-0", children: /* @__PURE__ */ jsxs13(TabsList, { className: "h-10", children: [
5197
6996
  /* @__PURE__ */ jsxs13(TabsTrigger, { value: "grid", className: "gap-2", children: [
5198
- mounted && /* @__PURE__ */ jsx23(LayoutGrid, { className: "h-4 w-4" }),
5199
- "Grid"
6997
+ mounted && /* @__PURE__ */ jsx24(LayoutGrid, { className: "h-4 w-4" }),
6998
+ t("gridView")
5200
6999
  ] }),
5201
7000
  /* @__PURE__ */ jsxs13(TabsTrigger, { value: "form", className: "gap-2", children: [
5202
- mounted && /* @__PURE__ */ jsx23(FileText, { className: "h-4 w-4" }),
5203
- "Form"
7001
+ mounted && /* @__PURE__ */ jsx24(FileText, { className: "h-4 w-4" }),
7002
+ t("formView")
5204
7003
  ] }),
5205
7004
  hasSelectField && /* @__PURE__ */ jsxs13(TabsTrigger, { value: "kanban", className: "gap-2", children: [
5206
- mounted && /* @__PURE__ */ jsx23(Columns, { className: "h-4 w-4" }),
5207
- "Kanban"
7005
+ mounted && /* @__PURE__ */ jsx24(Columns, { className: "h-4 w-4" }),
7006
+ t("kanbanView")
5208
7007
  ] }),
5209
7008
  /* @__PURE__ */ jsxs13(TabsTrigger, { value: "gallery", className: "gap-2", children: [
5210
- mounted && /* @__PURE__ */ jsx23(Image, { className: "h-4 w-4" }),
5211
- "Gallery"
7009
+ mounted && /* @__PURE__ */ jsx24(Image, { className: "h-4 w-4" }),
7010
+ t("galleryView")
5212
7011
  ] }),
5213
7012
  hasDateField && /* @__PURE__ */ jsxs13(TabsTrigger, { value: "calendar", className: "gap-2", children: [
5214
- mounted && /* @__PURE__ */ jsx23(CalendarIcon, { className: "h-4 w-4" }),
5215
- "Calendar"
7013
+ mounted && /* @__PURE__ */ jsx24(CalendarIcon, { className: "h-4 w-4" }),
7014
+ t("calendarView")
5216
7015
  ] })
5217
7016
  ] }) }),
5218
7017
  /* @__PURE__ */ jsxs13("div", { className: "flex-1 overflow-auto relative", children: [
5219
- /* @__PURE__ */ jsx23(TabsContent, { value: "grid", className: "h-full m-0", children: /* @__PURE__ */ jsx23(GridView, __spreadValues({}, commonProps)) }),
5220
- /* @__PURE__ */ jsx23(TabsContent, { value: "form", className: "h-full m-0", children: /* @__PURE__ */ jsx23(FormView, __spreadValues({}, commonProps)) }),
5221
- hasSelectField && /* @__PURE__ */ jsx23(TabsContent, { value: "kanban", className: "h-full m-0", children: /* @__PURE__ */ jsx23(KanbanView, __spreadValues({}, commonProps)) }),
5222
- /* @__PURE__ */ jsx23(TabsContent, { value: "gallery", className: "h-full m-0", children: /* @__PURE__ */ jsx23(GalleryView, __spreadValues({}, commonProps)) }),
5223
- hasDateField && /* @__PURE__ */ jsx23(TabsContent, { value: "calendar", className: "h-full m-0", children: /* @__PURE__ */ jsx23(CalendarView, __spreadValues({}, commonProps)) })
7018
+ /* @__PURE__ */ jsx24(TabsContent, { value: "grid", className: "h-full m-0", children: /* @__PURE__ */ jsx24(GridView, __spreadValues({}, commonProps)) }),
7019
+ /* @__PURE__ */ jsx24(TabsContent, { value: "form", className: "h-full m-0", children: /* @__PURE__ */ jsx24(FormView, __spreadValues({}, commonProps)) }),
7020
+ hasSelectField && /* @__PURE__ */ jsx24(TabsContent, { value: "kanban", className: "h-full m-0", children: /* @__PURE__ */ jsx24(KanbanView, __spreadValues({}, commonProps)) }),
7021
+ /* @__PURE__ */ jsx24(TabsContent, { value: "gallery", className: "h-full m-0", children: /* @__PURE__ */ jsx24(GalleryView, __spreadValues({}, commonProps)) }),
7022
+ hasDateField && /* @__PURE__ */ jsx24(TabsContent, { value: "calendar", className: "h-full m-0", children: /* @__PURE__ */ jsx24(CalendarView, __spreadValues({}, commonProps)) })
5224
7023
  ] })
5225
7024
  ] }),
5226
- /* @__PURE__ */ jsx23(
7025
+ /* @__PURE__ */ jsx24(
5227
7026
  RecordModal,
5228
7027
  {
5229
7028
  isOpen: modalState.isOpen,
@@ -5243,10 +7042,23 @@ function DataViews({ schema, dbClient, config }) {
5243
7042
  )
5244
7043
  ] });
5245
7044
  }
7045
+ function DataViews(props) {
7046
+ var _a;
7047
+ return /* @__PURE__ */ jsx24(I18nProvider, { lang: (_a = props.config) == null ? void 0 : _a.language, children: /* @__PURE__ */ jsx24(DataViewsInner, __spreadValues({}, props)) });
7048
+ }
5246
7049
  export {
7050
+ BADGE_COLOR_MAP,
7051
+ DOT_COLOR_MAP,
5247
7052
  DataViews,
7053
+ LANGUAGES,
7054
+ PRESET_COLORS,
7055
+ getBadgeColor,
5248
7056
  getDateField,
7057
+ getDirection,
7058
+ getDotColor,
5249
7059
  getPrimaryField,
5250
7060
  getSelectField,
5251
- tableSchema
7061
+ getTranslation,
7062
+ tableSchema,
7063
+ translations
5252
7064
  };