@letsprogram/ng-oat 0.1.5 → 0.1.6

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.
@@ -2405,10 +2405,23 @@ const MOBILE_BREAKPOINT = 768;
2405
2405
  /**
2406
2406
  * Angular component wrapper for Oat's sidebar layout.
2407
2407
  *
2408
- * Usage:
2408
+ * Supports two modes:
2409
+ * - `fixed` (default): Permanent sidebar on desktop, slide-out drawer on mobile.
2410
+ * - `overlay`: Slide-out drawer at all screen sizes (ideal for app shells
2411
+ * that already have a toolbar with nav links).
2412
+ *
2413
+ * Usage (fixed — permanent desktop sidebar):
2414
+ * ```html
2415
+ * <ng-oat-sidebar>
2416
+ * <aside data-sidebar>Navigation</aside>
2417
+ * <main>Main content</main>
2418
+ * </ng-oat-sidebar>
2419
+ * ```
2420
+ *
2421
+ * Usage (overlay — mobile-style drawer at all sizes):
2409
2422
  * ```html
2410
- * <ng-oat-sidebar [scrollLock]="true" (openChange)="onToggle($event)">
2411
- * <aside sidebar>Navigation</aside>
2423
+ * <ng-oat-sidebar mode="overlay">
2424
+ * <aside data-sidebar>Navigation</aside>
2412
2425
  * <main>Main content</main>
2413
2426
  * </ng-oat-sidebar>
2414
2427
  * ```
@@ -2419,11 +2432,19 @@ class NgOatSidebarComponent {
2419
2432
  destroyRef = inject(DestroyRef);
2420
2433
  platformId = inject(PLATFORM_ID);
2421
2434
  doc = inject(DOCUMENT);
2422
- /** Whether scroll lock is applied on mobile when sidebar is open */
2435
+ /**
2436
+ * Layout mode:
2437
+ * - `'fixed'` (default) — permanent sidebar on desktop, drawer on mobile.
2438
+ * - `'overlay'` — always a slide-out drawer at any screen size.
2439
+ */
2440
+ mode = input('fixed', ...(ngDevMode ? [{ debugName: "mode" }] : []));
2441
+ /** Whether scroll lock is applied when sidebar is open */
2423
2442
  scrollLock = input(true, ...(ngDevMode ? [{ debugName: "scrollLock" }] : []));
2424
2443
  initialOpen = input(false, ...(ngDevMode ? [{ debugName: "initialOpen" }] : []));
2425
2444
  isOpen = signal(false, ...(ngDevMode ? [{ debugName: "isOpen" }] : []));
2426
2445
  openChange = output();
2446
+ /** Whether the sidebar is in overlay mode */
2447
+ isOverlay = computed(() => this.mode() === 'overlay', ...(ngDevMode ? [{ debugName: "isOverlay" }] : []));
2427
2448
  cleanupFns = [];
