@taiga-ui/core 5.0.0-canary.cf66fed → 5.0.0-canary.dc2eca0

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 (131) hide show
  1. package/components/checkbox/checkbox.component.d.ts +10 -0
  2. package/components/checkbox/checkbox.options.d.ts +10 -0
  3. package/components/checkbox/index.d.ts +2 -0
  4. package/components/data-list/index.d.ts +1 -0
  5. package/components/data-list/option-content.directive.d.ts +1 -1
  6. package/components/data-list/option-with-content.directive.d.ts +9 -0
  7. package/components/data-list/option-with-value.directive.d.ts +2 -1
  8. package/components/data-list/option.directive.d.ts +0 -4
  9. package/components/index.d.ts +3 -0
  10. package/components/loader/loader.component.d.ts +0 -2
  11. package/components/radio/index.d.ts +4 -0
  12. package/components/radio/radio.component.d.ts +18 -0
  13. package/components/radio/radio.d.ts +3 -0
  14. package/components/radio/radio.directive.d.ts +8 -0
  15. package/components/radio/radio.options.d.ts +7 -0
  16. package/components/slider/helpers/key-steps.d.ts +27 -0
  17. package/components/slider/helpers/slider-key-steps.directive.d.ts +32 -0
  18. package/components/slider/helpers/slider-readonly.directive.d.ts +15 -0
  19. package/components/slider/helpers/slider-thumb-label.component.d.ts +13 -0
  20. package/components/slider/index.d.ts +6 -0
  21. package/components/slider/slider.component.d.ts +22 -0
  22. package/components/slider/slider.d.ts +5 -0
  23. package/components/textfield/index.d.ts +0 -1
  24. package/components/textfield/textfield-multi/textfield-item.component.d.ts +1 -0
  25. package/components/textfield/textfield-multi/textfield-multi.component.d.ts +2 -0
  26. package/components/textfield/textfield.component.d.ts +1 -0
  27. package/directives/items-handlers/items-handlers.validator.d.ts +1 -0
  28. package/fesm2022/taiga-ui-core-components-button.mjs +3 -2
  29. package/fesm2022/taiga-ui-core-components-button.mjs.map +1 -1
  30. package/fesm2022/taiga-ui-core-components-calendar.mjs +4 -4
  31. package/fesm2022/taiga-ui-core-components-calendar.mjs.map +1 -1
  32. package/fesm2022/taiga-ui-core-components-cell.mjs +2 -2
  33. package/fesm2022/taiga-ui-core-components-cell.mjs.map +1 -1
  34. package/fesm2022/taiga-ui-core-components-checkbox.mjs +37 -0
  35. package/fesm2022/taiga-ui-core-components-checkbox.mjs.map +1 -0
  36. package/fesm2022/taiga-ui-core-components-data-list.mjs +29 -20
  37. package/fesm2022/taiga-ui-core-components-data-list.mjs.map +1 -1
  38. package/fesm2022/taiga-ui-core-components-error.mjs +3 -3
  39. package/fesm2022/taiga-ui-core-components-error.mjs.map +1 -1
  40. package/fesm2022/taiga-ui-core-components-icon.mjs +2 -2
  41. package/fesm2022/taiga-ui-core-components-icon.mjs.map +1 -1
  42. package/fesm2022/taiga-ui-core-components-label.mjs +5 -3
  43. package/fesm2022/taiga-ui-core-components-label.mjs.map +1 -1
  44. package/fesm2022/taiga-ui-core-components-link.mjs +3 -2
  45. package/fesm2022/taiga-ui-core-components-link.mjs.map +1 -1
  46. package/fesm2022/taiga-ui-core-components-loader.mjs +5 -8
  47. package/fesm2022/taiga-ui-core-components-loader.mjs.map +1 -1
  48. package/fesm2022/taiga-ui-core-components-notification.mjs +3 -2
  49. package/fesm2022/taiga-ui-core-components-notification.mjs.map +1 -1
  50. package/fesm2022/taiga-ui-core-components-radio.mjs +91 -0
  51. package/fesm2022/taiga-ui-core-components-radio.mjs.map +1 -0
  52. package/fesm2022/taiga-ui-core-components-root.mjs +2 -2
  53. package/fesm2022/taiga-ui-core-components-root.mjs.map +1 -1
  54. package/fesm2022/taiga-ui-core-components-slider.mjs +337 -0
  55. package/fesm2022/taiga-ui-core-components-slider.mjs.map +1 -0
  56. package/fesm2022/taiga-ui-core-components-spin-button.mjs +2 -2
  57. package/fesm2022/taiga-ui-core-components-spin-button.mjs.map +1 -1
  58. package/fesm2022/taiga-ui-core-components-textfield.mjs +31 -20
  59. package/fesm2022/taiga-ui-core-components-textfield.mjs.map +1 -1
  60. package/fesm2022/taiga-ui-core-components-title.mjs +5 -3
  61. package/fesm2022/taiga-ui-core-components-title.mjs.map +1 -1
  62. package/fesm2022/taiga-ui-core-components.mjs +3 -0
  63. package/fesm2022/taiga-ui-core-components.mjs.map +1 -1
  64. package/fesm2022/taiga-ui-core-directives-appearance.mjs +5 -3
  65. package/fesm2022/taiga-ui-core-directives-appearance.mjs.map +1 -1
  66. package/fesm2022/taiga-ui-core-directives-group.mjs +5 -3
  67. package/fesm2022/taiga-ui-core-directives-group.mjs.map +1 -1
  68. package/fesm2022/taiga-ui-core-directives-icons.mjs +5 -3
  69. package/fesm2022/taiga-ui-core-directives-icons.mjs.map +1 -1
  70. package/fesm2022/taiga-ui-core-directives-items-handlers.mjs +7 -1
  71. package/fesm2022/taiga-ui-core-directives-items-handlers.mjs.map +1 -1
  72. package/fesm2022/taiga-ui-core-portals-alert.mjs +2 -2
  73. package/fesm2022/taiga-ui-core-portals-alert.mjs.map +1 -1
  74. package/fesm2022/taiga-ui-core-portals-dialog.mjs +2 -2
  75. package/fesm2022/taiga-ui-core-portals-dialog.mjs.map +1 -1
  76. package/fesm2022/taiga-ui-core-portals-dropdown.mjs +54 -12
  77. package/fesm2022/taiga-ui-core-portals-dropdown.mjs.map +1 -1
  78. package/fesm2022/taiga-ui-core-portals-hint.mjs +3 -3
  79. package/fesm2022/taiga-ui-core-portals-hint.mjs.map +1 -1
  80. package/fesm2022/taiga-ui-core-portals-modal.mjs +2 -2
  81. package/fesm2022/taiga-ui-core-portals-modal.mjs.map +1 -1
  82. package/fesm2022/taiga-ui-core-portals-popup.mjs +2 -2
  83. package/fesm2022/taiga-ui-core-portals-popup.mjs.map +1 -1
  84. package/fesm2022/taiga-ui-core-tokens.mjs +1 -1
  85. package/fesm2022/taiga-ui-core-tokens.mjs.map +1 -1
  86. package/fesm2022/taiga-ui-core-utils-miscellaneous.mjs.map +1 -1
  87. package/package.json +32 -20
  88. package/portals/dropdown/dropdown-selection.directive.d.ts +1 -0
  89. package/utils/miscellaneous/font-scaling.d.ts +2 -2
  90. package/components/textfield/textfield-icon.d.ts +0 -6
  91. package/styles/components/appearance.less +0 -51
  92. package/styles/components/button.less +0 -134
  93. package/styles/components/group.less +0 -172
  94. package/styles/components/icon.less +0 -83
  95. package/styles/components/icons.less +0 -79
  96. package/styles/components/label.less +0 -51
  97. package/styles/components/link.less +0 -68
  98. package/styles/components/notification.less +0 -184
  99. package/styles/components/textfield.less +0 -358
  100. package/styles/components/title.less +0 -80
  101. package/styles/mixins/appearance.less +0 -56
  102. package/styles/mixins/appearance.scss +0 -57
  103. package/styles/mixins/browsers.less +0 -23
  104. package/styles/mixins/browsers.scss +0 -23
  105. package/styles/mixins/date-picker.less +0 -152
  106. package/styles/mixins/mixins.less +0 -168
  107. package/styles/mixins/mixins.scss +0 -161
  108. package/styles/mixins/picker.less +0 -200
  109. package/styles/mixins/picker.scss +0 -199
  110. package/styles/mixins/slider.less +0 -67
  111. package/styles/mixins/slider.scss +0 -67
  112. package/styles/taiga-ui-fonts.less +0 -4
  113. package/styles/taiga-ui-local.less +0 -7
  114. package/styles/taiga-ui-local.scss +0 -6
  115. package/styles/taiga-ui-theme.less +0 -4
  116. package/styles/theme/appearance/accent.less +0 -14
  117. package/styles/theme/appearance/action.less +0 -38
  118. package/styles/theme/appearance/flat.less +0 -23
  119. package/styles/theme/appearance/floating.less +0 -21
  120. package/styles/theme/appearance/glass.less +0 -30
  121. package/styles/theme/appearance/outline.less +0 -78
  122. package/styles/theme/appearance/primary.less +0 -48
  123. package/styles/theme/appearance/secondary.less +0 -77
  124. package/styles/theme/appearance/status.less +0 -125
  125. package/styles/theme/appearance/table.less +0 -68
  126. package/styles/theme/appearance/textfield.less +0 -80
  127. package/styles/theme/appearance.less +0 -12
  128. package/styles/theme/palette.less +0 -161
  129. package/styles/theme/variables.less +0 -42
  130. package/styles/variables/media.less +0 -23
  131. package/styles/variables/media.scss +0 -23
