rei-kit 2.10.0 → 2.12.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/styles.css CHANGED
@@ -218,16 +218,16 @@
218
218
  opacity: 0;
219
219
  }
220
220
 
221
- .rk-listbox[data-v-31727bd7] {
221
+ .rk-listbox[data-v-7f8cd788] {
222
222
  overflow-y: auto;
223
223
  border-radius: var(--radius-card);
224
224
  padding: 0.25rem;
225
225
  }
226
- .rk-listbox[data-v-31727bd7]:focus-visible {
226
+ .rk-listbox[data-v-7f8cd788]:focus-visible {
227
227
  outline: 2px solid var(--color-primary);
228
228
  outline-offset: 1px;
229
229
  }
230
- .rk-listbox-option[data-v-31727bd7] {
230
+ .rk-listbox-option[data-v-7f8cd788] {
231
231
  display: flex;
232
232
  cursor: pointer;
233
233
  align-items: center;
@@ -241,38 +241,38 @@
241
241
  /* The current row shows only while the list has focus. A list that is not
242
242
  being used has no "current" row, and a highlight left behind on one reads
243
243
  as a selection — which is exactly what it is not. */
244
- .rk-listbox:focus-within .rk-listbox-option.is-active[data-v-31727bd7] {
244
+ .rk-listbox:focus-within .rk-listbox-option.is-active[data-v-7f8cd788] {
245
245
  background: var(--color-muted);
246
246
  }
247
- .rk-listbox-option.is-chosen[data-v-31727bd7] {
247
+ .rk-listbox-option.is-chosen[data-v-7f8cd788] {
248
248
  color: var(--color-primary);
249
249
  font-weight: 500;
250
250
  }
251
251
 
252
252
  /* Chosen is the tick and the tint, and it holds whether the list is in use
253
253
  or not: the current option and the chosen one are different things. */
254
- .rk-listbox-option.is-chosen[data-v-31727bd7] {
254
+ .rk-listbox-option.is-chosen[data-v-7f8cd788] {
255
255
  background: color-mix(in oklab, var(--color-primary) 10%, transparent);
256
256
  }
257
- .rk-listbox:focus-within .rk-listbox-option.is-chosen.is-active[data-v-31727bd7] {
257
+ .rk-listbox:focus-within .rk-listbox-option.is-chosen.is-active[data-v-7f8cd788] {
258
258
  background: color-mix(in oklab, var(--color-primary) 20%, transparent);
259
259
  }
260
- .rk-listbox-option.is-disabled[data-v-31727bd7] {
260
+ .rk-listbox-option.is-disabled[data-v-7f8cd788] {
261
261
  cursor: not-allowed;
262
262
  opacity: 0.45;
263
263
  }
264
- .rk-listbox-label[data-v-31727bd7] {
264
+ .rk-listbox-label[data-v-7f8cd788] {
265
265
  display: block;
266
266
  overflow: hidden;
267
267
  text-overflow: ellipsis;
268
268
  white-space: nowrap;
269
269
  }
270
- .rk-listbox-description[data-v-31727bd7] {
270
+ .rk-listbox-description[data-v-7f8cd788] {
271
271
  display: block;
272
272
  font-size: 0.75rem;
273
273
  color: var(--color-ink-soft);
274
274
  }
275
- .rk-listbox-empty[data-v-31727bd7] {
275
+ .rk-listbox-empty[data-v-7f8cd788] {
276
276
  padding: 1rem;
277
277
  }
278
278
 
@@ -643,20 +643,20 @@ to {
643
643
  }
644
644
  }
645
645
 
646
- .rk-table-scroll[data-v-89958b5a] {
646
+ .rk-table-scroll[data-v-ab10e9fa] {
647
647
  overflow-x: auto;
648
648
  }
649
- .rk-table-scroll[data-v-89958b5a]:focus-visible {
649
+ .rk-table-scroll[data-v-ab10e9fa]:focus-visible {
650
650
  outline: 2px solid var(--color-primary);
651
651
  outline-offset: 2px;
652
652
  border-radius: var(--radius-cell);
653
653
  }
654
- .rk-table[data-v-89958b5a] {
654
+ .rk-table[data-v-ab10e9fa] {
655
655
  width: 100%;
656
656
  border-collapse: collapse;
657
657
  font-size: 0.875rem;
658
658
  }
659
- .rk-table-caption[data-v-89958b5a] {
659
+ .rk-table-caption[data-v-ab10e9fa] {
660
660
  padding-bottom: 0.75rem;
661
661
  text-align: left;
662
662
  font-size: 0.8125rem;
@@ -664,7 +664,7 @@ to {
664
664
  }
665
665
 
666
666
  /* Off screen rather than `display: none`, which is not announced at all. */
667
- .rk-table-caption-hidden[data-v-89958b5a] {
667
+ .rk-table-caption-hidden[data-v-ab10e9fa] {
668
668
  position: absolute;
669
669
  width: 1px;
670
670
  height: 1px;
@@ -672,7 +672,7 @@ to {
672
672
  clip-path: inset(50%);
673
673
  white-space: nowrap;
674
674
  }
675
- .rk-table th[data-v-89958b5a] {
675
+ .rk-table th[data-v-ab10e9fa] {
676
676
  border-bottom: 1px solid var(--color-hair);
677
677
  padding: 0.625rem 0.75rem;
678
678
  text-align: left;
@@ -680,25 +680,37 @@ to {
680
680
  color: var(--color-ink-soft);
681
681
  white-space: nowrap;
682
682
  }
683
- .rk-table td[data-v-89958b5a] {
683
+ .rk-table td[data-v-ab10e9fa] {
684
684
  border-bottom: 1px solid color-mix(in srgb, var(--color-hair) 50%, transparent);
685
685
  padding: 0.75rem;
686
686
  color: var(--color-ink);
687
687
  vertical-align: top;
688
688
  }
689
- .rk-table tbody tr:last-child td[data-v-89958b5a] {
689
+ .rk-table tbody tr:last-child td[data-v-ab10e9fa] {
690
690
  border-bottom: 0;
691
691
  }
692
692
 
693
- /* Numbers line up on their last digit, which is the one being compared. */
694
- .is-end[data-v-89958b5a] {
693
+ /* Numbers line up on their last digit, which is the one being compared.
694
+ Both the heading and the cells, and named against `.rk-table th` rather
695
+ than on its own: a bare `.is-end` loses to it, and the column then reads as
696
+ two columns — a heading on the left and its numbers far off to the right. */
697
+ .rk-table th.is-end[data-v-ab10e9fa],
698
+ .rk-table td.is-end[data-v-ab10e9fa] {
695
699
  text-align: right;
696
700
  font-variant-numeric: tabular-nums;
697
701
  }
698
- .is-nowrap[data-v-89958b5a] {
702
+ .rk-table th.is-center[data-v-ab10e9fa],
703
+ .rk-table td.is-center[data-v-ab10e9fa] {
704
+ text-align: center;
705
+ }
706
+ .rk-table th.is-start[data-v-ab10e9fa],
707
+ .rk-table td.is-start[data-v-ab10e9fa] {
708
+ text-align: left;
709
+ }
710
+ .is-nowrap[data-v-ab10e9fa] {
699
711
  white-space: nowrap;
700
712
  }
701
- .rk-table-empty[data-v-89958b5a] {
713
+ .rk-table-empty[data-v-ab10e9fa] {
702
714
  padding: 2rem 0.75rem;
703
715
  text-align: center;
704
716
  color: var(--color-ink-soft);
@@ -1334,6 +1346,38 @@ to {
1334
1346
  padding: 0;
1335
1347
  }
1336
1348
 
1349
+ .rk-dl[data-v-831e205b] {
1350
+ display: grid;
1351
+ gap: 0.75rem;
1352
+ }
1353
+ .rk-dl.is-inline[data-v-831e205b] {
1354
+ gap: 0.5rem;
1355
+ }
1356
+ .rk-dl-row[data-v-831e205b] {
1357
+ display: grid;
1358
+ gap: 0.125rem;
1359
+ }
1360
+
1361
+ /* Inline from a tablet up: below that a term and its value side by side
1362
+ leave neither enough room to read. */
1363
+ @media (min-width: 40rem) {
1364
+ .is-inline .rk-dl-row[data-v-831e205b] {
1365
+ grid-template-columns: minmax(6rem, 12rem) minmax(0, 1fr);
1366
+ gap: 1rem;
1367
+ align-items: baseline;
1368
+ }
1369
+ }
1370
+ .rk-dl-term[data-v-831e205b] {
1371
+ font-size: 0.75rem;
1372
+ font-weight: 600;
1373
+ letter-spacing: 0.02em;
1374
+ color: var(--color-ink-soft);
1375
+ }
1376
+ .rk-dl-value[data-v-831e205b] {
1377
+ font-size: 0.875rem;
1378
+ color: var(--color-ink);
1379
+ }
1380
+
1337
1381
  .rk-drop-box[data-v-a42eab69] {
1338
1382
  display: flex;
1339
1383
  cursor: pointer;
@@ -1506,6 +1550,38 @@ to {
1506
1550
  transform: translateY(4px) scale(0.98);
1507
1551
  }
1508
1552
 
1553
+ .rk-time[data-v-0037adb2] {
1554
+ display: block;
1555
+ }
1556
+ .rk-time-field[data-v-0037adb2] {
1557
+ display: flex;
1558
+ width: 100%;
1559
+ height: 2.75rem;
1560
+ align-items: center;
1561
+ gap: 0.5rem;
1562
+ border-radius: var(--radius-card);
1563
+ padding: 0 0.75rem;
1564
+ text-align: left;
1565
+ font-size: 1rem;
1566
+ font-variant-numeric: tabular-nums;
1567
+ color: var(--color-ink);
1568
+ }
1569
+ .rk-time-field.is-empty[data-v-0037adb2] {
1570
+ color: var(--color-ink-soft);
1571
+ }
1572
+ .rk-time-field.is-invalid[data-v-0037adb2] {
1573
+ --surface-border-color: var(--color-negative);
1574
+ }
1575
+ .rk-time-field[data-v-0037adb2]:disabled {
1576
+ opacity: 0.5;
1577
+ }
1578
+ .rk-time-columns[data-v-0037adb2] {
1579
+ display: grid;
1580
+ grid-template-columns: minmax(0, 1.4fr) minmax(0, 1fr);
1581
+ gap: 0.5rem;
1582
+ width: 14rem;
1583
+ }
1584
+
1509
1585
  .rk-date[data-v-154e27fb] {
1510
1586
  display: block;
1511
1587
  }
@@ -1611,6 +1687,29 @@ to {
1611
1687
  }
1612
1688
  }
1613
1689
 
1690
+ .rk-confirm[data-v-9453e511] {
1691
+ max-width: 17rem;
1692
+ }
1693
+ .rk-confirm-title[data-v-9453e511] {
1694
+ font-size: 0.875rem;
1695
+ font-weight: 600;
1696
+ color: var(--color-ink);
1697
+ }
1698
+ .rk-confirm-message[data-v-9453e511] {
1699
+ margin-top: 0.125rem;
1700
+ font-size: 0.8125rem;
1701
+ line-height: 1.5;
1702
+ color: var(--color-ink-soft);
1703
+ }
1704
+
1705
+ /* The confirming button last, where the eye and the thumb finish. */
1706
+ .rk-confirm-actions[data-v-9453e511] {
1707
+ margin-top: 0.75rem;
1708
+ display: flex;
1709
+ justify-content: flex-end;
1710
+ gap: 0.5rem;
1711
+ }
1712
+
1614
1713
  .rk-toggles[data-v-9076e36f] {
1615
1714
  display: inline-flex;
1616
1715
  flex-wrap: wrap;
@@ -2590,26 +2689,26 @@ to {
2590
2689
 
2591
2690
  /* The scroller is focusable: a region only a drag can reach is a region a
2592
2691
  keyboard cannot read at all. */
2593
- .rk-data-scroll[data-v-5920cac0] {
2692
+ .rk-data-scroll[data-v-f95c586b] {
2594
2693
  overflow-x: auto;
2595
2694
  border-radius: var(--radius-card);
2596
2695
  }
2597
- .rk-data-scroll[data-v-5920cac0]:focus-visible {
2696
+ .rk-data-scroll[data-v-f95c586b]:focus-visible {
2598
2697
  outline: 2px solid var(--color-primary);
2599
2698
  outline-offset: 2px;
2600
2699
  }
2601
- .rk-data[data-v-5920cac0] {
2700
+ .rk-data[data-v-f95c586b] {
2602
2701
  width: 100%;
2603
2702
  border-collapse: collapse;
2604
2703
  font-size: 0.875rem;
2605
2704
  }
2606
- .rk-data-caption[data-v-5920cac0] {
2705
+ .rk-data-caption[data-v-f95c586b] {
2607
2706
  padding-bottom: 0.5rem;
2608
2707
  text-align: left;
2609
2708
  font-size: 0.8125rem;
2610
2709
  color: var(--color-ink-soft);
2611
2710
  }
2612
- .rk-data-caption-hidden[data-v-5920cac0] {
2711
+ .rk-data-caption-hidden[data-v-f95c586b] {
2613
2712
  position: absolute;
2614
2713
  width: 1px;
2615
2714
  height: 1px;
@@ -2617,7 +2716,7 @@ to {
2617
2716
  clip-path: inset(50%);
2618
2717
  white-space: nowrap;
2619
2718
  }
2620
- .rk-data th[data-v-5920cac0] {
2719
+ .rk-data th[data-v-f95c586b] {
2621
2720
  border-bottom: 1px solid var(--color-hair);
2622
2721
  padding: 0.625rem 0.75rem;
2623
2722
  text-align: left;
@@ -2627,32 +2726,46 @@ to {
2627
2726
  color: var(--color-ink-soft);
2628
2727
  white-space: nowrap;
2629
2728
  }
2630
- .rk-data.is-sticky thead th[data-v-5920cac0] {
2729
+ .rk-data.is-sticky thead th[data-v-f95c586b] {
2631
2730
  position: sticky;
2632
2731
  top: 0;
2633
2732
  z-index: 1;
2634
2733
  background: var(--color-surface);
2635
2734
  }
2636
- .rk-data td[data-v-5920cac0] {
2735
+ .rk-data td[data-v-f95c586b] {
2637
2736
  border-bottom: 1px solid color-mix(in oklab, var(--color-hair) 60%, transparent);
2638
2737
  padding: 0.625rem 0.75rem;
2639
2738
  color: var(--color-ink);
2640
2739
  vertical-align: middle;
2641
2740
  }
2642
- .rk-data tbody tr:last-child td[data-v-5920cac0] {
2741
+ .rk-data tbody tr:last-child td[data-v-f95c586b] {
2643
2742
  border-bottom: 0;
2644
2743
  }
2645
- .rk-data tbody tr.is-chosen td[data-v-5920cac0] {
2744
+ .rk-data tbody tr.is-chosen td[data-v-f95c586b] {
2646
2745
  background: color-mix(in oklab, var(--color-primary) 8%, transparent);
2647
2746
  }
2648
- .is-end[data-v-5920cac0] {
2747
+
2748
+ /* Named against `.rk-data th`, which sets `text-align: left` and would
2749
+ otherwise win: the heading stayed on the left while its numbers sat at the
2750
+ far edge, so one column read as two. The sort button is inline-flex, so it
2751
+ follows the heading's alignment and carries the arrow with it. */
2752
+ .rk-data th.is-end[data-v-f95c586b],
2753
+ .rk-data td.is-end[data-v-f95c586b] {
2649
2754
  text-align: right;
2650
2755
  font-variant-numeric: tabular-nums;
2651
2756
  }
2652
- .is-nowrap[data-v-5920cac0] {
2757
+ .rk-data th.is-center[data-v-f95c586b],
2758
+ .rk-data td.is-center[data-v-f95c586b] {
2759
+ text-align: center;
2760
+ }
2761
+ .rk-data th.is-start[data-v-f95c586b],
2762
+ .rk-data td.is-start[data-v-f95c586b] {
2763
+ text-align: left;
2764
+ }
2765
+ .is-nowrap[data-v-f95c586b] {
2653
2766
  white-space: nowrap;
2654
2767
  }
2655
- .rk-data-sort[data-v-5920cac0] {
2768
+ .rk-data-sort[data-v-f95c586b] {
2656
2769
  display: inline-flex;
2657
2770
  align-items: center;
2658
2771
  gap: 0.25rem;
@@ -2660,19 +2773,19 @@ to {
2660
2773
  color: inherit;
2661
2774
  transition: color var(--duration-fast) var(--ease-standard);
2662
2775
  }
2663
- .rk-data-sort[data-v-5920cac0]:hover {
2776
+ .rk-data-sort[data-v-f95c586b]:hover {
2664
2777
  color: var(--color-ink);
2665
2778
  }
2666
- .rk-data-pick[data-v-5920cac0] {
2779
+ .rk-data-pick[data-v-f95c586b] {
2667
2780
  width: 2.75rem;
2668
2781
  padding-right: 0;
2669
2782
  }
2670
- .rk-data-box[data-v-5920cac0] {
2783
+ .rk-data-box[data-v-f95c586b] {
2671
2784
  width: 1rem;
2672
2785
  height: 1rem;
2673
2786
  accent-color: var(--color-primary);
2674
2787
  }
2675
- .rk-data-empty[data-v-5920cac0] {
2788
+ .rk-data-empty[data-v-f95c586b] {
2676
2789
  padding: 2rem 0.75rem;
2677
2790
  text-align: center;
2678
2791
  color: var(--color-ink-soft);
@@ -2751,17 +2864,17 @@ to {
2751
2864
  align-items: stretch;
2752
2865
  }
2753
2866
 
2754
- .rk-tree[data-v-1ba675c5] {
2867
+ .rk-tree[data-v-f91deddf] {
2755
2868
  display: flex;
2756
2869
  flex-direction: column;
2757
2870
  gap: 1px;
2758
2871
  border-radius: var(--radius-card);
2759
2872
  }
2760
- .rk-tree[data-v-1ba675c5]:focus-visible {
2873
+ .rk-tree[data-v-f91deddf]:focus-visible {
2761
2874
  outline: 2px solid var(--color-primary);
2762
2875
  outline-offset: 2px;
2763
2876
  }
2764
- .rk-tree-row[data-v-1ba675c5] {
2877
+ .rk-tree-row[data-v-f91deddf] {
2765
2878
  display: flex;
2766
2879
  cursor: pointer;
2767
2880
  align-items: center;
@@ -2772,31 +2885,31 @@ to {
2772
2885
  font-size: 0.875rem;
2773
2886
  color: var(--color-ink);
2774
2887
  }
2775
- .rk-tree-row.is-active[data-v-1ba675c5] {
2888
+ .rk-tree-row.is-active[data-v-f91deddf] {
2776
2889
  background: var(--color-muted);
2777
2890
  }
2778
- .rk-tree-row.is-chosen[data-v-1ba675c5] {
2891
+ .rk-tree-row.is-chosen[data-v-f91deddf] {
2779
2892
  color: var(--color-primary);
2780
2893
  font-weight: 500;
2781
2894
  }
2782
- .rk-tree-row.is-chosen.is-active[data-v-1ba675c5] {
2895
+ .rk-tree-row.is-chosen.is-active[data-v-f91deddf] {
2783
2896
  background: color-mix(in oklab, var(--color-primary) 12%, transparent);
2784
2897
  }
2785
- .rk-tree-row.is-disabled[data-v-1ba675c5] {
2898
+ .rk-tree-row.is-disabled[data-v-f91deddf] {
2786
2899
  cursor: not-allowed;
2787
2900
  opacity: 0.45;
2788
2901
  }
2789
- .rk-tree-twist[data-v-1ba675c5],
2790
- .rk-tree-twist-space[data-v-1ba675c5] {
2902
+ .rk-tree-twist[data-v-f91deddf],
2903
+ .rk-tree-twist-space[data-v-f91deddf] {
2791
2904
  width: 1rem;
2792
2905
  height: 1rem;
2793
2906
  flex-shrink: 0;
2794
2907
  }
2795
- .rk-tree-twist[data-v-1ba675c5] {
2908
+ .rk-tree-twist[data-v-f91deddf] {
2796
2909
  color: var(--color-ink-soft);
2797
2910
  transition: rotate var(--duration-fast) var(--ease-standard);
2798
2911
  }
2799
- .rk-tree-twist.is-open[data-v-1ba675c5] {
2912
+ .rk-tree-twist.is-open[data-v-f91deddf] {
2800
2913
  rotate: 90deg;
2801
2914
  }
2802
2915
 
@@ -2833,6 +2946,15 @@ to {
2833
2946
  }
2834
2947
  }
2835
2948
 
2949
+ /* The sheet has no actions slot of its own: on a phone the buttons belong in
2950
+ the flow, at the end of what they are about, within reach of a thumb. */
2951
+ .rk-responsive-actions[data-v-85131850] {
2952
+ display: flex;
2953
+ flex-direction: column-reverse;
2954
+ gap: 0.5rem;
2955
+ padding-top: 1rem;
2956
+ }
2957
+
2836
2958
  .rk-tabs[data-v-8135ecab] {
2837
2959
  display: flex;
2838
2960
  align-items: center;
@@ -0,0 +1,50 @@
1
+ /**
2
+ * One question, asked the way the screen it lands on expects: a modal on a
3
+ * wide screen, a sheet from the bottom edge on a phone.
4
+ *
5
+ * The two are the same thing at different sizes, and apps keep writing both
6
+ * and choosing between them by hand — which is two markups, two sets of
7
+ * labels and one of them usually left behind.
8
+ *
9
+ * The query is read after mount rather than during render: a server has no
10
+ * screen, and a layout guessed there and swapped on hydration is a page that
11
+ * jumps. Until it is known, it is the sheet — the narrow answer, because the
12
+ * narrow one fits on both.
13
+ */
14
+ type __VLS_Props = {
15
+ /** The dialog's heading, and its accessible name. Already translated. */
16
+ title: string;
17
+ /** Accessible name of the close button. */
18
+ closeLabel: string;
19
+ /** A line under the title, on the sheet. */
20
+ subtitle?: string | undefined;
21
+ /** `alert` makes the wide one an `alertdialog`: an answer is required. */
22
+ tone?: 'default' | 'alert' | undefined;
23
+ dismissible?: boolean | undefined;
24
+ /** Where it turns from a sheet into a modal. Any media width. */
25
+ breakpoint?: string | undefined;
26
+ };
27
+ type __VLS_Slots = {
28
+ /** The body. */
29
+ default: () => unknown;
30
+ /** Buttons, at the foot. */
31
+ actions?: () => unknown;
32
+ };
33
+ type __VLS_ModelProps = {
34
+ /** Open or closed, with `v-model`. */
35
+ modelValue?: boolean;
36
+ };
37
+ type __VLS_PublicProps = __VLS_Props & __VLS_ModelProps;
38
+ declare const __VLS_base: import('vue').DefineComponent<__VLS_PublicProps, {}, {}, {}, {}, import('vue').ComponentOptionsMixin, import('vue').ComponentOptionsMixin, {
39
+ "update:modelValue": (value: boolean) => any;
40
+ }, string, import('vue').PublicProps, Readonly<__VLS_PublicProps> & Readonly<{
41
+ "onUpdate:modelValue"?: (value: boolean) => any;
42
+ }>, {}, {}, {}, {}, string, import('vue').ComponentProvideOptions, false, {}, any>;
43
+ declare const __VLS_export: __VLS_WithSlots<typeof __VLS_base, __VLS_Slots>;
44
+ declare const _default: typeof __VLS_export;
45
+ export default _default;
46
+ type __VLS_WithSlots<T, S> = T & {
47
+ new (): {
48
+ $slots: S;
49
+ };
50
+ };
@@ -56,6 +56,12 @@ export { default as BaseToolbar } from './BaseToolbar.vue';
56
56
  export { default as BaseTree } from './BaseTree.vue';
57
57
  export type { TreeNode } from './BaseTree.vue';
58
58
  export { default as TransferList } from './TransferList.vue';
59
+ /**
60
+ * One question, asked the way the screen expects: a modal on a wide screen,
61
+ * a sheet on a phone. In the wide entry because it needs both, and a phone
62
+ * app that only ever shows the sheet should reach for `BaseSheet` itself.
63
+ */
64
+ export { default as ResponsiveDialog } from './ResponsiveDialog.vue';
59
65
  export { default as BaseTabs } from './BaseTabs.vue';
60
66
  export type { TabPanel } from './BaseTabs.vue';
61
67
  export { default as BaseTooltip } from './BaseTooltip.vue';