@smallwebco/tinypivot-react 1.0.29 → 1.0.31

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/style.css CHANGED
@@ -2333,3 +2333,302 @@
2333
2333
  .vpg-theme-dark .vpg-skeleton-footer .vpg-stat-value { color: #34d399; }
2334
2334
  .vpg-theme-dark .vpg-skeleton-footer .vpg-stat-divider { color: #475569; }
2335
2335
 
2336
+ /* ============================================
2337
+ Numeric Range Filter Styles
2338
+ ============================================ */
2339
+
2340
+ /* Filter mode tabs */
2341
+ .vpg-filter-tabs {
2342
+ display: flex;
2343
+ gap: 0.25rem;
2344
+ padding: 0.375rem 0.5rem;
2345
+ background: #f8fafc;
2346
+ }
2347
+
2348
+ .vpg-tab-btn {
2349
+ flex: 1;
2350
+ display: flex;
2351
+ align-items: center;
2352
+ justify-content: center;
2353
+ gap: 0.25rem;
2354
+ padding: 0.375rem 0.5rem;
2355
+ font-size: 0.6875rem;
2356
+ font-weight: 500;
2357
+ color: #64748b;
2358
+ background: white;
2359
+ border: 1px solid #e2e8f0;
2360
+ border-radius: 0.25rem;
2361
+ cursor: pointer;
2362
+ transition: all 0.15s;
2363
+ }
2364
+
2365
+ .vpg-tab-btn:hover {
2366
+ background: #f1f5f9;
2367
+ color: #475569;
2368
+ }
2369
+
2370
+ .vpg-tab-btn.active {
2371
+ background: #4f46e5;
2372
+ color: white;
2373
+ border-color: #4f46e5;
2374
+ }
2375
+
2376
+ .vpg-tab-btn.active:hover {
2377
+ background: #4338ca;
2378
+ }
2379
+
2380
+ /* Range filter container */
2381
+ .vpg-range-filter {
2382
+ padding: 0.5rem;
2383
+ }
2384
+
2385
+ .vpg-range-info {
2386
+ display: flex;
2387
+ align-items: center;
2388
+ justify-content: space-between;
2389
+ margin-bottom: 0.75rem;
2390
+ font-size: 0.6875rem;
2391
+ }
2392
+
2393
+ .vpg-range-label {
2394
+ color: #64748b;
2395
+ }
2396
+
2397
+ .vpg-range-bounds {
2398
+ font-weight: 500;
2399
+ color: #334155;
2400
+ background: #f1f5f9;
2401
+ padding: 0.125rem 0.375rem;
2402
+ border-radius: 0.25rem;
2403
+ }
2404
+
2405
+ /* Slider container with dual handles */
2406
+ .vpg-slider-container {
2407
+ position: relative;
2408
+ height: 24px;
2409
+ margin: 0.75rem 0;
2410
+ }
2411
+
2412
+ .vpg-slider-track {
2413
+ position: absolute;
2414
+ top: 50%;
2415
+ left: 0;
2416
+ right: 0;
2417
+ height: 4px;
2418
+ background: #e2e8f0;
2419
+ border-radius: 2px;
2420
+ transform: translateY(-50%);
2421
+ }
2422
+
2423
+ .vpg-slider-fill {
2424
+ position: absolute;
2425
+ top: 0;
2426
+ bottom: 0;
2427
+ background: linear-gradient(90deg, #6366f1, #8b5cf6);
2428
+ border-radius: 2px;
2429
+ transition: left 0.1s, right 0.1s;
2430
+ }
2431
+
2432
+ .vpg-slider {
2433
+ position: absolute;
2434
+ top: 0;
2435
+ left: 0;
2436
+ width: 100%;
2437
+ height: 100%;
2438
+ background: transparent;
2439
+ pointer-events: none;
2440
+ -webkit-appearance: none;
2441
+ -moz-appearance: none;
2442
+ appearance: none;
2443
+ margin: 0;
2444
+ }
2445
+
2446
+ .vpg-slider::-webkit-slider-thumb {
2447
+ -webkit-appearance: none;
2448
+ appearance: none;
2449
+ pointer-events: auto;
2450
+ width: 16px;
2451
+ height: 16px;
2452
+ border-radius: 50%;
2453
+ background: white;
2454
+ border: 2px solid #6366f1;
2455
+ box-shadow: 0 1px 3px rgba(0, 0, 0, 0.2);
2456
+ cursor: pointer;
2457
+ -webkit-transition: transform 0.15s, box-shadow 0.15s;
2458
+ transition: transform 0.15s, box-shadow 0.15s;
2459
+ }
2460
+
2461
+ .vpg-slider::-webkit-slider-thumb:hover {
2462
+ transform: scale(1.15);
2463
+ box-shadow: 0 2px 6px rgba(99, 102, 241, 0.4);
2464
+ }
2465
+
2466
+ .vpg-slider::-webkit-slider-thumb:active {
2467
+ transform: scale(1.1);
2468
+ box-shadow: 0 2px 8px rgba(99, 102, 241, 0.5);
2469
+ }
2470
+
2471
+ .vpg-slider::-moz-range-thumb {
2472
+ pointer-events: auto;
2473
+ width: 16px;
2474
+ height: 16px;
2475
+ border-radius: 50%;
2476
+ background: white;
2477
+ border: 2px solid #6366f1;
2478
+ box-shadow: 0 1px 3px rgba(0, 0, 0, 0.2);
2479
+ cursor: pointer;
2480
+ -moz-transition: transform 0.15s, box-shadow 0.15s;
2481
+ transition: transform 0.15s, box-shadow 0.15s;
2482
+ }
2483
+
2484
+ .vpg-slider::-moz-range-thumb:hover {
2485
+ transform: scale(1.15);
2486
+ }
2487
+
2488
+ .vpg-slider-min {
2489
+ z-index: 1;
2490
+ }
2491
+
2492
+ .vpg-slider-max {
2493
+ z-index: 2;
2494
+ }
2495
+
2496
+ /* Input fields */
2497
+ .vpg-range-inputs {
2498
+ display: flex;
2499
+ align-items: center;
2500
+ gap: 0.5rem;
2501
+ margin-bottom: 0.5rem;
2502
+ }
2503
+
2504
+ .vpg-input-group {
2505
+ flex: 1;
2506
+ }
2507
+
2508
+ .vpg-input-label {
2509
+ display: block;
2510
+ font-size: 0.625rem;
2511
+ font-weight: 500;
2512
+ color: #64748b;
2513
+ margin-bottom: 0.125rem;
2514
+ text-transform: uppercase;
2515
+ letter-spacing: 0.025em;
2516
+ }
2517
+
2518
+ .vpg-range-input {
2519
+ width: 100%;
2520
+ padding: 0.375rem 0.5rem;
2521
+ font-size: 0.75rem;
2522
+ border: 1px solid #cbd5e1;
2523
+ border-radius: 0.25rem;
2524
+ outline: none;
2525
+ transition: border-color 0.15s, box-shadow 0.15s;
2526
+ }
2527
+
2528
+ .vpg-range-input:focus {
2529
+ border-color: #6366f1;
2530
+ box-shadow: 0 0 0 2px rgba(99, 102, 241, 0.15);
2531
+ }
2532
+
2533
+ .vpg-range-input::-moz-placeholder {
2534
+ color: #94a3b8;
2535
+ }
2536
+
2537
+ .vpg-range-input::placeholder {
2538
+ color: #94a3b8;
2539
+ }
2540
+
2541
+ /* Hide number input spinners */
2542
+ .vpg-range-input::-webkit-outer-spin-button,
2543
+ .vpg-range-input::-webkit-inner-spin-button {
2544
+ -webkit-appearance: none;
2545
+ margin: 0;
2546
+ }
2547
+
2548
+ .vpg-range-input[type="number"] {
2549
+ -moz-appearance: textfield;
2550
+ }
2551
+
2552
+ .vpg-input-separator {
2553
+ color: #94a3b8;
2554
+ font-size: 0.6875rem;
2555
+ padding-top: 1rem;
2556
+ }
2557
+
2558
+ /* Action buttons */
2559
+ .vpg-range-actions {
2560
+ display: flex;
2561
+ gap: 0.375rem;
2562
+ margin-bottom: 0.5rem;
2563
+ }
2564
+
2565
+ .vpg-range-btn {
2566
+ display: flex;
2567
+ align-items: center;
2568
+ gap: 0.25rem;
2569
+ padding: 0.25rem 0.5rem;
2570
+ font-size: 0.6875rem;
2571
+ font-weight: 500;
2572
+ color: #475569;
2573
+ background: #f8fafc;
2574
+ border: 1px solid #e2e8f0;
2575
+ border-radius: 0.25rem;
2576
+ cursor: pointer;
2577
+ transition: all 0.15s;
2578
+ }
2579
+
2580
+ .vpg-range-btn:hover:not(:disabled) {
2581
+ background: #f1f5f9;
2582
+ border-color: #cbd5e1;
2583
+ color: #334155;
2584
+ }
2585
+
2586
+ .vpg-range-btn:disabled {
2587
+ opacity: 0.5;
2588
+ cursor: not-allowed;
2589
+ }
2590
+
2591
+ .vpg-icon-xs {
2592
+ width: 0.75rem;
2593
+ height: 0.75rem;
2594
+ }
2595
+
2596
+ /* Filter summary */
2597
+ .vpg-filter-summary {
2598
+ display: flex;
2599
+ align-items: center;
2600
+ gap: 0.375rem;
2601
+ padding: 0.375rem 0.5rem;
2602
+ background: #eef2ff;
2603
+ border-radius: 0.25rem;
2604
+ font-size: 0.6875rem;
2605
+ color: #4338ca;
2606
+ }
2607
+
2608
+ .vpg-filter-summary strong {
2609
+ font-weight: 600;
2610
+ }
2611
+
2612
+ /* Dark mode - Filter Tabs */
2613
+ .vpg-theme-dark .vpg-filter-tabs { background: #0f172a; }
2614
+ .vpg-theme-dark .vpg-tab-btn { background: #1e293b; color: #94a3b8; border-color: #334155; }
2615
+ .vpg-theme-dark .vpg-tab-btn:hover { background: #334155; color: #e2e8f0; }
2616
+ .vpg-theme-dark .vpg-tab-btn.active { background: #6366f1; color: white; border-color: #6366f1; }
2617
+
2618
+ /* Dark mode - Range Filter */
2619
+ .vpg-theme-dark .vpg-range-filter { background: #1e293b; }
2620
+ .vpg-theme-dark .vpg-range-label { color: #94a3b8; }
2621
+ .vpg-theme-dark .vpg-range-bounds { background: #334155; color: #e2e8f0; }
2622
+ .vpg-theme-dark .vpg-slider-track { background: #334155; }
2623
+ .vpg-theme-dark .vpg-slider::-webkit-slider-thumb { background: #1e293b; border-color: #818cf8; }
2624
+ .vpg-theme-dark .vpg-slider::-moz-range-thumb { background: #1e293b; border-color: #818cf8; }
2625
+ .vpg-theme-dark .vpg-input-label { color: #94a3b8; }
2626
+ .vpg-theme-dark .vpg-range-input { background: #0f172a; border-color: #334155; color: #f1f5f9; }
2627
+ .vpg-theme-dark .vpg-range-input:focus { border-color: #6366f1; box-shadow: 0 0 0 2px rgba(99, 102, 241, 0.2); }
2628
+ .vpg-theme-dark .vpg-range-input::-moz-placeholder { color: #64748b; }
2629
+ .vpg-theme-dark .vpg-range-input::placeholder { color: #64748b; }
2630
+ .vpg-theme-dark .vpg-input-separator { color: #64748b; }
2631
+ .vpg-theme-dark .vpg-range-btn { background: #334155; color: #e2e8f0; border-color: #475569; }
2632
+ .vpg-theme-dark .vpg-range-btn:hover:not(:disabled) { background: #475569; border-color: #64748b; }
2633
+ .vpg-theme-dark .vpg-filter-summary { background: rgba(99, 102, 241, 0.15); color: #a5b4fc; }
2634
+
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@smallwebco/tinypivot-react",
3
- "version": "1.0.29",
3
+ "version": "1.0.31",
4
4
  "description": "TinyPivot React - Excel-like data grid and pivot table components",
5
5
  "type": "module",
6
6
  "main": "./dist/index.js",
@@ -26,7 +26,7 @@
26
26
  },
27
27
  "dependencies": {
28
28
  "@tanstack/react-table": "^8.20.0",
29
- "@smallwebco/tinypivot-core": "1.0.29"
29
+ "@smallwebco/tinypivot-core": "1.0.31"
30
30
  },
31
31
  "devDependencies": {
32
32
  "@types/react": "^18.2.0",