@dktunited-techoff/techoff-suite-ui 0.8.14 → 0.9.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 (47) hide show
  1. package/esm/components/Checkbox/__stories__/Checkbox.stories.mdx +4 -1
  2. package/esm/components/Inputs/BooleanInput/__stories__/BooleanInput.stories.mdx +1 -1
  3. package/esm/components/Inputs/TextInput/TextInput.css +16 -0
  4. package/esm/components/Inputs/TextInput/TextInput.d.ts +1 -1
  5. package/esm/components/Inputs/TextInput/TextInput.js +6 -5
  6. package/esm/components/Inputs/TextInput/TextInput.js.map +1 -1
  7. package/esm/components/Inputs/TextInput/TextInput.tsx +26 -4
  8. package/esm/components/Inputs/TextInput/TextInput.types.d.ts +4 -0
  9. package/esm/components/Inputs/TextInput/TextInput.types.ts +4 -0
  10. package/esm/components/Inputs/TextInput/__stories__/TextInput.stories.mdx +22 -1
  11. package/esm/components/Select/Select.css +30 -0
  12. package/esm/components/Select/Select.d.ts +4 -0
  13. package/esm/components/Select/Select.js +16 -0
  14. package/esm/components/Select/Select.js.map +1 -0
  15. package/esm/components/Select/Select.types.d.ts +6 -0
  16. package/esm/components/Select/Select.types.js +2 -0
  17. package/esm/components/Select/Select.types.js.map +1 -0
  18. package/esm/components/Select/__stories__/Select.stories.mdx +40 -0
  19. package/lib/components/Checkbox/__stories__/Checkbox.stories.mdx +4 -1
  20. package/lib/components/Inputs/BooleanInput/__stories__/BooleanInput.stories.mdx +1 -1
  21. package/lib/components/Inputs/TextInput/TextInput.css +16 -0
  22. package/lib/components/Inputs/TextInput/TextInput.d.ts +1 -1
  23. package/lib/components/Inputs/TextInput/TextInput.js +6 -5
  24. package/lib/components/Inputs/TextInput/TextInput.js.map +1 -1
  25. package/lib/components/Inputs/TextInput/TextInput.tsx +26 -4
  26. package/lib/components/Inputs/TextInput/TextInput.types.d.ts +4 -0
  27. package/lib/components/Inputs/TextInput/TextInput.types.ts +4 -0
  28. package/lib/components/Inputs/TextInput/__stories__/TextInput.stories.mdx +22 -1
  29. package/lib/components/Select/Select.css +30 -0
  30. package/lib/components/Select/Select.d.ts +4 -0
  31. package/lib/components/Select/Select.js +20 -0
  32. package/lib/components/Select/Select.js.map +1 -0
  33. package/lib/components/Select/Select.types.d.ts +6 -0
  34. package/lib/components/Select/Select.types.js +3 -0
  35. package/lib/components/Select/Select.types.js.map +1 -0
  36. package/lib/components/Select/__stories__/Select.stories.mdx +40 -0
  37. package/package.json +1 -1
  38. package/src/components/Checkbox/__stories__/Checkbox.stories.mdx +4 -1
  39. package/src/components/Inputs/BooleanInput/__stories__/BooleanInput.stories.mdx +1 -1
  40. package/src/components/Inputs/TextInput/TextInput.css +16 -0
  41. package/src/components/Inputs/TextInput/TextInput.tsx +26 -4
  42. package/src/components/Inputs/TextInput/TextInput.types.ts +4 -0
  43. package/src/components/Inputs/TextInput/__stories__/TextInput.stories.mdx +22 -1
  44. package/src/components/Select/Select.css +30 -0
  45. package/src/components/Select/Select.tsx +24 -0
  46. package/src/components/Select/Select.types.ts +3 -0
  47. package/src/components/Select/__stories__/Select.stories.mdx +40 -0
@@ -23,6 +23,10 @@ export const checkboxArgTypes = {
23
23
  description: 'Enable state of the checkbox.',
24
24
  table: { defaultValue: { summary: 'false' } },
25
25
  },
26
+ onChange: {
27
+ control: 'function',
28
+ description: 'The handler called when clicking on the checkbox.',
29
+ },
26
30
  };
27
31
 
28
32
  # Checkbox
@@ -40,7 +44,6 @@ Checkboxes are applied when users can select all, several, or none of the option
40
44
  'Auctor nisl justo, sed posuere est dignissim nec. Integer ultricies, metus ac imperdiet ullamcorper, est justo viverra nisl, in posuere dui urna eget quam.',
41
45
  checked: false,
42
46
  disabled: false,
43
- onChange: () => {},
44
47
  }}
45
48
  argTypes={checkboxArgTypes}
46
49
  >
@@ -41,7 +41,7 @@ The Boolean input is used to quickly switch between two possible states. It is c
41
41
  <Canvas>
42
42
  <Story
43
43
  name="Overview"
44
- args={{ label: 'Label', labelFalse: 'No', labelTrue: 'Yes', disabled: false, onChange: () => {} }}
44
+ args={{ label: 'Label', labelFalse: 'No', labelTrue: 'Yes', disabled: false }}
45
45
  argTypes={inputArgType}
46
46
  >
47
47
  {args => <BooleanInput {...args} />}
@@ -8,6 +8,12 @@
8
8
  color: #012b49;
9
9
  font-weight: 700;
10
10
  }
11
+ .text-input--disabled {
12
+ opacity: 0.5;
13
+ }
14
+ .text-input--disabled .boolean-input-container > div {
15
+ cursor: not-allowed;
16
+ }
11
17
  .text-input-container {
12
18
  position: relative;
13
19
  }
@@ -30,6 +36,16 @@
30
36
  color: #4e5d6b;
31
37
  transform: translateY(-50%);
32
38
  }
39
+ .text-input--error {
40
+ display: flex;
41
+ align-items: center;
42
+ color: #ed6a5e;
43
+ font-size: 12px;
44
+ font-weight: 600;
45
+ }
46
+ .text-input-container--error > input {
47
+ border: 2px solid #ed6a5e;
48
+ }
33
49
 
34
50
  /* ######### */
35
51
  /* GLOBALS */
@@ -1,4 +1,4 @@
1
1
  import * as React from 'react';
2
2
  import { TextInputProps } from './TextInput.types';
