@riverty/web-components 5.6.0 → 5.8.0

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 (134) hide show
  1. package/CHANGELOG.md +56 -0
  2. package/custom-elements.json +28 -3
  3. package/dist/cjs/loader.cjs.js +1 -1
  4. package/dist/cjs/r-alert.cjs.entry.js +24 -8
  5. package/dist/cjs/r-badge.cjs.entry.js +1 -1
  6. package/dist/cjs/r-button.cjs.entry.js +1 -1
  7. package/dist/cjs/r-checkbox-group.cjs.entry.js +28 -14
  8. package/dist/cjs/r-checkbox.cjs.entry.js +25 -10
  9. package/dist/cjs/r-hint_3.cjs.entry.js +1 -1
  10. package/dist/cjs/r-icon-button.cjs.entry.js +1 -1
  11. package/dist/cjs/r-icon.cjs.entry.js +1 -1
  12. package/dist/cjs/r-input-code.cjs.entry.js +30 -17
  13. package/dist/cjs/r-input-date.cjs.entry.js +86 -16
  14. package/dist/cjs/r-input-password.cjs.entry.js +25 -9
  15. package/dist/cjs/r-input-phone-number.cjs.entry.js +27 -14
  16. package/dist/cjs/r-input.cjs.entry.js +27 -14
  17. package/dist/cjs/r-pagination.cjs.entry.js +1 -1
  18. package/dist/cjs/r-popover-action.cjs.entry.js +1 -1
  19. package/dist/cjs/r-popover.cjs.entry.js +1 -1
  20. package/dist/cjs/r-radio-button.cjs.entry.js +1 -1
  21. package/dist/cjs/r-radio-group.cjs.entry.js +21 -17
  22. package/dist/cjs/r-select.cjs.entry.js +113 -19
  23. package/dist/cjs/r-textarea.cjs.entry.js +19 -6
  24. package/dist/cjs/r-toast.cjs.entry.js +50 -19
  25. package/dist/cjs/web-components.cjs.js +1 -1
  26. package/dist/collection/components/alert/alert.css +56 -16
  27. package/dist/collection/components/alert/alert.js +48 -11
  28. package/dist/collection/components/alert/exports.js +1 -1
  29. package/dist/collection/components/badge/badge.css +8 -8
  30. package/dist/collection/components/button/button.css +6 -7
  31. package/dist/collection/components/checkbox/checkbox.js +45 -10
  32. package/dist/collection/components/checkbox-group/checkbox-group.css +2 -2
  33. package/dist/collection/components/checkbox-group/checkbox-group.js +47 -13
  34. package/dist/collection/components/hint/hint.css +1 -1
  35. package/dist/collection/components/icon/bundled-icons/riverty-kit.json +1 -1
  36. package/dist/collection/components/icon/riverty-kit.js +1 -1
  37. package/dist/collection/components/icon-button/icon-button.css +0 -7
  38. package/dist/collection/components/input/input.css +1 -1
  39. package/dist/collection/components/input/input.js +46 -13
  40. package/dist/collection/components/input-code/input-code.css +1 -1
  41. package/dist/collection/components/input-code/input-code.js +49 -16
  42. package/dist/collection/components/input-date/input-date.css +1 -1
  43. package/dist/collection/components/input-date/input-date.js +235 -16
  44. package/dist/collection/components/input-password/input-password.js +45 -9
  45. package/dist/collection/components/input-phone-number/input-phone-number.js +47 -14
  46. package/dist/collection/components/pagination/pagination.css +23 -23
  47. package/dist/collection/components/popover/popover.css +11 -3
  48. package/dist/collection/components/popover-action/popover-action.css +3 -5
  49. package/dist/collection/components/radio-button/radio-button.css +1 -1
  50. package/dist/collection/components/radio-group/radio-group.css +2 -2
  51. package/dist/collection/components/radio-group/radio-group.js +21 -17
  52. package/dist/collection/components/select/select.css +2 -2
  53. package/dist/collection/components/select/select.js +193 -21
  54. package/dist/collection/components/textarea/textarea.css +1 -1
  55. package/dist/collection/components/textarea/textarea.js +38 -5
  56. package/dist/collection/components/toast/toast.css +29 -21
  57. package/dist/collection/components/toast/toast.js +94 -20
  58. package/dist/esm/loader.js +1 -1
  59. package/dist/esm/r-alert.entry.js +24 -8
  60. package/dist/esm/r-badge.entry.js +1 -1
  61. package/dist/esm/r-button.entry.js +1 -1
  62. package/dist/esm/r-checkbox-group.entry.js +28 -14
  63. package/dist/esm/r-checkbox.entry.js +25 -10
  64. package/dist/esm/r-hint_3.entry.js +1 -1
  65. package/dist/esm/r-icon-button.entry.js +1 -1
  66. package/dist/esm/r-icon.entry.js +1 -1
  67. package/dist/esm/r-input-code.entry.js +30 -17
  68. package/dist/esm/r-input-date.entry.js +86 -16
  69. package/dist/esm/r-input-password.entry.js +25 -9
  70. package/dist/esm/r-input-phone-number.entry.js +27 -14
  71. package/dist/esm/r-input.entry.js +27 -14
  72. package/dist/esm/r-pagination.entry.js +1 -1
  73. package/dist/esm/r-popover-action.entry.js +1 -1
  74. package/dist/esm/r-popover.entry.js +1 -1
  75. package/dist/esm/r-radio-button.entry.js +1 -1
  76. package/dist/esm/r-radio-group.entry.js +21 -17
  77. package/dist/esm/r-select.entry.js +113 -19
  78. package/dist/esm/r-textarea.entry.js +19 -6
  79. package/dist/esm/r-toast.entry.js +50 -19
  80. package/dist/esm/web-components.js +1 -1
  81. package/dist/types/components/alert/alert.d.ts +3 -0
  82. package/dist/types/components/alert/exports.d.ts +1 -1
  83. package/dist/types/components/checkbox/checkbox.d.ts +5 -0
  84. package/dist/types/components/checkbox-group/checkbox-group.d.ts +6 -0
  85. package/dist/types/components/input/input.d.ts +5 -0
  86. package/dist/types/components/input-code/input-code.d.ts +5 -0
  87. package/dist/types/components/input-date/input-date.d.ts +30 -0
  88. package/dist/types/components/input-password/input-password.d.ts +5 -0
  89. package/dist/types/components/input-phone-number/input-phone-number.d.ts +5 -0
  90. package/dist/types/components/radio-group/radio-group.d.ts +1 -2
  91. package/dist/types/components/select/select.d.ts +34 -2
  92. package/dist/types/components/textarea/textarea.d.ts +5 -0
  93. package/dist/types/components/toast/toast.d.ts +10 -2
  94. package/dist/types/components.d.ts +143 -8
  95. package/dist/web-components/bundled-icons/riverty-kit.json +1 -1
  96. package/dist/web-components/p-15ac0fdd.entry.js +1 -0
  97. package/dist/web-components/p-1c956370.entry.js +1 -0
  98. package/dist/web-components/p-2a512983.entry.js +1 -0
  99. package/dist/web-components/p-2e18e762.entry.js +1 -0
  100. package/dist/web-components/{p-72c0c0d8.entry.js → p-3078b2b8.entry.js} +1 -1
  101. package/dist/web-components/p-56da04d8.entry.js +1 -0
  102. package/dist/web-components/p-5744d75c.entry.js +1 -0
  103. package/dist/web-components/p-5bbd6e3c.entry.js +1 -0
  104. package/dist/web-components/p-5e6aabd8.entry.js +1 -0
  105. package/dist/web-components/p-656229de.entry.js +1 -0
  106. package/dist/web-components/p-6a4f3836.entry.js +1 -0
  107. package/dist/web-components/p-7775228c.entry.js +1 -0
  108. package/dist/web-components/{p-29a1e75f.entry.js → p-7ad8e78b.entry.js} +1 -1
  109. package/dist/web-components/p-8563a1ab.entry.js +1 -0
  110. package/dist/web-components/p-ad9b2a48.entry.js +1 -0
  111. package/dist/web-components/{p-e49b1ec3.entry.js → p-b2f03016.entry.js} +1 -1
  112. package/dist/web-components/p-b87ad83b.entry.js +1 -0
  113. package/dist/web-components/{p-77155630.entry.js → p-b98ab649.entry.js} +1 -1
  114. package/dist/web-components/{p-f1e22caa.entry.js → p-d1379ac6.entry.js} +1 -1
  115. package/dist/web-components/p-dbe579e8.entry.js +1 -0
  116. package/dist/web-components/p-f2577a3c.entry.js +1 -0
  117. package/dist/web-components/web-components.esm.js +1 -1
  118. package/package.json +6 -6
  119. package/dist/web-components/p-1ae69897.entry.js +0 -1
  120. package/dist/web-components/p-230e44ae.entry.js +0 -1
  121. package/dist/web-components/p-44be9992.entry.js +0 -1
  122. package/dist/web-components/p-4652635a.entry.js +0 -1
  123. package/dist/web-components/p-8028c2a9.entry.js +0 -1
  124. package/dist/web-components/p-828cb164.entry.js +0 -1
  125. package/dist/web-components/p-89136369.entry.js +0 -1
  126. package/dist/web-components/p-8c577cda.entry.js +0 -1
  127. package/dist/web-components/p-96ddeb7f.entry.js +0 -1
  128. package/dist/web-components/p-9b08e9ee.entry.js +0 -1
  129. package/dist/web-components/p-9eb1f262.entry.js +0 -1
  130. package/dist/web-components/p-a58124c4.entry.js +0 -1
  131. package/dist/web-components/p-a5be3395.entry.js +0 -1
  132. package/dist/web-components/p-b2cec978.entry.js +0 -1
  133. package/dist/web-components/p-d3ff65b0.entry.js +0 -1
  134. package/dist/web-components/p-f770e22b.entry.js +0 -1
@@ -1,7 +1,7 @@
1
1
  import { r as registerInstance, c as createEvent, h, H as Host, g as getElement } from './index-Da7qOBFr.js';
2
2
  import { a as appendControlToFormData } from './formData-DvLT8-y3.js';
3
3
 
