react-restyle-components 0.4.41 → 0.4.42
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/lib/src/core-components/src/components/ag-grid/AgGrid.js +332 -8
- package/lib/src/core-components/src/components/ag-grid/elements.d.ts +136 -0
- package/lib/src/core-components/src/components/ag-grid/elements.js +639 -1
- package/lib/src/core-components/src/components/ag-grid/hooks.d.ts +80 -0
- package/lib/src/core-components/src/components/ag-grid/hooks.js +277 -0
- package/lib/src/core-components/src/components/ag-grid/index.d.ts +2 -1
- package/lib/src/core-components/src/components/ag-grid/index.js +2 -0
- package/lib/src/core-components/src/tc.global.css +5 -1
- package/lib/src/core-components/src/utils/designTokens.d.ts +9 -9
- package/lib/src/core-components/src/utils/designTokens.js +13 -10
- 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
|
-
|
|
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 };
|