@birdapi/velinstyle 0.7.0 → 0.8.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 (49) hide show
  1. package/README.de.md +26 -4
  2. package/README.md +26 -4
  3. package/cli/blueprint.js +8 -0
  4. package/cli/blueprints/bottom-nav-mobile.html +17 -0
  5. package/cli/blueprints/cookie-consent.html +9 -0
  6. package/cli/blueprints/empty-state.html +5 -0
  7. package/cli/blueprints/filter-bar.html +15 -0
  8. package/cli/blueprints/notification-center.html +13 -0
  9. package/cli/blueprints/onboarding.html +23 -0
  10. package/cli/blueprints/pricing-table.html +20 -0
  11. package/cli/blueprints/settings-panel.html +20 -0
  12. package/cli/index.js +116 -1
  13. package/cli/layout-audit.js +325 -0
  14. package/cli/scaffold-recipes.json +70 -0
  15. package/cli/scaffold.js +155 -0
  16. package/cli/scanner.js +68 -0
  17. package/components/index.js +19 -0
  18. package/components/sanitize.js +29 -3
  19. package/components/shadow-a11y-styles.js +18 -0
  20. package/components/velin-announcer.js +35 -0
  21. package/components/velin-bottom-nav.js +89 -0
  22. package/components/velin-combobox.js +149 -0
  23. package/components/velin-command.js +127 -0
  24. package/components/velin-counter.js +152 -0
  25. package/components/velin-flip.js +220 -0
  26. package/components/velin-icon.js +43 -9
  27. package/components/velin-live-dot.js +85 -0
  28. package/components/velin-menubar.js +83 -0
  29. package/components/velin-rating.js +91 -0
  30. package/components/velin-reveal.js +80 -0
  31. package/components/velin-segmented-control.js +108 -0
  32. package/components/velin-sheet.js +107 -0
  33. package/components/velin-sparkline.js +207 -0
  34. package/components/velin-theme-toggle.js +277 -60
  35. package/dist/velinstyle-components.iife.js +1629 -69
  36. package/dist/velinstyle-components.js +1649 -69
  37. package/dist/velinstyle-components.min.js +424 -80
  38. package/dist/velinstyle.css +472 -3
  39. package/dist/velinstyle.min.css +1 -1
  40. package/package.json +3 -2
  41. package/src/a11y/security.css +18 -0
  42. package/src/base/reset.css +12 -1
  43. package/src/components/nav.css +152 -151
  44. package/src/tokens/motion.css +7 -0
  45. package/src/utilities/animation.css +97 -1
  46. package/src/utilities/chart-animation.css +101 -0
  47. package/src/utilities/filter-effects.css +103 -0
  48. package/src/utilities/safe-area.css +39 -0
  49. package/src/velinstyle.css +3 -0
@@ -196,11 +196,18 @@
196
196
  --velin-duration-normal: .2s;
197
197
  --velin-duration-slow: .3s;
198
198
  --velin-duration-slower: .5s;
199
+ --velin-duration-slowest: .8s;
200
+ --velin-duration-cinematic: 1.2s;
199
201
  --velin-ease-default: cubic-bezier(.4, 0, .2, 1);
200
202
  --velin-ease-in: cubic-bezier(.4, 0, 1, 1);
201
203
  --velin-ease-out: cubic-bezier(0, 0, .2, 1);
202
204
  --velin-ease-in-out: cubic-bezier(.4, 0, .2, 1);
203
205
  --velin-ease-bounce: cubic-bezier(.34, 1.56, .64, 1);
206
+ --velin-ease-spring: cubic-bezier(.34, 1.56, .64, 1.4);
207
+ --velin-ease-elastic: cubic-bezier(.68, -.6, .32, 1.6);
208
+ --velin-ease-expo-out: cubic-bezier(.16, 1, .3, 1);
209
+ --velin-ease-back-out: cubic-bezier(.34, 1.4, .64, 1);
210
+ --velin-ease-snappy: cubic-bezier(.2, .8, .2, 1);
204
211
  --velin-transition-colors: color var(--velin-duration-normal) var(--velin-ease-default),
