igniteui-webcomponents 7.3.0-beta.0 → 7.3.0-beta.1

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (293) hide show
  1. package/CHANGELOG.md +20 -0
  2. package/animations/player.d.ts +7 -2
  3. package/animations/player.js +1 -2
  4. package/animations/player.js.map +1 -1
  5. package/components/accordion/accordion.js +4 -16
  6. package/components/accordion/accordion.js.map +1 -1
  7. package/components/avatar/avatar.d.ts +0 -1
  8. package/components/avatar/avatar.js +5 -9
  9. package/components/avatar/avatar.js.map +1 -1
  10. package/components/badge/badge.d.ts +1 -3
  11. package/components/badge/badge.js +4 -8
  12. package/components/badge/badge.js.map +1 -1
  13. package/components/banner/banner.d.ts +6 -5
  14. package/components/banner/banner.js +19 -17
  15. package/components/banner/banner.js.map +1 -1
  16. package/components/button/button-base.d.ts +1 -1
  17. package/components/button/button-base.js.map +1 -1
  18. package/components/button-group/button-group.d.ts +0 -1
  19. package/components/button-group/button-group.js +12 -17
  20. package/components/button-group/button-group.js.map +1 -1
  21. package/components/calendar/base.d.ts +3 -13
  22. package/components/calendar/base.js +10 -31
  23. package/components/calendar/base.js.map +1 -1
  24. package/components/calendar/calendar.d.ts +2 -2
  25. package/components/calendar/months-view/months-view.d.ts +1 -1
  26. package/components/calendar/months-view/months-view.js.map +1 -1
  27. package/components/carousel/carousel-indicator.d.ts +1 -1
  28. package/components/carousel/carousel-indicator.js +13 -13
  29. package/components/carousel/carousel-indicator.js.map +1 -1
  30. package/components/carousel/carousel-slide.d.ts +0 -2
  31. package/components/carousel/carousel-slide.js +7 -9
  32. package/components/carousel/carousel-slide.js.map +1 -1
  33. package/components/carousel/carousel.d.ts +52 -35
  34. package/components/carousel/carousel.js +136 -122
  35. package/components/carousel/carousel.js.map +1 -1
  36. package/components/carousel/themes/carousel.base.css.js +1 -1
  37. package/components/carousel/themes/carousel.base.css.js.map +1 -1
  38. package/components/chat/chat-input.d.ts +1 -1
  39. package/components/chat/chat-input.js +21 -21
  40. package/components/chat/chat-input.js.map +1 -1
  41. package/components/chat/chat.d.ts +0 -2
  42. package/components/chat/chat.js +6 -12
  43. package/components/chat/chat.js.map +1 -1
  44. package/components/checkbox/checkbox-base.d.ts +1 -1
  45. package/components/checkbox/checkbox.d.ts +3 -5
  46. package/components/checkbox/checkbox.js +33 -44
  47. package/components/checkbox/checkbox.js.map +1 -1
  48. package/components/checkbox/switch.d.ts +1 -1
  49. package/components/checkbox/switch.js +23 -34
  50. package/components/checkbox/switch.js.map +1 -1
  51. package/components/chip/chip.d.ts +1 -14
  52. package/components/chip/chip.js +12 -33
  53. package/components/chip/chip.js.map +1 -1
  54. package/components/combo/combo-item.d.ts +1 -3
  55. package/components/combo/combo-item.js +5 -12
  56. package/components/combo/combo-item.js.map +1 -1
  57. package/components/combo/combo.d.ts +7 -20
  58. package/components/combo/combo.js +59 -81
  59. package/components/combo/combo.js.map +1 -1
  60. package/components/date-picker/date-picker.base.d.ts +12 -9
  61. package/components/date-picker/date-picker.base.js +24 -31
  62. package/components/date-picker/date-picker.base.js.map +1 -1
  63. package/components/date-picker/date-picker.d.ts +1 -1
  64. package/components/date-picker/date-picker.js +3 -5
  65. package/components/date-picker/date-picker.js.map +1 -1
  66. package/components/date-range-picker/date-range-input.d.ts +2 -4
  67. package/components/date-range-picker/date-range-input.js +6 -37
  68. package/components/date-range-picker/date-range-input.js.map +1 -1
  69. package/components/date-range-picker/date-range-picker.d.ts +2 -5
  70. package/components/date-range-picker/date-range-picker.js +15 -28
  71. package/components/date-range-picker/date-range-picker.js.map +1 -1
  72. package/components/date-range-picker/predefined-ranges-area.d.ts +2 -2
  73. package/components/date-range-picker/predefined-ranges-area.js +4 -6
  74. package/components/date-range-picker/predefined-ranges-area.js.map +1 -1
  75. package/components/date-range-picker/validators.d.ts +1 -1
  76. package/components/date-range-picker/validators.js +5 -18
  77. package/components/date-range-picker/validators.js.map +1 -1
  78. package/components/date-time-input/date-part.d.ts +2 -1
  79. package/components/date-time-input/date-part.js +38 -75
  80. package/components/date-time-input/date-part.js.map +1 -1
  81. package/components/date-time-input/date-time-input.base.d.ts +31 -12
  82. package/components/date-time-input/date-time-input.base.js +43 -11
  83. package/components/date-time-input/date-time-input.base.js.map +1 -1
  84. package/components/date-time-input/date-time-input.d.ts +1 -3
  85. package/components/date-time-input/date-time-input.js +7 -40
  86. package/components/date-time-input/date-time-input.js.map +1 -1
  87. package/components/date-time-input/datetime-mask-parser.d.ts +8 -0
  88. package/components/date-time-input/datetime-mask-parser.js +8 -8
  89. package/components/date-time-input/datetime-mask-parser.js.map +1 -1
  90. package/components/date-time-input/validators.js +3 -14
  91. package/components/date-time-input/validators.js.map +1 -1
  92. package/components/dialog/dialog.d.ts +6 -7
  93. package/components/dialog/dialog.js +21 -26
  94. package/components/dialog/dialog.js.map +1 -1
  95. package/components/divider/divider.d.ts +1 -4
  96. package/components/divider/divider.js +8 -17
  97. package/components/divider/divider.js.map +1 -1
  98. package/components/dropdown/dropdown-group.js +1 -6
  99. package/components/dropdown/dropdown-group.js.map +1 -1
  100. package/components/expansion-panel/expansion-panel.d.ts +15 -5
  101. package/components/expansion-panel/expansion-panel.js +23 -34
  102. package/components/expansion-panel/expansion-panel.js.map +1 -1
  103. package/components/file-input/file-input.d.ts +2 -14
  104. package/components/file-input/file-input.js +5 -23
  105. package/components/file-input/file-input.js.map +1 -1
  106. package/components/highlight/highlight.d.ts +6 -8
  107. package/components/highlight/highlight.js +12 -20
  108. package/components/highlight/highlight.js.map +1 -1
  109. package/components/icon/icon.d.ts +1 -1
  110. package/components/icon/registry/types.d.ts +1 -1
  111. package/components/icon/registry/types.js.map +1 -1
  112. package/components/input/input.d.ts +9 -19
  113. package/components/input/input.js +30 -60
  114. package/components/input/input.js.map +1 -1
  115. package/components/mask-input/mask-input.d.ts +1 -1
  116. package/components/mask-input/mask-input.js +2 -4
  117. package/components/mask-input/mask-input.js.map +1 -1
  118. package/components/nav-drawer/nav-drawer.d.ts +7 -7
  119. package/components/nav-drawer/nav-drawer.js +12 -23
  120. package/components/nav-drawer/nav-drawer.js.map +1 -1
  121. package/components/progress/base.d.ts +4 -7
  122. package/components/progress/base.js +21 -45
  123. package/components/progress/base.js.map +1 -1
  124. package/components/qr-code/qr-code.d.ts +1 -1
  125. package/components/qr-code/qr-code.js +3 -2
  126. package/components/qr-code/qr-code.js.map +1 -1
  127. package/components/qr-code/types.d.ts +1 -1
  128. package/components/qr-code/types.js.map +1 -1
  129. package/components/radio/controller.d.ts +2 -30
  130. package/components/radio/controller.js +8 -94
  131. package/components/radio/controller.js.map +1 -1
  132. package/components/radio/radio.d.ts +5 -5
  133. package/components/radio/radio.js +48 -58
  134. package/components/radio/radio.js.map +1 -1
  135. package/components/radio-group/radio-group.d.ts +1 -2
  136. package/components/radio-group/radio-group.js +2 -9
  137. package/components/radio-group/radio-group.js.map +1 -1
  138. package/components/rating/rating.d.ts +24 -12
  139. package/components/rating/rating.js +79 -73
  140. package/components/rating/rating.js.map +1 -1
  141. package/components/resize-container/default-ghost.js +4 -3
  142. package/components/resize-container/default-ghost.js.map +1 -1
  143. package/components/resize-container/resize-container.d.ts +1 -1
  144. package/components/resize-container/resize-container.js +5 -3
  145. package/components/resize-container/resize-container.js.map +1 -1
  146. package/components/resize-container/resize-controller.js +4 -3
  147. package/components/resize-container/resize-controller.js.map +1 -1
  148. package/components/select/select-group.d.ts +2 -1
  149. package/components/select/select-group.js +7 -11
  150. package/components/select/select-group.js.map +1 -1
  151. package/components/select/select.d.ts +3 -4
  152. package/components/select/select.js +23 -28
  153. package/components/select/select.js.map +1 -1
  154. package/components/slider/range-slider.d.ts +3 -2
  155. package/components/slider/range-slider.js +22 -70
  156. package/components/slider/range-slider.js.map +1 -1
  157. package/components/slider/slider-base.d.ts +9 -6
  158. package/components/slider/slider-base.js +27 -28
  159. package/components/slider/slider-base.js.map +1 -1
  160. package/components/slider/slider.js +9 -5
  161. package/components/slider/slider.js.map +1 -1
  162. package/components/splitter/splitter.d.ts +1 -1
  163. package/components/splitter/splitter.js.map +1 -1
  164. package/components/stepper/step.d.ts +3 -0
  165. package/components/stepper/step.js +9 -5
  166. package/components/stepper/step.js.map +1 -1
  167. package/components/stepper/stepper.d.ts +0 -11
  168. package/components/stepper/stepper.js +21 -86
  169. package/components/stepper/stepper.js.map +1 -1
  170. package/components/tabs/tab.d.ts +1 -1
  171. package/components/tabs/tab.js +6 -5
  172. package/components/tabs/tab.js.map +1 -1
  173. package/components/tabs/tabs.d.ts +1 -5
  174. package/components/tabs/tabs.js +12 -34
  175. package/components/tabs/tabs.js.map +1 -1
  176. package/components/textarea/textarea.d.ts +6 -7
  177. package/components/textarea/textarea.js +3 -10
  178. package/components/textarea/textarea.js.map +1 -1
  179. package/components/theme-provider/theme-provider.d.ts +2 -4
  180. package/components/theme-provider/theme-provider.js +11 -21
  181. package/components/theme-provider/theme-provider.js.map +1 -1
  182. package/components/tile-manager/tile-manager.d.ts +10 -21
  183. package/components/tile-manager/tile-manager.js +43 -74
  184. package/components/tile-manager/tile-manager.js.map +1 -1
  185. package/components/tile-manager/tile.d.ts +10 -18
  186. package/components/tile-manager/tile.js +50 -67
  187. package/components/tile-manager/tile.js.map +1 -1
  188. package/components/tooltip/tooltip.d.ts +4 -7
  189. package/components/tooltip/tooltip.js +20 -28
  190. package/components/tooltip/tooltip.js.map +1 -1
  191. package/components/tree/tree.d.ts +1 -14
  192. package/components/tree/tree.js +5 -23
  193. package/components/tree/tree.js.map +1 -1
  194. package/components/tree/tree.navigation.d.ts +1 -1
  195. package/components/tree/tree.navigation.js.map +1 -1
  196. package/components/validation-container/validation-container.d.ts +1 -2
  197. package/components/validation-container/validation-container.js.map +1 -1
  198. package/components/virtualization/engine.d.ts +40 -38
  199. package/components/virtualization/engine.js.map +1 -1
  200. package/components/virtualization/types.d.ts +6 -5
  201. package/components/virtualization/types.js.map +1 -1
  202. package/components/virtualization/virtualization.d.ts +94 -80
  203. package/components/virtualization/virtualization.js +10 -2
  204. package/components/virtualization/virtualization.js.map +1 -1
  205. package/custom-elements.json +9940 -7738
  206. package/igniteui-webcomponents.css-data.json +1 -1
  207. package/igniteui-webcomponents.html-data.json +1 -1
  208. package/internals/controllers/aria-projection.d.ts +6 -6
  209. package/internals/controllers/aria-projection.js.map +1 -1
  210. package/internals/controllers/context-provider.d.ts +48 -0
  211. package/internals/controllers/context-provider.js +29 -0
  212. package/internals/controllers/context-provider.js.map +1 -0
  213. package/internals/controllers/drag.js +6 -6
  214. package/internals/controllers/drag.js.map +1 -1
  215. package/internals/controllers/gestures.js +3 -0
  216. package/internals/controllers/gestures.js.map +1 -1
  217. package/internals/controllers/group.d.ts +64 -0
  218. package/internals/controllers/group.js +104 -0
  219. package/internals/controllers/group.js.map +1 -0
  220. package/internals/controllers/internals.d.ts +16 -3
  221. package/internals/controllers/internals.js +10 -3
  222. package/internals/controllers/internals.js.map +1 -1
  223. package/internals/controllers/key-bindings.d.ts +6 -0
  224. package/internals/controllers/key-bindings.js +3 -0
  225. package/internals/controllers/key-bindings.js.map +1 -1
  226. package/internals/controllers/roving-focus.d.ts +72 -0
  227. package/internals/controllers/roving-focus.js +61 -0
  228. package/internals/controllers/roving-focus.js.map +1 -0
  229. package/internals/controllers/slot.d.ts +8 -0
  230. package/internals/controllers/slot.js +4 -0
  231. package/internals/controllers/slot.js.map +1 -1
  232. package/internals/controllers/toggle.d.ts +96 -0
  233. package/internals/controllers/toggle.js +65 -0
  234. package/internals/controllers/toggle.js.map +1 -0
  235. package/internals/date/converters.js +2 -5
  236. package/internals/date/converters.js.map +1 -1
  237. package/internals/date/model.d.ts +4 -0
  238. package/internals/date/model.js +6 -0
  239. package/internals/date/model.js.map +1 -1
  240. package/internals/decorators/coerced-property.d.ts +47 -0
  241. package/internals/decorators/coerced-property.js +36 -0
  242. package/internals/decorators/coerced-property.js.map +1 -0
  243. package/internals/i18n/i18n-controller.d.ts +22 -3
  244. package/internals/i18n/i18n-controller.js +28 -6
  245. package/internals/i18n/i18n-controller.js.map +1 -1
  246. package/internals/mixins/alert.d.ts +1 -1
  247. package/internals/mixins/alert.js +5 -3
  248. package/internals/mixins/alert.js.map +1 -1
  249. package/internals/mixins/combo-box.d.ts +3 -12
  250. package/internals/mixins/combo-box.js +6 -32
  251. package/internals/mixins/combo-box.js.map +1 -1
  252. package/internals/mixins/forms/associated.js +18 -0
  253. package/internals/mixins/forms/associated.js.map +1 -1
  254. package/internals/mixins/forms/types.d.ts +20 -1
  255. package/internals/mixins/forms/types.js.map +1 -1
  256. package/internals/mixins/i18n.d.ts +31 -0
  257. package/internals/mixins/i18n.js +36 -0
  258. package/internals/mixins/i18n.js.map +1 -0
  259. package/internals/mixins/mask-behavior.d.ts +6 -5
  260. package/internals/mixins/mask-behavior.js +1 -2
  261. package/internals/mixins/mask-behavior.js.map +1 -1
  262. package/internals/mixins/option.js +4 -2
  263. package/internals/mixins/option.js.map +1 -1
  264. package/internals/templates/masked-input.d.ts +1 -1
  265. package/internals/templates/masked-input.js.map +1 -1
  266. package/internals/templates/slotted-icon.d.ts +32 -0
  267. package/internals/templates/slotted-icon.js +19 -0
  268. package/internals/templates/slotted-icon.js.map +1 -0
  269. package/internals/templates/toggle-shell.d.ts +46 -0
  270. package/internals/templates/toggle-shell.js +38 -0
  271. package/internals/templates/toggle-shell.js.map +1 -0
  272. package/internals/timing.d.ts +32 -0
  273. package/internals/timing.js +20 -0
  274. package/internals/timing.js.map +1 -0
  275. package/internals/utils/arrays.d.ts +2 -2
  276. package/internals/utils/arrays.js.map +1 -1
  277. package/internals/utils/dom.d.ts +22 -0
  278. package/internals/utils/dom.js +15 -1
  279. package/internals/utils/dom.js.map +1 -1
  280. package/internals/utils/math.d.ts +1 -1
  281. package/internals/utils/math.js.map +1 -1
  282. package/internals/utils/types.d.ts +1 -1
  283. package/internals/utils/types.js.map +1 -1
  284. package/internals/validators.d.ts +23 -0
  285. package/internals/validators.js +21 -0
  286. package/internals/validators.js.map +1 -1
  287. package/package.json +1 -1
  288. package/theming/theming-controller.d.ts +3 -3
  289. package/theming/theming-controller.js.map +1 -1
  290. package/web-types.json +2 -2
  291. package/internals/decorators/watch.d.ts +0 -5
  292. package/internals/decorators/watch.js +0 -19
  293. package/internals/decorators/watch.js.map +0 -1
