@primer/components 0.0.0-20211030161952 → 0.0.0-20211030173748

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 (126) hide show
  1. package/CHANGELOG.md +5 -1
  2. package/dist/browser.esm.js +605 -591
  3. package/dist/browser.esm.js.map +1 -1
  4. package/dist/browser.umd.js +212 -198
  5. package/dist/browser.umd.js.map +1 -1
  6. package/lib/Autocomplete/AutocompleteMenu.js +6 -13
  7. package/lib/Checkbox.d.ts +1 -1
  8. package/lib/CheckboxInputField.d.ts +11 -0
  9. package/lib/CheckboxInputField.js +73 -0
  10. package/lib/ChoiceFieldset/ChoiceField.d.ts +22 -0
  11. package/lib/ChoiceFieldset/ChoiceField.js +58 -0
  12. package/lib/ChoiceFieldset/ChoiceFieldCaption.d.ts +3 -0
  13. package/lib/ChoiceFieldset/ChoiceFieldCaption.js +35 -0
  14. package/lib/ChoiceFieldset/ChoiceFieldInput.d.ts +13 -0
  15. package/lib/ChoiceFieldset/ChoiceFieldInput.js +43 -0
  16. package/lib/ChoiceFieldset/ChoiceFieldLabel.d.ts +3 -0
  17. package/lib/ChoiceFieldset/ChoiceFieldLabel.js +35 -0
  18. package/lib/ChoiceFieldset/ChoiceFieldset.d.ts +57 -0
  19. package/lib/ChoiceFieldset/ChoiceFieldset.js +95 -0
  20. package/lib/ChoiceFieldset/ChoiceFieldsetCaption.d.ts +3 -0
  21. package/lib/ChoiceFieldset/ChoiceFieldsetCaption.js +28 -0
  22. package/lib/ChoiceFieldset/ChoiceFieldsetLegend.d.ts +6 -0
  23. package/lib/ChoiceFieldset/ChoiceFieldsetLegend.js +41 -0
  24. package/lib/ChoiceFieldset/ChoiceFieldsetList.d.ts +6 -0
  25. package/lib/ChoiceFieldset/ChoiceFieldsetList.js +85 -0
  26. package/lib/ChoiceFieldset/ChoiceFieldsetListContext.d.ts +17 -0
  27. package/lib/ChoiceFieldset/ChoiceFieldsetListContext.js +15 -0
  28. package/lib/ChoiceFieldset/ChoiceFieldsetValidation.d.ts +6 -0
  29. package/lib/ChoiceFieldset/ChoiceFieldsetValidation.js +17 -0
  30. package/lib/ChoiceFieldset/index.d.ts +3 -0
  31. package/lib/ChoiceFieldset/index.js +23 -0
  32. package/lib/RadioInputField.d.ts +9 -0
  33. package/lib/RadioInputField.js +82 -0
  34. package/lib/TextInputField.d.ts +581 -0
  35. package/lib/TextInputField.js +66 -0
  36. package/lib/_InputCaption.d.ts +13 -0
  37. package/lib/_InputCaption.js +27 -0
  38. package/lib/_InputField/InputField.d.ts +39 -0
  39. package/lib/_InputField/InputField.js +90 -0
  40. package/lib/_InputField/InputFieldCaption.d.ts +3 -0
  41. package/lib/_InputField/InputFieldCaption.js +30 -0
  42. package/lib/_InputField/InputFieldLabel.d.ts +9 -0
  43. package/lib/_InputField/InputFieldLabel.js +34 -0
  44. package/lib/_InputField/InputFieldValidation.d.ts +6 -0
  45. package/lib/_InputField/InputFieldValidation.js +17 -0
  46. package/lib/_InputField/ToggleInputField.d.ts +13 -0
  47. package/lib/_InputField/ToggleInputField.js +71 -0
  48. package/lib/_InputField/ToggleInputLeadingVisual.d.ts +3 -0
  49. package/lib/_InputField/ToggleInputLeadingVisual.js +22 -0
  50. package/lib/_InputField/ValidationAnimationContainer.d.ts +6 -0
  51. package/lib/_InputField/ValidationAnimationContainer.js +48 -0
  52. package/lib/_InputField/index.d.ts +1 -0
  53. package/lib/_InputField/index.js +15 -0
  54. package/lib/_InputField/slots.d.ts +13 -0
  55. package/lib/_InputField/slots.js +17 -0
  56. package/lib/_InputLabel.d.ts +8 -0
  57. package/lib/_InputLabel.js +44 -0
  58. package/lib/_InputValidation.d.ts +8 -0
  59. package/lib/_InputValidation.js +56 -0
  60. package/lib/_VisuallyHidden.d.ts +6 -0
  61. package/lib/_VisuallyHidden.js +39 -0
  62. package/lib/index.d.ts +4 -0
  63. package/lib/index.js +38 -0
  64. package/lib/utils/types/FormValidationStatus.d.ts +1 -0
  65. package/lib/utils/types/FormValidationStatus.js +1 -0
  66. package/lib-esm/Autocomplete/AutocompleteMenu.js +3 -13
  67. package/lib-esm/Checkbox.d.ts +1 -1
  68. package/lib-esm/CheckboxInputField.d.ts +11 -0
  69. package/lib-esm/CheckboxInputField.js +56 -0
  70. package/lib-esm/ChoiceFieldset/ChoiceField.d.ts +22 -0
  71. package/lib-esm/ChoiceFieldset/ChoiceField.js +36 -0
  72. package/lib-esm/ChoiceFieldset/ChoiceFieldCaption.d.ts +3 -0
  73. package/lib-esm/ChoiceFieldset/ChoiceFieldCaption.js +20 -0
  74. package/lib-esm/ChoiceFieldset/ChoiceFieldInput.d.ts +13 -0
  75. package/lib-esm/ChoiceFieldset/ChoiceFieldInput.js +28 -0
  76. package/lib-esm/ChoiceFieldset/ChoiceFieldLabel.d.ts +3 -0
  77. package/lib-esm/ChoiceFieldset/ChoiceFieldLabel.js +20 -0
  78. package/lib-esm/ChoiceFieldset/ChoiceFieldset.d.ts +57 -0
  79. package/lib-esm/ChoiceFieldset/ChoiceFieldset.js +72 -0
  80. package/lib-esm/ChoiceFieldset/ChoiceFieldsetCaption.d.ts +3 -0
  81. package/lib-esm/ChoiceFieldset/ChoiceFieldsetCaption.js +16 -0
  82. package/lib-esm/ChoiceFieldset/ChoiceFieldsetLegend.d.ts +6 -0
  83. package/lib-esm/ChoiceFieldset/ChoiceFieldsetLegend.js +28 -0
  84. package/lib-esm/ChoiceFieldset/ChoiceFieldsetList.d.ts +6 -0
  85. package/lib-esm/ChoiceFieldset/ChoiceFieldsetList.js +68 -0
  86. package/lib-esm/ChoiceFieldset/ChoiceFieldsetListContext.d.ts +17 -0
  87. package/lib-esm/ChoiceFieldset/ChoiceFieldsetListContext.js +5 -0
  88. package/lib-esm/ChoiceFieldset/ChoiceFieldsetValidation.d.ts +6 -0
  89. package/lib-esm/ChoiceFieldset/ChoiceFieldsetValidation.js +7 -0
  90. package/lib-esm/ChoiceFieldset/index.d.ts +3 -0
  91. package/lib-esm/ChoiceFieldset/index.js +2 -0
  92. package/lib-esm/RadioInputField.d.ts +9 -0
  93. package/lib-esm/RadioInputField.js +65 -0
  94. package/lib-esm/TextInputField.d.ts +581 -0
  95. package/lib-esm/TextInputField.js +50 -0
  96. package/lib-esm/_InputCaption.d.ts +13 -0
  97. package/lib-esm/_InputCaption.js +16 -0
  98. package/lib-esm/_InputField/InputField.d.ts +39 -0
  99. package/lib-esm/_InputField/InputField.js +70 -0
  100. package/lib-esm/_InputField/InputFieldCaption.d.ts +3 -0
  101. package/lib-esm/_InputField/InputFieldCaption.js +18 -0
  102. package/lib-esm/_InputField/InputFieldLabel.d.ts +9 -0
  103. package/lib-esm/_InputField/InputFieldLabel.js +22 -0
  104. package/lib-esm/_InputField/InputFieldValidation.d.ts +6 -0
  105. package/lib-esm/_InputField/InputFieldValidation.js +7 -0
  106. package/lib-esm/_InputField/ToggleInputField.d.ts +13 -0
  107. package/lib-esm/_InputField/ToggleInputField.js +54 -0
  108. package/lib-esm/_InputField/ToggleInputLeadingVisual.d.ts +3 -0
  109. package/lib-esm/_InputField/ToggleInputLeadingVisual.js +11 -0
  110. package/lib-esm/_InputField/ValidationAnimationContainer.d.ts +6 -0
  111. package/lib-esm/_InputField/ValidationAnimationContainer.js +33 -0
  112. package/lib-esm/_InputField/index.d.ts +1 -0
  113. package/lib-esm/_InputField/index.js +1 -0
  114. package/lib-esm/_InputField/slots.d.ts +13 -0
  115. package/lib-esm/_InputField/slots.js +5 -0
  116. package/lib-esm/_InputLabel.d.ts +8 -0
  117. package/lib-esm/_InputLabel.js +32 -0
  118. package/lib-esm/_InputValidation.d.ts +8 -0
  119. package/lib-esm/_InputValidation.js +43 -0
  120. package/lib-esm/_VisuallyHidden.d.ts +6 -0
  121. package/lib-esm/_VisuallyHidden.js +26 -0
  122. package/lib-esm/index.d.ts +4 -0
  123. package/lib-esm/index.js +4 -0
  124. package/lib-esm/utils/types/FormValidationStatus.d.ts +1 -0
  125. package/lib-esm/utils/types/FormValidationStatus.js +1 -0
  126. package/package.json +2 -2