3
3
  import './TextInput.css';
4
- export declare const TextInput: ({ icon, label, placeholder, value, autofocus, onChange }: TextInputProps) => React.JSX.Element;
4
+ export declare const TextInput: ({ errorLabel, icon, label, placeholder, value, autofocus, disabled, onBlur, onChange, onFocus, }: TextInputProps) => React.JSX.Element;
@@ -1,16 +1,17 @@
1
1
  import * as React from 'react';
2
2
  import { Icon } from '../../Icon/Icon';
3
3
  import './TextInput.css';
4
- export const TextInput = ({ icon, label, placeholder, value, autofocus, onChange }) => {
4
+ export const TextInput = ({ errorLabel, icon, label, placeholder, value, autofocus, disabled, onBlur, onChange, onFocus, }) => {
5
5
  // ########
6
6
  // Handlers
7
7
  const handleChange = (e) => onChange(e.target.value);
8
8
  // #########
9
9
  // Rendering
10
- return (React.createElement("div", { className: "text-input" },
10
+ return (React.createElement("div", { className: `text-input ${disabled ? 'text-input--disabled' : ''}` },
11
11
  label && React.createElement("label", null, label),
12
- React.createElement("div", { className: "text-input-container" },
13
- React.createElement("input", { type: "text", placeholder: placeholder, value: value, autoFocus: autofocus, onChange: handleChange }),
14
- icon && React.createElement(Icon, { name: icon, size: "16" }))));
12
+ React.createElement("div", { className: `text-input-container ${errorLabel ? 'text-input-container--error' : ''}` },
13
+ React.createElement("input", { type: "text", placeholder: placeholder, value: value, autoFocus: autofocus, disabled: disabled, onBlur: onBlur, onChange: handleChange, onFocus: onFocus }),
14
+ icon && React.createElement(Icon, { name: icon, size: "16" })),
15
+ errorLabel && React.createElement("div", { className: "text-input--error" }, errorLabel)));
15
16
  };
16
17
  //# sourceMappingURL=TextInput.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"TextInput.js","sourceRoot":"","sources":["../../../../src/components/Inputs/TextInput/TextInput.tsx"],"names":[],"mappings":"AAAA,OAAO,KAAK,KAAK,MAAM,OAAO,CAAC;AAE/B,OAAO,EAAE,IAAI,EAAE,MAAM,iBAAiB,CAAC;AAEvC,OAAO,iBAAiB,CAAC;AAEzB,MAAM,CAAC,MAAM,SAAS,GAAG,CAAC,EAAE,IAAI,EAAE,KAAK,EAAE,WAAW,EAAE,KAAK,EAAE,SAAS,EAAE,QAAQ,EAAkB,EAAE,EAAE;IACpG,WAAW;IACX,WAAW;IACX,MAAM,YAAY,GAAG,CAAC,CAAgC,EAAE,EAAE,CAAC,QAAQ,CAAC,CAAC,CAAC,MAAM,CAAC,KAAK,CAAC,CAAC;IAEpF,YAAY;IACZ,YAAY;IACZ,OAAO,CACL,6BAAK,SAAS,EAAC,YAAY;QACxB,KAAK,IAAI,mCAAQ,KAAK,CAAS;QAEhC,6BAAK,SAAS,EAAC,sBAAsB;YACnC,+BAAO,IAAI,EAAC,MAAM,EAAC,WAAW,EAAE,WAAW,EAAE,KAAK,EAAE,KAAK,EAAE,SAAS,EAAE,SAAS,EAAE,QAAQ,EAAE,YAAY,GAAI;YAC1G,IAAI,IAAI,oBAAC,IAAI,IAAC,IAAI,EAAE,IAAI,EAAE,IAAI,EAAC,IAAI,GAAG,CACnC,CACF,CACP,CAAC;AACJ,CAAC,CAAC"}
1
+ {"version":3,"file":"TextInput.js","sourceRoot":"","sources":["../../../../src/components/Inputs/TextInput/TextInput.tsx"],"names":[],"mappings":"AAAA,OAAO,KAAK,KAAK,MAAM,OAAO,CAAC;AAE/B,OAAO,EAAE,IAAI,EAAE,MAAM,iBAAiB,CAAC;AAEvC,OAAO,iBAAiB,CAAC;AAEzB,MAAM,CAAC,MAAM,SAAS,GAAG,CAAC,EACxB,UAAU,EACV,IAAI,EACJ,KAAK,EACL,WAAW,EACX,KAAK,EACL,SAAS,EACT,QAAQ,EACR,MAAM,EACN,QAAQ,EACR,OAAO,GACQ,EAAE,EAAE;IACnB,WAAW;IACX,WAAW;IACX,MAAM,YAAY,GAAG,CAAC,CAAgC,EAAE,EAAE,CAAC,QAAQ,CAAC,CAAC,CAAC,MAAM,CAAC,KAAK,CAAC,CAAC;IAEpF,YAAY;IACZ,YAAY;IACZ,OAAO,CACL,6BAAK,SAAS,EAAE,cAAc,QAAQ,CAAC,CAAC,CAAC,sBAAsB,CAAC,CAAC,CAAC,EAAE,EAAE;QACnE,KAAK,IAAI,mCAAQ,KAAK,CAAS;QAEhC,6BAAK,SAAS,EAAE,wBAAwB,UAAU,CAAC,CAAC,CAAC,6BAA6B,CAAC,CAAC,CAAC,EAAE,EAAE;YACvF,+BACE,IAAI,EAAC,MAAM,EACX,WAAW,EAAE,WAAW,EACxB,KAAK,EAAE,KAAK,EACZ,SAAS,EAAE,SAAS,EACpB,QAAQ,EAAE,QAAQ,EAClB,MAAM,EAAE,MAAM,EACd,QAAQ,EAAE,YAAY,EACtB,OAAO,EAAE,OAAO,GAChB;YACD,IAAI,IAAI,oBAAC,IAAI,IAAC,IAAI,EAAE,IAAI,EAAE,IAAI,EAAC,IAAI,GAAG,CACnC;QAEL,UAAU,IAAI,6BAAK,SAAS,EAAC,mBAAmB,IAAE,UAAU,CAAO,CAChE,CACP,CAAC;AACJ,CAAC,CAAC"}
@@ -4,7 +4,18 @@ import { Icon } from '../../Icon/Icon';
4
4
  import { TextInputProps } from './TextInput.types';
5
5
  import './TextInput.css';
6
6
 
7
- export const TextInput = ({ icon, label, placeholder, value, autofocus, onChange }: TextInputProps) => {
7
+ export const TextInput = ({
8
+ errorLabel,
9
+ icon,
10
+ label,
11
+ placeholder,
12
+ value,
13
+ autofocus,
14
+ disabled,
15
+ onBlur,
16
+ onChange,
17
+ onFocus,
18
+ }: TextInputProps) => {
8
19
  // ########
9
20
  // Handlers
10
21
  const handleChange = (e: ChangeEvent<HTMLInputElement>) => onChange(e.target.value);
@@ -12,13 +23,24 @@ export const TextInput = ({ icon, label, placeholder, value, autofocus, onChange
12
23
  // #########
13
24
  // Rendering
14
25
  return (
15
- <div className="text-input">
26
+ <div className={`text-input ${disabled ? 'text-input--disabled' : ''}`}>
16
27
  {label && <label>{label}</label>}
17
28
 
18
- <div className="text-input-container">
19
- <input type="text" placeholder={placeholder} value={value} autoFocus={autofocus} onChange={handleChange} />
29
+ <div className={`text-input-container ${errorLabel ? 'text-input-container--error' : ''}`}>
30
+ <input
31
+ type="text"
32
+ placeholder={placeholder}
33
+ value={value}
34
+ autoFocus={autofocus}
35
+ disabled={disabled}
36
+ onBlur={onBlur}
37
+ onChange={handleChange}
38
+ onFocus={onFocus}
39
+ />
20
40
  {icon && <Icon name={icon} size="16" />}
21
41
  </div>
42
+
43
+ {errorLabel && <div className="text-input--error">{errorLabel}</div>}
22
44
  </div>
23
45
  );
24
46
  };
@@ -1,8 +1,12 @@
1
1
  export type TextInputProps = {
2
+ errorLabel?: string;
2
3
  icon?: string;
3
4
  label?: string;
4
5
  placeholder?: string;
5
6
  value: string;
6
7
  autofocus?: boolean;
8
+ disabled?: boolean;
9
+ onBlur: () => void;
7
10
  onChange: (value: string) => void;
11
+ onFocus: () => void;
8
12
  };
@@ -1,8 +1,12 @@
1
1
  export type TextInputProps = {
2
+ errorLabel?: string;
2
3
  icon?: string;
3
4
  label?: string;
4
5
  placeholder?: string;
5
6
  value: string;
6
7
  autofocus?: boolean;
8
+ disabled?: boolean;
9
+ onBlur: () => void;
7
10
  onChange: (value: string) => void;
11
+ onFocus: () => void;
8
12
  };
@@ -6,6 +6,7 @@ import { icons } from '../../../Icon/icons';
6
6
  <Meta title="Components/Inputs/TextInput" />
7
7
 
8
8
  export const inputArgTypes = {
9
+ errorLabel: { control: 'text', description: 'Show error on the input.' },
9
10
  icon: {
10
11
  control: 'select',
11
12
  options: Object.keys(icons),
@@ -28,10 +29,23 @@ export const inputArgTypes = {
28
29
  description: 'Auto focus the input once mounted',
29
30
  table: { defaultValue: { summary: 'false' } },
30
31
  },
32
+ disabled: {
33
+ control: 'boolean',
34
+ description: 'Auto focus the input once mounted',
35
+ table: { defaultValue: { summary: 'false' } },
36
+ },
37
+ onBlur: {
38
+ control: 'function',
39
+ description: 'The handler called when the user blur the input.',
40
+ },
31
41
  onChange: {
32
42
  control: 'function',
33
43
  description: 'The handler called when the value of the input changes.',
34
44
  },
45
+ onFocus: {
46
+ control: 'function',
47
+ description: 'The handler called when the user focus the input.',
48
+ },
35
49
  };
36
50
 
37
51
  # Text Input
@@ -43,7 +57,14 @@ Text input allows the user to enter content and data when the expected user inpu
43
57
  <Canvas>
44
58
  <Story
45
59
  name="Overview"
46
- args={{ label: 'Label', placeholder: 'This is a placeholder', autofocus: false, onChange: () => {} }}
60
+ args={{
61
+ errorLabel: '',
62
+ label: 'Label',
63
+ placeholder: 'This is a placeholder',
64
+ value: '',
65
+ autofocus: false,
66
+ disabled: false,
67
+ }}
47
68
  argTypes={inputArgTypes}
48
69
  >
49
70
  {args => <TextInput {...args} />}
@@ -0,0 +1,30 @@
1
+ .select-container {
2
+ display: flex;
3
+ flex-direction: column;
4
+ }
5
+ .select-container > label {
6
+ display: block;
7
+ margin-bottom: 4px;
8
+ color: #012b49;
9
+ font-weight: 700;
10
+ }
11
+ .select-container > select {
12
+ width: 100%;
13
+ height: 32px;
14
+ padding: 0 40px 0 12px;
15
+ border: 1px solid #d4d4d4;
16
+ border-radius: 6px;
17
+ color: #007dbc;
18
+ font-weight: 700;
19
+ cursor: pointer;
20
+ }
21
+
22
+ /* ######### */
23
+ /* GLOBALS */
24
+ * {
25
+ font-size: 14px;
26
+ outline: none;
27
+ box-sizing: border-box;
28
+ font-family: system-ui, -apple-system, BlinkMacSystemFont, 'Segoe UI', Roboto, Oxygen, Ubuntu, Cantarell, 'Open Sans',
29
+ 'Helvetica Neue', sans-serif;
30
+ }
@@ -0,0 +1,4 @@
1
+ import * as React from 'react';
2
+ import { SelectProps } from './Select.types';
3
+ import './Select.css';
4
+ export declare const Select: ({ label, options, onChange }: SelectProps) => React.JSX.Element;
@@ -0,0 +1,16 @@
1
+ import * as React from 'react';
2
+ import './Select.css';
3
+ export const Select = ({ label, options, onChange }) => {
4
+ // ########
5
+ // Handlers
6
+ const handleChange = (e) => onChange(e.target.value);
7
+ // #########
8
+ // Rendering
9
+ return (React.createElement("div", { className: "select-container" },
10
+ label && React.createElement("label", null, label),
11
+ React.createElement("select", { onChange: handleChange },
12
+ React.createElement(React.Fragment, null,
13
+ React.createElement("option", null, "-"),
14
+ options))));
15
+ };
16
+ //# sourceMappingURL=Select.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"Select.js","sourceRoot":"","sources":["../../../src/components/Select/Select.tsx"],"names":[],"mappings":"AAAA,OAAO,KAAK,KAAK,MAAM,OAAO,CAAC;AAG/B,OAAO,cAAc,CAAC;AAEtB,MAAM,CAAC,MAAM,MAAM,GAAG,CAAC,EAAE,KAAK,EAAE,OAAO,EAAE,QAAQ,EAAe,EAAE,EAAE;IAClE,WAAW;IACX,WAAW;IACX,MAAM,YAAY,GAAG,CAAC,CAAiC,EAAE,EAAE,CAAC,QAAQ,CAAC,CAAC,CAAC,MAAM,CAAC,KAAK,CAAC,CAAC;IAErF,YAAY;IACZ,YAAY;IACZ,OAAO,CACL,6BAAK,SAAS,EAAC,kBAAkB;QAC9B,KAAK,IAAI,mCAAQ,KAAK,CAAS;QAChC,gCAAQ,QAAQ,EAAE,YAAY;YAC5B;gBACE,wCAAkB;gBACjB,OAAO,CACP,CACI,CACL,CACP,CAAC;AACJ,CAAC,CAAC"}
@@ -0,0 +1,6 @@
1
+ import { ReactNode } from 'react';
2
+ export type SelectProps = {
3
+ label?: string;
4
+ options: ReactNode[];
5
+ onChange: (val: string) => void;
6
+ };
@@ -0,0 +1,2 @@
1
+ export {};
2
+ //# sourceMappingURL=Select.types.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"Select.types.js","sourceRoot":"","sources":["../../../src/components/Select/Select.types.ts"],"names":[],"mappings":""}
@@ -0,0 +1,40 @@
1
+ import React from 'react';
2
+ import { ArgsTable, Canvas, Meta, Story } from '@storybook/blocks';
3
+ import { Select } from '../Select';
4
+
5
+ <Meta title="Components/Select" />
6
+
7
+ export const selectArgTypes = {
8
+ label: {
9
+ control: 'text',
10
+ description: 'Label of the input.',
11
+ },
12
+ onChange: {
13
+ control: 'function',
14
+ description: 'The handler called when the value of the select changes.',
15
+ },
16
+ };
17
+
18
+ # Loader
19
+
20
+ Loader express to user that an action is occuring.
21
+
22
+ ## Overview
23
+
24
+ <Canvas>
25
+ <Story
26
+ name="Overview"
27
+ args={{
28
+ label: 'Label',
29
+ options: [<option value="orange">Orange</option>, <option value="apple">Apple</option>],
30
+ onChange: () => {},
31
+ }}
32
+ argTypes={selectArgTypes}
33
+ >
34
+ {args => <Select {...args} />}
35
+ </Story>
36
+ </Canvas>
37
+
38
+ ## Props
39
+
40
+ <ArgsTable story="Overview" of={Select} />
@@ -23,6 +23,10 @@ export const checkboxArgTypes = {
23
23
  description: 'Enable state of the checkbox.',
24
24
  table: { defaultValue: { summary: 'false' } },
25
25
  },
26
+ onChange: {
27
+ control: 'function',
28
+ description: 'The handler called when clicking on the checkbox.',
29
+ },
26
30
  };
27
31
 
28
32
  # Checkbox
@@ -40,7 +44,6 @@ Checkboxes are applied when users can select all, several, or none of the option
40
44
  'Auctor nisl justo, sed posuere est dignissim nec. Integer ultricies, metus ac imperdiet ullamcorper, est justo viverra nisl, in posuere dui urna eget quam.',
41
45
  checked: false,
42
46
  disabled: false,
43
- onChange: () => {},
44
47
  }}
45
48
  argTypes={checkboxArgTypes}
46
49
  >
@@ -41,7 +41,7 @@ The Boolean input is used to quickly switch between two possible states. It is c
41
41
  <Canvas>
42
42
  <Story
43
43
  name="Overview"
44
- args={{ label: 'Label', labelFalse: 'No', labelTrue: 'Yes', disabled: false, onChange: () => {} }}
44
+ args={{ label: 'Label', labelFalse: 'No', labelTrue: 'Yes', disabled: false }}
45
45
  argTypes={inputArgType}
46
46
  >
47
47
  {args => <BooleanInput {...args} />}
@@ -8,6 +8,12 @@
8
8
  color: #012b49;
9
9
  font-weight: 700;
10
10
  }
11
+ .text-input--disabled {
12
+ opacity: 0.5;
13
+ }
14
+ .text-input--disabled .boolean-input-container > div {
15
+ cursor: not-allowed;
16
+ }
11
17
  .text-input-container {
12
18
  position: relative;
13
19
  }
@@ -30,6 +36,16 @@
30
36
  color: #4e5d6b;
31
37
  transform: translateY(-50%);
32
38
  }