@@ -1 +1 @@
1
- {"version":3,"file":"file-input.js","sourceRoot":"","sources":["../../../src/components/file-input/file-input.ts"],"names":[],"mappings":"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","sourcesContent":["import {\n FileInputResourceStringsEN,\n type IFileInputResourceStrings,\n} from 'igniteui-i18n-core';\nimport { html } from 'lit';\nimport { property, state } from 'lit/decorators.js';\nimport { ariaBindings } from '#internals/controllers/aria-projection.js';\nimport { addSlotController, setSlots } from '#internals/controllers/slot.js';\nimport { registerComponent } from '#internals/definitions/register.js';\nimport { addI18nController } from '#internals/i18n/i18n-controller.js';\nimport type { AbstractConstructor } from '#internals/mixins/constructor.js';\nimport { EventEmitterMixin } from '#internals/mixins/event-emitter.js';\nimport { FormValueFileListTransformers } from '#internals/mixins/forms/form-transformers.js';\nimport { createFormValueState } from '#internals/mixins/forms/form-value.js';\nimport { partMap } from '#internals/part-map.js';\nimport { hasFiles } from '#internals/utils/dom.js';\nimport { bindIf } from '#internals/utils/lit.js';\nimport { addThemingController } from '#theming/theming-controller.js';\nimport IgcButtonComponent from '../button/button.js';\nimport {\n IgcInputBaseComponent,\n type IgcInputComponentEventMap,\n} from '../input/input-base.js';\nimport { styles as baseStyle } from '../input/themes/input.base.css.js';\nimport { styles as shared } from '../input/themes/shared/input.common.css.js';\nimport IgcValidationContainerComponent from '../validation-container/validation-container.js';\nimport { styles } from './themes/file-input.base.css.js';\nimport { all } from './themes/themes.js';\nimport { fileValidators } from './validators.js';\n\n/* blazorSuppress */\nexport interface IgcFileInputComponentEventMap extends Omit<\n IgcInputComponentEventMap,\n 'igcChange' | 'igcInput'\n> {\n igcCancel: CustomEvent<FileList>;\n igcChange: CustomEvent<FileList>;\n}\n\nconst Slots = setSlots(\n 'prefix',\n 'suffix',\n 'helper-text',\n 'file-selector-text',\n 'file-missing-text',\n 'value-missing',\n 'custom-error',\n 'invalid'\n);\n\n/* blazorSuppress */\n/**\n * @element igc-file-input\n *\n * @slot prefix - Renders content before the input.\n * @slot suffix - Renders content after input.\n * @slot helper-text - Renders content below the input.\n * @slot file-selector-text - Renders content for the browse button when input type is file.\n * @slot file-missing-text - Renders content when input type is file and no file is chosen.\n * @slot value-missing - Renders content when the required validation fails.\n * @slot custom-error - Renders content when setCustomValidity(message) is set.\n * @slot invalid - Renders content when the component is in invalid state (validity.valid = false).\n *\n * @fires igcChange - Emitted when the control's checked state changes.\n * @fires igcCancel - Emitted when the control's file picker dialog is canceled.\n *\n * @csspart container - The main wrapper that holds all main input elements.\n * @csspart input - The native input element.\n * @csspart label - The native label element.\n * @csspart file-names - The file names wrapper when input type is 'file'.\n * @csspart file-selector-button - The browse button when input type is 'file'.\n * @csspart prefix - The prefix wrapper.\n * @csspart suffix - The suffix wrapper.\n * @csspart helper-text - The helper text wrapper.\n */\nexport default class IgcFileInputComponent extends EventEmitterMixin<\n IgcFileInputComponentEventMap,\n AbstractConstructor<IgcInputBaseComponent>\n>(IgcInputBaseComponent) {\n public static readonly tagName = 'igc-file-input';\n public static styles = [baseStyle, shared, styles];\n\n /* blazorSuppress */\n public static register(): void {\n registerComponent(\n IgcFileInputComponent,\n IgcValidationContainerComponent,\n IgcButtonComponent\n );\n }\n\n //#region Internal attributes and properties\n\n protected override readonly _themes = addThemingController(this, all);\n\n protected override readonly _slots = addSlotController(this, {\n slots: Slots,\n });\n\n protected override readonly _formValue = createFormValueState(this, {\n initialValue: null,\n transformers: FormValueFileListTransformers,\n });\n\n protected readonly _i18nController = addI18nController(this, {\n defaultEN: FileInputResourceStringsEN,\n });\n\n protected override get __validators() {\n return fileValidators;\n }\n\n private get _fileNames(): string | null {\n if (!hasFiles(this)) {\n return null;\n }\n\n return Array.from(this.files)\n .map((file) => file.name || 'unnamed')\n .join(', ');\n }\n\n /**\n * Indicates whether the file picker dialog is currently active.\n * Used to manage validation on blur.\n */\n @state()\n private _filePickerActive = false;\n\n //#endregion\n\n //#region Public attributes and properties\n\n /* @tsTwoWayProperty(true, \"igcChange\", \"detail\", false) */\n /**\n * The value of the control.\n * Similar to native file input, this property is read-only and cannot be set programmatically.\n * @attr\n */\n @property()\n public set value(value: string) {\n if (value === '' && this._input) {\n this._input.value = value;\n }\n }\n\n public get value(): string {\n return this._input?.value ?? '';\n }\n\n /**\n * The resource strings for localization.\n */\n @property({ attribute: false })\n public set resourceStrings(value: IFileInputResourceStrings) {\n this._i18nController.resourceStrings = value;\n }\n\n public get resourceStrings(): IFileInputResourceStrings {\n return this._i18nController.resourceStrings;\n }\n\n /**\n * Gets/Sets the locale used for getting language, affecting resource strings.\n * @attr locale\n */\n @property()\n public set locale(value: string) {\n this._i18nController.locale = value;\n }\n\n public get locale(): string {\n return this._i18nController.locale;\n }\n\n /**\n * Whether the control allows the user to select more than one file.\n *\n * @attr\n * @default false\n */\n @property({ type: Boolean, reflect: true })\n public multiple = false;\n\n /**\n * The file types the control accepts, as a comma-separated list.\n * @attr\n */\n @property()\n public accept = '';\n\n /**\n * Whether the control should receive focus automatically.\n * @attr\n */\n @property({ type: Boolean })\n public override autofocus!: boolean;\n\n /** Returns the list of selected files. */\n public get files(): FileList {\n return this._input?.files ?? new DataTransfer().files;\n }\n\n //#endregion\n\n //#region Internal methods\n\n /**\n * A file input cannot have a default file list, so the `value` attribute\n * never contributes a default - otherwise its string would be stored as the\n * FileList default and submitted character-by-character after a form reset.\n */\n protected override _setDefaultValue(): void {\n this._formValue.defaultValue = null;\n }\n\n /**\n * Restores directly instead of through the `value` setter: the setter is\n * deliberately inert (read-only semantics) and never updates the form state.\n */\n protected override _restoreDefaultValue(): void {\n if (this._input) {\n this._input.value = '';\n }\n this._formValue.setValueAndFormState(this._formValue.defaultValue);\n this.requestUpdate();\n }\n\n //#endregion\n\n //#region Event Handlers\n\n private _handleChange(): void {\n this._filePickerActive = false;\n this._setTouchedState();\n this._formValue.setValueAndFormState(this.files);\n\n this.requestUpdate();\n this.emitEvent('igcChange', { detail: this.files });\n }\n\n private _handleCancel(): void {\n this._filePickerActive = false;\n this._setTouchedState();\n this._validate();\n\n this.emitEvent('igcCancel', { detail: this.files });\n }\n\n protected override _handleBlur(): void {\n this._filePickerActive ? this._validate() : super._handleBlur();\n }\n\n /* c8 ignore next 3 */\n protected _handleClick(): void {\n this._filePickerActive = true;\n }\n\n //#endregion\n\n protected override _renderFileParts() {\n const emptyText =\n this.placeholder ?? this.resourceStrings.file_input_placeholder;\n\n return html`\n <div part=\"file-parts\">\n <div part=\"file-selector-button\">\n <igc-button variant=\"flat\" ?disabled=${this.disabled} tabindex=\"-1\">\n <slot name=\"file-selector-text\"\n >${this.resourceStrings.file_input_upload_button}</slot\n >\n </igc-button>\n </div>\n <div part=\"file-names\">\n <span>\n ${\n this._fileNames ??\n html`<slot name=\"file-missing-text\">${emptyText}</slot>`\n }\n </span>\n </div>\n </div>\n `;\n }\n\n protected override _renderInput() {\n const hasNegativeTabIndex = this.getAttribute('tabindex') === '-1';\n\n return html`\n <input\n ${ariaBindings(this._ariaTarget.resolveBindings())}\n id=${this._inputId}\n part=${partMap(this._resolvePartNames('input'))}\n type=\"file\"\n ?disabled=${this.disabled}\n ?required=${this.required}\n ?autofocus=${this.autofocus}\n ?multiple=${this.multiple}\n tabindex=${bindIf(hasNegativeTabIndex, -1)}\n accept=${bindIf(this.accept, this.accept)}\n @click=${this._handleClick}\n @change=${this._handleChange}\n @cancel=${this._handleCancel}\n @blur=${this._handleBlur}\n />\n `;\n }\n}\n\ndeclare global {\n interface HTMLElementTagNameMap {\n 'igc-file-input': IgcFileInputComponent;\n }\n}\n"]}
1
+ {"version":3,"file":"file-input.js","sourceRoot":"","sources":["../../../src/components/file-input/file-input.ts"],"names":[],"mappings":"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","sourcesContent":["import {\n FileInputResourceStringsEN,\n type IFileInputResourceStrings,\n} from 'igniteui-i18n-core';\nimport { html } from 'lit';\nimport { property, state } from 'lit/decorators.js';\nimport { ariaBindings } from '#internals/controllers/aria-projection.js';\nimport { addSlotController, setSlots } from '#internals/controllers/slot.js';\nimport { registerComponent } from '#internals/definitions/register.js';\nimport type { I18nControllerConfig } from '#internals/i18n/i18n-controller.js';\nimport type { AbstractConstructor } from '#internals/mixins/constructor.js';\nimport { EventEmitterMixin } from '#internals/mixins/event-emitter.js';\nimport { FormValueFileListTransformers } from '#internals/mixins/forms/form-transformers.js';\nimport { createFormValueState } from '#internals/mixins/forms/form-value.js';\nimport { I18nMixin } from '#internals/mixins/i18n.js';\nimport { partMap } from '#internals/part-map.js';\nimport { hasFiles } from '#internals/utils/dom.js';\nimport { bindIf } from '#internals/utils/lit.js';\nimport { addThemingController } from '#theming/theming-controller.js';\nimport IgcButtonComponent from '../button/button.js';\nimport {\n IgcInputBaseComponent,\n type IgcInputComponentEventMap,\n} from '../input/input-base.js';\nimport { styles as baseStyle } from '../input/themes/input.base.css.js';\nimport { styles as shared } from '../input/themes/shared/input.common.css.js';\nimport IgcValidationContainerComponent from '../validation-container/validation-container.js';\nimport { styles } from './themes/file-input.base.css.js';\nimport { all } from './themes/themes.js';\nimport { fileValidators } from './validators.js';\n\n/* blazorSuppress */\nexport interface IgcFileInputComponentEventMap extends Omit<\n IgcInputComponentEventMap,\n 'igcChange' | 'igcInput'\n> {\n igcCancel: CustomEvent<FileList>;\n igcChange: CustomEvent<FileList>;\n}\n\nconst Slots = setSlots(\n 'prefix',\n 'suffix',\n 'helper-text',\n 'file-selector-text',\n 'file-missing-text',\n 'value-missing',\n 'custom-error',\n 'invalid'\n);\n\nconst i18n: I18nControllerConfig<IFileInputResourceStrings> = {\n defaultEN: FileInputResourceStringsEN,\n};\n\n/* blazorSuppress */\n/**\n * @element igc-file-input\n *\n * @slot prefix - Renders content before the input.\n * @slot suffix - Renders content after input.\n * @slot helper-text - Renders content below the input.\n * @slot file-selector-text - Renders content for the browse button when input type is file.\n * @slot file-missing-text - Renders content when input type is file and no file is chosen.\n * @slot value-missing - Renders content when the required validation fails.\n * @slot custom-error - Renders content when setCustomValidity(message) is set.\n * @slot invalid - Renders content when the component is in invalid state (validity.valid = false).\n *\n * @fires igcChange - Emitted when the control's checked state changes.\n * @fires igcCancel - Emitted when the control's file picker dialog is canceled.\n *\n * @csspart container - The main wrapper that holds all main input elements.\n * @csspart input - The native input element.\n * @csspart label - The native label element.\n * @csspart file-names - The file names wrapper when input type is 'file'.\n * @csspart file-selector-button - The browse button when input type is 'file'.\n * @csspart prefix - The prefix wrapper.\n * @csspart suffix - The suffix wrapper.\n * @csspart helper-text - The helper text wrapper.\n */\nexport default class IgcFileInputComponent extends I18nMixin(\n EventEmitterMixin<\n IgcFileInputComponentEventMap,\n AbstractConstructor<IgcInputBaseComponent>\n >(IgcInputBaseComponent),\n i18n\n) {\n public static readonly tagName = 'igc-file-input';\n public static styles = [baseStyle, shared, styles];\n\n /* blazorSuppress */\n public static register(): void {\n registerComponent(\n IgcFileInputComponent,\n IgcValidationContainerComponent,\n IgcButtonComponent\n );\n }\n\n //#region Internal attributes and properties\n\n protected override readonly _themes = addThemingController(this, all);\n\n protected override readonly _slots = addSlotController(this, {\n slots: Slots,\n });\n\n protected override readonly _formValue = createFormValueState(this, {\n initialValue: null,\n transformers: FormValueFileListTransformers,\n });\n\n protected override get __validators() {\n return fileValidators;\n }\n\n private get _fileNames(): string | null {\n if (!hasFiles(this)) {\n return null;\n }\n\n return Array.from(this.files)\n .map((file) => file.name || 'unnamed')\n .join(', ');\n }\n\n /**\n * Indicates whether the file picker dialog is currently active.\n * Used to manage validation on blur.\n */\n @state()\n private _filePickerActive = false;\n\n //#endregion\n\n //#region Public attributes and properties\n\n /* @tsTwoWayProperty(true, \"igcChange\", \"detail\", false) */\n /**\n * The value of the control.\n * Similar to native file input, this property is read-only and cannot be set programmatically.\n * @attr\n */\n @property()\n public set value(value: string) {\n if (value === '' && this._input) {\n this._input.value = value;\n }\n }\n\n public get value(): string {\n return this._input?.value ?? '';\n }\n\n /**\n * Whether the control allows the user to select more than one file.\n *\n * @attr\n * @default false\n */\n @property({ type: Boolean, reflect: true })\n public multiple = false;\n\n /**\n * The file types the control accepts, as a comma-separated list.\n * @attr\n */\n @property()\n public accept = '';\n\n /**\n * Whether the control should receive focus automatically.\n * @attr\n */\n @property({ type: Boolean })\n public override autofocus!: boolean;\n\n /** Returns the list of selected files. */\n public get files(): FileList {\n return this._input?.files ?? new DataTransfer().files;\n }\n\n //#endregion\n\n //#region Internal methods\n\n /**\n * A file input cannot have a default file list, so the `value` attribute\n * never contributes a default - otherwise its string would be stored as the\n * FileList default and submitted character-by-character after a form reset.\n */\n protected override _setDefaultValue(): void {\n this._formValue.defaultValue = null;\n }\n\n /**\n * Restores directly instead of through the `value` setter: the setter is\n * deliberately inert (read-only semantics) and never updates the form state.\n */\n protected override _restoreDefaultValue(): void {\n if (this._input) {\n this._input.value = '';\n }\n this._formValue.setValueAndFormState(this._formValue.defaultValue);\n this.requestUpdate();\n }\n\n //#endregion\n\n //#region Event Handlers\n\n private _handleChange(): void {\n this._filePickerActive = false;\n this._setTouchedState();\n this._formValue.setValueAndFormState(this.files);\n\n this.requestUpdate();\n this.emitEvent('igcChange', { detail: this.files });\n }\n\n private _handleCancel(): void {\n this._filePickerActive = false;\n this._setTouchedState();\n this._validate();\n\n this.emitEvent('igcCancel', { detail: this.files });\n }\n\n protected override _handleBlur(): void {\n this._filePickerActive ? this._validate() : super._handleBlur();\n }\n\n /* c8 ignore next 3 */\n protected _handleClick(): void {\n this._filePickerActive = true;\n }\n\n //#endregion\n\n protected override _renderFileParts() {\n const emptyText =\n this.placeholder ?? this.resourceStrings.file_input_placeholder;\n\n return html`\n <div part=\"file-parts\">\n <div part=\"file-selector-button\">\n <igc-button variant=\"flat\" ?disabled=${this.disabled} tabindex=\"-1\">\n <slot name=\"file-selector-text\"\n >${this.resourceStrings.file_input_upload_button}</slot\n >\n </igc-button>\n </div>\n <div part=\"file-names\">\n <span>\n ${\n this._fileNames ??\n html`<slot name=\"file-missing-text\">${emptyText}</slot>`\n }\n </span>\n </div>\n </div>\n `;\n }\n\n protected override _renderInput() {\n const hasNegativeTabIndex = this.getAttribute('tabindex') === '-1';\n\n return html`\n <input\n ${ariaBindings(this._ariaTarget.resolveBindings())}\n id=${this._inputId}\n part=${partMap(this._resolvePartNames('input'))}\n type=\"file\"\n ?disabled=${this.disabled}\n ?required=${this.required}\n ?autofocus=${this.autofocus}\n ?multiple=${this.multiple}\n tabindex=${bindIf(hasNegativeTabIndex, -1)}\n accept=${bindIf(this.accept, this.accept)}\n @click=${this._handleClick}\n @change=${this._handleChange}\n @cancel=${this._handleCancel}\n @blur=${this._handleBlur}\n />\n `;\n }\n}\n\ndeclare global {\n interface HTMLElementTagNameMap {\n 'igc-file-input': IgcFileInputComponent;\n }\n}\n"]}
@@ -18,7 +18,7 @@ import { type HighlightNavigation } from './service.js';
18
18
  * @cssproperty --background-active - The background color for the active highlighted text node.
