agentsclimarketplace

Syncfusion angular popups

Skill syncfusion/angular-ui-components-skills/skills/syncfusion-angular-popups

This repository contains agent prompts for creating skills and organizing AI agent capabilities.

Install
npx -y skills add syncfusion/angular-ui-components-skills --skill syncfusion-angular-popups

Assembled from the repository path, not quoted from the project. Check it against their README if it does not work.

2 things to look at

  • no licenseNo license file was found in the repository. Code published without one is not open source by default, so using it at work is a question for whoever answers licensing questions where you are.
  • 0 stars0 stars. Stars are a popularity signal and not a quality one, but at this level it is likely that nobody has read this closely except its author, and you would be relying on your own review.

What its author says it does

Copied from the file, not written here

Comprehensive guide for implementing Syncfusion Angular popup components including Dialog, Predefined Dialogs and Tooltip. Use this when building modal/modeless dialogs, confirmation popups, forms in dialogs, draggable windows, popovers, tooltips, and overlaid content with custom positioning, animations, WCAG 2.2 accessibility, forms integration, and event handling in Angular applications.

SKILL.md

21.6 KB, as published. Nobody here has run it

Implementing Syncfusion Angular Popups

Dialog

The Dialog component is a window that displays information to the user and is used to get user input. It supports both modal dialogs (blocking parent interaction) and modeless dialogs (allowing parent interaction).

Component Overview

Key Features

  • Modal & Modeless modes - Block or allow parent interaction
  • Templates - Customizable headers, content, and footers
  • Positioning - 9 built-in positions or custom placement
  • Animations - Smooth open/close effects (Fade, Zoom, Slide)
  • Draggable & Resizable - Allow users to move and resize dialogs
  • Forms Integration - Reactive and template-driven forms
  • Accessibility - Full WCAG 2.2 Level AA support with ARIA
  • Keyboard Navigation - Tab, Escape, Enter, and arrow keys
  • Responsive - Full-screen mode on mobile devices

Documentation and Navigation Guide

When you need to implement Dialog features, follow these references:

Getting Started

πŸ“„ Read: references/dialog-getting-started.md

  • Installation and setup in Angular 21+
  • Basic dialog implementation
  • CSS imports and themes
  • Opening and closing dialogs
  • Built-in button support

Dialog Modes & Types

πŸ“„ Read: references/dialog-modal-vs-modeless.md

  • Modal dialog behavior (blocks parent interaction)
  • Modeless dialog behavior (allows parent interaction)
  • Use cases and when to use each mode
  • Toggling between modes
  • Overlay customization and styling

Content & Templates

πŸ“„ Read: references/dialog-templates-and-content.md

  • Header templates and customization
  • Content as strings, HTML, or ng-template
  • Footer templates with buttons
  • Using ng-content for dynamic content
  • Button binding and click events
  • Dynamic button arrays

Positioning & Sizing

πŸ“„ Read: references/dialog-positioning-and-sizing.md

  • Built-in positions (9 locations: Top, Center, Bottom, etc.)
  • Custom positioning with X, Y coordinates
  • Width and height configuration
  • Min/max height constraints
  • Responsive sizing on different screen sizes
  • Full-screen mode on mobile devices

Styling & Customization

πŸ“„ Read: references/dialog-styling-and-customization.md

  • CSS class customization (header, content, footer, overlay)
  • Theme integration (Material, Bootstrap, Tailwind, Fluent)
  • Dark mode support
  • Animation effects (Fade, Zoom, SlideLeft, SlideRight, etc.)
  • Icon customization (close button, resize handles)
  • RTL (Right-to-Left) language support

Accessibility & Forms

πŸ“„ Read: references/dialog-accessibility-and-forms.md

  • WCAG 2.2 Level AA compliance standards
  • ARIA attributes (aria-labelledby, aria-describedby, aria-modal, aria-grabbed)
  • Keyboard navigation patterns (Tab, Shift+Tab, Escape, Enter)
  • Screen reader support and best practices
  • Form validation with FormValidator
  • Reactive forms patterns
  • Template-driven forms patterns
  • Custom validation rules and error handling

Interaction & Events