39
+ .text-input--error {
40
+ display: flex;
41
+ align-items: center;
42
+ color: #ed6a5e;
43
+ font-size: 12px;
44
+ font-weight: 600;
45
+ }
46
+ .text-input-container--error > input {
47
+ border: 2px solid #ed6a5e;
48
+ }
33
49
 
34
50
  /* ######### */
35
51
  /* GLOBALS */
@@ -1,4 +1,4 @@
1
1
  import * as React from 'react';
2
2
  import { TextInputProps } from './TextInput.types';
3
3
  import './TextInput.css';
4
- export declare const TextInput: ({ icon, label, placeholder, value, autofocus, onChange }: TextInputProps) => React.JSX.Element;
4
+ export declare const TextInput: ({ errorLabel, icon, label, placeholder, value, autofocus, disabled, onBlur, onChange, onFocus, }: TextInputProps) => React.JSX.Element;
@@ -4,17 +4,18 @@ exports.TextInput = void 0;
4
4
  const React = require("react");
5
5
  const Icon_1 = require("../../Icon/Icon");
6
6
  require("./TextInput.css");
7
- const TextInput = ({ icon, label, placeholder, value, autofocus, onChange }) => {
7
+ const TextInput = ({ errorLabel, icon, label, placeholder, value, autofocus, disabled, onBlur, onChange, onFocus, }) => {
8
8
  // ########
9
9
  // Handlers
10
10
  const handleChange = (e) => onChange(e.target.value);
11
11
  // #########
12
12
  // Rendering
13
- return (React.createElement("div", { className: "text-input" },
13
+ return (React.createElement("div", { className: `text-input ${disabled ? 'text-input--disabled' : ''}` },
14
14
  label && React.createElement("label", null, label),
15
- React.createElement("div", { className: "text-input-container" },
16
- React.createElement("input", { type: "text", placeholder: placeholder, value: value, autoFocus: autofocus, onChange: handleChange }),
17
- icon && React.createElement(Icon_1.Icon, { name: icon, size: "16" }))));
15
+ React.createElement("div", { className: `text-input-container ${errorLabel ? 'text-input-container--error' : ''}` },
16
+ React.createElement("input", { type: "text", placeholder: placeholder, value: value, autoFocus: autofocus, disabled: disabled, onBlur: onBlur, onChange: handleChange, onFocus: onFocus }),
17
+ icon && React.createElement(Icon_1.Icon, { name: icon, size: "16" })),
18
+ errorLabel && React.createElement("div", { className: "text-input--error" }, errorLabel)));
18
19
  };
19
20
  exports.TextInput = TextInput;
20
21
  //# sourceMappingURL=TextInput.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"TextInput.js","sourceRoot":"","sources":["../../../../src/components/Inputs/TextInput/TextInput.tsx"],"names":[],"mappings":";;;AAAA,+BAA+B;AAE/B,0CAAuC;AAEvC,2BAAyB;AAElB,MAAM,SAAS,GAAG,CAAC,EAAE,IAAI,EAAE,KAAK,EAAE,WAAW,EAAE,KAAK,EAAE,SAAS,EAAE,QAAQ,EAAkB,EAAE,EAAE;IACpG,WAAW;IACX,WAAW;IACX,MAAM,YAAY,GAAG,CAAC,CAAgC,EAAE,EAAE,CAAC,QAAQ,CAAC,CAAC,CAAC,MAAM,CAAC,KAAK,CAAC,CAAC;IAEpF,YAAY;IACZ,YAAY;IACZ,OAAO,CACL,6BAAK,SAAS,EAAC,YAAY;QACxB,KAAK,IAAI,mCAAQ,KAAK,CAAS;QAEhC,6BAAK,SAAS,EAAC,sBAAsB;YACnC,+BAAO,IAAI,EAAC,MAAM,EAAC,WAAW,EAAE,WAAW,EAAE,KAAK,EAAE,KAAK,EAAE,SAAS,EAAE,SAAS,EAAE,QAAQ,EAAE,YAAY,GAAI;YAC1G,IAAI,IAAI,oBAAC,WAAI,IAAC,IAAI,EAAE,IAAI,EAAE,IAAI,EAAC,IAAI,GAAG,CACnC,CACF,CACP,CAAC;AACJ,CAAC,CAAC;AAjBW,QAAA,SAAS,aAiBpB"}
1
+ {"version":3,"file":"TextInput.js","sourceRoot":"","sources":["../../../../src/components/Inputs/TextInput/TextInput.tsx"],"names":[],"mappings":";;;AAAA,+BAA+B;AAE/B,0CAAuC;AAEvC,2BAAyB;AAElB,MAAM,SAAS,GAAG,CAAC,EACxB,UAAU,EACV,IAAI,EACJ,KAAK,EACL,WAAW,EACX,KAAK,EACL,SAAS,EACT,QAAQ,EACR,MAAM,EACN,QAAQ,EACR,OAAO,GACQ,EAAE,EAAE;IACnB,WAAW;IACX,WAAW;IACX,MAAM,YAAY,GAAG,CAAC,CAAgC,EAAE,EAAE,CAAC,QAAQ,CAAC,CAAC,CAAC,MAAM,CAAC,KAAK,CAAC,CAAC;IAEpF,YAAY;IACZ,YAAY;IACZ,OAAO,CACL,6BAAK,SAAS,EAAE,cAAc,QAAQ,CAAC,CAAC,CAAC,sBAAsB,CAAC,CAAC,CAAC,EAAE,EAAE;QACnE,KAAK,IAAI,mCAAQ,KAAK,CAAS;QAEhC,6BAAK,SAAS,EAAE,wBAAwB,UAAU,CAAC,CAAC,CAAC,6BAA6B,CAAC,CAAC,CAAC,EAAE,EAAE;YACvF,+BACE,IAAI,EAAC,MAAM,EACX,WAAW,EAAE,WAAW,EACxB,KAAK,EAAE,KAAK,EACZ,SAAS,EAAE,SAAS,EACpB,QAAQ,EAAE,QAAQ,EAClB,MAAM,EAAE,MAAM,EACd,QAAQ,EAAE,YAAY,EACtB,OAAO,EAAE,OAAO,GAChB;YACD,IAAI,IAAI,oBAAC,WAAI,IAAC,IAAI,EAAE,IAAI,EAAE,IAAI,EAAC,IAAI,GAAG,CACnC;QAEL,UAAU,IAAI,6BAAK,SAAS,EAAC,mBAAmB,IAAE,UAAU,CAAO,CAChE,CACP,CAAC;AACJ,CAAC,CAAC;AAvCW,QAAA,SAAS,aAuCpB"}
@@ -4,7 +4,18 @@ import { Icon } from '../../Icon/Icon';
4
4
  import { TextInputProps } from './TextInput.types';
5
5
  import './TextInput.css';
6
6
 
7
- export const TextInput = ({ icon, label, placeholder, value, autofocus, onChange }: TextInputProps) => {
7
+ export const TextInput = ({
8
+ errorLabel,
9
+ icon,
10
+ label,
11
+ placeholder,
12
+ value,
13
+ autofocus,
14
+ disabled,
15
+ onBlur,
16
+ onChange,
17
+ onFocus,
18
+ }: TextInputProps) => {
8
19
  // ########
9
20
  // Handlers
10
21
  const handleChange = (e: ChangeEvent<HTMLInputElement>) => onChange(e.target.value);
@@ -12,13 +23,24 @@ export const TextInput = ({ icon, label, placeholder, value, autofocus, onChange
12
23
  // #########
13
24
  // Rendering
14
25
  return (
15
- <div className="text-input">
26
+ <div className={`text-input ${disabled ? 'text-input--disabled' : ''}`}>
16
27
  {label && <label>{label}</label>}
17
28
 
18
- <div className="text-input-container">
19
- <input type="text" placeholder={placeholder} value={value} autoFocus={autofocus} onChange={handleChange} />
29
+ <div className={`text-input-container ${errorLabel ? 'text-input-container--error' : ''}`}>
30
+ <input
31
+ type="text"
32
+ placeholder={placeholder}
33
+ value={value}
34
+ autoFocus={autofocus}
35
+ disabled={disabled}
36
+ onBlur={onBlur}
37
+ onChange={handleChange}
38
+ onFocus={onFocus}
39
+ />
20
40
  {icon && <Icon name={icon} size="16" />}
21
41
  </div>
42
+
43
+ {errorLabel && <div className="text-input--error">{errorLabel}</div>}
22
44
  </div>
23
45
  );
24
46
  };
@@ -1,8 +1,12 @@
1
1
  export type TextInputProps = {
2
+ errorLabel?: string;
2
3
  icon?: string;
3
4
  label?: string;
4
5
  placeholder?: string;
5
6
  value: string;
6
7
  autofocus?: boolean;
8
+ disabled?: boolean;
9
+ onBlur: () => void;
7
10
  onChange: (value: string) => void;
11
+ onFocus: () => void;
8
12
  };
@@ -1,8 +1,12 @@
1
1
  export type TextInputProps = {
2
+ errorLabel?: string;
2
3
  icon?: string;
3
4
  label?: string;
4
5
  placeholder?: string;
5
6
  value: string;
6
7
  autofocus?: boolean;
8
+ disabled?: boolean;
9
+ onBlur: () => void;
7
10
  onChange: (value: string) => void;
11
+ onFocus: () => void;
8
12
  };
@@ -6,6 +6,7 @@ import { icons } from '../../../Icon/icons';
6
6
  <Meta title="Components/Inputs/TextInput" />
7
7
 
8
8
  export const inputArgTypes = {
9
+ errorLabel: { control: 'text', description: 'Show error on the input.' },
9
10
  icon: {
10
11
  control: 'select',
11
12
  options: Object.keys(icons),
@@ -28,10 +29,23 @@ export const inputArgTypes = {
28
29
  description: 'Auto focus the input once mounted',
29
30
  table: { defaultValue: { summary: 'false' } },
30
31
  },
32
+ disabled: {
33
+ control: 'boolean',
34
+ description: 'Auto focus the input once mounted',
35
+ table: { defaultValue: { summary: 'false' } },
36
+ },
37
+ onBlur: {
38
+ control: 'function',
39
+ description: 'The handler called when the user blur the input.',
40
+ },
31
41
  onChange: {
32
42
  control: 'function',
33
43
  description: 'The handler called when the value of the input changes.',
34
44
  },
45
+ onFocus: {
46
+ control: 'function',
47
+ description: 'The handler called when the user focus the input.',
48
+ },
35
49
  };
36
50
 
37
51
  # Text Input
@@ -43,7 +57,14 @@ Text input allows the user to enter content and data when the expected user inpu
43
57
  <Canvas>
44
58
  <Story
45
59
  name="Overview"
46
- args={{ label: 'Label', placeholder: 'This is a placeholder', autofocus: false, onChange: () => {} }}
60
+ args={{
61
+ errorLabel: '',
62
+ label: 'Label',
63
+ placeholder: 'This is a placeholder',
64
+ value: '',
65
+ autofocus: false,
66
+ disabled: false,
67
+ }}
47
68
  argTypes={inputArgTypes}
48
69
  >
49
70
  {args => <TextInput {...args} />}
@@ -0,0 +1,30 @@
1
+ .select-container {
2
+ display: flex;
3
+ flex-direction: column;
4
+ }
5
+ .select-container > label {
6
+ display: block;
7
+ margin-bottom: 4px;
8
+ color: #012b49;
9
+ font-weight: 700;
10
+ }
11
+ .select-container > select {
12
+ width: 100%;
13
+ height: 32px;
14
+ padding: 0 40px 0 12px;
15
+ border: 1px solid #d4d4d4;
16
+ border-radius: 6px;
17
+ color: #007dbc;
18
+ font-weight: 700;
19
+ cursor: pointer;
20
+ }
21
+
22
+ /* ######### */
23
+ /* GLOBALS */
24
+ * {
25
+ font-size: 14px;
26
+ outline: none;
27
+ box-sizing: border-box;
28
+ font-family: system-ui, -apple-system, BlinkMacSystemFont, 'Segoe UI', Roboto, Oxygen, Ubuntu, Cantarell, 'Open Sans',
29
+ 'Helvetica Neue', sans-serif;
30
+ }
@@ -0,0 +1,4 @@
1
+ import * as React from 'react';
2
+ import { SelectProps } from './Select.types';
3
+ import './Select.css';
4
+ export declare const Select: ({ label, options, onChange }: SelectProps) => React.JSX.Element;
@@ -0,0 +1,20 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.Select = void 0;
4
+ const React = require("react");
5
+ require("./Select.css");
6
+ const Select = ({ label, options, onChange }) => {
7
+ // ########
8
+ // Handlers
9
+ const handleChange = (e) => onChange(e.target.value);
10
+ // #########
11
+ // Rendering
12
+ return (React.createElement("div", { className: "select-container" },
13
+ label && React.createElement("label", null, label),
14
+ React.createElement("select", { onChange: handleChange },
15
+ React.createElement(React.Fragment, null,
16
+ React.createElement("option", null, "-"),
17
+ options))));
18
+ };
19
+ exports.Select = Select;
20
+ //# sourceMappingURL=Select.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"Select.js","sourceRoot":"","sources":["../../../src/components/Select/Select.tsx"],"names":[],"mappings":";;;AAAA,+BAA+B;AAG/B,wBAAsB;AAEf,MAAM,MAAM,GAAG,CAAC,EAAE,KAAK,EAAE,OAAO,EAAE,QAAQ,EAAe,EAAE,EAAE;IAClE,WAAW;IACX,WAAW;IACX,MAAM,YAAY,GAAG,CAAC,CAAiC,EAAE,EAAE,CAAC,QAAQ,CAAC,CAAC,CAAC,MAAM,CAAC,KAAK,CAAC,CAAC;IAErF,YAAY;IACZ,YAAY;IACZ,OAAO,CACL,6BAAK,SAAS,EAAC,kBAAkB;QAC9B,KAAK,IAAI,mCAAQ,KAAK,CAAS;QAChC,gCAAQ,QAAQ,EAAE,YAAY;YAC5B;gBACE,wCAAkB;gBACjB,OAAO,CACP,CACI,CACL,CACP,CAAC;AACJ,CAAC,CAAC;AAlBW,QAAA,MAAM,UAkBjB"}
@@ -0,0 +1,6 @@
1
+ import { ReactNode } from 'react';
2
+ export type SelectProps = {
3
+ label?: string;
4
+ options: ReactNode[];
5
+ onChange: (val: string) => void;
6
+ };
@@ -0,0 +1,3 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ //# sourceMappingURL=Select.types.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"Select.types.js","sourceRoot":"","sources":["../../../src/components/Select/Select.types.ts"],"names":[],"mappings":""}
@@ -0,0 +1,40 @@
1
+ import React from 'react';
2
+ import { ArgsTable, Canvas, Meta, Story } from '@storybook/blocks';
3
+ import { Select } from '../Select';
4
+
5
+ <Meta title="Components/Select" />
6
+
7
+ export const selectArgTypes = {
8
+ label: {
9
+ control: 'text',
10
+ description: 'Label of the input.',
11
+ },
12
+ onChange: {
13
+ control: 'function',
14
+ description: 'The handler called when the value of the select changes.',
15
+ },
16
+ };
17
+
18
+ # Loader
19
+
20
+ Loader express to user that an action is occuring.
21
+
22
+ ## Overview
23
+
24
+ <Canvas>
25
+ <Story
26
+ name="Overview"
27
+ args={{
28
+ label: 'Label',
29
+ options: [<option value="orange">Orange</option>, <option value="apple">Apple</option>],
30
+ onChange: () => {},
31
+ }}
32
+ argTypes={selectArgTypes}
33
+ >
34
+ {args => <Select {...args} />}
35
+ </Story>
36
+ </Canvas>
37
+
38
+ ## Props
39
+
40
+ <ArgsTable story="Overview" of={Select} />
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@dktunited-techoff/techoff-suite-ui",
3
- "version": "0.8.14",
3
+ "version": "0.9.0",
4
4
  "main": "lib/index.js",
5
5
  "types": "./lib",
6
6
  "module": "esm/index.js",
@@ -23,6 +23,10 @@ export const checkboxArgTypes = {
23
23
  description: 'Enable state of the checkbox.',
24
24
  table: { defaultValue: { summary: 'false' } },
25
25
  },
26
+ onChange: {
27
+ control: 'function',
28
+ description: 'The handler called when clicking on the checkbox.',
29
+ },
26
30
  };
27
31
 
28
32
  # Checkbox
@@ -40,7 +44,6 @@ Checkboxes are applied when users can select all, several, or none of the option
40
44
  'Auctor nisl justo, sed posuere est dignissim nec. Integer ultricies, metus ac imperdiet ullamcorper, est justo viverra nisl, in posuere dui urna eget quam.',
41
45
  checked: false,
42
46
  disabled: false,
43
- onChange: () => {},
44
47
  }}
45
48
  argTypes={checkboxArgTypes}
46
49
  >
@@ -41,7 +41,7 @@ The Boolean input is used to quickly switch between two possible states. It is c
41
41
  <Canvas>
42
42
  <Story
43
43
  name="Overview"
44
- args={{ label: 'Label', labelFalse: 'No', labelTrue: 'Yes', disabled: false, onChange: () => {} }}
44
+ args={{ label: 'Label', labelFalse: 'No', labelTrue: 'Yes', disabled: false }}
45
45
  argTypes={inputArgType}
46
46
  >
47
47
  {args => <BooleanInput {...args} />}
@@ -8,6 +8,12 @@
8
8
  color: #012b49;
9
9
  font-weight: 700;
10
10
  }
11
+ .text-input--disabled {
12
+ opacity: 0.5;
13
+ }
14
+ .text-input--disabled .boolean-input-container > div {
15
+ cursor: not-allowed;
16
+ }
11
17
  .text-input-container {
12
18
  position: relative;
13
19
  }
@@ -30,6 +36,16 @@
30
36
  color: #4e5d6b;
31
37
  transform: translateY(-50%);
32
38
  }
