@rt-tools/ui-kit-v2 0.33.0 → 0.34.1
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/README.md +4 -3
- package/fesm2022/rt-tools-ui-kit-v2-ai-run-status.mjs +1 -0
- package/fesm2022/rt-tools-ui-kit-v2-ai-run-status.mjs.map +1 -1
- package/fesm2022/rt-tools-ui-kit-v2-autocomplete.mjs +92 -5
- package/fesm2022/rt-tools-ui-kit-v2-autocomplete.mjs.map +1 -1
- package/fesm2022/rt-tools-ui-kit-v2-badge.mjs +191 -0
- package/fesm2022/rt-tools-ui-kit-v2-badge.mjs.map +1 -0
- package/fesm2022/rt-tools-ui-kit-v2-breadcrumbs.mjs +3 -2
- package/fesm2022/rt-tools-ui-kit-v2-breadcrumbs.mjs.map +1 -1
- package/fesm2022/rt-tools-ui-kit-v2-button.mjs +6 -1
- package/fesm2022/rt-tools-ui-kit-v2-button.mjs.map +1 -1
- package/fesm2022/rt-tools-ui-kit-v2-checkbox.mjs +35 -4
- package/fesm2022/rt-tools-ui-kit-v2-checkbox.mjs.map +1 -1
- package/fesm2022/rt-tools-ui-kit-v2-color-palette.mjs +13 -4
- package/fesm2022/rt-tools-ui-kit-v2-color-palette.mjs.map +1 -1
- package/fesm2022/rt-tools-ui-kit-v2-container.mjs +245 -60
- package/fesm2022/rt-tools-ui-kit-v2-container.mjs.map +1 -1
- package/fesm2022/rt-tools-ui-kit-v2-copy-value.mjs +30 -5
- package/fesm2022/rt-tools-ui-kit-v2-copy-value.mjs.map +1 -1
- package/fesm2022/rt-tools-ui-kit-v2-core.mjs +113 -2
- package/fesm2022/rt-tools-ui-kit-v2-core.mjs.map +1 -1
- package/fesm2022/rt-tools-ui-kit-v2-data-list.mjs +14 -3
- package/fesm2022/rt-tools-ui-kit-v2-data-list.mjs.map +1 -1
- package/fesm2022/rt-tools-ui-kit-v2-data-table.mjs +17 -3
- package/fesm2022/rt-tools-ui-kit-v2-data-table.mjs.map +1 -1
- package/fesm2022/rt-tools-ui-kit-v2-date-picker.mjs +6 -3
- package/fesm2022/rt-tools-ui-kit-v2-date-picker.mjs.map +1 -1
- package/fesm2022/rt-tools-ui-kit-v2-date-range.mjs +2 -2
- package/fesm2022/rt-tools-ui-kit-v2-date-range.mjs.map +1 -1
- package/fesm2022/rt-tools-ui-kit-v2-divider.mjs +112 -0
- package/fesm2022/rt-tools-ui-kit-v2-divider.mjs.map +1 -0
- package/fesm2022/rt-tools-ui-kit-v2-draggable-tree.mjs +1 -0
- package/fesm2022/rt-tools-ui-kit-v2-draggable-tree.mjs.map +1 -1
- package/fesm2022/rt-tools-ui-kit-v2-drawer.mjs +854 -0
- package/fesm2022/rt-tools-ui-kit-v2-drawer.mjs.map +1 -0
- package/fesm2022/rt-tools-ui-kit-v2-dynamic-list.mjs +16 -5
- package/fesm2022/rt-tools-ui-kit-v2-dynamic-list.mjs.map +1 -1
- package/fesm2022/rt-tools-ui-kit-v2-dynamic-selector.mjs +580 -65
- package/fesm2022/rt-tools-ui-kit-v2-dynamic-selector.mjs.map +1 -1
- package/fesm2022/rt-tools-ui-kit-v2-expansion-panel.mjs +203 -15
- package/fesm2022/rt-tools-ui-kit-v2-expansion-panel.mjs.map +1 -1
- package/fesm2022/rt-tools-ui-kit-v2-field.mjs +40 -8
- package/fesm2022/rt-tools-ui-kit-v2-field.mjs.map +1 -1
- package/fesm2022/rt-tools-ui-kit-v2-file-card.mjs +1 -0
- package/fesm2022/rt-tools-ui-kit-v2-file-card.mjs.map +1 -1
- package/fesm2022/rt-tools-ui-kit-v2-filter-control.mjs +7 -3
- package/fesm2022/rt-tools-ui-kit-v2-filter-control.mjs.map +1 -1
- package/fesm2022/rt-tools-ui-kit-v2-form-control.mjs +53 -2
- package/fesm2022/rt-tools-ui-kit-v2-form-control.mjs.map +1 -1
- package/fesm2022/rt-tools-ui-kit-v2-hybrid-tree-selector.mjs +14 -4
- package/fesm2022/rt-tools-ui-kit-v2-hybrid-tree-selector.mjs.map +1 -1
- package/fesm2022/rt-tools-ui-kit-v2-hybrid-tree.mjs +6 -3
- package/fesm2022/rt-tools-ui-kit-v2-hybrid-tree.mjs.map +1 -1
- package/fesm2022/rt-tools-ui-kit-v2-icon-button.mjs +16 -5
- package/fesm2022/rt-tools-ui-kit-v2-icon-button.mjs.map +1 -1
- package/fesm2022/rt-tools-ui-kit-v2-image-upload.mjs +1 -0
- package/fesm2022/rt-tools-ui-kit-v2-image-upload.mjs.map +1 -1
- package/fesm2022/rt-tools-ui-kit-v2-inline-edit.mjs +14 -4
- package/fesm2022/rt-tools-ui-kit-v2-inline-edit.mjs.map +1 -1
- package/fesm2022/rt-tools-ui-kit-v2-input-number.mjs +3 -2
- package/fesm2022/rt-tools-ui-kit-v2-input-number.mjs.map +1 -1
- package/fesm2022/rt-tools-ui-kit-v2-input.mjs +207 -7
- package/fesm2022/rt-tools-ui-kit-v2-input.mjs.map +1 -1
- package/fesm2022/rt-tools-ui-kit-v2-menu.mjs +1 -0
- package/fesm2022/rt-tools-ui-kit-v2-menu.mjs.map +1 -1
- package/fesm2022/rt-tools-ui-kit-v2-multiselect.mjs +3 -2
- package/fesm2022/rt-tools-ui-kit-v2-multiselect.mjs.map +1 -1
- package/fesm2022/rt-tools-ui-kit-v2-page-header.mjs +2 -0
- package/fesm2022/rt-tools-ui-kit-v2-page-header.mjs.map +1 -1
- package/fesm2022/rt-tools-ui-kit-v2-pagination.mjs +3 -2
- package/fesm2022/rt-tools-ui-kit-v2-pagination.mjs.map +1 -1
- package/fesm2022/rt-tools-ui-kit-v2-profile-menu.mjs +3 -2
- package/fesm2022/rt-tools-ui-kit-v2-profile-menu.mjs.map +1 -1
- package/fesm2022/rt-tools-ui-kit-v2-progress-bar.mjs +171 -0
- package/fesm2022/rt-tools-ui-kit-v2-progress-bar.mjs.map +1 -0
- package/fesm2022/rt-tools-ui-kit-v2-radio-button.mjs +176 -6
- package/fesm2022/rt-tools-ui-kit-v2-radio-button.mjs.map +1 -1
- package/fesm2022/rt-tools-ui-kit-v2-rich-editor.mjs +2 -1
- package/fesm2022/rt-tools-ui-kit-v2-rich-editor.mjs.map +1 -1
- package/fesm2022/rt-tools-ui-kit-v2-scroll-area.mjs +1 -0
- package/fesm2022/rt-tools-ui-kit-v2-scroll-area.mjs.map +1 -1
- package/fesm2022/rt-tools-ui-kit-v2-select.mjs +142 -23
- package/fesm2022/rt-tools-ui-kit-v2-select.mjs.map +1 -1
- package/fesm2022/rt-tools-ui-kit-v2-side-menu.mjs +22 -9
- package/fesm2022/rt-tools-ui-kit-v2-side-menu.mjs.map +1 -1
- package/fesm2022/rt-tools-ui-kit-v2-speed-menu.mjs +3 -2
- package/fesm2022/rt-tools-ui-kit-v2-speed-menu.mjs.map +1 -1
- package/fesm2022/rt-tools-ui-kit-v2-stepper.mjs +105 -8
- package/fesm2022/rt-tools-ui-kit-v2-stepper.mjs.map +1 -1
- package/fesm2022/rt-tools-ui-kit-v2-table.mjs +13 -2
- package/fesm2022/rt-tools-ui-kit-v2-table.mjs.map +1 -1
- package/fesm2022/rt-tools-ui-kit-v2-tabs.mjs +654 -43
- package/fesm2022/rt-tools-ui-kit-v2-tabs.mjs.map +1 -1
- package/fesm2022/rt-tools-ui-kit-v2-tag.mjs +1 -0
- package/fesm2022/rt-tools-ui-kit-v2-tag.mjs.map +1 -1
- package/fesm2022/rt-tools-ui-kit-v2-textarea.mjs +45 -7
- package/fesm2022/rt-tools-ui-kit-v2-textarea.mjs.map +1 -1
- package/fesm2022/rt-tools-ui-kit-v2-theme-toggle.mjs +2 -2
- package/fesm2022/rt-tools-ui-kit-v2-theme-toggle.mjs.map +1 -1
- package/fesm2022/rt-tools-ui-kit-v2-thread-list.mjs +11 -2
- package/fesm2022/rt-tools-ui-kit-v2-thread-list.mjs.map +1 -1
- package/fesm2022/rt-tools-ui-kit-v2-toast.mjs +152 -11
- package/fesm2022/rt-tools-ui-kit-v2-toast.mjs.map +1 -1
- package/fesm2022/rt-tools-ui-kit-v2-toggle-button-group.mjs +199 -17
- package/fesm2022/rt-tools-ui-kit-v2-toggle-button-group.mjs.map +1 -1
- package/fesm2022/rt-tools-ui-kit-v2-tooltip.mjs +35 -5
- package/fesm2022/rt-tools-ui-kit-v2-tooltip.mjs.map +1 -1
- package/fesm2022/rt-tools-ui-kit-v2-tree-selector.mjs +14 -4
- package/fesm2022/rt-tools-ui-kit-v2-tree-selector.mjs.map +1 -1
- package/fesm2022/rt-tools-ui-kit-v2-tree.mjs +6 -3
- package/fesm2022/rt-tools-ui-kit-v2-tree.mjs.map +1 -1
- package/fesm2022/rt-tools-ui-kit-v2-workspace-details.mjs +21 -6
- package/fesm2022/rt-tools-ui-kit-v2-workspace-details.mjs.map +1 -1
- package/fesm2022/rt-tools-ui-kit-v2.mjs +4 -0
- package/package.json +17 -1
- package/src/assets/icons/volume-off.svg +2 -1
- package/src/lib/components/autocomplete/CONTEXT.md +25 -14
- package/src/lib/components/autocomplete/rt-autocomplete.component.scss +19 -0
- package/src/lib/components/badge/CONTEXT.md +33 -0
- package/src/lib/components/badge/rt-badge.directive.scss +104 -0
- package/src/lib/components/breadcrumbs/rt-breadcrumbs.component.scss +2 -2
- package/src/lib/components/button/CONTEXT.md +5 -0
- package/src/lib/components/button/rt-button.directive.scss +3 -1
- package/src/lib/components/checkbox/CONTEXT.md +15 -8
- package/src/lib/components/color-palette/rt-color-palette.component.scss +2 -2
- package/src/lib/components/container/CONTEXT.md +23 -6
- package/src/lib/components/container/rt-container.component.scss +90 -1
- package/src/lib/components/copy-value/CONTEXT.md +6 -5
- package/src/lib/components/copy-value/rt-copy-value.component.scss +16 -0
- package/src/lib/components/date-picker/rt-date-picker.component.scss +7 -0
- package/src/lib/components/date-range/rt-date-range.component.scss +7 -0
- package/src/lib/components/divider/CONTEXT.md +21 -0
- package/src/lib/components/divider/rt-divider.component.scss +34 -0
- package/src/lib/components/drawer/CONTEXT.md +73 -0
- package/src/lib/components/drawer/rt-drawer-container.component.scss +19 -0
- package/src/lib/components/drawer/rt-drawer.component.scss +168 -0
- package/src/lib/components/drawer/rt-resize-handle.component.scss +42 -0
- package/src/lib/components/dynamic-selector/CONTEXT.md +5 -0
- package/src/lib/components/expansion-panel/CONTEXT.md +32 -8
- package/src/lib/components/expansion-panel/rt-expansion-panel.component.scss +67 -2
- package/src/lib/components/field/CONTEXT.md +43 -0
- package/src/lib/components/field/rt-field-label-inside.scss +179 -0
- package/src/lib/components/field/rt-field.component.scss +51 -2
- package/src/lib/components/icon-button/CONTEXT.md +17 -15
- package/src/lib/components/icon-button/rt-icon-button.component.scss +3 -1
- package/src/lib/components/inline-edit/rt-inline-edit.component.scss +4 -4
- package/src/lib/components/input/CONTEXT.md +45 -11
- package/src/lib/components/input/rt-input-floating-label.scss +192 -0
- package/src/lib/components/input/rt-input-icons.scss +105 -0
- package/src/lib/components/input/rt-input.component.scss +91 -13
- package/src/lib/components/input-number/CONTEXT.md +7 -0
- package/src/lib/components/input-number/rt-input-number.component.scss +58 -1
- package/src/lib/components/menu/CONTEXT.md +1 -0
- package/src/lib/components/multiselect/CONTEXT.md +2 -1
- package/src/lib/components/multiselect/rt-multiselect.component.scss +7 -0
- package/src/lib/components/pagination/CONTEXT.md +3 -0
- package/src/lib/components/pagination/rt-pagination.component.scss +7 -0
- package/src/lib/components/progress-bar/CONTEXT.md +22 -0
- package/src/lib/components/progress-bar/rt-progress-bar.component.scss +77 -0
- package/src/lib/components/radio-button/CONTEXT.md +9 -0
- package/src/lib/components/radio-button/rt-radio-group.component.scss +13 -0
- package/src/lib/components/select/CONTEXT.md +28 -0
- package/src/lib/components/select/rt-select-clear.scss +88 -0
- package/src/lib/components/select/rt-select-floating-label.scss +155 -0
- package/src/lib/components/select/rt-select-material.scss +54 -0
- package/src/lib/components/select/rt-select.component.scss +54 -16
- package/src/lib/components/side-menu/CONTEXT.md +5 -0
- package/src/lib/components/speed-menu/rt-speed-menu.component.scss +5 -5
- package/src/lib/components/stepper/CONTEXT.md +13 -5
- package/src/lib/components/stepper/rt-stepper.component.scss +93 -0
- package/src/lib/components/tabs/CONTEXT.md +61 -9
- package/src/lib/components/tabs/rt-tabs.component.scss +201 -5
- package/src/lib/components/textarea/CONTEXT.md +12 -1
- package/src/lib/components/textarea/rt-textarea.component.scss +116 -1
- package/src/lib/components/toast/CONTEXT.md +23 -0
- package/src/lib/components/toast/rt-toast.component.scss +37 -0
- package/src/lib/components/toggle-button-group/CONTEXT.md +24 -4
- package/src/lib/components/toggle-button-group/rt-toggle-button-group-chips.scss +151 -0
- package/src/lib/components/toggle-button-group/rt-toggle-button-group.component.scss +35 -0
- package/src/lib/components/tooltip/CONTEXT.md +7 -1
- package/src/lib/components/tree/rt-tree.component.scss +2 -2
- package/src/styles/_color-scheme.scss +1 -1
- package/src/styles/_density.scss +48 -0
- package/src/styles/_index.scss +8 -0
- package/src/styles/_preset-material.scss +160 -70
- package/src/styles/_primitives.scss +1 -0
- package/src/styles/_semantic-navigation.scss +117 -0
- package/src/styles/_semantic.scss +29 -98
- package/src/styles/_theme-dark.scss +8 -0
- package/styles/tokens.css +2066 -1134
- package/types/rt-tools-ui-kit-v2-autocomplete.d.ts +34 -0
- package/types/rt-tools-ui-kit-v2-badge.d.ts +71 -0
- package/types/rt-tools-ui-kit-v2-checkbox.d.ts +17 -3
- package/types/rt-tools-ui-kit-v2-container.d.ts +65 -9
- package/types/rt-tools-ui-kit-v2-copy-value.d.ts +11 -1
- package/types/rt-tools-ui-kit-v2-core.d.ts +109 -4
- package/types/rt-tools-ui-kit-v2-divider.d.ts +29 -0
- package/types/rt-tools-ui-kit-v2-drawer.d.ts +257 -0
- package/types/rt-tools-ui-kit-v2-dynamic-selector.d.ts +240 -25
- package/types/rt-tools-ui-kit-v2-expansion-panel.d.ts +87 -3
- package/types/rt-tools-ui-kit-v2-field.d.ts +18 -1
- package/types/rt-tools-ui-kit-v2-form-control.d.ts +42 -4
- package/types/rt-tools-ui-kit-v2-icon-button.d.ts +2 -1
- package/types/rt-tools-ui-kit-v2-input-number.d.ts +1 -0
- package/types/rt-tools-ui-kit-v2-input.d.ts +98 -4
- package/types/rt-tools-ui-kit-v2-progress-bar.d.ts +53 -0
- package/types/rt-tools-ui-kit-v2-radio-button.d.ts +80 -1
- package/types/rt-tools-ui-kit-v2-select.d.ts +65 -1
- package/types/rt-tools-ui-kit-v2-side-menu.d.ts +3 -0
- package/types/rt-tools-ui-kit-v2-stepper.d.ts +57 -4
- package/types/rt-tools-ui-kit-v2-tabs.d.ts +337 -8
- package/types/rt-tools-ui-kit-v2-textarea.d.ts +16 -0
- package/types/rt-tools-ui-kit-v2-toast.d.ts +38 -2
- package/types/rt-tools-ui-kit-v2-toggle-button-group.d.ts +83 -3
- package/types/rt-tools-ui-kit-v2-tooltip.d.ts +17 -2
- package/types/rt-tools-ui-kit-v2.d.ts +4 -0
- package/src/lib/components/dynamic-selector/stories/component/test-dynamic-selector-popup-frame.component.scss +0 -6
|
@@ -1,7 +1,9 @@
|
|
|
1
|
+
import { CdkMonitorFocus } from "@angular/cdk/a11y";
|
|
1
2
|
import * as i0 from "@angular/core";
|
|
2
3
|
import { ChangeDetectionStrategy, Component, ViewEncapsulation, booleanAttribute, computed, input, numberAttribute, output } from "@angular/core";
|
|
3
4
|
import { BlockDirective, ElemDirective, ModDirective } from "@rt-tools/core";
|
|
4
5
|
import { RtIconComponent } from "@rt-tools/ui-kit-v2/icon";
|
|
6
|
+
import { rtKitDefault } from "@rt-tools/ui-kit-v2/core";
|
|
5
7
|
import * as i1 from "@rt-tools/ui-kit-v2/radius";
|
|
6
8
|
import { RtRadiusDirective } from "@rt-tools/ui-kit-v2/radius";
|
|
7
9
|
import { RtRippleDirective } from "@rt-tools/ui-kit-v2/ripple";
|
|
@@ -41,7 +43,7 @@ var RtIconButtonComponent = class RtIconButtonComponent {
|
|
|
41
43
|
this.iconSize = input(null, ...ngDevMode ? [{ debugName: "iconSize" }] : /* istanbul ignore next */ []);
|
|
42
44
|
this.type = input("button", ...ngDevMode ? [{ debugName: "type" }] : /* istanbul ignore next */ []);
|
|
43
45
|
this.tooltip = input("", ...ngDevMode ? [{ debugName: "tooltip" }] : /* istanbul ignore next */ []);
|
|
44
|
-
this.tooltipHideOnClick = input(true, {
|
|
46
|
+
this.tooltipHideOnClick = input(rtKitDefault("tooltip", (it) => it.hideOnClick, true), {
|
|
45
47
|
...ngDevMode ? { debugName: "tooltipHideOnClick" } : /* istanbul ignore next */ {},
|
|
46
48
|
transform: booleanAttribute
|
|
47
49
|
});
|
|
@@ -217,8 +219,8 @@ var RtIconButtonComponent = class RtIconButtonComponent {
|
|
|
217
219
|
inputs: ["radius", "radius"]
|
|
218
220
|
}],
|
|
219
221
|
ngImport: i0,
|
|
220
|
-
template: "<button\n rtBlock=\"rt-icon-button\"\n qa-dataid=\"icon-button-control\"\n rtRipple\n [rippleDisabled]=\"isDisabled() || loading()\"\n [rtTooltip]=\"tooltip()\"\n [rtTooltipHideOnClick]=\"tooltipHideOnClick()\"\n [rtMod]=\"bemMods()\"\n [type]=\"type()\"\n [disabled]=\"isDisabled()\"\n [attr.aria-label]=\"ariaLabel()\"\n [attr.aria-pressed]=\"active() ? 'true' : null\"\n [attr.aria-expanded]=\"expanded()\"\n [attr.tabindex]=\"tabIndex()\"\n (click)=\"onClick($event)\">\n @if (loading()) {\n <rt-icon rtElem=\"spinner\" name=\"spinner\" color=\"current\" [size]=\"resolvedIconSize()\" />\n } @else if (icon() || glyph()) {\n <rt-icon rtElem=\"icon\" [color]=\"iconColor()\" [name]=\"icon()\" [glyph]=\"glyph()\" [size]=\"resolvedIconSize()\" [fill]=\"iconFill()\" />\n } @else {\n <span rtElem=\"content\" qa-dataid=\"icon-button-content\"><ng-content /></span>\n }\n @if (indicator()) {\n <span rtElem=\"indicator\" aria-hidden=\"true\"></span>\n }\n</button>\n",
|
|
221
|
-
styles: ["@charset \"UTF-8\";@layer rt-kit.components{rt-icon-button{display:inline-flex;--rt-icon-button-color: var(--rt-color-text-primary)}rt-icon-button .rt-icon-button{--rt-icon-button-radius: var(--rt-radius-md);--rt-icon-button-indicator-radius: var(--rt-radius-full);--rt-icon-button-focus-shadow: var(--rt-shadow-focus-ring);--rt-icon-button-shadow: var(--rt-shadow-none);--rt-icon-button-shadow-hover: var(--rt-icon-button-shadow);--rt-icon-button-color-hover: var(--rt-icon-button-color);--rt-icon-button-transition-duration: var(--rt-duration-fast);--rt-icon-button-bg-variant: transparent;--rt-icon-button-size-step: var(--rt-control-height-md);position:relative;display:inline-flex;width:var(--rt-icon-button-size, var(--rt-icon-button-size-step));height:var(--rt-icon-button-size, var(--rt-icon-button-size-step));align-items:center;justify-content:center;padding:0;border:0;border-radius:var(--rt-icon-button-radius);background-color:var(--rt-icon-button-bg, var(--rt-icon-button-bg-variant));box-shadow:var(--rt-icon-button-shadow);color:var(--rt-icon-button-color);cursor:pointer;transition:background-color var(--rt-icon-button-transition-duration) ease,box-shadow var(--rt-icon-button-transition-duration) ease}rt-icon-button .rt-icon-button--2xs{--rt-icon-button-size-step: var(--rt-size-5)}rt-icon-button .rt-icon-button--xs{--rt-icon-button-size-step: 22px}rt-icon-button .rt-icon-button--sm{--rt-icon-button-size-step: var(--rt-control-height-sm)}rt-icon-button .rt-icon-button--md{--rt-icon-button-size-step: var(--rt-control-height-md)}rt-icon-button .rt-icon-button--lg{--rt-icon-button-size-step: var(--rt-control-height-lg)}rt-icon-button .rt-icon-button--xl{--rt-icon-button-size-step: var(--rt-control-height-xl)}rt-icon-button .rt-icon-button--2xl{--rt-icon-button-size-step: var(--rt-control-height-2xl)}rt-icon-button .rt-icon-button:hover:not(:disabled){box-shadow:var(--rt-icon-button-shadow-hover)}rt-icon-button .rt-icon-button--ghost:hover:not(:disabled){background-color:var(--rt-icon-button-bg-hover, var(--rt-icon-button-color-bg-hover));color:var(--rt-icon-button-color-hover)}rt-icon-button .rt-icon-button--ghost.rt-icon-button--active{background-color:var(--rt-icon-button-color-bg-hover)}rt-icon-button .rt-icon-button--primary{--rt-icon-button-bg-variant: var(--rt-color-action-primary);color:var(--rt-color-action-on-primary)}rt-icon-button .rt-icon-button--primary:hover:not(:disabled){background-color:var(--rt-icon-button-bg-hover, var(--rt-color-action-primary-hover))}rt-icon-button .rt-icon-button--secondary{--rt-icon-button-bg-variant: var(--rt-color-bg-surface-subtle);color:var(--rt-color-text-primary)}rt-icon-button .rt-icon-button--secondary:hover:not(:disabled){background-color:var(--rt-icon-button-bg-hover, var(--rt-icon-button-color-bg-hover))}rt-icon-button .rt-icon-button--danger{color:var(--rt-color-state-danger)}rt-icon-button .rt-icon-button--danger:hover:not(:disabled){background-color:var(--rt-icon-button-bg-hover, var(--rt-icon-button-color-bg-hover))}rt-icon-button .rt-icon-button--danger.rt-icon-button--active{background-color:var(--rt-icon-button-color-bg-hover)}rt-icon-button .rt-icon-button--success{color:var(--rt-color-state-success)}rt-icon-button .rt-icon-button--success:hover:not(:disabled){background-color:var(--rt-icon-button-bg-hover, var(--rt-icon-button-color-bg-hover))}rt-icon-button .rt-icon-button--success.rt-icon-button--active{background-color:var(--rt-icon-button-color-bg-hover)}rt-icon-button .rt-icon-button--warning{color:var(--rt-color-state-warning)}rt-icon-button .rt-icon-button--warning:hover:not(:disabled){background-color:var(--rt-icon-button-bg-hover, var(--rt-icon-button-color-bg-hover))}rt-icon-button .rt-icon-button--warning.rt-icon-button--active{background-color:var(--rt-icon-button-color-bg-hover)}rt-icon-button .rt-icon-button:disabled{background-color:color-mix(in srgb,var(--rt-icon-button-bg, var(--rt-icon-button-bg-variant)) var(--rt-icon-button-disabled-fill),transparent);cursor:not-allowed;opacity:var(--rt-icon-button-disabled-opacity)}rt-icon-button .rt-icon-button:disabled .rt-icon svg{color:var(--rt-icon-button-disabled-color)}rt-icon-button .rt-icon-button:focus-visible{box-shadow:var(--rt-icon-button-focus-shadow);outline:2px solid transparent;outline-offset:2px}rt-icon-button .rt-icon-button__content{display:inline-flex;align-items:center;justify-content:center;color:inherit;line-height:1}rt-icon-button .rt-icon-button__spinner{--rt-icon-button-spin-duration: 1s;animation:rt-icon-button-spin var(--rt-icon-button-spin-duration) linear infinite}rt-icon-button .rt-icon-button__indicator{position:absolute;width:8px;height:8px;border-radius:var(--rt-icon-button-indicator-radius);background:var(--rt-color-state-danger);inset-block-start:-2px;inset-inline-end:-2px;pointer-events:none}rt-icon-button[data-rt-radius=none]>.rt-icon-button{--rt-icon-button-radius: var(--rt-radius-none)}rt-icon-button[data-rt-radius=xs]>.rt-icon-button{--rt-icon-button-radius: var(--rt-radius-xs)}rt-icon-button[data-rt-radius=sm]>.rt-icon-button{--rt-icon-button-radius: var(--rt-radius-sm)}rt-icon-button[data-rt-radius=ms]>.rt-icon-button{--rt-icon-button-radius: var(--rt-radius-ms)}rt-icon-button[data-rt-radius=md]>.rt-icon-button{--rt-icon-button-radius: var(--rt-radius-md)}rt-icon-button[data-rt-radius=lg]>.rt-icon-button{--rt-icon-button-radius: var(--rt-radius-lg)}rt-icon-button[data-rt-radius=xl]>.rt-icon-button{--rt-icon-button-radius: var(--rt-radius-xl)}rt-icon-button[data-rt-radius=\"2xl\"]>.rt-icon-button{--rt-icon-button-radius: var(--rt-radius-2xl)}rt-icon-button[data-rt-radius=full]>.rt-icon-button{--rt-icon-button-radius: var(--rt-radius-full)}@keyframes rt-icon-button-spin{to{transform:rotate(360deg)}}}\n"],
|
|
222
|
+
template: "<button\n rtBlock=\"rt-icon-button\"\n qa-dataid=\"icon-button-control\"\n rtRipple\n cdkMonitorElementFocus\n [rippleDisabled]=\"isDisabled() || loading()\"\n [rtTooltip]=\"tooltip()\"\n [rtTooltipHideOnClick]=\"tooltipHideOnClick()\"\n [rtMod]=\"bemMods()\"\n [type]=\"type()\"\n [disabled]=\"isDisabled()\"\n [attr.aria-label]=\"ariaLabel()\"\n [attr.aria-pressed]=\"active() ? 'true' : null\"\n [attr.aria-expanded]=\"expanded()\"\n [attr.tabindex]=\"tabIndex()\"\n (click)=\"onClick($event)\">\n @if (loading()) {\n <rt-icon rtElem=\"spinner\" name=\"spinner\" color=\"current\" [size]=\"resolvedIconSize()\" />\n } @else if (icon() || glyph()) {\n <rt-icon rtElem=\"icon\" [color]=\"iconColor()\" [name]=\"icon()\" [glyph]=\"glyph()\" [size]=\"resolvedIconSize()\" [fill]=\"iconFill()\" />\n } @else {\n <span rtElem=\"content\" qa-dataid=\"icon-button-content\"><ng-content /></span>\n }\n @if (indicator()) {\n <span rtElem=\"indicator\" aria-hidden=\"true\"></span>\n }\n</button>\n",
|
|
223
|
+
styles: ["@charset \"UTF-8\";@layer rt-kit.components{rt-icon-button{display:inline-flex;--rt-icon-button-color: var(--rt-color-text-primary)}rt-icon-button .rt-icon-button{--rt-icon-button-radius: var(--rt-radius-md);--rt-icon-button-indicator-radius: var(--rt-radius-full);--rt-icon-button-focus-shadow: var(--rt-shadow-focus-ring);--rt-icon-button-shadow: var(--rt-shadow-none);--rt-icon-button-shadow-hover: var(--rt-icon-button-shadow);--rt-icon-button-color-hover: var(--rt-icon-button-color);--rt-icon-button-transition-duration: var(--rt-duration-fast);--rt-icon-button-bg-variant: transparent;--rt-icon-button-size-step: var(--rt-control-height-md);position:relative;display:inline-flex;width:var(--rt-icon-button-size, var(--rt-icon-button-size-step));height:var(--rt-icon-button-size, var(--rt-icon-button-size-step));align-items:center;justify-content:center;padding:0;border:0;border-radius:var(--rt-icon-button-radius);background-color:var(--rt-icon-button-bg, var(--rt-icon-button-bg-variant));box-shadow:var(--rt-icon-button-shadow);color:var(--rt-icon-button-color);cursor:pointer;transition:background-color var(--rt-icon-button-transition-duration) ease,box-shadow var(--rt-icon-button-transition-duration) ease}rt-icon-button .rt-icon-button--2xs{--rt-icon-button-size-step: var(--rt-size-5)}rt-icon-button .rt-icon-button--xs{--rt-icon-button-size-step: 22px}rt-icon-button .rt-icon-button--sm{--rt-icon-button-size-step: var(--rt-control-height-sm)}rt-icon-button .rt-icon-button--md{--rt-icon-button-size-step: var(--rt-control-height-md)}rt-icon-button .rt-icon-button--lg{--rt-icon-button-size-step: var(--rt-control-height-lg)}rt-icon-button .rt-icon-button--xl{--rt-icon-button-size-step: var(--rt-control-height-xl)}rt-icon-button .rt-icon-button--2xl{--rt-icon-button-size-step: var(--rt-control-height-2xl)}rt-icon-button .rt-icon-button:hover:not(:disabled){box-shadow:var(--rt-icon-button-shadow-hover)}rt-icon-button .rt-icon-button--ghost:hover:not(:disabled){background-color:var(--rt-icon-button-bg-hover, var(--rt-icon-button-color-bg-hover));color:var(--rt-icon-button-color-hover)}rt-icon-button .rt-icon-button--ghost.rt-icon-button--active{background-color:var(--rt-icon-button-color-bg-hover)}rt-icon-button .rt-icon-button--primary{--rt-icon-button-bg-variant: var(--rt-color-action-primary);color:var(--rt-color-action-on-primary)}rt-icon-button .rt-icon-button--primary:hover:not(:disabled){background-color:var(--rt-icon-button-bg-hover, var(--rt-color-action-primary-hover))}rt-icon-button .rt-icon-button--secondary{--rt-icon-button-bg-variant: var(--rt-color-bg-surface-subtle);color:var(--rt-color-text-primary)}rt-icon-button .rt-icon-button--secondary:hover:not(:disabled){background-color:var(--rt-icon-button-bg-hover, var(--rt-icon-button-color-bg-hover))}rt-icon-button .rt-icon-button--danger{color:var(--rt-color-state-danger)}rt-icon-button .rt-icon-button--danger:hover:not(:disabled){background-color:var(--rt-icon-button-bg-hover, var(--rt-icon-button-color-bg-hover))}rt-icon-button .rt-icon-button--danger.rt-icon-button--active{background-color:var(--rt-icon-button-color-bg-hover)}rt-icon-button .rt-icon-button--success{color:var(--rt-color-state-success)}rt-icon-button .rt-icon-button--success:hover:not(:disabled){background-color:var(--rt-icon-button-bg-hover, var(--rt-icon-button-color-bg-hover))}rt-icon-button .rt-icon-button--success.rt-icon-button--active{background-color:var(--rt-icon-button-color-bg-hover)}rt-icon-button .rt-icon-button--warning{color:var(--rt-color-state-warning)}rt-icon-button .rt-icon-button--warning:hover:not(:disabled){background-color:var(--rt-icon-button-bg-hover, var(--rt-icon-button-color-bg-hover))}rt-icon-button .rt-icon-button--warning.rt-icon-button--active{background-color:var(--rt-icon-button-color-bg-hover)}rt-icon-button .rt-icon-button:disabled{background-color:color-mix(in srgb,var(--rt-icon-button-bg, var(--rt-icon-button-bg-variant)) var(--rt-icon-button-disabled-fill),transparent);cursor:not-allowed;opacity:var(--rt-icon-button-disabled-opacity)}rt-icon-button .rt-icon-button:disabled .rt-icon svg{color:var(--rt-icon-button-disabled-color)}rt-icon-button .rt-icon-button:focus-visible:not(.cdk-mouse-focused,.cdk-touch-focused){box-shadow:var(--rt-icon-button-focus-shadow);outline:2px solid transparent;outline-offset:2px}rt-icon-button .rt-icon-button__content{display:inline-flex;align-items:center;justify-content:center;color:inherit;line-height:1}rt-icon-button .rt-icon-button__spinner{--rt-icon-button-spin-duration: 1s;animation:rt-icon-button-spin var(--rt-icon-button-spin-duration) linear infinite}rt-icon-button .rt-icon-button__indicator{position:absolute;width:8px;height:8px;border-radius:var(--rt-icon-button-indicator-radius);background:var(--rt-color-state-danger);inset-block-start:-2px;inset-inline-end:-2px;pointer-events:none}rt-icon-button[data-rt-radius=none]>.rt-icon-button{--rt-icon-button-radius: var(--rt-radius-none)}rt-icon-button[data-rt-radius=xs]>.rt-icon-button{--rt-icon-button-radius: var(--rt-radius-xs)}rt-icon-button[data-rt-radius=sm]>.rt-icon-button{--rt-icon-button-radius: var(--rt-radius-sm)}rt-icon-button[data-rt-radius=ms]>.rt-icon-button{--rt-icon-button-radius: var(--rt-radius-ms)}rt-icon-button[data-rt-radius=md]>.rt-icon-button{--rt-icon-button-radius: var(--rt-radius-md)}rt-icon-button[data-rt-radius=lg]>.rt-icon-button{--rt-icon-button-radius: var(--rt-radius-lg)}rt-icon-button[data-rt-radius=xl]>.rt-icon-button{--rt-icon-button-radius: var(--rt-radius-xl)}rt-icon-button[data-rt-radius=\"2xl\"]>.rt-icon-button{--rt-icon-button-radius: var(--rt-radius-2xl)}rt-icon-button[data-rt-radius=full]>.rt-icon-button{--rt-icon-button-radius: var(--rt-radius-full)}@keyframes rt-icon-button-spin{to{transform:rotate(360deg)}}}\n"],
|
|
222
224
|
dependencies: [
|
|
223
225
|
{
|
|
224
226
|
kind: "component",
|
|
@@ -241,6 +243,13 @@ var RtIconButtonComponent = class RtIconButtonComponent {
|
|
|
241
243
|
selector: "[rtRipple]",
|
|
242
244
|
inputs: ["rippleDisabled"]
|
|
243
245
|
},
|
|
246
|
+
{
|
|
247
|
+
kind: "directive",
|
|
248
|
+
type: CdkMonitorFocus,
|
|
249
|
+
selector: "[cdkMonitorElementFocus], [cdkMonitorSubtreeFocus]",
|
|
250
|
+
outputs: ["cdkFocusChange"],
|
|
251
|
+
exportAs: ["cdkMonitorFocus"]
|
|
252
|
+
},
|
|
244
253
|
{
|
|
245
254
|
kind: "directive",
|
|
246
255
|
type: RtTooltipDirective,
|
|
@@ -248,6 +257,7 @@ var RtIconButtonComponent = class RtIconButtonComponent {
|
|
|
248
257
|
inputs: [
|
|
249
258
|
"rtTooltip",
|
|
250
259
|
"rtTooltipPlacement",
|
|
260
|
+
"rtTooltipShowDelay",
|
|
251
261
|
"rtTooltipWhenTruncated",
|
|
252
262
|
"rtTooltipHideOnClick"
|
|
253
263
|
],
|
|
@@ -290,6 +300,7 @@ i0.ɵɵngDeclareClassMetadata({
|
|
|
290
300
|
imports: [
|
|
291
301
|
RtIconComponent,
|
|
292
302
|
RtRippleDirective,
|
|
303
|
+
CdkMonitorFocus,
|
|
293
304
|
RtTooltipDirective,
|
|
294
305
|
BlockDirective,
|
|
295
306
|
ElemDirective,
|
|
@@ -300,8 +311,8 @@ i0.ɵɵngDeclareClassMetadata({
|
|
|
300
311
|
inputs: ["radius"]
|
|
301
312
|
}],
|
|
302
313
|
host: { class: BEM_BLOCK },
|
|
303
|
-
template: "<button\n rtBlock=\"rt-icon-button\"\n qa-dataid=\"icon-button-control\"\n rtRipple\n [rippleDisabled]=\"isDisabled() || loading()\"\n [rtTooltip]=\"tooltip()\"\n [rtTooltipHideOnClick]=\"tooltipHideOnClick()\"\n [rtMod]=\"bemMods()\"\n [type]=\"type()\"\n [disabled]=\"isDisabled()\"\n [attr.aria-label]=\"ariaLabel()\"\n [attr.aria-pressed]=\"active() ? 'true' : null\"\n [attr.aria-expanded]=\"expanded()\"\n [attr.tabindex]=\"tabIndex()\"\n (click)=\"onClick($event)\">\n @if (loading()) {\n <rt-icon rtElem=\"spinner\" name=\"spinner\" color=\"current\" [size]=\"resolvedIconSize()\" />\n } @else if (icon() || glyph()) {\n <rt-icon rtElem=\"icon\" [color]=\"iconColor()\" [name]=\"icon()\" [glyph]=\"glyph()\" [size]=\"resolvedIconSize()\" [fill]=\"iconFill()\" />\n } @else {\n <span rtElem=\"content\" qa-dataid=\"icon-button-content\"><ng-content /></span>\n }\n @if (indicator()) {\n <span rtElem=\"indicator\" aria-hidden=\"true\"></span>\n }\n</button>\n",
|
|
304
|
-
styles: ["@charset \"UTF-8\";@layer rt-kit.components{rt-icon-button{display:inline-flex;--rt-icon-button-color: var(--rt-color-text-primary)}rt-icon-button .rt-icon-button{--rt-icon-button-radius: var(--rt-radius-md);--rt-icon-button-indicator-radius: var(--rt-radius-full);--rt-icon-button-focus-shadow: var(--rt-shadow-focus-ring);--rt-icon-button-shadow: var(--rt-shadow-none);--rt-icon-button-shadow-hover: var(--rt-icon-button-shadow);--rt-icon-button-color-hover: var(--rt-icon-button-color);--rt-icon-button-transition-duration: var(--rt-duration-fast);--rt-icon-button-bg-variant: transparent;--rt-icon-button-size-step: var(--rt-control-height-md);position:relative;display:inline-flex;width:var(--rt-icon-button-size, var(--rt-icon-button-size-step));height:var(--rt-icon-button-size, var(--rt-icon-button-size-step));align-items:center;justify-content:center;padding:0;border:0;border-radius:var(--rt-icon-button-radius);background-color:var(--rt-icon-button-bg, var(--rt-icon-button-bg-variant));box-shadow:var(--rt-icon-button-shadow);color:var(--rt-icon-button-color);cursor:pointer;transition:background-color var(--rt-icon-button-transition-duration) ease,box-shadow var(--rt-icon-button-transition-duration) ease}rt-icon-button .rt-icon-button--2xs{--rt-icon-button-size-step: var(--rt-size-5)}rt-icon-button .rt-icon-button--xs{--rt-icon-button-size-step: 22px}rt-icon-button .rt-icon-button--sm{--rt-icon-button-size-step: var(--rt-control-height-sm)}rt-icon-button .rt-icon-button--md{--rt-icon-button-size-step: var(--rt-control-height-md)}rt-icon-button .rt-icon-button--lg{--rt-icon-button-size-step: var(--rt-control-height-lg)}rt-icon-button .rt-icon-button--xl{--rt-icon-button-size-step: var(--rt-control-height-xl)}rt-icon-button .rt-icon-button--2xl{--rt-icon-button-size-step: var(--rt-control-height-2xl)}rt-icon-button .rt-icon-button:hover:not(:disabled){box-shadow:var(--rt-icon-button-shadow-hover)}rt-icon-button .rt-icon-button--ghost:hover:not(:disabled){background-color:var(--rt-icon-button-bg-hover, var(--rt-icon-button-color-bg-hover));color:var(--rt-icon-button-color-hover)}rt-icon-button .rt-icon-button--ghost.rt-icon-button--active{background-color:var(--rt-icon-button-color-bg-hover)}rt-icon-button .rt-icon-button--primary{--rt-icon-button-bg-variant: var(--rt-color-action-primary);color:var(--rt-color-action-on-primary)}rt-icon-button .rt-icon-button--primary:hover:not(:disabled){background-color:var(--rt-icon-button-bg-hover, var(--rt-color-action-primary-hover))}rt-icon-button .rt-icon-button--secondary{--rt-icon-button-bg-variant: var(--rt-color-bg-surface-subtle);color:var(--rt-color-text-primary)}rt-icon-button .rt-icon-button--secondary:hover:not(:disabled){background-color:var(--rt-icon-button-bg-hover, var(--rt-icon-button-color-bg-hover))}rt-icon-button .rt-icon-button--danger{color:var(--rt-color-state-danger)}rt-icon-button .rt-icon-button--danger:hover:not(:disabled){background-color:var(--rt-icon-button-bg-hover, var(--rt-icon-button-color-bg-hover))}rt-icon-button .rt-icon-button--danger.rt-icon-button--active{background-color:var(--rt-icon-button-color-bg-hover)}rt-icon-button .rt-icon-button--success{color:var(--rt-color-state-success)}rt-icon-button .rt-icon-button--success:hover:not(:disabled){background-color:var(--rt-icon-button-bg-hover, var(--rt-icon-button-color-bg-hover))}rt-icon-button .rt-icon-button--success.rt-icon-button--active{background-color:var(--rt-icon-button-color-bg-hover)}rt-icon-button .rt-icon-button--warning{color:var(--rt-color-state-warning)}rt-icon-button .rt-icon-button--warning:hover:not(:disabled){background-color:var(--rt-icon-button-bg-hover, var(--rt-icon-button-color-bg-hover))}rt-icon-button .rt-icon-button--warning.rt-icon-button--active{background-color:var(--rt-icon-button-color-bg-hover)}rt-icon-button .rt-icon-button:disabled{background-color:color-mix(in srgb,var(--rt-icon-button-bg, var(--rt-icon-button-bg-variant)) var(--rt-icon-button-disabled-fill),transparent);cursor:not-allowed;opacity:var(--rt-icon-button-disabled-opacity)}rt-icon-button .rt-icon-button:disabled .rt-icon svg{color:var(--rt-icon-button-disabled-color)}rt-icon-button .rt-icon-button:focus-visible{box-shadow:var(--rt-icon-button-focus-shadow);outline:2px solid transparent;outline-offset:2px}rt-icon-button .rt-icon-button__content{display:inline-flex;align-items:center;justify-content:center;color:inherit;line-height:1}rt-icon-button .rt-icon-button__spinner{--rt-icon-button-spin-duration: 1s;animation:rt-icon-button-spin var(--rt-icon-button-spin-duration) linear infinite}rt-icon-button .rt-icon-button__indicator{position:absolute;width:8px;height:8px;border-radius:var(--rt-icon-button-indicator-radius);background:var(--rt-color-state-danger);inset-block-start:-2px;inset-inline-end:-2px;pointer-events:none}rt-icon-button[data-rt-radius=none]>.rt-icon-button{--rt-icon-button-radius: var(--rt-radius-none)}rt-icon-button[data-rt-radius=xs]>.rt-icon-button{--rt-icon-button-radius: var(--rt-radius-xs)}rt-icon-button[data-rt-radius=sm]>.rt-icon-button{--rt-icon-button-radius: var(--rt-radius-sm)}rt-icon-button[data-rt-radius=ms]>.rt-icon-button{--rt-icon-button-radius: var(--rt-radius-ms)}rt-icon-button[data-rt-radius=md]>.rt-icon-button{--rt-icon-button-radius: var(--rt-radius-md)}rt-icon-button[data-rt-radius=lg]>.rt-icon-button{--rt-icon-button-radius: var(--rt-radius-lg)}rt-icon-button[data-rt-radius=xl]>.rt-icon-button{--rt-icon-button-radius: var(--rt-radius-xl)}rt-icon-button[data-rt-radius=\"2xl\"]>.rt-icon-button{--rt-icon-button-radius: var(--rt-radius-2xl)}rt-icon-button[data-rt-radius=full]>.rt-icon-button{--rt-icon-button-radius: var(--rt-radius-full)}@keyframes rt-icon-button-spin{to{transform:rotate(360deg)}}}\n"]
|
|
314
|
+
template: "<button\n rtBlock=\"rt-icon-button\"\n qa-dataid=\"icon-button-control\"\n rtRipple\n cdkMonitorElementFocus\n [rippleDisabled]=\"isDisabled() || loading()\"\n [rtTooltip]=\"tooltip()\"\n [rtTooltipHideOnClick]=\"tooltipHideOnClick()\"\n [rtMod]=\"bemMods()\"\n [type]=\"type()\"\n [disabled]=\"isDisabled()\"\n [attr.aria-label]=\"ariaLabel()\"\n [attr.aria-pressed]=\"active() ? 'true' : null\"\n [attr.aria-expanded]=\"expanded()\"\n [attr.tabindex]=\"tabIndex()\"\n (click)=\"onClick($event)\">\n @if (loading()) {\n <rt-icon rtElem=\"spinner\" name=\"spinner\" color=\"current\" [size]=\"resolvedIconSize()\" />\n } @else if (icon() || glyph()) {\n <rt-icon rtElem=\"icon\" [color]=\"iconColor()\" [name]=\"icon()\" [glyph]=\"glyph()\" [size]=\"resolvedIconSize()\" [fill]=\"iconFill()\" />\n } @else {\n <span rtElem=\"content\" qa-dataid=\"icon-button-content\"><ng-content /></span>\n }\n @if (indicator()) {\n <span rtElem=\"indicator\" aria-hidden=\"true\"></span>\n }\n</button>\n",
|
|
315
|
+
styles: ["@charset \"UTF-8\";@layer rt-kit.components{rt-icon-button{display:inline-flex;--rt-icon-button-color: var(--rt-color-text-primary)}rt-icon-button .rt-icon-button{--rt-icon-button-radius: var(--rt-radius-md);--rt-icon-button-indicator-radius: var(--rt-radius-full);--rt-icon-button-focus-shadow: var(--rt-shadow-focus-ring);--rt-icon-button-shadow: var(--rt-shadow-none);--rt-icon-button-shadow-hover: var(--rt-icon-button-shadow);--rt-icon-button-color-hover: var(--rt-icon-button-color);--rt-icon-button-transition-duration: var(--rt-duration-fast);--rt-icon-button-bg-variant: transparent;--rt-icon-button-size-step: var(--rt-control-height-md);position:relative;display:inline-flex;width:var(--rt-icon-button-size, var(--rt-icon-button-size-step));height:var(--rt-icon-button-size, var(--rt-icon-button-size-step));align-items:center;justify-content:center;padding:0;border:0;border-radius:var(--rt-icon-button-radius);background-color:var(--rt-icon-button-bg, var(--rt-icon-button-bg-variant));box-shadow:var(--rt-icon-button-shadow);color:var(--rt-icon-button-color);cursor:pointer;transition:background-color var(--rt-icon-button-transition-duration) ease,box-shadow var(--rt-icon-button-transition-duration) ease}rt-icon-button .rt-icon-button--2xs{--rt-icon-button-size-step: var(--rt-size-5)}rt-icon-button .rt-icon-button--xs{--rt-icon-button-size-step: 22px}rt-icon-button .rt-icon-button--sm{--rt-icon-button-size-step: var(--rt-control-height-sm)}rt-icon-button .rt-icon-button--md{--rt-icon-button-size-step: var(--rt-control-height-md)}rt-icon-button .rt-icon-button--lg{--rt-icon-button-size-step: var(--rt-control-height-lg)}rt-icon-button .rt-icon-button--xl{--rt-icon-button-size-step: var(--rt-control-height-xl)}rt-icon-button .rt-icon-button--2xl{--rt-icon-button-size-step: var(--rt-control-height-2xl)}rt-icon-button .rt-icon-button:hover:not(:disabled){box-shadow:var(--rt-icon-button-shadow-hover)}rt-icon-button .rt-icon-button--ghost:hover:not(:disabled){background-color:var(--rt-icon-button-bg-hover, var(--rt-icon-button-color-bg-hover));color:var(--rt-icon-button-color-hover)}rt-icon-button .rt-icon-button--ghost.rt-icon-button--active{background-color:var(--rt-icon-button-color-bg-hover)}rt-icon-button .rt-icon-button--primary{--rt-icon-button-bg-variant: var(--rt-color-action-primary);color:var(--rt-color-action-on-primary)}rt-icon-button .rt-icon-button--primary:hover:not(:disabled){background-color:var(--rt-icon-button-bg-hover, var(--rt-color-action-primary-hover))}rt-icon-button .rt-icon-button--secondary{--rt-icon-button-bg-variant: var(--rt-color-bg-surface-subtle);color:var(--rt-color-text-primary)}rt-icon-button .rt-icon-button--secondary:hover:not(:disabled){background-color:var(--rt-icon-button-bg-hover, var(--rt-icon-button-color-bg-hover))}rt-icon-button .rt-icon-button--danger{color:var(--rt-color-state-danger)}rt-icon-button .rt-icon-button--danger:hover:not(:disabled){background-color:var(--rt-icon-button-bg-hover, var(--rt-icon-button-color-bg-hover))}rt-icon-button .rt-icon-button--danger.rt-icon-button--active{background-color:var(--rt-icon-button-color-bg-hover)}rt-icon-button .rt-icon-button--success{color:var(--rt-color-state-success)}rt-icon-button .rt-icon-button--success:hover:not(:disabled){background-color:var(--rt-icon-button-bg-hover, var(--rt-icon-button-color-bg-hover))}rt-icon-button .rt-icon-button--success.rt-icon-button--active{background-color:var(--rt-icon-button-color-bg-hover)}rt-icon-button .rt-icon-button--warning{color:var(--rt-color-state-warning)}rt-icon-button .rt-icon-button--warning:hover:not(:disabled){background-color:var(--rt-icon-button-bg-hover, var(--rt-icon-button-color-bg-hover))}rt-icon-button .rt-icon-button--warning.rt-icon-button--active{background-color:var(--rt-icon-button-color-bg-hover)}rt-icon-button .rt-icon-button:disabled{background-color:color-mix(in srgb,var(--rt-icon-button-bg, var(--rt-icon-button-bg-variant)) var(--rt-icon-button-disabled-fill),transparent);cursor:not-allowed;opacity:var(--rt-icon-button-disabled-opacity)}rt-icon-button .rt-icon-button:disabled .rt-icon svg{color:var(--rt-icon-button-disabled-color)}rt-icon-button .rt-icon-button:focus-visible:not(.cdk-mouse-focused,.cdk-touch-focused){box-shadow:var(--rt-icon-button-focus-shadow);outline:2px solid transparent;outline-offset:2px}rt-icon-button .rt-icon-button__content{display:inline-flex;align-items:center;justify-content:center;color:inherit;line-height:1}rt-icon-button .rt-icon-button__spinner{--rt-icon-button-spin-duration: 1s;animation:rt-icon-button-spin var(--rt-icon-button-spin-duration) linear infinite}rt-icon-button .rt-icon-button__indicator{position:absolute;width:8px;height:8px;border-radius:var(--rt-icon-button-indicator-radius);background:var(--rt-color-state-danger);inset-block-start:-2px;inset-inline-end:-2px;pointer-events:none}rt-icon-button[data-rt-radius=none]>.rt-icon-button{--rt-icon-button-radius: var(--rt-radius-none)}rt-icon-button[data-rt-radius=xs]>.rt-icon-button{--rt-icon-button-radius: var(--rt-radius-xs)}rt-icon-button[data-rt-radius=sm]>.rt-icon-button{--rt-icon-button-radius: var(--rt-radius-sm)}rt-icon-button[data-rt-radius=ms]>.rt-icon-button{--rt-icon-button-radius: var(--rt-radius-ms)}rt-icon-button[data-rt-radius=md]>.rt-icon-button{--rt-icon-button-radius: var(--rt-radius-md)}rt-icon-button[data-rt-radius=lg]>.rt-icon-button{--rt-icon-button-radius: var(--rt-radius-lg)}rt-icon-button[data-rt-radius=xl]>.rt-icon-button{--rt-icon-button-radius: var(--rt-radius-xl)}rt-icon-button[data-rt-radius=\"2xl\"]>.rt-icon-button{--rt-icon-button-radius: var(--rt-radius-2xl)}rt-icon-button[data-rt-radius=full]>.rt-icon-button{--rt-icon-button-radius: var(--rt-radius-full)}@keyframes rt-icon-button-spin{to{transform:rotate(360deg)}}}\n"]
|
|
305
316
|
}]
|
|
306
317
|
}],
|
|
307
318
|
propDecorators: {
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"rt-tools-ui-kit-v2-icon-button.mjs","names":[],"sources":["../../../projects/ui-kit-v2/src/lib/components/icon-button/rt-icon-button.component.ts","../../../projects/ui-kit-v2/src/lib/components/icon-button/rt-icon-button.component.html"],"sourcesContent":["import { BooleanInput, NumberInput } from '@angular/cdk/coercion';\nimport {\n booleanAttribute,\n ChangeDetectionStrategy,\n Component,\n computed,\n input,\n InputSignal,\n InputSignalWithTransform,\n numberAttribute,\n output,\n OutputEmitterRef,\n Signal,\n ViewEncapsulation,\n} from '@angular/core';\n\nimport { BlockDirective, ElemDirective, ModDirective } from '@rt-tools/core';\n\nimport { RtIconComponent } from '@rt-tools/ui-kit-v2/icon';\nimport { IRtIcon } from '@rt-tools/ui-kit-v2/core';\nimport { RtRadiusDirective } from '@rt-tools/ui-kit-v2/radius';\nimport { RtRippleDirective } from '@rt-tools/ui-kit-v2/ripple';\nimport { RtTooltipDirective } from '@rt-tools/ui-kit-v2/tooltip';\nimport { IRtIconButton } from './rt-icon-button.model';\n\nconst BEM_BLOCK: string = 'rt-icon-button';\n\n/**\n * Универсальная icon-only кнопка кита.\n *\n * Рендерит свой собственный `<button type=\"...\">` внутри template (НЕ host-button).\n * Все цвета и размеры — через семантические `--rt-*` токены; геометрия квадрата\n * берётся из `--rt-icon-button-size`, а без него — из шага `size`. Свойство, заданное на теге\n * `<rt-icon-button>` или выше, доходит до кнопки; так же и `--rt-icon-button-bg`.\n *\n * Loading state — заменяет иконку на `<rt-icon name=\"spinner\">` и блокирует\n * клики (`button[disabled]`). Active state управляет `aria-pressed` (для toggle-кнопок).\n * Indicator — небольшой dot top-right через BEM-элемент `__indicator`.\n *\n * BEM-разметка — через `rtBlock=\"rt-icon-button\"` + `[rtMod]` объект; камелкейс\n * модификаторов автоматически конвертируется директивой в kebab-case\n * (`hasIndicator` → `rt-icon-button--has-indicator`).\n */\n@Component({\n selector: 'rt-icon-button',\n templateUrl: './rt-icon-button.component.html',\n styleUrls: ['./rt-icon-button.component.scss'],\n changeDetection: ChangeDetectionStrategy.OnPush,\n encapsulation: ViewEncapsulation.None,\n imports: [\n // standalone components / directives\n RtIconComponent,\n RtRippleDirective,\n RtTooltipDirective,\n BlockDirective,\n ElemDirective,\n ModDirective,\n ],\n hostDirectives: [{ directive: RtRadiusDirective, inputs: ['radius'] }],\n host: {\n class: BEM_BLOCK,\n },\n})\nexport class RtIconButtonComponent {\n /**\n * Размер дочерней `<rt-icon>`. По умолчанию маппится 1-к-1 от размера кнопки,\n * но потребитель может задать свой: у крупной кнопки-действия (плавающая\n * кнопка чата) иконка во весь диаметр выглядит тяжеловесно, а сама кнопка\n * должна остаться большой — в неё целятся пальцем.\n */\n protected readonly resolvedIconSize: Signal<IRtIcon.Size> = computed((): IRtIcon.Size => {\n const map: Readonly<Record<IRtIconButton.Size, IRtIcon.Size>> = {\n '2xs': 'sm',\n xs: 'sm',\n sm: 'sm',\n md: 'md',\n lg: 'lg',\n xl: 'xl',\n '2xl': '2xl',\n };\n return this.iconSize() ?? map[this.size()];\n });\n\n /** Кнопка отключена, если установлен disabled ИЛИ loading. */\n protected readonly isDisabled: Signal<boolean> = computed((): boolean => this.disabled() || this.loading());\n\n /**\n * BEM-модификаторы для `[rtMod]`. Собираем в .ts (а не в шаблоне), потому что\n * Angular template-parser не поддерживает computed property keys в inline-объектах.\n * camelCase ключи `hasIndicator` директива автоматически конвертирует в `has-indicator`.\n */\n protected readonly bemMods: Signal<Record<string, boolean>> = computed((): Record<string, boolean> => ({\n [this.variant()]: true,\n [this.size()]: true,\n loading: this.loading(),\n active: this.active(),\n hasIndicator: this.indicator(),\n }));\n\n /**\n * Имя иконки в наборе кита. Нужно оно или `glyph`; когда переданы оба, побеждает имя. Нет ни\n * того ни другого — значок кит не рисует, и кнопка показывает вложенное содержимое: свой\n * рисунок приложения встаёт в кнопку с её размером, формой и состояниями.\n */\n public readonly icon: InputSignal<IRtIcon.Name | null> = input<IRtIcon.Name | null>(null);\n\n /** Имя Material вместо имени кита — рисуется так же, как вход `glyph` у `rt-icon`. */\n public readonly glyph: InputSignal<string | null> = input<string | null>(null);\n\n /** Доступное имя для screen-reader'ов — обязательно (icon-only кнопка). */\n public readonly ariaLabel: InputSignal<string> = input.required<string>();\n\n /** Семантическая палитра. */\n public readonly variant: InputSignal<IRtIconButton.Variant> = input<IRtIconButton.Variant>('ghost');\n\n /**\n * Цвет самой иконки. Default `current` — иконка наследует цвет текста кнопки\n * (поведение по умолчанию). Явное значение нужно, когда иконка должна\n * отличаться от текста кнопки — например крестик-очистка внутри поля,\n * который должен совпадать по цвету с иконками-аффордансами самого поля.\n */\n public readonly iconColor: InputSignal<IRtIcon.Color> = input<IRtIcon.Color>('current');\n\n /**\n * Залитый рисунок значка вместо контурного — как `fill` у `rt-icon`. Рисует его материальный\n * набор; значок своего набора один и от признака не меняется.\n */\n public readonly iconFill: InputSignalWithTransform<boolean, BooleanInput> = input<boolean, BooleanInput>(false, {\n transform: booleanAttribute,\n });\n\n /** Размер квадрата. */\n public readonly size: InputSignal<IRtIconButton.Size> = input<IRtIconButton.Size>('md');\n\n /** Размер иконки; пусто — берётся от размера кнопки. */\n public readonly iconSize: InputSignal<IRtIcon.Size | null> = input<IRtIcon.Size | null>(null);\n\n /** HTML-type для нативного `<button>`. */\n public readonly type: InputSignal<IRtIconButton.Type> = input<IRtIconButton.Type>('button');\n\n /**\n * Текст styled-tooltip'а (`rtTooltip`), показывается на hover/focus. Пустая\n * строка → tooltip выключен. Для icon-only кнопок обычно дублирует `ariaLabel`.\n */\n public readonly tooltip: InputSignal<string> = input<string>('');\n\n /**\n * Прячет ли клик открытую подсказку (`rtTooltipHideOnClick`). `false` — у переключателя:\n * подсказка остаётся и показывает новое состояние на месте.\n */\n public readonly tooltipHideOnClick: InputSignalWithTransform<boolean, BooleanInput> = input<boolean, BooleanInput>(true, {\n transform: booleanAttribute,\n });\n\n /**\n * Tabindex внутренней `<button>`. Default `0` (в обычном таб-порядке).\n * Значение `-1` исключает кнопку из таб-навигации, оставляя клик мышью —\n * нужно для вспомогательных аффордансов вроде крестика-очистки внутри поля.\n */\n public readonly tabIndex: InputSignalWithTransform<number, NumberInput> = input<number, NumberInput>(0, { transform: numberAttribute });\n\n /** Состояние загрузки: показывает spinner вместо иконки + disabled. */\n public readonly loading: InputSignalWithTransform<boolean, BooleanInput> = input<boolean, BooleanInput>(false, {\n transform: booleanAttribute,\n });\n\n /** Нативное отключение кнопки. */\n public readonly disabled: InputSignalWithTransform<boolean, BooleanInput> = input<boolean, BooleanInput>(false, {\n transform: booleanAttribute,\n });\n\n /** Toggle-состояние — превращается в `aria-pressed=\"true\"`. */\n public readonly active: InputSignalWithTransform<boolean, BooleanInput> = input<boolean, BooleanInput>(false, {\n transform: booleanAttribute,\n });\n\n /**\n * Раскрыта ли панель, которую кнопка открывает, — превращается в `aria-expanded`. `null` —\n * кнопка ничего не раскрывает, и атрибута нет.\n */\n public readonly expanded: InputSignal<boolean | null> = input<boolean | null>(null);\n\n /** Бейдж-индикатор (dot top-right через BEM-модификатор). */\n public readonly indicator: InputSignalWithTransform<boolean, BooleanInput> = input<boolean, BooleanInput>(false, {\n transform: booleanAttribute,\n });\n\n /** Эмиттит MouseEvent при клике (только когда не disabled и не loading). */\n public readonly clicked: OutputEmitterRef<MouseEvent> = output<MouseEvent>();\n\n protected onClick(event: MouseEvent): void {\n if (this.isDisabled()) {\n return;\n }\n this.clicked.emit(event);\n }\n}\n","<button\n rtBlock=\"rt-icon-button\"\n qa-dataid=\"icon-button-control\"\n rtRipple\n [rippleDisabled]=\"isDisabled() || loading()\"\n [rtTooltip]=\"tooltip()\"\n [rtTooltipHideOnClick]=\"tooltipHideOnClick()\"\n [rtMod]=\"bemMods()\"\n [type]=\"type()\"\n [disabled]=\"isDisabled()\"\n [attr.aria-label]=\"ariaLabel()\"\n [attr.aria-pressed]=\"active() ? 'true' : null\"\n [attr.aria-expanded]=\"expanded()\"\n [attr.tabindex]=\"tabIndex()\"\n (click)=\"onClick($event)\">\n @if (loading()) {\n <rt-icon rtElem=\"spinner\" name=\"spinner\" color=\"current\" [size]=\"resolvedIconSize()\" />\n } @else if (icon() || glyph()) {\n <rt-icon rtElem=\"icon\" [color]=\"iconColor()\" [name]=\"icon()\" [glyph]=\"glyph()\" [size]=\"resolvedIconSize()\" [fill]=\"iconFill()\" />\n } @else {\n <span rtElem=\"content\" qa-dataid=\"icon-button-content\"><ng-content /></span>\n }\n @if (indicator()) {\n <span rtElem=\"indicator\" aria-hidden=\"true\"></span>\n }\n</button>\n"],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"rt-tools-ui-kit-v2-icon-button.mjs","names":[],"sources":["../../../projects/ui-kit-v2/src/lib/components/icon-button/rt-icon-button.component.ts","../../../projects/ui-kit-v2/src/lib/components/icon-button/rt-icon-button.component.html"],"sourcesContent":["import { CdkMonitorFocus } from '@angular/cdk/a11y';\nimport { BooleanInput, NumberInput } from '@angular/cdk/coercion';\nimport {\n booleanAttribute,\n ChangeDetectionStrategy,\n Component,\n computed,\n input,\n InputSignal,\n InputSignalWithTransform,\n numberAttribute,\n output,\n OutputEmitterRef,\n Signal,\n ViewEncapsulation,\n} from '@angular/core';\n\nimport { BlockDirective, ElemDirective, ModDirective } from '@rt-tools/core';\n\nimport { RtIconComponent } from '@rt-tools/ui-kit-v2/icon';\nimport { IRtIcon, IRtKitConfig, rtKitDefault } from '@rt-tools/ui-kit-v2/core';\nimport { RtRadiusDirective } from '@rt-tools/ui-kit-v2/radius';\nimport { RtRippleDirective } from '@rt-tools/ui-kit-v2/ripple';\nimport { RtTooltipDirective } from '@rt-tools/ui-kit-v2/tooltip';\nimport { IRtIconButton } from './rt-icon-button.model';\n\nconst BEM_BLOCK: string = 'rt-icon-button';\n\n/**\n * Универсальная icon-only кнопка кита.\n *\n * Рендерит свой собственный `<button type=\"...\">` внутри template (НЕ host-button).\n * Все цвета и размеры — через семантические `--rt-*` токены; геометрия квадрата\n * берётся из `--rt-icon-button-size`, а без него — из шага `size`. Свойство, заданное на теге\n * `<rt-icon-button>` или выше, доходит до кнопки; так же и `--rt-icon-button-bg`.\n *\n * Loading state — заменяет иконку на `<rt-icon name=\"spinner\">` и блокирует\n * клики (`button[disabled]`). Active state управляет `aria-pressed` (для toggle-кнопок).\n * Indicator — небольшой dot top-right через BEM-элемент `__indicator`.\n *\n * BEM-разметка — через `rtBlock=\"rt-icon-button\"` + `[rtMod]` объект; камелкейс\n * модификаторов автоматически конвертируется директивой в kebab-case\n * (`hasIndicator` → `rt-icon-button--has-indicator`).\n */\n@Component({\n selector: 'rt-icon-button',\n templateUrl: './rt-icon-button.component.html',\n styleUrls: ['./rt-icon-button.component.scss'],\n changeDetection: ChangeDetectionStrategy.OnPush,\n encapsulation: ViewEncapsulation.None,\n imports: [\n // standalone components / directives\n RtIconComponent,\n RtRippleDirective,\n CdkMonitorFocus,\n RtTooltipDirective,\n BlockDirective,\n ElemDirective,\n ModDirective,\n ],\n hostDirectives: [{ directive: RtRadiusDirective, inputs: ['radius'] }],\n host: {\n class: BEM_BLOCK,\n },\n})\nexport class RtIconButtonComponent {\n /**\n * Размер дочерней `<rt-icon>`. По умолчанию маппится 1-к-1 от размера кнопки,\n * но потребитель может задать свой: у крупной кнопки-действия (плавающая\n * кнопка чата) иконка во весь диаметр выглядит тяжеловесно, а сама кнопка\n * должна остаться большой — в неё целятся пальцем.\n */\n protected readonly resolvedIconSize: Signal<IRtIcon.Size> = computed((): IRtIcon.Size => {\n const map: Readonly<Record<IRtIconButton.Size, IRtIcon.Size>> = {\n '2xs': 'sm',\n xs: 'sm',\n sm: 'sm',\n md: 'md',\n lg: 'lg',\n xl: 'xl',\n '2xl': '2xl',\n };\n return this.iconSize() ?? map[this.size()];\n });\n\n /** Кнопка отключена, если установлен disabled ИЛИ loading. */\n protected readonly isDisabled: Signal<boolean> = computed((): boolean => this.disabled() || this.loading());\n\n /**\n * BEM-модификаторы для `[rtMod]`. Собираем в .ts (а не в шаблоне), потому что\n * Angular template-parser не поддерживает computed property keys в inline-объектах.\n * camelCase ключи `hasIndicator` директива автоматически конвертирует в `has-indicator`.\n */\n protected readonly bemMods: Signal<Record<string, boolean>> = computed((): Record<string, boolean> => ({\n [this.variant()]: true,\n [this.size()]: true,\n loading: this.loading(),\n active: this.active(),\n hasIndicator: this.indicator(),\n }));\n\n /**\n * Имя иконки в наборе кита. Нужно оно или `glyph`; когда переданы оба, побеждает имя. Нет ни\n * того ни другого — значок кит не рисует, и кнопка показывает вложенное содержимое: свой\n * рисунок приложения встаёт в кнопку с её размером, формой и состояниями.\n */\n public readonly icon: InputSignal<IRtIcon.Name | null> = input<IRtIcon.Name | null>(null);\n\n /** Имя Material вместо имени кита — рисуется так же, как вход `glyph` у `rt-icon`. */\n public readonly glyph: InputSignal<string | null> = input<string | null>(null);\n\n /** Доступное имя для screen-reader'ов — обязательно (icon-only кнопка). */\n public readonly ariaLabel: InputSignal<string> = input.required<string>();\n\n /** Семантическая палитра. */\n public readonly variant: InputSignal<IRtIconButton.Variant> = input<IRtIconButton.Variant>('ghost');\n\n /**\n * Цвет самой иконки. Default `current` — иконка наследует цвет текста кнопки\n * (поведение по умолчанию). Явное значение нужно, когда иконка должна\n * отличаться от текста кнопки — например крестик-очистка внутри поля,\n * который должен совпадать по цвету с иконками-аффордансами самого поля.\n */\n public readonly iconColor: InputSignal<IRtIcon.Color> = input<IRtIcon.Color>('current');\n\n /**\n * Залитый рисунок значка вместо контурного — как `fill` у `rt-icon`. Рисует его материальный\n * набор; значок своего набора один и от признака не меняется.\n */\n public readonly iconFill: InputSignalWithTransform<boolean, BooleanInput> = input<boolean, BooleanInput>(false, {\n transform: booleanAttribute,\n });\n\n /** Размер квадрата. */\n public readonly size: InputSignal<IRtIconButton.Size> = input<IRtIconButton.Size>('md');\n\n /** Размер иконки; пусто — берётся от размера кнопки. */\n public readonly iconSize: InputSignal<IRtIcon.Size | null> = input<IRtIcon.Size | null>(null);\n\n /** HTML-type для нативного `<button>`. */\n public readonly type: InputSignal<IRtIconButton.Type> = input<IRtIconButton.Type>('button');\n\n /**\n * Текст styled-tooltip'а (`rtTooltip`), показывается на hover/focus. Пустая\n * строка → tooltip выключен. Для icon-only кнопок обычно дублирует `ariaLabel`.\n */\n public readonly tooltip: InputSignal<string> = input<string>('');\n\n /**\n * Прячет ли клик открытую подсказку (`rtTooltipHideOnClick`). `false` — у переключателя:\n * подсказка остаётся и показывает новое состояние на месте. Умолчание — из настроек кита\n * `components.tooltip.hideOnClick`, как у самой подсказки: иначе своё `true` кнопки перебивало бы их.\n */\n public readonly tooltipHideOnClick: InputSignalWithTransform<boolean, BooleanInput> = input<boolean, BooleanInput>(\n rtKitDefault('tooltip', (it: IRtKitConfig.Tooltip): boolean | undefined => it.hideOnClick, true),\n {\n transform: booleanAttribute,\n }\n );\n\n /**\n * Tabindex внутренней `<button>`. Default `0` (в обычном таб-порядке).\n * Значение `-1` исключает кнопку из таб-навигации, оставляя клик мышью —\n * нужно для вспомогательных аффордансов вроде крестика-очистки внутри поля.\n */\n public readonly tabIndex: InputSignalWithTransform<number, NumberInput> = input<number, NumberInput>(0, { transform: numberAttribute });\n\n /** Состояние загрузки: показывает spinner вместо иконки + disabled. */\n public readonly loading: InputSignalWithTransform<boolean, BooleanInput> = input<boolean, BooleanInput>(false, {\n transform: booleanAttribute,\n });\n\n /** Нативное отключение кнопки. */\n public readonly disabled: InputSignalWithTransform<boolean, BooleanInput> = input<boolean, BooleanInput>(false, {\n transform: booleanAttribute,\n });\n\n /** Toggle-состояние — превращается в `aria-pressed=\"true\"`. */\n public readonly active: InputSignalWithTransform<boolean, BooleanInput> = input<boolean, BooleanInput>(false, {\n transform: booleanAttribute,\n });\n\n /**\n * Раскрыта ли панель, которую кнопка открывает, — превращается в `aria-expanded`. `null` —\n * кнопка ничего не раскрывает, и атрибута нет.\n */\n public readonly expanded: InputSignal<boolean | null> = input<boolean | null>(null);\n\n /** Бейдж-индикатор (dot top-right через BEM-модификатор). */\n public readonly indicator: InputSignalWithTransform<boolean, BooleanInput> = input<boolean, BooleanInput>(false, {\n transform: booleanAttribute,\n });\n\n /** Эмиттит MouseEvent при клике (только когда не disabled и не loading). */\n public readonly clicked: OutputEmitterRef<MouseEvent> = output<MouseEvent>();\n\n protected onClick(event: MouseEvent): void {\n if (this.isDisabled()) {\n return;\n }\n this.clicked.emit(event);\n }\n}\n","<button\n rtBlock=\"rt-icon-button\"\n qa-dataid=\"icon-button-control\"\n rtRipple\n cdkMonitorElementFocus\n [rippleDisabled]=\"isDisabled() || loading()\"\n [rtTooltip]=\"tooltip()\"\n [rtTooltipHideOnClick]=\"tooltipHideOnClick()\"\n [rtMod]=\"bemMods()\"\n [type]=\"type()\"\n [disabled]=\"isDisabled()\"\n [attr.aria-label]=\"ariaLabel()\"\n [attr.aria-pressed]=\"active() ? 'true' : null\"\n [attr.aria-expanded]=\"expanded()\"\n [attr.tabindex]=\"tabIndex()\"\n (click)=\"onClick($event)\">\n @if (loading()) {\n <rt-icon rtElem=\"spinner\" name=\"spinner\" color=\"current\" [size]=\"resolvedIconSize()\" />\n } @else if (icon() || glyph()) {\n <rt-icon rtElem=\"icon\" [color]=\"iconColor()\" [name]=\"icon()\" [glyph]=\"glyph()\" [size]=\"resolvedIconSize()\" [fill]=\"iconFill()\" />\n } @else {\n <span rtElem=\"content\" qa-dataid=\"icon-button-content\"><ng-content /></span>\n }\n @if (indicator()) {\n <span rtElem=\"indicator\" aria-hidden=\"true\"></span>\n }\n</button>\n"],"mappings":"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"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"rt-tools-ui-kit-v2-image-upload.mjs","names":[],"sources":["../../../projects/ui-kit-v2/src/lib/components/image-upload/rt-image-upload.logic.ts","../../../projects/ui-kit-v2/src/lib/components/image-upload/rt-image-upload.component.ts","../../../projects/ui-kit-v2/src/lib/components/image-upload/rt-image-upload.component.html"],"sourcesContent":["import { IRtImageUpload } from './rt-image-upload.model';\n\n/**\n * Какое состояние занимает место. Загрузка приложения важнее всего, выбранный исходник важнее\n * картинки, картинка важнее зоны загрузки.\n */\nexport function uploadState(loading: boolean, hasSource: boolean, image: string | null): IRtImageUpload.State {\n if (loading) {\n return 'loading';\n }\n if (hasSource) {\n return 'cropping';\n }\n return image ? 'image' : 'empty';\n}\n\n/** Берётся только файл изображения: брошенный файл другого типа загрузчик пропускает */\nexport function isImageFile(file: File | null | undefined): file is File {\n return !!file && file.type.startsWith('image/');\n}\n","import { BooleanInput, NumberInput } from '@angular/cdk/coercion';\nimport { DOCUMENT } from '@angular/common';\nimport {\n booleanAttribute,\n ChangeDetectionStrategy,\n Component,\n computed,\n DestroyRef,\n ElementRef,\n inject,\n input,\n InputSignal,\n InputSignalWithTransform,\n linkedSignal,\n numberAttribute,\n output,\n OutputEmitterRef,\n Signal,\n signal,\n viewChild,\n ViewEncapsulation,\n WritableSignal,\n} from '@angular/core';\n\nimport { BlockDirective, ElemDirective, ModDirective, WINDOW } from '@rt-tools/core';\n\nimport { RT_KIT_LABELS, TRtKitLabelMap } from '@rt-tools/ui-kit-v2/core';\nimport { IButton } from '@rt-tools/ui-kit-v2/core';\nimport { RtButtonDirective } from '@rt-tools/ui-kit-v2/button';\nimport { RtEmptyStateComponent } from '@rt-tools/ui-kit-v2/empty-state';\nimport { RtFileDropComponent } from '@rt-tools/ui-kit-v2/file-drop';\nimport { IRtIcon } from '@rt-tools/ui-kit-v2/core';\nimport { RtIconButtonComponent } from '@rt-tools/ui-kit-v2/icon-button';\nimport { IRtImageCropper, RT_IMAGE_CROPPER_QUALITY, RtImageCropperComponent } from '@rt-tools/ui-kit-v2/image-cropper';\nimport { TRtRadius } from '@rt-tools/ui-kit-v2/core';\nimport { RtSpinnerComponent } from '@rt-tools/ui-kit-v2/spinner';\nimport { RtTooltipDirective } from '@rt-tools/ui-kit-v2/tooltip';\nimport { isImageFile, uploadState } from './rt-image-upload.logic';\nimport { IRtImageUpload } from './rt-image-upload.model';\n\nconst BEM_BLOCK: string = 'rt-image-upload';\n\n/**\n * Загрузчик одного изображения: одно место, в котором по очереди стоят зона загрузки, обрезка и\n * сама картинка. Файл выбирают кнопкой зоны или бросают на неё; выбранный открывает обрезку, а\n * «Применить» ставит результат на место картинки и отдаёт файл приложению. Нажатие на картинку\n * выбирает другой файл.\n *\n * Картинка — адрес: приложение даёт свой, а адрес применённого файла загрузчик делает сам и\n * отпускает его, когда картинку сменили или компонент ушёл. Файл приложение получает в\n * `imageChanged`.\n */\n@Component({\n selector: 'rt-image-upload',\n templateUrl: './rt-image-upload.component.html',\n styleUrl: './rt-image-upload.component.scss',\n changeDetection: ChangeDetectionStrategy.OnPush,\n encapsulation: ViewEncapsulation.None,\n imports: [\n // directives\n BlockDirective,\n ElemDirective,\n ModDirective,\n RtButtonDirective,\n RtTooltipDirective,\n\n // components\n RtEmptyStateComponent,\n RtFileDropComponent,\n RtIconButtonComponent,\n RtImageCropperComponent,\n RtSpinnerComponent,\n ],\n host: {\n class: BEM_BLOCK,\n '[class.rt-image-upload--disabled]': 'disabled()',\n },\n})\nexport class RtImageUploadComponent {\n readonly #window: Window & typeof globalThis = inject(WINDOW) as Window & typeof globalThis;\n\n readonly #document: Document = inject(DOCUMENT);\n\n /** Адрес, сделанный загрузчиком под применённый файл: его и только его он отпускает */\n #ownUrl: string | null = null;\n\n protected readonly picker: Signal<ElementRef<HTMLInputElement>> = viewChild.required<ElementRef<HTMLInputElement>>('picker');\n\n protected readonly t: Signal<TRtKitLabelMap> = inject(RT_KIT_LABELS);\n\n /** Выбранный файл, который сейчас режет обрезка */\n protected readonly source: WritableSignal<File | null> = signal(null);\n\n /** Последний результат обрезки — его берёт «Применить» */\n protected readonly result: WritableSignal<IRtImageCropper.Result | null> = signal(null);\n\n /** Что сейчас стоит в месте загрузчика */\n protected readonly state: Signal<IRtImageUpload.State> = computed((): IRtImageUpload.State =>\n uploadState(this.loading(), this.source() !== null, this.image())\n );\n\n /** Подсказка над картинкой: своя приложения или подпись кита */\n protected readonly hint: Signal<string> = computed((): string => this.tooltip() || this.t().uiImageUploadChange);\n\n /** Круглая ли кнопка скачивания: подложка под размытием повторяет её скругление */\n protected readonly downloadRound: Signal<boolean> = computed((): boolean => this.downloadShape() === 'circle');\n\n /** Шаг скругления кнопки скачивания: круг — полный шаг, квадрат — скругление кнопки по умолчанию */\n protected readonly downloadRadius: Signal<TRtRadius | null> = computed((): TRtRadius | null => (this.downloadRound() ? 'full' : null));\n\n /**\n * Адрес текущей картинки: данный приложением или сделанный под применённый файл. Новый адрес от\n * приложения снова берёт верх над применённым.\n */\n protected readonly image: WritableSignal<string | null> = linkedSignal((): string | null => this.imageUrl());\n\n /** Адрес картинки от приложения */\n public readonly imageUrl: InputSignal<string | null> = input<string | null>(null);\n\n /** Имя файла, под которым картинку скачивают и отдают приложению */\n public readonly fileName: InputSignal<string> = input<string>('image');\n\n /** Подсказка над картинкой; пустая — подпись кита */\n public readonly tooltip: InputSignal<string> = input<string>('');\n\n /** Кнопка скачивания рядом с картинкой */\n public readonly downloadable: InputSignalWithTransform<boolean, BooleanInput> = input<boolean, BooleanInput>(false, {\n transform: booleanAttribute,\n });\n\n /** Форма кнопки скачивания; она заходит за правый верхний угол картинки при любой форме */\n public readonly downloadShape: InputSignal<IRtImageUpload.DownloadShape> = input<IRtImageUpload.DownloadShape>('circle');\n\n /** Размер значка кнопки скачивания; пусто — от размера кнопки */\n public readonly downloadIconSize: InputSignal<IRtIcon.Size | null> = input<IRtIcon.Size | null>(null);\n\n /** Вид кнопки выбора файла в пустом загрузчике */\n public readonly chooseAppearance: InputSignal<IButton.Appearance> = input<IButton.Appearance>('outlined');\n\n /** Значок кнопки выбора файла; пусто — кнопка без значка */\n public readonly chooseIcon: InputSignal<string | null> = input<string | null>('ico-upload');\n\n /** Без кнопок «Отмена» и «Применить»: каждый результат обрезки применяется сразу */\n public readonly autoApply: InputSignalWithTransform<boolean, BooleanInput> = input<boolean, BooleanInput>(false, {\n transform: booleanAttribute,\n });\n\n /** Приложение загружает картинку: на месте стоит индикатор */\n public readonly loading: InputSignalWithTransform<boolean, BooleanInput> = input<boolean, BooleanInput>(false, {\n transform: booleanAttribute,\n });\n\n /** Недоступный загрузчик не берёт файлов и не отзывается на нажатие картинки */\n public readonly disabled: InputSignalWithTransform<boolean, BooleanInput> = input<boolean, BooleanInput>(false, {\n transform: booleanAttribute,\n });\n\n /** Соотношение рамки обрезки; пусто — свободная рамка */\n public readonly ratio: InputSignalWithTransform<number | null, NumberInput> = input<number | null, NumberInput>(null, {\n transform: (value: NumberInput): number | null => (value === null || value === '' ? null : numberAttribute(value, 0) || null),\n });\n\n /** Круглая маска обрезки для аватара */\n public readonly round: InputSignalWithTransform<boolean, BooleanInput> = input<boolean, BooleanInput>(false, {\n transform: booleanAttribute,\n });\n\n /** Формат результата; пусто — формат исходника */\n public readonly format: InputSignal<IRtImageCropper.Format | null> = input<IRtImageCropper.Format | null>(null);\n\n /** Качество результата, от 0 до 100 */\n public readonly quality: InputSignalWithTransform<number, NumberInput> = input<number, NumberInput>(RT_IMAGE_CROPPER_QUALITY, {\n transform: (value: NumberInput): number => numberAttribute(value, RT_IMAGE_CROPPER_QUALITY),\n });\n\n /** Применённый файл — его приложение отправляет, куда ему надо */\n public readonly imageChanged: OutputEmitterRef<File> = output<File>();\n\n /** Картинку скачали */\n public readonly downloaded: OutputEmitterRef<void> = output<void>();\n\n constructor() {\n inject(DestroyRef).onDestroy((): void => this.#release());\n }\n\n /** Открывает выбор файла, если загрузчик доступен */\n public pick(): void {\n if (!this.disabled()) {\n this.picker().nativeElement.click();\n }\n }\n\n /** Файл выбран кнопкой или брошен: изображение открывает обрезку, остальное пропускается */\n public choose(file: File | null | undefined): void {\n if (this.disabled() || !isImageFile(file)) {\n return;\n }\n this.result.set(null);\n this.source.set(file);\n }\n\n protected onPicked(event: Event): void {\n const input: HTMLInputElement = event.target as HTMLInputElement;\n this.choose(input.files?.[0]);\n // Тот же файл, выбранный второй раз, иначе не даёт события\n input.value = '';\n }\n\n protected onSpace(event: Event): void {\n event.preventDefault();\n this.pick();\n }\n\n protected onCropped(result: IRtImageCropper.Result): void {\n this.result.set(result);\n if (this.autoApply()) {\n this.#applyResult(result, false);\n }\n }\n\n protected apply(): void {\n const result: IRtImageCropper.Result | null = this.result();\n if (result !== null) {\n this.#applyResult(result, true);\n }\n }\n\n protected cancel(): void {\n this.source.set(null);\n this.result.set(null);\n }\n\n protected download(): void {\n const url: string | null = this.image();\n if (url === null) {\n return;\n }\n const link: HTMLAnchorElement = this.#document.createElement('a');\n link.href = url;\n link.download = this.fileName();\n this.#document.body.appendChild(link);\n link.click();\n link.remove();\n this.downloaded.emit();\n }\n\n /** Результат становится картинкой; `close` убирает обрезку — при автоприменении она остаётся */\n #applyResult(result: IRtImageCropper.Result, close: boolean): void {\n const file: File = new File([result.file], this.fileName(), { type: result.file.type });\n this.#release();\n this.#ownUrl = this.#window.URL.createObjectURL(file);\n this.image.set(this.#ownUrl);\n this.imageChanged.emit(file);\n if (close) {\n this.cancel();\n }\n }\n\n #release(): void {\n if (this.#ownUrl !== null) {\n this.#window.URL.revokeObjectURL(this.#ownUrl);\n this.#ownUrl = null;\n }\n }\n}\n","<ng-container rtBlock=\"rt-image-upload\">\n <input\n #picker\n hidden\n type=\"file\"\n accept=\"image/*\"\n qa-dataid=\"image-upload-native\"\n [disabled]=\"disabled()\"\n (change)=\"onPicked($event)\" />\n\n @switch (state()) {\n @case ('loading') {\n <div rtElem=\"loading\" qa-dataid=\"image-upload-loading\">\n <rt-spinner />\n </div>\n }\n @case ('cropping') {\n <rt-image-cropper\n qa-dataid=\"image-upload-cropper\"\n [file]=\"source()\"\n [ratio]=\"ratio()\"\n [round]=\"round()\"\n [format]=\"format()\"\n [quality]=\"quality()\"\n (cropped)=\"onCropped($event)\"\n (loadFailed)=\"cancel()\" />\n\n @if (!autoApply()) {\n <div rtElem=\"actions\">\n <button\n rtButton\n appearance=\"text\"\n type=\"button\"\n qa-dataid=\"image-upload-cancel\"\n [label]=\"t().uiImageUploadCancel\"\n [attr.aria-label]=\"t().uiImageUploadCancel\"\n (click)=\"cancel()\"></button>\n <button\n rtButton\n type=\"button\"\n qa-dataid=\"image-upload-apply\"\n [label]=\"t().uiImageUploadApply\"\n [attr.aria-label]=\"t().uiImageUploadApply\"\n [disabled]=\"!result()\"\n (click)=\"apply()\"></button>\n </div>\n }\n }\n @case ('image') {\n <rt-file-drop accept=\"image/*\" [disabled]=\"disabled()\" (filesDropped)=\"choose($event[0])\">\n <div rtElem=\"preview\">\n <img\n rtElem=\"image\"\n role=\"button\"\n qa-dataid=\"image-upload-image\"\n [attr.tabindex]=\"disabled() ? -1 : 0\"\n [attr.aria-disabled]=\"disabled()\"\n [attr.alt]=\"t().uiImageUploadImage\"\n [rtTooltip]=\"disabled() ? '' : hint()\"\n [rtMod]=\"{ active: !disabled() }\"\n [src]=\"image()\"\n (click)=\"pick()\"\n (keydown.enter)=\"pick()\"\n (keydown.space)=\"onSpace($event)\" />\n\n @if (downloadable()) {\n <rt-icon-button\n rtElem=\"download\"\n icon=\"ico-download\"\n qa-dataid=\"image-upload-download\"\n [radius]=\"downloadRadius()\"\n [iconSize]=\"downloadIconSize()\"\n [rtMod]=\"{ round: downloadRound() }\"\n [ariaLabel]=\"t().uiDownload\"\n [tooltip]=\"t().uiDownload\"\n (click)=\"download()\" />\n }\n </div>\n </rt-file-drop>\n }\n @default {\n <rt-file-drop accept=\"image/*\" qa-dataid=\"image-upload-drop\" [disabled]=\"disabled()\" (filesDropped)=\"choose($event[0])\">\n <rt-empty-state framed icon=\"cloud-upload\" [title]=\"t().uiImageUploadDrop\">\n <button\n rtButton\n type=\"button\"\n qa-dataid=\"image-upload-choose\"\n [appearance]=\"chooseAppearance()\"\n [icon]=\"chooseIcon()\"\n [label]=\"t().uiImageUploadChoose\"\n [attr.aria-label]=\"t().uiImageUploadChoose\"\n [disabled]=\"disabled()\"\n (click)=\"pick()\"></button>\n </rt-empty-state>\n </rt-file-drop>\n }\n }\n</ng-container>\n"],"mappings":";;;;;;;;;;;;AAMA,SAAgB,YAAY,SAAkB,WAAoB,OAAoB;CAClF,IAAI,SACA,OAAO;CAEX,IAAI,WACA,OAAO;CAEX,OAAO,QAAQ,UAAU;AAC7B;AAGA,SAAgB,YAAY,MAA6B;CACrD,OAAO,CAAC,CAAC,QAAQ,KAAK,KAAK,WAAW,QAAQ;AAClD;ACqBA,MAAM,YAAoB;AAsC1B,IAAa,yBAAb,MAAa,uBAAsB;CACtB;CAEA;CAGT;CAiGA,cAAA;EAtGS,KAAA,UAAsC,OAAO,MAAM;EAEnD,KAAA,YAAsB,OAAO,QAAQ;EAG9C,KAAA,UAAyB;EAEN,KAAA,SAA+C,UAAU,SAAuC,UAAS,GAAA,YAAA,CAAA,EAAA,WAAA,SAAA,CAAA,+BAAA,CAAA,CAAA;EAEzG,KAAA,IAA4B,OAAO,aAAa;EAGhD,KAAA,SAAsC,OAAO,MAAK,GAAA,YAAA,CAAA,EAAA,WAAA,SAAA,CAAA,+BAAA,CAAA,CAAA;EAGlD,KAAA,SAAwD,OAAO,MAAK,GAAA,YAAA,CAAA,EAAA,WAAA,SAAA,CAAA,+BAAA,CAAA,CAAA;EAGpE,KAAA,QAAsC,eACrD,YAAY,KAAK,QAAO,GAAI,KAAK,OAAM,MAAO,MAAM,KAAK,MAAK,CAAE,GACnE,GAAA,YAAA,CAAA,EAAA,WAAA,QAAA,CAAA,+BAAA,CAAA,CAAA;EAGkB,KAAA,OAAuB,eAAuB,KAAK,QAAO,KAAM,KAAK,EAAC,CAAE,CAAC,qBAAoB,GAAA,YAAA,CAAA,EAAA,WAAA,OAAA,CAAA,+BAAA,CAAA,CAAA;EAG7F,KAAA,gBAAiC,eAAwB,KAAK,cAAa,MAAO,UAAS,GAAA,YAAA,CAAA,EAAA,WAAA,gBAAA,CAAA,+BAAA,CAAA,CAAA;EAG3F,KAAA,iBAA2C,eAAkC,KAAK,cAAa,IAAK,SAAS,MAAM,GAAA,YAAA,CAAA,EAAA,WAAA,iBAAA,CAAA,+BAAA,CAAA,CAAA;EAMnH,KAAA,QAAuC,mBAAkC,KAAK,SAAQ,GAAG,GAAA,YAAA,CAAA,EAAA,WAAA,QAAA,CAAA,+BAAA,CAAA,CAAA;EAG5F,KAAA,WAAuC,MAAqB,MAAK,GAAA,YAAA,CAAA,EAAA,WAAA,WAAA,CAAA,+BAAA,CAAA,CAAA;EAGjE,KAAA,WAAgC,MAAc,SAAQ,GAAA,YAAA,CAAA,EAAA,WAAA,WAAA,CAAA,+BAAA,CAAA,CAAA;EAGtD,KAAA,UAA+B,MAAc,IAAG,GAAA,YAAA,CAAA,EAAA,WAAA,UAAA,CAAA,+BAAA,CAAA,CAAA;EAGhD,KAAA,eAAgE,MAA6B,OAAK;GAAA,GAAA,YAAA,EAAA,WAAA,eAAA,+BAAA,CAAA;GAC9G,WAAW;EAAgB,CAAA;EAIf,KAAA,gBAA2D,MAAoC,UAAS,GAAA,YAAA,CAAA,EAAA,WAAA,gBAAA,CAAA,+BAAA,CAAA,CAAA;EAGxG,KAAA,mBAAqD,MAA2B,MAAK,GAAA,YAAA,CAAA,EAAA,WAAA,mBAAA,CAAA,+BAAA,CAAA,CAAA;EAGrF,KAAA,mBAAoD,MAA0B,YAAW,GAAA,YAAA,CAAA,EAAA,WAAA,mBAAA,CAAA,+BAAA,CAAA,CAAA;EAGzF,KAAA,aAAyC,MAAqB,cAAa,GAAA,YAAA,CAAA,EAAA,WAAA,aAAA,CAAA,+BAAA,CAAA,CAAA;EAG3E,KAAA,YAA6D,MAA6B,OAAK;GAAA,GAAA,YAAA,EAAA,WAAA,YAAA,+BAAA,CAAA;GAC3G,WAAW;EAAgB,CAAA;EAIf,KAAA,UAA2D,MAA6B,OAAK;GAAA,GAAA,YAAA,EAAA,WAAA,UAAA,+BAAA,CAAA;GACzG,WAAW;EAAgB,CAAA;EAIf,KAAA,WAA4D,MAA6B,OAAK;GAAA,GAAA,YAAA,EAAA,WAAA,WAAA,+BAAA,CAAA;GAC1G,WAAW;EAAgB,CAAA;EAIf,KAAA,QAA8D,MAAkC,MAAI;GAAA,GAAA,YAAA,EAAA,WAAA,QAAA,+BAAA,CAAA;GAChH,YAAY,UAAuC,UAAU,QAAQ,UAAU,KAAK,OAAO,gBAAgB,OAAO,CAAC,KAAK;EAAK,CAAA;EAIjH,KAAA,QAAyD,MAA6B,OAAK;GAAA,GAAA,YAAA,EAAA,WAAA,QAAA,+BAAA,CAAA;GACvG,WAAW;EAAgB,CAAA;EAIf,KAAA,SAAqD,MAAqC,MAAK,GAAA,YAAA,CAAA,EAAA,WAAA,SAAA,CAAA,+BAAA,CAAA,CAAA;EAG/F,KAAA,UAAyD,MAA2B,0BAAwB;GAAA,GAAA,YAAA,EAAA,WAAA,UAAA,+BAAA,CAAA;GACxH,YAAY,UAA+B,gBAAgB,OAAO,wBAAwB;EAAC,CAAA;EAI/E,KAAA,eAAuC,OAAM;EAG7C,KAAA,aAAqC,OAAM;EAGvD,OAAO,UAAU,CAAC,CAAC,gBAAsB,KAAK,SAAQ,CAAE;CAC5D;CAGO,OAAI;EACP,IAAI,CAAC,KAAK,SAAQ,GACd,KAAK,OAAM,CAAE,CAAC,cAAc,MAAK;CAEzC;CAGO,OAAO,MAA6B;EACvC,IAAI,KAAK,SAAQ,KAAM,CAAC,YAAY,IAAI,GACpC;EAEJ,KAAK,OAAO,IAAI,IAAI;EACpB,KAAK,OAAO,IAAI,IAAI;CACxB;CAEU,SAAS,OAAY;EAC3B,MAAM,QAA0B,MAAM;EACtC,KAAK,OAAO,MAAM,QAAQ,EAAE;EAE5B,MAAM,QAAQ;CAClB;CAEU,QAAQ,OAAY;EAC1B,MAAM,eAAc;EACpB,KAAK,KAAI;CACb;CAEU,UAAU,QAA8B;EAC9C,KAAK,OAAO,IAAI,MAAM;EACtB,IAAI,KAAK,UAAS,GACd,KAAK,aAAa,QAAQ,KAAK;CAEvC;CAEU,QAAK;EACX,MAAM,SAAwC,KAAK,OAAM;EACzD,IAAI,WAAW,MACX,KAAK,aAAa,QAAQ,IAAI;CAEtC;CAEU,SAAM;EACZ,KAAK,OAAO,IAAI,IAAI;EACpB,KAAK,OAAO,IAAI,IAAI;CACxB;CAEU,WAAQ;EACd,MAAM,MAAqB,KAAK,MAAK;EACrC,IAAI,QAAQ,MACR;EAEJ,MAAM,OAA0B,KAAK,UAAU,cAAc,GAAG;EAChE,KAAK,OAAO;EACZ,KAAK,WAAW,KAAK,SAAQ;EAC7B,KAAK,UAAU,KAAK,YAAY,IAAI;EACpC,KAAK,MAAK;EACV,KAAK,OAAM;EACX,KAAK,WAAW,KAAI;CACxB;CAGA,aAAa,QAAgC,OAAc;EACvD,MAAM,OAAa,IAAI,KAAK,CAAC,OAAO,IAAI,GAAG,KAAK,SAAQ,GAAI,EAAE,MAAM,OAAO,KAAK,KAAI,CAAE;EACtF,KAAK,SAAQ;EACb,KAAK,UAAU,KAAK,QAAQ,IAAI,gBAAgB,IAAI;EACpD,KAAK,MAAM,IAAI,KAAK,OAAO;EAC3B,KAAK,aAAa,KAAK,IAAI;EAC3B,IAAI,OACA,KAAK,OAAM;CAEnB;CAEA,WAAQ;EACJ,IAAI,KAAK,YAAY,MAAM;GACvB,KAAK,QAAQ,IAAI,gBAAgB,KAAK,OAAO;GAC7C,KAAK,UAAU;EACnB;CACJ;CAzLS;EAAA,KAAA,OAAA,GAAA,mBAAA;GAAA,YAAA;GAAA,SAAA;GAAA,UAAA;GAAA,MAAA;GAAsB,MAAA,CAAA;GAAA,QAAA,GAAA,gBAAA;EAAA,CAAA;CAAA;CAAtB;EAAA,KAAA,OAAA,GAAA,qBAAA;GAAA,YAAA;GAAA,SAAA;GAAA,MAAA;GAAsB,cAAA;GAAA,UAAA;GAAA,QAAA;IAAA,UAAA;KAAA,mBAAA;KAAA,YAAA;KAAA,UAAA;KAAA,YAAA;KAAA,mBAAA;IAAA;IAAA,UAAA;KAAA,mBAAA;KAAA,YAAA;KAAA,UAAA;KAAA,YAAA;KAAA,mBAAA;IAAA;IAAA,SAAA;KAAA,mBAAA;KAAA,YAAA;KAAA,UAAA;KAAA,YAAA;KAAA,mBAAA;IAAA;IAAA,cAAA;KAAA,mBAAA;KAAA,YAAA;KAAA,UAAA;KAAA,YAAA;KAAA,mBAAA;IAAA;IAAA,eAAA;KAAA,mBAAA;KAAA,YAAA;KAAA,UAAA;KAAA,YAAA;KAAA,mBAAA;IAAA;IAAA,kBAAA;KAAA,mBAAA;KAAA,YAAA;KAAA,UAAA;KAAA,YAAA;KAAA,mBAAA;IAAA;IAAA,kBAAA;KAAA,mBAAA;KAAA,YAAA;KAAA,UAAA;KAAA,YAAA;KAAA,mBAAA;IAAA;IAAA,YAAA;KAAA,mBAAA;KAAA,YAAA;KAAA,UAAA;KAAA,YAAA;KAAA,mBAAA;IAAA;IAAA,WAAA;KAAA,mBAAA;KAAA,YAAA;KAAA,UAAA;KAAA,YAAA;KAAA,mBAAA;IAAA;IAAA,SAAA;KAAA,mBAAA;KAAA,YAAA;KAAA,UAAA;KAAA,YAAA;KAAA,mBAAA;IAAA;IAAA,UAAA;KAAA,mBAAA;KAAA,YAAA;KAAA,UAAA;KAAA,YAAA;KAAA,mBAAA;IAAA;IAAA,OAAA;KAAA,mBAAA;KAAA,YAAA;KAAA,UAAA;KAAA,YAAA;KAAA,mBAAA;IAAA;IAAA,OAAA;KAAA,mBAAA;KAAA,YAAA;KAAA,UAAA;KAAA,YAAA;KAAA,mBAAA;IAAA;IAAA,QAAA;KAAA,mBAAA;KAAA,YAAA;KAAA,UAAA;KAAA,YAAA;KAAA,mBAAA;IAAA;IAAA,SAAA;KAAA,mBAAA;KAAA,YAAA;KAAA,UAAA;KAAA,YAAA;KAAA,mBAAA;IAAA;GAAA;GAAA,SAAA;IAAA,cAAA;IAAA,YAAA;GAAA;GAAA,MAAA;IAAA,YAAA,EAAA,mCAAA,aAAA;IAAA,gBAAA;GAAA;GAAA,aAAA,CAAA;IAAA,cAAA;IAAA,OAAA;IAAA,WAAA,CAAA,QAAA;IAAA,aAAA;IAAA,UAAA;GAAA,CAAA;GAAA,UAAA;GAAA,UC9EnC;GAkGA,QAAA,CAAA,81DAAA;GAAA,cAAA;IAAA;KAAA,MAAA;KAAA,MDtCQ;KAAc,UAAA;KAAA,QAAA,CAAA,OAAA;IAAA;IAAA;KAAA,MAAA;KAAA,MACd;KAAa,UAAA;KAAA,QAAA,CAAA,OAAA;IAAA;IAAA;KAAA,MAAA;KAAA,MACb;KAAY,UAAA;IAAA;IAAA;KAAA,MAAA;KAAA,MACZ;KAAiB,UAAA;KAAA,QAAA;MAAA;MAAA;MAAA;MAAA;MAAA;MAAA;MAAA;MAAA;MAAA;MAAA;KAAA;IAAA;IAAA;KAAA,MAAA;KAAA,MACjB;KAAkB,UAAA;KAAA,QAAA;MAAA;MAAA;MAAA;MAAA;KAAA;KAAA,UAAA,CAAA,WAAA;IAAA;IAAA;KAAA,MAAA;KAAA,MAGlB;KAAqB,UAAA;KAAA,QAAA;MAAA;MAAA;MAAA;MAAA;MAAA;KAAA;IAAA;IAAA;KAAA,MAAA;KAAA,MACrB;KAAmB,UAAA;KAAA,QAAA;MAAA;MAAA;MAAA;MAAA;KAAA;KAAA,SAAA;MAAA;MAAA;MAAA;KAAA;IAAA;IAAA;KAAA,MAAA;KAAA,MACnB;KAAqB,UAAA;KAAA,QAAA;MAAA;MAAA;MAAA;MAAA;MAAA;MAAA;MAAA;MAAA;MAAA;MAAA;MAAA;MAAA;MAAA;MAAA;MAAA;MAAA;MAAA;KAAA;KAAA,SAAA,CAAA,SAAA;IAAA;IAAA;KAAA,MAAA;KAAA,MACrB;KAAuB,UAAA;KAAA,QAAA;MAAA;MAAA;MAAA;MAAA;MAAA;MAAA;MAAA;MAAA;KAAA;KAAA,SAAA,CAAA,WAAA,YAAA;IAAA;IAAA;KAAA,MAAA;KAAA,MACvB;KAAkB,UAAA;KAAA,QAAA;MAAA;MAAA;MAAA;MAAA;MAAA;MAAA;KAAA;IAAA;GAAA;GAAA,iBAAA,GAAA,wBAAA;GAAA,eAAA,GAAA,kBAAA;EAAA,CAAA;CAAA;;AAOb,GAAA,yBAAA;CAAA,YAAA;CAAA,SAAA;CAAA,UAAA;CAAA,MAAA;CAAsB,YAAA,CAAA;EA1BlC,MAAA;EACa,MAAA,CAAA;GAAA,UAAA;GAAiB,iBAGV,wBAAwB;GAAM,eAChC,kBAAkB;GAAI,SAC5B;IAEL;IACA;IACA;IACA;IACA;IAGA;IACA;IACA;IACA;IACA;GACH;GAAA,MACK;IACF,OAAO;IACP,qCAAqC;GACxC;GAAA,UAAA;GAAA,QAAA,CAAA,81DAAA;EAAA,CAAA;CAUkH,CAAA;CAAA,sBAAA,CAAA;CAAA,gBAAA;EAAA,QAAA,CAAA;GAAA,MAAA,GAAA;GAAA,MAAA,CAAA,UAAQ,EAAA,UAAA,KAAA,CAAA;EAAA,CAAA;EAAA,UAAA,CAAA;GAAA,MAAA,GAAA;GAAA,MAAA,CAAA;IAAA,UAAA;IAAA,OAAA;IAAA,UAAA;GAAA,CAAA;EAAA,CAAA;EAAA,UAAA,CAAA;GAAA,MAAA,GAAA;GAAA,MAAA,CAAA;IAAA,UAAA;IAAA,OAAA;IAAA,UAAA;GAAA,CAAA;EAAA,CAAA;EAAA,SAAA,CAAA;GAAA,MAAA,GAAA;GAAA,MAAA,CAAA;IAAA,UAAA;IAAA,OAAA;IAAA,UAAA;GAAA,CAAA;EAAA,CAAA;EAAA,cAAA,CAAA;GAAA,MAAA,GAAA;GAAA,MAAA,CAAA;IAAA,UAAA;IAAA,OAAA;IAAA,UAAA;GAAA,CAAA;EAAA,CAAA;EAAA,eAAA,CAAA;GAAA,MAAA,GAAA;GAAA,MAAA,CAAA;IAAA,UAAA;IAAA,OAAA;IAAA,UAAA;GAAA,CAAA;EAAA,CAAA;EAAA,kBAAA,CAAA;GAAA,MAAA,GAAA;GAAA,MAAA,CAAA;IAAA,UAAA;IAAA,OAAA;IAAA,UAAA;GAAA,CAAA;EAAA,CAAA;EAAA,kBAAA,CAAA;GAAA,MAAA,GAAA;GAAA,MAAA,CAAA;IAAA,UAAA;IAAA,OAAA;IAAA,UAAA;GAAA,CAAA;EAAA,CAAA;EAAA,YAAA,CAAA;GAAA,MAAA,GAAA;GAAA,MAAA,CAAA;IAAA,UAAA;IAAA,OAAA;IAAA,UAAA;GAAA,CAAA;EAAA,CAAA;EAAA,WAAA,CAAA;GAAA,MAAA,GAAA;GAAA,MAAA,CAAA;IAAA,UAAA;IAAA,OAAA;IAAA,UAAA;GAAA,CAAA;EAAA,CAAA;EAAA,SAAA,CAAA;GAAA,MAAA,GAAA;GAAA,MAAA,CAAA;IAAA,UAAA;IAAA,OAAA;IAAA,UAAA;GAAA,CAAA;EAAA,CAAA;EAAA,UAAA,CAAA;GAAA,MAAA,GAAA;GAAA,MAAA,CAAA;IAAA,UAAA;IAAA,OAAA;IAAA,UAAA;GAAA,CAAA;EAAA,CAAA;EAAA,OAAA,CAAA;GAAA,MAAA,GAAA;GAAA,MAAA,CAAA;IAAA,UAAA;IAAA,OAAA;IAAA,UAAA;GAAA,CAAA;EAAA,CAAA;EAAA,OAAA,CAAA;GAAA,MAAA,GAAA;GAAA,MAAA,CAAA;IAAA,UAAA;IAAA,OAAA;IAAA,UAAA;GAAA,CAAA;EAAA,CAAA;EAAA,QAAA,CAAA;GAAA,MAAA,GAAA;GAAA,MAAA,CAAA;IAAA,UAAA;IAAA,OAAA;IAAA,UAAA;GAAA,CAAA;EAAA,CAAA;EAAA,SAAA,CAAA;GAAA,MAAA,GAAA;GAAA,MAAA,CAAA;IAAA,UAAA;IAAA,OAAA;IAAA,UAAA;GAAA,CAAA;EAAA,CAAA;EAAA,cAAA,CAAA;GAAA,MAAA,GAAA;GAAA,MAAA,CAAA,cAAA;EAAA,CAAA;EAAA,YAAA,CAAA;GAAA,MAAA,GAAA;GAAA,MAAA,CAAA,YAAA;EAAA,CAAA;CAAA;AAAA,CAAA"}
|
|
1
|
+
{"version":3,"file":"rt-tools-ui-kit-v2-image-upload.mjs","names":[],"sources":["../../../projects/ui-kit-v2/src/lib/components/image-upload/rt-image-upload.logic.ts","../../../projects/ui-kit-v2/src/lib/components/image-upload/rt-image-upload.component.ts","../../../projects/ui-kit-v2/src/lib/components/image-upload/rt-image-upload.component.html"],"sourcesContent":["import { IRtImageUpload } from './rt-image-upload.model';\n\n/**\n * Какое состояние занимает место. Загрузка приложения важнее всего, выбранный исходник важнее\n * картинки, картинка важнее зоны загрузки.\n */\nexport function uploadState(loading: boolean, hasSource: boolean, image: string | null): IRtImageUpload.State {\n if (loading) {\n return 'loading';\n }\n if (hasSource) {\n return 'cropping';\n }\n return image ? 'image' : 'empty';\n}\n\n/** Берётся только файл изображения: брошенный файл другого типа загрузчик пропускает */\nexport function isImageFile(file: File | null | undefined): file is File {\n return !!file && file.type.startsWith('image/');\n}\n","import { BooleanInput, NumberInput } from '@angular/cdk/coercion';\nimport { DOCUMENT } from '@angular/common';\nimport {\n booleanAttribute,\n ChangeDetectionStrategy,\n Component,\n computed,\n DestroyRef,\n ElementRef,\n inject,\n input,\n InputSignal,\n InputSignalWithTransform,\n linkedSignal,\n numberAttribute,\n output,\n OutputEmitterRef,\n Signal,\n signal,\n viewChild,\n ViewEncapsulation,\n WritableSignal,\n} from '@angular/core';\n\nimport { BlockDirective, ElemDirective, ModDirective, WINDOW } from '@rt-tools/core';\n\nimport { RT_KIT_LABELS, TRtKitLabelMap } from '@rt-tools/ui-kit-v2/core';\nimport { IButton } from '@rt-tools/ui-kit-v2/core';\nimport { RtButtonDirective } from '@rt-tools/ui-kit-v2/button';\nimport { RtEmptyStateComponent } from '@rt-tools/ui-kit-v2/empty-state';\nimport { RtFileDropComponent } from '@rt-tools/ui-kit-v2/file-drop';\nimport { IRtIcon } from '@rt-tools/ui-kit-v2/core';\nimport { RtIconButtonComponent } from '@rt-tools/ui-kit-v2/icon-button';\nimport { IRtImageCropper, RT_IMAGE_CROPPER_QUALITY, RtImageCropperComponent } from '@rt-tools/ui-kit-v2/image-cropper';\nimport { TRtRadius } from '@rt-tools/ui-kit-v2/core';\nimport { RtSpinnerComponent } from '@rt-tools/ui-kit-v2/spinner';\nimport { RtTooltipDirective } from '@rt-tools/ui-kit-v2/tooltip';\nimport { isImageFile, uploadState } from './rt-image-upload.logic';\nimport { IRtImageUpload } from './rt-image-upload.model';\n\nconst BEM_BLOCK: string = 'rt-image-upload';\n\n/**\n * Загрузчик одного изображения: одно место, в котором по очереди стоят зона загрузки, обрезка и\n * сама картинка. Файл выбирают кнопкой зоны или бросают на неё; выбранный открывает обрезку, а\n * «Применить» ставит результат на место картинки и отдаёт файл приложению. Нажатие на картинку\n * выбирает другой файл.\n *\n * Картинка — адрес: приложение даёт свой, а адрес применённого файла загрузчик делает сам и\n * отпускает его, когда картинку сменили или компонент ушёл. Файл приложение получает в\n * `imageChanged`.\n */\n@Component({\n selector: 'rt-image-upload',\n templateUrl: './rt-image-upload.component.html',\n styleUrl: './rt-image-upload.component.scss',\n changeDetection: ChangeDetectionStrategy.OnPush,\n encapsulation: ViewEncapsulation.None,\n imports: [\n // directives\n BlockDirective,\n ElemDirective,\n ModDirective,\n RtButtonDirective,\n RtTooltipDirective,\n\n // components\n RtEmptyStateComponent,\n RtFileDropComponent,\n RtIconButtonComponent,\n RtImageCropperComponent,\n RtSpinnerComponent,\n ],\n host: {\n class: BEM_BLOCK,\n '[class.rt-image-upload--disabled]': 'disabled()',\n },\n})\nexport class RtImageUploadComponent {\n readonly #window: Window & typeof globalThis = inject(WINDOW) as Window & typeof globalThis;\n\n readonly #document: Document = inject(DOCUMENT);\n\n /** Адрес, сделанный загрузчиком под применённый файл: его и только его он отпускает */\n #ownUrl: string | null = null;\n\n protected readonly picker: Signal<ElementRef<HTMLInputElement>> = viewChild.required<ElementRef<HTMLInputElement>>('picker');\n\n protected readonly t: Signal<TRtKitLabelMap> = inject(RT_KIT_LABELS);\n\n /** Выбранный файл, который сейчас режет обрезка */\n protected readonly source: WritableSignal<File | null> = signal(null);\n\n /** Последний результат обрезки — его берёт «Применить» */\n protected readonly result: WritableSignal<IRtImageCropper.Result | null> = signal(null);\n\n /** Что сейчас стоит в месте загрузчика */\n protected readonly state: Signal<IRtImageUpload.State> = computed((): IRtImageUpload.State =>\n uploadState(this.loading(), this.source() !== null, this.image())\n );\n\n /** Подсказка над картинкой: своя приложения или подпись кита */\n protected readonly hint: Signal<string> = computed((): string => this.tooltip() || this.t().uiImageUploadChange);\n\n /** Круглая ли кнопка скачивания: подложка под размытием повторяет её скругление */\n protected readonly downloadRound: Signal<boolean> = computed((): boolean => this.downloadShape() === 'circle');\n\n /** Шаг скругления кнопки скачивания: круг — полный шаг, квадрат — скругление кнопки по умолчанию */\n protected readonly downloadRadius: Signal<TRtRadius | null> = computed((): TRtRadius | null => (this.downloadRound() ? 'full' : null));\n\n /**\n * Адрес текущей картинки: данный приложением или сделанный под применённый файл. Новый адрес от\n * приложения снова берёт верх над применённым.\n */\n protected readonly image: WritableSignal<string | null> = linkedSignal((): string | null => this.imageUrl());\n\n /** Адрес картинки от приложения */\n public readonly imageUrl: InputSignal<string | null> = input<string | null>(null);\n\n /** Имя файла, под которым картинку скачивают и отдают приложению */\n public readonly fileName: InputSignal<string> = input<string>('image');\n\n /** Подсказка над картинкой; пустая — подпись кита */\n public readonly tooltip: InputSignal<string> = input<string>('');\n\n /** Кнопка скачивания рядом с картинкой */\n public readonly downloadable: InputSignalWithTransform<boolean, BooleanInput> = input<boolean, BooleanInput>(false, {\n transform: booleanAttribute,\n });\n\n /** Форма кнопки скачивания; она заходит за правый верхний угол картинки при любой форме */\n public readonly downloadShape: InputSignal<IRtImageUpload.DownloadShape> = input<IRtImageUpload.DownloadShape>('circle');\n\n /** Размер значка кнопки скачивания; пусто — от размера кнопки */\n public readonly downloadIconSize: InputSignal<IRtIcon.Size | null> = input<IRtIcon.Size | null>(null);\n\n /** Вид кнопки выбора файла в пустом загрузчике */\n public readonly chooseAppearance: InputSignal<IButton.Appearance> = input<IButton.Appearance>('outlined');\n\n /** Значок кнопки выбора файла; пусто — кнопка без значка */\n public readonly chooseIcon: InputSignal<string | null> = input<string | null>('ico-upload');\n\n /** Без кнопок «Отмена» и «Применить»: каждый результат обрезки применяется сразу */\n public readonly autoApply: InputSignalWithTransform<boolean, BooleanInput> = input<boolean, BooleanInput>(false, {\n transform: booleanAttribute,\n });\n\n /** Приложение загружает картинку: на месте стоит индикатор */\n public readonly loading: InputSignalWithTransform<boolean, BooleanInput> = input<boolean, BooleanInput>(false, {\n transform: booleanAttribute,\n });\n\n /** Недоступный загрузчик не берёт файлов и не отзывается на нажатие картинки */\n public readonly disabled: InputSignalWithTransform<boolean, BooleanInput> = input<boolean, BooleanInput>(false, {\n transform: booleanAttribute,\n });\n\n /** Соотношение рамки обрезки; пусто — свободная рамка */\n public readonly ratio: InputSignalWithTransform<number | null, NumberInput> = input<number | null, NumberInput>(null, {\n transform: (value: NumberInput): number | null => (value === null || value === '' ? null : numberAttribute(value, 0) || null),\n });\n\n /** Круглая маска обрезки для аватара */\n public readonly round: InputSignalWithTransform<boolean, BooleanInput> = input<boolean, BooleanInput>(false, {\n transform: booleanAttribute,\n });\n\n /** Формат результата; пусто — формат исходника */\n public readonly format: InputSignal<IRtImageCropper.Format | null> = input<IRtImageCropper.Format | null>(null);\n\n /** Качество результата, от 0 до 100 */\n public readonly quality: InputSignalWithTransform<number, NumberInput> = input<number, NumberInput>(RT_IMAGE_CROPPER_QUALITY, {\n transform: (value: NumberInput): number => numberAttribute(value, RT_IMAGE_CROPPER_QUALITY),\n });\n\n /** Применённый файл — его приложение отправляет, куда ему надо */\n public readonly imageChanged: OutputEmitterRef<File> = output<File>();\n\n /** Картинку скачали */\n public readonly downloaded: OutputEmitterRef<void> = output<void>();\n\n constructor() {\n inject(DestroyRef).onDestroy((): void => this.#release());\n }\n\n /** Открывает выбор файла, если загрузчик доступен */\n public pick(): void {\n if (!this.disabled()) {\n this.picker().nativeElement.click();\n }\n }\n\n /** Файл выбран кнопкой или брошен: изображение открывает обрезку, остальное пропускается */\n public choose(file: File | null | undefined): void {\n if (this.disabled() || !isImageFile(file)) {\n return;\n }\n this.result.set(null);\n this.source.set(file);\n }\n\n protected onPicked(event: Event): void {\n const input: HTMLInputElement = event.target as HTMLInputElement;\n this.choose(input.files?.[0]);\n // Тот же файл, выбранный второй раз, иначе не даёт события\n input.value = '';\n }\n\n protected onSpace(event: Event): void {\n event.preventDefault();\n this.pick();\n }\n\n protected onCropped(result: IRtImageCropper.Result): void {\n this.result.set(result);\n if (this.autoApply()) {\n this.#applyResult(result, false);\n }\n }\n\n protected apply(): void {\n const result: IRtImageCropper.Result | null = this.result();\n if (result !== null) {\n this.#applyResult(result, true);\n }\n }\n\n protected cancel(): void {\n this.source.set(null);\n this.result.set(null);\n }\n\n protected download(): void {\n const url: string | null = this.image();\n if (url === null) {\n return;\n }\n const link: HTMLAnchorElement = this.#document.createElement('a');\n link.href = url;\n link.download = this.fileName();\n this.#document.body.appendChild(link);\n link.click();\n link.remove();\n this.downloaded.emit();\n }\n\n /** Результат становится картинкой; `close` убирает обрезку — при автоприменении она остаётся */\n #applyResult(result: IRtImageCropper.Result, close: boolean): void {\n const file: File = new File([result.file], this.fileName(), { type: result.file.type });\n this.#release();\n this.#ownUrl = this.#window.URL.createObjectURL(file);\n this.image.set(this.#ownUrl);\n this.imageChanged.emit(file);\n if (close) {\n this.cancel();\n }\n }\n\n #release(): void {\n if (this.#ownUrl !== null) {\n this.#window.URL.revokeObjectURL(this.#ownUrl);\n this.#ownUrl = null;\n }\n }\n}\n","<ng-container rtBlock=\"rt-image-upload\">\n <input\n #picker\n hidden\n type=\"file\"\n accept=\"image/*\"\n qa-dataid=\"image-upload-native\"\n [disabled]=\"disabled()\"\n (change)=\"onPicked($event)\" />\n\n @switch (state()) {\n @case ('loading') {\n <div rtElem=\"loading\" qa-dataid=\"image-upload-loading\">\n <rt-spinner />\n </div>\n }\n @case ('cropping') {\n <rt-image-cropper\n qa-dataid=\"image-upload-cropper\"\n [file]=\"source()\"\n [ratio]=\"ratio()\"\n [round]=\"round()\"\n [format]=\"format()\"\n [quality]=\"quality()\"\n (cropped)=\"onCropped($event)\"\n (loadFailed)=\"cancel()\" />\n\n @if (!autoApply()) {\n <div rtElem=\"actions\">\n <button\n rtButton\n appearance=\"text\"\n type=\"button\"\n qa-dataid=\"image-upload-cancel\"\n [label]=\"t().uiImageUploadCancel\"\n [attr.aria-label]=\"t().uiImageUploadCancel\"\n (click)=\"cancel()\"></button>\n <button\n rtButton\n type=\"button\"\n qa-dataid=\"image-upload-apply\"\n [label]=\"t().uiImageUploadApply\"\n [attr.aria-label]=\"t().uiImageUploadApply\"\n [disabled]=\"!result()\"\n (click)=\"apply()\"></button>\n </div>\n }\n }\n @case ('image') {\n <rt-file-drop accept=\"image/*\" [disabled]=\"disabled()\" (filesDropped)=\"choose($event[0])\">\n <div rtElem=\"preview\">\n <img\n rtElem=\"image\"\n role=\"button\"\n qa-dataid=\"image-upload-image\"\n [attr.tabindex]=\"disabled() ? -1 : 0\"\n [attr.aria-disabled]=\"disabled()\"\n [attr.alt]=\"t().uiImageUploadImage\"\n [rtTooltip]=\"disabled() ? '' : hint()\"\n [rtMod]=\"{ active: !disabled() }\"\n [src]=\"image()\"\n (click)=\"pick()\"\n (keydown.enter)=\"pick()\"\n (keydown.space)=\"onSpace($event)\" />\n\n @if (downloadable()) {\n <rt-icon-button\n rtElem=\"download\"\n icon=\"ico-download\"\n qa-dataid=\"image-upload-download\"\n [radius]=\"downloadRadius()\"\n [iconSize]=\"downloadIconSize()\"\n [rtMod]=\"{ round: downloadRound() }\"\n [ariaLabel]=\"t().uiDownload\"\n [tooltip]=\"t().uiDownload\"\n (click)=\"download()\" />\n }\n </div>\n </rt-file-drop>\n }\n @default {\n <rt-file-drop accept=\"image/*\" qa-dataid=\"image-upload-drop\" [disabled]=\"disabled()\" (filesDropped)=\"choose($event[0])\">\n <rt-empty-state framed icon=\"cloud-upload\" [title]=\"t().uiImageUploadDrop\">\n <button\n rtButton\n type=\"button\"\n qa-dataid=\"image-upload-choose\"\n [appearance]=\"chooseAppearance()\"\n [icon]=\"chooseIcon()\"\n [label]=\"t().uiImageUploadChoose\"\n [attr.aria-label]=\"t().uiImageUploadChoose\"\n [disabled]=\"disabled()\"\n (click)=\"pick()\"></button>\n </rt-empty-state>\n </rt-file-drop>\n }\n }\n</ng-container>\n"],"mappings":";;;;;;;;;;;;AAMA,SAAgB,YAAY,SAAkB,WAAoB,OAAoB;CAClF,IAAI,SACA,OAAO;CAEX,IAAI,WACA,OAAO;CAEX,OAAO,QAAQ,UAAU;AAC7B;AAGA,SAAgB,YAAY,MAA6B;CACrD,OAAO,CAAC,CAAC,QAAQ,KAAK,KAAK,WAAW,QAAQ;AAClD;ACqBA,MAAM,YAAoB;AAsC1B,IAAa,yBAAb,MAAa,uBAAsB;CACtB;CAEA;CAGT;CAiGA,cAAA;EAtGS,KAAA,UAAsC,OAAO,MAAM;EAEnD,KAAA,YAAsB,OAAO,QAAQ;EAG9C,KAAA,UAAyB;EAEN,KAAA,SAA+C,UAAU,SAAuC,UAAS,GAAA,YAAA,CAAA,EAAA,WAAA,SAAA,CAAA,+BAAA,CAAA,CAAA;EAEzG,KAAA,IAA4B,OAAO,aAAa;EAGhD,KAAA,SAAsC,OAAO,MAAK,GAAA,YAAA,CAAA,EAAA,WAAA,SAAA,CAAA,+BAAA,CAAA,CAAA;EAGlD,KAAA,SAAwD,OAAO,MAAK,GAAA,YAAA,CAAA,EAAA,WAAA,SAAA,CAAA,+BAAA,CAAA,CAAA;EAGpE,KAAA,QAAsC,eACrD,YAAY,KAAK,QAAO,GAAI,KAAK,OAAM,MAAO,MAAM,KAAK,MAAK,CAAE,GACnE,GAAA,YAAA,CAAA,EAAA,WAAA,QAAA,CAAA,+BAAA,CAAA,CAAA;EAGkB,KAAA,OAAuB,eAAuB,KAAK,QAAO,KAAM,KAAK,EAAC,CAAE,CAAC,qBAAoB,GAAA,YAAA,CAAA,EAAA,WAAA,OAAA,CAAA,+BAAA,CAAA,CAAA;EAG7F,KAAA,gBAAiC,eAAwB,KAAK,cAAa,MAAO,UAAS,GAAA,YAAA,CAAA,EAAA,WAAA,gBAAA,CAAA,+BAAA,CAAA,CAAA;EAG3F,KAAA,iBAA2C,eAAkC,KAAK,cAAa,IAAK,SAAS,MAAM,GAAA,YAAA,CAAA,EAAA,WAAA,iBAAA,CAAA,+BAAA,CAAA,CAAA;EAMnH,KAAA,QAAuC,mBAAkC,KAAK,SAAQ,GAAG,GAAA,YAAA,CAAA,EAAA,WAAA,QAAA,CAAA,+BAAA,CAAA,CAAA;EAG5F,KAAA,WAAuC,MAAqB,MAAK,GAAA,YAAA,CAAA,EAAA,WAAA,WAAA,CAAA,+BAAA,CAAA,CAAA;EAGjE,KAAA,WAAgC,MAAc,SAAQ,GAAA,YAAA,CAAA,EAAA,WAAA,WAAA,CAAA,+BAAA,CAAA,CAAA;EAGtD,KAAA,UAA+B,MAAc,IAAG,GAAA,YAAA,CAAA,EAAA,WAAA,UAAA,CAAA,+BAAA,CAAA,CAAA;EAGhD,KAAA,eAAgE,MAA6B,OAAK;GAAA,GAAA,YAAA,EAAA,WAAA,eAAA,+BAAA,CAAA;GAC9G,WAAW;EAAgB,CAAA;EAIf,KAAA,gBAA2D,MAAoC,UAAS,GAAA,YAAA,CAAA,EAAA,WAAA,gBAAA,CAAA,+BAAA,CAAA,CAAA;EAGxG,KAAA,mBAAqD,MAA2B,MAAK,GAAA,YAAA,CAAA,EAAA,WAAA,mBAAA,CAAA,+BAAA,CAAA,CAAA;EAGrF,KAAA,mBAAoD,MAA0B,YAAW,GAAA,YAAA,CAAA,EAAA,WAAA,mBAAA,CAAA,+BAAA,CAAA,CAAA;EAGzF,KAAA,aAAyC,MAAqB,cAAa,GAAA,YAAA,CAAA,EAAA,WAAA,aAAA,CAAA,+BAAA,CAAA,CAAA;EAG3E,KAAA,YAA6D,MAA6B,OAAK;GAAA,GAAA,YAAA,EAAA,WAAA,YAAA,+BAAA,CAAA;GAC3G,WAAW;EAAgB,CAAA;EAIf,KAAA,UAA2D,MAA6B,OAAK;GAAA,GAAA,YAAA,EAAA,WAAA,UAAA,+BAAA,CAAA;GACzG,WAAW;EAAgB,CAAA;EAIf,KAAA,WAA4D,MAA6B,OAAK;GAAA,GAAA,YAAA,EAAA,WAAA,WAAA,+BAAA,CAAA;GAC1G,WAAW;EAAgB,CAAA;EAIf,KAAA,QAA8D,MAAkC,MAAI;GAAA,GAAA,YAAA,EAAA,WAAA,QAAA,+BAAA,CAAA;GAChH,YAAY,UAAuC,UAAU,QAAQ,UAAU,KAAK,OAAO,gBAAgB,OAAO,CAAC,KAAK;EAAK,CAAA;EAIjH,KAAA,QAAyD,MAA6B,OAAK;GAAA,GAAA,YAAA,EAAA,WAAA,QAAA,+BAAA,CAAA;GACvG,WAAW;EAAgB,CAAA;EAIf,KAAA,SAAqD,MAAqC,MAAK,GAAA,YAAA,CAAA,EAAA,WAAA,SAAA,CAAA,+BAAA,CAAA,CAAA;EAG/F,KAAA,UAAyD,MAA2B,0BAAwB;GAAA,GAAA,YAAA,EAAA,WAAA,UAAA,+BAAA,CAAA;GACxH,YAAY,UAA+B,gBAAgB,OAAO,wBAAwB;EAAC,CAAA;EAI/E,KAAA,eAAuC,OAAM;EAG7C,KAAA,aAAqC,OAAM;EAGvD,OAAO,UAAU,CAAC,CAAC,gBAAsB,KAAK,SAAQ,CAAE;CAC5D;CAGO,OAAI;EACP,IAAI,CAAC,KAAK,SAAQ,GACd,KAAK,OAAM,CAAE,CAAC,cAAc,MAAK;CAEzC;CAGO,OAAO,MAA6B;EACvC,IAAI,KAAK,SAAQ,KAAM,CAAC,YAAY,IAAI,GACpC;EAEJ,KAAK,OAAO,IAAI,IAAI;EACpB,KAAK,OAAO,IAAI,IAAI;CACxB;CAEU,SAAS,OAAY;EAC3B,MAAM,QAA0B,MAAM;EACtC,KAAK,OAAO,MAAM,QAAQ,EAAE;EAE5B,MAAM,QAAQ;CAClB;CAEU,QAAQ,OAAY;EAC1B,MAAM,eAAc;EACpB,KAAK,KAAI;CACb;CAEU,UAAU,QAA8B;EAC9C,KAAK,OAAO,IAAI,MAAM;EACtB,IAAI,KAAK,UAAS,GACd,KAAK,aAAa,QAAQ,KAAK;CAEvC;CAEU,QAAK;EACX,MAAM,SAAwC,KAAK,OAAM;EACzD,IAAI,WAAW,MACX,KAAK,aAAa,QAAQ,IAAI;CAEtC;CAEU,SAAM;EACZ,KAAK,OAAO,IAAI,IAAI;EACpB,KAAK,OAAO,IAAI,IAAI;CACxB;CAEU,WAAQ;EACd,MAAM,MAAqB,KAAK,MAAK;EACrC,IAAI,QAAQ,MACR;EAEJ,MAAM,OAA0B,KAAK,UAAU,cAAc,GAAG;EAChE,KAAK,OAAO;EACZ,KAAK,WAAW,KAAK,SAAQ;EAC7B,KAAK,UAAU,KAAK,YAAY,IAAI;EACpC,KAAK,MAAK;EACV,KAAK,OAAM;EACX,KAAK,WAAW,KAAI;CACxB;CAGA,aAAa,QAAgC,OAAc;EACvD,MAAM,OAAa,IAAI,KAAK,CAAC,OAAO,IAAI,GAAG,KAAK,SAAQ,GAAI,EAAE,MAAM,OAAO,KAAK,KAAI,CAAE;EACtF,KAAK,SAAQ;EACb,KAAK,UAAU,KAAK,QAAQ,IAAI,gBAAgB,IAAI;EACpD,KAAK,MAAM,IAAI,KAAK,OAAO;EAC3B,KAAK,aAAa,KAAK,IAAI;EAC3B,IAAI,OACA,KAAK,OAAM;CAEnB;CAEA,WAAQ;EACJ,IAAI,KAAK,YAAY,MAAM;GACvB,KAAK,QAAQ,IAAI,gBAAgB,KAAK,OAAO;GAC7C,KAAK,UAAU;EACnB;CACJ;CAzLS;EAAA,KAAA,OAAA,GAAA,mBAAA;GAAA,YAAA;GAAA,SAAA;GAAA,UAAA;GAAA,MAAA;GAAsB,MAAA,CAAA;GAAA,QAAA,GAAA,gBAAA;EAAA,CAAA;CAAA;CAAtB;EAAA,KAAA,OAAA,GAAA,qBAAA;GAAA,YAAA;GAAA,SAAA;GAAA,MAAA;GAAsB,cAAA;GAAA,UAAA;GAAA,QAAA;IAAA,UAAA;KAAA,mBAAA;KAAA,YAAA;KAAA,UAAA;KAAA,YAAA;KAAA,mBAAA;IAAA;IAAA,UAAA;KAAA,mBAAA;KAAA,YAAA;KAAA,UAAA;KAAA,YAAA;KAAA,mBAAA;IAAA;IAAA,SAAA;KAAA,mBAAA;KAAA,YAAA;KAAA,UAAA;KAAA,YAAA;KAAA,mBAAA;IAAA;IAAA,cAAA;KAAA,mBAAA;KAAA,YAAA;KAAA,UAAA;KAAA,YAAA;KAAA,mBAAA;IAAA;IAAA,eAAA;KAAA,mBAAA;KAAA,YAAA;KAAA,UAAA;KAAA,YAAA;KAAA,mBAAA;IAAA;IAAA,kBAAA;KAAA,mBAAA;KAAA,YAAA;KAAA,UAAA;KAAA,YAAA;KAAA,mBAAA;IAAA;IAAA,kBAAA;KAAA,mBAAA;KAAA,YAAA;KAAA,UAAA;KAAA,YAAA;KAAA,mBAAA;IAAA;IAAA,YAAA;KAAA,mBAAA;KAAA,YAAA;KAAA,UAAA;KAAA,YAAA;KAAA,mBAAA;IAAA;IAAA,WAAA;KAAA,mBAAA;KAAA,YAAA;KAAA,UAAA;KAAA,YAAA;KAAA,mBAAA;IAAA;IAAA,SAAA;KAAA,mBAAA;KAAA,YAAA;KAAA,UAAA;KAAA,YAAA;KAAA,mBAAA;IAAA;IAAA,UAAA;KAAA,mBAAA;KAAA,YAAA;KAAA,UAAA;KAAA,YAAA;KAAA,mBAAA;IAAA;IAAA,OAAA;KAAA,mBAAA;KAAA,YAAA;KAAA,UAAA;KAAA,YAAA;KAAA,mBAAA;IAAA;IAAA,OAAA;KAAA,mBAAA;KAAA,YAAA;KAAA,UAAA;KAAA,YAAA;KAAA,mBAAA;IAAA;IAAA,QAAA;KAAA,mBAAA;KAAA,YAAA;KAAA,UAAA;KAAA,YAAA;KAAA,mBAAA;IAAA;IAAA,SAAA;KAAA,mBAAA;KAAA,YAAA;KAAA,UAAA;KAAA,YAAA;KAAA,mBAAA;IAAA;GAAA;GAAA,SAAA;IAAA,cAAA;IAAA,YAAA;GAAA;GAAA,MAAA;IAAA,YAAA,EAAA,mCAAA,aAAA;IAAA,gBAAA;GAAA;GAAA,aAAA,CAAA;IAAA,cAAA;IAAA,OAAA;IAAA,WAAA,CAAA,QAAA;IAAA,aAAA;IAAA,UAAA;GAAA,CAAA;GAAA,UAAA;GAAA,UC9EnC;GAkGA,QAAA,CAAA,81DAAA;GAAA,cAAA;IAAA;KAAA,MAAA;KAAA,MDtCQ;KAAc,UAAA;KAAA,QAAA,CAAA,OAAA;IAAA;IAAA;KAAA,MAAA;KAAA,MACd;KAAa,UAAA;KAAA,QAAA,CAAA,OAAA;IAAA;IAAA;KAAA,MAAA;KAAA,MACb;KAAY,UAAA;IAAA;IAAA;KAAA,MAAA;KAAA,MACZ;KAAiB,UAAA;KAAA,QAAA;MAAA;MAAA;MAAA;MAAA;MAAA;MAAA;MAAA;MAAA;MAAA;MAAA;KAAA;IAAA;IAAA;KAAA,MAAA;KAAA,MACjB;KAAkB,UAAA;KAAA,QAAA;MAAA;MAAA;MAAA;MAAA;MAAA;KAAA;KAAA,UAAA,CAAA,WAAA;IAAA;IAAA;KAAA,MAAA;KAAA,MAGlB;KAAqB,UAAA;KAAA,QAAA;MAAA;MAAA;MAAA;MAAA;MAAA;KAAA;IAAA;IAAA;KAAA,MAAA;KAAA,MACrB;KAAmB,UAAA;KAAA,QAAA;MAAA;MAAA;MAAA;MAAA;KAAA;KAAA,SAAA;MAAA;MAAA;MAAA;KAAA;IAAA;IAAA;KAAA,MAAA;KAAA,MACnB;KAAqB,UAAA;KAAA,QAAA;MAAA;MAAA;MAAA;MAAA;MAAA;MAAA;MAAA;MAAA;MAAA;MAAA;MAAA;MAAA;MAAA;MAAA;MAAA;MAAA;MAAA;KAAA;KAAA,SAAA,CAAA,SAAA;IAAA;IAAA;KAAA,MAAA;KAAA,MACrB;KAAuB,UAAA;KAAA,QAAA;MAAA;MAAA;MAAA;MAAA;MAAA;MAAA;MAAA;MAAA;KAAA;KAAA,SAAA,CAAA,WAAA,YAAA;IAAA;IAAA;KAAA,MAAA;KAAA,MACvB;KAAkB,UAAA;KAAA,QAAA;MAAA;MAAA;MAAA;MAAA;MAAA;MAAA;KAAA;IAAA;GAAA;GAAA,iBAAA,GAAA,wBAAA;GAAA,eAAA,GAAA,kBAAA;EAAA,CAAA;CAAA;;AAOb,GAAA,yBAAA;CAAA,YAAA;CAAA,SAAA;CAAA,UAAA;CAAA,MAAA;CAAsB,YAAA,CAAA;EA1BlC,MAAA;EACa,MAAA,CAAA;GAAA,UAAA;GAAiB,iBAGV,wBAAwB;GAAM,eAChC,kBAAkB;GAAI,SAC5B;IAEL;IACA;IACA;IACA;IACA;IAGA;IACA;IACA;IACA;IACA;GACH;GAAA,MACK;IACF,OAAO;IACP,qCAAqC;GACxC;GAAA,UAAA;GAAA,QAAA,CAAA,81DAAA;EAAA,CAAA;CAUkH,CAAA;CAAA,sBAAA,CAAA;CAAA,gBAAA;EAAA,QAAA,CAAA;GAAA,MAAA,GAAA;GAAA,MAAA,CAAA,UAAQ,EAAA,UAAA,KAAA,CAAA;EAAA,CAAA;EAAA,UAAA,CAAA;GAAA,MAAA,GAAA;GAAA,MAAA,CAAA;IAAA,UAAA;IAAA,OAAA;IAAA,UAAA;GAAA,CAAA;EAAA,CAAA;EAAA,UAAA,CAAA;GAAA,MAAA,GAAA;GAAA,MAAA,CAAA;IAAA,UAAA;IAAA,OAAA;IAAA,UAAA;GAAA,CAAA;EAAA,CAAA;EAAA,SAAA,CAAA;GAAA,MAAA,GAAA;GAAA,MAAA,CAAA;IAAA,UAAA;IAAA,OAAA;IAAA,UAAA;GAAA,CAAA;EAAA,CAAA;EAAA,cAAA,CAAA;GAAA,MAAA,GAAA;GAAA,MAAA,CAAA;IAAA,UAAA;IAAA,OAAA;IAAA,UAAA;GAAA,CAAA;EAAA,CAAA;EAAA,eAAA,CAAA;GAAA,MAAA,GAAA;GAAA,MAAA,CAAA;IAAA,UAAA;IAAA,OAAA;IAAA,UAAA;GAAA,CAAA;EAAA,CAAA;EAAA,kBAAA,CAAA;GAAA,MAAA,GAAA;GAAA,MAAA,CAAA;IAAA,UAAA;IAAA,OAAA;IAAA,UAAA;GAAA,CAAA;EAAA,CAAA;EAAA,kBAAA,CAAA;GAAA,MAAA,GAAA;GAAA,MAAA,CAAA;IAAA,UAAA;IAAA,OAAA;IAAA,UAAA;GAAA,CAAA;EAAA,CAAA;EAAA,YAAA,CAAA;GAAA,MAAA,GAAA;GAAA,MAAA,CAAA;IAAA,UAAA;IAAA,OAAA;IAAA,UAAA;GAAA,CAAA;EAAA,CAAA;EAAA,WAAA,CAAA;GAAA,MAAA,GAAA;GAAA,MAAA,CAAA;IAAA,UAAA;IAAA,OAAA;IAAA,UAAA;GAAA,CAAA;EAAA,CAAA;EAAA,SAAA,CAAA;GAAA,MAAA,GAAA;GAAA,MAAA,CAAA;IAAA,UAAA;IAAA,OAAA;IAAA,UAAA;GAAA,CAAA;EAAA,CAAA;EAAA,UAAA,CAAA;GAAA,MAAA,GAAA;GAAA,MAAA,CAAA;IAAA,UAAA;IAAA,OAAA;IAAA,UAAA;GAAA,CAAA;EAAA,CAAA;EAAA,OAAA,CAAA;GAAA,MAAA,GAAA;GAAA,MAAA,CAAA;IAAA,UAAA;IAAA,OAAA;IAAA,UAAA;GAAA,CAAA;EAAA,CAAA;EAAA,OAAA,CAAA;GAAA,MAAA,GAAA;GAAA,MAAA,CAAA;IAAA,UAAA;IAAA,OAAA;IAAA,UAAA;GAAA,CAAA;EAAA,CAAA;EAAA,QAAA,CAAA;GAAA,MAAA,GAAA;GAAA,MAAA,CAAA;IAAA,UAAA;IAAA,OAAA;IAAA,UAAA;GAAA,CAAA;EAAA,CAAA;EAAA,SAAA,CAAA;GAAA,MAAA,GAAA;GAAA,MAAA,CAAA;IAAA,UAAA;IAAA,OAAA;IAAA,UAAA;GAAA,CAAA;EAAA,CAAA;EAAA,cAAA,CAAA;GAAA,MAAA,GAAA;GAAA,MAAA,CAAA,cAAA;EAAA,CAAA;EAAA,YAAA,CAAA;GAAA,MAAA,GAAA;GAAA,MAAA,CAAA,YAAA;EAAA,CAAA;CAAA;AAAA,CAAA"}
|
|
@@ -331,7 +331,7 @@ var RtInlineEditComponent = class RtInlineEditComponent {
|
|
|
331
331
|
},
|
|
332
332
|
ngImport: i0,
|
|
333
333
|
template: "<ng-container rtBlock=\"rt-inline-edit\">\n @if (isChipField()) {\n <!-- Плашка-поле: значок и поле внутри одной плашки. Ширину задаёт невидимая копия текста под\n полем — плашка растёт с текстом до своего предела, дальше поле прокручивается. -->\n <label rtElem=\"chip-field\" [rtMod]=\"{ disabled: disabled() }\">\n <rt-icon rtElem=\"chip-icon\" size=\"sm\" [name]=\"fieldIcon()\" />\n <span rtElem=\"sizer\" rtTooltipWhenTruncated [rtTooltip]=\"chipText()\">\n <span rtElem=\"mirror\" aria-hidden=\"true\">{{ chipText() }}</span>\n <!-- Обрезка посередине: копия выше по-прежнему задаёт ширину и будит подсказку, а этот\n слой в той же клетке показывает начало с многоточием и конец, пока поле не в фокусе. -->\n @if (middleParts(); as parts) {\n <span rtElem=\"middle\" aria-hidden=\"true\">\n <span rtElem=\"head\">{{ parts.head }}</span>\n <span rtElem=\"tail\">{{ parts.tail }}</span>\n </span>\n }\n <input\n type=\"text\"\n rtElem=\"chip-input\"\n qa-dataid=\"inline-edit-chip-input\"\n [placeholder]=\"placeholder()\"\n [attr.aria-label]=\"fieldLabel() || placeholder() || null\"\n [formControl]=\"draftControl\"\n (focus)=\"onChipFocus($event)\"\n (blur)=\"onChipBlur()\"\n (keydown)=\"onChipKeydown($event)\" />\n </span>\n </label>\n } @else if (editing()) {\n <rt-input\n rtElem=\"field\"\n qa-dataid=\"inline-edit-field\"\n [size]=\"size()\"\n [placeholder]=\"placeholder()\"\n [ariaLabel]=\"fieldLabel() || placeholder() || null\"\n [clearable]=\"false\"\n [formControl]=\"draftControl\"\n (keydown)=\"onKeydown($event)\" />\n\n <rt-icon-button\n rtElem=\"save\"\n qa-dataid=\"inline-edit-save\"\n icon=\"check\"\n [size]=\"size()\"\n [ariaLabel]=\"saveLabel()\"\n [tooltip]=\"saveLabel()\"\n [loading]=\"saving()\"\n [disabled]=\"!canSave()\"\n (clicked)=\"save()\" />\n\n <rt-icon-button\n rtElem=\"cancel\"\n qa-dataid=\"inline-edit-cancel\"\n icon=\"close\"\n [size]=\"size()\"\n [ariaLabel]=\"cancelLabel()\"\n [tooltip]=\"cancelLabel()\"\n [disabled]=\"saving()\"\n (clicked)=\"cancel()\" />\n } @else {\n <button\n type=\"button\"\n rtElem=\"value\"\n qa-dataid=\"inline-edit-value\"\n [rtMod]=\"{ empty: isEmpty() }\"\n [disabled]=\"disabled()\"\n [attr.aria-label]=\"startLabel()\"\n (click)=\"open()\">\n <span rtElem=\"text\" rtTooltipWhenTruncated [rtTooltip]=\"shown()\">{{ shown() }}</span>\n\n @if (!disabled()) {\n <rt-icon rtElem=\"pencil\" name=\"pencil\" size=\"sm\" />\n }\n </button>\n }\n</ng-container>\n",
|
|
334
|
-
styles: ["@charset \"UTF-8\";@layer rt-kit.components{.rt-inline-edit{--rt-inline-edit-height: var(--rt-input-height-sm);--rt-inline-edit-field-width: var(--rt-size-64);--rt-inline-edit-radius: var(--rt-radius-sm);--rt-inline-edit-border-width: var(--rt-border-width-thin);--rt-inline-edit-duration: var(--rt-duration-fast);--rt-inline-edit-gap: var(--rt-space-2xs);--rt-inline-edit-value-padding-x: var(--rt-space-xs);--rt-inline-edit-value-gap: var(--rt-space-xs);--rt-inline-edit-value-bg-hover: var(--rt-color-bg-hover);--rt-inline-edit-empty-color: var(--rt-color-text-muted);--rt-inline-edit-disabled-color: var(--rt-color-text-disabled);--rt-inline-edit-pencil-color: var(--rt-color-text-muted);--rt-inline-edit-chip-radius: var(--rt-radius-sm);--rt-inline-edit-chip-bg: var(--rt-color-bg-subtle);--rt-inline-edit-chip-color: var(--rt-color-text-primary);--rt-inline-edit-chip-border-color: var(--rt-color-border-default);--rt-inline-edit-chip-border-color-hover: var(--rt-color-action-primary-on-surface);--rt-inline-edit-chip-font-size: var(--rt-text-xs);--rt-inline-edit-chip-font-weight: var(--rt-font-weight-semibold);--rt-inline-edit-chip-field-max-width: calc(var(--rt-size-64) + var(--rt-size-64) / 2);--rt-inline-edit-chip-field-bg: var(--rt-inline-edit-chip-bg);--rt-inline-edit-chip-field-color: var(--rt-inline-edit-chip-color);--rt-inline-edit-chip-field-icon-color: var(--rt-inline-edit-pencil-color);--rt-inline-edit-chip-field-border-color: var(--rt-inline-edit-chip-border-color);--rt-inline-edit-chip-field-border-color-focus: var(--rt-inline-edit-chip-border-color-hover);display:inline-flex;min-width:0;max-width:100%;align-items:center;gap:var(--rt-inline-edit-gap);vertical-align:middle}.rt-inline-edit--size-md{--rt-inline-edit-height: var(--rt-input-height-md)}.rt-inline-edit--size-lg{--rt-inline-edit-height: var(--rt-input-height-lg)}:is(.rt-preset-material,[data-preset=material]) .rt-inline-edit{--rt-inline-edit-chip-radius: var(--rt-radius-ms);--rt-inline-edit-chip-bg: var(--rt-color-bg-surface-subtle-2);--rt-inline-edit-chip-border-color: var(--rt-color-border-subtle);--rt-inline-edit-chip-border-color-hover: var(--rt-color-border-strong);--rt-inline-edit-value-padding-x: var(--rt-space-2);--rt-inline-edit-chip-field-bg: var(--rt-mat-neutral-5);--rt-inline-edit-chip-field-color: var(--
|
|
334
|
+
styles: ["@charset \"UTF-8\";@layer rt-kit.components{.rt-inline-edit{--rt-inline-edit-height: var(--rt-input-height-sm);--rt-inline-edit-field-width: var(--rt-size-64);--rt-inline-edit-radius: var(--rt-radius-sm);--rt-inline-edit-border-width: var(--rt-border-width-thin);--rt-inline-edit-duration: var(--rt-duration-fast);--rt-inline-edit-gap: var(--rt-space-2xs);--rt-inline-edit-value-padding-x: var(--rt-space-xs);--rt-inline-edit-value-gap: var(--rt-space-xs);--rt-inline-edit-value-bg-hover: var(--rt-color-bg-hover);--rt-inline-edit-empty-color: var(--rt-color-text-muted);--rt-inline-edit-disabled-color: var(--rt-color-text-disabled);--rt-inline-edit-pencil-color: var(--rt-color-text-muted);--rt-inline-edit-chip-radius: var(--rt-radius-sm);--rt-inline-edit-chip-bg: var(--rt-color-bg-subtle);--rt-inline-edit-chip-color: var(--rt-color-text-primary);--rt-inline-edit-chip-border-color: var(--rt-color-border-default);--rt-inline-edit-chip-border-color-hover: var(--rt-color-action-primary-on-surface);--rt-inline-edit-chip-font-size: var(--rt-text-xs);--rt-inline-edit-chip-font-weight: var(--rt-font-weight-semibold);--rt-inline-edit-chip-field-max-width: calc(var(--rt-size-64) + var(--rt-size-64) / 2);--rt-inline-edit-chip-field-bg: var(--rt-inline-edit-chip-bg);--rt-inline-edit-chip-field-color: var(--rt-inline-edit-chip-color);--rt-inline-edit-chip-field-icon-color: var(--rt-inline-edit-pencil-color);--rt-inline-edit-chip-field-border-color: var(--rt-inline-edit-chip-border-color);--rt-inline-edit-chip-field-border-color-focus: var(--rt-inline-edit-chip-border-color-hover);display:inline-flex;min-width:0;max-width:100%;align-items:center;gap:var(--rt-inline-edit-gap);vertical-align:middle}.rt-inline-edit--size-md{--rt-inline-edit-height: var(--rt-input-height-md)}.rt-inline-edit--size-lg{--rt-inline-edit-height: var(--rt-input-height-lg)}:is(.rt-preset-material,[data-preset=material]) .rt-inline-edit{--rt-inline-edit-chip-radius: var(--rt-radius-ms);--rt-inline-edit-chip-bg: var(--rt-color-bg-surface-subtle-2);--rt-inline-edit-chip-border-color: var(--rt-color-border-subtle);--rt-inline-edit-chip-border-color-hover: var(--rt-color-border-strong);--rt-inline-edit-value-padding-x: var(--rt-space-2);--rt-inline-edit-chip-field-bg: var(--rt-mat-neutral-5);--rt-inline-edit-chip-field-color: var(--rt-sys-primary, var(--rt-color-action-primary));--rt-inline-edit-chip-field-icon-color: var(--rt-sys-primary, var(--rt-color-action-primary));--rt-inline-edit-chip-field-border-color: var(--rt-sys-primary-fixed-dim, var(--rt-brand-200));--rt-inline-edit-chip-field-border-color-focus: var(--rt-sys-primary, var(--rt-color-action-primary))}.rt-inline-edit__value{display:inline-flex;min-width:0;max-width:100%;min-height:var(--rt-inline-edit-height);box-sizing:border-box;align-items:center;padding:0 var(--rt-inline-edit-value-padding-x);border:var(--rt-inline-edit-border-width) solid transparent;border-radius:var(--rt-inline-edit-radius);background:transparent;color:inherit;cursor:pointer;font:inherit;gap:var(--rt-inline-edit-value-gap);text-align:start;transition:background-color var(--rt-inline-edit-duration) ease,border-color var(--rt-inline-edit-duration) ease}.rt-inline-edit__value:hover:not(:disabled){background:var(--rt-inline-edit-value-bg-hover)}.rt-inline-edit__value:focus-visible{outline:var(--rt-focus-ring-width) solid var(--rt-focus-ring-color)}.rt-inline-edit__value--empty{color:var(--rt-inline-edit-empty-color)}.rt-inline-edit__value:disabled{color:var(--rt-inline-edit-disabled-color);cursor:default}.rt-inline-edit__text{overflow:hidden;min-width:0;text-overflow:ellipsis;white-space:nowrap}.rt-inline-edit__pencil{flex-shrink:0;color:var(--rt-inline-edit-pencil-color)}.rt-inline-edit__field{width:var(--rt-inline-edit-field-width);min-width:0;flex:0 1 auto}.rt-inline-edit__save,.rt-inline-edit__cancel{flex-shrink:0}.rt-inline-edit--chip .rt-inline-edit__value{border-color:var(--rt-inline-edit-chip-border-color);border-radius:var(--rt-inline-edit-chip-radius);background:var(--rt-inline-edit-chip-bg);color:var(--rt-inline-edit-chip-color);font-size:var(--rt-inline-edit-chip-font-size);font-weight:var(--rt-inline-edit-chip-font-weight)}.rt-inline-edit--chip .rt-inline-edit__value:hover:not(:disabled){border-color:var(--rt-inline-edit-chip-border-color-hover);background:var(--rt-inline-edit-chip-bg)}.rt-inline-edit--chip .rt-inline-edit__value--empty{color:var(--rt-inline-edit-empty-color)}.rt-inline-edit--chip .rt-inline-edit__value:disabled{color:var(--rt-inline-edit-disabled-color)}.rt-inline-edit__chip-field{display:inline-flex;min-width:0;max-width:min(100%,var(--rt-inline-edit-chip-field-max-width));min-height:var(--rt-inline-edit-height);box-sizing:border-box;align-items:center;padding:0 var(--rt-inline-edit-value-padding-x);border:var(--rt-inline-edit-border-width) solid var(--rt-inline-edit-chip-field-border-color);border-radius:var(--rt-inline-edit-chip-radius);background:var(--rt-inline-edit-chip-field-bg);color:var(--rt-inline-edit-chip-field-color);cursor:text;font-size:var(--rt-inline-edit-chip-font-size);font-weight:var(--rt-inline-edit-chip-font-weight);gap:var(--rt-inline-edit-value-gap);transition:border-color var(--rt-inline-edit-duration) ease}.rt-inline-edit__chip-field:focus-within{border-color:var(--rt-inline-edit-chip-field-border-color-focus)}.rt-inline-edit__chip-field--disabled{color:var(--rt-inline-edit-disabled-color);cursor:default}.rt-inline-edit__chip-icon{flex-shrink:0;color:var(--rt-inline-edit-chip-field-icon-color)}.rt-inline-edit__chip-field--disabled .rt-inline-edit__chip-icon{color:var(--rt-inline-edit-disabled-color)}.rt-inline-edit__sizer{display:inline-grid;overflow:hidden;min-width:0;grid-template-columns:minmax(0,auto)}.rt-inline-edit__mirror,.rt-inline-edit__middle,.rt-inline-edit__chip-input{padding:0;font:inherit;grid-area:1/1;letter-spacing:inherit;white-space:pre}.rt-inline-edit__mirror{visibility:hidden}.rt-inline-edit__middle{display:flex;overflow:hidden;min-width:0;pointer-events:none}.rt-inline-edit__head{overflow:hidden;min-width:0;text-overflow:ellipsis}.rt-inline-edit__tail{flex-shrink:0}.rt-inline-edit__middle~.rt-inline-edit__chip-input{color:transparent}.rt-inline-edit__chip-field:focus-within .rt-inline-edit__middle{visibility:hidden}.rt-inline-edit__chip-field:focus-within .rt-inline-edit__middle~.rt-inline-edit__chip-input{color:inherit}.rt-inline-edit__chip-input{width:100%;min-width:var(--rt-space-xs);border:0;background:transparent;color:inherit;outline:none}.rt-inline-edit__chip-input::placeholder{color:var(--rt-inline-edit-empty-color)}.rt-inline-edit__chip-input:disabled{cursor:default}[data-theme=dark] :is(.rt-preset-material,[data-preset=material]) .rt-inline-edit,:is(.rt-preset-material,[data-preset=material]) [data-theme=dark] .rt-inline-edit,html.rt-theme-dark :is(.rt-preset-material,[data-preset=material]) .rt-inline-edit{--rt-inline-edit-chip-field-bg: var(--rt-inline-edit-chip-bg)}}\n"],
|
|
335
335
|
dependencies: [
|
|
336
336
|
{
|
|
337
337
|
kind: "ngmodule",
|
|
@@ -427,8 +427,17 @@ var RtInlineEditComponent = class RtInlineEditComponent {
|
|
|
427
427
|
"iconLeft",
|
|
428
428
|
"iconRight",
|
|
429
429
|
"passwordToggle",
|
|
430
|
-
"autocomplete"
|
|
431
|
-
|
|
430
|
+
"autocomplete",
|
|
431
|
+
"maxlength",
|
|
432
|
+
"floatingLabel",
|
|
433
|
+
"iconLeftAction",
|
|
434
|
+
"iconRightAction",
|
|
435
|
+
"iconLeftDisabled",
|
|
436
|
+
"iconRightDisabled",
|
|
437
|
+
"iconLeftTooltip",
|
|
438
|
+
"iconRightTooltip"
|
|
439
|
+
],
|
|
440
|
+
outputs: ["iconLeftClick", "iconRightClick"]
|
|
432
441
|
},
|
|
433
442
|
{
|
|
434
443
|
kind: "directive",
|
|
@@ -437,6 +446,7 @@ var RtInlineEditComponent = class RtInlineEditComponent {
|
|
|
437
446
|
inputs: [
|
|
438
447
|
"rtTooltip",
|
|
439
448
|
"rtTooltipPlacement",
|
|
449
|
+
"rtTooltipShowDelay",
|
|
440
450
|
"rtTooltipWhenTruncated",
|
|
441
451
|
"rtTooltipHideOnClick"
|
|
442
452
|
],
|
|
@@ -479,7 +489,7 @@ i0.ɵɵngDeclareClassMetadata({
|
|
|
479
489
|
"(focusout)": "onFocusOut($event)"
|
|
480
490
|
},
|
|
481
491
|
template: "<ng-container rtBlock=\"rt-inline-edit\">\n @if (isChipField()) {\n <!-- Плашка-поле: значок и поле внутри одной плашки. Ширину задаёт невидимая копия текста под\n полем — плашка растёт с текстом до своего предела, дальше поле прокручивается. -->\n <label rtElem=\"chip-field\" [rtMod]=\"{ disabled: disabled() }\">\n <rt-icon rtElem=\"chip-icon\" size=\"sm\" [name]=\"fieldIcon()\" />\n <span rtElem=\"sizer\" rtTooltipWhenTruncated [rtTooltip]=\"chipText()\">\n <span rtElem=\"mirror\" aria-hidden=\"true\">{{ chipText() }}</span>\n <!-- Обрезка посередине: копия выше по-прежнему задаёт ширину и будит подсказку, а этот\n слой в той же клетке показывает начало с многоточием и конец, пока поле не в фокусе. -->\n @if (middleParts(); as parts) {\n <span rtElem=\"middle\" aria-hidden=\"true\">\n <span rtElem=\"head\">{{ parts.head }}</span>\n <span rtElem=\"tail\">{{ parts.tail }}</span>\n </span>\n }\n <input\n type=\"text\"\n rtElem=\"chip-input\"\n qa-dataid=\"inline-edit-chip-input\"\n [placeholder]=\"placeholder()\"\n [attr.aria-label]=\"fieldLabel() || placeholder() || null\"\n [formControl]=\"draftControl\"\n (focus)=\"onChipFocus($event)\"\n (blur)=\"onChipBlur()\"\n (keydown)=\"onChipKeydown($event)\" />\n </span>\n </label>\n } @else if (editing()) {\n <rt-input\n rtElem=\"field\"\n qa-dataid=\"inline-edit-field\"\n [size]=\"size()\"\n [placeholder]=\"placeholder()\"\n [ariaLabel]=\"fieldLabel() || placeholder() || null\"\n [clearable]=\"false\"\n [formControl]=\"draftControl\"\n (keydown)=\"onKeydown($event)\" />\n\n <rt-icon-button\n rtElem=\"save\"\n qa-dataid=\"inline-edit-save\"\n icon=\"check\"\n [size]=\"size()\"\n [ariaLabel]=\"saveLabel()\"\n [tooltip]=\"saveLabel()\"\n [loading]=\"saving()\"\n [disabled]=\"!canSave()\"\n (clicked)=\"save()\" />\n\n <rt-icon-button\n rtElem=\"cancel\"\n qa-dataid=\"inline-edit-cancel\"\n icon=\"close\"\n [size]=\"size()\"\n [ariaLabel]=\"cancelLabel()\"\n [tooltip]=\"cancelLabel()\"\n [disabled]=\"saving()\"\n (clicked)=\"cancel()\" />\n } @else {\n <button\n type=\"button\"\n rtElem=\"value\"\n qa-dataid=\"inline-edit-value\"\n [rtMod]=\"{ empty: isEmpty() }\"\n [disabled]=\"disabled()\"\n [attr.aria-label]=\"startLabel()\"\n (click)=\"open()\">\n <span rtElem=\"text\" rtTooltipWhenTruncated [rtTooltip]=\"shown()\">{{ shown() }}</span>\n\n @if (!disabled()) {\n <rt-icon rtElem=\"pencil\" name=\"pencil\" size=\"sm\" />\n }\n </button>\n }\n</ng-container>\n",
|
|
482
|
-
styles: ["@charset \"UTF-8\";@layer rt-kit.components{.rt-inline-edit{--rt-inline-edit-height: var(--rt-input-height-sm);--rt-inline-edit-field-width: var(--rt-size-64);--rt-inline-edit-radius: var(--rt-radius-sm);--rt-inline-edit-border-width: var(--rt-border-width-thin);--rt-inline-edit-duration: var(--rt-duration-fast);--rt-inline-edit-gap: var(--rt-space-2xs);--rt-inline-edit-value-padding-x: var(--rt-space-xs);--rt-inline-edit-value-gap: var(--rt-space-xs);--rt-inline-edit-value-bg-hover: var(--rt-color-bg-hover);--rt-inline-edit-empty-color: var(--rt-color-text-muted);--rt-inline-edit-disabled-color: var(--rt-color-text-disabled);--rt-inline-edit-pencil-color: var(--rt-color-text-muted);--rt-inline-edit-chip-radius: var(--rt-radius-sm);--rt-inline-edit-chip-bg: var(--rt-color-bg-subtle);--rt-inline-edit-chip-color: var(--rt-color-text-primary);--rt-inline-edit-chip-border-color: var(--rt-color-border-default);--rt-inline-edit-chip-border-color-hover: var(--rt-color-action-primary-on-surface);--rt-inline-edit-chip-font-size: var(--rt-text-xs);--rt-inline-edit-chip-font-weight: var(--rt-font-weight-semibold);--rt-inline-edit-chip-field-max-width: calc(var(--rt-size-64) + var(--rt-size-64) / 2);--rt-inline-edit-chip-field-bg: var(--rt-inline-edit-chip-bg);--rt-inline-edit-chip-field-color: var(--rt-inline-edit-chip-color);--rt-inline-edit-chip-field-icon-color: var(--rt-inline-edit-pencil-color);--rt-inline-edit-chip-field-border-color: var(--rt-inline-edit-chip-border-color);--rt-inline-edit-chip-field-border-color-focus: var(--rt-inline-edit-chip-border-color-hover);display:inline-flex;min-width:0;max-width:100%;align-items:center;gap:var(--rt-inline-edit-gap);vertical-align:middle}.rt-inline-edit--size-md{--rt-inline-edit-height: var(--rt-input-height-md)}.rt-inline-edit--size-lg{--rt-inline-edit-height: var(--rt-input-height-lg)}:is(.rt-preset-material,[data-preset=material]) .rt-inline-edit{--rt-inline-edit-chip-radius: var(--rt-radius-ms);--rt-inline-edit-chip-bg: var(--rt-color-bg-surface-subtle-2);--rt-inline-edit-chip-border-color: var(--rt-color-border-subtle);--rt-inline-edit-chip-border-color-hover: var(--rt-color-border-strong);--rt-inline-edit-value-padding-x: var(--rt-space-2);--rt-inline-edit-chip-field-bg: var(--rt-mat-neutral-5);--rt-inline-edit-chip-field-color: var(--
|
|
492
|
+
styles: ["@charset \"UTF-8\";@layer rt-kit.components{.rt-inline-edit{--rt-inline-edit-height: var(--rt-input-height-sm);--rt-inline-edit-field-width: var(--rt-size-64);--rt-inline-edit-radius: var(--rt-radius-sm);--rt-inline-edit-border-width: var(--rt-border-width-thin);--rt-inline-edit-duration: var(--rt-duration-fast);--rt-inline-edit-gap: var(--rt-space-2xs);--rt-inline-edit-value-padding-x: var(--rt-space-xs);--rt-inline-edit-value-gap: var(--rt-space-xs);--rt-inline-edit-value-bg-hover: var(--rt-color-bg-hover);--rt-inline-edit-empty-color: var(--rt-color-text-muted);--rt-inline-edit-disabled-color: var(--rt-color-text-disabled);--rt-inline-edit-pencil-color: var(--rt-color-text-muted);--rt-inline-edit-chip-radius: var(--rt-radius-sm);--rt-inline-edit-chip-bg: var(--rt-color-bg-subtle);--rt-inline-edit-chip-color: var(--rt-color-text-primary);--rt-inline-edit-chip-border-color: var(--rt-color-border-default);--rt-inline-edit-chip-border-color-hover: var(--rt-color-action-primary-on-surface);--rt-inline-edit-chip-font-size: var(--rt-text-xs);--rt-inline-edit-chip-font-weight: var(--rt-font-weight-semibold);--rt-inline-edit-chip-field-max-width: calc(var(--rt-size-64) + var(--rt-size-64) / 2);--rt-inline-edit-chip-field-bg: var(--rt-inline-edit-chip-bg);--rt-inline-edit-chip-field-color: var(--rt-inline-edit-chip-color);--rt-inline-edit-chip-field-icon-color: var(--rt-inline-edit-pencil-color);--rt-inline-edit-chip-field-border-color: var(--rt-inline-edit-chip-border-color);--rt-inline-edit-chip-field-border-color-focus: var(--rt-inline-edit-chip-border-color-hover);display:inline-flex;min-width:0;max-width:100%;align-items:center;gap:var(--rt-inline-edit-gap);vertical-align:middle}.rt-inline-edit--size-md{--rt-inline-edit-height: var(--rt-input-height-md)}.rt-inline-edit--size-lg{--rt-inline-edit-height: var(--rt-input-height-lg)}:is(.rt-preset-material,[data-preset=material]) .rt-inline-edit{--rt-inline-edit-chip-radius: var(--rt-radius-ms);--rt-inline-edit-chip-bg: var(--rt-color-bg-surface-subtle-2);--rt-inline-edit-chip-border-color: var(--rt-color-border-subtle);--rt-inline-edit-chip-border-color-hover: var(--rt-color-border-strong);--rt-inline-edit-value-padding-x: var(--rt-space-2);--rt-inline-edit-chip-field-bg: var(--rt-mat-neutral-5);--rt-inline-edit-chip-field-color: var(--rt-sys-primary, var(--rt-color-action-primary));--rt-inline-edit-chip-field-icon-color: var(--rt-sys-primary, var(--rt-color-action-primary));--rt-inline-edit-chip-field-border-color: var(--rt-sys-primary-fixed-dim, var(--rt-brand-200));--rt-inline-edit-chip-field-border-color-focus: var(--rt-sys-primary, var(--rt-color-action-primary))}.rt-inline-edit__value{display:inline-flex;min-width:0;max-width:100%;min-height:var(--rt-inline-edit-height);box-sizing:border-box;align-items:center;padding:0 var(--rt-inline-edit-value-padding-x);border:var(--rt-inline-edit-border-width) solid transparent;border-radius:var(--rt-inline-edit-radius);background:transparent;color:inherit;cursor:pointer;font:inherit;gap:var(--rt-inline-edit-value-gap);text-align:start;transition:background-color var(--rt-inline-edit-duration) ease,border-color var(--rt-inline-edit-duration) ease}.rt-inline-edit__value:hover:not(:disabled){background:var(--rt-inline-edit-value-bg-hover)}.rt-inline-edit__value:focus-visible{outline:var(--rt-focus-ring-width) solid var(--rt-focus-ring-color)}.rt-inline-edit__value--empty{color:var(--rt-inline-edit-empty-color)}.rt-inline-edit__value:disabled{color:var(--rt-inline-edit-disabled-color);cursor:default}.rt-inline-edit__text{overflow:hidden;min-width:0;text-overflow:ellipsis;white-space:nowrap}.rt-inline-edit__pencil{flex-shrink:0;color:var(--rt-inline-edit-pencil-color)}.rt-inline-edit__field{width:var(--rt-inline-edit-field-width);min-width:0;flex:0 1 auto}.rt-inline-edit__save,.rt-inline-edit__cancel{flex-shrink:0}.rt-inline-edit--chip .rt-inline-edit__value{border-color:var(--rt-inline-edit-chip-border-color);border-radius:var(--rt-inline-edit-chip-radius);background:var(--rt-inline-edit-chip-bg);color:var(--rt-inline-edit-chip-color);font-size:var(--rt-inline-edit-chip-font-size);font-weight:var(--rt-inline-edit-chip-font-weight)}.rt-inline-edit--chip .rt-inline-edit__value:hover:not(:disabled){border-color:var(--rt-inline-edit-chip-border-color-hover);background:var(--rt-inline-edit-chip-bg)}.rt-inline-edit--chip .rt-inline-edit__value--empty{color:var(--rt-inline-edit-empty-color)}.rt-inline-edit--chip .rt-inline-edit__value:disabled{color:var(--rt-inline-edit-disabled-color)}.rt-inline-edit__chip-field{display:inline-flex;min-width:0;max-width:min(100%,var(--rt-inline-edit-chip-field-max-width));min-height:var(--rt-inline-edit-height);box-sizing:border-box;align-items:center;padding:0 var(--rt-inline-edit-value-padding-x);border:var(--rt-inline-edit-border-width) solid var(--rt-inline-edit-chip-field-border-color);border-radius:var(--rt-inline-edit-chip-radius);background:var(--rt-inline-edit-chip-field-bg);color:var(--rt-inline-edit-chip-field-color);cursor:text;font-size:var(--rt-inline-edit-chip-font-size);font-weight:var(--rt-inline-edit-chip-font-weight);gap:var(--rt-inline-edit-value-gap);transition:border-color var(--rt-inline-edit-duration) ease}.rt-inline-edit__chip-field:focus-within{border-color:var(--rt-inline-edit-chip-field-border-color-focus)}.rt-inline-edit__chip-field--disabled{color:var(--rt-inline-edit-disabled-color);cursor:default}.rt-inline-edit__chip-icon{flex-shrink:0;color:var(--rt-inline-edit-chip-field-icon-color)}.rt-inline-edit__chip-field--disabled .rt-inline-edit__chip-icon{color:var(--rt-inline-edit-disabled-color)}.rt-inline-edit__sizer{display:inline-grid;overflow:hidden;min-width:0;grid-template-columns:minmax(0,auto)}.rt-inline-edit__mirror,.rt-inline-edit__middle,.rt-inline-edit__chip-input{padding:0;font:inherit;grid-area:1/1;letter-spacing:inherit;white-space:pre}.rt-inline-edit__mirror{visibility:hidden}.rt-inline-edit__middle{display:flex;overflow:hidden;min-width:0;pointer-events:none}.rt-inline-edit__head{overflow:hidden;min-width:0;text-overflow:ellipsis}.rt-inline-edit__tail{flex-shrink:0}.rt-inline-edit__middle~.rt-inline-edit__chip-input{color:transparent}.rt-inline-edit__chip-field:focus-within .rt-inline-edit__middle{visibility:hidden}.rt-inline-edit__chip-field:focus-within .rt-inline-edit__middle~.rt-inline-edit__chip-input{color:inherit}.rt-inline-edit__chip-input{width:100%;min-width:var(--rt-space-xs);border:0;background:transparent;color:inherit;outline:none}.rt-inline-edit__chip-input::placeholder{color:var(--rt-inline-edit-empty-color)}.rt-inline-edit__chip-input:disabled{cursor:default}[data-theme=dark] :is(.rt-preset-material,[data-preset=material]) .rt-inline-edit,:is(.rt-preset-material,[data-preset=material]) [data-theme=dark] .rt-inline-edit,html.rt-theme-dark :is(.rt-preset-material,[data-preset=material]) .rt-inline-edit{--rt-inline-edit-chip-field-bg: var(--rt-inline-edit-chip-bg)}}\n"]
|
|
483
493
|
}]
|
|
484
494
|
}],
|
|
485
495
|
ctorParameters: () => [],
|