igniteui-webcomponents 7.2.2 → 7.2.4

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 (125) hide show
  1. package/CHANGELOG.md +23 -0
  2. package/animations/player.d.ts +4 -11
  3. package/animations/player.js +3 -9
  4. package/animations/player.js.map +1 -1
  5. package/animations/view-transition.d.ts +44 -0
  6. package/animations/view-transition.js +81 -0
  7. package/animations/view-transition.js.map +1 -0
  8. package/components/avatar/avatar.js +7 -7
  9. package/components/avatar/avatar.js.map +1 -1
  10. package/components/button/button-base.d.ts +1 -1
  11. package/components/button/button-base.js +7 -5
  12. package/components/button/button-base.js.map +1 -1
  13. package/components/button/icon-button.js +9 -9
  14. package/components/button/icon-button.js.map +1 -1
  15. package/components/calendar/calendar.js.map +1 -1
  16. package/components/calendar/days-view/days-view.js.map +1 -1
  17. package/components/carousel/carousel.js +1 -2
  18. package/components/carousel/carousel.js.map +1 -1
  19. package/components/chat/chat-input.js +4 -4
  20. package/components/chat/chat-input.js.map +1 -1
  21. package/components/chat/chat.js +6 -6
  22. package/components/chat/chat.js.map +1 -1
  23. package/components/chat/message-attachments.js.map +1 -1
  24. package/components/chat/types.js.map +1 -1
  25. package/components/checkbox/checkbox.js.map +1 -1
  26. package/components/combo/combo.d.ts +1 -4
  27. package/components/combo/combo.js +9 -1
  28. package/components/combo/combo.js.map +1 -1
  29. package/components/combo/types.d.ts +4 -0
  30. package/components/combo/types.js.map +1 -1
  31. package/components/common/context.d.ts +2 -0
  32. package/components/common/context.js.map +1 -1
  33. package/components/common/controllers/drag.d.ts +10 -0
  34. package/components/common/controllers/drag.js +11 -0
  35. package/components/common/controllers/drag.js.map +1 -1
  36. package/components/common/controllers/gestures.js.map +1 -1
  37. package/components/common/controllers/internals.d.ts +9 -0
  38. package/components/common/controllers/internals.js +4 -0
  39. package/components/common/controllers/internals.js.map +1 -1
  40. package/components/common/controllers/mutation-observer.d.ts +2 -2
  41. package/components/common/controllers/mutation-observer.js +10 -7
  42. package/components/common/controllers/mutation-observer.js.map +1 -1
  43. package/components/common/controllers/slot.d.ts +1 -1
  44. package/components/common/controllers/slot.js +4 -1
  45. package/components/common/controllers/slot.js.map +1 -1
  46. package/components/common/i18n/utils.js.map +1 -1
  47. package/components/common/mixins/forms/associated.d.ts +1 -1
  48. package/components/common/mixins/forms/associated.js +21 -13
  49. package/components/common/mixins/forms/associated.js.map +1 -1
  50. package/components/common/mixins/forms/types.d.ts +2 -1
  51. package/components/common/mixins/forms/types.js.map +1 -1
  52. package/components/common/templates/masked-input.d.ts +2 -0
  53. package/components/common/templates/masked-input.js +2 -1
  54. package/components/common/templates/masked-input.js.map +1 -1
  55. package/components/date-picker/date-picker.d.ts +2 -1
  56. package/components/date-picker/date-picker.js +6 -0
  57. package/components/date-picker/date-picker.js.map +1 -1
  58. package/components/date-range-picker/date-range-mask-parser.d.ts +11 -2
  59. package/components/date-range-picker/date-range-mask-parser.js.map +1 -1
  60. package/components/date-range-picker/date-range-picker.d.ts +2 -1
  61. package/components/date-range-picker/date-range-picker.js +10 -8
  62. package/components/date-range-picker/date-range-picker.js.map +1 -1
  63. package/components/date-range-picker/predefined-ranges-area.js.map +1 -1
  64. package/components/date-time-input/date-part.js.map +1 -1
  65. package/components/date-time-input/date-time-input.base.d.ts +15 -0
  66. package/components/date-time-input/date-time-input.base.js +9 -1
  67. package/components/date-time-input/date-time-input.base.js.map +1 -1
  68. package/components/dialog/dialog.js +4 -4
  69. package/components/dialog/dialog.js.map +1 -1
  70. package/components/file-input/file-input.js.map +1 -1
  71. package/components/icon/icon-state.broadcast.js.map +1 -1
  72. package/components/icon/icon.d.ts +3 -2
  73. package/components/icon/icon.js +7 -2
  74. package/components/icon/icon.js.map +1 -1
  75. package/components/input/input-base.d.ts +15 -0
  76. package/components/input/input-base.js +8 -1
  77. package/components/input/input-base.js.map +1 -1
  78. package/components/input/input.js +1 -0
  79. package/components/input/input.js.map +1 -1
  80. package/components/mask-input/mask-input.js +1 -0
  81. package/components/mask-input/mask-input.js.map +1 -1
  82. package/components/popover/popover.d.ts +10 -1
  83. package/components/popover/popover.js +31 -14
  84. package/components/popover/popover.js.map +1 -1
  85. package/components/popover/themes/light/popover.base.css.js +1 -1
  86. package/components/popover/themes/light/popover.base.css.js.map +1 -1
  87. package/components/select/select.d.ts +7 -1
  88. package/components/select/select.js +12 -1
  89. package/components/select/select.js.map +1 -1
  90. package/components/slider/range-slider.js +5 -5
  91. package/components/slider/range-slider.js.map +1 -1
  92. package/components/slider/slider-base.js +9 -9
  93. package/components/slider/slider-base.js.map +1 -1
  94. package/components/snackbar/snackbar.js +4 -4
  95. package/components/snackbar/snackbar.js.map +1 -1
  96. package/components/splitter/splitter.js.map +1 -1
  97. package/components/stepper/common/animations.js.map +1 -1
  98. package/components/stepper/step.js.map +1 -1
  99. package/components/tabs/tabs.js +29 -10
  100. package/components/tabs/tabs.js.map +1 -1
  101. package/components/textarea/textarea.js +1 -0
  102. package/components/textarea/textarea.js.map +1 -1
  103. package/components/tile-manager/tile-manager.d.ts +11 -0
  104. package/components/tile-manager/tile-manager.js +15 -0
  105. package/components/tile-manager/tile-manager.js.map +1 -1
  106. package/components/tile-manager/tile.js +15 -14
  107. package/components/tile-manager/tile.js.map +1 -1
  108. package/components/tooltip/tooltip.js +8 -8
  109. package/components/tooltip/tooltip.js.map +1 -1
  110. package/components/tree/tree-item.js +31 -31
  111. package/components/tree/tree-item.js.map +1 -1
  112. package/components/types.js.map +1 -1
  113. package/components/validation-container/validation-container.d.ts +32 -5
  114. package/components/validation-container/validation-container.js +74 -64
  115. package/components/validation-container/validation-container.js.map +1 -1
  116. package/custom-elements.json +809 -189
  117. package/igniteui-webcomponents.html-data.json +1 -1
  118. package/index.d.ts +6 -2
  119. package/index.js +3 -2
  120. package/index.js.map +1 -1
  121. package/package.json +1 -1
  122. package/skills/igniteui-wc-generate-from-image-design/references/gotchas.md +15 -1
  123. package/themes/dark/indigo.css +1 -1
  124. package/themes/light/indigo.css +1 -1
  125. package/web-types.json +1 -1
