@angular/material 21.0.0 → 21.0.2

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 (153) hide show
  1. package/fesm2022/_animation-chunk.mjs.map +1 -1
  2. package/fesm2022/_date-formats-chunk.mjs.map +1 -1
  3. package/fesm2022/_date-range-input-harness-chunk.mjs.map +1 -1
  4. package/fesm2022/_error-options-chunk.mjs +6 -6
  5. package/fesm2022/_error-options-chunk.mjs.map +1 -1
  6. package/fesm2022/_error-state-chunk.mjs.map +1 -1
  7. package/fesm2022/_form-field-chunk.mjs +60 -30
  8. package/fesm2022/_form-field-chunk.mjs.map +1 -1
  9. package/fesm2022/_icon-button-chunk.mjs +6 -6
  10. package/fesm2022/_icon-button-chunk.mjs.map +1 -1
  11. package/fesm2022/_icon-registry-chunk.mjs +4 -22
  12. package/fesm2022/_icon-registry-chunk.mjs.map +1 -1
  13. package/fesm2022/_input-harness-chunk.mjs.map +1 -1
  14. package/fesm2022/_input-value-accessor-chunk.mjs.map +1 -1
  15. package/fesm2022/_internal-form-field-chunk.mjs +3 -3
  16. package/fesm2022/_internal-form-field-chunk.mjs.map +1 -1
  17. package/fesm2022/_line-chunk.mjs +7 -7
  18. package/fesm2022/_line-chunk.mjs.map +1 -1
  19. package/fesm2022/_option-chunk.mjs +6 -6
  20. package/fesm2022/_option-chunk.mjs.map +1 -1
  21. package/fesm2022/_option-harness-chunk.mjs.map +1 -1
  22. package/fesm2022/_option-module-chunk.mjs +4 -4
  23. package/fesm2022/_option-module-chunk.mjs.map +1 -1
  24. package/fesm2022/_pseudo-checkbox-chunk.mjs +3 -3
  25. package/fesm2022/_pseudo-checkbox-chunk.mjs.map +1 -1
  26. package/fesm2022/_pseudo-checkbox-module-chunk.mjs +4 -4
  27. package/fesm2022/_pseudo-checkbox-module-chunk.mjs.map +1 -1
  28. package/fesm2022/_public-api-chunk.mjs.map +1 -1
  29. package/fesm2022/_ripple-chunk.mjs +6 -6
  30. package/fesm2022/_ripple-chunk.mjs.map +1 -1
  31. package/fesm2022/_ripple-loader-chunk.mjs +3 -3
  32. package/fesm2022/_ripple-loader-chunk.mjs.map +1 -1
  33. package/fesm2022/_ripple-module-chunk.mjs +4 -4
  34. package/fesm2022/_ripple-module-chunk.mjs.map +1 -1
  35. package/fesm2022/_structural-styles-chunk.mjs +3 -3
  36. package/fesm2022/_structural-styles-chunk.mjs.map +1 -1
  37. package/fesm2022/_tooltip-chunk.mjs +6 -6
  38. package/fesm2022/_tooltip-chunk.mjs.map +1 -1
  39. package/fesm2022/autocomplete-testing.mjs.map +1 -1
  40. package/fesm2022/autocomplete.mjs +19 -15
  41. package/fesm2022/autocomplete.mjs.map +1 -1
  42. package/fesm2022/badge-testing.mjs.map +1 -1
  43. package/fesm2022/badge.mjs +10 -10
  44. package/fesm2022/badge.mjs.map +1 -1
  45. package/fesm2022/bottom-sheet-testing.mjs.map +1 -1
  46. package/fesm2022/bottom-sheet.mjs +10 -10
  47. package/fesm2022/bottom-sheet.mjs.map +1 -1
  48. package/fesm2022/button-testing.mjs.map +1 -1
  49. package/fesm2022/button-toggle-testing.mjs.map +1 -1
  50. package/fesm2022/button-toggle.mjs +10 -10
  51. package/fesm2022/button-toggle.mjs.map +1 -1
  52. package/fesm2022/button.mjs +13 -13
  53. package/fesm2022/button.mjs.map +1 -1
  54. package/fesm2022/card-testing.mjs.map +1 -1
  55. package/fesm2022/card.mjs +46 -46
  56. package/fesm2022/card.mjs.map +1 -1
  57. package/fesm2022/checkbox-testing.mjs.map +1 -1
  58. package/fesm2022/checkbox.mjs +7 -7
  59. package/fesm2022/checkbox.mjs.map +1 -1
  60. package/fesm2022/chips-testing.mjs.map +1 -1
  61. package/fesm2022/chips.mjs +46 -46
  62. package/fesm2022/chips.mjs.map +1 -1
  63. package/fesm2022/core-testing.mjs.map +1 -1
  64. package/fesm2022/core.mjs +12 -12
  65. package/fesm2022/core.mjs.map +1 -1
  66. package/fesm2022/datepicker-testing.mjs.map +1 -1
  67. package/fesm2022/datepicker.mjs +85 -83
  68. package/fesm2022/datepicker.mjs.map +1 -1
  69. package/fesm2022/dialog-testing.mjs.map +1 -1
  70. package/fesm2022/dialog.mjs +25 -25
  71. package/fesm2022/dialog.mjs.map +1 -1
  72. package/fesm2022/divider-testing.mjs.map +1 -1
  73. package/fesm2022/divider.mjs +7 -7
  74. package/fesm2022/divider.mjs.map +1 -1
  75. package/fesm2022/expansion-testing.mjs.map +1 -1
  76. package/fesm2022/expansion.mjs +25 -25
  77. package/fesm2022/expansion.mjs.map +1 -1
  78. package/fesm2022/form-field-testing-control.mjs.map +1 -1
  79. package/fesm2022/form-field-testing.mjs.map +1 -1
  80. package/fesm2022/form-field.mjs +4 -4
  81. package/fesm2022/form-field.mjs.map +1 -1
  82. package/fesm2022/grid-list-testing.mjs.map +1 -1
  83. package/fesm2022/grid-list.mjs +22 -22
  84. package/fesm2022/grid-list.mjs.map +1 -1
  85. package/fesm2022/icon-testing.mjs +8 -7
  86. package/fesm2022/icon-testing.mjs.map +1 -1
  87. package/fesm2022/icon.mjs +8 -7
  88. package/fesm2022/icon.mjs.map +1 -1
  89. package/fesm2022/input-testing.mjs.map +1 -1
  90. package/fesm2022/input.mjs +7 -7
  91. package/fesm2022/input.mjs.map +1 -1
  92. package/fesm2022/list-testing.mjs.map +1 -1
  93. package/fesm2022/list.mjs +49 -49
  94. package/fesm2022/list.mjs.map +1 -1
  95. package/fesm2022/material.mjs.map +1 -1
  96. package/fesm2022/menu-testing.mjs.map +1 -1
  97. package/fesm2022/menu.mjs +22 -22
  98. package/fesm2022/menu.mjs.map +1 -1
  99. package/fesm2022/paginator-testing.mjs.map +1 -1
  100. package/fesm2022/paginator.mjs +10 -10
  101. package/fesm2022/paginator.mjs.map +1 -1
  102. package/fesm2022/progress-bar-testing.mjs.map +1 -1
  103. package/fesm2022/progress-bar.mjs +7 -7
  104. package/fesm2022/progress-bar.mjs.map +1 -1
  105. package/fesm2022/progress-spinner-testing.mjs.map +1 -1
  106. package/fesm2022/progress-spinner.mjs +7 -7
  107. package/fesm2022/progress-spinner.mjs.map +1 -1
  108. package/fesm2022/radio-testing.mjs.map +1 -1
  109. package/fesm2022/radio.mjs +10 -10
  110. package/fesm2022/radio.mjs.map +1 -1
  111. package/fesm2022/select-testing.mjs.map +1 -1
  112. package/fesm2022/select.mjs +16 -16
  113. package/fesm2022/select.mjs.map +1 -1
  114. package/fesm2022/sidenav-testing.mjs.map +1 -1
  115. package/fesm2022/sidenav.mjs +22 -22
  116. package/fesm2022/sidenav.mjs.map +1 -1
  117. package/fesm2022/slide-toggle-testing.mjs.map +1 -1
  118. package/fesm2022/slide-toggle.mjs +7 -7
  119. package/fesm2022/slide-toggle.mjs.map +1 -1
  120. package/fesm2022/slider-testing.mjs.map +1 -1
  121. package/fesm2022/slider.mjs +16 -16
  122. package/fesm2022/slider.mjs.map +1 -1
  123. package/fesm2022/snack-bar-testing.mjs.map +1 -1
  124. package/fesm2022/snack-bar.mjs +22 -22
  125. package/fesm2022/snack-bar.mjs.map +1 -1
  126. package/fesm2022/sort-testing.mjs.map +1 -1
  127. package/fesm2022/sort.mjs +13 -13
  128. package/fesm2022/sort.mjs.map +1 -1
  129. package/fesm2022/stepper-testing.mjs.map +1 -1
  130. package/fesm2022/stepper.mjs +31 -31
  131. package/fesm2022/stepper.mjs.map +1 -1
  132. package/fesm2022/table-testing.mjs.map +1 -1
  133. package/fesm2022/table.mjs +55 -55
  134. package/fesm2022/table.mjs.map +1 -1
  135. package/fesm2022/tabs-testing.mjs.map +1 -1
  136. package/fesm2022/tabs.mjs +43 -43
  137. package/fesm2022/tabs.mjs.map +1 -1
  138. package/fesm2022/timepicker-testing.mjs.map +1 -1
  139. package/fesm2022/timepicker.mjs +214 -49
  140. package/fesm2022/timepicker.mjs.map +1 -1
  141. package/fesm2022/toolbar-testing.mjs.map +1 -1
  142. package/fesm2022/toolbar.mjs +10 -10
  143. package/fesm2022/toolbar.mjs.map +1 -1
  144. package/fesm2022/tooltip-testing.mjs.map +1 -1
  145. package/fesm2022/tooltip.mjs +4 -4
  146. package/fesm2022/tooltip.mjs.map +1 -1
  147. package/fesm2022/tree-testing.mjs.map +1 -1
  148. package/fesm2022/tree.mjs +25 -25
  149. package/fesm2022/tree.mjs.map +1 -1
  150. package/package.json +2 -2
  151. package/schematics/ng-add/index.js +1 -1
  152. package/types/datepicker.d.ts +4 -0
  153. package/types/timepicker.d.ts +4 -4