2428
2449
  constructor() {
2429
2450
  afterNextRender(() => {
@@ -2433,16 +2454,16 @@ class NgOatSidebarComponent {
2433
2454
  this.isOpen.set(true);
2434
2455
  }
2435
2456
  this.listen(this.doc, 'keydown', (e) => {
2436
- if (e.key === KEYS.ESCAPE && this.isOpen() && this.isMobile()) {
2457
+ if (e.key === KEYS.ESCAPE && this.isOpen() && this.shouldAutoClose()) {
2437
2458
  this.close();
2438
2459
  }
2439
2460
  });
2440
- // Outside click to close on mobile
2461
+ // Outside click to close
2441
2462
  this.listen(this.doc, 'click', (e) => {
2442
2463
  const target = e.target;
2443
2464
  if (this.isOpen() &&
2444
- this.isMobile() &&
2445
- !target.closest('[sidebar]') &&
2465
+ this.shouldAutoClose() &&
2466
+ !target.closest('[data-sidebar]') &&
2446
2467
  !target.closest('aside') &&
2447
2468
  !target.closest('[data-sidebar-toggle]')) {
2448
2469
  this.close();
@@ -2458,7 +2479,7 @@ class NgOatSidebarComponent {
2458
2479
  open() {
2459
2480
  this.isOpen.set(true);
2460
2481
  this.openChange.emit(true);
2461
- if (this.scrollLock() && this.isMobile()) {
2482
+ if (this.scrollLock() && this.shouldAutoClose()) {
2462
2483
  this.lockScroll();
2463
2484
  }
2464
2485
  }
@@ -2475,6 +2496,15 @@ class NgOatSidebarComponent {
2475
2496
  this.open();
2476
2497
  }
2477
2498
  }
2499
+ /**
2500
+ * Whether the sidebar should auto-close on outside click / ESC.
2501
+ * In overlay mode: always. In fixed mode: only on mobile.
2502
+ */
2503
+ shouldAutoClose() {
2504
+ if (this.mode() === 'overlay')
2505
+ return true;
2506
+ return typeof window !== 'undefined' && window.innerWidth < MOBILE_BREAKPOINT;
2507
+ }
2478
2508
  isMobile() {
2479
2509
  return typeof window !== 'undefined' && window.innerWidth < MOBILE_BREAKPOINT;
2480
2510
  }
@@ -2489,15 +2519,26 @@ class NgOatSidebarComponent {
2489
2519
  this.cleanupFns.push(() => el.removeEventListener(event, handler));
2490
2520
  }
2491
2521
  static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "21.2.0", ngImport: i0, type: NgOatSidebarComponent, deps: [], target: i0.ɵɵFactoryTarget.Component });
2492
- static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.1.0", version: "21.2.0", type: NgOatSidebarComponent, isStandalone: true, selector: "ng-oat-sidebar", inputs: { scrollLock: { classPropertyName: "scrollLock", publicName: "scrollLock", isSignal: true, isRequired: false, transformFunction: null }, initialOpen: { classPropertyName: "initialOpen", publicName: "initialOpen", isSignal: true, isRequired: false, transformFunction: null } }, outputs: { openChange: "openChange" }, host: { properties: { "attr.data-sidebar-layout": "\"\"", "attr.data-sidebar-open": "isOpen() ? \"\" : null" } }, ngImport: i0, template: `<ng-content />`, isInline: true, styles: [":host{display:block}\n"] });
2522
+ static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "21.2.0", type: NgOatSidebarComponent, isStandalone: true, selector: "ng-oat-sidebar", inputs: { mode: { classPropertyName: "mode", publicName: "mode", isSignal: true, isRequired: false, transformFunction: null }, scrollLock: { classPropertyName: "scrollLock", publicName: "scrollLock", isSignal: true, isRequired: false, transformFunction: null }, initialOpen: { classPropertyName: "initialOpen", publicName: "initialOpen", isSignal: true, isRequired: false, transformFunction: null } }, outputs: { openChange: "openChange" }, host: { properties: { "attr.data-sidebar-layout": "\"\"", "attr.data-sidebar-open": "isOpen() ? \"\" : null", "attr.data-sidebar-mode": "mode()" } }, ngImport: i0, template: `
2523
+ @if (isOpen() && isOverlay()) {
2524
+ <div class="ng-oat-sidebar-backdrop" (click)="close()"></div>
2525
+ }
2526
+ <ng-content />
2527
+ `, isInline: true, styles: [":host[data-sidebar-mode=overlay]{grid-template-columns:1fr!important}:host[data-sidebar-mode=overlay]>::ng-deep aside[data-sidebar]{position:fixed!important;left:0;top:var(--topnav-offset, 0px);width:16rem;height:calc(100dvh - var(--topnav-offset, 0px));z-index:20;transform:translate(-100%);transition:transform var(--transition, .3s ease);box-shadow:var(--shadow-large)}:host[data-sidebar-mode=overlay][data-sidebar-open]>::ng-deep aside[data-sidebar]{transform:translate(0)}.ng-oat-sidebar-backdrop{position:fixed;inset:0;z-index:19;background:#0006}\n"] });
2493
2528
  }
