import '../nui-icon/nui-icon.js';
import { html, nothing, type TemplateResult } from 'lit';
import { styleMap } from 'lit/directives/style-map.js';
import type { NuiType } from '../../types/nui-type.js';
export interface NuiPopoverViewState {
buttonText: string;
icon: string;
src: string;
buttonClass: string;
buttonStyle: string;
popoverClass: string;
position: 'top' | 'bottom' | 'left' | 'right';
nuiType: NuiType;
open: boolean;
}
export interface PopoverRenderHandlers {
onToggle: () => void;
}
function parseStyleString(styleStr: string): Record {
const result: Record = {};
if (!styleStr) {
return result;
}
const rules = styleStr.split(';');
for (const rule of rules) {
const trimmed = rule.trim();
if (!trimmed) {
continue;
}
const colonIdx = trimmed.indexOf(':');
if (colonIdx === -1) {
continue;
}
const key = trimmed.slice(0, colonIdx).trim();
const val = trimmed.slice(colonIdx + 1).trim();
if (key && val) {
result[key] = val;
}
}
return result;
}
export function renderPopover(
state: NuiPopoverViewState,
handlers: PopoverRenderHandlers,
): TemplateResult {
const parsedButtonStyle = parseStyleString(state.buttonStyle);
const getToggleButtonClass = () => {
return ['nui-popover-toggle', state.buttonClass].filter(Boolean).join(' ');
};
const getPanelClass = () => {
return ['nui-popover-panel', state.position, state.popoverClass]
.filter(Boolean)
.join(' ');
};
return html`
`;
}