primeng
Version:
PrimeNG is an open source UI library for Angular featuring a rich set of 80+ components, a theme designer, various theme alternatives such as Material, Bootstrap, Tailwind, premium templates and professional support. In addition, it integrates with PrimeB
1 lines • 77.7 kB
Source Map (JSON)
{"version":3,"file":"primeng-button.mjs","sources":["../../src/button/style/buttonstyle.ts","../../src/button/button.ts","../../src/button/primeng-button.ts"],"sourcesContent":["import { Injectable } from '@angular/core';\nimport { BaseStyle } from 'primeng/base';\n\nconst theme = ({ dt }) => `\n.p-button {\n display: inline-flex;\n cursor: pointer;\n user-select: none;\n align-items: center;\n justify-content: center;\n overflow: hidden;\n position: relative;\n color: ${dt('button.primary.color')};\n background: ${dt('button.primary.background')};\n border: 1px solid ${dt('button.primary.border.color')};\n padding-block: ${dt('button.padding.y')};\n padding-inline: ${dt('button.padding.x')};\n font-size: 1rem;\n font-family: inherit;\n font-feature-settings: inherit;\n transition: background ${dt('button.transition.duration')}, color ${dt('button.transition.duration')}, border-color ${dt('button.transition.duration')},\n outline-color ${dt('button.transition.duration')}, box-shadow ${dt('button.transition.duration')};\n border-radius: ${dt('button.border.radius')};\n outline-color: transparent;\n gap: ${dt('button.gap')};\n}\n\n.p-button-icon,\n.p-button-icon:before,\n.p-button-icon:after {\n line-height: inherit;\n}\n\n.p-button:disabled {\n cursor: default;\n}\n\n.p-button-icon-right {\n order: 1;\n}\n\n.p-button-icon-right:dir(rtl) {\n order: -1;\n}\n\n.p-button:not(.p-button-vertical) .p-button-icon:not(.p-button-icon-right):dir(rtl) {\n order: 1;\n}\n\n.p-button-icon-bottom {\n order: 2;\n}\n\n.p-button-icon-only {\n width: ${dt('button.icon.only.width')};\n padding-inline-start: 0;\n padding-inline-end: 0;\n gap: 0;\n}\n\n.p-button-icon-only.p-button-rounded {\n border-radius: 50%;\n height: ${dt('button.icon.only.width')};\n}\n\n.p-button-icon-only .p-button-label {\n visibility: hidden;\n width: 0;\n}\n\n.p-button-sm {\n font-size: ${dt('button.sm.font.size')};\n padding-block: ${dt('button.sm.padding.y')};\n padding-inline: ${dt('button.sm.padding.x')};\n}\n\n.p-button-sm .p-button-icon {\n font-size: ${dt('button.sm.font.size')};\n}\n\n.p-button-lg {\n font-size: ${dt('button.lg.font.size')};\n padding-block: ${dt('button.lg.padding.y')};\n padding-inline: ${dt('button.lg.padding.x')};\n}\n\n.p-button-lg .p-button-icon {\n font-size: ${dt('button.lg.font.size')};\n}\n\n.p-button-vertical {\n flex-direction: column;\n}\n\n.p-button-label {\n font-weight: ${dt('button.label.font.weight')};\n}\n\n.p-button-fluid {\n width: 100%;\n}\n\n.p-button-fluid.p-button-icon-only {\n width: ${dt('button.icon.only.width')};\n}\n\n.p-button:not(:disabled):hover {\n background: ${dt('button.primary.hover.background')};\n border: 1px solid ${dt('button.primary.hover.border.color')};\n color: ${dt('button.primary.hover.color')};\n}\n\n.p-button:not(:disabled):active {\n background: ${dt('button.primary.active.background')};\n border: 1px solid ${dt('button.primary.active.border.color')};\n color: ${dt('button.primary.active.color')};\n}\n\n.p-button:focus-visible {\n box-shadow: ${dt('button.primary.focus.ring.shadow')};\n outline: ${dt('button.focus.ring.width')} ${dt('button.focus.ring.style')} ${dt('button.primary.focus.ring.color')};\n outline-offset: ${dt('button.focus.ring.offset')};\n}\n\n.p-button .p-badge {\n min-width: ${dt('button.badge.size')};\n height: ${dt('button.badge.size')};\n line-height: ${dt('button.badge.size')};\n}\n\n.p-button-raised {\n box-shadow: ${dt('button.raised.shadow')};\n}\n\n.p-button-rounded {\n border-radius: ${dt('button.rounded.border.radius')};\n}\n\n.p-button-secondary {\n background: ${dt('button.secondary.background')};\n border: 1px solid ${dt('button.secondary.border.color')};\n color: ${dt('button.secondary.color')};\n}\n\n.p-button-secondary:not(:disabled):hover {\n background: ${dt('button.secondary.hover.background')};\n border: 1px solid ${dt('button.secondary.hover.border.color')};\n color: ${dt('button.secondary.hover.color')};\n}\n\n.p-button-secondary:not(:disabled):active {\n background: ${dt('button.secondary.active.background')};\n border: 1px solid ${dt('button.secondary.active.border.color')};\n color: ${dt('button.secondary.active.color')};\n}\n\n.p-button-secondary:focus-visible {\n outline-color: ${dt('button.secondary.focus.ring.color')};\n box-shadow: ${dt('button.secondary.focus.ring.shadow')};\n}\n\n.p-button-success {\n background: ${dt('button.success.background')};\n border: 1px solid ${dt('button.success.border.color')};\n color: ${dt('button.success.color')};\n}\n\n.p-button-success:not(:disabled):hover {\n background: ${dt('button.success.hover.background')};\n border: 1px solid ${dt('button.success.hover.border.color')};\n color: ${dt('button.success.hover.color')};\n}\n\n.p-button-success:not(:disabled):active {\n background: ${dt('button.success.active.background')};\n border: 1px solid ${dt('button.success.active.border.color')};\n color: ${dt('button.success.active.color')};\n}\n\n.p-button-success:focus-visible {\n outline-color: ${dt('button.success.focus.ring.color')};\n box-shadow: ${dt('button.success.focus.ring.shadow')};\n}\n\n.p-button-info {\n background: ${dt('button.info.background')};\n border: 1px solid ${dt('button.info.border.color')};\n color: ${dt('button.info.color')};\n}\n\n.p-button-info:not(:disabled):hover {\n background: ${dt('button.info.hover.background')};\n border: 1px solid ${dt('button.info.hover.border.color')};\n color: ${dt('button.info.hover.color')};\n}\n\n.p-button-info:not(:disabled):active {\n background: ${dt('button.info.active.background')};\n border: 1px solid ${dt('button.info.active.border.color')};\n color: ${dt('button.info.active.color')};\n}\n\n.p-button-info:focus-visible {\n outline-color: ${dt('button.info.focus.ring.color')};\n box-shadow: ${dt('button.info.focus.ring.shadow')};\n}\n\n.p-button-warn {\n background: ${dt('button.warn.background')};\n border: 1px solid ${dt('button.warn.border.color')};\n color: ${dt('button.warn.color')};\n}\n\n.p-button-warn:not(:disabled):hover {\n background: ${dt('button.warn.hover.background')};\n border: 1px solid ${dt('button.warn.hover.border.color')};\n color: ${dt('button.warn.hover.color')};\n}\n\n.p-button-warn:not(:disabled):active {\n background: ${dt('button.warn.active.background')};\n border: 1px solid ${dt('button.warn.active.border.color')};\n color: ${dt('button.warn.active.color')};\n}\n\n.p-button-warn:focus-visible {\n outline-color: ${dt('button.warn.focus.ring.color')};\n box-shadow: ${dt('button.warn.focus.ring.shadow')};\n}\n\n.p-button-help {\n background: ${dt('button.help.background')};\n border: 1px solid ${dt('button.help.border.color')};\n color: ${dt('button.help.color')};\n}\n\n.p-button-help:not(:disabled):hover {\n background: ${dt('button.help.hover.background')};\n border: 1px solid ${dt('button.help.hover.border.color')};\n color: ${dt('button.help.hover.color')};\n}\n\n.p-button-help:not(:disabled):active {\n background: ${dt('button.help.active.background')};\n border: 1px solid ${dt('button.help.active.border.color')};\n color: ${dt('button.help.active.color')};\n}\n\n.p-button-help:focus-visible {\n outline-color: ${dt('button.help.focus.ring.color')};\n box-shadow: ${dt('button.help.focus.ring.shadow')};\n}\n\n.p-button-danger {\n background: ${dt('button.danger.background')};\n border: 1px solid ${dt('button.danger.border.color')};\n color: ${dt('button.danger.color')};\n}\n\n.p-button-danger:not(:disabled):hover {\n background: ${dt('button.danger.hover.background')};\n border: 1px solid ${dt('button.danger.hover.border.color')};\n color: ${dt('button.danger.hover.color')};\n}\n\n.p-button-danger:not(:disabled):active {\n background: ${dt('button.danger.active.background')};\n border: 1px solid ${dt('button.danger.active.border.color')};\n color: ${dt('button.danger.active.color')};\n}\n\n.p-button-danger:focus-visible {\n outline-color: ${dt('button.danger.focus.ring.color')};\n box-shadow: ${dt('button.danger.focus.ring.shadow')};\n}\n\n.p-button-contrast {\n background: ${dt('button.contrast.background')};\n border: 1px solid ${dt('button.contrast.border.color')};\n color: ${dt('button.contrast.color')};\n}\n\n.p-button-contrast:not(:disabled):hover {\n background: ${dt('button.contrast.hover.background')};\n border: 1px solid ${dt('button.contrast.hover.border.color')};\n color: ${dt('button.contrast.hover.color')};\n}\n\n.p-button-contrast:not(:disabled):active {\n background: ${dt('button.contrast.active.background')};\n border: 1px solid ${dt('button.contrast.active.border.color')};\n color: ${dt('button.contrast.active.color')};\n}\n\n.p-button-contrast:focus-visible {\n outline-color: ${dt('button.contrast.focus.ring.color')};\n box-shadow: ${dt('button.contrast.focus.ring.shadow')};\n}\n\n.p-button-outlined {\n background: transparent;\n border-color: ${dt('button.outlined.primary.border.color')};\n color: ${dt('button.outlined.primary.color')};\n}\n\n.p-button-outlined:not(:disabled):hover {\n background: ${dt('button.outlined.primary.hover.background')};\n border-color: ${dt('button.outlined.primary.border.color')};\n color: ${dt('button.outlined.primary.color')};\n}\n\n.p-button-outlined:not(:disabled):active {\n background: ${dt('button.outlined.primary.active.background')};\n border-color: ${dt('button.outlined.primary.border.color')};\n color: ${dt('button.outlined.primary.color')};\n}\n\n.p-button-outlined.p-button-secondary {\n border-color: ${dt('button.outlined.secondary.border.color')};\n color: ${dt('button.outlined.secondary.color')};\n}\n\n.p-button-outlined.p-button-secondary:not(:disabled):hover {\n background: ${dt('button.outlined.secondary.hover.background')};\n border-color: ${dt('button.outlined.secondary.border.color')};\n color: ${dt('button.outlined.secondary.color')};\n}\n\n.p-button-outlined.p-button-secondary:not(:disabled):active {\n background: ${dt('button.outlined.secondary.active.background')};\n border-color: ${dt('button.outlined.secondary.border.color')};\n color: ${dt('button.outlined.secondary.color')};\n}\n\n.p-button-outlined.p-button-success {\n border-color: ${dt('button.outlined.success.border.color')};\n color: ${dt('button.outlined.success.color')};\n}\n\n.p-button-outlined.p-button-success:not(:disabled):hover {\n background: ${dt('button.outlined.success.hover.background')};\n border-color: ${dt('button.outlined.success.border.color')};\n color: ${dt('button.outlined.success.color')};\n}\n\n.p-button-outlined.p-button-success:not(:disabled):active {\n background: ${dt('button.outlined.success.active.background')};\n border-color: ${dt('button.outlined.success.border.color')};\n color: ${dt('button.outlined.success.color')};\n}\n\n.p-button-outlined.p-button-info {\n border-color: ${dt('button.outlined.info.border.color')};\n color: ${dt('button.outlined.info.color')};\n}\n\n.p-button-outlined.p-button-info:not(:disabled):hover {\n background: ${dt('button.outlined.info.hover.background')};\n border-color: ${dt('button.outlined.info.border.color')};\n color: ${dt('button.outlined.info.color')};\n}\n\n.p-button-outlined.p-button-info:not(:disabled):active {\n background: ${dt('button.outlined.info.active.background')};\n border-color: ${dt('button.outlined.info.border.color')};\n color: ${dt('button.outlined.info.color')};\n}\n\n.p-button-outlined.p-button-warn {\n border-color: ${dt('button.outlined.warn.border.color')};\n color: ${dt('button.outlined.warn.color')};\n}\n\n.p-button-outlined.p-button-warn:not(:disabled):hover {\n background: ${dt('button.outlined.warn.hover.background')};\n border-color: ${dt('button.outlined.warn.border.color')};\n color: ${dt('button.outlined.warn.color')};\n}\n\n.p-button-outlined.p-button-warn:not(:disabled):active {\n background: ${dt('button.outlined.warn.active.background')};\n border-color: ${dt('button.outlined.warn.border.color')};\n color: ${dt('button.outlined.warn.color')};\n}\n\n.p-button-outlined.p-button-help {\n border-color: ${dt('button.outlined.help.border.color')};\n color: ${dt('button.outlined.help.color')};\n}\n\n.p-button-outlined.p-button-help:not(:disabled):hover {\n background: ${dt('button.outlined.help.hover.background')};\n border-color: ${dt('button.outlined.help.border.color')};\n color: ${dt('button.outlined.help.color')};\n}\n\n.p-button-outlined.p-button-help:not(:disabled):active {\n background: ${dt('button.outlined.help.active.background')};\n border-color: ${dt('button.outlined.help.border.color')};\n color: ${dt('button.outlined.help.color')};\n}\n\n.p-button-outlined.p-button-danger {\n border-color: ${dt('button.outlined.danger.border.color')};\n color: ${dt('button.outlined.danger.color')};\n}\n\n.p-button-outlined.p-button-danger:not(:disabled):hover {\n background: ${dt('button.outlined.danger.hover.background')};\n border-color: ${dt('button.outlined.danger.border.color')};\n color: ${dt('button.outlined.danger.color')};\n}\n\n.p-button-outlined.p-button-danger:not(:disabled):active {\n background: ${dt('button.outlined.danger.active.background')};\n border-color: ${dt('button.outlined.danger.border.color')};\n color: ${dt('button.outlined.danger.color')};\n}\n\n.p-button-outlined.p-button-contrast {\n border-color: ${dt('button.outlined.contrast.border.color')};\n color: ${dt('button.outlined.contrast.color')};\n}\n\n.p-button-outlined.p-button-contrast:not(:disabled):hover {\n background: ${dt('button.outlined.contrast.hover.background')};\n border-color: ${dt('button.outlined.contrast.border.color')};\n color: ${dt('button.outlined.contrast.color')};\n}\n\n.p-button-outlined.p-button-contrast:not(:disabled):active {\n background: ${dt('button.outlined.contrast.active.background')};\n border-color: ${dt('button.outlined.contrast.border.color')};\n color: ${dt('button.outlined.contrast.color')};\n}\n\n.p-button-outlined.p-button-plain {\n border-color: ${dt('button.outlined.plain.border.color')};\n color: ${dt('button.outlined.plain.color')};\n}\n\n.p-button-outlined.p-button-plain:not(:disabled):hover {\n background: ${dt('button.outlined.plain.hover.background')};\n border-color: ${dt('button.outlined.plain.border.color')};\n color: ${dt('button.outlined.plain.color')};\n}\n\n.p-button-outlined.p-button-plain:not(:disabled):active {\n background: ${dt('button.outlined.plain.active.background')};\n border-color: ${dt('button.outlined.plain.border.color')};\n color: ${dt('button.outlined.plain.color')};\n}\n\n.p-button-text {\n background: transparent;\n border-color: transparent;\n color: ${dt('button.text.primary.color')};\n}\n\n.p-button-text:not(:disabled):hover {\n background: ${dt('button.text.primary.hover.background')};\n border-color: transparent;\n color: ${dt('button.text.primary.color')};\n}\n\n.p-button-text:not(:disabled):active {\n background: ${dt('button.text.primary.active.background')};\n border-color: transparent;\n color: ${dt('button.text.primary.color')};\n}\n\n.p-button-text.p-button-secondary {\n background: transparent;\n border-color: transparent;\n color: ${dt('button.text.secondary.color')};\n}\n\n.p-button-text.p-button-secondary:not(:disabled):hover {\n background: ${dt('button.text.secondary.hover.background')};\n border-color: transparent;\n color: ${dt('button.text.secondary.color')};\n}\n\n.p-button-text.p-button-secondary:not(:disabled):active {\n background: ${dt('button.text.secondary.active.background')};\n border-color: transparent;\n color: ${dt('button.text.secondary.color')};\n}\n\n.p-button-text.p-button-success {\n background: transparent;\n border-color: transparent;\n color: ${dt('button.text.success.color')};\n}\n\n.p-button-text.p-button-success:not(:disabled):hover {\n background: ${dt('button.text.success.hover.background')};\n border-color: transparent;\n color: ${dt('button.text.success.color')};\n}\n\n.p-button-text.p-button-success:not(:disabled):active {\n background: ${dt('button.text.success.active.background')};\n border-color: transparent;\n color: ${dt('button.text.success.color')};\n}\n\n.p-button-text.p-button-info {\n background: transparent;\n border-color: transparent;\n color: ${dt('button.text.info.color')};\n}\n\n.p-button-text.p-button-info:not(:disabled):hover {\n background: ${dt('button.text.info.hover.background')};\n border-color: transparent;\n color: ${dt('button.text.info.color')};\n}\n\n.p-button-text.p-button-info:not(:disabled):active {\n background: ${dt('button.text.info.active.background')};\n border-color: transparent;\n color: ${dt('button.text.info.color')};\n}\n\n.p-button-text.p-button-warn {\n background: transparent;\n border-color: transparent;\n color: ${dt('button.text.warn.color')};\n}\n\n.p-button-text.p-button-warn:not(:disabled):hover {\n background: ${dt('button.text.warn.hover.background')};\n border-color: transparent;\n color: ${dt('button.text.warn.color')};\n}\n\n.p-button-text.p-button-warn:not(:disabled):active {\n background: ${dt('button.text.warn.active.background')};\n border-color: transparent;\n color: ${dt('button.text.warn.color')};\n}\n\n.p-button-text.p-button-help {\n background: transparent;\n border-color: transparent;\n color: ${dt('button.text.help.color')};\n}\n\n.p-button-text.p-button-help:not(:disabled):hover {\n background: ${dt('button.text.help.hover.background')};\n border-color: transparent;\n color: ${dt('button.text.help.color')};\n}\n\n.p-button-text.p-button-help:not(:disabled):active {\n background: ${dt('button.text.help.active.background')};\n border-color: transparent;\n color: ${dt('button.text.help.color')};\n}\n\n.p-button-text.p-button-danger {\n background: transparent;\n border-color: transparent;\n color: ${dt('button.text.danger.color')};\n}\n\n.p-button-text.p-button-danger:not(:disabled):hover {\n background: ${dt('button.text.danger.hover.background')};\n border-color: transparent;\n color: ${dt('button.text.danger.color')};\n}\n\n.p-button-text.p-button-danger:not(:disabled):active {\n background: ${dt('button.text.danger.active.background')};\n border-color: transparent;\n color: ${dt('button.text.danger.color')};\n}\n\n.p-button-text.p-button-plain {\n background: transparent;\n border-color: transparent;\n color: ${dt('button.text.plain.color')};\n}\n\n.p-button-text.p-button-plain:not(:disabled):hover {\n background: ${dt('button.text.plain.hover.background')};\n border-color: transparent;\n color: ${dt('button.text.plain.color')};\n}\n\n.p-button-text.p-button-plain:not(:disabled):active {\n background: ${dt('button.text.plain.active.background')};\n border-color: transparent;\n color: ${dt('button.text.plain.color')};\n}\n\n.p-button-text.p-button-contrast {\n background: transparent;\n border-color: transparent;\n color: ${dt('button.text.contrast.color')};\n}\n\n.p-button-text.p-button-contrast:not(:disabled):hover {\n background: ${dt('button.text.contrast.hover.background')};\n border-color: transparent;\n color: ${dt('button.text.contrast.color')};\n}\n\n.p-button-text.p-button-contrast:not(:disabled):active {\n background: ${dt('button.text.contrast.active.background')};\n border-color: transparent;\n color: ${dt('button.text.contrast.color')};\n}\n\n.p-button-link {\n background: transparent;\n border-color: transparent;\n color: ${dt('button.link.color')};\n}\n\n.p-button-link:not(:disabled):hover {\n background: transparent;\n border-color: transparent;\n color: ${dt('button.link.hover.color')};\n}\n\n.p-button-link:not(:disabled):hover .p-button-label {\n text-decoration: underline;\n}\n\n.p-button-link:not(:disabled):active {\n background: transparent;\n border-color: transparent;\n color: ${dt('button.link.active.color')};\n}\n\n/* For PrimeNG */\n.p-button-icon-right {\n order: 1;\n}\n\np-button[iconpos='right'] spinnericon {\n order: 1;\n}\n`;\n\nconst classes = {\n root: ({ instance, props }) => [\n 'p-button p-component',\n {\n 'p-button-icon-only': instance.hasIcon && !props.label && !props.badge,\n 'p-button-vertical': (props.iconPos === 'top' || props.iconPos === 'bottom') && props.label,\n 'p-button-loading': props.loading,\n 'p-button-link': props.link,\n [`p-button-${props.severity}`]: props.severity,\n 'p-button-raised': props.raised,\n 'p-button-rounded': props.rounded,\n 'p-button-text': props.text,\n 'p-button-outlined': props.outlined,\n 'p-button-sm': props.size === 'small',\n 'p-button-lg': props.size === 'large',\n 'p-button-plain': props.plain,\n 'p-button-fluid': props.fluid\n }\n ],\n loadingIcon: 'p-button-loading-icon',\n icon: ({ props }) => [\n 'p-button-icon',\n {\n [`p-button-icon-${props.iconPos}`]: props.label\n }\n ],\n label: 'p-button-label'\n};\n\n@Injectable()\nexport class ButtonStyle extends BaseStyle {\n name = 'button';\n\n theme = theme;\n\n classes = classes;\n}\n\n/**\n *\n * Button is an extension to standard button element with icons and theming.\n *\n * [Live Demo](https://www.primeng.org/button/)\n *\n * @module buttonstyle\n *\n */\nexport enum ButtonClasses {\n /**\n * Class name of the root element\n */\n root = 'p-button',\n /**\n * Class name of the loading icon element\n */\n loadingIcon = 'p-button-loading-icon',\n /**\n * Class name of the icon element\n */\n icon = 'p-button-icon',\n /**\n * Class name of the label element\n */\n label = 'p-button-label'\n}\n\nexport interface ButtonStyle extends BaseStyle {}\n","import { CommonModule } from '@angular/common';\nimport {\n AfterContentInit,\n AfterViewInit,\n booleanAttribute,\n ChangeDetectionStrategy,\n Component,\n computed,\n contentChild,\n ContentChild,\n ContentChildren,\n Directive,\n EventEmitter,\n inject,\n Input,\n NgModule,\n numberAttribute,\n OnDestroy,\n Output,\n QueryList,\n SimpleChanges,\n TemplateRef,\n ViewEncapsulation\n} from '@angular/core';\nimport { addClass, findSingle, isEmpty } from '@primeuix/utils';\nimport { PrimeTemplate, SharedModule } from 'primeng/api';\nimport { AutoFocus } from 'primeng/autofocus';\nimport { BadgeModule } from 'primeng/badge';\nimport { BaseComponent } from 'primeng/basecomponent';\nimport { SpinnerIcon } from 'primeng/icons';\nimport { Ripple } from 'primeng/ripple';\nimport { ButtonProps } from './button.interface';\nimport { ButtonStyle } from './style/buttonstyle';\n\ntype ButtonIconPosition = 'left' | 'right' | 'top' | 'bottom';\n\nconst INTERNAL_BUTTON_CLASSES = {\n button: 'p-button',\n component: 'p-component',\n iconOnly: 'p-button-icon-only',\n disabled: 'p-disabled',\n loading: 'p-button-loading',\n labelOnly: 'p-button-loading-label-only'\n} as const;\n\n@Directive({\n selector: '[pButtonLabel]',\n providers: [ButtonStyle],\n standalone: true,\n host: {\n '[class.p-button-label]': 'true'\n }\n})\nexport class ButtonLabel extends BaseComponent {\n _componentStyle = inject(ButtonStyle);\n}\n\n@Directive({\n selector: '[pButtonIcon]',\n providers: [ButtonStyle],\n standalone: true,\n host: {\n '[class.p-button-icon]': 'true'\n }\n})\nexport class ButtonIcon extends BaseComponent {\n _componentStyle = inject(ButtonStyle);\n}\n/**\n * Button directive is an extension to button component.\n * @group Components\n */\n@Directive({\n selector: '[pButton]',\n standalone: true,\n providers: [ButtonStyle],\n host: {\n '[class.p-button-icon-only]': 'isIconOnly()',\n '[class.p-button-text]': 'isTextButton()'\n }\n})\nexport class ButtonDirective extends BaseComponent implements AfterViewInit, OnDestroy {\n /**\n * Position of the icon.\n * @deprecated utilize pButtonIcon and pButtonLabel directives.\n * @group Props\n */\n @Input() iconPos: ButtonIconPosition = 'left';\n /**\n * Uses to pass attributes to the loading icon's DOM element.\n * @deprecated utilize pButonIcon instead.\n * @group Props\n */\n @Input() loadingIcon: string | undefined;\n\n set label(val: string) {\n this._label = val;\n\n if (this.initialized) {\n this.updateLabel();\n this.updateIcon();\n this.setStyleClass();\n }\n }\n\n set icon(val: string) {\n this._icon = val;\n\n if (this.initialized) {\n this.updateIcon();\n this.setStyleClass();\n }\n }\n /**\n * Whether the button is in loading state.\n * @group Props\n */\n @Input() get loading(): boolean {\n return this._loading;\n }\n set loading(val: boolean) {\n this._loading = val;\n\n if (this.initialized) {\n this.updateIcon();\n this.setStyleClass();\n }\n }\n _buttonProps!: ButtonProps;\n\n private iconSignal = contentChild(ButtonIcon);\n\n private labelSignal = contentChild(ButtonLabel);\n\n isIconOnly = computed(() => !!(!this.labelSignal() && this.iconSignal()));\n\n set buttonProps(val: ButtonProps) {\n this._buttonProps = val;\n\n if (val && typeof val === 'object') {\n //@ts-ignore\n Object.entries(val).forEach(([k, v]) => this[`_${k}`] !== v && (this[`_${k}`] = v));\n }\n }\n /**\n * Defines the style of the button.\n * @group Props\n */\n @Input() severity: 'success' | 'info' | 'warn' | 'danger' | 'help' | 'primary' | 'secondary' | 'contrast' | null | undefined;\n /**\n * Add a shadow to indicate elevation.\n * @group Props\n */\n @Input({ transform: booleanAttribute }) raised: boolean = false;\n /**\n * Add a circular border radius to the button.\n * @group Props\n */\n @Input({ transform: booleanAttribute }) rounded: boolean = false;\n /**\n * Add a textual class to the button without a background initially.\n * @group Props\n */\n @Input({ transform: booleanAttribute }) text: boolean = false;\n /**\n * Add a border class without a background initially.\n * @group Props\n */\n @Input({ transform: booleanAttribute }) outlined: boolean = false;\n /**\n * Defines the size of the button.\n * @group Props\n */\n @Input() size: 'small' | 'large' | undefined | null = null;\n /**\n * Add a plain textual class to the button without a background initially.\n * @deprecated use variant property instead.\n * @group Props\n */\n @Input({ transform: booleanAttribute }) plain: boolean = false;\n /**\n * Spans 100% width of the container when enabled.\n * @group Props\n */\n @Input({ transform: booleanAttribute }) fluid: boolean | undefined;\n\n public _label: string | undefined;\n\n public _icon: string | undefined;\n\n public _loading: boolean = false;\n\n public initialized: boolean | undefined;\n\n private get htmlElement(): HTMLElement {\n return this.el.nativeElement as HTMLElement;\n }\n\n private _internalClasses: string[] = Object.values(INTERNAL_BUTTON_CLASSES);\n\n isTextButton = computed(() => !!(!this.iconSignal() && this.labelSignal() && this.text));\n\n /**\n * Text of the button.\n * @deprecated use pButtonLabel directive instead.\n * @group Props\n */\n @Input() get label(): string | undefined {\n return this._label as string;\n }\n\n /**\n * Name of the icon.\n * @deprecated use pButtonIcon directive instead\n * @group Props\n */\n @Input() get icon(): string {\n return this._icon as string;\n }\n\n /**\n * Used to pass all properties of the ButtonProps to the Button component.\n * @deprecated assign props directly to the button element.\n * @group Props\n */\n @Input() get buttonProps(): ButtonProps {\n return this._buttonProps;\n }\n\n spinnerIcon = `<svg width=\"14\" height=\"14\" viewBox=\"0 0 14 14\" fill=\"none\" xmlns=\"http://www.w3.org/2000/svg\" class=\"p-icon-spin\">\n <g clip-path=\"url(#clip0_417_21408)\">\n <path\n d=\"M6.99701 14C5.85441 13.999 4.72939 13.7186 3.72012 13.1832C2.71084 12.6478 1.84795 11.8737 1.20673 10.9284C0.565504 9.98305 0.165424 8.89526 0.041387 7.75989C-0.0826496 6.62453 0.073125 5.47607 0.495122 4.4147C0.917119 3.35333 1.59252 2.4113 2.46241 1.67077C3.33229 0.930247 4.37024 0.413729 5.4857 0.166275C6.60117 -0.0811796 7.76026 -0.0520535 8.86188 0.251112C9.9635 0.554278 10.9742 1.12227 11.8057 1.90555C11.915 2.01493 11.9764 2.16319 11.9764 2.31778C11.9764 2.47236 11.915 2.62062 11.8057 2.73C11.7521 2.78503 11.688 2.82877 11.6171 2.85864C11.5463 2.8885 11.4702 2.90389 11.3933 2.90389C11.3165 2.90389 11.2404 2.8885 11.1695 2.85864C11.0987 2.82877 11.0346 2.78503 10.9809 2.73C9.9998 1.81273 8.73246 1.26138 7.39226 1.16876C6.05206 1.07615 4.72086 1.44794 3.62279 2.22152C2.52471 2.99511 1.72683 4.12325 1.36345 5.41602C1.00008 6.70879 1.09342 8.08723 1.62775 9.31926C2.16209 10.5513 3.10478 11.5617 4.29713 12.1803C5.48947 12.7989 6.85865 12.988 8.17414 12.7157C9.48963 12.4435 10.6711 11.7264 11.5196 10.6854C12.3681 9.64432 12.8319 8.34282 12.8328 7C12.8328 6.84529 12.8943 6.69692 13.0038 6.58752C13.1132 6.47812 13.2616 6.41667 13.4164 6.41667C13.5712 6.41667 13.7196 6.47812 13.8291 6.58752C13.9385 6.69692 14 6.84529 14 7C14 8.85651 13.2622 10.637 11.9489 11.9497C10.6356 13.2625 8.85432 14 6.99701 14Z\"\n fill=\"currentColor\"\n />\n </g>\n <defs>\n <clipPath id=\"clip0_417_21408\">\n <rect width=\"14\" height=\"14\" fill=\"white\" />\n </clipPath>\n </defs>\n </svg>`;\n\n _componentStyle = inject(ButtonStyle);\n\n ngAfterViewInit() {\n super.ngAfterViewInit();\n addClass(this.htmlElement, this.getStyleClass().join(' '));\n\n this.createIcon();\n this.createLabel();\n\n this.initialized = true;\n }\n\n ngOnChanges(simpleChanges: SimpleChanges) {\n super.ngOnChanges(simpleChanges);\n const { buttonProps } = simpleChanges;\n\n if (buttonProps) {\n const props = buttonProps.currentValue;\n\n for (const property in props) {\n this[property] = props[property];\n }\n }\n }\n\n getStyleClass(): string[] {\n const styleClass: string[] = [INTERNAL_BUTTON_CLASSES.button, INTERNAL_BUTTON_CLASSES.component];\n\n if (this.icon && !this.label && isEmpty(this.htmlElement.textContent)) {\n styleClass.push(INTERNAL_BUTTON_CLASSES.iconOnly);\n }\n\n if (this.loading) {\n styleClass.push(INTERNAL_BUTTON_CLASSES.disabled, INTERNAL_BUTTON_CLASSES.loading);\n\n if (!this.icon && this.label) {\n styleClass.push(INTERNAL_BUTTON_CLASSES.labelOnly);\n }\n\n if (this.icon && !this.label && !isEmpty(this.htmlElement.textContent)) {\n styleClass.push(INTERNAL_BUTTON_CLASSES.iconOnly);\n }\n }\n\n if (this.text) {\n styleClass.push('p-button-text');\n }\n\n if (this.severity) {\n styleClass.push(`p-button-${this.severity}`);\n }\n\n if (this.plain) {\n styleClass.push('p-button-plain');\n }\n\n if (this.raised) {\n styleClass.push('p-button-raised');\n }\n\n if (this.size) {\n styleClass.push(`p-button-${this.size}`);\n }\n\n if (this.outlined) {\n styleClass.push('p-button-outlined');\n }\n\n if (this.rounded) {\n styleClass.push('p-button-rounded');\n }\n\n if (this.size === 'small') {\n styleClass.push('p-button-sm');\n }\n\n if (this.size === 'large') {\n styleClass.push('p-button-lg');\n }\n\n if (this.hasFluid) {\n styleClass.push('p-button-fluid');\n }\n\n return styleClass;\n }\n\n get hasFluid() {\n const nativeElement = this.el.nativeElement;\n const fluidComponent = nativeElement.closest('p-fluid');\n\n return isEmpty(this.fluid) ? !!fluidComponent : this.fluid;\n }\n\n setStyleClass() {\n const styleClass = this.getStyleClass();\n this.htmlElement.classList.remove(...this._internalClasses);\n this.htmlElement.classList.add(...styleClass);\n }\n\n createLabel() {\n const created = findSingle(this.htmlElement, '.p-button-label');\n if (!created && this.label) {\n let labelElement = this.document.createElement('span');\n if (this.icon && !this.label) {\n labelElement.setAttribute('aria-hidden', 'true');\n }\n\n labelElement.className = 'p-button-label';\n labelElement.appendChild(this.document.createTextNode(this.label));\n\n this.htmlElement.appendChild(labelElement);\n }\n }\n\n createIcon() {\n const created = findSingle(this.htmlElement, '.p-button-icon');\n if (!created && (this.icon || this.loading)) {\n let iconElement = this.document.createElement('span');\n iconElement.className = 'p-button-icon';\n iconElement.setAttribute('aria-hidden', 'true');\n let iconPosClass = this.label ? 'p-button-icon-' + this.iconPos : null;\n\n if (iconPosClass) {\n addClass(iconElement, iconPosClass);\n }\n\n let iconClass = this.getIconClass();\n\n if (iconClass) {\n addClass(iconElement, iconClass);\n }\n\n if (!this.loadingIcon && this.loading) {\n iconElement.innerHTML = this.spinnerIcon;\n }\n\n this.htmlElement.insertBefore(iconElement, this.htmlElement.firstChild);\n }\n }\n\n updateLabel() {\n let labelElement = findSingle(this.htmlElement, '.p-button-label');\n\n if (!this.label) {\n labelElement && this.htmlElement.removeChild(labelElement);\n return;\n }\n\n labelElement ? (labelElement.textContent = this.label) : this.createLabel();\n }\n\n updateIcon() {\n let iconElement = findSingle(this.htmlElement, '.p-button-icon');\n let labelElement = findSingle(this.htmlElement, '.p-button-label');\n\n if (this.loading && !this.loadingIcon && iconElement) {\n iconElement.innerHTML = this.spinnerIcon;\n } else if (iconElement?.innerHTML) {\n iconElement.innerHTML = '';\n }\n\n if (iconElement) {\n if (this.iconPos) {\n iconElement.className = 'p-button-icon ' + (labelElement ? 'p-button-icon-' + this.iconPos : '') + ' ' + this.getIconClass();\n } else {\n iconElement.className = 'p-button-icon ' + this.getIconClass();\n }\n } else {\n this.createIcon();\n }\n }\n\n getIconClass() {\n return this.loading ? 'p-button-loading-icon ' + (this.loadingIcon ? this.loadingIcon : 'p-icon') : this.icon || 'p-hidden';\n }\n\n ngOnDestroy() {\n this.initialized = false;\n super.ngOnDestroy();\n }\n}\n/**\n * Button is an extension to standard button element with icons and theming.\n * @group Components\n */\n@Component({\n selector: 'p-button',\n standalone: true,\n imports: [CommonModule, Ripple, AutoFocus, SpinnerIcon, BadgeModule, SharedModule],\n template: `\n <button\n [attr.type]=\"type\"\n [attr.aria-label]=\"ariaLabel\"\n [ngStyle]=\"style\"\n [disabled]=\"disabled || loading\"\n [ngClass]=\"buttonClass\"\n (click)=\"onClick.emit($event)\"\n (focus)=\"onFocus.emit($event)\"\n (blur)=\"onBlur.emit($event)\"\n pRipple\n [attr.data-pc-name]=\"'button'\"\n [attr.data-pc-section]=\"'root'\"\n [attr.tabindex]=\"tabindex\"\n [pAutoFocus]=\"autofocus\"\n >\n <ng-content></ng-content>\n <ng-container *ngTemplateOutlet=\"contentTemplate || _contentTemplate\"></ng-container>\n <ng-container *ngIf=\"loading\">\n <ng-container *ngIf=\"!loadingIconTemplate && !_loadingIconTemplate\">\n <span *ngIf=\"loadingIcon\" [ngClass]=\"iconClass()\" [attr.aria-hidden]=\"true\" [attr.data-pc-section]=\"'loadingicon'\"></span>\n <SpinnerIcon *ngIf=\"!loadingIcon\" [styleClass]=\"spinnerIconClass()\" [spin]=\"true\" [attr.aria-hidden]=\"true\" [attr.data-pc-section]=\"'loadingicon'\" />\n </ng-container>\n <ng-template [ngIf]=\"loadingIconTemplate || _loadingIconTemplate\" *ngTemplateOutlet=\"loadingIconTemplate || _loadingIconTemplate; context: { class: iconClass() }\"></ng-template>\n </ng-container>\n <ng-container *ngIf=\"!loading\">\n <span *ngIf=\"icon && !iconTemplate && !_iconTemplate\" [class]=\"icon\" [ngClass]=\"iconClass()\" [attr.data-pc-section]=\"'icon'\"></span>\n <ng-template [ngIf]=\"!icon && (iconTemplate || _iconTemplate)\" *ngTemplateOutlet=\"iconTemplate || _iconTemplate; context: { class: iconClass() }\"></ng-template>\n </ng-container>\n <span class=\"p-button-label\" [attr.aria-hidden]=\"icon && !label\" *ngIf=\"!contentTemplate && !_contentTemplate && label\" [attr.data-pc-section]=\"'label'\">{{ label }}</span>\n <p-badge *ngIf=\"!contentTemplate && !_contentTemplate && badge\" [value]=\"badge\" [severity]=\"badgeSeverity\"></p-badge>\n </button>\n `,\n changeDetection: ChangeDetectionStrategy.OnPush,\n encapsulation: ViewEncapsulation.None,\n providers: [ButtonStyle]\n})\nexport class Button extends BaseComponent implements AfterContentInit {\n /**\n * Type of the button.\n * @group Props\n */\n @Input() type: string = 'button';\n /**\n * Position of the icon.\n * @group Props\n */\n @Input() iconPos: ButtonIconPosition = 'left';\n /**\n * Name of the icon.\n * @group Props\n */\n @Input() icon: string | undefined;\n /**\n * Value of the badge.\n * @group Props\n */\n @Input() badge: string | undefined;\n /**\n * Uses to pass attributes to the label's DOM element.\n * @group Props\n */\n @Input() label: string | undefined;\n /**\n * When present, it specifies that the component should be disabled.\n * @group Props\n */\n @Input({ transform: booleanAttribute }) disabled: boolean | undefined;\n /**\n * Whether the button is in loading state.\n * @group Props\n */\n @Input({ transform: booleanAttribute }) loading: boolean = false;\n /**\n * Icon to display in loading state.\n * @group Props\n */\n @Input() loadingIcon: string | undefined;\n /**\n * Add a shadow to indicate elevation.\n * @group Props\n */\n @Input({ transform: booleanAttribute }) raised: boolean = false;\n /**\n * Add a circular border radius to the button.\n * @group Props\n */\n @Input({ transform: booleanAttribute }) rounded: boolean = false;\n /**\n * Add a textual class to the button without a background initially.\n * @group Props\n */\n @Input({ transform: booleanAttribute }) text: boolean = false;\n /**\n * Add a plain textual class to the button without a background initially.\n * @deprecated use variant property instead.\n * @group Props\n */\n @Input({ transform: booleanAttribute }) plain: boolean = false;\n /**\n * Defines the style of the button.\n * @group Props\n */\n @Input() severity: 'success' | 'info' | 'warn' | 'danger' | 'help' | 'primary' | 'secondary' | 'contrast' | null | undefined;\n /**\n * Add a border class without a background initially.\n * @group Props\n */\n @Input({ transform: booleanAttribute }) outlined: boolean = false;\n /**\n * Add a link style to the button.\n * @group Props\n */\n @Input({ transform: booleanAttribute }) link: boolean = false;\n /**\n * Add a tabindex to the button.\n * @group Props\n */\n @Input({ transform: numberAttribute }) tabindex: number | undefined;\n /**\n * Defines the size of the button.\n * @group Props\n */\n @Input() size: 'small' | 'large' | undefined;\n /**\n * Specifies the variant of the component.\n * @group Props\n */\n @Input() variant: 'outlined' | 'text' | undefined;\n /**\n * Inline style of the element.\n * @group Props\n */\n @Input() style: { [klass: string]: any } | null | undefined;\n /**\n * Class of the element.\n * @group Props\n */\n @Input() styleClass: string | undefined;\n /**\n * Style class of the badge.\n * @group Props\n * @deprecated use badgeSeverity instead.\n */\n @Input() badgeClass: string | undefined;\n /**\n * Severity type of the badge.\n * @group Props\n * @defaultValue secondary\n */\n @Input() badgeSeverity: 'success' | 'info' | 'warn' | 'danger' | 'help' | 'primary' | 'secondary' | 'contrast' | null | undefined = 'secondary';\n /**\n * Used to define a string that autocomplete attribute the current element.\n * @group Props\n */\n @Input() ariaLabel: string | undefined;\n /**\n * When present, it specifies that the component should automatically get focus on load.\n * @group Props\n */\n @Input({ transform: booleanAttribute }) autofocus: boolean | undefined;\n /**\n * Spans 100% width of the container when enabled.\n * @group Props\n */\n @Input({ transform: booleanAttribute }) fluid: boolean | undefined;\n /**\n * Callback to execute when button is clicked.\n * This event is intended to be used with the <p-button> component. Using a regular <button> element, use (click).\n * @param {MouseEvent} event - Mouse event.\n * @group Emits\n */\n @Output() onClick: EventEmitter<MouseEvent> = new EventEmitter();\n /**\n * Callback to execute when button is focused.\n * This event is intended to be used with the <p-button> component. Using a regular <button> element, use (focus).\n * @param {FocusEvent} event - Focus event.\n * @group Emits\n */\n @Output() onFocus: EventEmitter<FocusEvent> = new EventEmitter<FocusEvent>();\n /**\n * Callback to execute when button loses focus.\n * This event is intended to be used with the <p-button> component. Using a regular <button> element, use (blur).\n * @param {FocusEvent} event - Focus event.\n * @group Emits\n */\n @Output() onBlur: EventEmitter<FocusEvent> = new EventEmitter<FocusEvent>();\n /**\n * Template of the content.\n * @group Templates\n **/\n @ContentChild('content') contentTemplate: TemplateRef<any> | undefined;\n /**\n * Template of the loading.\n * @group Templates\n **/\n @ContentChild('loading') loadingIconTemplate: TemplateRef<any> | undefined;\n /**\n * Template of the icon.\n * @group Templates\n **/\n @ContentChild('icon') iconTemplate: TemplateRef<any> | undefined;\n\n _buttonProps: any | undefined;\n /**\n * Used to pass all properties of the ButtonProps to the Button component.\n * @group Props\n */\n @Input() get buttonProps(): any | undefined {\n return this._buttonProps;\n }\n set buttonProps(val: any | undefined) {\n this._buttonProps = val;\n\n if (val && typeof val === 'object') {\n //@ts-ignore\n Object.entries(val).forEach(([k, v]) => this[`_${k}`] !== v && (this[`_${k}`] = v));\n }\n }\n\n get hasFluid() {\n const nativeElement = this.el.nativeElement;\n const fluidComponent = nativeElement.closest('p-fluid');\n\n return isEmpty(this.fluid) ? !!fluidComponent : this.fluid;\n }\n\n _componentStyle = inject(ButtonStyle);\n\n @ContentChildren(PrimeTemplate) templates: QueryList<PrimeTemplate> | undefined;\n\n _contentTemplate: TemplateRef<any> | undefined;\n\n _iconTemplate: TemplateRef<any> | undefined;\n\n _loadingIconTemplate: TemplateRef<any> | undefined;\n\n ngAfterContentInit() {\n this.templates?.forEach((item) => {\n switch (item.getType()) {\n case 'content':\n this._contentTemplate = item.template;\n break;\n\n case 'icon':\n this._iconTemplate = item.template;\n break;\n\n case 'loadingicon':\n this._loadingIconTemplate = item.template;\n break;\n\n default:\n this._contentTemplate = item.template;\n break;\n }\n });\n }\n\n ngOnChanges(simpleChanges: SimpleChanges) {\n super.ngOnChanges(simpleChanges);\n const { buttonProps } = simpleChanges;\n\n if (buttonProps) {\n const props = buttonProps.currentValue;\n\n for (const property in props) {\n this[property] = props[property];\n }\n }\n }\n\n spinnerIconClass(): string {\n return Object.entries(this.iconClass())\n .filter(([, value]) => !!value)\n .reduce((acc, [key]) => acc + ` ${key}`, 'p-button-loading-icon');\n }\n\n iconClass() {\n return {\n [`p-button-loading-icon pi-spin ${this.loadingIcon ?? ''}`]: this.loading,\n 'p-button-icon': true,\n 'p-button-icon-left': this.iconPos === 'left' && this.label,\n 'p-button-icon-right': this.iconPos === 'right' && this.label,\n 'p-button-icon-top': this.iconPos === 'top' && this.label,\n 'p-button-icon-bottom': this.iconPos === 'bottom' && this.label\n };\n }\n\n get buttonClass() {\n return {\n 'p-button p-component': true,\n 'p-button-icon-only': (this.icon || this.iconTemplate || this._iconTemplate || this.loadingIcon || this.loadingIconTemplate || this._loadingIconTemplate) && !this.label,\n 'p-button-vertical': (this.iconPos === 'top' || this.iconPos === 'bottom') && this.label,\n 'p-button-loading': this.loading,\n 'p-button-loading-label-only': this.loading && !this.icon && this.label && !this.loadingIcon && this.iconPos === 'left',\n 'p-button-link': this.link,\n [`p-button-${this.severity}`]: this.severity,\n 'p-button-raised': this.raised,\n 'p-button-rounded': this.rounded,\n 'p-button-text': this.text || this.variant == 'text',\n 'p-button-outlined': this.outlined || this.variant == 'outlined',\n 'p-button-sm': this.size === 'small',\n 'p-button-lg': this.size === 'large',\n 'p-button-plain': this.plain,\n 'p-button-fluid': this.hasFluid,\n [`${this.styleClass}`]: this.styleClass\n };\n }\n}\n\n@NgModule({\n imports: [CommonModule, ButtonDirective, Button, SharedModule, ButtonLabel, ButtonIcon],\n exports: [ButtonDirective, Button, ButtonLabel, ButtonIcon, SharedModule]\n})\nexport class ButtonModule {}\n","/**\n * Generated bundle index. Do not edit.\n */\n\nexport * from './public_api';\n"],"names":[],"mappings":";;;;;;;;;;;;;;AAGA,MAAM,KAAK,GAAG,CAAC,EAAE,EAAE,EAAE,KAAK;;;;;;;;;aASb,EAAE,CAAC,sBAAsB,CAAC,CAAA;kBACrB,EAAE,CAAC,2BAA2B,CAAC,CAAA;wBACzB,EAAE,CAAC,6BAA6B,CAAC,CAAA;qBACpC,EAAE,CAAC,kBAAkB,CAAC,CAAA;sBACrB,EAAE,CAAC,kBAAkB,CAAC,CAAA;;;;AAIf,2BAAA,EAAA,EAAE,CAAC,4BAA4B,CAAC,CAAA,QAAA,EAAW,EAAE,CAAC,4BAA4B,CAAC,CAAkB,eAAA,EAAA,EAAE,CAAC,4BAA4B,CAAC,CAAA;AAC9H,0BAAA,EAAA,EAAE,CAAC,4BAA4B,CAAC,gBAAgB,EAAE,CAAC,4BAA4B,CAAC,CAAA;qBACvF,EAAE,CAAC,sBAAsB,CAAC,CAAA;;WAEpC,EAAE,CAAC,YAAY,CAAC,CAAA;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;aA8Bd,EAAE,CAAC,wBAAwB,CAAC,CAAA;;;;;;;;cAQ3B,EAAE,CAAC,wBAAwB,CAAC,CAAA;;;;;;;;;iBASzB,EAAE,CAAC,qBAAqB,CAAC,CAAA;qBACrB,EAAE,CAAC,qBAAqB,CAAC,CAAA;sBACxB,EAAE,CAAC,qBAAqB,CAAC,CAAA;;;;iBAI9B,EAAE,CAAC,qBAAqB,CAAC,CAAA;;;;iBAIzB,EAAE,CAAC,qBAAqB,CAAC,CAAA;qBACrB,EAAE,CAAC,qBAAqB,CAAC,CAAA;sBACxB,EAAE,CAAC,qBAAqB,CAAC,CAAA;;;;iBAI9B,EAAE,CAAC,qBAAqB,CAAC,CAAA;;;;;;;;mBAQvB,EAAE,CAAC,0BAA0B,CAAC,CAAA;;;;;;;;aAQpC,EAAE,CAAC,wBAAwB,CAAC,CAAA;;;;kBAIvB,EAAE,CAAC,iCAAiC,CAAC,CAAA;wBAC/B,EAAE,CAAC,mCAAmC,CAAC,CAAA;aAClD,EAAE,CAAC,4BAA4B,CAAC,CAAA;;;;kBAI3B,EAAE,CAAC,kCAAkC,CAAC,CAAA;wBAChC,EAAE,CAAC,oCAAoC,CAAC,CAAA;aACnD,EAAE,CAAC,6BAA6B,CAAC,CAAA;;;;kBAI5B,EAAE,CAAC,kCAAkC,CAAC,CAAA;AACzC,aAAA,EAAA,EAAE,CAAC,yBAAyB,CAAC,CAAA,CAAA,EAAI,EAAE,CAAC,yBAAyB,CAAC,CAAI,CAAA,EAAA,EAAE,CAAC,iCAAiC,CAAC,CAAA;sBAChG,EAAE,CAAC,0BAA0B,CAA