baseui 10.7.4 → 10.9.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.
Files changed (164) hide show
  1. package/a11y/a11y.js +2 -2
  2. package/a11y/a11y.js.flow +3 -3
  3. package/button/styled-components.js +47 -18
  4. package/button/styled-components.js.flow +25 -5
  5. package/combobox/combobox.js +6 -3
  6. package/combobox/combobox.js.flow +4 -2
  7. package/combobox/types.js.flow +2 -0
  8. package/data-table/column-categorical.js +1 -1
  9. package/data-table/column-categorical.js.flow +2 -2
  10. package/data-table/column-numerical.js +1 -1
  11. package/data-table/column-numerical.js.flow +3 -3
  12. package/datepicker/styled-components.js +1 -1
  13. package/datepicker/styled-components.js.flow +4 -1
  14. package/drawer/drawer.js +3 -1
  15. package/drawer/drawer.js.flow +7 -1
  16. package/es/a11y/a11y.js +2 -2
  17. package/es/button/styled-components.js +32 -2
  18. package/es/combobox/combobox.js +6 -3
  19. package/es/data-table/column-categorical.js +2 -2
  20. package/es/data-table/column-numerical.js +2 -2
  21. package/es/datepicker/styled-components.js +1 -1
  22. package/es/drawer/drawer.js +3 -1
  23. package/es/form-control/form-control.js +58 -7
  24. package/es/form-control/styled-components.js +27 -6
  25. package/es/index.js +1 -1
  26. package/es/map-marker/badge-enhancer.js +61 -0
  27. package/es/map-marker/constants.js +146 -2
  28. package/es/map-marker/drag-shadow.js +32 -0
  29. package/es/map-marker/fixed-marker.js +54 -48
  30. package/es/map-marker/floating-marker.js +21 -12
  31. package/es/map-marker/index.js +1 -1
  32. package/es/map-marker/label-enhancer.js +39 -0
  33. package/es/map-marker/needle.js +26 -0
  34. package/es/map-marker/pin-head.js +42 -40
  35. package/es/map-marker/styled-components.js +177 -32
  36. package/es/map-marker/types.js +1 -1
  37. package/es/menu/maybe-child-menu.js +0 -2
  38. package/es/menu/nested-menus.js +49 -3
  39. package/es/menu/stateful-container.js +13 -12
  40. package/es/modal/modal.js +3 -1
  41. package/es/popover/popover.js +4 -2
  42. package/es/progress-bar/index.js +1 -1
  43. package/es/progress-bar/progressbar.js +25 -10
  44. package/es/progress-bar/styled-components.js +9 -5
  45. package/es/select/select-component.js +2 -10
  46. package/es/spinner/styled-components.js +34 -16
  47. package/es/table/filter.js +3 -1
  48. package/es/themes/dark-theme/color-component-tokens.js +19 -10
  49. package/es/themes/light-theme/color-component-tokens.js +19 -10
  50. package/es/timezonepicker/timezone-picker.js +53 -36
  51. package/es/timezonepicker/tzdata.js +2 -0
  52. package/es/timezonepicker/update-tzdata.js +69 -0
  53. package/es/toast/styled-components.js +18 -7
  54. package/esm/a11y/a11y.js +3 -3
  55. package/esm/button/styled-components.js +47 -18
  56. package/esm/combobox/combobox.js +6 -3
  57. package/esm/data-table/column-categorical.js +2 -2
  58. package/esm/data-table/column-numerical.js +2 -2
  59. package/esm/datepicker/styled-components.js +1 -1
  60. package/esm/drawer/drawer.js +3 -1
  61. package/esm/form-control/form-control.js +60 -9
  62. package/esm/form-control/styled-components.js +23 -3
  63. package/esm/index.js +1 -1
  64. package/esm/map-marker/badge-enhancer.js +79 -0
  65. package/esm/map-marker/constants.js +94 -4
  66. package/esm/map-marker/drag-shadow.js +53 -0
  67. package/esm/map-marker/fixed-marker.js +84 -80
  68. package/esm/map-marker/floating-marker.js +22 -13
  69. package/esm/map-marker/index.js +1 -1
  70. package/esm/map-marker/label-enhancer.js +60 -0
  71. package/esm/map-marker/needle.js +43 -0
  72. package/esm/map-marker/pin-head.js +77 -66
  73. package/esm/map-marker/styled-components.js +182 -51
  74. package/esm/map-marker/types.js +1 -1
  75. package/esm/menu/maybe-child-menu.js +0 -2
  76. package/esm/menu/nested-menus.js +66 -5
  77. package/esm/menu/stateful-container.js +15 -13
  78. package/esm/modal/modal.js +3 -1
  79. package/esm/popover/popover.js +4 -2
  80. package/esm/progress-bar/index.js +1 -1
  81. package/esm/progress-bar/progressbar.js +32 -10
  82. package/esm/progress-bar/styled-components.js +9 -4
  83. package/esm/select/select-component.js +2 -11
  84. package/esm/spinner/styled-components.js +35 -16
  85. package/esm/table/filter.js +3 -1
  86. package/esm/themes/dark-theme/color-component-tokens.js +19 -10
  87. package/esm/themes/light-theme/color-component-tokens.js +19 -10
  88. package/esm/timezonepicker/timezone-picker.js +64 -36
  89. package/esm/timezonepicker/tzdata.js +2 -0
  90. package/esm/timezonepicker/update-tzdata.js +160 -0
  91. package/esm/toast/styled-components.js +13 -5
  92. package/form-control/form-control.js +61 -8
  93. package/form-control/form-control.js.flow +82 -10
  94. package/form-control/index.d.ts +1 -0
  95. package/form-control/styled-components.js +27 -5
  96. package/form-control/styled-components.js.flow +25 -3
  97. package/form-control/types.js.flow +20 -8
  98. package/index.js +6 -0
  99. package/index.js.flow +1 -1
  100. package/map-marker/badge-enhancer.js +90 -0
  101. package/map-marker/badge-enhancer.js.flow +86 -0
  102. package/map-marker/constants.js +103 -5
  103. package/map-marker/constants.js.flow +152 -0
  104. package/map-marker/drag-shadow.js +64 -0
  105. package/map-marker/drag-shadow.js.flow +52 -0
  106. package/map-marker/fixed-marker.js +84 -78
  107. package/map-marker/fixed-marker.js.flow +78 -66
  108. package/map-marker/floating-marker.js +22 -13
  109. package/map-marker/floating-marker.js.flow +30 -17
  110. package/map-marker/index.d.ts +125 -24
  111. package/map-marker/index.js +18 -0
  112. package/map-marker/index.js.flow +3 -0
  113. package/map-marker/label-enhancer.js +71 -0
  114. package/map-marker/label-enhancer.js.flow +63 -0
  115. package/map-marker/needle.js +54 -0
  116. package/map-marker/needle.js.flow +29 -0
  117. package/map-marker/pin-head.js +80 -69
  118. package/map-marker/pin-head.js.flow +122 -84
  119. package/map-marker/styled-components.js +200 -62
  120. package/map-marker/styled-components.js.flow +172 -22
  121. package/map-marker/types.js.flow +69 -20
  122. package/menu/index.d.ts +9 -4
  123. package/menu/maybe-child-menu.js +0 -2
  124. package/menu/maybe-child-menu.js.flow +0 -2
  125. package/menu/nested-menus.js +66 -5
  126. package/menu/nested-menus.js.flow +50 -5
  127. package/menu/stateful-container.js +15 -13
  128. package/menu/stateful-container.js.flow +19 -13
  129. package/menu/types.js.flow +7 -1
  130. package/modal/modal.js +3 -1
  131. package/modal/modal.js.flow +2 -0
  132. package/package.json +4 -4
  133. package/popover/popover.js +4 -2
  134. package/popover/popover.js.flow +3 -1
  135. package/progress-bar/index.d.ts +2 -0
  136. package/progress-bar/index.js +6 -0
  137. package/progress-bar/index.js.flow +1 -0
  138. package/progress-bar/progressbar.js +32 -10
  139. package/progress-bar/progressbar.js.flow +35 -9
  140. package/progress-bar/styled-components.js +9 -4
  141. package/progress-bar/styled-components.js.flow +15 -4
  142. package/progress-bar/types.js.flow +12 -2
  143. package/select/select-component.js +2 -11
  144. package/select/select-component.js.flow +5 -7
  145. package/spinner/styled-components.js +35 -16
  146. package/spinner/styled-components.js.flow +37 -19
  147. package/spinner/types.js.flow +10 -0
  148. package/styles/index.js.flow +1 -1
  149. package/table/filter.js +3 -1
  150. package/table/filter.js.flow +5 -1
  151. package/themes/dark-theme/color-component-tokens.js +19 -10
  152. package/themes/dark-theme/color-component-tokens.js.flow +19 -10
  153. package/themes/light-theme/color-component-tokens.js +19 -10
  154. package/themes/light-theme/color-component-tokens.js.flow +19 -10
  155. package/themes/types.js.flow +9 -0
  156. package/timezonepicker/timezone-picker.js +69 -41
  157. package/timezonepicker/timezone-picker.js.flow +52 -46
  158. package/timezonepicker/types.js.flow +1 -1
  159. package/timezonepicker/tzdata.js +10 -0
  160. package/timezonepicker/tzdata.js.flow +347 -0
  161. package/timezonepicker/update-tzdata.js +164 -0
  162. package/timezonepicker/update-tzdata.js.flow +70 -0
  163. package/toast/styled-components.js +13 -5
  164. package/toast/styled-components.js.flow +17 -7
