@koobiq/components 20.3.3 → 20.4.1
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/core/index.d.ts +114 -6
- package/core/option/_option-theme.scss +3 -0
- package/ellipsis-center/ellipsis-center.scss +31 -0
- package/ellipsis-center/index.d.ts +3 -3
- package/fesm2022/koobiq-components-core.mjs +173 -16
- package/fesm2022/koobiq-components-core.mjs.map +1 -1
- package/fesm2022/koobiq-components-ellipsis-center.mjs +27 -15
- package/fesm2022/koobiq-components-ellipsis-center.mjs.map +1 -1
- package/fesm2022/koobiq-components-file-upload.mjs +4 -4
- package/fesm2022/koobiq-components-file-upload.mjs.map +1 -1
- package/fesm2022/koobiq-components-filter-bar.mjs +36 -32
- package/fesm2022/koobiq-components-filter-bar.mjs.map +1 -1
- package/fesm2022/koobiq-components-inline-edit.mjs +177 -14
- package/fesm2022/koobiq-components-inline-edit.mjs.map +1 -1
- package/fesm2022/koobiq-components-list.mjs +357 -42
- package/fesm2022/koobiq-components-list.mjs.map +1 -1
- package/fesm2022/koobiq-components-navbar.mjs +5 -1
- package/fesm2022/koobiq-components-navbar.mjs.map +1 -1
- package/fesm2022/koobiq-components-search-expandable.mjs +2 -1
- package/fesm2022/koobiq-components-search-expandable.mjs.map +1 -1
- package/fesm2022/koobiq-components-select.mjs +20 -2
- package/fesm2022/koobiq-components-select.mjs.map +1 -1
- package/fesm2022/koobiq-components-tabs.mjs +453 -196
- package/fesm2022/koobiq-components-tabs.mjs.map +1 -1
- package/fesm2022/koobiq-components-timezone.mjs +2 -2
- package/fesm2022/koobiq-components-timezone.mjs.map +1 -1
- package/file-upload/file-upload.scss +0 -29
- package/filter-bar/index.d.ts +16 -0
- package/filter-bar/pipes/base-pipe.scss +11 -0
- package/inline-edit/index.d.ts +87 -8
- package/inline-edit/inline-edit-tokens.scss +1 -0
- package/inline-edit/inline-edit.scss +26 -0
- package/list/index.d.ts +126 -5
- package/navbar/index.d.ts +5 -1
- package/package.json +3 -3
- package/schematics/ng-add/index.js +1 -1
- package/select/index.d.ts +6 -0
- package/tabs/_tabs-common.scss +111 -2
- package/tabs/index.d.ts +78 -48
- package/tabs/tab-group.scss +0 -4
- package/tabs/tab-header.scss +0 -2
- package/tabs/tab-nav-bar.scss +3 -11
|
@@ -6,19 +6,19 @@ import { SharedResizeObserver } from '@angular/cdk/observers/private';
|
|
|
6
6
|
import { Overlay, ScrollDispatcher, CdkConnectedOverlay } from '@angular/cdk/overlay';
|
|
7
7
|
import { DOCUMENT } from '@angular/common';
|
|
8
8
|
import * as i0 from '@angular/core';
|
|
9
|
-
import { output, Directive, inject, ElementRef, NgZone, input, booleanAttribute, numberAttribute, contentChild, computed, contentChildren, viewChild, viewChildren, signal, effect, forwardRef, ViewEncapsulation, ChangeDetectionStrategy, Component, NgModule } from '@angular/core';
|
|
9
|
+
import { InjectionToken, output, Directive, inject, ElementRef, NgZone, DestroyRef, input, booleanAttribute, numberAttribute, contentChild, computed, contentChildren, viewChild, viewChildren, signal, effect, forwardRef, ViewEncapsulation, ChangeDetectionStrategy, Component, NgModule } from '@angular/core';
|
|
10
10
|
import { toObservable, takeUntilDestroyed } from '@angular/core/rxjs-interop';
|
|
11
11
|
import { AbstractControl, NgControl } from '@angular/forms';
|
|
12
12
|
import * as i2 from '@koobiq/components/button';
|
|
13
13
|
import { KbqButtonModule } from '@koobiq/components/button';
|
|
14
|
-
import { KbqAnimationDurations, KbqAnimationCurves, KBQ_WINDOW, PopUpPlacements, KbqComponentColors,
|
|
14
|
+
import { KbqAnimationDurations, KbqAnimationCurves, kbqInjectA11yLocaleConfiguration, KBQ_WINDOW, isElement, PopUpPlacements, KbqComponentColors, runCompareWith, KBQ_CONNECTED_OVERLAY_ORIGIN } from '@koobiq/components/core';
|
|
15
15
|
import { KbqDropdownTrigger } from '@koobiq/components/dropdown';
|
|
16
16
|
import { KbqLabel, KbqFormField } from '@koobiq/components/form-field';
|
|
17
17
|
import { KbqIcon } from '@koobiq/components/icon';
|
|
18
18
|
import { KbqSelect } from '@koobiq/components/select';
|
|
19
19
|
import { KbqTooltipTrigger } from '@koobiq/components/tooltip';
|
|
20
|
-
import { skip, merge } from 'rxjs';
|
|
21
|
-
import { take, takeUntil } from 'rxjs/operators';
|
|
20
|
+
import { skip, merge, of, timer, concat } from 'rxjs';
|
|
21
|
+
import { take, takeUntil, map, defaultIfEmpty, catchError, takeWhile, concatMap, ignoreElements } from 'rxjs/operators';
|
|
22
22
|
|
|
23
23
|
const KBQ_INLINE_EDIT_ACTION_BUTTONS_ANIMATION = trigger('panelAnimation', [
|
|
24
24
|
transition(':enter', [
|
|
@@ -32,6 +32,14 @@ const baseClass = 'kbq-inline-edit';
|
|
|
32
32
|
* support it, or nothing needed to scroll.
|
|
33
33
|
*/
|
|
34
34
|
const VALIDATION_TOOLTIP_SCROLL_TIMEOUT = 800;
|
|
35
|
+
/** Controls in edit mode that Enter activates on their own, so the default `canSaveOnEnter` leaves them alone. */
|
|
36
|
+
const ENTER_ACTIVATED_SELECTORS = 'button,input[type="button"],input[type="submit"],input[type="reset"],[role="button"]';
|
|
37
|
+
/** Delay before the save progress state appears, so a fast response causes no flicker. */
|
|
38
|
+
const kbqInlineEditSaveProgressDelay = 100;
|
|
39
|
+
/** Minimum time the save progress state stays once it has appeared. */
|
|
40
|
+
const kbqInlineEditSaveProgressMinimumDuration = 300;
|
|
41
|
+
/** Reports every failed save the same way across the application. Declare it in the root injector. */
|
|
42
|
+
const KBQ_INLINE_EDIT_SAVE_ERROR_HANDLER = new InjectionToken('KbqInlineEditSaveErrorHandler');
|
|
35
43
|
/** @docs-private */
|
|
36
44
|
class KbqFocusRegionItem {
|
|
37
45
|
constructor() {
|
|
@@ -109,6 +117,8 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "20.3.30", ngImpo
|
|
|
109
117
|
*/
|
|
110
118
|
class KbqInlineEdit {
|
|
111
119
|
constructor() {
|
|
120
|
+
/** Texts of the save status announcements. */
|
|
121
|
+
this.a11yLocaleConfiguration = kbqInjectA11yLocaleConfiguration();
|
|
112
122
|
this.overlay = inject(Overlay);
|
|
113
123
|
this.document = inject(DOCUMENT);
|
|
114
124
|
this.window = inject(KBQ_WINDOW);
|
|
@@ -116,6 +126,7 @@ class KbqInlineEdit {
|
|
|
116
126
|
this.elementRef = inject(ElementRef);
|
|
117
127
|
this.ngZone = inject(NgZone);
|
|
118
128
|
this.scrollDispatcher = inject(ScrollDispatcher);
|
|
129
|
+
this.destroyRef = inject(DestroyRef);
|
|
119
130
|
/**
|
|
120
131
|
* The validation tooltip is anchored inside the edit-mode overlay — an overlay inside another
|
|
121
132
|
* overlay. Its default `close()` scroll strategy would close it the moment either overlay's
|
|
@@ -153,8 +164,29 @@ class KbqInlineEdit {
|
|
|
153
164
|
this.getValueHandler = input(...(ngDevMode ? [undefined, { debugName: "getValueHandler" }] : []));
|
|
154
165
|
/** Handler function to update the value */
|
|
155
166
|
this.setValueHandler = input(...(ngDevMode ? [undefined, { debugName: "setValueHandler" }] : []));
|
|
167
|
+
/**
|
|
168
|
+
* Whether the value still equals the one the editor opened with, in which case `saveHandler` is not called.
|
|
169
|
+
* The default suits text and numbers; bind your own for arrays and objects, or `null` to send every time.
|
|
170
|
+
* A failed save is always retried, however the values compare.
|
|
171
|
+
*/
|
|
172
|
+
this.compareWith = input((a, b) => a === b, ...(ngDevMode ? [{ debugName: "compareWith" }] : []));
|
|
173
|
+
/**
|
|
174
|
+
* Saves a valid value in the background: edit mode closes right away and view mode reports how the request
|
|
175
|
+
* went. Without it, a valid value is saved immediately.
|
|
176
|
+
*/
|
|
177
|
+
this.saveHandler = input(...(ngDevMode ? [undefined, { debugName: "saveHandler" }] : []));
|
|
178
|
+
/**
|
|
179
|
+
* Reaction to a failed save for this inline edit alone. Defaults to `KBQ_INLINE_EDIT_SAVE_ERROR_HANDLER`;
|
|
180
|
+
* bind `null` to leave it without one.
|
|
181
|
+
*/
|
|
182
|
+
this.saveErrorHandler = input(inject(KBQ_INLINE_EDIT_SAVE_ERROR_HANDLER, { optional: true }), ...(ngDevMode ? [{ debugName: "saveErrorHandler" }] : []));
|
|
156
183
|
/** Customizable function that checks if saving on enter available. */
|
|
157
|
-
this.canSaveOnEnter = input((event) =>
|
|
184
|
+
this.canSaveOnEnter = input((event) => {
|
|
185
|
+
// A control that runs its own action on Enter would otherwise fire it and save at the same time.
|
|
186
|
+
if (isElement(event.target) && event.target.closest(ENTER_ACTIVATED_SELECTORS))
|
|
187
|
+
return false;
|
|
188
|
+
return hasModifierKey(event, 'ctrlKey', 'metaKey') || !(event.target instanceof HTMLTextAreaElement);
|
|
189
|
+
}, ...(ngDevMode ? [{ debugName: "canSaveOnEnter" }] : []));
|
|
158
190
|
/**
|
|
159
191
|
* CSS selectors for elements in view mode that should handle clicks instead of opening edit mode.
|
|
160
192
|
* Override to replace or extend the default list.
|
|
@@ -167,6 +199,8 @@ class KbqInlineEdit {
|
|
|
167
199
|
this.saved = output();
|
|
168
200
|
/** Emitted when the inline edit is canceled and changes are discarded. */
|
|
169
201
|
this.canceled = output();
|
|
202
|
+
/** Emitted when a `saveHandler` request fails. Silent once the row is destroyed; `saveErrorHandler` is not. */
|
|
203
|
+
this.saveError = output();
|
|
170
204
|
/** Emitted when mode switched to edit/view */
|
|
171
205
|
this.modeChange = output();
|
|
172
206
|
/** @docs-private */
|
|
@@ -206,6 +240,22 @@ class KbqInlineEdit {
|
|
|
206
240
|
this.scrollStrategy = signal(this.overlay.scrollStrategies.reposition(), ...(ngDevMode ? [{ debugName: "scrollStrategy" }] : []));
|
|
207
241
|
/** @docs-private */
|
|
208
242
|
this.modeAsReadonly = computed(() => this.mode(), ...(ngDevMode ? [{ debugName: "modeAsReadonly" }] : []));
|
|
243
|
+
this.saveStatusSource = signal('idle', ...(ngDevMode ? [{ debugName: "saveStatusSource" }] : []));
|
|
244
|
+
/** State of the background save started by `saveHandler`. */
|
|
245
|
+
this.saveStatus = this.saveStatusSource.asReadonly();
|
|
246
|
+
/** @docs-private */
|
|
247
|
+
this.isSaving = computed(() => this.saveStatus() === 'pending' || this.saveStatus() === 'progress', ...(ngDevMode ? [{ debugName: "isSaving" }] : []));
|
|
248
|
+
/**
|
|
249
|
+
* Both save states are otherwise conveyed by colour alone. `aria-busy` cannot carry the first one: it is set
|
|
250
|
+
* on the row, which contains this region, and that tells assistive tech to hold the announcement back.
|
|
251
|
+
* @docs-private
|
|
252
|
+
*/
|
|
253
|
+
this.saveStatusMessage = computed(() => {
|
|
254
|
+
const a11y = this.a11yLocaleConfiguration();
|
|
255
|
+
if (this.saveStatus() === 'progress')
|
|
256
|
+
return a11y.saving;
|
|
257
|
+
return this.saveStatus() === 'error' ? a11y.saveFailed : '';
|
|
258
|
+
}, ...(ngDevMode ? [{ debugName: "saveStatusMessage" }] : []));
|
|
209
259
|
/** @docs-private */
|
|
210
260
|
this.className = computed(() => `${baseClass}_${this.mode()}`, ...(ngDevMode ? [{ debugName: "className" }] : []));
|
|
211
261
|
/** @docs-private */
|
|
@@ -216,6 +266,8 @@ class KbqInlineEdit {
|
|
|
216
266
|
this.anchorFocused = signal(false, ...(ngDevMode ? [{ debugName: "anchorFocused" }] : []));
|
|
217
267
|
/** @docs-private */
|
|
218
268
|
this.tabIndex = computed(() => {
|
|
269
|
+
// Saving is deliberately absent: like `kbq-dropdown-item`, a row in progress keeps its place in the tab
|
|
270
|
+
// order and only has its action blocked — leaving the tab order is what `disabled` means.
|
|
219
271
|
if (this.isEditMode() || this.disabled() || this.hasInteractiveContent())
|
|
220
272
|
return -1;
|
|
221
273
|
return 0;
|
|
@@ -224,8 +276,11 @@ class KbqInlineEdit {
|
|
|
224
276
|
this.placements = PopUpPlacements;
|
|
225
277
|
/** @docs-private */
|
|
226
278
|
this.colors = KbqComponentColors;
|
|
279
|
+
this.destroyed = false;
|
|
227
280
|
/** Handle for an in-flight `showValidationTooltip()` scroll/settle request, if any. */
|
|
228
281
|
this.validationTooltipScrollHandle = null;
|
|
282
|
+
// The save outlives the row, so its outputs have to fall silent with the view they belong to.
|
|
283
|
+
this.destroyRef.onDestroy(() => (this.destroyed = true));
|
|
229
284
|
toObservable(this.mode)
|
|
230
285
|
.pipe(skip(1), takeUntilDestroyed())
|
|
231
286
|
.subscribe((currentMode) => this.modeChange.emit(currentMode));
|
|
@@ -238,8 +293,10 @@ class KbqInlineEdit {
|
|
|
238
293
|
onCleanup(() => clearTimeout(timeoutId));
|
|
239
294
|
});
|
|
240
295
|
}
|
|
241
|
-
/** Manually switch mode */
|
|
296
|
+
/** Manually switch mode. Does nothing while a `saveHandler` request is in flight. */
|
|
242
297
|
toggleMode() {
|
|
298
|
+
if (this.isSaving())
|
|
299
|
+
return;
|
|
243
300
|
this.mode.update((mode) => (mode === 'view' ? 'edit' : 'view'));
|
|
244
301
|
}
|
|
245
302
|
/**
|
|
@@ -251,13 +308,33 @@ class KbqInlineEdit {
|
|
|
251
308
|
getConnectedOverlayOrigin() {
|
|
252
309
|
return this.isSingleSelect() ? this.elementRef : undefined;
|
|
253
310
|
}
|
|
254
|
-
/** Saves the current value
|
|
311
|
+
/** Saves the current value, running the same validation as a normal save. */
|
|
255
312
|
commit() {
|
|
256
313
|
this.save();
|
|
257
314
|
}
|
|
315
|
+
/** Repeats the request for a value the server rejected. Does nothing unless the last save failed. */
|
|
316
|
+
retrySave() {
|
|
317
|
+
const saveHandler = this.saveHandler();
|
|
318
|
+
if (this.saveStatus() !== 'error' || !saveHandler)
|
|
319
|
+
return;
|
|
320
|
+
this.startSave(saveHandler());
|
|
321
|
+
}
|
|
322
|
+
/** Discards the value the server rejected, restoring the last saved one and closing the editor. */
|
|
323
|
+
rollback() {
|
|
324
|
+
if (this.saveStatus() !== 'error')
|
|
325
|
+
return;
|
|
326
|
+
this.setValue(this.lastSavedValue);
|
|
327
|
+
this.initialValue = this.lastSavedValue;
|
|
328
|
+
this.saveStatusSource.set('idle');
|
|
329
|
+
if (this.isEditMode()) {
|
|
330
|
+
this.toggleMode();
|
|
331
|
+
}
|
|
332
|
+
}
|
|
258
333
|
/** @docs-private */
|
|
259
334
|
onClick(event) {
|
|
260
|
-
|
|
335
|
+
// Editing is closed while the request is in flight: reopening it would let the user edit a value that is
|
|
336
|
+
// already on its way to the server.
|
|
337
|
+
if (this.disabled() || this.isEditMode() || this.isSaving() || this.isInteractiveElement(event.target))
|
|
261
338
|
return;
|
|
262
339
|
event.preventDefault();
|
|
263
340
|
event.stopPropagation();
|
|
@@ -283,11 +360,18 @@ class KbqInlineEdit {
|
|
|
283
360
|
}
|
|
284
361
|
});
|
|
285
362
|
setTimeout(() => {
|
|
363
|
+
// Captured before the form-field checks below: an editor built on `setValueHandler` alone has no
|
|
364
|
+
// `KbqFormField`, and `cancel()` and `rollback()` still have to restore something other than undefined.
|
|
365
|
+
this.initialValue = this.getValue();
|
|
366
|
+
// Opening the editor over a value the server rejected must not turn that value into the one
|
|
367
|
+
// `rollback()` restores.
|
|
368
|
+
if (this.saveStatus() !== 'error') {
|
|
369
|
+
this.lastSavedValue = this.initialValue;
|
|
370
|
+
}
|
|
286
371
|
const formFieldRef = this.formFieldRef();
|
|
287
372
|
if (!formFieldRef)
|
|
288
373
|
return;
|
|
289
374
|
formFieldRef.focus();
|
|
290
|
-
this.initialValue = this.getValue();
|
|
291
375
|
const input = this.getInputNativeElement();
|
|
292
376
|
if (this.initialValue)
|
|
293
377
|
input?.select();
|
|
@@ -305,12 +389,72 @@ class KbqInlineEdit {
|
|
|
305
389
|
if (this.showTooltipOnError() && this.validationTooltip()) {
|
|
306
390
|
this.showValidationTooltip();
|
|
307
391
|
}
|
|
392
|
+
return;
|
|
308
393
|
}
|
|
309
|
-
|
|
394
|
+
const saveHandler = this.saveHandler();
|
|
395
|
+
// Nothing to send: the value is still the one the editor opened with. Only the request is skipped —
|
|
396
|
+
// without a handler `saved` keeps meaning "the user committed".
|
|
397
|
+
if (saveHandler && this.isUnchanged()) {
|
|
310
398
|
this.toggleMode();
|
|
399
|
+
return;
|
|
400
|
+
}
|
|
401
|
+
// Started before the mode switch: a handler that throws is a bug in the application, and folding that into
|
|
402
|
+
// the save result would report it as the server's refusal.
|
|
403
|
+
const request$ = saveHandler?.();
|
|
404
|
+
// Client-side validation has passed, so editing is over either way: with a handler the request runs in the
|
|
405
|
+
// background, and view mode reports how it went.
|
|
406
|
+
this.toggleMode();
|
|
407
|
+
if (request$) {
|
|
408
|
+
this.startSave(request$);
|
|
409
|
+
return;
|
|
410
|
+
}
|
|
411
|
+
this.saved.emit();
|
|
412
|
+
}
|
|
413
|
+
/** Runs `saveHandler` once and maps its lifecycle onto `saveStatus`, holding the progress state steady. */
|
|
414
|
+
startSave(request$) {
|
|
415
|
+
this.submittedValue = this.getValue();
|
|
416
|
+
this.saveStatusSource.set('pending');
|
|
417
|
+
const success = { status: 'success' };
|
|
418
|
+
const result$ = request$.pipe(take(1), map(() => success), defaultIfEmpty(success), catchError((error) => of({ status: 'error', error })));
|
|
419
|
+
const progress$ = timer(kbqInlineEditSaveProgressDelay).pipe(map(() => ({ status: 'progress' })));
|
|
420
|
+
// Nothing cancels the request, destroying the row included: the value is already on its way to the
|
|
421
|
+
// server. A new one can only be started from the failed state.
|
|
422
|
+
merge(result$, progress$)
|
|
423
|
+
.pipe(
|
|
424
|
+
// Completes on the result, dropping the progress timer when the request settles first.
|
|
425
|
+
takeWhile((result) => result.status === 'progress', true),
|
|
426
|
+
// A result arriving while the progress state is shown is queued behind the minimum display time.
|
|
427
|
+
concatMap((result) => result.status === 'progress'
|
|
428
|
+
? concat(of(result), timer(kbqInlineEditSaveProgressMinimumDuration).pipe(ignoreElements()))
|
|
429
|
+
: of(result)))
|
|
430
|
+
.subscribe((result) => {
|
|
431
|
+
if (result.status === 'progress') {
|
|
432
|
+
this.saveStatusSource.set('progress');
|
|
433
|
+
return;
|
|
434
|
+
}
|
|
435
|
+
if (result.status === 'success') {
|
|
436
|
+
this.onSaveSucceeded();
|
|
437
|
+
}
|
|
438
|
+
else {
|
|
439
|
+
this.onSaveFailed(result.error);
|
|
440
|
+
}
|
|
441
|
+
});
|
|
442
|
+
}
|
|
443
|
+
onSaveSucceeded() {
|
|
444
|
+
this.lastSavedValue = this.submittedValue;
|
|
445
|
+
this.saveStatusSource.set('idle');
|
|
446
|
+
if (!this.destroyed) {
|
|
311
447
|
this.saved.emit();
|
|
312
448
|
}
|
|
313
449
|
}
|
|
450
|
+
onSaveFailed(error) {
|
|
451
|
+
this.saveStatusSource.set('error');
|
|
452
|
+
const context = { error, inlineEdit: this };
|
|
453
|
+
if (!this.destroyed) {
|
|
454
|
+
this.saveError.emit(context);
|
|
455
|
+
}
|
|
456
|
+
this.saveErrorHandler()?.(context);
|
|
457
|
+
}
|
|
314
458
|
/**
|
|
315
459
|
* Whether `overlayOrigin` is fully within the viewport and every registered `CdkScrollable`
|
|
316
460
|
* ancestor between it and the viewport. Ancestors without the `CdkScrollable` directive aren't
|
|
@@ -492,6 +636,22 @@ class KbqInlineEdit {
|
|
|
492
636
|
}
|
|
493
637
|
});
|
|
494
638
|
}
|
|
639
|
+
/** Whether saving would send back the value the editor opened with. */
|
|
640
|
+
isUnchanged() {
|
|
641
|
+
const compareWith = this.compareWith();
|
|
642
|
+
// A failed save left the server on a different value, so the same one is still worth sending.
|
|
643
|
+
if (!compareWith || this.saveStatus() === 'error')
|
|
644
|
+
return false;
|
|
645
|
+
const current = this.getValue();
|
|
646
|
+
const initial = this.initialValue;
|
|
647
|
+
// The default `getValue()` returns one entry per form field, so the comparator sees the control values
|
|
648
|
+
// themselves rather than the array holding them.
|
|
649
|
+
if (Array.isArray(current) && Array.isArray(initial)) {
|
|
650
|
+
return (current.length === initial.length &&
|
|
651
|
+
current.every((value, index) => runCompareWith(compareWith, value, initial[index])));
|
|
652
|
+
}
|
|
653
|
+
return runCompareWith(compareWith, current, initial);
|
|
654
|
+
}
|
|
495
655
|
isInvalid() {
|
|
496
656
|
const formFieldRefList = this.formFieldRefList();
|
|
497
657
|
if (!formFieldRefList.length)
|
|
@@ -567,7 +727,7 @@ class KbqInlineEdit {
|
|
|
567
727
|
this.formFieldRefList().forEach((formField) => formField.control().ngControl?.control?.markAsTouched());
|
|
568
728
|
}
|
|
569
729
|
/** @nocollapse */ static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "20.3.30", ngImport: i0, type: KbqInlineEdit, deps: [], target: i0.ɵɵFactoryTarget.Component }); }
|
|
570
|
-
/** @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 }, 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", 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()" }, 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 @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{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)}\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 }); }
|
|
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 }); }
|
|
571
731
|
}
|
|
572
732
|
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "20.3.30", ngImport: i0, type: KbqInlineEdit, decorators: [{
|
|
573
733
|
type: Component,
|
|
@@ -587,11 +747,14 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "20.3.30", ngImpo
|
|
|
587
747
|
'[class.kbq-inline-edit_disabled]': 'disabled()',
|
|
588
748
|
'[class.kbq-inline-edit_anchor-focused]': 'anchorFocused()',
|
|
589
749
|
'[class.kbq-inline-edit_select]': 'isSingleSelect()',
|
|
750
|
+
'[class.kbq-inline-edit_save-error]': 'saveStatus() === "error"',
|
|
751
|
+
// The background save is reported on the row itself, which by then is back in view mode.
|
|
752
|
+
'[class.kbq-progress]': 'saveStatus() === "progress"',
|
|
590
753
|
'(click)': 'onClick($event)',
|
|
591
754
|
'(keydown.enter)': 'onClick($event)',
|
|
592
755
|
'(keydown.space)': 'onClick($event)'
|
|
593
|
-
}, hostDirectives: [CdkMonitorFocus], animations: [KBQ_INLINE_EDIT_ACTION_BUTTONS_ANIMATION], exportAs: 'kbqInlineEdit', template: "<div class=\"kbq-inline-edit__focus_container\">\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{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)}\n"] }]
|
|
594
|
-
}], 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 }] }], 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"] }], 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 }] }] } });
|
|
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"] }]
|
|
757
|
+
}], 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 }] }] } });
|
|
595
758
|
|
|
596
759
|
const COMPONENTS = [
|
|
597
760
|
KbqInlineEdit,
|
|
@@ -619,5 +782,5 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "20.3.30", ngImpo
|
|
|
619
782
|
* Generated bundle index. Do not edit.
|
|
620
783
|
*/
|
|
621
784
|
|
|
622
|
-
export { KbqFocusRegionItem, KbqInlineEdit, KbqInlineEditMenu, KbqInlineEditModule, KbqInlineEditPlaceholder };
|
|
785
|
+
export { KBQ_INLINE_EDIT_SAVE_ERROR_HANDLER, KbqFocusRegionItem, KbqInlineEdit, KbqInlineEditMenu, KbqInlineEditModule, KbqInlineEditPlaceholder, kbqInlineEditSaveProgressDelay, kbqInlineEditSaveProgressMinimumDuration };
|
|
623
786
|
//# sourceMappingURL=koobiq-components-inline-edit.mjs.map
|