react-restyle-components 0.4.41 → 0.4.43

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (20) hide show
  1. package/lib/src/core-components/src/components/AutoComplete/auto-complete-filter-group-by-multiple-select-multiple-fields-display/auto-complete-filter-group-by-multiple-select-multiple-fields-display.component.d.ts +9 -1
  2. package/lib/src/core-components/src/components/AutoComplete/auto-complete-filter-group-by-multiple-select-multiple-fields-display/auto-complete-filter-group-by-multiple-select-multiple-fields-display.component.js +165 -48
  3. package/lib/src/core-components/src/components/Icon/Icon.d.ts +9 -0
  4. package/lib/src/core-components/src/components/Icon/Icon.js +80 -0
  5. package/lib/src/core-components/src/components/Table/Table.js +141 -43
  6. package/lib/src/core-components/src/components/Table/elements.d.ts +3 -0
  7. package/lib/src/core-components/src/components/Table/elements.js +56 -0
  8. package/lib/src/core-components/src/components/Table/types.d.ts +2 -0
  9. package/lib/src/core-components/src/components/ag-grid/AgGrid.js +332 -8
  10. package/lib/src/core-components/src/components/ag-grid/elements.d.ts +136 -0
  11. package/lib/src/core-components/src/components/ag-grid/elements.js +639 -1
  12. package/lib/src/core-components/src/components/ag-grid/hooks.d.ts +80 -0
  13. package/lib/src/core-components/src/components/ag-grid/hooks.js +277 -0
  14. package/lib/src/core-components/src/components/ag-grid/index.d.ts +2 -1
  15. package/lib/src/core-components/src/components/ag-grid/index.js +2 -0
  16. package/lib/src/core-components/src/tc.global.css +28 -2
  17. package/lib/src/core-components/src/tc.module.css +1 -1
  18. package/lib/src/core-components/src/utils/designTokens.d.ts +9 -9
  19. package/lib/src/core-components/src/utils/designTokens.js +13 -10
  20. package/package.json +1 -1
@@ -356,6 +356,7 @@ export const StyledTable = styled.table `
356
356
  width: 100%;
357
357
  border-collapse: collapse;
358
358
  table-layout: ${({ $fixedLayout }) => ($fixedLayout ? 'fixed' : 'auto')};
359
+ color: ${({ $theme }) => $theme.textColor};
359
360
  `;
360
361
  // ============================================================================
361
362
  // Header
@@ -558,10 +559,11 @@ export const FloatingFilterCell = styled.td `
558
559
  // Body
559
560
  // ============================================================================
560
561
  export const TableBody = styled.tbody `
561
- /* Base styles */
562
+ color: ${({ $theme }) => $theme.textColor};
562
563
  `;
563
564
  export const TableRow = styled.tr `
564
565
  height: ${({ $height }) => ($height ? `${$height}px` : '42px')};
