.dialog-widget-content {
background-color: #fff;
position: absolute;
border-radius: 3px;
box-shadow: 2px 8px 23px 3px rgba(0, 0, 0, 0.2);
overflow: hidden; }
.dialog-message {
font-size: 12px;
line-height: 1.5;
box-sizing: border-box; }
.dialog-type-lightbox {
position: fixed;
height: 100%;
width: 100%;
bottom: 0;
left: 0;
background-color: rgba(0, 0, 0, 0.8);
z-index: 9999;
user-select: none; }
.dialog-type-lightbox .dialog-widget-content {
margin: auto;
width: 375px; }
.dialog-type-lightbox .dialog-header {
font-size: 15px;
color: #495157;
padding: 30px 0 10px;
font-weight: 500; }
.dialog-type-lightbox .dialog-message {
padding: 0 30px 30px;
min-height: 50px; }
.dialog-type-lightbox:not(.elementor-popup-modal) .dialog-header,
.dialog-type-lightbox:not(.elementor-popup-modal) .dialog-message {
text-align: center; }
.dialog-type-lightbox .dialog-buttons-wrapper {
border-top: 1px solid #e6e9ec;
text-align: center; }
.dialog-type-lightbox .dialog-buttons-wrapper > .dialog-button {
font-family: Roboto, Arial, Helvetica, Verdana, sans-serif;
width: 50%;
border: none;
background: none;
color: #6d7882;
font-size: 15px;
cursor: pointer;
padding: 13px 0;
outline: 0; }
.dialog-type-lightbox .dialog-buttons-wrapper > .dialog-button:hover {
background-color: #f4f6f7; }
.dialog-type-lightbox .dialog-buttons-wrapper > .dialog-button.dialog-ok {
color: #b01b1b; }
.dialog-type-lightbox .dialog-buttons-wrapper > .dialog-button.dialog-take_over {
color: #39b54a; }
.dialog-type-lightbox .dialog-buttons-wrapper > .dialog-button:active {
background-color: rgba(230, 233, 236, 0.5); }
.dialog-type-lightbox .dialog-buttons-wrapper > .dialog-button::-moz-focus-inner {
border: 0; }
.dialog-close-button {
cursor: pointer;
position: absolute;
margin-top: 15px;
left: 15px;
font-size: 15px;
line-height: 1; }
.dialog-close-button:not(:hover) {
opacity: .4; }
.dialog-alert-widget .dialog-buttons-wrapper > button {
width: 100%; }
.dialog-confirm-widget .dialog-button:first-child {
border-left: 1px solid #e6e9ec; }
.dialog-prevent-scroll {
overflow: hidden;
max-height: 100vh; }
@media (min-width: 1024px) {
body.admin-bar .dialog-lightbox-widget {
height: calc(100vh - 32px); } }
@media (max-width: 1024px) {
body.admin-bar .dialog-type-lightbox {
position: sticky;
height: 100vh; } }
.elementor-aspect-ratio-219 .elementor-fit-aspect-ratio {
padding-bottom: 42.8571%; }
.elementor-aspect-ratio-169 .elementor-fit-aspect-ratio {
padding-bottom: 56.25%; }
.elementor-aspect-ratio-43 .elementor-fit-aspect-ratio {
padding-bottom: 75%; }
.elementor-aspect-ratio-32 .elementor-fit-aspect-ratio {
padding-bottom: 66.6666%; }
.elementor-aspect-ratio-11 .elementor-fit-aspect-ratio {
padding-bottom: 100%; }
.elementor-aspect-ratio-916 .elementor-fit-aspect-ratio {
padding-bottom: 177.8%; }
.elementor-fit-aspect-ratio {
position: relative;
height: 0; }
.elementor-fit-aspect-ratio iframe {
position: absolute;
top: 0;
left: 0;
height: 100%;
width: 100%;
border: 0;
background-color: #000; }
.elementor-fit-aspect-ratio video {
width: 100%; }
.flatpickr-calendar {
width: 280px; }
.flatpickr-calendar .flatpickr-current-month span.cur-month {
font-weight: 300; }
.flatpickr-calendar .dayContainer {
width: 280px;
min-width: 280px;
max-width: 280px; }
.flatpickr-calendar .flatpickr-days {
width: 280px; }
.flatpickr-calendar .flatpickr-day {
max-width: 37px;
height: 37px;
line-height: 37px; }
.elementor-templates-modal .dialog-widget-content {
font-family: Roboto, Arial, Helvetica, Verdana, sans-serif;
background-color: #f1f3f5;
width: 100%; }
@media (max-width: 1439px) {
.elementor-templates-modal .dialog-widget-content {
max-width: 990px; } }
@media (min-width: 1440px) {
.elementor-templates-modal .dialog-widget-content {
max-width: 1200px; } }
.elementor-templates-modal .dialog-header {
padding: 0;
background-color: #fff;
box-shadow: 0 0 8px rgba(0, 0, 0, 0.1);
position: relative;
z-index: 1; }
.elementor-templates-modal .dialog-buttons-wrapper {
background-color: #fff;
border: none;
display: none;
justify-content: flex-end;
padding: 5px;
box-shadow: 0 0 8px rgba(0, 0, 0, 0.1);
position: relative; }
.elementor-templates-modal .dialog-buttons-wrapper .elementor-button {
height: 40px;
margin-right: 5px; }
.elementor-templates-modal .dialog-buttons-wrapper .elementor-button-success {
padding: 12px 36px;
color: #fff;
width: initial;
font-size: 15px; }
.elementor-templates-modal .dialog-buttons-wrapper .elementor-button-success:hover {
background-color: #39b54a; }
.elementor-templates-modal .dialog-message {
height: 750px;
max-height: 85vh;
overflow: auto;
padding-top: 25px; }
.elementor-templates-modal .dialog-content {
height: 100%; }
.elementor-templates-modal .dialog-loading {
display: none; }
.elementor-templates-modal__header {
display: flex;
align-items: center;
justify-content: space-between;
height: 50px; }
.elementor-templates-modal__header__logo {
line-height: 1;
text-transform: uppercase;
font-weight: bold;
cursor: pointer; }
.elementor-templates-modal__header__logo-area {
text-align: right;
padding-right: 15px; }
.elementor-templates-modal__header__logo-area > * {
display: flex;
align-items: center; }
.elementor-templates-modal__header__logo__icon-wrapper {
margin-left: 10px;
font-size: 12px; }
.elementor-templates-modal__header__logo__title {
padding-top: 2px; }
.elementor-templates-modal__header__items-area {
display: flex;
flex-direction: row-reverse; }
.elementor-templates-modal__header__item {
position: relative;
display: flex;
align-items: center;
justify-content: center;
box-sizing: content-box; }
.elementor-templates-modal__header__item > i {
font-size: 20px;
transition: all 0.3s;
cursor: pointer; }
.elementor-templates-modal__header__item > i:not(:hover) {
color: #a4afb7; }
.elementor-templates-modal__header__close--normal {
width: 47px;
border-right: 1px solid #e6e9ec; }
.elementor-templates-modal__header__close--normal i {
font-size: 18px; }
.elementor-templates-modal__header__close--skip {
padding: 10px;
padding-right: 20px;
margin-left: 10px;
color: #fff;
background-color: #a4afb7;
font-size: 11px;
font-weight: normal;
line-height: 1;
text-transform: uppercase;
border-radius: 2px;
cursor: pointer; }
.elementor-templates-modal__header__close--skip > i {
font-size: inherit;
padding-right: 10px;
margin-right: 15px;
border-right: 1px solid; }
.elementor-templates-modal__header__close--skip > i:not(:hover) {
color: #fff; }
.elementor-templates-modal__sidebar {
flex-shrink: 0;
width: 25%;
background-color: rgba(255, 255, 255, 0.3); }
.elementor-templates-modal__content {
flex-grow: 1;
box-shadow: 0 0 13px inset rgba(0, 0, 0, 0.05); }
/* Will select next element after last '.elementor-general-section' */
#wpadminbar #wp-admin-bar-elementor_edit_page .elementor-general-section + .elementor-second-section {
border-top: 1px solid #464b50;
margin-top: 6px; }
.elementor-hidden {
display: none; }
.elementor-screen-only,
.screen-reader-text,
.screen-reader-text span,
.ui-helper-hidden-accessible {
position: absolute;
top: -10000em;
width: 1px;
height: 1px;
margin: -1px;
padding: 0;
overflow: hidden;
clip: rect(0, 0, 0, 0);
border: 0; }
.elementor-clearfix:after {
content: '';
display: block;
clear: both;
width: 0;
height: 0; }
.e-logo-wrapper {
background: #93003c;
display: inline-block;
padding: 0.75em;
border-radius: 50%;
line-height: 1; }
.e-logo-wrapper i {
color: #fff;
font-size: 1em; }
#e-enable-unfiltered-files-dialog-import-template .dialog-confirm-ok {
color: #39b54a; }
#e-enable-unfiltered-files-dialog-import-template .dialog-confirm-cancel {
color: #b01b1b; }
.elementor {
hyphens: manual; }
.elementor *, .elementor *:before, .elementor *:after {
box-sizing: border-box; }
.elementor a {
box-shadow: none;
text-decoration: none; }
.elementor hr {
margin: 0;
background-color: transparent; }
.elementor img {
height: auto;
max-width: 100%;
border: none;
border-radius: 0;
box-shadow: none; }
.elementor .elementor-widget:not(.elementor-widget-text-editor):not(.elementor-widget-theme-post-content) figure {
margin: 0; }
.elementor embed,
.elementor iframe,
.elementor object,
.elementor video {
max-width: 100%;
width: 100%;
margin: 0;
line-height: 1;
border: none; }
.elementor .elementor-custom-embed {
line-height: 0; }
.elementor .elementor-background-video-container,
.elementor .elementor-background-holder,
.elementor .elementor-background {
height: 100%;
width: 100%;
top: 0;
left: 0;
position: absolute;
overflow: hidden;
z-index: 0;
direction: ltr; }
.elementor .elementor-background-video-container {
transition: opacity 1s;
pointer-events: none; }
.elementor .elementor-background-video-container.elementor-loading {
opacity: 0; }
.elementor .elementor-background-video-embed {
max-width: none; }
.elementor .elementor-background-video-embed, .elementor .elementor-background-video-hosted {
position: absolute;
top: 50%;
left: 50%;
transform: translate(-50%, -50%); }
.elementor .elementor-background-video {
max-width: none;
position: absolute;
top: 50%;
left: 50%;
transform: translate(-50%, -50%); }
.elementor .elementor-html5-video {
object-fit: cover; }
.elementor .elementor-background-overlay {
height: 100%;
width: 100%;
top: 0;
left: 0;
position: absolute; }
.elementor .elementor-background-slideshow {
position: absolute;
width: 100%;
height: 100%;
z-index: 0;
top: 0;
right: 0; }
.elementor .elementor-background-slideshow__slide__image {
width: 100%;
height: 100%;
background-position: center center;
background-size: cover; }
.elementor-widget-wrap > .elementor-element.elementor-absolute, .e-container > .elementor-element.elementor-absolute {
position: absolute; }
.elementor-widget-wrap > .elementor-element.elementor-fixed, .e-container > .elementor-element.elementor-fixed {
position: fixed; }
.elementor-widget-wrap .elementor-element.elementor-widget__width-auto, .elementor-widget-wrap .elementor-element.elementor-widget__width-initial {
max-width: 100%; }
@media (max-width: ELEMENTOR_SCREEN_TABLET_MAX) {
.elementor-widget-wrap .elementor-element.elementor-widget-tablet__width-auto, .elementor-widget-wrap .elementor-element.elementor-widget-tablet__width-initial {
max-width: 100%; } }
@media (max-width: ELEMENTOR_SCREEN_MOBILE_MAX) {
.elementor-widget-wrap .elementor-element.elementor-widget-mobile__width-auto, .elementor-widget-wrap .elementor-element.elementor-widget-mobile__width-initial {
max-width: 100%; } }
.elementor-element {
--flex-direction: initial;
--flex-wrap: initial;
--justify-content: initial;
--align-items: initial;
--align-content: initial;
--gap: initial;
--flex-basis: initial;
--flex-grow: initial;
--flex-shrink: initial;
--order: initial;
--align-self: initial;
flex-direction: var(--flex-direction);
flex-wrap: var(--flex-wrap);
justify-content: var(--justify-content);
align-items: var(--align-items);
align-content: var(--align-content);
gap: var(--gap);
flex-basis: var(--flex-basis);
flex-grow: var(--flex-grow);
flex-shrink: var(--flex-shrink);
order: var(--order);
align-self: var(--align-self); }
.elementor-element.elementor-absolute, .elementor-element.elementor-fixed {
z-index: 1; }
.elementor-invisible {
visibility: hidden; }
.elementor-align-center {
text-align: center; }
.elementor-align-center .elementor-button {
width: auto; }
.elementor-align-right {
text-align: right; }
.elementor-align-right .elementor-button {
width: auto; }
.elementor-align-left {
text-align: left; }
.elementor-align-left .elementor-button {
width: auto; }
.elementor-align-justify .elementor-button {
width: 100%; }
.elementor-custom-embed-play {
position: absolute;
top: 50%;
left: 50%;
transform: translate(-50%, -50%); }
.elementor-custom-embed-play i {
font-size: 100px;
color: #fff;
text-shadow: 1px 0 6px rgba(0, 0, 0, 0.3); }
.elementor-custom-embed-play svg {
height: 100px;
width: 100px;
fill: #fff;
filter: drop-shadow(1px 0 6px rgba(0, 0, 0, 0.3)); }
.elementor-custom-embed-play i,
.elementor-custom-embed-play svg {
opacity: 0.8;
transition: all .5s; }
.elementor-custom-embed-play.elementor-playing i {
font-family: eicons; }
.elementor-custom-embed-play.elementor-playing i:before {
content: '\e8fb'; }
.elementor-custom-embed-play.elementor-playing i,
.elementor-custom-embed-play.elementor-playing svg {
animation: eicon-spin 2s infinite linear; }
.elementor-tag {
display: inline-flex; }
.elementor-ken-burns {
transition-property: transform;
transition-duration: 10s;
transition-timing-function: linear; }
.elementor-ken-burns--out {
transform: scale(1.3); }
.elementor-ken-burns--active {
transition-duration: 20s; }
.elementor-ken-burns--active.elementor-ken-burns--out {
transform: scale(1); }
.elementor-ken-burns--active.elementor-ken-burns--in {
transform: scale(1.3); }
@media (min-width: ELEMENTOR_SCREEN_WIDESCREEN_MIN) {
.elementor-widescreen-align-center {
text-align: center; }
.elementor-widescreen-align-center .elementor-button {
width: auto; }
.elementor-widescreen-align-right {
text-align: right; }
.elementor-widescreen-align-right .elementor-button {
width: auto; }
.elementor-widescreen-align-left {
text-align: left; }
.elementor-widescreen-align-left .elementor-button {
width: auto; }
.elementor-widescreen-align-justify .elementor-button {
width: 100%; } }
@media (max-width: ELEMENTOR_SCREEN_LAPTOP_MAX) {
.elementor-laptop-align-center {
text-align: center; }
.elementor-laptop-align-center .elementor-button {
width: auto; }
.elementor-laptop-align-right {
text-align: right; }
.elementor-laptop-align-right .elementor-button {
width: auto; }
.elementor-laptop-align-left {
text-align: left; }
.elementor-laptop-align-left .elementor-button {
width: auto; }
.elementor-laptop-align-justify .elementor-button {
width: 100%; } }
@media (max-width: ELEMENTOR_SCREEN_TABLET_EXTRA_MAX) {
.elementor-tablet_extra-align-center {
text-align: center; }
.elementor-tablet_extra-align-center .elementor-button {
width: auto; }
.elementor-tablet_extra-align-right {
text-align: right; }
.elementor-tablet_extra-align-right .elementor-button {
width: auto; }
.elementor-tablet_extra-align-left {
text-align: left; }
.elementor-tablet_extra-align-left .elementor-button {
width: auto; }
.elementor-tablet_extra-align-justify .elementor-button {
width: 100%; } }
@media (max-width: ELEMENTOR_SCREEN_TABLET_MAX) {
.elementor-tablet-align-center {
text-align: center; }
.elementor-tablet-align-center .elementor-button {
width: auto; }
.elementor-tablet-align-right {
text-align: right; }
.elementor-tablet-align-right .elementor-button {
width: auto; }
.elementor-tablet-align-left {
text-align: left; }
.elementor-tablet-align-left .elementor-button {
width: auto; }
.elementor-tablet-align-justify .elementor-button {
width: 100%; } }
@media (max-width: ELEMENTOR_SCREEN_MOBILE_EXTRA_MAX) {
.elementor-mobile_extra-align-center {
text-align: center; }
.elementor-mobile_extra-align-center .elementor-button {
width: auto; }
.elementor-mobile_extra-align-right {
text-align: right; }
.elementor-mobile_extra-align-right .elementor-button {
width: auto; }
.elementor-mobile_extra-align-left {
text-align: left; }
.elementor-mobile_extra-align-left .elementor-button {
width: auto; }
.elementor-mobile_extra-align-justify .elementor-button {
width: 100%; } }
@media (max-width: ELEMENTOR_SCREEN_MOBILE_MAX) {
.elementor-mobile-align-center {
text-align: center; }
.elementor-mobile-align-center .elementor-button {
width: auto; }
.elementor-mobile-align-right {
text-align: right; }
.elementor-mobile-align-right .elementor-button {
width: auto; }
.elementor-mobile-align-left {
text-align: left; }
.elementor-mobile-align-left .elementor-button {
width: auto; }
.elementor-mobile-align-justify .elementor-button {
width: 100%; } }
:root {
--page-title-display: block; }
.elementor-page-title, h1.entry-title {
display: var(--page-title-display); }
@keyframes eicon-spin {
0% {
transform: rotate(0deg); }
100% {
transform: rotate(359deg); } }
.eicon-animation-spin {
animation: eicon-spin 2s infinite linear; }
.elementor-section {
position: relative; }
.elementor-section .elementor-container {
display: flex;
margin-right: auto;
margin-left: auto;
position: relative; }
@media (max-width: ELEMENTOR_SCREEN_TABLET_MAX) {
.elementor-section .elementor-container {
flex-wrap: wrap; } }
.elementor-section.elementor-section-boxed > .elementor-container {
max-width: 1140px; }
.elementor-section.elementor-section-stretched {
position: relative;
width: 100%; }
.elementor-section.elementor-section-items-top > .elementor-container {
align-items: flex-start; }
.elementor-section.elementor-section-items-middle > .elementor-container {
align-items: center; }
.elementor-section.elementor-section-items-bottom > .elementor-container {
align-items: flex-end; }
@media (min-width: ELEMENTOR_SCREEN_MOBILE_NEXT) {
.elementor-section.elementor-section-height-full {
height: 100vh; }
.elementor-section.elementor-section-height-full > .elementor-container {
height: 100%; } }
.elementor-bc-flex-widget .elementor-section-content-top > .elementor-container > .elementor-column > .elementor-widget-wrap {
align-items: flex-start; }
.elementor-bc-flex-widget .elementor-section-content-middle > .elementor-container > .elementor-column > .elementor-widget-wrap {
align-items: center; }
.elementor-bc-flex-widget .elementor-section-content-bottom > .elementor-container > .elementor-column > .elementor-widget-wrap {
align-items: flex-end; }
.elementor-row {
width: 100%;
display: flex; }
@media (max-width: ELEMENTOR_SCREEN_TABLET_MAX) {
.elementor-row {
flex-wrap: wrap; } }
.elementor-widget-wrap {
position: relative;
width: 100%;
flex-wrap: wrap;
align-content: flex-start; }
.elementor:not(.elementor-bc-flex-widget) .elementor-widget-wrap {
display: flex; }
.elementor-widget-wrap > .elementor-element {
width: 100%; }
.elementor-widget-wrap.e-swiper-container {
width: calc(100% - (var(--e-column-margin-left, 0px) + var(--e-column-margin-right, 0px))); }
.elementor-widget {
position: relative; }
.elementor-widget:not(:last-child) {
margin-bottom: 20px; }
.elementor-widget:not(:last-child).elementor-widget__width-auto, .elementor-widget:not(:last-child).elementor-widget__width-initial, .elementor-widget:not(:last-child).elementor-absolute {
margin-bottom: 0; }
.elementor-column {
position: relative;
min-height: 1px;
display: flex; }
.elementor-column-wrap {
width: 100%;
position: relative;
display: flex; }
.elementor-column-gap-narrow > .elementor-column > .elementor-element-populated {
padding: 5px; }
.elementor-column-gap-default > .elementor-column > .elementor-element-populated {
padding: 10px; }
.elementor-column-gap-extended > .elementor-column > .elementor-element-populated {
padding: 15px; }
.elementor-column-gap-wide > .elementor-column > .elementor-element-populated {
padding: 20px; }
.elementor-column-gap-wider > .elementor-column > .elementor-element-populated {
padding: 30px; }
.elementor-inner-section .elementor-column-gap-no .elementor-element-populated {
padding: 0; }
@media (min-width: ELEMENTOR_SCREEN_MOBILE_NEXT) {
.elementor-column.elementor-col-10, .elementor-column[data-col="10"] {
width: 10%; }
.elementor-column.elementor-col-11, .elementor-column[data-col="11"] {
width: 11.111%; }
.elementor-column.elementor-col-12, .elementor-column[data-col="12"] {
width: 12.5%; }
.elementor-column.elementor-col-14, .elementor-column[data-col="14"] {
width: 14.285%; }
.elementor-column.elementor-col-16, .elementor-column[data-col="16"] {
width: 16.666%; }
.elementor-column.elementor-col-20, .elementor-column[data-col="20"] {
width: 20%; }
.elementor-column.elementor-col-25, .elementor-column[data-col="25"] {
width: 25%; }
.elementor-column.elementor-col-30, .elementor-column[data-col="30"] {
width: 30%; }
.elementor-column.elementor-col-33, .elementor-column[data-col="33"] {
width: 33.333%; }
.elementor-column.elementor-col-40, .elementor-column[data-col="40"] {
width: 40%; }
.elementor-column.elementor-col-50, .elementor-column[data-col="50"] {
width: 50%; }
.elementor-column.elementor-col-60, .elementor-column[data-col="60"] {
width: 60%; }
.elementor-column.elementor-col-66, .elementor-column[data-col="66"] {
width: 66.666%; }
.elementor-column.elementor-col-70, .elementor-column[data-col="70"] {
width: 70%; }
.elementor-column.elementor-col-75, .elementor-column[data-col="75"] {
width: 75%; }
.elementor-column.elementor-col-80, .elementor-column[data-col="80"] {
width: 80%; }
.elementor-column.elementor-col-83, .elementor-column[data-col="83"] {
width: 83.333%; }
.elementor-column.elementor-col-90, .elementor-column[data-col="90"] {
width: 90%; }
.elementor-column.elementor-col-100, .elementor-column[data-col="100"] {
width: 100%; } }
@media (max-width: 479px) {
.elementor-column.elementor-xs-10 {
width: 10%; }
.elementor-column.elementor-xs-11 {
width: 11.111%; }
.elementor-column.elementor-xs-12 {
width: 12.5%; }
.elementor-column.elementor-xs-14 {
width: 14.285%; }
.elementor-column.elementor-xs-16 {
width: 16.666%; }
.elementor-column.elementor-xs-20 {
width: 20%; }
.elementor-column.elementor-xs-25 {
width: 25%; }
.elementor-column.elementor-xs-30 {
width: 30%; }
.elementor-column.elementor-xs-33 {
width: 33.333%; }
.elementor-column.elementor-xs-40 {
width: 40%; }
.elementor-column.elementor-xs-50 {
width: 50%; }
.elementor-column.elementor-xs-60 {
width: 60%; }
.elementor-column.elementor-xs-66 {
width: 66.666%; }
.elementor-column.elementor-xs-70 {
width: 70%; }
.elementor-column.elementor-xs-75 {
width: 75%; }
.elementor-column.elementor-xs-80 {
width: 80%; }
.elementor-column.elementor-xs-83 {
width: 83.333%; }
.elementor-column.elementor-xs-90 {
width: 90%; }
.elementor-column.elementor-xs-100 {
width: 100%; } }
@media (max-width: ELEMENTOR_SCREEN_MOBILE_MAX) {
.elementor-column.elementor-sm-10 {
width: 10%; }
.elementor-column.elementor-sm-11 {
width: 11.111%; }
.elementor-column.elementor-sm-12 {
width: 12.5%; }
.elementor-column.elementor-sm-14 {
width: 14.285%; }
.elementor-column.elementor-sm-16 {
width: 16.666%; }
.elementor-column.elementor-sm-20 {
width: 20%; }
.elementor-column.elementor-sm-25 {
width: 25%; }
.elementor-column.elementor-sm-30 {
width: 30%; }
.elementor-column.elementor-sm-33 {
width: 33.333%; }
.elementor-column.elementor-sm-40 {
width: 40%; }
.elementor-column.elementor-sm-50 {
width: 50%; }
.elementor-column.elementor-sm-60 {
width: 60%; }
.elementor-column.elementor-sm-66 {
width: 66.666%; }
.elementor-column.elementor-sm-70 {
width: 70%; }
.elementor-column.elementor-sm-75 {
width: 75%; }
.elementor-column.elementor-sm-80 {
width: 80%; }
.elementor-column.elementor-sm-83 {
width: 83.333%; }
.elementor-column.elementor-sm-90 {
width: 90%; }
.elementor-column.elementor-sm-100 {
width: 100%; } }
@media (min-width: ELEMENTOR_SCREEN_MOBILE_NEXT) and (max-width: ELEMENTOR_SCREEN_TABLET_MAX) {
.elementor-column.elementor-md-10 {
width: 10%; }
.elementor-column.elementor-md-11 {
width: 11.111%; }
.elementor-column.elementor-md-12 {
width: 12.5%; }
.elementor-column.elementor-md-14 {
width: 14.285%; }
.elementor-column.elementor-md-16 {
width: 16.666%; }
.elementor-column.elementor-md-20 {
width: 20%; }
.elementor-column.elementor-md-25 {
width: 25%; }
.elementor-column.elementor-md-30 {
width: 30%; }
.elementor-column.elementor-md-33 {
width: 33.333%; }
.elementor-column.elementor-md-40 {
width: 40%; }
.elementor-column.elementor-md-50 {
width: 50%; }
.elementor-column.elementor-md-60 {
width: 60%; }
.elementor-column.elementor-md-66 {
width: 66.666%; }
.elementor-column.elementor-md-70 {
width: 70%; }
.elementor-column.elementor-md-75 {
width: 75%; }
.elementor-column.elementor-md-80 {
width: 80%; }
.elementor-column.elementor-md-83 {
width: 83.333%; }
.elementor-column.elementor-md-90 {
width: 90%; }
.elementor-column.elementor-md-100 {
width: 100%; } }
@media (min-width: ELEMENTOR_SCREEN_WIDESCREEN_MIN) {
.elementor-reverse-widescreen > .elementor-container > :nth-child(1) {
order: 10; }
.elementor-reverse-widescreen > .elementor-container > :nth-child(2) {
order: 9; }
.elementor-reverse-widescreen > .elementor-container > :nth-child(3) {
order: 8; }
.elementor-reverse-widescreen > .elementor-container > :nth-child(4) {
order: 7; }
.elementor-reverse-widescreen > .elementor-container > :nth-child(5) {
order: 6; }
.elementor-reverse-widescreen > .elementor-container > :nth-child(6) {
order: 5; }
.elementor-reverse-widescreen > .elementor-container > :nth-child(7) {
order: 4; }
.elementor-reverse-widescreen > .elementor-container > :nth-child(8) {
order: 3; }
.elementor-reverse-widescreen > .elementor-container > :nth-child(9) {
order: 2; }
.elementor-reverse-widescreen > .elementor-container > :nth-child(10) {
order: 1; } }
@media (min-width: ELEMENTOR_SCREEN_TABLET_NEXT) and (max-width: ELEMENTOR_SCREEN_LAPTOP_MAX) {
.elementor-reverse-laptop > .elementor-container > :nth-child(1) {
order: 10; }
.elementor-reverse-laptop > .elementor-container > :nth-child(2) {
order: 9; }
.elementor-reverse-laptop > .elementor-container > :nth-child(3) {
order: 8; }
.elementor-reverse-laptop > .elementor-container > :nth-child(4) {
order: 7; }
.elementor-reverse-laptop > .elementor-container > :nth-child(5) {
order: 6; }
.elementor-reverse-laptop > .elementor-container > :nth-child(6) {
order: 5; }
.elementor-reverse-laptop > .elementor-container > :nth-child(7) {
order: 4; }
.elementor-reverse-laptop > .elementor-container > :nth-child(8) {
order: 3; }
.elementor-reverse-laptop > .elementor-container > :nth-child(9) {
order: 2; }
.elementor-reverse-laptop > .elementor-container > :nth-child(10) {
order: 1; } }
@media (min-width: ELEMENTOR_SCREEN_TABLET_EXTRA_NEXT) and (max-width: ELEMENTOR_SCREEN_LAPTOP_MAX) {
.elementor-reverse-laptop > .elementor-container > :nth-child(1) {
order: 10; }
.elementor-reverse-laptop > .elementor-container > :nth-child(2) {
order: 9; }
.elementor-reverse-laptop > .elementor-container > :nth-child(3) {
order: 8; }
.elementor-reverse-laptop > .elementor-container > :nth-child(4) {
order: 7; }
.elementor-reverse-laptop > .elementor-container > :nth-child(5) {
order: 6; }
.elementor-reverse-laptop > .elementor-container > :nth-child(6) {
order: 5; }
.elementor-reverse-laptop > .elementor-container > :nth-child(7) {
order: 4; }
.elementor-reverse-laptop > .elementor-container > :nth-child(8) {
order: 3; }
.elementor-reverse-laptop > .elementor-container > :nth-child(9) {
order: 2; }
.elementor-reverse-laptop > .elementor-container > :nth-child(10) {
order: 1; } }
@media (min-width: ELEMENTOR_SCREEN_TABLET_NEXT) and (max-width: ELEMENTOR_SCREEN_TABLET_EXTRA_MAX) {
.elementor-reverse-laptop > .elementor-container > :nth-child(1) {
order: initial; }
.elementor-reverse-laptop > .elementor-container > :nth-child(2) {
order: initial; }
.elementor-reverse-laptop > .elementor-container > :nth-child(3) {
order: initial; }
.elementor-reverse-laptop > .elementor-container > :nth-child(4) {
order: initial; }
.elementor-reverse-laptop > .elementor-container > :nth-child(5) {
order: initial; }
.elementor-reverse-laptop > .elementor-container > :nth-child(6) {
order: initial; }
.elementor-reverse-laptop > .elementor-container > :nth-child(7) {
order: initial; }
.elementor-reverse-laptop > .elementor-container > :nth-child(8) {
order: initial; }
.elementor-reverse-laptop > .elementor-container > :nth-child(9) {
order: initial; }
.elementor-reverse-laptop > .elementor-container > :nth-child(10) {
order: initial; }
.elementor-reverse-tablet_extra > .elementor-container > :nth-child(1) {
order: 10; }
.elementor-reverse-tablet_extra > .elementor-container > :nth-child(2) {
order: 9; }
.elementor-reverse-tablet_extra > .elementor-container > :nth-child(3) {
order: 8; }
.elementor-reverse-tablet_extra > .elementor-container > :nth-child(4) {
order: 7; }
.elementor-reverse-tablet_extra > .elementor-container > :nth-child(5) {
order: 6; }
.elementor-reverse-tablet_extra > .elementor-container > :nth-child(6) {
order: 5; }
.elementor-reverse-tablet_extra > .elementor-container > :nth-child(7) {
order: 4; }
.elementor-reverse-tablet_extra > .elementor-container > :nth-child(8) {
order: 3; }
.elementor-reverse-tablet_extra > .elementor-container > :nth-child(9) {
order: 2; }
.elementor-reverse-tablet_extra > .elementor-container > :nth-child(10) {
order: 1; } }
@media (min-width: ELEMENTOR_SCREEN_MOBILE_NEXT) and (max-width: ELEMENTOR_SCREEN_TABLET_MAX) {
.elementor-reverse-tablet > .elementor-container > :nth-child(1) {
order: 10; }
.elementor-reverse-tablet > .elementor-container > :nth-child(2) {
order: 9; }
.elementor-reverse-tablet > .elementor-container > :nth-child(3) {
order: 8; }
.elementor-reverse-tablet > .elementor-container > :nth-child(4) {
order: 7; }
.elementor-reverse-tablet > .elementor-container > :nth-child(5) {
order: 6; }
.elementor-reverse-tablet > .elementor-container > :nth-child(6) {
order: 5; }
.elementor-reverse-tablet > .elementor-container > :nth-child(7) {
order: 4; }
.elementor-reverse-tablet > .elementor-container > :nth-child(8) {
order: 3; }
.elementor-reverse-tablet > .elementor-container > :nth-child(9) {
order: 2; }
.elementor-reverse-tablet > .elementor-container > :nth-child(10) {
order: 1; } }
@media (min-width: ELEMENTOR_SCREEN_MOBILE_EXTRA_NEXT) and (max-width: ELEMENTOR_SCREEN_TABLET_MAX) {
.elementor-reverse-tablet > .elementor-container > :nth-child(1) {
order: 10; }
.elementor-reverse-tablet > .elementor-container > :nth-child(2) {
order: 9; }
.elementor-reverse-tablet > .elementor-container > :nth-child(3) {
order: 8; }
.elementor-reverse-tablet > .elementor-container > :nth-child(4) {
order: 7; }
.elementor-reverse-tablet > .elementor-container > :nth-child(5) {
order: 6; }
.elementor-reverse-tablet > .elementor-container > :nth-child(6) {
order: 5; }
.elementor-reverse-tablet > .elementor-container > :nth-child(7) {
order: 4; }
.elementor-reverse-tablet > .elementor-container > :nth-child(8) {
order: 3; }
.elementor-reverse-tablet > .elementor-container > :nth-child(9) {
order: 2; }
.elementor-reverse-tablet > .elementor-container > :nth-child(10) {
order: 1; } }
@media (min-width: ELEMENTOR_SCREEN_MOBILE_NEXT) and (max-width: ELEMENTOR_SCREEN_MOBILE_EXTRA_MAX) {
.elementor-reverse-tablet > .elementor-container > :nth-child(1) {
order: initial; }
.elementor-reverse-tablet > .elementor-container > :nth-child(2) {
order: initial; }
.elementor-reverse-tablet > .elementor-container > :nth-child(3) {
order: initial; }
.elementor-reverse-tablet > .elementor-container > :nth-child(4) {
order: initial; }
.elementor-reverse-tablet > .elementor-container > :nth-child(5) {
order: initial; }
.elementor-reverse-tablet > .elementor-container > :nth-child(6) {
order: initial; }
.elementor-reverse-tablet > .elementor-container > :nth-child(7) {
order: initial; }
.elementor-reverse-tablet > .elementor-container > :nth-child(8) {
order: initial; }
.elementor-reverse-tablet > .elementor-container > :nth-child(9) {
order: initial; }
.elementor-reverse-tablet > .elementor-container > :nth-child(10) {
order: initial; }
.elementor-reverse-mobile_extra > .elementor-container > :nth-child(1) {
order: 10; }
.elementor-reverse-mobile_extra > .elementor-container > :nth-child(2) {
order: 9; }
.elementor-reverse-mobile_extra > .elementor-container > :nth-child(3) {
order: 8; }
.elementor-reverse-mobile_extra > .elementor-container > :nth-child(4) {
order: 7; }
.elementor-reverse-mobile_extra > .elementor-container > :nth-child(5) {
order: 6; }
.elementor-reverse-mobile_extra > .elementor-container > :nth-child(6) {
order: 5; }
.elementor-reverse-mobile_extra > .elementor-container > :nth-child(7) {
order: 4; }
.elementor-reverse-mobile_extra > .elementor-container > :nth-child(8) {
order: 3; }
.elementor-reverse-mobile_extra > .elementor-container > :nth-child(9) {
order: 2; }
.elementor-reverse-mobile_extra > .elementor-container > :nth-child(10) {
order: 1; } }
@media (max-width: ELEMENTOR_SCREEN_MOBILE_MAX) {
.elementor-reverse-mobile > .elementor-container > :nth-child(1) {
order: 10; }
.elementor-reverse-mobile > .elementor-container > :nth-child(2) {
order: 9; }
.elementor-reverse-mobile > .elementor-container > :nth-child(3) {
order: 8; }
.elementor-reverse-mobile > .elementor-container > :nth-child(4) {
order: 7; }
.elementor-reverse-mobile > .elementor-container > :nth-child(5) {
order: 6; }
.elementor-reverse-mobile > .elementor-container > :nth-child(6) {
order: 5; }
.elementor-reverse-mobile > .elementor-container > :nth-child(7) {
order: 4; }
.elementor-reverse-mobile > .elementor-container > :nth-child(8) {
order: 3; }
.elementor-reverse-mobile > .elementor-container > :nth-child(9) {
order: 2; }
.elementor-reverse-mobile > .elementor-container > :nth-child(10) {
order: 1; }
.elementor-column {
width: 100%; } }
ul.elementor-icon-list-items.elementor-inline-items {
display: flex;
flex-wrap: wrap; }
ul.elementor-icon-list-items.elementor-inline-items .elementor-inline-item {
word-break: break-word; }
.elementor-grid {
display: grid;
grid-column-gap: var(--grid-column-gap);
grid-row-gap: var(--grid-row-gap); }
.elementor-grid .elementor-grid-item {
min-width: 0; }
.elementor-grid-0 .elementor-grid {
display: inline-block;
width: 100%;
word-spacing: var(--grid-column-gap);
margin-bottom: calc(-1 * var(--grid-row-gap)); }
.elementor-grid-0 .elementor-grid .elementor-grid-item {
display: inline-block;
margin-bottom: var(--grid-row-gap);
word-break: break-word; }
.elementor-grid-1 .elementor-grid {
grid-template-columns: repeat(1, 1fr); }
.elementor-grid-2 .elementor-grid {
grid-template-columns: repeat(2, 1fr); }
.elementor-grid-3 .elementor-grid {
grid-template-columns: repeat(3, 1fr); }
.elementor-grid-4 .elementor-grid {
grid-template-columns: repeat(4, 1fr); }
.elementor-grid-5 .elementor-grid {
grid-template-columns: repeat(5, 1fr); }
.elementor-grid-6 .elementor-grid {
grid-template-columns: repeat(6, 1fr); }
.elementor-grid-7 .elementor-grid {
grid-template-columns: repeat(7, 1fr); }
.elementor-grid-8 .elementor-grid {
grid-template-columns: repeat(8, 1fr); }
.elementor-grid-9 .elementor-grid {
grid-template-columns: repeat(9, 1fr); }
.elementor-grid-10 .elementor-grid {
grid-template-columns: repeat(10, 1fr); }
.elementor-grid-11 .elementor-grid {
grid-template-columns: repeat(11, 1fr); }
.elementor-grid-12 .elementor-grid {
grid-template-columns: repeat(12, 1fr); }
@media (min-width: ELEMENTOR_SCREEN_WIDESCREEN_MIN) {
.elementor-grid-widescreen-0 .elementor-grid {
display: inline-block;
width: 100%;
word-spacing: var(--grid-column-gap);
margin-bottom: calc(-1 * var(--grid-row-gap)); }
.elementor-grid-widescreen-0 .elementor-grid .elementor-grid-item {
display: inline-block;
margin-bottom: var(--grid-row-gap);
word-break: break-word; }
.elementor-grid-widescreen-1 .elementor-grid {
grid-template-columns: repeat(1, 1fr); }
.elementor-grid-widescreen-2 .elementor-grid {
grid-template-columns: repeat(2, 1fr); }
.elementor-grid-widescreen-3 .elementor-grid {
grid-template-columns: repeat(3, 1fr); }
.elementor-grid-widescreen-4 .elementor-grid {
grid-template-columns: repeat(4, 1fr); }
.elementor-grid-widescreen-5 .elementor-grid {
grid-template-columns: repeat(5, 1fr); }
.elementor-grid-widescreen-6 .elementor-grid {
grid-template-columns: repeat(6, 1fr); }
.elementor-grid-widescreen-7 .elementor-grid {
grid-template-columns: repeat(7, 1fr); }
.elementor-grid-widescreen-8 .elementor-grid {
grid-template-columns: repeat(8, 1fr); }
.elementor-grid-widescreen-9 .elementor-grid {
grid-template-columns: repeat(9, 1fr); }
.elementor-grid-widescreen-10 .elementor-grid {
grid-template-columns: repeat(10, 1fr); }
.elementor-grid-widescreen-11 .elementor-grid {
grid-template-columns: repeat(11, 1fr); }
.elementor-grid-widescreen-12 .elementor-grid {
grid-template-columns: repeat(12, 1fr); } }
@media (max-width: ELEMENTOR_SCREEN_LAPTOP_MAX) {
.elementor-grid-laptop-0 .elementor-grid {
display: inline-block;
width: 100%;
word-spacing: var(--grid-column-gap);
margin-bottom: calc(-1 * var(--grid-row-gap)); }
.elementor-grid-laptop-0 .elementor-grid .elementor-grid-item {
display: inline-block;
margin-bottom: var(--grid-row-gap);
word-break: break-word; }
.elementor-grid-laptop-1 .elementor-grid {
grid-template-columns: repeat(1, 1fr); }
.elementor-grid-laptop-2 .elementor-grid {
grid-template-columns: repeat(2, 1fr); }
.elementor-grid-laptop-3 .elementor-grid {
grid-template-columns: repeat(3, 1fr); }
.elementor-grid-laptop-4 .elementor-grid {
grid-template-columns: repeat(4, 1fr); }
.elementor-grid-laptop-5 .elementor-grid {
grid-template-columns: repeat(5, 1fr); }
.elementor-grid-laptop-6 .elementor-grid {
grid-template-columns: repeat(6, 1fr); }
.elementor-grid-laptop-7 .elementor-grid {
grid-template-columns: repeat(7, 1fr); }
.elementor-grid-laptop-8 .elementor-grid {
grid-template-columns: repeat(8, 1fr); }
.elementor-grid-laptop-9 .elementor-grid {
grid-template-columns: repeat(9, 1fr); }
.elementor-grid-laptop-10 .elementor-grid {
grid-template-columns: repeat(10, 1fr); }
.elementor-grid-laptop-11 .elementor-grid {
grid-template-columns: repeat(11, 1fr); }
.elementor-grid-laptop-12 .elementor-grid {
grid-template-columns: repeat(12, 1fr); } }
@media (max-width: ELEMENTOR_SCREEN_TABLET_EXTRA_MAX) {
.elementor-grid-tablet_extra-0 .elementor-grid {
display: inline-block;
width: 100%;
word-spacing: var(--grid-column-gap);
margin-bottom: calc(-1 * var(--grid-row-gap)); }
.elementor-grid-tablet_extra-0 .elementor-grid .elementor-grid-item {
display: inline-block;
margin-bottom: var(--grid-row-gap);
word-break: break-word; }
.elementor-grid-tablet_extra-1 .elementor-grid {
grid-template-columns: repeat(1, 1fr); }
.elementor-grid-tablet_extra-2 .elementor-grid {
grid-template-columns: repeat(2, 1fr); }
.elementor-grid-tablet_extra-3 .elementor-grid {
grid-template-columns: repeat(3, 1fr); }
.elementor-grid-tablet_extra-4 .elementor-grid {
grid-template-columns: repeat(4, 1fr); }
.elementor-grid-tablet_extra-5 .elementor-grid {
grid-template-columns: repeat(5, 1fr); }
.elementor-grid-tablet_extra-6 .elementor-grid {
grid-template-columns: repeat(6, 1fr); }
.elementor-grid-tablet_extra-7 .elementor-grid {
grid-template-columns: repeat(7, 1fr); }
.elementor-grid-tablet_extra-8 .elementor-grid {
grid-template-columns: repeat(8, 1fr); }
.elementor-grid-tablet_extra-9 .elementor-grid {
grid-template-columns: repeat(9, 1fr); }
.elementor-grid-tablet_extra-10 .elementor-grid {
grid-template-columns: repeat(10, 1fr); }
.elementor-grid-tablet_extra-11 .elementor-grid {
grid-template-columns: repeat(11, 1fr); }
.elementor-grid-tablet_extra-12 .elementor-grid {
grid-template-columns: repeat(12, 1fr); } }
@media (max-width: ELEMENTOR_SCREEN_TABLET_MAX) {
.elementor-grid-tablet-0 .elementor-grid {
display: inline-block;
width: 100%;
word-spacing: var(--grid-column-gap);
margin-bottom: calc(-1 * var(--grid-row-gap)); }
.elementor-grid-tablet-0 .elementor-grid .elementor-grid-item {
display: inline-block;
margin-bottom: var(--grid-row-gap);
word-break: break-word; }
.elementor-grid-tablet-1 .elementor-grid {
grid-template-columns: repeat(1, 1fr); }
.elementor-grid-tablet-2 .elementor-grid {
grid-template-columns: repeat(2, 1fr); }
.elementor-grid-tablet-3 .elementor-grid {
grid-template-columns: repeat(3, 1fr); }
.elementor-grid-tablet-4 .elementor-grid {
grid-template-columns: repeat(4, 1fr); }
.elementor-grid-tablet-5 .elementor-grid {
grid-template-columns: repeat(5, 1fr); }
.elementor-grid-tablet-6 .elementor-grid {
grid-template-columns: repeat(6, 1fr); }
.elementor-grid-tablet-7 .elementor-grid {
grid-template-columns: repeat(7, 1fr); }
.elementor-grid-tablet-8 .elementor-grid {
grid-template-columns: repeat(8, 1fr); }
.elementor-grid-tablet-9 .elementor-grid {
grid-template-columns: repeat(9, 1fr); }
.elementor-grid-tablet-10 .elementor-grid {
grid-template-columns: repeat(10, 1fr); }
.elementor-grid-tablet-11 .elementor-grid {
grid-template-columns: repeat(11, 1fr); }
.elementor-grid-tablet-12 .elementor-grid {
grid-template-columns: repeat(12, 1fr); } }
@media (max-width: ELEMENTOR_SCREEN_MOBILE_EXTRA_MAX) {
.elementor-grid-mobile_extra-0 .elementor-grid {
display: inline-block;
width: 100%;
word-spacing: var(--grid-column-gap);
margin-bottom: calc(-1 * var(--grid-row-gap)); }
.elementor-grid-mobile_extra-0 .elementor-grid .elementor-grid-item {
display: inline-block;
margin-bottom: var(--grid-row-gap);
word-break: break-word; }
.elementor-grid-mobile_extra-1 .elementor-grid {
grid-template-columns: repeat(1, 1fr); }
.elementor-grid-mobile_extra-2 .elementor-grid {
grid-template-columns: repeat(2, 1fr); }
.elementor-grid-mobile_extra-3 .elementor-grid {
grid-template-columns: repeat(3, 1fr); }
.elementor-grid-mobile_extra-4 .elementor-grid {
grid-template-columns: repeat(4, 1fr); }
.elementor-grid-mobile_extra-5 .elementor-grid {
grid-template-columns: repeat(5, 1fr); }
.elementor-grid-mobile_extra-6 .elementor-grid {
grid-template-columns: repeat(6, 1fr); }
.elementor-grid-mobile_extra-7 .elementor-grid {
grid-template-columns: repeat(7, 1fr); }
.elementor-grid-mobile_extra-8 .elementor-grid {
grid-template-columns: repeat(8, 1fr); }
.elementor-grid-mobile_extra-9 .elementor-grid {
grid-template-columns: repeat(9, 1fr); }
.elementor-grid-mobile_extra-10 .elementor-grid {
grid-template-columns: repeat(10, 1fr); }
.elementor-grid-mobile_extra-11 .elementor-grid {
grid-template-columns: repeat(11, 1fr); }
.elementor-grid-mobile_extra-12 .elementor-grid {
grid-template-columns: repeat(12, 1fr); } }
@media (max-width: ELEMENTOR_SCREEN_MOBILE_MAX) {
.elementor-grid-mobile-0 .elementor-grid {
display: inline-block;
width: 100%;
word-spacing: var(--grid-column-gap);
margin-bottom: calc(-1 * var(--grid-row-gap)); }
.elementor-grid-mobile-0 .elementor-grid .elementor-grid-item {
display: inline-block;
margin-bottom: var(--grid-row-gap);
word-break: break-word; }
.elementor-grid-mobile-1 .elementor-grid {
grid-template-columns: repeat(1, 1fr); }
.elementor-grid-mobile-2 .elementor-grid {
grid-template-columns: repeat(2, 1fr); }
.elementor-grid-mobile-3 .elementor-grid {
grid-template-columns: repeat(3, 1fr); }
.elementor-grid-mobile-4 .elementor-grid {
grid-template-columns: repeat(4, 1fr); }
.elementor-grid-mobile-5 .elementor-grid {
grid-template-columns: repeat(5, 1fr); }
.elementor-grid-mobile-6 .elementor-grid {
grid-template-columns: repeat(6, 1fr); }
.elementor-grid-mobile-7 .elementor-grid {
grid-template-columns: repeat(7, 1fr); }
.elementor-grid-mobile-8 .elementor-grid {
grid-template-columns: repeat(8, 1fr); }
.elementor-grid-mobile-9 .elementor-grid {
grid-template-columns: repeat(9, 1fr); }
.elementor-grid-mobile-10 .elementor-grid {
grid-template-columns: repeat(10, 1fr); }
.elementor-grid-mobile-11 .elementor-grid {
grid-template-columns: repeat(11, 1fr); }
.elementor-grid-mobile-12 .elementor-grid {
grid-template-columns: repeat(12, 1fr); } }
@media (min-width: ELEMENTOR_SCREEN_DESKTOP_MIN) {
#elementor-device-mode:after {
content: 'desktop'; } }
@media (min-width: ELEMENTOR_SCREEN_WIDESCREEN_MIN) {
#elementor-device-mode:after {
content: 'widescreen'; } }
@media (max-width: ELEMENTOR_SCREEN_LAPTOP_MAX) {
#elementor-device-mode:after {
content: 'laptop'; } }
@media (max-width: ELEMENTOR_SCREEN_TABLET_EXTRA_MAX) {
#elementor-device-mode:after {
content: 'tablet_extra'; } }
@media (max-width: ELEMENTOR_SCREEN_TABLET_MAX) {
#elementor-device-mode:after {
content: 'tablet'; } }
@media (max-width: ELEMENTOR_SCREEN_MOBILE_EXTRA_MAX) {
#elementor-device-mode:after {
content: 'mobile_extra'; } }
@media (max-width: ELEMENTOR_SCREEN_MOBILE_MAX) {
#elementor-device-mode:after {
content: 'mobile'; } }
.e-container {
--border-radius: 0;
--display: flex;
--flex-direction: column;
--flex-basis: auto;
--flex-grow: 0;
--flex-shrink: 1;
--content-width: Min( 100%, var( --container-max-width, 1140px ) );
--width: 100%;
--min-height: initial;
--height: auto;
--text-align: initial;
--margin-top: 0;
--margin-right: 0;
--margin-bottom: 0;
--margin-left: 0;
--padding-top: var( --container-default-padding, 0px );
--padding-right: var( --container-default-padding, 0px );
--padding-bottom: var( --container-default-padding, 0px );
--padding-left: var( --container-default-padding, 0px );
--position: relative;
--z-index: revert;
--overflow: visible;
--transition: 0;
--gap: var( --widgets-spacing, 20px );
--overlay-mix-blend-mode: initial;
--overlay-opacity: 1;
--overlay-transition: 0;
position: var(--position);
display: var(--display);
text-align: var(--text-align);
flex-direction: var(--flex-direction);
flex: var(--flex-grow) var(--flex-shrink) var(--flex-basis);
width: var(--width);
min-width: 0;
max-width: Min(100%, var(--width));
min-height: var(--min-height);
height: var(--height);
border-radius: var(--border-radius);
margin: var(--margin-top) var(--margin-right) var(--margin-bottom) var(--margin-left);
padding-left: calc( ( 100% - var( --content-width ) ) / 2 + var( --padding-left ));
padding-right: calc( ( 100% - var( --content-width ) ) / 2 + var( --padding-right ));
padding-top: var(--padding-top);
padding-bottom: var(--padding-bottom);
z-index: var(--z-index);
overflow: var(--overflow);
transition: var(--transition); }
:is(.elementor-section-wrap, [data-elementor-id]) > .e-container {
--margin-right: auto;
--margin-left: auto; }
.e-container .elementor-empty-view {
position: relative;
width: 100%;
height: 100%;
min-height: var(--min-height, 100px); }
.e-container .elementor-empty-view .elementor-first-add {
width: auto;
height: auto;
inset: 10px; }
.e-container .elementor-widget-placeholder {
--size: 10px;
--margin-start: calc( -1 * var( --size ) );
--margin-end: calc( -2 * var( --size ) );
flex-shrink: 0;
align-self: stretch;
z-index: 1;
pointer-events: none; }
.e-container.e-container--row > .elementor-widget-placeholder {
position: relative;
z-index: 9999;
width: var(--size);
margin-inline-start: var(--margin-start);
height: auto;
min-height: 100%;
animation-name: dnd-placeholder-widget-vertical;
animation-fill-mode: both; }
.e-container.e-container--row[data-nesting-level]:not([data-nesting-level="0"]) > .elementor-widget-placeholder {
margin-inline-end: 0;
margin-inline-start: calc( var( --margin-start ) + var( --margin-end )); }
.e-container.e-container--row[data-nesting-level]:not([data-nesting-level="0"]) > :not(.elementor-element) + .elementor-widget-placeholder {
margin-inline-end: var(--margin-end);
margin-inline-start: var(--margin-start); }
.e-container.e-container--column > .elementor-widget-placeholder {
height: var(--size);
margin-block-start: var(--margin-start);
margin-block-end: var(--margin-end);
animation-name: dnd-placeholder-widget-horizontal; }
.e-container.e-container--column > .elementor-widget-placeholder:nth-last-child(2) {
margin-block-start: calc( 2 * var( --margin-start ));
--margin-end: 0; }
.e-container .elementor-sortable-helper {
height: 84px;
width: 125px;
z-index: -1; }
.e-container .elementor-widget.elementor-widget {
margin-bottom: 0; }
.e-container::before {
content: var(--background-overlay);
display: block;
position: absolute;
z-index: 0;
width: 100%;
height: 100%;
left: 0;
top: 0;
mix-blend-mode: var(--overlay-mix-blend-mode);
opacity: var(--overlay-opacity);
transition: var(--overlay-transition);
border-radius: var(--border-radius); }
.e-container .elementor-widget {
min-width: 0; }
.e-container .elementor-widget-video, .e-container .elementor-widget-google_maps {
flex-basis: 100%; }
.e-container .elementor-widget-media-carousel {
max-width: 100%; }
.e-container > .e-container > .elementor-element-overlay .elementor-editor-element-setting, .elementor-widget .e-container > .elementor-element-overlay .elementor-editor-element-setting {
position: relative;
background-color: #556068; }
.e-container > .e-container > .elementor-element-overlay .elementor-editor-element-setting:hover, .elementor-widget .e-container > .elementor-element-overlay .elementor-editor-element-setting:hover {
background-color: #495157; }
.e-container > .e-container > .elementor-element-overlay .elementor-editor-element-setting.elementor-editor-element-add,
.e-container > .e-container > .elementor-element-overlay .elementor-editor-element-setting.elementor-editor-element-edit + .elementor-editor-element-remove, .e-container > .e-container > .elementor-element-overlay .elementor-editor-element-setting:first-child::before, .e-container > .e-container > .elementor-element-overlay .elementor-editor-element-setting:last-child::after, .elementor-widget .e-container > .elementor-element-overlay .elementor-editor-element-setting.elementor-editor-element-add,
.elementor-widget .e-container > .elementor-element-overlay .elementor-editor-element-setting.elementor-editor-element-edit + .elementor-editor-element-remove, .elementor-widget .e-container > .elementor-element-overlay .elementor-editor-element-setting:first-child::before, .elementor-widget .e-container > .elementor-element-overlay .elementor-editor-element-setting:last-child::after {
display: none; }
.e-container > .e-container > .elementor-element-overlay .elementor-editor-element-setting:not(.elementor-editor-element-edit), .elementor-widget .e-container > .elementor-element-overlay .elementor-editor-element-setting:not(.elementor-editor-element-edit) {
margin-inline-start: -25px;
z-index: -1;
transition: .3s all;
will-change: margin-inline-start; }
.e-container > .e-container > .elementor-element-overlay > .elementor-editor-element-settings:hover > :is(.elementor-editor-element-duplicate, .elementor-editor-element-remove), .elementor-widget .e-container > .elementor-element-overlay > .elementor-editor-element-settings:hover > :is(.elementor-editor-element-duplicate, .elementor-editor-element-remove) {
margin-inline-start: 0; }
.e-container > .e-container > .elementor-element-overlay .elementor-editor-element-settings, .elementor-widget .e-container > .elementor-element-overlay .elementor-editor-element-settings {
inset: initial;
transform: none;
inset-inline-start: 0;
top: 0;
border-radius: 0;
border-end-end-radius: 3px;
height: auto;
background-color: #556068; }
.e-container > .e-container > .elementor-element-overlay .elementor-editor-element-settings:hover, .elementor-widget .e-container > .elementor-element-overlay .elementor-editor-element-settings:hover {
background-color: #495157; }
.e-container > .e-container > .elementor-element-overlay .elementor-editor-element-settings i.eicon-handle::before, .elementor-widget .e-container > .elementor-element-overlay .elementor-editor-element-settings i.eicon-handle::before {
content: '\e9b4';
font-size: 20px;
display: block;
padding: 2px; }
@media (max-width: 767px) {
.e-container {
--width: 100%;
--flex-wrap: wrap; } }
@keyframes dnd-placeholder-widget-vertical {
0% {
transform-origin: 0 50%;
transform: translateX(50%) scaleX(0);
opacity: 0; }
100% {
transform-origin: 0 50%;
transform: translateX(50%) scaleX(1);
opacity: .9; } }
@keyframes dnd-placeholder-widget-horizontal {
0% {
transform-origin: 50% 0;
transform: scaleY(0);
opacity: 0; }
100% {
transform-origin: 50% 0;
transform: scaleY(1);
opacity: .9; } }
.elementor-form-fields-wrapper {
display: flex;
flex-wrap: wrap; }
.elementor-form-fields-wrapper.elementor-labels-above .elementor-field-group > input, .elementor-form-fields-wrapper.elementor-labels-above .elementor-field-group > textarea, .elementor-form-fields-wrapper.elementor-labels-above .elementor-field-group > .elementor-select-wrapper, .elementor-form-fields-wrapper.elementor-labels-above .elementor-field-group .elementor-field-subgroup {
flex-basis: 100%;
max-width: 100%; }
.elementor-form-fields-wrapper.elementor-labels-inline > .elementor-field-group > input, .elementor-form-fields-wrapper.elementor-labels-inline > .elementor-field-group .elementor-select-wrapper {
flex-grow: 1; }
.elementor-field-group {
flex-wrap: wrap;
align-items: center; }
.elementor-field-group.elementor-field-type-submit {
align-items: flex-end; }
.elementor-field-group .elementor-field-textual {
width: 100%;
max-width: 100%;
border: 1px solid #818a91;
background-color: transparent;
color: #373a3c;
vertical-align: middle;
flex-grow: 1; }
.elementor-field-group .elementor-field-textual:focus {
box-shadow: 0 0 0 1px rgba(0, 0, 0, 0.1) inset;
outline: 0; }
.elementor-field-group .elementor-field-textual::-webkit-input-placeholder {
color: inherit;
font-family: inherit;
opacity: 0.6; }
.elementor-field-group .elementor-field-textual:-ms-input-placeholder {
color: inherit;
font-family: inherit;
opacity: 0.6; }
.elementor-field-group .elementor-field-textual::-moz-placeholder {
color: inherit;
font-family: inherit;
opacity: 0.6; }
.elementor-field-group .elementor-field-textual:-moz-placeholder {
color: inherit;
font-family: inherit;
opacity: 0.6; }
.elementor-field-group .elementor-field-textual::placeholder {
color: inherit;
font-family: inherit;
opacity: 0.6; }
.elementor-field-group .elementor-select-wrapper {
display: flex;
position: relative;
width: 100%; }
.elementor-field-group .elementor-select-wrapper select {
appearance: none;
-webkit-appearance: none;
-moz-appearance: none;
color: inherit;
font-size: inherit;
font-family: inherit;
font-weight: inherit;
font-style: inherit;
text-transform: inherit;
letter-spacing: inherit;
line-height: inherit;
flex-basis: 100%;
padding-left: 20px; }
.elementor-field-group .elementor-select-wrapper:before {
content: '\e92a';
font-family: 'eicons';
font-size: 15px;
position: absolute;
top: 50%;
transform: translateY(-50%);
left: 10px;
pointer-events: none;
text-shadow: 0 0 3px rgba(0, 0, 0, 0.3); }
.elementor-field-group.elementor-field-type-select-multiple .elementor-select-wrapper:before {
content: ''; }
.elementor-field-subgroup {
display: flex;
flex-wrap: wrap; }
.elementor-field-subgroup .elementor-field-option label {
display: inline-block; }
.elementor-field-subgroup.elementor-subgroup-inline .elementor-field-option {
padding-left: 10px; }
.elementor-field-subgroup:not(.elementor-subgroup-inline) .elementor-field-option {
flex-basis: 100%; }
.elementor-field-type-checkbox .elementor-field-subgroup .elementor-field-option input,
.elementor-field-type-checkbox .elementor-field-subgroup .elementor-field-option label,
.elementor-field-type-radio .elementor-field-subgroup .elementor-field-option input,
.elementor-field-type-radio .elementor-field-subgroup .elementor-field-option label,
.elementor-field-type-acceptance .elementor-field-subgroup .elementor-field-option input,
.elementor-field-type-acceptance .elementor-field-subgroup .elementor-field-option label {
display: inline; }
.elementor-field-label {
cursor: pointer; }
.elementor-mark-required .elementor-field-label:after {
content: '*';
color: red;
padding-right: 0.2em; }
.elementor-field-textual {
line-height: 1.4;
font-size: 15px;
min-height: 40px;
padding: 5px 14px;
border-radius: 3px; }
.elementor-field-textual.elementor-size-xs {
font-size: 13px;
min-height: 33px;
padding: 4px 12px;
border-radius: 2px; }
.elementor-field-textual.elementor-size-md {
font-size: 16px;
min-height: 47px;
padding: 6px 16px;
border-radius: 4px; }
.elementor-field-textual.elementor-size-lg {
font-size: 18px;
min-height: 59px;
padding: 7px 20px;
border-radius: 5px; }
.elementor-field-textual.elementor-size-xl {
font-size: 20px;
min-height: 72px;
padding: 8px 24px;
border-radius: 6px; }
.elementor-button-align-stretch .elementor-field-type-submit:not(.e-form__buttons__wrapper) .elementor-button {
flex-basis: 100%; }
.elementor-button-align-stretch .e-form__buttons__wrapper {
flex-basis: 50%;
flex-grow: 1; }
.elementor-button-align-stretch .e-form__buttons__wrapper__button {
flex-basis: 100%; }
.elementor-button-align-center .elementor-field-type-submit,
.elementor-button-align-center .e-form__buttons {
justify-content: center; }
.elementor-button-align-start .elementor-field-type-submit,
.elementor-button-align-start .e-form__buttons {
justify-content: flex-end; }
.elementor-button-align-end .elementor-field-type-submit,
.elementor-button-align-end .e-form__buttons {
justify-content: flex-start; }
.elementor-button-align-center .elementor-field-type-submit:not(.e-form__buttons__wrapper) .elementor-button, .elementor-button-align-start .elementor-field-type-submit:not(.e-form__buttons__wrapper) .elementor-button, .elementor-button-align-end .elementor-field-type-submit:not(.e-form__buttons__wrapper) .elementor-button {
flex-basis: initial; }
.elementor-button-align-center .e-form__buttons__wrapper, .elementor-button-align-start .e-form__buttons__wrapper, .elementor-button-align-end .e-form__buttons__wrapper {
flex-grow: initial; }
.elementor-button-align-center .e-form__buttons__wrapper, .elementor-button-align-center .e-form__buttons__wrapper__button, .elementor-button-align-start .e-form__buttons__wrapper, .elementor-button-align-start .e-form__buttons__wrapper__button, .elementor-button-align-end .e-form__buttons__wrapper, .elementor-button-align-end .e-form__buttons__wrapper__button {
flex-basis: initial; }
@media screen and (max-width: ELEMENTOR_SCREEN_TABLET_MAX) {
.elementor-tablet-button-align-stretch .elementor-field-type-submit:not(.e-form__buttons__wrapper) .elementor-button {
flex-basis: 100%; }
.elementor-tablet-button-align-stretch .e-form__buttons__wrapper {
flex-basis: 50%;
flex-grow: 1; }
.elementor-tablet-button-align-stretch .e-form__buttons__wrapper__button {
flex-basis: 100%; }
.elementor-tablet-button-align-center .elementor-field-type-submit,
.elementor-tablet-button-align-center .e-form__buttons {
justify-content: center; }
.elementor-tablet-button-align-start .elementor-field-type-submit,
.elementor-tablet-button-align-start .e-form__buttons {
justify-content: flex-end; }
.elementor-tablet-button-align-end .elementor-field-type-submit,
.elementor-tablet-button-align-end .e-form__buttons {
justify-content: flex-start; }
.elementor-tablet-button-align-center .elementor-field-type-submit:not(.e-form__buttons__wrapper) .elementor-button, .elementor-tablet-button-align-start .elementor-field-type-submit:not(.e-form__buttons__wrapper) .elementor-button, .elementor-tablet-button-align-end .elementor-field-type-submit:not(.e-form__buttons__wrapper) .elementor-button {
flex-basis: initial; }
.elementor-tablet-button-align-center .e-form__buttons__wrapper, .elementor-tablet-button-align-start .e-form__buttons__wrapper, .elementor-tablet-button-align-end .e-form__buttons__wrapper {
flex-grow: initial; }
.elementor-tablet-button-align-center .e-form__buttons__wrapper, .elementor-tablet-button-align-center .e-form__buttons__wrapper__button, .elementor-tablet-button-align-start .e-form__buttons__wrapper, .elementor-tablet-button-align-start .e-form__buttons__wrapper__button, .elementor-tablet-button-align-end .e-form__buttons__wrapper, .elementor-tablet-button-align-end .e-form__buttons__wrapper__button {
flex-basis: initial; } }
@media screen and (max-width: ELEMENTOR_SCREEN_MOBILE_MAX) {
.elementor-mobile-button-align-stretch .elementor-field-type-submit:not(.e-form__buttons__wrapper) .elementor-button {
flex-basis: 100%; }
.elementor-mobile-button-align-stretch .e-form__buttons__wrapper {
flex-basis: 50%;
flex-grow: 1; }
.elementor-mobile-button-align-stretch .e-form__buttons__wrapper__button {
flex-basis: 100%; }
.elementor-mobile-button-align-center .elementor-field-type-submit,
.elementor-mobile-button-align-center .e-form__buttons {
justify-content: center; }
.elementor-mobile-button-align-start .elementor-field-type-submit,
.elementor-mobile-button-align-start .e-form__buttons {
justify-content: flex-end; }
.elementor-mobile-button-align-end .elementor-field-type-submit,
.elementor-mobile-button-align-end .e-form__buttons {
justify-content: flex-start; }
.elementor-mobile-button-align-center .elementor-field-type-submit:not(.e-form__buttons__wrapper) .elementor-button, .elementor-mobile-button-align-start .elementor-field-type-submit:not(.e-form__buttons__wrapper) .elementor-button, .elementor-mobile-button-align-end .elementor-field-type-submit:not(.e-form__buttons__wrapper) .elementor-button {
flex-basis: initial; }
.elementor-mobile-button-align-center .e-form__buttons__wrapper, .elementor-mobile-button-align-start .e-form__buttons__wrapper, .elementor-mobile-button-align-end .e-form__buttons__wrapper {
flex-grow: initial; }
.elementor-mobile-button-align-center .e-form__buttons__wrapper, .elementor-mobile-button-align-center .e-form__buttons__wrapper__button, .elementor-mobile-button-align-start .e-form__buttons__wrapper, .elementor-mobile-button-align-start .e-form__buttons__wrapper__button, .elementor-mobile-button-align-end .e-form__buttons__wrapper, .elementor-mobile-button-align-end .e-form__buttons__wrapper__button {
flex-basis: initial; } }
.elementor-error .elementor-field {
border-color: #d9534f; }
.elementor-error .help-inline {
color: #d9534f;
font-size: 0.9em; }
.elementor-message {
margin: 10px 0;
font-size: 1em;
line-height: 1; }
.elementor-message:before {
content: "\e90e";
display: inline-block;
font-family: eicons;
font-weight: normal;
font-style: normal;
vertical-align: middle;
margin-left: 5px; }
.elementor-message.elementor-message-danger {
color: #d9534f; }
.elementor-message.elementor-message-danger:before {
content: "\e87f"; }
.elementor-message.form-message-success {
color: #5cb85c; }
.elementor-form .elementor-button {
padding-top: 0;
padding-bottom: 0;
border: none; }
.elementor-form .elementor-button > span {
display: flex;
justify-content: center; }
.elementor-form .elementor-button.elementor-size-xs {
min-height: 33px; }
.elementor-form .elementor-button.elementor-size-sm {
min-height: 40px; }
.elementor-form .elementor-button.elementor-size-md {
min-height: 47px; }
.elementor-form .elementor-button.elementor-size-lg {
min-height: 59px; }
.elementor-form .elementor-button.elementor-size-xl {
min-height: 72px; }
.elementor-element .elementor-widget-container {
transition: background 0.3s, border 0.3s, border-radius 0.3s, box-shadow 0.3s; }
.elementor-button {
display: inline-block;
line-height: 1;
background-color: #818a91;
font-size: 15px;
padding: 12px 24px;
border-radius: 3px;
color: #fff;
fill: #fff;
text-align: center;
transition: all 0.3s; }
.elementor-button:hover, .elementor-button:focus, .elementor-button:visited {
color: #fff; }
.elementor-button-content-wrapper {
display: flex;
justify-content: center; }
.elementor-button-icon {
flex-grow: 0;
order: 5; }
.elementor-button-icon svg {
width: 1em;
height: auto; }
.elementor-button-icon .e-font-icon-svg {
height: 1em; }
.elementor-button-text {
flex-grow: 1;
order: 10;
display: inline-block; }
.elementor-button.elementor-size-xs {
font-size: 13px;
padding: 10px 20px;
border-radius: 2px; }
.elementor-button.elementor-size-md {
font-size: 16px;
padding: 15px 30px;
border-radius: 4px; }
.elementor-button.elementor-size-lg {
font-size: 18px;
padding: 20px 40px;
border-radius: 5px; }
.elementor-button.elementor-size-xl {
font-size: 20px;
padding: 25px 50px;
border-radius: 6px; }
.elementor-button .elementor-align-icon-right {
margin-left: 5px;
order: 5; }
.elementor-button .elementor-align-icon-left {
margin-right: 5px;
order: 15; }
.elementor-button span {
text-decoration: inherit; }
.elementor-element.elementor-button-info .elementor-button {
background-color: #5bc0de; }
.elementor-element.elementor-button-success .elementor-button {
background-color: #5cb85c; }
.elementor-element.elementor-button-warning .elementor-button {
background-color: #f0ad4e; }
.elementor-element.elementor-button-danger .elementor-button {
background-color: #d9534f; }
.elementor-widget-button .elementor-button .elementor-button-info {
background-color: #5bc0de; }
.elementor-widget-button .elementor-button .elementor-button-success {
background-color: #5cb85c; }
.elementor-widget-button .elementor-button .elementor-button-warning {
background-color: #f0ad4e; }
.elementor-widget-button .elementor-button .elementor-button-danger {
background-color: #d9534f; }
.elementor-tab-title a {
color: inherit; }
.elementor-view-stacked .elementor-icon {
padding: .5em;
background-color: #818a91;
color: #fff;
fill: #fff; }
.elementor-view-framed .elementor-icon {
padding: .5em;
color: #818a91;
border: 3px solid #818a91;
background-color: transparent; }
.elementor-icon {
display: inline-block;
line-height: 1;
transition: all 0.3s;
color: #818a91;
font-size: 50px;
text-align: center; }
.elementor-icon:hover {
color: #818a91; }
.elementor-icon i, .elementor-icon svg {
width: 1em;
height: 1em;
position: relative;
display: block; }
.elementor-icon i:before, .elementor-icon svg:before {
position: absolute;
left: 50%;
transform: translateX(-50%); }
.elementor-icon i.fad {
width: initial; }
.elementor-shape-circle .elementor-icon {
border-radius: 50%; }
.e-transform .elementor-widget-container {
transform: perspective(var(--e-transform-perspective, 0)) rotateZ(var(--e-transform-rotateZ, 0)) rotateX(var(--e-transform-rotateX, 0)) rotateY(var(--e-transform-rotateY, 0)) translate(var(--e-transform-translate, 0)) translateX(var(--e-transform-translateX, 0)) translateY(var(--e-transform-translateY, 0)) scaleX(calc( var( --e-transform-flipX, 1 ) * var( --e-transform-scaleX, var( --e-transform-scale, 1 ) ))) scaleY(calc( var( --e-transform-flipY, 1 ) * var( --e-transform-scaleY, var(--e-transform-scale, 1) ))) skewX(var(--e-transform-skewX, 0)) skewY(var(--e-transform-skewY, 0));
transform-origin: var(--e-transform-origin-y) var(--e-transform-origin-x);
transition: transform var(--e-transform-transition-duration, 400ms); }
/**
* Swiper 3.4.2
* Customized by Elementor team
*/
.swiper-container {
margin-left: auto;
margin-right: auto;
position: relative;
overflow: hidden;
/* Fix of Webkit flickering */
z-index: 1; }
.swiper-container .swiper-slide figure {
line-height: 0; }
.swiper-container .elementor-lightbox-content-source {
display: none; }
.swiper-container-no-flexbox .swiper-slide {
float: left; }
.swiper-container-vertical > .swiper-wrapper {
flex-direction: column; }
.swiper-wrapper {
position: relative;
width: 100%;
height: 100%;
z-index: 1;
display: flex;
transition-property: transform;
box-sizing: content-box; }
.swiper-container-android .swiper-slide, .swiper-wrapper {
transform: translate3d(0px, 0, 0); }
.swiper-container-multirow > .swiper-wrapper {
flex-wrap: wrap; }
.swiper-container-free-mode > .swiper-wrapper {
transition-timing-function: ease-out;
margin: 0 auto; }
.swiper-slide {
flex-shrink: 0;
width: 100%;
height: 100%;
position: relative; }
/* Auto Height */
.swiper-container-autoheight {
height: auto; }
.swiper-container-autoheight .swiper-slide {
height: auto; }
.swiper-container-autoheight .swiper-wrapper {
align-items: flex-start;
transition-property: transform, height; }
/* a11y */
.swiper-container .swiper-notification {
position: absolute;
left: 0;
top: 0;
pointer-events: none;
opacity: 0;
z-index: -1000; }
/* IE10 Windows Phone 8 Fixes */
.swiper-wp8-horizontal {
touch-action: pan-y; }
.swiper-wp8-vertical {
touch-action: pan-x; }
/* Arrows */
.swiper-button-prev, .swiper-button-next {
position: absolute;
top: 50%;
width: 27px;
height: 44px;
margin-top: -22px;
z-index: 10;
cursor: pointer;
background-size: 27px 44px;
background: no-repeat center; }
.swiper-button-prev.swiper-button-disabled, .swiper-button-next.swiper-button-disabled {
opacity: 0.35;
cursor: auto;
pointer-events: none; }
.swiper-button-prev, .swiper-container-rtl .swiper-button-next {
background-image: url("data:image/svg+xml;charset=utf-8,%3Csvg%20xmlns%3D'http%3A%2F%2Fwww.w3.org%2F2000%2Fsvg'%20viewBox%3D'0%200%2027%2044'%3E%3Cpath%20d%3D'M0%2C22L22%2C0l2.1%2C2.1L4.2%2C22l19.9%2C19.9L22%2C44L0%2C22L0%2C22L0%2C22z'%20fill%3D'%23007aff'%2F%3E%3C%2Fsvg%3E");
left: 10px;
right: auto; }
.swiper-button-prev.swiper-button-black, .swiper-container-rtl .swiper-button-next.swiper-button-black {
background-image: url("data:image/svg+xml;charset=utf-8,%3Csvg%20xmlns%3D'http%3A%2F%2Fwww.w3.org%2F2000%2Fsvg'%20viewBox%3D'0%200%2027%2044'%3E%3Cpath%20d%3D'M0%2C22L22%2C0l2.1%2C2.1L4.2%2C22l19.9%2C19.9L22%2C44L0%2C22L0%2C22L0%2C22z'%20fill%3D'%23000000'%2F%3E%3C%2Fsvg%3E"); }
.swiper-button-prev.swiper-button-white, .swiper-container-rtl .swiper-button-next.swiper-button-white {
background-image: url("data:image/svg+xml;charset=utf-8,%3Csvg%20xmlns%3D'http%3A%2F%2Fwww.w3.org%2F2000%2Fsvg'%20viewBox%3D'0%200%2027%2044'%3E%3Cpath%20d%3D'M0%2C22L22%2C0l2.1%2C2.1L4.2%2C22l19.9%2C19.9L22%2C44L0%2C22L0%2C22L0%2C22z'%20fill%3D'%23ffffff'%2F%3E%3C%2Fsvg%3E"); }
.swiper-button-next, .swiper-container-rtl .swiper-button-prev {
background-image: url("data:image/svg+xml;charset=utf-8,%3Csvg%20xmlns%3D'http%3A%2F%2Fwww.w3.org%2F2000%2Fsvg'%20viewBox%3D'0%200%2027%2044'%3E%3Cpath%20d%3D'M27%2C22L27%2C22L5%2C44l-2.1-2.1L22.8%2C22L2.9%2C2.1L5%2C0L27%2C22L27%2C22z'%20fill%3D'%23007aff'%2F%3E%3C%2Fsvg%3E");
right: 10px;
left: auto; }
.swiper-button-next.swiper-button-black, .swiper-container-rtl .swiper-button-prev.swiper-button-black {
background-image: url("data:image/svg+xml;charset=utf-8,%3Csvg%20xmlns%3D'http%3A%2F%2Fwww.w3.org%2F2000%2Fsvg'%20viewBox%3D'0%200%2027%2044'%3E%3Cpath%20d%3D'M27%2C22L27%2C22L5%2C44l-2.1-2.1L22.8%2C22L2.9%2C2.1L5%2C0L27%2C22L27%2C22z'%20fill%3D'%23000000'%2F%3E%3C%2Fsvg%3E"); }
.swiper-button-next.swiper-button-white, .swiper-container-rtl .swiper-button-prev.swiper-button-white {
background-image: url("data:image/svg+xml;charset=utf-8,%3Csvg%20xmlns%3D'http%3A%2F%2Fwww.w3.org%2F2000%2Fsvg'%20viewBox%3D'0%200%2027%2044'%3E%3Cpath%20d%3D'M27%2C22L27%2C22L5%2C44l-2.1-2.1L22.8%2C22L2.9%2C2.1L5%2C0L27%2C22L27%2C22z'%20fill%3D'%23ffffff'%2F%3E%3C%2Fsvg%3E"); }
/* Pagination Styles */
.swiper-pagination {
position: absolute;
text-align: center;
transition: 300ms;
transform: translate3d(0, 0, 0);
z-index: 10; }
.swiper-pagination.swiper-pagination-hidden {
opacity: 0; }
/* Common Styles */
.swiper-pagination-fraction, .swiper-pagination-custom, .swiper-container-horizontal > .swiper-pagination-bullets {
bottom: 5px;
left: 0;
width: 100%; }
/* Bullets */
.swiper-pagination-bullet {
width: 6px;
height: 6px;
display: inline-block;
border-radius: 50%;
background: #000;
opacity: 0.2; }
.swiper-pagination-fraction {
color: #000; }
button.swiper-pagination-bullet {
border: none;
margin: 0;
padding: 0;
box-shadow: none;
appearance: none;
-webkit-appearance: none;
-moz-appearance: none; }
.swiper-pagination-clickable .swiper-pagination-bullet {
cursor: pointer; }
.swiper-pagination-white .swiper-pagination-bullet {
background: #fff; }
.swiper-pagination-bullet-active {
opacity: 1; }
.swiper-pagination-white .swiper-pagination-bullet-active {
background: #fff; }
.swiper-pagination-black .swiper-pagination-bullet-active {
background: #000; }
.swiper-container-vertical > .swiper-pagination-bullets {
right: 10px;
top: 50%;
transform: translate3d(0px, -50%, 0); }
.swiper-container-vertical > .swiper-pagination-bullets .swiper-pagination-bullet {
margin: 5px 0;
display: block; }
.swiper-container-horizontal > .swiper-pagination-bullets .swiper-pagination-bullet {
margin: 0 6px; }
/* Progressbar */
.swiper-pagination-progressbar {
background: rgba(0, 0, 0, 0.25);
position: absolute; }
.swiper-pagination-progressbar .swiper-pagination-progressbar-fill {
background: #000;
position: absolute;
left: 0;
top: 0;
width: 100%;
height: 100%;
transform: scale(0);
transform-origin: left top; }
.swiper-container-rtl .swiper-pagination-progressbar .swiper-pagination-progressbar-fill {
transform-origin: right top; }
.swiper-container-horizontal > .swiper-pagination-progressbar {
width: 100%;
height: 4px;
left: 0;
top: 0; }
.swiper-container-vertical > .swiper-pagination-progressbar {
width: 4px;
height: 100%;
left: 0;
top: 0; }
.swiper-pagination-progressbar.swiper-pagination-white {
background: rgba(255, 255, 255, 0.5); }
.swiper-pagination-progressbar.swiper-pagination-white .swiper-pagination-progressbar-fill {
background: #fff; }
.swiper-pagination-progressbar.swiper-pagination-black .swiper-pagination-progressbar-fill {
background: #000; }
/* 3D Container */
.swiper-container-3d {
perspective: 1200px; }
.swiper-container-3d .swiper-wrapper, .swiper-container-3d .swiper-slide, .swiper-container-3d .swiper-slide-shadow-left, .swiper-container-3d .swiper-slide-shadow-right, .swiper-container-3d .swiper-slide-shadow-top, .swiper-container-3d .swiper-slide-shadow-bottom, .swiper-container-3d .swiper-cube-shadow {
transform-style: preserve-3d; }
.swiper-container-3d .swiper-slide-shadow-left, .swiper-container-3d .swiper-slide-shadow-right, .swiper-container-3d .swiper-slide-shadow-top, .swiper-container-3d .swiper-slide-shadow-bottom {
position: absolute;
left: 0;
top: 0;
width: 100%;
height: 100%;
pointer-events: none;
z-index: 10; }
.swiper-container-3d .swiper-slide-shadow-left {
background-image: linear-gradient(to left, rgba(0, 0, 0, 0.5), rgba(0, 0, 0, 0)); }
.swiper-container-3d .swiper-slide-shadow-right {
background-image: linear-gradient(to right, rgba(0, 0, 0, 0.5), rgba(0, 0, 0, 0)); }
.swiper-container-3d .swiper-slide-shadow-top {
background-image: linear-gradient(to top, rgba(0, 0, 0, 0.5), rgba(0, 0, 0, 0)); }
.swiper-container-3d .swiper-slide-shadow-bottom {
background-image: linear-gradient(to bottom, rgba(0, 0, 0, 0.5), rgba(0, 0, 0, 0)); }
/* Coverflow */
.swiper-container-coverflow .swiper-wrapper, .swiper-container-flip .swiper-wrapper {
/* Windows 8 IE 10 fix */
-ms-perspective: 1200px; }
/* Cube + Flip */
.swiper-container-cube, .swiper-container-flip {
overflow: visible; }
.swiper-container-cube .swiper-slide, .swiper-container-flip .swiper-slide {
pointer-events: none;
z-index: 1; }
.swiper-container-cube .swiper-slide .swiper-slide, .swiper-container-flip .swiper-slide .swiper-slide {
pointer-events: none; }
.swiper-container-cube .swiper-slide-active, .swiper-container-flip .swiper-slide-active, .swiper-container-cube .swiper-slide-active .swiper-slide-active, .swiper-container-flip .swiper-slide-active .swiper-slide-active {
pointer-events: auto; }
.swiper-container-cube .swiper-slide-shadow-top, .swiper-container-flip .swiper-slide-shadow-top, .swiper-container-cube .swiper-slide-shadow-bottom, .swiper-container-flip .swiper-slide-shadow-bottom, .swiper-container-cube .swiper-slide-shadow-left, .swiper-container-flip .swiper-slide-shadow-left, .swiper-container-cube .swiper-slide-shadow-right, .swiper-container-flip .swiper-slide-shadow-right {
z-index: 0;
backface-visibility: hidden; }
/* Cube */
.swiper-container-cube .swiper-slide {
visibility: hidden;
transform-origin: 0 0;
width: 100%;
height: 100%; }
.swiper-container-cube.swiper-container-rtl .swiper-slide {
transform-origin: 100% 0; }
.swiper-container-cube .swiper-slide-active, .swiper-container-cube .swiper-slide-next, .swiper-container-cube .swiper-slide-prev, .swiper-container-cube .swiper-slide-next + .swiper-slide {
pointer-events: auto;
visibility: visible; }
.swiper-container-cube .swiper-cube-shadow {
position: absolute;
left: 0;
bottom: 0;
width: 100%;
height: 100%;
background: #000;
opacity: 0.6;
-webkit-filter: blur(50px);
filter: blur(50px);
z-index: 0; }
/* Fade */
.swiper-container-fade.swiper-container-free-mode .swiper-slide {
transition-timing-function: ease-out; }
.swiper-container-fade .swiper-slide {
pointer-events: none;
transition-property: opacity; }
.swiper-container-fade .swiper-slide .swiper-slide {
pointer-events: none; }
.swiper-container-fade .swiper-slide-active {
pointer-events: auto; }
.swiper-container-fade .swiper-slide-active .swiper-slide-active {
pointer-events: auto; }
.swiper-zoom-container {
width: 100%;
height: 100%;
display: flex;
justify-content: center;
align-items: center;
text-align: center; }
.swiper-zoom-container > img, .swiper-zoom-container > svg, .swiper-zoom-container > canvas {
max-width: 100%;
max-height: 100%;
object-fit: contain; }
/* Scrollbar */
.swiper-scrollbar {
border-radius: 10px;
position: relative;
-ms-touch-action: none;
background: rgba(0, 0, 0, 0.1); }
.swiper-container-horizontal > .swiper-scrollbar {
position: absolute;
left: 1%;
bottom: 3px;
z-index: 50;
height: 5px;
width: 98%; }
.swiper-container-vertical > .swiper-scrollbar {
position: absolute;
right: 3px;
top: 1%;
z-index: 50;
width: 5px;
height: 98%; }
.swiper-scrollbar-drag {
height: 100%;
width: 100%;
position: relative;
background: rgba(0, 0, 0, 0.5);
border-radius: 10px;
left: 0;
top: 0; }
.swiper-scrollbar-cursor-drag {
cursor: move; }
.elementor-pagination-position-outside .swiper-container {
padding-bottom: 30px; }
.elementor-pagination-position-outside .elementor-swiper-button {
top: calc(50% - 30px / 2); }
.elementor-swiper {
position: relative; }
.elementor-main-swiper {
position: static; }
.elementor-arrows-position-outside .swiper-container {
width: calc(100% - 60px); }
.elementor-arrows-position-outside .elementor-swiper-button-prev {
left: 0; }
.elementor-arrows-position-outside .elementor-swiper-button-next {
right: 0; }
.swiper-image-stretch .swiper-slide .swiper-slide-image {
width: 100%; }
.elementor-swiper-button {
position: absolute;
display: inline-flex;
z-index: 1;
cursor: pointer;
font-size: 25px;
color: rgba(238, 238, 238, 0.9);
top: 50%;
transform: translateY(-50%); }
.elementor-swiper-button svg {
fill: rgba(238, 238, 238, 0.9);
height: 1em;
width: 1em; }
.elementor-swiper-button-prev {
left: 10px; }
.elementor-swiper-button-next {
right: 10px; }
.elementor-swiper-button.swiper-button-disabled {
opacity: 0.3; }
.swiper-container-cube .elementor-swiper-button {
transform: translate3d(0, -50%, 1px); }
/* Preloader */
.swiper-lazy-preloader {
width: 42px;
height: 42px;
position: absolute;
left: 50%;
top: 50%;
margin-left: -21px;
margin-top: -21px;
z-index: 10;
transform-origin: 50%;
animation: swiper-preloader-spin 1s steps(12, end) infinite; }
.swiper-lazy-preloader:after {
display: block;
content: "";
width: 100%;
height: 100%;
background-size: 100%;
background: url("data:image/svg+xml;charset=utf-8,%3Csvg%20viewBox%3D'0%200%20120%20120'%20xmlns%3D'http%3A%2F%2Fwww.w3.org%2F2000%2Fsvg'%20xmlns%3Axlink%3D'http%3A%2F%2Fwww.w3.org%2F1999%2Fxlink'%3E%3Cdefs%3E%3Cline%20id%3D'l'%20x1%3D'60'%20x2%3D'60'%20y1%3D'7'%20y2%3D'27'%20stroke%3D'%236c6c6c'%20stroke-width%3D'11'%20stroke-linecap%3D'round'%2F%3E%3C%2Fdefs%3E%3Cg%3E%3Cuse%20xlink%3Ahref%3D'%23l'%20opacity%3D'.27'%2F%3E%3Cuse%20xlink%3Ahref%3D'%23l'%20opacity%3D'.27'%20transform%3D'rotate(30%2060%2C60)'%2F%3E%3Cuse%20xlink%3Ahref%3D'%23l'%20opacity%3D'.27'%20transform%3D'rotate(60%2060%2C60)'%2F%3E%3Cuse%20xlink%3Ahref%3D'%23l'%20opacity%3D'.27'%20transform%3D'rotate(90%2060%2C60)'%2F%3E%3Cuse%20xlink%3Ahref%3D'%23l'%20opacity%3D'.27'%20transform%3D'rotate(120%2060%2C60)'%2F%3E%3Cuse%20xlink%3Ahref%3D'%23l'%20opacity%3D'.27'%20transform%3D'rotate(150%2060%2C60)'%2F%3E%3Cuse%20xlink%3Ahref%3D'%23l'%20opacity%3D'.37'%20transform%3D'rotate(180%2060%2C60)'%2F%3E%3Cuse%20xlink%3Ahref%3D'%23l'%20opacity%3D'.46'%20transform%3D'rotate(210%2060%2C60)'%2F%3E%3Cuse%20xlink%3Ahref%3D'%23l'%20opacity%3D'.56'%20transform%3D'rotate(240%2060%2C60)'%2F%3E%3Cuse%20xlink%3Ahref%3D'%23l'%20opacity%3D'.66'%20transform%3D'rotate(270%2060%2C60)'%2F%3E%3Cuse%20xlink%3Ahref%3D'%23l'%20opacity%3D'.75'%20transform%3D'rotate(300%2060%2C60)'%2F%3E%3Cuse%20xlink%3Ahref%3D'%23l'%20opacity%3D'.85'%20transform%3D'rotate(330%2060%2C60)'%2F%3E%3C%2Fg%3E%3C%2Fsvg%3E") no-repeat 50%; }
.swiper-lazy-preloader-white:after {
background-image: url("data:image/svg+xml;charset=utf-8,%3Csvg%20viewBox%3D'0%200%20120%20120'%20xmlns%3D'http%3A%2F%2Fwww.w3.org%2F2000%2Fsvg'%20xmlns%3Axlink%3D'http%3A%2F%2Fwww.w3.org%2F1999%2Fxlink'%3E%3Cdefs%3E%3Cline%20id%3D'l'%20x1%3D'60'%20x2%3D'60'%20y1%3D'7'%20y2%3D'27'%20stroke%3D'%23fff'%20stroke-width%3D'11'%20stroke-linecap%3D'round'%2F%3E%3C%2Fdefs%3E%3Cg%3E%3Cuse%20xlink%3Ahref%3D'%23l'%20opacity%3D'.27'%2F%3E%3Cuse%20xlink%3Ahref%3D'%23l'%20opacity%3D'.27'%20transform%3D'rotate(30%2060%2C60)'%2F%3E%3Cuse%20xlink%3Ahref%3D'%23l'%20opacity%3D'.27'%20transform%3D'rotate(60%2060%2C60)'%2F%3E%3Cuse%20xlink%3Ahref%3D'%23l'%20opacity%3D'.27'%20transform%3D'rotate(90%2060%2C60)'%2F%3E%3Cuse%20xlink%3Ahref%3D'%23l'%20opacity%3D'.27'%20transform%3D'rotate(120%2060%2C60)'%2F%3E%3Cuse%20xlink%3Ahref%3D'%23l'%20opacity%3D'.27'%20transform%3D'rotate(150%2060%2C60)'%2F%3E%3Cuse%20xlink%3Ahref%3D'%23l'%20opacity%3D'.37'%20transform%3D'rotate(180%2060%2C60)'%2F%3E%3Cuse%20xlink%3Ahref%3D'%23l'%20opacity%3D'.46'%20transform%3D'rotate(210%2060%2C60)'%2F%3E%3Cuse%20xlink%3Ahref%3D'%23l'%20opacity%3D'.56'%20transform%3D'rotate(240%2060%2C60)'%2F%3E%3Cuse%20xlink%3Ahref%3D'%23l'%20opacity%3D'.66'%20transform%3D'rotate(270%2060%2C60)'%2F%3E%3Cuse%20xlink%3Ahref%3D'%23l'%20opacity%3D'.75'%20transform%3D'rotate(300%2060%2C60)'%2F%3E%3Cuse%20xlink%3Ahref%3D'%23l'%20opacity%3D'.85'%20transform%3D'rotate(330%2060%2C60)'%2F%3E%3C%2Fg%3E%3C%2Fsvg%3E"); }
@keyframes swiper-preloader-spin {
100% {
transform: rotate(360deg); } }
.elementor-lightbox {
--lightbox-ui-color: rgba(238, 238, 238, 0.9);
--lightbox-ui-color-hover: #fff;
--lightbox-text-color: var(--lightbox-ui-color);
--lightbox-header-icons-size: 20px;
--lightbox-navigation-icons-size: 25px; }
.elementor-lightbox .dialog-header {
display: none; }
.elementor-lightbox .dialog-widget-content {
background: none;
box-shadow: none;
width: 100%;
height: 100%; }
.elementor-lightbox .dialog-message {
animation-duration: .3s; }
.elementor-lightbox .dialog-message:not(.elementor-fit-aspect-ratio) {
height: 100%; }
.elementor-lightbox .dialog-message.dialog-lightbox-message {
padding: 0; }
.elementor-lightbox .dialog-lightbox-close-button {
cursor: pointer;
position: absolute;
font-size: var(--lightbox-header-icons-size);
left: 0.75em;
margin-top: 13px;
padding: .25em;
z-index: 2;
line-height: 1;
display: flex; }
.elementor-lightbox .dialog-lightbox-close-button svg {
height: 1em;
width: 1em; }
.elementor-lightbox .dialog-lightbox-close-button,
.elementor-lightbox .elementor-swiper-button {
color: var(--lightbox-ui-color);
transition: all 0.3s;
opacity: 1; }
.elementor-lightbox .dialog-lightbox-close-button svg,
.elementor-lightbox .elementor-swiper-button svg {
fill: var(--lightbox-ui-color); }
.elementor-lightbox .dialog-lightbox-close-button:hover,
.elementor-lightbox .elementor-swiper-button:hover {
color: var(--lightbox-ui-color-hover); }
.elementor-lightbox .dialog-lightbox-close-button:hover svg,
.elementor-lightbox .elementor-swiper-button:hover svg {
fill: var(--lightbox-ui-color-hover); }
.elementor-lightbox .swiper-container {
height: 100%; }
.elementor-lightbox .elementor-lightbox-item {
display: flex;
align-items: center;
justify-content: center;
position: relative;
padding: 70px;
box-sizing: border-box;
height: 100%;
margin: auto; }
@media (max-width: ELEMENTOR_SCREEN_MOBILE_MAX) {
.elementor-lightbox .elementor-lightbox-item {
padding: 70px 0; } }
.elementor-lightbox .elementor-lightbox-image {
max-height: 100%;
user-select: none; }
.elementor-lightbox .elementor-lightbox-image, .elementor-lightbox .elementor-lightbox-image:hover {
opacity: 1;
filter: none;
border: none; }
.elementor-lightbox .elementor-lightbox-image, .elementor-lightbox .elementor-video-container {
box-shadow: 0 0 30px rgba(0, 0, 0, 0.3), 0 0 8px -5px rgba(0, 0, 0, 0.3);
border-radius: 2px; }
.elementor-lightbox .elementor-video-container {
position: absolute;
top: 50%;
left: 50%;
transform: translate(-50%, -50%); }
@media (min-width: ELEMENTOR_SCREEN_TABLET_NEXT) {
.elementor-lightbox .elementor-video-container {
width: 75%; } }
@media (max-width: ELEMENTOR_SCREEN_TABLET_MAX) {
.elementor-lightbox .elementor-video-container {
width: 100%; } }
@media (min-width: 768px) and (max-width: 1024px) {
.elementor-lightbox .elementor-aspect-ratio-916 .elementor-video-container {
width: 70%; } }
.elementor-lightbox .elementor-swiper-button:focus {
outline-width: 1px; }
.elementor-lightbox .elementor-swiper-button-prev, .elementor-lightbox .elementor-swiper-button-next {
height: 100%;
display: flex;
align-items: center;
width: 15%;
justify-content: center;
font-size: var(--lightbox-navigation-icons-size); }
.elementor-lightbox .elementor-swiper-button-prev {
left: 0; }
.elementor-lightbox .elementor-swiper-button-next {
right: 0; }
@media (max-width: ELEMENTOR_SCREEN_MOBILE_MAX) {
.elementor-lightbox .elementor-swiper-button:focus {
outline: none; }
.elementor-lightbox .elementor-swiper-button-prev, .elementor-lightbox .elementor-swiper-button-next {
width: 20%; }
.elementor-lightbox .elementor-swiper-button-prev i, .elementor-lightbox .elementor-swiper-button-next i {
padding: 10px;
background-color: rgba(0, 0, 0, 0.5); }
.elementor-lightbox .elementor-swiper-button-prev {
left: 0;
justify-content: flex-start; }
.elementor-lightbox .elementor-swiper-button-next {
right: 0;
justify-content: flex-end; } }
.elementor-slideshow__counter {
color: currentColor;
font-size: .75em;
width: max-content; }
.elementor-slideshow__header, .elementor-slideshow__footer {
position: absolute;
left: 0;
width: 100%;
padding: 15px 20px;
transition: 0.3s; }
.elementor-slideshow__footer {
color: var(--lightbox-text-color); }
.elementor-slideshow__header {
color: var(--lightbox-ui-color);
display: flex;
flex-direction: row-reverse;
font-size: var(--lightbox-header-icons-size);
padding-right: 1em;
padding-left: 2.6em;
top: 0;
align-items: center;
z-index: 10; }
.elementor-slideshow__header > i,
.elementor-slideshow__header > svg {
cursor: pointer;
padding: .25em;
margin: 0 .35em; }
.elementor-slideshow__header > i {
font-size: inherit; }
.elementor-slideshow__header > i:hover {
color: var(--lightbox-ui-color-hover); }
.elementor-slideshow__header > svg {
box-sizing: content-box;
fill: var(--lightbox-ui-color);
height: 1em;
width: 1em; }
.elementor-slideshow__header > svg:hover {
fill: var(--lightbox-ui-color-hover); }
.elementor-slideshow__header .elementor-slideshow__counter {
margin-left: auto; }
.elementor-slideshow__header .elementor-icon-share {
z-index: 5; }
.elementor-slideshow__share-menu {
background-color: rgba(0, 0, 0, 0);
width: 0;
height: 0;
position: absolute;
overflow: hidden;
transition: background-color 400ms; }
.elementor-slideshow__share-menu .elementor-slideshow__share-links a {
color: #2C2C2C; }
.elementor-slideshow__share-links {
display: block;
position: absolute;
min-width: 200px;
left: 2.8em;
top: 3em;
background-color: #fff;
border-radius: 3px;
padding: 14px 20px;
transform: scale(0);
opacity: 0;
transform-origin: 90% 10%;
transition: all 250ms 100ms;
box-shadow: 0 4px 15px rgba(0, 0, 0, 0.3); }
.elementor-slideshow__share-links a {
text-align: right;
color: #55595c;
font-size: 12px;
line-height: 2.5;
display: block;
opacity: 0;
transition: opacity 500ms 100ms; }
.elementor-slideshow__share-links a:hover {
color: #000; }
.elementor-slideshow__share-links a i,
.elementor-slideshow__share-links a svg {
margin-left: 0.75em; }
.elementor-slideshow__share-links a i {
font-size: 1.25em; }
.elementor-slideshow__share-links a svg {
height: 1.25em;
width: 1.25em; }
.elementor-slideshow__share-links:before {
content: '';
display: block;
position: absolute;
top: 1px;
left: 0.5em;
border: .45em solid;
border-color: transparent transparent #fff transparent;
transform: translateY(-100%) scaleX(0.7); }
.elementor-slideshow__footer {
bottom: 0;
z-index: 5;
position: fixed; }
.elementor-slideshow__title, .elementor-slideshow__description {
margin: 0; }
.elementor-slideshow__title {
font-size: 16px;
font-weight: bold; }
.elementor-slideshow__description {
font-size: 14px; }
.elementor-slideshow--ui-hidden .elementor-slideshow__header, .elementor-slideshow--ui-hidden .elementor-slideshow__footer {
opacity: 0;
pointer-events: none; }
.elementor-slideshow--ui-hidden .elementor-swiper-button-prev, .elementor-slideshow--ui-hidden .elementor-swiper-button-next {
opacity: 0; }
.elementor-slideshow--fullscreen-mode .elementor-video-container {
width: 100%; }
.elementor-slideshow--zoom-mode .elementor-slideshow__header, .elementor-slideshow--zoom-mode .elementor-slideshow__footer {
background-color: rgba(0, 0, 0, 0.5); }
.elementor-slideshow--zoom-mode .elementor-swiper-button-prev, .elementor-slideshow--zoom-mode .elementor-swiper-button-next {
opacity: 0;
pointer-events: none; }
.elementor-slideshow--share-mode .elementor-slideshow__share-menu {
top: 0;
left: 0;
width: 100vw;
height: 100vh;
opacity: 1;
cursor: default;
background-color: rgba(0, 0, 0, 0.5); }
.elementor-slideshow--share-mode .elementor-slideshow__share-links {
transform: scale(1); }
.elementor-slideshow--share-mode .elementor-slideshow__share-links, .elementor-slideshow--share-mode .elementor-slideshow__share-links a {
opacity: 1; }
.elementor-slideshow--share-mode .elementor-slideshow__share-links .eicon-twitter {
color: #1DA1F2; }
.elementor-slideshow--share-mode .elementor-slideshow__share-links .eicon-facebook {
color: #3b5998; }
.elementor-slideshow--share-mode .elementor-slideshow__share-links .eicon-pinterest {
color: #bd081c; }
.elementor-slideshow--share-mode .elementor-slideshow__share-links .eicon-download-bold {
color: #a4afb7; }
.elementor-slideshow--share-mode .elementor-slideshow__share-links .e-eicon-twitter {
fill: #1DA1F2; }
.elementor-slideshow--share-mode .elementor-slideshow__share-links .e-eicon-facebook {
fill: #3b5998; }
.elementor-slideshow--share-mode .elementor-slideshow__share-links .e-eicon-pinterest {
fill: #bd081c; }
.elementor-slideshow--share-mode .elementor-slideshow__share-links .e-eicon-download-bold {
fill: #a4afb7; }
.elementor-slideshow--share-mode .eicon-share-arrow {
z-index: 2; }
.animated {
animation-duration: 1.25s; }
.animated.animated-slow {
animation-duration: 2s; }
.animated.animated-fast {
animation-duration: .75s; }
.animated.infinite {
animation-iteration-count: infinite; }
.animated.reverse {
animation-direction: reverse;
animation-fill-mode: forwards; }
@media (prefers-reduced-motion: reduce) {
.animated {
animation: none; } }
.elementor-shape {
overflow: hidden;
position: absolute;
left: 0;
width: 100%;
line-height: 0;
direction: ltr;
/*
* @TODO: The `z-index: -1` rules below are temporary fixes for Chrome 85 issue.
* It will be removed in a future version of Chrome.
*/ }
.elementor-shape-top {
top: -1px; }
.elementor-shape-top:not([data-negative="false"]) svg {
z-index: -1; }
.elementor-shape-bottom {
bottom: -1px; }
.elementor-shape-bottom:not([data-negative="true"]) svg {
z-index: -1; }
.elementor-shape[data-negative="false"].elementor-shape-bottom {
transform: rotate(180deg); }
.elementor-shape[data-negative="true"].elementor-shape-top {
transform: rotate(180deg); }
.elementor-shape svg {
display: block;
width: calc(100% + 1.3px);
position: relative;
left: 50%;
transform: translateX(-50%); }
.elementor-shape .elementor-shape-fill {
fill: #fff;
transform-origin: center;
transform: rotateY(0deg); }
#wp-admin-bar-elementor_edit_page > .ab-item::before {
content: "\e813";
font-family: eicons;
top: 3px;
font-size: 18px; }
#wp-admin-bar-elementor_edit_page .ab-submenu .ab-item {
display: flex;
width: 200px; }
#wp-admin-bar-elementor_edit_page .elementor-edit-link-title {
white-space: nowrap;
text-overflow: ellipsis;
overflow: hidden;
width: 100%; }
#wp-admin-bar-elementor_edit_page .elementor-edit-link-type {
background: #55595c;
font-size: 11px;
line-height: 9px;
margin-top: 6px;
padding: 4px 8px;
border-radius: 3px; }
#wp-admin-bar-elementor_inspector > .ab-item::before {
content: "\f348";
top: 2px; }
#wpadminbar * {
font-style: normal; }
.page-template-elementor_canvas.elementor-page:before {
display: none; }
.elementor-post__thumbnail__link {
transition: none; }
#left-area ul.elementor-icon-list-items,
.elementor .elementor-element ul.elementor-icon-list-items,
.elementor-edit-area .elementor-element ul.elementor-icon-list-items {
padding: 0; }
.e--ua-appleWebkit.rtl {
--flex-right: flex-start; }
.e--ua-appleWebkit .elementor-widget-social-icons.e-grid-align-right,
.e--ua-appleWebkit .elementor-share-buttons--align-right {
--justify-content: var(--flex-right, flex-end); }
.e--ua-appleWebkit .elementor-widget-social-icons.e-grid-align-center,
.e--ua-appleWebkit .elementor-share-buttons--align-center {
--justify-content: center; }
.e--ua-appleWebkit .elementor-grid-0.elementor-widget-social-icons.e-grid-align-right .elementor-grid, .e--ua-appleWebkit .elementor-grid-0.elementor-widget-social-icons.e-grid-align-center .elementor-grid, .e--ua-appleWebkit .elementor-grid-0.elementor-share-buttons--align-right .elementor-grid, .e--ua-appleWebkit .elementor-grid-0.elementor-share-buttons--align-center .elementor-grid, .e--ua-appleWebkit .elementor-grid-0.elementor-share-buttons--align-justify .elementor-grid {
width: auto;
display: flex;
flex-wrap: wrap;
justify-content: var(--justify-content, space-between);
margin-left: calc(-0.5 * var(--grid-column-gap));
margin-right: calc(-0.5 * var(--grid-column-gap)); }
.e--ua-appleWebkit .elementor-grid-0.elementor-widget-social-icons.e-grid-align-right .elementor-grid-item, .e--ua-appleWebkit .elementor-grid-0.elementor-widget-social-icons.e-grid-align-center .elementor-grid-item, .e--ua-appleWebkit .elementor-grid-0.elementor-share-buttons--align-right .elementor-grid-item, .e--ua-appleWebkit .elementor-grid-0.elementor-share-buttons--align-center .elementor-grid-item, .e--ua-appleWebkit .elementor-grid-0.elementor-share-buttons--align-justify .elementor-grid-item {
margin-left: calc(0.5 * var(--grid-column-gap));
margin-right: calc(0.5 * var(--grid-column-gap)); }
.e--ua-appleWebkit .elementor-grid-0.elementor-widget-social-icons.e-grid-align-left .elementor-grid, .e--ua-appleWebkit .elementor-grid-0.elementor-share-buttons--align-left .elementor-grid {
display: inline-block; }
.e--ua-appleWebkit .elementor-grid-0.elementor-widget-social-icons.e-grid-align-left .elementor-grid, .e--ua-appleWebkit .elementor-grid-0.elementor-widget-social-icons.e-grid-align-left .elementor-grid-item, .e--ua-appleWebkit .elementor-grid-0.elementor-share-buttons--align-left .elementor-grid, .e--ua-appleWebkit .elementor-grid-0.elementor-share-buttons--align-left .elementor-grid-item {
margin-left: 0;
margin-right: 0; }
@media (max-width: ELEMENTOR_SCREEN_TABLET_MAX) {
.e--ua-appleWebkit .elementor-widget-social-icons.e-grid-align-tablet-right,
.e--ua-appleWebkit .elementor-share-buttons-tablet--align-right {
--justify-content: var(--flex-right, flex-end); }
.e--ua-appleWebkit .elementor-widget-social-icons.e-grid-align-tablet-center,
.e--ua-appleWebkit .elementor-share-buttons-tablet--align-center {
--justify-content: center; }
.e--ua-appleWebkit .elementor-grid-0.elementor-widget-social-icons.e-grid-align-tablet-right .elementor-grid, .e--ua-appleWebkit .elementor-grid-0.elementor-widget-social-icons.e-grid-align-tablet-center .elementor-grid, .e--ua-appleWebkit .elementor-grid-0.elementor-share-buttons--align-tablet-right .elementor-grid, .e--ua-appleWebkit .elementor-grid-0.elementor-share-buttons--align-tablet-center .elementor-grid, .e--ua-appleWebkit .elementor-grid-0.elementor-share-buttons--align-tablet-justify .elementor-grid {
width: auto;
display: flex;
flex-wrap: wrap;
justify-content: var(--justify-content, space-between);
margin-left: calc(-0.5 * var(--grid-column-gap));
margin-right: calc(-0.5 * var(--grid-column-gap)); }
.e--ua-appleWebkit .elementor-grid-0.elementor-widget-social-icons.e-grid-align-tablet-right .elementor-grid-item, .e--ua-appleWebkit .elementor-grid-0.elementor-widget-social-icons.e-grid-align-tablet-center .elementor-grid-item, .e--ua-appleWebkit .elementor-grid-0.elementor-share-buttons--align-tablet-right .elementor-grid-item, .e--ua-appleWebkit .elementor-grid-0.elementor-share-buttons--align-tablet-center .elementor-grid-item, .e--ua-appleWebkit .elementor-grid-0.elementor-share-buttons--align-tablet-justify .elementor-grid-item {
margin-left: calc(0.5 * var(--grid-column-gap));
margin-right: calc(0.5 * var(--grid-column-gap)); }
.e--ua-appleWebkit .elementor-grid-0.elementor-widget-social-icons.e-grid-align-tablet-left .elementor-grid, .e--ua-appleWebkit .elementor-grid-0.elementor-share-buttons-tablet--align-left .elementor-grid {
display: inline-block; }
.e--ua-appleWebkit .elementor-grid-0.elementor-widget-social-icons.e-grid-align-tablet-left .elementor-grid, .e--ua-appleWebkit .elementor-grid-0.elementor-widget-social-icons.e-grid-align-tablet-left .elementor-grid-item, .e--ua-appleWebkit .elementor-grid-0.elementor-share-buttons-tablet--align-left .elementor-grid, .e--ua-appleWebkit .elementor-grid-0.elementor-share-buttons-tablet--align-left .elementor-grid-item {
margin-left: 0;
margin-right: 0; } }
@media (max-width: ELEMENTOR_SCREEN_MOBILE_MAX) {
.e--ua-appleWebkit .elementor-widget-social-icons.e-grid-align-mobile-right,
.e--ua-appleWebkit .elementor-share-buttons-mobile--align-right {
--justify-content: var(--flex-right, flex-end); }
.e--ua-appleWebkit .elementor-widget-social-icons.e-grid-align-mobile-center,
.e--ua-appleWebkit .elementor-share-buttons-mobile--align-center {
--justify-content: center; }
.e--ua-appleWebkit .elementor-grid-0.elementor-widget-social-icons.e-grid-align-mobile-right .elementor-grid, .e--ua-appleWebkit .elementor-grid-0.elementor-widget-social-icons.e-grid-align-mobile-center .elementor-grid, .e--ua-appleWebkit .elementor-grid-0.elementor-share-buttons--align-mobile-right .elementor-grid, .e--ua-appleWebkit .elementor-grid-0.elementor-share-buttons--align-mobile-center .elementor-grid, .e--ua-appleWebkit .elementor-grid-0.elementor-share-buttons--align-mobile-justify .elementor-grid {
width: auto;
display: flex;
flex-wrap: wrap;
justify-content: var(--justify-content, space-between);
margin-left: calc(-0.5 * var(--grid-column-gap));
margin-right: calc(-0.5 * var(--grid-column-gap)); }
.e--ua-appleWebkit .elementor-grid-0.elementor-widget-social-icons.e-grid-align-mobile-right .elementor-grid-item, .e--ua-appleWebkit .elementor-grid-0.elementor-widget-social-icons.e-grid-align-mobile-center .elementor-grid-item, .e--ua-appleWebkit .elementor-grid-0.elementor-share-buttons--align-mobile-right .elementor-grid-item, .e--ua-appleWebkit .elementor-grid-0.elementor-share-buttons--align-mobile-center .elementor-grid-item, .e--ua-appleWebkit .elementor-grid-0.elementor-share-buttons--align-mobile-justify .elementor-grid-item {
margin-left: calc(0.5 * var(--grid-column-gap));
margin-right: calc(0.5 * var(--grid-column-gap)); }
.e--ua-appleWebkit .elementor-grid-0.elementor-widget-social-icons.e-grid-align-mobile-left .elementor-grid, .e--ua-appleWebkit .elementor-grid-0.elementor-share-buttons-mobile--align-left .elementor-grid {
display: inline-block; }
.e--ua-appleWebkit .elementor-grid-0.elementor-widget-social-icons.e-grid-align-mobile-left .elementor-grid, .e--ua-appleWebkit .elementor-grid-0.elementor-widget-social-icons.e-grid-align-mobile-left .elementor-grid-item, .e--ua-appleWebkit .elementor-grid-0.elementor-share-buttons-mobile--align-left .elementor-grid, .e--ua-appleWebkit .elementor-grid-0.elementor-share-buttons-mobile--align-left .elementor-grid-item {
margin-left: 0;
margin-right: 0; } }
@media (max-width: ELEMENTOR_SCREEN_MOBILE_MAX) {
.elementor .elementor-hidden-mobile {
display: none; }
.elementor .elementor-hidden-phone {
display: none; } }
@media (min-width: ELEMENTOR_SCREEN_MOBILE_EXTRA_MIN) and (max-width: ELEMENTOR_SCREEN_MOBILE_EXTRA_MAX) {
.elementor .elementor-hidden-mobile_extra {
display: none; } }
@media (min-width: ELEMENTOR_SCREEN_TABLET_MIN) and (max-width: ELEMENTOR_SCREEN_TABLET_MAX) {
.elementor .elementor-hidden-tablet {
display: none; } }
@media (min-width: ELEMENTOR_SCREEN_TABLET_EXTRA_MIN) and (max-width: ELEMENTOR_SCREEN_TABLET_EXTRA_MAX) {
.elementor .elementor-hidden-tablet_extra {
display: none; } }
@media (min-width: ELEMENTOR_SCREEN_LAPTOP_MIN) and (max-width: ELEMENTOR_SCREEN_LAPTOP_MAX) {
.elementor .elementor-hidden-laptop {
display: none; } }
@media (min-width: ELEMENTOR_SCREEN_DESKTOP_MIN) and (max-width: ELEMENTOR_SCREEN_DESKTOP_MAX) {
.elementor .elementor-hidden-desktop {
display: none; } }
@media (min-width: ELEMENTOR_SCREEN_WIDESCREEN_MIN) {
.elementor .elementor-hidden-widescreen {
display: none; } }
.elementor-widget-text-path {
font-size: 20px;
text-align: var(--alignment, right); }
.elementor-widget-text-path svg {
width: var(--width);
max-width: 100%;
height: auto;
overflow: visible;
word-spacing: var(--word-spacing);
transform: rotate(var(--rotate, 0)) scaleX(var(--scale-x, 1)) scaleY(var(--scale-y, 1)); }
.elementor-widget-text-path svg path {
vector-effect: non-scaling-stroke;
/* Prevent stroke size scaling when resizing the SVG. */
fill: var(--path-fill, transparent);
stroke: var(--stroke-color, transparent);
stroke-width: var(--stroke-width, 1px);
transition: var(--stroke-transition) stroke, var(--stroke-transition) fill; }
.elementor-widget-text-path svg:hover path {
--path-fill: var( --path-fill-hover );
--stroke-color: var( --stroke-color-hover );
--stroke-width: var( --stroke-width-hover ); }
.elementor-widget-text-path svg text {
--fill: var( --text-color );
fill: var(--fill);
direction: var(--direction, rtl);
transition: var(--transition) stroke, var(--transition) stroke-width, var(--transition) fill; }
.elementor-widget-text-path svg text:hover {
--color: var( --text-color-hover, var( --text-color ) );
--fill: var( --color );
color: var(--color); }
.elementor-accordion {
text-align: right; }
.elementor-accordion .elementor-accordion-item {
border: 1px solid #D4D4D4; }
.elementor-accordion .elementor-accordion-item + .elementor-accordion-item {
border-top: none; }
.elementor-accordion .elementor-tab-title {
margin: 0;
padding: 15px 20px;
font-weight: bold;
line-height: 1;
cursor: pointer;
outline: none; }
.elementor-accordion .elementor-tab-title .elementor-accordion-icon {
display: inline-block;
width: 1.5em; }
.elementor-accordion .elementor-tab-title .elementor-accordion-icon svg {
width: 1em;
height: 1em; }
.elementor-accordion .elementor-tab-title .elementor-accordion-icon.elementor-accordion-icon-right {
float: right;
text-align: right; }
.elementor-accordion .elementor-tab-title .elementor-accordion-icon.elementor-accordion-icon-left {
float: left;
text-align: left; }
.elementor-accordion .elementor-tab-title .elementor-accordion-icon .elementor-accordion-icon-closed {
display: block; }
.elementor-accordion .elementor-tab-title .elementor-accordion-icon .elementor-accordion-icon-opened {
display: none; }
.elementor-accordion .elementor-tab-title.elementor-active .elementor-accordion-icon-closed {
display: none; }
.elementor-accordion .elementor-tab-title.elementor-active .elementor-accordion-icon-opened {
display: block; }
.elementor-accordion .elementor-tab-content {
display: none;
padding: 15px 20px;
border-top: 1px solid #D4D4D4; }
@media (max-width: ELEMENTOR_SCREEN_MOBILE_MAX) {
.elementor-accordion .elementor-tab-title {
padding: 12px 15px; }
.elementor-accordion .elementor-tab-title .elementor-accordion-icon {
width: 1.2em; }
.elementor-accordion .elementor-tab-content {
padding: 7px 15px; } }
.elementor-alert {
padding: 15px;
border-left: 5px solid transparent;
position: relative;
text-align: right; }
.elementor-alert .elementor-alert-title {
display: block;
font-weight: bold; }
.elementor-alert .elementor-alert-description {
font-size: 13px; }
.elementor-alert button.elementor-alert-dismiss {
position: absolute;
left: 10px;
top: 10px;
padding: 3px;
font-size: 20px;
line-height: 1;
background: transparent;
color: inherit;
border: none;
cursor: pointer; }
.elementor-alert.elementor-alert-info {
color: #31708f;
background-color: #d9edf7;
border-color: #bcdff1; }
.elementor-alert.elementor-alert-success {
color: #3c763d;
background-color: #dff0d8;
border-color: #cae6be; }
.elementor-alert.elementor-alert-warning {
color: #8a6d3b;
background-color: #fcf8e3;
border-color: #f9f0c3; }
.elementor-alert.elementor-alert-danger {
color: #a94442;
background-color: #f2dede;
border-color: #e8c4c4; }
@media (max-width: ELEMENTOR_SCREEN_MOBILE_MAX) {
.elementor-alert {
padding: 10px; }
.elementor-alert button.elementor-alert-dismiss {
right: 7px;
top: 7px; } }
.elementor-counter .elementor-counter-number-wrapper {
display: flex;
font-size: 69px;
font-weight: 600;
line-height: 1; }
.elementor-counter .elementor-counter-number-prefix, .elementor-counter .elementor-counter-number-suffix {
flex-grow: 1;
white-space: pre-wrap; }
.elementor-counter .elementor-counter-number-prefix {
text-align: left; }
.elementor-counter .elementor-counter-number-suffix {
text-align: right; }
.elementor-counter .elementor-counter-title {
text-align: center;
font-size: 19px;
font-weight: 400;
line-height: 2.5; }
.elementor-widget-divider {
--divider-border-style: none;
--divider-border-width: 1px;
--divider-color: #2C2C2C;
--divider-icon-size: 20px;
--divider-element-spacing: 10px;
--divider-pattern-height: 24px;
--divider-pattern-size: 20px;
--divider-pattern-url: none;
--divider-pattern-repeat: repeat-x; }
.elementor-widget-divider .elementor-divider {
display: flex; }
.elementor-widget-divider .elementor-divider__text {
font-size: 15px;
line-height: 1;
max-width: 95%; }
.elementor-widget-divider .elementor-divider__element {
margin: 0 var(--divider-element-spacing);
flex-shrink: 0; }
.elementor-widget-divider .elementor-icon {
font-size: var(--divider-icon-size); }
.elementor-widget-divider .elementor-divider-separator {
display: flex;
margin: 0;
direction: ltr; }
.elementor-widget-divider--view-line_text .elementor-divider-separator, .elementor-widget-divider--view-line_icon .elementor-divider-separator {
align-items: center; }
.elementor-widget-divider--view-line_text .elementor-divider-separator:before, .elementor-widget-divider--view-line_text .elementor-divider-separator:after, .elementor-widget-divider--view-line_icon .elementor-divider-separator:before, .elementor-widget-divider--view-line_icon .elementor-divider-separator:after {
display: block;
content: '';
border-bottom: 0;
flex-grow: 1;
border-top: var(--divider-border-width) var(--divider-border-style) var(--divider-color); }
.elementor-widget-divider--element-align-left .elementor-divider .elementor-divider-separator > .elementor-divider__svg:first-of-type {
flex-grow: 0;
flex-shrink: 100; }
.elementor-widget-divider--element-align-left .elementor-divider-separator:before {
content: none; }
.elementor-widget-divider--element-align-left .elementor-divider__element {
margin-left: 0; }
.elementor-widget-divider--element-align-right .elementor-divider .elementor-divider-separator > .elementor-divider__svg:last-of-type {
flex-grow: 0;
flex-shrink: 100; }
.elementor-widget-divider--element-align-right .elementor-divider-separator:after {
content: none; }
.elementor-widget-divider--element-align-right .elementor-divider__element {
margin-right: 0; }
.elementor-widget-divider:not(.elementor-widget-divider--view-line_text):not(.elementor-widget-divider--view-line_icon) .elementor-divider-separator {
border-top: var(--divider-border-width) var(--divider-border-style) var(--divider-color); }
.elementor-widget-divider--separator-type-pattern {
--divider-border-style: none; }
.elementor-widget-divider--separator-type-pattern.elementor-widget-divider--view-line .elementor-divider-separator,
.elementor-widget-divider--separator-type-pattern:not([class*=elementor-widget-divider--view]) .elementor-divider-separator,
.elementor-widget-divider--separator-type-pattern:not(.elementor-widget-divider--view-line) .elementor-divider-separator:before,
.elementor-widget-divider--separator-type-pattern:not(.elementor-widget-divider--view-line) .elementor-divider-separator:after {
width: 100%;
min-height: var(--divider-pattern-height);
-webkit-mask-size: var(--divider-pattern-size) 100%;
mask-size: var(--divider-pattern-size) 100%;
-webkit-mask-repeat: var(--divider-pattern-repeat);
mask-repeat: var(--divider-pattern-repeat);
background-color: var(--divider-color);
-webkit-mask-image: var(--divider-pattern-url);
mask-image: var(--divider-pattern-url); }
.elementor-widget-divider--no-spacing {
--divider-pattern-size: auto; }
.elementor-widget-divider--bg-round {
--divider-pattern-repeat: round; }
.rtl .elementor-widget-divider .elementor-divider__text {
direction: rtl; }
.elementor-image-gallery .gallery-item {
display: inline-block;
text-align: center;
vertical-align: top;
width: 100%;
max-width: 100%;
margin: 0 auto; }
.elementor-image-gallery .gallery-item img {
margin: 0 auto; }
.elementor-image-gallery .gallery-item .gallery-caption {
margin: 0; }
.elementor-image-gallery figure img {
display: block; }
.elementor-image-gallery figure figcaption {
width: 100%; }
.gallery-spacing-custom .elementor-image-gallery .gallery-icon {
padding: 0; }
@media (min-width: ELEMENTOR_SCREEN_MOBILE_NEXT) {
.elementor-image-gallery .gallery-columns-2 .gallery-item {
max-width: 50%; }
.elementor-image-gallery .gallery-columns-3 .gallery-item {
max-width: 33.33%; }
.elementor-image-gallery .gallery-columns-4 .gallery-item {
max-width: 25%; }
.elementor-image-gallery .gallery-columns-5 .gallery-item {
max-width: 20%; }
.elementor-image-gallery .gallery-columns-6 .gallery-item {
max-width: 16.666%; }
.elementor-image-gallery .gallery-columns-7 .gallery-item {
max-width: 14.28%; }
.elementor-image-gallery .gallery-columns-8 .gallery-item {
max-width: 12.5%; }
.elementor-image-gallery .gallery-columns-9 .gallery-item {
max-width: 11.11%; }
.elementor-image-gallery .gallery-columns-10 .gallery-item {
max-width: 10%; } }
@media (min-width: 480px) and (max-width: ELEMENTOR_SCREEN_MOBILE_MAX) {
.elementor-image-gallery .gallery.gallery-columns-2 .gallery-item, .elementor-image-gallery .gallery.gallery-columns-3 .gallery-item, .elementor-image-gallery .gallery.gallery-columns-4 .gallery-item, .elementor-image-gallery .gallery.gallery-columns-5 .gallery-item, .elementor-image-gallery .gallery.gallery-columns-6 .gallery-item, .elementor-image-gallery .gallery.gallery-columns-7 .gallery-item, .elementor-image-gallery .gallery.gallery-columns-8 .gallery-item, .elementor-image-gallery .gallery.gallery-columns-9 .gallery-item, .elementor-image-gallery .gallery.gallery-columns-10 .gallery-item {
max-width: 50%; } }
@media (max-width: 479px) {
.elementor-image-gallery .gallery.gallery-columns-2 .gallery-item, .elementor-image-gallery .gallery.gallery-columns-3 .gallery-item, .elementor-image-gallery .gallery.gallery-columns-4 .gallery-item, .elementor-image-gallery .gallery.gallery-columns-5 .gallery-item, .elementor-image-gallery .gallery.gallery-columns-6 .gallery-item, .elementor-image-gallery .gallery.gallery-columns-7 .gallery-item, .elementor-image-gallery .gallery.gallery-columns-8 .gallery-item, .elementor-image-gallery .gallery.gallery-columns-9 .gallery-item, .elementor-image-gallery .gallery.gallery-columns-10 .gallery-item {
max-width: 100%; } }
.elementor-widget-google_maps .elementor-widget-container {
overflow: hidden; }
.elementor-widget-google_maps iframe {
height: 300px; }
.elementor-heading-title {
padding: 0;
margin: 0;
line-height: 1; }
.elementor-widget-heading .elementor-heading-title[class*="elementor-size-"] > a {
color: inherit;
font-size: inherit;
line-height: inherit; }
.elementor-widget-heading .elementor-heading-title.elementor-size-small {
font-size: 15px; }
.elementor-widget-heading .elementor-heading-title.elementor-size-medium {
font-size: 19px; }
.elementor-widget-heading .elementor-heading-title.elementor-size-large {
font-size: 29px; }
.elementor-widget-heading .elementor-heading-title.elementor-size-xl {
font-size: 39px; }
.elementor-widget-heading .elementor-heading-title.elementor-size-xxl {
font-size: 59px; }
.elementor-widget-icon-box .elementor-icon-box-wrapper {
display: block;
text-align: center; }
.elementor-widget-icon-box .elementor-icon-box-icon {
margin-bottom: var(--icon-box-icon-margin, 15px);
margin-right: auto;
margin-left: auto; }
@media (min-width: ELEMENTOR_SCREEN_MOBILE_NEXT) {
.elementor-widget-icon-box.elementor-vertical-align-top .elementor-icon-box-wrapper {
align-items: flex-start; }
.elementor-widget-icon-box.elementor-vertical-align-middle .elementor-icon-box-wrapper {
align-items: center; }
.elementor-widget-icon-box.elementor-vertical-align-bottom .elementor-icon-box-wrapper {
align-items: flex-end; } }
.elementor-widget-icon-box.elementor-position-left .elementor-icon-box-wrapper, .elementor-widget-icon-box.elementor-position-right .elementor-icon-box-wrapper {
display: flex; }
.elementor-widget-icon-box.elementor-position-left .elementor-icon-box-icon, .elementor-widget-icon-box.elementor-position-right .elementor-icon-box-icon {
display: inline-flex;
flex: 0 0 auto; }
.elementor-widget-icon-box.elementor-position-right .elementor-icon-box-wrapper {
text-align: left;
flex-direction: row; }
.elementor-widget-icon-box.elementor-position-right .elementor-icon-box-icon {
margin-left: var(--icon-box-icon-margin, 15px);
margin-right: 0;
margin-bottom: unset; }
.elementor-widget-icon-box.elementor-position-left .elementor-icon-box-wrapper {
text-align: right;
flex-direction: row-reverse; }
.elementor-widget-icon-box.elementor-position-left .elementor-icon-box-icon {
margin-right: var(--icon-box-icon-margin, 15px);
margin-left: 0;
margin-bottom: unset; }
.elementor-widget-icon-box.elementor-position-top .elementor-icon-box-wrapper {
display: block;
text-align: center;
flex-direction: unset; }
.elementor-widget-icon-box.elementor-position-top .elementor-icon-box-icon {
margin-bottom: var(--icon-box-icon-margin, 15px);
margin-right: auto;
margin-left: auto; }
@media (min-width: ELEMENTOR_SCREEN_WIDESCREEN_MIN) {
.elementor-widget-icon-box.elementor-widescreen-position-left .elementor-icon-box-wrapper, .elementor-widget-icon-box.elementor-widescreen-position-right .elementor-icon-box-wrapper {
display: flex; }
.elementor-widget-icon-box.elementor-widescreen-position-left .elementor-icon-box-icon, .elementor-widget-icon-box.elementor-widescreen-position-right .elementor-icon-box-icon {
display: inline-flex;
flex: 0 0 auto; }
.elementor-widget-icon-box.elementor-widescreen-position-right .elementor-icon-box-wrapper {
text-align: left;
flex-direction: row; }
.elementor-widget-icon-box.elementor-widescreen-position-right .elementor-icon-box-icon {
margin-left: var(--icon-box-icon-margin, 15px);
margin-right: 0;
margin-bottom: unset; }
.elementor-widget-icon-box.elementor-widescreen-position-left .elementor-icon-box-wrapper {
text-align: right;
flex-direction: row-reverse; }
.elementor-widget-icon-box.elementor-widescreen-position-left .elementor-icon-box-icon {
margin-right: var(--icon-box-icon-margin, 15px);
margin-left: 0;
margin-bottom: unset; }
.elementor-widget-icon-box.elementor-widescreen-position-top .elementor-icon-box-wrapper {
display: block;
text-align: center;
flex-direction: unset; }
.elementor-widget-icon-box.elementor-widescreen-position-top .elementor-icon-box-icon {
margin-bottom: var(--icon-box-icon-margin, 15px);
margin-right: auto;
margin-left: auto; } }
@media (max-width: ELEMENTOR_SCREEN_LAPTOP_MAX) {
.elementor-widget-icon-box.elementor-laptop-position-left .elementor-icon-box-wrapper, .elementor-widget-icon-box.elementor-laptop-position-right .elementor-icon-box-wrapper {
display: flex; }
.elementor-widget-icon-box.elementor-laptop-position-left .elementor-icon-box-icon, .elementor-widget-icon-box.elementor-laptop-position-right .elementor-icon-box-icon {
display: inline-flex;
flex: 0 0 auto; }
.elementor-widget-icon-box.elementor-laptop-position-right .elementor-icon-box-wrapper {
text-align: left;
flex-direction: row; }
.elementor-widget-icon-box.elementor-laptop-position-right .elementor-icon-box-icon {
margin-left: var(--icon-box-icon-margin, 15px);
margin-right: 0;
margin-bottom: unset; }
.elementor-widget-icon-box.elementor-laptop-position-left .elementor-icon-box-wrapper {
text-align: right;
flex-direction: row-reverse; }
.elementor-widget-icon-box.elementor-laptop-position-left .elementor-icon-box-icon {
margin-right: var(--icon-box-icon-margin, 15px);
margin-left: 0;
margin-bottom: unset; }
.elementor-widget-icon-box.elementor-laptop-position-top .elementor-icon-box-wrapper {
display: block;
text-align: center;
flex-direction: unset; }
.elementor-widget-icon-box.elementor-laptop-position-top .elementor-icon-box-icon {
margin-bottom: var(--icon-box-icon-margin, 15px);
margin-right: auto;
margin-left: auto; } }
@media (max-width: ELEMENTOR_SCREEN_TABLET_EXTRA_MAX) {
.elementor-widget-icon-box.elementor-tablet_extra-position-left .elementor-icon-box-wrapper, .elementor-widget-icon-box.elementor-tablet_extra-position-right .elementor-icon-box-wrapper {
display: flex; }
.elementor-widget-icon-box.elementor-tablet_extra-position-left .elementor-icon-box-icon, .elementor-widget-icon-box.elementor-tablet_extra-position-right .elementor-icon-box-icon {
display: inline-flex;
flex: 0 0 auto; }
.elementor-widget-icon-box.elementor-tablet_extra-position-right .elementor-icon-box-wrapper {
text-align: left;
flex-direction: row; }
.elementor-widget-icon-box.elementor-tablet_extra-position-right .elementor-icon-box-icon {
margin-left: var(--icon-box-icon-margin, 15px);
margin-right: 0;
margin-bottom: unset; }
.elementor-widget-icon-box.elementor-tablet_extra-position-left .elementor-icon-box-wrapper {
text-align: right;
flex-direction: row-reverse; }
.elementor-widget-icon-box.elementor-tablet_extra-position-left .elementor-icon-box-icon {
margin-right: var(--icon-box-icon-margin, 15px);
margin-left: 0;
margin-bottom: unset; }
.elementor-widget-icon-box.elementor-tablet_extra-position-top .elementor-icon-box-wrapper {
display: block;
text-align: center;
flex-direction: unset; }
.elementor-widget-icon-box.elementor-tablet_extra-position-top .elementor-icon-box-icon {
margin-bottom: var(--icon-box-icon-margin, 15px);
margin-right: auto;
margin-left: auto; } }
@media (max-width: ELEMENTOR_SCREEN_TABLET_MAX) {
.elementor-widget-icon-box.elementor-tablet-position-left .elementor-icon-box-wrapper, .elementor-widget-icon-box.elementor-tablet-position-right .elementor-icon-box-wrapper {
display: flex; }
.elementor-widget-icon-box.elementor-tablet-position-left .elementor-icon-box-icon, .elementor-widget-icon-box.elementor-tablet-position-right .elementor-icon-box-icon {
display: inline-flex;
flex: 0 0 auto; }
.elementor-widget-icon-box.elementor-tablet-position-right .elementor-icon-box-wrapper {
text-align: left;
flex-direction: row; }
.elementor-widget-icon-box.elementor-tablet-position-right .elementor-icon-box-icon {
margin-left: var(--icon-box-icon-margin, 15px);
margin-right: 0;
margin-bottom: unset; }
.elementor-widget-icon-box.elementor-tablet-position-left .elementor-icon-box-wrapper {
text-align: right;
flex-direction: row-reverse; }
.elementor-widget-icon-box.elementor-tablet-position-left .elementor-icon-box-icon {
margin-right: var(--icon-box-icon-margin, 15px);
margin-left: 0;
margin-bottom: unset; }
.elementor-widget-icon-box.elementor-tablet-position-top .elementor-icon-box-wrapper {
display: block;
text-align: center;
flex-direction: unset; }
.elementor-widget-icon-box.elementor-tablet-position-top .elementor-icon-box-icon {
margin-bottom: var(--icon-box-icon-margin, 15px);
margin-right: auto;
margin-left: auto; } }
@media (max-width: ELEMENTOR_SCREEN_MOBILE_EXTRA_MAX) {
.elementor-widget-icon-box.elementor-mobile_extra-position-left .elementor-icon-box-wrapper, .elementor-widget-icon-box.elementor-mobile_extra-position-right .elementor-icon-box-wrapper {
display: flex; }
.elementor-widget-icon-box.elementor-mobile_extra-position-left .elementor-icon-box-icon, .elementor-widget-icon-box.elementor-mobile_extra-position-right .elementor-icon-box-icon {
display: inline-flex;
flex: 0 0 auto; }
.elementor-widget-icon-box.elementor-mobile_extra-position-right .elementor-icon-box-wrapper {
text-align: left;
flex-direction: row; }
.elementor-widget-icon-box.elementor-mobile_extra-position-right .elementor-icon-box-icon {
margin-left: var(--icon-box-icon-margin, 15px);
margin-right: 0;
margin-bottom: unset; }
.elementor-widget-icon-box.elementor-mobile_extra-position-left .elementor-icon-box-wrapper {
text-align: right;
flex-direction: row-reverse; }
.elementor-widget-icon-box.elementor-mobile_extra-position-left .elementor-icon-box-icon {
margin-right: var(--icon-box-icon-margin, 15px);
margin-left: 0;
margin-bottom: unset; }
.elementor-widget-icon-box.elementor-mobile_extra-position-top .elementor-icon-box-wrapper {
display: block;
text-align: center;
flex-direction: unset; }
.elementor-widget-icon-box.elementor-mobile_extra-position-top .elementor-icon-box-icon {
margin-bottom: var(--icon-box-icon-margin, 15px);
margin-right: auto;
margin-left: auto; } }
@media (max-width: ELEMENTOR_SCREEN_MOBILE_MAX) {
.elementor-widget-icon-box.elementor-mobile-position-left .elementor-icon-box-wrapper, .elementor-widget-icon-box.elementor-mobile-position-right .elementor-icon-box-wrapper {
display: flex; }
.elementor-widget-icon-box.elementor-mobile-position-left .elementor-icon-box-icon, .elementor-widget-icon-box.elementor-mobile-position-right .elementor-icon-box-icon {
display: inline-flex;
flex: 0 0 auto; }
.elementor-widget-icon-box.elementor-mobile-position-right .elementor-icon-box-wrapper {
text-align: left;
flex-direction: row; }
.elementor-widget-icon-box.elementor-mobile-position-right .elementor-icon-box-icon {
margin-left: var(--icon-box-icon-margin, 15px);
margin-right: 0;
margin-bottom: unset; }
.elementor-widget-icon-box.elementor-mobile-position-left .elementor-icon-box-wrapper {
text-align: right;
flex-direction: row-reverse; }
.elementor-widget-icon-box.elementor-mobile-position-left .elementor-icon-box-icon {
margin-right: var(--icon-box-icon-margin, 15px);
margin-left: 0;
margin-bottom: unset; }
.elementor-widget-icon-box.elementor-mobile-position-top .elementor-icon-box-wrapper {
display: block;
text-align: center;
flex-direction: unset; }
.elementor-widget-icon-box.elementor-mobile-position-top .elementor-icon-box-icon {
margin-bottom: var(--icon-box-icon-margin, 15px);
margin-right: auto;
margin-left: auto; }
.elementor-widget-icon-box.elementor-position-left .elementor-icon-box-icon, .elementor-widget-icon-box.elementor-position-right .elementor-icon-box-icon {
display: block;
flex: unset; } }
.elementor-widget-icon-box .elementor-icon-box-title a {
color: inherit; }
.elementor-widget-icon-box .elementor-icon-box-content {
flex-grow: 1; }
.elementor-widget-icon-box .elementor-icon-box-description {
margin: 0; }
.elementor-widget.elementor-icon-list--layout-inline .elementor-widget-container {
overflow: hidden; }
.elementor-widget .elementor-icon-list-items.elementor-inline-items {
margin-right: -8px;
margin-left: -8px; }
.elementor-widget .elementor-icon-list-items.elementor-inline-items .elementor-icon-list-item {
margin-right: 8px;
margin-left: 8px; }
.elementor-widget .elementor-icon-list-items.elementor-inline-items .elementor-icon-list-item:after {
width: auto;
left: auto;
right: auto;
position: relative;
height: 100%;
border-top: 0;
border-bottom: 0;
border-right: 0;
border-left-width: 1px;
border-style: solid;
left: -8px; }
.elementor-widget .elementor-icon-list-items {
list-style-type: none;
margin: 0;
padding: 0; }
.elementor-widget .elementor-icon-list-item {
margin: 0;
padding: 0;
position: relative; }
.elementor-widget .elementor-icon-list-item:after {
position: absolute;
bottom: 0;
width: 100%; }
.elementor-widget .elementor-icon-list-item, .elementor-widget .elementor-icon-list-item a {
display: flex;
align-items: center;
font-size: inherit; }
.elementor-widget .elementor-icon-list-icon + .elementor-icon-list-text {
align-self: center;
padding-right: 5px; }
.elementor-widget .elementor-icon-list-icon {
display: flex; }
.elementor-widget .elementor-icon-list-icon svg {
width: var(--e-icon-list-icon-size, 1em);
height: var(--e-icon-list-icon-size, 1em); }
.elementor-widget .elementor-icon-list-icon i {
width: 1.25em;
font-size: var(--e-icon-list-icon-size); }
.elementor-widget.elementor-widget-icon-list .elementor-icon-list-icon {
text-align: var(--e-icon-list-icon-align); }
.elementor-widget.elementor-widget-icon-list .elementor-icon-list-icon svg {
margin: var(--e-icon-list-icon-margin, 0 calc(var(--e-icon-list-icon-size, 1em) * 0.25) 0 0); }
.elementor-widget.elementor-list-item-link-full_width a {
width: 100%; }
.elementor-widget.elementor-align-center .elementor-icon-list-item, .elementor-widget.elementor-align-center .elementor-icon-list-item a {
justify-content: center; }
.elementor-widget.elementor-align-center .elementor-icon-list-item:after {
margin: auto; }
.elementor-widget.elementor-align-center .elementor-inline-items {
justify-content: center; }
.elementor-widget.elementor-align-left .elementor-icon-list-item, .elementor-widget.elementor-align-left .elementor-icon-list-item a {
justify-content: flex-end;
text-align: left; }
.elementor-widget.elementor-align-left .elementor-inline-items {
justify-content: flex-end; }
.elementor-widget.elementor-align-right .elementor-icon-list-item, .elementor-widget.elementor-align-right .elementor-icon-list-item a {
justify-content: flex-start;
text-align: right; }
.elementor-widget.elementor-align-right .elementor-icon-list-items {
justify-content: flex-start; }
.elementor-widget:not(.elementor-align-right) .elementor-icon-list-item:after {
right: 0; }
.elementor-widget:not(.elementor-align-left) .elementor-icon-list-item:after {
left: 0; }
@media (max-width: ELEMENTOR_SCREEN_TABLET_MAX) {
.elementor-widget.elementor-tablet-align-center .elementor-icon-list-items {
justify-content: center; }
.elementor-widget.elementor-tablet-align-center .elementor-icon-list-item, .elementor-widget.elementor-tablet-align-center .elementor-icon-list-item a {
justify-content: center; }
.elementor-widget.elementor-tablet-align-center .elementor-icon-list-item:after {
margin: auto; }
.elementor-widget.elementor-tablet-align-left .elementor-icon-list-items {
justify-content: flex-end; }
.elementor-widget.elementor-tablet-align-left .elementor-icon-list-item, .elementor-widget.elementor-tablet-align-left .elementor-icon-list-item a {
justify-content: flex-end;
text-align: left; }
.elementor-widget.elementor-tablet-align-right .elementor-icon-list-items {
justify-content: flex-start; }
.elementor-widget.elementor-tablet-align-right .elementor-icon-list-item, .elementor-widget.elementor-tablet-align-right .elementor-icon-list-item a {
justify-content: flex-start;
text-align: right; }
.elementor-widget:not(.elementor-tablet-align-right) .elementor-icon-list-item:after {
right: 0; }
.elementor-widget:not(.elementor-tablet-align-left) .elementor-icon-list-item:after {
left: 0; } }
@media (max-width: ELEMENTOR_SCREEN_MOBILE_MAX) {
.elementor-widget.elementor-mobile-align-center .elementor-icon-list-items {
justify-content: center; }
.elementor-widget.elementor-mobile-align-center .elementor-icon-list-item, .elementor-widget.elementor-mobile-align-center .elementor-icon-list-item a {
justify-content: center; }
.elementor-widget.elementor-mobile-align-center .elementor-icon-list-item:after {
margin: auto; }
.elementor-widget.elementor-mobile-align-left .elementor-icon-list-items {
justify-content: flex-end; }
.elementor-widget.elementor-mobile-align-left .elementor-icon-list-item, .elementor-widget.elementor-mobile-align-left .elementor-icon-list-item a {
justify-content: flex-end;
text-align: left; }
.elementor-widget.elementor-mobile-align-right .elementor-icon-list-items {
justify-content: flex-start; }
.elementor-widget.elementor-mobile-align-right .elementor-icon-list-item, .elementor-widget.elementor-mobile-align-right .elementor-icon-list-item a {
justify-content: flex-start;
text-align: right; }
.elementor-widget:not(.elementor-mobile-align-right) .elementor-icon-list-item:after {
right: 0; }
.elementor-widget:not(.elementor-mobile-align-left) .elementor-icon-list-item:after {
left: 0; } }
.elementor-widget-image {
text-align: center; }
.elementor-widget-image a {
display: inline-block; }
.elementor-widget-image a img[src$=".svg"] {
width: 48px; }
.elementor-widget-image img {
vertical-align: middle;
display: inline-block; }
.elementor-widget-image-box .elementor-image-box-content {
width: 100%; }
@media (min-width: ELEMENTOR_SCREEN_MOBILE_NEXT) {
.elementor-widget-image-box.elementor-position-left .elementor-image-box-wrapper, .elementor-widget-image-box.elementor-position-right .elementor-image-box-wrapper {
display: flex; }
.elementor-widget-image-box.elementor-position-right .elementor-image-box-wrapper {
text-align: left;
flex-direction: row; }
.elementor-widget-image-box.elementor-position-left .elementor-image-box-wrapper {
text-align: right;
flex-direction: row-reverse; }
.elementor-widget-image-box.elementor-position-top .elementor-image-box-img {
margin: auto; }
.elementor-widget-image-box.elementor-vertical-align-top .elementor-image-box-wrapper {
align-items: flex-start; }
.elementor-widget-image-box.elementor-vertical-align-middle .elementor-image-box-wrapper {
align-items: center; }
.elementor-widget-image-box.elementor-vertical-align-bottom .elementor-image-box-wrapper {
align-items: flex-end; } }
@media (max-width: ELEMENTOR_SCREEN_MOBILE_MAX) {
.elementor-widget-image-box .elementor-image-box-img {
margin-left: auto !important;
margin-right: auto !important;
margin-bottom: 15px; } }
.elementor-widget-image-box .elementor-image-box-img {
display: inline-block; }
.elementor-widget-image-box .elementor-image-box-title a {
color: inherit; }
.elementor-widget-image-box .elementor-image-box-wrapper {
text-align: center; }
.elementor-widget-image-box .elementor-image-box-description {
margin: 0; }
.elementor-widget-image-carousel .swiper-container {
position: static; }
.elementor-widget-image-carousel .swiper-container .swiper-slide figure {
line-height: inherit; }
.elementor-widget-image-carousel .swiper-slide {
text-align: center; }
.elementor-image-carousel-wrapper:not(.swiper-container-initialized) .swiper-slide {
max-width: calc(100% / var(--e-image-carousel-slides-to-show, 3)); }
body.elementor-page .elementor-widget-menu-anchor {
margin-bottom: 0; }
.elementor-widget-progress {
text-align: right; }
.elementor-progress-wrapper {
position: relative;
background-color: #eeeeee;
color: #ffffff;
height: 100%;
border-radius: 2px; }
.elementor-progress-bar {
display: flex;
background-color: #818a91;
width: 0;
font-size: 11px;
height: 30px;
line-height: 30px;
border-radius: 2px;
transition: width 1s ease-in-out; }
.elementor-progress-text {
flex-grow: 1;
white-space: nowrap;
text-overflow: ellipsis;
overflow: hidden;
padding-right: 15px; }
.elementor-progress-percentage {
padding-left: 15px; }
.elementor-widget-progress .elementor-progress-wrapper.progress-info .elementor-progress-bar {
background-color: #5bc0de; }
.elementor-widget-progress .elementor-progress-wrapper.progress-success .elementor-progress-bar {
background-color: #5cb85c; }
.elementor-widget-progress .elementor-progress-wrapper.progress-warning .elementor-progress-bar {
background-color: #f0ad4e; }
.elementor-widget-progress .elementor-progress-wrapper.progress-danger .elementor-progress-bar {
background-color: #d9534f; }
.elementor-progress .elementor-title {
display: block; }
@media (max-width: ELEMENTOR_SCREEN_MOBILE_MAX) {
.elementor-progress-text {
padding-right: 10px; } }
.elementor-widget-social-icons {
/*TODO: This Grid-0 needs to be removed after PRO is Updated */ }
.elementor-widget-social-icons.elementor-grid-0 .elementor-widget-container, .elementor-widget-social-icons.elementor-grid-tablet-0 .elementor-widget-container, .elementor-widget-social-icons.elementor-grid-mobile-0 .elementor-widget-container {
line-height: 1;
font-size: 0; }
.elementor-widget-social-icons:not(.elementor-grid-0):not(.elementor-grid-tablet-0):not(.elementor-grid-mobile-0) .elementor-grid {
display: inline-grid; }
.elementor-widget-social-icons .elementor-grid {
grid-column-gap: var(--grid-column-gap, 5px);
grid-row-gap: var(--grid-row-gap, 5px);
grid-template-columns: var(--grid-template-columns);
justify-content: var(--justify-content, center);
justify-items: var(--justify-content, center); }
.elementor-icon.elementor-social-icon {
font-size: var(--icon-size, 25px);
line-height: var(--icon-size, 25px);
width: calc(var(--icon-size, 25px) + (2 * var(--icon-padding, 0.5em)));
height: calc(var(--icon-size, 25px) + (2 * var(--icon-padding, 0.5em))); }
.elementor-social-icon {
--e-social-icon-icon-color: #fff;
display: inline-flex;
background-color: #818a91;
align-items: center;
justify-content: center;
text-align: center;
cursor: pointer; }
.elementor-social-icon i {
color: var(--e-social-icon-icon-color); }
.elementor-social-icon svg {
fill: var(--e-social-icon-icon-color); }
.elementor-social-icon:last-child {
margin: 0; }
.elementor-social-icon:hover {
opacity: .9;
color: white; }
.elementor-social-icon-android {
background-color: #A4C639; }
.elementor-social-icon-apple {
background-color: #999999; }
.elementor-social-icon-behance {
background-color: #1769ff; }
.elementor-social-icon-bitbucket {
background-color: #205081; }
.elementor-social-icon-codepen {
background-color: #000000; }
.elementor-social-icon-delicious {
background-color: #3399ff; }
.elementor-social-icon-deviantart {
background-color: #05cc47; }
.elementor-social-icon-digg {
background-color: #005be2; }
.elementor-social-icon-dribbble {
background-color: #ea4c89; }
.elementor-social-icon-elementor {
background-color: #D30C5C; }
.elementor-social-icon-envelope {
background-color: #ea4335; }
.elementor-social-icon-facebook, .elementor-social-icon-facebook-f {
background-color: #3b5998; }
.elementor-social-icon-flickr {
background-color: #0063dc; }
.elementor-social-icon-foursquare {
background-color: #2d5be3; }
.elementor-social-icon-freecodecamp, .elementor-social-icon-free-code-camp {
background-color: #006400; }
.elementor-social-icon-github {
background-color: #333333; }
.elementor-social-icon-gitlab {
background-color: #e24329; }
.elementor-social-icon-globe {
background-color: #818a91; }
.elementor-social-icon-google-plus, .elementor-social-icon-google-plus-g {
background-color: #dd4b39; }
.elementor-social-icon-houzz {
background-color: #7ac142; }
.elementor-social-icon-instagram {
background-color: #262626; }
.elementor-social-icon-jsfiddle {
background-color: #487AA2; }
.elementor-social-icon-link {
background-color: #818a91; }
.elementor-social-icon-linkedin, .elementor-social-icon-linkedin-in {
background-color: #0077b5; }
.elementor-social-icon-medium {
background-color: #00ab6b; }
.elementor-social-icon-meetup {
background-color: #ec1c40; }
.elementor-social-icon-mixcloud {
background-color: #273a4b; }
.elementor-social-icon-odnoklassniki {
background-color: #F4731C; }
.elementor-social-icon-pinterest {
background-color: #bd081c; }
.elementor-social-icon-product-hunt {
background-color: #da552f; }
.elementor-social-icon-reddit {
background-color: #ff4500; }
.elementor-social-icon-rss {
background-color: #f26522; }
.elementor-social-icon-shopping-cart {
background-color: #4CAF50; }
.elementor-social-icon-skype {
background-color: #00AFF0; }
.elementor-social-icon-slideshare {
background-color: #0077b5; }
.elementor-social-icon-snapchat {
background-color: #fffc00; }
.elementor-social-icon-soundcloud {
background-color: #ff8800; }
.elementor-social-icon-spotify {
background-color: #2ebd59; }
.elementor-social-icon-stack-overflow {
background-color: #fe7a15; }
.elementor-social-icon-steam {
background-color: #00adee; }
.elementor-social-icon-stumbleupon {
background-color: #EB4924; }
.elementor-social-icon-telegram {
background-color: #2CA5E0; }
.elementor-social-icon-thumb-tack {
background-color: #1aa1d8; }
.elementor-social-icon-tripadvisor {
background-color: #589442; }
.elementor-social-icon-tumblr {
background-color: #35465c; }
.elementor-social-icon-twitch {
background-color: #6441A5; }
.elementor-social-icon-twitter {
background-color: #1DA1F2; }
.elementor-social-icon-viber {
background-color: #665cac; }
.elementor-social-icon-vimeo {
background-color: #1ab7ea; }
.elementor-social-icon-vk {
background-color: #45668e; }
.elementor-social-icon-weibo {
background-color: #DD2430; }
.elementor-social-icon-weixin {
background-color: #31A918; }
.elementor-social-icon-whatsapp {
background-color: #25d366; }
.elementor-social-icon-wordpress {
background-color: #21759b; }
.elementor-social-icon-xing {
background-color: #026466; }
.elementor-social-icon-yelp {
background-color: #af0606; }
.elementor-social-icon-youtube {
background-color: #cd201f; }
.elementor-social-icon-500px {
background-color: #0099e5; }
.elementor-shape-rounded .elementor-icon.elementor-social-icon {
border-radius: 10%; }
.elementor-shape-circle .elementor-icon.elementor-social-icon {
border-radius: 50%; }
.e-container.e-container--row .elementor-spacer-inner {
width: var(--spacer-size); }
.elementor-column .elementor-spacer-inner,
.e-container.e-container--column .elementor-spacer-inner {
height: var(--spacer-size); }
.elementor-star-rating {
color: #CCD6DF;
font-family: eicons;
display: inline-block; }
.elementor-star-rating i {
display: inline-block;
position: relative;
font-style: normal;
cursor: default; }
.elementor-star-rating i:before {
content: '\e934';
display: block;
font-size: inherit;
font-family: inherit;
position: absolute;
overflow: hidden;
color: #f0ad4e;
top: 0;
right: 0; }
.elementor-star-rating .elementor-star-empty:before {
content: none; }
.elementor-star-rating .elementor-star-1:before {
width: 10%; }
.elementor-star-rating .elementor-star-2:before {
width: 20%; }
.elementor-star-rating .elementor-star-3:before {
width: 30%; }
.elementor-star-rating .elementor-star-4:before {
width: 40%; }
.elementor-star-rating .elementor-star-5:before {
width: 50%; }
.elementor-star-rating .elementor-star-6:before {
width: 60%; }
.elementor-star-rating .elementor-star-7:before {
width: 70%; }
.elementor-star-rating .elementor-star-8:before {
width: 80%; }
.elementor-star-rating .elementor-star-9:before {
width: 90%; }
.elementor-star-rating__wrapper {
display: flex;
align-items: center; }
.elementor-star-rating__title {
margin-left: 10px; }
.elementor-star-rating--align-right .elementor-star-rating__wrapper {
text-align: right;
justify-content: flex-start; }
.elementor-star-rating--align-left .elementor-star-rating__wrapper {
text-align: left;
justify-content: flex-end; }
.elementor-star-rating--align-center .elementor-star-rating__wrapper {
text-align: center;
justify-content: center; }
.elementor-star-rating--align-justify .elementor-star-rating__title {
margin-left: auto; }
@media (max-width: ELEMENTOR_SCREEN_TABLET_MAX) {
.elementor-star-rating-tablet--align-right .elementor-star-rating__wrapper {
text-align: right;
justify-content: flex-start; }
.elementor-star-rating-tablet--align-left .elementor-star-rating__wrapper {
text-align: left;
justify-content: flex-end; }
.elementor-star-rating-tablet--align-center .elementor-star-rating__wrapper {
text-align: center;
justify-content: center; }
.elementor-star-rating-tablet--align-justify .elementor-star-rating__title {
margin-left: auto; } }
@media (max-width: ELEMENTOR_SCREEN_MOBILE_MAX) {
.elementor-star-rating-mobile--align-right .elementor-star-rating__wrapper {
text-align: right;
justify-content: flex-start; }
.elementor-star-rating-mobile--align-left .elementor-star-rating__wrapper {
text-align: left;
justify-content: flex-end; }
.elementor-star-rating-mobile--align-center .elementor-star-rating__wrapper {
text-align: center;
justify-content: center; }
.elementor-star-rating-mobile--align-justify .elementor-star-rating__title {
margin-left: auto; } }
.last-star {
letter-spacing: 0; }
.elementor--star-style-star_unicode .elementor-star-rating {
font-family: 'Arial', 'Helvetica', sans-serif; }
.elementor--star-style-star_unicode .elementor-star-rating i:not(.elementor-star-empty):before {
content: '\002605'; }
.elementor-widget-tabs.elementor-tabs-view-vertical .elementor-tabs-wrapper {
width: 25%;
flex-shrink: 0; }
.elementor-widget-tabs.elementor-tabs-view-vertical .elementor-tab-desktop-title.elementor-active {
border-left-style: none; }
.elementor-widget-tabs.elementor-tabs-view-vertical .elementor-tab-desktop-title.elementor-active:before, .elementor-widget-tabs.elementor-tabs-view-vertical .elementor-tab-desktop-title.elementor-active:after {
height: 999em;
width: 0;
left: 0;
border-left-style: solid; }
.elementor-widget-tabs.elementor-tabs-view-vertical .elementor-tab-desktop-title.elementor-active:before {
top: 0;
transform: translateY(-100%); }
.elementor-widget-tabs.elementor-tabs-view-vertical .elementor-tab-desktop-title.elementor-active:after {
top: 100%; }
.elementor-widget-tabs.elementor-tabs-view-horizontal .elementor-tab-desktop-title {
display: table-cell; }
.elementor-widget-tabs.elementor-tabs-view-horizontal .elementor-tab-desktop-title.elementor-active {
border-bottom-style: none; }
.elementor-widget-tabs.elementor-tabs-view-horizontal .elementor-tab-desktop-title.elementor-active:before, .elementor-widget-tabs.elementor-tabs-view-horizontal .elementor-tab-desktop-title.elementor-active:after {
bottom: 0;
height: 0;
width: 999em;
border-bottom-style: solid; }
.elementor-widget-tabs.elementor-tabs-view-horizontal .elementor-tab-desktop-title.elementor-active:before {
right: 100%; }
.elementor-widget-tabs.elementor-tabs-view-horizontal .elementor-tab-desktop-title.elementor-active:after {
left: 100%; }
.elementor-widget-tabs .elementor-tab-title,
.elementor-widget-tabs .elementor-tab-title:before,
.elementor-widget-tabs .elementor-tab-title:after,
.elementor-widget-tabs .elementor-tab-content,
.elementor-widget-tabs .elementor-tabs-content-wrapper {
border: 1px none #D4D4D4; }
.elementor-widget-tabs .elementor-tabs {
text-align: right; }
.elementor-widget-tabs .elementor-tabs-wrapper {
overflow: hidden; }
.elementor-widget-tabs .elementor-tab-title {
cursor: pointer;
outline: var(--focus-outline, none); }
.elementor-widget-tabs .elementor-tab-desktop-title {
position: relative;
padding: 20px 25px;
font-weight: bold;
line-height: 1;
border: solid transparent; }
.elementor-widget-tabs .elementor-tab-desktop-title.elementor-active {
border-color: #D4D4D4; }
.elementor-widget-tabs .elementor-tab-desktop-title.elementor-active:before, .elementor-widget-tabs .elementor-tab-desktop-title.elementor-active:after {
display: block;
content: '';
position: absolute; }
.elementor-widget-tabs .elementor-tab-mobile-title {
padding: 10px 10px;
cursor: pointer; }
.elementor-widget-tabs .elementor-tab-content {
padding: 20px;
display: none; }
@media (max-width: ELEMENTOR_SCREEN_MOBILE_MAX) {
.elementor-tabs .elementor-tab-title,
.elementor-tabs .elementor-tab-content {
border-style: solid;
border-bottom-style: none; }
.elementor-tabs .elementor-tabs-wrapper {
display: none; }
.elementor-tabs .elementor-tabs-content-wrapper {
border-bottom-style: solid; }
.elementor-tabs .elementor-tab-content {
padding: 10px; } }
@media (min-width: ELEMENTOR_SCREEN_MOBILE_NEXT) {
.elementor-widget-tabs.elementor-tabs-view-vertical .elementor-tabs {
display: flex; }
.elementor-widget-tabs.elementor-tabs-view-vertical .elementor-tabs-wrapper {
flex-direction: column; }
.elementor-widget-tabs.elementor-tabs-view-vertical .elementor-tabs-content-wrapper {
flex-grow: 1;
border-style: solid;
border-right-style: none; }
.elementor-widget-tabs.elementor-tabs-view-horizontal .elementor-tab-content {
border-style: solid;
border-top-style: none; }
.elementor-widget-tabs.elementor-tabs-alignment-center .elementor-tabs-wrapper, .elementor-widget-tabs.elementor-tabs-alignment-end .elementor-tabs-wrapper, .elementor-widget-tabs.elementor-tabs-alignment-stretch .elementor-tabs-wrapper {
display: flex; }
.elementor-widget-tabs.elementor-tabs-alignment-center .elementor-tabs-wrapper {
justify-content: center; }
.elementor-widget-tabs.elementor-tabs-alignment-end .elementor-tabs-wrapper {
justify-content: flex-end; }
.elementor-widget-tabs.elementor-tabs-alignment-stretch.elementor-tabs-view-horizontal .elementor-tab-title {
width: 100%; }
.elementor-widget-tabs.elementor-tabs-alignment-stretch.elementor-tabs-view-vertical .elementor-tab-title {
height: 100%; }
.elementor-tabs .elementor-tab-mobile-title {
display: none; } }
.elementor-testimonial-wrapper {
overflow: hidden;
text-align: center; }
.elementor-testimonial-wrapper .elementor-testimonial-content {
font-size: 1.3em;
margin-bottom: 20px; }
.elementor-testimonial-wrapper .elementor-testimonial-name {
line-height: 1.5;
display: block; }
.elementor-testimonial-wrapper .elementor-testimonial-job {
font-size: 0.85em;
display: block; }
.elementor-testimonial-wrapper .elementor-testimonial-meta {
width: 100%;
line-height: 1; }
.elementor-testimonial-wrapper .elementor-testimonial-meta-inner {
display: inline-block; }
.elementor-testimonial-wrapper .elementor-testimonial-meta .elementor-testimonial-details,
.elementor-testimonial-wrapper .elementor-testimonial-meta .elementor-testimonial-image {
display: table-cell;
vertical-align: middle; }
.elementor-testimonial-wrapper .elementor-testimonial-meta .elementor-testimonial-image img {
width: 60px;
height: 60px;
border-radius: 50%;
object-fit: cover;
max-width: none; }
.elementor-testimonial-wrapper .elementor-testimonial-meta.elementor-testimonial-image-position-aside .elementor-testimonial-image {
padding-left: 15px; }
.elementor-testimonial-wrapper .elementor-testimonial-meta.elementor-testimonial-image-position-aside .elementor-testimonial-details {
text-align: right; }
.elementor-testimonial-wrapper .elementor-testimonial-meta.elementor-testimonial-image-position-top .elementor-testimonial-details,
.elementor-testimonial-wrapper .elementor-testimonial-meta.elementor-testimonial-image-position-top .elementor-testimonial-image {
display: block; }
.elementor-testimonial-wrapper .elementor-testimonial-meta.elementor-testimonial-image-position-top .elementor-testimonial-image {
margin-bottom: 20px; }
.elementor-widget-text-editor.elementor-drop-cap-view-stacked .elementor-drop-cap {
background-color: #818a91;
color: #fff; }
.elementor-widget-text-editor.elementor-drop-cap-view-framed .elementor-drop-cap {
color: #818a91;
border: 3px solid;
background-color: transparent; }
.elementor-widget-text-editor:not(.elementor-drop-cap-view-default) .elementor-drop-cap {
margin-top: 8px; }
.elementor-widget-text-editor:not(.elementor-drop-cap-view-default) .elementor-drop-cap-letter {
width: 1em;
height: 1em; }
.elementor-widget-text-editor .elementor-drop-cap {
float: right;
text-align: center;
line-height: 1;
font-size: 50px; }
.elementor-widget-text-editor .elementor-drop-cap-letter {
display: inline-block; }
.elementor-toggle {
text-align: right; }
.elementor-toggle .elementor-tab-title {
font-weight: bold;
line-height: 1;
margin: 0;
padding: 15px;
border-bottom: 1px solid #D4D4D4;
cursor: pointer;
outline: none; }
.elementor-toggle .elementor-tab-title .elementor-toggle-icon {
display: inline-block;
width: 1em; }
.elementor-toggle .elementor-tab-title .elementor-toggle-icon svg {
margin-inline-start: -5px;
width: 1em;
height: 1em; }
.elementor-toggle .elementor-tab-title .elementor-toggle-icon.elementor-toggle-icon-right {
float: right;
text-align: right; }
.elementor-toggle .elementor-tab-title .elementor-toggle-icon.elementor-toggle-icon-left {
float: left;
text-align: left; }
.elementor-toggle .elementor-tab-title .elementor-toggle-icon .elementor-toggle-icon-closed {
display: block; }
.elementor-toggle .elementor-tab-title .elementor-toggle-icon .elementor-toggle-icon-opened {
display: none; }
.elementor-toggle .elementor-tab-title.elementor-active {
border-bottom: none; }
.elementor-toggle .elementor-tab-title.elementor-active .elementor-toggle-icon-closed {
display: none; }
.elementor-toggle .elementor-tab-title.elementor-active .elementor-toggle-icon-opened {
display: block; }
.elementor-toggle .elementor-tab-content {
padding: 15px;
border-bottom: 1px solid #D4D4D4;
display: none; }
@media (max-width: ELEMENTOR_SCREEN_MOBILE_MAX) {
.elementor-toggle .elementor-tab-title {
padding: 12px; }
.elementor-toggle .elementor-tab-content {
padding: 12px 10px; } }
.elementor-widget-video .elementor-widget-container {
overflow: hidden;
transform: translate3d(0, 0, 0); }
.elementor-widget-video .elementor-open-inline .elementor-custom-embed-image-overlay {
position: absolute;
top: 0;
left: 0;
width: 100%;
height: 100%;
background-size: cover;
background-position: 50%; }
.elementor-widget-video .elementor-custom-embed-image-overlay {
cursor: pointer;
text-align: center; }
.elementor-widget-video .elementor-custom-embed-image-overlay:hover .elementor-custom-embed-play i {
opacity: 1; }
.elementor-widget-video .elementor-custom-embed-image-overlay img {
display: block;
width: 100%; }
.elementor-widget-video .e-hosted-video .elementor-video {
object-fit: cover; }
{"translation-revision-date":"2024-11-04T15:59:18+00:00","generator":"WP-CLI\/2.12.0","source":"src\/Launch\/components\/QuestionIcon\/Icons\/shopping-cart.js","domain":"messages","locale_data":{"messages":{"":{"domain":"messages","lang":"ro_RO","plural-forms":"nplurals=2; plural=(n != 1);"},"Shopping Cart Icon":["Icon co\u0219 de cump\u0103r\u0103turi"]}}}(function () {
var table = (function (domGlobals) {
'use strict';
var global = tinymce.util.Tools.resolve('tinymce.PluginManager');
var noop = function () {
};
var compose = function (fa, fb) {
return function () {
var args = [];
for (var _i = 0; _i < arguments.length; _i++) {
args[_i] = arguments[_i];
}
return fa(fb.apply(null, args));
};
};
var constant = function (value) {
return function () {
return value;
};
};
var identity = function (x) {
return x;
};
function curry(fn) {
var initialArgs = [];
for (var _i = 1; _i < arguments.length; _i++) {
initialArgs[_i - 1] = arguments[_i];
}
return function () {
var restArgs = [];
for (var _i = 0; _i < arguments.length; _i++) {
restArgs[_i] = arguments[_i];
}
var all = initialArgs.concat(restArgs);
return fn.apply(null, all);
};
}
var not = function (f) {
return function () {
var args = [];
for (var _i = 0; _i < arguments.length; _i++) {
args[_i] = arguments[_i];
}
return !f.apply(null, args);
};
};
var die = function (msg) {
return function () {
throw new Error(msg);
};
};
var never = constant(false);
var always = constant(true);
var none = function () {
return NONE;
};
var NONE = function () {
var eq = function (o) {
return o.isNone();
};
var call = function (thunk) {
return thunk();
};
var id = function (n) {
return n;
};
var me = {
fold: function (n, s) {
return n();
},
is: never,
isSome: never,
isNone: always,
getOr: id,
getOrThunk: call,
getOrDie: function (msg) {
throw new Error(msg || 'error: getOrDie called on none.');
},
getOrNull: constant(null),
getOrUndefined: constant(undefined),
or: id,
orThunk: call,
map: none,
each: noop,
bind: none,
exists: never,
forall: always,
filter: none,
equals: eq,
equals_: eq,
toArray: function () {
return [];
},
toString: constant('none()')
};
if (Object.freeze) {
Object.freeze(me);
}
return me;
}();
var some = function (a) {
var constant_a = constant(a);
var self = function () {
return me;
};
var bind = function (f) {
return f(a);
};
var me = {
fold: function (n, s) {
return s(a);
},
is: function (v) {
return a === v;
},
isSome: always,
isNone: never,
getOr: constant_a,
getOrThunk: constant_a,
getOrDie: constant_a,
getOrNull: constant_a,
getOrUndefined: constant_a,
or: self,
orThunk: self,
map: function (f) {
return some(f(a));
},
each: function (f) {
f(a);
},
bind: bind,
exists: bind,
forall: bind,
filter: function (f) {
return f(a) ? me : NONE;
},
toArray: function () {
return [a];
},
toString: function () {
return 'some(' + a + ')';
},
equals: function (o) {
return o.is(a);
},
equals_: function (o, elementEq) {
return o.fold(never, function (b) {
return elementEq(a, b);
});
}
};
return me;
};
var from = function (value) {
return value === null || value === undefined ? NONE : some(value);
};
var Option = {
some: some,
none: none,
from: from
};
var typeOf = function (x) {
if (x === null) {
return 'null';
}
var t = typeof x;
if (t === 'object' && (Array.prototype.isPrototypeOf(x) || x.constructor && x.constructor.name === 'Array')) {
return 'array';
}
if (t === 'object' && (String.prototype.isPrototypeOf(x) || x.constructor && x.constructor.name === 'String')) {
return 'string';
}
return t;
};
var isType = function (type) {
return function (value) {
return typeOf(value) === type;
};
};
var isString = isType('string');
var isArray = isType('array');
var isBoolean = isType('boolean');
var isFunction = isType('function');
var isNumber = isType('number');
var nativeSlice = Array.prototype.slice;
var nativeIndexOf = Array.prototype.indexOf;
var nativePush = Array.prototype.push;
var rawIndexOf = function (ts, t) {
return nativeIndexOf.call(ts, t);
};
var contains = function (xs, x) {
return rawIndexOf(xs, x) > -1;
};
var exists = function (xs, pred) {
for (var i = 0, len = xs.length; i < len; i++) {
var x = xs[i];
if (pred(x, i)) {
return true;
}
}
return false;
};
var map = function (xs, f) {
var len = xs.length;
var r = new Array(len);
for (var i = 0; i < len; i++) {
var x = xs[i];
r[i] = f(x, i);
}
return r;
};
var each = function (xs, f) {
for (var i = 0, len = xs.length; i < len; i++) {
var x = xs[i];
f(x, i);
}
};
var eachr = function (xs, f) {
for (var i = xs.length - 1; i >= 0; i--) {
var x = xs[i];
f(x, i);
}
};
var filter = function (xs, pred) {
var r = [];
for (var i = 0, len = xs.length; i < len; i++) {
var x = xs[i];
if (pred(x, i)) {
r.push(x);
}
}
return r;
};
var foldr = function (xs, f, acc) {
eachr(xs, function (x) {
acc = f(acc, x);
});
return acc;
};
var foldl = function (xs, f, acc) {
each(xs, function (x) {
acc = f(acc, x);
});
return acc;
};
var find = function (xs, pred) {
for (var i = 0, len = xs.length; i < len; i++) {
var x = xs[i];
if (pred(x, i)) {
return Option.some(x);
}
}
return Option.none();
};
var findIndex = function (xs, pred) {
for (var i = 0, len = xs.length; i < len; i++) {
var x = xs[i];
if (pred(x, i)) {
return Option.some(i);
}
}
return Option.none();
};
var flatten = function (xs) {
var r = [];
for (var i = 0, len = xs.length; i < len; ++i) {
if (!isArray(xs[i])) {
throw new Error('Arr.flatten item ' + i + ' was not an array, input: ' + xs);
}
nativePush.apply(r, xs[i]);
}
return r;
};
var bind = function (xs, f) {
var output = map(xs, f);
return flatten(output);
};
var forall = function (xs, pred) {
for (var i = 0, len = xs.length; i < len; ++i) {
var x = xs[i];
if (pred(x, i) !== true) {
return false;
}
}
return true;
};
var reverse = function (xs) {
var r = nativeSlice.call(xs, 0);
r.reverse();
return r;
};
var last = function (xs) {
return xs.length === 0 ? Option.none() : Option.some(xs[xs.length - 1]);
};
var from$1 = isFunction(Array.from) ? Array.from : function (x) {
return nativeSlice.call(x);
};
var keys = Object.keys;
var each$1 = function (obj, f) {
var props = keys(obj);
for (var k = 0, len = props.length; k < len; k++) {
var i = props[k];
var x = obj[i];
f(x, i);
}
};
var map$1 = function (obj, f) {
return tupleMap(obj, function (x, i) {
return {
k: i,
v: f(x, i)
};
});
};
var tupleMap = function (obj, f) {
var r = {};
each$1(obj, function (x, i) {
var tuple = f(x, i);
r[tuple.k] = tuple.v;
});
return r;
};
var Immutable = function () {
var fields = [];
for (var _i = 0; _i < arguments.length; _i++) {
fields[_i] = arguments[_i];
}
return function () {
var values = [];
for (var _i = 0; _i < arguments.length; _i++) {
values[_i] = arguments[_i];
}
if (fields.length !== values.length) {
throw new Error('Wrong number of arguments to struct. Expected "[' + fields.length + ']", got ' + values.length + ' arguments');
}
var struct = {};
each(fields, function (name, i) {
struct[name] = constant(values[i]);
});
return struct;
};
};
var sort = function (arr) {
return arr.slice(0).sort();
};
var reqMessage = function (required, keys) {
throw new Error('All required keys (' + sort(required).join(', ') + ') were not specified. Specified keys were: ' + sort(keys).join(', ') + '.');
};
var unsuppMessage = function (unsupported) {
throw new Error('Unsupported keys for object: ' + sort(unsupported).join(', '));
};
var validateStrArr = function (label, array) {
if (!isArray(array)) {
throw new Error('The ' + label + ' fields must be an array. Was: ' + array + '.');
}
each(array, function (a) {
if (!isString(a)) {
throw new Error('The value ' + a + ' in the ' + label + ' fields was not a string.');
}
});
};
var invalidTypeMessage = function (incorrect, type) {
throw new Error('All values need to be of type: ' + type + '. Keys (' + sort(incorrect).join(', ') + ') were not.');
};
var checkDupes = function (everything) {
var sorted = sort(everything);
var dupe = find(sorted, function (s, i) {
return i < sorted.length - 1 && s === sorted[i + 1];
});
dupe.each(function (d) {
throw new Error('The field: ' + d + ' occurs more than once in the combined fields: [' + sorted.join(', ') + '].');
});
};
var MixedBag = function (required, optional) {
var everything = required.concat(optional);
if (everything.length === 0) {
throw new Error('You must specify at least one required or optional field.');
}
validateStrArr('required', required);
validateStrArr('optional', optional);
checkDupes(everything);
return function (obj) {
var keys$1 = keys(obj);
var allReqd = forall(required, function (req) {
return contains(keys$1, req);
});
if (!allReqd) {
reqMessage(required, keys$1);
}
var unsupported = filter(keys$1, function (key) {
return !contains(everything, key);
});
if (unsupported.length > 0) {
unsuppMessage(unsupported);
}
var r = {};
each(required, function (req) {
r[req] = constant(obj[req]);
});
each(optional, function (opt) {
r[opt] = constant(Object.prototype.hasOwnProperty.call(obj, opt) ? Option.some(obj[opt]) : Option.none());
});
return r;
};
};
var ATTRIBUTE = domGlobals.Node.ATTRIBUTE_NODE;
var CDATA_SECTION = domGlobals.Node.CDATA_SECTION_NODE;
var COMMENT = domGlobals.Node.COMMENT_NODE;
var DOCUMENT = domGlobals.Node.DOCUMENT_NODE;
var DOCUMENT_TYPE = domGlobals.Node.DOCUMENT_TYPE_NODE;
var DOCUMENT_FRAGMENT = domGlobals.Node.DOCUMENT_FRAGMENT_NODE;
var ELEMENT = domGlobals.Node.ELEMENT_NODE;
var TEXT = domGlobals.Node.TEXT_NODE;
var PROCESSING_INSTRUCTION = domGlobals.Node.PROCESSING_INSTRUCTION_NODE;
var ENTITY_REFERENCE = domGlobals.Node.ENTITY_REFERENCE_NODE;
var ENTITY = domGlobals.Node.ENTITY_NODE;
var NOTATION = domGlobals.Node.NOTATION_NODE;
var Global = typeof domGlobals.window !== 'undefined' ? domGlobals.window : Function('return this;')();
var path = function (parts, scope) {
var o = scope !== undefined && scope !== null ? scope : Global;
for (var i = 0; i < parts.length && o !== undefined && o !== null; ++i) {
o = o[parts[i]];
}
return o;
};
var resolve = function (p, scope) {
var parts = p.split('.');
return path(parts, scope);
};
var unsafe = function (name, scope) {
return resolve(name, scope);
};
var getOrDie = function (name, scope) {
var actual = unsafe(name, scope);
if (actual === undefined || actual === null) {
throw new Error(name + ' not available on this browser');
}
return actual;
};
var Global$1 = { getOrDie: getOrDie };
var name = function (element) {
var r = element.dom().nodeName;
return r.toLowerCase();
};
var type = function (element) {
return element.dom().nodeType;
};
var isType$1 = function (t) {
return function (element) {
return type(element) === t;
};
};
var isComment = function (element) {
return type(element) === COMMENT || name(element) === '#comment';
};
var isElement = isType$1(ELEMENT);
var isText = isType$1(TEXT);
var rawSet = function (dom, key, value) {
if (isString(value) || isBoolean(value) || isNumber(value)) {
dom.setAttribute(key, value + '');
} else {
domGlobals.console.error('Invalid call to Attr.set. Key ', key, ':: Value ', value, ':: Element ', dom);
throw new Error('Attribute value was not simple');
}
};
var set = function (element, key, value) {
rawSet(element.dom(), key, value);
};
var setAll = function (element, attrs) {
var dom = element.dom();
each$1(attrs, function (v, k) {
rawSet(dom, k, v);
});
};
var get = function (element, key) {
var v = element.dom().getAttribute(key);
return v === null ? undefined : v;
};
var has = function (element, key) {
var dom = element.dom();
return dom && dom.hasAttribute ? dom.hasAttribute(key) : false;
};
var remove = function (element, key) {
element.dom().removeAttribute(key);
};
var clone = function (element) {
return foldl(element.dom().attributes, function (acc, attr) {
acc[attr.name] = attr.value;
return acc;
}, {});
};
var checkRange = function (str, substr, start) {
if (substr === '') {
return true;
}
if (str.length < substr.length) {
return false;
}
var x = str.substr(start, start + substr.length);
return x === substr;
};
var contains$1 = function (str, substr) {
return str.indexOf(substr) !== -1;
};
var endsWith = function (str, suffix) {
return checkRange(str, suffix, str.length - suffix.length);
};
var trim = function (str) {
return str.replace(/^\s+|\s+$/g, '');
};
var isSupported = function (dom) {
return dom.style !== undefined && isFunction(dom.style.getPropertyValue);
};
var cached = function (f) {
var called = false;
var r;
return function () {
var args = [];
for (var _i = 0; _i < arguments.length; _i++) {
args[_i] = arguments[_i];
}
if (!called) {
called = true;
r = f.apply(null, args);
}
return r;
};
};
var fromHtml = function (html, scope) {
var doc = scope || domGlobals.document;
var div = doc.createElement('div');
div.innerHTML = html;
if (!div.hasChildNodes() || div.childNodes.length > 1) {
domGlobals.console.error('HTML does not have a single root node', html);
throw new Error('HTML must have a single root node');
}
return fromDom(div.childNodes[0]);
};
var fromTag = function (tag, scope) {
var doc = scope || domGlobals.document;
var node = doc.createElement(tag);
return fromDom(node);
};
var fromText = function (text, scope) {
var doc = scope || domGlobals.document;
var node = doc.createTextNode(text);
return fromDom(node);
};
var fromDom = function (node) {
if (node === null || node === undefined) {
throw new Error('Node cannot be null or undefined');
}
return { dom: constant(node) };
};
var fromPoint = function (docElm, x, y) {
var doc = docElm.dom();
return Option.from(doc.elementFromPoint(x, y)).map(fromDom);
};
var Element = {
fromHtml: fromHtml,
fromTag: fromTag,
fromText: fromText,
fromDom: fromDom,
fromPoint: fromPoint
};
var inBody = function (element) {
var dom = isText(element) ? element.dom().parentNode : element.dom();
return dom !== undefined && dom !== null && dom.ownerDocument.body.contains(dom);
};
var body = cached(function () {
return getBody(Element.fromDom(domGlobals.document));
});
var getBody = function (doc) {
var b = doc.dom().body;
if (b === null || b === undefined) {
throw new Error('Body is not available yet');
}
return Element.fromDom(b);
};
var internalSet = function (dom, property, value) {
if (!isString(value)) {
domGlobals.console.error('Invalid call to CSS.set. Property ', property, ':: Value ', value, ':: Element ', dom);
throw new Error('CSS value must be a string: ' + value);
}
if (isSupported(dom)) {
dom.style.setProperty(property, value);
}
};
var internalRemove = function (dom, property) {
if (isSupported(dom)) {
dom.style.removeProperty(property);
}
};
var set$1 = function (element, property, value) {
var dom = element.dom();
internalSet(dom, property, value);
};
var setAll$1 = function (element, css) {
var dom = element.dom();
each$1(css, function (v, k) {
internalSet(dom, k, v);
});
};
var get$1 = function (element, property) {
var dom = element.dom();
var styles = domGlobals.window.getComputedStyle(dom);
var r = styles.getPropertyValue(property);
var v = r === '' && !inBody(element) ? getUnsafeProperty(dom, property) : r;
return v === null ? undefined : v;
};
var getUnsafeProperty = function (dom, property) {
return isSupported(dom) ? dom.style.getPropertyValue(property) : '';
};
var getRaw = function (element, property) {
var dom = element.dom();
var raw = getUnsafeProperty(dom, property);
return Option.from(raw).filter(function (r) {
return r.length > 0;
});
};
var remove$1 = function (element, property) {
var dom = element.dom();
internalRemove(dom, property);
if (has(element, 'style') && trim(get(element, 'style')) === '') {
remove(element, 'style');
}
};
var copy = function (source, target) {
var sourceDom = source.dom();
var targetDom = target.dom();
if (isSupported(sourceDom) && isSupported(targetDom)) {
targetDom.style.cssText = sourceDom.style.cssText;
}
};
var node = function () {
var f = Global$1.getOrDie('Node');
return f;
};
var compareDocumentPosition = function (a, b, match) {
return (a.compareDocumentPosition(b) & match) !== 0;
};
var documentPositionPreceding = function (a, b) {
return compareDocumentPosition(a, b, node().DOCUMENT_POSITION_PRECEDING);
};
var documentPositionContainedBy = function (a, b) {
return compareDocumentPosition(a, b, node().DOCUMENT_POSITION_CONTAINED_BY);
};
var Node = {
documentPositionPreceding: documentPositionPreceding,
documentPositionContainedBy: documentPositionContainedBy
};
var firstMatch = function (regexes, s) {
for (var i = 0; i < regexes.length; i++) {
var x = regexes[i];
if (x.test(s)) {
return x;
}
}
return undefined;
};
var find$1 = function (regexes, agent) {
var r = firstMatch(regexes, agent);
if (!r) {
return {
major: 0,
minor: 0
};
}
var group = function (i) {
return Number(agent.replace(r, '$' + i));
};
return nu(group(1), group(2));
};
var detect = function (versionRegexes, agent) {
var cleanedAgent = String(agent).toLowerCase();
if (versionRegexes.length === 0) {
return unknown();
}
return find$1(versionRegexes, cleanedAgent);
};
var unknown = function () {
return nu(0, 0);
};
var nu = function (major, minor) {
return {
major: major,
minor: minor
};
};
var Version = {
nu: nu,
detect: detect,
unknown: unknown
};
var edge = 'Edge';
var chrome = 'Chrome';
var ie = 'IE';
var opera = 'Opera';
var firefox = 'Firefox';
var safari = 'Safari';
var isBrowser = function (name, current) {
return function () {
return current === name;
};
};
var unknown$1 = function () {
return nu$1({
current: undefined,
version: Version.unknown()
});
};
var nu$1 = function (info) {
var current = info.current;
var version = info.version;
return {
current: current,
version: version,
isEdge: isBrowser(edge, current),
isChrome: isBrowser(chrome, current),
isIE: isBrowser(ie, current),
isOpera: isBrowser(opera, current),
isFirefox: isBrowser(firefox, current),
isSafari: isBrowser(safari, current)
};
};
var Browser = {
unknown: unknown$1,
nu: nu$1,
edge: constant(edge),
chrome: constant(chrome),
ie: constant(ie),
opera: constant(opera),
firefox: constant(firefox),
safari: constant(safari)
};
var windows = 'Windows';
var ios = 'iOS';
var android = 'Android';
var linux = 'Linux';
var osx = 'OSX';
var solaris = 'Solaris';
var freebsd = 'FreeBSD';
var isOS = function (name, current) {
return function () {
return current === name;
};
};
var unknown$2 = function () {
return nu$2({
current: undefined,
version: Version.unknown()
});
};
var nu$2 = function (info) {
var current = info.current;
var version = info.version;
return {
current: current,
version: version,
isWindows: isOS(windows, current),
isiOS: isOS(ios, current),
isAndroid: isOS(android, current),
isOSX: isOS(osx, current),
isLinux: isOS(linux, current),
isSolaris: isOS(solaris, current),
isFreeBSD: isOS(freebsd, current)
};
};
var OperatingSystem = {
unknown: unknown$2,
nu: nu$2,
windows: constant(windows),
ios: constant(ios),
android: constant(android),
linux: constant(linux),
osx: constant(osx),
solaris: constant(solaris),
freebsd: constant(freebsd)
};
var DeviceType = function (os, browser, userAgent) {
var isiPad = os.isiOS() && /ipad/i.test(userAgent) === true;
var isiPhone = os.isiOS() && !isiPad;
var isAndroid3 = os.isAndroid() && os.version.major === 3;
var isAndroid4 = os.isAndroid() && os.version.major === 4;
var isTablet = isiPad || isAndroid3 || isAndroid4 && /mobile/i.test(userAgent) === true;
var isTouch = os.isiOS() || os.isAndroid();
var isPhone = isTouch && !isTablet;
var iOSwebview = browser.isSafari() && os.isiOS() && /safari/i.test(userAgent) === false;
return {
isiPad: constant(isiPad),
isiPhone: constant(isiPhone),
isTablet: constant(isTablet),
isPhone: constant(isPhone),
isTouch: constant(isTouch),
isAndroid: os.isAndroid,
isiOS: os.isiOS,
isWebView: constant(iOSwebview)
};
};
var detect$1 = function (candidates, userAgent) {
var agent = String(userAgent).toLowerCase();
return find(candidates, function (candidate) {
return candidate.search(agent);
});
};
var detectBrowser = function (browsers, userAgent) {
return detect$1(browsers, userAgent).map(function (browser) {
var version = Version.detect(browser.versionRegexes, userAgent);
return {
current: browser.name,
version: version
};
});
};
var detectOs = function (oses, userAgent) {
return detect$1(oses, userAgent).map(function (os) {
var version = Version.detect(os.versionRegexes, userAgent);
return {
current: os.name,
version: version
};
});
};
var UaString = {
detectBrowser: detectBrowser,
detectOs: detectOs
};
var normalVersionRegex = /.*?version\/\ ?([0-9]+)\.([0-9]+).*/;
var checkContains = function (target) {
return function (uastring) {
return contains$1(uastring, target);
};
};
var browsers = [
{
name: 'Edge',
versionRegexes: [/.*?edge\/ ?([0-9]+)\.([0-9]+)$/],
search: function (uastring) {
return contains$1(uastring, 'edge/') && contains$1(uastring, 'chrome') && contains$1(uastring, 'safari') && contains$1(uastring, 'applewebkit');
}
},
{
name: 'Chrome',
versionRegexes: [
/.*?chrome\/([0-9]+)\.([0-9]+).*/,
normalVersionRegex
],
search: function (uastring) {
return contains$1(uastring, 'chrome') && !contains$1(uastring, 'chromeframe');
}
},
{
name: 'IE',
versionRegexes: [
/.*?msie\ ?([0-9]+)\.([0-9]+).*/,
/.*?rv:([0-9]+)\.([0-9]+).*/
],
search: function (uastring) {
return contains$1(uastring, 'msie') || contains$1(uastring, 'trident');
}
},
{
name: 'Opera',
versionRegexes: [
normalVersionRegex,
/.*?opera\/([0-9]+)\.([0-9]+).*/
],
search: checkContains('opera')
},
{
name: 'Firefox',
versionRegexes: [/.*?firefox\/\ ?([0-9]+)\.([0-9]+).*/],
search: checkContains('firefox')
},
{
name: 'Safari',
versionRegexes: [
normalVersionRegex,
/.*?cpu os ([0-9]+)_([0-9]+).*/
],
search: function (uastring) {
return (contains$1(uastring, 'safari') || contains$1(uastring, 'mobile/')) && contains$1(uastring, 'applewebkit');
}
}
];
var oses = [
{
name: 'Windows',
search: checkContains('win'),
versionRegexes: [/.*?windows\ nt\ ?([0-9]+)\.([0-9]+).*/]
},
{
name: 'iOS',
search: function (uastring) {
return contains$1(uastring, 'iphone') || contains$1(uastring, 'ipad');
},
versionRegexes: [
/.*?version\/\ ?([0-9]+)\.([0-9]+).*/,
/.*cpu os ([0-9]+)_([0-9]+).*/,
/.*cpu iphone os ([0-9]+)_([0-9]+).*/
]
},
{
name: 'Android',
search: checkContains('android'),
versionRegexes: [/.*?android\ ?([0-9]+)\.([0-9]+).*/]
},
{
name: 'OSX',
search: checkContains('os x'),
versionRegexes: [/.*?os\ x\ ?([0-9]+)_([0-9]+).*/]
},
{
name: 'Linux',
search: checkContains('linux'),
versionRegexes: []
},
{
name: 'Solaris',
search: checkContains('sunos'),
versionRegexes: []
},
{
name: 'FreeBSD',
search: checkContains('freebsd'),
versionRegexes: []
}
];
var PlatformInfo = {
browsers: constant(browsers),
oses: constant(oses)
};
var detect$2 = function (userAgent) {
var browsers = PlatformInfo.browsers();
var oses = PlatformInfo.oses();
var browser = UaString.detectBrowser(browsers, userAgent).fold(Browser.unknown, Browser.nu);
var os = UaString.detectOs(oses, userAgent).fold(OperatingSystem.unknown, OperatingSystem.nu);
var deviceType = DeviceType(os, browser, userAgent);
return {
browser: browser,
os: os,
deviceType: deviceType
};
};
var PlatformDetection = { detect: detect$2 };
var detect$3 = cached(function () {
var userAgent = domGlobals.navigator.userAgent;
return PlatformDetection.detect(userAgent);
});
var PlatformDetection$1 = { detect: detect$3 };
var ELEMENT$1 = ELEMENT;
var DOCUMENT$1 = DOCUMENT;
var is = function (element, selector) {
var dom = element.dom();
if (dom.nodeType !== ELEMENT$1) {
return false;
} else {
var elem = dom;
if (elem.matches !== undefined) {
return elem.matches(selector);
} else if (elem.msMatchesSelector !== undefined) {
return elem.msMatchesSelector(selector);
} else if (elem.webkitMatchesSelector !== undefined) {
return elem.webkitMatchesSelector(selector);
} else if (elem.mozMatchesSelector !== undefined) {
return elem.mozMatchesSelector(selector);
} else {
throw new Error('Browser lacks native selectors');
}
}
};
var bypassSelector = function (dom) {
return dom.nodeType !== ELEMENT$1 && dom.nodeType !== DOCUMENT$1 || dom.childElementCount === 0;
};
var all = function (selector, scope) {
var base = scope === undefined ? domGlobals.document : scope.dom();
return bypassSelector(base) ? [] : map(base.querySelectorAll(selector), Element.fromDom);
};
var one = function (selector, scope) {
var base = scope === undefined ? domGlobals.document : scope.dom();
return bypassSelector(base) ? Option.none() : Option.from(base.querySelector(selector)).map(Element.fromDom);
};
var eq = function (e1, e2) {
return e1.dom() === e2.dom();
};
var regularContains = function (e1, e2) {
var d1 = e1.dom();
var d2 = e2.dom();
return d1 === d2 ? false : d1.contains(d2);
};
var ieContains = function (e1, e2) {
return Node.documentPositionContainedBy(e1.dom(), e2.dom());
};
var browser = PlatformDetection$1.detect().browser;
var contains$2 = browser.isIE() ? ieContains : regularContains;
var is$1 = is;
var owner = function (element) {
return Element.fromDom(element.dom().ownerDocument);
};
var defaultView = function (element) {
return Element.fromDom(element.dom().ownerDocument.defaultView);
};
var parent = function (element) {
return Option.from(element.dom().parentNode).map(Element.fromDom);
};
var parents = function (element, isRoot) {
var stop = isFunction(isRoot) ? isRoot : never;
var dom = element.dom();
var ret = [];
while (dom.parentNode !== null && dom.parentNode !== undefined) {
var rawParent = dom.parentNode;
var p = Element.fromDom(rawParent);
ret.push(p);
if (stop(p) === true) {
break;
} else {
dom = rawParent;
}
}
return ret;
};
var prevSibling = function (element) {
return Option.from(element.dom().previousSibling).map(Element.fromDom);
};
var nextSibling = function (element) {
return Option.from(element.dom().nextSibling).map(Element.fromDom);
};
var children = function (element) {
return map(element.dom().childNodes, Element.fromDom);
};
var child = function (element, index) {
var cs = element.dom().childNodes;
return Option.from(cs[index]).map(Element.fromDom);
};
var firstChild = function (element) {
return child(element, 0);
};
var spot = Immutable('element', 'offset');
var before = function (marker, element) {
var parent$1 = parent(marker);
parent$1.each(function (v) {
v.dom().insertBefore(element.dom(), marker.dom());
});
};
var after = function (marker, element) {
var sibling = nextSibling(marker);
sibling.fold(function () {
var parent$1 = parent(marker);
parent$1.each(function (v) {
append(v, element);
});
}, function (v) {
before(v, element);
});
};
var prepend = function (parent, element) {
var firstChild$1 = firstChild(parent);
firstChild$1.fold(function () {
append(parent, element);
}, function (v) {
parent.dom().insertBefore(element.dom(), v.dom());
});
};
var append = function (parent, element) {
parent.dom().appendChild(element.dom());
};
var wrap = function (element, wrapper) {
before(element, wrapper);
append(wrapper, element);
};
var before$1 = function (marker, elements) {
each(elements, function (x) {
before(marker, x);
});
};
var after$1 = function (marker, elements) {
each(elements, function (x, i) {
var e = i === 0 ? marker : elements[i - 1];
after(e, x);
});
};
var append$1 = function (parent, elements) {
each(elements, function (x) {
append(parent, x);
});
};
var empty = function (element) {
element.dom().textContent = '';
each(children(element), function (rogue) {
remove$2(rogue);
});
};
var remove$2 = function (element) {
var dom = element.dom();
if (dom.parentNode !== null) {
dom.parentNode.removeChild(dom);
}
};
var unwrap = function (wrapper) {
var children$1 = children(wrapper);
if (children$1.length > 0) {
before$1(wrapper, children$1);
}
remove$2(wrapper);
};
var dimension = Immutable('width', 'height');
var dimensions = Immutable('width', 'height');
var grid = Immutable('rows', 'columns');
var address = Immutable('row', 'column');
var coords = Immutable('x', 'y');
var detail = Immutable('element', 'rowspan', 'colspan');
var detailnew = Immutable('element', 'rowspan', 'colspan', 'isNew');
var extended = Immutable('element', 'rowspan', 'colspan', 'row', 'column');
var rowdata = Immutable('element', 'cells', 'section');
var elementnew = Immutable('element', 'isNew');
var rowdatanew = Immutable('element', 'cells', 'section', 'isNew');
var rowcells = Immutable('cells', 'section');
var rowdetails = Immutable('details', 'section');
var bounds = Immutable('startRow', 'startCol', 'finishRow', 'finishCol');
var ancestors = function (scope, predicate, isRoot) {
return filter(parents(scope, isRoot), predicate);
};
var children$1 = function (scope, predicate) {
return filter(children(scope), predicate);
};
var descendants = function (scope, predicate) {
var result = [];
each(children(scope), function (x) {
if (predicate(x)) {
result = result.concat([x]);
}
result = result.concat(descendants(x, predicate));
});
return result;
};
var ancestors$1 = function (scope, selector, isRoot) {
return ancestors(scope, function (e) {
return is(e, selector);
}, isRoot);
};
var children$2 = function (scope, selector) {
return children$1(scope, function (e) {
return is(e, selector);
});
};
var descendants$1 = function (scope, selector) {
return all(selector, scope);
};
function ClosestOrAncestor (is, ancestor, scope, a, isRoot) {
return is(scope, a) ? Option.some(scope) : isFunction(isRoot) && isRoot(scope) ? Option.none() : ancestor(scope, a, isRoot);
}
var ancestor = function (scope, predicate, isRoot) {
var element = scope.dom();
var stop = isFunction(isRoot) ? isRoot : constant(false);
while (element.parentNode) {
element = element.parentNode;
var el = Element.fromDom(element);
if (predicate(el)) {
return Option.some(el);
} else if (stop(el)) {
break;
}
}
return Option.none();
};
var closest = function (scope, predicate, isRoot) {
var is = function (s, test) {
return test(s);
};
return ClosestOrAncestor(is, ancestor, scope, predicate, isRoot);
};
var child$1 = function (scope, predicate) {
var pred = function (node) {
return predicate(Element.fromDom(node));
};
var result = find(scope.dom().childNodes, pred);
return result.map(Element.fromDom);
};
var descendant = function (scope, predicate) {
var descend = function (node) {
for (var i = 0; i < node.childNodes.length; i++) {
var child_1 = Element.fromDom(node.childNodes[i]);
if (predicate(child_1)) {
return Option.some(child_1);
}
var res = descend(node.childNodes[i]);
if (res.isSome()) {
return res;
}
}
return Option.none();
};
return descend(scope.dom());
};
var ancestor$1 = function (scope, selector, isRoot) {
return ancestor(scope, function (e) {
return is(e, selector);
}, isRoot);
};
var child$2 = function (scope, selector) {
return child$1(scope, function (e) {
return is(e, selector);
});
};
var descendant$1 = function (scope, selector) {
return one(selector, scope);
};
var closest$1 = function (scope, selector, isRoot) {
return ClosestOrAncestor(is, ancestor$1, scope, selector, isRoot);
};
var firstLayer = function (scope, selector) {
return filterFirstLayer(scope, selector, constant(true));
};
var filterFirstLayer = function (scope, selector, predicate) {
return bind(children(scope), function (x) {
return is(x, selector) ? predicate(x) ? [x] : [] : filterFirstLayer(x, selector, predicate);
});
};
var LayerSelector = {
firstLayer: firstLayer,
filterFirstLayer: filterFirstLayer
};
var lookup = function (tags, element, isRoot) {
if (isRoot === void 0) {
isRoot = never;
}
if (isRoot(element)) {
return Option.none();
}
if (contains(tags, name(element))) {
return Option.some(element);
}
var isRootOrUpperTable = function (elm) {
return is(elm, 'table') || isRoot(elm);
};
return ancestor$1(element, tags.join(','), isRootOrUpperTable);
};
var cell = function (element, isRoot) {
return lookup([
'td',
'th'
], element, isRoot);
};
var cells = function (ancestor) {
return LayerSelector.firstLayer(ancestor, 'th,td');
};
var notCell = function (element, isRoot) {
return lookup([
'caption',
'tr',
'tbody',
'tfoot',
'thead'
], element, isRoot);
};
var neighbours = function (selector, element) {
return parent(element).map(function (parent) {
return children$2(parent, selector);
});
};
var neighbourCells = curry(neighbours, 'th,td');
var neighbourRows = curry(neighbours, 'tr');
var firstCell = function (ancestor) {
return descendant$1(ancestor, 'th,td');
};
var table = function (element, isRoot) {
return closest$1(element, 'table', isRoot);
};
var row = function (element, isRoot) {
return lookup(['tr'], element, isRoot);
};
var rows = function (ancestor) {
return LayerSelector.firstLayer(ancestor, 'tr');
};
var attr = function (element, property) {
return parseInt(get(element, property), 10);
};
var grid$1 = function (element, rowProp, colProp) {
var rowsCount = attr(element, rowProp);
var cols = attr(element, colProp);
return grid(rowsCount, cols);
};
var TableLookup = {
cell: cell,
firstCell: firstCell,
cells: cells,
neighbourCells: neighbourCells,
table: table,
row: row,
rows: rows,
notCell: notCell,
neighbourRows: neighbourRows,
attr: attr,
grid: grid$1
};
var fromTable = function (table) {
var rows = TableLookup.rows(table);
return map(rows, function (row) {
var element = row;
var parent$1 = parent(element);
var parentSection = parent$1.map(function (p) {
var parentName = name(p);
return parentName === 'tfoot' || parentName === 'thead' || parentName === 'tbody' ? parentName : 'tbody';
}).getOr('tbody');
var cells = map(TableLookup.cells(row), function (cell) {
var rowspan = has(cell, 'rowspan') ? parseInt(get(cell, 'rowspan'), 10) : 1;
var colspan = has(cell, 'colspan') ? parseInt(get(cell, 'colspan'), 10) : 1;
return detail(cell, rowspan, colspan);
});
return rowdata(element, cells, parentSection);
});
};
var fromPastedRows = function (rows, example) {
return map(rows, function (row) {
var cells = map(TableLookup.cells(row), function (cell) {
var rowspan = has(cell, 'rowspan') ? parseInt(get(cell, 'rowspan'), 10) : 1;
var colspan = has(cell, 'colspan') ? parseInt(get(cell, 'colspan'), 10) : 1;
return detail(cell, rowspan, colspan);
});
return rowdata(row, cells, example.section());
});
};
var DetailsList = {
fromTable: fromTable,
fromPastedRows: fromPastedRows
};
var key = function (row, column) {
return row + ',' + column;
};
var getAt = function (warehouse, row, column) {
var raw = warehouse.access()[key(row, column)];
return raw !== undefined ? Option.some(raw) : Option.none();
};
var findItem = function (warehouse, item, comparator) {
var filtered = filterItems(warehouse, function (detail) {
return comparator(item, detail.element());
});
return filtered.length > 0 ? Option.some(filtered[0]) : Option.none();
};
var filterItems = function (warehouse, predicate) {
var all = bind(warehouse.all(), function (r) {
return r.cells();
});
return filter(all, predicate);
};
var generate = function (list) {
var access = {};
var cells = [];
var maxRows = list.length;
var maxColumns = 0;
each(list, function (details, r) {
var currentRow = [];
each(details.cells(), function (detail) {
var start = 0;
while (access[key(r, start)] !== undefined) {
start++;
}
var current = extended(detail.element(), detail.rowspan(), detail.colspan(), r, start);
for (var i = 0; i < detail.colspan(); i++) {
for (var j = 0; j < detail.rowspan(); j++) {
var cr = r + j;
var cc = start + i;
var newpos = key(cr, cc);
access[newpos] = current;
maxColumns = Math.max(maxColumns, cc + 1);
}
}
currentRow.push(current);
});
cells.push(rowdata(details.element(), currentRow, details.section()));
});
var grid$1 = grid(maxRows, maxColumns);
return {
grid: constant(grid$1),
access: constant(access),
all: constant(cells)
};
};
var justCells = function (warehouse) {
var rows = map(warehouse.all(), function (w) {
return w.cells();
});
return flatten(rows);
};
var Warehouse = {
generate: generate,
getAt: getAt,
findItem: findItem,
filterItems: filterItems,
justCells: justCells
};
var statsStruct = Immutable('minRow', 'minCol', 'maxRow', 'maxCol');
var findSelectedStats = function (house, isSelected) {
var totalColumns = house.grid().columns();
var totalRows = house.grid().rows();
var minRow = totalRows;
var minCol = totalColumns;
var maxRow = 0;
var maxCol = 0;
each$1(house.access(), function (detail) {
if (isSelected(detail)) {
var startRow = detail.row();
var endRow = startRow + detail.rowspan() - 1;
var startCol = detail.column();
var endCol = startCol + detail.colspan() - 1;
if (startRow < minRow) {
minRow = startRow;
} else if (endRow > maxRow) {
maxRow = endRow;
}
if (startCol < minCol) {
minCol = startCol;
} else if (endCol > maxCol) {
maxCol = endCol;
}
}
});
return statsStruct(minRow, minCol, maxRow, maxCol);
};
var makeCell = function (list, seenSelected, rowIndex) {
var row = list[rowIndex].element();
var td = Element.fromTag('td');
append(td, Element.fromTag('br'));
var f = seenSelected ? append : prepend;
f(row, td);
};
var fillInGaps = function (list, house, stats, isSelected) {
var totalColumns = house.grid().columns();
var totalRows = house.grid().rows();
for (var i = 0; i < totalRows; i++) {
var seenSelected = false;
for (var j = 0; j < totalColumns; j++) {
if (!(i < stats.minRow() || i > stats.maxRow() || j < stats.minCol() || j > stats.maxCol())) {
var needCell = Warehouse.getAt(house, i, j).filter(isSelected).isNone();
if (needCell) {
makeCell(list, seenSelected, i);
} else {
seenSelected = true;
}
}
}
}
};
var clean = function (table, stats) {
var emptyRows = filter(LayerSelector.firstLayer(table, 'tr'), function (row) {
return row.dom().childElementCount === 0;
});
each(emptyRows, remove$2);
if (stats.minCol() === stats.maxCol() || stats.minRow() === stats.maxRow()) {
each(LayerSelector.firstLayer(table, 'th,td'), function (cell) {
remove(cell, 'rowspan');
remove(cell, 'colspan');
});
}
remove(table, 'width');
remove(table, 'height');
remove$1(table, 'width');
remove$1(table, 'height');
};
var extract = function (table, selectedSelector) {
var isSelected = function (detail) {
return is(detail.element(), selectedSelector);
};
var list = DetailsList.fromTable(table);
var house = Warehouse.generate(list);
var stats = findSelectedStats(house, isSelected);
var selector = 'th:not(' + selectedSelector + ')' + ',td:not(' + selectedSelector + ')';
var unselectedCells = LayerSelector.filterFirstLayer(table, 'th,td', function (cell) {
return is(cell, selector);
});
each(unselectedCells, remove$2);
fillInGaps(list, house, stats, isSelected);
clean(table, stats);
return table;
};
var CopySelected = { extract: extract };
function NodeValue (is, name) {
var get = function (element) {
if (!is(element)) {
throw new Error('Can only get ' + name + ' value of a ' + name + ' node');
}
return getOption(element).getOr('');
};
var getOption = function (element) {
return is(element) ? Option.from(element.dom().nodeValue) : Option.none();
};
var set = function (element, value) {
if (!is(element)) {
throw new Error('Can only set raw ' + name + ' value of a ' + name + ' node');
}
element.dom().nodeValue = value;
};
return {
get: get,
getOption: getOption,
set: set
};
}
var api = NodeValue(isText, 'text');
var get$2 = function (element) {
return api.get(element);
};
var getOption = function (element) {
return api.getOption(element);
};
var set$2 = function (element, value) {
api.set(element, value);
};
var getEnd = function (element) {
return name(element) === 'img' ? 1 : getOption(element).fold(function () {
return children(element).length;
}, function (v) {
return v.length;
});
};
var NBSP = '\xA0';
var isTextNodeWithCursorPosition = function (el) {
return getOption(el).filter(function (text) {
return text.trim().length !== 0 || text.indexOf(NBSP) > -1;
}).isSome();
};
var elementsWithCursorPosition = [
'img',
'br'
];
var isCursorPosition = function (elem) {
var hasCursorPosition = isTextNodeWithCursorPosition(elem);
return hasCursorPosition || contains(elementsWithCursorPosition, name(elem));
};
var first = function (element) {
return descendant(element, isCursorPosition);
};
var last$1 = function (element) {
return descendantRtl(element, isCursorPosition);
};
var descendantRtl = function (scope, predicate) {
var descend = function (element) {
var children$1 = children(element);
for (var i = children$1.length - 1; i >= 0; i--) {
var child = children$1[i];
if (predicate(child)) {
return Option.some(child);
}
var res = descend(child);
if (res.isSome()) {
return res;
}
}
return Option.none();
};
return descend(scope);
};
var clone$1 = function (original, isDeep) {
return Element.fromDom(original.dom().cloneNode(isDeep));
};
var shallow = function (original) {
return clone$1(original, false);
};
var deep = function (original) {
return clone$1(original, true);
};
var shallowAs = function (original, tag) {
var nu = Element.fromTag(tag);
var attributes = clone(original);
setAll(nu, attributes);
return nu;
};
var copy$1 = function (original, tag) {
var nu = shallowAs(original, tag);
var cloneChildren = children(deep(original));
append$1(nu, cloneChildren);
return nu;
};
var createCell = function () {
var td = Element.fromTag('td');
append(td, Element.fromTag('br'));
return td;
};
var replace = function (cell, tag, attrs) {
var replica = copy$1(cell, tag);
each$1(attrs, function (v, k) {
if (v === null) {
remove(replica, k);
} else {
set(replica, k, v);
}
});
return replica;
};
var pasteReplace = function (cell) {
return cell;
};
var newRow = function (doc) {
return function () {
return Element.fromTag('tr', doc.dom());
};
};
var cloneFormats = function (oldCell, newCell, formats) {
var first$1 = first(oldCell);
return first$1.map(function (firstText) {
var formatSelector = formats.join(',');
var parents = ancestors$1(firstText, formatSelector, function (element) {
return eq(element, oldCell);
});
return foldr(parents, function (last, parent) {
var clonedFormat = shallow(parent);
remove(clonedFormat, 'contenteditable');
append(last, clonedFormat);
return clonedFormat;
}, newCell);
}).getOr(newCell);
};
var cellOperations = function (mutate, doc, formatsToClone) {
var newCell = function (prev) {
var docu = owner(prev.element());
var td = Element.fromTag(name(prev.element()), docu.dom());
var formats = formatsToClone.getOr([
'strong',
'em',
'b',
'i',
'span',
'font',
'h1',
'h2',
'h3',
'h4',
'h5',
'h6',
'p',
'div'
]);
var lastNode = formats.length > 0 ? cloneFormats(prev.element(), td, formats) : td;
append(lastNode, Element.fromTag('br'));
copy(prev.element(), td);
remove$1(td, 'height');
if (prev.colspan() !== 1) {
remove$1(prev.element(), 'width');
}
mutate(prev.element(), td);
return td;
};
return {
row: newRow(doc),
cell: newCell,
replace: replace,
gap: createCell
};
};
var paste = function (doc) {
return {
row: newRow(doc),
cell: createCell,
replace: pasteReplace,
gap: createCell
};
};
var TableFill = {
cellOperations: cellOperations,
paste: paste
};
var fromHtml$1 = function (html, scope) {
var doc = scope || domGlobals.document;
var div = doc.createElement('div');
div.innerHTML = html;
return children(Element.fromDom(div));
};
var inSelection = function (bounds, detail) {
var leftEdge = detail.column();
var rightEdge = detail.column() + detail.colspan() - 1;
var topEdge = detail.row();
var bottomEdge = detail.row() + detail.rowspan() - 1;
return leftEdge <= bounds.finishCol() && rightEdge >= bounds.startCol() && (topEdge <= bounds.finishRow() && bottomEdge >= bounds.startRow());
};
var isWithin = function (bounds, detail) {
return detail.column() >= bounds.startCol() && detail.column() + detail.colspan() - 1 <= bounds.finishCol() && detail.row() >= bounds.startRow() && detail.row() + detail.rowspan() - 1 <= bounds.finishRow();
};
var isRectangular = function (warehouse, bounds) {
var isRect = true;
var detailIsWithin = curry(isWithin, bounds);
for (var i = bounds.startRow(); i <= bounds.finishRow(); i++) {
for (var j = bounds.startCol(); j <= bounds.finishCol(); j++) {
isRect = isRect && Warehouse.getAt(warehouse, i, j).exists(detailIsWithin);
}
}
return isRect ? Option.some(bounds) : Option.none();
};
var CellBounds = {
inSelection: inSelection,
isWithin: isWithin,
isRectangular: isRectangular
};
var getBounds = function (detailA, detailB) {
return bounds(Math.min(detailA.row(), detailB.row()), Math.min(detailA.column(), detailB.column()), Math.max(detailA.row() + detailA.rowspan() - 1, detailB.row() + detailB.rowspan() - 1), Math.max(detailA.column() + detailA.colspan() - 1, detailB.column() + detailB.colspan() - 1));
};
var getAnyBox = function (warehouse, startCell, finishCell) {
var startCoords = Warehouse.findItem(warehouse, startCell, eq);
var finishCoords = Warehouse.findItem(warehouse, finishCell, eq);
return startCoords.bind(function (sc) {
return finishCoords.map(function (fc) {
return getBounds(sc, fc);
});
});
};
var getBox = function (warehouse, startCell, finishCell) {
return getAnyBox(warehouse, startCell, finishCell).bind(function (bounds) {
return CellBounds.isRectangular(warehouse, bounds);
});
};
var CellGroup = {
getAnyBox: getAnyBox,
getBox: getBox
};
var moveBy = function (warehouse, cell, row, column) {
return Warehouse.findItem(warehouse, cell, eq).bind(function (detail) {
var startRow = row > 0 ? detail.row() + detail.rowspan() - 1 : detail.row();
var startCol = column > 0 ? detail.column() + detail.colspan() - 1 : detail.column();
var dest = Warehouse.getAt(warehouse, startRow + row, startCol + column);
return dest.map(function (d) {
return d.element();
});
});
};
var intercepts = function (warehouse, start, finish) {
return CellGroup.getAnyBox(warehouse, start, finish).map(function (bounds) {
var inside = Warehouse.filterItems(warehouse, curry(CellBounds.inSelection, bounds));
return map(inside, function (detail) {
return detail.element();
});
});
};
var parentCell = function (warehouse, innerCell) {
var isContainedBy = function (c1, c2) {
return contains$2(c2, c1);
};
return Warehouse.findItem(warehouse, innerCell, isContainedBy).map(function (detail) {
return detail.element();
});
};
var CellFinder = {
moveBy: moveBy,
intercepts: intercepts,
parentCell: parentCell
};
var moveBy$1 = function (cell, deltaRow, deltaColumn) {
return TableLookup.table(cell).bind(function (table) {
var warehouse = getWarehouse(table);
return CellFinder.moveBy(warehouse, cell, deltaRow, deltaColumn);
});
};
var intercepts$1 = function (table, first, last) {
var warehouse = getWarehouse(table);
return CellFinder.intercepts(warehouse, first, last);
};
var nestedIntercepts = function (table, first, firstTable, last, lastTable) {
var warehouse = getWarehouse(table);
var optStartCell = eq(table, firstTable) ? Option.some(first) : CellFinder.parentCell(warehouse, first);
var optLastCell = eq(table, lastTable) ? Option.some(last) : CellFinder.parentCell(warehouse, last);
return optStartCell.bind(function (startCell) {
return optLastCell.bind(function (lastCell) {
return CellFinder.intercepts(warehouse, startCell, lastCell);
});
});
};
var getBox$1 = function (table, first, last) {
var warehouse = getWarehouse(table);
return CellGroup.getBox(warehouse, first, last);
};
var getWarehouse = function (table) {
var list = DetailsList.fromTable(table);
return Warehouse.generate(list);
};
var TablePositions = {
moveBy: moveBy$1,
intercepts: intercepts$1,
nestedIntercepts: nestedIntercepts,
getBox: getBox$1
};
var TagBoundaries = [
'body',
'p',
'div',
'article',
'aside',
'figcaption',
'figure',
'footer',
'header',
'nav',
'section',
'ol',
'ul',
'li',
'table',
'thead',
'tbody',
'tfoot',
'caption',
'tr',
'td',
'th',
'h1',
'h2',
'h3',
'h4',
'h5',
'h6',
'blockquote',
'pre',
'address'
];
function DomUniverse () {
var clone$1 = function (element) {
return Element.fromDom(element.dom().cloneNode(false));
};
var document = function (element) {
return element.dom().ownerDocument;
};
var isBoundary = function (element) {
if (!isElement(element)) {
return false;
}
if (name(element) === 'body') {
return true;
}
return contains(TagBoundaries, name(element));
};
var isEmptyTag = function (element) {
if (!isElement(element)) {
return false;
}
return contains([
'br',
'img',
'hr',
'input'
], name(element));
};
var comparePosition = function (element, other) {
return element.dom().compareDocumentPosition(other.dom());
};
var copyAttributesTo = function (source, destination) {
var as = clone(source);
setAll(destination, as);
};
return {
up: constant({
selector: ancestor$1,
closest: closest$1,
predicate: ancestor,
all: parents
}),
down: constant({
selector: descendants$1,
predicate: descendants
}),
styles: constant({
get: get$1,
getRaw: getRaw,
set: set$1,
remove: remove$1
}),
attrs: constant({
get: get,
set: set,
remove: remove,
copyTo: copyAttributesTo
}),
insert: constant({
before: before,
after: after,
afterAll: after$1,
append: append,
appendAll: append$1,
prepend: prepend,
wrap: wrap
}),
remove: constant({
unwrap: unwrap,
remove: remove$2
}),
create: constant({
nu: Element.fromTag,
clone: clone$1,
text: Element.fromText
}),
query: constant({
comparePosition: comparePosition,
prevSibling: prevSibling,
nextSibling: nextSibling
}),
property: constant({
children: children,
name: name,
parent: parent,
document: document,
isText: isText,
isComment: isComment,
isElement: isElement,
getText: get$2,
setText: set$2,
isBoundary: isBoundary,
isEmptyTag: isEmptyTag
}),
eq: eq,
is: is$1
};
}
var leftRight = Immutable('left', 'right');
var brokenPath = Immutable('first', 'second', 'splits');
var bisect = function (universe, parent, child) {
var children = universe.property().children(parent);
var index = findIndex(children, curry(universe.eq, child));
return index.map(function (ind) {
return {
before: constant(children.slice(0, ind)),
after: constant(children.slice(ind + 1))
};
});
};
var breakToRight = function (universe, parent, child) {
return bisect(universe, parent, child).map(function (parts) {
var second = universe.create().clone(parent);
universe.insert().appendAll(second, parts.after());
universe.insert().after(parent, second);
return leftRight(parent, second);
});
};
var breakToLeft = function (universe, parent, child) {
return bisect(universe, parent, child).map(function (parts) {
var prior = universe.create().clone(parent);
universe.insert().appendAll(prior, parts.before().concat([child]));
universe.insert().appendAll(parent, parts.after());
universe.insert().before(parent, prior);
return leftRight(prior, parent);
});
};
var breakPath = function (universe, item, isTop, breaker) {
var next = function (child, group, splits) {
var fallback = brokenPath(child, Option.none(), splits);
if (isTop(child)) {
return brokenPath(child, group, splits);
} else {
return universe.property().parent(child).bind(function (parent) {
return breaker(universe, parent, child).map(function (breakage) {
var extra = [{
first: breakage.left,
second: breakage.right
}];
var nextChild = isTop(parent) ? parent : breakage.left();
return next(nextChild, Option.some(breakage.right()), splits.concat(extra));
});
}).getOr(fallback);
}
};
return next(item, Option.none(), []);
};
var all$1 = function (universe, look, elements, f) {
var head = elements[0];
var tail = elements.slice(1);
return f(universe, look, head, tail);
};
var oneAll = function (universe, look, elements) {
return elements.length > 0 ? all$1(universe, look, elements, unsafeOne) : Option.none();
};
var unsafeOne = function (universe, look, head, tail) {
var start = look(universe, head);
return foldr(tail, function (b, a) {
var current = look(universe, a);
return commonElement(universe, b, current);
}, start);
};
var commonElement = function (universe, start, end) {
return start.bind(function (s) {
return end.filter(curry(universe.eq, s));
});
};
var eq$1 = function (universe, item) {
return curry(universe.eq, item);
};
var unsafeSubset = function (universe, common, ps1, ps2) {
var children = universe.property().children(common);
if (universe.eq(common, ps1[0])) {
return Option.some([ps1[0]]);
}
if (universe.eq(common, ps2[0])) {
return Option.some([ps2[0]]);
}
var finder = function (ps) {
var topDown = reverse(ps);
var index = findIndex(topDown, eq$1(universe, common)).getOr(-1);
var item = index < topDown.length - 1 ? topDown[index + 1] : topDown[index];
return findIndex(children, eq$1(universe, item));
};
var startIndex = finder(ps1);
var endIndex = finder(ps2);
return startIndex.bind(function (sIndex) {
return endIndex.map(function (eIndex) {
var first = Math.min(sIndex, eIndex);
var last = Math.max(sIndex, eIndex);
return children.slice(first, last + 1);
});
});
};
var ancestors$2 = function (universe, start, end, isRoot) {
if (isRoot === void 0) {
isRoot = never;
}
var ps1 = [start].concat(universe.up().all(start));
var ps2 = [end].concat(universe.up().all(end));
var prune = function (path) {
var index = findIndex(path, isRoot);
return index.fold(function () {
return path;
}, function (ind) {
return path.slice(0, ind + 1);
});
};
var pruned1 = prune(ps1);
var pruned2 = prune(ps2);
var shared = find(pruned1, function (x) {
return exists(pruned2, eq$1(universe, x));
});
return {
firstpath: constant(pruned1),
secondpath: constant(pruned2),
shared: constant(shared)
};
};
var subset = function (universe, start, end) {
var ancs = ancestors$2(universe, start, end);
return ancs.shared().bind(function (shared) {
return unsafeSubset(universe, shared, ancs.firstpath(), ancs.secondpath());
});
};
var SubsetFn = {
subset: subset,
ancestors: ancestors$2
};
var sharedOne = oneAll;
var subset$1 = SubsetFn.subset;
var ancestors$3 = SubsetFn.ancestors;
var breakToLeft$1 = breakToLeft;
var breakToRight$1 = breakToRight;
var breakPath$1 = breakPath;
var Parent = {
sharedOne: sharedOne,
subset: subset$1,
ancestors: ancestors$3,
breakToLeft: breakToLeft$1,
breakToRight: breakToRight$1,
breakPath: breakPath$1
};
var universe = DomUniverse();
var sharedOne$1 = function (look, elements) {
return Parent.sharedOne(universe, function (_universe, element) {
return look(element);
}, elements);
};
var subset$2 = function (start, finish) {
return Parent.subset(universe, start, finish);
};
var ancestors$4 = function (start, finish, isRoot) {
return Parent.ancestors(universe, start, finish, isRoot);
};
var breakToLeft$2 = function (parent, child) {
return Parent.breakToLeft(universe, parent, child);
};
var breakToRight$2 = function (parent, child) {
return Parent.breakToRight(universe, parent, child);
};
var breakPath$2 = function (child, isTop, breaker) {
return Parent.breakPath(universe, child, isTop, function (u, p, c) {
return breaker(p, c);
});
};
var DomParent = {
sharedOne: sharedOne$1,
subset: subset$2,
ancestors: ancestors$4,
breakToLeft: breakToLeft$2,
breakToRight: breakToRight$2,
breakPath: breakPath$2
};
var create = MixedBag([
'boxes',
'start',
'finish'
], []);
var Identified = { create: create };
var lookupTable = function (container) {
return ancestor$1(container, 'table');
};
var identify = function (start, finish, isRoot) {
var getIsRoot = function (rootTable) {
return function (element) {
return isRoot !== undefined && isRoot(element) || eq(element, rootTable);
};
};
if (eq(start, finish)) {
return Option.some(Identified.create({
boxes: Option.some([start]),
start: start,
finish: finish
}));
} else {
return lookupTable(start).bind(function (startTable) {
return lookupTable(finish).bind(function (finishTable) {
if (eq(startTable, finishTable)) {
return Option.some(Identified.create({
boxes: TablePositions.intercepts(startTable, start, finish),
start: start,
finish: finish
}));
} else if (contains$2(startTable, finishTable)) {
var ancestorCells = ancestors$1(finish, 'td,th', getIsRoot(startTable));
var finishCell = ancestorCells.length > 0 ? ancestorCells[ancestorCells.length - 1] : finish;
return Option.some(Identified.create({
boxes: TablePositions.nestedIntercepts(startTable, start, startTable, finish, finishTable),
start: start,
finish: finishCell
}));
} else if (contains$2(finishTable, startTable)) {
var ancestorCells = ancestors$1(start, 'td,th', getIsRoot(finishTable));
var startCell = ancestorCells.length > 0 ? ancestorCells[ancestorCells.length - 1] : start;
return Option.some(Identified.create({
boxes: TablePositions.nestedIntercepts(finishTable, start, startTable, finish, finishTable),
start: start,
finish: startCell
}));
} else {
return DomParent.ancestors(start, finish).shared().bind(function (lca) {
return closest$1(lca, 'table', isRoot).bind(function (lcaTable) {
var finishAncestorCells = ancestors$1(finish, 'td,th', getIsRoot(lcaTable));
var finishCell = finishAncestorCells.length > 0 ? finishAncestorCells[finishAncestorCells.length - 1] : finish;
var startAncestorCells = ancestors$1(start, 'td,th', getIsRoot(lcaTable));
var startCell = startAncestorCells.length > 0 ? startAncestorCells[startAncestorCells.length - 1] : start;
return Option.some(Identified.create({
boxes: TablePositions.nestedIntercepts(lcaTable, start, startTable, finish, finishTable),
start: startCell,
finish: finishCell
}));
});
});
}
});
});
}
};
var retrieve = function (container, selector) {
var sels = descendants$1(container, selector);
return sels.length > 0 ? Option.some(sels) : Option.none();
};
var getLast = function (boxes, lastSelectedSelector) {
return find(boxes, function (box) {
return is(box, lastSelectedSelector);
});
};
var getEdges = function (container, firstSelectedSelector, lastSelectedSelector) {
return descendant$1(container, firstSelectedSelector).bind(function (first) {
return descendant$1(container, lastSelectedSelector).bind(function (last) {
return DomParent.sharedOne(lookupTable, [
first,
last
]).map(function (tbl) {
return {
first: constant(first),
last: constant(last),
table: constant(tbl)
};
});
});
});
};
var expandTo = function (finish, firstSelectedSelector) {
return ancestor$1(finish, 'table').bind(function (table) {
return descendant$1(table, firstSelectedSelector).bind(function (start) {
return identify(start, finish).bind(function (identified) {
return identified.boxes().map(function (boxes) {
return {
boxes: constant(boxes),
start: constant(identified.start()),
finish: constant(identified.finish())
};
});
});
});
});
};
var shiftSelection = function (boxes, deltaRow, deltaColumn, firstSelectedSelector, lastSelectedSelector) {
return getLast(boxes, lastSelectedSelector).bind(function (last) {
return TablePositions.moveBy(last, deltaRow, deltaColumn).bind(function (finish) {
return expandTo(finish, firstSelectedSelector);
});
});
};
var CellSelection = {
identify: identify,
retrieve: retrieve,
shiftSelection: shiftSelection,
getEdges: getEdges
};
var retrieve$1 = function (container, selector) {
return CellSelection.retrieve(container, selector);
};
var retrieveBox = function (container, firstSelectedSelector, lastSelectedSelector) {
return CellSelection.getEdges(container, firstSelectedSelector, lastSelectedSelector).bind(function (edges) {
var isRoot = function (ancestor) {
return eq(container, ancestor);
};
var firstAncestor = ancestor$1(edges.first(), 'thead,tfoot,tbody,table', isRoot);
var lastAncestor = ancestor$1(edges.last(), 'thead,tfoot,tbody,table', isRoot);
return firstAncestor.bind(function (fA) {
return lastAncestor.bind(function (lA) {
return eq(fA, lA) ? TablePositions.getBox(edges.table(), edges.first(), edges.last()) : Option.none();
});
});
});
};
var TableSelection = {
retrieve: retrieve$1,
retrieveBox: retrieveBox
};
var selected = 'data-mce-selected';
var selectedSelector = 'td[' + selected + '],th[' + selected + ']';
var attributeSelector = '[' + selected + ']';
var firstSelected = 'data-mce-first-selected';
var firstSelectedSelector = 'td[' + firstSelected + '],th[' + firstSelected + ']';
var lastSelected = 'data-mce-last-selected';
var lastSelectedSelector = 'td[' + lastSelected + '],th[' + lastSelected + ']';
var Ephemera = {
selected: constant(selected),
selectedSelector: constant(selectedSelector),
attributeSelector: constant(attributeSelector),
firstSelected: constant(firstSelected),
firstSelectedSelector: constant(firstSelectedSelector),
lastSelected: constant(lastSelected),
lastSelectedSelector: constant(lastSelectedSelector)
};
var generate$1 = function (cases) {
if (!isArray(cases)) {
throw new Error('cases must be an array');
}
if (cases.length === 0) {
throw new Error('there must be at least one case');
}
var constructors = [];
var adt = {};
each(cases, function (acase, count) {
var keys$1 = keys(acase);
if (keys$1.length !== 1) {
throw new Error('one and only one name per case');
}
var key = keys$1[0];
var value = acase[key];
if (adt[key] !== undefined) {
throw new Error('duplicate key detected:' + key);
} else if (key === 'cata') {
throw new Error('cannot have a case named cata (sorry)');
} else if (!isArray(value)) {
throw new Error('case arguments must be an array');
}
constructors.push(key);
adt[key] = function () {
var argLength = arguments.length;
if (argLength !== value.length) {
throw new Error('Wrong number of arguments to case ' + key + '. Expected ' + value.length + ' (' + value + '), got ' + argLength);
}
var args = new Array(argLength);
for (var i = 0; i < args.length; i++) {
args[i] = arguments[i];
}
var match = function (branches) {
var branchKeys = keys(branches);
if (constructors.length !== branchKeys.length) {
throw new Error('Wrong number of arguments to match. Expected: ' + constructors.join(',') + '\nActual: ' + branchKeys.join(','));
}
var allReqd = forall(constructors, function (reqKey) {
return contains(branchKeys, reqKey);
});
if (!allReqd) {
throw new Error('Not all branches were specified when using match. Specified: ' + branchKeys.join(', ') + '\nRequired: ' + constructors.join(', '));
}
return branches[key].apply(null, args);
};
return {
fold: function () {
if (arguments.length !== cases.length) {
throw new Error('Wrong number of arguments to fold. Expected ' + cases.length + ', got ' + arguments.length);
}
var target = arguments[count];
return target.apply(null, args);
},
match: match,
log: function (label) {
domGlobals.console.log(label, {
constructors: constructors,
constructor: key,
params: args
});
}
};
};
});
return adt;
};
var Adt = { generate: generate$1 };
var type$1 = Adt.generate([
{ none: [] },
{ multiple: ['elements'] },
{ single: ['selection'] }
]);
var cata = function (subject, onNone, onMultiple, onSingle) {
return subject.fold(onNone, onMultiple, onSingle);
};
var SelectionTypes = {
cata: cata,
none: type$1.none,
multiple: type$1.multiple,
single: type$1.single
};
var selection = function (cell, selections) {
return SelectionTypes.cata(selections.get(), constant([]), identity, constant([cell]));
};
var unmergable = function (cell, selections) {
var hasSpan = function (elem) {
return has(elem, 'rowspan') && parseInt(get(elem, 'rowspan'), 10) > 1 || has(elem, 'colspan') && parseInt(get(elem, 'colspan'), 10) > 1;
};
var candidates = selection(cell, selections);
return candidates.length > 0 && forall(candidates, hasSpan) ? Option.some(candidates) : Option.none();
};
var mergable = function (table, selections) {
return SelectionTypes.cata(selections.get(), Option.none, function (cells, _env) {
if (cells.length === 0) {
return Option.none();
}
return TableSelection.retrieveBox(table, Ephemera.firstSelectedSelector(), Ephemera.lastSelectedSelector()).bind(function (bounds) {
return cells.length > 1 ? Option.some({
bounds: constant(bounds),
cells: constant(cells)
}) : Option.none();
});
}, Option.none);
};
var CellOperations = {
mergable: mergable,
unmergable: unmergable,
selection: selection
};
var noMenu = function (cell) {
return {
element: constant(cell),
mergable: Option.none,
unmergable: Option.none,
selection: constant([cell])
};
};
var forMenu = function (selections, table, cell) {
return {
element: constant(cell),
mergable: constant(CellOperations.mergable(table, selections)),
unmergable: constant(CellOperations.unmergable(cell, selections)),
selection: constant(CellOperations.selection(cell, selections))
};
};
var notCell$1 = function (element) {
return noMenu(element);
};
var paste$1 = Immutable('element', 'clipboard', 'generators');
var pasteRows = function (selections, table, cell, clipboard, generators) {
return {
element: constant(cell),
mergable: Option.none,
unmergable: Option.none,
selection: constant(CellOperations.selection(cell, selections)),
clipboard: constant(clipboard),
generators: constant(generators)
};
};
var TableTargets = {
noMenu: noMenu,
forMenu: forMenu,
notCell: notCell$1,
paste: paste$1,
pasteRows: pasteRows
};
var extractSelected = function (cells) {
return TableLookup.table(cells[0]).map(deep).map(function (replica) {
return [CopySelected.extract(replica, Ephemera.attributeSelector())];
});
};
var serializeElements = function (editor, elements) {
return map(elements, function (elm) {
return editor.selection.serializer.serialize(elm.dom(), {});
}).join('');
};
var getTextContent = function (elements) {
return map(elements, function (element) {
return element.dom().innerText;
}).join('');
};
var registerEvents = function (editor, selections, actions, cellSelection) {
editor.on('BeforeGetContent', function (e) {
var multiCellContext = function (cells) {
e.preventDefault();
extractSelected(cells).each(function (elements) {
e.content = e.format === 'text' ? getTextContent(elements) : serializeElements(editor, elements);
});
};
if (e.selection === true) {
SelectionTypes.cata(selections.get(), noop, multiCellContext, noop);
}
});
editor.on('BeforeSetContent', function (e) {
if (e.selection === true && e.paste === true) {
var cellOpt = Option.from(editor.dom.getParent(editor.selection.getStart(), 'th,td'));
cellOpt.each(function (domCell) {
var cell = Element.fromDom(domCell);
TableLookup.table(cell).each(function (table) {
var elements = filter(fromHtml$1(e.content), function (content) {
return name(content) !== 'meta';
});
if (elements.length === 1 && name(elements[0]) === 'table') {
e.preventDefault();
var doc = Element.fromDom(editor.getDoc());
var generators = TableFill.paste(doc);
var targets = TableTargets.paste(cell, elements[0], generators);
actions.pasteCells(table, targets).each(function (rng) {
editor.selection.setRng(rng);
editor.focus();
cellSelection.clear(table);
});
}
});
});
}
});
};
var Clipboard = { registerEvents: registerEvents };
function Dimension (name, getOffset) {
var set = function (element, h) {
if (!isNumber(h) && !h.match(/^[0-9]+$/)) {
throw new Error(name + '.set accepts only positive integer values. Value was ' + h);
}
var dom = element.dom();
if (isSupported(dom)) {
dom.style[name] = h + 'px';
}
};
var get = function (element) {
var r = getOffset(element);
if (r <= 0 || r === null) {
var css = get$1(element, name);
return parseFloat(css) || 0;
}
return r;
};
var getOuter = get;
var aggregate = function (element, properties) {
return foldl(properties, function (acc, property) {
var val = get$1(element, property);
var value = val === undefined ? 0 : parseInt(val, 10);
return isNaN(value) ? acc : acc + value;
}, 0);
};
var max = function (element, value, properties) {
var cumulativeInclusions = aggregate(element, properties);
var absoluteMax = value > cumulativeInclusions ? value - cumulativeInclusions : 0;
return absoluteMax;
};
return {
set: set,
get: get,
getOuter: getOuter,
aggregate: aggregate,
max: max
};
}
var api$1 = Dimension('height', function (element) {
var dom = element.dom();
return inBody(element) ? dom.getBoundingClientRect().height : dom.offsetHeight;
});
var get$3 = function (element) {
return api$1.get(element);
};
var getOuter = function (element) {
return api$1.getOuter(element);
};
var api$2 = Dimension('width', function (element) {
return element.dom().offsetWidth;
});
var get$4 = function (element) {
return api$2.get(element);
};
var getOuter$1 = function (element) {
return api$2.getOuter(element);
};
var platform = PlatformDetection$1.detect();
var needManualCalc = function () {
return platform.browser.isIE() || platform.browser.isEdge();
};
var toNumber = function (px, fallback) {
var num = parseFloat(px);
return isNaN(num) ? fallback : num;
};
var getProp = function (elm, name, fallback) {
return toNumber(get$1(elm, name), fallback);
};
var getCalculatedHeight = function (cell) {
var paddingTop = getProp(cell, 'padding-top', 0);
var paddingBottom = getProp(cell, 'padding-bottom', 0);
var borderTop = getProp(cell, 'border-top-width', 0);
var borderBottom = getProp(cell, 'border-bottom-width', 0);
var height = cell.dom().getBoundingClientRect().height;
var boxSizing = get$1(cell, 'box-sizing');
var borders = borderTop + borderBottom;
return boxSizing === 'border-box' ? height : height - paddingTop - paddingBottom - borders;
};
var getWidth = function (cell) {
return getProp(cell, 'width', get$4(cell));
};
var getHeight = function (cell) {
return needManualCalc() ? getCalculatedHeight(cell) : getProp(cell, 'height', get$3(cell));
};
var RuntimeSize = {
getWidth: getWidth,
getHeight: getHeight
};
var genericSizeRegex = /(\d+(\.\d+)?)(\w|%)*/;
var percentageBasedSizeRegex = /(\d+(\.\d+)?)%/;
var pixelBasedSizeRegex = /(\d+(\.\d+)?)px|em/;
var setPixelWidth = function (cell, amount) {
set$1(cell, 'width', amount + 'px');
};
var setPercentageWidth = function (cell, amount) {
set$1(cell, 'width', amount + '%');
};
var setHeight = function (cell, amount) {
set$1(cell, 'height', amount + 'px');
};
var getHeightValue = function (cell) {
return getRaw(cell, 'height').getOrThunk(function () {
return RuntimeSize.getHeight(cell) + 'px';
});
};
var convert = function (cell, number, getter, setter) {
var newSize = TableLookup.table(cell).map(function (table) {
var total = getter(table);
return Math.floor(number / 100 * total);
}).getOr(number);
setter(cell, newSize);
return newSize;
};
var normalizePixelSize = function (value, cell, getter, setter) {
var number = parseInt(value, 10);
return endsWith(value, '%') && name(cell) !== 'table' ? convert(cell, number, getter, setter) : number;
};
var getTotalHeight = function (cell) {
var value = getHeightValue(cell);
if (!value) {
return get$3(cell);
}
return normalizePixelSize(value, cell, get$3, setHeight);
};
var get$5 = function (cell, type, f) {
var v = f(cell);
var span = getSpan(cell, type);
return v / span;
};
var getSpan = function (cell, type) {
return has(cell, type) ? parseInt(get(cell, type), 10) : 1;
};
var getRawWidth = function (element) {
var cssWidth = getRaw(element, 'width');
return cssWidth.fold(function () {
return Option.from(get(element, 'width'));
}, function (width) {
return Option.some(width);
});
};
var normalizePercentageWidth = function (cellWidth, tableSize) {
return cellWidth / tableSize.pixelWidth() * 100;
};
var choosePercentageSize = function (element, width, tableSize) {
var percentMatch = percentageBasedSizeRegex.exec(width);
if (percentMatch !== null) {
return parseFloat(percentMatch[1]);
} else {
var intWidth = get$4(element);
return normalizePercentageWidth(intWidth, tableSize);
}
};
var getPercentageWidth = function (cell, tableSize) {
var width = getRawWidth(cell);
return width.fold(function () {
var intWidth = get$4(cell);
return normalizePercentageWidth(intWidth, tableSize);
}, function (w) {
return choosePercentageSize(cell, w, tableSize);
});
};
var normalizePixelWidth = function (cellWidth, tableSize) {
return cellWidth / 100 * tableSize.pixelWidth();
};
var choosePixelSize = function (element, width, tableSize) {
var pixelMatch = pixelBasedSizeRegex.exec(width);
if (pixelMatch !== null) {
return parseInt(pixelMatch[1], 10);
}
var percentMatch = percentageBasedSizeRegex.exec(width);
if (percentMatch !== null) {
var floatWidth = parseFloat(percentMatch[1]);
return normalizePixelWidth(floatWidth, tableSize);
}
return get$4(element);
};
var getPixelWidth = function (cell, tableSize) {
var width = getRawWidth(cell);
return width.fold(function () {
return get$4(cell);
}, function (w) {
return choosePixelSize(cell, w, tableSize);
});
};
var getHeight$1 = function (cell) {
return get$5(cell, 'rowspan', getTotalHeight);
};
var getGenericWidth = function (cell) {
var width = getRawWidth(cell);
return width.bind(function (w) {
var match = genericSizeRegex.exec(w);
if (match !== null) {
return Option.some({
width: constant(parseFloat(match[1])),
unit: constant(match[3])
});
} else {
return Option.none();
}
});
};
var setGenericWidth = function (cell, amount, unit) {
set$1(cell, 'width', amount + unit);
};
var Sizes = {
percentageBasedSizeRegex: constant(percentageBasedSizeRegex),
pixelBasedSizeRegex: constant(pixelBasedSizeRegex),
setPixelWidth: setPixelWidth,
setPercentageWidth: setPercentageWidth,
setHeight: setHeight,
getPixelWidth: getPixelWidth,
getPercentageWidth: getPercentageWidth,
getGenericWidth: getGenericWidth,
setGenericWidth: setGenericWidth,
getHeight: getHeight$1,
getRawWidth: getRawWidth
};
var halve = function (main, other) {
var width = Sizes.getGenericWidth(main);
width.each(function (w) {
var newWidth = w.width() / 2;
Sizes.setGenericWidth(main, newWidth, w.unit());
Sizes.setGenericWidth(other, newWidth, w.unit());
});
};
var CellMutations = { halve: halve };
var r = function (left, top) {
var translate = function (x, y) {
return r(left + x, top + y);
};
return {
left: constant(left),
top: constant(top),
translate: translate
};
};
var Position = r;
var boxPosition = function (dom) {
var box = dom.getBoundingClientRect();
return Position(box.left, box.top);
};
var firstDefinedOrZero = function (a, b) {
return a !== undefined ? a : b !== undefined ? b : 0;
};
var absolute = function (element) {
var doc = element.dom().ownerDocument;
var body = doc.body;
var win = doc.defaultView;
var html = doc.documentElement;
var scrollTop = firstDefinedOrZero(win.pageYOffset, html.scrollTop);
var scrollLeft = firstDefinedOrZero(win.pageXOffset, html.scrollLeft);
var clientTop = firstDefinedOrZero(html.clientTop, body.clientTop);
var clientLeft = firstDefinedOrZero(html.clientLeft, body.clientLeft);
return viewport(element).translate(scrollLeft - clientLeft, scrollTop - clientTop);
};
var viewport = function (element) {
var dom = element.dom();
var doc = dom.ownerDocument;
var body = doc.body;
if (body === dom) {
return Position(body.offsetLeft, body.offsetTop);
}
if (!inBody(element)) {
return Position(0, 0);
}
return boxPosition(dom);
};
var rowInfo = Immutable('row', 'y');
var colInfo = Immutable('col', 'x');
var rtlEdge = function (cell) {
var pos = absolute(cell);
return pos.left() + getOuter$1(cell);
};
var ltrEdge = function (cell) {
return absolute(cell).left();
};
var getLeftEdge = function (index, cell) {
return colInfo(index, ltrEdge(cell));
};
var getRightEdge = function (index, cell) {
return colInfo(index, rtlEdge(cell));
};
var getTop = function (cell) {
return absolute(cell).top();
};
var getTopEdge = function (index, cell) {
return rowInfo(index, getTop(cell));
};
var getBottomEdge = function (index, cell) {
return rowInfo(index, getTop(cell) + getOuter(cell));
};
var findPositions = function (getInnerEdge, getOuterEdge, array) {
if (array.length === 0) {
return [];
}
var lines = map(array.slice(1), function (cellOption, index) {
return cellOption.map(function (cell) {
return getInnerEdge(index, cell);
});
});
var lastLine = array[array.length - 1].map(function (cell) {
return getOuterEdge(array.length - 1, cell);
});
return lines.concat([lastLine]);
};
var negate = function (step) {
return -step;
};
var height = {
delta: identity,
positions: function (optElements) {
return findPositions(getTopEdge, getBottomEdge, optElements);
},
edge: getTop
};
var ltr = {
delta: identity,
edge: ltrEdge,
positions: function (optElements) {
return findPositions(getLeftEdge, getRightEdge, optElements);
}
};
var rtl = {
delta: negate,
edge: rtlEdge,
positions: function (optElements) {
return findPositions(getRightEdge, getLeftEdge, optElements);
}
};
var BarPositions = {
height: height,
rtl: rtl,
ltr: ltr
};
var ResizeDirection = {
ltr: BarPositions.ltr,
rtl: BarPositions.rtl
};
function TableDirection (directionAt) {
var auto = function (table) {
return directionAt(table).isRtl() ? ResizeDirection.rtl : ResizeDirection.ltr;
};
var delta = function (amount, table) {
return auto(table).delta(amount, table);
};
var positions = function (cols, table) {
return auto(table).positions(cols, table);
};
var edge = function (cell) {
return auto(cell).edge(cell);
};
return {
delta: delta,
edge: edge,
positions: positions
};
}
var getGridSize = function (table) {
var input = DetailsList.fromTable(table);
var warehouse = Warehouse.generate(input);
return warehouse.grid();
};
var TableGridSize = { getGridSize: getGridSize };
var __assign = function () {
__assign = Object.assign || function __assign(t) {
for (var s, i = 1, n = arguments.length; i < n; i++) {
s = arguments[i];
for (var p in s)
if (Object.prototype.hasOwnProperty.call(s, p))
t[p] = s[p];
}
return t;
};
return __assign.apply(this, arguments);
};
var cat = function (arr) {
var r = [];
var push = function (x) {
r.push(x);
};
for (var i = 0; i < arr.length; i++) {
arr[i].each(push);
}
return r;
};
var findMap = function (arr, f) {
for (var i = 0; i < arr.length; i++) {
var r = f(arr[i], i);
if (r.isSome()) {
return r;
}
}
return Option.none();
};
var setIfNot = function (element, property, value, ignore) {
if (value === ignore) {
remove(element, property);
} else {
set(element, property, value);
}
};
var render = function (table, grid) {
var newRows = [];
var newCells = [];
var renderSection = function (gridSection, sectionName) {
var section = child$2(table, sectionName).getOrThunk(function () {
var tb = Element.fromTag(sectionName, owner(table).dom());
append(table, tb);
return tb;
});
empty(section);
var rows = map(gridSection, function (row) {
if (row.isNew()) {
newRows.push(row.element());
}
var tr = row.element();
empty(tr);
each(row.cells(), function (cell) {
if (cell.isNew()) {
newCells.push(cell.element());
}
setIfNot(cell.element(), 'colspan', cell.colspan(), 1);
setIfNot(cell.element(), 'rowspan', cell.rowspan(), 1);
append(tr, cell.element());
});
return tr;
});
append$1(section, rows);
};
var removeSection = function (sectionName) {
child$2(table, sectionName).each(remove$2);
};
var renderOrRemoveSection = function (gridSection, sectionName) {
if (gridSection.length > 0) {
renderSection(gridSection, sectionName);
} else {
removeSection(sectionName);
}
};
var headSection = [];
var bodySection = [];
var footSection = [];
each(grid, function (row) {
switch (row.section()) {
case 'thead':
headSection.push(row);
break;
case 'tbody':
bodySection.push(row);
break;
case 'tfoot':
footSection.push(row);
break;
}
});
renderOrRemoveSection(headSection, 'thead');
renderOrRemoveSection(bodySection, 'tbody');
renderOrRemoveSection(footSection, 'tfoot');
return {
newRows: constant(newRows),
newCells: constant(newCells)
};
};
var copy$2 = function (grid) {
var rows = map(grid, function (row) {
var tr = shallow(row.element());
each(row.cells(), function (cell) {
var clonedCell = deep(cell.element());
setIfNot(clonedCell, 'colspan', cell.colspan(), 1);
setIfNot(clonedCell, 'rowspan', cell.rowspan(), 1);
append(tr, clonedCell);
});
return tr;
});
return rows;
};
var Redraw = {
render: render,
copy: copy$2
};
var read = function (element, attr) {
var value = get(element, attr);
return value === undefined || value === '' ? [] : value.split(' ');
};
var add = function (element, attr, id) {
var old = read(element, attr);
var nu = old.concat([id]);
set(element, attr, nu.join(' '));
return true;
};
var remove$3 = function (element, attr, id) {
var nu = filter(read(element, attr), function (v) {
return v !== id;
});
if (nu.length > 0) {
set(element, attr, nu.join(' '));
} else {
remove(element, attr);
}
return false;
};
var supports = function (element) {
return element.dom().classList !== undefined;
};
var get$6 = function (element) {
return read(element, 'class');
};
var add$1 = function (element, clazz) {
return add(element, 'class', clazz);
};
var remove$4 = function (element, clazz) {
return remove$3(element, 'class', clazz);
};
var add$2 = function (element, clazz) {
if (supports(element)) {
element.dom().classList.add(clazz);
} else {
add$1(element, clazz);
}
};
var cleanClass = function (element) {
var classList = supports(element) ? element.dom().classList : get$6(element);
if (classList.length === 0) {
remove(element, 'class');
}
};
var remove$5 = function (element, clazz) {
if (supports(element)) {
var classList = element.dom().classList;
classList.remove(clazz);
} else {
remove$4(element, clazz);
}
cleanClass(element);
};
var has$1 = function (element, clazz) {
return supports(element) && element.dom().classList.contains(clazz);
};
var repeat = function (repititions, f) {
var r = [];
for (var i = 0; i < repititions; i++) {
r.push(f(i));
}
return r;
};
var range = function (start, end) {
var r = [];
for (var i = start; i < end; i++) {
r.push(i);
}
return r;
};
var deduce = function (xs, index) {
if (index < 0 || index >= xs.length - 1) {
return Option.none();
}
var current = xs[index].fold(function () {
var rest = reverse(xs.slice(0, index));
return findMap(rest, function (a, i) {
return a.map(function (aa) {
return {
value: aa,
delta: i + 1
};
});
});
}, function (c) {
return Option.some({
value: c,
delta: 0
});
});
var next = xs[index + 1].fold(function () {
var rest = xs.slice(index + 1);
return findMap(rest, function (a, i) {
return a.map(function (aa) {
return {
value: aa,
delta: i + 1
};
});
});
}, function (n) {
return Option.some({
value: n,
delta: 1
});
});
return current.bind(function (c) {
return next.map(function (n) {
var extras = n.delta + c.delta;
return Math.abs(n.value - c.value) / extras;
});
});
};
var columns = function (warehouse) {
var grid = warehouse.grid();
var cols = range(0, grid.columns());
var rowsArr = range(0, grid.rows());
return map(cols, function (col) {
var getBlock = function () {
return bind(rowsArr, function (r) {
return Warehouse.getAt(warehouse, r, col).filter(function (detail) {
return detail.column() === col;
}).fold(constant([]), function (detail) {
return [detail];
});
});
};
var isSingle = function (detail) {
return detail.colspan() === 1;
};
var getFallback = function () {
return Warehouse.getAt(warehouse, 0, col);
};
return decide(getBlock, isSingle, getFallback);
});
};
var decide = function (getBlock, isSingle, getFallback) {
var inBlock = getBlock();
var singleInBlock = find(inBlock, isSingle);
var detailOption = singleInBlock.orThunk(function () {
return Option.from(inBlock[0]).orThunk(getFallback);
});
return detailOption.map(function (detail) {
return detail.element();
});
};
var rows$1 = function (warehouse) {
var grid = warehouse.grid();
var rowsArr = range(0, grid.rows());
var cols = range(0, grid.columns());
return map(rowsArr, function (row) {
var getBlock = function () {
return bind(cols, function (c) {
return Warehouse.getAt(warehouse, row, c).filter(function (detail) {
return detail.row() === row;
}).fold(constant([]), function (detail) {
return [detail];
});
});
};
var isSingle = function (detail) {
return detail.rowspan() === 1;
};
var getFallback = function () {
return Warehouse.getAt(warehouse, row, 0);
};
return decide(getBlock, isSingle, getFallback);
});
};
var Blocks = {
columns: columns,
rows: rows$1
};
var css = function (namespace) {
var dashNamespace = namespace.replace(/\./g, '-');
var resolve = function (str) {
return dashNamespace + '-' + str;
};
return { resolve: resolve };
};
var styles = css('ephox-snooker');
var Styles = { resolve: styles.resolve };
var col = function (column, x, y, w, h) {
var blocker = Element.fromTag('div');
setAll$1(blocker, {
position: 'absolute',
left: x - w / 2 + 'px',
top: y + 'px',
height: h + 'px',
width: w + 'px'
});
setAll(blocker, {
'data-column': column,
'role': 'presentation'
});
return blocker;
};
var row$1 = function (r, x, y, w, h) {
var blocker = Element.fromTag('div');
setAll$1(blocker, {
position: 'absolute',
left: x + 'px',
top: y - h / 2 + 'px',
height: h + 'px',
width: w + 'px'
});
setAll(blocker, {
'data-row': r,
'role': 'presentation'
});
return blocker;
};
var Bar = {
col: col,
row: row$1
};
var resizeBar = Styles.resolve('resizer-bar');
var resizeRowBar = Styles.resolve('resizer-rows');
var resizeColBar = Styles.resolve('resizer-cols');
var BAR_THICKNESS = 7;
var destroy = function (wire) {
var previous = descendants$1(wire.parent(), '.' + resizeBar);
each(previous, remove$2);
};
var drawBar = function (wire, positions, create) {
var origin = wire.origin();
each(positions, function (cpOption, i) {
cpOption.each(function (cp) {
var bar = create(origin, cp);
add$2(bar, resizeBar);
append(wire.parent(), bar);
});
});
};
var refreshCol = function (wire, colPositions, position, tableHeight) {
drawBar(wire, colPositions, function (origin, cp) {
var colBar = Bar.col(cp.col(), cp.x() - origin.left(), position.top() - origin.top(), BAR_THICKNESS, tableHeight);
add$2(colBar, resizeColBar);
return colBar;
});
};
var refreshRow = function (wire, rowPositions, position, tableWidth) {
drawBar(wire, rowPositions, function (origin, cp) {
var rowBar = Bar.row(cp.row(), position.left() - origin.left(), cp.y() - origin.top(), tableWidth, BAR_THICKNESS);
add$2(rowBar, resizeRowBar);
return rowBar;
});
};
var refreshGrid = function (wire, table, rows, cols, hdirection, vdirection) {
var position = absolute(table);
var rowPositions = rows.length > 0 ? hdirection.positions(rows, table) : [];
refreshRow(wire, rowPositions, position, getOuter$1(table));
var colPositions = cols.length > 0 ? vdirection.positions(cols, table) : [];
refreshCol(wire, colPositions, position, getOuter(table));
};
var refresh = function (wire, table, hdirection, vdirection) {
destroy(wire);
var list = DetailsList.fromTable(table);
var warehouse = Warehouse.generate(list);
var rows = Blocks.rows(warehouse);
var cols = Blocks.columns(warehouse);
refreshGrid(wire, table, rows, cols, hdirection, vdirection);
};
var each$2 = function (wire, f) {
var bars = descendants$1(wire.parent(), '.' + resizeBar);
each(bars, f);
};
var hide = function (wire) {
each$2(wire, function (bar) {
set$1(bar, 'display', 'none');
});
};
var show = function (wire) {
each$2(wire, function (bar) {
set$1(bar, 'display', 'block');
});
};
var isRowBar = function (element) {
return has$1(element, resizeRowBar);
};
var isColBar = function (element) {
return has$1(element, resizeColBar);
};
var Bars = {
refresh: refresh,
hide: hide,
show: show,
destroy: destroy,
isRowBar: isRowBar,
isColBar: isColBar
};
var addCell = function (gridRow, index, cell) {
var cells = gridRow.cells();
var before = cells.slice(0, index);
var after = cells.slice(index);
var newCells = before.concat([cell]).concat(after);
return setCells(gridRow, newCells);
};
var mutateCell = function (gridRow, index, cell) {
var cells = gridRow.cells();
cells[index] = cell;
};
var setCells = function (gridRow, cells) {
return rowcells(cells, gridRow.section());
};
var mapCells = function (gridRow, f) {
var cells = gridRow.cells();
var r = map(cells, f);
return rowcells(r, gridRow.section());
};
var getCell = function (gridRow, index) {
return gridRow.cells()[index];
};
var getCellElement = function (gridRow, index) {
return getCell(gridRow, index).element();
};
var cellLength = function (gridRow) {
return gridRow.cells().length;
};
var GridRow = {
addCell: addCell,
setCells: setCells,
mutateCell: mutateCell,
getCell: getCell,
getCellElement: getCellElement,
mapCells: mapCells,
cellLength: cellLength
};
var getColumn = function (grid, index) {
return map(grid, function (row) {
return GridRow.getCell(row, index);
});
};
var getRow = function (grid, index) {
return grid[index];
};
var findDiff = function (xs, comp) {
if (xs.length === 0) {
return 0;
}
var first = xs[0];
var index = findIndex(xs, function (x) {
return !comp(first.element(), x.element());
});
return index.fold(function () {
return xs.length;
}, function (ind) {
return ind;
});
};
var subgrid = function (grid, row, column, comparator) {
var restOfRow = getRow(grid, row).cells().slice(column);
var endColIndex = findDiff(restOfRow, comparator);
var restOfColumn = getColumn(grid, column).slice(row);
var endRowIndex = findDiff(restOfColumn, comparator);
return {
colspan: constant(endColIndex),
rowspan: constant(endRowIndex)
};
};
var TableGrid = { subgrid: subgrid };
var toDetails = function (grid, comparator) {
var seen = map(grid, function (row, ri) {
return map(row.cells(), function (col, ci) {
return false;
});
});
var updateSeen = function (ri, ci, rowspan, colspan) {
for (var r = ri; r < ri + rowspan; r++) {
for (var c = ci; c < ci + colspan; c++) {
seen[r][c] = true;
}
}
};
return map(grid, function (row, ri) {
var details = bind(row.cells(), function (cell, ci) {
if (seen[ri][ci] === false) {
var result = TableGrid.subgrid(grid, ri, ci, comparator);
updateSeen(ri, ci, result.rowspan(), result.colspan());
return [detailnew(cell.element(), result.rowspan(), result.colspan(), cell.isNew())];
} else {
return [];
}
});
return rowdetails(details, row.section());
});
};
var toGrid = function (warehouse, generators, isNew) {
var grid = [];
for (var i = 0; i < warehouse.grid().rows(); i++) {
var rowCells = [];
for (var j = 0; j < warehouse.grid().columns(); j++) {
var element = Warehouse.getAt(warehouse, i, j).map(function (item) {
return elementnew(item.element(), isNew);
}).getOrThunk(function () {
return elementnew(generators.gap(), true);
});
rowCells.push(element);
}
var row = rowcells(rowCells, warehouse.all()[i].section());
grid.push(row);
}
return grid;
};
var Transitions = {
toDetails: toDetails,
toGrid: toGrid
};
var fromWarehouse = function (warehouse, generators) {
return Transitions.toGrid(warehouse, generators, false);
};
var deriveRows = function (rendered, generators) {
var findRow = function (details) {
var rowOfCells = findMap(details, function (detail) {
return parent(detail.element()).map(function (row) {
var isNew = parent(row).isNone();
return elementnew(row, isNew);
});
});
return rowOfCells.getOrThunk(function () {
return elementnew(generators.row(), true);
});
};
return map(rendered, function (details) {
var row = findRow(details.details());
return rowdatanew(row.element(), details.details(), details.section(), row.isNew());
});
};
var toDetailList = function (grid, generators) {
var rendered = Transitions.toDetails(grid, eq);
return deriveRows(rendered, generators);
};
var findInWarehouse = function (warehouse, element) {
var all = flatten(map(warehouse.all(), function (r) {
return r.cells();
}));
return find(all, function (e) {
return eq(element, e.element());
});
};
var run = function (operation, extract, adjustment, postAction, genWrappers) {
return function (wire, table, target, generators, direction) {
var input = DetailsList.fromTable(table);
var warehouse = Warehouse.generate(input);
var output = extract(warehouse, target).map(function (info) {
var model = fromWarehouse(warehouse, generators);
var result = operation(model, info, eq, genWrappers(generators));
var grid = toDetailList(result.grid(), generators);
return {
grid: constant(grid),
cursor: result.cursor
};
});
return output.fold(function () {
return Option.none();
}, function (out) {
var newElements = Redraw.render(table, out.grid());
adjustment(table, out.grid(), direction);
postAction(table);
Bars.refresh(wire, table, BarPositions.height, direction);
return Option.some({
cursor: out.cursor,
newRows: newElements.newRows,
newCells: newElements.newCells
});
});
};
};
var onCell = function (warehouse, target) {
return TableLookup.cell(target.element()).bind(function (cell) {
return findInWarehouse(warehouse, cell);
});
};
var onPaste = function (warehouse, target) {
return TableLookup.cell(target.element()).bind(function (cell) {
return findInWarehouse(warehouse, cell).map(function (details) {
var value = __assign(__assign({}, details), {
generators: target.generators,
clipboard: target.clipboard
});
return value;
});
});
};
var onPasteRows = function (warehouse, target) {
var details = map(target.selection(), function (cell) {
return TableLookup.cell(cell).bind(function (lc) {
return findInWarehouse(warehouse, lc);
});
});
var cells = cat(details);
return cells.length > 0 ? Option.some({
cells: cells,
generators: target.generators,
clipboard: target.clipboard
}) : Option.none();
};
var onMergable = function (_warehouse, target) {
return target.mergable();
};
var onUnmergable = function (_warehouse, target) {
return target.unmergable();
};
var onCells = function (warehouse, target) {
var details = map(target.selection(), function (cell) {
return TableLookup.cell(cell).bind(function (lc) {
return findInWarehouse(warehouse, lc);
});
});
var cells = cat(details);
return cells.length > 0 ? Option.some(cells) : Option.none();
};
var value = function (o) {
var is = function (v) {
return o === v;
};
var or = function (opt) {
return value(o);
};
var orThunk = function (f) {
return value(o);
};
var map = function (f) {
return value(f(o));
};
var mapError = function (f) {
return value(o);
};
var each = function (f) {
f(o);
};
var bind = function (f) {
return f(o);
};
var fold = function (_, onValue) {
return onValue(o);
};
var exists = function (f) {
return f(o);
};
var forall = function (f) {
return f(o);
};
var toOption = function () {
return Option.some(o);
};
return {
is: is,
isValue: always,
isError: never,
getOr: constant(o),
getOrThunk: constant(o),
getOrDie: constant(o),
or: or,
orThunk: orThunk,
fold: fold,
map: map,
mapError: mapError,
each: each,
bind: bind,
exists: exists,
forall: forall,
toOption: toOption
};
};
var error = function (message) {
var getOrThunk = function (f) {
return f();
};
var getOrDie = function () {
return die(String(message))();
};
var or = function (opt) {
return opt;
};
var orThunk = function (f) {
return f();
};
var map = function (f) {
return error(message);
};
var mapError = function (f) {
return error(f(message));
};
var bind = function (f) {
return error(message);
};
var fold = function (onError, _) {
return onError(message);
};
return {
is: never,
isValue: never,
isError: always,
getOr: identity,
getOrThunk: getOrThunk,
getOrDie: getOrDie,
or: or,
orThunk: orThunk,
fold: fold,
map: map,
mapError: mapError,
each: noop,
bind: bind,
exists: never,
forall: always,
toOption: Option.none
};
};
var fromOption = function (opt, err) {
return opt.fold(function () {
return error(err);
}, value);
};
var Result = {
value: value,
error: error,
fromOption: fromOption
};
var measure = function (startAddress, gridA, gridB) {
if (startAddress.row() >= gridA.length || startAddress.column() > GridRow.cellLength(gridA[0])) {
return Result.error('invalid start address out of table bounds, row: ' + startAddress.row() + ', column: ' + startAddress.column());
}
var rowRemainder = gridA.slice(startAddress.row());
var colRemainder = rowRemainder[0].cells().slice(startAddress.column());
var colRequired = GridRow.cellLength(gridB[0]);
var rowRequired = gridB.length;
return Result.value({
rowDelta: constant(rowRemainder.length - rowRequired),
colDelta: constant(colRemainder.length - colRequired)
});
};
var measureWidth = function (gridA, gridB) {
var colLengthA = GridRow.cellLength(gridA[0]);
var colLengthB = GridRow.cellLength(gridB[0]);
return {
rowDelta: constant(0),
colDelta: constant(colLengthA - colLengthB)
};
};
var fill = function (cells, generator) {
return map(cells, function () {
return elementnew(generator.cell(), true);
});
};
var rowFill = function (grid, amount, generator) {
return grid.concat(repeat(amount, function (_row) {
return GridRow.setCells(grid[grid.length - 1], fill(grid[grid.length - 1].cells(), generator));
}));
};
var colFill = function (grid, amount, generator) {
return map(grid, function (row) {
return GridRow.setCells(row, row.cells().concat(fill(range(0, amount), generator)));
});
};
var tailor = function (gridA, delta, generator) {
var fillCols = delta.colDelta() < 0 ? colFill : identity;
var fillRows = delta.rowDelta() < 0 ? rowFill : identity;
var modifiedCols = fillCols(gridA, Math.abs(delta.colDelta()), generator);
var tailoredGrid = fillRows(modifiedCols, Math.abs(delta.rowDelta()), generator);
return tailoredGrid;
};
var Fitment = {
measure: measure,
measureWidth: measureWidth,
tailor: tailor
};
var merge = function (grid, bounds, comparator, substitution) {
if (grid.length === 0) {
return grid;
}
for (var i = bounds.startRow(); i <= bounds.finishRow(); i++) {
for (var j = bounds.startCol(); j <= bounds.finishCol(); j++) {
GridRow.mutateCell(grid[i], j, elementnew(substitution(), false));
}
}
return grid;
};
var unmerge = function (grid, target, comparator, substitution) {
var first = true;
for (var i = 0; i < grid.length; i++) {
for (var j = 0; j < GridRow.cellLength(grid[0]); j++) {
var current = GridRow.getCellElement(grid[i], j);
var isToReplace = comparator(current, target);
if (isToReplace === true && first === false) {
GridRow.mutateCell(grid[i], j, elementnew(substitution(), true));
} else if (isToReplace === true) {
first = false;
}
}
}
return grid;
};
var uniqueCells = function (row, comparator) {
return foldl(row, function (rest, cell) {
return exists(rest, function (currentCell) {
return comparator(currentCell.element(), cell.element());
}) ? rest : rest.concat([cell]);
}, []);
};
var splitRows = function (grid, index, comparator, substitution) {
if (index > 0 && index < grid.length) {
var rowPrevCells = grid[index - 1].cells();
var cells = uniqueCells(rowPrevCells, comparator);
each(cells, function (cell) {
var replacement = Option.none();
var _loop_1 = function (i) {
var _loop_2 = function (j) {
var current = grid[i].cells()[j];
var isToReplace = comparator(current.element(), cell.element());
if (isToReplace) {
if (replacement.isNone()) {
replacement = Option.some(substitution());
}
replacement.each(function (sub) {
GridRow.mutateCell(grid[i], j, elementnew(sub, true));
});
}
};
for (var j = 0; j < GridRow.cellLength(grid[0]); j++) {
_loop_2(j);
}
};
for (var i = index; i < grid.length; i++) {
_loop_1(i);
}
});
}
return grid;
};
var MergingOperations = {
merge: merge,
unmerge: unmerge,
splitRows: splitRows
};
var isSpanning = function (grid, row, col, comparator) {
var candidate = GridRow.getCell(grid[row], col);
var matching = curry(comparator, candidate.element());
var currentRow = grid[row];
return grid.length > 1 && GridRow.cellLength(currentRow) > 1 && (col > 0 && matching(GridRow.getCellElement(currentRow, col - 1)) || col < currentRow.cells().length - 1 && matching(GridRow.getCellElement(currentRow, col + 1)) || row > 0 && matching(GridRow.getCellElement(grid[row - 1], col)) || row < grid.length - 1 && matching(GridRow.getCellElement(grid[row + 1], col)));
};
var mergeTables = function (startAddress, gridA, gridB, generator, comparator) {
var startRow = startAddress.row();
var startCol = startAddress.column();
var mergeHeight = gridB.length;
var mergeWidth = GridRow.cellLength(gridB[0]);
var endRow = startRow + mergeHeight;
var endCol = startCol + mergeWidth;
for (var r = startRow; r < endRow; r++) {
for (var c = startCol; c < endCol; c++) {
if (isSpanning(gridA, r, c, comparator)) {
MergingOperations.unmerge(gridA, GridRow.getCellElement(gridA[r], c), comparator, generator.cell);
}
var newCell = GridRow.getCellElement(gridB[r - startRow], c - startCol);
var replacement = generator.replace(newCell);
GridRow.mutateCell(gridA[r], c, elementnew(replacement, true));
}
}
return gridA;
};
var merge$1 = function (startAddress, gridA, gridB, generator, comparator) {
var result = Fitment.measure(startAddress, gridA, gridB);
return result.map(function (delta) {
var fittedGrid = Fitment.tailor(gridA, delta, generator);
return mergeTables(startAddress, fittedGrid, gridB, generator, comparator);
});
};
var insert = function (index, gridA, gridB, generator, comparator) {
MergingOperations.splitRows(gridA, index, comparator, generator.cell);
var delta = Fitment.measureWidth(gridB, gridA);
var fittedNewGrid = Fitment.tailor(gridB, delta, generator);
var secondDelta = Fitment.measureWidth(gridA, fittedNewGrid);
var fittedOldGrid = Fitment.tailor(gridA, secondDelta, generator);
return fittedOldGrid.slice(0, index).concat(fittedNewGrid).concat(fittedOldGrid.slice(index, fittedOldGrid.length));
};
var TableMerge = {
merge: merge$1,
insert: insert
};
var insertRowAt = function (grid, index, example, comparator, substitution) {
var before = grid.slice(0, index);
var after = grid.slice(index);
var between = GridRow.mapCells(grid[example], function (ex, c) {
var withinSpan = index > 0 && index < grid.length && comparator(GridRow.getCellElement(grid[index - 1], c), GridRow.getCellElement(grid[index], c));
var ret = withinSpan ? GridRow.getCell(grid[index], c) : elementnew(substitution(ex.element(), comparator), true);
return ret;
});
return before.concat([between]).concat(after);
};
var insertColumnAt = function (grid, index, example, comparator, substitution) {
return map(grid, function (row) {
var withinSpan = index > 0 && index < GridRow.cellLength(row) && comparator(GridRow.getCellElement(row, index - 1), GridRow.getCellElement(row, index));
var sub = withinSpan ? GridRow.getCell(row, index) : elementnew(substitution(GridRow.getCellElement(row, example), comparator), true);
return GridRow.addCell(row, index, sub);
});
};
var splitCellIntoColumns = function (grid, exampleRow, exampleCol, comparator, substitution) {
var index = exampleCol + 1;
return map(grid, function (row, i) {
var isTargetCell = i === exampleRow;
var sub = isTargetCell ? elementnew(substitution(GridRow.getCellElement(row, exampleCol), comparator), true) : GridRow.getCell(row, exampleCol);
return GridRow.addCell(row, index, sub);
});
};
var splitCellIntoRows = function (grid, exampleRow, exampleCol, comparator, substitution) {
var index = exampleRow + 1;
var before = grid.slice(0, index);
var after = grid.slice(index);
var between = GridRow.mapCells(grid[exampleRow], function (ex, i) {
var isTargetCell = i === exampleCol;
return isTargetCell ? elementnew(substitution(ex.element(), comparator), true) : ex;
});
return before.concat([between]).concat(after);
};
var deleteColumnsAt = function (grid, start, finish) {
var rows = map(grid, function (row) {
var cells = row.cells().slice(0, start).concat(row.cells().slice(finish + 1));
return rowcells(cells, row.section());
});
return filter(rows, function (row) {
return row.cells().length > 0;
});
};
var deleteRowsAt = function (grid, start, finish) {
return grid.slice(0, start).concat(grid.slice(finish + 1));
};
var ModificationOperations = {
insertRowAt: insertRowAt,
insertColumnAt: insertColumnAt,
splitCellIntoColumns: splitCellIntoColumns,
splitCellIntoRows: splitCellIntoRows,
deleteRowsAt: deleteRowsAt,
deleteColumnsAt: deleteColumnsAt
};
var replaceIn = function (grid, targets, comparator, substitution) {
var isTarget = function (cell) {
return exists(targets, function (target) {
return comparator(cell.element(), target.element());
});
};
return map(grid, function (row) {
return GridRow.mapCells(row, function (cell) {
return isTarget(cell) ? elementnew(substitution(cell.element(), comparator), true) : cell;
});
});
};
var notStartRow = function (grid, rowIndex, colIndex, comparator) {
return GridRow.getCellElement(grid[rowIndex], colIndex) !== undefined && (rowIndex > 0 && comparator(GridRow.getCellElement(grid[rowIndex - 1], colIndex), GridRow.getCellElement(grid[rowIndex], colIndex)));
};
var notStartColumn = function (row, index, comparator) {
return index > 0 && comparator(GridRow.getCellElement(row, index - 1), GridRow.getCellElement(row, index));
};
var replaceColumn = function (grid, index, comparator, substitution) {
var targets = bind(grid, function (row, i) {
var alreadyAdded = notStartRow(grid, i, index, comparator) || notStartColumn(row, index, comparator);
return alreadyAdded ? [] : [GridRow.getCell(row, index)];
});
return replaceIn(grid, targets, comparator, substitution);
};
var replaceRow = function (grid, index, comparator, substitution) {
var targetRow = grid[index];
var targets = bind(targetRow.cells(), function (item, i) {
var alreadyAdded = notStartRow(grid, index, i, comparator) || notStartColumn(targetRow, i, comparator);
return alreadyAdded ? [] : [item];
});
return replaceIn(grid, targets, comparator, substitution);
};
var TransformOperations = {
replaceColumn: replaceColumn,
replaceRow: replaceRow
};
var adt = Adt.generate([
{ none: [] },
{ only: ['index'] },
{
left: [
'index',
'next'
]
},
{
middle: [
'prev',
'index',
'next'
]
},
{
right: [
'prev',
'index'
]
}
]);
var ColumnContext = __assign({}, adt);
var neighbours$1 = function (input, index) {
if (input.length === 0) {
return ColumnContext.none();
}
if (input.length === 1) {
return ColumnContext.only(0);
}
if (index === 0) {
return ColumnContext.left(0, 1);
}
if (index === input.length - 1) {
return ColumnContext.right(index - 1, index);
}
if (index > 0 && index < input.length - 1) {
return ColumnContext.middle(index - 1, index, index + 1);
}
return ColumnContext.none();
};
var determine = function (input, column, step, tableSize) {
var result = input.slice(0);
var context = neighbours$1(input, column);
var zero = function (array) {
return map(array, constant(0));
};
var onNone = constant(zero(result));
var onOnly = function (index) {
return tableSize.singleColumnWidth(result[index], step);
};
var onChange = function (index, next) {
if (step >= 0) {
var newNext = Math.max(tableSize.minCellWidth(), result[next] - step);
return zero(result.slice(0, index)).concat([
step,
newNext - result[next]
]).concat(zero(result.slice(next + 1)));
} else {
var newThis = Math.max(tableSize.minCellWidth(), result[index] + step);
var diffx = result[index] - newThis;
return zero(result.slice(0, index)).concat([
newThis - result[index],
diffx
]).concat(zero(result.slice(next + 1)));
}
};
var onLeft = onChange;
var onMiddle = function (_prev, index, next) {
return onChange(index, next);
};
var onRight = function (_prev, index) {
if (step >= 0) {
return zero(result.slice(0, index)).concat([step]);
} else {
var size = Math.max(tableSize.minCellWidth(), result[index] + step);
return zero(result.slice(0, index)).concat([size - result[index]]);
}
};
return context.fold(onNone, onOnly, onLeft, onMiddle, onRight);
};
var Deltas = { determine: determine };
var getSpan$1 = function (cell, type) {
return has(cell, type) && parseInt(get(cell, type), 10) > 1;
};
var hasColspan = function (cell) {
return getSpan$1(cell, 'colspan');
};
var hasRowspan = function (cell) {
return getSpan$1(cell, 'rowspan');
};
var getInt = function (element, property) {
return parseInt(get$1(element, property), 10);
};
var CellUtils = {
hasColspan: hasColspan,
hasRowspan: hasRowspan,
minWidth: constant(10),
minHeight: constant(10),
getInt: getInt
};
var getRaw$1 = function (cell, property, getter) {
return getRaw(cell, property).fold(function () {
return getter(cell) + 'px';
}, function (raw) {
return raw;
});
};
var getRawW = function (cell, tableSize) {
return getRaw$1(cell, 'width', function (e) {
return Sizes.getPixelWidth(e, tableSize);
});
};
var getRawH = function (cell) {
return getRaw$1(cell, 'height', Sizes.getHeight);
};
var getWidthFrom = function (warehouse, direction, getWidth, fallback, tableSize) {
var columns = Blocks.columns(warehouse);
var backups = map(columns, function (cellOption) {
return cellOption.map(direction.edge);
});
return map(columns, function (cellOption, c) {
var columnCell = cellOption.filter(not(CellUtils.hasColspan));
return columnCell.fold(function () {
var deduced = deduce(backups, c);
return fallback(deduced);
}, function (cell) {
return getWidth(cell, tableSize);
});
});
};
var getDeduced = function (deduced) {
return deduced.map(function (d) {
return d + 'px';
}).getOr('');
};
var getRawWidths = function (warehouse, direction, tableSize) {
return getWidthFrom(warehouse, direction, getRawW, getDeduced, tableSize);
};
var getPercentageWidths = function (warehouse, direction, tableSize) {
return getWidthFrom(warehouse, direction, Sizes.getPercentageWidth, function (deduced) {
return deduced.fold(function () {
return tableSize.minCellWidth();
}, function (cellWidth) {
return cellWidth / tableSize.pixelWidth() * 100;
});
}, tableSize);
};
var getPixelWidths = function (warehouse, direction, tableSize) {
return getWidthFrom(warehouse, direction, Sizes.getPixelWidth, function (deduced) {
return deduced.getOrThunk(tableSize.minCellWidth);
}, tableSize);
};
var getHeightFrom = function (warehouse, direction, getHeight, fallback) {
var rows = Blocks.rows(warehouse);
var backups = map(rows, function (cellOption) {
return cellOption.map(direction.edge);
});
return map(rows, function (cellOption, c) {
var rowCell = cellOption.filter(not(CellUtils.hasRowspan));
return rowCell.fold(function () {
var deduced = deduce(backups, c);
return fallback(deduced);
}, function (cell) {
return getHeight(cell);
});
});
};
var getPixelHeights = function (warehouse, direction) {
return getHeightFrom(warehouse, direction, Sizes.getHeight, function (deduced) {
return deduced.getOrThunk(CellUtils.minHeight);
});
};
var getRawHeights = function (warehouse, direction) {
return getHeightFrom(warehouse, direction, getRawH, getDeduced);
};
var ColumnSizes = {
getRawWidths: getRawWidths,
getPixelWidths: getPixelWidths,
getPercentageWidths: getPercentageWidths,
getPixelHeights: getPixelHeights,
getRawHeights: getRawHeights
};
var total = function (start, end, measures) {
var r = 0;
for (var i = start; i < end; i++) {
r += measures[i] !== undefined ? measures[i] : 0;
}
return r;
};
var recalculateWidth = function (warehouse, widths) {
var all = Warehouse.justCells(warehouse);
return map(all, function (cell) {
var width = total(cell.column(), cell.column() + cell.colspan(), widths);
return {
element: cell.element,
width: constant(width),
colspan: cell.colspan
};
});
};
var recalculateHeight = function (warehouse, heights) {
var all = Warehouse.justCells(warehouse);
return map(all, function (cell) {
var height = total(cell.row(), cell.row() + cell.rowspan(), heights);
return {
element: cell.element,
height: constant(height),
rowspan: cell.rowspan
};
});
};
var matchRowHeight = function (warehouse, heights) {
return map(warehouse.all(), function (row, i) {
return {
element: row.element,
height: constant(heights[i])
};
});
};
var Recalculations = {
recalculateWidth: recalculateWidth,
recalculateHeight: recalculateHeight,
matchRowHeight: matchRowHeight
};
var percentageSize = function (width, element) {
var floatWidth = parseFloat(width);
var pixelWidth = get$4(element);
var getCellDelta = function (delta) {
return delta / pixelWidth * 100;
};
var singleColumnWidth = function (w, _delta) {
return [100 - w];
};
var minCellWidth = function () {
return CellUtils.minWidth() / pixelWidth * 100;
};
var setTableWidth = function (table, _newWidths, delta) {
var ratio = delta / 100;
var change = ratio * floatWidth;
Sizes.setPercentageWidth(table, floatWidth + change);
};
return {
width: constant(floatWidth),
pixelWidth: constant(pixelWidth),
getWidths: ColumnSizes.getPercentageWidths,
getCellDelta: getCellDelta,
singleColumnWidth: singleColumnWidth,
minCellWidth: minCellWidth,
setElementWidth: Sizes.setPercentageWidth,
setTableWidth: setTableWidth
};
};
var pixelSize = function (width) {
var getCellDelta = identity;
var singleColumnWidth = function (w, delta) {
var newNext = Math.max(CellUtils.minWidth(), w + delta);
return [newNext - w];
};
var setTableWidth = function (table, newWidths, _delta) {
var total = foldr(newWidths, function (b, a) {
return b + a;
}, 0);
Sizes.setPixelWidth(table, total);
};
return {
width: constant(width),
pixelWidth: constant(width),
getWidths: ColumnSizes.getPixelWidths,
getCellDelta: getCellDelta,
singleColumnWidth: singleColumnWidth,
minCellWidth: CellUtils.minWidth,
setElementWidth: Sizes.setPixelWidth,
setTableWidth: setTableWidth
};
};
var chooseSize = function (element, width) {
var percentMatch = Sizes.percentageBasedSizeRegex().exec(width);
if (percentMatch !== null) {
return percentageSize(percentMatch[1], element);
}
var pixelMatch = Sizes.pixelBasedSizeRegex().exec(width);
if (pixelMatch !== null) {
var intWidth = parseInt(pixelMatch[1], 10);
return pixelSize(intWidth);
}
var fallbackWidth = get$4(element);
return pixelSize(fallbackWidth);
};
var getTableSize = function (element) {
var width = Sizes.getRawWidth(element);
return width.fold(function () {
var fallbackWidth = get$4(element);
return pixelSize(fallbackWidth);
}, function (w) {
return chooseSize(element, w);
});
};
var TableSize = { getTableSize: getTableSize };
var getWarehouse$1 = function (list) {
return Warehouse.generate(list);
};
var sumUp = function (newSize) {
return foldr(newSize, function (b, a) {
return b + a;
}, 0);
};
var getTableWarehouse = function (table) {
var list = DetailsList.fromTable(table);
return getWarehouse$1(list);
};
var adjustWidth = function (table, delta, index, direction) {
var tableSize = TableSize.getTableSize(table);
var step = tableSize.getCellDelta(delta);
var warehouse = getTableWarehouse(table);
var widths = tableSize.getWidths(warehouse, direction, tableSize);
var deltas = Deltas.determine(widths, index, step, tableSize);
var newWidths = map(deltas, function (dx, i) {
return dx + widths[i];
});
var newSizes = Recalculations.recalculateWidth(warehouse, newWidths);
each(newSizes, function (cell) {
tableSize.setElementWidth(cell.element(), cell.width());
});
if (index === warehouse.grid().columns() - 1) {
tableSize.setTableWidth(table, newWidths, step);
}
};
var adjustHeight = function (table, delta, index, direction) {
var warehouse = getTableWarehouse(table);
var heights = ColumnSizes.getPixelHeights(warehouse, direction);
var newHeights = map(heights, function (dy, i) {
return index === i ? Math.max(delta + dy, CellUtils.minHeight()) : dy;
});
var newCellSizes = Recalculations.recalculateHeight(warehouse, newHeights);
var newRowSizes = Recalculations.matchRowHeight(warehouse, newHeights);
each(newRowSizes, function (row) {
Sizes.setHeight(row.element(), row.height());
});
each(newCellSizes, function (cell) {
Sizes.setHeight(cell.element(), cell.height());
});
var total = sumUp(newHeights);
Sizes.setHeight(table, total);
};
var adjustWidthTo = function (table, list, direction) {
var tableSize = TableSize.getTableSize(table);
var warehouse = getWarehouse$1(list);
var widths = tableSize.getWidths(warehouse, direction, tableSize);
var newSizes = Recalculations.recalculateWidth(warehouse, widths);
each(newSizes, function (cell) {
tableSize.setElementWidth(cell.element(), cell.width());
});
if (newSizes.length > 0) {
tableSize.setTableWidth(table, widths, tableSize.getCellDelta(0));
}
};
var Adjustments = {
adjustWidth: adjustWidth,
adjustHeight: adjustHeight,
adjustWidthTo: adjustWidthTo
};
var Cell = function (initial) {
var value = initial;
var get = function () {
return value;
};
var set = function (v) {
value = v;
};
var clone = function () {
return Cell(get());
};
return {
get: get,
set: set,
clone: clone
};
};
var base = function (handleUnsupported, required) {
return baseWith(handleUnsupported, required, {
validate: isFunction,
label: 'function'
});
};
var baseWith = function (handleUnsupported, required, pred) {
if (required.length === 0) {
throw new Error('You must specify at least one required field.');
}
validateStrArr('required', required);
checkDupes(required);
return function (obj) {
var keys$1 = keys(obj);
var allReqd = forall(required, function (req) {
return contains(keys$1, req);
});
if (!allReqd) {
reqMessage(required, keys$1);
}
handleUnsupported(required, keys$1);
var invalidKeys = filter(required, function (key) {
return !pred.validate(obj[key], key);
});
if (invalidKeys.length > 0) {
invalidTypeMessage(invalidKeys, pred.label);
}
return obj;
};
};
var handleExact = function (required, keys) {
var unsupported = filter(keys, function (key) {
return !contains(required, key);
});
if (unsupported.length > 0) {
unsuppMessage(unsupported);
}
};
var exactly = function (required) {
return base(handleExact, required);
};
var verifyGenerators = exactly([
'cell',
'row',
'replace',
'gap'
]);
var elementToData = function (element) {
var colspan = has(element, 'colspan') ? parseInt(get(element, 'colspan'), 10) : 1;
var rowspan = has(element, 'rowspan') ? parseInt(get(element, 'rowspan'), 10) : 1;
return {
element: constant(element),
colspan: constant(colspan),
rowspan: constant(rowspan)
};
};
var modification = function (generators, toData) {
if (toData === void 0) {
toData = elementToData;
}
verifyGenerators(generators);
var position = Cell(Option.none());
var nu = function (data) {
return generators.cell(data);
};
var nuFrom = function (element) {
var data = toData(element);
return nu(data);
};
var add = function (element) {
var replacement = nuFrom(element);
if (position.get().isNone()) {
position.set(Option.some(replacement));
}
recent = Option.some({
item: element,
replacement: replacement
});
return replacement;
};
var recent = Option.none();
var getOrInit = function (element, comparator) {
return recent.fold(function () {
return add(element);
}, function (p) {
return comparator(element, p.item) ? p.replacement : add(element);
});
};
return {
getOrInit: getOrInit,
cursor: position.get
};
};
var transform = function (scope, tag) {
return function (generators) {
var position = Cell(Option.none());
verifyGenerators(generators);
var list = [];
var find$1 = function (element, comparator) {
return find(list, function (x) {
return comparator(x.item, element);
});
};
var makeNew = function (element) {
var attrs = { scope: scope };
var cell = generators.replace(element, tag, attrs);
list.push({
item: element,
sub: cell
});
if (position.get().isNone()) {
position.set(Option.some(cell));
}
return cell;
};
var replaceOrInit = function (element, comparator) {
return find$1(element, comparator).fold(function () {
return makeNew(element);
}, function (p) {
return comparator(element, p.item) ? p.sub : makeNew(element);
});
};
return {
replaceOrInit: replaceOrInit,
cursor: position.get
};
};
};
var merging = function (generators) {
verifyGenerators(generators);
var position = Cell(Option.none());
var combine = function (cell) {
if (position.get().isNone()) {
position.set(Option.some(cell));
}
return function () {
var raw = generators.cell({
element: constant(cell),
colspan: constant(1),
rowspan: constant(1)
});
remove$1(raw, 'width');
remove$1(cell, 'width');
return raw;
};
};
return {
combine: combine,
cursor: position.get
};
};
var Generators = {
modification: modification,
transform: transform,
merging: merging
};
var blockList = [
'body',
'p',
'div',
'article',
'aside',
'figcaption',
'figure',
'footer',
'header',
'nav',
'section',
'ol',
'ul',
'table',
'thead',
'tfoot',
'tbody',
'caption',
'tr',
'td',
'th',
'h1',
'h2',
'h3',
'h4',
'h5',
'h6',
'blockquote',
'pre',
'address'
];
var isList = function (universe, item) {
var tagName = universe.property().name(item);
return contains([
'ol',
'ul'
], tagName);
};
var isBlock = function (universe, item) {
var tagName = universe.property().name(item);
return contains(blockList, tagName);
};
var isFormatting = function (universe, item) {
var tagName = universe.property().name(item);
return contains([
'address',
'pre',
'p',
'h1',
'h2',
'h3',
'h4',
'h5',
'h6'
], tagName);
};
var isHeading = function (universe, item) {
var tagName = universe.property().name(item);
return contains([
'h1',
'h2',
'h3',
'h4',
'h5',
'h6'
], tagName);
};
var isContainer = function (universe, item) {
return contains([
'div',
'li',
'td',
'th',
'blockquote',
'body',
'caption'
], universe.property().name(item));
};
var isEmptyTag = function (universe, item) {
return contains([
'br',
'img',
'hr',
'input'
], universe.property().name(item));
};
var isFrame = function (universe, item) {
return universe.property().name(item) === 'iframe';
};
var isInline = function (universe, item) {
return !(isBlock(universe, item) || isEmptyTag(universe, item)) && universe.property().name(item) !== 'li';
};
var Structure = {
isBlock: isBlock,
isList: isList,
isFormatting: isFormatting,
isHeading: isHeading,
isContainer: isContainer,
isEmptyTag: isEmptyTag,
isFrame: isFrame,
isInline: isInline
};
var universe$1 = DomUniverse();
var isBlock$1 = function (element) {
return Structure.isBlock(universe$1, element);
};
var isList$1 = function (element) {
return Structure.isList(universe$1, element);
};
var isFormatting$1 = function (element) {
return Structure.isFormatting(universe$1, element);
};
var isHeading$1 = function (element) {
return Structure.isHeading(universe$1, element);
};
var isContainer$1 = function (element) {
return Structure.isContainer(universe$1, element);
};
var isEmptyTag$1 = function (element) {
return Structure.isEmptyTag(universe$1, element);
};
var isFrame$1 = function (element) {
return Structure.isFrame(universe$1, element);
};
var isInline$1 = function (element) {
return Structure.isInline(universe$1, element);
};
var DomStructure = {
isBlock: isBlock$1,
isList: isList$1,
isFormatting: isFormatting$1,
isHeading: isHeading$1,
isContainer: isContainer$1,
isEmptyTag: isEmptyTag$1,
isFrame: isFrame$1,
isInline: isInline$1
};
var merge$2 = function (cells) {
var isBr = function (el) {
return name(el) === 'br';
};
var advancedBr = function (children) {
return forall(children, function (c) {
return isBr(c) || isText(c) && get$2(c).trim().length === 0;
});
};
var isListItem = function (el) {
return name(el) === 'li' || ancestor(el, DomStructure.isList).isSome();
};
var siblingIsBlock = function (el) {
return nextSibling(el).map(function (rightSibling) {
if (DomStructure.isBlock(rightSibling)) {
return true;
}
if (DomStructure.isEmptyTag(rightSibling)) {
return name(rightSibling) === 'img' ? false : true;
}
return false;
}).getOr(false);
};
var markCell = function (cell) {
return last$1(cell).bind(function (rightEdge) {
var rightSiblingIsBlock = siblingIsBlock(rightEdge);
return parent(rightEdge).map(function (parent) {
return rightSiblingIsBlock === true || isListItem(parent) || isBr(rightEdge) || DomStructure.isBlock(parent) && !eq(cell, parent) ? [] : [Element.fromTag('br')];
});
}).getOr([]);
};
var markContent = function () {
var content = bind(cells, function (cell) {
var children$1 = children(cell);
return advancedBr(children$1) ? [] : children$1.concat(markCell(cell));
});
return content.length === 0 ? [Element.fromTag('br')] : content;
};
var contents = markContent();
empty(cells[0]);
append$1(cells[0], contents);
};
var TableContent = { merge: merge$2 };
var prune = function (table) {
var cells = TableLookup.cells(table);
if (cells.length === 0) {
remove$2(table);
}
};
var outcome = Immutable('grid', 'cursor');
var elementFromGrid = function (grid, row, column) {
return findIn(grid, row, column).orThunk(function () {
return findIn(grid, 0, 0);
});
};
var findIn = function (grid, row, column) {
return Option.from(grid[row]).bind(function (r) {
return Option.from(r.cells()[column]).bind(function (c) {
return Option.from(c.element());
});
});
};
var bundle = function (grid, row, column) {
return outcome(grid, findIn(grid, row, column));
};
var uniqueRows = function (details) {
return foldl(details, function (rest, detail) {
return exists(rest, function (currentDetail) {
return currentDetail.row() === detail.row();
}) ? rest : rest.concat([detail]);
}, []).sort(function (detailA, detailB) {
return detailA.row() - detailB.row();
});
};
var uniqueColumns = function (details) {
return foldl(details, function (rest, detail) {
return exists(rest, function (currentDetail) {
return currentDetail.column() === detail.column();
}) ? rest : rest.concat([detail]);
}, []).sort(function (detailA, detailB) {
return detailA.column() - detailB.column();
});
};
var insertRowBefore = function (grid, detail, comparator, genWrappers) {
var example = detail.row();
var targetIndex = detail.row();
var newGrid = ModificationOperations.insertRowAt(grid, targetIndex, example, comparator, genWrappers.getOrInit);
return bundle(newGrid, targetIndex, detail.column());
};
var insertRowsBefore = function (grid, details, comparator, genWrappers) {
var example = details[0].row();
var targetIndex = details[0].row();
var rows = uniqueRows(details);
var newGrid = foldl(rows, function (newG, _row) {
return ModificationOperations.insertRowAt(newG, targetIndex, example, comparator, genWrappers.getOrInit);
}, grid);
return bundle(newGrid, targetIndex, details[0].column());
};
var insertRowAfter = function (grid, detail, comparator, genWrappers) {
var example = detail.row();
var targetIndex = detail.row() + detail.rowspan();
var newGrid = ModificationOperations.insertRowAt(grid, targetIndex, example, comparator, genWrappers.getOrInit);
return bundle(newGrid, targetIndex, detail.column());
};
var insertRowsAfter = function (grid, details, comparator, genWrappers) {
var rows = uniqueRows(details);
var example = rows[rows.length - 1].row();
var targetIndex = rows[rows.length - 1].row() + rows[rows.length - 1].rowspan();
var newGrid = foldl(rows, function (newG, _row) {
return ModificationOperations.insertRowAt(newG, targetIndex, example, comparator, genWrappers.getOrInit);
}, grid);
return bundle(newGrid, targetIndex, details[0].column());
};
var insertColumnBefore = function (grid, detail, comparator, genWrappers) {
var example = detail.column();
var targetIndex = detail.column();
var newGrid = ModificationOperations.insertColumnAt(grid, targetIndex, example, comparator, genWrappers.getOrInit);
return bundle(newGrid, detail.row(), targetIndex);
};
var insertColumnsBefore = function (grid, details, comparator, genWrappers) {
var columns = uniqueColumns(details);
var example = columns[0].column();
var targetIndex = columns[0].column();
var newGrid = foldl(columns, function (newG, _row) {
return ModificationOperations.insertColumnAt(newG, targetIndex, example, comparator, genWrappers.getOrInit);
}, grid);
return bundle(newGrid, details[0].row(), targetIndex);
};
var insertColumnAfter = function (grid, detail, comparator, genWrappers) {
var example = detail.column();
var targetIndex = detail.column() + detail.colspan();
var newGrid = ModificationOperations.insertColumnAt(grid, targetIndex, example, comparator, genWrappers.getOrInit);
return bundle(newGrid, detail.row(), targetIndex);
};
var insertColumnsAfter = function (grid, details, comparator, genWrappers) {
var example = details[details.length - 1].column();
var targetIndex = details[details.length - 1].column() + details[details.length - 1].colspan();
var columns = uniqueColumns(details);
var newGrid = foldl(columns, function (newG, _row) {
return ModificationOperations.insertColumnAt(newG, targetIndex, example, comparator, genWrappers.getOrInit);
}, grid);
return bundle(newGrid, details[0].row(), targetIndex);
};
var makeRowHeader = function (grid, detail, comparator, genWrappers) {
var newGrid = TransformOperations.replaceRow(grid, detail.row(), comparator, genWrappers.replaceOrInit);
return bundle(newGrid, detail.row(), detail.column());
};
var makeColumnHeader = function (grid, detail, comparator, genWrappers) {
var newGrid = TransformOperations.replaceColumn(grid, detail.column(), comparator, genWrappers.replaceOrInit);
return bundle(newGrid, detail.row(), detail.column());
};
var unmakeRowHeader = function (grid, detail, comparator, genWrappers) {
var newGrid = TransformOperations.replaceRow(grid, detail.row(), comparator, genWrappers.replaceOrInit);
return bundle(newGrid, detail.row(), detail.column());
};
var unmakeColumnHeader = function (grid, detail, comparator, genWrappers) {
var newGrid = TransformOperations.replaceColumn(grid, detail.column(), comparator, genWrappers.replaceOrInit);
return bundle(newGrid, detail.row(), detail.column());
};
var splitCellIntoColumns$1 = function (grid, detail, comparator, genWrappers) {
var newGrid = ModificationOperations.splitCellIntoColumns(grid, detail.row(), detail.column(), comparator, genWrappers.getOrInit);
return bundle(newGrid, detail.row(), detail.column());
};
var splitCellIntoRows$1 = function (grid, detail, comparator, genWrappers) {
var newGrid = ModificationOperations.splitCellIntoRows(grid, detail.row(), detail.column(), comparator, genWrappers.getOrInit);
return bundle(newGrid, detail.row(), detail.column());
};
var eraseColumns = function (grid, details, _comparator, _genWrappers) {
var columns = uniqueColumns(details);
var newGrid = ModificationOperations.deleteColumnsAt(grid, columns[0].column(), columns[columns.length - 1].column());
var cursor = elementFromGrid(newGrid, details[0].row(), details[0].column());
return outcome(newGrid, cursor);
};
var eraseRows = function (grid, details, _comparator, _genWrappers) {
var rows = uniqueRows(details);
var newGrid = ModificationOperations.deleteRowsAt(grid, rows[0].row(), rows[rows.length - 1].row());
var cursor = elementFromGrid(newGrid, details[0].row(), details[0].column());
return outcome(newGrid, cursor);
};
var mergeCells = function (grid, mergable, comparator, _genWrappers) {
var cells = mergable.cells();
TableContent.merge(cells);
var newGrid = MergingOperations.merge(grid, mergable.bounds(), comparator, constant(cells[0]));
return outcome(newGrid, Option.from(cells[0]));
};
var unmergeCells = function (grid, unmergable, comparator, genWrappers) {
var newGrid = foldr(unmergable, function (b, cell) {
return MergingOperations.unmerge(b, cell, comparator, genWrappers.combine(cell));
}, grid);
return outcome(newGrid, Option.from(unmergable[0]));
};
var pasteCells = function (grid, pasteDetails, comparator, _genWrappers) {
var gridify = function (table, generators) {
var list = DetailsList.fromTable(table);
var wh = Warehouse.generate(list);
return Transitions.toGrid(wh, generators, true);
};
var gridB = gridify(pasteDetails.clipboard(), pasteDetails.generators());
var startAddress = address(pasteDetails.row(), pasteDetails.column());
var mergedGrid = TableMerge.merge(startAddress, grid, gridB, pasteDetails.generators(), comparator);
return mergedGrid.fold(function () {
return outcome(grid, Option.some(pasteDetails.element()));
}, function (nuGrid) {
var cursor = elementFromGrid(nuGrid, pasteDetails.row(), pasteDetails.column());
return outcome(nuGrid, cursor);
});
};
var gridifyRows = function (rows, generators, example) {
var pasteDetails = DetailsList.fromPastedRows(rows, example);
var wh = Warehouse.generate(pasteDetails);
return Transitions.toGrid(wh, generators, true);
};
var pasteRowsBefore = function (grid, pasteDetails, comparator, _genWrappers) {
var example = grid[pasteDetails.cells[0].row()];
var index = pasteDetails.cells[0].row();
var gridB = gridifyRows(pasteDetails.clipboard(), pasteDetails.generators(), example);
var mergedGrid = TableMerge.insert(index, grid, gridB, pasteDetails.generators(), comparator);
var cursor = elementFromGrid(mergedGrid, pasteDetails.cells[0].row(), pasteDetails.cells[0].column());
return outcome(mergedGrid, cursor);
};
var pasteRowsAfter = function (grid, pasteDetails, comparator, _genWrappers) {
var example = grid[pasteDetails.cells[0].row()];
var index = pasteDetails.cells[pasteDetails.cells.length - 1].row() + pasteDetails.cells[pasteDetails.cells.length - 1].rowspan();
var gridB = gridifyRows(pasteDetails.clipboard(), pasteDetails.generators(), example);
var mergedGrid = TableMerge.insert(index, grid, gridB, pasteDetails.generators(), comparator);
var cursor = elementFromGrid(mergedGrid, pasteDetails.cells[0].row(), pasteDetails.cells[0].column());
return outcome(mergedGrid, cursor);
};
var resize = Adjustments.adjustWidthTo;
var TableOperations = {
insertRowBefore: run(insertRowBefore, onCell, noop, noop, Generators.modification),
insertRowsBefore: run(insertRowsBefore, onCells, noop, noop, Generators.modification),
insertRowAfter: run(insertRowAfter, onCell, noop, noop, Generators.modification),
insertRowsAfter: run(insertRowsAfter, onCells, noop, noop, Generators.modification),
insertColumnBefore: run(insertColumnBefore, onCell, resize, noop, Generators.modification),
insertColumnsBefore: run(insertColumnsBefore, onCells, resize, noop, Generators.modification),
insertColumnAfter: run(insertColumnAfter, onCell, resize, noop, Generators.modification),
insertColumnsAfter: run(insertColumnsAfter, onCells, resize, noop, Generators.modification),
splitCellIntoColumns: run(splitCellIntoColumns$1, onCell, resize, noop, Generators.modification),
splitCellIntoRows: run(splitCellIntoRows$1, onCell, noop, noop, Generators.modification),
eraseColumns: run(eraseColumns, onCells, resize, prune, Generators.modification),
eraseRows: run(eraseRows, onCells, noop, prune, Generators.modification),
makeColumnHeader: run(makeColumnHeader, onCell, noop, noop, Generators.transform('row', 'th')),
unmakeColumnHeader: run(unmakeColumnHeader, onCell, noop, noop, Generators.transform(null, 'td')),
makeRowHeader: run(makeRowHeader, onCell, noop, noop, Generators.transform('col', 'th')),
unmakeRowHeader: run(unmakeRowHeader, onCell, noop, noop, Generators.transform(null, 'td')),
mergeCells: run(mergeCells, onMergable, noop, noop, Generators.merging),
unmergeCells: run(unmergeCells, onUnmergable, resize, noop, Generators.merging),
pasteCells: run(pasteCells, onPaste, resize, noop, Generators.modification),
pasteRowsBefore: run(pasteRowsBefore, onPasteRows, noop, noop, Generators.modification),
pasteRowsAfter: run(pasteRowsAfter, onPasteRows, noop, noop, Generators.modification)
};
var getBody$1 = function (editor) {
return Element.fromDom(editor.getBody());
};
var getPixelWidth$1 = function (elm) {
return elm.getBoundingClientRect().width;
};
var getPixelHeight = function (elm) {
return elm.getBoundingClientRect().height;
};
var getIsRoot = function (editor) {
return function (element) {
return eq(element, getBody$1(editor));
};
};
var removePxSuffix = function (size) {
return size ? size.replace(/px$/, '') : '';
};
var addSizeSuffix = function (size) {
if (/^[0-9]+$/.test(size)) {
size += 'px';
}
return size;
};
var removeDataStyle = function (table) {
var dataStyleCells = descendants$1(table, 'td[data-mce-style],th[data-mce-style]');
remove(table, 'data-mce-style');
each(dataStyleCells, function (cell) {
remove(cell, 'data-mce-style');
});
};
var getDirection = function (element) {
return get$1(element, 'direction') === 'rtl' ? 'rtl' : 'ltr';
};
var ltr$1 = { isRtl: constant(false) };
var rtl$1 = { isRtl: constant(true) };
var directionAt = function (element) {
var dir = getDirection(element);
return dir === 'rtl' ? rtl$1 : ltr$1;
};
var Direction = { directionAt: directionAt };
var defaultTableToolbar = [
'tableprops',
'tabledelete',
'|',
'tableinsertrowbefore',
'tableinsertrowafter',
'tabledeleterow',
'|',
'tableinsertcolbefore',
'tableinsertcolafter',
'tabledeletecol'
];
var defaultStyles = {
'border-collapse': 'collapse',
'width': '100%'
};
var defaultAttributes = { border: '1' };
var getDefaultAttributes = function (editor) {
return editor.getParam('table_default_attributes', defaultAttributes, 'object');
};
var getDefaultStyles = function (editor) {
return editor.getParam('table_default_styles', defaultStyles, 'object');
};
var hasTableResizeBars = function (editor) {
return editor.getParam('table_resize_bars', true, 'boolean');
};
var hasTabNavigation = function (editor) {
return editor.getParam('table_tab_navigation', true, 'boolean');
};
var hasAdvancedCellTab = function (editor) {
return editor.getParam('table_cell_advtab', true, 'boolean');
};
var hasAdvancedRowTab = function (editor) {
return editor.getParam('table_row_advtab', true, 'boolean');
};
var hasAdvancedTableTab = function (editor) {
return editor.getParam('table_advtab', true, 'boolean');
};
var hasAppearanceOptions = function (editor) {
return editor.getParam('table_appearance_options', true, 'boolean');
};
var hasTableGrid = function (editor) {
return editor.getParam('table_grid', true, 'boolean');
};
var shouldStyleWithCss = function (editor) {
return editor.getParam('table_style_by_css', false, 'boolean');
};
var getCellClassList = function (editor) {
return editor.getParam('table_cell_class_list', [], 'array');
};
var getRowClassList = function (editor) {
return editor.getParam('table_row_class_list', [], 'array');
};
var getTableClassList = function (editor) {
return editor.getParam('table_class_list', [], 'array');
};
var getColorPickerCallback = function (editor) {
return editor.getParam('color_picker_callback');
};
var isPixelsForced = function (editor) {
return editor.getParam('table_responsive_width') === false;
};
var getCloneElements = function (editor) {
var cloneElements = editor.getParam('table_clone_elements');
if (isString(cloneElements)) {
return Option.some(cloneElements.split(/[ ,]/));
} else if (Array.isArray(cloneElements)) {
return Option.some(cloneElements);
} else {
return Option.none();
}
};
var hasObjectResizing = function (editor) {
var objectResizing = editor.getParam('object_resizing', true);
return objectResizing === 'table' || objectResizing;
};
var getToolbar = function (editor) {
var toolbar = editor.getParam('table_toolbar', defaultTableToolbar);
if (toolbar === '' || toolbar === false) {
return [];
} else if (isString(toolbar)) {
return toolbar.split(/[ ,]/);
} else if (isArray(toolbar)) {
return toolbar;
} else {
return [];
}
};
var fireNewRow = function (editor, row) {
return editor.fire('newrow', { node: row });
};
var fireNewCell = function (editor, cell) {
return editor.fire('newcell', { node: cell });
};
var fireObjectResizeStart = function (editor, target, width, height) {
editor.fire('ObjectResizeStart', {
target: target,
width: width,
height: height
});
};
var fireObjectResized = function (editor, target, width, height) {
editor.fire('ObjectResized', {
target: target,
width: width,
height: height
});
};
var TableActions = function (editor, lazyWire) {
var isTableBody = function (editor) {
return name(getBody$1(editor)) === 'table';
};
var lastRowGuard = function (table) {
var size = TableGridSize.getGridSize(table);
return isTableBody(editor) === false || size.rows() > 1;
};
var lastColumnGuard = function (table) {
var size = TableGridSize.getGridSize(table);
return isTableBody(editor) === false || size.columns() > 1;
};
var cloneFormats = getCloneElements(editor);
var execute = function (operation, guard, mutate, lazyWire) {
return function (table, target) {
removeDataStyle(table);
var wire = lazyWire();
var doc = Element.fromDom(editor.getDoc());
var direction = TableDirection(Direction.directionAt);
var generators = TableFill.cellOperations(mutate, doc, cloneFormats);
return guard(table) ? operation(wire, table, target, generators, direction).bind(function (result) {
each(result.newRows(), function (row) {
fireNewRow(editor, row.dom());
});
each(result.newCells(), function (cell) {
fireNewCell(editor, cell.dom());
});
return result.cursor().map(function (cell) {
var rng = editor.dom.createRng();
rng.setStart(cell.dom(), 0);
rng.setEnd(cell.dom(), 0);
return rng;
});
}) : Option.none();
};
};
var deleteRow = execute(TableOperations.eraseRows, lastRowGuard, noop, lazyWire);
var deleteColumn = execute(TableOperations.eraseColumns, lastColumnGuard, noop, lazyWire);
var insertRowsBefore = execute(TableOperations.insertRowsBefore, always, noop, lazyWire);
var insertRowsAfter = execute(TableOperations.insertRowsAfter, always, noop, lazyWire);
var insertColumnsBefore = execute(TableOperations.insertColumnsBefore, always, CellMutations.halve, lazyWire);
var insertColumnsAfter = execute(TableOperations.insertColumnsAfter, always, CellMutations.halve, lazyWire);
var mergeCells = execute(TableOperations.mergeCells, always, noop, lazyWire);
var unmergeCells = execute(TableOperations.unmergeCells, always, noop, lazyWire);
var pasteRowsBefore = execute(TableOperations.pasteRowsBefore, always, noop, lazyWire);
var pasteRowsAfter = execute(TableOperations.pasteRowsAfter, always, noop, lazyWire);
var pasteCells = execute(TableOperations.pasteCells, always, noop, lazyWire);
return {
deleteRow: deleteRow,
deleteColumn: deleteColumn,
insertRowsBefore: insertRowsBefore,
insertRowsAfter: insertRowsAfter,
insertColumnsBefore: insertColumnsBefore,
insertColumnsAfter: insertColumnsAfter,
mergeCells: mergeCells,
unmergeCells: unmergeCells,
pasteRowsBefore: pasteRowsBefore,
pasteRowsAfter: pasteRowsAfter,
pasteCells: pasteCells
};
};
var copyRows = function (table, target, generators) {
var list = DetailsList.fromTable(table);
var house = Warehouse.generate(list);
var details = onCells(house, target);
return details.map(function (selectedCells) {
var grid = Transitions.toGrid(house, generators, false);
var slicedGrid = grid.slice(selectedCells[0].row(), selectedCells[selectedCells.length - 1].row() + selectedCells[selectedCells.length - 1].rowspan());
var slicedDetails = toDetailList(slicedGrid, generators);
return Redraw.copy(slicedDetails);
});
};
var CopyRows = { copyRows: copyRows };
var global$1 = tinymce.util.Tools.resolve('tinymce.util.Tools');
var getTDTHOverallStyle = function (dom, elm, name) {
var cells = dom.select('td,th', elm);
var firstChildStyle;
var checkChildren = function (firstChildStyle, elms) {
for (var i = 0; i < elms.length; i++) {
var currentStyle = dom.getStyle(elms[i], name);
if (typeof firstChildStyle === 'undefined') {
firstChildStyle = currentStyle;
}
if (firstChildStyle !== currentStyle) {
return '';
}
}
return firstChildStyle;
};
firstChildStyle = checkChildren(firstChildStyle, cells);
return firstChildStyle;
};
var applyAlign = function (editor, elm, name) {
if (name) {
editor.formatter.apply('align' + name, {}, elm);
}
};
var applyVAlign = function (editor, elm, name) {
if (name) {
editor.formatter.apply('valign' + name, {}, elm);
}
};
var unApplyAlign = function (editor, elm) {
global$1.each('left center right'.split(' '), function (name) {
editor.formatter.remove('align' + name, {}, elm);
});
};
var unApplyVAlign = function (editor, elm) {
global$1.each('top middle bottom'.split(' '), function (name) {
editor.formatter.remove('valign' + name, {}, elm);
});
};
var Styles$1 = {
applyAlign: applyAlign,
applyVAlign: applyVAlign,
unApplyAlign: unApplyAlign,
unApplyVAlign: unApplyVAlign,
getTDTHOverallStyle: getTDTHOverallStyle
};
var buildListItems = function (inputList, itemCallback, startItems) {
var appendItems = function (values, output) {
output = output || [];
global$1.each(values, function (item) {
var menuItem = { text: item.text || item.title };
if (item.menu) {
menuItem.menu = appendItems(item.menu);
} else {
menuItem.value = item.value;
if (itemCallback) {
itemCallback(menuItem);
}
}
output.push(menuItem);
});
return output;
};
return appendItems(inputList, startItems || []);
};
function styleFieldHasFocus(e) {
return e.control.rootControl.find('#style')[0].getEl().isEqualNode(domGlobals.document.activeElement);
}
var syncAdvancedStyleFields = function (editor, evt) {
if (styleFieldHasFocus(evt)) {
updateAdvancedFields(editor, evt);
} else {
updateStyleField(editor, evt);
}
};
var updateStyleField = function (editor, evt) {
var dom = editor.dom;
var rootControl = evt.control.rootControl;
var data = rootControl.toJSON();
var css = dom.parseStyle(data.style);
css['border-style'] = data.borderStyle;
css['border-color'] = data.borderColor;
css['background-color'] = data.backgroundColor;
css.width = data.width ? addSizeSuffix(data.width) : '';
css.height = data.height ? addSizeSuffix(data.height) : '';
rootControl.find('#style').value(dom.serializeStyle(dom.parseStyle(dom.serializeStyle(css))));
};
var updateAdvancedFields = function (editor, evt) {
var dom = editor.dom;
var rootControl = evt.control.rootControl;
var data = rootControl.toJSON();
var css = dom.parseStyle(data.style);
rootControl.find('#borderStyle').value(css['border-style'] || '');
rootControl.find('#borderColor').value(css['border-color'] || '');
rootControl.find('#backgroundColor').value(css['background-color'] || '');
rootControl.find('#width').value(css.width || '');
rootControl.find('#height').value(css.height || '');
};
var extractAdvancedStyles = function (dom, elm) {
var css = dom.parseStyle(dom.getAttrib(elm, 'style'));
var data = {};
if (css['border-style']) {
data.borderStyle = css['border-style'];
}
if (css['border-color']) {
data.borderColor = css['border-color'];
}
if (css['background-color']) {
data.backgroundColor = css['background-color'];
}
data.style = dom.serializeStyle(css);
return data;
};
var createStyleForm = function (editor) {
var createColorPickAction = function () {
var colorPickerCallback = getColorPickerCallback(editor);
if (colorPickerCallback) {
return function (evt) {
return colorPickerCallback.call(editor, function (value) {
evt.control.value(value).fire('change');
}, evt.control.value());
};
}
};
return {
title: 'Advanced',
type: 'form',
defaults: { onchange: curry(updateStyleField, editor) },
items: [
{
label: 'Style',
name: 'style',
type: 'textbox',
onchange: curry(updateAdvancedFields, editor)
},
{
type: 'form',
padding: 0,
formItemDefaults: {
layout: 'grid',
alignH: [
'start',
'right'
]
},
defaults: { size: 7 },
items: [
{
label: 'Border style',
type: 'listbox',
name: 'borderStyle',
width: 90,
onselect: curry(updateStyleField, editor),
values: [
{
text: 'Select...',
value: ''
},
{
text: 'Solid',
value: 'solid'
},
{
text: 'Dotted',
value: 'dotted'
},
{
text: 'Dashed',
value: 'dashed'
},
{
text: 'Double',
value: 'double'
},
{
text: 'Groove',
value: 'groove'
},
{
text: 'Ridge',
value: 'ridge'
},
{
text: 'Inset',
value: 'inset'
},
{
text: 'Outset',
value: 'outset'
},
{
text: 'None',
value: 'none'
},
{
text: 'Hidden',
value: 'hidden'
}
]
},
{
label: 'Border color',
type: 'colorbox',
name: 'borderColor',
onaction: createColorPickAction()
},
{
label: 'Background color',
type: 'colorbox',
name: 'backgroundColor',
onaction: createColorPickAction()
}
]
}
]
};
};
var Helpers = {
createStyleForm: createStyleForm,
buildListItems: buildListItems,
updateStyleField: updateStyleField,
extractAdvancedStyles: extractAdvancedStyles,
updateAdvancedFields: updateAdvancedFields,
syncAdvancedStyleFields: syncAdvancedStyleFields
};
var updateStyles = function (elm, cssText) {
delete elm.dataset.mceStyle;
elm.style.cssText += ';' + cssText;
};
var extractDataFromElement = function (editor, elm) {
var dom = editor.dom;
var data = {
width: dom.getStyle(elm, 'width') || dom.getAttrib(elm, 'width'),
height: dom.getStyle(elm, 'height') || dom.getAttrib(elm, 'height'),
scope: dom.getAttrib(elm, 'scope'),
class: dom.getAttrib(elm, 'class'),
type: elm.nodeName.toLowerCase(),
style: '',
align: '',
valign: ''
};
global$1.each('left center right'.split(' '), function (name) {
if (editor.formatter.matchNode(elm, 'align' + name)) {
data.align = name;
}
});
global$1.each('top middle bottom'.split(' '), function (name) {
if (editor.formatter.matchNode(elm, 'valign' + name)) {
data.valign = name;
}
});
if (hasAdvancedCellTab(editor)) {
global$1.extend(data, Helpers.extractAdvancedStyles(dom, elm));
}
return data;
};
var onSubmitCellForm = function (editor, cells, evt) {
var dom = editor.dom;
var data;
function setAttrib(elm, name, value) {
if (cells.length === 1 || value) {
dom.setAttrib(elm, name, value);
}
}
function setStyle(elm, name, value) {
if (cells.length === 1 || value) {
dom.setStyle(elm, name, value);
}
}
if (hasAdvancedCellTab(editor)) {
Helpers.syncAdvancedStyleFields(editor, evt);
}
data = evt.control.rootControl.toJSON();
editor.undoManager.transact(function () {
global$1.each(cells, function (cellElm) {
setAttrib(cellElm, 'scope', data.scope);
if (cells.length === 1) {
setAttrib(cellElm, 'style', data.style);
} else {
updateStyles(cellElm, data.style);
}
setAttrib(cellElm, 'class', data.class);
setStyle(cellElm, 'width', addSizeSuffix(data.width));
setStyle(cellElm, 'height', addSizeSuffix(data.height));
if (data.type && cellElm.nodeName.toLowerCase() !== data.type) {
cellElm = dom.rename(cellElm, data.type);
}
if (cells.length === 1) {
Styles$1.unApplyAlign(editor, cellElm);
Styles$1.unApplyVAlign(editor, cellElm);
}
if (data.align) {
Styles$1.applyAlign(editor, cellElm, data.align);
}
if (data.valign) {
Styles$1.applyVAlign(editor, cellElm, data.valign);
}
});
editor.focus();
});
};
var open = function (editor) {
var cellElm, data, classListCtrl, cells = [];
cells = editor.dom.select('td[data-mce-selected],th[data-mce-selected]');
cellElm = editor.dom.getParent(editor.selection.getStart(), 'td,th');
if (!cells.length && cellElm) {
cells.push(cellElm);
}
cellElm = cellElm || cells[0];
if (!cellElm) {
return;
}
if (cells.length > 1) {
data = {
width: '',
height: '',
scope: '',
class: '',
align: '',
valign: '',
style: '',
type: cellElm.nodeName.toLowerCase()
};
} else {
data = extractDataFromElement(editor, cellElm);
}
if (getCellClassList(editor).length > 0) {
classListCtrl = {
name: 'class',
type: 'listbox',
label: 'Class',
values: Helpers.buildListItems(getCellClassList(editor), function (item) {
if (item.value) {
item.textStyle = function () {
return editor.formatter.getCssText({
block: 'td',
classes: [item.value]
});
};
}
})
};
}
var generalCellForm = {
type: 'form',
layout: 'flex',
direction: 'column',
labelGapCalc: 'children',
padding: 0,
items: [
{
type: 'form',
layout: 'grid',
columns: 2,
labelGapCalc: false,
padding: 0,
defaults: {
type: 'textbox',
maxWidth: 50
},
items: [
{
label: 'Width',
name: 'width',
onchange: curry(Helpers.updateStyleField, editor)
},
{
label: 'Height',
name: 'height',
onchange: curry(Helpers.updateStyleField, editor)
},
{
label: 'Cell type',
name: 'type',
type: 'listbox',
text: 'None',
minWidth: 90,
maxWidth: null,
values: [
{
text: 'Cell',
value: 'td'
},
{
text: 'Header cell',
value: 'th'
}
]
},
{
label: 'Scope',
name: 'scope',
type: 'listbox',
text: 'None',
minWidth: 90,
maxWidth: null,
values: [
{
text: 'None',
value: ''
},
{
text: 'Row',
value: 'row'
},
{
text: 'Column',
value: 'col'
},
{
text: 'Row group',
value: 'rowgroup'
},
{
text: 'Column group',
value: 'colgroup'
}
]
},
{
label: 'H Align',
name: 'align',
type: 'listbox',
text: 'None',
minWidth: 90,
maxWidth: null,
values: [
{
text: 'None',
value: ''
},
{
text: 'Left',
value: 'left'
},
{
text: 'Center',
value: 'center'
},
{
text: 'Right',
value: 'right'
}
]
},
{
label: 'V Align',
name: 'valign',
type: 'listbox',
text: 'None',
minWidth: 90,
maxWidth: null,
values: [
{
text: 'None',
value: ''
},
{
text: 'Top',
value: 'top'
},
{
text: 'Middle',
value: 'middle'
},
{
text: 'Bottom',
value: 'bottom'
}
]
}
]
},
classListCtrl
]
};
if (hasAdvancedCellTab(editor)) {
editor.windowManager.open({
title: 'Cell properties',
bodyType: 'tabpanel',
data: data,
body: [
{
title: 'General',
type: 'form',
items: generalCellForm
},
Helpers.createStyleForm(editor)
],
onsubmit: curry(onSubmitCellForm, editor, cells)
});
} else {
editor.windowManager.open({
title: 'Cell properties',
data: data,
body: generalCellForm,
onsubmit: curry(onSubmitCellForm, editor, cells)
});
}
};
var CellDialog = { open: open };
var extractDataFromElement$1 = function (editor, elm) {
var dom = editor.dom;
var data = {
height: dom.getStyle(elm, 'height') || dom.getAttrib(elm, 'height'),
scope: dom.getAttrib(elm, 'scope'),
class: dom.getAttrib(elm, 'class'),
align: '',
style: '',
type: elm.parentNode.nodeName.toLowerCase()
};
global$1.each('left center right'.split(' '), function (name) {
if (editor.formatter.matchNode(elm, 'align' + name)) {
data.align = name;
}
});
if (hasAdvancedRowTab(editor)) {
global$1.extend(data, Helpers.extractAdvancedStyles(dom, elm));
}
return data;
};
var switchRowType = function (dom, rowElm, toType) {
var tableElm = dom.getParent(rowElm, 'table');
var oldParentElm = rowElm.parentNode;
var parentElm = dom.select(toType, tableElm)[0];
if (!parentElm) {
parentElm = dom.create(toType);
if (tableElm.firstChild) {
if (tableElm.firstChild.nodeName === 'CAPTION') {
dom.insertAfter(parentElm, tableElm.firstChild);
} else {
tableElm.insertBefore(parentElm, tableElm.firstChild);
}
} else {
tableElm.appendChild(parentElm);
}
}
parentElm.appendChild(rowElm);
if (!oldParentElm.hasChildNodes()) {
dom.remove(oldParentElm);
}
};
function onSubmitRowForm(editor, rows, oldData, evt) {
var dom = editor.dom;
function setAttrib(elm, name, value) {
if (rows.length === 1 || value) {
dom.setAttrib(elm, name, value);
}
}
function setStyle(elm, name, value) {
if (rows.length === 1 || value) {
dom.setStyle(elm, name, value);
}
}
if (hasAdvancedRowTab(editor)) {
Helpers.syncAdvancedStyleFields(editor, evt);
}
var data = evt.control.rootControl.toJSON();
editor.undoManager.transact(function () {
global$1.each(rows, function (rowElm) {
setAttrib(rowElm, 'scope', data.scope);
setAttrib(rowElm, 'style', data.style);
setAttrib(rowElm, 'class', data.class);
setStyle(rowElm, 'height', addSizeSuffix(data.height));
if (data.type !== rowElm.parentNode.nodeName.toLowerCase()) {
switchRowType(editor.dom, rowElm, data.type);
}
if (data.align !== oldData.align) {
Styles$1.unApplyAlign(editor, rowElm);
Styles$1.applyAlign(editor, rowElm, data.align);
}
});
editor.focus();
});
}
var open$1 = function (editor) {
var dom = editor.dom;
var tableElm, cellElm, rowElm, classListCtrl, data;
var rows = [];
var generalRowForm;
tableElm = dom.getParent(editor.selection.getStart(), 'table');
cellElm = dom.getParent(editor.selection.getStart(), 'td,th');
global$1.each(tableElm.rows, function (row) {
global$1.each(row.cells, function (cell) {
if (dom.getAttrib(cell, 'data-mce-selected') || cell === cellElm) {
rows.push(row);
return false;
}
});
});
rowElm = rows[0];
if (!rowElm) {
return;
}
if (rows.length > 1) {
data = {
height: '',
scope: '',
style: '',
class: '',
align: '',
type: rowElm.parentNode.nodeName.toLowerCase()
};
} else {
data = extractDataFromElement$1(editor, rowElm);
}
if (getRowClassList(editor).length > 0) {
classListCtrl = {
name: 'class',
type: 'listbox',
label: 'Class',
values: Helpers.buildListItems(getRowClassList(editor), function (item) {
if (item.value) {
item.textStyle = function () {
return editor.formatter.getCssText({
block: 'tr',
classes: [item.value]
});
};
}
})
};
}
generalRowForm = {
type: 'form',
columns: 2,
padding: 0,
defaults: { type: 'textbox' },
items: [
{
type: 'listbox',
name: 'type',
label: 'Row type',
text: 'Header',
maxWidth: null,
values: [
{
text: 'Header',
value: 'thead'
},
{
text: 'Body',
value: 'tbody'
},
{
text: 'Footer',
value: 'tfoot'
}
]
},
{
type: 'listbox',
name: 'align',
label: 'Alignment',
text: 'None',
maxWidth: null,
values: [
{
text: 'None',
value: ''
},
{
text: 'Left',
value: 'left'
},
{
text: 'Center',
value: 'center'
},
{
text: 'Right',
value: 'right'
}
]
},
{
label: 'Height',
name: 'height'
},
classListCtrl
]
};
if (hasAdvancedRowTab(editor)) {
editor.windowManager.open({
title: 'Row properties',
data: data,
bodyType: 'tabpanel',
body: [
{
title: 'General',
type: 'form',
items: generalRowForm
},
Helpers.createStyleForm(editor)
],
onsubmit: curry(onSubmitRowForm, editor, rows, data)
});
} else {
editor.windowManager.open({
title: 'Row properties',
data: data,
body: generalRowForm,
onsubmit: curry(onSubmitRowForm, editor, rows, data)
});
}
};
var RowDialog = { open: open$1 };
var global$2 = tinymce.util.Tools.resolve('tinymce.Env');
var DefaultRenderOptions = {
styles: {
'border-collapse': 'collapse',
'width': '100%'
},
attributes: { border: '1' },
percentages: true
};
var makeTable = function () {
return Element.fromTag('table');
};
var tableBody = function () {
return Element.fromTag('tbody');
};
var tableRow = function () {
return Element.fromTag('tr');
};
var tableHeaderCell = function () {
return Element.fromTag('th');
};
var tableCell = function () {
return Element.fromTag('td');
};
var render$1 = function (rows, columns, rowHeaders, columnHeaders, renderOpts) {
if (renderOpts === void 0) {
renderOpts = DefaultRenderOptions;
}
var table = makeTable();
setAll$1(table, renderOpts.styles);
setAll(table, renderOpts.attributes);
var tbody = tableBody();
append(table, tbody);
var trs = [];
for (var i = 0; i < rows; i++) {
var tr = tableRow();
for (var j = 0; j < columns; j++) {
var td = i < rowHeaders || j < columnHeaders ? tableHeaderCell() : tableCell();
if (j < columnHeaders) {
set(td, 'scope', 'row');
}
if (i < rowHeaders) {
set(td, 'scope', 'col');
}
append(td, Element.fromTag('br'));
if (renderOpts.percentages) {
set$1(td, 'width', 100 / columns + '%');
}
append(tr, td);
}
trs.push(tr);
}
append$1(tbody, trs);
return table;
};
var get$7 = function (element) {
return element.dom().innerHTML;
};
var getOuter$2 = function (element) {
var container = Element.fromTag('div');
var clone = Element.fromDom(element.dom().cloneNode(true));
append(container, clone);
return get$7(container);
};
var placeCaretInCell = function (editor, cell) {
editor.selection.select(cell.dom(), true);
editor.selection.collapse(true);
};
var selectFirstCellInTable = function (editor, tableElm) {
descendant$1(tableElm, 'td,th').each(curry(placeCaretInCell, editor));
};
var fireEvents = function (editor, table) {
each(descendants$1(table, 'tr'), function (row) {
fireNewRow(editor, row.dom());
each(descendants$1(row, 'th,td'), function (cell) {
fireNewCell(editor, cell.dom());
});
});
};
var isPercentage = function (width) {
return isString(width) && width.indexOf('%') !== -1;
};
var insert$1 = function (editor, columns, rows) {
var defaultStyles = getDefaultStyles(editor);
var options = {
styles: defaultStyles,
attributes: getDefaultAttributes(editor),
percentages: isPercentage(defaultStyles.width) && !isPixelsForced(editor)
};
var table = render$1(rows, columns, 0, 0, options);
set(table, 'data-mce-id', '__mce');
var html = getOuter$2(table);
editor.insertContent(html);
return descendant$1(getBody$1(editor), 'table[data-mce-id="__mce"]').map(function (table) {
if (isPixelsForced(editor)) {
set$1(table, 'width', get$1(table, 'width'));
}
remove(table, 'data-mce-id');
fireEvents(editor, table);
selectFirstCellInTable(editor, table);
return table.dom();
}).getOr(null);
};
var InsertTable = { insert: insert$1 };
function styleTDTH(dom, elm, name, value) {
if (elm.tagName === 'TD' || elm.tagName === 'TH') {
dom.setStyle(elm, name, value);
} else {
if (elm.children) {
for (var i = 0; i < elm.children.length; i++) {
styleTDTH(dom, elm.children[i], name, value);
}
}
}
}
var extractDataFromElement$2 = function (editor, tableElm) {
var dom = editor.dom;
var data = {
width: dom.getStyle(tableElm, 'width') || dom.getAttrib(tableElm, 'width'),
height: dom.getStyle(tableElm, 'height') || dom.getAttrib(tableElm, 'height'),
cellspacing: dom.getStyle(tableElm, 'border-spacing') || dom.getAttrib(tableElm, 'cellspacing'),
cellpadding: dom.getAttrib(tableElm, 'data-mce-cell-padding') || dom.getAttrib(tableElm, 'cellpadding') || Styles$1.getTDTHOverallStyle(editor.dom, tableElm, 'padding'),
border: dom.getAttrib(tableElm, 'data-mce-border') || dom.getAttrib(tableElm, 'border') || Styles$1.getTDTHOverallStyle(editor.dom, tableElm, 'border'),
borderColor: dom.getAttrib(tableElm, 'data-mce-border-color'),
caption: !!dom.select('caption', tableElm)[0],
class: dom.getAttrib(tableElm, 'class')
};
global$1.each('left center right'.split(' '), function (name) {
if (editor.formatter.matchNode(tableElm, 'align' + name)) {
data.align = name;
}
});
if (hasAdvancedTableTab(editor)) {
global$1.extend(data, Helpers.extractAdvancedStyles(dom, tableElm));
}
return data;
};
var applyDataToElement = function (editor, tableElm, data) {
var dom = editor.dom;
var attrs = {};
var styles = {};
attrs.class = data.class;
styles.height = addSizeSuffix(data.height);
if (dom.getAttrib(tableElm, 'width') && !shouldStyleWithCss(editor)) {
attrs.width = removePxSuffix(data.width);
} else {
styles.width = addSizeSuffix(data.width);
}
if (shouldStyleWithCss(editor)) {
styles['border-width'] = addSizeSuffix(data.border);
styles['border-spacing'] = addSizeSuffix(data.cellspacing);
global$1.extend(attrs, {
'data-mce-border-color': data.borderColor,
'data-mce-cell-padding': data.cellpadding,
'data-mce-border': data.border
});
} else {
global$1.extend(attrs, {
border: data.border,
cellpadding: data.cellpadding,
cellspacing: data.cellspacing
});
}
if (shouldStyleWithCss(editor)) {
if (tableElm.children) {
for (var i = 0; i < tableElm.children.length; i++) {
styleTDTH(dom, tableElm.children[i], {
'border-width': addSizeSuffix(data.border),
'border-color': data.borderColor,
'padding': addSizeSuffix(data.cellpadding)
});
}
}
}
if (data.style) {
global$1.extend(styles, dom.parseStyle(data.style));
} else {
styles = global$1.extend({}, dom.parseStyle(dom.getAttrib(tableElm, 'style')), styles);
}
attrs.style = dom.serializeStyle(styles);
dom.setAttribs(tableElm, attrs);
};
var onSubmitTableForm = function (editor, tableElm, evt) {
var dom = editor.dom;
var captionElm;
var data;
if (hasAdvancedTableTab(editor)) {
Helpers.syncAdvancedStyleFields(editor, evt);
}
data = evt.control.rootControl.toJSON();
if (data.class === false) {
delete data.class;
}
editor.undoManager.transact(function () {
if (!tableElm) {
tableElm = InsertTable.insert(editor, data.cols || 1, data.rows || 1);
}
applyDataToElement(editor, tableElm, data);
captionElm = dom.select('caption', tableElm)[0];
if (captionElm && !data.caption) {
dom.remove(captionElm);
}
if (!captionElm && data.caption) {
captionElm = dom.create('caption');
captionElm.innerHTML = !global$2.ie ? '
' : '\xA0';
tableElm.insertBefore(captionElm, tableElm.firstChild);
}
Styles$1.unApplyAlign(editor, tableElm);
if (data.align) {
Styles$1.applyAlign(editor, tableElm, data.align);
}
editor.focus();
editor.addVisual();
});
};
var open$2 = function (editor, isProps) {
var dom = editor.dom;
var tableElm, colsCtrl, rowsCtrl, classListCtrl, data = {}, generalTableForm;
if (isProps === true) {
tableElm = dom.getParent(editor.selection.getStart(), 'table');
if (tableElm) {
data = extractDataFromElement$2(editor, tableElm);
}
} else {
colsCtrl = {
label: 'Cols',
name: 'cols'
};
rowsCtrl = {
label: 'Rows',
name: 'rows'
};
}
if (getTableClassList(editor).length > 0) {
if (data.class) {
data.class = data.class.replace(/\s*mce\-item\-table\s*/g, '');
}
classListCtrl = {
name: 'class',
type: 'listbox',
label: 'Class',
values: Helpers.buildListItems(getTableClassList(editor), function (item) {
if (item.value) {
item.textStyle = function () {
return editor.formatter.getCssText({
block: 'table',
classes: [item.value]
});
};
}
})
};
}
generalTableForm = {
type: 'form',
layout: 'flex',
direction: 'column',
labelGapCalc: 'children',
padding: 0,
items: [
{
type: 'form',
labelGapCalc: false,
padding: 0,
layout: 'grid',
columns: 2,
defaults: {
type: 'textbox',
maxWidth: 50
},
items: hasAppearanceOptions(editor) ? [
colsCtrl,
rowsCtrl,
{
label: 'Width',
name: 'width',
onchange: curry(Helpers.updateStyleField, editor)
},
{
label: 'Height',
name: 'height',
onchange: curry(Helpers.updateStyleField, editor)
},
{
label: 'Cell spacing',
name: 'cellspacing'
},
{
label: 'Cell padding',
name: 'cellpadding'
},
{
label: 'Border',
name: 'border'
},
{
label: 'Caption',
name: 'caption',
type: 'checkbox'
}
] : [
colsCtrl,
rowsCtrl,
{
label: 'Width',
name: 'width',
onchange: curry(Helpers.updateStyleField, editor)
},
{
label: 'Height',
name: 'height',
onchange: curry(Helpers.updateStyleField, editor)
}
]
},
{
label: 'Alignment',
name: 'align',
type: 'listbox',
text: 'None',
values: [
{
text: 'None',
value: ''
},
{
text: 'Left',
value: 'left'
},
{
text: 'Center',
value: 'center'
},
{
text: 'Right',
value: 'right'
}
]
},
classListCtrl
]
};
if (hasAdvancedTableTab(editor)) {
editor.windowManager.open({
title: 'Table properties',
data: data,
bodyType: 'tabpanel',
body: [
{
title: 'General',
type: 'form',
items: generalTableForm
},
Helpers.createStyleForm(editor)
],
onsubmit: curry(onSubmitTableForm, editor, tableElm)
});
} else {
editor.windowManager.open({
title: 'Table properties',
data: data,
body: generalTableForm,
onsubmit: curry(onSubmitTableForm, editor, tableElm)
});
}
};
var TableDialog = { open: open$2 };
var each$3 = global$1.each;
var registerCommands = function (editor, actions, cellSelection, selections, clipboardRows) {
var isRoot = getIsRoot(editor);
var eraseTable = function () {
getSelectionStartCell().orThunk(getSelectionStartCaption).each(function (cellOrCaption) {
var table = TableLookup.table(cellOrCaption, isRoot);
table.filter(not(isRoot)).each(function (table) {
var cursor = Element.fromText('');
after(table, cursor);
remove$2(table);
var rng = editor.dom.createRng();
rng.setStart(cursor.dom(), 0);
rng.setEnd(cursor.dom(), 0);
editor.selection.setRng(rng);
});
});
};
var getSelectionStartFromSelector = function (selector) {
return function () {
return Option.from(editor.dom.getParent(editor.selection.getStart(), selector)).map(Element.fromDom);
};
};
var getSelectionStartCaption = getSelectionStartFromSelector('caption');
var getSelectionStartCell = getSelectionStartFromSelector('th,td');
var getTableFromCell = function (cell) {
return TableLookup.table(cell, isRoot);
};
var getSize = function (table) {
return {
width: getPixelWidth$1(table.dom()),
height: getPixelWidth$1(table.dom())
};
};
var resizeChange = function (editor, oldSize, table) {
var newSize = getSize(table);
if (oldSize.width !== newSize.width || oldSize.height !== newSize.height) {
fireObjectResizeStart(editor, table.dom(), oldSize.width, oldSize.height);
fireObjectResized(editor, table.dom(), newSize.width, newSize.height);
}
};
var actOnSelection = function (execute) {
getSelectionStartCell().each(function (cell) {
getTableFromCell(cell).each(function (table) {
var targets = TableTargets.forMenu(selections, table, cell);
var beforeSize = getSize(table);
execute(table, targets).each(function (rng) {
resizeChange(editor, beforeSize, table);
editor.selection.setRng(rng);
editor.focus();
cellSelection.clear(table);
removeDataStyle(table);
});
});
});
};
var copyRowSelection = function (execute) {
return getSelectionStartCell().bind(function (cell) {
return getTableFromCell(cell).bind(function (table) {
var doc = Element.fromDom(editor.getDoc());
var targets = TableTargets.forMenu(selections, table, cell);
var generators = TableFill.cellOperations(noop, doc, Option.none());
return CopyRows.copyRows(table, targets, generators);
});
});
};
var pasteOnSelection = function (execute) {
clipboardRows.get().each(function (rows) {
var clonedRows = map(rows, function (row) {
return deep(row);
});
getSelectionStartCell().each(function (cell) {
getTableFromCell(cell).each(function (table) {
var doc = Element.fromDom(editor.getDoc());
var generators = TableFill.paste(doc);
var targets = TableTargets.pasteRows(selections, table, cell, clonedRows, generators);
execute(table, targets).each(function (rng) {
editor.selection.setRng(rng);
editor.focus();
cellSelection.clear(table);
});
});
});
});
};
each$3({
mceTableSplitCells: function () {
actOnSelection(actions.unmergeCells);
},
mceTableMergeCells: function () {
actOnSelection(actions.mergeCells);
},
mceTableInsertRowBefore: function () {
actOnSelection(actions.insertRowsBefore);
},
mceTableInsertRowAfter: function () {
actOnSelection(actions.insertRowsAfter);
},
mceTableInsertColBefore: function () {
actOnSelection(actions.insertColumnsBefore);
},
mceTableInsertColAfter: function () {
actOnSelection(actions.insertColumnsAfter);
},
mceTableDeleteCol: function () {
actOnSelection(actions.deleteColumn);
},
mceTableDeleteRow: function () {
actOnSelection(actions.deleteRow);
},
mceTableCutRow: function (grid) {
clipboardRows.set(copyRowSelection());
actOnSelection(actions.deleteRow);
},
mceTableCopyRow: function (grid) {
clipboardRows.set(copyRowSelection());
},
mceTablePasteRowBefore: function (grid) {
pasteOnSelection(actions.pasteRowsBefore);
},
mceTablePasteRowAfter: function (grid) {
pasteOnSelection(actions.pasteRowsAfter);
},
mceTableDelete: eraseTable
}, function (func, name) {
editor.addCommand(name, func);
});
each$3({
mceInsertTable: curry(TableDialog.open, editor),
mceTableProps: curry(TableDialog.open, editor, true),
mceTableRowProps: curry(RowDialog.open, editor),
mceTableCellProps: curry(CellDialog.open, editor)
}, function (func, name) {
editor.addCommand(name, function (ui, val) {
func(val);
});
});
};
var Commands = { registerCommands: registerCommands };
var only = function (element) {
var parent = Option.from(element.dom().documentElement).map(Element.fromDom).getOr(element);
return {
parent: constant(parent),
view: constant(element),
origin: constant(Position(0, 0))
};
};
var detached = function (editable, chrome) {
var origin = function () {
return absolute(chrome);
};
return {
parent: constant(chrome),
view: constant(editable),
origin: origin
};
};
var body$1 = function (editable, chrome) {
return {
parent: constant(chrome),
view: constant(editable),
origin: constant(Position(0, 0))
};
};
var ResizeWire = {
only: only,
detached: detached,
body: body$1
};
var Event = function (fields) {
var struct = Immutable.apply(null, fields);
var handlers = [];
var bind = function (handler) {
if (handler === undefined) {
throw new Error('Event bind error: undefined handler');
}
handlers.push(handler);
};
var unbind = function (handler) {
handlers = filter(handlers, function (h) {
return h !== handler;
});
};
var trigger = function () {
var args = [];
for (var _i = 0; _i < arguments.length; _i++) {
args[_i] = arguments[_i];
}
var event = struct.apply(null, args);
each(handlers, function (handler) {
handler(event);
});
};
return {
bind: bind,
unbind: unbind,
trigger: trigger
};
};
var create$1 = function (typeDefs) {
var registry = map$1(typeDefs, function (event) {
return {
bind: event.bind,
unbind: event.unbind
};
});
var trigger = map$1(typeDefs, function (event) {
return event.trigger;
});
return {
registry: registry,
trigger: trigger
};
};
var Events = { create: create$1 };
var mkEvent = function (target, x, y, stop, prevent, kill, raw) {
return {
target: constant(target),
x: constant(x),
y: constant(y),
stop: stop,
prevent: prevent,
kill: kill,
raw: constant(raw)
};
};
var handle = function (filter, handler) {
return function (rawEvent) {
if (!filter(rawEvent)) {
return;
}
var target = Element.fromDom(rawEvent.target);
var stop = function () {
rawEvent.stopPropagation();
};
var prevent = function () {
rawEvent.preventDefault();
};
var kill = compose(prevent, stop);
var evt = mkEvent(target, rawEvent.clientX, rawEvent.clientY, stop, prevent, kill, rawEvent);
handler(evt);
};
};
var binder = function (element, event, filter, handler, useCapture) {
var wrapped = handle(filter, handler);
element.dom().addEventListener(event, wrapped, useCapture);
return { unbind: curry(unbind, element, event, wrapped, useCapture) };
};
var bind$1 = function (element, event, filter, handler) {
return binder(element, event, filter, handler, false);
};
var unbind = function (element, event, handler, useCapture) {
element.dom().removeEventListener(event, handler, useCapture);
};
var filter$1 = constant(true);
var bind$2 = function (element, event, handler) {
return bind$1(element, event, filter$1, handler);
};
var hasOwnProperty = Object.prototype.hasOwnProperty;
var shallow$1 = function (old, nu) {
return nu;
};
var baseMerge = function (merger) {
return function () {
var objects = new Array(arguments.length);
for (var i = 0; i < objects.length; i++) {
objects[i] = arguments[i];
}
if (objects.length === 0) {
throw new Error('Can\'t merge zero objects');
}
var ret = {};
for (var j = 0; j < objects.length; j++) {
var curObject = objects[j];
for (var key in curObject) {
if (hasOwnProperty.call(curObject, key)) {
ret[key] = merger(ret[key], curObject[key]);
}
}
}
return ret;
};
};
var merge$3 = baseMerge(shallow$1);
var styles$1 = css('ephox-dragster');
var Styles$2 = { resolve: styles$1.resolve };
var Blocker = function (options) {
var settings = merge$3({ layerClass: Styles$2.resolve('blocker') }, options);
var div = Element.fromTag('div');
set(div, 'role', 'presentation');
setAll$1(div, {
position: 'fixed',
left: '0px',
top: '0px',
width: '100%',
height: '100%'
});
add$2(div, Styles$2.resolve('blocker'));
add$2(div, settings.layerClass);
var element = function () {
return div;
};
var destroy = function () {
remove$2(div);
};
return {
element: element,
destroy: destroy
};
};
var DragMode = exactly([
'compare',
'extract',
'mutate',
'sink'
]);
var DragSink = exactly([
'element',
'start',
'stop',
'destroy'
]);
var DragApi = exactly([
'forceDrop',
'drop',
'move',
'delayDrop'
]);
var compare = function (old, nu) {
return Position(nu.left() - old.left(), nu.top() - old.top());
};
var extract$1 = function (event) {
return Option.some(Position(event.x(), event.y()));
};
var mutate = function (mutation, info) {
mutation.mutate(info.left(), info.top());
};
var sink = function (dragApi, settings) {
var blocker = Blocker(settings);
var mdown = bind$2(blocker.element(), 'mousedown', dragApi.forceDrop);
var mup = bind$2(blocker.element(), 'mouseup', dragApi.drop);
var mmove = bind$2(blocker.element(), 'mousemove', dragApi.move);
var mout = bind$2(blocker.element(), 'mouseout', dragApi.delayDrop);
var destroy = function () {
blocker.destroy();
mup.unbind();
mmove.unbind();
mout.unbind();
mdown.unbind();
};
var start = function (parent) {
append(parent, blocker.element());
};
var stop = function () {
remove$2(blocker.element());
};
return DragSink({
element: blocker.element,
start: start,
stop: stop,
destroy: destroy
});
};
var MouseDrag = DragMode({
compare: compare,
extract: extract$1,
sink: sink,
mutate: mutate
});
var last$2 = function (fn, rate) {
var timer = null;
var cancel = function () {
if (timer !== null) {
domGlobals.clearTimeout(timer);
timer = null;
}
};
var throttle = function () {
var args = [];
for (var _i = 0; _i < arguments.length; _i++) {
args[_i] = arguments[_i];
}
if (timer !== null) {
domGlobals.clearTimeout(timer);
}
timer = domGlobals.setTimeout(function () {
fn.apply(null, args);
timer = null;
}, rate);
};
return {
cancel: cancel,
throttle: throttle
};
};
function InDrag () {
var previous = Option.none();
var reset = function () {
previous = Option.none();
};
var update = function (mode, nu) {
var result = previous.map(function (old) {
return mode.compare(old, nu);
});
previous = Option.some(nu);
return result;
};
var onEvent = function (event, mode) {
var dataOption = mode.extract(event);
dataOption.each(function (data) {
var offset = update(mode, data);
offset.each(function (d) {
events.trigger.move(d);
});
});
};
var events = Events.create({ move: Event(['info']) });
return {
onEvent: onEvent,
reset: reset,
events: events.registry
};
}
function NoDrag () {
return {
onEvent: noop,
reset: noop
};
}
function Movement () {
var noDragState = NoDrag();
var inDragState = InDrag();
var dragState = noDragState;
var on = function () {
dragState.reset();
dragState = inDragState;
};
var off = function () {
dragState.reset();
dragState = noDragState;
};
var onEvent = function (event, mode) {
dragState.onEvent(event, mode);
};
var isOn = function () {
return dragState === inDragState;
};
return {
on: on,
off: off,
isOn: isOn,
onEvent: onEvent,
events: inDragState.events
};
}
var setup = function (mutation, mode, settings) {
var active = false;
var events = Events.create({
start: Event([]),
stop: Event([])
});
var movement = Movement();
var drop = function () {
sink.stop();
if (movement.isOn()) {
movement.off();
events.trigger.stop();
}
};
var throttledDrop = last$2(drop, 200);
var go = function (parent) {
sink.start(parent);
movement.on();
events.trigger.start();
};
var mousemove = function (event) {
throttledDrop.cancel();
movement.onEvent(event, mode);
};
movement.events.move.bind(function (event) {
mode.mutate(mutation, event.info());
});
var on = function () {
active = true;
};
var off = function () {
active = false;
};
var runIfActive = function (f) {
return function () {
var args = [];
for (var _i = 0; _i < arguments.length; _i++) {
args[_i] = arguments[_i];
}
if (active) {
f.apply(null, args);
}
};
};
var sink = mode.sink(DragApi({
forceDrop: drop,
drop: runIfActive(drop),
move: runIfActive(mousemove),
delayDrop: runIfActive(throttledDrop.throttle)
}), settings);
var destroy = function () {
sink.destroy();
};
return {
element: sink.element,
go: go,
on: on,
off: off,
destroy: destroy,
events: events.registry
};
};
var Dragging = { setup: setup };
var transform$1 = function (mutation, settings) {
if (settings === void 0) {
settings = {};
}
var mode = settings.mode !== undefined ? settings.mode : MouseDrag;
return Dragging.setup(mutation, mode, settings);
};
var Dragger = { transform: transform$1 };
var Mutation = function () {
var events = Events.create({
drag: Event([
'xDelta',
'yDelta'
])
});
var mutate = function (x, y) {
events.trigger.drag(x, y);
};
return {
mutate: mutate,
events: events.registry
};
};
var BarMutation = function () {
var events = Events.create({
drag: Event([
'xDelta',
'yDelta',
'target'
])
});
var target = Option.none();
var delegate = Mutation();
delegate.events.drag.bind(function (event) {
target.each(function (t) {
events.trigger.drag(event.xDelta(), event.yDelta(), t);
});
});
var assign = function (t) {
target = Option.some(t);
};
var get = function () {
return target;
};
return {
assign: assign,
get: get,
mutate: delegate.mutate,
events: events.registry
};
};
var isContentEditableTrue = function (elm) {
return get(elm, 'contenteditable') === 'true';
};
var findClosestContentEditable = function (target, isRoot) {
return closest$1(target, '[contenteditable]', isRoot);
};
var resizeBarDragging = Styles.resolve('resizer-bar-dragging');
var BarManager = function (wire, direction, hdirection) {
var mutation = BarMutation();
var resizing = Dragger.transform(mutation, {});
var hoverTable = Option.none();
var getResizer = function (element, type) {
return Option.from(get(element, type));
};
mutation.events.drag.bind(function (event) {
getResizer(event.target(), 'data-row').each(function (_dataRow) {
var currentRow = CellUtils.getInt(event.target(), 'top');
set$1(event.target(), 'top', currentRow + event.yDelta() + 'px');
});
getResizer(event.target(), 'data-column').each(function (_dataCol) {
var currentCol = CellUtils.getInt(event.target(), 'left');
set$1(event.target(), 'left', currentCol + event.xDelta() + 'px');
});
});
var getDelta = function (target, dir) {
var newX = CellUtils.getInt(target, dir);
var oldX = parseInt(get(target, 'data-initial-' + dir), 10);
return newX - oldX;
};
resizing.events.stop.bind(function () {
mutation.get().each(function (target) {
hoverTable.each(function (table) {
getResizer(target, 'data-row').each(function (row) {
var delta = getDelta(target, 'top');
remove(target, 'data-initial-top');
events.trigger.adjustHeight(table, delta, parseInt(row, 10));
});
getResizer(target, 'data-column').each(function (column) {
var delta = getDelta(target, 'left');
remove(target, 'data-initial-left');
events.trigger.adjustWidth(table, delta, parseInt(column, 10));
});
Bars.refresh(wire, table, hdirection, direction);
});
});
});
var handler = function (target, dir) {
events.trigger.startAdjust();
mutation.assign(target);
set(target, 'data-initial-' + dir, parseInt(get$1(target, dir), 10));
add$2(target, resizeBarDragging);
set$1(target, 'opacity', '0.2');
resizing.go(wire.parent());
};
var mousedown = bind$2(wire.parent(), 'mousedown', function (event) {
if (Bars.isRowBar(event.target())) {
handler(event.target(), 'top');
}
if (Bars.isColBar(event.target())) {
handler(event.target(), 'left');
}
});
var isRoot = function (e) {
return eq(e, wire.view());
};
var findClosestEditableTable = function (target) {
return closest$1(target, 'table', isRoot).filter(function (table) {
return findClosestContentEditable(table, isRoot).exists(isContentEditableTrue);
});
};
var mouseover = bind$2(wire.view(), 'mouseover', function (event) {
findClosestEditableTable(event.target()).fold(function () {
if (inBody(event.target())) {
Bars.destroy(wire);
}
}, function (table) {
hoverTable = Option.some(table);
Bars.refresh(wire, table, hdirection, direction);
});
});
var destroy = function () {
mousedown.unbind();
mouseover.unbind();
resizing.destroy();
Bars.destroy(wire);
};
var refresh = function (tbl) {
Bars.refresh(wire, tbl, hdirection, direction);
};
var events = Events.create({
adjustHeight: Event([
'table',
'delta',
'row'
]),
adjustWidth: Event([
'table',
'delta',
'column'
]),
startAdjust: Event([])
});
return {
destroy: destroy,
refresh: refresh,
on: resizing.on,
off: resizing.off,
hideBars: curry(Bars.hide, wire),
showBars: curry(Bars.show, wire),
events: events.registry
};
};
var create$2 = function (wire, vdirection) {
var hdirection = BarPositions.height;
var manager = BarManager(wire, vdirection, hdirection);
var events = Events.create({
beforeResize: Event(['table']),
afterResize: Event(['table']),
startDrag: Event([])
});
manager.events.adjustHeight.bind(function (event) {
events.trigger.beforeResize(event.table());
var delta = hdirection.delta(event.delta(), event.table());
Adjustments.adjustHeight(event.table(), delta, event.row(), hdirection);
events.trigger.afterResize(event.table());
});
manager.events.startAdjust.bind(function (event) {
events.trigger.startDrag();
});
manager.events.adjustWidth.bind(function (event) {
events.trigger.beforeResize(event.table());
var delta = vdirection.delta(event.delta(), event.table());
Adjustments.adjustWidth(event.table(), delta, event.column(), vdirection);
events.trigger.afterResize(event.table());
});
return {
on: manager.on,
off: manager.off,
hideBars: manager.hideBars,
showBars: manager.showBars,
destroy: manager.destroy,
events: events.registry
};
};
var TableResize = { create: create$2 };
var createContainer = function () {
var container = Element.fromTag('div');
setAll$1(container, {
position: 'static',
height: '0',
width: '0',
padding: '0',
margin: '0',
border: '0'
});
append(body(), container);
return container;
};
var get$8 = function (editor, container) {
return editor.inline ? ResizeWire.body(getBody$1(editor), createContainer()) : ResizeWire.only(Element.fromDom(editor.getDoc()));
};
var remove$6 = function (editor, wire) {
if (editor.inline) {
remove$2(wire.parent());
}
};
var TableWire = {
get: get$8,
remove: remove$6
};
var ResizeHandler = function (editor) {
var selectionRng = Option.none();
var resize = Option.none();
var wire = Option.none();
var percentageBasedSizeRegex = /(\d+(\.\d+)?)%/;
var startW, startRawW;
var isTable = function (elm) {
return elm.nodeName === 'TABLE';
};
var getRawWidth = function (elm) {
return editor.dom.getStyle(elm, 'width') || editor.dom.getAttrib(elm, 'width');
};
var lazyResize = function () {
return resize;
};
var lazyWire = function () {
return wire.getOr(ResizeWire.only(Element.fromDom(editor.getBody())));
};
var destroy = function () {
resize.each(function (sz) {
sz.destroy();
});
wire.each(function (w) {
TableWire.remove(editor, w);
});
};
editor.on('init', function () {
var direction = TableDirection(Direction.directionAt);
var rawWire = TableWire.get(editor);
wire = Option.some(rawWire);
if (hasObjectResizing(editor) && hasTableResizeBars(editor)) {
var sz = TableResize.create(rawWire, direction);
sz.on();
sz.events.startDrag.bind(function (event) {
selectionRng = Option.some(editor.selection.getRng());
});
sz.events.beforeResize.bind(function (event) {
var rawTable = event.table().dom();
fireObjectResizeStart(editor, rawTable, getPixelWidth$1(rawTable), getPixelHeight(rawTable));
});
sz.events.afterResize.bind(function (event) {
var table = event.table();
var rawTable = table.dom();
removeDataStyle(table);
selectionRng.each(function (rng) {
editor.selection.setRng(rng);
editor.focus();
});
fireObjectResized(editor, rawTable, getPixelWidth$1(rawTable), getPixelHeight(rawTable));
editor.undoManager.add();
});
resize = Option.some(sz);
}
});
editor.on('ObjectResizeStart', function (e) {
var targetElm = e.target;
if (isTable(targetElm)) {
startW = e.width;
startRawW = getRawWidth(targetElm);
}
});
editor.on('ObjectResized', function (e) {
var targetElm = e.target;
if (isTable(targetElm)) {
var table = targetElm;
if (percentageBasedSizeRegex.test(startRawW)) {
var percentW = parseFloat(percentageBasedSizeRegex.exec(startRawW)[1]);
var targetPercentW = e.width * percentW / startW;
editor.dom.setStyle(table, 'width', targetPercentW + '%');
} else {
var newCellSizes_1 = [];
global$1.each(table.rows, function (row) {
global$1.each(row.cells, function (cell) {
var width = editor.dom.getStyle(cell, 'width', true);
newCellSizes_1.push({
cell: cell,
width: width
});
});
});
global$1.each(newCellSizes_1, function (newCellSize) {
editor.dom.setStyle(newCellSize.cell, 'width', newCellSize.width);
editor.dom.setAttrib(newCellSize.cell, 'width', null);
});
}
}
});
return {
lazyResize: lazyResize,
lazyWire: lazyWire,
destroy: destroy
};
};
var adt$1 = Adt.generate([
{ none: ['current'] },
{ first: ['current'] },
{
middle: [
'current',
'target'
]
},
{ last: ['current'] }
]);
var none$1 = function (current) {
if (current === void 0) {
current = undefined;
}
return adt$1.none(current);
};
var CellLocation = __assign(__assign({}, adt$1), { none: none$1 });
var detect$4 = function (current, isRoot) {
return TableLookup.table(current, isRoot).bind(function (table) {
var all = TableLookup.cells(table);
var index = findIndex(all, function (x) {
return eq(current, x);
});
return index.map(function (ind) {
return {
index: constant(ind),
all: constant(all)
};
});
});
};
var next = function (current, isRoot) {
var detection = detect$4(current, isRoot);
return detection.fold(function () {
return CellLocation.none(current);
}, function (info) {
return info.index() + 1 < info.all().length ? CellLocation.middle(current, info.all()[info.index() + 1]) : CellLocation.last(current);
});
};
var prev = function (current, isRoot) {
var detection = detect$4(current, isRoot);
return detection.fold(function () {
return CellLocation.none();
}, function (info) {
return info.index() - 1 >= 0 ? CellLocation.middle(current, info.all()[info.index() - 1]) : CellLocation.first(current);
});
};
var CellNavigation = {
next: next,
prev: prev
};
var create$3 = Immutable('start', 'soffset', 'finish', 'foffset');
var SimRange = { create: create$3 };
var adt$2 = Adt.generate([
{ before: ['element'] },
{
on: [
'element',
'offset'
]
},
{ after: ['element'] }
]);
var cata$1 = function (subject, onBefore, onOn, onAfter) {
return subject.fold(onBefore, onOn, onAfter);
};
var getStart = function (situ) {
return situ.fold(identity, identity, identity);
};
var before$2 = adt$2.before;
var on = adt$2.on;
var after$2 = adt$2.after;
var Situ = {
before: before$2,
on: on,
after: after$2,
cata: cata$1,
getStart: getStart
};
var adt$3 = Adt.generate([
{ domRange: ['rng'] },
{
relative: [
'startSitu',
'finishSitu'
]
},
{
exact: [
'start',
'soffset',
'finish',
'foffset'
]
}
]);
var exactFromRange = function (simRange) {
return adt$3.exact(simRange.start(), simRange.soffset(), simRange.finish(), simRange.foffset());
};
var getStart$1 = function (selection) {
return selection.match({
domRange: function (rng) {
return Element.fromDom(rng.startContainer);
},
relative: function (startSitu, finishSitu) {
return Situ.getStart(startSitu);
},
exact: function (start, soffset, finish, foffset) {
return start;
}
});
};
var domRange = adt$3.domRange;
var relative = adt$3.relative;
var exact = adt$3.exact;
var getWin = function (selection) {
var start = getStart$1(selection);
return defaultView(start);
};
var range$1 = SimRange.create;
var Selection = {
domRange: domRange,
relative: relative,
exact: exact,
exactFromRange: exactFromRange,
getWin: getWin,
range: range$1
};
var selectNodeContents = function (win, element) {
var rng = win.document.createRange();
selectNodeContentsUsing(rng, element);
return rng;
};
var selectNodeContentsUsing = function (rng, element) {
rng.selectNodeContents(element.dom());
};
var setStart = function (rng, situ) {
situ.fold(function (e) {
rng.setStartBefore(e.dom());
}, function (e, o) {
rng.setStart(e.dom(), o);
}, function (e) {
rng.setStartAfter(e.dom());
});
};
var setFinish = function (rng, situ) {
situ.fold(function (e) {
rng.setEndBefore(e.dom());
}, function (e, o) {
rng.setEnd(e.dom(), o);
}, function (e) {
rng.setEndAfter(e.dom());
});
};
var relativeToNative = function (win, startSitu, finishSitu) {
var range = win.document.createRange();
setStart(range, startSitu);
setFinish(range, finishSitu);
return range;
};
var exactToNative = function (win, start, soffset, finish, foffset) {
var rng = win.document.createRange();
rng.setStart(start.dom(), soffset);
rng.setEnd(finish.dom(), foffset);
return rng;
};
var toRect = function (rect) {
return {
left: constant(rect.left),
top: constant(rect.top),
right: constant(rect.right),
bottom: constant(rect.bottom),
width: constant(rect.width),
height: constant(rect.height)
};
};
var getFirstRect = function (rng) {
var rects = rng.getClientRects();
var rect = rects.length > 0 ? rects[0] : rng.getBoundingClientRect();
return rect.width > 0 || rect.height > 0 ? Option.some(rect).map(toRect) : Option.none();
};
var adt$4 = Adt.generate([
{
ltr: [
'start',
'soffset',
'finish',
'foffset'
]
},
{
rtl: [
'start',
'soffset',
'finish',
'foffset'
]
}
]);
var fromRange = function (win, type, range) {
return type(Element.fromDom(range.startContainer), range.startOffset, Element.fromDom(range.endContainer), range.endOffset);
};
var getRanges = function (win, selection) {
return selection.match({
domRange: function (rng) {
return {
ltr: constant(rng),
rtl: Option.none
};
},
relative: function (startSitu, finishSitu) {
return {
ltr: cached(function () {
return relativeToNative(win, startSitu, finishSitu);
}),
rtl: cached(function () {
return Option.some(relativeToNative(win, finishSitu, startSitu));
})
};
},
exact: function (start, soffset, finish, foffset) {
return {
ltr: cached(function () {
return exactToNative(win, start, soffset, finish, foffset);
}),
rtl: cached(function () {
return Option.some(exactToNative(win, finish, foffset, start, soffset));
})
};
}
});
};
var doDiagnose = function (win, ranges) {
var rng = ranges.ltr();
if (rng.collapsed) {
var reversed = ranges.rtl().filter(function (rev) {
return rev.collapsed === false;
});
return reversed.map(function (rev) {
return adt$4.rtl(Element.fromDom(rev.endContainer), rev.endOffset, Element.fromDom(rev.startContainer), rev.startOffset);
}).getOrThunk(function () {
return fromRange(win, adt$4.ltr, rng);
});
} else {
return fromRange(win, adt$4.ltr, rng);
}
};
var diagnose = function (win, selection) {
var ranges = getRanges(win, selection);
return doDiagnose(win, ranges);
};
var asLtrRange = function (win, selection) {
var diagnosis = diagnose(win, selection);
return diagnosis.match({
ltr: function (start, soffset, finish, foffset) {
var rng = win.document.createRange();
rng.setStart(start.dom(), soffset);
rng.setEnd(finish.dom(), foffset);
return rng;
},
rtl: function (start, soffset, finish, foffset) {
var rng = win.document.createRange();
rng.setStart(finish.dom(), foffset);
rng.setEnd(start.dom(), soffset);
return rng;
}
});
};
var searchForPoint = function (rectForOffset, x, y, maxX, length) {
if (length === 0) {
return 0;
} else if (x === maxX) {
return length - 1;
}
var xDelta = maxX;
for (var i = 1; i < length; i++) {
var rect = rectForOffset(i);
var curDeltaX = Math.abs(x - rect.left);
if (y <= rect.bottom) {
if (y < rect.top || curDeltaX > xDelta) {
return i - 1;
} else {
xDelta = curDeltaX;
}
}
}
return 0;
};
var inRect = function (rect, x, y) {
return x >= rect.left && x <= rect.right && y >= rect.top && y <= rect.bottom;
};
var locateOffset = function (doc, textnode, x, y, rect) {
var rangeForOffset = function (o) {
var r = doc.dom().createRange();
r.setStart(textnode.dom(), o);
r.collapse(true);
return r;
};
var rectForOffset = function (o) {
var r = rangeForOffset(o);
return r.getBoundingClientRect();
};
var length = get$2(textnode).length;
var offset = searchForPoint(rectForOffset, x, y, rect.right, length);
return rangeForOffset(offset);
};
var locate = function (doc, node, x, y) {
var r = doc.dom().createRange();
r.selectNode(node.dom());
var rects = r.getClientRects();
var foundRect = findMap(rects, function (rect) {
return inRect(rect, x, y) ? Option.some(rect) : Option.none();
});
return foundRect.map(function (rect) {
return locateOffset(doc, node, x, y, rect);
});
};
var searchInChildren = function (doc, node, x, y) {
var r = doc.dom().createRange();
var nodes = children(node);
return findMap(nodes, function (n) {
r.selectNode(n.dom());
return inRect(r.getBoundingClientRect(), x, y) ? locateNode(doc, n, x, y) : Option.none();
});
};
var locateNode = function (doc, node, x, y) {
return isText(node) ? locate(doc, node, x, y) : searchInChildren(doc, node, x, y);
};
var locate$1 = function (doc, node, x, y) {
var r = doc.dom().createRange();
r.selectNode(node.dom());
var rect = r.getBoundingClientRect();
var boundedX = Math.max(rect.left, Math.min(rect.right, x));
var boundedY = Math.max(rect.top, Math.min(rect.bottom, y));
return locateNode(doc, node, boundedX, boundedY);
};
var COLLAPSE_TO_LEFT = true;
var COLLAPSE_TO_RIGHT = false;
var getCollapseDirection = function (rect, x) {
return x - rect.left < rect.right - x ? COLLAPSE_TO_LEFT : COLLAPSE_TO_RIGHT;
};
var createCollapsedNode = function (doc, target, collapseDirection) {
var r = doc.dom().createRange();
r.selectNode(target.dom());
r.collapse(collapseDirection);
return r;
};
var locateInElement = function (doc, node, x) {
var cursorRange = doc.dom().createRange();
cursorRange.selectNode(node.dom());
var rect = cursorRange.getBoundingClientRect();
var collapseDirection = getCollapseDirection(rect, x);
var f = collapseDirection === COLLAPSE_TO_LEFT ? first : last$1;
return f(node).map(function (target) {
return createCollapsedNode(doc, target, collapseDirection);
});
};
var locateInEmpty = function (doc, node, x) {
var rect = node.dom().getBoundingClientRect();
var collapseDirection = getCollapseDirection(rect, x);
return Option.some(createCollapsedNode(doc, node, collapseDirection));
};
var search = function (doc, node, x) {
var f = children(node).length === 0 ? locateInEmpty : locateInElement;
return f(doc, node, x);
};
var caretPositionFromPoint = function (doc, x, y) {
return Option.from(doc.dom().caretPositionFromPoint(x, y)).bind(function (pos) {
if (pos.offsetNode === null) {
return Option.none();
}
var r = doc.dom().createRange();
r.setStart(pos.offsetNode, pos.offset);
r.collapse();
return Option.some(r);
});
};
var caretRangeFromPoint = function (doc, x, y) {
return Option.from(doc.dom().caretRangeFromPoint(x, y));
};
var searchTextNodes = function (doc, node, x, y) {
var r = doc.dom().createRange();
r.selectNode(node.dom());
var rect = r.getBoundingClientRect();
var boundedX = Math.max(rect.left, Math.min(rect.right, x));
var boundedY = Math.max(rect.top, Math.min(rect.bottom, y));
return locate$1(doc, node, boundedX, boundedY);
};
var searchFromPoint = function (doc, x, y) {
return Element.fromPoint(doc, x, y).bind(function (elem) {
var fallback = function () {
return search(doc, elem, x);
};
return children(elem).length === 0 ? fallback() : searchTextNodes(doc, elem, x, y).orThunk(fallback);
});
};
var availableSearch = document.caretPositionFromPoint ? caretPositionFromPoint : document.caretRangeFromPoint ? caretRangeFromPoint : searchFromPoint;
var fromPoint$1 = function (win, x, y) {
var doc = Element.fromDom(win.document);
return availableSearch(doc, x, y).map(function (rng) {
return SimRange.create(Element.fromDom(rng.startContainer), rng.startOffset, Element.fromDom(rng.endContainer), rng.endOffset);
});
};
var beforeSpecial = function (element, offset) {
var name$1 = name(element);
if ('input' === name$1) {
return Situ.after(element);
} else if (!contains([
'br',
'img'
], name$1)) {
return Situ.on(element, offset);
} else {
return offset === 0 ? Situ.before(element) : Situ.after(element);
}
};
var preprocessRelative = function (startSitu, finishSitu) {
var start = startSitu.fold(Situ.before, beforeSpecial, Situ.after);
var finish = finishSitu.fold(Situ.before, beforeSpecial, Situ.after);
return Selection.relative(start, finish);
};
var preprocessExact = function (start, soffset, finish, foffset) {
var startSitu = beforeSpecial(start, soffset);
var finishSitu = beforeSpecial(finish, foffset);
return Selection.relative(startSitu, finishSitu);
};
var preprocess = function (selection) {
return selection.match({
domRange: function (rng) {
var start = Element.fromDom(rng.startContainer);
var finish = Element.fromDom(rng.endContainer);
return preprocessExact(start, rng.startOffset, finish, rng.endOffset);
},
relative: preprocessRelative,
exact: preprocessExact
});
};
var makeRange = function (start, soffset, finish, foffset) {
var doc = owner(start);
var rng = doc.dom().createRange();
rng.setStart(start.dom(), soffset);
rng.setEnd(finish.dom(), foffset);
return rng;
};
var after$3 = function (start, soffset, finish, foffset) {
var r = makeRange(start, soffset, finish, foffset);
var same = eq(start, finish) && soffset === foffset;
return r.collapsed && !same;
};
var doSetNativeRange = function (win, rng) {
Option.from(win.getSelection()).each(function (selection) {
selection.removeAllRanges();
selection.addRange(rng);
});
};
var doSetRange = function (win, start, soffset, finish, foffset) {
var rng = exactToNative(win, start, soffset, finish, foffset);
doSetNativeRange(win, rng);
};
var setLegacyRtlRange = function (win, selection, start, soffset, finish, foffset) {
selection.collapse(start.dom(), soffset);
selection.extend(finish.dom(), foffset);
};
var setRangeFromRelative = function (win, relative) {
return diagnose(win, relative).match({
ltr: function (start, soffset, finish, foffset) {
doSetRange(win, start, soffset, finish, foffset);
},
rtl: function (start, soffset, finish, foffset) {
var selection = win.getSelection();
if (selection.setBaseAndExtent) {
selection.setBaseAndExtent(start.dom(), soffset, finish.dom(), foffset);
} else if (selection.extend) {
try {
setLegacyRtlRange(win, selection, start, soffset, finish, foffset);
} catch (e) {
doSetRange(win, finish, foffset, start, soffset);
}
} else {
doSetRange(win, finish, foffset, start, soffset);
}
}
});
};
var setExact = function (win, start, soffset, finish, foffset) {
var relative = preprocessExact(start, soffset, finish, foffset);
setRangeFromRelative(win, relative);
};
var setRelative = function (win, startSitu, finishSitu) {
var relative = preprocessRelative(startSitu, finishSitu);
setRangeFromRelative(win, relative);
};
var toNative = function (selection) {
var win = Selection.getWin(selection).dom();
var getDomRange = function (start, soffset, finish, foffset) {
return exactToNative(win, start, soffset, finish, foffset);
};
var filtered = preprocess(selection);
return diagnose(win, filtered).match({
ltr: getDomRange,
rtl: getDomRange
});
};
var readRange = function (selection) {
if (selection.rangeCount > 0) {
var firstRng = selection.getRangeAt(0);
var lastRng = selection.getRangeAt(selection.rangeCount - 1);
return Option.some(SimRange.create(Element.fromDom(firstRng.startContainer), firstRng.startOffset, Element.fromDom(lastRng.endContainer), lastRng.endOffset));
} else {
return Option.none();
}
};
var doGetExact = function (selection) {
var anchor = Element.fromDom(selection.anchorNode);
var focus = Element.fromDom(selection.focusNode);
return after$3(anchor, selection.anchorOffset, focus, selection.focusOffset) ? Option.some(SimRange.create(anchor, selection.anchorOffset, focus, selection.focusOffset)) : readRange(selection);
};
var setToElement = function (win, element) {
var rng = selectNodeContents(win, element);
doSetNativeRange(win, rng);
};
var getExact = function (win) {
return Option.from(win.getSelection()).filter(function (sel) {
return sel.rangeCount > 0;
}).bind(doGetExact);
};
var get$9 = function (win) {
return getExact(win).map(function (range) {
return Selection.exact(range.start(), range.soffset(), range.finish(), range.foffset());
});
};
var getFirstRect$1 = function (win, selection) {
var rng = asLtrRange(win, selection);
return getFirstRect(rng);
};
var getAtPoint = function (win, x, y) {
return fromPoint$1(win, x, y);
};
var clear = function (win) {
var selection = win.getSelection();
selection.removeAllRanges();
};
var global$3 = tinymce.util.Tools.resolve('tinymce.util.VK');
var forward = function (editor, isRoot, cell, lazyWire) {
return go(editor, isRoot, CellNavigation.next(cell), lazyWire);
};
var backward = function (editor, isRoot, cell, lazyWire) {
return go(editor, isRoot, CellNavigation.prev(cell), lazyWire);
};
var getCellFirstCursorPosition = function (editor, cell) {
var selection = Selection.exact(cell, 0, cell, 0);
return toNative(selection);
};
var getNewRowCursorPosition = function (editor, table) {
var rows = descendants$1(table, 'tr');
return last(rows).bind(function (last) {
return descendant$1(last, 'td,th').map(function (first) {
return getCellFirstCursorPosition(editor, first);
});
});
};
var go = function (editor, isRoot, cell, actions, lazyWire) {
return cell.fold(Option.none, Option.none, function (current, next) {
return first(next).map(function (cell) {
return getCellFirstCursorPosition(editor, cell);
});
}, function (current) {
return TableLookup.table(current, isRoot).bind(function (table) {
var targets = TableTargets.noMenu(current);
editor.undoManager.transact(function () {
actions.insertRowsAfter(table, targets);
});
return getNewRowCursorPosition(editor, table);
});
});
};
var rootElements = [
'table',
'li',
'dl'
];
var handle$1 = function (event, editor, actions, lazyWire) {
if (event.keyCode === global$3.TAB) {
var body_1 = getBody$1(editor);
var isRoot_1 = function (element) {
var name$1 = name(element);
return eq(element, body_1) || contains(rootElements, name$1);
};
var rng = editor.selection.getRng();
if (rng.collapsed) {
var start = Element.fromDom(rng.startContainer);
TableLookup.cell(start, isRoot_1).each(function (cell) {
event.preventDefault();
var navigation = event.shiftKey ? backward : forward;
var rng = navigation(editor, isRoot_1, cell, actions, lazyWire);
rng.each(function (range) {
editor.selection.setRng(range);
});
});
}
}
};
var TabContext = { handle: handle$1 };
var create$4 = Immutable('selection', 'kill');
var Response = { create: create$4 };
var create$5 = function (start, soffset, finish, foffset) {
return {
start: constant(Situ.on(start, soffset)),
finish: constant(Situ.on(finish, foffset))
};
};
var Situs = { create: create$5 };
var convertToRange = function (win, selection) {
var rng = asLtrRange(win, selection);
return SimRange.create(Element.fromDom(rng.startContainer), rng.startOffset, Element.fromDom(rng.endContainer), rng.endOffset);
};
var makeSitus = Situs.create;
var Util = {
convertToRange: convertToRange,
makeSitus: makeSitus
};
var sync = function (container, isRoot, start, soffset, finish, foffset, selectRange) {
if (!(eq(start, finish) && soffset === foffset)) {
return closest$1(start, 'td,th', isRoot).bind(function (s) {
return closest$1(finish, 'td,th', isRoot).bind(function (f) {
return detect$5(container, isRoot, s, f, selectRange);
});
});
} else {
return Option.none();
}
};
var detect$5 = function (container, isRoot, start, finish, selectRange) {
if (!eq(start, finish)) {
return CellSelection.identify(start, finish, isRoot).bind(function (cellSel) {
var boxes = cellSel.boxes().getOr([]);
if (boxes.length > 0) {
selectRange(container, boxes, cellSel.start(), cellSel.finish());
return Option.some(Response.create(Option.some(Util.makeSitus(start, 0, start, getEnd(start))), true));
} else {
return Option.none();
}
});
} else {
return Option.none();
}
};
var update = function (rows, columns, container, selected, annotations) {
var updateSelection = function (newSels) {
annotations.clear(container);
annotations.selectRange(container, newSels.boxes(), newSels.start(), newSels.finish());
return newSels.boxes();
};
return CellSelection.shiftSelection(selected, rows, columns, annotations.firstSelectedSelector(), annotations.lastSelectedSelector()).map(updateSelection);
};
var KeySelection = {
sync: sync,
detect: detect$5,
update: update
};
var traverse = Immutable('item', 'mode');
var backtrack = function (universe, item, _direction, transition) {
if (transition === void 0) {
transition = sidestep;
}
return universe.property().parent(item).map(function (p) {
return traverse(p, transition);
});
};
var sidestep = function (universe, item, direction, transition) {
if (transition === void 0) {
transition = advance;
}
return direction.sibling(universe, item).map(function (p) {
return traverse(p, transition);
});
};
var advance = function (universe, item, direction, transition) {
if (transition === void 0) {
transition = advance;
}
var children = universe.property().children(item);
var result = direction.first(children);
return result.map(function (r) {
return traverse(r, transition);
});
};
var successors = [
{
current: backtrack,
next: sidestep,
fallback: Option.none()
},
{
current: sidestep,
next: advance,
fallback: Option.some(backtrack)
},
{
current: advance,
next: advance,
fallback: Option.some(sidestep)
}
];
var go$1 = function (universe, item, mode, direction, rules) {
if (rules === void 0) {
rules = successors;
}
var ruleOpt = find(rules, function (succ) {
return succ.current === mode;
});
return ruleOpt.bind(function (rule) {
return rule.current(universe, item, direction, rule.next).orThunk(function () {
return rule.fallback.bind(function (fb) {
return go$1(universe, item, fb, direction);
});
});
});
};
var left = function () {
var sibling = function (universe, item) {
return universe.query().prevSibling(item);
};
var first = function (children) {
return children.length > 0 ? Option.some(children[children.length - 1]) : Option.none();
};
return {
sibling: sibling,
first: first
};
};
var right = function () {
var sibling = function (universe, item) {
return universe.query().nextSibling(item);
};
var first = function (children) {
return children.length > 0 ? Option.some(children[0]) : Option.none();
};
return {
sibling: sibling,
first: first
};
};
var Walkers = {
left: left,
right: right
};
var hone = function (universe, item, predicate, mode, direction, isRoot) {
var next = go$1(universe, item, mode, direction);
return next.bind(function (n) {
if (isRoot(n.item())) {
return Option.none();
} else {
return predicate(n.item()) ? Option.some(n.item()) : hone(universe, n.item(), predicate, n.mode(), direction, isRoot);
}
});
};
var left$1 = function (universe, item, predicate, isRoot) {
return hone(universe, item, predicate, sidestep, Walkers.left(), isRoot);
};
var right$1 = function (universe, item, predicate, isRoot) {
return hone(universe, item, predicate, sidestep, Walkers.right(), isRoot);
};
var isLeaf = function (universe) {
return function (element) {
return universe.property().children(element).length === 0;
};
};
var before$3 = function (universe, item, isRoot) {
return seekLeft(universe, item, isLeaf(universe), isRoot);
};
var after$4 = function (universe, item, isRoot) {
return seekRight(universe, item, isLeaf(universe), isRoot);
};
var seekLeft = left$1;
var seekRight = right$1;
var universe$2 = DomUniverse();
var before$4 = function (element, isRoot) {
return before$3(universe$2, element, isRoot);
};
var after$5 = function (element, isRoot) {
return after$4(universe$2, element, isRoot);
};
var seekLeft$1 = function (element, predicate, isRoot) {
return seekLeft(universe$2, element, predicate, isRoot);
};
var seekRight$1 = function (element, predicate, isRoot) {
return seekRight(universe$2, element, predicate, isRoot);
};
var ancestor$2 = function (scope, predicate, isRoot) {
return ancestor(scope, predicate, isRoot).isSome();
};
var point = Immutable('element', 'offset');
var delta = Immutable('element', 'deltaOffset');
var range$2 = Immutable('element', 'start', 'finish');
var points = Immutable('begin', 'end');
var text = Immutable('element', 'text');
var adt$5 = Adt.generate([
{ none: ['message'] },
{ success: [] },
{ failedUp: ['cell'] },
{ failedDown: ['cell'] }
]);
var isOverlapping = function (bridge, before, after) {
var beforeBounds = bridge.getRect(before);
var afterBounds = bridge.getRect(after);
return afterBounds.right > beforeBounds.left && afterBounds.left < beforeBounds.right;
};
var isRow = function (elem) {
return closest$1(elem, 'tr');
};
var verify = function (bridge, before, beforeOffset, after, afterOffset, failure, isRoot) {
return closest$1(after, 'td,th', isRoot).bind(function (afterCell) {
return closest$1(before, 'td,th', isRoot).map(function (beforeCell) {
if (!eq(afterCell, beforeCell)) {
return DomParent.sharedOne(isRow, [
afterCell,
beforeCell
]).fold(function () {
return isOverlapping(bridge, beforeCell, afterCell) ? adt$5.success() : failure(beforeCell);
}, function (_sharedRow) {
return failure(beforeCell);
});
} else {
return eq(after, afterCell) && getEnd(afterCell) === afterOffset ? failure(beforeCell) : adt$5.none('in same cell');
}
});
}).getOr(adt$5.none('default'));
};
var cata$2 = function (subject, onNone, onSuccess, onFailedUp, onFailedDown) {
return subject.fold(onNone, onSuccess, onFailedUp, onFailedDown);
};
var BeforeAfter = __assign(__assign({}, adt$5), {
verify: verify,
cata: cata$2
});
var inAncestor = Immutable('ancestor', 'descendants', 'element', 'index');
var inParent = Immutable('parent', 'children', 'element', 'index');
var indexInParent = function (element) {
return parent(element).bind(function (parent) {
var children$1 = children(parent);
return indexOf(children$1, element).map(function (index) {
return inParent(parent, children$1, element, index);
});
});
};
var indexOf = function (elements, element) {
return findIndex(elements, curry(eq, element));
};
var isBr = function (elem) {
return name(elem) === 'br';
};
var gatherer = function (cand, gather, isRoot) {
return gather(cand, isRoot).bind(function (target) {
return isText(target) && get$2(target).trim().length === 0 ? gatherer(target, gather, isRoot) : Option.some(target);
});
};
var handleBr = function (isRoot, element, direction) {
return direction.traverse(element).orThunk(function () {
return gatherer(element, direction.gather, isRoot);
}).map(direction.relative);
};
var findBr = function (element, offset) {
return child(element, offset).filter(isBr).orThunk(function () {
return child(element, offset - 1).filter(isBr);
});
};
var handleParent = function (isRoot, element, offset, direction) {
return findBr(element, offset).bind(function (br) {
return direction.traverse(br).fold(function () {
return gatherer(br, direction.gather, isRoot).map(direction.relative);
}, function (adjacent) {
return indexInParent(adjacent).map(function (info) {
return Situ.on(info.parent(), info.index());
});
});
});
};
var tryBr = function (isRoot, element, offset, direction) {
var target = isBr(element) ? handleBr(isRoot, element, direction) : handleParent(isRoot, element, offset, direction);
return target.map(function (tgt) {
return {
start: constant(tgt),
finish: constant(tgt)
};
});
};
var process = function (analysis) {
return BeforeAfter.cata(analysis, function (message) {
return Option.none();
}, function () {
return Option.none();
}, function (cell) {
return Option.some(point(cell, 0));
}, function (cell) {
return Option.some(point(cell, getEnd(cell)));
});
};
var BrTags = {
tryBr: tryBr,
process: process
};
var nu$3 = MixedBag([
'left',
'top',
'right',
'bottom'
], []);
var moveDown = function (caret, amount) {
return nu$3({
left: caret.left(),
top: caret.top() + amount,
right: caret.right(),
bottom: caret.bottom() + amount
});
};
var moveUp = function (caret, amount) {
return nu$3({
left: caret.left(),
top: caret.top() - amount,
right: caret.right(),
bottom: caret.bottom() - amount
});
};
var moveBottomTo = function (caret, bottom) {
var height = caret.bottom() - caret.top();
return nu$3({
left: caret.left(),
top: bottom - height,
right: caret.right(),
bottom: bottom
});
};
var moveTopTo = function (caret, top) {
var height = caret.bottom() - caret.top();
return nu$3({
left: caret.left(),
top: top,
right: caret.right(),
bottom: top + height
});
};
var translate = function (caret, xDelta, yDelta) {
return nu$3({
left: caret.left() + xDelta,
top: caret.top() + yDelta,
right: caret.right() + xDelta,
bottom: caret.bottom() + yDelta
});
};
var getTop$1 = function (caret) {
return caret.top();
};
var getBottom = function (caret) {
return caret.bottom();
};
var toString = function (caret) {
return '(' + caret.left() + ', ' + caret.top() + ') -> (' + caret.right() + ', ' + caret.bottom() + ')';
};
var Carets = {
nu: nu$3,
moveUp: moveUp,
moveDown: moveDown,
moveBottomTo: moveBottomTo,
moveTopTo: moveTopTo,
getTop: getTop$1,
getBottom: getBottom,
translate: translate,
toString: toString
};
var getPartialBox = function (bridge, element, offset) {
if (offset >= 0 && offset < getEnd(element)) {
return bridge.getRangedRect(element, offset, element, offset + 1);
} else if (offset > 0) {
return bridge.getRangedRect(element, offset - 1, element, offset);
}
return Option.none();
};
var toCaret = function (rect) {
return Carets.nu({
left: rect.left,
top: rect.top,
right: rect.right,
bottom: rect.bottom
});
};
var getElemBox = function (bridge, element) {
return Option.some(bridge.getRect(element));
};
var getBoxAt = function (bridge, element, offset) {
if (isElement(element)) {
return getElemBox(bridge, element).map(toCaret);
} else if (isText(element)) {
return getPartialBox(bridge, element, offset).map(toCaret);
} else {
return Option.none();
}
};
var getEntireBox = function (bridge, element) {
if (isElement(element)) {
return getElemBox(bridge, element).map(toCaret);
} else if (isText(element)) {
return bridge.getRangedRect(element, 0, element, getEnd(element)).map(toCaret);
} else {
return Option.none();
}
};
var Rectangles = {
getBoxAt: getBoxAt,
getEntireBox: getEntireBox
};
var JUMP_SIZE = 5;
var NUM_RETRIES = 100;
var adt$6 = Adt.generate([
{ none: [] },
{ retry: ['caret'] }
]);
var isOutside = function (caret, box) {
return caret.left() < box.left() || Math.abs(box.right() - caret.left()) < 1 || caret.left() > box.right();
};
var inOutsideBlock = function (bridge, element, caret) {
return closest(element, DomStructure.isBlock).fold(constant(false), function (cell) {
return Rectangles.getEntireBox(bridge, cell).exists(function (box) {
return isOutside(caret, box);
});
});
};
var adjustDown = function (bridge, element, guessBox, original, caret) {
var lowerCaret = Carets.moveDown(caret, JUMP_SIZE);
if (Math.abs(guessBox.bottom() - original.bottom()) < 1) {
return adt$6.retry(lowerCaret);
} else if (guessBox.top() > caret.bottom()) {
return adt$6.retry(lowerCaret);
} else if (guessBox.top() === caret.bottom()) {
return adt$6.retry(Carets.moveDown(caret, 1));
} else {
return inOutsideBlock(bridge, element, caret) ? adt$6.retry(Carets.translate(lowerCaret, JUMP_SIZE, 0)) : adt$6.none();
}
};
var adjustUp = function (bridge, element, guessBox, original, caret) {
var higherCaret = Carets.moveUp(caret, JUMP_SIZE);
if (Math.abs(guessBox.top() - original.top()) < 1) {
return adt$6.retry(higherCaret);
} else if (guessBox.bottom() < caret.top()) {
return adt$6.retry(higherCaret);
} else if (guessBox.bottom() === caret.top()) {
return adt$6.retry(Carets.moveUp(caret, 1));
} else {
return inOutsideBlock(bridge, element, caret) ? adt$6.retry(Carets.translate(higherCaret, JUMP_SIZE, 0)) : adt$6.none();
}
};
var upMovement = {
point: Carets.getTop,
adjuster: adjustUp,
move: Carets.moveUp,
gather: before$4
};
var downMovement = {
point: Carets.getBottom,
adjuster: adjustDown,
move: Carets.moveDown,
gather: after$5
};
var isAtTable = function (bridge, x, y) {
return bridge.elementFromPoint(x, y).filter(function (elm) {
return name(elm) === 'table';
}).isSome();
};
var adjustForTable = function (bridge, movement, original, caret, numRetries) {
return adjustTil(bridge, movement, original, movement.move(caret, JUMP_SIZE), numRetries);
};
var adjustTil = function (bridge, movement, original, caret, numRetries) {
if (numRetries === 0) {
return Option.some(caret);
}
if (isAtTable(bridge, caret.left(), movement.point(caret))) {
return adjustForTable(bridge, movement, original, caret, numRetries - 1);
}
return bridge.situsFromPoint(caret.left(), movement.point(caret)).bind(function (guess) {
return guess.start().fold(Option.none, function (element) {
return Rectangles.getEntireBox(bridge, element).bind(function (guessBox) {
return movement.adjuster(bridge, element, guessBox, original, caret).fold(Option.none, function (newCaret) {
return adjustTil(bridge, movement, original, newCaret, numRetries - 1);
});
}).orThunk(function () {
return Option.some(caret);
});
}, Option.none);
});
};
var ieTryDown = function (bridge, caret) {
return bridge.situsFromPoint(caret.left(), caret.bottom() + JUMP_SIZE);
};
var ieTryUp = function (bridge, caret) {
return bridge.situsFromPoint(caret.left(), caret.top() - JUMP_SIZE);
};
var checkScroll = function (movement, adjusted, bridge) {
if (movement.point(adjusted) > bridge.getInnerHeight()) {
return Option.some(movement.point(adjusted) - bridge.getInnerHeight());
} else if (movement.point(adjusted) < 0) {
return Option.some(-movement.point(adjusted));
} else {
return Option.none();
}
};
var retry = function (movement, bridge, caret) {
var moved = movement.move(caret, JUMP_SIZE);
var adjusted = adjustTil(bridge, movement, caret, moved, NUM_RETRIES).getOr(moved);
return checkScroll(movement, adjusted, bridge).fold(function () {
return bridge.situsFromPoint(adjusted.left(), movement.point(adjusted));
}, function (delta) {
bridge.scrollBy(0, delta);
return bridge.situsFromPoint(adjusted.left(), movement.point(adjusted) - delta);
});
};
var Retries = {
tryUp: curry(retry, upMovement),
tryDown: curry(retry, downMovement),
ieTryUp: ieTryUp,
ieTryDown: ieTryDown,
getJumpSize: constant(JUMP_SIZE)
};
var MAX_RETRIES = 20;
var platform$1 = PlatformDetection$1.detect();
var findSpot = function (bridge, isRoot, direction) {
return bridge.getSelection().bind(function (sel) {
return BrTags.tryBr(isRoot, sel.finish(), sel.foffset(), direction).fold(function () {
return Option.some(point(sel.finish(), sel.foffset()));
}, function (brNeighbour) {
var range = bridge.fromSitus(brNeighbour);
var analysis = BeforeAfter.verify(bridge, sel.finish(), sel.foffset(), range.finish(), range.foffset(), direction.failure, isRoot);
return BrTags.process(analysis);
});
});
};
var scan = function (bridge, isRoot, element, offset, direction, numRetries) {
if (numRetries === 0) {
return Option.none();
}
return tryCursor(bridge, isRoot, element, offset, direction).bind(function (situs) {
var range = bridge.fromSitus(situs);
var analysis = BeforeAfter.verify(bridge, element, offset, range.finish(), range.foffset(), direction.failure, isRoot);
return BeforeAfter.cata(analysis, function () {
return Option.none();
}, function () {
return Option.some(situs);
}, function (cell) {
if (eq(element, cell) && offset === 0) {
return tryAgain(bridge, element, offset, Carets.moveUp, direction);
} else {
return scan(bridge, isRoot, cell, 0, direction, numRetries - 1);
}
}, function (cell) {
if (eq(element, cell) && offset === getEnd(cell)) {
return tryAgain(bridge, element, offset, Carets.moveDown, direction);
} else {
return scan(bridge, isRoot, cell, getEnd(cell), direction, numRetries - 1);
}
});
});
};
var tryAgain = function (bridge, element, offset, move, direction) {
return Rectangles.getBoxAt(bridge, element, offset).bind(function (box) {
return tryAt(bridge, direction, move(box, Retries.getJumpSize()));
});
};
var tryAt = function (bridge, direction, box) {
if (platform$1.browser.isChrome() || platform$1.browser.isSafari() || platform$1.browser.isFirefox() || platform$1.browser.isEdge()) {
return direction.otherRetry(bridge, box);
} else if (platform$1.browser.isIE()) {
return direction.ieRetry(bridge, box);
} else {
return Option.none();
}
};
var tryCursor = function (bridge, isRoot, element, offset, direction) {
return Rectangles.getBoxAt(bridge, element, offset).bind(function (box) {
return tryAt(bridge, direction, box);
});
};
var handle$2 = function (bridge, isRoot, direction) {
return findSpot(bridge, isRoot, direction).bind(function (spot) {
return scan(bridge, isRoot, spot.element(), spot.offset(), direction, MAX_RETRIES).map(bridge.fromSitus);
});
};
var TableKeys = { handle: handle$2 };
var detection = PlatformDetection$1.detect();
var inSameTable = function (elem, table) {
return ancestor$2(elem, function (e) {
return parent(e).exists(function (p) {
return eq(p, table);
});
});
};
var simulate = function (bridge, isRoot, direction, initial, anchor) {
return closest$1(initial, 'td,th', isRoot).bind(function (start) {
return closest$1(start, 'table', isRoot).bind(function (table) {
if (!inSameTable(anchor, table)) {
return Option.none();
}
return TableKeys.handle(bridge, isRoot, direction).bind(function (range) {
return closest$1(range.finish(), 'td,th', isRoot).map(function (finish) {
return {
start: constant(start),
finish: constant(finish),
range: constant(range)
};
});
});
});
});
};
var navigate = function (bridge, isRoot, direction, initial, anchor, precheck) {
if (detection.browser.isIE()) {
return Option.none();
} else {
return precheck(initial, isRoot).orThunk(function () {
return simulate(bridge, isRoot, direction, initial, anchor).map(function (info) {
var range = info.range();
return Response.create(Option.some(Util.makeSitus(range.start(), range.soffset(), range.finish(), range.foffset())), true);
});
});
}
};
var firstUpCheck = function (initial, isRoot) {
return closest$1(initial, 'tr', isRoot).bind(function (startRow) {
return closest$1(startRow, 'table', isRoot).bind(function (table) {
var rows = descendants$1(table, 'tr');
if (eq(startRow, rows[0])) {
return seekLeft$1(table, function (element) {
return last$1(element).isSome();
}, isRoot).map(function (last) {
var lastOffset = getEnd(last);
return Response.create(Option.some(Util.makeSitus(last, lastOffset, last, lastOffset)), true);
});
} else {
return Option.none();
}
});
});
};
var lastDownCheck = function (initial, isRoot) {
return closest$1(initial, 'tr', isRoot).bind(function (startRow) {
return closest$1(startRow, 'table', isRoot).bind(function (table) {
var rows = descendants$1(table, 'tr');
if (eq(startRow, rows[rows.length - 1])) {
return seekRight$1(table, function (element) {
return first(element).isSome();
}, isRoot).map(function (first) {
return Response.create(Option.some(Util.makeSitus(first, 0, first, 0)), true);
});
} else {
return Option.none();
}
});
});
};
var select = function (bridge, container, isRoot, direction, initial, anchor, selectRange) {
return simulate(bridge, isRoot, direction, initial, anchor).bind(function (info) {
return KeySelection.detect(container, isRoot, info.start(), info.finish(), selectRange);
});
};
var VerticalMovement = {
navigate: navigate,
select: select,
firstUpCheck: firstUpCheck,
lastDownCheck: lastDownCheck
};
var findCell = function (target, isRoot) {
return closest$1(target, 'td,th', isRoot);
};
function MouseSelection (bridge, container, isRoot, annotations) {
var cursor = Option.none();
var clearState = function () {
cursor = Option.none();
};
var mousedown = function (event) {
annotations.clear(container);
cursor = findCell(event.target(), isRoot);
};
var mouseover = function (event) {
cursor.each(function (start) {
annotations.clear(container);
findCell(event.target(), isRoot).each(function (finish) {
CellSelection.identify(start, finish, isRoot).each(function (cellSel) {
var boxes = cellSel.boxes().getOr([]);
if (boxes.length > 1 || boxes.length === 1 && !eq(start, finish)) {
annotations.selectRange(container, boxes, cellSel.start(), cellSel.finish());
bridge.selectContents(finish);
}
});
});
});
};
var mouseup = function (_event) {
cursor.each(clearState);
};
return {
mousedown: mousedown,
mouseover: mouseover,
mouseup: mouseup
};
}
var down = {
traverse: nextSibling,
gather: after$5,
relative: Situ.before,
otherRetry: Retries.tryDown,
ieRetry: Retries.ieTryDown,
failure: BeforeAfter.failedDown
};
var up = {
traverse: prevSibling,
gather: before$4,
relative: Situ.before,
otherRetry: Retries.tryUp,
ieRetry: Retries.ieTryUp,
failure: BeforeAfter.failedUp
};
var KeyDirection = {
down: down,
up: up
};
var isKey = function (key) {
return function (keycode) {
return keycode === key;
};
};
var isUp = isKey(38);
var isDown = isKey(40);
var isNavigation = function (keycode) {
return keycode >= 37 && keycode <= 40;
};
var SelectionKeys = {
ltr: {
isBackward: isKey(37),
isForward: isKey(39)
},
rtl: {
isBackward: isKey(39),
isForward: isKey(37)
},
isUp: isUp,
isDown: isDown,
isNavigation: isNavigation
};
var toRaw = function (sr) {
return {
left: sr.left(),
top: sr.top(),
right: sr.right(),
bottom: sr.bottom(),
width: sr.width(),
height: sr.height()
};
};
var Rect = { toRaw: toRaw };
var isSafari = PlatformDetection$1.detect().browser.isSafari();
var get$a = function (_DOC) {
var doc = _DOC !== undefined ? _DOC.dom() : domGlobals.document;
var x = doc.body.scrollLeft || doc.documentElement.scrollLeft;
var y = doc.body.scrollTop || doc.documentElement.scrollTop;
return Position(x, y);
};
var by = function (x, y, _DOC) {
var doc = _DOC !== undefined ? _DOC.dom() : domGlobals.document;
var win = doc.defaultView;
win.scrollBy(x, y);
};
var WindowBridge = function (win) {
var elementFromPoint = function (x, y) {
return Element.fromPoint(Element.fromDom(win.document), x, y);
};
var getRect = function (element) {
return element.dom().getBoundingClientRect();
};
var getRangedRect = function (start, soffset, finish, foffset) {
var sel = Selection.exact(start, soffset, finish, foffset);
return getFirstRect$1(win, sel).map(Rect.toRaw);
};
var getSelection = function () {
return get$9(win).map(function (exactAdt) {
return Util.convertToRange(win, exactAdt);
});
};
var fromSitus = function (situs) {
var relative = Selection.relative(situs.start(), situs.finish());
return Util.convertToRange(win, relative);
};
var situsFromPoint = function (x, y) {
return getAtPoint(win, x, y).map(function (exact) {
return Situs.create(exact.start(), exact.soffset(), exact.finish(), exact.foffset());
});
};
var clearSelection = function () {
clear(win);
};
var selectContents = function (element) {
setToElement(win, element);
};
var setSelection = function (sel) {
setExact(win, sel.start(), sel.soffset(), sel.finish(), sel.foffset());
};
var setRelativeSelection = function (start, finish) {
setRelative(win, start, finish);
};
var getInnerHeight = function () {
return win.innerHeight;
};
var getScrollY = function () {
var pos = get$a(Element.fromDom(win.document));
return pos.top();
};
var scrollBy = function (x, y) {
by(x, y, Element.fromDom(win.document));
};
return {
elementFromPoint: elementFromPoint,
getRect: getRect,
getRangedRect: getRangedRect,
getSelection: getSelection,
fromSitus: fromSitus,
situsFromPoint: situsFromPoint,
clearSelection: clearSelection,
setSelection: setSelection,
setRelativeSelection: setRelativeSelection,
selectContents: selectContents,
getInnerHeight: getInnerHeight,
getScrollY: getScrollY,
scrollBy: scrollBy
};
};
var rc = Immutable('rows', 'cols');
var mouse = function (win, container, isRoot, annotations) {
var bridge = WindowBridge(win);
var handlers = MouseSelection(bridge, container, isRoot, annotations);
return {
mousedown: handlers.mousedown,
mouseover: handlers.mouseover,
mouseup: handlers.mouseup
};
};
var keyboard = function (win, container, isRoot, annotations) {
var bridge = WindowBridge(win);
var clearToNavigate = function () {
annotations.clear(container);
return Option.none();
};
var keydown = function (event, start, soffset, finish, foffset, direction) {
var realEvent = event.raw();
var keycode = realEvent.which;
var shiftKey = realEvent.shiftKey === true;
var handler = CellSelection.retrieve(container, annotations.selectedSelector()).fold(function () {
if (SelectionKeys.isDown(keycode) && shiftKey) {
return curry(VerticalMovement.select, bridge, container, isRoot, KeyDirection.down, finish, start, annotations.selectRange);
} else if (SelectionKeys.isUp(keycode) && shiftKey) {
return curry(VerticalMovement.select, bridge, container, isRoot, KeyDirection.up, finish, start, annotations.selectRange);
} else if (SelectionKeys.isDown(keycode)) {
return curry(VerticalMovement.navigate, bridge, isRoot, KeyDirection.down, finish, start, VerticalMovement.lastDownCheck);
} else if (SelectionKeys.isUp(keycode)) {
return curry(VerticalMovement.navigate, bridge, isRoot, KeyDirection.up, finish, start, VerticalMovement.firstUpCheck);
} else {
return Option.none;
}
}, function (selected) {
var update = function (attempts) {
return function () {
var navigation = findMap(attempts, function (delta) {
return KeySelection.update(delta.rows(), delta.cols(), container, selected, annotations);
});
return navigation.fold(function () {
return CellSelection.getEdges(container, annotations.firstSelectedSelector(), annotations.lastSelectedSelector()).map(function (edges) {
var relative = SelectionKeys.isDown(keycode) || direction.isForward(keycode) ? Situ.after : Situ.before;
bridge.setRelativeSelection(Situ.on(edges.first(), 0), relative(edges.table()));
annotations.clear(container);
return Response.create(Option.none(), true);
});
}, function (_) {
return Option.some(Response.create(Option.none(), true));
});
};
};
if (SelectionKeys.isDown(keycode) && shiftKey) {
return update([rc(+1, 0)]);
} else if (SelectionKeys.isUp(keycode) && shiftKey) {
return update([rc(-1, 0)]);
} else if (direction.isBackward(keycode) && shiftKey) {
return update([
rc(0, -1),
rc(-1, 0)
]);
} else if (direction.isForward(keycode) && shiftKey) {
return update([
rc(0, +1),
rc(+1, 0)
]);
} else if (SelectionKeys.isNavigation(keycode) && shiftKey === false) {
return clearToNavigate;
} else {
return Option.none;
}
});
return handler();
};
var keyup = function (event, start, soffset, finish, foffset) {
return CellSelection.retrieve(container, annotations.selectedSelector()).fold(function () {
var realEvent = event.raw();
var keycode = realEvent.which;
var shiftKey = realEvent.shiftKey === true;
if (shiftKey === false) {
return Option.none();
}
if (SelectionKeys.isNavigation(keycode)) {
return KeySelection.sync(container, isRoot, start, soffset, finish, foffset, annotations.selectRange);
} else {
return Option.none();
}
}, Option.none);
};
return {
keydown: keydown,
keyup: keyup
};
};
var InputHandlers = {
mouse: mouse,
keyboard: keyboard
};
var remove$7 = function (element, classes) {
each(classes, function (x) {
remove$5(element, x);
});
};
var addClass = function (clazz) {
return function (element) {
add$2(element, clazz);
};
};
var removeClasses = function (classes) {
return function (element) {
remove$7(element, classes);
};
};
var byClass = function (ephemera) {
var addSelectionClass = addClass(ephemera.selected());
var removeSelectionClasses = removeClasses([
ephemera.selected(),
ephemera.lastSelected(),
ephemera.firstSelected()
]);
var clear = function (container) {
var sels = descendants$1(container, ephemera.selectedSelector());
each(sels, removeSelectionClasses);
};
var selectRange = function (container, cells, start, finish) {
clear(container);
each(cells, addSelectionClass);
add$2(start, ephemera.firstSelected());
add$2(finish, ephemera.lastSelected());
};
return {
clear: clear,
selectRange: selectRange,
selectedSelector: ephemera.selectedSelector,
firstSelectedSelector: ephemera.firstSelectedSelector,
lastSelectedSelector: ephemera.lastSelectedSelector
};
};
var byAttr = function (ephemera) {
var removeSelectionAttributes = function (element) {
remove(element, ephemera.selected());
remove(element, ephemera.firstSelected());
remove(element, ephemera.lastSelected());
};
var addSelectionAttribute = function (element) {
set(element, ephemera.selected(), '1');
};
var clear = function (container) {
var sels = descendants$1(container, ephemera.selectedSelector());
each(sels, removeSelectionAttributes);
};
var selectRange = function (container, cells, start, finish) {
clear(container);
each(cells, addSelectionAttribute);
set(start, ephemera.firstSelected(), '1');
set(finish, ephemera.lastSelected(), '1');
};
return {
clear: clear,
selectRange: selectRange,
selectedSelector: ephemera.selectedSelector,
firstSelectedSelector: ephemera.firstSelectedSelector,
lastSelectedSelector: ephemera.lastSelectedSelector
};
};
var SelectionAnnotation = {
byClass: byClass,
byAttr: byAttr
};
var hasInternalTarget = function (e) {
return has$1(Element.fromDom(e.target), 'ephox-snooker-resizer-bar') === false;
};
function CellSelection$1 (editor, lazyResize) {
var handlerStruct = MixedBag([
'mousedown',
'mouseover',
'mouseup',
'keyup',
'keydown'
], []);
var handlers = Option.none();
var annotations = SelectionAnnotation.byAttr(Ephemera);
editor.on('init', function (e) {
var win = editor.getWin();
var body = getBody$1(editor);
var isRoot = getIsRoot(editor);
var syncSelection = function () {
var sel = editor.selection;
var start = Element.fromDom(sel.getStart());
var end = Element.fromDom(sel.getEnd());
var shared = DomParent.sharedOne(TableLookup.table, [
start,
end
]);
shared.fold(function () {
annotations.clear(body);
}, noop);
};
var mouseHandlers = InputHandlers.mouse(win, body, isRoot, annotations);
var keyHandlers = InputHandlers.keyboard(win, body, isRoot, annotations);
var hasShiftKey = function (event) {
return event.raw().shiftKey === true;
};
var handleResponse = function (event, response) {
if (!hasShiftKey(event)) {
return;
}
if (response.kill()) {
event.kill();
}
response.selection().each(function (ns) {
var relative = Selection.relative(ns.start(), ns.finish());
var rng = asLtrRange(win, relative);
editor.selection.setRng(rng);
});
};
var keyup = function (event) {
var wrappedEvent = wrapEvent(event);
if (wrappedEvent.raw().shiftKey && SelectionKeys.isNavigation(wrappedEvent.raw().which)) {
var rng = editor.selection.getRng();
var start = Element.fromDom(rng.startContainer);
var end = Element.fromDom(rng.endContainer);
keyHandlers.keyup(wrappedEvent, start, rng.startOffset, end, rng.endOffset).each(function (response) {
handleResponse(wrappedEvent, response);
});
}
};
var keydown = function (event) {
var wrappedEvent = wrapEvent(event);
lazyResize().each(function (resize) {
resize.hideBars();
});
var rng = editor.selection.getRng();
var startContainer = Element.fromDom(editor.selection.getStart());
var start = Element.fromDom(rng.startContainer);
var end = Element.fromDom(rng.endContainer);
var direction = Direction.directionAt(startContainer).isRtl() ? SelectionKeys.rtl : SelectionKeys.ltr;
keyHandlers.keydown(wrappedEvent, start, rng.startOffset, end, rng.endOffset, direction).each(function (response) {
handleResponse(wrappedEvent, response);
});
lazyResize().each(function (resize) {
resize.showBars();
});
};
var isMouseEvent = function (event) {
return event.hasOwnProperty('x') && event.hasOwnProperty('y');
};
var wrapEvent = function (event) {
var target = Element.fromDom(event.target);
var stop = function () {
event.stopPropagation();
};
var prevent = function () {
event.preventDefault();
};
var kill = compose(prevent, stop);
return {
target: constant(target),
x: constant(isMouseEvent(event) ? event.x : null),
y: constant(isMouseEvent(event) ? event.y : null),
stop: stop,
prevent: prevent,
kill: kill,
raw: constant(event)
};
};
var isLeftMouse = function (raw) {
return raw.button === 0;
};
var isLeftButtonPressed = function (raw) {
if (raw.buttons === undefined) {
return true;
}
if (global$2.ie && global$2.ie >= 12 && raw.buttons === 0) {
return true;
}
return (raw.buttons & 1) !== 0;
};
var mouseDown = function (e) {
if (isLeftMouse(e) && hasInternalTarget(e)) {
mouseHandlers.mousedown(wrapEvent(e));
}
};
var mouseOver = function (e) {
if (isLeftButtonPressed(e) && hasInternalTarget(e)) {
mouseHandlers.mouseover(wrapEvent(e));
}
};
var mouseUp = function (e) {
if (isLeftMouse(e) && hasInternalTarget(e)) {
mouseHandlers.mouseup(wrapEvent(e));
}
};
editor.on('mousedown', mouseDown);
editor.on('mouseover', mouseOver);
editor.on('mouseup', mouseUp);
editor.on('keyup', keyup);
editor.on('keydown', keydown);
editor.on('nodechange', syncSelection);
handlers = Option.some(handlerStruct({
mousedown: mouseDown,
mouseover: mouseOver,
mouseup: mouseUp,
keyup: keyup,
keydown: keydown
}));
});
var destroy = function () {
handlers.each(function (handlers) {
});
};
return {
clear: annotations.clear,
destroy: destroy
};
}
var Selections = function (editor) {
var get = function () {
var body = getBody$1(editor);
return TableSelection.retrieve(body, Ephemera.selectedSelector()).fold(function () {
if (editor.selection.getStart() === undefined) {
return SelectionTypes.none();
} else {
return SelectionTypes.single(editor.selection);
}
}, function (cells) {
return SelectionTypes.multiple(cells);
});
};
return { get: get };
};
var each$4 = global$1.each;
var addButtons = function (editor) {
var menuItems = [];
each$4('inserttable tableprops deletetable | cell row column'.split(' '), function (name) {
if (name === '|') {
menuItems.push({ text: '-' });
} else {
menuItems.push(editor.menuItems[name]);
}
});
editor.addButton('table', {
type: 'menubutton',
title: 'Table',
menu: menuItems
});
function cmd(command) {
return function () {
editor.execCommand(command);
};
}
editor.addButton('tableprops', {
title: 'Table properties',
onclick: cmd('mceTableProps'),
icon: 'table'
});
editor.addButton('tabledelete', {
title: 'Delete table',
onclick: cmd('mceTableDelete')
});
editor.addButton('tablecellprops', {
title: 'Cell properties',
onclick: cmd('mceTableCellProps')
});
editor.addButton('tablemergecells', {
title: 'Merge cells',
onclick: cmd('mceTableMergeCells')
});
editor.addButton('tablesplitcells', {
title: 'Split cell',
onclick: cmd('mceTableSplitCells')
});
editor.addButton('tableinsertrowbefore', {
title: 'Insert row before',
onclick: cmd('mceTableInsertRowBefore')
});
editor.addButton('tableinsertrowafter', {
title: 'Insert row after',
onclick: cmd('mceTableInsertRowAfter')
});
editor.addButton('tabledeleterow', {
title: 'Delete row',
onclick: cmd('mceTableDeleteRow')
});
editor.addButton('tablerowprops', {
title: 'Row properties',
onclick: cmd('mceTableRowProps')
});
editor.addButton('tablecutrow', {
title: 'Cut row',
onclick: cmd('mceTableCutRow')
});
editor.addButton('tablecopyrow', {
title: 'Copy row',
onclick: cmd('mceTableCopyRow')
});
editor.addButton('tablepasterowbefore', {
title: 'Paste row before',
onclick: cmd('mceTablePasteRowBefore')
});
editor.addButton('tablepasterowafter', {
title: 'Paste row after',
onclick: cmd('mceTablePasteRowAfter')
});
editor.addButton('tableinsertcolbefore', {
title: 'Insert column before',
onclick: cmd('mceTableInsertColBefore')
});
editor.addButton('tableinsertcolafter', {
title: 'Insert column after',
onclick: cmd('mceTableInsertColAfter')
});
editor.addButton('tabledeletecol', {
title: 'Delete column',
onclick: cmd('mceTableDeleteCol')
});
};
var addToolbars = function (editor) {
var isTable = function (table) {
var selectorMatched = editor.dom.is(table, 'table') && editor.getBody().contains(table);
return selectorMatched;
};
var toolbar = getToolbar(editor);
if (toolbar.length > 0) {
editor.addContextToolbar(isTable, toolbar.join(' '));
}
};
var Buttons = {
addButtons: addButtons,
addToolbars: addToolbars
};
var addMenuItems = function (editor, selections) {
var targets = Option.none();
var tableCtrls = [];
var cellCtrls = [];
var mergeCtrls = [];
var unmergeCtrls = [];
var noTargetDisable = function (ctrl) {
ctrl.disabled(true);
};
var ctrlEnable = function (ctrl) {
ctrl.disabled(false);
};
var pushTable = function () {
var self = this;
tableCtrls.push(self);
targets.fold(function () {
noTargetDisable(self);
}, function (targets) {
ctrlEnable(self);
});
};
var pushCell = function () {
var self = this;
cellCtrls.push(self);
targets.fold(function () {
noTargetDisable(self);
}, function (targets) {
ctrlEnable(self);
});
};
var pushMerge = function () {
var self = this;
mergeCtrls.push(self);
targets.fold(function () {
noTargetDisable(self);
}, function (targets) {
self.disabled(targets.mergable().isNone());
});
};
var pushUnmerge = function () {
var self = this;
unmergeCtrls.push(self);
targets.fold(function () {
noTargetDisable(self);
}, function (targets) {
self.disabled(targets.unmergable().isNone());
});
};
var setDisabledCtrls = function () {
targets.fold(function () {
each(tableCtrls, noTargetDisable);
each(cellCtrls, noTargetDisable);
each(mergeCtrls, noTargetDisable);
each(unmergeCtrls, noTargetDisable);
}, function (targets) {
each(tableCtrls, ctrlEnable);
each(cellCtrls, ctrlEnable);
each(mergeCtrls, function (mergeCtrl) {
mergeCtrl.disabled(targets.mergable().isNone());
});
each(unmergeCtrls, function (unmergeCtrl) {
unmergeCtrl.disabled(targets.unmergable().isNone());
});
});
};
editor.on('init', function () {
editor.on('nodechange', function (e) {
var cellOpt = Option.from(editor.dom.getParent(editor.selection.getStart(), 'th,td'));
targets = cellOpt.bind(function (cellDom) {
var cell = Element.fromDom(cellDom);
var table = TableLookup.table(cell);
return table.map(function (table) {
return TableTargets.forMenu(selections, table, cell);
});
});
setDisabledCtrls();
});
});
var generateTableGrid = function () {
var html = '';
html = '
| '; } html += ' |