@crowdfarming/oliva-ds 1.14.0 → 1.15.0-rc.2

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.
@@ -4718,9 +4718,99 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "19.2.7", ngImpor
4718
4718
  type: Input
4719
4719
  }] } });
4720
4720
 
4721
+ class ModalComponent {
4722
+ isOpen = input(false);
4723
+ size = input('md');
4724
+ title = input();
4725
+ description = input();
4726
+ showCloseButton = input(true);
4727
+ primaryButton = input({
4728
+ text: 'Primary',
4729
+ variant: 'primary',
4730
+ });
4731
+ secondaryButton = input({
4732
+ text: 'Secondary',
4733
+ variant: 'secondary',
4734
+ });
4735
+ closed = output();
4736
+ primaryButtonClicked = output();
4737
+ secondaryButtonClicked = output();
4738
+ // Internal state
4739
+ isVisible = signal(false);
4740
+ constructor() {
4741
+ // Watch for isOpen changes to trigger animations
4742
+ effect(() => {
4743
+ if (this.isOpen()) {
4744
+ this.open();
4745
+ }
4746
+ else {
4747
+ this.isVisible.set(false);
4748
+ }
4749
+ });
4750
+ }
4751
+ // Computed properties
4752
+ classes = computed(() => {
4753
+ const c = [
4754
+ 'c-modal',
4755
+ `c-modal--${this.size()}`,
4756
+ this.isOpen() ? 'c-modal--open' : '',
4757
+ this.isVisible() ? 'c-modal--visible' : '',
4758
+ ];
4759
+ return c.filter(Boolean).join(' ');
4760
+ });
4761
+ backdropClasses = computed(() => {
4762
+ const c = [
4763
+ 'c-modal__backdrop',
4764
+ this.isOpen() ? 'c-modal__backdrop--open' : '',
4765
+ this.isVisible() ? 'c-modal__backdrop--visible' : '',
4766
+ ];
4767
+ return c.filter(Boolean).join(' ');
4768
+ });
4769
+ contentClasses = computed(() => {
4770
+ const c = [
4771
+ 'c-modal__content',
4772
+ `c-modal__content--${this.size()}`,
4773
+ this.isOpen() ? 'c-modal__content--open' : '',
4774
+ this.isVisible() ? 'c-modal__content--visible' : '',
4775
+ ];
4776
+ return c.filter(Boolean).join(' ');
4777
+ });
4778
+ // Methods
4779
+ open() {
4780
+ this.isVisible.set(true);
4781
+ }
4782
+ close() {
4783
+ this.isVisible.set(false);
4784
+ // Wait for animation to complete before emitting
4785
+ setTimeout(() => {
4786
+ this.closed.emit();
4787
+ }, 200);
4788
+ }
4789
+ onBackdropClick(event) {
4790
+ if (event.target === event.currentTarget) {
4791
+ this.close();
4792
+ }
4793
+ }
4794
+ onPrimaryButtonClick() {
4795
+ this.primaryButtonClicked.emit();
4796
+ }
4797
+ onSecondaryButtonClick() {
4798
+ this.secondaryButtonClicked.emit();
4799
+ }
4800
+ onCloseButtonClick() {
4801
+ this.close();
4802
+ }
4803
+ static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "19.2.7", ngImport: i0, type: ModalComponent, deps: [], target: i0.ɵɵFactoryTarget.Component });
4804
+ static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "19.2.7", type: ModalComponent, isStandalone: true, selector: "lib-modal", inputs: { isOpen: { classPropertyName: "isOpen", publicName: "isOpen", isSignal: true, isRequired: false, transformFunction: null }, size: { classPropertyName: "size", publicName: "size", isSignal: true, isRequired: false, transformFunction: null }, title: { classPropertyName: "title", publicName: "title", isSignal: true, isRequired: false, transformFunction: null }, description: { classPropertyName: "description", publicName: "description", isSignal: true, isRequired: false, transformFunction: null }, showCloseButton: { classPropertyName: "showCloseButton", publicName: "showCloseButton", isSignal: true, isRequired: false, transformFunction: null }, primaryButton: { classPropertyName: "primaryButton", publicName: "primaryButton", isSignal: true, isRequired: false, transformFunction: null }, secondaryButton: { classPropertyName: "secondaryButton", publicName: "secondaryButton", isSignal: true, isRequired: false, transformFunction: null } }, outputs: { closed: "closed", primaryButtonClicked: "primaryButtonClicked", secondaryButtonClicked: "secondaryButtonClicked" }, ngImport: i0, template: "@if (isOpen()) {\n<div class=\"c-modal\" [ngClass]=\"classes()\">\n <!-- Backdrop -->\n <div\n class=\"c-modal__backdrop\"\n [ngClass]=\"backdropClasses()\"\n (click)=\"onBackdropClick($event)\"\n (keydown.escape)=\"close()\"\n tabindex=\"0\"\n role=\"button\"\n aria-label=\"Close modal\"\n ></div>\n\n <!-- Modal Content -->\n <div\n class=\"c-modal__content\"\n [ngClass]=\"contentClasses()\"\n (keydown.escape)=\"close()\"\n tabindex=\"0\"\n role=\"dialog\"\n [attr.aria-labelledby]=\"title() ? 'modal-title' : null\"\n [attr.aria-describedby]=\"description() ? 'modal-description' : null\"\n >\n <!-- Header -->\n @if (title() || showCloseButton()) {\n <div class=\"c-modal__header\">\n @if (title()) {\n <h2 id=\"modal-title\" class=\"c-modal__title\">{{ title() }}</h2>\n } @if (showCloseButton()) {\n <lib-button-icon\n iconName=\"x-regular\"\n size=\"sm\"\n variant=\"neutral\"\n (click)=\"onCloseButtonClick()\"\n aria-label=\"Close modal\"\n ></lib-button-icon>\n }\n </div>\n }\n\n <!-- Description -->\n @if (description()) {\n <div id=\"modal-description\" class=\"c-modal__description\">\n <p>{{ description() }}</p>\n </div>\n }\n\n <!-- Body Content -->\n <div class=\"c-modal__body\">\n <ng-content></ng-content>\n </div>\n\n <!-- Footer with Buttons -->\n @if (primaryButton() || secondaryButton()) {\n <div class=\"c-modal__footer\">\n @if (secondaryButton()) {\n <lib-button\n [text]=\"secondaryButton()!.text\"\n [variant]=\"secondaryButton()!.variant\"\n [disabled]=\"secondaryButton()!.disabled ?? false\"\n [loading]=\"secondaryButton()!.loading ?? false\"\n [fullWidth]=\"true\"\n (clicked)=\"onSecondaryButtonClick()\"\n class=\"c-modal__button c-modal__button--secondary\"\n ></lib-button>\n } @if (primaryButton()) {\n <lib-button\n [text]=\"primaryButton()!.text\"\n [variant]=\"primaryButton()!.variant\"\n [disabled]=\"primaryButton()!.disabled ?? false\"\n [loading]=\"primaryButton()!.loading ?? false\"\n [fullWidth]=\"true\"\n (clicked)=\"onPrimaryButtonClick()\"\n class=\"c-modal__button c-modal__button--primary\"\n ></lib-button>\n }\n </div>\n }\n </div>\n</div>\n}\n", styles: [".c-modal{position:fixed;top:0;left:0;width:100%;height:100%;z-index:var(--base-modal);display:flex;align-items:center;justify-content:center;opacity:0;visibility:hidden;transition:opacity .2s ease-in-out,visibility .2s ease-in-out}.c-modal__content{width:100%}.c-modal__content--sm{max-width:416px}.c-modal__content--md{max-width:636px}.c-modal__content--lg{max-width:856px}.c-modal--open,.c-modal--visible{opacity:1;visibility:visible}@media (max-width: 768px){.c-modal{align-items:flex-end}.c-modal--sm .c-modal__content,.c-modal--md .c-modal__content{position:fixed;bottom:0;left:0;right:0;width:100%;max-width:none;transform:translateY(100%);transition:transform .3s ease-in-out}.c-modal--sm.c-modal--visible .c-modal__content,.c-modal--md.c-modal--visible .c-modal__content{transform:translateY(0)}.c-modal--lg{align-items:stretch}.c-modal--lg .c-modal__content{position:fixed;inset:0;width:100%;height:100%;max-width:none;border-radius:0;transform:scale(.95);transition:transform .3s ease-in-out}.c-modal--lg.c-modal--visible .c-modal__content{transform:scale(1)}}.c-modal__backdrop{position:absolute;top:0;left:0;width:100%;height:100%;background-color:var(--color-effect-overlay);opacity:0;transition:opacity .2s ease-in-out}.c-modal__backdrop--open,.c-modal__backdrop--visible{opacity:1}.c-modal__content{background-color:var(--color-core-background-surface-floating);box-shadow:var(--elevation-floating);overflow:hidden;display:flex;flex-direction:column}.c-modal__content--open,.c-modal__content--visible{transform:scale(1)}.c-modal__header{display:flex;align-items:center;justify-content:space-between;padding:var(--space-container-padding-sm);border-bottom:1px solid var(--color-core-border-soft);gap:var(--space-container-gap-sm)}.c-modal__title{margin:0;font-family:var(--typography-label-lg-default-family),sans-serif;font-weight:var(--typography-label-lg-default-weight);font-size:var(--typography-label-lg-default-size);line-height:var(--typography-label-lg-default-line-height);color:var(--color-core-content-default);flex:1}.c-modal__close-button{background:none;border:none;cursor:pointer;padding:var(--space-component-padding-xs);border-radius:var(--size-border-radius-sm);display:flex;align-items:center;justify-content:center;color:var(--color-core-content-soft);transition:all .2s ease-in-out}.c-modal__close-button:hover{background-color:var(--color-core-background-neutral-soft);color:var(--color-core-content-default)}.c-modal__close-button:focus-visible{outline:2px solid var(--color-core-border-default);outline-offset:2px}.c-modal__description{padding:var(--space-component-padding-lg);border-bottom:1px solid var(--color-core-border-soft)}.c-modal__description p{margin:0;font-family:var(--typography-body-md-family),sans-serif;font-weight:var(--typography-body-md-weight);font-size:var(--typography-body-md-size);line-height:var(--typography-body-md-line-height);color:var(--color-core-content-soft)}@media (max-width: 768px){.c-modal__description{padding:var(--space-component-padding-md)}}.c-modal__body{flex:1;padding:var(--space-component-padding-lg);overflow-y:auto}@media (max-width: 768px){.c-modal__body{padding:var(--space-component-padding-md)}}.c-modal__footer{display:flex;gap:var(--space-component-gap-md);padding:var(--space-component-padding-lg);border-top:1px solid var(--color-core-border-soft);background-color:var(--color-core-background-neutral-soft)}@media (max-width: 768px){.c-modal__footer{flex-direction:column;padding:var(--space-component-padding-md);gap:var(--space-component-gap-sm)}}.c-modal__button{flex:1}@media (max-width: 768px){.c-modal__button{width:100%}}.c-modal__button--primary{order:2}.c-modal__button--secondary{order:1}\n"], dependencies: [{ kind: "directive", type: NgClass, selector: "[ngClass]", inputs: ["class", "ngClass"] }, { kind: "component", type: ButtonComponent, selector: "lib-button", inputs: ["text", "ariaLabel", "disabled", "loading", "skeletonActive", "variant", "size", "loadingText", "fullWidth", "iconBefore", "iconAfter"], outputs: ["clicked"] }, { kind: "component", type: ButtonIconComponent, selector: "lib-button-icon", inputs: ["ariaLabel", "variant", "size", "iconName", "disabled", "loading", "skeletonActive"], outputs: ["clicked"] }] });
4805
+ }
4806
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "19.2.7", ngImport: i0, type: ModalComponent, decorators: [{
4807
+ type: Component,
4808
+ args: [{ selector: 'lib-modal', imports: [NgClass, ButtonComponent, ButtonIconComponent], template: "@if (isOpen()) {\n<div class=\"c-modal\" [ngClass]=\"classes()\">\n <!-- Backdrop -->\n <div\n class=\"c-modal__backdrop\"\n [ngClass]=\"backdropClasses()\"\n (click)=\"onBackdropClick($event)\"\n (keydown.escape)=\"close()\"\n tabindex=\"0\"\n role=\"button\"\n aria-label=\"Close modal\"\n ></div>\n\n <!-- Modal Content -->\n <div\n class=\"c-modal__content\"\n [ngClass]=\"contentClasses()\"\n (keydown.escape)=\"close()\"\n tabindex=\"0\"\n role=\"dialog\"\n [attr.aria-labelledby]=\"title() ? 'modal-title' : null\"\n [attr.aria-describedby]=\"description() ? 'modal-description' : null\"\n >\n <!-- Header -->\n @if (title() || showCloseButton()) {\n <div class=\"c-modal__header\">\n @if (title()) {\n <h2 id=\"modal-title\" class=\"c-modal__title\">{{ title() }}</h2>\n } @if (showCloseButton()) {\n <lib-button-icon\n iconName=\"x-regular\"\n size=\"sm\"\n variant=\"neutral\"\n (click)=\"onCloseButtonClick()\"\n aria-label=\"Close modal\"\n ></lib-button-icon>\n }\n </div>\n }\n\n <!-- Description -->\n @if (description()) {\n <div id=\"modal-description\" class=\"c-modal__description\">\n <p>{{ description() }}</p>\n </div>\n }\n\n <!-- Body Content -->\n <div class=\"c-modal__body\">\n <ng-content></ng-content>\n </div>\n\n <!-- Footer with Buttons -->\n @if (primaryButton() || secondaryButton()) {\n <div class=\"c-modal__footer\">\n @if (secondaryButton()) {\n <lib-button\n [text]=\"secondaryButton()!.text\"\n [variant]=\"secondaryButton()!.variant\"\n [disabled]=\"secondaryButton()!.disabled ?? false\"\n [loading]=\"secondaryButton()!.loading ?? false\"\n [fullWidth]=\"true\"\n (clicked)=\"onSecondaryButtonClick()\"\n class=\"c-modal__button c-modal__button--secondary\"\n ></lib-button>\n } @if (primaryButton()) {\n <lib-button\n [text]=\"primaryButton()!.text\"\n [variant]=\"primaryButton()!.variant\"\n [disabled]=\"primaryButton()!.disabled ?? false\"\n [loading]=\"primaryButton()!.loading ?? false\"\n [fullWidth]=\"true\"\n (clicked)=\"onPrimaryButtonClick()\"\n class=\"c-modal__button c-modal__button--primary\"\n ></lib-button>\n }\n </div>\n }\n </div>\n</div>\n}\n", styles: [".c-modal{position:fixed;top:0;left:0;width:100%;height:100%;z-index:var(--base-modal);display:flex;align-items:center;justify-content:center;opacity:0;visibility:hidden;transition:opacity .2s ease-in-out,visibility .2s ease-in-out}.c-modal__content{width:100%}.c-modal__content--sm{max-width:416px}.c-modal__content--md{max-width:636px}.c-modal__content--lg{max-width:856px}.c-modal--open,.c-modal--visible{opacity:1;visibility:visible}@media (max-width: 768px){.c-modal{align-items:flex-end}.c-modal--sm .c-modal__content,.c-modal--md .c-modal__content{position:fixed;bottom:0;left:0;right:0;width:100%;max-width:none;transform:translateY(100%);transition:transform .3s ease-in-out}.c-modal--sm.c-modal--visible .c-modal__content,.c-modal--md.c-modal--visible .c-modal__content{transform:translateY(0)}.c-modal--lg{align-items:stretch}.c-modal--lg .c-modal__content{position:fixed;inset:0;width:100%;height:100%;max-width:none;border-radius:0;transform:scale(.95);transition:transform .3s ease-in-out}.c-modal--lg.c-modal--visible .c-modal__content{transform:scale(1)}}.c-modal__backdrop{position:absolute;top:0;left:0;width:100%;height:100%;background-color:var(--color-effect-overlay);opacity:0;transition:opacity .2s ease-in-out}.c-modal__backdrop--open,.c-modal__backdrop--visible{opacity:1}.c-modal__content{background-color:var(--color-core-background-surface-floating);box-shadow:var(--elevation-floating);overflow:hidden;display:flex;flex-direction:column}.c-modal__content--open,.c-modal__content--visible{transform:scale(1)}.c-modal__header{display:flex;align-items:center;justify-content:space-between;padding:var(--space-container-padding-sm);border-bottom:1px solid var(--color-core-border-soft);gap:var(--space-container-gap-sm)}.c-modal__title{margin:0;font-family:var(--typography-label-lg-default-family),sans-serif;font-weight:var(--typography-label-lg-default-weight);font-size:var(--typography-label-lg-default-size);line-height:var(--typography-label-lg-default-line-height);color:var(--color-core-content-default);flex:1}.c-modal__close-button{background:none;border:none;cursor:pointer;padding:var(--space-component-padding-xs);border-radius:var(--size-border-radius-sm);display:flex;align-items:center;justify-content:center;color:var(--color-core-content-soft);transition:all .2s ease-in-out}.c-modal__close-button:hover{background-color:var(--color-core-background-neutral-soft);color:var(--color-core-content-default)}.c-modal__close-button:focus-visible{outline:2px solid var(--color-core-border-default);outline-offset:2px}.c-modal__description{padding:var(--space-component-padding-lg);border-bottom:1px solid var(--color-core-border-soft)}.c-modal__description p{margin:0;font-family:var(--typography-body-md-family),sans-serif;font-weight:var(--typography-body-md-weight);font-size:var(--typography-body-md-size);line-height:var(--typography-body-md-line-height);color:var(--color-core-content-soft)}@media (max-width: 768px){.c-modal__description{padding:var(--space-component-padding-md)}}.c-modal__body{flex:1;padding:var(--space-component-padding-lg);overflow-y:auto}@media (max-width: 768px){.c-modal__body{padding:var(--space-component-padding-md)}}.c-modal__footer{display:flex;gap:var(--space-component-gap-md);padding:var(--space-component-padding-lg);border-top:1px solid var(--color-core-border-soft);background-color:var(--color-core-background-neutral-soft)}@media (max-width: 768px){.c-modal__footer{flex-direction:column;padding:var(--space-component-padding-md);gap:var(--space-component-gap-sm)}}.c-modal__button{flex:1}@media (max-width: 768px){.c-modal__button{width:100%}}.c-modal__button--primary{order:2}.c-modal__button--secondary{order:1}\n"] }]
4809
+ }], ctorParameters: () => [] });
4810
+
4721
4811
  /**
4722
4812
  * Generated bundle index. Do not edit.
4723
4813
  */
