@bigplay/tree-view-core 0.4.0 → 0.5.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
package/styles.css CHANGED
@@ -116,6 +116,9 @@
116
116
  --tv-bracket-my-bg: #00146c;
117
117
  --tv-bracket-my-color: #ffffff;
118
118
  --tv-bracket-radius: 6px;
119
+ --tv-bracket-shadow:
120
+ 0 0 0 1px rgb(15 23 42 / 8%),
121
+ 0 1px 3px rgb(15 23 42 / 10%);
119
122
 
120
123
  position: relative;
121
124
  box-sizing: border-box;
@@ -129,8 +132,21 @@
129
132
  font-size: 12px;
130
133
  }
131
134
 
132
- .tv-bracket--my-team {
135
+ /* Матч — один блок с собственным контуром: два соседних матча иначе
136
+ читаются как один список из четырёх команд. Обрезка по скруглению живёт
137
+ здесь, а не на карточке, — подсказку и кнопку сворачивания обрезать нельзя. */
138
+ .tv-bracket__rows {
139
+ box-sizing: border-box;
140
+ display: flex;
141
+ flex: 1 1 auto;
142
+ flex-direction: column;
143
+ min-height: 0;
144
+ overflow: hidden;
133
145
  border-radius: var(--tv-bracket-radius);
146
+ box-shadow: var(--tv-bracket-shadow);
147
+ }
148
+
149
+ .tv-bracket--my-team .tv-bracket__rows {
134
150
  outline: 2px solid var(--tv-bracket-my-bg);
135
151
  }
136
152
 
@@ -188,6 +204,43 @@
188
204
  background: var(--tv-bracket-loser-bg);
189
205
  }
190
206
 