2494
2529
  i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "21.2.0", ngImport: i0, type: NgOatSidebarComponent, decorators: [{
2495
2530
  type: Component,
2496
2531
  args: [{ selector: 'ng-oat-sidebar', host: {
2497
2532
  '[attr.data-sidebar-layout]': '""',
2498
2533
  '[attr.data-sidebar-open]': 'isOpen() ? "" : null',
2499
- }, template: `<ng-content />`, styles: [":host{display:block}\n"] }]
2500
- }], ctorParameters: () => [], propDecorators: { scrollLock: [{ type: i0.Input, args: [{ isSignal: true, alias: "scrollLock", required: false }] }], initialOpen: [{ type: i0.Input, args: [{ isSignal: true, alias: "initialOpen", required: false }] }], openChange: [{ type: i0.Output, args: ["openChange"] }] } });
2534
+ '[attr.data-sidebar-mode]': 'mode()',
2535
+ }, template: `
2536
+ @if (isOpen() && isOverlay()) {
2537
+ <div class="ng-oat-sidebar-backdrop" (click)="close()"></div>
2538
+ }
2539
+ <ng-content />
2540
+ `, styles: [":host[data-sidebar-mode=overlay]{grid-template-columns:1fr!important}:host[data-sidebar-mode=overlay]>::ng-deep aside[data-sidebar]{position:fixed!important;left:0;top:var(--topnav-offset, 0px);width:16rem;height:calc(100dvh - var(--topnav-offset, 0px));z-index:20;transform:translate(-100%);transition:transform var(--transition, .3s ease);box-shadow:var(--shadow-large)}:host[data-sidebar-mode=overlay][data-sidebar-open]>::ng-deep aside[data-sidebar]{transform:translate(0)}.ng-oat-sidebar-backdrop{position:fixed;inset:0;z-index:19;background:#0006}\n"] }]
2541
+ }], ctorParameters: () => [], propDecorators: { mode: [{ type: i0.Input, args: [{ isSignal: true, alias: "mode", required: false }] }], scrollLock: [{ type: i0.Input, args: [{ isSignal: true, alias: "scrollLock", required: false }] }], initialOpen: [{ type: i0.Input, args: [{ isSignal: true, alias: "initialOpen", required: false }] }], openChange: [{ type: i0.Output, args: ["openChange"] }] } });
2501
2542
 