19
19
  *
20
20
  * @example
21
- * Basic usage wrap your text and set the `search-text` attribute:
21
+ * Basic usage - wrap your text and set the `search-text` attribute:
22
22
  * ```html
23
23
  * <igc-highlight search-text="world">
24
24
  * <p>Hello, world! The world is a wonderful place.</p>
@@ -29,7 +29,7 @@ import { type HighlightNavigation } from './service.js';
29
29
  * Case-sensitive search:
30
30
  * ```html
31
31
  * <igc-highlight search-text="Hello" case-sensitive>
32
- * <p>Hello hello HELLO only the first one matches.</p>
32
+ * <p>Hello hello HELLO - only the first one matches.</p>
33
33
  * </igc-highlight>
34
34
  * ```
35
35
  *
@@ -67,8 +67,8 @@ export default class IgcHighlightComponent extends LitElement {
67
67
  static styles: import("lit").CSSResult[];
68
68
  static register(): void;
69
69
  private readonly _service;
70
- private _caseSensitive;
71
- private _searchText;
70
+ /** Shared config for the properties that trigger a new search when changed. */
71
+ private static readonly _search;
72
72
  /**
73
73
  * Whether to match the searched text with case sensitivity in mind.
74
74
  * When `true`, only exact-case occurrences of `searchText` are highlighted.
@@ -76,8 +76,7 @@ export default class IgcHighlightComponent extends LitElement {
76
76
  * @attr case-sensitive
77
77
  * @default false
78
78
  */
79
- set caseSensitive(value: boolean);
80
- get caseSensitive(): boolean;
79
+ caseSensitive: boolean;
81
80
  /**
82
81
  * The string to search and highlight in the DOM content of the component.
83
82
  * Setting this property triggers a new search automatically.
@@ -85,8 +84,7 @@ export default class IgcHighlightComponent extends LitElement {
85
84
  *
86
85
  * @attr search-text
87
86
  */
88
- set searchText(value: string);
89
- get searchText(): string;
87
+ searchText: string;
90
88
  /** The total number of matches found for the current `searchText`. Returns `0` when there are no matches or `searchText` is empty. */
91
89
  get size(): number;
92
90
  /** The zero-based index of the currently active (focused) match. Returns `0` when there are no matches. */
@@ -6,6 +6,7 @@ var __decorate = (this && this.__decorate) || function (decorators, target, key,
6
6
  };
7
7
  import { html, LitElement } from 'lit';
8
8
  import { property } from 'lit/decorators.js';
9
+ import { coercedProperty, } from '#internals/decorators/coerced-property.js';
9
10
  import { registerComponent } from '#internals/definitions/register.js';
10
11
  import { addThemingController } from '#theming/theming-controller.js';
11
12
  import { createHighlightController, } from './service.js';
@@ -17,20 +18,9 @@ export default class IgcHighlightComponent extends LitElement {
17
18
  static register() {
18
19
  registerComponent(IgcHighlightComponent);
19
20
  }
20
- set caseSensitive(value) {
21
- this._caseSensitive = value;
22
- this.search();
23
- }
24
- get caseSensitive() {
25
- return this._caseSensitive;
26
- }
27
- set searchText(value) {
28
- this._searchText = value;
29
- this.search();
30
- }
31
- get searchText() {
32
- return this._searchText;
33
- }
21
+ static { this._search = {
22
+ onChange: ({ host }) => host.search(),
23
+ }; }
34
24
  get size() {
35
25
  return this._service.size;
36
26
  }
@@ -40,8 +30,8 @@ export default class IgcHighlightComponent extends LitElement {
40
30
  constructor() {
41
31
  super();
42
32
  this._service = createHighlightController(this);
43
- this._caseSensitive = false;
44
- this._searchText = '';
33
+ this.caseSensitive = false;
34
+ this.searchText = '';
45
35
  addThemingController(this, all, {
46
36
  themeChange: this._addStylesheet,
47
37
  });
@@ -69,9 +59,11 @@ export default class IgcHighlightComponent extends LitElement {
69
59
  }
70
60
  }
71
61
  __decorate([
72
- property({ type: Boolean, reflect: true, attribute: 'case-sensitive' })
73
- ], IgcHighlightComponent.prototype, "caseSensitive", null);
62
+ property({ type: Boolean, reflect: true, attribute: 'case-sensitive' }),
63
+ coercedProperty(IgcHighlightComponent._search)
64
+ ], IgcHighlightComponent.prototype, "caseSensitive", void 0);
74
65
  __decorate([
75
- property({ attribute: 'search-text' })
76
- ], IgcHighlightComponent.prototype, "searchText", null);
66
+ property({ attribute: 'search-text' }),
67
+ coercedProperty(IgcHighlightComponent._search)
68
+ ], IgcHighlightComponent.prototype, "searchText", void 0);
77
69
  //# sourceMappingURL=highlight.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"highlight.js","sourceRoot":"","sources":["../../../src/components/highlight/highlight.ts"],"names":[],"mappings":";;;;;;AAAA,OAAO,EAAE,IAAI,EAAE,UAAU,EAAE,MAAM,KAAK,CAAC;AACvC,OAAO,EAAE,QAAQ,EAAE,MAAM,mBAAmB,CAAC;AAC7C,OAAO,EAAE,iBAAiB,EAAE,MAAM,oCAAoC,CAAC;AACvE,OAAO,EAAE,oBAAoB,EAAE,MAAM,gCAAgC,CAAC;AACtE,OAAO,EACL,yBAAyB,GAE1B,MAAM,cAAc,CAAC;AACtB,OAAO,EAAE,MAAM,IAAI,MAAM,EAAE,MAAM,yCAAyC,CAAC;AAC3E,OAAO,EAAE,GAAG,EAAE,MAAM,oBAAoB,CAAC;AAgEzC,MAAM,CAAC,OAAO,OAAO,qBAAsB,SAAQ,UAAU;aACpC,YAAO,GAAG,eAAe,AAAlB,CAAmB;aAC1B,WAAM,GAAG,CAAC,MAAM,CAAC,AAAX,CAAY;IAGlC,MAAM,CAAC,QAAQ;QACpB,iBAAiB,CAAC,qBAAqB,CAAC,CAAC;IAC3C,CAAC;IAqBD,IAAW,aAAa,CAAC,KAAc;QACrC,IAAI,CAAC,cAAc,GAAG,KAAK,CAAC;QAC5B,IAAI,CAAC,MAAM,EAAE,CAAC;IAChB,CAAC;IAED,IAAW,aAAa;QACtB,OAAO,IAAI,CAAC,cAAc,CAAC;IAC7B,CAAC;IAUD,IAAW,UAAU,CAAC,KAAa;QACjC,IAAI,CAAC,WAAW,GAAG,KAAK,CAAC;QACzB,IAAI,CAAC,MAAM,EAAE,CAAC;IAChB,CAAC;IAED,IAAW,UAAU;QACnB,OAAO,IAAI,CAAC,WAAW,CAAC;IAC1B,CAAC;IAGD,IAAW,IAAI;QACb,OAAO,IAAI,CAAC,QAAQ,CAAC,IAAI,CAAC;IAC5B,CAAC;IAGD,IAAW,OAAO;QAChB,OAAO,IAAI,CAAC,QAAQ,CAAC,OAAO,CAAC;IAC/B,CAAC;IAID;QACE,KAAK,EAAE,CAAC;QAxDO,aAAQ,GAAG,yBAAyB,CAAC,IAAI,CAAC,CAAC;QAEpD,mBAAc,GAAG,KAAK,CAAC;QACvB,gBAAW,GAAG,EAAE,CAAC;QAuDvB,oBAAoB,CAAC,IAAI,EAAE,GAAG,EAAE;YAC9B,WAAW,EAAE,IAAI,CAAC,cAAc;SACjC,CAAC,CAAC;IACL,CAAC;IAIO,cAAc;QACpB,IAAI,CAAC,QAAQ,CAAC,gBAAgB,EAAE,CAAC;IACnC,CAAC;IAYM,IAAI,CAAC,OAA6B;QACvC,IAAI,CAAC,QAAQ,CAAC,IAAI,CAAC,OAAO,CAAC,CAAC;IAC9B,CAAC;IAQM,QAAQ,CAAC,OAA6B;QAC3C,IAAI,CAAC,QAAQ,CAAC,QAAQ,CAAC,OAAO,CAAC,CAAC;IAClC,CAAC;IAQM,SAAS,CAAC,KAAa,EAAE,OAA6B;QAC3D,IAAI,CAAC,QAAQ,CAAC,SAAS,CAAC,KAAK,EAAE,OAAO,CAAC,CAAC;IAC1C,CAAC;IAQM,MAAM;QACX,IAAI,IAAI,CAAC,UAAU,EAAE,CAAC;YACpB,IAAI,CAAC,QAAQ,CAAC,KAAK,EAAE,CAAC;YACtB,IAAI,CAAC,QAAQ,CAAC,IAAI,CAAC,IAAI,CAAC,UAAU,CAAC,CAAC;QACtC,CAAC;IACH,CAAC;IAIkB,MAAM;QACvB,OAAO,IAAI,CAAA,eAAe,CAAC;IAC7B,CAAC;;AAvGD;IADC,QAAQ,CAAC,EAAE,IAAI,EAAE,OAAO,EAAE,OAAO,EAAE,IAAI,EAAE,SAAS,EAAE,gBAAgB,EAAE,CAAC;0DAIvE;AAcD;IADC,QAAQ,CAAC,EAAE,SAAS,EAAE,aAAa,EAAE,CAAC;uDAItC","sourcesContent":["import { html, LitElement } from 'lit';\nimport { property } from 'lit/decorators.js';\nimport { registerComponent } from '#internals/definitions/register.js';\nimport { addThemingController } from '#theming/theming-controller.js';\nimport {\n createHighlightController,\n type HighlightNavigation,\n} from './service.js';\nimport { styles as shared } from './themes/shared/highlight.common.css.js';\nimport { all } from './themes/themes.js';\n\n/**\n * The highlight component provides efficient searching and highlighting of text\n * projected into it via its default slot. It uses the native CSS Custom Highlight API\n * to apply highlight styles to matched text nodes without modifying the DOM.\n *\n * The component supports case-sensitive matching, programmatic navigation between\n * matches, and automatic scroll-into-view of the active match.\n *\n * @element igc-highlight\n *\n * @slot - The default slot. Place the text content you want to search and highlight here.\n *\n * @cssproperty --foreground - The text color for a highlighted text node.\n * @cssproperty --background - The background color for a highlighted text node.\n * @cssproperty --foreground-active - The text color for the active highlighted text node.\n * @cssproperty --background-active - The background color for the active highlighted text node.\n *\n * @example\n * Basic usage wrap your text and set the `search-text` attribute:\n * ```html\n * <igc-highlight search-text=\"world\">\n * <p>Hello, world! The world is a wonderful place.</p>\n * </igc-highlight>\n * ```\n *\n * @example\n * Case-sensitive search:\n * ```html\n * <igc-highlight search-text=\"Hello\" case-sensitive>\n * <p>Hello hello HELLO only the first one matches.</p>\n * </igc-highlight>\n * ```\n *\n * @example\n * Navigating between matches programmatically:\n * ```typescript\n * const highlight = document.querySelector('igc-highlight');\n *\n * highlight.searchText = 'world';\n * console.log(highlight.size); // total number of matches\n * console.log(highlight.current); // index of the active match (0-based)\n *\n * highlight.next(); // move to the next match\n * highlight.previous(); // move to the previous match\n * highlight.setActive(2); // jump to a specific match by index\n * ```\n *\n * @example\n * Prevent scroll-into-view when navigating:\n * ```typescript\n * const highlight = document.querySelector('igc-highlight');\n * highlight.next({ preventScroll: true });\n * ```\n *\n * @example\n * Re-run search after dynamic content changes (e.g. lazy-loaded text):\n * ```typescript\n * const highlight = document.querySelector('igc-highlight');\n * // After slotted content has been updated:\n * highlight.search();\n * ```\n */\nexport default class IgcHighlightComponent extends LitElement {\n public static readonly tagName = 'igc-highlight';\n public static override styles = [shared];\n\n /* blazorSuppress */\n public static register(): void {\n registerComponent(IgcHighlightComponent);\n }\n\n //#region Internal properties and state\n\n private readonly _service = createHighlightController(this);\n\n private _caseSensitive = false;\n private _searchText = '';\n\n //#endregion\n\n //#region Public properties and attributes\n\n /**\n * Whether to match the searched text with case sensitivity in mind.\n * When `true`, only exact-case occurrences of `searchText` are highlighted.\n *\n * @attr case-sensitive\n * @default false\n */\n @property({ type: Boolean, reflect: true, attribute: 'case-sensitive' })\n public set caseSensitive(value: boolean) {\n this._caseSensitive = value;\n this.search();\n }\n\n public get caseSensitive(): boolean {\n return this._caseSensitive;\n }\n\n /**\n * The string to search and highlight in the DOM content of the component.\n * Setting this property triggers a new search automatically.\n * An empty string clears all highlights.\n *\n * @attr search-text\n */\n @property({ attribute: 'search-text' })\n public set searchText(value: string) {\n this._searchText = value;\n this.search();\n }\n\n public get searchText(): string {\n return this._searchText;\n }\n\n /** The total number of matches found for the current `searchText`. Returns `0` when there are no matches or `searchText` is empty. */\n public get size(): number {\n return this._service.size;\n }\n\n /** The zero-based index of the currently active (focused) match. Returns `0` when there are no matches. */\n public get current(): number {\n return this._service.current;\n }\n\n //#endregion\n\n constructor() {\n super();\n\n addThemingController(this, all, {\n themeChange: this._addStylesheet,\n });\n }\n\n //#region Internal methods\n\n private _addStylesheet(): void {\n this._service.attachStylesheet();\n }\n\n //#endregion\n\n //#region Public methods\n\n /**\n * Moves the active highlight to the next match.\n * Wraps around to the first match after the last one.\n *\n * @param options - Optional navigation options (e.g. `preventScroll`).\n */\n public next(options?: HighlightNavigation): void {\n this._service.next(options);\n }\n\n /**\n * Moves the active highlight to the previous match.\n * Wraps around to the last match when going back from the first one.\n *\n * @param options - Optional navigation options (e.g. `preventScroll`).\n */\n public previous(options?: HighlightNavigation): void {\n this._service.previous(options);\n }\n\n /**\n * Moves the active highlight to the match at the specified zero-based index.\n *\n * @param index - The zero-based index of the match to activate.\n * @param options - Optional navigation options (e.g. `preventScroll`).\n */\n public setActive(index: number, options?: HighlightNavigation): void {\n this._service.setActive(index, options);\n }\n\n /**\n * Re-runs the highlight search based on the current `searchText` and `caseSensitive` values.\n *\n * Call this method after the slotted content changes dynamically (e.g. after lazy loading\n * or programmatic DOM mutations) to ensure all matches are up to date.\n */\n public search(): void {\n if (this.hasUpdated) {\n this._service.clear();\n this._service.find(this.searchText);\n }\n }\n\n //#endregion\n\n protected override render() {\n return html`<slot></slot>`;\n }\n}\n\ndeclare global {\n interface HTMLElementTagNameMap {\n 'igc-highlight': IgcHighlightComponent;\n }\n}\n"]}