205
212
  background-color var(--velin-duration-normal) var(--velin-ease-default),
206
213
  border-color var(--velin-duration-normal) var(--velin-ease-default);
@@ -334,7 +341,7 @@
334
341
  display: none !important;
335
342
  }
336
343
 
337
- velin-modal:not(:defined), velin-drawer:not(:defined), velin-tabs:not(:defined), velin-accordion:not(:defined), velin-dropdown:not(:defined), velin-toast:not(:defined), velin-dialog:not(:defined), velin-popover:not(:defined), velin-tooltip-wc:not(:defined), velin-lightbox:not(:defined), velin-carousel:not(:defined), velin-collapse:not(:defined), velin-stepper-wc:not(:defined), velin-countdown:not(:defined), velin-progress-ring:not(:defined), velin-persist:not(:defined), velin-copy:not(:defined), velin-scroll-top:not(:defined), velin-scrollspy:not(:defined), velin-theme-toggle:not(:defined), velin-icon:not(:defined) {
344
+ velin-modal:not(:defined), velin-drawer:not(:defined), velin-tabs:not(:defined), velin-accordion:not(:defined), velin-dropdown:not(:defined), velin-toast:not(:defined), velin-dialog:not(:defined), velin-popover:not(:defined), velin-tooltip-wc:not(:defined), velin-lightbox:not(:defined), velin-carousel:not(:defined), velin-collapse:not(:defined), velin-stepper-wc:not(:defined), velin-countdown:not(:defined), velin-progress-ring:not(:defined), velin-persist:not(:defined), velin-copy:not(:defined), velin-scroll-top:not(:defined), velin-scrollspy:not(:defined), velin-theme-toggle:not(:defined), velin-icon:not(:defined), velin-combobox:not(:defined), velin-bottom-nav:not(:defined), velin-sheet:not(:defined), velin-segmented-control:not(:defined), velin-rating:not(:defined), velin-menubar:not(:defined), velin-command:not(:defined), velin-announcer:not(:defined), velin-sparkline:not(:defined), velin-counter:not(:defined), velin-live-dot:not(:defined) {
338
345
  opacity: 0;
339
346
  visibility: hidden;
340
347
  }
@@ -6426,8 +6433,414 @@
6426
6433
  animation-play-state: paused;
6427
6434
  }
6428
6435
 