2502
2543
  /**
2503
2544
  * Angular component wrapper for Oat's tabs.
@@ -5013,6 +5054,7 @@ class NgOatInput {
5013
5054
  max = input(undefined, ...(ngDevMode ? [{ debugName: "max" }] : []));
5014
5055
  minLength = input(undefined, ...(ngDevMode ? [{ debugName: "minLength" }] : []));
5015
5056
  maxLength = input(undefined, ...(ngDevMode ? [{ debugName: "maxLength" }] : []));
5057
+ autocomplete = input(undefined, ...(ngDevMode ? [{ debugName: "autocomplete" }] : []));
5016
5058
  // --- Component-specific inputs ---
5017
5059
  label = input('', ...(ngDevMode ? [{ debugName: "label" }] : []));
5018
5060
  type = input('text', ...(ngDevMode ? [{ debugName: "type" }] : []));
@@ -5031,7 +5073,7 @@ class NgOatInput {
5031
5073
  input?.focus(options);
5032
5074
  }
5033
5075
  static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "21.2.0", ngImport: i0, type: NgOatInput, deps: [], target: i0.ɵɵFactoryTarget.Component });
5034
- static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "21.2.0", type: NgOatInput, isStandalone: true, selector: "ng-oat-input", inputs: { value: { classPropertyName: "value", publicName: "value", isSignal: true, isRequired: false, transformFunction: null }, disabled: { classPropertyName: "disabled", publicName: "disabled", isSignal: true, isRequired: false, transformFunction: null }, readonly: { classPropertyName: "readonly", publicName: "readonly", isSignal: true, isRequired: false, transformFunction: null }, required: { classPropertyName: "required", publicName: "required", isSignal: true, isRequired: false, transformFunction: null }, invalid: { classPropertyName: "invalid", publicName: "invalid", isSignal: true, isRequired: false, transformFunction: null }, errors: { classPropertyName: "errors", publicName: "errors", isSignal: true, isRequired: false, transformFunction: null }, touched: { classPropertyName: "touched", publicName: "touched", isSignal: true, isRequired: false, transformFunction: null }, min: { classPropertyName: "min", publicName: "min", isSignal: true, isRequired: false, transformFunction: null }, max: { classPropertyName: "max", publicName: "max", isSignal: true, isRequired: false, transformFunction: null }, minLength: { classPropertyName: "minLength", publicName: "minLength", isSignal: true, isRequired: false, transformFunction: null }, maxLength: { classPropertyName: "maxLength", publicName: "maxLength", isSignal: true, isRequired: false, transformFunction: null }, label: { classPropertyName: "label", publicName: "label", isSignal: true, isRequired: false, transformFunction: null }, type: { classPropertyName: "type", publicName: "type", isSignal: true, isRequired: false, transformFunction: null }, placeholder: { classPropertyName: "placeholder", publicName: "placeholder", isSignal: true, isRequired: false, transformFunction: null }, showErrors: { classPropertyName: "showErrors", publicName: "showErrors", isSignal: true, isRequired: false, transformFunction: null } }, outputs: { value: "valueChange", disabled: "disabledChange", touched: "touchedChange" }, providers: [{ provide: NG_OAT_VALUE_HOST, useExisting: forwardRef(() => NgOatInput) }], ngImport: i0, template: `
5076
+ static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "21.2.0", type: NgOatInput, isStandalone: true, selector: "ng-oat-input", inputs: { value: { classPropertyName: "value", publicName: "value", isSignal: true, isRequired: false, transformFunction: null }, disabled: { classPropertyName: "disabled", publicName: "disabled", isSignal: true, isRequired: false, transformFunction: null }, readonly: { classPropertyName: "readonly", publicName: "readonly", isSignal: true, isRequired: false, transformFunction: null }, required: { classPropertyName: "required", publicName: "required", isSignal: true, isRequired: false, transformFunction: null }, invalid: { classPropertyName: "invalid", publicName: "invalid", isSignal: true, isRequired: false, transformFunction: null }, errors: { classPropertyName: "errors", publicName: "errors", isSignal: true, isRequired: false, transformFunction: null }, touched: { classPropertyName: "touched", publicName: "touched", isSignal: true, isRequired: false, transformFunction: null }, min: { classPropertyName: "min", publicName: "min", isSignal: true, isRequired: false, transformFunction: null }, max: { classPropertyName: "max", publicName: "max", isSignal: true, isRequired: false, transformFunction: null }, minLength: { classPropertyName: "minLength", publicName: "minLength", isSignal: true, isRequired: false, transformFunction: null }, maxLength: { classPropertyName: "maxLength", publicName: "maxLength", isSignal: true, isRequired: false, transformFunction: null }, autocomplete: { classPropertyName: "autocomplete", publicName: "autocomplete", isSignal: true, isRequired: false, transformFunction: null }, label: { classPropertyName: "label", publicName: "label", isSignal: true, isRequired: false, transformFunction: null }, type: { classPropertyName: "type", publicName: "type", isSignal: true, isRequired: false, transformFunction: null }, placeholder: { classPropertyName: "placeholder", publicName: "placeholder", isSignal: true, isRequired: false, transformFunction: null }, showErrors: { classPropertyName: "showErrors", publicName: "showErrors", isSignal: true, isRequired: false, transformFunction: null } }, outputs: { value: "valueChange", disabled: "disabledChange", touched: "touchedChange" }, providers: [{ provide: NG_OAT_VALUE_HOST, useExisting: forwardRef(() => NgOatInput) }], ngImport: i0, template: `
5035
5077
  @if (label()) {
5036
5078
  <label [attr.for]="inputId">{{ label() }}</label>
5037
5079
  }
@@ -5047,6 +5089,7 @@ class NgOatInput {
5047
5089
  [attr.min]="min() ?? null"
5048
5090
  [attr.max]="max() ?? null"
5049
5091
  [attr.minlength]="minLength() ?? null"
5092
+ [attr.autocomplete]="autocomplete() ?? null"
5050
5093
  [attr.maxlength]="maxLength() ?? null"
5051
5094
  (input)="onInput($event)"
5052
5095
  (blur)="onBlur()"
@@ -5076,6 +5119,7 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "21.2.0", ngImpor
5076
5119
  [attr.min]="min() ?? null"
5077
5120
  [attr.max]="max() ?? null"
5078
5121
  [attr.minlength]="minLength() ?? null"
5122
+ [attr.autocomplete]="autocomplete() ?? null"
5079
5123
  [attr.maxlength]="maxLength() ?? null"
5080
5124
  (input)="onInput($event)"
5081
5125
  (blur)="onBlur()"
@@ -5086,7 +5130,7 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "21.2.0", ngImpor
5086
5130
  }
5087
5131
  } -->
5088
5132
  `, styles: [":host{display:block}.error{color:var(--danger);display:block;font-size:var(--text-8);margin-block-start:var(--space-1)}\n"] }]
5089
- }], propDecorators: { value: [{ type: i0.Input, args: [{ isSignal: true, alias: "value", required: false }] }, { type: i0.Output, args: ["valueChange"] }], disabled: [{ type: i0.Input, args: [{ isSignal: true, alias: "disabled", required: false }] }, { type: i0.Output, args: ["disabledChange"] }], readonly: [{ type: i0.Input, args: [{ isSignal: true, alias: "readonly", required: false }] }], required: [{ type: i0.Input, args: [{ isSignal: true, alias: "required", required: false }] }], invalid: [{ type: i0.Input, args: [{ isSignal: true, alias: "invalid", required: false }] }], errors: [{ type: i0.Input, args: [{ isSignal: true, alias: "errors", required: false }] }], touched: [{ type: i0.Input, args: [{ isSignal: true, alias: "touched", required: false }] }, { type: i0.Output, args: ["touchedChange"] }], min: [{ type: i0.Input, args: [{ isSignal: true, alias: "min", required: false }] }], max: [{ type: i0.Input, args: [{ isSignal: true, alias: "max", required: false }] }], minLength: [{ type: i0.Input, args: [{ isSignal: true, alias: "minLength", required: false }] }], maxLength: [{ type: i0.Input, args: [{ isSignal: true, alias: "maxLength", required: false }] }], label: [{ type: i0.Input, args: [{ isSignal: true, alias: "label", required: false }] }], type: [{ type: i0.Input, args: [{ isSignal: true, alias: "type", required: false }] }], placeholder: [{ type: i0.Input, args: [{ isSignal: true, alias: "placeholder", required: false }] }], showErrors: [{ type: i0.Input, args: [{ isSignal: true, alias: "showErrors", required: false }] }] } });
5133
+ }], propDecorators: { value: [{ type: i0.Input, args: [{ isSignal: true, alias: "value", required: false }] }, { type: i0.Output, args: ["valueChange"] }], disabled: [{ type: i0.Input, args: [{ isSignal: true, alias: "disabled", required: false }] }, { type: i0.Output, args: ["disabledChange"] }], readonly: [{ type: i0.Input, args: [{ isSignal: true, alias: "readonly", required: false }] }], required: [{ type: i0.Input, args: [{ isSignal: true, alias: "required", required: false }] }], invalid: [{ type: i0.Input, args: [{ isSignal: true, alias: "invalid", required: false }] }], errors: [{ type: i0.Input, args: [{ isSignal: true, alias: "errors", required: false }] }], touched: [{ type: i0.Input, args: [{ isSignal: true, alias: "touched", required: false }] }, { type: i0.Output, args: ["touchedChange"] }], min: [{ type: i0.Input, args: [{ isSignal: true, alias: "min", required: false }] }], max: [{ type: i0.Input, args: [{ isSignal: true, alias: "max", required: false }] }], minLength: [{ type: i0.Input, args: [{ isSignal: true, alias: "minLength", required: false }] }], maxLength: [{ type: i0.Input, args: [{ isSignal: true, alias: "maxLength", required: false }] }], autocomplete: [{ type: i0.Input, args: [{ isSignal: true, alias: "autocomplete", required: false }] }], label: [{ type: i0.Input, args: [{ isSignal: true, alias: "label", required: false }] }], type: [{ type: i0.Input, args: [{ isSignal: true, alias: "type", required: false }] }], placeholder: [{ type: i0.Input, args: [{ isSignal: true, alias: "placeholder", required: false }] }], showErrors: [{ type: i0.Input, args: [{ isSignal: true, alias: "showErrors", required: false }] }] } });
5090
5134
 
5091
5135
  /**
5092
5136
  * Oat-styled textarea implementing `FormValueControl<string>`.
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@letsprogram/ng-oat",
3
- "version": "0.1.5",
3
+ "version": "0.1.6",
4
4
  "description": "Angular component library built on top of the Oat CSS framework — signals-first, lightweight, and accessible.",
5
5
  "license": "MIT",
6
6
  "author": "SashiKumar Yadav",
@@ -918,13 +918,27 @@ declare class NgOatTooltipComponent {
918
918
  static ɵcmp: _angular_core.ɵɵComponentDeclaration<NgOatTooltipComponent, "ng-oat-tooltip", never, { "text": { "alias": "text"; "required": false; "isSignal": true; }; "template": { "alias": "template"; "required": false; "isSignal": true; }; "position": { "alias": "position"; "required": false; "isSignal": true; }; "delay": { "alias": "delay"; "required": false; "isSignal": true; }; "disabled": { "alias": "disabled"; "required": false; "isSignal": true; }; }, {}, never, ["*"], true, never>;
919
919
  }
920
920
 
921
+ type NgOatSidebarMode = 'fixed' | 'overlay';
921
922
  /**
922
923
  * Angular component wrapper for Oat's sidebar layout.
923
924
  *
924
- * Usage:
925
+ * Supports two modes:
926
+ * - `fixed` (default): Permanent sidebar on desktop, slide-out drawer on mobile.
927
+ * - `overlay`: Slide-out drawer at all screen sizes (ideal for app shells
928
+ * that already have a toolbar with nav links).
929
+ *
930
+ * Usage (fixed — permanent desktop sidebar):
931
+ * ```html
932
+ * <ng-oat-sidebar>
933
+ * <aside data-sidebar>Navigation</aside>
934
+ * <main>Main content</main>
935
+ * </ng-oat-sidebar>
936
+ * ```
937
+ *
938
+ * Usage (overlay — mobile-style drawer at all sizes):
925
939
  * ```html
926
- * <ng-oat-sidebar [scrollLock]="true" (openChange)="onToggle($event)">
927
- * <aside sidebar>Navigation</aside>
940
+ * <ng-oat-sidebar mode="overlay">
941
+ * <aside data-sidebar>Navigation</aside>
928
942
  * <main>Main content</main>
929
943
  * </ng-oat-sidebar>
930
944
  * ```
@@ -935,22 +949,35 @@ declare class NgOatSidebarComponent {
935
949
  private destroyRef;
936
950
  private platformId;
937
951
  private doc;
938
- /** Whether scroll lock is applied on mobile when sidebar is open */
952
+ /**
953
+ * Layout mode:
954
+ * - `'fixed'` (default) — permanent sidebar on desktop, drawer on mobile.
955
+ * - `'overlay'` — always a slide-out drawer at any screen size.
956
+ */
957
+ readonly mode: _angular_core.InputSignal<NgOatSidebarMode>;
958
+ /** Whether scroll lock is applied when sidebar is open */
939
959
  readonly scrollLock: _angular_core.InputSignal<boolean>;