@@ -0,0 +1,56 @@
1
+ "use strict";
2
+
3
+ Object.defineProperty(exports, "__esModule", {
4
+ value: true
5
+ });
6
+ exports.default = void 0;
7
+
8
+ var _octiconsReact = require("@primer/octicons-react");
9
+
10
+ var _react = _interopRequireDefault(require("react"));
11
+
12
+ var _ = require(".");
13
+
14
+ function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }
15
+
16
+ const validationIconMap = {
17
+ success: _octiconsReact.CheckCircleFillIcon,
18
+ error: _octiconsReact.AlertFillIcon
19
+ };
20
+ const validationColorMap = {
21
+ success: 'success.fg',
22
+ error: 'danger.fg'
23
+ };
24
+
25
+ const InputValidation = ({
26
+ children,
27
+ id,
28
+ validationStatus
29
+ }) => {
30
+ const IconComponent = validationStatus ? validationIconMap[validationStatus] : undefined;
31
+ const fgColor = validationStatus ? validationColorMap[validationStatus] : undefined;
32
+ return /*#__PURE__*/_react.default.createElement(_.Text, {
33
+ display: "flex",
34
+ color: fgColor,
35
+ fontSize: 0,
36
+ sx: {
37
+ alignItems: 'baseline',
38
+ a: {
39
+ color: 'currentColor',
40
+ textDecoration: 'underline'
41
+ }
42
+ }
43
+ }, IconComponent && /*#__PURE__*/_react.default.createElement(_.Box, {
44
+ as: "span",
45
+ mr: 1
46
+ }, /*#__PURE__*/_react.default.createElement(IconComponent, {
47
+ size: 12,
48
+ fill: "currentColor"
49
+ })), /*#__PURE__*/_react.default.createElement("span", {
50
+ id: id
51
+ }, children));
52
+ };
53
+
54
+ InputValidation.displayName = "InputValidation";
55
+ var _default = InputValidation;
56
+ exports.default = _default;
@@ -0,0 +1,6 @@
1
+ import { SxProp } from './sx';
2
+ interface Props {
3
+ isVisible?: boolean;
4
+ }
5
+ declare const VisuallyHidden: import("styled-components").StyledComponent<"span", any, Props & SxProp, never>;
6
+ export default VisuallyHidden;
@@ -0,0 +1,39 @@
1
+ "use strict";
2
+
3
+ Object.defineProperty(exports, "__esModule", {
4
+ value: true
5
+ });
6
+ exports.default = void 0;
7
+
8
+ var _styledComponents = _interopRequireDefault(require("styled-components"));
9
+
10
+ var _sx = _interopRequireDefault(require("./sx"));
11
+
12
+ function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }
13
+
14
+ const VisuallyHidden = _styledComponents.default.span.withConfig({
15
+ displayName: "_VisuallyHidden__VisuallyHidden",
16
+ componentId: "sc-1k15c4h-0"
17
+ })(["", ""], props => {
18
+ if (props.isVisible) {
19
+ return _sx.default;
20
+ }
21
+
22
+ return `
23
+ position: absolute;
24
+ width: 1px;
25
+ height: 1px;
26
+ padding: 0;
27
+ margin: -1px;
28
+ overflow: hidden;
29
+ clip: rect(0, 0, 0, 0);
30
+ white-space: nowrap;
31
+ border-width: 0;
32
+ `;
33
+ });
34
+
35
+ VisuallyHidden.defaultProps = {
36
+ isVisible: true
37
+ };
38
+ var _default = VisuallyHidden;
39
+ exports.default = _default;
package/lib/index.d.ts CHANGED
@@ -46,6 +46,8 @@ export { default as CircleBadge } from './CircleBadge';
46
46
  export type { CircleBadgeProps, CircleBadgeIconProps } from './CircleBadge';
