@aviala-design/spiral 0.2.0 → 2.0.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/props.json CHANGED
@@ -186,6 +186,13 @@
186
186
  "required": false,
187
187
  "description": ""
188
188
  },
189
+ {
190
+ "name": "equalWidth",
191
+ "type": "boolean",
192
+ "defaultValue": "false",
193
+ "required": false,
194
+ "description": "When true, the group fills its container and items split the width equally."
195
+ },
189
196
  {
190
197
  "name": "disabled",
191
198
  "type": "boolean",
@@ -456,13 +463,6 @@
456
463
  "required": false,
457
464
  "description": ""
458
465
  },
459
- {
460
- "name": "placeholder",
461
- "type": "string",
462
- "defaultValue": "YYYY/MM/DD",
463
- "required": false,
464
- "description": ""
465
- },
466
466
  {
467
467
  "name": "rangePlaceholder",
468
468
  "type": "string",
@@ -484,6 +484,13 @@
484
484
  "required": false,
485
485
  "description": ""
486
486
  },
487
+ {
488
+ "name": "editable",
489
+ "type": "boolean",
490
+ "defaultValue": "true",
491
+ "required": false,
492
+ "description": "When false, shows a read-only value instead of an editable input. Default true."
493
+ },
487
494
  {
488
495
  "name": "contentClassName",
489
496
  "type": "string",
@@ -757,7 +764,7 @@
757
764
  "name": "showController",
758
765
  "type": "boolean",
759
766
  "required": false,
760
- "description": "Figma `Controller` — character counter + resize affordance"
767
+ "description": "Figma `Controller` — character counter + SymbolResize drag handle"
761
768
  },
762
769
  {
763
770
  "name": "error",
@@ -1174,7 +1181,7 @@
1174
1181
  "props": [
1175
1182
  {
1176
1183
  "name": "label",
1177
- "type": "string",
1184
+ "type": "ReactNode",
1178
1185
  "required": false,
1179
1186
  "description": ""
1180
1187
  },
@@ -1192,15 +1199,34 @@
1192
1199
  },
1193
1200
  {
1194
1201
  "name": "error",
1195
- "type": "string",
1202
+ "type": "ReactNode",
1196
1203
  "required": false,
1197
1204
  "description": ""
1198
1205
  },
1206
+ {
1207
+ "name": "info",
1208
+ "type": "ReactNode",
1209
+ "required": false,
1210
+ "description": ""
1211
+ },
1212
+ {
1213
+ "name": "alert",
1214
+ "type": "ReactNode",
1215
+ "required": false,
1216
+ "description": "Optional Alert / Feedback under the control"
1217
+ },
1199
1218
  {
1200
1219
  "name": "required",
1201
1220
  "type": "boolean",
1202
1221
  "required": false,
1203
1222
  "description": ""
1223
+ },
1224
+ {
1225
+ "name": "direction",
1226
+ "type": "enum",
1227
+ "defaultValue": "vertical",
1228
+ "required": false,
1229
+ "description": "Figma `Direction` — vertical stacks label above control; horizontal places label beside"
1204
1230
  }
1205
1231
  ]
1206
1232
  },
package/dist/styles.css CHANGED
@@ -131,7 +131,7 @@
131
131
  --text-text-normal-text-black: #343333;
132
132
  --text-text-normal-text-caption-black: #858484;
133
133
  --text-text-normal-text-white: #fefcfc;
134
- --text-text-normal-text-caption-white: #a8a8a8;
134
+ --text-text-normal-text-caption-white: #fefcfc;
135
135
 
136
136
  /* shadcn semantic aliases — default typography/surfaces use neutral tokens, not theme tint */