39
+ .text-input--error {
40
+ display: flex;
41
+ align-items: center;
42
+ color: #ed6a5e;
43
+ font-size: 12px;
44
+ font-weight: 600;
45
+ }
46
+ .text-input-container--error > input {
47
+ border: 2px solid #ed6a5e;
48
+ }
33
49
 
34
50
  /* ######### */
35
51
  /* GLOBALS */
@@ -4,7 +4,18 @@ import { Icon } from '../../Icon/Icon';
4
4
  import { TextInputProps } from './TextInput.types';
5
5
  import './TextInput.css';
6
6
 
7
- export const TextInput = ({ icon, label, placeholder, value, autofocus, onChange }: TextInputProps) => {
7
+ export const TextInput = ({
8
+ errorLabel,
9
+ icon,
10
+ label,
11
+ placeholder,
12
+ value,
13
+ autofocus,
14
+ disabled,
15
+ onBlur,
16
+ onChange,
17
+ onFocus,
18
+ }: TextInputProps) => {
8
19
  // ########
9
20
  // Handlers
10
21
  const handleChange = (e: ChangeEvent<HTMLInputElement>) => onChange(e.target.value);
@@ -12,13 +23,24 @@ export const TextInput = ({ icon, label, placeholder, value, autofocus, onChange
12
23
  // #########
13
24
  // Rendering
14
25
  return (
15
- <div className="text-input">
26
+ <div className={`text-input ${disabled ? 'text-input--disabled' : ''}`}>
16
27
  {label && <label>{label}</label>}
17
28
 
18
- <div className="text-input-container">
19
- <input type="text" placeholder={placeholder} value={value} autoFocus={autofocus} onChange={handleChange} />
29
+ <div className={`text-input-container ${errorLabel ? 'text-input-container--error' : ''}`}>
30
+ <input
31
+ type="text"
32
+ placeholder={placeholder}
33
+ value={value}
34
+ autoFocus={autofocus}
35
+ disabled={disabled}
36
+ onBlur={onBlur}
37
+ onChange={handleChange}
38
+ onFocus={onFocus}
39
+ />
20
40
  {icon && <Icon name={icon} size="16" />}
21
41
  </div>
42
+
43
+ {errorLabel && <div className="text-input--error">{errorLabel}</div>}
22
44
  </div>
23
45
  );
24
46
  };
@@ -1,8 +1,12 @@
1
1
  export type TextInputProps = {
2
+ errorLabel?: string;
2
3
  icon?: string;
3
4
  label?: string;
4
5
  placeholder?: string;
5
6
  value: string;
6
7
  autofocus?: boolean;
8
+ disabled?: boolean;
9
+ onBlur: () => void;
7
10
  onChange: (value: string) => void;
11
+ onFocus: () => void;
8
12
  };
@@ -6,6 +6,7 @@ import { icons } from '../../../Icon/icons';
6
6
  <Meta title="Components/Inputs/TextInput" />
7
7
 
8
8
  export const inputArgTypes = {
9
+ errorLabel: { control: 'text', description: 'Show error on the input.' },
9
10
  icon: {
10
11
  control: 'select',
11
12
  options: Object.keys(icons),
@@ -28,10 +29,23 @@ export const inputArgTypes = {
28
29
  description: 'Auto focus the input once mounted',
29
30
  table: { defaultValue: { summary: 'false' } },
30
31
  },
32
+ disabled: {
33
+ control: 'boolean',
34
+ description: 'Auto focus the input once mounted',
35
+ table: { defaultValue: { summary: 'false' } },
36
+ },
37
+ onBlur: {
38
+ control: 'function',
39
+ description: 'The handler called when the user blur the input.',
40
+ },
31
41
  onChange: {
32
42
  control: 'function',
33
43
  description: 'The handler called when the value of the input changes.',
34
44
  },
45
+ onFocus: {
46
+ control: 'function',
47
+ description: 'The handler called when the user focus the input.',
48
+ },
35
49
  };
36
50
 
37
51
  # Text Input
@@ -43,7 +57,14 @@ Text input allows the user to enter content and data when the expected user inpu
43
57
  <Canvas>
44
58
  <Story
45
59
  name="Overview"
46
- args={{ label: 'Label', placeholder: 'This is a placeholder', autofocus: false, onChange: () => {} }}
60
+ args={{
61
+ errorLabel: '',
62
+ label: 'Label',
63
+ placeholder: 'This is a placeholder',
64
+ value: '',
65
+ autofocus: false,
66
+ disabled: false,
67
+ }}
47
68
  argTypes={inputArgTypes}
48
69
  >
49
70
  {args => <TextInput {...args} />}
@@ -0,0 +1,30 @@
1
+ .select-container {
2
+ display: flex;
3
+ flex-direction: column;
4
+ }
5
+ .select-container > label {
6
+ display: block;
7
+ margin-bottom: 4px;
8
+ color: #012b49;
9
+ font-weight: 700;
10
+ }
11
+ .select-container > select {
12
+ width: 100%;
13
+ height: 32px;
14
+ padding: 0 40px 0 12px;
15
+ border: 1px solid #d4d4d4;
16
+ border-radius: 6px;
17
+ color: #007dbc;
18
+ font-weight: 700;
19
+ cursor: pointer;
20
+ }
21
+
22
+ /* ######### */
23
+ /* GLOBALS */
24
+ * {
25
+ font-size: 14px;
26
+ outline: none;
27
+ box-sizing: border-box;
28
+ font-family: system-ui, -apple-system, BlinkMacSystemFont, 'Segoe UI', Roboto, Oxygen, Ubuntu, Cantarell, 'Open Sans',
29
+ 'Helvetica Neue', sans-serif;
30
+ }
@@ -0,0 +1,24 @@
1
+ import * as React from 'react';
2
+ import { ChangeEvent } from 'react';
3
+ import { SelectProps } from './Select.types';
4
+ import './Select.css';
5
+
6
+ export const Select = ({ label, options, onChange }: SelectProps) => {
7
+ // ########
8
+ // Handlers
9
+ const handleChange = (e: ChangeEvent<HTMLSelectElement>) => onChange(e.target.value);
10
+
11
+ // #########
12
+ // Rendering
13
+ return (
14
+ <div className="select-container">
15
+ {label && <label>{label}</label>}
16
+ <select onChange={handleChange}>
17
+ <>
18
+ <option>-</option>
19
+ {options}
20
+ </>
21
+ </select>
22
+ </div>
23
+ );
24
+ };
@@ -0,0 +1,3 @@
1
+ import { ReactNode } from 'react';
2
+
3
+ export type SelectProps = { label?: string; options: ReactNode[]; onChange: (val: string) => void };
@@ -0,0 +1,40 @@
1
+ import React from 'react';
2
+ import { ArgsTable, Canvas, Meta, Story } from '@storybook/blocks';
3
+ import { Select } from '../Select';
4
+
5
+ <Meta title="Components/Select" />
6
+
7
+ export const selectArgTypes = {
8
+ label: {
9
+ control: 'text',
10
+ description: 'Label of the input.',
11
+ },
12
+ onChange: {
13
+ control: 'function',
14
+ description: 'The handler called when the value of the select changes.',
15
+ },
16
+ };
17
+
18
+ # Loader
19
+
20
+ Loader express to user that an action is occuring.
21
+
22
+ ## Overview
23
+
24
+ <Canvas>
25
+ <Story
26
+ name="Overview"
27
+ args={{
28
+ label: 'Label',
29
+ options: [<option value="orange">Orange</option>, <option value="apple">Apple</option>],
30
+ onChange: () => {},
31
+ }}
32
+ argTypes={selectArgTypes}
33
+ >
34
+ {args => <Select {...args} />}
35
+ </Story>
36
+ </Canvas>
37
+
38
+ ## Props
39
+
40
+ <ArgsTable story="Overview" of={Select} />