@@ -1 +1 @@
1
- {"version":3,"file":"timepicker-testing.mjs","sources":["../../../../../darwin_arm64-fastbuild-ST-199a4f3c4e20/bin/src/material/timepicker/testing/timepicker-harness.ts","../../../../../darwin_arm64-fastbuild-ST-199a4f3c4e20/bin/src/material/timepicker/testing/timepicker-input-harness.ts","../../../../../darwin_arm64-fastbuild-ST-199a4f3c4e20/bin/src/material/timepicker/testing/timepicker-toggle-harness.ts"],"sourcesContent":["/**\n * @license\n * Copyright Google LLC All Rights Reserved.\n *\n * Use of this source code is governed by an MIT-style license that can be\n * found in the LICENSE file at https://angular.dev/license\n */\n\nimport {\n ComponentHarness,\n ComponentHarnessConstructor,\n HarnessPredicate,\n} from '@angular/cdk/testing';\nimport {MatOptionHarness, OptionHarnessFilters} from '../../core/testing';\nimport {TimepickerHarnessFilters} from './timepicker-harness-filters';\n\nexport class MatTimepickerHarness extends ComponentHarness {\n private _documentRootLocator = this.documentRootLocatorFactory();\n static hostSelector = 'mat-timepicker';\n\n /**\n * Gets a `HarnessPredicate` that can be used to search for a timepicker with specific\n * attributes.\n * @param options Options for filtering which timepicker instances are considered a match.\n * @return a `HarnessPredicate` configured with the given options.\n */\n static with<T extends MatTimepickerHarness>(\n this: ComponentHarnessConstructor<T>,\n options: TimepickerHarnessFilters = {},\n ): HarnessPredicate<T> {\n return new HarnessPredicate(this, options);\n }\n\n /** Whether the timepicker is open. */\n async isOpen(): Promise<boolean> {\n const selector = await this._getPanelSelector();\n const panel = await this._documentRootLocator.locatorForOptional(selector)();\n return panel !== null;\n }\n\n /** Gets the options inside the timepicker panel. */\n async getOptions(filters?: Omit<OptionHarnessFilters, 'ancestor'>): Promise<MatOptionHarness[]> {\n if (!(await this.isOpen())) {\n throw new Error('Unable to retrieve options for timepicker. Timepicker panel is closed.');\n }\n\n return this._documentRootLocator.locatorForAll(\n MatOptionHarness.with({\n ...(filters || {}),\n ancestor: await this._getPanelSelector(),\n } as OptionHarnessFilters),\n )();\n }\n\n /** Selects the first option matching the given filters. */\n async selectOption(filters: OptionHarnessFilters): Promise<void> {\n const options = await this.getOptions(filters);\n if (!options.length) {\n throw Error(`Could not find a mat-option matching ${JSON.stringify(filters)}`);\n }\n await options[0].click();\n }\n\n /** Gets the selector that can be used to find the timepicker's panel. */\n protected async _getPanelSelector(): Promise<string> {\n return `#${await (await this.host()).getAttribute('mat-timepicker-panel-id')}`;\n }\n}\n","/**\n * @license\n * Copyright Google LLC All Rights Reserved.\n *\n * Use of this source code is governed by an MIT-style license that can be\n * found in the LICENSE file at https://angular.dev/license\n */\n\nimport {\n ComponentHarness,\n ComponentHarnessConstructor,\n HarnessPredicate,\n TestKey,\n} from '@angular/cdk/testing';\nimport {MatTimepickerHarness} from './timepicker-harness';\nimport {\n TimepickerHarnessFilters,\n TimepickerInputHarnessFilters,\n} from './timepicker-harness-filters';\n\n/** Harness for interacting with a standard Material timepicker inputs in tests. */\nexport class MatTimepickerInputHarness extends ComponentHarness {\n private _documentRootLocator = this.documentRootLocatorFactory();\n static hostSelector = '.mat-timepicker-input';\n\n /**\n * Gets a `HarnessPredicate` that can be used to search for a `MatTimepickerInputHarness`\n * that meets certain criteria.\n * @param options Options for filtering which input instances are considered a match.\n * @return a `HarnessPredicate` configured with the given options.\n */\n static with<T extends MatTimepickerInputHarness>(\n this: ComponentHarnessConstructor<T>,\n options: TimepickerInputHarnessFilters = {},\n ): HarnessPredicate<T> {\n return new HarnessPredicate(this, options)\n .addOption('value', options.value, (harness, value) => {\n return HarnessPredicate.stringMatches(harness.getValue(), value);\n })\n .addOption('placeholder', options.placeholder, (harness, placeholder) => {\n return HarnessPredicate.stringMatches(harness.getPlaceholder(), placeholder);\n });\n }\n\n /** Gets whether the timepicker associated with the input is open. */\n async isTimepickerOpen(): Promise<boolean> {\n const host = await this.host();\n return (await host.getAttribute('aria-expanded')) === 'true';\n }\n\n /** Opens the timepicker associated with the input and returns the timepicker instance. */\n async openTimepicker(): Promise<MatTimepickerHarness> {\n if (!(await this.isDisabled())) {\n const host = await this.host();\n await host.sendKeys(TestKey.DOWN_ARROW);\n }\n\n return this.getTimepicker();\n }\n\n /** Closes the timepicker associated with the input. */\n async closeTimepicker(): Promise<void> {\n await this._documentRootLocator.rootElement.click();\n\n // This is necessary so that we wait for the closing animation.\n await this.forceStabilize();\n }\n\n /**\n * Gets the `MatTimepickerHarness` that is associated with the input.\n * @param filter Optionally filters which timepicker is included.\n */\n async getTimepicker(filter: TimepickerHarnessFilters = {}): Promise<MatTimepickerHarness> {\n const host = await this.host();\n const timepickerId = await host.getAttribute('mat-timepicker-id');\n\n if (!timepickerId) {\n throw Error('Element is not associated with a timepicker');\n }\n\n return this._documentRootLocator.locatorFor(\n MatTimepickerHarness.with({\n ...filter,\n selector: `[mat-timepicker-panel-id=\"${timepickerId}\"]`,\n }),\n )();\n }\n\n /** Whether the input is disabled. */\n async isDisabled(): Promise<boolean> {\n return (await this.host()).getProperty<boolean>('disabled');\n }\n\n /** Whether the input is required. */\n async isRequired(): Promise<boolean> {\n return (await this.host()).getProperty<boolean>('required');\n }\n\n /** Gets the value of the input. */\n async getValue(): Promise<string> {\n // The \"value\" property of the native input is always defined.\n return await (await this.host()).getProperty<string>('value');\n }\n\n /**\n * Sets the value of the input. The value will be set by simulating\n * keypresses that correspond to the given value.\n */\n async setValue(newValue: string): Promise<void> {\n const inputEl = await this.host();\n await inputEl.clear();\n\n // We don't want to send keys for the value if the value is an empty\n // string in order to clear the value. Sending keys with an empty string\n // still results in unnecessary focus events.\n if (newValue) {\n await inputEl.sendKeys(newValue);\n }\n }\n\n /** Gets the placeholder of the input. */\n async getPlaceholder(): Promise<string> {\n return await (await this.host()).getProperty<string>('placeholder');\n }\n\n /**\n * Focuses the input and returns a promise that indicates when the\n * action is complete.\n */\n async focus(): Promise<void> {\n return (await this.host()).focus();\n }\n\n /**\n * Blurs the input and returns a promise that indicates when the\n * action is complete.\n */\n async blur(): Promise<void> {\n return (await this.host()).blur();\n }\n\n /** Whether the input is focused. */\n async isFocused(): Promise<boolean> {\n return (await this.host()).isFocused();\n }\n}\n","/**\n * @license\n * Copyright Google LLC All Rights Reserved.\n *\n * Use of this source code is governed by an MIT-style license that can be\n * found in the LICENSE file at https://angular.dev/license\n */\n\nimport {ComponentHarness, HarnessPredicate} from '@angular/cdk/testing';\nimport {coerceBooleanProperty} from '@angular/cdk/coercion';\nimport {TimepickerToggleHarnessFilters} from './timepicker-harness-filters';\n\n/** Harness for interacting with a standard Material timepicker toggle in tests. */\nexport class MatTimepickerToggleHarness extends ComponentHarness {\n static hostSelector = '.mat-timepicker-toggle';\n\n /** The clickable button inside the toggle. */\n private _button = this.locatorFor('button');\n\n /**\n * Gets a `HarnessPredicate` that can be used to search for a `MatTimepickerToggleHarness` that\n * meets certain criteria.\n * @param options Options for filtering which timepicker toggle instances are considered a match.\n * @return a `HarnessPredicate` configured with the given options.\n */\n static with(\n options: TimepickerToggleHarnessFilters = {},\n ): HarnessPredicate<MatTimepickerToggleHarness> {\n return new HarnessPredicate(MatTimepickerToggleHarness, options);\n }\n\n /** Opens the timepicker associated with the toggle. */\n async openTimepicker(): Promise<void> {\n const isOpen = await this.isTimepickerOpen();\n\n if (!isOpen) {\n const button = await this._button();\n await button.click();\n }\n }\n\n /** Gets whether the timepicker associated with the toggle is open. */\n async isTimepickerOpen(): Promise<boolean> {\n const button = await this._button();\n const ariaExpanded = await button.getAttribute('aria-expanded');\n return ariaExpanded === 'true';\n }\n\n /** Whether the toggle is disabled. */\n async isDisabled(): Promise<boolean> {\n const button = await this._button();\n return coerceBooleanProperty(await button.getAttribute('disabled'));\n }\n}\n"],"names":["MatTimepickerHarness","ComponentHarness","_documentRootLocator","documentRootLocatorFactory","hostSelector","with","options","HarnessPredicate","isOpen","selector","_getPanelSelector","panel","locatorForOptional","getOptions","filters","Error","locatorForAll","MatOptionHarness","ancestor","selectOption","length","JSON","stringify","click","host","getAttribute","MatTimepickerInputHarness","addOption","value","harness","stringMatches","getValue","placeholder","getPlaceholder","isTimepickerOpen","openTimepicker","isDisabled","sendKeys","TestKey","DOWN_ARROW","getTimepicker","closeTimepicker","rootElement","forceStabilize","filter","timepickerId","locatorFor","getProperty","isRequired","setValue","newValue","inputEl","clear","focus","blur","isFocused","MatTimepickerToggleHarness","_button","button","ariaExpanded","coerceBooleanProperty"],"mappings":"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"}
1
+ {"version":3,"file":"timepicker-testing.mjs","sources":["../../../../../k8-fastbuild-ST-199a4f3c4e20/bin/src/material/timepicker/testing/timepicker-harness.ts","../../../../../k8-fastbuild-ST-199a4f3c4e20/bin/src/material/timepicker/testing/timepicker-input-harness.ts","../../../../../k8-fastbuild-ST-199a4f3c4e20/bin/src/material/timepicker/testing/timepicker-toggle-harness.ts"],"sourcesContent":["/**\n * @license\n * Copyright Google LLC All Rights Reserved.\n *\n * Use of this source code is governed by an MIT-style license that can be\n * found in the LICENSE file at https://angular.dev/license\n */\n\nimport {\n ComponentHarness,\n ComponentHarnessConstructor,\n HarnessPredicate,\n} from '@angular/cdk/testing';\nimport {MatOptionHarness, OptionHarnessFilters} from '../../core/testing';\nimport {TimepickerHarnessFilters} from './timepicker-harness-filters';\n\nexport class MatTimepickerHarness extends ComponentHarness {\n private _documentRootLocator = this.documentRootLocatorFactory();\n static hostSelector = 'mat-timepicker';\n\n /**\n * Gets a `HarnessPredicate` that can be used to search for a timepicker with specific\n * attributes.\n * @param options Options for filtering which timepicker instances are considered a match.\n * @return a `HarnessPredicate` configured with the given options.\n */\n static with<T extends MatTimepickerHarness>(\n this: ComponentHarnessConstructor<T>,\n options: TimepickerHarnessFilters = {},\n ): HarnessPredicate<T> {\n return new HarnessPredicate(this, options);\n }\n\n /** Whether the timepicker is open. */\n async isOpen(): Promise<boolean> {\n const selector = await this._getPanelSelector();\n const panel = await this._documentRootLocator.locatorForOptional(selector)();\n return panel !== null;\n }\n\n /** Gets the options inside the timepicker panel. */\n async getOptions(filters?: Omit<OptionHarnessFilters, 'ancestor'>): Promise<MatOptionHarness[]> {\n if (!(await this.isOpen())) {\n throw new Error('Unable to retrieve options for timepicker. Timepicker panel is closed.');\n }\n\n return this._documentRootLocator.locatorForAll(\n MatOptionHarness.with({\n ...(filters || {}),\n ancestor: await this._getPanelSelector(),\n } as OptionHarnessFilters),\n )();\n }\n\n /** Selects the first option matching the given filters. */\n async selectOption(filters: OptionHarnessFilters): Promise<void> {\n const options = await this.getOptions(filters);\n if (!options.length) {\n throw Error(`Could not find a mat-option matching ${JSON.stringify(filters)}`);\n }\n await options[0].click();\n }\n\n /** Gets the selector that can be used to find the timepicker's panel. */\n protected async _getPanelSelector(): Promise<string> {\n return `#${await (await this.host()).getAttribute('mat-timepicker-panel-id')}`;\n }\n}\n","/**\n * @license\n * Copyright Google LLC All Rights Reserved.\n *\n * Use of this source code is governed by an MIT-style license that can be\n * found in the LICENSE file at https://angular.dev/license\n */\n\nimport {\n ComponentHarness,\n ComponentHarnessConstructor,\n HarnessPredicate,\n TestKey,\n} from '@angular/cdk/testing';\nimport {MatTimepickerHarness} from './timepicker-harness';\nimport {\n TimepickerHarnessFilters,\n TimepickerInputHarnessFilters,\n} from './timepicker-harness-filters';\n\n/** Harness for interacting with a standard Material timepicker inputs in tests. */\nexport class MatTimepickerInputHarness extends ComponentHarness {\n private _documentRootLocator = this.documentRootLocatorFactory();\n static hostSelector = '.mat-timepicker-input';\n\n /**\n * Gets a `HarnessPredicate` that can be used to search for a `MatTimepickerInputHarness`\n * that meets certain criteria.\n * @param options Options for filtering which input instances are considered a match.\n * @return a `HarnessPredicate` configured with the given options.\n */\n static with<T extends MatTimepickerInputHarness>(\n this: ComponentHarnessConstructor<T>,\n options: TimepickerInputHarnessFilters = {},\n ): HarnessPredicate<T> {\n return new HarnessPredicate(this, options)\n .addOption('value', options.value, (harness, value) => {\n return HarnessPredicate.stringMatches(harness.getValue(), value);\n })\n .addOption('placeholder', options.placeholder, (harness, placeholder) => {\n return HarnessPredicate.stringMatches(harness.getPlaceholder(), placeholder);\n });\n }\n\n /** Gets whether the timepicker associated with the input is open. */\n async isTimepickerOpen(): Promise<boolean> {\n const host = await this.host();\n return (await host.getAttribute('aria-expanded')) === 'true';\n }\n\n /** Opens the timepicker associated with the input and returns the timepicker instance. */\n async openTimepicker(): Promise<MatTimepickerHarness> {\n if (!(await this.isDisabled())) {\n const host = await this.host();\n await host.sendKeys(TestKey.DOWN_ARROW);\n }\n\n return this.getTimepicker();\n }\n\n /** Closes the timepicker associated with the input. */\n async closeTimepicker(): Promise<void> {\n await this._documentRootLocator.rootElement.click();\n\n // This is necessary so that we wait for the closing animation.\n await this.forceStabilize();\n }\n\n /**\n * Gets the `MatTimepickerHarness` that is associated with the input.\n * @param filter Optionally filters which timepicker is included.\n */\n async getTimepicker(filter: TimepickerHarnessFilters = {}): Promise<MatTimepickerHarness> {\n const host = await this.host();\n const timepickerId = await host.getAttribute('mat-timepicker-id');\n\n if (!timepickerId) {\n throw Error('Element is not associated with a timepicker');\n }\n\n return this._documentRootLocator.locatorFor(\n MatTimepickerHarness.with({\n ...filter,\n selector: `[mat-timepicker-panel-id=\"${timepickerId}\"]`,\n }),\n )();\n }\n\n /** Whether the input is disabled. */\n async isDisabled(): Promise<boolean> {\n return (await this.host()).getProperty<boolean>('disabled');\n }\n\n /** Whether the input is required. */\n async isRequired(): Promise<boolean> {\n return (await this.host()).getProperty<boolean>('required');\n }\n\n /** Gets the value of the input. */\n async getValue(): Promise<string> {\n // The \"value\" property of the native input is always defined.\n return await (await this.host()).getProperty<string>('value');\n }\n\n /**\n * Sets the value of the input. The value will be set by simulating\n * keypresses that correspond to the given value.\n */\n async setValue(newValue: string): Promise<void> {\n const inputEl = await this.host();\n await inputEl.clear();\n\n // We don't want to send keys for the value if the value is an empty\n // string in order to clear the value. Sending keys with an empty string\n // still results in unnecessary focus events.\n if (newValue) {\n await inputEl.sendKeys(newValue);\n }\n }\n\n /** Gets the placeholder of the input. */\n async getPlaceholder(): Promise<string> {\n return await (await this.host()).getProperty<string>('placeholder');\n }\n\n /**\n * Focuses the input and returns a promise that indicates when the\n * action is complete.\n */\n async focus(): Promise<void> {\n return (await this.host()).focus();\n }\n\n /**\n * Blurs the input and returns a promise that indicates when the\n * action is complete.\n */\n async blur(): Promise<void> {\n return (await this.host()).blur();\n }\n\n /** Whether the input is focused. */\n async isFocused(): Promise<boolean> {\n return (await this.host()).isFocused();\n }\n}\n","/**\n * @license\n * Copyright Google LLC All Rights Reserved.\n *\n * Use of this source code is governed by an MIT-style license that can be\n * found in the LICENSE file at https://angular.dev/license\n */\n\nimport {ComponentHarness, HarnessPredicate} from '@angular/cdk/testing';\nimport {coerceBooleanProperty} from '@angular/cdk/coercion';\nimport {TimepickerToggleHarnessFilters} from './timepicker-harness-filters';\n\n/** Harness for interacting with a standard Material timepicker toggle in tests. */\nexport class MatTimepickerToggleHarness extends ComponentHarness {\n static hostSelector = '.mat-timepicker-toggle';\n\n /** The clickable button inside the toggle. */\n private _button = this.locatorFor('button');\n\n /**\n * Gets a `HarnessPredicate` that can be used to search for a `MatTimepickerToggleHarness` that\n * meets certain criteria.\n * @param options Options for filtering which timepicker toggle instances are considered a match.\n * @return a `HarnessPredicate` configured with the given options.\n */\n static with(\n options: TimepickerToggleHarnessFilters = {},\n ): HarnessPredicate<MatTimepickerToggleHarness> {\n return new HarnessPredicate(MatTimepickerToggleHarness, options);\n }\n\n /** Opens the timepicker associated with the toggle. */\n async openTimepicker(): Promise<void> {\n const isOpen = await this.isTimepickerOpen();\n\n if (!isOpen) {\n const button = await this._button();\n await button.click();\n }\n }\n\n /** Gets whether the timepicker associated with the toggle is open. */\n async isTimepickerOpen(): Promise<boolean> {\n const button = await this._button();\n const ariaExpanded = await button.getAttribute('aria-expanded');\n return ariaExpanded === 'true';\n }\n\n /** Whether the toggle is disabled. */\n async isDisabled(): Promise<boolean> {\n const button = await this._button();\n return coerceBooleanProperty(await button.getAttribute('disabled'));\n }\n}\n"],"names":["MatTimepickerHarness","ComponentHarness","_documentRootLocator","documentRootLocatorFactory","hostSelector","with","options","HarnessPredicate","isOpen","selector","_getPanelSelector","panel","locatorForOptional","getOptions","filters","Error","locatorForAll","MatOptionHarness","ancestor","selectOption","length","JSON","stringify","click","host","getAttribute","MatTimepickerInputHarness","addOption","value","harness","stringMatches","getValue","placeholder","getPlaceholder","isTimepickerOpen","openTimepicker","isDisabled","sendKeys","TestKey","DOWN_ARROW","getTimepicker","closeTimepicker","rootElement","forceStabilize","filter","timepickerId","locatorFor","getProperty","isRequired","setValue","newValue","inputEl","clear","focus","blur","isFocused","MatTimepickerToggleHarness","_button","button","ariaExpanded","coerceBooleanProperty"],"mappings":"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"}
@@ -375,7 +375,7 @@ class MatTimepicker {
375
375
  }
