@atlaskit/button 16.10.2 → 16.11.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 (88) hide show
  1. package/CHANGELOG.md +6 -0
  2. package/dist/cjs/entry-points/new.js +8 -1
  3. package/dist/cjs/entry-points/unsafe.js +40 -1
  4. package/dist/cjs/new-button/containers/split-button/index.js +50 -0
  5. package/dist/cjs/new-button/containers/split-button/split-button-context.js +37 -0
  6. package/dist/cjs/new-button/containers/split-button/split-button.js +137 -0
  7. package/dist/cjs/new-button/containers/split-button/types.js +5 -0
  8. package/dist/cjs/new-button/containers/split-button/utils.js +23 -0
  9. package/dist/cjs/new-button/variants/shared/use-button-base.js +19 -6
  10. package/dist/cjs/new-button/variants/shared/xcss.js +52 -10
  11. package/dist/cjs/old-button/shared/button-base.js +1 -1
  12. package/dist/es2019/entry-points/new.js +2 -1
  13. package/dist/es2019/entry-points/unsafe.js +4 -1
  14. package/dist/es2019/new-button/containers/split-button/index.js +3 -0
  15. package/dist/es2019/new-button/containers/split-button/split-button-context.js +31 -0
  16. package/dist/es2019/new-button/containers/split-button/split-button.js +129 -0
  17. package/dist/es2019/new-button/containers/split-button/types.js +1 -0
  18. package/dist/es2019/new-button/containers/split-button/utils.js +12 -0
  19. package/dist/es2019/new-button/variants/shared/use-button-base.js +19 -6
  20. package/dist/es2019/new-button/variants/shared/xcss.js +54 -10
  21. package/dist/es2019/old-button/shared/button-base.js +1 -1
  22. package/dist/esm/entry-points/new.js +2 -1
  23. package/dist/esm/entry-points/unsafe.js +4 -1
  24. package/dist/esm/new-button/containers/split-button/index.js +3 -0
  25. package/dist/esm/new-button/containers/split-button/split-button-context.js +31 -0
  26. package/dist/esm/new-button/containers/split-button/split-button.js +131 -0
  27. package/dist/esm/new-button/containers/split-button/types.js +1 -0
  28. package/dist/esm/new-button/containers/split-button/utils.js +16 -0
  29. package/dist/esm/new-button/variants/shared/use-button-base.js +19 -6
  30. package/dist/esm/new-button/variants/shared/xcss.js +51 -10
  31. package/dist/esm/old-button/shared/button-base.js +1 -1
  32. package/dist/types/entry-points/new.d.ts +1 -0
  33. package/dist/types/entry-points/unsafe.d.ts +3 -0
  34. package/dist/types/new-button/containers/split-button/index.d.ts +3 -0
  35. package/dist/types/new-button/containers/split-button/split-button-context.d.ts +47 -0
  36. package/dist/types/new-button/containers/split-button/split-button.d.ts +47 -0
  37. package/dist/types/new-button/containers/split-button/types.d.ts +4 -0
  38. package/dist/types/new-button/containers/split-button/utils.d.ts +5 -0
  39. package/dist/types/new-button/variants/shared/use-button-base.d.ts +1 -1
  40. package/dist/types/new-button/variants/shared/xcss.d.ts +14 -1
  41. package/dist/types/old-button/types.d.ts +2 -2
  42. package/dist/types-ts4.5/containers/button-group.d.ts +12 -0
  43. package/dist/types-ts4.5/entry-points/button-group.d.ts +1 -0
  44. package/dist/types-ts4.5/entry-points/custom-theme-button.d.ts +2 -0
  45. package/dist/types-ts4.5/entry-points/loading-button.d.ts +2 -0
  46. package/dist/types-ts4.5/entry-points/new.d.ts +6 -0
  47. package/dist/types-ts4.5/entry-points/standard-button.d.ts +7 -0
  48. package/dist/types-ts4.5/entry-points/types.d.ts +4 -0
  49. package/dist/types-ts4.5/entry-points/unsafe.d.ts +4 -0
  50. package/dist/types-ts4.5/index.d.ts +8 -0
  51. package/dist/types-ts4.5/new-button/containers/split-button/index.d.ts +3 -0
  52. package/dist/types-ts4.5/new-button/containers/split-button/split-button-context.d.ts +47 -0
  53. package/dist/types-ts4.5/new-button/containers/split-button/split-button.d.ts +47 -0
  54. package/dist/types-ts4.5/new-button/containers/split-button/types.d.ts +4 -0
  55. package/dist/types-ts4.5/new-button/containers/split-button/utils.d.ts +5 -0
  56. package/dist/types-ts4.5/new-button/variants/default/button.d.ts +19 -0
  57. package/dist/types-ts4.5/new-button/variants/default/link.d.ts +17 -0
  58. package/dist/types-ts4.5/new-button/variants/default/types.d.ts +15 -0
  59. package/dist/types-ts4.5/new-button/variants/default/use-default-button.d.ts +15 -0
  60. package/dist/types-ts4.5/new-button/variants/icon/button.d.ts +17 -0
  61. package/dist/types-ts4.5/new-button/variants/icon/link.d.ts +17 -0
  62. package/dist/types-ts4.5/new-button/variants/icon/types.d.ts +8 -0
  63. package/dist/types-ts4.5/new-button/variants/icon/use-icon-button.d.ts +15 -0
  64. package/dist/types-ts4.5/new-button/variants/shared/block-events.d.ts +2 -0
  65. package/dist/types-ts4.5/new-button/variants/shared/colors.d.ts +18 -0
  66. package/dist/types-ts4.5/new-button/variants/shared/content.d.ts +13 -0
  67. package/dist/types-ts4.5/new-button/variants/shared/use-button-base.d.ts +37 -0
  68. package/dist/types-ts4.5/new-button/variants/shared/xcss.d.ts +31 -0
  69. package/dist/types-ts4.5/new-button/variants/types.d.ts +69 -0
  70. package/dist/types-ts4.5/old-button/button.d.ts +15 -0
  71. package/dist/types-ts4.5/old-button/custom-theme-button/custom-theme-button-types.d.ts +22 -0
  72. package/dist/types-ts4.5/old-button/custom-theme-button/custom-theme-button.d.ts +10 -0
  73. package/dist/types-ts4.5/old-button/custom-theme-button/index.d.ts +2 -0
  74. package/dist/types-ts4.5/old-button/custom-theme-button/theme.d.ts +21 -0
  75. package/dist/types-ts4.5/old-button/loading-button.d.ts +15 -0
  76. package/dist/types-ts4.5/old-button/shared/block-events.d.ts +4 -0
  77. package/dist/types-ts4.5/old-button/shared/button-base.d.ts +10 -0
  78. package/dist/types-ts4.5/old-button/shared/colors.d.ts +23 -0
  79. package/dist/types-ts4.5/old-button/shared/css.d.ts +22 -0
  80. package/dist/types-ts4.5/old-button/shared/get-if-visually-hidden-children.d.ts +2 -0
  81. package/dist/types-ts4.5/old-button/shared/get-is-only-single-icon.d.ts +2 -0
  82. package/dist/types-ts4.5/old-button/shared/loading-spinner.d.ts +5 -0
  83. package/dist/types-ts4.5/old-button/types.d.ts +94 -0
  84. package/dist/types-ts4.5/utils/appearances.d.ts +3 -0
  85. package/dist/types-ts4.5/utils/spacing.d.ts +3 -0
  86. package/dist/types-ts4.5/utils/variants.d.ts +15 -0
  87. package/package.json +2 -2
  88. package/tmp/api-report-tmp.d.ts +133 -0