πŸ“„ Read: references/dialog-interaction-and-events.md

  • Dialog open/close events
  • Draggable dialogs (allow users to move dialogs)
  • Resizable dialogs (allow users to resize)
  • Button click events and handling
  • Content interaction patterns
  • Preventing dialog closure
  • Focus management
  • Dialog lifecycle events

Advanced Patterns

πŸ“„ Read: references/dialog-advanced-patterns.md

  • Nested dialogs (dialog within dialog)
  • Ajax-loaded content dynamically
  • Utility functions for programmatic creation
  • Complex layouts (Rich Text Editor, multi-step forms)
  • Scroll handling and auto-centering
  • Custom event emitters
  • Routing integration patterns

API Reference (Complete)

πŸ“„ Read: references/dialog-api-reference.md

  • Complete Dialog API documentation
  • All valid properties with types and examples
  • All methods (show, hide, refresh, destroy)
  • All events (beforeOpen, beforeClose, drag, resize, etc.)
  • Interfaces and models (AnimationSettingsModel, ButtonPropsModel, etc.)
  • Valid enumerations (DialogEffect, ResizeDirections)
  • Official Syncfusion documentation links

Quick Start Example

Here's a minimal example to open a basic modal dialog:

import { Component, ViewChild } from '@angular/core';
import { DialogModule, DialogComponent } from '@syncfusion/ej2-angular-popups';

@Component({
  selector: 'app-root',
  imports: [DialogModule],
  template: `
    <div id="dialog-container" style="height: 500px;">
      <button class="e-control e-btn" (click)="onOpenDialog()">
        Open Dialog
      </button>
      
      <ejs-dialog 
        #ejDialog
        target="#dialog-container"
        [showCloseIcon]="true"
        width="400px"
        content="This is a Dialog content"
      >
        <ng-template #header>
          <div class="e-dlg-header-content">
            <span>Dialog Title</span>
          </div>
        </ng-template>
      </ejs-dialog>
    </div>
  `
})
export class AppComponent {
  @ViewChild('ejDialog') ejDialog!: DialogComponent;

  onOpenDialog(): void {
    this.ejDialog.show();
  }
}

CSS:

#dialog-container {
  height: 500px;
}

Common Patterns

Pattern 1: Modal Confirmation Dialog

// Create a modal dialog for confirmation
<ejs-dialog 
  [isModal]="true"
  [showCloseIcon]="true"
  width="350px"
  content="Are you sure you want to delete this item?"
>
  <ng-template #footer>
    <button class="e-control e-btn e-primary" (click)="onConfirm()">
      Yes, Delete
    </button>
    <button class="e-control e-btn" (click)="onCancel()">
      Cancel
    </button>
  </ng-template>
</ejs-dialog>

Pattern 2: Dialog with Form (Reactive Forms)

// Dialog containing a reactive form
<ejs-dialog [showCloseIcon]="true" width="450px">
  <form [formGroup]="form">
    <div class="e-dlg-content">
      <input formControlName="name" placeholder="Enter name" />
      <input formControlName="email" placeholder="Enter email" />
    </div>
  </form>
  
  <ng-template #footer>
    <button class="e-control e-btn e-primary" (click)="onSubmit()">
      Submit
    </button>
  </ng-template>
</ejs-dialog>

Pattern 3: Positioned Dialog

// Dialog positioned at a specific location
<ejs-dialog 
  [position]="{ X: 100, Y: 50 }"
  width="400px"
  content="Positioned Dialog"
>
</ejs-dialog>

Key Props Quick Reference

PropertyTypePurposeExample
isModalbooleanBlock parent interaction[isModal]="true"
showCloseIconbooleanShow close button in header[showCloseIcon]="true"
widthstring | numberSet dialog widthwidth="400px"
heightstring | numberSet dialog heightheight="300px"
minHeightstring | numberMinimum height constraint[minHeight]="200"
positionPositionDataModelSet position (X, Y) or preset[position]="{ X: 'center', Y: 'center' }"
targetHTMLElement | stringSet container elementtarget="#container"
contentstring | HTMLElementSet content text or HTMLcontent="Hello"
headerstring | HTMLElementSet header text or elementheader="Title"
buttonsButtonPropsModel[]Add footer buttons[buttons]="buttonArray"
closeOnEscapebooleanClose on Escape key[closeOnEscape]="true"
allowDraggingbooleanEnable header dragging[allowDragging]="true"
enableResizebooleanEnable resizing[enableResize]="true"
resizeHandlesResizeDirections[]Specify resize directions[resizeHandles]="['All']"
cssClassstringCustom CSS class(es)cssClass="custom-dialog"
animationSettingsAnimationSettingsModelConfigure animations[animationSettings]="{ effect: 'FadeZoom' }"
enablePersistencebooleanSave state between reloads[enablePersistence]="true"
zIndexnumberZ-order for layering[zIndex]="1000"