4
- const inputCodeCss = ":host{display:inline-flex;flex-direction:column;vertical-align:top;--r-label--margin-bottom:0}:host slot{display:contents}:host slot[name=trailing]{display:flex;margin-left:auto}:host([readonly]:not([readonly=false])){--r-input-code--container--background-color:var(--r-background-soft, #f3f1f0);--r-input-code--container--border-color:transparent transparent var(--r-border-soft, #686868) transparent;--r-input-code--container--cursor:text}:host(:hover:not([disabled]:not([disabled=false])):not([readonly]:not([readonly=false]))){--r-input-code--container--background-color:var(--r-background-interactive-hovered, rgba(40, 40, 40, 0.04))}:host(:focus-within:not([disabled]:not([disabled=false]))){--r-input-code--container--box-shadow:0 0 0 6px var(--r-border-focused-outlined);--r-input-code--container--outline:2px solid var(--r-border-focused);--r-input-code--container--outline-offset:2px}:host(:active:not([disabled]:not([disabled=false])):not([readonly]:not([readonly=false]))){--r-input-code--container--background-color:var(--r-background-interactive-pressed, rgba(40, 40, 40, 0.12))}:host([full-width]:not([full-width=false])){display:flex}:host([disabled]:not([disabled=false])){cursor:not-allowed;--r-input-code--container--opacity:0.4;--r-input-code--container--cursor:not-allowed;--r-input-code--container--pointer-events:none;--r-input-code--container--background-color:transparent}:host([invalid]:not([invalid=false])){--r-input-code--container--border-color:var(--r-status-error-regular, #da1e28);--r-input-code--container--background-color:var(--r-status-error-soft, #fef6f6)}.r-input-code--label-container{display:var(--r-input-code--label-container--display, flex);gap:var(--r-input-code--label-container--gap, var(--r-spacing-100, 1rem));align-items:var(--r-input-code--label-container--align-items, center);justify-content:var(--r-input-code--label-container--align-items, space-between)}.r-input-code--label-container ::slotted([slot=popover]){display:var(--r-input-code--popover--display, inline-flex);height:var(--r-input-code--popover--height, var(--r-spacing-150, 1.5));align-items:var(--r-input-code--popover--align-items, center);justify-content:var(--r-input-code--popover--justify-content, center);margin-right:var(--r-input-code--popover--margin-right, -0.25rem);--r-popover--trigger--min-width:var(--r-input-code--popover-trigger--min-width, var(--r-spacing-150, 1.5));--r-popover--trigger--min-height:var(--r-input-code--popover--trigger--min-height, var(--r-spacing-150, 1.5))}.r-input-code--container{position:var(--r-input-code--container--position, relative);display:var(--r-input-code--container--display, flex);align-items:var(--r-input-code--container--align-items, center);gap:var(--r-input-code--container--gap, 0.625em);height:var(--r-input-code--container--height, var(--r-spacing-275, 2.75rem));background-color:var(--r-input-code--container--background-color, var(--r-background-softest, #fff));border-width:var(--r-input-code--container--border-width, 1px);border-style:var(--r-input-code--container--border-style, solid);border-color:var(--r-input-code--container--border-color, var(--r-border-soft, #686868));box-sizing:var(--r-input-code--container--box-sizing, border-box);box-shadow:var(--r-input-code--container--box-shadow, none);outline:var(--r-input-code--container--outline, none);outline-offset:var(--r-input-code--container--outline-offset, 0);padding-top:var(--r-input-code--container--padding-top, 0.8em);padding-right:var(--r-input-code--container--padding-right, 0.7em);padding-bottom:var(--r-input-code--container--padding-bottom, 0.8em);padding-left:var(--r-input-code--container--padding-left, 0.7em);opacity:var(--r-input-code--container--opacity, 1);pointer-events:var(--r-input-code--container--pointer-events, auto);line-height:var(--r-input-code--container--line-height, 1);cursor:var(--r-input-code--container--cursor, inherit);margin-top:var(--r-input-code--container--margin-top, var(--r-spacing-025, 0.25rem));margin-bottom:var(--r-input-code--container--margin-bottom, var(--r-spacing-025, 0.25rem))}.r-input-code--input{width:var(--r-input-code--input--width, 0.725rem);outline:var(--r-input-code--input--outline, none);font-size:var(--r-input-code--input--font-size, 1rem);text-align:var(--r-input-code--input--text-align, center);background-color:var(--r-input-code--input--background-color, transparent);border-width:var(--r-input-code--input--border-width, 0 0 1px 0);border-style:var(--r-input-code--input--border-style, solid);border-color:var(--r-input-code--input--border-color, var(--r-text-soft))}.r-input-code--trailing{display:var(--r-input-code--trailing--display, flex);margin-left:var(--r-input-code--trailing--margin-left, auto);align-items:var(--r-input-code--trailing--align-items, center);gap:var(--r-input-code--trailing--gap, 0.625rem)}.r-input-code--readonly-icon{color:var(--r-input-code--readonly-icon--color, var(--r-icon-soft, #686868))}.visually-hidden{position:absolute;width:1px;height:1px;padding:0;margin:-1px;overflow:hidden;clip:rect(0, 0, 0, 0);border:0}";
4
+ const inputCodeCss = ":host{display:inline-flex;flex-direction:column;vertical-align:top;--r-label--margin-bottom:0}:host slot{display:contents}:host slot[name=trailing]{display:flex;margin-left:auto}:host([readonly]:not([readonly=false])){--r-input-code--container--background-color:var(--r-background-soft, #f3f1f0);--r-input-code--container--border-color:transparent transparent var(--r-border-soft, #686868) transparent;--r-input-code--container--cursor:text}:host(:hover:not([disabled]:not([disabled=false])):not([readonly]:not([readonly=false]))){--r-input-code--container--background-color:var(--r-background-interactive-hovered, rgba(40, 40, 40, 0.04))}:host(:focus-within:not([disabled]:not([disabled=false]))){--r-input-code--container--box-shadow:0 0 0 6px var(--r-border-focused-outlined);--r-input-code--container--outline:2px solid var(--r-border-focused);--r-input-code--container--outline-offset:2px}:host(:active:not([disabled]:not([disabled=false])):not([readonly]:not([readonly=false]))){--r-input-code--container--background-color:var(--r-background-interactive-pressed, rgba(40, 40, 40, 0.12))}:host([full-width]:not([full-width=false])){display:flex}:host([disabled]:not([disabled=false])){cursor:not-allowed;--r-input-code--container--opacity:0.4;--r-input-code--container--cursor:not-allowed;--r-input-code--container--pointer-events:none;--r-input-code--container--background-color:transparent}:host([invalid]:not([invalid=false])){--r-input-code--container--border-color:var(--r-status-error-regular, #b00c15);--r-input-code--container--background-color:var(--r-status-error-soft, #fef6f6)}.r-input-code--label-container{display:var(--r-input-code--label-container--display, flex);gap:var(--r-input-code--label-container--gap, var(--r-spacing-100, 1rem));align-items:var(--r-input-code--label-container--align-items, center);justify-content:var(--r-input-code--label-container--align-items, space-between)}.r-input-code--label-container ::slotted([slot=popover]){display:var(--r-input-code--popover--display, inline-flex);height:var(--r-input-code--popover--height, var(--r-spacing-150, 1.5));align-items:var(--r-input-code--popover--align-items, center);justify-content:var(--r-input-code--popover--justify-content, center);margin-right:var(--r-input-code--popover--margin-right, -0.25rem);--r-popover--trigger--min-width:var(--r-input-code--popover-trigger--min-width, var(--r-spacing-150, 1.5));--r-popover--trigger--min-height:var(--r-input-code--popover--trigger--min-height, var(--r-spacing-150, 1.5))}.r-input-code--container{position:var(--r-input-code--container--position, relative);display:var(--r-input-code--container--display, flex);align-items:var(--r-input-code--container--align-items, center);gap:var(--r-input-code--container--gap, 0.625em);height:var(--r-input-code--container--height, var(--r-spacing-275, 2.75rem));background-color:var(--r-input-code--container--background-color, var(--r-background-softest, #fff));border-width:var(--r-input-code--container--border-width, 1px);border-style:var(--r-input-code--container--border-style, solid);border-color:var(--r-input-code--container--border-color, var(--r-border-soft, #686868));box-sizing:var(--r-input-code--container--box-sizing, border-box);box-shadow:var(--r-input-code--container--box-shadow, none);outline:var(--r-input-code--container--outline, none);outline-offset:var(--r-input-code--container--outline-offset, 0);padding-top:var(--r-input-code--container--padding-top, 0.8em);padding-right:var(--r-input-code--container--padding-right, 0.7em);padding-bottom:var(--r-input-code--container--padding-bottom, 0.8em);padding-left:var(--r-input-code--container--padding-left, 0.7em);opacity:var(--r-input-code--container--opacity, 1);pointer-events:var(--r-input-code--container--pointer-events, auto);line-height:var(--r-input-code--container--line-height, 1);cursor:var(--r-input-code--container--cursor, inherit);margin-top:var(--r-input-code--container--margin-top, var(--r-spacing-025, 0.25rem));margin-bottom:var(--r-input-code--container--margin-bottom, var(--r-spacing-025, 0.25rem))}.r-input-code--input{width:var(--r-input-code--input--width, 0.725rem);outline:var(--r-input-code--input--outline, none);font-size:var(--r-input-code--input--font-size, 1rem);text-align:var(--r-input-code--input--text-align, center);background-color:var(--r-input-code--input--background-color, transparent);border-width:var(--r-input-code--input--border-width, 0 0 1px 0);border-style:var(--r-input-code--input--border-style, solid);border-color:var(--r-input-code--input--border-color, var(--r-text-soft))}.r-input-code--trailing{display:var(--r-input-code--trailing--display, flex);margin-left:var(--r-input-code--trailing--margin-left, auto);align-items:var(--r-input-code--trailing--align-items, center);gap:var(--r-input-code--trailing--gap, 0.625rem)}.r-input-code--readonly-icon{color:var(--r-input-code--readonly-icon--color, var(--r-icon-soft, #686868))}.visually-hidden{position:absolute;width:1px;height:1px;padding:0;margin:-1px;overflow:hidden;clip:rect(0, 0, 0, 0);border:0}";
5
5
 