@@ -1 +1 @@
1
- {"version":3,"file":"taiga-ui-core-components-notification.mjs","sources":["../../../projects/core/components/notification/notification.options.ts","../../../projects/core/components/notification/notification.directive.ts","../../../projects/core/components/notification/notification.component.ts","../../../projects/core/components/notification/notification.template.html","../../../projects/core/components/notification/notification.service.ts","../../../projects/core/components/notification/notification.ts","../../../projects/core/components/notification/taiga-ui-core-components-notification.ts"],"sourcesContent":["import {InjectionToken} from '@angular/core';\nimport {type TuiNumberHandler, type TuiStringHandler} from '@taiga-ui/cdk/types';\nimport {tuiCreateOptions} from '@taiga-ui/cdk/utils/di';\nimport {type TuiAppearanceOptions} from '@taiga-ui/core/directives/appearance';\nimport {type TuiPositionOptions} from '@taiga-ui/core/portals/alert';\nimport {type TuiSizeL, type TuiSizeS} from '@taiga-ui/core/types';\n\nexport interface TuiNotificationOptions<I = undefined>\n extends TuiAppearanceOptions, TuiPositionOptions {\n readonly icon: TuiStringHandler<string> | string;\n readonly size: TuiSizeL | TuiSizeS;\n readonly autoClose: TuiNumberHandler<string> | number;\n readonly closable: boolean;\n readonly label: string;\n readonly data: I;\n}\n\nconst ICONS: Record<string, string> = {\n info: '@tui.info',\n positive: '@tui.circle-check',\n negative: '@tui.circle-x',\n warning: '@tui.circle-alert',\n neutral: '@tui.info',\n};\n\nexport const TUI_NOTIFICATION_DEFAULT_OPTIONS: TuiNotificationOptions = {\n appearance: 'info',\n icon: (appearance) => ICONS[appearance] ?? '',\n size: 'l',\n data: undefined,\n autoClose: 3000,\n label: '',\n closable: true,\n block: 'start',\n inline: 'end',\n};\n\nexport const [TUI_NOTIFICATION_OPTIONS, tuiNotificationOptionsProvider] =\n tuiCreateOptions(TUI_NOTIFICATION_DEFAULT_OPTIONS);\n\nexport const TUI_NOTIFICATION_CONCURRENCY = new InjectionToken(\n ngDevMode ? 'TUI_NOTIFICATION_CONCURRENCY' : '',\n {factory: () => 5},\n);\n","import {\n ChangeDetectionStrategy,\n Component,\n computed,\n Directive,\n inject,\n input,\n ViewEncapsulation,\n} from '@angular/core';\nimport {type TuiStringHandler} from '@taiga-ui/cdk/types';\nimport {tuiIsString, tuiWithStyles} from '@taiga-ui/cdk/utils/miscellaneous';\nimport {tuiButtonOptionsProvider} from '@taiga-ui/core/components/button';\nimport {tuiLinkOptionsProvider} from '@taiga-ui/core/components/link';\nimport {\n tuiAppearanceOptionsProvider,\n TuiWithAppearance,\n} from '@taiga-ui/core/directives/appearance';\nimport {tuiIconStart, TuiWithIcons} from '@taiga-ui/core/directives/icons';\n\nimport {TUI_NOTIFICATION_OPTIONS} from './notification.options';\n\n@Component({\n template: '',\n styles: '@import \"@taiga-ui/core/styles/components/notification.less\";',\n encapsulation: ViewEncapsulation.None,\n changeDetection: ChangeDetectionStrategy.OnPush,\n host: {class: 'tui-notification'},\n})\nclass Styles {}\n\n@Directive({\n selector: '[tuiNotification]:not(ng-template)',\n providers: [\n tuiAppearanceOptionsProvider(TUI_NOTIFICATION_OPTIONS),\n tuiLinkOptionsProvider({appearance: ''}),\n tuiButtonOptionsProvider({appearance: 'outline-grayscale', size: 's'}),\n ],\n hostDirectives: [TuiWithIcons, TuiWithAppearance],\n host: {'[attr.data-size]': 'size()'},\n})\nexport class TuiNotificationDirective {\n private readonly options = inject(TUI_NOTIFICATION_OPTIONS);\n\n protected readonly nothing = tuiWithStyles(Styles);\n protected readonly icons = tuiIconStart(\n computed((icon = this.icon()) =>\n tuiIsString(icon) ? icon : icon(this.appearance()),\n ),\n );\n\n public readonly appearance = input(this.options.appearance);\n public readonly size = input(this.options.size);\n public readonly icon = input<TuiStringHandler<string> | string>(this.options.icon);\n}\n","import {ChangeDetectionStrategy, Component, inject} from '@angular/core';\nimport {takeUntilDestroyed} from '@angular/core/rxjs-interop';\nimport {TuiAnimated} from '@taiga-ui/cdk/directives/animated';\nimport {type TuiPortalContext} from '@taiga-ui/cdk/portals';\nimport {tuiInjectElement} from '@taiga-ui/cdk/utils/dom';\nimport {TuiButton} from '@taiga-ui/core/components/button';\nimport {TuiTitle} from '@taiga-ui/core/components/title';\nimport {TuiAlertDirective} from '@taiga-ui/core/portals/alert';\nimport {TUI_CLOSE_WORD, TUI_COMMON_ICONS} from '@taiga-ui/core/tokens';\nimport {injectContext, PolymorpheusOutlet} from '@taiga-ui/polymorpheus';\nimport {EMPTY, fromEvent, of, repeat, switchMap, takeUntil, timer} from 'rxjs';\n\nimport {TuiNotificationDirective} from './notification.directive';\nimport {type TuiNotificationOptions} from './notification.options';\n\n@Component({\n selector: 'tui-notification-alert',\n imports: [PolymorpheusOutlet, TuiButton, TuiNotificationDirective, TuiTitle],\n templateUrl: './notification.template.html',\n styleUrl: './notification.style.less',\n changeDetection: ChangeDetectionStrategy.OnPush,\n hostDirectives: [TuiAnimated, TuiAlertDirective],\n host: {role: 'alert'},\n})\nexport class TuiNotificationComponent<O, I> {\n private readonly el = tuiInjectElement();\n\n protected readonly icons = inject(TUI_COMMON_ICONS);\n protected readonly close = inject(TUI_CLOSE_WORD);\n protected readonly item =\n injectContext<TuiPortalContext<TuiNotificationOptions<I>, O>>();\n\n protected readonly sub = of(\n typeof this.item.autoClose === 'function'\n ? this.item.autoClose(this.item.appearance)\n : this.item.autoClose,\n )\n .pipe(\n switchMap((autoClose) => (autoClose ? timer(autoClose) : EMPTY)),\n takeUntil(fromEvent(this.el, 'mouseenter')),\n repeat({delay: () => fromEvent(this.el, 'mouseleave')}),\n takeUntilDestroyed(),\n )\n .subscribe(() => this.item.$implicit.complete());\n}\n","<div class=\"t-wrapper\">\n <div\n size=\"m\"\n tuiNotification\n [appearance]=\"item.appearance\"\n [class.t-closable]=\"item.closable\"\n [icon]=\"item.icon\"\n >\n <span tuiTitle>\n <ng-container *polymorpheusOutlet=\"item.label as text; context: item\">\n {{ text }}\n </ng-container>\n <span tuiSubtitle>\n <span\n *polymorpheusOutlet=\"item.content as text; context: item\"\n [innerHTML]=\"text\"\n ></span>\n </span>\n </span>\n @if (item.closable) {\n <button\n tuiIconButton\n type=\"button\"\n [iconStart]=\"icons.close\"\n (click)=\"item.$implicit.complete()\"\n >\n {{ close() }}\n </button>\n }\n </div>\n</div>\n","import {Directive, inject, Injectable, input} from '@angular/core';\nimport {tuiAsPortal, TuiPortalDirective} from '@taiga-ui/cdk/portals';\nimport {TuiAlertService} from '@taiga-ui/core/portals/alert';\n\nimport {TuiNotificationComponent} from './notification.component';\nimport {\n TUI_NOTIFICATION_CONCURRENCY,\n TUI_NOTIFICATION_OPTIONS,\n type TuiNotificationOptions,\n} from './notification.options';\n\n@Injectable({providedIn: 'root'})\nexport class TuiNotificationService extends TuiAlertService<TuiNotificationOptions<any>> {\n protected override readonly options = inject(TUI_NOTIFICATION_OPTIONS);\n protected override readonly component = TuiNotificationComponent;\n\n constructor() {\n super(inject(TUI_NOTIFICATION_CONCURRENCY));\n }\n}\n\n@Directive({\n selector: 'ng-template[tuiNotification]',\n providers: [tuiAsPortal(TuiNotificationService)],\n hostDirectives: [\n {\n directive: TuiPortalDirective,\n inputs: ['options: tuiNotificationOptions', 'open: tuiNotification'],\n outputs: ['openChange: tuiNotificationChange'],\n },\n ],\n})\nexport class TuiNotificationTemplate<T> {\n public readonly tuiNotificationOptions = input<Partial<TuiNotificationOptions<T>>>(\n {},\n );\n}\n","import {TuiNotificationDirective} from './notification.directive';\nimport {TuiNotificationTemplate} from './notification.service';\n\nexport const TuiNotification = [\n TuiNotificationDirective,\n TuiNotificationTemplate,\n] as const;\n","/**\n * Generated bundle index. Do not edit.\n */\n\nexport * from './index';\n"],"names":["i1","i2"],"mappings":"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"}
1
+ {"version":3,"file":"taiga-ui-core-components-notification.mjs","sources":["../../../projects/core/components/notification/notification.options.ts","../../../projects/core/components/notification/notification.directive.ts","../../../projects/core/components/notification/notification.component.ts","../../../projects/core/components/notification/notification.template.html","../../../projects/core/components/notification/notification.service.ts","../../../projects/core/components/notification/notification.ts","../../../projects/core/components/notification/taiga-ui-core-components-notification.ts"],"sourcesContent":["import {InjectionToken} from '@angular/core';\nimport {type TuiNumberHandler, type TuiStringHandler} from '@taiga-ui/cdk/types';\nimport {tuiCreateOptions} from '@taiga-ui/cdk/utils/di';\nimport {type TuiAppearanceOptions} from '@taiga-ui/core/directives/appearance';\nimport {type TuiPositionOptions} from '@taiga-ui/core/portals/alert';\nimport {type TuiSizeL, type TuiSizeS} from '@taiga-ui/core/types';\n\nexport interface TuiNotificationOptions<I = undefined>\n extends TuiAppearanceOptions, TuiPositionOptions {\n readonly icon: TuiStringHandler<string> | string;\n readonly size: TuiSizeL | TuiSizeS;\n readonly autoClose: TuiNumberHandler<string> | number;\n readonly closable: boolean;\n readonly label: string;\n readonly data: I;\n}\n\nconst ICONS: Record<string, string> = {\n info: '@tui.info',\n positive: '@tui.circle-check',\n negative: '@tui.circle-x',\n warning: '@tui.circle-alert',\n neutral: '@tui.info',\n};\n\nexport const TUI_NOTIFICATION_DEFAULT_OPTIONS: TuiNotificationOptions = {\n appearance: 'info',\n icon: (appearance) => ICONS[appearance] ?? '',\n size: 'l',\n data: undefined,\n autoClose: 3000,\n label: '',\n closable: true,\n block: 'start',\n inline: 'end',\n};\n\nexport const [TUI_NOTIFICATION_OPTIONS, tuiNotificationOptionsProvider] =\n tuiCreateOptions(TUI_NOTIFICATION_DEFAULT_OPTIONS);\n\nexport const TUI_NOTIFICATION_CONCURRENCY = new InjectionToken(\n ngDevMode ? 'TUI_NOTIFICATION_CONCURRENCY' : '',\n {factory: () => 5},\n);\n","import {\n ChangeDetectionStrategy,\n Component,\n computed,\n Directive,\n inject,\n input,\n ViewEncapsulation,\n} from '@angular/core';\nimport {TUI_VERSION} from '@taiga-ui/cdk/constants';\nimport {type TuiStringHandler} from '@taiga-ui/cdk/types';\nimport {tuiIsString, tuiWithStyles} from '@taiga-ui/cdk/utils/miscellaneous';\nimport {tuiButtonOptionsProvider} from '@taiga-ui/core/components/button';\nimport {tuiLinkOptionsProvider} from '@taiga-ui/core/components/link';\nimport {\n tuiAppearanceOptionsProvider,\n TuiWithAppearance,\n} from '@taiga-ui/core/directives/appearance';\nimport {tuiIconStart, TuiWithIcons} from '@taiga-ui/core/directives/icons';\n\nimport {TUI_NOTIFICATION_OPTIONS} from './notification.options';\n\n@Component({\n template: '',\n styles: `\n [data-tui-version='${TUI_VERSION}'] {\n @import '@taiga-ui/styles/components/notification.less';\n }\n `,\n encapsulation: ViewEncapsulation.None,\n changeDetection: ChangeDetectionStrategy.OnPush,\n host: {class: 'tui-notification'},\n})\nclass Styles {}\n\n@Directive({\n selector: '[tuiNotification]:not(ng-template)',\n providers: [\n tuiAppearanceOptionsProvider(TUI_NOTIFICATION_OPTIONS),\n tuiLinkOptionsProvider({appearance: ''}),\n tuiButtonOptionsProvider({appearance: 'outline-grayscale', size: 's'}),\n ],\n hostDirectives: [TuiWithIcons, TuiWithAppearance],\n host: {'[attr.data-size]': 'size()'},\n})\nexport class TuiNotificationDirective {\n private readonly options = inject(TUI_NOTIFICATION_OPTIONS);\n\n protected readonly nothing = tuiWithStyles(Styles);\n protected readonly icons = tuiIconStart(\n computed((icon = this.icon()) =>\n tuiIsString(icon) ? icon : icon(this.appearance()),\n ),\n );\n\n public readonly appearance = input(this.options.appearance);\n public readonly size = input(this.options.size);\n public readonly icon = input<TuiStringHandler<string> | string>(this.options.icon);\n}\n","import {ChangeDetectionStrategy, Component, inject} from '@angular/core';\nimport {takeUntilDestroyed} from '@angular/core/rxjs-interop';\nimport {TuiAnimated} from '@taiga-ui/cdk/directives/animated';\nimport {type TuiPortalContext} from '@taiga-ui/cdk/portals';\nimport {tuiInjectElement} from '@taiga-ui/cdk/utils/dom';\nimport {TuiButton} from '@taiga-ui/core/components/button';\nimport {TuiTitle} from '@taiga-ui/core/components/title';\nimport {TuiAlertDirective} from '@taiga-ui/core/portals/alert';\nimport {TUI_CLOSE_WORD, TUI_COMMON_ICONS} from '@taiga-ui/core/tokens';\nimport {injectContext, PolymorpheusOutlet} from '@taiga-ui/polymorpheus';\nimport {EMPTY, fromEvent, of, repeat, switchMap, takeUntil, timer} from 'rxjs';\n\nimport {TuiNotificationDirective} from './notification.directive';\nimport {type TuiNotificationOptions} from './notification.options';\n\n@Component({\n selector: 'tui-notification-alert',\n imports: [PolymorpheusOutlet, TuiButton, TuiNotificationDirective, TuiTitle],\n templateUrl: './notification.template.html',\n styleUrl: './notification.style.less',\n changeDetection: ChangeDetectionStrategy.OnPush,\n hostDirectives: [TuiAnimated, TuiAlertDirective],\n host: {role: 'alert'},\n})\nexport class TuiNotificationComponent<O, I> {\n private readonly el = tuiInjectElement();\n\n protected readonly icons = inject(TUI_COMMON_ICONS);\n protected readonly close = inject(TUI_CLOSE_WORD);\n protected readonly item =\n injectContext<TuiPortalContext<TuiNotificationOptions<I>, O>>();\n\n protected readonly sub = of(\n typeof this.item.autoClose === 'function'\n ? this.item.autoClose(this.item.appearance)\n : this.item.autoClose,\n )\n .pipe(\n switchMap((autoClose) => (autoClose ? timer(autoClose) : EMPTY)),\n takeUntil(fromEvent(this.el, 'mouseenter')),\n repeat({delay: () => fromEvent(this.el, 'mouseleave')}),\n takeUntilDestroyed(),\n )\n .subscribe(() => this.item.$implicit.complete());\n}\n","<div class=\"t-wrapper\">\n <div\n size=\"m\"\n tuiNotification\n [appearance]=\"item.appearance\"\n [class.t-closable]=\"item.closable\"\n [icon]=\"item.icon\"\n >\n <span tuiTitle>\n <ng-container *polymorpheusOutlet=\"item.label as text; context: item\">\n {{ text }}\n </ng-container>\n <span tuiSubtitle>\n <span\n *polymorpheusOutlet=\"item.content as text; context: item\"\n [innerHTML]=\"text\"\n ></span>\n </span>\n </span>\n @if (item.closable) {\n <button\n tuiIconButton\n type=\"button\"\n [iconStart]=\"icons.close\"\n (click)=\"item.$implicit.complete()\"\n >\n {{ close() }}\n </button>\n }\n </div>\n</div>\n","import {Directive, inject, Injectable, input} from '@angular/core';\nimport {tuiAsPortal, TuiPortalDirective} from '@taiga-ui/cdk/portals';\nimport {TuiAlertService} from '@taiga-ui/core/portals/alert';\n\nimport {TuiNotificationComponent} from './notification.component';\nimport {\n TUI_NOTIFICATION_CONCURRENCY,\n TUI_NOTIFICATION_OPTIONS,\n type TuiNotificationOptions,\n} from './notification.options';\n\n@Injectable({providedIn: 'root'})\nexport class TuiNotificationService extends TuiAlertService<TuiNotificationOptions<any>> {\n protected override readonly options = inject(TUI_NOTIFICATION_OPTIONS);\n protected override readonly component = TuiNotificationComponent;\n\n constructor() {\n super(inject(TUI_NOTIFICATION_CONCURRENCY));\n }\n}\n\n@Directive({\n selector: 'ng-template[tuiNotification]',\n providers: [tuiAsPortal(TuiNotificationService)],\n hostDirectives: [\n {\n directive: TuiPortalDirective,\n inputs: ['options: tuiNotificationOptions', 'open: tuiNotification'],\n outputs: ['openChange: tuiNotificationChange'],\n },\n ],\n})\nexport class TuiNotificationTemplate<T> {\n public readonly tuiNotificationOptions = input<Partial<TuiNotificationOptions<T>>>(\n {},\n );\n}\n","import {TuiNotificationDirective} from './notification.directive';\nimport {TuiNotificationTemplate} from './notification.service';\n\nexport const TuiNotification = [\n TuiNotificationDirective,\n TuiNotificationTemplate,\n] as const;\n","/**\n * Generated bundle index. Do not edit.\n */\n\nexport * from './index';\n"],"names":["i1","i2"],"mappings":"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"}
@@ -0,0 +1,91 @@
1
+ import * as i0 from '@angular/core';
2
+ import { inject, DestroyRef, input, ChangeDetectionStrategy, ViewEncapsulation, Component, Directive } from '@angular/core';
3
+ import { takeUntilDestroyed } from '@angular/core/rxjs-interop';
4
+ import { NgControl, NgModel, RadioControlValueAccessor } from '@angular/forms';
5
+ import { TUI_DEFAULT_IDENTITY_MATCHER } from '@taiga-ui/cdk/constants';
6
+ import * as i2 from '@taiga-ui/cdk/directives/native-validator';
7
+ import { TuiNativeValidator } from '@taiga-ui/cdk/directives/native-validator';
8
+ import { tuiControlValue } from '@taiga-ui/cdk/observables';
9
+ import { tuiInjectElement } from '@taiga-ui/cdk/utils/dom';
10
+ import * as i1 from '@taiga-ui/core/directives/appearance';
11
+ import { tuiAppearance, TuiAppearance } from '@taiga-ui/core/directives/appearance';
12
+ import { distinctUntilChanged } from 'rxjs';
13
+ import { tuiCreateOptions } from '@taiga-ui/cdk/utils/di';
14
+
15
+ const [TUI_RADIO_OPTIONS, tuiRadioOptionsProvider] = tuiCreateOptions({
16
+ size: 'm',
17
+ appearance: ({ checked }) => (checked ? 'primary' : 'outline-grayscale'),
18
+ });
19
+
20
+ class TuiRadioComponent {
21
+ constructor() {
22
+ this.destroyRef = inject(DestroyRef);
23
+ this.el = tuiInjectElement();
24
+ this.options = inject(TUI_RADIO_OPTIONS);
25
+ this.appearance = tuiAppearance(this.options.appearance(this.el));
26
+ this.control = inject(NgControl, { self: true, optional: true });
27
+ this.size = input(this.options.size);
28
+ }
29
+ ngOnInit() {
30
+ tuiControlValue(this.control)
31
+ .pipe(distinctUntilChanged(), takeUntilDestroyed(this.destroyRef))
32
+ .subscribe((value) => {
33
+ // https://github.com/angular/angular/issues/14988
34
+ const fix = this.control instanceof NgModel && value == null
35
+ ? this.control.model
36
+ : value;
37
+ this.el.indeterminate = fix == null && this.el.matches('[tuiCheckbox]');
38
+ this.ngDoCheck();
39
+ });
40
+ }
41
+ ngDoCheck() {
42
+ this.appearance.set(this.options.appearance(this.el));
43
+ }
44
+ static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "19.2.18", ngImport: i0, type: TuiRadioComponent, deps: [], target: i0.ɵɵFactoryTarget.Component }); }
45
+ static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.1.0", version: "19.2.18", type: TuiRadioComponent, isStandalone: true, selector: "input[type=\"radio\"][tuiRadio]", inputs: { size: { classPropertyName: "size", publicName: "size", isSignal: true, isRequired: false, transformFunction: null } }, host: { properties: { "disabled": "!control || control.disabled", "attr.data-size": "size()", "class._readonly": "!control" } }, hostDirectives: [{ directive: i1.TuiAppearance, inputs: ["tuiAppearanceState", "tuiAppearanceState", "tuiAppearanceFocus", "tuiAppearanceFocus", "tuiAppearanceMode", "tuiAppearanceMode"] }, { directive: i2.TuiNativeValidator }], ngImport: i0, template: '', isInline: true, styles: ["[tuiRadio]:where(*[data-tui-version=\"5.0.0-canary.dc2eca0\"]){--t-size: 1.5rem;transition-property:background,box-shadow;transition-duration:var(--tui-duration, .3s);transition-timing-function:ease-in-out;inline-size:var(--t-size);block-size:var(--t-size);cursor:pointer;margin:0;flex-shrink:0;border-radius:100%;color:var(--tui-text-primary-on-accent-1)}[tuiRadio]:where(*[data-tui-version=\"5.0.0-canary.dc2eca0\"]):disabled._readonly._readonly{opacity:1}[tuiRadio]:where(*[data-tui-version=\"5.0.0-canary.dc2eca0\"]):before{position:absolute;inset:0;content:\"\";margin:auto;border-radius:100%;background:currentColor;transform:scale(0);transition-property:transform}[tuiRadio]:where(*[data-tui-version=\"5.0.0-canary.dc2eca0\"]):checked:before{transform:scale(.5)}[tuiRadio]:where(*[data-tui-version=\"5.0.0-canary.dc2eca0\"])[data-size=s]{--t-size: 1rem}[tuiRadio]:where(*[data-tui-version=\"5.0.0-canary.dc2eca0\"]):invalid:not([data-mode]),[tuiRadio]:where(*[data-tui-version=\"5.0.0-canary.dc2eca0\"])[data-mode~=invalid]{color:#fff}\n"], changeDetection: i0.ChangeDetectionStrategy.OnPush, encapsulation: i0.ViewEncapsulation.None }); }
46
+ }
47
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "19.2.18", ngImport: i0, type: TuiRadioComponent, decorators: [{
48
+ type: Component,
49
+ args: [{ selector: 'input[type="radio"][tuiRadio]', template: '', encapsulation: ViewEncapsulation.None, changeDetection: ChangeDetectionStrategy.OnPush, hostDirectives: [
50
+ {
51
+ directive: TuiAppearance,
52
+ inputs: ['tuiAppearanceState', 'tuiAppearanceFocus', 'tuiAppearanceMode'],
53
+ },
54
+ TuiNativeValidator,
55
+ ], host: {
56
+ '[disabled]': '!control || control.disabled',
57
+ '[attr.data-size]': 'size()',
58
+ '[class._readonly]': '!control',
59
+ }, styles: ["[tuiRadio]:where(*[data-tui-version=\"5.0.0-canary.dc2eca0\"]){--t-size: 1.5rem;transition-property:background,box-shadow;transition-duration:var(--tui-duration, .3s);transition-timing-function:ease-in-out;inline-size:var(--t-size);block-size:var(--t-size);cursor:pointer;margin:0;flex-shrink:0;border-radius:100%;color:var(--tui-text-primary-on-accent-1)}[tuiRadio]:where(*[data-tui-version=\"5.0.0-canary.dc2eca0\"]):disabled._readonly._readonly{opacity:1}[tuiRadio]:where(*[data-tui-version=\"5.0.0-canary.dc2eca0\"]):before{position:absolute;inset:0;content:\"\";margin:auto;border-radius:100%;background:currentColor;transform:scale(0);transition-property:transform}[tuiRadio]:where(*[data-tui-version=\"5.0.0-canary.dc2eca0\"]):checked:before{transform:scale(.5)}[tuiRadio]:where(*[data-tui-version=\"5.0.0-canary.dc2eca0\"])[data-size=s]{--t-size: 1rem}[tuiRadio]:where(*[data-tui-version=\"5.0.0-canary.dc2eca0\"]):invalid:not([data-mode]),[tuiRadio]:where(*[data-tui-version=\"5.0.0-canary.dc2eca0\"])[data-mode~=invalid]{color:#fff}\n"] }]
60
+ }] });
61
+
62
+ class TuiRadioDirective {
63
+ constructor() {
64
+ this.identityMatcher = input(TUI_DEFAULT_IDENTITY_MATCHER);
65
+ const accessor = inject(RadioControlValueAccessor);
66
+ const writeValue = accessor.writeValue.bind(accessor);
67
+ accessor.writeValue = (value) => {
68
+ if (this.identityMatcher()(value, accessor.value)) {
69
+ writeValue(accessor.value);
70
+ }
71
+ else {
72
+ writeValue(value);
73
+ }
74
+ };
75
+ }
76
+ static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "19.2.18", ngImport: i0, type: TuiRadioDirective, deps: [], target: i0.ɵɵFactoryTarget.Directive }); }
77
+ static { this.ɵdir = i0.ɵɵngDeclareDirective({ minVersion: "17.1.0", version: "19.2.18", type: TuiRadioDirective, isStandalone: true, selector: "input[type=\"radio\"][tuiRadio][identityMatcher]", inputs: { identityMatcher: { classPropertyName: "identityMatcher", publicName: "identityMatcher", isSignal: true, isRequired: false, transformFunction: null } }, ngImport: i0 }); }
78
+ }
79
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "19.2.18", ngImport: i0, type: TuiRadioDirective, decorators: [{
80
+ type: Directive,
81
+ args: [{ selector: 'input[type="radio"][tuiRadio][identityMatcher]' }]
82
+ }], ctorParameters: () => [] });
83
+
84
+ const TuiRadio = [TuiRadioComponent, TuiRadioDirective];
85
+
86
+ /**
87
+ * Generated bundle index. Do not edit.
88
+ */
89
+
90
+ export { TUI_RADIO_OPTIONS, TuiRadio, TuiRadioComponent, TuiRadioDirective, tuiRadioOptionsProvider };
91
+ //# sourceMappingURL=taiga-ui-core-components-radio.mjs.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"taiga-ui-core-components-radio.mjs","sources":["../../../projects/core/components/radio/radio.options.ts","../../../projects/core/components/radio/radio.component.ts","../../../projects/core/components/radio/radio.directive.ts","../../../projects/core/components/radio/radio.ts","../../../projects/core/components/radio/taiga-ui-core-components-radio.ts"],"sourcesContent":["import {type TuiStringHandler} from '@taiga-ui/cdk/types';\nimport {tuiCreateOptions} from '@taiga-ui/cdk/utils/di';\nimport {type TuiSizeS} from '@taiga-ui/core/types';\n\nexport interface TuiRadioOptions {\n readonly appearance: TuiStringHandler<HTMLInputElement>;\n readonly size: TuiSizeS;\n}\n\nexport const [TUI_RADIO_OPTIONS, tuiRadioOptionsProvider] =\n tuiCreateOptions<TuiRadioOptions>({\n size: 'm',\n appearance: ({checked}) => (checked ? 'primary' : 'outline-grayscale'),\n });\n","import {\n ChangeDetectionStrategy,\n Component,\n DestroyRef,\n type DoCheck,\n inject,\n input,\n type OnInit,\n ViewEncapsulation,\n} from '@angular/core';\nimport {takeUntilDestroyed} from '@angular/core/rxjs-interop';\nimport {NgControl, NgModel} from '@angular/forms';\nimport {TUI_VERSION} from '@taiga-ui/cdk/constants';\nimport {TuiNativeValidator} from '@taiga-ui/cdk/directives/native-validator';\nimport {tuiControlValue} from '@taiga-ui/cdk/observables';\nimport {tuiInjectElement} from '@taiga-ui/cdk/utils/dom';\nimport {TuiAppearance, tuiAppearance} from '@taiga-ui/core/directives/appearance';\nimport {distinctUntilChanged} from 'rxjs';\n\nimport {TUI_RADIO_OPTIONS, type TuiRadioOptions} from './radio.options';\n\n@Component({\n selector: 'input[type=\"radio\"][tuiRadio]',\n template: '',\n styles: `\n [data-tui-version='${TUI_VERSION}'] {\n @import '@taiga-ui/styles/components/radio.less';\n }\n `,\n encapsulation: ViewEncapsulation.None,\n changeDetection: ChangeDetectionStrategy.OnPush,\n hostDirectives: [\n {\n directive: TuiAppearance,\n inputs: ['tuiAppearanceState', 'tuiAppearanceFocus', 'tuiAppearanceMode'],\n },\n TuiNativeValidator,\n ],\n host: {\n '[disabled]': '!control || control.disabled',\n '[attr.data-size]': 'size()',\n '[class._readonly]': '!control',\n },\n})\nexport class TuiRadioComponent<T extends TuiRadioOptions> implements DoCheck, OnInit {\n private readonly destroyRef = inject(DestroyRef);\n\n protected readonly el = tuiInjectElement<HTMLInputElement>();\n protected readonly options = inject<T>(TUI_RADIO_OPTIONS);\n protected readonly appearance = tuiAppearance(this.options.appearance(this.el));\n protected readonly control = inject(NgControl, {self: true, optional: true});\n\n public readonly size = input(this.options.size);\n\n public ngOnInit(): void {\n tuiControlValue(this.control)\n .pipe(distinctUntilChanged(), takeUntilDestroyed(this.destroyRef))\n .subscribe((value) => {\n // https://github.com/angular/angular/issues/14988\n const fix =\n this.control instanceof NgModel && value == null\n ? this.control.model\n : value;\n\n this.el.indeterminate = fix == null && this.el.matches('[tuiCheckbox]');\n this.ngDoCheck();\n });\n }\n\n public ngDoCheck(): void {\n this.appearance.set(this.options.appearance(this.el));\n }\n}\n","import {Directive, inject, input} from '@angular/core';\nimport {RadioControlValueAccessor} from '@angular/forms';\nimport {TUI_DEFAULT_IDENTITY_MATCHER} from '@taiga-ui/cdk/constants';\nimport {type TuiIdentityMatcher} from '@taiga-ui/cdk/types';\n\n@Directive({selector: 'input[type=\"radio\"][tuiRadio][identityMatcher]'})\nexport class TuiRadioDirective<T> {\n public readonly identityMatcher = input<TuiIdentityMatcher<T>>(\n TUI_DEFAULT_IDENTITY_MATCHER,\n );\n\n constructor() {\n const accessor = inject(RadioControlValueAccessor);\n const writeValue = accessor.writeValue.bind(accessor);\n\n accessor.writeValue = (value: T) => {\n if (this.identityMatcher()(value, accessor.value)) {\n writeValue(accessor.value);\n } else {\n writeValue(value);\n }\n };\n }\n}\n","import {TuiRadioComponent} from './radio.component';\nimport {TuiRadioDirective} from './radio.directive';\n\nexport const TuiRadio = [TuiRadioComponent, TuiRadioDirective] as const;\n","/**\n * Generated bundle index. Do not edit.\n */\n\nexport * from './index';\n"],"names":[],"mappings":"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"}
@@ -33,7 +33,7 @@ class TuiRoot {
33
33
  return this.doc.fullscreenElement === this.el || !this.child;
34
34
  }
