@phillips/seldon 1.96.1 → 1.97.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 (31) hide show
  1. package/dist/components/DatePicker/DatePicker.d.ts +1 -1
  2. package/dist/components/Filter/Filter.d.ts +25 -0
  3. package/dist/components/Filter/Filter.js +62 -0
  4. package/dist/components/Filter/Filter.stories.d.ts +29 -0
  5. package/dist/components/Filter/Filter.test.d.ts +1 -0
  6. package/dist/components/Filter/FilterHeader.d.ts +14 -0
  7. package/dist/components/Filter/FilterHeader.js +36 -0
  8. package/dist/components/Filter/FilterInput.d.ts +15 -0
  9. package/dist/components/Filter/FilterInput.js +27 -0
  10. package/dist/components/Filter/index.d.ts +3 -0
  11. package/dist/components/Input/Input.d.ts +5 -5
  12. package/dist/components/Input/Input.js +67 -53
  13. package/dist/components/Input/Input.stories.d.ts +0 -1
  14. package/dist/components/Pagination/Pagination.js +27 -26
  15. package/dist/components/Select/Select.d.ts +3 -2
  16. package/dist/components/Select/Select.js +53 -44
  17. package/dist/index.d.ts +3 -0
  18. package/dist/index.js +148 -140
  19. package/dist/patterns/FilterMenu/FilterMenu.d.ts +22 -0
  20. package/dist/patterns/FilterMenu/FilterMenu.js +23 -0
  21. package/dist/patterns/FilterMenu/FilterMenu.stories.d.ts +29 -0
  22. package/dist/patterns/FilterMenu/FilterMenu.test.d.ts +1 -0
  23. package/dist/patterns/FilterMenu/index.d.ts +1 -0
  24. package/dist/patterns/FilterMenu/utils.d.ts +10 -0
  25. package/dist/patterns/ViewingsList/ViewingsListCard.js +1 -1
  26. package/dist/patterns/ViewingsList/ViewingsListCardForm.js +30 -32
  27. package/dist/scss/componentStyles.scss +9 -7
  28. package/dist/scss/components/Filter/_filter.scss +112 -0
  29. package/dist/scss/components/Input/_input.scss +1 -1
  30. package/dist/scss/patterns/FilterMenu/_filterMenu.scss +15 -0
  31. package/package.json +2 -1
@@ -1,7 +1,7 @@
1
1
  import { default as flatpickr } from 'flatpickr';
2
2
  import { InputProps } from '../Input/Input';
3
3
  import * as React from 'react';