6
6
  const InputCode = class {
7
7
  constructor(hostRef) {
@@ -105,24 +105,29 @@ const InputCode = class {
105
105
  this.uniqueId = `r-input-code-${Date.now().toString(32)}${Math.random().toString(32)}`.replace(/\./g, '');
106
106
  this.nativeElement = null;
107
107
  this.getValidityStateData = (element) => {
108
- if (element.value.length === 0) {
109
- this.validityState = 'valueMissing';
110
- this.validityMessage = this.valueMissingMessage;
111
- return;
108
+ let validityState = '';
109
+ let validityMessage = '';
110
+ if (this.required && element.value.length === 0) {
111
+ validityState = 'valueMissing';
112
+ validityMessage = this.valueMissingMessage;
113
+ return { validityState, validityMessage };
112
114
  }
113
115
  if (element.value.length > 0 && element.value.length < this.length) {
114
- this.validityState = 'tooShort';
115
- this.validityMessage = this.tooShortMessage;
116
- return;
116
+ validityState = 'tooShort';
117
+ validityMessage = this.tooShortMessage;
118
+ return { validityState, validityMessage };
117
119
  }
118
- this.validityState = 'valid';
120
+ validityState = 'valid';
121
+ return { validityState, validityMessage };
119
122
  };
120
123
  this.validateFormElement = (element) => {
121
124
  if (element === null)
122
125
  return;
123
126
  if (this.isNoValidate)
124
127
  return;
125
- this.getValidityStateData(element);
128
+ const { validityState, validityMessage } = this.getValidityStateData(element);
129
+ this.validityState = validityState;
130
+ this.validityMessage = validityMessage;
126
131
  const isValid = this.validityState === 'valid';
127
132
  this.valid = isValid;
128
133
  this.invalid = !isValid;
@@ -187,6 +192,14 @@ const InputCode = class {
187
192
  this.values = valueArray;
188
193
  this.rChange.emit({ value: this.values.join('') });
189
194
  }
195
+ /**
196
+ * Validates the input code without triggering UI and returns a boolean indicating its validity.
197
+ * @returns A boolean indicating whether the input code is valid.
198
+ */
199
+ async checkValidity() {
200
+ const { validityState } = this.getValidityStateData(this.nativeElement);
201
+ return validityState === 'valid';
202
+ }
190
203
  handleValuesChange() {
191
204
  this.value = this.values.join('');
192
205
  }
@@ -280,15 +293,15 @@ const InputCode = class {
280
293
  id: `${uniqueId}-label`,
281
294
  fieldIndicator
282
295
  } : {};
283
- return (h(Host, { key: '7c77442f0a5b39e6baca0e0a19b07e5c28388267', value: this.value, onClick: this.onHostClick }, h("div", { key: 'e9d80a3cbb3f8afcbfce17da69bbe881112307c5', class: "r-input-code--label-container" }, h("label", { key: 'dfdc795d969466e71d82492dd142773fbad93f6b', htmlFor: uniqueId }, label ?
296
+ return (h(Host, { key: '2babfeef172a7d6b76c734f3170ede3a7a8d3392', value: this.value, onClick: this.onHostClick }, h("div", { key: '712d241caa9d80f982f831633009a8452c472a3c', class: "r-input-code--label-container" }, h("label", { key: '5a6be87bb1ab122cea9e2c7cefaf2781c39a9465', htmlFor: uniqueId }, label ?
284
297
  h("r-label", Object.assign({}, labelAttr), label)
285
298
  :
286
- h("slot", { name: "label" })), h("slot", { key: 'f68f02578abd8be8fceea4bdaf1af657f07f5327', name: "popover" })), hint &&
287
- h("r-hint", { key: '784b4a072ee504c99873d8e7744c1c055cbdd52a', id: `${uniqueId}-hint`, role: "note" }, hint), h("div", { key: 'b9b458b9b18859132145848135118aacf6c43ab2', class: "r-input-code--container", role: "group", "aria-labelledby": `${uniqueId}-label`, "aria-describedby": this.groupDescribedby }, h("slot", { key: '34d0391987a526d9672ff457fbfd34c153099dbc', name: "leading" }), Array.from({ length: this.length }).map((_, i) => (h("input", { class: "r-input-code--input", key: i, id: `${uniqueId}-input-section-${i}`, "aria-label": `${this.ariaCharacterLabel || 'Character'}: ${i + 1}`, "aria-invalid": `${this.invalid || false}`, value: this.values[i], ref: el => this.inputs[i] = el, maxlength: 1, disabled: this.disabled, required: this.required, readonly: readonly, onInput: this.createInputHandler(i), onKeyDown: this.createKeyDownHandler(i), onPaste: this.handlePaste }))), h("input", Object.assign({ key: '029bcca9a6907090058ea65de36cc3aea106ad25', type: "hidden" }, inputAttrs, { value: this.values.join(''), ref: el => this.nativeElement = el })), h("div", { key: 'a91256c17340a75fe1e5a7942c9ede1089bd477c', class: "r-input-code--trailing" }, this.readonly &&
288
- h("r-icon", { key: '28df1a0823e8b6c94a26fe8dac6838d663da26b7', class: "r-input-code--readonly-icon", name: "pen-disabled", size: "s" }), this.hasTrailingSlot &&
289
- h("slot", { key: '13dee654a15b7104fbe66408ba6c0a8d4b839a2c', name: "trailing" }, valid &&
290
- h("r-icon", { key: '85f0413d86b7366229fe07af87a7bdd5368f8a22', name: "circled-check", size: "s", color: "var(--r-status-success-regular)" })))), h("slot", { key: 'cf9e23001dec5216a2c35144b9282dee25d5fe50', name: "message" }, this.hasMessage &&
291
- h("r-hint", { key: '0c642fbeef09ec9c5ce1e2a6272bb27160be05c0', "aria-live": "polite", id: `${uniqueId}-message`, variant: "error" }, this.message))));
299
+ h("slot", { name: "label" })), h("slot", { key: 'd7afacaedc1741fdf703f5263eda57dc3591b36d', name: "popover" })), hint &&
300
+ h("r-hint", { key: 'd49faa30ca4ebbefe7e88217392ef7f6a9487e7f', id: `${uniqueId}-hint`, role: "note" }, hint), h("div", { key: '89deb68a39134cdacc1009e83113c589aafc311e', class: "r-input-code--container", role: "group", "aria-labelledby": `${uniqueId}-label`, "aria-describedby": this.groupDescribedby }, h("slot", { key: '170f25027ccf4d3603474a77a92c5ff24579e46e', name: "leading" }), Array.from({ length: this.length }).map((_, i) => (h("input", { class: "r-input-code--input", key: i, id: `${uniqueId}-input-section-${i}`, "aria-label": `${this.ariaCharacterLabel || 'Character'}: ${i + 1}`, "aria-invalid": `${this.invalid || false}`, value: this.values[i], ref: el => this.inputs[i] = el, maxlength: 1, disabled: this.disabled, required: this.required, readonly: readonly, onInput: this.createInputHandler(i), onKeyDown: this.createKeyDownHandler(i), onPaste: this.handlePaste }))), h("input", Object.assign({ key: '482c544b68d48b089f7177846cee7f5fc279bbd9', type: "hidden" }, inputAttrs, { value: this.values.join(''), ref: el => this.nativeElement = el })), h("div", { key: '73f393a98b3ca5e830e7b35c360cd9e242564d8e', class: "r-input-code--trailing" }, this.readonly &&
301
+ h("r-icon", { key: '751fb71619d0d0ea808332de4cc9e1b1f2dff59d', class: "r-input-code--readonly-icon", name: "pen-disabled", size: "s" }), this.hasTrailingSlot &&
302
+ h("slot", { key: '072e2f141e1ef3fbf931e9c0abf24d6c42f64ec5', name: "trailing" }, valid &&
303
+ h("r-icon", { key: '45b17f30472b9a5cc2e2101261f7884bd96d1d72', name: "circled-check", size: "s", color: "var(--r-status-success-regular)" })))), h("slot", { key: 'b8be9bc6d2c14fa04312313709a7911d8339c735', name: "message" }, this.hasMessage &&
304
+ h("r-hint", { key: 'f76a1e5aa6d542790bdc01c7e931eda9a986a14b', "aria-live": "polite", id: `${uniqueId}-message`, variant: "error" }, this.message))));
292
305
  }
293
306
  get host() { return getElement(this); }
294
307
  static get watchers() { return {
@@ -41,7 +41,7 @@ function requireCustomParseFormat () {
41
41
  var customParseFormatExports = requireCustomParseFormat();
42
42
  var customParseFormat = /*@__PURE__*/getDefaultExportFromCjs(customParseFormatExports);
43
43
 
44
- const inputDateCss = ":host{display:inline-flex;flex-direction:column;vertical-align:top;--r-label--margin-bottom:0}:host slot{display:contents}:host([readonly]:not([readonly=false])){--r-input-date--container--background-color:var(--r-background-soft, #f3f1f0);--r-input-date--container--border-color:transparent transparent var(--r-border-soft, #686868) transparent;--r-input-date--container--cursor:text}:host(:hover:not([disabled]:not([disabled=false])):not([readonly]:not([readonly=false]))){--r-input-date--container--background-color:var(--r-background-interactive-hovered, rgba(40, 40, 40, 0.04))}:host(:active:not([disabled]:not([disabled=false])):not([readonly]:not([readonly=false]))){--r-input-date--container--background-color:var(--r-background-interactive-pressed, rgba(40, 40, 40, 0.12))}:host([full-width]:not([full-width=false])){display:flex}:host([disabled]:not([disabled=false])){cursor:not-allowed;--r-input-date--container--opacity:0.4;--r-input-date--container--cursor:not-allowed;--r-input-date--container--pointer-events:none;--r-input-date--container--background-color:transparent}:host([invalid]:not([invalid=false])){--r-input-date--container--border-color:var(--r-status-error-regular, #da1e28);--r-input-date--container--background-color:var(--r-status-error-soft, #fef6f6)}.r-input-date{padding:var(--r-input-date--padding, 0);margin:var(--r-input-date--margin, 0);border:var(--r-input-date--border, none)}.r-input-date--legend-container{display:var(--r-input-date--legend-container--display, flex);gap:var(--r-input-date--legend-container--gap, var(--r-spacing-100, 1rem));align-items:var(--r-input-date--legend-container--align-items, center);justify-content:var(--r-input-date--label-container--align-items, space-between)}.r-input-date--legend-container ::slotted([slot=popover]){display:var(--r-input-date--popover--display, inline-flex);height:var(--r-input-date--popover--height, var(--r-spacing-150, 1.5));align-items:var(--r-input-date--popover--align-items, center);justify-content:var(--r-input-date--popover--justify-content, center);margin-right:var(--r-input-date--popover--margin-right, -0.25rem);--r-popover--trigger--min-width:var(--r-input-date--popover-trigger--min-width, var(--r-spacing-150, 1.5));--r-popover--trigger--min-height:var(--r-input-date--popover--trigger--min-height, var(--r-spacing-150, 1.5))}.r-input-date--legend{padding:var(--r-input-date--label--padding, 0)}.r-input-date--container{position:var(--r-input-date--container--position, relative);display:var(--r-input-date--container--display, flex);align-items:var(--r-input-date--container--align-items, center);height:var(--r-input-date--container--height, var(--r-spacing-275, 2.75rem));font-family:var(--r-input-date--container--font-family, var(--r-font-family-text, system-ui));background-color:var(--r-input-date--container--background-color, var(--r-background-softest, #fff));border-width:var(--r-input-date--container--border-width, 1px);border-style:var(--r-input-date--container--border-style, solid);border-color:var(--r-input-date--container--border-color, var(--r-border-soft, #686868));box-sizing:var(--r-input-date--container--box-sizing, border-box);box-shadow:var(--r-input-date--container--box-shadow, none);outline:var(--r-input-date--container--outline, none);outline-offset:var(--r-input-date--container--outline-offset, 0);padding-right:var(--r-input-date--container--padding-right, 0.7em);padding-left:var(--r-input-date--container--padding-left, 0.7em);opacity:var(--r-input-date--container--opacity, 1);pointer-events:var(--r-input-date--container--pointer-events, auto);cursor:var(--r-input-date--container--cursor, inherit);margin-top:var(--r-input-date--container--margin-top, var(--r-spacing-025, 0.25rem));gap:var(--r-input-date--leading--gap, 0.625rem)}.r-input-date--container:has(input:focus-within){--r-input-date--container--box-shadow:0 0 0 6px var(--r-border-focused-outlined);--r-input-date--container--outline:2px solid var(--r-border-focused);--r-input-date--container--outline-offset:2px}.r-input-date--calendar-icon{color:var(--r-input-date--leading--color, var(--r-icon-soft, #686868))}.r-input-date--inputs{display:var(--r-input-date--inputs--display, flex);align-items:var(--r-input-date--inputs--align-items, center)}.r-input-date--input{max-width:var(--r-input-date--input--max-width, 2.625rem);field-sizing:var(--r-input-date--input--field-sizing, content);outline:var(--r-input-date--input--outline, none);height:var(--r-input-date--input--height, 100%);font-family:var(--r-input-date--input--font-family, inherit);font-size:var(--r-input-date--input--font-size, var(--r-font-size-400, 1rem));background-color:var(--r-input-date--input--background-color, transparent);border:var(--r-input-date--input--border, none);padding:var(--r-input-date--input--padding, 0)}.r-input-date--input[data-date-type=DD]{--r-input-date--input--max-width:1.5rem}.r-input-date--input[data-date-type=MM]{--r-input-date--input--max-width:1.75rem}.r-input-date--delimiter{padding-inline:var(--r-input-date--delimiter--padding-inline, var(--r-spacing-025, 0.25rem));margin-top:var(--r-input-date--delimiter--margin-top, -0.25rem);color:var(--r-input-date--delimiter--color, var(--r-border-regular, #282828));font-size:var(--r-input-date--delimiter--font-size, var(--r-spacing-150, 1.5rem));font-weight:var(--r-input-date--delimiter--font-weight, 200)}.r-input-date--message{margin-top:var(--r-input-date--message--margin-top, var(--r-spacing-025, 0.25rem))}.r-input-date--message:empty{--r-input-date--message--margin-top:0}.r-input-date--trailing{display:var(--r-input-date--trailing--display, flex);margin-left:var(--r-input-date--trailing--margin-left, auto);align-items:var(--r-input-date--trailing--align-items, center);gap:var(--r-input-date--trailing--gap, 0.625rem)}.r-input-date--readonly-icon{color:var(--r-input-date--readonly-icon--color, var(--r-icon-soft, #686868))}.visually-hidden{position:absolute;width:1px;height:1px;padding:0;margin:-1px;overflow:hidden;clip:rect(0, 0, 0, 0);border:0}";
44
+ const inputDateCss = ":host{display:inline-flex;flex-direction:column;vertical-align:top;--r-label--margin-bottom:0}:host slot{display:contents}:host([readonly]:not([readonly=false])){--r-input-date--container--background-color:var(--r-background-soft, #f3f1f0);--r-input-date--container--border-color:transparent transparent var(--r-border-soft, #686868) transparent;--r-input-date--container--cursor:text}:host(:hover:not([disabled]:not([disabled=false])):not([readonly]:not([readonly=false]))){--r-input-date--container--background-color:var(--r-background-interactive-hovered, rgba(40, 40, 40, 0.04))}:host(:active:not([disabled]:not([disabled=false])):not([readonly]:not([readonly=false]))){--r-input-date--container--background-color:var(--r-background-interactive-pressed, rgba(40, 40, 40, 0.12))}:host([full-width]:not([full-width=false])){display:flex}:host([disabled]:not([disabled=false])){cursor:not-allowed;--r-input-date--container--opacity:0.4;--r-input-date--container--cursor:not-allowed;--r-input-date--container--pointer-events:none;--r-input-date--container--background-color:transparent}:host([invalid]:not([invalid=false])){--r-input-date--container--border-color:var(--r-status-error-regular, #b00c15);--r-input-date--container--background-color:var(--r-status-error-soft, #fef6f6)}.r-input-date{padding:var(--r-input-date--padding, 0);margin:var(--r-input-date--margin, 0);border:var(--r-input-date--border, none)}.r-input-date--legend-container{display:var(--r-input-date--legend-container--display, flex);gap:var(--r-input-date--legend-container--gap, var(--r-spacing-100, 1rem));align-items:var(--r-input-date--legend-container--align-items, center);justify-content:var(--r-input-date--label-container--align-items, space-between)}.r-input-date--legend-container ::slotted([slot=popover]){display:var(--r-input-date--popover--display, inline-flex);height:var(--r-input-date--popover--height, var(--r-spacing-150, 1.5));align-items:var(--r-input-date--popover--align-items, center);justify-content:var(--r-input-date--popover--justify-content, center);margin-right:var(--r-input-date--popover--margin-right, -0.25rem);--r-popover--trigger--min-width:var(--r-input-date--popover-trigger--min-width, var(--r-spacing-150, 1.5));--r-popover--trigger--min-height:var(--r-input-date--popover--trigger--min-height, var(--r-spacing-150, 1.5))}.r-input-date--legend{padding:var(--r-input-date--label--padding, 0)}.r-input-date--container{position:var(--r-input-date--container--position, relative);display:var(--r-input-date--container--display, flex);align-items:var(--r-input-date--container--align-items, center);height:var(--r-input-date--container--height, var(--r-spacing-275, 2.75rem));font-family:var(--r-input-date--container--font-family, var(--r-font-family-text, system-ui));background-color:var(--r-input-date--container--background-color, var(--r-background-softest, #fff));border-width:var(--r-input-date--container--border-width, 1px);border-style:var(--r-input-date--container--border-style, solid);border-color:var(--r-input-date--container--border-color, var(--r-border-soft, #686868));box-sizing:var(--r-input-date--container--box-sizing, border-box);box-shadow:var(--r-input-date--container--box-shadow, none);outline:var(--r-input-date--container--outline, none);outline-offset:var(--r-input-date--container--outline-offset, 0);padding-right:var(--r-input-date--container--padding-right, 0.7em);padding-left:var(--r-input-date--container--padding-left, 0.7em);opacity:var(--r-input-date--container--opacity, 1);pointer-events:var(--r-input-date--container--pointer-events, auto);cursor:var(--r-input-date--container--cursor, inherit);margin-top:var(--r-input-date--container--margin-top, var(--r-spacing-025, 0.25rem));gap:var(--r-input-date--leading--gap, 0.625rem)}.r-input-date--container:has(input:focus-within){--r-input-date--container--box-shadow:0 0 0 6px var(--r-border-focused-outlined);--r-input-date--container--outline:2px solid var(--r-border-focused);--r-input-date--container--outline-offset:2px}.r-input-date--calendar-icon{color:var(--r-input-date--leading--color, var(--r-icon-soft, #686868))}.r-input-date--inputs{display:var(--r-input-date--inputs--display, flex);align-items:var(--r-input-date--inputs--align-items, center)}.r-input-date--input{max-width:var(--r-input-date--input--max-width, 2.625rem);field-sizing:var(--r-input-date--input--field-sizing, content);outline:var(--r-input-date--input--outline, none);height:var(--r-input-date--input--height, 100%);font-family:var(--r-input-date--input--font-family, inherit);font-size:var(--r-input-date--input--font-size, var(--r-font-size-400, 1rem));background-color:var(--r-input-date--input--background-color, transparent);border:var(--r-input-date--input--border, none);padding:var(--r-input-date--input--padding, 0)}.r-input-date--input[data-date-type=DD]{--r-input-date--input--max-width:1.5rem}.r-input-date--input[data-date-type=MM]{--r-input-date--input--max-width:1.75rem}.r-input-date--delimiter{padding-inline:var(--r-input-date--delimiter--padding-inline, var(--r-spacing-025, 0.25rem));margin-top:var(--r-input-date--delimiter--margin-top, -0.25rem);color:var(--r-input-date--delimiter--color, var(--r-border-regular, #282828));font-size:var(--r-input-date--delimiter--font-size, var(--r-spacing-150, 1.5rem));font-weight:var(--r-input-date--delimiter--font-weight, 200)}.r-input-date--message{margin-top:var(--r-input-date--message--margin-top, var(--r-spacing-025, 0.25rem))}.r-input-date--message:empty{--r-input-date--message--margin-top:0}.r-input-date--trailing{display:var(--r-input-date--trailing--display, flex);margin-left:var(--r-input-date--trailing--margin-left, auto);align-items:var(--r-input-date--trailing--align-items, center);gap:var(--r-input-date--trailing--gap, 0.625rem)}.r-input-date--readonly-icon{color:var(--r-input-date--readonly-icon--color, var(--r-icon-soft, #686868))}.visually-hidden{position:absolute;width:1px;height:1px;padding:0;margin:-1px;overflow:hidden;clip:rect(0, 0, 0, 0);border:0}";
45
45
 
46
46
  const InputDate = class {
47
47
  constructor(hostRef) {
@@ -68,6 +68,10 @@ const InputDate = class {
68
68
  this.validityState = '';
69
69
  /** Validity message passed from validateFormElement function after validation */
70
70
  this.validityMessage = '';
71
+ /** Defines if the component has been touched by user */
72
+ this.touched = false;
73
+ /** Defines if the value has been changed by user interaction */
74
+ this.dirty = false;
71
75
  /**
72
76
  * Initial attributes state
73
77
  * */
@@ -158,6 +162,7 @@ const InputDate = class {
158
162
  if (this.readonly)
159
163
  return;
160
164
  if (event.code === 'Enter') {
165
+ this.touched = true;
161
166
  this.validateFormElement(this.nativeElement);
162
167
  if (this.invalid && !this.isNoValidate)
163
168
  return;
@@ -208,6 +213,8 @@ const InputDate = class {
208
213
  if (this.readonly)
209
214
  return;
210
215
  this.value = event.clipboardData.getData('text');
216
+ this.touched = true;
217
+ this.dirty = true;
211
218
  event.preventDefault();
212
219
  };
213
220
  this.createInputHandler = (input, index) => {
@@ -225,7 +232,10 @@ const InputDate = class {
225
232
  index < this.inputOrder.length - 1) {
226
233
  (_c = this.inputs[index + 1]) === null || _c === void 0 ? void 0 : _c.focus();
227
234
  }
235
+ this.touched = true;
236
+ this.dirty = true;
228
237
  this.rInput.emit({ element: this.host, value: this.value });
238
+ this.validateFormElement(this.nativeElement);
229
239
  };
230
240
  this.createChangeHandler = (input) => {
231
241
  return (e) => this.handleChange(input, e);
@@ -238,29 +248,64 @@ const InputDate = class {
238
248
  event.target.value = value;
239
249
  this.setDateComponent(input, value);
240
250
  this.value = this.inputOrder.map((el) => this.getDateComponent(el)).join(this.delimiter);
251
+ this.touched = true;
252
+ this.dirty = true;
241
253
  this.rChange.emit({ element: this.host, value: this.value });
242
254
  this.validateFormElement(this.nativeElement);
243
255
  };
256
+ this.handleBlur = () => {
257
+ this.touched = true;
258
+ this.validateFormElement(this.nativeElement);
259
+ };
244
260
  this.getValidityStateData = (element) => {
261
+ let validityState = '';
262
+ let validityMessage = '';
245
263
  if (this.required && element.value.length === 0) {
246
- this.validityState = 'valueMissing';
247
- this.validityMessage = this.valueMissingMessage;
248
- return;
264
+ validityState = 'valueMissing';
265
+ validityMessage = this.valueMissingMessage;
266
+ return { validityState, validityMessage };
249
267
  }
250
- const valid = dayjs(this.value, this.format, true).isValid();
268
+ const valid = this.value ? dayjs(this.value, this.format, true).isValid() : true;
251
269
  if (!valid) {
252
- this.validityState = 'invalid';
253
- this.validityMessage = this.invalidDateMessage;
254
- return;
270
+ validityState = 'invalid';
271
+ validityMessage = this.invalidDateMessage;
272
+ return { validityState, validityMessage };
255
273
  }
256
- this.validityState = 'valid';
274
+ // Check min/max constraints only if date is valid and has a value
275
+ // Note: min and max are expected to be in the same format as this.format
276
+ // If format changes, the developer should update min/max accordingly
277
+ if (this.value && valid) {
278
+ const currentDate = dayjs(this.value, this.format, true);
279
+ // Check minimum date constraint
280
+ if (this.min) {
281
+ const minDate = dayjs(this.min, this.format, true);
282
+ if (minDate.isValid() && currentDate.isBefore(minDate, 'day')) {
283
+ validityState = 'rangeUnderflow';
284
+ validityMessage = this.rangeUnderflowMessage;
285
+ return { validityState, validityMessage };
286
+ }
287
+ }
288
+ // Check maximum date constraint
289
+ if (this.max) {
290
+ const maxDate = dayjs(this.max, this.format, true);
291
+ if (maxDate.isValid() && currentDate.isAfter(maxDate, 'day')) {
292
+ validityState = 'rangeOverflow';
293
+ validityMessage = this.rangeOverflowMessage;
294
+ return { validityState, validityMessage };
295
+ }
296
+ }
297
+ }
298
+ validityState = 'valid';
299
+ return { validityState, validityMessage };
257
300
  };
258
301
  this.validateFormElement = (element) => {
259
302
  if (element === null)
260
303
  return;
261
304
  if (this.isNoValidate)
262
305
  return;
263
- this.getValidityStateData(element);
306
+ const { validityState, validityMessage } = this.getValidityStateData(element);
307
+ this.validityState = validityState;
308
+ this.validityMessage = validityMessage;
264
309
  const isValid = this.validityState === 'valid';
265
310
  this.valid = isValid;
266
311
  this.invalid = !isValid;
@@ -309,6 +354,8 @@ const InputDate = class {
309
354
  }
310
355
  handleValueChange() {
311
356
  this.setCurrentValues();
357
+ if (this.touched)
358
+ this.validateFormElement(this.nativeElement);
312
359
  }
313
360
  /** Get the date value */
314
361
  async getValue() {
@@ -316,6 +363,7 @@ const InputDate = class {
316
363
  }
317
364
  /** Sets the date value */
318
365
  async setValue(value) {
366
+ this.nativeElement.value = value;
319
367
  this.value = value;
320
368
  }
321
369
  /** Gets the current date format */
@@ -326,6 +374,19 @@ const InputDate = class {
326
374
  async setFormat(format) {
327
375
  this.format = format;
328
376
  }
377
+ /** Gets the touched state (whether user has interacted with the input) */
378
+ async isTouched() {
379
+ return this.touched;
380
+ }
381
+ /** Gets the dirty state (whether value has been changed by user) */
382
+ async isDirty() {
383
+ return this.dirty;
384
+ }
385
+ /** Resets touched and dirty states to pristine (untouched/clean) */
386
+ async markAsPristine() {
387
+ this.touched = false;
388
+ this.dirty = false;
389
+ }
329
390
  /**
330
391
  * Resets the component by clearing all input values and focusing the first input.
331
392
  * @returns Promise that resolves when reset is complete
@@ -333,6 +394,7 @@ const InputDate = class {
333
394
  async reset() {
334
395
  if (this.readonly)
335
396
  return;
397
+ this.markAsPristine();
336
398
  this.validityState = null;
337
399
  this.validityMessage = null;
338
400
  this.value = this.initial['value'];
@@ -340,6 +402,14 @@ const InputDate = class {
340
402
  this.format = this.initial['format'];
341
403
  this.valid = !this.invalid;
342
404
  }
405
+ /**
406
+ * Validates the input date without triggering UI and returns a boolean indicating its validity.
407
+ * @returns A boolean indicating whether the input date is valid.
408
+ */
409
+ async checkValidity() {
410
+ const { validityState } = this.getValidityStateData(this.nativeElement);
411
+ return validityState === 'valid';
412
+ }
343
413
  get inputs() {
344
414
  return Array.from(this.host.shadowRoot.querySelectorAll('input[data-date-type]'));
345
415
  }
@@ -433,14 +503,14 @@ const InputDate = class {
433
503
  id: `${uniqueId}-label`,
434
504
  fieldIndicator
435
505
  } : {};
436
- return (h(Host, { key: '8a1395ebe9606836eeca8c63958dd2c904901cc5', onClick: this.onHostClick }, h("fieldset", Object.assign({ key: '67eda3917e37c76e22dba41a3f168f25542b3e74', class: "r-input-date" }, groupAttrs), h("div", { key: '2e1c2fc3ff538cbaeb79cea6728a0fc01a3cfafe', class: "r-input-date--legend-container" }, h("legend", { key: '0f41209fd3934af15d17a60c366ae95cb7b0ffab', class: "r-input-date--legend" }, h("label", { key: '406ee340682dc64d75aacfe33456ed3d819b1a7d', htmlFor: uniqueId }, label ?
506
+ return (h(Host, { key: '00e6bbea2dcaf1e88b4587fa9df6165a2c28c134', onClick: this.onHostClick, "data-touched": `${this.touched}`, "data-dirty": `${this.dirty}` }, h("fieldset", Object.assign({ key: '94d107ad0f00608263df3f47b0c2240d93a01c4e', class: "r-input-date" }, groupAttrs), h("div", { key: '3ac5991c7b8754f2fa94c8053f60af17a99301e0', class: "r-input-date--legend-container" }, h("legend", { key: '62fc7c2b6af2f7911c11f135432323621dd278b8', class: "r-input-date--legend" }, h("label", { key: 'd161f2b149ca1295c6e96746520c6ef1cf2e23ba', htmlFor: uniqueId }, label ?
437
507
  h("r-label", Object.assign({}, labelAttr, tooltipAttrs), label)
438
508
  :
439
- h("slot", { name: "label" }))), h("slot", { key: '825c6e93994dd54738f3168e782066787c48af5c', name: "popover" })), hint &&
440
- h("r-hint", { key: '9cee9fa8904d8fc1a1968c4a2a12caed9a708cfb', id: `${uniqueId}-hint`, role: "note" }, hint), h("div", { key: '60db93b0f58918d1ab087455fc495b093175dca4', class: "r-input-date--container" }, h("r-icon", { key: '74a495cb61d248a3d10422c6e28bde310684a7e9', name: "calendar", size: "s", class: "r-input-date--calendar-icon" }), h("div", { key: '59d28137260f613ef9f404821e6dc2b6624fb455', class: "r-input-date--inputs" }, this.inputOrder.map((input, i) => (h(Fragment, null, h("input", Object.assign({ class: "r-input-date--input" }, this.getInputAttrs(input), { key: input, value: this.getDateComponent(input), onInput: this.createInputHandler(input, i), onChange: this.createChangeHandler(input), onClick: this.onInputClick, onKeyDown: this.createKeyDownHandler(i), onPaste: this.handlePaste })), i < this.inputOrder.length - 1 &&
441
- h("span", { "aria-hidden": "true", class: "r-input-date--delimiter" }, this.delimiter)))), h("input", Object.assign({ key: '9723d0a2417bf427a5a1ff4690f8745cc40899a0', type: "hidden" }, dateInputAttrs, { value: this.value, ref: (el) => this.nativeElement = el }))), h("div", { key: '65997938c00455e81becba759dc3fdadeeecc1e4', class: "r-input-date--trailing" }, this.readonly &&
442
- h("r-icon", { key: '750df4d848ef7d0e7a6b9a7b7853a3389da44232', class: "r-input-date--readonly-icon", name: "pen-disabled", size: "s" }), valid &&
443
- h("r-icon", { key: 'b24b8ea8a53b423c0060ac6a34d75ea7ad192b94', name: "circled-check", size: "s", color: "var(--r-status-success-regular)" }), this.hasTrailingSlot && h("slot", { key: '147d79539620af0051addf49d7e237c2a3428ff4', name: "trailing" }))), h("div", { key: 'e6b2bccd8d97560940805a08f420f5fc9b165649', id: `${uniqueId}-message`, "aria-live": "polite", class: "r-input-date--message" }, this.hasMessage && h("r-hint", { key: 'd4807c998838bf7a6c748a4555901e66f2ef92d0', variant: "error" }, this.message)))));
509
+ h("slot", { name: "label" }))), h("slot", { key: '81c9e7753273c5e7d6db5d6a1f0fad8398a57c0a', name: "popover" })), hint &&
510
+ h("r-hint", { key: '0814c3ef100ed6a8512b2f15d5b59e01664bd811', id: `${uniqueId}-hint`, role: "note" }, hint), h("div", { key: '65247f18a297ef6a5751ab86e1123271ed8759f7', class: "r-input-date--container" }, h("r-icon", { key: 'fce4150b7c1b801752e1a67339b1a599728b0631', name: "calendar", size: "s", class: "r-input-date--calendar-icon" }), h("div", { key: '3b5e4776102b06acd9626477c702d2dc52ef681c', class: "r-input-date--inputs" }, this.inputOrder.map((input, i) => (h(Fragment, null, h("input", Object.assign({ class: "r-input-date--input" }, this.getInputAttrs(input), { key: input, value: this.getDateComponent(input), onInput: this.createInputHandler(input, i), onChange: this.createChangeHandler(input), onClick: this.onInputClick, onBlur: this.handleBlur, onKeyDown: this.createKeyDownHandler(i), onPaste: this.handlePaste })), i < this.inputOrder.length - 1 &&
511
+ h("span", { "aria-hidden": "true", class: "r-input-date--delimiter" }, this.delimiter)))), h("input", Object.assign({ key: '2c181871c97962a35988eb406c09a05c8f27181d', type: "hidden" }, dateInputAttrs, { value: this.value, ref: (el) => this.nativeElement = el }))), h("div", { key: '8c694c11cc7ea4ecc23484d3f014cc865e0c56ad', class: "r-input-date--trailing" }, this.readonly &&
512
+ h("r-icon", { key: '8ed65eaef19f280381b7c0fae206163f3adeb5f4', class: "r-input-date--readonly-icon", name: "pen-disabled", size: "s" }), valid &&
513
+ h("r-icon", { key: 'aef55123b4b001576b482e0be4eff0df6dc97930', name: "circled-check", size: "s", color: "var(--r-status-success-regular)" }), this.hasTrailingSlot && h("slot", { key: 'd92dcda80b7434af1f8ed781329ce8f2e6734225', name: "trailing" }))), h("div", { key: '139792ccc090b29f041e3a731f65e5916379b911', id: `${uniqueId}-message`, "aria-live": "polite", class: "r-input-date--message" }, this.hasMessage && h("r-hint", { key: '74d444c9748c032e844c0772b8758873bdaef391', variant: "error" }, this.message)))));
444
514
  }
445
515
  get host() { return getElement(this); }
446
516
  static get watchers() { return {
@@ -59,16 +59,19 @@ const InputPassword = class {
59
59
  this.rChange.emit({ element: host, value });
60
60
  };
61
61
  this.getValidityStateData = (element) => {
62
+ let validityState = '';
63
+ let validityMessage = '';
62
64
  for (const state in element.validity) {
63
65
  if (element.validity[state]) {
64
- this.validityState = state;
66
+ validityState = state;
65
67
  if (this[state + 'Message']) {
66
- this.validityMessage = this[state + 'Message'];
67
- return;
68
+ validityMessage = this[state + 'Message'];
69
+ return { validityState, validityMessage };
68
70
  }
69
- this.validityMessage = element.validationMessage;
71
+ validityMessage = element.validationMessage;
70
72
  }
71
73
  }
74
+ return { validityState, validityMessage };
72
75
  };
73
76
  this.validateFormElement = (element) => {
74
77
  if (element === null)
@@ -77,7 +80,9 @@ const InputPassword = class {
77
80
  return;
78
81
  if (this.error)
79
82
  return;
80
- this.getValidityStateData(element.shadowRoot.querySelector('input'));
83
+ const { validityState, validityMessage } = this.getValidityStateData(element.shadowRoot.querySelector('input'));
84
+ this.validityState = validityState;
85
+ this.validityMessage = validityMessage;
81
86
  const isValid = this.validityState === 'valid';
82
87
  this.valid = isValid;
83
88
  this.invalid = !isValid;
@@ -155,11 +160,22 @@ const InputPassword = class {
155
160
  }
156
161
  /** Get the input value */
157
162
  async getValue() {
158
- return this.nativeElement.getValue();
163
+ return this.value || '';
159
164
  }
160
165
  /** Set the input value */
161
166
  async setValue(value) {
162
- this.nativeElement.value = value;
167
+ if (this.readonly)
168
+ return;
169
+ this.value = value;
170
+ this.validateFormElement(this.nativeElement);
171
+ }
172
+ /**
173
+ * Validates the input password without triggering UI and returns a boolean indicating its validity.
174
+ * @returns A boolean indicating whether the input password is valid.
175
+ */
176
+ async checkValidity() {
177
+ const { validityState } = this.getValidityStateData(this.nativeElement.shadowRoot.querySelector('input'));
178
+ return validityState === 'valid';
163
179
  }
164
180
  /** Identify wrapping form element */
165
181
  get parentFormEl() {
@@ -229,8 +245,8 @@ const InputPassword = class {
229
245
  novalidate: true,
230
246
  readonly
231
247
  };
232
- return (h(Host, { key: '7ab5b4c4eb280f906cbabcc0d1ffa823d7b67bd1' }, h("r-input", Object.assign({ key: '0b71f3034611c2ed0d82b91dd8b9d98649ebd63f' }, inputAttrs, { ref: (el) => this.nativeElement = el, type: showed ? 'text' : 'password', onRInput: this.onInput, onRChange: this.onChange, onKeyUp: this.handleKeyup, onRBlur: this.handleBlur }), h("r-icon", { key: '5cf30f89fead0941ebf8f388f4380e7be82222b9', name: "padlock-closed", size: "s", slot: "leading" }), h("slot", { key: '921d8abefcef0bb71b2a518db1cba0c263b8924a', name: "popover", slot: "popover" }), h("r-icon-button", { key: '3b005036b4110685e4abf54add5bbe2571f2cf1b', slot: "trailing", name: showed ? 'eye-crossed-out' : 'eye', size: "s", disabled: disabled, label: showed ? hidePasswordAriaLabel : showPasswordAriaLabel, onClick: this.onShowClick }), this.hasMessage &&
233
- h("r-hint", { key: 'b5c7af864da0a47d81b40c1aa53f6bed20bc8349', slot: "message", variant: "error" }, this.hasError && this.error, this.hasValidationError && (this.customErrorMessage || this.validityMessage))), h("div", { key: 'f3d2f7ad5811e716eb2184aad5ff25f5a282078d', class: "visually-hidden", ref: el => this.passwordVisibilityChangeAlertContainer = el, "aria-live": "polite" })));
248
+ return (h(Host, { key: '810ae74cdcdcd8a4289255e2b99b6cfc213330ac' }, h("r-input", Object.assign({ key: '55027ca5cd8b8ba4eade60067ac182e38eaf1bfa' }, inputAttrs, { ref: (el) => this.nativeElement = el, type: showed ? 'text' : 'password', onRInput: this.onInput, onRChange: this.onChange, onKeyUp: this.handleKeyup, onRBlur: this.handleBlur }), h("r-icon", { key: '935aa481c0eff444462e6be6d8e6975db8a24708', name: "padlock-closed", size: "s", slot: "leading" }), h("slot", { key: 'df29bd4fa96db1c1f5f70be9c44fab1b9c5f02be', name: "popover", slot: "popover" }), h("r-icon-button", { key: '95d5f3c5e64eb7b43364db7aff943d35fbdc4d2d', slot: "trailing", name: showed ? 'eye-crossed-out' : 'eye', size: "s", disabled: disabled, label: showed ? hidePasswordAriaLabel : showPasswordAriaLabel, onClick: this.onShowClick }), this.hasMessage &&
249
+ h("r-hint", { key: '7390d667a69c4ae5c2c6ae480eaf5f879ad6ed78', slot: "message", variant: "error" }, this.hasError && this.error, this.hasValidationError && (this.customErrorMessage || this.validityMessage))), h("div", { key: 'c70c38f1249c80973bb2fe2a25ddf7d88835c686', class: "visually-hidden", ref: el => this.passwordVisibilityChangeAlertContainer = el, "aria-live": "polite" })));
234
250
  }
235
251
  get host() { return getElement(this); }
236
252
  };
@@ -2271,7 +2271,9 @@ const InputPhoneNumber = class {
2271
2271
  return;
2272
2272
  if (this.error)
2273
2273
  return;
2274
- this.getValidityStateData();
2274
+ const { validityState, validityMessage } = this.getValidityStateData();
2275
+ this.validityState = validityState;
2276
+ this.validityMessage = validityMessage;
2275
2277
  const isValid = this.validityState === 'valid';
2276
2278
  this.valid = isValid;
2277
2279
  this.invalid = !isValid;
@@ -2282,22 +2284,25 @@ const InputPhoneNumber = class {
2282
2284
  };
2283
2285
  this.getValidityStateData = () => {
2284
2286
  var _a, _b;
2287
+ let validityState = '';
2288
+ let validityMessage = '';
2285
2289
  if (!this.required && !((_a = this.phoneNumber) === null || _a === void 0 ? void 0 : _a.length)) {
2286
- this.validityState = 'valid';
2287
- return;
2290
+ validityState = 'valid';
2291
+ return { validityState, validityMessage };
2288
2292
  }
2289
2293
  if (!((_b = this.phoneNumber) === null || _b === void 0 ? void 0 : _b.length)) {
2290
- this.validityState = 'valueMissing';
2291
- this.validityMessage = this.valueMissingMessage;
2292
- return;
2294
+ validityState = 'valueMissing';
2295
+ validityMessage = this.valueMissingMessage;
2296
+ return { validityState, validityMessage };
2293
2297
  }
2294
2298
  const isPhoneNumberValid = this.countryCode ? this.getPhoneValidationResult(this.phoneNumber, this.countryCode).isValid : false;
2295
2299
  if (!isPhoneNumberValid) {
2296
- this.validityState = 'invalid';
2297
- this.validityMessage = this.customErrorMessage;
2298
- return;
2300
+ validityState = 'invalid';
2301
+ validityMessage = this.customErrorMessage;
2302
+ return { validityState, validityMessage };
2299
2303
  }
2300
- this.validityState = 'valid';
2304
+ validityState = 'valid';
2305
+ return { validityState, validityMessage };
2301
2306
  };
2302
2307
  this.onSubmitForm = (event) => {
2303
2308
  if (this.isNoValidate)
@@ -2339,6 +2344,14 @@ const InputPhoneNumber = class {
2339
2344
  this.customErrorMessage = message;
2340
2345
  this.validateFormElement(this.nativeElement);
2341
2346
  }
2347
+ /**
2348
+ * Validates the input phone number without triggering UI and returns a boolean indicating its validity.
2349
+ * @returns A boolean indicating whether the input phone number is valid.
2350
+ */
2351
+ async checkValidity() {
2352
+ const { validityState } = this.getValidityStateData();
2353
+ return validityState === 'valid';
2354
+ }
2342
2355
  /** Check validity and reveal validation state. */
2343
2356
  async reportValidity() {
2344
2357
  this.validateFormElement(this.nativeElement);
@@ -2496,10 +2509,10 @@ const InputPhoneNumber = class {
2496
2509
  disabled,
2497
2510
  'aria-describedby': this.ariaDescribedBy
2498
2511
  };
2499
- return (h(Host, { key: '87f5720347e3627524f95f7110088b8eddef7f8f' }, h("div", { key: '091e2048f011ff4167b35434567149de061954bd', class: "r-input-phone-number--label-container" }, h("label", { key: '80994d1cfd1b6f2228fb231f64894e660bdb1a1c', id: `${uniqueId}-label` }, label &&
2500
- h("r-label", Object.assign({ key: '36fa07371ee2c9d37645060a29f2d6f4ffe66342' }, labelAttr), label)), h("slot", { key: '76034d24a4208a46ee92185221256b9b5e87f971', name: "popover" })), hint &&
2501
- h("r-hint", { key: '574a0ec6541310640594eed29e0c301f5f9a01f7', id: `${uniqueId}-hint`, role: "note" }, hint), h("div", { key: '63f37ce77a8e247091e0e6bf55632a834e19992d', class: "r-input-phone-number", role: "group", "aria-labelledby": `${uniqueId}-label`, "aria-describedby": this.ariaDescribedBy }, h("slot", { key: '36f3e834567d3ce77b6d89ae3e835eee630675b7' }), h("r-input", { key: '2f8dc7a95823b3107d8e24f90ae53791554c19af', label: inputLabel, value: phoneNumber, internal: true, valid: valid, invalid: invalid, required: required, readonly: this.readonly, novalidate: true, fullWidth: fullWidth, type: "tel", error: this.errorMessage || '', onRInput: this.handleOnInput, onRChange: this.handleInputOnChange, disabled: disabled }, valid && phoneNumber &&
2502
- h("r-icon", { key: '4559b1d4c55e35b2ef9560554a62d4742bca875e', slot: "trailing", name: "circled-check", size: "s", color: "var(--r-status-success-regular)" }))), h("input", Object.assign({ key: 'c68a9255419c41e8b9fc02127d5f3b68cd14f40b', type: "hidden" }, inputAttrs, { readonly: this.readonly, value: fullPhoneNumber, ref: el => this.nativeElement = el })), h("r-hint", { key: '43712e3a6b916945b1a00d3c6d8ace5f7bdcc1d7', "aria-live": "polite", "aria-atomic": "true", id: `${uniqueId}-message`, class: !this.hasMessage && 'visually-hidden', variant: "error" }, this.hasMessage ? (this.hasError ? this.error : this.validityMessage) : '')));
2512
+ return (h(Host, { key: '4551070926e1974ddf3fcb8cc435570ddde50276' }, h("div", { key: 'a076fb01b4e0563ec2d30a5680a6ccd48b2f6895', class: "r-input-phone-number--label-container" }, h("label", { key: 'a8ad943efeca2ac3b5a63857ea0a52b19c32f09c', id: `${uniqueId}-label` }, label &&
2513
+ h("r-label", Object.assign({ key: 'ac0d2a1c12cb85ec03e6596b9bb2e28328026eac' }, labelAttr), label)), h("slot", { key: 'cadd98a33c32bfb60be0a3448772eac483630bdf', name: "popover" })), hint &&
2514
+ h("r-hint", { key: '23874cabee60dc0a5e620066eed92de809cac1eb', id: `${uniqueId}-hint`, role: "note" }, hint), h("div", { key: '800b3a389ce815c5e137077dd5766177c317a05d', class: "r-input-phone-number", role: "group", "aria-labelledby": `${uniqueId}-label`, "aria-describedby": this.ariaDescribedBy }, h("slot", { key: '6106007980212ef05cd11304da2a4d0cc28ddf4f' }), h("r-input", { key: 'd65b4d9ca8761c7e6dd08359ff02f3c88c57aa66', label: inputLabel, value: phoneNumber, internal: true, valid: valid, invalid: invalid, required: required, readonly: this.readonly, novalidate: true, fullWidth: fullWidth, type: "tel", error: this.errorMessage || '', onRInput: this.handleOnInput, onRChange: this.handleInputOnChange, disabled: disabled }, valid && phoneNumber &&
2515
+ h("r-icon", { key: '09c721cb014d6d7ece724bcf7de9ec5928624dac', slot: "trailing", name: "circled-check", size: "s", color: "var(--r-status-success-regular)" }))), h("input", Object.assign({ key: 'e2eef2512f9125f0dd3d1b09120cbb77955350bd', type: "hidden" }, inputAttrs, { readonly: this.readonly, value: fullPhoneNumber, ref: el => this.nativeElement = el })), h("r-hint", { key: 'a12e9640bcf2df7b754de4e54b111e4ead2d023e', "aria-live": "polite", "aria-atomic": "true", id: `${uniqueId}-message`, class: !this.hasMessage && 'visually-hidden', variant: "error" }, this.hasMessage ? (this.hasError ? this.error : this.validityMessage) : '')));
2503
2516
  }
2504
2517
  get host() { return getElement(this); }
2505
2518
  static get watchers() { return {
@@ -1,7 +1,7 @@
1
1
  import { r as registerInstance, c as createEvent, h, H as Host, g as getElement } from './index-Da7qOBFr.js';
2
2
  import { a as appendControlToFormData } from './formData-DvLT8-y3.js';
3
3
 
4
- const inputCss = ":host{display:inline-flex;flex-direction:column;vertical-align:top;--r-label--margin-bottom:0}:host slot{display:contents}:host([readonly]:not([readonly=false])){--r-input--container--background-color:var(--r-background-soft, #f3f1f0);--r-input--container--border-color:transparent transparent var(--r-border-soft, #686868) transparent;--r-input--container--cursor:text}:host(:hover:not([disabled]:not([disabled=false])):not([readonly]:not([readonly=false]))){--r-input--container--background-color:var(--r-background-interactive-hovered, rgba(40, 40, 40, 0.04))}:host(.focused){--r-input--container--box-shadow:0 0 0 6px var(--r-border-focused-outlined);--r-input--container--outline:2px solid var(--r-border-focused);--r-input--container--outline-offset:2px}:host(:active:not([disabled]:not([disabled=false])):not([readonly]:not([readonly=false]))){--r-input--container--background-color:var(--r-background-interactive-pressed, rgba(40, 40, 40, 0.12))}:host([expanded]:not([expanded=false])),:host([full-width]:not([full-width=false])){display:block}:host([disabled]:not([disabled=false])){--r-input--container--opacity:0.4;--r-input--container--cursor:not-allowed;--r-input--container--pointer-events:none;--r-input--container--background-color:transparent}:host([invalid]:not([invalid=false])){--r-input--container--border-color:var(--r-status-error-regular, #da1e28);--r-input--container--background-color:var(--r-status-error-soft, #fef6f6)}.r-input{display:var(--r-input--display, flex);flex:var(--r-input--flex, 1);flex-direction:var(--r-input--flex-direction, column);width:var(--r-input--width, auto);font-family:var(--r-input--font-family, system-ui);position:var(--r-input--position, relative);border-radius:var(--r-input--border-radius, 0);cursor:var(--r-input--cursor, inherit)}.r-input--label-container{display:var(--r-input--label-container--display, flex);gap:var(--r-input--label-container--gap, var(--r-spacing-100, 1rem));align-items:var(--r-input--label-container--align-items, center);justify-content:var(--r-input--label-container--align-items, space-between)}.r-input--label-container ::slotted([slot=popover]){display:var(--r-input--popover--display, inline-flex);height:var(--r-input--popover--height, var(--r-spacing-150, 1.5));align-items:var(--r-input--popover--align-items, center);justify-content:var(--r-input--popover--justify-content, center);margin-right:var(--r-input--popover--margin-right, -0.25rem);--r-popover--trigger--min-width:var(--r-input--popover-trigger--min-width, var(--r-spacing-150, 1.5));--r-popover--trigger--min-height:var(--r-input--popover--trigger--min-height, var(--r-spacing-150, 1.5))}.r-input--label{cursor:var(--r-input--label--cursor, inherit)}.r-input--input{font-family:var(--r-input--input--font-family, system-ui);font-size:var(--r-input--input--font-size, 1em);width:var(--r-input--input--width, 100%);max-width:var(--r-input--input--max-width, 100%);height:var(--r-input--input--height, var(--r-spacing-275, 2.75rem));border-radius:var(--r-input--input--border-radius, 0);border:var(--r-input--input--border, none);color:var(--r-input--input--color, var(--r-text-regular, #282828));background-color:var(--r-input--input--background-color, none);appearance:var(--r-input--input--appearance, none);box-sizing:var(--r-input--input--box-sizing, border-box);outline:var(--r-input--input--outline, none);cursor:var(--r-input--input--cursor, inherit);pointer-events:var(--r-input--input--pointer-events, auto)}.r-input--input:autofill,.r-input--input:-webkit-autofill{-webkit-background-clip:text !important}.r-input--input::-ms-reveal{display:var(--r-input--input--ms-reveal--display, none)}.r-input--input::placeholder{color:var(--r-input--input--placeholder--color, var(--r-text-soft, #686868))}.r-input--input[type=search]::-webkit-search-cancel-button{cursor:var(--r-input--input-clear--cursor, pointer);display:var(--r-input--input-clear--display, block);height:var(--r-input--input-clear--height, 0.875rem);width:var(--r-input--input-clear--width, 0.875rem);appearance:var(--r-input--input-clear--appearance, none);background-repeat:var(--r-input--input-clear--background-repeat, no-repeat);background-image:var(--r-input--input-clear--background-image, url(\"data:image/svg+xml,%3Csvg%20xmlns%3D%22http%3A%2F%2Fwww.w3.org%2F2000%2Fsvg%22%20fill%3D%22none%22%20stroke-width%3D%221.5%22%20viewBox%3D%220.75%200.75%2022.5%2022.5%22%3E%3Cpath%20id%3D%22Vector%202269%22%20stroke%3D%22currentColor%22%20d%3D%22M1.5%201.5L22.5%2022.5%22%2F%3E%3Cpath%20id%3D%22Vector%202270%22%20stroke%3D%22currentColor%22%20d%3D%22M22.5%201.5L1.5%2022.5%22%2F%3E%3C%2Fsvg%3E\"));background-size:var(--r-input--input-clear--background-size, contain);margin-inline:var(--r-input--input-clear--margin-inline, 0);color:currentColor}.r-input--button{position:var(--r-input--icon-button--position, absolute);width:var(--r-input--icon-button--width, calc(1.125em + var(--r-input--icon--width)));height:var(--r-input--icon-button--height, 100%);top:var(--r-input--icon-button--top, 0);right:var(--r-input--icon-button--right, auto);bottom:var(--r-input--icon-button--bottom, auto);left:var(--r-input--icon-button--left, 0);cursor:var(--r-input--icon-button--cursor, inherit)}.r-input--container{position:var(--r-input--container--position, relative);display:var(--r-input--container--display, flex);align-items:var(--r-input--container--align-items, center);gap:var(--r-input--container--gap, 0.625rem);height:var(--r-input--container--height, var(--r-spacing-275, 2.75rem));background-color:var(--r-input--container--background-color, var(--r-background-softest, #fff));border-width:var(--r-input--container--border-width, 1px);border-style:var(--r-input--container--border-style, solid);border-color:var(--r-input--container--border-color, var(--r-border-soft, #686868));box-sizing:var(--r-input--container--box-sizing, border-box);box-shadow:var(--r-input--container--box-shadow, none);outline:var(--r-input--container--outline, none);outline-offset:var(--r-input--container--outline-offset, 0);padding-top:var(--r-input--container--padding-top, 0.6875rem);padding-right:var(--r-input--container--padding-right, var(--r-spacing-075, 0.75rem));padding-bottom:var(--r-input--container--padding-bottom, 0.6875rem);padding-left:var(--r-input--container--padding-left, var(--r-spacing-0275, 0.75rem));opacity:var(--r-input--container--opacity, 1);pointer-events:var(--r-input--container--pointer-events, auto);line-height:var(--r-input--container--line-height, 1);cursor:var(--r-input--container--cursor, inherit);margin-top:var(--r-input--container--margin-top, var(--r-spacing-025, 0.25rem))}.r-input--container slot[name=leading]{color:var(--r-input--container-leading--color, var(--r-icon-soft, #686868))}.r-input--message:has(r-hint),.r-input--message ::slotted([slot=message]){margin-top:var(--r-input--message--margin-top, var(--r-spacing-025, 0.25rem))}.r-input--trailing{display:var(--r-input--trailing--display, flex);margin-left:var(--r-input--trailing--margin-left, auto);align-items:var(--r-input--trailing--align-items, center);gap:var(--r-input--trailing--gap, 0.625rem)}.r-input--readonly-icon{color:var(--r-input--readonly-icon--color, var(--r-icon-soft, #686868))}.visually-hidden{position:absolute;width:1px;height:1px;padding:0;margin:-1px;overflow:hidden;clip:rect(0, 0, 0, 0);border:0}";
4
+ const inputCss = ":host{display:inline-flex;flex-direction:column;vertical-align:top;--r-label--margin-bottom:0}:host slot{display:contents}:host([readonly]:not([readonly=false])){--r-input--container--background-color:var(--r-background-soft, #f3f1f0);--r-input--container--border-color:transparent transparent var(--r-border-soft, #686868) transparent;--r-input--container--cursor:text}:host(:hover:not([disabled]:not([disabled=false])):not([readonly]:not([readonly=false]))){--r-input--container--background-color:var(--r-background-interactive-hovered, rgba(40, 40, 40, 0.04))}:host(.focused){--r-input--container--box-shadow:0 0 0 6px var(--r-border-focused-outlined);--r-input--container--outline:2px solid var(--r-border-focused);--r-input--container--outline-offset:2px}:host(:active:not([disabled]:not([disabled=false])):not([readonly]:not([readonly=false]))){--r-input--container--background-color:var(--r-background-interactive-pressed, rgba(40, 40, 40, 0.12))}:host([expanded]:not([expanded=false])),:host([full-width]:not([full-width=false])){display:block}:host([disabled]:not([disabled=false])){--r-input--container--opacity:0.4;--r-input--container--cursor:not-allowed;--r-input--container--pointer-events:none;--r-input--container--background-color:transparent}:host([invalid]:not([invalid=false])){--r-input--container--border-color:var(--r-status-error-regular, #b00c15);--r-input--container--background-color:var(--r-status-error-soft, #fef6f6)}.r-input{display:var(--r-input--display, flex);flex:var(--r-input--flex, 1);flex-direction:var(--r-input--flex-direction, column);width:var(--r-input--width, auto);font-family:var(--r-input--font-family, system-ui);position:var(--r-input--position, relative);border-radius:var(--r-input--border-radius, 0);cursor:var(--r-input--cursor, inherit)}.r-input--label-container{display:var(--r-input--label-container--display, flex);gap:var(--r-input--label-container--gap, var(--r-spacing-100, 1rem));align-items:var(--r-input--label-container--align-items, center);justify-content:var(--r-input--label-container--align-items, space-between)}.r-input--label-container ::slotted([slot=popover]){display:var(--r-input--popover--display, inline-flex);height:var(--r-input--popover--height, var(--r-spacing-150, 1.5));align-items:var(--r-input--popover--align-items, center);justify-content:var(--r-input--popover--justify-content, center);margin-right:var(--r-input--popover--margin-right, -0.25rem);--r-popover--trigger--min-width:var(--r-input--popover-trigger--min-width, var(--r-spacing-150, 1.5));--r-popover--trigger--min-height:var(--r-input--popover--trigger--min-height, var(--r-spacing-150, 1.5))}.r-input--label{cursor:var(--r-input--label--cursor, inherit)}.r-input--input{font-family:var(--r-input--input--font-family, system-ui);font-size:var(--r-input--input--font-size, 1em);width:var(--r-input--input--width, 100%);max-width:var(--r-input--input--max-width, 100%);height:var(--r-input--input--height, var(--r-spacing-275, 2.75rem));border-radius:var(--r-input--input--border-radius, 0);border:var(--r-input--input--border, none);color:var(--r-input--input--color, var(--r-text-regular, #282828));background-color:var(--r-input--input--background-color, none);appearance:var(--r-input--input--appearance, none);box-sizing:var(--r-input--input--box-sizing, border-box);outline:var(--r-input--input--outline, none);cursor:var(--r-input--input--cursor, inherit);pointer-events:var(--r-input--input--pointer-events, auto)}.r-input--input:autofill,.r-input--input:-webkit-autofill{-webkit-background-clip:text !important}.r-input--input::-ms-reveal{display:var(--r-input--input--ms-reveal--display, none)}.r-input--input::placeholder{color:var(--r-input--input--placeholder--color, var(--r-text-soft, #686868))}.r-input--input[type=search]::-webkit-search-cancel-button{cursor:var(--r-input--input-clear--cursor, pointer);display:var(--r-input--input-clear--display, block);height:var(--r-input--input-clear--height, 0.875rem);width:var(--r-input--input-clear--width, 0.875rem);appearance:var(--r-input--input-clear--appearance, none);background-repeat:var(--r-input--input-clear--background-repeat, no-repeat);background-image:var(--r-input--input-clear--background-image, url(\"data:image/svg+xml,%3Csvg%20xmlns%3D%22http%3A%2F%2Fwww.w3.org%2F2000%2Fsvg%22%20fill%3D%22none%22%20stroke-width%3D%221.5%22%20viewBox%3D%220.75%200.75%2022.5%2022.5%22%3E%3Cpath%20id%3D%22Vector%202269%22%20stroke%3D%22currentColor%22%20d%3D%22M1.5%201.5L22.5%2022.5%22%2F%3E%3Cpath%20id%3D%22Vector%202270%22%20stroke%3D%22currentColor%22%20d%3D%22M22.5%201.5L1.5%2022.5%22%2F%3E%3C%2Fsvg%3E\"));background-size:var(--r-input--input-clear--background-size, contain);margin-inline:var(--r-input--input-clear--margin-inline, 0);color:currentColor}.r-input--button{position:var(--r-input--icon-button--position, absolute);width:var(--r-input--icon-button--width, calc(1.125em + var(--r-input--icon--width)));height:var(--r-input--icon-button--height, 100%);top:var(--r-input--icon-button--top, 0);right:var(--r-input--icon-button--right, auto);bottom:var(--r-input--icon-button--bottom, auto);left:var(--r-input--icon-button--left, 0);cursor:var(--r-input--icon-button--cursor, inherit)}.r-input--container{position:var(--r-input--container--position, relative);display:var(--r-input--container--display, flex);align-items:var(--r-input--container--align-items, center);gap:var(--r-input--container--gap, 0.625rem);height:var(--r-input--container--height, var(--r-spacing-275, 2.75rem));background-color:var(--r-input--container--background-color, var(--r-background-softest, #fff));border-width:var(--r-input--container--border-width, 1px);border-style:var(--r-input--container--border-style, solid);border-color:var(--r-input--container--border-color, var(--r-border-soft, #686868));box-sizing:var(--r-input--container--box-sizing, border-box);box-shadow:var(--r-input--container--box-shadow, none);outline:var(--r-input--container--outline, none);outline-offset:var(--r-input--container--outline-offset, 0);padding-top:var(--r-input--container--padding-top, 0.6875rem);padding-right:var(--r-input--container--padding-right, var(--r-spacing-075, 0.75rem));padding-bottom:var(--r-input--container--padding-bottom, 0.6875rem);padding-left:var(--r-input--container--padding-left, var(--r-spacing-0275, 0.75rem));opacity:var(--r-input--container--opacity, 1);pointer-events:var(--r-input--container--pointer-events, auto);line-height:var(--r-input--container--line-height, 1);cursor:var(--r-input--container--cursor, inherit);margin-top:var(--r-input--container--margin-top, var(--r-spacing-025, 0.25rem))}.r-input--container slot[name=leading]{color:var(--r-input--container-leading--color, var(--r-icon-soft, #686868))}.r-input--message:has(r-hint),.r-input--message ::slotted([slot=message]){margin-top:var(--r-input--message--margin-top, var(--r-spacing-025, 0.25rem))}.r-input--trailing{display:var(--r-input--trailing--display, flex);margin-left:var(--r-input--trailing--margin-left, auto);align-items:var(--r-input--trailing--align-items, center);gap:var(--r-input--trailing--gap, 0.625rem)}.r-input--readonly-icon{color:var(--r-input--readonly-icon--color, var(--r-icon-soft, #686868))}.visually-hidden{position:absolute;width:1px;height:1px;padding:0;margin:-1px;overflow:hidden;clip:rect(0, 0, 0, 0);border:0}";
5
5
 
6
6
  const RInput = class {
7
7
  constructor(hostRef) {
@@ -48,16 +48,25 @@ const RInput = class {
48
48
  * */
49
49
  this.initial = {};
50
50
  this.getValidityStateData = (element) => {
51
+ let validityState = '';
52
+ let validityMessage = '';
53
+ if (this.type === 'email' && this.pattern) {
54
+ element.setCustomValidity('');
55
+ validityState = this.validEmailPattern ? 'valid' : 'patternMismatch';
56
+ validityMessage = this.validEmailPattern ? '' : this.patternMismatchMessage;
57
+ return { validityState, validityMessage };
58
+ }
51
59
  for (const state in element.validity) {
52
60
  if (element.validity[state]) {
53
- this.validityState = state;
61
+ validityState = state;
54
62
  if (this[state + 'Message']) {
55
- this.validityMessage = this[state + 'Message'];
56
- return;
63
+ validityMessage = this[state + 'Message'];
64
+ return { validityState, validityMessage };
57
65
  }
58
- this.validityMessage = element.validationMessage;
66
+ validityMessage = element.validationMessage;
59
67
  }
60
68
  }
69
+ return { validityState, validityMessage };
61
70
  };
62
71
  this.validateFormElement = (element) => {
63
72
  if (element === null)
@@ -66,13 +75,9 @@ const RInput = class {
66
75
  return;
67
76
  if (this.error)
68
77
  return;
69
- if (this.type === 'email' && this.pattern) {
70
- element.setCustomValidity('');
71
- this.validityState = this.validEmailPattern ? 'valid' : 'patternMismatch';
72
- this.validityMessage = this.validEmailPattern ? '' : this.patternMismatchMessage;
73
- }
74
- else
75
- this.getValidityStateData(element);
78
+ const { validityState, validityMessage } = this.getValidityStateData(element);
79
+ this.validityState = validityState;
80
+ this.validityMessage = validityMessage;
76
81
  const isValid = this.validityState === 'valid';
77
82
  this.valid = isValid;
78
83
  this.invalid = !isValid;
@@ -92,6 +97,8 @@ const RInput = class {
92
97
  if (this.readonly)
93
98
  return;
94
99
  this.value = event.target.value;
100
+ const { host, value } = this;
101
+ this.rChange.emit({ element: host, value });
95
102
  };
96
103
  this.onBlur = () => {
97
104
  this.host.classList.remove('focused');
@@ -205,6 +212,14 @@ const RInput = class {
205
212
  this.nativeElement.value = value;
206
213
  this.validateFormElement(this.nativeElement);
207
214
  }
215
+ /**
216
+ * Validates the input without triggering UI and returns a boolean indicating its validity.
217
+ * @returns A boolean indicating whether the input is valid.
218
+ */
219
+ async checkValidity() {
220
+ const { validityState } = this.getValidityStateData(this.nativeElement);
221
+ return validityState === 'valid';
222
+ }
208
223
  /** Identify wrapping form element */
209
224
  get parentFormEl() {
210
225
  return this.host.closest('form') || document.querySelector(`#${this.form}`) || null;
@@ -269,8 +284,6 @@ const RInput = class {
269
284
  }
270
285
  handleValueChange() {
271
286
  this.validateFormElement(this.nativeElement);
272
- const { host, value } = this;
273
- this.rChange.emit({ element: host, value });
274
287
  }
275
288
  render() {
276
289
  const { name, placeholder, required, fieldIndicator, maxlength, minlength, min, max, value, disabled, form, pattern, invalid, valid, validMarker, hint, label, internal, tooltip, tooltipIcon, tooltipIconColor, uniqueId, autocomplete, readonly, autofocus } = this;