@floegence/floe-webapp-core 0.56.2 → 0.56.3

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/ui.css CHANGED
@@ -478,30 +478,101 @@
478
478
  Text Animation Effects - Minimal and Professional
479
479
  ============================================================================= */
480
480
 
481
- /* Shimmer - subtle light sweep effect */
482
- @keyframes text-shimmer {
481
+ /* Opt-in progress only: text keeps one accessible copy and surface paint
482
+ * sits below content. The host owns operation state and removes the attribute
483
+ * on settlement. Both published CSS entries expose this contract. */
484
+ @keyframes floe-progress-shimmer {
483
485
  0% {
484
- background-position: -200% center;
486
+ background-position: 100% center;
485
487
  }
486
488
  100% {
487
- background-position: 200% center;
489
+ background-position: 0% center;
488
490
  }
489
491
  }
490
492
 
491
- .processing-text-shimmer {
492
- background: linear-gradient(
493
- 90deg,
494
- currentColor 0%,
495
- currentColor 40%,
496
- color-mix(in srgb, var(--primary) 80%, white) 50%,
497
- currentColor 60%,
498
- currentColor 100%
499
- );
500
- background-size: 200% 100%;
501
- -webkit-background-clip: text;
502
- background-clip: text;
503
- -webkit-text-fill-color: transparent;
504
- animation: text-shimmer 2.5s ease-in-out infinite;
493
+ :is([data-floe-progress-shimmer='text'], .processing-text-shimmer) {
494
+ --floe-progress-text-base: oklch(from var(--foreground) clamp(0.42, l, 0.46) min(c, 0.04) h);
495
+ --floe-progress-text-peak: oklch(from var(--floe-progress-text-base) calc(l - 0.16) c h);
496
+ color: var(--floe-progress-text-base);
497
+ }
498
+
499
+ .dark :is([data-floe-progress-shimmer='text'], .processing-text-shimmer) {
500
+ --floe-progress-text-base: oklch(from var(--foreground) clamp(0.8, calc(l - 0.1), 0.82) min(c, 0.04) h);
501
+ --floe-progress-text-peak: oklch(from var(--floe-progress-text-base) calc(l + 0.16) c h);
502
+ }
503
+
504
+ :is([data-floe-progress-shimmer='text'], .processing-text-shimmer)::selection,
505
+ :is([data-floe-progress-shimmer='text'], .processing-text-shimmer) ::selection {
506
+ -webkit-text-fill-color: var(--selection-fg);
507
+ }
508
+
509
+ @supports (background-clip: text) and (color: oklch(from red l c h)) {
510
+ :is([data-floe-progress-shimmer='text'], .processing-text-shimmer) {
511
+ background-image: linear-gradient(90deg, var(--floe-progress-text-base) 46%, var(--floe-progress-text-peak) 49%, var(--floe-progress-text-peak) 51%, var(--floe-progress-text-base) 54%);
512
+ background-size: 250% 100%;
513
+ -webkit-background-clip: text;
514
+ background-clip: text;
515
+ -webkit-text-fill-color: transparent;
516
+ animation: floe-progress-shimmer 2.4s linear infinite;
517
+ }
518
+ }
519
+
520
+ [data-floe-progress-shimmer='surface'] {
521
+ --floe-progress-surface-base: var(--floe-progress-surface-background, var(--primary));
522
+ --floe-progress-surface-peak: oklch(from var(--floe-progress-surface-base) max(0, calc(l - 0.14)) c h);
523
+ position: relative;
524
+ isolation: isolate;
525
+ }
526
+
527
+ .dark [data-floe-progress-shimmer='surface'] {
528
+ --floe-progress-surface-peak: oklch(from var(--floe-progress-surface-base) min(1, calc(l + 0.14)) c h);
529
+ }
530
+
531
+ /* A busy control can be unavailable for a second submission while its
532
+ * progress remains fully legible. Disabled input semantics still apply. */
533
+ [data-floe-progress-shimmer='surface']:disabled {
534
+ opacity: 1 !important;
535
+ }
536
+
537
+ [data-floe-progress-shimmer='surface']::before {
538
+ content: '';
539
+ position: absolute;
540
+ inset: 0;
541
+ z-index: -1;
542
+ border-radius: inherit;
543
+ pointer-events: none;
544
+ background-image: linear-gradient(90deg, var(--floe-progress-surface-base) 46%, var(--floe-progress-surface-peak) 49%, var(--floe-progress-surface-peak) 51%, var(--floe-progress-surface-base) 54%);
545
+ background-size: 250% 100%;
546
+ animation: floe-progress-shimmer 2.4s linear infinite;
547
+ }
548
+
549
+ @media (prefers-reduced-motion: reduce), (forced-colors: active) {
550
+ :is([data-floe-progress-shimmer='text'], .processing-text-shimmer) {
551
+ animation: none;
552
+ background-image: none;
553
+ -webkit-text-fill-color: currentColor;
554
+ }
555
+
556
+ [data-floe-progress-shimmer='surface']::before {
557
+ animation: none;
558
+ background-image: none;
559
+ background-color: var(--floe-progress-surface-base);
560
+ }
561
+ }
562
+
563
+ @media (forced-colors: active) {
564
+ [data-floe-progress-shimmer='surface']::before {
565
+ content: none;
566
+ }
567
+
568
+ :is([data-floe-progress-shimmer='text'], .processing-text-shimmer) {
569
+ color: CanvasText;
570
+ }
571
+
572
+ :is([data-floe-progress-shimmer='text'], .processing-text-shimmer)::selection,
573
+ :is([data-floe-progress-shimmer='text'], .processing-text-shimmer) ::selection {
574
+ -webkit-text-fill-color: HighlightText;
575
+ }
505
576
  }
506
577
 
507
578
  /* Glow - subtle pulsing text */
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@floegence/floe-webapp-core",
3
- "version": "0.56.2",
3
+ "version": "0.56.3",
4
4
  "license": "MIT",
5
5
  "type": "module",
6
6
  "main": "./dist/index.js",