@@ -1,7 +1,5 @@
1
1
  "use strict";
2
2
 
3
- function _typeof(obj) { "@babel/helpers - typeof"; if (typeof Symbol === "function" && typeof Symbol.iterator === "symbol") { _typeof = function _typeof(obj) { return typeof obj; }; } else { _typeof = function _typeof(obj) { return obj && typeof Symbol === "function" && obj.constructor === Symbol && obj !== Symbol.prototype ? "symbol" : typeof obj; }; } return _typeof(obj); }
4
-
5
3
  Object.defineProperty(exports, "__esModule", {
6
4
  value: true
7
5
  });
@@ -21,6 +19,8 @@ function _interopRequireWildcard(obj) { if (obj && obj.__esModule) { return obj;
21
19
 
22
20
  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); }
23
21
 
22
+ function _typeof(obj) { "@babel/helpers - typeof"; if (typeof Symbol === "function" && typeof Symbol.iterator === "symbol") { _typeof = function _typeof(obj) { return typeof obj; }; } else { _typeof = function _typeof(obj) { return obj && typeof Symbol === "function" && obj.constructor === Symbol && obj !== Symbol.prototype ? "symbol" : typeof obj; }; } return _typeof(obj); }
23
+
24
24
  function _classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError("Cannot call a class as a function"); } }
