@themarioga/grid-editor 8.8.1 → 8.9.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
@@ -42,6 +42,10 @@ GridEditor.locales.es = {
42
42
  "panel.title": "Ajustes: {kind}",
43
43
  "panel.close": "Cerrar",
44
44
  "panel.done": "Hecho",
45
+ "panel.sidebar_title": "Ajustes",
46
+ "panel.sidebar_empty": "Haz clic en un elemento para ver sus ajustes",
47
+ "panel.collapse": "Ocultar ajustes",
48
+ "panel.expand": "Mostrar ajustes",
45
49
  "panel.id": "Id",
46
50
  "panel.classes": "Clases",
47
51
  "panel.section_general": "Id y clases",
@@ -48,6 +48,10 @@
48
48
  "panel.title": "Ajustes: {kind}",
49
49
  "panel.close": "Cerrar",
50
50
  "panel.done": "Hecho",
51
+ "panel.sidebar_title": "Ajustes",
52
+ "panel.sidebar_empty": "Haz clic en un elemento para ver sus ajustes",
53
+ "panel.collapse": "Ocultar ajustes",
54
+ "panel.expand": "Mostrar ajustes",
51
55
  "panel.id": "Id",
52
56
  "panel.classes": "Clases",
53
57
  "panel.section_general": "Id y clases",
@@ -3,4 +3,4 @@
3
3
  (May\xFAs para el m\xEDnimo)`,"tool.column_wider":`Ensanchar columna
4
4
  (May\xFAs para el m\xE1ximo)`,"tool.indent_decrease":`Reducir sangr\xEDa
5
5
  (May\xFAs para quitarla)`,"tool.indent_increase":`Aumentar sangr\xEDa
6
- (May\xFAs para el m\xE1ximo)`,"tool.edit_source":"Editar el c\xF3digo fuente","tool.preview":"Vista previa","tool.more":"M\xE1s","group.rows":"Filas","group.content":"Contenido","group.elements":"Elementos","group.select":"A\xF1adir","panel.title":"Ajustes: {kind}","panel.close":"Cerrar","panel.done":"Hecho","panel.id":"Id","panel.classes":"Clases","panel.section_general":"Id y clases","panel.editor":"Editor","panel.kind_row":"Fila","panel.kind_column":"Columna","panel.kind_text":"Texto","panel.kind_element":"Elemento","panel.kind_section":"Secci\xF3n","panel.kind_tab":"Pesta\xF1a","panel.kind_accordion_item":"Elemento de acorde\xF3n","tool.id_placeholder":"id","tool.id_title":"Asignar un identificador \xFAnico","tool.classes_placeholder":"clases","tool.classes_title":"Clases css, separadas por espacios","tool.toggle_class":'Aplicar o quitar el estilo "{label}"',"row.add":"A\xF1adir fila {layout}","row.add_row_cols":"A\xF1adir una fila de {columns} columnas, {counts} por fila","container.add_tabs":"Pesta\xF1as","container.add_tab":"A\xF1adir pesta\xF1a","container.tab_label":"Pesta\xF1a {number}","container.tabs_section":"Pesta\xF1as","container.tabs_style":"Estilo","container.tabs_style_tabs":"Pesta\xF1as","container.tabs_style_pills":"Pills","container.tabs_style_underline":"Subrayado","container.tabs_width":"Ancho","container.tabs_width_natural":"Natural","container.tabs_width_fill":"Rellenar","container.tabs_width_justified":"Justificado","container.tabs_align":"Alineaci\xF3n","container.tabs_align_start":"Inicio","container.tabs_align_center":"Centro","container.tabs_align_end":"Fin","container.tabs_layout":"Disposici\xF3n","container.tabs_layout_horizontal":"Horizontal","container.tabs_layout_vertical":"Vertical","container.tabs_layout_vertical_from":"Vertical desde {breakpoint}","container.add_carousel":"Carrusel","container.add_carousel_item":"A\xF1adir diapositiva","confirm.delete_carousel_item":"\xBFBorrar esta diapositiva y todo lo que contiene?","panel.kind_carousel_item":"Diapositiva","container.carousel_previous":"Anterior","container.carousel_next":"Siguiente","container.carousel_slide_label":"Diapositiva {number}","container.carousel_counter":"{current} / {total}","tool.carousel_show_previous":"Diapositiva anterior","tool.carousel_show_next":"Diapositiva siguiente","tool.carousel_move_back":"Mover atr\xE1s","tool.carousel_move_forward":"Mover adelante","container.carousel_section":"Carrusel","container.carousel_controls":"Flechas","container.carousel_indicators":"Indicadores","container.carousel_fade":"Fundido","container.carousel_dark":"Tema oscuro","container.carousel_ride":"Autoplay","container.carousel_ride_no":"No","container.carousel_ride_load":"Al cargar","container.carousel_ride_interaction":"Tras la primera interacci\xF3n","container.carousel_interval":"Intervalo (s)","container.carousel_pause":"Pausa al pasar el rat\xF3n","container.carousel_wrap":"Volver al principio","container.carousel_keyboard":"Teclado","container.carousel_touch":"T\xE1ctil","container.carousel_item_section":"Diapositiva","container.add_accordion":"Acorde\xF3n","container.add_accordion_item":"A\xF1adir apartado","container.accordion_label":"Apartado {number}","container.add_popup":"Ventana emergente","container.popup_title":"T\xEDtulo","container.popup_trigger":"Abrir","container.add_card":"Tarjeta","container.card_title":"T\xEDtulo de la tarjeta","container.card_footer":"Pie de la tarjeta","confirm.title":"Confirmar","confirm.ok":"Borrar","confirm.cancel":"Cancelar","confirm.delete_row":"\xBFSeguro que quieres borrar esta fila?","confirm.delete_column":"\xBFSeguro que quieres borrar esta columna?","confirm.delete_text":"\xBFSeguro que quieres borrar este texto?","confirm.delete_plain":"\xBFSeguro que quieres borrar este contenido?","confirm.delete_element":"\xBFSeguro que quieres borrar este elemento?","confirm.delete_container":"\xBFSeguro que quieres borrar este contenedor y todo su contenido?","confirm.delete_tab":"\xBFSeguro que quieres borrar esta pesta\xF1a y todo su contenido?","confirm.delete_accordion_item":"\xBFSeguro que quieres borrar este apartado y todo su contenido?","view.all":"Todos los tama\xF1os","view.xs":"M\xF3vil","view.sm":"Tablet","view.md":"Escritorio peque\xF1o","view.lg":"Escritorio","view.xl":"Escritorio grande","view.xxl":"Pantalla panor\xE1mica","utility.section":"Responsive: {view}","utility.col_width":"Ancho","utility.col_equal":"Igual","utility.col_auto":"Auto","section.add":"Secci\xF3n","section.width":"Ancho","section.fixed":"Fijo","section.fluid":"Ancho completo","section.from":"Fijo desde {breakpoint}","tool.add_row_to_section":"A\xF1adir fila","tool.delete_section":"Quitar secci\xF3n","confirm.delete_section":"\xBFSeguro que quieres borrar esta secci\xF3n y todo su contenido?","tool.copy":"Copiar","tool.paste":"Pegar","clipboard.paste_row":"Pegar fila","clipboard.paste_section":"Pegar secci\xF3n","autosave.restore_title":"\xBFRecuperar el borrador?","autosave.restore_message":"Hay un borrador de esta p\xE1gina guardado el {date}, con cambios que no se publicaron. \xBFQuieres recuperarlo?","autosave.restore":"Recuperar","autosave.discard":"Descartar","utility.col_from_row":"De la fila: {count}","utility.row_cols":"Columnas por fila","badge.row_cols":"{count} por fila","badge.row_cols_auto":"Tan anchas como su contenido","utility.default":"Por defecto","utility.inherit":"Hereda: {value} (de {breakpoint})","utility.varies":"Cambia en {breakpoints}; elegir aqu\xED lo sustituye","utility.display":"Display","utility.visibility_hidden":"Oculto","tool.hide_in_view":"Ocultar en esta vista","tool.show_in_view":"Mostrar en esta vista","badge.hidden_in":"Oculto en {breakpoints}","utility.order":"Orden","utility.order_first":"Primero","utility.order_last":"\xDAltimo","tool.order_earlier":"Antes en esta vista","tool.order_later":"Despu\xE9s en esta vista","badge.order":"Orden: {value}","utility.justify_content":"Justificar columnas","utility.align_items":"Alinear columnas","utility.align_content":"Alinear l\xEDneas","utility.flex_direction":"Direcci\xF3n","utility.flex_wrap":"Salto de l\xEDnea","utility.gap":"Separaci\xF3n","utility.row_gap":"Separaci\xF3n entre filas","utility.column_gap":"Separaci\xF3n entre columnas","utility.flex_fill":"Rellenar","utility.flex_grow":"Crecer","utility.flex_shrink":"Encoger","utility.sticky":"Fijo al desplazar","utility.align_self":"Alinearse","utility.gutters":"Espaciado entre columnas","utility.gutters_x":"Espaciado horizontal","utility.gutters_y":"Espaciado vertical","utility.padding":"Relleno","utility.margin":"Margen","utility.side_all":"Todos los lados","utility.side_x":"Izquierda y derecha","utility.side_y":"Arriba y abajo","utility.side_t":"Arriba","utility.side_b":"Abajo","utility.side_s":"Inicio","utility.side_e":"Fin","utility.text_align":"Alineaci\xF3n del texto","utility.text_start":"Inicio","utility.text_center":"Centro","utility.text_end":"Fin","utility.float":"Flotar","utility.float_start":"Inicio","utility.float_end":"Fin","utility.float_none":"Ninguno","utility.spacing_gutter":"El relleno lateral de una columna es su espaciado: cambiarlo cambia el espacio entre columnas","inline_style.section_title":"Estilo","inline_style.dialog_title":"Estilo: {kind}","inline_style.section_size":"Tama\xF1o","inline_style.section_spacing":"Espaciado","inline_style.section_border":"Borde","inline_style.section_background":"Fondo","inline_style.section_text":"Texto","inline_style.section_typography":"Tipograf\xEDa","inline_style.section_display":"Visualizaci\xF3n","inline_style.section_flex":"Flex","inline_style.section_position":"Posici\xF3n","inline_style.section_custom":"CSS libre","inline_style.all_sizes":"Se aplica a todos los tama\xF1os","inline_style.overridden":"La clase {class} tiene prioridad sobre este valor","inline_style.invalid":"Esta propiedad no acepta ese valor","inline_style.catalog":"Clases de Bootstrap","inline_style.shadow_x":"X","inline_style.shadow_y":"Y","inline_style.shadow_blur":"Desenfoque","inline_style.shadow_spread":"Extensi\xF3n","inline_style.shadow_color":"Color","inline_style.shadow_inset":"Interior","inline_style.shadow_text_mode":"Editar como texto","inline_style.shadow_builder_mode":"Editar con el constructor","inline_style.prop_width":"Ancho","inline_style.prop_height":"Alto","inline_style.prop_min_width":"Ancho m\xEDnimo","inline_style.prop_min_height":"Alto m\xEDnimo","inline_style.prop_max_width":"Ancho m\xE1ximo","inline_style.prop_max_height":"Alto m\xE1ximo","inline_style.prop_margin_top":"Margen superior","inline_style.prop_margin_right":"Margen derecho","inline_style.prop_margin_bottom":"Margen inferior","inline_style.prop_margin_left":"Margen izquierdo","inline_style.prop_padding_top":"Relleno superior","inline_style.prop_padding_right":"Relleno derecho","inline_style.prop_padding_bottom":"Relleno inferior","inline_style.prop_padding_left":"Relleno izquierdo","inline_style.prop_border_width":"Grosor del borde","inline_style.prop_border_style":"Estilo del borde","inline_style.prop_border_color":"Color del borde","inline_style.prop_border_radius":"Radio del borde","inline_style.prop_box_shadow":"Sombra","inline_style.prop_background_color":"Color de fondo","inline_style.prop_background_image":"Imagen de fondo","inline_style.prop_background_size":"Tama\xF1o del fondo","inline_style.prop_background_position":"Posici\xF3n del fondo","inline_style.prop_background_repeat":"Repetici\xF3n del fondo","inline_style.prop_color":"Color","inline_style.prop_font_size":"Tama\xF1o de letra","inline_style.prop_text_align":"Alineaci\xF3n","inline_style.prop_text_shadow":"Sombra del texto","inline_style.prop_font_family":"Fuente","inline_style.prop_font_weight":"Grosor de letra","inline_style.prop_font_style":"Estilo de letra","inline_style.prop_line_height":"Interlineado","inline_style.prop_letter_spacing":"Espaciado entre letras","inline_style.prop_text_transform":"May\xFAsculas","inline_style.prop_text_decoration":"Decoraci\xF3n","inline_style.prop_display":"Display","inline_style.prop_opacity":"Opacidad","inline_style.prop_overflow":"Desbordamiento","inline_style.prop_visibility":"Visibilidad","inline_style.prop_position":"Posici\xF3n","inline_style.prop_top":"Arriba","inline_style.prop_right":"Derecha","inline_style.prop_bottom":"Abajo","inline_style.prop_left":"Izquierda","inline_style.prop_z_index":"Z-index","error.sortable_missing":"\xA1SortableJS no est\xE1 disponible! Aseg\xFArate de haber cargado el archivo js de Sortable; sin \xE9l no se puede arrastrar.","warning.already_editing":"Este elemento ya tiene un editor: se devuelve ese, con las opciones con las que se cre\xF3.","warning.destroyed":"Se ha llamado a {method}() en un editor destruido, y no hace nada.","warning.duplicate_build":"grideditor.js se ha cargado dos veces: se mantiene el primer GridEditor.","warning.adapter_no_jquery":"grideditor.jquery.js necesita jQuery 4 y la p\xE1gina no tiene jQuery: la API de jQuery no est\xE1 disponible.","error.tinymce_missing":"\xA1tinyMCE no est\xE1 disponible! Aseg\xFArate de haber cargado el archivo js de tinyMCE.","error.ckeditor_missing":"\xA1CKEditor 5 no est\xE1 disponible! Aseg\xFArate de haber cargado su archivo ckeditor5.umd.js.","error.ckeditor_start":"CKEditor no ha podido arrancar: {message}","warning.ckeditor_plugin":"CKEditor no tiene ning\xFAn plugin llamado {name}, as\xED que se deja fuera.","error.codemirror_missing":"\xA1CodeMirror no est\xE1 disponible! Aseg\xFArate de haber cargado el archivo js de CodeMirror; sin \xE9l el c\xF3digo se edita en un textarea normal.","error.summernote_missing":"\xA1Summernote no est\xE1 disponible! Aseg\xFArate de haber cargado jQuery y el archivo js de Summernote."};})();
6
+ (May\xFAs para el m\xE1ximo)`,"tool.edit_source":"Editar el c\xF3digo fuente","tool.preview":"Vista previa","tool.more":"M\xE1s","group.rows":"Filas","group.content":"Contenido","group.elements":"Elementos","group.select":"A\xF1adir","panel.title":"Ajustes: {kind}","panel.close":"Cerrar","panel.done":"Hecho","panel.sidebar_title":"Ajustes","panel.sidebar_empty":"Haz clic en un elemento para ver sus ajustes","panel.collapse":"Ocultar ajustes","panel.expand":"Mostrar ajustes","panel.id":"Id","panel.classes":"Clases","panel.section_general":"Id y clases","panel.editor":"Editor","panel.kind_row":"Fila","panel.kind_column":"Columna","panel.kind_text":"Texto","panel.kind_element":"Elemento","panel.kind_section":"Secci\xF3n","panel.kind_tab":"Pesta\xF1a","panel.kind_accordion_item":"Elemento de acorde\xF3n","tool.id_placeholder":"id","tool.id_title":"Asignar un identificador \xFAnico","tool.classes_placeholder":"clases","tool.classes_title":"Clases css, separadas por espacios","tool.toggle_class":'Aplicar o quitar el estilo "{label}"',"row.add":"A\xF1adir fila {layout}","row.add_row_cols":"A\xF1adir una fila de {columns} columnas, {counts} por fila","container.add_tabs":"Pesta\xF1as","container.add_tab":"A\xF1adir pesta\xF1a","container.tab_label":"Pesta\xF1a {number}","container.tabs_section":"Pesta\xF1as","container.tabs_style":"Estilo","container.tabs_style_tabs":"Pesta\xF1as","container.tabs_style_pills":"Pills","container.tabs_style_underline":"Subrayado","container.tabs_width":"Ancho","container.tabs_width_natural":"Natural","container.tabs_width_fill":"Rellenar","container.tabs_width_justified":"Justificado","container.tabs_align":"Alineaci\xF3n","container.tabs_align_start":"Inicio","container.tabs_align_center":"Centro","container.tabs_align_end":"Fin","container.tabs_layout":"Disposici\xF3n","container.tabs_layout_horizontal":"Horizontal","container.tabs_layout_vertical":"Vertical","container.tabs_layout_vertical_from":"Vertical desde {breakpoint}","container.add_carousel":"Carrusel","container.add_carousel_item":"A\xF1adir diapositiva","confirm.delete_carousel_item":"\xBFBorrar esta diapositiva y todo lo que contiene?","panel.kind_carousel_item":"Diapositiva","container.carousel_previous":"Anterior","container.carousel_next":"Siguiente","container.carousel_slide_label":"Diapositiva {number}","container.carousel_counter":"{current} / {total}","tool.carousel_show_previous":"Diapositiva anterior","tool.carousel_show_next":"Diapositiva siguiente","tool.carousel_move_back":"Mover atr\xE1s","tool.carousel_move_forward":"Mover adelante","container.carousel_section":"Carrusel","container.carousel_controls":"Flechas","container.carousel_indicators":"Indicadores","container.carousel_fade":"Fundido","container.carousel_dark":"Tema oscuro","container.carousel_ride":"Autoplay","container.carousel_ride_no":"No","container.carousel_ride_load":"Al cargar","container.carousel_ride_interaction":"Tras la primera interacci\xF3n","container.carousel_interval":"Intervalo (s)","container.carousel_pause":"Pausa al pasar el rat\xF3n","container.carousel_wrap":"Volver al principio","container.carousel_keyboard":"Teclado","container.carousel_touch":"T\xE1ctil","container.carousel_item_section":"Diapositiva","container.add_accordion":"Acorde\xF3n","container.add_accordion_item":"A\xF1adir apartado","container.accordion_label":"Apartado {number}","container.add_popup":"Ventana emergente","container.popup_title":"T\xEDtulo","container.popup_trigger":"Abrir","container.add_card":"Tarjeta","container.card_title":"T\xEDtulo de la tarjeta","container.card_footer":"Pie de la tarjeta","confirm.title":"Confirmar","confirm.ok":"Borrar","confirm.cancel":"Cancelar","confirm.delete_row":"\xBFSeguro que quieres borrar esta fila?","confirm.delete_column":"\xBFSeguro que quieres borrar esta columna?","confirm.delete_text":"\xBFSeguro que quieres borrar este texto?","confirm.delete_plain":"\xBFSeguro que quieres borrar este contenido?","confirm.delete_element":"\xBFSeguro que quieres borrar este elemento?","confirm.delete_container":"\xBFSeguro que quieres borrar este contenedor y todo su contenido?","confirm.delete_tab":"\xBFSeguro que quieres borrar esta pesta\xF1a y todo su contenido?","confirm.delete_accordion_item":"\xBFSeguro que quieres borrar este apartado y todo su contenido?","view.all":"Todos los tama\xF1os","view.xs":"M\xF3vil","view.sm":"Tablet","view.md":"Escritorio peque\xF1o","view.lg":"Escritorio","view.xl":"Escritorio grande","view.xxl":"Pantalla panor\xE1mica","utility.section":"Responsive: {view}","utility.col_width":"Ancho","utility.col_equal":"Igual","utility.col_auto":"Auto","section.add":"Secci\xF3n","section.width":"Ancho","section.fixed":"Fijo","section.fluid":"Ancho completo","section.from":"Fijo desde {breakpoint}","tool.add_row_to_section":"A\xF1adir fila","tool.delete_section":"Quitar secci\xF3n","confirm.delete_section":"\xBFSeguro que quieres borrar esta secci\xF3n y todo su contenido?","tool.copy":"Copiar","tool.paste":"Pegar","clipboard.paste_row":"Pegar fila","clipboard.paste_section":"Pegar secci\xF3n","autosave.restore_title":"\xBFRecuperar el borrador?","autosave.restore_message":"Hay un borrador de esta p\xE1gina guardado el {date}, con cambios que no se publicaron. \xBFQuieres recuperarlo?","autosave.restore":"Recuperar","autosave.discard":"Descartar","utility.col_from_row":"De la fila: {count}","utility.row_cols":"Columnas por fila","badge.row_cols":"{count} por fila","badge.row_cols_auto":"Tan anchas como su contenido","utility.default":"Por defecto","utility.inherit":"Hereda: {value} (de {breakpoint})","utility.varies":"Cambia en {breakpoints}; elegir aqu\xED lo sustituye","utility.display":"Display","utility.visibility_hidden":"Oculto","tool.hide_in_view":"Ocultar en esta vista","tool.show_in_view":"Mostrar en esta vista","badge.hidden_in":"Oculto en {breakpoints}","utility.order":"Orden","utility.order_first":"Primero","utility.order_last":"\xDAltimo","tool.order_earlier":"Antes en esta vista","tool.order_later":"Despu\xE9s en esta vista","badge.order":"Orden: {value}","utility.justify_content":"Justificar columnas","utility.align_items":"Alinear columnas","utility.align_content":"Alinear l\xEDneas","utility.flex_direction":"Direcci\xF3n","utility.flex_wrap":"Salto de l\xEDnea","utility.gap":"Separaci\xF3n","utility.row_gap":"Separaci\xF3n entre filas","utility.column_gap":"Separaci\xF3n entre columnas","utility.flex_fill":"Rellenar","utility.flex_grow":"Crecer","utility.flex_shrink":"Encoger","utility.sticky":"Fijo al desplazar","utility.align_self":"Alinearse","utility.gutters":"Espaciado entre columnas","utility.gutters_x":"Espaciado horizontal","utility.gutters_y":"Espaciado vertical","utility.padding":"Relleno","utility.margin":"Margen","utility.side_all":"Todos los lados","utility.side_x":"Izquierda y derecha","utility.side_y":"Arriba y abajo","utility.side_t":"Arriba","utility.side_b":"Abajo","utility.side_s":"Inicio","utility.side_e":"Fin","utility.text_align":"Alineaci\xF3n del texto","utility.text_start":"Inicio","utility.text_center":"Centro","utility.text_end":"Fin","utility.float":"Flotar","utility.float_start":"Inicio","utility.float_end":"Fin","utility.float_none":"Ninguno","utility.spacing_gutter":"El relleno lateral de una columna es su espaciado: cambiarlo cambia el espacio entre columnas","inline_style.section_title":"Estilo","inline_style.dialog_title":"Estilo: {kind}","inline_style.section_size":"Tama\xF1o","inline_style.section_spacing":"Espaciado","inline_style.section_border":"Borde","inline_style.section_background":"Fondo","inline_style.section_text":"Texto","inline_style.section_typography":"Tipograf\xEDa","inline_style.section_display":"Visualizaci\xF3n","inline_style.section_flex":"Flex","inline_style.section_position":"Posici\xF3n","inline_style.section_custom":"CSS libre","inline_style.all_sizes":"Se aplica a todos los tama\xF1os","inline_style.overridden":"La clase {class} tiene prioridad sobre este valor","inline_style.invalid":"Esta propiedad no acepta ese valor","inline_style.catalog":"Clases de Bootstrap","inline_style.shadow_x":"X","inline_style.shadow_y":"Y","inline_style.shadow_blur":"Desenfoque","inline_style.shadow_spread":"Extensi\xF3n","inline_style.shadow_color":"Color","inline_style.shadow_inset":"Interior","inline_style.shadow_text_mode":"Editar como texto","inline_style.shadow_builder_mode":"Editar con el constructor","inline_style.prop_width":"Ancho","inline_style.prop_height":"Alto","inline_style.prop_min_width":"Ancho m\xEDnimo","inline_style.prop_min_height":"Alto m\xEDnimo","inline_style.prop_max_width":"Ancho m\xE1ximo","inline_style.prop_max_height":"Alto m\xE1ximo","inline_style.prop_margin_top":"Margen superior","inline_style.prop_margin_right":"Margen derecho","inline_style.prop_margin_bottom":"Margen inferior","inline_style.prop_margin_left":"Margen izquierdo","inline_style.prop_padding_top":"Relleno superior","inline_style.prop_padding_right":"Relleno derecho","inline_style.prop_padding_bottom":"Relleno inferior","inline_style.prop_padding_left":"Relleno izquierdo","inline_style.prop_border_width":"Grosor del borde","inline_style.prop_border_style":"Estilo del borde","inline_style.prop_border_color":"Color del borde","inline_style.prop_border_radius":"Radio del borde","inline_style.prop_box_shadow":"Sombra","inline_style.prop_background_color":"Color de fondo","inline_style.prop_background_image":"Imagen de fondo","inline_style.prop_background_size":"Tama\xF1o del fondo","inline_style.prop_background_position":"Posici\xF3n del fondo","inline_style.prop_background_repeat":"Repetici\xF3n del fondo","inline_style.prop_color":"Color","inline_style.prop_font_size":"Tama\xF1o de letra","inline_style.prop_text_align":"Alineaci\xF3n","inline_style.prop_text_shadow":"Sombra del texto","inline_style.prop_font_family":"Fuente","inline_style.prop_font_weight":"Grosor de letra","inline_style.prop_font_style":"Estilo de letra","inline_style.prop_line_height":"Interlineado","inline_style.prop_letter_spacing":"Espaciado entre letras","inline_style.prop_text_transform":"May\xFAsculas","inline_style.prop_text_decoration":"Decoraci\xF3n","inline_style.prop_display":"Display","inline_style.prop_opacity":"Opacidad","inline_style.prop_overflow":"Desbordamiento","inline_style.prop_visibility":"Visibilidad","inline_style.prop_position":"Posici\xF3n","inline_style.prop_top":"Arriba","inline_style.prop_right":"Derecha","inline_style.prop_bottom":"Abajo","inline_style.prop_left":"Izquierda","inline_style.prop_z_index":"Z-index","error.sortable_missing":"\xA1SortableJS no est\xE1 disponible! Aseg\xFArate de haber cargado el archivo js de Sortable; sin \xE9l no se puede arrastrar.","warning.already_editing":"Este elemento ya tiene un editor: se devuelve ese, con las opciones con las que se cre\xF3.","warning.destroyed":"Se ha llamado a {method}() en un editor destruido, y no hace nada.","warning.duplicate_build":"grideditor.js se ha cargado dos veces: se mantiene el primer GridEditor.","warning.adapter_no_jquery":"grideditor.jquery.js necesita jQuery 4 y la p\xE1gina no tiene jQuery: la API de jQuery no est\xE1 disponible.","error.tinymce_missing":"\xA1tinyMCE no est\xE1 disponible! Aseg\xFArate de haber cargado el archivo js de tinyMCE.","error.ckeditor_missing":"\xA1CKEditor 5 no est\xE1 disponible! Aseg\xFArate de haber cargado su archivo ckeditor5.umd.js.","error.ckeditor_start":"CKEditor no ha podido arrancar: {message}","warning.ckeditor_plugin":"CKEditor no tiene ning\xFAn plugin llamado {name}, as\xED que se deja fuera.","error.codemirror_missing":"\xA1CodeMirror no est\xE1 disponible! Aseg\xFArate de haber cargado el archivo js de CodeMirror; sin \xE9l el c\xF3digo se edita en un textarea normal.","error.summernote_missing":"\xA1Summernote no est\xE1 disponible! Aseg\xFArate de haber cargado jQuery y el archivo js de Summernote."};})();
@@ -1,7 +1,7 @@
1
1
  {
2
2
  "version": 3,
3
3
  "sources": ["../../src/js/register.js", "../../src/js/locales/grideditor.es.js"],
4
- "sourcesContent": ["/**\n * What a plugin's or a locale's classic script imports in place of the\n * editor: the GridEditor the page already loaded.\n *\n * The build points `import { GridEditor } from '../grideditor.js'` here for\n * the classic scripts, so each registers on the editor the page has rather\n * than bringing its own. Loaded before the editor there is nothing to\n * register on, and saying so is better than a TypeError three calls later.\n */\nvar GridEditor = window.GridEditor;\n\nif (!GridEditor || typeof GridEditor.get !== 'function') {\n throw new Error('grid-editor: load grideditor.js (or grideditor.bundle.min.js) before its plugins, ' +\n 'its locales and grideditor.jquery.js');\n}\n\nexport { GridEditor };\nexport default GridEditor;\n", "/**\n * Spanish strings for grid-editor.\n *\n * Load after the editor and select with `locale: 'es'`:\n *\n * <script src=\"dist/grideditor.min.js\"></script>\n * <script src=\"dist/locales/grideditor.es.js\"></script>\n * <script>new GridEditor('#myGrid', { locale: 'es' });</script>\n *\n * or, as a module, `import '@themarioga/grid-editor/locales/es'`.\n *\n * This is one of the two locales grid-editor ships, so it is held to complete\n * coverage of `GridEditor.locales.en`: test/locales.js fails when a key\n * is missing. Add the Spanish string in the same change that adds the English\n * one, and keep the wording short enough to fit the tooltip or the dropdown\n * item it appears in.\n */\nimport { GridEditor } from '../grideditor.js';\n\nGridEditor.locales.es = {\n 'tool.move': 'Mover',\n 'tool.settings': 'Configuraci\u00F3n',\n 'tool.add_row': 'A\u00F1adir fila',\n 'tool.delete_text': 'Quitar texto',\n 'tool.delete_plain': 'Quitar contenido',\n 'tool.edit_html': 'Editar html',\n 'codemirror.apply': 'Aplicar',\n 'codemirror.cancel': 'Cancelar',\n 'tool.convert_type': 'Editar como texto de {editor}',\n 'text.add': 'Texto',\n 'text.add_type': 'Texto ({editor})',\n 'text.no_editor': 'No hay cargado ning\u00FAn editor de texto \"{type}\": este texto se puede mover y borrar, pero no editar',\n 'text.tinymce': 'tinyMCE',\n 'text.ckeditor': 'CKEditor',\n 'text.summernote': 'Summernote',\n 'tool.add_column': 'A\u00F1adir columna\\n(mant\u00E9n pulsado para elegir el ancho)',\n 'tool.column_size': '{size} de 12',\n 'tool.column_equal': 'Igual: reparte lo que queda de la fila',\n 'tool.column_auto': 'Auto: tan ancha como su contenido',\n 'tool.delete_row': 'Borrar fila',\n 'tool.delete_column': 'Borrar columna',\n 'tool.delete_element': 'Borrar elemento',\n 'tool.delete_container': 'Borrar contenedor',\n 'tool.delete_pane': 'Borrar panel',\n 'tool.rename': 'Haz doble clic para renombrar',\n 'tool.toggle_popup': 'Plegar esta ventana mientras editas',\n 'tool.element_info': 'Elemento: {name}',\n 'tool.column_narrower': 'Estrechar columna\\n(May\u00FAs para el m\u00EDnimo)',\n 'tool.column_wider': 'Ensanchar columna\\n(May\u00FAs para el m\u00E1ximo)',\n 'tool.indent_decrease': 'Reducir sangr\u00EDa\\n(May\u00FAs para quitarla)',\n 'tool.indent_increase': 'Aumentar sangr\u00EDa\\n(May\u00FAs para el m\u00E1ximo)',\n 'tool.edit_source': 'Editar el c\u00F3digo fuente',\n 'tool.preview': 'Vista previa',\n 'tool.more': 'M\u00E1s',\n 'group.rows': 'Filas',\n 'group.content': 'Contenido',\n 'group.elements': 'Elementos',\n 'group.select': 'A\u00F1adir',\n 'panel.title': 'Ajustes: {kind}',\n 'panel.close': 'Cerrar',\n 'panel.done': 'Hecho',\n 'panel.id': 'Id',\n 'panel.classes': 'Clases',\n 'panel.section_general': 'Id y clases',\n 'panel.editor': 'Editor',\n 'panel.kind_row': 'Fila',\n 'panel.kind_column': 'Columna',\n 'panel.kind_text': 'Texto',\n 'panel.kind_element': 'Elemento',\n 'panel.kind_section': 'Secci\u00F3n',\n 'panel.kind_tab': 'Pesta\u00F1a',\n 'panel.kind_accordion_item': 'Elemento de acorde\u00F3n',\n 'tool.id_placeholder': 'id',\n 'tool.id_title': 'Asignar un identificador \u00FAnico',\n 'tool.classes_placeholder': 'clases',\n 'tool.classes_title': 'Clases css, separadas por espacios',\n 'tool.toggle_class': 'Aplicar o quitar el estilo \"{label}\"',\n 'row.add': 'A\u00F1adir fila {layout}',\n 'row.add_row_cols': 'A\u00F1adir una fila de {columns} columnas, {counts} por fila',\n 'container.add_tabs': 'Pesta\u00F1as',\n 'container.add_tab': 'A\u00F1adir pesta\u00F1a',\n 'container.tab_label': 'Pesta\u00F1a {number}',\n 'container.tabs_section': 'Pesta\u00F1as',\n 'container.tabs_style': 'Estilo',\n 'container.tabs_style_tabs': 'Pesta\u00F1as',\n 'container.tabs_style_pills': 'Pills',\n 'container.tabs_style_underline': 'Subrayado',\n 'container.tabs_width': 'Ancho',\n 'container.tabs_width_natural': 'Natural',\n 'container.tabs_width_fill': 'Rellenar',\n 'container.tabs_width_justified': 'Justificado',\n 'container.tabs_align': 'Alineaci\u00F3n',\n 'container.tabs_align_start': 'Inicio',\n 'container.tabs_align_center': 'Centro',\n 'container.tabs_align_end': 'Fin',\n 'container.tabs_layout': 'Disposici\u00F3n',\n 'container.tabs_layout_horizontal': 'Horizontal',\n 'container.tabs_layout_vertical': 'Vertical',\n 'container.tabs_layout_vertical_from': 'Vertical desde {breakpoint}',\n 'container.add_carousel': 'Carrusel',\n 'container.add_carousel_item': 'A\u00F1adir diapositiva',\n 'confirm.delete_carousel_item': '\u00BFBorrar esta diapositiva y todo lo que contiene?',\n 'panel.kind_carousel_item': 'Diapositiva',\n 'container.carousel_previous': 'Anterior',\n 'container.carousel_next': 'Siguiente',\n 'container.carousel_slide_label': 'Diapositiva {number}',\n 'container.carousel_counter': '{current} / {total}',\n 'tool.carousel_show_previous': 'Diapositiva anterior',\n 'tool.carousel_show_next': 'Diapositiva siguiente',\n 'tool.carousel_move_back': 'Mover atr\u00E1s',\n 'tool.carousel_move_forward': 'Mover adelante',\n 'container.carousel_section': 'Carrusel',\n 'container.carousel_controls': 'Flechas',\n 'container.carousel_indicators': 'Indicadores',\n 'container.carousel_fade': 'Fundido',\n 'container.carousel_dark': 'Tema oscuro',\n 'container.carousel_ride': 'Autoplay',\n 'container.carousel_ride_no': 'No',\n 'container.carousel_ride_load': 'Al cargar',\n 'container.carousel_ride_interaction': 'Tras la primera interacci\u00F3n',\n 'container.carousel_interval': 'Intervalo (s)',\n 'container.carousel_pause': 'Pausa al pasar el rat\u00F3n',\n 'container.carousel_wrap': 'Volver al principio',\n 'container.carousel_keyboard': 'Teclado',\n 'container.carousel_touch': 'T\u00E1ctil',\n 'container.carousel_item_section': 'Diapositiva',\n 'container.add_accordion': 'Acorde\u00F3n',\n 'container.add_accordion_item': 'A\u00F1adir apartado',\n 'container.accordion_label': 'Apartado {number}',\n 'container.add_popup': 'Ventana emergente',\n 'container.popup_title': 'T\u00EDtulo',\n 'container.popup_trigger': 'Abrir',\n 'container.add_card': 'Tarjeta',\n 'container.card_title': 'T\u00EDtulo de la tarjeta',\n 'container.card_footer': 'Pie de la tarjeta',\n 'confirm.title': 'Confirmar',\n 'confirm.ok': 'Borrar',\n 'confirm.cancel': 'Cancelar',\n 'confirm.delete_row': '\u00BFSeguro que quieres borrar esta fila?',\n 'confirm.delete_column': '\u00BFSeguro que quieres borrar esta columna?',\n 'confirm.delete_text': '\u00BFSeguro que quieres borrar este texto?',\n 'confirm.delete_plain': '\u00BFSeguro que quieres borrar este contenido?',\n 'confirm.delete_element': '\u00BFSeguro que quieres borrar este elemento?',\n 'confirm.delete_container': '\u00BFSeguro que quieres borrar este contenedor y todo su contenido?',\n 'confirm.delete_tab': '\u00BFSeguro que quieres borrar esta pesta\u00F1a y todo su contenido?',\n 'confirm.delete_accordion_item': '\u00BFSeguro que quieres borrar este apartado y todo su contenido?',\n 'view.all': 'Todos los tama\u00F1os',\n 'view.xs': 'M\u00F3vil',\n 'view.sm': 'Tablet',\n 'view.md': 'Escritorio peque\u00F1o',\n 'view.lg': 'Escritorio',\n 'view.xl': 'Escritorio grande',\n 'view.xxl': 'Pantalla panor\u00E1mica',\n 'utility.section': 'Responsive: {view}',\n 'utility.col_width': 'Ancho',\n 'utility.col_equal': 'Igual',\n 'utility.col_auto': 'Auto',\n 'section.add': 'Secci\u00F3n',\n 'section.width': 'Ancho',\n 'section.fixed': 'Fijo',\n 'section.fluid': 'Ancho completo',\n 'section.from': 'Fijo desde {breakpoint}',\n 'tool.add_row_to_section': 'A\u00F1adir fila',\n 'tool.delete_section': 'Quitar secci\u00F3n',\n 'confirm.delete_section': '\u00BFSeguro que quieres borrar esta secci\u00F3n y todo su contenido?',\n 'tool.copy': 'Copiar',\n 'tool.paste': 'Pegar',\n 'clipboard.paste_row': 'Pegar fila',\n 'clipboard.paste_section': 'Pegar secci\u00F3n',\n 'autosave.restore_title': '\u00BFRecuperar el borrador?',\n 'autosave.restore_message': 'Hay un borrador de esta p\u00E1gina guardado el {date}, con cambios que no se publicaron. \u00BFQuieres recuperarlo?',\n 'autosave.restore': 'Recuperar',\n 'autosave.discard': 'Descartar',\n 'utility.col_from_row': 'De la fila: {count}',\n 'utility.row_cols': 'Columnas por fila',\n 'badge.row_cols': '{count} por fila',\n 'badge.row_cols_auto': 'Tan anchas como su contenido',\n 'utility.default': 'Por defecto',\n 'utility.inherit': 'Hereda: {value} (de {breakpoint})',\n 'utility.varies': 'Cambia en {breakpoints}; elegir aqu\u00ED lo sustituye',\n 'utility.display': 'Display',\n 'utility.visibility_hidden': 'Oculto',\n 'tool.hide_in_view': 'Ocultar en esta vista',\n 'tool.show_in_view': 'Mostrar en esta vista',\n 'badge.hidden_in': 'Oculto en {breakpoints}',\n 'utility.order': 'Orden',\n 'utility.order_first': 'Primero',\n 'utility.order_last': '\u00DAltimo',\n 'tool.order_earlier': 'Antes en esta vista',\n 'tool.order_later': 'Despu\u00E9s en esta vista',\n 'badge.order': 'Orden: {value}',\n 'utility.justify_content': 'Justificar columnas',\n 'utility.align_items': 'Alinear columnas',\n 'utility.align_content': 'Alinear l\u00EDneas',\n 'utility.flex_direction': 'Direcci\u00F3n',\n 'utility.flex_wrap': 'Salto de l\u00EDnea',\n 'utility.gap': 'Separaci\u00F3n',\n 'utility.row_gap': 'Separaci\u00F3n entre filas',\n 'utility.column_gap': 'Separaci\u00F3n entre columnas',\n 'utility.flex_fill': 'Rellenar',\n 'utility.flex_grow': 'Crecer',\n 'utility.flex_shrink': 'Encoger',\n 'utility.sticky': 'Fijo al desplazar',\n 'utility.align_self': 'Alinearse',\n 'utility.gutters': 'Espaciado entre columnas',\n 'utility.gutters_x': 'Espaciado horizontal',\n 'utility.gutters_y': 'Espaciado vertical',\n 'utility.padding': 'Relleno',\n 'utility.margin': 'Margen',\n 'utility.side_all': 'Todos los lados',\n 'utility.side_x': 'Izquierda y derecha',\n 'utility.side_y': 'Arriba y abajo',\n 'utility.side_t': 'Arriba',\n 'utility.side_b': 'Abajo',\n 'utility.side_s': 'Inicio',\n 'utility.side_e': 'Fin',\n 'utility.text_align': 'Alineaci\u00F3n del texto',\n 'utility.text_start': 'Inicio',\n 'utility.text_center': 'Centro',\n 'utility.text_end': 'Fin',\n 'utility.float': 'Flotar',\n 'utility.float_start': 'Inicio',\n 'utility.float_end': 'Fin',\n 'utility.float_none': 'Ninguno',\n 'utility.spacing_gutter': 'El relleno lateral de una columna es su espaciado: cambiarlo cambia el espacio entre columnas',\n 'inline_style.section_title': 'Estilo',\n 'inline_style.dialog_title': 'Estilo: {kind}',\n 'inline_style.section_size': 'Tama\u00F1o',\n 'inline_style.section_spacing': 'Espaciado',\n 'inline_style.section_border': 'Borde',\n 'inline_style.section_background': 'Fondo',\n 'inline_style.section_text': 'Texto',\n 'inline_style.section_typography': 'Tipograf\u00EDa',\n 'inline_style.section_display': 'Visualizaci\u00F3n',\n 'inline_style.section_flex': 'Flex',\n 'inline_style.section_position': 'Posici\u00F3n',\n 'inline_style.section_custom': 'CSS libre',\n 'inline_style.all_sizes': 'Se aplica a todos los tama\u00F1os',\n 'inline_style.overridden': 'La clase {class} tiene prioridad sobre este valor',\n 'inline_style.invalid': 'Esta propiedad no acepta ese valor',\n 'inline_style.catalog': 'Clases de Bootstrap',\n 'inline_style.shadow_x': 'X',\n 'inline_style.shadow_y': 'Y',\n 'inline_style.shadow_blur': 'Desenfoque',\n 'inline_style.shadow_spread': 'Extensi\u00F3n',\n 'inline_style.shadow_color': 'Color',\n 'inline_style.shadow_inset': 'Interior',\n 'inline_style.shadow_text_mode': 'Editar como texto',\n 'inline_style.shadow_builder_mode': 'Editar con el constructor',\n 'inline_style.prop_width': 'Ancho',\n 'inline_style.prop_height': 'Alto',\n 'inline_style.prop_min_width': 'Ancho m\u00EDnimo',\n 'inline_style.prop_min_height': 'Alto m\u00EDnimo',\n 'inline_style.prop_max_width': 'Ancho m\u00E1ximo',\n 'inline_style.prop_max_height': 'Alto m\u00E1ximo',\n 'inline_style.prop_margin_top': 'Margen superior',\n 'inline_style.prop_margin_right': 'Margen derecho',\n 'inline_style.prop_margin_bottom': 'Margen inferior',\n 'inline_style.prop_margin_left': 'Margen izquierdo',\n 'inline_style.prop_padding_top': 'Relleno superior',\n 'inline_style.prop_padding_right': 'Relleno derecho',\n 'inline_style.prop_padding_bottom': 'Relleno inferior',\n 'inline_style.prop_padding_left': 'Relleno izquierdo',\n 'inline_style.prop_border_width': 'Grosor del borde',\n 'inline_style.prop_border_style': 'Estilo del borde',\n 'inline_style.prop_border_color': 'Color del borde',\n 'inline_style.prop_border_radius': 'Radio del borde',\n 'inline_style.prop_box_shadow': 'Sombra',\n 'inline_style.prop_background_color': 'Color de fondo',\n 'inline_style.prop_background_image': 'Imagen de fondo',\n 'inline_style.prop_background_size': 'Tama\u00F1o del fondo',\n 'inline_style.prop_background_position': 'Posici\u00F3n del fondo',\n 'inline_style.prop_background_repeat': 'Repetici\u00F3n del fondo',\n 'inline_style.prop_color': 'Color',\n 'inline_style.prop_font_size': 'Tama\u00F1o de letra',\n 'inline_style.prop_text_align': 'Alineaci\u00F3n',\n 'inline_style.prop_text_shadow': 'Sombra del texto',\n 'inline_style.prop_font_family': 'Fuente',\n 'inline_style.prop_font_weight': 'Grosor de letra',\n 'inline_style.prop_font_style': 'Estilo de letra',\n 'inline_style.prop_line_height': 'Interlineado',\n 'inline_style.prop_letter_spacing': 'Espaciado entre letras',\n 'inline_style.prop_text_transform': 'May\u00FAsculas',\n 'inline_style.prop_text_decoration': 'Decoraci\u00F3n',\n 'inline_style.prop_display': 'Display',\n 'inline_style.prop_opacity': 'Opacidad',\n 'inline_style.prop_overflow': 'Desbordamiento',\n 'inline_style.prop_visibility': 'Visibilidad',\n 'inline_style.prop_position': 'Posici\u00F3n',\n 'inline_style.prop_top': 'Arriba',\n 'inline_style.prop_right': 'Derecha',\n 'inline_style.prop_bottom': 'Abajo',\n 'inline_style.prop_left': 'Izquierda',\n 'inline_style.prop_z_index': 'Z-index',\n 'error.sortable_missing': '\u00A1SortableJS no est\u00E1 disponible! Aseg\u00FArate de haber cargado el archivo js de Sortable; sin \u00E9l no se puede arrastrar.',\n 'warning.already_editing': 'Este elemento ya tiene un editor: se devuelve ese, con las opciones con las que se cre\u00F3.',\n 'warning.destroyed': 'Se ha llamado a {method}() en un editor destruido, y no hace nada.',\n 'warning.duplicate_build': 'grideditor.js se ha cargado dos veces: se mantiene el primer GridEditor.',\n 'warning.adapter_no_jquery': 'grideditor.jquery.js necesita jQuery 4 y la p\u00E1gina no tiene jQuery: la API de jQuery no est\u00E1 disponible.',\n 'error.tinymce_missing': '\u00A1tinyMCE no est\u00E1 disponible! Aseg\u00FArate de haber cargado el archivo js de tinyMCE.',\n 'error.ckeditor_missing': '\u00A1CKEditor 5 no est\u00E1 disponible! Aseg\u00FArate de haber cargado su archivo ckeditor5.umd.js.',\n 'error.ckeditor_start': 'CKEditor no ha podido arrancar: {message}',\n 'warning.ckeditor_plugin': 'CKEditor no tiene ning\u00FAn plugin llamado {name}, as\u00ED que se deja fuera.',\n 'error.codemirror_missing': '\u00A1CodeMirror no est\u00E1 disponible! Aseg\u00FArate de haber cargado el archivo js de CodeMirror; sin \u00E9l el c\u00F3digo se edita en un textarea normal.',\n 'error.summernote_missing': '\u00A1Summernote no est\u00E1 disponible! Aseg\u00FArate de haber cargado jQuery y el archivo js de Summernote.',\n};\n\n"],
5
- "mappings": "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",
4
+ "sourcesContent": ["/**\n * What a plugin's or a locale's classic script imports in place of the\n * editor: the GridEditor the page already loaded.\n *\n * The build points `import { GridEditor } from '../grideditor.js'` here for\n * the classic scripts, so each registers on the editor the page has rather\n * than bringing its own. Loaded before the editor there is nothing to\n * register on, and saying so is better than a TypeError three calls later.\n */\nvar GridEditor = window.GridEditor;\n\nif (!GridEditor || typeof GridEditor.get !== 'function') {\n throw new Error('grid-editor: load grideditor.js (or grideditor.bundle.min.js) before its plugins, ' +\n 'its locales and grideditor.jquery.js');\n}\n\nexport { GridEditor };\nexport default GridEditor;\n", "/**\n * Spanish strings for grid-editor.\n *\n * Load after the editor and select with `locale: 'es'`:\n *\n * <script src=\"dist/grideditor.min.js\"></script>\n * <script src=\"dist/locales/grideditor.es.js\"></script>\n * <script>new GridEditor('#myGrid', { locale: 'es' });</script>\n *\n * or, as a module, `import '@themarioga/grid-editor/locales/es'`.\n *\n * This is one of the two locales grid-editor ships, so it is held to complete\n * coverage of `GridEditor.locales.en`: test/locales.js fails when a key\n * is missing. Add the Spanish string in the same change that adds the English\n * one, and keep the wording short enough to fit the tooltip or the dropdown\n * item it appears in.\n */\nimport { GridEditor } from '../grideditor.js';\n\nGridEditor.locales.es = {\n 'tool.move': 'Mover',\n 'tool.settings': 'Configuraci\u00F3n',\n 'tool.add_row': 'A\u00F1adir fila',\n 'tool.delete_text': 'Quitar texto',\n 'tool.delete_plain': 'Quitar contenido',\n 'tool.edit_html': 'Editar html',\n 'codemirror.apply': 'Aplicar',\n 'codemirror.cancel': 'Cancelar',\n 'tool.convert_type': 'Editar como texto de {editor}',\n 'text.add': 'Texto',\n 'text.add_type': 'Texto ({editor})',\n 'text.no_editor': 'No hay cargado ning\u00FAn editor de texto \"{type}\": este texto se puede mover y borrar, pero no editar',\n 'text.tinymce': 'tinyMCE',\n 'text.ckeditor': 'CKEditor',\n 'text.summernote': 'Summernote',\n 'tool.add_column': 'A\u00F1adir columna\\n(mant\u00E9n pulsado para elegir el ancho)',\n 'tool.column_size': '{size} de 12',\n 'tool.column_equal': 'Igual: reparte lo que queda de la fila',\n 'tool.column_auto': 'Auto: tan ancha como su contenido',\n 'tool.delete_row': 'Borrar fila',\n 'tool.delete_column': 'Borrar columna',\n 'tool.delete_element': 'Borrar elemento',\n 'tool.delete_container': 'Borrar contenedor',\n 'tool.delete_pane': 'Borrar panel',\n 'tool.rename': 'Haz doble clic para renombrar',\n 'tool.toggle_popup': 'Plegar esta ventana mientras editas',\n 'tool.element_info': 'Elemento: {name}',\n 'tool.column_narrower': 'Estrechar columna\\n(May\u00FAs para el m\u00EDnimo)',\n 'tool.column_wider': 'Ensanchar columna\\n(May\u00FAs para el m\u00E1ximo)',\n 'tool.indent_decrease': 'Reducir sangr\u00EDa\\n(May\u00FAs para quitarla)',\n 'tool.indent_increase': 'Aumentar sangr\u00EDa\\n(May\u00FAs para el m\u00E1ximo)',\n 'tool.edit_source': 'Editar el c\u00F3digo fuente',\n 'tool.preview': 'Vista previa',\n 'tool.more': 'M\u00E1s',\n 'group.rows': 'Filas',\n 'group.content': 'Contenido',\n 'group.elements': 'Elementos',\n 'group.select': 'A\u00F1adir',\n 'panel.title': 'Ajustes: {kind}',\n 'panel.close': 'Cerrar',\n 'panel.done': 'Hecho',\n 'panel.sidebar_title': 'Ajustes',\n 'panel.sidebar_empty': 'Haz clic en un elemento para ver sus ajustes',\n 'panel.collapse': 'Ocultar ajustes',\n 'panel.expand': 'Mostrar ajustes',\n 'panel.id': 'Id',\n 'panel.classes': 'Clases',\n 'panel.section_general': 'Id y clases',\n 'panel.editor': 'Editor',\n 'panel.kind_row': 'Fila',\n 'panel.kind_column': 'Columna',\n 'panel.kind_text': 'Texto',\n 'panel.kind_element': 'Elemento',\n 'panel.kind_section': 'Secci\u00F3n',\n 'panel.kind_tab': 'Pesta\u00F1a',\n 'panel.kind_accordion_item': 'Elemento de acorde\u00F3n',\n 'tool.id_placeholder': 'id',\n 'tool.id_title': 'Asignar un identificador \u00FAnico',\n 'tool.classes_placeholder': 'clases',\n 'tool.classes_title': 'Clases css, separadas por espacios',\n 'tool.toggle_class': 'Aplicar o quitar el estilo \"{label}\"',\n 'row.add': 'A\u00F1adir fila {layout}',\n 'row.add_row_cols': 'A\u00F1adir una fila de {columns} columnas, {counts} por fila',\n 'container.add_tabs': 'Pesta\u00F1as',\n 'container.add_tab': 'A\u00F1adir pesta\u00F1a',\n 'container.tab_label': 'Pesta\u00F1a {number}',\n 'container.tabs_section': 'Pesta\u00F1as',\n 'container.tabs_style': 'Estilo',\n 'container.tabs_style_tabs': 'Pesta\u00F1as',\n 'container.tabs_style_pills': 'Pills',\n 'container.tabs_style_underline': 'Subrayado',\n 'container.tabs_width': 'Ancho',\n 'container.tabs_width_natural': 'Natural',\n 'container.tabs_width_fill': 'Rellenar',\n 'container.tabs_width_justified': 'Justificado',\n 'container.tabs_align': 'Alineaci\u00F3n',\n 'container.tabs_align_start': 'Inicio',\n 'container.tabs_align_center': 'Centro',\n 'container.tabs_align_end': 'Fin',\n 'container.tabs_layout': 'Disposici\u00F3n',\n 'container.tabs_layout_horizontal': 'Horizontal',\n 'container.tabs_layout_vertical': 'Vertical',\n 'container.tabs_layout_vertical_from': 'Vertical desde {breakpoint}',\n 'container.add_carousel': 'Carrusel',\n 'container.add_carousel_item': 'A\u00F1adir diapositiva',\n 'confirm.delete_carousel_item': '\u00BFBorrar esta diapositiva y todo lo que contiene?',\n 'panel.kind_carousel_item': 'Diapositiva',\n 'container.carousel_previous': 'Anterior',\n 'container.carousel_next': 'Siguiente',\n 'container.carousel_slide_label': 'Diapositiva {number}',\n 'container.carousel_counter': '{current} / {total}',\n 'tool.carousel_show_previous': 'Diapositiva anterior',\n 'tool.carousel_show_next': 'Diapositiva siguiente',\n 'tool.carousel_move_back': 'Mover atr\u00E1s',\n 'tool.carousel_move_forward': 'Mover adelante',\n 'container.carousel_section': 'Carrusel',\n 'container.carousel_controls': 'Flechas',\n 'container.carousel_indicators': 'Indicadores',\n 'container.carousel_fade': 'Fundido',\n 'container.carousel_dark': 'Tema oscuro',\n 'container.carousel_ride': 'Autoplay',\n 'container.carousel_ride_no': 'No',\n 'container.carousel_ride_load': 'Al cargar',\n 'container.carousel_ride_interaction': 'Tras la primera interacci\u00F3n',\n 'container.carousel_interval': 'Intervalo (s)',\n 'container.carousel_pause': 'Pausa al pasar el rat\u00F3n',\n 'container.carousel_wrap': 'Volver al principio',\n 'container.carousel_keyboard': 'Teclado',\n 'container.carousel_touch': 'T\u00E1ctil',\n 'container.carousel_item_section': 'Diapositiva',\n 'container.add_accordion': 'Acorde\u00F3n',\n 'container.add_accordion_item': 'A\u00F1adir apartado',\n 'container.accordion_label': 'Apartado {number}',\n 'container.add_popup': 'Ventana emergente',\n 'container.popup_title': 'T\u00EDtulo',\n 'container.popup_trigger': 'Abrir',\n 'container.add_card': 'Tarjeta',\n 'container.card_title': 'T\u00EDtulo de la tarjeta',\n 'container.card_footer': 'Pie de la tarjeta',\n 'confirm.title': 'Confirmar',\n 'confirm.ok': 'Borrar',\n 'confirm.cancel': 'Cancelar',\n 'confirm.delete_row': '\u00BFSeguro que quieres borrar esta fila?',\n 'confirm.delete_column': '\u00BFSeguro que quieres borrar esta columna?',\n 'confirm.delete_text': '\u00BFSeguro que quieres borrar este texto?',\n 'confirm.delete_plain': '\u00BFSeguro que quieres borrar este contenido?',\n 'confirm.delete_element': '\u00BFSeguro que quieres borrar este elemento?',\n 'confirm.delete_container': '\u00BFSeguro que quieres borrar este contenedor y todo su contenido?',\n 'confirm.delete_tab': '\u00BFSeguro que quieres borrar esta pesta\u00F1a y todo su contenido?',\n 'confirm.delete_accordion_item': '\u00BFSeguro que quieres borrar este apartado y todo su contenido?',\n 'view.all': 'Todos los tama\u00F1os',\n 'view.xs': 'M\u00F3vil',\n 'view.sm': 'Tablet',\n 'view.md': 'Escritorio peque\u00F1o',\n 'view.lg': 'Escritorio',\n 'view.xl': 'Escritorio grande',\n 'view.xxl': 'Pantalla panor\u00E1mica',\n 'utility.section': 'Responsive: {view}',\n 'utility.col_width': 'Ancho',\n 'utility.col_equal': 'Igual',\n 'utility.col_auto': 'Auto',\n 'section.add': 'Secci\u00F3n',\n 'section.width': 'Ancho',\n 'section.fixed': 'Fijo',\n 'section.fluid': 'Ancho completo',\n 'section.from': 'Fijo desde {breakpoint}',\n 'tool.add_row_to_section': 'A\u00F1adir fila',\n 'tool.delete_section': 'Quitar secci\u00F3n',\n 'confirm.delete_section': '\u00BFSeguro que quieres borrar esta secci\u00F3n y todo su contenido?',\n 'tool.copy': 'Copiar',\n 'tool.paste': 'Pegar',\n 'clipboard.paste_row': 'Pegar fila',\n 'clipboard.paste_section': 'Pegar secci\u00F3n',\n 'autosave.restore_title': '\u00BFRecuperar el borrador?',\n 'autosave.restore_message': 'Hay un borrador de esta p\u00E1gina guardado el {date}, con cambios que no se publicaron. \u00BFQuieres recuperarlo?',\n 'autosave.restore': 'Recuperar',\n 'autosave.discard': 'Descartar',\n 'utility.col_from_row': 'De la fila: {count}',\n 'utility.row_cols': 'Columnas por fila',\n 'badge.row_cols': '{count} por fila',\n 'badge.row_cols_auto': 'Tan anchas como su contenido',\n 'utility.default': 'Por defecto',\n 'utility.inherit': 'Hereda: {value} (de {breakpoint})',\n 'utility.varies': 'Cambia en {breakpoints}; elegir aqu\u00ED lo sustituye',\n 'utility.display': 'Display',\n 'utility.visibility_hidden': 'Oculto',\n 'tool.hide_in_view': 'Ocultar en esta vista',\n 'tool.show_in_view': 'Mostrar en esta vista',\n 'badge.hidden_in': 'Oculto en {breakpoints}',\n 'utility.order': 'Orden',\n 'utility.order_first': 'Primero',\n 'utility.order_last': '\u00DAltimo',\n 'tool.order_earlier': 'Antes en esta vista',\n 'tool.order_later': 'Despu\u00E9s en esta vista',\n 'badge.order': 'Orden: {value}',\n 'utility.justify_content': 'Justificar columnas',\n 'utility.align_items': 'Alinear columnas',\n 'utility.align_content': 'Alinear l\u00EDneas',\n 'utility.flex_direction': 'Direcci\u00F3n',\n 'utility.flex_wrap': 'Salto de l\u00EDnea',\n 'utility.gap': 'Separaci\u00F3n',\n 'utility.row_gap': 'Separaci\u00F3n entre filas',\n 'utility.column_gap': 'Separaci\u00F3n entre columnas',\n 'utility.flex_fill': 'Rellenar',\n 'utility.flex_grow': 'Crecer',\n 'utility.flex_shrink': 'Encoger',\n 'utility.sticky': 'Fijo al desplazar',\n 'utility.align_self': 'Alinearse',\n 'utility.gutters': 'Espaciado entre columnas',\n 'utility.gutters_x': 'Espaciado horizontal',\n 'utility.gutters_y': 'Espaciado vertical',\n 'utility.padding': 'Relleno',\n 'utility.margin': 'Margen',\n 'utility.side_all': 'Todos los lados',\n 'utility.side_x': 'Izquierda y derecha',\n 'utility.side_y': 'Arriba y abajo',\n 'utility.side_t': 'Arriba',\n 'utility.side_b': 'Abajo',\n 'utility.side_s': 'Inicio',\n 'utility.side_e': 'Fin',\n 'utility.text_align': 'Alineaci\u00F3n del texto',\n 'utility.text_start': 'Inicio',\n 'utility.text_center': 'Centro',\n 'utility.text_end': 'Fin',\n 'utility.float': 'Flotar',\n 'utility.float_start': 'Inicio',\n 'utility.float_end': 'Fin',\n 'utility.float_none': 'Ninguno',\n 'utility.spacing_gutter': 'El relleno lateral de una columna es su espaciado: cambiarlo cambia el espacio entre columnas',\n 'inline_style.section_title': 'Estilo',\n 'inline_style.dialog_title': 'Estilo: {kind}',\n 'inline_style.section_size': 'Tama\u00F1o',\n 'inline_style.section_spacing': 'Espaciado',\n 'inline_style.section_border': 'Borde',\n 'inline_style.section_background': 'Fondo',\n 'inline_style.section_text': 'Texto',\n 'inline_style.section_typography': 'Tipograf\u00EDa',\n 'inline_style.section_display': 'Visualizaci\u00F3n',\n 'inline_style.section_flex': 'Flex',\n 'inline_style.section_position': 'Posici\u00F3n',\n 'inline_style.section_custom': 'CSS libre',\n 'inline_style.all_sizes': 'Se aplica a todos los tama\u00F1os',\n 'inline_style.overridden': 'La clase {class} tiene prioridad sobre este valor',\n 'inline_style.invalid': 'Esta propiedad no acepta ese valor',\n 'inline_style.catalog': 'Clases de Bootstrap',\n 'inline_style.shadow_x': 'X',\n 'inline_style.shadow_y': 'Y',\n 'inline_style.shadow_blur': 'Desenfoque',\n 'inline_style.shadow_spread': 'Extensi\u00F3n',\n 'inline_style.shadow_color': 'Color',\n 'inline_style.shadow_inset': 'Interior',\n 'inline_style.shadow_text_mode': 'Editar como texto',\n 'inline_style.shadow_builder_mode': 'Editar con el constructor',\n 'inline_style.prop_width': 'Ancho',\n 'inline_style.prop_height': 'Alto',\n 'inline_style.prop_min_width': 'Ancho m\u00EDnimo',\n 'inline_style.prop_min_height': 'Alto m\u00EDnimo',\n 'inline_style.prop_max_width': 'Ancho m\u00E1ximo',\n 'inline_style.prop_max_height': 'Alto m\u00E1ximo',\n 'inline_style.prop_margin_top': 'Margen superior',\n 'inline_style.prop_margin_right': 'Margen derecho',\n 'inline_style.prop_margin_bottom': 'Margen inferior',\n 'inline_style.prop_margin_left': 'Margen izquierdo',\n 'inline_style.prop_padding_top': 'Relleno superior',\n 'inline_style.prop_padding_right': 'Relleno derecho',\n 'inline_style.prop_padding_bottom': 'Relleno inferior',\n 'inline_style.prop_padding_left': 'Relleno izquierdo',\n 'inline_style.prop_border_width': 'Grosor del borde',\n 'inline_style.prop_border_style': 'Estilo del borde',\n 'inline_style.prop_border_color': 'Color del borde',\n 'inline_style.prop_border_radius': 'Radio del borde',\n 'inline_style.prop_box_shadow': 'Sombra',\n 'inline_style.prop_background_color': 'Color de fondo',\n 'inline_style.prop_background_image': 'Imagen de fondo',\n 'inline_style.prop_background_size': 'Tama\u00F1o del fondo',\n 'inline_style.prop_background_position': 'Posici\u00F3n del fondo',\n 'inline_style.prop_background_repeat': 'Repetici\u00F3n del fondo',\n 'inline_style.prop_color': 'Color',\n 'inline_style.prop_font_size': 'Tama\u00F1o de letra',\n 'inline_style.prop_text_align': 'Alineaci\u00F3n',\n 'inline_style.prop_text_shadow': 'Sombra del texto',\n 'inline_style.prop_font_family': 'Fuente',\n 'inline_style.prop_font_weight': 'Grosor de letra',\n 'inline_style.prop_font_style': 'Estilo de letra',\n 'inline_style.prop_line_height': 'Interlineado',\n 'inline_style.prop_letter_spacing': 'Espaciado entre letras',\n 'inline_style.prop_text_transform': 'May\u00FAsculas',\n 'inline_style.prop_text_decoration': 'Decoraci\u00F3n',\n 'inline_style.prop_display': 'Display',\n 'inline_style.prop_opacity': 'Opacidad',\n 'inline_style.prop_overflow': 'Desbordamiento',\n 'inline_style.prop_visibility': 'Visibilidad',\n 'inline_style.prop_position': 'Posici\u00F3n',\n 'inline_style.prop_top': 'Arriba',\n 'inline_style.prop_right': 'Derecha',\n 'inline_style.prop_bottom': 'Abajo',\n 'inline_style.prop_left': 'Izquierda',\n 'inline_style.prop_z_index': 'Z-index',\n 'error.sortable_missing': '\u00A1SortableJS no est\u00E1 disponible! Aseg\u00FArate de haber cargado el archivo js de Sortable; sin \u00E9l no se puede arrastrar.',\n 'warning.already_editing': 'Este elemento ya tiene un editor: se devuelve ese, con las opciones con las que se cre\u00F3.',\n 'warning.destroyed': 'Se ha llamado a {method}() en un editor destruido, y no hace nada.',\n 'warning.duplicate_build': 'grideditor.js se ha cargado dos veces: se mantiene el primer GridEditor.',\n 'warning.adapter_no_jquery': 'grideditor.jquery.js necesita jQuery 4 y la p\u00E1gina no tiene jQuery: la API de jQuery no est\u00E1 disponible.',\n 'error.tinymce_missing': '\u00A1tinyMCE no est\u00E1 disponible! Aseg\u00FArate de haber cargado el archivo js de tinyMCE.',\n 'error.ckeditor_missing': '\u00A1CKEditor 5 no est\u00E1 disponible! Aseg\u00FArate de haber cargado su archivo ckeditor5.umd.js.',\n 'error.ckeditor_start': 'CKEditor no ha podido arrancar: {message}',\n 'warning.ckeditor_plugin': 'CKEditor no tiene ning\u00FAn plugin llamado {name}, as\u00ED que se deja fuera.',\n 'error.codemirror_missing': '\u00A1CodeMirror no est\u00E1 disponible! Aseg\u00FArate de haber cargado el archivo js de CodeMirror; sin \u00E9l el c\u00F3digo se edita en un textarea normal.',\n 'error.summernote_missing': '\u00A1Summernote no est\u00E1 disponible! Aseg\u00FArate de haber cargado jQuery y el archivo js de Summernote.',\n};\n\n"],
5
+ "mappings": "MASA,IAAIA,EAAa,OAAO,WAExB,GAAI,CAACA,GAAc,OAAOA,EAAW,KAAQ,WACzC,MAAM,IAAI,MAAM,wHAC0B,ECM9CC,EAAW,QAAQ,GAAK,CACpB,YAAa,QACb,gBAAiB,mBACjB,eAAgB,iBAChB,mBAAoB,eACpB,oBAAqB,mBACrB,iBAAkB,cAClB,mBAAoB,UACpB,oBAAqB,WACrB,oBAAqB,gCACrB,WAAY,QACZ,gBAAiB,mBACjB,iBAAkB,wGAClB,eAAgB,UAChB,gBAAiB,WACjB,kBAAmB,aACnB,kBAAmB;AAAA,0CACnB,mBAAoB,eACpB,oBAAqB,yCACrB,mBAAoB,oCACpB,kBAAmB,cACnB,qBAAsB,iBACtB,sBAAuB,kBACvB,wBAAyB,oBACzB,mBAAoB,eACpB,cAAe,gCACf,oBAAqB,sCACrB,oBAAqB,mBACrB,uBAAwB;AAAA,8BACxB,oBAAqB;AAAA,8BACrB,uBAAwB;AAAA,0BACxB,uBAAwB;AAAA,8BACxB,mBAAoB,6BACpB,eAAgB,eAChB,YAAa,SACb,aAAc,QACd,gBAAiB,YACjB,iBAAkB,YAClB,eAAgB,YAChB,cAAe,kBACf,cAAe,SACf,aAAc,QACd,sBAAuB,UACvB,sBAAuB,+CACvB,iBAAkB,kBAClB,eAAgB,kBAChB,WAAY,KACZ,gBAAiB,SACjB,wBAAyB,cACzB,eAAgB,SAChB,iBAAkB,OAClB,oBAAqB,UACrB,kBAAmB,QACnB,qBAAsB,WACtB,qBAAsB,aACtB,iBAAkB,aAClB,4BAA6B,0BAC7B,sBAAuB,KACvB,gBAAiB,oCACjB,2BAA4B,SAC5B,qBAAsB,qCACtB,oBAAqB,uCACrB,UAAW,0BACX,mBAAoB,8DACpB,qBAAsB,cACtB,oBAAqB,uBACrB,sBAAuB,sBACvB,yBAA0B,cAC1B,uBAAwB,SACxB,4BAA6B,cAC7B,6BAA8B,QAC9B,iCAAkC,YAClC,uBAAwB,QACxB,+BAAgC,UAChC,4BAA6B,WAC7B,iCAAkC,cAClC,uBAAwB,gBACxB,6BAA8B,SAC9B,8BAA+B,SAC/B,2BAA4B,MAC5B,wBAAyB,iBACzB,mCAAoC,aACpC,iCAAkC,WAClC,sCAAuC,8BACvC,yBAA0B,WAC1B,8BAA+B,wBAC/B,+BAAgC,sDAChC,2BAA4B,cAC5B,8BAA+B,WAC/B,0BAA2B,YAC3B,iCAAkC,uBAClC,6BAA8B,sBAC9B,8BAA+B,uBAC/B,0BAA2B,wBAC3B,0BAA2B,iBAC3B,6BAA8B,iBAC9B,6BAA8B,WAC9B,8BAA+B,UAC/B,gCAAiC,cACjC,0BAA2B,UAC3B,0BAA2B,cAC3B,0BAA2B,WAC3B,6BAA8B,KAC9B,+BAAgC,YAChC,sCAAuC,iCACvC,8BAA+B,gBAC/B,2BAA4B,6BAC5B,0BAA2B,sBAC3B,8BAA+B,UAC/B,2BAA4B,YAC5B,kCAAmC,cACnC,0BAA2B,cAC3B,+BAAgC,qBAChC,4BAA6B,oBAC7B,sBAAuB,oBACvB,wBAAyB,YACzB,0BAA2B,QAC3B,qBAAsB,UACtB,uBAAwB,0BACxB,wBAAyB,oBACzB,gBAAiB,YACjB,aAAc,SACd,iBAAkB,WAClB,qBAAsB,2CACtB,wBAAyB,8CACzB,sBAAuB,4CACvB,uBAAwB,gDACxB,yBAA0B,+CAC1B,2BAA4B,qEAC5B,qBAAsB,qEACtB,gCAAiC,mEACjC,WAAY,uBACZ,UAAW,WACX,UAAW,SACX,UAAW,wBACX,UAAW,aACX,UAAW,oBACX,WAAY,yBACZ,kBAAmB,qBACnB,oBAAqB,QACrB,oBAAqB,QACrB,mBAAoB,OACpB,cAAe,aACf,gBAAiB,QACjB,gBAAiB,OACjB,gBAAiB,iBACjB,eAAgB,0BAChB,0BAA2B,iBAC3B,sBAAuB,oBACvB,yBAA0B,qEAC1B,YAAa,SACb,aAAc,QACd,sBAAuB,aACvB,0BAA2B,mBAC3B,yBAA0B,6BAC1B,2BAA4B,mHAC5B,mBAAoB,YACpB,mBAAoB,YACpB,uBAAwB,sBACxB,mBAAoB,oBACpB,iBAAkB,mBAClB,sBAAuB,+BACvB,kBAAmB,cACnB,kBAAmB,oCACnB,iBAAkB,uDAClB,kBAAmB,UACnB,4BAA6B,SAC7B,oBAAqB,wBACrB,oBAAqB,wBACrB,kBAAmB,0BACnB,gBAAiB,QACjB,sBAAuB,UACvB,qBAAsB,YACtB,qBAAsB,sBACtB,mBAAoB,2BACpB,cAAe,iBACf,0BAA2B,sBAC3B,sBAAuB,mBACvB,wBAAyB,oBACzB,yBAA0B,eAC1B,oBAAqB,oBACrB,cAAe,gBACf,kBAAmB,4BACnB,qBAAsB,+BACtB,oBAAqB,WACrB,oBAAqB,SACrB,sBAAuB,UACvB,iBAAkB,oBAClB,qBAAsB,YACtB,kBAAmB,2BACnB,oBAAqB,uBACrB,oBAAqB,qBACrB,kBAAmB,UACnB,iBAAkB,SAClB,mBAAoB,kBACpB,iBAAkB,sBAClB,iBAAkB,iBAClB,iBAAkB,SAClB,iBAAkB,QAClB,iBAAkB,SAClB,iBAAkB,MAClB,qBAAsB,0BACtB,qBAAsB,SACtB,sBAAuB,SACvB,mBAAoB,MACpB,gBAAiB,SACjB,sBAAuB,SACvB,oBAAqB,MACrB,qBAAsB,UACtB,yBAA0B,gGAC1B,6BAA8B,SAC9B,4BAA6B,iBAC7B,4BAA6B,YAC7B,+BAAgC,YAChC,8BAA+B,QAC/B,kCAAmC,QACnC,4BAA6B,QAC7B,kCAAmC,gBACnC,+BAAgC,mBAChC,4BAA6B,OAC7B,gCAAiC,cACjC,8BAA+B,YAC/B,yBAA0B,mCAC1B,0BAA2B,oDAC3B,uBAAwB,qCACxB,uBAAwB,sBACxB,wBAAyB,IACzB,wBAAyB,IACzB,2BAA4B,aAC5B,6BAA8B,eAC9B,4BAA6B,QAC7B,4BAA6B,WAC7B,gCAAiC,oBACjC,mCAAoC,4BACpC,0BAA2B,QAC3B,2BAA4B,OAC5B,8BAA+B,kBAC/B,+BAAgC,iBAChC,8BAA+B,kBAC/B,+BAAgC,iBAChC,+BAAgC,kBAChC,iCAAkC,iBAClC,kCAAmC,kBACnC,gCAAiC,mBACjC,gCAAiC,mBACjC,kCAAmC,kBACnC,mCAAoC,mBACpC,iCAAkC,oBAClC,iCAAkC,mBAClC,iCAAkC,mBAClC,iCAAkC,kBAClC,kCAAmC,kBACnC,+BAAgC,SAChC,qCAAsC,iBACtC,qCAAsC,kBACtC,oCAAqC,sBACrC,wCAAyC,wBACzC,sCAAuC,0BACvC,0BAA2B,QAC3B,8BAA+B,qBAC/B,+BAAgC,gBAChC,gCAAiC,mBACjC,gCAAiC,SACjC,gCAAiC,kBACjC,+BAAgC,kBAChC,gCAAiC,eACjC,mCAAoC,yBACpC,mCAAoC,gBACpC,oCAAqC,gBACrC,4BAA6B,UAC7B,4BAA6B,WAC7B,6BAA8B,iBAC9B,+BAAgC,cAChC,6BAA8B,cAC9B,wBAAyB,SACzB,0BAA2B,UAC3B,2BAA4B,QAC5B,yBAA0B,YAC1B,4BAA6B,UAC7B,yBAA0B,kIAC1B,0BAA2B,8FAC3B,oBAAqB,qEACrB,0BAA2B,2EAC3B,4BAA6B,iHAC7B,wBAAyB,6FACzB,yBAA0B,mGAC1B,uBAAwB,4CACxB,0BAA2B,+EAC3B,2BAA4B,0JAC5B,2BAA4B,2GAChC",
6
6
  "names": ["GridEditor", "GridEditor"]
7
7
  }