376
376
  static ɵfac = i0.ɵɵngDeclareFactory({
377
377
  minVersion: "12.0.0",
378
- version: "20.2.0-next.2",
378
+ version: "21.0.0",
379
379
  ngImport: i0,
380
380
  type: MatTimepicker,
381
381
  deps: [],
@@ -383,7 +383,7 @@ class MatTimepicker {
383
383
  });
384
384
  static ɵcmp = i0.ɵɵngDeclareComponent({
385
385
  minVersion: "17.0.0",
386
- version: "20.2.0-next.2",
386
+ version: "21.0.0",
387
387
  type: MatTimepicker,
388
388
  isStandalone: true,
389
389
  selector: "mat-timepicker",
@@ -463,7 +463,7 @@ class MatTimepicker {
463
463
  }
464
464
  i0.ɵɵngDeclareClassMetadata({
465
465
  minVersion: "12.0.0",
466
- version: "20.2.0-next.2",
466
+ version: "21.0.0",
467
467
  ngImport: i0,
468
468
  type: MatTimepicker,
469
469
  decorators: [{
@@ -482,7 +482,73 @@ i0.ɵɵngDeclareClassMetadata({
482
482
  styles: ["@keyframes _mat-timepicker-enter{from{opacity:0;transform:scaleY(0.8)}to{opacity:1;transform:none}}@keyframes _mat-timepicker-exit{from{opacity:1}to{opacity:0}}mat-timepicker{display:none}.mat-timepicker-panel{width:100%;max-height:256px;transform-origin:center top;overflow:auto;padding:8px 0;box-sizing:border-box;position:relative;border-bottom-left-radius:var(--mat-timepicker-container-shape, var(--mat-sys-corner-extra-small));border-bottom-right-radius:var(--mat-timepicker-container-shape, var(--mat-sys-corner-extra-small));box-shadow:var(--mat-timepicker-container-elevation-shadow, 0px 3px 1px -2px rgba(0, 0, 0, 0.2), 0px 2px 2px 0px rgba(0, 0, 0, 0.14), 0px 1px 5px 0px rgba(0, 0, 0, 0.12));background-color:var(--mat-timepicker-container-background-color, var(--mat-sys-surface-container))}@media(forced-colors: active){.mat-timepicker-panel{outline:solid 1px}}.mat-timepicker-above .mat-timepicker-panel{border-bottom-left-radius:0;border-bottom-right-radius:0;border-top-left-radius:var(--mat-timepicker-container-shape, var(--mat-sys-corner-extra-small));border-top-right-radius:var(--mat-timepicker-container-shape, var(--mat-sys-corner-extra-small))}.mat-timepicker-panel-animations-enabled{animation:_mat-timepicker-enter 120ms cubic-bezier(0, 0, 0.2, 1)}.mat-timepicker-panel-animations-enabled.mat-timepicker-panel-exit{animation:_mat-timepicker-exit 100ms linear}.mat-timepicker-input[readonly]{cursor:pointer}@media(forced-colors: active){.mat-timepicker-toggle-default-icon{color:CanvasText}}\n"]
483
483
  }]
484
484
  }],
485
- ctorParameters: () => []
485
+ ctorParameters: () => [],
486
+ propDecorators: {
487
+ _panelTemplate: [{
488
+ type: i0.ViewChild,
489
+ args: ['panelTemplate', {
490
+ isSignal: true
491
+ }]
492
+ }],
493
+ _options: [{
494
+ type: i0.ViewChildren,
495
+ args: [i0.forwardRef(() => MatOption), {
496
+ isSignal: true
497
+ }]
498
+ }],
499
+ interval: [{
500
+ type: i0.Input,
501
+ args: [{
502
+ isSignal: true,
503
+ alias: "interval",
504
+ required: false
505
+ }]
506
+ }],
507
+ options: [{
508
+ type: i0.Input,
509
+ args: [{
510
+ isSignal: true,
511
+ alias: "options",
512
+ required: false
513
+ }]
514
+ }],
515
+ selected: [{
516
+ type: i0.Output,
517
+ args: ["selected"]
518
+ }],
519
+ opened: [{
520
+ type: i0.Output,
521
+ args: ["opened"]
522
+ }],
523
+ closed: [{
524
+ type: i0.Output,
525
+ args: ["closed"]
526
+ }],
527
+ disableRipple: [{
528
+ type: i0.Input,
529
+ args: [{
530
+ isSignal: true,
531
+ alias: "disableRipple",
532
+ required: false
533
+ }]
534
+ }],
535
+ ariaLabel: [{
536
+ type: i0.Input,
537
+ args: [{
538
+ isSignal: true,
539
+ alias: "aria-label",
540
+ required: false
541
+ }]
542
+ }],
543
+ ariaLabelledby: [{
544
+ type: i0.Input,
545
+ args: [{
546
+ isSignal: true,
547
+ alias: "aria-labelledby",
548
+ required: false
549
+ }]
550
+ }]
551
+ }
486
552
  });
487
553
  function scrollOptionIntoView(option, position) {
488
554
  option._getHostElement().scrollIntoView({
@@ -513,6 +579,8 @@ class MatTimepickerInput {
513
579
  _timepickerSubscription;
514
580
  _validator;
515
581
  _lastValueValid = true;
582
+ _minValid = true;
583
+ _maxValid = true;
516
584
  _lastValidDate = null;
517
585
  _ariaActiveDescendant = computed(() => {
518
586
  const timepicker = this.timepicker();
@@ -581,8 +649,7 @@ class MatTimepickerInput {
581
649
  }
582
650
  const renderer = inject(Renderer2);
583
651
  this._validator = this._getValidator();
584
- this._respondToValueChanges();
585
- this._respondToMinMaxChanges();
652
+ this._updateFormsState();
586
653
  this._registerTimepicker();
587
654
  this._localeSubscription = this._dateAdapter.localeChanges.subscribe(() => {
588
655
  if (!this._hasFocus()) {
@@ -673,18 +740,28 @@ class MatTimepickerInput {
673
740
  this._formatValue(value);
674
741
  }
675
742
  }
676
- _respondToValueChanges() {
743
+ _updateFormsState() {
677
744
  effect(() => {
678
- const value = this._dateAdapter.deserialize(this.value());
679
- const wasValid = this._lastValueValid;
680
- this._lastValueValid = this._isValid(value);
745
+ const {
746
+ _dateAdapter: adapter,
747
+ _lastValueValid: prevValueValid,
748
+ _minValid: prevMinValid,
749
+ _maxValid: prevMaxValid
750
+ } = this;
751
+ const value = adapter.deserialize(this.value());
752
+ const min = this.min();
753
+ const max = this.max();
754
+ const valueValid = this._lastValueValid = this._isValid(value);
755
+ this._minValid = !min || !value || !valueValid || adapter.compareTime(min, value) <= 0;
756
+ this._maxValid = !max || !value || !valueValid || adapter.compareTime(max, value) >= 0;
757
+ const stateChanged = prevValueValid !== valueValid || prevMinValid !== this._minValid || prevMaxValid !== this._maxValid;
681
758
  if (!this._hasFocus()) {
682
759
  this._formatValue(value);
683
760
  }
684
- if (value && this._lastValueValid) {
761
+ if (value && valueValid) {
685
762
  this._lastValidDate = value;
686
763
  }
687
- if (wasValid !== this._lastValueValid) {
764
+ if (stateChanged) {
688
765
  this._validatorOnChange?.();
689
766
  }
690
767
  });
@@ -696,13 +773,6 @@ class MatTimepickerInput {
696
773
  timepicker.closed.subscribe(() => this._onTouched?.());
697
774
  });
698
775
  }
699
- _respondToMinMaxChanges() {
700
- effect(() => {
701
- this.min();
702
- this.max();
703
- this._validatorOnChange?.();
704
- });
705
- }
706
776
  _assignUserSelection(selection, propagateToAccessor) {
707
777
  let toAssign;
708
778
  if (selection == null || !this._isValid(selection)) {
@@ -739,29 +809,21 @@ class MatTimepickerInput {
739
809
  'matTimepickerParse': {
740
810
  'text': this._elementRef.nativeElement.value
741
811
  }
742
- }, control => {
743
- const controlValue = this._dateAdapter.getValidDateOrNull(this._dateAdapter.deserialize(control.value));
744
- const min = this.min();
745
- return !min || !controlValue || this._dateAdapter.compareTime(min, controlValue) <= 0 ? null : {
746
- 'matTimepickerMin': {
747
- 'min': min,
748
- 'actual': controlValue
749
- }
750
- };
751
- }, control => {
752
- const controlValue = this._dateAdapter.getValidDateOrNull(this._dateAdapter.deserialize(control.value));
753
- const max = this.max();
754
- return !max || !controlValue || this._dateAdapter.compareTime(max, controlValue) >= 0 ? null : {
755
- 'matTimepickerMax': {
756
- 'max': max,
757
- 'actual': controlValue
758
- }
759
- };
812
+ }, control => this._minValid ? null : {
813
+ 'matTimepickerMin': {
814
+ 'min': this.min(),
815
+ 'actual': this._dateAdapter.getValidDateOrNull(this._dateAdapter.deserialize(control.value))
816
+ }
817
+ }, control => this._maxValid ? null : {
818
+ 'matTimepickerMax': {
819
+ 'max': this.max(),
820
+ 'actual': this._dateAdapter.getValidDateOrNull(this._dateAdapter.deserialize(control.value))
821
+ }
760
822
  }]);
761
823
  }
762
824
  static ɵfac = i0.ɵɵngDeclareFactory({
763
825
  minVersion: "12.0.0",
764
- version: "20.2.0-next.2",
826
+ version: "21.0.0",
765
827
  ngImport: i0,
766
828
  type: MatTimepickerInput,
767
829
  deps: [],
@@ -769,7 +831,7 @@ class MatTimepickerInput {
769
831
  });
770
832
  static ɵdir = i0.ɵɵngDeclareDirective({
771
833
  minVersion: "17.1.0",
772
- version: "20.2.0-next.2",
834
+ version: "21.0.0",
773
835
  type: MatTimepickerInput,
774
836
  isStandalone: true,
775
837
  selector: "input[matTimepicker]",
@@ -858,7 +920,7 @@ class MatTimepickerInput {
858
920
  }
859
921
  i0.ɵɵngDeclareClassMetadata({
860
922
  minVersion: "12.0.0",
861
- version: "20.2.0-next.2",
923
+ version: "21.0.0",
862
924
  ngImport: i0,
863
925
  type: MatTimepickerInput,
864
926
  decorators: [{
@@ -894,7 +956,60 @@ i0.ɵɵngDeclareClassMetadata({
894
956
  }]
895
957
  }]
896
958
  }],
897
- ctorParameters: () => []
959
+ ctorParameters: () => [],
960
+ propDecorators: {
961
+ value: [{
962
+ type: i0.Input,
963
+ args: [{
964
+ isSignal: true,
965
+ alias: "value",
966
+ required: false
967
+ }]
968
+ }, {
969
+ type: i0.Output,
970
+ args: ["valueChange"]
971
+ }],
972
+ timepicker: [{
973
+ type: i0.Input,
974
+ args: [{
975
+ isSignal: true,
976
+ alias: "matTimepicker",
977
+ required: true
978
+ }]
979
+ }],
980
+ min: [{
981
+ type: i0.Input,
982
+ args: [{
983
+ isSignal: true,
984
+ alias: "matTimepickerMin",
985
+ required: false
986
+ }]
987
+ }],
988
+ max: [{
989
+ type: i0.Input,
990
+ args: [{
991
+ isSignal: true,
992
+ alias: "matTimepickerMax",
993
+ required: false
994
+ }]
995
+ }],
996
+ openOnClick: [{
997
+ type: i0.Input,
998
+ args: [{
999
+ isSignal: true,
1000
+ alias: "matTimepickerOpenOnClick",
1001
+ required: false
1002
+ }]
1003
+ }],
1004
+ disabledInput: [{
1005
+ type: i0.Input,
1006
+ args: [{
1007
+ isSignal: true,
1008
+ alias: "disabled",
1009
+ required: false
1010
+ }]
1011
+ }]
1012
+ }
898
1013
  });
899
1014
 
900
1015
  class MatTimepickerToggle {
@@ -961,7 +1076,7 @@ class MatTimepickerToggle {
961
1076
  }
962
1077
  static ɵfac = i0.ɵɵngDeclareFactory({
963
1078
  minVersion: "12.0.0",
964
- version: "20.2.0-next.2",
1079
+ version: "21.0.0",
965
1080
  ngImport: i0,
966
1081
  type: MatTimepickerToggle,
967
1082
  deps: [],
@@ -969,7 +1084,7 @@ class MatTimepickerToggle {
969
1084
  });
970
1085
  static ɵcmp = i0.ɵɵngDeclareComponent({
971
1086
  minVersion: "17.1.0",
972
- version: "20.2.0-next.2",
1087
+ version: "21.0.0",
973
1088
  type: MatTimepickerToggle,
974
1089
  isStandalone: true,
975
1090
  selector: "mat-timepicker-toggle",
@@ -1041,7 +1156,7 @@ class MatTimepickerToggle {
1041
1156
  }
1042
1157
  i0.ɵɵngDeclareClassMetadata({
1043
1158
  minVersion: "12.0.0",
1044
- version: "20.2.0-next.2",
1159
+ version: "21.0.0",
1045
1160
  ngImport: i0,
1046
1161
  type: MatTimepickerToggle,
1047
1162
  decorators: [{
@@ -1059,13 +1174,63 @@ i0.ɵɵngDeclareClassMetadata({
1059
1174
  imports: [MatIconButton],
1060
1175
  template: "<button\n matIconButton\n type=\"button\"\n aria-haspopup=\"listbox\"\n [attr.aria-label]=\"getAriaLabel()\"\n [attr.aria-labelledby]=\"ariaLabelledby()\"\n [attr.aria-expanded]=\"timepicker().isOpen()\"\n [tabIndex]=\"_isDisabled() ? -1 : tabIndex()\"\n [disabled]=\"_isDisabled()\"\n [disableRipple]=\"disableRipple()\">\n\n <ng-content select=\"[matTimepickerToggleIcon]\">\n <svg\n class=\"mat-timepicker-toggle-default-icon\"\n height=\"24px\"\n width=\"24px\"\n viewBox=\"0 -960 960 960\"\n fill=\"currentColor\"\n focusable=\"false\"\n aria-hidden=\"true\">\n <path d=\"m612-292 56-56-148-148v-184h-80v216l172 172ZM480-80q-83 0-156-31.5T197-197q-54-54-85.5-127T80-480q0-83 31.5-156T197-763q54-54 127-85.5T480-880q83 0 156 31.5T763-763q54 54 85.5 127T880-480q0 83-31.5 156T763-197q-54 54-127 85.5T480-80Zm0-400Zm0 320q133 0 226.5-93.5T800-480q0-133-93.5-226.5T480-800q-133 0-226.5 93.5T160-480q0 133 93.5 226.5T480-160Z\"/>\n </svg>\n </ng-content>\n</button>\n"
1061
1176
  }]
1062
- }]
1177
+ }],
1178
+ propDecorators: {
1179
+ timepicker: [{
1180
+ type: i0.Input,
1181
+ args: [{
1182
+ isSignal: true,
1183
+ alias: "for",
1184
+ required: true
1185
+ }]
1186
+ }],
1187
+ ariaLabel: [{
1188
+ type: i0.Input,
1189
+ args: [{
1190
+ isSignal: true,
1191
+ alias: "aria-label",
1192
+ required: false
1193
+ }]
1194
+ }],
1195
+ ariaLabelledby: [{
1196
+ type: i0.Input,
1197
+ args: [{
1198
+ isSignal: true,
1199
+ alias: "aria-labelledby",
1200
+ required: false
1201
+ }]
1202
+ }],
1203
+ disabled: [{
1204
+ type: i0.Input,
1205
+ args: [{
1206
+ isSignal: true,
1207
+ alias: "disabled",
1208
+ required: false
1209
+ }]
1210
+ }],
1211
+ tabIndex: [{
1212
+ type: i0.Input,
1213
+ args: [{
1214
+ isSignal: true,
1215
+ alias: "tabIndex",
1216
+ required: false
1217
+ }]
1218
+ }],
1219
+ disableRipple: [{
1220
+ type: i0.Input,
1221
+ args: [{
1222
+ isSignal: true,
1223
+ alias: "disableRipple",
1224
+ required: false
1225
+ }]
1226
+ }]
1227
+ }
1063
1228
  });
1064
1229
 
1065
1230
  class MatTimepickerModule {
1066
1231
  static ɵfac = i0.ɵɵngDeclareFactory({
1067
1232
  minVersion: "12.0.0",
1068
- version: "20.2.0-next.2",
1233
+ version: "21.0.0",
1069
1234
  ngImport: i0,
1070
1235
  type: MatTimepickerModule,
1071
1236
  deps: [],
@@ -1073,7 +1238,7 @@ class MatTimepickerModule {
1073
1238
  });
1074
1239
  static ɵmod = i0.ɵɵngDeclareNgModule({
1075
1240
  minVersion: "14.0.0",
1076
- version: "20.2.0-next.2",
1241
+ version: "21.0.0",
1077
1242
  ngImport: i0,
1078
1243
  type: MatTimepickerModule,
1079
1244
  imports: [MatTimepicker, MatTimepickerInput, MatTimepickerToggle],
@@ -1081,7 +1246,7 @@ class MatTimepickerModule {
1081
1246
  });
1082
1247
  static ɵinj = i0.ɵɵngDeclareInjector({
1083
1248
  minVersion: "12.0.0",
1084
- version: "20.2.0-next.2",
1249
+ version: "21.0.0",
1085
1250
  ngImport: i0,
1086
1251
  type: MatTimepickerModule,
1087
1252
  imports: [MatTimepicker, MatTimepickerToggle, CdkScrollableModule]
@@ -1089,7 +1254,7 @@ class MatTimepickerModule {
1089
1254
  }
1090
1255
  i0.ɵɵngDeclareClassMetadata({
1091
1256
  minVersion: "12.0.0",
1092
- version: "20.2.0-next.2",
1257
+ version: "21.0.0",
1093
1258
  ngImport: i0,
1094
1259
  type: MatTimepickerModule,
1095
1260
  decorators: [{