@pitvox/partner-react 0.2.1 → 0.4.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.
package/dist/styles.css CHANGED
@@ -1138,6 +1138,429 @@
1138
1138
  white-space: nowrap;
1139
1139
  }
1140
1140
 
1141
+ /* ─── Results view header ──────────────────────────────────────── */
1142
+
1143
+ .pvx-comp-results-header {
1144
+ display: flex;
1145
+ flex-wrap: wrap;
1146
+ align-items: flex-start;
1147
+ justify-content: space-between;
1148
+ gap: 1rem;
1149
+ }
1150
+
1151
+ .pvx-comp-results-cta {
1152
+ display: flex;
1153
+ flex-direction: column;
1154
+ align-items: flex-end;
1155
+ gap: 0.5rem;
1156
+ flex-shrink: 0;
1157
+ }
1158
+
1159
+ .pvx-comp-empty-sub {
1160
+ font-size: 0.875rem;
1161
+ color: var(--pvx-text-dimmed);
1162
+ margin-top: 0.5rem;
1163
+ }
1164
+
1165
+ /* ─── Accordion (round results) ────────────────────────────────── */
1166
+
1167
+ .pvx-comp-accordion {
1168
+ display: flex;
1169
+ flex-direction: column;
1170
+ gap: 0.75rem;
1171
+ padding: 1rem;
1172
+ }
1173
+
1174
+ .pvx-accordion-item {
1175
+ border-radius: var(--pvx-radius-sm);
1176
+ background: var(--pvx-tag-bg);
1177
+ overflow: hidden;
1178
+ }
1179
+
1180
+ .pvx-accordion-toggle {
1181
+ width: 100%;
1182
+ display: flex;
1183
+ align-items: center;
1184
+ justify-content: space-between;
1185
+ gap: 0.75rem;
1186
+ padding: 1rem 1.25rem;
1187
+ border: none;
1188
+ background: none;
1189
+ cursor: pointer;
1190
+ text-align: left;
1191
+ color: var(--pvx-text);
1192
+ transition: background 150ms;
1193
+ }
1194
+
1195
+ .pvx-accordion-toggle:hover {
1196
+ background: var(--pvx-bg-hover);
1197
+ }
1198
+
1199
+ .pvx-accordion-toggle-content {
1200
+ flex: 1;
1201
+ min-width: 0;
1202
+ }
1203
+
1204
+ .pvx-accordion-toggle-title {
1205
+ display: flex;
1206
+ align-items: baseline;
1207
+ flex-wrap: wrap;
1208
+ gap: 0.75rem;
1209
+ }
1210
+
1211
+ .pvx-accordion-round-label {
1212
+ font-weight: 600;
1213
+ color: var(--pvx-text-primary);
1214
+ }
1215
+
1216
+ .pvx-accordion-round-date {
1217
+ font-size: 0.875rem;
1218
+ color: var(--pvx-text-muted);
1219
+ }
1220
+
1221
+ .pvx-accordion-podium {
1222
+ display: flex;
1223
+ align-items: center;
1224
+ gap: 0.75rem;
1225
+ margin-top: 0.375rem;
1226
+ font-size: 0.75rem;
1227
+ color: var(--pvx-text-muted);
1228
+ }
1229
+
1230
+ .pvx-accordion-chevron {
1231
+ width: 1.25rem;
1232
+ height: 1.25rem;
1233
+ flex-shrink: 0;
1234
+ color: var(--pvx-text-muted);
1235
+ transition: transform 300ms;
1236
+ }
1237
+
1238
+ .pvx-accordion-chevron--open {
1239
+ transform: rotate(180deg);
1240
+ }
1241
+
1242
+ .pvx-accordion-content {
1243
+ padding: 0 1.25rem 1.25rem;
1244
+ }
1245
+
1246
+ /* ─── Registration CTA ───────────────────────────────────────── */
1247
+
1248
+ .pvx-comp-register-cta {
1249
+ display: flex;
1250
+ align-items: center;
1251
+ }
1252
+
1253
+ .pvx-comp-register-link {
1254
+ display: inline-block;
1255
+ padding: 0.5rem 1.25rem;
1256
+ border-radius: var(--pvx-radius-sm);
1257
+ font-size: 0.875rem;
1258
+ font-weight: 500;
1259
+ text-decoration: none;
1260
+ background: var(--pvx-accent);
1261
+ color: #fff;
1262
+ transition: background 150ms;
1263
+ }
1264
+
1265
+ .pvx-comp-register-link:hover {
1266
+ background: var(--pvx-accent-hover);
1267
+ }
1268
+
1269
+ .pvx-comp-register-btn {
1270
+ padding: 0.5rem 1.25rem;
1271
+ border-radius: var(--pvx-radius-sm);
1272
+ font-size: 0.875rem;
1273
+ font-weight: 500;
1274
+ border: none;
1275
+ cursor: pointer;
1276
+ background: var(--pvx-accent);
1277
+ color: #fff;
1278
+ transition: background 150ms;
1279
+ }
1280
+
1281
+ .pvx-comp-register-btn:hover {
1282
+ background: var(--pvx-accent-hover);
1283
+ }
1284
+
1285
+ .pvx-comp-register-btn:disabled {
1286
+ opacity: 0.5;
1287
+ cursor: not-allowed;
1288
+ }
1289
+
1290
+ /* ─── Card registration action row ─────────────────────────────── */
1291
+
1292
+ .pvx-comp-card-reg-info {
1293
+ display: flex;
1294
+ align-items: center;
1295
+ gap: 0.5rem;
1296
+ }
1297
+
1298
+ .pvx-comp-card-reg-action {
1299
+ flex-shrink: 0;
1300
+ }
1301
+
1302
+ .pvx-comp-card-reg-btn {
1303
+ display: inline-block;
1304
+ padding: 0.25rem 0.75rem;
1305
+ border-radius: var(--pvx-radius-sm);
1306
+ font-size: 0.75rem;
1307
+ font-weight: 600;
1308
+ border: none;
1309
+ cursor: pointer;
1310
+ text-decoration: none;
1311
+ transition: all 150ms;
1312
+ }
1313
+
1314
+ .pvx-comp-card-reg-btn--open {
1315
+ background: var(--pvx-accent);
1316
+ color: #fff;
1317
+ }
1318
+
1319
+ .pvx-comp-card-reg-btn--open:hover {
1320
+ background: var(--pvx-accent-hover);
1321
+ }
1322
+
1323
+ .pvx-comp-card-reg-btn--registered {
1324
+ background: rgba(34, 197, 94, 0.2);
1325
+ color: #4ade80;
1326
+ }
1327
+
1328
+ .pvx-comp-card-reg-btn--registered:hover {
1329
+ background: rgba(34, 197, 94, 0.3);
1330
+ }
1331
+
1332
+ .pvx-comp-card-reg-btn--closed {
1333
+ background: rgba(107, 114, 128, 0.2);
1334
+ color: #9ca3af;
1335
+ cursor: default;
1336
+ }
1337
+
1338
+ /* ─── Capacity badge ───────────────────────────────────────────── */
1339
+
1340
+ .pvx-reg-capacity {
1341
+ display: inline-block;
1342
+ padding: 0.125rem 0.5rem;
1343
+ border-radius: 9999px;
1344
+ font-size: 0.6875rem;
1345
+ font-weight: 600;
1346
+ }
1347
+
1348
+ .pvx-reg-capacity--ok {
1349
+ background: rgba(34, 197, 94, 0.2);
1350
+ color: #4ade80;
1351
+ }
1352
+
1353
+ .pvx-reg-capacity--warning {
1354
+ background: rgba(245, 158, 11, 0.2);
1355
+ color: #fbbf24;
1356
+ }
1357
+
1358
+ .pvx-reg-capacity--full {
1359
+ background: rgba(239, 68, 68, 0.2);
1360
+ color: #f87171;
1361
+ }
1362
+
1363
+ /* ─── Registration Panel ───────────────────────────────────────── */
1364
+
1365
+ .pvx-reg-panel {
1366
+ display: flex;
1367
+ flex-direction: column;
1368
+ gap: 1rem;
1369
+ }
1370
+
1371
+ .pvx-reg-status-msg {
1372
+ text-align: center;
1373
+ padding: 2rem 1rem;
1374
+ color: var(--pvx-text-muted);
1375
+ font-size: 0.9375rem;
1376
+ }
1377
+
1378
+ .pvx-reg-no-drivers {
1379
+ text-align: center;
1380
+ padding: 1.5rem 1rem;
1381
+ color: var(--pvx-text-muted);
1382
+ font-size: 0.875rem;
1383
+ }
1384
+
1385
+ /* ─── Registration Form ────────────────────────────────────────── */
1386
+
1387
+ .pvx-reg-form {
1388
+ display: flex;
1389
+ flex-direction: column;
1390
+ gap: 1rem;
1391
+ max-width: 32rem;
1392
+ }
1393
+
1394
+ .pvx-reg-form-header {
1395
+ display: flex;
1396
+ align-items: center;
1397
+ justify-content: space-between;
1398
+ gap: 0.75rem;
1399
+ }
1400
+
1401
+ .pvx-reg-form-title {
1402
+ font-size: 1.125rem;
1403
+ font-weight: 600;
1404
+ color: var(--pvx-text-primary);
1405
+ margin: 0;
1406
+ }
1407
+
1408
+ .pvx-reg-error {
1409
+ padding: 0.625rem 0.75rem;
1410
+ border-radius: var(--pvx-radius-sm);
1411
+ background: rgba(239, 68, 68, 0.15);
1412
+ color: #f87171;
1413
+ font-size: 0.8125rem;
1414
+ border: 1px solid rgba(239, 68, 68, 0.3);
1415
+ }
1416
+
1417
+ .pvx-reg-field {
1418
+ display: flex;
1419
+ flex-direction: column;
1420
+ gap: 0.375rem;
1421
+ }
1422
+
1423
+ .pvx-reg-label {
1424
+ font-size: 0.8125rem;
1425
+ font-weight: 500;
1426
+ color: var(--pvx-text);
1427
+ }
1428
+
1429
+ .pvx-reg-optional {
1430
+ font-weight: 400;
1431
+ color: var(--pvx-text-muted);
1432
+ }
1433
+
1434
+ .pvx-reg-input,
1435
+ .pvx-reg-select,
1436
+ .pvx-reg-textarea {
1437
+ padding: 0.5rem 0.75rem;
1438
+ border-radius: var(--pvx-radius-sm);
1439
+ border: 1px solid var(--pvx-border);
1440
+ background: var(--pvx-tag-bg);
1441
+ color: var(--pvx-text);
1442
+ font-size: 0.875rem;
1443
+ font-family: inherit;
1444
+ transition: border-color 150ms;
1445
+ }
1446
+
1447
+ .pvx-reg-input:focus,
1448
+ .pvx-reg-select:focus,
1449
+ .pvx-reg-textarea:focus {
1450
+ outline: none;
1451
+ border-color: var(--pvx-accent);
1452
+ }
1453
+
1454
+ .pvx-reg-textarea {
1455
+ resize: vertical;
1456
+ min-height: 4rem;
1457
+ }
1458
+
1459
+ .pvx-reg-actions {
1460
+ display: flex;
1461
+ align-items: center;
1462
+ gap: 0.75rem;
1463
+ padding-top: 0.5rem;
1464
+ }
1465
+
1466
+ /* ─── Unregister / Confirm ─────────────────────────────────────── */
1467
+
1468
+ .pvx-reg-unregister-btn {
1469
+ padding: 0.5rem 1.25rem;
1470
+ border-radius: var(--pvx-radius-sm);
1471
+ font-size: 0.875rem;
1472
+ font-weight: 500;
1473
+ border: 1px solid var(--pvx-border);
1474
+ cursor: pointer;
1475
+ background: transparent;
1476
+ color: var(--pvx-text-muted);
1477
+ transition: all 150ms;
1478
+ }
1479
+
1480
+ .pvx-reg-unregister-btn:hover {
1481
+ border-color: var(--pvx-invalid);
1482
+ color: var(--pvx-invalid);
1483
+ }
1484
+
1485
+ .pvx-reg-confirm {
1486
+ display: flex;
1487
+ flex-direction: column;
1488
+ gap: 0.75rem;
1489
+ padding: 0.75rem;
1490
+ border-radius: var(--pvx-radius-sm);
1491
+ background: rgba(239, 68, 68, 0.1);
1492
+ border: 1px solid rgba(239, 68, 68, 0.3);
1493
+ }
1494
+
1495
+ .pvx-reg-confirm-text {
1496
+ font-size: 0.875rem;
1497
+ color: var(--pvx-text);
1498
+ margin: 0;
1499
+ }
1500
+
1501
+ .pvx-reg-confirm-actions {
1502
+ display: flex;
1503
+ gap: 0.5rem;
1504
+ }
1505
+
1506
+ .pvx-reg-cancel-btn {
1507
+ padding: 0.375rem 1rem;
1508
+ border-radius: var(--pvx-radius-sm);
1509
+ font-size: 0.8125rem;
1510
+ font-weight: 500;
1511
+ border: 1px solid var(--pvx-border);
1512
+ cursor: pointer;
1513
+ background: transparent;
1514
+ color: var(--pvx-text);
1515
+ transition: all 150ms;
1516
+ }
1517
+
1518
+ .pvx-reg-cancel-btn:hover {
1519
+ border-color: var(--pvx-text-muted);
1520
+ }
1521
+
1522
+ .pvx-reg-danger-btn {
1523
+ padding: 0.375rem 1rem;
1524
+ border-radius: var(--pvx-radius-sm);
1525
+ font-size: 0.8125rem;
1526
+ font-weight: 500;
1527
+ border: none;
1528
+ cursor: pointer;
1529
+ background: rgba(239, 68, 68, 0.8);
1530
+ color: #fff;
1531
+ transition: background 150ms;
1532
+ }
1533
+
1534
+ .pvx-reg-danger-btn:hover {
1535
+ background: rgba(239, 68, 68, 1);
1536
+ }
1537
+
1538
+ .pvx-reg-danger-btn:disabled {
1539
+ opacity: 0.5;
1540
+ cursor: not-allowed;
1541
+ }
1542
+
1543
+ /* ─── Entry card — current user highlight ──────────────────────── */
1544
+
1545
+ .pvx-entry-card--you {
1546
+ border-color: var(--pvx-accent);
1547
+ background: rgba(99, 102, 241, 0.1);
1548
+ }
1549
+
1550
+ .pvx-entry-you {
1551
+ font-size: 0.75rem;
1552
+ color: var(--pvx-accent);
1553
+ font-weight: 400;
1554
+ }
1555
+
1556
+ /* ─── Driver list in registration panel ────────────────────────── */
1557
+
1558
+ .pvx-reg-driver-list {
1559
+ display: grid;
1560
+ grid-template-columns: repeat(auto-fill, minmax(12rem, 1fr));
1561
+ gap: 0.75rem;
1562
+ }
1563
+
1141
1564
  /* ═══════════════════════════════════════════════════════════════════════════
1142
1565
  Driver Dashboard Components
1143
1566
  ═══════════════════════════════════════════════════════════════════════════ */
package/package.json CHANGED
@@ -1,7 +1,7 @@
1
1
  {
2
2
  "name": "@pitvox/partner-react",
3
- "version": "0.2.1",
4
- "description": "React hooks, components, and drop-in leaderboard + competition experiences for PitVox partner websites",
3
+ "version": "0.4.0",
4
+ "description": "React hooks and styled components for PitVox partner websites — leaderboards, competitions, driver dashboards",
5
5
  "type": "module",
6
6
  "main": "dist/index.cjs",
7
7
  "module": "dist/index.js",
@@ -23,8 +23,7 @@
23
23
  "peerDependencies": {
24
24
  "react": "^18.0.0 || ^19.0.0",
25
25
  "react-dom": "^18.0.0 || ^19.0.0",
26
- "@tanstack/react-query": "^5.0.0",
27
- "react-router-dom": "^6.0.0 || ^7.0.0"
26
+ "@tanstack/react-query": "^5.0.0"
28
27
  },
29
28
  "devDependencies": {
30
29
  "react": "^19.0.0",