@@ -1,7 +1,7 @@
1
1
  {
2
2
  "version": 3,
3
3
  "sources": ["../../src/js/register.js", "../../src/js/dom.js", "../../src/js/plugins/grideditor.carousel.js"],
4
- "sourcesContent": ["/**\n * What a plugin's or a locale's classic script imports in place of the\n * editor: the GridEditor the page already loaded.\n *\n * The build points `import { GridEditor } from '../grideditor.js'` here for\n * the classic scripts, so each registers on the editor the page has rather\n * than bringing its own. Loaded before the editor there is nothing to\n * register on, and saying so is better than a TypeError three calls later.\n */\nvar GridEditor = window.GridEditor;\n\nif (!GridEditor || typeof GridEditor.get !== 'function') {\n throw new Error('grid-editor: load grideditor.js (or grideditor.bundle.min.js) before its plugins, ' +\n 'its locales and grideditor.jquery.js');\n}\n\nexport { GridEditor };\nexport default GridEditor;\n", "/**\n * The DOM, the way grid-editor uses it.\n *\n * Small helpers over the browser's own API, for the core and the shipped\n * plugins. Not a public API: a plugin of a host's own is free to write its\n * DOM code however it likes, and this file makes no promise to it.\n *\n * Stateless on purpose. The build puts a copy of this file in each plugin's\n * classic script, so anything kept here would be kept once per copy; a\n * module that needs to remember something about a node keeps its own\n * WeakMap.\n */\n\n/** Every element under `root` matching `selector`, as an array. */\nexport function all(root, selector) {\n return root ? Array.prototype.slice.call(root.querySelectorAll(selector)) : [];\n}\n\n/** The first element under `root` matching `selector`, or null. */\nexport function one(root, selector) {\n return root ? root.querySelector(selector) : null;\n}\n\n/** `root` itself when it matches, then every element under it that does. */\nexport function selfAndAll(root, selector) {\n if (!root) { return []; }\n\n var found = all(root, selector);\n if (root.nodeType === 1 && root.matches(selector)) { found.unshift(root); }\n return found;\n}\n\n/** The element children of `node`, those matching `selector` if one is given. */\nexport function children(node, selector) {\n if (!node) { return []; }\n\n return Array.prototype.filter.call(node.children, function(each) {\n return !selector || each.matches(selector);\n });\n}\n\n/** The first element child matching `selector`, or null. */\nexport function child(node, selector) {\n return children(node, selector)[0] || null;\n}\n\n/** The nearest ancestor-or-self matching `selector` below `stopAt`, or null. */\nexport function closest(node, selector, stopAt) {\n var found = node && node.nodeType === 1 ? node.closest(selector) : null;\n\n if (found && stopAt && found !== stopAt && !stopAt.contains(found)) { return null; }\n return found;\n}\n\n/** Whether `node` is an element matching `selector`. */\nexport function is(node, selector) {\n return !!node && node.nodeType === 1 && node.matches(selector);\n}\n\n/** Whether `node` is in the document. */\nexport function attached(node) {\n return !!node && document.documentElement.contains(node);\n}\n\n/** The element siblings after `node` that match `selector`. */\nexport function nextAll(node, selector) {\n var found = [];\n\n for (var next = node.nextElementSibling; next; next = next.nextElementSibling) {\n if (!selector || next.matches(selector)) { found.push(next); }\n }\n return found;\n}\n\n/** The ancestors of `node` up to, and not including, `stop`, nearest first. */\nexport function parentsUntil(node, stop) {\n var found = [];\n\n for (var parent = node.parentElement; parent && parent !== stop; parent = parent.parentElement) {\n found.push(parent);\n }\n return found;\n}\n\n/**\n * The nodes the html parses into, detached. Parsed the way innerHTML parses,\n * so a <script> in it never runs, here or once it is in the page.\n */\nexport function parse(html) {\n var template = document.createElement('template');\n template.innerHTML = html;\n return Array.prototype.slice.call(template.content.childNodes);\n}\n\n/** The one element the html is, detached. */\nexport function create(html) {\n var nodes = parse(html.trim());\n\n for (var i = 0; i < nodes.length; i++) {\n if (nodes[i].nodeType === 1) { return nodes[i]; }\n }\n return null;\n}\n\n/** An element of `tag`, with `attributes` and `text`. */\nexport function element(tag, attributes, text) {\n var node = document.createElement(tag);\n\n Object.keys(attributes || {}).forEach(function(name) {\n var value = attributes[name];\n if (value !== null && value !== undefined && value !== false) { node.setAttribute(name, value); }\n });\n if (text !== undefined && text !== null) { node.textContent = text; }\n\n return node;\n}\n\n/** Replace what `node` holds with `html`. A <script> in it does not run. */\nexport function setHtml(node, html) {\n node.innerHTML = html === undefined || html === null ? '' : String(html);\n return node;\n}\n\n/** Add one or several space separated classes. */\nexport function addClass(node, names) {\n split(names).forEach(function(name) { node.classList.add(name); });\n return node;\n}\n\nexport function removeClass(node, names) {\n split(names).forEach(function(name) { node.classList.remove(name); });\n return node;\n}\n\n/** Each class on, or off, or flipped when `on` is not given. */\nexport function toggleClass(node, names, state) {\n split(names).forEach(function(name) {\n if (state === undefined) {\n node.classList.toggle(name);\n } else {\n node.classList.toggle(name, !!state);\n }\n });\n return node;\n}\n\nexport function hasClass(node, name) {\n return !!node && node.nodeType === 1 && node.classList.contains(name);\n}\n\nfunction split(names) {\n return String(names || '').split(/\\s+/).filter(Boolean);\n}\n\n/** Take the class attribute off when there is nothing left in it. */\nexport function dropEmptyClass(node) {\n if (!node.getAttribute('class')) { node.removeAttribute('class'); }\n return node;\n}\n\n/** Take the style attribute off when there is nothing left in it. */\nexport function dropEmptyStyle(node) {\n if (!node.getAttribute('style')) { node.removeAttribute('style'); }\n return node;\n}\n\n/** Set attributes; a null or undefined value takes the attribute off. */\nexport function attr(node, attributes) {\n Object.keys(attributes).forEach(function(name) {\n var value = attributes[name];\n\n if (value === null || value === undefined) {\n node.removeAttribute(name);\n } else {\n node.setAttribute(name, value);\n }\n });\n return node;\n}\n\n/**\n * Inline styles, by css property name. A number is pixels for the properties\n * that take a length, as jQuery had it; an empty string takes one off.\n */\nexport function css(node, styles) {\n Object.keys(styles).forEach(function(property) {\n var value = styles[property];\n\n if (typeof value === 'number' && !UNITLESS[property]) { value = value + 'px'; }\n node.style.setProperty(property, value === null || value === undefined ? '' : String(value));\n });\n return node;\n}\n\nvar UNITLESS = { opacity: true, 'z-index': true, 'flex-grow': true, 'flex-shrink': true, order: true };\n\n/** What an element of this tag shows as when nothing hides it. */\nvar defaultDisplays = {};\n\nfunction defaultDisplay(node) {\n var tag = node.nodeName;\n\n if (!defaultDisplays[tag]) {\n var probe = document.body.appendChild(document.createElement(tag));\n defaultDisplays[tag] = getComputedStyle(probe).display;\n probe.remove();\n if (defaultDisplays[tag] === 'none') { defaultDisplays[tag] = 'block'; }\n }\n return defaultDisplays[tag];\n}\n\n/** Show a node: its inline display:none off, and a display of its own if a stylesheet hides it. */\nexport function show(node) {\n node.style.removeProperty('display');\n if (getComputedStyle(node).display === 'none') { node.style.display = defaultDisplay(node); }\n return node;\n}\n\nexport function hide(node) {\n node.style.display = 'none';\n return node;\n}\n\n/** Show or hide; flip when `on` is not given. */\nexport function toggle(node, state) {\n if (state === undefined) { state = !visible(node); }\n return state ? show(node) : hide(node);\n}\n\n/** Whether a node takes up room: what jQuery's :visible meant. */\nexport function visible(node) {\n return !!(node.offsetWidth || node.offsetHeight || node.getClientRects().length);\n}\n\n/** The border box's width, fractions included. */\nexport function outerWidth(node) {\n return node.getBoundingClientRect().width;\n}\n\nexport function outerHeight(node) {\n return node.getBoundingClientRect().height;\n}\n\n/** The content box's height, which is what jQuery's height() gave. */\nexport function contentHeight(node) {\n var style = getComputedStyle(node);\n return node.clientHeight - parseFloat(style.paddingTop) - parseFloat(style.paddingBottom);\n}\n\n/** Where a node is on the page, not in the window. */\nexport function offset(node) {\n var box = node.getBoundingClientRect();\n return { top: box.top + window.pageYOffset, left: box.left + window.pageXOffset };\n}\n\n/** Its index among its parent's element children, those matching `selector` if given. */\nexport function indexIn(node, selector) {\n return children(node.parentElement, selector).indexOf(node);\n}\n\n/** Put `node` right after `reference`. */\nexport function insertAfter(node, reference) {\n reference.parentNode.insertBefore(node, reference.nextSibling);\n return node;\n}\n\n/** Replace `node` with what it holds. */\nexport function unwrap(node) {\n var parent = node.parentNode;\n\n while (node.firstChild) { parent.insertBefore(node.firstChild, node); }\n node.remove();\n}\n\n/** Put `node` inside `wrapper`, where `node` was. */\nexport function wrap(node, wrapper) {\n node.parentNode.insertBefore(wrapper, node);\n wrapper.appendChild(node);\n return wrapper;\n}\n\n/**\n * Listen on `root` for `types` (space separated) on descendants that match\n * `selector`, with `this` the matched element, as jQuery's delegated\n * handlers had it. Hands back the listener, for removeEventListener; a\n * signal in `options` removes it too.\n */\nexport function delegate(root, types, selector, handler, options) {\n var listener = function(event) {\n var match = closest(event.target, selector, root);\n if (match && root.contains(match)) { return handler.call(match, event); }\n return undefined;\n };\n\n split(types).forEach(function(type) { root.addEventListener(type, listener, options); });\n return listener;\n}\n\n/** Listen for several space separated event types with one handler. */\nexport function on(target, types, handler, options) {\n split(types).forEach(function(type) { target.addEventListener(type, handler, options); });\n return handler;\n}\n\nexport function off(target, types, handler, options) {\n split(types).forEach(function(type) { target.removeEventListener(type, handler, options); });\n}\n\n/** A mouse event of `type` sent to `node`, the way a pointer would. */\nexport function fire(node, type) {\n node.dispatchEvent(new MouseEvent(type, { bubbles: type !== 'mouseenter' && type !== 'mouseleave' }));\n}\n\n/* ------------------------------------------------------------------\n * Taking a node away, visibly.\n *\n * The durations are jQuery's: 400 ms unless the caller says otherwise. `done` runs once the node is out of sight, which is\n * when the caller removes it; a node that is already out of sight is done at\n * once, on the next task, as jQuery had it.\n * ------------------------------------------------------------------ */\n\nvar DEFAULT_DURATION = 400;\n\nfunction animateAway(node, frames, duration, done) {\n duration = duration === undefined ? DEFAULT_DURATION : duration;\n\n var finish = function() {\n hide(node);\n if (done) { done(); }\n };\n\n if (!visible(node) || !node.animate || duration <= 0) {\n window.setTimeout(finish, 0);\n return;\n }\n\n var animation = node.animate(frames(getComputedStyle(node)), {\n duration: duration,\n easing: 'ease-in-out',\n });\n var called = false;\n var once = function() {\n if (called) { return; }\n called = true;\n finish();\n };\n\n animation.onfinish = once;\n animation.oncancel = once;\n}\n\n/** Fold a node up to nothing, then hide it. */\nexport function slideUp(node, duration, done) {\n if (typeof duration === 'function') {\n done = duration;\n duration = undefined;\n }\n\n node.style.overflow = 'hidden';\n animateAway(node, function(style) {\n return [\n {\n height: style.height,\n paddingTop: style.paddingTop,\n paddingBottom: style.paddingBottom,\n marginTop: style.marginTop,\n marginBottom: style.marginBottom,\n },\n { height: '0px', paddingTop: '0px', paddingBottom: '0px', marginTop: '0px', marginBottom: '0px' },\n ];\n }, duration, function() {\n node.style.removeProperty('overflow');\n if (done) { done(); }\n });\n}\n\n/** Fade a node out, then hide it. */\nexport function fadeOut(node, duration, done) {\n animateAway(node, function(style) {\n return [{ opacity: style.opacity }, { opacity: 0 }];\n }, duration, done);\n}\n\n/** Fade and fold a node, in height and, with `width`, sideways too, then hide it. */\nexport function shrinkAway(node, duration, done, width) {\n node.style.overflow = 'hidden';\n animateAway(node, function(style) {\n var from = { opacity: style.opacity, height: style.height };\n var to = { opacity: 0, height: '0px' };\n\n if (width) {\n from.width = style.width;\n to.width = '0px';\n }\n return [from, to];\n }, duration, function() {\n node.style.removeProperty('overflow');\n if (done) { done(); }\n });\n}\n", "/**\n * Carousels for grid-editor.\n *\n * A container plugin: load this file after the editor and the toolbar offers\n * a carousel, a bootstrap carousel whose slides are editable regions. What it\n * can ask the editor for is the handle its factory is called with, described\n * in docs/plugins.md.\n *\n * <script src=\"dist/grideditor.min.js\"></script>\n * <script src=\"dist/plugins/grideditor.carousel.min.js\"></script>\n *\n * Only one slide shows on the canvas, as on the page. The container's drawer\n * says which, and moves to the next and the previous; Bootstrap's own arrows\n * and indicators are drawn but do not answer, and neither does its javascript:\n * the attributes it acts on are put aside while editing. A carousel's options\n * - arrows, indicators, fade, dark theme, autoplay and its interval, pause,\n * wrap, keyboard and touch - are Bootstrap's classes and attributes and\n * nothing else: they are read from the markup, chosen in the container's\n * settings panel, or given to createContainer and the carousel setting for\n * the ones made new.\n */\nimport { GridEditor } from '../grideditor.js';\nimport * as dom from '../dom.js';\n\nObject.assign(GridEditor.locales.en, {\n 'container.add_carousel': 'Carousel',\n 'container.add_carousel_item': 'Add slide',\n 'confirm.delete_carousel_item': 'Delete this slide and everything in it?',\n 'panel.kind_carousel_item': 'Slide',\n 'container.carousel_previous': 'Previous',\n 'container.carousel_next': 'Next',\n 'container.carousel_slide_label': 'Slide {number}',\n 'container.carousel_counter': '{current} / {total}',\n 'tool.carousel_show_previous': 'Previous slide',\n 'tool.carousel_show_next': 'Next slide',\n 'tool.carousel_move_back': 'Move back',\n 'tool.carousel_move_forward': 'Move forward',\n 'container.carousel_section': 'Carousel',\n 'container.carousel_controls': 'Arrows',\n 'container.carousel_indicators': 'Indicators',\n 'container.carousel_fade': 'Fade',\n 'container.carousel_dark': 'Dark theme',\n 'container.carousel_ride': 'Autoplay',\n 'container.carousel_ride_no': 'No',\n 'container.carousel_ride_load': 'On load',\n 'container.carousel_ride_interaction': 'After first interaction',\n 'container.carousel_interval': 'Interval (s)',\n 'container.carousel_pause': 'Pause on hover',\n 'container.carousel_wrap': 'Wrap around',\n 'container.carousel_keyboard': 'Keyboard',\n 'container.carousel_touch': 'Touch swipe',\n 'container.carousel_item_section': 'Slide',\n});\n\n/** What a carousel made new has when neither the call nor the setting says. */\nvar DEFAULTS = {\n controls: true,\n indicators: true,\n fade: false,\n dark: false,\n ride: false,\n interval: null,\n pause: true,\n wrap: true,\n keyboard: true,\n touch: true,\n slides: 2,\n};\n\nvar CHECKBOXES = ['controls', 'indicators', 'fade', 'dark'];\nvar BEHAVIOURS = ['pause', 'wrap', 'keyboard', 'touch'];\n\n/** Each option's checkbox in the panel, and its label. */\nvar LABELS = {\n controls: { labelKey: 'container.carousel_controls' },\n indicators: { labelKey: 'container.carousel_indicators' },\n fade: { labelKey: 'container.carousel_fade' },\n dark: { labelKey: 'container.carousel_dark' },\n pause: { labelKey: 'container.carousel_pause' },\n wrap: { labelKey: 'container.carousel_wrap' },\n keyboard: { labelKey: 'container.carousel_keyboard' },\n touch: { labelKey: 'container.carousel_touch' },\n};\nvar RIDE_LABEL = { labelKey: 'container.carousel_ride' };\nvar INTERVAL_LABEL = { labelKey: 'container.carousel_interval' };\nvar RIDES = [false, 'carousel', 'true'];\nvar MIN_INTERVAL = 1000; // ms\n\n/** What Bootstrap puts on a slide while it moves one in: never part of the page. */\nvar TRANSITION = 'carousel-item-next carousel-item-prev carousel-item-start carousel-item-end';\n\nfunction validInterval(value) {\n return typeof value === 'number' && isFinite(value) && Math.floor(value) === value && value >= MIN_INTERVAL;\n}\n\nvar CHECKS = {\n ride: function(value) { return RIDES.indexOf(value) !== -1; },\n interval: function(value) { return value === null || validInterval(value); },\n slides: function(value) { return typeof value === 'number' && Math.floor(value) === value && value >= 1; },\n};\n\n/** The values an option takes, as the warning lists them. */\nfunction takes(key) {\n if (key === 'ride') { return JSON.stringify(RIDES); }\n if (key === 'interval') { return 'null or an integer of ' + MIN_INTERVAL + ' or more'; }\n if (key === 'slides') { return 'an integer of 1 or more'; }\n\n return '[true,false]';\n}\n\nfunction isValid(key, value) {\n return CHECKS[key] ? CHECKS[key](value) : typeof value === 'boolean';\n}\n\nvar fieldCounter = 0;\n\nGridEditor.containers.carousel = function(ge) {\n\n var shown = new WeakMap(); // The slide each carousel shows, whatever its markup says\n var sections = []; // { node, element, render } for every panel section built\n\n function carouselOf(container) {\n return dom.child(container, '.carousel');\n }\n\n function innerOf(container) {\n return dom.child(carouselOf(container), '.carousel-inner');\n }\n\n /** A container with no carousel or no slides' holder is left as it is. */\n function usable(container) {\n return !!innerOf(container);\n }\n\n function itemsOf(container) {\n return dom.children(innerOf(container), '.carousel-item');\n }\n\n /** The carousel's id, which its arrows and indicators point at. */\n function idOf(carousel) {\n if (!carousel.getAttribute('id')) { carousel.setAttribute('id', ge.containerId('carousel')); }\n\n return carousel.getAttribute('id');\n }\n\n /** A Bootstrap attribute, whether it is where Bootstrap reads it or put aside for editing. */\n function bsAttribute(node, name) {\n var value = node.getAttribute('data-bs-' + name);\n\n return value === null ? node.getAttribute('data-ge-bs-' + name) : value;\n }\n\n function intervalOf(node) {\n var value = parseInt(node.getAttribute('data-bs-interval'), 10);\n\n return isFinite(value) && value > 0 ? value : null;\n }\n\n function writeInterval(node, value) {\n if (value === null) {\n node.removeAttribute('data-bs-interval');\n } else {\n node.setAttribute('data-bs-interval', String(value));\n }\n }\n\n /** What a carousel's classes and attributes say it is. */\n function read(container) {\n var carousel = carouselOf(container);\n var ride = bsAttribute(carousel, 'ride');\n var off = function(name) { return carousel.getAttribute('data-bs-' + name) !== 'false'; };\n\n return {\n controls: !!dom.child(carousel, '.carousel-control-prev, .carousel-control-next'),\n indicators: !!dom.child(carousel, '.carousel-indicators'),\n fade: dom.hasClass(carousel, 'carousel-fade'),\n dark: carousel.getAttribute('data-bs-theme') === 'dark',\n ride: ride === 'carousel' || ride === 'true' ? ride : false,\n interval: intervalOf(carousel),\n pause: off('pause'),\n wrap: off('wrap'),\n keyboard: off('keyboard'),\n touch: off('touch'),\n };\n }\n\n function controlButton(carousel, direction) {\n var button = dom.element('button', {\n 'class': 'carousel-control-' + direction,\n type: 'button',\n 'data-bs-target': '#' + idOf(carousel),\n 'data-bs-slide': direction,\n });\n\n button.appendChild(dom.element('span', { 'class': 'carousel-control-' + direction + '-icon', 'aria-hidden': 'true' }));\n button.appendChild(dom.element('span', { 'class': 'visually-hidden' },\n direction === 'prev' ? ge.t('container.carousel_previous') : ge.t('container.carousel_next')));\n\n return button;\n }\n\n function setControls(container, on) {\n var carousel = carouselOf(container);\n\n dom.children(carousel, '.carousel-control-prev, .carousel-control-next').forEach(function(button) { button.remove(); });\n\n if (on) {\n carousel.appendChild(controlButton(carousel, 'prev'));\n carousel.appendChild(controlButton(carousel, 'next'));\n }\n }\n\n function setIndicators(container, on) {\n var carousel = carouselOf(container);\n var bar = dom.child(carousel, '.carousel-indicators');\n\n if (!on) {\n if (bar) { bar.remove(); }\n return;\n }\n\n if (!bar) {\n bar = carousel.insertBefore(dom.element('div', { 'class': 'carousel-indicators' }), carousel.firstChild);\n }\n\n rebuildIndicators(container);\n }\n\n /** One indicator a slide, in the slides' order, the shown one marked. */\n function rebuildIndicators(container, list) {\n var carousel = carouselOf(container);\n var bar = dom.child(carousel, '.carousel-indicators');\n if (!bar) { return; }\n\n list = list || itemsOf(container);\n var id = idOf(carousel);\n var active = 0;\n\n list.forEach(function(item, index) {\n if (dom.hasClass(item, 'active')) { active = index; }\n });\n\n bar.textContent = '';\n list.forEach(function(item, index) {\n bar.appendChild(dom.element('button', {\n type: 'button',\n 'data-bs-target': '#' + id,\n 'data-bs-slide-to': String(index),\n 'aria-label': ge.t('container.carousel_slide_label', { number: index + 1 }),\n }));\n });\n\n syncIndicators(container, list.length ? active : -1);\n }\n\n function syncIndicators(container, index) {\n var bar = dom.child(carouselOf(container), '.carousel-indicators');\n\n dom.children(bar).forEach(function(indicator, position) {\n dom.toggleClass(indicator, 'active', position === index);\n\n if (position === index) {\n indicator.setAttribute('aria-current', 'true');\n } else {\n indicator.removeAttribute('aria-current');\n }\n });\n }\n\n function write(container, key, value) {\n var carousel = carouselOf(container);\n\n if (key === 'controls') { setControls(container, value); }\n if (key === 'indicators') { setIndicators(container, value); }\n if (key === 'fade') { dom.toggleClass(carousel, 'carousel-fade', value); }\n\n if (key === 'dark') {\n if (value) {\n carousel.setAttribute('data-bs-theme', 'dark');\n } else if (carousel.getAttribute('data-bs-theme') === 'dark') {\n carousel.removeAttribute('data-bs-theme');\n }\n }\n\n if (key === 'ride') {\n carousel.removeAttribute('data-bs-ride');\n carousel.removeAttribute('data-ge-bs-ride');\n if (value) { carousel.setAttribute('data-bs-ride', value); }\n }\n\n if (key === 'interval') { writeInterval(carousel, value); }\n\n if (BEHAVIOURS.indexOf(key) !== -1) {\n if (value) {\n carousel.removeAttribute('data-bs-' + key);\n } else {\n carousel.setAttribute('data-bs-' + key, 'false');\n }\n }\n\n dom.dropEmptyClass(carousel);\n }\n\n /**\n * A value for a new carousel: the option, or the carousel setting, or the\n * default. One the option does not take is warned about and the default used.\n */\n function chosen(options, key) {\n var setting = ge.settings.carousel || {};\n var value = options[key] !== undefined ? options[key] : setting[key];\n\n if (value === undefined) { return DEFAULTS[key]; }\n if (isValid(key, value)) { return value; }\n\n ge.warn('carousel: ' + JSON.stringify(value) + ' is not a ' + key + ', which takes ' +\n takes(key) + ': ' + JSON.stringify(DEFAULTS[key]) + ' is used');\n return DEFAULTS[key];\n }\n\n /** What stops Bootstrap's javascript acting on the carousel while it is edited. */\n function suspend(container) {\n var carousel = carouselOf(container);\n\n dom.children(carousel, '.carousel-control-prev, .carousel-control-next').forEach(ge.suspendToggles);\n dom.children(dom.child(carousel, '.carousel-indicators')).forEach(ge.suspendToggles);\n\n // By hand: suspendToggles(carousel) would take a tabs or an accordion\n // inside a slide off its toggles as well\n var ride = carousel.getAttribute('data-bs-ride');\n if (ride !== null) {\n carousel.setAttribute('data-ge-bs-ride', ride);\n carousel.removeAttribute('data-bs-ride');\n }\n }\n\n /** A carousel Bootstrap started before the editor did stops, and is forgotten. */\n function stopBootstrap(carousel) {\n var library = GridEditor.bootstrap || window.bootstrap;\n var instance = library && library.Carousel ? library.Carousel.getInstance(carousel) : null;\n\n if (instance) {\n instance.pause();\n instance.dispose();\n }\n }\n\n function buildItem(container, active, interval) {\n var item = innerOf(container).appendChild(dom.element('div', { 'class': active ? 'carousel-item active' : 'carousel-item' }));\n\n item.appendChild(ge.defaultRegion());\n if (interval !== null && interval !== undefined) { writeInterval(item, interval); }\n\n return item;\n }\n\n /** The slide the carousel shows: the one it was left on, or the markup's, or the first. */\n function currentOf(container) {\n var list = itemsOf(container);\n var kept = shown.get(container);\n\n if (kept && list.indexOf(kept) !== -1) { return kept; }\n\n return list.filter(function(item) { return dom.hasClass(item, 'active'); })[0] || list[0] || null;\n }\n\n /** Show one slide and only that one. */\n function show(container, item, list) {\n list = list || itemsOf(container);\n\n list.forEach(function(each) { dom.toggleClass(each, 'active', each === item); });\n\n if (item) {\n shown.set(container, item);\n } else {\n shown.delete(container);\n }\n\n syncIndicators(container, list.indexOf(item));\n refreshNavigation(container);\n }\n\n function step(container, offset) {\n var list = itemsOf(container);\n if (list.length < 2) { return; }\n\n var index = list.indexOf(currentOf(container));\n show(container, list[(index + offset + list.length) % list.length]);\n }\n\n function disable(tool, state) {\n if (!tool) { return; }\n\n dom.toggleClass(tool, 'disabled', state);\n\n if (state) {\n tool.setAttribute('aria-disabled', 'true');\n } else {\n tool.removeAttribute('aria-disabled');\n }\n }\n\n function disabled(tool) {\n return tool.getAttribute('aria-disabled') === 'true';\n }\n\n /** The container's counter and arrows, and every slide's move tools, as the slides stand. */\n function refreshNavigation(container) {\n var list = itemsOf(container);\n var drawer = dom.child(container, '.ge-container-drawer');\n var index = list.indexOf(currentOf(container));\n\n if (drawer) {\n var counter = dom.child(drawer, '.ge-carousel-counter');\n\n if (counter) {\n counter.textContent = ge.t('container.carousel_counter', {\n current: list.length ? index + 1 : 0,\n total: list.length,\n });\n }\n\n disable(dom.child(drawer, '.ge-carousel-previous'), list.length < 2);\n disable(dom.child(drawer, '.ge-carousel-next'), list.length < 2);\n }\n\n list.forEach(function(item, position) {\n var tools = dom.child(item, '.ge-pane-drawer');\n\n disable(dom.child(tools, '.ge-carousel-move-back'), position === 0);\n disable(dom.child(tools, '.ge-carousel-move-forward'), position === list.length - 1);\n });\n }\n\n function moveItem(container, item, offset) {\n var inner = innerOf(container);\n var list = itemsOf(container);\n var index = list.indexOf(item);\n var target = index + offset;\n\n if (target < 0 || target >= list.length) { return; }\n\n var from = { parent: inner, index: index };\n\n ge.operate(function() {\n if (!ge.emit('before-move', ge.payloadFor('carousel-item', item, {\n parent: inner,\n source: 'tool',\n from: from,\n }))) { return; }\n\n inner.insertBefore(item, offset < 0 ? list[target] : list[target].nextSibling);\n show(container, currentOf(container));\n rebuildIndicators(container);\n suspend(container);\n\n ge.emit('after-move', ge.payloadFor('carousel-item', item, {\n parent: inner,\n source: 'tool',\n from: from,\n to: { parent: inner, index: target },\n container: container,\n }));\n });\n }\n\n /** What the slide to show is once `item` goes: the next one, or the previous if it was the last. */\n function afterRemoving(container, item, removed) {\n dom.fadeOut(item, 200, function() {\n var list = itemsOf(container);\n var rest = list.filter(function(each) { return each !== item; });\n\n if (currentOf(container) === item) {\n show(container, rest[Math.min(list.indexOf(item), rest.length - 1)] || null, rest);\n }\n\n rebuildIndicators(container, rest);\n removed();\n });\n }\n\n function createItemControls(container, item) {\n var drawer = ge.createPaneControls(item, 'carousel-item', ge.settings.carousel_tools,\n ge.t('confirm.delete_carousel_item'), function(removed) {\n afterRemoving(container, item, removed);\n });\n\n // A slide moves a place at a time, not by dragging\n var handle = dom.child(drawer, '.ge-move');\n if (handle) { handle.remove(); }\n\n var back = ge.createTool(drawer, ge.t('tool.carousel_move_back'), 'ge-carousel-move-back', 'bi bi-arrow-left', function() {\n if (!disabled(this)) { moveItem(container, item, -1); }\n });\n var forward = ge.createTool(drawer, ge.t('tool.carousel_move_forward'), 'ge-carousel-move-forward', 'bi bi-arrow-right', function() {\n if (!disabled(this)) { moveItem(container, item, 1); }\n });\n\n drawer.insertBefore(forward, drawer.firstChild);\n drawer.insertBefore(back, forward);\n }\n\n function addSlideTo(container, options) {\n options = options || {};\n\n if (!usable(container)) {\n ge.warn('carousel: there is no .carousel-inner to add a slide to');\n return null;\n }\n\n var interval = null;\n\n if (options.interval !== undefined && options.interval !== null) {\n if (validInterval(options.interval)) {\n interval = options.interval;\n } else {\n ge.warn('carousel: ' + JSON.stringify(options.interval) + ' is not a interval, which takes ' +\n takes('interval') + ': null is used');\n }\n }\n\n var item = buildItem(container, false, interval);\n\n show(container, item);\n rebuildIndicators(container);\n\n return item;\n }\n\n function field(labelKey, control, id) {\n var box = dom.element('div', { 'class': 'ge-carousel-option mb-2' });\n\n box.appendChild(dom.element('label', { 'class': 'form-label', 'for': id }, ge.t(labelKey)));\n box.appendChild(control);\n\n return box;\n }\n\n function nextId() {\n return 'ge-carousel-option-' + (++fieldCounter);\n }\n\n /**\n * The interval in seconds, for a node: empty takes it off, under a\n * second is refused and the field says so, and anything else is written\n * in milliseconds.\n */\n function intervalField(node, onWrite) {\n var id = nextId();\n var input = dom.element('input', {\n 'class': 'form-control form-control-sm',\n id: id,\n type: 'number',\n step: '0.1',\n min: String(MIN_INTERVAL / 1000),\n });\n\n input.addEventListener('change', function() {\n var text = input.value.trim();\n var seconds = parseFloat(text);\n\n if (text === '') {\n dom.removeClass(input, 'is-invalid');\n writeInterval(node, null);\n } else if (!isFinite(seconds) || Math.round(seconds * 1000) < MIN_INTERVAL) {\n dom.addClass(input, 'is-invalid');\n return;\n } else {\n dom.removeClass(input, 'is-invalid');\n writeInterval(node, Math.round(seconds * 1000));\n }\n\n if (onWrite) { onWrite(); }\n });\n\n return {\n id: id,\n input: input,\n render: function() {\n var interval = intervalOf(node);\n\n dom.removeClass(input, 'is-invalid');\n input.value = interval === null ? '' : String(interval / 1000);\n },\n };\n }\n\n function checkbox(labelKey, onChange) {\n var id = nextId();\n var box = dom.element('div', { 'class': 'form-check' });\n var input = box.appendChild(dom.element('input', { 'class': 'form-check-input', type: 'checkbox', id: id }));\n\n box.appendChild(dom.element('label', { 'class': 'form-check-label', 'for': id }, ge.t(labelKey)));\n input.addEventListener('change', function() { onChange(input.checked); });\n\n return { box: box, input: input };\n }\n\n /** The Carousel section of a carousel's settings panel. */\n function createSection(container) {\n var body = dom.element('div', { 'class': 'ge-carousel-options' });\n var inputs = {};\n\n function change(key, value) {\n write(container, key, value);\n suspend(container);\n render();\n }\n\n var rideId = nextId();\n var ride = dom.element('select', { 'class': 'form-select form-select-sm', id: rideId });\n\n [\n { value: 'false', labelKey: 'container.carousel_ride_no' },\n { value: 'carousel', labelKey: 'container.carousel_ride_load' },\n { value: 'true', labelKey: 'container.carousel_ride_interaction' },\n ].forEach(function(choice) {\n ride.appendChild(dom.element('option', { value: choice.value }, ge.t(choice.labelKey)));\n });\n ride.addEventListener('change', function() { change('ride', ride.value === 'false' ? false : ride.value); });\n body.appendChild(field(RIDE_LABEL.labelKey, ride, rideId));\n\n var interval = intervalField(carouselOf(container), function() { render(); });\n body.appendChild(field(INTERVAL_LABEL.labelKey, interval.input, interval.id));\n\n CHECKBOXES.concat(BEHAVIOURS).forEach(function(key) {\n var each = checkbox(LABELS[key].labelKey, function(on) { change(key, on); });\n\n inputs[key] = each.input;\n each.box.setAttribute('data-ge-carousel-option', key);\n body.appendChild(each.box);\n });\n\n /** Fill the fields from the markup, and turn off what autoplay being off leaves without use. */\n function render() {\n var values = read(container);\n\n ride.value = String(values.ride);\n interval.render();\n Object.keys(inputs).forEach(function(key) { inputs[key].checked = values[key]; });\n\n interval.input.disabled = values.ride === false;\n inputs.pause.disabled = values.ride === false;\n }\n\n render();\n sections.push({ node: container, element: body, render: render });\n\n return body;\n }\n\n /** The Slide section of a slide's settings panel. */\n function createItemSection(item) {\n var body = dom.element('div', { 'class': 'ge-carousel-options' });\n var interval = intervalField(item);\n\n body.appendChild(field(INTERVAL_LABEL.labelKey, interval.input, interval.id));\n interval.render();\n sections.push({ node: item, element: body, render: interval.render });\n\n return body;\n }\n\n return {\n labelKey: 'container.add_carousel',\n addPaneKey: 'container.add_carousel_item',\n paneKind: 'carousel-item',\n paneClass: 'ge-carousel-item',\n paneLabelKey: 'panel.kind_carousel_item',\n\n /**\n * `slides` slides, each a region, and the options of DEFAULTS as the\n * call, the carousel setting or the defaults give them.\n */\n create: function(options) {\n options = options || {};\n\n var container = dom.element('div', { 'data-ge-container': 'carousel' });\n var carousel = container.appendChild(dom.element('div', { 'class': 'carousel slide', id: ge.containerId('carousel') }));\n var slides = chosen(options, 'slides');\n\n carousel.appendChild(dom.element('div', { 'class': 'carousel-inner' }));\n\n for (var i = 0; i < slides; i++) {\n buildItem(container, i === 0);\n }\n\n Object.keys(DEFAULTS).filter(function(key) { return key !== 'slides'; }).forEach(function(key) {\n write(container, key, chosen(options, key));\n });\n\n return container;\n },\n\n addPane: addSlideTo,\n\n mark: function(container) {\n var carousel = carouselOf(container);\n if (!carousel || !usable(container)) { return; }\n\n stopBootstrap(carousel);\n suspend(container);\n\n var current = currentOf(container);\n\n itemsOf(container).forEach(function(item) {\n dom.addClass(item, 'ge-carousel-item');\n dom.removeClass(item, TRANSITION);\n\n if (!dom.child(item, '.ge-tools-drawer')) { createItemControls(container, item); }\n });\n\n show(container, current);\n },\n\n unmark: function(container) {\n ge.resumeToggles(container);\n if (!usable(container)) { return; }\n\n // What the page ships starts at the first slide, whichever one\n // the canvas was showing\n itemsOf(container).forEach(function(item, index) {\n dom.removeClass(item, 'ge-carousel-item ' + TRANSITION);\n dom.toggleClass(item, 'active', index === 0);\n dom.dropEmptyClass(item);\n });\n\n syncIndicators(container, itemsOf(container).length ? 0 : -1);\n },\n\n // The same, on a copy of the canvas: unmark only touches markup\n cleanMarkup: function(root) {\n var definition = this;\n dom.all(root, '[data-ge-container=\"carousel\"]').forEach(function(container) { definition.unmark(container); });\n },\n\n // The arrows, the counter and the arrow's other side: what moves the\n // carousel from slide to slide while it is edited\n tools: function(drawer, container) {\n if (!usable(container)) { return; }\n\n ge.createTool(drawer, ge.t('tool.carousel_show_previous'), 'ge-carousel-previous', 'bi bi-chevron-left', function() {\n if (!disabled(this)) { step(container, -1); }\n });\n\n var counter = ge.createTool(drawer, '', 'ge-carousel-counter', '', null);\n counter.textContent = '';\n counter.removeAttribute('title');\n\n ge.createTool(drawer, ge.t('tool.carousel_show_next'), 'ge-carousel-next', 'bi bi-chevron-right', function() {\n if (!disabled(this)) { step(container, 1); }\n });\n\n refreshNavigation(container);\n },\n\n panelSection: function(node, kind) {\n if (kind === 'carousel' && usable(node)) {\n return { labelKey: 'container.carousel_section', body: createSection(node) };\n }\n\n if (kind === 'carousel-item') {\n return { labelKey: 'container.carousel_item_section', body: createItemSection(node) };\n }\n\n return null;\n },\n\n // After a view change or a change of classes: the sections follow\n onRefresh: function(scope) {\n sections = sections.filter(function(entry) { return entry.element.isConnected; });\n sections.forEach(function(entry) {\n if (entry.node === scope || scope.contains(entry.node)) { entry.render(); }\n });\n },\n\n onDeinit: function() {\n sections = [];\n },\n };\n};\n"],
5
- "mappings": "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",
4
+ "sourcesContent": ["/**\n * What a plugin's or a locale's classic script imports in place of the\n * editor: the GridEditor the page already loaded.\n *\n * The build points `import { GridEditor } from '../grideditor.js'` here for\n * the classic scripts, so each registers on the editor the page has rather\n * than bringing its own. Loaded before the editor there is nothing to\n * register on, and saying so is better than a TypeError three calls later.\n */\nvar GridEditor = window.GridEditor;\n\nif (!GridEditor || typeof GridEditor.get !== 'function') {\n throw new Error('grid-editor: load grideditor.js (or grideditor.bundle.min.js) before its plugins, ' +\n 'its locales and grideditor.jquery.js');\n}\n\nexport { GridEditor };\nexport default GridEditor;\n", "/**\n * The DOM, the way grid-editor uses it.\n *\n * Small helpers over the browser's own API, for the core and the shipped\n * plugins. Not a public API: a plugin of a host's own is free to write its\n * DOM code however it likes, and this file makes no promise to it.\n *\n * Stateless on purpose. The build puts a copy of this file in each plugin's\n * classic script, so anything kept here would be kept once per copy; a\n * module that needs to remember something about a node keeps its own\n * WeakMap.\n */\n\n/** Every element under `root` matching `selector`, as an array. */\nexport function all(root, selector) {\n return root ? Array.prototype.slice.call(root.querySelectorAll(selector)) : [];\n}\n\n/** The first element under `root` matching `selector`, or null. */\nexport function one(root, selector) {\n return root ? root.querySelector(selector) : null;\n}\n\n/** `root` itself when it matches, then every element under it that does. */\nexport function selfAndAll(root, selector) {\n if (!root) { return []; }\n\n var found = all(root, selector);\n if (root.nodeType === 1 && root.matches(selector)) { found.unshift(root); }\n return found;\n}\n\n/** The element children of `node`, those matching `selector` if one is given. */\nexport function children(node, selector) {\n if (!node) { return []; }\n\n return Array.prototype.filter.call(node.children, function(each) {\n return !selector || each.matches(selector);\n });\n}\n\n/** The first element child matching `selector`, or null. */\nexport function child(node, selector) {\n return children(node, selector)[0] || null;\n}\n\n/** The nearest ancestor-or-self matching `selector` below `stopAt`, or null. */\nexport function closest(node, selector, stopAt) {\n var found = node && node.nodeType === 1 ? node.closest(selector) : null;\n\n if (found && stopAt && found !== stopAt && !stopAt.contains(found)) { return null; }\n return found;\n}\n\n/** Whether `node` is an element matching `selector`. */\nexport function is(node, selector) {\n return !!node && node.nodeType === 1 && node.matches(selector);\n}\n\n/** Whether `node` is in the document. */\nexport function attached(node) {\n return !!node && document.documentElement.contains(node);\n}\n\n/** The element siblings after `node` that match `selector`. */\nexport function nextAll(node, selector) {\n var found = [];\n\n for (var next = node.nextElementSibling; next; next = next.nextElementSibling) {\n if (!selector || next.matches(selector)) { found.push(next); }\n }\n return found;\n}\n\n/** The ancestors of `node` up to, and not including, `stop`, nearest first. */\nexport function parentsUntil(node, stop) {\n var found = [];\n\n for (var parent = node.parentElement; parent && parent !== stop; parent = parent.parentElement) {\n found.push(parent);\n }\n return found;\n}\n\n/**\n * The nodes the html parses into, detached. Parsed the way innerHTML parses,\n * so a <script> in it never runs, here or once it is in the page.\n */\nexport function parse(html) {\n var template = document.createElement('template');\n template.innerHTML = html;\n return Array.prototype.slice.call(template.content.childNodes);\n}\n\n/** The one element the html is, detached. */\nexport function create(html) {\n var nodes = parse(html.trim());\n\n for (var i = 0; i < nodes.length; i++) {\n if (nodes[i].nodeType === 1) { return nodes[i]; }\n }\n return null;\n}\n\n/** An element of `tag`, with `attributes` and `text`. */\nexport function element(tag, attributes, text) {\n var node = document.createElement(tag);\n\n Object.keys(attributes || {}).forEach(function(name) {\n var value = attributes[name];\n if (value !== null && value !== undefined && value !== false) { node.setAttribute(name, value); }\n });\n if (text !== undefined && text !== null) { node.textContent = text; }\n\n return node;\n}\n\n/** Replace what `node` holds with `html`. A <script> in it does not run. */\nexport function setHtml(node, html) {\n node.innerHTML = html === undefined || html === null ? '' : String(html);\n return node;\n}\n\n/** Add one or several space separated classes. */\nexport function addClass(node, names) {\n split(names).forEach(function(name) { node.classList.add(name); });\n return node;\n}\n\nexport function removeClass(node, names) {\n split(names).forEach(function(name) { node.classList.remove(name); });\n return node;\n}\n\n/** Each class on, or off, or flipped when `on` is not given. */\nexport function toggleClass(node, names, state) {\n split(names).forEach(function(name) {\n if (state === undefined) {\n node.classList.toggle(name);\n } else {\n node.classList.toggle(name, !!state);\n }\n });\n return node;\n}\n\nexport function hasClass(node, name) {\n return !!node && node.nodeType === 1 && node.classList.contains(name);\n}\n\nfunction split(names) {\n return String(names || '').split(/\\s+/).filter(Boolean);\n}\n\n/** Take the class attribute off when there is nothing left in it. */\nexport function dropEmptyClass(node) {\n if (!node.getAttribute('class')) { node.removeAttribute('class'); }\n return node;\n}\n\n/** Take the style attribute off when there is nothing left in it. */\nexport function dropEmptyStyle(node) {\n if (!node.getAttribute('style')) { node.removeAttribute('style'); }\n return node;\n}\n\n/** Set attributes; a null or undefined value takes the attribute off. */\nexport function attr(node, attributes) {\n Object.keys(attributes).forEach(function(name) {\n var value = attributes[name];\n\n if (value === null || value === undefined) {\n node.removeAttribute(name);\n } else {\n node.setAttribute(name, value);\n }\n });\n return node;\n}\n\n/**\n * Inline styles, by css property name. A number is pixels for the properties\n * that take a length, as jQuery had it; an empty string takes one off.\n */\nexport function css(node, styles) {\n Object.keys(styles).forEach(function(property) {\n var value = styles[property];\n\n if (typeof value === 'number' && !UNITLESS[property]) { value = value + 'px'; }\n node.style.setProperty(property, value === null || value === undefined ? '' : String(value));\n });\n return node;\n}\n\nvar UNITLESS = { opacity: true, 'z-index': true, 'flex-grow': true, 'flex-shrink': true, order: true };\n\n/** What an element of this tag shows as when nothing hides it. */\nvar defaultDisplays = {};\n\nfunction defaultDisplay(node) {\n var tag = node.nodeName;\n\n if (!defaultDisplays[tag]) {\n var probe = document.body.appendChild(document.createElement(tag));\n defaultDisplays[tag] = getComputedStyle(probe).display;\n probe.remove();\n if (defaultDisplays[tag] === 'none') { defaultDisplays[tag] = 'block'; }\n }\n return defaultDisplays[tag];\n}\n\n/** Show a node: its inline display:none off, and a display of its own if a stylesheet hides it. */\nexport function show(node) {\n node.style.removeProperty('display');\n if (getComputedStyle(node).display === 'none') { node.style.display = defaultDisplay(node); }\n return node;\n}\n\nexport function hide(node) {\n node.style.display = 'none';\n return node;\n}\n\n/** Show or hide; flip when `on` is not given. */\nexport function toggle(node, state) {\n if (state === undefined) { state = !visible(node); }\n return state ? show(node) : hide(node);\n}\n\n/** Whether a node takes up room: what jQuery's :visible meant. */\nexport function visible(node) {\n return !!(node.offsetWidth || node.offsetHeight || node.getClientRects().length);\n}\n\n/** The border box's width, fractions included. */\nexport function outerWidth(node) {\n return node.getBoundingClientRect().width;\n}\n\nexport function outerHeight(node) {\n return node.getBoundingClientRect().height;\n}\n\n/** The content box's height, which is what jQuery's height() gave. */\nexport function contentHeight(node) {\n var style = getComputedStyle(node);\n return node.clientHeight - parseFloat(style.paddingTop) - parseFloat(style.paddingBottom);\n}\n\n/** Where a node is on the page, not in the window. */\nexport function offset(node) {\n var box = node.getBoundingClientRect();\n return { top: box.top + window.pageYOffset, left: box.left + window.pageXOffset };\n}\n\n/** Its index among its parent's element children, those matching `selector` if given. */\nexport function indexIn(node, selector) {\n return children(node.parentElement, selector).indexOf(node);\n}\n\n/** Put `node` right after `reference`. */\nexport function insertAfter(node, reference) {\n reference.parentNode.insertBefore(node, reference.nextSibling);\n return node;\n}\n\n/** Replace `node` with what it holds. */\nexport function unwrap(node) {\n var parent = node.parentNode;\n\n while (node.firstChild) { parent.insertBefore(node.firstChild, node); }\n node.remove();\n}\n\n/** Put `node` inside `wrapper`, where `node` was. */\nexport function wrap(node, wrapper) {\n node.parentNode.insertBefore(wrapper, node);\n wrapper.appendChild(node);\n return wrapper;\n}\n\n/**\n * Listen on `root` for `types` (space separated) on descendants that match\n * `selector`, with `this` the matched element, as jQuery's delegated\n * handlers had it. Hands back the listener, for removeEventListener; a\n * signal in `options` removes it too.\n */\nexport function delegate(root, types, selector, handler, options) {\n var listener = function(event) {\n var match = closest(event.target, selector, root);\n if (match && root.contains(match)) { return handler.call(match, event); }\n return undefined;\n };\n\n split(types).forEach(function(type) { root.addEventListener(type, listener, options); });\n return listener;\n}\n\n/** Listen for several space separated event types with one handler. */\nexport function on(target, types, handler, options) {\n split(types).forEach(function(type) { target.addEventListener(type, handler, options); });\n return handler;\n}\n\nexport function off(target, types, handler, options) {\n split(types).forEach(function(type) { target.removeEventListener(type, handler, options); });\n}\n\n/** A mouse event of `type` sent to `node`, the way a pointer would. */\nexport function fire(node, type) {\n node.dispatchEvent(new MouseEvent(type, { bubbles: type !== 'mouseenter' && type !== 'mouseleave' }));\n}\n\n/* ------------------------------------------------------------------\n * Taking a node away, visibly.\n *\n * The durations are jQuery's: 400 ms unless the caller says otherwise. `done` runs once the node is out of sight, which is\n * when the caller removes it; a node that is already out of sight is done at\n * once, on the next task, as jQuery had it.\n * ------------------------------------------------------------------ */\n\nvar DEFAULT_DURATION = 400;\n\nfunction animateAway(node, frames, duration, done) {\n duration = duration === undefined ? DEFAULT_DURATION : duration;\n\n var finish = function() {\n hide(node);\n if (done) { done(); }\n };\n\n if (!visible(node) || !node.animate || duration <= 0) {\n window.setTimeout(finish, 0);\n return;\n }\n\n var animation = node.animate(frames(getComputedStyle(node)), {\n duration: duration,\n easing: 'ease-in-out',\n });\n var called = false;\n var once = function() {\n if (called) { return; }\n called = true;\n finish();\n };\n\n animation.onfinish = once;\n animation.oncancel = once;\n}\n\n/** Fold a node up to nothing, then hide it. */\nexport function slideUp(node, duration, done) {\n if (typeof duration === 'function') {\n done = duration;\n duration = undefined;\n }\n\n node.style.overflow = 'hidden';\n animateAway(node, function(style) {\n return [\n {\n height: style.height,\n paddingTop: style.paddingTop,\n paddingBottom: style.paddingBottom,\n marginTop: style.marginTop,\n marginBottom: style.marginBottom,\n },\n { height: '0px', paddingTop: '0px', paddingBottom: '0px', marginTop: '0px', marginBottom: '0px' },\n ];\n }, duration, function() {\n node.style.removeProperty('overflow');\n if (done) { done(); }\n });\n}\n\n/** Fade a node out, then hide it. */\nexport function fadeOut(node, duration, done) {\n animateAway(node, function(style) {\n return [{ opacity: style.opacity }, { opacity: 0 }];\n }, duration, done);\n}\n\n/** Fade and fold a node, in height and, with `width`, sideways too, then hide it. */\nexport function shrinkAway(node, duration, done, width) {\n node.style.overflow = 'hidden';\n animateAway(node, function(style) {\n var from = { opacity: style.opacity, height: style.height };\n var to = { opacity: 0, height: '0px' };\n\n if (width) {\n from.width = style.width;\n to.width = '0px';\n }\n return [from, to];\n }, duration, function() {\n node.style.removeProperty('overflow');\n if (done) { done(); }\n });\n}\n", "/**\n * Carousels for grid-editor.\n *\n * A container plugin: load this file after the editor and the toolbar offers\n * a carousel, a bootstrap carousel whose slides are editable regions. What it\n * can ask the editor for is the handle its factory is called with, described\n * in docs/plugins.md.\n *\n * <script src=\"dist/grideditor.min.js\"></script>\n * <script src=\"dist/plugins/grideditor.carousel.min.js\"></script>\n *\n * Only one slide shows on the canvas, as on the page. The container's drawer\n * says which, and moves to the next and the previous; Bootstrap's own arrows\n * are kept in the markup but not drawn, its indicators are drawn but do not\n * answer, and neither does its javascript:\n * the attributes it acts on are put aside while editing. A carousel's options\n * - arrows, indicators, fade, dark theme, autoplay and its interval, pause,\n * wrap, keyboard and touch - are Bootstrap's classes and attributes and\n * nothing else: they are read from the markup, chosen in the container's\n * settings panel, or given to createContainer and the carousel setting for\n * the ones made new.\n */\nimport { GridEditor } from '../grideditor.js';\nimport * as dom from '../dom.js';\n\nObject.assign(GridEditor.locales.en, {\n 'container.add_carousel': 'Carousel',\n 'container.add_carousel_item': 'Add slide',\n 'confirm.delete_carousel_item': 'Delete this slide and everything in it?',\n 'panel.kind_carousel_item': 'Slide',\n 'container.carousel_previous': 'Previous',\n 'container.carousel_next': 'Next',\n 'container.carousel_slide_label': 'Slide {number}',\n 'container.carousel_counter': '{current} / {total}',\n 'tool.carousel_show_previous': 'Previous slide',\n 'tool.carousel_show_next': 'Next slide',\n 'tool.carousel_move_back': 'Move back',\n 'tool.carousel_move_forward': 'Move forward',\n 'container.carousel_section': 'Carousel',\n 'container.carousel_controls': 'Arrows',\n 'container.carousel_indicators': 'Indicators',\n 'container.carousel_fade': 'Fade',\n 'container.carousel_dark': 'Dark theme',\n 'container.carousel_ride': 'Autoplay',\n 'container.carousel_ride_no': 'No',\n 'container.carousel_ride_load': 'On load',\n 'container.carousel_ride_interaction': 'After first interaction',\n 'container.carousel_interval': 'Interval (s)',\n 'container.carousel_pause': 'Pause on hover',\n 'container.carousel_wrap': 'Wrap around',\n 'container.carousel_keyboard': 'Keyboard',\n 'container.carousel_touch': 'Touch swipe',\n 'container.carousel_item_section': 'Slide',\n});\n\n/** What a carousel made new has when neither the call nor the setting says. */\nvar DEFAULTS = {\n controls: true,\n indicators: true,\n fade: false,\n dark: false,\n ride: false,\n interval: null,\n pause: true,\n wrap: true,\n keyboard: true,\n touch: true,\n slides: 2,\n};\n\nvar CHECKBOXES = ['controls', 'indicators', 'fade', 'dark'];\nvar BEHAVIOURS = ['pause', 'wrap', 'keyboard', 'touch'];\n\n/** Each option's checkbox in the panel, and its label. */\nvar LABELS = {\n controls: { labelKey: 'container.carousel_controls' },\n indicators: { labelKey: 'container.carousel_indicators' },\n fade: { labelKey: 'container.carousel_fade' },\n dark: { labelKey: 'container.carousel_dark' },\n pause: { labelKey: 'container.carousel_pause' },\n wrap: { labelKey: 'container.carousel_wrap' },\n keyboard: { labelKey: 'container.carousel_keyboard' },\n touch: { labelKey: 'container.carousel_touch' },\n};\nvar RIDE_LABEL = { labelKey: 'container.carousel_ride' };\nvar INTERVAL_LABEL = { labelKey: 'container.carousel_interval' };\nvar RIDES = [false, 'carousel', 'true'];\nvar MIN_INTERVAL = 1000; // ms\n\n/** What Bootstrap puts on a slide while it moves one in: never part of the page. */\nvar TRANSITION = 'carousel-item-next carousel-item-prev carousel-item-start carousel-item-end';\n\nfunction validInterval(value) {\n return typeof value === 'number' && isFinite(value) && Math.floor(value) === value && value >= MIN_INTERVAL;\n}\n\nvar CHECKS = {\n ride: function(value) { return RIDES.indexOf(value) !== -1; },\n interval: function(value) { return value === null || validInterval(value); },\n slides: function(value) { return typeof value === 'number' && Math.floor(value) === value && value >= 1; },\n};\n\n/** The values an option takes, as the warning lists them. */\nfunction takes(key) {\n if (key === 'ride') { return JSON.stringify(RIDES); }\n if (key === 'interval') { return 'null or an integer of ' + MIN_INTERVAL + ' or more'; }\n if (key === 'slides') { return 'an integer of 1 or more'; }\n\n return '[true,false]';\n}\n\nfunction isValid(key, value) {\n return CHECKS[key] ? CHECKS[key](value) : typeof value === 'boolean';\n}\n\nvar fieldCounter = 0;\n\nGridEditor.containers.carousel = function(ge) {\n\n var shown = new WeakMap(); // The slide each carousel shows, whatever its markup says\n var sections = []; // { node, element, render } for every panel section built\n\n function carouselOf(container) {\n return dom.child(container, '.carousel');\n }\n\n function innerOf(container) {\n return dom.child(carouselOf(container), '.carousel-inner');\n }\n\n /** A container with no carousel or no slides' holder is left as it is. */\n function usable(container) {\n return !!innerOf(container);\n }\n\n function itemsOf(container) {\n return dom.children(innerOf(container), '.carousel-item');\n }\n\n /** The carousel's id, which its arrows and indicators point at. */\n function idOf(carousel) {\n if (!carousel.getAttribute('id')) { carousel.setAttribute('id', ge.containerId('carousel')); }\n\n return carousel.getAttribute('id');\n }\n\n /** A Bootstrap attribute, whether it is where Bootstrap reads it or put aside for editing. */\n function bsAttribute(node, name) {\n var value = node.getAttribute('data-bs-' + name);\n\n return value === null ? node.getAttribute('data-ge-bs-' + name) : value;\n }\n\n function intervalOf(node) {\n var value = parseInt(node.getAttribute('data-bs-interval'), 10);\n\n return isFinite(value) && value > 0 ? value : null;\n }\n\n function writeInterval(node, value) {\n if (value === null) {\n node.removeAttribute('data-bs-interval');\n } else {\n node.setAttribute('data-bs-interval', String(value));\n }\n }\n\n /** What a carousel's classes and attributes say it is. */\n function read(container) {\n var carousel = carouselOf(container);\n var ride = bsAttribute(carousel, 'ride');\n var off = function(name) { return carousel.getAttribute('data-bs-' + name) !== 'false'; };\n\n return {\n controls: !!dom.child(carousel, '.carousel-control-prev, .carousel-control-next'),\n indicators: !!dom.child(carousel, '.carousel-indicators'),\n fade: dom.hasClass(carousel, 'carousel-fade'),\n dark: carousel.getAttribute('data-bs-theme') === 'dark',\n ride: ride === 'carousel' || ride === 'true' ? ride : false,\n interval: intervalOf(carousel),\n pause: off('pause'),\n wrap: off('wrap'),\n keyboard: off('keyboard'),\n touch: off('touch'),\n };\n }\n\n function controlButton(carousel, direction) {\n var button = dom.element('button', {\n 'class': 'carousel-control-' + direction,\n type: 'button',\n 'data-bs-target': '#' + idOf(carousel),\n 'data-bs-slide': direction,\n });\n\n button.appendChild(dom.element('span', { 'class': 'carousel-control-' + direction + '-icon', 'aria-hidden': 'true' }));\n button.appendChild(dom.element('span', { 'class': 'visually-hidden' },\n direction === 'prev' ? ge.t('container.carousel_previous') : ge.t('container.carousel_next')));\n\n return button;\n }\n\n function setControls(container, on) {\n var carousel = carouselOf(container);\n\n dom.children(carousel, '.carousel-control-prev, .carousel-control-next').forEach(function(button) { button.remove(); });\n\n if (on) {\n carousel.appendChild(controlButton(carousel, 'prev'));\n carousel.appendChild(controlButton(carousel, 'next'));\n }\n }\n\n function setIndicators(container, on) {\n var carousel = carouselOf(container);\n var bar = dom.child(carousel, '.carousel-indicators');\n\n if (!on) {\n if (bar) { bar.remove(); }\n return;\n }\n\n if (!bar) {\n bar = carousel.insertBefore(dom.element('div', { 'class': 'carousel-indicators' }), carousel.firstChild);\n }\n\n rebuildIndicators(container);\n }\n\n /** One indicator a slide, in the slides' order, the shown one marked. */\n function rebuildIndicators(container, list) {\n var carousel = carouselOf(container);\n var bar = dom.child(carousel, '.carousel-indicators');\n if (!bar) { return; }\n\n list = list || itemsOf(container);\n var id = idOf(carousel);\n var active = 0;\n\n list.forEach(function(item, index) {\n if (dom.hasClass(item, 'active')) { active = index; }\n });\n\n bar.textContent = '';\n list.forEach(function(item, index) {\n bar.appendChild(dom.element('button', {\n type: 'button',\n 'data-bs-target': '#' + id,\n 'data-bs-slide-to': String(index),\n 'aria-label': ge.t('container.carousel_slide_label', { number: index + 1 }),\n }));\n });\n\n syncIndicators(container, list.length ? active : -1);\n }\n\n function syncIndicators(container, index) {\n var bar = dom.child(carouselOf(container), '.carousel-indicators');\n\n dom.children(bar).forEach(function(indicator, position) {\n dom.toggleClass(indicator, 'active', position === index);\n\n if (position === index) {\n indicator.setAttribute('aria-current', 'true');\n } else {\n indicator.removeAttribute('aria-current');\n }\n });\n }\n\n function write(container, key, value) {\n var carousel = carouselOf(container);\n\n if (key === 'controls') { setControls(container, value); }\n if (key === 'indicators') { setIndicators(container, value); }\n if (key === 'fade') { dom.toggleClass(carousel, 'carousel-fade', value); }\n\n if (key === 'dark') {\n if (value) {\n carousel.setAttribute('data-bs-theme', 'dark');\n } else if (carousel.getAttribute('data-bs-theme') === 'dark') {\n carousel.removeAttribute('data-bs-theme');\n }\n }\n\n if (key === 'ride') {\n carousel.removeAttribute('data-bs-ride');\n carousel.removeAttribute('data-ge-bs-ride');\n if (value) { carousel.setAttribute('data-bs-ride', value); }\n }\n\n if (key === 'interval') { writeInterval(carousel, value); }\n\n if (BEHAVIOURS.indexOf(key) !== -1) {\n if (value) {\n carousel.removeAttribute('data-bs-' + key);\n } else {\n carousel.setAttribute('data-bs-' + key, 'false');\n }\n }\n\n dom.dropEmptyClass(carousel);\n }\n\n /**\n * A value for a new carousel: the option, or the carousel setting, or the\n * default. One the option does not take is warned about and the default used.\n */\n function chosen(options, key) {\n var setting = ge.settings.carousel || {};\n var value = options[key] !== undefined ? options[key] : setting[key];\n\n if (value === undefined) { return DEFAULTS[key]; }\n if (isValid(key, value)) { return value; }\n\n ge.warn('carousel: ' + JSON.stringify(value) + ' is not a ' + key + ', which takes ' +\n takes(key) + ': ' + JSON.stringify(DEFAULTS[key]) + ' is used');\n return DEFAULTS[key];\n }\n\n /** What stops Bootstrap's javascript acting on the carousel while it is edited. */\n function suspend(container) {\n var carousel = carouselOf(container);\n\n dom.children(carousel, '.carousel-control-prev, .carousel-control-next').forEach(ge.suspendToggles);\n dom.children(dom.child(carousel, '.carousel-indicators')).forEach(ge.suspendToggles);\n\n // By hand: suspendToggles(carousel) would take a tabs or an accordion\n // inside a slide off its toggles as well\n var ride = carousel.getAttribute('data-bs-ride');\n if (ride !== null) {\n carousel.setAttribute('data-ge-bs-ride', ride);\n carousel.removeAttribute('data-bs-ride');\n }\n }\n\n /** A carousel Bootstrap started before the editor did stops, and is forgotten. */\n function stopBootstrap(carousel) {\n var library = GridEditor.bootstrap || window.bootstrap;\n var instance = library && library.Carousel ? library.Carousel.getInstance(carousel) : null;\n\n if (instance) {\n instance.pause();\n instance.dispose();\n }\n }\n\n function buildItem(container, active, interval) {\n var item = innerOf(container).appendChild(dom.element('div', { 'class': active ? 'carousel-item active' : 'carousel-item' }));\n\n item.appendChild(ge.defaultRegion());\n if (interval !== null && interval !== undefined) { writeInterval(item, interval); }\n\n return item;\n }\n\n /** The slide the carousel shows: the one it was left on, or the markup's, or the first. */\n function currentOf(container) {\n var list = itemsOf(container);\n var kept = shown.get(container);\n\n if (kept && list.indexOf(kept) !== -1) { return kept; }\n\n return list.filter(function(item) { return dom.hasClass(item, 'active'); })[0] || list[0] || null;\n }\n\n /** Show one slide and only that one. */\n function show(container, item, list) {\n list = list || itemsOf(container);\n\n list.forEach(function(each) { dom.toggleClass(each, 'active', each === item); });\n\n if (item) {\n shown.set(container, item);\n } else {\n shown.delete(container);\n }\n\n syncIndicators(container, list.indexOf(item));\n refreshNavigation(container);\n }\n\n function step(container, offset) {\n var list = itemsOf(container);\n if (list.length < 2) { return; }\n\n var index = list.indexOf(currentOf(container));\n show(container, list[(index + offset + list.length) % list.length]);\n }\n\n function disable(tool, state) {\n if (!tool) { return; }\n\n dom.toggleClass(tool, 'disabled', state);\n\n if (state) {\n tool.setAttribute('aria-disabled', 'true');\n } else {\n tool.removeAttribute('aria-disabled');\n }\n }\n\n function disabled(tool) {\n return tool.getAttribute('aria-disabled') === 'true';\n }\n\n /** The container's counter and arrows, and every slide's move tools, as the slides stand. */\n function refreshNavigation(container) {\n var list = itemsOf(container);\n var drawer = dom.child(container, '.ge-container-drawer');\n var index = list.indexOf(currentOf(container));\n\n if (drawer) {\n var counter = dom.child(drawer, '.ge-carousel-counter');\n\n if (counter) {\n counter.textContent = ge.t('container.carousel_counter', {\n current: list.length ? index + 1 : 0,\n total: list.length,\n });\n }\n\n disable(dom.child(drawer, '.ge-carousel-previous'), list.length < 2);\n disable(dom.child(drawer, '.ge-carousel-next'), list.length < 2);\n }\n\n list.forEach(function(item, position) {\n var tools = dom.child(item, '.ge-pane-drawer');\n\n disable(dom.child(tools, '.ge-carousel-move-back'), position === 0);\n disable(dom.child(tools, '.ge-carousel-move-forward'), position === list.length - 1);\n });\n }\n\n function moveItem(container, item, offset) {\n var inner = innerOf(container);\n var list = itemsOf(container);\n var index = list.indexOf(item);\n var target = index + offset;\n\n if (target < 0 || target >= list.length) { return; }\n\n var from = { parent: inner, index: index };\n\n ge.operate(function() {\n if (!ge.emit('before-move', ge.payloadFor('carousel-item', item, {\n parent: inner,\n source: 'tool',\n from: from,\n }))) { return; }\n\n inner.insertBefore(item, offset < 0 ? list[target] : list[target].nextSibling);\n show(container, currentOf(container));\n rebuildIndicators(container);\n suspend(container);\n\n ge.emit('after-move', ge.payloadFor('carousel-item', item, {\n parent: inner,\n source: 'tool',\n from: from,\n to: { parent: inner, index: target },\n container: container,\n }));\n });\n }\n\n /** What the slide to show is once `item` goes: the next one, or the previous if it was the last. */\n function afterRemoving(container, item, removed) {\n dom.fadeOut(item, 200, function() {\n var list = itemsOf(container);\n var rest = list.filter(function(each) { return each !== item; });\n\n if (currentOf(container) === item) {\n show(container, rest[Math.min(list.indexOf(item), rest.length - 1)] || null, rest);\n }\n\n rebuildIndicators(container, rest);\n removed();\n });\n }\n\n function createItemControls(container, item) {\n var drawer = ge.createPaneControls(item, 'carousel-item', ge.settings.carousel_tools,\n ge.t('confirm.delete_carousel_item'), function(removed) {\n afterRemoving(container, item, removed);\n });\n\n // A slide moves a place at a time, not by dragging\n var handle = dom.child(drawer, '.ge-move');\n if (handle) { handle.remove(); }\n\n var back = ge.createTool(drawer, ge.t('tool.carousel_move_back'), 'ge-carousel-move-back', 'bi bi-arrow-left', function() {\n if (!disabled(this)) { moveItem(container, item, -1); }\n });\n var forward = ge.createTool(drawer, ge.t('tool.carousel_move_forward'), 'ge-carousel-move-forward', 'bi bi-arrow-right', function() {\n if (!disabled(this)) { moveItem(container, item, 1); }\n });\n\n drawer.insertBefore(forward, drawer.firstChild);\n drawer.insertBefore(back, forward);\n }\n\n function addSlideTo(container, options) {\n options = options || {};\n\n if (!usable(container)) {\n ge.warn('carousel: there is no .carousel-inner to add a slide to');\n return null;\n }\n\n var interval = null;\n\n if (options.interval !== undefined && options.interval !== null) {\n if (validInterval(options.interval)) {\n interval = options.interval;\n } else {\n ge.warn('carousel: ' + JSON.stringify(options.interval) + ' is not a interval, which takes ' +\n takes('interval') + ': null is used');\n }\n }\n\n var item = buildItem(container, false, interval);\n\n show(container, item);\n rebuildIndicators(container);\n\n return item;\n }\n\n function field(labelKey, control, id) {\n var box = dom.element('div', { 'class': 'ge-carousel-option mb-2' });\n\n box.appendChild(dom.element('label', { 'class': 'form-label', 'for': id }, ge.t(labelKey)));\n box.appendChild(control);\n\n return box;\n }\n\n function nextId() {\n return 'ge-carousel-option-' + (++fieldCounter);\n }\n\n /**\n * The interval in seconds, for a node: empty takes it off, under a\n * second is refused and the field says so, and anything else is written\n * in milliseconds.\n */\n function intervalField(node, onWrite) {\n var id = nextId();\n var input = dom.element('input', {\n 'class': 'form-control form-control-sm',\n id: id,\n type: 'number',\n step: '0.1',\n min: String(MIN_INTERVAL / 1000),\n });\n\n input.addEventListener('change', function() {\n var text = input.value.trim();\n var seconds = parseFloat(text);\n\n if (text === '') {\n dom.removeClass(input, 'is-invalid');\n writeInterval(node, null);\n } else if (!isFinite(seconds) || Math.round(seconds * 1000) < MIN_INTERVAL) {\n dom.addClass(input, 'is-invalid');\n return;\n } else {\n dom.removeClass(input, 'is-invalid');\n writeInterval(node, Math.round(seconds * 1000));\n }\n\n if (onWrite) { onWrite(); }\n });\n\n return {\n id: id,\n input: input,\n render: function() {\n var interval = intervalOf(node);\n\n dom.removeClass(input, 'is-invalid');\n input.value = interval === null ? '' : String(interval / 1000);\n },\n };\n }\n\n function checkbox(labelKey, onChange) {\n var id = nextId();\n var box = dom.element('div', { 'class': 'form-check' });\n var input = box.appendChild(dom.element('input', { 'class': 'form-check-input', type: 'checkbox', id: id }));\n\n box.appendChild(dom.element('label', { 'class': 'form-check-label', 'for': id }, ge.t(labelKey)));\n input.addEventListener('change', function() { onChange(input.checked); });\n\n return { box: box, input: input };\n }\n\n /** The Carousel section of a carousel's settings panel. */\n function createSection(container) {\n var body = dom.element('div', { 'class': 'ge-carousel-options' });\n var inputs = {};\n\n function change(key, value) {\n write(container, key, value);\n suspend(container);\n render();\n }\n\n var rideId = nextId();\n var ride = dom.element('select', { 'class': 'form-select form-select-sm', id: rideId });\n\n [\n { value: 'false', labelKey: 'container.carousel_ride_no' },\n { value: 'carousel', labelKey: 'container.carousel_ride_load' },\n { value: 'true', labelKey: 'container.carousel_ride_interaction' },\n ].forEach(function(choice) {\n ride.appendChild(dom.element('option', { value: choice.value }, ge.t(choice.labelKey)));\n });\n ride.addEventListener('change', function() { change('ride', ride.value === 'false' ? false : ride.value); });\n body.appendChild(field(RIDE_LABEL.labelKey, ride, rideId));\n\n var interval = intervalField(carouselOf(container), function() { render(); });\n body.appendChild(field(INTERVAL_LABEL.labelKey, interval.input, interval.id));\n\n CHECKBOXES.concat(BEHAVIOURS).forEach(function(key) {\n var each = checkbox(LABELS[key].labelKey, function(on) { change(key, on); });\n\n inputs[key] = each.input;\n each.box.setAttribute('data-ge-carousel-option', key);\n body.appendChild(each.box);\n });\n\n /** Fill the fields from the markup, and turn off what autoplay being off leaves without use. */\n function render() {\n var values = read(container);\n\n ride.value = String(values.ride);\n interval.render();\n Object.keys(inputs).forEach(function(key) { inputs[key].checked = values[key]; });\n\n interval.input.disabled = values.ride === false;\n inputs.pause.disabled = values.ride === false;\n }\n\n render();\n sections.push({ node: container, element: body, render: render });\n\n return body;\n }\n\n /** The Slide section of a slide's settings panel. */\n function createItemSection(item) {\n var body = dom.element('div', { 'class': 'ge-carousel-options' });\n var interval = intervalField(item);\n\n body.appendChild(field(INTERVAL_LABEL.labelKey, interval.input, interval.id));\n interval.render();\n sections.push({ node: item, element: body, render: interval.render });\n\n return body;\n }\n\n return {\n labelKey: 'container.add_carousel',\n addPaneKey: 'container.add_carousel_item',\n paneKind: 'carousel-item',\n paneClass: 'ge-carousel-item',\n paneLabelKey: 'panel.kind_carousel_item',\n\n /**\n * `slides` slides, each a region, and the options of DEFAULTS as the\n * call, the carousel setting or the defaults give them.\n */\n create: function(options) {\n options = options || {};\n\n var container = dom.element('div', { 'data-ge-container': 'carousel' });\n var carousel = container.appendChild(dom.element('div', { 'class': 'carousel slide', id: ge.containerId('carousel') }));\n var slides = chosen(options, 'slides');\n\n carousel.appendChild(dom.element('div', { 'class': 'carousel-inner' }));\n\n for (var i = 0; i < slides; i++) {\n buildItem(container, i === 0);\n }\n\n Object.keys(DEFAULTS).filter(function(key) { return key !== 'slides'; }).forEach(function(key) {\n write(container, key, chosen(options, key));\n });\n\n return container;\n },\n\n addPane: addSlideTo,\n\n mark: function(container) {\n var carousel = carouselOf(container);\n if (!carousel || !usable(container)) { return; }\n\n stopBootstrap(carousel);\n suspend(container);\n\n var current = currentOf(container);\n\n itemsOf(container).forEach(function(item) {\n dom.addClass(item, 'ge-carousel-item');\n dom.removeClass(item, TRANSITION);\n\n if (!dom.child(item, '.ge-tools-drawer')) { createItemControls(container, item); }\n });\n\n show(container, current);\n },\n\n unmark: function(container) {\n ge.resumeToggles(container);\n if (!usable(container)) { return; }\n\n // What the page ships starts at the first slide, whichever one\n // the canvas was showing\n itemsOf(container).forEach(function(item, index) {\n dom.removeClass(item, 'ge-carousel-item ' + TRANSITION);\n dom.toggleClass(item, 'active', index === 0);\n dom.dropEmptyClass(item);\n });\n\n syncIndicators(container, itemsOf(container).length ? 0 : -1);\n },\n\n // The same, on a copy of the canvas: unmark only touches markup\n cleanMarkup: function(root) {\n var definition = this;\n dom.all(root, '[data-ge-container=\"carousel\"]').forEach(function(container) { definition.unmark(container); });\n },\n\n // The arrows, the counter and the arrow's other side: what moves the\n // carousel from slide to slide while it is edited\n tools: function(drawer, container) {\n if (!usable(container)) { return; }\n\n ge.createTool(drawer, ge.t('tool.carousel_show_previous'), 'ge-carousel-previous', 'bi bi-chevron-left', function() {\n if (!disabled(this)) { step(container, -1); }\n });\n\n var counter = ge.createTool(drawer, '', 'ge-carousel-counter', '', null);\n counter.textContent = '';\n counter.removeAttribute('title');\n\n ge.createTool(drawer, ge.t('tool.carousel_show_next'), 'ge-carousel-next', 'bi bi-chevron-right', function() {\n if (!disabled(this)) { step(container, 1); }\n });\n\n refreshNavigation(container);\n },\n\n panelSection: function(node, kind) {\n if (kind === 'carousel' && usable(node)) {\n return { labelKey: 'container.carousel_section', body: createSection(node) };\n }\n\n if (kind === 'carousel-item') {\n return { labelKey: 'container.carousel_item_section', body: createItemSection(node) };\n }\n\n return null;\n },\n\n // After a view change or a change of classes: the sections follow\n onRefresh: function(scope) {\n sections = sections.filter(function(entry) { return entry.element.isConnected; });\n sections.forEach(function(entry) {\n if (entry.node === scope || scope.contains(entry.node)) { entry.render(); }\n });\n },\n\n onDeinit: function() {\n sections = [];\n },\n };\n};\n"],
5
+ "mappings": "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",
6
6
  "names": ["GridEditor", "all", "root", "selector", "children", "node", "selector", "each", "child", "element", "tag", "attributes", "text", "node", "name", "value", "addClass", "node", "names", "split", "name", "removeClass", "toggleClass", "state", "hasClass", "dropEmptyClass", "hide", "node", "visible", "node", "DEFAULT_DURATION", "animateAway", "node", "frames", "duration", "done", "finish", "hide", "visible", "animation", "called", "once", "fadeOut", "node", "duration", "done", "animateAway", "style", "GridEditor", "DEFAULTS", "CHECKBOXES", "BEHAVIOURS", "LABELS", "RIDE_LABEL", "INTERVAL_LABEL", "RIDES", "MIN_INTERVAL", "TRANSITION", "validInterval", "value", "CHECKS", "takes", "key", "isValid", "fieldCounter", "ge", "shown", "sections", "carouselOf", "container", "child", "innerOf", "usable", "itemsOf", "children", "idOf", "carousel", "bsAttribute", "node", "name", "intervalOf", "writeInterval", "read", "ride", "off", "hasClass", "controlButton", "direction", "button", "element", "setControls", "on", "setIndicators", "bar", "rebuildIndicators", "list", "id", "active", "item", "index", "syncIndicators", "indicator", "position", "toggleClass", "write", "dropEmptyClass", "chosen", "options", "setting", "suspend", "stopBootstrap", "library", "instance", "buildItem", "interval", "currentOf", "kept", "show", "each", "refreshNavigation", "step", "offset", "disable", "tool", "state", "disabled", "drawer", "counter", "tools", "moveItem", "inner", "target", "from", "afterRemoving", "removed", "fadeOut", "rest", "createItemControls", "handle", "back", "forward", "addSlideTo", "field", "labelKey", "control", "box", "nextId", "intervalField", "onWrite", "input", "text", "seconds", "removeClass", "addClass", "checkbox", "onChange", "createSection", "body", "inputs", "change", "render", "rideId", "choice", "values", "createItemSection", "slides", "i", "current", "root", "definition", "all", "kind", "scope", "entry"]
7
7
  }
