@sky.ui/core 0.0.23 → 0.0.25

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 (107) hide show
  1. package/dist/custom-elements.json +1299 -1299
  2. package/dist/helper/controllers/animation-controller.js.map +1 -1
  3. package/dist/helper/controllers/index.js +2 -0
  4. package/dist/helper/controllers/index.js.map +1 -0
  5. package/dist/helper/controllers/popover-controller.js +1 -1
  6. package/dist/helper/controllers/popover-controller.js.map +1 -1
  7. package/dist/helper/form-control-base.js +2 -0
  8. package/dist/helper/form-control-base.js.map +1 -0
  9. package/dist/helper/iconify-offline.js.map +1 -1
  10. package/dist/helper/index.js +2 -0
  11. package/dist/helper/index.js.map +1 -0
  12. package/dist/helper/internals/form-control-base.js +1 -1
  13. package/dist/helper/internals/form-control-base.js.map +1 -1
  14. package/dist/helper/internals/index.js +2 -0
  15. package/dist/helper/internals/index.js.map +1 -0
  16. package/dist/helper/utils/color-resolver.js.map +1 -1
  17. package/dist/helper/utils/index.js +2 -0
  18. package/dist/helper/utils/index.js.map +1 -0
  19. package/dist/helper/utils/size-resolver.js.map +1 -1
  20. package/dist/sky-alert/index.js.map +1 -0
  21. package/dist/sky-alert/sky-alert.js +45 -45
  22. package/dist/sky-alert/sky-alert.js.map +1 -1
  23. package/dist/sky-appbar/index.js.map +1 -0
  24. package/dist/sky-appbar/sky-appbar.js +30 -30
  25. package/dist/sky-appbar/sky-appbar.js.map +1 -1
  26. package/dist/sky-avatar/index.js.map +1 -0
  27. package/dist/sky-avatar/sky-avatar.js +25 -25
  28. package/dist/sky-avatar/sky-avatar.js.map +1 -1
  29. package/dist/sky-badge/index.js.map +1 -0
  30. package/dist/sky-badge/sky-badge.d.ts +1 -1
  31. package/dist/sky-badge/sky-badge.js +27 -27
  32. package/dist/sky-badge/sky-badge.js.map +1 -1
  33. package/dist/sky-button/index.js.map +1 -0
  34. package/dist/sky-button/sky-button.js +25 -25
  35. package/dist/sky-button/sky-button.js.map +1 -1
  36. package/dist/sky-card/index.js.map +1 -0
  37. package/dist/sky-card/sky-card.js +22 -22
  38. package/dist/sky-card/sky-card.js.map +1 -1
  39. package/dist/sky-checkbox/index.js.map +1 -0
  40. package/dist/sky-checkbox/sky-checkbox.d.ts +2 -2
  41. package/dist/sky-checkbox/sky-checkbox.js +43 -43
  42. package/dist/sky-checkbox/sky-checkbox.js.map +1 -1
  43. package/dist/sky-chip/index.js.map +1 -0
  44. package/dist/sky-chip/sky-chip.js +35 -35
  45. package/dist/sky-chip/sky-chip.js.map +1 -1
  46. package/dist/sky-col/index.js.map +1 -0
  47. package/dist/sky-col/sky-col.js +7 -7
  48. package/dist/sky-col/sky-col.js.map +1 -1
  49. package/dist/sky-combobox/index.js.map +1 -0
  50. package/dist/sky-combobox/sky-combobox.d.ts +2 -2
  51. package/dist/sky-combobox/sky-combobox.js +244 -244
  52. package/dist/sky-combobox/sky-combobox.js.map +1 -1
  53. package/dist/sky-dialog/index.js.map +1 -0
  54. package/dist/sky-dialog/sky-dialog.js +43 -43
  55. package/dist/sky-dialog/sky-dialog.js.map +1 -1
  56. package/dist/sky-divider/index.js.map +1 -0
  57. package/dist/sky-divider/sky-divider.js +16 -16
  58. package/dist/sky-divider/sky-divider.js.map +1 -1
  59. package/dist/sky-flexbox/index.js.map +1 -0
  60. package/dist/sky-flexbox/sky-flexbox.js +9 -9
  61. package/dist/sky-flexbox/sky-flexbox.js.map +1 -1
  62. package/dist/sky-flexcol/index.js.map +1 -0
  63. package/dist/sky-flexcol/sky-flexcol.js +2 -2
  64. package/dist/sky-flexcol/sky-flexcol.js.map +1 -1
  65. package/dist/sky-form/index.js.map +1 -0
  66. package/dist/sky-form/sky-form.js +12 -12
  67. package/dist/sky-form/sky-form.js.map +1 -1
  68. package/dist/sky-grid/index.js.map +1 -0
  69. package/dist/sky-grid/sky-grid.js +6 -6
  70. package/dist/sky-grid/sky-grid.js.map +1 -1
  71. package/dist/sky-icon/index.js.map +1 -0
  72. package/dist/sky-icon/sky-icon.js +13 -13
  73. package/dist/sky-icon/sky-icon.js.map +1 -1
  74. package/dist/sky-image/index.js.map +1 -0
  75. package/dist/sky-image/sky-image.js +21 -21
  76. package/dist/sky-image/sky-image.js.map +1 -1
  77. package/dist/sky-image/srcset-utils.js.map +1 -1
  78. package/dist/sky-input/index.js.map +1 -0
  79. package/dist/sky-input/sky-input.d.ts +2 -2
  80. package/dist/sky-input/sky-input.js +225 -225
  81. package/dist/sky-input/sky-input.js.map +1 -1
  82. package/dist/sky-list/index.js.map +1 -0
  83. package/dist/sky-list/sky-list.js +6 -6
  84. package/dist/sky-list/sky-list.js.map +1 -1
  85. package/dist/sky-listitem/index.js.map +1 -0
  86. package/dist/sky-listitem/sky-listitem.js +31 -31
  87. package/dist/sky-listitem/sky-listitem.js.map +1 -1
  88. package/dist/sky-radio/index.js.map +1 -0
  89. package/dist/sky-radio/sky-radio.d.ts +2 -2
  90. package/dist/sky-radio/sky-radio.js +27 -27
  91. package/dist/sky-radio/sky-radio.js.map +1 -1
  92. package/dist/sky-row/index.js.map +1 -0
  93. package/dist/sky-row/sky-row.js +2 -2
  94. package/dist/sky-row/sky-row.js.map +1 -1
  95. package/dist/sky-sheet/index.js.map +1 -0
  96. package/dist/sky-sheet/sky-sheet.js +2 -2
  97. package/dist/sky-sheet/sky-sheet.js.map +1 -1
  98. package/dist/sky-simple-table/index.js.map +1 -0
  99. package/dist/sky-simple-table/sky-simple-table.js +34 -34
  100. package/dist/sky-simple-table/sky-simple-table.js.map +1 -1
  101. package/dist/sky-theme-provider/index.js.map +1 -0
  102. package/dist/sky-theme-provider/sky-theme-provider.js +2 -2
  103. package/dist/sky-theme-provider/sky-theme-provider.js.map +1 -1
  104. package/package.json +2 -2
  105. package/plugins/rollup-plugin.d.ts +5 -8
  106. package/plugins/vite-plugin.d.ts +5 -8
  107. package/plugins/webpack-plugin.d.ts +3 -7