207
+ /* Кнопка «свернуть предыдущие матчи»: висит на краю карточки, с той стороны,
208
+ откуда приходят линии от детей. Кружок нарочно маленький — карточка узкая. */
209
+ .tv-bracket__toggle {
210
+ position: absolute;
211
+ top: 50%;
212
+ left: -11px;
213
+ z-index: 1;
214
+ display: flex;
215
+ align-items: center;
216
+ justify-content: center;
217
+ width: 22px;
218
+ height: 22px;
219
+ padding: 0;
220
+ font: inherit;
221
+ font-size: 13px;
222
+ font-weight: 700;
223
+ line-height: 1;
224
+ color: var(--tv-bracket-winner-bg);
225
+ cursor: pointer;
226
+ background: #ffffff;
227
+ border: 1px solid #d1d5db;
228
+ border-radius: 50%;
229
+ box-shadow: 0 1px 3px rgb(15 23 42 / 18%);
230
+ transform: translateY(-50%);
231
+ }
232
+
233
+ .tv-bracket__toggle:hover {
234
+ border-color: var(--tv-bracket-winner-bg);
235
+ }
236
+
237
+ /* Свёрнутый матч виден сразу: кнопка залита, а не пустая. */
238
+ .tv-bracket__toggle--collapsed {
239
+ color: var(--tv-bracket-winner-color);
240
+ background: var(--tv-bracket-winner-bg);
241
+ border-color: var(--tv-bracket-winner-bg);
242
+ }
243
+
191
244
  .tv-bracket__name {
192
245
  max-width: 120px;
193
246
  overflow: hidden;
@@ -234,6 +287,9 @@
234
287
  --tv-rounds-border: 2px solid #e5e7eb;
235
288
  --tv-rounds-gap: 20px;
236
289
  --tv-rounds-fade: 220ms;
290
+ /* Как матч складывается, уходя в предыдущий раунд. */
291
+ --tv-rounds-collapse-scale: 0.86;
292
+ --tv-rounds-collapse-ease: cubic-bezier(0.4, 0, 0.2, 1);
237
293
  /* В свайпере линия — единственная подсказка, что матч идёт дальше,
238
294
  поэтому она заметнее, чем на широком экране. */
239
295
  --tv-rounds-link-color: #94a3b8;
@@ -278,6 +334,12 @@
278
334
  * матчами никуда не деваются.
279
335
  */
280
336
 
337
+ /* В свайпере матчи пары стоят вплотную, и подсказка над карточкой налезала бы
338
+ на соседнюю. Свою команду там и так видно по рамке. */
339
+ .tv-rounds--swipe .tv-bracket__hint {
340
+ display: none;
341
+ }
342
+
281
343
  /* Линии в свайпере: единственное, что показывает, куда матч идёт дальше. */
282
344
  .tv-rounds--swipe .tree-view {
283
345
  --tv-link-color: var(--tv-rounds-link-color);
@@ -300,19 +362,24 @@
300
362
 
301
363
  .tv-rounds--swipe .tv-rounds__item {
302
364
  scroll-snap-align: start;
365
+ /* Резкий свайп не должен перепрыгивать через раунд: останавливаемся на каждом. */
366
+ scroll-snap-stop: always;
303
367
  }
304
368
 
305
369
  /* Пройденный раунд: убран с глаз, но не из раскладки — иначе прокрутка
306
370
  и точки прилипания поехали бы прямо под пальцем.
307
371
 
308
- Уходит и возвращается плавно: при свайпе карточки соседнего раунда иначе
309
- пропадают рывком прямо под пальцем. Видимость снимается только после того,
310
- как карточка растворилась, — поэтому у неё отдельная задержка.
372
+ Уходит не просто гаснув, а складываясь в сторону следующего раунда: матч
373
+ ужимается к своему правому краю — туда, откуда уходит линия к продолжению, —
374
+ и растворяется. При возврате назад разворачивается обратно.
311
375
 
312
- Селектор нарочно такой же длины, как у правила ниже: иначе переход
313
- из него перебил бы этот и карточка исчезала бы мгновенно. */
376
+ Видимость снимается только после того, как карточка ужалась, — поэтому
377
+ у неё отдельная задержка. Селектор нарочно такой же длины, как у правила
378
+ ниже: иначе переход из него перебил бы этот и матч исчезал бы рывком. */
314
379
  .tv-rounds--swipe [data-depth] {
315
- transition: opacity var(--tv-rounds-fade, 220ms) ease;
380
+ transition:
381
+ opacity var(--tv-rounds-fade, 220ms) ease,
382
+ transform var(--tv-rounds-fade, 220ms) var(--tv-rounds-collapse-ease);
316
383
  }
317
384
 
318
385
  .tv-rounds--swipe [data-depth].tv-hidden {
@@ -320,9 +387,21 @@
320
387
  opacity: 0;
321
388
  transition:
322
389
  opacity var(--tv-rounds-fade, 220ms) ease,
390
+ transform var(--tv-rounds-fade, 220ms) var(--tv-rounds-collapse-ease),
323
391
  visibility 0s linear var(--tv-rounds-fade, 220ms);
324
392
  }
325
393
 
394
+ /* Складывается сам матч — ужимается к правому краю, туда, где продолжение.
395
+ Линии просто гаснут: путь в SVG не масштабируешь так, чтобы он остался ровным.
396
+
397
+ Только сжатие, без сдвига: сдвинутая карточка вылезает за край и увеличивает
398
+ область прокрутки, а `scroll-snap: mandatory` тут же пересчитывает прилипание —
399
+ получается бесконечный круг «сдвинули → переснапили → сдвинули». */
400
+ .tv-rounds--swipe .tree-view__node.tv-hidden {
401
+ transform: scale(var(--tv-rounds-collapse-scale));
402
+ transform-origin: right center;
403
+ }
404
+
326
405
  /* Вне свайпера прятать нечего анимировать — убираем сразу. */
327
406
  .tv-hidden {
328
407
  visibility: hidden;
@@ -334,4 +413,8 @@
334
413
  .tv-rounds--swipe [data-depth].tv-hidden {
335
414
  transition: none;
336
415
  }
416
+
417
+ .tv-rounds--swipe .tree-view__node.tv-hidden {
418
+ transform: none;
419
+ }
337
420
  }