@websolutespa/bom-mixer-ui 1.10.7 → 1.10.8

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 (63) hide show
  1. package/CHANGELOG.md +6 -0
  2. package/dist/cjs/index.js +114 -50
  3. package/dist/cjs/index.js.map +1 -1
  4. package/dist/esm/fields/field-accept.js +8 -4
  5. package/dist/esm/fields/field-accept.js.map +1 -1
  6. package/dist/esm/fields/field-autocomplete.js +5 -3
  7. package/dist/esm/fields/field-autocomplete.js.map +1 -1
  8. package/dist/esm/fields/field-card.js +6 -3
  9. package/dist/esm/fields/field-card.js.map +1 -1
  10. package/dist/esm/fields/field-checkbox.js +8 -4
  11. package/dist/esm/fields/field-checkbox.js.map +1 -1
  12. package/dist/esm/fields/field-combobox.js +9 -4
  13. package/dist/esm/fields/field-combobox.js.map +1 -1
  14. package/dist/esm/fields/field-consent.js +8 -4
  15. package/dist/esm/fields/field-consent.js.map +1 -1
  16. package/dist/esm/fields/field-error.js +14 -4
  17. package/dist/esm/fields/field-error.js.map +1 -1
  18. package/dist/esm/fields/field-implicit.js +3 -2
  19. package/dist/esm/fields/field-implicit.js.map +1 -1
  20. package/dist/esm/fields/field-password.js +10 -4
  21. package/dist/esm/fields/field-password.js.map +1 -1
  22. package/dist/esm/fields/field-radio.js +6 -3
  23. package/dist/esm/fields/field-radio.js.map +1 -1
  24. package/dist/esm/fields/field-select.js +11 -4
  25. package/dist/esm/fields/field-select.js.map +1 -1
  26. package/dist/esm/fields/field-text.js +14 -5
  27. package/dist/esm/fields/field-text.js.map +1 -1
  28. package/dist/esm/fields/field-textarea.js +9 -3
  29. package/dist/esm/fields/field-textarea.js.map +1 -1
  30. package/dist/esm/forms/input/input.js +3 -4
  31. package/dist/esm/forms/input/input.js.map +1 -1
  32. package/dist/esm/index.js +1 -1
  33. package/dist/types/fields/field-accept.d.ts.map +1 -1
  34. package/dist/types/fields/field-autocomplete.d.ts.map +1 -1
  35. package/dist/types/fields/field-card.d.ts.map +1 -1
  36. package/dist/types/fields/field-checkbox.d.ts.map +1 -1
  37. package/dist/types/fields/field-combobox.d.ts.map +1 -1
  38. package/dist/types/fields/field-consent.d.ts.map +1 -1
  39. package/dist/types/fields/field-error.d.ts +2 -1
  40. package/dist/types/fields/field-error.d.ts.map +1 -1
  41. package/dist/types/fields/field-implicit.d.ts.map +1 -1
  42. package/dist/types/fields/field-password.d.ts.map +1 -1
  43. package/dist/types/fields/field-radio.d.ts.map +1 -1
  44. package/dist/types/fields/field-select.d.ts.map +1 -1
  45. package/dist/types/fields/field-text.d.ts +3 -0
  46. package/dist/types/fields/field-text.d.ts.map +1 -1
  47. package/dist/types/fields/field-textarea.d.ts.map +1 -1
  48. package/dist/types/forms/input/input.d.ts.map +1 -1
  49. package/package.json +1 -1
  50. package/src/fields/field-accept.tsx +14 -5
  51. package/src/fields/field-autocomplete.tsx +7 -4
  52. package/src/fields/field-card.tsx +8 -4
  53. package/src/fields/field-checkbox.tsx +7 -2
  54. package/src/fields/field-combobox.tsx +6 -3
  55. package/src/fields/field-consent.tsx +6 -3
  56. package/src/fields/field-error.tsx +11 -3
  57. package/src/fields/field-implicit.tsx +4 -1
  58. package/src/fields/field-password.tsx +11 -5
  59. package/src/fields/field-radio.tsx +5 -2
  60. package/src/fields/field-select.tsx +10 -4
  61. package/src/fields/field-text.tsx +17 -5
  62. package/src/fields/field-textarea.tsx +10 -4
  63. package/src/forms/input/input.tsx +0 -1
