@websolutespa/bom-mixer-ui 1.10.7 → 1.10.9

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 +12 -0
  2. package/dist/cjs/index.js +117 -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 +17 -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 +14 -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,17 @@
1
1
  # @websolutespa/bom-mixer-ui
2
2
 
3
+ ## 1.10.9
4
+
5
+ ### Patch Changes
6
+
7
+ - Modified: FieldError getErrorLabel
8
+
9
+ ## 1.10.8
10
+
11
+ ### Patch Changes
12
+
13
+ - Modified: form fields & errors a11y
14
+
3
15
  ## 1.10.7
4
16
 
5
17
  ### 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,24 @@ 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 keyLabel = `error.${error.key}.label`;
13040
+ const key = `error.${error.key}`;
13041
+ const errorKeyLabel = label && errorLabel(keyLabel, {
13042
+ label
13043
+ });
13044
+ const errorKey = label ? errorKeyLabel === keyLabel ? errorLabel(key, {
13045
+ label
13046
+ }) : undefined : errorLabel(key);
13047
+ return errorKey;
13048
+ };
13038
13049
  const classNames = bomCore.getClassNames('field-error', className, variant);
13039
13050
  const globalVariants = useVariants('fieldError', fieldErrorVariants);
13040
13051
  variants = variants || globalVariants;
@@ -13042,9 +13053,10 @@ function FieldError(_a) {
13042
13053
  children: state.flags.touched && state.errors.map(error => jsxRuntime.jsx(StyledFieldError, Object.assign({
13043
13054
  className: classNames,
13044
13055
  variant: variant,
13045
- variants: variants
13056
+ variants: variants,
13057
+ role: "alert"
13046
13058
  }, props, {
13047
- children: label(`error.${error.key}`)
13059
+ children: getErrorLabel(error)
13048
13060
  }), error.key))
13049
13061
  });
13050
13062
  }
@@ -13074,6 +13086,7 @@ function FieldAccept(_ref) {
13074
13086
  const onFocus = _ => {
13075
13087
  setFocus(true);
13076
13088
  };
13089
+ const controlLabel = control.label && label(control.label);
13077
13090
  return state.flags.hidden ? jsxRuntime.jsx("input", {
13078
13091
  type: "hidden",
13079
13092
  value: state.value ? 'true' : 'false'
@@ -13093,7 +13106,9 @@ function FieldAccept(_ref) {
13093
13106
  value: "true",
13094
13107
  name: uniqueNameTrue,
13095
13108
  id: uniqueNameTrue,
13096
- disabled: state.flags.disabled || state.flags.readonly
13109
+ disabled: state.flags.disabled || state.flags.readonly,
13110
+ "aria-invalid": state.flags.invalid,
13111
+ "aria-describedby": `${uniqueName}-error`
13097
13112
  }), label('form.accept.true')]
13098
13113
  }), jsxRuntime.jsxs(Label, {
13099
13114
  name: uniqueNameFalse,
@@ -13105,10 +13120,11 @@ function FieldAccept(_ref) {
13105
13120
  disabled: state.flags.disabled || state.flags.readonly
13106
13121
  }), label('form.accept.false')]
13107
13122
  })]
13108
- }), control.label && jsxRuntime.jsx(Text, {
13109
- children: label(control.label)
13123
+ }), controlLabel && jsxRuntime.jsx(Text, {
13124
+ children: controlLabel
13110
13125
  }), jsxRuntime.jsx(FieldError, {
13111
- state: state
13126
+ state: state,
13127
+ id: `${uniqueName}-error`
13112
13128
  })]
13113
13129
  });
13114
13130
  }
@@ -13182,14 +13198,15 @@ function FieldAutocomplete(_ref) {
13182
13198
  }
13183
13199
  // eslint-disable-next-line react-hooks/exhaustive-deps
13184
13200
  }, []);
