@@ -27,10 +27,11 @@ import { icons } from '../../icons';
2727 * @property {TooltipProps } [props.tooltipProps] - Props to pass to the tooltip.
2828 * @property {boolean } [props.pending] - If `true`, the button is in a pending state, which can be used to indicate that an action is being processed.
2929 * @property {string } [props.pendingAriaLabel='Loading'] - ARIA label for the pending state, used for screen readers.
30+ * @property {boolean } [props.flat] - If `true`, the button will be render with a more flat look. (applies only to `default`, `selected`, and `danger` types)
3031 * @property {boolean } [props.hidden] - If `true`, the component is not rendered.
3132 *
3233 * @typedef {'small' | 'default' | 'large' } ButtonSize
33- * @typedef {'default' | 'selected' | 'selectedGhost' | 'ghost' | 'danger' | 'dangerGhost' } ButtonType
34+ * @typedef {'default' | 'selected' | 'selectedGhost' | 'ghost' | 'danger' | 'dangerGhost' | 'glass' | 'glassDark' | 'dangerGlass' | 'selectedGlass' } ButtonType
3435 *
3536 * @preserve
3637 */
@@ -56,6 +57,7 @@ export const Button = (props) => {
5657 icon,
5758 size = 'default' ,
5859 type = 'default' ,
60+ flat,
5961 pending,
6062 pendingAriaLabel = __ ( 'Loading' , 'eightshift-ui-components' ) ,
6163 disabled,
@@ -106,25 +108,74 @@ export const Button = (props) => {
106108 large : 'es:icon:size-6 es:rounded-xl' ,
107109 } ,
108110 type : {
109- default : 'es:bg-radial-[at_50%_125%] es:inset-ring es:inset-shadow-xs' ,
110- selected : 'es:bg-radial-[at_50%_125%] es:inset-ring es:inset-shadow-xs' ,
111- danger : 'es:bg-radial-[at_50%_125%] es:inset-ring es:inset-shadow-xs' ,
111+ default : [ 'es:bg-radial-[at_50%_125%]' , ! flat && ' es:inset-ring es:inset-shadow-xs'] ,
112+ selected : [ 'es:bg-radial-[at_50%_125%]' , ! flat && ' es:inset-ring es:inset-shadow-xs'] ,
113+ danger : [ 'es:bg-radial-[at_50%_125%]' , ! flat && ' es:inset-ring es:inset-shadow-xs'] ,
112114 ghost :
113- 'es:border-transparent es:text-secondary-700 es:enabled: hover:bg-secondary-100 es:enabled:active:bg-accent-50 es:enabled:pressed:bg-accent-50 es:enabled:active:text-accent-950 es:enabled:pressed:text-accent-950 es:disabled:border-transparent!' ,
115+ 'es:border-transparent es:text-secondary-700 es:hover:bg-secondary-100 es:enabled:active:bg-accent-50 es:enabled:pressed:bg-accent-50 es:enabled:active:text-accent-950 es:enabled:pressed:text-accent-950 es:disabled:border-transparent!' ,
114116 dangerGhost : [
115117 'es:border-transparent es:text-red-700' ,
116- 'es:enabled: hover:bg-red-500/5 es:enabled:active:bg-red-500/10 es:enabled:pressed:bg-red-500/10' ,
118+ 'es:hover:bg-red-500/5 es:enabled:active:bg-red-500/10 es:enabled:pressed:bg-red-500/10' ,
117119 'es:focus-visible:text-red-700' ,
118120 'es:focus-visible:ring-red-500/30 es:focus-visible:border-red-600 es:focus-visible:inset-ring-red-100' ,
119121 'es:disabled:border-transparent!' ,
120122 ] ,
121123 selectedGhost : [
122124 'es:border-transparent es:text-accent-600' ,
123- 'es:enabled: hover:bg-accent-500/5 es:enabled:active:bg-accent-500/10 es:enabled:pressed:bg-accent-500/10' ,
125+ 'es:hover:bg-accent-500/5 es:enabled:active:bg-accent-500/10 es:enabled:pressed:bg-accent-500/10' ,
124126 'es:focus-visible:text-accent-700' ,
125127 'es:focus-visible:ring-accent-500/30 es:focus-visible:border-accent-500 es:focus-visible:inset-ring-accent-100' ,
126128 'es:disabled:border-transparent!' ,
127129 ] ,
130+ glass : [
131+ 'es:backdrop-blur-md' ,
132+ 'es:backdrop-saturate-120 es:hover:backdrop-saturate-130' ,
133+ 'es:bg-radial-[at_50%_75%] es:from-white/20 es:to-white/15' ,
134+ 'es:hover:from-white/30 es:hover:to-white/25' ,
135+ 'es:focus-visible:from-white/90 es:focus-visible:to-white/85' ,
136+ 'es:border-none es:text-white es:focus-visible:text-black' ,
137+ 'es:inset-shadow-sm es:inset-shadow-white/5 es:hover:inset-shadow-white/10' ,
138+ 'es:shadow-xs es:shadow-black/10' ,
139+ 'es:inset-ring es:inset-ring-white/2' ,
140+ 'es:text-shadow-2xs es:text-shadow-black/30' ,
141+ ] ,
142+ glassDark : [
143+ 'es:backdrop-blur-md' ,
144+ 'es:backdrop-saturate-115 es:hover:backdrop-saturate-125' ,
145+ 'es:bg-radial-[at_50%_75%] es:from-black/40 es:to-black/35' ,
146+ 'es:hover:from-black/50 es:hover:to-black/45' ,
147+ 'es:focus-visible:from-black/95 es:focus-visible:to-black/90' ,
148+ 'es:border-none es:text-white' ,
149+ 'es:inset-shadow-sm es:inset-shadow-white/5 es:hover:inset-shadow-white/10' ,
150+ 'es:shadow-xs es:shadow-black/10' ,
151+ 'es:inset-ring es:inset-ring-black/10' ,
152+ 'es:text-shadow-2xs es:text-shadow-black/30 es:focus-visible:text-shadow-black/0' ,
153+ ] ,
154+ dangerGlass : [
155+ 'es:backdrop-blur-md' ,
156+ 'es:backdrop-saturate-115 es:hover:backdrop-saturate-125' ,
157+ 'es:bg-radial-[at_50%_75%] es:from-red-700/50 es:to-red-700/45' ,
158+ 'es:hover:from-red-700/60 es:hover:to-red-700/55' ,
159+ 'es:enabled:focus-visible:from-red-700/95 es:enabled:focus-visible:to-red-700/90' ,
160+ 'es:border-none es:text-white' ,
161+ 'es:inset-shadow-sm es:inset-shadow-white/5 es:hover:inset-shadow-white/10' ,
162+ 'es:shadow-xs es:shadow-red-700/10' ,
163+ 'es:inset-ring es:inset-ring-red-700/10' ,
164+ 'es:text-shadow-2xs es:text-shadow-black/30' ,
165+ 'es:focus-visible:ring-red-500/30' ,
166+ ] ,
167+ selectedGlass : [
168+ 'es:backdrop-blur-md' ,
169+ 'es:backdrop-saturate-120 es:hover:backdrop-saturate-130' ,
170+ 'es:bg-radial-[at_50%_75%] es:from-accent-400/35 es:to-accent-400/30' ,
171+ 'es:hover:from-accent-400/45 es:hover:to-accent-400/40' ,
172+ 'es:focus-visible:from-accent-600/95 es:focus-visible:to-accent-600/90' ,
173+ 'es:border-none es:text-white' ,
174+ 'es:inset-shadow-sm es:inset-shadow-white/5 es:hover:inset-shadow-white/10' ,
175+ 'es:shadow-xs es:shadow-black/10' ,
176+ 'es:inset-ring es:inset-ring-white/2' ,
177+ 'es:text-shadow-2xs es:text-shadow-black/30' ,
178+ ] ,
128179 } ,
129180 } ,
130181 compoundVariants : [
@@ -136,10 +187,11 @@ export const Button = (props) => {
136187 'es:text-black' ,
137188 'es:from-white es:to-secondary-50' ,
138189 'es:border-secondary-300' ,
139- 'es:inset-ring-secondary-100' ,
140- 'es:inset-shadow-secondary-100/50' ,
141- 'es:shadow-sm' ,
142- 'es:enabled:hover:shadow-md es:enabled:active:shadow-sm es:enabled:pressed:shadow-sm es:hover:inset-shadow-secondary-100 es:hover:to-secondary-100 es:hover:inset-ring-secondary-100' ,
190+ ! flat && 'es:inset-ring-secondary-100' ,
191+ ! flat && 'es:inset-shadow-secondary-100/50 es:hover:inset-shadow-secondary-100' ,
192+ ! flat && 'es:shadow-sm' ,
193+ ! flat && 'es:hover:shadow-md es:enabled:active:shadow-sm es:enabled:pressed:shadow-sm' ,
194+ flat ? 'es:hover:from-secondary-100 es:hover:to-secondary-100 es:hover:inset-ring-secondary-100' : 'es:hover:to-secondary-100 es:hover:inset-ring-secondary-100' ,
143195 'es:hover:text-accent-950' ,
144196 'es:focus-visible:text-accent-950' ,
145197 ] ,
@@ -149,29 +201,30 @@ export const Button = (props) => {
149201 disabled : false ,
150202 class : [
151203 'es:text-white' ,
152- 'es:from-accent-500 es:to-accent-600' ,
204+ flat ? 'es:from-accent-500 es:to-accent-600 es:hover:from-accent-600 es:hover:to-accent-700' : 'es:from-accent-500 es:to-accent-600' ,
153205 'es:border-accent-700' ,
154- 'es:inset-ring es:inset-ring-accent-600' ,
155- 'es:inset-shadow-xs es:inset-shadow-accent-400/75' ,
206+ ! flat && 'es:inset-ring es:inset-ring-accent-600' ,
207+ ! flat && 'es:inset-shadow-xs es:inset-shadow-accent-400/75' ,
156208 'es:focus-visible:border-accent-700' ,
157209 'es:focus-visible:inset-ring es:focus-visible:inset-ring-accent-600' ,
158210 'es:focus-visible:inset-shadow-xs es:focus-visible:inset-shadow-accent-400' ,
159- 'es:shadow es:shadow-accent-600/30 es:enabled:hover:shadow-md es:enabled:active:shadow-sm es:enabled:pressed:shadow-sm' ,
211+ ! flat && 'es:shadow es:shadow-accent-600/30 es:hover:shadow-md es:enabled:active:shadow-sm es:enabled:pressed:shadow-sm' ,
212+ 'es:text-shadow-2xs es:text-shadow-black/20' ,
160213 ] ,
161214 } ,
162215 {
163216 type : 'danger' ,
164217 disabled : false ,
165218 class : [
166219 'es:text-red-700' ,
167- 'es:from-red-50/75 es:to-white' ,
220+ flat ? 'es:from-red-600/5 es:to-red-600/2 es:hover:from-red-600/10 es:hover:to-red-600/5' : 'es:from-red-50/75 es:to-white' ,
168221 'es:border-red-700/50' ,
169- 'es:inset-ring-red-100' ,
170- 'es:inset-shadow-red-50' ,
171- 'es:hover:inset-shadow-red-100 es:hover:inset-ring-red-100 es:hover:text-red-800 es:hover:border-red-600' ,
222+ ! flat && 'es:inset-ring-red-100' ,
223+ ! flat && 'es:inset-shadow-red-50' ,
224+ ! flat && 'es:hover:inset-shadow-red-100 es:hover:inset-ring-red-100 es:hover:text-red-800 es:hover:border-red-600' ,
172225 'es:focus-visible:text-red-900' ,
173226 'es:focus-visible:ring-red-500/30 es:focus-visible:border-red-600 es:focus-visible:inset-ring-red-100' ,
174- 'es:shadow es:shadow-red-700/20 es:enabled :hover:shadow-md es:enabled:active:shadow-sm es:enabled:pressed:shadow-sm' ,
227+ ! flat && 'es:shadow es:shadow-red-700/20 es:hover:shadow-md es:enabled:active:shadow-sm es:enabled:pressed:shadow-sm' ,
175228 ] ,
176229 } ,
177230 {
0 commit comments