@commercetools-uikit/localized-multiline-text-input 0.0.0-canary-2021830134526

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.
@@ -0,0 +1,7 @@
1
+ 'use strict';
2
+
3
+ if (process.env.NODE_ENV === "production") {
4
+ module.exports = require("./commercetools-uikit-localized-multiline-text-input.cjs.prod.js");
5
+ } else {
6
+ module.exports = require("./commercetools-uikit-localized-multiline-text-input.cjs.dev.js");
7
+ }
@@ -0,0 +1,404 @@
1
+ 'use strict';
2
+
3
+ Object.defineProperty(exports, '__esModule', { value: true });
4
+
5
+ var _Object$getOwnPropertySymbols = require('@babel/runtime-corejs3/core-js-stable/object/get-own-property-symbols');
6
+ var _filterInstanceProperty = require('@babel/runtime-corejs3/core-js-stable/instance/filter');
7
+ var _Object$getOwnPropertyDescriptor = require('@babel/runtime-corejs3/core-js-stable/object/get-own-property-descriptor');
8
+ var _forEachInstanceProperty = require('@babel/runtime-corejs3/core-js-stable/instance/for-each');
9
+ var _Object$getOwnPropertyDescriptors = require('@babel/runtime-corejs3/core-js-stable/object/get-own-property-descriptors');
10
+ var _Object$defineProperties = require('@babel/runtime-corejs3/core-js-stable/object/define-properties');
11
+ var _Object$defineProperty = require('@babel/runtime-corejs3/core-js-stable/object/define-property');
12
+ require('@babel/runtime-corejs3/helpers/taggedTemplateLiteral');
13
+ var _slicedToArray = require('@babel/runtime-corejs3/helpers/slicedToArray');
14
+ var _defineProperty = require('@babel/runtime-corejs3/helpers/defineProperty');
15
+ var _reduceInstanceProperty = require('@babel/runtime-corejs3/core-js-stable/instance/reduce');
16
+ var _Object$keys = require('@babel/runtime-corejs3/core-js-stable/object/keys');
17
+ var _mapInstanceProperty = require('@babel/runtime-corejs3/core-js-stable/instance/map');
18
+ require('@babel/runtime-corejs3/core-js-stable/instance/concat');
19
+ var react$1 = require('react');
20
+ require('prop-types');
21
+ require('react-required-if');
22
+ require('common-tags');
23
+ var reactIntl = require('react-intl');
24
+ var react = require('@emotion/react');
25
+ var hooks = require('@commercetools-uikit/hooks');
26
+ var Stack = require('@commercetools-uikit/spacings-stack');
27
+ var Constraints = require('@commercetools-uikit/constraints');
28
+ var localizedUtils = require('@commercetools-uikit/localized-utils');
29
+ var inputUtils = require('@commercetools-uikit/input-utils');
30
+ var _styled = require('@emotion/styled/base');
31
+ var FlatButton = require('@commercetools-uikit/flat-button');
32
+ var icons = require('@commercetools-uikit/icons');
33
+ var utils = require('@commercetools-uikit/utils');
34
+ var designSystem = require('@commercetools-uikit/design-system');
35
+ var Text = require('@commercetools-uikit/text');
36
+ var jsxRuntime = require('@emotion/react/jsx-runtime');
37
+ var messages = require('@commercetools-uikit/messages');
38
+
39
+ function _interopDefault (e) { return e && e.__esModule ? e : { 'default': e }; }
40
+
41
+ var _Object$getOwnPropertySymbols__default = /*#__PURE__*/_interopDefault(_Object$getOwnPropertySymbols);
42
+ var _filterInstanceProperty__default = /*#__PURE__*/_interopDefault(_filterInstanceProperty);
43
+ var _Object$getOwnPropertyDescriptor__default = /*#__PURE__*/_interopDefault(_Object$getOwnPropertyDescriptor);
44
+ var _forEachInstanceProperty__default = /*#__PURE__*/_interopDefault(_forEachInstanceProperty);
45
+ var _Object$getOwnPropertyDescriptors__default = /*#__PURE__*/_interopDefault(_Object$getOwnPropertyDescriptors);
46
+ var _Object$defineProperties__default = /*#__PURE__*/_interopDefault(_Object$defineProperties);
47
+ var _Object$defineProperty__default = /*#__PURE__*/_interopDefault(_Object$defineProperty);
48
+ var _reduceInstanceProperty__default = /*#__PURE__*/_interopDefault(_reduceInstanceProperty);
49
+ var _Object$keys__default = /*#__PURE__*/_interopDefault(_Object$keys);
50
+ var _mapInstanceProperty__default = /*#__PURE__*/_interopDefault(_mapInstanceProperty);
51
+ var Stack__default = /*#__PURE__*/_interopDefault(Stack);
52
+ var Constraints__default = /*#__PURE__*/_interopDefault(Constraints);
53
+ var _styled__default = /*#__PURE__*/_interopDefault(_styled);
54
+ var FlatButton__default = /*#__PURE__*/_interopDefault(FlatButton);
55
+ var Text__default = /*#__PURE__*/_interopDefault(Text);
56
+
57
+ function ownKeys$3(object, enumerableOnly) { var keys = _Object$keys__default['default'](object); if (_Object$getOwnPropertySymbols__default['default']) { var symbols = _Object$getOwnPropertySymbols__default['default'](object); if (enumerableOnly) { symbols = _filterInstanceProperty__default['default'](symbols).call(symbols, function (sym) { return _Object$getOwnPropertyDescriptor__default['default'](object, sym).enumerable; }); } keys.push.apply(keys, symbols); } return keys; }
58
+
59
+ function _objectSpread$3(target) { for (var i = 1; i < arguments.length; i++) { var source = arguments[i] != null ? arguments[i] : {}; if (i % 2) { var _context; _forEachInstanceProperty__default['default'](_context = ownKeys$3(Object(source), true)).call(_context, function (key) { _defineProperty(target, key, source[key]); }); } else if (_Object$getOwnPropertyDescriptors__default['default']) { _Object$defineProperties__default['default'](target, _Object$getOwnPropertyDescriptors__default['default'](source)); } else { var _context2; _forEachInstanceProperty__default['default'](_context2 = ownKeys$3(Object(source))).call(_context2, function (key) { _Object$defineProperty__default['default'](target, key, _Object$getOwnPropertyDescriptor__default['default'](source, key)); }); } } return target; }
60
+ // * a disabled-field currently does not display warning/error-states so it takes precedence
61
+ // * a readonly-field cannot be changed, but it might be relevant for validation, so error and warning are checked first
62
+ // how you can interact with the field is controlled separately by the props, this only influences visuals
63
+
64
+ var _ref$2 = {
65
+ name: "d3v9zr",
66
+ styles: "overflow:hidden"
67
+ } ;
68
+
69
+ var _ref2 = {
70
+ name: "9a98ig",
71
+ styles: "border-top-left-radius:0!important;border-bottom-left-radius:0!important"
72
+ } ;
73
+
74
+ var getTextareaStyles = function getTextareaStyles(props) {
75
+ var baseStyles = [_ref2, props.isCollapsed && _ref$2];
76
+ return baseStyles;
77
+ };
78
+
79
+ var getLanguageLabelStyles = function getLanguageLabelStyles(props, theme) {
80
+ var overwrittenVars = _objectSpread$3(_objectSpread$3({}, designSystem.customProperties), theme);
81
+
82
+ return /*#__PURE__*/react.css("flex:1 0 auto;color:", overwrittenVars[designSystem.designTokens.fontColorForInputWhenDisabled], ";line-height:calc(", designSystem.customProperties.sizeHeightInput, " - 2 * ", designSystem.customProperties.borderRadius1, ");background-color:", overwrittenVars[designSystem.designTokens.backgroundColorForInputWhenDisabled], ";border-top-left-radius:", overwrittenVars[designSystem.designTokens.borderRadiusForInput], ";border-bottom-left-radius:", overwrittenVars[designSystem.designTokens.borderRadiusForInput], ";border:1px ", overwrittenVars[designSystem.designTokens.borderColorForInputWhenDisabled], " solid;padding:0 ", designSystem.customProperties.spacingS, ";transition:border-color ", designSystem.customProperties.transitionStandard, ",background-color ", designSystem.customProperties.transitionStandard, ",color ", designSystem.customProperties.transitionStandard, ";border-right:0;box-shadow:none;appearance:none;" + ("" ), "" );
83
+ };
84
+
85
+ var ToggleButtonWrapper = _styled__default['default']("div", {
86
+ target: "ed3jgad0"
87
+ } )({
88
+ name: "ejz79s",
89
+ styles: "flex:0;display:flex"
90
+ } );
91
+
92
+ function ownKeys$2(object, enumerableOnly) { var keys = _Object$keys__default['default'](object); if (_Object$getOwnPropertySymbols__default['default']) { var symbols = _Object$getOwnPropertySymbols__default['default'](object); if (enumerableOnly) { symbols = _filterInstanceProperty__default['default'](symbols).call(symbols, function (sym) { return _Object$getOwnPropertyDescriptor__default['default'](object, sym).enumerable; }); } keys.push.apply(keys, symbols); } return keys; }
93
+
94
+ function _objectSpread$2(target) { for (var i = 1; i < arguments.length; i++) { var source = arguments[i] != null ? arguments[i] : {}; if (i % 2) { var _context; _forEachInstanceProperty__default['default'](_context = ownKeys$2(Object(source), true)).call(_context, function (key) { _defineProperty(target, key, source[key]); }); } else if (_Object$getOwnPropertyDescriptors__default['default']) { _Object$defineProperties__default['default'](target, _Object$getOwnPropertyDescriptors__default['default'](source)); } else { var _context2; _forEachInstanceProperty__default['default'](_context2 = ownKeys$2(Object(source))).call(_context2, function (key) { _Object$defineProperty__default['default'](target, key, _Object$getOwnPropertyDescriptor__default['default'](source, key)); }); } } return target; }
95
+
96
+ var LeftColumn = _styled__default['default']("div", {
97
+ target: "ecub1e22"
98
+ } )({
99
+ name: "82a6rk",
100
+ styles: "flex:1"
101
+ } );
102
+
103
+ var RightColumn = _styled__default['default']("div", {
104
+ target: "ecub1e21"
105
+ } )({
106
+ name: "1m04uhl",
107
+ styles: "position:relative;flex:0;display:flex;align-items:flex-start"
108
+ } );
109
+
110
+ var Row = _styled__default['default']("div", {
111
+ target: "ecub1e20"
112
+ } )({
113
+ name: "skgbeu",
114
+ styles: "display:flex;justify-content:flex-end"
115
+ } );
116
+
117
+ var _ref$1 = {
118
+ name: "1ktetz7",
119
+ styles: "width:100%;position:relative;display:flex"
120
+ } ;
121
+
122
+ var TranslationInput = function TranslationInput(props) {
123
+ var _useState = react$1.useState(TranslationInput.MIN_ROW_COUNT),
124
+ _useState2 = _slicedToArray(_useState, 2),
125
+ contentRowCount = _useState2[0],
126
+ setContentRowCount = _useState2[1];
127
+
128
+ var handleHeightChange = react$1.useCallback(function (_, rowCount) {
129
+ setContentRowCount(rowCount);
130
+ }, [setContentRowCount]);
131
+ var onChange = props.onChange;
132
+ var handleChange = react$1.useCallback(function (event) {
133
+ // We manipulate the event to add the language to the target.
134
+ // That way the users of LocalizedTextInput's onChange can read
135
+ // event.target.language and event.target.value to determine the next value.
136
+ //
137
+ // We only need this information for the story, the MC application code will
138
+ // never need to access the information in such an inconvenient way, as
139
+ // Formik can deal with a name like "foo.en" and sets the value correctly.
140
+ // We can't use this as we aren't guaranteed a name in the story as the user
141
+ // might clear it using the knob, and then we can't parse the language from
142
+ // the input name anymore.
143
+ //
144
+ // eslint-disable-next-line no-param-reassign
145
+ event.target.language = props.language;
146
+ onChange(event);
147
+ }, [onChange, props.language]);
148
+ var onFocus = props.onFocus,
149
+ onToggle = props.onToggle;
150
+ var handleFocus = react$1.useCallback(function () {
151
+ // Expand the input on focus
152
+ if (props.isCollapsed) onToggle();
153
+ if (onFocus) onFocus();
154
+ }, [props.isCollapsed, onFocus, onToggle]); // This checks if the content in the textarea overflows the minimum
155
+ // amount of lines it should have when collapsed
156
+
157
+ var contentExceedsShownRows = contentRowCount > TranslationInput.MIN_ROW_COUNT;
158
+ var shouldToggleButtonTakeSpace =
159
+ /*
160
+ - if hasLanguagesControl and there are no errors/warnings to display
161
+ - then the toggleButton is absolutely positioned
162
+ This is because the toggle button is placed next to the LocalizedInputToggle without being siblings in the DOM.
163
+ If there is a error or warning showing,
164
+ then it can be placed statically because it will then be a sibling to the error/warning message
165
+ and LocalizedInputToggle is placed below the errors/warnings.
166
+ */
167
+ !props.isCollapsed && contentExceedsShownRows && !props.hasLanguagesControl || props.error || props.warning;
168
+ var theme = react.useTheme();
169
+ return jsxRuntime.jsxs(Stack__default['default'], {
170
+ scale: "xs",
171
+ children: [jsxRuntime.jsxs("div", {
172
+ css: _ref$1,
173
+ children: [jsxRuntime.jsx("label", {
174
+ htmlFor: props.id,
175
+ css: getLanguageLabelStyles(props, theme),
176
+ children: jsxRuntime.jsx(Text__default['default'].Detail, {
177
+ tone: "secondary",
178
+ children: props.language.toUpperCase()
179
+ })
180
+ }), jsxRuntime.jsx(inputUtils.MultilineInput, _objectSpread$2({
181
+ theme: theme,
182
+ id: props.id,
183
+ name: props.name,
184
+ autoComplete: props.autoComplete,
185
+ value: props.value,
186
+ onChange: handleChange,
187
+ onHeightChange: handleHeightChange,
188
+ onBlur: props.onBlur,
189
+ onFocus: handleFocus,
190
+ isDisabled: props.isDisabled,
191
+ placeholder: props.placeholder,
192
+ css: getTextareaStyles(props),
193
+ hasError: props.hasError,
194
+ hasWarning: props.hasWarning,
195
+ isReadOnly: props.isReadOnly,
196
+ isAutofocussed: props.isAutofocussed,
197
+ isOpen: !props.isCollapsed
198
+ }, utils.filterDataAttributes(props)))]
199
+ }, props.language), jsxRuntime.jsxs(Row // NOTE: applying this style withing the `styled` component results in the production
200
+ // bundle to apply the style in the wrong order.
201
+ // For instance, we need to override the marging of the spacing component, which also
202
+ // uses `!important`.
203
+ // Anyway, apparently by passing the style as a `css` prop to the `styled` component
204
+ // does the trick.
205
+ // TODO: revisit the logic and the implementation to maybe avoid having to apply this style.
206
+ , {
207
+ css: /*#__PURE__*/react.css("margin-top:", shouldToggleButtonTakeSpace ? 'inherit' : '0px !important', ";" + ("" ), "" ),
208
+ children: [function () {
209
+ if (props.error) return jsxRuntime.jsx(LeftColumn, {
210
+ children: jsxRuntime.jsx("div", {
211
+ children: props.error
212
+ })
213
+ });
214
+ if (props.warning) return jsxRuntime.jsx(LeftColumn, {
215
+ children: jsxRuntime.jsx("div", {
216
+ children: props.warning
217
+ })
218
+ });
219
+ return null;
220
+ }(), !props.isCollapsed && contentExceedsShownRows && jsxRuntime.jsxs(jsxRuntime.Fragment, {
221
+ children: [jsxRuntime.jsx(LeftColumn, {}), jsxRuntime.jsx(RightColumn, {
222
+ children: jsxRuntime.jsx(ToggleButtonWrapper, {
223
+ css: [!shouldToggleButtonTakeSpace && /*#__PURE__*/react.css("position:absolute;top:0;right:0;margin-top:", designSystem.customProperties.spacingXs, ";" + ("" ), "" ), "" , "" ],
224
+ children: jsxRuntime.jsx(FlatButton__default['default'], {
225
+ onClick: props.onToggle,
226
+ isDisabled: props.isDisabled,
227
+ label: props.intl.formatMessage(inputUtils.messagesMultilineInput.collapse),
228
+ icon: jsxRuntime.jsx(icons.AngleUpIcon, {
229
+ size: "small"
230
+ })
231
+ })
232
+ })
233
+ })]
234
+ })]
235
+ })]
236
+ });
237
+ };
238
+
239
+ TranslationInput.displayName = 'TranslationInput';
240
+ TranslationInput.propTypes = {}; // The minimum ammount of rows the MultilineTextInput will show.
241
+ // When the input is closed, this is used as the maximum row count as well
242
+ // so that the input "collapses".
243
+
244
+ TranslationInput.MIN_ROW_COUNT = 1;
245
+ var TranslationInput$1 = TranslationInput;
246
+
247
+ function ownKeys$1(object, enumerableOnly) { var keys = _Object$keys__default['default'](object); if (_Object$getOwnPropertySymbols__default['default']) { var symbols = _Object$getOwnPropertySymbols__default['default'](object); if (enumerableOnly) { symbols = _filterInstanceProperty__default['default'](symbols).call(symbols, function (sym) { return _Object$getOwnPropertyDescriptor__default['default'](object, sym).enumerable; }); } keys.push.apply(keys, symbols); } return keys; }
248
+
249
+ function _objectSpread$1(target) { for (var i = 1; i < arguments.length; i++) { var source = arguments[i] != null ? arguments[i] : {}; if (i % 2) { var _context; _forEachInstanceProperty__default['default'](_context = ownKeys$1(Object(source), true)).call(_context, function (key) { _defineProperty(target, key, source[key]); }); } else if (_Object$getOwnPropertyDescriptors__default['default']) { _Object$defineProperties__default['default'](target, _Object$getOwnPropertyDescriptors__default['default'](source)); } else { var _context2; _forEachInstanceProperty__default['default'](_context2 = ownKeys$1(Object(source))).call(_context2, function (key) { _Object$defineProperty__default['default'](target, key, _Object$getOwnPropertyDescriptor__default['default'](source, key)); }); } } return target; }
250
+
251
+ var RequiredValueErrorMessage = function RequiredValueErrorMessage() {
252
+ return jsxRuntime.jsx(messages.ErrorMessage, {
253
+ children: jsxRuntime.jsx(reactIntl.FormattedMessage, _objectSpread$1({}, inputUtils.messagesLocalizedInput.missingRequiredField))
254
+ });
255
+ };
256
+
257
+ RequiredValueErrorMessage.displayName = 'RequiredValueErrorMessage';
258
+ var RequiredValueErrorMessage$1 = RequiredValueErrorMessage;
259
+
260
+ function ownKeys(object, enumerableOnly) { var keys = _Object$keys__default['default'](object); if (_Object$getOwnPropertySymbols__default['default']) { var symbols = _Object$getOwnPropertySymbols__default['default'](object); if (enumerableOnly) { symbols = _filterInstanceProperty__default['default'](symbols).call(symbols, function (sym) { return _Object$getOwnPropertyDescriptor__default['default'](object, sym).enumerable; }); } keys.push.apply(keys, symbols); } return keys; }
261
+
262
+ function _objectSpread(target) { for (var i = 1; i < arguments.length; i++) { var source = arguments[i] != null ? arguments[i] : {}; if (i % 2) { var _context4; _forEachInstanceProperty__default['default'](_context4 = ownKeys(Object(source), true)).call(_context4, function (key) { _defineProperty(target, key, source[key]); }); } else if (_Object$getOwnPropertyDescriptors__default['default']) { _Object$defineProperties__default['default'](target, _Object$getOwnPropertyDescriptors__default['default'](source)); } else { var _context5; _forEachInstanceProperty__default['default'](_context5 = ownKeys(Object(source))).call(_context5, function (key) { _Object$defineProperty__default['default'](target, key, _Object$getOwnPropertyDescriptor__default['default'](source, key)); }); } } return target; }
263
+
264
+ var expandedTranslationsReducer = function expandedTranslationsReducer(state, action) {
265
+ switch (action.type) {
266
+ case 'toggle':
267
+ return _objectSpread(_objectSpread({}, state), {}, _defineProperty({}, action.payload, !state[action.payload]));
268
+
269
+ case 'toggleAll':
270
+ {
271
+ var _context;
272
+
273
+ var newState = _reduceInstanceProperty__default['default'](_context = _Object$keys__default['default'](state)).call(_context, function (translations, locale) {
274
+ return _objectSpread(_defineProperty({}, locale, true), translations);
275
+ }, {});
276
+
277
+ return newState;
278
+ }
279
+
280
+ default:
281
+ return state;
282
+ }
283
+ }; // This component supports expanding/collapsing multiline inputs, but it also
284
+ // supports showing/hiding the remaining languages.
285
+ // These two features are both about opening/closing something, and so the code
286
+ // can get quite confusing. We try to stick to expand/collapse for the
287
+ // multiline inputs, while we use show/hide/open/close for the remaining
288
+ // languages.
289
+
290
+
291
+ var _ref = {
292
+ name: "xyzkeb",
293
+ styles: "align-self:flex-start"
294
+ } ;
295
+
296
+ var LocalizedMultilineTextInput = function LocalizedMultilineTextInput(props) {
297
+ var _context2;
298
+
299
+ var intl = reactIntl.useIntl();
300
+
301
+ var initialExpandedTranslationsState = _reduceInstanceProperty__default['default'](_context2 = _Object$keys__default['default'](props.value)).call(_context2, function (translations, locale) {
302
+ return _objectSpread(_defineProperty({}, locale, Boolean(props.defaultExpandMultilineText)), translations);
303
+ }, {});
304
+
305
+ var _useReducer = react$1.useReducer(expandedTranslationsReducer, initialExpandedTranslationsState),
306
+ _useReducer2 = _slicedToArray(_useReducer, 2),
307
+ expandedTranslationsState = _useReducer2[0],
308
+ expandedTranslationsDispatch = _useReducer2[1];
309
+
310
+ var defaultExpansionState = props.hideLanguageExpansionControls || props.defaultExpandLanguages || // useToggleState's default is `true`, but we want `false`
311
+ false;
312
+
313
+ var _useToggleState = hooks.useToggleState(defaultExpansionState),
314
+ _useToggleState2 = _slicedToArray(_useToggleState, 2),
315
+ areLanguagesOpened = _useToggleState2[0],
316
+ toggleLanguages = _useToggleState2[1];
317
+
318
+ var toggleLanguage = react$1.useCallback(function (language) {
319
+ expandedTranslationsDispatch({
320
+ type: 'toggle',
321
+ payload: language
322
+ });
323
+ }, [expandedTranslationsDispatch]);
324
+ var languages = localizedUtils.sortLanguages(props.selectedLanguage, _Object$keys__default['default'](props.value));
325
+ var hasErrorInRemainingLanguages = props.hasError || localizedUtils.getHasErrorOnRemainingLanguages(props.errors, props.selectedLanguage);
326
+ var hasWarningInRemainingLanguages = props.hasWarning || localizedUtils.getHasWarningOnRemainingLanguages(props.warnings, props.selectedLanguage);
327
+
328
+ if (hasErrorInRemainingLanguages || hasWarningInRemainingLanguages) {
329
+ if (!areLanguagesOpened) {
330
+ // this update within render replaces the old `getDerivedStateFromProps` functionality
331
+ // https://reactjs.org/docs/hooks-faq.html#how-do-i-implement-getderivedstatefromprops
332
+ toggleLanguages();
333
+ }
334
+ }
335
+
336
+ var shouldRenderLanguagesButton = languages.length > 1 && !props.hideLanguageExpansionControls;
337
+ return jsxRuntime.jsx(Constraints__default['default'].Horizontal, {
338
+ max: props.horizontalConstraint,
339
+ children: jsxRuntime.jsxs(Stack__default['default'], {
340
+ scale: "xs",
341
+ children: [jsxRuntime.jsx(Stack__default['default'], {
342
+ scale: "s",
343
+ children: _mapInstanceProperty__default['default'](languages).call(languages, function (language, index) {
344
+ var isFirstLanguage = index === 0;
345
+ if (!isFirstLanguage && !areLanguagesOpened) return null;
346
+ var isLastLanguage = index === languages.length - 1;
347
+ var hasLanguagesControl = isFirstLanguage && !areLanguagesOpened || isLastLanguage;
348
+ return jsxRuntime.jsx(TranslationInput$1, _objectSpread({
349
+ autoComplete: props.autoComplete,
350
+ id: LocalizedMultilineTextInput.getId(props.id, language),
351
+ name: LocalizedMultilineTextInput.getName(props.name, language),
352
+ value: props.value[language],
353
+ onChange: props.onChange,
354
+ language: language,
355
+ isCollapsed: !expandedTranslationsState[language],
356
+ onToggle: function onToggle() {
357
+ return toggleLanguage(language);
358
+ },
359
+ placeholder: props.placeholder ? props.placeholder[language] : undefined,
360
+ onBlur: props.onBlur,
361
+ onFocus: props.onFocus,
362
+ isAutofocussed: index === 0 && props.isAutofocussed,
363
+ isDisabled: props.isDisabled,
364
+ isReadOnly: props.isReadOnly,
365
+ hasError: Boolean(props.hasError || props.errors && props.errors[language]),
366
+ hasWarning: Boolean(props.hasWarning || props.warnings && props.warnings[language]),
367
+ intl: intl,
368
+ warning: props.warnings && props.warnings[language],
369
+ error: props.errors && props.errors[language],
370
+ hasLanguagesControl: hasLanguagesControl
371
+ }, localizedUtils.createLocalizedDataAttributes(props, language)), language);
372
+ })
373
+ }), shouldRenderLanguagesButton && jsxRuntime.jsx("div", {
374
+ css: _ref,
375
+ children: jsxRuntime.jsx(inputUtils.LocalizedInputToggle, {
376
+ isOpen: areLanguagesOpened,
377
+ onClick: toggleLanguages,
378
+ isDisabled: areLanguagesOpened && Boolean(hasErrorInRemainingLanguages || hasWarningInRemainingLanguages),
379
+ remainingLocalizations: languages.length - 1
380
+ })
381
+ })]
382
+ })
383
+ });
384
+ };
385
+
386
+ LocalizedMultilineTextInput.displayName = 'LocalizedMultilineTextInput';
387
+ LocalizedMultilineTextInput.RequiredValueErrorMessage = RequiredValueErrorMessage$1;
388
+ LocalizedMultilineTextInput.propTypes = {};
389
+ LocalizedMultilineTextInput.getId = localizedUtils.getId;
390
+ LocalizedMultilineTextInput.getName = localizedUtils.getName;
391
+ LocalizedMultilineTextInput.defaultProps = {
392
+ horizontalConstraint: 'scale'
393
+ };
394
+ LocalizedMultilineTextInput.createLocalizedString = localizedUtils.createLocalizedString;
395
+ LocalizedMultilineTextInput.isEmpty = localizedUtils.isEmpty;
396
+ LocalizedMultilineTextInput.omitEmptyTranslations = localizedUtils.omitEmptyTranslations;
397
+ LocalizedMultilineTextInput.isTouched = localizedUtils.isTouched;
398
+ var LocalizedMultilineTextInput$1 = LocalizedMultilineTextInput;
399
+
400
+ // NOTE: This string will be replaced in the `prepare` script by the `scripts/version.js` file.
401
+ var version = '0.0.0-canary-2021830134526';
402
+
403
+ exports['default'] = LocalizedMultilineTextInput$1;
404
+ exports.version = version;