@nuralyui/input 0.0.14 → 0.0.15

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 (2) hide show
  1. package/bundle.js +956 -7
  2. package/package.json +1 -1
package/bundle.js CHANGED
@@ -1,15 +1,909 @@
1
- import{css as t,html as r,nothing as i,LitElement as n}from"lit";import{property as a,state as e,customElement as o}from"lit/decorators.js";import{NuralyUIBaseMixin as s}from"@nuralyui/common/mixins";const l=[t`:host{display:flex;flex-direction:column;font-family:var(--nuraly-font-family-input, 'IBM Plex Sans', ui-sans-serif, system-ui)}.input-wrapper{background-color:var(--nuraly-color-input-background,var(--nuraly-color-input-background-fallback,#fff))}#input-container>input{background-color:transparent;border:var(--nuraly-input-border,none);outline:var(--nuraly-input-outline,none);flex:1;min-width:0;width:100%;font-family:var(--nuraly-font-family-input, -apple-system, BlinkMacSystemFont, 'Segoe UI', Roboto);font-size:var(--nuraly-font-size-input,14px);color:var(--nuraly-color-input-text,var(--nuraly-color-input-text-fallback,rgba(0,0,0,.88)));padding:var(--nuraly-spacing-input-medium-vertical,4px) var(--nuraly-spacing-input-medium-horizontal,11px)}:host([disabled]) .input-wrapper{background-color:var(--nuraly-color-input-disabled-background,var(--nuraly-color-input-disabled-background-fallback,#f4f4f4))}:host([disabled]) #input-container>input{background-color:transparent;cursor:var(--nuraly-cursor-disabled,not-allowed);color:var(--nuraly-color-input-disabled-text,var(--nuraly-color-input-disabled-text-fallback,rgba(0,0,0,.25)))}nr-icon{display:flex;align-items:center;--nuraly-color-icon:var(--nuraly-color-input-icon, var(--nuraly-color-icon, var(--nuraly-color-icon-fallback, #161616)));--nuraly-icon-size:var(--nuraly-size-input-icon, var(--nuraly-icon-size, var(--nuraly-icon-size-fallback, 18px)));--nuraly-color-icon-hover:var(--nuraly-color-input-icon-hover, var(--nuraly-color-icon-hover, var(--nuraly-color-icon-hover-fallback, #0f62fe)));--nuraly-color-icon-active:var(--nuraly-color-input-icon-active, var(--nuraly-color-icon-active, var(--nuraly-color-icon-active-fallback, #054ada)));--nuraly-color-icon-disabled:var(--nuraly-color-input-icon-disabled, var(--nuraly-color-icon-disabled, var(--nuraly-color-icon-disabled-fallback, #c6c6c6)))}::placeholder{color:var(--nuraly-color-input-placeholder,var(--nuraly-color-input-placeholder-fallback,#a8a8a8));font-size:var(--nuraly-font-size-input-placeholder,14px);font-family:var(--nuraly-font-family-input, 'IBM Plex Sans', ui-sans-serif, system-ui)}:host([disabled]) ::placeholder{color:var(--nuraly-color-input-disabled-placeholder,var(--nuraly-color-input-disabled-placeholder-fallback,#c6c6c6))}#warning-icon{--nuraly-color-icon:var(--nuraly-color-input-warning-icon, #f1c21b)}#error-icon{--nuraly-color-icon:var(--nuraly-color-input-error-icon, #da1e28)}#calendar-icon{--nuraly-color-icon:var(--nuraly-color-input-calendar-icon, #161616)}#password-icon{padding-left:var(--nuraly-input-password-icon-padding-left,var(--nuraly-password-icon-padding-left,8px));padding-right:var(--nuraly-input-password-icon-padding-right,var(--nuraly-password-icon-padding-right,8px));cursor:var(--nuraly-cursor-interactive,pointer);--nuraly-color-icon:var(--nuraly-color-input-password-icon, #161616)}#copy-icon{padding-right:var(--nuraly-input-copy-icon-padding-right,var(--nuraly-copy-icon-padding-right,8px));--nuraly-color-icon:var(--nuraly-color-input-copy-icon, #161616);cursor:var(--nuraly-cursor-interactive,pointer)}#clear-icon{padding-right:var(--nuraly-input-clear-icon-padding-right,var(--nuraly-clear-icon-padding-right,8px));--nuraly-color-icon:var(--nuraly-color-input-clear-icon, #161616);cursor:var(--nuraly-cursor-interactive,pointer)}#number-icons{display:flex;justify-content:space-between;align-items:center;cursor:var(--nuraly-cursor-interactive,pointer);position:absolute;right:0;top:0;height:100%;width:var(--nuraly-input-number-icons-container-width,var(--nuraly-number-icons-container-width,50px));padding-right:var(--nuraly-input-number-icons-container-padding-right,var(--nuraly-number-icons-container-padding-right,8px))}#number-icons nr-icon{--nuraly-color-icon:var(--nuraly-color-input-number-icons, #161616);padding-left:var(--nuraly-input-number-icons-padding-left,var(--nuraly-number-icons-padding-left,4px));padding-right:var(--nuraly-input-number-icons-padding-right,var(--nuraly-number-icons-padding-right,4px));width:var(--nuraly-input-number-icons-width,var(--nuraly-number-icons-width,24px));height:var(--nuraly-input-number-icons-height,var(--nuraly-number-icons-height,24px))}#icons-separator{color:var(--nuraly-input-number-icons-separator-color,var(--nuraly-number-icons-separator-color));padding-bottom:var(--nuraly-input-number-icons-separator-padding-bottom,var(--nuraly-number-icons-separator-padding-bottom));padding-left:var(--nuraly-input-number-icons-separator-padding-left,var(--nuraly-number-icons-separator-padding-left));padding-right:var(--nuraly-input-number-icons-separator-padding-right,var(--nuraly-number-icons-separator-padding-right))}:host([disabled]) #calendar-icon,:host([disabled]) #clear-icon,:host([disabled]) #copy-icon,:host([disabled]) #error-icon,:host([disabled]) #number-icons,:host([disabled]) #password-icon,:host([disabled]) #warning-icon{opacity:var(--nuraly-input-disabled-icon-opacity,var(--nuraly-disabled-icon-opacity))}:host([disabled]) #clear-icon,:host([disabled]) #copy-icon,:host([disabled]) #number-icons,:host([disabled]) #password-icon{cursor:not-allowed}.input-wrapper{display:flex;align-items:stretch;width:100%}.input-addon-before{background-color:var(--nuraly-input-addon-background-color,var(--nuraly-addon-background-color));border:var(--nuraly-input-border,var(--nuraly-border));border-right:none;border-top-left-radius:var(--nuraly-input-border-radius,var(--nuraly-border-radius));border-bottom-left-radius:var(--nuraly-input-border-radius,var(--nuraly-border-radius));padding:var(--nuraly-input-addon-padding,var(--nuraly-addon-padding));display:flex;align-items:center;color:var(--nuraly-input-addon-color,var(--nuraly-addon-color));font-size:var(--nuraly-input-font-size,var(--nuraly-font-size));white-space:nowrap;min-width:0;flex-shrink:0}.input-addon-after{background-color:var(--nuraly-input-addon-background-color,var(--nuraly-addon-background-color));border:var(--nuraly-input-border,var(--nuraly-border));border-left:none;border-top-right-radius:var(--nuraly-input-border-radius,var(--nuraly-border-radius));border-bottom-right-radius:var(--nuraly-input-border-radius,var(--nuraly-border-radius));padding:var(--nuraly-input-addon-padding,var(--nuraly-addon-padding));display:flex;align-items:center;color:var(--nuraly-input-addon-color,var(--nuraly-addon-color));font-size:var(--nuraly-input-font-size,var(--nuraly-font-size));white-space:nowrap;min-width:0;flex-shrink:0}.input-wrapper:has(.input-addon-before) #input-container{border-top-left-radius:0;border-bottom-left-radius:0;border-left:none}.input-wrapper:has(.input-addon-after) #input-container{border-top-right-radius:0;border-bottom-right-radius:0;border-right:none}#input-container{border:var(--nuraly-border-width-input,1px) solid var(--nuraly-color-input-border,#d9d9d9);border-radius:var(--nuraly-border-radius-input,6px);background-color:var(--nuraly-color-input-background,#fff);color:var(--nuraly-color-input-text,rgba(0,0,0,.88));font-family:var(--nuraly-font-family-input, -apple-system, BlinkMacSystemFont, 'Segoe UI', Roboto);font-size:var(--nuraly-font-size-input,14px);display:flex;position:relative;flex:1;min-width:0;transition:var(--nuraly-transition-input,border-color .2s,box-shadow .2s)}.input-wrapper[data-theme^=carbon] #input-container,[data-theme^=carbon] nr-input #input-container,body[data-theme^=carbon] nr-input #input-container,html[data-theme^=carbon] nr-input #input-container{border:var(--nuraly-border-width-input,1px) solid var(--nuraly-color-input-border,transparent)!important;border-bottom:var(--nuraly-border-width-input,2px) solid var(--nuraly-color-input-border-bottom,#8d8d8d)!important;border-radius:var(--nuraly-border-radius-input,0)!important;background-color:var(--nuraly-color-input-background,#f4f4f4)!important;color:var(--nuraly-color-input-text,#161616)!important}.input-wrapper[data-theme^=default] #input-container,[data-theme^=default] nr-input #input-container,body[data-theme^=default] nr-input #input-container,html[data-theme^=default] nr-input #input-container{border:var(--nuraly-border-width-input,1px) solid var(--nuraly-color-input-border,#d9d9d9)!important;border-radius:var(--nuraly-border-radius-input,6px)!important;background-color:var(--nuraly-color-input-background,#fff)!important;color:var(--nuraly-color-input-text,rgba(0,0,0,.88))!important}.input-wrapper[data-theme^=carbon] #input-container>input,[data-theme^=carbon] nr-input #input-container>input,body[data-theme^=carbon] nr-input #input-container>input,html[data-theme^=carbon] nr-input #input-container>input{padding:7px 16px!important}.input-wrapper[data-theme^=default] #input-container>input,[data-theme^=default] nr-input #input-container>input,body[data-theme^=default] nr-input #input-container>input,html[data-theme^=default] nr-input #input-container>input{padding:var(--nuraly-spacing-input-medium-vertical,4px) var(--nuraly-spacing-input-medium-horizontal,11px)!important}#input-container:focus-within{border-color:var(--nuraly-color-input-border-focus,#1890ff);box-shadow:var(--nuraly-shadow-input-focus,0 0 0 2px rgba(24,144,255,.2));outline:0}.input-wrapper[data-theme^=carbon] #input-container:focus-within,[data-theme^=carbon] nr-input #input-container:focus-within,body[data-theme^=carbon] nr-input #input-container:focus-within,html[data-theme^=carbon] nr-input #input-container:focus-within{border:var(--nuraly-border-width-input,2px) solid var(--nuraly-color-input-border-focus,#0f62fe)!important;border-radius:var(--nuraly-border-radius-input,0)!important;box-shadow:var(--nuraly-shadow-input-focus,none)!important;outline:0!important}.input-wrapper[data-theme^=default] #input-container:focus-within,[data-theme^=default] nr-input #input-container:focus-within,body[data-theme^=default] nr-input #input-container:focus-within,html[data-theme^=default] nr-input #input-container:focus-within{border-color:var(--nuraly-color-input-border-focus,#1890ff)!important;border-radius:var(--nuraly-border-radius-input,6px)!important;box-shadow:var(--nuraly-shadow-input-focus,0 0 0 2px rgba(24,144,255,.2))!important;outline:0!important}:host([disabled]) #input-container{background-color:var(--nuraly-color-input-disabled-background,#f5f5f5);border-color:var(--nuraly-color-input-disabled-border,#d9d9d9);color:var(--nuraly-color-input-disabled-text,rgba(0,0,0,.25));cursor:not-allowed}:host([variant=outlined]) #input-container{border:var(--nuraly-input-outlined-border,var(--nuraly-outlined-border));border-radius:var(--nuraly-input-outlined-border-radius,var(--nuraly-outlined-border-radius));background-color:var(--nuraly-input-outlined-background,var(--nuraly-outlined-background))}:host([variant=outlined]) .input-wrapper{background-color:transparent}:host([variant=outlined]:not([state=error])) #input-container:focus-within{border:var(--nuraly-input-outlined-focus-border,var(--nuraly-outlined-focus-border))}:host([variant=filled]) #input-container{background-color:var(--nuraly-input-filled-background,var(--nuraly-filled-background));border-radius:var(--nuraly-input-filled-border-radius,var(--nuraly-filled-border-radius));border-bottom:var(--nuraly-input-filled-border-bottom,var(--nuraly-filled-border-bottom));border-top:none;border-left:none;border-right:none}:host([variant=filled]) .input-wrapper{background-color:transparent}:host([variant=filled]:not([state=error])) #input-container:focus-within{border-bottom:var(--nuraly-input-filled-focus-border-bottom,var(--nuraly-filled-focus-border-bottom));border-top:none;border-left:none;border-right:none}:host([variant=borderless]) #input-container{background-color:var(--nuraly-input-borderless-background,var(--nuraly-borderless-background));border:none;border-radius:var(--nuraly-input-borderless-border-radius,var(--nuraly-borderless-border-radius))}:host([variant=borderless]) .input-wrapper{background-color:transparent}:host([variant=borderless]:not([state=error])) #input-container:focus-within{outline:var(--nuraly-input-borderless-focus-outline,var(--nuraly-borderless-focus-outline));border:none}:host([variant=underlined]) #input-container{border-bottom:var(--nuraly-input-underlined-border-bottom,var(--nuraly-underlined-border-bottom));border-top:none;border-left:none;border-right:none;border-radius:0}:host([variant=underlined]:not([state=error])) #input-container:focus-within{border-bottom:var(--nuraly-input-underlined-focus-border-bottom,var(--nuraly-underlined-focus-border-bottom));border-top:none;border-left:none;border-right:none}input{width:100%;border:none;outline:0;color:var(--nuraly-input-text-color,var(--nuraly-text-color));font-family:var(--nuraly-input-font-family,var(--nuraly-font-family));font-size:var(--nuraly-input-font-size,var(--nuraly-font-size))}input::-webkit-inner-spin-button,input::-webkit-outer-spin-button{-webkit-appearance:none}input[type=number]{-moz-appearance:textfield}:host(:not([disabled])[state=error]) #input-container{border:var(--nuraly-input-error-border,var(--nuraly-error-border))!important;outline:0!important}:host([variant=borderless][state=error]) #input-container{border:var(--nuraly-input-error-border,var(--nuraly-error-border))!important;outline:0!important}:host([variant=filled][state=error]) #input-container,:host([variant=underlined][state=error]) #input-container{border-top:none!important;border-left:none!important;border-right:none!important;border-bottom:var(--nuraly-input-error-border,var(--nuraly-error-border))!important}:host([state=error]) input[type=number]~#number-icons,:host([state=warning]) input[type=number]~#number-icons{position:static;padding-left:var(--nuraly-input-number-icons-container-padding-left,var(--nuraly-number-icons-container-padding-left))}::slotted([slot=label]){color:var(--nuraly-input-label-color,var(--nuraly-label-color));font-size:var(--nuraly-input-label-font-size,var(--nuraly-label-font-size));padding-bottom:var(--nuraly-input-label-padding-bottom,var(--nuraly-label-padding-bottom))}::slotted([slot=helper-text]){color:var(--nuraly-input-helper-text-color,var(--nuraly-helper-text-color));font-size:var(--nuraly-input-helper-text-font-size,var(--nuraly-helper-text-font-size));padding-top:var(--nuraly-input-helper-text-padding-top,var(--nuraly-helper-text-padding-top));word-wrap:break-word;word-break:break-word;overflow-wrap:break-word;hyphens:auto;white-space:normal;max-width:100%;width:0;min-width:100%;box-sizing:border-box;line-height:1.4}:host([state=error]) ::slotted([slot=helper-text]){color:var(--nuraly-input-error-helper-text-color,var(--nuraly-error-helper-text-color))}:host([state=warning]) ::slotted([slot=helper-text]){color:var(--nuraly-input-warning-helper-text-color,var(--nuraly-warning-helper-text-color))}:host([disabled]) ::slotted([slot=helper-text]){color:var(--nuraly-input-disabled-helper-text-color,var(--nuraly-disabled-helper-text-color))}:host([disabled]) ::slotted([slot=label]){color:var(--nuraly-input-disabled-label-color,var(--nuraly-disabled-label-color))}.input-prefix{display:flex;align-items:center;justify-content:center}::slotted([slot=prefix]){display:flex;align-items:center;padding-right:var(--nuraly-input-prefix-padding-right,var(--nuraly-prefix-padding-right));color:var(--nuraly-input-prefix-color,var(--nuraly-prefix-color));font-size:var(--nuraly-input-prefix-font-size,var(--nuraly-prefix-font-size));flex-shrink:0}.input-suffix{display:flex;align-items:center;justify-content:center}::slotted([slot=suffix]){display:flex;align-items:center;padding-left:var(--nuraly-input-suffix-padding-left,var(--nuraly-suffix-padding-left));color:var(--nuraly-input-suffix-color,var(--nuraly-suffix-color));font-size:var(--nuraly-input-suffix-font-size,var(--nuraly-suffix-font-size));flex-shrink:0}:host([disabled]) ::slotted([slot=prefix]),:host([disabled]) ::slotted([slot=suffix]){opacity:var(--nuraly-input-disabled-icon-opacity,var(--nuraly-disabled-icon-opacity));color:var(--nuraly-input-disabled-prefix-suffix-color,var(--nuraly-disabled-prefix-suffix-color))}`,t`div[data-size=large]{padding-top:var(--nuraly-input-large-padding-top,var(--nuraly-large-padding-top));padding-bottom:var(--nuraly-input-large-padding-bottom,var(--nuraly-large-padding-bottom));padding-left:var(--nuraly-input-large-padding-left,var(--nuraly-large-padding-left));padding-right:var(--nuraly-input-large-padding-right,var(--nuraly-large-padding-right))}div[data-size=medium]{padding-top:var(--nuraly-input-medium-padding-top,var(--nuraly-medium-padding-top));padding-bottom:var(--nuraly-input-medium-padding-bottom,var(--nuraly-medium-padding-bottom));padding-left:var(--nuraly-input-medium-padding-left,var(--nuraly-medium-padding-left));padding-right:var(--nuraly-input-medium-padding-right,var(--nuraly-medium-padding-right))}div[data-size=small]{padding-top:var(--nuraly-input-small-padding-top,var(--nuraly-small-padding-top));padding-bottom:var(--nuraly-input-small-padding-bottom,var(--nuraly-small-padding-bottom));padding-left:var(--nuraly-input-small-padding-left,var(--nuraly-small-padding-left));padding-right:var(--nuraly-input-small-padding-right,var(--nuraly-small-padding-right))}[data-theme^=carbon] div[data-size=medium],body[data-theme^=carbon] nr-input div[data-size=medium],html[data-theme^=carbon] nr-input div[data-size=medium]{padding:4px 8px!important}.character-count{font-size:var(--nuraly-input-character-count-font-size,var(--nuraly-character-count-font-size));color:var(--nuraly-input-character-count-color,var(--nuraly-character-count-color));text-align:right;margin-top:var(--nuraly-input-character-count-margin-top,var(--nuraly-character-count-margin-top));font-family:var(--nuraly-input-font-family,var(--nuraly-font-family))}.character-count[data-over-limit]{color:var(--nuraly-input-character-count-over-limit-color,var(--nuraly-character-count-over-limit-color))}.validation-message{font-size:var(--nuraly-input-validation-message-font-size,var(--nuraly-validation-message-font-size,.875rem));font-family:var(--nuraly-input-font-family,var(--nuraly-font-family));margin-top:var(--nuraly-input-validation-message-margin-top,var(--nuraly-validation-message-margin-top,.25rem));padding:var(--nuraly-input-validation-message-padding,var(--nuraly-validation-message-padding,0));word-wrap:break-word;word-break:break-word;overflow-wrap:break-word;hyphens:auto;white-space:normal;max-width:100%;width:0;min-width:100%;box-sizing:border-box;line-height:var(--nuraly-input-validation-message-line-height,var(--nuraly-validation-message-line-height,1.4))}.validation-message.error{color:var(--nuraly-input-error-message-color,var(--nuraly-error-message-color,var(--nuraly-input-error-color,var(--nuraly-error-color,#dc2626))))}.validation-message.warning{color:var(--nuraly-input-warning-message-color,var(--nuraly-warning-message-color,var(--nuraly-input-warning-color,var(--nuraly-warning-color,#d97706))))}:host([disabled]) .validation-message{opacity:var(--nuraly-input-disabled-validation-message-opacity,var(--nuraly-disabled-validation-message-opacity,.6));color:var(--nuraly-input-disabled-validation-message-color,var(--nuraly-disabled-validation-message-color))}.validation-icon{width:16px;height:16px;display:inline-flex;align-items:center;justify-content:center}.validation-icon.validation-loading{color:var(--nuraly-input-primary-color,var(--nuraly-primary-color,#3b82f6));animation:validation-hourglass 2s ease-in-out infinite;transform-origin:center}.validation-icon.validation-error{color:var(--nuraly-input-error-color,var(--nuraly-error-color,#dc2626))}.validation-icon.validation-warning{color:var(--nuraly-input-warning-color,var(--nuraly-warning-color,#d97706))}.validation-icon.validation-success{color:var(--nuraly-input-success-color,var(--nuraly-success-color,#16a34a))}@keyframes validation-hourglass{0%{opacity:.7;transform:scale(1)}25%{opacity:1;transform:scale(1.03)}50%{opacity:.8;transform:scale(1)}75%{opacity:1;transform:scale(1.03)}100%{opacity:.7;transform:scale(1)}}`],u={EMAIL:/^[a-zA-Z0-9._%+-]+@[a-zA-Z0-9.-]+\.[a-zA-Z]{2,}$/,URL:/^https?:\/\/(www\.)?[-a-zA-Z0-9@:%._\+~#=]{1,256}\.[a-zA-Z0-9()]{1,6}\b([-a-zA-Z0-9()@:%_\+.~#?&//=]*)$/,PHONE:/^[\+]?[1-9][\d]{0,15}$/,PASSWORD_STRONG:/^(?=.*[a-z])(?=.*[A-Z])(?=.*\d)(?=.*[@$!%*?&])[A-Za-z\d@$!%*?&]{8,}$/,ALPHANUMERIC:/^[a-zA-Z0-9]+$/,NUMERIC:/^\d+$/,ALPHA:/^[a-zA-Z]+$/,USERNAME:/^[a-zA-Z0-9_-]{3,16}$/,HEX_COLOR:/^#([A-Fa-f0-9]{6}|[A-Fa-f0-9]{3})$/,IPV4:/^(?:(?:25[0-5]|2[0-4][0-9]|[01]?[0-9][0-9]?)\.){3}(?:25[0-5]|2[0-4][0-9]|[01]?[0-9][0-9]?)$/,CREDIT_CARD:/^(?:4[0-9]{12}(?:[0-9]{3})?|5[1-5][0-9]{14}|3[47][0-9]{13}|3[0-9]{13}|6(?:011|5[0-9]{2})[0-9]{12})$/},d=t=>({required:!0,message:t||"This field is required"}),c=t=>({type:"email",pattern:u.EMAIL,message:t||"Please enter a valid email address"}),h=t=>({type:"url",pattern:u.URL,message:t||"Please enter a valid URL"}),p=(t,r)=>({maxLength:t,message:r||`Maximum length is ${t} characters`}),v=(t,r)=>({type:"number",min:t,message:r||`Minimum value is ${t}`}),b=(t,r)=>({type:"number",max:t,message:r||`Maximum value is ${t}`});
1
+ import{css as t,html as r,nothing as i,LitElement as n}from"lit";import{property as a,state as e,customElement as o}from"lit/decorators.js";import{NuralyUIBaseMixin as s}from"@nuralyui/common/mixins";const l=[t`
2
+ /*
3
+ * Host element base styles
4
+ * Container for the input component with flexible layout
5
+ */
6
+ :host {
7
+ display: flex;
8
+ flex-direction: column;
9
+ font-family: var(--nuraly-font-family-input, 'IBM Plex Sans', ui-sans-serif, system-ui);
10
+ }
11
+
12
+ /*
13
+ * Base input wrapper and input element styles
14
+ * Background applied to wrapper to cover entire container including addons
15
+ * Uses theme CSS custom properties for comprehensive theming support
16
+ */
17
+ .input-wrapper {
18
+ background-color: var(--nuraly-color-input-background, var(--nuraly-color-input-background-fallback, #ffffff));
19
+ }
20
+
21
+
22
+ #input-container > input {
23
+ background-color: transparent;
24
+ border: var(--nuraly-input-border, none);
25
+ outline: var(--nuraly-input-outline, none);
26
+ flex: 1;
27
+ min-width: 0;
28
+ width: 100%;
29
+
30
+ /* Typography from theme */
31
+ font-family: var(--nuraly-font-family-input, -apple-system, BlinkMacSystemFont, 'Segoe UI', Roboto);
32
+ font-size: var(--nuraly-font-size-input, 14px);
33
+ color: var(--nuraly-color-input-text, var(--nuraly-color-input-text-fallback, rgba(0, 0, 0, 0.88)));
34
+
35
+ /* Padding from theme */
36
+ padding: var(--nuraly-spacing-input-medium-vertical, 4px) var(--nuraly-spacing-input-medium-horizontal, 11px);
37
+ }
38
+
39
+ /*
40
+ * Disabled state styles for wrapper and input
41
+ * Applied when input is disabled - removes interactivity and applies muted colors
42
+ */
43
+ :host([disabled]) .input-wrapper {
44
+ background-color: var(--nuraly-color-input-disabled-background, var(--nuraly-color-input-disabled-background-fallback, #f4f4f4));
45
+ }
46
+
47
+ :host([disabled]) #input-container > input {
48
+ background-color: transparent;
49
+ cursor: var(--nuraly-cursor-disabled, not-allowed);
50
+ color: var(--nuraly-color-input-disabled-text, var(--nuraly-color-input-disabled-text-fallback, rgba(0, 0, 0, 0.25)));
51
+ }
52
+
53
+ /*
54
+ * Icon base styles
55
+ * Common styling for all icons within the input component
56
+ * Provides comprehensive CSS variable override system
57
+ */
58
+ nr-icon {
59
+ display: flex;
60
+ align-items: center;
61
+
62
+ /* Global icon color override - applies to all icons in input */
63
+ --nuraly-color-icon: var(--nuraly-color-input-icon, var(--nuraly-color-icon, var(--nuraly-color-icon-fallback, #161616)));
64
+
65
+ /* Size override for input icons */
66
+ --nuraly-icon-size: var(--nuraly-size-input-icon, var(--nuraly-icon-size, var(--nuraly-icon-size-fallback, 18px)));
67
+
68
+ /* Interactive state overrides */
69
+ --nuraly-color-icon-hover: var(--nuraly-color-input-icon-hover, var(--nuraly-color-icon-hover, var(--nuraly-color-icon-hover-fallback, #0f62fe)));
70
+ --nuraly-color-icon-active: var(--nuraly-color-input-icon-active, var(--nuraly-color-icon-active, var(--nuraly-color-icon-active-fallback, #054ada)));
71
+ --nuraly-color-icon-disabled: var(--nuraly-color-input-icon-disabled, var(--nuraly-color-icon-disabled, var(--nuraly-color-icon-disabled-fallback, #c6c6c6)));
72
+ }
73
+
74
+ /*
75
+ * Placeholder styling
76
+ * Customizable placeholder text appearance
77
+ */
78
+ ::placeholder {
79
+ color: var(--nuraly-color-input-placeholder, var(--nuraly-color-input-placeholder-fallback, #a8a8a8));
80
+ font-size: var(--nuraly-font-size-input-placeholder, 14px);
81
+ font-family: var(--nuraly-font-family-input, 'IBM Plex Sans', ui-sans-serif, system-ui);
82
+ }
83
+
84
+ /*
85
+ * Disabled placeholder styling
86
+ * Applied when input is disabled
87
+ */
88
+ :host([disabled]) ::placeholder {
89
+ color: var(--nuraly-color-input-disabled-placeholder, var(--nuraly-color-input-disabled-placeholder-fallback, #c6c6c6));
90
+ }
91
+
92
+ /* ========================================
93
+ * ICON VARIANTS AND STATES
94
+ * ======================================== */
95
+
96
+ /* Warning state icon */
97
+ #warning-icon {
98
+ --nuraly-color-icon: var(--nuraly-color-input-warning-icon, #f1c21b);
99
+ }
100
+
101
+ /* Error state icon */
102
+ #error-icon {
103
+ --nuraly-color-icon: var(--nuraly-color-input-error-icon, #da1e28);
104
+ }
105
+
106
+ /* Calendar input type icon */
107
+ #calendar-icon {
108
+ --nuraly-color-icon: var(--nuraly-color-input-calendar-icon, #161616);
109
+ }
110
+
111
+ /* Password toggle icon */
112
+ #password-icon {
113
+ padding-left: var(--nuraly-input-password-icon-padding-left, var(--nuraly-password-icon-padding-left, 8px));
114
+ padding-right: var(--nuraly-input-password-icon-padding-right, var(--nuraly-password-icon-padding-right, 8px));
115
+ cursor: var(--nuraly-cursor-interactive, pointer);
116
+ --nuraly-color-icon: var(--nuraly-color-input-password-icon, #161616);
117
+ }
118
+
119
+ /* Copy functionality icon */
120
+ #copy-icon {
121
+ padding-right: var(--nuraly-input-copy-icon-padding-right, var(--nuraly-copy-icon-padding-right, 8px));
122
+ --nuraly-color-icon: var(--nuraly-color-input-copy-icon, #161616);
123
+ cursor: var(--nuraly-cursor-interactive, pointer);
124
+ }
125
+
126
+ /* Clear functionality icon */
127
+ #clear-icon {
128
+ padding-right: var(--nuraly-input-clear-icon-padding-right, var(--nuraly-clear-icon-padding-right, 8px));
129
+ --nuraly-color-icon: var(--nuraly-color-input-clear-icon, #161616);
130
+ cursor: var(--nuraly-cursor-interactive, pointer);
131
+ }
132
+
133
+ /*
134
+ * Number input increment/decrement icons container
135
+ * Positioned absolutely for overlay on input
136
+ */
137
+ #number-icons {
138
+ display: flex;
139
+ justify-content: space-between;
140
+ align-items: center;
141
+ cursor: var(--nuraly-cursor-interactive, pointer);
142
+ position: absolute;
143
+ right: 0;
144
+ top: 0;
145
+ height: 100%;
146
+ width: var(--nuraly-input-number-icons-container-width, var(--nuraly-number-icons-container-width, 50px));
147
+ padding-right: var(--nuraly-input-number-icons-container-padding-right, var(--nuraly-number-icons-container-padding-right, 8px));
148
+ }
149
+
150
+ /* Individual number icons styling */
151
+ #number-icons nr-icon {
152
+ --nuraly-color-icon: var(--nuraly-color-input-number-icons, #161616);
153
+ padding-left: var(--nuraly-input-number-icons-padding-left, var(--nuraly-number-icons-padding-left, 4px));
154
+ padding-right: var(--nuraly-input-number-icons-padding-right, var(--nuraly-number-icons-padding-right, 4px));
155
+ width: var(--nuraly-input-number-icons-width, var(--nuraly-number-icons-width, 24px));
156
+ height: var(--nuraly-input-number-icons-height, var(--nuraly-number-icons-height, 24px));
157
+ }
158
+
159
+ /* Number icons separator styling */
160
+ #icons-separator {
161
+ color: var(--nuraly-input-number-icons-separator-color, var(--nuraly-number-icons-separator-color));
162
+ padding-bottom: var(--nuraly-input-number-icons-separator-padding-bottom, var(--nuraly-number-icons-separator-padding-bottom));
163
+ padding-left: var(--nuraly-input-number-icons-separator-padding-left, var(--nuraly-number-icons-separator-padding-left));
164
+ padding-right: var(--nuraly-input-number-icons-separator-padding-right, var(--nuraly-number-icons-separator-padding-right));
165
+ }
166
+
167
+ /*
168
+ * Disabled state for all icons
169
+ * Applied when input is disabled - reduces opacity and disables interaction
170
+ */
171
+ :host([disabled]) #password-icon,
172
+ :host([disabled]) #error-icon,
173
+ :host([disabled]) #warning-icon,
174
+ :host([disabled]) #number-icons,
175
+ :host([disabled]) #calendar-icon,
176
+ :host([disabled]) #copy-icon,
177
+ :host([disabled]) #clear-icon {
178
+ opacity: var(--nuraly-input-disabled-icon-opacity, var(--nuraly-disabled-icon-opacity));
179
+ }
180
+
181
+ /* Disabled icons cursor override */
182
+ :host([disabled]) #password-icon,
183
+ :host([disabled]) #number-icons,
184
+ :host([disabled]) #copy-icon,
185
+ :host([disabled]) #clear-icon {
186
+ cursor: not-allowed;
187
+ }
188
+
189
+ /* ========================================
190
+ * INPUT CONTAINER STYLES
191
+ * ======================================== */
192
+
193
+ /*
194
+ * Input wrapper - contains addons and input container
195
+ * Provides horizontal layout for addon before/after elements
196
+ */
197
+ .input-wrapper {
198
+ display: flex;
199
+ align-items: stretch;
200
+ width: 100%;
201
+ }
202
+
203
+ /*
204
+ * Addon before element - content before input (outside borders)
205
+ * Styled to visually connect with input
206
+ */
207
+ .input-addon-before {
208
+ background-color: var(--nuraly-input-addon-background-color, var(--nuraly-addon-background-color));
209
+ border: var(--nuraly-input-border, var(--nuraly-border));
210
+ border-right: none;
211
+ border-top-left-radius: var(--nuraly-input-border-radius, var(--nuraly-border-radius));
212
+ border-bottom-left-radius: var(--nuraly-input-border-radius, var(--nuraly-border-radius));
213
+ padding: var(--nuraly-input-addon-padding, var(--nuraly-addon-padding));
214
+ display: flex;
215
+ align-items: center;
216
+ color: var(--nuraly-input-addon-color, var(--nuraly-addon-color));
217
+ font-size: var(--nuraly-input-font-size, var(--nuraly-font-size));
218
+ white-space: nowrap;
219
+ min-width: 0; /* Allow shrinking */
220
+ flex-shrink: 0; /* Prevent shrinking */
221
+ }
222
+
223
+ /*
224
+ * Addon after element - content after input (outside borders)
225
+ * Styled to visually connect with input
226
+ */
227
+ .input-addon-after {
228
+ background-color: var(--nuraly-input-addon-background-color, var(--nuraly-addon-background-color));
229
+ border: var(--nuraly-input-border, var(--nuraly-border));
230
+ border-left: none;
231
+ border-top-right-radius: var(--nuraly-input-border-radius, var(--nuraly-border-radius));
232
+ border-bottom-right-radius: var(--nuraly-input-border-radius, var(--nuraly-border-radius));
233
+ padding: var(--nuraly-input-addon-padding, var(--nuraly-addon-padding));
234
+ display: flex;
235
+ align-items: center;
236
+ color: var(--nuraly-input-addon-color, var(--nuraly-addon-color));
237
+ font-size: var(--nuraly-input-font-size, var(--nuraly-font-size));
238
+ white-space: nowrap;
239
+ min-width: 0; /* Allow shrinking */
240
+ flex-shrink: 0; /* Prevent shrinking */
241
+ }
242
+
243
+ /*
244
+ * Input container border radius adjustments when addons are present
245
+ * Removes border radius on sides where addons are attached
246
+ */
247
+ .input-wrapper:has(.input-addon-before) #input-container {
248
+ border-top-left-radius: 0;
249
+ border-bottom-left-radius: 0;
250
+ border-left: none;
251
+ }
252
+
253
+ .input-wrapper:has(.input-addon-after) #input-container {
254
+ border-top-right-radius: 0;
255
+ border-bottom-right-radius: 0;
256
+ border-right: none;
257
+ }
258
+
259
+ /*
260
+ * Main input container element
261
+ * Uses theme CSS custom properties for comprehensive border and layout control
262
+ */
263
+ #input-container {
264
+ /* Default outlined style */
265
+ border: var(--nuraly-border-width-input, 1px) solid var(--nuraly-color-input-border, #d9d9d9);
266
+ border-radius: var(--nuraly-border-radius-input, 6px);
267
+
268
+ /* Background and text styling */
269
+ background-color: var(--nuraly-color-input-background, #ffffff);
270
+ color: var(--nuraly-color-input-text, rgba(0, 0, 0, 0.88));
271
+ font-family: var(--nuraly-font-family-input, -apple-system, BlinkMacSystemFont, 'Segoe UI', Roboto);
272
+ font-size: var(--nuraly-font-size-input, 14px);
273
+
274
+ /* Layout */
275
+ display: flex;
276
+ position: relative;
277
+ flex: 1; /* Take available space in wrapper */
278
+ min-width: 0; /* Allow shrinking below content size */
279
+
280
+ /* Transitions for smooth theme changes */
281
+ transition: var(--nuraly-transition-input, border-color 0.2s, box-shadow 0.2s);
282
+ }
283
+
284
+ /* Carbon Design System override - Carbon specific styles */
285
+ html[data-theme^="carbon"] nr-input #input-container,
286
+ body[data-theme^="carbon"] nr-input #input-container,
287
+ [data-theme^="carbon"] nr-input #input-container,
288
+ .input-wrapper[data-theme^="carbon"] #input-container {
289
+ border: var(--nuraly-border-width-input, 1px) solid var(--nuraly-color-input-border, transparent) !important;
290
+ border-bottom: var(--nuraly-border-width-input, 2px) solid var(--nuraly-color-input-border-bottom, #8d8d8d) !important;
291
+ border-radius: var(--nuraly-border-radius-input, 0) !important;
292
+ background-color: var(--nuraly-color-input-background, #f4f4f4) !important;
293
+ color: var(--nuraly-color-input-text, #161616) !important;
294
+ }
295
+
296
+ /* Default theme override - Default specific styles */
297
+ html[data-theme^="default"] nr-input #input-container,
298
+ body[data-theme^="default"] nr-input #input-container,
299
+ [data-theme^="default"] nr-input #input-container,
300
+ .input-wrapper[data-theme^="default"] #input-container {
301
+ border: var(--nuraly-border-width-input, 1px) solid var(--nuraly-color-input-border, #d9d9d9) !important;
302
+ border-radius: var(--nuraly-border-radius-input, 6px) !important;
303
+ background-color: var(--nuraly-color-input-background, #ffffff) !important;
304
+ color: var(--nuraly-color-input-text, rgba(0, 0, 0, 0.88)) !important;
305
+ }
306
+
307
+ /* Carbon input element padding override */
308
+ html[data-theme^="carbon"] nr-input #input-container > input,
309
+ body[data-theme^="carbon"] nr-input #input-container > input,
310
+ [data-theme^="carbon"] nr-input #input-container > input,
311
+ .input-wrapper[data-theme^="carbon"] #input-container > input {
312
+ padding: 7px 16px !important;
313
+ }
314
+
315
+ /* Default input element padding override */
316
+ html[data-theme^="default"] nr-input #input-container > input,
317
+ body[data-theme^="default"] nr-input #input-container > input,
318
+ [data-theme^="default"] nr-input #input-container > input,
319
+ .input-wrapper[data-theme^="default"] #input-container > input {
320
+ padding: var(--nuraly-spacing-input-medium-vertical, 4px) var(--nuraly-spacing-input-medium-horizontal, 11px) !important;
321
+ }
322
+
323
+ /* Focus state for input container */
324
+ #input-container:focus-within {
325
+ border-color: var(--nuraly-color-input-border-focus, #1890ff);
326
+ box-shadow: var(--nuraly-shadow-input-focus, 0 0 0 2px rgba(24, 144, 255, 0.2));
327
+ outline: none;
328
+ }
329
+
330
+ /* Carbon focus override */
331
+ html[data-theme^="carbon"] nr-input #input-container:focus-within,
332
+ body[data-theme^="carbon"] nr-input #input-container:focus-within,
333
+ [data-theme^="carbon"] nr-input #input-container:focus-within,
334
+ .input-wrapper[data-theme^="carbon"] #input-container:focus-within {
335
+ border: var(--nuraly-border-width-input, 2px) solid var(--nuraly-color-input-border-focus, #0f62fe) !important;
336
+ border-radius: var(--nuraly-border-radius-input, 0) !important;
337
+ box-shadow: var(--nuraly-shadow-input-focus, none) !important;
338
+ outline: none !important;
339
+ }
340
+
341
+ /* Default focus override */
342
+ html[data-theme^="default"] nr-input #input-container:focus-within,
343
+ body[data-theme^="default"] nr-input #input-container:focus-within,
344
+ [data-theme^="default"] nr-input #input-container:focus-within,
345
+ .input-wrapper[data-theme^="default"] #input-container:focus-within {
346
+ border-color: var(--nuraly-color-input-border-focus, #1890ff) !important;
347
+ border-radius: var(--nuraly-border-radius-input, 6px) !important;
348
+ box-shadow: var(--nuraly-shadow-input-focus, 0 0 0 2px rgba(24, 144, 255, 0.2)) !important;
349
+ outline: none !important;
350
+ }
351
+
352
+ /*
353
+ * Disabled container styles
354
+ * Applied when input is disabled
355
+ */
356
+ :host([disabled]) #input-container {
357
+ background-color: var(--nuraly-color-input-disabled-background, #f5f5f5);
358
+ border-color: var(--nuraly-color-input-disabled-border, #d9d9d9);
359
+ color: var(--nuraly-color-input-disabled-text, rgba(0, 0, 0, 0.25));
360
+ cursor: not-allowed;
361
+ }
362
+
363
+ /* ========================================
364
+ * INPUT VARIANT STYLES
365
+ * ======================================== */
366
+
367
+ /*
368
+ * Outlined variant - full border around input
369
+ * Default: light border, focus: blue border
370
+ */
371
+ :host([variant='outlined']) #input-container {
372
+ border: var(--nuraly-input-outlined-border, var(--nuraly-outlined-border));
373
+ border-radius: var(--nuraly-input-outlined-border-radius, var(--nuraly-outlined-border-radius));
374
+ background-color: var(--nuraly-input-outlined-background, var(--nuraly-outlined-background));
375
+ }
376
+
377
+ :host([variant='outlined']) .input-wrapper {
378
+ background-color: transparent;
379
+ }
380
+
381
+ :host([variant='outlined']:not([state='error'])) #input-container:focus-within {
382
+ border: var(--nuraly-input-outlined-focus-border, var(--nuraly-outlined-focus-border));
383
+ }
384
+
385
+ /*
386
+ * Filled variant - background with bottom border only
387
+ * Subtle background with bottom border indication
388
+ */
389
+ :host([variant='filled']) #input-container {
390
+ background-color: var(--nuraly-input-filled-background, var(--nuraly-filled-background));
391
+ border-radius: var(--nuraly-input-filled-border-radius, var(--nuraly-filled-border-radius));
392
+ border-bottom: var(--nuraly-input-filled-border-bottom, var(--nuraly-filled-border-bottom));
393
+ border-top: none;
394
+ border-left: none;
395
+ border-right: none;
396
+ }
397
+
398
+ :host([variant='filled']) .input-wrapper {
399
+ background-color: transparent;
400
+ }
401
+
402
+ :host([variant='filled']:not([state='error'])) #input-container:focus-within {
403
+ border-bottom: var(--nuraly-input-filled-focus-border-bottom, var(--nuraly-filled-focus-border-bottom));
404
+ border-top: none;
405
+ border-left: none;
406
+ border-right: none;
407
+ }
408
+
409
+ /*
410
+ * Borderless variant - no borders, focus with outline
411
+ * Clean appearance with focus indication via outline
412
+ */
413
+ :host([variant='borderless']) #input-container {
414
+ background-color: var(--nuraly-input-borderless-background, var(--nuraly-borderless-background));
415
+ border: none;
416
+ border-radius: var(--nuraly-input-borderless-border-radius, var(--nuraly-borderless-border-radius));
417
+ }
418
+
419
+ :host([variant='borderless']) .input-wrapper {
420
+ background-color: transparent;
421
+ }
422
+
423
+ :host([variant='borderless']:not([state='error'])) #input-container:focus-within {
424
+ outline: var(--nuraly-input-borderless-focus-outline, var(--nuraly-borderless-focus-outline));
425
+ border: none;
426
+ }
427
+
428
+ /*
429
+ * Underlined variant - bottom border only (default/current behavior)
430
+ * Maintains existing behavior as default
431
+ */
432
+ :host([variant='underlined']) #input-container {
433
+ border-bottom: var(--nuraly-input-underlined-border-bottom, var(--nuraly-underlined-border-bottom));
434
+ border-top: none;
435
+ border-left: none;
436
+ border-right: none;
437
+ border-radius: 0;
438
+ }
439
+
440
+ :host([variant='underlined']:not([state='error'])) #input-container:focus-within {
441
+ border-bottom: var(--nuraly-input-underlined-focus-border-bottom, var(--nuraly-underlined-focus-border-bottom));
442
+ border-top: none;
443
+ border-left: none;
444
+ border-right: none;
445
+ }
446
+
447
+ /* ========================================
448
+ * INPUT ELEMENT STYLES
449
+ * ======================================== */
450
+
451
+ /*
452
+ * Base input element styling
453
+ * Full width with no default borders, using container for styling
454
+ */
455
+ input {
456
+ width: 100%;
457
+ border: none;
458
+ outline: none;
459
+ color: var(--nuraly-input-text-color, var(--nuraly-text-color));
460
+ font-family: var(--nuraly-input-font-family, var(--nuraly-font-family));
461
+ font-size: var(--nuraly-input-font-size, var(--nuraly-font-size));
462
+ }
463
+
464
+ /* Remove default number input spinners */
465
+ /* Chrome, Safari, Edge, Opera */
466
+ input::-webkit-outer-spin-button,
467
+ input::-webkit-inner-spin-button {
468
+ -webkit-appearance: none;
469
+ }
470
+
471
+ /* Firefox */
472
+ input[type='number'] {
473
+ -moz-appearance: textfield;
474
+ }
475
+
476
+ /* ========================================
477
+ * STATE STYLES
478
+ * ======================================== */
479
+
480
+ /*
481
+ * Error state styling - works with all variants
482
+ * Applied when state='error' and not disabled
483
+ */
484
+ :host(:not([disabled])[state='error']) #input-container {
485
+ border: var(--nuraly-input-error-border, var(--nuraly-error-border)) !important;
486
+ outline: none !important;
487
+ }
488
+
489
+ /* Override variant-specific error state styling */
490
+ :host([variant='borderless'][state='error']) #input-container {
491
+ border: var(--nuraly-input-error-border, var(--nuraly-error-border)) !important;
492
+ outline: none !important;
493
+ }
494
+
495
+ :host([variant='underlined'][state='error']) #input-container,
496
+ :host([variant='filled'][state='error']) #input-container {
497
+ border-top: none !important;
498
+ border-left: none !important;
499
+ border-right: none !important;
500
+ border-bottom: var(--nuraly-input-error-border, var(--nuraly-error-border)) !important;
501
+ }
502
+
503
+ /*
504
+ * Number input icon positioning adjustments for error/warning states
505
+ * When validation states are present, adjust icon positioning
506
+ */
507
+ :host([state='error']) input[type='number'] ~ #number-icons,
508
+ :host([state='warning']) input[type='number'] ~ #number-icons {
509
+ position: static;
510
+ padding-left: var(--nuraly-input-number-icons-container-padding-left, var(--nuraly-number-icons-container-padding-left));
511
+ }
512
+
513
+ /* ========================================
514
+ * SLOTTED CONTENT STYLES
515
+ * ======================================== */
516
+
517
+ /*
518
+ * Label slot styling
519
+ * Applied to slotted label elements
520
+ */
521
+ ::slotted([slot='label']) {
522
+ color: var(--nuraly-input-label-color, var(--nuraly-label-color));
523
+ font-size: var(--nuraly-input-label-font-size, var(--nuraly-label-font-size));
524
+ padding-bottom: var(--nuraly-input-label-padding-bottom, var(--nuraly-label-padding-bottom));
525
+ }
526
+
527
+ /*
528
+ * Helper text slot styling
529
+ * Applied to slotted helper text elements
530
+ */
531
+ ::slotted([slot='helper-text']) {
532
+ color: var(--nuraly-input-helper-text-color, var(--nuraly-helper-text-color));
533
+ font-size: var(--nuraly-input-helper-text-font-size, var(--nuraly-helper-text-font-size));
534
+ padding-top: var(--nuraly-input-helper-text-padding-top, var(--nuraly-helper-text-padding-top));
535
+
536
+ /* Prevent text overflow and ensure proper wrapping without affecting parent width */
537
+ word-wrap: break-word;
538
+ word-break: break-word;
539
+ overflow-wrap: break-word;
540
+ hyphens: auto;
541
+ white-space: normal;
542
+ max-width: 100%;
543
+ width: 0;
544
+ min-width: 100%;
545
+ box-sizing: border-box;
546
+ line-height: 1.4;
547
+ }
548
+
549
+ /*
550
+ * State-specific helper text colors
551
+ * Override helper text color based on validation state
552
+ */
553
+ :host([state='error']) ::slotted([slot='helper-text']) {
554
+ color: var(--nuraly-input-error-helper-text-color, var(--nuraly-error-helper-text-color));
555
+ }
556
+
557
+ :host([state='warning']) ::slotted([slot='helper-text']) {
558
+ color: var(--nuraly-input-warning-helper-text-color, var(--nuraly-warning-helper-text-color));
559
+ }
560
+
561
+ /*
562
+ * Disabled state for slotted content
563
+ * Applied when input is disabled
564
+ */
565
+ :host([disabled]) ::slotted([slot='helper-text']) {
566
+ color: var(--nuraly-input-disabled-helper-text-color, var(--nuraly-disabled-helper-text-color));
567
+ }
568
+
569
+ :host([disabled]) ::slotted([slot='label']) {
570
+ color: var(--nuraly-input-disabled-label-color, var(--nuraly-disabled-label-color));
571
+ }
572
+
573
+ /*
574
+ * Input prefix wrapper styling
575
+ * Centers the prefix content vertically and horizontally
576
+ */
577
+ .input-prefix {
578
+ display: flex;
579
+ align-items: center;
580
+ justify-content: center;
581
+ }
582
+
583
+ /*
584
+ * Prefix slot styling
585
+ * Applied to slotted prefix content (icons, text, etc.)
586
+ */
587
+ ::slotted([slot='prefix']) {
588
+ display: flex;
589
+ align-items: center;
590
+ padding-right: var(--nuraly-input-prefix-padding-right, var(--nuraly-prefix-padding-right));
591
+ color: var(--nuraly-input-prefix-color, var(--nuraly-prefix-color));
592
+ font-size: var(--nuraly-input-prefix-font-size, var(--nuraly-prefix-font-size));
593
+ flex-shrink: 0;
594
+ }
595
+
596
+ /*
597
+ * Input suffix wrapper styling
598
+ * Centers the suffix content vertically and horizontally
599
+ */
600
+ .input-suffix {
601
+ display: flex;
602
+ align-items: center;
603
+ justify-content: center;
604
+ }
605
+
606
+ /*
607
+ * Suffix slot styling
608
+ * Applied to slotted suffix content (icons, text, etc.)
609
+ */
610
+ ::slotted([slot='suffix']) {
611
+ display: flex;
612
+ align-items: center;
613
+ padding-left: var(--nuraly-input-suffix-padding-left, var(--nuraly-suffix-padding-left));
614
+ color: var(--nuraly-input-suffix-color, var(--nuraly-suffix-color));
615
+ font-size: var(--nuraly-input-suffix-font-size, var(--nuraly-suffix-font-size));
616
+ flex-shrink: 0;
617
+ }
618
+
619
+ /*
620
+ * Disabled state for prefix and suffix slots
621
+ * Applied when input is disabled
622
+ */
623
+ :host([disabled]) ::slotted([slot='prefix']),
624
+ :host([disabled]) ::slotted([slot='suffix']) {
625
+ opacity: var(--nuraly-input-disabled-icon-opacity, var(--nuraly-disabled-icon-opacity));
626
+ color: var(--nuraly-input-disabled-prefix-suffix-color, var(--nuraly-disabled-prefix-suffix-color));
627
+ }
628
+ `,t`
629
+ /* ========================================
630
+ * SIZE VARIATIONS
631
+ * ======================================== */
632
+
633
+ /* Large input size variant */
634
+ div[data-size='large'] {
635
+ padding-top: var(--nuraly-input-large-padding-top, var(--nuraly-large-padding-top));
636
+ padding-bottom: var(--nuraly-input-large-padding-bottom, var(--nuraly-large-padding-bottom));
637
+ padding-left: var(--nuraly-input-large-padding-left, var(--nuraly-large-padding-left));
638
+ padding-right: var(--nuraly-input-large-padding-right, var(--nuraly-large-padding-right));
639
+ }
640
+
641
+ /* Medium input size variant (default) */
642
+ div[data-size='medium'] {
643
+ padding-top: var(--nuraly-input-medium-padding-top, var(--nuraly-medium-padding-top));
644
+ padding-bottom: var(--nuraly-input-medium-padding-bottom, var(--nuraly-medium-padding-bottom));
645
+ padding-left: var(--nuraly-input-medium-padding-left, var(--nuraly-medium-padding-left));
646
+ padding-right: var(--nuraly-input-medium-padding-right, var(--nuraly-medium-padding-right));
647
+ }
648
+
649
+ /* Small input size variant */
650
+ div[data-size='small'] {
651
+ padding-top: var(--nuraly-input-small-padding-top, var(--nuraly-small-padding-top));
652
+ padding-bottom: var(--nuraly-input-small-padding-bottom, var(--nuraly-small-padding-bottom));
653
+ padding-left: var(--nuraly-input-small-padding-left, var(--nuraly-small-padding-left));
654
+ padding-right: var(--nuraly-input-small-padding-right, var(--nuraly-small-padding-right));
655
+ }
656
+
657
+ /* Carbon Design System - Size-specific padding overrides */
658
+ html[data-theme^="carbon"] nr-input div[data-size='medium'],
659
+ body[data-theme^="carbon"] nr-input div[data-size='medium'],
660
+ [data-theme^="carbon"] div[data-size='medium'] {
661
+ padding: 4px 8px !important;
662
+ }
663
+
664
+ /*
665
+ * Character count display
666
+ * Shows character count and limit information
667
+ */
668
+ .character-count {
669
+ font-size: var(--nuraly-input-character-count-font-size, var(--nuraly-character-count-font-size));
670
+ color: var(--nuraly-input-character-count-color, var(--nuraly-character-count-color));
671
+ text-align: right;
672
+ margin-top: var(--nuraly-input-character-count-margin-top, var(--nuraly-character-count-margin-top));
673
+ font-family: var(--nuraly-input-font-family, var(--nuraly-font-family));
674
+ }
675
+
676
+ /* Character count over limit styling */
677
+ .character-count[data-over-limit] {
678
+ color: var(--nuraly-input-character-count-over-limit-color, var(--nuraly-character-count-over-limit-color));
679
+ }
680
+
681
+ /* ========================================
682
+ * VALIDATION MESSAGE STYLES
683
+ * ======================================== */
684
+
685
+ /*
686
+ * Base validation message styling
687
+ * Common styles for error and warning messages
688
+ */
689
+ .validation-message {
690
+ font-size: var(--nuraly-input-validation-message-font-size, var(--nuraly-validation-message-font-size, 0.875rem));
691
+ font-family: var(--nuraly-input-font-family, var(--nuraly-font-family));
692
+ margin-top: var(--nuraly-input-validation-message-margin-top, var(--nuraly-validation-message-margin-top, 0.25rem));
693
+ padding: var(--nuraly-input-validation-message-padding, var(--nuraly-validation-message-padding, 0));
694
+
695
+ /* Prevent text overflow and ensure proper wrapping without affecting parent width */
696
+ word-wrap: break-word;
697
+ word-break: break-word;
698
+ overflow-wrap: break-word;
699
+ hyphens: auto;
700
+ white-space: normal;
701
+ max-width: 100%;
702
+ width: 0;
703
+ min-width: 100%;
704
+ box-sizing: border-box;
705
+ line-height: var(--nuraly-input-validation-message-line-height, var(--nuraly-validation-message-line-height, 1.4));
706
+ }
707
+
708
+ /*
709
+ * Error validation message styling
710
+ * Applied when validation message has error class
711
+ */
712
+ .validation-message.error {
713
+ color: var(--nuraly-input-error-message-color, var(--nuraly-error-message-color, var(--nuraly-input-error-color, var(--nuraly-error-color, #dc2626))));
714
+ }
715
+
716
+ /*
717
+ * Warning validation message styling
718
+ * Applied when validation message has warning class
719
+ */
720
+ .validation-message.warning {
721
+ color: var(--nuraly-input-warning-message-color, var(--nuraly-warning-message-color, var(--nuraly-input-warning-color, var(--nuraly-warning-color, #d97706))));
722
+ }
723
+
724
+ /*
725
+ * Disabled state for validation messages
726
+ * Applied when input is disabled
727
+ */
728
+ :host([disabled]) .validation-message {
729
+ opacity: var(--nuraly-input-disabled-validation-message-opacity, var(--nuraly-disabled-validation-message-opacity, 0.6));
730
+ color: var(--nuraly-input-disabled-validation-message-color, var(--nuraly-disabled-validation-message-color));
731
+ }
732
+
733
+ /*
734
+ * Validation icon styles
735
+ * Base styles for validation feedback icons
736
+ */
737
+ .validation-icon {
738
+ width: 16px;
739
+ height: 16px;
740
+ display: inline-flex;
741
+ align-items: center;
742
+ justify-content: center;
743
+ }
744
+
745
+ /*
746
+ * Loading validation icon with hourglass animation
747
+ * Applied when async validation is in progress
748
+ */
749
+ .validation-icon.validation-loading {
750
+ color: var(--nuraly-input-primary-color, var(--nuraly-primary-color, #3b82f6));
751
+ animation: validation-hourglass 2s ease-in-out infinite;
752
+ transform-origin: center;
753
+ }
754
+
755
+ /*
756
+ * Error validation icon styling
757
+ * Applied when validation fails
758
+ */
759
+ .validation-icon.validation-error {
760
+ color: var(--nuraly-input-error-color, var(--nuraly-error-color, #dc2626));
761
+ }
762
+
763
+ /*
764
+ * Warning validation icon styling
765
+ * Applied when validation has warnings
766
+ */
767
+ .validation-icon.validation-warning {
768
+ color: var(--nuraly-input-warning-color, var(--nuraly-warning-color, #d97706));
769
+ }
770
+
771
+ /*
772
+ * Success validation icon styling
773
+ * Applied when validation passes
774
+ */
775
+ .validation-icon.validation-success {
776
+ color: var(--nuraly-input-success-color, var(--nuraly-success-color, #16a34a));
777
+ }
778
+
779
+ /*
780
+ * Hourglass animation for validation loading
781
+ * Gentle pulsing effect without rotation for clean appearance
782
+ */
783
+ @keyframes validation-hourglass {
784
+ 0% {
785
+ opacity: 0.7;
786
+ transform: scale(1);
787
+ }
788
+ 25% {
789
+ opacity: 1;
790
+ transform: scale(1.03);
791
+ }
792
+ 50% {
793
+ opacity: 0.8;
794
+ transform: scale(1);
795
+ }
796
+ 75% {
797
+ opacity: 1;
798
+ transform: scale(1.03);
799
+ }
800
+ 100% {
801
+ opacity: 0.7;
802
+ transform: scale(1);
803
+ }
804
+ }
805
+
806
+ /*
807
+ * Alternative pulse animation option
808
+ * Uncomment this and change animation above to use pulse instead of hourglass
809
+ */
810
+ /*
811
+ @keyframes validation-pulse {
812
+ 0%, 100% {
813
+ opacity: 1;
814
+ transform: scale(1);
815
+ }
816
+ 50% {
817
+ opacity: 0.7;
818
+ transform: scale(1.1);
819
+ }
820
+ }
821
+ */
822
+ `],d={EMAIL:/^[a-zA-Z0-9._%+-]+@[a-zA-Z0-9.-]+\.[a-zA-Z]{2,}$/,URL:/^https?:\/\/(www\.)?[-a-zA-Z0-9@:%._\+~#=]{1,256}\.[a-zA-Z0-9()]{1,6}\b([-a-zA-Z0-9()@:%_\+.~#?&//=]*)$/,PHONE:/^[\+]?[1-9][\d]{0,15}$/,PASSWORD_STRONG:/^(?=.*[a-z])(?=.*[A-Z])(?=.*\d)(?=.*[@$!%*?&])[A-Za-z\d@$!%*?&]{8,}$/,ALPHANUMERIC:/^[a-zA-Z0-9]+$/,NUMERIC:/^\d+$/,ALPHA:/^[a-zA-Z]+$/,USERNAME:/^[a-zA-Z0-9_-]{3,16}$/,HEX_COLOR:/^#([A-Fa-f0-9]{6}|[A-Fa-f0-9]{3})$/,IPV4:/^(?:(?:25[0-5]|2[0-4][0-9]|[01]?[0-9][0-9]?)\.){3}(?:25[0-5]|2[0-4][0-9]|[01]?[0-9][0-9]?)$/,CREDIT_CARD:/^(?:4[0-9]{12}(?:[0-9]{3})?|5[1-5][0-9]{14}|3[47][0-9]{13}|3[0-9]{13}|6(?:011|5[0-9]{2})[0-9]{12})$/},u=t=>({required:!0,message:t||"This field is required"}),c=t=>({type:"email",pattern:d.EMAIL,message:t||"Please enter a valid email address"}),p=t=>({type:"url",pattern:d.URL,message:t||"Please enter a valid URL"}),h=(t,r)=>({maxLength:t,message:r||`Maximum length is ${t} characters`}),v=(t,r)=>({type:"number",min:t,message:r||`Minimum value is ${t}`}),m=(t,r)=>({type:"number",max:t,message:r||`Maximum value is ${t}`});
2
823
  /**
3
824
  * @license
4
825
  * Copyright 2023 Google Laabidi Aymen
5
826
  * SPDX-License-Identifier: MIT
6
827
  */
7
- class m{static validateNumericProperties(t,r,i,n){"number"===t&&(r&&isNaN(Number(r))&&console.warn(`Invalid min value: "${r}" is not a valid number`),i&&isNaN(Number(i))&&console.warn(`Invalid max value: "${i}" is not a valid number`),n&&isNaN(Number(n))&&console.warn(`Invalid step value: "${n}" is not a valid number`),r&&i&&Number(r)>=Number(i)&&console.warn(`Invalid range: min value (${r}) should be less than max value (${i})`))}static preventNonNumericInput(t,r){const i=t.key,n=t.target,a=n.value,e=n.selectionStart||0;if(!(t.ctrlKey||t.metaKey||["Backspace","Delete","Tab","Escape","Enter","ArrowLeft","ArrowRight","ArrowUp","ArrowDown","Home","End","PageUp","PageDown"].includes(i)||/^\d$/.test(i))){if("."===i||","===i){if(!(a.includes(".")||a.includes(",")))return}if("-"===i){const t=a.includes("-"),i=!r||Number(r)<0;if(!t&&0===e&&i)return}if("+"===i){if(!a.includes("+")&&0===e)return}t.preventDefault()}}static validateNumericValue(t,r,i){const n=[];if(!t)return{isValid:!0,warnings:n};const a=Number(t);return isNaN(a)?{isValid:!1,warnings:[`Invalid numeric value: "${t}"`]}:(r&&a<Number(r)&&n.push(`Value ${a} is below minimum ${r}`),i&&a>Number(i)&&n.push(`Value ${a} is above maximum ${i}`),{isValid:!0,warnings:n})}}
828
+ class b{static validateNumericProperties(t,r,i,n){"number"===t&&(r&&isNaN(Number(r))&&console.warn(`Invalid min value: "${r}" is not a valid number`),i&&isNaN(Number(i))&&console.warn(`Invalid max value: "${i}" is not a valid number`),n&&isNaN(Number(n))&&console.warn(`Invalid step value: "${n}" is not a valid number`),r&&i&&Number(r)>=Number(i)&&console.warn(`Invalid range: min value (${r}) should be less than max value (${i})`))}static preventNonNumericInput(t,r){const i=t.key,n=t.target,a=n.value,e=n.selectionStart||0;if(!(t.ctrlKey||t.metaKey||["Backspace","Delete","Tab","Escape","Enter","ArrowLeft","ArrowRight","ArrowUp","ArrowDown","Home","End","PageUp","PageDown"].includes(i)||/^\d$/.test(i))){if("."===i||","===i){if(!(a.includes(".")||a.includes(",")))return}if("-"===i){const t=a.includes("-"),i=!r||Number(r)<0;if(!t&&0===e&&i)return}if("+"===i){if(!a.includes("+")&&0===e)return}t.preventDefault()}}static validateNumericValue(t,r,i){const n=[];if(!t)return{isValid:!0,warnings:n};const a=Number(t);return isNaN(a)?{isValid:!1,warnings:[`Invalid numeric value: "${t}"`]}:(r&&a<Number(r)&&n.push(`Value ${a} is below minimum ${r}`),i&&a>Number(i)&&n.push(`Value ${a} is above maximum ${i}`),{isValid:!0,warnings:n})}}
8
829
  /**
9
830
  * @license
10
831
  * Copyright 2023 Google Laabidi Aymen
11
832
  * SPDX-License-Identifier: MIT
12
- */class y{static renderPrefix(){return r`<div class="input-prefix"><slot name="prefix"></slot></div>`}static renderSuffix(){return r`<div class="input-suffix"><slot name="suffix"></slot></div>`}static renderAddonBefore(t,n){return t?r`<div class="input-addon-before"><slot name="addon-before" @slotchange="${n}"></slot></div>`:i}static renderAddonAfter(t,n){return t?r`<div class="input-addon-after"><slot name="addon-after" @slotchange="${n}"></slot></div>`:i}static renderCopyIcon(t,n,a,e,o){return t?r`<nr-icon name="copy" type="regular" id="copy-icon" role="button" aria-label="Copy input value" tabindex="0" @click="${n||a?i:e}" @keydown="${o}"></nr-icon>`:i}static renderClearIcon(t,n,a,e,o,s){return!t||!n||a||e?i:r`<nr-icon name="times-circle" type="regular" id="clear-icon" role="button" aria-label="Clear input value" tabindex="0" @click="${o}" @keydown="${s}"></nr-icon>`}static renderStateIcon(t){switch(t){case"warning":return r`<nr-icon name="warning" id="warning-icon"></nr-icon>`;case"error":return r`<nr-icon name="exclamation-circle" id="error-icon"></nr-icon>`;default:return i}}static renderCalendarIcon(t,n){return"default"!==t||"calendar"!==n?i:r`<nr-icon name="calendar" type="regular" id="calendar-icon"></nr-icon>`}static renderPasswordIcon(t,n,a,e,o,s){return"password"!==t?i:"text"===n?r`<nr-icon name="eye-slash" type="regular" id="password-icon" role="button" aria-label="Hide password" tabindex="0" @click="${a||e?i:o}" @keydown="${s}"></nr-icon>`:r`<nr-icon name="eye" type="regular" id="password-icon" role="button" aria-label="Show password" tabindex="0" @click="${a||e?i:o}" @keydown="${s}"></nr-icon>`}static renderNumberIcons(t,n,a,e,o,s,l){return"number"!==t?i:r`<div id="number-icons">${"default"!==n?r`<span id="icons-separator">|</span>`:i}<nr-icon name="minus" aria-label="Decrease value" role="button" tabindex="0" @click="${a||e?i:s}" @keydown="${l}"></nr-icon><span id="icons-separator">|</span><nr-icon name="plus" aria-label="Increase value" role="button" tabindex="0" @click="${a||e?i:o}" @keydown="${l}"></nr-icon></div>`}}
833
+ */class y{static renderPrefix(){return r`
834
+ <div class="input-prefix">
835
+ <slot name="prefix"></slot>
836
+ </div>
837
+ `}static renderSuffix(){return r`
838
+ <div class="input-suffix">
839
+ <slot name="suffix"></slot>
840
+ </div>
841
+ `}static renderAddonBefore(t,n){return t?r`
842
+ <div class="input-addon-before">
843
+ <slot name="addon-before" @slotchange=${n}></slot>
844
+ </div>
845
+ `:i}static renderAddonAfter(t,n){return t?r`
846
+ <div class="input-addon-after">
847
+ <slot name="addon-after" @slotchange=${n}></slot>
848
+ </div>
849
+ `:i}static renderCopyIcon(t,n,a,e,o){return t?r`<nr-icon
850
+ name="copy"
851
+ type="regular"
852
+ id="copy-icon"
853
+ role="button"
854
+ aria-label="Copy input value"
855
+ tabindex="0"
856
+ @click=${n||a?i:e}
857
+ @keydown=${o}
858
+ ></nr-icon>`:i}static renderClearIcon(t,n,a,e,o,s){return!t||!n||a||e?i:r`<nr-icon
859
+ name="times-circle"
860
+ type="regular"
861
+ id="clear-icon"
862
+ role="button"
863
+ aria-label="Clear input value"
864
+ tabindex="0"
865
+ @click=${o}
866
+ @keydown=${s}
867
+ ></nr-icon>`}static renderStateIcon(t){switch(t){case"warning":return r`<nr-icon name="warning" id="warning-icon"></nr-icon>`;case"error":return r`<nr-icon name="exclamation-circle" id="error-icon"></nr-icon>`;default:return i}}static renderCalendarIcon(t,n){return"default"!==t||"calendar"!==n?i:r`<nr-icon name="calendar" type="regular" id="calendar-icon"></nr-icon>`}static renderPasswordIcon(t,n,a,e,o,s){return"password"!==t?i:"text"===n?r`<nr-icon
868
+ name="eye-slash"
869
+ type="regular"
870
+ id="password-icon"
871
+ role="button"
872
+ aria-label="Hide password"
873
+ tabindex="0"
874
+ @click=${a||e?i:o}
875
+ @keydown=${s}
876
+ ></nr-icon>`:r`<nr-icon
877
+ name="eye"
878
+ type="regular"
879
+ id="password-icon"
880
+ role="button"
881
+ aria-label="Show password"
882
+ tabindex="0"
883
+ @click=${a||e?i:o}
884
+ @keydown=${s}
885
+ ></nr-icon>`}static renderNumberIcons(t,n,a,e,o,s,l){return"number"!==t?i:r`
886
+ <div id="number-icons">
887
+ ${"default"!==n?r`<span id="icons-separator">|</span>`:i}
888
+ <nr-icon
889
+ name="minus"
890
+ aria-label="Decrease value"
891
+ role="button"
892
+ tabindex="0"
893
+ @click=${a||e?i:s}
894
+ @keydown=${l}
895
+ ></nr-icon>
896
+ <span id="icons-separator">|</span>
897
+ <nr-icon
898
+ name="plus"
899
+ aria-label="Increase value"
900
+ role="button"
901
+ tabindex="0"
902
+ @click=${a||e?i:o}
903
+ @keydown=${l}
904
+ ></nr-icon>
905
+ </div>
906
+ `}}
13
907
  /**
14
908
  * @license
15
909
  * Copyright 2023 Nuraly, Laabidi Aymen
@@ -30,19 +924,74 @@ class x{constructor(t){this._host=t,this._host.addController(this)}get host(){re
30
924
  * @license
31
925
  * Copyright 2023 Nuraly, Laabidi Aymen
32
926
  * SPDX-License-Identifier: MIT
33
- */var k;!function(t){t.Pristine="pristine",t.Pending="pending",t.Valid="valid",t.Invalid="invalid",t.Warning="warning"}(k||(k={}));class $ extends x{constructor(){super(...arguments),this._validationState=k.Pristine,this._isValidating=!1,this._isValid=!0,this._validationMessage="",this._validationResult={isValid:!0,errors:[],warnings:[],hasError:!1,hasWarning:!1},this._debounceTimer=null}get stateHost(){return this.host}get validationState(){return this._validationState}get isValidating(){return this._isValidating}get isValid(){return this._isValid}get validationMessage(){return this._validationMessage}get validationResult(){return this._validationResult}setValidationState(t){if(this._validationState!==t){const r=this._validationState;this._validationState=t,this.dispatchStateChangeEvent(r,t),this.requestUpdate()}}setValidationResult(t){this._validationResult=t,this._isValid=t.isValid,this._validationMessage=t.hasError?t.errorMessage||"":t.hasWarning&&t.warningMessage||"";let r=k.Valid;t.hasError?r=k.Invalid:t.hasWarning&&this.stateHost.allowWarnings&&(r=k.Warning),this.setValidationState(r)}setValidating(t){this._isValidating!==t&&(this._isValidating=t,t&&this.setValidationState(k.Pending),this.requestUpdate())}shouldValidateOnChange(){return this.stateHost.validateOnChangeInput&&("change"===this.stateHost.validationTrigger||this._validationState!==k.Pristine)}shouldValidateOnBlur(){return this.stateHost.validateOnBlurInput&&("blur"===this.stateHost.validationTrigger||"change"===this.stateHost.validationTrigger)}clearDebounceTimer(){null!==this._debounceTimer&&(clearTimeout(this._debounceTimer),this._debounceTimer=null)}debounceValidation(t){this.clearDebounceTimer();const r=this.stateHost.validationDebounce;r&&r>0?this._debounceTimer=window.setTimeout((()=>{this._debounceTimer=null,t()}),r):t()}resetValidationState(){this.clearDebounceTimer(),this._validationState=k.Pristine,this._isValidating=!1,this._isValid=!0,this._validationMessage="",this._validationResult={isValid:!0,errors:[],warnings:[],hasError:!1,hasWarning:!1},this.requestUpdate()}markAsTouched(){this._validationState===k.Pristine&&this.setValidationState(k.Valid)}isPristine(){return this._validationState===k.Pristine}hasError(){return this._validationState===k.Invalid}hasWarning(){return this._validationState===k.Warning}isPending(){return this._validationState===k.Pending}getStateSummary(){return{state:this._validationState,isValidating:this._isValidating,isValid:this._isValid,message:this._validationMessage,result:this._validationResult,isPristine:this.isPristine(),hasError:this.hasError(),hasWarning:this.hasWarning(),shouldValidateOnChange:this.shouldValidateOnChange(),shouldValidateOnBlur:this.shouldValidateOnBlur()}}hostDisconnected(){super.hostDisconnected(),this.clearDebounceTimer()}dispatchStateChangeEvent(t,r){this.dispatchEvent(new CustomEvent("nr-validation-state-change",{detail:{previousState:t,newState:r,isValidating:this._isValidating,isValid:this._isValid,validationResult:this._validationResult},bubbles:!0,composed:!0}))}}
927
+ */var k;!function(t){t.Pristine="pristine",t.Pending="pending",t.Valid="valid",t.Invalid="invalid",t.Warning="warning"}(k||(k={}));class S extends x{constructor(){super(...arguments),this._validationState=k.Pristine,this._isValidating=!1,this._isValid=!0,this._validationMessage="",this._validationResult={isValid:!0,errors:[],warnings:[],hasError:!1,hasWarning:!1},this._debounceTimer=null}get stateHost(){return this.host}get validationState(){return this._validationState}get isValidating(){return this._isValidating}get isValid(){return this._isValid}get validationMessage(){return this._validationMessage}get validationResult(){return this._validationResult}setValidationState(t){if(this._validationState!==t){const r=this._validationState;this._validationState=t,this.dispatchStateChangeEvent(r,t),this.requestUpdate()}}setValidationResult(t){this._validationResult=t,this._isValid=t.isValid,this._validationMessage=t.hasError?t.errorMessage||"":t.hasWarning&&t.warningMessage||"";let r=k.Valid;t.hasError?r=k.Invalid:t.hasWarning&&this.stateHost.allowWarnings&&(r=k.Warning),this.setValidationState(r)}setValidating(t){this._isValidating!==t&&(this._isValidating=t,t&&this.setValidationState(k.Pending),this.requestUpdate())}shouldValidateOnChange(){return this.stateHost.validateOnChangeInput&&("change"===this.stateHost.validationTrigger||this._validationState!==k.Pristine)}shouldValidateOnBlur(){return this.stateHost.validateOnBlurInput&&("blur"===this.stateHost.validationTrigger||"change"===this.stateHost.validationTrigger)}clearDebounceTimer(){null!==this._debounceTimer&&(clearTimeout(this._debounceTimer),this._debounceTimer=null)}debounceValidation(t){this.clearDebounceTimer();const r=this.stateHost.validationDebounce;r&&r>0?this._debounceTimer=window.setTimeout((()=>{this._debounceTimer=null,t()}),r):t()}resetValidationState(){this.clearDebounceTimer(),this._validationState=k.Pristine,this._isValidating=!1,this._isValid=!0,this._validationMessage="",this._validationResult={isValid:!0,errors:[],warnings:[],hasError:!1,hasWarning:!1},this.requestUpdate()}markAsTouched(){this._validationState===k.Pristine&&this.setValidationState(k.Valid)}isPristine(){return this._validationState===k.Pristine}hasError(){return this._validationState===k.Invalid}hasWarning(){return this._validationState===k.Warning}isPending(){return this._validationState===k.Pending}getStateSummary(){return{state:this._validationState,isValidating:this._isValidating,isValid:this._isValid,message:this._validationMessage,result:this._validationResult,isPristine:this.isPristine(),hasError:this.hasError(),hasWarning:this.hasWarning(),shouldValidateOnChange:this.shouldValidateOnChange(),shouldValidateOnBlur:this.shouldValidateOnBlur()}}hostDisconnected(){super.hostDisconnected(),this.clearDebounceTimer()}dispatchStateChangeEvent(t,r){this.dispatchEvent(new CustomEvent("nr-validation-state-change",{detail:{previousState:t,newState:r,isValidating:this._isValidating,isValid:this._isValid,validationResult:this._validationResult},bubbles:!0,composed:!0}))}}
34
928
  /**
35
929
  * @license
36
930
  * Copyright 2023 Nuraly, Laabidi Aymen
37
931
  * SPDX-License-Identifier: MIT
38
- */var V=function(t,r,i,n){return new(i||(i=Promise))((function(a,e){function o(t){try{l(n.next(t))}catch(t){e(t)}}function s(t){try{l(n.throw(t))}catch(t){e(t)}}function l(t){var r;t.done?a(t.value):(r=t.value,r instanceof i?r:new i((function(t){t(r)}))).then(o,s)}l((n=n.apply(t,r||[])).next())}))};class z extends x{constructor(t){super(t),this.stateController=new $(this._host)}get validationHost(){return this._host}get isValid(){return this.stateController.isValid}get validationMessage(){return this.stateController.validationMessage}get validationState(){return this.stateController.validationState}get validationResult(){return this.stateController.validationResult}get isValidating(){return this.stateController.isValidating}hostConnected(){this.setupValidationRules()}hostUpdated(){}setupValidationRules(){const t=[],r=this.validationHost;"email"===r.type&&t.push(c()),"url"===r.type&&t.push(h()),r.required&&t.push(d(r.label?`${r.label} is required`:void 0)),r.maxLength&&t.push(p(r.maxLength)),"number"===r.type&&(void 0!==r.min&&t.push(v(Number(r.min))),void 0!==r.max&&t.push(b(Number(r.max))));const i=r.rules||[],n=[...t.filter((t=>!i.some((r=>this.isSameRuleType(t,r))))),...i];JSON.stringify(r.rules)!==JSON.stringify(n)&&(r.rules=n,this.requestUpdate())}validate(){try{this.stateController.setValidationState(k.Pending),this.stateController.setValidating(!0),this.dispatchValidationEvent();if(this.hasAsyncValidators())return this.performAsyncValidation(this.validationHost.value),!0;const t=this.performDetailedValidation(this.validationHost.value);return this.stateController.setValidationResult(t),t.hasError?this.setValidationResult(!1,this.stateController.validationMessage,k.Invalid):t.hasWarning&&this.validationHost.allowWarnings?this.setValidationResult(!0,this.stateController.validationMessage,k.Warning):this.setValidationResult(!0,"",k.Valid),this.stateController.setValidating(!1),this.updateHostValidationState(),t.isValid}catch(t){return this.handleError(t,"validate"),this.stateController.setValidating(!1),this.setValidationResult(!1,"Validation error occurred",k.Invalid),this.updateHostValidationState(),!1}}validateOnChange(){this.stateController.shouldValidateOnChange()&&this.stateController.debounceValidation((()=>{this.validate()}))}validateOnBlur(){this.stateController.shouldValidateOnBlur()&&(this.stateController.clearDebounceTimer(),this.validate())}addRule(t){const r=this.validationHost.rules||[];this.validationHost.rules=[...r,t],this.requestUpdate()}removeRule(t){const r=this.validationHost.rules||[];this.validationHost.rules=r.filter((r=>!t(r))),this.requestUpdate()}clearRules(){this.validationHost.rules=[],this.reset()}hasAsyncValidators(){return(this.validationHost.rules||[]).some((t=>t.asyncValidator||t.validator&&this.isValidatorAsync(t.validator)))}isValidatorAsync(t){const r=t.toString();return r.includes("Promise")||r.includes("async")||r.includes("setTimeout")||r.includes("new Promise")}performAsyncValidation(t){return V(this,void 0,void 0,(function*(){try{this.stateController.setValidating(!0),this.updateHostValidationState();const r=[],i=[],n=this.validationHost.rules||[];for(const a of n)if(!(a.asyncValidator||a.validator&&this.isValidatorAsync(a.validator))){const n=this.validateRule(a,t);n.isValid||(a.warningOnly&&this.validationHost.allowWarnings?i.push(n.message):r.push(n.message))}if(r.length>0)return this.stateController.setValidationResult({isValid:!1,errors:r,warnings:i,hasError:!0,hasWarning:i.length>0,errorMessage:r[0],warningMessage:i[0]}),this.setValidationResult(!1,this.stateController.validationMessage,k.Invalid),this.stateController.setValidating(!1),void this.updateHostValidationState();for(const a of n)if(a.asyncValidator||a.validator&&this.isValidatorAsync(a.validator))try{yield this.validateAsyncRule(a,t)}catch(t){const n=t.message||a.message||"Validation failed";a.warningOnly&&this.validationHost.allowWarnings?i.push(n):r.push(n)}const a=r.length>0,e=i.length>0;this.stateController.setValidationResult({isValid:!a,errors:r,warnings:i,hasError:a,hasWarning:e,errorMessage:r[0],warningMessage:i[0]}),a?this.setValidationResult(!1,this.stateController.validationMessage,k.Invalid):e&&this.validationHost.allowWarnings?this.setValidationResult(!0,this.stateController.validationMessage,k.Warning):this.setValidationResult(!0,"",k.Valid),this.stateController.setValidating(!1),this.updateHostValidationState()}catch(t){this.handleError(t,"performAsyncValidation"),this.stateController.setValidating(!1),this.setValidationResult(!1,"Async validation error occurred",k.Invalid),this.updateHostValidationState()}}))}validateAsyncRule(t,r){return V(this,void 0,void 0,(function*(){if(t.asyncValidator)yield t.asyncValidator(t,r);else if(t.validator){const i=t.validator(t,r);i&&"object"==typeof i&&"then"in i&&(yield i)}}))}reset(){this.stateController.setValidationResult({isValid:!0,errors:[],warnings:[],hasError:!1,hasWarning:!1}),this.stateController.setValidationState(k.Pristine),this.stateController.setValidating(!1),this.updateHostValidationState(),this.dispatchValidationEvent()}getValidationStatus(){return{isValid:this.stateController.validationResult.isValid,isValidating:this.stateController.isValidating,errors:this.stateController.validationResult.errors,warnings:this.stateController.validationResult.warnings,validationResult:this.stateController.validationResult}}setValidationStatus(t){this.stateController.setValidationResult(t),t.hasError?this.setValidationResult(!1,this.stateController.validationMessage,k.Invalid):t.hasWarning?this.setValidationResult(!0,this.stateController.validationMessage,k.Warning):t.isValid?this.setValidationResult(!0,"",k.Valid):this.setValidationResult(!0,"",k.Pristine),this.updateHostValidationState()}performDetailedValidation(t){const r=[],i=[],n=this.validationHost.rules||[];for(const a of n){const n=this.validateRule(a,t);n.isValid||(a.warningOnly&&this.validationHost.allowWarnings?i.push(n.message):r.push(n.message))}const a=r.length>0;return{isValid:!a,errors:r,warnings:i,hasError:a,hasWarning:i.length>0,errorMessage:r[0],warningMessage:i[0]}}validateRule(t,r){if(t.asyncValidator||t.validator&&this.isValidatorAsync(t.validator))return{isValid:!0,message:""};const i=t.transform?t.transform(r):r;if(t.required&&this.isValueEmpty(r))return{isValid:!1,message:t.message||`${this.validationHost.label||"This field"} is required`};if(this.isValueEmpty(r)&&!t.required)return{isValid:!0,message:""};if(t.type){const r=this.validateType(t.type,i);if(!r.isValid)return{isValid:!1,message:t.message||r.message}}if(t.pattern&&!t.pattern.test(i))return{isValid:!1,message:t.message||"Invalid format"};if(void 0!==t.minLength&&i.length<t.minLength)return{isValid:!1,message:t.message||`Minimum length is ${t.minLength} characters`};if(void 0!==t.maxLength&&i.length>t.maxLength)return{isValid:!1,message:t.message||`Maximum length is ${t.maxLength} characters`};if("number"===t.type||"number"===this.validationHost.type){const r=Number(i);if(void 0!==t.min&&r<t.min)return{isValid:!1,message:t.message||`Minimum value is ${t.min}`};if(void 0!==t.max&&r>t.max)return{isValid:!1,message:t.message||`Maximum value is ${t.max}`}}if(t.enum&&!t.enum.includes(i))return{isValid:!1,message:t.message||`Value must be one of: ${t.enum.join(", ")}`};if(t.validator)try{const r=t.validator(t,i);return r&&"object"==typeof r&&"isValid"in r?{isValid:r.isValid,message:r.isValid?"":r.message||t.message||"Validation failed"}:{isValid:!0,message:""}}catch(r){return{isValid:!1,message:t.message||r.message||"Validation failed"}}return{isValid:!0,message:""}}validateType(t,r){switch(t){case"email":return{isValid:u.EMAIL.test(r),message:"Please enter a valid email address"};case"url":return{isValid:u.URL.test(r),message:"Please enter a valid URL"};case"number":case"integer":return{isValid:!isNaN(Number(r))&&("number"===t||Number.isInteger(Number(r))),message:`Please enter a valid ${t}`};case"float":return{isValid:!isNaN(parseFloat(r)),message:"Please enter a valid number"};default:return{isValid:!0,message:""}}}isValueEmpty(t){return null==t||""===t}isSameRuleType(t,r){return t.type===r.type&&t.required===r.required&&!!t.pattern==!!r.pattern}setValidationResult(t,r,i){const n=this.stateController.isValid!==t||this.stateController.validationMessage!==r||this.stateController.validationState!==i;this.stateController.setValidationState(i),this.stateController.setValidationResult({isValid:t,errors:t?[]:[r],warnings:[],hasError:!t,hasWarning:!1,errorMessage:t?"":r,warningMessage:""}),n&&this.dispatchValidationEvent()}updateHostValidationState(){this.dispatchValidationEvent()}dispatchValidationEvent(){const t={isValid:this.stateController.isValid,validationMessage:this.stateController.validationMessage,validationState:this.stateController.validationState,errors:this.stateController.validationResult.errors,warnings:this.stateController.validationResult.warnings,validationResult:this.stateController.validationResult};this.dispatchEvent(new CustomEvent("nr-validation",{detail:t,bubbles:!0,composed:!0}))}getValidationClasses(){const t=this.host,r=this.host;return{valid:this.stateController.validationResult.isValid&&!this.stateController.validationResult.hasWarning,invalid:this.stateController.validationResult.hasError,warning:this.stateController.validationResult.hasWarning&&!this.stateController.validationResult.hasError,validating:this.stateController.isValidating,"has-feedback":r.hasFeedback||!1,touched:t.isTouched||!1,dirty:t.isDirty||!1,required:this.host.required||!1}}hasValidationFeedback(){const t=this.host;return!!t.hasFeedback&&(this.stateController.isValidating||this.stateController.validationResult.hasError||this.stateController.validationResult.hasWarning||this.stateController.validationResult.isValid&&t.value&&""!==t.value.trim()&&this.stateController.validationState!==k.Pristine)}renderValidationIcon(){const t=this.host;if(!t.hasFeedback)return"";let i="",n="";return this.stateController.isValidating?(i="hourglass-half",n="validation-loading"):this.stateController.validationResult.hasError?(i="exclamation-circle",n="validation-error"):this.stateController.validationResult.hasWarning?(i="exclamation-triangle",n="validation-warning"):this.stateController.validationResult.isValid&&t.value&&""!==t.value.trim()&&this.stateController.validationState!==k.Pristine&&(i="check-circle",n="validation-success"),i?r`<nr-icon name="${i}" class="validation-icon ${n}" part="validation-icon"></nr-icon>`:""}renderValidationMessage(){const t=this.stateController.validationResult.hasError,i=this.stateController.validationResult.hasWarning&&!t,n=t?this.stateController.validationResult.errorMessage:i?this.stateController.validationResult.warningMessage:"";return n?r`<div class="validation-message ${t?"error":"warning"}" part="validation-message" role="alert" aria-live="polite">${n}</div>`:""}clearDebounceTimer(){this.stateController.clearDebounceTimer()}getValidationRenderState(){return{classes:this.getValidationClasses(),hasValidationFeedback:this.hasValidationFeedback(),isValidating:this.stateController.isValidating,validationResult:this.stateController.validationResult,validationState:this.stateController.validationState}}}
932
+ */var V=function(t,r,i,n){return new(i||(i=Promise))((function(a,e){function o(t){try{l(n.next(t))}catch(t){e(t)}}function s(t){try{l(n.throw(t))}catch(t){e(t)}}function l(t){var r;t.done?a(t.value):(r=t.value,r instanceof i?r:new i((function(t){t(r)}))).then(o,s)}l((n=n.apply(t,r||[])).next())}))};class $ extends x{constructor(t){super(t),this.stateController=new S(this._host)}get validationHost(){return this._host}get isValid(){return this.stateController.isValid}get validationMessage(){return this.stateController.validationMessage}get validationState(){return this.stateController.validationState}get validationResult(){return this.stateController.validationResult}get isValidating(){return this.stateController.isValidating}hostConnected(){this.setupValidationRules()}hostUpdated(){}setupValidationRules(){const t=[],r=this.validationHost;"email"===r.type&&t.push(c()),"url"===r.type&&t.push(p()),r.required&&t.push(u(r.label?`${r.label} is required`:void 0)),r.maxLength&&t.push(h(r.maxLength)),"number"===r.type&&(void 0!==r.min&&t.push(v(Number(r.min))),void 0!==r.max&&t.push(m(Number(r.max))));const i=r.rules||[],n=[...t.filter((t=>!i.some((r=>this.isSameRuleType(t,r))))),...i];JSON.stringify(r.rules)!==JSON.stringify(n)&&(r.rules=n,this.requestUpdate())}validate(){try{this.stateController.setValidationState(k.Pending),this.stateController.setValidating(!0),this.dispatchValidationEvent();if(this.hasAsyncValidators())return this.performAsyncValidation(this.validationHost.value),!0;const t=this.performDetailedValidation(this.validationHost.value);return this.stateController.setValidationResult(t),t.hasError?this.setValidationResult(!1,this.stateController.validationMessage,k.Invalid):t.hasWarning&&this.validationHost.allowWarnings?this.setValidationResult(!0,this.stateController.validationMessage,k.Warning):this.setValidationResult(!0,"",k.Valid),this.stateController.setValidating(!1),this.updateHostValidationState(),t.isValid}catch(t){return this.handleError(t,"validate"),this.stateController.setValidating(!1),this.setValidationResult(!1,"Validation error occurred",k.Invalid),this.updateHostValidationState(),!1}}validateOnChange(){this.stateController.shouldValidateOnChange()&&this.stateController.debounceValidation((()=>{this.validate()}))}validateOnBlur(){this.stateController.shouldValidateOnBlur()&&(this.stateController.clearDebounceTimer(),this.validate())}addRule(t){const r=this.validationHost.rules||[];this.validationHost.rules=[...r,t],this.requestUpdate()}removeRule(t){const r=this.validationHost.rules||[];this.validationHost.rules=r.filter((r=>!t(r))),this.requestUpdate()}clearRules(){this.validationHost.rules=[],this.reset()}hasAsyncValidators(){return(this.validationHost.rules||[]).some((t=>t.asyncValidator||t.validator&&this.isValidatorAsync(t.validator)))}isValidatorAsync(t){const r=t.toString();return r.includes("Promise")||r.includes("async")||r.includes("setTimeout")||r.includes("new Promise")}performAsyncValidation(t){return V(this,void 0,void 0,(function*(){try{this.stateController.setValidating(!0),this.updateHostValidationState();const r=[],i=[],n=this.validationHost.rules||[];for(const a of n)if(!(a.asyncValidator||a.validator&&this.isValidatorAsync(a.validator))){const n=this.validateRule(a,t);n.isValid||(a.warningOnly&&this.validationHost.allowWarnings?i.push(n.message):r.push(n.message))}if(r.length>0)return this.stateController.setValidationResult({isValid:!1,errors:r,warnings:i,hasError:!0,hasWarning:i.length>0,errorMessage:r[0],warningMessage:i[0]}),this.setValidationResult(!1,this.stateController.validationMessage,k.Invalid),this.stateController.setValidating(!1),void this.updateHostValidationState();for(const a of n)if(a.asyncValidator||a.validator&&this.isValidatorAsync(a.validator))try{yield this.validateAsyncRule(a,t)}catch(t){const n=t.message||a.message||"Validation failed";a.warningOnly&&this.validationHost.allowWarnings?i.push(n):r.push(n)}const a=r.length>0,e=i.length>0;this.stateController.setValidationResult({isValid:!a,errors:r,warnings:i,hasError:a,hasWarning:e,errorMessage:r[0],warningMessage:i[0]}),a?this.setValidationResult(!1,this.stateController.validationMessage,k.Invalid):e&&this.validationHost.allowWarnings?this.setValidationResult(!0,this.stateController.validationMessage,k.Warning):this.setValidationResult(!0,"",k.Valid),this.stateController.setValidating(!1),this.updateHostValidationState()}catch(t){this.handleError(t,"performAsyncValidation"),this.stateController.setValidating(!1),this.setValidationResult(!1,"Async validation error occurred",k.Invalid),this.updateHostValidationState()}}))}validateAsyncRule(t,r){return V(this,void 0,void 0,(function*(){if(t.asyncValidator)yield t.asyncValidator(t,r);else if(t.validator){const i=t.validator(t,r);i&&"object"==typeof i&&"then"in i&&(yield i)}}))}reset(){this.stateController.setValidationResult({isValid:!0,errors:[],warnings:[],hasError:!1,hasWarning:!1}),this.stateController.setValidationState(k.Pristine),this.stateController.setValidating(!1),this.updateHostValidationState(),this.dispatchValidationEvent()}getValidationStatus(){return{isValid:this.stateController.validationResult.isValid,isValidating:this.stateController.isValidating,errors:this.stateController.validationResult.errors,warnings:this.stateController.validationResult.warnings,validationResult:this.stateController.validationResult}}setValidationStatus(t){this.stateController.setValidationResult(t),t.hasError?this.setValidationResult(!1,this.stateController.validationMessage,k.Invalid):t.hasWarning?this.setValidationResult(!0,this.stateController.validationMessage,k.Warning):t.isValid?this.setValidationResult(!0,"",k.Valid):this.setValidationResult(!0,"",k.Pristine),this.updateHostValidationState()}performDetailedValidation(t){const r=[],i=[],n=this.validationHost.rules||[];for(const a of n){const n=this.validateRule(a,t);n.isValid||(a.warningOnly&&this.validationHost.allowWarnings?i.push(n.message):r.push(n.message))}const a=r.length>0;return{isValid:!a,errors:r,warnings:i,hasError:a,hasWarning:i.length>0,errorMessage:r[0],warningMessage:i[0]}}validateRule(t,r){if(t.asyncValidator||t.validator&&this.isValidatorAsync(t.validator))return{isValid:!0,message:""};const i=t.transform?t.transform(r):r;if(t.required&&this.isValueEmpty(r))return{isValid:!1,message:t.message||`${this.validationHost.label||"This field"} is required`};if(this.isValueEmpty(r)&&!t.required)return{isValid:!0,message:""};if(t.type){const r=this.validateType(t.type,i);if(!r.isValid)return{isValid:!1,message:t.message||r.message}}if(t.pattern&&!t.pattern.test(i))return{isValid:!1,message:t.message||"Invalid format"};if(void 0!==t.minLength&&i.length<t.minLength)return{isValid:!1,message:t.message||`Minimum length is ${t.minLength} characters`};if(void 0!==t.maxLength&&i.length>t.maxLength)return{isValid:!1,message:t.message||`Maximum length is ${t.maxLength} characters`};if("number"===t.type||"number"===this.validationHost.type){const r=Number(i);if(void 0!==t.min&&r<t.min)return{isValid:!1,message:t.message||`Minimum value is ${t.min}`};if(void 0!==t.max&&r>t.max)return{isValid:!1,message:t.message||`Maximum value is ${t.max}`}}if(t.enum&&!t.enum.includes(i))return{isValid:!1,message:t.message||`Value must be one of: ${t.enum.join(", ")}`};if(t.validator)try{const r=t.validator(t,i);return r&&"object"==typeof r&&"isValid"in r?{isValid:r.isValid,message:r.isValid?"":r.message||t.message||"Validation failed"}:{isValid:!0,message:""}}catch(r){return{isValid:!1,message:t.message||r.message||"Validation failed"}}return{isValid:!0,message:""}}validateType(t,r){switch(t){case"email":return{isValid:d.EMAIL.test(r),message:"Please enter a valid email address"};case"url":return{isValid:d.URL.test(r),message:"Please enter a valid URL"};case"number":case"integer":return{isValid:!isNaN(Number(r))&&("number"===t||Number.isInteger(Number(r))),message:`Please enter a valid ${t}`};case"float":return{isValid:!isNaN(parseFloat(r)),message:"Please enter a valid number"};default:return{isValid:!0,message:""}}}isValueEmpty(t){return null==t||""===t}isSameRuleType(t,r){return t.type===r.type&&t.required===r.required&&!!t.pattern==!!r.pattern}setValidationResult(t,r,i){const n=this.stateController.isValid!==t||this.stateController.validationMessage!==r||this.stateController.validationState!==i;this.stateController.setValidationState(i),this.stateController.setValidationResult({isValid:t,errors:t?[]:[r],warnings:[],hasError:!t,hasWarning:!1,errorMessage:t?"":r,warningMessage:""}),n&&this.dispatchValidationEvent()}updateHostValidationState(){this.dispatchValidationEvent()}dispatchValidationEvent(){const t={isValid:this.stateController.isValid,validationMessage:this.stateController.validationMessage,validationState:this.stateController.validationState,errors:this.stateController.validationResult.errors,warnings:this.stateController.validationResult.warnings,validationResult:this.stateController.validationResult};this.dispatchEvent(new CustomEvent("nr-validation",{detail:t,bubbles:!0,composed:!0}))}getValidationClasses(){const t=this.host,r=this.host;return{valid:this.stateController.validationResult.isValid&&!this.stateController.validationResult.hasWarning,invalid:this.stateController.validationResult.hasError,warning:this.stateController.validationResult.hasWarning&&!this.stateController.validationResult.hasError,validating:this.stateController.isValidating,"has-feedback":r.hasFeedback||!1,touched:t.isTouched||!1,dirty:t.isDirty||!1,required:this.host.required||!1}}hasValidationFeedback(){const t=this.host;return!!t.hasFeedback&&(this.stateController.isValidating||this.stateController.validationResult.hasError||this.stateController.validationResult.hasWarning||this.stateController.validationResult.isValid&&t.value&&""!==t.value.trim()&&this.stateController.validationState!==k.Pristine)}renderValidationIcon(){const t=this.host;if(!t.hasFeedback)return"";let i="",n="";return this.stateController.isValidating?(i="hourglass-half",n="validation-loading"):this.stateController.validationResult.hasError?(i="exclamation-circle",n="validation-error"):this.stateController.validationResult.hasWarning?(i="exclamation-triangle",n="validation-warning"):this.stateController.validationResult.isValid&&t.value&&""!==t.value.trim()&&this.stateController.validationState!==k.Pristine&&(i="check-circle",n="validation-success"),i?r`
933
+ <nr-icon
934
+ name="${i}"
935
+ class="validation-icon ${n}"
936
+ part="validation-icon">
937
+ </nr-icon>
938
+ `:""}renderValidationMessage(){const t=this.stateController.validationResult.hasError,i=this.stateController.validationResult.hasWarning&&!t,n=t?this.stateController.validationResult.errorMessage:i?this.stateController.validationResult.warningMessage:"";return n?r`
939
+ <div class="validation-message ${t?"error":"warning"}"
940
+ part="validation-message"
941
+ role="alert"
942
+ aria-live="polite">
943
+ ${n}
944
+ </div>
945
+ `:""}clearDebounceTimer(){this.stateController.clearDebounceTimer()}getValidationRenderState(){return{classes:this.getValidationClasses(),hasValidationFeedback:this.hasValidationFeedback(),isValidating:this.stateController.isValidating,validationResult:this.stateController.validationResult,validationState:this.stateController.validationState}}}
39
946
  /**
40
947
  * @license
41
948
  * Copyright 2023 Nuraly, Laabidi Aymen
42
949
  * SPDX-License-Identifier: MIT
43
- */var S=function(t,r,i,n){return new(i||(i=Promise))((function(a,e){function o(t){try{l(n.next(t))}catch(t){e(t)}}function s(t){try{l(n.throw(t))}catch(t){e(t)}}function l(t){var r;t.done?a(t.value):(r=t.value,r instanceof i?r:new i((function(t){t(r)}))).then(o,s)}l((n=n.apply(t,r||[])).next())}))};class A extends x{constructor(){super(...arguments),this.handleKeyDown=t=>{!this.eventHost.readonly||this.isReadonlyKeyAllowed(t)?"Enter"!==t.key?"number"===this.eventHost.type&&this.handleNumericKeyDown(t):this.dispatchEnterEvent(t):t.preventDefault()},this.handleValueChange=t=>{if(this.eventHost.readonly)return void t.preventDefault();const r=t.target,i=r.value;if(this.eventHost.maxLength&&i.length>this.eventHost.maxLength)return void t.preventDefault();"number"===this.eventHost.type&&i&&this.validateNumericValue(i,t),this.eventHost.value=i;const n=this.eventHost;n.validationController&&"function"==typeof n.validationController.validateOnChange&&n.validationController.validateOnChange(),this.eventHost.dispatchInputEvent("nr-input",{value:this.eventHost.value,target:r,originalEvent:t})},this.handleFocus=t=>{var r;this.setFocusState(!0);const i=t.target;this.restoreCursorPosition(i);const n={focused:!0,cursorPosition:null!==(r=this.getCursorPosition())&&void 0!==r?r:void 0,selectedText:this.getSelectedText()};this.eventHost.dispatchFocusEvent("nr-focus",Object.assign({target:t.target,value:this.eventHost.value},n)),this.eventHost.dispatchFocusEvent("nr-focus-change",n)},this.handleBlur=t=>{var r;this.setFocusState(!1);const i={focused:!1,cursorPosition:null!==(r=this.getCursorPosition())&&void 0!==r?r:void 0,selectedText:this.getSelectedText()},n=this.eventHost;n.validationController&&"function"==typeof n.validationController.validateOnBlur&&n.validationController.validateOnBlur(),this.eventHost.dispatchFocusEvent("nr-blur",Object.assign({target:t.target,value:this.eventHost.value},i)),this.eventHost.dispatchFocusEvent("nr-focus-change",i)},this.handleIconKeydown=t=>{if(!this.isActivationKey(t))return;t.preventDefault();const r=t.target;switch(r.id){case"copy-icon":this.handleCopy();break;case"clear-icon":this.handleClear();break;case"password-icon":this.handleTogglePassword();break;default:r.closest("#number-icons")&&this.handleNumberIconAction(r)}},this.handleCopy=()=>S(this,void 0,void 0,(function*(){if(this.eventHost.withCopy&&!this.eventHost.disabled)try{const t=this.inputElement;if(!t)return;t.select(),yield navigator.clipboard.writeText(t.value),this.eventHost.dispatchActionEvent("nr-copy-success",{value:t.value,action:"copy"})}catch(t){this.handleError(t,"copy"),this.eventHost.dispatchActionEvent("nr-copy-error",{error:t,action:"copy"})}})),this.handleClear=()=>{if(this.eventHost.disabled||this.eventHost.readonly||!this.eventHost.allowClear)return;const t=this.eventHost.value;this.eventHost.value="";const r=this.inputElement;r&&(r.value="",r.focus()),this.eventHost.dispatchActionEvent("nr-clear",{previousValue:t,newValue:this.eventHost.value,target:r,action:"clear"}),this.eventHost.dispatchInputEvent("nr-input",{value:this.eventHost.value,target:r,action:"clear"})},this.handleTogglePassword=()=>{if("password"!==this.eventHost.type)return;const t="password"===this.eventHost.inputType?"text":"password";this.eventHost.inputType=t,this.requestUpdate(),this.eventHost.dispatchActionEvent("nr-password-toggle",{visible:"text"===t,action:"password-toggle"})},this.handleIncrement=()=>{"number"===this.eventHost.type&&this.eventHost.increment&&this.eventHost.increment()},this.handleDecrement=()=>{"number"===this.eventHost.type&&this.eventHost.decrement&&this.eventHost.decrement()}}get eventHost(){return this.host}get inputElement(){var t;return(null===(t=this.eventHost.shadowRoot)||void 0===t?void 0:t.querySelector("#input"))||null}handleNumericKeyDown(t){["Backspace","Delete","Tab","Escape","Enter","ArrowLeft","ArrowRight","ArrowUp","ArrowDown","Home","End"].includes(t.key)||t.ctrlKey||t.metaKey||"."!==t.key&&"-"!==t.key&&(/^\d$/.test(t.key)||t.preventDefault())}handleNumberIconAction(t){const r=t.classList.contains("increment")||t.closest(".increment"),i=t.classList.contains("decrement")||t.closest(".decrement");r?this.handleIncrement():i&&this.handleDecrement()}dispatchEnterEvent(t){this.eventHost.dispatchInputEvent("nr-enter",{value:this.eventHost.value,target:t.target,originalEvent:t})}validateNumericValue(t,r){}restoreCursorPosition(t){if(t.dataset.restoreCursor){const r=parseInt(t.dataset.restoreCursor,10);isNaN(r)||t.setSelectionRange(r,r),delete t.dataset.restoreCursor}}setFocusState(t){this.eventHost.hasOwnProperty("focused")&&(this.eventHost.focused=t,this.requestUpdate())}getCursorPosition(){if(this.eventHost.getCursorPosition)return this.eventHost.getCursorPosition();const t=this.inputElement;return t?t.selectionStart:null}getSelectedText(){if(this.eventHost.getSelectedText)return this.eventHost.getSelectedText();const t=this.inputElement;return t&&null!==t.selectionStart&&null!==t.selectionEnd?t.value.substring(t.selectionStart,t.selectionEnd):""}isReadonlyKeyAllowed(t){if(this.eventHost.isReadonlyKeyAllowed)return this.eventHost.isReadonlyKeyAllowed(t);return t.ctrlKey||t.metaKey?["KeyA","KeyC"].includes(t.code):["Tab","Escape","ArrowLeft","ArrowRight","ArrowUp","ArrowDown","Home","End","PageUp","PageDown"].includes(t.key)}isActivationKey(t){return this.eventHost.isActivationKey?this.eventHost.isActivationKey(t):"Enter"===t.key||" "===t.key}}
950
+ */var A=function(t,r,i,n){return new(i||(i=Promise))((function(a,e){function o(t){try{l(n.next(t))}catch(t){e(t)}}function s(t){try{l(n.throw(t))}catch(t){e(t)}}function l(t){var r;t.done?a(t.value):(r=t.value,r instanceof i?r:new i((function(t){t(r)}))).then(o,s)}l((n=n.apply(t,r||[])).next())}))};class E extends x{constructor(){super(...arguments),this.handleKeyDown=t=>{!this.eventHost.readonly||this.isReadonlyKeyAllowed(t)?"Enter"!==t.key?"number"===this.eventHost.type&&this.handleNumericKeyDown(t):this.dispatchEnterEvent(t):t.preventDefault()},this.handleValueChange=t=>{if(this.eventHost.readonly)return void t.preventDefault();const r=t.target,i=r.value;if(this.eventHost.maxLength&&i.length>this.eventHost.maxLength)return void t.preventDefault();"number"===this.eventHost.type&&i&&this.validateNumericValue(i,t),this.eventHost.value=i;const n=this.eventHost;n.validationController&&"function"==typeof n.validationController.validateOnChange&&n.validationController.validateOnChange(),this.eventHost.dispatchInputEvent("nr-input",{value:this.eventHost.value,target:r,originalEvent:t})},this.handleFocus=t=>{var r;this.setFocusState(!0);const i=t.target;this.restoreCursorPosition(i);const n={focused:!0,cursorPosition:null!==(r=this.getCursorPosition())&&void 0!==r?r:void 0,selectedText:this.getSelectedText()};this.eventHost.dispatchFocusEvent("nr-focus",Object.assign({target:t.target,value:this.eventHost.value},n)),this.eventHost.dispatchFocusEvent("nr-focus-change",n)},this.handleBlur=t=>{var r;this.setFocusState(!1);const i={focused:!1,cursorPosition:null!==(r=this.getCursorPosition())&&void 0!==r?r:void 0,selectedText:this.getSelectedText()},n=this.eventHost;n.validationController&&"function"==typeof n.validationController.validateOnBlur&&n.validationController.validateOnBlur(),this.eventHost.dispatchFocusEvent("nr-blur",Object.assign({target:t.target,value:this.eventHost.value},i)),this.eventHost.dispatchFocusEvent("nr-focus-change",i)},this.handleIconKeydown=t=>{if(!this.isActivationKey(t))return;t.preventDefault();const r=t.target;switch(r.id){case"copy-icon":this.handleCopy();break;case"clear-icon":this.handleClear();break;case"password-icon":this.handleTogglePassword();break;default:r.closest("#number-icons")&&this.handleNumberIconAction(r)}},this.handleCopy=()=>A(this,void 0,void 0,(function*(){if(this.eventHost.withCopy&&!this.eventHost.disabled)try{const t=this.inputElement;if(!t)return;t.select(),yield navigator.clipboard.writeText(t.value),this.eventHost.dispatchActionEvent("nr-copy-success",{value:t.value,action:"copy"})}catch(t){this.handleError(t,"copy"),this.eventHost.dispatchActionEvent("nr-copy-error",{error:t,action:"copy"})}})),this.handleClear=()=>{if(this.eventHost.disabled||this.eventHost.readonly||!this.eventHost.allowClear)return;const t=this.eventHost.value;this.eventHost.value="";const r=this.inputElement;r&&(r.value="",r.focus()),this.eventHost.dispatchActionEvent("nr-clear",{previousValue:t,newValue:this.eventHost.value,target:r,action:"clear"}),this.eventHost.dispatchInputEvent("nr-input",{value:this.eventHost.value,target:r,action:"clear"})},this.handleTogglePassword=()=>{if("password"!==this.eventHost.type)return;const t="password"===this.eventHost.inputType?"text":"password";this.eventHost.inputType=t,this.requestUpdate(),this.eventHost.dispatchActionEvent("nr-password-toggle",{visible:"text"===t,action:"password-toggle"})},this.handleIncrement=()=>{"number"===this.eventHost.type&&this.eventHost.increment&&this.eventHost.increment()},this.handleDecrement=()=>{"number"===this.eventHost.type&&this.eventHost.decrement&&this.eventHost.decrement()}}get eventHost(){return this.host}get inputElement(){var t;return(null===(t=this.eventHost.shadowRoot)||void 0===t?void 0:t.querySelector("#input"))||null}handleNumericKeyDown(t){["Backspace","Delete","Tab","Escape","Enter","ArrowLeft","ArrowRight","ArrowUp","ArrowDown","Home","End"].includes(t.key)||t.ctrlKey||t.metaKey||"."!==t.key&&"-"!==t.key&&(/^\d$/.test(t.key)||t.preventDefault())}handleNumberIconAction(t){const r=t.classList.contains("increment")||t.closest(".increment"),i=t.classList.contains("decrement")||t.closest(".decrement");r?this.handleIncrement():i&&this.handleDecrement()}dispatchEnterEvent(t){this.eventHost.dispatchInputEvent("nr-enter",{value:this.eventHost.value,target:t.target,originalEvent:t})}validateNumericValue(t,r){}restoreCursorPosition(t){if(t.dataset.restoreCursor){const r=parseInt(t.dataset.restoreCursor,10);isNaN(r)||t.setSelectionRange(r,r),delete t.dataset.restoreCursor}}setFocusState(t){this.eventHost.hasOwnProperty("focused")&&(this.eventHost.focused=t,this.requestUpdate())}getCursorPosition(){if(this.eventHost.getCursorPosition)return this.eventHost.getCursorPosition();const t=this.inputElement;return t?t.selectionStart:null}getSelectedText(){if(this.eventHost.getSelectedText)return this.eventHost.getSelectedText();const t=this.inputElement;return t&&null!==t.selectionStart&&null!==t.selectionEnd?t.value.substring(t.selectionStart,t.selectionEnd):""}isReadonlyKeyAllowed(t){if(this.eventHost.isReadonlyKeyAllowed)return this.eventHost.isReadonlyKeyAllowed(t);return t.ctrlKey||t.metaKey?["KeyA","KeyC"].includes(t.code):["Tab","Escape","ArrowLeft","ArrowRight","ArrowUp","ArrowDown","Home","End","PageUp","PageDown"].includes(t.key)}isActivationKey(t){return this.eventHost.isActivationKey?this.eventHost.isActivationKey(t):"Enter"===t.key||" "===t.key}}
44
951
  /**
45
952
  * @license
46
953
  * Copyright 2023 Nuraly, Laabidi Aymen
47
954
  * SPDX-License-Identifier: MIT
48
- */var E=function(t,r,i,n){for(var a,e=arguments.length,o=e<3?r:null===n?n=Object.getOwnPropertyDescriptor(r,i):n,s=t.length-1;s>=0;s--)(a=t[s])&&(o=(e<3?a(o):e>3?a(r,i,o):a(r,i))||o);return e>3&&o&&Object.defineProperty(r,i,o),o},N=function(t,r,i,n){return new(i||(i=Promise))((function(a,e){function o(t){try{l(n.next(t))}catch(t){e(t)}}function s(t){try{l(n.throw(t))}catch(t){e(t)}}function l(t){var r;t.done?a(t.value):(r=t.value,r instanceof i?r:new i((function(t){t(r)}))).then(o,s)}l((n=n.apply(t,r||[])).next())}))};let C=class extends(w(f(g(s(n))))){constructor(){super(...arguments),this.validationController=new z(this),this.eventController=new A(this),this.disabled=!1,this.readonly=!1,this.state="default",this.value="",this.size="medium",this.variant="underlined",this.type="text",this.placeholder="",this.autocomplete="off",this.withCopy=!1,this.allowClear=!1,this.showCount=!1,this.rules=[],this.validateOnChangeInput=!0,this.validateOnBlurInput=!0,this.hasFeedback=!1,this.allowWarnings=!1,this.validationTrigger="change",this.inputType="",this.hasAddonBefore=!1,this.hasAddonAfter=!1,this.focused=!1,this.requiredComponents=["nr-icon"],this._handleValidationEvent=t=>{const r=t.detail;this.validationMessage=r.validationMessage||"";let i="default";r.validationResult.hasError?i="error":r.validationResult.hasWarning&&this.allowWarnings?i="warning":r.validationResult.isValid&&this.value&&this.hasFeedback&&(i="success"),this.state!==i&&(this.state=i),this.requestUpdate()},this._handleKeyDown=t=>{this.eventController.handleKeyDown(t)},this._valueChange=t=>{this.eventController.handleValueChange(t)},this._focusEvent=t=>{this.eventController.handleFocus(t)},this._blurEvent=t=>{this.eventController.handleBlur(t)},this._handleIconKeydown=t=>{this.eventController.handleIconKeydown(t)}}get _input(){return this.shadowRoot.querySelector("#input")}get characterCountDisplay(){const t=this.value.length;return this.maxLength?`${t}/${this.maxLength}`:`${t}`}get isOverCharacterLimit(){return!!this.maxLength&&this.value.length>this.maxLength}get input(){return this._input}get inputElement(){return this._input}connectedCallback(){super.connectedCallback(),this.addEventListener("nr-validation",this._handleValidationEvent)}disconnectedCallback(){var t,r;super.disconnectedCallback(),this.removeEventListener("nr-validation",this._handleValidationEvent),null===(r=(t=this.validationController).clearDebounceTimer)||void 0===r||r.call(t)}willUpdate(t){super.willUpdate(t),!t.has("type")&&this.inputType||(this.inputType=this.type),(t.has("type")||t.has("min"))&&"number"===this.type&&this.min&&!this.value&&(this.value=this.min),(t.has("type")||t.has("min")||t.has("max")||t.has("step"))&&m.validateNumericProperties(this.type,this.min,this.max,this.step),(t.has("type")||t.has("required")||t.has("maxLength")||t.has("min")||t.has("max"))&&this.validationController.setupValidationRules()}updated(t){if(t.has("step")||t.has("min")||t.has("max")||t.has("maxLength")){const t=this.input;t&&(this.setStep(this.step),this.min?t.setAttribute("min",this.min):t.removeAttribute("min"),this.max?t.setAttribute("max",this.max):t.removeAttribute("max"),this.maxLength?t.setAttribute("maxlength",this.maxLength.toString()):t.removeAttribute("maxlength"))}}firstUpdated(){this._checkInitialSlotContent()}_checkInitialSlotContent(){const t=this.querySelectorAll('[slot="addon-before"]');this.hasAddonBefore=t.length>0;const r=this.querySelectorAll('[slot="addon-after"]');this.hasAddonAfter=r.length>0}_handleSlotChange(t){const r=t.target,i=r.name;"addon-before"===i?this.hasAddonBefore=r.assignedElements().length>0:"addon-after"===i&&(this.hasAddonAfter=r.assignedElements().length>0)}_onCopy(){return N(this,void 0,void 0,(function*(){yield this.eventController.handleCopy()}))}_onClear(){this.eventController.handleClear()}_increment(){this.eventController.handleIncrement()}_decrement(){this.eventController.handleDecrement()}_togglePasswordIcon(){this.eventController.handleTogglePassword()}_getAriaDescribedBy(){var t;const r=[],i=null===(t=this.shadowRoot)||void 0===t?void 0:t.querySelector('slot[name="helper-text"]');return i&&i.assignedNodes().length>0&&r.push("helper-text"),r.join(" ")||""}validateValue(t){return this.validationController.validate()}addRule(t){this.validationController.addRule(t)}removeRule(t){this.validationController.removeRule(t)}clearRules(){this.validationController.clearRules()}getValidationStatus(){return this.validationController.getValidationStatus()}validateInput(){return N(this,void 0,void 0,(function*(){const t=this.validationController.validate();return this.validationController.isValidating?new Promise((t=>{const r=()=>{this.validationController.isValidating?setTimeout(r,50):t(this.validationController.isValid)};r()})):t}))}setValidationStatus(t){this.validationController.setValidationStatus(t)}getValidationClasses(){return this.validationController.getValidationClasses()}renderValidationIcon(){return this.validationController.renderValidationIcon()}renderValidationMessage(){return this.validationController.renderValidationMessage()}render(){const t=this.getValidationClasses(),i=this.validationController.getValidationRenderState();return r`<slot name="label"></slot><div class="input-wrapper ${Object.entries(t).filter((([,t])=>t)).map((([t])=>t)).join(" ")}" part="input-wrapper" data-theme="${this.currentTheme}" ?data-validating="${i.isValidating}">${y.renderAddonBefore(this.hasAddonBefore,(t=>this._handleSlotChange(t)))}<div data-size="${this.size}" id="input-container" part="input-container">${y.renderPrefix()} <input id="input" part="input" .disabled="${this.disabled}" .readOnly="${this.readonly}" .value="${this.value}" .placeholder="${this.placeholder}" .type="${this.inputType}" .autocomplete="${this.autocomplete}" aria-invalid="${i.validationResult.hasError?"true":"false"}" aria-describedby="${this._getAriaDescribedBy()}" @input="${this._valueChange}" @focus="${this._focusEvent}" @blur="${this._blurEvent}" @keydown="${this._handleKeyDown}"> ${y.renderSuffix()} ${y.renderCopyIcon(this.withCopy,this.disabled,this.readonly,(()=>this._onCopy()),(t=>this._handleIconKeydown(t)))} ${y.renderClearIcon(this.allowClear,this.value,this.disabled,this.readonly,(()=>this._onClear()),(t=>this._handleIconKeydown(t)))} ${i.hasValidationFeedback?this.renderValidationIcon():y.renderStateIcon(this.state)} ${y.renderCalendarIcon(this.state,this.type)} ${y.renderPasswordIcon(this.type,this.inputType,this.disabled,this.readonly,(()=>this._togglePasswordIcon()),(t=>this._handleIconKeydown(t)))} ${y.renderNumberIcons(this.type,this.state,this.disabled,this.readonly,(()=>this._increment()),(()=>this._decrement()),(t=>this._handleIconKeydown(t)))}</div>${y.renderAddonAfter(this.hasAddonAfter,(t=>this._handleSlotChange(t)))}</div><slot name="helper-text"></slot>${this.renderValidationMessage()} ${this.showCount?r`<div class="character-count" part="character-count" ?data-over-limit="${this.isOverCharacterLimit}">${this.characterCountDisplay}</div>`:""}`}};C.styles=l,E([a({type:Boolean,reflect:!0})],C.prototype,"disabled",void 0),E([a({type:Boolean,reflect:!0})],C.prototype,"readonly",void 0),E([a({type:String,reflect:!0})],C.prototype,"state",void 0),E([a({type:String})],C.prototype,"value",void 0),E([a({type:String})],C.prototype,"size",void 0),E([a({type:String,reflect:!0})],C.prototype,"variant",void 0),E([a({reflect:!0})],C.prototype,"type",void 0),E([a({type:String})],C.prototype,"step",void 0),E([a({type:String})],C.prototype,"min",void 0),E([a({type:String})],C.prototype,"max",void 0),E([a({type:String})],C.prototype,"placeholder",void 0),E([a({type:String})],C.prototype,"autocomplete",void 0),E([a({type:String})],C.prototype,"name",void 0),E([a({type:Boolean})],C.prototype,"required",void 0),E([a({type:Boolean,reflect:!0})],C.prototype,"withCopy",void 0),E([a({type:Boolean,reflect:!0})],C.prototype,"allowClear",void 0),E([a({type:Boolean,reflect:!0})],C.prototype,"showCount",void 0),E([a({type:Number})],C.prototype,"maxLength",void 0),E([a({type:Array})],C.prototype,"rules",void 0),E([a({type:Boolean,attribute:"validate-on-change"})],C.prototype,"validateOnChangeInput",void 0),E([a({type:Boolean,attribute:"validate-on-blur"})],C.prototype,"validateOnBlurInput",void 0),E([a({type:Boolean,attribute:"has-feedback"})],C.prototype,"hasFeedback",void 0),E([a({type:Boolean,attribute:"allow-warnings"})],C.prototype,"allowWarnings",void 0),E([a({type:String,attribute:"validation-trigger"})],C.prototype,"validationTrigger",void 0),E([a({type:Number,attribute:"validation-debounce"})],C.prototype,"validationDebounce",void 0),E([a({type:String})],C.prototype,"label",void 0),E([e()],C.prototype,"validationMessage",void 0),E([e()],C.prototype,"inputType",void 0),E([e()],C.prototype,"hasAddonBefore",void 0),E([e()],C.prototype,"hasAddonAfter",void 0),E([e()],C.prototype,"focused",void 0),C=E([o("nr-input")],C);var P=Object.freeze({__proto__:null,PORT:/^(?:[1-9]\d{0,4}|[1-5]\d{5}|6[0-4]\d{4}|65[0-4]\d{3}|655[0-2]\d{2}|6553[0-5])$/,NOT_EMPTY:/^.+$/});export{C as NrInputElement,P as Validations};
955
+ */var z=function(t,r,i,n){for(var a,e=arguments.length,o=e<3?r:null===n?n=Object.getOwnPropertyDescriptor(r,i):n,s=t.length-1;s>=0;s--)(a=t[s])&&(o=(e<3?a(o):e>3?a(r,i,o):a(r,i))||o);return e>3&&o&&Object.defineProperty(r,i,o),o},N=function(t,r,i,n){return new(i||(i=Promise))((function(a,e){function o(t){try{l(n.next(t))}catch(t){e(t)}}function s(t){try{l(n.throw(t))}catch(t){e(t)}}function l(t){var r;t.done?a(t.value):(r=t.value,r instanceof i?r:new i((function(t){t(r)}))).then(o,s)}l((n=n.apply(t,r||[])).next())}))};let C=class extends(w(f(g(s(n))))){constructor(){super(...arguments),this.validationController=new $(this),this.eventController=new E(this),this.disabled=!1,this.readonly=!1,this.state="default",this.value="",this.size="medium",this.variant="underlined",this.type="text",this.placeholder="",this.autocomplete="off",this.withCopy=!1,this.allowClear=!1,this.showCount=!1,this.rules=[],this.validateOnChangeInput=!0,this.validateOnBlurInput=!0,this.hasFeedback=!1,this.allowWarnings=!1,this.validationTrigger="change",this.inputType="",this.hasAddonBefore=!1,this.hasAddonAfter=!1,this.focused=!1,this.requiredComponents=["nr-icon"],this._handleValidationEvent=t=>{const r=t.detail;this.validationMessage=r.validationMessage||"";let i="default";r.validationResult.hasError?i="error":r.validationResult.hasWarning&&this.allowWarnings?i="warning":r.validationResult.isValid&&this.value&&this.hasFeedback&&(i="success"),this.state!==i&&(this.state=i),this.requestUpdate()},this._handleKeyDown=t=>{this.eventController.handleKeyDown(t)},this._valueChange=t=>{this.eventController.handleValueChange(t)},this._focusEvent=t=>{this.eventController.handleFocus(t)},this._blurEvent=t=>{this.eventController.handleBlur(t)},this._handleIconKeydown=t=>{this.eventController.handleIconKeydown(t)}}get _input(){return this.shadowRoot.querySelector("#input")}get characterCountDisplay(){const t=this.value.length;return this.maxLength?`${t}/${this.maxLength}`:`${t}`}get isOverCharacterLimit(){return!!this.maxLength&&this.value.length>this.maxLength}get input(){return this._input}get inputElement(){return this._input}connectedCallback(){super.connectedCallback(),this.addEventListener("nr-validation",this._handleValidationEvent)}disconnectedCallback(){var t,r;super.disconnectedCallback(),this.removeEventListener("nr-validation",this._handleValidationEvent),null===(r=(t=this.validationController).clearDebounceTimer)||void 0===r||r.call(t)}willUpdate(t){super.willUpdate(t),!t.has("type")&&this.inputType||(this.inputType=this.type),(t.has("type")||t.has("min"))&&"number"===this.type&&this.min&&!this.value&&(this.value=this.min),(t.has("type")||t.has("min")||t.has("max")||t.has("step"))&&b.validateNumericProperties(this.type,this.min,this.max,this.step),(t.has("type")||t.has("required")||t.has("maxLength")||t.has("min")||t.has("max"))&&this.validationController.setupValidationRules()}updated(t){if(t.has("step")||t.has("min")||t.has("max")||t.has("maxLength")){const t=this.input;t&&(this.setStep(this.step),this.min?t.setAttribute("min",this.min):t.removeAttribute("min"),this.max?t.setAttribute("max",this.max):t.removeAttribute("max"),this.maxLength?t.setAttribute("maxlength",this.maxLength.toString()):t.removeAttribute("maxlength"))}}firstUpdated(){this._checkInitialSlotContent()}_checkInitialSlotContent(){const t=this.querySelectorAll('[slot="addon-before"]');this.hasAddonBefore=t.length>0;const r=this.querySelectorAll('[slot="addon-after"]');this.hasAddonAfter=r.length>0}_handleSlotChange(t){const r=t.target,i=r.name;"addon-before"===i?this.hasAddonBefore=r.assignedElements().length>0:"addon-after"===i&&(this.hasAddonAfter=r.assignedElements().length>0)}_onCopy(){return N(this,void 0,void 0,(function*(){yield this.eventController.handleCopy()}))}_onClear(){this.eventController.handleClear()}_increment(){this.eventController.handleIncrement()}_decrement(){this.eventController.handleDecrement()}_togglePasswordIcon(){this.eventController.handleTogglePassword()}_getAriaDescribedBy(){var t;const r=[],i=null===(t=this.shadowRoot)||void 0===t?void 0:t.querySelector('slot[name="helper-text"]');return i&&i.assignedNodes().length>0&&r.push("helper-text"),r.join(" ")||""}validateValue(t){return this.validationController.validate()}addRule(t){this.validationController.addRule(t)}removeRule(t){this.validationController.removeRule(t)}clearRules(){this.validationController.clearRules()}getValidationStatus(){return this.validationController.getValidationStatus()}validateInput(){return N(this,void 0,void 0,(function*(){const t=this.validationController.validate();return this.validationController.isValidating?new Promise((t=>{const r=()=>{this.validationController.isValidating?setTimeout(r,50):t(this.validationController.isValid)};r()})):t}))}setValidationStatus(t){this.validationController.setValidationStatus(t)}getValidationClasses(){return this.validationController.getValidationClasses()}renderValidationIcon(){return this.validationController.renderValidationIcon()}renderValidationMessage(){return this.validationController.renderValidationMessage()}render(){const t=this.getValidationClasses(),i=this.validationController.getValidationRenderState();return r`
956
+ <slot name="label"></slot>
957
+ <div class="input-wrapper ${Object.entries(t).filter((([,t])=>t)).map((([t])=>t)).join(" ")}"
958
+ part="input-wrapper"
959
+ data-theme="${this.currentTheme}"
960
+ ?data-validating="${i.isValidating}">
961
+ ${y.renderAddonBefore(this.hasAddonBefore,(t=>this._handleSlotChange(t)))}
962
+ <div data-size=${this.size} id="input-container" part="input-container">
963
+ ${y.renderPrefix()}
964
+ <input
965
+ id="input"
966
+ part="input"
967
+ .disabled=${this.disabled}
968
+ .readOnly=${this.readonly}
969
+ .value=${this.value}
970
+ .placeholder=${this.placeholder}
971
+ .type="${this.inputType}"
972
+ .autocomplete=${this.autocomplete}
973
+ aria-invalid=${i.validationResult.hasError?"true":"false"}
974
+ aria-describedby=${this._getAriaDescribedBy()}
975
+ @input=${this._valueChange}
976
+ @focus=${this._focusEvent}
977
+ @blur=${this._blurEvent}
978
+ @keydown=${this._handleKeyDown}
979
+ />
980
+ ${y.renderSuffix()}
981
+ ${y.renderCopyIcon(this.withCopy,this.disabled,this.readonly,(()=>this._onCopy()),(t=>this._handleIconKeydown(t)))}
982
+ ${y.renderClearIcon(this.allowClear,this.value,this.disabled,this.readonly,(()=>this._onClear()),(t=>this._handleIconKeydown(t)))}
983
+ ${i.hasValidationFeedback?this.renderValidationIcon():y.renderStateIcon(this.state)}
984
+ ${y.renderCalendarIcon(this.state,this.type)}
985
+ ${y.renderPasswordIcon(this.type,this.inputType,this.disabled,this.readonly,(()=>this._togglePasswordIcon()),(t=>this._handleIconKeydown(t)))}
986
+ ${y.renderNumberIcons(this.type,this.state,this.disabled,this.readonly,(()=>this._increment()),(()=>this._decrement()),(t=>this._handleIconKeydown(t)))}
987
+ </div>
988
+ ${y.renderAddonAfter(this.hasAddonAfter,(t=>this._handleSlotChange(t)))}
989
+ </div>
990
+ <slot name="helper-text"></slot>
991
+ ${this.renderValidationMessage()}
992
+ ${this.showCount?r`
993
+ <div class="character-count" part="character-count" ?data-over-limit=${this.isOverCharacterLimit}>
994
+ ${this.characterCountDisplay}
995
+ </div>
996
+ `:""}
997
+ `}};C.styles=l,z([a({type:Boolean,reflect:!0})],C.prototype,"disabled",void 0),z([a({type:Boolean,reflect:!0})],C.prototype,"readonly",void 0),z([a({type:String,reflect:!0})],C.prototype,"state",void 0),z([a({type:String})],C.prototype,"value",void 0),z([a({type:String})],C.prototype,"size",void 0),z([a({type:String,reflect:!0})],C.prototype,"variant",void 0),z([a({reflect:!0})],C.prototype,"type",void 0),z([a({type:String})],C.prototype,"step",void 0),z([a({type:String})],C.prototype,"min",void 0),z([a({type:String})],C.prototype,"max",void 0),z([a({type:String})],C.prototype,"placeholder",void 0),z([a({type:String})],C.prototype,"autocomplete",void 0),z([a({type:String})],C.prototype,"name",void 0),z([a({type:Boolean})],C.prototype,"required",void 0),z([a({type:Boolean,reflect:!0})],C.prototype,"withCopy",void 0),z([a({type:Boolean,reflect:!0})],C.prototype,"allowClear",void 0),z([a({type:Boolean,reflect:!0})],C.prototype,"showCount",void 0),z([a({type:Number})],C.prototype,"maxLength",void 0),z([a({type:Array})],C.prototype,"rules",void 0),z([a({type:Boolean,attribute:"validate-on-change"})],C.prototype,"validateOnChangeInput",void 0),z([a({type:Boolean,attribute:"validate-on-blur"})],C.prototype,"validateOnBlurInput",void 0),z([a({type:Boolean,attribute:"has-feedback"})],C.prototype,"hasFeedback",void 0),z([a({type:Boolean,attribute:"allow-warnings"})],C.prototype,"allowWarnings",void 0),z([a({type:String,attribute:"validation-trigger"})],C.prototype,"validationTrigger",void 0),z([a({type:Number,attribute:"validation-debounce"})],C.prototype,"validationDebounce",void 0),z([a({type:String})],C.prototype,"label",void 0),z([e()],C.prototype,"validationMessage",void 0),z([e()],C.prototype,"inputType",void 0),z([e()],C.prototype,"hasAddonBefore",void 0),z([e()],C.prototype,"hasAddonAfter",void 0),z([e()],C.prototype,"focused",void 0),C=z([o("nr-input")],C);var I=Object.freeze({__proto__:null,PORT:/^(?:[1-9]\d{0,4}|[1-5]\d{5}|6[0-4]\d{4}|65[0-4]\d{3}|655[0-2]\d{2}|6553[0-5])$/,NOT_EMPTY:/^.+$/});export{C as NrInputElement,I as Validations};
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@nuralyui/input",
3
- "version": "0.0.14",
3
+ "version": "0.0.15",
4
4
  "description": "",
5
5
  "main": "index.js",
6
6
  "type": "module",