/** Format Text - Show more styles. */
/** Styles of elements inside the directive should be placed in format-text.scss */
@use "theme/globals.variables" as global;
@use "sass:math" as math;

core-format-text {
    --core-format-text-background: var(--background, var(--ion-item-background));
    --core-format-text-viewer-icon-background: rgb(255 255 255 / 50%);
}

html.dark core-format-text {
    --core-format-text-viewer-icon-background: rgb(0 0 0 / 50%);
}

core-format-text {
    display: contents;
    user-select: text;
    word-break: break-word;
    word-wrap: break-word;
    cursor: auto;

    @include core-transition(background-color color, 200ms);
    &.core-loading {
        width: 100%;
        &:empty:before {
            content: 'E'; // Set a minimum empty text to have a minimum height of one line.
            opacity: 0;
        }
    }

    &.collapsible-item {
        display: block;
        // This is to allow clicks in radio/checkbox content.
        cursor: pointer;
        pointer-events: auto;

        &.collapsible-enabled {
            display: block;
            max-height: none;

            &.collapsible-collapsed {
                overflow: hidden;
            }
        }

        @if (global.$core-format-text-never-shorten) {
            &.collapsible-enabled {
                --display-toggle: none !important;
                --collapsible-height: auto !important;

                .collapsible-toggle {
                    display: none !important;
                }

                &:before {
                    display: none !important;
                }
            }
        }
    }
    &.collapsible-item.inline {
        display: inline-block;
        &.collapsible-enabled {
           display: inline-block;
        }
    }

    .core-adapted-img-container {
        position: relative;
        display: inline-block;
        max-width: 100%;
    }

    .core-image-viewer-icon {
        position: absolute;
        @include position(null, 10px, 10px, null);
        color: var(--ion-text-color);
        border-radius: var(--mdl-shape-borderRadius-xl);
        background-color: var(--core-format-text-viewer-icon-background);
        display: flex;

        width: var(--a11y-sizing-minTargetSize);
        height: var(--a11y-sizing-minTargetSize);
        max-width: var(--a11y-sizing-minTargetSize);
        font-size: var(--mdl-typography-icon-fontSize-lg);

        ion-icon {
            flex: 1;
            align-self: center;
            /** Fix iOS icon size */
            margin: 0 auto;
            position: absolute;
            left: 0;
            right: 0;
        }

        &:hover {
            opacity: .7;
        }

        &.hidden {
            display: none;
        }
    }

    // Disable clicks in links inside MathJax equations.
    .filter_mathjaxloader_equation .MathJax_Preview a {
        pointer-events: none;
    }

    .MathJax_SVG_Display {
        overflow-x: auto;
        margin: 0;
        padding: 10px 0;
    }

}

@keyframes loading {
    0% {
        left: -45%;
    }
    100% {
        left: 100%;
    }
}


/** Styles to match web platform */

// Those styles are omitted on RTE
core-format-text {
    ul {
        padding-left: 1rem;
        -webkit-margin-start: .2rem;
    }

    .atto_image_button_text-top,
    .atto_image_button_middle,
    .atto_image_button_text-bottom,
    .atto_image_button_left,
    .atto_image_button_right {
        height: auto;
        width: auto;

        &.img-responsive {
            height: auto;
            width: auto;
        }
    }

    // Embed video responsive classes.
    // Taken from https://github.com/twbs/bootstrap/blob/v4-dev/scss/utilities/_embed.scss
    .embed-responsive {
        position: relative;
        display: block;
        width: 100%;
        padding: 0;
        overflow: hidden;

        &::before {
            display: block;
            content: "";
        }

        .embed-responsive-item,
        iframe,
        embed,
        object,
        video {
            position: absolute;
            @include position(0, null, 0, 0);
            width: 100%;
            height: 100%;
            border: 0;
        }

        iframe iframe {
            width: 100%;
            height: 100%;
        }
    }

    .embed-responsive-21by9 {
        &::before {
            padding-top: percentage(math.div(9, 21));
        }
    }

    .embed-responsive-16by9 {
        &::before {
            padding-top: percentage(math.div(9, 16));
        }
    }

    .embed-responsive-4by3 {
        &::before {
            padding-top: percentage(math.div(3, 4));
        }
    }

    .embed-responsive-1by1 {
        &::before {
            padding-top: percentage(1);
        }
    }

}

