/*
 * Copyright 2018 The Android Open Source Project
 *
 * Licensed under the Apache License, Version 2.0 (the "License");
 * you may not use this file except in compliance with the License.
 * You may obtain a copy of the License at
 *
 *      http://www.apache.org/licenses/LICENSE-2.0
 *
 * Unless required by applicable law or agreed to in writing, software
 * distributed under the License is distributed on an "AS IS" BASIS,
 * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
 * See the License for the specific language governing permissions and
 * limitations under the License.
 */

package androidx.compose.ui.text.style

import androidx.compose.runtime.Stable

/** How overflowing text should be handled. */
@kotlin.jvm.JvmInline
value class TextOverflow internal constructor(internal val value: Int) {

    override fun toString(): String {
        return when (this) {
            Clip -> "Clip"
            Ellipsis -> "Ellipsis"
            Visible -> "Visible"
            else -> "Invalid"
        }
    }

    companion object {
        /**
         * Clip the overflowing text to fix its container.
         * @sample androidx.compose.ui.text.samples.TextOverflowClipSample
         */
        @Stable
        val Clip = TextOverflow(1)

        /**
         * Use an ellipsis to indicate that the text has overflowed.
         * @sample androidx.compose.ui.text.samples.TextOverflowEllipsisSample
         */
        @Stable
        val Ellipsis = TextOverflow(2)

        /**
         * Display all text, even if there is not enough space in the specified bounds.
         * When overflow is visible, text may be rendered outside the bounds of the composable
         * displaying the text. This ensures that all text is displayed to the user, and is typically
         * the right choice for most text display. It does mean that the text may visually occupy a
         * region larger than the bounds of it's composable. This can lead to situations where text
         * displays outside the bounds of the background and clickable on a Text composable with a
         * fixed height and width.
         *
         * @sample androidx.compose.ui.text.samples.TextOverflowVisibleFixedSizeSample
         *
         * To make the background and click region expand to match the size of the text, allow it to
         * expand vertically/horizontally using `Modifier.heightIn`/`Modifier.widthIn` or similar.
         *
         * @sample androidx.compose.ui.text.samples.TextOverflowVisibleMinHeightSample
         *
         * Note: text that expands past its bounds using `Visible` may be clipped by other modifiers
         * such as `Modifier.clipToBounds`.
         */
        @Stable
        val Visible = TextOverflow(3)
    }
}
