@dscout/particle 1.0.0-alpha.3 → 1.0.0-alpha.4

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 (59) hide show
  1. package/lib/components/attribute_input.js +6 -3
  2. package/lib/components/attribute_selector.js +33 -17
  3. package/lib/components/avatar.js +2 -2
  4. package/lib/components/button.js +7 -1
  5. package/lib/components/button_control.js +1 -1
  6. package/lib/components/button_icon.js +3 -1
  7. package/lib/components/container.js +3 -1
  8. package/lib/components/file_input.js +1 -1
  9. package/lib/components/input_group.js +13 -2
  10. package/lib/components/modal.js +47 -20
  11. package/lib/components/tags_input.js +3 -3
  12. package/lib/components/theme_provider.js +170 -39
  13. package/lib/components/tooltip_container.js +1 -1
  14. package/lib/icons/circle_plus.js +4 -3
  15. package/lib/icons/exclude.js +81 -0
  16. package/lib/icons/multi_exclude.js +93 -0
  17. package/lib/icons/prop_types.js +1 -0
  18. package/lib/icons/reinclude.js +81 -0
  19. package/lib/icons/speaker_on.js +68 -0
  20. package/lib/index.js +32 -0
  21. package/lib/stylesheets/particle.css +628 -200
  22. package/lib/stylesheets/particle.css.map +1 -1
  23. package/lib/stylesheets/particle.min.css +1 -1
  24. package/lib/stylesheets/particle.min.css.gz +0 -0
  25. package/lib/utils/props.js +1 -1
  26. package/package.json +1 -1
  27. package/styles/_base.scss +0 -1
  28. package/styles/color_schemes/_bandit_dark.scss +53 -0
  29. package/styles/color_schemes/_bandit_dark_colors.scss +20 -0
  30. package/styles/color_schemes/_bandit_light.scss +6 -0
  31. package/styles/color_schemes/_bandit_light_colors.scss +20 -0
  32. package/styles/{themes/_researcher_colors.scss → color_schemes/_base_colors.scss} +8 -8
  33. package/styles/color_schemes/_color_scheme_builder.scss +169 -0
  34. package/styles/color_schemes/_index.scss +12 -0
  35. package/styles/color_schemes/_researcher_dark.scss +52 -0
  36. package/styles/color_schemes/_researcher_dark_colors.scss +14 -0
  37. package/styles/color_schemes/_researcher_light.scss +6 -0
  38. package/styles/color_schemes/_researcher_light_colors.scss +4 -0
  39. package/styles/components/_focus-intent.scss +2 -2
  40. package/styles/components/attribute_selector/_base.scss +23 -3
  41. package/styles/components/attribute_selector/themes/_theme_builder.scss +8 -6
  42. package/styles/components/avatar/_base.scss +4 -3
  43. package/styles/components/buttons/_base.scss +92 -12
  44. package/styles/components/buttons/themes/_theme_builder.scss +3 -3
  45. package/styles/components/dropdown/_base.scss +1 -0
  46. package/styles/components/grid/_base.scss +2 -1
  47. package/styles/components/input_group/_base.scss +3 -3
  48. package/styles/components/modal/base.scss +7 -10
  49. package/styles/components/pill/_base.scss +1 -1
  50. package/styles/components/toggle/_base.scss +1 -1
  51. package/styles/components/tooltip/_base.scss +8 -1
  52. package/styles/functions/_colors.scss +33 -0
  53. package/styles/particle.scss +3 -22
  54. package/styles/themes/_bandit.scss +5 -7
  55. package/styles/themes/_researcher.scss +1 -3
  56. package/styles/themes/_theme_builder.scss +4 -149
  57. package/styles/utilities/_colors.scss +61 -58
  58. package/styles/utilities/_typography.scss +5 -0
  59. package/styles/themes/_bandit_colors.scss +0 -9
@@ -73,7 +73,8 @@ function AttributeInput(_ref) {
73
73
  'Attribute--with-label': label
74
74
  });