13201
+ const controlLabel = control.label && label(control.label);
13185
13202
  return state.flags.hidden ? jsxRuntime.jsx("input", {
13186
13203
  type: "hidden",
13187
13204
  value: bomMixerForms.valueToString(state.value)
13188
13205
  }) : jsxRuntime.jsxs(Field, {
13189
13206
  state: state,
13190
- children: [jsxRuntime.jsx(Label, {
13207
+ children: [controlLabel && jsxRuntime.jsx(Label, {
13191
13208
  htmlFor: uniqueName,
13192
- children: control.label && label(control.label)
13209
+ children: controlLabel
13193
13210
  }), jsxRuntime.jsx(Autocomplete, {
13194
13211
  id: uniqueName,
13195
13212
  name: uniqueName,
@@ -13202,7 +13219,8 @@ function FieldAutocomplete(_ref) {
13202
13219
  background: "var(--color-neutral-100)",
13203
13220
  overflow: "hidden"
13204
13221
  }), jsxRuntime.jsx(FieldError, {
13205
- state: state
13222
+ state: state,
13223
+ id: `${uniqueName}-error`
13206
13224
  })]
13207
13225
  });
13208
13226
  }
@@ -13231,16 +13249,17 @@ function FieldCard(_a) {
13231
13249
  const onFocus = _ => {
13232
13250
  setFocus(true);
13233
13251
  };
13252
+ const controlLabel = control.label && label(control.label);
13234
13253
  return state.flags.hidden ? jsxRuntime.jsx("input", {
13235
13254
  type: "hidden",
13236
13255
  value: state.value ? state.value.toString() : ''
13237
13256
  }) : jsxRuntime.jsxs(Field, Object.assign({
13238
13257
  state: state
13239
13258
  }, props, {
13240
- children: [jsxRuntime.jsx(Label, {
13259
+ children: [controlLabel && jsxRuntime.jsx(Label, {
13241
13260
  htmlFor: uniqueName,
13242
13261
  margin: "0",
13243
- children: control.label && label(control.label)
13262
+ children: controlLabel
13244
13263
  }), jsxRuntime.jsx(RadioCard.Group, {
13245
13264
  id: uniqueName,
13246
13265
  name: uniqueName,
@@ -13260,7 +13279,9 @@ function FieldCard(_a) {
13260
13279
  })]
13261
13280
  }, option.id))
13262
13281
  }), jsxRuntime.jsx(FieldError, {
13263
- state: state
13282
+ state: state,
13283
+ label: controlLabel,
13284
+ id: `${uniqueName}-error`
13264
13285
  })]
13265
13286
  }));
13266
13287
  }
@@ -13286,6 +13307,7 @@ function FieldCheckbox(_a) {
13286
13307
  const onFocus = _ => {
13287
13308
  setFocus(true);
13288
13309
  };
13310
+ const controlLabel = control.label && label(control.label);
13289
13311
  return state.flags.hidden ? jsxRuntime.jsx("input", {
13290
13312
  type: "hidden",
13291
13313
  value: state.value ? state.value.toString() : ''
@@ -13302,14 +13324,17 @@ function FieldCheckbox(_a) {
13302
13324
  onBlur: onBlur,
13303
13325
  onFocus: onFocus,
13304
13326
  disabled: state.flags.disabled || state.flags.readonly,
13305
- checked: state.value === true
13306
- }), control.label && jsxRuntime.jsx("span", {
13327
+ checked: state.value === true,
13328
+ "aria-invalid": state.flags.invalid,
13329
+ "aria-describedby": `${uniqueName}-error`
13330
+ }), controlLabel && jsxRuntime.jsx("span", {
13307
13331
  dangerouslySetInnerHTML: {
13308
- __html: label(control.label)
13332
+ __html: controlLabel
13309
13333
  }
13310
13334
  })]
13311
13335
  }), jsxRuntime.jsx(FieldError, {
13312
- state: state
13336
+ state: state,
13337
+ id: `${uniqueName}-error`
13313
13338
  })]