47
47
  export { default as CircleOcticon } from './CircleOcticon';
48
48
  export type { CircleOcticonProps } from './CircleOcticon';
49
+ export { default as CheckboxInputField } from './CheckboxInputField';
50
+ export { default as ChoiceFieldset, ChoiceField } from './ChoiceFieldset';
49
51
  export { default as CounterLabel } from './CounterLabel';
50
52
  export type { CounterLabelProps } from './CounterLabel';
51
53
  export { default as Details } from './Details';
@@ -86,6 +88,7 @@ export { default as Popover } from './Popover';
86
88
  export type { PopoverProps, PopoverContentProps } from './Popover';
87
89
  export { default as ProgressBar } from './ProgressBar';
88
90
  export type { ProgressBarProps } from './ProgressBar';
91
+ export { default as RadioInputField } from './RadioInputField';
89
92
  export { default as SelectMenu } from './SelectMenu';
90
93
  export type { SelectMenuProps, SelectMenuDividerProps, SelectMenuFilterProps, SelectMenuFooterProps, SelectMenuItemProps, SelectMenuListProps, SelectMenuModalProps, SelectMenuTabsProps, SelectMenuHeaderProps, SelectMenuTabProps, SelectMenuTabPanelProps, SelectMenuLoadingAnimationProps } from './SelectMenu';
91
94
  export { default as SideNav } from './SideNav';
@@ -102,6 +105,7 @@ export { default as TabNav } from './TabNav';
102
105
  export type { TabNavProps, TabNavLinkProps } from './TabNav';
