@chayns-ui/core 0.9.2 → 0.10.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 (210) hide show
  1. package/dist/accordion.css +3 -1
  2. package/dist/badge.css +28 -3
  3. package/dist/banner.css +2 -0
  4. package/dist/breadcrumb.css +63 -0
  5. package/dist/button.css +103 -35
  6. package/dist/card.css +39 -0
  7. package/dist/checkbox.css +3 -3
  8. package/dist/combo-box.css +17 -4
  9. package/dist/components/accordion/Accordion.d.ts +3 -4
  10. package/dist/components/accordion/Accordion.d.ts.map +1 -1
  11. package/dist/components/accordion/Accordion.js +37 -23
  12. package/dist/components/accordion/Accordion.js.map +1 -1
  13. package/dist/components/accordion/Accordion.types.d.ts +7 -2
  14. package/dist/components/accordion/Accordion.types.d.ts.map +1 -1
  15. package/dist/components/accordion/Accordion.types.js +7 -1
  16. package/dist/components/accordion/Accordion.types.js.map +1 -1
  17. package/dist/components/accordion-group/AccordionGroup.d.ts.map +1 -1
  18. package/dist/components/accordion-group/AccordionGroup.js +1 -0
  19. package/dist/components/accordion-group/AccordionGroup.js.map +1 -1
  20. package/dist/components/avatar/Avatar.d.ts.map +1 -1
  21. package/dist/components/avatar/Avatar.js +1 -0
  22. package/dist/components/avatar/Avatar.js.map +1 -1
  23. package/dist/components/avatar/Avatar.types.d.ts +9 -1
  24. package/dist/components/avatar/Avatar.types.d.ts.map +1 -1
  25. package/dist/components/avatar/Avatar.types.js +17 -0
  26. package/dist/components/avatar/Avatar.types.js.map +1 -0
  27. package/dist/components/avatar-group/AvatarGroup.d.ts.map +1 -1
  28. package/dist/components/avatar-group/AvatarGroup.js +4 -3
  29. package/dist/components/avatar-group/AvatarGroup.js.map +1 -1
  30. package/dist/components/badge/Badge.d.ts.map +1 -1
  31. package/dist/components/badge/Badge.js +1 -0
  32. package/dist/components/badge/Badge.js.map +1 -1
  33. package/dist/components/badge/Badge.types.d.ts +13 -0
  34. package/dist/components/badge/Badge.types.d.ts.map +1 -1
  35. package/dist/components/badge/Badge.types.js +16 -1
  36. package/dist/components/badge/Badge.types.js.map +1 -1
  37. package/dist/components/banner/Banner.d.ts.map +1 -1
  38. package/dist/components/banner/Banner.js +1 -0
  39. package/dist/components/banner/Banner.js.map +1 -1
  40. package/dist/components/banner/Banner.types.d.ts +7 -0
  41. package/dist/components/banner/Banner.types.d.ts.map +1 -1
  42. package/dist/components/banner/Banner.types.js +9 -1
  43. package/dist/components/banner/Banner.types.js.map +1 -1
  44. package/dist/components/breadcrumb/Breadcrumb.d.ts +4 -0
  45. package/dist/components/breadcrumb/Breadcrumb.d.ts.map +1 -0
  46. package/dist/components/breadcrumb/Breadcrumb.js +35 -0
  47. package/dist/components/breadcrumb/Breadcrumb.js.map +1 -0
  48. package/dist/components/breadcrumb/Breadcrumb.types.d.ts +13 -0
  49. package/dist/components/breadcrumb/Breadcrumb.types.d.ts.map +1 -0
  50. package/dist/components/button/Button.d.ts.map +1 -1
  51. package/dist/components/button/Button.js +1 -0
  52. package/dist/components/button/Button.js.map +1 -1
  53. package/dist/components/button/Button.types.d.ts +7 -0
  54. package/dist/components/button/Button.types.d.ts.map +1 -1
  55. package/dist/components/button/Button.types.js +9 -1
  56. package/dist/components/button/Button.types.js.map +1 -1
  57. package/dist/components/button/button-icon/ButtonIcon.d.ts.map +1 -1
  58. package/dist/components/button/button-icon/ButtonIcon.js +7 -3
  59. package/dist/components/button/button-icon/ButtonIcon.js.map +1 -1
  60. package/dist/components/card/Card.d.ts.map +1 -1
  61. package/dist/components/card/Card.js +2 -0
  62. package/dist/components/card/Card.js.map +1 -1
  63. package/dist/components/checkbox/Checkbox.d.ts.map +1 -1
  64. package/dist/components/checkbox/Checkbox.js +1 -0
  65. package/dist/components/checkbox/Checkbox.js.map +1 -1
  66. package/dist/components/combo-box/ComboBox.d.ts.map +1 -1
  67. package/dist/components/combo-box/ComboBox.js +83 -13
  68. package/dist/components/combo-box/ComboBox.js.map +1 -1
  69. package/dist/components/date-time-picker/DateTimePicker.d.ts.map +1 -1
  70. package/dist/components/date-time-picker/DateTimePicker.js +31 -239
  71. package/dist/components/date-time-picker/DateTimePicker.js.map +1 -1
  72. package/dist/components/date-time-picker/DateTimePicker.types.d.ts +12 -0
  73. package/dist/components/date-time-picker/DateTimePicker.types.d.ts.map +1 -1
  74. package/dist/components/date-time-picker/DateTimePicker.types.js +15 -1
  75. package/dist/components/date-time-picker/DateTimePicker.types.js.map +1 -1
  76. package/dist/components/date-time-picker/date-time-picker-utils.d.ts +4 -0
  77. package/dist/components/date-time-picker/date-time-picker-utils.d.ts.map +1 -0
  78. package/dist/components/date-time-picker/date-time-picker-utils.js +19 -0
  79. package/dist/components/date-time-picker/date-time-picker-utils.js.map +1 -0
  80. package/dist/components/date-time-picker/hooks/useDateTimePickerValue.d.ts +37 -0
  81. package/dist/components/date-time-picker/hooks/useDateTimePickerValue.d.ts.map +1 -0
  82. package/dist/components/date-time-picker/hooks/useDateTimePickerValue.js +156 -0
  83. package/dist/components/date-time-picker/hooks/useDateTimePickerValue.js.map +1 -0
  84. package/dist/components/date-time-picker/sizer/PickerSizer.d.ts +7 -0
  85. package/dist/components/date-time-picker/sizer/PickerSizer.d.ts.map +1 -0
  86. package/dist/components/date-time-picker/sizer/PickerSizer.js +15 -0
  87. package/dist/components/date-time-picker/sizer/PickerSizer.js.map +1 -0
  88. package/dist/components/date-time-picker/wheel/Wheel.d.ts +14 -0
  89. package/dist/components/date-time-picker/wheel/Wheel.d.ts.map +1 -0
  90. package/dist/components/date-time-picker/wheel/Wheel.js +136 -0
  91. package/dist/components/date-time-picker/wheel/Wheel.js.map +1 -0
  92. package/dist/components/icon-button/IconButton.d.ts.map +1 -1
  93. package/dist/components/icon-button/IconButton.js +1 -0
  94. package/dist/components/icon-button/IconButton.js.map +1 -1
  95. package/dist/components/list/List.d.ts +15 -10
  96. package/dist/components/list/List.d.ts.map +1 -1
  97. package/dist/components/list/List.js +19 -7
  98. package/dist/components/list/List.js.map +1 -1
  99. package/dist/components/list/List.types.d.ts +2 -2
  100. package/dist/components/list/List.types.d.ts.map +1 -1
  101. package/dist/components/pagination/Pagination.d.ts +4 -0
  102. package/dist/components/pagination/Pagination.d.ts.map +1 -0
  103. package/dist/components/pagination/Pagination.js +57 -0
  104. package/dist/components/pagination/Pagination.js.map +1 -0
  105. package/dist/components/pagination/Pagination.types.d.ts +15 -0
  106. package/dist/components/pagination/Pagination.types.d.ts.map +1 -0
  107. package/dist/components/pagination/pagination-pages.d.ts +2 -0
  108. package/dist/components/pagination/pagination-pages.d.ts.map +1 -0
  109. package/dist/components/pagination/pagination-pages.js +35 -0
  110. package/dist/components/pagination/pagination-pages.js.map +1 -0
  111. package/dist/components/popup/Popup.d.ts +4 -1
  112. package/dist/components/popup/Popup.d.ts.map +1 -1
  113. package/dist/components/popup/Popup.js +25 -18
  114. package/dist/components/popup/Popup.js.map +1 -1
  115. package/dist/components/popup/PopupList.d.ts +4 -1
  116. package/dist/components/popup/PopupList.d.ts.map +1 -1
  117. package/dist/components/popup/PopupList.js +7 -1
  118. package/dist/components/popup/PopupList.js.map +1 -1
  119. package/dist/components/progress/Progress.d.ts.map +1 -1
  120. package/dist/components/progress/Progress.js +1 -0
  121. package/dist/components/progress/Progress.js.map +1 -1
  122. package/dist/components/progress/Progress.types.d.ts +1 -1
  123. package/dist/components/progress/Progress.types.d.ts.map +1 -1
  124. package/dist/components/radio-group/RadioGroup.d.ts.map +1 -1
  125. package/dist/components/radio-group/RadioGroup.js +2 -0
  126. package/dist/components/radio-group/RadioGroup.js.map +1 -1
  127. package/dist/components/segmented-control/SegmentedControl.d.ts.map +1 -1
  128. package/dist/components/segmented-control/SegmentedControl.js +78 -25
  129. package/dist/components/segmented-control/SegmentedControl.js.map +1 -1
  130. package/dist/components/segmented-control/SegmentedControl.types.d.ts +1 -1
  131. package/dist/components/segmented-control/SegmentedControl.types.d.ts.map +1 -1
  132. package/dist/components/segmented-control/SegmentedControlContext.d.ts +2 -0
  133. package/dist/components/segmented-control/SegmentedControlContext.d.ts.map +1 -1
  134. package/dist/components/segmented-control/SegmentedControlContext.js.map +1 -1
  135. package/dist/components/skeleton/Skeleton.d.ts.map +1 -1
  136. package/dist/components/skeleton/Skeleton.js +1 -0
  137. package/dist/components/skeleton/Skeleton.js.map +1 -1
  138. package/dist/components/skeleton/Skeleton.types.d.ts +6 -0
  139. package/dist/components/skeleton/Skeleton.types.d.ts.map +1 -1
  140. package/dist/components/skeleton/Skeleton.types.js +8 -1
  141. package/dist/components/skeleton/Skeleton.types.js.map +1 -1
  142. package/dist/components/slider/Slider.d.ts +4 -0
  143. package/dist/components/slider/Slider.d.ts.map +1 -0
  144. package/dist/components/slider/Slider.js +61 -0
  145. package/dist/components/slider/Slider.js.map +1 -0
  146. package/dist/components/slider/Slider.types.d.ts +10 -0
  147. package/dist/components/slider/Slider.types.d.ts.map +1 -0
  148. package/dist/components/spinner/Spinner.d.ts.map +1 -1
  149. package/dist/components/spinner/Spinner.js +1 -0
  150. package/dist/components/spinner/Spinner.js.map +1 -1
  151. package/dist/components/split-button/SplitButton.d.ts.map +1 -1
  152. package/dist/components/split-button/SplitButton.js +2 -1
  153. package/dist/components/split-button/SplitButton.js.map +1 -1
  154. package/dist/components/stepper/Stepper.d.ts +4 -0
  155. package/dist/components/stepper/Stepper.d.ts.map +1 -0
  156. package/dist/components/stepper/Stepper.js +60 -0
  157. package/dist/components/stepper/Stepper.js.map +1 -0
  158. package/dist/components/stepper/Stepper.types.d.ts +27 -0
  159. package/dist/components/stepper/Stepper.types.d.ts.map +1 -0
  160. package/dist/components/stepper/Stepper.types.js +25 -0
  161. package/dist/components/stepper/Stepper.types.js.map +1 -0
  162. package/dist/components/stepper/stepper-values.d.ts +6 -0
  163. package/dist/components/stepper/stepper-values.d.ts.map +1 -0
  164. package/dist/components/stepper/stepper-values.js +26 -0
  165. package/dist/components/stepper/stepper-values.js.map +1 -0
  166. package/dist/components/switch/Switch.d.ts.map +1 -1
  167. package/dist/components/switch/Switch.js +1 -0
  168. package/dist/components/switch/Switch.js.map +1 -1
  169. package/dist/components/text-area/TextArea.d.ts.map +1 -1
  170. package/dist/components/text-area/TextArea.js +1 -0
  171. package/dist/components/text-area/TextArea.js.map +1 -1
  172. package/dist/components/text-field/TextField.d.ts.map +1 -1
  173. package/dist/components/text-field/TextField.js +1 -0
  174. package/dist/components/text-field/TextField.js.map +1 -1
  175. package/dist/components/tooltip/Tooltip.d.ts +4 -0
  176. package/dist/components/tooltip/Tooltip.d.ts.map +1 -0
  177. package/dist/components/tooltip/Tooltip.js +75 -0
  178. package/dist/components/tooltip/Tooltip.js.map +1 -0
  179. package/dist/components/tooltip/Tooltip.types.d.ts +12 -0
  180. package/dist/components/tooltip/Tooltip.types.d.ts.map +1 -0
  181. package/dist/components/tooltip/hooks/useTooltipInteraction.d.ts +11 -0
  182. package/dist/components/tooltip/hooks/useTooltipInteraction.d.ts.map +1 -0
  183. package/dist/components/tooltip/hooks/useTooltipInteraction.js +59 -0
  184. package/dist/components/tooltip/hooks/useTooltipInteraction.js.map +1 -0
  185. package/dist/components/tooltip/tooltip-trigger-props.d.ts +4 -0
  186. package/dist/components/tooltip/tooltip-trigger-props.d.ts.map +1 -0
  187. package/dist/components/tooltip/tooltip-trigger-props.js +25 -0
  188. package/dist/components/tooltip/tooltip-trigger-props.js.map +1 -0
  189. package/dist/date-time-picker.css +33 -2
  190. package/dist/hooks/useOverlayPosition.d.ts +4 -0
  191. package/dist/hooks/useOverlayPosition.d.ts.map +1 -0
  192. package/dist/hooks/useOverlayPosition.js +60 -0
  193. package/dist/hooks/useOverlayPosition.js.map +1 -0
  194. package/dist/index.d.ts +21 -7
  195. package/dist/index.d.ts.map +1 -1
  196. package/dist/index.js +14 -7
  197. package/dist/pagination.css +54 -0
  198. package/dist/popup.css +4 -0
  199. package/dist/progress.css +1 -1
  200. package/dist/segmented-control.css +2 -0
  201. package/dist/slider.css +109 -0
  202. package/dist/split-button.css +2 -79
  203. package/dist/stepper.css +77 -0
  204. package/dist/styles.css +5 -0
  205. package/dist/tooltip.css +68 -0
  206. package/dist/utils/native-ref.d.ts +4 -0
  207. package/dist/utils/native-ref.d.ts.map +1 -0
  208. package/dist/utils/native-ref.js +24 -0
  209. package/dist/utils/native-ref.js.map +1 -0
  210. package/package.json +7 -2