core-format-text,
.item core-format-text,
core-rich-text-editor .core-rte-editor {
    @include core-headings();

    p, ul, ol, li {
        // Normalize font-size inside formatted text.
        font-size: var(--text-size);
    }

    p {
        margin-bottom: 1rem;
        margin-block-start: 0;
    }

    > p:only-child {
        margin-bottom: 0;
    }

    hr {
        border-top: 1px solid var(--stroke);
    }

    .no-overflow {
        overflow: auto;
    }

    // Fix lists styles in core-format-text.
    ol {
        list-style-type: decimal;
    }

    ul, ol {
        ol {
            list-style-type: lower-latin;
        }
        ul, ol {
            @include margin(null, null, null, 15px);
        }
    }

    sub, sup {
        overflow: visible !important;
    }

    .badge {
        position: initial !important;
    }

    .core-disable-media-adapt,
    .core-disable-media-adapt .core-media-adapt-width {
        max-width: none !important;
        max-height: none !important;
        width: initial !important;
        height: initial !important;
        display: inline-block !important;
    }

    img.icon {
        font-size: var(--mdl-typography-icon-fontSize-sm);
        width: var(--mdl-typography-icon-fontSize-sm);
        height: var(--mdl-typography-icon-fontSize-sm);
        margin: 0;
        padding: 0;
        -webkit-box-sizing: content-box;
        box-sizing: content-box;
        margin-right: .5rem;
    }

    // Form controls
    // ------------------------
    select,
    input:not([type=checkbox]):not([type=radio]):not([type=hidden]) {
        height: 30px;
        display: inline-block;
        border: 1px solid var(--gray-500);
        background: var(--contrast-background);
        padding: 6px 8px;
        border-radius: var(--mdl-shape-borderRadius-xs);
        margin-left: 2px;
        margin-right: 2px;
        margin-bottom: 10px;
    }

    select {
        background-color: var(--contrast-background);
        background-image: url('data:image/svg+xml;charset=US-ASCII,%3Csvg%20xmlns%3D%22http%3A%2F%2Fwww.w3.org%2F2000%2Fsvg%22%20width%3D%22292.4%22%20height%3D%22292.4%22%3E%3Cpath%20fill%3D%22%23000000%22%20d%3D%22M287%2069.4a17.6%2017.6%200%200%200-13-5.4H18.4c-5%200-9.3%201.8-12.9%205.4A17.6%2017.6%200%200%200%200%2082.2c0%205%201.8%209.3%205.4%2012.9l128%20127.9c3.6%203.6%207.8%205.4%2012.8%205.4s9.2-1.8%2012.8-5.4L287%2095c3.5-3.5%205.4-7.8%205.4-12.8%200-5-1.9-9.2-5.5-12.8z%22%2F%3E%3C%2Fsvg%3E');
        background-repeat: no-repeat, repeat;
        background-position: right .7em top 50%, 0 0;
        background-size: .65em auto, 100%;
        padding-right: 24px;
        appearance: none;
        -webkit-appearance: none;
    }

    input[type=radio],
    input[type=checkbox] {
        position: relative !important;

        --color: var(--text-color);
        --color-checked: var(--color);

        width: var(--size);
        height: var(--size);
        border-radius: var(--border-radius);
        border-width: var(--outer-border-width);
        border-style: var(--border-style);
        border-color: var(--color);
        appearance: none;
        display: inline-block;
        margin-left: 2px;
        margin-right: 2px;
        margin-top: 2px;

        &:checked {
            background-color: var(--color-checked);
        }

        & + label {
            line-height: var(--size);
        }
    }

    input[type=radio]::after {
        position: absolute;
        content: ' ';
        width: calc(50% + var(--outer-border-width));
        height: calc(50% + var(--outer-border-width));
        border-radius: var(--border-radius);
        transform: scale3d(0, 0, 0) translate(-50%,-50%);
        background: var(--contrast-background);
        border: 0 !important;
        top: 50%;
        left: 50%;
    }

    input[type=radio]:checked::after {
        transform: scale3d(1, 1, 1) translate(-50%,-50%);
    }

    input[type=checkbox]:checked::after {
        position: absolute;
        width: 33%;
        height: 50%;
        content: ' ';
        transform: rotate(45deg);
        border-width: 0px 2px 2px 0px;
        border-style: solid;
        border-color: var(--contrast-background);
        left: 4px;
        top: 2px;
    }

    .form-check-inline .form-check-input {
        flex-shrink: 0;
    }

    // Atto styles
    // -------------------------
    .atto_image_preview {
        width: 100%;
        height: 100%;
        margin-left: auto;
        margin-right: auto;
    }

    .atto_image_preview_box {
        max-height: 200px;
        margin-bottom: 1em;
        overflow: auto;
    }

    .editor_atto_content img {
        cursor: pointer;
    }

    .atto_image_size {
        display: inline-block;
    }

    .atto_image_size input[type=checkbox] {
        @include margin(null, 1em, null, 1em);
    }

    .atto_image_size input[type=text] {
        width: 3em;
    }

    .atto_image_size label {
        display: inline-block;
    }

    .atto_image_button_text-top,
    .atto_image_button_middle,
    .atto_image_button_text-bottom,
    .atto_image_button_left,
    .atto_image_button_right {
        vertical-align: middle;
        max-width: 100%;
        display: inline-block;
        margin: 0 0.5em;

        &.img-responsive {
            /* If the image is display: block then linking the image to URLs won't work. */
            /*display: inline-block;*/
            max-width: 100%;
        }
    }

    .atto_image_button_text-top {
        vertical-align: text-top;
    }

    .atto_image_button_middle {
        vertical-align: middle;
    }

    .atto_image_button_text-bottom {
        vertical-align: text-bottom;
    }

    .atto_image_button_left {
        @include float(start);
        @include margin(0, 0.5em, 0, 0);
    }

    .atto_image_button_right {
        @include float(end);
        @include margin(0, 0, 0, 0.5em);
    }

    // Bootstrap 4 Styles
    // -------------------------

    // _reboot.scss
    fieldset {
        min-width: 0;
        padding: 0;
        margin: 0;
        border: 0;
    }

    // _media.scss
    .media {
        display: flex;
        align-items: flex-start;
    }

    .media-body {
        flex: 1;
    }

    // _alert.scss
    .alert {
        position: relative;
        padding: .75rem 1.25rem;
        margin-bottom: 1rem;
        border: 0 solid transparent;
        border-radius: .5rem;
    }

    // Headings for larger alerts
    .alert-heading {
        // Specified to prevent conflicts of changing headings-color
        color: inherit;
    }

    // Provide class for links that match alerts
    .alert-link {
        font-weight: 400;
    }

    @each $color-name, $unused in global.$colors {
        .alert-#{$color-name} {
            --color-base: var(--#{$color-name});
            color: var(--#{$color-name}-shade);
            border-color: var(--color-base);
            background-color: var(--#{$color-name}-tint);

            .alert-link, a {
                color: var(--#{$color-name}-shade);
            }
        }
        .alert-#{$color-name} p {
            color: var(--color-base);
        }
    }

    // _forms.scss
    .form-check {
        position: relative;
        display: block;
        padding-left: 1.25rem;
    }

    .form-check-input {
        position: absolute;
        margin-top: .3rem;
        margin-left: -1.25rem;

        &[disabled] ~ .form-check-label,
        &:disabled ~ .form-check-label {
            color: global.$gray-600;
        }

    }

    .form-check-label {
        margin-bottom: 0;
    }

    .form-check-inline {
        display: inline-flex;
        align-items: center;
        padding-left: 0;
        margin-right: .75rem;

        .form-check-input {
            position: static;
            margin-top: 0;
            margin-right: .3125rem;
            margin-left: 0;
        }

    }

    // utilities/_align.scss
    .align-baseline    { vertical-align: baseline !important; } // Browser default
    .align-top         { vertical-align: top !important; }
    .align-middle      { vertical-align: middle !important; }
    .align-bottom      { vertical-align: bottom !important; }
    .align-text-bottom { vertical-align: text-bottom !important; }
    .align-text-top    { vertical-align: text-top !important; }

    // utilities/_border.scss
    .border         { border: 1px solid var(--gray-500) !important; }
    .border-top     { border-top: 1px solid var(--gray-500) !important; }
    .border-right   { border-right: 1px solid var(--gray-500) !important; }
    .border-bottom  { border-bottom: 1px solid var(--gray-500) !important; }
    .border-left    { border-left: 1px solid var(--gray-500) !important; }

    .border-0        { border: 0 !important; }
    .border-top-0    { border-top: 0 !important; }
    .border-right-0  { border-right: 0 !important; }
    .border-bottom-0 { border-bottom: 0 !important; }
    .border-left-0   { border-left: 0 !important; }

    @each $color-name, $unused in global.$colors {
        .border-#{$color-name} {
            border-color: var(--#{$color-name}) !important;
        }
    }

    .border-white {
        border-color: var(--white) !important;
    }

    // utilities/_flex.scss
    .flex-row            { flex-direction: row !important; }
    .flex-column         { flex-direction: column !important; }
    .flex-row-reverse    { flex-direction: row-reverse !important; }
    .flex-column-reverse { flex-direction: column-reverse !important; }

    .flex-wrap         { flex-wrap: wrap !important; }
    .flex-nowrap       { flex-wrap: nowrap !important; }
    .flex-wrap-reverse { flex-wrap: wrap-reverse !important; }
    .flex-fill         { flex: 1 1 auto !important; }
    .flex-grow-0       { flex-grow: 0 !important; }
    .flex-grow-1       { flex-grow: 1 !important; }
    .flex-shrink-0     { flex-shrink: 0 !important; }
    .flex-shrink-1     { flex-shrink: 1 !important; }

    .justify-content-start   { justify-content: flex-start !important; }
    .justify-content-end     { justify-content: flex-end !important; }
    .justify-content-center  { justify-content: center !important; }
    .justify-content-between { justify-content: space-between !important; }
    .justify-content-around  { justify-content: space-around !important; }

    .align-items-start    { align-items: flex-start !important; }
    .align-items-end      { align-items: flex-end !important; }
    .align-items-center   { align-items: center !important; }
    .align-items-baseline { align-items: baseline !important; }
    .align-items-stretch  { align-items: stretch !important; }

    .align-content-start   { align-content: flex-start !important; }
    .align-content-end     { align-content: flex-end !important; }
    .align-content-center  { align-content: center !important; }
    .align-content-between { align-content: space-between !important; }
    .align-content-around  { align-content: space-around !important; }
    .align-content-stretch { align-content: stretch !important; }

    .align-self-auto     { align-self: auto !important; }
    .align-self-start    { align-self: flex-start !important; }
    .align-self-end      { align-self: flex-end !important; }
    .align-self-center   { align-self: center !important; }
    .align-self-baseline { align-self: baseline !important; }
    .align-self-stretch  { align-self: stretch !important; }

    // utilities/_visibility.scss
    .visible {
        visibility: visible !important;
    }

    .invisible {
        visibility: hidden !important;
    }

    // utilities/_text.scss
    .text-monospace { font-family: var(--mdl-typography-monospace-font) !important; }
    .text-justify  { text-align: justify !important; }
    .text-wrap     { white-space: normal !important; }
    .text-nowrap   { white-space: nowrap !important; }
    .text-truncate {
        overflow: hidden;
        text-overflow: ellipsis;
        white-space: nowrap;
     }
    .text-left   { text-align: left !important; }
    .text-right  { text-align: right !important; }
    .text-center { text-align: center !important; }
    .text-lowercase  { text-transform: lowercase !important; }
    .text-uppercase  { text-transform: uppercase !important; }
    .text-capitalize { text-transform: capitalize !important; }
    .font-weight-light   { font-weight: 300 !important; }
    .font-weight-lighter { font-weight: lighter !important; }
    .font-weight-normal  { font-weight: 400 !important; }
    .font-weight-bold    { font-weight: 700 !important; }
    .font-weight-bolder  { font-weight: bolder !important; }
    .font-italic         { font-style: italic !important; }
    .text-white { color: var(--white) !important; }

    @each $color-name, $unused in global.$colors {
        .text-#{$color-name} {
            color: var(--#{$color-name});
        }
    }

    .text-body { color: var(--ion-text-color) !important; }
    .text-muted { color: var(--subdued-text-color) !important; }
    .text-black-50 { color: rgb(0 0 0 / 50%) !important; }
    .text-white-50 { color: rgb(255 255 255 / 50%) !important; }
    .text-decoration-none { text-decoration: none !important; }
    .text-break {
        word-break: break-word !important; // Deprecated, but avoids issues with flex containers
        word-wrap: break-word !important; // Used instead of `overflow-wrap` for IE & Edge Legacy
    }
    .text-reset { color: inherit !important; }

    .label {
        display: inline-block;
        padding: .25em .4em;
        font-size: 75%;
        font-weight: 700;
        line-height: 1.1;
        text-align: center;
        white-space: nowrap;
        vertical-align: baseline;
        transition: color .15s ease-in-out,background-color .15s ease-in-out,border-color .15s ease-in-out,box-shadow .15s ease-in-out;
        color: var(--white);
        background-color: var(--medium);
    }

    .label-important {
        color: var(--danger-contrast);
        background-color: var(--danger);
    }

    @each $color-name, $unused in global.$colors {
        .label-#{$color-name} {
            color: var(--#{$color-name}-contrast);
            background-color: var(--#{$color-name});
        }
    }

    .btn-link {
        background: none;
    }

    button, .btn {
        margin: 4px 8px;
        padding-left: 12px;
        padding-right: 12px;
        border-radius: var(--core-input-radius);
        a {
            color: inherit;
        }
    }

    @each $color-name, $unused in global.$colors {
        .btn.btn-#{$color-name} {
            --color-base: var(--#{$color-name});
            color: var(--#{$color-name}-shade);
            border-color: var(--color-base);
            background-color: var(--#{$color-name}-tint);
        }
    }
}

// h1 is too big and ugly, reduce size when loading.
ion-header.ios h1 core-format-text {
    &.core-loading {
        max-height: 30px;
        margin-top: 10px;
    }
}

html.dark core-format-text select,
html.dark core-rich-text-editor .core-rte-editor select {
	background-image: url('data:image/svg+xml;charset=US-ASCII,%3Csvg%20xmlns%3D%22http%3A%2F%2Fwww.w3.org%2F2000%2Fsvg%22%20width%3D%22292.4%22%20height%3D%22292.4%22%3E%3Cpath%20fill%3D%22%23FFFFFF%22%20d%3D%22M287%2069.4a17.6%2017.6%200%200%200-13-5.4H18.4c-5%200-9.3%201.8-12.9%205.4A17.6%2017.6%200%200%200%200%2082.2c0%205%201.8%209.3%205.4%2012.9l128%20127.9c3.6%203.6%207.8%205.4%2012.8%205.4s9.2-1.8%2012.8-5.4L287%2095c3.5-3.5%205.4-7.8%205.4-12.8%200-5-1.9-9.2-5.5-12.8z%22%2F%3E%3C%2Fsvg%3E');
}