35
35
  static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "19.2.18", ngImport: i0, type: TuiRoot, deps: [], target: i0.ɵɵFactoryTarget.Component }); }
36
- static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "19.2.18", type: TuiRoot, isStandalone: true, selector: "tui-root", host: { attributes: { "data-tui-version": "5.0.0-canary.cf66fed" }, listeners: { "touchstart.passive.zoneless": "0", "document:fullscreenchange": "top.set(parent)" }, properties: { "style.--tui-duration.ms": "duration", "style.--tui-scroll-behavior": "reducedMotion ? \"auto\" : \"smooth\"", "class._mobile": "breakpoint() === \"mobile\"" } }, hostDirectives: [{ directive: i1.TuiPlatform }, { directive: i2.TuiVisualViewport }, { directive: i3.TuiFontSize }], ngImport: i0, template: "<div class=\"t-root-content\">\n <ng-content />\n</div>\n@if (top()) {\n @if (scrollbars) {\n <tui-scroll-controls class=\"t-root-scrollbar\" />\n }\n <tui-popups>\n <ng-content select=\"tuiOverContent\" />\n </tui-popups>\n}\n", styles: ["@keyframes tuiPresent{to{opacity:.99999}}@keyframes tuiFade{0%{opacity:0}}@keyframes tuiSlide{0%{transform:var(--tui-from, translateY(100%))}}@keyframes tuiScale{0%{transform:scale(var(--tui-scale, 0))}}@keyframes tuiCollapse{0%{grid-template-rows:0fr}to{grid-template-rows:1fr}}.tui-enter,.tui-leave{animation-duration:var(--tui-duration);animation-timing-function:ease-in-out;pointer-events:none}.tui-leave{animation-direction:reverse}\n", ".tui-zero-scrollbar{scrollbar-width:none;-ms-overflow-style:none}.tui-zero-scrollbar::-webkit-scrollbar,.tui-zero-scrollbar::-webkit-scrollbar-thumb{display:none}body,input{margin:0}tui-root{position:relative;display:block;font:var(--tui-font-body-s);color:var(--tui-text-primary);flex:1;border-image:conic-gradient(var(--tui-background-base) 0 0) fill 0/0/0 0 100vh 0;-webkit-tap-highlight-color:transparent}:root{--tui-inline-start: left;--tui-inline-end: right;--tui-inline: 1}[dir=rtl]{--tui-inline-start: right;--tui-inline-end: left;--tui-inline: -1}tui-root>.t-root-scrollbar{position:fixed;z-index:0;inset:0}.t-root-content{position:relative;top:var(--t-root-top);block-size:100%;isolation:isolate}.t-root-content>*{--t-root-top: 0}[tuiDropdownButton][tuiDropdownButton]{display:none}\n"], dependencies: [{ kind: "component", type: TuiPopups, selector: "tui-popups" }, { kind: "component", type: TuiScrollControls, selector: "tui-scroll-controls" }], changeDetection: i0.ChangeDetectionStrategy.Default, encapsulation: i0.ViewEncapsulation.None }); }
36
+ static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "19.2.18", type: TuiRoot, isStandalone: true, selector: "tui-root", host: { attributes: { "data-tui-version": "5.0.0-canary.dc2eca0" }, listeners: { "touchstart.passive.zoneless": "0", "document:fullscreenchange": "top.set(parent)" }, properties: { "style.--tui-duration.ms": "duration", "style.--tui-scroll-behavior": "reducedMotion ? \"auto\" : \"smooth\"", "class._mobile": "breakpoint() === \"mobile\"" } }, hostDirectives: [{ directive: i1.TuiPlatform }, { directive: i2.TuiVisualViewport }, { directive: i3.TuiFontSize }], ngImport: i0, template: "<div class=\"t-root-content\">\n <ng-content />\n</div>\n@if (top()) {\n @if (scrollbars) {\n <tui-scroll-controls class=\"t-root-scrollbar\" />\n }\n <tui-popups>\n <ng-content select=\"tuiOverContent\" />\n </tui-popups>\n}\n", styles: ["@keyframes tuiPresent{to{opacity:.99999}}@keyframes tuiFade{0%{opacity:0}}@keyframes tuiSlide{0%{transform:var(--tui-from, translateY(100%))}}@keyframes tuiScale{0%{transform:scale(var(--tui-scale, 0))}}@keyframes tuiCollapse{0%{grid-template-rows:0fr}to{grid-template-rows:1fr}}.tui-enter,.tui-leave{animation-duration:var(--tui-duration);animation-timing-function:ease-in-out;pointer-events:none}.tui-leave{animation-direction:reverse}\n", ".tui-zero-scrollbar{scrollbar-width:none;-ms-overflow-style:none}.tui-zero-scrollbar::-webkit-scrollbar,.tui-zero-scrollbar::-webkit-scrollbar-thumb{display:none}body,input{margin:0}tui-root{position:relative;display:block;font:var(--tui-typography-body-s);color:var(--tui-text-primary);flex:1;border-image:conic-gradient(var(--tui-background-base) 0 0) fill 0/0/0 0 100vh 0;-webkit-tap-highlight-color:transparent}tui-root>.t-root-scrollbar{position:fixed;z-index:0;inset:0}.t-root-content{position:relative;top:var(--t-root-top);block-size:100%;isolation:isolate}.t-root-content>*{--t-root-top: 0}[tuiDropdownButton][tuiDropdownButton]{display:none}\n"], dependencies: [{ kind: "component", type: TuiPopups, selector: "tui-popups" }, { kind: "component", type: TuiScrollControls, selector: "tui-scroll-controls" }], changeDetection: i0.ChangeDetectionStrategy.Default, encapsulation: i0.ViewEncapsulation.None }); }
37
37
  }