Common Use Cases

  1. Confirmation before delete - Modal dialog asking user to confirm deletion
  2. Form submission - Dialog with form for user to submit data
  3. Alerts and notifications - Display important information to users
  4. Multi-step processes - Use nested dialogs for workflows
  5. Settings panels - Modeless dialog for settings that don't block interaction
  6. Help and guidance - Display help content in a draggable dialog
  7. Loading states - Show progress in a dialog while processing
  8. Error handling - Display error messages in a modal

Related Skills

Predefined Dialogs

This skill covers building alert, confirm, and prompt dialogs using Syncfusion's DialogUtility β€” a zero-template, utility-first approach to displaying modal feedback and user-input dialogs in Angular applications.

Which Dialog Type?

NeedDialog TypeAPI
Warn/inform user, single OKAlertDialogUtility.alert(...)
Ask for confirmation (OK + Cancel)ConfirmDialogUtility.confirm(...)
Collect user input (HTML content + OK + Cancel)PromptDialogUtility.confirm(...) with input in content

Key insight: Angular's predefined dialogs have no separate "prompt" method β€” use DialogUtility.confirm() with custom HTML in the content property to build a prompt pattern.

Quick Start

ng add @syncfusion/ej2-angular-popups
// src/app/app.ts
import { Component } from '@angular/core';
import { DialogModule } from '@syncfusion/ej2-angular-popups';
import { ButtonModule } from '@syncfusion/ej2-angular-buttons';
import { DialogUtility } from '@syncfusion/ej2-popups';

@Component({
  selector: 'app-root',
  standalone: true,
  imports: [DialogModule, ButtonModule],
  template: `
    <button ejs-button cssClass="e-danger" (click)="showAlert()">Alert</button>
    <button ejs-button cssClass="e-success" (click)="showConfirm()" style="margin-left:8px">Confirm</button>
    <button ejs-button [isPrimary]="true" (click)="showPrompt()" style="margin-left:8px">Prompt</button>
  `
})
export class App {
  showAlert(): void {
    DialogUtility.alert({
      title: 'Warning',
      content: 'Disk space is running low.',
      width: '280px'
    });
  }

  showConfirm(): void {
    const dlg = DialogUtility.confirm({
      title: 'Delete Item',
      content: 'Are you sure you want to delete this item?',
      width: '300px',
      okButton: { text: 'Yes', click: () => { dlg.hide(); /* handle confirm */ } },
      cancelButton: { text: 'No', click: () => { dlg.hide(); } }
    });
  }

  showPrompt(): void {
    const dlg = DialogUtility.confirm({
      title: 'Enter Name',
      content: '<p>Your name:</p><input id="nameInput" class="e-input" type="text" placeholder="Type here..." />',
      width: '300px',
      okButton: {
        text: 'Submit',
        click: () => {
          const value = (document.getElementById('nameInput') as HTMLInputElement).value;
          dlg.hide();
          // use value
        }
      },
      cancelButton: { text: 'Cancel', click: () => dlg.hide() }
    });
  }
}
/* styles.css */
@import '../node_modules/@syncfusion/ej2-base/styles/material3.css';
@import '../node_modules/@syncfusion/ej2-icons/styles/material3.css';
@import '../node_modules/@syncfusion/ej2-buttons/styles/material3.css';
@import '../node_modules/@syncfusion/ej2-angular-popups/styles/material3.css';

Common Patterns

Pattern 1 β€” Delete confirmation with icons:

DialogUtility.confirm({
  title: 'Delete Files',
  content: 'Permanently delete selected files?',
  width: '300px',
  okButton: { text: 'Yes', icon: 'e-icons e-check' },
  cancelButton: { text: 'No', icon: 'e-icons e-close' }
});

