@aviala-design/spiral 2.4.1 → 2.6.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
@@ -227,6 +227,13 @@
227
227
  /* noBackgroundCustom — neutral-4 hover, neutral-5 press */
228
228
  --button-no-bg-custom-hover: var(--aviala-neutral-neutral-4, #faf8f8);
229
229
  --button-no-bg-custom-active: var(--aviala-neutral-neutral-5, #f5f3f3);
230
+ /* outline / outlineCustom — Figma Mode=Outline(-Custom); 1px outside stroke */
231
+ --button-outline-border: var(--border-border-normal-primary, #e2e0e0);
232
+ --button-outline-fg: var(
233
+ --text-text-theme-primary-black,
234
+ var(--aviala-primary-primary-10, #bf2300)
235
+ );
236
+ --button-outline-custom-fg: var(--text-text-normal-text-black, #343333);
230
237
  --button-icon-size: var(--icon-size-text-bigger, var(--size-middle, 1rem));
231
238
  --button-icon-slot-height: var(--line-height-regular, 1.125rem);
232
239
 
@@ -410,12 +417,23 @@
410
417
  --input-border: var(--input-border-activated);
411
418
  --input-bg: var(--input-bg-activated);
412
419
 
420
+ /* Figma Size=Default → size-big; Size=Huge → size-large */
413
421
  --checkbox-size: var(--size-big, 1.25rem);
414
- --checkbox-radius: var(--border-radius-small, 8px);
422
+ --checkbox-size-huge: var(--size-large, 1.625rem);
423
+ --checkbox-radius: var(--border-radius-extra-small-2, 6px);
424
+ --checkbox-radius-huge: var(--border-radius-small, 8px);
415
425
  --checkbox-radius-round: var(--border-radius-allround, 99px);
416
426
  --checkbox-icon-size: 0.75rem;
427
+ --checkbox-icon-size-huge: 0.875rem;
417
428
  --checkbox-indeterminate-mark-size: 0.75rem;
429
+ --checkbox-indeterminate-mark-size-huge: 0.875rem;
418
430
  --checkbox-indeterminate-mark-radius: var(--border-radius-extra-small-2, 6px);
431
+ /* Check / uncheck motion (CSS transitions — interruptible) */
432
+ --checkbox-check-stroke: 1.4px;
433
+ --checkbox-check-stroke-huge: 2px;
434
+ --checkbox-check-duration: 300ms;
435
+ --checkbox-check-easing: cubic-bezier(0.873, 0, 0, 1);
436
+ --checkbox-surface-easing: ease;
419
437
  --checkbox-bg-unchecked: var(--control-control-normal-lightbackground-whiteonly, #fefcfc);
420
438
  --checkbox-border-unchecked: var(--border-border-normal-primary, #e2e0e0);
421
439
  --checkbox-checked-bg: var(--control-control-theme-background, var(--button-primary-bg));
@@ -528,8 +546,7 @@
528
546
  --color-picker-swatch-input: 18px;
529
547
  --color-picker-swatch-button: 26px;
530
548
  --color-picker-swatch-button-size: 32px;
531
- --color-picker-slider-height: 8px;
532
- --color-picker-slider-thumb: 10px;
549
+ --color-picker-slider-height: 16px;
533
550
  --color-picker-panel-bg: var(--select-menu-bg);
534
551
  --color-picker-panel-border: var(--select-menu-border);
535
552
  --color-picker-panel-radius: var(--select-menu-radius);
@@ -674,6 +691,32 @@
674
691
  --list-item-disabled-opacity: var(--input-disabled-opacity, 0.55);
675
692
  --list-separator-my: var(--list-gap);
676
693
 
694
+ /* Tab — Figma Structure Navigation → Tab / TabItem */
695
+ --tab-gap: var(--gap-inside, 4px);
696
+ --tab-px: var(--padding-default, 8px);
697
+ --tab-list-gap: var(--gap-inside-space, 6px);
698
+ --tab-list-gap-card: 0px;
699
+ --tab-slot-gap: var(--gap-component-space, 8px);
700
+ --tab-item-indicator-space: var(--padding-small, 6px);
701
+ --tab-item-control-gap: var(--gap-inside, 4px);
702
+ --tab-item-control-radius: var(--border-radius-small, 8px);
703
+ --tab-icon-box: 18px;
704
+ --tab-icon-size: var(--icon-size-text-bigger, var(--size-middle, 1rem));
705
+ --tab-fg: var(--text-text-normal-text-black, #343333);
706
+ --tab-bg: var(--box-box-normal-background-whiteonly, #fefcfc);
707
+ --tab-bg-card: var(--control-control-normal-lightbackground-light, #f5f3f3);
708
+ --tab-card-active-bg: var(--box-box-normal-background-whiteonly, #fefcfc);
709
+ --tab-card-ear-size: 8px;
710
+ --tab-indicator-height: 4px;
711
+ --tab-indicator-inset-inline: 12px;
712
+ --tab-indicator-radius: var(--border-radius-extra-small-2, 6px);
713
+ --tab-indicator-color: var(--border-border-theme-primary, #ff856b);
714
+ --tab-transition-duration: var(--navigation-transition-duration, 0.3s);
715
+ --tab-transition-easing: var(
716
+ --navigation-transition-easing,
717
+ cubic-bezier(0.16, 1, 0.3, 1)
718
+ );
719
+
677
720
  --navigation-bg: var(--box-box-normal-background-whiteonly, #fefcfc);
678
721
  --navigation-gap: var(--gap-content-space, 10px);
679
722
  --navigation-py: var(--padding-big, 14px);
@@ -699,11 +742,12 @@
699
742
  /* Vertical active rail: grow on hover / shrink on press (inset from item edges). */
700
743
  --navigation-rail-inset-hover: 3px;
701
744
  --navigation-rail-inset-press: 9px;
702
- --navigation-rail-left: 1px;
745
+ --navigation-rail-inline-start: 1px;
703
746
  --navigation-rail-width: 3px;
704
747
  --navigation-indicator-width-horizontal: 50px;
705
748
  --navigation-transition-duration: var(--switch-transition-duration, 0.3s);
706
- --navigation-transition-easing: cubic-bezier(0.33, 1, 0.68, 1);
749
+ /* Snappy ease-out: most travel happens early, then settles hard. */
750
+ --navigation-transition-easing: cubic-bezier(0.16, 1, 0.3, 1);
707
751
  --navigation-icon-box: var(--line-height-regular, 1.125rem);
708
752
  --navigation-icon-size: var(--icon-size-text-bigger, var(--size-middle, 1rem));
709
753
  --navigation-item-hover-bg: var(--button-no-bg-custom-hover);
@@ -804,22 +848,38 @@
804
848
  --focus-transition-duration: 250ms;
805
849
  --focus-transition-easing: ease;
806
850
 
807
- /* Slider — Figma Information Collect → Slider (384:21584) */
808
- --slider-width: 70px;
809
- --slider-track-height: 4px;
810
- --slider-track-height-big: 8px;
811
- --slider-thumb-size: 8px;
812
- --slider-thumb-size-big: 10px;
851
+ /* Slider — Figma Information Collect → Slider (384:21585) */
852
+ --slider-width: 96px;
853
+ --slider-track-height: 6px;
854
+ --slider-track-height-big: 10px;
855
+ --slider-thumb-size: 14px;
856
+ --slider-thumb-size-big: 16px;
857
+ --slider-thumb-core-size: 8px;
858
+ --slider-thumb-core-size-big: 10px;
859
+ --slider-thumb-hover-scale: 1.18;
860
+ --slider-thumb-press-scale: 0.92;
861
+ --slider-thumb-scale-transition-duration: 0.15s;
862
+ /* Click / keyboard value jumps — off while data-dragging */
863
+ --slider-value-transition-duration: 0.22s;
864
+ --slider-value-transition-easing: cubic-bezier(0.22, 1, 0.36, 1);
813
865
  --slider-pad-y: var(--padding-tinyer, 3px);
814
- --slider-track-bg: var(--box-box-normal-background-whiteonly, #fefcfc);
815
- --slider-track-border: var(--border-border-normal-primary, #e2e0e0);
866
+ /* Default & Big tracks share fill tokens; Big only differs by height/thumb.
867
+ * Track fill ON: border-normal-primary; OFF: border-normal-light. No stroke. */
868
+ --slider-track-bg: var(--border-border-normal-primary, #e2e0e0);
816
869
  --slider-range-bg: var(--box-box-theme-primarybackground, #ff5532);
817
870
  --slider-thumb-bg: var(--box-box-normal-background-whiteonly, #fefcfc);
818
- --slider-thumb-border: var(--border-border-theme-primary, #ff5532);
819
- /* Availability Status=OFF — secondary fill, not whole-control opacity */
820
- --slider-track-bg-disabled: var(--control-control-normal-lightbackground-deep, #fdfbfb);
871
+ --slider-thumb-core: var(--box-box-theme-primarybackground, #ff5532);
872
+ /* BasicShadow / BasicShadow-Level4WithLIne */
873
+ --slider-thumb-shadow:
874
+ 0 6px 18px rgba(0, 0, 0, 0.08),
875
+ 0 0 1px rgba(0, 0, 0, 0.2);
876
+ /* Availability Status=OFF */
877
+ --slider-track-bg-disabled: var(--border-border-normal-light, #f5f3f3);
821
878
  --slider-range-bg-disabled: var(--box-box-theme-secondarybackground, #ffdad2);
822
- --slider-thumb-border-disabled: var(--box-box-theme-secondarybackground, #ffdad2);
879
+ --slider-thumb-core-disabled: var(
880
+ --box-box-theme-secondarybackground,
881
+ #ffdad2
882
+ );
823
883
 
824
884
  /* Upload — Figma Information Collect → Upload (527:56238 / 527:56237) */
825
885
  --upload-radius: var(--border-radius-small, 8px);
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@aviala-design/spiral",
3
- "version": "2.4.1",
3
+ "version": "2.6.0",
4
4
  "description": "Spiral 2 ? Aviala Design React component library",
5
5
  "license": "MIT",
6
6
  "repository": {
@@ -45,19 +45,23 @@
45
45
  "colord": "^2.9.3",
46
46
  "tailwind-merge": "^3.3.1",
47
47
  "@aviala-design/icons": "2.2.0",
48
- "@aviala-design/tokens": "2.2.1"
48
+ "@aviala-design/tokens": "2.4.0"
49
49
  },
50
50
  "peerDependencies": {
51
51
  "react": ">=18",
52
- "react-dom": ">=18"
52
+ "react-dom": ">=18",
53
+ "react-hook-form": ">=7.50"
53
54
  },
54
55
  "devDependencies": {
56
+ "@hookform/resolvers": "^5.2.1",
55
57
  "@types/react": "^19.1.8",
58
+ "react-hook-form": "^7.62.0",
56
59
  "@types/react-dom": "^19.1.6",
57
60
  "react-docgen-typescript": "^2.2.20",
58
61
  "rimraf": "^6.0.1",
59
62
  "tsup": "^8.5.0",
60
- "typescript": "^5.8.3"
63
+ "typescript": "^5.8.3",
64
+ "zod": "^4.0.17"
61
65
  },
62
66
  "scripts": {
63
67
  "build": "tsup && node scripts/copy-css.mjs && node scripts/generate-props.mjs && node scripts/aggregate-changelogs.mjs",