38
38
  i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "19.2.18", ngImport: i0, type: TuiRoot, decorators: [{
39
39
  type: Component,
@@ -45,7 +45,7 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "19.2.18", ngImpo
45
45
  // Required for the :active state to work in Safari. https://stackoverflow.com/a/33681490
46
46
  '(touchstart.passive.zoneless)': '0',
47
47
  '(document:fullscreenchange)': 'top.set(parent)',
48
- }, template: "<div class=\"t-root-content\">\n <ng-content />\n</div>\n@if (top()) {\n @if (scrollbars) {\n <tui-scroll-controls class=\"t-root-scrollbar\" />\n }\n <tui-popups>\n <ng-content select=\"tuiOverContent\" />\n </tui-popups>\n}\n", styles: ["@keyframes tuiPresent{to{opacity:.99999}}@keyframes tuiFade{0%{opacity:0}}@keyframes tuiSlide{0%{transform:var(--tui-from, translateY(100%))}}@keyframes tuiScale{0%{transform:scale(var(--tui-scale, 0))}}@keyframes tuiCollapse{0%{grid-template-rows:0fr}to{grid-template-rows:1fr}}.tui-enter,.tui-leave{animation-duration:var(--tui-duration);animation-timing-function:ease-in-out;pointer-events:none}.tui-leave{animation-direction:reverse}\n", ".tui-zero-scrollbar{scrollbar-width:none;-ms-overflow-style:none}.tui-zero-scrollbar::-webkit-scrollbar,.tui-zero-scrollbar::-webkit-scrollbar-thumb{display:none}body,input{margin:0}tui-root{position:relative;display:block;font:var(--tui-font-body-s);color:var(--tui-text-primary);flex:1;border-image:conic-gradient(var(--tui-background-base) 0 0) fill 0/0/0 0 100vh 0;-webkit-tap-highlight-color:transparent}:root{--tui-inline-start: left;--tui-inline-end: right;--tui-inline: 1}[dir=rtl]{--tui-inline-start: right;--tui-inline-end: left;--tui-inline: -1}tui-root>.t-root-scrollbar{position:fixed;z-index:0;inset:0}.t-root-content{position:relative;top:var(--t-root-top);block-size:100%;isolation:isolate}.t-root-content>*{--t-root-top: 0}[tuiDropdownButton][tuiDropdownButton]{display:none}\n"] }]
48
+ }, template: "<div class=\"t-root-content\">\n <ng-content />\n</div>\n@if (top()) {\n @if (scrollbars) {\n <tui-scroll-controls class=\"t-root-scrollbar\" />\n }\n <tui-popups>\n <ng-content select=\"tuiOverContent\" />\n </tui-popups>\n}\n", styles: ["@keyframes tuiPresent{to{opacity:.99999}}@keyframes tuiFade{0%{opacity:0}}@keyframes tuiSlide{0%{transform:var(--tui-from, translateY(100%))}}@keyframes tuiScale{0%{transform:scale(var(--tui-scale, 0))}}@keyframes tuiCollapse{0%{grid-template-rows:0fr}to{grid-template-rows:1fr}}.tui-enter,.tui-leave{animation-duration:var(--tui-duration);animation-timing-function:ease-in-out;pointer-events:none}.tui-leave{animation-direction:reverse}\n", ".tui-zero-scrollbar{scrollbar-width:none;-ms-overflow-style:none}.tui-zero-scrollbar::-webkit-scrollbar,.tui-zero-scrollbar::-webkit-scrollbar-thumb{display:none}body,input{margin:0}tui-root{position:relative;display:block;font:var(--tui-typography-body-s);color:var(--tui-text-primary);flex:1;border-image:conic-gradient(var(--tui-background-base) 0 0) fill 0/0/0 0 100vh 0;-webkit-tap-highlight-color:transparent}tui-root>.t-root-scrollbar{position:fixed;z-index:0;inset:0}.t-root-content{position:relative;top:var(--t-root-top);block-size:100%;isolation:isolate}.t-root-content>*{--t-root-top: 0}[tuiDropdownButton][tuiDropdownButton]{display:none}\n"] }]
49
49
  }] });
