Taiga UI 5 is out!

DropdownContext CORE

Examples API GitHub

On this page

See also

Dropdown, DropdownSelection, DropdownHover, DropdownOpen

DropdownContext allows to show custom right click context dropdown.

To close dropdown:

  • Use Esc
  • Make mouse left/right click outside of dropdown content
  • Manually toggle tuiDropdown to false using template reference variable (see first example)

Basic

Make right click on this icon ->

    
      
    
    
      <p>
    Make right click on this icon ->
    <tui-icon
        #dropdown="tuiDropdown"
        icon="@tui.settings"
        tuiDropdownContext
        class="icon"
        [tuiDropdown]="content"
    >
        <ng-template #content>
            <span class="text">Nothing special</span>
            <button
                appearance="icon"
                iconStart="@tui.x"
                size="xs"
                tuiIconButton
                type="button"
                (click)="dropdown.toggle(false)"
            >
                Close
            </button>
        </ng-template>
    </tui-icon>
</p>

    
    
      .text {
    display: inline-block;
    margin: 0.4rem 1rem;
}

.icon {
    cursor: context-menu;
}

    

Context menu

Right-click any table row.

character actor
    
      
    
    
      <p>Right-click any table row.</p>

<table tuiTable>
    <thead>
        <tr>
            @for (column of tableColumns; track column) {
                <th tuiTh>
                    {{ column }}
                </th>
            }
        </tr>
    </thead>
    <tbody tuiTbody>
        @for (rowInfo of tableData; track rowInfo) {
            <tr
                #dropdown="tuiDropdown"
                tuiDropdownContext
                [tuiDropdown]="contextMenu"
            >
                @for (value of getObjectValues(rowInfo); track value) {
                    <td tuiTd>
                        {{ value }}
                    </td>
                }
                <ng-template #contextMenu>
                    <tui-data-list
                        role="menu"
                        tuiDataListDropdownManager
                        class="context-menu"
                    >
                        @for (item of menuItems; track item) {
                            <button
                                tuiOption
                                type="button"
                                [iconEnd]="item.iconName"
                                (click)="printToConsole(item.title, rowInfo); dropdown.toggle(false)"
                            >
                                {{ item.title }}
                            </button>
                        }
                        <button
                            iconEnd="@tui.chevron-right"
                            tuiDropdownAlign="end"
                            tuiDropdownSided
                            tuiOption
                            type="button"
                            [tuiDropdown]="nestedMenu"
                        >
                            More
                        </button>
                    </tui-data-list>
                    <ng-template #nestedMenu>
                        <tui-data-list>
                            @for (option of moreOptions; track option) {
                                <button
                                    tuiOption
                                    type="button"
                                >
                                    {{ option }}
                                </button>
                            }
                        </tui-data-list>
                    </ng-template>
                </ng-template>
            </tr>
        }
    </tbody>
</table>

    
    
      @import '@taiga-ui/styles/utils.less';

.context-menu {
    inline-size: 8rem;
}

[tuiTable] {
    inline-size: 100%;
}

[tuiTh],
[tuiTd] {
    border-inline-start: none;
    border-inline-end: none;
}

[tuiTh] {
    border-block-start: none;
}

[tuiTd] {
    font: var(--tui-typography-body-m) !important;
}

    

Report mistake form

    
      
    
    
      <p
    tuiDropdownContext
    [tuiDropdown]="reportForm"
>
    Some text with a mistake. Right-click it.
</p>

<p
    tuiDropdownContext
    [tuiDropdown]="reportForm"
>
    Another text
</p>

<ng-template
    #reportForm
    let-close
>
    <form
        class="container"
        [formGroup]="form"
    >
        <tui-textfield>
            <label tuiLabel>Have you found a mistake?</label>
            <textarea
                formControlName="reportText"
                tuiTextarea
                [max]="3"
                [min]="3"
            ></textarea>
        </tui-textfield>

        <button
            tuiButton
            type="button"
            class="button"
            (click)="report(); close()"
        >
            SEND IT
        </button>
    </form>
</ng-template>

    
    
      .container {
    display: flex;
    inline-size: 20rem;
    margin: 1rem;
    flex-direction: column;
}

.button {
    margin: 1rem auto 0;
}