rei-kit 2.21.0 → 2.23.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.js CHANGED
@@ -1,14 +1,14 @@
1
1
  import { a as addDays, c as lastNDays, d as toDateKey, f as todayKey, i as needsIosInstall, l as leadingBlanks, n as isApplePortable, o as eachDayOfYear, r as isInstalled, s as fromDateKey, t as SettingsGroup_default, u as startOfWeek } from "./SettingsGroup-BXkajKGl.js";
2
2
  import { n as formatNumber, r as setFormatLocale, t as formatDate } from "./format-BEvBK1SJ.js";
3
- import { a as SHEET_ROOT_ID, i as useVisualViewport, o as ensureSheetRoot, r as useBoundValue, t as BaseSheet_default } from "./BaseSheet-B7401rS7.js";
4
- import { a as BaseAlert_default, c as applyTheme, d as setThemeStorageKey, f as useTheme, h as toRedirectPath, i as FormField_default, l as isThemePreference, m as safeRedirect, n as BaseCheckbox_default, o as useToast, p as tapFeedback, r as BaseInput_default, s as useOnline, t as GoogleButton_default, u as readStoredTheme } from "./GoogleButton-mCqGbrXm.js";
3
+ import { a as BaseCheckbox_default, c as useBoundValue, d as ensureSheetRoot, i as textDirection, l as useVisualViewport, n as elementDirection, o as BaseSheet_default, r as horizontalStep, t as focusTarget, u as SHEET_ROOT_ID } from "./focus-target-DRgd8UnQ.js";
4
+ import { a as FormField_default, c as useOnline, d as readStoredTheme, f as setThemeStorageKey, g as toRedirectPath, h as safeRedirect, i as BaseInput_default, l as applyTheme, m as tapFeedback, n as useAnnounce, o as BaseAlert_default, p as useTheme, r as GoogleButton_default, s as useToast, t as announce, u as isThemePreference } from "./use-announce-qM0ZD9Ey.js";
5
5
  import { n as registerErrorMapper, r as toAppError, t as AppError } from "./app-error-DF9cijE0.js";
6
- import { i as useMediaQuery, n as BaseSkeleton_default, r as useMenuKeys, t as BaseListbox_default } from "./BaseListbox-Btibgnaf.js";
6
+ import { a as useMediaQuery, i as useMenuKeys, n as ScrollArea_default, o as useDragScroll, r as BaseSkeleton_default, t as BaseListbox_default } from "./BaseListbox-BrIZxUmx.js";
7
7
  import { t as _plugin_vue_export_helper_default } from "./_plugin-vue_export-helper-BOaGB7Aw.js";
8
8
  import { t as BaseButton_default } from "./BaseButton-RN2an975.js";
9
9
  import { t as SettingsRow_default } from "./SettingsRow-Ct1p2C9Q.js";
10
10
  import { Fragment, Teleport, Transition, TransitionGroup, computed, createBlock, createCommentVNode, createElementBlock, createElementVNode, createTextVNode, createVNode, defineComponent, guardReactiveProps, isRef, mergeModels, mergeProps, nextTick, normalizeClass, normalizeProps, normalizeStyle, onBeforeUnmount, onErrorCaptured, onMounted, onScopeDispose, openBlock, readonly, ref, renderList, renderSlot, resolveDynamicComponent, toDisplayString, unref, useId, useModel, useTemplateRef, vModelRadio, vModelSelect, vModelText, vShow, watch, watchEffect, withCtx, withDirectives, withKeys, withModifiers } from "vue";
11
- import { ArrowDown, ArrowRight, ArrowUp, ArrowUpRight, CalendarDays, Check, CheckCircle2, ChevronDown, ChevronLeft, ChevronRight, Clock, Copy, Info, Minus, Paperclip, Plus, Star, TriangleAlert, Upload, X, XCircle } from "lucide-vue-next";
11
+ import { ArrowDown, ArrowRight, ArrowUp, ArrowUpRight, CalendarDays, Check, CheckCircle2, ChevronDown, ChevronLeft, ChevronRight, Clock, Copy, Eye, EyeOff, Info, Minus, Paperclip, Plus, Star, TriangleAlert, Upload, X, XCircle } from "lucide-vue-next";
12
12
  import { RouterLink } from "vue-router";
13
13
  import { createI18n } from "vue-i18n";
14
14
  //#region src/utils/day-label.ts
@@ -271,94 +271,18 @@ function useDebouncedCallback(callback, delay = 800) {
271
271
  };
272
272
  }
273
273
  //#endregion
274
- //#region src/composables/use-drag-scroll.ts
275
- /** Movement before a press counts as a drag rather than a tap. */
276
- var DRAG_THRESHOLD_PX = 6;
277
- /**
278
- * Drag-to-scroll for a horizontally scrolling element.
279
- *
280
- * The app puts `touch-action: pan-y` on the page content so the tab-swipe
281
- * gesture keeps its pointer events — the browser never claims a horizontal
282
- * drag, which also means it never pans this element natively. Rather than give
283
- * that up, horizontal scrolling is driven here.
284
- *
285
- * @param target - The scroll container.
286
- * @returns `didDrag`, so a click handler can ignore the press that ended a drag.
287
- *
288
- * @example
289
- * ```ts
290
- * const scroller = ref<HTMLElement | null>(null)
291
- * const { didDrag } = useDragScroll(scroller)
292
- *
293
- * function onClick() {
294
- * if (didDrag()) return
295
- * // …treat as a tap
296
- * }
297
- * ```
298
- */
299
- function useDragScroll(target) {
300
- let pointerId = null;
301
- let startX = 0;
302
- let startScroll = 0;
303
- let dragged = false;
304
- function onPointerDown(event) {
305
- const element = target.value;
306
- if (!element || event.pointerType === "mouse") return;
307
- pointerId = event.pointerId;
308
- startX = event.clientX;
309
- startScroll = element.scrollLeft;
310
- dragged = false;
311
- }
312
- function onPointerMove(event) {
313
- const element = target.value;
314
- if (!element || event.pointerId !== pointerId) return;
315
- const dx = event.clientX - startX;
316
- if (!dragged && Math.abs(dx) < DRAG_THRESHOLD_PX) return;
317
- if (!dragged) {
318
- dragged = true;
319
- element.setPointerCapture(event.pointerId);
320
- }
321
- element.scrollLeft = startScroll - dx;
322
- }
323
- function onPointerUp(event) {
324
- const element = target.value;
325
- if (element?.hasPointerCapture(event.pointerId)) element.releasePointerCapture(event.pointerId);
326
- pointerId = null;
327
- }
328
- function bind(element) {
329
- element.addEventListener("pointerdown", onPointerDown);
330
- element.addEventListener("pointermove", onPointerMove);
331
- element.addEventListener("pointerup", onPointerUp);
332
- element.addEventListener("pointercancel", onPointerUp);
333
- }
334
- function unbind(element) {
335
- element.removeEventListener("pointerdown", onPointerDown);
336
- element.removeEventListener("pointermove", onPointerMove);
337
- element.removeEventListener("pointerup", onPointerUp);
338
- element.removeEventListener("pointercancel", onPointerUp);
339
- }
340
- watch(target, (element, previous) => {
341
- if (previous) unbind(previous);
342
- if (element) bind(element);
343
- }, { immediate: true });
344
- onScopeDispose(() => {
345
- if (target.value) unbind(target.value);
346
- });
347
- return { didDrag: () => dragged };
348
- }
349
- //#endregion
350
274
  //#region src/components/BaseAvatar.vue?vue&type=script&setup=true&lang.ts
