@aurodesignsystem/auro-formkit 5.1.0-rc-1176.1 → 5.1.0-rc-1195.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 (37) hide show
  1. package/CHANGELOG.md +12 -1
  2. package/components/checkbox/demo/api.min.js +66 -2
  3. package/components/checkbox/demo/index.min.js +66 -2
  4. package/components/checkbox/dist/index.js +66 -2
  5. package/components/checkbox/dist/registered.js +66 -2
  6. package/components/combobox/demo/api.md +230 -38
  7. package/components/combobox/demo/api.min.js +155 -6
  8. package/components/combobox/demo/index.md +104 -0
  9. package/components/combobox/demo/index.min.js +155 -6
  10. package/components/combobox/dist/auro-combobox.d.ts +18 -1
  11. package/components/combobox/dist/index.js +155 -6
  12. package/components/combobox/dist/registered.js +155 -6
  13. package/components/counter/demo/api.min.js +69 -5
  14. package/components/counter/demo/index.min.js +69 -5
  15. package/components/counter/dist/index.js +69 -5
  16. package/components/counter/dist/registered.js +69 -5
  17. package/components/datepicker/demo/api.md +40 -0
  18. package/components/datepicker/demo/api.min.js +173 -10
  19. package/components/datepicker/demo/index.min.js +173 -10
  20. package/components/datepicker/dist/auro-calendar-cell.d.ts +6 -0
  21. package/components/datepicker/dist/auro-datepicker.d.ts +8 -0
  22. package/components/datepicker/dist/index.js +173 -10
  23. package/components/datepicker/dist/registered.js +173 -10
  24. package/components/input/demo/api.min.js +67 -3
  25. package/components/input/demo/index.min.js +67 -3
  26. package/components/input/dist/index.js +67 -3
  27. package/components/input/dist/registered.js +67 -3
  28. package/components/radio/demo/api.min.js +97 -5
  29. package/components/radio/demo/index.min.js +97 -5
  30. package/components/radio/dist/auro-radio-group.d.ts +14 -0
  31. package/components/radio/dist/index.js +97 -5
  32. package/components/radio/dist/registered.js +97 -5
  33. package/components/select/demo/api.min.js +67 -3
  34. package/components/select/demo/index.min.js +67 -3
  35. package/components/select/dist/index.js +67 -3
  36. package/components/select/dist/registered.js +67 -3
  37. package/package.json +1 -1
@@ -823,6 +823,52 @@ let AuroFormValidation$1 = class AuroFormValidation {
823
823
  message: e => e.getAttribute('setCustomValidityRangeUnderflow') || ''
824
824
  }
825
825
  ]
826
+ },
827
+ combobox: {
828
+ filter: [
829
+ {
830
+ check: (e) => {
831
+
832
+ // Guard Clause: If the behavior is not 'filter', skip this validation
833
+ if (e.behavior !== 'filter') return false;
834
+
835
+ // Get the current input value
836
+ const currentInputValue = e.input.value;
837
+
838
+ // Skip validation if the input has no value
839
+ if (!currentInputValue) return false;
840
+
841
+ /**
842
+ * Let's check if the option selected and combobox value match.
843
+ */
844
+
845
+ // Guard Clause: If there is no option selected fail the validation
846
+ if (!e.optionSelected) return true;
847
+
848
+ // Guard Clause: If there is no value fail the validation
849
+ if (!e.value) return true;
850
+
851
+ // Guard Clause: If the selected option's value doesn't match the input value fail the validation
852
+ if (e.optionSelected.value !== e.value) return true;
853
+
854
+ /**
855
+ * Now let's make sure the user hasn't change the value in the input after selecting an option.
856
+ * This is to make sure there's no user confusion if they select an option but then change the value to something else.
857
+ */
858
+
859
+ // Guard Clause: If the current input value doesn't match the option selected value fail the validation
860
+ if (currentInputValue && currentInputValue !== e.optionSelected.value) return true;
861
+
862
+ // Guard Clause: If the current input value doesn't match the combobox value fail the validation
863
+ if (currentInputValue && currentInputValue !== e.value) return true;
864
+
865
+ // If all the checks passed the validation passes
866
+ return false;
867
+ },
868
+ validity: 'valueMissing',
869
+ message: e => e.getAttribute('setCustomValidityValueMissingFilter') || e.setCustomValidity || ''
870
+ }
871
+ ]
826
872
  }
827
873
  };
828
874
 
@@ -831,6 +877,8 @@ let AuroFormValidation$1 = class AuroFormValidation {
831
877
  elementType = 'input';
832
878
  } else if (this.runtimeUtils.elementMatch(elem, 'auro-counter') || this.runtimeUtils.elementMatch(elem, 'auro-counter-group')) {
833
879
  elementType = 'counter';
880
+ } else if (this.runtimeUtils.elementMatch(elem, 'auro-combobox')) {
881
+ elementType = 'combobox';
834
882
  }
835
883
 
836
884
  if (elementType) {
@@ -1017,6 +1065,15 @@ let AuroFormValidation$1 = class AuroFormValidation {
1017
1065
  }
1018
1066
  }
1019
1067
 
1068
+ const isCombobox = this.runtimeUtils.elementMatch(elem, 'auro-combobox');
1069
+
1070
+ if (isCombobox) {
1071
+
1072
+ if (!elem.persistInput || elem.behavior === "filter") {
1073
+ hasValue = elem.input.value?.length > 0;
1074
+ }
1075
+ }
1076
+
1020
1077
  if (!hasValue && elem.required && elem.touched) {
1021
1078
  elem.validity = 'valueMissing';
1022
1079
  elem.errorMessage = elem.setCustomValidityValueMissing || elem.setCustomValidity || '';
@@ -1025,6 +1082,11 @@ let AuroFormValidation$1 = class AuroFormValidation {
1025
1082
  this.validateElementAttributes(elem);
1026
1083
  } else if (hasValue && (this.runtimeUtils.elementMatch(elem, 'auro-counter') || this.runtimeUtils.elementMatch(elem, 'auro-counter-group'))) {
1027
1084
  this.validateElementAttributes(elem);
1085
+ } else if (isCombobox) {
1086
+ this.validateElementAttributes(elem);
1087
+
1088
+ // Don't run extra validation for cases where the combobox is not being used as a filter
1089
+ validationShouldRun = elem.behavior !== 'filter';
1028
1090
  }
1029
1091
  }
1030
1092
 
