@canonical/react-components 4.5.0 → 4.5.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.
@@ -24,6 +24,9 @@ export type MultiSelectProps = {
24
24
  renderItem?: (item: MultiSelectItem) => ReactNode;
25
25
  dropdownHeader?: ReactNode;
26
26
  dropdownFooter?: ReactNode;
27
+ footerClassName?: string;
28
+ inputClassName?: string;
29
+ dropdownClassName?: string;
27
30
  emptyState?: ReactNode;
28
31
  emptyMessage?: string;
29
32
  showDropdownFooter?: boolean;
@@ -35,6 +38,7 @@ export type MultiSelectProps = {
35
38
  onSearchChange?: (value: string) => void;
36
39
  onOpen?: () => void;
37
40
  onClose?: () => void;
41
+ searchButtonType?: "submit" | "button";
38
42
  };
39
43
  type GroupFn = (items: Parameters<typeof getGroupedItems>[0]) => ReturnType<typeof getGroupedItems>;
40
44
  type SortFn = typeof sortAlphabetically;
@@ -48,6 +52,8 @@ type MultiSelectDropdownProps = {
48
52
  onDeselectItem?: (item: MultiSelectItem) => void;
49
53
  onSelectItem?: (item: MultiSelectItem) => void;
50
54
  footer?: ReactNode;
55
+ footerClassName?: string;
56
+ dropdownClassName?: string;
51
57
  emptyState?: ReactNode;
52
58
  emptyMessage?: string;
53
59
  groupFn?: GroupFn;
@@ -10,7 +10,7 @@ var _react = _interopRequireWildcard(require("react"));
10
10
  require("./MultiSelect.scss");
11
11
  var _index = require("../../index");
12
12
  var _FadeInDown = require("./FadeInDown");
13
- const _excluded = ["items", "selectedItems", "disabledItems", "header", "updateItems", "onSelectItem", "onDeselectItem", "isOpen", "footer", "emptyState", "emptyMessage", "sortFn", "groupFn", "hasSelectedItemsFirst"];
13
+ const _excluded = ["items", "selectedItems", "disabledItems", "header", "updateItems", "onSelectItem", "onDeselectItem", "isOpen", "footer", "dropdownClassName", "footerClassName", "emptyState", "emptyMessage", "sortFn", "groupFn", "hasSelectedItemsFirst"];
14
14
  function _interopRequireWildcard(e, t) { if ("function" == typeof WeakMap) var r = new WeakMap(), n = new WeakMap(); return (_interopRequireWildcard = function (e, t) { if (!t && e && e.__esModule) return e; var o, i, f = { __proto__: null, default: e }; if (null === e || "object" != typeof e && "function" != typeof e) return f; if (o = t ? n : r) { if (o.has(e)) return o.get(e); o.set(e, f); } for (const t in e) "default" !== t && {}.hasOwnProperty.call(e, t) && ((i = (o = Object.defineProperty) && Object.getOwnPropertyDescriptor(e, t)) && (i.get || i.set) ? o(f, t, i) : f[t] = e[t]); return f; })(e, t); }
15
15
  function _interopRequireDefault(e) { return e && e.__esModule ? e : { default: e }; }
16
16
  function _extends() { return _extends = Object.assign ? Object.assign.bind() : function (n) { for (var e = 1; e < arguments.length; e++) { var t = arguments[e]; for (var r in t) ({}).hasOwnProperty.call(t, r) && (n[r] = t[r]); } return n; }, _extends.apply(null, arguments); }
@@ -57,6 +57,8 @@ const MultiSelectDropdown = _ref2 => {
57
57
  onDeselectItem,
58
58
  isOpen,
59
59
  footer,
60
+ dropdownClassName,
61
+ footerClassName,
60
62
  emptyState,
61
63
  emptyMessage,
62
64
  sortFn = sortAlphabetically,
@@ -101,7 +103,7 @@ const MultiSelectDropdown = _ref2 => {
101
103
  return /*#__PURE__*/_react.default.createElement(_FadeInDown.FadeInDown, {
102
104
  isVisible: isOpen
103
105
  }, /*#__PURE__*/_react.default.createElement("div", _extends({
104
- className: "multi-select__dropdown",
106
+ className: (0, _classnames.default)("multi-select__dropdown", dropdownClassName),
105
107
  role: "listbox"
106
108
  }, props), header ? header : null, hasItems ? groupedItems.map(_ref3 => {
107
109
  let {
@@ -130,7 +132,7 @@ const MultiSelectDropdown = _ref2 => {
130
132
  }) : emptyState !== null && emptyState !== void 0 ? emptyState : emptyMessage ? /*#__PURE__*/_react.default.createElement("p", {
131
133
  className: "multi-select__empty-state"
132
134
  }, emptyMessage) : null, footer ? /*#__PURE__*/_react.default.createElement("div", {
133
- className: "multi-select__footer"
135
+ className: (0, _classnames.default)("multi-select__footer", footerClassName)
134
136
  }, footer) : null));
135
137
  };
136
138
 
@@ -163,6 +165,8 @@ MultiSelectDropdown.propTypes = {
163
165
  onDeselectItem: _propTypes.default.func,
164
166
  onSelectItem: _propTypes.default.func,
165
167
  footer: _propTypes.default.node,
168
+ footerClassName: _propTypes.default.string,
169
+ dropdownClassName: _propTypes.default.string,
166
170
  emptyState: _propTypes.default.node,
167
171
  emptyMessage: _propTypes.default.string,
168
172
  groupFn: _propTypes.default.func,
@@ -184,8 +188,12 @@ const MultiSelect = _ref4 => {
184
188
  disabledItems = [],
185
189
  dropdownHeader,
186
190
  dropdownFooter,
191
+ footerClassName,
192
+ dropdownClassName,
193
+ inputClassName,
187
194
  emptyState,
188
195
  emptyMessage,
196
+ searchButtonType = "submit",
189
197
  showDropdownFooter = true,
190
198
  variant = "search",
191
199
  scrollOverflow = false,
@@ -282,7 +290,8 @@ const MultiSelect = _ref4 => {
282
290
  required: required,
283
291
  type: "text",
284
292
  value: filter,
285
- className: "multi-select__input"
293
+ searchButtonType: searchButtonType,
294
+ className: (0, _classnames.default)("multi-select__input", inputClassName)
286
295
  }) : /*#__PURE__*/_react.default.createElement("button", {
287
296
  role: "combobox",
288
297
  type: "button",
@@ -326,6 +335,8 @@ const MultiSelect = _ref4 => {
326
335
  onSelectItem: onSelectItem,
327
336
  onDeselectItem: onDeselectItem,
328
337
  footer: footer,
338
+ footerClassName: footerClassName,
339
+ dropdownClassName: dropdownClassName,
329
340
  emptyState: emptyState,
330
341
  emptyMessage: emptyMessage,
331
342
  sortFn: isSortedAlphabetically ? sortAlphabetically : () => 0,
@@ -366,12 +377,12 @@ MultiSelect.propTypes = {
366
377
  renderItem: _propTypes.default.func,
367
378
  dropdownHeader: _propTypes.default.node,
368
379
  dropdownFooter: _propTypes.default.node,
380
+ footerClassName: _propTypes.default.string,
381
+ inputClassName: _propTypes.default.string,
382
+ dropdownClassName: _propTypes.default.string,
369
383
  emptyState: _propTypes.default.node,
370
384
  emptyMessage: _propTypes.default.string,
371
385
  showDropdownFooter: _propTypes.default.bool,
372
386
  variant: _propTypes.default.oneOf(["condensed", "search"]),
373
- scrollOverflow: _propTypes.default.bool,
374
- isSortedAlphabetically: _propTypes.default.bool,
375
- hasSelectedItemsFirst: _propTypes.default.bool,
376
- id: _propTypes.default.string
387
+ scrollOverflow: _propTypes.default.bool
377
388
  };
@@ -37,6 +37,10 @@ export type Props = PropsWithSpread<{
37
37
  * A search input placeholder message.
38
38
  */
39
39
  placeholder?: string;
40
+ /**
41
+ * Whether the search button should be a button or submit type.
42
+ */
43
+ searchButtonType?: "submit" | "button";
40
44
  /**
41
45
  * Whether the search input should lose focus when searching.
42
46
  */
@@ -7,7 +7,7 @@ exports.default = exports.Label = void 0;
7
7
  var _classnames = _interopRequireDefault(require("classnames"));
8
8
  var _react = _interopRequireWildcard(require("react"));
9
9
  var _Icon = _interopRequireDefault(require("../Icon"));
10
- const _excluded = ["name", "id", "autocomplete", "className", "disabled", "externallyControlled", "onChange", "onSearch", "onClear", "placeholder", "shouldBlurOnSearch", "shouldRefocusAfterReset", "value"];
10
+ const _excluded = ["name", "id", "autocomplete", "className", "disabled", "externallyControlled", "onChange", "onSearch", "onClear", "searchButtonType", "placeholder", "shouldBlurOnSearch", "shouldRefocusAfterReset", "value"];
11
11
  function _interopRequireWildcard(e, t) { if ("function" == typeof WeakMap) var r = new WeakMap(), n = new WeakMap(); return (_interopRequireWildcard = function (e, t) { if (!t && e && e.__esModule) return e; var o, i, f = { __proto__: null, default: e }; if (null === e || "object" != typeof e && "function" != typeof e) return f; if (o = t ? n : r) { if (o.has(e)) return o.get(e); o.set(e, f); } for (const t in e) "default" !== t && {}.hasOwnProperty.call(e, t) && ((i = (o = Object.defineProperty) && Object.getOwnPropertyDescriptor(e, t)) && (i.get || i.set) ? o(f, t, i) : f[t] = e[t]); return f; })(e, t); }
12
12
  function _interopRequireDefault(e) { return e && e.__esModule ? e : { default: e }; }
13
13
  function _extends() { return _extends = Object.assign ? Object.assign.bind() : function (n) { for (var e = 1; e < arguments.length; e++) { var t = arguments[e]; for (var r in t) ({}).hasOwnProperty.call(t, r) && (n[r] = t[r]); } return n; }, _extends.apply(null, arguments); }
@@ -34,6 +34,7 @@ const SearchBox = /*#__PURE__*/_react.default.forwardRef((_ref, forwardedRef) =>
34
34
  onChange,
35
35
  onSearch,
36
36
  onClear,
37
+ searchButtonType = "submit",
37
38
  placeholder = "Search",
38
39
  shouldBlurOnSearch = true,
39
40
  shouldRefocusAfterReset,
@@ -102,7 +103,8 @@ const SearchBox = /*#__PURE__*/_react.default.forwardRef((_ref, forwardedRef) =>
102
103
  }, Label.Clear)), /*#__PURE__*/_react.default.createElement("button", {
103
104
  className: "p-search-box__button",
104
105
  disabled: disabled,
105
- onClick: triggerSearch
106
+ onClick: triggerSearch,
107
+ type: searchButtonType
106
108
  }, /*#__PURE__*/_react.default.createElement(_Icon.default, {
107
109
  name: "search"
108
110
  }, Label.Search)));
@@ -24,6 +24,9 @@ export type MultiSelectProps = {
24
24
  renderItem?: (item: MultiSelectItem) => ReactNode;
25
25
  dropdownHeader?: ReactNode;
26
26
  dropdownFooter?: ReactNode;
27
+ footerClassName?: string;
28
+ inputClassName?: string;
29
+ dropdownClassName?: string;
27
30
  emptyState?: ReactNode;
28
31
  emptyMessage?: string;
29
32
  showDropdownFooter?: boolean;
@@ -35,6 +38,7 @@ export type MultiSelectProps = {
35
38
  onSearchChange?: (value: string) => void;
36
39
  onOpen?: () => void;
37
40
  onClose?: () => void;
41
+ searchButtonType?: "submit" | "button";
38
42
  };
39
43
  type GroupFn = (items: Parameters<typeof getGroupedItems>[0]) => ReturnType<typeof getGroupedItems>;
40
44
  type SortFn = typeof sortAlphabetically;
@@ -48,6 +52,8 @@ type MultiSelectDropdownProps = {
48
52
  onDeselectItem?: (item: MultiSelectItem) => void;
49
53
  onSelectItem?: (item: MultiSelectItem) => void;
50
54
  footer?: ReactNode;
55
+ footerClassName?: string;
56
+ dropdownClassName?: string;
51
57
  emptyState?: ReactNode;
52
58
  emptyMessage?: string;
53
59
  groupFn?: GroupFn;
@@ -1,5 +1,5 @@
1
1
  import _pt from "prop-types";
2
- var _excluded = ["items", "selectedItems", "disabledItems", "header", "updateItems", "onSelectItem", "onDeselectItem", "isOpen", "footer", "emptyState", "emptyMessage", "sortFn", "groupFn", "hasSelectedItemsFirst"];
2
+ var _excluded = ["items", "selectedItems", "disabledItems", "header", "updateItems", "onSelectItem", "onDeselectItem", "isOpen", "footer", "dropdownClassName", "footerClassName", "emptyState", "emptyMessage", "sortFn", "groupFn", "hasSelectedItemsFirst"];
3
3
  function _extends() { return _extends = Object.assign ? Object.assign.bind() : function (n) { for (var e = 1; e < arguments.length; e++) { var t = arguments[e]; for (var r in t) ({}).hasOwnProperty.call(t, r) && (n[r] = t[r]); } return n; }, _extends.apply(null, arguments); }
4
4
  function _objectWithoutProperties(e, t) { if (null == e) return {}; var o, r, i = _objectWithoutPropertiesLoose(e, t); if (Object.getOwnPropertySymbols) { var n = Object.getOwnPropertySymbols(e); for (r = 0; r < n.length; r++) o = n[r], -1 === t.indexOf(o) && {}.propertyIsEnumerable.call(e, o) && (i[o] = e[o]); } return i; }
5
5
  function _objectWithoutPropertiesLoose(r, e) { if (null == r) return {}; var t = {}; for (var n in r) if ({}.hasOwnProperty.call(r, n)) { if (-1 !== e.indexOf(n)) continue; t[n] = r[n]; } return t; }
@@ -49,6 +49,8 @@ export var MultiSelectDropdown = _ref2 => {
49
49
  onDeselectItem,
50
50
  isOpen,
51
51
  footer,
52
+ dropdownClassName,
53
+ footerClassName,
52
54
  emptyState,
53
55
  emptyMessage,
54
56
  sortFn = sortAlphabetically,
@@ -93,7 +95,7 @@ export var MultiSelectDropdown = _ref2 => {
93
95
  return /*#__PURE__*/React.createElement(FadeInDown, {
94
96
  isVisible: isOpen
95
97
  }, /*#__PURE__*/React.createElement("div", _extends({
96
- className: "multi-select__dropdown",
98
+ className: classNames("multi-select__dropdown", dropdownClassName),
97
99
  role: "listbox"
98
100
  }, props), header ? header : null, hasItems ? groupedItems.map(_ref3 => {
99
101
  var {
@@ -122,7 +124,7 @@ export var MultiSelectDropdown = _ref2 => {
122
124
  }) : emptyState !== null && emptyState !== void 0 ? emptyState : emptyMessage ? /*#__PURE__*/React.createElement("p", {
123
125
  className: "multi-select__empty-state"
124
126
  }, emptyMessage) : null, footer ? /*#__PURE__*/React.createElement("div", {
125
- className: "multi-select__footer"
127
+ className: classNames("multi-select__footer", footerClassName)
126
128
  }, footer) : null));
127
129
  };
128
130
 
@@ -154,6 +156,8 @@ MultiSelectDropdown.propTypes = {
154
156
  onDeselectItem: _pt.func,
155
157
  onSelectItem: _pt.func,
156
158
  footer: _pt.node,
159
+ footerClassName: _pt.string,
160
+ dropdownClassName: _pt.string,
157
161
  emptyState: _pt.node,
158
162
  emptyMessage: _pt.string,
159
163
  groupFn: _pt.func,
@@ -175,8 +179,12 @@ export var MultiSelect = _ref4 => {
175
179
  disabledItems = [],
176
180
  dropdownHeader,
177
181
  dropdownFooter,
182
+ footerClassName,
183
+ dropdownClassName,
184
+ inputClassName,
178
185
  emptyState,
179
186
  emptyMessage,
187
+ searchButtonType = "submit",
180
188
  showDropdownFooter = true,
181
189
  variant = "search",
182
190
  scrollOverflow = false,
@@ -273,7 +281,8 @@ export var MultiSelect = _ref4 => {
273
281
  required: required,
274
282
  type: "text",
275
283
  value: filter,
276
- className: "multi-select__input"
284
+ searchButtonType: searchButtonType,
285
+ className: classNames("multi-select__input", inputClassName)
277
286
  }) : /*#__PURE__*/React.createElement("button", {
278
287
  role: "combobox",
279
288
  type: "button",
@@ -317,6 +326,8 @@ export var MultiSelect = _ref4 => {
317
326
  onSelectItem: onSelectItem,
318
327
  onDeselectItem: onDeselectItem,
319
328
  footer: footer,
329
+ footerClassName: footerClassName,
330
+ dropdownClassName: dropdownClassName,
320
331
  emptyState: emptyState,
321
332
  emptyMessage: emptyMessage,
322
333
  sortFn: isSortedAlphabetically ? sortAlphabetically : () => 0,
@@ -356,12 +367,12 @@ MultiSelect.propTypes = {
356
367
  renderItem: _pt.func,
357
368
  dropdownHeader: _pt.node,
358
369
  dropdownFooter: _pt.node,
370
+ footerClassName: _pt.string,
371
+ inputClassName: _pt.string,
372
+ dropdownClassName: _pt.string,
359
373
  emptyState: _pt.node,
360
374
  emptyMessage: _pt.string,
361
375
  showDropdownFooter: _pt.bool,
362
376
  variant: _pt.oneOf(["condensed", "search"]),
363
- scrollOverflow: _pt.bool,
364
- isSortedAlphabetically: _pt.bool,
365
- hasSelectedItemsFirst: _pt.bool,
366
- id: _pt.string
377
+ scrollOverflow: _pt.bool
367
378
  };
@@ -37,6 +37,10 @@ export type Props = PropsWithSpread<{
37
37
  * A search input placeholder message.
38
38
  */
39
39
  placeholder?: string;
40
+ /**
41
+ * Whether the search button should be a button or submit type.
42
+ */
43
+ searchButtonType?: "submit" | "button";
40
44
  /**
41
45
  * Whether the search input should lose focus when searching.
42
46
  */
@@ -1,4 +1,4 @@
1
- var _excluded = ["name", "id", "autocomplete", "className", "disabled", "externallyControlled", "onChange", "onSearch", "onClear", "placeholder", "shouldBlurOnSearch", "shouldRefocusAfterReset", "value"];
1
+ var _excluded = ["name", "id", "autocomplete", "className", "disabled", "externallyControlled", "onChange", "onSearch", "onClear", "searchButtonType", "placeholder", "shouldBlurOnSearch", "shouldRefocusAfterReset", "value"];
2
2
  function _extends() { return _extends = Object.assign ? Object.assign.bind() : function (n) { for (var e = 1; e < arguments.length; e++) { var t = arguments[e]; for (var r in t) ({}).hasOwnProperty.call(t, r) && (n[r] = t[r]); } return n; }, _extends.apply(null, arguments); }
3
3
  function _objectWithoutProperties(e, t) { if (null == e) return {}; var o, r, i = _objectWithoutPropertiesLoose(e, t); if (Object.getOwnPropertySymbols) { var n = Object.getOwnPropertySymbols(e); for (r = 0; r < n.length; r++) o = n[r], -1 === t.indexOf(o) && {}.propertyIsEnumerable.call(e, o) && (i[o] = e[o]); } return i; }
4
4
  function _objectWithoutPropertiesLoose(r, e) { if (null == r) return {}; var t = {}; for (var n in r) if ({}.hasOwnProperty.call(r, n)) { if (-1 !== e.indexOf(n)) continue; t[n] = r[n]; } return t; }
@@ -26,6 +26,7 @@ var SearchBox = /*#__PURE__*/React.forwardRef((_ref, forwardedRef) => {
26
26
  onChange: _onChange,
27
27
  onSearch,
28
28
  onClear,
29
+ searchButtonType = "submit",
29
30
  placeholder = "Search",
30
31
  shouldBlurOnSearch = true,
31
32
  shouldRefocusAfterReset,
@@ -94,7 +95,8 @@ var SearchBox = /*#__PURE__*/React.forwardRef((_ref, forwardedRef) => {
94
95
  }, Label.Clear)), /*#__PURE__*/React.createElement("button", {
95
96
  className: "p-search-box__button",
96
97
  disabled: disabled,
97
- onClick: triggerSearch
98
+ onClick: triggerSearch,
99
+ type: searchButtonType
98
100
  }, /*#__PURE__*/React.createElement(Icon, {
99
101
  name: "search"
100
102
  }, Label.Search)));
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@canonical/react-components",
3
- "version": "4.5.0",
3
+ "version": "4.5.1",
4
4
  "main": "dist/index.js",
5
5
  "module": "dist/index.js",
6
6
  "author": {