rei-kit 2.22.0 → 2.24.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
- import { n as formatNumber, r as setFormatLocale, t as formatDate } from "./format-BEvBK1SJ.js";
3
- import { a as useBoundValue, c as ensureSheetRoot, n as BaseCheckbox_default, o as useVisualViewport, r as BaseSheet_default, s as SHEET_ROOT_ID, t as focusTarget } from "./focus-target-D0WsXwKh.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-B1LsfsZx.js";
2
+ import { a as formatNumber, i as formatDate, o as setFormatLocale, r as watchVisibility } from "./environment-Cz5KiC1t.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 { a as useMediaQuery, i as useMenuKeys, n as ScrollArea_default, o as useDragScroll, r as BaseSkeleton_default, t as BaseListbox_default } from "./BaseListbox-DMR-Zn1u.js";
6
+ import { a as BaseSkeleton_default, c as useMediaQuery, l as useDragScroll, n as ScrollArea_default, o as useMenuKeys, s as useAnchoredPanel, t as BaseListbox_default } from "./BaseListbox-BQoSwYdJ.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
@@ -272,17 +272,17 @@ function useDebouncedCallback(callback, delay = 800) {
272
272
  }
273
273
  //#endregion
274
274
  //#region src/components/BaseAvatar.vue?vue&type=script&setup=true&lang.ts