940
960
  readonly initialOpen: _angular_core.InputSignal<boolean>;
941
961
  readonly isOpen: _angular_core.WritableSignal<boolean>;
942
962
  readonly openChange: _angular_core.OutputEmitterRef<boolean>;
963
+ /** Whether the sidebar is in overlay mode */
964
+ readonly isOverlay: _angular_core.Signal<boolean>;
943
965
  private cleanupFns;
944
966
  constructor();
945
967
  open(): void;
946
968
  close(): void;
947
969
  toggle(): void;
970
+ /**
971
+ * Whether the sidebar should auto-close on outside click / ESC.
972
+ * In overlay mode: always. In fixed mode: only on mobile.
973
+ */
974
+ private shouldAutoClose;
948
975
  private isMobile;
949
976
  private lockScroll;
950
977
  private restoreScroll;
951
978
  private listen;
952
979
  static ɵfac: _angular_core.ɵɵFactoryDeclaration<NgOatSidebarComponent, never>;
953
- static ɵcmp: _angular_core.ɵɵComponentDeclaration<NgOatSidebarComponent, "ng-oat-sidebar", never, { "scrollLock": { "alias": "scrollLock"; "required": false; "isSignal": true; }; "initialOpen": { "alias": "initialOpen"; "required": false; "isSignal": true; }; }, { "openChange": "openChange"; }, never, ["*"], true, never>;
980
+ static ɵcmp: _angular_core.ɵɵComponentDeclaration<NgOatSidebarComponent, "ng-oat-sidebar", never, { "mode": { "alias": "mode"; "required": false; "isSignal": true; }; "scrollLock": { "alias": "scrollLock"; "required": false; "isSignal": true; }; "initialOpen": { "alias": "initialOpen"; "required": false; "isSignal": true; }; }, { "openChange": "openChange"; }, never, ["*"], true, never>;
954
981
  }
