shadcn-data-views 1.0.3 → 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.js CHANGED
@@ -59,11 +59,20 @@ var __toCommonJS = (mod) => __copyProps(__defProp({}, "__esModule", { value: tru
59
59
  // src/index.ts
60
60
  var index_exports = {};
61
61
  __export(index_exports, {
62
+ BADGE_COLOR_MAP: () => BADGE_COLOR_MAP,
63
+ DOT_COLOR_MAP: () => DOT_COLOR_MAP,
62
64
  DataViews: () => DataViews,
65
+ LANGUAGES: () => LANGUAGES,
66
+ PRESET_COLORS: () => PRESET_COLORS,
67
+ getBadgeColor: () => getBadgeColor,
63
68
  getDateField: () => getDateField,
69
+ getDirection: () => getDirection,
70
+ getDotColor: () => getDotColor,
64
71
  getPrimaryField: () => getPrimaryField,
65
72
  getSelectField: () => getSelectField,
66
- tableSchema: () => tableSchema
73
+ getTranslation: () => getTranslation,
74
+ tableSchema: () => tableSchema,
75
+ translations: () => translations
67
76
  });
68
77
  module.exports = __toCommonJS(index_exports);
69
78
 
@@ -987,9 +996,21 @@ body {
987
996
  .w-\\[100px\\] {
988
997
  width: 100px;
989
998
  }
999
+ .w-\\[120px\\] {
1000
+ width: 120px;
1001
+ }
1002
+ .w-\\[150px\\] {
1003
+ width: 150px;
1004
+ }
1005
+ .w-\\[180px\\] {
1006
+ width: 180px;
1007
+ }
990
1008
  .w-\\[1px\\] {
991
1009
  width: 1px;
992
1010
  }
1011
+ .w-\\[200px\\] {
1012
+ width: 200px;
1013
+ }
993
1014
  .w-\\[264px\\] {
994
1015
  width: 264px;
995
1016
  }
@@ -1266,6 +1287,11 @@ body {
1266
1287
  margin-top: calc(0.5rem * calc(1 - var(--tw-space-y-reverse)));
1267
1288
  margin-bottom: calc(0.5rem * var(--tw-space-y-reverse));
1268
1289
  }
1290
+ .space-y-3 > :not([hidden]) ~ :not([hidden]) {
1291
+ --tw-space-y-reverse: 0;
1292
+ margin-top: calc(0.75rem * calc(1 - var(--tw-space-y-reverse)));
1293
+ margin-bottom: calc(0.75rem * var(--tw-space-y-reverse));
1294
+ }
1269
1295
  .space-y-5 > :not([hidden]) ~ :not([hidden]) {
1270
1296
  --tw-space-y-reverse: 0;
1271
1297
  margin-top: calc(1.25rem * calc(1 - var(--tw-space-y-reverse)));
@@ -1444,15 +1470,27 @@ body {
1444
1470
  --tw-bg-opacity: 1;
1445
1471
  background-color: rgb(254 243 199 / var(--tw-bg-opacity, 1));
1446
1472
  }
1473
+ .bg-amber-200 {
1474
+ --tw-bg-opacity: 1;
1475
+ background-color: rgb(253 230 138 / var(--tw-bg-opacity, 1));
1476
+ }
1477
+ .bg-amber-50 {
1478
+ --tw-bg-opacity: 1;
1479
+ background-color: rgb(255 251 235 / var(--tw-bg-opacity, 1));
1480
+ }
1447
1481
  .bg-amber-500 {
1448
1482
  --tw-bg-opacity: 1;
1449
1483
  background-color: rgb(245 158 11 / var(--tw-bg-opacity, 1));
1450
1484
  }
1485
+ .bg-amber-700 {
1486
+ --tw-bg-opacity: 1;
1487
+ background-color: rgb(180 83 9 / var(--tw-bg-opacity, 1));
1488
+ }
1451
1489
  .bg-background {
1452
1490
  background-color: hsl(var(--background));
1453
1491
  }
1454
- .bg-background\\/80 {
1455
- background-color: hsl(var(--background) / 0.8);
1492
+ .bg-background\\/90 {
1493
+ background-color: hsl(var(--background) / 0.9);
1456
1494
  }
1457
1495
  .bg-black\\/80 {
1458
1496
  background-color: rgb(0 0 0 / 0.8);
@@ -1465,22 +1503,82 @@ body {
1465
1503
  --tw-bg-opacity: 1;
1466
1504
  background-color: rgb(59 130 246 / var(--tw-bg-opacity, 1));
1467
1505
  }
1506
+ .bg-blue-900 {
1507
+ --tw-bg-opacity: 1;
1508
+ background-color: rgb(30 58 138 / var(--tw-bg-opacity, 1));
1509
+ }
1468
1510
  .bg-border {
1469
1511
  background-color: hsl(var(--border));
1470
1512
  }
1471
1513
  .bg-card {
1472
1514
  background-color: hsl(var(--card));
1473
1515
  }
1516
+ .bg-cyan-100 {
1517
+ --tw-bg-opacity: 1;
1518
+ background-color: rgb(207 250 254 / var(--tw-bg-opacity, 1));
1519
+ }
1520
+ .bg-cyan-400 {
1521
+ --tw-bg-opacity: 1;
1522
+ background-color: rgb(34 211 238 / var(--tw-bg-opacity, 1));
1523
+ }
1524
+ .bg-cyan-500 {
1525
+ --tw-bg-opacity: 1;
1526
+ background-color: rgb(6 182 212 / var(--tw-bg-opacity, 1));
1527
+ }
1474
1528
  .bg-destructive {
1475
1529
  background-color: hsl(var(--destructive));
1476
1530
  }
1531
+ .bg-emerald-100 {
1532
+ --tw-bg-opacity: 1;
1533
+ background-color: rgb(209 250 229 / var(--tw-bg-opacity, 1));
1534
+ }
1535
+ .bg-emerald-400 {
1536
+ --tw-bg-opacity: 1;
1537
+ background-color: rgb(52 211 153 / var(--tw-bg-opacity, 1));
1538
+ }
1539
+ .bg-emerald-500 {
1540
+ --tw-bg-opacity: 1;
1541
+ background-color: rgb(16 185 129 / var(--tw-bg-opacity, 1));
1542
+ }
1477
1543
  .bg-foreground {
1478
1544
  background-color: hsl(var(--foreground));
1479
1545
  }
1546
+ .bg-fuchsia-100 {
1547
+ --tw-bg-opacity: 1;
1548
+ background-color: rgb(250 232 255 / var(--tw-bg-opacity, 1));
1549
+ }
1550
+ .bg-fuchsia-400 {
1551
+ --tw-bg-opacity: 1;
1552
+ background-color: rgb(232 121 249 / var(--tw-bg-opacity, 1));
1553
+ }
1554
+ .bg-fuchsia-500 {
1555
+ --tw-bg-opacity: 1;
1556
+ background-color: rgb(217 70 239 / var(--tw-bg-opacity, 1));
1557
+ }
1558
+ .bg-fuchsia-600 {
1559
+ --tw-bg-opacity: 1;
1560
+ background-color: rgb(192 38 211 / var(--tw-bg-opacity, 1));
1561
+ }
1562
+ .bg-gray-100 {
1563
+ --tw-bg-opacity: 1;
1564
+ background-color: rgb(243 244 246 / var(--tw-bg-opacity, 1));
1565
+ }
1480
1566
  .bg-gray-400 {
1481
1567
  --tw-bg-opacity: 1;
1482
1568
  background-color: rgb(156 163 175 / var(--tw-bg-opacity, 1));
1483
1569
  }
1570
+ .bg-gray-50 {
1571
+ --tw-bg-opacity: 1;
1572
+ background-color: rgb(249 250 251 / var(--tw-bg-opacity, 1));
1573
+ }
1574
+ .bg-gray-800 {
1575
+ --tw-bg-opacity: 1;
1576
+ background-color: rgb(31 41 55 / var(--tw-bg-opacity, 1));
1577
+ }
1578
+ .bg-gray-900 {
1579
+ --tw-bg-opacity: 1;
1580
+ background-color: rgb(17 24 39 / var(--tw-bg-opacity, 1));
1581
+ }
1484
1582
  .bg-green-100 {
1485
1583
  --tw-bg-opacity: 1;
1486
1584
  background-color: rgb(220 252 231 / var(--tw-bg-opacity, 1));
@@ -1493,15 +1591,78 @@ body {
1493
1591
  --tw-bg-opacity: 1;
1494
1592
  background-color: rgb(34 197 94 / var(--tw-bg-opacity, 1));
1495
1593
  }
1594
+ .bg-indigo-100 {
1595
+ --tw-bg-opacity: 1;
1596
+ background-color: rgb(224 231 255 / var(--tw-bg-opacity, 1));
1597
+ }
1598
+ .bg-indigo-500 {
1599
+ --tw-bg-opacity: 1;
1600
+ background-color: rgb(99 102 241 / var(--tw-bg-opacity, 1));
1601
+ }
1602
+ .bg-lime-100 {
1603
+ --tw-bg-opacity: 1;
1604
+ background-color: rgb(236 252 203 / var(--tw-bg-opacity, 1));
1605
+ }
1606
+ .bg-lime-500 {
1607
+ --tw-bg-opacity: 1;
1608
+ background-color: rgb(132 204 22 / var(--tw-bg-opacity, 1));
1609
+ }
1610
+ .bg-lime-700 {
1611
+ --tw-bg-opacity: 1;
1612
+ background-color: rgb(77 124 15 / var(--tw-bg-opacity, 1));
1613
+ }
1496
1614
  .bg-muted {
1497
1615
  background-color: hsl(var(--muted));
1498
1616
  }
1617
+ .bg-muted\\/20 {
1618
+ background-color: hsl(var(--muted) / 0.2);
1619
+ }
1499
1620
  .bg-muted\\/30 {
1500
1621
  background-color: hsl(var(--muted) / 0.3);
1501
1622
  }
1502
1623
  .bg-muted\\/50 {
1503
1624
  background-color: hsl(var(--muted) / 0.5);
1504
1625
  }
1626
+ .bg-neutral-100 {
1627
+ --tw-bg-opacity: 1;
1628
+ background-color: rgb(245 245 245 / var(--tw-bg-opacity, 1));
1629
+ }
1630
+ .bg-neutral-400 {
1631
+ --tw-bg-opacity: 1;
1632
+ background-color: rgb(163 163 163 / var(--tw-bg-opacity, 1));
1633
+ }
1634
+ .bg-orange-100 {
1635
+ --tw-bg-opacity: 1;
1636
+ background-color: rgb(255 237 213 / var(--tw-bg-opacity, 1));
1637
+ }
1638
+ .bg-orange-300 {
1639
+ --tw-bg-opacity: 1;
1640
+ background-color: rgb(253 186 116 / var(--tw-bg-opacity, 1));
1641
+ }
1642
+ .bg-orange-400 {
1643
+ --tw-bg-opacity: 1;
1644
+ background-color: rgb(251 146 60 / var(--tw-bg-opacity, 1));
1645
+ }
1646
+ .bg-orange-500 {
1647
+ --tw-bg-opacity: 1;
1648
+ background-color: rgb(249 115 22 / var(--tw-bg-opacity, 1));
1649
+ }
1650
+ .bg-orange-700 {
1651
+ --tw-bg-opacity: 1;
1652
+ background-color: rgb(194 65 12 / var(--tw-bg-opacity, 1));
1653
+ }
1654
+ .bg-pink-100 {
1655
+ --tw-bg-opacity: 1;
1656
+ background-color: rgb(252 231 243 / var(--tw-bg-opacity, 1));
1657
+ }
1658
+ .bg-pink-400 {
1659
+ --tw-bg-opacity: 1;
1660
+ background-color: rgb(244 114 182 / var(--tw-bg-opacity, 1));
1661
+ }
1662
+ .bg-pink-500 {
1663
+ --tw-bg-opacity: 1;
1664
+ background-color: rgb(236 72 153 / var(--tw-bg-opacity, 1));
1665
+ }
1505
1666
  .bg-popover {
1506
1667
  background-color: hsl(var(--popover));
1507
1668
  }
@@ -1518,10 +1679,18 @@ body {
1518
1679
  --tw-bg-opacity: 1;
1519
1680
  background-color: rgb(243 232 255 / var(--tw-bg-opacity, 1));
1520
1681
  }
1682
+ .bg-purple-400 {
1683
+ --tw-bg-opacity: 1;
1684
+ background-color: rgb(192 132 252 / var(--tw-bg-opacity, 1));
1685
+ }
1521
1686
  .bg-purple-500 {
1522
1687
  --tw-bg-opacity: 1;
1523
1688
  background-color: rgb(168 85 247 / var(--tw-bg-opacity, 1));
1524
1689
  }
1690
+ .bg-purple-600 {
1691
+ --tw-bg-opacity: 1;
1692
+ background-color: rgb(147 51 234 / var(--tw-bg-opacity, 1));
1693
+ }
1525
1694
  .bg-red-100 {
1526
1695
  --tw-bg-opacity: 1;
1527
1696
  background-color: rgb(254 226 226 / var(--tw-bg-opacity, 1));
@@ -1530,6 +1699,22 @@ body {
1530
1699
  --tw-bg-opacity: 1;
1531
1700
  background-color: rgb(239 68 68 / var(--tw-bg-opacity, 1));
1532
1701
  }
1702
+ .bg-red-700 {
1703
+ --tw-bg-opacity: 1;
1704
+ background-color: rgb(185 28 28 / var(--tw-bg-opacity, 1));
1705
+ }
1706
+ .bg-red-900 {
1707
+ --tw-bg-opacity: 1;
1708
+ background-color: rgb(127 29 29 / var(--tw-bg-opacity, 1));
1709
+ }
1710
+ .bg-rose-100 {
1711
+ --tw-bg-opacity: 1;
1712
+ background-color: rgb(255 228 230 / var(--tw-bg-opacity, 1));
1713
+ }
1714
+ .bg-rose-500 {
1715
+ --tw-bg-opacity: 1;
1716
+ background-color: rgb(244 63 94 / var(--tw-bg-opacity, 1));
1717
+ }
1533
1718
  .bg-secondary {
1534
1719
  background-color: hsl(var(--secondary));
1535
1720
  }
@@ -1539,17 +1724,93 @@ body {
1539
1724
  .bg-sidebar-border {
1540
1725
  background-color: hsl(var(--sidebar-border));
1541
1726
  }
1727
+ .bg-sky-100 {
1728
+ --tw-bg-opacity: 1;
1729
+ background-color: rgb(224 242 254 / var(--tw-bg-opacity, 1));
1730
+ }
1731
+ .bg-sky-500 {
1732
+ --tw-bg-opacity: 1;
1733
+ background-color: rgb(14 165 233 / var(--tw-bg-opacity, 1));
1734
+ }
1735
+ .bg-slate-100 {
1736
+ --tw-bg-opacity: 1;
1737
+ background-color: rgb(241 245 249 / var(--tw-bg-opacity, 1));
1738
+ }
1739
+ .bg-slate-400 {
1740
+ --tw-bg-opacity: 1;
1741
+ background-color: rgb(148 163 184 / var(--tw-bg-opacity, 1));
1742
+ }
1542
1743
  .bg-slate-50 {
1543
1744
  --tw-bg-opacity: 1;
1544
1745
  background-color: rgb(248 250 252 / var(--tw-bg-opacity, 1));
1545
1746
  }
1747
+ .bg-stone-100 {
1748
+ --tw-bg-opacity: 1;
1749
+ background-color: rgb(245 245 244 / var(--tw-bg-opacity, 1));
1750
+ }
1751
+ .bg-stone-400 {
1752
+ --tw-bg-opacity: 1;
1753
+ background-color: rgb(168 162 158 / var(--tw-bg-opacity, 1));
1754
+ }
1755
+ .bg-teal-100 {
1756
+ --tw-bg-opacity: 1;
1757
+ background-color: rgb(204 251 241 / var(--tw-bg-opacity, 1));
1758
+ }
1759
+ .bg-teal-400 {
1760
+ --tw-bg-opacity: 1;
1761
+ background-color: rgb(45 212 191 / var(--tw-bg-opacity, 1));
1762
+ }
1763
+ .bg-teal-500 {
1764
+ --tw-bg-opacity: 1;
1765
+ background-color: rgb(20 184 166 / var(--tw-bg-opacity, 1));
1766
+ }
1546
1767
  .bg-transparent {
1547
1768
  background-color: transparent;
1548
1769
  }
1770
+ .bg-violet-100 {
1771
+ --tw-bg-opacity: 1;
1772
+ background-color: rgb(237 233 254 / var(--tw-bg-opacity, 1));
1773
+ }
1549
1774
  .bg-violet-200 {
1550
1775
  --tw-bg-opacity: 1;
1551
1776
  background-color: rgb(221 214 254 / var(--tw-bg-opacity, 1));
1552
1777
  }
1778
+ .bg-violet-500 {
1779
+ --tw-bg-opacity: 1;
1780
+ background-color: rgb(139 92 246 / var(--tw-bg-opacity, 1));
1781
+ }
1782
+ .bg-yellow-100 {
1783
+ --tw-bg-opacity: 1;
1784
+ background-color: rgb(254 249 195 / var(--tw-bg-opacity, 1));
1785
+ }
1786
+ .bg-yellow-400 {
1787
+ --tw-bg-opacity: 1;
1788
+ background-color: rgb(250 204 21 / var(--tw-bg-opacity, 1));
1789
+ }
1790
+ .bg-yellow-50 {
1791
+ --tw-bg-opacity: 1;
1792
+ background-color: rgb(254 252 232 / var(--tw-bg-opacity, 1));
1793
+ }
1794
+ .bg-yellow-500 {
1795
+ --tw-bg-opacity: 1;
1796
+ background-color: rgb(234 179 8 / var(--tw-bg-opacity, 1));
1797
+ }
1798
+ .bg-yellow-600 {
1799
+ --tw-bg-opacity: 1;
1800
+ background-color: rgb(202 138 4 / var(--tw-bg-opacity, 1));
1801
+ }
1802
+ .bg-yellow-700 {
1803
+ --tw-bg-opacity: 1;
1804
+ background-color: rgb(161 98 7 / var(--tw-bg-opacity, 1));
1805
+ }
1806
+ .bg-zinc-100 {
1807
+ --tw-bg-opacity: 1;
1808
+ background-color: rgb(244 244 245 / var(--tw-bg-opacity, 1));
1809
+ }
1810
+ .bg-zinc-400 {
1811
+ --tw-bg-opacity: 1;
1812
+ background-color: rgb(161 161 170 / var(--tw-bg-opacity, 1));
1813
+ }
1553
1814
  .fill-current {
1554
1815
  fill: currentColor;
1555
1816
  }
@@ -1586,6 +1847,10 @@ body {
1586
1847
  .p-\\[2px\\] {
1587
1848
  padding: 2px;
1588
1849
  }
1850
+ .px-0\\.5 {
1851
+ padding-left: 0.125rem;
1852
+ padding-right: 0.125rem;
1853
+ }
1589
1854
  .px-1 {
1590
1855
  padding-left: 0.25rem;
1591
1856
  padding-right: 0.25rem;
@@ -1707,6 +1972,9 @@ body {
1707
1972
  .text-right {
1708
1973
  text-align: right;
1709
1974
  }
1975
+ .text-start {
1976
+ text-align: start;
1977
+ }
1710
1978
  .align-middle {
1711
1979
  vertical-align: middle;
1712
1980
  }
@@ -1750,6 +2018,9 @@ body {
1750
2018
  .text-\\[0\\.8rem\\] {
1751
2019
  font-size: 0.8rem;
1752
2020
  }
2021
+ .text-\\[11px\\] {
2022
+ font-size: 11px;
2023
+ }
1753
2024
  .text-\\[13px\\] {
1754
2025
  font-size: 13px;
1755
2026
  }
@@ -1782,6 +2053,9 @@ body {
1782
2053
  .font-semibold {
1783
2054
  font-weight: 600;
1784
2055
  }
2056
+ .uppercase {
2057
+ text-transform: uppercase;
2058
+ }
1785
2059
  .tabular-nums {
1786
2060
  --tw-numeric-spacing: tabular-nums;
1787
2061
  font-variant-numeric: var(--tw-ordinal) var(--tw-slashed-zero) var(--tw-numeric-figure) var(--tw-numeric-spacing) var(--tw-numeric-fraction);
@@ -1795,6 +2069,9 @@ body {
1795
2069
  .tracking-tight {
1796
2070
  letter-spacing: -0.025em;
1797
2071
  }
2072
+ .tracking-wider {
2073
+ letter-spacing: 0.05em;
2074
+ }
1798
2075
  .tracking-widest {
1799
2076
  letter-spacing: 0.1em;
1800
2077
  }
@@ -1805,28 +2082,72 @@ body {
1805
2082
  --tw-text-opacity: 1;
1806
2083
  color: rgb(180 83 9 / var(--tw-text-opacity, 1));
1807
2084
  }
2085
+ .text-amber-800 {
2086
+ --tw-text-opacity: 1;
2087
+ color: rgb(146 64 14 / var(--tw-text-opacity, 1));
2088
+ }
1808
2089
  .text-blue-700 {
1809
2090
  --tw-text-opacity: 1;
1810
2091
  color: rgb(29 78 216 / var(--tw-text-opacity, 1));
1811
2092
  }
2093
+ .text-blue-900 {
2094
+ --tw-text-opacity: 1;
2095
+ color: rgb(30 58 138 / var(--tw-text-opacity, 1));
2096
+ }
1812
2097
  .text-card-foreground {
1813
2098
  color: hsl(var(--card-foreground));
1814
2099
  }
1815
2100
  .text-current {
1816
2101
  color: currentColor;
1817
2102
  }
2103
+ .text-cyan-600 {
2104
+ --tw-text-opacity: 1;
2105
+ color: rgb(8 145 178 / var(--tw-text-opacity, 1));
2106
+ }
2107
+ .text-cyan-700 {
2108
+ --tw-text-opacity: 1;
2109
+ color: rgb(14 116 144 / var(--tw-text-opacity, 1));
2110
+ }
1818
2111
  .text-destructive {
1819
2112
  color: hsl(var(--destructive));
1820
2113
  }
1821
2114
  .text-destructive-foreground {
1822
2115
  color: hsl(var(--destructive-foreground));
1823
2116
  }
2117
+ .text-emerald-600 {
2118
+ --tw-text-opacity: 1;
2119
+ color: rgb(5 150 105 / var(--tw-text-opacity, 1));
2120
+ }
2121
+ .text-emerald-700 {
2122
+ --tw-text-opacity: 1;
2123
+ color: rgb(4 120 87 / var(--tw-text-opacity, 1));
2124
+ }
1824
2125
  .text-foreground {
1825
2126
  color: hsl(var(--foreground));
1826
2127
  }
1827
2128
  .text-foreground\\/50 {
1828
2129
  color: hsl(var(--foreground) / 0.5);
1829
2130
  }
2131
+ .text-fuchsia-700 {
2132
+ --tw-text-opacity: 1;
2133
+ color: rgb(162 28 175 / var(--tw-text-opacity, 1));
2134
+ }
2135
+ .text-gray-100 {
2136
+ --tw-text-opacity: 1;
2137
+ color: rgb(243 244 246 / var(--tw-text-opacity, 1));
2138
+ }
2139
+ .text-gray-600 {
2140
+ --tw-text-opacity: 1;
2141
+ color: rgb(75 85 99 / var(--tw-text-opacity, 1));
2142
+ }
2143
+ .text-gray-700 {
2144
+ --tw-text-opacity: 1;
2145
+ color: rgb(55 65 81 / var(--tw-text-opacity, 1));
2146
+ }
2147
+ .text-gray-900 {
2148
+ --tw-text-opacity: 1;
2149
+ color: rgb(17 24 39 / var(--tw-text-opacity, 1));
2150
+ }
1830
2151
  .text-green-700 {
1831
2152
  --tw-text-opacity: 1;
1832
2153
  color: rgb(21 128 61 / var(--tw-text-opacity, 1));
@@ -1835,14 +2156,54 @@ body {
1835
2156
  --tw-text-opacity: 1;
1836
2157
  color: rgb(22 101 52 / var(--tw-text-opacity, 1));
1837
2158
  }
2159
+ .text-indigo-700 {
2160
+ --tw-text-opacity: 1;
2161
+ color: rgb(67 56 202 / var(--tw-text-opacity, 1));
2162
+ }
2163
+ .text-lime-700 {
2164
+ --tw-text-opacity: 1;
2165
+ color: rgb(77 124 15 / var(--tw-text-opacity, 1));
2166
+ }
2167
+ .text-lime-800 {
2168
+ --tw-text-opacity: 1;
2169
+ color: rgb(63 98 18 / var(--tw-text-opacity, 1));
2170
+ }
1838
2171
  .text-muted-foreground {
1839
2172
  color: hsl(var(--muted-foreground));
1840
2173
  }
1841
2174
  .text-muted-foreground\\/20 {
1842
2175
  color: hsl(var(--muted-foreground) / 0.2);
1843
2176
  }
1844
- .text-muted-foreground\\/50 {
1845
- color: hsl(var(--muted-foreground) / 0.5);
2177
+ .text-muted-foreground\\/40 {
2178
+ color: hsl(var(--muted-foreground) / 0.4);
2179
+ }
2180
+ .text-neutral-700 {
2181
+ --tw-text-opacity: 1;
2182
+ color: rgb(64 64 64 / var(--tw-text-opacity, 1));
2183
+ }
2184
+ .text-orange-500 {
2185
+ --tw-text-opacity: 1;
2186
+ color: rgb(249 115 22 / var(--tw-text-opacity, 1));
2187
+ }
2188
+ .text-orange-600 {
2189
+ --tw-text-opacity: 1;
2190
+ color: rgb(234 88 12 / var(--tw-text-opacity, 1));
2191
+ }
2192
+ .text-orange-700 {
2193
+ --tw-text-opacity: 1;
2194
+ color: rgb(194 65 12 / var(--tw-text-opacity, 1));
2195
+ }
2196
+ .text-orange-800 {
2197
+ --tw-text-opacity: 1;
2198
+ color: rgb(154 52 18 / var(--tw-text-opacity, 1));
2199
+ }
2200
+ .text-pink-600 {
2201
+ --tw-text-opacity: 1;
2202
+ color: rgb(219 39 119 / var(--tw-text-opacity, 1));
2203
+ }
2204
+ .text-pink-700 {
2205
+ --tw-text-opacity: 1;
2206
+ color: rgb(190 24 93 / var(--tw-text-opacity, 1));
1846
2207
  }
1847
2208
  .text-popover-foreground {
1848
2209
  color: hsl(var(--popover-foreground));
@@ -1853,6 +2214,10 @@ body {
1853
2214
  .text-primary-foreground {
1854
2215
  color: hsl(var(--primary-foreground));
1855
2216
  }
2217
+ .text-purple-600 {
2218
+ --tw-text-opacity: 1;
2219
+ color: rgb(147 51 234 / var(--tw-text-opacity, 1));
2220
+ }
1856
2221
  .text-purple-700 {
1857
2222
  --tw-text-opacity: 1;
1858
2223
  color: rgb(126 34 206 / var(--tw-text-opacity, 1));
@@ -1861,6 +2226,18 @@ body {
1861
2226
  --tw-text-opacity: 1;
1862
2227
  color: rgb(185 28 28 / var(--tw-text-opacity, 1));
1863
2228
  }
2229
+ .text-red-800 {
2230
+ --tw-text-opacity: 1;
2231
+ color: rgb(153 27 27 / var(--tw-text-opacity, 1));
2232
+ }
2233
+ .text-red-900 {
2234
+ --tw-text-opacity: 1;
2235
+ color: rgb(127 29 29 / var(--tw-text-opacity, 1));
2236
+ }
2237
+ .text-rose-700 {
2238
+ --tw-text-opacity: 1;
2239
+ color: rgb(190 18 60 / var(--tw-text-opacity, 1));
2240
+ }
1864
2241
  .text-secondary-foreground {
1865
2242
  color: hsl(var(--secondary-foreground));
1866
2243
  }
@@ -1870,6 +2247,42 @@ body {
1870
2247
  .text-sidebar-foreground\\/70 {
1871
2248
  color: hsl(var(--sidebar-foreground) / 0.7);
1872
2249
  }
2250
+ .text-sky-700 {
2251
+ --tw-text-opacity: 1;
2252
+ color: rgb(3 105 161 / var(--tw-text-opacity, 1));
2253
+ }
2254
+ .text-slate-700 {
2255
+ --tw-text-opacity: 1;
2256
+ color: rgb(51 65 85 / var(--tw-text-opacity, 1));
2257
+ }
2258
+ .text-stone-700 {
2259
+ --tw-text-opacity: 1;
2260
+ color: rgb(68 64 60 / var(--tw-text-opacity, 1));
2261
+ }
2262
+ .text-teal-600 {
2263
+ --tw-text-opacity: 1;
2264
+ color: rgb(13 148 136 / var(--tw-text-opacity, 1));
2265
+ }
2266
+ .text-teal-700 {
2267
+ --tw-text-opacity: 1;
2268
+ color: rgb(15 118 110 / var(--tw-text-opacity, 1));
2269
+ }
2270
+ .text-violet-700 {
2271
+ --tw-text-opacity: 1;
2272
+ color: rgb(109 40 217 / var(--tw-text-opacity, 1));
2273
+ }
2274
+ .text-yellow-700 {
2275
+ --tw-text-opacity: 1;
2276
+ color: rgb(161 98 7 / var(--tw-text-opacity, 1));
2277
+ }
2278
+ .text-yellow-800 {
2279
+ --tw-text-opacity: 1;
2280
+ color: rgb(133 77 14 / var(--tw-text-opacity, 1));
2281
+ }
2282
+ .text-zinc-700 {
2283
+ --tw-text-opacity: 1;
2284
+ color: rgb(63 63 70 / var(--tw-text-opacity, 1));
2285
+ }
1873
2286
  .underline-offset-4 {
1874
2287
  text-underline-offset: 4px;
1875
2288
  }
@@ -2194,6 +2607,11 @@ svg.icon {
2194
2607
  border-top-right-radius: calc(var(--radius) - 2px);
2195
2608
  border-bottom-right-radius: calc(var(--radius) - 2px);
2196
2609
  }
2610
+ .hover\\:scale-\\[1\\.02\\]:hover {
2611
+ --tw-scale-x: 1.02;
2612
+ --tw-scale-y: 1.02;
2613
+ 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));
2614
+ }
2197
2615
  .hover\\:border-primary:hover {
2198
2616
  border-color: hsl(var(--primary));
2199
2617
  }
@@ -2206,32 +2624,62 @@ svg.icon {
2206
2624
  .hover\\:bg-amber-100\\/80:hover {
2207
2625
  background-color: rgb(254 243 199 / 0.8);
2208
2626
  }
2627
+ .hover\\:bg-amber-50\\/80:hover {
2628
+ background-color: rgb(255 251 235 / 0.8);
2629
+ }
2209
2630
  .hover\\:bg-blue-100\\/80:hover {
2210
2631
  background-color: rgb(219 234 254 / 0.8);
2211
2632
  }
2633
+ .hover\\:bg-cyan-100\\/80:hover {
2634
+ background-color: rgb(207 250 254 / 0.8);
2635
+ }
2212
2636
  .hover\\:bg-destructive\\/80:hover {
2213
2637
  background-color: hsl(var(--destructive) / 0.8);
2214
2638
  }
2215
2639
  .hover\\:bg-destructive\\/90:hover {
2216
2640
  background-color: hsl(var(--destructive) / 0.9);
2217
2641
  }
2642
+ .hover\\:bg-emerald-100\\/80:hover {
2643
+ background-color: rgb(209 250 229 / 0.8);
2644
+ }
2645
+ .hover\\:bg-fuchsia-100\\/80:hover {
2646
+ background-color: rgb(250 232 255 / 0.8);
2647
+ }
2648
+ .hover\\:bg-gray-100\\/80:hover {
2649
+ background-color: rgb(243 244 246 / 0.8);
2650
+ }
2651
+ .hover\\:bg-gray-50\\/80:hover {
2652
+ background-color: rgb(249 250 251 / 0.8);
2653
+ }
2654
+ .hover\\:bg-gray-900\\/80:hover {
2655
+ background-color: rgb(17 24 39 / 0.8);
2656
+ }
2218
2657
  .hover\\:bg-green-100\\/80:hover {
2219
2658
  background-color: rgb(220 252 231 / 0.8);
2220
2659
  }
2660
+ .hover\\:bg-indigo-100\\/80:hover {
2661
+ background-color: rgb(224 231 255 / 0.8);
2662
+ }
2663
+ .hover\\:bg-lime-100\\/80:hover {
2664
+ background-color: rgb(236 252 203 / 0.8);
2665
+ }
2221
2666
  .hover\\:bg-muted:hover {
2222
2667
  background-color: hsl(var(--muted));
2223
2668
  }
2224
- .hover\\:bg-muted\\/10:hover {
2225
- background-color: hsl(var(--muted) / 0.1);
2669
+ .hover\\:bg-muted\\/5:hover {
2670
+ background-color: hsl(var(--muted) / 0.05);
2226
2671
  }
2227
2672
  .hover\\:bg-muted\\/50:hover {
2228
2673
  background-color: hsl(var(--muted) / 0.5);
2229
2674
  }
2230
- .hover\\:bg-muted\\/80:hover {
2231
- background-color: hsl(var(--muted) / 0.8);
2675
+ .hover\\:bg-neutral-100\\/80:hover {
2676
+ background-color: rgb(245 245 245 / 0.8);
2232
2677
  }
2233
- .hover\\:bg-primary\\/10:hover {
2234
- background-color: hsl(var(--primary) / 0.1);
2678
+ .hover\\:bg-orange-100\\/80:hover {
2679
+ background-color: rgb(255 237 213 / 0.8);
2680
+ }
2681
+ .hover\\:bg-pink-100\\/80:hover {
2682
+ background-color: rgb(252 231 243 / 0.8);
2235
2683
  }
2236
2684
  .hover\\:bg-primary\\/80:hover {
2237
2685
  background-color: hsl(var(--primary) / 0.8);
@@ -2245,6 +2693,9 @@ svg.icon {
2245
2693
  .hover\\:bg-red-100\\/80:hover {
2246
2694
  background-color: rgb(254 226 226 / 0.8);
2247
2695
  }
2696
+ .hover\\:bg-rose-100\\/80:hover {
2697
+ background-color: rgb(255 228 230 / 0.8);
2698
+ }
2248
2699
  .hover\\:bg-secondary:hover {
2249
2700
  background-color: hsl(var(--secondary));
2250
2701
  }
@@ -2254,14 +2705,38 @@ svg.icon {
2254
2705
  .hover\\:bg-sidebar-accent:hover {
2255
2706
  background-color: hsl(var(--sidebar-accent));
2256
2707
  }
2708
+ .hover\\:bg-sky-100\\/80:hover {
2709
+ background-color: rgb(224 242 254 / 0.8);
2710
+ }
2711
+ .hover\\:bg-slate-100\\/80:hover {
2712
+ background-color: rgb(241 245 249 / 0.8);
2713
+ }
2714
+ .hover\\:bg-stone-100\\/80:hover {
2715
+ background-color: rgb(245 245 244 / 0.8);
2716
+ }
2717
+ .hover\\:bg-teal-100\\/80:hover {
2718
+ background-color: rgb(204 251 241 / 0.8);
2719
+ }
2720
+ .hover\\:bg-violet-100\\/80:hover {
2721
+ background-color: rgb(237 233 254 / 0.8);
2722
+ }
2257
2723
  .hover\\:bg-violet-300:hover {
2258
2724
  --tw-bg-opacity: 1;
2259
2725
  background-color: rgb(196 181 253 / var(--tw-bg-opacity, 1));
2260
2726
  }
2727
+ .hover\\:bg-yellow-100\\/80:hover {
2728
+ background-color: rgb(254 249 195 / 0.8);
2729
+ }
2730
+ .hover\\:bg-yellow-50\\/80:hover {
2731
+ background-color: rgb(254 252 232 / 0.8);
2732
+ }
2261
2733
  .hover\\:bg-zinc-100:hover {
2262
2734
  --tw-bg-opacity: 1;
2263
2735
  background-color: rgb(244 244 245 / var(--tw-bg-opacity, 1));
2264
2736
  }
2737
+ .hover\\:bg-zinc-100\\/80:hover {
2738
+ background-color: rgb(244 244 245 / 0.8);
2739
+ }
2265
2740
  .hover\\:text-accent-foreground:hover {
2266
2741
  color: hsl(var(--accent-foreground));
2267
2742
  }
@@ -2397,6 +2872,9 @@ svg.icon {
2397
2872
  .group\\/menu-item:focus-within .group-focus-within\\/menu-item\\:opacity-100 {
2398
2873
  opacity: 1;
2399
2874
  }
2875
+ .group:hover .group-hover\\:text-foreground {
2876
+ color: hsl(var(--foreground));
2877
+ }
2400
2878
  .group\\/item:hover .group-hover\\/item\\:opacity-100 {
2401
2879
  opacity: 1;
2402
2880
  }
@@ -3028,12 +3506,34 @@ svg.icon {
3028
3506
  --tw-border-opacity: 1;
3029
3507
  border-color: rgb(22 101 52 / var(--tw-border-opacity, 1));
3030
3508
  }
3509
+ .dark\\:bg-amber-900\\/30:is(.dark *) {
3510
+ background-color: rgb(120 53 15 / 0.3);
3511
+ }
3031
3512
  .dark\\:bg-amber-900\\/50:is(.dark *) {
3032
3513
  background-color: rgb(120 53 15 / 0.5);
3033
3514
  }
3034
3515
  .dark\\:bg-blue-900\\/50:is(.dark *) {
3035
3516
  background-color: rgb(30 58 138 / 0.5);
3036
3517
  }
3518
+ .dark\\:bg-cyan-900\\/50:is(.dark *) {
3519
+ background-color: rgb(22 78 99 / 0.5);
3520
+ }
3521
+ .dark\\:bg-emerald-900\\/50:is(.dark *) {
3522
+ background-color: rgb(6 78 59 / 0.5);
3523
+ }
3524
+ .dark\\:bg-fuchsia-900\\/50:is(.dark *) {
3525
+ background-color: rgb(112 26 117 / 0.5);
3526
+ }
3527
+ .dark\\:bg-gray-100:is(.dark *) {
3528
+ --tw-bg-opacity: 1;
3529
+ background-color: rgb(243 244 246 / var(--tw-bg-opacity, 1));
3530
+ }
3531
+ .dark\\:bg-gray-900\\/30:is(.dark *) {
3532
+ background-color: rgb(17 24 39 / 0.3);
3533
+ }
3534
+ .dark\\:bg-gray-900\\/50:is(.dark *) {
3535
+ background-color: rgb(17 24 39 / 0.5);
3536
+ }
3037
3537
  .dark\\:bg-green-900\\/50:is(.dark *) {
3038
3538
  background-color: rgb(20 83 45 / 0.5);
3039
3539
  }
@@ -3041,47 +3541,193 @@ svg.icon {
3041
3541
  --tw-bg-opacity: 1;
3042
3542
  background-color: rgb(5 46 22 / var(--tw-bg-opacity, 1));
3043
3543
  }
3544
+ .dark\\:bg-indigo-900\\/50:is(.dark *) {
3545
+ background-color: rgb(49 46 129 / 0.5);
3546
+ }
3547
+ .dark\\:bg-lime-900\\/50:is(.dark *) {
3548
+ background-color: rgb(54 83 20 / 0.5);
3549
+ }
3044
3550
  .dark\\:bg-muted:is(.dark *) {
3045
3551
  background-color: hsl(var(--muted));
3046
3552
  }
3553
+ .dark\\:bg-neutral-900\\/50:is(.dark *) {
3554
+ background-color: rgb(23 23 23 / 0.5);
3555
+ }
3556
+ .dark\\:bg-orange-900\\/50:is(.dark *) {
3557
+ background-color: rgb(124 45 18 / 0.5);
3558
+ }
3559
+ .dark\\:bg-pink-900\\/50:is(.dark *) {
3560
+ background-color: rgb(131 24 67 / 0.5);
3561
+ }
3047
3562
  .dark\\:bg-purple-900\\/50:is(.dark *) {
3048
3563
  background-color: rgb(88 28 135 / 0.5);
3049
3564
  }
3050
3565
  .dark\\:bg-red-900\\/50:is(.dark *) {
3051
3566
  background-color: rgb(127 29 29 / 0.5);
3052
3567
  }
3568
+ .dark\\:bg-rose-900\\/50:is(.dark *) {
3569
+ background-color: rgb(136 19 55 / 0.5);
3570
+ }
3571
+ .dark\\:bg-sky-900\\/50:is(.dark *) {
3572
+ background-color: rgb(12 74 110 / 0.5);
3573
+ }
3574
+ .dark\\:bg-slate-900\\/50:is(.dark *) {
3575
+ background-color: rgb(15 23 42 / 0.5);
3576
+ }
3577
+ .dark\\:bg-stone-900\\/50:is(.dark *) {
3578
+ background-color: rgb(28 25 23 / 0.5);
3579
+ }
3580
+ .dark\\:bg-teal-900\\/50:is(.dark *) {
3581
+ background-color: rgb(19 78 74 / 0.5);
3582
+ }
3583
+ .dark\\:bg-violet-900\\/50:is(.dark *) {
3584
+ background-color: rgb(76 29 149 / 0.5);
3585
+ }
3053
3586
  .dark\\:bg-white\\/5:is(.dark *) {
3054
3587
  background-color: rgb(255 255 255 / 0.05);
3055
3588
  }
3589
+ .dark\\:bg-yellow-900\\/30:is(.dark *) {
3590
+ background-color: rgb(113 63 18 / 0.3);
3591
+ }
3592
+ .dark\\:bg-yellow-900\\/50:is(.dark *) {
3593
+ background-color: rgb(113 63 18 / 0.5);
3594
+ }
3056
3595
  .dark\\:bg-zinc-600:is(.dark *) {
3057
3596
  --tw-bg-opacity: 1;
3058
3597
  background-color: rgb(82 82 91 / var(--tw-bg-opacity, 1));
3059
3598
  }
3599
+ .dark\\:bg-zinc-900\\/50:is(.dark *) {
3600
+ background-color: rgb(24 24 27 / 0.5);
3601
+ }
3602
+ .dark\\:text-amber-200:is(.dark *) {
3603
+ --tw-text-opacity: 1;
3604
+ color: rgb(253 230 138 / var(--tw-text-opacity, 1));
3605
+ }
3060
3606
  .dark\\:text-amber-300:is(.dark *) {
3061
3607
  --tw-text-opacity: 1;
3062
3608
  color: rgb(252 211 77 / var(--tw-text-opacity, 1));
3063
3609
  }
3610
+ .dark\\:text-blue-200:is(.dark *) {
3611
+ --tw-text-opacity: 1;
3612
+ color: rgb(191 219 254 / var(--tw-text-opacity, 1));
3613
+ }
3064
3614
  .dark\\:text-blue-300:is(.dark *) {
3065
3615
  --tw-text-opacity: 1;
3066
3616
  color: rgb(147 197 253 / var(--tw-text-opacity, 1));
3067
3617
  }
3068
- .dark\\:text-green-200:is(.dark *) {
3618
+ .dark\\:text-cyan-300:is(.dark *) {
3069
3619
  --tw-text-opacity: 1;
3070
- color: rgb(187 247 208 / var(--tw-text-opacity, 1));
3620
+ color: rgb(103 232 249 / var(--tw-text-opacity, 1));
3071
3621
  }
3072
- .dark\\:text-green-300:is(.dark *) {
3622
+ .dark\\:text-emerald-300:is(.dark *) {
3073
3623
  --tw-text-opacity: 1;
3074
- color: rgb(134 239 172 / var(--tw-text-opacity, 1));
3624
+ color: rgb(110 231 183 / var(--tw-text-opacity, 1));
3075
3625
  }
3076
- .dark\\:text-purple-300:is(.dark *) {
3626
+ .dark\\:text-fuchsia-300:is(.dark *) {
3077
3627
  --tw-text-opacity: 1;
3078
- color: rgb(216 180 254 / var(--tw-text-opacity, 1));
3628
+ color: rgb(240 171 252 / var(--tw-text-opacity, 1));
3079
3629
  }
3080
- .dark\\:text-red-300:is(.dark *) {
3630
+ .dark\\:text-gray-100:is(.dark *) {
3081
3631
  --tw-text-opacity: 1;
3082
- color: rgb(252 165 165 / var(--tw-text-opacity, 1));
3632
+ color: rgb(243 244 246 / var(--tw-text-opacity, 1));
3083
3633
  }
3084
- .dark\\:hover\\:bg-white\\/10:hover:is(.dark *) {
3634
+ .dark\\:text-gray-200:is(.dark *) {
3635
+ --tw-text-opacity: 1;
3636
+ color: rgb(229 231 235 / var(--tw-text-opacity, 1));
3637
+ }
3638
+ .dark\\:text-gray-300:is(.dark *) {
3639
+ --tw-text-opacity: 1;
3640
+ color: rgb(209 213 219 / var(--tw-text-opacity, 1));
3641
+ }
3642
+ .dark\\:text-gray-900:is(.dark *) {
3643
+ --tw-text-opacity: 1;
3644
+ color: rgb(17 24 39 / var(--tw-text-opacity, 1));
3645
+ }
3646
+ .dark\\:text-green-200:is(.dark *) {
3647
+ --tw-text-opacity: 1;
3648
+ color: rgb(187 247 208 / var(--tw-text-opacity, 1));
3649
+ }
3650
+ .dark\\:text-green-300:is(.dark *) {
3651
+ --tw-text-opacity: 1;
3652
+ color: rgb(134 239 172 / var(--tw-text-opacity, 1));
3653
+ }
3654
+ .dark\\:text-indigo-300:is(.dark *) {
3655
+ --tw-text-opacity: 1;
3656
+ color: rgb(165 180 252 / var(--tw-text-opacity, 1));
3657
+ }
3658
+ .dark\\:text-lime-200:is(.dark *) {
3659
+ --tw-text-opacity: 1;
3660
+ color: rgb(217 249 157 / var(--tw-text-opacity, 1));
3661
+ }
3662
+ .dark\\:text-lime-300:is(.dark *) {
3663
+ --tw-text-opacity: 1;
3664
+ color: rgb(190 242 100 / var(--tw-text-opacity, 1));
3665
+ }
3666
+ .dark\\:text-neutral-300:is(.dark *) {
3667
+ --tw-text-opacity: 1;
3668
+ color: rgb(212 212 212 / var(--tw-text-opacity, 1));
3669
+ }
3670
+ .dark\\:text-orange-200:is(.dark *) {
3671
+ --tw-text-opacity: 1;
3672
+ color: rgb(254 215 170 / var(--tw-text-opacity, 1));
3673
+ }
3674
+ .dark\\:text-orange-300:is(.dark *) {
3675
+ --tw-text-opacity: 1;
3676
+ color: rgb(253 186 116 / var(--tw-text-opacity, 1));
3677
+ }
3678
+ .dark\\:text-pink-300:is(.dark *) {
3679
+ --tw-text-opacity: 1;
3680
+ color: rgb(249 168 212 / var(--tw-text-opacity, 1));
3681
+ }
3682
+ .dark\\:text-purple-300:is(.dark *) {
3683
+ --tw-text-opacity: 1;
3684
+ color: rgb(216 180 254 / var(--tw-text-opacity, 1));
3685
+ }
3686
+ .dark\\:text-red-200:is(.dark *) {
3687
+ --tw-text-opacity: 1;
3688
+ color: rgb(254 202 202 / var(--tw-text-opacity, 1));
3689
+ }
3690
+ .dark\\:text-red-300:is(.dark *) {
3691
+ --tw-text-opacity: 1;
3692
+ color: rgb(252 165 165 / var(--tw-text-opacity, 1));
3693
+ }
3694
+ .dark\\:text-rose-300:is(.dark *) {
3695
+ --tw-text-opacity: 1;
3696
+ color: rgb(253 164 175 / var(--tw-text-opacity, 1));
3697
+ }
3698
+ .dark\\:text-sky-300:is(.dark *) {
3699
+ --tw-text-opacity: 1;
3700
+ color: rgb(125 211 252 / var(--tw-text-opacity, 1));
3701
+ }
3702
+ .dark\\:text-slate-300:is(.dark *) {
3703
+ --tw-text-opacity: 1;
3704
+ color: rgb(203 213 225 / var(--tw-text-opacity, 1));
3705
+ }
3706
+ .dark\\:text-stone-300:is(.dark *) {
3707
+ --tw-text-opacity: 1;
3708
+ color: rgb(214 211 209 / var(--tw-text-opacity, 1));
3709
+ }
3710
+ .dark\\:text-teal-300:is(.dark *) {
3711
+ --tw-text-opacity: 1;
3712
+ color: rgb(94 234 212 / var(--tw-text-opacity, 1));
3713
+ }
3714
+ .dark\\:text-violet-300:is(.dark *) {
3715
+ --tw-text-opacity: 1;
3716
+ color: rgb(196 181 253 / var(--tw-text-opacity, 1));
3717
+ }
3718
+ .dark\\:text-yellow-200:is(.dark *) {
3719
+ --tw-text-opacity: 1;
3720
+ color: rgb(254 240 138 / var(--tw-text-opacity, 1));
3721
+ }
3722
+ .dark\\:text-yellow-300:is(.dark *) {
3723
+ --tw-text-opacity: 1;
3724
+ color: rgb(253 224 71 / var(--tw-text-opacity, 1));
3725
+ }
3726
+ .dark\\:text-zinc-300:is(.dark *) {
3727
+ --tw-text-opacity: 1;
3728
+ color: rgb(212 212 216 / var(--tw-text-opacity, 1));
3729
+ }
3730
+ .dark\\:hover\\:bg-white\\/10:hover:is(.dark *) {
3085
3731
  background-color: rgb(255 255 255 / 0.1);
3086
3732
  }
3087
3733
  .dark\\:hover\\:bg-zinc-500:hover:is(.dark *) {
@@ -3452,7 +4098,172 @@ svg.icon {
3452
4098
  `);
3453
4099
 
3454
4100
  // src/components/DataViews.tsx
3455
- var import_react5 = require("react");
4101
+ var import_react7 = require("react");
4102
+
4103
+ // src/lib/colors.ts
4104
+ var PRESET_COLORS = [
4105
+ { name: "Red", value: "red" },
4106
+ { name: "Blue", value: "blue" },
4107
+ { name: "Green", value: "green" },
4108
+ { name: "Yellow", value: "yellow" },
4109
+ { name: "Orange", value: "orange" },
4110
+ { name: "Purple", value: "purple" },
4111
+ { name: "Pink", value: "pink" },
4112
+ { name: "Brown", value: "brown" },
4113
+ { name: "Gray", value: "gray" },
4114
+ { name: "Black", value: "black" },
4115
+ { name: "White", value: "white" },
4116
+ { name: "Cyan", value: "cyan" },
4117
+ { name: "Magenta", value: "magenta" },
4118
+ { name: "Lime", value: "lime" },
4119
+ { name: "Indigo", value: "indigo" },
4120
+ { name: "Teal", value: "teal" },
4121
+ { name: "Violet", value: "violet" },
4122
+ { name: "Rose", value: "rose" },
4123
+ { name: "Fuchsia", value: "fuchsia" },
4124
+ { name: "Sky", value: "sky" },
4125
+ { name: "Emerald", value: "emerald" },
4126
+ { name: "Amber", value: "amber" },
4127
+ { name: "Slate", value: "slate" },
4128
+ { name: "Zinc", value: "zinc" },
4129
+ { name: "Stone", value: "stone" },
4130
+ { name: "Neutral", value: "neutral" },
4131
+ { name: "Crimson", value: "crimson" },
4132
+ { name: "Navy", value: "navy" },
4133
+ { name: "Maroon", value: "maroon" },
4134
+ { name: "Olive", value: "olive" },
4135
+ { name: "Coral", value: "coral" },
4136
+ { name: "Salmon", value: "salmon" },
4137
+ { name: "Gold", value: "gold" },
4138
+ { name: "Silver", value: "silver" },
4139
+ { name: "Turquoise", value: "turquoise" },
4140
+ { name: "Aqua", value: "aqua" },
4141
+ { name: "Mint", value: "mint" },
4142
+ { name: "Lavender", value: "lavender" },
4143
+ { name: "Peach", value: "peach" },
4144
+ { name: "Beige", value: "beige" },
4145
+ { name: "Ivory", value: "ivory" },
4146
+ { name: "Khaki", value: "khaki" },
4147
+ { name: "Plum", value: "plum" },
4148
+ { name: "Orchid", value: "orchid" },
4149
+ { name: "Tan", value: "tan" },
4150
+ { name: "Chocolate", value: "chocolate" },
4151
+ { name: "Sienna", value: "sienna" },
4152
+ { name: "Burgundy", value: "burgundy" },
4153
+ { name: "Mustard", value: "mustard" },
4154
+ { name: "Charcoal", value: "charcoal" }
4155
+ ];
4156
+ var BADGE_COLOR_MAP = {
4157
+ gray: "bg-gray-100 text-gray-700 dark:bg-gray-900/50 dark:text-gray-300 hover:bg-gray-100/80",
4158
+ slate: "bg-slate-100 text-slate-700 dark:bg-slate-900/50 dark:text-slate-300 hover:bg-slate-100/80",
4159
+ zinc: "bg-zinc-100 text-zinc-700 dark:bg-zinc-900/50 dark:text-zinc-300 hover:bg-zinc-100/80",
4160
+ neutral: "bg-neutral-100 text-neutral-700 dark:bg-neutral-900/50 dark:text-neutral-300 hover:bg-neutral-100/80",
4161
+ stone: "bg-stone-100 text-stone-700 dark:bg-stone-900/50 dark:text-stone-300 hover:bg-stone-100/80",
4162
+ red: "bg-red-100 text-red-700 dark:bg-red-900/50 dark:text-red-300 hover:bg-red-100/80",
4163
+ orange: "bg-orange-100 text-orange-700 dark:bg-orange-900/50 dark:text-orange-300 hover:bg-orange-100/80",
4164
+ amber: "bg-amber-100 text-amber-700 dark:bg-amber-900/50 dark:text-amber-300 hover:bg-amber-100/80",
4165
+ yellow: "bg-yellow-100 text-yellow-700 dark:bg-yellow-900/50 dark:text-yellow-300 hover:bg-yellow-100/80",
4166
+ lime: "bg-lime-100 text-lime-700 dark:bg-lime-900/50 dark:text-lime-300 hover:bg-lime-100/80",
4167
+ green: "bg-green-100 text-green-700 dark:bg-green-900/50 dark:text-green-300 hover:bg-green-100/80",
4168
+ emerald: "bg-emerald-100 text-emerald-700 dark:bg-emerald-900/50 dark:text-emerald-300 hover:bg-emerald-100/80",
4169
+ teal: "bg-teal-100 text-teal-700 dark:bg-teal-900/50 dark:text-teal-300 hover:bg-teal-100/80",
4170
+ cyan: "bg-cyan-100 text-cyan-700 dark:bg-cyan-900/50 dark:text-cyan-300 hover:bg-cyan-100/80",
4171
+ sky: "bg-sky-100 text-sky-700 dark:bg-sky-900/50 dark:text-sky-300 hover:bg-sky-100/80",
4172
+ blue: "bg-blue-100 text-blue-700 dark:bg-blue-900/50 dark:text-blue-300 hover:bg-blue-100/80",
4173
+ indigo: "bg-indigo-100 text-indigo-700 dark:bg-indigo-900/50 dark:text-indigo-300 hover:bg-indigo-100/80",
4174
+ violet: "bg-violet-100 text-violet-700 dark:bg-violet-900/50 dark:text-violet-300 hover:bg-violet-100/80",
4175
+ purple: "bg-purple-100 text-purple-700 dark:bg-purple-900/50 dark:text-purple-300 hover:bg-purple-100/80",
4176
+ fuchsia: "bg-fuchsia-100 text-fuchsia-700 dark:bg-fuchsia-900/50 dark:text-fuchsia-300 hover:bg-fuchsia-100/80",
4177
+ pink: "bg-pink-100 text-pink-700 dark:bg-pink-900/50 dark:text-pink-300 hover:bg-pink-100/80",
4178
+ rose: "bg-rose-100 text-rose-700 dark:bg-rose-900/50 dark:text-rose-300 hover:bg-rose-100/80",
4179
+ brown: "bg-amber-100 text-amber-800 dark:bg-amber-900/50 dark:text-amber-200 hover:bg-amber-100/80",
4180
+ // Additional colors
4181
+ crimson: "bg-red-100 text-red-800 dark:bg-red-900/50 dark:text-red-200 hover:bg-red-100/80",
4182
+ navy: "bg-blue-100 text-blue-900 dark:bg-blue-900/50 dark:text-blue-200 hover:bg-blue-100/80",
4183
+ maroon: "bg-red-100 text-red-900 dark:bg-red-900/50 dark:text-red-200 hover:bg-red-100/80",
4184
+ olive: "bg-lime-100 text-lime-800 dark:bg-lime-900/50 dark:text-lime-200 hover:bg-lime-100/80",
4185
+ coral: "bg-orange-100 text-orange-600 dark:bg-orange-900/50 dark:text-orange-300 hover:bg-orange-100/80",
4186
+ salmon: "bg-pink-100 text-pink-600 dark:bg-pink-900/50 dark:text-pink-300 hover:bg-pink-100/80",
4187
+ gold: "bg-yellow-100 text-yellow-800 dark:bg-yellow-900/50 dark:text-yellow-200 hover:bg-yellow-100/80",
4188
+ silver: "bg-gray-100 text-gray-600 dark:bg-gray-900/50 dark:text-gray-300 hover:bg-gray-100/80",
4189
+ turquoise: "bg-teal-100 text-teal-600 dark:bg-teal-900/50 dark:text-teal-300 hover:bg-teal-100/80",
4190
+ aqua: "bg-cyan-100 text-cyan-600 dark:bg-cyan-900/50 dark:text-cyan-300 hover:bg-cyan-100/80",
4191
+ mint: "bg-emerald-100 text-emerald-600 dark:bg-emerald-900/50 dark:text-emerald-300 hover:bg-emerald-100/80",
4192
+ lavender: "bg-purple-100 text-purple-600 dark:bg-purple-900/50 dark:text-purple-300 hover:bg-purple-100/80",
4193
+ peach: "bg-orange-100 text-orange-500 dark:bg-orange-900/50 dark:text-orange-300 hover:bg-orange-100/80",
4194
+ beige: "bg-amber-50 text-amber-700 dark:bg-amber-900/30 dark:text-amber-300 hover:bg-amber-50/80",
4195
+ ivory: "bg-yellow-50 text-yellow-700 dark:bg-yellow-900/30 dark:text-yellow-300 hover:bg-yellow-50/80",
4196
+ khaki: "bg-yellow-100 text-yellow-700 dark:bg-yellow-900/50 dark:text-yellow-300 hover:bg-yellow-100/80",
4197
+ plum: "bg-purple-100 text-purple-700 dark:bg-purple-900/50 dark:text-purple-300 hover:bg-purple-100/80",
4198
+ orchid: "bg-fuchsia-100 text-fuchsia-700 dark:bg-fuchsia-900/50 dark:text-fuchsia-300 hover:bg-fuchsia-100/80",
4199
+ tan: "bg-orange-100 text-orange-700 dark:bg-orange-900/50 dark:text-orange-300 hover:bg-orange-100/80",
4200
+ chocolate: "bg-amber-100 text-amber-800 dark:bg-amber-900/50 dark:text-amber-200 hover:bg-amber-100/80",
4201
+ sienna: "bg-orange-100 text-orange-800 dark:bg-orange-900/50 dark:text-orange-200 hover:bg-orange-100/80",
4202
+ burgundy: "bg-red-100 text-red-900 dark:bg-red-900/50 dark:text-red-200 hover:bg-red-100/80",
4203
+ mustard: "bg-yellow-100 text-yellow-800 dark:bg-yellow-900/50 dark:text-yellow-200 hover:bg-yellow-100/80",
4204
+ charcoal: "bg-gray-100 text-gray-900 dark:bg-gray-900/50 dark:text-gray-200 hover:bg-gray-100/80",
4205
+ black: "bg-gray-900 text-gray-100 dark:bg-gray-100 dark:text-gray-900 hover:bg-gray-900/80",
4206
+ white: "bg-gray-50 text-gray-900 dark:bg-gray-900/30 dark:text-gray-100 hover:bg-gray-50/80",
4207
+ magenta: "bg-fuchsia-100 text-fuchsia-700 dark:bg-fuchsia-900/50 dark:text-fuchsia-300 hover:bg-fuchsia-100/80"
4208
+ };
4209
+ var DOT_COLOR_MAP = {
4210
+ gray: "bg-gray-400",
4211
+ slate: "bg-slate-400",
4212
+ zinc: "bg-zinc-400",
4213
+ neutral: "bg-neutral-400",
4214
+ stone: "bg-stone-400",
4215
+ red: "bg-red-500",
4216
+ orange: "bg-orange-500",
4217
+ amber: "bg-amber-500",
4218
+ yellow: "bg-yellow-500",
4219
+ lime: "bg-lime-500",
4220
+ green: "bg-green-500",
4221
+ emerald: "bg-emerald-500",
4222
+ teal: "bg-teal-500",
4223
+ cyan: "bg-cyan-500",
4224
+ sky: "bg-sky-500",
4225
+ blue: "bg-blue-500",
4226
+ indigo: "bg-indigo-500",
4227
+ violet: "bg-violet-500",
4228
+ purple: "bg-purple-500",
4229
+ fuchsia: "bg-fuchsia-500",
4230
+ pink: "bg-pink-500",
4231
+ rose: "bg-rose-500",
4232
+ brown: "bg-amber-700",
4233
+ crimson: "bg-red-700",
4234
+ navy: "bg-blue-900",
4235
+ maroon: "bg-red-900",
4236
+ olive: "bg-lime-700",
4237
+ coral: "bg-orange-400",
4238
+ salmon: "bg-pink-400",
4239
+ gold: "bg-yellow-600",
4240
+ silver: "bg-gray-400",
4241
+ turquoise: "bg-teal-400",
4242
+ aqua: "bg-cyan-400",
4243
+ mint: "bg-emerald-400",
4244
+ lavender: "bg-purple-400",
4245
+ peach: "bg-orange-300",
4246
+ beige: "bg-amber-200",
4247
+ ivory: "bg-yellow-100",
4248
+ khaki: "bg-yellow-400",
4249
+ plum: "bg-purple-600",
4250
+ orchid: "bg-fuchsia-400",
4251
+ tan: "bg-orange-400",
4252
+ chocolate: "bg-amber-700",
4253
+ sienna: "bg-orange-700",
4254
+ burgundy: "bg-red-900",
4255
+ mustard: "bg-yellow-700",
4256
+ charcoal: "bg-gray-800",
4257
+ black: "bg-gray-900",
4258
+ white: "bg-gray-100",
4259
+ magenta: "bg-fuchsia-600"
4260
+ };
4261
+ function getBadgeColor(color) {
4262
+ return BADGE_COLOR_MAP[color || "gray"] || BADGE_COLOR_MAP.gray;
4263
+ }
4264
+ function getDotColor(color) {
4265
+ return DOT_COLOR_MAP[color || "gray"] || DOT_COLOR_MAP.gray;
4266
+ }
3456
4267
 
3457
4268
  // src/lib/schema.ts
3458
4269
  var tableSchema = {
@@ -3558,7 +4369,8 @@ TabsContent.displayName = TabsPrimitive.Content.displayName;
3558
4369
  var import_lucide_react11 = require("lucide-react");
3559
4370
 
3560
4371
  // src/components/views/GridView.tsx
3561
- var import_lucide_react2 = require("lucide-react");
4372
+ var import_react2 = require("react");
4373
+ var import_lucide_react3 = require("lucide-react");
3562
4374
 
3563
4375
  // src/components/ui/button.tsx
3564
4376
  var React2 = __toESM(require("react"));
@@ -3755,23 +4567,952 @@ function Badge(_a) {
3755
4567
  return /* @__PURE__ */ (0, import_jsx_runtime5.jsx)("div", __spreadValues({ className: cn(badgeVariants({ variant }), className) }, props));
3756
4568
  }
3757
4569
 
3758
- // src/components/views/GridView.tsx
4570
+ // src/components/ui/select.tsx
4571
+ var React5 = __toESM(require("react"));
4572
+ var SelectPrimitive = __toESM(require("@radix-ui/react-select"));
4573
+ var import_lucide_react2 = require("lucide-react");
3759
4574
  var import_jsx_runtime6 = require("react/jsx-runtime");
3760
- var BADGE_COLOR_MAP = {
3761
- gray: "bg-muted text-muted-foreground",
3762
- blue: "bg-blue-100 text-blue-700 dark:bg-blue-900/50 dark:text-blue-300",
3763
- green: "bg-green-100 text-green-700 dark:bg-green-900/50 dark:text-green-300",
3764
- yellow: "bg-amber-100 text-amber-700 dark:bg-amber-900/50 dark:text-amber-300",
3765
- red: "bg-red-100 text-red-700 dark:bg-red-900/50 dark:text-red-300",
3766
- purple: "bg-purple-100 text-purple-700 dark:bg-purple-900/50 dark:text-purple-300"
4575
+ var Select = SelectPrimitive.Root;
4576
+ var SelectValue = SelectPrimitive.Value;
4577
+ var SelectTrigger = React5.forwardRef((_a, ref) => {
4578
+ var _b = _a, { className, children } = _b, props = __objRest(_b, ["className", "children"]);
4579
+ return /* @__PURE__ */ (0, import_jsx_runtime6.jsxs)(
4580
+ SelectPrimitive.Trigger,
4581
+ __spreadProps(__spreadValues({
4582
+ ref,
4583
+ className: cn(
4584
+ "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",
4585
+ className
4586
+ )
4587
+ }, props), {
4588
+ children: [
4589
+ children,
4590
+ /* @__PURE__ */ (0, import_jsx_runtime6.jsx)(SelectPrimitive.Icon, { asChild: true, children: /* @__PURE__ */ (0, import_jsx_runtime6.jsx)(import_lucide_react2.ChevronDown, { className: "h-4 w-4 opacity-50" }) })
4591
+ ]
4592
+ })
4593
+ );
4594
+ });
4595
+ SelectTrigger.displayName = SelectPrimitive.Trigger.displayName;
4596
+ var SelectScrollUpButton = React5.forwardRef((_a, ref) => {
4597
+ var _b = _a, { className } = _b, props = __objRest(_b, ["className"]);
4598
+ return /* @__PURE__ */ (0, import_jsx_runtime6.jsx)(
4599
+ SelectPrimitive.ScrollUpButton,
4600
+ __spreadProps(__spreadValues({
4601
+ ref,
4602
+ className: cn(
4603
+ "flex cursor-default items-center justify-center py-1",
4604
+ className
4605
+ )
4606
+ }, props), {
4607
+ children: /* @__PURE__ */ (0, import_jsx_runtime6.jsx)(import_lucide_react2.ChevronUp, { className: "h-4 w-4" })
4608
+ })
4609
+ );
4610
+ });
4611
+ SelectScrollUpButton.displayName = SelectPrimitive.ScrollUpButton.displayName;
4612
+ var SelectScrollDownButton = React5.forwardRef((_a, ref) => {
4613
+ var _b = _a, { className } = _b, props = __objRest(_b, ["className"]);
4614
+ return /* @__PURE__ */ (0, import_jsx_runtime6.jsx)(
4615
+ SelectPrimitive.ScrollDownButton,
4616
+ __spreadProps(__spreadValues({
4617
+ ref,
4618
+ className: cn(
4619
+ "flex cursor-default items-center justify-center py-1",
4620
+ className
4621
+ )
4622
+ }, props), {
4623
+ children: /* @__PURE__ */ (0, import_jsx_runtime6.jsx)(import_lucide_react2.ChevronDown, { className: "h-4 w-4" })
4624
+ })
4625
+ );
4626
+ });
4627
+ SelectScrollDownButton.displayName = SelectPrimitive.ScrollDownButton.displayName;
4628
+ var SelectContent = React5.forwardRef((_a, ref) => {
4629
+ var _b = _a, { className, children, position = "popper" } = _b, props = __objRest(_b, ["className", "children", "position"]);
4630
+ return /* @__PURE__ */ (0, import_jsx_runtime6.jsx)(SelectPrimitive.Portal, { children: /* @__PURE__ */ (0, import_jsx_runtime6.jsxs)(
4631
+ SelectPrimitive.Content,
4632
+ __spreadProps(__spreadValues({
4633
+ ref,
4634
+ className: cn(
4635
+ "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]",
4636
+ 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",
4637
+ className
4638
+ ),
4639
+ position
4640
+ }, props), {
4641
+ children: [
4642
+ /* @__PURE__ */ (0, import_jsx_runtime6.jsx)(SelectScrollUpButton, {}),
4643
+ /* @__PURE__ */ (0, import_jsx_runtime6.jsx)(
4644
+ SelectPrimitive.Viewport,
4645
+ {
4646
+ className: cn(
4647
+ "p-1",
4648
+ position === "popper" && "h-[var(--radix-select-trigger-height)] w-full min-w-[var(--radix-select-trigger-width)]"
4649
+ ),
4650
+ children
4651
+ }
4652
+ ),
4653
+ /* @__PURE__ */ (0, import_jsx_runtime6.jsx)(SelectScrollDownButton, {})
4654
+ ]
4655
+ })
4656
+ ) });
4657
+ });
4658
+ SelectContent.displayName = SelectPrimitive.Content.displayName;
4659
+ var SelectLabel = React5.forwardRef((_a, ref) => {
4660
+ var _b = _a, { className } = _b, props = __objRest(_b, ["className"]);
4661
+ return /* @__PURE__ */ (0, import_jsx_runtime6.jsx)(
4662
+ SelectPrimitive.Label,
4663
+ __spreadValues({
4664
+ ref,
4665
+ className: cn("px-2 py-1.5 text-sm font-semibold", className)
4666
+ }, props)
4667
+ );
4668
+ });
4669
+ SelectLabel.displayName = SelectPrimitive.Label.displayName;
4670
+ var SelectItem = React5.forwardRef((_a, ref) => {
4671
+ var _b = _a, { className, children } = _b, props = __objRest(_b, ["className", "children"]);
4672
+ return /* @__PURE__ */ (0, import_jsx_runtime6.jsxs)(
4673
+ SelectPrimitive.Item,
4674
+ __spreadProps(__spreadValues({
4675
+ ref,
4676
+ className: cn(
4677
+ "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",
4678
+ className
4679
+ )
4680
+ }, props), {
4681
+ children: [
4682
+ /* @__PURE__ */ (0, import_jsx_runtime6.jsx)("span", { className: "absolute right-2 flex h-3.5 w-3.5 items-center justify-center", children: /* @__PURE__ */ (0, import_jsx_runtime6.jsx)(SelectPrimitive.ItemIndicator, { children: /* @__PURE__ */ (0, import_jsx_runtime6.jsx)(import_lucide_react2.Check, { className: "h-4 w-4" }) }) }),
4683
+ /* @__PURE__ */ (0, import_jsx_runtime6.jsx)(SelectPrimitive.ItemText, { children })
4684
+ ]
4685
+ })
4686
+ );
4687
+ });
4688
+ SelectItem.displayName = SelectPrimitive.Item.displayName;
4689
+ var SelectSeparator = React5.forwardRef((_a, ref) => {
4690
+ var _b = _a, { className } = _b, props = __objRest(_b, ["className"]);
4691
+ return /* @__PURE__ */ (0, import_jsx_runtime6.jsx)(
4692
+ SelectPrimitive.Separator,
4693
+ __spreadValues({
4694
+ ref,
4695
+ className: cn("-mx-1 my-1 h-px bg-muted", className)
4696
+ }, props)
4697
+ );
4698
+ });
4699
+ SelectSeparator.displayName = SelectPrimitive.Separator.displayName;
4700
+
4701
+ // src/components/ui/input.tsx
4702
+ var React6 = __toESM(require("react"));
4703
+ var import_jsx_runtime7 = require("react/jsx-runtime");
4704
+ var Input = React6.forwardRef(
4705
+ (_a, ref) => {
4706
+ var _b = _a, { className, type } = _b, props = __objRest(_b, ["className", "type"]);
4707
+ return /* @__PURE__ */ (0, import_jsx_runtime7.jsx)(
4708
+ "input",
4709
+ __spreadValues({
4710
+ type,
4711
+ className: cn(
4712
+ "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",
4713
+ className
4714
+ ),
4715
+ ref
4716
+ }, props)
4717
+ );
4718
+ }
4719
+ );
4720
+ Input.displayName = "Input";
4721
+
4722
+ // src/components/I18nProvider.tsx
4723
+ var import_react = require("react");
4724
+
4725
+ // src/lib/i18n.ts
4726
+ var LANGUAGES = {
4727
+ en: { name: "English", dir: "ltr" },
4728
+ es: { name: "Espa\xF1ol", dir: "ltr" },
4729
+ zh: { name: "\u4E2D\u6587", dir: "ltr" },
4730
+ ar: { name: "\u0627\u0644\u0639\u0631\u0628\u064A\u0629", dir: "rtl" },
4731
+ hi: { name: "\u0939\u093F\u0928\u094D\u0926\u0940", dir: "ltr" },
4732
+ fr: { name: "Fran\xE7ais", dir: "ltr" },
4733
+ pt: { name: "Portugu\xEAs", dir: "ltr" },
4734
+ ru: { name: "\u0420\u0443\u0441\u0441\u043A\u0438\u0439", dir: "ltr" },
4735
+ de: { name: "Deutsch", dir: "ltr" },
4736
+ ja: { name: "\u65E5\u672C\u8A9E", dir: "ltr" }
4737
+ };
4738
+ var translations = {
4739
+ en: {
4740
+ // Common
4741
+ add: "Add",
4742
+ edit: "Edit",
4743
+ delete: "Delete",
4744
+ view: "View",
4745
+ save: "Save",
4746
+ cancel: "Cancel",
4747
+ close: "Close",
4748
+ search: "Search",
4749
+ filter: "Filter",
4750
+ sort: "Sort",
4751
+ // Records
4752
+ addRecord: "Add Record",
4753
+ createRecord: "Create Record",
4754
+ editRecord: "Edit Record",
4755
+ deleteRecord: "Delete Record",
4756
+ viewRecord: "View Record",
4757
+ recordDetails: "Record Details",
4758
+ records: "records",
4759
+ of: "of",
4760
+ // Views
4761
+ gridView: "Grid",
4762
+ kanbanView: "Kanban",
4763
+ galleryView: "Gallery",
4764
+ calendarView: "Calendar",
4765
+ formView: "Form",
4766
+ // Fields
4767
+ title: "Title",
4768
+ description: "Description",
4769
+ status: "Status",
4770
+ priority: "Priority",
4771
+ dueDate: "Due Date",
4772
+ completed: "Completed",
4773
+ primary: "Primary",
4774
+ // Actions
4775
+ createNewRecord: "Create New Record",
4776
+ enterDetails: "Enter the details for the new record.",
4777
+ modifyValues: "Modify the values for this record.",
4778
+ viewData: "View the data for this record.",
4779
+ addNewRecord: "Add new record",
4780
+ // Sorting
4781
+ sortBy: "Sort by...",
4782
+ noSorting: "No sorting",
4783
+ ascending: "\u2191 A-Z",
4784
+ descending: "\u2193 Z-A",
4785
+ // Filtering
4786
+ filterBy: "Filter by...",
4787
+ noFilter: "No filter",
4788
+ filterValue: "Filter value...",
4789
+ selectValue: "Select value...",
4790
+ // Operators
4791
+ equals: "=",
4792
+ greater: ">",
4793
+ less: "<",
4794
+ greaterEqual: "\u2265",
4795
+ lessEqual: "\u2264",
4796
+ on: "On",
4797
+ before: "Before",
4798
+ after: "After",
4799
+ yes: "Yes",
4800
+ no: "No",
4801
+ // Messages
4802
+ noDateField: "No date field found in schema. Add a date field to enable Calendar view.",
4803
+ noSelectField: "No select field found in schema. Add a select field to enable Kanban view.",
4804
+ uncategorized: "Uncategorized",
4805
+ untitled: "Untitled",
4806
+ event: "Event",
4807
+ none: "None",
4808
+ today: "Today",
4809
+ weekDays: "Sun,Mon,Tue,Wed,Thu,Fri,Sat",
4810
+ monthNames: "January,February,March,April,May,June,July,August,September,October,November,December"
4811
+ },
4812
+ es: {
4813
+ add: "Agregar",
4814
+ edit: "Editar",
4815
+ delete: "Eliminar",
4816
+ view: "Ver",
4817
+ save: "Guardar",
4818
+ cancel: "Cancelar",
4819
+ close: "Cerrar",
4820
+ search: "Buscar",
4821
+ filter: "Filtrar",
4822
+ sort: "Ordenar",
4823
+ addRecord: "Agregar Registro",
4824
+ createRecord: "Crear Registro",
4825
+ editRecord: "Editar Registro",
4826
+ deleteRecord: "Eliminar Registro",
4827
+ viewRecord: "Ver Registro",
4828
+ recordDetails: "Detalles del Registro",
4829
+ records: "registros",
4830
+ of: "de",
4831
+ gridView: "Cuadr\xEDcula",
4832
+ kanbanView: "Kanban",
4833
+ galleryView: "Galer\xEDa",
4834
+ calendarView: "Calendario",
4835
+ formView: "Formulario",
4836
+ title: "T\xEDtulo",
4837
+ description: "Descripci\xF3n",
4838
+ status: "Estado",
4839
+ priority: "Prioridad",
4840
+ dueDate: "Fecha de Vencimiento",
4841
+ completed: "Completado",
4842
+ primary: "Principal",
4843
+ createNewRecord: "Crear Nuevo Registro",
4844
+ enterDetails: "Ingrese los detalles del nuevo registro.",
4845
+ modifyValues: "Modifique los valores de este registro.",
4846
+ viewData: "Ver los datos de este registro.",
4847
+ addNewRecord: "Agregar nuevo registro",
4848
+ sortBy: "Ordenar por...",
4849
+ noSorting: "Sin ordenar",
4850
+ ascending: "\u2191 A-Z",
4851
+ descending: "\u2193 Z-A",
4852
+ filterBy: "Filtrar por...",
4853
+ noFilter: "Sin filtro",
4854
+ filterValue: "Valor del filtro...",
4855
+ selectValue: "Seleccionar valor...",
4856
+ equals: "=",
4857
+ greater: ">",
4858
+ less: "<",
4859
+ greaterEqual: "\u2265",
4860
+ lessEqual: "\u2264",
4861
+ on: "En",
4862
+ before: "Antes",
4863
+ after: "Despu\xE9s",
4864
+ yes: "S\xED",
4865
+ no: "No",
4866
+ noDateField: "No se encontr\xF3 campo de fecha en el esquema. Agregue un campo de fecha para habilitar la vista de Calendario.",
4867
+ noSelectField: "No se encontr\xF3 campo de selecci\xF3n en el esquema. Agregue un campo de selecci\xF3n para habilitar la vista Kanban.",
4868
+ uncategorized: "Sin categor\xEDa",
4869
+ untitled: "Sin t\xEDtulo",
4870
+ event: "Evento",
4871
+ none: "Ninguno",
4872
+ today: "Hoy",
4873
+ weekDays: "Dom,Lun,Mar,Mi\xE9,Jue,Vie,S\xE1b",
4874
+ monthNames: "Enero,Febrero,Marzo,Abril,Mayo,Junio,Julio,Agosto,Septiembre,Octubre,Noviembre,Diciembre"
4875
+ },
4876
+ zh: {
4877
+ add: "\u6DFB\u52A0",
4878
+ edit: "\u7F16\u8F91",
4879
+ delete: "\u5220\u9664",
4880
+ view: "\u67E5\u770B",
4881
+ save: "\u4FDD\u5B58",
4882
+ cancel: "\u53D6\u6D88",
4883
+ close: "\u5173\u95ED",
4884
+ search: "\u641C\u7D22",
4885
+ filter: "\u7B5B\u9009",
4886
+ sort: "\u6392\u5E8F",
4887
+ addRecord: "\u6DFB\u52A0\u8BB0\u5F55",
4888
+ createRecord: "\u521B\u5EFA\u8BB0\u5F55",
4889
+ editRecord: "\u7F16\u8F91\u8BB0\u5F55",
4890
+ deleteRecord: "\u5220\u9664\u8BB0\u5F55",
4891
+ viewRecord: "\u67E5\u770B\u8BB0\u5F55",
4892
+ recordDetails: "\u8BB0\u5F55\u8BE6\u60C5",
4893
+ records: "\u6761\u8BB0\u5F55",
4894
+ of: "\u5171",
4895
+ gridView: "\u8868\u683C",
4896
+ kanbanView: "\u770B\u677F",
4897
+ galleryView: "\u753B\u5ECA",
4898
+ calendarView: "\u65E5\u5386",
4899
+ formView: "\u8868\u5355",
4900
+ title: "\u6807\u9898",
4901
+ description: "\u63CF\u8FF0",
4902
+ status: "\u72B6\u6001",
4903
+ priority: "\u4F18\u5148\u7EA7",
4904
+ dueDate: "\u622A\u6B62\u65E5\u671F",
4905
+ completed: "\u5DF2\u5B8C\u6210",
4906
+ primary: "\u4E3B\u8981",
4907
+ createNewRecord: "\u521B\u5EFA\u65B0\u8BB0\u5F55",
4908
+ enterDetails: "\u8F93\u5165\u65B0\u8BB0\u5F55\u7684\u8BE6\u7EC6\u4FE1\u606F\u3002",
4909
+ modifyValues: "\u4FEE\u6539\u6B64\u8BB0\u5F55\u7684\u503C\u3002",
4910
+ viewData: "\u67E5\u770B\u6B64\u8BB0\u5F55\u7684\u6570\u636E\u3002",
4911
+ addNewRecord: "\u6DFB\u52A0\u65B0\u8BB0\u5F55",
4912
+ sortBy: "\u6392\u5E8F\u65B9\u5F0F...",
4913
+ noSorting: "\u4E0D\u6392\u5E8F",
4914
+ ascending: "\u2191 A-Z",
4915
+ descending: "\u2193 Z-A",
4916
+ filterBy: "\u7B5B\u9009\u6761\u4EF6...",
4917
+ noFilter: "\u65E0\u7B5B\u9009",
4918
+ filterValue: "\u7B5B\u9009\u503C...",
4919
+ selectValue: "\u9009\u62E9\u503C...",
4920
+ equals: "=",
4921
+ greater: ">",
4922
+ less: "<",
4923
+ greaterEqual: "\u2265",
4924
+ lessEqual: "\u2264",
4925
+ on: "\u5728",
4926
+ before: "\u4E4B\u524D",
4927
+ after: "\u4E4B\u540E",
4928
+ yes: "\u662F",
4929
+ no: "\u5426",
4930
+ 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",
4931
+ 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",
4932
+ uncategorized: "\u672A\u5206\u7C7B",
4933
+ untitled: "\u65E0\u6807\u9898",
4934
+ event: "\u4E8B\u4EF6",
4935
+ none: "\u65E0",
4936
+ today: "\u4ECA\u5929",
4937
+ weekDays: "\u65E5,\u4E00,\u4E8C,\u4E09,\u56DB,\u4E94,\u516D",
4938
+ 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"
4939
+ },
4940
+ ar: {
4941
+ add: "\u0625\u0636\u0627\u0641\u0629",
4942
+ edit: "\u062A\u0639\u062F\u064A\u0644",
4943
+ delete: "\u062D\u0630\u0641",
4944
+ view: "\u0639\u0631\u0636",
4945
+ save: "\u062D\u0641\u0638",
4946
+ cancel: "\u0625\u0644\u063A\u0627\u0621",
4947
+ close: "\u0625\u063A\u0644\u0627\u0642",
4948
+ search: "\u0628\u062D\u062B",
4949
+ filter: "\u062A\u0635\u0641\u064A\u0629",
4950
+ sort: "\u062A\u0631\u062A\u064A\u0628",
4951
+ addRecord: "\u0625\u0636\u0627\u0641\u0629 \u0633\u062C\u0644",
4952
+ createRecord: "\u0625\u0646\u0634\u0627\u0621 \u0633\u062C\u0644",
4953
+ editRecord: "\u062A\u0639\u062F\u064A\u0644 \u0627\u0644\u0633\u062C\u0644",
4954
+ deleteRecord: "\u062D\u0630\u0641 \u0627\u0644\u0633\u062C\u0644",
4955
+ viewRecord: "\u0639\u0631\u0636 \u0627\u0644\u0633\u062C\u0644",
4956
+ recordDetails: "\u062A\u0641\u0627\u0635\u064A\u0644 \u0627\u0644\u0633\u062C\u0644",
4957
+ records: "\u0633\u062C\u0644\u0627\u062A",
4958
+ of: "\u0645\u0646",
4959
+ gridView: "\u0634\u0628\u0643\u0629",
4960
+ kanbanView: "\u0643\u0627\u0646\u0628\u0627\u0646",
4961
+ galleryView: "\u0645\u0639\u0631\u0636",
4962
+ calendarView: "\u062A\u0642\u0648\u064A\u0645",
4963
+ formView: "\u0646\u0645\u0648\u0630\u062C",
4964
+ title: "\u0627\u0644\u0639\u0646\u0648\u0627\u0646",
4965
+ description: "\u0627\u0644\u0648\u0635\u0641",
4966
+ status: "\u0627\u0644\u062D\u0627\u0644\u0629",
4967
+ priority: "\u0627\u0644\u0623\u0648\u0644\u0648\u064A\u0629",
4968
+ dueDate: "\u062A\u0627\u0631\u064A\u062E \u0627\u0644\u0627\u0633\u062A\u062D\u0642\u0627\u0642",
4969
+ completed: "\u0645\u0643\u062A\u0645\u0644",
4970
+ primary: "\u0623\u0633\u0627\u0633\u064A",
4971
+ createNewRecord: "\u0625\u0646\u0634\u0627\u0621 \u0633\u062C\u0644 \u062C\u062F\u064A\u062F",
4972
+ enterDetails: "\u0623\u062F\u062E\u0644 \u062A\u0641\u0627\u0635\u064A\u0644 \u0627\u0644\u0633\u062C\u0644 \u0627\u0644\u062C\u062F\u064A\u062F.",
4973
+ modifyValues: "\u062A\u0639\u062F\u064A\u0644 \u0642\u064A\u0645 \u0647\u0630\u0627 \u0627\u0644\u0633\u062C\u0644.",
4974
+ viewData: "\u0639\u0631\u0636 \u0628\u064A\u0627\u0646\u0627\u062A \u0647\u0630\u0627 \u0627\u0644\u0633\u062C\u0644.",
4975
+ addNewRecord: "\u0625\u0636\u0627\u0641\u0629 \u0633\u062C\u0644 \u062C\u062F\u064A\u062F",
4976
+ sortBy: "\u062A\u0631\u062A\u064A\u0628 \u062D\u0633\u0628...",
4977
+ noSorting: "\u0628\u062F\u0648\u0646 \u062A\u0631\u062A\u064A\u0628",
4978
+ ascending: "\u2191 \u0623-\u064A",
4979
+ descending: "\u2193 \u064A-\u0623",
4980
+ filterBy: "\u062A\u0635\u0641\u064A\u0629 \u062D\u0633\u0628...",
4981
+ noFilter: "\u0628\u062F\u0648\u0646 \u062A\u0635\u0641\u064A\u0629",
4982
+ filterValue: "\u0642\u064A\u0645\u0629 \u0627\u0644\u062A\u0635\u0641\u064A\u0629...",
4983
+ selectValue: "\u0627\u062E\u062A\u0631 \u0642\u064A\u0645\u0629...",
4984
+ equals: "=",
4985
+ greater: ">",
4986
+ less: "<",
4987
+ greaterEqual: "\u2265",
4988
+ lessEqual: "\u2264",
4989
+ on: "\u0641\u064A",
4990
+ before: "\u0642\u0628\u0644",
4991
+ after: "\u0628\u0639\u062F",
4992
+ yes: "\u0646\u0639\u0645",
4993
+ no: "\u0644\u0627",
4994
+ 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.",
4995
+ 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.",
4996
+ uncategorized: "\u063A\u064A\u0631 \u0645\u0635\u0646\u0641",
4997
+ untitled: "\u0628\u062F\u0648\u0646 \u0639\u0646\u0648\u0627\u0646",
4998
+ event: "\u062D\u062F\u062B",
4999
+ none: "\u0644\u0627 \u0634\u064A\u0621",
5000
+ today: "\u0627\u0644\u064A\u0648\u0645",
5001
+ 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",
5002
+ 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"
5003
+ },
5004
+ hi: {
5005
+ add: "\u091C\u094B\u0921\u093C\u0947\u0902",
5006
+ edit: "\u0938\u0902\u092A\u093E\u0926\u093F\u0924 \u0915\u0930\u0947\u0902",
5007
+ delete: "\u0939\u091F\u093E\u090F\u0902",
5008
+ view: "\u0926\u0947\u0916\u0947\u0902",
5009
+ save: "\u0938\u0939\u0947\u091C\u0947\u0902",
5010
+ cancel: "\u0930\u0926\u094D\u0926 \u0915\u0930\u0947\u0902",
5011
+ close: "\u092C\u0902\u0926 \u0915\u0930\u0947\u0902",
5012
+ search: "\u0916\u094B\u091C\u0947\u0902",
5013
+ filter: "\u092B\u093C\u093F\u0932\u094D\u091F\u0930",
5014
+ sort: "\u0915\u094D\u0930\u092E\u092C\u0926\u094D\u0927 \u0915\u0930\u0947\u0902",
5015
+ addRecord: "\u0930\u093F\u0915\u0949\u0930\u094D\u0921 \u091C\u094B\u0921\u093C\u0947\u0902",
5016
+ createRecord: "\u0930\u093F\u0915\u0949\u0930\u094D\u0921 \u092C\u0928\u093E\u090F\u0902",
5017
+ editRecord: "\u0930\u093F\u0915\u0949\u0930\u094D\u0921 \u0938\u0902\u092A\u093E\u0926\u093F\u0924 \u0915\u0930\u0947\u0902",
5018
+ deleteRecord: "\u0930\u093F\u0915\u0949\u0930\u094D\u0921 \u0939\u091F\u093E\u090F\u0902",
5019
+ viewRecord: "\u0930\u093F\u0915\u0949\u0930\u094D\u0921 \u0926\u0947\u0916\u0947\u0902",
5020
+ recordDetails: "\u0930\u093F\u0915\u0949\u0930\u094D\u0921 \u0935\u093F\u0935\u0930\u0923",
5021
+ records: "\u0930\u093F\u0915\u0949\u0930\u094D\u0921",
5022
+ of: "\u092E\u0947\u0902 \u0938\u0947",
5023
+ gridView: "\u0917\u094D\u0930\u093F\u0921",
5024
+ kanbanView: "\u0915\u093E\u0928\u092C\u093E\u0928",
5025
+ galleryView: "\u0917\u0948\u0932\u0930\u0940",
5026
+ calendarView: "\u0915\u0948\u0932\u0947\u0902\u0921\u0930",
5027
+ formView: "\u092B\u0949\u0930\u094D\u092E",
5028
+ title: "\u0936\u0940\u0930\u094D\u0937\u0915",
5029
+ description: "\u0935\u093F\u0935\u0930\u0923",
5030
+ status: "\u0938\u094D\u0925\u093F\u0924\u093F",
5031
+ priority: "\u092A\u094D\u0930\u093E\u0925\u092E\u093F\u0915\u0924\u093E",
5032
+ dueDate: "\u0928\u093F\u092F\u0924 \u0924\u093E\u0930\u0940\u0916",
5033
+ completed: "\u092A\u0942\u0930\u094D\u0923",
5034
+ primary: "\u092A\u094D\u0930\u093E\u0925\u092E\u093F\u0915",
5035
+ createNewRecord: "\u0928\u092F\u093E \u0930\u093F\u0915\u0949\u0930\u094D\u0921 \u092C\u0928\u093E\u090F\u0902",
5036
+ 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",
5037
+ 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",
5038
+ viewData: "\u0907\u0938 \u0930\u093F\u0915\u0949\u0930\u094D\u0921 \u0915\u093E \u0921\u0947\u091F\u093E \u0926\u0947\u0916\u0947\u0902\u0964",
5039
+ addNewRecord: "\u0928\u092F\u093E \u0930\u093F\u0915\u0949\u0930\u094D\u0921 \u091C\u094B\u0921\u093C\u0947\u0902",
5040
+ sortBy: "\u0907\u0938\u0915\u0947 \u0905\u0928\u0941\u0938\u093E\u0930 \u0915\u094D\u0930\u092E\u092C\u0926\u094D\u0927 \u0915\u0930\u0947\u0902...",
5041
+ noSorting: "\u0915\u094B\u0908 \u0915\u094D\u0930\u092E\u092C\u0926\u094D\u0927\u0924\u093E \u0928\u0939\u0940\u0902",
5042
+ ascending: "\u2191 \u0905-\u0939",
5043
+ descending: "\u2193 \u0939-\u0905",
5044
+ filterBy: "\u0907\u0938\u0915\u0947 \u0905\u0928\u0941\u0938\u093E\u0930 \u092B\u093C\u093F\u0932\u094D\u091F\u0930 \u0915\u0930\u0947\u0902...",
5045
+ noFilter: "\u0915\u094B\u0908 \u092B\u093C\u093F\u0932\u094D\u091F\u0930 \u0928\u0939\u0940\u0902",
5046
+ filterValue: "\u092B\u093C\u093F\u0932\u094D\u091F\u0930 \u092E\u093E\u0928...",
5047
+ selectValue: "\u092E\u093E\u0928 \u091A\u0941\u0928\u0947\u0902...",
5048
+ equals: "=",
5049
+ greater: ">",
5050
+ less: "<",
5051
+ greaterEqual: "\u2265",
5052
+ lessEqual: "\u2264",
5053
+ on: "\u092A\u0930",
5054
+ before: "\u092A\u0939\u0932\u0947",
5055
+ after: "\u092C\u093E\u0926 \u092E\u0947\u0902",
5056
+ yes: "\u0939\u093E\u0902",
5057
+ no: "\u0928\u0939\u0940\u0902",
5058
+ 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",
5059
+ 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",
5060
+ uncategorized: "\u0905\u0935\u0930\u094D\u0917\u0940\u0915\u0943\u0924",
5061
+ untitled: "\u0936\u0940\u0930\u094D\u0937\u0915\u0939\u0940\u0928",
5062
+ event: "\u0918\u091F\u0928\u093E",
5063
+ none: "\u0915\u094B\u0908 \u0928\u0939\u0940\u0902",
5064
+ today: "\u0906\u091C",
5065
+ 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",
5066
+ 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"
5067
+ },
5068
+ fr: {
5069
+ add: "Ajouter",
5070
+ edit: "Modifier",
5071
+ delete: "Supprimer",
5072
+ view: "Voir",
5073
+ save: "Enregistrer",
5074
+ cancel: "Annuler",
5075
+ close: "Fermer",
5076
+ search: "Rechercher",
5077
+ filter: "Filtrer",
5078
+ sort: "Trier",
5079
+ addRecord: "Ajouter un Enregistrement",
5080
+ createRecord: "Cr\xE9er un Enregistrement",
5081
+ editRecord: "Modifier l'Enregistrement",
5082
+ deleteRecord: "Supprimer l'Enregistrement",
5083
+ viewRecord: "Voir l'Enregistrement",
5084
+ recordDetails: "D\xE9tails de l'Enregistrement",
5085
+ records: "enregistrements",
5086
+ of: "sur",
5087
+ gridView: "Grille",
5088
+ kanbanView: "Kanban",
5089
+ galleryView: "Galerie",
5090
+ calendarView: "Calendrier",
5091
+ formView: "Formulaire",
5092
+ title: "Titre",
5093
+ description: "Description",
5094
+ status: "Statut",
5095
+ priority: "Priorit\xE9",
5096
+ dueDate: "Date d'\xC9ch\xE9ance",
5097
+ completed: "Termin\xE9",
5098
+ primary: "Principal",
5099
+ createNewRecord: "Cr\xE9er un Nouvel Enregistrement",
5100
+ enterDetails: "Entrez les d\xE9tails du nouvel enregistrement.",
5101
+ modifyValues: "Modifiez les valeurs de cet enregistrement.",
5102
+ viewData: "Voir les donn\xE9es de cet enregistrement.",
5103
+ addNewRecord: "Ajouter un nouvel enregistrement",
5104
+ sortBy: "Trier par...",
5105
+ noSorting: "Aucun tri",
5106
+ ascending: "\u2191 A-Z",
5107
+ descending: "\u2193 Z-A",
5108
+ filterBy: "Filtrer par...",
5109
+ noFilter: "Aucun filtre",
5110
+ filterValue: "Valeur du filtre...",
5111
+ selectValue: "S\xE9lectionner une valeur...",
5112
+ equals: "=",
5113
+ greater: ">",
5114
+ less: "<",
5115
+ greaterEqual: "\u2265",
5116
+ lessEqual: "\u2264",
5117
+ on: "Le",
5118
+ before: "Avant",
5119
+ after: "Apr\xE8s",
5120
+ yes: "Oui",
5121
+ no: "Non",
5122
+ noDateField: "Aucun champ de date trouv\xE9 dans le sch\xE9ma. Ajoutez un champ de date pour activer la vue Calendrier.",
5123
+ noSelectField: "Aucun champ de s\xE9lection trouv\xE9 dans le sch\xE9ma. Ajoutez un champ de s\xE9lection pour activer la vue Kanban.",
5124
+ uncategorized: "Non cat\xE9goris\xE9",
5125
+ untitled: "Sans titre",
5126
+ event: "\xC9v\xE9nement",
5127
+ none: "Aucun",
5128
+ today: "Aujourd'hui",
5129
+ weekDays: "Dim,Lun,Mar,Mer,Jeu,Ven,Sam",
5130
+ monthNames: "Janvier,F\xE9vrier,Mars,Avril,Mai,Juin,Juillet,Ao\xFBt,Septembre,Octobre,Novembre,D\xE9cembre"
5131
+ },
5132
+ pt: {
5133
+ add: "Adicionar",
5134
+ edit: "Editar",
5135
+ delete: "Excluir",
5136
+ view: "Visualizar",
5137
+ save: "Salvar",
5138
+ cancel: "Cancelar",
5139
+ close: "Fechar",
5140
+ search: "Pesquisar",
5141
+ filter: "Filtrar",
5142
+ sort: "Ordenar",
5143
+ addRecord: "Adicionar Registro",
5144
+ createRecord: "Criar Registro",
5145
+ editRecord: "Editar Registro",
5146
+ deleteRecord: "Excluir Registro",
5147
+ viewRecord: "Visualizar Registro",
5148
+ recordDetails: "Detalhes do Registro",
5149
+ records: "registros",
5150
+ of: "de",
5151
+ gridView: "Grade",
5152
+ kanbanView: "Kanban",
5153
+ galleryView: "Galeria",
5154
+ calendarView: "Calend\xE1rio",
5155
+ formView: "Formul\xE1rio",
5156
+ title: "T\xEDtulo",
5157
+ description: "Descri\xE7\xE3o",
5158
+ status: "Status",
5159
+ priority: "Prioridade",
5160
+ dueDate: "Data de Vencimento",
5161
+ completed: "Conclu\xEDdo",
5162
+ primary: "Principal",
5163
+ createNewRecord: "Criar Novo Registro",
5164
+ enterDetails: "Insira os detalhes do novo registro.",
5165
+ modifyValues: "Modifique os valores deste registro.",
5166
+ viewData: "Visualize os dados deste registro.",
5167
+ addNewRecord: "Adicionar novo registro",
5168
+ sortBy: "Ordenar por...",
5169
+ noSorting: "Sem ordena\xE7\xE3o",
5170
+ ascending: "\u2191 A-Z",
5171
+ descending: "\u2193 Z-A",
5172
+ filterBy: "Filtrar por...",
5173
+ noFilter: "Sem filtro",
5174
+ filterValue: "Valor do filtro...",
5175
+ selectValue: "Selecionar valor...",
5176
+ equals: "=",
5177
+ greater: ">",
5178
+ less: "<",
5179
+ greaterEqual: "\u2265",
5180
+ lessEqual: "\u2264",
5181
+ on: "Em",
5182
+ before: "Antes",
5183
+ after: "Depois",
5184
+ yes: "Sim",
5185
+ no: "N\xE3o",
5186
+ noDateField: "Nenhum campo de data encontrado no esquema. Adicione um campo de data para ativar a visualiza\xE7\xE3o de Calend\xE1rio.",
5187
+ noSelectField: "Nenhum campo de sele\xE7\xE3o encontrado no esquema. Adicione um campo de sele\xE7\xE3o para ativar a visualiza\xE7\xE3o Kanban.",
5188
+ uncategorized: "Sem categoria",
5189
+ untitled: "Sem t\xEDtulo",
5190
+ event: "Evento",
5191
+ none: "Nenhum",
5192
+ today: "Hoje",
5193
+ weekDays: "Dom,Seg,Ter,Qua,Qui,Sex,S\xE1b",
5194
+ monthNames: "Janeiro,Fevereiro,Mar\xE7o,Abril,Maio,Junho,Julho,Agosto,Setembro,Outubro,Novembro,Dezembro"
5195
+ },
5196
+ ru: {
5197
+ add: "\u0414\u043E\u0431\u0430\u0432\u0438\u0442\u044C",
5198
+ edit: "\u0420\u0435\u0434\u0430\u043A\u0442\u0438\u0440\u043E\u0432\u0430\u0442\u044C",
5199
+ delete: "\u0423\u0434\u0430\u043B\u0438\u0442\u044C",
5200
+ view: "\u041F\u0440\u043E\u0441\u043C\u043E\u0442\u0440",
5201
+ save: "\u0421\u043E\u0445\u0440\u0430\u043D\u0438\u0442\u044C",
5202
+ cancel: "\u041E\u0442\u043C\u0435\u043D\u0430",
5203
+ close: "\u0417\u0430\u043A\u0440\u044B\u0442\u044C",
5204
+ search: "\u041F\u043E\u0438\u0441\u043A",
5205
+ filter: "\u0424\u0438\u043B\u044C\u0442\u0440",
5206
+ sort: "\u0421\u043E\u0440\u0442\u0438\u0440\u043E\u0432\u043A\u0430",
5207
+ addRecord: "\u0414\u043E\u0431\u0430\u0432\u0438\u0442\u044C \u0417\u0430\u043F\u0438\u0441\u044C",
5208
+ createRecord: "\u0421\u043E\u0437\u0434\u0430\u0442\u044C \u0417\u0430\u043F\u0438\u0441\u044C",
5209
+ editRecord: "\u0420\u0435\u0434\u0430\u043A\u0442\u0438\u0440\u043E\u0432\u0430\u0442\u044C \u0417\u0430\u043F\u0438\u0441\u044C",
5210
+ deleteRecord: "\u0423\u0434\u0430\u043B\u0438\u0442\u044C \u0417\u0430\u043F\u0438\u0441\u044C",
5211
+ viewRecord: "\u041F\u0440\u043E\u0441\u043C\u043E\u0442\u0440 \u0417\u0430\u043F\u0438\u0441\u0438",
5212
+ recordDetails: "\u0414\u0435\u0442\u0430\u043B\u0438 \u0417\u0430\u043F\u0438\u0441\u0438",
5213
+ records: "\u0437\u0430\u043F\u0438\u0441\u0435\u0439",
5214
+ of: "\u0438\u0437",
5215
+ gridView: "\u0421\u0435\u0442\u043A\u0430",
5216
+ kanbanView: "\u041A\u0430\u043D\u0431\u0430\u043D",
5217
+ galleryView: "\u0413\u0430\u043B\u0435\u0440\u0435\u044F",
5218
+ calendarView: "\u041A\u0430\u043B\u0435\u043D\u0434\u0430\u0440\u044C",
5219
+ formView: "\u0424\u043E\u0440\u043C\u0430",
5220
+ title: "\u0417\u0430\u0433\u043E\u043B\u043E\u0432\u043E\u043A",
5221
+ description: "\u041E\u043F\u0438\u0441\u0430\u043D\u0438\u0435",
5222
+ status: "\u0421\u0442\u0430\u0442\u0443\u0441",
5223
+ priority: "\u041F\u0440\u0438\u043E\u0440\u0438\u0442\u0435\u0442",
5224
+ dueDate: "\u0421\u0440\u043E\u043A",
5225
+ completed: "\u0417\u0430\u0432\u0435\u0440\u0448\u0435\u043D\u043E",
5226
+ primary: "\u041E\u0441\u043D\u043E\u0432\u043D\u043E\u0439",
5227
+ createNewRecord: "\u0421\u043E\u0437\u0434\u0430\u0442\u044C \u041D\u043E\u0432\u0443\u044E \u0417\u0430\u043F\u0438\u0441\u044C",
5228
+ 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.",
5229
+ 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.",
5230
+ 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.",
5231
+ addNewRecord: "\u0414\u043E\u0431\u0430\u0432\u0438\u0442\u044C \u043D\u043E\u0432\u0443\u044E \u0437\u0430\u043F\u0438\u0441\u044C",
5232
+ sortBy: "\u0421\u043E\u0440\u0442\u0438\u0440\u043E\u0432\u0430\u0442\u044C \u043F\u043E...",
5233
+ noSorting: "\u0411\u0435\u0437 \u0441\u043E\u0440\u0442\u0438\u0440\u043E\u0432\u043A\u0438",
5234
+ ascending: "\u2191 \u0410-\u042F",
5235
+ descending: "\u2193 \u042F-\u0410",
5236
+ filterBy: "\u0424\u0438\u043B\u044C\u0442\u0440\u043E\u0432\u0430\u0442\u044C \u043F\u043E...",
5237
+ noFilter: "\u0411\u0435\u0437 \u0444\u0438\u043B\u044C\u0442\u0440\u0430",
5238
+ filterValue: "\u0417\u043D\u0430\u0447\u0435\u043D\u0438\u0435 \u0444\u0438\u043B\u044C\u0442\u0440\u0430...",
5239
+ selectValue: "\u0412\u044B\u0431\u0440\u0430\u0442\u044C \u0437\u043D\u0430\u0447\u0435\u043D\u0438\u0435...",
5240
+ equals: "=",
5241
+ greater: ">",
5242
+ less: "<",
5243
+ greaterEqual: "\u2265",
5244
+ lessEqual: "\u2264",
5245
+ on: "\u0412",
5246
+ before: "\u0414\u043E",
5247
+ after: "\u041F\u043E\u0441\u043B\u0435",
5248
+ yes: "\u0414\u0430",
5249
+ no: "\u041D\u0435\u0442",
5250
+ 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.",
5251
+ 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.",
5252
+ uncategorized: "\u0411\u0435\u0437 \u043A\u0430\u0442\u0435\u0433\u043E\u0440\u0438\u0438",
5253
+ untitled: "\u0411\u0435\u0437 \u043D\u0430\u0437\u0432\u0430\u043D\u0438\u044F",
5254
+ event: "\u0421\u043E\u0431\u044B\u0442\u0438\u0435",
5255
+ none: "\u041D\u0435\u0442",
5256
+ today: "\u0421\u0435\u0433\u043E\u0434\u043D\u044F",
5257
+ weekDays: "\u0412\u0441,\u041F\u043D,\u0412\u0442,\u0421\u0440,\u0427\u0442,\u041F\u0442,\u0421\u0431",
5258
+ 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"
5259
+ },
5260
+ de: {
5261
+ add: "Hinzuf\xFCgen",
5262
+ edit: "Bearbeiten",
5263
+ delete: "L\xF6schen",
5264
+ view: "Ansehen",
5265
+ save: "Speichern",
5266
+ cancel: "Abbrechen",
5267
+ close: "Schlie\xDFen",
5268
+ search: "Suchen",
5269
+ filter: "Filtern",
5270
+ sort: "Sortieren",
5271
+ addRecord: "Datensatz Hinzuf\xFCgen",
5272
+ createRecord: "Datensatz Erstellen",
5273
+ editRecord: "Datensatz Bearbeiten",
5274
+ deleteRecord: "Datensatz L\xF6schen",
5275
+ viewRecord: "Datensatz Ansehen",
5276
+ recordDetails: "Datensatz-Details",
5277
+ records: "Datens\xE4tze",
5278
+ of: "von",
5279
+ gridView: "Raster",
5280
+ kanbanView: "Kanban",
5281
+ galleryView: "Galerie",
5282
+ calendarView: "Kalender",
5283
+ formView: "Formular",
5284
+ title: "Titel",
5285
+ description: "Beschreibung",
5286
+ status: "Status",
5287
+ priority: "Priorit\xE4t",
5288
+ dueDate: "F\xE4lligkeitsdatum",
5289
+ completed: "Abgeschlossen",
5290
+ primary: "Prim\xE4r",
5291
+ createNewRecord: "Neuen Datensatz Erstellen",
5292
+ enterDetails: "Geben Sie die Details f\xFCr den neuen Datensatz ein.",
5293
+ modifyValues: "\xC4ndern Sie die Werte f\xFCr diesen Datensatz.",
5294
+ viewData: "Sehen Sie sich die Daten f\xFCr diesen Datensatz an.",
5295
+ addNewRecord: "Neuen Datensatz hinzuf\xFCgen",
5296
+ sortBy: "Sortieren nach...",
5297
+ noSorting: "Keine Sortierung",
5298
+ ascending: "\u2191 A-Z",
5299
+ descending: "\u2193 Z-A",
5300
+ filterBy: "Filtern nach...",
5301
+ noFilter: "Kein Filter",
5302
+ filterValue: "Filterwert...",
5303
+ selectValue: "Wert ausw\xE4hlen...",
5304
+ equals: "=",
5305
+ greater: ">",
5306
+ less: "<",
5307
+ greaterEqual: "\u2265",
5308
+ lessEqual: "\u2264",
5309
+ on: "Am",
5310
+ before: "Vor",
5311
+ after: "Nach",
5312
+ yes: "Ja",
5313
+ no: "Nein",
5314
+ noDateField: "Kein Datumsfeld im Schema gefunden. F\xFCgen Sie ein Datumsfeld hinzu, um die Kalenderansicht zu aktivieren.",
5315
+ noSelectField: "Kein Auswahlfeld im Schema gefunden. F\xFCgen Sie ein Auswahlfeld hinzu, um die Kanban-Ansicht zu aktivieren.",
5316
+ uncategorized: "Unkategorisiert",
5317
+ untitled: "Ohne Titel",
5318
+ event: "Ereignis",
5319
+ none: "Keine",
5320
+ today: "Heute",
5321
+ weekDays: "So,Mo,Di,Mi,Do,Fr,Sa",
5322
+ monthNames: "Januar,Februar,M\xE4rz,April,Mai,Juni,Juli,August,September,Oktober,November,Dezember"
5323
+ },
5324
+ ja: {
5325
+ add: "\u8FFD\u52A0",
5326
+ edit: "\u7DE8\u96C6",
5327
+ delete: "\u524A\u9664",
5328
+ view: "\u8868\u793A",
5329
+ save: "\u4FDD\u5B58",
5330
+ cancel: "\u30AD\u30E3\u30F3\u30BB\u30EB",
5331
+ close: "\u9589\u3058\u308B",
5332
+ search: "\u691C\u7D22",
5333
+ filter: "\u30D5\u30A3\u30EB\u30BF\u30FC",
5334
+ sort: "\u4E26\u3079\u66FF\u3048",
5335
+ addRecord: "\u30EC\u30B3\u30FC\u30C9\u3092\u8FFD\u52A0",
5336
+ createRecord: "\u30EC\u30B3\u30FC\u30C9\u3092\u4F5C\u6210",
5337
+ editRecord: "\u30EC\u30B3\u30FC\u30C9\u3092\u7DE8\u96C6",
5338
+ deleteRecord: "\u30EC\u30B3\u30FC\u30C9\u3092\u524A\u9664",
5339
+ viewRecord: "\u30EC\u30B3\u30FC\u30C9\u3092\u8868\u793A",
5340
+ recordDetails: "\u30EC\u30B3\u30FC\u30C9\u306E\u8A73\u7D30",
5341
+ records: "\u4EF6\u306E\u30EC\u30B3\u30FC\u30C9",
5342
+ of: "/",
5343
+ gridView: "\u30B0\u30EA\u30C3\u30C9",
5344
+ kanbanView: "\u30AB\u30F3\u30D0\u30F3",
5345
+ galleryView: "\u30AE\u30E3\u30E9\u30EA\u30FC",
5346
+ calendarView: "\u30AB\u30EC\u30F3\u30C0\u30FC",
5347
+ formView: "\u30D5\u30A9\u30FC\u30E0",
5348
+ title: "\u30BF\u30A4\u30C8\u30EB",
5349
+ description: "\u8AAC\u660E",
5350
+ status: "\u30B9\u30C6\u30FC\u30BF\u30B9",
5351
+ priority: "\u512A\u5148\u5EA6",
5352
+ dueDate: "\u671F\u9650",
5353
+ completed: "\u5B8C\u4E86",
5354
+ primary: "\u30D7\u30E9\u30A4\u30DE\u30EA",
5355
+ createNewRecord: "\u65B0\u3057\u3044\u30EC\u30B3\u30FC\u30C9\u3092\u4F5C\u6210",
5356
+ enterDetails: "\u65B0\u3057\u3044\u30EC\u30B3\u30FC\u30C9\u306E\u8A73\u7D30\u3092\u5165\u529B\u3057\u3066\u304F\u3060\u3055\u3044\u3002",
5357
+ modifyValues: "\u3053\u306E\u30EC\u30B3\u30FC\u30C9\u306E\u5024\u3092\u5909\u66F4\u3057\u3066\u304F\u3060\u3055\u3044\u3002",
5358
+ viewData: "\u3053\u306E\u30EC\u30B3\u30FC\u30C9\u306E\u30C7\u30FC\u30BF\u3092\u8868\u793A\u3057\u307E\u3059\u3002",
5359
+ addNewRecord: "\u65B0\u3057\u3044\u30EC\u30B3\u30FC\u30C9\u3092\u8FFD\u52A0",
5360
+ sortBy: "\u4E26\u3079\u66FF\u3048...",
5361
+ noSorting: "\u4E26\u3079\u66FF\u3048\u306A\u3057",
5362
+ ascending: "\u2191 \u3042-\u3093",
5363
+ descending: "\u2193 \u3093-\u3042",
5364
+ filterBy: "\u30D5\u30A3\u30EB\u30BF\u30FC...",
5365
+ noFilter: "\u30D5\u30A3\u30EB\u30BF\u30FC\u306A\u3057",
5366
+ filterValue: "\u30D5\u30A3\u30EB\u30BF\u30FC\u5024...",
5367
+ selectValue: "\u5024\u3092\u9078\u629E...",
5368
+ equals: "=",
5369
+ greater: ">",
5370
+ less: "<",
5371
+ greaterEqual: "\u2265",
5372
+ lessEqual: "\u2264",
5373
+ on: "\u65E5\u4ED8",
5374
+ before: "\u4EE5\u524D",
5375
+ after: "\u4EE5\u964D",
5376
+ yes: "\u306F\u3044",
5377
+ no: "\u3044\u3044\u3048",
5378
+ 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",
5379
+ 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",
5380
+ uncategorized: "\u672A\u5206\u985E",
5381
+ untitled: "\u7121\u984C",
5382
+ event: "\u30A4\u30D9\u30F3\u30C8",
5383
+ none: "\u306A\u3057",
5384
+ today: "\u4ECA\u65E5",
5385
+ weekDays: "\u65E5,\u6708,\u706B,\u6C34,\u6728,\u91D1,\u571F",
5386
+ 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"
5387
+ }
3767
5388
  };
5389
+ function getTranslation(lang, key) {
5390
+ var _a;
5391
+ return ((_a = translations[lang]) == null ? void 0 : _a[key]) || translations.en[key] || key;
5392
+ }
5393
+ function getDirection(lang) {
5394
+ var _a;
5395
+ return ((_a = LANGUAGES[lang]) == null ? void 0 : _a.dir) || "ltr";
5396
+ }
5397
+
5398
+ // src/components/I18nProvider.tsx
5399
+ var import_jsx_runtime8 = require("react/jsx-runtime");
5400
+ var I18nContext = (0, import_react.createContext)(void 0);
5401
+ function I18nProvider({
5402
+ lang = "en",
5403
+ children
5404
+ }) {
5405
+ const t = (key) => getTranslation(lang, key);
5406
+ const dir = getDirection(lang);
5407
+ return /* @__PURE__ */ (0, import_jsx_runtime8.jsx)(I18nContext.Provider, { value: { lang, t, dir }, children: /* @__PURE__ */ (0, import_jsx_runtime8.jsx)("div", { dir, className: "w-full h-full", children }) });
5408
+ }
5409
+ function useI18n() {
5410
+ const context = (0, import_react.useContext)(I18nContext);
5411
+ if (!context) {
5412
+ return {
5413
+ lang: "en",
5414
+ t: (key) => getTranslation("en", key),
5415
+ dir: "ltr"
5416
+ };
5417
+ }
5418
+ return context;
5419
+ }
5420
+
5421
+ // src/components/views/GridView.tsx
5422
+ var import_jsx_runtime9 = require("react/jsx-runtime");
3768
5423
  function GridView({ schema, records, onUpdateRecord, onDeleteRecord, onOpenModal }) {
5424
+ var _a;
5425
+ const { t } = useI18n();
5426
+ const [sortField, setSortField] = (0, import_react2.useState)("");
5427
+ const [sortDirection, setSortDirection] = (0, import_react2.useState)("asc");
5428
+ const [filterField, setFilterField] = (0, import_react2.useState)("");
5429
+ const [filterValue, setFilterValue] = (0, import_react2.useState)("");
5430
+ const [filterOperator, setFilterOperator] = (0, import_react2.useState)("contains");
5431
+ const selectedFilterField = (0, import_react2.useMemo)(() => {
5432
+ return schema.fields.find((f) => f.id === filterField);
5433
+ }, [filterField, schema.fields]);
5434
+ const processedRecords = (0, import_react2.useMemo)(() => {
5435
+ let filtered = [...records];
5436
+ if (filterField && filterValue) {
5437
+ filtered = filtered.filter((record) => {
5438
+ const value = record.fields[filterField];
5439
+ const field = schema.fields.find((f) => f.id === filterField);
5440
+ if (!field) return false;
5441
+ switch (field.type) {
5442
+ case "text":
5443
+ if (value == null) return false;
5444
+ return String(value).toLowerCase().includes(filterValue.toLowerCase());
5445
+ case "number":
5446
+ if (value == null) return false;
5447
+ const numValue = Number(value);
5448
+ const filterNum = Number(filterValue);
5449
+ switch (filterOperator) {
5450
+ case "equals":
5451
+ return numValue === filterNum;
5452
+ case "greater":
5453
+ return numValue > filterNum;
5454
+ case "less":
5455
+ return numValue < filterNum;
5456
+ case "greaterEqual":
5457
+ return numValue >= filterNum;
5458
+ case "lessEqual":
5459
+ return numValue <= filterNum;
5460
+ default:
5461
+ return false;
5462
+ }
5463
+ case "select":
5464
+ case "multiSelect":
5465
+ if (value == null) return false;
5466
+ if (Array.isArray(value)) {
5467
+ return value.includes(filterValue);
5468
+ }
5469
+ return value === filterValue;
5470
+ case "checkbox":
5471
+ return filterValue === "true" ? !!value : !value;
5472
+ case "date":
5473
+ if (value == null) return false;
5474
+ const recordDate = new Date(value);
5475
+ const filterDate = new Date(filterValue);
5476
+ switch (filterOperator) {
5477
+ case "before":
5478
+ return recordDate < filterDate;
5479
+ case "after":
5480
+ return recordDate > filterDate;
5481
+ case "equals":
5482
+ return recordDate.toDateString() === filterDate.toDateString();
5483
+ default:
5484
+ return false;
5485
+ }
5486
+ default:
5487
+ if (value == null) return false;
5488
+ return String(value).toLowerCase().includes(filterValue.toLowerCase());
5489
+ }
5490
+ });
5491
+ }
5492
+ if (sortField) {
5493
+ filtered.sort((a, b) => {
5494
+ const aVal = a.fields[sortField];
5495
+ const bVal = b.fields[sortField];
5496
+ if (aVal == null && bVal == null) return 0;
5497
+ if (aVal == null) return 1;
5498
+ if (bVal == null) return -1;
5499
+ let comparison = 0;
5500
+ if (typeof aVal === "number" && typeof bVal === "number") {
5501
+ comparison = aVal - bVal;
5502
+ } else {
5503
+ comparison = String(aVal).localeCompare(String(bVal));
5504
+ }
5505
+ return sortDirection === "asc" ? comparison : -comparison;
5506
+ });
5507
+ }
5508
+ return filtered;
5509
+ }, [records, sortField, sortDirection, filterField, filterValue, filterOperator, schema.fields]);
3769
5510
  const renderCellValue = (record, field) => {
3770
- var _a;
5511
+ var _a2;
3771
5512
  const value = record.fields[field.id];
3772
5513
  switch (field.type) {
3773
5514
  case "checkbox":
3774
- return /* @__PURE__ */ (0, import_jsx_runtime6.jsx)(
5515
+ return /* @__PURE__ */ (0, import_jsx_runtime9.jsx)(
3775
5516
  Checkbox,
3776
5517
  {
3777
5518
  checked: !!value,
@@ -3780,14 +5521,14 @@ function GridView({ schema, records, onUpdateRecord, onDeleteRecord, onOpenModal
3780
5521
  }
3781
5522
  );
3782
5523
  case "select":
3783
- const option = (_a = field.options) == null ? void 0 : _a.find((o) => o.name === value);
3784
- return value ? /* @__PURE__ */ (0, import_jsx_runtime6.jsx)(Badge, { variant: "secondary", className: cn("font-normal", BADGE_COLOR_MAP[(option == null ? void 0 : option.color) || "gray"]), children: value }) : null;
5524
+ const option = (_a2 = field.options) == null ? void 0 : _a2.find((o) => o.name === value);
5525
+ return value ? /* @__PURE__ */ (0, import_jsx_runtime9.jsx)(Badge, { variant: "secondary", className: cn("font-normal", getBadgeColor(option == null ? void 0 : option.color)), children: value }) : null;
3785
5526
  case "multiSelect":
3786
5527
  const values = Array.isArray(value) ? value : [];
3787
- return /* @__PURE__ */ (0, import_jsx_runtime6.jsx)("div", { className: "flex flex-wrap gap-1", children: values.map((v) => {
3788
- var _a2;
3789
- const opt = (_a2 = field.options) == null ? void 0 : _a2.find((o) => o.name === v);
3790
- return /* @__PURE__ */ (0, import_jsx_runtime6.jsx)(Badge, { variant: "secondary", className: cn("font-normal", BADGE_COLOR_MAP[(opt == null ? void 0 : opt.color) || "gray"]), children: v }, v);
5528
+ return /* @__PURE__ */ (0, import_jsx_runtime9.jsx)("div", { className: "flex flex-wrap gap-1", children: values.map((v) => {
5529
+ var _a3;
5530
+ const opt = (_a3 = field.options) == null ? void 0 : _a3.find((o) => o.name === v);
5531
+ return /* @__PURE__ */ (0, import_jsx_runtime9.jsx)(Badge, { variant: "secondary", className: cn("font-normal", getBadgeColor(opt == null ? void 0 : opt.color)), children: v }, v);
3791
5532
  }) });
3792
5533
  case "date":
3793
5534
  return value ? new Date(value).toLocaleDateString() : null;
@@ -3797,93 +5538,225 @@ function GridView({ schema, records, onUpdateRecord, onDeleteRecord, onOpenModal
3797
5538
  return value;
3798
5539
  }
3799
5540
  };
3800
- return /* @__PURE__ */ (0, import_jsx_runtime6.jsxs)("div", { className: "w-full grow overflow-hidden sm:pl-2 relative group flex flex-col h-full", children: [
3801
- /* @__PURE__ */ (0, import_jsx_runtime6.jsx)("div", { className: "relative w-full h-full", children: /* @__PURE__ */ (0, import_jsx_runtime6.jsx)("div", { className: "w-full h-full", style: { pointerEvents: "auto" }, children: /* @__PURE__ */ (0, import_jsx_runtime6.jsx)("div", { "data-t-grid-container": "true", tabIndex: 0, className: "relative outline-none w-full h-full", children: /* @__PURE__ */ (0, import_jsx_runtime6.jsx)("div", { className: "w-full h-full overflow-auto pb-10", children: /* @__PURE__ */ (0, import_jsx_runtime6.jsxs)(Table, { children: [
3802
- /* @__PURE__ */ (0, import_jsx_runtime6.jsx)(TableHeader, { className: "bg-muted/50 sticky top-0 z-10", children: /* @__PURE__ */ (0, import_jsx_runtime6.jsxs)(TableRow, { children: [
3803
- /* @__PURE__ */ (0, import_jsx_runtime6.jsx)(TableHead, { className: "w-12 text-muted-foreground", children: "#" }),
3804
- schema.fields.map((field) => /* @__PURE__ */ (0, import_jsx_runtime6.jsxs)(TableHead, { className: "min-w-[150px]", children: [
3805
- /* @__PURE__ */ (0, import_jsx_runtime6.jsx)("span", { className: "font-medium", children: field.name }),
3806
- field.isPrimary && /* @__PURE__ */ (0, import_jsx_runtime6.jsx)(Badge, { variant: "outline", className: "ml-2 text-xs", children: "Primary" })
3807
- ] }, field.id)),
3808
- /* @__PURE__ */ (0, import_jsx_runtime6.jsx)(TableHead, { className: "w-[100px] text-right", children: "Actions" })
3809
- ] }) }),
3810
- /* @__PURE__ */ (0, import_jsx_runtime6.jsxs)(TableBody, { children: [
3811
- records.map((record, index) => /* @__PURE__ */ (0, import_jsx_runtime6.jsxs)(
3812
- TableRow,
3813
- {
3814
- className: "group cursor-pointer hover:bg-muted/50",
3815
- onClick: () => onOpenModal("view", record),
3816
- children: [
3817
- /* @__PURE__ */ (0, import_jsx_runtime6.jsx)(TableCell, { className: "text-muted-foreground tabular-nums", children: index + 1 }),
3818
- schema.fields.map((field) => /* @__PURE__ */ (0, import_jsx_runtime6.jsx)(TableCell, { children: /* @__PURE__ */ (0, import_jsx_runtime6.jsx)("div", { className: "min-h-[24px] flex items-center", children: renderCellValue(record, field) }) }, field.id)),
3819
- /* @__PURE__ */ (0, import_jsx_runtime6.jsx)(TableCell, { className: "text-right", onClick: (e) => e.stopPropagation(), children: /* @__PURE__ */ (0, import_jsx_runtime6.jsxs)("div", { className: "flex justify-end gap-1 opacity-0 group-hover:opacity-100 transition-opacity", children: [
3820
- /* @__PURE__ */ (0, import_jsx_runtime6.jsx)(
3821
- Button,
3822
- {
3823
- variant: "ghost",
3824
- size: "icon",
3825
- className: "h-8 w-8",
3826
- onClick: () => onOpenModal("view", record),
3827
- children: /* @__PURE__ */ (0, import_jsx_runtime6.jsx)(import_lucide_react2.Eye, { className: "h-4 w-4" })
3828
- }
3829
- ),
3830
- /* @__PURE__ */ (0, import_jsx_runtime6.jsx)(
3831
- Button,
3832
- {
3833
- variant: "ghost",
3834
- size: "icon",
3835
- className: "h-8 w-8",
3836
- onClick: () => onOpenModal("edit", record),
3837
- children: /* @__PURE__ */ (0, import_jsx_runtime6.jsx)(import_lucide_react2.Pencil, { className: "h-4 w-4" })
3838
- }
3839
- ),
3840
- /* @__PURE__ */ (0, import_jsx_runtime6.jsx)(
3841
- Button,
3842
- {
3843
- variant: "ghost",
3844
- size: "icon",
3845
- className: "h-8 w-8 text-muted-foreground hover:text-destructive",
3846
- onClick: () => onDeleteRecord(record.id),
3847
- children: /* @__PURE__ */ (0, import_jsx_runtime6.jsx)(import_lucide_react2.Trash2, { className: "h-4 w-4" })
3848
- }
3849
- )
3850
- ] }) })
3851
- ]
3852
- },
3853
- record.id
3854
- )),
3855
- /* @__PURE__ */ (0, import_jsx_runtime6.jsx)(TableRow, { children: /* @__PURE__ */ (0, import_jsx_runtime6.jsx)(TableCell, { colSpan: schema.fields.length + 2, className: "p-0", children: /* @__PURE__ */ (0, import_jsx_runtime6.jsxs)(
3856
- Button,
3857
- {
3858
- variant: "ghost",
3859
- size: "sm",
3860
- onClick: () => onOpenModal("add"),
3861
- className: "w-full justify-start px-4 h-10 text-muted-foreground hover:text-foreground rounded-none",
3862
- children: [
3863
- /* @__PURE__ */ (0, import_jsx_runtime6.jsx)(import_lucide_react2.Plus, { className: "h-4 w-4 mr-2" }),
3864
- "Add new record"
3865
- ]
3866
- }
3867
- ) }) })
3868
- ] })
3869
- ] }) }) }) }) }),
3870
- /* @__PURE__ */ (0, import_jsx_runtime6.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: [
5541
+ return /* @__PURE__ */ (0, import_jsx_runtime9.jsxs)("div", { className: "w-full grow overflow-hidden sm:pl-2 relative group flex flex-col h-full", children: [
5542
+ /* @__PURE__ */ (0, import_jsx_runtime9.jsxs)("div", { className: "relative w-full h-full flex flex-col", children: [
5543
+ /* @__PURE__ */ (0, import_jsx_runtime9.jsxs)("div", { className: "flex items-center gap-3 p-3 border-b bg-muted/30", children: [
5544
+ /* @__PURE__ */ (0, import_jsx_runtime9.jsxs)(Button, { onClick: () => onOpenModal("add"), className: "h-9", children: [
5545
+ /* @__PURE__ */ (0, import_jsx_runtime9.jsx)(import_lucide_react3.Plus, { className: "h-4 w-4 mr-2" }),
5546
+ t("addRecord")
5547
+ ] }),
5548
+ /* @__PURE__ */ (0, import_jsx_runtime9.jsx)("div", { className: "h-6 w-px bg-border" }),
5549
+ /* @__PURE__ */ (0, import_jsx_runtime9.jsxs)("div", { className: "flex items-center gap-2", children: [
5550
+ /* @__PURE__ */ (0, import_jsx_runtime9.jsx)(import_lucide_react3.ArrowUpDown, { className: "h-4 w-4 text-muted-foreground" }),
5551
+ /* @__PURE__ */ (0, import_jsx_runtime9.jsxs)(Select, { value: sortField || "none", onValueChange: (v) => setSortField(v === "none" ? "" : v), children: [
5552
+ /* @__PURE__ */ (0, import_jsx_runtime9.jsx)(SelectTrigger, { className: "w-[180px] h-9", children: /* @__PURE__ */ (0, import_jsx_runtime9.jsx)(SelectValue, { placeholder: t("sortBy") }) }),
5553
+ /* @__PURE__ */ (0, import_jsx_runtime9.jsxs)(SelectContent, { children: [
5554
+ /* @__PURE__ */ (0, import_jsx_runtime9.jsx)(SelectItem, { value: "none", children: t("noSorting") }),
5555
+ schema.fields.map((field) => /* @__PURE__ */ (0, import_jsx_runtime9.jsx)(SelectItem, { value: field.id, children: field.name }, field.id))
5556
+ ] })
5557
+ ] }),
5558
+ sortField && /* @__PURE__ */ (0, import_jsx_runtime9.jsx)(
5559
+ Button,
5560
+ {
5561
+ variant: "outline",
5562
+ size: "sm",
5563
+ className: "h-9",
5564
+ onClick: () => setSortDirection(sortDirection === "asc" ? "desc" : "asc"),
5565
+ children: sortDirection === "asc" ? t("ascending") : t("descending")
5566
+ }
5567
+ )
5568
+ ] }),
5569
+ /* @__PURE__ */ (0, import_jsx_runtime9.jsxs)("div", { className: "flex items-center gap-2 flex-1", children: [
5570
+ /* @__PURE__ */ (0, import_jsx_runtime9.jsx)(import_lucide_react3.Filter, { className: "h-4 w-4 text-muted-foreground" }),
5571
+ /* @__PURE__ */ (0, import_jsx_runtime9.jsxs)(Select, { value: filterField || "none", onValueChange: (v) => {
5572
+ const newField = v === "none" ? "" : v;
5573
+ setFilterField(newField);
5574
+ setFilterValue("");
5575
+ if (newField) {
5576
+ const field = schema.fields.find((f) => f.id === newField);
5577
+ if ((field == null ? void 0 : field.type) === "number") setFilterOperator("equals");
5578
+ else if ((field == null ? void 0 : field.type) === "date") setFilterOperator("equals");
5579
+ else setFilterOperator("contains");
5580
+ }
5581
+ }, children: [
5582
+ /* @__PURE__ */ (0, import_jsx_runtime9.jsx)(SelectTrigger, { className: "w-[180px] h-9", children: /* @__PURE__ */ (0, import_jsx_runtime9.jsx)(SelectValue, { placeholder: t("filterBy") }) }),
5583
+ /* @__PURE__ */ (0, import_jsx_runtime9.jsxs)(SelectContent, { children: [
5584
+ /* @__PURE__ */ (0, import_jsx_runtime9.jsx)(SelectItem, { value: "none", children: t("noFilter") }),
5585
+ schema.fields.map((field) => /* @__PURE__ */ (0, import_jsx_runtime9.jsx)(SelectItem, { value: field.id, children: field.name }, field.id))
5586
+ ] })
5587
+ ] }),
5588
+ filterField && selectedFilterField && /* @__PURE__ */ (0, import_jsx_runtime9.jsxs)(import_jsx_runtime9.Fragment, { children: [
5589
+ selectedFilterField.type === "number" && /* @__PURE__ */ (0, import_jsx_runtime9.jsxs)(import_jsx_runtime9.Fragment, { children: [
5590
+ /* @__PURE__ */ (0, import_jsx_runtime9.jsxs)(Select, { value: filterOperator, onValueChange: setFilterOperator, children: [
5591
+ /* @__PURE__ */ (0, import_jsx_runtime9.jsx)(SelectTrigger, { className: "w-[120px] h-9", children: /* @__PURE__ */ (0, import_jsx_runtime9.jsx)(SelectValue, {}) }),
5592
+ /* @__PURE__ */ (0, import_jsx_runtime9.jsxs)(SelectContent, { children: [
5593
+ /* @__PURE__ */ (0, import_jsx_runtime9.jsx)(SelectItem, { value: "equals", children: t("equals") }),
5594
+ /* @__PURE__ */ (0, import_jsx_runtime9.jsx)(SelectItem, { value: "greater", children: t("greater") }),
5595
+ /* @__PURE__ */ (0, import_jsx_runtime9.jsx)(SelectItem, { value: "less", children: t("less") }),
5596
+ /* @__PURE__ */ (0, import_jsx_runtime9.jsx)(SelectItem, { value: "greaterEqual", children: t("greaterEqual") }),
5597
+ /* @__PURE__ */ (0, import_jsx_runtime9.jsx)(SelectItem, { value: "lessEqual", children: t("lessEqual") })
5598
+ ] })
5599
+ ] }),
5600
+ /* @__PURE__ */ (0, import_jsx_runtime9.jsx)(
5601
+ Input,
5602
+ {
5603
+ type: "number",
5604
+ placeholder: t("filterValue"),
5605
+ value: filterValue,
5606
+ onChange: (e) => setFilterValue(e.target.value),
5607
+ className: "w-[150px] h-9"
5608
+ }
5609
+ )
5610
+ ] }),
5611
+ selectedFilterField.type === "date" && /* @__PURE__ */ (0, import_jsx_runtime9.jsxs)(import_jsx_runtime9.Fragment, { children: [
5612
+ /* @__PURE__ */ (0, import_jsx_runtime9.jsxs)(Select, { value: filterOperator, onValueChange: setFilterOperator, children: [
5613
+ /* @__PURE__ */ (0, import_jsx_runtime9.jsx)(SelectTrigger, { className: "w-[120px] h-9", children: /* @__PURE__ */ (0, import_jsx_runtime9.jsx)(SelectValue, {}) }),
5614
+ /* @__PURE__ */ (0, import_jsx_runtime9.jsxs)(SelectContent, { children: [
5615
+ /* @__PURE__ */ (0, import_jsx_runtime9.jsx)(SelectItem, { value: "equals", children: t("on") }),
5616
+ /* @__PURE__ */ (0, import_jsx_runtime9.jsx)(SelectItem, { value: "before", children: t("before") }),
5617
+ /* @__PURE__ */ (0, import_jsx_runtime9.jsx)(SelectItem, { value: "after", children: t("after") })
5618
+ ] })
5619
+ ] }),
5620
+ /* @__PURE__ */ (0, import_jsx_runtime9.jsx)(
5621
+ Input,
5622
+ {
5623
+ type: "date",
5624
+ value: filterValue,
5625
+ onChange: (e) => setFilterValue(e.target.value),
5626
+ className: "w-[180px] h-9"
5627
+ }
5628
+ )
5629
+ ] }),
5630
+ (selectedFilterField.type === "select" || selectedFilterField.type === "multiSelect") && /* @__PURE__ */ (0, import_jsx_runtime9.jsxs)(Select, { value: filterValue, onValueChange: setFilterValue, children: [
5631
+ /* @__PURE__ */ (0, import_jsx_runtime9.jsx)(SelectTrigger, { className: "w-[200px] h-9", children: /* @__PURE__ */ (0, import_jsx_runtime9.jsx)(SelectValue, { placeholder: t("selectValue") }) }),
5632
+ /* @__PURE__ */ (0, import_jsx_runtime9.jsx)(SelectContent, { children: (_a = selectedFilterField.options) == null ? void 0 : _a.map((option) => /* @__PURE__ */ (0, import_jsx_runtime9.jsx)(SelectItem, { value: option.name, children: option.name }, option.id)) })
5633
+ ] }),
5634
+ selectedFilterField.type === "checkbox" && /* @__PURE__ */ (0, import_jsx_runtime9.jsxs)(Select, { value: filterValue, onValueChange: setFilterValue, children: [
5635
+ /* @__PURE__ */ (0, import_jsx_runtime9.jsx)(SelectTrigger, { className: "w-[150px] h-9", children: /* @__PURE__ */ (0, import_jsx_runtime9.jsx)(SelectValue, { placeholder: t("selectValue") }) }),
5636
+ /* @__PURE__ */ (0, import_jsx_runtime9.jsxs)(SelectContent, { children: [
5637
+ /* @__PURE__ */ (0, import_jsx_runtime9.jsx)(SelectItem, { value: "true", children: t("yes") }),
5638
+ /* @__PURE__ */ (0, import_jsx_runtime9.jsx)(SelectItem, { value: "false", children: t("no") })
5639
+ ] })
5640
+ ] }),
5641
+ selectedFilterField.type === "text" && /* @__PURE__ */ (0, import_jsx_runtime9.jsx)(
5642
+ Input,
5643
+ {
5644
+ placeholder: t("filterValue"),
5645
+ value: filterValue,
5646
+ onChange: (e) => setFilterValue(e.target.value),
5647
+ className: "w-[200px] h-9"
5648
+ }
5649
+ ),
5650
+ /* @__PURE__ */ (0, import_jsx_runtime9.jsx)(
5651
+ Button,
5652
+ {
5653
+ variant: "ghost",
5654
+ size: "sm",
5655
+ className: "h-9 w-9 p-0",
5656
+ onClick: () => {
5657
+ setFilterField("");
5658
+ setFilterValue("");
5659
+ setFilterOperator("contains");
5660
+ },
5661
+ children: /* @__PURE__ */ (0, import_jsx_runtime9.jsx)(import_lucide_react3.X, { className: "h-4 w-4" })
5662
+ }
5663
+ )
5664
+ ] })
5665
+ ] }),
5666
+ /* @__PURE__ */ (0, import_jsx_runtime9.jsxs)("div", { className: "text-sm text-muted-foreground", children: [
5667
+ processedRecords.length,
5668
+ " of ",
5669
+ records.length,
5670
+ " records"
5671
+ ] })
5672
+ ] }),
5673
+ /* @__PURE__ */ (0, import_jsx_runtime9.jsx)("div", { className: "w-full flex-1", style: { pointerEvents: "auto" }, children: /* @__PURE__ */ (0, import_jsx_runtime9.jsx)("div", { "data-t-grid-container": "true", tabIndex: 0, className: "relative outline-none w-full h-full", children: /* @__PURE__ */ (0, import_jsx_runtime9.jsx)("div", { className: "w-full h-full overflow-auto pb-10", children: /* @__PURE__ */ (0, import_jsx_runtime9.jsxs)(Table, { children: [
5674
+ /* @__PURE__ */ (0, import_jsx_runtime9.jsx)(TableHeader, { className: "bg-muted/50 sticky top-0 z-10", children: /* @__PURE__ */ (0, import_jsx_runtime9.jsxs)(TableRow, { children: [
5675
+ /* @__PURE__ */ (0, import_jsx_runtime9.jsx)(TableHead, { className: "w-12 text-muted-foreground", children: "#" }),
5676
+ schema.fields.map((field) => /* @__PURE__ */ (0, import_jsx_runtime9.jsxs)(TableHead, { className: "min-w-[150px]", children: [
5677
+ /* @__PURE__ */ (0, import_jsx_runtime9.jsx)("span", { className: "font-medium", children: field.name }),
5678
+ field.isPrimary && /* @__PURE__ */ (0, import_jsx_runtime9.jsx)(Badge, { variant: "outline", className: "ml-2 text-xs", children: "Primary" })
5679
+ ] }, field.id)),
5680
+ /* @__PURE__ */ (0, import_jsx_runtime9.jsx)(TableHead, { className: "w-[100px] text-right", children: "Actions" })
5681
+ ] }) }),
5682
+ /* @__PURE__ */ (0, import_jsx_runtime9.jsxs)(TableBody, { children: [
5683
+ processedRecords.map((record, index) => /* @__PURE__ */ (0, import_jsx_runtime9.jsxs)(
5684
+ TableRow,
5685
+ {
5686
+ className: "group cursor-pointer hover:bg-muted/50",
5687
+ onClick: () => onOpenModal("view", record),
5688
+ children: [
5689
+ /* @__PURE__ */ (0, import_jsx_runtime9.jsx)(TableCell, { className: "text-muted-foreground tabular-nums", children: index + 1 }),
5690
+ schema.fields.map((field) => /* @__PURE__ */ (0, import_jsx_runtime9.jsx)(TableCell, { children: /* @__PURE__ */ (0, import_jsx_runtime9.jsx)("div", { className: "min-h-[24px] flex items-center", children: renderCellValue(record, field) }) }, field.id)),
5691
+ /* @__PURE__ */ (0, import_jsx_runtime9.jsx)(TableCell, { className: "text-right", onClick: (e) => e.stopPropagation(), children: /* @__PURE__ */ (0, import_jsx_runtime9.jsxs)("div", { className: "flex justify-end gap-1 opacity-0 group-hover:opacity-100 transition-opacity", children: [
5692
+ /* @__PURE__ */ (0, import_jsx_runtime9.jsx)(
5693
+ Button,
5694
+ {
5695
+ variant: "ghost",
5696
+ size: "icon",
5697
+ className: "h-8 w-8",
5698
+ onClick: () => onOpenModal("view", record),
5699
+ children: /* @__PURE__ */ (0, import_jsx_runtime9.jsx)(import_lucide_react3.Eye, { className: "h-4 w-4" })
5700
+ }
5701
+ ),
5702
+ /* @__PURE__ */ (0, import_jsx_runtime9.jsx)(
5703
+ Button,
5704
+ {
5705
+ variant: "ghost",
5706
+ size: "icon",
5707
+ className: "h-8 w-8",
5708
+ onClick: () => onOpenModal("edit", record),
5709
+ children: /* @__PURE__ */ (0, import_jsx_runtime9.jsx)(import_lucide_react3.Pencil, { className: "h-4 w-4" })
5710
+ }
5711
+ ),
5712
+ /* @__PURE__ */ (0, import_jsx_runtime9.jsx)(
5713
+ Button,
5714
+ {
5715
+ variant: "ghost",
5716
+ size: "icon",
5717
+ className: "h-8 w-8 text-muted-foreground hover:text-destructive",
5718
+ onClick: () => onDeleteRecord(record.id),
5719
+ children: /* @__PURE__ */ (0, import_jsx_runtime9.jsx)(import_lucide_react3.Trash2, { className: "h-4 w-4" })
5720
+ }
5721
+ )
5722
+ ] }) })
5723
+ ]
5724
+ },
5725
+ record.id
5726
+ )),
5727
+ /* @__PURE__ */ (0, import_jsx_runtime9.jsx)(TableRow, { children: /* @__PURE__ */ (0, import_jsx_runtime9.jsx)(TableCell, { colSpan: schema.fields.length + 2, className: "p-0", children: /* @__PURE__ */ (0, import_jsx_runtime9.jsxs)(
5728
+ Button,
5729
+ {
5730
+ variant: "ghost",
5731
+ size: "sm",
5732
+ onClick: () => onOpenModal("add"),
5733
+ className: "w-full justify-start px-4 h-10 text-muted-foreground hover:text-foreground rounded-none",
5734
+ children: [
5735
+ /* @__PURE__ */ (0, import_jsx_runtime9.jsx)(import_lucide_react3.Plus, { className: "h-4 w-4 mr-2" }),
5736
+ "Add new record"
5737
+ ]
5738
+ }
5739
+ ) }) })
5740
+ ] })
5741
+ ] }) }) }) })
5742
+ ] }),
5743
+ /* @__PURE__ */ (0, import_jsx_runtime9.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: [
3871
5744
  records.length,
3872
5745
  " records",
3873
- /* @__PURE__ */ (0, import_jsx_runtime6.jsx)("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__ */ (0, import_jsx_runtime6.jsx)("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__ */ (0, import_jsx_runtime6.jsx)("path", { stroke: "currentColor", strokeLinecap: "round", strokeLinejoin: "round", strokeWidth: "2", d: "m15 18-6-6 6-6" }) }) })
5746
+ /* @__PURE__ */ (0, import_jsx_runtime9.jsx)("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__ */ (0, import_jsx_runtime9.jsx)("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__ */ (0, import_jsx_runtime9.jsx)("path", { stroke: "currentColor", strokeLinecap: "round", strokeLinejoin: "round", strokeWidth: "2", d: "m15 18-6-6 6-6" }) }) })
3874
5747
  ] })
3875
5748
  ] });
3876
5749
  }
3877
5750
 
3878
5751
  // src/components/views/FormView.tsx
3879
- var import_react2 = require("react");
5752
+ var import_react4 = require("react");
3880
5753
 
3881
5754
  // src/components/ui/card.tsx
3882
- var React5 = __toESM(require("react"));
3883
- var import_jsx_runtime7 = require("react/jsx-runtime");
3884
- var Card = React5.forwardRef((_a, ref) => {
5755
+ var React8 = __toESM(require("react"));
5756
+ var import_jsx_runtime10 = require("react/jsx-runtime");
5757
+ var Card = React8.forwardRef((_a, ref) => {
3885
5758
  var _b = _a, { className } = _b, props = __objRest(_b, ["className"]);
3886
- return /* @__PURE__ */ (0, import_jsx_runtime7.jsx)(
5759
+ return /* @__PURE__ */ (0, import_jsx_runtime10.jsx)(
3887
5760
  "div",
3888
5761
  __spreadValues({
3889
5762
  ref,
@@ -3895,9 +5768,9 @@ var Card = React5.forwardRef((_a, ref) => {
3895
5768
  );
3896
5769
  });
3897
5770
  Card.displayName = "Card";
3898
- var CardHeader = React5.forwardRef((_a, ref) => {
5771
+ var CardHeader = React8.forwardRef((_a, ref) => {
3899
5772
  var _b = _a, { className } = _b, props = __objRest(_b, ["className"]);
3900
- return /* @__PURE__ */ (0, import_jsx_runtime7.jsx)(
5773
+ return /* @__PURE__ */ (0, import_jsx_runtime10.jsx)(
3901
5774
  "div",
3902
5775
  __spreadValues({
3903
5776
  ref,
@@ -3906,9 +5779,9 @@ var CardHeader = React5.forwardRef((_a, ref) => {
3906
5779
  );
3907
5780
  });
3908
5781
  CardHeader.displayName = "CardHeader";
3909
- var CardTitle = React5.forwardRef((_a, ref) => {
5782
+ var CardTitle = React8.forwardRef((_a, ref) => {
3910
5783
  var _b = _a, { className } = _b, props = __objRest(_b, ["className"]);
3911
- return /* @__PURE__ */ (0, import_jsx_runtime7.jsx)(
5784
+ return /* @__PURE__ */ (0, import_jsx_runtime10.jsx)(
3912
5785
  "div",
3913
5786
  __spreadValues({
3914
5787
  ref,
@@ -3917,9 +5790,9 @@ var CardTitle = React5.forwardRef((_a, ref) => {
3917
5790
  );
3918
5791
  });
3919
5792
  CardTitle.displayName = "CardTitle";
3920
- var CardDescription = React5.forwardRef((_a, ref) => {
5793
+ var CardDescription = React8.forwardRef((_a, ref) => {
3921
5794
  var _b = _a, { className } = _b, props = __objRest(_b, ["className"]);
3922
- return /* @__PURE__ */ (0, import_jsx_runtime7.jsx)(
5795
+ return /* @__PURE__ */ (0, import_jsx_runtime10.jsx)(
3923
5796
  "div",
3924
5797
  __spreadValues({
3925
5798
  ref,
@@ -3928,14 +5801,14 @@ var CardDescription = React5.forwardRef((_a, ref) => {
3928
5801
  );
3929
5802
  });
3930
5803
  CardDescription.displayName = "CardDescription";
3931
- var CardContent = React5.forwardRef((_a, ref) => {
5804
+ var CardContent = React8.forwardRef((_a, ref) => {
3932
5805
  var _b = _a, { className } = _b, props = __objRest(_b, ["className"]);
3933
- return /* @__PURE__ */ (0, import_jsx_runtime7.jsx)("div", __spreadValues({ ref, className: cn("p-6 pt-0", className) }, props));
5806
+ return /* @__PURE__ */ (0, import_jsx_runtime10.jsx)("div", __spreadValues({ ref, className: cn("p-6 pt-0", className) }, props));
3934
5807
  });
3935
5808
  CardContent.displayName = "CardContent";
3936
- var CardFooter = React5.forwardRef((_a, ref) => {
5809
+ var CardFooter = React8.forwardRef((_a, ref) => {
3937
5810
  var _b = _a, { className } = _b, props = __objRest(_b, ["className"]);
3938
- return /* @__PURE__ */ (0, import_jsx_runtime7.jsx)(
5811
+ return /* @__PURE__ */ (0, import_jsx_runtime10.jsx)(
3939
5812
  "div",
3940
5813
  __spreadValues({
3941
5814
  ref,
@@ -3946,9 +5819,9 @@ var CardFooter = React5.forwardRef((_a, ref) => {
3946
5819
  CardFooter.displayName = "CardFooter";
3947
5820
 
3948
5821
  // src/components/ui/alert.tsx
3949
- var React6 = __toESM(require("react"));
5822
+ var React9 = __toESM(require("react"));
3950
5823
  var import_class_variance_authority3 = require("class-variance-authority");
3951
- var import_jsx_runtime8 = require("react/jsx-runtime");
5824
+ var import_jsx_runtime11 = require("react/jsx-runtime");
3952
5825
  var alertVariants = (0, import_class_variance_authority3.cva)(
3953
5826
  "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",
3954
5827
  {
@@ -3963,9 +5836,9 @@ var alertVariants = (0, import_class_variance_authority3.cva)(
3963
5836
  }
3964
5837
  }
3965
5838
  );
3966
- var Alert = React6.forwardRef((_a, ref) => {
5839
+ var Alert = React9.forwardRef((_a, ref) => {
3967
5840
  var _b = _a, { className, variant } = _b, props = __objRest(_b, ["className", "variant"]);
3968
- return /* @__PURE__ */ (0, import_jsx_runtime8.jsx)(
5841
+ return /* @__PURE__ */ (0, import_jsx_runtime11.jsx)(
3969
5842
  "div",
3970
5843
  __spreadValues({
3971
5844
  ref,
@@ -3975,9 +5848,9 @@ var Alert = React6.forwardRef((_a, ref) => {
3975
5848
  );
3976
5849
  });
3977
5850
  Alert.displayName = "Alert";
3978
- var AlertTitle = React6.forwardRef((_a, ref) => {
5851
+ var AlertTitle = React9.forwardRef((_a, ref) => {
3979
5852
  var _b = _a, { className } = _b, props = __objRest(_b, ["className"]);
3980
- return /* @__PURE__ */ (0, import_jsx_runtime8.jsx)(
5853
+ return /* @__PURE__ */ (0, import_jsx_runtime11.jsx)(
3981
5854
  "h5",
3982
5855
  __spreadValues({
3983
5856
  ref,
@@ -3986,202 +5859,50 @@ var AlertTitle = React6.forwardRef((_a, ref) => {
3986
5859
  );
3987
5860
  });
3988
5861
  AlertTitle.displayName = "AlertTitle";
3989
- var AlertDescription = React6.forwardRef((_a, ref) => {
3990
- var _b = _a, { className } = _b, props = __objRest(_b, ["className"]);
3991
- return /* @__PURE__ */ (0, import_jsx_runtime8.jsx)(
3992
- "div",
3993
- __spreadValues({
3994
- ref,
3995
- className: cn("text-sm [&_p]:leading-relaxed", className)
3996
- }, props)
3997
- );
3998
- });
3999
- AlertDescription.displayName = "AlertDescription";
4000
-
4001
- // src/components/views/FormView.tsx
4002
- var import_lucide_react4 = require("lucide-react");
4003
-
4004
- // src/components/RecordForm.tsx
4005
- var import_react = require("react");
4006
-
4007
- // src/components/ui/input.tsx
4008
- var React7 = __toESM(require("react"));
4009
- var import_jsx_runtime9 = require("react/jsx-runtime");
4010
- var Input = React7.forwardRef(
4011
- (_a, ref) => {
4012
- var _b = _a, { className, type } = _b, props = __objRest(_b, ["className", "type"]);
4013
- return /* @__PURE__ */ (0, import_jsx_runtime9.jsx)(
4014
- "input",
4015
- __spreadValues({
4016
- type,
4017
- className: cn(
4018
- "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",
4019
- className
4020
- ),
4021
- ref
4022
- }, props)
4023
- );
4024
- }
4025
- );
4026
- Input.displayName = "Input";
4027
-
4028
- // src/components/ui/label.tsx
4029
- var React8 = __toESM(require("react"));
4030
- var LabelPrimitive = __toESM(require("@radix-ui/react-label"));
4031
- var import_class_variance_authority4 = require("class-variance-authority");
4032
- var import_jsx_runtime10 = require("react/jsx-runtime");
4033
- var labelVariants = (0, import_class_variance_authority4.cva)(
4034
- "text-sm font-medium leading-none peer-disabled:cursor-not-allowed peer-disabled:opacity-70"
4035
- );
4036
- var Label = React8.forwardRef((_a, ref) => {
4037
- var _b = _a, { className } = _b, props = __objRest(_b, ["className"]);
4038
- return /* @__PURE__ */ (0, import_jsx_runtime10.jsx)(
4039
- LabelPrimitive.Root,
4040
- __spreadValues({
4041
- ref,
4042
- className: cn(labelVariants(), className)
4043
- }, props)
4044
- );
4045
- });
4046
- Label.displayName = LabelPrimitive.Root.displayName;
4047
-
4048
- // src/components/ui/select.tsx
4049
- var React9 = __toESM(require("react"));
4050
- var SelectPrimitive = __toESM(require("@radix-ui/react-select"));
4051
- var import_lucide_react3 = require("lucide-react");
4052
- var import_jsx_runtime11 = require("react/jsx-runtime");
4053
- var Select = SelectPrimitive.Root;
4054
- var SelectValue = SelectPrimitive.Value;
4055
- var SelectTrigger = React9.forwardRef((_a, ref) => {
4056
- var _b = _a, { className, children } = _b, props = __objRest(_b, ["className", "children"]);
4057
- return /* @__PURE__ */ (0, import_jsx_runtime11.jsxs)(
4058
- SelectPrimitive.Trigger,
4059
- __spreadProps(__spreadValues({
4060
- ref,
4061
- className: cn(
4062
- "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",
4063
- className
4064
- )
4065
- }, props), {
4066
- children: [
4067
- children,
4068
- /* @__PURE__ */ (0, import_jsx_runtime11.jsx)(SelectPrimitive.Icon, { asChild: true, children: /* @__PURE__ */ (0, import_jsx_runtime11.jsx)(import_lucide_react3.ChevronDown, { className: "h-4 w-4 opacity-50" }) })
4069
- ]
4070
- })
4071
- );
4072
- });
4073
- SelectTrigger.displayName = SelectPrimitive.Trigger.displayName;
4074
- var SelectScrollUpButton = React9.forwardRef((_a, ref) => {
4075
- var _b = _a, { className } = _b, props = __objRest(_b, ["className"]);
4076
- return /* @__PURE__ */ (0, import_jsx_runtime11.jsx)(
4077
- SelectPrimitive.ScrollUpButton,
4078
- __spreadProps(__spreadValues({
4079
- ref,
4080
- className: cn(
4081
- "flex cursor-default items-center justify-center py-1",
4082
- className
4083
- )
4084
- }, props), {
4085
- children: /* @__PURE__ */ (0, import_jsx_runtime11.jsx)(import_lucide_react3.ChevronUp, { className: "h-4 w-4" })
4086
- })
4087
- );
4088
- });
4089
- SelectScrollUpButton.displayName = SelectPrimitive.ScrollUpButton.displayName;
4090
- var SelectScrollDownButton = React9.forwardRef((_a, ref) => {
4091
- var _b = _a, { className } = _b, props = __objRest(_b, ["className"]);
4092
- return /* @__PURE__ */ (0, import_jsx_runtime11.jsx)(
4093
- SelectPrimitive.ScrollDownButton,
4094
- __spreadProps(__spreadValues({
4095
- ref,
4096
- className: cn(
4097
- "flex cursor-default items-center justify-center py-1",
4098
- className
4099
- )
4100
- }, props), {
4101
- children: /* @__PURE__ */ (0, import_jsx_runtime11.jsx)(import_lucide_react3.ChevronDown, { className: "h-4 w-4" })
4102
- })
4103
- );
4104
- });
4105
- SelectScrollDownButton.displayName = SelectPrimitive.ScrollDownButton.displayName;
4106
- var SelectContent = React9.forwardRef((_a, ref) => {
4107
- var _b = _a, { className, children, position = "popper" } = _b, props = __objRest(_b, ["className", "children", "position"]);
4108
- return /* @__PURE__ */ (0, import_jsx_runtime11.jsx)(SelectPrimitive.Portal, { children: /* @__PURE__ */ (0, import_jsx_runtime11.jsxs)(
4109
- SelectPrimitive.Content,
4110
- __spreadProps(__spreadValues({
4111
- ref,
4112
- className: cn(
4113
- "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]",
4114
- 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",
4115
- className
4116
- ),
4117
- position
4118
- }, props), {
4119
- children: [
4120
- /* @__PURE__ */ (0, import_jsx_runtime11.jsx)(SelectScrollUpButton, {}),
4121
- /* @__PURE__ */ (0, import_jsx_runtime11.jsx)(
4122
- SelectPrimitive.Viewport,
4123
- {
4124
- className: cn(
4125
- "p-1",
4126
- position === "popper" && "h-[var(--radix-select-trigger-height)] w-full min-w-[var(--radix-select-trigger-width)]"
4127
- ),
4128
- children
4129
- }
4130
- ),
4131
- /* @__PURE__ */ (0, import_jsx_runtime11.jsx)(SelectScrollDownButton, {})
4132
- ]
4133
- })
4134
- ) });
4135
- });
4136
- SelectContent.displayName = SelectPrimitive.Content.displayName;
4137
- var SelectLabel = React9.forwardRef((_a, ref) => {
4138
- var _b = _a, { className } = _b, props = __objRest(_b, ["className"]);
4139
- return /* @__PURE__ */ (0, import_jsx_runtime11.jsx)(
4140
- SelectPrimitive.Label,
4141
- __spreadValues({
4142
- ref,
4143
- className: cn("px-2 py-1.5 text-sm font-semibold", className)
4144
- }, props)
4145
- );
4146
- });
4147
- SelectLabel.displayName = SelectPrimitive.Label.displayName;
4148
- var SelectItem = React9.forwardRef((_a, ref) => {
4149
- var _b = _a, { className, children } = _b, props = __objRest(_b, ["className", "children"]);
4150
- return /* @__PURE__ */ (0, import_jsx_runtime11.jsxs)(
4151
- SelectPrimitive.Item,
4152
- __spreadProps(__spreadValues({
4153
- ref,
4154
- className: cn(
4155
- "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",
4156
- className
4157
- )
4158
- }, props), {
4159
- children: [
4160
- /* @__PURE__ */ (0, import_jsx_runtime11.jsx)("span", { className: "absolute right-2 flex h-3.5 w-3.5 items-center justify-center", children: /* @__PURE__ */ (0, import_jsx_runtime11.jsx)(SelectPrimitive.ItemIndicator, { children: /* @__PURE__ */ (0, import_jsx_runtime11.jsx)(import_lucide_react3.Check, { className: "h-4 w-4" }) }) }),
4161
- /* @__PURE__ */ (0, import_jsx_runtime11.jsx)(SelectPrimitive.ItemText, { children })
4162
- ]
4163
- })
4164
- );
4165
- });
4166
- SelectItem.displayName = SelectPrimitive.Item.displayName;
4167
- var SelectSeparator = React9.forwardRef((_a, ref) => {
5862
+ var AlertDescription = React9.forwardRef((_a, ref) => {
4168
5863
  var _b = _a, { className } = _b, props = __objRest(_b, ["className"]);
4169
5864
  return /* @__PURE__ */ (0, import_jsx_runtime11.jsx)(
4170
- SelectPrimitive.Separator,
5865
+ "div",
4171
5866
  __spreadValues({
4172
5867
  ref,
4173
- className: cn("-mx-1 my-1 h-px bg-muted", className)
5868
+ className: cn("text-sm [&_p]:leading-relaxed", className)
4174
5869
  }, props)
4175
5870
  );
4176
5871
  });
4177
- SelectSeparator.displayName = SelectPrimitive.Separator.displayName;
5872
+ AlertDescription.displayName = "AlertDescription";
4178
5873
 
4179
- // src/components/ui/textarea.tsx
5874
+ // src/components/views/FormView.tsx
5875
+ var import_lucide_react4 = require("lucide-react");
5876
+
5877
+ // src/components/RecordForm.tsx
5878
+ var import_react3 = require("react");
5879
+
5880
+ // src/components/ui/label.tsx
4180
5881
  var React10 = __toESM(require("react"));
5882
+ var LabelPrimitive = __toESM(require("@radix-ui/react-label"));
5883
+ var import_class_variance_authority4 = require("class-variance-authority");
4181
5884
  var import_jsx_runtime12 = require("react/jsx-runtime");
4182
- var Textarea = React10.forwardRef((_a, ref) => {
5885
+ var labelVariants = (0, import_class_variance_authority4.cva)(
5886
+ "text-sm font-medium leading-none peer-disabled:cursor-not-allowed peer-disabled:opacity-70"
5887
+ );
5888
+ var Label2 = React10.forwardRef((_a, ref) => {
4183
5889
  var _b = _a, { className } = _b, props = __objRest(_b, ["className"]);
4184
5890
  return /* @__PURE__ */ (0, import_jsx_runtime12.jsx)(
5891
+ LabelPrimitive.Root,
5892
+ __spreadValues({
5893
+ ref,
5894
+ className: cn(labelVariants(), className)
5895
+ }, props)
5896
+ );
5897
+ });
5898
+ Label2.displayName = LabelPrimitive.Root.displayName;
5899
+
5900
+ // src/components/ui/textarea.tsx
5901
+ var React11 = __toESM(require("react"));
5902
+ var import_jsx_runtime13 = require("react/jsx-runtime");
5903
+ var Textarea = React11.forwardRef((_a, ref) => {
5904
+ var _b = _a, { className } = _b, props = __objRest(_b, ["className"]);
5905
+ return /* @__PURE__ */ (0, import_jsx_runtime13.jsx)(
4185
5906
  "textarea",
4186
5907
  __spreadValues({
4187
5908
  className: cn(
@@ -4195,19 +5916,12 @@ var Textarea = React10.forwardRef((_a, ref) => {
4195
5916
  Textarea.displayName = "Textarea";
4196
5917
 
4197
5918
  // src/components/RecordForm.tsx
4198
- var import_jsx_runtime13 = require("react/jsx-runtime");
4199
- var COLOR_MAP = {
4200
- gray: "bg-muted",
4201
- blue: "bg-blue-500",
4202
- green: "bg-green-500",
4203
- yellow: "bg-amber-500",
4204
- red: "bg-red-500",
4205
- purple: "bg-purple-500"
4206
- };
5919
+ var import_jsx_runtime14 = require("react/jsx-runtime");
4207
5920
  var DEFAULT_INITIAL_VALUES = {};
4208
5921
  function RecordForm({ schema, initialValues = DEFAULT_INITIAL_VALUES, onSubmit, mode }) {
4209
- const [formData, setFormData] = (0, import_react.useState)(initialValues);
4210
- (0, import_react.useEffect)(() => {
5922
+ const { t } = useI18n();
5923
+ const [formData, setFormData] = (0, import_react3.useState)(initialValues);
5924
+ (0, import_react3.useEffect)(() => {
4211
5925
  setFormData(initialValues);
4212
5926
  }, [initialValues]);
4213
5927
  const handleChange = (fieldId, value) => {
@@ -4220,44 +5934,44 @@ function RecordForm({ schema, initialValues = DEFAULT_INITIAL_VALUES, onSubmit,
4220
5934
  };
4221
5935
  const isReadOnly = mode === "view";
4222
5936
  const renderField = (field) => {
4223
- var _a, _b, _c;
5937
+ var _a, _b, _c, _d;
4224
5938
  const value = (_a = formData[field.id]) != null ? _a : "";
4225
5939
  if (field.id === "description" || field.type === "text" && field.name.toLowerCase().includes("description")) {
4226
- return /* @__PURE__ */ (0, import_jsx_runtime13.jsx)(
5940
+ return /* @__PURE__ */ (0, import_jsx_runtime14.jsx)(
4227
5941
  Textarea,
4228
5942
  {
4229
5943
  value,
4230
5944
  disabled: isReadOnly,
4231
5945
  onChange: (e) => handleChange(field.id, e.target.value),
4232
- placeholder: isReadOnly ? "" : `Enter ${field.name}...`,
5946
+ placeholder: isReadOnly ? "" : `${t("enterDetails")}...`,
4233
5947
  className: "min-h-[100px] resize-none"
4234
5948
  }
4235
5949
  );
4236
5950
  }
4237
5951
  switch (field.type) {
4238
5952
  case "text":
4239
- return /* @__PURE__ */ (0, import_jsx_runtime13.jsx)(
5953
+ return /* @__PURE__ */ (0, import_jsx_runtime14.jsx)(
4240
5954
  Input,
4241
5955
  {
4242
5956
  value,
4243
5957
  disabled: isReadOnly,
4244
5958
  onChange: (e) => handleChange(field.id, e.target.value),
4245
- placeholder: isReadOnly ? "" : `Enter ${field.name}...`
5959
+ placeholder: isReadOnly ? "" : `${t("add")} ${field.name}...`
4246
5960
  }
4247
5961
  );
4248
5962
  case "number":
4249
- return /* @__PURE__ */ (0, import_jsx_runtime13.jsx)(
5963
+ return /* @__PURE__ */ (0, import_jsx_runtime14.jsx)(
4250
5964
  Input,
4251
5965
  {
4252
5966
  type: "number",
4253
5967
  value,
4254
5968
  disabled: isReadOnly,
4255
5969
  onChange: (e) => handleChange(field.id, e.target.value),
4256
- placeholder: isReadOnly ? "" : `Enter ${field.name}...`
5970
+ placeholder: isReadOnly ? "" : `${t("add")} ${field.name}...`
4257
5971
  }
4258
5972
  );
4259
5973
  case "date":
4260
- return /* @__PURE__ */ (0, import_jsx_runtime13.jsx)(
5974
+ return /* @__PURE__ */ (0, import_jsx_runtime14.jsx)(
4261
5975
  Input,
4262
5976
  {
4263
5977
  type: "date",
@@ -4267,8 +5981,8 @@ function RecordForm({ schema, initialValues = DEFAULT_INITIAL_VALUES, onSubmit,
4267
5981
  }
4268
5982
  );
4269
5983
  case "checkbox":
4270
- return /* @__PURE__ */ (0, import_jsx_runtime13.jsxs)("div", { className: "flex items-center gap-2", children: [
4271
- /* @__PURE__ */ (0, import_jsx_runtime13.jsx)(
5984
+ return /* @__PURE__ */ (0, import_jsx_runtime14.jsxs)("div", { className: "flex items-center gap-2", children: [
5985
+ /* @__PURE__ */ (0, import_jsx_runtime14.jsx)(
4272
5986
  Checkbox,
4273
5987
  {
4274
5988
  id: field.id,
@@ -4277,28 +5991,33 @@ function RecordForm({ schema, initialValues = DEFAULT_INITIAL_VALUES, onSubmit,
4277
5991
  onCheckedChange: (checked) => handleChange(field.id, checked)
4278
5992
  }
4279
5993
  ),
4280
- /* @__PURE__ */ (0, import_jsx_runtime13.jsx)(Label, { htmlFor: field.id, className: "cursor-pointer text-sm", children: value ? "Yes" : "No" })
5994
+ /* @__PURE__ */ (0, import_jsx_runtime14.jsx)(Label2, { htmlFor: field.id, className: "cursor-pointer text-sm", children: value ? t("yes") : t("no") })
4281
5995
  ] });
4282
5996
  case "select":
4283
5997
  if (isReadOnly) {
4284
- return value ? /* @__PURE__ */ (0, import_jsx_runtime13.jsx)(Badge, { variant: "secondary", children: value }) : /* @__PURE__ */ (0, import_jsx_runtime13.jsx)("span", { className: "text-muted-foreground text-sm", children: "None" });
5998
+ if (!value) return /* @__PURE__ */ (0, import_jsx_runtime14.jsx)("span", { className: "text-muted-foreground text-sm", children: t("none") });
5999
+ const option = (_b = field.options) == null ? void 0 : _b.find((o) => o.name === value);
6000
+ return /* @__PURE__ */ (0, import_jsx_runtime14.jsxs)("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: [
6001
+ /* @__PURE__ */ (0, import_jsx_runtime14.jsx)("div", { className: cn("w-2 h-2 rounded-full", getDotColor(option == null ? void 0 : option.color)) }),
6002
+ value
6003
+ ] });
4285
6004
  }
4286
- return /* @__PURE__ */ (0, import_jsx_runtime13.jsxs)(Select, { value, onValueChange: (v) => handleChange(field.id, v), children: [
4287
- /* @__PURE__ */ (0, import_jsx_runtime13.jsx)(SelectTrigger, { children: /* @__PURE__ */ (0, import_jsx_runtime13.jsx)(SelectValue, { placeholder: "Select..." }) }),
4288
- /* @__PURE__ */ (0, import_jsx_runtime13.jsx)(SelectContent, { children: (_b = field.options) == null ? void 0 : _b.map((opt) => /* @__PURE__ */ (0, import_jsx_runtime13.jsx)(SelectItem, { value: opt.name, children: /* @__PURE__ */ (0, import_jsx_runtime13.jsxs)("div", { className: "flex items-center gap-2", children: [
4289
- /* @__PURE__ */ (0, import_jsx_runtime13.jsx)("div", { className: cn("w-2 h-2 rounded-full", COLOR_MAP[opt.color || "gray"]) }),
6005
+ return /* @__PURE__ */ (0, import_jsx_runtime14.jsxs)(Select, { value, onValueChange: (v) => handleChange(field.id, v), children: [
6006
+ /* @__PURE__ */ (0, import_jsx_runtime14.jsx)(SelectTrigger, { children: /* @__PURE__ */ (0, import_jsx_runtime14.jsx)(SelectValue, { placeholder: t("selectValue") }) }),
6007
+ /* @__PURE__ */ (0, import_jsx_runtime14.jsx)(SelectContent, { children: (_c = field.options) == null ? void 0 : _c.map((opt) => /* @__PURE__ */ (0, import_jsx_runtime14.jsx)(SelectItem, { value: opt.name, children: /* @__PURE__ */ (0, import_jsx_runtime14.jsxs)("div", { className: "flex items-center gap-2", children: [
6008
+ /* @__PURE__ */ (0, import_jsx_runtime14.jsx)("div", { className: cn("w-2 h-2 rounded-full", getDotColor(opt.color)) }),
4290
6009
  opt.name
4291
6010
  ] }) }, opt.id)) })
4292
6011
  ] });
4293
6012
  case "multiSelect":
4294
6013
  const selectedValues = Array.isArray(value) ? value : [];
4295
6014
  if (isReadOnly) {
4296
- return /* @__PURE__ */ (0, import_jsx_runtime13.jsxs)("div", { className: "flex flex-wrap gap-1", children: [
4297
- selectedValues.map((v) => /* @__PURE__ */ (0, import_jsx_runtime13.jsx)(Badge, { variant: "secondary", children: v }, v)),
4298
- selectedValues.length === 0 && /* @__PURE__ */ (0, import_jsx_runtime13.jsx)("span", { className: "text-muted-foreground text-sm", children: "None" })
6015
+ return /* @__PURE__ */ (0, import_jsx_runtime14.jsxs)("div", { className: "flex flex-wrap gap-1", children: [
6016
+ selectedValues.map((v) => /* @__PURE__ */ (0, import_jsx_runtime14.jsx)(Badge, { variant: "secondary", children: v }, v)),
6017
+ selectedValues.length === 0 && /* @__PURE__ */ (0, import_jsx_runtime14.jsx)("span", { className: "text-muted-foreground text-sm", children: t("none") })
4299
6018
  ] });
4300
6019
  }
4301
- return /* @__PURE__ */ (0, import_jsx_runtime13.jsx)("div", { className: "flex flex-wrap gap-2", children: (_c = field.options) == null ? void 0 : _c.map((opt) => /* @__PURE__ */ (0, import_jsx_runtime13.jsx)(
6020
+ return /* @__PURE__ */ (0, import_jsx_runtime14.jsx)("div", { className: "flex flex-wrap gap-2", children: (_d = field.options) == null ? void 0 : _d.map((opt) => /* @__PURE__ */ (0, import_jsx_runtime14.jsx)(
4302
6021
  Badge,
4303
6022
  {
4304
6023
  variant: selectedValues.includes(opt.name) ? "default" : "outline",
@@ -4312,49 +6031,49 @@ function RecordForm({ schema, initialValues = DEFAULT_INITIAL_VALUES, onSubmit,
4312
6031
  opt.id
4313
6032
  )) });
4314
6033
  default:
4315
- return /* @__PURE__ */ (0, import_jsx_runtime13.jsx)(
6034
+ return /* @__PURE__ */ (0, import_jsx_runtime14.jsx)(
4316
6035
  Input,
4317
6036
  {
4318
6037
  value,
4319
6038
  disabled: isReadOnly,
4320
6039
  onChange: (e) => handleChange(field.id, e.target.value),
4321
- placeholder: isReadOnly ? "" : `Enter ${field.name}...`
6040
+ placeholder: isReadOnly ? "" : `${t("add")} ${field.name}...`
4322
6041
  }
4323
6042
  );
4324
6043
  }
4325
6044
  };
4326
- return /* @__PURE__ */ (0, import_jsx_runtime13.jsxs)("form", { id: "record-form", onSubmit: handleSubmit, className: "space-y-5", children: [
4327
- schema.fields.map((field) => /* @__PURE__ */ (0, import_jsx_runtime13.jsxs)("div", { className: "space-y-2", children: [
4328
- /* @__PURE__ */ (0, import_jsx_runtime13.jsxs)(Label, { className: "text-sm font-medium", children: [
6045
+ return /* @__PURE__ */ (0, import_jsx_runtime14.jsxs)("form", { id: "record-form", onSubmit: handleSubmit, className: "space-y-5", children: [
6046
+ schema.fields.map((field) => /* @__PURE__ */ (0, import_jsx_runtime14.jsxs)("div", { className: "space-y-3", children: [
6047
+ /* @__PURE__ */ (0, import_jsx_runtime14.jsxs)(Label2, { className: "text-sm font-medium mb-2 block", children: [
4329
6048
  field.name,
4330
- field.isPrimary && /* @__PURE__ */ (0, import_jsx_runtime13.jsx)(Badge, { variant: "outline", className: "ml-2 text-xs", children: "Primary" })
6049
+ field.isPrimary && /* @__PURE__ */ (0, import_jsx_runtime14.jsx)(Badge, { variant: "outline", className: "ml-2 text-xs", children: t("primary") })
4331
6050
  ] }),
4332
6051
  renderField(field)
4333
6052
  ] }, field.id)),
4334
- mode !== "view" && /* @__PURE__ */ (0, import_jsx_runtime13.jsx)("div", { className: "flex justify-end pt-4 border-t", children: /* @__PURE__ */ (0, import_jsx_runtime13.jsx)(Button, { type: "submit", children: mode === "add" ? "Create Record" : "Save Changes" }) })
6053
+ mode !== "view" && /* @__PURE__ */ (0, import_jsx_runtime14.jsx)("div", { className: "flex justify-end pt-4 border-t", children: /* @__PURE__ */ (0, import_jsx_runtime14.jsx)(Button, { type: "submit", children: mode === "add" ? t("createRecord") : t("save") }) })
4335
6054
  ] });
4336
6055
  }
4337
6056
 
4338
6057
  // src/components/views/FormView.tsx
4339
- var import_jsx_runtime14 = require("react/jsx-runtime");
6058
+ var import_jsx_runtime15 = require("react/jsx-runtime");
4340
6059
  function FormView({ schema, onCreateRecord }) {
4341
- const [success, setSuccess] = (0, import_react2.useState)(false);
6060
+ const [success, setSuccess] = (0, import_react4.useState)(false);
4342
6061
  const handleSubmit = (formData) => {
4343
6062
  onCreateRecord(formData);
4344
6063
  setSuccess(true);
4345
6064
  setTimeout(() => setSuccess(false), 3e3);
4346
6065
  };
4347
- return /* @__PURE__ */ (0, import_jsx_runtime14.jsx)("div", { className: "h-full overflow-auto p-8 bg-muted/30", children: /* @__PURE__ */ (0, import_jsx_runtime14.jsx)("div", { className: "max-w-xl mx-auto", children: /* @__PURE__ */ (0, import_jsx_runtime14.jsxs)(Card, { children: [
4348
- /* @__PURE__ */ (0, import_jsx_runtime14.jsxs)(CardHeader, { children: [
4349
- /* @__PURE__ */ (0, import_jsx_runtime14.jsx)(CardTitle, { children: "Add New Record" }),
4350
- /* @__PURE__ */ (0, import_jsx_runtime14.jsx)(CardDescription, { children: "Fill out the form below to add a new entry to the database." })
6066
+ return /* @__PURE__ */ (0, import_jsx_runtime15.jsx)("div", { className: "h-full overflow-auto p-8 bg-muted/30", children: /* @__PURE__ */ (0, import_jsx_runtime15.jsx)("div", { className: "max-w-xl mx-auto", children: /* @__PURE__ */ (0, import_jsx_runtime15.jsxs)(Card, { children: [
6067
+ /* @__PURE__ */ (0, import_jsx_runtime15.jsxs)(CardHeader, { children: [
6068
+ /* @__PURE__ */ (0, import_jsx_runtime15.jsx)(CardTitle, { children: "Add New Record" }),
6069
+ /* @__PURE__ */ (0, import_jsx_runtime15.jsx)(CardDescription, { children: "Fill out the form below to add a new entry to the database." })
4351
6070
  ] }),
4352
- /* @__PURE__ */ (0, import_jsx_runtime14.jsxs)(CardContent, { children: [
4353
- success && /* @__PURE__ */ (0, import_jsx_runtime14.jsxs)(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: [
4354
- /* @__PURE__ */ (0, import_jsx_runtime14.jsx)(import_lucide_react4.CheckCircle2, { className: "h-4 w-4" }),
4355
- /* @__PURE__ */ (0, import_jsx_runtime14.jsx)(AlertDescription, { children: "Record created successfully!" })
6071
+ /* @__PURE__ */ (0, import_jsx_runtime15.jsxs)(CardContent, { children: [
6072
+ success && /* @__PURE__ */ (0, import_jsx_runtime15.jsxs)(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: [
6073
+ /* @__PURE__ */ (0, import_jsx_runtime15.jsx)(import_lucide_react4.CheckCircle2, { className: "h-4 w-4" }),
6074
+ /* @__PURE__ */ (0, import_jsx_runtime15.jsx)(AlertDescription, { children: "Record created successfully!" })
4356
6075
  ] }),
4357
- /* @__PURE__ */ (0, import_jsx_runtime14.jsx)(
6076
+ /* @__PURE__ */ (0, import_jsx_runtime15.jsx)(
4358
6077
  RecordForm,
4359
6078
  {
4360
6079
  schema,
@@ -4367,156 +6086,17 @@ function FormView({ schema, onCreateRecord }) {
4367
6086
  }
4368
6087
 
4369
6088
  // src/components/views/KanbanView.tsx
4370
- var import_react3 = require("react");
4371
- var import_lucide_react5 = require("lucide-react");
4372
- var import_jsx_runtime15 = require("react/jsx-runtime");
4373
- var BADGE_COLOR_MAP2 = {
4374
- gray: "bg-muted text-muted-foreground hover:bg-muted/80",
4375
- blue: "bg-blue-100 text-blue-700 dark:bg-blue-900/50 dark:text-blue-300 hover:bg-blue-100/80",
4376
- green: "bg-green-100 text-green-700 dark:bg-green-900/50 dark:text-green-300 hover:bg-green-100/80",
4377
- yellow: "bg-amber-100 text-amber-700 dark:bg-amber-900/50 dark:text-amber-300 hover:bg-amber-100/80",
4378
- red: "bg-red-100 text-red-700 dark:bg-red-900/50 dark:text-red-300 hover:bg-red-100/80",
4379
- purple: "bg-purple-100 text-purple-700 dark:bg-purple-900/50 dark:text-purple-300 hover:bg-purple-100/80"
4380
- };
4381
- var COLUMN_DOT_COLOR_MAP = {
4382
- gray: "bg-gray-400",
4383
- blue: "bg-blue-500",
4384
- green: "bg-green-500",
4385
- yellow: "bg-amber-500",
4386
- red: "bg-red-500",
4387
- purple: "bg-purple-500"
4388
- };
4389
- var FIELD_ICON_MAP = {
4390
- text: import_lucide_react5.AlignLeft,
4391
- number: import_lucide_react5.Hash,
4392
- select: import_lucide_react5.Tag,
4393
- multiSelect: import_lucide_react5.Tags,
4394
- date: import_lucide_react5.Calendar,
4395
- checkbox: import_lucide_react5.CheckSquare,
4396
- user: import_lucide_react5.User
4397
- };
4398
- function KanbanView({ schema, records, onUpdateRecord, onDeleteRecord, onOpenModal }) {
4399
- const [draggedRecord, setDraggedRecord] = (0, import_react3.useState)(null);
4400
- const selectField = getSelectField(schema);
4401
- const primaryField = getPrimaryField(schema);
4402
- const columns = (0, import_react3.useMemo)(() => {
4403
- if (!(selectField == null ? void 0 : selectField.options)) return [];
4404
- return [
4405
- { id: "__empty__", name: "Uncategorized", color: "gray" },
4406
- ...selectField.options
4407
- ];
4408
- }, [selectField]);
4409
- const recordsByColumn = (0, import_react3.useMemo)(() => {
4410
- const grouped = {};
4411
- columns.forEach((col) => {
4412
- grouped[col.id] = [];
4413
- });
4414
- records.forEach((record) => {
4415
- var _a, _b;
4416
- if (!selectField) return;
4417
- const value = record.fields[selectField.id];
4418
- const option = (_a = selectField.options) == null ? void 0 : _a.find((o) => o.name === value);
4419
- const colId = (option == null ? void 0 : option.id) || "__empty__";
4420
- (_b = grouped[colId]) == null ? void 0 : _b.push(record);
4421
- });
4422
- return grouped;
4423
- }, [records, columns, selectField]);
4424
- const handleDragOver = (e) => {
4425
- e.preventDefault();
4426
- };
4427
- const handleDrop = (columnId) => {
4428
- if (!draggedRecord || !selectField) return;
4429
- const column = columns.find((c) => c.id === columnId);
4430
- const value = columnId === "__empty__" ? "" : (column == null ? void 0 : column.name) || "";
4431
- onUpdateRecord(draggedRecord, { [selectField.id]: value });
4432
- setDraggedRecord(null);
4433
- };
4434
- if (!selectField) {
4435
- return /* @__PURE__ */ (0, import_jsx_runtime15.jsx)("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." });
4436
- }
4437
- return /* @__PURE__ */ (0, import_jsx_runtime15.jsx)("div", { className: "w-full grow overflow-hidden bg-background", children: /* @__PURE__ */ (0, import_jsx_runtime15.jsx)("div", { className: "relative w-full h-full overflow-x-auto overflow-y-hidden p-2", children: /* @__PURE__ */ (0, import_jsx_runtime15.jsx)("div", { className: "flex h-full", children: columns.map((column) => {
4438
- var _a, _b;
4439
- return /* @__PURE__ */ (0, import_jsx_runtime15.jsx)("div", { className: "h-full pr-4", children: /* @__PURE__ */ (0, import_jsx_runtime15.jsxs)("div", { className: "w-[264px] h-full border bg-muted rounded-md shrink-0 flex flex-col overflow-hidden", children: [
4440
- /* @__PURE__ */ (0, import_jsx_runtime15.jsx)("div", { className: "w-full", children: /* @__PURE__ */ (0, import_jsx_runtime15.jsx)("div", { className: "flex h-12 w-full shrink-0 items-center justify-between border-b bg-card px-4", children: /* @__PURE__ */ (0, import_jsx_runtime15.jsxs)("div", { className: "flex items-center space-x-2 overflow-hidden text-muted-foreground", children: [
4441
- /* @__PURE__ */ (0, import_jsx_runtime15.jsx)("div", { className: cn("w-2 h-2 rounded-full shrink-0", COLUMN_DOT_COLOR_MAP[column.color || "gray"]) }),
4442
- /* @__PURE__ */ (0, import_jsx_runtime15.jsx)("span", { className: "text-sm font-semibold truncate", children: column.name }),
4443
- /* @__PURE__ */ (0, import_jsx_runtime15.jsx)("span", { className: "rounded-xl border px-2 text-xs", children: ((_a = recordsByColumn[column.id]) == null ? void 0 : _a.length) || 0 })
4444
- ] }) }) }),
4445
- /* @__PURE__ */ (0, import_jsx_runtime15.jsx)(
4446
- "div",
4447
- {
4448
- className: "flex-1 w-full overflow-y-auto min-h-0",
4449
- onDragOver: handleDragOver,
4450
- onDrop: () => handleDrop(column.id),
4451
- children: /* @__PURE__ */ (0, import_jsx_runtime15.jsx)("div", { className: "flex flex-col pt-3 pb-3", children: (_b = recordsByColumn[column.id]) == null ? void 0 : _b.map((record) => /* @__PURE__ */ (0, import_jsx_runtime15.jsx)("div", { className: "w-full px-3 mb-2", children: /* @__PURE__ */ (0, import_jsx_runtime15.jsxs)(
4452
- "div",
4453
- {
4454
- draggable: true,
4455
- onDragStart: () => setDraggedRecord(record.id),
4456
- onClick: () => onOpenModal("view", record),
4457
- className: cn(
4458
- "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",
4459
- draggedRecord === record.id && "opacity-50 ring-2 ring-primary"
4460
- ),
4461
- children: [
4462
- /* @__PURE__ */ (0, import_jsx_runtime15.jsx)("div", { className: "text-base font-semibold", children: primaryField ? record.fields[primaryField.id] || "Untitled" : "Untitled" }),
4463
- schema.fields.filter((f) => !f.isPrimary && f.id !== selectField.id).map((field) => {
4464
- const value = record.fields[field.id];
4465
- if (value === void 0 || value === null || value === "" || value === false) return null;
4466
- const Icon2 = FIELD_ICON_MAP[field.type] || import_lucide_react5.AlignLeft;
4467
- return /* @__PURE__ */ (0, import_jsx_runtime15.jsxs)("div", { children: [
4468
- /* @__PURE__ */ (0, import_jsx_runtime15.jsxs)("div", { className: "mb-1 flex items-center space-x-1 text-muted-foreground", children: [
4469
- /* @__PURE__ */ (0, import_jsx_runtime15.jsx)(Icon2, { className: "w-4 h-4 text-sm" }),
4470
- /* @__PURE__ */ (0, import_jsx_runtime15.jsx)("span", { className: "text-xs", children: field.name })
4471
- ] }),
4472
- /* @__PURE__ */ (0, import_jsx_runtime15.jsx)("div", { className: "w-full text-[13px] leading-5 breaking-all line-clamp-6", children: field.type === "select" ? /* @__PURE__ */ (0, import_jsx_runtime15.jsx)("div", { className: "flex gap-1 flex-wrap", children: (() => {
4473
- var _a2;
4474
- const option = (_a2 = field.options) == null ? void 0 : _a2.find((o) => o.name === value);
4475
- return /* @__PURE__ */ (0, import_jsx_runtime15.jsx)(
4476
- "div",
4477
- {
4478
- className: cn(
4479
- "text-xs px-2 h-5 rounded-md flex items-center gap-1 min-w-0 truncate",
4480
- BADGE_COLOR_MAP2[(option == null ? void 0 : option.color) || "gray"]
4481
- ),
4482
- title: String(value),
4483
- children: /* @__PURE__ */ (0, import_jsx_runtime15.jsx)("span", { className: "min-w-0 truncate", children: String(value) })
4484
- }
4485
- );
4486
- })() }) : field.type === "checkbox" ? /* @__PURE__ */ (0, import_jsx_runtime15.jsx)("div", { className: "flex gap-1 flex-wrap", children: /* @__PURE__ */ (0, import_jsx_runtime15.jsx)("div", { className: cn(
4487
- "flex items-center justify-center w-5 h-5 rounded-sm border border-primary shadow bg-primary text-primary-foreground"
4488
- ), children: /* @__PURE__ */ (0, import_jsx_runtime15.jsx)(import_lucide_react5.CheckSquare, { className: "h-4 w-4" }) }) }) : /* @__PURE__ */ (0, import_jsx_runtime15.jsx)("span", { title: String(value), className: "whitespace-pre-wrap break-all", children: String(value) }) })
4489
- ] }, field.id);
4490
- })
4491
- ]
4492
- }
4493
- ) }, record.id)) })
4494
- }
4495
- ),
4496
- /* @__PURE__ */ (0, import_jsx_runtime15.jsx)("div", { className: "flex items-center justify-center rounded-b-md bg-slate-50 px-3 py-2 dark:bg-muted", children: /* @__PURE__ */ (0, import_jsx_runtime15.jsx)(
4497
- Button,
4498
- {
4499
- variant: "outline",
4500
- 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",
4501
- onClick: () => onOpenModal("add"),
4502
- children: /* @__PURE__ */ (0, import_jsx_runtime15.jsx)(import_lucide_react5.Plus, { className: "w-5 h-5" })
4503
- }
4504
- ) })
4505
- ] }) }, column.id);
4506
- }) }) }) });
4507
- }
4508
-
4509
- // src/components/views/GalleryView.tsx
4510
- var import_lucide_react7 = require("lucide-react");
6089
+ var import_react5 = require("react");
6090
+ var import_lucide_react6 = require("lucide-react");
4511
6091
 
4512
6092
  // src/components/ui/dropdown-menu.tsx
4513
- var React11 = __toESM(require("react"));
6093
+ var React12 = __toESM(require("react"));
4514
6094
  var DropdownMenuPrimitive = __toESM(require("@radix-ui/react-dropdown-menu"));
4515
- var import_lucide_react6 = require("lucide-react");
6095
+ var import_lucide_react5 = require("lucide-react");
4516
6096
  var import_jsx_runtime16 = require("react/jsx-runtime");
4517
6097
  var DropdownMenu = DropdownMenuPrimitive.Root;
4518
6098
  var DropdownMenuTrigger = DropdownMenuPrimitive.Trigger;
4519
- var DropdownMenuSubTrigger = React11.forwardRef((_a, ref) => {
6099
+ var DropdownMenuSubTrigger = React12.forwardRef((_a, ref) => {
4520
6100
  var _b = _a, { className, inset, children } = _b, props = __objRest(_b, ["className", "inset", "children"]);
4521
6101
  return /* @__PURE__ */ (0, import_jsx_runtime16.jsxs)(
4522
6102
  DropdownMenuPrimitive.SubTrigger,
@@ -4530,13 +6110,13 @@ var DropdownMenuSubTrigger = React11.forwardRef((_a, ref) => {
4530
6110
  }, props), {
4531
6111
  children: [
4532
6112
  children,
4533
- /* @__PURE__ */ (0, import_jsx_runtime16.jsx)(import_lucide_react6.ChevronRight, { className: "ml-auto" })
6113
+ /* @__PURE__ */ (0, import_jsx_runtime16.jsx)(import_lucide_react5.ChevronRight, { className: "ml-auto" })
4534
6114
  ]
4535
6115
  })
4536
6116
  );
4537
6117
  });
4538
6118
  DropdownMenuSubTrigger.displayName = DropdownMenuPrimitive.SubTrigger.displayName;
4539
- var DropdownMenuSubContent = React11.forwardRef((_a, ref) => {
6119
+ var DropdownMenuSubContent = React12.forwardRef((_a, ref) => {
4540
6120
  var _b = _a, { className } = _b, props = __objRest(_b, ["className"]);
4541
6121
  return /* @__PURE__ */ (0, import_jsx_runtime16.jsx)(
4542
6122
  DropdownMenuPrimitive.SubContent,
@@ -4550,7 +6130,7 @@ var DropdownMenuSubContent = React11.forwardRef((_a, ref) => {
4550
6130
  );
4551
6131
  });
4552
6132
  DropdownMenuSubContent.displayName = DropdownMenuPrimitive.SubContent.displayName;
4553
- var DropdownMenuContent = React11.forwardRef((_a, ref) => {
6133
+ var DropdownMenuContent = React12.forwardRef((_a, ref) => {
4554
6134
  var _b = _a, { className, sideOffset = 4 } = _b, props = __objRest(_b, ["className", "sideOffset"]);
4555
6135
  return /* @__PURE__ */ (0, import_jsx_runtime16.jsx)(DropdownMenuPrimitive.Portal, { children: /* @__PURE__ */ (0, import_jsx_runtime16.jsx)(
4556
6136
  DropdownMenuPrimitive.Content,
@@ -4566,7 +6146,7 @@ var DropdownMenuContent = React11.forwardRef((_a, ref) => {
4566
6146
  ) });
4567
6147
  });
4568
6148
  DropdownMenuContent.displayName = DropdownMenuPrimitive.Content.displayName;
4569
- var DropdownMenuItem = React11.forwardRef((_a, ref) => {
6149
+ var DropdownMenuItem = React12.forwardRef((_a, ref) => {
4570
6150
  var _b = _a, { className, inset } = _b, props = __objRest(_b, ["className", "inset"]);
4571
6151
  return /* @__PURE__ */ (0, import_jsx_runtime16.jsx)(
4572
6152
  DropdownMenuPrimitive.Item,
@@ -4581,7 +6161,7 @@ var DropdownMenuItem = React11.forwardRef((_a, ref) => {
4581
6161
  );
4582
6162
  });
4583
6163
  DropdownMenuItem.displayName = DropdownMenuPrimitive.Item.displayName;
4584
- var DropdownMenuCheckboxItem = React11.forwardRef((_a, ref) => {
6164
+ var DropdownMenuCheckboxItem = React12.forwardRef((_a, ref) => {
4585
6165
  var _b = _a, { className, children, checked } = _b, props = __objRest(_b, ["className", "children", "checked"]);
4586
6166
  return /* @__PURE__ */ (0, import_jsx_runtime16.jsxs)(
4587
6167
  DropdownMenuPrimitive.CheckboxItem,
@@ -4594,14 +6174,14 @@ var DropdownMenuCheckboxItem = React11.forwardRef((_a, ref) => {
4594
6174
  checked
4595
6175
  }, props), {
4596
6176
  children: [
4597
- /* @__PURE__ */ (0, import_jsx_runtime16.jsx)("span", { className: "absolute left-2 flex h-3.5 w-3.5 items-center justify-center", children: /* @__PURE__ */ (0, import_jsx_runtime16.jsx)(DropdownMenuPrimitive.ItemIndicator, { children: /* @__PURE__ */ (0, import_jsx_runtime16.jsx)(import_lucide_react6.Check, { className: "h-4 w-4" }) }) }),
6177
+ /* @__PURE__ */ (0, import_jsx_runtime16.jsx)("span", { className: "absolute left-2 flex h-3.5 w-3.5 items-center justify-center", children: /* @__PURE__ */ (0, import_jsx_runtime16.jsx)(DropdownMenuPrimitive.ItemIndicator, { children: /* @__PURE__ */ (0, import_jsx_runtime16.jsx)(import_lucide_react5.Check, { className: "h-4 w-4" }) }) }),
4598
6178
  children
4599
6179
  ]
4600
6180
  })
4601
6181
  );
4602
6182
  });
4603
6183
  DropdownMenuCheckboxItem.displayName = DropdownMenuPrimitive.CheckboxItem.displayName;
4604
- var DropdownMenuRadioItem = React11.forwardRef((_a, ref) => {
6184
+ var DropdownMenuRadioItem = React12.forwardRef((_a, ref) => {
4605
6185
  var _b = _a, { className, children } = _b, props = __objRest(_b, ["className", "children"]);
4606
6186
  return /* @__PURE__ */ (0, import_jsx_runtime16.jsxs)(
4607
6187
  DropdownMenuPrimitive.RadioItem,
@@ -4613,14 +6193,14 @@ var DropdownMenuRadioItem = React11.forwardRef((_a, ref) => {
4613
6193
  )
4614
6194
  }, props), {
4615
6195
  children: [
4616
- /* @__PURE__ */ (0, import_jsx_runtime16.jsx)("span", { className: "absolute left-2 flex h-3.5 w-3.5 items-center justify-center", children: /* @__PURE__ */ (0, import_jsx_runtime16.jsx)(DropdownMenuPrimitive.ItemIndicator, { children: /* @__PURE__ */ (0, import_jsx_runtime16.jsx)(import_lucide_react6.Circle, { className: "h-2 w-2 fill-current" }) }) }),
6196
+ /* @__PURE__ */ (0, import_jsx_runtime16.jsx)("span", { className: "absolute left-2 flex h-3.5 w-3.5 items-center justify-center", children: /* @__PURE__ */ (0, import_jsx_runtime16.jsx)(DropdownMenuPrimitive.ItemIndicator, { children: /* @__PURE__ */ (0, import_jsx_runtime16.jsx)(import_lucide_react5.Circle, { className: "h-2 w-2 fill-current" }) }) }),
4617
6197
  children
4618
6198
  ]
4619
6199
  })
4620
6200
  );
4621
6201
  });
4622
6202
  DropdownMenuRadioItem.displayName = DropdownMenuPrimitive.RadioItem.displayName;
4623
- var DropdownMenuLabel = React11.forwardRef((_a, ref) => {
6203
+ var DropdownMenuLabel = React12.forwardRef((_a, ref) => {
4624
6204
  var _b = _a, { className, inset } = _b, props = __objRest(_b, ["className", "inset"]);
4625
6205
  return /* @__PURE__ */ (0, import_jsx_runtime16.jsx)(
4626
6206
  DropdownMenuPrimitive.Label,
@@ -4635,7 +6215,7 @@ var DropdownMenuLabel = React11.forwardRef((_a, ref) => {
4635
6215
  );
4636
6216
  });
4637
6217
  DropdownMenuLabel.displayName = DropdownMenuPrimitive.Label.displayName;
4638
- var DropdownMenuSeparator = React11.forwardRef((_a, ref) => {
6218
+ var DropdownMenuSeparator = React12.forwardRef((_a, ref) => {
4639
6219
  var _b = _a, { className } = _b, props = __objRest(_b, ["className"]);
4640
6220
  return /* @__PURE__ */ (0, import_jsx_runtime16.jsx)(
4641
6221
  DropdownMenuPrimitive.Separator,
@@ -4661,62 +6241,273 @@ var DropdownMenuShortcut = (_a) => {
4661
6241
  };
4662
6242
  DropdownMenuShortcut.displayName = "DropdownMenuShortcut";
4663
6243
 
4664
- // src/components/views/GalleryView.tsx
6244
+ // src/components/views/KanbanView.tsx
4665
6245
  var import_jsx_runtime17 = require("react/jsx-runtime");
6246
+ var FIELD_ICON_MAP = {
6247
+ text: import_lucide_react6.AlignLeft,
6248
+ number: import_lucide_react6.Hash,
6249
+ select: import_lucide_react6.Tag,
6250
+ multiSelect: import_lucide_react6.Tags,
6251
+ date: import_lucide_react6.Calendar,
6252
+ checkbox: import_lucide_react6.CheckSquare,
6253
+ user: import_lucide_react6.User
6254
+ };
6255
+ function KanbanView({ schema, records, onUpdateRecord, onDeleteRecord, onOpenModal }) {
6256
+ const [draggedRecord, setDraggedRecord] = (0, import_react5.useState)(null);
6257
+ const { t } = useI18n();
6258
+ const selectField = getSelectField(schema);
6259
+ const primaryField = getPrimaryField(schema);
6260
+ const columns = (0, import_react5.useMemo)(() => {
6261
+ var _a, _b;
6262
+ if (!selectField) return [];
6263
+ const groups = {
6264
+ "uncategorized": []
6265
+ };
6266
+ (_a = selectField.options) == null ? void 0 : _a.forEach((opt) => {
6267
+ groups[opt.name] = [];
6268
+ });
6269
+ records.forEach((record) => {
6270
+ const value = record.fields[selectField.id];
6271
+ if (value && groups[value]) {
6272
+ groups[value].push(record);
6273
+ } else {
6274
+ groups["uncategorized"].push(record);
6275
+ }
6276
+ });
6277
+ return [
6278
+ ...((_b = selectField.options) == null ? void 0 : _b.map((opt) => ({
6279
+ id: opt.name,
6280
+ name: opt.name,
6281
+ color: opt.color,
6282
+ records: groups[opt.name] || []
6283
+ }))) || [],
6284
+ {
6285
+ id: "uncategorized",
6286
+ name: t("uncategorized"),
6287
+ color: "gray",
6288
+ records: groups["uncategorized"]
6289
+ }
6290
+ ];
6291
+ }, [selectField, records, t]);
6292
+ const recordsByColumn = (0, import_react5.useMemo)(() => {
6293
+ const grouped = {};
6294
+ columns.forEach((col) => {
6295
+ grouped[col.id] = col.records;
6296
+ });
6297
+ return grouped;
6298
+ }, [columns]);
6299
+ const handleDragOver = (e) => {
6300
+ e.preventDefault();
6301
+ };
6302
+ const handleDrop = (columnId) => {
6303
+ if (!draggedRecord || !selectField) return;
6304
+ const column = columns.find((c) => c.id === columnId);
6305
+ const value = columnId === "__empty__" ? "" : (column == null ? void 0 : column.name) || "";
6306
+ onUpdateRecord(draggedRecord, { [selectField.id]: value });
6307
+ setDraggedRecord(null);
6308
+ };
6309
+ if (!selectField) {
6310
+ return /* @__PURE__ */ (0, import_jsx_runtime17.jsx)("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." });
6311
+ }
6312
+ return /* @__PURE__ */ (0, import_jsx_runtime17.jsx)("div", { className: "w-full grow overflow-hidden bg-background", children: /* @__PURE__ */ (0, import_jsx_runtime17.jsx)("div", { className: "relative w-full h-full overflow-x-auto overflow-y-hidden p-2", children: /* @__PURE__ */ (0, import_jsx_runtime17.jsx)("div", { className: "flex h-full", children: columns.map((column) => {
6313
+ var _a, _b;
6314
+ return /* @__PURE__ */ (0, import_jsx_runtime17.jsx)("div", { className: "h-full pr-4", children: /* @__PURE__ */ (0, import_jsx_runtime17.jsxs)("div", { className: "w-[264px] h-full border bg-muted rounded-md shrink-0 flex flex-col overflow-hidden", children: [
6315
+ /* @__PURE__ */ (0, import_jsx_runtime17.jsx)("div", { className: "w-full", children: /* @__PURE__ */ (0, import_jsx_runtime17.jsx)("div", { className: "flex h-12 w-full shrink-0 items-center justify-between border-b bg-card px-4", children: /* @__PURE__ */ (0, import_jsx_runtime17.jsxs)("div", { className: "flex items-center space-x-2 overflow-hidden text-muted-foreground", children: [
6316
+ /* @__PURE__ */ (0, import_jsx_runtime17.jsx)("div", { className: cn("w-2 h-2 rounded-full shrink-0", getDotColor(column.color)) }),
6317
+ /* @__PURE__ */ (0, import_jsx_runtime17.jsx)("span", { className: "text-sm font-semibold truncate", children: column.name }),
6318
+ /* @__PURE__ */ (0, import_jsx_runtime17.jsx)("span", { className: "rounded-xl border px-2 text-xs", children: ((_a = recordsByColumn[column.id]) == null ? void 0 : _a.length) || 0 })
6319
+ ] }) }) }),
6320
+ /* @__PURE__ */ (0, import_jsx_runtime17.jsx)(
6321
+ "div",
6322
+ {
6323
+ className: "flex-1 w-full overflow-y-auto min-h-0",
6324
+ onDragOver: handleDragOver,
6325
+ onDrop: () => handleDrop(column.id),
6326
+ children: /* @__PURE__ */ (0, import_jsx_runtime17.jsx)("div", { className: "flex flex-col pt-3 pb-3", children: (_b = recordsByColumn[column.id]) == null ? void 0 : _b.map((record) => /* @__PURE__ */ (0, import_jsx_runtime17.jsx)("div", { className: "w-full px-3 mb-2", children: /* @__PURE__ */ (0, import_jsx_runtime17.jsxs)(
6327
+ "div",
6328
+ {
6329
+ draggable: true,
6330
+ onDragStart: () => setDraggedRecord(record.id),
6331
+ className: cn(
6332
+ "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",
6333
+ draggedRecord === record.id && "opacity-50 ring-2 ring-primary"
6334
+ ),
6335
+ children: [
6336
+ /* @__PURE__ */ (0, import_jsx_runtime17.jsxs)("div", { className: "flex items-start justify-between gap-2", children: [
6337
+ /* @__PURE__ */ (0, import_jsx_runtime17.jsx)(
6338
+ "div",
6339
+ {
6340
+ className: "text-base font-semibold flex-1 min-w-0",
6341
+ onClick: () => onOpenModal("view", record),
6342
+ children: primaryField ? record.fields[primaryField.id] || t("untitled") : t("untitled")
6343
+ }
6344
+ ),
6345
+ /* @__PURE__ */ (0, import_jsx_runtime17.jsxs)(DropdownMenu, { children: [
6346
+ /* @__PURE__ */ (0, import_jsx_runtime17.jsx)(DropdownMenuTrigger, { asChild: true, onClick: (e) => e.stopPropagation(), children: /* @__PURE__ */ (0, import_jsx_runtime17.jsx)(
6347
+ Button,
6348
+ {
6349
+ variant: "ghost",
6350
+ size: "icon",
6351
+ className: "h-6 w-6 opacity-0 group-hover:opacity-100 transition-opacity shrink-0",
6352
+ children: /* @__PURE__ */ (0, import_jsx_runtime17.jsx)(import_lucide_react6.MoreHorizontal, { className: "h-4 w-4" })
6353
+ }
6354
+ ) }),
6355
+ /* @__PURE__ */ (0, import_jsx_runtime17.jsxs)(DropdownMenuContent, { align: "end", onClick: (e) => e.stopPropagation(), children: [
6356
+ /* @__PURE__ */ (0, import_jsx_runtime17.jsxs)(DropdownMenuItem, { onClick: (e) => {
6357
+ e.stopPropagation();
6358
+ onOpenModal("view", record);
6359
+ }, children: [
6360
+ /* @__PURE__ */ (0, import_jsx_runtime17.jsx)(import_lucide_react6.Eye, { className: "h-4 w-4 mr-2" }),
6361
+ t("view")
6362
+ ] }),
6363
+ /* @__PURE__ */ (0, import_jsx_runtime17.jsxs)(DropdownMenuItem, { onClick: (e) => {
6364
+ e.stopPropagation();
6365
+ onOpenModal("edit", record);
6366
+ }, children: [
6367
+ /* @__PURE__ */ (0, import_jsx_runtime17.jsx)(import_lucide_react6.Pencil, { className: "h-4 w-4 mr-2" }),
6368
+ t("edit")
6369
+ ] }),
6370
+ /* @__PURE__ */ (0, import_jsx_runtime17.jsxs)(
6371
+ DropdownMenuItem,
6372
+ {
6373
+ className: "text-destructive focus:text-destructive",
6374
+ onClick: (e) => {
6375
+ e.stopPropagation();
6376
+ onDeleteRecord(record.id);
6377
+ },
6378
+ children: [
6379
+ /* @__PURE__ */ (0, import_jsx_runtime17.jsx)(import_lucide_react6.Trash2, { className: "h-4 w-4 mr-2" }),
6380
+ t("delete")
6381
+ ]
6382
+ }
6383
+ )
6384
+ ] })
6385
+ ] })
6386
+ ] }),
6387
+ schema.fields.filter((f) => !f.isPrimary && f.id !== selectField.id).map((field) => {
6388
+ const value = record.fields[field.id];
6389
+ if (value === void 0 || value === null || value === "" || value === false) return null;
6390
+ const Icon2 = FIELD_ICON_MAP[field.type] || import_lucide_react6.AlignLeft;
6391
+ return /* @__PURE__ */ (0, import_jsx_runtime17.jsxs)("div", { children: [
6392
+ /* @__PURE__ */ (0, import_jsx_runtime17.jsxs)("div", { className: "mb-1 flex items-center space-x-1 text-muted-foreground", children: [
6393
+ /* @__PURE__ */ (0, import_jsx_runtime17.jsx)(Icon2, { className: "w-4 h-4 text-sm" }),
6394
+ /* @__PURE__ */ (0, import_jsx_runtime17.jsx)("span", { className: "text-xs", children: field.name })
6395
+ ] }),
6396
+ /* @__PURE__ */ (0, import_jsx_runtime17.jsx)("div", { className: "w-full text-[13px] leading-5 breaking-all line-clamp-6", children: field.type === "select" ? /* @__PURE__ */ (0, import_jsx_runtime17.jsx)("div", { className: "flex gap-1 flex-wrap", children: (() => {
6397
+ var _a2;
6398
+ const option = (_a2 = field.options) == null ? void 0 : _a2.find((o) => o.name === value);
6399
+ return /* @__PURE__ */ (0, import_jsx_runtime17.jsx)(
6400
+ "div",
6401
+ {
6402
+ className: cn(
6403
+ "text-xs px-2 h-5 rounded-md flex items-center gap-1 min-w-0 truncate",
6404
+ getBadgeColor(option == null ? void 0 : option.color)
6405
+ ),
6406
+ title: String(value),
6407
+ children: /* @__PURE__ */ (0, import_jsx_runtime17.jsx)("span", { className: "min-w-0 truncate", children: String(value) })
6408
+ }
6409
+ );
6410
+ })() }) : field.type === "checkbox" ? /* @__PURE__ */ (0, import_jsx_runtime17.jsx)("div", { className: "flex gap-1 flex-wrap", children: /* @__PURE__ */ (0, import_jsx_runtime17.jsx)("div", { className: cn(
6411
+ "flex items-center justify-center w-5 h-5 rounded-sm border border-primary shadow bg-primary text-primary-foreground"
6412
+ ), children: /* @__PURE__ */ (0, import_jsx_runtime17.jsx)(import_lucide_react6.CheckSquare, { className: "h-4 w-4" }) }) }) : /* @__PURE__ */ (0, import_jsx_runtime17.jsx)("span", { title: String(value), className: "whitespace-pre-wrap break-all", children: String(value) }) })
6413
+ ] }, field.id);
6414
+ })
6415
+ ]
6416
+ }
6417
+ ) }, record.id)) })
6418
+ }
6419
+ ),
6420
+ /* @__PURE__ */ (0, import_jsx_runtime17.jsx)("div", { className: "flex items-center justify-center rounded-b-md bg-slate-50 px-3 py-2 dark:bg-muted", children: /* @__PURE__ */ (0, import_jsx_runtime17.jsx)(
6421
+ Button,
6422
+ {
6423
+ variant: "outline",
6424
+ 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",
6425
+ onClick: () => onOpenModal("add"),
6426
+ children: /* @__PURE__ */ (0, import_jsx_runtime17.jsx)(import_lucide_react6.Plus, { className: "w-5 h-5" })
6427
+ }
6428
+ ) })
6429
+ ] }) }, column.id);
6430
+ }) }) }) });
6431
+ }
6432
+
6433
+ // src/components/views/GalleryView.tsx
6434
+ var import_lucide_react7 = require("lucide-react");
6435
+ var import_jsx_runtime18 = require("react/jsx-runtime");
4666
6436
  function GalleryView({ schema, records, onDeleteRecord, onOpenModal }) {
6437
+ const { t } = useI18n();
4667
6438
  const primaryField = getPrimaryField(schema);
4668
6439
  const displayFields = schema.fields.filter((f) => f.id !== (primaryField == null ? void 0 : primaryField.id)).slice(0, 3);
4669
- return /* @__PURE__ */ (0, import_jsx_runtime17.jsx)("div", { className: "h-full overflow-auto p-6 bg-muted/30", children: /* @__PURE__ */ (0, import_jsx_runtime17.jsxs)("div", { className: "grid grid-cols-1 sm:grid-cols-2 lg:grid-cols-3 xl:grid-cols-4 gap-4", children: [
6440
+ return /* @__PURE__ */ (0, import_jsx_runtime18.jsx)("div", { className: "h-full overflow-auto p-6 bg-muted/30", children: /* @__PURE__ */ (0, import_jsx_runtime18.jsxs)("div", { className: "grid grid-cols-1 sm:grid-cols-2 lg:grid-cols-3 xl:grid-cols-4 gap-4", children: [
4670
6441
  records.map((record) => {
4671
- const title = primaryField ? record.fields[primaryField.id] : "Untitled";
4672
- return /* @__PURE__ */ (0, import_jsx_runtime17.jsxs)(
6442
+ const title = primaryField ? record.fields[primaryField.id] : t("untitled");
6443
+ return /* @__PURE__ */ (0, import_jsx_runtime18.jsxs)(
4673
6444
  Card,
4674
6445
  {
4675
- className: "group hover:shadow-md transition-all cursor-pointer overflow-hidden",
6446
+ className: "group hover:shadow-md transition-all cursor-pointer overflow-hidden text-start",
4676
6447
  onClick: () => onOpenModal("view", record),
4677
6448
  children: [
4678
- /* @__PURE__ */ (0, import_jsx_runtime17.jsxs)("div", { className: "aspect-[16/10] bg-muted flex items-center justify-center relative", children: [
4679
- /* @__PURE__ */ (0, import_jsx_runtime17.jsx)("span", { className: "text-4xl font-semibold text-muted-foreground/20 select-none", children: (title || "U").charAt(0).toUpperCase() }),
4680
- /* @__PURE__ */ (0, import_jsx_runtime17.jsx)("div", { className: "absolute top-2 right-2 opacity-0 group-hover:opacity-100 transition-opacity", children: /* @__PURE__ */ (0, import_jsx_runtime17.jsxs)(DropdownMenu, { children: [
4681
- /* @__PURE__ */ (0, import_jsx_runtime17.jsx)(DropdownMenuTrigger, { asChild: true, onClick: (e) => e.stopPropagation(), children: /* @__PURE__ */ (0, import_jsx_runtime17.jsx)(Button, { variant: "secondary", size: "icon", className: "h-8 w-8", children: /* @__PURE__ */ (0, import_jsx_runtime17.jsx)(import_lucide_react7.MoreHorizontal, { className: "h-4 w-4" }) }) }),
4682
- /* @__PURE__ */ (0, import_jsx_runtime17.jsxs)(DropdownMenuContent, { align: "end", children: [
4683
- /* @__PURE__ */ (0, import_jsx_runtime17.jsxs)(DropdownMenuItem, { onClick: () => onOpenModal("view", record), children: [
4684
- /* @__PURE__ */ (0, import_jsx_runtime17.jsx)(import_lucide_react7.Eye, { className: "h-4 w-4 mr-2" }),
4685
- "View"
6449
+ /* @__PURE__ */ (0, import_jsx_runtime18.jsxs)("div", { className: "aspect-[16/10] bg-muted flex items-center justify-center relative", children: [
6450
+ /* @__PURE__ */ (0, import_jsx_runtime18.jsx)("span", { className: "text-4xl font-semibold text-muted-foreground/20 select-none", children: String(title || t("untitled")).charAt(0).toUpperCase() }),
6451
+ /* @__PURE__ */ (0, import_jsx_runtime18.jsx)("div", { className: "absolute top-2 right-2 opacity-0 group-hover:opacity-100 transition-opacity", children: /* @__PURE__ */ (0, import_jsx_runtime18.jsxs)(DropdownMenu, { children: [
6452
+ /* @__PURE__ */ (0, import_jsx_runtime18.jsx)(DropdownMenuTrigger, { asChild: true, onClick: (e) => e.stopPropagation(), children: /* @__PURE__ */ (0, import_jsx_runtime18.jsx)(Button, { variant: "secondary", size: "icon", className: "h-8 w-8", children: /* @__PURE__ */ (0, import_jsx_runtime18.jsx)(import_lucide_react7.MoreHorizontal, { className: "h-4 w-4" }) }) }),
6453
+ /* @__PURE__ */ (0, import_jsx_runtime18.jsxs)(DropdownMenuContent, { align: "end", children: [
6454
+ /* @__PURE__ */ (0, import_jsx_runtime18.jsxs)(DropdownMenuItem, { onClick: () => onOpenModal("view", record), children: [
6455
+ /* @__PURE__ */ (0, import_jsx_runtime18.jsx)(import_lucide_react7.Eye, { className: "h-4 w-4 mr-2" }),
6456
+ t("view")
4686
6457
  ] }),
4687
- /* @__PURE__ */ (0, import_jsx_runtime17.jsxs)(DropdownMenuItem, { onClick: () => onOpenModal("edit", record), children: [
4688
- /* @__PURE__ */ (0, import_jsx_runtime17.jsx)(import_lucide_react7.Pencil, { className: "h-4 w-4 mr-2" }),
4689
- "Edit"
6458
+ /* @__PURE__ */ (0, import_jsx_runtime18.jsxs)(DropdownMenuItem, { onClick: () => onOpenModal("edit", record), children: [
6459
+ /* @__PURE__ */ (0, import_jsx_runtime18.jsx)(import_lucide_react7.Pencil, { className: "h-4 w-4 mr-2" }),
6460
+ t("edit")
4690
6461
  ] }),
4691
- /* @__PURE__ */ (0, import_jsx_runtime17.jsxs)(
6462
+ /* @__PURE__ */ (0, import_jsx_runtime18.jsxs)(
4692
6463
  DropdownMenuItem,
4693
6464
  {
4694
6465
  className: "text-destructive focus:text-destructive",
4695
6466
  onClick: () => onDeleteRecord(record.id),
4696
6467
  children: [
4697
- /* @__PURE__ */ (0, import_jsx_runtime17.jsx)(import_lucide_react7.Trash2, { className: "h-4 w-4 mr-2" }),
4698
- "Delete"
6468
+ /* @__PURE__ */ (0, import_jsx_runtime18.jsx)(import_lucide_react7.Trash2, { className: "h-4 w-4 mr-2" }),
6469
+ t("delete")
4699
6470
  ]
4700
6471
  }
4701
6472
  )
4702
6473
  ] })
4703
6474
  ] }) })
4704
6475
  ] }),
4705
- /* @__PURE__ */ (0, import_jsx_runtime17.jsxs)(CardContent, { className: "p-4", children: [
4706
- /* @__PURE__ */ (0, import_jsx_runtime17.jsx)("h3", { className: "font-medium text-sm truncate mb-2", children: title || "Untitled" }),
4707
- /* @__PURE__ */ (0, import_jsx_runtime17.jsx)("div", { className: "space-y-1.5", children: displayFields.map((field) => {
6476
+ /* @__PURE__ */ (0, import_jsx_runtime18.jsxs)(CardContent, { className: "p-4", children: [
6477
+ /* @__PURE__ */ (0, import_jsx_runtime18.jsx)("h3", { className: "font-medium text-sm truncate mb-2", children: title || t("untitled") }),
6478
+ /* @__PURE__ */ (0, import_jsx_runtime18.jsx)("div", { className: "space-y-1.5", children: displayFields.map((field) => {
6479
+ var _a;
4708
6480
  const value = record.fields[field.id];
4709
6481
  if (value === void 0 || value === null || value === "" || value === false) return null;
4710
6482
  let displayValue = value;
6483
+ if (field.type === "select") {
6484
+ const option = (_a = field.options) == null ? void 0 : _a.find((o) => o.name === value);
6485
+ return /* @__PURE__ */ (0, import_jsx_runtime18.jsxs)("div", { className: "flex items-baseline gap-2 text-xs", children: [
6486
+ /* @__PURE__ */ (0, import_jsx_runtime18.jsxs)("span", { className: "text-muted-foreground flex-shrink-0", children: [
6487
+ field.name,
6488
+ ":"
6489
+ ] }),
6490
+ /* @__PURE__ */ (0, import_jsx_runtime18.jsx)(
6491
+ "div",
6492
+ {
6493
+ className: cn(
6494
+ "text-xs px-2 py-0.5 rounded-md inline-flex items-center gap-1",
6495
+ getBadgeColor(option == null ? void 0 : option.color)
6496
+ ),
6497
+ children: value
6498
+ }
6499
+ )
6500
+ ] }, field.id);
6501
+ }
4711
6502
  if (Array.isArray(value)) displayValue = value.join(", ");
4712
- else if (typeof value === "boolean") displayValue = value ? "Yes" : "No";
6503
+ else if (typeof value === "boolean") displayValue = value ? t("yes") : t("no");
4713
6504
  else if (field.type === "date") displayValue = new Date(value).toLocaleDateString();
4714
- return /* @__PURE__ */ (0, import_jsx_runtime17.jsxs)("div", { className: "flex items-baseline gap-2 text-xs", children: [
4715
- /* @__PURE__ */ (0, import_jsx_runtime17.jsxs)("span", { className: "text-muted-foreground flex-shrink-0", children: [
6505
+ return /* @__PURE__ */ (0, import_jsx_runtime18.jsxs)("div", { className: "flex items-baseline gap-2 text-xs", children: [
6506
+ /* @__PURE__ */ (0, import_jsx_runtime18.jsxs)("span", { className: "text-muted-foreground flex-shrink-0", children: [
4716
6507
  field.name,
4717
6508
  ":"
4718
6509
  ] }),
4719
- /* @__PURE__ */ (0, import_jsx_runtime17.jsx)("span", { className: "text-foreground truncate", children: displayValue })
6510
+ /* @__PURE__ */ (0, import_jsx_runtime18.jsx)("span", { className: "text-foreground truncate", children: String(displayValue) })
4720
6511
  ] }, field.id);
4721
6512
  }) })
4722
6513
  ] })
@@ -4725,14 +6516,14 @@ function GalleryView({ schema, records, onDeleteRecord, onOpenModal }) {
4725
6516
  record.id
4726
6517
  );
4727
6518
  }),
4728
- /* @__PURE__ */ (0, import_jsx_runtime17.jsxs)(
6519
+ /* @__PURE__ */ (0, import_jsx_runtime18.jsxs)(
4729
6520
  "div",
4730
6521
  {
4731
6522
  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]",
4732
6523
  onClick: () => onOpenModal("add"),
4733
6524
  children: [
4734
- /* @__PURE__ */ (0, import_jsx_runtime17.jsx)("div", { className: "h-10 w-10 rounded-full bg-muted flex items-center justify-center mb-3", children: /* @__PURE__ */ (0, import_jsx_runtime17.jsx)(import_lucide_react7.Plus, { className: "h-5 w-5 text-muted-foreground" }) }),
4735
- /* @__PURE__ */ (0, import_jsx_runtime17.jsx)("span", { className: "text-sm font-medium text-muted-foreground", children: "Add Record" })
6525
+ /* @__PURE__ */ (0, import_jsx_runtime18.jsx)("div", { className: "h-10 w-10 rounded-full bg-muted flex items-center justify-center mb-3", children: /* @__PURE__ */ (0, import_jsx_runtime18.jsx)(import_lucide_react7.Plus, { className: "h-5 w-5 text-muted-foreground" }) }),
6526
+ /* @__PURE__ */ (0, import_jsx_runtime18.jsx)("span", { className: "text-sm font-medium text-muted-foreground", children: t("addRecord") })
4736
6527
  ]
4737
6528
  }
4738
6529
  )
@@ -4740,16 +6531,38 @@ function GalleryView({ schema, records, onDeleteRecord, onOpenModal }) {
4740
6531
  }
4741
6532
 
4742
6533
  // src/components/views/CalendarView.tsx
4743
- var import_react4 = require("react");
6534
+ var import_react6 = require("react");
4744
6535
  var import_lucide_react8 = require("lucide-react");
4745
- var import_jsx_runtime18 = require("react/jsx-runtime");
6536
+ var import_jsx_runtime19 = require("react/jsx-runtime");
6537
+ var CALENDAR_COLORS = [
6538
+ "blue",
6539
+ "green",
6540
+ "purple",
6541
+ "orange",
6542
+ "pink",
6543
+ "cyan",
6544
+ "indigo",
6545
+ "teal",
6546
+ "rose",
6547
+ "amber",
6548
+ "emerald",
6549
+ "violet"
6550
+ ];
6551
+ function getRecordColor(recordId) {
6552
+ const hash = recordId.split("").reduce((acc, char) => {
6553
+ return char.charCodeAt(0) + ((acc << 5) - acc);
6554
+ }, 0);
6555
+ const index = Math.abs(hash) % CALENDAR_COLORS.length;
6556
+ return CALENDAR_COLORS[index];
6557
+ }
4746
6558
  function CalendarView({ schema, records, onUpdateRecord, onDeleteRecord, onOpenModal }) {
4747
- const [currentDate, setCurrentDate] = (0, import_react4.useState)(/* @__PURE__ */ new Date());
6559
+ const { t, lang } = useI18n();
6560
+ const [currentDate, setCurrentDate] = (0, import_react6.useState)(/* @__PURE__ */ new Date());
4748
6561
  const dateField = getDateField(schema);
4749
6562
  const primaryField = getPrimaryField(schema);
4750
6563
  const monthStart = new Date(currentDate.getFullYear(), currentDate.getMonth(), 1);
4751
6564
  const monthEnd = new Date(currentDate.getFullYear(), currentDate.getMonth() + 1, 0);
4752
- const calendarDays = (0, import_react4.useMemo)(() => {
6565
+ const calendarDays = (0, import_react6.useMemo)(() => {
4753
6566
  const days = [];
4754
6567
  const firstDayOfWeek = monthStart.getDay();
4755
6568
  for (let i = firstDayOfWeek - 1; i >= 0; i--) {
@@ -4768,7 +6581,7 @@ function CalendarView({ schema, records, onUpdateRecord, onDeleteRecord, onOpenM
4768
6581
  }
4769
6582
  return days;
4770
6583
  }, [currentDate, monthStart, monthEnd]);
4771
- const recordsByDate = (0, import_react4.useMemo)(() => {
6584
+ const recordsByDate = (0, import_react6.useMemo)(() => {
4772
6585
  const map = {};
4773
6586
  if (!dateField) return map;
4774
6587
  records.forEach((record) => {
@@ -4792,77 +6605,64 @@ function CalendarView({ schema, records, onUpdateRecord, onDeleteRecord, onOpenM
4792
6605
  if (!dateField) return;
4793
6606
  onUpdateRecord(recordId, { [dateField.id]: newDate.toISOString().split("T")[0] });
4794
6607
  };
4795
- const weekDays = ["Sun", "Mon", "Tue", "Wed", "Thu", "Fri", "Sat"];
4796
- const monthNames = [
4797
- "January",
4798
- "February",
4799
- "March",
4800
- "April",
4801
- "May",
4802
- "June",
4803
- "July",
4804
- "August",
4805
- "September",
4806
- "October",
4807
- "November",
4808
- "December"
4809
- ];
6608
+ const weekDays = t("weekDays").split(",");
6609
+ const monthNames = t("monthNames").split(",");
4810
6610
  if (!dateField) {
4811
- return /* @__PURE__ */ (0, import_jsx_runtime18.jsx)("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." });
6611
+ return /* @__PURE__ */ (0, import_jsx_runtime19.jsx)("div", { className: "h-full flex items-center justify-center text-muted-foreground", children: t("noDateField") });
4812
6612
  }
4813
- return /* @__PURE__ */ (0, import_jsx_runtime18.jsxs)("div", { className: "h-full flex flex-col p-6 bg-muted/30", children: [
4814
- /* @__PURE__ */ (0, import_jsx_runtime18.jsxs)("div", { className: "flex items-center justify-between mb-4", children: [
4815
- /* @__PURE__ */ (0, import_jsx_runtime18.jsxs)("div", { className: "flex items-center gap-4", children: [
4816
- /* @__PURE__ */ (0, import_jsx_runtime18.jsxs)("h2", { className: "text-xl font-semibold", children: [
6613
+ return /* @__PURE__ */ (0, import_jsx_runtime19.jsxs)("div", { className: "h-full flex flex-col p-6 bg-muted/30", children: [
6614
+ /* @__PURE__ */ (0, import_jsx_runtime19.jsxs)("div", { className: "flex items-center justify-between mb-4", children: [
6615
+ /* @__PURE__ */ (0, import_jsx_runtime19.jsxs)("div", { className: "flex items-center gap-4", children: [
6616
+ /* @__PURE__ */ (0, import_jsx_runtime19.jsxs)("h2", { className: "text-xl font-semibold", children: [
4817
6617
  monthNames[currentDate.getMonth()],
4818
6618
  " ",
4819
6619
  currentDate.getFullYear()
4820
6620
  ] }),
4821
- /* @__PURE__ */ (0, import_jsx_runtime18.jsx)(
6621
+ /* @__PURE__ */ (0, import_jsx_runtime19.jsx)(
4822
6622
  Button,
4823
6623
  {
4824
6624
  variant: "outline",
4825
6625
  size: "sm",
4826
6626
  onClick: () => setCurrentDate(/* @__PURE__ */ new Date()),
4827
- children: "Today"
6627
+ children: t("today")
4828
6628
  }
4829
6629
  )
4830
6630
  ] }),
4831
- /* @__PURE__ */ (0, import_jsx_runtime18.jsxs)("div", { className: "flex items-center gap-1", children: [
4832
- /* @__PURE__ */ (0, import_jsx_runtime18.jsx)(
6631
+ /* @__PURE__ */ (0, import_jsx_runtime19.jsxs)("div", { className: "flex items-center gap-1", children: [
6632
+ /* @__PURE__ */ (0, import_jsx_runtime19.jsx)(
4833
6633
  Button,
4834
6634
  {
4835
6635
  variant: "outline",
4836
6636
  size: "icon",
4837
6637
  className: "h-8 w-8",
4838
6638
  onClick: () => setCurrentDate(new Date(currentDate.getFullYear(), currentDate.getMonth() - 1, 1)),
4839
- children: /* @__PURE__ */ (0, import_jsx_runtime18.jsx)(import_lucide_react8.ChevronLeft, { className: "h-4 w-4" })
6639
+ children: /* @__PURE__ */ (0, import_jsx_runtime19.jsx)(import_lucide_react8.ChevronLeft, { className: "h-4 w-4" })
4840
6640
  }
4841
6641
  ),
4842
- /* @__PURE__ */ (0, import_jsx_runtime18.jsx)(
6642
+ /* @__PURE__ */ (0, import_jsx_runtime19.jsx)(
4843
6643
  Button,
4844
6644
  {
4845
6645
  variant: "outline",
4846
6646
  size: "icon",
4847
6647
  className: "h-8 w-8",
4848
6648
  onClick: () => setCurrentDate(new Date(currentDate.getFullYear(), currentDate.getMonth() + 1, 1)),
4849
- children: /* @__PURE__ */ (0, import_jsx_runtime18.jsx)(import_lucide_react8.ChevronRight, { className: "h-4 w-4" })
6649
+ children: /* @__PURE__ */ (0, import_jsx_runtime19.jsx)(import_lucide_react8.ChevronRight, { className: "h-4 w-4" })
4850
6650
  }
4851
6651
  )
4852
6652
  ] })
4853
6653
  ] }),
4854
- /* @__PURE__ */ (0, import_jsx_runtime18.jsxs)("div", { className: "flex-1 border rounded-lg overflow-hidden bg-background flex flex-col", children: [
4855
- /* @__PURE__ */ (0, import_jsx_runtime18.jsx)("div", { className: "grid grid-cols-7 bg-muted/50 border-b", children: weekDays.map((day) => /* @__PURE__ */ (0, import_jsx_runtime18.jsx)("div", { className: "px-2 py-2 text-center text-xs font-medium text-muted-foreground", children: day }, day)) }),
4856
- /* @__PURE__ */ (0, import_jsx_runtime18.jsx)("div", { className: "grid grid-cols-7 flex-1", children: calendarDays.map((date, index) => {
6654
+ /* @__PURE__ */ (0, import_jsx_runtime19.jsxs)("div", { className: "flex-1 border rounded-lg overflow-hidden bg-background flex flex-col shadow-sm", children: [
6655
+ /* @__PURE__ */ (0, import_jsx_runtime19.jsx)("div", { className: "grid grid-cols-7 bg-muted/50 border-b", children: weekDays.map((day) => /* @__PURE__ */ (0, import_jsx_runtime19.jsx)("div", { className: "px-2 py-2 text-center text-xs font-medium text-muted-foreground uppercase tracking-wider", children: day }, day)) }),
6656
+ /* @__PURE__ */ (0, import_jsx_runtime19.jsx)("div", { className: "grid grid-cols-7 flex-1", children: calendarDays.map((date, index) => {
4857
6657
  const dateKey = date.toISOString().split("T")[0];
4858
6658
  const dayRecords = recordsByDate[dateKey] || [];
4859
- return /* @__PURE__ */ (0, import_jsx_runtime18.jsxs)(
6659
+ return /* @__PURE__ */ (0, import_jsx_runtime19.jsxs)(
4860
6660
  "div",
4861
6661
  {
4862
6662
  className: cn(
4863
6663
  "min-h-[100px] p-1.5 border-b border-r transition-all group relative flex flex-col",
4864
- !isCurrentMonth(date) && "bg-muted/30 text-muted-foreground/50",
4865
- isCurrentMonth(date) && "hover:bg-muted/10",
6664
+ !isCurrentMonth(date) && "bg-muted/20 text-muted-foreground/40",
6665
+ isCurrentMonth(date) && "hover:bg-muted/5",
4866
6666
  index % 7 === 6 && "border-r-0"
4867
6667
  ),
4868
6668
  onDragOver: (e) => e.preventDefault(),
@@ -4871,23 +6671,23 @@ function CalendarView({ schema, records, onUpdateRecord, onDeleteRecord, onOpenM
4871
6671
  if (recordId) handleDrop(recordId, date);
4872
6672
  },
4873
6673
  children: [
4874
- /* @__PURE__ */ (0, import_jsx_runtime18.jsxs)("div", { className: "flex items-center justify-between mb-1", children: [
4875
- /* @__PURE__ */ (0, import_jsx_runtime18.jsx)("span", { className: cn(
4876
- "text-xs w-6 h-6 flex items-center justify-center rounded-full",
4877
- isToday(date) ? "bg-primary text-primary-foreground font-medium" : ""
6674
+ /* @__PURE__ */ (0, import_jsx_runtime19.jsxs)("div", { className: "flex items-center justify-between mb-1", children: [
6675
+ /* @__PURE__ */ (0, import_jsx_runtime19.jsx)("span", { className: cn(
6676
+ "text-xs w-6 h-6 flex items-center justify-center rounded-full transition-colors",
6677
+ isToday(date) ? "bg-primary text-primary-foreground font-semibold shadow-sm" : "text-muted-foreground group-hover:text-foreground"
4878
6678
  ), children: date.getDate() }),
4879
- /* @__PURE__ */ (0, import_jsx_runtime18.jsx)(
6679
+ /* @__PURE__ */ (0, import_jsx_runtime19.jsx)(
4880
6680
  Button,
4881
6681
  {
4882
6682
  variant: "ghost",
4883
6683
  size: "icon",
4884
6684
  className: "h-5 w-5 opacity-0 group-hover:opacity-100 transition-opacity",
4885
6685
  onClick: () => handleDayClick(date),
4886
- children: /* @__PURE__ */ (0, import_jsx_runtime18.jsx)(import_lucide_react8.Plus, { className: "h-3 w-3" })
6686
+ children: /* @__PURE__ */ (0, import_jsx_runtime19.jsx)(import_lucide_react8.Plus, { className: "h-3 w-3" })
4887
6687
  }
4888
6688
  )
4889
6689
  ] }),
4890
- /* @__PURE__ */ (0, import_jsx_runtime18.jsx)("div", { className: "flex-1 space-y-0.5 overflow-y-auto", children: dayRecords.map((record) => /* @__PURE__ */ (0, import_jsx_runtime18.jsxs)(
6690
+ /* @__PURE__ */ (0, import_jsx_runtime19.jsx)("div", { className: "flex-1 space-y-0.5 overflow-y-auto", children: dayRecords.map((record) => /* @__PURE__ */ (0, import_jsx_runtime19.jsxs)(
4891
6691
  "div",
4892
6692
  {
4893
6693
  draggable: true,
@@ -4901,28 +6701,30 @@ function CalendarView({ schema, records, onUpdateRecord, onDeleteRecord, onOpenM
4901
6701
  },
4902
6702
  className: "group/item relative",
4903
6703
  children: [
4904
- /* @__PURE__ */ (0, import_jsx_runtime18.jsx)(
4905
- Badge,
6704
+ /* @__PURE__ */ (0, import_jsx_runtime19.jsx)(
6705
+ "div",
4906
6706
  {
4907
- variant: "secondary",
4908
- className: "w-full justify-start truncate text-xs py-0.5 cursor-grab active:cursor-grabbing hover:bg-primary/10",
4909
- children: primaryField ? record.fields[primaryField.id] || "Untitled" : "Event"
6707
+ className: cn(
6708
+ "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",
6709
+ getBadgeColor(getRecordColor(record.id))
6710
+ ),
6711
+ children: primaryField ? record.fields[primaryField.id] || t("untitled") : t("untitled")
4910
6712
  }
4911
6713
  ),
4912
- /* @__PURE__ */ (0, import_jsx_runtime18.jsx)("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__ */ (0, import_jsx_runtime18.jsxs)(DropdownMenu, { children: [
4913
- /* @__PURE__ */ (0, import_jsx_runtime18.jsx)(DropdownMenuTrigger, { asChild: true, onClick: (e) => e.stopPropagation(), children: /* @__PURE__ */ (0, import_jsx_runtime18.jsx)(import_lucide_react8.MoreHorizontal, { className: "h-3 w-3 text-muted-foreground cursor-pointer" }) }),
4914
- /* @__PURE__ */ (0, import_jsx_runtime18.jsxs)(DropdownMenuContent, { align: "end", children: [
4915
- /* @__PURE__ */ (0, import_jsx_runtime18.jsxs)(DropdownMenuItem, { onClick: () => onOpenModal("view", record), children: [
4916
- /* @__PURE__ */ (0, import_jsx_runtime18.jsx)(import_lucide_react8.Eye, { className: "h-4 w-4 mr-2" }),
4917
- "View"
6714
+ /* @__PURE__ */ (0, import_jsx_runtime19.jsx)("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__ */ (0, import_jsx_runtime19.jsxs)(DropdownMenu, { children: [
6715
+ /* @__PURE__ */ (0, import_jsx_runtime19.jsx)(DropdownMenuTrigger, { asChild: true, onClick: (e) => e.stopPropagation(), children: /* @__PURE__ */ (0, import_jsx_runtime19.jsx)(import_lucide_react8.MoreHorizontal, { className: "h-3 w-3 text-muted-foreground cursor-pointer hover:text-foreground" }) }),
6716
+ /* @__PURE__ */ (0, import_jsx_runtime19.jsxs)(DropdownMenuContent, { align: "end", children: [
6717
+ /* @__PURE__ */ (0, import_jsx_runtime19.jsxs)(DropdownMenuItem, { onClick: () => onOpenModal("view", record), children: [
6718
+ /* @__PURE__ */ (0, import_jsx_runtime19.jsx)(import_lucide_react8.Eye, { className: "h-4 w-4 mr-2" }),
6719
+ t("view")
4918
6720
  ] }),
4919
- /* @__PURE__ */ (0, import_jsx_runtime18.jsxs)(DropdownMenuItem, { onClick: () => onOpenModal("edit", record), children: [
4920
- /* @__PURE__ */ (0, import_jsx_runtime18.jsx)(import_lucide_react8.Pencil, { className: "h-4 w-4 mr-2" }),
4921
- "Edit"
6721
+ /* @__PURE__ */ (0, import_jsx_runtime19.jsxs)(DropdownMenuItem, { onClick: () => onOpenModal("edit", record), children: [
6722
+ /* @__PURE__ */ (0, import_jsx_runtime19.jsx)(import_lucide_react8.Pencil, { className: "h-4 w-4 mr-2" }),
6723
+ t("edit")
4922
6724
  ] }),
4923
- /* @__PURE__ */ (0, import_jsx_runtime18.jsxs)(DropdownMenuItem, { className: "text-destructive focus:text-destructive", onClick: () => onDeleteRecord(record.id), children: [
4924
- /* @__PURE__ */ (0, import_jsx_runtime18.jsx)(import_lucide_react8.Trash2, { className: "h-4 w-4 mr-2" }),
4925
- "Delete"
6725
+ /* @__PURE__ */ (0, import_jsx_runtime19.jsxs)(DropdownMenuItem, { className: "text-destructive focus:text-destructive", onClick: () => onDeleteRecord(record.id), children: [
6726
+ /* @__PURE__ */ (0, import_jsx_runtime19.jsx)(import_lucide_react8.Trash2, { className: "h-4 w-4 mr-2" }),
6727
+ t("delete")
4926
6728
  ] })
4927
6729
  ] })
4928
6730
  ] }) })
@@ -4940,15 +6742,15 @@ function CalendarView({ schema, records, onUpdateRecord, onDeleteRecord, onOpenM
4940
6742
  }
4941
6743
 
4942
6744
  // src/components/ui/dialog.tsx
4943
- var React12 = __toESM(require("react"));
6745
+ var React13 = __toESM(require("react"));
4944
6746
  var DialogPrimitive = __toESM(require("@radix-ui/react-dialog"));
4945
6747
  var import_lucide_react9 = require("lucide-react");
4946
- var import_jsx_runtime19 = require("react/jsx-runtime");
6748
+ var import_jsx_runtime20 = require("react/jsx-runtime");
4947
6749
  var Dialog = DialogPrimitive.Root;
4948
6750
  var DialogPortal = DialogPrimitive.Portal;
4949
- var DialogOverlay = React12.forwardRef((_a, ref) => {
6751
+ var DialogOverlay = React13.forwardRef((_a, ref) => {
4950
6752
  var _b = _a, { className } = _b, props = __objRest(_b, ["className"]);
4951
- return /* @__PURE__ */ (0, import_jsx_runtime19.jsx)(
6753
+ return /* @__PURE__ */ (0, import_jsx_runtime20.jsx)(
4952
6754
  DialogPrimitive.Overlay,
4953
6755
  __spreadValues({
4954
6756
  ref,
@@ -4960,11 +6762,11 @@ var DialogOverlay = React12.forwardRef((_a, ref) => {
4960
6762
  );
4961
6763
  });
4962
6764
  DialogOverlay.displayName = DialogPrimitive.Overlay.displayName;
4963
- var DialogContent = React12.forwardRef((_a, ref) => {
6765
+ var DialogContent = React13.forwardRef((_a, ref) => {
4964
6766
  var _b = _a, { className, children } = _b, props = __objRest(_b, ["className", "children"]);
4965
- return /* @__PURE__ */ (0, import_jsx_runtime19.jsxs)(DialogPortal, { children: [
4966
- /* @__PURE__ */ (0, import_jsx_runtime19.jsx)(DialogOverlay, {}),
4967
- /* @__PURE__ */ (0, import_jsx_runtime19.jsxs)(
6767
+ return /* @__PURE__ */ (0, import_jsx_runtime20.jsxs)(DialogPortal, { children: [
6768
+ /* @__PURE__ */ (0, import_jsx_runtime20.jsx)(DialogOverlay, {}),
6769
+ /* @__PURE__ */ (0, import_jsx_runtime20.jsxs)(
4968
6770
  DialogPrimitive.Content,
4969
6771
  __spreadProps(__spreadValues({
4970
6772
  ref,
@@ -4975,9 +6777,9 @@ var DialogContent = React12.forwardRef((_a, ref) => {
4975
6777
  }, props), {
4976
6778
  children: [
4977
6779
  children,
4978
- /* @__PURE__ */ (0, import_jsx_runtime19.jsxs)(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: [
4979
- /* @__PURE__ */ (0, import_jsx_runtime19.jsx)(import_lucide_react9.X, { className: "h-4 w-4" }),
4980
- /* @__PURE__ */ (0, import_jsx_runtime19.jsx)("span", { className: "sr-only", children: "Close" })
6780
+ /* @__PURE__ */ (0, import_jsx_runtime20.jsxs)(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: [
6781
+ /* @__PURE__ */ (0, import_jsx_runtime20.jsx)(import_lucide_react9.X, { className: "h-4 w-4" }),
6782
+ /* @__PURE__ */ (0, import_jsx_runtime20.jsx)("span", { className: "sr-only", children: "Close" })
4981
6783
  ] })
4982
6784
  ]
4983
6785
  })
@@ -4991,7 +6793,7 @@ var DialogHeader = (_a) => {
4991
6793
  } = _b, props = __objRest(_b, [
4992
6794
  "className"
4993
6795
  ]);
4994
- return /* @__PURE__ */ (0, import_jsx_runtime19.jsx)(
6796
+ return /* @__PURE__ */ (0, import_jsx_runtime20.jsx)(
4995
6797
  "div",
4996
6798
  __spreadValues({
4997
6799
  className: cn(
@@ -5008,7 +6810,7 @@ var DialogFooter = (_a) => {
5008
6810
  } = _b, props = __objRest(_b, [
5009
6811
  "className"
5010
6812
  ]);
5011
- return /* @__PURE__ */ (0, import_jsx_runtime19.jsx)(
6813
+ return /* @__PURE__ */ (0, import_jsx_runtime20.jsx)(
5012
6814
  "div",
5013
6815
  __spreadValues({
5014
6816
  className: cn(
@@ -5019,9 +6821,9 @@ var DialogFooter = (_a) => {
5019
6821
  );
5020
6822
  };
5021
6823
  DialogFooter.displayName = "DialogFooter";
5022
- var DialogTitle = React12.forwardRef((_a, ref) => {
6824
+ var DialogTitle = React13.forwardRef((_a, ref) => {
5023
6825
  var _b = _a, { className } = _b, props = __objRest(_b, ["className"]);
5024
- return /* @__PURE__ */ (0, import_jsx_runtime19.jsx)(
6826
+ return /* @__PURE__ */ (0, import_jsx_runtime20.jsx)(
5025
6827
  DialogPrimitive.Title,
5026
6828
  __spreadValues({
5027
6829
  ref,
@@ -5033,9 +6835,9 @@ var DialogTitle = React12.forwardRef((_a, ref) => {
5033
6835
  );
5034
6836
  });
5035
6837
  DialogTitle.displayName = DialogPrimitive.Title.displayName;
5036
- var DialogDescription = React12.forwardRef((_a, ref) => {
6838
+ var DialogDescription = React13.forwardRef((_a, ref) => {
5037
6839
  var _b = _a, { className } = _b, props = __objRest(_b, ["className"]);
5038
- return /* @__PURE__ */ (0, import_jsx_runtime19.jsx)(
6840
+ return /* @__PURE__ */ (0, import_jsx_runtime20.jsx)(
5039
6841
  DialogPrimitive.Description,
5040
6842
  __spreadValues({
5041
6843
  ref,
@@ -5046,29 +6848,29 @@ var DialogDescription = React12.forwardRef((_a, ref) => {
5046
6848
  DialogDescription.displayName = DialogPrimitive.Description.displayName;
5047
6849
 
5048
6850
  // src/components/ui/scroll-area.tsx
5049
- var React13 = __toESM(require("react"));
6851
+ var React14 = __toESM(require("react"));
5050
6852
  var ScrollAreaPrimitive = __toESM(require("@radix-ui/react-scroll-area"));
5051
- var import_jsx_runtime20 = require("react/jsx-runtime");
5052
- var ScrollArea = React13.forwardRef((_a, ref) => {
6853
+ var import_jsx_runtime21 = require("react/jsx-runtime");
6854
+ var ScrollArea = React14.forwardRef((_a, ref) => {
5053
6855
  var _b = _a, { className, children } = _b, props = __objRest(_b, ["className", "children"]);
5054
- return /* @__PURE__ */ (0, import_jsx_runtime20.jsxs)(
6856
+ return /* @__PURE__ */ (0, import_jsx_runtime21.jsxs)(
5055
6857
  ScrollAreaPrimitive.Root,
5056
6858
  __spreadProps(__spreadValues({
5057
6859
  ref,
5058
6860
  className: cn("relative overflow-hidden", className)
5059
6861
  }, props), {
5060
6862
  children: [
5061
- /* @__PURE__ */ (0, import_jsx_runtime20.jsx)(ScrollAreaPrimitive.Viewport, { className: "h-full w-full rounded-[inherit]", children }),
5062
- /* @__PURE__ */ (0, import_jsx_runtime20.jsx)(ScrollBar, {}),
5063
- /* @__PURE__ */ (0, import_jsx_runtime20.jsx)(ScrollAreaPrimitive.Corner, {})
6863
+ /* @__PURE__ */ (0, import_jsx_runtime21.jsx)(ScrollAreaPrimitive.Viewport, { className: "h-full w-full rounded-[inherit]", children }),
6864
+ /* @__PURE__ */ (0, import_jsx_runtime21.jsx)(ScrollBar, {}),
6865
+ /* @__PURE__ */ (0, import_jsx_runtime21.jsx)(ScrollAreaPrimitive.Corner, {})
5064
6866
  ]
5065
6867
  })
5066
6868
  );
5067
6869
  });
5068
6870
  ScrollArea.displayName = ScrollAreaPrimitive.Root.displayName;
5069
- var ScrollBar = React13.forwardRef((_a, ref) => {
6871
+ var ScrollBar = React14.forwardRef((_a, ref) => {
5070
6872
  var _b = _a, { className, orientation = "vertical" } = _b, props = __objRest(_b, ["className", "orientation"]);
5071
- return /* @__PURE__ */ (0, import_jsx_runtime20.jsx)(
6873
+ return /* @__PURE__ */ (0, import_jsx_runtime21.jsx)(
5072
6874
  ScrollAreaPrimitive.ScrollAreaScrollbar,
5073
6875
  __spreadProps(__spreadValues({
5074
6876
  ref,
@@ -5080,14 +6882,14 @@ var ScrollBar = React13.forwardRef((_a, ref) => {
5080
6882
  className
5081
6883
  )
5082
6884
  }, props), {
5083
- children: /* @__PURE__ */ (0, import_jsx_runtime20.jsx)(ScrollAreaPrimitive.ScrollAreaThumb, { className: "relative flex-1 rounded-full bg-border" })
6885
+ children: /* @__PURE__ */ (0, import_jsx_runtime21.jsx)(ScrollAreaPrimitive.ScrollAreaThumb, { className: "relative flex-1 rounded-full bg-border" })
5084
6886
  })
5085
6887
  );
5086
6888
  });
5087
6889
  ScrollBar.displayName = ScrollAreaPrimitive.ScrollAreaScrollbar.displayName;
5088
6890
 
5089
6891
  // src/components/RecordModal.tsx
5090
- var import_jsx_runtime21 = require("react/jsx-runtime");
6892
+ var import_jsx_runtime22 = require("react/jsx-runtime");
5091
6893
  function RecordModal({
5092
6894
  isOpen,
5093
6895
  onClose,
@@ -5097,27 +6899,28 @@ function RecordModal({
5097
6899
  initialValues,
5098
6900
  onSubmit
5099
6901
  }) {
6902
+ const { t } = useI18n();
5100
6903
  const titles = {
5101
- add: "Create New Record",
5102
- edit: "Edit Record",
5103
- view: "Record Details"
6904
+ add: t("createNewRecord"),
6905
+ edit: t("editRecord"),
6906
+ view: t("recordDetails")
5104
6907
  };
5105
6908
  const descriptions = {
5106
- add: "Enter the details for the new record.",
5107
- edit: "Modify the values for this record.",
5108
- view: "View the data for this record."
6909
+ add: t("enterDetails"),
6910
+ edit: t("modifyValues"),
6911
+ view: t("viewData")
5109
6912
  };
5110
6913
  const handleSubmit = (values) => {
5111
6914
  onSubmit(values);
5112
6915
  onClose();
5113
6916
  };
5114
6917
  const formValues = mode === "add" ? initialValues : record == null ? void 0 : record.fields;
5115
- return /* @__PURE__ */ (0, import_jsx_runtime21.jsx)(Dialog, { open: isOpen, onOpenChange: (open) => !open && onClose(), children: /* @__PURE__ */ (0, import_jsx_runtime21.jsxs)(DialogContent, { className: "sm:max-w-[500px] max-h-[85vh] flex flex-col", children: [
5116
- /* @__PURE__ */ (0, import_jsx_runtime21.jsxs)(DialogHeader, { children: [
5117
- /* @__PURE__ */ (0, import_jsx_runtime21.jsx)(DialogTitle, { children: titles[mode] }),
5118
- /* @__PURE__ */ (0, import_jsx_runtime21.jsx)(DialogDescription, { children: descriptions[mode] })
6918
+ return /* @__PURE__ */ (0, import_jsx_runtime22.jsx)(Dialog, { open: isOpen, onOpenChange: (open) => !open && onClose(), children: /* @__PURE__ */ (0, import_jsx_runtime22.jsxs)(DialogContent, { className: "sm:max-w-[500px] max-h-[85vh] flex flex-col", children: [
6919
+ /* @__PURE__ */ (0, import_jsx_runtime22.jsxs)(DialogHeader, { className: "space-y-1.5", children: [
6920
+ /* @__PURE__ */ (0, import_jsx_runtime22.jsx)(DialogTitle, { children: titles[mode] }),
6921
+ /* @__PURE__ */ (0, import_jsx_runtime22.jsx)(DialogDescription, { children: descriptions[mode] })
5119
6922
  ] }),
5120
- /* @__PURE__ */ (0, import_jsx_runtime21.jsx)(ScrollArea, { className: "flex-1 -mx-6 px-6", children: /* @__PURE__ */ (0, import_jsx_runtime21.jsx)(
6923
+ /* @__PURE__ */ (0, import_jsx_runtime22.jsx)(ScrollArea, { className: "flex-1 -mx-6 px-6 mt-4", children: /* @__PURE__ */ (0, import_jsx_runtime22.jsx)(
5121
6924
  RecordForm,
5122
6925
  {
5123
6926
  schema,
@@ -5132,33 +6935,34 @@ function RecordModal({
5132
6935
  // src/components/ThemeToggle.tsx
5133
6936
  var import_next_themes = require("next-themes");
5134
6937
  var import_lucide_react10 = require("lucide-react");
5135
- var import_jsx_runtime22 = require("react/jsx-runtime");
6938
+ var import_jsx_runtime23 = require("react/jsx-runtime");
5136
6939
  function ThemeToggle() {
5137
6940
  const { setTheme, theme } = (0, import_next_themes.useTheme)();
5138
- return /* @__PURE__ */ (0, import_jsx_runtime22.jsxs)(DropdownMenu, { children: [
5139
- /* @__PURE__ */ (0, import_jsx_runtime22.jsx)(DropdownMenuTrigger, { asChild: true, children: /* @__PURE__ */ (0, import_jsx_runtime22.jsxs)(Button, { variant: "ghost", size: "icon", className: "h-9 w-9", children: [
5140
- /* @__PURE__ */ (0, import_jsx_runtime22.jsx)(import_lucide_react10.Sun, { className: "h-4 w-4 rotate-0 scale-100 transition-all dark:-rotate-90 dark:scale-0" }),
5141
- /* @__PURE__ */ (0, import_jsx_runtime22.jsx)(import_lucide_react10.Moon, { className: "absolute h-4 w-4 rotate-90 scale-0 transition-all dark:rotate-0 dark:scale-100" }),
5142
- /* @__PURE__ */ (0, import_jsx_runtime22.jsx)("span", { className: "sr-only", children: "Toggle theme" })
6941
+ return /* @__PURE__ */ (0, import_jsx_runtime23.jsxs)(DropdownMenu, { children: [
6942
+ /* @__PURE__ */ (0, import_jsx_runtime23.jsx)(DropdownMenuTrigger, { asChild: true, children: /* @__PURE__ */ (0, import_jsx_runtime23.jsxs)(Button, { variant: "ghost", size: "icon", className: "h-9 w-9", children: [
6943
+ /* @__PURE__ */ (0, import_jsx_runtime23.jsx)(import_lucide_react10.Sun, { className: "h-4 w-4 rotate-0 scale-100 transition-all dark:-rotate-90 dark:scale-0" }),
6944
+ /* @__PURE__ */ (0, import_jsx_runtime23.jsx)(import_lucide_react10.Moon, { className: "absolute h-4 w-4 rotate-90 scale-0 transition-all dark:rotate-0 dark:scale-100" }),
6945
+ /* @__PURE__ */ (0, import_jsx_runtime23.jsx)("span", { className: "sr-only", children: "Toggle theme" })
5143
6946
  ] }) }),
5144
- /* @__PURE__ */ (0, import_jsx_runtime22.jsxs)(DropdownMenuContent, { align: "end", children: [
5145
- /* @__PURE__ */ (0, import_jsx_runtime22.jsx)(DropdownMenuItem, { onClick: () => setTheme("light"), children: "Light" }),
5146
- /* @__PURE__ */ (0, import_jsx_runtime22.jsx)(DropdownMenuItem, { onClick: () => setTheme("dark"), children: "Dark" }),
5147
- /* @__PURE__ */ (0, import_jsx_runtime22.jsx)(DropdownMenuItem, { onClick: () => setTheme("system"), children: "System" })
6947
+ /* @__PURE__ */ (0, import_jsx_runtime23.jsxs)(DropdownMenuContent, { align: "end", children: [
6948
+ /* @__PURE__ */ (0, import_jsx_runtime23.jsx)(DropdownMenuItem, { onClick: () => setTheme("light"), children: "Light" }),
6949
+ /* @__PURE__ */ (0, import_jsx_runtime23.jsx)(DropdownMenuItem, { onClick: () => setTheme("dark"), children: "Dark" }),
6950
+ /* @__PURE__ */ (0, import_jsx_runtime23.jsx)(DropdownMenuItem, { onClick: () => setTheme("system"), children: "System" })
5148
6951
  ] })
5149
6952
  ] });
5150
6953
  }
5151
6954
 
5152
6955
  // src/components/DataViews.tsx
5153
- var import_jsx_runtime23 = require("react/jsx-runtime");
5154
- function DataViews({ schema, dbClient, config }) {
5155
- const [records, setRecords] = (0, import_react5.useState)([]);
5156
- const [activeView, setActiveView] = (0, import_react5.useState)((config == null ? void 0 : config.defaultView) || "grid");
5157
- const [modalState, setModalState] = (0, import_react5.useState)({
6956
+ var import_jsx_runtime24 = require("react/jsx-runtime");
6957
+ function DataViewsInner({ schema, dbClient, config }) {
6958
+ const { t } = useI18n();
6959
+ const [records, setRecords] = (0, import_react7.useState)([]);
6960
+ const [activeView, setActiveView] = (0, import_react7.useState)((config == null ? void 0 : config.defaultView) || "grid");
6961
+ const [modalState, setModalState] = (0, import_react7.useState)({
5158
6962
  isOpen: false,
5159
6963
  mode: "add"
5160
6964
  });
5161
- const [mounted, setMounted] = (0, import_react5.useState)(false);
6965
+ const [mounted, setMounted] = (0, import_react7.useState)(false);
5162
6966
  const hasSelectField = !!getSelectField(schema);
5163
6967
  const hasDateField = !!getDateField(schema);
5164
6968
  const fetchRecords = async () => {
@@ -5169,7 +6973,7 @@ function DataViews({ schema, dbClient, config }) {
5169
6973
  console.error("Failed to fetch records:", error);
5170
6974
  }
5171
6975
  };
5172
- (0, import_react5.useEffect)(() => {
6976
+ (0, import_react7.useEffect)(() => {
5173
6977
  setMounted(true);
5174
6978
  fetchRecords();
5175
6979
  }, [dbClient]);
@@ -5212,46 +7016,46 @@ function DataViews({ schema, dbClient, config }) {
5212
7016
  onDeleteRecord: handleDeleteRecord,
5213
7017
  onOpenModal: openModal
5214
7018
  };
5215
- return /* @__PURE__ */ (0, import_jsx_runtime23.jsxs)("div", { className: "h-full w-full flex flex-col bg-background", children: [
5216
- /* @__PURE__ */ (0, import_jsx_runtime23.jsxs)("header", { className: "border-b px-6 py-3 flex items-center justify-between shrink-0", children: [
5217
- /* @__PURE__ */ (0, import_jsx_runtime23.jsxs)("div", { className: "flex items-center gap-3", children: [
5218
- /* @__PURE__ */ (0, import_jsx_runtime23.jsx)("span", { className: "text-2xl", children: schema.icon }),
5219
- /* @__PURE__ */ (0, import_jsx_runtime23.jsx)("h1", { className: "text-lg font-semibold", children: schema.name })
7019
+ return /* @__PURE__ */ (0, import_jsx_runtime24.jsxs)("div", { className: "h-full w-full flex flex-col bg-background", children: [
7020
+ /* @__PURE__ */ (0, import_jsx_runtime24.jsxs)("header", { className: "border-b px-6 py-3 flex items-center justify-between shrink-0", children: [
7021
+ /* @__PURE__ */ (0, import_jsx_runtime24.jsxs)("div", { className: "flex items-center gap-3", children: [
7022
+ /* @__PURE__ */ (0, import_jsx_runtime24.jsx)("span", { className: "text-2xl", children: schema.icon }),
7023
+ /* @__PURE__ */ (0, import_jsx_runtime24.jsx)("h1", { className: "text-lg font-semibold", children: schema.name })
5220
7024
  ] }),
5221
- /* @__PURE__ */ (0, import_jsx_runtime23.jsx)(ThemeToggle, {})
7025
+ /* @__PURE__ */ (0, import_jsx_runtime24.jsx)(ThemeToggle, {})
5222
7026
  ] }),
5223
- /* @__PURE__ */ (0, import_jsx_runtime23.jsxs)(Tabs, { value: activeView, onValueChange: (v) => setActiveView(v), className: "flex-1 flex flex-col overflow-hidden", children: [
5224
- /* @__PURE__ */ (0, import_jsx_runtime23.jsx)("div", { className: "border-b px-4 shrink-0", children: /* @__PURE__ */ (0, import_jsx_runtime23.jsxs)(TabsList, { className: "h-10", children: [
5225
- /* @__PURE__ */ (0, import_jsx_runtime23.jsxs)(TabsTrigger, { value: "grid", className: "gap-2", children: [
5226
- mounted && /* @__PURE__ */ (0, import_jsx_runtime23.jsx)(import_lucide_react11.LayoutGrid, { className: "h-4 w-4" }),
5227
- "Grid"
7027
+ /* @__PURE__ */ (0, import_jsx_runtime24.jsxs)(Tabs, { value: activeView, onValueChange: (v) => setActiveView(v), className: "flex-1 flex flex-col overflow-hidden", children: [
7028
+ /* @__PURE__ */ (0, import_jsx_runtime24.jsx)("div", { className: "border-b px-4 shrink-0", children: /* @__PURE__ */ (0, import_jsx_runtime24.jsxs)(TabsList, { className: "h-10", children: [
7029
+ /* @__PURE__ */ (0, import_jsx_runtime24.jsxs)(TabsTrigger, { value: "grid", className: "gap-2", children: [
7030
+ mounted && /* @__PURE__ */ (0, import_jsx_runtime24.jsx)(import_lucide_react11.LayoutGrid, { className: "h-4 w-4" }),
7031
+ t("gridView")
5228
7032
  ] }),
5229
- /* @__PURE__ */ (0, import_jsx_runtime23.jsxs)(TabsTrigger, { value: "form", className: "gap-2", children: [
5230
- mounted && /* @__PURE__ */ (0, import_jsx_runtime23.jsx)(import_lucide_react11.FileText, { className: "h-4 w-4" }),
5231
- "Form"
7033
+ /* @__PURE__ */ (0, import_jsx_runtime24.jsxs)(TabsTrigger, { value: "form", className: "gap-2", children: [
7034
+ mounted && /* @__PURE__ */ (0, import_jsx_runtime24.jsx)(import_lucide_react11.FileText, { className: "h-4 w-4" }),
7035
+ t("formView")
5232
7036
  ] }),
5233
- hasSelectField && /* @__PURE__ */ (0, import_jsx_runtime23.jsxs)(TabsTrigger, { value: "kanban", className: "gap-2", children: [
5234
- mounted && /* @__PURE__ */ (0, import_jsx_runtime23.jsx)(import_lucide_react11.Columns, { className: "h-4 w-4" }),
5235
- "Kanban"
7037
+ hasSelectField && /* @__PURE__ */ (0, import_jsx_runtime24.jsxs)(TabsTrigger, { value: "kanban", className: "gap-2", children: [
7038
+ mounted && /* @__PURE__ */ (0, import_jsx_runtime24.jsx)(import_lucide_react11.Columns, { className: "h-4 w-4" }),
7039
+ t("kanbanView")
5236
7040
  ] }),
5237
- /* @__PURE__ */ (0, import_jsx_runtime23.jsxs)(TabsTrigger, { value: "gallery", className: "gap-2", children: [
5238
- mounted && /* @__PURE__ */ (0, import_jsx_runtime23.jsx)(import_lucide_react11.Image, { className: "h-4 w-4" }),
5239
- "Gallery"
7041
+ /* @__PURE__ */ (0, import_jsx_runtime24.jsxs)(TabsTrigger, { value: "gallery", className: "gap-2", children: [
7042
+ mounted && /* @__PURE__ */ (0, import_jsx_runtime24.jsx)(import_lucide_react11.Image, { className: "h-4 w-4" }),
7043
+ t("galleryView")
5240
7044
  ] }),
5241
- hasDateField && /* @__PURE__ */ (0, import_jsx_runtime23.jsxs)(TabsTrigger, { value: "calendar", className: "gap-2", children: [
5242
- mounted && /* @__PURE__ */ (0, import_jsx_runtime23.jsx)(import_lucide_react11.Calendar, { className: "h-4 w-4" }),
5243
- "Calendar"
7045
+ hasDateField && /* @__PURE__ */ (0, import_jsx_runtime24.jsxs)(TabsTrigger, { value: "calendar", className: "gap-2", children: [
7046
+ mounted && /* @__PURE__ */ (0, import_jsx_runtime24.jsx)(import_lucide_react11.Calendar, { className: "h-4 w-4" }),
7047
+ t("calendarView")
5244
7048
  ] })
5245
7049
  ] }) }),
5246
- /* @__PURE__ */ (0, import_jsx_runtime23.jsxs)("div", { className: "flex-1 overflow-auto relative", children: [
5247
- /* @__PURE__ */ (0, import_jsx_runtime23.jsx)(TabsContent, { value: "grid", className: "h-full m-0", children: /* @__PURE__ */ (0, import_jsx_runtime23.jsx)(GridView, __spreadValues({}, commonProps)) }),
5248
- /* @__PURE__ */ (0, import_jsx_runtime23.jsx)(TabsContent, { value: "form", className: "h-full m-0", children: /* @__PURE__ */ (0, import_jsx_runtime23.jsx)(FormView, __spreadValues({}, commonProps)) }),
5249
- hasSelectField && /* @__PURE__ */ (0, import_jsx_runtime23.jsx)(TabsContent, { value: "kanban", className: "h-full m-0", children: /* @__PURE__ */ (0, import_jsx_runtime23.jsx)(KanbanView, __spreadValues({}, commonProps)) }),
5250
- /* @__PURE__ */ (0, import_jsx_runtime23.jsx)(TabsContent, { value: "gallery", className: "h-full m-0", children: /* @__PURE__ */ (0, import_jsx_runtime23.jsx)(GalleryView, __spreadValues({}, commonProps)) }),
5251
- hasDateField && /* @__PURE__ */ (0, import_jsx_runtime23.jsx)(TabsContent, { value: "calendar", className: "h-full m-0", children: /* @__PURE__ */ (0, import_jsx_runtime23.jsx)(CalendarView, __spreadValues({}, commonProps)) })
7050
+ /* @__PURE__ */ (0, import_jsx_runtime24.jsxs)("div", { className: "flex-1 overflow-auto relative", children: [
7051
+ /* @__PURE__ */ (0, import_jsx_runtime24.jsx)(TabsContent, { value: "grid", className: "h-full m-0", children: /* @__PURE__ */ (0, import_jsx_runtime24.jsx)(GridView, __spreadValues({}, commonProps)) }),
7052
+ /* @__PURE__ */ (0, import_jsx_runtime24.jsx)(TabsContent, { value: "form", className: "h-full m-0", children: /* @__PURE__ */ (0, import_jsx_runtime24.jsx)(FormView, __spreadValues({}, commonProps)) }),
7053
+ hasSelectField && /* @__PURE__ */ (0, import_jsx_runtime24.jsx)(TabsContent, { value: "kanban", className: "h-full m-0", children: /* @__PURE__ */ (0, import_jsx_runtime24.jsx)(KanbanView, __spreadValues({}, commonProps)) }),
7054
+ /* @__PURE__ */ (0, import_jsx_runtime24.jsx)(TabsContent, { value: "gallery", className: "h-full m-0", children: /* @__PURE__ */ (0, import_jsx_runtime24.jsx)(GalleryView, __spreadValues({}, commonProps)) }),
7055
+ hasDateField && /* @__PURE__ */ (0, import_jsx_runtime24.jsx)(TabsContent, { value: "calendar", className: "h-full m-0", children: /* @__PURE__ */ (0, import_jsx_runtime24.jsx)(CalendarView, __spreadValues({}, commonProps)) })
5252
7056
  ] })
5253
7057
  ] }),
5254
- /* @__PURE__ */ (0, import_jsx_runtime23.jsx)(
7058
+ /* @__PURE__ */ (0, import_jsx_runtime24.jsx)(
5255
7059
  RecordModal,
5256
7060
  {
5257
7061
  isOpen: modalState.isOpen,
@@ -5271,11 +7075,24 @@ function DataViews({ schema, dbClient, config }) {
5271
7075
  )
5272
7076
  ] });
5273
7077
  }
7078
+ function DataViews(props) {
7079
+ var _a;
7080
+ return /* @__PURE__ */ (0, import_jsx_runtime24.jsx)(I18nProvider, { lang: (_a = props.config) == null ? void 0 : _a.language, children: /* @__PURE__ */ (0, import_jsx_runtime24.jsx)(DataViewsInner, __spreadValues({}, props)) });
7081
+ }
5274
7082
  // Annotate the CommonJS export names for ESM import in node:
5275
7083
  0 && (module.exports = {
7084
+ BADGE_COLOR_MAP,
7085
+ DOT_COLOR_MAP,
5276
7086
  DataViews,
7087
+ LANGUAGES,
7088
+ PRESET_COLORS,
7089
+ getBadgeColor,
5277
7090
  getDateField,
7091
+ getDirection,
7092
+ getDotColor,
5278
7093
  getPrimaryField,
5279
7094
  getSelectField,
5280
- tableSchema
7095
+ getTranslation,
7096
+ tableSchema,
7097
+ translations
5281
7098
  });