@once
    @push('css')
        <style>
            :root {
                --l2p-height: 200px;
                --l2p-background-color: aliceblue;
            }

            .l2p-root,
            .l2p-root * {
                box-sizing: border-box;
            }

            .l2p-root {
                width: 100%;
                height: var(--l2p-height);
                display: flex;
                flex-direction: column;
            }

            .l2p-root > .l2p-top {
                display: flex;
                flex-direction: row;
                align-items: end;
            }

            .l2p-root > .l2p-top > label {
                flex: 1;
                font-size: 0.9em;
                padding: 0;
                margin: 0;
            }

            .l2p-root > .l2p-top > .l2p-pop-button {
                padding: 3px 6px;
            }

            .l2p-root > iframe {
                flex: 1;
                overflow: auto;
                background-color: var(--l2p-background-color);
            }
        </style>
    @endpush
@endonce

@push('js')
    <script>
        document.addEventListener('alpine:init', () => {

            Alpine.data('label2_preview', () => ({

                _form: null,
                _init: function() {
                    this._form = this.$root.closest('form');
                    this._form.addEventListener('change', this.updateURL.bind(this));
                },

                updateURL: function() {

                    let params = {
                        settings: Object.assign({}, ...$(this._form)
                            .serializeArray()
                            .filter((value, index, all) => value.name.includes('label2_'))
                            .map((value, index, all) => ({[value.name]: value.value}))
                            )
                    };

                    let template = params.settings.label2_template;
                    if (!template) return;

                    this.previewURL = '{{ route("labels.show", ["labelName" => ":label"]) }}'
                        .replace(':label', template.replaceAll('\\', '/'))
                        .concat('?', $.param(params), '#toolbar=0');
                },

                _previewURL: '',
                get previewURL() { return this._previewURL; },
                set previewURL(url) {
                    this._previewURL = url;
                    if (this._popped) this._popped.location = this.previewURL;
                },

                _popped: null,
                popout: function() { this._popped = window.open(this.previewURL); }
            }));

        });
    </script>
@endpush

<div x-data="label2_preview" x-init="_init" class="l2p-root">
    <div class="l2p-top">
        <label for="label2-preview">Preview</label>
        <button class="l2p-pop-button btn btn-default" x-on:click.prevent="popout" title="Pop Out"><i class="fa-solid fa-maximize"></i></button>
    </div>
    <iframe id="label2-preview" x-bind:src="previewURL"></iframe>
</div>