@@ -1 +1 @@
1
- {"version":3,"file":"validation-container.js","sourceRoot":"","sources":["../../../src/components/validation-container/validation-container.ts"],"names":[],"mappings":"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","sourcesContent":["import { html, LitElement, nothing, type TemplateResult } from 'lit';\nimport { property, state } from 'lit/decorators.js';\nimport { cache } from 'lit/directives/cache.js';\nimport { ifDefined } from 'lit/directives/if-defined.js';\nimport { addThemingController } from '../../theming/theming-controller.js';\nimport { createAbortHandle } from '../common/abort-handler.js';\nimport { registerComponent } from '../common/definitions/register.js';\nimport {\n type IgcFormControl,\n InternalInvalidEvent,\n InternalResetEvent,\n} from '../common/mixins/forms/types.js';\nimport { partMap } from '../common/part-map.js';\nimport { isEmpty, toKebabCase } from '../common/util.js';\nimport IgcIconComponent from '../icon/icon.js';\nimport { all as inputThemes } from '../input/themes/themes.js';\nimport { styles as shared } from './themes/shared/validator.common.css.js';\nimport { styles } from './themes/validator.base.css.js';\n\n/** Configuration for the validation container. */\ninterface ValidationContainerConfig {\n /** The id attribute for the validation container. */\n id?: string;\n /** Project the validation container to the given slot inside the host shadow DOM. */\n slot?: string;\n /** Additional part(s) that should be bound to the validation container. */\n part?: string;\n /** Whether the validation container should expose a helper-text slot. */\n hasHelperText?: boolean;\n}\n\nconst VALIDATION_SLOTS_SELECTOR = 'slot:not([name=\"helper-text\"])';\nconst ALL_SLOTS_SELECTOR = 'slot';\nconst QUERY_CONFIG: AssignedNodesOptions = { flatten: true };\n\nfunction getValidationSlots(\n element: IgcValidationContainerComponent\n): NodeListOf<HTMLSlotElement> {\n return element.renderRoot.querySelectorAll<HTMLSlotElement>(\n VALIDATION_SLOTS_SELECTOR\n );\n}\n\nfunction hasProjection(element: IgcValidationContainerComponent): boolean {\n const allSlots =\n element.renderRoot.querySelectorAll<HTMLSlotElement>(ALL_SLOTS_SELECTOR);\n return Array.from(allSlots).every((slot) =>\n isEmpty(slot.assignedElements(QUERY_CONFIG))\n );\n}\n\nfunction hasProjectedValidation(\n element: IgcValidationContainerComponent,\n slotName?: string\n): boolean {\n const slots = Array.from(getValidationSlots(element));\n\n if (slotName) {\n return slots\n .filter((slot) => slot.name === slotName)\n .some((slot) => !isEmpty(slot.assignedElements(QUERY_CONFIG)));\n }\n\n return slots.some((slot) => !isEmpty(slot.assignedElements(QUERY_CONFIG)));\n}\n\n/* blazorSuppress */\n/**\n * @element igc-validator\n *\n * @csspart helper-text - The base wrapper\n * @csspart validation-message - The validation error message container\n * @csspart validation-icon - The validation error icon\n */\nexport default class IgcValidationContainerComponent extends LitElement {\n public static readonly tagName = 'igc-validator';\n public static override styles = [styles, shared];\n\n protected readonly _themes = addThemingController(this, inputThemes);\n\n /* blazorSuppress */\n public static register(): void {\n registerComponent(IgcValidationContainerComponent, IgcIconComponent);\n }\n\n public static create(\n host: IgcFormControl,\n config: ValidationContainerConfig = {\n id: 'helper-text',\n hasHelperText: true,\n }\n ): TemplateResult {\n const helperText = config.hasHelperText\n ? html`<slot name=\"helper-text\" slot=\"helper-text\"></slot>`\n : nothing;\n\n const validationSlots =\n IgcValidationContainerComponent.prototype._renderValidationSlots(\n host.validity,\n true\n );\n\n return html`\n <igc-validator\n id=${ifDefined(config.id)}\n part=${ifDefined(config.part)}\n slot=${ifDefined(config.slot)}\n ?invalid=${host.invalid}\n .target=${host}\n exportparts=\"helper-text, validation-message, validation-icon\"\n >\n ${helperText}${validationSlots}\n </igc-validator>\n `;\n }\n\n private readonly _abortHandle = createAbortHandle();\n\n private _target!: IgcFormControl;\n\n @state()\n private _hasSlottedContent = false;\n\n @property({ type: Boolean })\n public invalid = false;\n\n @property({ attribute: false })\n public set target(value: IgcFormControl) {\n if (this._target === value) {\n return;\n }\n\n this._abortHandle.abort();\n const { signal } = this._abortHandle;\n\n this._target = value;\n this._target.addEventListener(InternalInvalidEvent, this, { signal });\n this._target.addEventListener(InternalResetEvent, this, { signal });\n }\n\n public get target(): IgcFormControl {\n return this._target;\n }\n\n protected override createRenderRoot(): HTMLElement | DocumentFragment {\n const root = super.createRenderRoot();\n root.addEventListener('slotchange', this);\n return root;\n }\n\n /** @internal */\n public handleEvent(event: Event): void {\n switch (event.type) {\n case InternalInvalidEvent:\n this.invalid = true;\n break;\n case InternalResetEvent:\n this.invalid = false;\n break;\n case 'slotchange': {\n const newHasSlottedContent = hasProjectedValidation(this);\n if (this._hasSlottedContent !== newHasSlottedContent) {\n this._hasSlottedContent = newHasSlottedContent;\n }\n break;\n }\n }\n\n this.requestUpdate();\n }\n\n protected _renderValidationMessage(slotName: string): TemplateResult {\n const hasProjectedIcon = hasProjectedValidation(this, slotName);\n const parts = { 'validation-message': true, empty: !hasProjectedIcon };\n const icon = hasProjectedIcon\n ? html`\n <igc-icon\n aria-hidden=\"true\"\n name=\"error\"\n part=\"validation-icon\"\n ></igc-icon>\n `\n : nothing;\n\n return html`\n <div part=${partMap(parts)}>\n ${icon}\n <slot name=${slotName}></slot>\n </div>\n `;\n }\n\n protected *_renderValidationSlots(\n validity: ValidityState,\n projected = false\n ): Generator<TemplateResult> {\n if (!validity.valid) {\n yield projected\n ? html`<slot name=\"invalid\" slot=\"invalid\"></slot>`\n : this._renderValidationMessage('invalid');\n }\n\n for (const key in validity) {\n if (key !== 'valid' && validity[key as keyof ValidityState]) {\n const name = toKebabCase(key);\n yield projected\n ? html`<slot name=${name} slot=${name}></slot>`\n : this._renderValidationMessage(name);\n }\n }\n }\n\n protected _renderHelper(): TemplateResult | typeof nothing {\n return this.invalid && this._hasSlottedContent\n ? nothing\n : html`<slot name=\"helper-text\"></slot>`;\n }\n\n protected override render(): TemplateResult {\n const slots = cache(\n this.invalid ? this._renderValidationSlots(this.target.validity) : nothing\n );\n\n return html`\n <div part=${partMap({ 'helper-text': true, empty: hasProjection(this) })}>\n ${slots}${this._renderHelper()}\n </div>\n `;\n }\n}\n\ndeclare global {\n interface HTMLElementTagNameMap {\n 'igc-validator': IgcValidationContainerComponent;\n }\n}\n"]}
1
+ {"version":3,"file":"validation-container.js","sourceRoot":"","sources":["../../../src/components/validation-container/validation-container.ts"],"names":[],"mappings":"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","sourcesContent":["import { html, isServer, LitElement, nothing, type TemplateResult } from 'lit';\nimport { property } from 'lit/decorators.js';\nimport { ifDefined } from 'lit/directives/if-defined.js';\nimport { addThemingController } from '../../theming/theming-controller.js';\nimport { createAbortHandle } from '../common/abort-handler.js';\nimport { registerComponent } from '../common/definitions/register.js';\nimport {\n type IgcFormControl,\n InternalInvalidEvent,\n InternalResetEvent,\n} from '../common/mixins/forms/types.js';\nimport { partMap } from '../common/part-map.js';\nimport { isEmpty, toKebabCase } from '../common/util.js';\nimport IgcIconComponent from '../icon/icon.js';\nimport { all as inputThemes } from '../input/themes/themes.js';\nimport { styles as shared } from './themes/shared/validator.common.css.js';\nimport { styles } from './themes/validator.base.css.js';\n\n/** Configuration for the validation container. */\ninterface ValidationContainerConfig {\n /** The id attribute for the validation container. */\n id?: string;\n /** Project the validation container to the given slot inside the host shadow DOM. */\n slot?: string;\n /** Additional part(s) that should be bound to the validation container. */\n part?: string;\n /** Whether the validation container should expose a helper-text slot. */\n hasHelperText?: boolean;\n}\n\nconst ALL_SLOTS_SELECTOR = 'slot';\nconst QUERY_CONFIG: AssignedNodesOptions = { flatten: true };\n\n/**\n * Validity flags rendered as validation message slots, in a stable order so the\n * generated slots are deterministic across browsers.\n */\nconst VALIDITY_KEYS: ReadonlyArray<keyof ValidityStateFlags> = [\n 'badInput',\n 'customError',\n 'patternMismatch',\n 'rangeOverflow',\n 'rangeUnderflow',\n 'stepMismatch',\n 'tooLong',\n 'tooShort',\n 'typeMismatch',\n 'valueMissing',\n];\n\n/**\n * Yields the active validation slot names for the given validity state, in a\n * stable order (`invalid` first, then each failing constraint).\n */\nfunction* activeValidationSlots(validity: ValidityState): Generator<string> {\n if (!validity.valid) {\n yield 'invalid';\n }\n\n for (const key of VALIDITY_KEYS) {\n if (validity[key]) {\n yield toKebabCase(key);\n }\n }\n}\n\n/* blazorSuppress */\n/**\n * @element igc-validator\n *\n * @csspart helper-text - The base wrapper\n * @csspart validation-message - The validation error message container\n * @csspart validation-icon - The validation error icon\n */\nexport default class IgcValidationContainerComponent extends LitElement {\n public static readonly tagName = 'igc-validator';\n public static override styles = [styles, shared];\n\n /* blazorSuppress */\n public static register(): void {\n registerComponent(IgcValidationContainerComponent, IgcIconComponent);\n }\n\n /**\n * Creates a validation container for the given form control.\n *\n * The container will render validation messages based on the control's validity state\n * and projected content, and reflect the control's `invalid` state.\n */\n public static create(\n host: IgcFormControl,\n config: ValidationContainerConfig = {\n id: 'helper-text',\n hasHelperText: true,\n }\n ): TemplateResult {\n const helperText = config.hasHelperText\n ? html`<slot name=\"helper-text\" slot=\"helper-text\"></slot>`\n : nothing;\n\n // `hasUpdated` is false during SSR and the host's hydrating render, so both\n // emit `nothing`. The real validation slots are projected post-hydration.\n const validationSlots = host.hasUpdated\n ? Iterator.from(activeValidationSlots(host.validity))\n .map((name) => html`<slot name=${name} slot=${name}></slot>`)\n .toArray()\n : nothing;\n\n return html`\n <igc-validator\n id=${ifDefined(config.id)}\n part=${ifDefined(config.part)}\n slot=${ifDefined(config.slot)}\n ?invalid=${host.invalid}\n .target=${host}\n exportparts=\"helper-text, validation-message, validation-icon\"\n >\n ${helperText}${validationSlots}\n </igc-validator>\n `;\n }\n\n private readonly _abortHandle = createAbortHandle();\n private _target!: IgcFormControl;\n\n /**\n * Whether the container is in an invalid state.\n *\n * This is reflected from the target's `invalid` property,\n * and is used to determine whether to render the validation message slots.\n */\n @property({ type: Boolean })\n public invalid = false;\n\n /**\n * The form control whose validity state is being rendered. The target's `invalid`\n * property is reflected to the container, and its validity state is used to\n * determine which validation message slots to render.\n *\n * @remarks The target must be set for the container to function, and should be\n * set before the first update cycle for SSR compatibility. When using the\n * `create` method, the target is set automatically.\n */\n @property({ attribute: false })\n public set target(value: IgcFormControl) {\n if (this._target === value) {\n return;\n }\n\n this._abortHandle.abort();\n const { signal } = this._abortHandle;\n\n this._target = value;\n this._target.addEventListener(InternalInvalidEvent, this, { signal });\n this._target.addEventListener(InternalResetEvent, this, { signal });\n }\n\n public get target(): IgcFormControl {\n return this._target;\n }\n\n constructor() {\n super();\n addThemingController(this, inputThemes);\n }\n\n protected override createRenderRoot(): HTMLElement | DocumentFragment {\n const root = super.createRenderRoot();\n root.addEventListener('slotchange', this);\n return root;\n }\n\n /** @internal */\n public handleEvent(event: Event): void {\n switch (event.type) {\n case InternalInvalidEvent:\n this.invalid = true;\n break;\n case InternalResetEvent:\n this.invalid = false;\n break;\n }\n\n this.requestUpdate();\n }\n\n /**\n * Collects the projection state of the container slots in a single DOM pass.\n *\n * @returns Whether every slot is empty and the set of non-empty validation\n * slot names (i.e. excluding `helper-text`).\n */\n private _collectProjectedSlots(): {\n isProjectionEmpty: boolean;\n validation: Set<string>;\n } {\n const validation = new Set<string>();\n\n if (isServer || !this.hasUpdated) {\n return { isProjectionEmpty: false, validation };\n }\n\n const slots = Array.from(\n this.renderRoot.querySelectorAll<HTMLSlotElement>(ALL_SLOTS_SELECTOR)\n );\n let isProjectionEmpty = true;\n\n for (const slot of slots) {\n if (isEmpty(slot.assignedElements(QUERY_CONFIG))) {\n continue;\n }\n\n isProjectionEmpty = false;\n if (slot.name && slot.name !== 'helper-text') {\n validation.add(slot.name);\n }\n }\n\n return { isProjectionEmpty, validation };\n }\n\n protected _renderValidationMessage(\n slotName: string,\n projectedSlots: ReadonlySet<string>\n ): TemplateResult {\n const hasProjectedIcon = projectedSlots.has(slotName);\n const parts = { 'validation-message': true, empty: !hasProjectedIcon };\n const icon = hasProjectedIcon\n ? html`\n <igc-icon\n aria-hidden=\"true\"\n name=\"error\"\n part=\"validation-icon\"\n ></igc-icon>\n `\n : nothing;\n\n return html`<div part=${partMap(parts)}>\n ${icon}<slot name=${slotName}></slot>\n </div>`;\n }\n\n protected _renderHelper(\n hasValidationProjection: boolean\n ): TemplateResult | typeof nothing {\n return this.invalid && hasValidationProjection\n ? nothing\n : html`<slot name=\"helper-text\"></slot>`;\n }\n\n protected override firstUpdated(): void {\n // The first render is intentionally neutral to match the SSR output during\n // hydration. Only reconcile when the field hydrated in an invalid state, and\n // do it off the current update cycle so we don't schedule an update as a side\n // effect of the one in progress, projecting the real validation messages now\n // that `hasUpdated` is true.\n if (this.invalid) {\n queueMicrotask(() => this.requestUpdate());\n }\n }\n\n protected override render(): TemplateResult {\n const { isProjectionEmpty, validation } = this._collectProjectedSlots();\n const messages =\n this.hasUpdated && this.invalid\n ? Iterator.from(activeValidationSlots(this.target.validity))\n .map((name) => this._renderValidationMessage(name, validation))\n .toArray()\n : nothing;\n\n return html`\n <div\n part=${partMap({ 'helper-text': true, empty: isProjectionEmpty })}\n aria-live=\"polite\"\n >\n ${messages}${this._renderHelper(!isEmpty(validation))}\n </div>\n `;\n }\n}\n\ndeclare global {\n interface HTMLElementTagNameMap {\n 'igc-validator': IgcValidationContainerComponent;\n }\n}\n"]}