6429
- .velin-animate-hover:hover {
6430
- animation-play-state: running;
6436
+ @media (hover: hover) and (pointer: fine) {
6437
+ .velin-animate-hover:hover {
6438
+ animation-play-state: running;
6439
+ }
6440
+ }
6441
+
6442
+ .velin-animate-blur-in {
6443
+ animation: velin-blur-in var(--velin-duration-normal) var(--velin-ease-out) both;
6444
+ }
6445
+
6446
+ .velin-animate-blur-out {
6447
+ animation: velin-blur-out var(--velin-duration-normal) var(--velin-ease-in) both;
6448
+ }
6449
+
6450
+ .velin-animate-rotate-in {
6451
+ animation: velin-rotate-in var(--velin-duration-normal) var(--velin-ease-out) both;
6452
+ }
6453
+
6454
+ .velin-animate-float {
6455
+ animation: velin-float 3s var(--velin-ease-in-out) infinite;
6456
+ }
6457
+
6458
+ .velin-animate-flash {
6459
+ animation: velin-flash .6s var(--velin-ease-default) both;
6460
+ }
6461
+
6462
+ .velin-animate-reveal-up {
6463
+ animation: velin-reveal-up var(--velin-duration-normal) var(--velin-ease-out) both;
6464
+ }
6465
+
6466
+ .velin-animate-reveal-down {
6467
+ animation: velin-reveal-down var(--velin-duration-normal) var(--velin-ease-out) both;
6468
+ }
6469
+
6470
+ .velin-animate-glow {
6471
+ animation: velin-glow 2s var(--velin-ease-in-out) infinite;
6472
+ }
6473
+
6474
+ .velin-animate-slide-fade-left {
6475
+ animation: velin-slide-fade-left var(--velin-duration-normal) var(--velin-ease-out) both;
6476
+ }
6477
+
6478
+ .velin-animate-slide-fade-right {
6479
+ animation: velin-slide-fade-right var(--velin-duration-normal) var(--velin-ease-out) both;
6480
+ }
6481
+
6482
+ @keyframes velin-blur-in {
6483
+ from {
6484
+ opacity: 0;
6485
+ filter: blur(8px);
6486
+ }
6487
+
6488
+ to {
6489
+ opacity: 1;
6490
+ filter: blur();
6491
+ }
6492
+ }
6493
+
6494
+ @keyframes velin-blur-out {
6495
+ from {
6496
+ opacity: 1;
6497
+ filter: blur();
6498
+ }
6499
+
6500
+ to {
6501
+ opacity: 0;
6502
+ filter: blur(8px);
6503
+ }
6504
+ }
6505
+
6506
+ @keyframes velin-rotate-in {
6507
+ from {
6508
+ opacity: 0;
6509
+ transform: rotate(-8deg) scale(.95);
6510
+ }
6511
+
6512
+ to {
6513
+ opacity: 1;
6514
+ transform: rotate(0) scale(1);
6515
+ }
6516
+ }
6517
+
6518
+ @keyframes velin-float {
6519
+ 0%, 100% {
6520
+ transform: translateY(0);
6521
+ }
6522
+
6523
+ 50% {
6524
+ transform: translateY(-.35rem);
6525
+ }
6526
+ }
6527
+
6528
+ @keyframes velin-flash {
6529
+ 0%, 50%, 100% {
6530
+ opacity: 1;
6531
+ }
6532
+
6533
+ 25%, 75% {
6534
+ opacity: .35;
6535
+ }
6536
+ }
6537
+
6538
+ @keyframes velin-reveal-up {
6539
+ from {
6540
+ clip-path: inset(100% 0 0);
6541
+ opacity: 0;
6542
+ }
6543
+
6544
+ to {
6545
+ clip-path: inset(0);
6546
+ opacity: 1;
6547
+ }
6548
+ }
6549
+
6550
+ @keyframes velin-reveal-down {
6551
+ from {
6552
+ clip-path: inset(0 0 100%);
6553
+ opacity: 0;
6554
+ }
6555
+
6556
+ to {
6557
+ clip-path: inset(0);
6558
+ opacity: 1;
6559
+ }
6560
+ }
6561
+
6562
+ @keyframes velin-glow {
6563
+ 0%, 100% {
6564
+ box-shadow: 0 0 #0000;
6565
+ }
6566
+
6567
+ 50% {
6568
+ box-shadow: 0 0 1rem 0 color-mix(in oklch, var(--velin-color-primary, #2563eb) 35%, transparent);
6569
+ }
6570
+ }
6571
+
6572
+ @keyframes velin-slide-fade-left {
6573
+ from {
6574
+ opacity: 0;
6575
+ transform: translateX(1rem);
6576
+ }
6577
+
6578
+ to {
6579
+ opacity: 1;
6580
+ transform: translateX(0);
6581
+ }
6582
+ }
6583
+
6584
+ @keyframes velin-slide-fade-right {
6585
+ from {
6586
+ opacity: 0;
6587
+ transform: translateX(-1rem);
6588
+ }
6589
+
6590
+ to {
6591
+ opacity: 1;
6592
+ transform: translateX(0);
6593
+ }
6594
+ }
6595
+
6596
+ @media (prefers-reduced-motion: reduce) {
6597
+ .velin-animate-blur-in, .velin-animate-blur-out, .velin-animate-rotate-in, .velin-animate-reveal-up, .velin-animate-reveal-down, .velin-animate-slide-fade-left, .velin-animate-slide-fade-right {
6598
+ opacity: 1;
6599
+ filter: none;
6600
+ clip-path: none;
6601
+ animation: none;
6602
+ transform: none;
6603
+ }
6604
+
6605
+ .velin-animate-float, .velin-animate-glow, .velin-animate-flash {
6606
+ animation: none;
6607
+ }
6608
+ }
6609
+
6610
+ .velin-saturate-0 {
6611
+ filter: saturate(0);
6612
+ }
6613
+
6614
+ .velin-saturate-50 {
6615
+ filter: saturate(.5);
6616
+ }
6617
+
6618
+ .velin-saturate-100 {
6619
+ filter: saturate();
6620
+ }
6621
+
6622
+ .velin-saturate-150 {
6623
+ filter: saturate(1.5);
6624
+ }
6625
+
6626
+ .velin-saturate-200 {
6627
+ filter: saturate(2);
6628
+ }
6629
+
6630
+ .velin-hue-rotate-15 {
6631
+ filter: hue-rotate(15deg);
6632
+ }
6633
+
6634
+ .velin-hue-rotate-30 {
6635
+ filter: hue-rotate(30deg);
6636
+ }
6637
+
6638
+ .velin-hue-rotate-60 {
6639
+ filter: hue-rotate(60deg);
6640
+ }
6641
+
6642
+ .velin-hue-rotate-90 {
6643
+ filter: hue-rotate(90deg);
6644
+ }
6645
+
6646
+ .velin-hue-rotate-180 {
6647
+ filter: hue-rotate(180deg);
6648
+ }
6649
+
6650
+ .velin-contrast-50 {
6651
+ filter: contrast(.5);
6652
+ }
6653
+
6654
+ .velin-contrast-75 {
6655
+ filter: contrast(.75);
6656
+ }
6657
+
6658
+ .velin-contrast-100 {
6659
+ filter: contrast();
6660
+ }
6661
+
6662
+ .velin-contrast-125 {
6663
+ filter: contrast(1.25);
6664
+ }
6665
+
6666
+ .velin-contrast-150 {
6667
+ filter: contrast(1.5);
6668
+ }
6669
+
6670
+ .velin-invert {
6671
+ filter: invert();
6672
+ }
6673
+
6674
+ .velin-invert-0 {
6675
+ filter: invert(0);
6676
+ }
6677
+
6678
+ .velin-sepia {
6679
+ filter: sepia();
6680
+ }
6681
+
6682
+ .velin-sepia-50 {
6683
+ filter: sepia(.5);
6684
+ }
6685
+
6686
+ .velin-sepia-0 {
6687
+ filter: sepia(0);
6688
+ }
6689
+
6690
+ .velin-drop-shadow-sm {
6691
+ filter: drop-shadow(0 1px 1px oklch(0% 0 0 / .18));
6692
+ }
6693
+
6694
+ .velin-drop-shadow-md {
6695
+ filter: drop-shadow(0 4px 6px oklch(0% 0 0 / .18));
6696
+ }
6697
+
6698
+ .velin-drop-shadow-lg {
6699
+ filter: drop-shadow(0 12px 24px oklch(0% 0 0 / .22));
6700
+ }
6701
+
6702
+ .velin-drop-shadow-glow {
6703
+ filter: drop-shadow(0 0 1.5rem color-mix(in oklch, var(--velin-color-primary, #2563eb) 60%, transparent));
6704
+ }
6705
+
6706
+ .velin-backdrop-saturate {
6707
+ -webkit-backdrop-filter: saturate(180%);
6708
+ }
6709
+
6710
+ .velin-backdrop-brightness-90 {
6711
+ -webkit-backdrop-filter: brightness(.9);
6712
+ }
6713
+
6714
+ .velin-backdrop-brightness-110 {
6715
+ -webkit-backdrop-filter: brightness(1.1);
6716
+ }
6717
+
6718
+ .velin-backdrop-grayscale {
6719
+ -webkit-backdrop-filter: grayscale();
6720
+ }
6721
+
6722
+ .velin-glass {
6723
+ background: color-mix(in oklch, var(--velin-color-surface-bright, #fff) 70%, transparent);
6724
+ -webkit-backdrop-filter: blur(12px) saturate(160%);
6725
+ border: 1px solid color-mix(in oklch, var(--velin-color-border, #ddd) 60%, transparent);
6726
+ }
6727
+
6728
+ .velin-glass-strong {
6729
+ background: color-mix(in oklch, var(--velin-color-surface-bright, #fff) 55%, transparent);
6730
+ -webkit-backdrop-filter: blur(20px) saturate(180%);
6731
+ border: 1px solid color-mix(in oklch, var(--velin-color-border, #ddd) 70%, transparent);
6732
+ }
6733
+
6734
+ @media (prefers-reduced-motion: reduce) {
6735
+ .velin-saturate-0, .velin-saturate-50, .velin-saturate-100, .velin-saturate-150, .velin-saturate-200, .velin-hue-rotate-15, .velin-hue-rotate-30, .velin-hue-rotate-60, .velin-hue-rotate-90, .velin-hue-rotate-180 {
6736
+ filter: none;
6737
+ }
6738
+ }
6739
+
6740
+ @keyframes velin-stroke-draw {
6741
+ from {
6742
+ stroke-dashoffset: var(--velin-chart-len, 1000);
6743
+ }
6744
+
6745
+ to {
6746
+ stroke-dashoffset: 0;
6747
+ }
6748
+ }
6749
+
6750
+ @keyframes velin-sparkline-glow {
6751
+ 0%, 100% {
6752
+ filter: drop-shadow(0 0 #0000);
6753
+ }
6754
+
6755
+ 50% {
6756
+ filter: drop-shadow(0 0 .5rem color-mix(in oklch, var(--velin-chart-glow-color, var(--velin-color-primary, #2563eb)) 50%, transparent));
6757
+ }
6758
+ }
6759
+
6760
+ @keyframes velin-value-bump {
6761
+ 0% {
6762
+ transform: scale(1);
6763
+ }
6764
+
6765
+ 35% {
6766
+ color: var(--velin-chart-bump-color, var(--velin-color-primary, #2563eb));
6767
+ transform: scale(1.06);
6768
+ }
6769
+
6770
+ 100% {
6771
+ transform: scale(1);
6772
+ }
6773
+ }
6774
+
6775
+ @keyframes velin-live-pulse {
6776
+ 0% {
6777
+ box-shadow: 0 0 0 0 color-mix(in oklch, var(--velin-live-color, var(--velin-color-success, oklch(60% .16 145))) 65%, transparent);
6778
+ }
6779
+
6780
+ 70% {
6781
+ box-shadow: 0 0 0 .65rem color-mix(in oklch, var(--velin-live-color, var(--velin-color-success, oklch(60% .16 145))) 0%, transparent);
6782
+ }
6783
+
6784
+ 100% {
6785
+ box-shadow: 0 0 #0000;
6786
+ }
6787
+ }
6788
+
6789
+ @keyframes velin-count-fade {
6790
+ from {
6791
+ opacity: 0;
6792
+ transform: translateY(.4rem);
6793
+ }
6794
+
6795
+ to {
6796
+ opacity: 1;
6797
+ transform: translateY(0);
6798
+ }
6799
+ }
6800
+
6801
+ .velin-chart-line {
6802
+ fill: none;
6803
+ stroke: currentColor;
6804
+ stroke-width: 2px;
6805
+ stroke-linecap: round;
6806
+ stroke-linejoin: round;
6807
+ stroke-dasharray: var(--velin-chart-len, 1000);
6808
+ stroke-dashoffset: 0;
6809
+ animation: velin-stroke-draw var(--velin-duration-cinematic, 1.2s) var(--velin-ease-expo-out, ease-out) both;
6810
+ }
6811
+
6812
+ .velin-chart-area {
6813
+ fill: var(--velin-chart-area-fill, currentColor);
6814
+ opacity: 0;
6815
+ animation: velin-count-fade var(--velin-duration-slowest, .8s) var(--velin-ease-expo-out, ease-out) .2s forwards;
6816
+ }
6817
+
6818
+ .velin-chart-glow {
6819
+ animation: velin-sparkline-glow 2.4s var(--velin-ease-in-out, ease-in-out) infinite;
6820
+ }
6821
+
6822
+ .velin-spark-tick {
6823
+ animation: velin-value-bump var(--velin-duration-slow, .3s) var(--velin-ease-spring, ease-out) both;
6824
+ }
6825
+
6826
+ .velin-live-pulse {
6827
+ animation: velin-live-pulse 1.8s var(--velin-ease-out, ease-out) infinite;
6828
+ border-radius: 50%;
6829
+ }
6830
+
6831
+ .velin-count-fade {
6832
+ animation: velin-count-fade var(--velin-duration-slow, .3s) var(--velin-ease-expo-out, ease-out) both;
6833
+ }
6834
+
6835
+ @media (prefers-reduced-motion: reduce) {
6836
+ .velin-chart-line, .velin-chart-area, .velin-chart-glow, .velin-spark-tick, .velin-live-pulse, .velin-count-fade {
6837
+ stroke-dashoffset: 0;
6838
+ opacity: 1;
6839
+ filter: none;
6840
+ box-shadow: none;
6841
+ animation: none;
6842
+ transform: none;
6843
+ }
6431
6844
  }
6432
6845
 
6433
6846
  .velin-gradient-primary {
@@ -7488,6 +7901,44 @@
7488
7901
  }
7489
7902
  }
7490
7903
 
7904
+ .velin-pt-safe {
7905
+ padding-block-start: max(var(--velin-space-4, 1rem), env(safe-area-inset-top, 0px));
7906
+ }
7907
+
7908
+ .velin-pb-safe {
7909
+ padding-block-end: max(var(--velin-space-4, 1rem), env(safe-area-inset-bottom, 0px));
7910
+ }
7911
+
7912
+ .velin-px-safe {
7913
+ padding-inline: max(var(--velin-space-4, 1rem), env(safe-area-inset-left, 0px))
7914
+ max(var(--velin-space-4, 1rem), env(safe-area-inset-right, 0px));
7915
+ }
7916
+
7917
+ .velin-p-safe {
7918
+ padding-block: max(var(--velin-space-4, 1rem), env(safe-area-inset-top, 0px))
7919
+ max(var(--velin-space-4, 1rem), env(safe-area-inset-bottom, 0px));
7920
+ padding-inline: max(var(--velin-space-4, 1rem), env(safe-area-inset-left, 0px))
7921
+ max(var(--velin-space-4, 1rem), env(safe-area-inset-right, 0px));
7922
+ }
7923
+
7924
+ .velin-mobile-only {
7925
+ display: block;
7926
+ }
7927
+
7928
+ .velin-desktop-only {
7929
+ display: none;
7930
+ }
7931
+
7932
+ @media (width >= 48rem) {
7933
+ .velin-mobile-only {
7934
+ display: none;
7935
+ }
7936
+
7937
+ .velin-desktop-only {
7938
+ display: block;
7939
+ }
7940
+ }
7941
+
7491
7942
  .velin-divide-y > * + * {
7492
7943
  border-block-start: 1px solid var(--velin-color-border);
7493
7944
  }
@@ -8682,6 +9133,24 @@
8682
9133
  -webkit-text-fill-color: var(--velin-color-text, #1a1a2e);
8683
9134
  transition: background-color 600000s, color 600000s;
8684
9135
  }
9136
+
9137
+ .velin-isolate {
9138
+ isolation: isolate;
9139
+ contain: layout style paint;
9140
+ }
9141
+
9142
+ .velin-sensitive {
9143
+ -webkit-user-select: none;
9144
+ user-select: none;
9145
+ }
9146
+
9147
+ .velin-overlay-lock {
9148
+ overscroll-behavior: contain;
9149
+ }
9150
+
9151
+ .velin-user-content img[src^="data:"] {
9152
+ max-inline-size: 100%;
9153
+ }
8685
9154
  }
8686
9155
 
8687
9156
  @layer themes;