351
- var _hoisted_1$47 = [
275
+ var _hoisted_1$49 = [
352
276
  "role",
353
277
  "aria-label",
354
278
  "aria-hidden"
355
279
  ];
356
- var _hoisted_2$41 = ["src"];
357
- var _hoisted_3$27 = {
280
+ var _hoisted_2$43 = ["src"];
281
+ var _hoisted_3$29 = {
358
282
  key: 1,
359
283
  class: "rk-avatar-initials"
360
284
  };
361
- var _hoisted_4$21 = {
285
+ var _hoisted_4$20 = {
362
286
  key: 2,
363
287
  viewBox: "0 0 20 20",
364
288
  class: "rk-avatar-figure",
@@ -404,7 +328,7 @@ var BaseAvatar_default = /*#__PURE__*/ _plugin_vue_export_helper_default(/* @__P
404
328
  alt: "",
405
329
  class: "rk-avatar-img",
406
330
  onError: _cache[0] || (_cache[0] = ($event) => broken.value = true)
407
- }, null, 40, _hoisted_2$41)) : __props.fallback === "initials" && initials.value ? (openBlock(), createElementBlock("span", _hoisted_3$27, toDisplayString(initials.value), 1)) : (openBlock(), createElementBlock("svg", _hoisted_4$21, [..._cache[1] || (_cache[1] = [createElementVNode("circle", {
331
+ }, null, 40, _hoisted_2$43)) : __props.fallback === "initials" && initials.value ? (openBlock(), createElementBlock("span", _hoisted_3$29, toDisplayString(initials.value), 1)) : (openBlock(), createElementBlock("svg", _hoisted_4$20, [..._cache[1] || (_cache[1] = [createElementVNode("circle", {
408
332
  cx: "10",
409
333
  cy: "6.75",
410
334
  r: "3.25",
@@ -413,7 +337,7 @@ var BaseAvatar_default = /*#__PURE__*/ _plugin_vue_export_helper_default(/* @__P
413
337
  d: "M3.75 17c0-3.05 2.8-5.25 6.25-5.25S16.25 13.95 16.25 17",
414
338
  "stroke-width": "1.5",
415
339
  "stroke-linecap": "round"
416
- }, null, -1)])]))], 10, _hoisted_1$47);
340
+ }, null, -1)])]))], 10, _hoisted_1$49);
417
341
  };
418
342
  }
419
343
  }), [["__scopeId", "data-v-47586bec"]]);
@@ -438,12 +362,12 @@ var BaseBadge_default = /* @__PURE__ */ defineComponent({
438
362
  });
439
363
  //#endregion
440
364
  //#region src/components/BaseMenu.vue?vue&type=script&setup=true&lang.ts
441
- var _hoisted_1$46 = [
365
+ var _hoisted_1$48 = [
442
366
  "aria-label",
443
367
  "aria-expanded",
444
368
  "aria-controls"
445
369
  ];
446
- var _hoisted_2$40 = ["id"];
370
+ var _hoisted_2$42 = ["id"];
447
371
  //#endregion
448
372
  //#region src/components/BaseMenu.vue
449
373
  var BaseMenu_default = /*#__PURE__*/ _plugin_vue_export_helper_default(/* @__PURE__ */ defineComponent({
@@ -512,17 +436,17 @@ var BaseMenu_default = /*#__PURE__*/ _plugin_vue_export_helper_default(/* @__PUR
512
436
  "aria-haspopup": true,
513
437
  "aria-controls": open.value ? unref(id) : void 0,
514
438
  onClick: _cache[0] || (_cache[0] = ($event) => open.value = !open.value)
515
- }, [renderSlot(_ctx.$slots, "trigger", { open: open.value }, void 0, true)], 8, _hoisted_1$46), open.value ? (openBlock(), createElementBlock("div", {
439
+ }, [renderSlot(_ctx.$slots, "trigger", { open: open.value }, void 0, true)], 8, _hoisted_1$48), open.value ? (openBlock(), createElementBlock("div", {
516
440
  key: 0,
517
441
  id: unref(id),
518
442
  ref_key: "panel",
519
443
  ref: panel,
520
444
  class: normalizeClass(["rk-menu-panel surface-overlay", `is-${__props.align}`]),
521
445
  role: "menu"
522
- }, [renderSlot(_ctx.$slots, "default", {}, void 0, true)], 10, _hoisted_2$40)) : createCommentVNode("", true)], 544);
446
+ }, [renderSlot(_ctx.$slots, "default", {}, void 0, true)], 10, _hoisted_2$42)) : createCommentVNode("", true)], 544);
523
447
  };
524
448
  }
525
- }), [["__scopeId", "data-v-ee62de72"]]);
449
+ }), [["__scopeId", "data-v-eaeecb75"]]);
526
450
  //#endregion
527
451
  //#region src/components/BaseCard.vue
528
452
  var BaseCard_default = /* @__PURE__ */ defineComponent({
@@ -644,13 +568,13 @@ function useVirtualWindow({ count, rowHeight, threshold }) {
644
568
  }
645
569
  //#endregion
646
570
  //#region src/components/BaseCombobox.vue?vue&type=script&setup=true&lang.ts
647
- var _hoisted_1$45 = ["for"];
648
- var _hoisted_2$39 = [
571
+ var _hoisted_1$47 = ["for"];
572
+ var _hoisted_2$41 = [
649
573
  "aria-label",
650
574
  "disabled",
651
575
  "onClick"
652
576
  ];
653
- var _hoisted_3$26 = [
577
+ var _hoisted_3$28 = [
654
578
  "id",
655
579
  "placeholder",
656
580
  "disabled",
@@ -659,13 +583,13 @@ var _hoisted_3$26 = [
659
583
  "aria-invalid",
660
584
  "aria-describedby"
661
585
  ];
662
- var _hoisted_4$20 = ["disabled"];
663
- var _hoisted_5$13 = [
586
+ var _hoisted_4$19 = ["disabled"];
587
+ var _hoisted_5$11 = [
664
588
  "aria-label",
665
589
  "aria-multiselectable",
666
590
  "aria-busy"
667
591
  ];
668
- var _hoisted_6$8 = [
592
+ var _hoisted_6$7 = [
669
593
  "id",
670
594
  "aria-selected",
671
595
  "aria-setsize",
@@ -881,7 +805,7 @@ var BaseCombobox_default = /*#__PURE__*/ _plugin_vue_export_helper_default(/* @_
881
805
  createElementVNode("label", {
882
806
  for: unref(id),
883
807
  class: "rk-combo-label"
884
- }, toDisplayString(__props.label), 9, _hoisted_1$45),
808
+ }, toDisplayString(__props.label), 9, _hoisted_1$47),
885
809
  createElementVNode("div", { class: normalizeClass(["rk-combo-field", multiple.value ? "is-multiple control" : ""]) }, [
886
810
  (openBlock(true), createElementBlock(Fragment, null, renderList(multiple.value ? chosenOptions.value : [], (option) => {
887
811
  return openBlock(), createElementBlock("span", {
@@ -894,7 +818,7 @@ var BaseCombobox_default = /*#__PURE__*/ _plugin_vue_export_helper_default(/* @_
894
818
  "aria-label": __props.removeLabel(option.label),
895
819
  disabled: __props.disabled,
896
820
  onClick: ($event) => remove(option.value)
897
- }, " × ", 8, _hoisted_2$39)) : createCommentVNode("", true)]);
821
+ }, " × ", 8, _hoisted_2$41)) : createCommentVNode("", true)]);
898
822
  }), 128)),
899
823
  withDirectives(createElementVNode("input", {
900
824
  id: unref(id),
@@ -913,7 +837,7 @@ var BaseCombobox_default = /*#__PURE__*/ _plugin_vue_export_helper_default(/* @_
913
837
  "aria-describedby": describedBy.value,
914
838
  onKeydown,
915
839
  onFocus: _cache[1] || (_cache[1] = ($event) => open.value = true)
916
- }, null, 42, _hoisted_3$26), [[vModelText, text.value]]),
840
+ }, null, 42, _hoisted_3$28), [[vModelText, text.value]]),
917
841
  createElementVNode("button", {
918
842
  type: "button",
919
843
  class: "rk-combo-toggle",
@@ -921,7 +845,7 @@ var BaseCombobox_default = /*#__PURE__*/ _plugin_vue_export_helper_default(/* @_
921
845
  "aria-hidden": "true",
922
846
  disabled: __props.disabled,
923
847
  onClick: _cache[2] || (_cache[2] = ($event) => open.value = !open.value)
924
- }, " ▾ ", 8, _hoisted_4$20)
848
+ }, " ▾ ", 8, _hoisted_4$19)
925
849
  ], 2),
926
850
  withDirectives(createElementVNode("ul", {
927
851
  id: listId,
@@ -954,7 +878,7 @@ var BaseCombobox_default = /*#__PURE__*/ _plugin_vue_export_helper_default(/* @_
954
878
  "aria-posinset": row.index + 1,
955
879
  onPointerdown: withModifiers(($event) => choose(row.option), ["prevent"]),
956
880
  onPointermove: ($event) => highlighted.value = row.index
957
- }, toDisplayString(row.option.label), 47, _hoisted_6$8);
881
+ }, toDisplayString(row.option.label), 47, _hoisted_6$7);
958
882
  }), 128)),
959
883
  unref(padBottom) > 0 ? (openBlock(), createElementBlock("li", {
960
884
  key: 1,
@@ -968,7 +892,7 @@ var BaseCombobox_default = /*#__PURE__*/ _plugin_vue_export_helper_default(/* @_
968
892
  height: "0.75rem"
969
893
  });
970
894
  }), 64))])])) : matches.value.length === 0 ? (openBlock(), createElementBlock("li", _hoisted_10$3, toDisplayString(__props.emptyLabel), 1)) : createCommentVNode("", true)
971
- ], 40, _hoisted_5$13), [[vShow, open.value]]),
895
+ ], 40, _hoisted_5$11), [[vShow, open.value]]),
972
896
  __props.error ? (openBlock(), createElementBlock("p", {
973
897
  key: 0,
974
898
  id: errorId,
@@ -981,16 +905,16 @@ var BaseCombobox_default = /*#__PURE__*/ _plugin_vue_export_helper_default(/* @_
981
905
  ], 512);
982
906
  };
983
907
  }
984
- }), [["__scopeId", "data-v-006740dc"]]);
908
+ }), [["__scopeId", "data-v-0ae3b425"]]);
985
909
  //#endregion
986
910
  //#region src/components/BaseRadioGroup.vue?vue&type=script&setup=true&lang.ts
987
- var _hoisted_1$44 = ["aria-describedby"];
988
- var _hoisted_2$38 = [
911
+ var _hoisted_1$46 = ["aria-describedby"];
912
+ var _hoisted_2$40 = [
989
913
  "name",
990
914
  "value",
991
915
  "disabled"
992
916
  ];
993
- var _hoisted_3$25 = { class: "text-ink text-sm" };
917
+ var _hoisted_3$27 = { class: "text-ink text-sm" };
994
918
  //#endregion
995
919
  //#region src/components/BaseRadioGroup.vue
996
920
  var BaseRadioGroup_default = /* @__PURE__ */ defineComponent({
@@ -1034,7 +958,7 @@ var BaseRadioGroup_default = /* @__PURE__ */ defineComponent({
1034
958
  value: option.value,
1035
959
  disabled: option.disabled,
1036
960
  class: "accent-primary focus-visible:outline-primary size-4 shrink-0 focus-visible:outline-2 focus-visible:outline-offset-2"
1037
- }, null, 8, _hoisted_2$38), [[vModelRadio, unref(model)]]), createElementVNode("span", _hoisted_3$25, toDisplayString(option.label), 1)], 2);
961
+ }, null, 8, _hoisted_2$40), [[vModelRadio, unref(model)]]), createElementVNode("span", _hoisted_3$27, toDisplayString(option.label), 1)], 2);
1038
962
  }), 128)),
1039
963
  __props.error ? (openBlock(), createElementBlock("p", {
1040
964
  key: 0,
@@ -1045,24 +969,24 @@ var BaseRadioGroup_default = /* @__PURE__ */ defineComponent({
1045
969
  id: hintId,
1046
970
  class: "text-ink-soft text-xs"
1047
971
  }, toDisplayString(__props.hint), 1)) : createCommentVNode("", true)
1048
- ], 8, _hoisted_1$44);
972
+ ], 8, _hoisted_1$46);
1049
973
  };
1050
974
  }
1051
975
  });
1052
976
  //#endregion
1053
977
  //#region src/components/BaseSelect.vue?vue&type=script&setup=true&lang.ts
1054
- var _hoisted_1$43 = { class: "relative" };
1055
- var _hoisted_2$37 = [
978
+ var _hoisted_1$45 = { class: "relative" };
979
+ var _hoisted_2$39 = [
1056
980
  "id",
1057
981
  "aria-invalid",
1058
982
  "aria-describedby"
1059
983
  ];
1060
- var _hoisted_3$24 = {
984
+ var _hoisted_3$26 = {
1061
985
  key: 0,
1062
986
  value: void 0,
1063
987
  disabled: ""
1064
988
  };
1065
- var _hoisted_4$19 = ["value", "disabled"];
989
+ var _hoisted_4$18 = ["value", "disabled"];
1066
990
  //#endregion
1067
991
  //#region src/components/BaseSelect.vue
1068
992
  var BaseSelect_default = /* @__PURE__ */ defineComponent({
@@ -1098,7 +1022,7 @@ var BaseSelect_default = /* @__PURE__ */ defineComponent({
1098
1022
  "label-hidden": __props.labelHidden,
1099
1023
  size: __props.size
1100
1024
  }, {
1101
- default: withCtx(({ id, describedBy, invalid }) => [createElementVNode("div", _hoisted_1$43, [withDirectives(createElementVNode("select", {
1025
+ default: withCtx(({ id, describedBy, invalid }) => [createElementVNode("div", _hoisted_1$45, [withDirectives(createElementVNode("select", {
1102
1026
  id,
1103
1027
  "onUpdate:modelValue": _cache[0] || (_cache[0] = ($event) => model.value = $event),
1104
1028
  "aria-invalid": invalid,
@@ -1108,13 +1032,13 @@ var BaseSelect_default = /* @__PURE__ */ defineComponent({
1108
1032
  __props.variant === "unstyled" ? "" : SIZE_CLASS[__props.size],
1109
1033
  __props.variant !== "unstyled" && invalid ? "border-negative" : ""
1110
1034
  ]])
1111
- }, [__props.placeholder ? (openBlock(), createElementBlock("option", _hoisted_3$24, toDisplayString(__props.placeholder), 1)) : createCommentVNode("", true), (openBlock(true), createElementBlock(Fragment, null, renderList(__props.options, (option) => {
1035
+ }, [__props.placeholder ? (openBlock(), createElementBlock("option", _hoisted_3$26, toDisplayString(__props.placeholder), 1)) : createCommentVNode("", true), (openBlock(true), createElementBlock(Fragment, null, renderList(__props.options, (option) => {
1112
1036
  return openBlock(), createElementBlock("option", {
1113
1037
  key: option.value,
1114
1038
  value: option.value,
1115
1039
  disabled: option.disabled
1116
- }, toDisplayString(option.label), 9, _hoisted_4$19);
1117
- }), 128))], 10, _hoisted_2$37), [[vModelSelect, model.value]]), createVNode(unref(ChevronDown), {
1040
+ }, toDisplayString(option.label), 9, _hoisted_4$18);
1041
+ }), 128))], 10, _hoisted_2$39), [[vModelSelect, model.value]]), createVNode(unref(ChevronDown), {
1118
1042
  class: "text-ink-soft pointer-events-none absolute top-1/2 right-3 size-4 -translate-y-1/2",
1119
1043
  "aria-hidden": "true"
1120
1044
  })])]),
@@ -1131,11 +1055,11 @@ var BaseSelect_default = /* @__PURE__ */ defineComponent({
1131
1055
  });
1132
1056
  //#endregion
1133
1057
  //#region src/components/BaseSlider.vue?vue&type=script&setup=true&lang.ts
1134
- var _hoisted_1$42 = { class: "rk-slider" };
1135
- var _hoisted_2$36 = { class: "rk-slider-head" };
1136
- var _hoisted_3$23 = ["for"];
1137
- var _hoisted_4$18 = ["for"];
1138
- var _hoisted_5$12 = [
1058
+ var _hoisted_1$44 = { class: "rk-slider" };
1059
+ var _hoisted_2$38 = { class: "rk-slider-head" };
1060
+ var _hoisted_3$25 = ["for"];
1061
+ var _hoisted_4$17 = ["for"];
1062
+ var _hoisted_5$10 = [
1139
1063
  "id",
1140
1064
  "min",
1141
1065
  "max",
@@ -1179,15 +1103,15 @@ var BaseSlider_default = /*#__PURE__*/ _plugin_vue_export_helper_default(/* @__P
1179
1103
  return span <= 0 ? 0 : (model.value - __props.min) / span * 100;
1180
1104
  });
1181
1105
  return (_ctx, _cache) => {
1182
- return openBlock(), createElementBlock("div", _hoisted_1$42, [
1183
- createElementVNode("div", _hoisted_2$36, [createElementVNode("label", {
1106
+ return openBlock(), createElementBlock("div", _hoisted_1$44, [
1107
+ createElementVNode("div", _hoisted_2$38, [createElementVNode("label", {
1184
1108
  for: unref(id),
1185
1109
  class: "rk-slider-label"
1186
- }, toDisplayString(__props.label), 9, _hoisted_3$23), __props.showValue ? (openBlock(), createElementBlock("output", {
1110
+ }, toDisplayString(__props.label), 9, _hoisted_3$25), __props.showValue ? (openBlock(), createElementBlock("output", {
1187
1111
  key: 0,
1188
1112
  for: unref(id),
1189
1113
  class: "rk-slider-value"
1190
- }, toDisplayString(text.value), 9, _hoisted_4$18)) : createCommentVNode("", true)]),
1114
+ }, toDisplayString(text.value), 9, _hoisted_4$17)) : createCommentVNode("", true)]),
1191
1115
  withDirectives(createElementVNode("input", {
1192
1116
  id: unref(id),
1193
1117
  "onUpdate:modelValue": _cache[0] || (_cache[0] = ($event) => model.value = $event),
@@ -1200,7 +1124,7 @@ var BaseSlider_default = /*#__PURE__*/ _plugin_vue_export_helper_default(/* @__P
1200
1124
  "aria-valuetext": text.value,
1201
1125
  "aria-describedby": __props.hint ? hintId : void 0,
1202
1126
  style: normalizeStyle({ "--rk-slider-filled": `${filled.value}%` })
1203
- }, null, 12, _hoisted_5$12), [[
1127
+ }, null, 12, _hoisted_5$10), [[
1204
1128
  vModelText,
1205
1129
  model.value,
1206
1130
  void 0,
@@ -1214,11 +1138,11 @@ var BaseSlider_default = /*#__PURE__*/ _plugin_vue_export_helper_default(/* @__P
1214
1138
  ]);
1215
1139
  };
1216
1140
  }
1217
- }), [["__scopeId", "data-v-7fa2769b"]]);
1141
+ }), [["__scopeId", "data-v-8f8ae87b"]]);
1218
1142
  //#endregion
1219
1143
  //#region src/components/NumberInput.vue?vue&type=script&setup=true&lang.ts
1220
- var _hoisted_1$41 = ["aria-label", "disabled"];
1221
- var _hoisted_2$35 = [
1144
+ var _hoisted_1$43 = ["aria-label", "disabled"];
1145
+ var _hoisted_2$37 = [
1222
1146
  "id",
1223
1147
  "value",
1224
1148
  "aria-valuenow",
@@ -1228,7 +1152,7 @@ var _hoisted_2$35 = [
1228
1152
  "aria-describedby",
1229
1153
  "disabled"
1230
1154
  ];
1231
- var _hoisted_3$22 = ["aria-label", "disabled"];
1155
+ var _hoisted_3$24 = ["aria-label", "disabled"];
1232
1156
  //#endregion
1233
1157
  //#region src/components/NumberInput.vue
1234
1158
  var NumberInput_default = /*#__PURE__*/ _plugin_vue_export_helper_default(/* @__PURE__ */ defineComponent({
@@ -1331,7 +1255,7 @@ var NumberInput_default = /*#__PURE__*/ _plugin_vue_export_helper_default(/* @__
1331
1255
  }, [createVNode(unref(Minus), {
1332
1256
  class: "size-4",
1333
1257
  "aria-hidden": "true"
1334
- })], 8, _hoisted_1$41),
1258
+ })], 8, _hoisted_1$43),
1335
1259
  createElementVNode("input", {
1336
1260
  id,
1337
1261
  value: draft.value,
@@ -1349,7 +1273,7 @@ var NumberInput_default = /*#__PURE__*/ _plugin_vue_export_helper_default(/* @__
1349
1273
  onInput,
1350
1274
  onBlur: commit,
1351
1275
  onKeydown
1352
- }, null, 40, _hoisted_2$35),
1276
+ }, null, 40, _hoisted_2$37),
1353
1277
  createElementVNode("button", {
1354
1278
  type: "button",
1355
1279
  class: "rk-number-step focus-ring",
@@ -1360,7 +1284,7 @@ var NumberInput_default = /*#__PURE__*/ _plugin_vue_export_helper_default(/* @__
1360
1284
  }, [createVNode(unref(Plus), {
1361
1285
  class: "size-4",
1362
1286
  "aria-hidden": "true"
1363
- })], 8, _hoisted_3$22)
1287
+ })], 8, _hoisted_3$24)
1364
1288
  ], 2)]),
1365
1289
  _: 1
1366
1290
  }, 8, [
@@ -1375,7 +1299,7 @@ var NumberInput_default = /*#__PURE__*/ _plugin_vue_export_helper_default(/* @__
1375
1299
  }), [["__scopeId", "data-v-082bd3d7"]]);
1376
1300
  //#endregion
1377
1301
  //#region src/components/SliderField.vue?vue&type=script&setup=true&lang.ts
1378
- var _hoisted_1$40 = { class: "rk-slider-field" };
1302
+ var _hoisted_1$42 = { class: "rk-slider-field" };
1379
1303
  //#endregion
1380
1304
  //#region src/components/SliderField.vue
1381
1305
  var SliderField_default = /*#__PURE__*/ _plugin_vue_export_helper_default(/* @__PURE__ */ defineComponent({
@@ -1416,7 +1340,7 @@ var SliderField_default = /*#__PURE__*/ _plugin_vue_export_helper_default(/* @__
1416
1340
  }
1417
1341
  });
1418
1342
  return (_ctx, _cache) => {
1419
- return openBlock(), createElementBlock("div", _hoisted_1$40, [createVNode(BaseSlider_default, {
1343
+ return openBlock(), createElementBlock("div", _hoisted_1$42, [createVNode(BaseSlider_default, {
1420
1344
  modelValue: model.value,
1421
1345
  "onUpdate:modelValue": _cache[0] || (_cache[0] = ($event) => model.value = $event),
1422
1346
  label: __props.label,
@@ -1464,11 +1388,11 @@ var SliderField_default = /*#__PURE__*/ _plugin_vue_export_helper_default(/* @__
1464
1388
  }), [["__scopeId", "data-v-6ec3163a"]]);
1465
1389
  //#endregion
1466
1390
  //#region src/components/BaseSpinner.vue?vue&type=script&setup=true&lang.ts
1467
- var _hoisted_1$39 = {
1391
+ var _hoisted_1$41 = {
1468
1392
  class: "rk-spin-wrap",
1469
1393
  role: "status"
1470
1394
  };
1471
- var _hoisted_2$34 = { class: "rk-spin-label" };
1395
+ var _hoisted_2$36 = { class: "rk-spin-label" };
1472
1396
  //#endregion
1473
1397
  //#region src/components/BaseSpinner.vue
1474
1398
  var BaseSpinner_default = /*#__PURE__*/ _plugin_vue_export_helper_default(/* @__PURE__ */ defineComponent({
@@ -1496,26 +1420,26 @@ var BaseSpinner_default = /*#__PURE__*/ _plugin_vue_export_helper_default(/* @__
1496
1420
  lg: "2.5rem"
1497
1421
  };
1498
1422
  return (_ctx, _cache) => {
1499
- return openBlock(), createElementBlock("span", _hoisted_1$39, [createElementVNode("span", {
1423
+ return openBlock(), createElementBlock("span", _hoisted_1$41, [createElementVNode("span", {
1500
1424
  class: "rk-spin",
1501
1425
  style: normalizeStyle({
1502
1426
  width: SIZES[__props.size],
1503
1427
  height: SIZES[__props.size]
1504
1428
  }),
1505
1429
  "aria-hidden": "true"
1506
- }, null, 4), createElementVNode("span", _hoisted_2$34, toDisplayString(__props.label), 1)]);
1430
+ }, null, 4), createElementVNode("span", _hoisted_2$36, toDisplayString(__props.label), 1)]);
1507
1431
  };
1508
1432
  }
1509
1433
  }), [["__scopeId", "data-v-842da62c"]]);
1510
1434
  //#endregion
1511
1435
  //#region src/components/BaseSwitch.vue?vue&type=script&setup=true&lang.ts
1512
- var _hoisted_1$38 = { class: "flex items-center justify-between gap-4" };
1513
- var _hoisted_2$33 = {
1436
+ var _hoisted_1$40 = { class: "flex items-center justify-between gap-4" };
1437
+ var _hoisted_2$35 = {
1514
1438
  key: 0,
1515
1439
  class: "min-w-0"
1516
1440
  };
1517
- var _hoisted_3$21 = ["id"];
1518
- var _hoisted_4$17 = [
1441
+ var _hoisted_3$23 = ["id"];
1442
+ var _hoisted_4$16 = [
1519
1443
  "aria-checked",
1520
1444
  "aria-labelledby",
1521
1445
  "aria-label",
@@ -1554,10 +1478,10 @@ var BaseSwitch_default = /*#__PURE__*/ _plugin_vue_export_helper_default(/* @__P
1554
1478
  if (!__props.disabled) model.value = !model.value;
1555
1479
  }
1556
1480
  return (_ctx, _cache) => {
1557
- return openBlock(), createElementBlock("div", _hoisted_1$38, [!__props.labelHidden ? (openBlock(), createElementBlock("span", _hoisted_2$33, [createElementVNode("span", {
1481
+ return openBlock(), createElementBlock("div", _hoisted_1$40, [!__props.labelHidden ? (openBlock(), createElementBlock("span", _hoisted_2$35, [createElementVNode("span", {
1558
1482
  id: unref(id),
1559
1483
  class: "text-ink block text-sm"
1560
- }, toDisplayString(__props.label), 9, _hoisted_3$21), __props.hint ? (openBlock(), createElementBlock("span", {
1484
+ }, toDisplayString(__props.label), 9, _hoisted_3$23), __props.hint ? (openBlock(), createElementBlock("span", {
1561
1485
  key: 0,
1562
1486
  id: hintId,
1563
1487
  class: "text-ink-soft mt-0.5 block text-xs"
@@ -1574,17 +1498,16 @@ var BaseSwitch_default = /*#__PURE__*/ _plugin_vue_export_helper_default(/* @__P
1574
1498
  }, [..._cache[0] || (_cache[0] = [createElementVNode("span", {
1575
1499
  class: "rk-switch-knob",
1576
1500
  "aria-hidden": "true"
1577
- }, null, -1)])], 10, _hoisted_4$17)]);
1501
+ }, null, -1)])], 10, _hoisted_4$16)]);
1578
1502
  };
1579
1503
  }
1580
- }), [["__scopeId", "data-v-3f4400a0"]]);
1504
+ }), [["__scopeId", "data-v-d90e1aa6"]]);
1581
1505
  //#endregion
1582
1506
  //#region src/components/BaseTable.vue?vue&type=script&setup=true&lang.ts
1583
- var _hoisted_1$37 = ["aria-label"];
1584
- var _hoisted_2$32 = { class: "rk-table" };
1585
- var _hoisted_3$20 = { key: 0 };
1586
- var _hoisted_4$16 = { key: 1 };
1587
- var _hoisted_5$11 = ["colspan"];
1507
+ var _hoisted_1$39 = { class: "rk-table" };
1508
+ var _hoisted_2$34 = { key: 0 };
1509
+ var _hoisted_3$22 = { key: 1 };
1510
+ var _hoisted_4$15 = ["colspan"];
1588
1511
  //#endregion
1589
1512
  //#region src/components/BaseTable.vue
1590
1513
  var BaseTable_default = /*#__PURE__*/ _plugin_vue_export_helper_default(/* @__PURE__ */ defineComponent({
@@ -1602,41 +1525,43 @@ var BaseTable_default = /*#__PURE__*/ _plugin_vue_export_helper_default(/* @__PU
1602
1525
  setup(__props) {
1603
1526
  const keyFor = (row, index) => __props.rowKey ? String(row[__props.rowKey]) : index;
1604
1527
  return (_ctx, _cache) => {
1605
- return openBlock(), createElementBlock("div", {
1606
- class: "rk-table-scroll",
1607
- tabindex: "0",
1608
- role: "region",
1609
- "aria-label": __props.caption
1610
- }, [createElementVNode("table", _hoisted_2$32, [
1611
- createElementVNode("caption", { class: normalizeClass(__props.captionHidden ? "rk-table-caption-hidden" : "rk-table-caption") }, toDisplayString(__props.caption), 3),
1612
- createElementVNode("thead", null, [createElementVNode("tr", null, [(openBlock(true), createElementBlock(Fragment, null, renderList(__props.columns, (column) => {
1613
- return openBlock(), createElementBlock("th", {
1614
- key: column.key,
1615
- scope: "col",
1616
- class: normalizeClass([column.align && `is-${column.align}`, column.nowrap && "is-nowrap"])
1617
- }, toDisplayString(column.label), 3);
1618
- }), 128))])]),
1619
- __props.rows.length > 0 ? (openBlock(), createElementBlock("tbody", _hoisted_3$20, [(openBlock(true), createElementBlock(Fragment, null, renderList(__props.rows, (row, index) => {
1620
- return openBlock(), createElementBlock("tr", { key: keyFor(row, index) }, [(openBlock(true), createElementBlock(Fragment, null, renderList(__props.columns, (column) => {
1621
- return openBlock(), createElementBlock("td", {
1528
+ return openBlock(), createBlock(ScrollArea_default, {
1529
+ axis: "x",
1530
+ label: __props.caption,
1531
+ class: "rk-table-scroll"
1532
+ }, {
1533
+ default: withCtx(() => [createElementVNode("table", _hoisted_1$39, [
1534
+ createElementVNode("caption", { class: normalizeClass(__props.captionHidden ? "rk-table-caption-hidden" : "rk-table-caption") }, toDisplayString(__props.caption), 3),
1535
+ createElementVNode("thead", null, [createElementVNode("tr", null, [(openBlock(true), createElementBlock(Fragment, null, renderList(__props.columns, (column) => {
1536
+ return openBlock(), createElementBlock("th", {
1622
1537
  key: column.key,
1538
+ scope: "col",
1623
1539
  class: normalizeClass([column.align && `is-${column.align}`, column.nowrap && "is-nowrap"])
1624
- }, [renderSlot(_ctx.$slots, column.key, {
1625
- row,
1626
- value: row[column.key]
1627
- }, () => [createTextVNode(toDisplayString(row[column.key]), 1)], true)], 2);
1628
- }), 128))]);
1629
- }), 128))])) : (openBlock(), createElementBlock("tbody", _hoisted_4$16, [createElementVNode("tr", null, [createElementVNode("td", {
1630
- colspan: __props.columns.length,
1631
- class: "rk-table-empty"
1632
- }, [renderSlot(_ctx.$slots, "empty", {}, void 0, true)], 8, _hoisted_5$11)])]))
1633
- ])], 8, _hoisted_1$37);
1540
+ }, toDisplayString(column.label), 3);
1541
+ }), 128))])]),
1542
+ __props.rows.length > 0 ? (openBlock(), createElementBlock("tbody", _hoisted_2$34, [(openBlock(true), createElementBlock(Fragment, null, renderList(__props.rows, (row, index) => {
1543
+ return openBlock(), createElementBlock("tr", { key: keyFor(row, index) }, [(openBlock(true), createElementBlock(Fragment, null, renderList(__props.columns, (column) => {
1544
+ return openBlock(), createElementBlock("td", {
1545
+ key: column.key,
1546
+ class: normalizeClass([column.align && `is-${column.align}`, column.nowrap && "is-nowrap"])
1547
+ }, [renderSlot(_ctx.$slots, column.key, {
1548
+ row,
1549
+ value: row[column.key]
1550
+ }, () => [createTextVNode(toDisplayString(row[column.key]), 1)], true)], 2);
1551
+ }), 128))]);
1552
+ }), 128))])) : (openBlock(), createElementBlock("tbody", _hoisted_3$22, [createElementVNode("tr", null, [createElementVNode("td", {
1553
+ colspan: __props.columns.length,
1554
+ class: "rk-table-empty"
1555
+ }, [renderSlot(_ctx.$slots, "empty", {}, void 0, true)], 8, _hoisted_4$15)])]))
1556
+ ])]),
1557
+ _: 3
1558
+ }, 8, ["label"]);
1634
1559
  };
1635
1560
  }
1636
- }), [["__scopeId", "data-v-ab10e9fa"]]);
1561
+ }), [["__scopeId", "data-v-cc1197ef"]]);
1637
1562
  //#endregion
1638
1563
  //#region src/components/BaseTextarea.vue?vue&type=script&setup=true&lang.ts
1639
- var _hoisted_1$36 = [
1564
+ var _hoisted_1$38 = [
1640
1565
  "id",
1641
1566
  "rows",
1642
1567
  "aria-invalid",
@@ -1682,7 +1607,7 @@ var BaseTextarea_default = /* @__PURE__ */ defineComponent({
1682
1607
  __props.variant === "unstyled" ? "" : "control text-ink rounded-card focus-visible:outline-primary resize-y px-3 py-2 leading-relaxed focus-visible:outline-2 focus-visible:outline-offset-1",
1683
1608
  "text-base",
1684
1609
  __props.variant !== "unstyled" && invalid ? "border-negative" : ""
1685
- ] }), null, 16, _hoisted_1$36), [[vModelText, unref(model)]])]),
1610
+ ] }), null, 16, _hoisted_1$38), [[vModelText, unref(model)]])]),
1686
1611
  _: 1
1687
1612
  }, 8, [
1688
1613
  "label",
@@ -1696,17 +1621,17 @@ var BaseTextarea_default = /* @__PURE__ */ defineComponent({
1696
1621
  });
1697
1622
  //#endregion
1698
1623
  //#region src/components/EmptyState.vue?vue&type=script&setup=true&lang.ts
1699
- var _hoisted_1$35 = { class: "flex flex-col items-center gap-3 px-6 py-10 text-center" };
1700
- var _hoisted_2$31 = {
1624
+ var _hoisted_1$37 = { class: "flex flex-col items-center gap-3 px-6 py-10 text-center" };
1625
+ var _hoisted_2$33 = {
1701
1626
  key: 0,
1702
1627
  class: "bg-muted text-primary rounded-card flex size-12 items-center justify-center"
1703
1628
  };
1704
- var _hoisted_3$19 = { class: "text-ink text-base font-semibold" };
1705
- var _hoisted_4$15 = {
1629
+ var _hoisted_3$21 = { class: "text-ink text-base font-semibold" };
1630
+ var _hoisted_4$14 = {
1706
1631
  key: 1,
1707
1632
  class: "text-ink-soft max-w-[36ch] text-sm"
1708
1633
  };
1709
- var _hoisted_5$10 = {
1634
+ var _hoisted_5$9 = {
1710
1635
  key: 2,
1711
1636
  class: "mt-2 flex w-full flex-col gap-2"
1712
1637
  };
@@ -1728,11 +1653,11 @@ var EmptyState_default = /* @__PURE__ */ defineComponent({
1728
1653
  * goes — the button that creates the first one.
1729
1654
  */
1730
1655
  return (_ctx, _cache) => {
1731
- return openBlock(), createElementBlock("div", _hoisted_1$35, [
1732
- _ctx.$slots.icon ? (openBlock(), createElementBlock("div", _hoisted_2$31, [renderSlot(_ctx.$slots, "icon")])) : createCommentVNode("", true),
1733
- createElementVNode("h3", _hoisted_3$19, toDisplayString(__props.title), 1),
1734
- __props.description ? (openBlock(), createElementBlock("p", _hoisted_4$15, toDisplayString(__props.description), 1)) : createCommentVNode("", true),
1735
- _ctx.$slots.action ? (openBlock(), createElementBlock("div", _hoisted_5$10, [renderSlot(_ctx.$slots, "action")])) : createCommentVNode("", true)
1656
+ return openBlock(), createElementBlock("div", _hoisted_1$37, [
1657
+ _ctx.$slots.icon ? (openBlock(), createElementBlock("div", _hoisted_2$33, [renderSlot(_ctx.$slots, "icon")])) : createCommentVNode("", true),
1658
+ createElementVNode("h3", _hoisted_3$21, toDisplayString(__props.title), 1),
1659
+ __props.description ? (openBlock(), createElementBlock("p", _hoisted_4$14, toDisplayString(__props.description), 1)) : createCommentVNode("", true),
1660
+ _ctx.$slots.action ? (openBlock(), createElementBlock("div", _hoisted_5$9, [renderSlot(_ctx.$slots, "action")])) : createCommentVNode("", true)
1736
1661
  ]);
1737
1662
  };
1738
1663
  }
@@ -1799,11 +1724,11 @@ var PageContainer_default = /* @__PURE__ */ defineComponent({
1799
1724
  });
1800
1725
  //#endregion
1801
1726
  //#region src/components/PageHeader.vue?vue&type=script&setup=true&lang.ts
1802
- var _hoisted_1$34 = { class: "grid h-12 shrink-0 grid-cols-[2.5rem_1fr_2.5rem] items-center" };
1803
- var _hoisted_2$30 = { class: "justify-self-start" };
1804
- var _hoisted_3$18 = { class: "text-ink flex min-w-0 justify-center text-base font-semibold tabular-nums" };
1805
- var _hoisted_4$14 = { class: "truncate" };
1806
- var _hoisted_5$9 = { class: "justify-self-end" };
1727
+ var _hoisted_1$36 = { class: "grid h-12 shrink-0 grid-cols-[2.5rem_1fr_2.5rem] items-center" };
1728
+ var _hoisted_2$32 = { class: "justify-self-start" };
1729
+ var _hoisted_3$20 = { class: "text-ink flex min-w-0 justify-center text-base font-semibold tabular-nums" };
1730
+ var _hoisted_4$13 = { class: "truncate" };
1731
+ var _hoisted_5$8 = { class: "justify-self-end" };
1807
1732
  //#endregion
1808
1733
  //#region src/components/PageHeader.vue
1809
1734
  var PageHeader_default = /* @__PURE__ */ defineComponent({
@@ -1820,17 +1745,17 @@ var PageHeader_default = /* @__PURE__ */ defineComponent({
1820
1745
  * each other.
1821
1746
  */
1822
1747
  return (_ctx, _cache) => {
1823
- return openBlock(), createElementBlock("header", _hoisted_1$34, [
1824
- createElementVNode("div", _hoisted_2$30, [renderSlot(_ctx.$slots, "left")]),
1825
- createElementVNode("h1", _hoisted_3$18, [renderSlot(_ctx.$slots, "title", {}, () => [createElementVNode("span", _hoisted_4$14, toDisplayString(__props.title), 1)])]),
1826
- createElementVNode("div", _hoisted_5$9, [renderSlot(_ctx.$slots, "right")])
1748
+ return openBlock(), createElementBlock("header", _hoisted_1$36, [
1749
+ createElementVNode("div", _hoisted_2$32, [renderSlot(_ctx.$slots, "left")]),
1750
+ createElementVNode("h1", _hoisted_3$20, [renderSlot(_ctx.$slots, "title", {}, () => [createElementVNode("span", _hoisted_4$13, toDisplayString(__props.title), 1)])]),
1751
+ createElementVNode("div", _hoisted_5$8, [renderSlot(_ctx.$slots, "right")])
1827
1752
  ]);
1828
1753
  };
1829
1754
  }
1830
1755
  });
1831
1756
  //#endregion
1832
1757
  //#region src/components/ProgressBar.vue?vue&type=script&setup=true&lang.ts
1833
- var _hoisted_1$33 = ["aria-valuenow", "aria-label"];
1758
+ var _hoisted_1$35 = ["aria-valuenow", "aria-label"];
1834
1759
  //#endregion
1835
1760
  //#region src/components/ProgressBar.vue
1836
1761
  var ProgressBar_default = /* @__PURE__ */ defineComponent({
@@ -1862,24 +1787,24 @@ var ProgressBar_default = /* @__PURE__ */ defineComponent({
1862
1787
  }, [createElementVNode("div", {
1863
1788
  class: "bg-primary h-full rounded-full transition-[width] duration-700 ease-out",
1864
1789
  style: normalizeStyle({ width: `${portion.value}%` })
1865
- }, null, 4)], 10, _hoisted_1$33);
1790
+ }, null, 4)], 10, _hoisted_1$35);
1866
1791
  };
1867
1792
  }
1868
1793
  });
1869
1794
  //#endregion
1870
1795
  //#region src/components/PriceCard.vue?vue&type=script&setup=true&lang.ts
1871
- var _hoisted_1$32 = {
1796
+ var _hoisted_1$34 = {
1872
1797
  key: 0,
1873
1798
  class: "bg-primary rounded-cell text-on-primary absolute -top-3 left-7 px-3 py-1 text-[0.7rem] font-semibold"
1874
1799
  };
1875
- var _hoisted_2$29 = { class: "flex items-start justify-between gap-4" };
1876
- var _hoisted_3$17 = { class: "text-ink mt-5 text-lg font-semibold" };
1877
- var _hoisted_4$13 = {
1800
+ var _hoisted_2$31 = { class: "flex items-start justify-between gap-4" };
1801
+ var _hoisted_3$19 = { class: "text-ink mt-5 text-lg font-semibold" };
1802
+ var _hoisted_4$12 = {
1878
1803
  key: 1,
1879
1804
  class: "text-ink-soft mt-1.5 text-sm leading-relaxed"
1880
1805
  };
1881
- var _hoisted_5$8 = { class: "mt-6 flex items-baseline gap-1.5" };
1882
- var _hoisted_6$7 = { class: "text-ink text-3xl font-semibold tracking-tight tabular-nums" };
1806
+ var _hoisted_5$7 = { class: "mt-6 flex items-baseline gap-1.5" };
1807
+ var _hoisted_6$6 = { class: "text-ink text-3xl font-semibold tracking-tight tabular-nums" };
1883
1808
  var _hoisted_7$3 = {
1884
1809
  key: 0,
1885
1810
  class: "text-ink-soft text-sm"
@@ -1943,17 +1868,17 @@ var PriceCard_default = /* @__PURE__ */ defineComponent({
1943
1868
  const palette = computed(() => TONE[__props.tone]);
1944
1869
  return (_ctx, _cache) => {
1945
1870
  return openBlock(), createElementBlock("article", { class: normalizeClass(["surface rounded-card ease-standard relative flex h-full flex-col p-7 transition-[border-color,box-shadow,transform] duration-(--duration-slower) hover:[--surface-border-color:color-mix(in_oklab,var(--color-primary)_60%,transparent)] hover:[--surface-shadow:var(--shadow-raised)] sm:p-8", [palette.value.ring, __props.recommended ? "[--surface-shadow:var(--shadow-raised)]" : "hover:-translate-y-0.5"]]) }, [
1946
- __props.badge && __props.recommended ? (openBlock(), createElementBlock("span", _hoisted_1$32, toDisplayString(__props.badge), 1)) : createCommentVNode("", true),
1947
- createElementVNode("div", _hoisted_2$29, [_ctx.$slots.icon ? (openBlock(), createElementBlock("span", {
1871
+ __props.badge && __props.recommended ? (openBlock(), createElementBlock("span", _hoisted_1$34, toDisplayString(__props.badge), 1)) : createCommentVNode("", true),
1872
+ createElementVNode("div", _hoisted_2$31, [_ctx.$slots.icon ? (openBlock(), createElementBlock("span", {
1948
1873
  key: 0,
1949
1874
  class: normalizeClass(["rounded-card grid size-11 place-items-center text-xl", palette.value.icon])
1950
1875
  }, [renderSlot(_ctx.$slots, "icon")], 2)) : createCommentVNode("", true), __props.chip ? (openBlock(), createElementBlock("span", {
1951
1876
  key: 1,
1952
1877
  class: normalizeClass(["rounded-cell ml-auto px-2.5 py-1 text-[0.7rem] font-medium", palette.value.soft])
1953
1878
  }, toDisplayString(__props.chip), 3)) : createCommentVNode("", true)]),
1954
- createElementVNode("h3", _hoisted_3$17, toDisplayString(__props.name), 1),
1955
- __props.lead ? (openBlock(), createElementBlock("p", _hoisted_4$13, toDisplayString(__props.lead), 1)) : createCommentVNode("", true),
1956
- createElementVNode("p", _hoisted_5$8, [createElementVNode("span", _hoisted_6$7, toDisplayString(__props.price), 1), __props.period ? (openBlock(), createElementBlock("span", _hoisted_7$3, toDisplayString(__props.period), 1)) : createCommentVNode("", true)]),
1879
+ createElementVNode("h3", _hoisted_3$19, toDisplayString(__props.name), 1),
1880
+ __props.lead ? (openBlock(), createElementBlock("p", _hoisted_4$12, toDisplayString(__props.lead), 1)) : createCommentVNode("", true),
1881
+ createElementVNode("p", _hoisted_5$7, [createElementVNode("span", _hoisted_6$6, toDisplayString(__props.price), 1), __props.period ? (openBlock(), createElementBlock("span", _hoisted_7$3, toDisplayString(__props.period), 1)) : createCommentVNode("", true)]),
1957
1882
  __props.note ? (openBlock(), createElementBlock("p", _hoisted_8$2, toDisplayString(__props.note), 1)) : createCommentVNode("", true),
1958
1883
  createElementVNode("ul", _hoisted_9$2, [(openBlock(true), createElementBlock(Fragment, null, renderList(__props.features, (feature) => {
1959
1884
  return openBlock(), createElementBlock("li", {
@@ -1968,8 +1893,8 @@ var PriceCard_default = /* @__PURE__ */ defineComponent({
1968
1893
  });
1969
1894
  //#endregion
1970
1895
  //#region src/components/ToneDot.vue?vue&type=script&setup=true&lang.ts
1971
- var _hoisted_1$31 = { class: "inline-flex items-center gap-1.5" };
1972
- var _hoisted_2$28 = {
1896
+ var _hoisted_1$33 = { class: "inline-flex items-center gap-1.5" };
1897
+ var _hoisted_2$30 = {
1973
1898
  key: 0,
1974
1899
  class: "text-ink-soft text-xs font-medium"
1975
1900
  };
@@ -1990,13 +1915,13 @@ var ToneDot_default = /* @__PURE__ */ defineComponent({
1990
1915
  * priorities — without this component knowing about any of them.
1991
1916
  */
1992
1917
  return (_ctx, _cache) => {
1993
- return openBlock(), createElementBlock("span", _hoisted_1$31, [createElementVNode("span", { class: normalizeClass(["size-2 rounded-full", __props.fill]) }, null, 2), __props.label ? (openBlock(), createElementBlock("span", _hoisted_2$28, toDisplayString(__props.label), 1)) : createCommentVNode("", true)]);
1918
+ return openBlock(), createElementBlock("span", _hoisted_1$33, [createElementVNode("span", { class: normalizeClass(["size-2 rounded-full", __props.fill]) }, null, 2), __props.label ? (openBlock(), createElementBlock("span", _hoisted_2$30, toDisplayString(__props.label), 1)) : createCommentVNode("", true)]);
1994
1919
  };
1995
1920
  }
1996
1921
  });
1997
1922
  //#endregion
1998
1923
  //#region src/components/SectionHeading.vue?vue&type=script&setup=true&lang.ts
1999
- var _hoisted_1$30 = {
1924
+ var _hoisted_1$32 = {
2000
1925
  key: 0,
2001
1926
  class: "text-ink-soft text-xs tabular-nums"
2002
1927
  };
@@ -2014,15 +1939,15 @@ var SectionHeading_default = /* @__PURE__ */ defineComponent({
2014
1939
  return openBlock(), createElementBlock("h2", { class: normalizeClass(["flex w-fit items-center gap-2 self-start rounded-full border px-3 py-1", __props.tone.card]) }, [
2015
1940
  createVNode(ToneDot_default, { fill: __props.tone.fill }, null, 8, ["fill"]),
2016
1941
  createElementVNode("span", { class: normalizeClass(["text-xs font-semibold tracking-wide uppercase", __props.tone.text]) }, toDisplayString(__props.label), 3),
2017
- __props.count > 0 ? (openBlock(), createElementBlock("span", _hoisted_1$30, toDisplayString(__props.count), 1)) : createCommentVNode("", true)
1942
+ __props.count > 0 ? (openBlock(), createElementBlock("span", _hoisted_1$32, toDisplayString(__props.count), 1)) : createCommentVNode("", true)
2018
1943
  ], 2);
2019
1944
  };
2020
1945
  }
2021
1946
  });
2022
1947
  //#endregion
2023
1948
  //#region src/components/SegmentedControl.vue?vue&type=script&setup=true&lang.ts
2024
- var _hoisted_1$29 = { class: "bg-muted rounded-card flex w-full gap-1 p-1" };
2025
- var _hoisted_2$27 = ["value", "name"];
1949
+ var _hoisted_1$31 = { class: "bg-muted rounded-card flex w-full gap-1 p-1" };
1950
+ var _hoisted_2$29 = ["value", "name"];
2026
1951
  //#endregion
2027
1952
  //#region src/components/SegmentedControl.vue
2028
1953
  var SegmentedControl_default = /* @__PURE__ */ defineComponent({
@@ -2036,7 +1961,7 @@ var SegmentedControl_default = /* @__PURE__ */ defineComponent({
2036
1961
  const model = useModel(__props, "modelValue");
2037
1962
  const name = useId();
2038
1963
  return (_ctx, _cache) => {
2039
- return openBlock(), createElementBlock("div", _hoisted_1$29, [(openBlock(true), createElementBlock(Fragment, null, renderList(__props.options, (option) => {
1964
+ return openBlock(), createElementBlock("div", _hoisted_1$31, [(openBlock(true), createElementBlock(Fragment, null, renderList(__props.options, (option) => {
2040
1965
  return openBlock(), createElementBlock("label", {
2041
1966
  key: String(option.value),
2042
1967
  class: "flex-1 cursor-pointer"
@@ -2046,18 +1971,18 @@ var SegmentedControl_default = /* @__PURE__ */ defineComponent({
2046
1971
  value: option.value,
2047
1972
  name: unref(name),
2048
1973
  class: "peer sr-only"
2049
- }, null, 8, _hoisted_2$27), [[vModelRadio, model.value]]), createElementVNode("span", { class: normalizeClass(["peer-focus-visible:outline-primary flex h-10 items-center justify-center rounded-xl px-2 text-sm font-medium transition-colors select-none peer-focus-visible:outline-2 peer-focus-visible:outline-offset-2", model.value === option.value ? "bg-surface text-ink shadow-(--shadow-control)" : "text-ink-soft"]) }, toDisplayString(option.label), 3)]);
1974
+ }, null, 8, _hoisted_2$29), [[vModelRadio, model.value]]), createElementVNode("span", { class: normalizeClass(["peer-focus-visible:outline-primary flex h-10 items-center justify-center rounded-xl px-2 text-sm font-medium transition-colors select-none peer-focus-visible:outline-2 peer-focus-visible:outline-offset-2", model.value === option.value ? "bg-surface text-ink shadow-(--shadow-control)" : "text-ink-soft"]) }, toDisplayString(option.label), 3)]);
2050
1975
  }), 128))]);
2051
1976
  };
2052
1977
  }
2053
1978
  });
2054
1979
  //#endregion
2055
1980
  //#region src/components/SkeletonList.vue?vue&type=script&setup=true&lang.ts
2056
- var _hoisted_1$28 = {
1981
+ var _hoisted_1$30 = {
2057
1982
  role: "status",
2058
1983
  class: "flex flex-col gap-1"
2059
1984
  };
2060
- var _hoisted_2$26 = { class: "sr-only" };
1985
+ var _hoisted_2$28 = { class: "sr-only" };
2061
1986
  //#endregion
2062
1987
  //#region src/components/SkeletonList.vue
2063
1988
  var SkeletonList_default = /* @__PURE__ */ defineComponent({
@@ -2071,7 +1996,7 @@ var SkeletonList_default = /* @__PURE__ */ defineComponent({
2071
1996
  /** A length starts with a digit, a dot, or opens a CSS function. */
2072
1997
  const isLength = computed(() => /^(?:[.\d]|calc\(|var\(|clamp\(|min\(|max\()/.test(__props.rowHeight));
2073
1998
  return (_ctx, _cache) => {
2074
- return openBlock(), createElementBlock("div", _hoisted_1$28, [createElementVNode("span", _hoisted_2$26, toDisplayString(__props.label), 1), (openBlock(true), createElementBlock(Fragment, null, renderList(__props.rows, (row) => {
1999
+ return openBlock(), createElementBlock("div", _hoisted_1$30, [createElementVNode("span", _hoisted_2$28, toDisplayString(__props.label), 1), (openBlock(true), createElementBlock(Fragment, null, renderList(__props.rows, (row) => {
2075
2000
  return openBlock(), createElementBlock("div", {
2076
2001
  key: row,
2077
2002
  class: normalizeClass(["bg-muted rounded-card animate-pulse", isLength.value ? void 0 : __props.rowHeight]),
@@ -2084,10 +2009,10 @@ var SkeletonList_default = /* @__PURE__ */ defineComponent({
2084
2009
  });
2085
2010
  //#endregion
2086
2011
  //#region src/components/StatCard.vue?vue&type=script&setup=true&lang.ts
2087
- var _hoisted_1$27 = { class: "surface rounded-card flex flex-1 flex-col gap-0.5 p-3" };
2088
- var _hoisted_2$25 = { class: "flex items-baseline gap-1" };
2089
- var _hoisted_3$16 = { class: "text-ink text-xl font-semibold tabular-nums" };
2090
- var _hoisted_4$12 = { class: "text-ink-soft text-xs" };
2012
+ var _hoisted_1$29 = { class: "surface rounded-card flex flex-1 flex-col gap-0.5 p-3" };
2013
+ var _hoisted_2$27 = { class: "flex items-baseline gap-1" };
2014
+ var _hoisted_3$18 = { class: "text-ink text-xl font-semibold tabular-nums" };
2015
+ var _hoisted_4$11 = { class: "text-ink-soft text-xs" };
2091
2016
  //#endregion
2092
2017
  //#region src/components/StatCard.vue
2093
2018
  var StatCard_default = /* @__PURE__ */ defineComponent({
@@ -2104,22 +2029,22 @@ var StatCard_default = /* @__PURE__ */ defineComponent({
2104
2029
  flat: ArrowRight
2105
2030
  };
2106
2031
  return (_ctx, _cache) => {
2107
- return openBlock(), createElementBlock("div", _hoisted_1$27, [createElementVNode("div", _hoisted_2$25, [createElementVNode("span", _hoisted_3$16, toDisplayString(__props.value), 1), __props.trend ? (openBlock(), createBlock(resolveDynamicComponent(TREND_ICON[__props.trend]), {
2032
+ return openBlock(), createElementBlock("div", _hoisted_1$29, [createElementVNode("div", _hoisted_2$27, [createElementVNode("span", _hoisted_3$18, toDisplayString(__props.value), 1), __props.trend ? (openBlock(), createBlock(resolveDynamicComponent(TREND_ICON[__props.trend]), {
2108
2033
  key: 0,
2109
2034
  class: "text-ink-soft size-3"
2110
- })) : createCommentVNode("", true)]), createElementVNode("span", _hoisted_4$12, toDisplayString(__props.label), 1)]);
2035
+ })) : createCommentVNode("", true)]), createElementVNode("span", _hoisted_4$11, toDisplayString(__props.label), 1)]);
2111
2036
  };
2112
2037
  }
2113
2038
  });
2114
2039
  //#endregion
2115
2040
  //#region src/components/ToastHost.vue?vue&type=script&setup=true&lang.ts
2116
- var _hoisted_1$26 = [
2041
+ var _hoisted_1$28 = [
2117
2042
  "onMouseenter",
2118
2043
  "onMouseleave",
2119
2044
  "onFocusin",
2120
2045
  "onFocusout"
2121
2046
  ];
2122
- var _hoisted_2$24 = { class: "flex-1 text-sm leading-snug" };
2047
+ var _hoisted_2$26 = { class: "flex-1 text-sm leading-snug" };
2123
2048
  //#endregion
2124
2049
  //#region src/components/ToastHost.vue
2125
2050
  var ToastHost_default = /*#__PURE__*/ _plugin_vue_export_helper_default(/* @__PURE__ */ defineComponent({
@@ -2180,7 +2105,7 @@ var ToastHost_default = /*#__PURE__*/ _plugin_vue_export_helper_default(/* @__PU
2180
2105
  class: normalizeClass(["mt-0.5 size-5 shrink-0", TONE_CLASS[toast.tone]]),
2181
2106
  "aria-hidden": "true"
2182
2107
  }, null, 8, ["class"])),
2183
- createElementVNode("p", _hoisted_2$24, toDisplayString(toast.message), 1),
2108
+ createElementVNode("p", _hoisted_2$26, toDisplayString(toast.message), 1),
2184
2109
  toast.action ? (openBlock(), createBlock(BaseButton_default, {
2185
2110
  key: 0,
2186
2111
  variant: "link",
@@ -2203,7 +2128,7 @@ var ToastHost_default = /*#__PURE__*/ _plugin_vue_export_helper_default(/* @__PU
2203
2128
  default: withCtx(() => [createVNode(unref(X), { class: "size-4" })]),
2204
2129
  _: 1
2205
2130
  }, 8, ["aria-label", "onClick"])
2206
- ], 40, _hoisted_1$26);
2131
+ ], 40, _hoisted_1$28);
2207
2132
  }), 128))]),
2208
2133
  _: 1
2209
2134
  })], 2)])) : createCommentVNode("", true);
@@ -2212,8 +2137,8 @@ var ToastHost_default = /*#__PURE__*/ _plugin_vue_export_helper_default(/* @__PU
2212
2137
  }), [["__scopeId", "data-v-737eb240"]]);
2213
2138
  //#endregion
2214
2139
  //#region src/components/LocaleLinks.vue?vue&type=script&setup=true&lang.ts
2215
- var _hoisted_1$25 = ["aria-label"];
2216
- var _hoisted_2$23 = [
2140
+ var _hoisted_1$27 = ["aria-label"];
2141
+ var _hoisted_2$25 = [
2217
2142
  "lang",
2218
2143
  "aria-pressed",
2219
2144
  "onClick"
@@ -2257,17 +2182,17 @@ var LocaleLinks_default = /* @__PURE__ */ defineComponent({
2257
2182
  class: normalizeClass(["focus-ring rounded-full px-2.5 py-1.5 text-xs transition-colors", preference.value === locale ? "bg-muted text-ink font-semibold" : "text-ink-soft hover:text-ink"]),
2258
2183
  "aria-pressed": preference.value === locale,
2259
2184
  onClick: ($event) => preference.value = locale
2260
- }, toDisplayString(__props.labels[locale]), 11, _hoisted_2$23);
2261
- }), 128))], 8, _hoisted_1$25);
2185
+ }, toDisplayString(__props.labels[locale]), 11, _hoisted_2$25);
2186
+ }), 128))], 8, _hoisted_1$27);
2262
2187
  };
2263
2188
  }
2264
2189
  });
2265
2190
  //#endregion
2266
2191
  //#region src/components/TabBar.vue?vue&type=script&setup=true&lang.ts
2267
- var _hoisted_1$24 = { class: "tab-bar" };
2268
- var _hoisted_2$22 = ["aria-label"];
2269
- var _hoisted_3$15 = { class: "tab-icon-slot" };
2270
- var _hoisted_4$11 = { class: "tab-label" };
2192
+ var _hoisted_1$26 = { class: "tab-bar" };
2193
+ var _hoisted_2$24 = ["aria-label"];
2194
+ var _hoisted_3$17 = { class: "tab-icon-slot" };
2195
+ var _hoisted_4$10 = { class: "tab-label" };
2271
2196
  //#endregion
2272
2197
  //#region src/components/TabBar.vue
2273
2198
  var TabBar_default = /*#__PURE__*/ _plugin_vue_export_helper_default(/* @__PURE__ */ defineComponent({
@@ -2279,7 +2204,7 @@ var TabBar_default = /*#__PURE__*/ _plugin_vue_export_helper_default(/* @__PURE_
2279
2204
  },
2280
2205
  setup(__props) {
2281
2206
  return (_ctx, _cache) => {
2282
- return openBlock(), createElementBlock("header", _hoisted_1$24, [createElementVNode("nav", {
2207
+ return openBlock(), createElementBlock("header", _hoisted_1$26, [createElementVNode("nav", {
2283
2208
  class: "tab-bar-inner",
2284
2209
  "aria-label": __props.label || void 0
2285
2210
  }, [(openBlock(true), createElementBlock(Fragment, null, renderList(__props.items, (item) => {
@@ -2290,28 +2215,28 @@ var TabBar_default = /*#__PURE__*/ _plugin_vue_export_helper_default(/* @__PURE_
2290
2215
  "aria-current": item.key === __props.active ? "page" : void 0,
2291
2216
  onClick: _cache[0] || (_cache[0] = ($event) => unref(tapFeedback)())
2292
2217
  }, {
2293
- default: withCtx(() => [createElementVNode("span", _hoisted_3$15, [(openBlock(), createBlock(resolveDynamicComponent(item.icon), { class: "tab-icon" }))]), createElementVNode("span", _hoisted_4$11, toDisplayString(item.label), 1)]),
2218
+ default: withCtx(() => [createElementVNode("span", _hoisted_3$17, [(openBlock(), createBlock(resolveDynamicComponent(item.icon), { class: "tab-icon" }))]), createElementVNode("span", _hoisted_4$10, toDisplayString(item.label), 1)]),
2294
2219
  _: 2
2295
2220
  }, 1032, [
2296
2221
  "to",
2297
2222
  "class",
2298
2223
  "aria-current"
2299
2224
  ]);
2300
- }), 128))], 8, _hoisted_2$22)]);
2225
+ }), 128))], 8, _hoisted_2$24)]);
2301
2226
  };
2302
2227
  }
2303
2228
  }), [["__scopeId", "data-v-a76891c4"]]);
2304
2229
  //#endregion
2305
2230
  //#region src/components/ActivityGrid.vue?vue&type=script&setup=true&lang.ts
2306
- var _hoisted_1$23 = ["aria-label"];
2307
- var _hoisted_2$21 = ["colspan"];
2308
- var _hoisted_3$14 = {
2231
+ var _hoisted_1$25 = ["aria-label"];
2232
+ var _hoisted_2$23 = ["colspan"];
2233
+ var _hoisted_3$16 = {
2309
2234
  scope: "row",
2310
2235
  class: "rk-activity-weekday"
2311
2236
  };
2312
- var _hoisted_4$10 = { class: "sr-only" };
2313
- var _hoisted_5$7 = ["tabindex", "aria-label"];
2314
- var _hoisted_6$6 = {
2237
+ var _hoisted_4$9 = { class: "sr-only" };
2238
+ var _hoisted_5$6 = ["tabindex", "aria-label"];
2239
+ var _hoisted_6$5 = {
2315
2240
  key: 1,
2316
2241
  class: "rk-activity-cell is-blank",
2317
2242
  "aria-hidden": "true"
@@ -2421,12 +2346,9 @@ var ActivityGrid_default = /*#__PURE__*/ _plugin_vue_export_helper_default(/* @_
2421
2346
  moveTo(focused.value + 1);
2422
2347
  break;
2423
2348
  case "ArrowLeft":
2424
- event.preventDefault();
2425
- step(-1);
2426
- break;
2427
2349
  case "ArrowRight":
2428
2350
  event.preventDefault();
2429
- step(1);
2351
+ step(horizontalStep(event.key, event.currentTarget));
2430
2352
  break;
2431
2353
  case "Home":
2432
2354
  event.preventDefault();
@@ -2449,197 +2371,54 @@ var ActivityGrid_default = /*#__PURE__*/ _plugin_vue_export_helper_default(/* @_
2449
2371
  choose(day);
2450
2372
  }
2451
2373
  onMounted(() => {
2452
- if (__props.startAtEnd && scroller.value) scroller.value.scrollLeft = scroller.value.scrollWidth;
2374
+ if (!__props.startAtEnd) return;
2375
+ const element = scroller.value?.viewport;
2376
+ if (!element) return;
2377
+ element.scrollLeft = elementDirection(element) === "rtl" ? -element.scrollWidth : element.scrollWidth;
2453
2378
  });
2454
2379
  return (_ctx, _cache) => {
2455
- return openBlock(), createElementBlock("div", {
2380
+ return openBlock(), createBlock(ScrollArea_default, {
2456
2381
  ref_key: "scroller",
2457
2382
  ref: scroller,
2458
- class: "rk-activity no-scrollbar"
2459
- }, [createElementVNode("table", {
2460
- ref_key: "grid",
2461
- ref: grid,
2462
- class: "rk-activity-table",
2463
- "aria-label": __props.label,
2464
- onKeydown,
2465
- onClick
2466
- }, [createElementVNode("thead", null, [createElementVNode("tr", null, [_cache[0] || (_cache[0] = createElementVNode("td", { class: "rk-activity-corner" }, null, -1)), (openBlock(true), createElementBlock(Fragment, null, renderList(months.value, (month) => {
2467
- return openBlock(), createElementBlock("th", {
2468
- key: month.key,
2469
- colspan: month.span,
2470
- scope: "colgroup"
2471
- }, toDisplayString(month.label), 9, _hoisted_2$21);
2472
- }), 128))])]), createElementVNode("tbody", null, [(openBlock(true), createElementBlock(Fragment, null, renderList(weekdays.value, (weekday, row) => {
2473
- return openBlock(), createElementBlock("tr", { key: weekday }, [createElementVNode("th", _hoisted_3$14, [createElementVNode("span", _hoisted_4$10, toDisplayString(weekday), 1)]), (openBlock(true), createElementBlock(Fragment, null, renderList(weeks.value, (week, column) => {
2474
- return openBlock(), createElementBlock(Fragment, { key: column }, [week[row] ? (openBlock(), createElementBlock("td", mergeProps({
2475
- key: 0,
2476
- class: "rk-activity-cell"
2477
- }, { ref_for: true }, dayAttrs(week[row]), {
2478
- tabindex: cells.value[focused.value]?.day === week[row] ? 0 : -1,
2479
- "aria-label": __props.dayLabel(week[row]),
2480
- class: [__props.levelFor(week[row]), { "is-pickable": __props.isSelectable?.(week[row]) }]
2481
- }), null, 16, _hoisted_5$7)) : (openBlock(), createElementBlock("td", _hoisted_6$6))], 64);
2482
- }), 128))]);
2483
- }), 128))])], 40, _hoisted_1$23)], 512);
2484
- };
2485
- }
2486
- }), [["__scopeId", "data-v-9f622328"]]);
2487
- //#endregion
2488
- //#region src/components/ScrollArea.vue?vue&type=script&setup=true&lang.ts
2489
- var _hoisted_1$22 = { class: "rk-scroll" };
2490
- var _hoisted_2$20 = [
2491
- "tabindex",
2492
- "role",
2493
- "aria-label"
2494
- ];
2495
- var _hoisted_3$13 = {
2496
- key: 0,
2497
- class: "rk-scroll-fade is-start-x",
2498
- "aria-hidden": "true"
2499
- };
2500
- var _hoisted_4$9 = {
2501
- key: 1,
2502
- class: "rk-scroll-fade is-end-x",
2503
- "aria-hidden": "true"
2504
- };
2505
- var _hoisted_5$6 = {
2506
- key: 2,
2507
- class: "rk-scroll-fade is-start-y",
2508
- "aria-hidden": "true"
2509
- };
2510
- var _hoisted_6$5 = {
2511
- key: 3,
2512
- class: "rk-scroll-fade is-end-y",
2513
- "aria-hidden": "true"
2514
- };
2515
- /**
2516
- * A box that scrolls, with the two things a hand-written one leaves out.
2517
- *
2518
- * ## The edge fade is the affordance `no-scrollbar` takes away
2519
- *
2520
- * Every app here hides the scrollbar on a horizontal row — a strip of
2521
- * months, a row of filter chips — because a native bar under a 40px row is
2522
- * louder than the row. What goes with it is the only sign on screen that
2523
- * there is anything further along. So the fades are driven by the actual
2524
- * scroll position: one appears at an edge exactly when there is content
2525
- * past it, and both are gone when everything fits.
2526
- *
2527
- * ## A focus stop, but only when there is no other way in
2528
- *
2529
- * A box that scrolls and cannot take focus cannot be scrolled by a
2530
- * keyboard, so the far end is simply unreachable. That is the fault
2531
- * `CodeBlock` was written for, and it is not about code: it is true of any
2532
- * scrolling box whose contents are not focusable.
2533
- *
2534
- * But it is *only* true of those. A row of buttons already moves under the
2535
- * keyboard — Tab scrolls the next one into view — and giving that row a
2536
- * stop of its own costs a press for nothing, on every row. So this checks:
2537
- * it becomes a named region when it overflows **and** holds nothing
2538
- * focusable, and stays out of the tab order otherwise.
2539
- *
2540
- * The check runs when the box or its contents resize, which covers a list
2541
- * that arrives from a server. A swap that changes neither size — the same
2542
- * number of rows, buttons turned into plain text — will not be noticed;
2543
- * that is a trade against watching every mutation of a scroll container,
2544
- * and the shape it misses is a rare one.
2545
- */
2546
- var FOCUSABLE$1 = "a[href], button, input, select, textarea, summary, [tabindex]:not([tabindex=\"-1\"])";
2547
- //#endregion
2548
- //#region src/components/ScrollArea.vue
2549
- var ScrollArea_default = /*#__PURE__*/ _plugin_vue_export_helper_default(/* @__PURE__ */ defineComponent({
2550
- __name: "ScrollArea",
2551
- props: {
2552
- label: {},
2553
- axis: { default: "y" },
2554
- scrollbar: { default: "auto" },
2555
- fade: {
2556
- type: Boolean,
2557
- default: true
2558
- },
2559
- drag: {
2560
- type: Boolean,
2561
- default: false
2562
- }
2563
- },
2564
- emits: ["scroll"],
2565
- setup(__props, { expose: __expose, emit: __emit }) {
2566
- const emit = __emit;
2567
- const viewport = useTemplateRef("viewport");
2568
- /** Anything that takes focus on its own, so the box does not need to. */
2569
- const horizontal = computed(() => __props.axis === "x" || __props.axis === "both");
2570
- const vertical = computed(() => __props.axis === "y" || __props.axis === "both");
2571
- const start = ref({
2572
- x: false,
2573
- y: false
2574
- });
2575
- const end = ref({
2576
- x: false,
2577
- y: false
2578
- });
2579
- const overflows = ref(false);
2580
- const hasFocusable = ref(true);
2581
- function measure() {
2582
- const element = viewport.value;
2583
- if (!element) return;
2584
- const overX = element.scrollWidth - element.clientWidth;
2585
- const overY = element.scrollHeight - element.clientHeight;
2586
- const slack = 1;
2587
- const alongX = Math.abs(element.scrollLeft);
2588
- start.value = {
2589
- x: alongX > slack,
2590
- y: element.scrollTop > slack
2591
- };
2592
- end.value = {
2593
- x: overX - alongX > slack,
2594
- y: overY - element.scrollTop > slack
2595
- };
2596
- overflows.value = horizontal.value && overX > slack || vertical.value && overY > slack;
2597
- hasFocusable.value = element.querySelector(FOCUSABLE$1) !== null;
2598
- }
2599
- function onScroll(event) {
2600
- measure();
2601
- emit("scroll", event);
2602
- }
2603
- /** The box itself is the way in only when nothing inside it is. */
2604
- const isStop = computed(() => overflows.value && !hasFocusable.value);
2605
- let observer = null;
2606
- watchEffect(() => {
2607
- observer?.disconnect();
2608
- observer = null;
2609
- const element = viewport.value;
2610
- if (!element || typeof ResizeObserver === "undefined") return;
2611
- observer = new ResizeObserver(measure);
2612
- observer.observe(element);
2613
- for (const child of element.children) observer.observe(child);
2614
- measure();
2615
- });
2616
- onScopeDispose(() => observer?.disconnect());
2617
- useDragScroll(computed(() => __props.drag ? viewport.value : null));
2618
- __expose({
2619
- /** The element that actually scrolls, for a parent that has to measure it. */
2620
- viewport });
2621
- return (_ctx, _cache) => {
2622
- return openBlock(), createElementBlock("div", _hoisted_1$22, [createElementVNode("div", {
2623
- ref_key: "viewport",
2624
- ref: viewport,
2625
- class: normalizeClass(["rk-scroll-viewport", [`is-${__props.axis}`, { "no-scrollbar": __props.scrollbar === "hidden" }]]),
2626
- tabindex: isStop.value ? 0 : void 0,
2627
- role: isStop.value ? "region" : void 0,
2628
- "aria-label": isStop.value ? __props.label : void 0,
2629
- onScroll
2630
- }, [renderSlot(_ctx.$slots, "default", {}, void 0, true)], 42, _hoisted_2$20), __props.fade ? (openBlock(), createElementBlock(Fragment, { key: 0 }, [
2631
- horizontal.value && start.value.x ? (openBlock(), createElementBlock("span", _hoisted_3$13)) : createCommentVNode("", true),
2632
- horizontal.value && end.value.x ? (openBlock(), createElementBlock("span", _hoisted_4$9)) : createCommentVNode("", true),
2633
- vertical.value && start.value.y ? (openBlock(), createElementBlock("span", _hoisted_5$6)) : createCommentVNode("", true),
2634
- vertical.value && end.value.y ? (openBlock(), createElementBlock("span", _hoisted_6$5)) : createCommentVNode("", true)
2635
- ], 64)) : createCommentVNode("", true)]);
2383
+ axis: "x",
2384
+ scrollbar: "hidden",
2385
+ label: __props.label,
2386
+ class: "rk-activity"
2387
+ }, {
2388
+ default: withCtx(() => [createElementVNode("table", {
2389
+ ref_key: "grid",
2390
+ ref: grid,
2391
+ class: "rk-activity-table",
2392
+ "aria-label": __props.label,
2393
+ onKeydown,
2394
+ onClick
2395
+ }, [createElementVNode("thead", null, [createElementVNode("tr", null, [_cache[0] || (_cache[0] = createElementVNode("td", { class: "rk-activity-corner" }, null, -1)), (openBlock(true), createElementBlock(Fragment, null, renderList(months.value, (month) => {
2396
+ return openBlock(), createElementBlock("th", {
2397
+ key: month.key,
2398
+ colspan: month.span,
2399
+ scope: "colgroup"
2400
+ }, toDisplayString(month.label), 9, _hoisted_2$23);
2401
+ }), 128))])]), createElementVNode("tbody", null, [(openBlock(true), createElementBlock(Fragment, null, renderList(weekdays.value, (weekday, row) => {
2402
+ return openBlock(), createElementBlock("tr", { key: weekday }, [createElementVNode("th", _hoisted_3$16, [createElementVNode("span", _hoisted_4$9, toDisplayString(weekday), 1)]), (openBlock(true), createElementBlock(Fragment, null, renderList(weeks.value, (week, column) => {
2403
+ return openBlock(), createElementBlock(Fragment, { key: column }, [week[row] ? (openBlock(), createElementBlock("td", mergeProps({
2404
+ key: 0,
2405
+ class: "rk-activity-cell"
2406
+ }, { ref_for: true }, dayAttrs(week[row]), {
2407
+ tabindex: cells.value[focused.value]?.day === week[row] ? 0 : -1,
2408
+ "aria-label": __props.dayLabel(week[row]),
2409
+ class: [__props.levelFor(week[row]), { "is-pickable": __props.isSelectable?.(week[row]) }]
2410
+ }), null, 16, _hoisted_5$6)) : (openBlock(), createElementBlock("td", _hoisted_6$5))], 64);
2411
+ }), 128))]);
2412
+ }), 128))])], 40, _hoisted_1$25)]),
2413
+ _: 1
2414
+ }, 8, ["label"]);
2636
2415
  };
2637
2416
  }
2638
- }), [["__scopeId", "data-v-4c21cdc9"]]);
2417
+ }), [["__scopeId", "data-v-766e5244"]]);
2639
2418
  //#endregion
2640
2419
  //#region src/components/VirtualList.vue?vue&type=script&setup=true&lang.ts
2641
- var _hoisted_1$21 = ["aria-label"];
2642
- var _hoisted_2$19 = ["aria-setsize", "aria-posinset"];
2420
+ var _hoisted_1$24 = ["aria-label"];
2421
+ var _hoisted_2$22 = ["aria-setsize", "aria-posinset"];
2643
2422
  //#endregion
2644
2423
  //#region src/components/VirtualList.vue
2645
2424
  var VirtualList_default = /*#__PURE__*/ _plugin_vue_export_helper_default(/* @__PURE__ */ defineComponent({
@@ -2707,14 +2486,14 @@ var VirtualList_default = /*#__PURE__*/ _plugin_vue_export_helper_default(/* @__
2707
2486
  }, [renderSlot(_ctx.$slots, "default", {
2708
2487
  item: row.item,
2709
2488
  index: row.index
2710
- }, void 0, true)], 12, _hoisted_2$19);
2489
+ }, void 0, true)], 12, _hoisted_2$22);
2711
2490
  }), 128)),
2712
2491
  unref(padBottom) > 0 ? (openBlock(), createElementBlock("li", {
2713
2492
  key: 1,
2714
2493
  style: normalizeStyle({ height: `${unref(padBottom)}px` }),
2715
2494
  "aria-hidden": "true"
2716
2495
  }, null, 4)) : createCommentVNode("", true)
2717
- ], 8, _hoisted_1$21)]),
2496
+ ], 8, _hoisted_1$24)]),
2718
2497
  _: 3
2719
2498
  }, 8, [
2720
2499
  "label",
@@ -2725,9 +2504,92 @@ var VirtualList_default = /*#__PURE__*/ _plugin_vue_export_helper_default(/* @__
2725
2504
  }
2726
2505
  }), [["__scopeId", "data-v-936ed40c"]]);
2727
2506
  //#endregion
2507
+ //#region src/components/AnnounceHost.vue?vue&type=script&setup=true&lang.ts
2508
+ var _hoisted_1$23 = { class: "rk-announcer" };
2509
+ var _hoisted_2$21 = {
2510
+ role: "status",
2511
+ "aria-live": "polite",
2512
+ "aria-atomic": "true"
2513
+ };
2514
+ var _hoisted_3$15 = {
2515
+ role: "alert",
2516
+ "aria-live": "assertive",
2517
+ "aria-atomic": "true"
2518
+ };
2519
+ //#endregion
2520
+ //#region src/components/AnnounceHost.vue
2521
+ var AnnounceHost_default = /*#__PURE__*/ _plugin_vue_export_helper_default(/* @__PURE__ */ defineComponent({
2522
+ __name: "AnnounceHost",
2523
+ setup(__props) {
2524
+ const { polite, assertive } = useAnnounce();
2525
+ return (_ctx, _cache) => {
2526
+ return openBlock(), createElementBlock("div", _hoisted_1$23, [createElementVNode("p", _hoisted_2$21, toDisplayString(unref(polite)), 1), createElementVNode("p", _hoisted_3$15, toDisplayString(unref(assertive)), 1)]);
2527
+ };
2528
+ }
2529
+ }), [["__scopeId", "data-v-205d6703"]]);
2530
+ //#endregion
2531
+ //#region src/components/ErrorSummary.vue?vue&type=script&setup=true&lang.ts
2532
+ var _hoisted_1$22 = { class: "rk-errsum-title" };
2533
+ var _hoisted_2$20 = { class: "rk-errsum-list" };
2534
+ var _hoisted_3$14 = ["href", "onClick"];
2535
+ //#endregion
2536
+ //#region src/components/ErrorSummary.vue
2537
+ var ErrorSummary_default = /*#__PURE__*/ _plugin_vue_export_helper_default(/* @__PURE__ */ defineComponent({
2538
+ __name: "ErrorSummary",
2539
+ props: {
2540
+ errors: {},
2541
+ title: {},
2542
+ labelFor: { type: Function },
2543
+ fieldId: {
2544
+ type: Function,
2545
+ default: (field) => field
2546
+ },
2547
+ fields: { default: () => void 0 }
2548
+ },
2549
+ setup(__props, { expose: __expose }) {
2550
+ const panel = useTemplateRef("panel");
2551
+ const listed = computed(() => {
2552
+ return (__props.fields ?? Object.keys(__props.errors)).filter((field) => __props.errors[field] !== void 0).map((field) => ({
2553
+ field,
2554
+ message: __props.errors[field],
2555
+ id: __props.fieldId(field)
2556
+ }));
2557
+ });
2558
+ const hasErrors = computed(() => listed.value.length > 0);
2559
+ /** Moves focus into the summary. Call it on every failed submit. */
2560
+ function focus() {
2561
+ focusTarget(panel.value);
2562
+ }
2563
+ function goToField(event, id) {
2564
+ if (focusTarget(id)) event.preventDefault();
2565
+ }
2566
+ watch(hasErrors, async (now) => {
2567
+ if (!now) return;
2568
+ await nextTick();
2569
+ focus();
2570
+ });
2571
+ __expose({ focus });
2572
+ return (_ctx, _cache) => {
2573
+ return hasErrors.value ? (openBlock(), createElementBlock("div", {
2574
+ key: 0,
2575
+ ref_key: "panel",
2576
+ ref: panel,
2577
+ class: "rk-errsum",
2578
+ tabindex: "-1"
2579
+ }, [createElementVNode("p", _hoisted_1$22, toDisplayString(__props.title), 1), createElementVNode("ul", _hoisted_2$20, [(openBlock(true), createElementBlock(Fragment, null, renderList(listed.value, (item) => {
2580
+ return openBlock(), createElementBlock("li", { key: item.field }, [createElementVNode("a", {
2581
+ href: `#${item.id}`,
2582
+ class: "rk-errsum-link",
2583
+ onClick: ($event) => goToField($event, item.id)
2584
+ }, toDisplayString(__props.labelFor(item.field)) + ": " + toDisplayString(item.message), 9, _hoisted_3$14)]);
2585
+ }), 128))])], 512)) : createCommentVNode("", true);
2586
+ };
2587
+ }
2588
+ }), [["__scopeId", "data-v-4a68e342"]]);
2589
+ //#endregion
2728
2590
  //#region src/components/AvatarStack.vue?vue&type=script&setup=true&lang.ts
2729
- var _hoisted_1$20 = ["aria-label"];
2730
- var _hoisted_2$18 = {
2591
+ var _hoisted_1$21 = ["aria-label"];
2592
+ var _hoisted_2$19 = {
2731
2593
  key: 0,
2732
2594
  class: "rk-stack-item rk-stack-rest",
2733
2595
  "aria-hidden": "true"
@@ -2765,15 +2627,15 @@ var AvatarStack_default = /*#__PURE__*/ _plugin_vue_export_helper_default(/* @__
2765
2627
  "src",
2766
2628
  "size"
2767
2629
  ])]);
2768
- }), 128)), rest.value ? (openBlock(), createElementBlock("span", _hoisted_2$18, "+" + toDisplayString(rest.value), 1)) : createCommentVNode("", true)], 10, _hoisted_1$20);
2630
+ }), 128)), rest.value ? (openBlock(), createElementBlock("span", _hoisted_2$19, "+" + toDisplayString(rest.value), 1)) : createCommentVNode("", true)], 10, _hoisted_1$21);
2769
2631
  };
2770
2632
  }
2771
- }), [["__scopeId", "data-v-db629481"]]);
2633
+ }), [["__scopeId", "data-v-1f87913c"]]);
2772
2634
  //#endregion
2773
2635
  //#region src/components/BaseCalendar.vue?vue&type=script&setup=true&lang.ts
2774
- var _hoisted_1$19 = { class: "rk-cal" };
2775
- var _hoisted_2$17 = { class: "rk-cal-head" };
2776
- var _hoisted_3$12 = ["aria-label"];
2636
+ var _hoisted_1$20 = { class: "rk-cal" };
2637
+ var _hoisted_2$18 = { class: "rk-cal-head" };
2638
+ var _hoisted_3$13 = ["aria-label"];
2777
2639
  var _hoisted_4$8 = ["aria-expanded"];
2778
2640
  var _hoisted_5$5 = ["aria-label"];
2779
2641
  var _hoisted_6$4 = {
@@ -2931,16 +2793,18 @@ var BaseCalendar_default = /*#__PURE__*/ _plugin_vue_export_helper_default(/* @_
2931
2793
  return toDateKey(date);
2932
2794
  }
2933
2795
  function onKeydown(event) {
2796
+ const key = event.key;
2797
+ const along = horizontalStep(key, event.currentTarget);
2934
2798
  const next = {
2935
- ArrowLeft: () => addDays(focused.value, -1),
2936
- ArrowRight: () => addDays(focused.value, 1),
2799
+ ArrowLeft: () => addDays(focused.value, along),
2800
+ ArrowRight: () => addDays(focused.value, along),
2937
2801
  ArrowUp: () => addDays(focused.value, -7),
2938
2802
  ArrowDown: () => addDays(focused.value, 7),
2939
2803
  Home: () => addDays(focused.value, -((fromDateKey(focused.value).getDay() - __props.weekStartsOn + 7) % 7)),
2940
2804
  End: () => addDays(focused.value, 6 - (fromDateKey(focused.value).getDay() - __props.weekStartsOn + 7) % 7),
2941
2805
  PageUp: () => shiftMonths(event.shiftKey ? -12 : -1),
2942
2806
  PageDown: () => shiftMonths(event.shiftKey ? 12 : 1)
2943
- }[event.key];
2807
+ }[key];
2944
2808
  if (!next) return;
2945
2809
  event.preventDefault();
2946
2810
  moveTo(next());
@@ -2968,8 +2832,8 @@ var BaseCalendar_default = /*#__PURE__*/ _plugin_vue_export_helper_default(/* @_
2968
2832
  if (next) focused.value = next;
2969
2833
  });
2970
2834
  return (_ctx, _cache) => {
2971
- return openBlock(), createElementBlock("div", _hoisted_1$19, [
2972
- createElementVNode("div", _hoisted_2$17, [
2835
+ return openBlock(), createElementBlock("div", _hoisted_1$20, [
2836
+ createElementVNode("div", _hoisted_2$18, [
2973
2837
  createElementVNode("button", {
2974
2838
  type: "button",
2975
2839
  class: "rk-cal-arrow focus-ring",
@@ -2978,7 +2842,7 @@ var BaseCalendar_default = /*#__PURE__*/ _plugin_vue_export_helper_default(/* @_
2978
2842
  }, [createVNode(unref(ChevronLeft), {
2979
2843
  class: "size-4",
2980
2844
  "aria-hidden": "true"
2981
- })], 8, _hoisted_3$12),
2845
+ })], 8, _hoisted_3$13),
2982
2846
  createElementVNode("button", {
2983
2847
  type: "button",
2984
2848
  class: "rk-cal-title focus-ring",
@@ -3048,11 +2912,11 @@ var BaseCalendar_default = /*#__PURE__*/ _plugin_vue_export_helper_default(/* @_
3048
2912
  ]);
3049
2913
  };
3050
2914
  }
3051
- }), [["__scopeId", "data-v-30197a85"]]);
2915
+ }), [["__scopeId", "data-v-d682f18a"]]);
3052
2916
  //#endregion
3053
2917
  //#region src/components/BaseChip.vue?vue&type=script&setup=true&lang.ts
3054
- var _hoisted_1$18 = { class: "truncate" };
3055
- var _hoisted_2$16 = ["aria-label", "disabled"];
2918
+ var _hoisted_1$19 = { class: "truncate" };
2919
+ var _hoisted_2$17 = ["aria-label", "disabled"];
3056
2920
  //#endregion
3057
2921
  //#region src/components/BaseChip.vue
3058
2922
  var BaseChip_default = /*#__PURE__*/ _plugin_vue_export_helper_default(/* @__PURE__ */ defineComponent({
@@ -3089,7 +2953,7 @@ var BaseChip_default = /*#__PURE__*/ _plugin_vue_export_helper_default(/* @__PUR
3089
2953
  key: 0,
3090
2954
  class: "size-3.5 shrink-0",
3091
2955
  "aria-hidden": "true"
3092
- })) : createCommentVNode("", true), createElementVNode("span", _hoisted_1$18, toDisplayString(__props.label), 1)]),
2956
+ })) : createCommentVNode("", true), createElementVNode("span", _hoisted_1$19, toDisplayString(__props.label), 1)]),
3093
2957
  _: 1
3094
2958
  }, 8, [
3095
2959
  "type",
@@ -3106,18 +2970,18 @@ var BaseChip_default = /*#__PURE__*/ _plugin_vue_export_helper_default(/* @__PUR
3106
2970
  }, [createVNode(unref(X), {
3107
2971
  class: "size-3",
3108
2972
  "aria-hidden": "true"
3109
- })], 8, _hoisted_2$16)) : createCommentVNode("", true)], 2);
2973
+ })], 8, _hoisted_2$17)) : createCommentVNode("", true)], 2);
3110
2974
  };
3111
2975
  }
3112
2976
  }), [["__scopeId", "data-v-c94a820d"]]);
3113
2977
  //#endregion
3114
2978
  //#region src/components/BaseKbd.vue?vue&type=script&setup=true&lang.ts
3115
- var _hoisted_1$17 = {
2979
+ var _hoisted_1$18 = {
3116
2980
  key: 0,
3117
2981
  class: "rk-kbd-joiner",
3118
2982
  "aria-hidden": "true"
3119
2983
  };
3120
- var _hoisted_2$15 = { class: "rk-kbd-key control" };
2984
+ var _hoisted_2$16 = { class: "rk-kbd-key control" };
3121
2985
  //#endregion
3122
2986
  //#region src/components/BaseKbd.vue
3123
2987
  var BaseKbd_default = /*#__PURE__*/ _plugin_vue_export_helper_default(/* @__PURE__ */ defineComponent({
@@ -3131,7 +2995,7 @@ var BaseKbd_default = /*#__PURE__*/ _plugin_vue_export_helper_default(/* @__PURE
3131
2995
  const list = computed(() => typeof __props.keys === "string" ? [__props.keys] : __props.keys);
3132
2996
  return (_ctx, _cache) => {
3133
2997
  return openBlock(), createElementBlock("span", { class: normalizeClass(["rk-kbd", `is-${__props.size}`]) }, [(openBlock(true), createElementBlock(Fragment, null, renderList(list.value, (key, index) => {
3134
- return openBlock(), createElementBlock(Fragment, { key }, [index > 0 && __props.joiner ? (openBlock(), createElementBlock("span", _hoisted_1$17, toDisplayString(__props.joiner), 1)) : createCommentVNode("", true), createElementVNode("kbd", _hoisted_2$15, toDisplayString(key), 1)], 64);
2998
+ return openBlock(), createElementBlock(Fragment, { key }, [index > 0 && __props.joiner ? (openBlock(), createElementBlock("span", _hoisted_1$18, toDisplayString(__props.joiner), 1)) : createCommentVNode("", true), createElementVNode("kbd", _hoisted_2$16, toDisplayString(key), 1)], 64);
3135
2999
  }), 128))], 2);
3136
3000
  };
3137
3001
  }
@@ -3170,7 +3034,7 @@ var BaseLink_default = /*#__PURE__*/ _plugin_vue_export_helper_default(/* @__PUR
3170
3034
  }), [["__scopeId", "data-v-88581007"]]);
3171
3035
  //#endregion
3172
3036
  //#region src/components/BaseRating.vue?vue&type=script&setup=true&lang.ts
3173
- var _hoisted_1$16 = [
3037
+ var _hoisted_1$17 = [
3174
3038
  "role",
3175
3039
  "aria-label",
3176
3040
  "tabindex",
@@ -3179,7 +3043,7 @@ var _hoisted_1$16 = [
3179
3043
  "aria-valuemax",
3180
3044
  "aria-valuetext"
3181
3045
  ];
3182
- var _hoisted_2$14 = ["onClick", "onPointerenter"];
3046
+ var _hoisted_2$15 = ["onClick", "onPointerenter"];
3183
3047
  //#endregion
3184
3048
  //#region src/components/BaseRating.vue
3185
3049
  var BaseRating_default = /*#__PURE__*/ _plugin_vue_export_helper_default(/* @__PURE__ */ defineComponent({
@@ -3213,10 +3077,11 @@ var BaseRating_default = /*#__PURE__*/ _plugin_vue_export_helper_default(/* @__P
3213
3077
  model.value = __props.allowClear && model.value === value ? 0 : value;
3214
3078
  }
3215
3079
  function onKeydown(event) {
3080
+ const along = horizontalStep(event.key, event.currentTarget);
3216
3081
  const next = {
3217
- ArrowRight: model.value + 1,
3082
+ ArrowRight: model.value + along,
3083
+ ArrowLeft: model.value + along,
3218
3084
  ArrowUp: model.value + 1,
3219
- ArrowLeft: model.value - 1,
3220
3085
  ArrowDown: model.value - 1,
3221
3086
  Home: 0,
3222
3087
  End: __props.max
@@ -3244,15 +3109,15 @@ var BaseRating_default = /*#__PURE__*/ _plugin_vue_export_helper_default(/* @__P
3244
3109
  "aria-hidden": "true",
3245
3110
  onClick: ($event) => __props.readonly ? void 0 : pick(star),
3246
3111
  onPointerenter: ($event) => __props.readonly ? void 0 : hovered.value = star
3247
- }, [createVNode(unref(Star), { class: "rk-rating-icon" })], 42, _hoisted_2$14);
3248
- }), 128))], 42, _hoisted_1$16);
3112
+ }, [createVNode(unref(Star), { class: "rk-rating-icon" })], 42, _hoisted_2$15);
3113
+ }), 128))], 42, _hoisted_1$17);
3249
3114
  };
3250
3115
  }
3251
- }), [["__scopeId", "data-v-3118ad6b"]]);
3116
+ }), [["__scopeId", "data-v-b7334b78"]]);
3252
3117
  //#endregion
3253
3118
  //#region src/components/BaseSeparator.vue?vue&type=script&setup=true&lang.ts
3254
- var _hoisted_1$15 = { class: "rk-sep-label" };
3255
- var _hoisted_2$13 = ["aria-orientation"];
3119
+ var _hoisted_1$16 = { class: "rk-sep-label" };
3120
+ var _hoisted_2$14 = ["aria-orientation"];
3256
3121
  //#endregion
3257
3122
  //#region src/components/BaseSeparator.vue
3258
3123
  var BaseSeparator_default = /*#__PURE__*/ _plugin_vue_export_helper_default(/* @__PURE__ */ defineComponent({
@@ -3280,28 +3145,28 @@ var BaseSeparator_default = /*#__PURE__*/ _plugin_vue_export_helper_default(/* @
3280
3145
  "aria-hidden": "true"
3281
3146
  }, [
3282
3147
  _cache[0] || (_cache[0] = createElementVNode("span", { class: "rk-sep-line" }, null, -1)),
3283
- createElementVNode("span", _hoisted_1$15, toDisplayString(__props.label), 1),
3148
+ createElementVNode("span", _hoisted_1$16, toDisplayString(__props.label), 1),
3284
3149
  _cache[1] || (_cache[1] = createElementVNode("span", { class: "rk-sep-line" }, null, -1))
3285
3150
  ], 2)) : (openBlock(), createElementBlock("div", {
3286
3151
  key: 1,
3287
3152
  class: normalizeClass(["rk-sep", [`is-${__props.orientation}`, `space-${__props.spacing}`]]),
3288
3153
  role: "separator",
3289
3154
  "aria-orientation": __props.orientation
3290
- }, null, 10, _hoisted_2$13));
3155
+ }, null, 10, _hoisted_2$14));
3291
3156
  };
3292
3157
  }
3293
3158
  }), [["__scopeId", "data-v-9f8cc9aa"]]);
3294
3159
  //#endregion
3295
3160
  //#region src/components/ColorPicker.vue?vue&type=script&setup=true&lang.ts
3296
- var _hoisted_1$14 = { class: "rk-color-row" };
3297
- var _hoisted_2$12 = [
3161
+ var _hoisted_1$15 = { class: "rk-color-row" };
3162
+ var _hoisted_2$13 = [
3298
3163
  "id",
3299
3164
  "value",
3300
3165
  "disabled",
3301
3166
  "aria-describedby",
3302
3167
  "aria-invalid"
3303
3168
  ];
3304
- var _hoisted_3$11 = [
3169
+ var _hoisted_3$12 = [
3305
3170
  "aria-label",
3306
3171
  "disabled",
3307
3172
  "onKeydown"
@@ -3384,7 +3249,7 @@ var ColorPicker_default = /*#__PURE__*/ _plugin_vue_export_helper_default(/* @__
3384
3249
  "label-hidden": __props.labelHidden,
3385
3250
  class: "rk-color"
3386
3251
  }, {
3387
- default: withCtx(({ id, describedBy, invalid }) => [createElementVNode("div", _hoisted_1$14, [
3252
+ default: withCtx(({ id, describedBy, invalid }) => [createElementVNode("div", _hoisted_1$15, [
3388
3253
  createElementVNode("span", {
3389
3254
  class: "rk-color-well",
3390
3255
  style: normalizeStyle(current.value ? { "--rk-color": current.value } : void 0)
@@ -3397,7 +3262,7 @@ var ColorPicker_default = /*#__PURE__*/ _plugin_vue_export_helper_default(/* @__
3397
3262
  "aria-describedby": describedBy,
3398
3263
  "aria-invalid": invalid,
3399
3264
  onInput: _cache[0] || (_cache[0] = ($event) => set($event.target.value))
3400
- }, null, 40, _hoisted_2$12)], 4),
3265
+ }, null, 40, _hoisted_2$13)], 4),
3401
3266
  __props.hexLabel ? withDirectives((openBlock(), createElementBlock("input", {
3402
3267
  key: 0,
3403
3268
  "onUpdate:modelValue": _cache[1] || (_cache[1] = ($event) => draft.value = $event),
@@ -3409,7 +3274,7 @@ var ColorPicker_default = /*#__PURE__*/ _plugin_vue_export_helper_default(/* @__
3409
3274
  disabled: __props.disabled,
3410
3275
  onBlur: commit,
3411
3276
  onKeydown: withKeys(withModifiers(commit, ["prevent"]), ["enter"])
3412
- }, null, 40, _hoisted_3$11)), [[vModelText, draft.value]]) : createCommentVNode("", true),
3277
+ }, null, 40, _hoisted_3$12)), [[vModelText, draft.value]]) : createCommentVNode("", true),
3413
3278
  __props.swatches.length > 0 ? (openBlock(), createElementBlock("ul", _hoisted_4$7, [(openBlock(true), createElementBlock(Fragment, null, renderList(__props.swatches, (swatch) => {
3414
3279
  return openBlock(), createElementBlock("li", { key: swatch.value }, [createElementVNode("button", {
3415
3280
  type: "button",
@@ -3434,9 +3299,9 @@ var ColorPicker_default = /*#__PURE__*/ _plugin_vue_export_helper_default(/* @__
3434
3299
  }), [["__scopeId", "data-v-5ca23aa9"]]);
3435
3300
  //#endregion
3436
3301
  //#region src/components/CopyButton.vue?vue&type=script&setup=true&lang.ts
3437
- var _hoisted_1$13 = ["aria-label"];
3438
- var _hoisted_2$11 = { key: 2 };
3439
- var _hoisted_3$10 = {
3302
+ var _hoisted_1$14 = ["aria-label"];
3303
+ var _hoisted_2$12 = { key: 2 };
3304
+ var _hoisted_3$11 = {
3440
3305
  class: "sr-only",
3441
3306
  role: "status",
3442
3307
  "aria-live": "polite"
@@ -3494,23 +3359,23 @@ var CopyButton_default = /*#__PURE__*/ _plugin_vue_export_helper_default(/* @__P
3494
3359
  class: "size-4 shrink-0",
3495
3360
  "aria-hidden": "true"
3496
3361
  })),
3497
- __props.withText ? (openBlock(), createElementBlock("span", _hoisted_2$11, toDisplayString(state.value === "copied" ? __props.copiedLabel : __props.copyLabel), 1)) : createCommentVNode("", true),
3498
- createElementVNode("span", _hoisted_3$10, toDisplayString(state.value === "copied" ? __props.copiedLabel : state.value === "failed" ? __props.errorLabel ?? "" : ""), 1)
3499
- ], 10, _hoisted_1$13);
3362
+ __props.withText ? (openBlock(), createElementBlock("span", _hoisted_2$12, toDisplayString(state.value === "copied" ? __props.copiedLabel : __props.copyLabel), 1)) : createCommentVNode("", true),
3363
+ createElementVNode("span", _hoisted_3$11, toDisplayString(state.value === "copied" ? __props.copiedLabel : state.value === "failed" ? __props.errorLabel ?? "" : ""), 1)
3364
+ ], 10, _hoisted_1$14);
3500
3365
  };
3501
3366
  }
3502
3367
  }), [["__scopeId", "data-v-c481e140"]]);
3503
3368
  //#endregion
3504
3369
  //#region src/components/CodeBlock.vue?vue&type=script&setup=true&lang.ts
3505
- var _hoisted_1$12 = {
3370
+ var _hoisted_1$13 = {
3506
3371
  key: 0,
3507
3372
  class: "rk-code-bar"
3508
3373
  };
3509
- var _hoisted_2$10 = {
3374
+ var _hoisted_2$11 = {
3510
3375
  key: 0,
3511
3376
  class: "rk-code-lang"
3512
3377
  };
3513
- var _hoisted_3$9 = [
3378
+ var _hoisted_3$10 = [
3514
3379
  "tabindex",
3515
3380
  "role",
3516
3381
  "aria-label"
@@ -3534,7 +3399,7 @@ var CodeBlock_default = /*#__PURE__*/ _plugin_vue_export_helper_default(/* @__PU
3534
3399
  const copyable = computed(() => __props.copyLabel !== void 0 && __props.copiedLabel !== void 0);
3535
3400
  const scrolls = computed(() => !__props.wrap);
3536
3401
  return (_ctx, _cache) => {
3537
- return openBlock(), createElementBlock("figure", { class: normalizeClass(["rk-code", { "is-wrapped": __props.wrap }]) }, [__props.language || copyable.value ? (openBlock(), createElementBlock("figcaption", _hoisted_1$12, [__props.language ? (openBlock(), createElementBlock("span", _hoisted_2$10, toDisplayString(__props.language), 1)) : createCommentVNode("", true), copyable.value ? (openBlock(), createBlock(CopyButton_default, {
3402
+ return openBlock(), createElementBlock("figure", { class: normalizeClass(["rk-code", { "is-wrapped": __props.wrap }]) }, [__props.language || copyable.value ? (openBlock(), createElementBlock("figcaption", _hoisted_1$13, [__props.language ? (openBlock(), createElementBlock("span", _hoisted_2$11, toDisplayString(__props.language), 1)) : createCommentVNode("", true), copyable.value ? (openBlock(), createBlock(CopyButton_default, {
3538
3403
  key: 1,
3539
3404
  class: "rk-code-copy",
3540
3405
  text: __props.code,
@@ -3549,14 +3414,14 @@ var CodeBlock_default = /*#__PURE__*/ _plugin_vue_export_helper_default(/* @__PU
3549
3414
  tabindex: scrolls.value ? 0 : void 0,
3550
3415
  role: scrolls.value ? "region" : void 0,
3551
3416
  "aria-label": scrolls.value ? __props.label : void 0
3552
- }, [createElementVNode("code", null, [renderSlot(_ctx.$slots, "default", {}, () => [createTextVNode(toDisplayString(__props.code), 1)], true)])], 8, _hoisted_3$9)], 2);
3417
+ }, [createElementVNode("code", null, [renderSlot(_ctx.$slots, "default", {}, () => [createTextVNode(toDisplayString(__props.code), 1)], true)])], 8, _hoisted_3$10)], 2);
3553
3418
  };
3554
3419
  }
3555
3420
  }), [["__scopeId", "data-v-b45043be"]]);
3556
3421
  //#endregion
3557
3422
  //#region src/components/DescriptionList.vue?vue&type=script&setup=true&lang.ts
3558
- var _hoisted_1$11 = { class: "rk-dl-term" };
3559
- var _hoisted_2$9 = { class: "rk-dl-value" };
3423
+ var _hoisted_1$12 = { class: "rk-dl-term" };
3424
+ var _hoisted_2$10 = { class: "rk-dl-value" };
3560
3425
  //#endregion
3561
3426
  //#region src/components/DescriptionList.vue
3562
3427
  var DescriptionList_default = /*#__PURE__*/ _plugin_vue_export_helper_default(/* @__PURE__ */ defineComponent({
@@ -3571,16 +3436,16 @@ var DescriptionList_default = /*#__PURE__*/ _plugin_vue_export_helper_default(/*
3571
3436
  return openBlock(), createElementBlock("div", {
3572
3437
  key: item.key ?? item.term,
3573
3438
  class: "rk-dl-row"
3574
- }, [createElementVNode("dt", _hoisted_1$11, toDisplayString(item.term), 1), createElementVNode("dd", _hoisted_2$9, [renderSlot(_ctx.$slots, item.key ?? item.term, { item }, () => [createTextVNode(toDisplayString(item.description), 1)], true)])]);
3439
+ }, [createElementVNode("dt", _hoisted_1$12, toDisplayString(item.term), 1), createElementVNode("dd", _hoisted_2$10, [renderSlot(_ctx.$slots, item.key ?? item.term, { item }, () => [createTextVNode(toDisplayString(item.description), 1)], true)])]);
3575
3440
  }), 128))], 2);
3576
3441
  };
3577
3442
  }
3578
3443
  }), [["__scopeId", "data-v-831e205b"]]);
3579
3444
  //#endregion
3580
3445
  //#region src/components/FileDrop.vue?vue&type=script&setup=true&lang.ts
3581
- var _hoisted_1$10 = { class: "rk-drop" };
3582
- var _hoisted_2$8 = ["for"];
3583
- var _hoisted_3$8 = [
3446
+ var _hoisted_1$11 = { class: "rk-drop" };
3447
+ var _hoisted_2$9 = ["for"];
3448
+ var _hoisted_3$9 = [
3584
3449
  "id",
3585
3450
  "accept",
3586
3451
  "multiple",
@@ -3666,7 +3531,7 @@ var FileDrop_default = /*#__PURE__*/ _plugin_vue_export_helper_default(/* @__PUR
3666
3531
  const size = (bytes) => bytes >= 1048576 ? `${(bytes / 1048576).toFixed(1)} MB` : `${Math.max(1, Math.round(bytes / 1024))} KB`;
3667
3532
  const count = computed(() => model.value.length);
3668
3533
  return (_ctx, _cache) => {
3669
- return openBlock(), createElementBlock("div", _hoisted_1$10, [
3534
+ return openBlock(), createElementBlock("div", _hoisted_1$11, [
3670
3535
  createElementVNode("label", {
3671
3536
  class: normalizeClass(["rk-drop-box control", {
3672
3537
  "is-over": over.value,
@@ -3685,7 +3550,7 @@ var FileDrop_default = /*#__PURE__*/ _plugin_vue_export_helper_default(/* @__PUR
3685
3550
  multiple: __props.multiple,
3686
3551
  disabled: __props.disabled,
3687
3552
  onChange: onInput
3688
- }, null, 40, _hoisted_3$8),
3553
+ }, null, 40, _hoisted_3$9),
3689
3554
  createVNode(unref(Upload), {
3690
3555
  class: "text-ink-soft size-6",
3691
3556
  "aria-hidden": "true"
@@ -3693,7 +3558,7 @@ var FileDrop_default = /*#__PURE__*/ _plugin_vue_export_helper_default(/* @__PUR
3693
3558
  createElementVNode("span", _hoisted_4$6, toDisplayString(__props.label), 1),
3694
3559
  __props.hint ? (openBlock(), createElementBlock("span", _hoisted_5$3, toDisplayString(__props.hint), 1)) : createCommentVNode("", true),
3695
3560
  createElementVNode("span", _hoisted_6$3, toDisplayString(__props.browseLabel), 1)
3696
- ], 42, _hoisted_2$8),
3561
+ ], 42, _hoisted_2$9),
3697
3562
  refused.value && __props.tooLargeLabel ? (openBlock(), createElementBlock("p", _hoisted_7$1, toDisplayString(__props.tooLargeLabel), 1)) : createCommentVNode("", true),
3698
3563
  count.value ? (openBlock(), createElementBlock("ul", _hoisted_8, [(openBlock(true), createElementBlock(Fragment, null, renderList(model.value, (file, index) => {
3699
3564
  return openBlock(), createElementBlock("li", {
@@ -3721,10 +3586,10 @@ var FileDrop_default = /*#__PURE__*/ _plugin_vue_export_helper_default(/* @__PUR
3721
3586
  ]);
3722
3587
  };
3723
3588
  }
3724
- }), [["__scopeId", "data-v-a42eab69"]]);
3589
+ }), [["__scopeId", "data-v-6e903baf"]]);
3725
3590
  //#endregion
3726
3591
  //#region src/components/TagsInput.vue?vue&type=script&setup=true&lang.ts
3727
- var _hoisted_1$9 = [
3592
+ var _hoisted_1$10 = [
3728
3593
  "id",
3729
3594
  "placeholder",
3730
3595
  "aria-describedby",
@@ -3842,7 +3707,7 @@ var TagsInput_default = /*#__PURE__*/ _plugin_vue_export_helper_default(/* @__PU
3842
3707
  onKeydown,
3843
3708
  onPaste,
3844
3709
  onBlur: add
3845
- }, null, 40, _hoisted_1$9), [[vModelText, draft.value]])], 2)]),
3710
+ }, null, 40, _hoisted_1$10), [[vModelText, draft.value]])], 2)]),
3846
3711
  _: 1
3847
3712
  }, 8, [
3848
3713
  "label",
@@ -3856,7 +3721,7 @@ var TagsInput_default = /*#__PURE__*/ _plugin_vue_export_helper_default(/* @__PU
3856
3721
  }), [["__scopeId", "data-v-1fd08921"]]);
3857
3722
  //#endregion
3858
3723
  //#region src/components/BasePopover.vue?vue&type=script&setup=true&lang.ts
3859
- var _hoisted_1$8 = ["id", "aria-label"];
3724
+ var _hoisted_1$9 = ["id", "aria-label"];
3860
3725
  var FOCUSABLE = "a[href], button:not([disabled]), input:not([disabled]), select:not([disabled]), textarea:not([disabled]), [tabindex]:not([tabindex=\"-1\"])";
3861
3726
  //#endregion
3862
3727
  //#region src/components/BasePopover.vue
@@ -3973,21 +3838,21 @@ var BasePopover_default = /*#__PURE__*/ _plugin_vue_export_helper_default(/* @__
3973
3838
  role: "dialog",
3974
3839
  "aria-label": __props.label,
3975
3840
  tabindex: "-1"
3976
- }, [renderSlot(_ctx.$slots, "default", { close }, void 0, true)], 14, _hoisted_1$8)) : createCommentVNode("", true)]),
3841
+ }, [renderSlot(_ctx.$slots, "default", { close }, void 0, true)], 14, _hoisted_1$9)) : createCommentVNode("", true)]),
3977
3842
  _: 3
3978
3843
  })], 544);
3979
3844
  };
3980
3845
  }
3981
- }), [["__scopeId", "data-v-1371bff2"]]);
3846
+ }), [["__scopeId", "data-v-22d8f397"]]);
3982
3847
  //#endregion
3983
3848
  //#region src/components/TimePicker.vue?vue&type=script&setup=true&lang.ts
3984
- var _hoisted_1$7 = [
3849
+ var _hoisted_1$8 = [
3985
3850
  "id",
3986
3851
  "aria-describedby",
3987
3852
  "disabled"
3988
3853
  ];
3989
- var _hoisted_2$7 = { class: "truncate" };
3990
- var _hoisted_3$7 = { class: "rk-time-columns" };
3854
+ var _hoisted_2$8 = { class: "truncate" };
3855
+ var _hoisted_3$8 = { class: "rk-time-columns" };
3991
3856
  //#endregion
3992
3857
  //#region src/components/TimePicker.vue
3993
3858
  var TimePicker_default = /*#__PURE__*/ _plugin_vue_export_helper_default(/* @__PURE__ */ defineComponent({
@@ -4089,8 +3954,8 @@ var TimePicker_default = /*#__PURE__*/ _plugin_vue_export_helper_default(/* @__P
4089
3954
  }, props), [createVNode(unref(Clock), {
4090
3955
  class: "size-4 shrink-0",
4091
3956
  "aria-hidden": "true"
4092
- }), createElementVNode("span", _hoisted_2$7, toDisplayString(shown.value || __props.placeholder), 1)], 16, _hoisted_1$7)]),
4093
- default: withCtx(() => [createElementVNode("div", _hoisted_3$7, [createVNode(BaseListbox_default, {
3957
+ }), createElementVNode("span", _hoisted_2$8, toDisplayString(shown.value || __props.placeholder), 1)], 16, _hoisted_1$8)]),
3958
+ default: withCtx(() => [createElementVNode("div", _hoisted_3$8, [createVNode(BaseListbox_default, {
4094
3959
  "model-value": chosenHour.value,
4095
3960
  options: hours.value,
4096
3961
  label: __props.hoursLabel,
@@ -4123,15 +3988,15 @@ var TimePicker_default = /*#__PURE__*/ _plugin_vue_export_helper_default(/* @__P
4123
3988
  ]);
4124
3989
  };
4125
3990
  }
4126
- }), [["__scopeId", "data-v-0037adb2"]]);
3991
+ }), [["__scopeId", "data-v-ad58b4f3"]]);
4127
3992
  //#endregion
4128
3993
  //#region src/components/BaseTimeline.vue?vue&type=script&setup=true&lang.ts
4129
- var _hoisted_1$6 = ["aria-label"];
4130
- var _hoisted_2$6 = {
3994
+ var _hoisted_1$7 = ["aria-label"];
3995
+ var _hoisted_2$7 = {
4131
3996
  class: "rk-timeline-marker",
4132
3997
  "aria-hidden": "true"
4133
3998
  };
4134
- var _hoisted_3$6 = { class: "rk-timeline-time" };
3999
+ var _hoisted_3$7 = { class: "rk-timeline-time" };
4135
4000
  var _hoisted_4$5 = {
4136
4001
  key: 0,
4137
4002
  class: "rk-timeline-title"
@@ -4165,28 +4030,28 @@ var BaseTimeline_default = /*#__PURE__*/ _plugin_vue_export_helper_default(/* @_
4165
4030
  key: event.key,
4166
4031
  class: "rk-timeline-event"
4167
4032
  }, [
4168
- createElementVNode("span", _hoisted_2$6, [renderSlot(_ctx.$slots, "marker", { event }, () => [createElementVNode("span", { class: normalizeClass(["rk-timeline-dot", event.fill ?? "bg-primary"]) }, [event.icon ? (openBlock(), createBlock(resolveDynamicComponent(event.icon), {
4033
+ createElementVNode("span", _hoisted_2$7, [renderSlot(_ctx.$slots, "marker", { event }, () => [createElementVNode("span", { class: normalizeClass(["rk-timeline-dot", event.fill ?? "bg-primary"]) }, [event.icon ? (openBlock(), createBlock(resolveDynamicComponent(event.icon), {
4169
4034
  key: 0,
4170
4035
  class: "size-3"
4171
4036
  })) : createCommentVNode("", true)], 2)], true)]),
4172
- createElementVNode("p", _hoisted_3$6, toDisplayString(event.time), 1),
4037
+ createElementVNode("p", _hoisted_3$7, toDisplayString(event.time), 1),
4173
4038
  event.title ? (openBlock(), createElementBlock("p", _hoisted_4$5, toDisplayString(event.title), 1)) : createCommentVNode("", true),
4174
4039
  event.description ? (openBlock(), createElementBlock("p", _hoisted_5$2, toDisplayString(event.description), 1)) : createCommentVNode("", true),
4175
4040
  _ctx.$slots[event.key] || _ctx.$slots.default ? (openBlock(), createElementBlock("div", _hoisted_6$2, [_ctx.$slots[event.key] ? renderSlot(_ctx.$slots, event.key, { event }, void 0, true, 0) : renderSlot(_ctx.$slots, "default", { event }, void 0, true, 1)])) : createCommentVNode("", true)
4176
4041
  ]);
4177
- }), 128))], 8, _hoisted_1$6);
4042
+ }), 128))], 8, _hoisted_1$7);
4178
4043
  };
4179
4044
  }
4180
- }), [["__scopeId", "data-v-08b15ce8"]]);
4045
+ }), [["__scopeId", "data-v-8a452f82"]]);
4181
4046
  //#endregion
4182
4047
  //#region src/components/BaseDatePicker.vue?vue&type=script&setup=true&lang.ts
4183
- var _hoisted_1$5 = [
4048
+ var _hoisted_1$6 = [
4184
4049
  "id",
4185
4050
  "aria-describedby",
4186
4051
  "disabled"
4187
4052
  ];
4188
- var _hoisted_2$5 = { class: "truncate" };
4189
- var _hoisted_3$5 = ["aria-label", "disabled"];
4053
+ var _hoisted_2$6 = { class: "truncate" };
4054
+ var _hoisted_3$6 = ["aria-label", "disabled"];
4190
4055
  var _hoisted_4$4 = { class: "rk-date-panel" };
4191
4056
  var _hoisted_5$1 = {
4192
4057
  key: 0,
@@ -4276,7 +4141,7 @@ var BaseDatePicker_default = /*#__PURE__*/ _plugin_vue_export_helper_default(/*
4276
4141
  }, props), [createVNode(unref(CalendarDays), {
4277
4142
  class: "size-4 shrink-0",
4278
4143
  "aria-hidden": "true"
4279
- }), createElementVNode("span", _hoisted_2$5, toDisplayString(shown.value || __props.placeholder), 1)], 16, _hoisted_1$5), __props.clearLabel && shown.value ? (openBlock(), createElementBlock("button", {
4144
+ }), createElementVNode("span", _hoisted_2$6, toDisplayString(shown.value || __props.placeholder), 1)], 16, _hoisted_1$6), __props.clearLabel && shown.value ? (openBlock(), createElementBlock("button", {
4280
4145
  key: 0,
4281
4146
  type: "button",
4282
4147
  class: "rk-date-clear focus-ring",
@@ -4286,7 +4151,7 @@ var BaseDatePicker_default = /*#__PURE__*/ _plugin_vue_export_helper_default(/*
4286
4151
  }, [createVNode(unref(X), {
4287
4152
  class: "size-3.5",
4288
4153
  "aria-hidden": "true"
4289
- })], 8, _hoisted_3$5)) : createCommentVNode("", true)], 2)]),
4154
+ })], 8, _hoisted_3$6)) : createCommentVNode("", true)], 2)]),
4290
4155
  default: withCtx(() => [createElementVNode("div", _hoisted_4$4, [__props.presets?.length ? (openBlock(), createElementBlock("ul", _hoisted_5$1, [(openBlock(true), createElementBlock(Fragment, null, renderList(__props.presets, (preset) => {
4291
4156
  return openBlock(), createElementBlock("li", { key: preset.label }, [createElementVNode("button", {
4292
4157
  type: "button",
@@ -4324,15 +4189,15 @@ var BaseDatePicker_default = /*#__PURE__*/ _plugin_vue_export_helper_default(/*
4324
4189
  ]);
4325
4190
  };
4326
4191
  }
4327
- }), [["__scopeId", "data-v-154e27fb"]]);
4192
+ }), [["__scopeId", "data-v-42390973"]]);
4328
4193
  //#endregion
4329
4194
  //#region src/components/BasePopconfirm.vue?vue&type=script&setup=true&lang.ts
4330
- var _hoisted_1$4 = { class: "rk-confirm" };
4331
- var _hoisted_2$4 = {
4195
+ var _hoisted_1$5 = { class: "rk-confirm" };
4196
+ var _hoisted_2$5 = {
4332
4197
  key: 0,
4333
4198
  class: "rk-confirm-title"
4334
4199
  };
4335
- var _hoisted_3$4 = { class: "rk-confirm-message" };
4200
+ var _hoisted_3$5 = { class: "rk-confirm-message" };
4336
4201
  var _hoisted_4$3 = { class: "rk-confirm-actions" };
4337
4202
  //#endregion
4338
4203
  //#region src/components/BasePopconfirm.vue
@@ -4372,9 +4237,9 @@ var BasePopconfirm_default = /*#__PURE__*/ _plugin_vue_export_helper_default(/*
4372
4237
  align: "end"
4373
4238
  }, {
4374
4239
  trigger: withCtx((slotProps) => [renderSlot(_ctx.$slots, "trigger", normalizeProps(guardReactiveProps(slotProps)), void 0, true)]),
4375
- default: withCtx(({ close }) => [createElementVNode("div", _hoisted_1$4, [
4376
- __props.title ? (openBlock(), createElementBlock("p", _hoisted_2$4, toDisplayString(__props.title), 1)) : createCommentVNode("", true),
4377
- createElementVNode("p", _hoisted_3$4, toDisplayString(__props.message), 1),
4240
+ default: withCtx(({ close }) => [createElementVNode("div", _hoisted_1$5, [
4241
+ __props.title ? (openBlock(), createElementBlock("p", _hoisted_2$5, toDisplayString(__props.title), 1)) : createCommentVNode("", true),
4242
+ createElementVNode("p", _hoisted_3$5, toDisplayString(__props.message), 1),
4378
4243
  createElementVNode("div", _hoisted_4$3, [createVNode(BaseButton_default, {
4379
4244
  size: "sm",
4380
4245
  variant: "secondary",
@@ -4398,8 +4263,8 @@ var BasePopconfirm_default = /*#__PURE__*/ _plugin_vue_export_helper_default(/*
4398
4263
  }), [["__scopeId", "data-v-9453e511"]]);
4399
4264
  //#endregion
4400
4265
  //#region src/components/ToggleGroup.vue?vue&type=script&setup=true&lang.ts
4401
- var _hoisted_1$3 = ["aria-label"];
4402
- var _hoisted_2$3 = [
4266
+ var _hoisted_1$4 = ["aria-label"];
4267
+ var _hoisted_2$4 = [
4403
4268
  "aria-pressed",
4404
4269
  "aria-label",
4405
4270
  "disabled",
@@ -4407,7 +4272,7 @@ var _hoisted_2$3 = [
4407
4272
  "onClick",
4408
4273
  "onKeydown"
4409
4274
  ];
4410
- var _hoisted_3$3 = { key: 1 };
4275
+ var _hoisted_3$4 = { key: 1 };
4411
4276
  //#endregion
4412
4277
  //#region src/components/ToggleGroup.vue
4413
4278
  var ToggleGroup_default = /*#__PURE__*/ _plugin_vue_export_helper_default(/* @__PURE__ */ defineComponent({
@@ -4453,11 +4318,9 @@ var ToggleGroup_default = /*#__PURE__*/ _plugin_vue_export_helper_default(/* @__
4453
4318
  });
4454
4319
  function onKeydown(event, index) {
4455
4320
  const step = {
4456
- ArrowRight: 1,
4457
4321
  ArrowDown: 1,
4458
- ArrowLeft: -1,
4459
4322
  ArrowUp: -1
4460
- }[event.key];
4323
+ }[event.key] ?? (horizontalStep(event.key, event.currentTarget) || void 0);
4461
4324
  const enabled = buttons.value.filter((button) => !button.disabled);
4462
4325
  let target;
4463
4326
  if (step !== void 0) target = enabled[(enabled.indexOf(buttons.value[index]) + step + enabled.length) % enabled.length];
@@ -4490,16 +4353,16 @@ var ToggleGroup_default = /*#__PURE__*/ _plugin_vue_export_helper_default(/* @__
4490
4353
  key: 0,
4491
4354
  class: "rk-toggle-icon",
4492
4355
  "aria-hidden": "true"
4493
- })) : createCommentVNode("", true), !option.iconOnly ? (openBlock(), createElementBlock("span", _hoisted_3$3, toDisplayString(option.label), 1)) : createCommentVNode("", true)], 40, _hoisted_2$3);
4494
- }), 128))], 10, _hoisted_1$3);
4356
+ })) : createCommentVNode("", true), !option.iconOnly ? (openBlock(), createElementBlock("span", _hoisted_3$4, toDisplayString(option.label), 1)) : createCommentVNode("", true)], 40, _hoisted_2$4);
4357
+ }), 128))], 10, _hoisted_1$4);
4495
4358
  };
4496
4359
  }
4497
- }), [["__scopeId", "data-v-9076e36f"]]);
4360
+ }), [["__scopeId", "data-v-e40e4271"]]);
4498
4361
  //#endregion
4499
4362
  //#region src/components/PinInput.vue?vue&type=script&setup=true&lang.ts
4500
- var _hoisted_1$2 = { class: "rk-pin" };
4501
- var _hoisted_2$2 = ["aria-label"];
4502
- var _hoisted_3$2 = [
4363
+ var _hoisted_1$3 = { class: "rk-pin" };
4364
+ var _hoisted_2$3 = ["aria-label"];
4365
+ var _hoisted_3$3 = [
4503
4366
  "value",
4504
4367
  "type",
4505
4368
  "inputmode",
@@ -4586,16 +4449,13 @@ var PinInput_default = /*#__PURE__*/ _plugin_vue_export_helper_default(/* @__PUR
4586
4449
  if (target < 0) return;
4587
4450
  write(model.value.slice(0, target) + model.value.slice(target + 1));
4588
4451
  focusCell(target);
4589
- } else if (event.key === "ArrowLeft") {
4452
+ } else if (event.key === "ArrowLeft" || event.key === "ArrowRight") {
4590
4453
  event.preventDefault();
4591
- focusCell(index - 1);
4592
- } else if (event.key === "ArrowRight") {
4593
- event.preventDefault();
4594
- focusCell(index + 1);
4454
+ focusCell(index + horizontalStep(event.key, event.currentTarget));
4595
4455
  }
4596
4456
  }
4597
4457
  return (_ctx, _cache) => {
4598
- return openBlock(), createElementBlock("div", _hoisted_1$2, [createElementVNode("div", {
4458
+ return openBlock(), createElementBlock("div", _hoisted_1$3, [createElementVNode("div", {
4599
4459
  class: "rk-pin-cells",
4600
4460
  role: "group",
4601
4461
  "aria-label": __props.label
@@ -4618,8 +4478,8 @@ var PinInput_default = /*#__PURE__*/ _plugin_vue_export_helper_default(/* @__PUR
4618
4478
  onPaste: ($event) => onPaste($event, index),
4619
4479
  onKeydown: ($event) => onKeydown($event, index),
4620
4480
  onFocus: _cache[0] || (_cache[0] = ($event) => $event.target.select())
4621
- }, null, 42, _hoisted_3$2);
4622
- }), 128))], 8, _hoisted_2$2), __props.error ? (openBlock(), createElementBlock("p", {
4481
+ }, null, 42, _hoisted_3$3);
4482
+ }), 128))], 8, _hoisted_2$3), __props.error ? (openBlock(), createElementBlock("p", {
4623
4483
  key: 0,
4624
4484
  id: unref(errorId),
4625
4485
  class: "rk-pin-error",
@@ -4627,7 +4487,128 @@ var PinInput_default = /*#__PURE__*/ _plugin_vue_export_helper_default(/* @__PUR
4627
4487
  }, toDisplayString(__props.error), 9, _hoisted_4$2)) : createCommentVNode("", true)]);
4628
4488
  };
4629
4489
  }
4630
- }), [["__scopeId", "data-v-ba322d9c"]]);
4490
+ }), [["__scopeId", "data-v-1777eac8"]]);
4491
+ //#endregion
4492
+ //#region src/components/PasswordInput.vue?vue&type=script&setup=true&lang.ts
4493
+ var _hoisted_1$2 = { class: "relative" };
4494
+ var _hoisted_2$2 = [
4495
+ "id",
4496
+ "type",
4497
+ "value",
4498
+ "aria-invalid",
4499
+ "aria-describedby"
4500
+ ];
4501
+ var _hoisted_3$2 = ["aria-label", "aria-pressed"];
4502
+ var CONTROL_CLASS = "h-11 text-base";
4503
+ //#endregion
4504
+ //#region src/components/PasswordInput.vue
4505
+ var PasswordInput_default = /* @__PURE__ */ defineComponent({
4506
+ inheritAttrs: false,
4507
+ __name: "PasswordInput",
4508
+ props: {
4509
+ modelValue: { default: "" },
4510
+ label: {},
4511
+ toggleLabel: {},
4512
+ error: { default: "" },
4513
+ hint: { default: "" },
4514
+ labelHidden: {
4515
+ type: Boolean,
4516
+ default: false
4517
+ },
4518
+ fieldId: { default: () => void 0 },
4519
+ size: { default: "md" }
4520
+ },
4521
+ emits: ["update:modelValue", "toggle"],
4522
+ setup(__props, { emit: __emit }) {
4523
+ /**
4524
+ * A password field you can look at.
4525
+ *
4526
+ * The kit already ships `AuthForm` and `BaseInput type="password"`, which is
4527
+ * to say it ships the field and not the one thing every app then adds to it.
4528
+ * A password is the only field in a form whose value is hidden from the
4529
+ * person typing it, on the device where typing is least reliable — and a
4530
+ * generated password pasted into a phone is unverifiable without this. WCAG
4531
+ * 3.3.8 asks that authentication not depend on a cognitive function test;
4532
+ * being unable to see what you typed is one.
4533
+ *
4534
+ * The half that breaks, three ways, and all three compile:
4535
+ *
4536
+ * - **A `<button>` with no `type`.** Inside a form, its default is `submit`,
4537
+ * so looking at the password submits the form — usually with a password
4538
+ * half typed, which then arrives as a failed sign-in attempt.
4539
+ * - **A `<span>` or a bare icon.** Not focusable, not pressable by keyboard,
4540
+ * and named nothing.
4541
+ * - **A change nobody is told about.** The characters appearing is the whole
4542
+ * feedback, and it is visual only.
4543
+ *
4544
+ * The third is answered as a toggle button — one name, `aria-pressed` for
4545
+ * the state — rather than the swapped "Show"/"Hide" name that is the more
4546
+ * common shape. Two reasons. A name that changes under a focus that has not
4547
+ * moved is not reliably re-read, which is why every implementation of the
4548
+ * swapped-name version ends up adding a live region and two more sentences
4549
+ * on top of it; a pressed state on the focused control is announced by every
4550
+ * screen reader without one. And the kit has no language of its own, so the
4551
+ * cheaper pattern is also the one that asks the app for one string instead
4552
+ * of four.
4553
+ *
4554
+ * The field is never revealed by default and reverts to hidden on nothing:
4555
+ * that is deliberate. A component that hid it again on blur would be hiding
4556
+ * it at the exact moment the reader moved to the confirmation field to check
4557
+ * it against.
4558
+ */
4559
+ const emit = __emit;
4560
+ const visible = ref(false);
4561
+ function toggle() {
4562
+ visible.value = !visible.value;
4563
+ emit("toggle", visible.value);
4564
+ }
4565
+ return (_ctx, _cache) => {
4566
+ return openBlock(), createBlock(FormField_default, {
4567
+ label: __props.label,
4568
+ error: __props.error,
4569
+ hint: __props.hint,
4570
+ "label-hidden": __props.labelHidden,
4571
+ "field-id": __props.fieldId,
4572
+ size: __props.size
4573
+ }, {
4574
+ default: withCtx(({ id, describedBy, invalid }) => [createElementVNode("div", _hoisted_1$2, [createElementVNode("input", mergeProps({
4575
+ id,
4576
+ type: visible.value ? "text" : "password",
4577
+ value: __props.modelValue,
4578
+ "aria-invalid": invalid,
4579
+ "aria-describedby": describedBy,
4580
+ autocapitalize: "none",
4581
+ spellcheck: false
4582
+ }, _ctx.$attrs, {
4583
+ class: ["control text-ink rounded-card focus-visible:outline-primary w-full ps-3 pe-11 focus-visible:outline-2 focus-visible:outline-offset-1", [CONTROL_CLASS, invalid ? "border-negative" : ""]],
4584
+ onInput: _cache[0] || (_cache[0] = ($event) => emit("update:modelValue", $event.target.value))
4585
+ }), null, 16, _hoisted_2$2), createElementVNode("button", {
4586
+ type: "button",
4587
+ class: "focus-ring text-ink-soft hover:text-ink rounded-card absolute end-1 top-1/2 flex size-9 -translate-y-1/2 items-center justify-center",
4588
+ "aria-label": __props.toggleLabel,
4589
+ "aria-pressed": visible.value,
4590
+ onClick: toggle
4591
+ }, [visible.value ? (openBlock(), createBlock(unref(EyeOff), {
4592
+ key: 0,
4593
+ class: "size-4",
4594
+ "aria-hidden": "true"
4595
+ })) : (openBlock(), createBlock(unref(Eye), {
4596
+ key: 1,
4597
+ class: "size-4",
4598
+ "aria-hidden": "true"
4599
+ }))], 8, _hoisted_3$2)])]),
4600
+ _: 1
4601
+ }, 8, [
4602
+ "label",
4603
+ "error",
4604
+ "hint",
4605
+ "label-hidden",
4606
+ "field-id",
4607
+ "size"
4608
+ ]);
4609
+ };
4610
+ }
4611
+ });
4631
4612
  //#endregion
4632
4613
  //#region src/components/CircularProgress.vue?vue&type=script&setup=true&lang.ts
4633
4614
  var _hoisted_1$1 = [
@@ -4790,7 +4771,7 @@ var BaseStepper_default = /*#__PURE__*/ _plugin_vue_export_helper_default(/* @__
4790
4771
  }), 128))], 2)], 8, _hoisted_1);
4791
4772
  };
4792
4773
  }
4793
- }), [["__scopeId", "data-v-6aa3221b"]]);
4774
+ }), [["__scopeId", "data-v-f7513d9a"]]);
4794
4775
  //#endregion
4795
4776
  //#region src/i18n/runtime.ts
4796
4777
  /**
@@ -4884,7 +4865,10 @@ function createI18nRuntime(options) {
4884
4865
  watchEffect(() => {
4885
4866
  core.locale.value = activeLocale.value;
4886
4867
  setFormatLocale(intlLocale.value);
4887
- if (typeof document !== "undefined") document.documentElement.lang = activeLocale.value;
4868
+ if (typeof document !== "undefined") {
4869
+ document.documentElement.lang = activeLocale.value;
4870
+ document.documentElement.dir = textDirection(intlLocale.value);
4871
+ }
4888
4872
  });
4889
4873
  /** Read and write the language preference. */
4890
4874
  function useLocalePreference() {
@@ -4934,8 +4918,8 @@ function createI18nRuntime(options) {
4934
4918
  *
4935
4919
  * The fallback keeps `vitest` and `vite dev` honest, where no define runs.
4936
4920
  */
4937
- var VERSION = "2.21.0";
4921
+ var VERSION = "2.23.0";
4938
4922
  //#endregion
4939
- export { ActivityGrid_default as ActivityGrid, AppError, AvatarStack_default as AvatarStack, BaseAlert_default as BaseAlert, BaseAvatar_default as BaseAvatar, BaseBadge_default as BaseBadge, BaseButton_default as BaseButton, BaseCalendar_default as BaseCalendar, BaseCard_default as BaseCard, BaseCheckbox_default as BaseCheckbox, BaseChip_default as BaseChip, BaseCombobox_default as BaseCombobox, BaseDatePicker_default as BaseDatePicker, BaseInput_default as BaseInput, BaseKbd_default as BaseKbd, BaseLink_default as BaseLink, BaseListbox_default as BaseListbox, BaseMenu_default as BaseMenu, BasePopconfirm_default as BasePopconfirm, BasePopover_default as BasePopover, BaseRadioGroup_default as BaseRadioGroup, BaseRating_default as BaseRating, BaseSelect_default as BaseSelect, BaseSeparator_default as BaseSeparator, BaseSheet_default as BaseSheet, BaseSkeleton_default as BaseSkeleton, BaseSlider_default as BaseSlider, BaseSpinner_default as BaseSpinner, BaseStepper_default as BaseStepper, BaseSwitch_default as BaseSwitch, BaseTable_default as BaseTable, BaseTextarea_default as BaseTextarea, BaseTimeline_default as BaseTimeline, CircularProgress_default as CircularProgress, CodeBlock_default as CodeBlock, ColorPicker_default as ColorPicker, CopyButton_default as CopyButton, DescriptionList_default as DescriptionList, EmptyState_default as EmptyState, ErrorBoundary_default as ErrorBoundary, FileDrop_default as FileDrop, FormField_default as FormField, GoogleButton_default as GoogleButton, LocaleLinks_default as LocaleLinks, MATERIALS, NumberInput_default as NumberInput, PALETTES, PageContainer_default as PageContainer, PageHeader_default as PageHeader, PinInput_default as PinInput, PriceCard_default as PriceCard, ProgressBar_default as ProgressBar, SHEET_ROOT_ID, ScrollArea_default as ScrollArea, SectionHeading_default as SectionHeading, SegmentedControl_default as SegmentedControl, SettingsGroup_default as SettingsGroup, SettingsRow_default as SettingsRow, SkeletonList_default as SkeletonList, SliderField_default as SliderField, StatCard_default as StatCard, TabBar_default as TabBar, TagsInput_default as TagsInput, TimePicker_default as TimePicker, ToastHost_default as ToastHost, ToggleGroup_default as ToggleGroup, ToneDot_default as ToneDot, VERSION, VirtualList_default as VirtualList, addDays, applyMaterial, applyPalette, applyTheme, createI18nRuntime, downloadJson, eachDayOfYear, ensureSheetRoot, formatDate, formatNumber, fromDateKey, isApplePortable, isInstalled, isMaterial, isPaletteName, isThemePreference, lastNDays, leadingBlanks, needsIosInstall, readStoredTheme, registerErrorMapper, relativeDayLabel, safeRedirect, setFormatLocale, setMaterialStorageKey, setPaletteStorageKey, setThemeStorageKey, startOfWeek, tapFeedback, toAppError, toDateKey, toRedirectPath, todayKey, useDebouncedCallback, useDragScroll, useMaterial, useMediaQuery, useOnline, usePalette, useTheme, useToast, useToday, useVisualViewport };
4923
+ export { ActivityGrid_default as ActivityGrid, AnnounceHost_default as AnnounceHost, AppError, AvatarStack_default as AvatarStack, BaseAlert_default as BaseAlert, BaseAvatar_default as BaseAvatar, BaseBadge_default as BaseBadge, BaseButton_default as BaseButton, BaseCalendar_default as BaseCalendar, BaseCard_default as BaseCard, BaseCheckbox_default as BaseCheckbox, BaseChip_default as BaseChip, BaseCombobox_default as BaseCombobox, BaseDatePicker_default as BaseDatePicker, BaseInput_default as BaseInput, BaseKbd_default as BaseKbd, BaseLink_default as BaseLink, BaseListbox_default as BaseListbox, BaseMenu_default as BaseMenu, BasePopconfirm_default as BasePopconfirm, BasePopover_default as BasePopover, BaseRadioGroup_default as BaseRadioGroup, BaseRating_default as BaseRating, BaseSelect_default as BaseSelect, BaseSeparator_default as BaseSeparator, BaseSheet_default as BaseSheet, BaseSkeleton_default as BaseSkeleton, BaseSlider_default as BaseSlider, BaseSpinner_default as BaseSpinner, BaseStepper_default as BaseStepper, BaseSwitch_default as BaseSwitch, BaseTable_default as BaseTable, BaseTextarea_default as BaseTextarea, BaseTimeline_default as BaseTimeline, CircularProgress_default as CircularProgress, CodeBlock_default as CodeBlock, ColorPicker_default as ColorPicker, CopyButton_default as CopyButton, DescriptionList_default as DescriptionList, EmptyState_default as EmptyState, ErrorBoundary_default as ErrorBoundary, ErrorSummary_default as ErrorSummary, FileDrop_default as FileDrop, FormField_default as FormField, GoogleButton_default as GoogleButton, LocaleLinks_default as LocaleLinks, MATERIALS, NumberInput_default as NumberInput, PALETTES, PageContainer_default as PageContainer, PageHeader_default as PageHeader, PasswordInput_default as PasswordInput, PinInput_default as PinInput, PriceCard_default as PriceCard, ProgressBar_default as ProgressBar, SHEET_ROOT_ID, ScrollArea_default as ScrollArea, SectionHeading_default as SectionHeading, SegmentedControl_default as SegmentedControl, SettingsGroup_default as SettingsGroup, SettingsRow_default as SettingsRow, SkeletonList_default as SkeletonList, SliderField_default as SliderField, StatCard_default as StatCard, TabBar_default as TabBar, TagsInput_default as TagsInput, TimePicker_default as TimePicker, ToastHost_default as ToastHost, ToggleGroup_default as ToggleGroup, ToneDot_default as ToneDot, VERSION, VirtualList_default as VirtualList, addDays, announce, applyMaterial, applyPalette, applyTheme, createI18nRuntime, downloadJson, eachDayOfYear, elementDirection, ensureSheetRoot, formatDate, formatNumber, fromDateKey, horizontalStep, isApplePortable, isInstalled, isMaterial, isPaletteName, isThemePreference, lastNDays, leadingBlanks, needsIosInstall, readStoredTheme, registerErrorMapper, relativeDayLabel, safeRedirect, setFormatLocale, setMaterialStorageKey, setPaletteStorageKey, setThemeStorageKey, startOfWeek, tapFeedback, textDirection, toAppError, toDateKey, toRedirectPath, todayKey, useAnnounce, useDebouncedCallback, useDragScroll, useMaterial, useMediaQuery, useOnline, usePalette, useTheme, useToast, useToday, useVisualViewport };
4940
4924
 
4941
4925
  //# sourceMappingURL=index.js.map