@redacto.io/consent-sdk-react 5.3.0 → 6.0.0

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 (57) hide show
  1. package/.turbo/turbo-build.log +24 -0
  2. package/CHANGELOG.md +6 -0
  3. package/dist/privacy-center.d.mts +98 -38
  4. package/dist/privacy-center.d.ts +98 -38
  5. package/dist/privacy-center.js +3679 -1491
  6. package/dist/privacy-center.mjs +3614 -1423
  7. package/package.json +1 -1
  8. package/src/RedactoPrivacyCenter/api/actions.ts +52 -8
  9. package/src/RedactoPrivacyCenter/api/client.ts +58 -15
  10. package/src/RedactoPrivacyCenter/components/ConsentManager.tsx +722 -273
  11. package/src/RedactoPrivacyCenter/components/ConsentManagerCells.tsx +187 -0
  12. package/src/RedactoPrivacyCenter/components/ConsentManagerColumns.tsx +65 -165
  13. package/src/RedactoPrivacyCenter/components/ConsentManagerExpandedRow.tsx +179 -0
  14. package/src/RedactoPrivacyCenter/components/ConsentManagerGroupedColumns.tsx +318 -0
  15. package/src/RedactoPrivacyCenter/components/ConsentManagerProductCards.tsx +333 -0
  16. package/src/RedactoPrivacyCenter/components/ConsentManagerPurposeCards.tsx +102 -0
  17. package/src/RedactoPrivacyCenter/components/ConsentManagerTableSkeleton.tsx +6 -2
  18. package/src/RedactoPrivacyCenter/components/ModifyConsentModal.tsx +8 -5
  19. package/src/RedactoPrivacyCenter/components/NotificationHub/NotificationBell.tsx +1 -1
  20. package/src/RedactoPrivacyCenter/components/PrivacyCenterLayout.tsx +102 -53
  21. package/src/RedactoPrivacyCenter/components/types.ts +2 -5
  22. package/src/RedactoPrivacyCenter/context/PageChromeContext.tsx +21 -1
  23. package/src/RedactoPrivacyCenter/lib/api.ts +70 -28
  24. package/src/RedactoPrivacyCenter/lib/consent-manager/utils.tsx +4 -2
  25. package/src/RedactoPrivacyCenter/lib/types.ts +57 -36
  26. package/src/RedactoPrivacyCenter/locales/as/translation.json +12 -1
  27. package/src/RedactoPrivacyCenter/locales/bho/translation.json +12 -1
  28. package/src/RedactoPrivacyCenter/locales/bn/translation.json +12 -1
  29. package/src/RedactoPrivacyCenter/locales/brx/translation.json +12 -1
  30. package/src/RedactoPrivacyCenter/locales/doi/translation.json +12 -1
  31. package/src/RedactoPrivacyCenter/locales/en/translation.json +16 -1
  32. package/src/RedactoPrivacyCenter/locales/gom/translation.json +12 -1
  33. package/src/RedactoPrivacyCenter/locales/gu/translation.json +12 -1
  34. package/src/RedactoPrivacyCenter/locales/hi/translation.json +15 -1
  35. package/src/RedactoPrivacyCenter/locales/kn/translation.json +12 -1
  36. package/src/RedactoPrivacyCenter/locales/ks/translation.json +12 -1
  37. package/src/RedactoPrivacyCenter/locales/mai/translation.json +12 -1
  38. package/src/RedactoPrivacyCenter/locales/ml/translation.json +12 -1
  39. package/src/RedactoPrivacyCenter/locales/mni-Mtei/translation.json +12 -1
  40. package/src/RedactoPrivacyCenter/locales/mr/translation.json +12 -1
  41. package/src/RedactoPrivacyCenter/locales/ne/translation.json +12 -1
  42. package/src/RedactoPrivacyCenter/locales/or/translation.json +12 -1
  43. package/src/RedactoPrivacyCenter/locales/pa/translation.json +12 -1
  44. package/src/RedactoPrivacyCenter/locales/sa/translation.json +12 -1
  45. package/src/RedactoPrivacyCenter/locales/sat/translation.json +12 -1
  46. package/src/RedactoPrivacyCenter/locales/sd/translation.json +12 -1
  47. package/src/RedactoPrivacyCenter/locales/ta/translation.json +12 -1
  48. package/src/RedactoPrivacyCenter/locales/te/translation.json +12 -1
  49. package/src/RedactoPrivacyCenter/locales/ur/translation.json +12 -1
  50. package/src/RedactoPrivacyCenter/styles/injectStyles.ts +527 -5
  51. package/src/RedactoPrivacyCenter/styles/variables.css +5 -0
  52. package/src/RedactoPrivacyCenter/table/AdvancedTable.tsx +36 -16
  53. package/src/RedactoPrivacyCenter/table/AdvancedTablePagination.tsx +4 -12
  54. package/src/RedactoPrivacyCenter/ui/PCInput.tsx +1 -1
  55. package/src/RedactoPrivacyCenter/ui/PCSelect.tsx +51 -5
  56. package/src/RedactoPrivacyCenter/ui/ThemeToggle.tsx +2 -4
  57. package/src/privacy-center.ts +7 -3