@@ -1 +1 @@
1
- {"version":3,"file":"sky-input.js","sources":["../../src/sky-input/sky-input.ts"],"sourcesContent":[null],"names":["SkyInput","FormControlBase","constructor","this","value","placeholder","label","type","suffix","prefix","prefixColor","suffixColor","color","_validations","compact","loading","showErrors","clearable","errorDisplayMode","required","step","min","max","autocapitalize","autocomplete","spellcheck","dir","rows","resizable","accept","multiple","inputmode","enterkeyhint","pattern","minlength","maxlength","list","size","cols","autofocus","capture","inputRole","ariaLabel","ariaLabelledby","ariaDescribedby","showNumberButtons","showPasswordToggle","passwordVisibleIcon","passwordHiddenIcon","validationActive","invalid","variant","selectedFileName","selectedFiles","focused","validationStatus","validationErrors","typingStarted","autofillIconSlot","autofillGuardActive","showPassword","totalFileSize","selectedFileCount","filePreview","_leftIconSlot","_rightIconSlot","_iconClickWired","WeakSet","_onLeftIconSlotChange","_wireIconSlot","_onRightIconSlotChange","keepInputFocused","e","preventDefault","stopPropagation","refocusInput","dependencies","SkyIcon","validations","old","Array","isArray","requestUpdate","styles","css","shadowRootOptions","LitElement","delegatesFocus","connectedCallback","super","hasAttribute","tabIndex","disabled","hasUpdated","_setupIconSlots","disconnectedCallback","removeEventListener","shadowRoot","querySelector","addEventListener","side","slot","node","assignedElements","flatten","HTMLElement","has","add","handleIconClick","firstUpdated","_changedProperties","captureDefaultValue","syncFormValue","syncValidity","willUpdate","changedProperties","map","String","trim","updated","style","setProperty","resolveColor","inputWrapper","inputWrapperEl","getFormValue","name","length","fd","FormData","f","append","setValueFromFormState","state","getValidityAnchor","isEmpty","toString","getCustomErrorMessage","join","getNativeControl","onNativeValueMutated","native","validateInput","reset","nativeRequiredMessage","requiredMessage","getEmittedValue","n","Number","isFinite","handleClear","readonly","dispatchEvent","CustomEvent","detail","bubbles","composed","handleFileChange","event","files","target","fileList","from","file","totalSize","reduce","total","startsWith","reader","FileReader","onload","result","readAsDataURL","reemitNativeEvent","fileName","fileCount","handleKeydown","key","triggerNativeDropdown","preview","handleInput","handleFocus","releaseAutofillGuard","handleAutofillGuardPointerDown","onFormReset","defaultValue","handleBlur","validateForForm","payload","v","r","isFileInput","validation","index","Error","push","error","message","errors","isValid","getErrorMessages","slice","position","eventType","eventData","formatFileSize","bytes","i","Math","floor","log","parseFloat","pow","toFixed","incrementValue","currentValue","Infinity","decrementValue","renderValidationErrors","requiredMsg","customMsgs","msgs","errId","id","html","m","togglePasswordVisibility","focusInput","input","nativeInputEl","focus","handleWrapperClick","isInvalid","matches","describedById","undefined","el","preventScroll","click","showPicker","isFilterSearchInput","nativeAutocomplete","nativeTextInputType","isPassword","nativeInputMode","nativeEnterKeyHint","nativeInputRole","affixColorStyle","trimmed","renderInputAffix","kind","nothing","styleMap","render","isTextarea","isNumberInput","supportsInlineAffixes","hasLeftSlot","hasRightSlot","autoIcon","showFilePreview","showAutoIconInLeft","showAutoIconInRight","ImagePreview","ifDefined","FileControl","Boolean","TextareaControl","live","TextInputControl","LeftIconSlot","NumberButtons","PasswordToggle","ClearButton","RightIconSlot","FileInfo","__decorate","property","prototype","reflect","query","customElement"],"mappings":"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"}
1
+ {"version":3,"file":"sky-input.js","sources":["../../src/sky-input/sky-input.ts"],"sourcesContent":["import { LitElement, html, css, nothing } from \"lit\";\nimport { ifDefined } from \"lit/directives/if-defined.js\";\nimport { styleMap } from \"lit/directives/style-map.js\";\nimport { customElement, property, query, state } from \"lit/decorators.js\";\nimport { resolveColor } from \"../helper/utils/color-resolver\";\nimport { live } from \"lit/directives/live.js\";\nimport { FormControlBase } from \"../helper/internals/form-control-base\";\nimport { SkyIcon } from \"../sky-icon/sky-icon.js\";\n\nexport type SkyInputValue = string | number | File[] | null;\nexport type SkyInputType = string;\nexport type SkyInputErrorDisplayMode = \"none\" | \"single\" | \"all\";\nexport type SkyInputIconPosition = \"left\" | \"right\";\nexport type SkyInputValidation = (value: string | File[]) => true | string;\nexport type SkyInputValueChangedDetail = { value: string | number };\nexport type SkyInputValueClearedDetail = { value: string | number };\nexport type SkyInputFileSelectedDetail = {\n files: File[];\n fileName: string;\n totalSize: number;\n fileCount: number;\n};\nexport type SkyInputValidationErrorDetail = { errors: string[] };\nexport type SkyInputIconClickDetail = {\n position: SkyInputIconPosition;\n eventType: string | null;\n eventData: Event | null;\n};\n\n/**\n * @element sky-input\n *\n * @summary Versatile form input supporting text, password, number, textarea, and file workflows.\n *\n * @status stable\n * @since 1.0.0\n *\n * @documentation https://library.sky-ui.com/components/input\n * @dependency sky-icon\n *\n * @uiVModel value value-changed\n *\n * @slot icon-left - Optional icon/content placed in the left slot.\n * @slot icon-right - Optional icon/content placed in the right slot.\n * @property {SkyInputValue} value - Current input value.\n * @property {string} placeholder - Placeholder text.\n * @property {string} label - Label text shown above the input.\n * @property {SkyInputType} type - Input type (`text`, `password`, `number`, `textarea`, `file`, etc.).\n * @property {string} suffix - Optional suffix label fragment.\n * @property {string} prefix - Optional prefix label fragment.\n * @property {string} prefixColor - Prefix color override.\n * @property {string} suffixColor - Suffix color override.\n * @property {string} color - Accent color token/value.\n * @property {SkyInputValidation[]} validations - Validation functions.\n * @property {boolean} compact - Compact display mode.\n * @property {boolean} loading - Loading state.\n * @property {boolean} showErrors - Enables error rendering.\n * @property {boolean} clearable - Enables clear button.\n * @property {SkyInputErrorDisplayMode} errorDisplayMode - Error rendering mode.\n * @property {boolean} showNumberButtons - Enables number increment/decrement controls.\n * @property {boolean} showPasswordToggle - Enables password visibility toggle.\n * @property {string} passwordVisibleIcon - Icon used when password is visible.\n * @property {string} passwordHiddenIcon - Icon used when password is hidden.\n *\n * @fires {CustomEvent<SkyInputValueChangedDetail>} value-changed - Fired when value changes.\n * @fires {CustomEvent<SkyInputValueClearedDetail>} value-cleared - Fired after clear action.\n * @fires {CustomEvent<SkyInputFileSelectedDetail>} file-selected - Fired after file selection changes.\n * @fires {CustomEvent<SkyInputValidationErrorDetail>} validation-error - Fired after validations run.\n * @fires {CustomEvent<SkyInputIconClickDetail>} left-icon-click - Fired when left icon slot is clicked.\n * @fires {CustomEvent<SkyInputIconClickDetail>} right-icon-click - Fired when right icon slot is clicked.\n *\n * @method validateInput Runs configured validations and updates invalid state.\n * @method handleClear Clears value and emits corresponding events.\n * @method formatFileSize Formats byte size for UI display.\n * @method focusInput Focuses the underlying native input or textarea.\n *\n * @csspart input-container - The outer container wrapping label and input wrapper.\n * @csspart label - The label element above the input.\n * @csspart input-wrapper - The wrapper around input/textarea and icons.\n * @csspart icon-slot - Base class for left/right icon slots.\n * @csspart icon-slot-left - Left icon slot.\n * @csspart icon-slot-right - Right icon slot.\n * @csspart clear-button - The clear/reset button.\n * @csspart toggle-password - The toggle icon for password visibility.\n * @csspart loading-indicator - The spinner shown when loading.\n * @csspart error-list - UL element containing validation errors.\n * @csspart error - Individual error message.\n * @csspart file-info - File count and size info below the file input.\n * @csspart input-prefix - Inline prefix fragment inside the field.\n * @csspart input-suffix - Inline suffix fragment inside the field.\n *\n * @Behavior\n * - Extends `FormControlBase` for automatic form association and validation integration\n * - Supports all standard HTML input types with enhanced styling and functionality\n * - File inputs with multi-file support, preview, and size tracking\n * - Automatic validation integration with parent forms via `sky-form`\n *\n * - **none**: No error messages displayed\n * - **single**: Show only the first error message\n * - **all**: Show all validation error messages\n *\n * @example\n * ```html\n * <sky-input\n * label=\"Password\"\n * type=\"password\"\n * placeholder=\"Enter your password\"\n * clearable\n * show-password-toggle\n * required\n * >\n * <sky-icon slot=\"icon-left\" icon=\"ion:lock-closed\"></sky-icon>\n * </sky-input>\n * ```\n * ```vue\n * <template>\n * <sky-input label=\"Password\" type=\"password\" clearable show-password-toggle required>\n * <sky-icon slot=\"icon-left\" icon=\"ion:lock-closed\"></sky-icon>\n * </sky-input>\n * </template>\n * ```\n * ```jsx\n * export default function Demo() {\n * return (\n * <sky-input label=\"Password\" type=\"password\" clearable show-password-toggle required>\n * <sky-icon slot=\"icon-left\" icon=\"ion:lock-closed\"></sky-icon>\n * </sky-input>\n * );\n * }\n * ```\n */\n@customElement(\"sky-input\")\nexport class SkyInput extends FormControlBase {\n\n static dependencies: Record<string, CustomElementConstructor> = {\n \"sky-icon\": SkyIcon,\n };\n\n // ============================================================\n // ✅ PUBLIC PROPERTIES (user-configurable)\n // ============================================================\n\n @property({ type: String }) value: SkyInputValue = \"\";\n @property({ type: String }) placeholder = \"\";\n @property({ type: String }) label = \"\";\n @property({ type: String }) type: SkyInputType = \"text\";\n @property({ type: String }) suffix = \"\";\n @property({ type: String }) prefix = \"\";\n @property({ type: String }) prefixColor = \"\";\n @property({ type: String }) suffixColor = \"\";\n @property({ type: String }) color = \"primary\";\n private _validations: SkyInputValidation[] = [];\n @property({ type: Array })\n get validations(): SkyInputValidation[] {\n return this._validations;\n }\n set validations(value: SkyInputValidation[] | null | undefined) {\n const old = this._validations;\n this._validations = Array.isArray(value) ? value : [];\n this.requestUpdate(\"validations\", old);\n }\n @property({ type: Boolean, reflect: true }) compact = false;\n @property({ type: Boolean, reflect: true }) loading = false;\n @property({ type: Boolean }) showErrors = false;\n @property({ type: Boolean, reflect: true }) clearable = false;\n @property({ type: String }) errorDisplayMode: SkyInputErrorDisplayMode = \"single\";\n @property({ type: Boolean, reflect: true }) override required = false;\n @property({ type: String }) step: string | null = null;\n @property({ type: String }) min: string | null = null;\n @property({ type: String }) max: string | null = null;\n @property({ type: String }) override autocapitalize = \"off\";\n @property({ type: String }) autocomplete = \"off\";\n @property({ type: Boolean }) override spellcheck = false;\n @property({ type: String }) override dir = \"ltr\";\n @property({ type: Number }) rows = 6;\n @property({ type: String }) resizable = \"none\";\n @property({ type: String }) accept = \"\";\n @property({ type: Boolean }) multiple = false;\n @property({ type: String }) inputmode: string | null = null;\n @property({ type: String }) enterkeyhint: string | null = null;\n @property({ type: String }) pattern: string | null = null;\n @property({ type: Number }) minlength: number | null = null;\n @property({ type: Number }) maxlength: number | null = null;\n @property({ type: String }) list: string | null = null;\n @property({ type: Number }) size: number | null = null;\n @property({ type: Number }) cols: number | null = null;\n @property({ type: Boolean }) autofocus = false;\n @property({ type: Boolean }) capture = false;\n @property({ type: String }) inputRole: string | null = null;\n @property({ type: String }) ariaLabel: string | null = null;\n @property({ type: String }) ariaLabelledby: string | null = null;\n @property({ type: String }) ariaDescribedby: string | null = null;\n @property({ type: Boolean }) showNumberButtons = false;\n @property({ type: Boolean }) showPasswordToggle = true;\n @property({ type: String }) passwordVisibleIcon = \"material-symbols:visibility-off\";\n @property({ type: String }) passwordHiddenIcon = \"material-symbols:visibility\";\n @property({ type: Boolean, reflect: true }) validationActive = false;\n @property({ type: Boolean, reflect: true }) invalid = false;\n @property({ type: String, reflect: true }) variant = 'default';\n\n // ============================================================\n // ✅ INTERNAL STATE (read-only, managed by component)\n // ============================================================\n\n @state() private selectedFileName = \"\";\n @state() private selectedFiles: File[] = [];\n @state() private focused = false;\n @state() private validationStatus: boolean[] = [];\n @state() private validationErrors: string[] = [];\n @state() private typingStarted = false;\n @state() private autofillIconSlot = \"left\";\n @state() private autofillGuardActive = false;\n @state() private showPassword = false;\n @state() private totalFileSize = 0;\n @state() private selectedFileCount = 0;\n @state() private filePreview: string | ArrayBuffer | null = null;\n\n // ============================================================\n // ✅ PRIVATE FIELDS (internal, not reactive)\n // ============================================================\n\n @query(\".input-wrapper\") private inputWrapperEl!: HTMLElement;\n @query(\"input, textarea\") private nativeInputEl!:\n | HTMLInputElement\n | HTMLTextAreaElement;\n\n private _leftIconSlot: HTMLSlotElement | null = null;\n private _rightIconSlot: HTMLSlotElement | null = null;\n private _iconClickWired = new WeakSet<HTMLElement>();\n private _onLeftIconSlotChange = () =>\n this._wireIconSlot(\"left\", this._leftIconSlot);\n private _onRightIconSlotChange = () =>\n this._wireIconSlot(\"right\", this._rightIconSlot);\n\n static override styles = css`\n :host {\n display: block;\n font-family: var(--sky-font);\n width: 100%;\n }\n\n :host([disabled]) .input-container {\n opacity: var(--sky-opacity-disabled, 0.6);\n }\n :host([disabled]) * {\n pointer-events: none;\n }\n\n :host([variant=\"highlight\"]){\n .label{\n color: var(--sky-input-color);\n }\n }\n\n .input-container {\n position: relative;\n display: flex;\n flex-direction: column;\n width: inherit;\n cursor: text;\n }\n\n sky-icon {\n display: inline-block;\n width: 1em;\n height: 1em;\n }\n\n .input-container:focus-within .label {\n color: var(--sky-input-color);\n font-size: var(--sky-font-size-sm);\n transition: all 0.3s ease;\n }\n .label {\n font-size: var(--sky-font-size-sm);\n margin-bottom: var(--sky-space-1, 4px);\n text-align: start;\n white-space: nowrap;\n overflow: hidden;\n text-overflow: ellipsis;\n font-family: var(--sky-font);\n }\n\n .input-container:focus-within[compact] .label {\n font-size: var(--sky-font-size-xs);\n color: var(--sky-input-color);\n }\n\n .input-wrapper {\n position: relative;\n display: flex;\n width: 100%;\n align-items: center;\n box-sizing: border-box;\n height: 38px;\n pointer-events: auto;\n background: var(--sky-glass-solid);\n backdrop-filter: none;\n -webkit-backdrop-filter: none;\n border-radius: var(--sky-radius-secondary);\n border: var(--sky-border-primary);\n box-shadow: var(--sky-box-shadow-primary);\n transition:\n border-color var(--sky-transition-normal, 200ms ease),\n box-shadow var(--sky-transition-normal, 200ms ease);\n }\n\n .input-wrapper::after {\n content: \"\";\n position: absolute;\n top: -1px;\n left: -1px;\n right: -1px;\n bottom: -1px;\n border-radius: inherit;\n border: 1px solid transparent;\n border-bottom-color: transparent;\n opacity: 0;\n transition:\n opacity 0.3s ease,\n border-color 0.3s ease;\n pointer-events: none;\n }\n\n .input-wrapper:has(input:focus-visible)::after,\n .input-wrapper:has(textarea:focus-visible)::after {\n opacity: 1;\n border-bottom-color: var(--sky-input-color);\n }\n\n .input-wrapper:has(input:focus)::after,\n .input-wrapper:has(textarea:focus)::after {\n opacity: 1;\n border-bottom-color: var(--sky-input-color);\n }\n\n :host([validationActive]:invalid) .input-wrapper::after {\n opacity: 1;\n border-bottom-color: var(--sky-danger-primary);\n }\n :host([validationActive]:invalid) .label {\n color: var(--sky-danger-primary);\n }\n\n :host([validationActive]:invalid) .icon-slot {\n color: var(--sky-danger-primary);\n }\n\n .input-wrapper[compact] {\n height: 30px;\n border: var(--sky-border-primary);\n }\n\n input[type=\"date\"],\n input[type=\"time\"],\n input[type=\"week\"],\n input[type=\"month\"],\n input[type=\"datetime-local\"] {\n -webkit-appearance: none;\n -moz-appearance: none;\n appearance: none;\n background: none;\n border: none;\n font-family: inherit;\n }\n\n input[type=\"date\"]::-webkit-calendar-picker-indicator,\n input[type=\"time\"]::-webkit-calendar-picker-indicator,\n input[type=\"week\"]::-webkit-calendar-picker-indicator,\n input[type=\"month\"]::-webkit-calendar-picker-indicator,\n input[type=\"datetime-local\"]::-webkit-calendar-picker-indicator {\n display: none;\n }\n\n .input-wrapper:has(input:focus)[compact]::after {\n border: 1px solid var(--sky-input-color);\n }\n\n .toggle-password[compact] {\n font-size: var(--sky-font-size-md);\n }\n\n input {\n font-family: var(--sky-font);\n font-size: var(--sky-font-size-md);\n text-align: left;\n transition: transform var(--sky-transition-normal, 200ms ease);\n }\n\n input:-webkit-autofill {\n -webkit-text-fill-color: var(--sky-text-secondary, inherit) !important;\n transition: background-color 9999s ease-in-out 0s !important;\n }\n\n :dir(rtl) input {\n text-align: right;\n }\n\n input[type=\"number\"] {\n appearance: textfield;\n -moz-appearance: textfield;\n }\n\n input[type=\"number\"]::-webkit-inner-spin-button,\n input[type=\"number\"]::-webkit-outer-spin-button {\n -webkit-appearance: none;\n margin: 0;\n }\n .number-btn {\n display: flex;\n flex-shrink: 0;\n margin-inline-end: var(--sky-space-1, 4px);\n gap: var(--sky-space-1, 4px);\n }\n\n :dir(rtl).number-btn {\n margin-inline-end: var(--sky-space-1, 4px);\n }\n\n .file-info {\n display: flex;\n justify-content: flex-end;\n font-size: var(--sky-font-size-xs);\n color: var(--sky-text-secondary);\n font-family: var(--sky-font);\n }\n\n :dir(rtl).file-info {\n flex-direction: row-reverse;\n }\n\n .increment-btn,\n .decrement-btn {\n background: var(--sky-glass-solid);\n color: var(--sky-text-primary);\n border: var(--sky-border-primary);\n border-radius: var(--sky-radius-primary);\n display: flex;\n align-items: center;\n justify-content: center;\n padding: var(--sky-space-0\\\\.5, 2px) var(--sky-space-1\\\\.5, 6px);\n font-size: var(--sky-font-size-sm);\n cursor: pointer;\n transition: color var(--sky-transition-normal, 200ms ease);\n font-family: var(--sky-font);\n }\n\n .increment-btn:hover,\n .decrement-btn:hover {\n color: var(--sky-input-color);\n }\n\n .toggle-password {\n flex-shrink: 0;\n display: flex;\n align-items: center;\n justify-content: center;\n margin-inline-end: var(--sky-space-1, 4px);\n font-size: var(--sky-font-size-lg);\n color: var(--sky-text-tertiary);\n cursor: pointer;\n }\n\n .toggle-password:hover {\n color: var(--sky-input-color);\n }\n\n input {\n flex: 1 1 auto;\n min-width: 0;\n border: none;\n outline: none;\n background: transparent;\n box-sizing: border-box;\n color: var(--sky-text-primary);\n padding-block: 0;\n padding-inline: var(--sky-space-3, 12px);\n }\n\n input::placeholder {\n color: var(--sky-text-tertiary);\n }\n\n .input-affix {\n flex: 0 0 auto;\n font-family: var(--sky-font);\n font-size: var(--sky-font-size-md);\n font-weight: var(--sky-font-weight-medium);\n color: var(--sky-text-secondary);\n user-select: none;\n white-space: nowrap;\n line-height: 1;\n }\n\n .input-affix.prefix {\n padding-inline-start: var(--sky-space-3, 12px);\n padding-inline-end: var(--sky-space-1, 4px);\n }\n\n .input-affix.suffix {\n padding-inline-start: var(--sky-space-1, 4px);\n padding-inline-end: var(--sky-space-2, 8px);\n }\n\n .input-wrapper[compact] .input-affix {\n font-size: var(--sky-font-size-sm);\n }\n\n .input-wrapper:has(.input-affix.prefix) input,\n .input-wrapper:has(.input-affix.prefix) textarea {\n padding-inline-start: var(--sky-space-1, 4px);\n }\n\n .input-wrapper:has(.icon-slot[filled].left) input,\n .input-wrapper:has(.icon-slot[filled].left) textarea {\n padding-inline-start: var(--sky-space-1, 4px);\n }\n\n .custom-file-label__text {\n flex: 1 1 auto;\n min-width: 0;\n overflow: hidden;\n text-overflow: ellipsis;\n color: var(--sky-text-tertiary);\n padding-inline-end: var(--sky-space-3, 12px);\n }\n\n .custom-file-label:not(:has(.input-affix.prefix)) .custom-file-label__text {\n padding-inline-start: var(--sky-space-3, 12px);\n }\n\n .custom-file-label__text[data-filled] {\n color: var(--sky-text-primary);\n }\n\n .icon-slot {\n display: none;\n justify-content: center;\n font-size: var(--sky-font-size-xl);\n align-items: center;\n color: var(--sky-text-primary);\n border-radius: var(--sky-radius-secondary);\n height: inherit;\n max-height: 100%;\n box-sizing: border-box;\n min-width: 36px;\n background: var(--sky-glass-solid);\n backdrop-filter: none;\n -webkit-backdrop-filter: none;\n transition:\n transform var(--sky-transition-normal, 200ms ease),\n color var(--sky-transition-normal, 200ms ease);\n }\n\n .input-wrapper:has(textarea) .icon-slot {\n max-height: 38px;\n border-bottom: var(--sky-border-primary);\n }\n\n .icon-slot[filled] {\n display: flex;\n flex-shrink: 0;\n cursor: pointer;\n }\n .icon-slot[filled]:hover {\n transform: translate(-5px, -5px);\n color: var(--sky-input-color);\n }\n .icon-slot.right[filled]:hover {\n transform: translate(5px, -5px);\n color: var(--sky-input-color);\n }\n\n .icon-slot.focused {\n transform: translate(-5px, -5px);\n color: var(--sky-input-color);\n border: var(--sky-border-primary) !important;\n }\n\n :dir(rtl) .icon-slot[filled]:hover {\n transform: translate(5px, -5px);\n }\n\n :dir(rtl) .icon-slot.right[filled]:hover {\n transform: translate(-5px, -5px);\n }\n\n :dir(rtl) .icon-slot.focused {\n transform: translate(5px, -5px);\n }\n\n .icon-slot.right {\n border-left: var(--sky-border-primary);\n }\n .icon-slot.left {\n border-right: var(--sky-border-primary);\n }\n\n :dir(rtl) .icon-slot.right {\n border-left: unset;\n border-right: var(--sky-border-primary);\n }\n :dir(rtl) .icon-slot.left {\n border-right: unset;\n border-left: var(--sky-border-primary);\n }\n\n .icon-slot.right.focused {\n transform: translate(5px, -5px);\n }\n\n :dir(rtl) .icon-slot.right.focused {\n transform: translate(-5px, -5px);\n }\n\n .progress-message {\n pointer-events: none;\n width: 100%;\n overflow: hidden;\n white-space: nowrap;\n text-overflow: ellipsis;\n font-size: var(--sky-font-size-sm);\n margin-left: 5px;\n font-family: var(--sky-font);\n }\n\n :dir(rtl) .progress-message {\n margin-left: unset;\n margin-right: 5px;\n }\n\n .error-list {\n list-style: none;\n margin: 0;\n padding: 0;\n width: 100%;\n }\n\n .error {\n font-size: var(--sky-font-size-xs);\n color: var(--sky-danger-primary);\n text-align: start;\n white-space: nowrap;\n overflow: hidden;\n text-overflow: ellipsis;\n font-family: var(--sky-font);\n }\n\n ::slotted(.icon-slot) {\n display: block;\n }\n\n .input-wrapper[loading] input {\n cursor: wait;\n }\n\n .loading-indicator {\n flex-shrink: 0;\n margin-inline-end: var(--sky-space-1, 4px);\n width: 16px;\n height: 16px;\n border: 2px solid var(--sky-hover-primary);\n border-top: 2px solid var(--sky-input-color);\n border-radius: var(--sky-radius-full);\n animation: spin 1s linear infinite;\n }\n\n .loading-indicator[compact] {\n width: 10px;\n height: 10px;\n }\n\n .input-wrapper[loading] .icon-slot.right {\n display: none;\n }\n\n @keyframes spin {\n 0% {\n transform: rotate(0deg);\n }\n 100% {\n transform: rotate(360deg);\n }\n }\n\n .clear-button {\n flex-shrink: 0;\n margin-inline-end: var(--sky-space-1, 4px);\n border: none;\n font-size: var(--sky-font-size-xl);\n color: var(--sky-input-color);\n background-color: var(--sky-hover-primary);\n border-radius: var(--sky-radius-full);\n backdrop-filter: none;\n -webkit-backdrop-filter: none;\n cursor: pointer;\n transition: color var(--sky-transition-normal, 200ms ease);\n }\n\n .clear-button[compact] {\n font-size: var(--sky-font-size-md);\n }\n\n .clear-button[loading] {\n opacity: 0.6;\n pointer-events: none;\n }\n\n input[type=\"file\"] {\n position: absolute;\n width: 100%;\n height: 100%;\n opacity: 0;\n pointer-events: auto;\n z-index: -1;\n }\n\n .custom-file-label {\n position: relative;\n flex: 1;\n display: flex;\n align-items: center;\n gap: var(--sky-space-1, 4px);\n text-align: left;\n padding: 0;\n color: var(--sky-input-color);\n border-radius: var(--sky-radius-secondary);\n overflow: hidden;\n white-space: nowrap;\n text-overflow: ellipsis;\n cursor: pointer;\n transition:\n background 0.3s ease,\n padding 0.3s ease;\n font-family: var(--sky-font);\n }\n\n .custom-file-label:hover .custom-file-label__text {\n padding-inline-start: var(--sky-space-2\\\\.5, 10px);\n }\n\n .custom-file-label:empty::after {\n content: \"Choose file\";\n color: var(--sky-input-color);\n }\n\n .clear-button:hover {\n color: var(--sky-danger-primary);\n }\n\n textarea {\n flex: 1 1 auto;\n min-width: 0;\n border: none;\n outline: none;\n background: transparent;\n box-sizing: border-box;\n color: var(--sky-text-primary);\n padding: var(--sky-space-2\\\\.5, 10px) var(--sky-space-3, 12px);\n resize: none;\n overflow: auto;\n font-family: var(--sky-font);\n }\n\n textarea[resizable=\"vertical\"] {\n resize: vertical;\n }\n\n textarea[resizable=\"both\"] {\n resize: both;\n }\n\n textarea {\n scrollbar-width: thin;\n scrollbar-color: var(--sky-scrollbar-thumb) var(--sky-scrollbar-track);\n }\n\n textarea::-webkit-scrollbar {\n width: 6px;\n height: 6px;\n }\n\n textarea::-webkit-scrollbar-thumb {\n background-color: var(--sky-scrollbar-thumb);\n border-radius: var(--sky-radius-full, 9999px);\n transition: background-color var(--sky-duration-normal, 200ms)\n var(--sky-ease-default, ease);\n cursor: grab;\n }\n\n textarea::-webkit-scrollbar-thumb:hover {\n background-color: var(--sky-scrollbar-thumb-hover);\n }\n\n textarea::-webkit-scrollbar-track {\n background: var(--sky-scrollbar-track);\n }\n\n textarea::-webkit-scrollbar-button {\n display: none;\n }\n\n textarea::placeholder {\n color: var(--sky-text-tertiary);\n }\n\n .input-wrapper:has(textarea) {\n height: calc((var(--rows)) * 23px);\n align-items: flex-start;\n }\n textarea {\n height: calc((var(--rows)) * 23px);\n }\n\n @media (prefers-reduced-motion: reduce) {\n .loading-indicator {\n animation: none;\n }\n\n .input-container:focus-within .label,\n .input-wrapper,\n .icon-slot,\n .increment-btn,\n .decrement-btn,\n .clear-button,\n input,\n textarea,\n .custom-file-label {\n transition: none;\n }\n }\n `;\n\n static override shadowRootOptions = {\n ...LitElement.shadowRootOptions,\n delegatesFocus: true,\n };\n\n override connectedCallback(): void {\n super.connectedCallback();\n this.autofillGuardActive = this.type === \"search\";\n\n // Make the host focusable\n if (!this.hasAttribute(\"tabindex\")) {\n this.tabIndex = this.disabled ? -1 : 0;\n }\n\n if (this.hasUpdated) {\n this._setupIconSlots();\n }\n }\n\n override disconnectedCallback(): void {\n this._leftIconSlot?.removeEventListener(\n \"slotchange\",\n this._onLeftIconSlotChange,\n );\n this._rightIconSlot?.removeEventListener(\n \"slotchange\",\n this._onRightIconSlotChange,\n );\n this._leftIconSlot = null;\n this._rightIconSlot = null;\n super.disconnectedCallback();\n }\n\n private _setupIconSlots(): void {\n if (!this._leftIconSlot) {\n this._leftIconSlot =\n this.shadowRoot?.querySelector<HTMLSlotElement>(\n 'slot[name=\"icon-left\"]',\n ) ?? null;\n this._leftIconSlot?.addEventListener(\n \"slotchange\",\n this._onLeftIconSlotChange,\n );\n }\n if (!this._rightIconSlot) {\n this._rightIconSlot =\n this.shadowRoot?.querySelector<HTMLSlotElement>(\n 'slot[name=\"icon-right\"]',\n ) ?? null;\n this._rightIconSlot?.addEventListener(\n \"slotchange\",\n this._onRightIconSlotChange,\n );\n }\n this._wireIconSlot(\"left\", this._leftIconSlot);\n this._wireIconSlot(\"right\", this._rightIconSlot);\n }\n\n private _wireIconSlot(\n side: \"left\" | \"right\",\n slot: HTMLSlotElement | null,\n ): void {\n if (!slot) return;\n for (const node of slot.assignedElements({ flatten: true })) {\n if (!(node instanceof HTMLElement)) continue;\n if (this._iconClickWired.has(node)) continue;\n this._iconClickWired.add(node);\n node.addEventListener(\"click\", () => this.handleIconClick(side));\n }\n }\n\n override firstUpdated(\n _changedProperties: Map<string | number | symbol, unknown>,\n ) {\n super.firstUpdated(_changedProperties);\n\n // default/reset value\n this.captureDefaultValue(this.value as string);\n\n // initial sync into form\n this.syncFormValue();\n this.syncValidity();\n\n this._setupIconSlots();\n }\n\n override willUpdate(\n changedProperties: Map<string | number | symbol, unknown>,\n ) {\n if (\n changedProperties.has(\"validations\") &&\n Array.isArray(this.validations)\n ) {\n this.validationStatus = this.validations.map(() => false);\n }\n\n if (changedProperties.has(\"value\") && this.type === \"file\") {\n if (this.value == null || String(this.value).trim() === \"\") {\n this.selectedFileName = \"\";\n this.selectedFiles = [];\n this.totalFileSize = 0;\n this.selectedFileCount = 0;\n this.filePreview = null;\n } else if (!this.selectedFileName) {\n this.selectedFileName = this.value as string;\n }\n }\n if (changedProperties.has(\"type\") && this.type === \"search\") {\n this.autofillGuardActive = true;\n }\n }\n\n override updated(changedProperties: Map<string | number | symbol, unknown>) {\n super.updated(changedProperties);\n\n if (changedProperties.has(\"color\") && this.color) {\n this.style.setProperty(\"--sky-input-color\", resolveColor(this.color));\n }\n\n if (changedProperties.has(\"rows\")) {\n const inputWrapper = this.inputWrapperEl;\n if (inputWrapper) {\n inputWrapper.style.setProperty(\"--rows\", String(this.rows));\n }\n }\n\n if (\n changedProperties.has(\"value\") ||\n changedProperties.has(\"selectedFiles\") ||\n changedProperties.has(\"selectedFileName\") ||\n changedProperties.has(\"type\") ||\n changedProperties.has(\"multiple\") ||\n changedProperties.has(\"name\") ||\n changedProperties.has(\"disabled\")\n ) {\n this.syncFormValue();\n }\n\n if (\n changedProperties.has(\"value\") ||\n changedProperties.has(\"selectedFiles\") ||\n changedProperties.has(\"selectedFileName\") ||\n changedProperties.has(\"validationErrors\") ||\n changedProperties.has(\"required\") ||\n changedProperties.has(\"disabled\") ||\n changedProperties.has(\"readonly\")\n ) {\n this.syncValidity();\n }\n }\n\n /** @protected */\n protected override getFormValue(): string | File | FormData | null {\n if (!this.name) return null;\n\n if (this.type === \"file\") {\n if (!this.selectedFiles || this.selectedFiles.length === 0) return null;\n\n if (this.multiple) {\n const fd = new FormData();\n for (const f of this.selectedFiles) fd.append(this.name, f);\n return fd;\n }\n return this.selectedFiles[0];\n }\n\n return this.value as string ?? \"\";\n }\n\n /** @protected */\n protected override setValueFromFormState(\n state: string | File | FormData | null,\n ) {\n // For SkyInput, state restore is typically string\n if (typeof state === \"string\") {\n this.value = state;\n // for textarea/input UI to refresh, you already use live()\n return;\n }\n\n // For file state restore: browsers usually won't restore actual File objects for security.\n // So do a safe reset:\n this.value = \"\";\n this.selectedFileName = \"\";\n this.selectedFiles = [];\n this.totalFileSize = 0;\n this.selectedFileCount = 0;\n this.filePreview = null;\n }\n\n /** @protected */\n protected override getValidityAnchor(): HTMLElement | undefined {\n return this;\n }\n\n /** @protected */\n protected override isEmpty(): boolean {\n if (this.type === \"file\") {\n return !this.selectedFiles || this.selectedFiles.length === 0;\n }\n return !this.value || this.value.toString().trim() === \"\";\n }\n\n /** @protected */\n protected override getCustomErrorMessage(): string {\n if (!this.validationErrors?.length) return \"\";\n\n // single message that includes all\n if (this.errorDisplayMode === \"all\") {\n return this.validationErrors.join(\"\\n\");\n }\n\n // single mode\n return this.validationErrors[0];\n }\n\n /** @protected */\n protected override getNativeControl(): HTMLElement | null {\n if (this.type === \"textarea\") {\n return this.shadowRoot?.querySelector(\n \"textarea\",\n ) as HTMLTextAreaElement | null;\n }\n // for all other types (text/email/password/date/...)\n return this.shadowRoot?.querySelector(\"input\") as HTMLInputElement | null;\n }\n\n /** @protected */\n protected override onNativeValueMutated(native: any): void {\n // IMPORTANT: file input is managed via change handler; don't trust setting native.value\n if (this.type !== \"file\") {\n this.value = native?.value ?? \"\";\n }\n // keep SkyInput custom validations in sync\n this.validateInput();\n }\n\n /**\n * Resets the input field to its initial state.\n * @public\n */\n reset() {\n this.value = \"\";\n this.selectedFileName = \"\";\n this.filePreview = null;\n this.selectedFiles = [];\n this.selectedFileCount = 0;\n this.validationErrors = [];\n this.typingStarted = false;\n this.validationActive = false;\n this.selectedFileCount = 0;\n this.totalFileSize = 0;\n }\n\n /** @private */\n private get nativeRequiredMessage(): string {\n if (!this.validationActive) return \"\";\n if (this.disabled) return \"\";\n if (this.required && this.isEmpty())\n return this.requiredMessage || \"This field is required.\";\n return \"\";\n }\n\n /** @private */\n private getEmittedValue(): string | number {\n if (this.type !== \"number\") return this.value as string;\n\n // allow empty to stay empty (important for clearing)\n if (this.value === \"\" || this.value == null) return \"\";\n\n const n = Number(this.value);\n // if user is still typing an invalid numeric token, keep as string\n return Number.isFinite(n) ? n : this.value as string;\n }\n\n /**\n * Clears the input value and resets typing state.\n * @public\n */\n handleClear() {\n if (this.disabled || this.readonly) {\n return;\n }\n this.reset();\n this.validationActive = true;\n this.validateInput();\n this.dispatchEvent(\n new CustomEvent<SkyInputValueChangedDetail>(\"value-changed\", {\n detail: { value: this.getEmittedValue() },\n bubbles: true,\n composed: true,\n }),\n );\n this.dispatchEvent(\n new CustomEvent<SkyInputValueClearedDetail>(\"value-cleared\", {\n detail: { value: this.getEmittedValue() },\n bubbles: true,\n composed: true,\n }),\n );\n }\n\n /**\n * Handles the `change` event triggered by the file input element.\n * @param {Event} event - The event object generated by the file input element when files are selected.\n * @public\n */\n handleFileChange(event: Event): void {\n if (this.disabled || this.readonly) {\n return;\n }\n const input = event.target as HTMLInputElement;\n const files = input.files;\n\n if (files && files.length) {\n const fileList: File[] = Array.from(files);\n this.selectedFiles = fileList;\n this.selectedFileName = fileList\n .map((file: File) => file.name)\n .join(\", \");\n this.value = this.selectedFileName;\n\n this.syncFormValue();\n this.syncValidity();\n\n const totalSize: number = fileList.reduce(\n (total: number, file: File) => total + file.size,\n 0,\n );\n this.totalFileSize = totalSize;\n\n this.selectedFileCount = fileList.length;\n\n if (fileList[0].type.startsWith(\"image/\")) {\n const reader = new FileReader();\n reader.onload = (e: ProgressEvent<FileReader>) => {\n if (e.target) {\n this.filePreview = e.target.result;\n }\n };\n reader.readAsDataURL(fileList[0]);\n } else {\n this.filePreview = null;\n }\n\n this.reemitNativeEvent(\"change\", event);\n this.reemitNativeEvent(\"input\", event);\n\n this.dispatchEvent(\n new CustomEvent<SkyInputFileSelectedDetail>(\"file-selected\", {\n detail: {\n files: fileList,\n fileName: this.selectedFileName,\n totalSize,\n fileCount: this.selectedFileCount,\n },\n bubbles: true,\n composed: true,\n }),\n );\n\n this.validateInput();\n } else {\n this.value = \"\";\n this.filePreview = null;\n this.totalFileSize = 0;\n this.selectedFileCount = 0;\n this.selectedFiles = [];\n this.validateInput();\n }\n }\n\n /**\n * Handles the keydown event for the input component.\n * @param event - The keyboard event triggered by the user.\n * @private\n */\n private handleKeydown(event: KeyboardEvent) {\n if (this.disabled || this.readonly) {\n return;\n }\n if (event.key === \"Enter\" && this.type === \"file\") {\n event.preventDefault();\n event.stopPropagation();\n this.triggerNativeDropdown();\n }\n }\n\n /**\n * Gets the current file preview.\n * @returns The preview of the file, as stored in `filePreview`.\n * @public\n */\n get preview() {\n return this.filePreview;\n }\n\n /**\n * Handles the input event for the input field.\n * @param {Event} event - The input event triggered by user interaction.\n * @public\n */\n handleInput(event: Event) {\n event.stopPropagation();\n\n if (this.disabled || this.readonly) {\n event.preventDefault();\n return;\n }\n\n this.value = (event.target as HTMLInputElement | HTMLTextAreaElement).value;\n\n this.syncFormValue(); // ✅ IMPORTANT\n this.syncValidity(); // ✅ optional but good\n\n if (!this.typingStarted) this.typingStarted = true;\n\n this.validateInput();\n\n this.reemitNativeEvent(\"input\", event);\n\n this.dispatchEvent(\n new CustomEvent<SkyInputValueChangedDetail>(\"value-changed\", {\n detail: { value: this.getEmittedValue() },\n bubbles: true,\n composed: true,\n }),\n );\n }\n\n /**\n * Handles the focus event for the input field.\n * @public\n */\n handleFocus(event: Event) {\n event.stopPropagation();\n this.releaseAutofillGuard();\n this.focused = true;\n this.reemitNativeEvent(\"focus\", event);\n }\n\n /** Chrome may autofill saved usernames into filter fields; readonly until interaction blocks that. */\n private releaseAutofillGuard(): void {\n if (!this.autofillGuardActive) return;\n this.autofillGuardActive = false;\n }\n\n private handleAutofillGuardPointerDown(event: Event): void {\n this.releaseAutofillGuard();\n event.stopPropagation();\n }\n\n /** @protected */\n protected override onFormReset() {\n // restore default value (or blank)\n this.setValueFromFormState(this.defaultValue);\n\n // ✅ reset UI state\n this.validationActive = false;\n this.invalid = false;\n this.typingStarted = false;\n this.validationErrors = [];\n this.validationStatus = [];\n\n // If file:\n if (this.type === \"file\") {\n this.selectedFiles = [];\n this.selectedFileName = \"\";\n this.totalFileSize = 0;\n this.selectedFileCount = 0;\n this.filePreview = null;\n }\n\n if (this.type === \"search\") {\n this.autofillGuardActive = true;\n }\n }\n\n /**\n * Handles the blur event for the input field.\n * @public\n */\n handleBlur(event: Event) {\n event.stopPropagation();\n this.validationActive = true;\n this.focused = false;\n this.reemitNativeEvent(\"blur\", event);\n }\n\n /** @protected */\n protected override validateForForm(): string {\n // run your `this.validations` against current value even if validationActive is false\n const payload =\n this.type === \"file\" ? (this.selectedFiles ?? []) : (this.value ?? \"\");\n\n for (const v of this.validations ?? []) {\n const r = v(payload as string | File[]);\n if (r !== true) return typeof r === \"string\" ? r : \"Invalid value.\";\n }\n\n return \"\";\n }\n\n /**\n * Validates the input value against the configured validation rules.\n * @returns {boolean} True if validation passes, false otherwise.\n * @public\n */\n validateInput(): boolean {\n // reset\n this.validationErrors = [];\n this.validationStatus = [];\n\n const isFileInput = this.type === \"file\";\n const isEmpty = isFileInput\n ? !this.selectedFiles || this.selectedFiles.length === 0\n : !this.value || this.value.toString().trim() === \"\";\n\n // 1) If empty + required -> let SkyFormControlBase handle native required\n // (do NOT push required into validationErrors)\n if (this.required && isEmpty) {\n this.syncValidity(); // will set valueMissing\n }\n\n // 2) Run custom validations only if there is something to validate\n if (Array.isArray(this.validations) && this.validations.length) {\n const payload: string | File[] = isFileInput\n ? (this.selectedFiles ?? [])\n : (this.value as string ?? \"\");\n\n this.validationStatus = this.validations.map((validation, index) => {\n try {\n if (typeof validation !== \"function\") {\n throw new Error(`Validation at index ${index} must be a function.`);\n }\n\n const result = validation(payload);\n\n if (result !== true) {\n this.validationErrors.push(\n typeof result === \"string\"\n ? result\n : `Validation ${index} failed.`,\n );\n return false;\n }\n\n return true;\n } catch (error) {\n const message =\n typeof error === \"object\" && error !== null && \"message\" in error\n ? String((error as any).message)\n : typeof error === \"string\"\n ? error\n : \"Unknown error\";\n\n this.validationErrors.push(\n `Error in validation ${index}: ${message}`,\n );\n return false;\n }\n });\n }\n // 3) Dispatch event with all accumulated errors\n this.dispatchEvent(\n new CustomEvent<SkyInputValidationErrorDetail>(\"validation-error\", {\n detail: { errors: this.validationErrors },\n bubbles: true,\n composed: true,\n }),\n );\n\n this.syncValidity();\n\n const isValid = this.validationErrors.length === 0;\n this.invalid = !isValid;\n\n return isValid;\n }\n\n /**\n * Retrieves validation error messages based on the configured error display mode.\n * @returns {Array} - An array of error messages to display.\n * @private\n */\n private getErrorMessages() {\n switch (this.errorDisplayMode) {\n case \"single\":\n return this.validationErrors.slice(0, 1);\n case \"all\":\n return this.validationErrors;\n case \"none\":\n default:\n return [];\n }\n }\n\n /**\n * Handles click events for the left or right icon slots.\n * @param {String} position - The position of the icon (\"left\" or \"right\").\n * @param {Event|null} event - The original event triggered by the click (optional).\n * @public\n */\n handleIconClick(position: \"left\" | \"right\", event: Event | null = null) {\n this.dispatchEvent(\n new CustomEvent<SkyInputIconClickDetail>(`${position}-icon-click`, {\n detail: {\n position,\n eventType: event ? event.type : null,\n eventData: event,\n },\n bubbles: true,\n composed: true,\n }),\n );\n }\n\n /**\n * Formats a file size in bytes into a human-readable string.\n * @param {number} bytes - The file size in bytes.\n * @returns {string} - The formatted file size string.\n * @public\n */\n formatFileSize(bytes: number): string {\n if (bytes === 0) return \"0 Bytes\";\n\n const k = 1024;\n const sizes = [\"Bytes\", \"KB\", \"MB\", \"GB\", \"TB\"];\n const i = Math.floor(Math.log(bytes) / Math.log(k));\n\n return `${parseFloat((bytes / Math.pow(k, i)).toFixed(2))} ${sizes[i]}`;\n }\n\n /**\n * Increments the input value by the specified step, respecting min/max constraints.\n * @private\n */\n private incrementValue() {\n if (this.disabled || this.readonly) return;\n const currentValue = parseFloat(this.value as string) || 0;\n const step = parseFloat(this.step ?? \"\") || 1;\n const max = this.max ? parseFloat(this.max) : Infinity;\n\n if (currentValue + step <= max) {\n this.value = (currentValue + step).toString();\n this.validateInput();\n this.dispatchEvent(\n new CustomEvent<SkyInputValueChangedDetail>(\"value-changed\", {\n detail: { value: this.getEmittedValue() },\n }),\n );\n }\n this.refocusInput();\n }\n\n /**\n * Decrements the input value by the specified step, respecting min/max constraints.\n * @private\n */\n private decrementValue() {\n if (this.disabled || this.readonly) return;\n const currentValue = parseFloat(this.value as string) || 0;\n const step = parseFloat(this.step ?? \"\") || 1;\n const min = this.min ? parseFloat(this.min) : -Infinity;\n\n if (currentValue - step >= min) {\n this.value = (currentValue - step).toString();\n this.validateInput();\n this.dispatchEvent(\n new CustomEvent<SkyInputValueChangedDetail>(\"value-changed\", {\n detail: { value: this.getEmittedValue() },\n }),\n );\n }\n this.refocusInput();\n }\n\n /**\n * Renders validation error messages if applicable.\n * @returns {TemplateResult|null} - The rendered error messages or null.\n * @private\n */\n private renderValidationErrors() {\n\n if (!this.showErrors || !this.validationActive) return null;\n\n const requiredMsg = this.nativeRequiredMessage;\n const customMsgs = this.getErrorMessages(); // already respects errorDisplayMode for custom\n\n let msgs: string[] = [];\n\n if (this.errorDisplayMode === \"single\") {\n // ✅ single message overall: required wins, else first custom\n if (requiredMsg) msgs = [requiredMsg];\n else if (customMsgs.length) msgs = [customMsgs[0]];\n } else {\n // all/none behavior\n msgs = requiredMsg ? [requiredMsg, ...customMsgs] : customMsgs;\n }\n\n if (!msgs.length) return null;\n\n const errId = `${this.id || \"sky-input\"}-errors`;\n\n return html`\n <div class=\"progress-message\">\n <ul id=${errId} class=\"error-list\" part=\"error-list\">\n ${msgs.map((m) => html`<li class=\"error\" part=\"error\">${m}</li>`)}\n </ul>\n </div>\n `;\n }\n\n /**\n * Toggles the visibility of the password input.\n * @public\n */\n togglePasswordVisibility() {\n this.showPassword = !this.showPassword;\n }\n\n public focusInput(): void {\n const input = this.nativeInputEl;\n if (\n input &&\n typeof (input as HTMLInputElement | HTMLTextAreaElement).focus === \"function\"\n ) {\n (input as HTMLInputElement | HTMLTextAreaElement).focus();\n }\n }\n\n /**\n * Handles click events on the input wrapper.\n * @param {Event} event - The original click event.\n * @private\n */\n private handleWrapperClick(event: Event) {\n event.stopPropagation();\n if (this.disabled) return;\n const input = this.nativeInputEl;\n if (\n input &&\n typeof (input as HTMLInputElement | HTMLTextAreaElement).focus ===\n \"function\"\n ) {\n (input as HTMLInputElement | HTMLTextAreaElement).focus();\n }\n }\n\n /** @private */\n private get isInvalid(): boolean {\n return (\n this.matches(\":invalid\") ||\n (this.validationActive && this.validationErrors.length > 0)\n );\n }\n\n /** @private */\n private get describedById(): string | undefined {\n return (\n this.ariaDescribedby ??\n (this.showErrors ? `${this.id || \"sky-input\"}-errors` : undefined)\n );\n }\n\n /**\n * Refocuses the input element.\n * @private\n */\n private refocusInput() {\n const el = this.shadowRoot?.querySelector(\n \"input\",\n ) as HTMLInputElement | null;\n el?.focus({ preventScroll: true });\n }\n\n /**\n * Keeps the input focused when interacting with related controls.\n * @param {Event} e - The original event.\n * @private\n */\n private keepInputFocused = (e: Event) => {\n e.preventDefault();\n e.stopPropagation();\n this.refocusInput();\n };\n\n /**\n * Triggers the native dropdown for date/time/file inputs.\n * @private\n */\n private triggerNativeDropdown() {\n if (this.disabled || this.readonly) return;\n const input = this.shadowRoot?.querySelector(\n 'input[type=\"date\"], input[type=\"time\"], input[type=\"week\"], input[type=\"month\"], input[type=\"datetime-local\"], input[type=\"file\"]',\n ) as HTMLInputElement | null;\n\n if (input) {\n if (this.type === \"file\") {\n input.click();\n } else {\n this.showPicker();\n }\n }\n }\n\n /**\n * Filter/search inputs (`type=\"search\"`) are rendered as plain text fields so\n * Chrome does not treat them as login username targets. Credential autofill is\n * further blocked with readonly-until-focus (Chrome ignores autocomplete tokens).\n */\n private isFilterSearchInput(): boolean {\n return this.type === \"search\";\n }\n\n private nativeAutocomplete(): string {\n if (this.isFilterSearchInput()) {\n return \"off\";\n }\n return this.autocomplete;\n }\n\n private nativeTextInputType(isPassword: boolean): string {\n if (isPassword && this.showPassword) return \"text\";\n if (this.isFilterSearchInput()) return \"text\";\n return this.type;\n }\n\n private nativeInputMode(): string | undefined {\n if (this.inputmode) return this.inputmode;\n if (this.isFilterSearchInput()) return \"search\";\n return undefined;\n }\n\n private nativeEnterKeyHint():\n | \"enter\"\n | \"done\"\n | \"go\"\n | \"next\"\n | \"previous\"\n | \"search\"\n | \"send\"\n | undefined {\n if (this.enterkeyhint) {\n return this.enterkeyhint as\n | \"enter\"\n | \"done\"\n | \"go\"\n | \"next\"\n | \"previous\"\n | \"search\"\n | \"send\";\n }\n if (this.isFilterSearchInput()) return \"search\";\n return undefined;\n }\n\n private nativeInputRole(): string | undefined {\n if (this.inputRole) return this.inputRole;\n if (this.type === \"search\") return \"searchbox\";\n return undefined;\n }\n\n private affixColorStyle(color: string) {\n const trimmed = String(color ?? \"\").trim();\n if (!trimmed) return undefined;\n return { color: resolveColor(trimmed) };\n }\n\n private renderInputAffix(kind: \"prefix\" | \"suffix\") {\n const value = kind === \"prefix\" ? this.prefix : this.suffix;\n if (!String(value ?? \"\").length) return nothing;\n const color = kind === \"prefix\" ? this.prefixColor : this.suffixColor;\n const style = this.affixColorStyle(color);\n return html`<span\n class=\"input-affix ${kind}\"\n part=\"input-${kind}\"\n style=${style ? styleMap(style) : nothing}\n >${value}</span\n >`;\n }\n\n override render() {\n const isFileInput = this.type === \"file\";\n const isTextarea = this.type === \"textarea\";\n const isNumberInput = this.type === \"number\";\n const isPassword = this.type === \"password\";\n const supportsInlineAffixes = !isFileInput && !isTextarea;\n\n const hasLeftSlot = !!this.querySelector('[slot=\"icon-left\"]');\n const hasRightSlot = !!this.querySelector('[slot=\"icon-right\"]');\n\n let autoIcon: unknown = null;\n if (this.type === \"date\")\n autoIcon = html`<sky-icon icon=\"ion:calendar\"></sky-icon>`;\n else if (this.type === \"time\")\n autoIcon = html`<sky-icon icon=\"ion:time\"></sky-icon>`;\n else if (this.type === \"week\")\n autoIcon = html`<sky-icon icon=\"ion:calendar\"></sky-icon>`;\n else if (this.type === \"month\")\n autoIcon = html`<sky-icon icon=\"ion:calendar\"></sky-icon>`;\n else if (this.type === \"datetime-local\")\n autoIcon = html`<sky-icon icon=\"ion:time\"></sky-icon>`;\n\n const showFilePreview = this.filePreview && (hasLeftSlot || hasRightSlot);\n const showAutoIconInLeft = this.autofillIconSlot === \"left\" && autoIcon;\n const showAutoIconInRight = this.autofillIconSlot === \"right\" && autoIcon;\n\n const ImagePreview = () => html`\n <img\n src=${ifDefined(\n typeof this.filePreview === \"string\" ? this.filePreview : undefined,\n )}\n alt=\"Preview\"\n style=\"width:100%;height:100%;object-fit:cover;border-radius:12px;\"\n />\n `;\n\n const LeftIconSlot = () => html`\n <div\n class=\"icon-slot left ${this.focused ? \"focused\" : \"\"}\"\n part=\"icon-slot icon-slot-left\"\n ?filled=${Boolean(showFilePreview && hasLeftSlot) ||\n Boolean(showAutoIconInLeft) ||\n hasLeftSlot}\n @click=${() => {\n if (isFileInput || showAutoIconInLeft) this.triggerNativeDropdown();\n }}\n >\n ${showFilePreview && hasLeftSlot\n ? ImagePreview()\n : showAutoIconInLeft\n ? autoIcon\n : html`<slot name=\"icon-left\"></slot>`}\n </div>\n `;\n\n const RightIconSlot = () =>\n this.loading\n ? html`<div\n class=\"loading-indicator\"\n part=\"loading-indicator\"\n ?compact=${this.compact}\n ></div>`\n : html`\n <div\n class=\"icon-slot right ${this.focused ? \"focused\" : \"\"}\"\n part=\"icon-slot icon-slot-right\"\n ?filled=${Boolean(showFilePreview && hasRightSlot) ||\n Boolean(showAutoIconInRight) ||\n hasRightSlot}\n @click=${() => {\n if (isFileInput || showAutoIconInRight)\n this.triggerNativeDropdown();\n }}\n >\n ${showFilePreview && hasRightSlot\n ? ImagePreview()\n : showAutoIconInRight\n ? autoIcon\n : html`<slot name=\"icon-right\"></slot>`}\n </div>\n `;\n\n const FileControl = () => html`\n <label\n class=\"custom-file-label\"\n part=\"custom-file-label\"\n for=\"fileInput\"\n ?disabled=${this.disabled}\n >\n ${this.renderInputAffix(\"prefix\")}\n <span\n class=\"custom-file-label__text\"\n part=\"custom-file-label-text\"\n ?data-filled=${Boolean(this.selectedFileName)}\n >\n ${this.selectedFileName || this.placeholder || \"Choose file\"}\n </span>\n ${this.renderInputAffix(\"suffix\")}\n </label>\n\n <input\n id=\"fileInput\"\n type=\"file\"\n @change=${this.handleFileChange}\n ?disabled=${this.disabled}\n accept=${this.accept || \"\"}\n ?multiple=${this.multiple}\n .required=${this.required}\n @keydown=${this.handleKeydown}\n .dir=${this.dir}\n name=${ifDefined(this.name || undefined)}\n .autocomplete=${this.nativeAutocomplete()}\n .autocapitalize=${this.autocapitalize}\n spellcheck=${this.spellcheck}\n ?autofocus=${this.autofocus}\n inputmode=${ifDefined(this.inputmode || undefined)}\n enterkeyhint=${ifDefined(\n this.enterkeyhint as\n | \"enter\"\n | \"done\"\n | \"go\"\n | \"next\"\n | \"previous\"\n | \"search\"\n | \"send\"\n | undefined,\n )}\n list=${ifDefined(this.list || undefined)}\n capture=${ifDefined(this.capture ? \"environment\" : undefined)}\n .aria-invalid=${String(this.isInvalid)}\n .aria-required=${String(this.required)}\n aria-label=${ifDefined(this.ariaLabel || undefined)}\n aria-labelledby=${ifDefined(this.ariaLabelledby || undefined)}\n aria-describedby=${ifDefined(this.describedById)}\n />\n `;\n\n const TextareaControl = () => html`\n <textarea\n .value=${live(this.value)}\n @input=${this.handleInput}\n @focus=${this.handleFocus}\n @blur=${this.handleBlur}\n ?compact=${this.compact}\n ?disabled=${this.disabled}\n .required=${this.required}\n .rows=${this.rows}\n placeholder=${this.placeholder}\n resizable=${this.resizable || \"none\"}\n style=\"width:100%;border:none;outline:none;padding:10px;\"\n .autocapitalize=${this.autocapitalize}\n ?spellcheck=${this.spellcheck}\n name=${ifDefined(this.name || undefined)}\n .autocomplete=${this.nativeAutocomplete()}\n inputmode=${ifDefined(this.inputmode || undefined)}\n enterkeyhint=${ifDefined(\n this.enterkeyhint as\n | \"enter\"\n | \"done\"\n | \"go\"\n | \"next\"\n | \"previous\"\n | \"search\"\n | \"send\"\n | undefined,\n )}\n minlength=${ifDefined(this.minlength ?? undefined)}\n maxlength=${ifDefined(this.maxlength ?? undefined)}\n ?autofocus=${this.autofocus}\n .aria-invalid=${String(this.isInvalid)}\n .aria-required=${String(this.required)}\n aria-label=${ifDefined(this.ariaLabel || undefined)}\n aria-labelledby=${ifDefined(this.ariaLabelledby || undefined)}\n aria-describedby=${ifDefined(this.describedById)}\n role=${ifDefined(this.nativeInputRole() as\n | \"textbox\"\n | \"searchbox\"\n | \"combobox\"\n | \"listbox\"\n | \"menuitem\"\n | \"option\"\n | \"slider\"\n | \"spinbutton\"\n | \"treeitem\"\n | undefined)}\n ></textarea>\n `;\n\n const TextInputControl = () => html`\n <input\n .type=${this.nativeTextInputType(isPassword)}\n .value=${live(this.value)}\n @input=${this.handleInput}\n @focus=${this.handleFocus}\n @blur=${this.handleBlur}\n @pointerdown=${this.handleAutofillGuardPointerDown}\n ?compact=${this.compact}\n ?disabled=${this.disabled}\n .required=${this.required}\n .readOnly=${this.readonly || this.autofillGuardActive}\n style=\"appearance:none;pointer-events:auto;\"\n placeholder=${this.placeholder}\n name=${ifDefined(this.name || undefined)}\n .autocomplete=${this.nativeAutocomplete()}\n .autocapitalize=${this.autocapitalize}\n spellcheck=${this.spellcheck}\n inputmode=${ifDefined(this.nativeInputMode())}\n enterkeyhint=${ifDefined(this.nativeEnterKeyHint())}\n data-form-type=${this.isFilterSearchInput() ? \"other\" : nothing}\n ?data-1p-ignore=${this.isFilterSearchInput()}\n ?data-lpignore=${this.isFilterSearchInput()}\n list=${ifDefined(this.list || undefined)}\n pattern=${ifDefined(this.pattern || undefined)}\n minlength=${ifDefined(this.minlength ?? undefined)}\n maxlength=${ifDefined(this.maxlength ?? undefined)}\n size=${ifDefined(this.size ?? undefined)}\n step=${ifDefined(this.step !== null ? Number(this.step) : undefined)}\n min=${ifDefined(this.min ?? undefined)}\n max=${ifDefined(this.max ?? undefined)}\n ?autofocus=${this.autofocus}\n .aria-invalid=${String(this.isInvalid)}\n .aria-required=${String(this.required)}\n aria-label=${ifDefined(this.ariaLabel || undefined)}\n aria-labelledby=${ifDefined(this.ariaLabelledby || undefined)}\n aria-describedby=${ifDefined(this.describedById)}\n role=${ifDefined(this.nativeInputRole() as\n | \"textbox\"\n | \"searchbox\"\n | \"combobox\"\n | \"listbox\"\n | \"menuitem\"\n | \"option\"\n | \"slider\"\n | \"spinbutton\"\n | \"treeitem\"\n | undefined)}\n />\n `;\n\n const NumberButtons = () =>\n isNumberInput && this.showNumberButtons\n ? html`\n <div class=\"number-btn\">\n <button\n class=\"decrement-btn\"\n type=\"button\"\n tabindex=\"-1\"\n @mousedown=${this.keepInputFocused}\n @pointerdown=${this.keepInputFocused}\n @click=${(e: Event) => {\n e.stopPropagation();\n this.decrementValue();\n }}\n aria-label=\"Decrease value\"\n >\n <sky-icon icon=\"ion:minus\"></sky-icon>\n </button>\n <button\n class=\"increment-btn\"\n type=\"button\"\n tabindex=\"-1\"\n @mousedown=${this.keepInputFocused}\n @pointerdown=${this.keepInputFocused}\n @click=${(e: Event) => {\n e.stopPropagation();\n this.incrementValue();\n }}\n aria-label=\"Increase value\"\n >\n <sky-icon icon=\"ion:add\"></sky-icon>\n </button>\n </div>\n `\n : null;\n\n const PasswordToggle = () =>\n isPassword && this.showPasswordToggle\n ? html`\n <sky-icon\n class=\"toggle-password\"\n part=\"toggle-password\"\n ?compact=${this.compact}\n icon=${this.showPassword\n ? this.passwordVisibleIcon\n : this.passwordHiddenIcon}\n @click=${this.togglePasswordVisibility}\n ></sky-icon>\n `\n : null;\n\n const ClearButton = () =>\n this.clearable &&\n (this.value || this.selectedFileName || this.selectedFileCount > 0)\n ? html`\n <sky-icon\n class=\"clear-button\"\n part=\"clear-button\"\n ?compact=${this.compact}\n @click=${this.handleClear}\n ?loading=${this.loading}\n icon=\"ion:close\"\n ></sky-icon>\n `\n : null;\n\n const FileInfo = () =>\n isFileInput && this.totalFileSize\n ? html`\n <div class=\"file-info\" part=\"file-info\">\n <span>\n ${this.selectedFileCount}\n file${this.selectedFileCount !== 1 ? \"s selected\" : \" selected\"} </span\n >,\n <span>${this.formatFileSize(this.totalFileSize)}</span>\n </div>\n `\n : null;\n\n const Control = () =>\n isFileInput\n ? FileControl()\n : isTextarea\n ? TextareaControl()\n : TextInputControl();\n\n return html`\n <div\n class=\"input-container\"\n @click=${this.handleWrapperClick}\n part=\"input-container\"\n >\n ${this.label\n ? html`<div class=\"label\" part=\"label\">${this.label}</div>`\n : null}\n <div\n class=\"input-wrapper\"\n part=\"input-wrapper\"\n ?compact=${this.compact}\n ?loading=${this.loading}\n >\n ${LeftIconSlot()}\n ${supportsInlineAffixes ? this.renderInputAffix(\"prefix\") : nothing}\n ${Control()}\n ${supportsInlineAffixes ? this.renderInputAffix(\"suffix\") : nothing}\n ${NumberButtons()} ${PasswordToggle()}\n ${ClearButton()} ${RightIconSlot()}\n </div>\n\n ${FileInfo()} ${this.renderValidationErrors()}\n </div>\n `;\n }\n}\n"],"names":["SkyInput","FormControlBase","constructor","super","arguments","this","value","placeholder","label","type","suffix","prefix","prefixColor","suffixColor","color","_validations","compact","loading","showErrors","clearable","errorDisplayMode","required","step","min","max","autocapitalize","autocomplete","spellcheck","dir","rows","resizable","accept","multiple","inputmode","enterkeyhint","pattern","minlength","maxlength","list","size","cols","autofocus","capture","inputRole","ariaLabel","ariaLabelledby","ariaDescribedby","showNumberButtons","showPasswordToggle","passwordVisibleIcon","passwordHiddenIcon","validationActive","invalid","variant","selectedFileName","selectedFiles","focused","validationStatus","validationErrors","typingStarted","autofillIconSlot","autofillGuardActive","showPassword","totalFileSize","selectedFileCount","filePreview","_leftIconSlot","_rightIconSlot","_iconClickWired","WeakSet","_onLeftIconSlotChange","_wireIconSlot","_onRightIconSlotChange","keepInputFocused","e","preventDefault","stopPropagation","refocusInput","validations","old","Array","isArray","requestUpdate","connectedCallback","hasAttribute","tabIndex","disabled","hasUpdated","_setupIconSlots","disconnectedCallback","removeEventListener","shadowRoot","querySelector","addEventListener","side","slot","node","assignedElements","flatten","HTMLElement","has","add","handleIconClick","firstUpdated","_changedProperties","captureDefaultValue","syncFormValue","syncValidity","willUpdate","changedProperties","map","String","trim","updated","style","setProperty","resolveColor","inputWrapper","inputWrapperEl","getFormValue","name","length","fd","FormData","f","append","setValueFromFormState","state","getValidityAnchor","isEmpty","toString","getCustomErrorMessage","join","getNativeControl","onNativeValueMutated","native","validateInput","reset","nativeRequiredMessage","requiredMessage","getEmittedValue","n","Number","isFinite","handleClear","readonly","dispatchEvent","CustomEvent","detail","bubbles","composed","handleFileChange","event","files","target","fileList","from","file","totalSize","reduce","total","startsWith","reader","FileReader","onload","result","readAsDataURL","reemitNativeEvent","fileName","fileCount","handleKeydown","key","triggerNativeDropdown","preview","handleInput","handleFocus","releaseAutofillGuard","handleAutofillGuardPointerDown","onFormReset","defaultValue","handleBlur","validateForForm","payload","v","r","isFileInput","validation","index","Error","push","error","message","errors","isValid","getErrorMessages","slice","position","eventType","eventData","formatFileSize","bytes","i","Math","floor","log","parseFloat","pow","toFixed","incrementValue","currentValue","Infinity","decrementValue","renderValidationErrors","requiredMsg","customMsgs","msgs","errId","id","html","m","togglePasswordVisibility","focusInput","input","nativeInputEl","focus","handleWrapperClick","isInvalid","matches","describedById","el","preventScroll","click","showPicker","isFilterSearchInput","nativeAutocomplete","nativeTextInputType","isPassword","nativeInputMode","nativeEnterKeyHint","nativeInputRole","affixColorStyle","trimmed","renderInputAffix","kind","nothing","styleMap","render","isTextarea","isNumberInput","supportsInlineAffixes","hasLeftSlot","hasRightSlot","autoIcon","showFilePreview","showAutoIconInLeft","showAutoIconInRight","ImagePreview","ifDefined","FileControl","Boolean","TextareaControl","live","TextInputControl","LeftIconSlot","NumberButtons","PasswordToggle","ClearButton","RightIconSlot","FileInfo","dependencies","SkyIcon","styles","css","shadowRootOptions","LitElement","delegatesFocus","__decorateClass","property","prototype","reflect","query","customElement"],"mappings":"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"}
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.js","sources":[],"sourcesContent":[],"names":[],"mappings":""}
@@ -1,4 +1,8 @@
1
- import{__decorate as e,__metadata as t}from"tslib";import{LitElement as s,css as i,html as n}from"lit";import{property as a,queryAssignedElements as l,customElement as r}from"lit/decorators.js";let o=class extends s{constructor(){super(...arguments),this.selection="none",this._selectedValues=[],this.currentIndex=0,this._syncingSelectedValues=!1,this._onItemActivate=e=>this.onItemActivate(e),this._onSlotChange=()=>{this._applySelectedValuesFromProp(),this._focusFirstNavigable()}}static{this.styles=i`
1
+ import{css as e,LitElement as t,html as s}from"lit";import{property as i,queryAssignedElements as n,customElement as r}from"lit/decorators.js";var a=Object.defineProperty,o=Object.getOwnPropertyDescriptor,l=(e,t,s,i)=>{for(var n,r=i>1?void 0:i?o(t,s):t,l=e.length-1;l>=0;l--)(n=e[l])&&(r=(i?n(t,s,r):n(r))||r);return i&&r&&a(t,s,r),r};let c=class extends t{constructor(){super(...arguments),this.selection="none",this._selectedValues=[],this.currentIndex=0,this._syncingSelectedValues=!1,this._onItemActivate=e=>this.onItemActivate(e),this._onSlotChange=()=>{this._applySelectedValuesFromProp(),this._focusFirstNavigable()}}get selectedValues(){return this._selectedValues}set selectedValues(e){const t=this._selectedValues;this._selectedValues=Array.isArray(e)?e:[],this.requestUpdate("selectedValues",t)}firstUpdated(){this.syncAriaRole(),this.addEventListener("keydown",this.onKeydown),this.addEventListener("item-activate",this._onItemActivate),this._applySelectedValuesFromProp(),this._focusFirstNavigable()}disconnectedCallback(){super.disconnectedCallback(),this.removeEventListener("keydown",this.onKeydown),this.removeEventListener("item-activate",this._onItemActivate)}syncAriaRole(){if("none"===this.selection)return this.setAttribute("role","list"),void this.removeAttribute("aria-multiselectable");this.setAttribute("role","listbox"),"multiple"===this.selection?this.setAttribute("aria-multiselectable","true"):this.removeAttribute("aria-multiselectable")}navigableItems(){return(this.items??[]).filter(e=>this.isNavigableItem(e))}isNavigableItem(e){return!!e&&!e.disabled&&!e.subheader}itemIndex(e){return(this.items??[]).indexOf(e)}onItemActivate(e){const t=e.detail.item;if(!this.isNavigableItem(t))return;"single"===this.selection?(this.items.forEach(e=>e.setSelected(!1)),t.setSelected(!0)):"multiple"===this.selection&&t.setSelected(!t.selected);const s=this.items.filter(e=>e.selected),i=s.map(e=>e.value||"");this._syncingSelectedValues=!0,this.selectedValues=[...i],this._syncingSelectedValues=!1,this.dispatchEvent(new CustomEvent("list-change",{detail:{selectedItems:s,selectedValues:i},bubbles:!0,composed:!0}))}_applySelectedValuesFromProp(){if(!this.items?.length||"none"===this.selection)return;const e=new Set(this.selectedValues??[]);if("single"===this.selection){const t=[...e][0];for(const e of this.items)e.subheader||e.setSelected(void 0!==t&&e.value===t);return}for(const t of this.items)t.subheader||t.setSelected(e.has(t.value))}updated(e){super.updated(e),e.has("selection")&&this.syncAriaRole(),!e.has("selectedValues")&&!e.has("selection")||this._syncingSelectedValues||this._applySelectedValuesFromProp()}onKeydown(e){const t=this.navigableItems();if(t.length)switch(e.key){case"ArrowDown":e.preventDefault(),this.focusStep(1);break;case"ArrowUp":e.preventDefault(),this.focusStep(-1);break;case"Home":e.preventDefault(),this.focusItem(this.itemIndex(t[0]));break;case"End":e.preventDefault(),this.focusItem(this.itemIndex(t[t.length-1]));break;case" ":case"Enter":e.preventDefault(),this.items[this.currentIndex]?.dispatchEvent(new CustomEvent("item-activate",{detail:{item:this.items[this.currentIndex]},bubbles:!0,composed:!0}))}}focusStep(e){const t=this.navigableItems();if(!t.length)return;const s=this.items[this.currentIndex];let i=s?t.indexOf(s):-1;i<0&&(i=e>0?-1:t.length);const n=t[Math.max(0,Math.min(i+e,t.length-1))];n&&this.focusItem(this.itemIndex(n))}_focusFirstNavigable(){const e=this.navigableItems()[0];e&&this.focusItem(this.itemIndex(e))}focusItem(e){if(!this.items?.length)return;const t=this.items.length;let s=Math.max(0,Math.min(e,t-1));if(!this.isNavigableItem(this.items[s])){const e=this.navigableItems(),t=e.find(e=>this.itemIndex(e)>=s)??e[0];if(!t)return;s=this.itemIndex(t)}const i=this.items[this.currentIndex];i&&i.shadowRoot?.querySelector(".list-item")?.setAttribute("tabindex","-1"),this.currentIndex=s;const n=this.items[this.currentIndex];if(n&&this.isNavigableItem(n)){const e=n.shadowRoot?.querySelector(".list-item");e&&(e.setAttribute("tabindex","0"),e.focus())}}focusListItem(e){this.focusItem(e)}getItems(){return[...this.items??[]]}render(){return s`
2
+ <div class="list-container" part="list-container">
3
+ <slot @slotchange=${this._onSlotChange}></slot>
4
+ </div>
5
+ `}};c.styles=e`
2
6
  :host {
3
7
  display: block;
4
8
  font-family: var(--sky-font);
@@ -23,9 +27,5 @@ import{__decorate as e,__metadata as t}from"tslib";import{LitElement as s,css as
23
27
  top: 0;
24
28
  z-index: 1;
25
29
  }
26
- `}get selectedValues(){return this._selectedValues}set selectedValues(e){const t=this._selectedValues;this._selectedValues=Array.isArray(e)?e:[],this.requestUpdate("selectedValues",t)}firstUpdated(){this.syncAriaRole(),this.addEventListener("keydown",this.onKeydown),this.addEventListener("item-activate",this._onItemActivate),this._applySelectedValuesFromProp(),this._focusFirstNavigable()}disconnectedCallback(){super.disconnectedCallback(),this.removeEventListener("keydown",this.onKeydown),this.removeEventListener("item-activate",this._onItemActivate)}syncAriaRole(){if("none"===this.selection)return this.setAttribute("role","list"),void this.removeAttribute("aria-multiselectable");this.setAttribute("role","listbox"),"multiple"===this.selection?this.setAttribute("aria-multiselectable","true"):this.removeAttribute("aria-multiselectable")}navigableItems(){return(this.items??[]).filter(e=>this.isNavigableItem(e))}isNavigableItem(e){return!!e&&!e.disabled&&!e.subheader}itemIndex(e){return(this.items??[]).indexOf(e)}onItemActivate(e){const t=e.detail.item;if(!this.isNavigableItem(t))return;"single"===this.selection?(this.items.forEach(e=>e.setSelected(!1)),t.setSelected(!0)):"multiple"===this.selection&&t.setSelected(!t.selected);const s=this.items.filter(e=>e.selected),i=s.map(e=>e.value||"");this._syncingSelectedValues=!0,this.selectedValues=[...i],this._syncingSelectedValues=!1,this.dispatchEvent(new CustomEvent("list-change",{detail:{selectedItems:s,selectedValues:i},bubbles:!0,composed:!0}))}_applySelectedValuesFromProp(){if(!this.items?.length||"none"===this.selection)return;const e=new Set(this.selectedValues??[]);if("single"===this.selection){const t=[...e][0];for(const e of this.items)e.subheader||e.setSelected(void 0!==t&&e.value===t);return}for(const t of this.items)t.subheader||t.setSelected(e.has(t.value))}updated(e){super.updated(e),e.has("selection")&&this.syncAriaRole(),!e.has("selectedValues")&&!e.has("selection")||this._syncingSelectedValues||this._applySelectedValuesFromProp()}onKeydown(e){const t=this.navigableItems();if(t.length)switch(e.key){case"ArrowDown":e.preventDefault(),this.focusStep(1);break;case"ArrowUp":e.preventDefault(),this.focusStep(-1);break;case"Home":e.preventDefault(),this.focusItem(this.itemIndex(t[0]));break;case"End":e.preventDefault(),this.focusItem(this.itemIndex(t[t.length-1]));break;case" ":case"Enter":e.preventDefault(),this.items[this.currentIndex]?.dispatchEvent(new CustomEvent("item-activate",{detail:{item:this.items[this.currentIndex]},bubbles:!0,composed:!0}))}}focusStep(e){const t=this.navigableItems();if(!t.length)return;const s=this.items[this.currentIndex];let i=s?t.indexOf(s):-1;i<0&&(i=e>0?-1:t.length);const n=t[Math.max(0,Math.min(i+e,t.length-1))];n&&this.focusItem(this.itemIndex(n))}_focusFirstNavigable(){const e=this.navigableItems()[0];e&&this.focusItem(this.itemIndex(e))}focusItem(e){if(!this.items?.length)return;const t=this.items.length;let s=Math.max(0,Math.min(e,t-1));if(!this.isNavigableItem(this.items[s])){const e=this.navigableItems(),t=e.find(e=>this.itemIndex(e)>=s)??e[0];if(!t)return;s=this.itemIndex(t)}const i=this.items[this.currentIndex];i&&i.shadowRoot?.querySelector(".list-item")?.setAttribute("tabindex","-1"),this.currentIndex=s;const n=this.items[this.currentIndex];if(n&&this.isNavigableItem(n)){const e=n.shadowRoot?.querySelector(".list-item");e&&(e.setAttribute("tabindex","0"),e.focus())}}focusListItem(e){this.focusItem(e)}getItems(){return[...this.items??[]]}render(){return n`
27
- <div class="list-container" part="list-container">
28
- <slot @slotchange=${this._onSlotChange}></slot>
29
- </div>
30
- `}};e([a({type:String}),t("design:type",String)],o.prototype,"selection",void 0),e([a({type:Array}),t("design:type",Object),t("design:paramtypes",[Object])],o.prototype,"selectedValues",null),e([l({flatten:!0}),t("design:type",Array)],o.prototype,"items",void 0),o=e([r("sky-list")],o);export{o as SkyList};
30
+ `,l([i({type:String})],c.prototype,"selection",2),l([i({type:Array})],c.prototype,"selectedValues",1),l([n({flatten:!0})],c.prototype,"items",2),c=l([r("sky-list")],c);export{c as SkyList};
31
31
  //# sourceMappingURL=sky-list.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"sky-list.js","sources":["../../src/sky-list/sky-list.ts"],"sourcesContent":[null],"names":["SkyList","LitElement","constructor","this","selection","_selectedValues","currentIndex","_syncingSelectedValues","_onItemActivate","e","onItemActivate","_onSlotChange","_applySelectedValuesFromProp","_focusFirstNavigable","styles","css","selectedValues","value","old","Array","isArray","requestUpdate","firstUpdated","syncAriaRole","addEventListener","onKeydown","disconnectedCallback","super","removeEventListener","setAttribute","removeAttribute","navigableItems","items","filter","item","isNavigableItem","disabled","subheader","itemIndex","indexOf","detail","forEach","i","setSelected","selected","selectedItems","map","dispatchEvent","CustomEvent","bubbles","composed","length","want","Set","first","undefined","has","updated","changed","navigable","key","preventDefault","focusStep","focusItem","delta","current","navIdx","next","Math","max","min","index","len","candidate","find","prev","shadowRoot","querySelector","el","focus","focusListItem","getItems","render","html","__decorate","property","type","String","prototype","queryAssignedElements","flatten","customElement"],"mappings":"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"}
1
+ {"version":3,"file":"sky-list.js","sources":["../../src/sky-list/sky-list.ts"],"sourcesContent":["import { LitElement, html, css, PropertyValues } from \"lit\";\r\nimport { customElement, property, queryAssignedElements } from \"lit/decorators.js\";\r\nimport type { SkyListitem } from \"../sky-listitem/sky-listitem.js\";\r\n\r\nexport type SkyListSelectionMode = \"none\" | \"single\" | \"multiple\";\r\nexport type SkyListChangeDetail = {\r\n selectedItems: SkyListitem[];\r\n /** Values from each selected item's `value` (empty string if unset). */\r\n selectedValues: string[];\r\n};\r\n\r\n/**\r\n * @element sky-list\r\n *\r\n * @summary Styled list container for `sky-listitem` with selection modes and keyboard navigation.\r\n *\r\n * @status stable\r\n * @since 1.0.0\r\n *\r\n * @documentation https://library.sky-ui.com/components/list\r\n *\r\n * @uiVModel selectedValues list-change detail=selectedValues\r\n *\r\n * @slot - Default slot for `<sky-listitem>` children.\r\n * @property {SkyListSelectionMode} selection - Selection mode (`none`, `single`, `multiple`).\r\n * @property {string[]} selectedValues - Selected item `value`s (mirror for `v-model`; set each `<sky-listitem value=\"…\">`). Default: `[]`.\r\n * @fires {CustomEvent<SkyListChangeDetail>} list-change - Fired when selected items change.\r\n * @method focusListItem Focuses a list item by index.\r\n * @method getItems Returns current slotted list items.\r\n *\r\n * @csspart list-container - The main container wrapping slotted list items.\r\n *\r\n * @Behavior\r\n * - Manages activation and selection state for slotted `sky-listitem` children.\r\n * - Supports keyboard navigation (`ArrowUp/Down`, `Home/End`, `Enter`, `Space`).\r\n * - Emits a normalized selected-items payload on each selection update.\r\n *\r\n * @example\r\n * ```html\r\n * <sky-list selection=\"single\">\r\n * <sky-listitem>Option A</sky-listitem>\r\n * <sky-listitem>Option B</sky-listitem>\r\n * <sky-listitem>Option C</sky-listitem>\r\n * </sky-list>\r\n * ```\r\n * ```vue\r\n * <template>\r\n * <sky-list selection=\"single\" @list-change=\"onListChange\">\r\n * <sky-listitem>Option A</sky-listitem>\r\n * <sky-listitem>Option B</sky-listitem>\r\n * <sky-listitem>Option C</sky-listitem>\r\n * </sky-list>\r\n * </template>\r\n * ```\r\n * ```jsx\r\n * export default function Demo() {\r\n * return (\r\n * <sky-list selection=\"single\">\r\n * <sky-listitem>Option A</sky-listitem>\r\n * <sky-listitem>Option B</sky-listitem>\r\n * <sky-listitem>Option C</sky-listitem>\r\n * </sky-list>\r\n * );\r\n * }\r\n * ```\r\n */\r\n@customElement(\"sky-list\")\r\nexport class SkyList extends LitElement {\r\n static override styles = css`\r\n :host {\r\n display: block;\r\n font-family: var(--sky-font);\r\n }\r\n\r\n .list-container {\r\n width: 100%;\r\n border-radius: var(--sky-radius-secondary);\r\n overflow: hidden;\r\n background: var(--sky-glass-solid);\r\n backdrop-filter: none;\r\n -webkit-backdrop-filter: none;\r\n border: var(--sky-border-primary);\r\n box-shadow:\r\n var(--sky-box-shadow-inset),\r\n var(--sky-box-shadow-secondary);\r\n isolation: isolate;\r\n }\r\n\r\n ::slotted(sky-listitem[subheader]) {\r\n position: sticky;\r\n top: 0;\r\n z-index: 1;\r\n }\r\n `;\r\n\r\n @property({ type: String }) selection: SkyListSelectionMode = \"none\";\r\n\r\n private _selectedValues: string[] = [];\r\n\r\n /** Bound selection as item `value` strings (requires `value` on items). Coerces null to `[]`. */\r\n @property({ type: Array })\r\n get selectedValues(): string[] {\r\n return this._selectedValues;\r\n }\r\n set selectedValues(value: string[] | null | undefined) {\r\n const old = this._selectedValues;\r\n this._selectedValues = Array.isArray(value) ? value : [];\r\n this.requestUpdate(\"selectedValues\", old);\r\n }\r\n\r\n @queryAssignedElements({ flatten: true })\r\n private items!: SkyListitem[];\r\n\r\n private currentIndex = 0;\r\n\r\n /** Avoid feedback when syncing selection from the `selectedValues` prop. */\r\n private _syncingSelectedValues = false;\r\n\r\n private _onItemActivate = (e: Event) => this.onItemActivate(e as CustomEvent);\r\n\r\n private _onSlotChange = () => {\r\n this._applySelectedValuesFromProp();\r\n this._focusFirstNavigable();\r\n };\r\n\r\n override firstUpdated(): void {\r\n this.syncAriaRole();\r\n this.addEventListener(\"keydown\", this.onKeydown);\r\n this.addEventListener(\"item-activate\", this._onItemActivate);\r\n this._applySelectedValuesFromProp();\r\n this._focusFirstNavigable();\r\n }\r\n\r\n override disconnectedCallback(): void {\r\n super.disconnectedCallback();\r\n this.removeEventListener(\"keydown\", this.onKeydown);\r\n this.removeEventListener(\"item-activate\", this._onItemActivate);\r\n }\r\n\r\n private syncAriaRole(): void {\r\n if (this.selection === \"none\") {\r\n this.setAttribute(\"role\", \"list\");\r\n this.removeAttribute(\"aria-multiselectable\");\r\n return;\r\n }\r\n\r\n this.setAttribute(\"role\", \"listbox\");\r\n if (this.selection === \"multiple\") {\r\n this.setAttribute(\"aria-multiselectable\", \"true\");\r\n } else {\r\n this.removeAttribute(\"aria-multiselectable\");\r\n }\r\n }\r\n\r\n private navigableItems(): SkyListitem[] {\r\n return (this.items ?? []).filter((item) => this.isNavigableItem(item));\r\n }\r\n\r\n private isNavigableItem(item: SkyListitem | undefined): boolean {\r\n return !!item && !item.disabled && !item.subheader;\r\n }\r\n\r\n private itemIndex(item: SkyListitem): number {\r\n return (this.items ?? []).indexOf(item);\r\n }\r\n\r\n private onItemActivate(e: CustomEvent): void {\r\n const item = e.detail.item as SkyListitem;\r\n if (!this.isNavigableItem(item)) return;\r\n\r\n if (this.selection === \"single\") {\r\n this.items.forEach((i) => i.setSelected(false));\r\n item.setSelected(true);\r\n } else if (this.selection === \"multiple\") {\r\n item.setSelected(!item.selected);\r\n }\r\n\r\n const selectedItems = this.items.filter((i) => i.selected);\r\n const selectedValues = selectedItems.map((i) => i.value || \"\");\r\n this._syncingSelectedValues = true;\r\n this.selectedValues = [...selectedValues];\r\n this._syncingSelectedValues = false;\r\n\r\n this.dispatchEvent(\r\n new CustomEvent<SkyListChangeDetail>(\"list-change\", {\r\n detail: {\r\n selectedItems,\r\n selectedValues,\r\n },\r\n bubbles: true,\r\n composed: true,\r\n }),\r\n );\r\n }\r\n\r\n /** Applies `selectedValues` from the host to child items. */\r\n private _applySelectedValuesFromProp(): void {\r\n if (!this.items?.length || this.selection === \"none\") return;\r\n\r\n const want = new Set(this.selectedValues ?? []);\r\n if (this.selection === \"single\") {\r\n const first = [...want][0];\r\n for (const item of this.items) {\r\n if (item.subheader) continue;\r\n item.setSelected(first !== undefined && item.value === first);\r\n }\r\n return;\r\n }\r\n\r\n for (const item of this.items) {\r\n if (item.subheader) continue;\r\n item.setSelected(want.has(item.value));\r\n }\r\n }\r\n\r\n override updated(changed: PropertyValues): void {\r\n super.updated(changed);\r\n\r\n if (changed.has(\"selection\")) {\r\n this.syncAriaRole();\r\n }\r\n\r\n if ((changed.has(\"selectedValues\") || changed.has(\"selection\")) && !this._syncingSelectedValues) {\r\n this._applySelectedValuesFromProp();\r\n }\r\n }\r\n\r\n private onKeydown(e: KeyboardEvent): void {\r\n const navigable = this.navigableItems();\r\n if (!navigable.length) return;\r\n\r\n switch (e.key) {\r\n case \"ArrowDown\":\r\n e.preventDefault();\r\n this.focusStep(1);\r\n break;\r\n case \"ArrowUp\":\r\n e.preventDefault();\r\n this.focusStep(-1);\r\n break;\r\n case \"Home\":\r\n e.preventDefault();\r\n this.focusItem(this.itemIndex(navigable[0]!));\r\n break;\r\n case \"End\":\r\n e.preventDefault();\r\n this.focusItem(this.itemIndex(navigable[navigable.length - 1]!));\r\n break;\r\n case \" \":\r\n case \"Enter\":\r\n e.preventDefault();\r\n this.items[this.currentIndex]?.dispatchEvent(\r\n new CustomEvent(\"item-activate\", {\r\n detail: { item: this.items[this.currentIndex] },\r\n bubbles: true,\r\n composed: true,\r\n }),\r\n );\r\n break;\r\n }\r\n }\r\n\r\n private focusStep(delta: number): void {\r\n const navigable = this.navigableItems();\r\n if (!navigable.length) return;\r\n\r\n const current = this.items[this.currentIndex];\r\n let navIdx = current ? navigable.indexOf(current) : -1;\r\n if (navIdx < 0) navIdx = delta > 0 ? -1 : navigable.length;\r\n\r\n const nextNavIdx = Math.max(0, Math.min(navIdx + delta, navigable.length - 1));\r\n const next = navigable[nextNavIdx];\r\n if (next) this.focusItem(this.itemIndex(next));\r\n }\r\n\r\n private _focusFirstNavigable(): void {\r\n const first = this.navigableItems()[0];\r\n if (first) this.focusItem(this.itemIndex(first));\r\n }\r\n\r\n private focusItem(index: number): void {\r\n if (!this.items?.length) return;\r\n\r\n const len = this.items.length;\r\n let next = Math.max(0, Math.min(index, len - 1));\r\n if (!this.isNavigableItem(this.items[next])) {\r\n const navigable = this.navigableItems();\r\n const candidate = navigable.find((item) => this.itemIndex(item) >= next) ?? navigable[0];\r\n if (!candidate) return;\r\n next = this.itemIndex(candidate);\r\n }\r\n\r\n const prev = this.items[this.currentIndex];\r\n if (prev) prev.shadowRoot?.querySelector(\".list-item\")?.setAttribute(\"tabindex\", \"-1\");\r\n\r\n this.currentIndex = next;\r\n const current = this.items[this.currentIndex];\r\n if (current && this.isNavigableItem(current)) {\r\n const el = current.shadowRoot?.querySelector(\".list-item\") as HTMLElement | null;\r\n if (el) {\r\n el.setAttribute(\"tabindex\", \"0\");\r\n el.focus();\r\n }\r\n }\r\n }\r\n\r\n public focusListItem(index: number): void {\r\n this.focusItem(index);\r\n }\r\n\r\n public getItems(): SkyListitem[] {\r\n return [...(this.items ?? [])];\r\n }\r\n\r\n override render() {\r\n return html`\r\n <div class=\"list-container\" part=\"list-container\">\r\n <slot @slotchange=${this._onSlotChange}></slot>\r\n </div>\r\n `;\r\n }\r\n}"],"names":["SkyList","LitElement","constructor","super","arguments","this","selection","_selectedValues","currentIndex","_syncingSelectedValues","_onItemActivate","e","onItemActivate","_onSlotChange","_applySelectedValuesFromProp","_focusFirstNavigable","selectedValues","value","old","Array","isArray","requestUpdate","firstUpdated","syncAriaRole","addEventListener","onKeydown","disconnectedCallback","removeEventListener","setAttribute","removeAttribute","navigableItems","items","filter","item","isNavigableItem","disabled","subheader","itemIndex","indexOf","detail","forEach","i","setSelected","selected","selectedItems","map","dispatchEvent","CustomEvent","bubbles","composed","length","want","Set","first","has","updated","changed","navigable","key","preventDefault","focusStep","focusItem","delta","current","navIdx","next","Math","max","min","index","len","candidate","find","prev","shadowRoot","querySelector","el","focus","focusListItem","getItems","render","html","styles","css","__decorateClass","property","type","String","prototype","queryAssignedElements","flatten","customElement"],"mappings":"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"}
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.js","sources":[],"sourcesContent":[],"names":[],"mappings":""}
@@ -1,4 +1,33 @@
1
- import{__decorate as e,__metadata as t}from"tslib";import{LitElement as s,css as i,html as a,nothing as r}from"lit";import{property as o,customElement as n}from"lit/decorators.js";import{when as d}from"lit/directives/when.js";let l=class extends s{constructor(){super(...arguments),this.avatar="",this.value="",this.subheader="",this.selected=!1,this.dense=!1,this.disabled=!1}static{this.styles=i`
1
+ import{css as e,LitElement as t,html as s,nothing as r}from"lit";import{property as a,customElement as i}from"lit/decorators.js";import{when as o}from"lit/directives/when.js";var n=Object.defineProperty,l=Object.getOwnPropertyDescriptor,d=(e,t,s,r)=>{for(var a,i=r>1?void 0:r?l(t,s):t,o=e.length-1;o>=0;o--)(a=e[o])&&(i=(r?a(t,s,i):a(i))||i);return r&&i&&n(t,s,i),i};let p=class extends t{constructor(){super(...arguments),this.avatar="",this.value="",this.subheader="",this.selected=!1,this.dense=!1,this.disabled=!1}onClick(){this.disabled||this.subheader||this.dispatchEvent(new CustomEvent("item-activate",{detail:{item:this},bubbles:!0,composed:!0}))}setSelected(e){this.selected=e,this.requestUpdate()}render(){return this.subheader?s`
2
+ <div class="subheader" part="subheader" role="presentation">${this.subheader}</div>
3
+ `:s`
4
+ <div
5
+ class="list-item"
6
+ part="list-item"
7
+ role="option"
8
+ aria-selected=${this.selected?"true":"false"}
9
+ aria-disabled=${this.disabled?"true":"false"}
10
+ tabindex="-1"
11
+ @click=${this.onClick}
12
+ >
13
+ ${o(this.avatar,()=>s`
14
+ <div class="leading" part="leading">
15
+ <img
16
+ class="avatar"
17
+ src=${this.avatar}
18
+ alt=""
19
+ part="avatar"
20
+ />
21
+ </div>
22
+ `)}
23
+
24
+ <div class="content" part="content"><slot name="content"></slot></div>
25
+
26
+ <div class="actions" part="actions">
27
+ <slot name="actions">${r}</slot>
28
+ </div>
29
+ </div>
30
+ `}};p.styles=e`
2
31
  :host {
3
32
  display: block;
4
33
  cursor: pointer;
@@ -103,34 +132,5 @@ import{__decorate as e,__metadata as t}from"tslib";import{LitElement as s,css as
103
132
  transition: none;
104
133
  }
105
134
  }
106
- `}onClick(){this.disabled||this.subheader||this.dispatchEvent(new CustomEvent("item-activate",{detail:{item:this},bubbles:!0,composed:!0}))}setSelected(e){this.selected=e,this.requestUpdate()}render(){return this.subheader?a`
107
- <div class="subheader" part="subheader" role="presentation">${this.subheader}</div>
108
- `:a`
109
- <div
110
- class="list-item"
111
- part="list-item"
112
- role="option"
113
- aria-selected=${this.selected?"true":"false"}
114
- aria-disabled=${this.disabled?"true":"false"}
115
- tabindex="-1"
116
- @click=${this.onClick}
117
- >
118
- ${d(this.avatar,()=>a`
119
- <div class="leading" part="leading">
120
- <img
121
- class="avatar"
122
- src=${this.avatar}
123
- alt=""
124
- part="avatar"
125
- />
126
- </div>
127
- `)}
128
-
129
- <div class="content" part="content"><slot name="content"></slot></div>
130
-
131
- <div class="actions" part="actions">
132
- <slot name="actions">${r}</slot>
133
- </div>
134
- </div>
135
- `}};e([o({type:String}),t("design:type",Object)],l.prototype,"avatar",void 0),e([o({type:String}),t("design:type",Object)],l.prototype,"value",void 0),e([o({type:String,reflect:!0}),t("design:type",Object)],l.prototype,"subheader",void 0),e([o({type:Boolean,reflect:!0}),t("design:type",Object)],l.prototype,"selected",void 0),e([o({type:Boolean,reflect:!0}),t("design:type",Object)],l.prototype,"dense",void 0),e([o({type:Boolean,reflect:!0}),t("design:type",Object)],l.prototype,"disabled",void 0),l=e([n("sky-listitem")],l);export{l as SkyListitem};
135
+ `,d([a({type:String})],p.prototype,"avatar",2),d([a({type:String})],p.prototype,"value",2),d([a({type:String,reflect:!0})],p.prototype,"subheader",2),d([a({type:Boolean,reflect:!0})],p.prototype,"selected",2),d([a({type:Boolean,reflect:!0})],p.prototype,"dense",2),d([a({type:Boolean,reflect:!0})],p.prototype,"disabled",2),p=d([i("sky-listitem")],p);export{p as SkyListitem};
136
136
  //# sourceMappingURL=sky-listitem.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"sky-listitem.js","sources":["../../src/sky-listitem/sky-listitem.ts"],"sourcesContent":[null],"names":["SkyListitem","LitElement","constructor","this","avatar","value","subheader","selected","dense","disabled","styles","css","onClick","dispatchEvent","CustomEvent","detail","item","bubbles","composed","setSelected","requestUpdate","render","html","when","nothing","__decorate","property","type","String","prototype","reflect","Boolean","customElement"],"mappings":"kOAkEO,IAAMA,EAAN,cAA0BC,EAA1B,WAAAC,uBACuBC,KAAAC,OAAS,GAETD,KAAAE,MAAQ,GACOF,KAAAG,UAAY,GACXH,KAAAI,UAAW,EACXJ,KAAAK,OAAQ,EACRL,KAAAM,UAAW,CAoKzD,QAlKkBN,KAAAO,OAASC,CAAG;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GAyG1B,CAEM,OAAAC,GACFT,KAAKM,UAAYN,KAAKG,WAC1BH,KAAKU,cACH,IAAIC,YAAuC,gBAAiB,CAC1DC,OAAQ,CAAEC,KAAMb,MAChBc,SAAS,EACTC,UAAU,IAGhB,CAEA,WAAAC,CAAYZ,GACVJ,KAAKI,SAAWA,EAChBJ,KAAKiB,eACP,CAES,MAAAC,GACP,OAAIlB,KAAKG,UACAgB,CAAI;sEACqDnB,KAAKG;QAIhEgB,CAAI;;;;;wBAKSnB,KAAKI,SAAW,OAAS;wBACzBJ,KAAKM,SAAW,OAAS;;iBAEhCN,KAAKS;;UAEZW,EACApB,KAAKC,OACL,IAAMkB,CAAI;;;;sBAIEnB,KAAKC;;;;;;;;;;iCAWMoB;;;KAI/B,GAzK4BC,EAAA,CAA3BC,EAAS,CAAEC,KAAMC,kCAAsB5B,EAAA6B,UAAA,iBAEZJ,EAAA,CAA3BC,EAAS,CAAEC,KAAMC,kCAAqB5B,EAAA6B,UAAA,gBACIJ,EAAA,CAA1CC,EAAS,CAAEC,KAAMC,OAAQE,SAAS,6BAAuB9B,EAAA6B,UAAA,oBACdJ,EAAA,CAA3CC,EAAS,CAAEC,KAAMI,QAASD,SAAS,6BAAyB9B,EAAA6B,UAAA,mBACjBJ,EAAA,CAA3CC,EAAS,CAAEC,KAAMI,QAASD,SAAS,6BAAsB9B,EAAA6B,UAAA,gBACdJ,EAAA,CAA3CC,EAAS,CAAEC,KAAMI,QAASD,SAAS,6BAAyB9B,EAAA6B,UAAA,mBAPlD7B,EAAWyB,EAAA,CADvBO,EAAc,iBACFhC"}
1
+ {"version":3,"file":"sky-listitem.js","sources":["../../src/sky-listitem/sky-listitem.ts"],"sourcesContent":["import { LitElement, html, css, nothing } from \"lit\";\r\nimport { customElement, property } from \"lit/decorators.js\";\r\nimport { when } from \"lit/directives/when.js\";\r\n\r\nexport type SkyListitemActivateDetail = { item: SkyListitem };\r\n\r\n/**\r\n * @element sky-listitem\r\n *\r\n * @summary List item with optional avatar, actions, subheader mode, and selectable state.\r\n *\r\n * @status stable\r\n * @since 1.0.0\r\n *\r\n * @documentation https://library.sky-ui.com/components/list\r\n *\r\n * @slot content - Main content of the list item (usually label or text).\r\n * @slot actions - Trailing action elements (e.g., icons, buttons).\r\n * @property {string} avatar - Optional avatar image URL.\r\n * @property {string} value - Stable id for selection (`sky-list` `selectedValues` / `list-change`). Default: `\"\"`.\r\n * @property {string} subheader - Subheader text; when set, item renders as a section header.\r\n * @property {boolean} selected - Whether item is selected.\r\n * @property {boolean} dense - Whether compact spacing is used.\r\n * @property {boolean} disabled - Whether interaction is disabled.\r\n * @fires {CustomEvent<SkyListitemActivateDetail>} item-activate - Fired when the item is activated.\r\n * @method setSelected Sets selection state programmatically.\r\n *\r\n * @csspart list-item - The main list item container.\r\n * @csspart leading - The leading section (avatar container).\r\n * @csspart avatar - The avatar image element.\r\n * @csspart content - The content wrapper for the main slot.\r\n * @csspart actions - The trailing actions container.\r\n * @csspart subheader - The subheader divider element.\r\n *\r\n * @Behavior\r\n * - Renders either a selectable list row or a non-interactive subheader variant.\r\n * - Emits `item-activate` for parent list orchestration.\r\n * - Supports compact and disabled display variants.\r\n *\r\n * @example\r\n * ```html\r\n * <sky-listitem avatar=\"https://example.com/avatar.jpg\" selected>\r\n * <span slot=\"content\">John Doe</span>\r\n * <button slot=\"actions\" type=\"button\">Action</button>\r\n * </sky-listitem>\r\n * ```\r\n * ```vue\r\n * <template>\r\n * <sky-listitem avatar=\"https://example.com/avatar.jpg\" selected @item-activate=\"onActivate\">\r\n * <span slot=\"content\">John Doe</span>\r\n * <button slot=\"actions\" type=\"button\">Action</button>\r\n * </sky-listitem>\r\n * </template>\r\n * ```\r\n * ```jsx\r\n * export default function Demo() {\r\n * return (\r\n * <sky-listitem avatar=\"https://example.com/avatar.jpg\" selected>\r\n * <span slot=\"content\">John Doe</span>\r\n * <button slot=\"actions\" type=\"button\">Action</button>\r\n * </sky-listitem>\r\n * );\r\n * }\r\n * ```\r\n */\r\n@customElement(\"sky-listitem\")\r\nexport class SkyListitem extends LitElement {\r\n @property({ type: String }) avatar = \"\";\r\n /** Optional stable value for list selection (`sky-list` binding). */\r\n @property({ type: String }) value = \"\";\r\n @property({ type: String, reflect: true }) subheader = \"\";\r\n @property({ type: Boolean, reflect: true }) selected = false;\r\n @property({ type: Boolean, reflect: true }) dense = false;\r\n @property({ type: Boolean, reflect: true }) disabled = false;\r\n\r\n static override styles = css`\r\n :host {\r\n display: block;\r\n cursor: pointer;\r\n outline: none;\r\n }\r\n\r\n :host([subheader]) {\r\n cursor: default;\r\n }\r\n\r\n :host([disabled]) {\r\n opacity: var(--sky-opacity-disabled, 0.6);\r\n pointer-events: none;\r\n cursor: not-allowed;\r\n }\r\n\r\n .list-item {\r\n display: flex;\r\n align-items: center;\r\n padding: var(--sky-space-2\\\\.5, 10px) var(--sky-space-3\\\\.5, 14px);\r\n border-bottom: var(--sky-border-primary);\r\n border-inline-start: 3px solid transparent;\r\n transition:\r\n background var(--sky-transition-normal, 200ms ease),\r\n border-color var(--sky-transition-normal, 200ms ease),\r\n box-shadow var(--sky-transition-normal, 200ms ease);\r\n color: var(--sky-text-primary);\r\n position: relative;\r\n box-sizing: border-box;\r\n }\r\n\r\n :host(:hover:not([disabled])) .list-item,\r\n :host(:focus-visible) .list-item {\r\n background: var(--sky-hover-primary);\r\n }\r\n\r\n :host(:focus-visible) .list-item {\r\n box-shadow: var(--sky-focus-ring);\r\n }\r\n\r\n :host([selected]) .list-item {\r\n background: var(--sky-hover-secondary);\r\n border-inline-start-color: var(--sky-active-primary);\r\n }\r\n\r\n :host(:last-child) .list-item {\r\n border-bottom: none;\r\n }\r\n\r\n .leading {\r\n display: flex;\r\n align-items: center;\r\n margin-inline-end: var(--sky-space-3, 12px);\r\n flex-shrink: 0;\r\n }\r\n\r\n .avatar {\r\n width: 40px;\r\n height: 40px;\r\n border-radius: var(--sky-radius-full);\r\n object-fit: cover;\r\n background: var(--sky-hover-tertiary);\r\n }\r\n\r\n :host([dense]) .list-item {\r\n padding: var(--sky-space-1\\\\.5, 6px) var(--sky-space-2\\\\.5, 10px);\r\n }\r\n\r\n :host([dense]) .avatar {\r\n width: 32px;\r\n height: 32px;\r\n }\r\n\r\n .content {\r\n flex: 1 1 auto;\r\n min-width: 0;\r\n text-align: start;\r\n font-family: var(--sky-font);\r\n }\r\n\r\n .actions {\r\n display: flex;\r\n align-items: center;\r\n margin-inline-start: var(--sky-space-3, 12px);\r\n gap: var(--sky-space-2, 8px);\r\n flex-shrink: 0;\r\n }\r\n\r\n .subheader {\r\n font-family: var(--sky-font);\r\n font-size: var(--sky-font-size-sm);\r\n text-align: start;\r\n color: var(--sky-text-secondary);\r\n padding: var(--sky-space-1\\\\.5, 6px) var(--sky-space-3\\\\.5, 14px);\r\n font-weight: var(--sky-font-weight-semibold);\r\n background: var(--sky-hover-tertiary);\r\n border-bottom: var(--sky-border-primary);\r\n }\r\n\r\n @media (prefers-reduced-motion: reduce) {\r\n .list-item {\r\n transition: none;\r\n }\r\n }\r\n `;\r\n\r\n private onClick(): void {\r\n if (this.disabled || this.subheader) return;\r\n this.dispatchEvent(\r\n new CustomEvent<SkyListitemActivateDetail>(\"item-activate\", {\r\n detail: { item: this },\r\n bubbles: true,\r\n composed: true,\r\n }),\r\n );\r\n }\r\n\r\n setSelected(selected: boolean): void {\r\n this.selected = selected;\r\n this.requestUpdate();\r\n }\r\n\r\n override render() {\r\n if (this.subheader) {\r\n return html`\r\n <div class=\"subheader\" part=\"subheader\" role=\"presentation\">${this.subheader}</div>\r\n `;\r\n }\r\n\r\n return html`\r\n <div\r\n class=\"list-item\"\r\n part=\"list-item\"\r\n role=\"option\"\r\n aria-selected=${this.selected ? \"true\" : \"false\"}\r\n aria-disabled=${this.disabled ? \"true\" : \"false\"}\r\n tabindex=\"-1\"\r\n @click=${this.onClick}\r\n >\r\n ${when(\r\n this.avatar,\r\n () => html`\r\n <div class=\"leading\" part=\"leading\">\r\n <img\r\n class=\"avatar\"\r\n src=${this.avatar}\r\n alt=\"\"\r\n part=\"avatar\"\r\n />\r\n </div>\r\n `,\r\n )}\r\n\r\n <div class=\"content\" part=\"content\"><slot name=\"content\"></slot></div>\r\n\r\n <div class=\"actions\" part=\"actions\">\r\n <slot name=\"actions\">${nothing}</slot>\r\n </div>\r\n </div>\r\n `;\r\n }\r\n}"],"names":["SkyListitem","LitElement","constructor","super","arguments","this","avatar","value","subheader","selected","dense","disabled","onClick","dispatchEvent","CustomEvent","detail","item","bubbles","composed","setSelected","requestUpdate","render","html","when","nothing","styles","css","__decorateClass","property","type","String","prototype","reflect","Boolean","customElement"],"mappings":"+WAkEO,IAAMA,EAAN,cAA0BC,EAA1B,WAAAC,GAAAC,SAAAC,WACuBC,KAAAC,OAAS,GAETD,KAAAE,MAAQ,GACOF,KAAAG,UAAY,GACXH,KAAAI,UAAW,EACXJ,KAAAK,OAAQ,EACRL,KAAAM,UAAW,CAAA,CA6G/C,OAAAC,GACFP,KAAKM,UAAYN,KAAKG,WAC1BH,KAAKQ,cACH,IAAIC,YAAuC,gBAAiB,CAC1DC,OAAQ,CAAEC,KAAMX,MAChBY,SAAS,EACTC,UAAU,IAGhB,CAEA,WAAAC,CAAYV,GACVJ,KAAKI,SAAWA,EAChBJ,KAAKe,eACP,CAES,MAAAC,GACP,OAAIhB,KAAKG,UACAc,CAAA;sEACyDjB,KAAKG;QAIhEc,CAAA;;;;;wBAKajB,KAAKI,SAAW,OAAS;wBACzBJ,KAAKM,SAAW,OAAS;;iBAEhCN,KAAKO;;UAEZW,EACAlB,KAAKC,OACL,IAAMgB,CAAA;;;;sBAIMjB,KAAKC;;;;;;;;;;iCAWMkB;;;KAI/B,GA1KWxB,EASKyB,OAASC,CAAA;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;IARGC,EAAA,CAA3BC,EAAS,CAAEC,KAAMC,UADP9B,EACiB+B,UAAA,SAAA,GAEAJ,EAAA,CAA3BC,EAAS,CAAEC,KAAMC,UAHP9B,EAGiB+B,UAAA,QAAA,GACeJ,EAAA,CAA1CC,EAAS,CAAEC,KAAMC,OAAQE,SAAS,KAJxBhC,EAIgC+B,UAAA,YAAA,GACCJ,EAAA,CAA3CC,EAAS,CAAEC,KAAMI,QAASD,SAAS,KALzBhC,EAKiC+B,UAAA,WAAA,GACAJ,EAAA,CAA3CC,EAAS,CAAEC,KAAMI,QAASD,SAAS,KANzBhC,EAMiC+B,UAAA,QAAA,GACAJ,EAAA,CAA3CC,EAAS,CAAEC,KAAMI,QAASD,SAAS,KAPzBhC,EAOiC+B,UAAA,WAAA,GAPjC/B,EAAN2B,EAAA,CADNO,EAAc,iBACFlC"}
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.js","sources":[],"sourcesContent":[],"names":[],"mappings":""}
@@ -86,12 +86,12 @@ export declare class SkyRadio extends FormControlBase {
86
86
  static styles: import("lit").CSSResult;
87
87
  constructor();
88
88
  static shadowRootOptions: {
89
- delegatesFocus: boolean;
90
89
  clonable?: boolean;
91
- customElementRegistry?: CustomElementRegistry;
90
+ customElementRegistry?: CustomElementRegistry | null;
92
91
  mode: ShadowRootMode;
93
92
  serializable?: boolean;
94
93
  slotAssignment?: SlotAssignmentMode;
94
+ delegatesFocus: boolean;
95
95
  };
96
96
  connectedCallback(): void;
97
97
  disconnectedCallback(): void;