137
137
  --background: var(--normal-background-theme, #faf8f8);
@@ -159,7 +159,7 @@
159
159
  [data-mode="dark"] {
160
160
  --background: #1a1a1a;
161
161
  --foreground: var(--text-text-normal-text-white, #e8e8e8);
162
- --muted-foreground: var(--text-text-normal-text-caption-white, #a8a8a8);
162
+ --muted-foreground: var(--text-text-normal-text-caption-black, #a8a8a8);
163
163
  --secondary-foreground: var(--text-text-normal-text-white, #e8e8e8);
164
164
  --accent-foreground: var(--text-text-normal-text-white, #e8e8e8);
165
165
  --card: #242424;
@@ -459,11 +459,12 @@
459
459
  --segmentator-shadow-tiled: inset 0 -0.5px 0
460
460
  var(--special-effort-se-lineshadow-bottom, rgba(0, 0, 0, 0.04));
461
461
  --segmentator-item-hover-bg: var(--aviala-neutral-neutral-6, #edebeb);
462
- --segmentator-press-scale: 0.96;
463
- --segmentator-press-transition-duration: var(--segmentator-transition-duration, 0.3s);
462
+ --segmentator-press-scale: 0.98;
463
+ --segmentator-press-height-scale: 0.88;
464
+ --segmentator-press-transition-duration: var(--segmentator-transition-duration, 0.52s);
464
465
  --segmentator-press-transition-easing: var(
465
466
  --segmentator-transition-easing,
466
- cubic-bezier(0.33, 1, 0.68, 1)
467
+ cubic-bezier(0.22, 1.1, 0.36, 1)
467
468
  );
468
469
  --segmentator-haptic-press-ms: 20;
469
470
  --segmentator-haptic-select-ms: 16;
@@ -564,15 +565,21 @@
564
565
  var(--padding-min, 2px) * 2 + var(--line-height-line-height-regular, 1.125rem)
565
566
  );
566
567
  --datepicker-header-height: calc(
567
- var(--padding-tiny, 4px) * 4 + var(--icon-size-text-bigger, var(--size-middle, 1rem))
568
+ var(--padding-tiny, 4px) * 3 +
569
+ var(--typography-subtitle-line-height, var(--line-height-middle, 1.375rem))
568
570
  );
569
571
  --datepicker-grid-height: calc(
570
572
  var(--datepicker-grid-rows) * var(--datepicker-day-height) +
571
573
  (var(--datepicker-grid-rows) - 1) * var(--datepicker-row-gap)
572
574
  );
575
+ /* Date grid content (weekdays + grid) — bottom padding applied on view-viewport */
576
+ --datepicker-view-height: calc(
577
+ var(--datepicker-weekday-height) + var(--datepicker-panel-gap) +
578
+ var(--datepicker-grid-height)
579
+ );
573
580
  --datepicker-panel-body-height: calc(
574
581
  var(--datepicker-header-height) + var(--datepicker-panel-gap) +
575
- var(--datepicker-weekday-height) + var(--datepicker-panel-gap) + var(--datepicker-grid-height)
582
+ var(--datepicker-view-height) + var(--padding-tiny, 4px)
576
583
  );
577
584
  --datepicker-time-wheel-item-height: 36px;
578
585
  --datepicker-time-wheel-visible-count: 5;
@@ -793,15 +800,19 @@
793
800
  /* Slider — Figma Information Collect → Slider (384:21584) */
794
801
  --slider-width: 70px;
795
802
  --slider-track-height: 4px;
796
- --slider-track-height-big: 6px;
803
+ --slider-track-height-big: 8px;
797
804
  --slider-thumb-size: 8px;
798
- --slider-thumb-size-big: 12px;
805
+ --slider-thumb-size-big: 10px;
806
+ --slider-pad-y: var(--padding-tinyer, 3px);
799
807
  --slider-track-bg: var(--box-box-normal-background-whiteonly, #fefcfc);
800
808
  --slider-track-border: var(--border-border-normal-primary, #e2e0e0);
801
809
  --slider-range-bg: var(--box-box-theme-primarybackground, #ff5532);
802
810
  --slider-thumb-bg: var(--box-box-normal-background-whiteonly, #fefcfc);
803
811
  --slider-thumb-border: var(--border-border-theme-primary, #ff5532);
804
- --slider-disabled-opacity: var(--transparency-disable, 0.55);
812
+ /* Availability Status=OFF — secondary fill, not whole-control opacity */
813
+ --slider-track-bg-disabled: var(--control-control-normal-lightbackground-deep, #fdfbfb);
814
+ --slider-range-bg-disabled: var(--box-box-theme-secondarybackground, #ffdad2);
815
+ --slider-thumb-border-disabled: var(--box-box-theme-secondarybackground, #ffdad2);
805
816
 
806
817
  /* Upload — Figma Information Collect → Upload (527:56238 / 527:56237) */
807
818
  --upload-radius: var(--border-radius-small, 8px);
@@ -1016,11 +1027,13 @@
1016
1027
  --typography-caption-fg: var(--text-text-normal-text-caption-black, #858484);
1017
1028
  --typography-caption-fg-white: var(--text-text-normal-text-caption-white, #fefcfc);
1018
1029
 
1019
- --typeface-gap: var(--gap-inside, 4px);
1030
+ --typeface-gap: var(--gap-none, 0);
1020
1031
  }
1021
1032
 
1022
1033
  /* Keyboard focus ring - opt-in via `.aviala-focus-ring`.
1023
- Uses :focus-visible (no JS gate). Animated box-shadow: 12px to 3px, 250ms. */
1034
+ Requires `html[data-aviala-kbd]` (set by initKeyboardFocus) so rings do not
1035
+ appear when menus programmatically focus items after a pointer open.
1036
+ Animated box-shadow: 12px → 3px, 250ms. */
1024
1037
 
1025
1038
  :root {
1026
1039
  --focus-ring-width-start: var(--size-small, 12px);
@@ -1030,13 +1043,15 @@
1030
1043
  --focus-transition-easing: ease;
1031
1044
  }
1032
1045
 
1033
- /* Suppress native outline; custom ring only on .aviala-focus-ring:focus-visible */
1034
- .aviala-focus-ring:focus {
1046
+ /* Suppress native outline always; custom ring only for keyboard modality */
1047
+ .aviala-focus-ring:focus,
1048
+ .aviala-focus-ring:focus-visible,
1049
+ .aviala-focus-ring:has(:focus-visible) {
1035
1050
  outline: none;
1036
1051
  }
1037
1052
 
1038
- .aviala-focus-ring:focus-visible {
1039
- outline: none;
1053
+ html[data-aviala-kbd] .aviala-focus-ring:focus-visible,
1054
+ html[data-aviala-kbd] .aviala-focus-ring:has(:focus-visible) {
1040
1055
  animation: aviala-focus-ring-settle var(--focus-transition-duration)
1041
1056
  var(--focus-transition-easing) forwards;
1042
1057
  }
@@ -1051,7 +1066,19 @@
1051
1066
  }
1052
1067
 
1053
1068
  @media (prefers-reduced-motion: reduce) {
1054
- .aviala-focus-ring:focus-visible {
1069
+ html[data-aviala-kbd] .aviala-focus-ring:focus-visible,
1070
+ html[data-aviala-kbd] .aviala-focus-ring:has(:focus-visible) {
1071
+ animation: none;
1072
+ box-shadow: 0 0 0 var(--focus-ring-width-end) var(--focus-ring-color);
1073
+ }
1074
+
1075
+ /* Wheel selected-item proxy rings (overflow clips the listbox ring) */
1076
+ html[data-aviala-kbd]
1077
+ .aviala-datepicker-time__wheel-scroll:focus-visible
1078
+ .aviala-datepicker-time__wheel-option[data-selected="true"],
1079
+ html[data-aviala-kbd]
1080
+ .aviala-scroll-picker-column__scroll:focus-visible
1081
+ .aviala-scroll-picker-item[data-selected="true"] {
1055
1082
  animation: none;
1056
1083
  box-shadow: 0 0 0 var(--focus-ring-width-end) var(--focus-ring-color);
1057
1084
  }
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@aviala-design/spiral",
3
- "version": "0.2.0",
3
+ "version": "2.0.0",
4
4
  "description": "Spiral 2 ? Aviala Design React component library",
5
5
  "license": "MIT",
6
6
  "repository": {
@@ -43,8 +43,8 @@
43
43
  "clsx": "^2.1.1",
44
44
  "colord": "^2.9.3",
45
45
  "tailwind-merge": "^3.3.1",
46
- "@aviala-design/tokens": "0.0.4",
47
- "@aviala-design/icons": "2.0.1"
46
+ "@aviala-design/icons": "2.0.2",
47
+ "@aviala-design/tokens": "2.0.0"
48
48
  },
49
49
  "peerDependencies": {
50
50
  "react": ">=18",