25
25
 
26
26
  function _defineProperties(target, props) { for (var i = 0; i < props.length; i++) { var descriptor = props[i]; descriptor.enumerable = descriptor.enumerable || false; descriptor.configurable = true; if ("value" in descriptor) descriptor.writable = true; Object.defineProperty(target, descriptor.key, descriptor); } }
@@ -76,6 +76,8 @@ var FormControl = /*#__PURE__*/function (_React$Component) {
76
76
  var _this$props = this.props,
77
77
  _this$props$overrides = _this$props.overrides,
78
78
  LabelOverride = _this$props$overrides.Label,
79
+ LabelEndEnhancerOverride = _this$props$overrides.LabelEndEnhancer,
80
+ LabelContainerOverride = _this$props$overrides.LabelContainer,
79
81
  CaptionOverride = _this$props$overrides.Caption,
80
82
  ControlContainerOverride = _this$props$overrides.ControlContainer,
81
83
  label = _this$props.label,
@@ -84,7 +86,8 @@ var FormControl = /*#__PURE__*/function (_React$Component) {
84
86
  error = _this$props.error,
85
87
  positive = _this$props.positive,
86
88
  htmlFor = _this$props.htmlFor,
87
- children = _this$props.children;
89
+ children = _this$props.children,
90
+ counter = _this$props.counter;
88
91
  var onlyChildProps = React.Children.only(children).props;
89
92
  var sharedProps = {
90
93
  $disabled: !!disabled,
@@ -94,6 +97,10 @@ var FormControl = /*#__PURE__*/function (_React$Component) {
94
97
 
95
98
  var Label = (0, _overrides.getOverride)(LabelOverride) || _styledComponents.Label;
96
99
 
100
+ var LabelEndEnhancer = (0, _overrides.getOverride)(LabelEndEnhancerOverride) || _styledComponents.LabelEndEnhancer;
101
+
102
+ var LabelContainer = (0, _overrides.getOverride)(LabelContainerOverride) || _styledComponents.LabelContainer;
103
+
97
104
  var Caption = (0, _overrides.getOverride)(CaptionOverride) || _styledComponents.Caption;
98
105
 
99
106
  var ControlContainer = (0, _overrides.getOverride)(ControlContainerOverride) || _styledComponents.ControlContainer;
@@ -107,10 +114,55 @@ var FormControl = /*#__PURE__*/function (_React$Component) {
107
114
  }
108
115
  }
109
116
 
110
- return /*#__PURE__*/React.createElement(React.Fragment, null, label && /*#__PURE__*/React.createElement(Label, _extends({
117
+ var labelEndEnhancer = this.props.labelEndEnhancer;
118
+
119
+ if (counter) {
120
+ // inferred values are preferred but if the user specifies the value
121
+ // that is then used as the default.
122
+ var maxLength = null;
123
+ var length = null;
124
+ var counterError = null;
125
+
126
+ if (_typeof(counter) === 'object') {
127
+ length = counter.length;
128
+ maxLength = counter.maxLength;
129
+ counterError = counter.error;
130
+ }
131
+
132
+ maxLength = maxLength ? maxLength : onlyChildProps.maxLength;
133
+
134
+ if (length == null && typeof onlyChildProps.value === 'string') {
135
+ length = onlyChildProps.value.length;
136
+ }
137
+
138
+ if (length == null) {
139
+ length = 0;
140
+
141
+ if (process.env.NODE_ENV !== "production") {
142
+ console.warn("[FromControl] `length` must either be explicitly set via `counter` object property, or `value` string property on the child component.");
143
+ }
144
+ }
145
+
146
+ sharedProps.$length = length;
147
+
148
+ if (maxLength == null) {
149
+ if (!labelEndEnhancer) labelEndEnhancer = "".concat(length);
150
+ } else {
151
+ sharedProps.$maxLength = length;
152
+ if (!labelEndEnhancer) labelEndEnhancer = "".concat(length, "/").concat(maxLength);
153
+ if (length > maxLength && counterError == null) counterError = true;
154
+ }
155
+
156
+ if (counterError) {
157
+ sharedProps.$error = true;
158
+ sharedProps.$counterError = true;
159
+ }
160
+ }
161
+
162
+ return /*#__PURE__*/React.createElement(React.Fragment, null, label && /*#__PURE__*/React.createElement(LabelContainer, _extends({}, sharedProps, (0, _overrides.getOverrideProps)(LabelContainerOverride)), /*#__PURE__*/React.createElement(Label, _extends({
111
163
  "data-baseweb": "form-control-label",
112
164
  htmlFor: htmlFor || onlyChildProps.id
113
- }, sharedProps, (0, _overrides.getOverrideProps)(LabelOverride)), typeof label === 'function' ? label(sharedProps) : label), /*#__PURE__*/React.createElement(_reactUid.UIDConsumer, null, function (captionId) {
165
+ }, sharedProps, (0, _overrides.getOverrideProps)(LabelOverride)), typeof label === 'function' ? label(sharedProps) : label), labelEndEnhancer && /*#__PURE__*/React.createElement(LabelEndEnhancer, _extends({}, sharedProps, (0, _overrides.getOverrideProps)(LabelEndEnhancerOverride)), typeof labelEndEnhancer === 'function' ? labelEndEnhancer(sharedProps) : labelEndEnhancer)), /*#__PURE__*/React.createElement(_reactUid.UIDConsumer, null, function (captionId) {
114
166
  return /*#__PURE__*/React.createElement(ControlContainer, _extends({
115
167
  "data-baseweb": "form-control-container"
116
168
  }, sharedProps, (0, _overrides.getOverrideProps)(ControlContainerOverride)), React.Children.map(children, function (child, index) {
@@ -121,8 +173,8 @@ var FormControl = /*#__PURE__*/function (_React$Component) {
121
173
  'aria-errormessage': error ? captionId : null,
122
174
  'aria-describedby': caption || positive ? captionId : null,
123
175
  disabled: onlyChildProps.disabled || disabled,
124
- error: typeof onlyChildProps.error !== 'undefined' ? onlyChildProps.error : error,
125
- positive: typeof onlyChildProps.positive !== 'undefined' ? onlyChildProps.positive : positive
176
+ error: typeof onlyChildProps.error !== 'undefined' ? onlyChildProps.error : sharedProps.$error,
177
+ positive: typeof onlyChildProps.positive !== 'undefined' ? onlyChildProps.positive : sharedProps.$positive
126
178
  });
127
179
  }), (caption || error || positive) && /*#__PURE__*/React.createElement(Caption, _extends({
128
180
  "data-baseweb": "form-control-caption",
@@ -141,5 +193,6 @@ _defineProperty(FormControl, "defaultProps", {
141
193
  overrides: {},
142
194
  label: null,
143
195
  caption: null,
144
- disabled: false
196
+ disabled: false,
197
+ counter: false
145
198
  });
@@ -11,10 +11,16 @@ import {getOverride, getOverrideProps} from '../helpers/overrides.js';
11
11
  import {UIDConsumer} from 'react-uid';
12
12
  import {
13
13
  Label as StyledLabel,
14
+ LabelEndEnhancer as StyledLabelEndEnhancer,
15
+ LabelContainer as StyledLabelContainer,
14
16
  Caption as StyledCaption,
15
17
  ControlContainer as StyledControlContainer,
16
18
  } from './styled-components.js';
17
- import type {FormControlPropsT, FormControlStateT} from './types.js';
19
+ import type {
20
+ FormControlPropsT,
21
+ FormControlStateT,
22
+ StylePropsT,
23
+ } from './types.js';
18
24
 
19
25
  function chooseRenderedHint(caption, error, positive, sharedProps) {
20
26
  if (error && typeof error !== 'boolean') {
@@ -41,12 +47,15 @@ export default class FormControl extends React.Component<
41
47
  label: null,
42
48
  caption: null,
43
49
  disabled: false,
50
+ counter: false,
44
51
  };
45
52
 
46
53
  render() {
47
54
  const {
48
55
  overrides: {
49
56
  Label: LabelOverride,
57
+ LabelEndEnhancer: LabelEndEnhancerOverride,
58
+ LabelContainer: LabelContainerOverride,
50
59
  Caption: CaptionOverride,
51
60
  ControlContainer: ControlContainerOverride,
52
61
  },
@@ -57,17 +66,22 @@ export default class FormControl extends React.Component<
57
66
  positive,
58
67
  htmlFor,
59
68
  children,
69
+ counter,
60
70
  } = this.props;
61
71
 
62
72
  const onlyChildProps = React.Children.only(children).props;
63
73
 
64
- const sharedProps = {
74
+ const sharedProps: StylePropsT = {
65
75
  $disabled: !!disabled,
66
76
  $error: !!error,
67
77
  $positive: !!positive,
68
78
  };
69
79
 
70
80
  const Label = getOverride(LabelOverride) || StyledLabel;
81
+ const LabelEndEnhancer =
82
+ getOverride(LabelEndEnhancerOverride) || StyledLabelEndEnhancer;
83
+ const LabelContainer =
84
+ getOverride(LabelContainerOverride) || StyledLabelContainer;
71
85
  const Caption = getOverride(CaptionOverride) || StyledCaption;
72
86
  const ControlContainer =
73
87
  getOverride(ControlContainerOverride) || StyledControlContainer;
@@ -83,17 +97,75 @@ export default class FormControl extends React.Component<
83
97
  }
84
98
  }
85
99
 
100
+ let labelEndEnhancer = this.props.labelEndEnhancer;
101
+ if (counter) {
102
+ // inferred values are preferred but if the user specifies the value
103
+ // that is then used as the default.
104
+ let maxLength: ?number = null;
105
+ let length: ?number = null;
106
+ let counterError: ?boolean = null;
107
+
108
+ if (typeof counter === 'object') {
109
+ length = counter.length;
110
+ maxLength = counter.maxLength;
111
+ counterError = counter.error;
112
+ }
113
+
114
+ maxLength = maxLength ? maxLength : onlyChildProps.maxLength;
115
+ if (length == null && typeof onlyChildProps.value === 'string') {
116
+ length = onlyChildProps.value.length;
117
+ }
118
+
119
+ if (length == null) {
120
+ length = 0;
121
+ if (__DEV__) {
122
+ console.warn(
123
+ `[FromControl] \`length\` must either be explicitly set via \`counter\` object property, or \`value\` string property on the child component.`,
124
+ );
125
+ }
126
+ }
127
+
128
+ sharedProps.$length = length;
129
+ if (maxLength == null) {
130
+ if (!labelEndEnhancer) labelEndEnhancer = `${length}`;
131
+ } else {
132
+ sharedProps.$maxLength = length;
133
+ if (!labelEndEnhancer) labelEndEnhancer = `${length}/${maxLength}`;
134
+ if (length > maxLength && counterError == null) counterError = true;
135
+ }
136
+
137
+ if (counterError) {
138
+ sharedProps.$error = true;
139
+ sharedProps.$counterError = true;
140
+ }
141
+ }
142
+
86
143
  return (
87
144
  <React.Fragment>
88
145
  {label && (
89
- <Label
90
- data-baseweb="form-control-label"
91
- htmlFor={htmlFor || onlyChildProps.id}
146
+ <LabelContainer
92
147
  {...sharedProps}
93
- {...getOverrideProps(LabelOverride)}
148
+ {...getOverrideProps(LabelContainerOverride)}
94
149
  >
95
- {typeof label === 'function' ? label(sharedProps) : label}
96
- </Label>
150
+ <Label
151
+ data-baseweb="form-control-label"
152
+ htmlFor={htmlFor || onlyChildProps.id}
153
+ {...sharedProps}
154
+ {...getOverrideProps(LabelOverride)}
155
+ >
156
+ {typeof label === 'function' ? label(sharedProps) : label}
157
+ </Label>
158
+ {labelEndEnhancer && (
159
+ <LabelEndEnhancer
160
+ {...sharedProps}
161
+ {...getOverrideProps(LabelEndEnhancerOverride)}
162
+ >
163
+ {typeof labelEndEnhancer === 'function'
164
+ ? labelEndEnhancer(sharedProps)
165
+ : labelEndEnhancer}
166
+ </LabelEndEnhancer>
167
+ )}
168
+ </LabelContainer>
97
169
  )}
98
170
  <UIDConsumer>
99
171
  {captionId => (
@@ -114,11 +186,11 @@ export default class FormControl extends React.Component<
114
186
  error:
115
187
  typeof onlyChildProps.error !== 'undefined'
116
188
  ? onlyChildProps.error
117
- : error,
189
+ : sharedProps.$error,
118
190
  positive:
119
191
  typeof onlyChildProps.positive !== 'undefined'
120
192
  ? onlyChildProps.positive
121
- : positive,
193
+ : sharedProps.$positive,
122
194
  });
123
195
  })}
124
196
  {(caption || error || positive) && (
@@ -25,6 +25,7 @@ export interface FormControlProps {
25
25
  error?: boolean | React.ReactNode;
26
26
  positive?: React.ReactNode;
27
27
  htmlFor?: string;
28
+ counter?: boolean | {length?: number; maxLength?: number; error?: boolean};
28
29
  }
29
30
 
30
31
  export class FormControl extends React.Component<
@@ -3,7 +3,7 @@
3
3
  Object.defineProperty(exports, "__esModule", {
4
4
  value: true
5
5
  });
6
- exports.ControlContainer = exports.Caption = exports.Label = void 0;
6
+ exports.ControlContainer = exports.Caption = exports.LabelEndEnhancer = exports.LabelContainer = exports.Label = void 0;
7
7
 
8
8
  var _index = require("../styles/index.js");
9
9
 
@@ -17,7 +17,6 @@ var Label = (0, _index.styled)('label', function (props) {
17
17
  var $disabled = props.$disabled,
18
18
  _props$$theme = props.$theme,
19
19
  colors = _props$$theme.colors,
20
- sizing = _props$$theme.sizing,
21
20
  typography = _props$$theme.typography;
22
21
  return _objectSpread(_objectSpread({}, typography.font250), {}, {
23
22
  fontWeight: 500,
@@ -27,15 +26,38 @@ var Label = (0, _index.styled)('label', function (props) {
27
26
  paddingTop: 0,
28
27
  paddingRight: 0,
29
28
  paddingBottom: 0,
30
- paddingLeft: 0,
29
+ paddingLeft: 0
30
+ });
31
+ });
32
+ exports.Label = Label;
33
+ Label.displayName = "Label";
34
+ var LabelContainer = (0, _index.styled)('span', function (_ref) {
35
+ var sizing = _ref.$theme.sizing;
36
+ return {
37
+ display: 'flex',
38
+ width: '100%',
31
39
  marginTop: sizing.scale300,
32
40
  marginRight: 0,
33
41
  marginBottom: sizing.scale300,
34
42
  marginLeft: 0
43
+ };
44
+ });
45
+ exports.LabelContainer = LabelContainer;
46
+ LabelContainer.displayName = "LabelContainer";
47
+ var LabelEndEnhancer = (0, _index.styled)('span', function (_ref2) {
48
+ var $disabled = _ref2.$disabled,
49
+ $counterError = _ref2.$counterError,
50
+ _ref2$$theme = _ref2.$theme,
51
+ colors = _ref2$$theme.colors,
52
+ typography = _ref2$$theme.typography;
53
+ return _objectSpread(_objectSpread({}, typography.font100), {}, {
54
+ flex: 0,
55
+ width: '100%',
56
+ color: $counterError ? colors.negative400 : $disabled ? colors.contentSecondary : colors.contentPrimary
35
57
  });
36
58
  });
37
- exports.Label = Label;
38
- Label.displayName = "Label";
59
+ exports.LabelEndEnhancer = LabelEndEnhancer;
60
+ LabelEndEnhancer.displayName = "LabelEndEnhancer";
39
61
  var Caption = (0, _index.styled)('div', function (props) {
40
62
  var $error = props.$error,
41
63
  $positive = props.$positive,
@@ -12,7 +12,7 @@ import type {StylePropsT} from './types.js';
12
12
  export const Label = styled<StylePropsT>('label', props => {
13
13
  const {
14
14
  $disabled,
15
- $theme: {colors, sizing, typography},
15
+ $theme: {colors, typography},
16
16
  } = props;
17
17
  return {
18
18
  ...typography.font250,
@@ -24,12 +24,34 @@ export const Label = styled<StylePropsT>('label', props => {
24
24
  paddingRight: 0,
25
25
  paddingBottom: 0,
26
26
  paddingLeft: 0,
27
+ };
28
+ });
29
+
30
+ export const LabelContainer = styled<StylePropsT>(
31
+ 'span',
32
+ ({$theme: {sizing}}) => ({
33
+ display: 'flex',
34
+ width: '100%',
27
35
  marginTop: sizing.scale300,
28
36
  marginRight: 0,
29
37
  marginBottom: sizing.scale300,
30
38
  marginLeft: 0,
31
- };
32
- });
39
+ }),
40
+ );
41
+
42
+ export const LabelEndEnhancer = styled<StylePropsT>(
43
+ 'span',
44
+ ({$disabled, $counterError, $theme: {colors, typography}}) => ({
45
+ ...typography.font100,
46
+ flex: 0,
47
+ width: '100%',
48
+ color: $counterError
49
+ ? colors.negative400
50
+ : $disabled
51
+ ? colors.contentSecondary
52
+ : colors.contentPrimary,
53
+ }),
54
+ );
33
55
 
34
56
  export const Caption = styled<StylePropsT>('div', props => {
35
57
  const {
@@ -13,15 +13,20 @@ export type FormControlStateT = {|
13
13
  captionId: string,
14
14
  |};
15
15
 
16
+ export type OverridesT = {
17
+ /** Customizes the label element. */
18
+ Label?: OverrideT,
19
+ /** Customizes the label end enhancer element. */
20
+ LabelEndEnhancer?: OverrideT,
21
+ /** Customizes the label container element. */
22
+ LabelContainer?: OverrideT,
23
+ /** Customizes the caption element. */
24
+ Caption?: OverrideT,
25
+ /** Customizes the container element. */
26
+ ControlContainer?: OverrideT,
27
+ };
16
28
  export type FormControlPropsT = {
17
- overrides: {
18
- /** Customizes the label element. */
19
- Label?: OverrideT,
20
- /** Customizes the caption element. */
21
- Caption?: OverrideT,
22
- /** Customizes the container element. */
23
- ControlContainer?: OverrideT,
24
- },
29
+ overrides: OverridesT,
25
30
  /** A label rendered above the input field. */
26
31
  label: ?(React.Node | ((props: {}) => React.Node)),
27
32
  /** A caption rendered below the input field. */
@@ -34,6 +39,10 @@ export type FormControlPropsT = {
34
39
  positive?: React.Node | ((props: {}) => React.Node),
35
40
  /** The id of the related form element. Defaults to the id property of the child, if any. */
36
41
  htmlFor?: string,
42
+ /** Adds a label end enhancer to the label */
43
+ labelEndEnhancer?: ?(React.Node | ((props: {}) => React.Node)),
44
+ /** Adds a length counter to the form control. If your input does not have a "string" value exposed as a prop, you provide the length as an object.*/
45
+ counter?: boolean | {|length?: number, maxLength?: number, error?: boolean|},
37
46
  children: React.Node,
38
47
  };
39
48
 
@@ -41,6 +50,9 @@ export type StylePropsT = {
41
50
  $disabled?: boolean,
42
51
  $error?: boolean,
43
52
  $positive?: boolean,
53
+ $length?: number,
54
+ $maxLength?: number,
55
+ $counterError?: boolean,
44
56
  };
45
57
 
46
58
  declare var __DEV__: boolean;
package/index.js CHANGED
@@ -129,6 +129,12 @@ Object.defineProperty(exports, "BaseProvider", {
129
129
  return _baseProvider.default;
130
130
  }
131
131
  });
132
+ Object.defineProperty(exports, "getOverrides", {
133
+ enumerable: true,
134
+ get: function get() {
135
+ return _overrides.getOverrides;
136
+ }
137
+ });
132
138
  Object.defineProperty(exports, "mergeOverrides", {
133
139
  enumerable: true,
134
140
  get: function get() {
package/index.js.flow CHANGED
@@ -30,7 +30,7 @@ export {
30
30
  } from './themes/index.js';
31
31
  export {default as LocaleProvider} from './locale/index.js';
32
32
  export {default as BaseProvider} from './helpers/base-provider.js';
33
- export {mergeOverrides} from './helpers/overrides.js';
33
+ export {getOverrides, mergeOverrides} from './helpers/overrides.js';
34
34
  export type {PrimitivesT} from './themes/types.js';
35
35
  export type {ThemeT} from './styles/types.js';
36
36
 
@@ -0,0 +1,90 @@
1
+ "use strict";
2
+
3
+ function _typeof(obj) { "@babel/helpers - typeof"; if (typeof Symbol === "function" && typeof Symbol.iterator === "symbol") { _typeof = function _typeof(obj) { return typeof obj; }; } else { _typeof = function _typeof(obj) { return obj && typeof Symbol === "function" && obj.constructor === Symbol && obj !== Symbol.prototype ? "symbol" : typeof obj; }; } return _typeof(obj); }
4
+
5
+ Object.defineProperty(exports, "__esModule", {
6
+ value: true
7
+ });
8
+ exports.default = void 0;
9
+
10
+ var React = _interopRequireWildcard(require("react"));
11
+
12
+ var _overrides = require("../helpers/overrides.js");
13
+
14
+ var _styledComponents = require("./styled-components.js");
15
+
16
+ var _constants = require("./constants.js");
17
+
18
+ function _getRequireWildcardCache() { if (typeof WeakMap !== "function") return null; var cache = new WeakMap(); _getRequireWildcardCache = function _getRequireWildcardCache() { return cache; }; return cache; }
19
+
20
+ function _interopRequireWildcard(obj) { if (obj && obj.__esModule) { return obj; } if (obj === null || _typeof(obj) !== "object" && typeof obj !== "function") { return { default: obj }; } var cache = _getRequireWildcardCache(); if (cache && cache.has(obj)) { return cache.get(obj); } var newObj = {}; var hasPropertyDescriptor = Object.defineProperty && Object.getOwnPropertyDescriptor; for (var key in obj) { if (Object.prototype.hasOwnProperty.call(obj, key)) { var desc = hasPropertyDescriptor ? Object.getOwnPropertyDescriptor(obj, key) : null; if (desc && (desc.get || desc.set)) { Object.defineProperty(newObj, key, desc); } else { newObj[key] = obj[key]; } } } newObj.default = obj; if (cache) { cache.set(obj, newObj); } return newObj; }
21
+
22
+ 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); }
23
+
24
+ function _slicedToArray(arr, i) { return _arrayWithHoles(arr) || _iterableToArrayLimit(arr, i) || _unsupportedIterableToArray(arr, i) || _nonIterableRest(); }
25
+
26
+ function _nonIterableRest() { throw new TypeError("Invalid attempt to destructure non-iterable instance.\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method."); }
27
+
28
+ function _unsupportedIterableToArray(o, minLen) { if (!o) return; if (typeof o === "string") return _arrayLikeToArray(o, minLen); var n = Object.prototype.toString.call(o).slice(8, -1); if (n === "Object" && o.constructor) n = o.constructor.name; if (n === "Map" || n === "Set") return Array.from(o); if (n === "Arguments" || /^(?:Ui|I)nt(?:8|16|32)(?:Clamped)?Array$/.test(n)) return _arrayLikeToArray(o, minLen); }
29
+
30
+ function _arrayLikeToArray(arr, len) { if (len == null || len > arr.length) len = arr.length; for (var i = 0, arr2 = new Array(len); i < len; i++) { arr2[i] = arr[i]; } return arr2; }
31
+
32
+ function _iterableToArrayLimit(arr, i) { if (typeof Symbol === "undefined" || !(Symbol.iterator in Object(arr))) return; var _arr = []; var _n = true; var _d = false; var _e = undefined; try { for (var _i = arr[Symbol.iterator](), _s; !(_n = (_s = _i.next()).done); _n = true) { _arr.push(_s.value); if (i && _arr.length === i) break; } } catch (err) { _d = true; _e = err; } finally { try { if (!_n && _i["return"] != null) _i["return"](); } finally { if (_d) throw _e; } } return _arr; }
33
+
34
+ function _arrayWithHoles(arr) { if (Array.isArray(arr)) return arr; }
35
+
36
+ var BadgeEnhancer = function BadgeEnhancer(_ref) {
37
+ var pinHeadSize = _ref.pinHeadSize,
38
+ markerType = _ref.markerType,
39
+ _ref$badgeEnhancerSiz = _ref.badgeEnhancerSize,
40
+ badgeEnhancerSize = _ref$badgeEnhancerSiz === void 0 ? _constants.BADGE_ENHANCER_SIZES.none : _ref$badgeEnhancerSiz,
41
+ BadgeEnhancerContent = _ref.badgeEnhancerContent,
42
+ _ref$overrides = _ref.overrides,
43
+ overrides = _ref$overrides === void 0 ? {} : _ref$overrides;
44
+
45
+ if (badgeEnhancerSize === null || badgeEnhancerSize == _constants.BADGE_ENHANCER_SIZES.none) {
46
+ return null;
47
+ }
48
+
49
+ if (badgeEnhancerSize !== _constants.BADGE_ENHANCER_SIZES.xSmall && !BadgeEnhancerContent) {
50
+ if (process.env.NODE_ENV !== "production") {
51
+ console.warn("Badges (except for size ".concat(_constants.BADGE_ENHANCER_SIZES.xSmall, ") must contain content"));
52
+ }
53
+
54
+ return null;
55
+ }
56
+
57
+ if (markerType === _constants.PINHEAD_TYPES.floating) {
58
+ if (process.env.NODE_ENV !== "production") {
59
+ console.warn("Badges can only be rendered on fixed markers");
60
+ }
61
+
62
+ return null;
63
+ }
64
+
65
+ var positions = _constants.BADGE_ENHANCER_POSITIONS[pinHeadSize];
66
+ var position = positions ? positions[badgeEnhancerSize] : null;
67
+
68
+ if (!position) {
69
+ if (process.env.NODE_ENV !== "production") {
70
+ console.warn("Badge size ".concat(badgeEnhancerSize, " cannot be rendered with pinhead size ").concat(pinHeadSize));
71
+ }
72
+
73
+ return null;
74
+ }
75
+
76
+ var _getOverrides = (0, _overrides.getOverrides)(overrides.BadgeEnhancer, _styledComponents.StyledBadgeEnhancerRoot),
77
+ _getOverrides2 = _slicedToArray(_getOverrides, 2),
78
+ BadgeEnhancerRoot = _getOverrides2[0],
79
+ badgeEnhancerRootProps = _getOverrides2[1];
80
+
81
+ return /*#__PURE__*/React.createElement(BadgeEnhancerRoot, _extends({
82
+ $size: badgeEnhancerSize,
83
+ $position: position
84
+ }, badgeEnhancerRootProps), BadgeEnhancerContent && badgeEnhancerSize !== _constants.BADGE_ENHANCER_SIZES.xSmall && /*#__PURE__*/React.createElement(BadgeEnhancerContent, {
85
+ size: _constants.BADGE_ENHANCER_CONTENT_SIZE[badgeEnhancerSize]
86
+ }));
87
+ };
88
+
89
+ var _default = BadgeEnhancer;
90
+ exports.default = _default;
@@ -0,0 +1,86 @@
1
+ /*
2
+ Copyright (c) Uber Technologies, Inc.
3
+
4
+ This source code is licensed under the MIT license found in the
5
+ LICENSE file in the root directory of this source tree.
6
+ */
7
+
8
+ // @flow
9
+ import * as React from 'react';
10
+ import type {BadgeEnhancerComponentT} from './types.js';
11
+ import {getOverrides} from '../helpers/overrides.js';
12
+ import {StyledBadgeEnhancerRoot} from './styled-components.js';
13
+ import {
14
+ PINHEAD_TYPES,
15
+ BADGE_ENHANCER_SIZES,
16
+ BADGE_ENHANCER_POSITIONS,
17
+ BADGE_ENHANCER_CONTENT_SIZE,
18
+ } from './constants.js';
19
+
20
+ const BadgeEnhancer = ({
21
+ pinHeadSize,
22
+ markerType,
23
+ badgeEnhancerSize = BADGE_ENHANCER_SIZES.none,
24
+ badgeEnhancerContent: BadgeEnhancerContent,
25
+ overrides = {},
26
+ }: BadgeEnhancerComponentT) => {
27
+ if (
28
+ badgeEnhancerSize === null ||
29
+ badgeEnhancerSize == BADGE_ENHANCER_SIZES.none
30
+ ) {
31
+ return null;
32
+ }
33
+ if (
34
+ badgeEnhancerSize !== BADGE_ENHANCER_SIZES.xSmall &&
35
+ !BadgeEnhancerContent
36
+ ) {
37
+ if (__DEV__) {
38
+ console.warn(
39
+ `Badges (except for size ${BADGE_ENHANCER_SIZES.xSmall}) must contain content`,
40
+ );
41
+ }
42
+ return null;
43
+ }
44
+ if (markerType === PINHEAD_TYPES.floating) {
45
+ if (__DEV__) {
46
+ console.warn(`Badges can only be rendered on fixed markers`);
47
+ }
48
+ return null;
49
+ }
50
+ const positions = BADGE_ENHANCER_POSITIONS[pinHeadSize];
51
+ const position = positions ? positions[badgeEnhancerSize] : null;
52
+ if (!position) {
53
+ if (__DEV__) {
54
+ console.warn(
55
+ `Badge size ${badgeEnhancerSize} cannot be rendered with pinhead size ${pinHeadSize}`,
56
+ );
57
+ }
58
+ return null;
59
+ }
60
+
61
+ const [BadgeEnhancerRoot, badgeEnhancerRootProps] = getOverrides(
62
+ overrides.BadgeEnhancer,
63
+ StyledBadgeEnhancerRoot,
64
+ );
65
+
66
+ return (
67
+ <BadgeEnhancerRoot
68
+ $size={badgeEnhancerSize}
69
+ $position={position}
70
+ {...badgeEnhancerRootProps}
71
+ >
72
+ {BadgeEnhancerContent &&
73
+ badgeEnhancerSize !== BADGE_ENHANCER_SIZES.xSmall && (
74
+ <BadgeEnhancerContent
75
+ size={BADGE_ENHANCER_CONTENT_SIZE[badgeEnhancerSize]}
76
+ />
77
+ )}
78
+ </BadgeEnhancerRoot>
79
+ );
80
+ };
81
+
82
+ export default BadgeEnhancer;
83
+
84
+ declare var __DEV__: boolean;
85
+ declare var __NODE__: boolean;
86
+ declare var __BROWSER__: boolean;