package/docs/events.md CHANGED
@@ -92,6 +92,7 @@ about every insertion can bind `grideditor:before-add` and switch on
92
92
  | `grideditor:after-utility` | — | no | after the class is written and the preview redrawn, only if something changed |
93
93
  | `grideditor:view-change` | — | no | after the view changes, only if it actually changed |
94
94
  | `grideditor:target-change` | — | no | with `active_target`, after the column or section the toolbar adds to changes, only if it actually changed |
95
+ | `grideditor:selection-change` | — | no | with `settings_panel: 'sidebar'`, after the node whose settings the sidebar shows changes, only if it actually changed |
95
96
  | `grideditor:after-copy` | — | no | with the clipboard plugin, after a node is copied |
96
97
  | `grideditor:after-autosave` | — | no | with the autosave plugin, after a draft is written |
97
98
  | `grideditor:after-restore-draft` | — | no | with the autosave plugin, after the user chose to restore a draft and the canvas is it |
@@ -178,6 +179,11 @@ column or section the toolbar adds to now, or `null` for the end of the canvas
178
179
  events as any click does, with `source: 'tool'` (or `'paste'`) and the target,
179
180
  or the canvas for a section, as the `parent`.
180
181
 
182
+ `selection-change` carries no node of its own either: its payload is `canvas`,
183
+ `node` - the node whose settings the sidebar shows now, or `null` for none -
184
+ and `from`, the one before. A node deleted while selected, or replaced by
185
+ `setHtml`, is a change to `null`. A handler's answer is ignored.
186
+
181
187
  `source` matters to a host that both drives the editor from its own palette and
182
188
  listens for what the user does: `api` is your own call coming back to you,
183
189
  `tool` is a click in the editor, `dragdrop` is a gesture, and `paste` is a node
@@ -83,6 +83,10 @@ title. `{kind}` is one of the `panel.kind_*` keys, or a container's own label.
83
83
  | `panel.title` | {kind} settings | Title of the offcanvas, popover or modal |
84
84
  | `panel.close` | Close | Label of its close button |
85
85
  | `panel.done` | Done | The modal's button that closes it |
86
+ | `panel.sidebar_title` | Settings | The sidebar's title while nothing is selected, and when the host's `sidebar.empty` gives none |
87
+ | `panel.sidebar_empty` | Click an element to see its settings | The sidebar's message while nothing is selected |
88
+ | `panel.collapse` | Hide settings | Label of the sidebar's button while it is open |
89
+ | `panel.expand` | Show settings | Label of the same button while the sidebar is folded away |
86
90
  | `panel.id` | Id | Label of the id field |
87
91
  | `panel.classes` | Classes | Label of the classes field |
88
92
  | `panel.section_general` | Id and classes | Heading of the panel's section with the id, the classes and the preset toggles |