@@ -5,7 +5,7 @@ import { xcss } from '@atlaskit/primitives';
5
5
  import { fontSize as getFontSize } from '@atlaskit/theme/constants';
6
6
  import colors from './colors';
7
7
  var fontSize = getFontSize();
8
- var heights = {
8
+ export var heights = {
9
9
  default: "".concat(32 / fontSize, "em"),
10
10
  compact: "".concat(24 / fontSize, "em"),
11
11
  none: 'auto'
@@ -34,6 +34,19 @@ var verticalAlign = {
34
34
  compact: 'middle',
35
35
  none: 'baseline'
36
36
  };
37
+ var splitBorderStyles = {
38
+ ':first-of-type': {
39
+ borderTopRightRadius: 0,
40
+ borderBottomRightRadius: 0
41
+ },
42
+ ':last-of-type': {
43
+ borderTopLeftRadius: 0,
44
+ borderBottomLeftRadius: 0
45
+ },
46
+ ':focus-visible': {
47
+ zIndex: 1
48
+ }
49
+ };
37
50
  function getColor(_ref) {
38
51
  var group = _ref.group,
39
52
  key = _ref.key;
@@ -45,11 +58,13 @@ function getColors(_ref2) {
45
58
  interactionState = _ref2$interactionStat === void 0 ? 'default' : _ref2$interactionStat,
46
59
  isDisabled = _ref2.isDisabled,
47
60
  isSelected = _ref2.isSelected,
61
+ isHighlighted = _ref2.isHighlighted,
62
+ isActiveOverSelected = _ref2.isActiveOverSelected,
48
63
  hasOverlay = _ref2.hasOverlay;
49
64
  var key = interactionState;
50
65
  // Overlay does not change color on interaction, revert to 'default' or resting state
51
66
  key = hasOverlay ? 'default' : key;
52
- key = isSelected ? 'selected' : key;
67
+ key = isSelected || isHighlighted ? isActiveOverSelected ? 'active' : 'selected' : key;
53
68
  // Disabled colors overrule everything else
54
69
  key = isDisabled ? 'disabled' : key;
55
70
  return {
@@ -68,27 +83,51 @@ export function getXCSS(_ref3) {
68
83
  spacing = _ref3.spacing,
69
84
  isDisabled = _ref3.isDisabled,
70
85
  isSelected = _ref3.isSelected,
86
+ isHighlighted = _ref3.isHighlighted,
87
+ isActiveOverSelected = _ref3.isActiveOverSelected,
71
88
  isIconButton = _ref3.isIconButton,
72
89
  shouldFitContainer = _ref3.shouldFitContainer,
73
90
  isLink = _ref3.isLink,
91
+ isSplit = _ref3.isSplit,
92
+ isNavigationSplit = _ref3.isNavigationSplit,
74
93
  hasOverlay = _ref3.hasOverlay,
75
94
  hasIconBefore = _ref3.hasIconBefore,
76
95
  hasIconAfter = _ref3.hasIconAfter;
77
96
  var baseColors = getColors({
78
97
  appearance: appearance,
79
98
  isSelected: isSelected,
99
+ isHighlighted: isHighlighted,
100
+ isActiveOverSelected: isActiveOverSelected,
80
101
  isDisabled: isDisabled
81
102
  });
82
103
  var combinedBaseColorStyles = isLink ? _objectSpread(_objectSpread({}, baseColors), {}, {
83
104
  textDecoration: 'none',
84
105
  // Disabling visited styles (by re-declaring the base colors)
85
106
  ':visited': baseColors
107
+ }) : isNavigationSplit && !isSelected ? _objectSpread(_objectSpread({}, baseColors), {}, {
108
+ backgroundColor: 'color.background.neutral.subtle'
86
109
  }) : baseColors;
87
110
  var height = heights[spacing];
88
111
  var width = shouldFitContainer ? '100%' : 'auto';
89
- width = isIconButton ? height : width;
90
- var paddingInlineStart = paddingInline[spacing][hasIconBefore ? 'withIcon' : 'default'];
91
- var paddingInlineEnd = paddingInline[spacing][hasIconAfter ? 'withIcon' : 'default'];
112
+ width = isIconButton ? isNavigationSplit ? '24px' : height : width;
113
+ var defaultPaddingInlineStart = paddingInline[spacing][hasIconBefore ? 'withIcon' : 'default'];
114
+ var defaultPaddingInlineEnd = paddingInline[spacing][hasIconAfter ? 'withIcon' : 'default'];
115
+ var splitButtonStyles = isSplit ? splitBorderStyles : {};
116
+ var getNavigationSplitButtonPaddings = function getNavigationSplitButtonPaddings() {
117
+ if (isNavigationSplit) {
118
+ return {
119
+ paddingInlineStart: 'space.075',
120
+ paddingInlineEnd: 'space.075'
121
+ };
122
+ }
123
+ return {
124
+ paddingInlineStart: isIconButton ? 'space.0' : defaultPaddingInlineStart,
125
+ paddingInlineEnd: isIconButton ? 'space.0' : defaultPaddingInlineEnd
126
+ };
127
+ };
128
+ var _getNavigationSplitBu = getNavigationSplitButtonPaddings(),
129
+ paddingInlineStart = _getNavigationSplitBu.paddingInlineStart,
130
+ paddingInlineEnd = _getNavigationSplitBu.paddingInlineEnd;
92
131
  return xcss(_objectSpread(_objectSpread(_objectSpread({
93
132
  alignItems: 'center',
94
133
  borderWidth: 'border.width.0',
@@ -107,8 +146,8 @@ export function getXCSS(_ref3) {
107
146
  whiteSpace: 'nowrap',
108
147
  height: height,
109
148
  paddingBlock: 'space.0',
110
- paddingInlineStart: isIconButton ? 'space.0' : paddingInlineStart,
111
- paddingInlineEnd: isIconButton ? 'space.0' : paddingInlineEnd,
149
+ paddingInlineStart: paddingInlineStart,
150
+ paddingInlineEnd: paddingInlineEnd,
112
151
  columnGap: gap[spacing],
113
152
  verticalAlign: verticalAlign[spacing],
114
153
  width: width,
@@ -119,7 +158,8 @@ export function getXCSS(_ref3) {
119
158
  } : {}), {}, {
120
159
  ':hover': _objectSpread(_objectSpread({}, getColors({
121
160
  appearance: appearance,
122
- isSelected: isSelected,
161
+ isSelected: isNavigationSplit && !isSelected ? false : isSelected,
162
+ isActiveOverSelected: isActiveOverSelected,
123
163
  isDisabled: isDisabled,
124
164
  interactionState: 'hover',
125
165
  hasOverlay: hasOverlay
@@ -130,7 +170,8 @@ export function getXCSS(_ref3) {
130
170
  }),
131
171
  ':active': _objectSpread(_objectSpread({}, getColors({
132
172
  appearance: appearance,
133
- isSelected: isSelected,
173
+ isSelected: isNavigationSplit && !isSelected ? false : isSelected,
174
+ isActiveOverSelected: isActiveOverSelected,
134
175
  isDisabled: isDisabled,
135
176
  interactionState: 'active',
136
177
  hasOverlay: hasOverlay
@@ -138,5 +179,5 @@ export function getXCSS(_ref3) {
138
179
  // background, box-shadow
139
180
  transitionDuration: '0s, 0s'
140
181
  })
141
- }));
182
+ }, splitButtonStyles));
142
183
  }
@@ -109,7 +109,7 @@ export default /*#__PURE__*/React.forwardRef(function ButtonBase(props, ref) {
109
109
  action: 'clicked',
110
110
  componentName: 'button',
111
111
  packageName: "@atlaskit/button",
112
- packageVersion: "16.10.2",
112
+ packageVersion: "16.11.0",
113
113
  analyticsData: analyticsContext
114
114
  });
115
115
 
@@ -2,4 +2,5 @@ export { default, type ButtonProps, } from '../new-button/variants/default/butto
2
2
  export { default as LinkButton, type LinkButtonProps, } from '../new-button/variants/default/link';
3
3
  export { default as IconButton, type IconButtonProps, } from '../new-button/variants/icon/button';
4
4
  export { default as LinkIconButton, type LinkIconButtonProps, } from '../new-button/variants/icon/link';
5
+ export { SplitButton } from '../new-button/containers/split-button';
5
6
  export type { Appearance, Spacing } from '../new-button/variants/types';
@@ -1 +1,4 @@
1
1
  export { default as UNSAFE_BUTTON } from '../new-button/variants/default/button';
2
+ export { default as UNSAFE_ICON_BUTTON } from '../new-button/variants/icon/button';
3
+ export { SplitButton as UNSAFE_SPLIT_BUTTON, SplitButtonContainer as UNSAFE_SPLIT_BUTTON_CONTAINER, Divider as UNSAFE_DIVIDER, getActions as UNSAFE_GET_ACTIONS, } from '../new-button/containers/split-button';
4
+ export { SplitButtonContext as UNSAFE_SPLIT_BUTTON_CONTEXT } from '../new-button/containers/split-button/split-button-context';
@@ -0,0 +1,3 @@
1
+ export { SplitButton, SplitButtonWithSlots, Divider, SplitButtonContainer, } from './split-button';
2
+ export { getActions } from './utils';
3
+ export { SplitButtonContext, useSplitButtonContext, } from './split-button-context';
@@ -0,0 +1,47 @@
1
+ /// <reference types="react" />
2
+ import { SplitButtonAppearance, SplitButtonSpacing } from './types';
3
+ type NavigationSplitButtonContextProps = {
4
+ appearance: 'navigation';
5
+ isHighlighted: boolean;
6
+ };
7
+ type MainSplitButtonContextProps = {
8
+ appearance: SplitButtonAppearance;
9
+ spacing: SplitButtonSpacing;
10
+ isDisabled: boolean;
11
+ };
12
+ type SplitButtonContextProps = NavigationSplitButtonContextProps | MainSplitButtonContextProps;
13
+ /**
14
+ * TODO: Add jsdoc
15
+ */
16
+ export declare const SplitButtonContext: import("react").Context<SplitButtonContextProps | undefined>;
17
+ type UseSplitButtonContext = {
18
+ appearance: SplitButtonAppearance | 'subtle';
19
+ spacing: SplitButtonSpacing;
20
+ isDisabled: boolean;
21
+ /**
22
+ * isSelected state has limited relevance (e.g. dropdown-menu trigger button).
23
+ * There is no isSelected state for color variants (e.g. primary, danger, warning).
24
+ * Hens we provide ability to override the isSelected state with isActiveOverSelected to display `active` state instead of `selected` state.
25
+ */
26
+ isActiveOverSelected: boolean;
27
+ isNavigationSplitButton: boolean;
28
+ isHighlighted: boolean;
29
+ };
30
+ type NavigationSplitButtonContext = UseSplitButtonContext & {
31
+ appearance: 'subtle';
32
+ spacing: 'default';
33
+ isDisabled: false;
34
+ isActiveOverSelected: false;
35
+ isNavigationSplitButton: true;
36
+ isHighlighted: boolean;
37
+ };
38
+ type MainSplitButtonContext = UseSplitButtonContext & {
39
+ appearance: SplitButtonAppearance;
40
+ spacing: SplitButtonSpacing;
41
+ isDisabled: boolean;
42
+ isActiveOverSelected: true;
43
+ isNavigationSplitButton: false;
44
+ isHighlighted: false;
45
+ };
46
+ export declare const useSplitButtonContext: () => NavigationSplitButtonContext | MainSplitButtonContext | undefined;
47
+ export {};
@@ -0,0 +1,47 @@
1
+ /** @jsx jsx */
2
+ import { type ReactNode } from 'react';
3
+ import { jsx } from '@emotion/react';
4
+ import type { SplitButtonAppearance, SplitButtonContextAppearance, SplitButtonSpacing } from './types';
5
+ type DividerProps = {
6
+ appearance: SplitButtonContextAppearance;
7
+ spacing: SplitButtonSpacing;
8
+ isDisabled?: boolean;
9
+ };
10
+ /**
11
+ * TODO: Add JSDoc
12
+ */
13
+ export declare const Divider: ({ appearance, spacing, isDisabled, }: DividerProps) => jsx.JSX.Element;
14
+ /**
15
+ * TODO: Add JSdoc
16
+ */
17
+ export declare const SplitButtonContainer: ({ children }: {
18
+ children: ReactNode;
19
+ }) => jsx.JSX.Element;
20
+ type SplitButtonProps = {
21
+ /**
22
+ * Only two children are allowed.
23
+ * First child is the primary action, second child is the secondary action.
24
+ * The assumption is that for both children trees there is a button reading the context.
25
+ */
26
+ children: ReactNode;
27
+ appearance?: SplitButtonAppearance;
28
+ spacing?: SplitButtonSpacing;
29
+ isDisabled?: boolean;
30
+ };
31
+ /**
32
+ * TODO: Add description when adding docs
33
+ */
34
+ export declare const SplitButton: ({ children, appearance, spacing, isDisabled, }: SplitButtonProps) => jsx.JSX.Element;
35
+ type SplitButtonWithSlotsProps = {
36
+ primaryAction: ReactNode;
37
+ secondaryAction: ReactNode;
38
+ appearance?: SplitButtonAppearance;
39
+ spacing?: SplitButtonSpacing;
40
+ isDisabled?: boolean;
41
+ isSelected?: boolean;
42
+ };
43
+ /**
44
+ * TODO: Decide on API
45
+ */
46
+ export declare const SplitButtonWithSlots: ({ primaryAction, secondaryAction, appearance, spacing, isDisabled, }: SplitButtonWithSlotsProps) => jsx.JSX.Element;
47
+ export {};
@@ -0,0 +1,4 @@
1
+ import type { Appearance, Spacing } from '../../variants/types';
2
+ export type SplitButtonAppearance = Extract<Appearance, 'default' | 'primary' | 'danger' | 'warning'>;
3
+ export type SplitButtonContextAppearance = SplitButtonAppearance | 'navigation';
4
+ export type SplitButtonSpacing = Extract<Spacing, 'default' | 'compact'>;
@@ -0,0 +1,5 @@
1
+ import { type ReactNode } from 'react';
2
+ export declare const getActions: (children: ReactNode) => {
3
+ PrimaryAction: import("react").ReactChild | import("react").ReactFragment | import("react").ReactPortal;
4
+ SecondaryAction: import("react").ReactChild | import("react").ReactFragment | import("react").ReactPortal;
5
+ };
@@ -33,5 +33,5 @@ export type UseButtonBaseReturn<TagName extends HTMLElement> = {
33
33
  *
34
34
  * @private
35
35
  */
36
- declare const useButtonBase: <TagName extends HTMLElement>({ analyticsContext, appearance, autoFocus, buttonType, interactionName, isDisabled, isSelected, isIconButton, hasIconBefore, hasIconAfter, children, onClick: providedOnClick, onMouseDownCapture, onMouseUpCapture, onKeyDownCapture, onKeyUpCapture, onTouchStartCapture, onTouchEndCapture, onPointerDownCapture, onPointerUpCapture, onClickCapture, overlay, ref, shouldFitContainer, spacing, }: UseButtonBaseArgs<TagName>) => UseButtonBaseReturn<TagName>;
36
+ declare const useButtonBase: <TagName extends HTMLElement>({ analyticsContext, appearance: propAppearance, autoFocus, buttonType, interactionName, isDisabled: propIsDisabled, isSelected, isIconButton, hasIconBefore, hasIconAfter, children, onClick: providedOnClick, onMouseDownCapture, onMouseUpCapture, onKeyDownCapture, onKeyUpCapture, onTouchStartCapture, onTouchEndCapture, onPointerDownCapture, onPointerUpCapture, onClickCapture, overlay, ref, shouldFitContainer, spacing: propSpacing, }: UseButtonBaseArgs<TagName>) => UseButtonBaseReturn<TagName>;
37
37
  export default useButtonBase;
@@ -1,10 +1,15 @@
1
1
  import { xcss } from '@atlaskit/primitives';
2
2
  import { type Appearance, type Spacing } from '../types';
3
+ export declare const heights: {
4
+ [key in Spacing]: string;
5
+ };
3
6
  export type GetXCSSArgs = {
4
7
  appearance: Appearance;
5
8
  spacing: Spacing;
6
9
  isDisabled: boolean;
7
10
  isSelected: boolean;
11
+ isHighlighted: boolean;
12
+ isActiveOverSelected: boolean;
8
13
  shouldFitContainer: boolean;
9
14
  hasOverlay: boolean;
10
15
  isIconButton: boolean;
@@ -14,5 +19,13 @@ export type GetXCSSArgs = {
14
19
  * If the button is a LinkButton
15
20
  */
16
21
  isLink: boolean;
22
+ /**
23
+ * If the button is a SplitButton
24
+ */
25
+ isSplit: boolean;
26
+ /**
27
+ * If the button is a PrimarySplitButton used in atlassian-navigation
28
+ */
29
+ isNavigationSplit: boolean;
17
30
  };
18
- export declare function getXCSS({ appearance, spacing, isDisabled, isSelected, isIconButton, shouldFitContainer, isLink, hasOverlay, hasIconBefore, hasIconAfter, }: GetXCSSArgs): ReturnType<typeof xcss>;
31
+ export declare function getXCSS({ appearance, spacing, isDisabled, isSelected, isHighlighted, isActiveOverSelected, isIconButton, shouldFitContainer, isLink, isSplit, isNavigationSplit, hasOverlay, hasIconBefore, hasIconAfter, }: GetXCSSArgs): ReturnType<typeof xcss>;
@@ -78,8 +78,8 @@ export type BaseOwnProps = {
78
78
  testId?: string;
79
79
  component?: React.ComponentType<React.AllHTMLAttributes<HTMLElement>> | React.ElementType;
80
80
  /**
81
- * An optional name used to identify this component to press listeners. E.g. interaction tracing
82
- * @see https://hello.atlassian.net/wiki/spaces/UFO/pages/2010358949/UFO+Integration+into+Design+System+components
81
+ * An optional name used to identify this component to press listeners. For example, interaction tracing. For more information,
82
+ * see [UFO integration into Design System components](https://go.atlassian.com/react-ufo-dst-integration)
83
83
  */
84
84
  interactionName?: string;
85
85
  /**
@@ -0,0 +1,12 @@
1
+ /** @jsx jsx */
2
+ import React from 'react';
3
+ import { jsx } from '@emotion/react';
4
+ import { Appearance } from '../old-button/types';
5
+ export type ButtonGroupProps = {
6
+ /**
7
+ * The appearance to apply to all buttons.
8
+ */
9
+ appearance?: Appearance;
10
+ children?: React.ReactNode;
11
+ };
12
+ export default function ButtonGroup({ appearance, children, }: ButtonGroupProps): jsx.JSX.Element;
@@ -0,0 +1 @@
1
+ export { default } from '../containers/button-group';
@@ -0,0 +1,2 @@
1
+ export { default, Theme } from '../old-button/custom-theme-button';
2
+ export type { ThemeTokens, ThemeProps, InteractionState, CustomThemeButtonProps, CustomThemeButtonOwnProps, } from '../old-button/custom-theme-button/custom-theme-button-types';
@@ -0,0 +1,2 @@
1
+ export { default } from '../old-button/loading-button';
2
+ export type { LoadingButtonProps, LoadingButtonOwnProps, } from '../old-button/loading-button';
@@ -0,0 +1,6 @@
1
+ export { default, type ButtonProps, } from '../new-button/variants/default/button';
2
+ export { default as LinkButton, type LinkButtonProps, } from '../new-button/variants/default/link';
3
+ export { default as IconButton, type IconButtonProps, } from '../new-button/variants/icon/button';
4
+ export { default as LinkIconButton, type LinkIconButtonProps, } from '../new-button/variants/icon/link';
5
+ export { SplitButton } from '../new-button/containers/split-button';
6
+ export type { Appearance, Spacing } from '../new-button/variants/types';
@@ -0,0 +1,7 @@
1
+ /**
2
+ * Must import '@emotion/core' in order to resolve type error
3
+ * https://product-fabric.atlassian.net/browse/DSP-3222
4
+ */
5
+ import '@emotion/react';
6
+ export { default } from '../old-button/button';
7
+ export type { ButtonProps } from '../old-button/button';
@@ -0,0 +1,4 @@
1
+ export type { Appearance, Spacing, BaseOwnProps, BaseProps, } from '../old-button/types';
2
+ export type { ButtonProps } from './standard-button';
3
+ export type { LoadingButtonProps, LoadingButtonOwnProps, } from './loading-button';
4
+ export type { ThemeTokens, ThemeProps, InteractionState, CustomThemeButtonProps, CustomThemeButtonOwnProps, } from './custom-theme-button';
@@ -0,0 +1,4 @@
1
+ export { default as UNSAFE_BUTTON } from '../new-button/variants/default/button';
2
+ export { default as UNSAFE_ICON_BUTTON } from '../new-button/variants/icon/button';
3
+ export { SplitButton as UNSAFE_SPLIT_BUTTON, SplitButtonContainer as UNSAFE_SPLIT_BUTTON_CONTAINER, Divider as UNSAFE_DIVIDER, getActions as UNSAFE_GET_ACTIONS, } from '../new-button/containers/split-button';
4
+ export { SplitButtonContext as UNSAFE_SPLIT_BUTTON_CONTEXT } from '../new-button/containers/split-button/split-button-context';
@@ -0,0 +1,8 @@
1
+ export type { Appearance, Spacing, BaseOwnProps, BaseProps, } from './entry-points/types';
2
+ export { default, } from './entry-points/standard-button';
3
+ export type { ButtonProps } from './entry-points/standard-button';
4
+ export { default as LoadingButton } from './entry-points/loading-button';
5
+ export type { LoadingButtonProps, LoadingButtonOwnProps, } from './entry-points/loading-button';
6
+ export { default as CustomThemeButton, Theme, } from './entry-points/custom-theme-button';
7
+ export type { ThemeTokens, ThemeProps, InteractionState, CustomThemeButtonProps, CustomThemeButtonOwnProps, } from './entry-points/custom-theme-button';
8
+ export { default as ButtonGroup } from './entry-points/button-group';
@@ -0,0 +1,3 @@
1
+ export { SplitButton, SplitButtonWithSlots, Divider, SplitButtonContainer, } from './split-button';
2
+ export { getActions } from './utils';
3
+ export { SplitButtonContext, useSplitButtonContext, } from './split-button-context';
@@ -0,0 +1,47 @@
1
+ /// <reference types="react" />
2
+ import { SplitButtonAppearance, SplitButtonSpacing } from './types';
3
+ type NavigationSplitButtonContextProps = {
4
+ appearance: 'navigation';
5
+ isHighlighted: boolean;
6
+ };
7
+ type MainSplitButtonContextProps = {
8
+ appearance: SplitButtonAppearance;
9
+ spacing: SplitButtonSpacing;
10
+ isDisabled: boolean;
11
+ };
12
+ type SplitButtonContextProps = NavigationSplitButtonContextProps | MainSplitButtonContextProps;
13
+ /**
14
+ * TODO: Add jsdoc
15
+ */
16
+ export declare const SplitButtonContext: import("react").Context<SplitButtonContextProps | undefined>;
17
+ type UseSplitButtonContext = {
18
+ appearance: SplitButtonAppearance | 'subtle';
19
+ spacing: SplitButtonSpacing;
20
+ isDisabled: boolean;
21
+ /**
22
+ * isSelected state has limited relevance (e.g. dropdown-menu trigger button).
23
+ * There is no isSelected state for color variants (e.g. primary, danger, warning).
24
+ * Hens we provide ability to override the isSelected state with isActiveOverSelected to display `active` state instead of `selected` state.
25
+ */
26
+ isActiveOverSelected: boolean;
27
+ isNavigationSplitButton: boolean;
28
+ isHighlighted: boolean;
29
+ };
30
+ type NavigationSplitButtonContext = UseSplitButtonContext & {
31
+ appearance: 'subtle';
32
+ spacing: 'default';
33
+ isDisabled: false;
34
+ isActiveOverSelected: false;
35
+ isNavigationSplitButton: true;
36
+ isHighlighted: boolean;
37
+ };
38
+ type MainSplitButtonContext = UseSplitButtonContext & {
39
+ appearance: SplitButtonAppearance;
40
+ spacing: SplitButtonSpacing;
41
+ isDisabled: boolean;
42
+ isActiveOverSelected: true;
43
+ isNavigationSplitButton: false;
44
+ isHighlighted: false;
45
+ };
46
+ export declare const useSplitButtonContext: () => NavigationSplitButtonContext | MainSplitButtonContext | undefined;
47
+ export {};
@@ -0,0 +1,47 @@
1
+ /** @jsx jsx */
2
+ import { type ReactNode } from 'react';
3
+ import { jsx } from '@emotion/react';
4
+ import type { SplitButtonAppearance, SplitButtonContextAppearance, SplitButtonSpacing } from './types';
5
+ type DividerProps = {
6
+ appearance: SplitButtonContextAppearance;
7
+ spacing: SplitButtonSpacing;
8
+ isDisabled?: boolean;
9
+ };
10
+ /**
11
+ * TODO: Add JSDoc
12
+ */
13
+ export declare const Divider: ({ appearance, spacing, isDisabled, }: DividerProps) => jsx.JSX.Element;
14
+ /**
15
+ * TODO: Add JSdoc
16
+ */
17
+ export declare const SplitButtonContainer: ({ children }: {
18
+ children: ReactNode;
19
+ }) => jsx.JSX.Element;
20
+ type SplitButtonProps = {
21
+ /**
22
+ * Only two children are allowed.
23
+ * First child is the primary action, second child is the secondary action.
24
+ * The assumption is that for both children trees there is a button reading the context.
25
+ */
26
+ children: ReactNode;
27
+ appearance?: SplitButtonAppearance;
28
+ spacing?: SplitButtonSpacing;
29
+ isDisabled?: boolean;
30
+ };
31
+ /**
32
+ * TODO: Add description when adding docs
33
+ */
34
+ export declare const SplitButton: ({ children, appearance, spacing, isDisabled, }: SplitButtonProps) => jsx.JSX.Element;
35
+ type SplitButtonWithSlotsProps = {
36
+ primaryAction: ReactNode;
37
+ secondaryAction: ReactNode;
38
+ appearance?: SplitButtonAppearance;
39
+ spacing?: SplitButtonSpacing;
40
+ isDisabled?: boolean;
41
+ isSelected?: boolean;
42
+ };
43
+ /**
44
+ * TODO: Decide on API
45
+ */
46
+ export declare const SplitButtonWithSlots: ({ primaryAction, secondaryAction, appearance, spacing, isDisabled, }: SplitButtonWithSlotsProps) => jsx.JSX.Element;
47
+ export {};
@@ -0,0 +1,4 @@
1
+ import type { Appearance, Spacing } from '../../variants/types';
2
+ export type SplitButtonAppearance = Extract<Appearance, 'default' | 'primary' | 'danger' | 'warning'>;
3
+ export type SplitButtonContextAppearance = SplitButtonAppearance | 'navigation';
4
+ export type SplitButtonSpacing = Extract<Spacing, 'default' | 'compact'>;
@@ -0,0 +1,5 @@
1
+ import { type ReactNode } from 'react';
2
+ export declare const getActions: (children: ReactNode) => {
3
+ PrimaryAction: import("react").ReactChild | import("react").ReactFragment | import("react").ReactPortal;
4
+ SecondaryAction: import("react").ReactChild | import("react").ReactFragment | import("react").ReactPortal;
5
+ };
@@ -0,0 +1,19 @@
1
+ import React from 'react';
2
+ import { type AdditionalHTMLElementPropsExtender, type CombinedButtonProps } from '../types';
3
+ import { type CommonDefaultButtonProps } from './types';
4
+ type Element = HTMLButtonElement;
5
+ type AdditionalHTMLElementProps = AdditionalHTMLElementPropsExtender<React.ButtonHTMLAttributes<Element>>;
6
+ export type ButtonProps = CommonDefaultButtonProps & CombinedButtonProps<Element, AdditionalHTMLElementProps>;
7
+ /**
8
+ * __Button__
9
+ *
10
+ * @warning __UNSAFE__ Button is not yet safe for production use.
11
+ *
12
+ * A button triggers an event or action.
13
+ *
14
+ * - [Examples](https://atlassian.design/components/button/examples)
15
+ * - [Code](https://atlassian.design/components/button/code)
16
+ * - [Usage](https://atlassian.design/components/button/usage)
17
+ */
18
+ declare const Button: React.MemoExoticComponent<React.ForwardRefExoticComponent<CommonDefaultButtonProps & Omit<AdditionalHTMLElementProps, keyof import("../types").CommonButtonProps<TagName>> & import("../types").CommonButtonProps<HTMLButtonElement> & React.RefAttributes<HTMLButtonElement>>>;
19
+ export default Button;
@@ -0,0 +1,17 @@
1
+ import React from 'react';
2
+ import { type AdditionalHTMLElementPropsExtender, type CombinedButtonProps } from '../types';
3
+ import { type CommonDefaultButtonProps } from './types';
4
+ type Element = HTMLAnchorElement;
5
+ type AdditionalHTMLElementProps = AdditionalHTMLElementPropsExtender<React.AnchorHTMLAttributes<Element>>;
6
+ export type LinkButtonProps = CommonDefaultButtonProps & CombinedButtonProps<Element, AdditionalHTMLElementProps>;
7
+ /**
8
+ * __Link Button__
9
+ *
10
+ * A link button renders a link in the style of a button.
11
+ *
12
+ * - [Examples](https://atlassian.design/components/button/examples)
13
+ * - [Code](https://atlassian.design/components/button/code)
14
+ * - [Usage](https://atlassian.design/components/button/usage)
15
+ */
16
+ declare const LinkButton: React.MemoExoticComponent<React.ForwardRefExoticComponent<CommonDefaultButtonProps & Omit<AdditionalHTMLElementProps, keyof import("../types").CommonButtonProps<TagName>> & import("../types").CommonButtonProps<HTMLAnchorElement> & React.RefAttributes<HTMLAnchorElement>>>;
17
+ export default LinkButton;
@@ -0,0 +1,15 @@
1
+ /// <reference types="react" />
2
+ export type CommonDefaultButtonProps = {
3
+ /**
4
+ * Places an icon within the button, after the button's text
5
+ */
6
+ iconAfter?: React.ReactChild;
7
+ /**
8
+ * Places an icon within the button, before the button's text
9
+ */
10
+ iconBefore?: React.ReactChild;
11
+ /**
12
+ * Option to fit button width to its parent width
13
+ */
14
+ shouldFitContainer?: boolean;
15
+ };
@@ -0,0 +1,15 @@
1
+ import { type UseButtonBaseArgs, type UseButtonBaseReturn } from '../shared/use-button-base';
2
+ import { type CommonDefaultButtonProps } from './types';
3
+ type UseDefaultButtonArgs<TagName extends HTMLElement> = UseButtonBaseArgs<TagName> & CommonDefaultButtonProps;
4
+ type UseButtonReturn<TagName extends HTMLElement> = UseButtonBaseReturn<TagName>;
5
+ /**
6
+ * __Use default button base__
7
+ *
8
+ * A React hook that accepts a set of default Button props,
9
+ * and processes them to return consistent base props for usage
10
+ * across Button and LinkButton variants.
11
+ *
12
+ * @private
13
+ */
14
+ declare const useDefaultButton: <TagName extends HTMLElement>({ analyticsContext, appearance, autoFocus, buttonType, iconBefore, iconAfter, interactionName, isDisabled, isSelected, children, onClick, onMouseDownCapture, onMouseUpCapture, onKeyDownCapture, onKeyUpCapture, onTouchStartCapture, onTouchEndCapture, onPointerDownCapture, onPointerUpCapture, onClickCapture, overlay, ref, shouldFitContainer, spacing, }: UseDefaultButtonArgs<TagName>) => UseButtonReturn<TagName>;
15
+ export default useDefaultButton;
@@ -0,0 +1,17 @@
1
+ import React from 'react';
2
+ import { type AdditionalHTMLElementPropsExtender, type CombinedButtonProps } from '../types';
3
+ import { type CommonIconButtonProps } from './types';
4
+ type Element = HTMLButtonElement;
5
+ type AdditionalHTMLElementProps = AdditionalHTMLElementPropsExtender<React.ButtonHTMLAttributes<Element>>;
6
+ export type IconButtonProps = CommonIconButtonProps & CombinedButtonProps<Element, AdditionalHTMLElementProps>;
7
+ /**
8
+ * __Icon Button__
9
+ *
10
+ * TODO: Description
11
+ *
12
+ * - [Examples](https://atlassian.design/components/button/examples)
13
+ * - [Code](https://atlassian.design/components/button/code)
14
+ * - [Usage](https://atlassian.design/components/button/usage)
15
+ */
16
+ declare const IconButton: React.MemoExoticComponent<React.ForwardRefExoticComponent<CommonIconButtonProps & Omit<AdditionalHTMLElementProps, keyof import("../types").CommonButtonProps<TagName>> & import("../types").CommonButtonProps<HTMLButtonElement> & React.RefAttributes<HTMLButtonElement>>>;
17
+ export default IconButton;
@@ -0,0 +1,17 @@
1
+ import React from 'react';
2
+ import { type AdditionalHTMLElementPropsExtender, type CombinedButtonProps } from '../types';
3
+ import { type CommonIconButtonProps } from './types';
4
+ type Element = HTMLAnchorElement;
5
+ type AdditionalHTMLElementProps = AdditionalHTMLElementPropsExtender<React.AnchorHTMLAttributes<Element>>;
6
+ export type LinkIconButtonProps = CommonIconButtonProps & CombinedButtonProps<Element, AdditionalHTMLElementProps>;
7
+ /**
8
+ * __Link Button__
9
+ *
10
+ * A link button renders a link in the style of a button.
11
+ *
12
+ * - [Examples](https://atlassian.design/components/button/examples)
13
+ * - [Code](https://atlassian.design/components/button/code)
14
+ * - [Usage](https://atlassian.design/components/button/usage)
15
+ */
16
+ declare const LinkIconButton: React.MemoExoticComponent<React.ForwardRefExoticComponent<CommonIconButtonProps & Omit<AdditionalHTMLElementProps, keyof import("../types").CommonButtonProps<TagName>> & import("../types").CommonButtonProps<HTMLAnchorElement> & React.RefAttributes<HTMLAnchorElement>>>;
17
+ export default LinkIconButton;
@@ -0,0 +1,8 @@
1
+ /// <reference types="react" />
2
+ export type CommonIconButtonProps = {
3
+ /**
4
+ * TODO: Consider locking-down icon props by converting from slot props to component props
5
+ * Places an icon within the button, after the button's text
6
+ */
7
+ icon: React.ReactChild;
8
+ };
@@ -0,0 +1,15 @@
1
+ import { type UseButtonBaseArgs, type UseButtonBaseReturn } from '../shared/use-button-base';
2
+ import { type CommonIconButtonProps } from './types';
3
+ type UseIconButtonArgs<TagName extends HTMLElement> = UseButtonBaseArgs<TagName> & CommonIconButtonProps;
4
+ type UseIconButtonReturn<TagName extends HTMLElement> = UseButtonBaseReturn<TagName>;
5
+ /**
6
+ * __Use icon button__
7
+ *
8
+ * A React hook that accepts a set of icon Button props,
9
+ * and processes them to return consistent base props for usage
10
+ * across IconButton and LinkIconButton variants.
11
+ *
12
+ * @private
13
+ */
14
+ declare const useIconButton: <TagName extends HTMLElement>({ analyticsContext, appearance, autoFocus, buttonType, icon, interactionName, isDisabled, isSelected, onClick, onMouseDownCapture, onMouseUpCapture, onKeyDownCapture, onKeyUpCapture, onTouchStartCapture, onTouchEndCapture, onPointerDownCapture, onPointerUpCapture, onClickCapture, overlay, ref, shouldFitContainer, spacing, }: UseIconButtonArgs<TagName>) => UseIconButtonReturn<TagName>;
15
+ export default useIconButton;