75
75
  var labelClassName = (0, _class_names.default)('Attribute__Label', {
76
- 'Attribute__Label--selected': checked
76
+ 'Attribute__Label--selected': checked,
77
+ 'Attribute__Label--read-only': readOnly
77
78
  });
78
79
  return _react.default.createElement("div", {
79
80
  className: selectorClassName
@@ -87,7 +88,7 @@ function AttributeInput(_ref) {
87
88
  ref: getRef,
88
89
  checked: checked,
89
90
  className: "Attribute__Input",
90
- onChange: onChange,
91
+ onChange: readOnly ? undefined : onChange,
91
92
  type: "radio",
92
93
  value: value,
93
94
  tabIndex: tabIndex,
@@ -96,7 +97,9 @@ function AttributeInput(_ref) {
96
97
  })), _react.default.createElement("label", {
97
98
  className: labelClassName,
98
99
  htmlFor: attributeId
99
- }, label));
100
+ }, _react.default.createElement("span", {
101
+ className: "Attribute__Label__Content"
102
+ }, label)));
100
103
  }
101
104
 
102
105
  AttributeInput.propTypes = propTypes;
@@ -17,7 +17,7 @@ var _data_attributes = _interopRequireDefault(require("../utils/data_attributes"
17
17
 
18
18
  var _attribute_input = _interopRequireDefault(require("./attribute_input"));
19
19
 
20
- var _excluded = ["_modifierClass", "aria-label", "aria-labelledby", "aria-describedby", "attributes", "getRef", "id", "name", "onClick", "selected"];
20
+ var _excluded = ["_modifierClass", "aria-label", "aria-labelledby", "aria-describedby", "attributes", "disabled", "getRef", "id", "name", "onClick", "readOnly", "selected"];
21
21
 
22
22
  function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }
23
23
 
@@ -33,10 +33,12 @@ var propTypes = {
33
33
  'aria-labelledby': _propTypes.default.string,
34
34
  'aria-describedby': _propTypes.default.string,
35
35
  attributes: _propTypes.default.object.isRequired,
36
+ disabled: _propTypes.default.bool,
36
37
  getRef: _refs.getRefPropType,
37
38
  id: _propTypes.default.string,
38
- name: _propTypes.default.string,
39
+ name: _propTypes.default.string.isRequired,
39
40
  onClick: _propTypes.default.func.isRequired,
41
+ readOnly: _propTypes.default.bool,
40
42
  selected: _propTypes.default.string
41
43
  };
42
44
 
@@ -46,11 +48,12 @@ function AttributeSelector(_ref) {
46
48
  ariaLabelledby = _ref['aria-labelledby'],
47
49
  ariaDescribedby = _ref['aria-describedby'],
48
50
  attributes = _ref.attributes,
51
+ disabled = _ref.disabled,
49
52
  getRef = _ref.getRef,
50
53
  id = _ref.id,
51
- _ref$name = _ref.name,
52
- name = _ref$name === void 0 ? 'attributes' : _ref$name,
54
+ name = _ref.name,
53
55
  onClick = _ref.onClick,
56
+ readOnly = _ref.readOnly,
54
57
  selected = _ref.selected,
55
58
  rest = _objectWithoutProperties(_ref, _excluded);
56
59
 
@@ -61,11 +64,14 @@ function AttributeSelector(_ref) {
61
64
 
62
65
  function renderAttribute(attribute) {
63
66
  return _react.default.createElement(_attribute_input.default, {
64
- key: attribute,
65
- onChange: handleAttributeSelected,
66
67
  checked: attribute === selected,
68
+ disabled: disabled,
69
+ id: "".concat(name, "[").concat(attribute, "]"),
70
+ key: attribute,
67
71
  label: attributes[attribute],
68
72
  name: name,
73
+ onChange: handleAttributeSelected,
74
+ readOnly: readOnly,
69
75
  value: attribute
70
76
  });
71
77
  }
@@ -86,17 +92,6 @@ AttributeSelector.__docgenInfo = {
86
92
  "methods": [],
87
93
  "displayName": "AttributeSelector",
88
94
  "props": {
89
- "name": {
90
- "defaultValue": {
91
- "value": "'attributes'",
92
- "computed": false
93
- },
94
- "type": {
95
- "name": "string"
96
- },
97
- "required": false,
98
- "description": ""
99
- },
100
95
  "_modifierClass": {
101
96
  "type": {
102
97
  "name": "string"
@@ -132,6 +127,13 @@ AttributeSelector.__docgenInfo = {
132
127
  "required": true,
133
128
  "description": ""
134
129
  },
130
+ "disabled": {
131
+ "type": {
132
+ "name": "bool"
133
+ },
134
+ "required": false,
135
+ "description": ""
136
+ },
135
137
  "getRef": {
136
138
  "type": {
137
139
  "name": "custom",
@@ -147,6 +149,13 @@ AttributeSelector.__docgenInfo = {
147
149
  "required": false,
148
150
  "description": ""
149
151
  },
152
+ "name": {
153
+ "type": {
154
+ "name": "string"
155
+ },
156
+ "required": true,
157
+ "description": ""
158
+ },
150
159
  "onClick": {
151
160
  "type": {
152
161
  "name": "func"
@@ -154,6 +163,13 @@ AttributeSelector.__docgenInfo = {
154
163
  "required": true,
155
164
  "description": ""
156
165
  },
166
+ "readOnly": {
167
+ "type": {
168
+ "name": "bool"
169
+ },
170
+ "required": false,
171
+ "description": ""
172
+ },
157
173
  "selected": {
158
174
  "type": {
159
175
  "name": "string"
@@ -86,7 +86,7 @@ function Avatar(_ref) {
86
86
  img.src = avatarUrl;
87
87
  }, [avatarUrl]);
88
88
  var className = (0, _class_names.default)('Avatar', _modifierClass, {
89
- 'Avatar--background': !loaded
89
+ 'Avatar--loaded': loaded
90
90
  });
91
91
  var style = {
92
92
  backgroundImage: loaded ? "url('".concat(avatarUrl, "')") : undefined,
@@ -103,7 +103,7 @@ function Avatar(_ref) {
103
103
  style: style,
104
104
  title: title || name
105
105
  }, !loaded && _react.default.createElement("span", {
106
- className: "Avatar--initials",
106
+ className: "Avatar__Initials",
107
107
  style: size ? fontSizeStyle(size) : null
108
108
  }, (0, _strings.getInitials)(name)));
109
109
  }
@@ -28,7 +28,7 @@ function _objectWithoutProperties(source, excluded) { if (source == null) return
28
28
  function _objectWithoutPropertiesLoose(source, excluded) { if (source == null) return {}; var target = {}; var sourceKeys = Object.keys(source); var key, i; for (i = 0; i < sourceKeys.length; i++) { key = sourceKeys[i]; if (excluded.indexOf(key) >= 0) continue; target[key] = source[key]; } return target; }
29
29
 
30
30
  var ENUMS = {
31
- color: ['alert', 'close', 'coachmark', 'dscout', 'archive', 'none', 'success', 'note', 'screener', 'live', 'diary', 'test', 'invert'],
31
+ color: ['alert', 'close', 'coachmark', 'dscout', 'archive', 'none', 'success', 'note', 'screener', 'live', 'diary', 'test', 'invert', 'black', 'white'],
32
32
  size: ['big', 'small'],
33
33
  width: ['fullwidth', 'tight', 'wide'],
34
34
  variant: ['glass', 'outline', 'shadow']
@@ -226,6 +226,12 @@ Button.__docgenInfo = {
226
226
  }, {
227
227
  "value": "'invert'",
228
228
  "computed": false
229
+ }, {
230
+ "value": "'black'",
231
+ "computed": false
232
+ }, {
233
+ "value": "'white'",
234
+ "computed": false
229
235
  }]
230
236
  },
231
237
  "required": false,
@@ -59,7 +59,7 @@ function ButtonControl(_ref) {
59
59
  title = _ref.title,
60
60
  rest = _objectWithoutProperties(_ref, _excluded);
61
61
 
62
- var className = (0, _class_names.default)('btn', 'Button__Control', _modifierClass, {
62
+ var className = (0, _class_names.default)('Button__Control', _modifierClass, {
63
63
  'Button__Control--active': active
64
64
  });
65
65
  return _react.default.createElement("button", _extends({}, (0, _data_attributes.default)(rest), {
@@ -173,7 +173,9 @@ function ButtonIcon(_ref) {
173
173
  style: style,
174
174
  title: title,
175
175
  type: type
176
- }), children);
176
+ }), _react.default.createElement("span", {
177
+ className: "display--b"
178
+ }, children));
177
179
  }
178
180
 
179
181
  ButtonIcon.propTypes = propTypes;
@@ -28,6 +28,7 @@ var propTypes = {
28
28
  padding: _propTypes.default.oneOf(['none', '0.25', '0.5', '0.75', '1', '1.25', '1.5', '2', '3', '4']),
29
29
  shadow: _propTypes.default.oneOf(['s', 'm', 'l', 'xl'])
30
30
  };
31
+ var PADDING_CLASS_PATTERN = /padding-/;
31
32
 
32
33
  function Container(_ref) {
33
34
  var _classNames;
@@ -42,7 +43,8 @@ function Container(_ref) {
42
43
  _ref$padding = _ref.padding,
43
44
  padding = _ref$padding === void 0 ? '2' : _ref$padding,
44
45
  shadow = _ref.shadow;
45
- var className = (0, _class_names.default)('Container', _modifierClass, (_classNames = {}, _defineProperty(_classNames, "padding--".concat(padding), padding), _defineProperty(_classNames, "shadow--".concat(shadow), shadow), _classNames));
46
+ var modifierAppliesPadding = PADDING_CLASS_PATTERN.test(_modifierClass);
47
+ var className = (0, _class_names.default)('Container', _modifierClass, (_classNames = {}, _defineProperty(_classNames, "padding--".concat(padding), padding && !modifierAppliesPadding), _defineProperty(_classNames, "shadow--".concat(shadow), shadow), _classNames));
46
48
  return _react.default.createElement("div", {
47
49
  "aria-label": ariaLabel,
48
50
  "aria-labelledby": ariaLabelledby,
@@ -82,7 +82,7 @@ function FileInput(_ref) {
82
82
  type: "file"
83
83
  })), _react.default.createElement("label", {
84
84
  htmlFor: uniqueId,
85
- className: "File-Input__Label btn btn--small btn--color-dscout"
85
+ className: "File-Input__Label Button Button--small Button--color-dscout"
86
86
  }, label), _react.default.createElement("span", {
87
87
  className: "color--gray-2 margin-l--0.75"
88
88
  }, filename));
@@ -9,9 +9,12 @@ var _react = _interopRequireDefault(require("react"));
9
9
 
10
10
  var _propTypes = _interopRequireDefault(require("prop-types"));
11
11
 
12
+ var _class_names = _interopRequireDefault(require("../utils/class_names"));
13
+
12
14
  function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }
13
15
 
14
16
  var propTypes = {
17
+ _modifierClass: _propTypes.default.string,
15
18
  'aria-label': _propTypes.default.string,
16
19
  'aria-labelledby': _propTypes.default.string,
17
20
  'aria-describedby': _propTypes.default.string,
@@ -20,7 +23,8 @@ var propTypes = {
20
23
  };
21
24
 
22
25
  function InputGroup(_ref) {
23
- var ariaLabel = _ref['aria-label'],
26
+ var _modifierClass = _ref._modifierClass,
27
+ ariaLabel = _ref['aria-label'],
24
28
  ariaLabelledby = _ref['aria-labelledby'],
25
29
  ariaDescribedby = _ref['aria-describedby'],
26
30
  children = _ref.children,
@@ -29,7 +33,7 @@ function InputGroup(_ref) {
29
33
  "aria-label": ariaLabel,
30
34
  "aria-labelledby": ariaLabelledby,
31
35
  "aria-describedby": ariaDescribedby,
32
- className: "Input-Group",
36
+ className: (0, _class_names.default)('Input-Group', _modifierClass),
33
37
  id: id
34
38
  }, children);
35
39
  }
@@ -40,6 +44,13 @@ InputGroup.__docgenInfo = {
40
44
  "methods": [],
41
45
  "displayName": "InputGroup",
42
46
  "props": {
47
+ "_modifierClass": {
48
+ "type": {
49
+ "name": "string"
50
+ },
51
+ "required": false,
52
+ "description": ""
53
+ },
43
54
  "aria-label": {
44
55
  "type": {
45
56
  "name": "string"
@@ -49,7 +49,7 @@ function _isNativeReflectConstruct() { if (typeof Reflect === "undefined" || !Re
49
49
 
50
50
  function _getPrototypeOf(o) { _getPrototypeOf = Object.setPrototypeOf ? Object.getPrototypeOf : function _getPrototypeOf(o) { return o.__proto__ || Object.getPrototypeOf(o); }; return _getPrototypeOf(o); }
51
51
 
52
- var PADDING_ENUMS = ['none', '0.25', '0.5', '0.75', '1', '1.5', '2', '3', '4'];
52
+ var PADDING_ENUMS = ['none', '0.25', '0.5', '0.75', '1', '1.25', '1.5', '2', '3', '4'];
53
53
  var propTypes = {
54
54
  'aria-label': _propTypes.default.string,
55
55
  'aria-labelledby': _propTypes.default.string,
@@ -82,8 +82,9 @@ var Modal = /*#__PURE__*/function (_Component) {
82
82
  _classCallCheck(this, Modal);
83
83
 
84
84
  _this = _super.call(this);
85
- _this.handleClickWrapper = _this.handleClickWrapper.bind(_assertThisInitialized(_this));
86
85
  _this.handleKeyDown = _this.handleKeyDown.bind(_assertThisInitialized(_this));
86
+ _this.handleMouseDown = _this.handleMouseDown.bind(_assertThisInitialized(_this));
87
+ _this.handleMouseUp = _this.handleMouseUp.bind(_assertThisInitialized(_this));
87
88
  return _this;
88
89
  }
89
90
 
@@ -113,18 +114,35 @@ var Modal = /*#__PURE__*/function (_Component) {
113
114
  key: "handleOpen",
114
115
  value: function handleOpen() {
115
116
  (0, _dom.toggleBodyScrolling)(true);
116
- }
117
+ } // Click events that start and end in different elements are triggered on
118
+ // the first common ancestor. When one of those elements is the backdrop,
119
+ // the modal wrapper receives the event. To prevent the modal from
120
+ // dismissing unexpectedly when this happens we are separately subscribing
121
+ // to the mousedown and mouseup events so that we can detect this situation
122
+ // and ensure that the modal is only dismissed when a click starts and
123
+ // ends on the backdrop.
124
+
117
125
  }, {
118
- key: "handleClickWrapper",
119
- value: function handleClickWrapper(_ref) {
126
+ key: "handleMouseDown",
127
+ value: function handleMouseDown(_ref) {
120
128
  var target = _ref.target;
121
- if (this.wrapper && target !== this.wrapper) return;
122
- this.props.requestClose();
129
+ this.mouseDownElement = target;
130
+ }
131
+ }, {
132
+ key: "handleMouseUp",
133
+ value: function handleMouseUp(_ref2) {
134
+ var target = _ref2.target;
135
+
136
+ if (target === this.wrapper && this.mouseDownElement === this.wrapper) {
137
+ this.props.requestClose();
138
+ }
139
+
140
+ this.mouseDownElement = null;
123
141
  }
124
142
  }, {
125
143
  key: "handleKeyDown",
126
- value: function handleKeyDown(_ref2) {
127
- var key = _ref2.key;
144
+ value: function handleKeyDown(_ref3) {
145
+ var key = _ref3.key;
128
146
  if (this.props.isOpen && key === 'Escape') this.props.requestClose();
129
147
  }
130
148
  }, {
@@ -145,18 +163,17 @@ var Modal = /*#__PURE__*/function (_Component) {
145
163
  maxWidth = _this$props.maxWidth,
146
164
  padding = _this$props.padding,
147
165
  zIndex = _this$props.zIndex;
148
- var paddingClass = "padding--".concat(padding);
149
- var innerClassName = (0, _class_names.default)('Container--Inner', paddingClass);
150
- var modalClassName = (0, _class_names.default)('Container Modal Modal--animation', {
166
+ var modalClassName = (0, _class_names.default)('Container', 'Modal', "padding--".concat(padding), {
151
167
  'Modal--hidden': !isOpen
152
168
  });
153
- var wrapperClassName = (0, _class_names.default)('Modal__Wrapper', (_classNames = {}, _defineProperty(_classNames, "Modal__Wrapper--backdrop--".concat(backdropColor), backdropColor), _defineProperty(_classNames, 'Modal__Wrapper--hidden', !isOpen), _classNames));
169
+ var wrapperClassName = (0, _class_names.default)('Modal__Wrapper', (_classNames = {}, _defineProperty(_classNames, "Modal__Wrapper--backdrop-".concat(backdropColor), backdropColor), _defineProperty(_classNames, 'Modal__Wrapper--hidden', !isOpen), _classNames));
154
170
  return _react.default.createElement("div", {
155
171
  className: wrapperClassName,
156
- onClick: this.handleClickWrapper,
157
172
  onKeyDown: this.handleKeyDown,
158
- ref: function ref(_ref3) {
159
- _this2.wrapper = _ref3;
173
+ onMouseDown: this.handleMouseDown,
174
+ onMouseUp: this.handleMouseUp,
175
+ ref: function ref(_ref4) {
176
+ _this2.wrapper = _ref4;
160
177
  },
161
178
  style: {
162
179
  zIndex: zIndex
@@ -183,9 +200,7 @@ var Modal = /*#__PURE__*/function (_Component) {
183
200
  maxWidth: maxWidth
184
201
  },
185
202
  tabIndex: isOpen ? -1 : undefined
186
- }, _react.default.createElement("div", {
187
- className: innerClassName
188
- }, this.props.children)));
203
+ }, this.props.children));
189
204
  }
190
205
  }]);
191
206
 
@@ -209,7 +224,16 @@ Modal.__docgenInfo = {
209
224
  "params": [],
210
225
  "returns": null
211
226
  }, {
212
- "name": "handleClickWrapper",
227
+ "name": "handleMouseDown",
228
+ "docblock": null,
229
+ "modifiers": [],
230
+ "params": [{
231
+ "name": "{ target }",
232
+ "type": null
233
+ }],
234
+ "returns": null
235
+ }, {
236
+ "name": "handleMouseUp",
213
237
  "docblock": null,
214
238
  "modifiers": [],
215
239
  "params": [{
@@ -262,6 +286,9 @@ Modal.__docgenInfo = {
262
286
  }, {
263
287
  "value": "'1'",
264
288
  "computed": false
289
+ }, {
290
+ "value": "'1.25'",
291
+ "computed": false
265
292
  }, {
266
293
  "value": "'1.5'",
267
294
  "computed": false
@@ -159,9 +159,9 @@ var TagsInput = /*#__PURE__*/function (_Component) {
159
159
  'Input--filled': tags.length || value,
160
160
  'Input--focused': focused,
161
161
  'Input--invalid': invalid,
162
- 'max-height--2': maxHeight === 'small',
163
- 'max-height--3': maxHeight === 'medium',
164
- 'max-height--6': maxHeight === 'large'
162
+ 'max-height--4': maxHeight === 'small',
163
+ 'max-height--6': maxHeight === 'medium',
164
+ 'max-height--12': maxHeight === 'large'
165
165
  });
166
166
  return _react.default.createElement("div", {
167
167
  className: className,