13314
13339
  }));
13315
13340
  }
@@ -13336,6 +13361,7 @@ function FieldCombobox(_ref) {
13336
13361
  setValue(option);
13337
13362
  };
13338
13363
  // console.log('FieldCombobox', control.value);
13364
+ const controlLabel = control.label && label(control.label);
13339
13365
  return state.flags.hidden ? jsxRuntime.jsx("input", {
13340
13366
  type: "hidden",
13341
13367
  value: bomMixerForms.valueToString(state.value)
@@ -13348,12 +13374,14 @@ function FieldCombobox(_ref) {
13348
13374
  onChange: onChange,
13349
13375
  onFocus: onFocus,
13350
13376
  onBlur: onBlur,
13351
- children: [control.label && jsxRuntime.jsx(Combobox.Label, {
13352
- children: label(control.label)
13377
+ children: [controlLabel && jsxRuntime.jsx(Combobox.Label, {
13378
+ children: controlLabel
13353
13379
  }), jsxRuntime.jsx(Combobox.Combobox, {
13354
13380
  after: icon || jsxRuntime.jsx(bomMixerIcons.IconChevronDown, {}),
13355
13381
  autoSelect: true,
13356
- placeholder: control.placeholder && label(control.placeholder)
13382
+ placeholder: control.placeholder && label(control.placeholder),
13383
+ "aria-invalid": state.flags.invalid,
13384
+ "aria-describedby": `${uniqueName}-error`
13357
13385
  }), jsxRuntime.jsx(Combobox.Popover, {
13358
13386
  gutter: 4,
13359
13387
  sameWidth: true,
@@ -13372,7 +13400,9 @@ function FieldCombobox(_ref) {
13372
13400
  }
13373
13401
  })]
13374
13402
  }), ((_a = control.customData) === null || _a === void 0 ? void 0 : _a.after) && control.customData.after, jsxRuntime.jsx(FieldError, {
13375
- state: state
13403
+ state: state,
13404
+ label: controlLabel,
13405
+ id: `${uniqueName}-error`
13376
13406
  })]
13377
13407
  });
13378
13408
  }
@@ -13415,6 +13445,7 @@ function FieldConsent(_ref) {
13415
13445
  };
13416
13446
  const detail = (_a = control.customData) === null || _a === void 0 ? void 0 : _a.detail;
13417
13447
  const [active, setActive] = React.useState(false);