566
+ color: ${({ $theme }) => $theme.textColor};
565
567
  background: ${({ $theme, $selected, $highlighted, $striped, $even, $group }) => {
566
568
  if ($selected)
567
569
  return $theme.selectedRowBackgroundColor;
@@ -610,6 +612,7 @@ export const TableCell = styled.td `
610
612
  overflow: hidden;
611
613
  text-overflow: ellipsis;
612
614
  white-space: nowrap;
615
+ color: ${({ $theme }) => $theme.textColor};
613
616
 
614
617
  ${({ $width }) => $width && css `width: ${$width}px;`}
615
618
 
@@ -643,6 +646,7 @@ export const CellContent = styled.div `
643
646
  align-items: center;
644
647
  gap: 8px;
645
648
  min-height: 20px;
649
+ color: inherit;
646
650
 
647
651
  ${({ $wrapText }) => $wrapText &&
648
652
  css `
@@ -1151,6 +1155,640 @@ export const SelectionActions = styled.div `
1151
1155
  gap: 8px;
1152
1156
  `;
1153
1157
  // ============================================================================
1158
+ // Side Panel (Right Panel with Columns & Filters tabs)
1159
+ // ============================================================================
1160
+ export const SidePanel = styled.div `
1161
+ width: ${({ $open, $width }) => ($open ? ($width ? `${$width}px` : '280px') : '40px')};
1162
+ min-width: ${({ $open }) => ($open ? '200px' : '40px')};
1163
+ max-width: ${({ $open }) => ($open ? '400px' : '40px')};
1164
+ background: ${({ $theme }) => $theme.backgroundColor};
1165
+ border-left: 1px solid ${({ $theme }) => $theme.borderColor};
1166
+ display: flex;
1167
+ flex-direction: column;
1168
+ overflow: hidden;
1169
+ transition: width 0.2s ease;
1170
+ flex-shrink: 0;
1171
+ `;
1172
+ export const SidePanelTabs = styled.div `
1173
+ display: flex;
1174
+ flex-direction: ${({ $collapsed }) => ($collapsed ? 'column' : 'row')};
1175
+ border-bottom: ${({ $collapsed }) => ($collapsed ? 'none' : '1px solid')};
1176
+ border-color: ${({ $theme }) => $theme.borderColor};
1177
+ background: ${({ $theme }) => $theme.headerBackgroundColor};
1178
+ `;
1179
+ export const SidePanelTab = styled.button `
1180
+ flex: ${({ $collapsed }) => ($collapsed ? 'none' : '1')};
1181
+ padding: ${({ $collapsed }) => ($collapsed ? '12px 10px' : '10px 12px')};
1182
+ font-size: 11px;
1183
+ font-weight: 600;
1184
+ text-transform: uppercase;
1185
+ letter-spacing: 0.5px;
1186
+ border: none;
1187
+ background: ${({ $theme, $active }) => ($active ? $theme.backgroundColor : 'transparent')};
1188
+ color: ${({ $theme, $active }) => ($active ? $theme.accentColor : $theme.headerTextColor)};
1189
+ cursor: pointer;
1190
+ transition: all 0.15s ease;
1191
+ border-bottom: 2px solid ${({ $theme, $active }) => ($active ? $theme.accentColor : 'transparent')};
1192
+ display: flex;
1193
+ align-items: center;
1194
+ justify-content: center;
1195
+ gap: 6px;
1196
+ white-space: nowrap;
1197
+
1198
+ &:hover {
1199
+ background: ${({ $theme }) => $theme.hoverRowBackgroundColor};
1200
+ color: ${({ $theme }) => $theme.accentColor};
1201
+ }
1202
+
1203
+ svg {
1204
+ width: 14px;
1205
+ height: 14px;
1206
+ }
1207
+ `;
1208
+ export const SidePanelContent = styled.div `
1209
+ flex: 1;
1210
+ overflow-y: auto;
1211
+ overflow-x: hidden;
1212
+ `;
1213
+ export const SidePanelSearch = styled.div `
1214
+ padding: 10px 12px;
1215
+ border-bottom: 1px solid ${({ $theme }) => $theme.borderColor};
1216
+
1217
+ input {
1218
+ width: 100%;
1219
+ padding: 8px 10px;
1220
+ font-size: 12px;
1221
+ border: 1px solid ${({ $theme }) => $theme.borderColor};
1222
+ border-radius: 4px;
1223
+ background: ${({ $theme }) => $theme.backgroundColor};
1224
+ color: ${({ $theme }) => $theme.textColor};
1225
+ outline: none;
1226
+
1227
+ &::placeholder {
1228
+ color: ${({ $theme }) => $theme.headerTextColor};
1229
+ opacity: 0.6;
1230
+ }
1231
+
1232
+ &:focus {
1233
+ border-color: ${({ $theme }) => $theme.accentColor};
1234
+ }
1235
+ }
1236
+ `;
1237
+ export const SidePanelSection = styled.div `
1238
+ border-bottom: 1px solid ${({ $theme }) => $theme.borderColor};
1239
+ `;
1240
+ export const SidePanelSectionHeader = styled.div `
1241
+ display: flex;
1242
+ align-items: center;
1243
+ gap: 8px;
1244
+ padding: 10px 12px;
1245
+ font-size: 11px;
1246
+ font-weight: 600;
1247
+ text-transform: uppercase;
1248
+ letter-spacing: 0.5px;
1249
+ color: ${({ $theme }) => $theme.headerTextColor};
1250
+ background: ${({ $theme }) => $theme.headerBackgroundColor};
1251
+ cursor: ${({ $collapsible }) => ($collapsible ? 'pointer' : 'default')};
1252
+ user-select: none;
1253
+
1254
+ &:hover {
1255
+ background: ${({ $collapsible, $theme }) => ($collapsible ? $theme.hoverRowBackgroundColor : $theme.headerBackgroundColor)};
1256
+ }
1257
+
1258
+ svg {
1259
+ width: 12px;
1260
+ height: 12px;
1261
+ transition: transform 0.2s ease;
1262
+ }
1263
+ `;
1264
+ export const SidePanelColumnItem = styled.div `
1265
+ display: flex;
1266
+ align-items: center;
1267
+ gap: 8px;
1268
+ padding: 6px 12px;
1269
+ padding-left: ${({ $indent }) => ($indent ? `${12 + $indent * 16}px` : '12px')};
1270
+ font-size: 13px;
1271
+ color: ${({ $theme }) => $theme.textColor};
1272
+ cursor: pointer;
1273
+ user-select: none;
1274
+ transition: background-color 0.1s ease;
1275
+ border-left: 2px solid transparent;
1276
+
1277
+ ${({ $selected, $theme }) => $selected &&
1278
+ css `
1279
+ background: ${$theme.selectedRowBackgroundColor}40;
1280
+ border-left-color: ${$theme.accentColor};
1281
+ `}
1282
+
1283
+ ${({ $dragging, $theme }) => $dragging &&
1284
+ css `
1285
+ opacity: 0.5;
1286
+ background: ${$theme.accentColor}20;
1287
+ `}
1288
+
1289
+ &:hover {
1290
+ background: ${({ $theme }) => $theme.hoverRowBackgroundColor};
1291
+ }
1292
+ `;
1293
+ export const SidePanelDragHandle = styled.span `
1294
+ display: flex;
1295
+ align-items: center;
1296
+ justify-content: center;
1297
+ width: 14px;
1298
+ height: 14px;
1299
+ cursor: grab;
1300
+ opacity: 0.4;
1301
+ flex-shrink: 0;
1302
+
1303
+ &:hover {
1304
+ opacity: 1;
1305
+ }
1306
+
1307
+ &:active {
1308
+ cursor: grabbing;
1309
+ }
1310
+
1311
+ svg {
1312
+ width: 12px;
1313
+ height: 12px;
1314
+ }
1315
+ `;
1316
+ export const SidePanelGroupLabel = styled.span `
1317
+ flex: 1;
1318
+ overflow: hidden;
1319
+ text-overflow: ellipsis;
1320
+ white-space: nowrap;
1321
+ `;
1322
+ // ============================================================================
1323
+ // Row Groups Drop Zone
1324
+ // ============================================================================
1325
+ export const RowGroupsZone = styled.div `
1326
+ display: flex;
1327
+ align-items: center;
1328
+ gap: 8px;
1329
+ padding: 8px 12px;
1330
+ min-height: 36px;
1331
+ background: ${({ $theme, $dragOver }) => ($dragOver ? `${$theme.accentColor}15` : $theme.headerBackgroundColor)};
1332
+ border-bottom: 1px solid ${({ $theme }) => $theme.borderColor};
1333
+ border: ${({ $dragOver, $theme }) => ($dragOver ? `2px dashed ${$theme.accentColor}` : '1px solid transparent')};
1334
+ transition: all 0.15s ease;
1335
+ flex-wrap: wrap;
1336
+
1337
+ ${({ $hasItems }) => !$hasItems &&
1338
+ css `
1339
+ justify-content: center;
1340
+ `}
1341
+ `;
1342
+ export const RowGroupsLabel = styled.span `
1343
+ display: flex;
1344
+ align-items: center;
1345
+ gap: 6px;
1346
+ font-size: 12px;
1347
+ color: ${({ $theme }) => $theme.headerTextColor};
1348
+ white-space: nowrap;
1349
+
1350
+ svg {
1351
+ width: 14px;
1352
+ height: 14px;
1353
+ opacity: 0.6;
1354
+ }
1355
+ `;
1356
+ export const RowGroupChip = styled.div `
1357
+ display: inline-flex;
1358
+ align-items: center;
1359
+ gap: 6px;
1360
+ padding: 4px 10px;
1361
+ font-size: 12px;
1362
+ font-weight: 500;
1363
+ background: ${({ $theme }) => $theme.accentColor}15;
1364
+ color: ${({ $theme }) => $theme.accentColor};
1365
+ border-radius: 16px;
1366
+ cursor: default;
1367
+
1368
+ button {
1369
+ display: flex;
1370
+ align-items: center;
1371
+ justify-content: center;
1372
+ width: 16px;
1373
+ height: 16px;
1374
+ padding: 0;
1375
+ border: none;
1376
+ background: transparent;
1377
+ cursor: pointer;
1378
+ opacity: 0.6;
1379
+ border-radius: 50%;
1380
+ transition: all 0.1s ease;
1381
+
1382
+ &:hover {
1383
+ opacity: 1;
1384
+ background: ${({ $theme }) => $theme.accentColor}30;
1385
+ }
1386
+
1387
+ svg {
1388
+ width: 10px;
1389
+ height: 10px;
1390
+ }
1391
+ }
1392
+ `;
1393
+ // ============================================================================
1394
+ // Values/Aggregation Panel
1395
+ // ============================================================================
1396
+ export const ValuesPanel = styled.div `
1397
+ min-height: 60px;
1398
+ `;
1399
+ export const ValueItem = styled.div `
1400
+ display: flex;
1401
+ align-items: center;
1402
+ justify-content: space-between;
1403
+ gap: 8px;
1404
+ padding: 6px 12px;
1405
+ font-size: 13px;
1406
+ color: ${({ $theme }) => $theme.textColor};
1407
+ cursor: pointer;
1408
+
1409
+ &:hover {
1410
+ background: ${({ $theme }) => $theme.hoverRowBackgroundColor};
1411
+ }
1412
+ `;
1413
+ export const ValueItemLabel = styled.span `
1414
+ display: flex;
1415
+ align-items: center;
1416
+ gap: 6px;
1417
+ flex: 1;
1418
+ overflow: hidden;
1419
+
1420
+ svg {
1421
+ width: 12px;
1422
+ height: 12px;
1423
+ opacity: 0.5;
1424
+ }
1425
+ `;
1426
+ export const ValueItemRemove = styled.button `
1427
+ display: flex;
1428
+ align-items: center;
1429
+ justify-content: center;
1430
+ width: 18px;
1431
+ height: 18px;
1432
+ padding: 0;
1433
+ border: none;
1434
+ background: transparent;
1435
+ cursor: pointer;
1436
+ opacity: 0.5;
1437
+ border-radius: 50%;
1438
+
1439
+ &:hover {
1440
+ opacity: 1;
1441
+ background: ${({ $theme }) => $theme.borderColor};
1442
+ }
1443
+
1444
+ svg {
1445
+ width: 12px;
1446
+ height: 12px;
1447
+ }
1448
+ `;
1449
+ // ============================================================================
1450
+ // Pivot Mode Toggle
1451
+ // ============================================================================
1452
+ export const PivotModeToggle = styled.div `
1453
+ display: flex;
1454
+ align-items: center;
1455
+ justify-content: space-between;
1456
+ padding: 10px 12px;
1457
+ border-bottom: 1px solid ${({ $theme }) => $theme.borderColor};
1458
+ `;
1459
+ export const PivotModeLabel = styled.span `
1460
+ font-size: 12px;
1461
+ font-weight: 500;
1462
+ color: ${({ $theme }) => $theme.textColor};
1463
+ `;
1464
+ export const ToggleSwitch = styled.label `
1465
+ position: relative;
1466
+ display: inline-block;
1467
+ width: 36px;
1468
+ height: 20px;
1469
+ cursor: pointer;
1470
+
1471
+ input {
1472
+ opacity: 0;
1473
+ width: 0;
1474
+ height: 0;
1475
+ }
1476
+
1477
+ span {
1478
+ position: absolute;
1479
+ inset: 0;
1480
+ background: ${({ $theme }) => $theme.borderColor};
1481
+ border-radius: 20px;
1482
+ transition: all 0.2s ease;
1483
+
1484
+ &::before {
1485
+ content: '';
1486
+ position: absolute;
1487
+ width: 14px;
1488
+ height: 14px;
1489
+ left: 3px;
1490
+ bottom: 3px;
1491
+ background: white;
1492
+ border-radius: 50%;
1493
+ transition: transform 0.2s ease;
1494
+ }
1495
+ }
1496
+
1497
+ input:checked + span {
1498
+ background: ${({ $theme }) => $theme.accentColor};
1499
+ }
1500
+
1501
+ input:checked + span::before {
1502
+ transform: translateX(16px);
1503
+ }
1504
+ `;
1505
+ // ============================================================================
1506
+ // Column Header Menu (Three Dot Menu)
1507
+ // ============================================================================
1508
+ export const HeaderMenuButton = styled.button `
1509
+ display: flex;
1510
+ align-items: center;
1511
+ justify-content: center;
1512
+ width: 20px;
1513
+ height: 20px;
1514
+ padding: 0;
1515
+ border: none;
1516
+ background: ${({ $active, $theme }) => ($active ? $theme.hoverRowBackgroundColor : 'transparent')};
1517
+ border-radius: 3px;
1518
+ cursor: pointer;
1519
+ opacity: ${({ $active }) => ($active ? 1 : 0)};
1520
+ transition: all 0.15s ease;
1521
+ flex-shrink: 0;
1522
+
1523
+ &:hover {
1524
+ opacity: 1;
1525
+ background: ${({ $theme }) => $theme.hoverRowBackgroundColor};
1526
+ }
1527
+
1528
+ svg {
1529
+ width: 14px;
1530
+ height: 14px;
1531
+ color: ${({ $theme }) => $theme.headerTextColor};
1532
+ }
1533
+ `;
1534
+ export const ColumnMenuPopup = styled.div `
1535
+ position: fixed;
1536
+ top: ${({ $y }) => $y}px;
1537
+ left: ${({ $x }) => $x}px;
1538
+ min-width: 200px;
1539
+ max-width: 280px;
1540
+ background: ${({ $theme }) => $theme.backgroundColor};
1541
+ border: 1px solid ${({ $theme }) => $theme.borderColor};
1542
+ border-radius: 6px;
1543
+ box-shadow: 0 4px 16px rgba(0, 0, 0, 0.15);
1544
+ z-index: 1000;
1545
+ overflow: hidden;
1546
+ animation: ${fadeIn} 0.15s ease;
1547
+ `;
1548
+ export const ColumnMenuSection = styled.div `
1549
+ padding: 4px 0;
1550
+ border-bottom: 1px solid ${({ $theme }) => $theme.borderColor};
1551
+
1552
+ &:last-child {
1553
+ border-bottom: none;
1554
+ }
1555
+ `;
1556
+ export const ColumnMenuItem = styled.div `
1557
+ display: flex;
1558
+ align-items: center;
1559
+ gap: 10px;
1560
+ padding: 8px 12px;
1561
+ font-size: 13px;
1562
+ color: ${({ $theme, $disabled }) => ($disabled ? $theme.headerTextColor : $theme.textColor)};
1563
+ cursor: ${({ $disabled }) => ($disabled ? 'not-allowed' : 'pointer')};
1564
+ opacity: ${({ $disabled }) => ($disabled ? 0.5 : 1)};
1565
+ transition: background-color 0.1s ease;
1566
+
1567
+ &:hover {
1568
+ background: ${({ $disabled, $theme }) => ($disabled ? 'transparent' : $theme.hoverRowBackgroundColor)};
1569
+ }
1570
+
1571
+ svg {
1572
+ width: 16px;
1573
+ height: 16px;
1574
+ opacity: 0.6;
1575
+ flex-shrink: 0;
1576
+ }
1577
+
1578
+ span {
1579
+ flex: 1;
1580
+ }
1581
+
1582
+ ${({ $hasSubmenu }) => $hasSubmenu &&
1583
+ css `
1584
+ &::after {
1585
+ content: '›';
1586
+ margin-left: auto;
1587
+ font-size: 16px;
1588
+ opacity: 0.5;
1589
+ }
1590
+ `}
1591
+ `;
1592
+ export const ColumnMenuSubmenu = styled.div `
1593
+ position: absolute;
1594
+ top: 0;
1595
+ left: 100%;
1596
+ min-width: 150px;
1597
+ background: ${({ $theme }) => $theme.backgroundColor};
1598
+ border: 1px solid ${({ $theme }) => $theme.borderColor};
1599
+ border-radius: 6px;
1600
+ box-shadow: 0 4px 16px rgba(0, 0, 0, 0.15);
1601
+ overflow: hidden;
1602
+ `;
1603
+ // ============================================================================
1604
+ // Set Filter (Filter by unique values)
1605
+ // ============================================================================
1606
+ export const SetFilterContainer = styled.div `
1607
+ min-width: 200px;
1608
+ max-width: 300px;
1609
+ max-height: 400px;
1610
+ background: ${({ $theme }) => $theme.backgroundColor};
1611
+ border: 1px solid ${({ $theme }) => $theme.borderColor};
1612
+ border-radius: 6px;
1613
+ box-shadow: 0 4px 16px rgba(0, 0, 0, 0.15);
1614
+ overflow: hidden;
1615
+ display: flex;
1616
+ flex-direction: column;
1617
+ `;
1618
+ export const SetFilterHeader = styled.div `
1619
+ padding: 8px 12px;
1620
+ border-bottom: 1px solid ${({ $theme }) => $theme.borderColor};
1621
+ font-size: 12px;
1622
+ font-weight: 600;
1623
+ color: ${({ $theme }) => $theme.headerTextColor};
1624
+ background: ${({ $theme }) => $theme.headerBackgroundColor};
1625
+ `;
1626
+ export const SetFilterSearch = styled.div `
1627
+ padding: 8px 10px;
1628
+ border-bottom: 1px solid ${({ $theme }) => $theme.borderColor};
1629
+
1630
+ input {
1631
+ width: 100%;
1632
+ padding: 6px 10px;
1633
+ font-size: 12px;
1634
+ border: 1px solid ${({ $theme }) => $theme.borderColor};
1635
+ border-radius: 4px;
1636
+ background: ${({ $theme }) => $theme.backgroundColor};
1637
+ color: ${({ $theme }) => $theme.textColor};
1638
+ outline: none;
1639
+
1640
+ &:focus {
1641
+ border-color: ${({ $theme }) => $theme.accentColor};
1642
+ }
1643
+
1644
+ &::placeholder {
1645
+ color: ${({ $theme }) => $theme.headerTextColor};
1646
+ opacity: 0.6;
1647
+ }
1648
+ }
1649
+ `;
1650
+ export const SetFilterList = styled.div `
1651
+ flex: 1;
1652
+ overflow-y: auto;
1653
+ max-height: 280px;
1654
+ `;
1655
+ export const SetFilterItem = styled.label `
1656
+ display: flex;
1657
+ align-items: center;
1658
+ gap: 8px;
1659
+ padding: 6px 12px;
1660
+ font-size: 13px;
1661
+ color: ${({ $theme }) => $theme.textColor};
1662
+ cursor: pointer;
1663
+ transition: background-color 0.1s ease;
1664
+ border-bottom: ${({ $selectAll, $theme }) => ($selectAll ? `1px solid ${$theme.borderColor}` : 'none')};
1665
+ font-weight: ${({ $selectAll }) => ($selectAll ? '500' : 'normal')};
1666
+
1667
+ &:hover {
1668
+ background: ${({ $theme }) => $theme.hoverRowBackgroundColor};
1669
+ }
1670
+
1671
+ input {
1672
+ margin: 0;
1673
+ accent-color: ${({ $theme }) => $theme.accentColor};
1674
+ }
1675
+ `;
1676
+ export const SetFilterActions = styled.div `
1677
+ display: flex;
1678
+ gap: 8px;
1679
+ padding: 8px 10px;
1680
+ border-top: 1px solid ${({ $theme }) => $theme.borderColor};
1681
+ background: ${({ $theme }) => $theme.headerBackgroundColor};
1682
+ `;
1683
+ export const SetFilterButton = styled.button `
1684
+ flex: 1;
1685
+ padding: 6px 12px;
1686
+ font-size: 12px;
1687
+ font-weight: 500;
1688
+ border: 1px solid ${({ $theme, $primary }) => ($primary ? $theme.accentColor : $theme.borderColor)};
1689
+ border-radius: 4px;
1690
+ background: ${({ $theme, $primary }) => ($primary ? $theme.accentColor : $theme.backgroundColor)};
1691
+ color: ${({ $primary, $theme }) => ($primary ? '#ffffff' : $theme.textColor)};
1692
+ cursor: pointer;
1693
+ transition: all 0.15s ease;
1694
+
1695
+ &:hover {
1696
+ filter: brightness(0.95);
1697
+ }
1698
+ `;
1699
+ // ============================================================================
1700
+ // Filter Panel in Side Bar
1701
+ // ============================================================================
1702
+ export const FilterPanelColumn = styled.div `
1703
+ border-bottom: 1px solid ${({ $theme }) => $theme.borderColor};
1704
+ `;
1705
+ export const FilterPanelHeader = styled.div `
1706
+ display: flex;
1707
+ align-items: center;
1708
+ gap: 8px;
1709
+ padding: 8px 12px;
1710
+ font-size: 13px;
1711
+ font-weight: 500;
1712
+ color: ${({ $theme, $hasFilter }) => ($hasFilter ? $theme.accentColor : $theme.textColor)};
1713
+ cursor: pointer;
1714
+ transition: background-color 0.1s ease;
1715
+
1716
+ &:hover {
1717
+ background: ${({ $theme }) => $theme.hoverRowBackgroundColor};
1718
+ }
1719
+
1720
+ svg {
1721
+ width: 12px;
1722
+ height: 12px;
1723
+ transition: transform 0.2s ease;
1724
+ transform: ${({ $expanded }) => ($expanded ? 'rotate(90deg)' : 'rotate(0deg)')};
1725
+ opacity: 0.5;
1726
+ }
1727
+ `;
1728
+ export const FilterPanelContent = styled.div `
1729
+ display: ${({ $expanded }) => ($expanded ? 'block' : 'none')};
1730
+ padding: 8px 12px;
1731
+ background: ${({ $theme }) => $theme.headerBackgroundColor}50;
1732
+ `;
1733
+ // ============================================================================
1734
+ // Grid Container with Side Panel Layout
1735
+ // ============================================================================
1736
+ export const GridLayout = styled.div `
1737
+ display: flex;
1738
+ width: 100%;
1739
+ height: 100%;
1740
+ overflow: hidden;
1741
+ `;
1742
+ export const GridMainArea = styled.div `
1743
+ flex: 1;
1744
+ display: flex;
1745
+ flex-direction: column;
1746
+ min-width: 0;
1747
+ overflow: hidden;
1748
+ `;
1749
+ // ============================================================================
1750
+ // Column Visibility Dropdown
1751
+ // ============================================================================
1752
+ export const ColumnVisibilityDropdown = styled.div `
1753
+ position: absolute;
1754
+ top: 100%;
1755
+ right: 0;
1756
+ min-width: 220px;
1757
+ max-height: 400px;
1758
+ background: ${({ $theme }) => $theme.backgroundColor};
1759
+ border: 1px solid ${({ $theme }) => $theme.borderColor};
1760
+ border-radius: 6px;
1761
+ box-shadow: 0 4px 16px rgba(0, 0, 0, 0.15);
1762
+ z-index: 100;
1763
+ overflow: hidden;
1764
+ display: flex;
1765
+ flex-direction: column;
1766
+ animation: ${fadeIn} 0.15s ease;
1767
+ `;
1768
+ export const ColumnVisibilityList = styled.div `
1769
+ flex: 1;
1770
+ overflow-y: auto;
1771
+ `;
1772
+ export const ColumnVisibilityItem = styled.label `
1773
+ display: flex;
1774
+ align-items: center;
1775
+ gap: 8px;
1776
+ padding: 8px 12px;
1777
+ font-size: 13px;
1778
+ color: ${({ $theme }) => $theme.textColor};
1779
+ cursor: pointer;
1780
+ transition: background-color 0.1s ease;
1781
+
1782
+ &:hover {
1783
+ background: ${({ $theme }) => $theme.hoverRowBackgroundColor};
1784
+ }
1785
+
1786
+ input {
1787
+ margin: 0;
1788
+ accent-color: ${({ $theme }) => $theme.accentColor};
1789
+ }
1790
+ `;
1791
+ // ============================================================================
1154
1792
  // Export all themes
1155
1793
  // ============================================================================
1156
1794
  export { themes };