Pattern 2 β€” Alert with close button + ESC support:

DialogUtility.alert({
  title: 'Session Expired',
  content: 'Your session has expired. Please log in again.',
  width: '300px',
  showCloseIcon: true,
  closeOnEscape: true
});

Pattern 3 β€” Positioned modal confirm:

DialogUtility.confirm({
  title: 'Confirm Action',
  content: 'Submit the form?',
  isModal: true,
  position: { X: 'center', Y: 'center' },
  animationSettings: { effect: 'Zoom' },
  isDraggable: true,
  width: '280px'
});

Key Properties at a Glance

PropertyPurposeDefault
titleDialog header textβ€”
contentBody text or HTML stringβ€”
widthDialog width (px or %)'100%'
isModalOverlay + modal behaviorfalse
isDraggableAllow header drag to repositionfalse
showCloseIconShow Γ— close buttonfalse
closeOnEscapeClose on ESC keyfalse
position{ X, Y } β€” predefined or offsetcenter/center
animationSettings{ effect, duration, delay }Fade, 400ms
okButtonOK button config { text, icon, click }β€”
cancelButtonCancel button config { text, icon, click }β€”
cssClassCustom CSS class on dialog root''
zIndexStacking order1000
openCallback after dialog opensβ€”
closeCallback after dialog closesβ€”

Documentation

Getting Started

πŸ“„ Read: references/getting-started.md

  • Installation and package setup
  • CSS imports and theme options
  • Basic alert, confirm, and prompt examples
  • All DialogUtility option properties

Customization

πŸ“„ Read: references/customization.md

  • Button text and icon customization
  • Show/hide close icon and ESC behavior
  • Custom HTML content in dialogs
  • Programmatic dialog close with hide()

Position and Dimension

πŸ“„ Read: references/position-and-dimension.md

  • Position X/Y values and offset usage
  • Width and height properties
  • Max-width/max-height via cssClass
  • Min-width/min-height via cssClass

Animation and Draggable

πŸ“„ Read: references/animation-and-draggable.md

  • animationSettings effect options (Zoom, Fade, FadeZoom, etc.)
  • Duration and delay configuration
  • isDraggable for all dialog types

Events and Patterns

πŸ“„ Read: references/events-and-patterns.md

  • open and close event callbacks
  • isModal, zIndex, cssClass advanced usage
  • Common real-world patterns (delete confirm, form prompt, info alert)
  • Managing multiple dialog instances

API Reference

πŸ“„ Read: references/api.md

  • Complete DialogUtility.alert() and DialogUtility.confirm() options
  • okButton / cancelButton ButtonArgs properties
  • AnimationSettingsModel properties
  • PositionDataModel properties
  • DialogComponent properties, methods, and events

Tooltip

The Syncfusion Angular Tooltip (ejs-tooltip) displays a pop-up with information or a message when you hover, click, focus, or touch a target element. It supports 12 positions, animations, HTML/template/AJAX content, sticky mode, mouse trailing, and full accessibility compliance.

Navigation Guide

Getting Started

πŸ“„ Read: references/getting-started.md

  • Installation and package setup (ng add @syncfusion/ej2-angular-popups)
  • CSS theme imports
  • Basic single-target tooltip
  • Multi-target tooltip with target property
  • Standalone (Angular 19+) and module-based setup

Content

πŸ“„ Read: references/content.md

  • Static text and HTML string content
  • Template content using ng-template
  • Dynamic content via AJAX/Fetch in beforeRender event
  • Loading HTML elements (iframes, videos) in tooltip
  • enableHtmlParse and enableHtmlSanitizer options

Position & Dimensions

πŸ“„ Read: references/position-and-dimension.md

  • All 12 position values (TopCenter, BottomLeft, etc.)
  • Tip pointer show/hide and position
  • Mouse trailing
  • Offset values (offsetX, offsetY)
  • Width, height, and scroll mode
  • Window collision handling

Open Modes

πŸ“„ Read: references/open-mode.md

  • opensOn: Auto, Hover, Click, Focus, Custom
  • Combining multiple open modes
  • Custom mode with programmatic open()/close()
  • Sticky mode (isSticky)
  • Open/close delay

