import { html, css, TemplateResult, CSSResultArray } from 'lit';
import { customElement, property } from 'lit/decorators.js';
import NileElement from '../../internal/nile-element';
import { renderGlyph } from '../../internal/glyph';
import type { ToolbarState } from '../engine/selection-state';
interface EmbedOp {
label: string;
icon?: string;
text?: string;
command: string;
attrs?: Record;
active?: (s: ToolbarState) => boolean;
}
const OPS: EmbedOp[] = [
{
label: 'Align left',
icon: 'format_align_left',
command: 'setEmbedAlign',
attrs: { align: 'left' },
active: s => s.embedAlign === 'left' || s.embedAlign === null,
},
{
label: 'Align center',
icon: 'format_align_middle',
command: 'setEmbedAlign',
attrs: { align: 'center' },
active: s => s.embedAlign === 'center',
},
{
label: 'Align right',
icon: 'format_align_right',
command: 'setEmbedAlign',
attrs: { align: 'right' },
active: s => s.embedAlign === 'right',
},
{ label: 'Delete video', icon: 'ng-trash-01', command: 'deleteEmbed' },
];
/**
* Compact floating bar shown while a video embed is selected — mirrors the
* image menu (align left/center/right, delete). The host positions it;
* operations bubble up as `wysiwyg-command` events.
*/
@customElement('nile-wysiwyg-embed-menu')
export class NileWysiwygEmbedMenu extends NileElement {
@property({ type: Boolean, reflect: true }) open = false;
@property({ attribute: false }) toolbarState?: ToolbarState;
public static get styles(): CSSResultArray {
return [
css`
:host {
font-family: var(
--nile-font-family-sans-serif,
var(--ng-font-family-body, system-ui, -apple-system, sans-serif)
);
position: absolute;
z-index: 15;
display: none;
}
:host([open]) {
display: block;
}
.menu {
display: flex;
gap: 2px;
padding: 4px;
background: var(--nile-wysiwyg-popover-bg, #ffffff);
border: 1px solid var(--nile-colors-neutral-400, #d0d5dd);
border-radius: 8px;
box-shadow: var(--nile-wysiwyg-popover-shadow, 0 4px 12px rgba(16, 24, 40, 0.12));
}
button {
display: inline-flex;
align-items: center;
justify-content: center;
min-width: 26px;
height: 26px;
padding: 0 4px;
border: none;
border-radius: 5px;
background: transparent;
cursor: pointer;
font-size: 12px;
font-weight: 600;
color: var(--nile-colors-neutral-700, #344054);
}
button:hover {
background: var(--nile-colors-neutral-100, #f2f4f7);
}
button[data-active] {
background: var(--nile-colors-primary-50, var(--ng-componentcolors-utility-blue-50, #eff4ff));
color: var(--nile-colors-primary-700, var(--ng-componentcolors-utility-blue-700, #1d4ed8));
}
`,
];
}
public render(): TemplateResult {
const state = this.toolbarState;
return html`
`;
}
}
declare global {
interface HTMLElementTagNameMap {
'nile-wysiwyg-embed-menu': NileWysiwygEmbedMenu;
}
}