package/CHANGELOG.md CHANGED
@@ -1,5 +1,11 @@
1
1
  # @websolutespa/bom-mixer-ui
2
2
 
3
+ ## 1.10.8
4
+
5
+ ### Patch Changes
6
+
7
+ - Modified: form fields & errors a11y
8
+
3
9
  ## 1.10.7
4
10
 
5
11
  ### Patch Changes
package/dist/cjs/index.js CHANGED
@@ -11393,12 +11393,11 @@ const Input = /*#__PURE__*/React.forwardRef(function Input(_a, ref) {
11393
11393
  }, className, variant);
11394
11394
  const globalVariants = useVariants('input', inputVariants);
11395
11395
  variants = variants || globalVariants;
11396
- return jsxRuntime.jsxs(StyledInputContainer, Object.assign({
11396
+ return jsxRuntime.jsxs(StyledInputContainer, {
11397
11397
  className: classNames,
11398
11398
  variant: variant,
11399
11399
  variants: variants,
11400
- "data-focus-visible": focus || undefined
11401
- }, props, {
11400
+ "data-focus-visible": focus || undefined,
11402
11401
  children: [before, jsxRuntime.jsx(StyledInput, Object.assign({
11403
11402
  className: 'input',
11404
11403
  ref: ref,
@@ -11411,7 +11410,7 @@ const Input = /*#__PURE__*/React.forwardRef(function Input(_a, ref) {
11411
11410
  onFocus: onFocus_,
11412
11411
  onBlur: onBlur_
11413
11412
  }, props)), after]
11414
- }));
11413
+ });
11415
11414
  });
11416
11415
 
11417
11416
  const RadioContext = /*#__PURE__*/React.createContext(null);
