@spark-web/button 2.0.0-rc.9 → 5.0.0-rc.25
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/CHANGELOG.md +271 -0
- package/dist/declarations/src/button-link.d.ts +1 -2
- package/dist/declarations/src/button.d.ts +0 -4
- package/dist/declarations/src/types.d.ts +9 -1
- package/dist/declarations/src/use-button-styles.d.ts +960 -21
- package/dist/declarations/src/utils.d.ts +10 -10
- package/dist/spark-web-button.cjs.dev.js +40 -9
- package/dist/spark-web-button.cjs.prod.js +40 -9
- package/dist/spark-web-button.esm.js +40 -9
- package/package.json +9 -9
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
import type { BoxProps } from '@spark-web/box';
|
|
2
2
|
import type { ForegroundTone } from '@spark-web/text';
|
|
3
|
-
import type {
|
|
3
|
+
import type { SparkTheme } from '@spark-web/theme';
|
|
4
4
|
import type { ButtonProminence, ButtonTone } from "./types.js";
|
|
5
5
|
declare type BaseButtonStyles = {
|
|
6
6
|
background: BoxProps['background'];
|
|
@@ -9,19 +9,19 @@ declare type BaseButtonStyles = {
|
|
|
9
9
|
textTone?: ForegroundTone;
|
|
10
10
|
};
|
|
11
11
|
declare type HoverButtonStyles = {
|
|
12
|
-
backgroundHover: keyof
|
|
13
|
-
borderHover?: keyof
|
|
14
|
-
textToneHover?: keyof
|
|
12
|
+
backgroundHover: keyof SparkTheme['backgroundInteractions'];
|
|
13
|
+
borderHover?: keyof SparkTheme['border']['color'];
|
|
14
|
+
textToneHover?: keyof SparkTheme['color']['foreground'];
|
|
15
15
|
};
|
|
16
16
|
declare type ActiveButtonStyles = {
|
|
17
|
-
backgroundActive: keyof
|
|
18
|
-
borderActive?: keyof
|
|
19
|
-
textToneActive?: keyof
|
|
17
|
+
backgroundActive: keyof SparkTheme['backgroundInteractions'];
|
|
18
|
+
borderActive?: keyof SparkTheme['border']['color'];
|
|
19
|
+
textToneActive?: keyof SparkTheme['color']['foreground'];
|
|
20
20
|
};
|
|
21
21
|
declare type DisabledButtonStyles = {
|
|
22
|
-
backgroundDisabled: keyof
|
|
23
|
-
borderDisabled?: keyof
|
|
24
|
-
textToneDisabled: keyof
|
|
22
|
+
backgroundDisabled: keyof SparkTheme['color']['background'];
|
|
23
|
+
borderDisabled?: keyof SparkTheme['border']['color'];
|
|
24
|
+
textToneDisabled: keyof SparkTheme['color']['foreground'];
|
|
25
25
|
};
|
|
26
26
|
declare type ButtonStyles = BaseButtonStyles & HoverButtonStyles & ActiveButtonStyles & DisabledButtonStyles;
|
|
27
27
|
declare type Variants = Record<ButtonProminence, Record<ButtonTone, ButtonStyles | undefined>>;
|
|
@@ -12,8 +12,8 @@ var _slicedToArray = require('@babel/runtime/helpers/slicedToArray');
|
|
|
12
12
|
var react$1 = require('@emotion/react');
|
|
13
13
|
var a11y = require('@spark-web/a11y');
|
|
14
14
|
var spinner = require('@spark-web/spinner');
|
|
15
|
-
var text = require('@spark-web/text');
|
|
16
15
|
var theme = require('@spark-web/theme');
|
|
16
|
+
var text = require('@spark-web/text');
|
|
17
17
|
var link = require('@spark-web/link');
|
|
18
18
|
var ts = require('@spark-web/utils/ts');
|
|
19
19
|
|
|
@@ -293,8 +293,10 @@ function HiddenWhenLoading(_ref2) {
|
|
|
293
293
|
* passed to Emotion's `css` function.
|
|
294
294
|
*/
|
|
295
295
|
function useButtonStyles(_ref) {
|
|
296
|
-
var
|
|
296
|
+
var css = _ref.css,
|
|
297
|
+
iconOnly = _ref.iconOnly,
|
|
297
298
|
prominence = _ref.prominence,
|
|
299
|
+
rounded = _ref.rounded,
|
|
298
300
|
size = _ref.size,
|
|
299
301
|
tone = _ref.tone;
|
|
300
302
|
var theme$1 = theme.useTheme();
|
|
@@ -311,12 +313,12 @@ function useButtonStyles(_ref) {
|
|
|
311
313
|
transitionTimingFunction: theme$1.animation.standard.easing,
|
|
312
314
|
transitionDuration: "".concat(theme$1.animation.standard.duration, "ms")
|
|
313
315
|
};
|
|
314
|
-
return [{
|
|
316
|
+
return [_objectSpread({
|
|
315
317
|
alignItems: 'center',
|
|
316
318
|
background: variant === null || variant === void 0 ? void 0 : variant.background,
|
|
317
319
|
border: variant === null || variant === void 0 ? void 0 : variant.border,
|
|
318
320
|
borderWidth: variant === null || variant === void 0 ? void 0 : variant.borderWidth,
|
|
319
|
-
borderRadius: isLarge ? 'medium' : 'small',
|
|
321
|
+
borderRadius: rounded ? 'full' : isLarge ? 'medium' : 'small',
|
|
320
322
|
cursor: 'pointer',
|
|
321
323
|
display: 'inline-flex',
|
|
322
324
|
gap: 'small',
|
|
@@ -325,7 +327,7 @@ function useButtonStyles(_ref) {
|
|
|
325
327
|
paddingX: iconOnly ? undefined : mapTokens.spacing[size],
|
|
326
328
|
position: 'relative',
|
|
327
329
|
width: iconOnly ? mapTokens.size[size] : undefined
|
|
328
|
-
}, _objectSpread(_objectSpread({}, transitionColors), {}, {
|
|
330
|
+
}, css), _objectSpread(_objectSpread({}, transitionColors), {}, {
|
|
329
331
|
// Styles for buttons that aren't disabled.
|
|
330
332
|
// Using the :not() pseudo-class so we don't have to undo the styles when
|
|
331
333
|
// the button is disabled.
|
|
@@ -364,12 +366,12 @@ function useButtonStyles(_ref) {
|
|
|
364
366
|
})];
|
|
365
367
|
}
|
|
366
368
|
|
|
367
|
-
var _excluded$1 = ["aria-controls", "aria-describedby", "aria-expanded", "data", "disabled", "id", "loading", "onClick", "prominence", "size", "tone", "type"];
|
|
369
|
+
var _excluded$1 = ["aria-controls", "aria-describedby", "aria-expanded", "data", "disabled", "id", "loading", "onClick", "css", "rounded", "prominence", "size", "tone", "type"];
|
|
368
370
|
/**
|
|
369
371
|
* Buttons are used to initialize an action, their label should express what
|
|
370
372
|
* action will occur when the user interacts with it.
|
|
371
373
|
*/
|
|
372
|
-
var
|
|
374
|
+
var UnthemedButton = /*#__PURE__*/react.forwardRef(function (_ref, forwardedRef) {
|
|
373
375
|
var ariaControls = _ref['aria-controls'],
|
|
374
376
|
ariaDescribedBy = _ref['aria-describedby'],
|
|
375
377
|
ariaExpanded = _ref['aria-expanded'],
|
|
@@ -379,6 +381,9 @@ var Button = /*#__PURE__*/react.forwardRef(function (_ref, forwardedRef) {
|
|
|
379
381
|
_ref$loading = _ref.loading,
|
|
380
382
|
loading = _ref$loading === void 0 ? false : _ref$loading,
|
|
381
383
|
onClick = _ref.onClick,
|
|
384
|
+
customCss = _ref.css,
|
|
385
|
+
_ref$rounded = _ref.rounded,
|
|
386
|
+
rounded = _ref$rounded === void 0 ? false : _ref$rounded,
|
|
382
387
|
_ref$prominence = _ref.prominence,
|
|
383
388
|
prominence = _ref$prominence === void 0 ? 'high' : _ref$prominence,
|
|
384
389
|
_ref$size = _ref.size,
|
|
@@ -389,7 +394,9 @@ var Button = /*#__PURE__*/react.forwardRef(function (_ref, forwardedRef) {
|
|
|
389
394
|
props = _objectWithoutProperties(_ref, _excluded$1);
|
|
390
395
|
var iconOnly = Boolean(props.label);
|
|
391
396
|
var _useButtonStyles = useButtonStyles({
|
|
397
|
+
css: customCss,
|
|
392
398
|
iconOnly: iconOnly,
|
|
399
|
+
rounded: rounded,
|
|
393
400
|
size: size,
|
|
394
401
|
tone: tone,
|
|
395
402
|
prominence: prominence
|
|
@@ -420,6 +427,16 @@ var Button = /*#__PURE__*/react.forwardRef(function (_ref, forwardedRef) {
|
|
|
420
427
|
})]
|
|
421
428
|
}));
|
|
422
429
|
});
|
|
430
|
+
UnthemedButton.displayName = 'UnthemedButton';
|
|
431
|
+
var Button = /*#__PURE__*/react.forwardRef(function (props, ref) {
|
|
432
|
+
var theme$1 = props.theme;
|
|
433
|
+
return jsxRuntime.jsx(theme.ThemeProvider, {
|
|
434
|
+
theme: theme$1,
|
|
435
|
+
children: jsxRuntime.jsx(UnthemedButton, _objectSpread(_objectSpread({}, props), {}, {
|
|
436
|
+
ref: ref
|
|
437
|
+
}))
|
|
438
|
+
});
|
|
439
|
+
});
|
|
423
440
|
Button.displayName = 'Button';
|
|
424
441
|
function Loading(_ref2) {
|
|
425
442
|
var tone = _ref2.tone;
|
|
@@ -442,15 +459,18 @@ function Loading(_ref2) {
|
|
|
442
459
|
});
|
|
443
460
|
}
|
|
444
461
|
|
|
445
|
-
var _excluded = ["data", "href", "target", "id", "prominence", "size", "tone"];
|
|
462
|
+
var _excluded = ["data", "href", "target", "id", "css", "prominence", "rounded", "size", "tone"];
|
|
446
463
|
/** The appearance of a `Button`, with the semantics of a link. */
|
|
447
|
-
var
|
|
464
|
+
var UnthemedButtonLink = ts.forwardRefWithAs(function (_ref, forwardedRef) {
|
|
448
465
|
var data = _ref.data,
|
|
449
466
|
href = _ref.href,
|
|
450
467
|
target = _ref.target,
|
|
451
468
|
id = _ref.id,
|
|
469
|
+
customCss = _ref.css,
|
|
452
470
|
_ref$prominence = _ref.prominence,
|
|
453
471
|
prominence = _ref$prominence === void 0 ? 'high' : _ref$prominence,
|
|
472
|
+
_ref$rounded = _ref.rounded,
|
|
473
|
+
rounded = _ref$rounded === void 0 ? false : _ref$rounded,
|
|
454
474
|
_ref$size = _ref.size,
|
|
455
475
|
size = _ref$size === void 0 ? 'medium' : _ref$size,
|
|
456
476
|
_ref$tone = _ref.tone,
|
|
@@ -459,8 +479,10 @@ var ButtonLink = ts.forwardRefWithAs(function (_ref, forwardedRef) {
|
|
|
459
479
|
var LinkComponent = link.useLinkComponent(forwardedRef);
|
|
460
480
|
var iconOnly = Boolean(consumerProps.label);
|
|
461
481
|
var _useButtonStyles = useButtonStyles({
|
|
482
|
+
css: customCss,
|
|
462
483
|
iconOnly: iconOnly,
|
|
463
484
|
prominence: prominence,
|
|
485
|
+
rounded: rounded,
|
|
464
486
|
size: size,
|
|
465
487
|
tone: tone
|
|
466
488
|
}),
|
|
@@ -485,6 +507,15 @@ var ButtonLink = ts.forwardRefWithAs(function (_ref, forwardedRef) {
|
|
|
485
507
|
}))
|
|
486
508
|
}));
|
|
487
509
|
});
|
|
510
|
+
var ButtonLink = ts.forwardRefWithAs(function (props, ref) {
|
|
511
|
+
var theme$1 = props.theme;
|
|
512
|
+
return jsxRuntime.jsx(theme.ThemeProvider, {
|
|
513
|
+
theme: theme$1,
|
|
514
|
+
children: jsxRuntime.jsx(UnthemedButtonLink, _objectSpread(_objectSpread({}, props), {}, {
|
|
515
|
+
forwardedRef: ref
|
|
516
|
+
}))
|
|
517
|
+
});
|
|
518
|
+
});
|
|
488
519
|
|
|
489
520
|
exports.BaseButton = BaseButton;
|
|
490
521
|
exports.Button = Button;
|
|
@@ -12,8 +12,8 @@ var _slicedToArray = require('@babel/runtime/helpers/slicedToArray');
|
|
|
12
12
|
var react$1 = require('@emotion/react');
|
|
13
13
|
var a11y = require('@spark-web/a11y');
|
|
14
14
|
var spinner = require('@spark-web/spinner');
|
|
15
|
-
var text = require('@spark-web/text');
|
|
16
15
|
var theme = require('@spark-web/theme');
|
|
16
|
+
var text = require('@spark-web/text');
|
|
17
17
|
var link = require('@spark-web/link');
|
|
18
18
|
var ts = require('@spark-web/utils/ts');
|
|
19
19
|
|
|
@@ -293,8 +293,10 @@ function HiddenWhenLoading(_ref2) {
|
|
|
293
293
|
* passed to Emotion's `css` function.
|
|
294
294
|
*/
|
|
295
295
|
function useButtonStyles(_ref) {
|
|
296
|
-
var
|
|
296
|
+
var css = _ref.css,
|
|
297
|
+
iconOnly = _ref.iconOnly,
|
|
297
298
|
prominence = _ref.prominence,
|
|
299
|
+
rounded = _ref.rounded,
|
|
298
300
|
size = _ref.size,
|
|
299
301
|
tone = _ref.tone;
|
|
300
302
|
var theme$1 = theme.useTheme();
|
|
@@ -311,12 +313,12 @@ function useButtonStyles(_ref) {
|
|
|
311
313
|
transitionTimingFunction: theme$1.animation.standard.easing,
|
|
312
314
|
transitionDuration: "".concat(theme$1.animation.standard.duration, "ms")
|
|
313
315
|
};
|
|
314
|
-
return [{
|
|
316
|
+
return [_objectSpread({
|
|
315
317
|
alignItems: 'center',
|
|
316
318
|
background: variant === null || variant === void 0 ? void 0 : variant.background,
|
|
317
319
|
border: variant === null || variant === void 0 ? void 0 : variant.border,
|
|
318
320
|
borderWidth: variant === null || variant === void 0 ? void 0 : variant.borderWidth,
|
|
319
|
-
borderRadius: isLarge ? 'medium' : 'small',
|
|
321
|
+
borderRadius: rounded ? 'full' : isLarge ? 'medium' : 'small',
|
|
320
322
|
cursor: 'pointer',
|
|
321
323
|
display: 'inline-flex',
|
|
322
324
|
gap: 'small',
|
|
@@ -325,7 +327,7 @@ function useButtonStyles(_ref) {
|
|
|
325
327
|
paddingX: iconOnly ? undefined : mapTokens.spacing[size],
|
|
326
328
|
position: 'relative',
|
|
327
329
|
width: iconOnly ? mapTokens.size[size] : undefined
|
|
328
|
-
}, _objectSpread(_objectSpread({}, transitionColors), {}, {
|
|
330
|
+
}, css), _objectSpread(_objectSpread({}, transitionColors), {}, {
|
|
329
331
|
// Styles for buttons that aren't disabled.
|
|
330
332
|
// Using the :not() pseudo-class so we don't have to undo the styles when
|
|
331
333
|
// the button is disabled.
|
|
@@ -364,12 +366,12 @@ function useButtonStyles(_ref) {
|
|
|
364
366
|
})];
|
|
365
367
|
}
|
|
366
368
|
|
|
367
|
-
var _excluded$1 = ["aria-controls", "aria-describedby", "aria-expanded", "data", "disabled", "id", "loading", "onClick", "prominence", "size", "tone", "type"];
|
|
369
|
+
var _excluded$1 = ["aria-controls", "aria-describedby", "aria-expanded", "data", "disabled", "id", "loading", "onClick", "css", "rounded", "prominence", "size", "tone", "type"];
|
|
368
370
|
/**
|
|
369
371
|
* Buttons are used to initialize an action, their label should express what
|
|
370
372
|
* action will occur when the user interacts with it.
|
|
371
373
|
*/
|
|
372
|
-
var
|
|
374
|
+
var UnthemedButton = /*#__PURE__*/react.forwardRef(function (_ref, forwardedRef) {
|
|
373
375
|
var ariaControls = _ref['aria-controls'],
|
|
374
376
|
ariaDescribedBy = _ref['aria-describedby'],
|
|
375
377
|
ariaExpanded = _ref['aria-expanded'],
|
|
@@ -379,6 +381,9 @@ var Button = /*#__PURE__*/react.forwardRef(function (_ref, forwardedRef) {
|
|
|
379
381
|
_ref$loading = _ref.loading,
|
|
380
382
|
loading = _ref$loading === void 0 ? false : _ref$loading,
|
|
381
383
|
onClick = _ref.onClick,
|
|
384
|
+
customCss = _ref.css,
|
|
385
|
+
_ref$rounded = _ref.rounded,
|
|
386
|
+
rounded = _ref$rounded === void 0 ? false : _ref$rounded,
|
|
382
387
|
_ref$prominence = _ref.prominence,
|
|
383
388
|
prominence = _ref$prominence === void 0 ? 'high' : _ref$prominence,
|
|
384
389
|
_ref$size = _ref.size,
|
|
@@ -389,7 +394,9 @@ var Button = /*#__PURE__*/react.forwardRef(function (_ref, forwardedRef) {
|
|
|
389
394
|
props = _objectWithoutProperties(_ref, _excluded$1);
|
|
390
395
|
var iconOnly = Boolean(props.label);
|
|
391
396
|
var _useButtonStyles = useButtonStyles({
|
|
397
|
+
css: customCss,
|
|
392
398
|
iconOnly: iconOnly,
|
|
399
|
+
rounded: rounded,
|
|
393
400
|
size: size,
|
|
394
401
|
tone: tone,
|
|
395
402
|
prominence: prominence
|
|
@@ -420,6 +427,16 @@ var Button = /*#__PURE__*/react.forwardRef(function (_ref, forwardedRef) {
|
|
|
420
427
|
})]
|
|
421
428
|
}));
|
|
422
429
|
});
|
|
430
|
+
UnthemedButton.displayName = 'UnthemedButton';
|
|
431
|
+
var Button = /*#__PURE__*/react.forwardRef(function (props, ref) {
|
|
432
|
+
var theme$1 = props.theme;
|
|
433
|
+
return jsxRuntime.jsx(theme.ThemeProvider, {
|
|
434
|
+
theme: theme$1,
|
|
435
|
+
children: jsxRuntime.jsx(UnthemedButton, _objectSpread(_objectSpread({}, props), {}, {
|
|
436
|
+
ref: ref
|
|
437
|
+
}))
|
|
438
|
+
});
|
|
439
|
+
});
|
|
423
440
|
Button.displayName = 'Button';
|
|
424
441
|
function Loading(_ref2) {
|
|
425
442
|
var tone = _ref2.tone;
|
|
@@ -442,15 +459,18 @@ function Loading(_ref2) {
|
|
|
442
459
|
});
|
|
443
460
|
}
|
|
444
461
|
|
|
445
|
-
var _excluded = ["data", "href", "target", "id", "prominence", "size", "tone"];
|
|
462
|
+
var _excluded = ["data", "href", "target", "id", "css", "prominence", "rounded", "size", "tone"];
|
|
446
463
|
/** The appearance of a `Button`, with the semantics of a link. */
|
|
447
|
-
var
|
|
464
|
+
var UnthemedButtonLink = ts.forwardRefWithAs(function (_ref, forwardedRef) {
|
|
448
465
|
var data = _ref.data,
|
|
449
466
|
href = _ref.href,
|
|
450
467
|
target = _ref.target,
|
|
451
468
|
id = _ref.id,
|
|
469
|
+
customCss = _ref.css,
|
|
452
470
|
_ref$prominence = _ref.prominence,
|
|
453
471
|
prominence = _ref$prominence === void 0 ? 'high' : _ref$prominence,
|
|
472
|
+
_ref$rounded = _ref.rounded,
|
|
473
|
+
rounded = _ref$rounded === void 0 ? false : _ref$rounded,
|
|
454
474
|
_ref$size = _ref.size,
|
|
455
475
|
size = _ref$size === void 0 ? 'medium' : _ref$size,
|
|
456
476
|
_ref$tone = _ref.tone,
|
|
@@ -459,8 +479,10 @@ var ButtonLink = ts.forwardRefWithAs(function (_ref, forwardedRef) {
|
|
|
459
479
|
var LinkComponent = link.useLinkComponent(forwardedRef);
|
|
460
480
|
var iconOnly = Boolean(consumerProps.label);
|
|
461
481
|
var _useButtonStyles = useButtonStyles({
|
|
482
|
+
css: customCss,
|
|
462
483
|
iconOnly: iconOnly,
|
|
463
484
|
prominence: prominence,
|
|
485
|
+
rounded: rounded,
|
|
464
486
|
size: size,
|
|
465
487
|
tone: tone
|
|
466
488
|
}),
|
|
@@ -485,6 +507,15 @@ var ButtonLink = ts.forwardRefWithAs(function (_ref, forwardedRef) {
|
|
|
485
507
|
}))
|
|
486
508
|
}));
|
|
487
509
|
});
|
|
510
|
+
var ButtonLink = ts.forwardRefWithAs(function (props, ref) {
|
|
511
|
+
var theme$1 = props.theme;
|
|
512
|
+
return jsxRuntime.jsx(theme.ThemeProvider, {
|
|
513
|
+
theme: theme$1,
|
|
514
|
+
children: jsxRuntime.jsx(UnthemedButtonLink, _objectSpread(_objectSpread({}, props), {}, {
|
|
515
|
+
forwardedRef: ref
|
|
516
|
+
}))
|
|
517
|
+
});
|
|
518
|
+
});
|
|
488
519
|
|
|
489
520
|
exports.BaseButton = BaseButton;
|
|
490
521
|
exports.Button = Button;
|
|
@@ -8,8 +8,8 @@ import _slicedToArray from '@babel/runtime/helpers/esm/slicedToArray';
|
|
|
8
8
|
import { css } from '@emotion/react';
|
|
9
9
|
import { useFocusRing, VisuallyHidden } from '@spark-web/a11y';
|
|
10
10
|
import { Spinner } from '@spark-web/spinner';
|
|
11
|
+
import { useTheme, ThemeProvider } from '@spark-web/theme';
|
|
11
12
|
import { Text } from '@spark-web/text';
|
|
12
|
-
import { useTheme } from '@spark-web/theme';
|
|
13
13
|
import { useLinkComponent } from '@spark-web/link';
|
|
14
14
|
import { forwardRefWithAs } from '@spark-web/utils/ts';
|
|
15
15
|
|
|
@@ -289,8 +289,10 @@ function HiddenWhenLoading(_ref2) {
|
|
|
289
289
|
* passed to Emotion's `css` function.
|
|
290
290
|
*/
|
|
291
291
|
function useButtonStyles(_ref) {
|
|
292
|
-
var
|
|
292
|
+
var css = _ref.css,
|
|
293
|
+
iconOnly = _ref.iconOnly,
|
|
293
294
|
prominence = _ref.prominence,
|
|
295
|
+
rounded = _ref.rounded,
|
|
294
296
|
size = _ref.size,
|
|
295
297
|
tone = _ref.tone;
|
|
296
298
|
var theme = useTheme();
|
|
@@ -307,12 +309,12 @@ function useButtonStyles(_ref) {
|
|
|
307
309
|
transitionTimingFunction: theme.animation.standard.easing,
|
|
308
310
|
transitionDuration: "".concat(theme.animation.standard.duration, "ms")
|
|
309
311
|
};
|
|
310
|
-
return [{
|
|
312
|
+
return [_objectSpread({
|
|
311
313
|
alignItems: 'center',
|
|
312
314
|
background: variant === null || variant === void 0 ? void 0 : variant.background,
|
|
313
315
|
border: variant === null || variant === void 0 ? void 0 : variant.border,
|
|
314
316
|
borderWidth: variant === null || variant === void 0 ? void 0 : variant.borderWidth,
|
|
315
|
-
borderRadius: isLarge ? 'medium' : 'small',
|
|
317
|
+
borderRadius: rounded ? 'full' : isLarge ? 'medium' : 'small',
|
|
316
318
|
cursor: 'pointer',
|
|
317
319
|
display: 'inline-flex',
|
|
318
320
|
gap: 'small',
|
|
@@ -321,7 +323,7 @@ function useButtonStyles(_ref) {
|
|
|
321
323
|
paddingX: iconOnly ? undefined : mapTokens.spacing[size],
|
|
322
324
|
position: 'relative',
|
|
323
325
|
width: iconOnly ? mapTokens.size[size] : undefined
|
|
324
|
-
}, _objectSpread(_objectSpread({}, transitionColors), {}, {
|
|
326
|
+
}, css), _objectSpread(_objectSpread({}, transitionColors), {}, {
|
|
325
327
|
// Styles for buttons that aren't disabled.
|
|
326
328
|
// Using the :not() pseudo-class so we don't have to undo the styles when
|
|
327
329
|
// the button is disabled.
|
|
@@ -360,12 +362,12 @@ function useButtonStyles(_ref) {
|
|
|
360
362
|
})];
|
|
361
363
|
}
|
|
362
364
|
|
|
363
|
-
var _excluded$1 = ["aria-controls", "aria-describedby", "aria-expanded", "data", "disabled", "id", "loading", "onClick", "prominence", "size", "tone", "type"];
|
|
365
|
+
var _excluded$1 = ["aria-controls", "aria-describedby", "aria-expanded", "data", "disabled", "id", "loading", "onClick", "css", "rounded", "prominence", "size", "tone", "type"];
|
|
364
366
|
/**
|
|
365
367
|
* Buttons are used to initialize an action, their label should express what
|
|
366
368
|
* action will occur when the user interacts with it.
|
|
367
369
|
*/
|
|
368
|
-
var
|
|
370
|
+
var UnthemedButton = /*#__PURE__*/forwardRef(function (_ref, forwardedRef) {
|
|
369
371
|
var ariaControls = _ref['aria-controls'],
|
|
370
372
|
ariaDescribedBy = _ref['aria-describedby'],
|
|
371
373
|
ariaExpanded = _ref['aria-expanded'],
|
|
@@ -375,6 +377,9 @@ var Button = /*#__PURE__*/forwardRef(function (_ref, forwardedRef) {
|
|
|
375
377
|
_ref$loading = _ref.loading,
|
|
376
378
|
loading = _ref$loading === void 0 ? false : _ref$loading,
|
|
377
379
|
onClick = _ref.onClick,
|
|
380
|
+
customCss = _ref.css,
|
|
381
|
+
_ref$rounded = _ref.rounded,
|
|
382
|
+
rounded = _ref$rounded === void 0 ? false : _ref$rounded,
|
|
378
383
|
_ref$prominence = _ref.prominence,
|
|
379
384
|
prominence = _ref$prominence === void 0 ? 'high' : _ref$prominence,
|
|
380
385
|
_ref$size = _ref.size,
|
|
@@ -385,7 +390,9 @@ var Button = /*#__PURE__*/forwardRef(function (_ref, forwardedRef) {
|
|
|
385
390
|
props = _objectWithoutProperties(_ref, _excluded$1);
|
|
386
391
|
var iconOnly = Boolean(props.label);
|
|
387
392
|
var _useButtonStyles = useButtonStyles({
|
|
393
|
+
css: customCss,
|
|
388
394
|
iconOnly: iconOnly,
|
|
395
|
+
rounded: rounded,
|
|
389
396
|
size: size,
|
|
390
397
|
tone: tone,
|
|
391
398
|
prominence: prominence
|
|
@@ -416,6 +423,16 @@ var Button = /*#__PURE__*/forwardRef(function (_ref, forwardedRef) {
|
|
|
416
423
|
})]
|
|
417
424
|
}));
|
|
418
425
|
});
|
|
426
|
+
UnthemedButton.displayName = 'UnthemedButton';
|
|
427
|
+
var Button = /*#__PURE__*/forwardRef(function (props, ref) {
|
|
428
|
+
var theme = props.theme;
|
|
429
|
+
return jsx(ThemeProvider, {
|
|
430
|
+
theme: theme,
|
|
431
|
+
children: jsx(UnthemedButton, _objectSpread(_objectSpread({}, props), {}, {
|
|
432
|
+
ref: ref
|
|
433
|
+
}))
|
|
434
|
+
});
|
|
435
|
+
});
|
|
419
436
|
Button.displayName = 'Button';
|
|
420
437
|
function Loading(_ref2) {
|
|
421
438
|
var tone = _ref2.tone;
|
|
@@ -438,15 +455,18 @@ function Loading(_ref2) {
|
|
|
438
455
|
});
|
|
439
456
|
}
|
|
440
457
|
|
|
441
|
-
var _excluded = ["data", "href", "target", "id", "prominence", "size", "tone"];
|
|
458
|
+
var _excluded = ["data", "href", "target", "id", "css", "prominence", "rounded", "size", "tone"];
|
|
442
459
|
/** The appearance of a `Button`, with the semantics of a link. */
|
|
443
|
-
var
|
|
460
|
+
var UnthemedButtonLink = forwardRefWithAs(function (_ref, forwardedRef) {
|
|
444
461
|
var data = _ref.data,
|
|
445
462
|
href = _ref.href,
|
|
446
463
|
target = _ref.target,
|
|
447
464
|
id = _ref.id,
|
|
465
|
+
customCss = _ref.css,
|
|
448
466
|
_ref$prominence = _ref.prominence,
|
|
449
467
|
prominence = _ref$prominence === void 0 ? 'high' : _ref$prominence,
|
|
468
|
+
_ref$rounded = _ref.rounded,
|
|
469
|
+
rounded = _ref$rounded === void 0 ? false : _ref$rounded,
|
|
450
470
|
_ref$size = _ref.size,
|
|
451
471
|
size = _ref$size === void 0 ? 'medium' : _ref$size,
|
|
452
472
|
_ref$tone = _ref.tone,
|
|
@@ -455,8 +475,10 @@ var ButtonLink = forwardRefWithAs(function (_ref, forwardedRef) {
|
|
|
455
475
|
var LinkComponent = useLinkComponent(forwardedRef);
|
|
456
476
|
var iconOnly = Boolean(consumerProps.label);
|
|
457
477
|
var _useButtonStyles = useButtonStyles({
|
|
478
|
+
css: customCss,
|
|
458
479
|
iconOnly: iconOnly,
|
|
459
480
|
prominence: prominence,
|
|
481
|
+
rounded: rounded,
|
|
460
482
|
size: size,
|
|
461
483
|
tone: tone
|
|
462
484
|
}),
|
|
@@ -481,5 +503,14 @@ var ButtonLink = forwardRefWithAs(function (_ref, forwardedRef) {
|
|
|
481
503
|
}))
|
|
482
504
|
}));
|
|
483
505
|
});
|
|
506
|
+
var ButtonLink = forwardRefWithAs(function (props, ref) {
|
|
507
|
+
var theme = props.theme;
|
|
508
|
+
return jsx(ThemeProvider, {
|
|
509
|
+
theme: theme,
|
|
510
|
+
children: jsx(UnthemedButtonLink, _objectSpread(_objectSpread({}, props), {}, {
|
|
511
|
+
forwardedRef: ref
|
|
512
|
+
}))
|
|
513
|
+
});
|
|
514
|
+
});
|
|
484
515
|
|
|
485
516
|
export { BaseButton, Button, ButtonLink, useButtonStyles };
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@spark-web/button",
|
|
3
|
-
"version": "
|
|
3
|
+
"version": "5.0.0-rc.25",
|
|
4
4
|
"homepage": "https://github.com/brighte-labs/spark-web#readme",
|
|
5
5
|
"repository": {
|
|
6
6
|
"type": "git",
|
|
@@ -17,14 +17,14 @@
|
|
|
17
17
|
"dependencies": {
|
|
18
18
|
"@babel/runtime": "^7.25.0",
|
|
19
19
|
"@emotion/react": "^11.14.0",
|
|
20
|
-
"@spark-web/a11y": "^
|
|
21
|
-
"@spark-web/box": "^
|
|
22
|
-
"@spark-web/icon": "^
|
|
23
|
-
"@spark-web/link": "^
|
|
24
|
-
"@spark-web/spinner": "^
|
|
25
|
-
"@spark-web/text": "^
|
|
26
|
-
"@spark-web/theme": "^
|
|
27
|
-
"@spark-web/utils": "^
|
|
20
|
+
"@spark-web/a11y": "^5.0.0-rc.25",
|
|
21
|
+
"@spark-web/box": "^5.0.0-rc.25",
|
|
22
|
+
"@spark-web/icon": "^5.0.0-rc.25",
|
|
23
|
+
"@spark-web/link": "^5.0.0-rc.25",
|
|
24
|
+
"@spark-web/spinner": "^5.0.0-rc.25",
|
|
25
|
+
"@spark-web/text": "^5.0.0-rc.25",
|
|
26
|
+
"@spark-web/theme": "^5.0.0-rc.25",
|
|
27
|
+
"@spark-web/utils": "^5.0.0-rc.25"
|
|
28
28
|
},
|
|
29
29
|
"devDependencies": {
|
|
30
30
|
"@types/react": "^18.2.0",
|