@@ -1,3 +1,5 @@
1
+ @import url('./button.css');
2
+
1
3
  @layer chayns.components {
2
4
  .chayns-accordion {
3
5
  box-sizing: border-box;
@@ -10,7 +12,7 @@
10
12
  background: var(--surface);
11
13
  }
12
14
 
13
- .chayns-accordion--wrapped {
15
+ .chayns-accordion--wrapped:not(.chayns-accordion--grouped) {
14
16
  overflow: hidden;
15
17
  border: 1px solid var(--border);
16
18
  border-radius: 10px;
package/dist/badge.css CHANGED
@@ -10,6 +10,13 @@
10
10
  font-size: var(--fs-caption);
11
11
  font-weight: 500;
12
12
  line-height: 1.2;
13
+ transition:
14
+ background 0.2s ease,
15
+ color 0.2s ease,
16
+ border-color 0.2s ease,
17
+ box-shadow 0.2s ease,
18
+ transform 0.15s ease,
19
+ filter 0.2s ease;
13
20
  }
14
21
 
15
22
  .chayns-badge--md {
@@ -31,16 +38,34 @@
31
38
  .chayns-badge--success {
32
39
  /* stylelint-disable-next-line custom-property-pattern */
33
40
  background: var(--success-bg);
34
- color: var(--success);
41
+ color: var(--on-success);
35
42
  }
36
43
 
37
44
  .chayns-badge--warning {
38
45
  background: var(--warning-bg);
39
- color: var(--warning);
46
+ color: var(--on-warning);
40
47
  }
41
48
 
42
49
  .chayns-badge--danger {
43
50
  background: var(--danger-bg);
44
- color: var(--danger);
51
+ color: var(--on-danger);
52
+ }
53
+
54
+ @media (hover: hover) {
55
+ .chayns-badge:hover {
56
+ transform: translateY(-2px);
57
+ filter: saturate(1.18);
58
+ box-shadow: 0 5px 12px -5px rgb(16 40 46 / 30%);
59
+ }
60
+ }
61
+
62
+ @media (prefers-reduced-motion: reduce) {
63
+ .chayns-badge {
64
+ transition: none;
65
+ }
66
+
67
+ .chayns-badge:hover {
68
+ transform: none;
69
+ }
45
70
  }
46
71
  }
package/dist/banner.css CHANGED
@@ -1,3 +1,5 @@
1
+ @import url('./button.css');
2
+
1
3
  @layer chayns.components {
2
4
  .chayns-banner {
3
5
  box-sizing: border-box;
@@ -0,0 +1,63 @@
1
+ @import url('./button.css');
2
+
3
+ @layer chayns.components {
4
+ .chayns-breadcrumb {
5
+ min-inline-size: 0;
6
+ overflow-x: auto;
7
+ }
8
+
9
+ .chayns-breadcrumb__list {
10
+ display: flex;
11
+ align-items: center;
12
+ gap: var(--k9);
13
+ margin: 0;
14
+ padding: 0;
15
+ list-style: none;
16
+ font-size: var(--fs-body);
17
+ }
18
+
19
+ .chayns-breadcrumb__item {
20
+ display: flex;
21
+ flex: none;
22
+ align-items: center;
23
+ gap: var(--k9);
24
+ }
25
+
26
+ .chayns-breadcrumb__link,
27
+ .chayns-breadcrumb__current {
28
+ display: inline-flex;
29
+ align-items: center;
30
+ gap: var(--k6);
31
+ min-block-size: max(24px, var(--k24));
32
+ }
33
+
34
+ .chayns-breadcrumb__link {
35
+ color: var(--text-2);
36
+ text-decoration: none;
37
+ }
38
+
39
+ .chayns-breadcrumb__current {
40
+ color: var(--text);
41
+ font-weight: 500;
42
+ }
43
+
44
+ .chayns-breadcrumb__separator {
45
+ color: var(--text-2);
46
+ font-size: var(--icon);
47
+ }
48
+
49
+ .chayns-breadcrumb__link:hover {
50
+ text-decoration: underline;
51
+ }
52
+
53
+ @media (width <= 640px) {
54
+ .chayns-breadcrumb__list,
55
+ .chayns-breadcrumb__item {
56
+ gap: var(--k6);
57
+ }
58
+ }
59
+
60
+ .chayns-breadcrumb__link:focus-visible {
61
+ outline: var(--focus-ring-size) solid rgb(var(--focus-ring-rgb), var(--focus-ring-alpha-strong));
62
+ }
63
+ }
package/dist/button.css CHANGED
@@ -24,6 +24,10 @@
24
24
  }
25
25
 
26
26
  .chayns-button {
27
+ transition:
28
+ transform 0.14s ease,
29
+ box-shadow 0.18s ease,
30
+ filter 0.18s ease;
27
31
  gap: var(--sp-2);
28
32
  padding-block: var(--btn-py);
29
33
  padding-inline: var(--btn-px);
@@ -61,33 +65,7 @@
61
65
 
62
66
  :where(.chayns-button--danger, .chayns-icon-button--danger) {
63
67
  background: var(--danger-bg);
64
- color: var(--danger);
65
- }
66
-
67
- :where(.chayns-button, .chayns-icon-button):active:not(:disabled) {
68
- transform: scale(0.96);
69
- }
70
-
71
- :where(.chayns-icon-button):active:not(:disabled) {
72
- transform: scale(0.96);
73
- }
74
-
75
- :where(.chayns-button--primary, .chayns-icon-button--primary):active:not(:disabled) {
76
- background: var(--accent-active);
77
- }
78
-
79
- :where(.chayns-button--outline, .chayns-icon-button--outline):active:not(:disabled) {
80
- background: var(--accent);
81
- color: var(--on-accent);
82
- }
83
-
84
- :where(.chayns-button--ghost, .chayns-icon-button--ghost):active:not(:disabled) {
85
- background: var(--surface-alt);
86
- color: var(--accent);
87
- }
88
-
89
- :where(.chayns-button--danger, .chayns-icon-button--danger):active:not(:disabled) {
90
- background: var(--danger-bg-hover);
68
+ color: var(--on-danger);
91
69
  }
92
70
 
93
71
  :where(.chayns-button, .chayns-icon-button):disabled {
@@ -95,6 +73,7 @@
95
73
  cursor: not-allowed;
96
74
  box-shadow: none;
97
75
  transform: none;
76
+ filter: none;
98
77
  }
99
78
 
100
79
  :where(
@@ -116,6 +95,7 @@
116
95
  }
117
96
 
118
97
  .chayns-button-icon {
98
+ pointer-events: none;
119
99
  display: inline-flex;
120
100
  align-items: center;
121
101
  justify-content: center;
@@ -139,17 +119,46 @@
139
119
  animation: chayns-button-spin 0.8s linear infinite;
140
120
  }
141
121
 
142
- :where(.chayns-button, .chayns-icon-button):active:not(:disabled)
122
+ :where(
123
+ .chayns-button,
124
+ .chayns-icon-button,
125
+ .chayns-split-button__trigger,
126
+ .chayns-stepper__button,
127
+ .chayns-pagination__arrow,
128
+ .chayns-segmented-control__segment,
129
+ .chayns-popup-list__item,
130
+ .chayns-combo-box__trigger,
131
+ .chayns-banner__close,
132
+ .chayns-breadcrumb__link,
133
+ .chayns-accordion__header
134
+ ):active:not(:disabled)
143
135
  .chayns-button-icon__weight:not(.chayns-button-icon__weight--active) {
144
136
  display: none;
145
137
  }
146
138
 
147
- :where(.chayns-button, .chayns-icon-button):active:not(:disabled)
139
+ :where(
140
+ .chayns-button,
141
+ .chayns-icon-button,
142
+ .chayns-split-button__trigger,
143
+ .chayns-stepper__button,
144
+ .chayns-pagination__arrow,
145
+ .chayns-segmented-control__segment,
146
+ .chayns-popup-list__item,
147
+ .chayns-combo-box__trigger,
148
+ .chayns-banner__close,
149
+ .chayns-breadcrumb__link,
150
+ .chayns-accordion__header
151
+ ):active:not(:disabled)
148
152
  .chayns-button-icon__weight--active {
149
153
  display: inline-flex;
150
154
  }
151
155
 
152
156
  @media (hover: hover) {
157
+ .chayns-button:hover:not(:disabled) {
158
+ filter: brightness(1.06);
159
+ transform: translateY(-1px);
160
+ }
161
+
153
162
  :where(.chayns-button--primary, .chayns-icon-button--primary):hover:not(:disabled) {
154
163
  background: var(--accent-hover);
155
164
  box-shadow: var(--shadow-btn-hover);
@@ -173,41 +182,100 @@
173
182
  transform: translateY(-1px);
174
183
  }
175
184
 
176
- :where(.chayns-button, .chayns-icon-button):hover:not(:disabled)
185
+ .chayns-icon-button:hover:not(:disabled) {
186
+ transform: translateY(-2px);
187
+ box-shadow: 0 7px 16px -6px rgb(var(--accent-rgb), 0.55);
188
+ }
189
+
190
+ :where(
191
+ .chayns-button,
192
+ .chayns-icon-button,
193
+ .chayns-split-button__trigger,
194
+ .chayns-stepper__button,
195
+ .chayns-pagination__arrow,
196
+ .chayns-segmented-control__segment,
197
+ .chayns-popup-list__item,
198
+ .chayns-combo-box__trigger,
199
+ .chayns-banner__close,
200
+ .chayns-breadcrumb__link,
201
+ .chayns-accordion__header
202
+ ):hover:not(:disabled)
177
203
  .chayns-button-icon__weight:not(.chayns-button-icon__weight--active) {
178
204
  display: none;
179
205
  }
180
206
 
181
- :where(.chayns-button, .chayns-icon-button):hover:not(:disabled)
207
+ :where(
208
+ .chayns-button,
209
+ .chayns-icon-button,
210
+ .chayns-split-button__trigger,
211
+ .chayns-stepper__button,
212
+ .chayns-pagination__arrow,
213
+ .chayns-segmented-control__segment,
214
+ .chayns-popup-list__item,
215
+ .chayns-combo-box__trigger,
216
+ .chayns-banner__close,
217
+ .chayns-breadcrumb__link,
218
+ .chayns-accordion__header
219
+ ):hover:not(:disabled)
182
220
  .chayns-button-icon__weight--active {
183
221
  display: inline-flex;
184
222
  }
185
223
  }
186
224
 
187
- :where(.chayns-button, .chayns-icon-button):focus-visible {
225
+ :is(.chayns-button, .chayns-icon-button):active:not(:disabled) {
226
+ transform: translateY(0) scale(0.97);
227
+ }
228
+
229
+ .chayns-icon-button:active:not(:disabled) {
230
+ transform: translateY(0) scale(0.9);
231
+ }
232
+
233
+ :where(.chayns-button--primary, .chayns-icon-button--primary):active:not(:disabled) {
234
+ background: var(--accent-active);
235
+ }
236
+
237
+ :where(.chayns-button--outline, .chayns-icon-button--outline):active:not(:disabled) {
238
+ background: var(--accent);
239
+ color: var(--on-accent);
240
+ }
241
+
242
+ :where(.chayns-button--ghost, .chayns-icon-button--ghost):active:not(:disabled) {
243
+ background: var(--surface-alt);
244
+ color: var(--accent);
245
+ }
246
+
247
+ :where(.chayns-button--danger, .chayns-icon-button--danger):active:not(:disabled) {
248
+ background: var(--danger-bg-hover);
249
+ }
250
+
251
+ :is(.chayns-button, .chayns-icon-button):focus-visible:not(:disabled) {
188
252
  outline: none;
189
253
  box-shadow: 0 0 0 var(--focus-ring-size)
190
254
  rgb(var(--focus-ring-rgb), var(--focus-ring-alpha-strong));
191
255
  }
192
256
 
193
- :where(.chayns-button--primary, .chayns-icon-button--primary):focus-visible {
257
+ :is(.chayns-button--primary, .chayns-icon-button--primary):focus-visible:not(:disabled) {
194
258
  box-shadow:
195
259
  0 0 0 var(--focus-ring-size) rgb(var(--focus-ring-rgb), var(--focus-ring-alpha-strong)),
196
260
  var(--shadow-btn);
197
261
  }
198
262
 
199
263
  @media (forced-colors: active) {
200
- :where(.chayns-button, .chayns-icon-button):focus-visible {
264
+ :is(.chayns-button, .chayns-icon-button):focus-visible:not(:disabled) {
201
265
  outline: var(--focus-ring-size) solid ButtonText;
202
266
  outline-offset: 1px;
203
267
  }
204
268
  }
205
269
 
206
270
  @media (prefers-reduced-motion: reduce) {
207
- :where(.chayns-button, .chayns-icon-button) {
271
+ :is(.chayns-button, .chayns-icon-button) {
208
272
  transition: none;
209
273
  }
210
274
 
275
+ :is(.chayns-button, .chayns-icon-button):is(:hover, :active):not(:disabled) {
276
+ transform: none;
277
+ }
278
+
211
279
  :where(.chayns-button--loading, .chayns-icon-button--loading) .chayns-button-icon {
212
280
  animation: none;
213
281
  }
package/dist/card.css CHANGED
@@ -1,3 +1,5 @@
1
+ @import url('./button.css');
2
+
1
3
  @layer chayns.components {
2
4
  .chayns-card {
3
5
  box-sizing: border-box;
@@ -6,6 +8,9 @@
6
8
  background: var(--surface);
7
9
  border: 1px solid var(--border);
8
10
  border-radius: 16px;
11
+ transition:
12
+ transform 0.22s cubic-bezier(0.22, 0.61, 0.36, 1),
13
+ box-shadow 0.22s ease;
9
14
  }
10
15
 
11
16
  .chayns-card__header {
@@ -26,6 +31,11 @@
26
31
  place-items: center;
27
32
  border-radius: 8px;
28
33
  background: var(--surface-alt);
34
+ color: var(--accent);
35
+ transition:
36
+ transform 0.28s cubic-bezier(0.22, 0.61, 0.36, 1),
37
+ background 0.22s ease,
38
+ color 0.22s ease;
29
39
  }
30
40
 
31
41
  .chayns-card__header-content {
@@ -35,6 +45,35 @@
35
45
  @media (hover: hover) {
36
46
  .chayns-card:hover {
37
47
  box-shadow: var(--shadow-hover);
48
+ transform: translateY(-4px);
49
+ }
50
+
51
+ .chayns-card:hover .chayns-card__header-icon {
52
+ transform: scale(1.08);
53
+ background: var(--accent);
54
+ color: var(--on-accent);
55
+ }
56
+
57
+ .chayns-card:hover
58
+ .chayns-card__header-icon
59
+ .chayns-button-icon__weight:not(.chayns-button-icon__weight--active) {
60
+ display: none;
61
+ }
62
+
63
+ .chayns-card:hover .chayns-card__header-icon .chayns-button-icon__weight--active {
64
+ display: inline-flex;
65
+ }
66
+ }
67
+
68
+ @media (prefers-reduced-motion: reduce) {
69
+ .chayns-card,
70
+ .chayns-card__header-icon {
71
+ transition: none;
72
+ }
73
+
74
+ .chayns-card:hover,
75
+ .chayns-card:hover .chayns-card__header-icon {
76
+ transform: none;
38
77
  }
39
78
  }
40
79
  }
package/dist/checkbox.css CHANGED
@@ -35,7 +35,7 @@
35
35
  transition: all 0.15s ease;
36
36
  }
37
37
 
38
- .chayns-checkbox__control > i {
38
+ .chayns-checkbox__control > :is(i, svg) {
39
39
  opacity: 0;
40
40
  transform: scale(0.4);
41
41
  transition:
@@ -48,7 +48,7 @@
48
48
  background: var(--accent);
49
49
  }
50
50
 
51
- .chayns-checkbox__input:checked + .chayns-checkbox__control > i {
51
+ .chayns-checkbox__input:checked + .chayns-checkbox__control > :is(i, svg) {
52
52
  opacity: 1;
53
53
  transform: scale(1);
54
54
  }
@@ -87,7 +87,7 @@
87
87
  }
88
88
 
89
89
  @media (prefers-reduced-motion: reduce) {
90
- .chayns-checkbox__control > i {
90
+ .chayns-checkbox__control > :is(i, svg) {
91
91
  transition: none;
92
92
  }
93
93
  }
@@ -1,3 +1,5 @@
1
+ @import url('./button.css');
2
+
1
3
  @layer chayns.components {
2
4
  .chayns-combo-box {
3
5
  position: relative;
@@ -72,10 +74,9 @@
72
74
  }
73
75
 
74
76
  .chayns-combo-box__popup {
75
- position: absolute;
76
- inset-block-start: calc(100% + var(--k4));
77
- inset-inline: 0;
77
+ position: fixed;
78
78
  z-index: var(--z-popover);
79
+ box-sizing: border-box;
79
80
  max-block-size: min(320px, 50vh);
80
81
  overflow: auto;
81
82
  padding: var(--k6);
@@ -83,6 +84,17 @@
83
84
  border-radius: 12px;
84
85
  background: var(--surface);
85
86
  box-shadow: var(--shadow-pop);
87
+ opacity: 1;
88
+ transform: translateY(0);
89
+ transform-origin: top center;
90
+ transition:
91
+ opacity 0.18s ease,
92
+ transform 0.18s ease;
93
+ }
94
+
95
+ .chayns-combo-box__popup[data-state='closed'] {
96
+ opacity: 0;
97
+ transform: translateY(calc(-1 * var(--k4)));
86
98
  }
87
99
 
88
100
  .chayns-combo-box__option {
@@ -147,7 +159,8 @@
147
159
 
148
160
  @media (prefers-reduced-motion: reduce) {
149
161
  .chayns-combo-box__trigger,
150
- .chayns-combo-box__chevron {
162
+ .chayns-combo-box__chevron,
163
+ .chayns-combo-box__popup {
151
164
  transition: none;
152
165
  }
153
166
  }
@@ -1,11 +1,10 @@
1
1
  import type { AccordionContentProps, AccordionHeadContentProps, AccordionHeadProps, AccordionPartProps, AccordionProps } from './Accordion.types.js';
2
- declare function HeadContent({ className, subtitle, title }: AccordionHeadContentProps): import("react").JSX.Element;
3
2
  declare const Accordion: import("react").ForwardRefExoticComponent<Omit<AccordionProps, "ref"> & import("react").RefAttributes<HTMLDivElement>> & {
4
3
  Content: import("react").ForwardRefExoticComponent<Omit<AccordionContentProps, "ref"> & import("react").RefAttributes<HTMLDivElement>>;
5
4
  Head: import("react").ForwardRefExoticComponent<Omit<AccordionHeadProps, "ref"> & import("react").RefAttributes<HTMLButtonElement>> & {
6
- Content: typeof HeadContent;
7
- Leading: (props: AccordionPartProps) => import("react").JSX.Element;
8
- Trailing: (props: AccordionPartProps) => import("react").JSX.Element;
5
+ Content: import("react").ForwardRefExoticComponent<Omit<AccordionHeadContentProps, "ref"> & import("react").RefAttributes<HTMLSpanElement>>;
6
+ Leading: import("react").ForwardRefExoticComponent<Omit<AccordionPartProps, "ref"> & import("react").RefAttributes<HTMLSpanElement>>;
7
+ Trailing: import("react").ForwardRefExoticComponent<Omit<AccordionPartProps, "ref"> & import("react").RefAttributes<HTMLSpanElement>>;
9
8
  };
10
9
  };
11
10
  export default Accordion;
@@ -1 +1 @@
1
- {"version":3,"file":"Accordion.d.ts","sourceRoot":"","sources":["../../../src/components/accordion/Accordion.tsx"],"names":[],"mappings":"AAiBA,OAAO,KAAK,EACV,qBAAqB,EACrB,yBAAyB,EACzB,kBAAkB,EAClB,kBAAkB,EAClB,cAAc,EACf,MAAM,sBAAsB,CAAC;AAgB9B,iBAAS,WAAW,CAAC,EAAE,SAAS,EAAE,QAAQ,EAAE,KAAK,EAAE,EAAE,yBAAyB,+BAS7E;AA8JD,QAAA,MAAM,SAAS;;;;yBA1Ka,kBAAkB;0BACjB,kBAAkB;;CAgL7C,CAAC;AAEH,eAAe,SAAS,CAAC"}
1
+ {"version":3,"file":"Accordion.d.ts","sourceRoot":"","sources":["../../../src/components/accordion/Accordion.tsx"],"names":[],"mappings":"AAkBA,OAAO,KAAK,EACV,qBAAqB,EACrB,yBAAyB,EACzB,kBAAkB,EAClB,kBAAkB,EAClB,cAAc,EACf,MAAM,sBAAsB,CAAC;AAuM9B,QAAA,MAAM,SAAS;;;;;;;CAOb,CAAC;AASH,eAAe,SAAS,CAAC"}
@@ -1,26 +1,29 @@
1
+ import ButtonIcon from "../button/button-icon/ButtonIcon.js";
1
2
  import { AccordionDepthContext, AccordionGroupContext, AccordionItemContext, useAccordionItemContext } from "./AccordionContext.js";
2
3
  import { Children, createElement, forwardRef, isValidElement, useContext, useId, useState } from "react";
3
4
  import { jsx, jsxs } from "react/jsx-runtime";
4
5
  //#region src/components/accordion/Accordion.tsx
5
- function Part({ children, className, name }) {
6
- useAccordionItemContext(name);
7
- return /* @__PURE__ */ jsx("span", {
8
- className: [`chayns-accordion__${name.toLowerCase()}`, className].filter(Boolean).join(" "),
9
- children
6
+ function createHeadPart(name) {
7
+ const HeadPart = forwardRef(function HeadPart({ children, className, ...spanProps }, ref) {
8
+ useAccordionItemContext(`Head.${name}`);
9
+ return /* @__PURE__ */ jsx("span", {
10
+ ...spanProps,
11
+ className: [`chayns-accordion__${name.toLowerCase()}`, className].filter(Boolean).join(" "),
12
+ ref,
13
+ children
14
+ });
10
15
  });
16
+ HeadPart.displayName = `Accordion.Head.${name}`;
17
+ return HeadPart;
11
18
  }
12
- var HeadLeading = (props) => /* @__PURE__ */ jsx(Part, {
13
- ...props,
14
- name: "leading"
15
- });
16
- var HeadTrailing = (props) => /* @__PURE__ */ jsx(Part, {
17
- ...props,
18
- name: "trailing"
19
- });
20
- function HeadContent({ className, subtitle, title }) {
19
+ var HeadLeading = createHeadPart("Leading");
20
+ var HeadTrailing = createHeadPart("Trailing");
21
+ var HeadContent = forwardRef(function HeadContent({ className, subtitle, title, ...spanProps }, ref) {
21
22
  useAccordionItemContext("Head.Content");
22
23
  return /* @__PURE__ */ jsxs("span", {
24
+ ...spanProps,
23
25
  className: ["chayns-accordion__head-content", className].filter(Boolean).join(" "),
26
+ ref,
24
27
  children: [/* @__PURE__ */ jsx("span", {
25
28
  className: "chayns-accordion__title",
26
29
  children: title
@@ -29,7 +32,7 @@ function HeadContent({ className, subtitle, title }) {
29
32
  children: subtitle
30
33
  }) : null]
31
34
  });
32
- }
35
+ });
33
36
  var AccordionHead = forwardRef(function AccordionHead({ children, className, onClick, ...buttonProps }, ref) {
34
37
  const { disabled, headerId, isOpen, onToggle, panelId } = useAccordionItemContext("Head");
35
38
  function handleClick(event) {
@@ -46,9 +49,10 @@ var AccordionHead = forwardRef(function AccordionHead({ children, className, onC
46
49
  onClick: handleClick,
47
50
  ref,
48
51
  type: "button",
49
- children: [/* @__PURE__ */ jsx("i", {
52
+ children: [/* @__PURE__ */ jsx("span", {
50
53
  "aria-hidden": "true",
51
- className: "chayns-accordion__chevron far fa-chevron-right"
54
+ className: "chayns-accordion__chevron",
55
+ children: /* @__PURE__ */ jsx(ButtonIcon, { icon: "fa-chevron-right" })
52
56
  }), children]
53
57
  });
54
58
  });
@@ -72,9 +76,12 @@ var AccordionContent = forwardRef(function AccordionContent({ children, classNam
72
76
  className: "chayns-accordion__inner",
73
77
  children: /* @__PURE__ */ jsx("div", {
74
78
  className: "chayns-accordion__content",
75
- children: /* @__PURE__ */ jsx(AccordionDepthContext.Provider, {
76
- value: depth + 1,
77
- children
79
+ children: /* @__PURE__ */ jsx(AccordionGroupContext.Provider, {
80
+ value: null,
81
+ children: /* @__PURE__ */ jsx(AccordionDepthContext.Provider, {
82
+ value: depth + 1,
83
+ children
84
+ })
78
85
  })
79
86
  })
80
87
  })
@@ -88,7 +95,7 @@ var AccordionRoot = forwardRef(function Accordion({ appearance = "default", chil
88
95
  const headerId = `${baseId}-header`;
89
96
  const panelId = `${baseId}-panel`;
90
97
  const [uncontrolledOpen, setUncontrolledOpen] = useState(defaultOpen);
91
- const isGrouped = group !== null && depth === 0;
98
+ const isGrouped = group !== null;
92
99
  const isOpen = isGrouped ? group.isOpen(baseId) : open ?? uncontrolledOpen;
93
100
  const wrapped = depth > 0;
94
101
  const isList = appearance === "list";
@@ -101,13 +108,14 @@ var AccordionRoot = forwardRef(function Accordion({ appearance = "default", chil
101
108
  if (open === void 0) setUncontrolledOpen(nextOpen);
102
109
  onOpenChange?.(nextOpen);
103
110
  }
104
- const variantClassName = isGrouped ? "chayns-accordion--grouped" : wrapped ? "chayns-accordion--wrapped" : "chayns-accordion--standalone";
105
111
  const directChildren = Children.toArray(children);
106
112
  const compoundHead = directChildren.find((child) => isValidElement(child) && child.type === AccordionHead);
107
113
  const hasCompoundLeading = isValidElement(compoundHead) && Children.toArray(compoundHead.props.children).some((child) => isValidElement(child) && child.type === HeadLeading);
108
114
  const rootClassName = [
109
115
  "chayns-accordion",
110
- variantClassName,
116
+ isGrouped ? "chayns-accordion--grouped" : null,
117
+ wrapped ? "chayns-accordion--wrapped" : null,
118
+ !isGrouped && !wrapped ? "chayns-accordion--standalone" : null,
111
119
  isOpen ? "chayns-accordion--open" : null,
112
120
  disabled ? "chayns-accordion--disabled" : null,
113
121
  leading || hasCompoundLeading ? "chayns-accordion--has-leading" : null,
@@ -146,6 +154,12 @@ var Accordion = Object.assign(AccordionRoot, {
146
154
  Trailing: HeadTrailing
147
155
  })
148
156
  });
157
+ Object.assign(HeadLeading, { displayName: "Accordion.Head.Leading" });
158
+ Object.assign(HeadTrailing, { displayName: "Accordion.Head.Trailing" });
159
+ Object.assign(HeadContent, { displayName: "Accordion.Head.Content" });
160
+ AccordionHead.displayName = "Accordion.Head";
161
+ AccordionContent.displayName = "Accordion.Content";
162
+ AccordionRoot.displayName = "Accordion";
149
163
  //#endregion
150
164
  export { Accordion as default };
151
165