@@ -13029,12 +13028,21 @@ const StyledFieldError = styled__default.default.div`
13029
13028
  function FieldError(_a) {
13030
13029
  var {
13031
13030
  state,
13031
+ label,
13032
13032
  className,
13033
13033
  variant = 'default',
13034
13034
  variants
13035
13035
  } = _a,
13036
- props = __rest(_a, ["state", "className", "variant", "variants"]);
13037
- const label = bomMixerHooks.useLabel();
13036
+ props = __rest(_a, ["state", "label", "className", "variant", "variants"]);
13037
+ const errorLabel = bomMixerHooks.useLabel();
13038
+ const getErrorLabel = error => {
13039
+ const text = label ? errorLabel(`error.${error.key}.label`, {
13040
+ label
13041
+ }) || errorLabel(`error.${error.key}`, {
13042
+ label
13043
+ }) : errorLabel(`error.${error.key}`);
13044
+ return text;
13045
+ };
13038
13046
  const classNames = bomCore.getClassNames('field-error', className, variant);
13039
13047
  const globalVariants = useVariants('fieldError', fieldErrorVariants);
13040
13048
  variants = variants || globalVariants;
@@ -13042,9 +13050,10 @@ function FieldError(_a) {
13042
13050
  children: state.flags.touched && state.errors.map(error => jsxRuntime.jsx(StyledFieldError, Object.assign({
13043
13051
  className: classNames,
13044
13052
  variant: variant,
13045
- variants: variants
13053
+ variants: variants,
13054
+ role: "alert"
13046
13055
  }, props, {
13047
- children: label(`error.${error.key}`)
13056
+ children: getErrorLabel(error)
13048
13057
  }), error.key))
13049
13058
  });
13050
13059
  }
@@ -13074,6 +13083,7 @@ function FieldAccept(_ref) {
13074
13083
  const onFocus = _ => {
13075
13084
  setFocus(true);
13076
13085
  };
13086
+ const controlLabel = control.label && label(control.label);
13077
13087
  return state.flags.hidden ? jsxRuntime.jsx("input", {
13078
13088
  type: "hidden",
13079
13089
  value: state.value ? 'true' : 'false'
@@ -13093,7 +13103,9 @@ function FieldAccept(_ref) {
13093
13103
  value: "true",
13094
13104
  name: uniqueNameTrue,
13095
13105
  id: uniqueNameTrue,
13096
- disabled: state.flags.disabled || state.flags.readonly
13106
+ disabled: state.flags.disabled || state.flags.readonly,
13107
+ "aria-invalid": state.flags.invalid,
13108
+ "aria-describedby": `${uniqueName}-error`
13097
13109
  }), label('form.accept.true')]
13098
13110
  }), jsxRuntime.jsxs(Label, {
13099
13111
  name: uniqueNameFalse,
@@ -13105,10 +13117,11 @@ function FieldAccept(_ref) {
13105
13117
  disabled: state.flags.disabled || state.flags.readonly
13106
13118
  }), label('form.accept.false')]
13107
13119
  })]
13108
- }), control.label && jsxRuntime.jsx(Text, {
13109
- children: label(control.label)
13120
+ }), controlLabel && jsxRuntime.jsx(Text, {
13121
+ children: controlLabel
13110
13122
  }), jsxRuntime.jsx(FieldError, {
13111
- state: state
13123
+ state: state,
13124
+ id: `${uniqueName}-error`
13112
13125
  })]
13113
13126
  });
13114
13127
  }
@@ -13182,14 +13195,15 @@ function FieldAutocomplete(_ref) {
13182
13195
  }
13183
13196
  // eslint-disable-next-line react-hooks/exhaustive-deps
13184
13197
  }, []);
13198
+ const controlLabel = control.label && label(control.label);
13185
13199
  return state.flags.hidden ? jsxRuntime.jsx("input", {
13186
13200
  type: "hidden",
13187
13201
  value: bomMixerForms.valueToString(state.value)
13188
13202
  }) : jsxRuntime.jsxs(Field, {
13189
13203
  state: state,
13190
- children: [jsxRuntime.jsx(Label, {
13204
+ children: [controlLabel && jsxRuntime.jsx(Label, {
13191
13205
  htmlFor: uniqueName,
13192
- children: control.label && label(control.label)
13206
+ children: controlLabel
13193
13207
  }), jsxRuntime.jsx(Autocomplete, {
13194
13208
  id: uniqueName,
13195
13209
  name: uniqueName,
@@ -13202,7 +13216,8 @@ function FieldAutocomplete(_ref) {
13202
13216
  background: "var(--color-neutral-100)",
13203
13217
  overflow: "hidden"
13204
13218
  }), jsxRuntime.jsx(FieldError, {
13205
- state: state
13219
+ state: state,
13220
+ id: `${uniqueName}-error`
13206
13221
  })]
13207
13222
  });
13208
13223
  }
@@ -13231,16 +13246,17 @@ function FieldCard(_a) {
13231
13246
  const onFocus = _ => {
13232
13247
  setFocus(true);
13233
13248
  };
13249
+ const controlLabel = control.label && label(control.label);
13234
13250
  return state.flags.hidden ? jsxRuntime.jsx("input", {
13235
13251
  type: "hidden",
13236
13252
  value: state.value ? state.value.toString() : ''
13237
13253
  }) : jsxRuntime.jsxs(Field, Object.assign({
13238
13254
  state: state
13239
13255
  }, props, {
13240
- children: [jsxRuntime.jsx(Label, {
13256
+ children: [controlLabel && jsxRuntime.jsx(Label, {
13241
13257
  htmlFor: uniqueName,
13242
13258
  margin: "0",
13243
- children: control.label && label(control.label)
13259
+ children: controlLabel
13244
13260
  }), jsxRuntime.jsx(RadioCard.Group, {
13245
13261
  id: uniqueName,
13246
13262
  name: uniqueName,
@@ -13260,7 +13276,9 @@ function FieldCard(_a) {
13260
13276
  })]
13261
13277
  }, option.id))
13262
13278
  }), jsxRuntime.jsx(FieldError, {
13263
- state: state
13279
+ state: state,
13280
+ label: controlLabel,
13281
+ id: `${uniqueName}-error`
13264
13282
  })]
13265
13283
  }));
13266
13284
  }
@@ -13286,6 +13304,7 @@ function FieldCheckbox(_a) {
13286
13304
  const onFocus = _ => {
13287
13305
  setFocus(true);
13288
13306
  };
13307
+ const controlLabel = control.label && label(control.label);
13289
13308
  return state.flags.hidden ? jsxRuntime.jsx("input", {
13290
13309
  type: "hidden",
13291
13310
  value: state.value ? state.value.toString() : ''
@@ -13302,14 +13321,17 @@ function FieldCheckbox(_a) {
13302
13321
  onBlur: onBlur,
13303
13322
  onFocus: onFocus,
13304
13323
  disabled: state.flags.disabled || state.flags.readonly,
13305
- checked: state.value === true
13306
- }), control.label && jsxRuntime.jsx("span", {
13324
+ checked: state.value === true,
13325
+ "aria-invalid": state.flags.invalid,
13326
+ "aria-describedby": `${uniqueName}-error`
13327
+ }), controlLabel && jsxRuntime.jsx("span", {
13307
13328
  dangerouslySetInnerHTML: {
13308
- __html: label(control.label)
13329
+ __html: controlLabel
13309
13330
  }
13310
13331
  })]
13311
13332
  }), jsxRuntime.jsx(FieldError, {
13312
- state: state
13333
+ state: state,
13334
+ id: `${uniqueName}-error`
13313
13335
  })]
13314
13336
  }));
13315
13337
  }
@@ -13336,6 +13358,7 @@ function FieldCombobox(_ref) {
13336
13358
  setValue(option);
13337
13359
  };
13338
13360
  // console.log('FieldCombobox', control.value);
13361
+ const controlLabel = control.label && label(control.label);
13339
13362
  return state.flags.hidden ? jsxRuntime.jsx("input", {
13340
13363
  type: "hidden",
13341
13364
  value: bomMixerForms.valueToString(state.value)
@@ -13348,12 +13371,14 @@ function FieldCombobox(_ref) {
13348
13371
  onChange: onChange,
13349
13372
  onFocus: onFocus,
13350
13373
  onBlur: onBlur,
13351
- children: [control.label && jsxRuntime.jsx(Combobox.Label, {
13352
- children: label(control.label)
13374
+ children: [controlLabel && jsxRuntime.jsx(Combobox.Label, {
13375
+ children: controlLabel
13353
13376
  }), jsxRuntime.jsx(Combobox.Combobox, {
13354
13377
  after: icon || jsxRuntime.jsx(bomMixerIcons.IconChevronDown, {}),
13355
13378
  autoSelect: true,
13356
- placeholder: control.placeholder && label(control.placeholder)
13379
+ placeholder: control.placeholder && label(control.placeholder),
13380
+ "aria-invalid": state.flags.invalid,
13381
+ "aria-describedby": `${uniqueName}-error`
13357
13382
  }), jsxRuntime.jsx(Combobox.Popover, {
13358
13383
  gutter: 4,
13359
13384
  sameWidth: true,
@@ -13372,7 +13397,9 @@ function FieldCombobox(_ref) {
13372
13397
  }
13373
13398
  })]
13374
13399
  }), ((_a = control.customData) === null || _a === void 0 ? void 0 : _a.after) && control.customData.after, jsxRuntime.jsx(FieldError, {
13375
- state: state
13400
+ state: state,
13401
+ label: controlLabel,
13402
+ id: `${uniqueName}-error`
13376
13403
  })]
13377
13404
  });
13378
13405
  }
@@ -13415,6 +13442,7 @@ function FieldConsent(_ref) {
13415
13442
  };
13416
13443
  const detail = (_a = control.customData) === null || _a === void 0 ? void 0 : _a.detail;
13417
13444
  const [active, setActive] = React.useState(false);
13445
+ const controlLabel = control.label && label(control.label);
13418
13446
  return state.flags.hidden ? jsxRuntime.jsx("input", {
13419
13447
  type: "hidden",
13420
13448
  value: state.value ? 'true' : 'false'
@@ -13427,9 +13455,9 @@ function FieldConsent(_ref) {
13427
13455
  borderBottom: "1px solid var(--color-neutral-200)",
13428
13456
  children: [jsxRuntime.jsxs("div", {
13429
13457
  className: "field-consent__description",
13430
- children: [control.label && jsxRuntime.jsx("span", {
13458
+ children: [controlLabel && jsxRuntime.jsx("span", {
13431
13459
  dangerouslySetInnerHTML: {
13432
- __html: label(control.label)
13460
+ __html: controlLabel
13433
13461
  }
13434
13462
  }), detail && jsxRuntime.jsxs(jsxRuntime.Fragment, {
13435
13463
  children: ["\u00A0", jsxRuntime.jsx(Button, {
@@ -13454,7 +13482,9 @@ function FieldConsent(_ref) {
13454
13482
  onBlur: onTrueBlur,
13455
13483
  onFocus: onTrueFocus,
13456
13484
  disabled: state.flags.disabled || state.flags.readonly,
13457
- checked: state.value === true
13485
+ checked: state.value === true,
13486
+ "aria-invalid": state.flags.invalid,
13487
+ "aria-describedby": `${uniqueName}-error`
13458
13488
  }), jsxRuntime.jsx("span", {
13459
13489
  children: label('form.consent.true')
13460
13490
  })]
@@ -13474,7 +13504,8 @@ function FieldConsent(_ref) {
13474
13504
  })]
13475
13505
  })]
13476
13506
  }), jsxRuntime.jsx(FieldError, {
13477
- state: state
13507
+ state: state,
13508
+ id: `${uniqueName}-error`
13478
13509
  })]
13479
13510
  });
13480
13511
  }
@@ -13490,6 +13521,7 @@ function FieldImplicit(_a) {
13490
13521
  const label = bomMixerHooks.useLabel();
13491
13522
  const uniqueName = `${control.name}-${uid}`;
13492
13523
  const [state, setValue, setTouched] = bomMixerForms.useControl(control);
13524
+ const controlLabel = control.label && label(control.label);
13493
13525
  return state.flags.hidden ? jsxRuntime.jsx("input", {
13494
13526
  type: "hidden",
13495
13527
  value: state.value || ''
@@ -13503,9 +13535,9 @@ function FieldImplicit(_a) {
13503
13535
  id: uniqueName,
13504
13536
  name: uniqueName,
13505
13537
  value: String(state.value)
13506
- }), control.label && jsxRuntime.jsx("span", {
13538
+ }), controlLabel && jsxRuntime.jsx("span", {
13507
13539
  dangerouslySetInnerHTML: {
13508
- __html: label(control.label)
13540
+ __html: controlLabel
13509
13541
  }
13510
13542
  })]
13511
13543
  }), jsxRuntime.jsx(FieldError, {
@@ -13557,6 +13589,7 @@ function FieldPassword(_ref) {
13557
13589
  const onToggle = () => {
13558
13590
  setType(type === 'password' ? 'text' : 'password');
13559
13591
  };
13592
+ const controlLabel = control.label && label(control.label);
13560
13593
  return state.flags.hidden ? jsxRuntime.jsx("input", {
13561
13594
  type: "hidden",
13562
13595
  value: state.value || ''
@@ -13565,9 +13598,9 @@ function FieldPassword(_ref) {
13565
13598
  className: bomCore.getClassNames({
13566
13599
  required: control.required && !control.disabled
13567
13600
  }),
13568
- children: [jsxRuntime.jsx(Label, {
13601
+ children: [controlLabel && jsxRuntime.jsx(Label, {
13569
13602
  htmlFor: uniqueName,
13570
- children: control.label && label(control.label)
13603
+ children: controlLabel
13571
13604
  }), jsxRuntime.jsx(Input, {
13572
13605
  width: "100%",
13573
13606
  ref: ref,
@@ -13579,15 +13612,20 @@ function FieldPassword(_ref) {
13579
13612
  onChange: onChange,
13580
13613
  onBlur: onBlur,
13581
13614
  onFocus: onFocus,
13615
+ required: state.errors.some(x => x.key === 'required'),
13582
13616
  disabled: state.flags.disabled,
13583
13617
  readOnly: state.flags.readonly,
13584
- autoComplete: control.name,
13618
+ "aria-invalid": state.flags.invalid,
13619
+ "aria-describedby": `${uniqueName}-error`,
13620
+ autoComplete: "on",
13585
13621
  after: jsxRuntime.jsx(Button, {
13586
13622
  onClick: () => onToggle(),
13587
13623
  children: icon(type)
13588
13624
  })
13589
13625
  }), jsxRuntime.jsx(FieldError, {
13590
- state: state
13626
+ state: state,
13627
+ label: controlLabel,
13628
+ id: `${uniqueName}-error`
13591
13629
  })]
13592
13630
  });
13593
13631
  }
@@ -13621,6 +13659,7 @@ function FieldRadio(_a) {
13621
13659
  const onFocus = _ => {
13622
13660
  setFocus(true);
13623
13661
  };
13662
+ const controlLabel = control.label && label(control.label);
13624
13663
  return state.flags.hidden ? jsxRuntime.jsx("input", {
13625
13664
  type: "hidden",
13626
13665
  value: bomMixerForms.valueToString(state.value)
@@ -13632,8 +13671,8 @@ function FieldRadio(_a) {
13632
13671
  onChange: onChange,
13633
13672
  onBlur: onBlur,
13634
13673
  onFocus: onFocus,
13635
- children: [control.label && jsxRuntime.jsx(Radio.GroupLabel, {
13636
- children: label(control.label)
13674
+ children: [controlLabel && jsxRuntime.jsx(Radio.GroupLabel, {
13675
+ children: controlLabel
13637
13676
  }), (_b = control.options) === null || _b === void 0 ? void 0 : _b.map(option => {
13638
13677
  var _a;
13639
13678
  return jsxRuntime.jsxs(Label, {
@@ -13648,7 +13687,9 @@ function FieldRadio(_a) {
13648
13687
  }, getUniqueName(option));
13649
13688
  })]
13650
13689
  }), jsxRuntime.jsx(FieldError, {
13651
- state: state
13690
+ state: state,
13691
+ label: controlLabel,
13692
+ id: `${uniqueName}-error`
13652
13693
  })]
13653
13694
  }));
13654
13695
  }
@@ -13674,6 +13715,7 @@ function FieldSelect(_ref) {
13674
13715
  const onChange = option => {
13675
13716
  setValue(option);
13676
13717
  };
13718
+ const controlLabel = control.label && label(control.label);
13677
13719
  return state.flags.hidden ? jsxRuntime.jsx("input", {
13678
13720
  type: "hidden",
13679
13721
  value: bomMixerForms.valueToString(state.value)
@@ -13690,10 +13732,14 @@ function FieldSelect(_ref) {
13690
13732
  onChange: onChange,
13691
13733
  onFocus: onFocus,
13692
13734
  onBlur: onBlur,
13693
- children: [control.label && jsxRuntime.jsx(Select.Label, {
13694
- children: label(control.label)
13735
+ children: [controlLabel && jsxRuntime.jsx(Select.Label, {
13736
+ htmlFor: uniqueName,
13737
+ children: controlLabel
13695
13738
  }), jsxRuntime.jsx(Select.Select, {
13696
- disabled: control.disabled,
13739
+ required: state.errors.some(x => x.key === 'required'),
13740
+ disabled: state.flags.disabled || state.flags.readonly,
13741
+ "aria-invalid": state.flags.invalid,
13742
+ "aria-describedby": `${uniqueName}-error`,
13697
13743
  children: icon || jsxRuntime.jsx(bomMixerIcons.IconChevronDown, {})
13698
13744
  }), jsxRuntime.jsx(Select.Popover, {
13699
13745
  gutter: 4,
@@ -13704,12 +13750,15 @@ function FieldSelect(_ref) {
13704
13750
  children: option.name
13705
13751
  }, i))
13706
13752
  }), jsxRuntime.jsx(FieldError, {
13707
- state: state
13753
+ state: state,
13754
+ label: controlLabel,
13755
+ id: `${uniqueName}-error`
13708
13756
  })]
13709
13757
  }), ((_a = control.customData) === null || _a === void 0 ? void 0 : _a.after) && control.customData.after]
13710
13758
  });
13711
13759
  }
13712
13760
 
13761
+ const INPUT_TYPES = Object.fromEntries(['button', 'checkbox', 'color', 'date', 'datetime-local', 'email', 'file', 'hidden', 'image', 'month', 'number', 'password', 'radio', 'range', 'reset', 'search', 'submit', 'tel', 'text', 'time', 'url', 'week'].map(k => [k, k]));
13713
13762
  function FieldText(_a) {
13714
13763
  var {
13715
13764
  control,
@@ -13748,6 +13797,8 @@ function FieldText(_a) {
13748
13797
  const onFocus = _ => {
13749
13798
  setFocus(true);
13750
13799
  };
13800
+ const type = INPUT_TYPES[control.schema] || 'text';
13801
+ const controlLabel = control.label && label(control.label);
13751
13802
  return state.flags.hidden ? jsxRuntime.jsx("input", {
13752
13803
  type: "hidden",
13753
13804
  value: state.value || ''
@@ -13756,27 +13807,33 @@ function FieldText(_a) {
13756
13807
  className: bomCore.getClassNames({
13757
13808
  required: control.required && !control.disabled
13758
13809
  }),
13759
- children: [jsxRuntime.jsx(Label, {
13810
+ children: [controlLabel && jsxRuntime.jsx(Label, {
13760
13811
  htmlFor: uniqueName,
13761
- children: control.label && label(control.label)
13812
+ children: controlLabel
13762
13813
  }), jsxRuntime.jsx(Input, Object.assign({
13763
13814
  width: "100%"
13764
13815
  }, props, {
13765
13816
  ref: ref,
13766
13817
  id: uniqueName,
13767
13818
  name: uniqueName,
13819
+ type: type,
13768
13820
  placeholder: label(control.placeholder || control.label || ''),
13769
13821
  defaultValue: state.value || '',
13770
13822
  onChange: onChange,
13771
13823
  onBlur: onBlur,
13772
13824
  onFocus: onFocus,
13825
+ required: state.errors.some(x => x.key === 'required'),
13773
13826
  disabled: state.flags.disabled,
13774
13827
  readOnly: state.flags.readonly,
13828
+ "aria-invalid": state.flags.invalid,
13829
+ "aria-describedby": `${uniqueName}-error`,
13775
13830
  before: before,
13776
13831
  after: after,
13777
- autoComplete: control.name
13832
+ autoComplete: "on"
13778
13833
  })), jsxRuntime.jsx(FieldError, {
13779
- state: state
13834
+ state: state,
13835
+ label: controlLabel,
13836
+ id: `${uniqueName}-error`
13780
13837
  })]
13781
13838
  });
13782
13839
  }
@@ -13802,14 +13859,15 @@ function FieldTextArea(_ref) {
13802
13859
  const onFocus = _ => {
13803
13860
  setFocus(true);
13804
13861
  };
13862
+ const controlLabel = control.label && label(control.label);
13805
13863
  return state.flags.hidden ? jsxRuntime.jsx("input", {
13806
13864
  type: "hidden",
13807
13865
  value: state.value || ''
13808
13866
  }) : jsxRuntime.jsxs(Field, {
13809
13867
  state: state,
13810
- children: [jsxRuntime.jsx(Label, {
13868
+ children: [controlLabel && jsxRuntime.jsx(Label, {
13811
13869
  htmlFor: uniqueName,
13812
- children: control.label && label(control.label)
13870
+ children: controlLabel
13813
13871
  }), jsxRuntime.jsx(TextArea, {
13814
13872
  id: uniqueName,
13815
13873
  name: uniqueName,
@@ -13818,11 +13876,16 @@ function FieldTextArea(_ref) {
13818
13876
  onChange: onChange,
13819
13877
  onBlur: onBlur,
13820
13878
  onFocus: onFocus,
13879
+ required: state.errors.some(x => x.key === 'required'),
13821
13880
  disabled: state.flags.disabled,
13822
13881
  readOnly: state.flags.readonly,
13882
+ "aria-invalid": state.flags.invalid,
13883
+ "aria-describedby": `${uniqueName}-error`,
13823
13884
  width: "100%"
13824
13885
  }), jsxRuntime.jsx(FieldError, {
13825
- state: state
13886
+ state: state,
13887
+ label: controlLabel,
13888
+ id: `${uniqueName}-error`
13826
13889
  })]
13827
13890
  });
13828
13891
  }
@@ -14715,6 +14778,7 @@ exports.Grid = Grid;
14715
14778
  exports.GridRow = GridRow;
14716
14779
  exports.Header = Header;
14717
14780
  exports.Highlight = Highlight;
14781
+ exports.INPUT_TYPES = INPUT_TYPES;
14718
14782
  exports.Icons = Icons;
14719
14783
  exports.InfiniteLoader = InfiniteLoader;
14720
14784
  exports.Input = Input;