50
50
 
51
51
  /**
@@ -1 +1 @@
1
- {"version":3,"file":"taiga-ui-core-components-root.mjs","sources":["../../../projects/core/components/root/root.component.ts","../../../projects/core/components/root/root.template.html","../../../projects/core/components/root/taiga-ui-core-components-root.ts"],"sourcesContent":["import {DOCUMENT} from '@angular/common';\nimport {\n ChangeDetectionStrategy,\n Component,\n inject,\n signal,\n ViewEncapsulation,\n} from '@angular/core';\nimport {WA_IS_MOBILE} from '@ng-web-apis/platform';\nimport {TUI_VERSION} from '@taiga-ui/cdk/constants';\nimport {TuiFontSize} from '@taiga-ui/cdk/directives/font-size';\nimport {TuiPlatform} from '@taiga-ui/cdk/directives/platform';\nimport {TuiVisualViewport} from '@taiga-ui/cdk/directives/visual-viewport';\nimport {tuiInjectElement} from '@taiga-ui/cdk/utils/dom';\nimport {\n TUI_SCROLLBAR_OPTIONS,\n TuiScrollControls,\n} from '@taiga-ui/core/components/scrollbar';\nimport {TuiPopups} from '@taiga-ui/core/portals/popup';\nimport {\n TUI_ANIMATIONS_SPEED,\n TUI_BREAKPOINT,\n TUI_REDUCED_MOTION,\n} from '@taiga-ui/core/tokens';\nimport {TUI_OPTIONS, tuiGetDuration} from '@taiga-ui/core/utils/miscellaneous';\n\n@Component({\n selector: 'tui-root',\n imports: [TuiPopups, TuiScrollControls],\n templateUrl: './root.template.html',\n styleUrls: ['./animations.less', './root.style.less'],\n encapsulation: ViewEncapsulation.None,\n // eslint-disable-next-line @angular-eslint/prefer-on-push-component-change-detection\n changeDetection: ChangeDetectionStrategy.Default,\n hostDirectives: [TuiPlatform, TuiVisualViewport, TuiFontSize],\n host: {\n 'data-tui-version': TUI_VERSION,\n '[style.--tui-duration.ms]': 'duration',\n '[style.--tui-scroll-behavior]': 'reducedMotion ? \"auto\" : \"smooth\"',\n '[class._mobile]': 'breakpoint() === \"mobile\"',\n // Required for the :active state to work in Safari. https://stackoverflow.com/a/33681490\n '(touchstart.passive.zoneless)': '0',\n '(document:fullscreenchange)': 'top.set(parent)',\n },\n})\nexport class TuiRoot {\n private readonly doc = inject(DOCUMENT);\n private readonly el = tuiInjectElement();\n private readonly child = !!inject(TuiRoot, {optional: true, skipSelf: true});\n\n protected readonly reducedMotion = inject(TUI_REDUCED_MOTION);\n protected readonly duration = tuiGetDuration(inject(TUI_ANIMATIONS_SPEED));\n protected readonly top = signal(this.parent);\n protected readonly breakpoint = inject(TUI_BREAKPOINT);\n protected readonly scrollbars =\n !inject(WA_IS_MOBILE) &&\n !this.child &&\n inject(TUI_SCROLLBAR_OPTIONS).mode !== 'native' &&\n inject(TUI_OPTIONS).scrollbars !== 'native';\n\n protected get parent(): boolean {\n return this.doc.fullscreenElement === this.el || !this.child;\n }\n}\n","<div class=\"t-root-content\">\n <ng-content />\n</div>\n@if (top()) {\n @if (scrollbars) {\n <tui-scroll-controls class=\"t-root-scrollbar\" />\n }\n <tui-popups>\n <ng-content select=\"tuiOverContent\" />\n </tui-popups>\n}\n","/**\n * Generated bundle index. Do not edit.\n */\n\nexport * from './index';\n"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"taiga-ui-core-components-root.mjs","sources":["../../../projects/core/components/root/root.component.ts","../../../projects/core/components/root/root.template.html","../../../projects/core/components/root/taiga-ui-core-components-root.ts"],"sourcesContent":["import {DOCUMENT} from '@angular/common';\nimport {\n ChangeDetectionStrategy,\n Component,\n inject,\n signal,\n ViewEncapsulation,\n} from '@angular/core';\nimport {WA_IS_MOBILE} from '@ng-web-apis/platform';\nimport {TUI_VERSION} from '@taiga-ui/cdk/constants';\nimport {TuiFontSize} from '@taiga-ui/cdk/directives/font-size';\nimport {TuiPlatform} from '@taiga-ui/cdk/directives/platform';\nimport {TuiVisualViewport} from '@taiga-ui/cdk/directives/visual-viewport';\nimport {tuiInjectElement} from '@taiga-ui/cdk/utils/dom';\nimport {\n TUI_SCROLLBAR_OPTIONS,\n TuiScrollControls,\n} from '@taiga-ui/core/components/scrollbar';\nimport {TuiPopups} from '@taiga-ui/core/portals/popup';\nimport {\n TUI_ANIMATIONS_SPEED,\n TUI_BREAKPOINT,\n TUI_REDUCED_MOTION,\n} from '@taiga-ui/core/tokens';\nimport {TUI_OPTIONS, tuiGetDuration} from '@taiga-ui/core/utils/miscellaneous';\n\n@Component({\n selector: 'tui-root',\n imports: [TuiPopups, TuiScrollControls],\n templateUrl: './root.template.html',\n styleUrls: ['./animations.less', './root.style.less'],\n encapsulation: ViewEncapsulation.None,\n // eslint-disable-next-line @angular-eslint/prefer-on-push-component-change-detection\n changeDetection: ChangeDetectionStrategy.Default,\n hostDirectives: [TuiPlatform, TuiVisualViewport, TuiFontSize],\n host: {\n 'data-tui-version': TUI_VERSION,\n '[style.--tui-duration.ms]': 'duration',\n '[style.--tui-scroll-behavior]': 'reducedMotion ? \"auto\" : \"smooth\"',\n '[class._mobile]': 'breakpoint() === \"mobile\"',\n // Required for the :active state to work in Safari. https://stackoverflow.com/a/33681490\n '(touchstart.passive.zoneless)': '0',\n '(document:fullscreenchange)': 'top.set(parent)',\n },\n})\nexport class TuiRoot {\n private readonly doc = inject(DOCUMENT);\n private readonly el = tuiInjectElement();\n private readonly child = !!inject(TuiRoot, {optional: true, skipSelf: true});\n\n protected readonly reducedMotion = inject(TUI_REDUCED_MOTION);\n protected readonly duration = tuiGetDuration(inject(TUI_ANIMATIONS_SPEED));\n protected readonly top = signal(this.parent);\n protected readonly breakpoint = inject(TUI_BREAKPOINT);\n protected readonly scrollbars =\n !inject(WA_IS_MOBILE) &&\n !this.child &&\n inject(TUI_SCROLLBAR_OPTIONS).mode !== 'native' &&\n inject(TUI_OPTIONS).scrollbars !== 'native';\n\n protected get parent(): boolean {\n return this.doc.fullscreenElement === this.el || !this.child;\n }\n}\n","<div class=\"t-root-content\">\n <ng-content />\n</div>\n@if (top()) {\n @if (scrollbars) {\n <tui-scroll-controls class=\"t-root-scrollbar\" />\n }\n <tui-popups>\n <ng-content select=\"tuiOverContent\" />\n </tui-popups>\n}\n","/**\n * Generated bundle index. Do not edit.\n */\n\nexport * from './index';\n"],"names":[],"mappings":"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"}
@@ -0,0 +1,337 @@
1
+ import { tuiRound } from '@taiga-ui/cdk/utils/math';
2
+ import * as i0 from '@angular/core';
3
+ import { inject, computed, input, ChangeDetectionStrategy, Component, INJECTOR, signal, effect, Directive, contentChild } from '@angular/core';
4
+ import { toSignal, takeUntilDestroyed } from '@angular/core/rxjs-interop';
5
+ import { NgControl, NgModel } from '@angular/forms';
6
+ import { TuiControl, TUI_IDENTITY_VALUE_TRANSFORMER } from '@taiga-ui/cdk/classes';
7
+ import { tuiWatch, tuiControlValue, tuiTypedFromEvent } from '@taiga-ui/cdk/observables';
8
+ import { tuiFallbackValueProvider } from '@taiga-ui/cdk/tokens';
9
+ import { take, timer, switchMap, merge, tap, map, combineLatest, filter } from 'rxjs';
10
+ import { tuiInjectElement } from '@taiga-ui/cdk/utils/dom';
11
+ import { tuiIsNumber } from '@taiga-ui/cdk/utils/miscellaneous';
12
+ import { tuiAsAuxiliary } from '@taiga-ui/core/tokens';
13
+ import { coerceBooleanProperty } from '@angular/cdk/coercion';
14
+ import { DOCUMENT, AsyncPipe } from '@angular/common';
15
+ import { TUI_TRUE_HANDLER, TUI_FALSE_HANDLER } from '@taiga-ui/cdk/constants';
16
+ import { tuiHintOptionsProvider } from '@taiga-ui/core/portals/hint';
17
+
18
+ /**
19
+ * Used as a limit for eliminating JS issues with floating point math
20
+ */
21
+ const TUI_FLOATING_PRECISION = 7;
22
+ function tuiFindKeyStepsBoundariesByFn(keySteps, fn) {
23
+ const keyStepUpperIndex = keySteps.findIndex((keyStep, i) => i && fn(keyStep));
24
+ const lowerStep = keySteps[keyStepUpperIndex - 1] || keySteps[0];
25
+ const upperStep = keySteps[keyStepUpperIndex] ||
26
+ keySteps[keySteps.length - 1] || [0, 0];
27
+ return [lowerStep, upperStep];
28
+ }
29
+ function tuiPercentageToKeyStepValue(valuePercentage, keySteps) {
30
+ const [[lowerStepPercent, lowerStepValue], [upperStepPercent, upperStepValue]] = tuiFindKeyStepsBoundariesByFn(keySteps, ([keyStepPercentage, _]) => valuePercentage <= keyStepPercentage);
31
+ const ratio = (valuePercentage - lowerStepPercent) / (upperStepPercent - lowerStepPercent);
32
+ const controlValue = (upperStepValue - lowerStepValue) * ratio + lowerStepValue;
33
+ return tuiRound(controlValue, TUI_FLOATING_PRECISION);
34
+ }
35
+ function tuiKeyStepValueToPercentage(value, keySteps) {
36
+ const [[lowerStepPercent, lowerStepValue], [upperStepPercent, upperStepValue]] = tuiFindKeyStepsBoundariesByFn(keySteps, ([_, keyStepValue]) => value <= keyStepValue);
37
+ const ratio = (value - lowerStepValue) / (upperStepValue - lowerStepValue) || 0;
38
+ return (upperStepPercent - lowerStepPercent) * ratio + lowerStepPercent;
39
+ }
40
+ function tuiCreateKeyStepsTransformer(keySteps) {
41
+ return new (class {
42
+ fromControlValue(controlValue) {
43
+ return tuiKeyStepValueToPercentage(controlValue, keySteps) / 100;
44
+ }
45
+ toControlValue(ratio) {
46
+ return tuiPercentageToKeyStepValue(ratio * 100, keySteps);
47
+ }
48
+ })();
49
+ }
50
+
51
+ class TuiSliderComponent {
52
+ constructor() {
53
+ this.control = inject(NgControl, { self: true, optional: true });
54
+ this.ticksGradient = computed((segments = this.segments()) => this.getTicksGradient(segments));
55
+ this.segments = input([1], {
56
+ alias: 'segments',
57
+ transform: (x) => tuiIsNumber(x) ? Array.from({ length: x }, (_, i) => i / x) : x,
58
+ });
59
+ this.el = tuiInjectElement();
60
+ this.keySteps = inject(TuiSliderKeyStepsBase, {
61
+ self: true,
62
+ optional: true,
63
+ });
64
+ if (this.control instanceof NgModel) {
65
+ /**
66
+ * The ValueAccessor.writeValue method is called twice on any value accessor during component initialization,
67
+ * when a control is bound using [(ngModel)], first time with a phantom null value.
68
+ * With `changeDetection: ChangeDetectionStrategy.OnPush` the second call of writeValue with real value don't re-render the view.
69
+ * ___
70
+ * See this {@link https://github.com/angular/angular/issues/14988 issue}
71
+ */
72
+ this.control.valueChanges?.pipe(tuiWatch(), take(1)).subscribe();
73
+ }
74
+ }
75
+ get valueRatio() {
76
+ return (this.value - this.min) / (this.max - this.min) || 0;
77
+ }
78
+ get min() {
79
+ return Number(this.el.min);
80
+ }
81
+ set min(x) {
82
+ this.el.min = String(x);
83
+ }
84
+ get max() {
85
+ return Number(this.el.max || 100);
86
+ }
87
+ set max(x) {
88
+ this.el.max = String(x);
89
+ }
90
+ get step() {
91
+ if (!this.el.step) {
92
+ return 1;
93
+ }
94
+ return this.el.step === 'any' ? 0 : Number(this.el.step);
95
+ }
96
+ set step(x) {
97
+ this.el.step = String(x);
98
+ }
99
+ get value() {
100
+ /**
101
+ * If developer uses `[(ngModel)]` and programmatically change value,
102
+ * the `el.nativeElement.value` is equal to the previous value at this moment
103
+ * (it will be updated only in next microtask).
104
+ * @see https://github.com/angular/angular/issues/13568
105
+ */
106
+ if (this.control instanceof NgModel) {
107
+ const transformer = this.keySteps?.transformer();
108
+ const value = this.keySteps && transformer
109
+ ? this.keySteps.toSliderValue(transformer.fromControlValue(this.control.value))
110
+ : this.control.viewModel;
111
+ return this.step
112
+ ? tuiRound(Math.round(value / this.step) * this.step, TUI_FLOATING_PRECISION)
113
+ : value;
114
+ }
115
+ return Number(this.el.value) || 0;
116
+ }
117
+ set value(newValue) {
118
+ this.el.value = `${newValue}`;
119
+ }
120
+ getTicksGradient(segments) {
121
+ if (segments.length <= 1) {
122
+ return 'linear-gradient(to right, transparent 0 100%)';
123
+ }
124
+ const percentages = segments
125
+ .filter((segment) => segment > 0 && segment < 1)
126
+ .map((segment) => segment * 100);
127
+ return percentages.reduce((acc, segment, index) => `${acc}
128
+ var(--tui-text-tertiary) ${segment}% calc(${segment}% + var(--t-tick-thickness)),
129
+ transparent ${segment}% ${percentages[index + 1] ?? 100}%${percentages[index + 1] ? ',' : ')'}
130
+ `, `linear-gradient(to right, transparent 0 ${percentages[0]}%,`);
131
+ }
132
+ static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "19.2.18", ngImport: i0, type: TuiSliderComponent, deps: [], target: i0.ɵɵFactoryTarget.Component }); }
133
+ static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.1.0", version: "19.2.18", type: TuiSliderComponent, isStandalone: true, selector: "input[type=range][tuiSlider]", inputs: { segments: { classPropertyName: "segments", publicName: "segments", isSignal: true, isRequired: false, transformFunction: null } }, host: { listeners: { "input": "0" }, properties: { "style.--tui-ticks-gradient": "ticksGradient()", "style.--tui-slider-fill-ratio": "valueRatio" } }, providers: [tuiAsAuxiliary(TuiSliderComponent)], ngImport: i0, template: '', isInline: true, styles: [":host{--t-tick-thickness: .25rem;position:relative;display:block;inline-size:100%;color:var(--tui-background-accent-1);cursor:pointer;-webkit-appearance:none;appearance:none;block-size:max(var(--tui-thumb-size, .75rem),1rem);padding:calc((max(var(--tui-thumb-size, .75rem),1rem) - max(calc(calc(var(--tui-thumb-size, .75rem) / 2) - .25rem),.125rem))/2) 0;box-sizing:border-box;outline:none;border-radius:1rem/3rem;background:var(--tui-ticks-gradient) no-repeat calc((var(--tui-thumb-size, .75rem) - var(--t-tick-thickness)) / 2) / calc(100% - var(--tui-thumb-size, .75rem)),linear-gradient(to var(--tui-inline-end),currentColor calc(100% * var(--tui-slider-fill-ratio)),transparent calc(100% * var(--tui-slider-fill-ratio))),var(--tui-background-neutral-2);background-clip:content-box}:host:active{cursor:ew-resize}:host:active:before{opacity:.2;transform:var(--tui-slider-thumb-transform, scale(1)) scale(2.33)}:host:disabled{opacity:var(--tui-disabled-opacity);pointer-events:none}:host:before{transition-property:transform,opacity;transition-duration:var(--tui-duration, .3s);transition-timing-function:ease-in-out;content:\"\";position:absolute;top:calc(max(calc(1rem - var(--tui-thumb-size, .75rem)),0rem)/2);inset-inline-start:var(--t-left);inline-size:var(--tui-thumb-size, .75rem);block-size:var(--tui-thumb-size, .75rem);border-radius:50%;transform:var(--tui-slider-thumb-transform, scale(1));background:currentColor;opacity:0;--t-left: calc(var(--tui-slider-fill-ratio) * 100% - var(--tui-slider-fill-ratio) * var(--tui-thumb-size, .75rem))}:host:focus-visible::-webkit-slider-thumb{box-shadow:0 0 0 2px inset var(--tui-border-focus)}:host:focus-visible::-moz-range-thumb{box-shadow:0 0 0 2px inset var(--tui-border-focus)}:host::-webkit-slider-thumb{transition-property:transform;transition-duration:var(--tui-duration, .3s);transition-timing-function:ease-in-out;isolation:isolate;-webkit-appearance:none;appearance:none;background-color:currentColor;box-shadow:none;border-radius:50%;block-size:var(--tui-thumb-size, .75rem);inline-size:var(--tui-thumb-size, .75rem);box-sizing:content-box;background-clip:content-box;border:calc(max(calc(1rem - var(--tui-thumb-size, .75rem)),0rem)/2) solid transparent;border-inline-start:0;border-inline-end:0;transform:var(--tui-slider-thumb-transform, scale(1))}:not(:disabled):host::-webkit-slider-thumb{cursor:ew-resize}:not(:disabled):host::-webkit-slider-thumb:hover,:active:not(:disabled):host::-webkit-slider-thumb{transform:var(--tui-slider-thumb-transform, scale(1)) scale(1.333)}:host::-moz-range-thumb{transition-property:transform;transition-duration:var(--tui-duration, .3s);transition-timing-function:ease-in-out;isolation:isolate;-webkit-appearance:none;appearance:none;background-color:currentColor;box-shadow:none;border-radius:50%;block-size:var(--tui-thumb-size, .75rem);inline-size:var(--tui-thumb-size, .75rem);box-sizing:content-box;background-clip:content-box;border:calc(max(calc(1rem - var(--tui-thumb-size, .75rem)),0rem)/2) solid transparent;border-inline-start:0;border-inline-end:0;transform:var(--tui-slider-thumb-transform, scale(1))}:not(:disabled):host::-moz-range-thumb{cursor:ew-resize}:not(:disabled):host::-moz-range-thumb:hover,:active:not(:disabled):host::-moz-range-thumb{transform:var(--tui-slider-thumb-transform, scale(1)) scale(1.333)}:host::-moz-range-progress{opacity:0}:host-context(tui-textfield) :host([type=\"range\"]){position:absolute;inset:100% var(--t-padding) 0;inline-size:auto;margin:calc(-.5*max(calc(calc(var(--tui-thumb-size, .75rem) / 2) - .25rem),.125rem)) 0 0;transform:translateY(-50%);background-color:transparent;pointer-events:auto}\n"], changeDetection: i0.ChangeDetectionStrategy.OnPush }); }
134
+ }
135
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "19.2.18", ngImport: i0, type: TuiSliderComponent, decorators: [{
136
+ type: Component,
137
+ args: [{ selector: 'input[type=range][tuiSlider]', template: '', changeDetection: ChangeDetectionStrategy.OnPush, providers: [tuiAsAuxiliary(TuiSliderComponent)], host: {
138
+ /**
139
+ * For change detection.
140
+ * Webkit does not have built-in method for customization of filling progress (as Firefox).
141
+ * We draw filling of progress by `background: linear-gradient(...)` of the track.
142
+ * This function triggers change detection (for {@link valueRatio} getter) when we drag thumb of the input.
143
+ */
144
+ '(input)': '0',
145
+ '[style.--tui-ticks-gradient]': 'ticksGradient()',
146
+ '[style.--tui-slider-fill-ratio]': 'valueRatio',
147
+ }, styles: [":host{--t-tick-thickness: .25rem;position:relative;display:block;inline-size:100%;color:var(--tui-background-accent-1);cursor:pointer;-webkit-appearance:none;appearance:none;block-size:max(var(--tui-thumb-size, .75rem),1rem);padding:calc((max(var(--tui-thumb-size, .75rem),1rem) - max(calc(calc(var(--tui-thumb-size, .75rem) / 2) - .25rem),.125rem))/2) 0;box-sizing:border-box;outline:none;border-radius:1rem/3rem;background:var(--tui-ticks-gradient) no-repeat calc((var(--tui-thumb-size, .75rem) - var(--t-tick-thickness)) / 2) / calc(100% - var(--tui-thumb-size, .75rem)),linear-gradient(to var(--tui-inline-end),currentColor calc(100% * var(--tui-slider-fill-ratio)),transparent calc(100% * var(--tui-slider-fill-ratio))),var(--tui-background-neutral-2);background-clip:content-box}:host:active{cursor:ew-resize}:host:active:before{opacity:.2;transform:var(--tui-slider-thumb-transform, scale(1)) scale(2.33)}:host:disabled{opacity:var(--tui-disabled-opacity);pointer-events:none}:host:before{transition-property:transform,opacity;transition-duration:var(--tui-duration, .3s);transition-timing-function:ease-in-out;content:\"\";position:absolute;top:calc(max(calc(1rem - var(--tui-thumb-size, .75rem)),0rem)/2);inset-inline-start:var(--t-left);inline-size:var(--tui-thumb-size, .75rem);block-size:var(--tui-thumb-size, .75rem);border-radius:50%;transform:var(--tui-slider-thumb-transform, scale(1));background:currentColor;opacity:0;--t-left: calc(var(--tui-slider-fill-ratio) * 100% - var(--tui-slider-fill-ratio) * var(--tui-thumb-size, .75rem))}:host:focus-visible::-webkit-slider-thumb{box-shadow:0 0 0 2px inset var(--tui-border-focus)}:host:focus-visible::-moz-range-thumb{box-shadow:0 0 0 2px inset var(--tui-border-focus)}:host::-webkit-slider-thumb{transition-property:transform;transition-duration:var(--tui-duration, .3s);transition-timing-function:ease-in-out;isolation:isolate;-webkit-appearance:none;appearance:none;background-color:currentColor;box-shadow:none;border-radius:50%;block-size:var(--tui-thumb-size, .75rem);inline-size:var(--tui-thumb-size, .75rem);box-sizing:content-box;background-clip:content-box;border:calc(max(calc(1rem - var(--tui-thumb-size, .75rem)),0rem)/2) solid transparent;border-inline-start:0;border-inline-end:0;transform:var(--tui-slider-thumb-transform, scale(1))}:not(:disabled):host::-webkit-slider-thumb{cursor:ew-resize}:not(:disabled):host::-webkit-slider-thumb:hover,:active:not(:disabled):host::-webkit-slider-thumb{transform:var(--tui-slider-thumb-transform, scale(1)) scale(1.333)}:host::-moz-range-thumb{transition-property:transform;transition-duration:var(--tui-duration, .3s);transition-timing-function:ease-in-out;isolation:isolate;-webkit-appearance:none;appearance:none;background-color:currentColor;box-shadow:none;border-radius:50%;block-size:var(--tui-thumb-size, .75rem);inline-size:var(--tui-thumb-size, .75rem);box-sizing:content-box;background-clip:content-box;border:calc(max(calc(1rem - var(--tui-thumb-size, .75rem)),0rem)/2) solid transparent;border-inline-start:0;border-inline-end:0;transform:var(--tui-slider-thumb-transform, scale(1))}:not(:disabled):host::-moz-range-thumb{cursor:ew-resize}:not(:disabled):host::-moz-range-thumb:hover,:active:not(:disabled):host::-moz-range-thumb{transform:var(--tui-slider-thumb-transform, scale(1)) scale(1.333)}:host::-moz-range-progress{opacity:0}:host-context(tui-textfield) :host([type=\"range\"]){position:absolute;inset:100% var(--t-padding) 0;inline-size:auto;margin:calc(-.5*max(calc(calc(var(--tui-thumb-size, .75rem) / 2) - .25rem),.125rem)) 0 0;transform:translateY(-50%);background-color:transparent;pointer-events:auto}\n"] }]
148
+ }], ctorParameters: () => [] });
149
+
150
+ class TuiSliderKeyStepsBase {
151
+ constructor() {
152
+ this.injector = inject(INJECTOR);
153
+ this.control = inject(NgControl, { self: true, optional: true });
154
+ this.min = signal(undefined);
155
+ this.max = signal(undefined);
156
+ this.sync = effect(() => {
157
+ const steps = this.keySteps();
158
+ this.transformer.set(steps && tuiCreateKeyStepsTransformer(steps));
159
+ this.min.set(steps?.[0][1]);
160
+ this.max.set(steps?.[steps.length - 1]?.[1]);
161
+ });
162
+ this.step = input(1);
163
+ this.keySteps = input();
164
+ this.transformer = signal(undefined);
165
+ this.controlValue = toSignal(timer(0) // https://github.com/angular/angular/issues/54418
166
+ .pipe(switchMap(() => tuiControlValue(this.control))));
167
+ this.totalSteps = computed(() =>
168
+ /**
169
+ * Not-integer amount of steps is invalid usage of native sliders
170
+ * ```html
171
+ * <input type="range" [max]="100" [step]="3.33" />
172
+ * ```
173
+ * (impossible to select 100; 99.9 is max allowed value)
174
+ */
175
+ Math.round(100 / this.step()));
176
+ }
177
+ ngOnInit() {
178
+ this.slider = this.injector.get(TuiSliderComponent);
179
+ }
180
+ takeStep(coefficient) {
181
+ const newValue = this.slider.value + coefficient;
182
+ return (this.transformer()?.toControlValue((this.slider.value + coefficient) / this.totalSteps()) ?? newValue);
183
+ }
184
+ toSliderValue(fraction) {
185
+ return this.transformer() ? fraction * this.totalSteps() : fraction;
186
+ }
187
+ setControlValue(controlValue) {
188
+ const fraction = this.transformer()?.fromControlValue(controlValue) ?? controlValue;
189
+ this.slider.value = this.toSliderValue(fraction);
190
+ }
191
+ getControlValue() {
192
+ const { value } = this.slider;
193
+ return this.transformer()?.toControlValue(value / this.totalSteps()) ?? value;
194
+ }
195
+ static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "19.2.18", ngImport: i0, type: TuiSliderKeyStepsBase, deps: [], target: i0.ɵɵFactoryTarget.Directive }); }
196
+ static { this.ɵdir = i0.ɵɵngDeclareDirective({ minVersion: "17.1.0", version: "19.2.18", type: TuiSliderKeyStepsBase, isStandalone: true, selector: "input[tuiSlider][keySteps]", inputs: { step: { classPropertyName: "step", publicName: "step", isSignal: true, isRequired: false, transformFunction: null }, keySteps: { classPropertyName: "keySteps", publicName: "keySteps", isSignal: true, isRequired: false, transformFunction: null } }, host: { properties: { "attr.min": "transformer() ? 0 : slider?.min", "attr.step": "transformer() ? 1 : step()", "attr.max": "transformer() ? totalSteps() : slider?.max", "attr.aria-valuemin": "min()", "attr.aria-valuemax": "max()", "attr.aria-valuenow": "controlValue()" } }, ngImport: i0 }); }
197
+ }
198
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "19.2.18", ngImport: i0, type: TuiSliderKeyStepsBase, decorators: [{
199
+ type: Directive,
200
+ args: [{
201
+ selector: 'input[tuiSlider][keySteps]',
202
+ host: {
203
+ '[attr.min]': 'transformer() ? 0 : slider?.min',
204
+ '[attr.step]': 'transformer() ? 1 : step()',
205
+ '[attr.max]': 'transformer() ? totalSteps() : slider?.max',
206
+ '[attr.aria-valuemin]': 'min()',
207
+ '[attr.aria-valuemax]': 'max()',
208
+ '[attr.aria-valuenow]': 'controlValue()',
209
+ },
210
+ }]
211
+ }] });
212
+ class TuiSliderKeySteps extends TuiControl {
213
+ constructor() {
214
+ super(...arguments);
215
+ this.base = inject(TuiSliderKeyStepsBase);
216
+ }
217
+ set keySteps(steps) {
218
+ this.transformer = steps
219
+ ? tuiCreateKeyStepsTransformer(steps)
220
+ : TUI_IDENTITY_VALUE_TRANSFORMER;
221
+ }
222
+ setValue(sliderValue) {
223
+ this.onChange(this.base.transformer() ? sliderValue / this.base.totalSteps() : sliderValue);
224
+ }
225
+ static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "19.2.18", ngImport: i0, type: TuiSliderKeySteps, deps: null, target: i0.ɵɵFactoryTarget.Directive }); }
226
+ static { this.ɵdir = i0.ɵɵngDeclareDirective({ minVersion: "14.0.0", version: "19.2.18", type: TuiSliderKeySteps, isStandalone: true, selector: "input[tuiSlider][keySteps][ngModel],input[tuiSlider][keySteps][formControl],input[tuiSlider][keySteps][formControlName]", inputs: { keySteps: "keySteps" }, host: { listeners: { "blur": "onTouched()", "input": "setValue($event.target.value)", "change": "setValue($event.target.value)" }, properties: { "value": "base.toSliderValue(value())", "disabled": "disabled()" } }, providers: [tuiFallbackValueProvider(0)], usesInheritance: true, ngImport: i0 }); }
227
+ }
228
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "19.2.18", ngImport: i0, type: TuiSliderKeySteps, decorators: [{
229
+ type: Directive,
230
+ args: [{
231
+ selector: 'input[tuiSlider][keySteps][ngModel],input[tuiSlider][keySteps][formControl],input[tuiSlider][keySteps][formControlName]',
232
+ inputs: ['keySteps'],
233
+ providers: [tuiFallbackValueProvider(0)],
234
+ host: {
235
+ '[value]': 'base.toSliderValue(value())',
236
+ '[disabled]': 'disabled()',
237
+ '(blur)': 'onTouched()',
238
+ '(input)': 'setValue($event.target.value)',
239
+ '(change)': 'setValue($event.target.value)',
240
+ },
241
+ }]
242
+ }] });
243
+
244
+ const SLIDER_INTERACTION_KEYS = new Set([
245
+ 'ArrowDown',
246
+ 'ArrowLeft',
247
+ 'ArrowRight',
248
+ 'ArrowUp',
249
+ 'End',
250
+ 'Home',
251
+ 'PageDown',
252
+ 'PageUp',
253
+ ]);
254
+ /**
255
+ * Native <input type='range' readonly> doesn't work.
256
+ * This directive imitates this native behaviour.
257
+ */
258
+ class TuiSliderReadonly {
259
+ constructor() {
260
+ this.el = tuiInjectElement();
261
+ this.doc = inject(DOCUMENT);
262
+ this.readonly = input(true, { transform: coerceBooleanProperty });
263
+ const touchStart$ = tuiTypedFromEvent(this.el, 'touchstart', { passive: false });
264
+ const touchMove$ = tuiTypedFromEvent(this.doc, 'touchmove', { passive: false });
265
+ const touchEnd$ = tuiTypedFromEvent(this.doc, 'touchend', { passive: true });
266
+ const shouldPreventMove$ = merge(touchStart$.pipe(tap((e) => this.preventEvent(e)), map(TUI_TRUE_HANDLER)), touchEnd$.pipe(map(TUI_FALSE_HANDLER)));
267
+ /**
268
+ * @bad TODO think about another solution.
269
+ * Keep in mind that preventing touch event (on slider) inside `@HostListener('touchstart')` doesn't work for mobile chrome.
270
+ */
271
+ combineLatest([touchMove$, shouldPreventMove$])
272
+ .pipe(filter(([_, shouldPreventMove]) => shouldPreventMove), takeUntilDestroyed())
273
+ .subscribe(([moveEvent]) => this.preventEvent(moveEvent));
274
+ }
275
+ preventEvent(event) {
276
+ if (event.cancelable && this.readonly()) {
277
+ event.preventDefault();
278
+ }
279
+ }
280
+ preventKeyboardInteraction(event) {
281
+ if (SLIDER_INTERACTION_KEYS.has(event.key)) {
282
+ this.preventEvent(event);
283
+ }
284
+ }
285
+ static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "19.2.18", ngImport: i0, type: TuiSliderReadonly, deps: [], target: i0.ɵɵFactoryTarget.Directive }); }
286
+ static { this.ɵdir = i0.ɵɵngDeclareDirective({ minVersion: "17.1.0", version: "19.2.18", type: TuiSliderReadonly, isStandalone: true, selector: "input[tuiSlider][readonly]", inputs: { readonly: { classPropertyName: "readonly", publicName: "readonly", isSignal: true, isRequired: false, transformFunction: null } }, host: { listeners: { "keydown": "preventKeyboardInteraction($event)", "mousedown": "preventEvent($event)" } }, ngImport: i0 }); }
287
+ }
288
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "19.2.18", ngImport: i0, type: TuiSliderReadonly, decorators: [{
289
+ type: Directive,
290
+ args: [{
291
+ selector: 'input[tuiSlider][readonly]',
292
+ host: {
293
+ '(keydown)': 'preventKeyboardInteraction($event)',
294
+ '(mousedown)': 'preventEvent($event)',
295
+ },
296
+ }]
297
+ }], ctorParameters: () => [] });
298
+
299
+ /// <reference types="@taiga-ui/tsconfig/ng-dev-mode" />
300
+ class TuiSliderThumbLabel {
301
+ constructor() {
302
+ this.slider = contentChild(TuiSliderComponent);
303
+ this.control = contentChild(NgControl);
304
+ }
305
+ ngAfterContentInit() {
306
+ ngDevMode &&
307
+ console.assert(Boolean(this.control()?.valueChanges), '\n[tuiSliderThumbLabel] expected <input tuiSlider type="range" /> to use Angular Forms.\n' +
308
+ 'Use [(ngModel)] or [formControl] or formControlName for correct work.');
309
+ }
310
+ get ratio() {
311
+ return this.slider()?.valueRatio || 0;
312
+ }
313
+ get ghostStart() {
314
+ return this.ratio * (this.slider()?.el.offsetWidth || 0);
315
+ }
316
+ static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "19.2.18", ngImport: i0, type: TuiSliderThumbLabel, deps: [], target: i0.ɵɵFactoryTarget.Component }); }
317
+ static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "19.2.18", type: TuiSliderThumbLabel, isStandalone: true, selector: "[tuiSliderThumbLabel]", providers: [tuiHintOptionsProvider({ direction: 'top', appearance: 'floating' })], queries: [{ propertyName: "slider", first: true, predicate: TuiSliderComponent, descendants: true, isSignal: true }, { propertyName: "control", first: true, predicate: NgControl, descendants: true, isSignal: true }], ngImport: i0, template: "@if (control()?.valueChanges | async) {}\n\n<div\n class=\"t-ghost\"\n [style.--tui-slider-thumb-ratio]=\"ratio\"\n [style.inset-inline-start.px]=\"ghostStart\"\n>\n <ng-content />\n</div>\n\n<ng-content select=\"input[type=range]\" />\n", styles: [":host{position:relative}.t-ghost{position:absolute;inset-block:0;margin:auto;border-radius:50%;pointer-events:none;inline-size:var(--tui-thumb-size, .75rem);block-size:var(--tui-thumb-size, .75rem);transform:translate(calc(var(--tui-slider-thumb-ratio) * var(--tui-thumb-size, .75rem) * -1 * var(--tui-inline)))}:host-context([dir=\"rtl\"]) .t-ghost{left:unset!important}\n"], dependencies: [{ kind: "pipe", type: AsyncPipe, name: "async" }], changeDetection: i0.ChangeDetectionStrategy.OnPush }); }
318
+ }
319
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "19.2.18", ngImport: i0, type: TuiSliderThumbLabel, decorators: [{
320
+ type: Component,
321
+ args: [{ selector: '[tuiSliderThumbLabel]', imports: [AsyncPipe], changeDetection: ChangeDetectionStrategy.OnPush, providers: [tuiHintOptionsProvider({ direction: 'top', appearance: 'floating' })], template: "@if (control()?.valueChanges | async) {}\n\n<div\n class=\"t-ghost\"\n [style.--tui-slider-thumb-ratio]=\"ratio\"\n [style.inset-inline-start.px]=\"ghostStart\"\n>\n <ng-content />\n</div>\n\n<ng-content select=\"input[type=range]\" />\n", styles: [":host{position:relative}.t-ghost{position:absolute;inset-block:0;margin:auto;border-radius:50%;pointer-events:none;inline-size:var(--tui-thumb-size, .75rem);block-size:var(--tui-thumb-size, .75rem);transform:translate(calc(var(--tui-slider-thumb-ratio) * var(--tui-thumb-size, .75rem) * -1 * var(--tui-inline)))}:host-context([dir=\"rtl\"]) .t-ghost{left:unset!important}\n"] }]
322
+ }] });
323
+
324
+ const TuiSlider = [
325
+ TuiSliderComponent,
326
+ TuiSliderThumbLabel,
327
+ TuiSliderKeyStepsBase,
328
+ TuiSliderKeySteps,
329
+ TuiSliderReadonly,
330
+ ];
331
+
332
+ /**
333
+ * Generated bundle index. Do not edit.
334
+ */
335
+
336
+ export { TUI_FLOATING_PRECISION, TuiSlider, TuiSliderComponent, TuiSliderKeySteps, TuiSliderKeyStepsBase, TuiSliderReadonly, TuiSliderThumbLabel, tuiCreateKeyStepsTransformer, tuiKeyStepValueToPercentage, tuiPercentageToKeyStepValue };
337
+ //# sourceMappingURL=taiga-ui-core-components-slider.mjs.map