13448
+ const controlLabel = control.label && label(control.label);
13418
13449
  return state.flags.hidden ? jsxRuntime.jsx("input", {
13419
13450
  type: "hidden",
13420
13451
  value: state.value ? 'true' : 'false'
@@ -13427,9 +13458,9 @@ function FieldConsent(_ref) {
13427
13458
  borderBottom: "1px solid var(--color-neutral-200)",
13428
13459
  children: [jsxRuntime.jsxs("div", {
13429
13460
  className: "field-consent__description",
13430
- children: [control.label && jsxRuntime.jsx("span", {
13461
+ children: [controlLabel && jsxRuntime.jsx("span", {
13431
13462
  dangerouslySetInnerHTML: {
13432
- __html: label(control.label)
13463
+ __html: controlLabel
13433
13464
  }
13434
13465
  }), detail && jsxRuntime.jsxs(jsxRuntime.Fragment, {
13435
13466
  children: ["\u00A0", jsxRuntime.jsx(Button, {
@@ -13454,7 +13485,9 @@ function FieldConsent(_ref) {
13454
13485
  onBlur: onTrueBlur,
13455
13486
  onFocus: onTrueFocus,
13456
13487
  disabled: state.flags.disabled || state.flags.readonly,
13457
- checked: state.value === true
13488
+ checked: state.value === true,
13489
+ "aria-invalid": state.flags.invalid,
13490
+ "aria-describedby": `${uniqueName}-error`
13458
13491
  }), jsxRuntime.jsx("span", {
13459
13492
  children: label('form.consent.true')
13460
13493
  })]
@@ -13474,7 +13507,8 @@ function FieldConsent(_ref) {
13474
13507
  })]
13475
13508
  })]
13476
13509
  }), jsxRuntime.jsx(FieldError, {
13477
- state: state
13510
+ state: state,
13511
+ id: `${uniqueName}-error`
13478
13512
  })]
13479
13513
  });
13480
13514
  }
@@ -13490,6 +13524,7 @@ function FieldImplicit(_a) {
13490
13524
  const label = bomMixerHooks.useLabel();
13491
13525
  const uniqueName = `${control.name}-${uid}`;
13492
13526
  const [state, setValue, setTouched] = bomMixerForms.useControl(control);
13527
+ const controlLabel = control.label && label(control.label);
13493
13528
  return state.flags.hidden ? jsxRuntime.jsx("input", {
13494
13529
  type: "hidden",
13495
13530
  value: state.value || ''
@@ -13503,9 +13538,9 @@ function FieldImplicit(_a) {
13503
13538
  id: uniqueName,
13504
13539
  name: uniqueName,
13505
13540
  value: String(state.value)
13506
- }), control.label && jsxRuntime.jsx("span", {
13541
+ }), controlLabel && jsxRuntime.jsx("span", {
13507
13542
  dangerouslySetInnerHTML: {
13508
- __html: label(control.label)
13543
+ __html: controlLabel
13509
13544
  }
13510
13545
  })]
13511
13546
  }), jsxRuntime.jsx(FieldError, {
@@ -13557,6 +13592,7 @@ function FieldPassword(_ref) {
13557
13592
  const onToggle = () => {
13558
13593
  setType(type === 'password' ? 'text' : 'password');
13559
13594
  };
13595
+ const controlLabel = control.label && label(control.label);
13560
13596
  return state.flags.hidden ? jsxRuntime.jsx("input", {
13561
13597
  type: "hidden",
13562
13598
  value: state.value || ''
@@ -13565,9 +13601,9 @@ function FieldPassword(_ref) {
13565
13601
  className: bomCore.getClassNames({
13566
13602
  required: control.required && !control.disabled
13567
13603
  }),
13568
- children: [jsxRuntime.jsx(Label, {
13604
+ children: [controlLabel && jsxRuntime.jsx(Label, {
13569
13605
  htmlFor: uniqueName,
13570
- children: control.label && label(control.label)
13606
+ children: controlLabel
13571
13607
  }), jsxRuntime.jsx(Input, {
13572
13608
  width: "100%",
13573
13609
  ref: ref,
@@ -13579,15 +13615,20 @@ function FieldPassword(_ref) {
13579
13615
  onChange: onChange,
13580
13616
  onBlur: onBlur,
13581
13617
  onFocus: onFocus,
13618
+ required: state.errors.some(x => x.key === 'required'),
13582
13619
  disabled: state.flags.disabled,
13583
13620
  readOnly: state.flags.readonly,
13584
- autoComplete: control.name,
13621
+ "aria-invalid": state.flags.invalid,
13622
+ "aria-describedby": `${uniqueName}-error`,
13623
+ autoComplete: "on",
13585
13624
  after: jsxRuntime.jsx(Button, {
13586
13625
  onClick: () => onToggle(),
13587
13626
  children: icon(type)
13588
13627
  })
13589
13628
  }), jsxRuntime.jsx(FieldError, {
13590
- state: state
13629
+ state: state,
13630
+ label: controlLabel,
13631
+ id: `${uniqueName}-error`
13591
13632
  })]
13592
13633
  });
13593
13634
  }
@@ -13621,6 +13662,7 @@ function FieldRadio(_a) {
13621
13662
  const onFocus = _ => {
13622
13663
  setFocus(true);
13623
13664
  };
13665
+ const controlLabel = control.label && label(control.label);
13624
13666
  return state.flags.hidden ? jsxRuntime.jsx("input", {
13625
13667
  type: "hidden",
13626
13668
  value: bomMixerForms.valueToString(state.value)
@@ -13632,8 +13674,8 @@ function FieldRadio(_a) {
13632
13674
  onChange: onChange,
13633
13675
  onBlur: onBlur,
13634
13676
  onFocus: onFocus,
13635
- children: [control.label && jsxRuntime.jsx(Radio.GroupLabel, {
13636
- children: label(control.label)
13677
+ children: [controlLabel && jsxRuntime.jsx(Radio.GroupLabel, {
13678
+ children: controlLabel
13637
13679
  }), (_b = control.options) === null || _b === void 0 ? void 0 : _b.map(option => {
13638
13680
  var _a;
13639
13681
  return jsxRuntime.jsxs(Label, {
@@ -13648,7 +13690,9 @@ function FieldRadio(_a) {
13648
13690
  }, getUniqueName(option));
13649
13691
  })]
13650
13692
  }), jsxRuntime.jsx(FieldError, {
13651
- state: state
13693
+ state: state,
13694
+ label: controlLabel,
13695
+ id: `${uniqueName}-error`
13652
13696
  })]
13653
13697
  }));
13654
13698
  }
@@ -13674,6 +13718,7 @@ function FieldSelect(_ref) {
13674
13718
  const onChange = option => {
13675
13719
  setValue(option);
13676
13720
  };
13721
+ const controlLabel = control.label && label(control.label);
13677
13722
  return state.flags.hidden ? jsxRuntime.jsx("input", {
13678
13723
  type: "hidden",
13679
13724
  value: bomMixerForms.valueToString(state.value)
@@ -13690,10 +13735,14 @@ function FieldSelect(_ref) {
13690
13735
  onChange: onChange,
13691
13736
  onFocus: onFocus,
13692
13737
  onBlur: onBlur,
13693
- children: [control.label && jsxRuntime.jsx(Select.Label, {
13694
- children: label(control.label)
13738
+ children: [controlLabel && jsxRuntime.jsx(Select.Label, {
13739
+ htmlFor: uniqueName,
13740
+ children: controlLabel
13695
13741
  }), jsxRuntime.jsx(Select.Select, {
13696
- disabled: control.disabled,
13742
+ required: state.errors.some(x => x.key === 'required'),
13743
+ disabled: state.flags.disabled || state.flags.readonly,
13744
+ "aria-invalid": state.flags.invalid,
13745
+ "aria-describedby": `${uniqueName}-error`,
13697
13746
  children: icon || jsxRuntime.jsx(bomMixerIcons.IconChevronDown, {})
13698
13747
  }), jsxRuntime.jsx(Select.Popover, {
13699
13748
  gutter: 4,
@@ -13704,12 +13753,15 @@ function FieldSelect(_ref) {
13704
13753
  children: option.name
13705
13754
  }, i))
13706
13755
  }), jsxRuntime.jsx(FieldError, {
13707
- state: state
13756
+ state: state,
13757
+ label: controlLabel,
13758
+ id: `${uniqueName}-error`
13708
13759
  })]
13709
13760
  }), ((_a = control.customData) === null || _a === void 0 ? void 0 : _a.after) && control.customData.after]
13710
13761
  });
13711
13762
  }
13712
13763
 
13764
+ 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
13765
  function FieldText(_a) {
13714
13766
  var {
13715
13767
  control,
@@ -13748,6 +13800,8 @@ function FieldText(_a) {
13748
13800
  const onFocus = _ => {
13749
13801
  setFocus(true);
13750
13802
  };
13803
+ const type = INPUT_TYPES[control.schema] || 'text';
13804
+ const controlLabel = control.label && label(control.label);
13751
13805
  return state.flags.hidden ? jsxRuntime.jsx("input", {
13752
13806
  type: "hidden",
13753
13807
  value: state.value || ''
@@ -13756,27 +13810,33 @@ function FieldText(_a) {
13756
13810
  className: bomCore.getClassNames({
13757
13811
  required: control.required && !control.disabled
13758
13812
  }),
13759
- children: [jsxRuntime.jsx(Label, {
13813
+ children: [controlLabel && jsxRuntime.jsx(Label, {
13760
13814
  htmlFor: uniqueName,
13761
- children: control.label && label(control.label)
13815
+ children: controlLabel
13762
13816
  }), jsxRuntime.jsx(Input, Object.assign({
13763
13817
  width: "100%"
13764
13818
  }, props, {
13765
13819
  ref: ref,
13766
13820
  id: uniqueName,
13767
13821
  name: uniqueName,
13822
+ type: type,
13768
13823
  placeholder: label(control.placeholder || control.label || ''),
13769
13824
  defaultValue: state.value || '',
13770
13825
  onChange: onChange,
13771
13826
  onBlur: onBlur,
13772
13827
  onFocus: onFocus,
13828
+ required: state.errors.some(x => x.key === 'required'),
13773
13829
  disabled: state.flags.disabled,
13774
13830
  readOnly: state.flags.readonly,
13831
+ "aria-invalid": state.flags.invalid,
13832
+ "aria-describedby": `${uniqueName}-error`,
13775
13833
  before: before,
13776
13834
  after: after,
13777
- autoComplete: control.name
13835
+ autoComplete: "on"
13778
13836
  })), jsxRuntime.jsx(FieldError, {
13779
- state: state
13837
+ state: state,
13838
+ label: controlLabel,
13839
+ id: `${uniqueName}-error`
13780
13840
  })]
13781
13841
  });
13782
13842
  }
@@ -13802,14 +13862,15 @@ function FieldTextArea(_ref) {
13802
13862
  const onFocus = _ => {
13803
13863
  setFocus(true);
13804
13864
  };
13865
+ const controlLabel = control.label && label(control.label);
13805
13866
  return state.flags.hidden ? jsxRuntime.jsx("input", {
13806
13867
  type: "hidden",
13807
13868
  value: state.value || ''
13808
13869
  }) : jsxRuntime.jsxs(Field, {
13809
13870
  state: state,
13810
- children: [jsxRuntime.jsx(Label, {
13871
+ children: [controlLabel && jsxRuntime.jsx(Label, {
13811
13872
  htmlFor: uniqueName,
13812
- children: control.label && label(control.label)
13873
+ children: controlLabel
13813
13874
  }), jsxRuntime.jsx(TextArea, {
13814
13875
  id: uniqueName,
13815
13876
  name: uniqueName,
@@ -13818,11 +13879,16 @@ function FieldTextArea(_ref) {
13818
13879
  onChange: onChange,
13819
13880
  onBlur: onBlur,
13820
13881
  onFocus: onFocus,
13882
+ required: state.errors.some(x => x.key === 'required'),
13821
13883
  disabled: state.flags.disabled,
13822
13884
  readOnly: state.flags.readonly,
13885
+ "aria-invalid": state.flags.invalid,
13886
+ "aria-describedby": `${uniqueName}-error`,
13823
13887
  width: "100%"
13824
13888
  }), jsxRuntime.jsx(FieldError, {
13825
- state: state
13889
+ state: state,
13890
+ label: controlLabel,
13891
+ id: `${uniqueName}-error`
13826
13892
  })]
13827
13893
  });
13828
13894
  }
@@ -14715,6 +14781,7 @@ exports.Grid = Grid;
14715
14781
  exports.GridRow = GridRow;
14716
14782
  exports.Header = Header;
14717
14783
  exports.Highlight = Highlight;
14784
+ exports.INPUT_TYPES = INPUT_TYPES;
14718
14785
  exports.Icons = Icons;
14719
14786
  exports.InfiniteLoader = InfiniteLoader;
14720
14787
  exports.Input = Input;