@mohamedatia/fly-design-system 2.15.2 → 2.16.0
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.
|
@@ -1,5 +1,5 @@
|
|
|
1
1
|
import * as i0 from '@angular/core';
|
|
2
|
-
import { InjectionToken, signal, computed, Injectable, inject, ErrorHandler, PLATFORM_ID, DestroyRef, ChangeDetectionStrategy, Component, Pipe, ElementRef, input, output, afterNextRender, HostListener, ViewChild, ChangeDetectorRef, forwardRef, DOCUMENT, EventEmitter, Output, Input, Injector, viewChild,
|
|
2
|
+
import { InjectionToken, signal, computed, Injectable, inject, ErrorHandler, PLATFORM_ID, DestroyRef, ChangeDetectionStrategy, Component, Pipe, ElementRef, input, output, afterNextRender, HostListener, ViewChild, ChangeDetectorRef, forwardRef, DOCUMENT, EventEmitter, Output, Input, effect, Injector, viewChild, ViewEncapsulation, model, Directive, Renderer2 } from '@angular/core';
|
|
3
3
|
import * as i1$1 from '@angular/common';
|
|
4
4
|
import { isPlatformBrowser, NgComponentOutlet, CommonModule, DOCUMENT as DOCUMENT$1 } from '@angular/common';
|
|
5
5
|
import { Router, NavigationEnd } from '@angular/router';
|
|
@@ -17,6 +17,8 @@ import { TiptapEditorDirective } from 'ngx-tiptap';
|
|
|
17
17
|
import { Link } from '@tiptap/extension-link';
|
|
18
18
|
import { registerCustomProtocol } from 'linkifyjs';
|
|
19
19
|
import { switchMap, debounceTime, distinctUntilChanged, filter } from 'rxjs/operators';
|
|
20
|
+
import * as i1$2 from '@angular/cdk/a11y';
|
|
21
|
+
import { A11yModule } from '@angular/cdk/a11y';
|
|
20
22
|
import Cropper from 'cropperjs';
|
|
21
23
|
|
|
22
24
|
/**
|
|
@@ -4176,6 +4178,159 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "21.2.5", ngImpor
|
|
|
4176
4178
|
args: [{ selector: 'fly-block-ui', standalone: true, imports: [TranslatePipe], changeDetection: ChangeDetectionStrategy.OnPush, template: "@if (active()) {\n <div\n class=\"fly-block-ui\"\n role=\"status\"\n aria-live=\"polite\"\n aria-busy=\"true\"\n [attr.aria-label]=\"resolvedMessageKey() | translate\">\n <div class=\"fly-block-ui__card\">\n <i class=\"pi pi-spin pi-spinner fly-block-ui__spinner\" aria-hidden=\"true\"></i>\n <span class=\"fly-block-ui__text\">{{ resolvedMessageKey() | translate }}</span>\n </div>\n </div>\n}\n", styles: [":host{display:contents}.fly-block-ui{position:absolute;inset:0;z-index:50;display:flex;align-items:center;justify-content:center;background:color-mix(in srgb,var(--surface-ground, #0c0c12) 58%,transparent);-webkit-backdrop-filter:blur(6px) saturate(120%);backdrop-filter:blur(6px) saturate(120%)}.fly-block-ui__card{display:flex;flex-direction:column;align-items:center;gap:12px;padding:24px 36px;border-radius:12px;background:var(--glass-bg, rgba(255, 255, 255, .14));border:1px solid var(--glass-border, rgba(255, 255, 255, .22));box-shadow:0 8px 32px #0000002e}.fly-block-ui__spinner{font-size:2rem;color:var(--primary-color)}.fly-block-ui__text{font-size:.875rem;color:var(--text-color-secondary)}\n"] }]
|
|
4177
4179
|
}], propDecorators: { active: [{ type: i0.Input, args: [{ isSignal: true, alias: "active", required: true }] }], messageKey: [{ type: i0.Input, args: [{ isSignal: true, alias: "messageKey", required: false }] }] } });
|
|
4178
4180
|
|
|
4181
|
+
/**
|
|
4182
|
+
* `fly-drawer` — the ONE overlay-drawer primitive for FlyOS apps.
|
|
4183
|
+
*
|
|
4184
|
+
* Replaces every hand-rolled centered modal / `*-backdrop` + `modal-panel`
|
|
4185
|
+
* scaffold. A slide-in panel pinned to the window's inline-end edge over a
|
|
4186
|
+
* scrim, dismissing away — drops onto ANY app layout (sidebar+main, editor,
|
|
4187
|
+
* list) with no restructuring.
|
|
4188
|
+
*
|
|
4189
|
+
* ## Windowed rendering (important)
|
|
4190
|
+
* Desktop apps are windowed, so the drawer renders **in-place** — the scrim is
|
|
4191
|
+
* `position: absolute; inset: 0` and overlays the nearest positioned ancestor,
|
|
4192
|
+
* NOT a body/CDK portal (a body-level overlay would escape the app window and
|
|
4193
|
+
* break the shell's window stacking). **The consuming app's root container must
|
|
4194
|
+
* be `position: relative`** (add it where missing) so the scrim is clipped to
|
|
4195
|
+
* the window.
|
|
4196
|
+
*
|
|
4197
|
+
* ## Controlled
|
|
4198
|
+
* `open` is a controlled input — bind it to a signal and flip it in the
|
|
4199
|
+
* `(closed)` / `(openChange)` handlers. The drawer never closes itself; it only
|
|
4200
|
+
* requests closure (scrim / Escape / ✕) by emitting.
|
|
4201
|
+
*
|
|
4202
|
+
* ## Owns (so apps stop reimplementing it)
|
|
4203
|
+
* slide in/out (honours `prefers-reduced-motion`), focus trap + focus restore,
|
|
4204
|
+
* Escape + scrim dismiss (both gated), scroll-lock of the host content, ARIA
|
|
4205
|
+
* (`role=dialog` + `aria-modal` + labelledby/label), logical CSS (RTL-safe),
|
|
4206
|
+
* dark theme.
|
|
4207
|
+
*
|
|
4208
|
+
* ## Slots
|
|
4209
|
+
* - `[flyDrawerHeader]` — optional custom header (else `heading` + close ✕).
|
|
4210
|
+
* - default — body (scrolls).
|
|
4211
|
+
* - `[flyDrawerFooter]` — optional sticky footer (action bar).
|
|
4212
|
+
*/
|
|
4213
|
+
class FlyDrawerComponent {
|
|
4214
|
+
host = inject((ElementRef));
|
|
4215
|
+
destroyRef = inject(DestroyRef);
|
|
4216
|
+
/** Drives mount + slide. Controlled by the parent. */
|
|
4217
|
+
open = input(false, ...(ngDevMode ? [{ debugName: "open" }] : /* istanbul ignore next */ []));
|
|
4218
|
+
/** Width tier → inline-size (sm 360 / md 480 / lg 640 / xl min(960px, 94%)). */
|
|
4219
|
+
size = input('md', ...(ngDevMode ? [{ debugName: "size" }] : /* istanbul ignore next */ []));
|
|
4220
|
+
/** Convenience title shown in the default header (ignored if `[flyDrawerHeader]` is projected). Treated as an i18n key. */
|
|
4221
|
+
heading = input(null, ...(ngDevMode ? [{ debugName: "heading" }] : /* istanbul ignore next */ []));
|
|
4222
|
+
/** Edge to pin to. `end` (default) slides from inline-end; RTL flips it. */
|
|
4223
|
+
side = input('end', ...(ngDevMode ? [{ debugName: "side" }] : /* istanbul ignore next */ []));
|
|
4224
|
+
/** Close when the scrim is clicked. */
|
|
4225
|
+
dismissOnScrim = input(true, ...(ngDevMode ? [{ debugName: "dismissOnScrim" }] : /* istanbul ignore next */ []));
|
|
4226
|
+
/** Close on Escape. */
|
|
4227
|
+
dismissOnEscape = input(true, ...(ngDevMode ? [{ debugName: "dismissOnEscape" }] : /* istanbul ignore next */ []));
|
|
4228
|
+
/** Accessible label when no `heading` / projected header title is available. Treated as an i18n key. */
|
|
4229
|
+
ariaLabel = input(null, ...(ngDevMode ? [{ debugName: "ariaLabel" }] : /* istanbul ignore next */ []));
|
|
4230
|
+
/** Hide the built-in close ✕ in the default header (e.g. a mandatory step). */
|
|
4231
|
+
hideCloseButton = input(false, ...(ngDevMode ? [{ debugName: "hideCloseButton" }] : /* istanbul ignore next */ []));
|
|
4232
|
+
/** Emitted when the user requests dismissal (scrim / Escape / ✕). */
|
|
4233
|
+
closed = output();
|
|
4234
|
+
/** Two-way friendly: emits `false` on a dismissal request. */
|
|
4235
|
+
openChange = output();
|
|
4236
|
+
/** Whether the panel is mounted (true while open AND during the slide-out). */
|
|
4237
|
+
rendered = signal(false, ...(ngDevMode ? [{ debugName: "rendered" }] : /* istanbul ignore next */ []));
|
|
4238
|
+
/** Whether the panel is in its entered (slid-in) state. */
|
|
4239
|
+
entered = signal(false, ...(ngDevMode ? [{ debugName: "entered" }] : /* istanbul ignore next */ []));
|
|
4240
|
+
headingId = 'fly-drawer-heading';
|
|
4241
|
+
labelledBy = computed(() => (this.heading() ? this.headingId : null), ...(ngDevMode ? [{ debugName: "labelledBy" }] : /* istanbul ignore next */ []));
|
|
4242
|
+
/** Element focused before the drawer opened, restored on close. */
|
|
4243
|
+
previouslyFocused = null;
|
|
4244
|
+
/** Parent element whose overflow we lock while open. */
|
|
4245
|
+
scrollLockTarget = null;
|
|
4246
|
+
prevOverflow = '';
|
|
4247
|
+
constructor() {
|
|
4248
|
+
effect(() => {
|
|
4249
|
+
if (this.open())
|
|
4250
|
+
this.onOpen();
|
|
4251
|
+
else
|
|
4252
|
+
this.onClose();
|
|
4253
|
+
});
|
|
4254
|
+
this.destroyRef.onDestroy(() => this.releaseScrollLock());
|
|
4255
|
+
}
|
|
4256
|
+
onOpen() {
|
|
4257
|
+
if (this.rendered())
|
|
4258
|
+
return;
|
|
4259
|
+
this.previouslyFocused =
|
|
4260
|
+
document.activeElement instanceof HTMLElement ? document.activeElement : null;
|
|
4261
|
+
this.lockScroll();
|
|
4262
|
+
this.rendered.set(true);
|
|
4263
|
+
// Next frame → flip to entered so the CSS transition runs.
|
|
4264
|
+
requestAnimationFrame(() => requestAnimationFrame(() => this.entered.set(true)));
|
|
4265
|
+
}
|
|
4266
|
+
onClose() {
|
|
4267
|
+
if (!this.rendered())
|
|
4268
|
+
return;
|
|
4269
|
+
this.entered.set(false);
|
|
4270
|
+
this.releaseScrollLock();
|
|
4271
|
+
this.restoreFocus();
|
|
4272
|
+
// Unmount on transitionend; fallback timer covers reduced-motion / a missed
|
|
4273
|
+
// event so the (still pointer-grabbing) scrim can never linger.
|
|
4274
|
+
setTimeout(() => {
|
|
4275
|
+
if (!this.open())
|
|
4276
|
+
this.rendered.set(false);
|
|
4277
|
+
}, 320);
|
|
4278
|
+
}
|
|
4279
|
+
/** Remove the panel from the DOM once the slide-out transition completes. */
|
|
4280
|
+
onPanelTransitionEnd() {
|
|
4281
|
+
if (!this.entered() && !this.open())
|
|
4282
|
+
this.rendered.set(false);
|
|
4283
|
+
}
|
|
4284
|
+
onEscape() {
|
|
4285
|
+
if (this.open() && this.dismissOnEscape())
|
|
4286
|
+
this.requestClose();
|
|
4287
|
+
}
|
|
4288
|
+
onScrimClick() {
|
|
4289
|
+
if (this.dismissOnScrim())
|
|
4290
|
+
this.requestClose();
|
|
4291
|
+
}
|
|
4292
|
+
requestClose() {
|
|
4293
|
+
this.openChange.emit(false);
|
|
4294
|
+
this.closed.emit();
|
|
4295
|
+
}
|
|
4296
|
+
lockScroll() {
|
|
4297
|
+
// Lock the nearest positioned ancestor (the app window root) — the same box
|
|
4298
|
+
// the absolutely-positioned scrim clips to — not the immediate DOM parent
|
|
4299
|
+
// (which may be a `display:contents` dialog wrapper).
|
|
4300
|
+
const target = this.host.nativeElement.offsetParent ??
|
|
4301
|
+
this.host.nativeElement.parentElement;
|
|
4302
|
+
if (!target)
|
|
4303
|
+
return;
|
|
4304
|
+
this.scrollLockTarget = target;
|
|
4305
|
+
this.prevOverflow = target.style.overflow;
|
|
4306
|
+
target.style.overflow = 'hidden';
|
|
4307
|
+
}
|
|
4308
|
+
releaseScrollLock() {
|
|
4309
|
+
if (!this.scrollLockTarget)
|
|
4310
|
+
return;
|
|
4311
|
+
this.scrollLockTarget.style.overflow = this.prevOverflow;
|
|
4312
|
+
this.scrollLockTarget = null;
|
|
4313
|
+
this.prevOverflow = '';
|
|
4314
|
+
}
|
|
4315
|
+
restoreFocus() {
|
|
4316
|
+
const el = this.previouslyFocused;
|
|
4317
|
+
this.previouslyFocused = null;
|
|
4318
|
+
if (el && document.contains(el)) {
|
|
4319
|
+
// Defer so focus lands after the panel is removed from the a11y tree.
|
|
4320
|
+
requestAnimationFrame(() => el.focus());
|
|
4321
|
+
}
|
|
4322
|
+
}
|
|
4323
|
+
static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "21.2.5", ngImport: i0, type: FlyDrawerComponent, deps: [], target: i0.ɵɵFactoryTarget.Component });
|
|
4324
|
+
static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "21.2.5", type: FlyDrawerComponent, isStandalone: true, selector: "fly-drawer", inputs: { open: { classPropertyName: "open", publicName: "open", isSignal: true, isRequired: false, transformFunction: null }, size: { classPropertyName: "size", publicName: "size", isSignal: true, isRequired: false, transformFunction: null }, heading: { classPropertyName: "heading", publicName: "heading", isSignal: true, isRequired: false, transformFunction: null }, side: { classPropertyName: "side", publicName: "side", isSignal: true, isRequired: false, transformFunction: null }, dismissOnScrim: { classPropertyName: "dismissOnScrim", publicName: "dismissOnScrim", isSignal: true, isRequired: false, transformFunction: null }, dismissOnEscape: { classPropertyName: "dismissOnEscape", publicName: "dismissOnEscape", isSignal: true, isRequired: false, transformFunction: null }, ariaLabel: { classPropertyName: "ariaLabel", publicName: "ariaLabel", isSignal: true, isRequired: false, transformFunction: null }, hideCloseButton: { classPropertyName: "hideCloseButton", publicName: "hideCloseButton", isSignal: true, isRequired: false, transformFunction: null } }, outputs: { closed: "closed", openChange: "openChange" }, host: { listeners: { "document:keydown.escape": "onEscape()" } }, ngImport: i0, template: "<!--\n Windowed overlay drawer. Renders only while mounted (open or sliding out).\n Scrim + panel are absolutely positioned within the nearest positioned\n ancestor (the consuming app root must be position:relative).\n-->\n@if (rendered()) {\n <div\n class=\"fly-drawer__scrim\"\n [class.fly-drawer__scrim--in]=\"entered()\"\n (click)=\"onScrimClick()\"\n aria-hidden=\"true\"\n ></div>\n\n <div\n class=\"fly-drawer__panel\"\n [class.fly-drawer__panel--in]=\"entered()\"\n [class]=\"'fly-drawer__panel--' + size() + ' fly-drawer__panel--side-' + side()\"\n role=\"dialog\"\n aria-modal=\"true\"\n [attr.aria-labelledby]=\"labelledBy()\"\n [attr.aria-label]=\"!labelledBy() && ariaLabel() ? (ariaLabel()! | translate) : null\"\n cdkTrapFocus\n [cdkTrapFocusAutoCapture]=\"true\"\n (transitionend)=\"onPanelTransitionEnd()\"\n >\n <!-- Header: custom slot, else heading + close \u2715. -->\n <ng-content select=\"[flyDrawerHeader]\">\n @if (heading()) {\n <header class=\"fly-drawer__header\">\n <h2 class=\"fly-drawer__title\" [id]=\"headingId\">{{ heading()! | translate }}</h2>\n @if (!hideCloseButton()) {\n <button\n type=\"button\"\n class=\"fly-drawer__close\"\n (click)=\"requestClose()\"\n [attr.aria-label]=\"'common.action.close' | translate\"\n >\n <i class=\"pi pi-times\" aria-hidden=\"true\"></i>\n </button>\n }\n </header>\n }\n </ng-content>\n\n <div class=\"fly-drawer__body\">\n <ng-content></ng-content>\n </div>\n\n <ng-content select=\"[flyDrawerFooter]\"></ng-content>\n </div>\n}\n", styles: [":host{position:absolute;inset:0;z-index:60;pointer-events:none}.fly-drawer__scrim{position:absolute;inset:0;pointer-events:auto;background:#00000061;opacity:0;transition:opacity .24s ease}.fly-drawer__scrim--in{opacity:1}.fly-drawer__panel{position:absolute;inset-block:0;inset-inline-end:0;pointer-events:auto;display:flex;flex-direction:column;min-block-size:0;inline-size:min(480px,100%);max-inline-size:100%;background:var(--surface-card, #fff);border-inline-start:1px solid var(--surface-border, rgba(0, 0, 0, .08));box-shadow:-16px 0 48px #00000038;transform:translate(100%);transition:transform .28s cubic-bezier(.32,.72,0,1)}.fly-drawer__panel--sm{inline-size:min(360px,100%)}.fly-drawer__panel--md{inline-size:min(480px,100%)}.fly-drawer__panel--lg{inline-size:min(640px,100%)}.fly-drawer__panel--xl{inline-size:min(960px,94%)}.fly-drawer__panel--side-start{inset-inline-end:auto;inset-inline-start:0;border-inline-start:none;border-inline-end:1px solid var(--surface-border, rgba(0, 0, 0, .08));box-shadow:16px 0 48px #00000038;transform:translate(-100%)}.fly-drawer__panel--in{transform:translate(0)}:host-context([dir=rtl]) .fly-drawer__panel{transform:translate(-100%)}:host-context([dir=rtl]) .fly-drawer__panel--side-start{transform:translate(100%)}:host-context([dir=rtl]) .fly-drawer__panel--in{transform:translate(0)}:host-context([dir=rtl]) .fly-drawer__panel{box-shadow:16px 0 48px #00000038;border-inline-start:1px solid var(--surface-border, rgba(0, 0, 0, .08))}.fly-drawer__header{display:flex;align-items:center;justify-content:space-between;gap:12px;padding:14px 18px;border-block-end:1px solid var(--surface-border, rgba(0, 0, 0, .08));flex:0 0 auto}.fly-drawer__title{margin:0;font-size:16px;font-weight:600;color:var(--label-primary, #1d1d1f)}.fly-drawer__close{display:inline-flex;align-items:center;justify-content:center;inline-size:30px;block-size:30px;border:none;border-radius:8px;background:transparent;color:var(--label-secondary, #6e6e73);cursor:pointer}.fly-drawer__close:hover{background:#0000000f}.fly-drawer__body{flex:1 1 auto;min-block-size:0;overflow-y:auto}:host ::ng-deep [flyDrawerFooter]{flex:0 0 auto;display:flex;align-items:center;justify-content:flex-end;gap:8px;padding:12px 18px;border-block-start:1px solid var(--surface-border, rgba(0, 0, 0, .08))}:host-context(html.dark-theme) .fly-drawer__panel{background:#1c1c1e}:host-context(html.dark-theme) .fly-drawer__title{color:#f5f5f7}:host-context(html.dark-theme) .fly-drawer__close:hover{background:#ffffff14}@media(prefers-reduced-motion:reduce){.fly-drawer__scrim,.fly-drawer__panel{transition:none}}@media(forced-colors:active){.fly-drawer__panel{border:1px solid CanvasText}}\n"], dependencies: [{ kind: "ngmodule", type: CommonModule }, { kind: "ngmodule", type: A11yModule }, { kind: "directive", type: i1$2.CdkTrapFocus, selector: "[cdkTrapFocus]", inputs: ["cdkTrapFocus", "cdkTrapFocusAutoCapture"], exportAs: ["cdkTrapFocus"] }, { kind: "pipe", type: TranslatePipe, name: "translate" }], changeDetection: i0.ChangeDetectionStrategy.OnPush });
|
|
4325
|
+
}
|
|
4326
|
+
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "21.2.5", ngImport: i0, type: FlyDrawerComponent, decorators: [{
|
|
4327
|
+
type: Component,
|
|
4328
|
+
args: [{ selector: 'fly-drawer', standalone: true, imports: [CommonModule, A11yModule, TranslatePipe], changeDetection: ChangeDetectionStrategy.OnPush, template: "<!--\n Windowed overlay drawer. Renders only while mounted (open or sliding out).\n Scrim + panel are absolutely positioned within the nearest positioned\n ancestor (the consuming app root must be position:relative).\n-->\n@if (rendered()) {\n <div\n class=\"fly-drawer__scrim\"\n [class.fly-drawer__scrim--in]=\"entered()\"\n (click)=\"onScrimClick()\"\n aria-hidden=\"true\"\n ></div>\n\n <div\n class=\"fly-drawer__panel\"\n [class.fly-drawer__panel--in]=\"entered()\"\n [class]=\"'fly-drawer__panel--' + size() + ' fly-drawer__panel--side-' + side()\"\n role=\"dialog\"\n aria-modal=\"true\"\n [attr.aria-labelledby]=\"labelledBy()\"\n [attr.aria-label]=\"!labelledBy() && ariaLabel() ? (ariaLabel()! | translate) : null\"\n cdkTrapFocus\n [cdkTrapFocusAutoCapture]=\"true\"\n (transitionend)=\"onPanelTransitionEnd()\"\n >\n <!-- Header: custom slot, else heading + close \u2715. -->\n <ng-content select=\"[flyDrawerHeader]\">\n @if (heading()) {\n <header class=\"fly-drawer__header\">\n <h2 class=\"fly-drawer__title\" [id]=\"headingId\">{{ heading()! | translate }}</h2>\n @if (!hideCloseButton()) {\n <button\n type=\"button\"\n class=\"fly-drawer__close\"\n (click)=\"requestClose()\"\n [attr.aria-label]=\"'common.action.close' | translate\"\n >\n <i class=\"pi pi-times\" aria-hidden=\"true\"></i>\n </button>\n }\n </header>\n }\n </ng-content>\n\n <div class=\"fly-drawer__body\">\n <ng-content></ng-content>\n </div>\n\n <ng-content select=\"[flyDrawerFooter]\"></ng-content>\n </div>\n}\n", styles: [":host{position:absolute;inset:0;z-index:60;pointer-events:none}.fly-drawer__scrim{position:absolute;inset:0;pointer-events:auto;background:#00000061;opacity:0;transition:opacity .24s ease}.fly-drawer__scrim--in{opacity:1}.fly-drawer__panel{position:absolute;inset-block:0;inset-inline-end:0;pointer-events:auto;display:flex;flex-direction:column;min-block-size:0;inline-size:min(480px,100%);max-inline-size:100%;background:var(--surface-card, #fff);border-inline-start:1px solid var(--surface-border, rgba(0, 0, 0, .08));box-shadow:-16px 0 48px #00000038;transform:translate(100%);transition:transform .28s cubic-bezier(.32,.72,0,1)}.fly-drawer__panel--sm{inline-size:min(360px,100%)}.fly-drawer__panel--md{inline-size:min(480px,100%)}.fly-drawer__panel--lg{inline-size:min(640px,100%)}.fly-drawer__panel--xl{inline-size:min(960px,94%)}.fly-drawer__panel--side-start{inset-inline-end:auto;inset-inline-start:0;border-inline-start:none;border-inline-end:1px solid var(--surface-border, rgba(0, 0, 0, .08));box-shadow:16px 0 48px #00000038;transform:translate(-100%)}.fly-drawer__panel--in{transform:translate(0)}:host-context([dir=rtl]) .fly-drawer__panel{transform:translate(-100%)}:host-context([dir=rtl]) .fly-drawer__panel--side-start{transform:translate(100%)}:host-context([dir=rtl]) .fly-drawer__panel--in{transform:translate(0)}:host-context([dir=rtl]) .fly-drawer__panel{box-shadow:16px 0 48px #00000038;border-inline-start:1px solid var(--surface-border, rgba(0, 0, 0, .08))}.fly-drawer__header{display:flex;align-items:center;justify-content:space-between;gap:12px;padding:14px 18px;border-block-end:1px solid var(--surface-border, rgba(0, 0, 0, .08));flex:0 0 auto}.fly-drawer__title{margin:0;font-size:16px;font-weight:600;color:var(--label-primary, #1d1d1f)}.fly-drawer__close{display:inline-flex;align-items:center;justify-content:center;inline-size:30px;block-size:30px;border:none;border-radius:8px;background:transparent;color:var(--label-secondary, #6e6e73);cursor:pointer}.fly-drawer__close:hover{background:#0000000f}.fly-drawer__body{flex:1 1 auto;min-block-size:0;overflow-y:auto}:host ::ng-deep [flyDrawerFooter]{flex:0 0 auto;display:flex;align-items:center;justify-content:flex-end;gap:8px;padding:12px 18px;border-block-start:1px solid var(--surface-border, rgba(0, 0, 0, .08))}:host-context(html.dark-theme) .fly-drawer__panel{background:#1c1c1e}:host-context(html.dark-theme) .fly-drawer__title{color:#f5f5f7}:host-context(html.dark-theme) .fly-drawer__close:hover{background:#ffffff14}@media(prefers-reduced-motion:reduce){.fly-drawer__scrim,.fly-drawer__panel{transition:none}}@media(forced-colors:active){.fly-drawer__panel{border:1px solid CanvasText}}\n"] }]
|
|
4329
|
+
}], ctorParameters: () => [], propDecorators: { open: [{ type: i0.Input, args: [{ isSignal: true, alias: "open", required: false }] }], size: [{ type: i0.Input, args: [{ isSignal: true, alias: "size", required: false }] }], heading: [{ type: i0.Input, args: [{ isSignal: true, alias: "heading", required: false }] }], side: [{ type: i0.Input, args: [{ isSignal: true, alias: "side", required: false }] }], dismissOnScrim: [{ type: i0.Input, args: [{ isSignal: true, alias: "dismissOnScrim", required: false }] }], dismissOnEscape: [{ type: i0.Input, args: [{ isSignal: true, alias: "dismissOnEscape", required: false }] }], ariaLabel: [{ type: i0.Input, args: [{ isSignal: true, alias: "ariaLabel", required: false }] }], hideCloseButton: [{ type: i0.Input, args: [{ isSignal: true, alias: "hideCloseButton", required: false }] }], closed: [{ type: i0.Output, args: ["closed"] }], openChange: [{ type: i0.Output, args: ["openChange"] }], onEscape: [{
|
|
4330
|
+
type: HostListener,
|
|
4331
|
+
args: ['document:keydown.escape']
|
|
4332
|
+
}] } });
|
|
4333
|
+
|
|
4179
4334
|
/**
|
|
4180
4335
|
* Image upload component with built-in cropperjs cropping modal.
|
|
4181
4336
|
*
|
|
@@ -6632,5 +6787,5 @@ const AUDIENCE_ERROR_CODES = {
|
|
|
6632
6787
|
* Generated bundle index. Do not edit.
|
|
6633
6788
|
*/
|
|
6634
6789
|
|
|
6635
|
-
export { AGENT_DRAG_MIME, AGENT_PAYLOAD_VERSION, APP_LOOKUP, AUDIENCE_ERROR_CODES, AUDIENCE_LIMITS, AUDIENCE_PRESETS, AUDIENCE_TERM_KINDS, AgentActionBus, AgentActionUnsupportedDispatchError, AgentCommandRegistry, AgentDropRegistry, AgentFlightAnimator, AgentLookupRegistry, AgentPayloadOversizeError, AudienceBuilderComponent, AuthService, ContextMenuComponent, DEFAULT_AGENT_PAYLOAD_LIMITS, DEFAULT_FLY_THEME_MODE, DS_BASELINE_LOCALES, DialogResult, ENTITY_LINK_LAUNCHER, EntityLookupComponent, FLYOS_LAUNCH_EVENT, FLYOS_PROTOCOL, FLYOS_REMOTE_ROUTE_EVENT, FLY_LOCALE_CATALOG, FLY_REMOTE_BASE_PATH, FLY_REMOTE_CONTEXT_EVENT, FLY_REMOTE_CONTEXT_STORE_KEY, FLY_REMOTE_ROUTES, FLY_THEME_MODE_IDS, FLY_WINDOW_HELP_HINT_EVENT, FlyAgentDraggableDirective, FlyBlockUiComponent, FlyFileUploadComponent, FlyImageUploadComponent, FlyMarkdownEditorComponent, FlyRemoteContextService, FlyRemoteRouter, FlyRemoteRouterOutletComponent, FlySecureSrcDirective, FlyThemeService, FlyWindowHelpService, FlyosLink, FlyosPendingLaunchesGlobalKey, FlyosShellOwnsHistoryGlobalKey, I18nService, LAUNCH_CONTEXT, MARKDOWN_TOOLBAR_PRESETS, MessageBoxButtons, MessageBoxComponent, MessageBoxIcon, MessageBoxService, MockAuthService, RTL_LOCALE_SET, SHARE_ORG_CHART_SYSTEM_KEY_APPS, SHARE_ORG_CHART_SYSTEM_KEY_DEFAULT, SHARE_PANEL_DEFAULT_FILE_LEVELS, SUPPORTED_AGENT_PAYLOAD_VERSIONS, SharePanelComponent, SourceAppResolver, StandaloneWindowManagerService, TranslatePipe, WINDOW_DATA, WINDOW_HELP_HINT, WindowManagerService, findLocaleByDialect, findLocaleByPrefix, isRtlLocale, isRtlLocaleEntry, loadRemoteStyles, matchFlyRoutePattern, normalizeFlyTheme, registerFlyosProtocol, trimAgentPayload, trimAgentString, unloadRemoteStyles, utf8ByteLength, validateAgentPayload };
|
|
6790
|
+
export { AGENT_DRAG_MIME, AGENT_PAYLOAD_VERSION, APP_LOOKUP, AUDIENCE_ERROR_CODES, AUDIENCE_LIMITS, AUDIENCE_PRESETS, AUDIENCE_TERM_KINDS, AgentActionBus, AgentActionUnsupportedDispatchError, AgentCommandRegistry, AgentDropRegistry, AgentFlightAnimator, AgentLookupRegistry, AgentPayloadOversizeError, AudienceBuilderComponent, AuthService, ContextMenuComponent, DEFAULT_AGENT_PAYLOAD_LIMITS, DEFAULT_FLY_THEME_MODE, DS_BASELINE_LOCALES, DialogResult, ENTITY_LINK_LAUNCHER, EntityLookupComponent, FLYOS_LAUNCH_EVENT, FLYOS_PROTOCOL, FLYOS_REMOTE_ROUTE_EVENT, FLY_LOCALE_CATALOG, FLY_REMOTE_BASE_PATH, FLY_REMOTE_CONTEXT_EVENT, FLY_REMOTE_CONTEXT_STORE_KEY, FLY_REMOTE_ROUTES, FLY_THEME_MODE_IDS, FLY_WINDOW_HELP_HINT_EVENT, FlyAgentDraggableDirective, FlyBlockUiComponent, FlyDrawerComponent, FlyFileUploadComponent, FlyImageUploadComponent, FlyMarkdownEditorComponent, FlyRemoteContextService, FlyRemoteRouter, FlyRemoteRouterOutletComponent, FlySecureSrcDirective, FlyThemeService, FlyWindowHelpService, FlyosLink, FlyosPendingLaunchesGlobalKey, FlyosShellOwnsHistoryGlobalKey, I18nService, LAUNCH_CONTEXT, MARKDOWN_TOOLBAR_PRESETS, MessageBoxButtons, MessageBoxComponent, MessageBoxIcon, MessageBoxService, MockAuthService, RTL_LOCALE_SET, SHARE_ORG_CHART_SYSTEM_KEY_APPS, SHARE_ORG_CHART_SYSTEM_KEY_DEFAULT, SHARE_PANEL_DEFAULT_FILE_LEVELS, SUPPORTED_AGENT_PAYLOAD_VERSIONS, SharePanelComponent, SourceAppResolver, StandaloneWindowManagerService, TranslatePipe, WINDOW_DATA, WINDOW_HELP_HINT, WindowManagerService, findLocaleByDialect, findLocaleByPrefix, isRtlLocale, isRtlLocaleEntry, loadRemoteStyles, matchFlyRoutePattern, normalizeFlyTheme, registerFlyosProtocol, trimAgentPayload, trimAgentString, unloadRemoteStyles, utf8ByteLength, validateAgentPayload };
|
|
6636
6791
|
//# sourceMappingURL=mohamedatia-fly-design-system.mjs.map
|