275
- var _hoisted_1$48 = [
275
+ var _hoisted_1$51 = [
276
276
  "role",
277
277
  "aria-label",
278
278
  "aria-hidden"
279
279
  ];
280
- var _hoisted_2$42 = ["src"];
281
- var _hoisted_3$28 = {
280
+ var _hoisted_2$45 = ["src"];
281
+ var _hoisted_3$31 = {
282
282
  key: 1,
283
283
  class: "rk-avatar-initials"
284
284
  };
285
- var _hoisted_4$20 = {
285
+ var _hoisted_4$22 = {
286
286
  key: 2,
287
287
  viewBox: "0 0 20 20",
288
288
  class: "rk-avatar-figure",
@@ -328,7 +328,7 @@ var BaseAvatar_default = /*#__PURE__*/ _plugin_vue_export_helper_default(/* @__P
328
328
  alt: "",
329
329
  class: "rk-avatar-img",
330
330
  onError: _cache[0] || (_cache[0] = ($event) => broken.value = true)
331
- }, null, 40, _hoisted_2$42)) : __props.fallback === "initials" && initials.value ? (openBlock(), createElementBlock("span", _hoisted_3$28, toDisplayString(initials.value), 1)) : (openBlock(), createElementBlock("svg", _hoisted_4$20, [..._cache[1] || (_cache[1] = [createElementVNode("circle", {
331
+ }, null, 40, _hoisted_2$45)) : __props.fallback === "initials" && initials.value ? (openBlock(), createElementBlock("span", _hoisted_3$31, toDisplayString(initials.value), 1)) : (openBlock(), createElementBlock("svg", _hoisted_4$22, [..._cache[1] || (_cache[1] = [createElementVNode("circle", {
332
332
  cx: "10",
333
333
  cy: "6.75",
334
334
  r: "3.25",
@@ -337,7 +337,7 @@ var BaseAvatar_default = /*#__PURE__*/ _plugin_vue_export_helper_default(/* @__P
337
337
  d: "M3.75 17c0-3.05 2.8-5.25 6.25-5.25S16.25 13.95 16.25 17",
338
338
  "stroke-width": "1.5",
339
339
  "stroke-linecap": "round"
340
- }, null, -1)])]))], 10, _hoisted_1$48);
340
+ }, null, -1)])]))], 10, _hoisted_1$51);
341
341
  };
342
342
  }
343
343
  }), [["__scopeId", "data-v-47586bec"]]);
@@ -362,12 +362,12 @@ var BaseBadge_default = /* @__PURE__ */ defineComponent({
362
362
  });
363
363
  //#endregion
364
364
  //#region src/components/BaseMenu.vue?vue&type=script&setup=true&lang.ts
365
- var _hoisted_1$47 = [
365
+ var _hoisted_1$50 = [
366
366
  "aria-label",
367
367
  "aria-expanded",
368
368
  "aria-controls"
369
369
  ];
370
- var _hoisted_2$41 = ["id"];
370
+ var _hoisted_2$44 = ["id"];
371
371
  //#endregion
372
372
  //#region src/components/BaseMenu.vue
373
373
  var BaseMenu_default = /*#__PURE__*/ _plugin_vue_export_helper_default(/* @__PURE__ */ defineComponent({
@@ -389,6 +389,11 @@ var BaseMenu_default = /*#__PURE__*/ _plugin_vue_export_helper_default(/* @__PUR
389
389
  const panel = ref(null);
390
390
  const trigger = ref(null);
391
391
  const id = useId();
392
+ const { placed, shift } = useAnchoredPanel({
393
+ root,
394
+ panel,
395
+ open
396
+ });
392
397
  const { items: menuItems, onKeydown: onMenuKeydown } = useMenuKeys({
393
398
  panel,
394
399
  onClose: () => open.value = false
@@ -436,17 +441,18 @@ var BaseMenu_default = /*#__PURE__*/ _plugin_vue_export_helper_default(/* @__PUR
436
441
  "aria-haspopup": true,
437
442
  "aria-controls": open.value ? unref(id) : void 0,
438
443
  onClick: _cache[0] || (_cache[0] = ($event) => open.value = !open.value)
439
- }, [renderSlot(_ctx.$slots, "trigger", { open: open.value }, void 0, true)], 8, _hoisted_1$47), open.value ? (openBlock(), createElementBlock("div", {
444
+ }, [renderSlot(_ctx.$slots, "trigger", { open: open.value }, void 0, true)], 8, _hoisted_1$50), open.value ? (openBlock(), createElementBlock("div", {
440
445
  key: 0,
441
446
  id: unref(id),
442
447
  ref_key: "panel",
443
448
  ref: panel,
444
- class: normalizeClass(["rk-menu-panel surface-overlay", `is-${__props.align}`]),
449
+ class: normalizeClass(["rk-menu-panel surface-overlay", [`is-${__props.align}`, `is-${unref(placed)}`]]),
450
+ style: normalizeStyle(unref(shift) ? { "--rk-menu-shift": `${unref(shift)}px` } : void 0),
445
451
  role: "menu"
446
- }, [renderSlot(_ctx.$slots, "default", {}, void 0, true)], 10, _hoisted_2$41)) : createCommentVNode("", true)], 544);
452
+ }, [renderSlot(_ctx.$slots, "default", {}, void 0, true)], 14, _hoisted_2$44)) : createCommentVNode("", true)], 544);
447
453
  };
448
454
  }
449
- }), [["__scopeId", "data-v-eaeecb75"]]);
455
+ }), [["__scopeId", "data-v-657b2528"]]);
450
456
  //#endregion
451
457
  //#region src/components/BaseCard.vue
452
458
  var BaseCard_default = /* @__PURE__ */ defineComponent({
@@ -568,13 +574,13 @@ function useVirtualWindow({ count, rowHeight, threshold }) {
568
574
  }
569
575
  //#endregion
570
576
  //#region src/components/BaseCombobox.vue?vue&type=script&setup=true&lang.ts
571
- var _hoisted_1$46 = ["for"];
572
- var _hoisted_2$40 = [
577
+ var _hoisted_1$49 = ["for"];
578
+ var _hoisted_2$43 = [
573
579
  "aria-label",
574
580
  "disabled",
575
581
  "onClick"
576
582
  ];
577
- var _hoisted_3$27 = [
583
+ var _hoisted_3$30 = [
578
584
  "id",
579
585
  "placeholder",
580
586
  "disabled",
@@ -583,13 +589,13 @@ var _hoisted_3$27 = [
583
589
  "aria-invalid",
584
590
  "aria-describedby"
585
591
  ];
586
- var _hoisted_4$19 = ["disabled"];
587
- var _hoisted_5$11 = [
592
+ var _hoisted_4$21 = ["disabled"];
593
+ var _hoisted_5$12 = [
588
594
  "aria-label",
589
595
  "aria-multiselectable",
590
596
  "aria-busy"
591
597
  ];
592
- var _hoisted_6$7 = [
598
+ var _hoisted_6$8 = [
593
599
  "id",
594
600
  "aria-selected",
595
601
  "aria-setsize",
@@ -597,7 +603,7 @@ var _hoisted_6$7 = [
597
603
  "onPointerdown",
598
604
  "onPointermove"
599
605
  ];
600
- var _hoisted_7$4 = {
606
+ var _hoisted_7$5 = {
601
607
  key: 2,
602
608
  class: "rk-combo-status"
603
609
  };
@@ -667,6 +673,11 @@ var BaseCombobox_default = /*#__PURE__*/ _plugin_vue_export_helper_default(/* @_
667
673
  const highlighted = ref(0);
668
674
  const root = ref(null);
669
675
  const list = ref(null);
676
+ const { placed, shift } = useAnchoredPanel({
677
+ root,
678
+ panel: list,
679
+ open
680
+ });
670
681
  const single = computed(() => multiple.value ? void 0 : chosenOptions.value[0]);
671
682
  /**
672
683
  * What the input shows.
@@ -805,7 +816,7 @@ var BaseCombobox_default = /*#__PURE__*/ _plugin_vue_export_helper_default(/* @_
805
816
  createElementVNode("label", {
806
817
  for: unref(id),
807
818
  class: "rk-combo-label"
808
- }, toDisplayString(__props.label), 9, _hoisted_1$46),
819
+ }, toDisplayString(__props.label), 9, _hoisted_1$49),
809
820
  createElementVNode("div", { class: normalizeClass(["rk-combo-field", multiple.value ? "is-multiple control" : ""]) }, [
810
821
  (openBlock(true), createElementBlock(Fragment, null, renderList(multiple.value ? chosenOptions.value : [], (option) => {
811
822
  return openBlock(), createElementBlock("span", {
@@ -818,7 +829,7 @@ var BaseCombobox_default = /*#__PURE__*/ _plugin_vue_export_helper_default(/* @_
818
829
  "aria-label": __props.removeLabel(option.label),
819
830
  disabled: __props.disabled,
820
831
  onClick: ($event) => remove(option.value)
821
- }, " × ", 8, _hoisted_2$40)) : createCommentVNode("", true)]);
832
+ }, " × ", 8, _hoisted_2$43)) : createCommentVNode("", true)]);
822
833
  }), 128)),
823
834
  withDirectives(createElementVNode("input", {
824
835
  id: unref(id),
@@ -837,7 +848,7 @@ var BaseCombobox_default = /*#__PURE__*/ _plugin_vue_export_helper_default(/* @_
837
848
  "aria-describedby": describedBy.value,
838
849
  onKeydown,
839
850
  onFocus: _cache[1] || (_cache[1] = ($event) => open.value = true)
840
- }, null, 42, _hoisted_3$27), [[vModelText, text.value]]),
851
+ }, null, 42, _hoisted_3$30), [[vModelText, text.value]]),
841
852
  createElementVNode("button", {
842
853
  type: "button",
843
854
  class: "rk-combo-toggle",
@@ -845,14 +856,15 @@ var BaseCombobox_default = /*#__PURE__*/ _plugin_vue_export_helper_default(/* @_
845
856
  "aria-hidden": "true",
846
857
  disabled: __props.disabled,
847
858
  onClick: _cache[2] || (_cache[2] = ($event) => open.value = !open.value)
848
- }, " ▾ ", 8, _hoisted_4$19)
859
+ }, " ▾ ", 8, _hoisted_4$21)
849
860
  ], 2),
850
861
  withDirectives(createElementVNode("ul", {
851
862
  id: listId,
852
863
  ref_key: "list",
853
864
  ref: list,
854
865
  role: "listbox",
855
- class: "rk-combo-list surface-overlay",
866
+ class: normalizeClass(["rk-combo-list surface-overlay", `is-${unref(placed)}`]),
867
+ style: normalizeStyle(unref(shift) ? { "--rk-combo-shift": `${unref(shift)}px` } : void 0),
856
868
  "aria-label": __props.label,
857
869
  "aria-multiselectable": multiple.value ? true : void 0,
858
870
  "aria-busy": __props.loading ? true : void 0,
@@ -878,21 +890,21 @@ var BaseCombobox_default = /*#__PURE__*/ _plugin_vue_export_helper_default(/* @_
878
890
  "aria-posinset": row.index + 1,
879
891
  onPointerdown: withModifiers(($event) => choose(row.option), ["prevent"]),
880
892
  onPointermove: ($event) => highlighted.value = row.index
881
- }, toDisplayString(row.option.label), 47, _hoisted_6$7);
893
+ }, toDisplayString(row.option.label), 47, _hoisted_6$8);
882
894
  }), 128)),
883
895
  unref(padBottom) > 0 ? (openBlock(), createElementBlock("li", {
884
896
  key: 1,
885
897
  style: normalizeStyle({ height: `${unref(padBottom)}px` }),
886
898
  "aria-hidden": "true"
887
899
  }, null, 4)) : createCommentVNode("", true),
888
- __props.loading ? (openBlock(), createElementBlock("li", _hoisted_7$4, [__props.loadingLabel ? (openBlock(), createElementBlock("span", _hoisted_8$3, toDisplayString(__props.loadingLabel), 1)) : createCommentVNode("", true), createElementVNode("span", _hoisted_9$3, [(openBlock(), createElementBlock(Fragment, null, renderList(3, (n) => {
900
+ __props.loading ? (openBlock(), createElementBlock("li", _hoisted_7$5, [__props.loadingLabel ? (openBlock(), createElementBlock("span", _hoisted_8$3, toDisplayString(__props.loadingLabel), 1)) : createCommentVNode("", true), createElementVNode("span", _hoisted_9$3, [(openBlock(), createElementBlock(Fragment, null, renderList(3, (n) => {
889
901
  return createVNode(BaseSkeleton_default, {
890
902
  key: n,
891
903
  shape: "text",
892
904
  height: "0.75rem"
893
905
  });
894
906
  }), 64))])])) : matches.value.length === 0 ? (openBlock(), createElementBlock("li", _hoisted_10$3, toDisplayString(__props.emptyLabel), 1)) : createCommentVNode("", true)
895
- ], 40, _hoisted_5$11), [[vShow, open.value]]),
907
+ ], 46, _hoisted_5$12), [[vShow, open.value]]),
896
908
  __props.error ? (openBlock(), createElementBlock("p", {
897
909
  key: 0,
898
910
  id: errorId,
@@ -905,16 +917,16 @@ var BaseCombobox_default = /*#__PURE__*/ _plugin_vue_export_helper_default(/* @_
905
917
  ], 512);
906
918
  };
907
919
  }
908
- }), [["__scopeId", "data-v-0ae3b425"]]);
920
+ }), [["__scopeId", "data-v-f02a0924"]]);
909
921
  //#endregion
910
922
  //#region src/components/BaseRadioGroup.vue?vue&type=script&setup=true&lang.ts
911
- var _hoisted_1$45 = ["aria-describedby"];
912
- var _hoisted_2$39 = [
923
+ var _hoisted_1$48 = ["aria-describedby"];
924
+ var _hoisted_2$42 = [
913
925
  "name",
914
926
  "value",
915
927
  "disabled"
916
928
  ];
917
- var _hoisted_3$26 = { class: "text-ink text-sm" };
929
+ var _hoisted_3$29 = { class: "text-ink text-sm" };
918
930
  //#endregion
919
931
  //#region src/components/BaseRadioGroup.vue
920
932
  var BaseRadioGroup_default = /* @__PURE__ */ defineComponent({
@@ -958,7 +970,7 @@ var BaseRadioGroup_default = /* @__PURE__ */ defineComponent({
958
970
  value: option.value,
959
971
  disabled: option.disabled,
960
972
  class: "accent-primary focus-visible:outline-primary size-4 shrink-0 focus-visible:outline-2 focus-visible:outline-offset-2"
961
- }, null, 8, _hoisted_2$39), [[vModelRadio, unref(model)]]), createElementVNode("span", _hoisted_3$26, toDisplayString(option.label), 1)], 2);
973
+ }, null, 8, _hoisted_2$42), [[vModelRadio, unref(model)]]), createElementVNode("span", _hoisted_3$29, toDisplayString(option.label), 1)], 2);
962
974
  }), 128)),
963
975
  __props.error ? (openBlock(), createElementBlock("p", {
964
976
  key: 0,
@@ -969,24 +981,24 @@ var BaseRadioGroup_default = /* @__PURE__ */ defineComponent({
969
981
  id: hintId,
970
982
  class: "text-ink-soft text-xs"
971
983
  }, toDisplayString(__props.hint), 1)) : createCommentVNode("", true)
972
- ], 8, _hoisted_1$45);
984
+ ], 8, _hoisted_1$48);
973
985
  };
974
986
  }
975
987
  });
976
988
  //#endregion
977
989
  //#region src/components/BaseSelect.vue?vue&type=script&setup=true&lang.ts
978
- var _hoisted_1$44 = { class: "relative" };
979
- var _hoisted_2$38 = [
990
+ var _hoisted_1$47 = { class: "relative" };
991
+ var _hoisted_2$41 = [
980
992
  "id",
981
993
  "aria-invalid",
982
994
  "aria-describedby"
983
995
  ];
984
- var _hoisted_3$25 = {
996
+ var _hoisted_3$28 = {
985
997
  key: 0,
986
998
  value: void 0,
987
999
  disabled: ""
988
1000
  };
989
- var _hoisted_4$18 = ["value", "disabled"];
1001
+ var _hoisted_4$20 = ["value", "disabled"];
990
1002
  //#endregion
991
1003
  //#region src/components/BaseSelect.vue
992
1004
  var BaseSelect_default = /* @__PURE__ */ defineComponent({
@@ -1022,7 +1034,7 @@ var BaseSelect_default = /* @__PURE__ */ defineComponent({
1022
1034
  "label-hidden": __props.labelHidden,
1023
1035
  size: __props.size
1024
1036
  }, {
1025
- default: withCtx(({ id, describedBy, invalid }) => [createElementVNode("div", _hoisted_1$44, [withDirectives(createElementVNode("select", {
1037
+ default: withCtx(({ id, describedBy, invalid }) => [createElementVNode("div", _hoisted_1$47, [withDirectives(createElementVNode("select", {
1026
1038
  id,
1027
1039
  "onUpdate:modelValue": _cache[0] || (_cache[0] = ($event) => model.value = $event),
1028
1040
  "aria-invalid": invalid,
@@ -1032,13 +1044,13 @@ var BaseSelect_default = /* @__PURE__ */ defineComponent({
1032
1044
  __props.variant === "unstyled" ? "" : SIZE_CLASS[__props.size],
1033
1045
  __props.variant !== "unstyled" && invalid ? "border-negative" : ""
1034
1046
  ]])
1035
- }, [__props.placeholder ? (openBlock(), createElementBlock("option", _hoisted_3$25, toDisplayString(__props.placeholder), 1)) : createCommentVNode("", true), (openBlock(true), createElementBlock(Fragment, null, renderList(__props.options, (option) => {
1047
+ }, [__props.placeholder ? (openBlock(), createElementBlock("option", _hoisted_3$28, toDisplayString(__props.placeholder), 1)) : createCommentVNode("", true), (openBlock(true), createElementBlock(Fragment, null, renderList(__props.options, (option) => {
1036
1048
  return openBlock(), createElementBlock("option", {
1037
1049
  key: option.value,
1038
1050
  value: option.value,
1039
1051
  disabled: option.disabled
1040
- }, toDisplayString(option.label), 9, _hoisted_4$18);
1041
- }), 128))], 10, _hoisted_2$38), [[vModelSelect, model.value]]), createVNode(unref(ChevronDown), {
1052
+ }, toDisplayString(option.label), 9, _hoisted_4$20);
1053
+ }), 128))], 10, _hoisted_2$41), [[vModelSelect, model.value]]), createVNode(unref(ChevronDown), {
1042
1054
  class: "text-ink-soft pointer-events-none absolute top-1/2 right-3 size-4 -translate-y-1/2",
1043
1055
  "aria-hidden": "true"
1044
1056
  })])]),
@@ -1055,11 +1067,11 @@ var BaseSelect_default = /* @__PURE__ */ defineComponent({
1055
1067
  });
1056
1068
  //#endregion
1057
1069
  //#region src/components/BaseSlider.vue?vue&type=script&setup=true&lang.ts
1058
- var _hoisted_1$43 = { class: "rk-slider" };
1059
- var _hoisted_2$37 = { class: "rk-slider-head" };
1060
- var _hoisted_3$24 = ["for"];
1061
- var _hoisted_4$17 = ["for"];
1062
- var _hoisted_5$10 = [
1070
+ var _hoisted_1$46 = { class: "rk-slider" };
1071
+ var _hoisted_2$40 = { class: "rk-slider-head" };
1072
+ var _hoisted_3$27 = ["for"];
1073
+ var _hoisted_4$19 = ["for"];
1074
+ var _hoisted_5$11 = [
1063
1075
  "id",
1064
1076
  "min",
1065
1077
  "max",
@@ -1103,15 +1115,15 @@ var BaseSlider_default = /*#__PURE__*/ _plugin_vue_export_helper_default(/* @__P
1103
1115
  return span <= 0 ? 0 : (model.value - __props.min) / span * 100;
1104
1116
  });
1105
1117
  return (_ctx, _cache) => {
1106
- return openBlock(), createElementBlock("div", _hoisted_1$43, [
1107
- createElementVNode("div", _hoisted_2$37, [createElementVNode("label", {
1118
+ return openBlock(), createElementBlock("div", _hoisted_1$46, [
1119
+ createElementVNode("div", _hoisted_2$40, [createElementVNode("label", {
1108
1120
  for: unref(id),
1109
1121
  class: "rk-slider-label"
1110
- }, toDisplayString(__props.label), 9, _hoisted_3$24), __props.showValue ? (openBlock(), createElementBlock("output", {
1122
+ }, toDisplayString(__props.label), 9, _hoisted_3$27), __props.showValue ? (openBlock(), createElementBlock("output", {
1111
1123
  key: 0,
1112
1124
  for: unref(id),
1113
1125
  class: "rk-slider-value"
1114
- }, toDisplayString(text.value), 9, _hoisted_4$17)) : createCommentVNode("", true)]),
1126
+ }, toDisplayString(text.value), 9, _hoisted_4$19)) : createCommentVNode("", true)]),
1115
1127
  withDirectives(createElementVNode("input", {
1116
1128
  id: unref(id),
1117
1129
  "onUpdate:modelValue": _cache[0] || (_cache[0] = ($event) => model.value = $event),
@@ -1124,7 +1136,7 @@ var BaseSlider_default = /*#__PURE__*/ _plugin_vue_export_helper_default(/* @__P
1124
1136
  "aria-valuetext": text.value,
1125
1137
  "aria-describedby": __props.hint ? hintId : void 0,
1126
1138
  style: normalizeStyle({ "--rk-slider-filled": `${filled.value}%` })
1127
- }, null, 12, _hoisted_5$10), [[
1139
+ }, null, 12, _hoisted_5$11), [[
1128
1140
  vModelText,
1129
1141
  model.value,
1130
1142
  void 0,
@@ -1138,11 +1150,11 @@ var BaseSlider_default = /*#__PURE__*/ _plugin_vue_export_helper_default(/* @__P
1138
1150
  ]);
1139
1151
  };
1140
1152
  }
1141
- }), [["__scopeId", "data-v-7fa2769b"]]);
1153
+ }), [["__scopeId", "data-v-8f8ae87b"]]);
1142
1154
  //#endregion
1143
1155
  //#region src/components/NumberInput.vue?vue&type=script&setup=true&lang.ts
1144
- var _hoisted_1$42 = ["aria-label", "disabled"];
1145
- var _hoisted_2$36 = [
1156
+ var _hoisted_1$45 = ["aria-label", "disabled"];
1157
+ var _hoisted_2$39 = [
1146
1158
  "id",
1147
1159
  "value",
1148
1160
  "aria-valuenow",
@@ -1152,7 +1164,7 @@ var _hoisted_2$36 = [
1152
1164
  "aria-describedby",
1153
1165
  "disabled"
1154
1166
  ];
1155
- var _hoisted_3$23 = ["aria-label", "disabled"];
1167
+ var _hoisted_3$26 = ["aria-label", "disabled"];
1156
1168
  //#endregion
1157
1169
  //#region src/components/NumberInput.vue
1158
1170
  var NumberInput_default = /*#__PURE__*/ _plugin_vue_export_helper_default(/* @__PURE__ */ defineComponent({
@@ -1255,7 +1267,7 @@ var NumberInput_default = /*#__PURE__*/ _plugin_vue_export_helper_default(/* @__
1255
1267
  }, [createVNode(unref(Minus), {
1256
1268
  class: "size-4",
1257
1269
  "aria-hidden": "true"
1258
- })], 8, _hoisted_1$42),
1270
+ })], 8, _hoisted_1$45),
1259
1271
  createElementVNode("input", {
1260
1272
  id,
1261
1273
  value: draft.value,
@@ -1273,7 +1285,7 @@ var NumberInput_default = /*#__PURE__*/ _plugin_vue_export_helper_default(/* @__
1273
1285
  onInput,
1274
1286
  onBlur: commit,
1275
1287
  onKeydown
1276
- }, null, 40, _hoisted_2$36),
1288
+ }, null, 40, _hoisted_2$39),
1277
1289
  createElementVNode("button", {
1278
1290
  type: "button",
1279
1291
  class: "rk-number-step focus-ring",
@@ -1284,7 +1296,7 @@ var NumberInput_default = /*#__PURE__*/ _plugin_vue_export_helper_default(/* @__
1284
1296
  }, [createVNode(unref(Plus), {
1285
1297
  class: "size-4",
1286
1298
  "aria-hidden": "true"
1287
- })], 8, _hoisted_3$23)
1299
+ })], 8, _hoisted_3$26)
1288
1300
  ], 2)]),
1289
1301
  _: 1
1290
1302
  }, 8, [
@@ -1299,7 +1311,7 @@ var NumberInput_default = /*#__PURE__*/ _plugin_vue_export_helper_default(/* @__
1299
1311
  }), [["__scopeId", "data-v-082bd3d7"]]);
1300
1312
  //#endregion
1301
1313
  //#region src/components/SliderField.vue?vue&type=script&setup=true&lang.ts
1302
- var _hoisted_1$41 = { class: "rk-slider-field" };
1314
+ var _hoisted_1$44 = { class: "rk-slider-field" };
1303
1315
  //#endregion
1304
1316
  //#region src/components/SliderField.vue
1305
1317
  var SliderField_default = /*#__PURE__*/ _plugin_vue_export_helper_default(/* @__PURE__ */ defineComponent({
@@ -1340,7 +1352,7 @@ var SliderField_default = /*#__PURE__*/ _plugin_vue_export_helper_default(/* @__
1340
1352
  }
1341
1353
  });
1342
1354
  return (_ctx, _cache) => {
1343
- return openBlock(), createElementBlock("div", _hoisted_1$41, [createVNode(BaseSlider_default, {
1355
+ return openBlock(), createElementBlock("div", _hoisted_1$44, [createVNode(BaseSlider_default, {
1344
1356
  modelValue: model.value,
1345
1357
  "onUpdate:modelValue": _cache[0] || (_cache[0] = ($event) => model.value = $event),
1346
1358
  label: __props.label,
@@ -1388,11 +1400,11 @@ var SliderField_default = /*#__PURE__*/ _plugin_vue_export_helper_default(/* @__
1388
1400
  }), [["__scopeId", "data-v-6ec3163a"]]);
1389
1401
  //#endregion
1390
1402
  //#region src/components/BaseSpinner.vue?vue&type=script&setup=true&lang.ts
1391
- var _hoisted_1$40 = {
1403
+ var _hoisted_1$43 = {
1392
1404
  class: "rk-spin-wrap",
1393
1405
  role: "status"
1394
1406
  };
1395
- var _hoisted_2$35 = { class: "rk-spin-label" };
1407
+ var _hoisted_2$38 = { class: "rk-spin-label" };
1396
1408
  //#endregion
1397
1409
  //#region src/components/BaseSpinner.vue
1398
1410
  var BaseSpinner_default = /*#__PURE__*/ _plugin_vue_export_helper_default(/* @__PURE__ */ defineComponent({
@@ -1420,26 +1432,26 @@ var BaseSpinner_default = /*#__PURE__*/ _plugin_vue_export_helper_default(/* @__
1420
1432
  lg: "2.5rem"
1421
1433
  };
1422
1434
  return (_ctx, _cache) => {
1423
- return openBlock(), createElementBlock("span", _hoisted_1$40, [createElementVNode("span", {
1435
+ return openBlock(), createElementBlock("span", _hoisted_1$43, [createElementVNode("span", {
1424
1436
  class: "rk-spin",
1425
1437
  style: normalizeStyle({
1426
1438
  width: SIZES[__props.size],
1427
1439
  height: SIZES[__props.size]
1428
1440
  }),
1429
1441
  "aria-hidden": "true"
1430
- }, null, 4), createElementVNode("span", _hoisted_2$35, toDisplayString(__props.label), 1)]);
1442
+ }, null, 4), createElementVNode("span", _hoisted_2$38, toDisplayString(__props.label), 1)]);
1431
1443
  };
1432
1444
  }
1433
1445
  }), [["__scopeId", "data-v-842da62c"]]);
1434
1446
  //#endregion
1435
1447
  //#region src/components/BaseSwitch.vue?vue&type=script&setup=true&lang.ts
1436
- var _hoisted_1$39 = { class: "flex items-center justify-between gap-4" };
1437
- var _hoisted_2$34 = {
1448
+ var _hoisted_1$42 = { class: "flex items-center justify-between gap-4" };
1449
+ var _hoisted_2$37 = {
1438
1450
  key: 0,
1439
1451
  class: "min-w-0"
1440
1452
  };
1441
- var _hoisted_3$22 = ["id"];
1442
- var _hoisted_4$16 = [
1453
+ var _hoisted_3$25 = ["id"];
1454
+ var _hoisted_4$18 = [
1443
1455
  "aria-checked",
1444
1456
  "aria-labelledby",
1445
1457
  "aria-label",
@@ -1478,10 +1490,10 @@ var BaseSwitch_default = /*#__PURE__*/ _plugin_vue_export_helper_default(/* @__P
1478
1490
  if (!__props.disabled) model.value = !model.value;
1479
1491
  }
1480
1492
  return (_ctx, _cache) => {
1481
- return openBlock(), createElementBlock("div", _hoisted_1$39, [!__props.labelHidden ? (openBlock(), createElementBlock("span", _hoisted_2$34, [createElementVNode("span", {
1493
+ return openBlock(), createElementBlock("div", _hoisted_1$42, [!__props.labelHidden ? (openBlock(), createElementBlock("span", _hoisted_2$37, [createElementVNode("span", {
1482
1494
  id: unref(id),
1483
1495
  class: "text-ink block text-sm"
1484
- }, toDisplayString(__props.label), 9, _hoisted_3$22), __props.hint ? (openBlock(), createElementBlock("span", {
1496
+ }, toDisplayString(__props.label), 9, _hoisted_3$25), __props.hint ? (openBlock(), createElementBlock("span", {
1485
1497
  key: 0,
1486
1498
  id: hintId,
1487
1499
  class: "text-ink-soft mt-0.5 block text-xs"
@@ -1498,16 +1510,16 @@ var BaseSwitch_default = /*#__PURE__*/ _plugin_vue_export_helper_default(/* @__P
1498
1510
  }, [..._cache[0] || (_cache[0] = [createElementVNode("span", {
1499
1511
  class: "rk-switch-knob",
1500
1512
  "aria-hidden": "true"
1501
- }, null, -1)])], 10, _hoisted_4$16)]);
1513
+ }, null, -1)])], 10, _hoisted_4$18)]);
1502
1514
  };
1503
1515
  }
1504
1516
  }), [["__scopeId", "data-v-d90e1aa6"]]);
1505
1517
  //#endregion
1506
1518
  //#region src/components/BaseTable.vue?vue&type=script&setup=true&lang.ts
1507
- var _hoisted_1$38 = { class: "rk-table" };
1508
- var _hoisted_2$33 = { key: 0 };
1509
- var _hoisted_3$21 = { key: 1 };
1510
- var _hoisted_4$15 = ["colspan"];
1519
+ var _hoisted_1$41 = { class: "rk-table" };
1520
+ var _hoisted_2$36 = { key: 0 };
1521
+ var _hoisted_3$24 = { key: 1 };
1522
+ var _hoisted_4$17 = ["colspan"];
1511
1523
  //#endregion
1512
1524
  //#region src/components/BaseTable.vue
1513
1525
  var BaseTable_default = /*#__PURE__*/ _plugin_vue_export_helper_default(/* @__PURE__ */ defineComponent({
@@ -1530,7 +1542,7 @@ var BaseTable_default = /*#__PURE__*/ _plugin_vue_export_helper_default(/* @__PU
1530
1542
  label: __props.caption,
1531
1543
  class: "rk-table-scroll"
1532
1544
  }, {
1533
- default: withCtx(() => [createElementVNode("table", _hoisted_1$38, [
1545
+ default: withCtx(() => [createElementVNode("table", _hoisted_1$41, [
1534
1546
  createElementVNode("caption", { class: normalizeClass(__props.captionHidden ? "rk-table-caption-hidden" : "rk-table-caption") }, toDisplayString(__props.caption), 3),
1535
1547
  createElementVNode("thead", null, [createElementVNode("tr", null, [(openBlock(true), createElementBlock(Fragment, null, renderList(__props.columns, (column) => {
1536
1548
  return openBlock(), createElementBlock("th", {
@@ -1539,7 +1551,7 @@ var BaseTable_default = /*#__PURE__*/ _plugin_vue_export_helper_default(/* @__PU
1539
1551
  class: normalizeClass([column.align && `is-${column.align}`, column.nowrap && "is-nowrap"])
1540
1552
  }, toDisplayString(column.label), 3);
1541
1553
  }), 128))])]),
1542
- __props.rows.length > 0 ? (openBlock(), createElementBlock("tbody", _hoisted_2$33, [(openBlock(true), createElementBlock(Fragment, null, renderList(__props.rows, (row, index) => {
1554
+ __props.rows.length > 0 ? (openBlock(), createElementBlock("tbody", _hoisted_2$36, [(openBlock(true), createElementBlock(Fragment, null, renderList(__props.rows, (row, index) => {
1543
1555
  return openBlock(), createElementBlock("tr", { key: keyFor(row, index) }, [(openBlock(true), createElementBlock(Fragment, null, renderList(__props.columns, (column) => {
1544
1556
  return openBlock(), createElementBlock("td", {
1545
1557
  key: column.key,
@@ -1549,10 +1561,10 @@ var BaseTable_default = /*#__PURE__*/ _plugin_vue_export_helper_default(/* @__PU
1549
1561
  value: row[column.key]
1550
1562
  }, () => [createTextVNode(toDisplayString(row[column.key]), 1)], true)], 2);
1551
1563
  }), 128))]);
1552
- }), 128))])) : (openBlock(), createElementBlock("tbody", _hoisted_3$21, [createElementVNode("tr", null, [createElementVNode("td", {
1564
+ }), 128))])) : (openBlock(), createElementBlock("tbody", _hoisted_3$24, [createElementVNode("tr", null, [createElementVNode("td", {
1553
1565
  colspan: __props.columns.length,
1554
1566
  class: "rk-table-empty"
1555
- }, [renderSlot(_ctx.$slots, "empty", {}, void 0, true)], 8, _hoisted_4$15)])]))
1567
+ }, [renderSlot(_ctx.$slots, "empty", {}, void 0, true)], 8, _hoisted_4$17)])]))
1556
1568
  ])]),
1557
1569
  _: 3
1558
1570
  }, 8, ["label"]);
@@ -1561,7 +1573,7 @@ var BaseTable_default = /*#__PURE__*/ _plugin_vue_export_helper_default(/* @__PU
1561
1573
  }), [["__scopeId", "data-v-cc1197ef"]]);
1562
1574
  //#endregion
1563
1575
  //#region src/components/BaseTextarea.vue?vue&type=script&setup=true&lang.ts
1564
- var _hoisted_1$37 = [
1576
+ var _hoisted_1$40 = [
1565
1577
  "id",
1566
1578
  "rows",
1567
1579
  "aria-invalid",
@@ -1607,7 +1619,7 @@ var BaseTextarea_default = /* @__PURE__ */ defineComponent({
1607
1619
  __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",
1608
1620
  "text-base",
1609
1621
  __props.variant !== "unstyled" && invalid ? "border-negative" : ""
1610
- ] }), null, 16, _hoisted_1$37), [[vModelText, unref(model)]])]),
1622
+ ] }), null, 16, _hoisted_1$40), [[vModelText, unref(model)]])]),
1611
1623
  _: 1
1612
1624
  }, 8, [
1613
1625
  "label",
@@ -1621,17 +1633,17 @@ var BaseTextarea_default = /* @__PURE__ */ defineComponent({
1621
1633
  });
1622
1634
  //#endregion
1623
1635
  //#region src/components/EmptyState.vue?vue&type=script&setup=true&lang.ts
1624
- var _hoisted_1$36 = { class: "flex flex-col items-center gap-3 px-6 py-10 text-center" };
1625
- var _hoisted_2$32 = {
1636
+ var _hoisted_1$39 = { class: "flex flex-col items-center gap-3 px-6 py-10 text-center" };
1637
+ var _hoisted_2$35 = {
1626
1638
  key: 0,
1627
1639
  class: "bg-muted text-primary rounded-card flex size-12 items-center justify-center"
1628
1640
  };
1629
- var _hoisted_3$20 = { class: "text-ink text-base font-semibold" };
1630
- var _hoisted_4$14 = {
1641
+ var _hoisted_3$23 = { class: "text-ink text-base font-semibold" };
1642
+ var _hoisted_4$16 = {
1631
1643
  key: 1,
1632
1644
  class: "text-ink-soft max-w-[36ch] text-sm"
1633
1645
  };
1634
- var _hoisted_5$9 = {
1646
+ var _hoisted_5$10 = {
1635
1647
  key: 2,
1636
1648
  class: "mt-2 flex w-full flex-col gap-2"
1637
1649
  };
@@ -1653,11 +1665,11 @@ var EmptyState_default = /* @__PURE__ */ defineComponent({
1653
1665
  * goes — the button that creates the first one.
1654
1666
  */
1655
1667
  return (_ctx, _cache) => {
1656
- return openBlock(), createElementBlock("div", _hoisted_1$36, [
1657
- _ctx.$slots.icon ? (openBlock(), createElementBlock("div", _hoisted_2$32, [renderSlot(_ctx.$slots, "icon")])) : createCommentVNode("", true),
1658
- createElementVNode("h3", _hoisted_3$20, 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)
1668
+ return openBlock(), createElementBlock("div", _hoisted_1$39, [
1669
+ _ctx.$slots.icon ? (openBlock(), createElementBlock("div", _hoisted_2$35, [renderSlot(_ctx.$slots, "icon")])) : createCommentVNode("", true),
1670
+ createElementVNode("h3", _hoisted_3$23, toDisplayString(__props.title), 1),
1671
+ __props.description ? (openBlock(), createElementBlock("p", _hoisted_4$16, toDisplayString(__props.description), 1)) : createCommentVNode("", true),
1672
+ _ctx.$slots.action ? (openBlock(), createElementBlock("div", _hoisted_5$10, [renderSlot(_ctx.$slots, "action")])) : createCommentVNode("", true)
1661
1673
  ]);
1662
1674
  };
1663
1675
  }
@@ -1724,11 +1736,11 @@ var PageContainer_default = /* @__PURE__ */ defineComponent({
1724
1736
  });
1725
1737
  //#endregion
1726
1738
  //#region src/components/PageHeader.vue?vue&type=script&setup=true&lang.ts
1727
- var _hoisted_1$35 = { class: "grid h-12 shrink-0 grid-cols-[2.5rem_1fr_2.5rem] items-center" };
1728
- var _hoisted_2$31 = { class: "justify-self-start" };
1729
- var _hoisted_3$19 = { 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" };
1739
+ var _hoisted_1$38 = { class: "grid h-12 shrink-0 grid-cols-[2.5rem_1fr_2.5rem] items-center" };
1740
+ var _hoisted_2$34 = { class: "justify-self-start" };
1741
+ var _hoisted_3$22 = { class: "text-ink flex min-w-0 justify-center text-base font-semibold tabular-nums" };
1742
+ var _hoisted_4$15 = { class: "truncate" };
1743
+ var _hoisted_5$9 = { class: "justify-self-end" };
1732
1744
  //#endregion
1733
1745
  //#region src/components/PageHeader.vue
1734
1746
  var PageHeader_default = /* @__PURE__ */ defineComponent({
@@ -1745,17 +1757,17 @@ var PageHeader_default = /* @__PURE__ */ defineComponent({
1745
1757
  * each other.
1746
1758
  */
1747
1759
  return (_ctx, _cache) => {
1748
- return openBlock(), createElementBlock("header", _hoisted_1$35, [
1749
- createElementVNode("div", _hoisted_2$31, [renderSlot(_ctx.$slots, "left")]),
1750
- createElementVNode("h1", _hoisted_3$19, [renderSlot(_ctx.$slots, "title", {}, () => [createElementVNode("span", _hoisted_4$13, toDisplayString(__props.title), 1)])]),
1751
- createElementVNode("div", _hoisted_5$8, [renderSlot(_ctx.$slots, "right")])
1760
+ return openBlock(), createElementBlock("header", _hoisted_1$38, [
1761
+ createElementVNode("div", _hoisted_2$34, [renderSlot(_ctx.$slots, "left")]),
1762
+ createElementVNode("h1", _hoisted_3$22, [renderSlot(_ctx.$slots, "title", {}, () => [createElementVNode("span", _hoisted_4$15, toDisplayString(__props.title), 1)])]),
1763
+ createElementVNode("div", _hoisted_5$9, [renderSlot(_ctx.$slots, "right")])
1752
1764
  ]);
1753
1765
  };
1754
1766
  }
1755
1767
  });
1756
1768
  //#endregion
1757
1769
  //#region src/components/ProgressBar.vue?vue&type=script&setup=true&lang.ts
1758
- var _hoisted_1$34 = ["aria-valuenow", "aria-label"];
1770
+ var _hoisted_1$37 = ["aria-valuenow", "aria-label"];
1759
1771
  //#endregion
1760
1772
  //#region src/components/ProgressBar.vue
1761
1773
  var ProgressBar_default = /* @__PURE__ */ defineComponent({
@@ -1787,25 +1799,25 @@ var ProgressBar_default = /* @__PURE__ */ defineComponent({
1787
1799
  }, [createElementVNode("div", {
1788
1800
  class: "bg-primary h-full rounded-full transition-[width] duration-700 ease-out",
1789
1801
  style: normalizeStyle({ width: `${portion.value}%` })
1790
- }, null, 4)], 10, _hoisted_1$34);
1802
+ }, null, 4)], 10, _hoisted_1$37);
1791
1803
  };
1792
1804
  }
1793
1805
  });
1794
1806
  //#endregion
1795
1807
  //#region src/components/PriceCard.vue?vue&type=script&setup=true&lang.ts
1796
- var _hoisted_1$33 = {
1808
+ var _hoisted_1$36 = {
1797
1809
  key: 0,
1798
1810
  class: "bg-primary rounded-cell text-on-primary absolute -top-3 left-7 px-3 py-1 text-[0.7rem] font-semibold"
1799
1811
  };
1800
- var _hoisted_2$30 = { class: "flex items-start justify-between gap-4" };
1801
- var _hoisted_3$18 = { class: "text-ink mt-5 text-lg font-semibold" };
1802
- var _hoisted_4$12 = {
1812
+ var _hoisted_2$33 = { class: "flex items-start justify-between gap-4" };
1813
+ var _hoisted_3$21 = { class: "text-ink mt-5 text-lg font-semibold" };
1814
+ var _hoisted_4$14 = {
1803
1815
  key: 1,
1804
1816
  class: "text-ink-soft mt-1.5 text-sm leading-relaxed"
1805
1817
  };
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" };
1808
- var _hoisted_7$3 = {
1818
+ var _hoisted_5$8 = { class: "mt-6 flex items-baseline gap-1.5" };
1819
+ var _hoisted_6$7 = { class: "text-ink text-3xl font-semibold tracking-tight tabular-nums" };
1820
+ var _hoisted_7$4 = {
1809
1821
  key: 0,
1810
1822
  class: "text-ink-soft text-sm"
1811
1823
  };
@@ -1868,17 +1880,17 @@ var PriceCard_default = /* @__PURE__ */ defineComponent({
1868
1880
  const palette = computed(() => TONE[__props.tone]);
1869
1881
  return (_ctx, _cache) => {
1870
1882
  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"]]) }, [
1871
- __props.badge && __props.recommended ? (openBlock(), createElementBlock("span", _hoisted_1$33, toDisplayString(__props.badge), 1)) : createCommentVNode("", true),
1872
- createElementVNode("div", _hoisted_2$30, [_ctx.$slots.icon ? (openBlock(), createElementBlock("span", {
1883
+ __props.badge && __props.recommended ? (openBlock(), createElementBlock("span", _hoisted_1$36, toDisplayString(__props.badge), 1)) : createCommentVNode("", true),
1884
+ createElementVNode("div", _hoisted_2$33, [_ctx.$slots.icon ? (openBlock(), createElementBlock("span", {
1873
1885
  key: 0,
1874
1886
  class: normalizeClass(["rounded-card grid size-11 place-items-center text-xl", palette.value.icon])
1875
1887
  }, [renderSlot(_ctx.$slots, "icon")], 2)) : createCommentVNode("", true), __props.chip ? (openBlock(), createElementBlock("span", {
1876
1888
  key: 1,
1877
1889
  class: normalizeClass(["rounded-cell ml-auto px-2.5 py-1 text-[0.7rem] font-medium", palette.value.soft])
1878
1890
  }, toDisplayString(__props.chip), 3)) : createCommentVNode("", true)]),
1879
- createElementVNode("h3", _hoisted_3$18, 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)]),
1891
+ createElementVNode("h3", _hoisted_3$21, toDisplayString(__props.name), 1),
1892
+ __props.lead ? (openBlock(), createElementBlock("p", _hoisted_4$14, toDisplayString(__props.lead), 1)) : createCommentVNode("", true),
1893
+ createElementVNode("p", _hoisted_5$8, [createElementVNode("span", _hoisted_6$7, toDisplayString(__props.price), 1), __props.period ? (openBlock(), createElementBlock("span", _hoisted_7$4, toDisplayString(__props.period), 1)) : createCommentVNode("", true)]),
1882
1894
  __props.note ? (openBlock(), createElementBlock("p", _hoisted_8$2, toDisplayString(__props.note), 1)) : createCommentVNode("", true),
1883
1895
  createElementVNode("ul", _hoisted_9$2, [(openBlock(true), createElementBlock(Fragment, null, renderList(__props.features, (feature) => {
1884
1896
  return openBlock(), createElementBlock("li", {
@@ -1893,8 +1905,8 @@ var PriceCard_default = /* @__PURE__ */ defineComponent({
1893
1905
  });
1894
1906
  //#endregion
1895
1907
  //#region src/components/ToneDot.vue?vue&type=script&setup=true&lang.ts
1896
- var _hoisted_1$32 = { class: "inline-flex items-center gap-1.5" };
1897
- var _hoisted_2$29 = {
1908
+ var _hoisted_1$35 = { class: "inline-flex items-center gap-1.5" };
1909
+ var _hoisted_2$32 = {
1898
1910
  key: 0,
1899
1911
  class: "text-ink-soft text-xs font-medium"
1900
1912
  };
@@ -1915,13 +1927,13 @@ var ToneDot_default = /* @__PURE__ */ defineComponent({
1915
1927
  * priorities — without this component knowing about any of them.
1916
1928
  */
1917
1929
  return (_ctx, _cache) => {
1918
- return openBlock(), createElementBlock("span", _hoisted_1$32, [createElementVNode("span", { class: normalizeClass(["size-2 rounded-full", __props.fill]) }, null, 2), __props.label ? (openBlock(), createElementBlock("span", _hoisted_2$29, toDisplayString(__props.label), 1)) : createCommentVNode("", true)]);
1930
+ return openBlock(), createElementBlock("span", _hoisted_1$35, [createElementVNode("span", { class: normalizeClass(["size-2 rounded-full", __props.fill]) }, null, 2), __props.label ? (openBlock(), createElementBlock("span", _hoisted_2$32, toDisplayString(__props.label), 1)) : createCommentVNode("", true)]);
1919
1931
  };
1920
1932
  }
1921
1933
  });
1922
1934
  //#endregion
1923
1935
  //#region src/components/SectionHeading.vue?vue&type=script&setup=true&lang.ts
1924
- var _hoisted_1$31 = {
1936
+ var _hoisted_1$34 = {
1925
1937
  key: 0,
1926
1938
  class: "text-ink-soft text-xs tabular-nums"
1927
1939
  };
@@ -1939,15 +1951,15 @@ var SectionHeading_default = /* @__PURE__ */ defineComponent({
1939
1951
  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]) }, [
1940
1952
  createVNode(ToneDot_default, { fill: __props.tone.fill }, null, 8, ["fill"]),
1941
1953
  createElementVNode("span", { class: normalizeClass(["text-xs font-semibold tracking-wide uppercase", __props.tone.text]) }, toDisplayString(__props.label), 3),
1942
- __props.count > 0 ? (openBlock(), createElementBlock("span", _hoisted_1$31, toDisplayString(__props.count), 1)) : createCommentVNode("", true)
1954
+ __props.count > 0 ? (openBlock(), createElementBlock("span", _hoisted_1$34, toDisplayString(__props.count), 1)) : createCommentVNode("", true)
1943
1955
  ], 2);
1944
1956
  };
1945
1957
  }
1946
1958
  });
1947
1959
  //#endregion
1948
1960
  //#region src/components/SegmentedControl.vue?vue&type=script&setup=true&lang.ts
1949
- var _hoisted_1$30 = { class: "bg-muted rounded-card flex w-full gap-1 p-1" };
1950
- var _hoisted_2$28 = ["value", "name"];
1961
+ var _hoisted_1$33 = { class: "bg-muted rounded-card flex w-full gap-1 p-1" };
1962
+ var _hoisted_2$31 = ["value", "name"];
1951
1963
  //#endregion
1952
1964
  //#region src/components/SegmentedControl.vue
1953
1965
  var SegmentedControl_default = /* @__PURE__ */ defineComponent({
@@ -1961,7 +1973,7 @@ var SegmentedControl_default = /* @__PURE__ */ defineComponent({
1961
1973
  const model = useModel(__props, "modelValue");
1962
1974
  const name = useId();
1963
1975
  return (_ctx, _cache) => {
1964
- return openBlock(), createElementBlock("div", _hoisted_1$30, [(openBlock(true), createElementBlock(Fragment, null, renderList(__props.options, (option) => {
1976
+ return openBlock(), createElementBlock("div", _hoisted_1$33, [(openBlock(true), createElementBlock(Fragment, null, renderList(__props.options, (option) => {
1965
1977
  return openBlock(), createElementBlock("label", {
1966
1978
  key: String(option.value),
1967
1979
  class: "flex-1 cursor-pointer"
@@ -1971,18 +1983,18 @@ var SegmentedControl_default = /* @__PURE__ */ defineComponent({
1971
1983
  value: option.value,
1972
1984
  name: unref(name),
1973
1985
  class: "peer sr-only"
1974
- }, null, 8, _hoisted_2$28), [[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)]);
1986
+ }, null, 8, _hoisted_2$31), [[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)]);
1975
1987
  }), 128))]);
1976
1988
  };
1977
1989
  }
1978
1990
  });
1979
1991
  //#endregion
1980
1992
  //#region src/components/SkeletonList.vue?vue&type=script&setup=true&lang.ts
1981
- var _hoisted_1$29 = {
1993
+ var _hoisted_1$32 = {
1982
1994
  role: "status",
1983
1995
  class: "flex flex-col gap-1"
1984
1996
  };
1985
- var _hoisted_2$27 = { class: "sr-only" };
1997
+ var _hoisted_2$30 = { class: "sr-only" };
1986
1998
  //#endregion
1987
1999
  //#region src/components/SkeletonList.vue
1988
2000
  var SkeletonList_default = /* @__PURE__ */ defineComponent({
@@ -1996,7 +2008,7 @@ var SkeletonList_default = /* @__PURE__ */ defineComponent({
1996
2008
  /** A length starts with a digit, a dot, or opens a CSS function. */
1997
2009
  const isLength = computed(() => /^(?:[.\d]|calc\(|var\(|clamp\(|min\(|max\()/.test(__props.rowHeight));
1998
2010
  return (_ctx, _cache) => {
1999
- return openBlock(), createElementBlock("div", _hoisted_1$29, [createElementVNode("span", _hoisted_2$27, toDisplayString(__props.label), 1), (openBlock(true), createElementBlock(Fragment, null, renderList(__props.rows, (row) => {
2011
+ return openBlock(), createElementBlock("div", _hoisted_1$32, [createElementVNode("span", _hoisted_2$30, toDisplayString(__props.label), 1), (openBlock(true), createElementBlock(Fragment, null, renderList(__props.rows, (row) => {
2000
2012
  return openBlock(), createElementBlock("div", {
2001
2013
  key: row,
2002
2014
  class: normalizeClass(["bg-muted rounded-card animate-pulse", isLength.value ? void 0 : __props.rowHeight]),
@@ -2009,10 +2021,10 @@ var SkeletonList_default = /* @__PURE__ */ defineComponent({
2009
2021
  });
2010
2022
  //#endregion
2011
2023
  //#region src/components/StatCard.vue?vue&type=script&setup=true&lang.ts
2012
- var _hoisted_1$28 = { class: "surface rounded-card flex flex-1 flex-col gap-0.5 p-3" };
2013
- var _hoisted_2$26 = { class: "flex items-baseline gap-1" };
2014
- var _hoisted_3$17 = { class: "text-ink text-xl font-semibold tabular-nums" };
2015
- var _hoisted_4$11 = { class: "text-ink-soft text-xs" };
2024
+ var _hoisted_1$31 = { class: "surface rounded-card flex flex-1 flex-col gap-0.5 p-3" };
2025
+ var _hoisted_2$29 = { class: "flex items-baseline gap-1" };
2026
+ var _hoisted_3$20 = { class: "text-ink text-xl font-semibold tabular-nums" };
2027
+ var _hoisted_4$13 = { class: "text-ink-soft text-xs" };
2016
2028
  //#endregion
2017
2029
  //#region src/components/StatCard.vue
2018
2030
  var StatCard_default = /* @__PURE__ */ defineComponent({
@@ -2029,22 +2041,22 @@ var StatCard_default = /* @__PURE__ */ defineComponent({
2029
2041
  flat: ArrowRight
2030
2042
  };
2031
2043
  return (_ctx, _cache) => {
2032
- return openBlock(), createElementBlock("div", _hoisted_1$28, [createElementVNode("div", _hoisted_2$26, [createElementVNode("span", _hoisted_3$17, toDisplayString(__props.value), 1), __props.trend ? (openBlock(), createBlock(resolveDynamicComponent(TREND_ICON[__props.trend]), {
2044
+ return openBlock(), createElementBlock("div", _hoisted_1$31, [createElementVNode("div", _hoisted_2$29, [createElementVNode("span", _hoisted_3$20, toDisplayString(__props.value), 1), __props.trend ? (openBlock(), createBlock(resolveDynamicComponent(TREND_ICON[__props.trend]), {
2033
2045
  key: 0,
2034
2046
  class: "text-ink-soft size-3"
2035
- })) : createCommentVNode("", true)]), createElementVNode("span", _hoisted_4$11, toDisplayString(__props.label), 1)]);
2047
+ })) : createCommentVNode("", true)]), createElementVNode("span", _hoisted_4$13, toDisplayString(__props.label), 1)]);
2036
2048
  };
2037
2049
  }
2038
2050
  });
2039
2051
  //#endregion
2040
2052
  //#region src/components/ToastHost.vue?vue&type=script&setup=true&lang.ts
2041
- var _hoisted_1$27 = [
2053
+ var _hoisted_1$30 = [
2042
2054
  "onMouseenter",
2043
2055
  "onMouseleave",
2044
2056
  "onFocusin",
2045
2057
  "onFocusout"
2046
2058
  ];
2047
- var _hoisted_2$25 = { class: "flex-1 text-sm leading-snug" };
2059
+ var _hoisted_2$28 = { class: "flex-1 text-sm leading-snug" };
2048
2060
  //#endregion
2049
2061
  //#region src/components/ToastHost.vue
2050
2062
  var ToastHost_default = /*#__PURE__*/ _plugin_vue_export_helper_default(/* @__PURE__ */ defineComponent({
@@ -2105,7 +2117,7 @@ var ToastHost_default = /*#__PURE__*/ _plugin_vue_export_helper_default(/* @__PU
2105
2117
  class: normalizeClass(["mt-0.5 size-5 shrink-0", TONE_CLASS[toast.tone]]),
2106
2118
  "aria-hidden": "true"
2107
2119
  }, null, 8, ["class"])),
2108
- createElementVNode("p", _hoisted_2$25, toDisplayString(toast.message), 1),
2120
+ createElementVNode("p", _hoisted_2$28, toDisplayString(toast.message), 1),
2109
2121
  toast.action ? (openBlock(), createBlock(BaseButton_default, {
2110
2122
  key: 0,
2111
2123
  variant: "link",
@@ -2128,7 +2140,7 @@ var ToastHost_default = /*#__PURE__*/ _plugin_vue_export_helper_default(/* @__PU
2128
2140
  default: withCtx(() => [createVNode(unref(X), { class: "size-4" })]),
2129
2141
  _: 1
2130
2142
  }, 8, ["aria-label", "onClick"])
2131
- ], 40, _hoisted_1$27);
2143
+ ], 40, _hoisted_1$30);
2132
2144
  }), 128))]),
2133
2145
  _: 1
2134
2146
  })], 2)])) : createCommentVNode("", true);
@@ -2137,8 +2149,8 @@ var ToastHost_default = /*#__PURE__*/ _plugin_vue_export_helper_default(/* @__PU
2137
2149
  }), [["__scopeId", "data-v-737eb240"]]);
2138
2150
  //#endregion
2139
2151
  //#region src/components/LocaleLinks.vue?vue&type=script&setup=true&lang.ts
2140
- var _hoisted_1$26 = ["aria-label"];
2141
- var _hoisted_2$24 = [
2152
+ var _hoisted_1$29 = ["aria-label"];
2153
+ var _hoisted_2$27 = [
2142
2154
  "lang",
2143
2155
  "aria-pressed",
2144
2156
  "onClick"
@@ -2182,17 +2194,17 @@ var LocaleLinks_default = /* @__PURE__ */ defineComponent({
2182
2194
  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"]),
2183
2195
  "aria-pressed": preference.value === locale,
2184
2196
  onClick: ($event) => preference.value = locale
2185
- }, toDisplayString(__props.labels[locale]), 11, _hoisted_2$24);
2186
- }), 128))], 8, _hoisted_1$26);
2197
+ }, toDisplayString(__props.labels[locale]), 11, _hoisted_2$27);
2198
+ }), 128))], 8, _hoisted_1$29);
2187
2199
  };
2188
2200
  }
2189
2201
  });
2190
2202
  //#endregion
2191
2203
  //#region src/components/TabBar.vue?vue&type=script&setup=true&lang.ts
2192
- var _hoisted_1$25 = { class: "tab-bar" };
2193
- var _hoisted_2$23 = ["aria-label"];
2194
- var _hoisted_3$16 = { class: "tab-icon-slot" };
2195
- var _hoisted_4$10 = { class: "tab-label" };
2204
+ var _hoisted_1$28 = { class: "tab-bar" };
2205
+ var _hoisted_2$26 = ["aria-label"];
2206
+ var _hoisted_3$19 = { class: "tab-icon-slot" };
2207
+ var _hoisted_4$12 = { class: "tab-label" };
2196
2208
  //#endregion
2197
2209
  //#region src/components/TabBar.vue
2198
2210
  var TabBar_default = /*#__PURE__*/ _plugin_vue_export_helper_default(/* @__PURE__ */ defineComponent({
@@ -2204,7 +2216,7 @@ var TabBar_default = /*#__PURE__*/ _plugin_vue_export_helper_default(/* @__PURE_
2204
2216
  },
2205
2217
  setup(__props) {
2206
2218
  return (_ctx, _cache) => {
2207
- return openBlock(), createElementBlock("header", _hoisted_1$25, [createElementVNode("nav", {
2219
+ return openBlock(), createElementBlock("header", _hoisted_1$28, [createElementVNode("nav", {
2208
2220
  class: "tab-bar-inner",
2209
2221
  "aria-label": __props.label || void 0
2210
2222
  }, [(openBlock(true), createElementBlock(Fragment, null, renderList(__props.items, (item) => {
@@ -2215,28 +2227,28 @@ var TabBar_default = /*#__PURE__*/ _plugin_vue_export_helper_default(/* @__PURE_
2215
2227
  "aria-current": item.key === __props.active ? "page" : void 0,
2216
2228
  onClick: _cache[0] || (_cache[0] = ($event) => unref(tapFeedback)())
2217
2229
  }, {
2218
- default: withCtx(() => [createElementVNode("span", _hoisted_3$16, [(openBlock(), createBlock(resolveDynamicComponent(item.icon), { class: "tab-icon" }))]), createElementVNode("span", _hoisted_4$10, toDisplayString(item.label), 1)]),
2230
+ default: withCtx(() => [createElementVNode("span", _hoisted_3$19, [(openBlock(), createBlock(resolveDynamicComponent(item.icon), { class: "tab-icon" }))]), createElementVNode("span", _hoisted_4$12, toDisplayString(item.label), 1)]),
2219
2231
  _: 2
2220
2232
  }, 1032, [
2221
2233
  "to",
2222
2234
  "class",
2223
2235
  "aria-current"
2224
2236
  ]);
2225
- }), 128))], 8, _hoisted_2$23)]);
2237
+ }), 128))], 8, _hoisted_2$26)]);
2226
2238
  };
2227
2239
  }
2228
2240
  }), [["__scopeId", "data-v-a76891c4"]]);
2229
2241
  //#endregion
2230
2242
  //#region src/components/ActivityGrid.vue?vue&type=script&setup=true&lang.ts
2231
- var _hoisted_1$24 = ["aria-label"];
2232
- var _hoisted_2$22 = ["colspan"];
2233
- var _hoisted_3$15 = {
2243
+ var _hoisted_1$27 = ["aria-label"];
2244
+ var _hoisted_2$25 = ["colspan"];
2245
+ var _hoisted_3$18 = {
2234
2246
  scope: "row",
2235
2247
  class: "rk-activity-weekday"
2236
2248
  };
2237
- var _hoisted_4$9 = { class: "sr-only" };
2238
- var _hoisted_5$6 = ["tabindex", "aria-label"];
2239
- var _hoisted_6$5 = {
2249
+ var _hoisted_4$11 = { class: "sr-only" };
2250
+ var _hoisted_5$7 = ["tabindex", "aria-label"];
2251
+ var _hoisted_6$6 = {
2240
2252
  key: 1,
2241
2253
  class: "rk-activity-cell is-blank",
2242
2254
  "aria-hidden": "true"
@@ -2346,12 +2358,9 @@ var ActivityGrid_default = /*#__PURE__*/ _plugin_vue_export_helper_default(/* @_
2346
2358
  moveTo(focused.value + 1);
2347
2359
  break;
2348
2360
  case "ArrowLeft":
2349
- event.preventDefault();
2350
- step(-1);
2351
- break;
2352
2361
  case "ArrowRight":
2353
2362
  event.preventDefault();
2354
- step(1);
2363
+ step(horizontalStep(event.key, event.currentTarget));
2355
2364
  break;
2356
2365
  case "Home":
2357
2366
  event.preventDefault();
@@ -2374,45 +2383,236 @@ var ActivityGrid_default = /*#__PURE__*/ _plugin_vue_export_helper_default(/* @_
2374
2383
  choose(day);
2375
2384
  }
2376
2385
  onMounted(() => {
2377
- if (__props.startAtEnd && scroller.value) scroller.value.scrollLeft = scroller.value.scrollWidth;
2386
+ if (!__props.startAtEnd) return;
2387
+ const element = scroller.value?.viewport;
2388
+ if (!element) return;
2389
+ element.scrollLeft = elementDirection(element) === "rtl" ? -element.scrollWidth : element.scrollWidth;
2378
2390
  });
2379
2391
  return (_ctx, _cache) => {
2380
- return openBlock(), createElementBlock("div", {
2392
+ return openBlock(), createBlock(ScrollArea_default, {
2381
2393
  ref_key: "scroller",
2382
2394
  ref: scroller,
2383
- class: "rk-activity no-scrollbar"
2384
- }, [createElementVNode("table", {
2385
- ref_key: "grid",
2386
- ref: grid,
2387
- class: "rk-activity-table",
2388
- "aria-label": __props.label,
2389
- onKeydown,
2390
- onClick
2391
- }, [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) => {
2392
- return openBlock(), createElementBlock("th", {
2393
- key: month.key,
2394
- colspan: month.span,
2395
- scope: "colgroup"
2396
- }, toDisplayString(month.label), 9, _hoisted_2$22);
2397
- }), 128))])]), createElementVNode("tbody", null, [(openBlock(true), createElementBlock(Fragment, null, renderList(weekdays.value, (weekday, row) => {
2398
- return openBlock(), createElementBlock("tr", { key: weekday }, [createElementVNode("th", _hoisted_3$15, [createElementVNode("span", _hoisted_4$9, toDisplayString(weekday), 1)]), (openBlock(true), createElementBlock(Fragment, null, renderList(weeks.value, (week, column) => {
2399
- return openBlock(), createElementBlock(Fragment, { key: column }, [week[row] ? (openBlock(), createElementBlock("td", mergeProps({
2400
- key: 0,
2401
- class: "rk-activity-cell"
2402
- }, { ref_for: true }, dayAttrs(week[row]), {
2403
- tabindex: cells.value[focused.value]?.day === week[row] ? 0 : -1,
2404
- "aria-label": __props.dayLabel(week[row]),
2405
- class: [__props.levelFor(week[row]), { "is-pickable": __props.isSelectable?.(week[row]) }]
2406
- }), null, 16, _hoisted_5$6)) : (openBlock(), createElementBlock("td", _hoisted_6$5))], 64);
2407
- }), 128))]);
2408
- }), 128))])], 40, _hoisted_1$24)], 512);
2395
+ axis: "x",
2396
+ scrollbar: "hidden",
2397
+ label: __props.label,
2398
+ class: "rk-activity"
2399
+ }, {
2400
+ default: withCtx(() => [createElementVNode("table", {
2401
+ ref_key: "grid",
2402
+ ref: grid,
2403
+ class: "rk-activity-table",
2404
+ "aria-label": __props.label,
2405
+ onKeydown,
2406
+ onClick
2407
+ }, [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) => {
2408
+ return openBlock(), createElementBlock("th", {
2409
+ key: month.key,
2410
+ colspan: month.span,
2411
+ scope: "colgroup"
2412
+ }, toDisplayString(month.label), 9, _hoisted_2$25);
2413
+ }), 128))])]), createElementVNode("tbody", null, [(openBlock(true), createElementBlock(Fragment, null, renderList(weekdays.value, (weekday, row) => {
2414
+ return openBlock(), createElementBlock("tr", { key: weekday }, [createElementVNode("th", _hoisted_3$18, [createElementVNode("span", _hoisted_4$11, toDisplayString(weekday), 1)]), (openBlock(true), createElementBlock(Fragment, null, renderList(weeks.value, (week, column) => {
2415
+ return openBlock(), createElementBlock(Fragment, { key: column }, [week[row] ? (openBlock(), createElementBlock("td", mergeProps({
2416
+ key: 0,
2417
+ class: "rk-activity-cell"
2418
+ }, { ref_for: true }, dayAttrs(week[row]), {
2419
+ tabindex: cells.value[focused.value]?.day === week[row] ? 0 : -1,
2420
+ "aria-label": __props.dayLabel(week[row]),
2421
+ class: [__props.levelFor(week[row]), { "is-pickable": __props.isSelectable?.(week[row]) }]
2422
+ }), null, 16, _hoisted_5$7)) : (openBlock(), createElementBlock("td", _hoisted_6$6))], 64);
2423
+ }), 128))]);
2424
+ }), 128))])], 40, _hoisted_1$27)]),
2425
+ _: 1
2426
+ }, 8, ["label"]);
2427
+ };
2428
+ }
2429
+ }), [["__scopeId", "data-v-766e5244"]]);
2430
+ //#endregion
2431
+ //#region src/components/BarChart.vue?vue&type=script&setup=true&lang.ts
2432
+ var _hoisted_1$26 = { class: "sr-only" };
2433
+ var _hoisted_2$24 = {
2434
+ scope: "row",
2435
+ class: "rk-bars-label"
2436
+ };
2437
+ var _hoisted_3$17 = { class: "rk-bars-track" };
2438
+ var _hoisted_4$10 = { class: "rk-bars-value" };
2439
+ //#endregion
2440
+ //#region src/components/BarChart.vue
2441
+ var BarChart_default = /*#__PURE__*/ _plugin_vue_export_helper_default(/* @__PURE__ */ defineComponent({
2442
+ __name: "BarChart",
2443
+ props: {
2444
+ series: {},
2445
+ label: {},
2446
+ valueLabel: { type: Function },
2447
+ fill: {
2448
+ type: Function,
2449
+ default: () => "bg-primary"
2450
+ },
2451
+ max: { default: () => void 0 },
2452
+ animate: {
2453
+ type: Boolean,
2454
+ default: true
2455
+ }
2456
+ },
2457
+ setup(__props) {
2458
+ const root = useTemplateRef("root");
2459
+ const grown = ref(!__props.animate);
2460
+ let stopWatching;
2461
+ onMounted(() => {
2462
+ if (grown.value || !root.value) return;
2463
+ stopWatching = watchVisibility(root.value, (visible) => {
2464
+ if (!visible) return;
2465
+ grown.value = true;
2466
+ stopWatching?.();
2467
+ });
2468
+ });
2469
+ onBeforeUnmount(() => stopWatching?.());
2470
+ const ceiling = computed(() => {
2471
+ const largest = Math.max(0, ...__props.series.map((item) => item.value));
2472
+ return Math.max(__props.max ?? largest, Number.EPSILON);
2473
+ });
2474
+ const rows = computed(() => __props.series.map((item, index) => ({
2475
+ item,
2476
+ index,
2477
+ width: `${Math.min(100, Math.max(0, item.value / ceiling.value * 100))}%`,
2478
+ fill: __props.fill(item, index)
2479
+ })));
2480
+ return (_ctx, _cache) => {
2481
+ return openBlock(), createElementBlock("table", {
2482
+ ref_key: "root",
2483
+ ref: root,
2484
+ class: "rk-bars"
2485
+ }, [createElementVNode("caption", _hoisted_1$26, toDisplayString(__props.label), 1), createElementVNode("tbody", null, [(openBlock(true), createElementBlock(Fragment, null, renderList(rows.value, (row) => {
2486
+ return openBlock(), createElementBlock("tr", {
2487
+ key: row.item.key,
2488
+ class: "rk-bars-row"
2489
+ }, [
2490
+ createElementVNode("th", _hoisted_2$24, toDisplayString(row.item.label), 1),
2491
+ createElementVNode("td", _hoisted_3$17, [createElementVNode("span", {
2492
+ class: normalizeClass(["rk-bars-fill", row.fill]),
2493
+ style: normalizeStyle({ width: grown.value ? row.width : "0%" }),
2494
+ "aria-hidden": "true"
2495
+ }, null, 6)]),
2496
+ createElementVNode("td", _hoisted_4$10, [renderSlot(_ctx.$slots, "value", {
2497
+ item: row.item,
2498
+ index: row.index
2499
+ }, () => [createTextVNode(toDisplayString(__props.valueLabel(row.item.value, row.item)), 1)], true)])
2500
+ ]);
2501
+ }), 128))])], 512);
2502
+ };
2503
+ }
2504
+ }), [["__scopeId", "data-v-12682ed6"]]);
2505
+ //#endregion
2506
+ //#region src/components/DonutChart.vue?vue&type=script&setup=true&lang.ts
2507
+ var _hoisted_1$25 = { class: "rk-donut" };
2508
+ var _hoisted_2$23 = {
2509
+ class: "rk-donut-ring",
2510
+ viewBox: "0 0 40 40",
2511
+ "aria-hidden": "true"
2512
+ };
2513
+ var _hoisted_3$16 = { transform: "rotate(-90 20 20)" };
2514
+ var _hoisted_4$9 = [
2515
+ "stroke-width",
2516
+ "stroke-dasharray",
2517
+ "stroke-dashoffset"
2518
+ ];
2519
+ var _hoisted_5$6 = ["aria-label"];
2520
+ var _hoisted_6$5 = { class: "rk-donut-name" };
2521
+ var _hoisted_7$3 = { class: "rk-donut-value" };
2522
+ /**
2523
+ * Parts of a whole.
2524
+ *
2525
+ * ## Not for comparing things
2526
+ *
2527
+ * This is the chart people reach for when they mean the other one. Judging
2528
+ * the difference between two angles is measurably harder than judging the
2529
+ * difference between two lengths, so six values that need ranking belong in
2530
+ * a `BarChart` and not here. Reach for this when the point is that the
2531
+ * slices *add up* — where a budget went, what a bundle is made of — and
2532
+ * when there are few enough slices to tell apart.
2533
+ *
2534
+ * ## The legend is the chart
2535
+ *
2536
+ * The ring is `aria-hidden`, and every slice's name and value is real text
2537
+ * beside it. Same decision as `BarChart`'s table: the description of a
2538
+ * chart is not a sentence somebody writes once and forgets to update, it
2539
+ * is the data, rendered.
2540
+ *
2541
+ * ## The colours are yours
2542
+ *
2543
+ * `fill` returns a class per slice, like `ToneDot`'s and `ActivityGrid`'s
2544
+ * `levelFor`. It is required here rather than defaulted: a ring whose
2545
+ * slices are all one colour is not a chart, so there is no sensible
2546
+ * default to give it.
2547
+ */
2548
+ var CIRCUMFERENCE = 100;
2549
+ //#endregion
2550
+ //#region src/components/DonutChart.vue
2551
+ var DonutChart_default = /*#__PURE__*/ _plugin_vue_export_helper_default(/* @__PURE__ */ defineComponent({
2552
+ __name: "DonutChart",
2553
+ props: {
2554
+ slices: {},
2555
+ label: {},
2556
+ valueLabel: { type: Function },
2557
+ fill: { type: Function },
2558
+ thickness: { default: 14 }
2559
+ },
2560
+ setup(__props) {
2561
+ const RADIUS = CIRCUMFERENCE / (2 * Math.PI);
2562
+ const total = computed(() => __props.slices.reduce((sum, slice) => sum + Math.max(0, slice.value), 0));
2563
+ const arcs = computed(() => {
2564
+ let travelled = 0;
2565
+ return __props.slices.map((item, index) => {
2566
+ const share = total.value === 0 ? 0 : Math.max(0, item.value) / total.value * CIRCUMFERENCE;
2567
+ const offset = -travelled;
2568
+ travelled += share;
2569
+ return {
2570
+ item,
2571
+ index,
2572
+ share,
2573
+ offset,
2574
+ percent: total.value === 0 ? 0 : item.value / total.value * 100,
2575
+ fill: __props.fill(item, index)
2576
+ };
2577
+ });
2578
+ });
2579
+ return (_ctx, _cache) => {
2580
+ return openBlock(), createElementBlock("div", _hoisted_1$25, [(openBlock(), createElementBlock("svg", _hoisted_2$23, [createElementVNode("g", _hoisted_3$16, [(openBlock(true), createElementBlock(Fragment, null, renderList(arcs.value, (arc) => {
2581
+ return openBlock(), createElementBlock("circle", {
2582
+ key: arc.item.key,
2583
+ class: normalizeClass(arc.fill),
2584
+ cx: "20",
2585
+ cy: "20",
2586
+ r: RADIUS,
2587
+ fill: "none",
2588
+ stroke: "currentColor",
2589
+ "stroke-width": __props.thickness / 100 * RADIUS * 2,
2590
+ "stroke-dasharray": `${arc.share} ${CIRCUMFERENCE - arc.share}`,
2591
+ "stroke-dashoffset": arc.offset
2592
+ }, null, 10, _hoisted_4$9);
2593
+ }), 128))])])), createElementVNode("ul", {
2594
+ class: "rk-donut-legend",
2595
+ "aria-label": __props.label
2596
+ }, [(openBlock(true), createElementBlock(Fragment, null, renderList(arcs.value, (arc) => {
2597
+ return openBlock(), createElementBlock("li", {
2598
+ key: arc.item.key,
2599
+ class: "rk-donut-item"
2600
+ }, [
2601
+ createElementVNode("span", {
2602
+ class: normalizeClass(["rk-donut-swatch", arc.fill]),
2603
+ "aria-hidden": "true"
2604
+ }, null, 2),
2605
+ createElementVNode("span", _hoisted_6$5, toDisplayString(arc.item.label), 1),
2606
+ createElementVNode("span", _hoisted_7$3, toDisplayString(__props.valueLabel(arc.item.value, arc.item)), 1)
2607
+ ]);
2608
+ }), 128))], 8, _hoisted_5$6)]);
2409
2609
  };
2410
2610
  }
2411
- }), [["__scopeId", "data-v-9f622328"]]);
2611
+ }), [["__scopeId", "data-v-4ee6aaa6"]]);
2412
2612
  //#endregion
2413
2613
  //#region src/components/VirtualList.vue?vue&type=script&setup=true&lang.ts
2414
- var _hoisted_1$23 = ["aria-label"];
2415
- var _hoisted_2$21 = ["aria-setsize", "aria-posinset"];
2614
+ var _hoisted_1$24 = ["aria-label"];
2615
+ var _hoisted_2$22 = ["aria-setsize", "aria-posinset"];
2416
2616
  //#endregion
2417
2617
  //#region src/components/VirtualList.vue
2418
2618
  var VirtualList_default = /*#__PURE__*/ _plugin_vue_export_helper_default(/* @__PURE__ */ defineComponent({
@@ -2442,6 +2642,16 @@ var VirtualList_default = /*#__PURE__*/ _plugin_vue_export_helper_default(/* @__
2442
2642
  }
2443
2643
  onMounted(measure);
2444
2644
  watch(() => __props.items.length, measure);
2645
+ let observer = null;
2646
+ watchEffect(() => {
2647
+ observer?.disconnect();
2648
+ observer = null;
2649
+ const element = area.value?.viewport;
2650
+ if (!element || typeof ResizeObserver === "undefined") return;
2651
+ observer = new ResizeObserver(measure);
2652
+ observer.observe(element);
2653
+ });
2654
+ onScopeDispose(() => observer?.disconnect());
2445
2655
  /** Scrolls a row into view by its index, for an app driving the list itself. */
2446
2656
  function scrollToIndex(index) {
2447
2657
  const element = area.value?.viewport;
@@ -2480,14 +2690,14 @@ var VirtualList_default = /*#__PURE__*/ _plugin_vue_export_helper_default(/* @__
2480
2690
  }, [renderSlot(_ctx.$slots, "default", {
2481
2691
  item: row.item,
2482
2692
  index: row.index
2483
- }, void 0, true)], 12, _hoisted_2$21);
2693
+ }, void 0, true)], 12, _hoisted_2$22);
2484
2694
  }), 128)),
2485
2695
  unref(padBottom) > 0 ? (openBlock(), createElementBlock("li", {
2486
2696
  key: 1,
2487
2697
  style: normalizeStyle({ height: `${unref(padBottom)}px` }),
2488
2698
  "aria-hidden": "true"
2489
2699
  }, null, 4)) : createCommentVNode("", true)
2490
- ], 8, _hoisted_1$23)]),
2700
+ ], 8, _hoisted_1$24)]),
2491
2701
  _: 3
2492
2702
  }, 8, [
2493
2703
  "label",
@@ -2496,16 +2706,16 @@ var VirtualList_default = /*#__PURE__*/ _plugin_vue_export_helper_default(/* @__
2496
2706
  ]);
2497
2707
  };
2498
2708
  }
2499
- }), [["__scopeId", "data-v-936ed40c"]]);
2709
+ }), [["__scopeId", "data-v-5fea77fd"]]);
2500
2710
  //#endregion
2501
2711
  //#region src/components/AnnounceHost.vue?vue&type=script&setup=true&lang.ts
2502
- var _hoisted_1$22 = { class: "rk-announcer" };
2503
- var _hoisted_2$20 = {
2712
+ var _hoisted_1$23 = { class: "rk-announcer" };
2713
+ var _hoisted_2$21 = {
2504
2714
  role: "status",
2505
2715
  "aria-live": "polite",
2506
2716
  "aria-atomic": "true"
2507
2717
  };
2508
- var _hoisted_3$14 = {
2718
+ var _hoisted_3$15 = {
2509
2719
  role: "alert",
2510
2720
  "aria-live": "assertive",
2511
2721
  "aria-atomic": "true"
@@ -2517,15 +2727,15 @@ var AnnounceHost_default = /*#__PURE__*/ _plugin_vue_export_helper_default(/* @_
2517
2727
  setup(__props) {
2518
2728
  const { polite, assertive } = useAnnounce();
2519
2729
  return (_ctx, _cache) => {
2520
- return openBlock(), createElementBlock("div", _hoisted_1$22, [createElementVNode("p", _hoisted_2$20, toDisplayString(unref(polite)), 1), createElementVNode("p", _hoisted_3$14, toDisplayString(unref(assertive)), 1)]);
2730
+ 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)]);
2521
2731
  };
2522
2732
  }
2523
2733
  }), [["__scopeId", "data-v-205d6703"]]);
2524
2734
  //#endregion
2525
2735
  //#region src/components/ErrorSummary.vue?vue&type=script&setup=true&lang.ts
2526
- var _hoisted_1$21 = { class: "rk-errsum-title" };
2527
- var _hoisted_2$19 = { class: "rk-errsum-list" };
2528
- var _hoisted_3$13 = ["href", "onClick"];
2736
+ var _hoisted_1$22 = { class: "rk-errsum-title" };
2737
+ var _hoisted_2$20 = { class: "rk-errsum-list" };
2738
+ var _hoisted_3$14 = ["href", "onClick"];
2529
2739
  //#endregion
2530
2740
  //#region src/components/ErrorSummary.vue
2531
2741
  var ErrorSummary_default = /*#__PURE__*/ _plugin_vue_export_helper_default(/* @__PURE__ */ defineComponent({
@@ -2570,62 +2780,20 @@ var ErrorSummary_default = /*#__PURE__*/ _plugin_vue_export_helper_default(/* @_
2570
2780
  ref: panel,
2571
2781
  class: "rk-errsum",
2572
2782
  tabindex: "-1"
2573
- }, [createElementVNode("p", _hoisted_1$21, toDisplayString(__props.title), 1), createElementVNode("ul", _hoisted_2$19, [(openBlock(true), createElementBlock(Fragment, null, renderList(listed.value, (item) => {
2783
+ }, [createElementVNode("p", _hoisted_1$22, toDisplayString(__props.title), 1), createElementVNode("ul", _hoisted_2$20, [(openBlock(true), createElementBlock(Fragment, null, renderList(listed.value, (item) => {
2574
2784
  return openBlock(), createElementBlock("li", { key: item.field }, [createElementVNode("a", {
2575
2785
  href: `#${item.id}`,
2576
2786
  class: "rk-errsum-link",
2577
2787
  onClick: ($event) => goToField($event, item.id)
2578
- }, toDisplayString(__props.labelFor(item.field)) + ": " + toDisplayString(item.message), 9, _hoisted_3$13)]);
2788
+ }, toDisplayString(__props.labelFor(item.field)) + ": " + toDisplayString(item.message), 9, _hoisted_3$14)]);
2579
2789
  }), 128))])], 512)) : createCommentVNode("", true);
2580
2790
  };
2581
2791
  }
2582
2792
  }), [["__scopeId", "data-v-4a68e342"]]);
2583
2793
  //#endregion
2584
- //#region src/utils/direction.ts
2585
- var RTL = /* @__PURE__ */ new Set([
2586
- "ar",
2587
- "arc",
2588
- "ckb",
2589
- "dv",
2590
- "fa",
2591
- "he",
2592
- "ks",
2593
- "ku",
2594
- "nqo",
2595
- "ps",
2596
- "sd",
2597
- "syr",
2598
- "ug",
2599
- "ur",
2600
- "yi"
2601
- ]);
2602
- /**
2603
- * Which way a locale tag is written.
2604
- *
2605
- * The kit is built on logical properties and `start`/`end` props all the
2606
- * way through — `BaseDrawer`'s side, every inset, every margin — and none
2607
- * of that does anything at all until `dir` is set on the document. So the
2608
- * direction has to come from somewhere, and a locale tag is the only thing
2609
- * that knows it.
2610
- *
2611
- * Only the language subtag is read, so `ar-EG` and `ar` answer the same.
2612
- *
2613
- * @example
2614
- * ```ts
2615
- * textDirection('he-IL') // 'rtl'
2616
- * textDirection('tr') // 'ltr'
2617
- * ```
2618
- */
2619
- function textDirection(locale) {
2620
- const parts = locale.toLowerCase().split(/[-_]/);
2621
- const script = parts[1];
2622
- if (script === "arab" || script === "hebr" || script === "thaa" || script === "syrc") return "rtl";
2623
- return RTL.has(parts[0] ?? "") ? "rtl" : "ltr";
2624
- }
2625
- //#endregion
2626
2794
  //#region src/components/AvatarStack.vue?vue&type=script&setup=true&lang.ts
2627
- var _hoisted_1$20 = ["aria-label"];
2628
- var _hoisted_2$18 = {
2795
+ var _hoisted_1$21 = ["aria-label"];
2796
+ var _hoisted_2$19 = {
2629
2797
  key: 0,
2630
2798
  class: "rk-stack-item rk-stack-rest",
2631
2799
  "aria-hidden": "true"
@@ -2663,15 +2831,15 @@ var AvatarStack_default = /*#__PURE__*/ _plugin_vue_export_helper_default(/* @__
2663
2831
  "src",
2664
2832
  "size"
2665
2833
  ])]);
2666
- }), 128)), rest.value ? (openBlock(), createElementBlock("span", _hoisted_2$18, "+" + toDisplayString(rest.value), 1)) : createCommentVNode("", true)], 10, _hoisted_1$20);
2834
+ }), 128)), rest.value ? (openBlock(), createElementBlock("span", _hoisted_2$19, "+" + toDisplayString(rest.value), 1)) : createCommentVNode("", true)], 10, _hoisted_1$21);
2667
2835
  };
2668
2836
  }
2669
2837
  }), [["__scopeId", "data-v-1f87913c"]]);
2670
2838
  //#endregion
2671
2839
  //#region src/components/BaseCalendar.vue?vue&type=script&setup=true&lang.ts
2672
- var _hoisted_1$19 = { class: "rk-cal" };
2673
- var _hoisted_2$17 = { class: "rk-cal-head" };
2674
- var _hoisted_3$12 = ["aria-label"];
2840
+ var _hoisted_1$20 = { class: "rk-cal" };
2841
+ var _hoisted_2$18 = { class: "rk-cal-head" };
2842
+ var _hoisted_3$13 = ["aria-label"];
2675
2843
  var _hoisted_4$8 = ["aria-expanded"];
2676
2844
  var _hoisted_5$5 = ["aria-label"];
2677
2845
  var _hoisted_6$4 = {
@@ -2829,16 +2997,18 @@ var BaseCalendar_default = /*#__PURE__*/ _plugin_vue_export_helper_default(/* @_
2829
2997
  return toDateKey(date);
2830
2998
  }
2831
2999
  function onKeydown(event) {
3000
+ const key = event.key;
3001
+ const along = horizontalStep(key, event.currentTarget);
2832
3002
  const next = {
2833
- ArrowLeft: () => addDays(focused.value, -1),
2834
- ArrowRight: () => addDays(focused.value, 1),
3003
+ ArrowLeft: () => addDays(focused.value, along),
3004
+ ArrowRight: () => addDays(focused.value, along),
2835
3005
  ArrowUp: () => addDays(focused.value, -7),
2836
3006
  ArrowDown: () => addDays(focused.value, 7),
2837
3007
  Home: () => addDays(focused.value, -((fromDateKey(focused.value).getDay() - __props.weekStartsOn + 7) % 7)),
2838
3008
  End: () => addDays(focused.value, 6 - (fromDateKey(focused.value).getDay() - __props.weekStartsOn + 7) % 7),
2839
3009
  PageUp: () => shiftMonths(event.shiftKey ? -12 : -1),
2840
3010
  PageDown: () => shiftMonths(event.shiftKey ? 12 : 1)
2841
- }[event.key];
3011
+ }[key];
2842
3012
  if (!next) return;
2843
3013
  event.preventDefault();
2844
3014
  moveTo(next());
@@ -2866,8 +3036,8 @@ var BaseCalendar_default = /*#__PURE__*/ _plugin_vue_export_helper_default(/* @_
2866
3036
  if (next) focused.value = next;
2867
3037
  });
2868
3038
  return (_ctx, _cache) => {
2869
- return openBlock(), createElementBlock("div", _hoisted_1$19, [
2870
- createElementVNode("div", _hoisted_2$17, [
3039
+ return openBlock(), createElementBlock("div", _hoisted_1$20, [
3040
+ createElementVNode("div", _hoisted_2$18, [
2871
3041
  createElementVNode("button", {
2872
3042
  type: "button",
2873
3043
  class: "rk-cal-arrow focus-ring",
@@ -2876,7 +3046,7 @@ var BaseCalendar_default = /*#__PURE__*/ _plugin_vue_export_helper_default(/* @_
2876
3046
  }, [createVNode(unref(ChevronLeft), {
2877
3047
  class: "size-4",
2878
3048
  "aria-hidden": "true"
2879
- })], 8, _hoisted_3$12),
3049
+ })], 8, _hoisted_3$13),
2880
3050
  createElementVNode("button", {
2881
3051
  type: "button",
2882
3052
  class: "rk-cal-title focus-ring",
@@ -2946,11 +3116,11 @@ var BaseCalendar_default = /*#__PURE__*/ _plugin_vue_export_helper_default(/* @_
2946
3116
  ]);
2947
3117
  };
2948
3118
  }
2949
- }), [["__scopeId", "data-v-30197a85"]]);
3119
+ }), [["__scopeId", "data-v-d682f18a"]]);
2950
3120
  //#endregion
2951
3121
  //#region src/components/BaseChip.vue?vue&type=script&setup=true&lang.ts
2952
- var _hoisted_1$18 = { class: "truncate" };
2953
- var _hoisted_2$16 = ["aria-label", "disabled"];
3122
+ var _hoisted_1$19 = { class: "truncate" };
3123
+ var _hoisted_2$17 = ["aria-label", "disabled"];
2954
3124
  //#endregion
2955
3125
  //#region src/components/BaseChip.vue
2956
3126
  var BaseChip_default = /*#__PURE__*/ _plugin_vue_export_helper_default(/* @__PURE__ */ defineComponent({
@@ -2987,7 +3157,7 @@ var BaseChip_default = /*#__PURE__*/ _plugin_vue_export_helper_default(/* @__PUR
2987
3157
  key: 0,
2988
3158
  class: "size-3.5 shrink-0",
2989
3159
  "aria-hidden": "true"
2990
- })) : createCommentVNode("", true), createElementVNode("span", _hoisted_1$18, toDisplayString(__props.label), 1)]),
3160
+ })) : createCommentVNode("", true), createElementVNode("span", _hoisted_1$19, toDisplayString(__props.label), 1)]),
2991
3161
  _: 1
2992
3162
  }, 8, [
2993
3163
  "type",
@@ -3004,18 +3174,18 @@ var BaseChip_default = /*#__PURE__*/ _plugin_vue_export_helper_default(/* @__PUR
3004
3174
  }, [createVNode(unref(X), {
3005
3175
  class: "size-3",
3006
3176
  "aria-hidden": "true"
3007
- })], 8, _hoisted_2$16)) : createCommentVNode("", true)], 2);
3177
+ })], 8, _hoisted_2$17)) : createCommentVNode("", true)], 2);
3008
3178
  };
3009
3179
  }
3010
3180
  }), [["__scopeId", "data-v-c94a820d"]]);
3011
3181
  //#endregion
3012
3182
  //#region src/components/BaseKbd.vue?vue&type=script&setup=true&lang.ts
3013
- var _hoisted_1$17 = {
3183
+ var _hoisted_1$18 = {
3014
3184
  key: 0,
3015
3185
  class: "rk-kbd-joiner",
3016
3186
  "aria-hidden": "true"
3017
3187
  };
3018
- var _hoisted_2$15 = { class: "rk-kbd-key control" };
3188
+ var _hoisted_2$16 = { class: "rk-kbd-key control" };
3019
3189
  //#endregion
3020
3190
  //#region src/components/BaseKbd.vue
3021
3191
  var BaseKbd_default = /*#__PURE__*/ _plugin_vue_export_helper_default(/* @__PURE__ */ defineComponent({
@@ -3029,7 +3199,7 @@ var BaseKbd_default = /*#__PURE__*/ _plugin_vue_export_helper_default(/* @__PURE
3029
3199
  const list = computed(() => typeof __props.keys === "string" ? [__props.keys] : __props.keys);
3030
3200
  return (_ctx, _cache) => {
3031
3201
  return openBlock(), createElementBlock("span", { class: normalizeClass(["rk-kbd", `is-${__props.size}`]) }, [(openBlock(true), createElementBlock(Fragment, null, renderList(list.value, (key, index) => {
3032
- 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);
3202
+ 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);
3033
3203
  }), 128))], 2);
3034
3204
  };
3035
3205
  }
@@ -3068,7 +3238,7 @@ var BaseLink_default = /*#__PURE__*/ _plugin_vue_export_helper_default(/* @__PUR
3068
3238
  }), [["__scopeId", "data-v-88581007"]]);
3069
3239
  //#endregion
3070
3240
  //#region src/components/BaseRating.vue?vue&type=script&setup=true&lang.ts
3071
- var _hoisted_1$16 = [
3241
+ var _hoisted_1$17 = [
3072
3242
  "role",
3073
3243
  "aria-label",
3074
3244
  "tabindex",
@@ -3077,7 +3247,7 @@ var _hoisted_1$16 = [
3077
3247
  "aria-valuemax",
3078
3248
  "aria-valuetext"
3079
3249
  ];
3080
- var _hoisted_2$14 = ["onClick", "onPointerenter"];
3250
+ var _hoisted_2$15 = ["onClick", "onPointerenter"];
3081
3251
  //#endregion
3082
3252
  //#region src/components/BaseRating.vue
3083
3253
  var BaseRating_default = /*#__PURE__*/ _plugin_vue_export_helper_default(/* @__PURE__ */ defineComponent({
@@ -3111,10 +3281,11 @@ var BaseRating_default = /*#__PURE__*/ _plugin_vue_export_helper_default(/* @__P
3111
3281
  model.value = __props.allowClear && model.value === value ? 0 : value;
3112
3282
  }
3113
3283
  function onKeydown(event) {
3284
+ const along = horizontalStep(event.key, event.currentTarget);
3114
3285
  const next = {
3115
- ArrowRight: model.value + 1,
3286
+ ArrowRight: model.value + along,
3287
+ ArrowLeft: model.value + along,
3116
3288
  ArrowUp: model.value + 1,
3117
- ArrowLeft: model.value - 1,
3118
3289
  ArrowDown: model.value - 1,
3119
3290
  Home: 0,
3120
3291
  End: __props.max
@@ -3142,15 +3313,15 @@ var BaseRating_default = /*#__PURE__*/ _plugin_vue_export_helper_default(/* @__P
3142
3313
  "aria-hidden": "true",
3143
3314
  onClick: ($event) => __props.readonly ? void 0 : pick(star),
3144
3315
  onPointerenter: ($event) => __props.readonly ? void 0 : hovered.value = star
3145
- }, [createVNode(unref(Star), { class: "rk-rating-icon" })], 42, _hoisted_2$14);
3146
- }), 128))], 42, _hoisted_1$16);
3316
+ }, [createVNode(unref(Star), { class: "rk-rating-icon" })], 42, _hoisted_2$15);
3317
+ }), 128))], 42, _hoisted_1$17);
3147
3318
  };
3148
3319
  }
3149
- }), [["__scopeId", "data-v-3118ad6b"]]);
3320
+ }), [["__scopeId", "data-v-b7334b78"]]);
3150
3321
  //#endregion
3151
3322
  //#region src/components/BaseSeparator.vue?vue&type=script&setup=true&lang.ts
3152
- var _hoisted_1$15 = { class: "rk-sep-label" };
3153
- var _hoisted_2$13 = ["aria-orientation"];
3323
+ var _hoisted_1$16 = { class: "rk-sep-label" };
3324
+ var _hoisted_2$14 = ["aria-orientation"];
3154
3325
  //#endregion
3155
3326
  //#region src/components/BaseSeparator.vue
3156
3327
  var BaseSeparator_default = /*#__PURE__*/ _plugin_vue_export_helper_default(/* @__PURE__ */ defineComponent({
@@ -3178,28 +3349,28 @@ var BaseSeparator_default = /*#__PURE__*/ _plugin_vue_export_helper_default(/* @
3178
3349
  "aria-hidden": "true"
3179
3350
  }, [
3180
3351
  _cache[0] || (_cache[0] = createElementVNode("span", { class: "rk-sep-line" }, null, -1)),
3181
- createElementVNode("span", _hoisted_1$15, toDisplayString(__props.label), 1),
3352
+ createElementVNode("span", _hoisted_1$16, toDisplayString(__props.label), 1),
3182
3353
  _cache[1] || (_cache[1] = createElementVNode("span", { class: "rk-sep-line" }, null, -1))
3183
3354
  ], 2)) : (openBlock(), createElementBlock("div", {
3184
3355
  key: 1,
3185
3356
  class: normalizeClass(["rk-sep", [`is-${__props.orientation}`, `space-${__props.spacing}`]]),
3186
3357
  role: "separator",
3187
3358
  "aria-orientation": __props.orientation
3188
- }, null, 10, _hoisted_2$13));
3359
+ }, null, 10, _hoisted_2$14));
3189
3360
  };
3190
3361
  }
3191
3362
  }), [["__scopeId", "data-v-9f8cc9aa"]]);
3192
3363
  //#endregion
3193
3364
  //#region src/components/ColorPicker.vue?vue&type=script&setup=true&lang.ts
3194
- var _hoisted_1$14 = { class: "rk-color-row" };
3195
- var _hoisted_2$12 = [
3365
+ var _hoisted_1$15 = { class: "rk-color-row" };
3366
+ var _hoisted_2$13 = [
3196
3367
  "id",
3197
3368
  "value",
3198
3369
  "disabled",
3199
3370
  "aria-describedby",
3200
3371
  "aria-invalid"
3201
3372
  ];
3202
- var _hoisted_3$11 = [
3373
+ var _hoisted_3$12 = [
3203
3374
  "aria-label",
3204
3375
  "disabled",
3205
3376
  "onKeydown"
@@ -3282,7 +3453,7 @@ var ColorPicker_default = /*#__PURE__*/ _plugin_vue_export_helper_default(/* @__
3282
3453
  "label-hidden": __props.labelHidden,
3283
3454
  class: "rk-color"
3284
3455
  }, {
3285
- default: withCtx(({ id, describedBy, invalid }) => [createElementVNode("div", _hoisted_1$14, [
3456
+ default: withCtx(({ id, describedBy, invalid }) => [createElementVNode("div", _hoisted_1$15, [
3286
3457
  createElementVNode("span", {
3287
3458
  class: "rk-color-well",
3288
3459
  style: normalizeStyle(current.value ? { "--rk-color": current.value } : void 0)
@@ -3295,7 +3466,7 @@ var ColorPicker_default = /*#__PURE__*/ _plugin_vue_export_helper_default(/* @__
3295
3466
  "aria-describedby": describedBy,
3296
3467
  "aria-invalid": invalid,
3297
3468
  onInput: _cache[0] || (_cache[0] = ($event) => set($event.target.value))
3298
- }, null, 40, _hoisted_2$12)], 4),
3469
+ }, null, 40, _hoisted_2$13)], 4),
3299
3470
  __props.hexLabel ? withDirectives((openBlock(), createElementBlock("input", {
3300
3471
  key: 0,
3301
3472
  "onUpdate:modelValue": _cache[1] || (_cache[1] = ($event) => draft.value = $event),
@@ -3307,7 +3478,7 @@ var ColorPicker_default = /*#__PURE__*/ _plugin_vue_export_helper_default(/* @__
3307
3478
  disabled: __props.disabled,
3308
3479
  onBlur: commit,
3309
3480
  onKeydown: withKeys(withModifiers(commit, ["prevent"]), ["enter"])
3310
- }, null, 40, _hoisted_3$11)), [[vModelText, draft.value]]) : createCommentVNode("", true),
3481
+ }, null, 40, _hoisted_3$12)), [[vModelText, draft.value]]) : createCommentVNode("", true),
3311
3482
  __props.swatches.length > 0 ? (openBlock(), createElementBlock("ul", _hoisted_4$7, [(openBlock(true), createElementBlock(Fragment, null, renderList(__props.swatches, (swatch) => {
3312
3483
  return openBlock(), createElementBlock("li", { key: swatch.value }, [createElementVNode("button", {
3313
3484
  type: "button",
@@ -3332,9 +3503,9 @@ var ColorPicker_default = /*#__PURE__*/ _plugin_vue_export_helper_default(/* @__
3332
3503
  }), [["__scopeId", "data-v-5ca23aa9"]]);
3333
3504
  //#endregion
3334
3505
  //#region src/components/CopyButton.vue?vue&type=script&setup=true&lang.ts
3335
- var _hoisted_1$13 = ["aria-label"];
3336
- var _hoisted_2$11 = { key: 2 };
3337
- var _hoisted_3$10 = {
3506
+ var _hoisted_1$14 = ["aria-label"];
3507
+ var _hoisted_2$12 = { key: 2 };
3508
+ var _hoisted_3$11 = {
3338
3509
  class: "sr-only",
3339
3510
  role: "status",
3340
3511
  "aria-live": "polite"
@@ -3392,23 +3563,23 @@ var CopyButton_default = /*#__PURE__*/ _plugin_vue_export_helper_default(/* @__P
3392
3563
  class: "size-4 shrink-0",
3393
3564
  "aria-hidden": "true"
3394
3565
  })),
3395
- __props.withText ? (openBlock(), createElementBlock("span", _hoisted_2$11, toDisplayString(state.value === "copied" ? __props.copiedLabel : __props.copyLabel), 1)) : createCommentVNode("", true),
3396
- createElementVNode("span", _hoisted_3$10, toDisplayString(state.value === "copied" ? __props.copiedLabel : state.value === "failed" ? __props.errorLabel ?? "" : ""), 1)
3397
- ], 10, _hoisted_1$13);
3566
+ __props.withText ? (openBlock(), createElementBlock("span", _hoisted_2$12, toDisplayString(state.value === "copied" ? __props.copiedLabel : __props.copyLabel), 1)) : createCommentVNode("", true),
3567
+ createElementVNode("span", _hoisted_3$11, toDisplayString(state.value === "copied" ? __props.copiedLabel : state.value === "failed" ? __props.errorLabel ?? "" : ""), 1)
3568
+ ], 10, _hoisted_1$14);
3398
3569
  };
3399
3570
  }
3400
3571
  }), [["__scopeId", "data-v-c481e140"]]);
3401
3572
  //#endregion
3402
3573
  //#region src/components/CodeBlock.vue?vue&type=script&setup=true&lang.ts
3403
- var _hoisted_1$12 = {
3574
+ var _hoisted_1$13 = {
3404
3575
  key: 0,
3405
3576
  class: "rk-code-bar"
3406
3577
  };
3407
- var _hoisted_2$10 = {
3578
+ var _hoisted_2$11 = {
3408
3579
  key: 0,
3409
3580
  class: "rk-code-lang"
3410
3581
  };
3411
- var _hoisted_3$9 = [
3582
+ var _hoisted_3$10 = [
3412
3583
  "tabindex",
3413
3584
  "role",
3414
3585
  "aria-label"
@@ -3432,7 +3603,7 @@ var CodeBlock_default = /*#__PURE__*/ _plugin_vue_export_helper_default(/* @__PU
3432
3603
  const copyable = computed(() => __props.copyLabel !== void 0 && __props.copiedLabel !== void 0);
3433
3604
  const scrolls = computed(() => !__props.wrap);
3434
3605
  return (_ctx, _cache) => {
3435
- 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, {
3606
+ 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, {
3436
3607
  key: 1,
3437
3608
  class: "rk-code-copy",
3438
3609
  text: __props.code,
@@ -3447,14 +3618,14 @@ var CodeBlock_default = /*#__PURE__*/ _plugin_vue_export_helper_default(/* @__PU
3447
3618
  tabindex: scrolls.value ? 0 : void 0,
3448
3619
  role: scrolls.value ? "region" : void 0,
3449
3620
  "aria-label": scrolls.value ? __props.label : void 0
3450
- }, [createElementVNode("code", null, [renderSlot(_ctx.$slots, "default", {}, () => [createTextVNode(toDisplayString(__props.code), 1)], true)])], 8, _hoisted_3$9)], 2);
3621
+ }, [createElementVNode("code", null, [renderSlot(_ctx.$slots, "default", {}, () => [createTextVNode(toDisplayString(__props.code), 1)], true)])], 8, _hoisted_3$10)], 2);
3451
3622
  };
3452
3623
  }
3453
3624
  }), [["__scopeId", "data-v-b45043be"]]);
3454
3625
  //#endregion
3455
3626
  //#region src/components/DescriptionList.vue?vue&type=script&setup=true&lang.ts
3456
- var _hoisted_1$11 = { class: "rk-dl-term" };
3457
- var _hoisted_2$9 = { class: "rk-dl-value" };
3627
+ var _hoisted_1$12 = { class: "rk-dl-term" };
3628
+ var _hoisted_2$10 = { class: "rk-dl-value" };
3458
3629
  //#endregion
3459
3630
  //#region src/components/DescriptionList.vue
3460
3631
  var DescriptionList_default = /*#__PURE__*/ _plugin_vue_export_helper_default(/* @__PURE__ */ defineComponent({
@@ -3469,16 +3640,16 @@ var DescriptionList_default = /*#__PURE__*/ _plugin_vue_export_helper_default(/*
3469
3640
  return openBlock(), createElementBlock("div", {
3470
3641
  key: item.key ?? item.term,
3471
3642
  class: "rk-dl-row"
3472
- }, [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)])]);
3643
+ }, [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)])]);
3473
3644
  }), 128))], 2);
3474
3645
  };
3475
3646
  }
3476
3647
  }), [["__scopeId", "data-v-831e205b"]]);
3477
3648
  //#endregion
3478
3649
  //#region src/components/FileDrop.vue?vue&type=script&setup=true&lang.ts
3479
- var _hoisted_1$10 = { class: "rk-drop" };
3480
- var _hoisted_2$8 = ["for"];
3481
- var _hoisted_3$8 = [
3650
+ var _hoisted_1$11 = { class: "rk-drop" };
3651
+ var _hoisted_2$9 = ["for"];
3652
+ var _hoisted_3$9 = [
3482
3653
  "id",
3483
3654
  "accept",
3484
3655
  "multiple",
@@ -3564,7 +3735,7 @@ var FileDrop_default = /*#__PURE__*/ _plugin_vue_export_helper_default(/* @__PUR
3564
3735
  const size = (bytes) => bytes >= 1048576 ? `${(bytes / 1048576).toFixed(1)} MB` : `${Math.max(1, Math.round(bytes / 1024))} KB`;
3565
3736
  const count = computed(() => model.value.length);
3566
3737
  return (_ctx, _cache) => {
3567
- return openBlock(), createElementBlock("div", _hoisted_1$10, [
3738
+ return openBlock(), createElementBlock("div", _hoisted_1$11, [
3568
3739
  createElementVNode("label", {
3569
3740
  class: normalizeClass(["rk-drop-box control", {
3570
3741
  "is-over": over.value,
@@ -3583,7 +3754,7 @@ var FileDrop_default = /*#__PURE__*/ _plugin_vue_export_helper_default(/* @__PUR
3583
3754
  multiple: __props.multiple,
3584
3755
  disabled: __props.disabled,
3585
3756
  onChange: onInput
3586
- }, null, 40, _hoisted_3$8),
3757
+ }, null, 40, _hoisted_3$9),
3587
3758
  createVNode(unref(Upload), {
3588
3759
  class: "text-ink-soft size-6",
3589
3760
  "aria-hidden": "true"
@@ -3591,7 +3762,7 @@ var FileDrop_default = /*#__PURE__*/ _plugin_vue_export_helper_default(/* @__PUR
3591
3762
  createElementVNode("span", _hoisted_4$6, toDisplayString(__props.label), 1),
3592
3763
  __props.hint ? (openBlock(), createElementBlock("span", _hoisted_5$3, toDisplayString(__props.hint), 1)) : createCommentVNode("", true),
3593
3764
  createElementVNode("span", _hoisted_6$3, toDisplayString(__props.browseLabel), 1)
3594
- ], 42, _hoisted_2$8),
3765
+ ], 42, _hoisted_2$9),
3595
3766
  refused.value && __props.tooLargeLabel ? (openBlock(), createElementBlock("p", _hoisted_7$1, toDisplayString(__props.tooLargeLabel), 1)) : createCommentVNode("", true),
3596
3767
  count.value ? (openBlock(), createElementBlock("ul", _hoisted_8, [(openBlock(true), createElementBlock(Fragment, null, renderList(model.value, (file, index) => {
3597
3768
  return openBlock(), createElementBlock("li", {
@@ -3622,7 +3793,7 @@ var FileDrop_default = /*#__PURE__*/ _plugin_vue_export_helper_default(/* @__PUR
3622
3793
  }), [["__scopeId", "data-v-6e903baf"]]);
3623
3794
  //#endregion
3624
3795
  //#region src/components/TagsInput.vue?vue&type=script&setup=true&lang.ts
3625
- var _hoisted_1$9 = [
3796
+ var _hoisted_1$10 = [
3626
3797
  "id",
3627
3798
  "placeholder",
3628
3799
  "aria-describedby",
@@ -3740,7 +3911,7 @@ var TagsInput_default = /*#__PURE__*/ _plugin_vue_export_helper_default(/* @__PU
3740
3911
  onKeydown,
3741
3912
  onPaste,
3742
3913
  onBlur: add
3743
- }, null, 40, _hoisted_1$9), [[vModelText, draft.value]])], 2)]),
3914
+ }, null, 40, _hoisted_1$10), [[vModelText, draft.value]])], 2)]),
3744
3915
  _: 1
3745
3916
  }, 8, [
3746
3917
  "label",
@@ -3754,8 +3925,7 @@ var TagsInput_default = /*#__PURE__*/ _plugin_vue_export_helper_default(/* @__PU
3754
3925
  }), [["__scopeId", "data-v-1fd08921"]]);
3755
3926
  //#endregion
3756
3927
  //#region src/components/BasePopover.vue?vue&type=script&setup=true&lang.ts
3757
- var _hoisted_1$8 = ["id", "aria-label"];
3758
- var FOCUSABLE = "a[href], button:not([disabled]), input:not([disabled]), select:not([disabled]), textarea:not([disabled]), [tabindex]:not([tabindex=\"-1\"])";
3928
+ var _hoisted_1$9 = ["id", "aria-label"];
3759
3929
  //#endregion
3760
3930
  //#region src/components/BasePopover.vue
3761
3931
  var BasePopover_default = /*#__PURE__*/ _plugin_vue_export_helper_default(/* @__PURE__ */ defineComponent({
@@ -3778,10 +3948,12 @@ var BasePopover_default = /*#__PURE__*/ _plugin_vue_export_helper_default(/* @__
3778
3948
  const id = useId();
3779
3949
  const root = ref(null);
3780
3950
  const panel = ref(null);
3781
- /** Where it actually opened, after measuring. */
3782
- const placed = ref(__props.side);
3783
- /** Pixels slid sideways to stay on screen. */
3784
- const shift = ref(0);
3951
+ const { placed, shift } = useAnchoredPanel({
3952
+ root,
3953
+ panel,
3954
+ open,
3955
+ side: __props.side
3956
+ });
3785
3957
  const triggerProps = computed(() => ({
3786
3958
  "aria-expanded": open.value,
3787
3959
  "aria-controls": id,
@@ -3795,23 +3967,6 @@ var BasePopover_default = /*#__PURE__*/ _plugin_vue_export_helper_default(/* @__
3795
3967
  function trigger() {
3796
3968
  return root.value?.querySelector("[data-rk-popover-trigger]") ?? null;
3797
3969
  }
3798
- /**
3799
- * Measured once it is on screen, because only then is there a size to
3800
- * measure. Flips first, then slides: a panel that fits neither above nor
3801
- * below keeps the side it asked for, where it is at least attached.
3802
- */
3803
- function place() {
3804
- if (!panel.value || typeof window === "undefined") return;
3805
- const rect = panel.value.getBoundingClientRect();
3806
- const anchor = root.value.getBoundingClientRect();
3807
- const below = window.innerHeight - anchor.bottom;
3808
- const above = anchor.top;
3809
- if (__props.side === "bottom" && rect.height > below && above > below) placed.value = "top";
3810
- if (__props.side === "top" && rect.height > above && below > above) placed.value = "bottom";
3811
- const margin = 8;
3812
- if (rect.right > window.innerWidth - margin) shift.value = window.innerWidth - margin - rect.right;
3813
- if (rect.left + shift.value < margin) shift.value = margin - rect.left;
3814
- }
3815
3970
  function onKeydown(event) {
3816
3971
  if (event.key !== "Escape" || !open.value) return;
3817
3972
  event.preventDefault();
@@ -3822,12 +3977,6 @@ var BasePopover_default = /*#__PURE__*/ _plugin_vue_export_helper_default(/* @__
3822
3977
  const next = event.relatedTarget;
3823
3978
  if (next && root.value && !root.value.contains(next)) close();
3824
3979
  }
3825
- function watchViewport(on) {
3826
- if (typeof window === "undefined") return;
3827
- const method = on ? "addEventListener" : "removeEventListener";
3828
- window[method]("resize", place);
3829
- window[method]("scroll", place, true);
3830
- }
3831
3980
  function onDocumentPointer(event) {
3832
3981
  if (root.value && !root.value.contains(event.target)) close();
3833
3982
  }
@@ -3835,20 +3984,14 @@ var BasePopover_default = /*#__PURE__*/ _plugin_vue_export_helper_default(/* @__
3835
3984
  if (typeof document === "undefined") return;
3836
3985
  if (!isOpen) {
3837
3986
  document.removeEventListener("pointerdown", onDocumentPointer);
3838
- watchViewport(false);
3839
3987
  return;
3840
3988
  }
3841
3989
  document.addEventListener("pointerdown", onDocumentPointer);
3842
- watchViewport(true);
3843
- placed.value = __props.side;
3844
- shift.value = 0;
3845
3990
  await nextTick();
3846
- place();
3847
- (panel.value?.querySelector(FOCUSABLE) ?? panel.value)?.focus();
3991
+ (panel.value?.querySelector("a[href], button:not([disabled]), input:not([disabled]), select:not([disabled]), textarea:not([disabled]), summary, [tabindex]:not([tabindex=\"-1\"])") ?? panel.value)?.focus();
3848
3992
  }, { immediate: true });
3849
3993
  onBeforeUnmount(() => {
3850
3994
  if (typeof document !== "undefined") document.removeEventListener("pointerdown", onDocumentPointer);
3851
- watchViewport(false);
3852
3995
  });
3853
3996
  return (_ctx, _cache) => {
3854
3997
  return openBlock(), createElementBlock("div", {
@@ -3866,26 +4009,26 @@ var BasePopover_default = /*#__PURE__*/ _plugin_vue_export_helper_default(/* @__
3866
4009
  id: unref(id),
3867
4010
  ref_key: "panel",
3868
4011
  ref: panel,
3869
- class: normalizeClass(["rk-popover-panel surface-overlay", [`is-${placed.value}`, `is-${__props.align}`]]),
3870
- style: normalizeStyle(shift.value ? { "--rk-popover-shift": `${shift.value}px` } : void 0),
4012
+ class: normalizeClass(["rk-popover-panel surface-overlay", [`is-${unref(placed)}`, `is-${__props.align}`]]),
4013
+ style: normalizeStyle(unref(shift) ? { "--rk-popover-shift": `${unref(shift)}px` } : void 0),
3871
4014
  role: "dialog",
3872
4015
  "aria-label": __props.label,
3873
4016
  tabindex: "-1"
3874
- }, [renderSlot(_ctx.$slots, "default", { close }, void 0, true)], 14, _hoisted_1$8)) : createCommentVNode("", true)]),
4017
+ }, [renderSlot(_ctx.$slots, "default", { close }, void 0, true)], 14, _hoisted_1$9)) : createCommentVNode("", true)]),
3875
4018
  _: 3
3876
4019
  })], 544);
3877
4020
  };
3878
4021
  }
3879
- }), [["__scopeId", "data-v-22d8f397"]]);
4022
+ }), [["__scopeId", "data-v-86915db6"]]);
3880
4023
  //#endregion
3881
4024
  //#region src/components/TimePicker.vue?vue&type=script&setup=true&lang.ts
3882
- var _hoisted_1$7 = [
4025
+ var _hoisted_1$8 = [
3883
4026
  "id",
3884
4027
  "aria-describedby",
3885
4028
  "disabled"
3886
4029
  ];
3887
- var _hoisted_2$7 = { class: "truncate" };
3888
- var _hoisted_3$7 = { class: "rk-time-columns" };
4030
+ var _hoisted_2$8 = { class: "truncate" };
4031
+ var _hoisted_3$8 = { class: "rk-time-columns" };
3889
4032
  //#endregion
3890
4033
  //#region src/components/TimePicker.vue
3891
4034
  var TimePicker_default = /*#__PURE__*/ _plugin_vue_export_helper_default(/* @__PURE__ */ defineComponent({
@@ -3987,8 +4130,8 @@ var TimePicker_default = /*#__PURE__*/ _plugin_vue_export_helper_default(/* @__P
3987
4130
  }, props), [createVNode(unref(Clock), {
3988
4131
  class: "size-4 shrink-0",
3989
4132
  "aria-hidden": "true"
3990
- }), createElementVNode("span", _hoisted_2$7, toDisplayString(shown.value || __props.placeholder), 1)], 16, _hoisted_1$7)]),
3991
- default: withCtx(() => [createElementVNode("div", _hoisted_3$7, [createVNode(BaseListbox_default, {
4133
+ }), createElementVNode("span", _hoisted_2$8, toDisplayString(shown.value || __props.placeholder), 1)], 16, _hoisted_1$8)]),
4134
+ default: withCtx(() => [createElementVNode("div", _hoisted_3$8, [createVNode(BaseListbox_default, {
3992
4135
  "model-value": chosenHour.value,
3993
4136
  options: hours.value,
3994
4137
  label: __props.hoursLabel,
@@ -4024,12 +4167,12 @@ var TimePicker_default = /*#__PURE__*/ _plugin_vue_export_helper_default(/* @__P
4024
4167
  }), [["__scopeId", "data-v-ad58b4f3"]]);
4025
4168
  //#endregion
4026
4169
  //#region src/components/BaseTimeline.vue?vue&type=script&setup=true&lang.ts
4027
- var _hoisted_1$6 = ["aria-label"];
4028
- var _hoisted_2$6 = {
4170
+ var _hoisted_1$7 = ["aria-label"];
4171
+ var _hoisted_2$7 = {
4029
4172
  class: "rk-timeline-marker",
4030
4173
  "aria-hidden": "true"
4031
4174
  };
4032
- var _hoisted_3$6 = { class: "rk-timeline-time" };
4175
+ var _hoisted_3$7 = { class: "rk-timeline-time" };
4033
4176
  var _hoisted_4$5 = {
4034
4177
  key: 0,
4035
4178
  class: "rk-timeline-title"
@@ -4063,28 +4206,28 @@ var BaseTimeline_default = /*#__PURE__*/ _plugin_vue_export_helper_default(/* @_
4063
4206
  key: event.key,
4064
4207
  class: "rk-timeline-event"
4065
4208
  }, [
4066
- 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), {
4209
+ 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), {
4067
4210
  key: 0,
4068
4211
  class: "size-3"
4069
4212
  })) : createCommentVNode("", true)], 2)], true)]),
4070
- createElementVNode("p", _hoisted_3$6, toDisplayString(event.time), 1),
4213
+ createElementVNode("p", _hoisted_3$7, toDisplayString(event.time), 1),
4071
4214
  event.title ? (openBlock(), createElementBlock("p", _hoisted_4$5, toDisplayString(event.title), 1)) : createCommentVNode("", true),
4072
4215
  event.description ? (openBlock(), createElementBlock("p", _hoisted_5$2, toDisplayString(event.description), 1)) : createCommentVNode("", true),
4073
4216
  _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)
4074
4217
  ]);
4075
- }), 128))], 8, _hoisted_1$6);
4218
+ }), 128))], 8, _hoisted_1$7);
4076
4219
  };
4077
4220
  }
4078
4221
  }), [["__scopeId", "data-v-8a452f82"]]);
4079
4222
  //#endregion
4080
4223
  //#region src/components/BaseDatePicker.vue?vue&type=script&setup=true&lang.ts
4081
- var _hoisted_1$5 = [
4224
+ var _hoisted_1$6 = [
4082
4225
  "id",
4083
4226
  "aria-describedby",
4084
4227
  "disabled"
4085
4228
  ];
4086
- var _hoisted_2$5 = { class: "truncate" };
4087
- var _hoisted_3$5 = ["aria-label", "disabled"];
4229
+ var _hoisted_2$6 = { class: "truncate" };
4230
+ var _hoisted_3$6 = ["aria-label", "disabled"];
4088
4231
  var _hoisted_4$4 = { class: "rk-date-panel" };
4089
4232
  var _hoisted_5$1 = {
4090
4233
  key: 0,
@@ -4174,7 +4317,7 @@ var BaseDatePicker_default = /*#__PURE__*/ _plugin_vue_export_helper_default(/*
4174
4317
  }, props), [createVNode(unref(CalendarDays), {
4175
4318
  class: "size-4 shrink-0",
4176
4319
  "aria-hidden": "true"
4177
- }), createElementVNode("span", _hoisted_2$5, toDisplayString(shown.value || __props.placeholder), 1)], 16, _hoisted_1$5), __props.clearLabel && shown.value ? (openBlock(), createElementBlock("button", {
4320
+ }), createElementVNode("span", _hoisted_2$6, toDisplayString(shown.value || __props.placeholder), 1)], 16, _hoisted_1$6), __props.clearLabel && shown.value ? (openBlock(), createElementBlock("button", {
4178
4321
  key: 0,
4179
4322
  type: "button",
4180
4323
  class: "rk-date-clear focus-ring",
@@ -4184,7 +4327,7 @@ var BaseDatePicker_default = /*#__PURE__*/ _plugin_vue_export_helper_default(/*
4184
4327
  }, [createVNode(unref(X), {
4185
4328
  class: "size-3.5",
4186
4329
  "aria-hidden": "true"
4187
- })], 8, _hoisted_3$5)) : createCommentVNode("", true)], 2)]),
4330
+ })], 8, _hoisted_3$6)) : createCommentVNode("", true)], 2)]),
4188
4331
  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) => {
4189
4332
  return openBlock(), createElementBlock("li", { key: preset.label }, [createElementVNode("button", {
4190
4333
  type: "button",
@@ -4225,12 +4368,12 @@ var BaseDatePicker_default = /*#__PURE__*/ _plugin_vue_export_helper_default(/*
4225
4368
  }), [["__scopeId", "data-v-42390973"]]);
4226
4369
  //#endregion
4227
4370
  //#region src/components/BasePopconfirm.vue?vue&type=script&setup=true&lang.ts
4228
- var _hoisted_1$4 = { class: "rk-confirm" };
4229
- var _hoisted_2$4 = {
4371
+ var _hoisted_1$5 = { class: "rk-confirm" };
4372
+ var _hoisted_2$5 = {
4230
4373
  key: 0,
4231
4374
  class: "rk-confirm-title"
4232
4375
  };
4233
- var _hoisted_3$4 = { class: "rk-confirm-message" };
4376
+ var _hoisted_3$5 = { class: "rk-confirm-message" };
4234
4377
  var _hoisted_4$3 = { class: "rk-confirm-actions" };
4235
4378
  //#endregion
4236
4379
  //#region src/components/BasePopconfirm.vue
@@ -4270,9 +4413,9 @@ var BasePopconfirm_default = /*#__PURE__*/ _plugin_vue_export_helper_default(/*
4270
4413
  align: "end"
4271
4414
  }, {
4272
4415
  trigger: withCtx((slotProps) => [renderSlot(_ctx.$slots, "trigger", normalizeProps(guardReactiveProps(slotProps)), void 0, true)]),
4273
- default: withCtx(({ close }) => [createElementVNode("div", _hoisted_1$4, [
4274
- __props.title ? (openBlock(), createElementBlock("p", _hoisted_2$4, toDisplayString(__props.title), 1)) : createCommentVNode("", true),
4275
- createElementVNode("p", _hoisted_3$4, toDisplayString(__props.message), 1),
4416
+ default: withCtx(({ close }) => [createElementVNode("div", _hoisted_1$5, [
4417
+ __props.title ? (openBlock(), createElementBlock("p", _hoisted_2$5, toDisplayString(__props.title), 1)) : createCommentVNode("", true),
4418
+ createElementVNode("p", _hoisted_3$5, toDisplayString(__props.message), 1),
4276
4419
  createElementVNode("div", _hoisted_4$3, [createVNode(BaseButton_default, {
4277
4420
  size: "sm",
4278
4421
  variant: "secondary",
@@ -4296,8 +4439,8 @@ var BasePopconfirm_default = /*#__PURE__*/ _plugin_vue_export_helper_default(/*
4296
4439
  }), [["__scopeId", "data-v-9453e511"]]);
4297
4440
  //#endregion
4298
4441
  //#region src/components/ToggleGroup.vue?vue&type=script&setup=true&lang.ts
4299
- var _hoisted_1$3 = ["aria-label"];
4300
- var _hoisted_2$3 = [
4442
+ var _hoisted_1$4 = ["aria-label"];
4443
+ var _hoisted_2$4 = [
4301
4444
  "aria-pressed",
4302
4445
  "aria-label",
4303
4446
  "disabled",
@@ -4305,7 +4448,7 @@ var _hoisted_2$3 = [
4305
4448
  "onClick",
4306
4449
  "onKeydown"
4307
4450
  ];
4308
- var _hoisted_3$3 = { key: 1 };
4451
+ var _hoisted_3$4 = { key: 1 };
4309
4452
  //#endregion
4310
4453
  //#region src/components/ToggleGroup.vue
4311
4454
  var ToggleGroup_default = /*#__PURE__*/ _plugin_vue_export_helper_default(/* @__PURE__ */ defineComponent({
@@ -4351,11 +4494,9 @@ var ToggleGroup_default = /*#__PURE__*/ _plugin_vue_export_helper_default(/* @__
4351
4494
  });
4352
4495
  function onKeydown(event, index) {
4353
4496
  const step = {
4354
- ArrowRight: 1,
4355
4497
  ArrowDown: 1,
4356
- ArrowLeft: -1,
4357
4498
  ArrowUp: -1
4358
- }[event.key];
4499
+ }[event.key] ?? (horizontalStep(event.key, event.currentTarget) || void 0);
4359
4500
  const enabled = buttons.value.filter((button) => !button.disabled);
4360
4501
  let target;
4361
4502
  if (step !== void 0) target = enabled[(enabled.indexOf(buttons.value[index]) + step + enabled.length) % enabled.length];
@@ -4388,16 +4529,16 @@ var ToggleGroup_default = /*#__PURE__*/ _plugin_vue_export_helper_default(/* @__
4388
4529
  key: 0,
4389
4530
  class: "rk-toggle-icon",
4390
4531
  "aria-hidden": "true"
4391
- })) : createCommentVNode("", true), !option.iconOnly ? (openBlock(), createElementBlock("span", _hoisted_3$3, toDisplayString(option.label), 1)) : createCommentVNode("", true)], 40, _hoisted_2$3);
4392
- }), 128))], 10, _hoisted_1$3);
4532
+ })) : createCommentVNode("", true), !option.iconOnly ? (openBlock(), createElementBlock("span", _hoisted_3$4, toDisplayString(option.label), 1)) : createCommentVNode("", true)], 40, _hoisted_2$4);
4533
+ }), 128))], 10, _hoisted_1$4);
4393
4534
  };
4394
4535
  }
4395
- }), [["__scopeId", "data-v-9076e36f"]]);
4536
+ }), [["__scopeId", "data-v-e40e4271"]]);
4396
4537
  //#endregion
4397
4538
  //#region src/components/PinInput.vue?vue&type=script&setup=true&lang.ts
4398
- var _hoisted_1$2 = { class: "rk-pin" };
4399
- var _hoisted_2$2 = ["aria-label"];
4400
- var _hoisted_3$2 = [
4539
+ var _hoisted_1$3 = { class: "rk-pin" };
4540
+ var _hoisted_2$3 = ["aria-label"];
4541
+ var _hoisted_3$3 = [
4401
4542
  "value",
4402
4543
  "type",
4403
4544
  "inputmode",
@@ -4484,16 +4625,13 @@ var PinInput_default = /*#__PURE__*/ _plugin_vue_export_helper_default(/* @__PUR
4484
4625
  if (target < 0) return;
4485
4626
  write(model.value.slice(0, target) + model.value.slice(target + 1));
4486
4627
  focusCell(target);
4487
- } else if (event.key === "ArrowLeft") {
4488
- event.preventDefault();
4489
- focusCell(index - 1);
4490
- } else if (event.key === "ArrowRight") {
4628
+ } else if (event.key === "ArrowLeft" || event.key === "ArrowRight") {
4491
4629
  event.preventDefault();
4492
- focusCell(index + 1);
4630
+ focusCell(index + horizontalStep(event.key, event.currentTarget));
4493
4631
  }
4494
4632
  }
4495
4633
  return (_ctx, _cache) => {
4496
- return openBlock(), createElementBlock("div", _hoisted_1$2, [createElementVNode("div", {
4634
+ return openBlock(), createElementBlock("div", _hoisted_1$3, [createElementVNode("div", {
4497
4635
  class: "rk-pin-cells",
4498
4636
  role: "group",
4499
4637
  "aria-label": __props.label
@@ -4516,8 +4654,8 @@ var PinInput_default = /*#__PURE__*/ _plugin_vue_export_helper_default(/* @__PUR
4516
4654
  onPaste: ($event) => onPaste($event, index),
4517
4655
  onKeydown: ($event) => onKeydown($event, index),
4518
4656
  onFocus: _cache[0] || (_cache[0] = ($event) => $event.target.select())
4519
- }, null, 42, _hoisted_3$2);
4520
- }), 128))], 8, _hoisted_2$2), __props.error ? (openBlock(), createElementBlock("p", {
4657
+ }, null, 42, _hoisted_3$3);
4658
+ }), 128))], 8, _hoisted_2$3), __props.error ? (openBlock(), createElementBlock("p", {
4521
4659
  key: 0,
4522
4660
  id: unref(errorId),
4523
4661
  class: "rk-pin-error",
@@ -4525,7 +4663,128 @@ var PinInput_default = /*#__PURE__*/ _plugin_vue_export_helper_default(/* @__PUR
4525
4663
  }, toDisplayString(__props.error), 9, _hoisted_4$2)) : createCommentVNode("", true)]);
4526
4664
  };
4527
4665
  }
4528
- }), [["__scopeId", "data-v-ba322d9c"]]);
4666
+ }), [["__scopeId", "data-v-1777eac8"]]);
4667
+ //#endregion
4668
+ //#region src/components/PasswordInput.vue?vue&type=script&setup=true&lang.ts
4669
+ var _hoisted_1$2 = { class: "relative" };
4670
+ var _hoisted_2$2 = [
4671
+ "id",
4672
+ "type",
4673
+ "value",
4674
+ "aria-invalid",
4675
+ "aria-describedby"
4676
+ ];
4677
+ var _hoisted_3$2 = ["aria-label", "aria-pressed"];
4678
+ var CONTROL_CLASS = "h-11 text-base";
4679
+ //#endregion
4680
+ //#region src/components/PasswordInput.vue
4681
+ var PasswordInput_default = /* @__PURE__ */ defineComponent({
4682
+ inheritAttrs: false,
4683
+ __name: "PasswordInput",
4684
+ props: {
4685
+ modelValue: { default: "" },
4686
+ label: {},
4687
+ toggleLabel: {},
4688
+ error: { default: "" },
4689
+ hint: { default: "" },
4690
+ labelHidden: {
4691
+ type: Boolean,
4692
+ default: false
4693
+ },
4694
+ fieldId: { default: () => void 0 },
4695
+ size: { default: "md" }
4696
+ },
4697
+ emits: ["update:modelValue", "toggle"],
4698
+ setup(__props, { emit: __emit }) {
4699
+ /**
4700
+ * A password field you can look at.
4701
+ *
4702
+ * The kit already ships `AuthForm` and `BaseInput type="password"`, which is
4703
+ * to say it ships the field and not the one thing every app then adds to it.
4704
+ * A password is the only field in a form whose value is hidden from the
4705
+ * person typing it, on the device where typing is least reliable — and a
4706
+ * generated password pasted into a phone is unverifiable without this. WCAG
4707
+ * 3.3.8 asks that authentication not depend on a cognitive function test;
4708
+ * being unable to see what you typed is one.
4709
+ *
4710
+ * The half that breaks, three ways, and all three compile:
4711
+ *
4712
+ * - **A `<button>` with no `type`.** Inside a form, its default is `submit`,
4713
+ * so looking at the password submits the form — usually with a password
4714
+ * half typed, which then arrives as a failed sign-in attempt.
4715
+ * - **A `<span>` or a bare icon.** Not focusable, not pressable by keyboard,
4716
+ * and named nothing.
4717
+ * - **A change nobody is told about.** The characters appearing is the whole
4718
+ * feedback, and it is visual only.
4719
+ *
4720
+ * The third is answered as a toggle button — one name, `aria-pressed` for
4721
+ * the state — rather than the swapped "Show"/"Hide" name that is the more
4722
+ * common shape. Two reasons. A name that changes under a focus that has not
4723
+ * moved is not reliably re-read, which is why every implementation of the
4724
+ * swapped-name version ends up adding a live region and two more sentences
4725
+ * on top of it; a pressed state on the focused control is announced by every
4726
+ * screen reader without one. And the kit has no language of its own, so the
4727
+ * cheaper pattern is also the one that asks the app for one string instead
4728
+ * of four.
4729
+ *
4730
+ * The field is never revealed by default and reverts to hidden on nothing:
4731
+ * that is deliberate. A component that hid it again on blur would be hiding
4732
+ * it at the exact moment the reader moved to the confirmation field to check
4733
+ * it against.
4734
+ */
4735
+ const emit = __emit;
4736
+ const visible = ref(false);
4737
+ function toggle() {
4738
+ visible.value = !visible.value;
4739
+ emit("toggle", visible.value);
4740
+ }
4741
+ return (_ctx, _cache) => {
4742
+ return openBlock(), createBlock(FormField_default, {
4743
+ label: __props.label,
4744
+ error: __props.error,
4745
+ hint: __props.hint,
4746
+ "label-hidden": __props.labelHidden,
4747
+ "field-id": __props.fieldId,
4748
+ size: __props.size
4749
+ }, {
4750
+ default: withCtx(({ id, describedBy, invalid }) => [createElementVNode("div", _hoisted_1$2, [createElementVNode("input", mergeProps({
4751
+ id,
4752
+ type: visible.value ? "text" : "password",
4753
+ value: __props.modelValue,
4754
+ "aria-invalid": invalid,
4755
+ "aria-describedby": describedBy,
4756
+ autocapitalize: "none",
4757
+ spellcheck: false
4758
+ }, _ctx.$attrs, {
4759
+ 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" : ""]],
4760
+ onInput: _cache[0] || (_cache[0] = ($event) => emit("update:modelValue", $event.target.value))
4761
+ }), null, 16, _hoisted_2$2), createElementVNode("button", {
4762
+ type: "button",
4763
+ 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",
4764
+ "aria-label": __props.toggleLabel,
4765
+ "aria-pressed": visible.value,
4766
+ onClick: toggle
4767
+ }, [visible.value ? (openBlock(), createBlock(unref(EyeOff), {
4768
+ key: 0,
4769
+ class: "size-4",
4770
+ "aria-hidden": "true"
4771
+ })) : (openBlock(), createBlock(unref(Eye), {
4772
+ key: 1,
4773
+ class: "size-4",
4774
+ "aria-hidden": "true"
4775
+ }))], 8, _hoisted_3$2)])]),
4776
+ _: 1
4777
+ }, 8, [
4778
+ "label",
4779
+ "error",
4780
+ "hint",
4781
+ "label-hidden",
4782
+ "field-id",
4783
+ "size"
4784
+ ]);
4785
+ };
4786
+ }
4787
+ });
4529
4788
  //#endregion
4530
4789
  //#region src/components/CircularProgress.vue?vue&type=script&setup=true&lang.ts
4531
4790
  var _hoisted_1$1 = [
@@ -4835,8 +5094,8 @@ function createI18nRuntime(options) {
4835
5094
  *
4836
5095
  * The fallback keeps `vitest` and `vite dev` honest, where no define runs.
4837
5096
  */
4838
- var VERSION = "2.22.0";
5097
+ var VERSION = "2.24.0";
4839
5098
  //#endregion
4840
- 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, 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, ensureSheetRoot, formatDate, formatNumber, fromDateKey, 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 };
5099
+ export { ActivityGrid_default as ActivityGrid, AnnounceHost_default as AnnounceHost, AppError, AvatarStack_default as AvatarStack, BarChart_default as BarChart, 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, DonutChart_default as DonutChart, 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 };
4841
5100
 
4842
5101
  //# sourceMappingURL=index.js.map