@webskill/chatbot 0.2.0 → 0.4.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/README.md CHANGED
@@ -109,6 +109,23 @@ export function App() {
109
109
  See `examples/chatbot-playground` for a complete `ChatbotHostAdapter`
110
110
  implementation (OPFS storage, skills, demo/model providers, console embedding).
111
111
 
112
+ ## Session list ordering and paging
113
+
114
+ `ChatEngine.listSessions()` forwards straight to the `SessionStore`, so the
115
+ default `FsSessionStore` decides what you see:
116
+
117
+ - Sessions are sorted by `createdAt` **ascending**, and a page is taken from the
118
+ **tail** of that list. The first screen therefore holds the *newest* sessions,
119
+ and the oldest session is not on it.
120
+ - The page size is the store's (`FS_SESSION_PAGE_SIZE`, 50). `<Chatbot>` does
121
+ not override it — pass your own `sessionStore` if you need another size.
122
+ - `nextCursor` points further back in history. While it is set, the session list
123
+ shows a **Load earlier sessions** entry; when it is absent the list is at the
124
+ end and the entry disappears, so "no button" always means "nothing older".
125
+ - Session files that cannot be parsed are skipped rather than failing the whole
126
+ list. Their file names come back in `skipped` and are shown above the list, so
127
+ a session you expected to see but cannot is always accounted for.
128
+
112
129
  ## Embedding models
113
130
 
114
131
  - **As a component** inside an existing web app — mount `<Chatbot>` in your own
package/dist/chatbot.css CHANGED
@@ -3,8 +3,10 @@
3
3
  @layer theme, base, components, utilities;
4
4
  @layer theme {
5
5
  :root, :host {
6
- --font-sans: 'Inter', ui-sans-serif, system-ui, sans-serif;
7
- --font-mono: 'JetBrains Mono', ui-monospace, SFMono-Regular, monospace;
6
+ --font-sans: 'Inter', ui-sans-serif, system-ui, -apple-system, 'Segoe UI', Roboto, 'Helvetica Neue', Arial, 'Microsoft YaHei',
7
+ 'PingFang SC', 'Hiragino Sans GB', 'Noto Sans CJK SC', 'Source Han Sans SC', 'WenQuanYi Micro Hei', sans-serif;
8
+ --font-mono: 'JetBrains Mono', ui-monospace, SFMono-Regular, Menlo, Consolas, 'Microsoft YaHei', 'PingFang SC',
9
+ 'Noto Sans Mono CJK SC', monospace;
8
10
  --spacing: 0.25rem;
9
11
  --container-sm: 24rem;
10
12
  --container-md: 28rem;
@@ -30,8 +32,10 @@
30
32
  --aspect-video: 16 / 9;
31
33
  --default-transition-duration: 150ms;
32
34
  --default-transition-timing-function: cubic-bezier(0.4, 0, 0.2, 1);
33
- --default-font-family: 'Inter', ui-sans-serif, system-ui, sans-serif;
34
- --default-mono-font-family: 'JetBrains Mono', ui-monospace, SFMono-Regular, monospace;
35
+ --default-font-family: 'Inter', ui-sans-serif, system-ui, -apple-system, 'Segoe UI', Roboto, 'Helvetica Neue', Arial, 'Microsoft YaHei',
36
+ 'PingFang SC', 'Hiragino Sans GB', 'Noto Sans CJK SC', 'Source Han Sans SC', 'WenQuanYi Micro Hei', sans-serif;
37
+ --default-mono-font-family: 'JetBrains Mono', ui-monospace, SFMono-Regular, Menlo, Consolas, 'Microsoft YaHei', 'PingFang SC',
38
+ 'Noto Sans Mono CJK SC', monospace;
35
39
  --color-background: var(--background);
36
40
  --color-foreground: var(--foreground);
37
41
  --color-card: var(--card);
@@ -44,6 +48,8 @@
44
48
  --color-ring: var(--ring);
45
49
  --color-destructive: var(--destructive);
46
50
  --color-success: var(--success);
51
+ --color-warning: var(--warning);
52
+ --color-info: var(--info);
47
53
  --color-surface: var(--card);
48
54
  --color-subtle: var(--accent);
49
55
  --color-ink: var(--foreground);
@@ -200,6 +206,9 @@
200
206
  }
201
207
  }
202
208
  @layer utilities {
209
+ .pointer-events-auto {
210
+ pointer-events: auto;
211
+ }
203
212
  .pointer-events-none {
204
213
  pointer-events: none;
205
214
  }
@@ -235,9 +244,15 @@
235
244
  .inset-0 {
236
245
  inset: 0px;
237
246
  }
247
+ .inset-x-0 {
248
+ inset-inline: 0px;
249
+ }
238
250
  .inset-y-0 {
239
251
  inset-block: 0px;
240
252
  }
253
+ .top-0 {
254
+ top: 0px;
255
+ }
241
256
  .top-1\.5 {
242
257
  top: calc(var(--spacing) * 1.5);
243
258
  }
@@ -271,6 +286,12 @@
271
286
  .right-4 {
272
287
  right: calc(var(--spacing) * 4);
273
288
  }
289
+ .right-full {
290
+ right: 100%;
291
+ }
292
+ .-bottom-7 {
293
+ bottom: calc(var(--spacing) * -7);
294
+ }
274
295
  .bottom-4 {
275
296
  bottom: calc(var(--spacing) * 4);
276
297
  }
@@ -286,6 +307,9 @@
286
307
  .left-2\.5 {
287
308
  left: calc(var(--spacing) * 2.5);
288
309
  }
310
+ .left-full {
311
+ left: 100%;
312
+ }
289
313
  .z-20 {
290
314
  z-index: 20;
291
315
  }
@@ -313,6 +337,9 @@
313
337
  .m-3 {
314
338
  margin: calc(var(--spacing) * 3);
315
339
  }
340
+ .mx-1 {
341
+ margin-inline: var(--spacing);
342
+ }
316
343
  .mx-2 {
317
344
  margin-inline: calc(var(--spacing) * 2);
318
345
  }
@@ -337,6 +364,9 @@
337
364
  .ms-auto {
338
365
  margin-inline-start: auto;
339
366
  }
367
+ .-mt-2 {
368
+ margin-top: calc(var(--spacing) * -2);
369
+ }
340
370
  .mt-0\.5 {
341
371
  margin-top: calc(var(--spacing) * 0.5);
342
372
  }
@@ -355,12 +385,15 @@
355
385
  .mb-2 {
356
386
  margin-bottom: calc(var(--spacing) * 2);
357
387
  }
358
- .mb-4 {
359
- margin-bottom: calc(var(--spacing) * 4);
388
+ .mb-7 {
389
+ margin-bottom: calc(var(--spacing) * 7);
360
390
  }
361
391
  .block {
362
392
  display: block;
363
393
  }
394
+ .contents {
395
+ display: contents;
396
+ }
364
397
  .flex {
365
398
  display: flex;
366
399
  }
@@ -429,6 +462,9 @@
429
462
  width: 100%;
430
463
  height: 100%;
431
464
  }
465
+ .h-0 {
466
+ height: 0px;
467
+ }
432
468
  .h-2\.5 {
433
469
  height: calc(var(--spacing) * 2.5);
434
470
  }
@@ -477,6 +513,9 @@
477
513
  .min-h-0 {
478
514
  min-height: 0px;
479
515
  }
516
+ .min-h-16 {
517
+ min-height: calc(var(--spacing) * 16);
518
+ }
480
519
  .min-h-20 {
481
520
  min-height: calc(var(--spacing) * 20);
482
521
  }
@@ -489,6 +528,9 @@
489
528
  .w-\(--sidebar-width\) {
490
529
  width: var(--sidebar-width);
491
530
  }
531
+ .w-0 {
532
+ width: 0px;
533
+ }
492
534
  .w-2 {
493
535
  width: calc(var(--spacing) * 2);
494
536
  }
@@ -510,18 +552,9 @@
510
552
  .w-72 {
511
553
  width: calc(var(--spacing) * 72);
512
554
  }
513
- .w-96 {
514
- width: calc(var(--spacing) * 96);
515
- }
516
- .w-\[min\(22rem\,calc\(100vw-2rem\)\)\] {
517
- width: min(22rem, calc(100vw - 2rem));
518
- }
519
555
  .w-\[min\(36rem\,calc\(100vw-2rem\)\)\] {
520
556
  width: min(36rem, calc(100vw - 2rem));
521
557
  }
522
- .w-\[min\(100\%-2rem\,32rem\)\] {
523
- width: min(100% - 2rem, 32rem);
524
- }
525
558
  .w-auto {
526
559
  width: auto;
527
560
  }
@@ -534,17 +567,20 @@
534
567
  .w-px {
535
568
  width: 1px;
536
569
  }
570
+ .w-screen {
571
+ width: 100vw;
572
+ }
537
573
  .max-w-2xl {
538
574
  max-width: var(--container-2xl);
539
575
  }
540
576
  .max-w-3xl {
541
577
  max-width: var(--container-3xl);
542
578
  }
543
- .max-w-56 {
544
- max-width: calc(var(--spacing) * 56);
579
+ .max-w-48 {
580
+ max-width: calc(var(--spacing) * 48);
545
581
  }
546
- .max-w-\[calc\(100vw-2rem\)\] {
547
- max-width: calc(100vw - 2rem);
582
+ .max-w-72 {
583
+ max-width: calc(var(--spacing) * 72);
548
584
  }
549
585
  .max-w-full {
550
586
  max-width: 100%;
@@ -623,6 +659,9 @@
623
659
  .cursor-col-resize {
624
660
  cursor: col-resize;
625
661
  }
662
+ .cursor-default {
663
+ cursor: default;
664
+ }
626
665
  .cursor-not-allowed {
627
666
  cursor: not-allowed;
628
667
  }
@@ -653,8 +692,8 @@
653
692
  .grid-cols-1 {
654
693
  grid-template-columns: repeat(1, minmax(0, 1fr));
655
694
  }
656
- .grid-cols-\[1fr_auto\] {
657
- grid-template-columns: 1fr auto;
695
+ .grid-cols-2 {
696
+ grid-template-columns: repeat(2, minmax(0, 1fr));
658
697
  }
659
698
  .flex-col {
660
699
  flex-direction: column;
@@ -671,9 +710,6 @@
671
710
  .items-center {
672
711
  align-items: center;
673
712
  }
674
- .items-end {
675
- align-items: flex-end;
676
- }
677
713
  .items-start {
678
714
  align-items: flex-start;
679
715
  }
@@ -707,17 +743,11 @@
707
743
  .gap-4 {
708
744
  gap: calc(var(--spacing) * 4);
709
745
  }
710
- .gap-6 {
711
- gap: calc(var(--spacing) * 6);
712
- }
713
746
  :where(.space-y-1 > :not(:last-child)) {
714
747
  --tw-space-y-reverse: 0;
715
748
  margin-block-start: calc(var(--spacing) * var(--tw-space-y-reverse));
716
749
  margin-block-end: calc(var(--spacing) * calc(1 - var(--tw-space-y-reverse)));
717
750
  }
718
- .gap-x-4 {
719
- column-gap: calc(var(--spacing) * 4);
720
- }
721
751
  :where(.divide-y > :not(:last-child)) {
722
752
  --tw-divide-y-reverse: 0;
723
753
  border-bottom-style: var(--tw-border-style);
@@ -757,6 +787,9 @@
757
787
  .overflow-y-auto {
758
788
  overflow-y: auto;
759
789
  }
790
+ .rounded {
791
+ border-radius: 0.25rem;
792
+ }
760
793
  .rounded-\[2px\] {
761
794
  border-radius: 2px;
762
795
  }
@@ -794,6 +827,10 @@
794
827
  border-style: var(--tw-border-style);
795
828
  border-width: 0px;
796
829
  }
830
+ .border-e {
831
+ border-inline-end-style: var(--tw-border-style);
832
+ border-inline-end-width: 1px;
833
+ }
797
834
  .border-t {
798
835
  border-top-style: var(--tw-border-style);
799
836
  border-top-width: 1px;
@@ -961,12 +998,6 @@
961
998
  .bg-warning-soft {
962
999
  background-color: var(--warning-soft);
963
1000
  }
964
- .bg-warning\/15 {
965
- background-color: var(--warning);
966
- @supports (color: color-mix(in lab, red, red)) {
967
- background-color: color-mix(in oklab, var(--warning) 15%, transparent);
968
- }
969
- }
970
1001
  .fill-current {
971
1002
  fill: currentcolor;
972
1003
  }
@@ -991,9 +1022,6 @@
991
1022
  .p-4 {
992
1023
  padding: calc(var(--spacing) * 4);
993
1024
  }
994
- .p-5 {
995
- padding: calc(var(--spacing) * 5);
996
- }
997
1025
  .px-1 {
998
1026
  padding-inline: var(--spacing);
999
1027
  }
@@ -1054,9 +1082,6 @@
1054
1082
  .ps-9 {
1055
1083
  padding-inline-start: calc(var(--spacing) * 9);
1056
1084
  }
1057
- .pt-0\.5 {
1058
- padding-top: calc(var(--spacing) * 0.5);
1059
- }
1060
1085
  .pt-2 {
1061
1086
  padding-top: calc(var(--spacing) * 2);
1062
1087
  }
@@ -1066,9 +1091,6 @@
1066
1091
  .pt-4 {
1067
1092
  padding-top: calc(var(--spacing) * 4);
1068
1093
  }
1069
- .pt-5 {
1070
- padding-top: calc(var(--spacing) * 5);
1071
- }
1072
1094
  .pr-2 {
1073
1095
  padding-right: calc(var(--spacing) * 2);
1074
1096
  }
@@ -1102,14 +1124,22 @@
1102
1124
  .text-left {
1103
1125
  text-align: left;
1104
1126
  }
1127
+ .text-right {
1128
+ text-align: right;
1129
+ }
1130
+ .text-start {
1131
+ text-align: start;
1132
+ }
1105
1133
  .font-display {
1106
1134
  font-family: var(--font-sans);
1107
1135
  }
1108
1136
  .font-mono {
1109
- font-family: 'JetBrains Mono', ui-monospace, SFMono-Regular, monospace;
1137
+ font-family: 'JetBrains Mono', ui-monospace, SFMono-Regular, Menlo, Consolas, 'Microsoft YaHei', 'PingFang SC',
1138
+ 'Noto Sans Mono CJK SC', monospace;
1110
1139
  }
1111
1140
  .font-sans {
1112
- font-family: 'Inter', ui-sans-serif, system-ui, sans-serif;
1141
+ font-family: 'Inter', ui-sans-serif, system-ui, -apple-system, 'Segoe UI', Roboto, 'Helvetica Neue', Arial, 'Microsoft YaHei',
1142
+ 'PingFang SC', 'Hiragino Sans GB', 'Noto Sans CJK SC', 'Source Han Sans SC', 'WenQuanYi Micro Hei', sans-serif;
1113
1143
  }
1114
1144
  .text-2xl {
1115
1145
  font-size: var(--text-2xl);
@@ -1134,9 +1164,6 @@
1134
1164
  .text-\[0\.85em\] {
1135
1165
  font-size: 0.85em;
1136
1166
  }
1137
- .text-\[11px\] {
1138
- font-size: 11px;
1139
- }
1140
1167
  .leading-6 {
1141
1168
  --tw-leading: calc(var(--spacing) * 6);
1142
1169
  line-height: calc(var(--spacing) * 6);
@@ -1194,6 +1221,9 @@
1194
1221
  .text-ink {
1195
1222
  color: var(--foreground);
1196
1223
  }
1224
+ .text-input {
1225
+ color: var(--input);
1226
+ }
1197
1227
  .text-muted {
1198
1228
  color: var(--muted-foreground);
1199
1229
  }
@@ -1224,9 +1254,6 @@
1224
1254
  .uppercase {
1225
1255
  text-transform: uppercase;
1226
1256
  }
1227
- .italic {
1228
- font-style: italic;
1229
- }
1230
1257
  .tabular-nums {
1231
1258
  --tw-numeric-spacing: tabular-nums;
1232
1259
  font-variant-numeric: var(--tw-ordinal,) var(--tw-slashed-zero,) var(--tw-numeric-figure,) var(--tw-numeric-spacing,) var(--tw-numeric-fraction,);
@@ -1345,6 +1372,9 @@
1345
1372
  -webkit-user-select: none;
1346
1373
  user-select: none;
1347
1374
  }
1375
+ .group-focus-within\:opacity-100:is(:where(.group):focus-within *) {
1376
+ opacity: 100%;
1377
+ }
1348
1378
  .group-focus-within\/menu-item\:opacity-100:is(:where(.group\/menu-item):focus-within *) {
1349
1379
  opacity: 100%;
1350
1380
  }
@@ -1451,19 +1481,6 @@
1451
1481
  .empty\:hidden:empty {
1452
1482
  display: none;
1453
1483
  }
1454
- .focus-within\:border-ring:focus-within {
1455
- border-color: var(--ring);
1456
- }
1457
- .focus-within\:ring-2:focus-within {
1458
- --tw-ring-shadow: var(--tw-ring-inset,) 0 0 0 calc(2px + var(--tw-ring-offset-width)) var(--tw-ring-color, currentcolor);
1459
- box-shadow: var(--tw-inset-shadow), var(--tw-inset-ring-shadow), var(--tw-ring-offset-shadow), var(--tw-ring-shadow), var(--tw-shadow);
1460
- }
1461
- .focus-within\:ring-ring\/20:focus-within {
1462
- --tw-ring-color: var(--ring);
1463
- @supports (color: color-mix(in lab, red, red)) {
1464
- --tw-ring-color: color-mix(in oklab, var(--ring) 20%, transparent);
1465
- }
1466
- }
1467
1484
  @media (hover: hover) {
1468
1485
  .hover\:border-ring:hover {
1469
1486
  border-color: var(--ring);
@@ -1471,9 +1488,6 @@
1471
1488
  .hover\:bg-accent:hover {
1472
1489
  background-color: var(--accent);
1473
1490
  }
1474
- .hover\:bg-danger-soft:hover {
1475
- background-color: var(--destructive-soft);
1476
- }
1477
1491
  .hover\:bg-destructive-soft:hover {
1478
1492
  background-color: var(--destructive-soft);
1479
1493
  }
@@ -1505,9 +1519,6 @@
1505
1519
  .hover\:bg-surface:hover {
1506
1520
  background-color: var(--card);
1507
1521
  }
1508
- .hover\:text-danger:hover {
1509
- color: var(--destructive);
1510
- }
1511
1522
  .hover\:text-foreground:hover {
1512
1523
  color: var(--foreground);
1513
1524
  }
@@ -1523,6 +1534,9 @@
1523
1534
  .hover\:opacity-85:hover {
1524
1535
  opacity: 85%;
1525
1536
  }
1537
+ .hover\:opacity-90:hover {
1538
+ opacity: 90%;
1539
+ }
1526
1540
  }
1527
1541
  .focus\:border-ring:focus {
1528
1542
  border-color: var(--ring);
@@ -1595,6 +1609,9 @@
1595
1609
  .disabled\:opacity-60:disabled {
1596
1610
  opacity: 60%;
1597
1611
  }
1612
+ .has-\[\[aria-expanded\=true\]\]\:opacity-100:has(:is([aria-expanded=true])) {
1613
+ opacity: 100%;
1614
+ }
1598
1615
  .aria-disabled\:pointer-events-none[aria-disabled="true"] {
1599
1616
  pointer-events: none;
1600
1617
  }
@@ -1825,7 +1842,58 @@
1825
1842
  flex-shrink: 0;
1826
1843
  }
1827
1844
  }
1828
- :root {
1845
+ :where(.dark, .light, [data-theme]) {
1846
+ --color-background: var(--background);
1847
+ --color-foreground: var(--foreground);
1848
+ --color-card: var(--card);
1849
+ --color-card-foreground: var(--card-foreground);
1850
+ --color-popover: var(--popover);
1851
+ --color-popover-foreground: var(--popover-foreground);
1852
+ --color-primary: var(--primary);
1853
+ --color-primary-foreground: var(--primary-foreground);
1854
+ --color-secondary: var(--secondary);
1855
+ --color-secondary-foreground: var(--secondary-foreground);
1856
+ --color-muted: var(--muted-foreground);
1857
+ --color-muted-foreground: var(--muted-foreground);
1858
+ --color-accent: var(--accent);
1859
+ --color-accent-foreground: var(--accent-foreground);
1860
+ --color-border: var(--border);
1861
+ --color-input: var(--input);
1862
+ --color-ring: var(--ring);
1863
+ --color-destructive: var(--destructive);
1864
+ --color-destructive-foreground: var(--destructive-foreground);
1865
+ --color-destructive-soft: var(--destructive-soft);
1866
+ --color-success: var(--success);
1867
+ --color-success-foreground: var(--success-foreground);
1868
+ --color-success-soft: var(--success-soft);
1869
+ --color-warning: var(--warning);
1870
+ --color-warning-foreground: var(--warning-foreground);
1871
+ --color-warning-soft: var(--warning-soft);
1872
+ --color-info: var(--info);
1873
+ --color-info-foreground: var(--info-foreground);
1874
+ --color-info-soft: var(--info-soft);
1875
+ --color-sidebar: var(--sidebar);
1876
+ --color-sidebar-foreground: var(--sidebar-foreground);
1877
+ --color-sidebar-primary: var(--sidebar-primary);
1878
+ --color-sidebar-primary-foreground: var(--sidebar-primary-foreground);
1879
+ --color-sidebar-accent: var(--sidebar-accent);
1880
+ --color-sidebar-accent-foreground: var(--sidebar-accent-foreground);
1881
+ --color-sidebar-border: var(--sidebar-border);
1882
+ --color-sidebar-ring: var(--sidebar-ring);
1883
+ --color-brand: var(--brand);
1884
+ --color-brand-foreground: var(--brand-foreground);
1885
+ --color-canvas: var(--background);
1886
+ --color-surface: var(--card);
1887
+ --color-subtle: var(--accent);
1888
+ --color-ink: var(--foreground);
1889
+ --color-danger: var(--destructive);
1890
+ --color-danger-soft: var(--destructive-soft);
1891
+ --color-sidebar-canvas: var(--sidebar);
1892
+ --color-sidebar-surface: var(--card);
1893
+ --color-sidebar-ink: var(--sidebar-foreground);
1894
+ --color-sidebar-muted: var(--muted-foreground);
1895
+ }
1896
+ :root, :where(.light, [data-theme='light']) {
1829
1897
  --radius: 0.625rem;
1830
1898
  --background: oklch(1 0 0);
1831
1899
  --foreground: oklch(0.145 0 0);
@@ -1883,6 +1951,7 @@
1883
1951
  --sidebar-ring: oklch(0.708 0 0);
1884
1952
  --brand: oklch(0.55 0.16 275);
1885
1953
  --brand-foreground: oklch(0.985 0 0);
1954
+ --text-min: 0.75rem;
1886
1955
  }
1887
1956
  :where(.dark, [data-theme='dark']) {
1888
1957
  --background: oklch(0.145 0 0);
@@ -2000,19 +2069,34 @@
2000
2069
  background: color-mix(in oklab, var(--muted-foreground) 60%, transparent);
2001
2070
  }
2002
2071
  }
2003
- ::-webkit-scrollbar {
2004
- width: 4px;
2005
- height: 4px;
2072
+ [data-webskill-theme='light'] {
2073
+ color-scheme: light;
2006
2074
  }
2007
- ::-webkit-scrollbar-track {
2008
- background: transparent;
2075
+ [data-webskill-theme='dark'] {
2076
+ color-scheme: dark;
2009
2077
  }
2010
- ::-webkit-scrollbar-thumb {
2011
- background: rgb(148 163 184 / 0.25);
2012
- border-radius: 999px;
2013
- }
2014
- ::-webkit-scrollbar-thumb:hover {
2015
- background: rgb(148 163 184 / 0.45);
2078
+ @layer components {
2079
+ .webskill-sheet-content {
2080
+ width: var(--webskill-sheet-width, min(22rem, calc(100vw - 2rem)));
2081
+ }
2082
+ .webskill-dialog-content {
2083
+ width: var(--webskill-dialog-width, min(100% - 2rem, 32rem));
2084
+ }
2085
+ .webskill-toast-root {
2086
+ width: 100%;
2087
+ max-width: var(--webskill-toast-width, 24rem);
2088
+ }
2089
+ .webskill-input {
2090
+ width: 100%;
2091
+ height: 2.25rem;
2092
+ padding-inline: 0.75rem;
2093
+ }
2094
+ .webskill-resizable-panel {
2095
+ min-height: 0;
2096
+ }
2097
+ .webskill-dropdown-content {
2098
+ min-width: 10rem;
2099
+ }
2016
2100
  }
2017
2101
  .webskill-surface-list {
2018
2102
  display: flex;