var __decorate = (this && this.__decorate) || function (decorators, target, key, desc) {
    var c = arguments.length, r = c < 3 ? target : desc === null ? desc = Object.getOwnPropertyDescriptor(target, key) : desc, d;
    if (typeof Reflect === "object" && typeof Reflect.decorate === "function") r = Reflect.decorate(decorators, target, key, desc);
    else for (var i = decorators.length - 1; i >= 0; i--) if (d = decorators[i]) r = (c < 3 ? d(r) : c > 3 ? d(target, key, r) : d(target, key)) || r;
    return c > 3 && r && Object.defineProperty(target, key, r), r;
};
var __metadata = (this && this.__metadata) || function (k, v) {
    if (typeof Reflect === "object" && typeof Reflect.metadata === "function") return Reflect.metadata(k, v);
};
import { LitElement, html, css, property, } from 'lit-element';
// This decorator defines the element.
export class Callout extends LitElement {
    constructor() {
        super(...arguments);
        // This decorator creates a property accessor that triggers rendering and
        // an observed attribute.
        this.mood = 'great';
    }
    // Render element DOM by returning a `lit-html` template.
    render() {
        return html `<div>
      <div class="nb">N. B.</div>
      <slot name="title"></slot>
      <div class="hr">n.b.n.b.n.b.n.b.n.b.n.b.n.b.n.b.n.b.n.b.n.b.n.b.n.b.n.b.n.b.n.b.n.b.n.b.n.b.n.b.n.b.n.b.n.b.n.b.n.b.n.b.n.b.n.b.n.b.n.b.n.b.n.b.n.b.n.b.n.b.n.b.n.b.n.b.n.b.n.b.n.b.n.b.n.b.n.b.n.b.n.b.n.b.n.b.n.b.n.b.n.b.n.b.n.b.n.b.n.b.n.b.n.b.n.b.n.b.n.b.n.b.n.b.n.b.n.b.n.b.n.b.n.b.n.b.n.b.n.b.n.b.n.b.n.b.n.b.n.b.n.b.n.b.n.b.n.b.n.b.n.b.n.b.n.b.n.b.n.b.n.b.n.b.n.b.n.b.n.b.n.b.n.b.n.b.n.b.n.b.n.b.n.b.n.b.n.b.n.b.n.b.n.b.n.b.n.b.n.b.n.b.n.b.n.b.n.b.n.b.n.b.n.b.n.b.n.b.n.b.n.b.n.b.n.b.n.b.n.b.n.b.n.b.n.b.n.b.n.b.n.b.n.b.n.b.n.b.n.b.n.b.n.b.n.b.n.b.n.b.n.b.n.b.n.b.n.b.n.b.n.b.n.b.n.b.n.b.n.b.n.b.n.b.n.b.n.b.n.b.n.b.n.b.n.b.n.b.n.b.n.b.n.b.n.b.n.b.n.b.n.b.n.b.n.b.n.b.n.b.n.b.n.b.n.b.n.b.n.b.n.b.n.b.n.b.n.b.n.b.n.b.n.b.n.b.n.b.n.b.n.b.n.b.n.b.n.b.n.b.</div>
      <slot name="body"></slot>
    </div>`;
    }
}
Callout.styles = css `
    :host {
      background: lightgray;
      border: 1px solid red;
      display: block;
      padding: 1em;
    }
    [name="title"] {
      font-weight: 900;

    }
    [name="title"] * {
      margin: 0;
    }
    .hr {
      white-space: nowrap;
      overflow: hidden;
      font-size: .4em;
      user-select: none;
    }
    .nb {
      color: red;
      user-select: none;
    }
    span {
      color: green;
    }`;
__decorate([
    property(),
    __metadata("design:type", Object)
], Callout.prototype, "mood", void 0);
const defaultOptions = {
    name: 'callout',
    title: 'Callout',
    tag: 'ARENA-CALLOUT',
    attributes: [],
    shortcut: 'Alt + KeyC',
    hint: 'c',
    command: 'add-callout',
    component: 'arena-callout',
    marks: [
        {
            tag: 'ARENA-CALLOUT',
            attributes: [],
        },
    ],
};
const calloutPlugin = (opts) => ({
    register(textarena) {
        const { name, icon, title, tag, attributes, shortcut, hint, command, component, marks, } = Object.assign(Object.assign({}, defaultOptions), (opts || {}));
        if (!customElements.get(component)) {
            customElements.define(component, Callout);
        }
        const paragraph = textarena.getDefaultTextArena();
        if (!paragraph) {
            throw new Error('Default Arena for text not found');
        }
        const allowedArenas = textarena.getSimpleArenas();
        const calloutBodyContainer = textarena.registerArena({
            name: 'callout-body-container',
            tag: 'ARENA-CALLOUT-BODY',
            attributes: [
                'slot=body',
            ],
            hasChildren: true,
            allowedArenas,
            arenaForText: paragraph,
        }, [
            {
                tag: 'ARENA-CALLOUT-BODY',
                attributes: [
                    'slot=body',
                ],
            },
        ], []);
        const calloutTitleParagraph = textarena.registerArena({
            name: 'callout-title-paragraph',
            tag: 'P',
            attributes: [
                'slot=title',
            ],
            hasText: true,
            nextArena: paragraph,
        }, [
            {
                tag: 'P',
                attributes: [
                    'slot=title',
                ],
            },
        ], []);
        const arena = textarena.registerArena({
            name,
            tag,
            attributes,
            protectedChildren: [
                calloutTitleParagraph,
                calloutBodyContainer,
            ],
            arenaForText: calloutBodyContainer,
        }, marks, [textarena.getRootArenaName()]);
        textarena.registerCommand(command, (ta, selection) => {
            const sel = ta.applyArenaToSelection(selection, arena);
            return sel;
        });
        textarena.registerShortcut(shortcut, command);
        textarena.registerCreator({
            name,
            icon,
            title,
            shortcut,
            hint,
            command,
            canShow: (node) => node.parent.isAllowedNode(arena),
        });
    },
});
export default calloutPlugin;
//# sourceMappingURL=calloutPlugin.js.map