Animation

πŸ“„ Read: references/animation.md

  • animation property with open/close settings
  • All supported animation effects
  • Applying animations via open()/close() methods
  • Custom transition effects

Customization & Style

πŸ“„ Read: references/customization-and-style.md

  • cssClass for custom styles
  • CSS class reference for tooltip structure
  • Tip pointer customization
  • Fancy tips (curved, bubble)
  • SVG and canvas tooltips
  • Tooltips on disabled elements
  • Container, RTL, htmlAttributes

Accessibility

πŸ“„ Read: references/accessibility.md

  • WCAG 2.2, Section 508 compliance
  • WAI-ARIA attributes
  • Keyboard navigation
  • Screen reader support

API Reference

πŸ“„ Read: references/api.md

  • All properties, methods, and events
  • Type definitions and defaults
  • TooltipEventArgs, AnimationModel, TooltipAnimationSettings
  • Position, TipPointerPosition, and Effect enumerations

Quick Start

ng add @syncfusion/ej2-angular-popups
// src/app/app.ts (Angular 19+ standalone)
import { Component, ViewEncapsulation } from '@angular/core';
import { TooltipModule } from '@syncfusion/ej2-angular-popups';

@Component({
  standalone: true,
  imports: [TooltipModule],
  selector: 'app-root',
  encapsulation: ViewEncapsulation.None,
  template: `
    <ejs-tooltip content="Hello, I am a Tooltip!" position="BottomCenter">
      <button>Hover me</button>
    </ejs-tooltip>
  `
})
export class App {}
/* styles.css */
@import "@syncfusion/ej2-base/styles/material3.css";
@import "@syncfusion/ej2-angular-buttons/styles/material3.css";
@import "@syncfusion/ej2-angular-popups/styles/material3.css";

Common Patterns

Multi-target tooltip (single instance)

<!-- Wraps a container; target selector picks which children get tooltips -->
<ejs-tooltip target=".has-tip">
  <div id="container">
    <button class="has-tip" title="Save your work">Save</button>
    <button class="has-tip" title="Delete selected item">Delete</button>
    <button>No tooltip here</button>
  </div>
</ejs-tooltip>

Tooltip that opens on click

<ejs-tooltip content="Clicked!" opensOn="Click" position="RightCenter">
  <button>Click me</button>
</ejs-tooltip>

Sticky tooltip with close button

<ejs-tooltip content="I stay until you close me." [isSticky]="true">
  <span>Hover and pin me</span>
</ejs-tooltip>

HTML content tooltip

public htmlContent: string = '<b>Bold</b> and <i>italic</i> text with a <a href="#">link</a>.';
<ejs-tooltip [content]="htmlContent">
  <button>Rich content</button>
</ejs-tooltip>

Programmatic open/close (custom mode)

@ViewChild('tooltip') tooltip!: TooltipComponent;

openTip(): void {
  this.tooltip.open(this.tooltip.element);
}
closeTip(): void {
  this.tooltip.close();
}
<ejs-tooltip #tooltip content="Custom trigger" opensOn="Custom">
  <span>Target</span>
</ejs-tooltip>
<button (click)="openTip()">Show</button>
<button (click)="closeTip()">Hide</button>

Key Properties at a Glance

PropertyTypeDefaultPurpose
contentstring | HTMLElementβ€”Tooltip content
positionPosition'TopCenter'Where tooltip appears
opensOnstring'Auto'Trigger: Auto/Hover/Click/Focus/Custom
isStickybooleanfalseKeep open until manually closed
mouseTrailbooleanfalseFollow mouse pointer
openDelaynumber0Delay (ms) before opening
closeDelaynumber0Delay (ms) before closing
animationAnimationModelFadeIn/FadeOut 150msOpen/close animation
targetstringβ€”Selector for multi-target
cssClassstringnullCustom CSS class
showTipPointerbooleantrueShow/hide arrow tip
width / heightstring | number'auto'Dimensions

For full property, method, and event reference, read references/api.md.

Keep looking

Skills are one crate of 328,083. Ordering is by how many stacks a row turns up in, so the top of any crate is what has actually been picked rather than what has the most stars.