1.0.2 • Published 7 months ago

ngx-sheet-modal v1.0.2

Weekly downloads
-
License
MIT
Repository
github
Last release
7 months ago

ngx-sheet-modal

Demo

Ngx Sheet Modal

Demo and Full documentation

DEMO AND DOCUMENTATION OFFICIAL WEBSITE

Description

ngx-sheet-modal is an Angular component designed to provide a sheet-style modal, which can be triggered from any part of the UI. The modal supports drag-and-drop functionality, smooth transitions, and flexible configuration to allow users to close the modal through various triggers like a flick gesture or a manual close button. It integrates seamlessly with Angular's reactive forms and is ideal for managing product, order, or customer data in a sleek and interactive way.

Key Features

  • Drag-and-Drop Support: Move the sheet modal smoothly with a touch of a finger or mouse drag.
  • Flick-to-Close: Close the modal via a flick-down gesture when enabled.
  • Highly Configurable: Configure the sheet modal's behavior, such as close actions, threshold for flick gestures, and more.
  • Seamless Integration: Easily integrates with your Angular project, supporting both form-based and interactive UIs.

Technologies Used

  • Angular 18: Frontend framework for building dynamic, component-based applications.
  • NgRx: State management library for handling the application state (optional based on project needs).

Installation

npm i ngx-sheet-modal

Basic usage

async openSheet() {
    const sheetRef = this.sheetService.openSheet(MyComponentComponent, {
      size: 'xs', 
      sheetSize: 'md',
      maxSheetHeight: 'lg',
      placement: 'center',
      closeButton: true
    });
    // Accesing MyComponentComponent instance
    const componentInstance = await firstValueFrom(sheetRef.childInstanceReady);
    componentInstance.title = "This is my new title"
    // Passing the modal Ref to the child component to give it the power of close the modal
    componentInstance.modalRef = sheetRef;
  }

Sheet API

The SheetConfig interface is used to configure the behavior and appearance of the sheet modal. Below is a table summarizing the available options and their descriptions:

PropertyTypeDescriptionDefaultPossible Values
size'xs', 'sm', 'md', 'lg', 'xl'Defines the size of the modal for desktop devices.'md''xs', 'sm', 'md', 'lg', 'xl'
sheetSize'xs', 'sm', 'md', 'lg', 'xl'Defines the size of the sheet for mobile devices.'md''xs', 'sm', 'md', 'lg', 'xl'
placement'bottom', 'top', 'center'Specifies where the sheet modal should appear on the screen (e.g., top, bottom, or center).'bottom''bottom', 'top', 'center'
maxSheetHeight'xs', 'sm', 'md', 'lg', 'xl'Defines the maximum height of the sheet for mobile devices modal.'lg''xs', 'sm', 'md', 'lg', 'xl'
backdropClosebooleanIf true, the modal can be closed by clicking on the backdrop.falsetrue, false
lockBodyScrollbooleanIf true, body scroll is locked when the modal is open.truetrue, false
closeButtonIconstringThe icon to be used for the close button.SVG close iconString (e.g., <i class="ri-close-large-line"></i>, 'x')
backdropIntensitynumberDefines the intensity of the backdrop. Higher values make the backdrop darker.0.70 to 1
resizablebooleanWhether the sheet modal is resizable (Only for mobile devices).truetrue, false
dragIndicatorbooleanIf true, a draggable indicator will be shown to indicate the sheet can be moved.truetrue, false
closeButtonbooleanIf true, a close button will be displayed in the sheet modal.truetrue, false
backgroundScale{ enabled: boolean, rootBackgroundColor: string, bodyBackgroundColor: string }EXPERIMENTAL NOT RECOMMEND TO USE IT - Configures background scaling when the modal is open, including background color properties.{ enabled: true, rootBackgroundColor: 'white', bodyBackgroundColor: 'black' }{ enabled: boolean, rootBackgroundColor: string, bodyBackgroundColor: string }
styles{ backdropClasses?: string, sheetClasses?: string, closeButtonClasses?: string, allowAnimations?: boolean }Customizes styles for the backdrop and sheet, including optional animations.undefinedObject with optional properties for classes and animations
closeOnflickDown{ enabled?: boolean, flickThreshold: number }Configures the flick-to-close feature. If enabled, the modal will close when a flick-down gesture exceeds the threshold.{ enabled: true, flickThreshold: 0.5 }{ enabled: boolean, flickThreshold: number }

Notes:

  • size and sheetSize can be independently configured, meaning the modal and the mobile sheet can have different sizes.
  • maxSheetHeight ensures that the mobile sheet does not extend beyond the specified height.
  • backgroundScale applies a scaling effect to the background with color options when the modal is visible.
  • closeOnflickDown provides a unique feature for closing the modal based on swipe gestures, ideal for mobile users.

Prerequisites

Before starting, ensure you have the following installed:

Clone the Repository

git clone https://github.com/yourusername/ngx-sheet-modal.git
cd ngx-sheet-modal

Contributing

Contributions are always welcome! PRs should be well tested and contains all the integration tests. Coverage should be always 100%. See contributing.md for ways to get started. Please be kind and respectful.