rei-kit 2.9.0 → 2.11.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-95e230a5] {
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-95e230a5]: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-95e230a5] {
230
+ .rk-listbox-option[data-v-7f8cd788] {
231
231
  display: flex;
232
232
  cursor: pointer;
233
233
  align-items: center;
@@ -237,35 +237,42 @@
237
237
  font-size: 0.875rem;
238
238
  color: var(--color-ink);
239
239
  }
240
- .rk-listbox-option.is-active[data-v-95e230a5] {
240
+
241
+ /* The current row shows only while the list has focus. A list that is not
242
+ being used has no "current" row, and a highlight left behind on one reads
243
+ as a selection — which is exactly what it is not. */
244
+ .rk-listbox:focus-within .rk-listbox-option.is-active[data-v-7f8cd788] {
241
245
  background: var(--color-muted);
242
246
  }
243
- .rk-listbox-option.is-chosen[data-v-95e230a5] {
247
+ .rk-listbox-option.is-chosen[data-v-7f8cd788] {
244
248
  color: var(--color-primary);
245
249
  font-weight: 500;
246
250
  }
247
251
 
248
- /* Both at once: the current option and the chosen one are different things,
249
- and a list that shows only one of them loses the reader's place. */
250
- .rk-listbox-option.is-chosen.is-active[data-v-95e230a5] {
251
- background: color-mix(in oklab, var(--color-primary) 12%, transparent);
252
+ /* Chosen is the tick and the tint, and it holds whether the list is in use
253
+ or not: the current option and the chosen one are different things. */
254
+ .rk-listbox-option.is-chosen[data-v-7f8cd788] {
255
+ background: color-mix(in oklab, var(--color-primary) 10%, transparent);
256
+ }
257
+ .rk-listbox:focus-within .rk-listbox-option.is-chosen.is-active[data-v-7f8cd788] {
258
+ background: color-mix(in oklab, var(--color-primary) 20%, transparent);
252
259
  }
253
- .rk-listbox-option.is-disabled[data-v-95e230a5] {
260
+ .rk-listbox-option.is-disabled[data-v-7f8cd788] {
254
261
  cursor: not-allowed;
255
262
  opacity: 0.45;
256
263
  }
257
- .rk-listbox-label[data-v-95e230a5] {
264
+ .rk-listbox-label[data-v-7f8cd788] {
258
265
  display: block;
259
266
  overflow: hidden;
260
267
  text-overflow: ellipsis;
261
268
  white-space: nowrap;
262
269
  }
263
- .rk-listbox-description[data-v-95e230a5] {
270
+ .rk-listbox-description[data-v-7f8cd788] {
264
271
  display: block;
265
272
  font-size: 0.75rem;
266
273
  color: var(--color-ink-soft);
267
274
  }
268
- .rk-listbox-empty[data-v-95e230a5] {
275
+ .rk-listbox-empty[data-v-7f8cd788] {
269
276
  padding: 1rem;
270
277
  }
271
278
 
@@ -1327,6 +1334,38 @@ to {
1327
1334
  padding: 0;
1328
1335
  }
1329
1336
 
1337
+ .rk-dl[data-v-831e205b] {
1338
+ display: grid;
1339
+ gap: 0.75rem;
1340
+ }
1341
+ .rk-dl.is-inline[data-v-831e205b] {
1342
+ gap: 0.5rem;
1343
+ }
1344
+ .rk-dl-row[data-v-831e205b] {
1345
+ display: grid;
1346
+ gap: 0.125rem;
1347
+ }
1348
+
1349
+ /* Inline from a tablet up: below that a term and its value side by side
1350
+ leave neither enough room to read. */
1351
+ @media (min-width: 40rem) {
1352
+ .is-inline .rk-dl-row[data-v-831e205b] {
1353
+ grid-template-columns: minmax(6rem, 12rem) minmax(0, 1fr);
1354
+ gap: 1rem;
1355
+ align-items: baseline;
1356
+ }
1357
+ }
1358
+ .rk-dl-term[data-v-831e205b] {
1359
+ font-size: 0.75rem;
1360
+ font-weight: 600;
1361
+ letter-spacing: 0.02em;
1362
+ color: var(--color-ink-soft);
1363
+ }
1364
+ .rk-dl-value[data-v-831e205b] {
1365
+ font-size: 0.875rem;
1366
+ color: var(--color-ink);
1367
+ }
1368
+
1330
1369
  .rk-drop-box[data-v-a42eab69] {
1331
1370
  display: flex;
1332
1371
  cursor: pointer;
@@ -1415,7 +1454,7 @@ to {
1415
1454
  color: var(--color-ink);
1416
1455
  }
1417
1456
 
1418
- .rk-tags[data-v-b372ae7b] {
1457
+ .rk-tags[data-v-1fd08921] {
1419
1458
  display: flex;
1420
1459
  min-height: 2.75rem;
1421
1460
  cursor: text;
@@ -1428,18 +1467,18 @@ to {
1428
1467
 
1429
1468
  /* `:has(input:focus-visible)` rather than `:focus-within`: the ring belongs
1430
1469
  to the field, not to the chips' remove buttons, which carry their own. */
1431
- .rk-tags[data-v-b372ae7b]:has(.rk-tags-field:focus-visible) {
1470
+ .rk-tags[data-v-1fd08921]:has(.rk-tags-field:focus-visible) {
1432
1471
  outline: 2px solid var(--color-primary);
1433
1472
  outline-offset: 1px;
1434
1473
  }
1435
- .rk-tags.is-invalid[data-v-b372ae7b] {
1474
+ .rk-tags.is-invalid[data-v-1fd08921] {
1436
1475
  --surface-border-color: var(--color-negative);
1437
1476
  }
1438
- .rk-tags.is-disabled[data-v-b372ae7b] {
1477
+ .rk-tags.is-disabled[data-v-1fd08921] {
1439
1478
  cursor: not-allowed;
1440
1479
  opacity: 0.5;
1441
1480
  }
1442
- .rk-tags-field[data-v-b372ae7b] {
1481
+ .rk-tags-field[data-v-1fd08921] {
1443
1482
  min-width: 6rem;
1444
1483
  flex: 1;
1445
1484
  background: transparent;
@@ -1499,6 +1538,38 @@ to {
1499
1538
  transform: translateY(4px) scale(0.98);
1500
1539
  }
1501
1540
 
1541
+ .rk-time[data-v-0037adb2] {
1542
+ display: block;
1543
+ }
1544
+ .rk-time-field[data-v-0037adb2] {
1545
+ display: flex;
1546
+ width: 100%;
1547
+ height: 2.75rem;
1548
+ align-items: center;
1549
+ gap: 0.5rem;
1550
+ border-radius: var(--radius-card);
1551
+ padding: 0 0.75rem;
1552
+ text-align: left;
1553
+ font-size: 1rem;
1554
+ font-variant-numeric: tabular-nums;
1555
+ color: var(--color-ink);
1556
+ }
1557
+ .rk-time-field.is-empty[data-v-0037adb2] {
1558
+ color: var(--color-ink-soft);
1559
+ }
1560
+ .rk-time-field.is-invalid[data-v-0037adb2] {
1561
+ --surface-border-color: var(--color-negative);
1562
+ }
1563
+ .rk-time-field[data-v-0037adb2]:disabled {
1564
+ opacity: 0.5;
1565
+ }
1566
+ .rk-time-columns[data-v-0037adb2] {
1567
+ display: grid;
1568
+ grid-template-columns: minmax(0, 1.4fr) minmax(0, 1fr);
1569
+ gap: 0.5rem;
1570
+ width: 14rem;
1571
+ }
1572
+
1502
1573
  .rk-date[data-v-154e27fb] {
1503
1574
  display: block;
1504
1575
  }
@@ -1604,6 +1675,29 @@ to {
1604
1675
  }
1605
1676
  }
1606
1677
 
1678
+ .rk-confirm[data-v-9453e511] {
1679
+ max-width: 17rem;
1680
+ }
1681
+ .rk-confirm-title[data-v-9453e511] {
1682
+ font-size: 0.875rem;
1683
+ font-weight: 600;
1684
+ color: var(--color-ink);
1685
+ }
1686
+ .rk-confirm-message[data-v-9453e511] {
1687
+ margin-top: 0.125rem;
1688
+ font-size: 0.8125rem;
1689
+ line-height: 1.5;
1690
+ color: var(--color-ink-soft);
1691
+ }
1692
+
1693
+ /* The confirming button last, where the eye and the thumb finish. */
1694
+ .rk-confirm-actions[data-v-9453e511] {
1695
+ margin-top: 0.75rem;
1696
+ display: flex;
1697
+ justify-content: flex-end;
1698
+ gap: 0.5rem;
1699
+ }
1700
+
1607
1701
  .rk-toggles[data-v-9076e36f] {
1608
1702
  display: inline-flex;
1609
1703
  flex-wrap: wrap;
@@ -2744,17 +2838,17 @@ to {
2744
2838
  align-items: stretch;
2745
2839
  }
2746
2840
 
2747
- .rk-tree[data-v-1ba675c5] {
2841
+ .rk-tree[data-v-f91deddf] {
2748
2842
  display: flex;
2749
2843
  flex-direction: column;
2750
2844
  gap: 1px;
2751
2845
  border-radius: var(--radius-card);
2752
2846
  }
2753
- .rk-tree[data-v-1ba675c5]:focus-visible {
2847
+ .rk-tree[data-v-f91deddf]:focus-visible {
2754
2848
  outline: 2px solid var(--color-primary);
2755
2849
  outline-offset: 2px;
2756
2850
  }
2757
- .rk-tree-row[data-v-1ba675c5] {
2851
+ .rk-tree-row[data-v-f91deddf] {
2758
2852
  display: flex;
2759
2853
  cursor: pointer;
2760
2854
  align-items: center;
@@ -2765,31 +2859,31 @@ to {
2765
2859
  font-size: 0.875rem;
2766
2860
  color: var(--color-ink);
2767
2861
  }
2768
- .rk-tree-row.is-active[data-v-1ba675c5] {
2862
+ .rk-tree-row.is-active[data-v-f91deddf] {
2769
2863
  background: var(--color-muted);
2770
2864
  }
2771
- .rk-tree-row.is-chosen[data-v-1ba675c5] {
2865
+ .rk-tree-row.is-chosen[data-v-f91deddf] {
2772
2866
  color: var(--color-primary);
2773
2867
  font-weight: 500;
2774
2868
  }
2775
- .rk-tree-row.is-chosen.is-active[data-v-1ba675c5] {
2869
+ .rk-tree-row.is-chosen.is-active[data-v-f91deddf] {
2776
2870
  background: color-mix(in oklab, var(--color-primary) 12%, transparent);
2777
2871
  }
2778
- .rk-tree-row.is-disabled[data-v-1ba675c5] {
2872
+ .rk-tree-row.is-disabled[data-v-f91deddf] {
2779
2873
  cursor: not-allowed;
2780
2874
  opacity: 0.45;
2781
2875
  }
2782
- .rk-tree-twist[data-v-1ba675c5],
2783
- .rk-tree-twist-space[data-v-1ba675c5] {
2876
+ .rk-tree-twist[data-v-f91deddf],
2877
+ .rk-tree-twist-space[data-v-f91deddf] {
2784
2878
  width: 1rem;
2785
2879
  height: 1rem;
2786
2880
  flex-shrink: 0;
2787
2881
  }
2788
- .rk-tree-twist[data-v-1ba675c5] {
2882
+ .rk-tree-twist[data-v-f91deddf] {
2789
2883
  color: var(--color-ink-soft);
2790
2884
  transition: rotate var(--duration-fast) var(--ease-standard);
2791
2885
  }
2792
- .rk-tree-twist.is-open[data-v-1ba675c5] {
2886
+ .rk-tree-twist.is-open[data-v-f91deddf] {
2793
2887
  rotate: 90deg;
2794
2888
  }
2795
2889
 
@@ -2826,6 +2920,15 @@ to {
2826
2920
  }
2827
2921
  }
2828
2922
 
2923
+ /* The sheet has no actions slot of its own: on a phone the buttons belong in
2924
+ the flow, at the end of what they are about, within reach of a thumb. */
2925
+ .rk-responsive-actions[data-v-85131850] {
2926
+ display: flex;
2927
+ flex-direction: column-reverse;
2928
+ gap: 0.5rem;
2929
+ padding-top: 1rem;
2930
+ }
2931
+
2829
2932
  .rk-tabs[data-v-8135ecab] {
2830
2933
  display: flex;
2831
2934
  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';
package/dist/web.js CHANGED
@@ -1,12 +1,12 @@
1
- import { i as ensureSheetRoot, n as useBoundValue, t as inertOutside } from "./inert-BRQcZwpX.js";
1
+ import { n as inertOutside, o as ensureSheetRoot, r as useBoundValue, t as BaseSheet_default } from "./BaseSheet-B7401rS7.js";
2
+ import { n as BaseListbox_default, r as useMediaQuery, t as BaseSkeleton_default } from "./BaseSkeleton-DnqwogzV.js";
2
3
  import { t as _plugin_vue_export_helper_default } from "./_plugin-vue_export-helper-BOaGB7Aw.js";
3
4
  import { t as BaseButton_default } from "./BaseButton-RN2an975.js";
4
- import { n as BaseListbox_default, t as BaseSkeleton_default } from "./BaseSkeleton-BWTNXVwP.js";
5
- import { Fragment, Teleport, Transition, computed, createBlock, createCommentVNode, createElementBlock, createElementVNode, createTextVNode, createVNode, defineComponent, mergeModels, nextTick, normalizeClass, normalizeStyle, onBeforeUnmount, onMounted, openBlock, ref, renderList, renderSlot, resolveDynamicComponent, shallowRef, toDisplayString, unref, useId, useModel, useTemplateRef, vModelText, vShow, watch, withCtx, withDirectives, withModifiers } from "vue";
5
+ import { Fragment, Teleport, Transition, computed, createBlock, createCommentVNode, createElementBlock, createElementVNode, createSlots, createTextVNode, createVNode, defineComponent, mergeModels, nextTick, normalizeClass, normalizeStyle, onBeforeUnmount, onMounted, openBlock, ref, renderList, renderSlot, resolveDynamicComponent, shallowRef, toDisplayString, unref, useId, useModel, useTemplateRef, vModelText, vShow, watch, withCtx, withDirectives, withModifiers } from "vue";
6
6
  import { ArrowDown, ArrowUp, ChevronLeft, ChevronRight, ChevronsUpDown, Search } from "lucide-vue-next";
7
7
  import { RouterLink } from "vue-router";
8
8
  //#region src/web/BaseAccordion.vue?vue&type=script&setup=true&lang.ts
9
- var _hoisted_1$13 = { class: "rk-accordion" };
9
+ var _hoisted_1$14 = { class: "rk-accordion" };
10
10
  var _hoisted_2$12 = [
11
11
  "aria-expanded",
12
12
  "aria-controls",
@@ -40,7 +40,7 @@ var BaseAccordion_default = /*#__PURE__*/ _plugin_vue_export_helper_default(/* @
40
40
  else open.value = __props.multiple ? [...open.value, key] : [key];
41
41
  }
42
42
  return (_ctx, _cache) => {
43
- return openBlock(), createElementBlock("ul", _hoisted_1$13, [(openBlock(true), createElementBlock(Fragment, null, renderList(__props.items, (item) => {
43
+ return openBlock(), createElementBlock("ul", _hoisted_1$14, [(openBlock(true), createElementBlock(Fragment, null, renderList(__props.items, (item) => {
44
44
  return openBlock(), createElementBlock("li", {
45
45
  key: item.key,
46
46
  class: "rk-accordion-item"
@@ -69,7 +69,7 @@ var BaseAccordion_default = /*#__PURE__*/ _plugin_vue_export_helper_default(/* @
69
69
  }), [["__scopeId", "data-v-03e2e1d0"]]);
70
70
  //#endregion
71
71
  //#region src/web/BaseBreadcrumb.vue?vue&type=script&setup=true&lang.ts
72
- var _hoisted_1$12 = ["aria-label"];
72
+ var _hoisted_1$13 = ["aria-label"];
73
73
  var _hoisted_2$11 = { class: "rk-crumbs" };
74
74
  var _hoisted_3$9 = {
75
75
  key: 1,
@@ -103,13 +103,13 @@ var BaseBreadcrumb_default = /*#__PURE__*/ _plugin_vue_export_helper_default(/*
103
103
  default: withCtx(() => [createTextVNode(toDisplayString(item.label), 1)]),
104
104
  _: 2
105
105
  }, 1032, ["to"])) : (openBlock(), createElementBlock("span", _hoisted_3$9, toDisplayString(item.label), 1)), index < __props.items.length - 1 ? (openBlock(), createElementBlock("span", _hoisted_4$7, "/")) : createCommentVNode("", true)]);
106
- }), 128))])], 8, _hoisted_1$12);
106
+ }), 128))])], 8, _hoisted_1$13);
107
107
  };
108
108
  }
109
109
  }), [["__scopeId", "data-v-dcc01b03"]]);
110
110
  //#endregion
111
111
  //#region src/web/BaseDisclosure.vue?vue&type=script&setup=true&lang.ts
112
- var _hoisted_1$11 = { class: "rk-disclosure" };
112
+ var _hoisted_1$12 = { class: "rk-disclosure" };
113
113
  var _hoisted_2$10 = ["aria-expanded", "aria-controls"];
114
114
  var _hoisted_3$8 = { class: "rk-disclosure-title" };
115
115
  var _hoisted_4$6 = {
@@ -137,7 +137,7 @@ var BaseDisclosure_default = /*#__PURE__*/ _plugin_vue_export_helper_default(/*
137
137
  const open = useModel(__props, "modelValue");
138
138
  const id = useId();
139
139
  return (_ctx, _cache) => {
140
- return openBlock(), createElementBlock("div", _hoisted_1$11, [(openBlock(), createBlock(resolveDynamicComponent(`h${__props.headingLevel}`), null, {
140
+ return openBlock(), createElementBlock("div", _hoisted_1$12, [(openBlock(), createBlock(resolveDynamicComponent(`h${__props.headingLevel}`), null, {
141
141
  default: withCtx(() => [createElementVNode("button", {
142
142
  type: "button",
143
143
  class: "rk-disclosure-control",
@@ -155,7 +155,7 @@ var BaseDisclosure_default = /*#__PURE__*/ _plugin_vue_export_helper_default(/*
155
155
  }), [["__scopeId", "data-v-ad5c09f5"]]);
156
156
  //#endregion
157
157
  //#region src/web/BaseModal.vue?vue&type=script&setup=true&lang.ts
158
- var _hoisted_1$10 = ["role", "aria-label"];
158
+ var _hoisted_1$11 = ["role", "aria-label"];
159
159
  var _hoisted_2$9 = { class: "rk-modal-head" };
160
160
  var _hoisted_3$7 = { class: "rk-modal-title" };
161
161
  var _hoisted_4$5 = ["aria-label"];
@@ -296,7 +296,7 @@ var BaseModal_default = /*#__PURE__*/ _plugin_vue_export_helper_default(/* @__PU
296
296
  })], -1)])], 8, _hoisted_4$5)) : createCommentVNode("", true)]),
297
297
  createElementVNode("div", _hoisted_5$4, [renderSlot(_ctx.$slots, "default", {}, void 0, true)]),
298
298
  _ctx.$slots.actions ? (openBlock(), createElementBlock("div", _hoisted_6$3, [renderSlot(_ctx.$slots, "actions", {}, void 0, true)])) : createCommentVNode("", true)
299
- ], 8, _hoisted_1$10)], 32)) : createCommentVNode("", true)]),
299
+ ], 8, _hoisted_1$11)], 32)) : createCommentVNode("", true)]),
300
300
  _: 3
301
301
  })]);
302
302
  };
@@ -304,7 +304,7 @@ var BaseModal_default = /*#__PURE__*/ _plugin_vue_export_helper_default(/* @__PU
304
304
  }), [["__scopeId", "data-v-61956691"]]);
305
305
  //#endregion
306
306
  //#region src/web/BasePagination.vue?vue&type=script&setup=true&lang.ts
307
- var _hoisted_1$9 = ["aria-label"];
307
+ var _hoisted_1$10 = ["aria-label"];
308
308
  var _hoisted_2$8 = ["disabled", "aria-label"];
309
309
  var _hoisted_3$6 = {
310
310
  key: 0,
@@ -392,13 +392,13 @@ var BasePagination_default = /*#__PURE__*/ _plugin_vue_export_helper_default(/*
392
392
  "aria-label": __props.nextLabel,
393
393
  onClick: _cache[1] || (_cache[1] = ($event) => go(__props.page + 1))
394
394
  }, " › ", 8, _hoisted_5$3)
395
- ], 8, _hoisted_1$9);
395
+ ], 8, _hoisted_1$10);
396
396
  };
397
397
  }
398
398
  }), [["__scopeId", "data-v-29950578"]]);
399
399
  //#endregion
400
400
  //#region src/web/CommandMenu.vue?vue&type=script&setup=true&lang.ts
401
- var _hoisted_1$8 = ["aria-label"];
401
+ var _hoisted_1$9 = ["aria-label"];
402
402
  var _hoisted_2$7 = { class: "rk-command-field" };
403
403
  var _hoisted_3$5 = [
404
404
  "placeholder",
@@ -581,7 +581,7 @@ var CommandMenu_default = /*#__PURE__*/ _plugin_vue_export_helper_default(/* @__
581
581
  item.hint ? (openBlock(), createElementBlock("span", _hoisted_8$1, toDisplayString(item.hint), 1)) : createCommentVNode("", true)
582
582
  ], 42, _hoisted_6$2);
583
583
  }), 128))], 64);
584
- }), 128)), flat.value.length === 0 ? (openBlock(), createElementBlock("p", _hoisted_9$1, toDisplayString(__props.emptyLabel), 1)) : createCommentVNode("", true)], 8, _hoisted_4$3)], 8, _hoisted_1$8)], 32)) : createCommentVNode("", true)]),
584
+ }), 128)), flat.value.length === 0 ? (openBlock(), createElementBlock("p", _hoisted_9$1, toDisplayString(__props.emptyLabel), 1)) : createCommentVNode("", true)], 8, _hoisted_4$3)], 8, _hoisted_1$9)], 32)) : createCommentVNode("", true)]),
585
585
  _: 1
586
586
  })], 8, ["to"]);
587
587
  };
@@ -589,7 +589,7 @@ var CommandMenu_default = /*#__PURE__*/ _plugin_vue_export_helper_default(/* @__
589
589
  }), [["__scopeId", "data-v-cce1dd03"]]);
590
590
  //#endregion
591
591
  //#region src/web/DataTable.vue?vue&type=script&setup=true&lang.ts
592
- var _hoisted_1$7 = ["aria-label"];
592
+ var _hoisted_1$8 = ["aria-label"];
593
593
  var _hoisted_2$6 = {
594
594
  key: 0,
595
595
  scope: "col",
@@ -777,13 +777,13 @@ var DataTable_default = /*#__PURE__*/ _plugin_vue_export_helper_default(/* @__PU
777
777
  colspan: columnCount.value,
778
778
  class: "rk-data-empty"
779
779
  }, [renderSlot(_ctx.$slots, "empty", {}, void 0, true)], 8, _hoisted_12)])]))
780
- ], 2)], 8, _hoisted_1$7);
780
+ ], 2)], 8, _hoisted_1$8);
781
781
  };
782
782
  }
783
783
  }), [["__scopeId", "data-v-5920cac0"]]);
784
784
  //#endregion
785
785
  //#region src/web/BaseSplitter.vue?vue&type=script&setup=true&lang.ts
786
- var _hoisted_1$6 = { class: "rk-split-pane is-start" };
786
+ var _hoisted_1$7 = { class: "rk-split-pane is-start" };
787
787
  var _hoisted_2$5 = [
788
788
  "aria-label",
789
789
  "aria-orientation",
@@ -856,7 +856,7 @@ var BaseSplitter_default = /*#__PURE__*/ _plugin_vue_export_helper_default(/* @_
856
856
  class: normalizeClass(["rk-split", [`is-${__props.orientation}`, { "is-dragging": dragging.value }]]),
857
857
  style: normalizeStyle({ "--rk-split": `${split.value}%` })
858
858
  }, [
859
- createElementVNode("div", _hoisted_1$6, [renderSlot(_ctx.$slots, "start", {}, void 0, true)]),
859
+ createElementVNode("div", _hoisted_1$7, [renderSlot(_ctx.$slots, "start", {}, void 0, true)]),
860
860
  createElementVNode("div", {
861
861
  class: "rk-split-handle focus-ring",
862
862
  role: "separator",
@@ -882,7 +882,7 @@ var BaseSplitter_default = /*#__PURE__*/ _plugin_vue_export_helper_default(/* @_
882
882
  }), [["__scopeId", "data-v-159a4f08"]]);
883
883
  //#endregion
884
884
  //#region src/web/BaseToolbar.vue?vue&type=script&setup=true&lang.ts
885
- var _hoisted_1$5 = ["aria-label", "aria-orientation"];
885
+ var _hoisted_1$6 = ["aria-label", "aria-orientation"];
886
886
  /**
887
887
  * A row of controls that belong together: a formatting bar, a row of view
888
888
  * switches, the actions over a table.
@@ -962,13 +962,13 @@ var BaseToolbar_default = /*#__PURE__*/ _plugin_vue_export_helper_default(/* @__
962
962
  "aria-orientation": __props.orientation,
963
963
  onKeydown,
964
964
  onFocusin
965
- }, [renderSlot(_ctx.$slots, "default", {}, void 0, true)], 42, _hoisted_1$5);
965
+ }, [renderSlot(_ctx.$slots, "default", {}, void 0, true)], 42, _hoisted_1$6);
966
966
  };
967
967
  }
968
968
  }), [["__scopeId", "data-v-a65164b7"]]);
969
969
  //#endregion
970
970
  //#region src/web/BaseTree.vue?vue&type=script&setup=true&lang.ts
971
- var _hoisted_1$4 = ["aria-label", "aria-multiselectable"];
971
+ var _hoisted_1$5 = ["aria-label", "aria-multiselectable"];
972
972
  var _hoisted_2$4 = [
973
973
  "aria-level",
974
974
  "aria-setsize",
@@ -1114,7 +1114,7 @@ var BaseTree_default = /*#__PURE__*/ _plugin_vue_export_helper_default(/* @__PUR
1114
1114
  "aria-posinset": row.position,
1115
1115
  "aria-expanded": row.node.children?.length ? isOpen(row.node) : void 0,
1116
1116
  "aria-selected": chosen.value.has(row.node.key),
1117
- "aria-disabled": row.node.disabled,
1117
+ "aria-disabled": row.node.disabled || void 0,
1118
1118
  style: normalizeStyle({ "--rk-tree-level": row.level }),
1119
1119
  onClick: ($event) => onClick(index, row)
1120
1120
  }, [
@@ -1130,13 +1130,13 @@ var BaseTree_default = /*#__PURE__*/ _plugin_vue_export_helper_default(/* @__PUR
1130
1130
  })) : createCommentVNode("", true),
1131
1131
  createElementVNode("span", _hoisted_4$1, toDisplayString(row.node.label), 1)
1132
1132
  ], 14, _hoisted_2$4);
1133
- }), 128))], 40, _hoisted_1$4);
1133
+ }), 128))], 40, _hoisted_1$5);
1134
1134
  };
1135
1135
  }
1136
- }), [["__scopeId", "data-v-1ba675c5"]]);
1136
+ }), [["__scopeId", "data-v-f91deddf"]]);
1137
1137
  //#endregion
1138
1138
  //#region src/web/TransferList.vue?vue&type=script&setup=true&lang.ts
1139
- var _hoisted_1$3 = { class: "rk-transfer" };
1139
+ var _hoisted_1$4 = { class: "rk-transfer" };
1140
1140
  var _hoisted_2$3 = { class: "rk-transfer-side" };
1141
1141
  var _hoisted_3$1 = { class: "rk-transfer-title" };
1142
1142
  var _hoisted_4 = { class: "rk-transfer-middle" };
@@ -1174,7 +1174,7 @@ var TransferList_default = /*#__PURE__*/ _plugin_vue_export_helper_default(/* @_
1174
1174
  markedChosen.value = [];
1175
1175
  }
1176
1176
  return (_ctx, _cache) => {
1177
- return openBlock(), createElementBlock("div", _hoisted_1$3, [
1177
+ return openBlock(), createElementBlock("div", _hoisted_1$4, [
1178
1178
  createElementVNode("div", _hoisted_2$3, [createElementVNode("p", _hoisted_3$1, toDisplayString(__props.availableLabel), 1), createVNode(BaseListbox_default, {
1179
1179
  modelValue: markedAvailable.value,
1180
1180
  "onUpdate:modelValue": _cache[0] || (_cache[0] = ($event) => markedAvailable.value = $event),
@@ -1225,6 +1225,80 @@ var TransferList_default = /*#__PURE__*/ _plugin_vue_export_helper_default(/* @_
1225
1225
  }
1226
1226
  }), [["__scopeId", "data-v-1d75b0da"]]);
1227
1227
  //#endregion
1228
+ //#region src/web/ResponsiveDialog.vue?vue&type=script&setup=true&lang.ts
1229
+ var _hoisted_1$3 = {
1230
+ key: 0,
1231
+ class: "rk-responsive-actions"
1232
+ };
1233
+ //#endregion
1234
+ //#region src/web/ResponsiveDialog.vue
1235
+ var ResponsiveDialog_default = /*#__PURE__*/ _plugin_vue_export_helper_default(/* @__PURE__ */ defineComponent({
1236
+ __name: "ResponsiveDialog",
1237
+ props: /*@__PURE__*/ mergeModels({
1238
+ title: {},
1239
+ closeLabel: {},
1240
+ subtitle: { default: "" },
1241
+ tone: { default: "default" },
1242
+ dismissible: {
1243
+ type: Boolean,
1244
+ default: true
1245
+ },
1246
+ breakpoint: { default: "48rem" }
1247
+ }, {
1248
+ "modelValue": {
1249
+ type: Boolean,
1250
+ default: false
1251
+ },
1252
+ "modelModifiers": {}
1253
+ }),
1254
+ emits: ["update:modelValue"],
1255
+ setup(__props) {
1256
+ /** Open or closed, with `v-model`. */
1257
+ const open = useModel(__props, "modelValue");
1258
+ const wide = useMediaQuery(`(min-width: ${__props.breakpoint})`);
1259
+ const asModal = computed(() => wide.value);
1260
+ return (_ctx, _cache) => {
1261
+ return asModal.value ? (openBlock(), createBlock(BaseModal_default, {
1262
+ key: 0,
1263
+ modelValue: open.value,
1264
+ "onUpdate:modelValue": _cache[0] || (_cache[0] = ($event) => open.value = $event),
1265
+ title: __props.title,
1266
+ "close-label": __props.closeLabel,
1267
+ tone: __props.tone,
1268
+ dismissible: __props.dismissible
1269
+ }, createSlots({
1270
+ default: withCtx(() => [renderSlot(_ctx.$slots, "default", {}, void 0, true)]),
1271
+ _: 2
1272
+ }, [_ctx.$slots.actions ? {
1273
+ name: "actions",
1274
+ fn: withCtx(() => [renderSlot(_ctx.$slots, "actions", {}, void 0, true)]),
1275
+ key: "0"
1276
+ } : void 0]), 1032, [
1277
+ "modelValue",
1278
+ "title",
1279
+ "close-label",
1280
+ "tone",
1281
+ "dismissible"
1282
+ ])) : (openBlock(), createBlock(BaseSheet_default, {
1283
+ key: 1,
1284
+ modelValue: open.value,
1285
+ "onUpdate:modelValue": _cache[1] || (_cache[1] = ($event) => open.value = $event),
1286
+ title: __props.title,
1287
+ subtitle: __props.subtitle,
1288
+ "close-label": __props.closeLabel
1289
+ }, {
1290
+ default: withCtx(() => [renderSlot(_ctx.$slots, "default", {}, void 0, true), _ctx.$slots.actions ? (openBlock(), createElementBlock("div", _hoisted_1$3, [renderSlot(_ctx.$slots, "actions", {}, void 0, true)])) : createCommentVNode("", true)]),
1291
+ _: 3
1292
+ }, 8, [
1293
+ "modelValue",
1294
+ "title",
1295
+ "subtitle",
1296
+ "close-label"
1297
+ ]));
1298
+ };
1299
+ }
1300
+ }), [["__scopeId", "data-v-85131850"]]);
1301
+ //#endregion
1228
1302
  //#region src/web/BaseTabs.vue?vue&type=script&setup=true&lang.ts
1229
1303
  var _hoisted_1$2 = ["aria-label"];
1230
1304
  var _hoisted_2$2 = [
@@ -1370,6 +1444,6 @@ var NavLinks_default = /*#__PURE__*/ _plugin_vue_export_helper_default(/* @__PUR
1370
1444
  }
1371
1445
  }), [["__scopeId", "data-v-52e5d553"]]);
1372
1446
  //#endregion
1373
- export { BaseAccordion_default as BaseAccordion, BaseBreadcrumb_default as BaseBreadcrumb, BaseDisclosure_default as BaseDisclosure, BaseModal_default as BaseModal, BasePagination_default as BasePagination, BaseSplitter_default as BaseSplitter, BaseTabs_default as BaseTabs, BaseToolbar_default as BaseToolbar, BaseTooltip_default as BaseTooltip, BaseTree_default as BaseTree, CommandMenu_default as CommandMenu, DataTable_default as DataTable, NavLinks_default as NavLinks, TransferList_default as TransferList };
1447
+ export { BaseAccordion_default as BaseAccordion, BaseBreadcrumb_default as BaseBreadcrumb, BaseDisclosure_default as BaseDisclosure, BaseModal_default as BaseModal, BasePagination_default as BasePagination, BaseSplitter_default as BaseSplitter, BaseTabs_default as BaseTabs, BaseToolbar_default as BaseToolbar, BaseTooltip_default as BaseTooltip, BaseTree_default as BaseTree, CommandMenu_default as CommandMenu, DataTable_default as DataTable, NavLinks_default as NavLinks, ResponsiveDialog_default as ResponsiveDialog, TransferList_default as TransferList };
1374
1448
 
1375
1449
  //# sourceMappingURL=web.js.map