ui-soxo-bootstrap-core 2.6.1-dev.31 → 2.6.1-dev.32

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.
@@ -1084,7 +1084,19 @@ export default function ProcessStepsPage({ match, CustomComponents = {}, ...prop
1084
1084
  * - Passes configuration, parameters, and handlers to the component.
1085
1085
  * - Handles missing steps or components gracefully.
1086
1086
  */
1087
- const DynamicComponent = () => {
1087
+ /**
1088
+ * Render the active step's dynamic component.
1089
+ *
1090
+ * Intentionally a plain function (not a component) called inline as
1091
+ * `{renderDynamicStep()}`. Defining it as a component inside the parent's
1092
+ * render body creates a fresh component *type* on every re-render — React
1093
+ * then unmounts and remounts the step component on every parent state
1094
+ * change (touchNavVisible, stepSlideDirection, activeStep timer, etc.),
1095
+ * which caused visible re-render/jitter during swipe navigation. Evaluating
1096
+ * it as a function just yields JSX for the real step Component, whose type
1097
+ * is stable, so React reconciles in place.
1098
+ */
1099
+ const renderDynamicStep = () => {
1088
1100
  const step = steps[activeStep];
1089
1101
  if (!step) return <Empty description="No step selected" />;
1090
1102
 
@@ -1487,7 +1499,7 @@ export default function ProcessStepsPage({ match, CustomComponents = {}, ...prop
1487
1499
  <Spin />
1488
1500
  </div>
1489
1501
  ) : null}
1490
- {!loading ? <DynamicComponent /> : null}
1502
+ {!loading ? renderDynamicStep() : null}
1491
1503
  </div>
1492
1504
  </div>
1493
1505
  </div>
@@ -328,56 +328,148 @@
328
328
  position: absolute;
329
329
  top: 50%;
330
330
  z-index: 6;
331
- width: 48px;
332
- height: 48px;
331
+ width: 52px;
332
+ height: 52px;
333
333
  display: inline-flex;
334
334
  align-items: center;
335
335
  justify-content: center;
336
336
  padding: 0;
337
337
  border: none;
338
338
  border-radius: 50%;
339
- background: rgba(30, 58, 138, 0.88);
339
+ background: rgba(30, 58, 138, 0.55);
340
+ backdrop-filter: blur(8px) saturate(140%);
341
+ -webkit-backdrop-filter: blur(8px) saturate(140%);
340
342
  color: #ffffff;
341
343
  font-size: 18px;
342
344
  cursor: pointer;
343
- box-shadow: 0 6px 18px rgba(15, 23, 42, 0.22);
345
+ box-shadow:
346
+ 0 10px 24px rgba(15, 23, 42, 0.22),
347
+ inset 0 0 0 1px rgba(255, 255, 255, 0.18);
344
348
  opacity: 0;
345
349
  visibility: hidden;
346
- transform: translateY(-50%) scale(0.85);
347
- transition: opacity 220ms ease, transform 220ms ease, visibility 0s linear 220ms, background-color 160ms ease;
350
+ transform: translateY(-50%) scale(0.82);
351
+ transition:
352
+ opacity 260ms ease,
353
+ transform 260ms cubic-bezier(0.2, 0.8, 0.25, 1),
354
+ visibility 0s linear 260ms,
355
+ background-color 200ms ease,
356
+ box-shadow 200ms ease;
348
357
  -webkit-tap-highlight-color: transparent;
349
358
  touch-action: manipulation;
350
359
  }
351
360
 
361
+ /*
362
+ Decorative pulsing ring around the button.
363
+ - Drawn via ::before so it does not interfere with click targets.
364
+ - Only animates while the button is visible and enabled, to keep the
365
+ idle state calm instead of visually noisy.
366
+ */
367
+ .steps-touch-nav::before {
368
+ content: '';
369
+ position: absolute;
370
+ inset: 0;
371
+ border-radius: 50%;
372
+ border: 2px solid rgba(255, 255, 255, 0.45);
373
+ opacity: 0;
374
+ pointer-events: none;
375
+ }
376
+
377
+ .steps-touch-nav.is-visible:not(:disabled)::before {
378
+ animation: steps-touch-nav-ring 2.4s ease-out infinite;
379
+ }
380
+
381
+ /*
382
+ Radial wash behind the icon for depth.
383
+ - Keeps the icon glyph crisp against varied content backgrounds.
384
+ */
385
+ .steps-touch-nav::after {
386
+ content: '';
387
+ position: absolute;
388
+ inset: 4px;
389
+ border-radius: 50%;
390
+ background: radial-gradient(circle at 30% 30%, rgba(255, 255, 255, 0.22), rgba(255, 255, 255, 0) 65%);
391
+ pointer-events: none;
392
+ }
393
+
394
+ .steps-touch-nav .anticon {
395
+ position: relative;
396
+ z-index: 1;
397
+ filter: drop-shadow(0 1px 1px rgba(15, 23, 42, 0.25));
398
+ }
399
+
352
400
  .steps-touch-nav:hover:not(:disabled),
353
401
  .steps-touch-nav:focus-visible:not(:disabled) {
354
- background: rgba(30, 58, 138, 1);
402
+ background: rgba(30, 58, 138, 0.92);
403
+ box-shadow:
404
+ 0 14px 30px rgba(15, 23, 42, 0.32),
405
+ inset 0 0 0 1px rgba(255, 255, 255, 0.28);
355
406
  outline: none;
356
407
  }
357
408
 
409
+ .steps-touch-nav:hover:not(:disabled),
410
+ .steps-touch-nav:focus-visible:not(:disabled),
411
+ .steps-touch-nav.is-visible:hover:not(:disabled),
412
+ .steps-touch-nav.is-visible:focus-visible:not(:disabled) {
413
+ opacity: 1;
414
+ }
415
+
358
416
  .steps-touch-nav:active:not(:disabled) {
359
- transform: translateY(-50%) scale(0.9);
417
+ transform: translateY(-50%) scale(0.94);
418
+ transition:
419
+ transform 120ms ease,
420
+ opacity 120ms ease,
421
+ background-color 120ms ease,
422
+ box-shadow 120ms ease;
360
423
  }
361
424
 
362
425
  .steps-touch-nav:disabled {
363
- background: rgba(148, 163, 184, 0.7);
426
+ background: rgba(148, 163, 184, 0.38);
427
+ color: rgba(255, 255, 255, 0.7);
364
428
  cursor: not-allowed;
365
- box-shadow: 0 3px 10px rgba(15, 23, 42, 0.1);
429
+ box-shadow: 0 3px 10px rgba(15, 23, 42, 0.08);
430
+ backdrop-filter: none;
431
+ -webkit-backdrop-filter: none;
432
+ }
433
+
434
+ .steps-touch-nav:disabled::after {
435
+ display: none;
366
436
  }
367
437
 
368
438
  .steps-touch-nav-left {
369
- left: 10px;
439
+ left: 14px;
370
440
  }
371
441
 
372
442
  .steps-touch-nav-right {
373
- right: 10px;
443
+ right: 14px;
374
444
  }
375
445
 
376
446
  .steps-touch-nav.is-visible {
377
- opacity: 1;
447
+ opacity: 0.68;
378
448
  visibility: visible;
379
449
  transform: translateY(-50%) scale(1);
380
- transition: opacity 220ms ease, transform 220ms ease, visibility 0s linear 0s, background-color 160ms ease;
450
+ transition:
451
+ opacity 260ms ease,
452
+ transform 260ms cubic-bezier(0.2, 0.8, 0.25, 1),
453
+ visibility 0s linear 0s,
454
+ background-color 200ms ease,
455
+ box-shadow 200ms ease;
456
+ }
457
+
458
+ @keyframes steps-touch-nav-ring {
459
+ 0% {
460
+ opacity: 0.55;
461
+ transform: scale(1);
462
+ }
463
+
464
+ 65% {
465
+ opacity: 0;
466
+ transform: scale(1.45);
467
+ }
468
+
469
+ 100% {
470
+ opacity: 0;
471
+ transform: scale(1.45);
472
+ }
381
473
  }
382
474
 
383
475
  @media (prefers-reduced-motion: reduce) {
@@ -390,6 +482,10 @@
390
482
  transform: translateY(-50%);
391
483
  transition: opacity 120ms linear, visibility 0s linear 0s;
392
484
  }
485
+
486
+ .steps-touch-nav.is-visible:not(:disabled)::before {
487
+ animation: none;
488
+ }
393
489
  }
394
490
 
395
491
  .steps-stage-body::-webkit-scrollbar {
@@ -742,17 +838,17 @@
742
838
  }
743
839
 
744
840
  .steps-touch-nav {
745
- width: 42px;
746
- height: 42px;
841
+ width: 44px;
842
+ height: 44px;
747
843
  font-size: 16px;
748
844
  }
749
845
 
750
846
  .steps-touch-nav-left {
751
- left: 6px;
847
+ left: 8px;
752
848
  }
753
849
 
754
850
  .steps-touch-nav-right {
755
- right: 6px;
851
+ right: 8px;
756
852
  }
757
853
  }
758
854
 
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "ui-soxo-bootstrap-core",
3
- "version": "2.6.1-dev.31",
3
+ "version": "2.6.1-dev.32",
4
4
  "description": "All the Core Components for you to start",
5
5
  "keywords": [
6
6
  "all in one"