@@ -100,6 +100,8 @@ export const injectPCStyles = () => {
100
100
  --pc-z-popover: 1060;
101
101
  --pc-z-tooltip: 1070;
102
102
  --pc-icon-filter: 0;
103
+ --pc-consent-toolbar-control-height: 2rem;
104
+ --pc-navbar-actions-control-height: var(--pc-consent-toolbar-control-height);
103
105
  --pc-sidebar-mobile-width: 280px;
104
106
  --pc-sidebar-collapsed-width: 80px;
105
107
  --pc-sidebar-expanded-width: 300px;
@@ -135,6 +137,8 @@ export const injectPCStyles = () => {
135
137
  --pc-border-color-focus: #60a5fa;
136
138
  --pc-sidebar-shadow: 14px 0 36px rgba(2, 6, 23, 0.42), 1px 0 0 rgba(148, 163, 184, 0.08);
137
139
  --pc-icon-filter: 1;
140
+ --pc-consent-toolbar-control-height: 2rem;
141
+ --pc-navbar-actions-control-height: var(--pc-consent-toolbar-control-height);
138
142
  }
139
143
  `;
140
144
  document.head.appendChild(variablesStyle);
@@ -970,6 +974,516 @@ export const injectPCStyles = () => {
970
974
  }
971
975
  }
972
976
 
977
+ .pc-navbar-actions {
978
+ align-items: center !important;
979
+ }
980
+ .pc-navbar-language-select {
981
+ width: auto !important;
982
+ min-width: 120px !important;
983
+ max-width: min(65vw, 320px) !important;
984
+ }
985
+ .pc-navbar-language-select .pc-select {
986
+ box-sizing: border-box !important;
987
+ height: var(--pc-navbar-actions-control-height, var(--pc-consent-toolbar-control-height, 2rem)) !important;
988
+ min-height: var(--pc-navbar-actions-control-height, var(--pc-consent-toolbar-control-height, 2rem)) !important;
989
+ max-height: var(--pc-navbar-actions-control-height, var(--pc-consent-toolbar-control-height, 2rem)) !important;
990
+ padding: 0 0.625rem !important;
991
+ border-color: var(--pc-border-color) !important;
992
+ border-radius: 0.5rem !important;
993
+ background-color: var(--pc-bg-primary) !important;
994
+ box-shadow: none !important;
995
+ font-size: 0.8125rem !important;
996
+ line-height: 1 !important;
997
+ }
998
+ .pc-navbar-language-select .pc-select > span:nth-child(2) {
999
+ line-height: 1.25 !important;
1000
+ }
1001
+ .pc-navbar-language-select .pc-select svg {
1002
+ width: 12px;
1003
+ height: 12px;
1004
+ }
1005
+ .pc-navbar-icon-btn {
1006
+ box-sizing: border-box !important;
1007
+ width: var(--pc-navbar-actions-control-height, var(--pc-consent-toolbar-control-height, 2rem)) !important;
1008
+ height: var(--pc-navbar-actions-control-height, var(--pc-consent-toolbar-control-height, 2rem)) !important;
1009
+ min-width: var(--pc-navbar-actions-control-height, var(--pc-consent-toolbar-control-height, 2rem)) !important;
1010
+ min-height: var(--pc-navbar-actions-control-height, var(--pc-consent-toolbar-control-height, 2rem)) !important;
1011
+ border: 1px solid var(--pc-border-color) !important;
1012
+ border-radius: 0.5rem !important;
1013
+ background-color: var(--pc-bg-primary) !important;
1014
+ color: var(--pc-text-primary) !important;
1015
+ padding: 0 !important;
1016
+ }
1017
+ .pc-navbar-icon-btn:hover:not(:disabled) {
1018
+ background-color: var(--pc-bg-hover) !important;
1019
+ border-color: var(--pc-border-color-hover) !important;
1020
+ }
1021
+
1022
+ /* Manage Consent specific shell + table polish */
1023
+ .pc-consent-manager-surface {
1024
+ width: 100%;
1025
+ margin: 0;
1026
+ padding-top: 0.25rem;
1027
+ }
1028
+ .pc-consent-shell-card .pc-consent-tabs-row {
1029
+ align-items: center !important;
1030
+ justify-content: space-between !important;
1031
+ padding-top: 0.125rem !important;
1032
+ padding-bottom: 0.375rem !important;
1033
+ }
1034
+ .pc-consent-shell-card .pc-consent-tabs-left {
1035
+ display: flex !important;
1036
+ align-items: center !important;
1037
+ min-width: 0 !important;
1038
+ }
1039
+ .pc-consent-shell-card .pc-consent-view-toggle {
1040
+ margin-left: auto !important;
1041
+ display: flex !important;
1042
+ align-items: center !important;
1043
+ gap: 0.625rem !important;
1044
+ padding-right: 0.5rem !important;
1045
+ flex-shrink: 0 !important;
1046
+ margin-bottom: 0.0625rem !important;
1047
+ }
1048
+ .pc-consent-shell-card .pc-consent-view-toggle-label {
1049
+ white-space: nowrap !important;
1050
+ font-size: 0.75rem !important;
1051
+ color: var(--pc-text-secondary) !important;
1052
+ }
1053
+ .pc-consent-shell-card .pc-consent-view-toggle-group {
1054
+ box-shadow: none !important;
1055
+ border: 1px solid var(--pc-border-color) !important;
1056
+ background-color: var(--pc-bg-secondary) !important;
1057
+ }
1058
+ .pc-consent-shell-card .pc-consent-view-toggle-btn {
1059
+ color: var(--pc-text-secondary);
1060
+ }
1061
+ .pc-consent-shell-card .pc-consent-view-toggle-btn:hover:not(.is-active) {
1062
+ background-color: var(--pc-bg-hover) !important;
1063
+ color: var(--pc-text-primary) !important;
1064
+ }
1065
+ .pc-consent-shell-card .pc-consent-view-toggle-btn.is-active {
1066
+ background-color: var(--pc-primary) !important;
1067
+ color: var(--pc-text-inverse) !important;
1068
+ box-shadow: 0 1px 2px rgba(0, 0, 0, 0.12) !important;
1069
+ }
1070
+ .pc-consent-shell-card .pc-filters-responsive {
1071
+ gap: 0.75rem !important;
1072
+ }
1073
+ @media (min-width: 768px) {
1074
+ .pc-consent-shell-card .pc-filters-responsive {
1075
+ align-items: center !important;
1076
+ }
1077
+ }
1078
+ .pc-consent-shell-card .pc-search-responsive {
1079
+ max-width: none !important;
1080
+ }
1081
+ .pc-consent-shell-card .pc-search-responsive > div {
1082
+ width: 100% !important;
1083
+ }
1084
+ .pc-consent-shell-card .pc-search-responsive [style*="border"] {
1085
+ border-color: var(--pc-border-color) !important;
1086
+ box-shadow: none !important;
1087
+ }
1088
+ .pc-consent-shell-card .pc-search-responsive .pc-input-affix {
1089
+ box-sizing: border-box !important;
1090
+ height: var(--pc-consent-toolbar-control-height, 2rem) !important;
1091
+ min-height: var(--pc-consent-toolbar-control-height, 2rem) !important;
1092
+ max-height: var(--pc-consent-toolbar-control-height, 2rem) !important;
1093
+ align-items: stretch !important;
1094
+ }
1095
+ .pc-consent-shell-card .pc-search-responsive .pc-input-affix > span:first-of-type,
1096
+ .pc-consent-shell-card .pc-search-responsive .pc-input-affix > button {
1097
+ align-self: center !important;
1098
+ }
1099
+ .pc-consent-shell-card .pc-search-responsive .pc-input {
1100
+ box-sizing: border-box !important;
1101
+ height: 100% !important;
1102
+ min-height: 0 !important;
1103
+ max-height: none !important;
1104
+ padding: 0.25rem 0.5rem !important;
1105
+ line-height: 1.25 !important;
1106
+ font-size: 0.75rem !important;
1107
+ }
1108
+ .pc-consent-shell-card .pc-filter-select .pc-select {
1109
+ box-sizing: border-box !important;
1110
+ height: var(--pc-consent-toolbar-control-height, 2rem) !important;
1111
+ min-height: var(--pc-consent-toolbar-control-height, 2rem) !important;
1112
+ max-height: var(--pc-consent-toolbar-control-height, 2rem) !important;
1113
+ padding: 0.25rem 0.5rem !important;
1114
+ line-height: 1 !important;
1115
+ font-size: 0.75rem !important;
1116
+ }
1117
+ .pc-consent-shell-card .pc-filter-select .pc-select > span:nth-child(2) {
1118
+ line-height: 1.25 !important;
1119
+ }
1120
+ .pc-consent-shell-card .pc-filters-summary {
1121
+ font-size: 0.6875rem !important;
1122
+ color: var(--pc-text-secondary) !important;
1123
+ }
1124
+ .pc-consent-desktop-view {
1125
+ display: block;
1126
+ }
1127
+ .pc-consent-mobile-view {
1128
+ display: none;
1129
+ }
1130
+ .pc-consent-mobile-list {
1131
+ display: flex;
1132
+ flex-direction: column;
1133
+ gap: 0.625rem;
1134
+ }
1135
+ .pc-consent-mobile-card {
1136
+ display: flex;
1137
+ flex-direction: column;
1138
+ gap: 0.5rem;
1139
+ border: 1px solid var(--pc-border-color);
1140
+ border-radius: var(--pc-border-radius-lg);
1141
+ background-color: var(--pc-bg-primary);
1142
+ padding: 0.625rem 0.75rem;
1143
+ box-shadow: none;
1144
+ }
1145
+ .pc-consent-mobile-card-header {
1146
+ display: flex;
1147
+ align-items: flex-start;
1148
+ justify-content: space-between;
1149
+ gap: 0.5rem;
1150
+ flex-wrap: wrap;
1151
+ }
1152
+ .pc-consent-mobile-product-head {
1153
+ display: flex;
1154
+ align-items: flex-start;
1155
+ gap: 0.5rem;
1156
+ min-width: 0;
1157
+ flex: 1 1 180px;
1158
+ }
1159
+ .pc-consent-mobile-avatar {
1160
+ display: inline-flex;
1161
+ align-items: center;
1162
+ justify-content: center;
1163
+ width: 24px;
1164
+ height: 24px;
1165
+ border-radius: 0.4375rem;
1166
+ font-size: 0.6875rem;
1167
+ font-weight: 700;
1168
+ line-height: 1;
1169
+ flex-shrink: 0;
1170
+ }
1171
+ .pc-consent-mobile-subtle-text {
1172
+ margin: 0 !important;
1173
+ margin-top: 0.125rem !important;
1174
+ font-size: 0.6875rem !important;
1175
+ line-height: 1.2 !important;
1176
+ color: var(--pc-text-secondary) !important;
1177
+ display: -webkit-box;
1178
+ -webkit-line-clamp: 2;
1179
+ -webkit-box-orient: vertical;
1180
+ overflow: hidden;
1181
+ word-break: break-word;
1182
+ }
1183
+ .pc-consent-mobile-chip-row {
1184
+ display: flex;
1185
+ flex-wrap: wrap;
1186
+ gap: 0.375rem;
1187
+ }
1188
+ .pc-consent-mobile-status-chip {
1189
+ font-size: 0.65625rem !important;
1190
+ font-weight: 600 !important;
1191
+ padding: 0.125rem 0.4375rem !important;
1192
+ }
1193
+ .pc-consent-mobile-activity-row {
1194
+ display: flex;
1195
+ flex-direction: column;
1196
+ gap: 0.125rem;
1197
+ min-width: 0;
1198
+ }
1199
+ .pc-consent-mobile-meta-grid {
1200
+ display: grid;
1201
+ grid-template-columns: repeat(2, minmax(0, 1fr));
1202
+ gap: 0.5rem 0.625rem;
1203
+ }
1204
+ .pc-consent-mobile-meta-label {
1205
+ margin: 0 !important;
1206
+ margin-bottom: 0.1875rem !important;
1207
+ font-size: 0.625rem !important;
1208
+ text-transform: uppercase;
1209
+ letter-spacing: 0.05em;
1210
+ color: var(--pc-text-tertiary) !important;
1211
+ }
1212
+ .pc-consent-mobile-action-cell {
1213
+ display: flex;
1214
+ flex-direction: column;
1215
+ align-items: flex-start;
1216
+ justify-content: flex-end;
1217
+ }
1218
+ .pc-consent-mobile-expand-btn {
1219
+ width: 100%;
1220
+ display: flex;
1221
+ align-items: center;
1222
+ justify-content: space-between;
1223
+ border: 1px solid var(--pc-border-color);
1224
+ border-radius: var(--pc-border-radius-md);
1225
+ background-color: var(--pc-bg-secondary);
1226
+ color: var(--pc-text-primary);
1227
+ font-size: 0.75rem;
1228
+ font-weight: 600;
1229
+ padding: 0.375rem 0.5rem;
1230
+ cursor: pointer;
1231
+ }
1232
+ .pc-consent-mobile-purpose-list {
1233
+ display: flex;
1234
+ flex-direction: column;
1235
+ gap: 0.5rem;
1236
+ padding-top: 0.125rem;
1237
+ }
1238
+ .pc-consent-mobile-purpose-item {
1239
+ border: 1px solid var(--pc-border-color);
1240
+ border-radius: var(--pc-border-radius-md);
1241
+ background-color: var(--pc-bg-secondary);
1242
+ padding: 0.5rem;
1243
+ }
1244
+ .pc-consent-mobile-purpose-head {
1245
+ display: flex;
1246
+ align-items: flex-start;
1247
+ justify-content: space-between;
1248
+ gap: 0.5rem;
1249
+ margin-bottom: 0.375rem;
1250
+ }
1251
+ .pc-consent-mobile-empty {
1252
+ border: 1px solid var(--pc-border-color);
1253
+ border-radius: var(--pc-border-radius-lg);
1254
+ background-color: var(--pc-bg-primary);
1255
+ padding: 0.75rem;
1256
+ }
1257
+ .pc-consent-shell-card .pc-export-button-responsive {
1258
+ display: inline-flex !important;
1259
+ align-items: center !important;
1260
+ }
1261
+ .pc-consent-shell-card .pc-export-button-responsive button {
1262
+ box-sizing: border-box !important;
1263
+ height: var(--pc-consent-toolbar-control-height, 2rem) !important;
1264
+ min-height: var(--pc-consent-toolbar-control-height, 2rem) !important;
1265
+ max-height: var(--pc-consent-toolbar-control-height, 2rem) !important;
1266
+ padding: 0 0.625rem !important;
1267
+ line-height: 1 !important;
1268
+ border-color: var(--pc-border-color) !important;
1269
+ box-shadow: none !important;
1270
+ font-size: 0.75rem !important;
1271
+ }
1272
+ .pc-consent-shell-card .pc-filters-row-responsive {
1273
+ gap: 0.5rem !important;
1274
+ }
1275
+ @media (min-width: 768px) {
1276
+ .pc-consent-shell-card .pc-search-responsive {
1277
+ width: 310px !important;
1278
+ min-width: 310px !important;
1279
+ flex: 0 0 310px !important;
1280
+ }
1281
+ .pc-consent-shell-card .pc-filters-row-responsive {
1282
+ align-items: center !important;
1283
+ justify-content: flex-start !important;
1284
+ margin-left: 0 !important;
1285
+ flex: 1 1 auto !important;
1286
+ width: auto !important;
1287
+ }
1288
+ .pc-consent-shell-card .pc-filter-select {
1289
+ width: auto !important;
1290
+ min-width: 0 !important;
1291
+ flex: 0 0 auto !important;
1292
+ }
1293
+ .pc-consent-shell-card .pc-filter-select:first-child {
1294
+ width: 128px !important;
1295
+ min-width: 128px !important;
1296
+ }
1297
+ .pc-consent-shell-card .pc-filter-select:nth-child(2) {
1298
+ width: 136px !important;
1299
+ min-width: 136px !important;
1300
+ }
1301
+ .pc-consent-shell-card .pc-filters-summary {
1302
+ margin-left: auto !important;
1303
+ }
1304
+ }
1305
+ @media (max-width: 767px) {
1306
+ .pc-consent-desktop-view {
1307
+ display: none;
1308
+ }
1309
+ .pc-consent-mobile-view {
1310
+ display: block;
1311
+ }
1312
+ .pc-consent-shell-card .pc-consent-tabs-row {
1313
+ flex-wrap: wrap !important;
1314
+ padding-bottom: 0.375rem !important;
1315
+ }
1316
+ .pc-consent-shell-card .pc-consent-view-toggle-label {
1317
+ display: none !important;
1318
+ }
1319
+ .pc-consent-shell-card .pc-consent-view-toggle {
1320
+ width: 100% !important;
1321
+ justify-content: flex-end !important;
1322
+ padding-right: 0 !important;
1323
+ margin-bottom: 0 !important;
1324
+ }
1325
+ .pc-consent-shell-card .pc-filters-row-responsive {
1326
+ width: 100% !important;
1327
+ }
1328
+ .pc-consent-shell-card .pc-filters-summary {
1329
+ align-self: flex-start !important;
1330
+ }
1331
+ .pc-consent-pagination-wrap {
1332
+ margin-top: 0.5rem;
1333
+ }
1334
+ }
1335
+ @media (min-width: 768px) {
1336
+ .pc-consent-desktop-view {
1337
+ display: block;
1338
+ }
1339
+ .pc-consent-mobile-view {
1340
+ display: none;
1341
+ }
1342
+ }
1343
+ @media (max-width: 420px) {
1344
+ .pc-consent-mobile-meta-grid {
1345
+ grid-template-columns: 1fr;
1346
+ }
1347
+ }
1348
+
1349
+ .pc-consent-table-container {
1350
+ border: 1px solid var(--pc-border-color) !important;
1351
+ border-bottom: none !important;
1352
+ border-radius: var(--pc-border-radius-lg) var(--pc-border-radius-lg) 0 0 !important;
1353
+ box-shadow: none !important;
1354
+ overflow: hidden !important;
1355
+ }
1356
+ .pc-consent-table {
1357
+ table-layout: fixed;
1358
+ width: 100%;
1359
+ }
1360
+ .pc-consent-table th:first-child,
1361
+ .pc-consent-table td:first-child {
1362
+ width: 32px !important;
1363
+ min-width: 32px !important;
1364
+ max-width: 32px !important;
1365
+ }
1366
+ .pc-consent-table th:nth-child(2),
1367
+ .pc-consent-table td:nth-child(2) {
1368
+ width: 38% !important;
1369
+ min-width: 260px !important;
1370
+ }
1371
+ .pc-consent-table th:nth-child(3),
1372
+ .pc-consent-table td:nth-child(3) {
1373
+ width: 15% !important;
1374
+ min-width: 120px !important;
1375
+ }
1376
+ .pc-consent-table th:nth-child(4),
1377
+ .pc-consent-table td:nth-child(4) {
1378
+ width: 20% !important;
1379
+ min-width: 160px !important;
1380
+ }
1381
+ .pc-consent-table th:last-child,
1382
+ .pc-consent-table td:last-child {
1383
+ width: 27% !important;
1384
+ min-width: 180px !important;
1385
+ }
1386
+ .pc-consent-table-purpose th:first-child,
1387
+ .pc-consent-table-purpose td:first-child {
1388
+ width: 28% !important;
1389
+ min-width: 220px !important;
1390
+ max-width: none !important;
1391
+ text-align: left !important;
1392
+ padding-left: 0.875rem !important;
1393
+ padding-right: 0.875rem !important;
1394
+ }
1395
+ .pc-consent-table-purpose th:nth-child(2),
1396
+ .pc-consent-table-purpose td:nth-child(2) {
1397
+ width: 18% !important;
1398
+ min-width: 140px !important;
1399
+ }
1400
+ .pc-consent-table-purpose th:nth-child(3),
1401
+ .pc-consent-table-purpose td:nth-child(3) {
1402
+ width: 14% !important;
1403
+ min-width: 110px !important;
1404
+ }
1405
+ .pc-consent-table-purpose th:nth-child(4),
1406
+ .pc-consent-table-purpose td:nth-child(4) {
1407
+ width: 16% !important;
1408
+ min-width: 140px !important;
1409
+ }
1410
+ .pc-consent-table-purpose th:nth-child(5),
1411
+ .pc-consent-table-purpose td:nth-child(5) {
1412
+ width: 14% !important;
1413
+ min-width: 120px !important;
1414
+ }
1415
+ .pc-consent-table-purpose th:nth-child(6),
1416
+ .pc-consent-table-purpose td:nth-child(6) {
1417
+ width: 10% !important;
1418
+ min-width: 90px !important;
1419
+ }
1420
+ .pc-consent-table-purpose th:nth-child(7),
1421
+ .pc-consent-table-purpose td:nth-child(7) {
1422
+ width: 10% !important;
1423
+ min-width: 90px !important;
1424
+ text-align: right !important;
1425
+ }
1426
+ .pc-consent-table-purpose .pc-consent-table-head-cell:first-child,
1427
+ .pc-consent-table-purpose .pc-consent-table-row td:first-child {
1428
+ text-align: left !important;
1429
+ padding-left: 0.875rem !important;
1430
+ padding-right: 0.875rem !important;
1431
+ }
1432
+ .pc-consent-table-head-cell {
1433
+ font-size: 0.65rem !important;
1434
+ letter-spacing: 0.06em !important;
1435
+ text-transform: uppercase !important;
1436
+ color: var(--pc-text-primary) !important;
1437
+ font-weight: 600 !important;
1438
+ padding-top: 0.625rem !important;
1439
+ padding-bottom: 0.625rem !important;
1440
+ background-color: var(--pc-bg-secondary) !important;
1441
+ }
1442
+ .pc-consent-table-row td {
1443
+ padding-top: 0.5rem !important;
1444
+ padding-bottom: 0.5rem !important;
1445
+ vertical-align: middle !important;
1446
+ -webkit-user-select: none !important;
1447
+ user-select: none !important;
1448
+ }
1449
+ .pc-consent-table-head-cell:first-child,
1450
+ .pc-consent-table-row td:first-child {
1451
+ text-align: center !important;
1452
+ padding-left: 0.375rem !important;
1453
+ padding-right: 0.375rem !important;
1454
+ }
1455
+ .pc-consent-table-expanded-row:hover {
1456
+ background-color: transparent !important;
1457
+ }
1458
+ .pc-consent-table-expanded-row td {
1459
+ border-top: none !important;
1460
+ }
1461
+ .pc-consent-table-expanded-cell {
1462
+ padding: 0 !important;
1463
+ background-color: transparent !important;
1464
+ }
1465
+ /* Keep parent + expanded child hover in sync */
1466
+ .pc-consent-table-row:hover + .pc-consent-table-expanded-row .pc-consent-expanded-surface,
1467
+ .pc-consent-table-row:hover + .pc-consent-table-expanded-row .pc-consent-expanded-card,
1468
+ .pc-consent-table-row:hover + .pc-consent-table-expanded-row .pc-consent-expanded-card th,
1469
+ .pc-consent-table-row:hover + .pc-consent-table-expanded-row .pc-consent-expanded-card td,
1470
+ .pc-consent-table-expanded-row:hover .pc-consent-expanded-surface,
1471
+ .pc-consent-table-expanded-row:hover .pc-consent-expanded-card,
1472
+ .pc-consent-table-expanded-row:hover .pc-consent-expanded-card th,
1473
+ .pc-consent-table-expanded-row:hover .pc-consent-expanded-card td {
1474
+ background-color: var(--pc-bg-hover) !important;
1475
+ }
1476
+
1477
+ .pc-consent-pagination-wrap {
1478
+ border-top: none !important;
1479
+ border-left: 1px solid var(--pc-border-color);
1480
+ border-right: 1px solid var(--pc-border-color);
1481
+ border-bottom: 1px solid var(--pc-border-color);
1482
+ border-radius: 0 0 var(--pc-border-radius-lg) var(--pc-border-radius-lg);
1483
+ padding: 0.125rem 0.75rem 0.375rem;
1484
+ background-color: var(--pc-bg-primary);
1485
+ }
1486
+
973
1487
  /* ─── Case Details Page ───────────────────────────────────────────────── */
974
1488
 
975
1489
  .pc-case-page {
@@ -1885,19 +2399,27 @@ export const injectPCStyles = () => {
1885
2399
  display: flex;
1886
2400
  align-items: center;
1887
2401
  justify-content: center;
1888
- width: 32px;
1889
- height: 32px;
1890
- border: none;
1891
- background: none;
2402
+ box-sizing: border-box;
2403
+ width: var(--pc-navbar-actions-control-height, var(--pc-consent-toolbar-control-height, 2rem));
2404
+ height: var(--pc-navbar-actions-control-height, var(--pc-consent-toolbar-control-height, 2rem));
2405
+ min-width: var(--pc-navbar-actions-control-height, var(--pc-consent-toolbar-control-height, 2rem));
2406
+ min-height: var(--pc-navbar-actions-control-height, var(--pc-consent-toolbar-control-height, 2rem));
2407
+ border: 1px solid var(--pc-border-color);
2408
+ background: var(--pc-bg-primary);
1892
2409
  cursor: pointer;
1893
2410
  border-radius: 0.5rem;
1894
2411
  color: var(--pc-text-primary);
1895
- transition: color 0.3s ease, background-color 0.15s ease;
2412
+ transition: color 0.3s ease, background-color 0.15s ease, border-color 0.15s ease;
1896
2413
  padding: 0;
1897
2414
  }
2415
+ .pc-notification-bell-btn svg {
2416
+ width: 14px;
2417
+ height: 14px;
2418
+ }
1898
2419
 
1899
2420
  .pc-notification-bell-btn:hover {
1900
2421
  background-color: var(--pc-bg-hover);
2422
+ border-color: var(--pc-border-color-hover);
1901
2423
  }
1902
2424
 
1903
2425
  .pc-notification-filter-tab {
@@ -89,6 +89,11 @@
89
89
 
90
90
  /* Icon filters for dark theme */
91
91
  --pc-icon-filter: 0;
92
+
93
+ /* Manage Consent toolbar: search, filters, export */
94
+ --pc-consent-toolbar-control-height: 2rem;
95
+ /* Header: language, notifications, theme (same pixel row as compact controls) */
96
+ --pc-navbar-actions-control-height: var(--pc-consent-toolbar-control-height);
92
97
  }
93
98
 
94
99
  [data-theme="dark"] {
@@ -67,6 +67,7 @@ export default function AdvancedTable<TData extends Record<string, any>>({
67
67
  expandedComponent,
68
68
  }: AdvancedTableProps<TData>) {
69
69
  const { t } = useTranslation();
70
+ const [hoveredRowId, setHoveredRowId] = React.useState<string | null>(null);
70
71
  if (!table) return null;
71
72
 
72
73
  return (
@@ -111,8 +112,7 @@ export default function AdvancedTable<TData extends Record<string, any>>({
111
112
  const onRowClick = meta.onRowClick;
112
113
  const handleRowClick = onRowClick
113
114
  ? (e: React.MouseEvent) => {
114
- e.preventDefault();
115
- onRowClick(row.original);
115
+ onRowClick(row.original, row);
116
116
  }
117
117
  : undefined;
118
118
 
@@ -124,8 +124,23 @@ export default function AdvancedTable<TData extends Record<string, any>>({
124
124
  <React.Fragment key={row.id}>
125
125
  <PCTable.Row
126
126
  className={classNames?.rowClassName}
127
- style={onRowClick ? { cursor: 'pointer' } : {}}
127
+ style={{
128
+ ...(onRowClick ? { cursor: 'pointer' } : {}),
129
+ ...(row.getIsExpanded() ? { borderBottom: 'none' } : {}),
130
+ ...(hoveredRowId === row.id
131
+ ? { backgroundColor: getVar('--pc-bg-hover') }
132
+ : {}),
133
+ }}
128
134
  onClick={handleRowClick}
135
+ onMouseEnter={() => setHoveredRowId(row.id)}
136
+ onMouseLeave={(e) => {
137
+ const nextSibling = e.currentTarget.nextElementSibling;
138
+ const relatedTarget = e.relatedTarget as Node | null;
139
+ if (nextSibling && relatedTarget && nextSibling.contains(relatedTarget)) {
140
+ return;
141
+ }
142
+ setHoveredRowId((prev) => (prev === row.id ? null : prev));
143
+ }}
129
144
  >
130
145
  {row.getVisibleCells().map((cell) => (
131
146
  <TableCellBasic
@@ -141,12 +156,16 @@ export default function AdvancedTable<TData extends Record<string, any>>({
141
156
  <PCTable.Row
142
157
  className={classNames?.expandedRowClassName}
143
158
  style={{
144
- overflow: 'hidden',
145
- transition: 'all 0.3s ease-in-out',
146
- maxHeight: row.getIsExpanded() ? '2000px' : '0',
147
- opacity: row.getIsExpanded() ? 1 : 0,
148
- height: row.getIsExpanded() ? 'auto' : '0',
149
- minHeight: row.getIsExpanded() ? 'auto' : '0',
159
+ pointerEvents: row.getIsExpanded() ? 'auto' : 'none',
160
+ }}
161
+ onMouseEnter={() => setHoveredRowId(row.id)}
162
+ onMouseLeave={(e) => {
163
+ const previousSibling = e.currentTarget.previousElementSibling;
164
+ const relatedTarget = e.relatedTarget as Node | null;
165
+ if (previousSibling && relatedTarget && previousSibling.contains(relatedTarget)) {
166
+ return;
167
+ }
168
+ setHoveredRowId((prev) => (prev === row.id ? null : prev));
150
169
  }}
151
170
  >
152
171
  <PCTable.Cell
@@ -154,18 +173,19 @@ export default function AdvancedTable<TData extends Record<string, any>>({
154
173
  className={classNames?.expandedCellClassName}
155
174
  style={{
156
175
  padding: row.getIsExpanded() ? undefined : '0',
157
- transition: 'all 0.3s ease-in-out',
158
- height: row.getIsExpanded() ? 'auto' : '0',
159
- paddingTop: row.getIsExpanded() ? undefined : '0',
160
- paddingBottom: row.getIsExpanded() ? undefined : '0',
176
+ height: row.getIsExpanded() ? undefined : '0',
177
+ border: 'none',
161
178
  }}
162
179
  >
163
180
  <div
164
181
  style={{
165
- transition: 'all 0.3s ease-in-out',
166
- transform: row.getIsExpanded() ? 'translateY(0)' : 'translateY(-8px)',
182
+ overflow: 'hidden',
183
+ maxHeight: row.getIsExpanded() ? '1200px' : '0',
167
184
  opacity: row.getIsExpanded() ? 1 : 0,
168
- height: row.getIsExpanded() ? 'auto' : '0',
185
+ transform: row.getIsExpanded() ? 'translateY(0)' : 'translateY(-6px)',
186
+ transition:
187
+ 'max-height 260ms cubic-bezier(0.22, 1, 0.36, 1), opacity 220ms ease, transform 220ms ease',
188
+ willChange: 'max-height, opacity, transform',
169
189
  }}
170
190
  >
171
191
  {rowExpandedComponent(row)}