@koobiq/components 20.4.3 → 20.4.5
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/badge/_badge-theme.scss +31 -0
- package/content-panel/content-panel-header.scss +2 -3
- package/content-panel/content-panel.scss +3 -0
- package/core/index.d.ts +10 -0
- package/fesm2022/koobiq-components-actions-panel.mjs +9 -1
- package/fesm2022/koobiq-components-actions-panel.mjs.map +1 -1
- package/fesm2022/koobiq-components-badge.mjs +2 -2
- package/fesm2022/koobiq-components-badge.mjs.map +1 -1
- package/fesm2022/koobiq-components-content-panel.mjs +4 -4
- package/fesm2022/koobiq-components-content-panel.mjs.map +1 -1
- package/fesm2022/koobiq-components-core.mjs +11 -6
- package/fesm2022/koobiq-components-core.mjs.map +1 -1
- package/fesm2022/koobiq-components-filter-bar.mjs +60 -14
- package/fesm2022/koobiq-components-filter-bar.mjs.map +1 -1
- package/fesm2022/koobiq-components-form-field.mjs +2 -2
- package/fesm2022/koobiq-components-form-field.mjs.map +1 -1
- package/fesm2022/koobiq-components-inline-edit.mjs +19 -2
- package/fesm2022/koobiq-components-inline-edit.mjs.map +1 -1
- package/fesm2022/koobiq-components-modal.mjs +2 -2
- package/fesm2022/koobiq-components-modal.mjs.map +1 -1
- package/fesm2022/koobiq-components-notification-center.mjs +2 -2
- package/fesm2022/koobiq-components-notification-center.mjs.map +1 -1
- package/fesm2022/koobiq-components-overflow-items.mjs +13 -3
- package/fesm2022/koobiq-components-overflow-items.mjs.map +1 -1
- package/fesm2022/koobiq-components-sidepanel.mjs +14 -24
- package/fesm2022/koobiq-components-sidepanel.mjs.map +1 -1
- package/fesm2022/koobiq-components-textarea.mjs +17 -6
- package/fesm2022/koobiq-components-textarea.mjs.map +1 -1
- package/fesm2022/koobiq-components-toast.mjs +3 -5
- package/fesm2022/koobiq-components-toast.mjs.map +1 -1
- package/fesm2022/koobiq-components-tree-select.mjs +14 -4
- package/fesm2022/koobiq-components-tree-select.mjs.map +1 -1
- package/filter-bar/index.d.ts +33 -0
- package/inline-edit/index.d.ts +8 -1
- package/modal/modal.scss +2 -0
- package/overflow-items/index.d.ts +12 -1
- package/package.json +3 -3
- package/schematics/ng-add/index.js +1 -1
- package/sidepanel/index.d.ts +6 -1
- package/textarea/index.d.ts +3 -1
- package/textarea/textarea-tokens.scss +5 -1
- package/toast/toast.component.scss +1 -0
- package/tree-select/index.d.ts +8 -5
|
@@ -27,6 +27,16 @@ const KBQ_INLINE_EDIT_ACTION_BUTTONS_ANIMATION = trigger('panelAnimation', [
|
|
|
27
27
|
])
|
|
28
28
|
]);
|
|
29
29
|
const baseClass = 'kbq-inline-edit';
|
|
30
|
+
/**
|
|
31
|
+
* Positions the edit mode panel so that it covers the view mode element. A single position is used instead of the
|
|
32
|
+
* default fallback set, because the panel must stay anchored to the origin even when it does not fit in the viewport.
|
|
33
|
+
*/
|
|
34
|
+
const KBQ_INLINE_EDIT_CONNECTED_POSITION = {
|
|
35
|
+
originX: 'start',
|
|
36
|
+
originY: 'bottom',
|
|
37
|
+
overlayX: 'start',
|
|
38
|
+
overlayY: 'top'
|
|
39
|
+
};
|
|
30
40
|
/**
|
|
31
41
|
* Fallback delay before showing the validation tooltip if `scrollend` never fires — e.g. the browser doesn't
|
|
32
42
|
* support it, or nothing needed to scroll.
|
|
@@ -236,6 +246,13 @@ class KbqInlineEdit {
|
|
|
236
246
|
this.mode = signal('view', ...(ngDevMode ? [{ debugName: "mode" }] : []));
|
|
237
247
|
/** @docs-private */
|
|
238
248
|
this.overlayWidth = signal('', ...(ngDevMode ? [{ debugName: "overlayWidth" }] : []));
|
|
249
|
+
/**
|
|
250
|
+
* Single overlay position that keeps the panel anchored to the view mode element. Fallback positions are
|
|
251
|
+
* intentionally omitted so the panel does not flip or get pushed away from the origin when space is tight.
|
|
252
|
+
*
|
|
253
|
+
* @docs-private
|
|
254
|
+
*/
|
|
255
|
+
this.overlayPositions = [KBQ_INLINE_EDIT_CONNECTED_POSITION];
|
|
239
256
|
/** @docs-private */
|
|
240
257
|
this.scrollStrategy = signal(this.overlay.scrollStrategies.reposition(), ...(ngDevMode ? [{ debugName: "scrollStrategy" }] : []));
|
|
241
258
|
/** @docs-private */
|
|
@@ -727,7 +744,7 @@ class KbqInlineEdit {
|
|
|
727
744
|
this.formFieldRefList().forEach((formField) => formField.control().ngControl?.control?.markAsTouched());
|
|
728
745
|
}
|
|
729
746
|
/** @nocollapse */ static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "20.3.30", ngImport: i0, type: KbqInlineEdit, deps: [], target: i0.ɵɵFactoryTarget.Component }); }
|
|
730
|
-
/** @nocollapse */ static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "20.3.30", type: KbqInlineEdit, isStandalone: true, selector: "kbq-inline-edit", inputs: { showActions: { classPropertyName: "showActions", publicName: "showActions", isSignal: true, isRequired: false, transformFunction: null }, showTooltipOnError: { classPropertyName: "showTooltipOnError", publicName: "showTooltipOnError", isSignal: true, isRequired: false, transformFunction: null }, validationTooltip: { classPropertyName: "validationTooltip", publicName: "validationTooltip", isSignal: true, isRequired: false, transformFunction: null }, disabled: { classPropertyName: "disabled", publicName: "disabled", isSignal: true, isRequired: false, transformFunction: null }, editModeWidth: { classPropertyName: "editModeWidth", publicName: "editModeWidth", isSignal: true, isRequired: false, transformFunction: null }, tooltipPlacement: { classPropertyName: "tooltipPlacement", publicName: "tooltipPlacement", isSignal: true, isRequired: false, transformFunction: null }, overlayPanelClass: { classPropertyName: "overlayPanelClass", publicName: "overlayPanelClass", isSignal: true, isRequired: false, transformFunction: null }, getValueHandler: { classPropertyName: "getValueHandler", publicName: "getValueHandler", isSignal: true, isRequired: false, transformFunction: null }, setValueHandler: { classPropertyName: "setValueHandler", publicName: "setValueHandler", isSignal: true, isRequired: false, transformFunction: null }, compareWith: { classPropertyName: "compareWith", publicName: "compareWith", isSignal: true, isRequired: false, transformFunction: null }, saveHandler: { classPropertyName: "saveHandler", publicName: "saveHandler", isSignal: true, isRequired: false, transformFunction: null }, saveErrorHandler: { classPropertyName: "saveErrorHandler", publicName: "saveErrorHandler", isSignal: true, isRequired: false, transformFunction: null }, canSaveOnEnter: { classPropertyName: "canSaveOnEnter", publicName: "canSaveOnEnter", isSignal: true, isRequired: false, transformFunction: null }, interactiveSelectors: { classPropertyName: "interactiveSelectors", publicName: "interactiveSelectors", isSignal: true, isRequired: false, transformFunction: null } }, outputs: { saved: "saved", canceled: "canceled", saveError: "saveError", modeChange: "modeChange" }, host: { listeners: { "click": "onClick($event)", "keydown.enter": "onClick($event)", "keydown.space": "onClick($event)" }, properties: { "attr.tabindex": "tabIndex()", "class": "className()", "class.kbq-inline-edit_with-label": "!!label()", "class.kbq-inline-edit_with-menu": "!!menu()", "class.kbq-inline-edit_disabled": "disabled()", "class.kbq-inline-edit_anchor-focused": "anchorFocused()", "class.kbq-inline-edit_select": "isSingleSelect()", "class.kbq-inline-edit_save-error": "saveStatus() === \"error\"", "class.kbq-progress": "saveStatus() === \"progress\"" }, classAttribute: "kbq-inline-edit" }, providers: [{ provide: KBQ_CONNECTED_OVERLAY_ORIGIN, useExisting: forwardRef((() => KbqInlineEdit)) }], queries: [{ propertyName: "menu", first: true, predicate: KbqInlineEditMenu, descendants: true, isSignal: true }, { propertyName: "label", first: true, predicate: KbqLabel, descendants: true, isSignal: true }, { propertyName: "formFieldRefList", predicate: KbqFormField, descendants: true, isSignal: true }, { propertyName: "selectRef", first: true, predicate: KbqSelect, descendants: true, isSignal: true }], viewQueries: [{ propertyName: "tooltipTrigger", first: true, predicate: KbqTooltipTrigger, descendants: true, isSignal: true }, { propertyName: "viewContainer", first: true, predicate: ["viewContainer"], descendants: true, isSignal: true }, { propertyName: "overlayDir", first: true, predicate: CdkConnectedOverlay, descendants: true, isSignal: true }, { propertyName: "regionItems", predicate: KbqFocusRegionItem, descendants: true, isSignal: true }], exportAs: ["kbqInlineEdit"], hostDirectives: [{ directive: i1.CdkMonitorFocus }], ngImport: i0, template: "<div class=\"kbq-inline-edit__focus_container\">\n <div class=\"cdk-visually-hidden\" role=\"status\" aria-live=\"polite\">{{ saveStatusMessage() }}</div>\n\n @if (label()) {\n <div class=\"kbq-inline-edit__label\">\n <ng-content select=\"kbq-label\" />\n </div>\n }\n\n <div #viewContainer class=\"kbq-inline-edit__view-container\">\n <div class=\"kbq-inline-edit__view-content\">\n <ng-content select=\"[kbqInlineEditViewMode]\" />\n </div>\n\n @if (hasInteractiveContent() && mode() === 'view' && !disabled()) {\n <div\n class=\"kbq-inline-edit__focus-anchor cdk-visually-hidden\"\n tabindex=\"0\"\n (focus)=\"anchorFocused.set(true)\"\n (blur)=\"anchorFocused.set(false)\"\n ></div>\n }\n\n @if (menu() && mode() === 'view') {\n <div class=\"kbq-inline-edit__menu-mask kbq-mask\">\n <div class=\"kbq-inline-edit__menu-mask-fade kbq-mask__fade\"></div>\n <div class=\"kbq-inline-edit__menu-mask-container kbq-mask__container\">\n <ng-content select=\"[kbqInlineEditMenu]\" />\n </div>\n </div>\n }\n\n <ng-template\n cdkConnectedOverlay\n cdkConnectedOverlayLockPosition\n [cdkConnectedOverlayOpen]=\"isEditMode()\"\n [cdkConnectedOverlayOrigin]=\"overlayOrigin\"\n [cdkConnectedOverlayOffsetY]=\"-overlayOrigin.offsetHeight\"\n [cdkConnectedOverlayWidth]=\"overlayWidth()\"\n [cdkConnectedOverlayDisableClose]=\"true\"\n [cdkConnectedOverlayScrollStrategy]=\"scrollStrategy()\"\n [cdkConnectedOverlayPanelClass]=\"overlayPanelClass()\"\n [cdkConnectedOverlayHasBackdrop]=\"false\"\n (attach)=\"onAttach()\"\n (overlayOutsideClick)=\"onOverlayOutsideClick($event)\"\n (overlayKeydown)=\"onOverlayKeydown($event)\"\n >\n <div class=\"cdk-visually-hidden\" aria-hidden=\"true\" kbqFocusRegionItem tabindex=\"0\"></div>\n <div\n class=\"kbq-inline-edit__panel\"\n cdkTrapFocusAutoCapture\n [class.kbq-inline-edit__panel_select]=\"isSingleSelect()\"\n [cdkTrapFocus]=\"false\"\n >\n <div\n class=\"kbq-inline-edit__control-container\"\n [kbqTooltipColor]=\"colors.Error\"\n [kbqTooltip]=\"validationTooltip() ?? ''\"\n [kbqTooltipDisabled]=\"!validationTooltip()\"\n [kbqTooltipArrow]=\"false\"\n [kbqTrigger]=\"'manual'\"\n [kbqPlacement]=\"tooltipPlacement() ?? placements.TopLeft\"\n [kbqTooltipScrollStrategy]=\"validationTooltipScrollStrategy\"\n >\n <ng-content select=\"[kbqInlineEditEditMode]\" />\n </div>\n\n @if (showActions()) {\n <div class=\"kbq-inline-edit__action-buttons\" role=\"group\" [@panelAnimation]>\n <div class=\"kbq-inline-edit__action-button\">\n <button kbq-button [color]=\"'contrast'\" (click)=\"save($event)\">\n <i kbq-icon=\"kbq-check_16\"></i>\n </button>\n </div>\n\n <div class=\"kbq-inline-edit__action-button\">\n <button kbq-button [color]=\"'contrast-fade'\" (click)=\"cancel()\">\n <i kbq-icon=\"kbq-xmark_16\"></i>\n </button>\n </div>\n </div>\n }\n </div>\n <div class=\"cdk-visually-hidden\" aria-hidden=\"true\" kbqFocusRegionItem tabindex=\"0\"></div>\n </ng-template>\n </div>\n</div>\n", styles: [".kbq-inline-edit{display:flex;flex-direction:column;justify-content:center;box-sizing:border-box;border:var(--kbq-size-border-width) solid transparent;border-radius:var(--kbq-size-border-radius);padding:var(--kbq-inline-edit-padding-vertical) var(--kbq-inline-edit-padding-horizontal);min-height:var(--kbq-inline-edit-height);background:var(--kbq-inline-edit-background)}.kbq-inline-edit:focus-visible{outline:none}.kbq-inline-edit.cdk-keyboard-focused,.kbq-inline-edit.kbq-inline-edit_anchor-focused{box-shadow:inset 0 0 .1px 1px var(--kbq-states-line-focus-theme);border-color:var(--kbq-states-line-focus-theme)}.kbq-inline-edit.kbq-inline-edit_view:not(.kbq-inline-edit_disabled):hover{--kbq-inline-edit-background: var(--kbq-states-background-transparent-hover);--kbq-mask-background: var(--kbq-states-background-contrast-less-hover);cursor:pointer}.kbq-inline-edit.kbq-inline-edit_view:not(.kbq-inline-edit_disabled):active,.kbq-inline-edit.kbq-inline-edit_view:not(.kbq-inline-edit_disabled):has(.kbq-inline-edit__menu.kbq-active){--kbq-inline-edit-background: var(--kbq-states-background-transparent-active);--kbq-mask-background: var(--kbq-states-background-contrast-less-active)}.kbq-inline-edit.kbq-inline-edit_view.kbq-inline-edit_disabled:hover,.kbq-inline-edit.kbq-inline-edit_view.kbq-inline-edit_disabled:has(.kbq-inline-edit__menu.kbq-active){--kbq-mask-background: var(--kbq-background-bg)}.kbq-inline-edit .kbq-label{color:var(--kbq-inline-edit-label-color)}.kbq-inline-edit.kbq-inline-edit_view.kbq-inline-edit_save-error{--kbq-inline-edit-background: var(--kbq-inline-edit-error-background)}.kbq-inline-edit.kbq-inline-edit_view.kbq-inline-edit_save-error:not(.kbq-inline-edit_disabled):hover{--kbq-inline-edit-background: var(--kbq-states-background-error-less-hover);--kbq-mask-background: var(--kbq-states-background-error-less-hover)}.kbq-inline-edit.kbq-inline-edit_view.kbq-inline-edit_save-error:not(.kbq-inline-edit_disabled):active,.kbq-inline-edit.kbq-inline-edit_view.kbq-inline-edit_save-error:not(.kbq-inline-edit_disabled):has(.kbq-inline-edit__menu.kbq-active){--kbq-inline-edit-background: var(--kbq-states-background-error-less-active);--kbq-mask-background: var(--kbq-states-background-error-less-active)}.kbq-inline-edit{font-size:var(--kbq-typography-text-normal-font-size);font-style:var(--kbq-typography-text-normal-font-style);font-weight:var(--kbq-typography-text-normal-font-weight);line-height:var(--kbq-typography-text-normal-line-height);font-family:var(--kbq-typography-text-normal-font-family);text-transform:var(--kbq-typography-text-normal-text-transform);font-feature-settings:var(--kbq-typography-text-normal-font-feature-settings);letter-spacing:var(--kbq-typography-text-normal-letter-spacing)}.kbq-inline-edit:not(.kbq-inline-edit_with-label){--kbq-inline-edit-padding-horizontal: calc(var(--kbq-size-m) - var(--kbq-size-border-width))}.kbq-inline-edit.kbq-inline-edit_with-label{padding-top:var(--kbq-inline-edit-padding-vertical);padding-bottom:var(--kbq-inline-edit-padding-vertical)}.kbq-inline-edit.kbq-inline-edit_with-label.kbq-inline-edit_edit .kbq-inline-edit__view-container{position:relative}.kbq-inline-edit.kbq-inline-edit_with-label .kbq-inline-edit__label{margin-bottom:var(--kbq-size-3xs)}.kbq-inline-edit.kbq-inline-edit_view .kbq-inline-edit__view-container,.kbq-inline-edit.kbq-inline-edit_view .kbq-inline-edit__view-content{text-overflow:ellipsis}.kbq-inline-edit.kbq-inline-edit_select.kbq-inline-edit_edit{--kbq-inline-edit-background: var(--kbq-states-background-transparent-active)}.kbq-inline-edit:hover .kbq-inline-edit__menu-mask,.kbq-inline-edit.cdk-keyboard-focused .kbq-inline-edit__menu-mask,.kbq-inline-edit.kbq-inline-edit_anchor-focused .kbq-inline-edit__menu-mask{opacity:1}.kbq-inline-edit .kbq-inline-edit__placeholder{color:var(--kbq-foreground-contrast-secondary)}.kbq-inline-edit{position:relative}.kbq-inline-edit .kbq-mask{display:flex;position:absolute;top:calc(var(--kbq-size-border-width) * -1);right:calc(var(--kbq-size-border-width) * -1)}.kbq-inline-edit .kbq-mask .kbq-mask__fade{background:var(--kbq-mask-background, transparent);-webkit-mask-image:linear-gradient(90deg,transparent,var(--kbq-plt-black, var(--kbq-black-default)));mask-image:linear-gradient(90deg,transparent,var(--kbq-plt-black, var(--kbq-black-default)))}.kbq-inline-edit .kbq-mask .kbq-mask__container{background:var(--kbq-mask-background, transparent)}.kbq-inline-edit .kbq-inline-edit__menu-mask{opacity:0;height:calc(100% + 2 * var(--kbq-size-border-width));justify-content:flex-end;border-top-right-radius:var(--kbq-size-border-radius);border-bottom-right-radius:var(--kbq-size-border-radius)}.kbq-inline-edit .kbq-inline-edit__menu-mask:has(.kbq-inline-edit__menu.kbq-pressed,.kbq-inline-edit__menu.cdk-keyboard-focused){opacity:1}.kbq-inline-edit .kbq-inline-edit__menu-mask .kbq-inline-edit__menu-mask-fade{width:32px}.kbq-inline-edit .kbq-inline-edit__menu-mask .kbq-inline-edit__menu-mask-container{display:flex;justify-content:flex-end;min-width:40px;border-radius:inherit}.kbq-inline-edit .kbq-inline-edit__menu-mask .kbq-inline-edit__menu{display:inline-flex;align-self:flex-start;padding:var(--kbq-size-s);z-index:2}.kbq-inline-edit__panel{width:100%}.kbq-inline-edit__panel .kbq-inline-edit__action-buttons{position:absolute;left:calc(-1 * var(--kbq-inline-edit-padding-horizontal));display:inline-flex;flex-direction:row;gap:var(--kbq-size-xxs);padding:var(--kbq-size-xxs) var(--kbq-size-s) var(--kbq-size-s)}.kbq-inline-edit__panel.kbq-inline-edit__panel_select .kbq-inline-edit__control-container{display:none}.kbq-inline-edit__panel .kbq-inline-edit__control-container,.kbq-inline-edit__panel .kbq-inline-edit__action-button{box-shadow:var(--kbq-shadow-popup);background-color:var(--kbq-background-bg);border-radius:var(--kbq-size-border-radius)}\n", ":where(.kbq-inline-edit,.kbq-inline-edit__panel){--kbq-inline-edit-background: transparent;--kbq-inline-edit-height: calc(var(--kbq-size-3xl) - 2 * var(--kbq-size-border-width));--kbq-inline-edit-padding-horizontal: calc(var(--kbq-size-s) - var(--kbq-size-border-width));--kbq-inline-edit-padding-vertical: calc(var(--kbq-size-xs) - var(--kbq-size-border-width));--kbq-inline-edit-panel-shadow: var(--kbq-shadow-popup);--kbq-inline-edit-label-color: var(--kbq-foreground-contrast-secondary);--kbq-inline-edit-error-background: var(--kbq-background-error-less)}\n"], dependencies: [{ kind: "directive", type: CdkConnectedOverlay, selector: "[cdk-connected-overlay], [connected-overlay], [cdkConnectedOverlay]", inputs: ["cdkConnectedOverlayOrigin", "cdkConnectedOverlayPositions", "cdkConnectedOverlayPositionStrategy", "cdkConnectedOverlayOffsetX", "cdkConnectedOverlayOffsetY", "cdkConnectedOverlayWidth", "cdkConnectedOverlayHeight", "cdkConnectedOverlayMinWidth", "cdkConnectedOverlayMinHeight", "cdkConnectedOverlayBackdropClass", "cdkConnectedOverlayPanelClass", "cdkConnectedOverlayViewportMargin", "cdkConnectedOverlayScrollStrategy", "cdkConnectedOverlayOpen", "cdkConnectedOverlayDisableClose", "cdkConnectedOverlayTransformOriginOn", "cdkConnectedOverlayHasBackdrop", "cdkConnectedOverlayLockPosition", "cdkConnectedOverlayFlexibleDimensions", "cdkConnectedOverlayGrowAfterOpen", "cdkConnectedOverlayPush", "cdkConnectedOverlayDisposeOnNavigation"], outputs: ["backdropClick", "positionChange", "attach", "detach", "overlayKeydown", "overlayOutsideClick"], exportAs: ["cdkConnectedOverlay"] }, { kind: "ngmodule", type: KbqButtonModule }, { kind: "component", type: i2.KbqButton, selector: "[kbq-button]", inputs: ["kbqStyle", "disabled", "tabIndex"] }, { kind: "directive", type: i2.KbqButtonCssStyler, selector: "[kbq-button]" }, { kind: "component", type: KbqIcon, selector: "[kbq-icon]", inputs: ["small", "autoColor", "kbq-icon"] }, { kind: "directive", type: KbqTooltipTrigger, selector: "[kbqTooltip]", inputs: ["kbqTooltipScrollStrategy", "forDisabledComponent", "ignoreTooltipPointerEvents", "kbqTooltipSingleInstance", "hideWithTimeout", "kbqVisible", "kbqPlacement", "kbqRelativeToPointer", "kbqPlacementPriority", "kbqTooltip", "kbqTooltipDisabled", "kbqEnterDelay", "kbqLeaveDelay", "kbqTrigger", "kbqTooltipClass", "kbqTooltipContext", "kbqTooltipColor", "kbqTooltipArrow", "kbqTooltipOffset", "kbqTooltipModifier", "kbqTooltipHeader"], outputs: ["kbqPlacementChange", "kbqVisibleChange"], exportAs: ["kbqTooltip"] }, { kind: "directive", type: KbqFocusRegionItem, selector: "[kbqFocusRegionItem]", outputs: ["tabOut"], exportAs: ["kbqFocusRegionItem"] }, { kind: "directive", type: CdkTrapFocus, selector: "[cdkTrapFocus]", inputs: ["cdkTrapFocus", "cdkTrapFocusAutoCapture"], exportAs: ["cdkTrapFocus"] }], animations: [KBQ_INLINE_EDIT_ACTION_BUTTONS_ANIMATION], changeDetection: i0.ChangeDetectionStrategy.OnPush, encapsulation: i0.ViewEncapsulation.None }); }
|
|
747
|
+
/** @nocollapse */ static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "20.3.30", type: KbqInlineEdit, isStandalone: true, selector: "kbq-inline-edit", inputs: { showActions: { classPropertyName: "showActions", publicName: "showActions", isSignal: true, isRequired: false, transformFunction: null }, showTooltipOnError: { classPropertyName: "showTooltipOnError", publicName: "showTooltipOnError", isSignal: true, isRequired: false, transformFunction: null }, validationTooltip: { classPropertyName: "validationTooltip", publicName: "validationTooltip", isSignal: true, isRequired: false, transformFunction: null }, disabled: { classPropertyName: "disabled", publicName: "disabled", isSignal: true, isRequired: false, transformFunction: null }, editModeWidth: { classPropertyName: "editModeWidth", publicName: "editModeWidth", isSignal: true, isRequired: false, transformFunction: null }, tooltipPlacement: { classPropertyName: "tooltipPlacement", publicName: "tooltipPlacement", isSignal: true, isRequired: false, transformFunction: null }, overlayPanelClass: { classPropertyName: "overlayPanelClass", publicName: "overlayPanelClass", isSignal: true, isRequired: false, transformFunction: null }, getValueHandler: { classPropertyName: "getValueHandler", publicName: "getValueHandler", isSignal: true, isRequired: false, transformFunction: null }, setValueHandler: { classPropertyName: "setValueHandler", publicName: "setValueHandler", isSignal: true, isRequired: false, transformFunction: null }, compareWith: { classPropertyName: "compareWith", publicName: "compareWith", isSignal: true, isRequired: false, transformFunction: null }, saveHandler: { classPropertyName: "saveHandler", publicName: "saveHandler", isSignal: true, isRequired: false, transformFunction: null }, saveErrorHandler: { classPropertyName: "saveErrorHandler", publicName: "saveErrorHandler", isSignal: true, isRequired: false, transformFunction: null }, canSaveOnEnter: { classPropertyName: "canSaveOnEnter", publicName: "canSaveOnEnter", isSignal: true, isRequired: false, transformFunction: null }, interactiveSelectors: { classPropertyName: "interactiveSelectors", publicName: "interactiveSelectors", isSignal: true, isRequired: false, transformFunction: null } }, outputs: { saved: "saved", canceled: "canceled", saveError: "saveError", modeChange: "modeChange" }, host: { listeners: { "click": "onClick($event)", "keydown.enter": "onClick($event)", "keydown.space": "onClick($event)" }, properties: { "attr.tabindex": "tabIndex()", "class": "className()", "class.kbq-inline-edit_with-label": "!!label()", "class.kbq-inline-edit_with-menu": "!!menu()", "class.kbq-inline-edit_disabled": "disabled()", "class.kbq-inline-edit_anchor-focused": "anchorFocused()", "class.kbq-inline-edit_select": "isSingleSelect()", "class.kbq-inline-edit_save-error": "saveStatus() === \"error\"", "class.kbq-progress": "saveStatus() === \"progress\"" }, classAttribute: "kbq-inline-edit" }, providers: [{ provide: KBQ_CONNECTED_OVERLAY_ORIGIN, useExisting: forwardRef((() => KbqInlineEdit)) }], queries: [{ propertyName: "menu", first: true, predicate: KbqInlineEditMenu, descendants: true, isSignal: true }, { propertyName: "label", first: true, predicate: KbqLabel, descendants: true, isSignal: true }, { propertyName: "formFieldRefList", predicate: KbqFormField, descendants: true, isSignal: true }, { propertyName: "selectRef", first: true, predicate: KbqSelect, descendants: true, isSignal: true }], viewQueries: [{ propertyName: "tooltipTrigger", first: true, predicate: KbqTooltipTrigger, descendants: true, isSignal: true }, { propertyName: "viewContainer", first: true, predicate: ["viewContainer"], descendants: true, isSignal: true }, { propertyName: "overlayDir", first: true, predicate: CdkConnectedOverlay, descendants: true, isSignal: true }, { propertyName: "regionItems", predicate: KbqFocusRegionItem, descendants: true, isSignal: true }], exportAs: ["kbqInlineEdit"], hostDirectives: [{ directive: i1.CdkMonitorFocus }], ngImport: i0, template: "<div class=\"kbq-inline-edit__focus_container\">\n <div class=\"cdk-visually-hidden\" role=\"status\" aria-live=\"polite\">{{ saveStatusMessage() }}</div>\n\n @if (label()) {\n <div class=\"kbq-inline-edit__label\">\n <ng-content select=\"kbq-label\" />\n </div>\n }\n\n <div #viewContainer class=\"kbq-inline-edit__view-container\">\n <div class=\"kbq-inline-edit__view-content\">\n <ng-content select=\"[kbqInlineEditViewMode]\" />\n </div>\n\n @if (hasInteractiveContent() && mode() === 'view' && !disabled()) {\n <div\n class=\"kbq-inline-edit__focus-anchor cdk-visually-hidden\"\n tabindex=\"0\"\n (focus)=\"anchorFocused.set(true)\"\n (blur)=\"anchorFocused.set(false)\"\n ></div>\n }\n\n @if (menu() && mode() === 'view') {\n <div class=\"kbq-inline-edit__menu-mask kbq-mask\">\n <div class=\"kbq-inline-edit__menu-mask-fade kbq-mask__fade\"></div>\n <div class=\"kbq-inline-edit__menu-mask-container kbq-mask__container\">\n <ng-content select=\"[kbqInlineEditMenu]\" />\n </div>\n </div>\n }\n\n <ng-template\n cdkConnectedOverlay\n cdkConnectedOverlayLockPosition\n [cdkConnectedOverlayOpen]=\"isEditMode()\"\n [cdkConnectedOverlayOrigin]=\"overlayOrigin\"\n [cdkConnectedOverlayPositions]=\"overlayPositions\"\n [cdkConnectedOverlayOffsetY]=\"-overlayOrigin.offsetHeight\"\n [cdkConnectedOverlayWidth]=\"overlayWidth()\"\n [cdkConnectedOverlayPush]=\"false\"\n [cdkConnectedOverlayDisableClose]=\"true\"\n [cdkConnectedOverlayScrollStrategy]=\"scrollStrategy()\"\n [cdkConnectedOverlayPanelClass]=\"overlayPanelClass()\"\n [cdkConnectedOverlayHasBackdrop]=\"false\"\n (attach)=\"onAttach()\"\n (overlayOutsideClick)=\"onOverlayOutsideClick($event)\"\n (overlayKeydown)=\"onOverlayKeydown($event)\"\n >\n <div class=\"cdk-visually-hidden\" aria-hidden=\"true\" kbqFocusRegionItem tabindex=\"0\"></div>\n <div\n class=\"kbq-inline-edit__panel\"\n cdkTrapFocusAutoCapture\n [class.kbq-inline-edit__panel_select]=\"isSingleSelect()\"\n [cdkTrapFocus]=\"false\"\n >\n <div\n class=\"kbq-inline-edit__control-container\"\n [kbqTooltipColor]=\"colors.Error\"\n [kbqTooltip]=\"validationTooltip() ?? ''\"\n [kbqTooltipDisabled]=\"!validationTooltip()\"\n [kbqTooltipArrow]=\"false\"\n [kbqTrigger]=\"'manual'\"\n [kbqPlacement]=\"tooltipPlacement() ?? placements.TopLeft\"\n [kbqTooltipScrollStrategy]=\"validationTooltipScrollStrategy\"\n >\n <ng-content select=\"[kbqInlineEditEditMode]\" />\n </div>\n\n @if (showActions()) {\n <div class=\"kbq-inline-edit__action-buttons\" role=\"group\" [@panelAnimation]>\n <div class=\"kbq-inline-edit__action-button\">\n <button kbq-button [color]=\"'contrast'\" (click)=\"save($event)\">\n <i kbq-icon=\"kbq-check_16\"></i>\n </button>\n </div>\n\n <div class=\"kbq-inline-edit__action-button\">\n <button kbq-button [color]=\"'contrast-fade'\" (click)=\"cancel()\">\n <i kbq-icon=\"kbq-xmark_16\"></i>\n </button>\n </div>\n </div>\n }\n </div>\n <div class=\"cdk-visually-hidden\" aria-hidden=\"true\" kbqFocusRegionItem tabindex=\"0\"></div>\n </ng-template>\n </div>\n</div>\n", styles: [".kbq-inline-edit{display:flex;flex-direction:column;justify-content:center;box-sizing:border-box;border:var(--kbq-size-border-width) solid transparent;border-radius:var(--kbq-size-border-radius);padding:var(--kbq-inline-edit-padding-vertical) var(--kbq-inline-edit-padding-horizontal);min-height:var(--kbq-inline-edit-height);background:var(--kbq-inline-edit-background)}.kbq-inline-edit:focus-visible{outline:none}.kbq-inline-edit.cdk-keyboard-focused,.kbq-inline-edit.kbq-inline-edit_anchor-focused{box-shadow:inset 0 0 .1px 1px var(--kbq-states-line-focus-theme);border-color:var(--kbq-states-line-focus-theme)}.kbq-inline-edit.kbq-inline-edit_view:not(.kbq-inline-edit_disabled):hover{--kbq-inline-edit-background: var(--kbq-states-background-transparent-hover);--kbq-mask-background: var(--kbq-states-background-contrast-less-hover);cursor:pointer}.kbq-inline-edit.kbq-inline-edit_view:not(.kbq-inline-edit_disabled):active,.kbq-inline-edit.kbq-inline-edit_view:not(.kbq-inline-edit_disabled):has(.kbq-inline-edit__menu.kbq-active){--kbq-inline-edit-background: var(--kbq-states-background-transparent-active);--kbq-mask-background: var(--kbq-states-background-contrast-less-active)}.kbq-inline-edit.kbq-inline-edit_view.kbq-inline-edit_disabled:hover,.kbq-inline-edit.kbq-inline-edit_view.kbq-inline-edit_disabled:has(.kbq-inline-edit__menu.kbq-active){--kbq-mask-background: var(--kbq-background-bg)}.kbq-inline-edit .kbq-label{color:var(--kbq-inline-edit-label-color)}.kbq-inline-edit.kbq-inline-edit_view.kbq-inline-edit_save-error{--kbq-inline-edit-background: var(--kbq-inline-edit-error-background)}.kbq-inline-edit.kbq-inline-edit_view.kbq-inline-edit_save-error:not(.kbq-inline-edit_disabled):hover{--kbq-inline-edit-background: var(--kbq-states-background-error-less-hover);--kbq-mask-background: var(--kbq-states-background-error-less-hover)}.kbq-inline-edit.kbq-inline-edit_view.kbq-inline-edit_save-error:not(.kbq-inline-edit_disabled):active,.kbq-inline-edit.kbq-inline-edit_view.kbq-inline-edit_save-error:not(.kbq-inline-edit_disabled):has(.kbq-inline-edit__menu.kbq-active){--kbq-inline-edit-background: var(--kbq-states-background-error-less-active);--kbq-mask-background: var(--kbq-states-background-error-less-active)}.kbq-inline-edit{font-size:var(--kbq-typography-text-normal-font-size);font-style:var(--kbq-typography-text-normal-font-style);font-weight:var(--kbq-typography-text-normal-font-weight);line-height:var(--kbq-typography-text-normal-line-height);font-family:var(--kbq-typography-text-normal-font-family);text-transform:var(--kbq-typography-text-normal-text-transform);font-feature-settings:var(--kbq-typography-text-normal-font-feature-settings);letter-spacing:var(--kbq-typography-text-normal-letter-spacing)}.kbq-inline-edit:not(.kbq-inline-edit_with-label){--kbq-inline-edit-padding-horizontal: calc(var(--kbq-size-m) - var(--kbq-size-border-width))}.kbq-inline-edit.kbq-inline-edit_with-label{padding-top:var(--kbq-inline-edit-padding-vertical);padding-bottom:var(--kbq-inline-edit-padding-vertical)}.kbq-inline-edit.kbq-inline-edit_with-label.kbq-inline-edit_edit .kbq-inline-edit__view-container{position:relative}.kbq-inline-edit.kbq-inline-edit_with-label .kbq-inline-edit__label{margin-bottom:var(--kbq-size-3xs)}.kbq-inline-edit.kbq-inline-edit_view .kbq-inline-edit__view-container,.kbq-inline-edit.kbq-inline-edit_view .kbq-inline-edit__view-content{text-overflow:ellipsis}.kbq-inline-edit.kbq-inline-edit_select.kbq-inline-edit_edit{--kbq-inline-edit-background: var(--kbq-states-background-transparent-active)}.kbq-inline-edit:hover .kbq-inline-edit__menu-mask,.kbq-inline-edit.cdk-keyboard-focused .kbq-inline-edit__menu-mask,.kbq-inline-edit.kbq-inline-edit_anchor-focused .kbq-inline-edit__menu-mask{opacity:1}.kbq-inline-edit .kbq-inline-edit__placeholder{color:var(--kbq-foreground-contrast-secondary)}.kbq-inline-edit{position:relative}.kbq-inline-edit .kbq-mask{display:flex;position:absolute;top:calc(var(--kbq-size-border-width) * -1);right:calc(var(--kbq-size-border-width) * -1)}.kbq-inline-edit .kbq-mask .kbq-mask__fade{background:var(--kbq-mask-background, transparent);-webkit-mask-image:linear-gradient(90deg,transparent,var(--kbq-plt-black, var(--kbq-black-default)));mask-image:linear-gradient(90deg,transparent,var(--kbq-plt-black, var(--kbq-black-default)))}.kbq-inline-edit .kbq-mask .kbq-mask__container{background:var(--kbq-mask-background, transparent)}.kbq-inline-edit .kbq-inline-edit__menu-mask{opacity:0;height:calc(100% + 2 * var(--kbq-size-border-width));justify-content:flex-end;border-top-right-radius:var(--kbq-size-border-radius);border-bottom-right-radius:var(--kbq-size-border-radius)}.kbq-inline-edit .kbq-inline-edit__menu-mask:has(.kbq-inline-edit__menu.kbq-pressed,.kbq-inline-edit__menu.cdk-keyboard-focused){opacity:1}.kbq-inline-edit .kbq-inline-edit__menu-mask .kbq-inline-edit__menu-mask-fade{width:32px}.kbq-inline-edit .kbq-inline-edit__menu-mask .kbq-inline-edit__menu-mask-container{display:flex;justify-content:flex-end;min-width:40px;border-radius:inherit}.kbq-inline-edit .kbq-inline-edit__menu-mask .kbq-inline-edit__menu{display:inline-flex;align-self:flex-start;padding:var(--kbq-size-s);z-index:2}.kbq-inline-edit__panel{width:100%}.kbq-inline-edit__panel .kbq-inline-edit__action-buttons{position:absolute;left:calc(-1 * var(--kbq-inline-edit-padding-horizontal));display:inline-flex;flex-direction:row;gap:var(--kbq-size-xxs);padding:var(--kbq-size-xxs) var(--kbq-size-s) var(--kbq-size-s)}.kbq-inline-edit__panel.kbq-inline-edit__panel_select .kbq-inline-edit__control-container{display:none}.kbq-inline-edit__panel .kbq-inline-edit__control-container,.kbq-inline-edit__panel .kbq-inline-edit__action-button{box-shadow:var(--kbq-shadow-popup);background-color:var(--kbq-background-bg);border-radius:var(--kbq-size-border-radius)}\n", ":where(.kbq-inline-edit,.kbq-inline-edit__panel){--kbq-inline-edit-background: transparent;--kbq-inline-edit-height: calc(var(--kbq-size-3xl) - 2 * var(--kbq-size-border-width));--kbq-inline-edit-padding-horizontal: calc(var(--kbq-size-s) - var(--kbq-size-border-width));--kbq-inline-edit-padding-vertical: calc(var(--kbq-size-xs) - var(--kbq-size-border-width));--kbq-inline-edit-panel-shadow: var(--kbq-shadow-popup);--kbq-inline-edit-label-color: var(--kbq-foreground-contrast-secondary);--kbq-inline-edit-error-background: var(--kbq-background-error-less)}\n"], dependencies: [{ kind: "directive", type: CdkConnectedOverlay, selector: "[cdk-connected-overlay], [connected-overlay], [cdkConnectedOverlay]", inputs: ["cdkConnectedOverlayOrigin", "cdkConnectedOverlayPositions", "cdkConnectedOverlayPositionStrategy", "cdkConnectedOverlayOffsetX", "cdkConnectedOverlayOffsetY", "cdkConnectedOverlayWidth", "cdkConnectedOverlayHeight", "cdkConnectedOverlayMinWidth", "cdkConnectedOverlayMinHeight", "cdkConnectedOverlayBackdropClass", "cdkConnectedOverlayPanelClass", "cdkConnectedOverlayViewportMargin", "cdkConnectedOverlayScrollStrategy", "cdkConnectedOverlayOpen", "cdkConnectedOverlayDisableClose", "cdkConnectedOverlayTransformOriginOn", "cdkConnectedOverlayHasBackdrop", "cdkConnectedOverlayLockPosition", "cdkConnectedOverlayFlexibleDimensions", "cdkConnectedOverlayGrowAfterOpen", "cdkConnectedOverlayPush", "cdkConnectedOverlayDisposeOnNavigation"], outputs: ["backdropClick", "positionChange", "attach", "detach", "overlayKeydown", "overlayOutsideClick"], exportAs: ["cdkConnectedOverlay"] }, { kind: "ngmodule", type: KbqButtonModule }, { kind: "component", type: i2.KbqButton, selector: "[kbq-button]", inputs: ["kbqStyle", "disabled", "tabIndex"] }, { kind: "directive", type: i2.KbqButtonCssStyler, selector: "[kbq-button]" }, { kind: "component", type: KbqIcon, selector: "[kbq-icon]", inputs: ["small", "autoColor", "kbq-icon"] }, { kind: "directive", type: KbqTooltipTrigger, selector: "[kbqTooltip]", inputs: ["kbqTooltipScrollStrategy", "forDisabledComponent", "ignoreTooltipPointerEvents", "kbqTooltipSingleInstance", "hideWithTimeout", "kbqVisible", "kbqPlacement", "kbqRelativeToPointer", "kbqPlacementPriority", "kbqTooltip", "kbqTooltipDisabled", "kbqEnterDelay", "kbqLeaveDelay", "kbqTrigger", "kbqTooltipClass", "kbqTooltipContext", "kbqTooltipColor", "kbqTooltipArrow", "kbqTooltipOffset", "kbqTooltipModifier", "kbqTooltipHeader"], outputs: ["kbqPlacementChange", "kbqVisibleChange"], exportAs: ["kbqTooltip"] }, { kind: "directive", type: KbqFocusRegionItem, selector: "[kbqFocusRegionItem]", outputs: ["tabOut"], exportAs: ["kbqFocusRegionItem"] }, { kind: "directive", type: CdkTrapFocus, selector: "[cdkTrapFocus]", inputs: ["cdkTrapFocus", "cdkTrapFocusAutoCapture"], exportAs: ["cdkTrapFocus"] }], animations: [KBQ_INLINE_EDIT_ACTION_BUTTONS_ANIMATION], changeDetection: i0.ChangeDetectionStrategy.OnPush, encapsulation: i0.ViewEncapsulation.None }); }
|
|
731
748
|
}
|
|
732
749
|
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "20.3.30", ngImport: i0, type: KbqInlineEdit, decorators: [{
|
|
733
750
|
type: Component,
|
|
@@ -753,7 +770,7 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "20.3.30", ngImpo
|
|
|
753
770
|
'(click)': 'onClick($event)',
|
|
754
771
|
'(keydown.enter)': 'onClick($event)',
|
|
755
772
|
'(keydown.space)': 'onClick($event)'
|
|
756
|
-
}, hostDirectives: [CdkMonitorFocus], animations: [KBQ_INLINE_EDIT_ACTION_BUTTONS_ANIMATION], exportAs: 'kbqInlineEdit', template: "<div class=\"kbq-inline-edit__focus_container\">\n <div class=\"cdk-visually-hidden\" role=\"status\" aria-live=\"polite\">{{ saveStatusMessage() }}</div>\n\n @if (label()) {\n <div class=\"kbq-inline-edit__label\">\n <ng-content select=\"kbq-label\" />\n </div>\n }\n\n <div #viewContainer class=\"kbq-inline-edit__view-container\">\n <div class=\"kbq-inline-edit__view-content\">\n <ng-content select=\"[kbqInlineEditViewMode]\" />\n </div>\n\n @if (hasInteractiveContent() && mode() === 'view' && !disabled()) {\n <div\n class=\"kbq-inline-edit__focus-anchor cdk-visually-hidden\"\n tabindex=\"0\"\n (focus)=\"anchorFocused.set(true)\"\n (blur)=\"anchorFocused.set(false)\"\n ></div>\n }\n\n @if (menu() && mode() === 'view') {\n <div class=\"kbq-inline-edit__menu-mask kbq-mask\">\n <div class=\"kbq-inline-edit__menu-mask-fade kbq-mask__fade\"></div>\n <div class=\"kbq-inline-edit__menu-mask-container kbq-mask__container\">\n <ng-content select=\"[kbqInlineEditMenu]\" />\n </div>\n </div>\n }\n\n <ng-template\n cdkConnectedOverlay\n cdkConnectedOverlayLockPosition\n [cdkConnectedOverlayOpen]=\"isEditMode()\"\n [cdkConnectedOverlayOrigin]=\"overlayOrigin\"\n [cdkConnectedOverlayOffsetY]=\"-overlayOrigin.offsetHeight\"\n [cdkConnectedOverlayWidth]=\"overlayWidth()\"\n [cdkConnectedOverlayDisableClose]=\"true\"\n [cdkConnectedOverlayScrollStrategy]=\"scrollStrategy()\"\n [cdkConnectedOverlayPanelClass]=\"overlayPanelClass()\"\n [cdkConnectedOverlayHasBackdrop]=\"false\"\n (attach)=\"onAttach()\"\n (overlayOutsideClick)=\"onOverlayOutsideClick($event)\"\n (overlayKeydown)=\"onOverlayKeydown($event)\"\n >\n <div class=\"cdk-visually-hidden\" aria-hidden=\"true\" kbqFocusRegionItem tabindex=\"0\"></div>\n <div\n class=\"kbq-inline-edit__panel\"\n cdkTrapFocusAutoCapture\n [class.kbq-inline-edit__panel_select]=\"isSingleSelect()\"\n [cdkTrapFocus]=\"false\"\n >\n <div\n class=\"kbq-inline-edit__control-container\"\n [kbqTooltipColor]=\"colors.Error\"\n [kbqTooltip]=\"validationTooltip() ?? ''\"\n [kbqTooltipDisabled]=\"!validationTooltip()\"\n [kbqTooltipArrow]=\"false\"\n [kbqTrigger]=\"'manual'\"\n [kbqPlacement]=\"tooltipPlacement() ?? placements.TopLeft\"\n [kbqTooltipScrollStrategy]=\"validationTooltipScrollStrategy\"\n >\n <ng-content select=\"[kbqInlineEditEditMode]\" />\n </div>\n\n @if (showActions()) {\n <div class=\"kbq-inline-edit__action-buttons\" role=\"group\" [@panelAnimation]>\n <div class=\"kbq-inline-edit__action-button\">\n <button kbq-button [color]=\"'contrast'\" (click)=\"save($event)\">\n <i kbq-icon=\"kbq-check_16\"></i>\n </button>\n </div>\n\n <div class=\"kbq-inline-edit__action-button\">\n <button kbq-button [color]=\"'contrast-fade'\" (click)=\"cancel()\">\n <i kbq-icon=\"kbq-xmark_16\"></i>\n </button>\n </div>\n </div>\n }\n </div>\n <div class=\"cdk-visually-hidden\" aria-hidden=\"true\" kbqFocusRegionItem tabindex=\"0\"></div>\n </ng-template>\n </div>\n</div>\n", styles: [".kbq-inline-edit{display:flex;flex-direction:column;justify-content:center;box-sizing:border-box;border:var(--kbq-size-border-width) solid transparent;border-radius:var(--kbq-size-border-radius);padding:var(--kbq-inline-edit-padding-vertical) var(--kbq-inline-edit-padding-horizontal);min-height:var(--kbq-inline-edit-height);background:var(--kbq-inline-edit-background)}.kbq-inline-edit:focus-visible{outline:none}.kbq-inline-edit.cdk-keyboard-focused,.kbq-inline-edit.kbq-inline-edit_anchor-focused{box-shadow:inset 0 0 .1px 1px var(--kbq-states-line-focus-theme);border-color:var(--kbq-states-line-focus-theme)}.kbq-inline-edit.kbq-inline-edit_view:not(.kbq-inline-edit_disabled):hover{--kbq-inline-edit-background: var(--kbq-states-background-transparent-hover);--kbq-mask-background: var(--kbq-states-background-contrast-less-hover);cursor:pointer}.kbq-inline-edit.kbq-inline-edit_view:not(.kbq-inline-edit_disabled):active,.kbq-inline-edit.kbq-inline-edit_view:not(.kbq-inline-edit_disabled):has(.kbq-inline-edit__menu.kbq-active){--kbq-inline-edit-background: var(--kbq-states-background-transparent-active);--kbq-mask-background: var(--kbq-states-background-contrast-less-active)}.kbq-inline-edit.kbq-inline-edit_view.kbq-inline-edit_disabled:hover,.kbq-inline-edit.kbq-inline-edit_view.kbq-inline-edit_disabled:has(.kbq-inline-edit__menu.kbq-active){--kbq-mask-background: var(--kbq-background-bg)}.kbq-inline-edit .kbq-label{color:var(--kbq-inline-edit-label-color)}.kbq-inline-edit.kbq-inline-edit_view.kbq-inline-edit_save-error{--kbq-inline-edit-background: var(--kbq-inline-edit-error-background)}.kbq-inline-edit.kbq-inline-edit_view.kbq-inline-edit_save-error:not(.kbq-inline-edit_disabled):hover{--kbq-inline-edit-background: var(--kbq-states-background-error-less-hover);--kbq-mask-background: var(--kbq-states-background-error-less-hover)}.kbq-inline-edit.kbq-inline-edit_view.kbq-inline-edit_save-error:not(.kbq-inline-edit_disabled):active,.kbq-inline-edit.kbq-inline-edit_view.kbq-inline-edit_save-error:not(.kbq-inline-edit_disabled):has(.kbq-inline-edit__menu.kbq-active){--kbq-inline-edit-background: var(--kbq-states-background-error-less-active);--kbq-mask-background: var(--kbq-states-background-error-less-active)}.kbq-inline-edit{font-size:var(--kbq-typography-text-normal-font-size);font-style:var(--kbq-typography-text-normal-font-style);font-weight:var(--kbq-typography-text-normal-font-weight);line-height:var(--kbq-typography-text-normal-line-height);font-family:var(--kbq-typography-text-normal-font-family);text-transform:var(--kbq-typography-text-normal-text-transform);font-feature-settings:var(--kbq-typography-text-normal-font-feature-settings);letter-spacing:var(--kbq-typography-text-normal-letter-spacing)}.kbq-inline-edit:not(.kbq-inline-edit_with-label){--kbq-inline-edit-padding-horizontal: calc(var(--kbq-size-m) - var(--kbq-size-border-width))}.kbq-inline-edit.kbq-inline-edit_with-label{padding-top:var(--kbq-inline-edit-padding-vertical);padding-bottom:var(--kbq-inline-edit-padding-vertical)}.kbq-inline-edit.kbq-inline-edit_with-label.kbq-inline-edit_edit .kbq-inline-edit__view-container{position:relative}.kbq-inline-edit.kbq-inline-edit_with-label .kbq-inline-edit__label{margin-bottom:var(--kbq-size-3xs)}.kbq-inline-edit.kbq-inline-edit_view .kbq-inline-edit__view-container,.kbq-inline-edit.kbq-inline-edit_view .kbq-inline-edit__view-content{text-overflow:ellipsis}.kbq-inline-edit.kbq-inline-edit_select.kbq-inline-edit_edit{--kbq-inline-edit-background: var(--kbq-states-background-transparent-active)}.kbq-inline-edit:hover .kbq-inline-edit__menu-mask,.kbq-inline-edit.cdk-keyboard-focused .kbq-inline-edit__menu-mask,.kbq-inline-edit.kbq-inline-edit_anchor-focused .kbq-inline-edit__menu-mask{opacity:1}.kbq-inline-edit .kbq-inline-edit__placeholder{color:var(--kbq-foreground-contrast-secondary)}.kbq-inline-edit{position:relative}.kbq-inline-edit .kbq-mask{display:flex;position:absolute;top:calc(var(--kbq-size-border-width) * -1);right:calc(var(--kbq-size-border-width) * -1)}.kbq-inline-edit .kbq-mask .kbq-mask__fade{background:var(--kbq-mask-background, transparent);-webkit-mask-image:linear-gradient(90deg,transparent,var(--kbq-plt-black, var(--kbq-black-default)));mask-image:linear-gradient(90deg,transparent,var(--kbq-plt-black, var(--kbq-black-default)))}.kbq-inline-edit .kbq-mask .kbq-mask__container{background:var(--kbq-mask-background, transparent)}.kbq-inline-edit .kbq-inline-edit__menu-mask{opacity:0;height:calc(100% + 2 * var(--kbq-size-border-width));justify-content:flex-end;border-top-right-radius:var(--kbq-size-border-radius);border-bottom-right-radius:var(--kbq-size-border-radius)}.kbq-inline-edit .kbq-inline-edit__menu-mask:has(.kbq-inline-edit__menu.kbq-pressed,.kbq-inline-edit__menu.cdk-keyboard-focused){opacity:1}.kbq-inline-edit .kbq-inline-edit__menu-mask .kbq-inline-edit__menu-mask-fade{width:32px}.kbq-inline-edit .kbq-inline-edit__menu-mask .kbq-inline-edit__menu-mask-container{display:flex;justify-content:flex-end;min-width:40px;border-radius:inherit}.kbq-inline-edit .kbq-inline-edit__menu-mask .kbq-inline-edit__menu{display:inline-flex;align-self:flex-start;padding:var(--kbq-size-s);z-index:2}.kbq-inline-edit__panel{width:100%}.kbq-inline-edit__panel .kbq-inline-edit__action-buttons{position:absolute;left:calc(-1 * var(--kbq-inline-edit-padding-horizontal));display:inline-flex;flex-direction:row;gap:var(--kbq-size-xxs);padding:var(--kbq-size-xxs) var(--kbq-size-s) var(--kbq-size-s)}.kbq-inline-edit__panel.kbq-inline-edit__panel_select .kbq-inline-edit__control-container{display:none}.kbq-inline-edit__panel .kbq-inline-edit__control-container,.kbq-inline-edit__panel .kbq-inline-edit__action-button{box-shadow:var(--kbq-shadow-popup);background-color:var(--kbq-background-bg);border-radius:var(--kbq-size-border-radius)}\n", ":where(.kbq-inline-edit,.kbq-inline-edit__panel){--kbq-inline-edit-background: transparent;--kbq-inline-edit-height: calc(var(--kbq-size-3xl) - 2 * var(--kbq-size-border-width));--kbq-inline-edit-padding-horizontal: calc(var(--kbq-size-s) - var(--kbq-size-border-width));--kbq-inline-edit-padding-vertical: calc(var(--kbq-size-xs) - var(--kbq-size-border-width));--kbq-inline-edit-panel-shadow: var(--kbq-shadow-popup);--kbq-inline-edit-label-color: var(--kbq-foreground-contrast-secondary);--kbq-inline-edit-error-background: var(--kbq-background-error-less)}\n"] }]
|
|
773
|
+
}, hostDirectives: [CdkMonitorFocus], animations: [KBQ_INLINE_EDIT_ACTION_BUTTONS_ANIMATION], exportAs: 'kbqInlineEdit', template: "<div class=\"kbq-inline-edit__focus_container\">\n <div class=\"cdk-visually-hidden\" role=\"status\" aria-live=\"polite\">{{ saveStatusMessage() }}</div>\n\n @if (label()) {\n <div class=\"kbq-inline-edit__label\">\n <ng-content select=\"kbq-label\" />\n </div>\n }\n\n <div #viewContainer class=\"kbq-inline-edit__view-container\">\n <div class=\"kbq-inline-edit__view-content\">\n <ng-content select=\"[kbqInlineEditViewMode]\" />\n </div>\n\n @if (hasInteractiveContent() && mode() === 'view' && !disabled()) {\n <div\n class=\"kbq-inline-edit__focus-anchor cdk-visually-hidden\"\n tabindex=\"0\"\n (focus)=\"anchorFocused.set(true)\"\n (blur)=\"anchorFocused.set(false)\"\n ></div>\n }\n\n @if (menu() && mode() === 'view') {\n <div class=\"kbq-inline-edit__menu-mask kbq-mask\">\n <div class=\"kbq-inline-edit__menu-mask-fade kbq-mask__fade\"></div>\n <div class=\"kbq-inline-edit__menu-mask-container kbq-mask__container\">\n <ng-content select=\"[kbqInlineEditMenu]\" />\n </div>\n </div>\n }\n\n <ng-template\n cdkConnectedOverlay\n cdkConnectedOverlayLockPosition\n [cdkConnectedOverlayOpen]=\"isEditMode()\"\n [cdkConnectedOverlayOrigin]=\"overlayOrigin\"\n [cdkConnectedOverlayPositions]=\"overlayPositions\"\n [cdkConnectedOverlayOffsetY]=\"-overlayOrigin.offsetHeight\"\n [cdkConnectedOverlayWidth]=\"overlayWidth()\"\n [cdkConnectedOverlayPush]=\"false\"\n [cdkConnectedOverlayDisableClose]=\"true\"\n [cdkConnectedOverlayScrollStrategy]=\"scrollStrategy()\"\n [cdkConnectedOverlayPanelClass]=\"overlayPanelClass()\"\n [cdkConnectedOverlayHasBackdrop]=\"false\"\n (attach)=\"onAttach()\"\n (overlayOutsideClick)=\"onOverlayOutsideClick($event)\"\n (overlayKeydown)=\"onOverlayKeydown($event)\"\n >\n <div class=\"cdk-visually-hidden\" aria-hidden=\"true\" kbqFocusRegionItem tabindex=\"0\"></div>\n <div\n class=\"kbq-inline-edit__panel\"\n cdkTrapFocusAutoCapture\n [class.kbq-inline-edit__panel_select]=\"isSingleSelect()\"\n [cdkTrapFocus]=\"false\"\n >\n <div\n class=\"kbq-inline-edit__control-container\"\n [kbqTooltipColor]=\"colors.Error\"\n [kbqTooltip]=\"validationTooltip() ?? ''\"\n [kbqTooltipDisabled]=\"!validationTooltip()\"\n [kbqTooltipArrow]=\"false\"\n [kbqTrigger]=\"'manual'\"\n [kbqPlacement]=\"tooltipPlacement() ?? placements.TopLeft\"\n [kbqTooltipScrollStrategy]=\"validationTooltipScrollStrategy\"\n >\n <ng-content select=\"[kbqInlineEditEditMode]\" />\n </div>\n\n @if (showActions()) {\n <div class=\"kbq-inline-edit__action-buttons\" role=\"group\" [@panelAnimation]>\n <div class=\"kbq-inline-edit__action-button\">\n <button kbq-button [color]=\"'contrast'\" (click)=\"save($event)\">\n <i kbq-icon=\"kbq-check_16\"></i>\n </button>\n </div>\n\n <div class=\"kbq-inline-edit__action-button\">\n <button kbq-button [color]=\"'contrast-fade'\" (click)=\"cancel()\">\n <i kbq-icon=\"kbq-xmark_16\"></i>\n </button>\n </div>\n </div>\n }\n </div>\n <div class=\"cdk-visually-hidden\" aria-hidden=\"true\" kbqFocusRegionItem tabindex=\"0\"></div>\n </ng-template>\n </div>\n</div>\n", styles: [".kbq-inline-edit{display:flex;flex-direction:column;justify-content:center;box-sizing:border-box;border:var(--kbq-size-border-width) solid transparent;border-radius:var(--kbq-size-border-radius);padding:var(--kbq-inline-edit-padding-vertical) var(--kbq-inline-edit-padding-horizontal);min-height:var(--kbq-inline-edit-height);background:var(--kbq-inline-edit-background)}.kbq-inline-edit:focus-visible{outline:none}.kbq-inline-edit.cdk-keyboard-focused,.kbq-inline-edit.kbq-inline-edit_anchor-focused{box-shadow:inset 0 0 .1px 1px var(--kbq-states-line-focus-theme);border-color:var(--kbq-states-line-focus-theme)}.kbq-inline-edit.kbq-inline-edit_view:not(.kbq-inline-edit_disabled):hover{--kbq-inline-edit-background: var(--kbq-states-background-transparent-hover);--kbq-mask-background: var(--kbq-states-background-contrast-less-hover);cursor:pointer}.kbq-inline-edit.kbq-inline-edit_view:not(.kbq-inline-edit_disabled):active,.kbq-inline-edit.kbq-inline-edit_view:not(.kbq-inline-edit_disabled):has(.kbq-inline-edit__menu.kbq-active){--kbq-inline-edit-background: var(--kbq-states-background-transparent-active);--kbq-mask-background: var(--kbq-states-background-contrast-less-active)}.kbq-inline-edit.kbq-inline-edit_view.kbq-inline-edit_disabled:hover,.kbq-inline-edit.kbq-inline-edit_view.kbq-inline-edit_disabled:has(.kbq-inline-edit__menu.kbq-active){--kbq-mask-background: var(--kbq-background-bg)}.kbq-inline-edit .kbq-label{color:var(--kbq-inline-edit-label-color)}.kbq-inline-edit.kbq-inline-edit_view.kbq-inline-edit_save-error{--kbq-inline-edit-background: var(--kbq-inline-edit-error-background)}.kbq-inline-edit.kbq-inline-edit_view.kbq-inline-edit_save-error:not(.kbq-inline-edit_disabled):hover{--kbq-inline-edit-background: var(--kbq-states-background-error-less-hover);--kbq-mask-background: var(--kbq-states-background-error-less-hover)}.kbq-inline-edit.kbq-inline-edit_view.kbq-inline-edit_save-error:not(.kbq-inline-edit_disabled):active,.kbq-inline-edit.kbq-inline-edit_view.kbq-inline-edit_save-error:not(.kbq-inline-edit_disabled):has(.kbq-inline-edit__menu.kbq-active){--kbq-inline-edit-background: var(--kbq-states-background-error-less-active);--kbq-mask-background: var(--kbq-states-background-error-less-active)}.kbq-inline-edit{font-size:var(--kbq-typography-text-normal-font-size);font-style:var(--kbq-typography-text-normal-font-style);font-weight:var(--kbq-typography-text-normal-font-weight);line-height:var(--kbq-typography-text-normal-line-height);font-family:var(--kbq-typography-text-normal-font-family);text-transform:var(--kbq-typography-text-normal-text-transform);font-feature-settings:var(--kbq-typography-text-normal-font-feature-settings);letter-spacing:var(--kbq-typography-text-normal-letter-spacing)}.kbq-inline-edit:not(.kbq-inline-edit_with-label){--kbq-inline-edit-padding-horizontal: calc(var(--kbq-size-m) - var(--kbq-size-border-width))}.kbq-inline-edit.kbq-inline-edit_with-label{padding-top:var(--kbq-inline-edit-padding-vertical);padding-bottom:var(--kbq-inline-edit-padding-vertical)}.kbq-inline-edit.kbq-inline-edit_with-label.kbq-inline-edit_edit .kbq-inline-edit__view-container{position:relative}.kbq-inline-edit.kbq-inline-edit_with-label .kbq-inline-edit__label{margin-bottom:var(--kbq-size-3xs)}.kbq-inline-edit.kbq-inline-edit_view .kbq-inline-edit__view-container,.kbq-inline-edit.kbq-inline-edit_view .kbq-inline-edit__view-content{text-overflow:ellipsis}.kbq-inline-edit.kbq-inline-edit_select.kbq-inline-edit_edit{--kbq-inline-edit-background: var(--kbq-states-background-transparent-active)}.kbq-inline-edit:hover .kbq-inline-edit__menu-mask,.kbq-inline-edit.cdk-keyboard-focused .kbq-inline-edit__menu-mask,.kbq-inline-edit.kbq-inline-edit_anchor-focused .kbq-inline-edit__menu-mask{opacity:1}.kbq-inline-edit .kbq-inline-edit__placeholder{color:var(--kbq-foreground-contrast-secondary)}.kbq-inline-edit{position:relative}.kbq-inline-edit .kbq-mask{display:flex;position:absolute;top:calc(var(--kbq-size-border-width) * -1);right:calc(var(--kbq-size-border-width) * -1)}.kbq-inline-edit .kbq-mask .kbq-mask__fade{background:var(--kbq-mask-background, transparent);-webkit-mask-image:linear-gradient(90deg,transparent,var(--kbq-plt-black, var(--kbq-black-default)));mask-image:linear-gradient(90deg,transparent,var(--kbq-plt-black, var(--kbq-black-default)))}.kbq-inline-edit .kbq-mask .kbq-mask__container{background:var(--kbq-mask-background, transparent)}.kbq-inline-edit .kbq-inline-edit__menu-mask{opacity:0;height:calc(100% + 2 * var(--kbq-size-border-width));justify-content:flex-end;border-top-right-radius:var(--kbq-size-border-radius);border-bottom-right-radius:var(--kbq-size-border-radius)}.kbq-inline-edit .kbq-inline-edit__menu-mask:has(.kbq-inline-edit__menu.kbq-pressed,.kbq-inline-edit__menu.cdk-keyboard-focused){opacity:1}.kbq-inline-edit .kbq-inline-edit__menu-mask .kbq-inline-edit__menu-mask-fade{width:32px}.kbq-inline-edit .kbq-inline-edit__menu-mask .kbq-inline-edit__menu-mask-container{display:flex;justify-content:flex-end;min-width:40px;border-radius:inherit}.kbq-inline-edit .kbq-inline-edit__menu-mask .kbq-inline-edit__menu{display:inline-flex;align-self:flex-start;padding:var(--kbq-size-s);z-index:2}.kbq-inline-edit__panel{width:100%}.kbq-inline-edit__panel .kbq-inline-edit__action-buttons{position:absolute;left:calc(-1 * var(--kbq-inline-edit-padding-horizontal));display:inline-flex;flex-direction:row;gap:var(--kbq-size-xxs);padding:var(--kbq-size-xxs) var(--kbq-size-s) var(--kbq-size-s)}.kbq-inline-edit__panel.kbq-inline-edit__panel_select .kbq-inline-edit__control-container{display:none}.kbq-inline-edit__panel .kbq-inline-edit__control-container,.kbq-inline-edit__panel .kbq-inline-edit__action-button{box-shadow:var(--kbq-shadow-popup);background-color:var(--kbq-background-bg);border-radius:var(--kbq-size-border-radius)}\n", ":where(.kbq-inline-edit,.kbq-inline-edit__panel){--kbq-inline-edit-background: transparent;--kbq-inline-edit-height: calc(var(--kbq-size-3xl) - 2 * var(--kbq-size-border-width));--kbq-inline-edit-padding-horizontal: calc(var(--kbq-size-s) - var(--kbq-size-border-width));--kbq-inline-edit-padding-vertical: calc(var(--kbq-size-xs) - var(--kbq-size-border-width));--kbq-inline-edit-panel-shadow: var(--kbq-shadow-popup);--kbq-inline-edit-label-color: var(--kbq-foreground-contrast-secondary);--kbq-inline-edit-error-background: var(--kbq-background-error-less)}\n"] }]
|
|
757
774
|
}], ctorParameters: () => [], propDecorators: { showActions: [{ type: i0.Input, args: [{ isSignal: true, alias: "showActions", required: false }] }], showTooltipOnError: [{ type: i0.Input, args: [{ isSignal: true, alias: "showTooltipOnError", required: false }] }], validationTooltip: [{ type: i0.Input, args: [{ isSignal: true, alias: "validationTooltip", required: false }] }], disabled: [{ type: i0.Input, args: [{ isSignal: true, alias: "disabled", required: false }] }], editModeWidth: [{ type: i0.Input, args: [{ isSignal: true, alias: "editModeWidth", required: false }] }], tooltipPlacement: [{ type: i0.Input, args: [{ isSignal: true, alias: "tooltipPlacement", required: false }] }], overlayPanelClass: [{ type: i0.Input, args: [{ isSignal: true, alias: "overlayPanelClass", required: false }] }], getValueHandler: [{ type: i0.Input, args: [{ isSignal: true, alias: "getValueHandler", required: false }] }], setValueHandler: [{ type: i0.Input, args: [{ isSignal: true, alias: "setValueHandler", required: false }] }], compareWith: [{ type: i0.Input, args: [{ isSignal: true, alias: "compareWith", required: false }] }], saveHandler: [{ type: i0.Input, args: [{ isSignal: true, alias: "saveHandler", required: false }] }], saveErrorHandler: [{ type: i0.Input, args: [{ isSignal: true, alias: "saveErrorHandler", required: false }] }], canSaveOnEnter: [{ type: i0.Input, args: [{ isSignal: true, alias: "canSaveOnEnter", required: false }] }], interactiveSelectors: [{ type: i0.Input, args: [{ isSignal: true, alias: "interactiveSelectors", required: false }] }], saved: [{ type: i0.Output, args: ["saved"] }], canceled: [{ type: i0.Output, args: ["canceled"] }], saveError: [{ type: i0.Output, args: ["saveError"] }], modeChange: [{ type: i0.Output, args: ["modeChange"] }], menu: [{ type: i0.ContentChild, args: [i0.forwardRef(() => KbqInlineEditMenu), { isSignal: true }] }], label: [{ type: i0.ContentChild, args: [i0.forwardRef(() => KbqLabel), { isSignal: true }] }], formFieldRefList: [{ type: i0.ContentChildren, args: [i0.forwardRef(() => KbqFormField), { ...{ descendants: true }, isSignal: true }] }], selectRef: [{ type: i0.ContentChild, args: [i0.forwardRef(() => KbqSelect), { ...{ descendants: true }, isSignal: true }] }], tooltipTrigger: [{ type: i0.ViewChild, args: [i0.forwardRef(() => KbqTooltipTrigger), { isSignal: true }] }], viewContainer: [{ type: i0.ViewChild, args: ['viewContainer', { isSignal: true }] }], overlayDir: [{ type: i0.ViewChild, args: [i0.forwardRef(() => CdkConnectedOverlay), { isSignal: true }] }], regionItems: [{ type: i0.ViewChildren, args: [i0.forwardRef(() => KbqFocusRegionItem), { isSignal: true }] }] } });
|
|
758
775
|
|
|
759
776
|
const COMPONENTS = [
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"koobiq-components-inline-edit.mjs","sources":["../../../packages/components/inline-edit/inline-edit.ts","../../../packages/components/inline-edit/inline-edit.html","../../../packages/components/inline-edit/module.ts","../../../packages/components/inline-edit/koobiq-components-inline-edit.ts"],"sourcesContent":["import { animate, style, transition, trigger } from '@angular/animations';\nimport { CdkMonitorFocus, CdkTrapFocus } from '@angular/cdk/a11y';\nimport { hasModifierKey } from '@angular/cdk/keycodes';\nimport { SharedResizeObserver } from '@angular/cdk/observers/private';\nimport { CdkConnectedOverlay, Overlay, ScrollDispatcher, ScrollStrategy } from '@angular/cdk/overlay';\nimport { DOCUMENT } from '@angular/common';\nimport {\n booleanAttribute,\n ChangeDetectionStrategy,\n Component,\n computed,\n contentChild,\n contentChildren,\n DestroyRef,\n Directive,\n effect,\n ElementRef,\n forwardRef,\n inject,\n InjectionToken,\n input,\n NgZone,\n numberAttribute,\n output,\n signal,\n TemplateRef,\n viewChild,\n viewChildren,\n ViewEncapsulation\n} from '@angular/core';\nimport { takeUntilDestroyed, toObservable } from '@angular/core/rxjs-interop';\nimport { AbstractControl, NgControl } from '@angular/forms';\nimport { KbqButtonModule } from '@koobiq/components/button';\nimport {\n isElement,\n KBQ_CONNECTED_OVERLAY_ORIGIN,\n KBQ_WINDOW,\n KbqAnimationCurves,\n KbqAnimationDurations,\n KbqComponentColors,\n KbqConnectedOverlayOriginProvider,\n kbqInjectA11yLocaleConfiguration,\n PopUpPlacements,\n runCompareWith\n} from '@koobiq/components/core';\nimport { KbqDropdownTrigger } from '@koobiq/components/dropdown';\nimport { KbqFormField, KbqLabel } from '@koobiq/components/form-field';\nimport { KbqIcon } from '@koobiq/components/icon';\nimport { KbqSelect } from '@koobiq/components/select';\nimport { KbqTooltipTrigger } from '@koobiq/components/tooltip';\nimport { concat, merge, Observable, of, skip, timer } from 'rxjs';\nimport { catchError, concatMap, defaultIfEmpty, ignoreElements, map, take, takeUntil, takeWhile } from 'rxjs/operators';\n\nconst KBQ_INLINE_EDIT_ACTION_BUTTONS_ANIMATION = trigger('panelAnimation', [\n transition(':enter', [\n style({ transform: 'translateY(100%)', opacity: 0 }),\n animate(\n `${KbqAnimationDurations.Instant} ${KbqAnimationCurves.DecelerationCurve}`,\n style({ transform: 'translateY(0%)', opacity: 1 })\n )\n ])\n]);\n\nconst baseClass = 'kbq-inline-edit';\n\n/**\n * Fallback delay before showing the validation tooltip if `scrollend` never fires — e.g. the browser doesn't\n * support it, or nothing needed to scroll.\n */\nconst VALIDATION_TOOLTIP_SCROLL_TIMEOUT = 800;\n\n/** Controls in edit mode that Enter activates on their own, so the default `canSaveOnEnter` leaves them alone. */\nconst ENTER_ACTIVATED_SELECTORS =\n 'button,input[type=\"button\"],input[type=\"submit\"],input[type=\"reset\"],[role=\"button\"]';\n\n/** Delay before the save progress state appears, so a fast response causes no flicker. */\nexport const kbqInlineEditSaveProgressDelay = 100;\n\n/** Minimum time the save progress state stays once it has appeared. */\nexport const kbqInlineEditSaveProgressMinimumDuration = 300;\n\nexport type KbqInlineEditMode = 'view' | 'edit';\n\n/**\n * Saves the edited value, e.g. sends it to a server. Only the first emission counts, and the observable must emit\n * or complete: destroying the row does not cancel it, so one that never settles keeps the row in memory.\n *\n * Called without a receiver, so bind an arrow function rather than a method that relies on `this`.\n */\nexport type KbqInlineEditSaveHandler = () => Observable<unknown>;\n\n/** State of the save request started by `saveHandler`. `progress` is `pending` past the indicator delay. */\nexport type KbqInlineEditSaveStatus = 'idle' | 'pending' | 'progress' | 'error';\n\n/** Recovery a failed-save notification can offer: retry, edit again, discard the unsaved value. */\nexport interface KbqInlineEditSaveRecovery {\n retrySave(): void;\n toggleMode(): void;\n rollback(): void;\n}\n\n/** Failed save, reported through `saveError` and `KBQ_INLINE_EDIT_SAVE_ERROR_HANDLER`. */\nexport interface KbqInlineEditSaveErrorContext<E = any> {\n /** Parameterise the interface to type this. */\n readonly error: E;\n /** Inline edit whose save failed. */\n readonly inlineEdit: KbqInlineEditSaveRecovery;\n}\n\n/** Reaction to a failed save, e.g. opening a toast. */\nexport type KbqInlineEditSaveErrorHandler = (context: KbqInlineEditSaveErrorContext) => void;\n\n/** Reports every failed save the same way across the application. Declare it in the root injector. */\nexport const KBQ_INLINE_EDIT_SAVE_ERROR_HANDLER = new InjectionToken<KbqInlineEditSaveErrorHandler>(\n 'KbqInlineEditSaveErrorHandler'\n);\n\n/** @docs-private */\n@Directive({\n selector: '[kbqFocusRegionItem]',\n host: {\n '(focusin)': 'isFocused = true',\n '(keydown.tab)': 'onTabOut($event)',\n '(keydown.shift.tab)': 'onTabOut($event)'\n },\n exportAs: 'kbqFocusRegionItem'\n})\nexport class KbqFocusRegionItem {\n readonly tabOut = output<KeyboardEvent>();\n\n protected isFocused = false;\n\n protected onTabOut(event: KeyboardEvent) {\n if (this.isFocused) {\n this.tabOut.emit(event);\n }\n\n this.isFocused = !this.isFocused;\n }\n}\n\n/** Directive for easy using styles of inline edit placeholder publicly. */\n@Directive({\n selector: '[kbqInlineEditPlaceholder]',\n host: {\n class: 'kbq-inline-edit__placeholder'\n },\n exportAs: 'kbqInlineEditPlaceholder'\n})\nexport class KbqInlineEditPlaceholder {}\n\n/**\n * This directive enhances element acting as dropdown trigger,\n * visually indicating the active state with the `kbq-active` class.\n * Also, it prevents click/keydown events from being propagated to disable mode toggling of parent component.\n */\n@Directive({\n selector: '[kbqInlineEditMenu]',\n host: {\n role: 'button',\n class: 'kbq-inline-edit__menu',\n '[class.kbq-active]': 'dropdownTrigger?.opened',\n '(click)': '$event.stopPropagation()',\n '(keydown.enter)': '$event.stopPropagation()',\n '(keydown.space)': '$event.stopPropagation()'\n },\n exportAs: 'kbqInlineEditMenu'\n})\nexport class KbqInlineEditMenu {\n /** @docs-private */\n protected readonly dropdownTrigger = inject(KbqDropdownTrigger, { optional: true });\n}\n\n/**\n * Customizable component that enables edit-in-place logic for specified control and it's view.\n * This component is projecting edit/view mode templates and adds keyboard/pointer handlers.\n * Edit mode opens in a positioned overlay that matches the view mode width or can be customized.\n */\n@Component({\n selector: 'kbq-inline-edit',\n imports: [\n CdkConnectedOverlay,\n KbqButtonModule,\n KbqIcon,\n KbqTooltipTrigger,\n KbqFocusRegionItem,\n CdkTrapFocus\n ],\n templateUrl: './inline-edit.html',\n styleUrls: ['./inline-edit.scss', './inline-edit-tokens.scss'],\n providers: [{ provide: KBQ_CONNECTED_OVERLAY_ORIGIN, useExisting: forwardRef(() => KbqInlineEdit) }],\n changeDetection: ChangeDetectionStrategy.OnPush,\n encapsulation: ViewEncapsulation.None,\n host: {\n class: baseClass,\n '[attr.tabindex]': 'tabIndex()',\n '[class]': 'className()',\n '[class.kbq-inline-edit_with-label]': '!!label()',\n '[class.kbq-inline-edit_with-menu]': '!!menu()',\n '[class.kbq-inline-edit_disabled]': 'disabled()',\n '[class.kbq-inline-edit_anchor-focused]': 'anchorFocused()',\n '[class.kbq-inline-edit_select]': 'isSingleSelect()',\n '[class.kbq-inline-edit_save-error]': 'saveStatus() === \"error\"',\n // The background save is reported on the row itself, which by then is back in view mode.\n '[class.kbq-progress]': 'saveStatus() === \"progress\"',\n '(click)': 'onClick($event)',\n '(keydown.enter)': 'onClick($event)',\n '(keydown.space)': 'onClick($event)'\n },\n hostDirectives: [CdkMonitorFocus],\n animations: [KBQ_INLINE_EDIT_ACTION_BUTTONS_ANIMATION],\n exportAs: 'kbqInlineEdit'\n})\nexport class KbqInlineEdit implements KbqConnectedOverlayOriginProvider, KbqInlineEditSaveRecovery {\n /** Texts of the save status announcements. */\n protected readonly a11yLocaleConfiguration = kbqInjectA11yLocaleConfiguration();\n\n private readonly overlay = inject(Overlay);\n private readonly document = inject(DOCUMENT);\n private readonly window = inject(KBQ_WINDOW);\n private readonly resizeObserver = inject(SharedResizeObserver);\n protected readonly elementRef = inject<ElementRef<HTMLElement>>(ElementRef);\n private readonly ngZone = inject(NgZone);\n private readonly scrollDispatcher = inject(ScrollDispatcher);\n private readonly destroyRef = inject(DestroyRef);\n\n /**\n * The validation tooltip is anchored inside the edit-mode overlay — an overlay inside another\n * overlay. Its default `close()` scroll strategy would close it the moment either overlay's\n * origin scrolls (including the programmatic scroll `showValidationTooltip()` uses to bring an\n * invalid control into view), so it's overridden to `reposition()` here — passed directly as a\n * per-instance override to this tooltip's `[kbqTooltipScrollStrategy]` input, rather than a DI\n * override, so it doesn't leak into any `kbqTooltip` in projected content.\n * @docs-private\n */\n protected readonly validationTooltipScrollStrategy = (): ScrollStrategy =>\n this.overlay.scrollStrategies.reposition();\n\n /**\n * Whether to show save/cancel action buttons in edit mode.\n * @default false\n */\n readonly showActions = input(false, { transform: booleanAttribute });\n /**\n * Whether to automatically show validation error tooltips on save attempts.\n * @default true\n */\n readonly showTooltipOnError = input(true, { transform: booleanAttribute });\n /** Custom validation tooltip message. */\n readonly validationTooltip = input<string | TemplateRef<any>>();\n /**\n * Disables the component, preventing interaction and mode switching. Only allows menu dropdown.\n * @default false\n */\n readonly disabled = input(false, { transform: booleanAttribute });\n /** Custom width in pixels for the edit mode overlay. Auto-calculated if not set. */\n readonly editModeWidth = input(undefined, { transform: numberAttribute });\n /** User-defined tooltip placement */\n readonly tooltipPlacement = input<PopUpPlacements>();\n /** Classes to be passed to the inline edit panel. */\n readonly overlayPanelClass = input<string | string[]>('');\n /** Handler function to retrieve the current value */\n readonly getValueHandler = input<() => unknown>();\n /** Handler function to update the value */\n readonly setValueHandler = input<(value: any) => void>();\n /**\n * Whether the value still equals the one the editor opened with, in which case `saveHandler` is not called.\n * The default suits text and numbers; bind your own for arrays and objects, or `null` to send every time.\n * A failed save is always retried, however the values compare.\n */\n readonly compareWith = input<((a: any, b: any) => boolean) | null>((a, b) => a === b);\n /**\n * Saves a valid value in the background: edit mode closes right away and view mode reports how the request\n * went. Without it, a valid value is saved immediately.\n */\n readonly saveHandler = input<KbqInlineEditSaveHandler>();\n /**\n * Reaction to a failed save for this inline edit alone. Defaults to `KBQ_INLINE_EDIT_SAVE_ERROR_HANDLER`;\n * bind `null` to leave it without one.\n */\n readonly saveErrorHandler = input<KbqInlineEditSaveErrorHandler | null>(\n inject(KBQ_INLINE_EDIT_SAVE_ERROR_HANDLER, { optional: true })\n );\n /** Customizable function that checks if saving on enter available. */\n readonly canSaveOnEnter = input((event: KeyboardEvent): boolean => {\n // A control that runs its own action on Enter would otherwise fire it and save at the same time.\n if (isElement(event.target) && event.target.closest(ENTER_ACTIVATED_SELECTORS)) return false;\n\n return hasModifierKey(event, 'ctrlKey', 'metaKey') || !(event.target instanceof HTMLTextAreaElement);\n });\n\n /**\n * CSS selectors for elements in view mode that should handle clicks instead of opening edit mode.\n * Override to replace or extend the default list.\n *\n * @example\n * `<kbq-inline-edit [interactiveSelectors]=\"['a', 'kbq-tag', 'button']\">`\n */\n readonly interactiveSelectors = input<string[]>(['a', 'kbq-tag']);\n\n /** Emitted when the inline edit is saved successfully. */\n protected readonly saved = output();\n /** Emitted when the inline edit is canceled and changes are discarded. */\n protected readonly canceled = output();\n /** Emitted when a `saveHandler` request fails. Silent once the row is destroyed; `saveErrorHandler` is not. */\n protected readonly saveError = output<KbqInlineEditSaveErrorContext>();\n /** Emitted when mode switched to edit/view */\n protected readonly modeChange = output<KbqInlineEditMode>();\n\n /** @docs-private */\n protected readonly menu = contentChild(KbqInlineEditMenu);\n /** @docs-private */\n protected readonly label = contentChild(KbqLabel);\n\n /** @docs-private */\n protected readonly formFieldRef = computed<KbqFormField | undefined>(() => this.formFieldRefList()[0]);\n /** @docs-private */\n protected readonly formFieldRefList = contentChildren(KbqFormField, { descendants: true });\n\n /** @docs-private */\n protected readonly selectRef = contentChild(KbqSelect, { descendants: true });\n /**\n * Whether edit mode contains a single-value select. When true, edit mode shows only the\n * dropdown panel instead of a bordered field - see the \"Select-style editor\" example.\n * @docs-private\n */\n protected readonly isSingleSelect = computed(() => {\n const select = this.selectRef();\n\n return !!select && !select.multiple && !select.multiline();\n });\n\n /** @docs-private */\n protected overlayOrigin: HTMLElement = this.elementRef.nativeElement;\n /** @docs-private */\n protected readonly tooltipTrigger = viewChild.required(KbqTooltipTrigger);\n /** @docs-private */\n protected readonly viewContainer = viewChild.required<ElementRef<HTMLElement>>('viewContainer');\n /** @docs-private */\n protected readonly overlayDir = viewChild.required(CdkConnectedOverlay);\n /** @docs-private */\n protected readonly regionItems = viewChildren(KbqFocusRegionItem);\n\n /** @docs-private */\n protected readonly mode = signal<KbqInlineEditMode>('view');\n /** @docs-private */\n protected readonly overlayWidth = signal<number | string>('');\n /** @docs-private */\n protected readonly scrollStrategy = signal<ScrollStrategy>(this.overlay.scrollStrategies.reposition());\n /** @docs-private */\n readonly modeAsReadonly = computed(() => this.mode());\n\n private readonly saveStatusSource = signal<KbqInlineEditSaveStatus>('idle');\n /** State of the background save started by `saveHandler`. */\n readonly saveStatus = this.saveStatusSource.asReadonly();\n /** @docs-private */\n protected readonly isSaving = computed(() => this.saveStatus() === 'pending' || this.saveStatus() === 'progress');\n /**\n * Both save states are otherwise conveyed by colour alone. `aria-busy` cannot carry the first one: it is set\n * on the row, which contains this region, and that tells assistive tech to hold the announcement back.\n * @docs-private\n */\n protected readonly saveStatusMessage = computed(() => {\n const a11y = this.a11yLocaleConfiguration();\n\n if (this.saveStatus() === 'progress') return a11y.saving;\n\n return this.saveStatus() === 'error' ? a11y.saveFailed : '';\n });\n\n /** @docs-private */\n protected readonly className = computed(() => `${baseClass}_${this.mode()}`);\n /** @docs-private */\n protected readonly isEditMode = computed(() => this.mode() === 'edit');\n /** @docs-private */\n protected readonly hasInteractiveContent = signal(false);\n /** @docs-private */\n protected readonly anchorFocused = signal(false);\n /** @docs-private */\n protected readonly tabIndex = computed(() => {\n // Saving is deliberately absent: like `kbq-dropdown-item`, a row in progress keeps its place in the tab\n // order and only has its action blocked — leaving the tab order is what `disabled` means.\n if (this.isEditMode() || this.disabled() || this.hasInteractiveContent()) return -1;\n\n return 0;\n });\n\n /** @docs-private */\n protected readonly placements = PopUpPlacements;\n\n /** @docs-private */\n protected readonly colors = KbqComponentColors;\n\n private initialValue: unknown;\n\n /** Value sent by the in-flight `saveHandler` request, which becomes `lastSavedValue` once it succeeds. */\n private submittedValue: unknown;\n\n /** Last value the server accepted — what `rollback()` restores after a failed save. */\n private lastSavedValue: unknown;\n\n private destroyed = false;\n\n /** Handle for an in-flight `showValidationTooltip()` scroll/settle request, if any. */\n private validationTooltipScrollHandle: { cancel: () => void } | null = null;\n\n constructor() {\n // The save outlives the row, so its outputs have to fall silent with the view they belong to.\n this.destroyRef.onDestroy(() => (this.destroyed = true));\n\n toObservable(this.mode)\n .pipe(skip(1), takeUntilDestroyed())\n .subscribe((currentMode) => this.modeChange.emit(currentMode));\n\n effect(() => {\n this.overlayOrigin = this.label() ? this.viewContainer().nativeElement : this.elementRef.nativeElement;\n });\n\n effect((onCleanup) => {\n const selectors = this.interactiveSelectors();\n\n const timeoutId = setTimeout(() => this.detectInteractiveContent(selectors));\n\n onCleanup(() => clearTimeout(timeoutId));\n });\n }\n\n /** Manually switch mode. Does nothing while a `saveHandler` request is in flight. */\n toggleMode(): void {\n if (this.isSaving()) return;\n\n this.mode.update((mode) => (mode === 'view' ? 'edit' : 'view'));\n }\n\n /**\n * Implements `KbqConnectedOverlayOriginProvider`, letting a nested `KbqFormField`'s control\n * anchor its overlay to this element instead of the form-field's own container.\n * When no override is needed, the form-field falls back to its default.\n * @docs-private\n */\n getConnectedOverlayOrigin(): ElementRef | undefined {\n return this.isSingleSelect() ? this.elementRef : undefined;\n }\n\n /** Saves the current value, running the same validation as a normal save. */\n commit(): void {\n this.save();\n }\n\n /** Repeats the request for a value the server rejected. Does nothing unless the last save failed. */\n retrySave(): void {\n const saveHandler = this.saveHandler();\n\n if (this.saveStatus() !== 'error' || !saveHandler) return;\n\n this.startSave(saveHandler());\n }\n\n /** Discards the value the server rejected, restoring the last saved one and closing the editor. */\n rollback(): void {\n if (this.saveStatus() !== 'error') return;\n\n this.setValue(this.lastSavedValue);\n this.initialValue = this.lastSavedValue;\n this.saveStatusSource.set('idle');\n\n if (this.isEditMode()) {\n this.toggleMode();\n }\n }\n\n /** @docs-private */\n protected onClick(event: Event): void {\n // Editing is closed while the request is in flight: reopening it would let the user edit a value that is\n // already on its way to the server.\n if (this.disabled() || this.isEditMode() || this.isSaving() || this.isInteractiveElement(event.target)) return;\n\n event.preventDefault();\n event.stopPropagation();\n\n this.toggleMode();\n }\n\n /** @docs-private */\n protected onAttach(): void {\n this.setOverlayWidth();\n this.setOverlayKeydownListener();\n\n this.overlayDir()!\n .overlayRef.detachments()\n .pipe(take(1))\n .subscribe(() => this.validationTooltipScrollHandle?.cancel());\n\n const formFieldRefList = this.formFieldRefList();\n\n merge(...formFieldRefList.map((ref) => ref.control().stateChanges))\n .pipe(takeUntil(this.overlayDir()!.overlayRef.detachments()))\n .subscribe(() => {\n if (!this.isInvalid()) {\n const tooltipTrigger = this.tooltipTrigger();\n\n if (tooltipTrigger?.isOpen) {\n tooltipTrigger.hide();\n }\n }\n });\n\n setTimeout(() => {\n // Captured before the form-field checks below: an editor built on `setValueHandler` alone has no\n // `KbqFormField`, and `cancel()` and `rollback()` still have to restore something other than undefined.\n this.initialValue = this.getValue();\n\n // Opening the editor over a value the server rejected must not turn that value into the one\n // `rollback()` restores.\n if (this.saveStatus() !== 'error') {\n this.lastSavedValue = this.initialValue;\n }\n\n const formFieldRef = this.formFieldRef();\n\n if (!formFieldRef) return;\n\n formFieldRef.focus();\n\n const input = this.getInputNativeElement();\n\n if (this.initialValue) input?.select();\n\n this.openPanel(formFieldRef);\n }, 0);\n }\n\n /** @docs-private */\n protected save($event?: Event): void {\n // Guards against a control triggering both its own commit() and the overlay's outside-click handler for the\n // same interaction — without this, the second call would toggle back into edit mode.\n if (!this.isEditMode()) return;\n\n if (this.isInvalid()) {\n $event?.stopPropagation();\n\n if (this.showTooltipOnError() && this.validationTooltip()) {\n this.showValidationTooltip();\n }\n\n return;\n }\n\n const saveHandler = this.saveHandler();\n\n // Nothing to send: the value is still the one the editor opened with. Only the request is skipped —\n // without a handler `saved` keeps meaning \"the user committed\".\n if (saveHandler && this.isUnchanged()) {\n this.toggleMode();\n\n return;\n }\n\n // Started before the mode switch: a handler that throws is a bug in the application, and folding that into\n // the save result would report it as the server's refusal.\n const request$ = saveHandler?.();\n\n // Client-side validation has passed, so editing is over either way: with a handler the request runs in the\n // background, and view mode reports how it went.\n this.toggleMode();\n\n if (request$) {\n this.startSave(request$);\n\n return;\n }\n\n this.saved.emit();\n }\n\n /** Runs `saveHandler` once and maps its lifecycle onto `saveStatus`, holding the progress state steady. */\n private startSave(request$: Observable<unknown>): void {\n this.submittedValue = this.getValue();\n this.saveStatusSource.set('pending');\n\n const success = { status: 'success' } as const;\n const result$ = request$.pipe(\n take(1),\n map(() => success),\n defaultIfEmpty(success),\n catchError((error: unknown) => of({ status: 'error', error } as const))\n );\n const progress$ = timer(kbqInlineEditSaveProgressDelay).pipe(map(() => ({ status: 'progress' }) as const));\n\n // Nothing cancels the request, destroying the row included: the value is already on its way to the\n // server. A new one can only be started from the failed state.\n merge(result$, progress$)\n .pipe(\n // Completes on the result, dropping the progress timer when the request settles first.\n takeWhile((result) => result.status === 'progress', true),\n // A result arriving while the progress state is shown is queued behind the minimum display time.\n concatMap((result) =>\n result.status === 'progress'\n ? concat(of(result), timer(kbqInlineEditSaveProgressMinimumDuration).pipe(ignoreElements()))\n : of(result)\n )\n )\n .subscribe((result) => {\n if (result.status === 'progress') {\n this.saveStatusSource.set('progress');\n\n return;\n }\n\n if (result.status === 'success') {\n this.onSaveSucceeded();\n } else {\n this.onSaveFailed(result.error);\n }\n });\n }\n\n private onSaveSucceeded(): void {\n this.lastSavedValue = this.submittedValue;\n this.saveStatusSource.set('idle');\n\n if (!this.destroyed) {\n this.saved.emit();\n }\n }\n\n private onSaveFailed(error: unknown): void {\n this.saveStatusSource.set('error');\n\n const context: KbqInlineEditSaveErrorContext = { error, inlineEdit: this };\n\n if (!this.destroyed) {\n this.saveError.emit(context);\n }\n\n this.saveErrorHandler()?.(context);\n }\n\n /**\n * Whether `overlayOrigin` is fully within the viewport and every registered `CdkScrollable`\n * ancestor between it and the viewport. Ancestors without the `CdkScrollable` directive aren't\n * visible to `ScrollDispatcher` and aren't checked — same limitation as the rest of overlay\n * positioning.\n */\n private isOverlayOriginFullyVisible(): boolean {\n const rect = this.overlayOrigin.getBoundingClientRect();\n\n const isWithin = (container: { top: number; left: number; bottom: number; right: number }): boolean =>\n rect.top >= container.top &&\n rect.left >= container.left &&\n rect.bottom <= container.bottom &&\n rect.right <= container.right;\n\n if (!isWithin({ top: 0, left: 0, bottom: this.window.innerHeight, right: this.window.innerWidth })) {\n return false;\n }\n\n return this.scrollDispatcher\n .getAncestorScrollContainers(this.overlayOrigin)\n .every((scrollable) => isWithin(scrollable.getElementRef().nativeElement.getBoundingClientRect()));\n }\n\n /**\n * Shows the validation tooltip, scrolling the invalid control into view first if it isn't fully visible.\n *\n * `scrollIntoView({ behavior: 'smooth' })` finishes asynchronously — for a long scroll distance it can take\n * a while — so showing the tooltip right away would anchor its overlay to a stale, pre-scroll position.\n * `scrollend` reports when the scroll actually completes; the timeout is a fallback for browsers without\n * `scrollend` support and cases where nothing ends up scrolling.\n *\n * TODO(DS-5420): \"scroll an element into view, then act once settled\" isn't inline-edit-specific — worth\n * extracting into `packages/components/core` in a follow-up. Kept local to this fix for now.\n */\n private showValidationTooltip(): void {\n // save() can fire repeatedly while the control stays invalid (Save button + onOverlayOutsideClick on\n // every outside click) — let an in-flight request finish rather than stacking a second scroll/listener/timer.\n if (this.validationTooltipScrollHandle) return;\n\n if (this.isOverlayOriginFullyVisible()) {\n this.ngZone.run(() => this.tooltipTrigger()?.show());\n\n return;\n }\n\n let shown = false;\n let timeoutId: ReturnType<typeof setTimeout> | null = null;\n\n const removeScrollEndListener = (): void =>\n this.window.removeEventListener('scrollend', onScrollEnd, { capture: true });\n\n const clearFallbackTimer = (): void => {\n if (timeoutId !== null) {\n clearTimeout(timeoutId);\n timeoutId = null;\n }\n };\n\n const onScrollEnd = (): void => {\n clearFallbackTimer();\n\n if (!shown) {\n shown = true;\n removeScrollEndListener();\n this.validationTooltipScrollHandle = null;\n this.ngZone.run(() => this.showValidationTooltipIfStillInvalid());\n\n return;\n }\n\n // Already shown via the fallback timeout at a stale position — this late scrollend corrects it\n // instead of re-showing (which would re-trigger the enter animation).\n removeScrollEndListener();\n this.validationTooltipScrollHandle = null;\n this.ngZone.run(() => {\n if (this.isInvalid() && this.tooltipTrigger()?.isOpen) {\n this.tooltipTrigger()?.updatePosition(true);\n }\n });\n };\n\n const onTimeout = (): void => {\n timeoutId = null;\n shown = true;\n this.validationTooltipScrollHandle = null;\n this.ngZone.run(() => this.showValidationTooltipIfStillInvalid());\n // Deliberately keep the scrollend listener alive: a late scrollend still corrects the stale\n // position via the branch above. Removed by cancel() or the next onScrollEnd call.\n };\n\n this.ngZone.runOutsideAngular(() => {\n this.window.addEventListener('scrollend', onScrollEnd, { capture: true });\n });\n\n timeoutId = setTimeout(onTimeout, VALIDATION_TOOLTIP_SCROLL_TIMEOUT);\n\n this.validationTooltipScrollHandle = {\n cancel: (): void => {\n removeScrollEndListener();\n clearFallbackTimer();\n this.validationTooltipScrollHandle = null;\n }\n };\n\n this.overlayOrigin.scrollIntoView({ block: 'center', inline: 'nearest', behavior: 'smooth' });\n }\n\n private showValidationTooltipIfStillInvalid(): void {\n if (!(this.isInvalid() && this.showTooltipOnError() && this.validationTooltip())) return;\n\n this.tooltipTrigger()?.show();\n }\n\n /** @docs-private */\n protected cancel(): void {\n this.setValue(this.initialValue);\n\n const input = this.getInputNativeElement();\n\n if (input) {\n input.selectionStart = input.selectionEnd = null;\n }\n\n this.toggleMode();\n this.canceled.emit();\n }\n\n /** @docs-private */\n protected onOverlayKeydown(event: KeyboardEvent): void {\n this.markAllAsTouched();\n const canSaveOnEnter = this.canSaveOnEnter();\n\n switch (event.key) {\n case 'Escape': {\n this.cancel();\n break;\n }\n case 'Enter': {\n if (canSaveOnEnter(event)) {\n event.preventDefault();\n this.markAllAsTouched();\n setTimeout(() => this.save(event));\n }\n\n break;\n }\n default: {\n return;\n }\n }\n }\n\n /**\n * Block propagation of overlay outside click.\n * Used to prevent reopening when target is inline edit itself.\n * @docs-private\n */\n protected onOverlayOutsideClick($event: Event) {\n if (isElement($event.target) && this.elementRef.nativeElement.contains($event.target)) {\n $event.preventDefault();\n $event.stopPropagation();\n }\n\n this.save($event);\n }\n\n private detectInteractiveContent(selectors: string[]): void {\n if (!selectors.length) {\n this.hasInteractiveContent.set(false);\n\n return;\n }\n\n const viewContent = this.viewContainer().nativeElement.querySelector('.kbq-inline-edit__view-content');\n\n this.hasInteractiveContent.set(!!viewContent?.querySelector(selectors.join(',')));\n }\n\n private isInteractiveElement(target: EventTarget | null): boolean {\n const selectors = this.interactiveSelectors();\n\n if (!selectors.length) return false;\n\n return isElement(target) && !!target.closest(selectors.join(','));\n }\n\n /**\n * Sets up Tab key listeners on region items.\n * Single item: Tab moves to next edit.\n * Multiple items: Shift+Tab on first or Tab on last moves to next edit.\n */\n private setOverlayKeydownListener(): void {\n const regionItems = this.regionItems();\n\n if (regionItems.length === 0) return;\n\n const firstItem = regionItems.at(0);\n const lastItem = regionItems.at(regionItems.length - 1);\n\n if (regionItems.length === 1) {\n firstItem?.tabOut.subscribe((event) => this.saveAndFocusNextInlineEdit(event));\n } else {\n firstItem?.tabOut.subscribe(\n (event) => hasModifierKey(event, 'shiftKey') && this.saveAndFocusNextInlineEdit(event)\n );\n\n lastItem?.tabOut.subscribe(\n (event) => !hasModifierKey(event, 'shiftKey') && this.saveAndFocusNextInlineEdit(event)\n );\n }\n }\n\n private saveAndFocusNextInlineEdit(event: Event): void {\n this.save(event);\n if (this.isInvalid()) return;\n\n setTimeout(() => {\n const activeElement = this.document.activeElement;\n\n if (activeElement?.classList?.contains('kbq-inline-edit')) {\n activeElement.dispatchEvent(new KeyboardEvent('keydown', { key: 'Enter' }));\n }\n });\n }\n\n /** Whether saving would send back the value the editor opened with. */\n private isUnchanged(): boolean {\n const compareWith = this.compareWith();\n\n // A failed save left the server on a different value, so the same one is still worth sending.\n if (!compareWith || this.saveStatus() === 'error') return false;\n\n const current = this.getValue();\n const initial = this.initialValue;\n\n // The default `getValue()` returns one entry per form field, so the comparator sees the control values\n // themselves rather than the array holding them.\n if (Array.isArray(current) && Array.isArray(initial)) {\n return (\n current.length === initial.length &&\n current.every((value, index) => runCompareWith(compareWith, value, initial[index]))\n );\n }\n\n return runCompareWith(compareWith, current, initial);\n }\n\n private isInvalid(): boolean {\n const formFieldRefList = this.formFieldRefList();\n\n if (!formFieldRefList.length) return false;\n\n return formFieldRefList.some((ref) => ref.invalid);\n }\n\n private getValue() {\n const getValueHandler = this.getValueHandler();\n\n if (getValueHandler) return getValueHandler();\n\n const formFieldRefList = this.formFieldRefList();\n\n if (!formFieldRefList.length) return;\n\n return this.formFieldRefList().map((ref) => this.coerceControl(ref)?.value);\n }\n\n private setValue<T>(value: T): void {\n const setValue = this.setValueHandler();\n\n if (setValue) {\n setValue(value);\n\n return;\n }\n\n const formFieldRefList = this.formFieldRefList();\n\n if (!formFieldRefList.length || !Array.isArray(value)) return;\n\n value.forEach((controlValue, index) => {\n const control = this.coerceControl(formFieldRefList[index]);\n\n if (!control) return;\n\n if (control instanceof AbstractControl) {\n control.setValue(controlValue);\n } else {\n control.value = controlValue;\n }\n });\n }\n\n private coerceControl(formFieldRef: KbqFormField) {\n const control = formFieldRef.control();\n\n if (control.ngControl instanceof NgControl) {\n return control.ngControl.control;\n }\n\n return control;\n }\n\n private setOverlayWidth(): void {\n const editModeWidth = this.editModeWidth();\n\n if (editModeWidth) {\n this.overlayWidth.set(editModeWidth);\n\n return;\n }\n\n const element: HTMLElement | null = this.label()\n ? this.elementRef.nativeElement.querySelector('.kbq-inline-edit__focus_container')\n : this.elementRef.nativeElement;\n\n if (element) {\n const overlayRef = this.overlayDir().overlayRef;\n\n this.resizeObserver\n .observe(element)\n .pipe(takeUntil(overlayRef.detachments()))\n .subscribe(() => {\n this.overlayWidth.set(element.offsetWidth);\n overlayRef.updatePosition();\n });\n }\n\n this.overlayWidth.set(element?.offsetWidth ?? '');\n }\n\n private openPanel(formFieldRef: KbqFormField) {\n const control = formFieldRef.control();\n\n control?.open?.();\n }\n\n private getInputNativeElement(): HTMLInputElement | HTMLTextAreaElement | null {\n return this.overlayDir()?.overlayRef.overlayElement.querySelector('input:not([type=\"file\"]),textarea') ?? null;\n }\n\n private markAllAsTouched(): void {\n this.formFieldRefList().forEach((formField) => formField.control().ngControl?.control?.markAsTouched());\n }\n}\n","<div class=\"kbq-inline-edit__focus_container\">\n <div class=\"cdk-visually-hidden\" role=\"status\" aria-live=\"polite\">{{ saveStatusMessage() }}</div>\n\n @if (label()) {\n <div class=\"kbq-inline-edit__label\">\n <ng-content select=\"kbq-label\" />\n </div>\n }\n\n <div #viewContainer class=\"kbq-inline-edit__view-container\">\n <div class=\"kbq-inline-edit__view-content\">\n <ng-content select=\"[kbqInlineEditViewMode]\" />\n </div>\n\n @if (hasInteractiveContent() && mode() === 'view' && !disabled()) {\n <div\n class=\"kbq-inline-edit__focus-anchor cdk-visually-hidden\"\n tabindex=\"0\"\n (focus)=\"anchorFocused.set(true)\"\n (blur)=\"anchorFocused.set(false)\"\n ></div>\n }\n\n @if (menu() && mode() === 'view') {\n <div class=\"kbq-inline-edit__menu-mask kbq-mask\">\n <div class=\"kbq-inline-edit__menu-mask-fade kbq-mask__fade\"></div>\n <div class=\"kbq-inline-edit__menu-mask-container kbq-mask__container\">\n <ng-content select=\"[kbqInlineEditMenu]\" />\n </div>\n </div>\n }\n\n <ng-template\n cdkConnectedOverlay\n cdkConnectedOverlayLockPosition\n [cdkConnectedOverlayOpen]=\"isEditMode()\"\n [cdkConnectedOverlayOrigin]=\"overlayOrigin\"\n [cdkConnectedOverlayOffsetY]=\"-overlayOrigin.offsetHeight\"\n [cdkConnectedOverlayWidth]=\"overlayWidth()\"\n [cdkConnectedOverlayDisableClose]=\"true\"\n [cdkConnectedOverlayScrollStrategy]=\"scrollStrategy()\"\n [cdkConnectedOverlayPanelClass]=\"overlayPanelClass()\"\n [cdkConnectedOverlayHasBackdrop]=\"false\"\n (attach)=\"onAttach()\"\n (overlayOutsideClick)=\"onOverlayOutsideClick($event)\"\n (overlayKeydown)=\"onOverlayKeydown($event)\"\n >\n <div class=\"cdk-visually-hidden\" aria-hidden=\"true\" kbqFocusRegionItem tabindex=\"0\"></div>\n <div\n class=\"kbq-inline-edit__panel\"\n cdkTrapFocusAutoCapture\n [class.kbq-inline-edit__panel_select]=\"isSingleSelect()\"\n [cdkTrapFocus]=\"false\"\n >\n <div\n class=\"kbq-inline-edit__control-container\"\n [kbqTooltipColor]=\"colors.Error\"\n [kbqTooltip]=\"validationTooltip() ?? ''\"\n [kbqTooltipDisabled]=\"!validationTooltip()\"\n [kbqTooltipArrow]=\"false\"\n [kbqTrigger]=\"'manual'\"\n [kbqPlacement]=\"tooltipPlacement() ?? placements.TopLeft\"\n [kbqTooltipScrollStrategy]=\"validationTooltipScrollStrategy\"\n >\n <ng-content select=\"[kbqInlineEditEditMode]\" />\n </div>\n\n @if (showActions()) {\n <div class=\"kbq-inline-edit__action-buttons\" role=\"group\" [@panelAnimation]>\n <div class=\"kbq-inline-edit__action-button\">\n <button kbq-button [color]=\"'contrast'\" (click)=\"save($event)\">\n <i kbq-icon=\"kbq-check_16\"></i>\n </button>\n </div>\n\n <div class=\"kbq-inline-edit__action-button\">\n <button kbq-button [color]=\"'contrast-fade'\" (click)=\"cancel()\">\n <i kbq-icon=\"kbq-xmark_16\"></i>\n </button>\n </div>\n </div>\n }\n </div>\n <div class=\"cdk-visually-hidden\" aria-hidden=\"true\" kbqFocusRegionItem tabindex=\"0\"></div>\n </ng-template>\n </div>\n</div>\n","import { NgModule } from '@angular/core';\nimport { KbqInlineEdit, KbqInlineEditMenu, KbqInlineEditPlaceholder } from './inline-edit';\n\nconst COMPONENTS = [\n KbqInlineEdit,\n KbqInlineEditPlaceholder,\n KbqInlineEditMenu\n];\n\n@NgModule({\n imports: COMPONENTS,\n exports: COMPONENTS\n})\nexport class KbqInlineEditModule {}\n","/**\n * Generated bundle index. Do not edit.\n */\n\nexport * from './index';\n"],"names":[],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"koobiq-components-inline-edit.mjs","sources":["../../../packages/components/inline-edit/inline-edit.ts","../../../packages/components/inline-edit/inline-edit.html","../../../packages/components/inline-edit/module.ts","../../../packages/components/inline-edit/koobiq-components-inline-edit.ts"],"sourcesContent":["import { animate, style, transition, trigger } from '@angular/animations';\nimport { CdkMonitorFocus, CdkTrapFocus } from '@angular/cdk/a11y';\nimport { hasModifierKey } from '@angular/cdk/keycodes';\nimport { SharedResizeObserver } from '@angular/cdk/observers/private';\nimport {\n CdkConnectedOverlay,\n ConnectedPosition,\n Overlay,\n ScrollDispatcher,\n ScrollStrategy\n} from '@angular/cdk/overlay';\nimport { DOCUMENT } from '@angular/common';\nimport {\n booleanAttribute,\n ChangeDetectionStrategy,\n Component,\n computed,\n contentChild,\n contentChildren,\n DestroyRef,\n Directive,\n effect,\n ElementRef,\n forwardRef,\n inject,\n InjectionToken,\n input,\n NgZone,\n numberAttribute,\n output,\n signal,\n TemplateRef,\n viewChild,\n viewChildren,\n ViewEncapsulation\n} from '@angular/core';\nimport { takeUntilDestroyed, toObservable } from '@angular/core/rxjs-interop';\nimport { AbstractControl, NgControl } from '@angular/forms';\nimport { KbqButtonModule } from '@koobiq/components/button';\nimport {\n isElement,\n KBQ_CONNECTED_OVERLAY_ORIGIN,\n KBQ_WINDOW,\n KbqAnimationCurves,\n KbqAnimationDurations,\n KbqComponentColors,\n KbqConnectedOverlayOriginProvider,\n kbqInjectA11yLocaleConfiguration,\n PopUpPlacements,\n runCompareWith\n} from '@koobiq/components/core';\nimport { KbqDropdownTrigger } from '@koobiq/components/dropdown';\nimport { KbqFormField, KbqLabel } from '@koobiq/components/form-field';\nimport { KbqIcon } from '@koobiq/components/icon';\nimport { KbqSelect } from '@koobiq/components/select';\nimport { KbqTooltipTrigger } from '@koobiq/components/tooltip';\nimport { concat, merge, Observable, of, skip, timer } from 'rxjs';\nimport { catchError, concatMap, defaultIfEmpty, ignoreElements, map, take, takeUntil, takeWhile } from 'rxjs/operators';\n\nconst KBQ_INLINE_EDIT_ACTION_BUTTONS_ANIMATION = trigger('panelAnimation', [\n transition(':enter', [\n style({ transform: 'translateY(100%)', opacity: 0 }),\n animate(\n `${KbqAnimationDurations.Instant} ${KbqAnimationCurves.DecelerationCurve}`,\n style({ transform: 'translateY(0%)', opacity: 1 })\n )\n ])\n]);\n\nconst baseClass = 'kbq-inline-edit';\n\n/**\n * Positions the edit mode panel so that it covers the view mode element. A single position is used instead of the\n * default fallback set, because the panel must stay anchored to the origin even when it does not fit in the viewport.\n */\nconst KBQ_INLINE_EDIT_CONNECTED_POSITION: ConnectedPosition = {\n originX: 'start',\n originY: 'bottom',\n overlayX: 'start',\n overlayY: 'top'\n};\n\n/**\n * Fallback delay before showing the validation tooltip if `scrollend` never fires — e.g. the browser doesn't\n * support it, or nothing needed to scroll.\n */\nconst VALIDATION_TOOLTIP_SCROLL_TIMEOUT = 800;\n\n/** Controls in edit mode that Enter activates on their own, so the default `canSaveOnEnter` leaves them alone. */\nconst ENTER_ACTIVATED_SELECTORS =\n 'button,input[type=\"button\"],input[type=\"submit\"],input[type=\"reset\"],[role=\"button\"]';\n\n/** Delay before the save progress state appears, so a fast response causes no flicker. */\nexport const kbqInlineEditSaveProgressDelay = 100;\n\n/** Minimum time the save progress state stays once it has appeared. */\nexport const kbqInlineEditSaveProgressMinimumDuration = 300;\n\nexport type KbqInlineEditMode = 'view' | 'edit';\n\n/**\n * Saves the edited value, e.g. sends it to a server. Only the first emission counts, and the observable must emit\n * or complete: destroying the row does not cancel it, so one that never settles keeps the row in memory.\n *\n * Called without a receiver, so bind an arrow function rather than a method that relies on `this`.\n */\nexport type KbqInlineEditSaveHandler = () => Observable<unknown>;\n\n/** State of the save request started by `saveHandler`. `progress` is `pending` past the indicator delay. */\nexport type KbqInlineEditSaveStatus = 'idle' | 'pending' | 'progress' | 'error';\n\n/** Recovery a failed-save notification can offer: retry, edit again, discard the unsaved value. */\nexport interface KbqInlineEditSaveRecovery {\n retrySave(): void;\n toggleMode(): void;\n rollback(): void;\n}\n\n/** Failed save, reported through `saveError` and `KBQ_INLINE_EDIT_SAVE_ERROR_HANDLER`. */\nexport interface KbqInlineEditSaveErrorContext<E = any> {\n /** Parameterise the interface to type this. */\n readonly error: E;\n /** Inline edit whose save failed. */\n readonly inlineEdit: KbqInlineEditSaveRecovery;\n}\n\n/** Reaction to a failed save, e.g. opening a toast. */\nexport type KbqInlineEditSaveErrorHandler = (context: KbqInlineEditSaveErrorContext) => void;\n\n/** Reports every failed save the same way across the application. Declare it in the root injector. */\nexport const KBQ_INLINE_EDIT_SAVE_ERROR_HANDLER = new InjectionToken<KbqInlineEditSaveErrorHandler>(\n 'KbqInlineEditSaveErrorHandler'\n);\n\n/** @docs-private */\n@Directive({\n selector: '[kbqFocusRegionItem]',\n host: {\n '(focusin)': 'isFocused = true',\n '(keydown.tab)': 'onTabOut($event)',\n '(keydown.shift.tab)': 'onTabOut($event)'\n },\n exportAs: 'kbqFocusRegionItem'\n})\nexport class KbqFocusRegionItem {\n readonly tabOut = output<KeyboardEvent>();\n\n protected isFocused = false;\n\n protected onTabOut(event: KeyboardEvent) {\n if (this.isFocused) {\n this.tabOut.emit(event);\n }\n\n this.isFocused = !this.isFocused;\n }\n}\n\n/** Directive for easy using styles of inline edit placeholder publicly. */\n@Directive({\n selector: '[kbqInlineEditPlaceholder]',\n host: {\n class: 'kbq-inline-edit__placeholder'\n },\n exportAs: 'kbqInlineEditPlaceholder'\n})\nexport class KbqInlineEditPlaceholder {}\n\n/**\n * This directive enhances element acting as dropdown trigger,\n * visually indicating the active state with the `kbq-active` class.\n * Also, it prevents click/keydown events from being propagated to disable mode toggling of parent component.\n */\n@Directive({\n selector: '[kbqInlineEditMenu]',\n host: {\n role: 'button',\n class: 'kbq-inline-edit__menu',\n '[class.kbq-active]': 'dropdownTrigger?.opened',\n '(click)': '$event.stopPropagation()',\n '(keydown.enter)': '$event.stopPropagation()',\n '(keydown.space)': '$event.stopPropagation()'\n },\n exportAs: 'kbqInlineEditMenu'\n})\nexport class KbqInlineEditMenu {\n /** @docs-private */\n protected readonly dropdownTrigger = inject(KbqDropdownTrigger, { optional: true });\n}\n\n/**\n * Customizable component that enables edit-in-place logic for specified control and it's view.\n * This component is projecting edit/view mode templates and adds keyboard/pointer handlers.\n * Edit mode opens in a positioned overlay that matches the view mode width or can be customized.\n */\n@Component({\n selector: 'kbq-inline-edit',\n imports: [\n CdkConnectedOverlay,\n KbqButtonModule,\n KbqIcon,\n KbqTooltipTrigger,\n KbqFocusRegionItem,\n CdkTrapFocus\n ],\n templateUrl: './inline-edit.html',\n styleUrls: ['./inline-edit.scss', './inline-edit-tokens.scss'],\n providers: [{ provide: KBQ_CONNECTED_OVERLAY_ORIGIN, useExisting: forwardRef(() => KbqInlineEdit) }],\n changeDetection: ChangeDetectionStrategy.OnPush,\n encapsulation: ViewEncapsulation.None,\n host: {\n class: baseClass,\n '[attr.tabindex]': 'tabIndex()',\n '[class]': 'className()',\n '[class.kbq-inline-edit_with-label]': '!!label()',\n '[class.kbq-inline-edit_with-menu]': '!!menu()',\n '[class.kbq-inline-edit_disabled]': 'disabled()',\n '[class.kbq-inline-edit_anchor-focused]': 'anchorFocused()',\n '[class.kbq-inline-edit_select]': 'isSingleSelect()',\n '[class.kbq-inline-edit_save-error]': 'saveStatus() === \"error\"',\n // The background save is reported on the row itself, which by then is back in view mode.\n '[class.kbq-progress]': 'saveStatus() === \"progress\"',\n '(click)': 'onClick($event)',\n '(keydown.enter)': 'onClick($event)',\n '(keydown.space)': 'onClick($event)'\n },\n hostDirectives: [CdkMonitorFocus],\n animations: [KBQ_INLINE_EDIT_ACTION_BUTTONS_ANIMATION],\n exportAs: 'kbqInlineEdit'\n})\nexport class KbqInlineEdit implements KbqConnectedOverlayOriginProvider, KbqInlineEditSaveRecovery {\n /** Texts of the save status announcements. */\n protected readonly a11yLocaleConfiguration = kbqInjectA11yLocaleConfiguration();\n\n private readonly overlay = inject(Overlay);\n private readonly document = inject(DOCUMENT);\n private readonly window = inject(KBQ_WINDOW);\n private readonly resizeObserver = inject(SharedResizeObserver);\n protected readonly elementRef = inject<ElementRef<HTMLElement>>(ElementRef);\n private readonly ngZone = inject(NgZone);\n private readonly scrollDispatcher = inject(ScrollDispatcher);\n private readonly destroyRef = inject(DestroyRef);\n\n /**\n * The validation tooltip is anchored inside the edit-mode overlay — an overlay inside another\n * overlay. Its default `close()` scroll strategy would close it the moment either overlay's\n * origin scrolls (including the programmatic scroll `showValidationTooltip()` uses to bring an\n * invalid control into view), so it's overridden to `reposition()` here — passed directly as a\n * per-instance override to this tooltip's `[kbqTooltipScrollStrategy]` input, rather than a DI\n * override, so it doesn't leak into any `kbqTooltip` in projected content.\n * @docs-private\n */\n protected readonly validationTooltipScrollStrategy = (): ScrollStrategy =>\n this.overlay.scrollStrategies.reposition();\n\n /**\n * Whether to show save/cancel action buttons in edit mode.\n * @default false\n */\n readonly showActions = input(false, { transform: booleanAttribute });\n /**\n * Whether to automatically show validation error tooltips on save attempts.\n * @default true\n */\n readonly showTooltipOnError = input(true, { transform: booleanAttribute });\n /** Custom validation tooltip message. */\n readonly validationTooltip = input<string | TemplateRef<any>>();\n /**\n * Disables the component, preventing interaction and mode switching. Only allows menu dropdown.\n * @default false\n */\n readonly disabled = input(false, { transform: booleanAttribute });\n /** Custom width in pixels for the edit mode overlay. Auto-calculated if not set. */\n readonly editModeWidth = input(undefined, { transform: numberAttribute });\n /** User-defined tooltip placement */\n readonly tooltipPlacement = input<PopUpPlacements>();\n /** Classes to be passed to the inline edit panel. */\n readonly overlayPanelClass = input<string | string[]>('');\n /** Handler function to retrieve the current value */\n readonly getValueHandler = input<() => unknown>();\n /** Handler function to update the value */\n readonly setValueHandler = input<(value: any) => void>();\n /**\n * Whether the value still equals the one the editor opened with, in which case `saveHandler` is not called.\n * The default suits text and numbers; bind your own for arrays and objects, or `null` to send every time.\n * A failed save is always retried, however the values compare.\n */\n readonly compareWith = input<((a: any, b: any) => boolean) | null>((a, b) => a === b);\n /**\n * Saves a valid value in the background: edit mode closes right away and view mode reports how the request\n * went. Without it, a valid value is saved immediately.\n */\n readonly saveHandler = input<KbqInlineEditSaveHandler>();\n /**\n * Reaction to a failed save for this inline edit alone. Defaults to `KBQ_INLINE_EDIT_SAVE_ERROR_HANDLER`;\n * bind `null` to leave it without one.\n */\n readonly saveErrorHandler = input<KbqInlineEditSaveErrorHandler | null>(\n inject(KBQ_INLINE_EDIT_SAVE_ERROR_HANDLER, { optional: true })\n );\n /** Customizable function that checks if saving on enter available. */\n readonly canSaveOnEnter = input((event: KeyboardEvent): boolean => {\n // A control that runs its own action on Enter would otherwise fire it and save at the same time.\n if (isElement(event.target) && event.target.closest(ENTER_ACTIVATED_SELECTORS)) return false;\n\n return hasModifierKey(event, 'ctrlKey', 'metaKey') || !(event.target instanceof HTMLTextAreaElement);\n });\n\n /**\n * CSS selectors for elements in view mode that should handle clicks instead of opening edit mode.\n * Override to replace or extend the default list.\n *\n * @example\n * `<kbq-inline-edit [interactiveSelectors]=\"['a', 'kbq-tag', 'button']\">`\n */\n readonly interactiveSelectors = input<string[]>(['a', 'kbq-tag']);\n\n /** Emitted when the inline edit is saved successfully. */\n protected readonly saved = output();\n /** Emitted when the inline edit is canceled and changes are discarded. */\n protected readonly canceled = output();\n /** Emitted when a `saveHandler` request fails. Silent once the row is destroyed; `saveErrorHandler` is not. */\n protected readonly saveError = output<KbqInlineEditSaveErrorContext>();\n /** Emitted when mode switched to edit/view */\n protected readonly modeChange = output<KbqInlineEditMode>();\n\n /** @docs-private */\n protected readonly menu = contentChild(KbqInlineEditMenu);\n /** @docs-private */\n protected readonly label = contentChild(KbqLabel);\n\n /** @docs-private */\n protected readonly formFieldRef = computed<KbqFormField | undefined>(() => this.formFieldRefList()[0]);\n /** @docs-private */\n protected readonly formFieldRefList = contentChildren(KbqFormField, { descendants: true });\n\n /** @docs-private */\n protected readonly selectRef = contentChild(KbqSelect, { descendants: true });\n /**\n * Whether edit mode contains a single-value select. When true, edit mode shows only the\n * dropdown panel instead of a bordered field - see the \"Select-style editor\" example.\n * @docs-private\n */\n protected readonly isSingleSelect = computed(() => {\n const select = this.selectRef();\n\n return !!select && !select.multiple && !select.multiline();\n });\n\n /** @docs-private */\n protected overlayOrigin: HTMLElement = this.elementRef.nativeElement;\n /** @docs-private */\n protected readonly tooltipTrigger = viewChild.required(KbqTooltipTrigger);\n /** @docs-private */\n protected readonly viewContainer = viewChild.required<ElementRef<HTMLElement>>('viewContainer');\n /** @docs-private */\n protected readonly overlayDir = viewChild.required(CdkConnectedOverlay);\n /** @docs-private */\n protected readonly regionItems = viewChildren(KbqFocusRegionItem);\n\n /** @docs-private */\n protected readonly mode = signal<KbqInlineEditMode>('view');\n /** @docs-private */\n protected readonly overlayWidth = signal<number | string>('');\n\n /**\n * Single overlay position that keeps the panel anchored to the view mode element. Fallback positions are\n * intentionally omitted so the panel does not flip or get pushed away from the origin when space is tight.\n *\n * @docs-private\n */\n protected readonly overlayPositions: ConnectedPosition[] = [KBQ_INLINE_EDIT_CONNECTED_POSITION];\n\n /** @docs-private */\n protected readonly scrollStrategy = signal<ScrollStrategy>(this.overlay.scrollStrategies.reposition());\n /** @docs-private */\n readonly modeAsReadonly = computed(() => this.mode());\n\n private readonly saveStatusSource = signal<KbqInlineEditSaveStatus>('idle');\n /** State of the background save started by `saveHandler`. */\n readonly saveStatus = this.saveStatusSource.asReadonly();\n /** @docs-private */\n protected readonly isSaving = computed(() => this.saveStatus() === 'pending' || this.saveStatus() === 'progress');\n /**\n * Both save states are otherwise conveyed by colour alone. `aria-busy` cannot carry the first one: it is set\n * on the row, which contains this region, and that tells assistive tech to hold the announcement back.\n * @docs-private\n */\n protected readonly saveStatusMessage = computed(() => {\n const a11y = this.a11yLocaleConfiguration();\n\n if (this.saveStatus() === 'progress') return a11y.saving;\n\n return this.saveStatus() === 'error' ? a11y.saveFailed : '';\n });\n\n /** @docs-private */\n protected readonly className = computed(() => `${baseClass}_${this.mode()}`);\n /** @docs-private */\n protected readonly isEditMode = computed(() => this.mode() === 'edit');\n /** @docs-private */\n protected readonly hasInteractiveContent = signal(false);\n /** @docs-private */\n protected readonly anchorFocused = signal(false);\n /** @docs-private */\n protected readonly tabIndex = computed(() => {\n // Saving is deliberately absent: like `kbq-dropdown-item`, a row in progress keeps its place in the tab\n // order and only has its action blocked — leaving the tab order is what `disabled` means.\n if (this.isEditMode() || this.disabled() || this.hasInteractiveContent()) return -1;\n\n return 0;\n });\n\n /** @docs-private */\n protected readonly placements = PopUpPlacements;\n\n /** @docs-private */\n protected readonly colors = KbqComponentColors;\n\n private initialValue: unknown;\n\n /** Value sent by the in-flight `saveHandler` request, which becomes `lastSavedValue` once it succeeds. */\n private submittedValue: unknown;\n\n /** Last value the server accepted — what `rollback()` restores after a failed save. */\n private lastSavedValue: unknown;\n\n private destroyed = false;\n\n /** Handle for an in-flight `showValidationTooltip()` scroll/settle request, if any. */\n private validationTooltipScrollHandle: { cancel: () => void } | null = null;\n\n constructor() {\n // The save outlives the row, so its outputs have to fall silent with the view they belong to.\n this.destroyRef.onDestroy(() => (this.destroyed = true));\n\n toObservable(this.mode)\n .pipe(skip(1), takeUntilDestroyed())\n .subscribe((currentMode) => this.modeChange.emit(currentMode));\n\n effect(() => {\n this.overlayOrigin = this.label() ? this.viewContainer().nativeElement : this.elementRef.nativeElement;\n });\n\n effect((onCleanup) => {\n const selectors = this.interactiveSelectors();\n\n const timeoutId = setTimeout(() => this.detectInteractiveContent(selectors));\n\n onCleanup(() => clearTimeout(timeoutId));\n });\n }\n\n /** Manually switch mode. Does nothing while a `saveHandler` request is in flight. */\n toggleMode(): void {\n if (this.isSaving()) return;\n\n this.mode.update((mode) => (mode === 'view' ? 'edit' : 'view'));\n }\n\n /**\n * Implements `KbqConnectedOverlayOriginProvider`, letting a nested `KbqFormField`'s control\n * anchor its overlay to this element instead of the form-field's own container.\n * When no override is needed, the form-field falls back to its default.\n * @docs-private\n */\n getConnectedOverlayOrigin(): ElementRef | undefined {\n return this.isSingleSelect() ? this.elementRef : undefined;\n }\n\n /** Saves the current value, running the same validation as a normal save. */\n commit(): void {\n this.save();\n }\n\n /** Repeats the request for a value the server rejected. Does nothing unless the last save failed. */\n retrySave(): void {\n const saveHandler = this.saveHandler();\n\n if (this.saveStatus() !== 'error' || !saveHandler) return;\n\n this.startSave(saveHandler());\n }\n\n /** Discards the value the server rejected, restoring the last saved one and closing the editor. */\n rollback(): void {\n if (this.saveStatus() !== 'error') return;\n\n this.setValue(this.lastSavedValue);\n this.initialValue = this.lastSavedValue;\n this.saveStatusSource.set('idle');\n\n if (this.isEditMode()) {\n this.toggleMode();\n }\n }\n\n /** @docs-private */\n protected onClick(event: Event): void {\n // Editing is closed while the request is in flight: reopening it would let the user edit a value that is\n // already on its way to the server.\n if (this.disabled() || this.isEditMode() || this.isSaving() || this.isInteractiveElement(event.target)) return;\n\n event.preventDefault();\n event.stopPropagation();\n\n this.toggleMode();\n }\n\n /** @docs-private */\n protected onAttach(): void {\n this.setOverlayWidth();\n this.setOverlayKeydownListener();\n\n this.overlayDir()!\n .overlayRef.detachments()\n .pipe(take(1))\n .subscribe(() => this.validationTooltipScrollHandle?.cancel());\n\n const formFieldRefList = this.formFieldRefList();\n\n merge(...formFieldRefList.map((ref) => ref.control().stateChanges))\n .pipe(takeUntil(this.overlayDir()!.overlayRef.detachments()))\n .subscribe(() => {\n if (!this.isInvalid()) {\n const tooltipTrigger = this.tooltipTrigger();\n\n if (tooltipTrigger?.isOpen) {\n tooltipTrigger.hide();\n }\n }\n });\n\n setTimeout(() => {\n // Captured before the form-field checks below: an editor built on `setValueHandler` alone has no\n // `KbqFormField`, and `cancel()` and `rollback()` still have to restore something other than undefined.\n this.initialValue = this.getValue();\n\n // Opening the editor over a value the server rejected must not turn that value into the one\n // `rollback()` restores.\n if (this.saveStatus() !== 'error') {\n this.lastSavedValue = this.initialValue;\n }\n\n const formFieldRef = this.formFieldRef();\n\n if (!formFieldRef) return;\n\n formFieldRef.focus();\n\n const input = this.getInputNativeElement();\n\n if (this.initialValue) input?.select();\n\n this.openPanel(formFieldRef);\n }, 0);\n }\n\n /** @docs-private */\n protected save($event?: Event): void {\n // Guards against a control triggering both its own commit() and the overlay's outside-click handler for the\n // same interaction — without this, the second call would toggle back into edit mode.\n if (!this.isEditMode()) return;\n\n if (this.isInvalid()) {\n $event?.stopPropagation();\n\n if (this.showTooltipOnError() && this.validationTooltip()) {\n this.showValidationTooltip();\n }\n\n return;\n }\n\n const saveHandler = this.saveHandler();\n\n // Nothing to send: the value is still the one the editor opened with. Only the request is skipped —\n // without a handler `saved` keeps meaning \"the user committed\".\n if (saveHandler && this.isUnchanged()) {\n this.toggleMode();\n\n return;\n }\n\n // Started before the mode switch: a handler that throws is a bug in the application, and folding that into\n // the save result would report it as the server's refusal.\n const request$ = saveHandler?.();\n\n // Client-side validation has passed, so editing is over either way: with a handler the request runs in the\n // background, and view mode reports how it went.\n this.toggleMode();\n\n if (request$) {\n this.startSave(request$);\n\n return;\n }\n\n this.saved.emit();\n }\n\n /** Runs `saveHandler` once and maps its lifecycle onto `saveStatus`, holding the progress state steady. */\n private startSave(request$: Observable<unknown>): void {\n this.submittedValue = this.getValue();\n this.saveStatusSource.set('pending');\n\n const success = { status: 'success' } as const;\n const result$ = request$.pipe(\n take(1),\n map(() => success),\n defaultIfEmpty(success),\n catchError((error: unknown) => of({ status: 'error', error } as const))\n );\n const progress$ = timer(kbqInlineEditSaveProgressDelay).pipe(map(() => ({ status: 'progress' }) as const));\n\n // Nothing cancels the request, destroying the row included: the value is already on its way to the\n // server. A new one can only be started from the failed state.\n merge(result$, progress$)\n .pipe(\n // Completes on the result, dropping the progress timer when the request settles first.\n takeWhile((result) => result.status === 'progress', true),\n // A result arriving while the progress state is shown is queued behind the minimum display time.\n concatMap((result) =>\n result.status === 'progress'\n ? concat(of(result), timer(kbqInlineEditSaveProgressMinimumDuration).pipe(ignoreElements()))\n : of(result)\n )\n )\n .subscribe((result) => {\n if (result.status === 'progress') {\n this.saveStatusSource.set('progress');\n\n return;\n }\n\n if (result.status === 'success') {\n this.onSaveSucceeded();\n } else {\n this.onSaveFailed(result.error);\n }\n });\n }\n\n private onSaveSucceeded(): void {\n this.lastSavedValue = this.submittedValue;\n this.saveStatusSource.set('idle');\n\n if (!this.destroyed) {\n this.saved.emit();\n }\n }\n\n private onSaveFailed(error: unknown): void {\n this.saveStatusSource.set('error');\n\n const context: KbqInlineEditSaveErrorContext = { error, inlineEdit: this };\n\n if (!this.destroyed) {\n this.saveError.emit(context);\n }\n\n this.saveErrorHandler()?.(context);\n }\n\n /**\n * Whether `overlayOrigin` is fully within the viewport and every registered `CdkScrollable`\n * ancestor between it and the viewport. Ancestors without the `CdkScrollable` directive aren't\n * visible to `ScrollDispatcher` and aren't checked — same limitation as the rest of overlay\n * positioning.\n */\n private isOverlayOriginFullyVisible(): boolean {\n const rect = this.overlayOrigin.getBoundingClientRect();\n\n const isWithin = (container: { top: number; left: number; bottom: number; right: number }): boolean =>\n rect.top >= container.top &&\n rect.left >= container.left &&\n rect.bottom <= container.bottom &&\n rect.right <= container.right;\n\n if (!isWithin({ top: 0, left: 0, bottom: this.window.innerHeight, right: this.window.innerWidth })) {\n return false;\n }\n\n return this.scrollDispatcher\n .getAncestorScrollContainers(this.overlayOrigin)\n .every((scrollable) => isWithin(scrollable.getElementRef().nativeElement.getBoundingClientRect()));\n }\n\n /**\n * Shows the validation tooltip, scrolling the invalid control into view first if it isn't fully visible.\n *\n * `scrollIntoView({ behavior: 'smooth' })` finishes asynchronously — for a long scroll distance it can take\n * a while — so showing the tooltip right away would anchor its overlay to a stale, pre-scroll position.\n * `scrollend` reports when the scroll actually completes; the timeout is a fallback for browsers without\n * `scrollend` support and cases where nothing ends up scrolling.\n *\n * TODO(DS-5420): \"scroll an element into view, then act once settled\" isn't inline-edit-specific — worth\n * extracting into `packages/components/core` in a follow-up. Kept local to this fix for now.\n */\n private showValidationTooltip(): void {\n // save() can fire repeatedly while the control stays invalid (Save button + onOverlayOutsideClick on\n // every outside click) — let an in-flight request finish rather than stacking a second scroll/listener/timer.\n if (this.validationTooltipScrollHandle) return;\n\n if (this.isOverlayOriginFullyVisible()) {\n this.ngZone.run(() => this.tooltipTrigger()?.show());\n\n return;\n }\n\n let shown = false;\n let timeoutId: ReturnType<typeof setTimeout> | null = null;\n\n const removeScrollEndListener = (): void =>\n this.window.removeEventListener('scrollend', onScrollEnd, { capture: true });\n\n const clearFallbackTimer = (): void => {\n if (timeoutId !== null) {\n clearTimeout(timeoutId);\n timeoutId = null;\n }\n };\n\n const onScrollEnd = (): void => {\n clearFallbackTimer();\n\n if (!shown) {\n shown = true;\n removeScrollEndListener();\n this.validationTooltipScrollHandle = null;\n this.ngZone.run(() => this.showValidationTooltipIfStillInvalid());\n\n return;\n }\n\n // Already shown via the fallback timeout at a stale position — this late scrollend corrects it\n // instead of re-showing (which would re-trigger the enter animation).\n removeScrollEndListener();\n this.validationTooltipScrollHandle = null;\n this.ngZone.run(() => {\n if (this.isInvalid() && this.tooltipTrigger()?.isOpen) {\n this.tooltipTrigger()?.updatePosition(true);\n }\n });\n };\n\n const onTimeout = (): void => {\n timeoutId = null;\n shown = true;\n this.validationTooltipScrollHandle = null;\n this.ngZone.run(() => this.showValidationTooltipIfStillInvalid());\n // Deliberately keep the scrollend listener alive: a late scrollend still corrects the stale\n // position via the branch above. Removed by cancel() or the next onScrollEnd call.\n };\n\n this.ngZone.runOutsideAngular(() => {\n this.window.addEventListener('scrollend', onScrollEnd, { capture: true });\n });\n\n timeoutId = setTimeout(onTimeout, VALIDATION_TOOLTIP_SCROLL_TIMEOUT);\n\n this.validationTooltipScrollHandle = {\n cancel: (): void => {\n removeScrollEndListener();\n clearFallbackTimer();\n this.validationTooltipScrollHandle = null;\n }\n };\n\n this.overlayOrigin.scrollIntoView({ block: 'center', inline: 'nearest', behavior: 'smooth' });\n }\n\n private showValidationTooltipIfStillInvalid(): void {\n if (!(this.isInvalid() && this.showTooltipOnError() && this.validationTooltip())) return;\n\n this.tooltipTrigger()?.show();\n }\n\n /** @docs-private */\n protected cancel(): void {\n this.setValue(this.initialValue);\n\n const input = this.getInputNativeElement();\n\n if (input) {\n input.selectionStart = input.selectionEnd = null;\n }\n\n this.toggleMode();\n this.canceled.emit();\n }\n\n /** @docs-private */\n protected onOverlayKeydown(event: KeyboardEvent): void {\n this.markAllAsTouched();\n const canSaveOnEnter = this.canSaveOnEnter();\n\n switch (event.key) {\n case 'Escape': {\n this.cancel();\n break;\n }\n case 'Enter': {\n if (canSaveOnEnter(event)) {\n event.preventDefault();\n this.markAllAsTouched();\n setTimeout(() => this.save(event));\n }\n\n break;\n }\n default: {\n return;\n }\n }\n }\n\n /**\n * Block propagation of overlay outside click.\n * Used to prevent reopening when target is inline edit itself.\n * @docs-private\n */\n protected onOverlayOutsideClick($event: Event) {\n if (isElement($event.target) && this.elementRef.nativeElement.contains($event.target)) {\n $event.preventDefault();\n $event.stopPropagation();\n }\n\n this.save($event);\n }\n\n private detectInteractiveContent(selectors: string[]): void {\n if (!selectors.length) {\n this.hasInteractiveContent.set(false);\n\n return;\n }\n\n const viewContent = this.viewContainer().nativeElement.querySelector('.kbq-inline-edit__view-content');\n\n this.hasInteractiveContent.set(!!viewContent?.querySelector(selectors.join(',')));\n }\n\n private isInteractiveElement(target: EventTarget | null): boolean {\n const selectors = this.interactiveSelectors();\n\n if (!selectors.length) return false;\n\n return isElement(target) && !!target.closest(selectors.join(','));\n }\n\n /**\n * Sets up Tab key listeners on region items.\n * Single item: Tab moves to next edit.\n * Multiple items: Shift+Tab on first or Tab on last moves to next edit.\n */\n private setOverlayKeydownListener(): void {\n const regionItems = this.regionItems();\n\n if (regionItems.length === 0) return;\n\n const firstItem = regionItems.at(0);\n const lastItem = regionItems.at(regionItems.length - 1);\n\n if (regionItems.length === 1) {\n firstItem?.tabOut.subscribe((event) => this.saveAndFocusNextInlineEdit(event));\n } else {\n firstItem?.tabOut.subscribe(\n (event) => hasModifierKey(event, 'shiftKey') && this.saveAndFocusNextInlineEdit(event)\n );\n\n lastItem?.tabOut.subscribe(\n (event) => !hasModifierKey(event, 'shiftKey') && this.saveAndFocusNextInlineEdit(event)\n );\n }\n }\n\n private saveAndFocusNextInlineEdit(event: Event): void {\n this.save(event);\n if (this.isInvalid()) return;\n\n setTimeout(() => {\n const activeElement = this.document.activeElement;\n\n if (activeElement?.classList?.contains('kbq-inline-edit')) {\n activeElement.dispatchEvent(new KeyboardEvent('keydown', { key: 'Enter' }));\n }\n });\n }\n\n /** Whether saving would send back the value the editor opened with. */\n private isUnchanged(): boolean {\n const compareWith = this.compareWith();\n\n // A failed save left the server on a different value, so the same one is still worth sending.\n if (!compareWith || this.saveStatus() === 'error') return false;\n\n const current = this.getValue();\n const initial = this.initialValue;\n\n // The default `getValue()` returns one entry per form field, so the comparator sees the control values\n // themselves rather than the array holding them.\n if (Array.isArray(current) && Array.isArray(initial)) {\n return (\n current.length === initial.length &&\n current.every((value, index) => runCompareWith(compareWith, value, initial[index]))\n );\n }\n\n return runCompareWith(compareWith, current, initial);\n }\n\n private isInvalid(): boolean {\n const formFieldRefList = this.formFieldRefList();\n\n if (!formFieldRefList.length) return false;\n\n return formFieldRefList.some((ref) => ref.invalid);\n }\n\n private getValue() {\n const getValueHandler = this.getValueHandler();\n\n if (getValueHandler) return getValueHandler();\n\n const formFieldRefList = this.formFieldRefList();\n\n if (!formFieldRefList.length) return;\n\n return this.formFieldRefList().map((ref) => this.coerceControl(ref)?.value);\n }\n\n private setValue<T>(value: T): void {\n const setValue = this.setValueHandler();\n\n if (setValue) {\n setValue(value);\n\n return;\n }\n\n const formFieldRefList = this.formFieldRefList();\n\n if (!formFieldRefList.length || !Array.isArray(value)) return;\n\n value.forEach((controlValue, index) => {\n const control = this.coerceControl(formFieldRefList[index]);\n\n if (!control) return;\n\n if (control instanceof AbstractControl) {\n control.setValue(controlValue);\n } else {\n control.value = controlValue;\n }\n });\n }\n\n private coerceControl(formFieldRef: KbqFormField) {\n const control = formFieldRef.control();\n\n if (control.ngControl instanceof NgControl) {\n return control.ngControl.control;\n }\n\n return control;\n }\n\n private setOverlayWidth(): void {\n const editModeWidth = this.editModeWidth();\n\n if (editModeWidth) {\n this.overlayWidth.set(editModeWidth);\n\n return;\n }\n\n const element: HTMLElement | null = this.label()\n ? this.elementRef.nativeElement.querySelector('.kbq-inline-edit__focus_container')\n : this.elementRef.nativeElement;\n\n if (element) {\n const overlayRef = this.overlayDir().overlayRef;\n\n this.resizeObserver\n .observe(element)\n .pipe(takeUntil(overlayRef.detachments()))\n .subscribe(() => {\n this.overlayWidth.set(element.offsetWidth);\n overlayRef.updatePosition();\n });\n }\n\n this.overlayWidth.set(element?.offsetWidth ?? '');\n }\n\n private openPanel(formFieldRef: KbqFormField) {\n const control = formFieldRef.control();\n\n control?.open?.();\n }\n\n private getInputNativeElement(): HTMLInputElement | HTMLTextAreaElement | null {\n return this.overlayDir()?.overlayRef.overlayElement.querySelector('input:not([type=\"file\"]),textarea') ?? null;\n }\n\n private markAllAsTouched(): void {\n this.formFieldRefList().forEach((formField) => formField.control().ngControl?.control?.markAsTouched());\n }\n}\n","<div class=\"kbq-inline-edit__focus_container\">\n <div class=\"cdk-visually-hidden\" role=\"status\" aria-live=\"polite\">{{ saveStatusMessage() }}</div>\n\n @if (label()) {\n <div class=\"kbq-inline-edit__label\">\n <ng-content select=\"kbq-label\" />\n </div>\n }\n\n <div #viewContainer class=\"kbq-inline-edit__view-container\">\n <div class=\"kbq-inline-edit__view-content\">\n <ng-content select=\"[kbqInlineEditViewMode]\" />\n </div>\n\n @if (hasInteractiveContent() && mode() === 'view' && !disabled()) {\n <div\n class=\"kbq-inline-edit__focus-anchor cdk-visually-hidden\"\n tabindex=\"0\"\n (focus)=\"anchorFocused.set(true)\"\n (blur)=\"anchorFocused.set(false)\"\n ></div>\n }\n\n @if (menu() && mode() === 'view') {\n <div class=\"kbq-inline-edit__menu-mask kbq-mask\">\n <div class=\"kbq-inline-edit__menu-mask-fade kbq-mask__fade\"></div>\n <div class=\"kbq-inline-edit__menu-mask-container kbq-mask__container\">\n <ng-content select=\"[kbqInlineEditMenu]\" />\n </div>\n </div>\n }\n\n <ng-template\n cdkConnectedOverlay\n cdkConnectedOverlayLockPosition\n [cdkConnectedOverlayOpen]=\"isEditMode()\"\n [cdkConnectedOverlayOrigin]=\"overlayOrigin\"\n [cdkConnectedOverlayPositions]=\"overlayPositions\"\n [cdkConnectedOverlayOffsetY]=\"-overlayOrigin.offsetHeight\"\n [cdkConnectedOverlayWidth]=\"overlayWidth()\"\n [cdkConnectedOverlayPush]=\"false\"\n [cdkConnectedOverlayDisableClose]=\"true\"\n [cdkConnectedOverlayScrollStrategy]=\"scrollStrategy()\"\n [cdkConnectedOverlayPanelClass]=\"overlayPanelClass()\"\n [cdkConnectedOverlayHasBackdrop]=\"false\"\n (attach)=\"onAttach()\"\n (overlayOutsideClick)=\"onOverlayOutsideClick($event)\"\n (overlayKeydown)=\"onOverlayKeydown($event)\"\n >\n <div class=\"cdk-visually-hidden\" aria-hidden=\"true\" kbqFocusRegionItem tabindex=\"0\"></div>\n <div\n class=\"kbq-inline-edit__panel\"\n cdkTrapFocusAutoCapture\n [class.kbq-inline-edit__panel_select]=\"isSingleSelect()\"\n [cdkTrapFocus]=\"false\"\n >\n <div\n class=\"kbq-inline-edit__control-container\"\n [kbqTooltipColor]=\"colors.Error\"\n [kbqTooltip]=\"validationTooltip() ?? ''\"\n [kbqTooltipDisabled]=\"!validationTooltip()\"\n [kbqTooltipArrow]=\"false\"\n [kbqTrigger]=\"'manual'\"\n [kbqPlacement]=\"tooltipPlacement() ?? placements.TopLeft\"\n [kbqTooltipScrollStrategy]=\"validationTooltipScrollStrategy\"\n >\n <ng-content select=\"[kbqInlineEditEditMode]\" />\n </div>\n\n @if (showActions()) {\n <div class=\"kbq-inline-edit__action-buttons\" role=\"group\" [@panelAnimation]>\n <div class=\"kbq-inline-edit__action-button\">\n <button kbq-button [color]=\"'contrast'\" (click)=\"save($event)\">\n <i kbq-icon=\"kbq-check_16\"></i>\n </button>\n </div>\n\n <div class=\"kbq-inline-edit__action-button\">\n <button kbq-button [color]=\"'contrast-fade'\" (click)=\"cancel()\">\n <i kbq-icon=\"kbq-xmark_16\"></i>\n </button>\n </div>\n </div>\n }\n </div>\n <div class=\"cdk-visually-hidden\" aria-hidden=\"true\" kbqFocusRegionItem tabindex=\"0\"></div>\n </ng-template>\n </div>\n</div>\n","import { NgModule } from '@angular/core';\nimport { KbqInlineEdit, KbqInlineEditMenu, KbqInlineEditPlaceholder } from './inline-edit';\n\nconst COMPONENTS = [\n KbqInlineEdit,\n KbqInlineEditPlaceholder,\n KbqInlineEditMenu\n];\n\n@NgModule({\n imports: COMPONENTS,\n exports: COMPONENTS\n})\nexport class KbqInlineEditModule {}\n","/**\n * Generated bundle index. Do not edit.\n */\n\nexport * from './index';\n"],"names":[],"mappings":"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"}
|