4724
4814
 
4725
- export { AccordionComponent, AlertComponent, ArrowsComponent, AvatarComponent, BadgeComponent, ButtonComponent, ButtonIconComponent, ButtonSetComponent, CheckboxComponent, CheckboxGroupComponent, ChipsComponent, DesignTokensComponent, HelperTextComponent, IconComponent, InputDateComponent, InputLabelComponent, InputNumberComponent, InputPaymentComponent, InputSearchComponent, InputUploadComponent, LinkComponent, PaginationComponent, PasswordInputComponent, RadioComponent, RadioGroupComponent, SegmentedControlComponent, SelectComponent, SocialLoginComponent, SpinnerComponent, SwitchComponent, TabsComponent, TagComponent, TextInputComponent, TextareaComponent, ThumbnailComponent, TileComponent, ToastComponent, TooltipComponent };
4815
+ export { AccordionComponent, AlertComponent, ArrowsComponent, AvatarComponent, BadgeComponent, ButtonComponent, ButtonIconComponent, ButtonSetComponent, CheckboxComponent, CheckboxGroupComponent, ChipsComponent, DesignTokensComponent, HelperTextComponent, IconComponent, InputDateComponent, InputLabelComponent, InputNumberComponent, InputPaymentComponent, InputSearchComponent, InputUploadComponent, LinkComponent, ModalComponent, PaginationComponent, PasswordInputComponent, RadioComponent, RadioGroupComponent, SegmentedControlComponent, SelectComponent, SocialLoginComponent, SpinnerComponent, SwitchComponent, TabsComponent, TagComponent, TextInputComponent, TextareaComponent, ThumbnailComponent, TileComponent, ToastComponent, TooltipComponent };
4726
4816
  //# sourceMappingURL=crowdfarming-oliva-ds.mjs.map