4
- export interface DatePickerProps extends Omit<InputProps, 'defaultValue'>, Record<string, unknown> {
4
+ export interface DatePickerProps extends Omit<InputProps, 'defaultValue' | 'onChange'>, Record<string, unknown> {
5
5
  /**
6
6
  * Optionally allow manual entry to the date input
7
7
  */
@@ -0,0 +1,25 @@
1
+ import { ComponentProps, Dispatch, SetStateAction } from 'react';
2
+ export interface FilterProps extends ComponentProps<'div'> {
3
+ /** Logical name of this filter */
4
+ name: string;
5
+ setViewAllFilter?: Dispatch<SetStateAction<string>>;
6
+ viewAllLimit?: number;
7
+ isViewingAll?: boolean;
8
+ isHidden?: boolean;
9
+ /**
10
+ * translatable string for view all button
11
+ */
12
+ viewAllLabel?: string;
13
+ }
14
+ /**
15
+ * ## Overview
16
+ *
17
+ * Component to display filtering dimensions
18
+ *
19
+ * [Figma Link](https://www.figma.com/design/OvBXAq48blO1r4qYbeBPjW/RW---Sale-Page-(PLP)?node-id=892-71019&node-type=frame&t=AsBDn4UgUEjNUnf7-0)
20
+ *
21
+ * [Storybook Link](https://phillips-seldon.netlify.app/?path=/docs/components-filter--overview)
22
+ */
23
+ declare const Filter: import('react').ForwardRefExoticComponent<Omit<FilterProps, "ref"> & import('react').RefAttributes<HTMLDivElement>>;
24
+ export type FilterComponent = ReturnType<typeof Filter>;
25
+ export default Filter;
@@ -0,0 +1,62 @@
1
+ import { jsxs as n, jsx as f } from "react/jsx-runtime";
2
+ import { forwardRef as B, useState as S, Children as T, isValidElement as p, cloneElement as h } from "react";
3
+ import { getCommonProps as b, findChildrenOfType as k, findChildrenExcludingTypes as F, px as I } from "../../utils/index.js";
4
+ import O from "../../node_modules/classnames/index.js";
5
+ import C from "./FilterHeader.js";
6
+ import R from "../Button/Button.js";
7
+ import { ButtonVariants as q } from "../Button/types.js";
8
+ import z from "../../assets/chevronNext.svg.js";
9
+ const D = B(
10
+ ({
11
+ className: N,
12
+ children: u,
13
+ name: t,
14
+ viewAllLimit: m = 10,
15
+ isViewingAll: s = !1,
16
+ isHidden: _ = !1,
17
+ setViewAllFilter: e,
18
+ viewAllLabel: v = "View All",
19
+ ...d
20
+ }, x) => {
21
+ var l, c;
22
+ const [y, g] = S(!1), { className: r, ...$ } = b(d, "Filter"), o = T.toArray(u), E = { isViewingAll: s, setViewAllFilter: e, setIsClosing: g }, i = (l = k(o, C)) == null ? void 0 : l[0], H = p(i) ? h(i, E) : null, P = (c = F(o, [C])) == null ? void 0 : c.map(
23
+ (a, j) => p(a) ? h(a, { hidden: !s && j + 1 > m }) : a
24
+ );
25
+ return /* @__PURE__ */ n(
26
+ "div",
27
+ {
28
+ ...$,
29
+ className: O(r, N, {
30
+ [`${I}-filter--hidden`]: _,
31
+ "is-closing": y
32
+ }),
33
+ ...d,
34
+ ref: x,
35
+ children: [
36
+ /* @__PURE__ */ n("fieldset", { name: t, className: `${r}__fieldset`, children: [
37
+ H,
38
+ /* @__PURE__ */ f("div", { className: `${r}__filters`, children: P })
39
+ ] }),
40
+ o.length > m && !s ? /* @__PURE__ */ n(
41
+ R,
42
+ {
43
+ className: `${r}__view-all`,
44
+ variant: q.tertiary,
45
+ onClick: () => {
46
+ e == null || e(t);
47
+ },
48
+ children: [
49
+ v,
50
+ /* @__PURE__ */ f(z, { className: `${r}__chevron` })
51
+ ]
52
+ }
53
+ ) : null
54
+ ]
55
+ }
56
+ );
57
+ }
58
+ );
59
+ D.displayName = "Filter";
60
+ export {
61
+ D as default
62
+ };
@@ -0,0 +1,29 @@
1
+ declare const meta: {
2
+ title: string;
3
+ component: import('react').ForwardRefExoticComponent<Omit<import('./Filter').FilterProps, "ref"> & import('react').RefAttributes<HTMLDivElement>>;
4
+ };
5
+ export default meta;
6
+ type FilterDimension = {
7
+ label: string;
8
+ disabled?: boolean | undefined;
9
+ checked: boolean;
10
+ };
11
+ type FilterType = {
12
+ label: string;
13
+ id: string;
14
+ filterDimensions: FilterDimension[];
15
+ };
16
+ type PropTypes = {
17
+ filter: FilterType;
18
+ viewAllLimit: number;
19
+ isViewingAll: boolean;
20
+ };
21
+ export declare const Playground: {
22
+ (props: PropTypes): import("react/jsx-runtime").JSX.Element;
23
+ args: {
24
+ filter: FilterType;
25
+ viewAllLimit: number;
26
+ isViewingAll: boolean;
27
+ };
28
+ argTypes: {};
29
+ };
@@ -0,0 +1 @@
1
+ export {};
@@ -0,0 +1,14 @@
1
+ import { ComponentProps, Dispatch, SetStateAction } from 'react';
2
+ export interface FilterHeaderProps extends ComponentProps<'div'> {
3
+ heading: string;
4
+ isViewingAll?: boolean;
5
+ setViewAllFilter?: Dispatch<SetStateAction<null>>;
6
+ setIsClosing?: Dispatch<SetStateAction<boolean>>;
7
+ }
8
+ /**
9
+ * ## Overview
10
+ *
11
+ * The header of a filter
12
+ */
13
+ declare const FilterHeader: import('react').ForwardRefExoticComponent<Omit<FilterHeaderProps, "ref"> & import('react').RefAttributes<HTMLDivElement>>;
14
+ export default FilterHeader;
@@ -0,0 +1,36 @@
1
+ import { jsxs as t, jsx as o } from "react/jsx-runtime";
2
+ import { forwardRef as u } from "react";
3
+ import { getCommonProps as N } from "../../utils/index.js";
4
+ import l from "../../node_modules/classnames/index.js";
5
+ import { TextVariants as v } from "../Text/types.js";
6
+ import x from "../Text/Text.js";
7
+ import _ from "../Button/Button.js";
8
+ import { ButtonVariants as k } from "../Button/types.js";
9
+ import B from "../../assets/chevronNext.svg.js";
10
+ const H = u(
11
+ ({ className: c, heading: n, isViewingAll: d = !1, setViewAllFilter: m, setIsClosing: a, ...e }, f) => {
12
+ const { className: r, ...p } = N(e, "FilterHeader"), i = () => {
13
+ a == null || a(!0), setTimeout(() => {
14
+ m == null || m(null), a == null || a(!1);
15
+ }, 300);
16
+ };
17
+ return /* @__PURE__ */ t("div", { ...p, className: l(r, c), ...e, ref: f, children: [
18
+ /* @__PURE__ */ o(
19
+ x,
20
+ {
21
+ variant: v.heading4,
22
+ className: `${r}__heading`,
23
+ element: (h) => /* @__PURE__ */ o("legend", { ...h, children: n })
24
+ }
25
+ ),
26
+ d ? /* @__PURE__ */ t(_, { variant: k.tertiary, onClick: i, className: `${r}__back`, children: [
27
+ /* @__PURE__ */ o(B, { className: `${r}__chevron` }),
28
+ "Back to all"
29
+ ] }) : null
30
+ ] });
31
+ }
32
+ );
33
+ H.displayName = "FilterHeader";
34
+ export {
35
+ H as default
36
+ };
@@ -0,0 +1,15 @@
1
+ import { InputProps } from '../Input/Input';
2
+ export interface FilterInputProps extends InputProps {
3
+ /**
4
+ * Type of input for this filter only radios or checkboxes allowed
5
+ */
6
+ type: 'checkbox' | 'radio';
7
+ }
8
+ /**
9
+ * ## Overview
10
+ *
11
+ * A label & input for filtering criteria
12
+ *
13
+ */
14
+ declare const FilterInput: import('react').ForwardRefExoticComponent<Omit<FilterInputProps, "ref"> & import('react').RefAttributes<HTMLInputElement>>;
15
+ export default FilterInput;
@@ -0,0 +1,27 @@
1
+ import { jsx as l } from "react/jsx-runtime";
2
+ import { forwardRef as i } from "react";
3
+ import { getCommonProps as p } from "../../utils/index.js";
4
+ import c from "../Input/Input.js";
5
+ const f = i(
6
+ ({ className: n, type: a = "checkbox", name: r, hidden: e, onChange: m, ...t }, o) => {
7
+ const { className: s } = p(t, "FilterInput");
8
+ return /* @__PURE__ */ l(
9
+ c,
10
+ {
11
+ ...t,
12
+ onChange: m,
13
+ ref: o,
14
+ type: a,
15
+ className: `${s}__input`,
16
+ hidden: e,
17
+ hideLabel: e,
18
+ name: r,
19
+ size: "lg"
20
+ }
21
+ );
22
+ }
23
+ );
24
+ f.displayName = "FilterValue";
25
+ export {
26
+ f as default
27
+ };
@@ -0,0 +1,3 @@
1
+ export { default as Filter, type FilterProps } from './Filter';
2
+ export { default as FilterInput, type FilterInputProps as FilterValueProps } from './FilterInput';
3
+ export { default as FilterHeader, type FilterHeaderProps } from './FilterHeader';
@@ -1,5 +1,5 @@
1
1
  import * as React from 'react';
2
- export interface InputProps extends Record<string, unknown> {
2
+ export interface InputProps extends Omit<React.ComponentProps<'input'>, 'size'> {
3
3
  /**
4
4
  * Optional className to be applied to the `<input>` node
5
5
  */
@@ -7,7 +7,7 @@ export interface InputProps extends Record<string, unknown> {
7
7
  /**
8
8
  * Optionally provide the default value of the `<input>`. Should not be passed into controlled input!
9
9
  */
10
- defaultValue?: string | number;
10
+ defaultValue?: string | number | readonly string[];
11
11
  /**
12
12
  * Booolean to specify whether the `<input>` should be disabled
13
13
  */
@@ -19,7 +19,7 @@ export interface InputProps extends Record<string, unknown> {
19
19
  /**
20
20
  * A custom `id` for the `<input>`
21
21
  */
22
- id: string;
22
+ id?: string;
23
23
  /**
24
24
  * Boolean to dictate whether input is inline with the label or not. `true` to use the inline version.
25
25
  */
@@ -39,7 +39,7 @@ export interface InputProps extends Record<string, unknown> {
39
39
  /**
40
40
  * Optional `onChange` handler that is called whenever `<input>` is updated
41
41
  */
42
- onChange?: (event: React.ChangeEvent<HTMLInputElement> | React.ChangeEvent<HTMLSelectElement>) => void;
42
+ onChange?: (event: React.ChangeEvent<HTMLInputElement>) => void;
43
43
  /**
44
44
  * Optional `onClick` handler that is called whenever the `<input>` is clicked
45
45
  */
@@ -63,7 +63,7 @@ export interface InputProps extends Record<string, unknown> {
63
63
  /**
64
64
  * Specify the value of the `<input>` for controlled inputs
65
65
  */
66
- value?: string | number | undefined;
66
+ value?: string | number | undefined | readonly string[];
67
67
  /**
68
68
  * Boolean to specify whether the control is currently in warning state
69
69
  */
@@ -1,64 +1,78 @@
1
- import { jsxs as P, jsx as l } from "react/jsx-runtime";
2
- import * as R from "react";
3
- import t from "../../node_modules/classnames/index.js";
4
- import { px as i, useNormalizedInputProps as y } from "../../utils/index.js";
5
- const z = R.forwardRef(
1
+ import { jsxs as R, jsx as s } from "react/jsx-runtime";
2
+ import * as o from "react";
3
+ import a from "../../node_modules/classnames/index.js";
4
+ import { px as i, useNormalizedInputProps as g } from "../../utils/index.js";
5
+ const k = o.forwardRef(
6
6
  ({
7
- className: p,
8
- defaultValue: r,
9
- disabled: u,
10
- hideLabel: o,
11
- id: a,
12
- inline: m,
13
- invalid: $,
14
- invalidText: c,
15
- labelText: _,
16
- onChange: b,
17
- onClick: f,
18
- placeholder: h,
19
- readOnly: e,
20
- size: v = "md",
21
- type: s = "text",
22
- value: w,
23
- warn: x,
24
- warnText: N,
25
- ...d
26
- }, I) => {
27
- const n = y({ disabled: u, id: a, invalid: $, invalidText: c, readOnly: e, type: s, warn: x, warnText: N }), j = t(`${i}-${s}-input`, `${i}-input`, `${i}-input--${v}`, {
28
- [`${i}-input--inline`]: m,
29
- [`${i}-input--readonly`]: e,
30
- [`${i}-input--disabled`]: n.disabled,
31
- [`${i}-input--invalid`]: n.invalid,
32
- [`${i}-input--warn`]: n.warn,
33
- [`${p}__wrapper`]: p,
34
- [`${i}-input--hidden`]: d.hidden
7
+ className: e,
8
+ defaultValue: u,
9
+ disabled: m,
10
+ hideLabel: $,
11
+ id: n,
12
+ inline: c,
13
+ invalid: _,
14
+ invalidText: b,
15
+ labelText: h,
16
+ onChange: f,
17
+ onClick: v,
18
+ placeholder: x,
19
+ readOnly: p,
20
+ size: w = "md",
21
+ type: l = "text",
22
+ value: I,
23
+ warn: N,
24
+ warnText: y,
25
+ ...r
26
+ }, j) => {
27
+ const d = o.useId(), t = g({
28
+ disabled: m,
29
+ id: n || d,
30
+ invalid: _,
31
+ invalidText: b,
32
+ readOnly: p,
33
+ type: l,
34
+ warn: N,
35
+ warnText: y
36
+ }), P = a(`${i}-${l}-input`, `${i}-input`, `${i}-input--${w}`, {
37
+ [`${i}-input--inline`]: c,
38
+ [`${i}-input--readonly`]: p,
39
+ [`${i}-input--disabled`]: t.disabled,
40
+ [`${i}-input--invalid`]: t.invalid,
41
+ [`${i}-input--warn`]: t.warn,
42
+ [`${e}__wrapper`]: e,
43
+ [`${i}-input--hidden`]: r.hidden
35
44
  });
36
- return /* @__PURE__ */ P("div", { className: j, children: [
37
- /* @__PURE__ */ l("label", { htmlFor: a, className: t(`${i}-input__label`, { [`${i}-input__label--hidden`]: o }), children: _ }),
38
- /* @__PURE__ */ l(
45
+ return /* @__PURE__ */ R("div", { className: P, children: [
46
+ /* @__PURE__ */ s(
47
+ "label",
48
+ {
49
+ htmlFor: n || d,
50
+ className: a(`${i}-input__label`, { [`${i}-input__label--hidden`]: $ }),
51
+ children: h
52
+ }
53
+ ),
54
+ /* @__PURE__ */ s(
39
55
  "input",
40
56
  {
41
- className: t(`${i}-input__input`, { className: p }),
42
- "data-testid": a,
43
- defaultValue: r,
44
- disabled: n.disabled,
45
- id: a,
46
- name: d.name,
47
- onChange: b,
48
- onClick: f,
49
- placeholder: h,
50
- readOnly: e,
51
- ref: I,
52
- type: n.type,
53
- value: w,
54
- ...d
57
+ className: a(`${i}-input__input`, { className: e }),
58
+ "data-testid": n,
59
+ disabled: t.disabled,
60
+ id: n || d,
61
+ onChange: f,
62
+ onClick: v,
63
+ placeholder: x,
64
+ readOnly: p,
65
+ ref: j,
66
+ type: t.type,
67
+ ...t.type !== "checkbox" && t.type !== "radio" ? { value: I, defaultValue: u } : {},
68
+ ...r
55
69
  }
56
70
  ),
57
- n.validation ? n.validation : /* @__PURE__ */ l("p", { className: t(`${i}-input__validation`), children: " " })
71
+ t.validation ? t.validation : /* @__PURE__ */ s("p", { className: a(`${i}-input__validation`), children: " " })
58
72
  ] });
59
73
  }
60
74
  );
61
- z.displayName = "Input";
75
+ k.displayName = "Input";
62
76
  export {
63
- z as default
77
+ k as default
64
78
  };
@@ -331,7 +331,6 @@ export declare const Playground: {
331
331
  invalid: boolean;
332
332
  invalidText: string;
333
333
  disabled: boolean;
334
- defaultValue: string;
335
334
  labelText: string;
336
335
  warn: boolean;
337
336
  warnText: string;
@@ -1,55 +1,55 @@
1
1
  import { jsxs as O, jsx as i } from "react/jsx-runtime";
2
- import p from "../../node_modules/classnames/index.js";
2
+ import f from "../../node_modules/classnames/index.js";
3
3
  import { getCommonProps as w, px as r } from "../../utils/index.js";
4
4
  import V from "../Select/Select.js";
5
- import f from "../../assets/chevronRight.svg.js";
6
- import h from "../IconButton/IconButton.js";
7
- import { ButtonVariants as x } from "../Button/types.js";
5
+ import h from "../../assets/chevronRight.svg.js";
6
+ import x from "../IconButton/IconButton.js";
7
+ import { ButtonVariants as b } from "../Button/types.js";
8
8
  import { determineOptionValue as o, findOptionFromSelectString as j } from "./utils.js";
9
9
  import { usePendingState as k } from "../../utils/hooks.js";
10
- const E = ({
11
- className: b,
12
- onChange: P,
13
- variant: $ = "inline",
10
+ const G = ({
11
+ className: P,
12
+ onChange: $,
13
+ variant: S = "inline",
14
14
  options: n = [],
15
15
  value: g,
16
16
  isDisabled: l,
17
- previousLabel: S = "Previous",
18
- nextLabel: v = "Next",
19
- selectLabel: C = "Select",
17
+ previousLabel: v = "Previous",
18
+ nextLabel: C = "Next",
19
+ selectLabel: u = "Select",
20
20
  ...s
21
21
  }) => {
22
- const N = "pagination", { className: u, ...I } = w(s, "Pagination"), { id: c } = s, { pendingState: _, setPendingState: y } = k(o(g)), m = _ || g, d = (t, e) => {
22
+ const N = "pagination", { className: p, ...I } = w(s, "Pagination"), { id: c } = s, { pendingState: _, setPendingState: y } = k(o(g)), m = _ || g, d = (t, e) => {
23
23
  const a = o(t);
24
- y(a), P(a, e);
24
+ y(a), $(a, e);
25
25
  };
26
26
  return /* @__PURE__ */ O(
27
27
  "div",
28
28
  {
29
- className: p(`${r}-${N}`, { [`${u}__wrapper`]: u }, b),
29
+ className: f(`${r}-${N}`, { [`${p}__wrapper`]: p }, P),
30
30
  ...I,
31
31
  ...s,
32
32
  children: [
33
33
  /* @__PURE__ */ i(
34
- h,
34
+ x,
35
35
  {
36
- className: p(`${r}__pagination-button`, `${r}-left-arrow`),
36
+ className: f(`${r}__pagination-button`, `${r}-left-arrow`),
37
37
  onClick: () => {
38
38
  const t = n.findIndex((a) => o(a) === m) - 1, e = n.at(t) || "";
39
39
  d(e);
40
40
  },
41
41
  "data-testid": `${c}-previous-button`,
42
42
  isDisabled: l,
43
- "aria-label": S,
44
- variant: x.tertiary,
45
- children: /* @__PURE__ */ i(f, {})
43
+ "aria-label": v,
44
+ variant: b.tertiary,
45
+ children: /* @__PURE__ */ i(h, {})
46
46
  }
47
47
  ),
48
48
  /* @__PURE__ */ i(
49
49
  V,
50
50
  {
51
- className: $ === "inline" && `${r}--inline-pagination`,
52
- "aria-label": C,
51
+ className: S === "inline" ? `${r}--inline-pagination` : void 0,
52
+ "aria-label": u,
53
53
  value: m,
54
54
  onChange: (t) => {
55
55
  const e = j(n, t == null ? void 0 : t.currentTarget.value);
@@ -57,6 +57,7 @@ const E = ({
57
57
  },
58
58
  "data-testid": `${c}-select-button`,
59
59
  hideLabel: !0,
60
+ labelText: u,
60
61
  disabled: l,
61
62
  showIcon: !1,
62
63
  children: n.map((t) => {
@@ -66,7 +67,7 @@ const E = ({
66
67
  }
67
68
  ),
68
69
  /* @__PURE__ */ i(
69
- h,
70
+ x,
70
71
  {
71
72
  className: `${r}__pagination-button`,
72
73
  onClick: () => {
@@ -75,9 +76,9 @@ const E = ({
75
76
  },
76
77
  "data-testid": `${c}-next-button`,
77
78
  isDisabled: l,
78
- "aria-label": v,
79
- variant: x.tertiary,
80
- children: /* @__PURE__ */ i(f, {})
79
+ "aria-label": C,
80
+ variant: b.tertiary,
81
+ children: /* @__PURE__ */ i(h, {})
81
82
  }
82
83
  )
83
84
  ]
@@ -85,5 +86,5 @@ const E = ({
85
86
  );
86
87
  };
87
88
  export {
88
- E as default
89
+ G as default
89
90
  };
@@ -1,7 +1,8 @@
1
1
  import { InputProps } from '../Input/Input';
2
+ import { Merge } from 'type-fest';
2
3
  import { SelectVariants } from './types';
3
4
  import * as React from 'react';
4
- export interface SelectProps extends InputProps {
5
+ export interface SelectProps extends Merge<InputProps, React.ComponentProps<'select'>> {
5
6
  /**
6
7
  * Option elements that are selectable
7
8
  */
@@ -13,7 +14,7 @@ export interface SelectProps extends InputProps {
13
14
  /**
14
15
  * Determines the variant of the select
15
16
  */
16
- variant: SelectVariants;
17
+ variant?: SelectVariants;
17
18
  }
18
19
  /**
19
20
  * ## Overview