955
982
 
956
983
  interface NgOatTabItem {
@@ -1727,6 +1754,7 @@ declare class NgOatInput implements FormValueControl<string> {
1727
1754
  readonly max: _angular_core.InputSignal<number | undefined>;
1728
1755
  readonly minLength: _angular_core.InputSignal<number | undefined>;
1729
1756
  readonly maxLength: _angular_core.InputSignal<number | undefined>;
1757
+ readonly autocomplete: _angular_core.InputSignal<string | undefined>;
1730
1758
  readonly label: _angular_core.InputSignal<string>;
1731
1759
  readonly type: _angular_core.InputSignal<NgOatInputType>;
1732
1760
  readonly placeholder: _angular_core.InputSignal<string>;
@@ -1736,7 +1764,7 @@ declare class NgOatInput implements FormValueControl<string> {
1736
1764
  onBlur(): void;
1737
1765
  focus(options?: FocusOptions): void;
1738
1766
  static ɵfac: _angular_core.ɵɵFactoryDeclaration<NgOatInput, never>;
1739
- static ɵcmp: _angular_core.ɵɵComponentDeclaration<NgOatInput, "ng-oat-input", never, { "value": { "alias": "value"; "required": false; "isSignal": true; }; "disabled": { "alias": "disabled"; "required": false; "isSignal": true; }; "readonly": { "alias": "readonly"; "required": false; "isSignal": true; }; "required": { "alias": "required"; "required": false; "isSignal": true; }; "invalid": { "alias": "invalid"; "required": false; "isSignal": true; }; "errors": { "alias": "errors"; "required": false; "isSignal": true; }; "touched": { "alias": "touched"; "required": false; "isSignal": true; }; "min": { "alias": "min"; "required": false; "isSignal": true; }; "max": { "alias": "max"; "required": false; "isSignal": true; }; "minLength": { "alias": "minLength"; "required": false; "isSignal": true; }; "maxLength": { "alias": "maxLength"; "required": false; "isSignal": true; }; "label": { "alias": "label"; "required": false; "isSignal": true; }; "type": { "alias": "type"; "required": false; "isSignal": true; }; "placeholder": { "alias": "placeholder"; "required": false; "isSignal": true; }; "showErrors": { "alias": "showErrors"; "required": false; "isSignal": true; }; }, { "value": "valueChange"; "disabled": "disabledChange"; "touched": "touchedChange"; }, never, never, true, never>;
1767
+ static ɵcmp: _angular_core.ɵɵComponentDeclaration<NgOatInput, "ng-oat-input", never, { "value": { "alias": "value"; "required": false; "isSignal": true; }; "disabled": { "alias": "disabled"; "required": false; "isSignal": true; }; "readonly": { "alias": "readonly"; "required": false; "isSignal": true; }; "required": { "alias": "required"; "required": false; "isSignal": true; }; "invalid": { "alias": "invalid"; "required": false; "isSignal": true; }; "errors": { "alias": "errors"; "required": false; "isSignal": true; }; "touched": { "alias": "touched"; "required": false; "isSignal": true; }; "min": { "alias": "min"; "required": false; "isSignal": true; }; "max": { "alias": "max"; "required": false; "isSignal": true; }; "minLength": { "alias": "minLength"; "required": false; "isSignal": true; }; "maxLength": { "alias": "maxLength"; "required": false; "isSignal": true; }; "autocomplete": { "alias": "autocomplete"; "required": false; "isSignal": true; }; "label": { "alias": "label"; "required": false; "isSignal": true; }; "type": { "alias": "type"; "required": false; "isSignal": true; }; "placeholder": { "alias": "placeholder"; "required": false; "isSignal": true; }; "showErrors": { "alias": "showErrors"; "required": false; "isSignal": true; }; }, { "value": "valueChange"; "disabled": "disabledChange"; "touched": "touchedChange"; }, never, never, true, never>;
1740
1768
  }
1741
1769
 
1742
1770
  /**