@@ -1032,8 +1094,8 @@ let AuroFormValidation$1 = class AuroFormValidation {
1032
1094
 
1033
1095
  const isCombobox = this.runtimeUtils.elementMatch(elem, 'auro-combobox');
1034
1096
 
1035
- // Don't reset combobox validity if persistValue is set since we can't use the input value to validate
1036
- if (!isCombobox || isCombobox && !elem.persistValue) {
1097
+ // Don't reset combobox validity if persistInput is set since we can't use the input value to validate
1098
+ if (!isCombobox || isCombobox && !elem.persistInput) {
1037
1099
 
1038
1100
  // run validation on all inputs since we're going to use them to set the validity of this component
1039
1101
  this.auroInputElements.forEach(input => input.validate());
@@ -1106,6 +1168,8 @@ let AuroFormValidation$1 = class AuroFormValidation {
1106
1168
  if (input.validationMessage.length > 0) {
1107
1169
  elem.errorMessage = input.validationMessage;
1108
1170
  }
1171
+ } else if (this.runtimeUtils.elementMatch(elem, 'auro-combobox') && elem.errorMessage === '') {
1172
+ elem.errorMessage = elem.input?.inputElement?.validationMessage;
1109
1173
  } else if (this.inputElements?.length > 0 && elem.errorMessage === '') {
1110
1174
  const firstInput = this.inputElements[0];
1111
1175
 
@@ -5335,7 +5399,7 @@ var emphasizedStyleCss = i$5`:host([layout*=emphasized][shape*=pill]:not([layout
5335
5399
 
5336
5400
  var emphasizedColorCss = i$5`.layout-emphasized:focus-within,.layout-emphasized-left:focus-within,.layout-emphasized-right:focus-within{--auro-input-border-color: var(--ds-auro-input-border-color)}`;
5337
5401
 
5338
- var snowflakeStyleCss = i$5`:root{--ds-advanced-color-button-flat-text: #676767;--ds-advanced-color-button-flat-text-disabled: #d0d0d0;--ds-advanced-color-button-flat-text-hover: #525252;--ds-advanced-color-button-flat-text-inverse: #ffffff;--ds-advanced-color-button-flat-text-inverse-disabled: #7e8894;--ds-advanced-color-button-flat-text-inverse-hover: #adadad;--ds-advanced-color-button-ghost-background-hover: rgba(0, 0, 0, 0.05);--ds-advanced-color-button-ghost-background-inverse-hover: rgba(255, 255, 255, 0.05);--ds-advanced-color-button-ghost-text: #01426a;--ds-advanced-color-button-ghost-text-disabled: #d0d0d0;--ds-advanced-color-button-ghost-text-inverse: #ffffff;--ds-advanced-color-button-ghost-text-inverse-disabled: #7e8894;--ds-advanced-color-button-primary-background: #01426a;--ds-advanced-color-button-primary-background-disabled: #acc9e2;--ds-advanced-color-button-primary-background-hover: #00274a;--ds-advanced-color-button-primary-background-inactive: #cfe0ef;--ds-advanced-color-button-primary-background-inactive-hover: #89b2d4;--ds-advanced-color-button-primary-background-inverse: #ffffff;--ds-advanced-color-button-primary-background-inverse-disabled: rgba(255, 255, 255, 0.75);--ds-advanced-color-button-primary-background-inverse-hover: #ebf3f9;--ds-advanced-color-button-primary-border: #01426a;--ds-advanced-color-button-primary-border-disabled: #acc9e2;--ds-advanced-color-button-primary-border-hover: #00274a;--ds-advanced-color-button-primary-border-inverse: #ffffff;--ds-advanced-color-button-primary-border-inverse-disabled: rgba(255, 255, 255, 0.75);--ds-advanced-color-button-primary-border-inverse-hover: #ebf3f9;--ds-advanced-color-button-primary-text: #ffffff;--ds-advanced-color-button-primary-text-disabled: #ffffff;--ds-advanced-color-button-primary-text-inverse: #01426a;--ds-advanced-color-button-secondary-background: #ffffff;--ds-advanced-color-button-secondary-background-disabled: #f7f7f7;--ds-advanced-color-button-secondary-background-hover: #f2f2f2;--ds-advanced-color-button-secondary-background-inverse-hover: rgba(255, 255, 255, 0.1);--ds-advanced-color-button-secondary-border: #01426a;--ds-advanced-color-button-secondary-border-hover: #00274a;--ds-advanced-color-button-secondary-border-disabled: #cfe0ef;--ds-advanced-color-button-secondary-border-inverse: #ffffff;--ds-advanced-color-button-secondary-border-inverse-disabled: #dddddd;--ds-advanced-color-button-secondary-text: #01426a;--ds-advanced-color-button-secondary-text-hover: #00274a;--ds-advanced-color-button-secondary-text-inverse: #ffffff;--ds-advanced-color-button-tertiary-background: rgba(0, 0, 0, 0.05);--ds-advanced-color-button-tertiary-background-hover: rgba(0, 0, 0, 0.1);--ds-advanced-color-button-tertiary-background-inverse: rgba(255, 255, 255, 0.05);--ds-advanced-color-button-tertiary-background-inverse-hover: rgba(255, 255, 255, 0.1);--ds-advanced-color-button-tertiary-text: #01426a;--ds-advanced-color-button-tertiary-text-hover: #00274a;--ds-advanced-color-button-tertiary-text-inverse: #ffffff;--ds-advanced-color-accents-accent1: #b2d583;--ds-advanced-color-accents-accent1-bold: #92c450;--ds-advanced-color-accents-accent1-muted: #deedca;--ds-advanced-color-accents-accent2: #fad362;--ds-advanced-color-accents-accent2-bold: #f2ba14;--ds-advanced-color-accents-accent2-muted: #fde398;--ds-advanced-color-accents-accent3: #63beff;--ds-advanced-color-accents-accent3-bold: #0074ca;--ds-advanced-color-accents-accent3-muted: #aedeff;--ds-advanced-color-accents-accent4: #feb17a;--ds-advanced-color-accents-accent4-bold: #fb7f24;--ds-advanced-color-accents-accent4-muted: #ffe2cf;--ds-advanced-color-accents-transparency: rgba(0, 0, 0, 0.1);--ds-advanced-color-accents-transparency-inverse: rgba(255, 255, 255, 0.2);--ds-advanced-color-avatar-gradient-bottom: #cfe0ef;--ds-advanced-color-avatar-gradient-top: #6899c6;--ds-advanced-color-boolean-disabled-inverse: #7e8894;--ds-advanced-color-boolean-error: #e31f26;--ds-advanced-color-boolean-error-hover: #b1161c;--ds-advanced-color-boolean-error-inverse: #f9a4a8;--ds-advanced-color-boolean-error-inverse-hover: #f15f65;--ds-advanced-color-boolean-indicator: #ffffff;--ds-advanced-color-boolean-indicator-inverse: #00274a;--ds-advanced-color-boolean-isfalse: #ffffff;--ds-advanced-color-boolean-isfalse-border: #585e67;--ds-advanced-color-boolean-isfalse-border-inverse: #ffffff;--ds-advanced-color-boolean-isfalse-hover: #f2f2f2;--ds-advanced-color-boolean-isfalse-inverse: rgba(255, 255, 255, 0.15);--ds-advanced-color-boolean-isfalse-inverse-hover: rgba(255, 255, 255, 0.2);--ds-advanced-color-boolean-istrue: #01426a;--ds-advanced-color-boolean-istrue-hover: #00274a;--ds-advanced-color-boolean-istrue-inverse: #ffffff;--ds-advanced-color-boolean-istrue-inverse-hover: rgba(255, 255, 255, 0.7);--ds-advanced-color-dropdown-emphasized-background: #00274A1a;--ds-advanced-color-dropdown-emphasized-background-hover: #00274A33;--ds-advanced-color-expanded-widget-background: #00274a;--ds-advanced-color-flightline-indicator: #00274a;--ds-advanced-color-flightline-line: #00274a;--ds-advanced-color-hyperlink-text: #2875b5;--ds-advanced-color-hyperlink-text-hover: #01426a;--ds-advanced-color-hyperlink-text-inverse: #ffffff;--ds-advanced-color-hyperlink-text-inverse-hover: #ebf3f9;--ds-advanced-color-shared-background: #ffffff;--ds-advanced-color-shared-background-inverse: rgba(255, 255, 255, 0.15);--ds-advanced-color-shared-background-inverse-disabled: rgba(255, 255, 255, 0.1);--ds-advanced-color-shared-background-inverse-hover: rgba(255, 255, 255, 0.2);--ds-advanced-color-shared-background-muted: #f7f7f7;--ds-advanced-color-shared-background-strong: #676767;--ds-advanced-color-shared-emphasized-background: rgba(1, 66, 106, 0.1);--ds-advanced-color-shared-emphasized-background-hover: rgba(1, 66, 106, 0.2);--ds-advanced-color-shared-scrim: rgba(0, 0, 0, 0.5);--ds-advanced-color-shared-text-accent: #2875b5;--ds-advanced-color-skeleton-background: #f7f8fa;--ds-advanced-color-skeleton-wave: #e4e8ec;--ds-advanced-color-state-background-disabled: #dddddd;--ds-advanced-color-state-background-hover: #f2f2f2;--ds-advanced-color-state-background-inverse-disabled: #7e8894;--ds-advanced-color-state-error-inverse: #f9a4a8;--ds-advanced-color-state-focused: #01426a;--ds-advanced-color-state-focused-inverse: #ffffff;--ds-advanced-color-state-selected: #01426a;--ds-advanced-color-state-selected-hover: #00274a;--ds-basic-color-border-bold: #585e67;--ds-basic-color-border-brand: #00274a;--ds-basic-color-border-default: #959595;--ds-basic-color-border-divider: rgba(0, 0, 0, 0.15);--ds-basic-color-border-divider-inverse: rgba(255, 255, 255, 0.4);--ds-basic-color-border-inverse: #ffffff;--ds-basic-color-border-subtle: #dddddd;--ds-basic-color-brand-primary: #01426a;--ds-basic-color-brand-primary-bold: #00274a;--ds-basic-color-brand-primary-muted: #ebf3f9;--ds-basic-color-brand-primary-subtle: #2875b5;--ds-basic-color-brand-secondary: #5de3f7;--ds-basic-color-brand-secondary-bold: #18c3dd;--ds-basic-color-brand-secondary-muted: #ebfafd;--ds-basic-color-brand-secondary-subtle: #b4eff9;--ds-basic-color-brand-tertiary: #a3cd6a;--ds-basic-color-brand-tertiary-bold: #7daf3b;--ds-basic-color-brand-tertiary-muted: #eaf3dd;--ds-basic-color-brand-tertiary-subtle: #c9e1a7;--ds-basic-color-fare-basiceconomy: #97eaf8;--ds-basic-color-fare-business: #01426a;--ds-basic-color-fare-economy: #0074ca;--ds-basic-color-fare-first: #00274a;--ds-basic-color-fare-premiumeconomy: #005154;--ds-basic-color-page-background-default: #ffffff;--ds-basic-color-page-background-utility: #ffffff;--ds-basic-color-status-default: #afb9c6;--ds-basic-color-status-error: #e31f26;--ds-basic-color-status-error-subtle: #fbc6c6;--ds-basic-color-status-info: #01426a;--ds-basic-color-status-info-subtle: #ebf3f9;--ds-basic-color-status-success: #447a1f;--ds-basic-color-status-success-subtle: #d6eac7;--ds-basic-color-status-warning: #fac200;--ds-basic-color-status-warning-subtle: #fff0b2;--ds-basic-color-surface-accent1: #5de3f7;--ds-basic-color-surface-accent1-muted: #ebfafd;--ds-basic-color-surface-accent1-subtle: #b4eff9;--ds-basic-color-surface-accent2: #a3cd6a;--ds-basic-color-surface-accent2-muted: #eaf3dd;--ds-basic-color-surface-default: #ffffff;--ds-basic-color-surface-inverse: #00274a;--ds-basic-color-surface-inverse-subtle: #2875b5;--ds-basic-color-surface-neutral-medium: #c5c5c5;--ds-basic-color-surface-neutral-subtle: #f7f7f7;--ds-basic-color-texticon-accent1: #265688;--ds-basic-color-texticon-default: #2a2a2a;--ds-basic-color-texticon-disabled: #d0d0d0;--ds-basic-color-texticon-inverse: #ffffff;--ds-basic-color-texticon-inverse-disabled: #7e8894;--ds-basic-color-texticon-inverse-muted: #ccd2db;--ds-basic-color-texticon-muted: #676767;--ds-basic-color-tier-program-loungetier-lounge: #01426a;--ds-basic-color-tier-program-loungetier-loungeplus: #53b390;--ds-basic-color-tier-program-loyaltytier-bronze: #d99f6d;--ds-basic-color-tier-program-loyaltytier-bronze-muted: #eed4be;--ds-basic-color-tier-program-loyaltytier-cobalt: #030772;--ds-basic-color-tier-program-loyaltytier-cobalt-muted: #a9b6d6;--ds-basic-color-tier-program-loyaltytier-copper: #cb7457;--ds-basic-color-tier-program-loyaltytier-copper-muted: #e7bfb1;--ds-basic-color-tier-program-loyaltytier-gold: #fbdc7a;--ds-basic-color-tier-program-loyaltytier-gold-muted: #fdefc4;--ds-basic-color-tier-program-loyaltytier-nickel: #abaab1;--ds-basic-color-tier-program-loyaltytier-nickel-muted: #e5e4e7;--ds-basic-color-tier-program-loyaltytier-platinum: #bcb8a4;--ds-basic-color-tier-program-loyaltytier-platinum-muted: #dad8cd;--ds-basic-color-tier-program-loyaltytier-silver: #e4e9ec;--ds-basic-color-tier-program-loyaltytier-silver-muted: #f9fafb;--ds-basic-color-tier-program-loyaltytier-titanium: #282828;--ds-basic-color-tier-program-loyaltytier-titanium-muted: #545454;--ds-basic-color-tier-program-oneworld-emerald: #139142;--ds-basic-color-tier-program-oneworld-ruby: #a41d4a;--ds-basic-color-tier-program-oneworld-sapphire: #015daa;--ds-basic-type-brand-family-primary: "AS Circular";--ds-basic-type-brand-family-secondary: "Good OT";--ds-basic-type-brand-line-height-primary: 1.3;--ds-basic-type-brand-line-height-secondary: 1;--ds-basic-type-brand-letter-spacing-primary: 0;--ds-basic-type-brand-letter-spacing-secondary: 0.05em;--ds-basic-type-brand-letter-spacing-tertiary: 0.10em;--ds-basic-type-family-accent: "Good OT";--ds-basic-type-family-accent-fallback: system-ui, -apple-system, BlinkMacSystemFont, "Segoe UI", Roboto, "Helvetica Neue", Arial, sans-serif;--ds-basic-type-family-body: "AS Circular";--ds-basic-type-family-body-fallback: system-ui, -apple-system, BlinkMacSystemFont, "Segoe UI", Roboto, "Helvetica Neue", Arial, sans-serif;--ds-basic-type-family-display: "AS Circular";--ds-basic-type-family-display-fallback: system-ui, -apple-system, BlinkMacSystemFont, "Segoe UI", Roboto, "Helvetica Neue", Arial, sans-serif;--ds-basic-type-family-heading: "AS Circular";--ds-basic-type-family-heading-fallback: system-ui, -apple-system, BlinkMacSystemFont, "Segoe UI", Roboto, "Helvetica Neue", Arial, sans-serif;--ds-basic-type-letter-spacing-accent: 0.05em;--ds-basic-type-letter-spacing-accent2: 0.10em;--ds-basic-type-letter-spacing-body: 0;--ds-basic-type-letter-spacing-display: 0;--ds-basic-type-letter-spacing-heading: 0;--ds-basic-type-line-height-accent: 1.3;--ds-basic-type-line-height-accent2: 1;--ds-basic-type-line-height-body: 1.625rem;--ds-basic-type-line-height-body2: 1.5rem;--ds-basic-type-line-height-body3: 1.25rem;--ds-basic-type-line-height-body4: 1rem;--ds-basic-type-line-height-body5: 0.875rem;--ds-basic-type-line-height-display: 1.3;--ds-basic-type-line-height-heading: 1.3;--ds-basic-type-weight-accent: 450;--ds-basic-type-weight-accent2: 500;--ds-basic-type-weight-body: 450;--ds-basic-type-weight-display: 300;--ds-basic-type-weight-heading: 300;--ds-basic-type-weight-heading2: 450}:host([layout*=snowflake]) .leftIndent{margin-left:var(--ds-size-200, 1rem)}:host([layout*=snowflake]) .rightIndent{margin-right:var(--ds-size-200, 1rem)}.layout-snowflake{display:flex;flex-direction:row;align-items:center;justify-content:center}.layout-snowflake label{white-space:nowrap;text-overflow:ellipsis;overflow:hidden;padding-block-start:var(--ds-size-50, 0.25rem)}.layout-snowflake input{transition:all 1ms linear;text-align:center}.layout-snowflake .mainContent{position:relative;display:flex;flex-direction:column;justify-content:center;align-items:center;flex:1;overflow:hidden}.layout-snowflake .displayValue{display:none;width:100%}.layout-snowflake .displayValue.hasContent:is(.withValue):not(.hasFocus){display:block}.layout-snowflake .displayValueWrapper{display:flex;flex-direction:row;align-items:center;justify-content:center;width:100%}.layout-snowflake.withValue{justify-content:flex-start}.layout-snowflake:not(:focus-within):not(:is([validity]:not([validity=valid]))){--ds-auro-input-border-color: transparent}.layout-snowflake:focus-within{justify-content:flex-start}.layout-snowflake:focus-within .alertNotification{display:none}.layout-snowflake .accents{width:var(--ds-size-300, 1.5rem)}.layout-snowflake .accents.left{padding-left:var(--ds-size-200, 1rem)}.layout-snowflake .accents.right{padding-right:var(--ds-size-200, 1rem)}:host([layout*=snowflake]) .helpTextWrapper{text-align:center}`;
5402
+ var snowflakeStyleCss = i$5`:root{--ds-advanced-color-button-flat-text: #676767;--ds-advanced-color-button-flat-text-disabled: #d0d0d0;--ds-advanced-color-button-flat-text-hover: #525252;--ds-advanced-color-button-flat-text-inverse: #ffffff;--ds-advanced-color-button-flat-text-inverse-disabled: #7e8894;--ds-advanced-color-button-flat-text-inverse-hover: #adadad;--ds-advanced-color-button-ghost-background-hover: rgba(0, 0, 0, 0.05);--ds-advanced-color-button-ghost-background-inverse-hover: rgba(255, 255, 255, 0.05);--ds-advanced-color-button-ghost-text: #01426a;--ds-advanced-color-button-ghost-text-disabled: #d0d0d0;--ds-advanced-color-button-ghost-text-inverse: #ffffff;--ds-advanced-color-button-ghost-text-inverse-disabled: #7e8894;--ds-advanced-color-button-primary-background: #01426a;--ds-advanced-color-button-primary-background-disabled: #acc9e2;--ds-advanced-color-button-primary-background-hover: #00274a;--ds-advanced-color-button-primary-background-inactive: #cfe0ef;--ds-advanced-color-button-primary-background-inactive-hover: #89b2d4;--ds-advanced-color-button-primary-background-inverse: #ffffff;--ds-advanced-color-button-primary-background-inverse-disabled: rgba(255, 255, 255, 0.75);--ds-advanced-color-button-primary-background-inverse-hover: #ebf3f9;--ds-advanced-color-button-primary-border: #01426a;--ds-advanced-color-button-primary-border-disabled: #acc9e2;--ds-advanced-color-button-primary-border-hover: #00274a;--ds-advanced-color-button-primary-border-inverse: #ffffff;--ds-advanced-color-button-primary-border-inverse-disabled: rgba(255, 255, 255, 0.75);--ds-advanced-color-button-primary-border-inverse-hover: #ebf3f9;--ds-advanced-color-button-primary-text: #ffffff;--ds-advanced-color-button-primary-text-disabled: #ffffff;--ds-advanced-color-button-primary-text-inverse: #01426a;--ds-advanced-color-button-secondary-background: #ffffff;--ds-advanced-color-button-secondary-background-disabled: #f7f7f7;--ds-advanced-color-button-secondary-background-hover: #f2f2f2;--ds-advanced-color-button-secondary-background-inverse-hover: rgba(255, 255, 255, 0.1);--ds-advanced-color-button-secondary-border: #01426a;--ds-advanced-color-button-secondary-border-hover: #00274a;--ds-advanced-color-button-secondary-border-disabled: #cfe0ef;--ds-advanced-color-button-secondary-border-inverse: #ffffff;--ds-advanced-color-button-secondary-border-inverse-disabled: #dddddd;--ds-advanced-color-button-secondary-text: #01426a;--ds-advanced-color-button-secondary-text-hover: #00274a;--ds-advanced-color-button-secondary-text-inverse: #ffffff;--ds-advanced-color-button-tertiary-background: rgba(0, 0, 0, 0.05);--ds-advanced-color-button-tertiary-background-hover: rgba(0, 0, 0, 0.1);--ds-advanced-color-button-tertiary-background-inverse: rgba(255, 255, 255, 0.05);--ds-advanced-color-button-tertiary-background-inverse-hover: rgba(255, 255, 255, 0.1);--ds-advanced-color-button-tertiary-text: #01426a;--ds-advanced-color-button-tertiary-text-hover: #00274a;--ds-advanced-color-button-tertiary-text-inverse: #ffffff;--ds-advanced-color-accents-accent1: #b2d583;--ds-advanced-color-accents-accent1-bold: #92c450;--ds-advanced-color-accents-accent1-muted: #deedca;--ds-advanced-color-accents-accent2: #fad362;--ds-advanced-color-accents-accent2-bold: #f2ba14;--ds-advanced-color-accents-accent2-muted: #fde398;--ds-advanced-color-accents-accent3: #63beff;--ds-advanced-color-accents-accent3-bold: #0074ca;--ds-advanced-color-accents-accent3-muted: #aedeff;--ds-advanced-color-accents-accent4: #feb17a;--ds-advanced-color-accents-accent4-bold: #fb7f24;--ds-advanced-color-accents-accent4-muted: #ffe2cf;--ds-advanced-color-accents-transparency: rgba(0, 0, 0, 0.1);--ds-advanced-color-accents-transparency-inverse: rgba(255, 255, 255, 0.2);--ds-advanced-color-avatar-gradient-bottom: #cfe0ef;--ds-advanced-color-avatar-gradient-top: #6899c6;--ds-advanced-color-boolean-disabled-inverse: #7e8894;--ds-advanced-color-boolean-error: #e31f26;--ds-advanced-color-boolean-error-hover: #b1161c;--ds-advanced-color-boolean-error-inverse: #f9a4a8;--ds-advanced-color-boolean-error-inverse-hover: #f15f65;--ds-advanced-color-boolean-indicator: #ffffff;--ds-advanced-color-boolean-indicator-inverse: #00274a;--ds-advanced-color-boolean-isfalse: #ffffff;--ds-advanced-color-boolean-isfalse-border: #585e67;--ds-advanced-color-boolean-isfalse-border-inverse: #ffffff;--ds-advanced-color-boolean-isfalse-hover: #f2f2f2;--ds-advanced-color-boolean-isfalse-inverse: rgba(255, 255, 255, 0.15);--ds-advanced-color-boolean-isfalse-inverse-hover: rgba(255, 255, 255, 0.2);--ds-advanced-color-boolean-istrue: #01426a;--ds-advanced-color-boolean-istrue-hover: #00274a;--ds-advanced-color-boolean-istrue-inverse: #ffffff;--ds-advanced-color-boolean-istrue-inverse-hover: rgba(255, 255, 255, 0.7);--ds-advanced-color-dropdown-emphasized-background: #00274A1a;--ds-advanced-color-dropdown-emphasized-background-hover: #00274A33;--ds-advanced-color-expanded-widget-background: #00274a;--ds-advanced-color-flightline-indicator: #00274a;--ds-advanced-color-flightline-line: #00274a;--ds-advanced-color-hyperlink-text: #2875b5;--ds-advanced-color-hyperlink-text-hover: #01426a;--ds-advanced-color-hyperlink-text-inverse: #ffffff;--ds-advanced-color-hyperlink-text-inverse-hover: #ebf3f9;--ds-advanced-color-shared-background: #ffffff;--ds-advanced-color-shared-background-inverse: rgba(255, 255, 255, 0.15);--ds-advanced-color-shared-background-inverse-disabled: rgba(255, 255, 255, 0.1);--ds-advanced-color-shared-background-inverse-hover: rgba(255, 255, 255, 0.2);--ds-advanced-color-shared-background-muted: #f7f7f7;--ds-advanced-color-shared-background-strong: #676767;--ds-advanced-color-shared-emphasized-background: rgba(1, 66, 106, 0.1);--ds-advanced-color-shared-emphasized-background-hover: rgba(1, 66, 106, 0.2);--ds-advanced-color-shared-scrim: rgba(0, 0, 0, 0.5);--ds-advanced-color-shared-text-accent: #2875b5;--ds-advanced-color-skeleton-background: #f7f8fa;--ds-advanced-color-skeleton-wave: #e4e8ec;--ds-advanced-color-state-background-disabled: #dddddd;--ds-advanced-color-state-background-hover: #f2f2f2;--ds-advanced-color-state-background-inverse-disabled: #7e8894;--ds-advanced-color-state-error-inverse: #f9a4a8;--ds-advanced-color-state-focused: #01426a;--ds-advanced-color-state-focused-inverse: #ffffff;--ds-advanced-color-state-selected: #01426a;--ds-advanced-color-state-selected-hover: #00274a;--ds-basic-color-border-bold: #585e67;--ds-basic-color-border-brand: #00274a;--ds-basic-color-border-default: #959595;--ds-basic-color-border-divider: rgba(0, 0, 0, 0.15);--ds-basic-color-border-divider-inverse: rgba(255, 255, 255, 0.4);--ds-basic-color-border-inverse: #ffffff;--ds-basic-color-border-subtle: #dddddd;--ds-basic-color-brand-primary: #01426a;--ds-basic-color-brand-primary-bold: #00274a;--ds-basic-color-brand-primary-muted: #ebf3f9;--ds-basic-color-brand-primary-subtle: #2875b5;--ds-basic-color-brand-secondary: #5de3f7;--ds-basic-color-brand-secondary-bold: #18c3dd;--ds-basic-color-brand-secondary-muted: #ebfafd;--ds-basic-color-brand-secondary-subtle: #b4eff9;--ds-basic-color-brand-tertiary: #a3cd6a;--ds-basic-color-brand-tertiary-bold: #7daf3b;--ds-basic-color-brand-tertiary-muted: #eaf3dd;--ds-basic-color-brand-tertiary-subtle: #c9e1a7;--ds-basic-color-fare-basiceconomy: #97eaf8;--ds-basic-color-fare-business: #01426a;--ds-basic-color-fare-economy: #0074ca;--ds-basic-color-fare-first: #00274a;--ds-basic-color-fare-premiumeconomy: #005154;--ds-basic-color-page-background-default: #ffffff;--ds-basic-color-page-background-utility: #ffffff;--ds-basic-color-status-default: #afb9c6;--ds-basic-color-status-error: #e31f26;--ds-basic-color-status-error-subtle: #fbc6c6;--ds-basic-color-status-info: #01426a;--ds-basic-color-status-info-subtle: #ebf3f9;--ds-basic-color-status-success: #447a1f;--ds-basic-color-status-success-subtle: #d6eac7;--ds-basic-color-status-warning: #fac200;--ds-basic-color-status-warning-subtle: #fff0b2;--ds-basic-color-surface-accent1: #5de3f7;--ds-basic-color-surface-accent1-muted: #ebfafd;--ds-basic-color-surface-accent1-subtle: #b4eff9;--ds-basic-color-surface-accent2: #a3cd6a;--ds-basic-color-surface-accent2-muted: #eaf3dd;--ds-basic-color-surface-default: #ffffff;--ds-basic-color-surface-inverse: #00274a;--ds-basic-color-surface-inverse-subtle: #2875b5;--ds-basic-color-surface-neutral-medium: #c5c5c5;--ds-basic-color-surface-neutral-subtle: #f7f7f7;--ds-basic-color-texticon-accent1: #265688;--ds-basic-color-texticon-default: #2a2a2a;--ds-basic-color-texticon-disabled: #d0d0d0;--ds-basic-color-texticon-inverse: #ffffff;--ds-basic-color-texticon-inverse-disabled: #7e8894;--ds-basic-color-texticon-inverse-muted: #ccd2db;--ds-basic-color-texticon-muted: #676767;--ds-basic-color-tier-program-loungetier-lounge: #01426a;--ds-basic-color-tier-program-loungetier-loungeplus: #53b390;--ds-basic-color-tier-program-loyaltytier-bronze: #d99f6d;--ds-basic-color-tier-program-loyaltytier-bronze-muted: #eed4be;--ds-basic-color-tier-program-loyaltytier-cobalt: #030772;--ds-basic-color-tier-program-loyaltytier-cobalt-muted: #a9b6d6;--ds-basic-color-tier-program-loyaltytier-copper: #cb7457;--ds-basic-color-tier-program-loyaltytier-copper-muted: #e7bfb1;--ds-basic-color-tier-program-loyaltytier-gold: #fbdc7a;--ds-basic-color-tier-program-loyaltytier-gold-muted: #fdefc4;--ds-basic-color-tier-program-loyaltytier-nickel: #abaab1;--ds-basic-color-tier-program-loyaltytier-nickel-muted: #e5e4e7;--ds-basic-color-tier-program-loyaltytier-platinum: #bcb8a4;--ds-basic-color-tier-program-loyaltytier-platinum-muted: #dad8cd;--ds-basic-color-tier-program-loyaltytier-silver: #e4e9ec;--ds-basic-color-tier-program-loyaltytier-silver-muted: #f9fafb;--ds-basic-color-tier-program-loyaltytier-titanium: #282828;--ds-basic-color-tier-program-loyaltytier-titanium-muted: #545454;--ds-basic-color-tier-program-oneworld-emerald: #139142;--ds-basic-color-tier-program-oneworld-ruby: #a41d4a;--ds-basic-color-tier-program-oneworld-sapphire: #015daa;--ds-basic-type-brand-family-primary: "AS Circular";--ds-basic-type-brand-family-secondary: "Good OT";--ds-basic-type-brand-line-height-primary: 1.3;--ds-basic-type-brand-line-height-secondary: 1;--ds-basic-type-brand-letter-spacing-primary: 0;--ds-basic-type-brand-letter-spacing-secondary: 0.05em;--ds-basic-type-brand-letter-spacing-tertiary: 0.10em;--ds-basic-type-family-accent: "Good OT";--ds-basic-type-family-accent-fallback: system-ui, -apple-system, BlinkMacSystemFont, "Segoe UI", Roboto, "Helvetica Neue", Arial, sans-serif;--ds-basic-type-family-body: "AS Circular";--ds-basic-type-family-body-fallback: system-ui, -apple-system, BlinkMacSystemFont, "Segoe UI", Roboto, "Helvetica Neue", Arial, sans-serif;--ds-basic-type-family-display: "AS Circular";--ds-basic-type-family-display-fallback: system-ui, -apple-system, BlinkMacSystemFont, "Segoe UI", Roboto, "Helvetica Neue", Arial, sans-serif;--ds-basic-type-family-heading: "AS Circular";--ds-basic-type-family-heading-fallback: system-ui, -apple-system, BlinkMacSystemFont, "Segoe UI", Roboto, "Helvetica Neue", Arial, sans-serif;--ds-basic-type-letter-spacing-accent: 0.05em;--ds-basic-type-letter-spacing-accent2: 0.10em;--ds-basic-type-letter-spacing-body: 0;--ds-basic-type-letter-spacing-display: 0;--ds-basic-type-letter-spacing-heading: 0;--ds-basic-type-line-height-accent: 1.3;--ds-basic-type-line-height-accent2: 1;--ds-basic-type-line-height-body: 1.625rem;--ds-basic-type-line-height-body2: 1.5rem;--ds-basic-type-line-height-body3: 1.25rem;--ds-basic-type-line-height-body4: 1rem;--ds-basic-type-line-height-body5: 0.875rem;--ds-basic-type-line-height-display: 1.3;--ds-basic-type-line-height-heading: 1.3;--ds-basic-type-weight-accent: 450;--ds-basic-type-weight-accent2: 500;--ds-basic-type-weight-body: 450;--ds-basic-type-weight-display: 300;--ds-basic-type-weight-heading: 300;--ds-basic-type-weight-heading2: 450}:host([layout*=snowflake]) .leftIndent{margin-left:var(--ds-size-200, 1rem)}:host([layout*=snowflake]) .rightIndent{margin-right:var(--ds-size-200, 1rem)}.layout-snowflake{display:flex;flex-direction:row;align-items:center;justify-content:center}.layout-snowflake label{white-space:nowrap;text-overflow:ellipsis;overflow:hidden;padding-block-start:var(--ds-size-50, 0.25rem)}.layout-snowflake input{transition:all 1ms linear;text-align:center}.layout-snowflake .mainContent{position:relative;display:flex;flex-direction:column;justify-content:center;align-items:center;flex:1;overflow:hidden}.layout-snowflake .displayValue{display:none;width:100%}.layout-snowflake .displayValue.hasContent:is(.withValue):not(.hasFocus){display:block}.layout-snowflake .displayValueWrapper{display:flex;flex-direction:row;align-items:center;justify-content:center;width:100%}.layout-snowflake.withValue{justify-content:flex-start}.layout-snowflake.withValue:hover .alertNotification{display:none}.layout-snowflake:not(:focus-within):not(:is([validity]:not([validity=valid]))){--ds-auro-input-border-color: transparent}.layout-snowflake:focus-within{justify-content:flex-start}.layout-snowflake:focus-within .alertNotification{display:none}.layout-snowflake .accents{width:var(--ds-size-300, 1.5rem)}.layout-snowflake .accents.left{padding-left:var(--ds-size-200, 1rem)}.layout-snowflake .accents.right{padding-right:var(--ds-size-200, 1rem)}:host([layout*=snowflake]) .helpTextWrapper{text-align:center}`;
5339
5403
 
5340
5404
  const watchedItems = new Set();
5341
5405
 
@@ -9892,6 +9956,52 @@ class AuroFormValidation {
9892
9956
  message: e => e.getAttribute('setCustomValidityRangeUnderflow') || ''
9893
9957
  }
9894
9958
  ]
9959
+ },
9960
+ combobox: {
9961
+ filter: [
9962
+ {
9963
+ check: (e) => {
9964
+
9965
+ // Guard Clause: If the behavior is not 'filter', skip this validation
9966
+ if (e.behavior !== 'filter') return false;
9967
+
9968
+ // Get the current input value
9969
+ const currentInputValue = e.input.value;
9970
+
9971
+ // Skip validation if the input has no value
9972
+ if (!currentInputValue) return false;
9973
+
9974
+ /**
9975
+ * Let's check if the option selected and combobox value match.
9976
+ */
9977
+
9978
+ // Guard Clause: If there is no option selected fail the validation
9979
+ if (!e.optionSelected) return true;
9980
+
9981
+ // Guard Clause: If there is no value fail the validation
9982
+ if (!e.value) return true;
9983
+
9984
+ // Guard Clause: If the selected option's value doesn't match the input value fail the validation
9985
+ if (e.optionSelected.value !== e.value) return true;
9986
+
9987
+ /**
9988
+ * Now let's make sure the user hasn't change the value in the input after selecting an option.
9989
+ * This is to make sure there's no user confusion if they select an option but then change the value to something else.
9990
+ */
9991
+
9992
+ // Guard Clause: If the current input value doesn't match the option selected value fail the validation
9993
+ if (currentInputValue && currentInputValue !== e.optionSelected.value) return true;
9994
+
9995
+ // Guard Clause: If the current input value doesn't match the combobox value fail the validation
9996
+ if (currentInputValue && currentInputValue !== e.value) return true;
9997
+
9998
+ // If all the checks passed the validation passes
9999
+ return false;
10000
+ },
10001
+ validity: 'valueMissing',
10002
+ message: e => e.getAttribute('setCustomValidityValueMissingFilter') || e.setCustomValidity || ''
10003
+ }
10004
+ ]
9895
10005
  }
9896
10006
  };
9897
10007
 
@@ -9900,6 +10010,8 @@ class AuroFormValidation {
9900
10010
  elementType = 'input';
9901
10011
  } else if (this.runtimeUtils.elementMatch(elem, 'auro-counter') || this.runtimeUtils.elementMatch(elem, 'auro-counter-group')) {
9902
10012
  elementType = 'counter';
10013
+ } else if (this.runtimeUtils.elementMatch(elem, 'auro-combobox')) {
10014
+ elementType = 'combobox';
9903
10015
  }
9904
10016
 
9905
10017
  if (elementType) {
@@ -10086,6 +10198,15 @@ class AuroFormValidation {
10086
10198
  }
10087
10199
  }
10088
10200
 
10201
+ const isCombobox = this.runtimeUtils.elementMatch(elem, 'auro-combobox');
10202
+
10203
+ if (isCombobox) {
10204
+
10205
+ if (!elem.persistInput || elem.behavior === "filter") {
10206
+ hasValue = elem.input.value?.length > 0;
10207
+ }
10208
+ }
10209
+
10089
10210
  if (!hasValue && elem.required && elem.touched) {
10090
10211
  elem.validity = 'valueMissing';
10091
10212
  elem.errorMessage = elem.setCustomValidityValueMissing || elem.setCustomValidity || '';
@@ -10094,6 +10215,11 @@ class AuroFormValidation {
10094
10215
  this.validateElementAttributes(elem);
10095
10216
  } else if (hasValue && (this.runtimeUtils.elementMatch(elem, 'auro-counter') || this.runtimeUtils.elementMatch(elem, 'auro-counter-group'))) {
10096
10217
  this.validateElementAttributes(elem);
10218
+ } else if (isCombobox) {
10219
+ this.validateElementAttributes(elem);
10220
+
10221
+ // Don't run extra validation for cases where the combobox is not being used as a filter
10222
+ validationShouldRun = elem.behavior !== 'filter';
10097
10223
  }
10098
10224
  }
10099
10225
 
@@ -10101,8 +10227,8 @@ class AuroFormValidation {
10101
10227
 
10102
10228
  const isCombobox = this.runtimeUtils.elementMatch(elem, 'auro-combobox');
10103
10229
 
10104
- // Don't reset combobox validity if persistValue is set since we can't use the input value to validate
10105
- if (!isCombobox || isCombobox && !elem.persistValue) {
10230
+ // Don't reset combobox validity if persistInput is set since we can't use the input value to validate
10231
+ if (!isCombobox || isCombobox && !elem.persistInput) {
10106
10232
 
10107
10233
  // run validation on all inputs since we're going to use them to set the validity of this component
10108
10234
  this.auroInputElements.forEach(input => input.validate());
@@ -10175,6 +10301,8 @@ class AuroFormValidation {
10175
10301
  if (input.validationMessage.length > 0) {
10176
10302
  elem.errorMessage = input.validationMessage;
10177
10303
  }
10304
+ } else if (this.runtimeUtils.elementMatch(elem, 'auro-combobox') && elem.errorMessage === '') {
10305
+ elem.errorMessage = elem.input?.inputElement?.validationMessage;
10178
10306
  } else if (this.inputElements?.length > 0 && elem.errorMessage === '') {
10179
10307
  const firstInput = this.inputElements[0];
10180
10308
 
@@ -13188,6 +13316,7 @@ class AuroCombobox extends AuroElement {
13188
13316
  this.required = false;
13189
13317
  this.value = undefined;
13190
13318
  this.typedValue = undefined;
13319
+ this.behavior = "suggestion";
13191
13320
 
13192
13321
  // Defaults that effect the overall layout of the combobox
13193
13322
  this.checkmark = false;
@@ -13279,6 +13408,17 @@ class AuroCombobox extends AuroElement {
13279
13408
  reflect: false
13280
13409
  },
13281
13410
 
13411
+ /**
13412
+ * Sets the behavior of the combobox, "filter" or "suggestion".
13413
+ * "filter" requires the user to select an option from the menu.
13414
+ * "suggestion" allows the user to enter a value not present in the menu options.
13415
+ * @default suggestion
13416
+ */
13417
+ behavior: {
13418
+ type: String,
13419
+ reflect: true
13420
+ },
13421
+
13282
13422
  /**
13283
13423
  * When attribute is present auro-menu will apply check marks to selected options.
13284
13424
  */
@@ -13355,7 +13495,7 @@ class AuroCombobox extends AuroElement {
13355
13495
  },
13356
13496
 
13357
13497
  /**
13358
- * If set, combobox will not filter menuoptions based in input.
13498
+ * If set, combobox will not filter menuoptions based on input.
13359
13499
  */
13360
13500
  noFilter: {
13361
13501
  type: Boolean,
@@ -13478,6 +13618,13 @@ class AuroCombobox extends AuroElement {
13478
13618
  type: String
13479
13619
  },
13480
13620
 
13621
+ /**
13622
+ * Custom help text message to display when validity = `valueMissing` due to the user not choosing a menu option when behavior = "filter".
13623
+ */
13624
+ setCustomValidityValueMissingFilter: {
13625
+ type: String
13626
+ },
13627
+
13481
13628
  /**
13482
13629
  * Indicates whether the combobox is in a dirty state (has been interacted with).
13483
13630
  * @type {boolean}
@@ -14133,6 +14280,8 @@ class AuroCombobox extends AuroElement {
14133
14280
  this.addEventListener('auroFormElement-validated', (evt) => {
14134
14281
  this.input.validity = evt.detail.validity;
14135
14282
  this.input.errorMessage = evt.detail.message;
14283
+ this.validity = evt.detail.validity;
14284
+ this.errorMessage = evt.detail.message;
14136
14285
  });
14137
14286
  }
14138
14287
 
@@ -126,6 +126,9 @@ The `<auro-combobox>` element should be used in situations where users may:
126
126
  </auro-combobox>
127
127
  <!-- AURO-GENERATED-CONTENT:END -->
128
128
  </div>
129
+
130
+ ### Basic
131
+
129
132
  <div class="exampleWrapper">
130
133
  <!-- AURO-GENERATED-CONTENT:START (FILE:src=./../apiExamples/basic.html) -->
131
134
  <!-- The below content is automatically added from ./../apiExamples/basic.html -->
@@ -201,6 +204,107 @@ The `<auro-combobox>` element should be used in situations where users may:
201
204
  <!-- AURO-GENERATED-CONTENT:END -->
202
205
  </auro-accordion>
203
206
 
207
+ ### Behavior
208
+
209
+ There are two behaviors available for the combo box: suggestion and filter.
210
+ The default behavior is "suggestion".
211
+
212
+ #### Suggestion
213
+
214
+ With the suggestion behavior, the menu options are displayed to the user as suggestions, but the user may enter whatever value they like into the input
215
+
216
+ <div class="exampleWrapper">
217
+ <!-- AURO-GENERATED-CONTENT:START (FILE:src=./../apiExamples/suggestion.html) -->
218
+ <!-- The below content is automatically added from ./../apiExamples/suggestion.html -->
219
+ <auro-combobox behavior="suggestion">
220
+ <span slot="ariaLabel.bib.close">Close combobox</span>
221
+ <span slot="ariaLabel.input.clear">Clear All</span>
222
+ <span slot="bib.fullscreen.headline">Bib Header</span>
223
+ <span slot="label">Name</span>
224
+ <auro-menu>
225
+ <auro-menuoption value="Apples" id="option-0">Apples</auro-menuoption>
226
+ <auro-menuoption value="Oranges" id="option-1">Oranges</auro-menuoption>
227
+ <auro-menuoption value="Peaches" id="option-2">Peaches</auro-menuoption>
228
+ <auro-menuoption value="Grapes" id="option-3">Grapes</auro-menuoption>
229
+ <auro-menuoption value="Cherries" id="option-4">Cherries</auro-menuoption>
230
+ <auro-menuoption static nomatch>No matching option</auro-menuoption>
231
+ </auro-menu>
232
+ </auro-combobox>
233
+ <!-- AURO-GENERATED-CONTENT:END -->
234
+ </div>
235
+ <auro-accordion alignRight>
236
+ <span slot="trigger">See code</span>
237
+ <!-- AURO-GENERATED-CONTENT:START (CODE:src=./../apiExamples/suggestion.html) -->
238
+ <!-- The below code snippet is automatically added from ./../apiExamples/suggestion.html -->
239
+
240
+ ```html
241
+ <auro-combobox behavior="suggestion">
242
+ <span slot="ariaLabel.bib.close">Close combobox</span>
243
+ <span slot="ariaLabel.input.clear">Clear All</span>
244
+ <span slot="bib.fullscreen.headline">Bib Header</span>
245
+ <span slot="label">Name</span>
246
+ <auro-menu>
247
+ <auro-menuoption value="Apples" id="option-0">Apples</auro-menuoption>
248
+ <auro-menuoption value="Oranges" id="option-1">Oranges</auro-menuoption>
249
+ <auro-menuoption value="Peaches" id="option-2">Peaches</auro-menuoption>
250
+ <auro-menuoption value="Grapes" id="option-3">Grapes</auro-menuoption>
251
+ <auro-menuoption value="Cherries" id="option-4">Cherries</auro-menuoption>
252
+ <auro-menuoption static nomatch>No matching option</auro-menuoption>
253
+ </auro-menu>
254
+ </auro-combobox>
255
+ ```
256
+ <!-- AURO-GENERATED-CONTENT:END -->
257
+ </auro-accordion>
258
+
259
+ #### Filter
260
+
261
+ With the filter behavior, the menu options are displayed to the user, and the user is required to choose one of the menu options in order for the input to be considered valid.
262
+
263
+ The `setCustomValidityValueMissingFilter` attribute is also available to display a custom message to the user when this validation check fails.
264
+
265
+ <div class="exampleWrapper">
266
+ <!-- AURO-GENERATED-CONTENT:START (FILE:src=./../apiExamples/filter.html) -->
267
+ <!-- The below content is automatically added from ./../apiExamples/filter.html -->
268
+ <auro-combobox behavior="filter" setCustomValidityValueMissingFilter="Please select an option from the list">
269
+ <span slot="ariaLabel.bib.close">Close combobox</span>
270
+ <span slot="ariaLabel.input.clear">Clear All</span>
271
+ <span slot="bib.fullscreen.headline">Bib Header</span>
272
+ <span slot="label">Name</span>
273
+ <auro-menu>
274
+ <auro-menuoption value="Apples" id="option-0">Apples</auro-menuoption>
275
+ <auro-menuoption value="Oranges" id="option-1">Oranges</auro-menuoption>
276
+ <auro-menuoption value="Peaches" id="option-2">Peaches</auro-menuoption>
277
+ <auro-menuoption value="Grapes" id="option-3">Grapes</auro-menuoption>
278
+ <auro-menuoption value="Cherries" id="option-4">Cherries</auro-menuoption>
279
+ <auro-menuoption static nomatch>No matching option</auro-menuoption>
280
+ </auro-menu>
281
+ </auro-combobox>
282
+ <!-- AURO-GENERATED-CONTENT:END -->
283
+ </div>
284
+ <auro-accordion alignRight>
285
+ <span slot="trigger">See code</span>
286
+ <!-- AURO-GENERATED-CONTENT:START (CODE:src=./../apiExamples/filter.html) -->
287
+ <!-- The below code snippet is automatically added from ./../apiExamples/filter.html -->
288
+
289
+ ```html
290
+ <auro-combobox behavior="filter" setCustomValidityValueMissingFilter="Please select an option from the list">
291
+ <span slot="ariaLabel.bib.close">Close combobox</span>
292
+ <span slot="ariaLabel.input.clear">Clear All</span>
293
+ <span slot="bib.fullscreen.headline">Bib Header</span>
294
+ <span slot="label">Name</span>
295
+ <auro-menu>
296
+ <auro-menuoption value="Apples" id="option-0">Apples</auro-menuoption>
297
+ <auro-menuoption value="Oranges" id="option-1">Oranges</auro-menuoption>
298
+ <auro-menuoption value="Peaches" id="option-2">Peaches</auro-menuoption>
299
+ <auro-menuoption value="Grapes" id="option-3">Grapes</auro-menuoption>
300
+ <auro-menuoption value="Cherries" id="option-4">Cherries</auro-menuoption>
301
+ <auro-menuoption static nomatch>No matching option</auro-menuoption>
302
+ </auro-menu>
303
+ </auro-combobox>
304
+ ```
305
+ <!-- AURO-GENERATED-CONTENT:END -->
306
+ </auro-accordion>
307
+
204
308
  ### Airports example
205
309
 
206
310
  <div class="exampleWrapper">