@atlaskit/color-picker 2.0.0 → 3.0.1

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 CHANGED
@@ -1,5 +1,23 @@
1
1
  # @atlaskit/color-picker
2
2
 
3
+ ## 3.0.1
4
+
5
+ ### Patch Changes
6
+
7
+ - [`8d4228767b0`](https://bitbucket.org/atlassian/atlassian-frontend/commits/8d4228767b0) - Upgrade Typescript from `4.2.4` to `4.3.5`.
8
+
9
+ ## 3.0.0
10
+
11
+ ### Major Changes
12
+
13
+ - [`b1f4bf97543`](https://bitbucket.org/atlassian/atlassian-frontend/commits/b1f4bf97543) - [ux] Fixes bug with tabbing
14
+
15
+ ## 2.0.1
16
+
17
+ ### Patch Changes
18
+
19
+ - Updated dependencies
20
+
3
21
  ## 2.0.0
4
22
 
5
23
  ### Major Changes
@@ -73,10 +73,16 @@ var ColorCard = /*#__PURE__*/function (_PureComponent) {
73
73
  var key = event.key;
74
74
  var _this$props2 = _this.props,
75
75
  onKeyDown = _this$props2.onKeyDown,
76
- value = _this$props2.value;
76
+ value = _this$props2.value,
77
+ isTabbing = _this$props2.isTabbing;
77
78
 
78
- if (onKeyDown && (key === _constants.KEY_ENTER || key === _constants.KEY_SPACE)) {
79
+ if ((isTabbing === undefined || isTabbing) && onKeyDown && (key === _constants.KEY_ENTER || key === _constants.KEY_SPACE)) {
79
80
  event.preventDefault();
81
+
82
+ if (isTabbing) {
83
+ event.stopPropagation();
84
+ }
85
+
80
86
  onKeyDown(value);
81
87
  }
82
88
  });
@@ -93,14 +99,16 @@ var ColorCard = /*#__PURE__*/function (_PureComponent) {
93
99
  selected = _this$props3.selected,
94
100
  focused = _this$props3.focused,
95
101
  _this$props3$checkMar = _this$props3.checkMarkColor,
96
- checkMarkColor = _this$props3$checkMar === void 0 ? _theme.colors.N0 : _this$props3$checkMar;
102
+ checkMarkColor = _this$props3$checkMar === void 0 ? _theme.colors.N0 : _this$props3$checkMar,
103
+ isTabbing = _this$props3.isTabbing;
97
104
  return /*#__PURE__*/_react.default.createElement(_ColorCard.ColorCardOption, {
98
105
  onClick: this.onClick,
99
106
  onMouseDown: this.onMouseDown,
100
107
  focused: focused,
101
108
  "aria-label": "".concat(label).concat(selected ? ' selected' : ''),
102
109
  tabIndex: 0,
103
- onKeyDown: this.onKeyDown
110
+ onKeyDown: this.onKeyDown,
111
+ isTabbing: isTabbing
104
112
  }, /*#__PURE__*/_react.default.createElement(_ColorCard.ColorCardContent, {
105
113
  color: value || 'transparent'
106
114
  }, selected && /*#__PURE__*/_react.default.createElement(_ColorCard.ColorCardContentCheckMark, null, /*#__PURE__*/_react.default.createElement(_done.default, {
@@ -33,6 +33,8 @@ var _Trigger = _interopRequireDefault(require("./Trigger"));
33
33
 
34
34
  var components = _interopRequireWildcard(require("./components"));
35
35
 
36
+ var _constants = require("../constants");
37
+
36
38
  var _analyticsNext = require("@atlaskit/analytics-next");
37
39
 
38
40
  var _ColorPicker = require("../styled/ColorPicker");
@@ -58,7 +60,7 @@ var defaultPopperProps = {
58
60
  placement: 'bottom-start'
59
61
  };
60
62
  var packageName = "@atlaskit/color-picker";
61
- var packageVersion = "2.0.0";
63
+ var packageVersion = "3.0.1";
62
64
 
63
65
  var ColorPickerWithoutAnalytics = /*#__PURE__*/function (_React$Component) {
64
66
  (0, _inherits2.default)(ColorPickerWithoutAnalytics, _React$Component);
@@ -76,6 +78,9 @@ var ColorPickerWithoutAnalytics = /*#__PURE__*/function (_React$Component) {
76
78
 
77
79
  _this = _super.call.apply(_super, [this].concat(args));
78
80
  (0, _defineProperty2.default)((0, _assertThisInitialized2.default)(_this), "createAndFireEventOnAtlaskit", (0, _analyticsNext.createAndFireEvent)('atlaskit'));
81
+ (0, _defineProperty2.default)((0, _assertThisInitialized2.default)(_this), "state", {
82
+ isTabbing: false
83
+ });
79
84
  (0, _defineProperty2.default)((0, _assertThisInitialized2.default)(_this), "changeAnalyticsCaller", function () {
80
85
  var createAnalyticsEvent = _this.props.createAnalyticsEvent;
81
86
 
@@ -93,9 +98,25 @@ var ColorPickerWithoutAnalytics = /*#__PURE__*/function (_React$Component) {
93
98
 
94
99
  return undefined;
95
100
  });
96
- (0, _defineProperty2.default)((0, _assertThisInitialized2.default)(_this), "onChange", function (option) {
101
+ (0, _defineProperty2.default)((0, _assertThisInitialized2.default)(_this), "onChangeSelect", function (option) {
97
102
  _this.props.onChange(option.value, _this.changeAnalyticsCaller());
98
103
  });
104
+ (0, _defineProperty2.default)((0, _assertThisInitialized2.default)(_this), "onOptionKeyDown", function (value) {
105
+ _this.props.onChange(value, _this.changeAnalyticsCaller());
106
+ });
107
+ (0, _defineProperty2.default)((0, _assertThisInitialized2.default)(_this), "onKeyDown", function (e) {
108
+ var key = e.key;
109
+
110
+ if (key === _constants.KEY_TAB) {
111
+ _this.setState({
112
+ isTabbing: true
113
+ });
114
+ } else if (key === _constants.KEY_ARROW_UP || key === _constants.KEY_ARROW_DOWN) {
115
+ _this.setState({
116
+ isTabbing: false
117
+ });
118
+ }
119
+ });
99
120
  return _this;
100
121
  }
101
122
 
@@ -135,12 +156,15 @@ var ColorPickerWithoutAnalytics = /*#__PURE__*/function (_React$Component) {
135
156
  "aria-label": fullLabel,
136
157
  value: value,
137
158
  components: components,
138
- onChange: this.onChange // never show search input
159
+ onChange: this.onChangeSelect // never show search input
139
160
  ,
140
161
  searchThreshold: Number.MAX_VALUE // palette props
141
162
  ,
142
163
  cols: cols,
143
- checkMarkColor: checkMarkColor
164
+ checkMarkColor: checkMarkColor,
165
+ onKeyDown: this.onKeyDown,
166
+ isTabbing: this.state.isTabbing,
167
+ onOptionKeyDown: this.onOptionKeyDown
144
168
  });
145
169
  }
146
170
  }]);
@@ -41,7 +41,10 @@ var Option = function Option(props) {
41
41
  var _props$data = props.data,
42
42
  value = _props$data.value,
43
43
  label = _props$data.label,
44
- checkMarkColor = props.selectProps.checkMarkColor,
44
+ _props$selectProps = props.selectProps,
45
+ checkMarkColor = _props$selectProps.checkMarkColor,
46
+ onOptionKeyDown = _props$selectProps.onOptionKeyDown,
47
+ isTabbing = _props$selectProps.isTabbing,
45
48
  isFocused = props.isFocused,
46
49
  isSelected = props.isSelected;
47
50
  return /*#__PURE__*/_react.default.createElement(_ColorPalette.ColorCardWrapper, props.innerProps, /*#__PURE__*/_react.default.createElement(_ColorCard.default, {
@@ -50,7 +53,11 @@ var Option = function Option(props) {
50
53
  checkMarkColor: checkMarkColor,
51
54
  isOption: true,
52
55
  focused: isFocused,
53
- selected: isSelected
56
+ selected: isSelected,
57
+ onKeyDown: function onKeyDown(value) {
58
+ return onOptionKeyDown(value);
59
+ },
60
+ isTabbing: isTabbing
54
61
  }));
55
62
  };
56
63
 
@@ -3,10 +3,16 @@
3
3
  Object.defineProperty(exports, "__esModule", {
4
4
  value: true
5
5
  });
6
- exports.KEY_SPACE = exports.KEY_ENTER = exports.COLOR_CARD_SIZE = void 0;
6
+ exports.KEY_TAB = exports.KEY_SPACE = exports.KEY_ENTER = exports.KEY_ARROW_UP = exports.KEY_ARROW_DOWN = exports.COLOR_CARD_SIZE = void 0;
7
7
  var COLOR_CARD_SIZE = 30;
8
8
  exports.COLOR_CARD_SIZE = COLOR_CARD_SIZE;
9
9
  var KEY_SPACE = ' ';
10
10
  exports.KEY_SPACE = KEY_SPACE;
11
11
  var KEY_ENTER = 'Enter';
12
- exports.KEY_ENTER = KEY_ENTER;
12
+ exports.KEY_ENTER = KEY_ENTER;
13
+ var KEY_ARROW_UP = 'ArrowDown';
14
+ exports.KEY_ARROW_UP = KEY_ARROW_UP;
15
+ var KEY_ARROW_DOWN = 'ArrowUp';
16
+ exports.KEY_ARROW_DOWN = KEY_ARROW_DOWN;
17
+ var KEY_TAB = 'Tab';
18
+ exports.KEY_TAB = KEY_TAB;
@@ -26,10 +26,14 @@ function _getRequireWildcardCache(nodeInterop) { if (typeof WeakMap !== "functio
26
26
  function _interopRequireWildcard(obj, nodeInterop) { if (!nodeInterop && obj && obj.__esModule) { return obj; } if (obj === null || _typeof(obj) !== "object" && typeof obj !== "function") { return { default: obj }; } var cache = _getRequireWildcardCache(nodeInterop); if (cache && cache.has(obj)) { return cache.get(obj); } var newObj = {}; var hasPropertyDescriptor = Object.defineProperty && Object.getOwnPropertyDescriptor; for (var key in obj) { if (key !== "default" && Object.prototype.hasOwnProperty.call(obj, key)) { var desc = hasPropertyDescriptor ? Object.getOwnPropertyDescriptor(obj, key) : null; if (desc && (desc.get || desc.set)) { Object.defineProperty(newObj, key, desc); } else { newObj[key] = obj[key]; } } } newObj.default = obj; if (cache) { cache.set(obj, newObj); } return newObj; }
27
27
 
28
28
  var buttonFocusedBorder = "border-color: ".concat((0, _tokens.token)('color.border.focused', _theme.colors.B100), ";");
29
- var sharedColorContainerStyles = (0, _styledComponents.css)(_templateObject || (_templateObject = (0, _taggedTemplateLiteral2.default)(["\n display: inline-block;\n position: relative;\n width: ", "px;\n height: ", "px;\n border: 2px solid transparent;\n box-sizing: border-box;\n border-radius: ", "px;\n transition: border-color 0.15s cubic-bezier(0.47, 0.03, 0.49, 1.38);\n background-color: transparent;\n border-color: transparent;\n padding: 0;\n cursor: pointer;\n outline: none;\n &:hover,\n &:focus {\n border-color: ", ";\n }\n"])), _constants.COLOR_CARD_SIZE, _constants.COLOR_CARD_SIZE, (0, _theme.borderRadius)() * 2, (0, _tokens.token)('color.border.focused', _theme.colors.B75));
29
+ var sharedColorContainerStyles = (0, _styledComponents.css)(_templateObject || (_templateObject = (0, _taggedTemplateLiteral2.default)(["\n display: inline-block;\n position: relative;\n width: ", "px;\n height: ", "px;\n border: 2px solid transparent;\n box-sizing: border-box;\n border-radius: ", "px;\n transition: border-color 0.15s cubic-bezier(0.47, 0.03, 0.49, 1.38);\n background-color: transparent;\n border-color: transparent;\n padding: 0;\n cursor: pointer;\n outline: none;\n"])), _constants.COLOR_CARD_SIZE, _constants.COLOR_CARD_SIZE, (0, _theme.borderRadius)() * 2);
30
30
 
31
- var ColorCardOption = _styledComponents.default.div(_templateObject2 || (_templateObject2 = (0, _taggedTemplateLiteral2.default)(["\n ", ";\n\n ", ";\n"])), sharedColorContainerStyles, function (props) {
32
- if (props.focused) {
31
+ var ColorCardOption = _styledComponents.default.div(_templateObject2 || (_templateObject2 = (0, _taggedTemplateLiteral2.default)(["\n ", ";\n\n ", "\n\n ", ";\n"])), sharedColorContainerStyles, function (props) {
32
+ if (props.isTabbing === undefined || props.isTabbing) {
33
+ return "&:hover,\n &:focus {\n border-color: ".concat((0, _tokens.token)('color.border.focused', _theme.colors.B75), ";\n }");
34
+ }
35
+ }, function (props) {
36
+ if (props.focused && !props.isTabbing) {
33
37
  return "border-color: ".concat((0, _tokens.token)('color.border.focused', _theme.colors.B75));
34
38
  }
35
39
  });
@@ -1,4 +1,4 @@
1
1
  {
2
2
  "name": "@atlaskit/color-picker",
3
- "version": "2.0.0"
3
+ "version": "3.0.1"
4
4
  }
@@ -33,11 +33,17 @@ export default class ColorCard extends PureComponent {
33
33
  } = event;
34
34
  const {
35
35
  onKeyDown,
36
- value
36
+ value,
37
+ isTabbing
37
38
  } = this.props;
38
39
 
39
- if (onKeyDown && (key === KEY_ENTER || key === KEY_SPACE)) {
40
+ if ((isTabbing === undefined || isTabbing) && onKeyDown && (key === KEY_ENTER || key === KEY_SPACE)) {
40
41
  event.preventDefault();
42
+
43
+ if (isTabbing) {
44
+ event.stopPropagation();
45
+ }
46
+
41
47
  onKeyDown(value);
42
48
  }
43
49
  });
@@ -52,7 +58,8 @@ export default class ColorCard extends PureComponent {
52
58
  selected,
53
59
  focused,
54
60
  // eslint-disable-next-line @atlaskit/design-system/ensure-design-token-usage
55
- checkMarkColor = colors.N0
61
+ checkMarkColor = colors.N0,
62
+ isTabbing
56
63
  } = this.props;
57
64
  return /*#__PURE__*/React.createElement(ColorCardOption, {
58
65
  onClick: this.onClick,
@@ -60,7 +67,8 @@ export default class ColorCard extends PureComponent {
60
67
  focused: focused,
61
68
  "aria-label": `${label}${selected ? ' selected' : ''}`,
62
69
  tabIndex: 0,
63
- onKeyDown: this.onKeyDown
70
+ onKeyDown: this.onKeyDown,
71
+ isTabbing: isTabbing
64
72
  }, /*#__PURE__*/React.createElement(ColorCardContent, {
65
73
  color: value || 'transparent'
66
74
  }, selected && /*#__PURE__*/React.createElement(ColorCardContentCheckMark, null, /*#__PURE__*/React.createElement(EditorDoneIcon, {
@@ -4,6 +4,7 @@ import React from 'react';
4
4
  import { PopupSelect } from '@atlaskit/select';
5
5
  import Trigger from './Trigger';
6
6
  import * as components from './components';
7
+ import { KEY_ARROW_UP, KEY_ARROW_DOWN, KEY_TAB } from '../constants';
7
8
  import { withAnalyticsEvents, withAnalyticsContext, createAndFireEvent } from '@atlaskit/analytics-next';
8
9
  import { ColorCardWrapper } from '../styled/ColorPicker';
9
10
  import { getOptions } from '../utils';
@@ -18,13 +19,17 @@ const defaultPopperProps = {
18
19
  placement: 'bottom-start'
19
20
  };
20
21
  const packageName = "@atlaskit/color-picker";
21
- const packageVersion = "2.0.0";
22
+ const packageVersion = "3.0.1";
22
23
  export class ColorPickerWithoutAnalytics extends React.Component {
23
24
  constructor(...args) {
24
25
  super(...args);
25
26
 
26
27
  _defineProperty(this, "createAndFireEventOnAtlaskit", createAndFireEvent('atlaskit'));
27
28
 
29
+ _defineProperty(this, "state", {
30
+ isTabbing: false
31
+ });
32
+
28
33
  _defineProperty(this, "changeAnalyticsCaller", () => {
29
34
  const {
30
35
  createAnalyticsEvent
@@ -45,9 +50,27 @@ export class ColorPickerWithoutAnalytics extends React.Component {
45
50
  return undefined;
46
51
  });
47
52
 
48
- _defineProperty(this, "onChange", option => {
53
+ _defineProperty(this, "onChangeSelect", option => {
49
54
  this.props.onChange(option.value, this.changeAnalyticsCaller());
50
55
  });
56
+
57
+ _defineProperty(this, "onOptionKeyDown", value => {
58
+ this.props.onChange(value, this.changeAnalyticsCaller());
59
+ });
60
+
61
+ _defineProperty(this, "onKeyDown", e => {
62
+ const key = e.key;
63
+
64
+ if (key === KEY_TAB) {
65
+ this.setState({
66
+ isTabbing: true
67
+ });
68
+ } else if (key === KEY_ARROW_UP || key === KEY_ARROW_DOWN) {
69
+ this.setState({
70
+ isTabbing: false
71
+ });
72
+ }
73
+ });
51
74
  }
52
75
 
53
76
  render() {
@@ -81,12 +104,15 @@ export class ColorPickerWithoutAnalytics extends React.Component {
81
104
  "aria-label": fullLabel,
82
105
  value: value,
83
106
  components: components,
84
- onChange: this.onChange // never show search input
107
+ onChange: this.onChangeSelect // never show search input
85
108
  ,
86
109
  searchThreshold: Number.MAX_VALUE // palette props
87
110
  ,
88
111
  cols: cols,
89
- checkMarkColor: checkMarkColor
112
+ checkMarkColor: checkMarkColor,
113
+ onKeyDown: this.onKeyDown,
114
+ isTabbing: this.state.isTabbing,
115
+ onOptionKeyDown: this.onOptionKeyDown
90
116
  });
91
117
  }
92
118
 
@@ -27,7 +27,9 @@ export const Option = props => {
27
27
  label
28
28
  },
29
29
  selectProps: {
30
- checkMarkColor
30
+ checkMarkColor,
31
+ onOptionKeyDown,
32
+ isTabbing
31
33
  },
32
34
  isFocused,
33
35
  isSelected
@@ -38,7 +40,9 @@ export const Option = props => {
38
40
  checkMarkColor: checkMarkColor,
39
41
  isOption: true,
40
42
  focused: isFocused,
41
- selected: isSelected
43
+ selected: isSelected,
44
+ onKeyDown: value => onOptionKeyDown(value),
45
+ isTabbing: isTabbing
42
46
  }));
43
47
  };
44
48
  export const DropdownIndicator = () => null;
@@ -1,3 +1,6 @@
1
1
  export const COLOR_CARD_SIZE = 30;
2
2
  export const KEY_SPACE = ' ';
3
- export const KEY_ENTER = 'Enter';
3
+ export const KEY_ENTER = 'Enter';
4
+ export const KEY_ARROW_UP = 'ArrowDown';
5
+ export const KEY_ARROW_DOWN = 'ArrowUp';
6
+ export const KEY_TAB = 'Tab';
@@ -19,16 +19,21 @@ const sharedColorContainerStyles = css`
19
19
  padding: 0;
20
20
  cursor: pointer;
21
21
  outline: none;
22
- &:hover,
23
- &:focus {
24
- border-color: ${token('color.border.focused', colors.B75)};
25
- }
26
22
  `;
27
23
  export const ColorCardOption = styled.div`
28
24
  ${sharedColorContainerStyles};
29
25
 
30
26
  ${props => {
31
- if (props.focused) {
27
+ if (props.isTabbing === undefined || props.isTabbing) {
28
+ return `&:hover,
29
+ &:focus {
30
+ border-color: ${token('color.border.focused', colors.B75)};
31
+ }`;
32
+ }
33
+ }}
34
+
35
+ ${props => {
36
+ if (props.focused && !props.isTabbing) {
32
37
  return `border-color: ${token('color.border.focused', colors.B75)}`;
33
38
  }
34
39
  }};
@@ -1,4 +1,4 @@
1
1
  {
2
2
  "name": "@atlaskit/color-picker",
3
- "version": "2.0.0"
3
+ "version": "3.0.1"
4
4
  }
@@ -54,10 +54,16 @@ var ColorCard = /*#__PURE__*/function (_PureComponent) {
54
54
  var key = event.key;
55
55
  var _this$props2 = _this.props,
56
56
  onKeyDown = _this$props2.onKeyDown,
57
- value = _this$props2.value;
57
+ value = _this$props2.value,
58
+ isTabbing = _this$props2.isTabbing;
58
59
 
59
- if (onKeyDown && (key === KEY_ENTER || key === KEY_SPACE)) {
60
+ if ((isTabbing === undefined || isTabbing) && onKeyDown && (key === KEY_ENTER || key === KEY_SPACE)) {
60
61
  event.preventDefault();
62
+
63
+ if (isTabbing) {
64
+ event.stopPropagation();
65
+ }
66
+
61
67
  onKeyDown(value);
62
68
  }
63
69
  });
@@ -76,14 +82,16 @@ var ColorCard = /*#__PURE__*/function (_PureComponent) {
76
82
  selected = _this$props3.selected,
77
83
  focused = _this$props3.focused,
78
84
  _this$props3$checkMar = _this$props3.checkMarkColor,
79
- checkMarkColor = _this$props3$checkMar === void 0 ? colors.N0 : _this$props3$checkMar;
85
+ checkMarkColor = _this$props3$checkMar === void 0 ? colors.N0 : _this$props3$checkMar,
86
+ isTabbing = _this$props3.isTabbing;
80
87
  return /*#__PURE__*/React.createElement(ColorCardOption, {
81
88
  onClick: this.onClick,
82
89
  onMouseDown: this.onMouseDown,
83
90
  focused: focused,
84
91
  "aria-label": "".concat(label).concat(selected ? ' selected' : ''),
85
92
  tabIndex: 0,
86
- onKeyDown: this.onKeyDown
93
+ onKeyDown: this.onKeyDown,
94
+ isTabbing: isTabbing
87
95
  }, /*#__PURE__*/React.createElement(ColorCardContent, {
88
96
  color: value || 'transparent'
89
97
  }, selected && /*#__PURE__*/React.createElement(ColorCardContentCheckMark, null, /*#__PURE__*/React.createElement(EditorDoneIcon, {
@@ -15,6 +15,7 @@ import React from 'react';
15
15
  import { PopupSelect } from '@atlaskit/select';
16
16
  import Trigger from './Trigger';
17
17
  import * as components from './components';
18
+ import { KEY_ARROW_UP, KEY_ARROW_DOWN, KEY_TAB } from '../constants';
18
19
  import { withAnalyticsEvents, withAnalyticsContext, createAndFireEvent } from '@atlaskit/analytics-next';
19
20
  import { ColorCardWrapper } from '../styled/ColorPicker';
20
21
  import { getOptions } from '../utils';
@@ -29,7 +30,7 @@ var defaultPopperProps = {
29
30
  placement: 'bottom-start'
30
31
  };
31
32
  var packageName = "@atlaskit/color-picker";
32
- var packageVersion = "2.0.0";
33
+ var packageVersion = "3.0.1";
33
34
  export var ColorPickerWithoutAnalytics = /*#__PURE__*/function (_React$Component) {
34
35
  _inherits(ColorPickerWithoutAnalytics, _React$Component);
35
36
 
@@ -48,6 +49,10 @@ export var ColorPickerWithoutAnalytics = /*#__PURE__*/function (_React$Component
48
49
 
49
50
  _defineProperty(_assertThisInitialized(_this), "createAndFireEventOnAtlaskit", createAndFireEvent('atlaskit'));
50
51
 
52
+ _defineProperty(_assertThisInitialized(_this), "state", {
53
+ isTabbing: false
54
+ });
55
+
51
56
  _defineProperty(_assertThisInitialized(_this), "changeAnalyticsCaller", function () {
52
57
  var createAnalyticsEvent = _this.props.createAnalyticsEvent;
53
58
 
@@ -66,10 +71,28 @@ export var ColorPickerWithoutAnalytics = /*#__PURE__*/function (_React$Component
66
71
  return undefined;
67
72
  });
68
73
 
69
- _defineProperty(_assertThisInitialized(_this), "onChange", function (option) {
74
+ _defineProperty(_assertThisInitialized(_this), "onChangeSelect", function (option) {
70
75
  _this.props.onChange(option.value, _this.changeAnalyticsCaller());
71
76
  });
72
77
 
78
+ _defineProperty(_assertThisInitialized(_this), "onOptionKeyDown", function (value) {
79
+ _this.props.onChange(value, _this.changeAnalyticsCaller());
80
+ });
81
+
82
+ _defineProperty(_assertThisInitialized(_this), "onKeyDown", function (e) {
83
+ var key = e.key;
84
+
85
+ if (key === KEY_TAB) {
86
+ _this.setState({
87
+ isTabbing: true
88
+ });
89
+ } else if (key === KEY_ARROW_UP || key === KEY_ARROW_DOWN) {
90
+ _this.setState({
91
+ isTabbing: false
92
+ });
93
+ }
94
+ });
95
+
73
96
  return _this;
74
97
  }
75
98
 
@@ -109,12 +132,15 @@ export var ColorPickerWithoutAnalytics = /*#__PURE__*/function (_React$Component
109
132
  "aria-label": fullLabel,
110
133
  value: value,
111
134
  components: components,
112
- onChange: this.onChange // never show search input
135
+ onChange: this.onChangeSelect // never show search input
113
136
  ,
114
137
  searchThreshold: Number.MAX_VALUE // palette props
115
138
  ,
116
139
  cols: cols,
117
- checkMarkColor: checkMarkColor
140
+ checkMarkColor: checkMarkColor,
141
+ onKeyDown: this.onKeyDown,
142
+ isTabbing: this.state.isTabbing,
143
+ onOptionKeyDown: this.onOptionKeyDown
118
144
  });
119
145
  }
120
146
  }]);
@@ -23,7 +23,10 @@ export var Option = function Option(props) {
23
23
  var _props$data = props.data,
24
24
  value = _props$data.value,
25
25
  label = _props$data.label,
26
- checkMarkColor = props.selectProps.checkMarkColor,
26
+ _props$selectProps = props.selectProps,
27
+ checkMarkColor = _props$selectProps.checkMarkColor,
28
+ onOptionKeyDown = _props$selectProps.onOptionKeyDown,
29
+ isTabbing = _props$selectProps.isTabbing,
27
30
  isFocused = props.isFocused,
28
31
  isSelected = props.isSelected;
29
32
  return /*#__PURE__*/React.createElement(ColorCardWrapper, props.innerProps, /*#__PURE__*/React.createElement(ColorCard, {
@@ -32,7 +35,11 @@ export var Option = function Option(props) {
32
35
  checkMarkColor: checkMarkColor,
33
36
  isOption: true,
34
37
  focused: isFocused,
35
- selected: isSelected
38
+ selected: isSelected,
39
+ onKeyDown: function onKeyDown(value) {
40
+ return onOptionKeyDown(value);
41
+ },
42
+ isTabbing: isTabbing
36
43
  }));
37
44
  };
38
45
  export var DropdownIndicator = function DropdownIndicator() {
@@ -1,3 +1,6 @@
1
1
  export var COLOR_CARD_SIZE = 30;
2
2
  export var KEY_SPACE = ' ';
3
- export var KEY_ENTER = 'Enter';
3
+ export var KEY_ENTER = 'Enter';
4
+ export var KEY_ARROW_UP = 'ArrowDown';
5
+ export var KEY_ARROW_DOWN = 'ArrowUp';
6
+ export var KEY_TAB = 'Tab';
@@ -9,9 +9,13 @@ import { borderRadius, colors } from '@atlaskit/theme';
9
9
  import { COLOR_CARD_SIZE } from '../constants';
10
10
  import { token } from '@atlaskit/tokens';
11
11
  var buttonFocusedBorder = "border-color: ".concat(token('color.border.focused', colors.B100), ";");
12
- var sharedColorContainerStyles = css(_templateObject || (_templateObject = _taggedTemplateLiteral(["\n display: inline-block;\n position: relative;\n width: ", "px;\n height: ", "px;\n border: 2px solid transparent;\n box-sizing: border-box;\n border-radius: ", "px;\n transition: border-color 0.15s cubic-bezier(0.47, 0.03, 0.49, 1.38);\n background-color: transparent;\n border-color: transparent;\n padding: 0;\n cursor: pointer;\n outline: none;\n &:hover,\n &:focus {\n border-color: ", ";\n }\n"])), COLOR_CARD_SIZE, COLOR_CARD_SIZE, borderRadius() * 2, token('color.border.focused', colors.B75));
13
- export var ColorCardOption = styled.div(_templateObject2 || (_templateObject2 = _taggedTemplateLiteral(["\n ", ";\n\n ", ";\n"])), sharedColorContainerStyles, function (props) {
14
- if (props.focused) {
12
+ var sharedColorContainerStyles = css(_templateObject || (_templateObject = _taggedTemplateLiteral(["\n display: inline-block;\n position: relative;\n width: ", "px;\n height: ", "px;\n border: 2px solid transparent;\n box-sizing: border-box;\n border-radius: ", "px;\n transition: border-color 0.15s cubic-bezier(0.47, 0.03, 0.49, 1.38);\n background-color: transparent;\n border-color: transparent;\n padding: 0;\n cursor: pointer;\n outline: none;\n"])), COLOR_CARD_SIZE, COLOR_CARD_SIZE, borderRadius() * 2);
13
+ export var ColorCardOption = styled.div(_templateObject2 || (_templateObject2 = _taggedTemplateLiteral(["\n ", ";\n\n ", "\n\n ", ";\n"])), sharedColorContainerStyles, function (props) {
14
+ if (props.isTabbing === undefined || props.isTabbing) {
15
+ return "&:hover,\n &:focus {\n border-color: ".concat(token('color.border.focused', colors.B75), ";\n }");
16
+ }
17
+ }, function (props) {
18
+ if (props.focused && !props.isTabbing) {
15
19
  return "border-color: ".concat(token('color.border.focused', colors.B75));
16
20
  }
17
21
  });
@@ -1,4 +1,4 @@
1
1
  {
2
2
  "name": "@atlaskit/color-picker",
3
- "version": "2.0.0"
3
+ "version": "3.0.1"
4
4
  }
@@ -9,6 +9,7 @@ export interface Props {
9
9
  selected?: boolean;
10
10
  focused?: boolean;
11
11
  isOption?: boolean;
12
+ isTabbing?: boolean;
12
13
  }
13
14
  export default class ColorCard extends PureComponent<Props> {
14
15
  onMouseDown: (event: React.MouseEvent<HTMLDivElement>) => void;
@@ -21,8 +21,13 @@ export interface Props {
21
21
  }
22
22
  export declare class ColorPickerWithoutAnalytics extends React.Component<Props> {
23
23
  createAndFireEventOnAtlaskit: (payload: import("@atlaskit/analytics-next").AnalyticsEventPayload) => (createAnalyticsEvent: import("@atlaskit/analytics-next").CreateUIAnalyticsEvent) => import("@atlaskit/analytics-next").UIAnalyticsEvent;
24
+ state: {
25
+ isTabbing: boolean;
26
+ };
24
27
  changeAnalyticsCaller: () => import("@atlaskit/analytics-next").UIAnalyticsEvent | undefined;
25
- onChange: (option: ValueType<Color>) => void;
28
+ onChangeSelect: (option: ValueType<Color>) => void;
29
+ onOptionKeyDown: (value: string) => void;
30
+ onKeyDown: (e: React.KeyboardEvent<HTMLElement>) => void;
26
31
  render(): JSX.Element;
27
32
  }
28
33
  declare const _default: React.ForwardRefExoticComponent<Pick<Omit<Props, keyof import("@atlaskit/analytics-next").WithAnalyticsEventsProps> & React.RefAttributes<any> & import("@atlaskit/analytics-next").WithContextProps, "label" | "key" | "onChange" | "checkMarkColor" | "cols" | "popperProps" | "palette" | "selectedColor" | "analyticsContext"> & React.RefAttributes<any>>;
@@ -1,3 +1,6 @@
1
1
  export declare const COLOR_CARD_SIZE = 30;
2
2
  export declare const KEY_SPACE = " ";
3
3
  export declare const KEY_ENTER = "Enter";
4
+ export declare const KEY_ARROW_UP = "ArrowDown";
5
+ export declare const KEY_ARROW_DOWN = "ArrowUp";
6
+ export declare const KEY_TAB = "Tab";
@@ -1,6 +1,7 @@
1
1
  /// <reference types="react" />
2
2
  declare type ColorCardProps = {
3
3
  focused?: boolean;
4
+ isTabbing?: boolean;
4
5
  };
5
6
  export declare const ColorCardOption: import("styled-components").StyledComponentClass<import("react").ClassAttributes<HTMLDivElement> & import("react").HTMLAttributes<HTMLDivElement> & ColorCardProps, any, import("react").ClassAttributes<HTMLDivElement> & import("react").HTMLAttributes<HTMLDivElement> & ColorCardProps>;
6
7
  export declare const ColorCardButton: import("styled-components").StyledComponentClass<import("react").ClassAttributes<HTMLButtonElement> & import("react").ButtonHTMLAttributes<HTMLButtonElement> & ColorCardProps, any, import("react").ClassAttributes<HTMLButtonElement> & import("react").ButtonHTMLAttributes<HTMLButtonElement> & ColorCardProps>;
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@atlaskit/color-picker",
3
- "version": "2.0.0",
3
+ "version": "3.0.1",
4
4
  "description": "Jira Color Picker Component",
5
5
  "publishConfig": {
6
6
  "registry": "https://registry.npmjs.org/"
@@ -23,9 +23,9 @@
23
23
  "dependencies": {
24
24
  "@atlaskit/analytics-next": "^8.2.0",
25
25
  "@atlaskit/icon": "^21.10.0",
26
- "@atlaskit/select": "^15.0.0",
26
+ "@atlaskit/select": "^15.6.0",
27
27
  "@atlaskit/theme": "^12.1.0",
28
- "@atlaskit/tokens": "^0.9.0",
28
+ "@atlaskit/tokens": "^0.10.0",
29
29
  "@babel/runtime": "^7.0.0",
30
30
  "memoize-one": "^6.0.0",
31
31
  "styled-components": "^3.2.6"
@@ -42,7 +42,7 @@
42
42
  "enzyme-adapter-react-16": "^1.15.1",
43
43
  "jscodeshift": "^0.13.0",
44
44
  "react": "^16.8.0",
45
- "typescript": "4.2.4"
45
+ "typescript": "4.3.5"
46
46
  },
47
47
  "keywords": [
48
48
  "ui",
package/report.api.md ADDED
@@ -0,0 +1,158 @@
1
+ ## API Report File for "@atlaskit/color-picker".
2
+
3
+ > Do not edit this file. This report is auto-generated by [API Extractor](https://api-extractor.com/).
4
+
5
+ [Learn more about API reports](https://hello.atlassian.net/wiki/spaces/UR/pages/1825484529/Package+API+Reports)
6
+
7
+ ```ts
8
+ import { AnalyticsEventPayload } from '@atlaskit/analytics-next';
9
+ import { CreateUIAnalyticsEvent } from '@atlaskit/analytics-next';
10
+ import { PopupSelectProps } from '@atlaskit/select';
11
+ import { default as React_2 } from 'react';
12
+ import { UIAnalyticsEvent } from '@atlaskit/analytics-next';
13
+ import { ValueType } from '@atlaskit/select';
14
+ import { WithAnalyticsEventsProps } from '@atlaskit/analytics-next';
15
+ import { WithContextProps } from '@atlaskit/analytics-next';
16
+
17
+ declare interface Color {
18
+ label: string;
19
+ value: string;
20
+ }
21
+
22
+ export declare const ColorPaletteMenu: React_2.ForwardRefExoticComponent<
23
+ Pick<
24
+ Pick<
25
+ Omit<ColorPaletteMenuProps, keyof WithAnalyticsEventsProps>,
26
+ 'label' | 'onChange' | 'checkMarkColor' | 'palette' | 'selectedColor'
27
+ > &
28
+ Partial<
29
+ Pick<
30
+ Omit<ColorPaletteMenuProps, keyof WithAnalyticsEventsProps>,
31
+ 'cols' | 'mode'
32
+ >
33
+ > &
34
+ Partial<
35
+ Pick<
36
+ {
37
+ cols: number;
38
+ mode: Mode;
39
+ },
40
+ never
41
+ >
42
+ > &
43
+ React_2.RefAttributes<any> &
44
+ WithContextProps,
45
+ | 'label'
46
+ | 'key'
47
+ | 'onChange'
48
+ | 'checkMarkColor'
49
+ | 'cols'
50
+ | 'mode'
51
+ | 'palette'
52
+ | 'selectedColor'
53
+ | 'analyticsContext'
54
+ > &
55
+ React_2.RefAttributes<any>
56
+ >;
57
+
58
+ export declare interface ColorPaletteMenuProps {
59
+ /** color picker button label */
60
+ label?: string;
61
+ /** list of available colors */
62
+ palette: Palette;
63
+ /** selected color */
64
+ selectedColor?: string;
65
+ /** maximum column length */
66
+ cols: number;
67
+ /** color of checkmark on selected color */
68
+ checkMarkColor?: string;
69
+ /** onChange handler */
70
+ onChange: (value: string, analyticsEvent?: object) => void;
71
+ /** You should not be accessing this prop under any circumstances. It is provided by @atlaskit/analytics-next. */
72
+ createAnalyticsEvent?: any;
73
+ /** style of the color-picker, either 'Compact' or 'Standard', default value is 'Standard' */
74
+ mode?: Mode;
75
+ }
76
+
77
+ export declare class ColorPaletteMenuWithoutAnalytics extends React_2.Component<
78
+ ColorPaletteMenuProps
79
+ > {
80
+ static defaultProps: {
81
+ cols: number;
82
+ mode: Mode;
83
+ };
84
+ createAndFireEventOnAtlaskit: (
85
+ payload: AnalyticsEventPayload,
86
+ ) => (createAnalyticsEvent: CreateUIAnalyticsEvent) => UIAnalyticsEvent;
87
+ changeAnalyticsCaller: () => UIAnalyticsEvent | undefined;
88
+ onChange: (value: string) => void;
89
+ render(): JSX.Element;
90
+ }
91
+
92
+ export declare interface ColorPickerProps {
93
+ /** color picker button label */
94
+ label?: string;
95
+ /** list of available colors */
96
+ palette: Palette;
97
+ /** selected color */
98
+ selectedColor?: string;
99
+ /** maximum column length */
100
+ cols?: number;
101
+ /** color of checkmark on selected color */
102
+ checkMarkColor?: string;
103
+ /** props for react-popper */
104
+ popperProps?: PopupSelectProps['popperProps'];
105
+ /** onChange handler */
106
+ onChange: (value: string, analyticsEvent?: object) => void;
107
+ /** You should not be accessing this prop under any circumstances. It is provided by @atlaskit/analytics-next. */
108
+ createAnalyticsEvent?: any;
109
+ }
110
+
111
+ export declare class ColorPickerWithoutAnalytics extends React_2.Component<
112
+ ColorPickerProps
113
+ > {
114
+ createAndFireEventOnAtlaskit: (
115
+ payload: AnalyticsEventPayload,
116
+ ) => (createAnalyticsEvent: CreateUIAnalyticsEvent) => UIAnalyticsEvent;
117
+ state: {
118
+ isTabbing: boolean;
119
+ };
120
+ changeAnalyticsCaller: () => UIAnalyticsEvent | undefined;
121
+ onChangeSelect: (option: ValueType<Color>) => void;
122
+ onOptionKeyDown: (value: string) => void;
123
+ onKeyDown: (e: React_2.KeyboardEvent<HTMLElement>) => void;
124
+ render(): JSX.Element;
125
+ }
126
+
127
+ export declare const Compact: Mode;
128
+
129
+ declare const _default: React_2.ForwardRefExoticComponent<
130
+ Pick<
131
+ Omit<ColorPickerProps, keyof WithAnalyticsEventsProps> &
132
+ React_2.RefAttributes<any> &
133
+ WithContextProps,
134
+ | 'label'
135
+ | 'key'
136
+ | 'onChange'
137
+ | 'checkMarkColor'
138
+ | 'cols'
139
+ | 'popperProps'
140
+ | 'palette'
141
+ | 'selectedColor'
142
+ | 'analyticsContext'
143
+ > &
144
+ React_2.RefAttributes<any>
145
+ >;
146
+ export default _default;
147
+
148
+ declare enum Mode {
149
+ Compact = 0,
150
+ Standard = 1,
151
+ }
152
+
153
+ declare type Palette = Color[];
154
+
155
+ export declare const Standard: Mode;
156
+
157
+ export {};
158
+ ```
package/tsconfig.json CHANGED
@@ -1,7 +1,6 @@
1
1
  {
2
2
  "extends": "../../../tsconfig.json",
3
3
  "compilerOptions": {
4
- "noImplicitAny": true,
5
4
  "baseUrl": "./"
6
5
  },
7
6
  "include": [