Сокращение текста в блоке, относительно ширины блока

Проблема заключается в тексте. Есть карточка с информацией с фиксированной шириной, состоящий из 3 частей(чекбокс, инфа, статус). Чекбокс и статус имеют фиксированную ширину, а инфа занимает оставшееся место. В блоке инфы 2 блока в которые входит описание информации в блоке и ссылка на нее (блок 1 в 2 раза меньше блока 2). Ссылка является очень длинной и необходимо её сокращать троеточием. Этого легко достичь, если в блоке только текст. А если там еще и другие блоки то все выходит за границы.

Вставляю примерный код внизу. Приложение на Next JS, так что если в ответе будет использован реакт, то ок.

.card {
    display: flex;
    align-items: end;
    width: 400px;
    gap: 10px;
    padding: 10px;
    border-radius: 10px;
    background-color: gray;
}

.card__checkbox {
    display: flex;
    justify-content: center;
    align-items: center;
    height: 65px;
    border-radius: 5px;
    background-color: lightblue;
}

.card__status {
    display: flex;
    justify-content: center;
    align-items: center;
    height: 65px;
    border-radius: 5px;
    background-color: lightgreen;
}

.card__info {
    display: flex;
    gap: 10px;
}

.info-block {
    display: flex;
    flex-direction: column;
    max-width: 100%;
    gap: 5px;
    padding: 5px;
    border-radius: 10px;
    background-color: bisque;
}

.info-block__text-wrapper {
    display: flex;
    gap: 10px;
    padding: 10px;
    background-color: gainsboro;
    border: 1px solid red;
    border-radius: 5px;
}
        <div class="card">
            <div class="card__checkbox">bbb</div>
            <div class="card__info">
                <div class="info-block">
                    <span class="info-block__description">description</span>
                    <div class="info-block__text-wrapper">
                        <span class="info-block__text">aaaaaaaaaaaaaaaaaa</span>
                        <button class="info-block__copy-button">copy</button>
                    </div>
                </div>
                <div class="info-block">
                    <span class="info-block__description">description</span>
                    <div class="info-block__text-wrapper">
                        <span class="info-block__text">aaaaaaaaaaaaaaaaaa</span>
                    </div>
                </div>
            </div>
            <div class="card__status">status</div>
        </div>

Я потратил около 3 часов и все безрезультатно. Я пробовал много способов. Я много раз спрашивал gpt и все безрезультатно. Самый близкий результ вышел у меня с блоком с обычным текстом.

.wrapper {
  display: flex;
  align-items: center;
  width: 200px;
  gap: 10px;
}

.b {
  flex-shrink: 0;
}

.childs-wrapper {
  display: flex;
  flex-grow: 1;
  max-width: 100%;
  gap: 5px;
  overfrow: hidden;
}

.child {
  flex-grow: 1;
  white-space: nowrap;
  overflow: hidden;
  text-overflow: ellipsis;
}

.child1 {
  flex: 1;
}

.child2 {
  flex: 2;
}
<div class='wrapper'>
  <div class='b'>bbbbbbb</div>
  <div class='childs-wrapper'>
    <div class='child child1'><span>aaaaaaaaaaaaaaaaaaaaaaaa</span></div>
    <div class="child child2"><span>aaaaaaaaaaaaaaaaaaaaaaaa</span> <div class='c'></div></div>
  </div>
  <div class='b'>bbbbbbbbbbbbbb</div>
</div>

Ответы (1 шт):

Автор решения: dima

Пофиксил:

.card {
    display: grid;
    grid-template-columns: auto 1fr auto;
    align-items: end;
    width: 400px;
    gap: 10px;
    padding: 10px;
    border-radius: 10px;
    background-color: gray;
}

.card__checkbox {
    display: flex;
    justify-content: center;
    align-items: center;
    height: 65px;
    border-radius: 5px;
    background-color: lightblue;
}

.card__status {
    display: flex;
    justify-content: center;
    align-items: center;
    height: 65px;
    border-radius: 5px;
    background-color: lightgreen;
}

.card__info {
    position: relative;
    display: flex;
    gap: 10px;
    background-color: red;
    overflow: hidden;
}

.info-block {
    display: flex;
    flex-direction: column;
    gap: 5px;
    padding: 5px;
    border-radius: 10px;
    background-color: bisque;
    flex: 0 1 30%;
    overflow: hidden;
}

.info-block-1 {
    flex: 1 1 30%;
}

.info-block-2 {
    flex: 2 1 30%;
}

.info-block__text-wrapper {
    display: flex;
    gap: 10px;
    padding: 10px;
    background-color: gainsboro;
    border: 1px solid red;
    border-radius: 5px;
    overflow: hidden;
}

.info-block__text {
    white-space: nowrap;
    overflow: hidden;
    text-overflow: ellipsis;
    flex-grow: 1;
}
<div class="card">
    <div class="card__checkbox">bbb</div>
    <div class="card__info">
        <div class="info-block info-block-1">
            <span class="info-block__description">description</span>
            <div class="info-block__text-wrapper">
                <span class="info-block__text">aaaaaaaaaaaaaaaaaa</span>
                <button class="info-block__copy-button">copy</button>
            </div>
        </div>
        <div class="info-block info-block-2">
            <span class="info-block__description">description</span>
            <div class="info-block__text-wrapper">
                <span class="info-block__text"
                    >aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa</span
                >
            </div>
        </div>
    </div>
    <div class="card__status">status</div>
</div>
→ Ссылка