1
+ {"version":3,"file":"highlight.js","sourceRoot":"","sources":["../../../src/components/highlight/highlight.ts"],"names":[],"mappings":";;;;;;AAAA,OAAO,EAAE,IAAI,EAAE,UAAU,EAAE,MAAM,KAAK,CAAC;AACvC,OAAO,EAAE,QAAQ,EAAE,MAAM,mBAAmB,CAAC;AAC7C,OAAO,EACL,eAAe,GAEhB,MAAM,2CAA2C,CAAC;AACnD,OAAO,EAAE,iBAAiB,EAAE,MAAM,oCAAoC,CAAC;AACvE,OAAO,EAAE,oBAAoB,EAAE,MAAM,gCAAgC,CAAC;AACtE,OAAO,EACL,yBAAyB,GAE1B,MAAM,cAAc,CAAC;AACtB,OAAO,EAAE,MAAM,IAAI,MAAM,EAAE,MAAM,yCAAyC,CAAC;AAC3E,OAAO,EAAE,GAAG,EAAE,MAAM,oBAAoB,CAAC;AAgEzC,MAAM,CAAC,OAAO,OAAO,qBAAsB,SAAQ,UAAU;aACpC,YAAO,GAAG,eAAe,AAAlB,CAAmB;aAC1B,WAAM,GAAG,CAAC,MAAM,CAAC,AAAX,CAAY;IAGlC,MAAM,CAAC,QAAQ;QACpB,iBAAiB,CAAC,qBAAqB,CAAC,CAAC;IAC3C,CAAC;aAOuB,YAAO,GAG3B;QACF,QAAQ,EAAE,CAAC,EAAE,IAAI,EAAE,EAAE,EAAE,CAAC,IAAI,CAAC,MAAM,EAAE;KACtC,AAL8B,CAK7B;IA6BF,IAAW,IAAI;QACb,OAAO,IAAI,CAAC,QAAQ,CAAC,IAAI,CAAC;IAC5B,CAAC;IAGD,IAAW,OAAO;QAChB,OAAO,IAAI,CAAC,QAAQ,CAAC,OAAO,CAAC;IAC/B,CAAC;IAID;QACE,KAAK,EAAE,CAAC;QAjDO,aAAQ,GAAG,yBAAyB,CAAC,IAAI,CAAC,CAAC;QAuBrD,kBAAa,GAAG,KAAK,CAAC;QAWtB,eAAU,GAAG,EAAE,CAAC;QAiBrB,oBAAoB,CAAC,IAAI,EAAE,GAAG,EAAE;YAC9B,WAAW,EAAE,IAAI,CAAC,cAAc;SACjC,CAAC,CAAC;IACL,CAAC;IAIO,cAAc;QACpB,IAAI,CAAC,QAAQ,CAAC,gBAAgB,EAAE,CAAC;IACnC,CAAC;IAYM,IAAI,CAAC,OAA6B;QACvC,IAAI,CAAC,QAAQ,CAAC,IAAI,CAAC,OAAO,CAAC,CAAC;IAC9B,CAAC;IAQM,QAAQ,CAAC,OAA6B;QAC3C,IAAI,CAAC,QAAQ,CAAC,QAAQ,CAAC,OAAO,CAAC,CAAC;IAClC,CAAC;IAQM,SAAS,CAAC,KAAa,EAAE,OAA6B;QAC3D,IAAI,CAAC,QAAQ,CAAC,SAAS,CAAC,KAAK,EAAE,OAAO,CAAC,CAAC;IAC1C,CAAC;IAQM,MAAM;QACX,IAAI,IAAI,CAAC,UAAU,EAAE,CAAC;YACpB,IAAI,CAAC,QAAQ,CAAC,KAAK,EAAE,CAAC;YACtB,IAAI,CAAC,QAAQ,CAAC,IAAI,CAAC,IAAI,CAAC,UAAU,CAAC,CAAC;QACtC,CAAC;IACH,CAAC;IAIkB,MAAM;QACvB,OAAO,IAAI,CAAA,eAAe,CAAC;IAC7B,CAAC;;AA1FM;IAFN,QAAQ,CAAC,EAAE,IAAI,EAAE,OAAO,EAAE,OAAO,EAAE,IAAI,EAAE,SAAS,EAAE,gBAAgB,EAAE,CAAC;IACvE,eAAe,CAAC,qBAAqB,CAAC,OAAO,CAAC;4DAClB;AAWtB;IAFN,QAAQ,CAAC,EAAE,SAAS,EAAE,aAAa,EAAE,CAAC;IACtC,eAAe,CAAC,qBAAqB,CAAC,OAAO,CAAC;yDACxB","sourcesContent":["import { html, LitElement } from 'lit';\nimport { property } from 'lit/decorators.js';\nimport {\n coercedProperty,\n type CoercedPropertyConfig,\n} from '#internals/decorators/coerced-property.js';\nimport { registerComponent } from '#internals/definitions/register.js';\nimport { addThemingController } from '#theming/theming-controller.js';\nimport {\n createHighlightController,\n type HighlightNavigation,\n} from './service.js';\nimport { styles as shared } from './themes/shared/highlight.common.css.js';\nimport { all } from './themes/themes.js';\n\n/**\n * The highlight component provides efficient searching and highlighting of text\n * projected into it via its default slot. It uses the native CSS Custom Highlight API\n * to apply highlight styles to matched text nodes without modifying the DOM.\n *\n * The component supports case-sensitive matching, programmatic navigation between\n * matches, and automatic scroll-into-view of the active match.\n *\n * @element igc-highlight\n *\n * @slot - The default slot. Place the text content you want to search and highlight here.\n *\n * @cssproperty --foreground - The text color for a highlighted text node.\n * @cssproperty --background - The background color for a highlighted text node.\n * @cssproperty --foreground-active - The text color for the active highlighted text node.\n * @cssproperty --background-active - The background color for the active highlighted text node.\n *\n * @example\n * Basic usage - wrap your text and set the `search-text` attribute:\n * ```html\n * <igc-highlight search-text=\"world\">\n * <p>Hello, world! The world is a wonderful place.</p>\n * </igc-highlight>\n * ```\n *\n * @example\n * Case-sensitive search:\n * ```html\n * <igc-highlight search-text=\"Hello\" case-sensitive>\n * <p>Hello hello HELLO - only the first one matches.</p>\n * </igc-highlight>\n * ```\n *\n * @example\n * Navigating between matches programmatically:\n * ```typescript\n * const highlight = document.querySelector('igc-highlight');\n *\n * highlight.searchText = 'world';\n * console.log(highlight.size); // total number of matches\n * console.log(highlight.current); // index of the active match (0-based)\n *\n * highlight.next(); // move to the next match\n * highlight.previous(); // move to the previous match\n * highlight.setActive(2); // jump to a specific match by index\n * ```\n *\n * @example\n * Prevent scroll-into-view when navigating:\n * ```typescript\n * const highlight = document.querySelector('igc-highlight');\n * highlight.next({ preventScroll: true });\n * ```\n *\n * @example\n * Re-run search after dynamic content changes (e.g. lazy-loaded text):\n * ```typescript\n * const highlight = document.querySelector('igc-highlight');\n * // After slotted content has been updated:\n * highlight.search();\n * ```\n */\nexport default class IgcHighlightComponent extends LitElement {\n public static readonly tagName = 'igc-highlight';\n public static override styles = [shared];\n\n /* blazorSuppress */\n public static register(): void {\n registerComponent(IgcHighlightComponent);\n }\n\n //#region Internal properties and state\n\n private readonly _service = createHighlightController(this);\n\n /** Shared config for the properties that trigger a new search when changed. */\n private static readonly _search: CoercedPropertyConfig<\n unknown,\n IgcHighlightComponent\n > = {\n onChange: ({ host }) => host.search(),\n };\n\n //#endregion\n\n //#region Public properties and attributes\n\n /**\n * Whether to match the searched text with case sensitivity in mind.\n * When `true`, only exact-case occurrences of `searchText` are highlighted.\n *\n * @attr case-sensitive\n * @default false\n */\n @property({ type: Boolean, reflect: true, attribute: 'case-sensitive' })\n @coercedProperty(IgcHighlightComponent._search)\n public caseSensitive = false;\n\n /**\n * The string to search and highlight in the DOM content of the component.\n * Setting this property triggers a new search automatically.\n * An empty string clears all highlights.\n *\n * @attr search-text\n */\n @property({ attribute: 'search-text' })\n @coercedProperty(IgcHighlightComponent._search)\n public searchText = '';\n\n /** The total number of matches found for the current `searchText`. Returns `0` when there are no matches or `searchText` is empty. */\n public get size(): number {\n return this._service.size;\n }\n\n /** The zero-based index of the currently active (focused) match. Returns `0` when there are no matches. */\n public get current(): number {\n return this._service.current;\n }\n\n //#endregion\n\n constructor() {\n super();\n\n addThemingController(this, all, {\n themeChange: this._addStylesheet,\n });\n }\n\n //#region Internal methods\n\n private _addStylesheet(): void {\n this._service.attachStylesheet();\n }\n\n //#endregion\n\n //#region Public methods\n\n /**\n * Moves the active highlight to the next match.\n * Wraps around to the first match after the last one.\n *\n * @param options - Optional navigation options (e.g. `preventScroll`).\n */\n public next(options?: HighlightNavigation): void {\n this._service.next(options);\n }\n\n /**\n * Moves the active highlight to the previous match.\n * Wraps around to the last match when going back from the first one.\n *\n * @param options - Optional navigation options (e.g. `preventScroll`).\n */\n public previous(options?: HighlightNavigation): void {\n this._service.previous(options);\n }\n\n /**\n * Moves the active highlight to the match at the specified zero-based index.\n *\n * @param index - The zero-based index of the match to activate.\n * @param options - Optional navigation options (e.g. `preventScroll`).\n */\n public setActive(index: number, options?: HighlightNavigation): void {\n this._service.setActive(index, options);\n }\n\n /**\n * Re-runs the highlight search based on the current `searchText` and `caseSensitive` values.\n *\n * Call this method after the slotted content changes dynamically (e.g. after lazy loading\n * or programmatic DOM mutations) to ensure all matches are up to date.\n */\n public search(): void {\n if (this.hasUpdated) {\n this._service.clear();\n this._service.find(this.searchText);\n }\n }\n\n //#endregion\n\n protected override render() {\n return html`<slot></slot>`;\n }\n}\n\ndeclare global {\n interface HTMLElementTagNameMap {\n 'igc-highlight': IgcHighlightComponent;\n }\n}\n"]}
@@ -96,7 +96,7 @@ export default class IgcIconComponent extends LitElement {
96
96
  protected update(props: PropertyValues<this>): void;
97
97
  protected firstUpdated(): void;
98
98
  private _getIcon;
99
- protected render(): import("lit-html").TemplateResult<1> | typeof nothing;
99
+ protected render(): typeof nothing | import("lit-html").TemplateResult<1>;
100
100
  protected registerIcon(name: string, url: string, collection?: string, stripMeta?: boolean): Promise<void>;
101
101
  protected registerIconFromText(name: string, iconText: string, collection?: string, stripMeta?: boolean): void;
102
102
  protected setIconRef(name: string, collection: string, icon: IconMeta): void;
@@ -59,7 +59,7 @@ export interface RegisterIconOptions {
59
59
  *
60
60
  * @remarks
61
61
  * SVG `<title>` elements cause the browser to display a native tooltip when
62
- * the user hovers over the icon an undesirable side-effect when using icon
62
+ * the user hovers over the icon - an undesirable side-effect when using icon
63
63
  * packs such as `@igniteui/material-icons-extended` that embed accessible
64
64
  * metadata inside every icon.
65
65
  *
@@ -1 +1 @@
1
- {"version":3,"file":"types.js","sourceRoot":"","sources":["../../../../src/components/icon/registry/types.ts"],"names":[],"mappings":"AAsBA,MAAM,CAAN,IAAY,UAIX;AAJD,WAAY,UAAU;IACpB,qDAAa,CAAA;IACb,2DAAgB,CAAA;IAChB,yEAAuB,CAAA;AACzB,CAAC,EAJW,UAAU,KAAV,UAAU,QAIrB","sourcesContent":["import type { Theme } from '#theming/types.js';\n\n// Exported internal types\n\n/** Icons or references organized by collection, then by name. */\nexport type IconsCollection<V> = Map<string, Map<string, V>>;\n\n/** Notified when the icon registry changes. Subscribers re-resolve their own state. */\nexport type IconCallback = () => void;\nexport type IconThemeKey = Theme | 'default';\n\nexport type SvgIcon = {\n svg: string;\n title?: string;\n};\n\nexport type IconReferencePair = {\n alias: IconMeta;\n target: IconMeta;\n overwrite: boolean;\n};\n\nexport enum ActionType {\n SyncState = 0,\n RegisterIcon = 1,\n UpdateIconReference = 2,\n}\n\n/** @hidden */\nexport interface BroadcastIconsChangeMessage {\n actionType: ActionType;\n collections?: IconsCollection<SvgIcon>;\n references?: IconsCollection<IconMeta>;\n origin?: string;\n}\n\n// Exported public types\n\n/** Identifies a registered icon by its name and the collection it belongs to. */\nexport interface IconMeta {\n /** The name identifier of the icon in the collection. */\n name: string;\n /** The name of the collection the icon is registered in. */\n collection: string;\n /** @internal Internal use only. */\n external?: boolean;\n}\n\n/**\n * Options for registering an SVG icon.\n *\n * @remarks\n * Can be passed as the third argument to `registerIcon` or `registerIconFromText`\n * in place of a plain collection string, giving you control over both the\n * target collection and SVG metadata stripping in a single, named-parameter call.\n *\n * @example:\n * ```typescript\n * registerIconFromText('home', svg, { collection: 'my-collection', stripMeta: true });\n * ```\n */\nexport interface RegisterIconOptions {\n /**\n * The collection to register the icon in.\n * @default 'default'\n */\n collection?: string;\n\n /**\n * Whether to strip SVG meta elements (`<title>` and `<desc>`) from the icon\n * before storing it.\n *\n * @remarks\n * SVG `<title>` elements cause the browser to display a native tooltip when\n * the user hovers over the icon an undesirable side-effect when using icon\n * packs such as `@igniteui/material-icons-extended` that embed accessible\n * metadata inside every icon.\n *\n * When `stripMeta` is `true`:\n * - The `<title>` and `<desc>` child elements are removed from the stored SVG.\n * - Any `aria-labelledby` / `aria-describedby` references on the root\n * `<svg>` element that pointed to the stripped elements' IDs are cleaned up\n * so the resulting markup contains no dangling ARIA references.\n * - The **title text** is still captured and stored as `SvgIcon.title`, which\n * the icon component continues to expose as its host `aria-label`.\n * Accessibility is therefore preserved at the component level while the\n * browser tooltip is suppressed at the SVG level.\n *\n * @default false\n */\n stripMeta?: boolean;\n}\n"]}
1
+ {"version":3,"file":"types.js","sourceRoot":"","sources":["../../../../src/components/icon/registry/types.ts"],"names":[],"mappings":"AAsBA,MAAM,CAAN,IAAY,UAIX;AAJD,WAAY,UAAU;IACpB,qDAAa,CAAA;IACb,2DAAgB,CAAA;IAChB,yEAAuB,CAAA;AACzB,CAAC,EAJW,UAAU,KAAV,UAAU,QAIrB","sourcesContent":["import type { Theme } from '#theming/types.js';\n\n// Exported internal types\n\n/** Icons or references organized by collection, then by name. */\nexport type IconsCollection<V> = Map<string, Map<string, V>>;\n\n/** Notified when the icon registry changes. Subscribers re-resolve their own state. */\nexport type IconCallback = () => void;\nexport type IconThemeKey = Theme | 'default';\n\nexport type SvgIcon = {\n svg: string;\n title?: string;\n};\n\nexport type IconReferencePair = {\n alias: IconMeta;\n target: IconMeta;\n overwrite: boolean;\n};\n\nexport enum ActionType {\n SyncState = 0,\n RegisterIcon = 1,\n UpdateIconReference = 2,\n}\n\n/** @hidden */\nexport interface BroadcastIconsChangeMessage {\n actionType: ActionType;\n collections?: IconsCollection<SvgIcon>;\n references?: IconsCollection<IconMeta>;\n origin?: string;\n}\n\n// Exported public types\n\n/** Identifies a registered icon by its name and the collection it belongs to. */\nexport interface IconMeta {\n /** The name identifier of the icon in the collection. */\n name: string;\n /** The name of the collection the icon is registered in. */\n collection: string;\n /** @internal Internal use only. */\n external?: boolean;\n}\n\n/**\n * Options for registering an SVG icon.\n *\n * @remarks\n * Can be passed as the third argument to `registerIcon` or `registerIconFromText`\n * in place of a plain collection string, giving you control over both the\n * target collection and SVG metadata stripping in a single, named-parameter call.\n *\n * @example:\n * ```typescript\n * registerIconFromText('home', svg, { collection: 'my-collection', stripMeta: true });\n * ```\n */\nexport interface RegisterIconOptions {\n /**\n * The collection to register the icon in.\n * @default 'default'\n */\n collection?: string;\n\n /**\n * Whether to strip SVG meta elements (`<title>` and `<desc>`) from the icon\n * before storing it.\n *\n * @remarks\n * SVG `<title>` elements cause the browser to display a native tooltip when\n * the user hovers over the icon - an undesirable side-effect when using icon\n * packs such as `@igniteui/material-icons-extended` that embed accessible\n * metadata inside every icon.\n *\n * When `stripMeta` is `true`:\n * - The `<title>` and `<desc>` child elements are removed from the stored SVG.\n * - Any `aria-labelledby` / `aria-describedby` references on the root\n * `<svg>` element that pointed to the stripped elements' IDs are cleaned up\n * so the resulting markup contains no dangling ARIA references.\n * - The **title text** is still captured and stored as `SvgIcon.title`, which\n * the icon component continues to expose as its host `aria-label`.\n * Accessibility is therefore preserved at the component level while the\n * browser tooltip is suppressed at the SVG level.\n *\n * @default false\n */\n stripMeta?: boolean;\n}\n"]}
@@ -33,17 +33,13 @@ import { IgcInputBaseComponent } from './input-base.js';
33
33
  export default class IgcInputComponent extends IgcInputBaseComponent {
34
34
  static readonly tagName = "igc-input";
35
35
  static styles: import("lit").CSSResult[];
36
+ /** Shared config for the constraint properties - a change revalidates. */
37
+ private static readonly _revalidate;
36
38
  static register(): void;
37
39
  protected readonly _themes: import("#theming/theming-controller.js").ThemingController;
38
- protected readonly _slots: import("#internals/controllers/slot.js").SlotController<"invalid" | "prefix" | "[default]" | "suffix" | "helper-text" | "value-missing" | "too-long" | "too-short" | "custom-error" | "range-overflow" | "range-underflow" | "type-mismatch" | "pattern-mismatch" | "step-mismatch">;
40
+ protected readonly _slots: import("#internals/controllers/slot.js").SlotController<"invalid" | "prefix" | "helper-text" | "[default]" | "suffix" | "value-missing" | "too-long" | "too-short" | "custom-error" | "range-overflow" | "range-underflow" | "type-mismatch" | "pattern-mismatch" | "step-mismatch">;
39
41
  protected readonly _formValue: import("#internals/mixins/forms/form-value.js").FormValue<string>;
40
42
  protected get __validators(): import("../../internals/validators.js").Validator<IgcInputComponent>[];
41
- private _min?;
42
- private _max?;
43
- private _minLength?;
44
- private _maxLength?;
45
- private _pattern?;
46
- private _step?;
47
43
  /**
48
44
  * The value of the control.
49
45
  * @attr
@@ -72,38 +68,32 @@ export default class IgcInputComponent extends IgcInputBaseComponent {
72
68
  * The regular expression the value is validated against.
73
69
  * @attr
74
70
  */
75
- set pattern(value: string | undefined);
76
- get pattern(): string | undefined;
71
+ pattern?: string;
77
72
  /**
78
73
  * The minimum string length required by the control.
79
74
  * @attr minlength
80
75
  */
81
- set minLength(value: number | undefined);
82
- get minLength(): number | undefined;
76
+ minLength?: number;
83
77
  /**
84
78
  * The maximum string length of the control.
85
79
  * @attr maxlength
86
80
  */
87
- set maxLength(value: number | undefined);
88
- get maxLength(): number | undefined;
81
+ maxLength?: number;
89
82
  /**
90
83
  * The minimum value the control accepts.
91
84
  * @attr
92
85
  */
93
- set min(value: number | undefined);
94
- get min(): number | undefined;
86
+ min?: number;
95
87
  /**
96
88
  * The maximum value the control accepts.
97
89
  * @attr
98
90
  */
99
- set max(value: number | undefined);
100
- get max(): number | undefined;
91
+ max?: number;
101
92
  /**
102
93
  * The granularity the value must adhere to.
103
94
  * @attr
104
95
  */
105
- set step(value: number | undefined);
106
- get step(): number | undefined;
96
+ step?: number;
107
97
  /**
108
98
  * Whether the control should receive focus automatically.
109
99
  * @attr
@@ -10,6 +10,7 @@ import { ifDefined } from 'lit/directives/if-defined.js';
10
10
  import { live } from 'lit/directives/live.js';
11
11
  import { ariaBindings } from '#internals/controllers/aria-projection.js';
12
12
  import { addSlotController, setSlots } from '#internals/controllers/slot.js';
13
+ import { coercedProperty, } from '#internals/decorators/coerced-property.js';
13
14
  import { registerComponent } from '#internals/definitions/register.js';
14
15
  import { createFormValueState } from '#internals/mixins/forms/form-value.js';
15
16
  import { partMap } from '#internals/part-map.js';
@@ -34,10 +35,19 @@ export default class IgcInputComponent extends IgcInputBaseComponent {
34
35
  });
35
36
  this.type = 'text';
36
37
  this.readOnly = false;
38
+ this.pattern = undefined;
39
+ this.minLength = undefined;
40
+ this.maxLength = undefined;
41
+ this.min = undefined;
42
+ this.max = undefined;
43
+ this.step = undefined;
37
44
  this.validateOnly = false;
38
45
  }
39
46
  static { this.tagName = 'igc-input'; }
40
47
  static { this.styles = [styles, shared]; }
48
+ static { this._revalidate = {
49
+ onChange: ({ host }) => host._validate(),
50
+ }; }
41
51
  static register() {
42
52
  registerComponent(IgcInputComponent, IgcValidationContainerComponent);
43
53
  }
@@ -50,48 +60,6 @@ export default class IgcInputComponent extends IgcInputBaseComponent {
50
60
  get value() {
51
61
  return this._formValue.value;
52
62
  }
53
- set pattern(value) {
54
- this._pattern = value;
55
- this._validate();
56
- }
57
- get pattern() {
58
- return this._pattern;
59
- }
60
- set minLength(value) {
61
- this._minLength = value;
62
- this._validate();
63
- }
64
- get minLength() {
65
- return this._minLength;
66
- }
67
- set maxLength(value) {
68
- this._maxLength = value;
69
- this._validate();
70
- }
71
- get maxLength() {
72
- return this._maxLength;
73
- }
74
- set min(value) {
75
- this._min = value;
76
- this._validate();
77
- }
78
- get min() {
79
- return this._min;
80
- }
81
- set max(value) {
82
- this._max = value;
83
- this._validate();
84
- }
85
- get max() {
86
- return this._max;
87
- }
88
- set step(value) {
89
- this._step = value;
90
- this._validate();
91
- }
92
- get step() {
93
- return this._step;
94
- }
95
63
  setRangeText(replacement, start, end, selectMode = 'preserve') {
96
64
  this._input?.setRangeText(replacement, start, end, selectMode);
97
65
  this.value = this._input?.value ?? '';
@@ -108,14 +76,10 @@ export default class IgcInputComponent extends IgcInputBaseComponent {
108
76
  this.value = this._input?.value ?? '';
109
77
  }
110
78
  _handleInput() {
111
- this._setTouchedState();
112
- this.value = this._input?.value ?? '';
113
- this.emitEvent('igcInput', { detail: this.value });
79
+ this._commitValue(this._input?.value ?? '', 'igcInput');
114
80
  }
115
81
  _handleChange() {
116
- this._setTouchedState();
117
- this.value = this._input?.value ?? '';
118
- this.emitEvent('igcChange', { detail: this.value });
82
+ this._commitValue(this._input?.value ?? '', 'igcChange');
119
83
  }
120
84
  _renderInput() {
121
85
  const hasNegativeTabIndex = this.getAttribute('tabindex') === '-1';
@@ -162,23 +126,29 @@ __decorate([
162
126
  property({ attribute: 'inputmode' })
163
127
  ], IgcInputComponent.prototype, "inputMode", void 0);
164
128
  __decorate([
165
- property()
166
- ], IgcInputComponent.prototype, "pattern", null);
129
+ property(),
130
+ coercedProperty(IgcInputComponent._revalidate)
131
+ ], IgcInputComponent.prototype, "pattern", void 0);
167
132
  __decorate([
168
- property({ type: Number, attribute: 'minlength' })
169
- ], IgcInputComponent.prototype, "minLength", null);
133
+ property({ type: Number, attribute: 'minlength' }),
134
+ coercedProperty(IgcInputComponent._revalidate)
135
+ ], IgcInputComponent.prototype, "minLength", void 0);
170
136
  __decorate([
171
- property({ type: Number, attribute: 'maxlength' })
172
- ], IgcInputComponent.prototype, "maxLength", null);
137
+ property({ type: Number, attribute: 'maxlength' }),
138
+ coercedProperty(IgcInputComponent._revalidate)
139
+ ], IgcInputComponent.prototype, "maxLength", void 0);
173
140
  __decorate([
174
- property({ type: Number })
175
- ], IgcInputComponent.prototype, "min", null);
141
+ property({ type: Number }),
142
+ coercedProperty(IgcInputComponent._revalidate)
143
+ ], IgcInputComponent.prototype, "min", void 0);
176
144
  __decorate([
177
- property({ type: Number })
178
- ], IgcInputComponent.prototype, "max", null);
145
+ property({ type: Number }),
146
+ coercedProperty(IgcInputComponent._revalidate)
147
+ ], IgcInputComponent.prototype, "max", void 0);
179
148
  __decorate([
180
- property({ type: Number })
181
- ], IgcInputComponent.prototype, "step", null);
149
+ property({ type: Number }),
150
+ coercedProperty(IgcInputComponent._revalidate)
151
+ ], IgcInputComponent.prototype, "step", void 0);
182
152
  __decorate([
183
153
  property({ type: Boolean })
184
154
  ], IgcInputComponent.prototype, "autofocus", void 0);
@@ -1 +1 @@
1
- {"version":3,"file":"input.js","sourceRoot":"","sources":["../../../src/components/input/input.ts"],"names":[],"mappings":"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","sourcesContent":["import { html } from 'lit';\nimport { property } from 'lit/decorators.js';\nimport { ifDefined } from 'lit/directives/if-defined.js';\nimport { live } from 'lit/directives/live.js';\nimport { ariaBindings } from '#internals/controllers/aria-projection.js';\nimport { addSlotController, setSlots } from '#internals/controllers/slot.js';\nimport { registerComponent } from '#internals/definitions/register.js';\nimport { createFormValueState } from '#internals/mixins/forms/form-value.js';\nimport { partMap } from '#internals/part-map.js';\nimport { bindIf } from '#internals/utils/lit.js';\nimport { addThemingController } from '#theming/theming-controller.js';\nimport type {\n InputType,\n RangeTextSelectMode,\n SelectionRangeDirection,\n} from '../types.js';\nimport IgcValidationContainerComponent from '../validation-container/validation-container.js';\nimport { IgcInputBaseComponent } from './input-base.js';\nimport { styles } from './themes/input.base.css.js';\nimport { styles as shared } from './themes/shared/input.common.css.js';\nimport { all } from './themes/themes.js';\nimport { numberValidators, stringValidators } from './validators.js';\n\nconst Slots = setSlots(\n 'prefix',\n 'suffix',\n 'helper-text',\n 'value-missing',\n 'type-mismatch',\n 'pattern-mismatch',\n 'too-long',\n 'too-short',\n 'range-overflow',\n 'range-underflow',\n 'step-mismatch',\n 'custom-error',\n 'invalid'\n);\n\n/**\n * A highly customizable single-line text field for entering and editing data,\n * with support for prefix/suffix content, helper text, form integration, and built-in validation.\n *\n * @element igc-input\n *\n * @slot prefix - Renders content before the input.\n * @slot suffix - Renders content after input.\n * @slot helper-text - Renders content below the input.\n * @slot value-missing - Renders content when the required validation fails.\n * @slot type-mismatch - Renders content when the a type url/email input pattern validation fails.\n * @slot pattern-mismatch - Renders content when the pattern validation fails.\n * @slot too-long - Renders content when the maxlength validation fails.\n * @slot too-short - Renders content when the minlength validation fails.\n * @slot range-overflow - Renders content when the max validation fails.\n * @slot range-underflow - Renders content when the min validation fails.\n * @slot step-mismatch - Renders content when the step validation fails.\n * @slot custom-error - Renders content when setCustomValidity(message) is set.\n * @slot invalid - Renders content when the component is in invalid state (validity.valid = false).\n *\n * @fires igcInput - Emitted when the control input receives user input.\n * @fires igcChange - Emitted when the control's checked state changes.\n *\n * @csspart container - The main wrapper that holds all main input elements.\n * @csspart input - The native input element.\n * @csspart label - The native label element.\n * @csspart prefix - The prefix wrapper.\n * @csspart suffix - The suffix wrapper.\n * @csspart helper-text - The helper text wrapper.\n */\nexport default class IgcInputComponent extends IgcInputBaseComponent {\n public static readonly tagName = 'igc-input';\n public static styles = [styles, shared];\n\n /* blazorSuppress */\n public static register(): void {\n registerComponent(IgcInputComponent, IgcValidationContainerComponent);\n }\n\n protected override readonly _themes = addThemingController(this, all);\n\n protected override readonly _slots = addSlotController(this, {\n slots: Slots,\n });\n\n protected override readonly _formValue = createFormValueState(this, {\n initialValue: '',\n });\n\n protected override get __validators() {\n return this.type !== 'number' ? stringValidators : numberValidators;\n }\n\n private _min?: number;\n private _max?: number;\n private _minLength?: number;\n private _maxLength?: number;\n private _pattern?: string;\n private _step?: number;\n\n /* @tsTwoWayProperty(true, \"igcChange\", \"detail\", false) */\n /**\n * The value of the control.\n * @attr\n */\n @property()\n public set value(value: string) {\n this._formValue.setValueAndFormState(value);\n }\n\n public get value(): string {\n return this._formValue.value;\n }\n\n /* alternateName: displayType */\n /**\n * The type of the control.\n * @attr\n */\n @property({ reflect: true })\n public type: InputType = 'text';\n\n /**\n * Makes the control a readonly field.\n *\n * @attr readonly\n * @default false\n */\n @property({ type: Boolean, reflect: true })\n public readOnly = false;\n\n /**\n * A hint to the browser for which virtual keyboard layout to display.\n * See [relevant MDN article](https://developer.mozilla.org/en-US/docs/Web/HTML/Global_attributes/inputmode)\n * @attr inputmode\n */\n @property({ attribute: 'inputmode' })\n public override inputMode!: string;\n\n /**\n * The regular expression the value is validated against.\n * @attr\n */\n @property()\n public set pattern(value: string | undefined) {\n this._pattern = value;\n this._validate();\n }\n\n public get pattern(): string | undefined {\n return this._pattern;\n }\n\n /**\n * The minimum string length required by the control.\n * @attr minlength\n */\n @property({ type: Number, attribute: 'minlength' })\n public set minLength(value: number | undefined) {\n this._minLength = value;\n this._validate();\n }\n\n public get minLength(): number | undefined {\n return this._minLength;\n }\n\n /**\n * The maximum string length of the control.\n * @attr maxlength\n */\n @property({ type: Number, attribute: 'maxlength' })\n public set maxLength(value: number | undefined) {\n this._maxLength = value;\n this._validate();\n }\n\n public get maxLength(): number | undefined {\n return this._maxLength;\n }\n\n /**\n * The minimum value the control accepts.\n * @attr\n */\n @property({ type: Number })\n public set min(value: number | undefined) {\n this._min = value;\n this._validate();\n }\n\n public get min(): number | undefined {\n return this._min;\n }\n\n /**\n * The maximum value the control accepts.\n * @attr\n */\n @property({ type: Number })\n public set max(value: number | undefined) {\n this._max = value;\n this._validate();\n }\n\n public get max(): number | undefined {\n return this._max;\n }\n\n /**\n * The granularity the value must adhere to.\n * @attr\n */\n @property({ type: Number })\n public set step(value: number | undefined) {\n this._step = value;\n this._validate();\n }\n\n public get step(): number | undefined {\n return this._step;\n }\n\n /**\n * Whether the control should receive focus automatically.\n * @attr\n */\n @property({ type: Boolean })\n public override autofocus!: boolean;\n\n /**\n * A hint for the browser on how to autofill the control.\n * @attr\n */\n @property()\n public autocomplete!: string;\n\n /**\n * Enables validation rules to be evaluated without restricting user input. This applies to the `maxLength` property for\n * string-type inputs or allows spin buttons to exceed the predefined `min/max` limits for number-type inputs.\n *\n * @attr validate-only\n * @default false\n */\n @property({ type: Boolean, reflect: true, attribute: 'validate-only' })\n public validateOnly = false;\n\n /* blazorSuppress */\n /** Replaces the selected text in the input. */\n public setRangeText(\n replacement: string,\n start?: number,\n end?: number,\n selectMode: RangeTextSelectMode = 'preserve'\n ): void {\n this._input?.setRangeText(replacement, start!, end!, selectMode);\n this.value = this._input?.value ?? '';\n }\n\n /* blazorSuppress */\n /** Sets the text selection range of the control */\n public setSelectionRange(\n start?: number,\n end?: number,\n direction: SelectionRangeDirection = 'none'\n ): void {\n this._input?.setSelectionRange(start ?? null, end ?? null, direction);\n }\n\n /** Increments the numeric value of the input by one or more steps. */\n public stepUp(n?: number): void {\n this._input?.stepUp(n);\n this.value = this._input?.value ?? '';\n }\n\n /** Decrements the numeric value of the input by one or more steps. */\n public stepDown(n?: number): void {\n this._input?.stepDown(n);\n this.value = this._input?.value ?? '';\n }\n\n private _handleInput(): void {\n this._setTouchedState();\n this.value = this._input?.value ?? '';\n this.emitEvent('igcInput', { detail: this.value });\n }\n\n private _handleChange(): void {\n this._setTouchedState();\n this.value = this._input?.value ?? '';\n this.emitEvent('igcChange', { detail: this.value });\n }\n\n protected _renderInput() {\n const hasNegativeTabIndex = this.getAttribute('tabindex') === '-1';\n\n return html`\n <input\n ${ariaBindings(this._ariaTarget.resolveBindings())}\n id=${this._inputId}\n part=${partMap(this._resolvePartNames('input'))}\n name=${ifDefined(this.name)}\n type=${ifDefined(this.type)}\n pattern=${ifDefined(this.pattern)}\n placeholder=${ifDefined(this.placeholder)}\n .value=${live(this.value)}\n ?readonly=${this.readOnly}\n ?disabled=${this.disabled}\n ?required=${this.required}\n ?autofocus=${this.autofocus}\n tabindex=${bindIf(hasNegativeTabIndex, -1)}\n autocomplete=${ifDefined(this.autocomplete as any)}\n inputmode=${ifDefined(this.inputMode)}\n min=${bindIf(!this.validateOnly, this.min)}\n max=${bindIf(!this.validateOnly, this.max)}\n minlength=${ifDefined(this.minLength)}\n maxlength=${bindIf(!this.validateOnly, this.maxLength)}\n step=${ifDefined(this.step)}\n @keydown=${this._handleEnterKeydown}\n @change=${this._handleChange}\n @input=${this._handleInput}\n @blur=${this._handleBlur}\n />\n `;\n }\n}\n\ndeclare global {\n interface HTMLElementTagNameMap {\n 'igc-input': IgcInputComponent;\n }\n}\n"]}
1
+ {"version":3,"file":"input.js","sourceRoot":"","sources":["../../../src/components/input/input.ts"],"names":[],"mappings":"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","sourcesContent":["import { html } from 'lit';\nimport { property } from 'lit/decorators.js';\nimport { ifDefined } from 'lit/directives/if-defined.js';\nimport { live } from 'lit/directives/live.js';\nimport { ariaBindings } from '#internals/controllers/aria-projection.js';\nimport { addSlotController, setSlots } from '#internals/controllers/slot.js';\nimport {\n coercedProperty,\n type CoercedPropertyConfig,\n} from '#internals/decorators/coerced-property.js';\nimport { registerComponent } from '#internals/definitions/register.js';\nimport { createFormValueState } from '#internals/mixins/forms/form-value.js';\nimport { partMap } from '#internals/part-map.js';\nimport { bindIf } from '#internals/utils/lit.js';\nimport { addThemingController } from '#theming/theming-controller.js';\nimport type {\n InputType,\n RangeTextSelectMode,\n SelectionRangeDirection,\n} from '../types.js';\nimport IgcValidationContainerComponent from '../validation-container/validation-container.js';\nimport { IgcInputBaseComponent } from './input-base.js';\nimport { styles } from './themes/input.base.css.js';\nimport { styles as shared } from './themes/shared/input.common.css.js';\nimport { all } from './themes/themes.js';\nimport { numberValidators, stringValidators } from './validators.js';\n\nconst Slots = setSlots(\n 'prefix',\n 'suffix',\n 'helper-text',\n 'value-missing',\n 'type-mismatch',\n 'pattern-mismatch',\n 'too-long',\n 'too-short',\n 'range-overflow',\n 'range-underflow',\n 'step-mismatch',\n 'custom-error',\n 'invalid'\n);\n\n/**\n * A highly customizable single-line text field for entering and editing data,\n * with support for prefix/suffix content, helper text, form integration, and built-in validation.\n *\n * @element igc-input\n *\n * @slot prefix - Renders content before the input.\n * @slot suffix - Renders content after input.\n * @slot helper-text - Renders content below the input.\n * @slot value-missing - Renders content when the required validation fails.\n * @slot type-mismatch - Renders content when the a type url/email input pattern validation fails.\n * @slot pattern-mismatch - Renders content when the pattern validation fails.\n * @slot too-long - Renders content when the maxlength validation fails.\n * @slot too-short - Renders content when the minlength validation fails.\n * @slot range-overflow - Renders content when the max validation fails.\n * @slot range-underflow - Renders content when the min validation fails.\n * @slot step-mismatch - Renders content when the step validation fails.\n * @slot custom-error - Renders content when setCustomValidity(message) is set.\n * @slot invalid - Renders content when the component is in invalid state (validity.valid = false).\n *\n * @fires igcInput - Emitted when the control input receives user input.\n * @fires igcChange - Emitted when the control's checked state changes.\n *\n * @csspart container - The main wrapper that holds all main input elements.\n * @csspart input - The native input element.\n * @csspart label - The native label element.\n * @csspart prefix - The prefix wrapper.\n * @csspart suffix - The suffix wrapper.\n * @csspart helper-text - The helper text wrapper.\n */\nexport default class IgcInputComponent extends IgcInputBaseComponent {\n public static readonly tagName = 'igc-input';\n public static styles = [styles, shared];\n\n /** Shared config for the constraint properties - a change revalidates. */\n private static readonly _revalidate: CoercedPropertyConfig<\n unknown,\n IgcInputComponent\n > = {\n onChange: ({ host }) => host._validate(),\n };\n\n /* blazorSuppress */\n public static register(): void {\n registerComponent(IgcInputComponent, IgcValidationContainerComponent);\n }\n\n protected override readonly _themes = addThemingController(this, all);\n\n protected override readonly _slots = addSlotController(this, {\n slots: Slots,\n });\n\n protected override readonly _formValue = createFormValueState(this, {\n initialValue: '',\n });\n\n protected override get __validators() {\n return this.type !== 'number' ? stringValidators : numberValidators;\n }\n\n /* @tsTwoWayProperty(true, \"igcChange\", \"detail\", false) */\n /**\n * The value of the control.\n * @attr\n */\n @property()\n public set value(value: string) {\n this._formValue.setValueAndFormState(value);\n }\n\n public get value(): string {\n return this._formValue.value;\n }\n\n /* alternateName: displayType */\n /**\n * The type of the control.\n * @attr\n */\n @property({ reflect: true })\n public type: InputType = 'text';\n\n /**\n * Makes the control a readonly field.\n *\n * @attr readonly\n * @default false\n */\n @property({ type: Boolean, reflect: true })\n public readOnly = false;\n\n /**\n * A hint to the browser for which virtual keyboard layout to display.\n * See [relevant MDN article](https://developer.mozilla.org/en-US/docs/Web/HTML/Global_attributes/inputmode)\n * @attr inputmode\n */\n @property({ attribute: 'inputmode' })\n public override inputMode!: string;\n\n /**\n * The regular expression the value is validated against.\n * @attr\n */\n @property()\n @coercedProperty(IgcInputComponent._revalidate)\n public pattern?: string = undefined;\n\n /**\n * The minimum string length required by the control.\n * @attr minlength\n */\n @property({ type: Number, attribute: 'minlength' })\n @coercedProperty(IgcInputComponent._revalidate)\n public minLength?: number = undefined;\n\n /**\n * The maximum string length of the control.\n * @attr maxlength\n */\n @property({ type: Number, attribute: 'maxlength' })\n @coercedProperty(IgcInputComponent._revalidate)\n public maxLength?: number = undefined;\n\n /**\n * The minimum value the control accepts.\n * @attr\n */\n @property({ type: Number })\n @coercedProperty(IgcInputComponent._revalidate)\n public min?: number = undefined;\n\n /**\n * The maximum value the control accepts.\n * @attr\n */\n @property({ type: Number })\n @coercedProperty(IgcInputComponent._revalidate)\n public max?: number = undefined;\n\n /**\n * The granularity the value must adhere to.\n * @attr\n */\n @property({ type: Number })\n @coercedProperty(IgcInputComponent._revalidate)\n public step?: number = undefined;\n\n /**\n * Whether the control should receive focus automatically.\n * @attr\n */\n @property({ type: Boolean })\n public override autofocus!: boolean;\n\n /**\n * A hint for the browser on how to autofill the control.\n * @attr\n */\n @property()\n public autocomplete!: string;\n\n /**\n * Enables validation rules to be evaluated without restricting user input. This applies to the `maxLength` property for\n * string-type inputs or allows spin buttons to exceed the predefined `min/max` limits for number-type inputs.\n *\n * @attr validate-only\n * @default false\n */\n @property({ type: Boolean, reflect: true, attribute: 'validate-only' })\n public validateOnly = false;\n\n /* blazorSuppress */\n /** Replaces the selected text in the input. */\n public setRangeText(\n replacement: string,\n start?: number,\n end?: number,\n selectMode: RangeTextSelectMode = 'preserve'\n ): void {\n this._input?.setRangeText(replacement, start!, end!, selectMode);\n this.value = this._input?.value ?? '';\n }\n\n /* blazorSuppress */\n /** Sets the text selection range of the control */\n public setSelectionRange(\n start?: number,\n end?: number,\n direction: SelectionRangeDirection = 'none'\n ): void {\n this._input?.setSelectionRange(start ?? null, end ?? null, direction);\n }\n\n /** Increments the numeric value of the input by one or more steps. */\n public stepUp(n?: number): void {\n this._input?.stepUp(n);\n this.value = this._input?.value ?? '';\n }\n\n /** Decrements the numeric value of the input by one or more steps. */\n public stepDown(n?: number): void {\n this._input?.stepDown(n);\n this.value = this._input?.value ?? '';\n }\n\n private _handleInput(): void {\n this._commitValue(this._input?.value ?? '', 'igcInput');\n }\n\n private _handleChange(): void {\n this._commitValue(this._input?.value ?? '', 'igcChange');\n }\n\n protected _renderInput() {\n const hasNegativeTabIndex = this.getAttribute('tabindex') === '-1';\n\n return html`\n <input\n ${ariaBindings(this._ariaTarget.resolveBindings())}\n id=${this._inputId}\n part=${partMap(this._resolvePartNames('input'))}\n name=${ifDefined(this.name)}\n type=${ifDefined(this.type)}\n pattern=${ifDefined(this.pattern)}\n placeholder=${ifDefined(this.placeholder)}\n .value=${live(this.value)}\n ?readonly=${this.readOnly}\n ?disabled=${this.disabled}\n ?required=${this.required}\n ?autofocus=${this.autofocus}\n tabindex=${bindIf(hasNegativeTabIndex, -1)}\n autocomplete=${ifDefined(this.autocomplete as any)}\n inputmode=${ifDefined(this.inputMode)}\n min=${bindIf(!this.validateOnly, this.min)}\n max=${bindIf(!this.validateOnly, this.max)}\n minlength=${ifDefined(this.minLength)}\n maxlength=${bindIf(!this.validateOnly, this.maxLength)}\n step=${ifDefined(this.step)}\n @keydown=${this._handleEnterKeydown}\n @change=${this._handleChange}\n @input=${this._handleInput}\n @blur=${this._handleBlur}\n />\n `;\n }\n}\n\ndeclare global {\n interface HTMLElementTagNameMap {\n 'igc-input': IgcInputComponent;\n }\n}\n"]}
@@ -35,7 +35,7 @@ export default class IgcMaskInputComponent extends IgcMaskInputComponent_base {
35
35
  protected readonly _parser: MaskParser;
36
36
  protected get __validators(): import("../../internals/validators.js").Validator<IgcMaskInputComponent>[];
37
37
  protected readonly _themes: import("#theming/theming-controller.js").ThemingController;
38
- protected readonly _slots: import("#internals/controllers/slot.js").SlotController<"invalid" | "prefix" | "[default]" | "suffix" | "helper-text" | "value-missing" | "custom-error" | "bad-input">;
38
+ protected readonly _slots: import("#internals/controllers/slot.js").SlotController<"invalid" | "prefix" | "helper-text" | "[default]" | "suffix" | "value-missing" | "custom-error" | "bad-input">;
39
39
  protected readonly _formValue: import("#internals/mixins/forms/form-value.js").FormValue<string>;
40
40
  protected get _isRawMode(): boolean;
41
41
  /**
@@ -107,8 +107,7 @@ export default class IgcMaskInputComponent extends MaskBehaviorMixin(IgcInputBas
107
107
  super._handleBlur();
108
108
  }
109
109
  _handleChange() {
110
- this._setTouchedState();
111
- this.emitEvent('igcChange', { detail: this.value });
110
+ this._emitTouchedEvent('igcChange', { detail: this.value });
112
111
  }
113
112
  _commitMaskedValue(value) {
114
113
  this._maskedValue = value;
@@ -118,8 +117,7 @@ export default class IgcMaskInputComponent extends MaskBehaviorMixin(IgcInputBas
118
117
  }
119
118
  }
120
119
  _emitInputEvent() {
121
- this._setTouchedState();
122
- this.emitEvent('igcInput', { detail: this.value });
120
+ this._emitTouchedEvent('igcInput', { detail: this.value });
123
121
  }
124
122
  _syncValueFromMask() {
125
123
  this.value = this._parser.parse(this._maskedValue);