@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/dist/index.cjs +1 -1
- package/dist/index.cjs.map +1 -1
- package/dist/index.d.ts +1 -1
- package/dist/index.js +261 -220
- package/dist/index.js.map +1 -1
- package/dist/links.d.ts +18 -2
- package/dist/rounds.d.ts +15 -1
- package/dist/types.d.ts +36 -2
- package/package.json +1 -1
- package/styles.css +90 -7
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
|
-
|
|
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:
|
|
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
|
}
|