@area8975/ui 0.1.1-dev.5 → 0.1.1-dev.7

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.
@@ -3591,8 +3591,57 @@ i0.ɵɵngDeclareClassMetadata({
3591
3591
  args: [{ providedIn: "root" }]
3592
3592
  }]
3593
3593
  });
3594
+ var UiOverlayStack = class UiOverlayStack {
3595
+ entries = [];
3596
+ constructor() {
3597
+ document.addEventListener("click", this.onDocumentClick);
3598
+ document.addEventListener("keydown", this.onKeyDown);
3599
+ inject(DestroyRef).onDestroy(() => {
3600
+ document.removeEventListener("click", this.onDocumentClick);
3601
+ document.removeEventListener("keydown", this.onKeyDown);
3602
+ });
3603
+ }
3604
+ push = (entry) => {
3605
+ this.remove(entry);
3606
+ this.entries.push(entry);
3607
+ };
3608
+ remove = (entry) => {
3609
+ const index = this.entries.indexOf(entry);
3610
+ if (index !== -1) this.entries.splice(index, 1);
3611
+ };
3612
+ top = () => this.entries.at(-1);
3613
+ onDocumentClick = (event) => this.top()?.onDocumentClick(event);
3614
+ onKeyDown = (event) => this.top()?.onKeyDown(event);
3615
+ static ɵfac = i0.ɵɵngDeclareFactory({
3616
+ minVersion: "12.0.0",
3617
+ version: "22.2.1",
3618
+ ngImport: i0,
3619
+ type: UiOverlayStack,
3620
+ deps: [],
3621
+ target: i0.ɵɵFactoryTarget.Injectable
3622
+ });
3623
+ static ɵprov = i0.ɵɵngDeclareInjectable({
3624
+ minVersion: "12.0.0",
3625
+ version: "22.2.1",
3626
+ ngImport: i0,
3627
+ type: UiOverlayStack,
3628
+ providedIn: "root"
3629
+ });
3630
+ };
3631
+ i0.ɵɵngDeclareClassMetadata({
3632
+ minVersion: "12.0.0",
3633
+ version: "22.2.1",
3634
+ ngImport: i0,
3635
+ type: UiOverlayStack,
3636
+ decorators: [{
3637
+ type: Injectable,
3638
+ args: [{ providedIn: "root" }]
3639
+ }],
3640
+ ctorParameters: () => []
3641
+ });
3594
3642
  var UiOverlayComponent = class UiOverlayComponent {
3595
3643
  positioner = inject(UiOverlayPositioner);
3644
+ stack = inject(UiOverlayStack);
3596
3645
  content = input(...ngDevMode ? [void 0, { debugName: "content" }] : /* istanbul ignore next */ []);
3597
3646
  anchor = input(...ngDevMode ? [void 0, { debugName: "anchor" }] : /* istanbul ignore next */ []);
3598
3647
  closeBehaviour = input("whenClickAnywhere", ...ngDevMode ? [{ debugName: "closeBehaviour" }] : /* istanbul ignore next */ []);
@@ -3603,12 +3652,9 @@ var UiOverlayComponent = class UiOverlayComponent {
3603
3652
  matchWidth = input(null, ...ngDevMode ? [{ debugName: "matchWidth" }] : /* istanbul ignore next */ []);
3604
3653
  constructor() {
3605
3654
  effect((onCleanup) => {
3606
- document.addEventListener("click", this.onDocumentClick);
3607
- document.addEventListener("keydown", this.onKeyDown);
3608
- onCleanup(() => {
3609
- document.removeEventListener("click", this.onDocumentClick);
3610
- document.removeEventListener("keydown", this.onKeyDown);
3611
- });
3655
+ if (!this.isOpen()()) return;
3656
+ this.stack.push(this);
3657
+ onCleanup(() => this.stack.remove(this));
3612
3658
  });
3613
3659
  effect((onCleanup) => {
3614
3660
  const anchor = this.anchor();
@@ -6395,17 +6441,108 @@ const UI_LOADING_TYPES = [
6395
6441
  "bouncing-dots",
6396
6442
  "fading-dots"
6397
6443
  ];
6444
+ var UiModalCloseButtonComponent = class UiModalCloseButtonComponent {
6445
+ isOpen = model.required(...ngDevMode ? [{ debugName: "isOpen" }] : /* istanbul ignore next */ []);
6446
+ static ɵfac = i0.ɵɵngDeclareFactory({
6447
+ minVersion: "12.0.0",
6448
+ version: "22.2.1",
6449
+ ngImport: i0,
6450
+ type: UiModalCloseButtonComponent,
6451
+ deps: [],
6452
+ target: i0.ɵɵFactoryTarget.Component
6453
+ });
6454
+ static ɵcmp = i0.ɵɵngDeclareComponent({
6455
+ minVersion: "17.1.0",
6456
+ version: "22.2.1",
6457
+ type: UiModalCloseButtonComponent,
6458
+ isStandalone: true,
6459
+ selector: "ui-modal-close-btn",
6460
+ inputs: { isOpen: {
6461
+ classPropertyName: "isOpen",
6462
+ publicName: "isOpen",
6463
+ isSignal: true,
6464
+ isRequired: true,
6465
+ transformFunction: null
6466
+ } },
6467
+ outputs: { isOpen: "isOpenChange" },
6468
+ ngImport: i0,
6469
+ template: "<ui-button\n appearance=\"white\"\n intent=\"secondary\"\n classes=\"p-2! border-transparent! shadow-none!\"\n (click)=\"isOpen.set(false)\"\n>\n <ng-icon name=\"heroXMark\" strokeWidth=\"2.5\" />\n</ui-button>\n",
6470
+ dependencies: [{
6471
+ kind: "component",
6472
+ type: UiButtonComponent,
6473
+ selector: "ui-button",
6474
+ inputs: [
6475
+ "appearance",
6476
+ "intent",
6477
+ "size",
6478
+ "classes",
6479
+ "type",
6480
+ "ariaLabel",
6481
+ "disabled",
6482
+ "loading"
6483
+ ]
6484
+ }, {
6485
+ kind: "component",
6486
+ type: NgIcon,
6487
+ selector: "ng-icon",
6488
+ inputs: [
6489
+ "name",
6490
+ "svg",
6491
+ "size",
6492
+ "strokeWidth",
6493
+ "color"
6494
+ ]
6495
+ }]
6496
+ });
6497
+ };
6498
+ i0.ɵɵngDeclareClassMetadata({
6499
+ minVersion: "12.0.0",
6500
+ version: "22.2.1",
6501
+ ngImport: i0,
6502
+ type: UiModalCloseButtonComponent,
6503
+ decorators: [{
6504
+ type: Component,
6505
+ args: [{
6506
+ selector: "ui-modal-close-btn",
6507
+ imports: [UiButtonComponent, NgIcon],
6508
+ template: "<ui-button\n appearance=\"white\"\n intent=\"secondary\"\n classes=\"p-2! border-transparent! shadow-none!\"\n (click)=\"isOpen.set(false)\"\n>\n <ng-icon name=\"heroXMark\" strokeWidth=\"2.5\" />\n</ui-button>\n"
6509
+ }]
6510
+ }],
6511
+ propDecorators: { isOpen: [{
6512
+ type: i0.Input,
6513
+ args: [{
6514
+ isSignal: true,
6515
+ alias: "isOpen",
6516
+ required: true
6517
+ }]
6518
+ }, {
6519
+ type: i0.Output,
6520
+ args: ["isOpenChange"]
6521
+ }] }
6522
+ });
6398
6523
  var UiModalComponent = class UiModalComponent {
6524
+ isOpen = model.required(...ngDevMode ? [{ debugName: "isOpen" }] : /* istanbul ignore next */ []);
6525
+ closeBehaviour = input("whenClickOutside", ...ngDevMode ? [{ debugName: "closeBehaviour" }] : /* istanbul ignore next */ []);
6526
+ title = input("", ...ngDevMode ? [{ debugName: "title" }] : /* istanbul ignore next */ []);
6527
+ size = input("md", ...ngDevMode ? [{ debugName: "size" }] : /* istanbul ignore next */ []);
6528
+ classes = input("", ...ngDevMode ? [{ debugName: "classes" }] : /* istanbul ignore next */ []);
6529
+ headerElement = contentChild("header", {
6530
+ ...ngDevMode ? { debugName: "headerElement" } : /* istanbul ignore next */ {},
6531
+ descendants: false
6532
+ });
6533
+ footerElement = contentChild("footer", {
6534
+ ...ngDevMode ? { debugName: "footerElement" } : /* istanbul ignore next */ {},
6535
+ descendants: false
6536
+ });
6399
6537
  panelElement = viewChild("panel", {
6400
6538
  ...ngDevMode ? { debugName: "panelElement" } : /* istanbul ignore next */ {},
6401
6539
  read: ElementRef
6402
6540
  });
6403
- open = model(false, ...ngDevMode ? [{ debugName: "open" }] : /* istanbul ignore next */ []);
6404
- closeBehaviour = input("whenClickOutside", ...ngDevMode ? [{ debugName: "closeBehaviour" }] : /* istanbul ignore next */ []);
6405
- toggle = () => this.open.update((value) => !value);
6406
- close = () => this.open.set(false);
6407
- size = input("sm", ...ngDevMode ? [{ debugName: "size" }] : /* istanbul ignore next */ []);
6408
- generatedSizeClasses = computed(() => `ui-modal--${this.size()}`, ...ngDevMode ? [{ debugName: "generatedSizeClasses" }] : /* istanbul ignore next */ []);
6541
+ generatedClasses = computed(() => [
6542
+ "ui-modal",
6543
+ `ui-modal--${this.size()}`,
6544
+ this.classes()
6545
+ ].filter(Boolean).join(" "), ...ngDevMode ? [{ debugName: "generatedClasses" }] : /* istanbul ignore next */ []);
6409
6546
  static ɵfac = i0.ɵɵngDeclareFactory({
6410
6547
  minVersion: "12.0.0",
6411
6548
  version: "22.2.1",
@@ -6421,11 +6558,11 @@ var UiModalComponent = class UiModalComponent {
6421
6558
  isStandalone: true,
6422
6559
  selector: "ui-modal",
6423
6560
  inputs: {
6424
- open: {
6425
- classPropertyName: "open",
6426
- publicName: "open",
6561
+ isOpen: {
6562
+ classPropertyName: "isOpen",
6563
+ publicName: "isOpen",
6427
6564
  isSignal: true,
6428
- isRequired: false,
6565
+ isRequired: true,
6429
6566
  transformFunction: null
6430
6567
  },
6431
6568
  closeBehaviour: {
@@ -6435,15 +6572,40 @@ var UiModalComponent = class UiModalComponent {
6435
6572
  isRequired: false,
6436
6573
  transformFunction: null
6437
6574
  },
6575
+ title: {
6576
+ classPropertyName: "title",
6577
+ publicName: "title",
6578
+ isSignal: true,
6579
+ isRequired: false,
6580
+ transformFunction: null
6581
+ },
6438
6582
  size: {
6439
6583
  classPropertyName: "size",
6440
6584
  publicName: "size",
6441
6585
  isSignal: true,
6442
6586
  isRequired: false,
6443
6587
  transformFunction: null
6588
+ },
6589
+ classes: {
6590
+ classPropertyName: "classes",
6591
+ publicName: "classes",
6592
+ isSignal: true,
6593
+ isRequired: false,
6594
+ transformFunction: null
6444
6595
  }
6445
6596
  },
6446
- outputs: { open: "openChange" },
6597
+ outputs: { isOpen: "isOpenChange" },
6598
+ queries: [{
6599
+ propertyName: "headerElement",
6600
+ first: true,
6601
+ predicate: ["header"],
6602
+ isSignal: true
6603
+ }, {
6604
+ propertyName: "footerElement",
6605
+ first: true,
6606
+ predicate: ["footer"],
6607
+ isSignal: true
6608
+ }],
6447
6609
  viewQueries: [{
6448
6610
  propertyName: "panelElement",
6449
6611
  first: true,
@@ -6452,26 +6614,44 @@ var UiModalComponent = class UiModalComponent {
6452
6614
  read: ElementRef,
6453
6615
  isSignal: true
6454
6616
  }],
6455
- exportAs: ["uiModal"],
6456
6617
  ngImport: i0,
6457
- template: "@if (open()) {\n <div class=\"ui-modal--backdrop\">\n <ui-overlay\n [isOpen]=\"open\"\n [closeBehaviour]=\"closeBehaviour()\"\n [content]=\"panelElement()\"\n tabindex=\"-1\"\n role=\"dialog\"\n >\n <div #panel [class]=\"generatedSizeClasses()\">\n <div class=\"ui-modal--content\">\n <ng-content />\n </div>\n </div>\n </ui-overlay>\n </div>\n}\n",
6458
- styles: ["@layer properties;.ui-modal--backdrop{position:fixed;inset:0;z-index:50;display:flex;align-items:center;justify-content:center;overflow-y:auto;background-color:color-mix(in srgb,oklch(21% .034 264.665) 50%,transparent)}@supports (color: color-mix(in lab,red,red)){.ui-modal--backdrop{background-color:color-mix(in oklab,var(--color-gray-900, oklch(21% .034 264.665)) 50%,transparent)}}.ui-modal--content{pointer-events:auto;display:flex;max-height:100vh;flex-direction:column;border-radius:var(--radius-xl, .75rem);border-style:var(--tw-border-style);border-width:1px;border-color:var(--overlay-line);background-color:var(--overlay);--tw-shadow: 0 1px var(--tw-shadow-color, rgb(0 0 0 / .05));box-shadow:var(--tw-inset-shadow),var(--tw-inset-ring-shadow),var(--tw-ring-offset-shadow),var(--tw-ring-shadow),var(--tw-shadow)}@media(width>=40rem){.ui-modal--sm{margin-inline:auto;width:100%;max-width:var(--container-lg, 32rem)}}@media(width>=48rem){.ui-modal--md{margin-inline:auto;width:100%;max-width:var(--container-2xl, 42rem)}}@media(width>=64rem){.ui-modal--lg{margin-inline:auto;width:100%;max-width:var(--container-4xl, 56rem)}}@property --tw-border-style{syntax: \"*\"; inherits: false; initial-value: solid;}@property --tw-shadow{syntax: \"*\"; inherits: false; initial-value: 0 0 #0000;}@property --tw-shadow-color{syntax: \"*\"; inherits: false;}@property --tw-shadow-alpha{syntax: \"<percentage>\"; inherits: false; initial-value: 100%;}@property --tw-inset-shadow{syntax: \"*\"; inherits: false; initial-value: 0 0 #0000;}@property --tw-inset-shadow-color{syntax: \"*\"; inherits: false;}@property --tw-inset-shadow-alpha{syntax: \"<percentage>\"; inherits: false; initial-value: 100%;}@property --tw-ring-color{syntax: \"*\"; inherits: false;}@property --tw-ring-shadow{syntax: \"*\"; inherits: false; initial-value: 0 0 #0000;}@property --tw-inset-ring-color{syntax: \"*\"; inherits: false;}@property --tw-inset-ring-shadow{syntax: \"*\"; inherits: false; initial-value: 0 0 #0000;}@property --tw-ring-inset{syntax: \"*\"; inherits: false;}@property --tw-ring-offset-width{syntax: \"<length>\"; inherits: false; initial-value: 0px;}@property --tw-ring-offset-color{syntax: \"*\"; inherits: false; initial-value: #fff;}@property --tw-ring-offset-shadow{syntax: \"*\"; inherits: false; initial-value: 0 0 #0000;}@layer properties{@supports ((-webkit-hyphens: none) and (not (margin-trim: inline))) or ((-moz-orient: inline) and (not (color:rgb(from red r g b)))){*,:before,:after,::backdrop{--tw-border-style: solid;--tw-shadow: 0 0 #0000;--tw-shadow-color: initial;--tw-shadow-alpha: 100%;--tw-inset-shadow: 0 0 #0000;--tw-inset-shadow-color: initial;--tw-inset-shadow-alpha: 100%;--tw-ring-color: initial;--tw-ring-shadow: 0 0 #0000;--tw-inset-ring-color: initial;--tw-inset-ring-shadow: 0 0 #0000;--tw-ring-inset: initial;--tw-ring-offset-width: 0px;--tw-ring-offset-color: #fff;--tw-ring-offset-shadow: 0 0 #0000}}}\n/*! tailwindcss v4.3.3 | MIT License | https://tailwindcss.com */\n"],
6459
- dependencies: [{
6460
- kind: "component",
6461
- type: UiOverlayComponent,
6462
- selector: "ui-overlay",
6463
- inputs: [
6464
- "content",
6465
- "anchor",
6466
- "closeBehaviour",
6467
- "isOpen",
6468
- "placement",
6469
- "offset",
6470
- "viewportPadding",
6471
- "matchWidth"
6472
- ],
6473
- exportAs: ["uiOverlay"]
6474
- }]
6618
+ template: "@if (isOpen()) {\n <div\n class=\"group z-50 fixed inset-0 flex justify-center items-center bg-black/40 starting:opacity-0 p-4 transition-opacity duration-150 ease-out\"\n animate.leave=\"fs-modal--leaving opacity-0\"\n >\n <ui-overlay\n [isOpen]=\"isOpen\"\n [closeBehaviour]=\"closeBehaviour()\"\n [content]=\"panelElement()\"\n tabIndex=\"-1\"\n role=\"dialog\"\n aria-modal=\"true\"\n class=\"block max-w-full starting:scale-95 group-[.fs-modal--leaving]:scale-95 transition duration-150 ease-out\"\n >\n <div #panel [class]=\"generatedClasses()\">\n <div class=\"flex flex-col max-h-[calc(100dvh-2rem-2px)]\">\n <header class=\"flex justify-between items-center gap-x-5 p-5 border-neutral border-b shrink-0\">\n @if (headerElement()) {\n <ng-container *ngTemplateOutlet=\"headerElement()\" />\n } @else {\n <span class=\"ui-text-h3\">{{ title() }}</span>\n <ui-modal-close-btn [(isOpen)]=\"isOpen\" />\n }\n </header>\n <div class=\"flex-1 min-h-0 overflow-auto\">\n <ng-content />\n </div>\n\n @if (footerElement()) {\n <footer class=\"flex justify-end items-center gap-2.5 p-5 shrink-0\">\n <ng-container *ngTemplateOutlet=\"footerElement()\" />\n </footer>\n }\n </div>\n </div>\n </ui-overlay>\n </div>\n}\n",
6619
+ styles: ["@layer properties;.ui-modal--backdrop{position:fixed;inset:0;z-index:50;display:flex;align-items:center;justify-content:center;overflow-y:auto;background-color:color-mix(in srgb,oklch(21% .034 264.665) 50%,transparent)}@supports (color: color-mix(in lab,red,red)){.ui-modal--backdrop{background-color:color-mix(in oklab,var(--color-gray-900, oklch(21% .034 264.665)) 50%,transparent)}}.ui-modal{pointer-events:auto;display:flex;max-height:100vh;flex-direction:column;overflow:hidden;border-radius:var(--radius-xl, .75rem);border-style:var(--tw-border-style);border-width:1px;border-color:var(--overlay-line);background-color:var(--overlay);--tw-shadow: 0 1px var(--tw-shadow-color, rgb(0 0 0 / .05));box-shadow:var(--tw-inset-shadow),var(--tw-inset-ring-shadow),var(--tw-ring-offset-shadow),var(--tw-ring-shadow),var(--tw-shadow)}@media(width>=40rem){.ui-modal--sm{margin-inline:auto;width:100%;max-width:var(--container-lg, 32rem)}}@media(width>=48rem){.ui-modal--md{margin-inline:auto;width:100%;max-width:var(--container-2xl, 42rem)}}@media(width>=64rem){.ui-modal--lg{margin-inline:auto;width:100%;max-width:var(--container-4xl, 56rem)}}@property --tw-border-style{syntax: \"*\"; inherits: false; initial-value: solid;}@property --tw-shadow{syntax: \"*\"; inherits: false; initial-value: 0 0 #0000;}@property --tw-shadow-color{syntax: \"*\"; inherits: false;}@property --tw-shadow-alpha{syntax: \"<percentage>\"; inherits: false; initial-value: 100%;}@property --tw-inset-shadow{syntax: \"*\"; inherits: false; initial-value: 0 0 #0000;}@property --tw-inset-shadow-color{syntax: \"*\"; inherits: false;}@property --tw-inset-shadow-alpha{syntax: \"<percentage>\"; inherits: false; initial-value: 100%;}@property --tw-ring-color{syntax: \"*\"; inherits: false;}@property --tw-ring-shadow{syntax: \"*\"; inherits: false; initial-value: 0 0 #0000;}@property --tw-inset-ring-color{syntax: \"*\"; inherits: false;}@property --tw-inset-ring-shadow{syntax: \"*\"; inherits: false; initial-value: 0 0 #0000;}@property --tw-ring-inset{syntax: \"*\"; inherits: false;}@property --tw-ring-offset-width{syntax: \"<length>\"; inherits: false; initial-value: 0px;}@property --tw-ring-offset-color{syntax: \"*\"; inherits: false; initial-value: #fff;}@property --tw-ring-offset-shadow{syntax: \"*\"; inherits: false; initial-value: 0 0 #0000;}@layer properties{@supports ((-webkit-hyphens: none) and (not (margin-trim: inline))) or ((-moz-orient: inline) and (not (color:rgb(from red r g b)))){*,:before,:after,::backdrop{--tw-border-style: solid;--tw-shadow: 0 0 #0000;--tw-shadow-color: initial;--tw-shadow-alpha: 100%;--tw-inset-shadow: 0 0 #0000;--tw-inset-shadow-color: initial;--tw-inset-shadow-alpha: 100%;--tw-ring-color: initial;--tw-ring-shadow: 0 0 #0000;--tw-inset-ring-color: initial;--tw-inset-ring-shadow: 0 0 #0000;--tw-ring-inset: initial;--tw-ring-offset-width: 0px;--tw-ring-offset-color: #fff;--tw-ring-offset-shadow: 0 0 #0000}}}\n/*! tailwindcss v4.3.3 | MIT License | https://tailwindcss.com */\n"],
6620
+ dependencies: [
6621
+ {
6622
+ kind: "component",
6623
+ type: UiOverlayComponent,
6624
+ selector: "ui-overlay",
6625
+ inputs: [
6626
+ "content",
6627
+ "anchor",
6628
+ "closeBehaviour",
6629
+ "isOpen",
6630
+ "placement",
6631
+ "offset",
6632
+ "viewportPadding",
6633
+ "matchWidth"
6634
+ ],
6635
+ exportAs: ["uiOverlay"]
6636
+ },
6637
+ {
6638
+ kind: "component",
6639
+ type: UiModalCloseButtonComponent,
6640
+ selector: "ui-modal-close-btn",
6641
+ inputs: ["isOpen"],
6642
+ outputs: ["isOpenChange"]
6643
+ },
6644
+ {
6645
+ kind: "directive",
6646
+ type: NgTemplateOutlet,
6647
+ selector: "[ngTemplateOutlet]",
6648
+ inputs: [
6649
+ "ngTemplateOutletContext",
6650
+ "ngTemplateOutlet",
6651
+ "ngTemplateOutletInjector"
6652
+ ]
6653
+ }
6654
+ ]
6475
6655
  });
6476
6656
  };
6477
6657
  i0.ɵɵngDeclareClassMetadata({
@@ -6483,30 +6663,26 @@ i0.ɵɵngDeclareClassMetadata({
6483
6663
  type: Component,
6484
6664
  args: [{
6485
6665
  selector: "ui-modal",
6486
- exportAs: "uiModal",
6487
- imports: [UiOverlayComponent],
6488
- template: "@if (open()) {\n <div class=\"ui-modal--backdrop\">\n <ui-overlay\n [isOpen]=\"open\"\n [closeBehaviour]=\"closeBehaviour()\"\n [content]=\"panelElement()\"\n tabindex=\"-1\"\n role=\"dialog\"\n >\n <div #panel [class]=\"generatedSizeClasses()\">\n <div class=\"ui-modal--content\">\n <ng-content />\n </div>\n </div>\n </ui-overlay>\n </div>\n}\n",
6489
- styles: ["@layer properties;.ui-modal--backdrop{position:fixed;inset:0;z-index:50;display:flex;align-items:center;justify-content:center;overflow-y:auto;background-color:color-mix(in srgb,oklch(21% .034 264.665) 50%,transparent)}@supports (color: color-mix(in lab,red,red)){.ui-modal--backdrop{background-color:color-mix(in oklab,var(--color-gray-900, oklch(21% .034 264.665)) 50%,transparent)}}.ui-modal--content{pointer-events:auto;display:flex;max-height:100vh;flex-direction:column;border-radius:var(--radius-xl, .75rem);border-style:var(--tw-border-style);border-width:1px;border-color:var(--overlay-line);background-color:var(--overlay);--tw-shadow: 0 1px var(--tw-shadow-color, rgb(0 0 0 / .05));box-shadow:var(--tw-inset-shadow),var(--tw-inset-ring-shadow),var(--tw-ring-offset-shadow),var(--tw-ring-shadow),var(--tw-shadow)}@media(width>=40rem){.ui-modal--sm{margin-inline:auto;width:100%;max-width:var(--container-lg, 32rem)}}@media(width>=48rem){.ui-modal--md{margin-inline:auto;width:100%;max-width:var(--container-2xl, 42rem)}}@media(width>=64rem){.ui-modal--lg{margin-inline:auto;width:100%;max-width:var(--container-4xl, 56rem)}}@property --tw-border-style{syntax: \"*\"; inherits: false; initial-value: solid;}@property --tw-shadow{syntax: \"*\"; inherits: false; initial-value: 0 0 #0000;}@property --tw-shadow-color{syntax: \"*\"; inherits: false;}@property --tw-shadow-alpha{syntax: \"<percentage>\"; inherits: false; initial-value: 100%;}@property --tw-inset-shadow{syntax: \"*\"; inherits: false; initial-value: 0 0 #0000;}@property --tw-inset-shadow-color{syntax: \"*\"; inherits: false;}@property --tw-inset-shadow-alpha{syntax: \"<percentage>\"; inherits: false; initial-value: 100%;}@property --tw-ring-color{syntax: \"*\"; inherits: false;}@property --tw-ring-shadow{syntax: \"*\"; inherits: false; initial-value: 0 0 #0000;}@property --tw-inset-ring-color{syntax: \"*\"; inherits: false;}@property --tw-inset-ring-shadow{syntax: \"*\"; inherits: false; initial-value: 0 0 #0000;}@property --tw-ring-inset{syntax: \"*\"; inherits: false;}@property --tw-ring-offset-width{syntax: \"<length>\"; inherits: false; initial-value: 0px;}@property --tw-ring-offset-color{syntax: \"*\"; inherits: false; initial-value: #fff;}@property --tw-ring-offset-shadow{syntax: \"*\"; inherits: false; initial-value: 0 0 #0000;}@layer properties{@supports ((-webkit-hyphens: none) and (not (margin-trim: inline))) or ((-moz-orient: inline) and (not (color:rgb(from red r g b)))){*,:before,:after,::backdrop{--tw-border-style: solid;--tw-shadow: 0 0 #0000;--tw-shadow-color: initial;--tw-shadow-alpha: 100%;--tw-inset-shadow: 0 0 #0000;--tw-inset-shadow-color: initial;--tw-inset-shadow-alpha: 100%;--tw-ring-color: initial;--tw-ring-shadow: 0 0 #0000;--tw-inset-ring-color: initial;--tw-inset-ring-shadow: 0 0 #0000;--tw-ring-inset: initial;--tw-ring-offset-width: 0px;--tw-ring-offset-color: #fff;--tw-ring-offset-shadow: 0 0 #0000}}}\n/*! tailwindcss v4.3.3 | MIT License | https://tailwindcss.com */\n"]
6666
+ imports: [
6667
+ UiOverlayComponent,
6668
+ UiModalCloseButtonComponent,
6669
+ NgTemplateOutlet
6670
+ ],
6671
+ template: "@if (isOpen()) {\n <div\n class=\"group z-50 fixed inset-0 flex justify-center items-center bg-black/40 starting:opacity-0 p-4 transition-opacity duration-150 ease-out\"\n animate.leave=\"fs-modal--leaving opacity-0\"\n >\n <ui-overlay\n [isOpen]=\"isOpen\"\n [closeBehaviour]=\"closeBehaviour()\"\n [content]=\"panelElement()\"\n tabIndex=\"-1\"\n role=\"dialog\"\n aria-modal=\"true\"\n class=\"block max-w-full starting:scale-95 group-[.fs-modal--leaving]:scale-95 transition duration-150 ease-out\"\n >\n <div #panel [class]=\"generatedClasses()\">\n <div class=\"flex flex-col max-h-[calc(100dvh-2rem-2px)]\">\n <header class=\"flex justify-between items-center gap-x-5 p-5 border-neutral border-b shrink-0\">\n @if (headerElement()) {\n <ng-container *ngTemplateOutlet=\"headerElement()\" />\n } @else {\n <span class=\"ui-text-h3\">{{ title() }}</span>\n <ui-modal-close-btn [(isOpen)]=\"isOpen\" />\n }\n </header>\n <div class=\"flex-1 min-h-0 overflow-auto\">\n <ng-content />\n </div>\n\n @if (footerElement()) {\n <footer class=\"flex justify-end items-center gap-2.5 p-5 shrink-0\">\n <ng-container *ngTemplateOutlet=\"footerElement()\" />\n </footer>\n }\n </div>\n </div>\n </ui-overlay>\n </div>\n}\n",
6672
+ styles: ["@layer properties;.ui-modal--backdrop{position:fixed;inset:0;z-index:50;display:flex;align-items:center;justify-content:center;overflow-y:auto;background-color:color-mix(in srgb,oklch(21% .034 264.665) 50%,transparent)}@supports (color: color-mix(in lab,red,red)){.ui-modal--backdrop{background-color:color-mix(in oklab,var(--color-gray-900, oklch(21% .034 264.665)) 50%,transparent)}}.ui-modal{pointer-events:auto;display:flex;max-height:100vh;flex-direction:column;overflow:hidden;border-radius:var(--radius-xl, .75rem);border-style:var(--tw-border-style);border-width:1px;border-color:var(--overlay-line);background-color:var(--overlay);--tw-shadow: 0 1px var(--tw-shadow-color, rgb(0 0 0 / .05));box-shadow:var(--tw-inset-shadow),var(--tw-inset-ring-shadow),var(--tw-ring-offset-shadow),var(--tw-ring-shadow),var(--tw-shadow)}@media(width>=40rem){.ui-modal--sm{margin-inline:auto;width:100%;max-width:var(--container-lg, 32rem)}}@media(width>=48rem){.ui-modal--md{margin-inline:auto;width:100%;max-width:var(--container-2xl, 42rem)}}@media(width>=64rem){.ui-modal--lg{margin-inline:auto;width:100%;max-width:var(--container-4xl, 56rem)}}@property --tw-border-style{syntax: \"*\"; inherits: false; initial-value: solid;}@property --tw-shadow{syntax: \"*\"; inherits: false; initial-value: 0 0 #0000;}@property --tw-shadow-color{syntax: \"*\"; inherits: false;}@property --tw-shadow-alpha{syntax: \"<percentage>\"; inherits: false; initial-value: 100%;}@property --tw-inset-shadow{syntax: \"*\"; inherits: false; initial-value: 0 0 #0000;}@property --tw-inset-shadow-color{syntax: \"*\"; inherits: false;}@property --tw-inset-shadow-alpha{syntax: \"<percentage>\"; inherits: false; initial-value: 100%;}@property --tw-ring-color{syntax: \"*\"; inherits: false;}@property --tw-ring-shadow{syntax: \"*\"; inherits: false; initial-value: 0 0 #0000;}@property --tw-inset-ring-color{syntax: \"*\"; inherits: false;}@property --tw-inset-ring-shadow{syntax: \"*\"; inherits: false; initial-value: 0 0 #0000;}@property --tw-ring-inset{syntax: \"*\"; inherits: false;}@property --tw-ring-offset-width{syntax: \"<length>\"; inherits: false; initial-value: 0px;}@property --tw-ring-offset-color{syntax: \"*\"; inherits: false; initial-value: #fff;}@property --tw-ring-offset-shadow{syntax: \"*\"; inherits: false; initial-value: 0 0 #0000;}@layer properties{@supports ((-webkit-hyphens: none) and (not (margin-trim: inline))) or ((-moz-orient: inline) and (not (color:rgb(from red r g b)))){*,:before,:after,::backdrop{--tw-border-style: solid;--tw-shadow: 0 0 #0000;--tw-shadow-color: initial;--tw-shadow-alpha: 100%;--tw-inset-shadow: 0 0 #0000;--tw-inset-shadow-color: initial;--tw-inset-shadow-alpha: 100%;--tw-ring-color: initial;--tw-ring-shadow: 0 0 #0000;--tw-inset-ring-color: initial;--tw-inset-ring-shadow: 0 0 #0000;--tw-ring-inset: initial;--tw-ring-offset-width: 0px;--tw-ring-offset-color: #fff;--tw-ring-offset-shadow: 0 0 #0000}}}\n/*! tailwindcss v4.3.3 | MIT License | https://tailwindcss.com */\n"]
6490
6673
  }]
6491
6674
  }],
6492
6675
  propDecorators: {
6493
- panelElement: [{
6494
- type: i0.ViewChild,
6495
- args: ["panel", {
6496
- read: ElementRef,
6497
- isSignal: true
6498
- }]
6499
- }],
6500
- open: [{
6676
+ isOpen: [{
6501
6677
  type: i0.Input,
6502
6678
  args: [{
6503
6679
  isSignal: true,
6504
- alias: "open",
6505
- required: false
6680
+ alias: "isOpen",
6681
+ required: true
6506
6682
  }]
6507
6683
  }, {
6508
6684
  type: i0.Output,
6509
- args: ["openChange"]
6685
+ args: ["isOpenChange"]
6510
6686
  }],
6511
6687
  closeBehaviour: [{
6512
6688
  type: i0.Input,
@@ -6516,6 +6692,14 @@ i0.ɵɵngDeclareClassMetadata({
6516
6692
  required: false
6517
6693
  }]
6518
6694
  }],
6695
+ title: [{
6696
+ type: i0.Input,
6697
+ args: [{
6698
+ isSignal: true,
6699
+ alias: "title",
6700
+ required: false
6701
+ }]
6702
+ }],
6519
6703
  size: [{
6520
6704
  type: i0.Input,
6521
6705
  args: [{
@@ -6523,6 +6707,35 @@ i0.ɵɵngDeclareClassMetadata({
6523
6707
  alias: "size",
6524
6708
  required: false
6525
6709
  }]
6710
+ }],
6711
+ classes: [{
6712
+ type: i0.Input,
6713
+ args: [{
6714
+ isSignal: true,
6715
+ alias: "classes",
6716
+ required: false
6717
+ }]
6718
+ }],
6719
+ headerElement: [{
6720
+ type: i0.ContentChild,
6721
+ args: ["header", {
6722
+ descendants: false,
6723
+ isSignal: true
6724
+ }]
6725
+ }],
6726
+ footerElement: [{
6727
+ type: i0.ContentChild,
6728
+ args: ["footer", {
6729
+ descendants: false,
6730
+ isSignal: true
6731
+ }]
6732
+ }],
6733
+ panelElement: [{
6734
+ type: i0.ViewChild,
6735
+ args: ["panel", {
6736
+ read: ElementRef,
6737
+ isSignal: true
6738
+ }]
6526
6739
  }]
6527
6740
  }
6528
6741
  });