103
106
  export { default as TextInput } from './TextInput';
104
107
  export type { TextInputProps } from './TextInput';
108
+ export { default as TextInputField } from './TextInputField';
105
109
  export { default as TextInputWithTokens } from './TextInputWithTokens';
106
110
  export type { TextInputWithTokensProps } from './TextInputWithTokens';
107
111
  export { default as Text } from './Text';
package/lib/index.js CHANGED
@@ -267,6 +267,24 @@ Object.defineProperty(exports, "CircleOcticon", {
267
267
  return _CircleOcticon.default;
268
268
  }
269
269
  });
270
+ Object.defineProperty(exports, "CheckboxInputField", {
271
+ enumerable: true,
272
+ get: function () {
273
+ return _CheckboxInputField.default;
274
+ }
275
+ });
276
+ Object.defineProperty(exports, "ChoiceFieldset", {
277
+ enumerable: true,
278
+ get: function () {
279
+ return _ChoiceFieldset.default;
280
+ }
281
+ });
282
+ Object.defineProperty(exports, "ChoiceField", {
283
+ enumerable: true,
284
+ get: function () {
285
+ return _ChoiceFieldset.ChoiceField;
286
+ }
287
+ });
270
288
  Object.defineProperty(exports, "CounterLabel", {
271
289
  enumerable: true,
272
290
  get: function () {
@@ -393,6 +411,12 @@ Object.defineProperty(exports, "ProgressBar", {
393
411
  return _ProgressBar.default;
394
412
  }
395
413
  });
414
+ Object.defineProperty(exports, "RadioInputField", {
415
+ enumerable: true,
416
+ get: function () {
417
+ return _RadioInputField.default;
418
+ }
419
+ });
396
420
  Object.defineProperty(exports, "SelectMenu", {
397
421
  enumerable: true,
398
422
  get: function () {
@@ -441,6 +465,12 @@ Object.defineProperty(exports, "TextInput", {
441
465
  return _TextInput.default;
442
466
  }
443
467
  });
468
+ Object.defineProperty(exports, "TextInputField", {
469
+ enumerable: true,
470
+ get: function () {
471
+ return _TextInputField.default;
472
+ }
473
+ });
444
474
  Object.defineProperty(exports, "TextInputWithTokens", {
445
475
  enumerable: true,
446
476
  get: function () {
@@ -572,6 +602,10 @@ var _CircleBadge = _interopRequireDefault(require("./CircleBadge"));
572
602
 
573
603
  var _CircleOcticon = _interopRequireDefault(require("./CircleOcticon"));
574
604
 
605
+ var _CheckboxInputField = _interopRequireDefault(require("./CheckboxInputField"));
606
+
607
+ var _ChoiceFieldset = _interopRequireWildcard(require("./ChoiceFieldset"));
608
+
575
609
  var _CounterLabel = _interopRequireDefault(require("./CounterLabel"));
576
610
 
577
611
  var _Details = _interopRequireDefault(require("./Details"));
@@ -612,6 +646,8 @@ var _Popover = _interopRequireDefault(require("./Popover"));
612
646
 
613
647
  var _ProgressBar = _interopRequireDefault(require("./ProgressBar"));
614
648
 
649
+ var _RadioInputField = _interopRequireDefault(require("./RadioInputField"));
650
+
615
651
  var _SelectMenu = _interopRequireDefault(require("./SelectMenu"));
616
652
 
617
653
  var _SideNav = _interopRequireDefault(require("./SideNav"));
@@ -628,6 +664,8 @@ var _TabNav = _interopRequireDefault(require("./TabNav"));
628
664
 
629
665
  var _TextInput = _interopRequireDefault(require("./TextInput"));
630
666
 
667
+ var _TextInputField = _interopRequireDefault(require("./TextInputField"));
668
+
631
669
  var _TextInputWithTokens = _interopRequireDefault(require("./TextInputWithTokens"));
632
670
 
633
671
  var _Text = _interopRequireDefault(require("./Text"));
@@ -0,0 +1 @@
1
+ export declare type FormValidationStatus = 'error' | 'success';
@@ -0,0 +1 @@
1
+ "use strict";
@@ -6,6 +6,7 @@ import { AutocompleteContext } from './AutocompleteContext';
6
6
  import { PlusIcon } from '@primer/octicons-react';
7
7
  import { uniqueId } from '../utils/uniqueId';
8
8
  import { scrollIntoViewingArea } from '../behaviors/scrollIntoViewingArea';
9
+ import VisuallyHidden from '../_VisuallyHidden';
9
10
 
10
11
  const getDefaultSortFn = isItemSelectedFn => (itemIdA, itemIdB) => isItemSelectedFn(itemIdA) === isItemSelectedFn(itemIdB) ? 0 : isItemSelectedFn(itemIdA) ? -1 : 1;
11
12
 
@@ -164,19 +165,8 @@ function AutocompleteMenu(props) {
164
165
  setSelectedItemLength(selectedItemIds.length);
165
166
  }
166
167
  }, [selectedItemIds, setSelectedItemLength]);
167
- return /*#__PURE__*/React.createElement(Box, {
168
- sx: !showMenu ? {
169
- // visually hides this label for sighted users
170
- position: 'absolute',
171
- width: '1px',
172
- height: '1px',
173
- padding: '0',
174
- margin: '-1px',
175
- overflow: 'hidden',
176
- clip: 'rect(0, 0, 0, 0)',
177
- whiteSpace: 'nowrap',
178
- borderWidth: '0'
179
- } : {}
168
+ return /*#__PURE__*/React.createElement(VisuallyHidden, {
169
+ isVisible: showMenu
180
170
  }, loading ? /*#__PURE__*/React.createElement(Box, {
181
171
  p: 3,
182
172
  display: "flex",
@@ -25,5 +25,5 @@ export declare type CheckboxProps = {
25
25
  /**
26
26
  * An accessible, native checkbox component
27
27
  */
28
- declare const Checkbox: React.ForwardRefExoticComponent<Pick<CheckboxProps, "sx" | keyof React.InputHTMLAttributes<HTMLInputElement> | "indeterminate" | "validationStatus"> & React.RefAttributes<HTMLInputElement>>;
28
+ declare const Checkbox: React.ForwardRefExoticComponent<Pick<CheckboxProps, "sx" | keyof React.InputHTMLAttributes<HTMLInputElement> | "validationStatus" | "indeterminate"> & React.RefAttributes<HTMLInputElement>>;
29
29
  export default Checkbox;
@@ -0,0 +1,11 @@
1
+ import React from 'react';
2
+ import { ToggleInputFieldProps } from './_InputField/ToggleInputField';
3
+ declare const _default: React.FC<ToggleInputFieldProps> & {
4
+ Input: React.FC<React.HTMLProps<HTMLInputElement> & {
5
+ ref?: React.Ref<HTMLInputElement> | undefined;
6
+ }>;
7
+ Caption: React.FC<{}>;
8
+ Label: React.FC<import("./_InputField/InputFieldLabel").Props>;
9
+ LeadingVisual: React.FC<{}>;
10
+ };
11
+ export default _default;
@@ -0,0 +1,56 @@
1
+ function _extends() { _extends = Object.assign || function (target) { for (var i = 1; i < arguments.length; i++) { var source = arguments[i]; for (var key in source) { if (Object.prototype.hasOwnProperty.call(source, key)) { target[key] = source[key]; } } } return target; }; return _extends.apply(this, arguments); }
2
+
3
+ import React from 'react';
4
+ import { Checkbox } from '.';
5
+ import InputField from './_InputField/InputField';
6
+ import { Slot } from './_InputField/slots';
7
+ import ToggleInputField from './_InputField/ToggleInputField';
8
+ import ToggleInputLeadingVisual from './_InputField/ToggleInputLeadingVisual';
9
+
10
+ const Input = ({
11
+ id: idProp,
12
+ required: requiredProp,
13
+ disabled: disabledProp,
14
+ ...rest
15
+ }) => {
16
+ if (idProp) {
17
+ // eslint-disable-next-line no-console
18
+ console.warn("instead of passing the 'id' prop directly to <TextInputField.Input>, it should be passed to the parent component, <TextInputField>");
19
+ }
20
+
21
+ if (disabledProp) {
22
+ // eslint-disable-next-line no-console
23
+ console.warn("instead of passing the 'disabled' prop directly to <TextInputField.Input>, it should be passed to the parent component, <TextInputField>");
24
+ }
25
+
26
+ if (requiredProp) {
27
+ // eslint-disable-next-line no-console
28
+ console.warn("instead of passing the 'required' prop directly to <TextInputField.Input>, it should be passed to the parent component, <TextInputField>");
29
+ }
30
+
31
+ return /*#__PURE__*/React.createElement(Slot, {
32
+ name: "Input"
33
+ }, ({
34
+ disabled,
35
+ id,
36
+ required,
37
+ captionId
38
+ }) => /*#__PURE__*/React.createElement(Checkbox, _extends({
39
+ "aria-describedby": captionId,
40
+ id: id,
41
+ required: required,
42
+ disabled: disabled
43
+ }, rest)));
44
+ };
45
+
46
+ Input.displayName = "Input";
47
+
48
+ const CheckboxInputField = props => /*#__PURE__*/React.createElement(ToggleInputField, props);
49
+
50
+ CheckboxInputField.displayName = "CheckboxInputField";
51
+ export default Object.assign(CheckboxInputField, {
52
+ Input,
53
+ Caption: InputField.Caption,
54
+ Label: InputField.Label,
55
+ LeadingVisual: ToggleInputLeadingVisual
56
+ });
@@ -0,0 +1,22 @@
1
+ import React from 'react';
2
+ import { ComponentProps } from '../utils/types';
3
+ export interface ChoiceFieldProps {
4
+ /**
5
+ * Whether the field is ready for user input
6
+ */
7
+ disabled?: boolean;
8
+ /**
9
+ * The unique identifier for this field. Used to associate the label, validation text, and caption text
10
+ */
11
+ id?: string;
12
+ }
13
+ declare const ChoiceField: React.FC<ChoiceFieldProps>;
14
+ export declare type ChoiceFieldComponentProps = ComponentProps<typeof ChoiceField>;
15
+ export type { ChoiceFieldInputProps } from './ChoiceFieldInput';
16
+ declare const _default: React.FC<ChoiceFieldProps> & {
17
+ Caption: React.FC<{}>;
18
+ Input: React.FC<import("./ChoiceFieldInput").ChoiceFieldInputProps>;
19
+ Label: React.FC<{}>;
20
+ LeadingVisual: React.FC<{}>;
21
+ };
22
+ export default _default;
@@ -0,0 +1,36 @@
1
+ import React, { useContext } from 'react';
2
+ import { uniqueId } from '../utils/uniqueId';
3
+ import ToggleInputLeadingVisual from '../_InputField/ToggleInputLeadingVisual';
4
+ import ChoiceFieldCaption from './ChoiceFieldCaption';
5
+ import ChoiceFieldInput from './ChoiceFieldInput';
6
+ import ChoiceFieldLabel from './ChoiceFieldLabel';
7
+ import ChoiceFieldsetListContext from './ChoiceFieldsetListContext';
8
+
9
+ const ChoiceField = ({
10
+ children,
11
+ id,
12
+ disabled
13
+ }) => {
14
+ const choiceFieldsetListContext = useContext(ChoiceFieldsetListContext);
15
+
16
+ if (choiceFieldsetListContext === null) {
17
+ throw new Error('ChoiceFieldsetListContext returned null');
18
+ }
19
+
20
+ const {
21
+ fieldComponent: FieldComponent
22
+ } = choiceFieldsetListContext;
23
+ const fieldId = id || uniqueId();
24
+ return /*#__PURE__*/React.createElement(FieldComponent, {
25
+ id: fieldId,
26
+ disabled: disabled
27
+ }, children);
28
+ };
29
+
30
+ ChoiceField.displayName = "ChoiceField";
31
+ export default Object.assign(ChoiceField, {
32
+ Caption: ChoiceFieldCaption,
33
+ Input: ChoiceFieldInput,
34
+ Label: ChoiceFieldLabel,
35
+ LeadingVisual: ToggleInputLeadingVisual
36
+ });
@@ -0,0 +1,3 @@
1
+ import React from 'react';
2
+ declare const ChoiceFieldCaption: React.FC;
3
+ export default ChoiceFieldCaption;
@@ -0,0 +1,20 @@
1
+ import React, { useContext } from 'react';
2
+ import ChoiceFieldsetListContext from './ChoiceFieldsetListContext';
3
+
4
+ const ChoiceFieldCaption = ({
5
+ children
6
+ }) => {
7
+ const choiceFieldsetListContext = useContext(ChoiceFieldsetListContext);
8
+
9
+ if (choiceFieldsetListContext === null) {
10
+ throw new Error('ChoiceFieldsetListContext returned null');
11
+ }
12
+
13
+ const {
14
+ fieldComponent: FieldComponent
15
+ } = choiceFieldsetListContext;
16
+ return /*#__PURE__*/React.createElement(FieldComponent.Caption, null, children);
17
+ };
18
+
19
+ ChoiceFieldCaption.displayName = "ChoiceFieldCaption";
20
+ export default ChoiceFieldCaption;
@@ -0,0 +1,13 @@
1
+ import React from 'react';
2
+ export interface ChoiceFieldInputProps {
3
+ /**
4
+ * The value that is being toggled on
5
+ */
6
+ value: string;
7
+ /**
8
+ * Whether the input is toggled on
9
+ */
10
+ checked?: boolean;
11
+ }
12
+ declare const ChoiceFieldInput: React.FC<ChoiceFieldInputProps>;
13
+ export default ChoiceFieldInput;
@@ -0,0 +1,28 @@
1
+ import React, { useContext } from 'react';
2
+ import ChoiceFieldsetListContext from './ChoiceFieldsetListContext';
3
+
4
+ const ChoiceFieldInput = ({
5
+ checked,
6
+ value
7
+ }) => {
8
+ const choiceFieldsetListContext = useContext(ChoiceFieldsetListContext);
9
+
10
+ if (choiceFieldsetListContext === null) {
11
+ throw new Error('ChoiceFieldsetListContext returned null');
12
+ }
13
+
14
+ const {
15
+ name,
16
+ onChange,
17
+ fieldComponent: FieldComponent
18
+ } = choiceFieldsetListContext;
19
+ return /*#__PURE__*/React.createElement(FieldComponent.Input, {
20
+ checked: checked,
21
+ value: value,
22
+ name: name,
23
+ onChange: onChange
24
+ });
25
+ };
26
+
27
+ ChoiceFieldInput.displayName = "ChoiceFieldInput";
28
+ export default ChoiceFieldInput;
@@ -0,0 +1,3 @@
1
+ import React from 'react';
2
+ declare const ChoiceFieldLabel: React.FC;
3
+ export default ChoiceFieldLabel;
@@ -0,0 +1,20 @@
1
+ import React, { useContext } from 'react';
2
+ import ChoiceFieldsetListContext from './ChoiceFieldsetListContext';
3
+
4
+ const ChoiceFieldLabel = ({
5
+ children
6
+ }) => {
7
+ const choiceFieldsetListContext = useContext(ChoiceFieldsetListContext);
8
+
9
+ if (choiceFieldsetListContext === null) {
10
+ throw new Error('ChoiceFieldsetListContext returned null');
11
+ }
12
+
13
+ const {
14
+ fieldComponent: FieldComponent
15
+ } = choiceFieldsetListContext;
16
+ return /*#__PURE__*/React.createElement(FieldComponent.Label, null, children);
17
+ };
18
+
19
+ ChoiceFieldLabel.displayName = "ChoiceFieldLabel";
20
+ export default ChoiceFieldLabel;
@@ -0,0 +1,57 @@
1
+ import React, { ComponentProps } from 'react';
2
+ import { FormValidationStatus } from '../utils/types/FormValidationStatus';
3
+ export interface ChoiceFieldsetProps<T = Record<string, FormValidationStatus>> {
4
+ children?: React.ReactNode;
5
+ /**
6
+ * The unique identifier for this fieldset. Used to associate the validation text and caption text with the fieldset
7
+ */
8
+ id?: string;
9
+ /**
10
+ * The unique identifier used to associate the inputs with eachother
11
+ */
12
+ name?: string;
13
+ /**
14
+ * The callback that is called when a user toggles a choice on or off
15
+ */
16
+ onSelect?: (selectedValues?: string[]) => void;
17
+ /**
18
+ * Whether this field must have a value for the user to complete their task
19
+ */
20
+ required?: boolean;
21
+ /**
22
+ * A map of validation statuses and their associated validation keys. When one of the validation keys is passed to the `validationResult` prop,
23
+ * the associated validation message will be rendered in the correct style
24
+ */
25
+ validationMap?: T;
26
+ /**
27
+ * The key of the validation message to show
28
+ */
29
+ validationResult?: keyof T;
30
+ }
31
+ export interface ChoiceFieldsetContext extends ChoiceFieldsetProps {
32
+ captionId: string;
33
+ validationMessageId: string;
34
+ }
35
+ declare const Slot: React.FC<{
36
+ name: "Caption" | "ChoiceList" | "Legend" | "Validation";
37
+ children: React.ReactNode;
38
+ }>;
39
+ export { Slot };
40
+ declare const ChoiceFieldset: <T extends Record<string, FormValidationStatus>>({ children, id, name, onSelect, required, validationMap, validationResult }: ChoiceFieldsetProps<T>) => JSX.Element;
41
+ export declare type InputFieldComponentProps = ComponentProps<typeof ChoiceFieldset>;
42
+ export type { ChoiceFieldsetListProps } from './ChoiceFieldsetList';
43
+ export type { ChoiceFieldsetLegendProps } from './ChoiceFieldsetLegend';
44
+ export type { ChoiceFieldProps } from './ChoiceField';
45
+ declare const _default: (<T extends Record<string, FormValidationStatus>>({ children, id, name, onSelect, required, validationMap, validationResult }: ChoiceFieldsetProps<T>) => JSX.Element) & {
46
+ ChoiceField: React.FC<import("./ChoiceField").ChoiceFieldProps> & {
47
+ Caption: React.FC<{}>;
48
+ Input: React.FC<import("./ChoiceFieldInput").ChoiceFieldInputProps>;
49
+ Label: React.FC<{}>;
50
+ LeadingVisual: React.FC<{}>;
51
+ };
52
+ Caption: React.FC<{}>;
53
+ Legend: React.FC<import("./ChoiceFieldsetLegend").ChoiceFieldsetLegendProps>;
54
+ List: React.FC<import("./ChoiceFieldsetList").ChoiceFieldsetListProps>;
55
+ Validation: React.FC<import("./ChoiceFieldsetValidation").ChoiceFieldsetValidationProps>;
56
+ };
57
+ export default _default;
@@ -0,0 +1,72 @@
1
+ import React from 'react';
2
+ import { Box } from '..';
3
+ import createSlots from '../utils/create-slots';
4
+ import { uniqueId } from '../utils/uniqueId';
5
+ import ValidationAnimationContainer from '../_InputField/ValidationAnimationContainer';
6
+ import InputValidation from '../_InputValidation';
7
+ import ChoiceField from './ChoiceField';
8
+ import ChoiceFieldsetCaption from './ChoiceFieldsetCaption';
9
+ import ChoiceFieldsetLegend from './ChoiceFieldsetLegend';
10
+ import ChoiceFieldsetList from './ChoiceFieldsetList';
11
+ import ChoiceFieldsetValidation from './ChoiceFieldsetValidation';
12
+ const {
13
+ Slots,
14
+ Slot
15
+ } = createSlots(['Caption', 'ChoiceList', 'Legend', 'Validation']);
16
+ export { Slot };
17
+
18
+ const ChoiceFieldset = ({
19
+ children,
20
+ id,
21
+ name,
22
+ onSelect,
23
+ required,
24
+ validationMap,
25
+ validationResult
26
+ }) => {
27
+ var _React$Children$map;
28
+
29
+ const fieldsetId = id || uniqueId();
30
+ const validationChildren = (_React$Children$map = React.Children.map(children, child => /*#__PURE__*/React.isValidElement(child) && child.type === ChoiceFieldsetValidation ? child : null)) === null || _React$Children$map === void 0 ? void 0 : _React$Children$map.filter(Boolean);
31
+ const validationChildToRender = validationChildren === null || validationChildren === void 0 ? void 0 : validationChildren.find(child => child.props.validationKey === validationResult);
32
+ const captionId = `${fieldsetId}-caption`;
33
+ const validationMessageId = validationChildToRender ? `${fieldsetId}-validationMsg` : undefined;
34
+ return /*#__PURE__*/React.createElement(Slots, {
35
+ context: {
36
+ captionId,
37
+ name,
38
+ onSelect,
39
+ required,
40
+ validationMessageId
41
+ }
42
+ }, slots => {
43
+ const isLegendVisible = /*#__PURE__*/React.isValidElement(slots.Legend) && slots.Legend.props.isVisible;
44
+ return /*#__PURE__*/React.createElement("div", null, /*#__PURE__*/React.createElement(Box, {
45
+ as: "fieldset",
46
+ border: "none",
47
+ margin: 0,
48
+ padding: 0,
49
+ "aria-describedby": [validationMessageId, captionId].filter(Boolean).join(' ')
50
+ }, React.Children.toArray(children).filter(child => /*#__PURE__*/React.isValidElement(child) && child.type !== ChoiceFieldsetValidation), /*#__PURE__*/React.createElement(Box, {
51
+ mb: isLegendVisible ? 3 : undefined
52
+ }, slots.Legend), slots.ChoiceList), (validationChildToRender || slots.Caption) && /*#__PURE__*/React.createElement(Box, {
53
+ mt: 3
54
+ }, validationChildToRender && validationMap && validationResult && validationMessageId && /*#__PURE__*/React.createElement(ValidationAnimationContainer, {
55
+ show: true
56
+ }, /*#__PURE__*/React.createElement(InputValidation, {
57
+ validationStatus: validationMap[validationResult],
58
+ id: validationMessageId
59
+ }, validationChildToRender)), /*#__PURE__*/React.createElement(Box, {
60
+ mt: validationChildToRender ? 1 : undefined
61
+ }, slots.Caption)));
62
+ });
63
+ };
64
+
65
+ ChoiceFieldset.displayName = "ChoiceFieldset";
66
+ export default Object.assign(ChoiceFieldset, {
67
+ ChoiceField,
68
+ Caption: ChoiceFieldsetCaption,
69
+ Legend: ChoiceFieldsetLegend,
70
+ List: ChoiceFieldsetList,
71
+ Validation: ChoiceFieldsetValidation
72
+ });
@@ -0,0 +1,3 @@
1
+ import React from 'react';
2
+ declare const ChoiceFieldsetCaption: React.FC;
3
+ export default ChoiceFieldsetCaption;
@@ -0,0 +1,16 @@
1
+ import React from 'react';
2
+ import InputCaption from '../_InputCaption';
3
+ import { Slot } from './ChoiceFieldset';
4
+
5
+ const ChoiceFieldsetCaption = ({
6
+ children
7
+ }) => /*#__PURE__*/React.createElement(Slot, {
8
+ name: "Caption"
9
+ }, ({
10
+ captionId
11
+ }) => /*#__PURE__*/React.createElement(InputCaption, {
12
+ id: captionId
13
+ }, children));
14
+
15
+ ChoiceFieldsetCaption.displayName = "ChoiceFieldsetCaption";
16
+ export default ChoiceFieldsetCaption;
@@ -0,0 +1,6 @@
1
+ import React from 'react';
2
+ export interface ChoiceFieldsetLegendProps {
3
+ visuallyHidden?: boolean;
4
+ }
5
+ declare const ChoiceFieldsetLegend: React.FC<ChoiceFieldsetLegendProps>;
6
+ export default ChoiceFieldsetLegend;
@@ -0,0 +1,28 @@
1
+ import React from 'react';
2
+ import { Box } from '..';
3
+ import VisuallyHidden from '../_VisuallyHidden';
4
+ import { Slot } from './ChoiceFieldset';
5
+
6
+ const ChoiceFieldsetLegend = ({
7
+ children,
8
+ visuallyHidden
9
+ }) => /*#__PURE__*/React.createElement(Slot, {
10
+ name: "Legend"
11
+ }, ({
12
+ required
13
+ }) => /*#__PURE__*/React.createElement(VisuallyHidden, {
14
+ isVisible: !visuallyHidden,
15
+ title: required ? 'required field' : undefined,
16
+ sx: {
17
+ fontSize: 2,
18
+ padding: 0
19
+ }
20
+ }, required ? /*#__PURE__*/React.createElement(Box, {
21
+ display: "flex",
22
+ as: "span"
23
+ }, /*#__PURE__*/React.createElement(Box, {
24
+ mr: 1
25
+ }, children), /*#__PURE__*/React.createElement("span", null, "*")) : children));
26
+
27
+ ChoiceFieldsetLegend.displayName = "ChoiceFieldsetLegend";
28
+ export default ChoiceFieldsetLegend;