rei-kit 2.6.0 → 2.8.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,11 +1,13 @@
1
1
  import { a as addDays, c as lastNDays, d as toDateKey, f as todayKey, i as needsIosInstall, l as leadingBlanks, n as isApplePortable, o as eachDayOfYear, r as isInstalled, s as fromDateKey, t as SettingsGroup_default, u as startOfWeek } from "./SettingsGroup-BXkajKGl.js";
2
2
  import { n as formatNumber, r as setFormatLocale, t as formatDate } from "./format-BEvBK1SJ.js";
3
- import { _ as safeRedirect, a as useBoundValue, b as ensureSheetRoot, c as useToast, d as applyTheme, f as isThemePreference, g as tapFeedback, h as useTheme, i as BaseInput_default, l as useVisualViewport, m as setThemeStorageKey, n as BaseCheckbox_default, o as FormField_default, p as readStoredTheme, r as BaseSheet_default, s as BaseAlert_default, t as GoogleButton_default, u as useOnline, v as toRedirectPath, y as SHEET_ROOT_ID } from "./GoogleButton-nIRz9G8s.js";
3
+ import { n as SHEET_ROOT_ID, r as ensureSheetRoot } from "./inert-TJG_g0d6.js";
4
+ import { _ as safeRedirect, a as useBoundValue, c as useToast, d as applyTheme, f as isThemePreference, g as tapFeedback, h as useTheme, i as BaseInput_default, l as useVisualViewport, m as setThemeStorageKey, n as BaseCheckbox_default, o as FormField_default, p as readStoredTheme, r as BaseSheet_default, s as BaseAlert_default, t as GoogleButton_default, u as useOnline, v as toRedirectPath } from "./GoogleButton-DVro7xZH.js";
4
5
  import { n as registerErrorMapper, r as toAppError, t as AppError } from "./app-error-DF9cijE0.js";
5
6
  import { t as _plugin_vue_export_helper_default } from "./_plugin-vue_export-helper-BOaGB7Aw.js";
6
7
  import { n as BaseButton_default, t as SettingsRow_default } from "./SettingsRow-BXFn8tCk.js";
8
+ import { t as BaseSkeleton_default } from "./BaseSkeleton-B-oo7JKE.js";
7
9
  import { Fragment, Teleport, Transition, TransitionGroup, computed, createBlock, createCommentVNode, createElementBlock, createElementVNode, createTextVNode, createVNode, defineComponent, isRef, mergeModels, mergeProps, nextTick, normalizeClass, normalizeStyle, onBeforeUnmount, onErrorCaptured, onMounted, onScopeDispose, openBlock, readonly, ref, renderList, renderSlot, resolveDynamicComponent, toDisplayString, unref, useId, useModel, useTemplateRef, vModelRadio, vModelSelect, vModelText, vShow, watch, watchEffect, withCtx, withDirectives, withModifiers } from "vue";
8
- import { ArrowDown, ArrowRight, ArrowUp, CalendarDays, Check, CheckCircle2, ChevronDown, ChevronLeft, ChevronRight, Info, Minus, Plus, TriangleAlert, X, XCircle } from "lucide-vue-next";
10
+ import { ArrowDown, ArrowRight, ArrowUp, ArrowUpRight, CalendarDays, Check, CheckCircle2, ChevronDown, ChevronLeft, ChevronRight, Copy, Info, Minus, Paperclip, Plus, Star, TriangleAlert, Upload, X, XCircle } from "lucide-vue-next";
9
11
  import { RouterLink } from "vue-router";
10
12
  import { createI18n } from "vue-i18n";
11
13
  //#region src/utils/day-label.ts
@@ -382,17 +384,17 @@ function useMediaQuery(query) {
382
384
  }
383
385
  //#endregion
384
386
  //#region src/components/BaseAvatar.vue?vue&type=script&setup=true&lang.ts
385
- var _hoisted_1$29 = [
387
+ var _hoisted_1$38 = [
386
388
  "role",
387
389
  "aria-label",
388
390
  "aria-hidden"
389
391
  ];
390
- var _hoisted_2$25 = ["src"];
391
- var _hoisted_3$18 = {
392
+ var _hoisted_2$32 = ["src"];
393
+ var _hoisted_3$21 = {
392
394
  key: 1,
393
395
  class: "rk-avatar-initials"
394
396
  };
395
- var _hoisted_4$15 = {
397
+ var _hoisted_4$17 = {
396
398
  key: 2,
397
399
  viewBox: "0 0 20 20",
398
400
  class: "rk-avatar-figure",
@@ -438,7 +440,7 @@ var BaseAvatar_default = /*#__PURE__*/ _plugin_vue_export_helper_default(/* @__P
438
440
  alt: "",
439
441
  class: "rk-avatar-img",
440
442
  onError: _cache[0] || (_cache[0] = ($event) => broken.value = true)
441
- }, null, 40, _hoisted_2$25)) : __props.fallback === "initials" && initials.value ? (openBlock(), createElementBlock("span", _hoisted_3$18, toDisplayString(initials.value), 1)) : (openBlock(), createElementBlock("svg", _hoisted_4$15, [..._cache[1] || (_cache[1] = [createElementVNode("circle", {
443
+ }, null, 40, _hoisted_2$32)) : __props.fallback === "initials" && initials.value ? (openBlock(), createElementBlock("span", _hoisted_3$21, toDisplayString(initials.value), 1)) : (openBlock(), createElementBlock("svg", _hoisted_4$17, [..._cache[1] || (_cache[1] = [createElementVNode("circle", {
442
444
  cx: "10",
443
445
  cy: "6.75",
444
446
  r: "3.25",
@@ -447,7 +449,7 @@ var BaseAvatar_default = /*#__PURE__*/ _plugin_vue_export_helper_default(/* @__P
447
449
  d: "M3.75 17c0-3.05 2.8-5.25 6.25-5.25S16.25 13.95 16.25 17",
448
450
  "stroke-width": "1.5",
449
451
  "stroke-linecap": "round"
450
- }, null, -1)])]))], 10, _hoisted_1$29);
452
+ }, null, -1)])]))], 10, _hoisted_1$38);
451
453
  };
452
454
  }
453
455
  }), [["__scopeId", "data-v-47586bec"]]);
@@ -472,12 +474,12 @@ var BaseBadge_default = /* @__PURE__ */ defineComponent({
472
474
  });
473
475
  //#endregion
474
476
  //#region src/components/BaseMenu.vue?vue&type=script&setup=true&lang.ts
475
- var _hoisted_1$28 = [
477
+ var _hoisted_1$37 = [
476
478
  "aria-label",
477
479
  "aria-expanded",
478
480
  "aria-controls"
479
481
  ];
480
- var _hoisted_2$24 = ["id"];
482
+ var _hoisted_2$31 = ["id"];
481
483
  //#endregion
482
484
  //#region src/components/BaseMenu.vue
483
485
  var BaseMenu_default = /*#__PURE__*/ _plugin_vue_export_helper_default(/* @__PURE__ */ defineComponent({
@@ -576,14 +578,14 @@ var BaseMenu_default = /*#__PURE__*/ _plugin_vue_export_helper_default(/* @__PUR
576
578
  "aria-haspopup": true,
577
579
  "aria-controls": open.value ? unref(id) : void 0,
578
580
  onClick: _cache[0] || (_cache[0] = ($event) => open.value = !open.value)
579
- }, [renderSlot(_ctx.$slots, "trigger", { open: open.value }, void 0, true)], 8, _hoisted_1$28), open.value ? (openBlock(), createElementBlock("div", {
581
+ }, [renderSlot(_ctx.$slots, "trigger", { open: open.value }, void 0, true)], 8, _hoisted_1$37), open.value ? (openBlock(), createElementBlock("div", {
580
582
  key: 0,
581
583
  id: unref(id),
582
584
  ref_key: "panel",
583
585
  ref: panel,
584
586
  class: normalizeClass(["rk-menu-panel surface-overlay", `is-${__props.align}`]),
585
587
  role: "menu"
586
- }, [renderSlot(_ctx.$slots, "default", {}, void 0, true)], 10, _hoisted_2$24)) : createCommentVNode("", true)], 544);
588
+ }, [renderSlot(_ctx.$slots, "default", {}, void 0, true)], 10, _hoisted_2$31)) : createCommentVNode("", true)], 544);
587
589
  };
588
590
  }
589
591
  }), [["__scopeId", "data-v-e57ec901"]]);
@@ -654,9 +656,9 @@ var BaseCard_default = /* @__PURE__ */ defineComponent({
654
656
  });
655
657
  //#endregion
656
658
  //#region src/components/BaseCombobox.vue?vue&type=script&setup=true&lang.ts
657
- var _hoisted_1$27 = ["for"];
658
- var _hoisted_2$23 = { class: "rk-combo-field" };
659
- var _hoisted_3$17 = [
659
+ var _hoisted_1$36 = ["for"];
660
+ var _hoisted_2$30 = { class: "rk-combo-field" };
661
+ var _hoisted_3$20 = [
660
662
  "id",
661
663
  "placeholder",
662
664
  "disabled",
@@ -665,15 +667,15 @@ var _hoisted_3$17 = [
665
667
  "aria-invalid",
666
668
  "aria-describedby"
667
669
  ];
668
- var _hoisted_4$14 = ["disabled"];
669
- var _hoisted_5$8 = ["aria-label"];
670
- var _hoisted_6$4 = [
670
+ var _hoisted_4$16 = ["disabled"];
671
+ var _hoisted_5$10 = ["aria-label"];
672
+ var _hoisted_6$6 = [
671
673
  "id",
672
674
  "aria-selected",
673
675
  "onPointerdown",
674
676
  "onPointermove"
675
677
  ];
676
- var _hoisted_7$3 = {
678
+ var _hoisted_7$4 = {
677
679
  key: 0,
678
680
  class: "rk-combo-empty"
679
681
  };
@@ -793,8 +795,8 @@ var BaseCombobox_default = /*#__PURE__*/ _plugin_vue_export_helper_default(/* @_
793
795
  createElementVNode("label", {
794
796
  for: unref(id),
795
797
  class: "rk-combo-label"
796
- }, toDisplayString(__props.label), 9, _hoisted_1$27),
797
- createElementVNode("div", _hoisted_2$23, [withDirectives(createElementVNode("input", {
798
+ }, toDisplayString(__props.label), 9, _hoisted_1$36),
799
+ createElementVNode("div", _hoisted_2$30, [withDirectives(createElementVNode("input", {
798
800
  id: unref(id),
799
801
  "onUpdate:modelValue": _cache[0] || (_cache[0] = ($event) => text.value = $event),
800
802
  type: "text",
@@ -811,14 +813,14 @@ var BaseCombobox_default = /*#__PURE__*/ _plugin_vue_export_helper_default(/* @_
811
813
  "aria-describedby": describedBy.value,
812
814
  onKeydown,
813
815
  onFocus: _cache[1] || (_cache[1] = ($event) => open.value = true)
814
- }, null, 40, _hoisted_3$17), [[vModelText, text.value]]), createElementVNode("button", {
816
+ }, null, 40, _hoisted_3$20), [[vModelText, text.value]]), createElementVNode("button", {
815
817
  type: "button",
816
818
  class: "rk-combo-toggle",
817
819
  tabindex: "-1",
818
820
  "aria-hidden": "true",
819
821
  disabled: __props.disabled,
820
822
  onClick: _cache[2] || (_cache[2] = ($event) => open.value = !open.value)
821
- }, " ▾ ", 8, _hoisted_4$14)]),
823
+ }, " ▾ ", 8, _hoisted_4$16)]),
822
824
  withDirectives(createElementVNode("ul", {
823
825
  id: listId,
824
826
  ref_key: "list",
@@ -838,8 +840,8 @@ var BaseCombobox_default = /*#__PURE__*/ _plugin_vue_export_helper_default(/* @_
838
840
  "aria-selected": option.value === model.value,
839
841
  onPointerdown: withModifiers(($event) => choose(option), ["prevent"]),
840
842
  onPointermove: ($event) => highlighted.value = index
841
- }, toDisplayString(option.label), 43, _hoisted_6$4);
842
- }), 128)), matches.value.length === 0 ? (openBlock(), createElementBlock("li", _hoisted_7$3, toDisplayString(__props.emptyLabel), 1)) : createCommentVNode("", true)], 8, _hoisted_5$8), [[vShow, open.value]]),
843
+ }, toDisplayString(option.label), 43, _hoisted_6$6);
844
+ }), 128)), matches.value.length === 0 ? (openBlock(), createElementBlock("li", _hoisted_7$4, toDisplayString(__props.emptyLabel), 1)) : createCommentVNode("", true)], 8, _hoisted_5$10), [[vShow, open.value]]),
843
845
  __props.error ? (openBlock(), createElementBlock("p", {
844
846
  key: 0,
845
847
  id: errorId,
@@ -855,13 +857,13 @@ var BaseCombobox_default = /*#__PURE__*/ _plugin_vue_export_helper_default(/* @_
855
857
  }), [["__scopeId", "data-v-ce4c503f"]]);
856
858
  //#endregion
857
859
  //#region src/components/BaseRadioGroup.vue?vue&type=script&setup=true&lang.ts
858
- var _hoisted_1$26 = ["aria-describedby"];
859
- var _hoisted_2$22 = [
860
+ var _hoisted_1$35 = ["aria-describedby"];
861
+ var _hoisted_2$29 = [
860
862
  "name",
861
863
  "value",
862
864
  "disabled"
863
865
  ];
864
- var _hoisted_3$16 = { class: "text-ink text-sm" };
866
+ var _hoisted_3$19 = { class: "text-ink text-sm" };
865
867
  //#endregion
866
868
  //#region src/components/BaseRadioGroup.vue
867
869
  var BaseRadioGroup_default = /* @__PURE__ */ defineComponent({
@@ -905,7 +907,7 @@ var BaseRadioGroup_default = /* @__PURE__ */ defineComponent({
905
907
  value: option.value,
906
908
  disabled: option.disabled,
907
909
  class: "accent-primary focus-visible:outline-primary size-4 shrink-0 focus-visible:outline-2 focus-visible:outline-offset-2"
908
- }, null, 8, _hoisted_2$22), [[vModelRadio, unref(model)]]), createElementVNode("span", _hoisted_3$16, toDisplayString(option.label), 1)], 2);
910
+ }, null, 8, _hoisted_2$29), [[vModelRadio, unref(model)]]), createElementVNode("span", _hoisted_3$19, toDisplayString(option.label), 1)], 2);
909
911
  }), 128)),
910
912
  __props.error ? (openBlock(), createElementBlock("p", {
911
913
  key: 0,
@@ -916,24 +918,24 @@ var BaseRadioGroup_default = /* @__PURE__ */ defineComponent({
916
918
  id: hintId,
917
919
  class: "text-ink-soft text-xs"
918
920
  }, toDisplayString(__props.hint), 1)) : createCommentVNode("", true)
919
- ], 8, _hoisted_1$26);
921
+ ], 8, _hoisted_1$35);
920
922
  };
921
923
  }
922
924
  });
923
925
  //#endregion
924
926
  //#region src/components/BaseSelect.vue?vue&type=script&setup=true&lang.ts
925
- var _hoisted_1$25 = { class: "relative" };
926
- var _hoisted_2$21 = [
927
+ var _hoisted_1$34 = { class: "relative" };
928
+ var _hoisted_2$28 = [
927
929
  "id",
928
930
  "aria-invalid",
929
931
  "aria-describedby"
930
932
  ];
931
- var _hoisted_3$15 = {
933
+ var _hoisted_3$18 = {
932
934
  key: 0,
933
935
  value: void 0,
934
936
  disabled: ""
935
937
  };
936
- var _hoisted_4$13 = ["value", "disabled"];
938
+ var _hoisted_4$15 = ["value", "disabled"];
937
939
  //#endregion
938
940
  //#region src/components/BaseSelect.vue
939
941
  var BaseSelect_default = /* @__PURE__ */ defineComponent({
@@ -969,7 +971,7 @@ var BaseSelect_default = /* @__PURE__ */ defineComponent({
969
971
  "label-hidden": __props.labelHidden,
970
972
  size: __props.size
971
973
  }, {
972
- default: withCtx(({ id, describedBy, invalid }) => [createElementVNode("div", _hoisted_1$25, [withDirectives(createElementVNode("select", {
974
+ default: withCtx(({ id, describedBy, invalid }) => [createElementVNode("div", _hoisted_1$34, [withDirectives(createElementVNode("select", {
973
975
  id,
974
976
  "onUpdate:modelValue": _cache[0] || (_cache[0] = ($event) => model.value = $event),
975
977
  "aria-invalid": invalid,
@@ -979,13 +981,13 @@ var BaseSelect_default = /* @__PURE__ */ defineComponent({
979
981
  __props.variant === "unstyled" ? "" : SIZE_CLASS[__props.size],
980
982
  __props.variant !== "unstyled" && invalid ? "border-negative" : ""
981
983
  ]])
982
- }, [__props.placeholder ? (openBlock(), createElementBlock("option", _hoisted_3$15, toDisplayString(__props.placeholder), 1)) : createCommentVNode("", true), (openBlock(true), createElementBlock(Fragment, null, renderList(__props.options, (option) => {
984
+ }, [__props.placeholder ? (openBlock(), createElementBlock("option", _hoisted_3$18, toDisplayString(__props.placeholder), 1)) : createCommentVNode("", true), (openBlock(true), createElementBlock(Fragment, null, renderList(__props.options, (option) => {
983
985
  return openBlock(), createElementBlock("option", {
984
986
  key: option.value,
985
987
  value: option.value,
986
988
  disabled: option.disabled
987
- }, toDisplayString(option.label), 9, _hoisted_4$13);
988
- }), 128))], 10, _hoisted_2$21), [[vModelSelect, model.value]]), createVNode(unref(ChevronDown), {
989
+ }, toDisplayString(option.label), 9, _hoisted_4$15);
990
+ }), 128))], 10, _hoisted_2$28), [[vModelSelect, model.value]]), createVNode(unref(ChevronDown), {
989
991
  class: "text-ink-soft pointer-events-none absolute top-1/2 right-3 size-4 -translate-y-1/2",
990
992
  "aria-hidden": "true"
991
993
  })])]),
@@ -1002,11 +1004,11 @@ var BaseSelect_default = /* @__PURE__ */ defineComponent({
1002
1004
  });
1003
1005
  //#endregion
1004
1006
  //#region src/components/BaseSlider.vue?vue&type=script&setup=true&lang.ts
1005
- var _hoisted_1$24 = { class: "rk-slider" };
1006
- var _hoisted_2$20 = { class: "rk-slider-head" };
1007
- var _hoisted_3$14 = ["for"];
1008
- var _hoisted_4$12 = ["for"];
1009
- var _hoisted_5$7 = [
1007
+ var _hoisted_1$33 = { class: "rk-slider" };
1008
+ var _hoisted_2$27 = { class: "rk-slider-head" };
1009
+ var _hoisted_3$17 = ["for"];
1010
+ var _hoisted_4$14 = ["for"];
1011
+ var _hoisted_5$9 = [
1010
1012
  "id",
1011
1013
  "min",
1012
1014
  "max",
@@ -1050,15 +1052,15 @@ var BaseSlider_default = /*#__PURE__*/ _plugin_vue_export_helper_default(/* @__P
1050
1052
  return span <= 0 ? 0 : (model.value - __props.min) / span * 100;
1051
1053
  });
1052
1054
  return (_ctx, _cache) => {
1053
- return openBlock(), createElementBlock("div", _hoisted_1$24, [
1054
- createElementVNode("div", _hoisted_2$20, [createElementVNode("label", {
1055
+ return openBlock(), createElementBlock("div", _hoisted_1$33, [
1056
+ createElementVNode("div", _hoisted_2$27, [createElementVNode("label", {
1055
1057
  for: unref(id),
1056
1058
  class: "rk-slider-label"
1057
- }, toDisplayString(__props.label), 9, _hoisted_3$14), __props.showValue ? (openBlock(), createElementBlock("output", {
1059
+ }, toDisplayString(__props.label), 9, _hoisted_3$17), __props.showValue ? (openBlock(), createElementBlock("output", {
1058
1060
  key: 0,
1059
1061
  for: unref(id),
1060
1062
  class: "rk-slider-value"
1061
- }, toDisplayString(text.value), 9, _hoisted_4$12)) : createCommentVNode("", true)]),
1063
+ }, toDisplayString(text.value), 9, _hoisted_4$14)) : createCommentVNode("", true)]),
1062
1064
  withDirectives(createElementVNode("input", {
1063
1065
  id: unref(id),
1064
1066
  "onUpdate:modelValue": _cache[0] || (_cache[0] = ($event) => model.value = $event),
@@ -1071,7 +1073,7 @@ var BaseSlider_default = /*#__PURE__*/ _plugin_vue_export_helper_default(/* @__P
1071
1073
  "aria-valuetext": text.value,
1072
1074
  "aria-describedby": __props.hint ? hintId : void 0,
1073
1075
  style: normalizeStyle({ "--rk-slider-filled": `${filled.value}%` })
1074
- }, null, 12, _hoisted_5$7), [[
1076
+ }, null, 12, _hoisted_5$9), [[
1075
1077
  vModelText,
1076
1078
  model.value,
1077
1079
  void 0,
@@ -1088,11 +1090,11 @@ var BaseSlider_default = /*#__PURE__*/ _plugin_vue_export_helper_default(/* @__P
1088
1090
  }), [["__scopeId", "data-v-7fa2769b"]]);
1089
1091
  //#endregion
1090
1092
  //#region src/components/BaseSpinner.vue?vue&type=script&setup=true&lang.ts
1091
- var _hoisted_1$23 = {
1093
+ var _hoisted_1$32 = {
1092
1094
  class: "rk-spin-wrap",
1093
1095
  role: "status"
1094
1096
  };
1095
- var _hoisted_2$19 = { class: "rk-spin-label" };
1097
+ var _hoisted_2$26 = { class: "rk-spin-label" };
1096
1098
  //#endregion
1097
1099
  //#region src/components/BaseSpinner.vue
1098
1100
  var BaseSpinner_default = /*#__PURE__*/ _plugin_vue_export_helper_default(/* @__PURE__ */ defineComponent({
@@ -1120,26 +1122,26 @@ var BaseSpinner_default = /*#__PURE__*/ _plugin_vue_export_helper_default(/* @__
1120
1122
  lg: "2.5rem"
1121
1123
  };
1122
1124
  return (_ctx, _cache) => {
1123
- return openBlock(), createElementBlock("span", _hoisted_1$23, [createElementVNode("span", {
1125
+ return openBlock(), createElementBlock("span", _hoisted_1$32, [createElementVNode("span", {
1124
1126
  class: "rk-spin",
1125
1127
  style: normalizeStyle({
1126
1128
  width: SIZES[__props.size],
1127
1129
  height: SIZES[__props.size]
1128
1130
  }),
1129
1131
  "aria-hidden": "true"
1130
- }, null, 4), createElementVNode("span", _hoisted_2$19, toDisplayString(__props.label), 1)]);
1132
+ }, null, 4), createElementVNode("span", _hoisted_2$26, toDisplayString(__props.label), 1)]);
1131
1133
  };
1132
1134
  }
1133
1135
  }), [["__scopeId", "data-v-842da62c"]]);
1134
1136
  //#endregion
1135
1137
  //#region src/components/BaseSwitch.vue?vue&type=script&setup=true&lang.ts
1136
- var _hoisted_1$22 = { class: "flex items-center justify-between gap-4" };
1137
- var _hoisted_2$18 = {
1138
+ var _hoisted_1$31 = { class: "flex items-center justify-between gap-4" };
1139
+ var _hoisted_2$25 = {
1138
1140
  key: 0,
1139
1141
  class: "min-w-0"
1140
1142
  };
1141
- var _hoisted_3$13 = ["id"];
1142
- var _hoisted_4$11 = [
1143
+ var _hoisted_3$16 = ["id"];
1144
+ var _hoisted_4$13 = [
1143
1145
  "aria-checked",
1144
1146
  "aria-labelledby",
1145
1147
  "aria-label",
@@ -1178,10 +1180,10 @@ var BaseSwitch_default = /*#__PURE__*/ _plugin_vue_export_helper_default(/* @__P
1178
1180
  if (!__props.disabled) model.value = !model.value;
1179
1181
  }
1180
1182
  return (_ctx, _cache) => {
1181
- return openBlock(), createElementBlock("div", _hoisted_1$22, [!__props.labelHidden ? (openBlock(), createElementBlock("span", _hoisted_2$18, [createElementVNode("span", {
1183
+ return openBlock(), createElementBlock("div", _hoisted_1$31, [!__props.labelHidden ? (openBlock(), createElementBlock("span", _hoisted_2$25, [createElementVNode("span", {
1182
1184
  id: unref(id),
1183
1185
  class: "text-ink block text-sm"
1184
- }, toDisplayString(__props.label), 9, _hoisted_3$13), __props.hint ? (openBlock(), createElementBlock("span", {
1186
+ }, toDisplayString(__props.label), 9, _hoisted_3$16), __props.hint ? (openBlock(), createElementBlock("span", {
1185
1187
  key: 0,
1186
1188
  id: hintId,
1187
1189
  class: "text-ink-soft mt-0.5 block text-xs"
@@ -1198,17 +1200,17 @@ var BaseSwitch_default = /*#__PURE__*/ _plugin_vue_export_helper_default(/* @__P
1198
1200
  }, [..._cache[0] || (_cache[0] = [createElementVNode("span", {
1199
1201
  class: "rk-switch-knob",
1200
1202
  "aria-hidden": "true"
1201
- }, null, -1)])], 10, _hoisted_4$11)]);
1203
+ }, null, -1)])], 10, _hoisted_4$13)]);
1202
1204
  };
1203
1205
  }
1204
1206
  }), [["__scopeId", "data-v-3f4400a0"]]);
1205
1207
  //#endregion
1206
1208
  //#region src/components/BaseTable.vue?vue&type=script&setup=true&lang.ts
1207
- var _hoisted_1$21 = ["aria-label"];
1208
- var _hoisted_2$17 = { class: "rk-table" };
1209
- var _hoisted_3$12 = { key: 0 };
1210
- var _hoisted_4$10 = { key: 1 };
1211
- var _hoisted_5$6 = ["colspan"];
1209
+ var _hoisted_1$30 = ["aria-label"];
1210
+ var _hoisted_2$24 = { class: "rk-table" };
1211
+ var _hoisted_3$15 = { key: 0 };
1212
+ var _hoisted_4$12 = { key: 1 };
1213
+ var _hoisted_5$8 = ["colspan"];
1212
1214
  //#endregion
1213
1215
  //#region src/components/BaseTable.vue
1214
1216
  var BaseTable_default = /*#__PURE__*/ _plugin_vue_export_helper_default(/* @__PURE__ */ defineComponent({
@@ -1231,7 +1233,7 @@ var BaseTable_default = /*#__PURE__*/ _plugin_vue_export_helper_default(/* @__PU
1231
1233
  tabindex: "0",
1232
1234
  role: "region",
1233
1235
  "aria-label": __props.caption
1234
- }, [createElementVNode("table", _hoisted_2$17, [
1236
+ }, [createElementVNode("table", _hoisted_2$24, [
1235
1237
  createElementVNode("caption", { class: normalizeClass(__props.captionHidden ? "rk-table-caption-hidden" : "rk-table-caption") }, toDisplayString(__props.caption), 3),
1236
1238
  createElementVNode("thead", null, [createElementVNode("tr", null, [(openBlock(true), createElementBlock(Fragment, null, renderList(__props.columns, (column) => {
1237
1239
  return openBlock(), createElementBlock("th", {
@@ -1240,7 +1242,7 @@ var BaseTable_default = /*#__PURE__*/ _plugin_vue_export_helper_default(/* @__PU
1240
1242
  class: normalizeClass([column.align === "end" && "is-end", column.nowrap && "is-nowrap"])
1241
1243
  }, toDisplayString(column.label), 3);
1242
1244
  }), 128))])]),
1243
- __props.rows.length > 0 ? (openBlock(), createElementBlock("tbody", _hoisted_3$12, [(openBlock(true), createElementBlock(Fragment, null, renderList(__props.rows, (row, index) => {
1245
+ __props.rows.length > 0 ? (openBlock(), createElementBlock("tbody", _hoisted_3$15, [(openBlock(true), createElementBlock(Fragment, null, renderList(__props.rows, (row, index) => {
1244
1246
  return openBlock(), createElementBlock("tr", { key: keyFor(row, index) }, [(openBlock(true), createElementBlock(Fragment, null, renderList(__props.columns, (column) => {
1245
1247
  return openBlock(), createElementBlock("td", {
1246
1248
  key: column.key,
@@ -1250,17 +1252,17 @@ var BaseTable_default = /*#__PURE__*/ _plugin_vue_export_helper_default(/* @__PU
1250
1252
  value: row[column.key]
1251
1253
  }, () => [createTextVNode(toDisplayString(row[column.key]), 1)], true)], 2);
1252
1254
  }), 128))]);
1253
- }), 128))])) : (openBlock(), createElementBlock("tbody", _hoisted_4$10, [createElementVNode("tr", null, [createElementVNode("td", {
1255
+ }), 128))])) : (openBlock(), createElementBlock("tbody", _hoisted_4$12, [createElementVNode("tr", null, [createElementVNode("td", {
1254
1256
  colspan: __props.columns.length,
1255
1257
  class: "rk-table-empty"
1256
- }, [renderSlot(_ctx.$slots, "empty", {}, void 0, true)], 8, _hoisted_5$6)])]))
1257
- ])], 8, _hoisted_1$21);
1258
+ }, [renderSlot(_ctx.$slots, "empty", {}, void 0, true)], 8, _hoisted_5$8)])]))
1259
+ ])], 8, _hoisted_1$30);
1258
1260
  };
1259
1261
  }
1260
1262
  }), [["__scopeId", "data-v-89958b5a"]]);
1261
1263
  //#endregion
1262
1264
  //#region src/components/BaseTextarea.vue?vue&type=script&setup=true&lang.ts
1263
- var _hoisted_1$20 = [
1265
+ var _hoisted_1$29 = [
1264
1266
  "id",
1265
1267
  "rows",
1266
1268
  "aria-invalid",
@@ -1306,7 +1308,7 @@ var BaseTextarea_default = /* @__PURE__ */ defineComponent({
1306
1308
  __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",
1307
1309
  "text-base",
1308
1310
  __props.variant !== "unstyled" && invalid ? "border-negative" : ""
1309
- ] }), null, 16, _hoisted_1$20), [[vModelText, unref(model)]])]),
1311
+ ] }), null, 16, _hoisted_1$29), [[vModelText, unref(model)]])]),
1310
1312
  _: 1
1311
1313
  }, 8, [
1312
1314
  "label",
@@ -1320,17 +1322,17 @@ var BaseTextarea_default = /* @__PURE__ */ defineComponent({
1320
1322
  });
1321
1323
  //#endregion
1322
1324
  //#region src/components/EmptyState.vue?vue&type=script&setup=true&lang.ts
1323
- var _hoisted_1$19 = { class: "flex flex-col items-center gap-3 px-6 py-10 text-center" };
1324
- var _hoisted_2$16 = {
1325
+ var _hoisted_1$28 = { class: "flex flex-col items-center gap-3 px-6 py-10 text-center" };
1326
+ var _hoisted_2$23 = {
1325
1327
  key: 0,
1326
1328
  class: "bg-muted text-primary rounded-card flex size-12 items-center justify-center"
1327
1329
  };
1328
- var _hoisted_3$11 = { class: "text-ink text-base font-semibold" };
1329
- var _hoisted_4$9 = {
1330
+ var _hoisted_3$14 = { class: "text-ink text-base font-semibold" };
1331
+ var _hoisted_4$11 = {
1330
1332
  key: 1,
1331
1333
  class: "text-ink-soft max-w-[36ch] text-sm"
1332
1334
  };
1333
- var _hoisted_5$5 = {
1335
+ var _hoisted_5$7 = {
1334
1336
  key: 2,
1335
1337
  class: "mt-2 flex w-full flex-col gap-2"
1336
1338
  };
@@ -1352,11 +1354,11 @@ var EmptyState_default = /* @__PURE__ */ defineComponent({
1352
1354
  * goes — the button that creates the first one.
1353
1355
  */
1354
1356
  return (_ctx, _cache) => {
1355
- return openBlock(), createElementBlock("div", _hoisted_1$19, [
1356
- _ctx.$slots.icon ? (openBlock(), createElementBlock("div", _hoisted_2$16, [renderSlot(_ctx.$slots, "icon")])) : createCommentVNode("", true),
1357
- createElementVNode("h3", _hoisted_3$11, toDisplayString(__props.title), 1),
1358
- __props.description ? (openBlock(), createElementBlock("p", _hoisted_4$9, toDisplayString(__props.description), 1)) : createCommentVNode("", true),
1359
- _ctx.$slots.action ? (openBlock(), createElementBlock("div", _hoisted_5$5, [renderSlot(_ctx.$slots, "action")])) : createCommentVNode("", true)
1357
+ return openBlock(), createElementBlock("div", _hoisted_1$28, [
1358
+ _ctx.$slots.icon ? (openBlock(), createElementBlock("div", _hoisted_2$23, [renderSlot(_ctx.$slots, "icon")])) : createCommentVNode("", true),
1359
+ createElementVNode("h3", _hoisted_3$14, toDisplayString(__props.title), 1),
1360
+ __props.description ? (openBlock(), createElementBlock("p", _hoisted_4$11, toDisplayString(__props.description), 1)) : createCommentVNode("", true),
1361
+ _ctx.$slots.action ? (openBlock(), createElementBlock("div", _hoisted_5$7, [renderSlot(_ctx.$slots, "action")])) : createCommentVNode("", true)
1360
1362
  ]);
1361
1363
  };
1362
1364
  }
@@ -1423,11 +1425,11 @@ var PageContainer_default = /* @__PURE__ */ defineComponent({
1423
1425
  });
1424
1426
  //#endregion
1425
1427
  //#region src/components/PageHeader.vue?vue&type=script&setup=true&lang.ts
1426
- var _hoisted_1$18 = { class: "grid h-12 shrink-0 grid-cols-[2.5rem_1fr_2.5rem] items-center" };
1427
- var _hoisted_2$15 = { class: "justify-self-start" };
1428
- var _hoisted_3$10 = { class: "text-ink flex min-w-0 justify-center text-base font-semibold tabular-nums" };
1429
- var _hoisted_4$8 = { class: "truncate" };
1430
- var _hoisted_5$4 = { class: "justify-self-end" };
1428
+ var _hoisted_1$27 = { class: "grid h-12 shrink-0 grid-cols-[2.5rem_1fr_2.5rem] items-center" };
1429
+ var _hoisted_2$22 = { class: "justify-self-start" };
1430
+ var _hoisted_3$13 = { class: "text-ink flex min-w-0 justify-center text-base font-semibold tabular-nums" };
1431
+ var _hoisted_4$10 = { class: "truncate" };
1432
+ var _hoisted_5$6 = { class: "justify-self-end" };
1431
1433
  //#endregion
1432
1434
  //#region src/components/PageHeader.vue
1433
1435
  var PageHeader_default = /* @__PURE__ */ defineComponent({
@@ -1444,17 +1446,17 @@ var PageHeader_default = /* @__PURE__ */ defineComponent({
1444
1446
  * each other.
1445
1447
  */
1446
1448
  return (_ctx, _cache) => {
1447
- return openBlock(), createElementBlock("header", _hoisted_1$18, [
1448
- createElementVNode("div", _hoisted_2$15, [renderSlot(_ctx.$slots, "left")]),
1449
- createElementVNode("h1", _hoisted_3$10, [renderSlot(_ctx.$slots, "title", {}, () => [createElementVNode("span", _hoisted_4$8, toDisplayString(__props.title), 1)])]),
1450
- createElementVNode("div", _hoisted_5$4, [renderSlot(_ctx.$slots, "right")])
1449
+ return openBlock(), createElementBlock("header", _hoisted_1$27, [
1450
+ createElementVNode("div", _hoisted_2$22, [renderSlot(_ctx.$slots, "left")]),
1451
+ createElementVNode("h1", _hoisted_3$13, [renderSlot(_ctx.$slots, "title", {}, () => [createElementVNode("span", _hoisted_4$10, toDisplayString(__props.title), 1)])]),
1452
+ createElementVNode("div", _hoisted_5$6, [renderSlot(_ctx.$slots, "right")])
1451
1453
  ]);
1452
1454
  };
1453
1455
  }
1454
1456
  });
1455
1457
  //#endregion
1456
1458
  //#region src/components/ProgressBar.vue?vue&type=script&setup=true&lang.ts
1457
- var _hoisted_1$17 = ["aria-valuenow", "aria-label"];
1459
+ var _hoisted_1$26 = ["aria-valuenow", "aria-label"];
1458
1460
  //#endregion
1459
1461
  //#region src/components/ProgressBar.vue
1460
1462
  var ProgressBar_default = /* @__PURE__ */ defineComponent({
@@ -1486,38 +1488,38 @@ var ProgressBar_default = /* @__PURE__ */ defineComponent({
1486
1488
  }, [createElementVNode("div", {
1487
1489
  class: "bg-primary h-full rounded-full transition-[width] duration-700 ease-out",
1488
1490
  style: normalizeStyle({ width: `${portion.value}%` })
1489
- }, null, 4)], 10, _hoisted_1$17);
1491
+ }, null, 4)], 10, _hoisted_1$26);
1490
1492
  };
1491
1493
  }
1492
1494
  });
1493
1495
  //#endregion
1494
1496
  //#region src/components/PriceCard.vue?vue&type=script&setup=true&lang.ts
1495
- var _hoisted_1$16 = {
1497
+ var _hoisted_1$25 = {
1496
1498
  key: 0,
1497
1499
  class: "bg-primary rounded-cell text-on-primary absolute -top-3 left-7 px-3 py-1 text-[0.7rem] font-semibold"
1498
1500
  };
1499
- var _hoisted_2$14 = { class: "flex items-start justify-between gap-4" };
1500
- var _hoisted_3$9 = { class: "text-ink mt-5 text-lg font-semibold" };
1501
- var _hoisted_4$7 = {
1501
+ var _hoisted_2$21 = { class: "flex items-start justify-between gap-4" };
1502
+ var _hoisted_3$12 = { class: "text-ink mt-5 text-lg font-semibold" };
1503
+ var _hoisted_4$9 = {
1502
1504
  key: 1,
1503
1505
  class: "text-ink-soft mt-1.5 text-sm leading-relaxed"
1504
1506
  };
1505
- var _hoisted_5$3 = { class: "mt-6 flex items-baseline gap-1.5" };
1506
- var _hoisted_6$3 = { class: "text-ink text-3xl font-semibold tracking-tight tabular-nums" };
1507
- var _hoisted_7$2 = {
1507
+ var _hoisted_5$5 = { class: "mt-6 flex items-baseline gap-1.5" };
1508
+ var _hoisted_6$5 = { class: "text-ink text-3xl font-semibold tracking-tight tabular-nums" };
1509
+ var _hoisted_7$3 = {
1508
1510
  key: 0,
1509
1511
  class: "text-ink-soft text-sm"
1510
1512
  };
1511
- var _hoisted_8$1 = {
1513
+ var _hoisted_8$2 = {
1512
1514
  key: 2,
1513
1515
  class: "text-ink-soft mt-1 text-xs"
1514
1516
  };
1515
- var _hoisted_9$1 = { class: "mt-7 flex-1 space-y-3" };
1516
- var _hoisted_10$1 = {
1517
+ var _hoisted_9$2 = { class: "mt-7 flex-1 space-y-3" };
1518
+ var _hoisted_10$2 = {
1517
1519
  key: 0,
1518
1520
  class: "mt-[0.45rem] shrink-0"
1519
1521
  };
1520
- var _hoisted_11$1 = {
1522
+ var _hoisted_11$2 = {
1521
1523
  key: 1,
1522
1524
  class: "bg-primary/45 mt-[0.45rem] size-1.5 shrink-0 rounded-full",
1523
1525
  "aria-hidden": "true"
@@ -1567,23 +1569,23 @@ var PriceCard_default = /* @__PURE__ */ defineComponent({
1567
1569
  const palette = computed(() => TONE[__props.tone]);
1568
1570
  return (_ctx, _cache) => {
1569
1571
  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"]]) }, [
1570
- __props.badge && __props.recommended ? (openBlock(), createElementBlock("span", _hoisted_1$16, toDisplayString(__props.badge), 1)) : createCommentVNode("", true),
1571
- createElementVNode("div", _hoisted_2$14, [_ctx.$slots.icon ? (openBlock(), createElementBlock("span", {
1572
+ __props.badge && __props.recommended ? (openBlock(), createElementBlock("span", _hoisted_1$25, toDisplayString(__props.badge), 1)) : createCommentVNode("", true),
1573
+ createElementVNode("div", _hoisted_2$21, [_ctx.$slots.icon ? (openBlock(), createElementBlock("span", {
1572
1574
  key: 0,
1573
1575
  class: normalizeClass(["rounded-card grid size-11 place-items-center text-xl", palette.value.icon])
1574
1576
  }, [renderSlot(_ctx.$slots, "icon")], 2)) : createCommentVNode("", true), __props.chip ? (openBlock(), createElementBlock("span", {
1575
1577
  key: 1,
1576
1578
  class: normalizeClass(["rounded-cell ml-auto px-2.5 py-1 text-[0.7rem] font-medium", palette.value.soft])
1577
1579
  }, toDisplayString(__props.chip), 3)) : createCommentVNode("", true)]),
1578
- createElementVNode("h3", _hoisted_3$9, toDisplayString(__props.name), 1),
1579
- __props.lead ? (openBlock(), createElementBlock("p", _hoisted_4$7, toDisplayString(__props.lead), 1)) : createCommentVNode("", true),
1580
- createElementVNode("p", _hoisted_5$3, [createElementVNode("span", _hoisted_6$3, toDisplayString(__props.price), 1), __props.period ? (openBlock(), createElementBlock("span", _hoisted_7$2, toDisplayString(__props.period), 1)) : createCommentVNode("", true)]),
1581
- __props.note ? (openBlock(), createElementBlock("p", _hoisted_8$1, toDisplayString(__props.note), 1)) : createCommentVNode("", true),
1582
- createElementVNode("ul", _hoisted_9$1, [(openBlock(true), createElementBlock(Fragment, null, renderList(__props.features, (feature) => {
1580
+ createElementVNode("h3", _hoisted_3$12, toDisplayString(__props.name), 1),
1581
+ __props.lead ? (openBlock(), createElementBlock("p", _hoisted_4$9, toDisplayString(__props.lead), 1)) : createCommentVNode("", true),
1582
+ createElementVNode("p", _hoisted_5$5, [createElementVNode("span", _hoisted_6$5, toDisplayString(__props.price), 1), __props.period ? (openBlock(), createElementBlock("span", _hoisted_7$3, toDisplayString(__props.period), 1)) : createCommentVNode("", true)]),
1583
+ __props.note ? (openBlock(), createElementBlock("p", _hoisted_8$2, toDisplayString(__props.note), 1)) : createCommentVNode("", true),
1584
+ createElementVNode("ul", _hoisted_9$2, [(openBlock(true), createElementBlock(Fragment, null, renderList(__props.features, (feature) => {
1583
1585
  return openBlock(), createElementBlock("li", {
1584
1586
  key: feature,
1585
1587
  class: "flex gap-3 text-sm"
1586
- }, [_ctx.$slots.bullet ? (openBlock(), createElementBlock("span", _hoisted_10$1, [renderSlot(_ctx.$slots, "bullet")])) : (openBlock(), createElementBlock("span", _hoisted_11$1)), createElementVNode("span", _hoisted_12$1, toDisplayString(feature), 1)]);
1588
+ }, [_ctx.$slots.bullet ? (openBlock(), createElementBlock("span", _hoisted_10$2, [renderSlot(_ctx.$slots, "bullet")])) : (openBlock(), createElementBlock("span", _hoisted_11$2)), createElementVNode("span", _hoisted_12$1, toDisplayString(feature), 1)]);
1587
1589
  }), 128))]),
1588
1590
  _ctx.$slots.action ? (openBlock(), createElementBlock("div", _hoisted_13, [renderSlot(_ctx.$slots, "action")])) : createCommentVNode("", true)
1589
1591
  ], 2);
@@ -1592,8 +1594,8 @@ var PriceCard_default = /* @__PURE__ */ defineComponent({
1592
1594
  });
1593
1595
  //#endregion
1594
1596
  //#region src/components/ToneDot.vue?vue&type=script&setup=true&lang.ts
1595
- var _hoisted_1$15 = { class: "inline-flex items-center gap-1.5" };
1596
- var _hoisted_2$13 = {
1597
+ var _hoisted_1$24 = { class: "inline-flex items-center gap-1.5" };
1598
+ var _hoisted_2$20 = {
1597
1599
  key: 0,
1598
1600
  class: "text-ink-soft text-xs font-medium"
1599
1601
  };
@@ -1614,13 +1616,13 @@ var ToneDot_default = /* @__PURE__ */ defineComponent({
1614
1616
  * priorities — without this component knowing about any of them.
1615
1617
  */
1616
1618
  return (_ctx, _cache) => {
1617
- return openBlock(), createElementBlock("span", _hoisted_1$15, [createElementVNode("span", { class: normalizeClass(["size-2 rounded-full", __props.fill]) }, null, 2), __props.label ? (openBlock(), createElementBlock("span", _hoisted_2$13, toDisplayString(__props.label), 1)) : createCommentVNode("", true)]);
1619
+ return openBlock(), createElementBlock("span", _hoisted_1$24, [createElementVNode("span", { class: normalizeClass(["size-2 rounded-full", __props.fill]) }, null, 2), __props.label ? (openBlock(), createElementBlock("span", _hoisted_2$20, toDisplayString(__props.label), 1)) : createCommentVNode("", true)]);
1618
1620
  };
1619
1621
  }
1620
1622
  });
1621
1623
  //#endregion
1622
1624
  //#region src/components/SectionHeading.vue?vue&type=script&setup=true&lang.ts
1623
- var _hoisted_1$14 = {
1625
+ var _hoisted_1$23 = {
1624
1626
  key: 0,
1625
1627
  class: "text-ink-soft text-xs tabular-nums"
1626
1628
  };
@@ -1638,15 +1640,15 @@ var SectionHeading_default = /* @__PURE__ */ defineComponent({
1638
1640
  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]) }, [
1639
1641
  createVNode(ToneDot_default, { fill: __props.tone.fill }, null, 8, ["fill"]),
1640
1642
  createElementVNode("span", { class: normalizeClass(["text-xs font-semibold tracking-wide uppercase", __props.tone.text]) }, toDisplayString(__props.label), 3),
1641
- __props.count > 0 ? (openBlock(), createElementBlock("span", _hoisted_1$14, toDisplayString(__props.count), 1)) : createCommentVNode("", true)
1643
+ __props.count > 0 ? (openBlock(), createElementBlock("span", _hoisted_1$23, toDisplayString(__props.count), 1)) : createCommentVNode("", true)
1642
1644
  ], 2);
1643
1645
  };
1644
1646
  }
1645
1647
  });
1646
1648
  //#endregion
1647
1649
  //#region src/components/SegmentedControl.vue?vue&type=script&setup=true&lang.ts
1648
- var _hoisted_1$13 = { class: "bg-muted rounded-card flex w-full gap-1 p-1" };
1649
- var _hoisted_2$12 = ["value", "name"];
1650
+ var _hoisted_1$22 = { class: "bg-muted rounded-card flex w-full gap-1 p-1" };
1651
+ var _hoisted_2$19 = ["value", "name"];
1650
1652
  //#endregion
1651
1653
  //#region src/components/SegmentedControl.vue
1652
1654
  var SegmentedControl_default = /* @__PURE__ */ defineComponent({
@@ -1660,7 +1662,7 @@ var SegmentedControl_default = /* @__PURE__ */ defineComponent({
1660
1662
  const model = useModel(__props, "modelValue");
1661
1663
  const name = useId();
1662
1664
  return (_ctx, _cache) => {
1663
- return openBlock(), createElementBlock("div", _hoisted_1$13, [(openBlock(true), createElementBlock(Fragment, null, renderList(__props.options, (option) => {
1665
+ return openBlock(), createElementBlock("div", _hoisted_1$22, [(openBlock(true), createElementBlock(Fragment, null, renderList(__props.options, (option) => {
1664
1666
  return openBlock(), createElementBlock("label", {
1665
1667
  key: String(option.value),
1666
1668
  class: "flex-1 cursor-pointer"
@@ -1670,18 +1672,18 @@ var SegmentedControl_default = /* @__PURE__ */ defineComponent({
1670
1672
  value: option.value,
1671
1673
  name: unref(name),
1672
1674
  class: "peer sr-only"
1673
- }, null, 8, _hoisted_2$12), [[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)]);
1675
+ }, null, 8, _hoisted_2$19), [[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)]);
1674
1676
  }), 128))]);
1675
1677
  };
1676
1678
  }
1677
1679
  });
1678
1680
  //#endregion
1679
1681
  //#region src/components/SkeletonList.vue?vue&type=script&setup=true&lang.ts
1680
- var _hoisted_1$12 = {
1682
+ var _hoisted_1$21 = {
1681
1683
  role: "status",
1682
1684
  class: "flex flex-col gap-1"
1683
1685
  };
1684
- var _hoisted_2$11 = { class: "sr-only" };
1686
+ var _hoisted_2$18 = { class: "sr-only" };
1685
1687
  //#endregion
1686
1688
  //#region src/components/SkeletonList.vue
1687
1689
  var SkeletonList_default = /* @__PURE__ */ defineComponent({
@@ -1695,7 +1697,7 @@ var SkeletonList_default = /* @__PURE__ */ defineComponent({
1695
1697
  /** A length starts with a digit, a dot, or opens a CSS function. */
1696
1698
  const isLength = computed(() => /^(?:[.\d]|calc\(|var\(|clamp\(|min\(|max\()/.test(__props.rowHeight));
1697
1699
  return (_ctx, _cache) => {
1698
- return openBlock(), createElementBlock("div", _hoisted_1$12, [createElementVNode("span", _hoisted_2$11, toDisplayString(__props.label), 1), (openBlock(true), createElementBlock(Fragment, null, renderList(__props.rows, (row) => {
1700
+ return openBlock(), createElementBlock("div", _hoisted_1$21, [createElementVNode("span", _hoisted_2$18, toDisplayString(__props.label), 1), (openBlock(true), createElementBlock(Fragment, null, renderList(__props.rows, (row) => {
1699
1701
  return openBlock(), createElementBlock("div", {
1700
1702
  key: row,
1701
1703
  class: normalizeClass(["bg-muted rounded-card animate-pulse", isLength.value ? void 0 : __props.rowHeight]),
@@ -1708,10 +1710,10 @@ var SkeletonList_default = /* @__PURE__ */ defineComponent({
1708
1710
  });
1709
1711
  //#endregion
1710
1712
  //#region src/components/StatCard.vue?vue&type=script&setup=true&lang.ts
1711
- var _hoisted_1$11 = { class: "surface rounded-card flex flex-1 flex-col gap-0.5 p-3" };
1712
- var _hoisted_2$10 = { class: "flex items-baseline gap-1" };
1713
- var _hoisted_3$8 = { class: "text-ink text-xl font-semibold tabular-nums" };
1714
- var _hoisted_4$6 = { class: "text-ink-soft text-xs" };
1713
+ var _hoisted_1$20 = { class: "surface rounded-card flex flex-1 flex-col gap-0.5 p-3" };
1714
+ var _hoisted_2$17 = { class: "flex items-baseline gap-1" };
1715
+ var _hoisted_3$11 = { class: "text-ink text-xl font-semibold tabular-nums" };
1716
+ var _hoisted_4$8 = { class: "text-ink-soft text-xs" };
1715
1717
  //#endregion
1716
1718
  //#region src/components/StatCard.vue
1717
1719
  var StatCard_default = /* @__PURE__ */ defineComponent({
@@ -1728,22 +1730,22 @@ var StatCard_default = /* @__PURE__ */ defineComponent({
1728
1730
  flat: ArrowRight
1729
1731
  };
1730
1732
  return (_ctx, _cache) => {
1731
- return openBlock(), createElementBlock("div", _hoisted_1$11, [createElementVNode("div", _hoisted_2$10, [createElementVNode("span", _hoisted_3$8, toDisplayString(__props.value), 1), __props.trend ? (openBlock(), createBlock(resolveDynamicComponent(TREND_ICON[__props.trend]), {
1733
+ return openBlock(), createElementBlock("div", _hoisted_1$20, [createElementVNode("div", _hoisted_2$17, [createElementVNode("span", _hoisted_3$11, toDisplayString(__props.value), 1), __props.trend ? (openBlock(), createBlock(resolveDynamicComponent(TREND_ICON[__props.trend]), {
1732
1734
  key: 0,
1733
1735
  class: "text-ink-soft size-3"
1734
- })) : createCommentVNode("", true)]), createElementVNode("span", _hoisted_4$6, toDisplayString(__props.label), 1)]);
1736
+ })) : createCommentVNode("", true)]), createElementVNode("span", _hoisted_4$8, toDisplayString(__props.label), 1)]);
1735
1737
  };
1736
1738
  }
1737
1739
  });
1738
1740
  //#endregion
1739
1741
  //#region src/components/ToastHost.vue?vue&type=script&setup=true&lang.ts
1740
- var _hoisted_1$10 = [
1742
+ var _hoisted_1$19 = [
1741
1743
  "onMouseenter",
1742
1744
  "onMouseleave",
1743
1745
  "onFocusin",
1744
1746
  "onFocusout"
1745
1747
  ];
1746
- var _hoisted_2$9 = { class: "flex-1 text-sm leading-snug" };
1748
+ var _hoisted_2$16 = { class: "flex-1 text-sm leading-snug" };
1747
1749
  //#endregion
1748
1750
  //#region src/components/ToastHost.vue
1749
1751
  var ToastHost_default = /*#__PURE__*/ _plugin_vue_export_helper_default(/* @__PURE__ */ defineComponent({
@@ -1804,7 +1806,7 @@ var ToastHost_default = /*#__PURE__*/ _plugin_vue_export_helper_default(/* @__PU
1804
1806
  class: normalizeClass(["mt-0.5 size-5 shrink-0", TONE_CLASS[toast.tone]]),
1805
1807
  "aria-hidden": "true"
1806
1808
  }, null, 8, ["class"])),
1807
- createElementVNode("p", _hoisted_2$9, toDisplayString(toast.message), 1),
1809
+ createElementVNode("p", _hoisted_2$16, toDisplayString(toast.message), 1),
1808
1810
  toast.action ? (openBlock(), createBlock(BaseButton_default, {
1809
1811
  key: 0,
1810
1812
  variant: "link",
@@ -1827,7 +1829,7 @@ var ToastHost_default = /*#__PURE__*/ _plugin_vue_export_helper_default(/* @__PU
1827
1829
  default: withCtx(() => [createVNode(unref(X), { class: "size-4" })]),
1828
1830
  _: 1
1829
1831
  }, 8, ["aria-label", "onClick"])
1830
- ], 40, _hoisted_1$10);
1832
+ ], 40, _hoisted_1$19);
1831
1833
  }), 128))]),
1832
1834
  _: 1
1833
1835
  })], 2)])) : createCommentVNode("", true);
@@ -1836,8 +1838,8 @@ var ToastHost_default = /*#__PURE__*/ _plugin_vue_export_helper_default(/* @__PU
1836
1838
  }), [["__scopeId", "data-v-737eb240"]]);
1837
1839
  //#endregion
1838
1840
  //#region src/components/LocaleLinks.vue?vue&type=script&setup=true&lang.ts
1839
- var _hoisted_1$9 = ["aria-label"];
1840
- var _hoisted_2$8 = [
1841
+ var _hoisted_1$18 = ["aria-label"];
1842
+ var _hoisted_2$15 = [
1841
1843
  "lang",
1842
1844
  "aria-pressed",
1843
1845
  "onClick"
@@ -1881,17 +1883,17 @@ var LocaleLinks_default = /* @__PURE__ */ defineComponent({
1881
1883
  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"]),
1882
1884
  "aria-pressed": preference.value === locale,
1883
1885
  onClick: ($event) => preference.value = locale
1884
- }, toDisplayString(__props.labels[locale]), 11, _hoisted_2$8);
1885
- }), 128))], 8, _hoisted_1$9);
1886
+ }, toDisplayString(__props.labels[locale]), 11, _hoisted_2$15);
1887
+ }), 128))], 8, _hoisted_1$18);
1886
1888
  };
1887
1889
  }
1888
1890
  });
1889
1891
  //#endregion
1890
1892
  //#region src/components/TabBar.vue?vue&type=script&setup=true&lang.ts
1891
- var _hoisted_1$8 = { class: "tab-bar" };
1892
- var _hoisted_2$7 = ["aria-label"];
1893
- var _hoisted_3$7 = { class: "tab-icon-slot" };
1894
- var _hoisted_4$5 = { class: "tab-label" };
1893
+ var _hoisted_1$17 = { class: "tab-bar" };
1894
+ var _hoisted_2$14 = ["aria-label"];
1895
+ var _hoisted_3$10 = { class: "tab-icon-slot" };
1896
+ var _hoisted_4$7 = { class: "tab-label" };
1895
1897
  //#endregion
1896
1898
  //#region src/components/TabBar.vue
1897
1899
  var TabBar_default = /*#__PURE__*/ _plugin_vue_export_helper_default(/* @__PURE__ */ defineComponent({
@@ -1903,7 +1905,7 @@ var TabBar_default = /*#__PURE__*/ _plugin_vue_export_helper_default(/* @__PURE_
1903
1905
  },
1904
1906
  setup(__props) {
1905
1907
  return (_ctx, _cache) => {
1906
- return openBlock(), createElementBlock("header", _hoisted_1$8, [createElementVNode("nav", {
1908
+ return openBlock(), createElementBlock("header", _hoisted_1$17, [createElementVNode("nav", {
1907
1909
  class: "tab-bar-inner",
1908
1910
  "aria-label": __props.label || void 0
1909
1911
  }, [(openBlock(true), createElementBlock(Fragment, null, renderList(__props.items, (item) => {
@@ -1914,31 +1916,76 @@ var TabBar_default = /*#__PURE__*/ _plugin_vue_export_helper_default(/* @__PURE_
1914
1916
  "aria-current": item.key === __props.active ? "page" : void 0,
1915
1917
  onClick: _cache[0] || (_cache[0] = ($event) => unref(tapFeedback)())
1916
1918
  }, {
1917
- default: withCtx(() => [createElementVNode("span", _hoisted_3$7, [(openBlock(), createBlock(resolveDynamicComponent(item.icon), { class: "tab-icon" }))]), createElementVNode("span", _hoisted_4$5, toDisplayString(item.label), 1)]),
1919
+ default: withCtx(() => [createElementVNode("span", _hoisted_3$10, [(openBlock(), createBlock(resolveDynamicComponent(item.icon), { class: "tab-icon" }))]), createElementVNode("span", _hoisted_4$7, toDisplayString(item.label), 1)]),
1918
1920
  _: 2
1919
1921
  }, 1032, [
1920
1922
  "to",
1921
1923
  "class",
1922
1924
  "aria-current"
1923
1925
  ]);
1924
- }), 128))], 8, _hoisted_2$7)]);
1926
+ }), 128))], 8, _hoisted_2$14)]);
1925
1927
  };
1926
1928
  }
1927
1929
  }), [["__scopeId", "data-v-a76891c4"]]);
1928
1930
  //#endregion
1931
+ //#region src/components/AvatarStack.vue?vue&type=script&setup=true&lang.ts
1932
+ var _hoisted_1$16 = ["aria-label"];
1933
+ var _hoisted_2$13 = {
1934
+ key: 0,
1935
+ class: "rk-stack-item rk-stack-rest",
1936
+ "aria-hidden": "true"
1937
+ };
1938
+ //#endregion
1939
+ //#region src/components/AvatarStack.vue
1940
+ var AvatarStack_default = /*#__PURE__*/ _plugin_vue_export_helper_default(/* @__PURE__ */ defineComponent({
1941
+ __name: "AvatarStack",
1942
+ props: {
1943
+ people: {},
1944
+ label: {},
1945
+ max: { default: 4 },
1946
+ size: { default: "md" }
1947
+ },
1948
+ setup(__props) {
1949
+ const shown = computed(() => __props.people.slice(0, __props.max));
1950
+ const rest = computed(() => Math.max(0, __props.people.length - shown.value.length));
1951
+ return (_ctx, _cache) => {
1952
+ return openBlock(), createElementBlock("div", {
1953
+ class: normalizeClass(["rk-stack", `is-${__props.size}`]),
1954
+ role: "img",
1955
+ "aria-label": __props.label
1956
+ }, [(openBlock(true), createElementBlock(Fragment, null, renderList(shown.value, (person) => {
1957
+ return openBlock(), createElementBlock("span", {
1958
+ key: person.name,
1959
+ class: "rk-stack-item",
1960
+ "aria-hidden": "true"
1961
+ }, [createVNode(BaseAvatar_default, {
1962
+ name: person.name,
1963
+ src: person.src,
1964
+ size: __props.size,
1965
+ fallback: "initials"
1966
+ }, null, 8, [
1967
+ "name",
1968
+ "src",
1969
+ "size"
1970
+ ])]);
1971
+ }), 128)), rest.value ? (openBlock(), createElementBlock("span", _hoisted_2$13, "+" + toDisplayString(rest.value), 1)) : createCommentVNode("", true)], 10, _hoisted_1$16);
1972
+ };
1973
+ }
1974
+ }), [["__scopeId", "data-v-db629481"]]);
1975
+ //#endregion
1929
1976
  //#region src/components/BaseCalendar.vue?vue&type=script&setup=true&lang.ts
1930
- var _hoisted_1$7 = { class: "rk-cal" };
1931
- var _hoisted_2$6 = { class: "rk-cal-head" };
1932
- var _hoisted_3$6 = ["aria-label"];
1933
- var _hoisted_4$4 = ["aria-expanded"];
1934
- var _hoisted_5$2 = ["aria-label"];
1935
- var _hoisted_6$2 = {
1977
+ var _hoisted_1$15 = { class: "rk-cal" };
1978
+ var _hoisted_2$12 = { class: "rk-cal-head" };
1979
+ var _hoisted_3$9 = ["aria-label"];
1980
+ var _hoisted_4$6 = ["aria-expanded"];
1981
+ var _hoisted_5$4 = ["aria-label"];
1982
+ var _hoisted_6$4 = {
1936
1983
  key: 0,
1937
1984
  class: "rk-cal-weekdays",
1938
1985
  "aria-hidden": "true"
1939
1986
  };
1940
- var _hoisted_7$1 = ["aria-label"];
1941
- var _hoisted_8 = [
1987
+ var _hoisted_7$2 = ["aria-label"];
1988
+ var _hoisted_8$1 = [
1942
1989
  "tabindex",
1943
1990
  "disabled",
1944
1991
  "aria-label",
@@ -1947,12 +1994,12 @@ var _hoisted_8 = [
1947
1994
  "onClick",
1948
1995
  "onPointerenter"
1949
1996
  ];
1950
- var _hoisted_9 = {
1997
+ var _hoisted_9$1 = {
1951
1998
  key: 2,
1952
1999
  class: "rk-cal-blocks"
1953
2000
  };
1954
- var _hoisted_10 = ["aria-label", "onClick"];
1955
- var _hoisted_11 = {
2001
+ var _hoisted_10$1 = ["aria-label", "onClick"];
2002
+ var _hoisted_11$1 = {
1956
2003
  key: 3,
1957
2004
  class: "rk-cal-blocks"
1958
2005
  };
@@ -2124,8 +2171,8 @@ var BaseCalendar_default = /*#__PURE__*/ _plugin_vue_export_helper_default(/* @_
2124
2171
  if (next) focused.value = next;
2125
2172
  });
2126
2173
  return (_ctx, _cache) => {
2127
- return openBlock(), createElementBlock("div", _hoisted_1$7, [
2128
- createElementVNode("div", _hoisted_2$6, [
2174
+ return openBlock(), createElementBlock("div", _hoisted_1$15, [
2175
+ createElementVNode("div", _hoisted_2$12, [
2129
2176
  createElementVNode("button", {
2130
2177
  type: "button",
2131
2178
  class: "rk-cal-arrow focus-ring",
@@ -2134,13 +2181,13 @@ var BaseCalendar_default = /*#__PURE__*/ _plugin_vue_export_helper_default(/* @_
2134
2181
  }, [createVNode(unref(ChevronLeft), {
2135
2182
  class: "size-4",
2136
2183
  "aria-hidden": "true"
2137
- })], 8, _hoisted_3$6),
2184
+ })], 8, _hoisted_3$9),
2138
2185
  createElementVNode("button", {
2139
2186
  type: "button",
2140
2187
  class: "rk-cal-title focus-ring",
2141
2188
  "aria-expanded": view.value !== "days",
2142
2189
  onClick: cycleView
2143
- }, toDisplayString(view.value === "years" ? `${years.value[0]} – ${years.value[11]}` : monthTitle.value), 9, _hoisted_4$4),
2190
+ }, toDisplayString(view.value === "years" ? `${years.value[0]} – ${years.value[11]}` : monthTitle.value), 9, _hoisted_4$6),
2144
2191
  createElementVNode("button", {
2145
2192
  type: "button",
2146
2193
  class: "rk-cal-arrow focus-ring",
@@ -2149,9 +2196,9 @@ var BaseCalendar_default = /*#__PURE__*/ _plugin_vue_export_helper_default(/* @_
2149
2196
  }, [createVNode(unref(ChevronRight), {
2150
2197
  class: "size-4",
2151
2198
  "aria-hidden": "true"
2152
- })], 8, _hoisted_5$2)
2199
+ })], 8, _hoisted_5$4)
2153
2200
  ]),
2154
- view.value === "days" ? (openBlock(), createElementBlock("div", _hoisted_6$2, [(openBlock(true), createElementBlock(Fragment, null, renderList(weekdays.value, (day) => {
2201
+ view.value === "days" ? (openBlock(), createElementBlock("div", _hoisted_6$4, [(openBlock(true), createElementBlock(Fragment, null, renderList(weekdays.value, (day) => {
2155
2202
  return openBlock(), createElementBlock("span", { key: day.long }, toDisplayString(day.short), 1);
2156
2203
  }), 128))])) : createCommentVNode("", true),
2157
2204
  view.value === "days" ? (openBlock(), createElementBlock("div", {
@@ -2183,17 +2230,17 @@ var BaseCalendar_default = /*#__PURE__*/ _plugin_vue_export_helper_default(/* @_
2183
2230
  "aria-current": key === __props.today ? "date" : void 0,
2184
2231
  onClick: ($event) => choose(key),
2185
2232
  onPointerenter: ($event) => hovered.value = key
2186
- }, toDisplayString(unref(fromDateKey)(key).getDate()), 43, _hoisted_8)]);
2233
+ }, toDisplayString(unref(fromDateKey)(key).getDate()), 43, _hoisted_8$1)]);
2187
2234
  }), 128))]);
2188
- }), 128))], 40, _hoisted_7$1)) : view.value === "months" ? (openBlock(), createElementBlock("div", _hoisted_9, [(openBlock(true), createElementBlock(Fragment, null, renderList(months.value, (entry) => {
2235
+ }), 128))], 40, _hoisted_7$2)) : view.value === "months" ? (openBlock(), createElementBlock("div", _hoisted_9$1, [(openBlock(true), createElementBlock(Fragment, null, renderList(months.value, (entry) => {
2189
2236
  return openBlock(), createElementBlock("button", {
2190
2237
  key: entry.index,
2191
2238
  type: "button",
2192
2239
  class: "rk-cal-block focus-ring",
2193
2240
  "aria-label": entry.long,
2194
2241
  onClick: ($event) => chooseMonth(entry.index)
2195
- }, toDisplayString(entry.label), 9, _hoisted_10);
2196
- }), 128))])) : (openBlock(), createElementBlock("div", _hoisted_11, [(openBlock(true), createElementBlock(Fragment, null, renderList(years.value, (value) => {
2242
+ }, toDisplayString(entry.label), 9, _hoisted_10$1);
2243
+ }), 128))])) : (openBlock(), createElementBlock("div", _hoisted_11$1, [(openBlock(true), createElementBlock(Fragment, null, renderList(years.value, (value) => {
2197
2244
  return openBlock(), createElementBlock("button", {
2198
2245
  key: value,
2199
2246
  type: "button",
@@ -2206,6 +2253,718 @@ var BaseCalendar_default = /*#__PURE__*/ _plugin_vue_export_helper_default(/* @_
2206
2253
  }
2207
2254
  }), [["__scopeId", "data-v-6d0b0811"]]);
2208
2255
  //#endregion
2256
+ //#region src/components/BaseChip.vue?vue&type=script&setup=true&lang.ts
2257
+ var _hoisted_1$14 = { class: "truncate" };
2258
+ var _hoisted_2$11 = ["aria-label", "disabled"];
2259
+ //#endregion
2260
+ //#region src/components/BaseChip.vue
2261
+ var BaseChip_default = /*#__PURE__*/ _plugin_vue_export_helper_default(/* @__PURE__ */ defineComponent({
2262
+ __name: "BaseChip",
2263
+ props: {
2264
+ label: {},
2265
+ icon: { default: () => void 0 },
2266
+ tone: { default: "neutral" },
2267
+ removeLabel: { default: () => void 0 },
2268
+ selected: {
2269
+ type: Boolean,
2270
+ default: () => void 0
2271
+ },
2272
+ disabled: {
2273
+ type: Boolean,
2274
+ default: false
2275
+ }
2276
+ },
2277
+ emits: ["remove", "select"],
2278
+ setup(__props, { emit: __emit }) {
2279
+ const emit = __emit;
2280
+ return (_ctx, _cache) => {
2281
+ return openBlock(), createBlock(resolveDynamicComponent(__props.selected === void 0 ? "span" : "button"), {
2282
+ type: __props.selected === void 0 ? void 0 : "button",
2283
+ class: normalizeClass(["rk-chip", [`tone-${__props.tone}`, {
2284
+ "is-selected": __props.selected,
2285
+ "is-button": __props.selected !== void 0
2286
+ }]]),
2287
+ "aria-pressed": __props.selected,
2288
+ disabled: __props.selected === void 0 ? void 0 : __props.disabled,
2289
+ onClick: _cache[1] || (_cache[1] = ($event) => __props.selected === void 0 ? void 0 : emit("select"))
2290
+ }, {
2291
+ default: withCtx(() => [
2292
+ __props.icon ? (openBlock(), createBlock(resolveDynamicComponent(__props.icon), {
2293
+ key: 0,
2294
+ class: "size-3.5 shrink-0",
2295
+ "aria-hidden": "true"
2296
+ })) : createCommentVNode("", true),
2297
+ createElementVNode("span", _hoisted_1$14, toDisplayString(__props.label), 1),
2298
+ __props.removeLabel ? (openBlock(), createElementBlock("button", {
2299
+ key: 1,
2300
+ type: "button",
2301
+ class: "rk-chip-remove focus-ring",
2302
+ "aria-label": __props.removeLabel,
2303
+ disabled: __props.disabled,
2304
+ onClick: _cache[0] || (_cache[0] = withModifiers(($event) => emit("remove"), ["stop"]))
2305
+ }, [createVNode(unref(X), {
2306
+ class: "size-3",
2307
+ "aria-hidden": "true"
2308
+ })], 8, _hoisted_2$11)) : createCommentVNode("", true)
2309
+ ]),
2310
+ _: 1
2311
+ }, 8, [
2312
+ "type",
2313
+ "class",
2314
+ "aria-pressed",
2315
+ "disabled"
2316
+ ]);
2317
+ };
2318
+ }
2319
+ }), [["__scopeId", "data-v-e9026659"]]);
2320
+ //#endregion
2321
+ //#region src/components/BaseKbd.vue?vue&type=script&setup=true&lang.ts
2322
+ var _hoisted_1$13 = {
2323
+ key: 0,
2324
+ class: "rk-kbd-joiner",
2325
+ "aria-hidden": "true"
2326
+ };
2327
+ var _hoisted_2$10 = { class: "rk-kbd-key control" };
2328
+ //#endregion
2329
+ //#region src/components/BaseKbd.vue
2330
+ var BaseKbd_default = /*#__PURE__*/ _plugin_vue_export_helper_default(/* @__PURE__ */ defineComponent({
2331
+ __name: "BaseKbd",
2332
+ props: {
2333
+ keys: {},
2334
+ joiner: { default: "" },
2335
+ size: { default: "md" }
2336
+ },
2337
+ setup(__props) {
2338
+ const list = computed(() => typeof __props.keys === "string" ? [__props.keys] : __props.keys);
2339
+ return (_ctx, _cache) => {
2340
+ return openBlock(), createElementBlock("span", { class: normalizeClass(["rk-kbd", `is-${__props.size}`]) }, [(openBlock(true), createElementBlock(Fragment, null, renderList(list.value, (key, index) => {
2341
+ return openBlock(), createElementBlock(Fragment, { key }, [index > 0 && __props.joiner ? (openBlock(), createElementBlock("span", _hoisted_1$13, toDisplayString(__props.joiner), 1)) : createCommentVNode("", true), createElementVNode("kbd", _hoisted_2$10, toDisplayString(key), 1)], 64);
2342
+ }), 128))], 2);
2343
+ };
2344
+ }
2345
+ }), [["__scopeId", "data-v-e4b97bbe"]]);
2346
+ //#endregion
2347
+ //#region src/components/BaseListbox.vue?vue&type=script&setup=true&lang.ts
2348
+ var _hoisted_1$12 = [
2349
+ "aria-label",
2350
+ "aria-multiselectable",
2351
+ "aria-activedescendant"
2352
+ ];
2353
+ var _hoisted_2$9 = [
2354
+ "id",
2355
+ "aria-selected",
2356
+ "aria-disabled",
2357
+ "onClick"
2358
+ ];
2359
+ var _hoisted_3$8 = { class: "min-w-0 flex-1" };
2360
+ var _hoisted_4$5 = { class: "rk-listbox-label" };
2361
+ var _hoisted_5$3 = {
2362
+ key: 0,
2363
+ class: "rk-listbox-description"
2364
+ };
2365
+ var _hoisted_6$3 = {
2366
+ key: 0,
2367
+ class: "rk-listbox-empty"
2368
+ };
2369
+ //#endregion
2370
+ //#region src/components/BaseListbox.vue
2371
+ var BaseListbox_default = /*#__PURE__*/ _plugin_vue_export_helper_default(/* @__PURE__ */ defineComponent({
2372
+ __name: "BaseListbox",
2373
+ props: {
2374
+ modelValue: { default: () => void 0 },
2375
+ options: {},
2376
+ label: {},
2377
+ mode: { default: "single" },
2378
+ height: { default: "14rem" }
2379
+ },
2380
+ emits: ["update:modelValue"],
2381
+ setup(__props, { emit: __emit }) {
2382
+ const emit = __emit;
2383
+ const model = useBoundValue(() => __props.modelValue, (value) => emit("update:modelValue", value));
2384
+ const id = useId();
2385
+ const active = ref(0);
2386
+ let typed = "";
2387
+ let typedAt = 0;
2388
+ const chosen = computed(() => {
2389
+ const value = model.value;
2390
+ if (Array.isArray(value)) return new Set(value);
2391
+ return new Set(value === void 0 ? [] : [value]);
2392
+ });
2393
+ function select(option) {
2394
+ if (option.disabled) return;
2395
+ if (__props.mode === "multiple") {
2396
+ const next = new Set(chosen.value);
2397
+ if (next.has(option.value)) next.delete(option.value);
2398
+ else next.add(option.value);
2399
+ model.value = __props.options.map((one) => one.value).filter((value) => next.has(value));
2400
+ return;
2401
+ }
2402
+ model.value = option.value;
2403
+ }
2404
+ function moveTo(index) {
2405
+ if (__props.options.length === 0) return;
2406
+ active.value = Math.max(0, Math.min(__props.options.length - 1, index));
2407
+ const option = __props.options[active.value];
2408
+ if (__props.mode === "single" && option && !option.disabled) select(option);
2409
+ document.getElementById(`${id}-${active.value}`)?.scrollIntoView?.({ block: "nearest" });
2410
+ }
2411
+ /** The next option after the current one that starts with what was typed. */
2412
+ function jumpTo(letter) {
2413
+ const now = Date.now();
2414
+ typed = now - typedAt > 700 ? letter : typed + letter;
2415
+ typedAt = now;
2416
+ const from = typed.length === 1 ? active.value + 1 : active.value;
2417
+ const found = [...__props.options.slice(from), ...__props.options.slice(0, from)].find((option) => !option.disabled && option.label.toLowerCase().startsWith(typed.toLowerCase()));
2418
+ if (found) moveTo(__props.options.indexOf(found));
2419
+ }
2420
+ function onKeydown(event) {
2421
+ const moves = {
2422
+ ArrowDown: active.value + 1,
2423
+ ArrowUp: active.value - 1,
2424
+ Home: 0,
2425
+ End: __props.options.length - 1
2426
+ };
2427
+ if (event.key in moves) {
2428
+ event.preventDefault();
2429
+ moveTo(moves[event.key]);
2430
+ return;
2431
+ }
2432
+ if (event.key === " " || event.key === "Enter") {
2433
+ const option = __props.options[active.value];
2434
+ if (!option) return;
2435
+ event.preventDefault();
2436
+ select(option);
2437
+ return;
2438
+ }
2439
+ if (event.key.length === 1 && !event.metaKey && !event.ctrlKey && !event.altKey) jumpTo(event.key);
2440
+ }
2441
+ return (_ctx, _cache) => {
2442
+ return openBlock(), createElementBlock("div", {
2443
+ class: "rk-listbox control",
2444
+ style: normalizeStyle({ maxHeight: __props.height }),
2445
+ role: "listbox",
2446
+ tabindex: "0",
2447
+ "aria-label": __props.label,
2448
+ "aria-multiselectable": __props.mode === "multiple" ? true : void 0,
2449
+ "aria-activedescendant": __props.options.length ? `${unref(id)}-${active.value}` : void 0,
2450
+ onKeydown
2451
+ }, [(openBlock(true), createElementBlock(Fragment, null, renderList(__props.options, (option, index) => {
2452
+ return openBlock(), createElementBlock("div", {
2453
+ id: `${unref(id)}-${index}`,
2454
+ key: option.value,
2455
+ class: normalizeClass(["rk-listbox-option", {
2456
+ "is-active": index === active.value,
2457
+ "is-chosen": chosen.value.has(option.value),
2458
+ "is-disabled": option.disabled
2459
+ }]),
2460
+ role: "option",
2461
+ "aria-selected": chosen.value.has(option.value),
2462
+ "aria-disabled": option.disabled,
2463
+ onClick: ($event) => (active.value = index, select(option))
2464
+ }, [createElementVNode("span", _hoisted_3$8, [createElementVNode("span", _hoisted_4$5, toDisplayString(option.label), 1), option.description ? (openBlock(), createElementBlock("span", _hoisted_5$3, toDisplayString(option.description), 1)) : createCommentVNode("", true)]), chosen.value.has(option.value) ? (openBlock(), createBlock(unref(Check), {
2465
+ key: 0,
2466
+ class: "size-4 shrink-0",
2467
+ "aria-hidden": "true"
2468
+ })) : createCommentVNode("", true)], 10, _hoisted_2$9);
2469
+ }), 128)), __props.options.length === 0 ? (openBlock(), createElementBlock("p", _hoisted_6$3)) : createCommentVNode("", true)], 44, _hoisted_1$12);
2470
+ };
2471
+ }
2472
+ }), [["__scopeId", "data-v-95e230a5"]]);
2473
+ //#endregion
2474
+ //#region src/components/BaseLink.vue
2475
+ var BaseLink_default = /*#__PURE__*/ _plugin_vue_export_helper_default(/* @__PURE__ */ defineComponent({
2476
+ __name: "BaseLink",
2477
+ props: {
2478
+ to: { default: () => void 0 },
2479
+ href: { default: () => void 0 },
2480
+ external: {
2481
+ type: Boolean,
2482
+ default: () => void 0
2483
+ },
2484
+ tone: { default: "primary" },
2485
+ underline: { default: "hover" }
2486
+ },
2487
+ setup(__props) {
2488
+ const is = computed(() => __props.to !== void 0 ? RouterLink : "a");
2489
+ return (_ctx, _cache) => {
2490
+ return openBlock(), createBlock(resolveDynamicComponent(is.value), mergeProps({ class: ["rk-link focus-ring", [`tone-${__props.tone}`, `underline-${__props.underline}`]] }, __props.to !== void 0 ? { to: __props.to } : {
2491
+ href: __props.href,
2492
+ target: __props.external ? "_blank" : void 0,
2493
+ rel: __props.external ? "noopener noreferrer" : void 0
2494
+ }), {
2495
+ default: withCtx(() => [renderSlot(_ctx.$slots, "default", {}, void 0, true), __props.external ? (openBlock(), createBlock(unref(ArrowUpRight), {
2496
+ key: 0,
2497
+ class: "rk-link-mark",
2498
+ "aria-hidden": "true"
2499
+ })) : createCommentVNode("", true)]),
2500
+ _: 3
2501
+ }, 16, ["class"]);
2502
+ };
2503
+ }
2504
+ }), [["__scopeId", "data-v-88581007"]]);
2505
+ //#endregion
2506
+ //#region src/components/BaseRating.vue?vue&type=script&setup=true&lang.ts
2507
+ var _hoisted_1$11 = [
2508
+ "role",
2509
+ "aria-label",
2510
+ "tabindex",
2511
+ "aria-valuenow",
2512
+ "aria-valuemin",
2513
+ "aria-valuemax",
2514
+ "aria-valuetext"
2515
+ ];
2516
+ //#endregion
2517
+ //#region src/components/BaseRating.vue
2518
+ var BaseRating_default = /*#__PURE__*/ _plugin_vue_export_helper_default(/* @__PURE__ */ defineComponent({
2519
+ __name: "BaseRating",
2520
+ props: /*@__PURE__*/ mergeModels({
2521
+ max: { default: 5 },
2522
+ label: {},
2523
+ valueLabel: { type: Function },
2524
+ readonly: {
2525
+ type: Boolean,
2526
+ default: false
2527
+ },
2528
+ size: { default: "md" },
2529
+ allowClear: {
2530
+ type: Boolean,
2531
+ default: true
2532
+ }
2533
+ }, {
2534
+ "modelValue": { default: 0 },
2535
+ "modelModifiers": {}
2536
+ }),
2537
+ emits: ["update:modelValue"],
2538
+ setup(__props) {
2539
+ /** The score, with `v-model`. `0` is none given. */
2540
+ const model = useModel(__props, "modelValue");
2541
+ const hovered = ref(0);
2542
+ const shown = computed(() => hovered.value || model.value);
2543
+ const stars = computed(() => Array.from({ length: __props.max }, (_, i) => i + 1));
2544
+ function pick(value) {
2545
+ if (__props.readonly) return;
2546
+ model.value = __props.allowClear && model.value === value ? 0 : value;
2547
+ }
2548
+ function onKeydown(event) {
2549
+ const next = {
2550
+ ArrowRight: model.value + 1,
2551
+ ArrowUp: model.value + 1,
2552
+ ArrowLeft: model.value - 1,
2553
+ ArrowDown: model.value - 1,
2554
+ Home: 0,
2555
+ End: __props.max
2556
+ }[event.key];
2557
+ if (next === void 0) return;
2558
+ event.preventDefault();
2559
+ model.value = Math.min(__props.max, Math.max(0, next));
2560
+ }
2561
+ return (_ctx, _cache) => {
2562
+ return openBlock(), createElementBlock("div", {
2563
+ class: normalizeClass(["rk-rating", [`is-${__props.size}`, { "is-readonly": __props.readonly }]]),
2564
+ role: __props.readonly ? "img" : "slider",
2565
+ "aria-label": `${__props.label}: ${__props.valueLabel(model.value, __props.max)}`,
2566
+ tabindex: __props.readonly ? void 0 : 0,
2567
+ "aria-valuenow": __props.readonly ? void 0 : model.value,
2568
+ "aria-valuemin": __props.readonly ? void 0 : 0,
2569
+ "aria-valuemax": __props.readonly ? void 0 : __props.max,
2570
+ "aria-valuetext": __props.readonly ? void 0 : __props.valueLabel(model.value, __props.max),
2571
+ onKeydown: _cache[0] || (_cache[0] = ($event) => __props.readonly ? void 0 : onKeydown($event)),
2572
+ onPointerleave: _cache[1] || (_cache[1] = ($event) => hovered.value = 0)
2573
+ }, [(openBlock(true), createElementBlock(Fragment, null, renderList(stars.value, (star) => {
2574
+ return openBlock(), createBlock(resolveDynamicComponent(__props.readonly ? "span" : "button"), {
2575
+ key: star,
2576
+ type: __props.readonly ? void 0 : "button",
2577
+ class: normalizeClass(["rk-rating-star", { "is-on": star <= shown.value }]),
2578
+ tabindex: __props.readonly ? void 0 : -1,
2579
+ "aria-hidden": true,
2580
+ onClick: ($event) => pick(star),
2581
+ onPointerenter: ($event) => __props.readonly ? void 0 : hovered.value = star
2582
+ }, {
2583
+ default: withCtx(() => [createVNode(unref(Star), { class: "rk-rating-icon" })]),
2584
+ _: 1
2585
+ }, 40, [
2586
+ "type",
2587
+ "class",
2588
+ "tabindex",
2589
+ "onClick",
2590
+ "onPointerenter"
2591
+ ]);
2592
+ }), 128))], 42, _hoisted_1$11);
2593
+ };
2594
+ }
2595
+ }), [["__scopeId", "data-v-38007368"]]);
2596
+ //#endregion
2597
+ //#region src/components/BaseSeparator.vue?vue&type=script&setup=true&lang.ts
2598
+ var _hoisted_1$10 = { class: "rk-sep-label" };
2599
+ var _hoisted_2$8 = ["aria-orientation"];
2600
+ //#endregion
2601
+ //#region src/components/BaseSeparator.vue
2602
+ var BaseSeparator_default = /*#__PURE__*/ _plugin_vue_export_helper_default(/* @__PURE__ */ defineComponent({
2603
+ __name: "BaseSeparator",
2604
+ props: {
2605
+ orientation: { default: "horizontal" },
2606
+ label: { default: "" },
2607
+ spacing: { default: "md" }
2608
+ },
2609
+ setup(__props) {
2610
+ /**
2611
+ * A line between things — with, when it helps, a word on it.
2612
+ *
2613
+ * `role="separator"` when it only divides, and nothing at all to assistive
2614
+ * tech when it carries a label, because then the text is the point and the
2615
+ * line is decoration around it.
2616
+ *
2617
+ * Vertical needs a height from its parent: inside a flex row, that is
2618
+ * `align-items: stretch`, which is the default.
2619
+ */
2620
+ return (_ctx, _cache) => {
2621
+ return __props.label ? (openBlock(), createElementBlock("div", {
2622
+ key: 0,
2623
+ class: normalizeClass(["rk-sep-labelled", [`is-${__props.orientation}`, `space-${__props.spacing}`]]),
2624
+ "aria-hidden": "true"
2625
+ }, [
2626
+ _cache[0] || (_cache[0] = createElementVNode("span", { class: "rk-sep-line" }, null, -1)),
2627
+ createElementVNode("span", _hoisted_1$10, toDisplayString(__props.label), 1),
2628
+ _cache[1] || (_cache[1] = createElementVNode("span", { class: "rk-sep-line" }, null, -1))
2629
+ ], 2)) : (openBlock(), createElementBlock("div", {
2630
+ key: 1,
2631
+ class: normalizeClass(["rk-sep", [`is-${__props.orientation}`, `space-${__props.spacing}`]]),
2632
+ role: "separator",
2633
+ "aria-orientation": __props.orientation
2634
+ }, null, 10, _hoisted_2$8));
2635
+ };
2636
+ }
2637
+ }), [["__scopeId", "data-v-9f8cc9aa"]]);
2638
+ //#endregion
2639
+ //#region src/components/CopyButton.vue?vue&type=script&setup=true&lang.ts
2640
+ var _hoisted_1$9 = ["aria-label"];
2641
+ var _hoisted_2$7 = { key: 2 };
2642
+ var _hoisted_3$7 = {
2643
+ class: "sr-only",
2644
+ role: "status",
2645
+ "aria-live": "polite"
2646
+ };
2647
+ //#endregion
2648
+ //#region src/components/CopyButton.vue
2649
+ var CopyButton_default = /*#__PURE__*/ _plugin_vue_export_helper_default(/* @__PURE__ */ defineComponent({
2650
+ __name: "CopyButton",
2651
+ props: {
2652
+ text: {},
2653
+ copyLabel: {},
2654
+ copiedLabel: {},
2655
+ errorLabel: { default: () => void 0 },
2656
+ withText: {
2657
+ type: Boolean,
2658
+ default: false
2659
+ }
2660
+ },
2661
+ emits: ["copied", "failed"],
2662
+ setup(__props, { emit: __emit }) {
2663
+ const emit = __emit;
2664
+ const state = ref("idle");
2665
+ let timer = null;
2666
+ async function copy() {
2667
+ if (timer) clearTimeout(timer);
2668
+ try {
2669
+ await navigator.clipboard.writeText(__props.text);
2670
+ state.value = "copied";
2671
+ emit("copied");
2672
+ } catch {
2673
+ state.value = "failed";
2674
+ emit("failed");
2675
+ }
2676
+ timer = setTimeout(() => state.value = "idle", 2e3);
2677
+ }
2678
+ onBeforeUnmount(() => {
2679
+ if (timer) clearTimeout(timer);
2680
+ });
2681
+ return (_ctx, _cache) => {
2682
+ return openBlock(), createElementBlock("button", {
2683
+ type: "button",
2684
+ class: normalizeClass(["rk-copy control focus-ring", {
2685
+ "is-copied": state.value === "copied",
2686
+ "with-text": __props.withText
2687
+ }]),
2688
+ "aria-label": __props.withText ? void 0 : state.value === "copied" ? __props.copiedLabel : __props.copyLabel,
2689
+ onClick: copy
2690
+ }, [
2691
+ state.value === "copied" ? (openBlock(), createBlock(unref(Check), {
2692
+ key: 0,
2693
+ class: "size-4 shrink-0",
2694
+ "aria-hidden": "true"
2695
+ })) : (openBlock(), createBlock(unref(Copy), {
2696
+ key: 1,
2697
+ class: "size-4 shrink-0",
2698
+ "aria-hidden": "true"
2699
+ })),
2700
+ __props.withText ? (openBlock(), createElementBlock("span", _hoisted_2$7, toDisplayString(state.value === "copied" ? __props.copiedLabel : __props.copyLabel), 1)) : createCommentVNode("", true),
2701
+ createElementVNode("span", _hoisted_3$7, toDisplayString(state.value === "copied" ? __props.copiedLabel : state.value === "failed" ? __props.errorLabel ?? "" : ""), 1)
2702
+ ], 10, _hoisted_1$9);
2703
+ };
2704
+ }
2705
+ }), [["__scopeId", "data-v-c481e140"]]);
2706
+ //#endregion
2707
+ //#region src/components/FileDrop.vue?vue&type=script&setup=true&lang.ts
2708
+ var _hoisted_1$8 = { class: "rk-drop" };
2709
+ var _hoisted_2$6 = ["for"];
2710
+ var _hoisted_3$6 = [
2711
+ "id",
2712
+ "accept",
2713
+ "multiple",
2714
+ "disabled"
2715
+ ];
2716
+ var _hoisted_4$4 = { class: "rk-drop-label" };
2717
+ var _hoisted_5$2 = {
2718
+ key: 0,
2719
+ class: "rk-drop-hint"
2720
+ };
2721
+ var _hoisted_6$2 = { class: "rk-drop-browse" };
2722
+ var _hoisted_7$1 = {
2723
+ key: 0,
2724
+ class: "rk-drop-error",
2725
+ role: "alert"
2726
+ };
2727
+ var _hoisted_8 = {
2728
+ key: 1,
2729
+ class: "rk-drop-files"
2730
+ };
2731
+ var _hoisted_9 = { class: "truncate" };
2732
+ var _hoisted_10 = { class: "rk-drop-size" };
2733
+ var _hoisted_11 = [
2734
+ "aria-label",
2735
+ "disabled",
2736
+ "onClick"
2737
+ ];
2738
+ //#endregion
2739
+ //#region src/components/FileDrop.vue
2740
+ var FileDrop_default = /*#__PURE__*/ _plugin_vue_export_helper_default(/* @__PURE__ */ defineComponent({
2741
+ __name: "FileDrop",
2742
+ props: /*@__PURE__*/ mergeModels({
2743
+ label: {},
2744
+ hint: { default: "" },
2745
+ browseLabel: {},
2746
+ removeLabel: {},
2747
+ accept: { default: () => void 0 },
2748
+ multiple: {
2749
+ type: Boolean,
2750
+ default: false
2751
+ },
2752
+ maxSize: { default: () => void 0 },
2753
+ tooLargeLabel: { default: () => void 0 },
2754
+ disabled: {
2755
+ type: Boolean,
2756
+ default: false
2757
+ }
2758
+ }, {
2759
+ "modelValue": { default: () => [] },
2760
+ "modelModifiers": {}
2761
+ }),
2762
+ emits: /*@__PURE__*/ mergeModels(["rejected"], ["update:modelValue"]),
2763
+ setup(__props, { emit: __emit }) {
2764
+ const emit = __emit;
2765
+ /** The files held, with `v-model`. */
2766
+ const model = useModel(__props, "modelValue");
2767
+ const id = useId();
2768
+ const over = ref(false);
2769
+ const refused = ref(false);
2770
+ const tooBig = (file) => __props.maxSize !== void 0 && file.size > __props.maxSize;
2771
+ function take(list) {
2772
+ if (!list || __props.disabled) return;
2773
+ const incoming = Array.from(list);
2774
+ const rejected = incoming.filter(tooBig);
2775
+ const accepted = incoming.filter((file) => !tooBig(file));
2776
+ refused.value = rejected.length > 0;
2777
+ if (rejected.length) emit("rejected", rejected);
2778
+ model.value = __props.multiple ? [...model.value, ...accepted] : accepted.slice(0, 1);
2779
+ }
2780
+ function onDrop(event) {
2781
+ over.value = false;
2782
+ take(event.dataTransfer?.files ?? null);
2783
+ }
2784
+ function onInput(event) {
2785
+ const input = event.target;
2786
+ take(input.files);
2787
+ input.value = "";
2788
+ }
2789
+ function remove(index) {
2790
+ model.value = model.value.filter((_, at) => at !== index);
2791
+ }
2792
+ /** KB and MB by hand: `Intl` has no file sizes, and the unit is not a word. */
2793
+ const size = (bytes) => bytes >= 1048576 ? `${(bytes / 1048576).toFixed(1)} MB` : `${Math.max(1, Math.round(bytes / 1024))} KB`;
2794
+ const count = computed(() => model.value.length);
2795
+ return (_ctx, _cache) => {
2796
+ return openBlock(), createElementBlock("div", _hoisted_1$8, [
2797
+ createElementVNode("label", {
2798
+ class: normalizeClass(["rk-drop-box control", {
2799
+ "is-over": over.value,
2800
+ "is-disabled": __props.disabled
2801
+ }]),
2802
+ for: unref(id),
2803
+ onDragover: _cache[0] || (_cache[0] = withModifiers(($event) => over.value = !__props.disabled, ["prevent"])),
2804
+ onDragleave: _cache[1] || (_cache[1] = ($event) => over.value = false),
2805
+ onDrop: withModifiers(onDrop, ["prevent"])
2806
+ }, [
2807
+ createElementVNode("input", {
2808
+ id: unref(id),
2809
+ type: "file",
2810
+ class: "sr-only",
2811
+ accept: __props.accept,
2812
+ multiple: __props.multiple,
2813
+ disabled: __props.disabled,
2814
+ onChange: onInput
2815
+ }, null, 40, _hoisted_3$6),
2816
+ createVNode(unref(Upload), {
2817
+ class: "text-ink-soft size-6",
2818
+ "aria-hidden": "true"
2819
+ }),
2820
+ createElementVNode("span", _hoisted_4$4, toDisplayString(__props.label), 1),
2821
+ __props.hint ? (openBlock(), createElementBlock("span", _hoisted_5$2, toDisplayString(__props.hint), 1)) : createCommentVNode("", true),
2822
+ createElementVNode("span", _hoisted_6$2, toDisplayString(__props.browseLabel), 1)
2823
+ ], 42, _hoisted_2$6),
2824
+ refused.value && __props.tooLargeLabel ? (openBlock(), createElementBlock("p", _hoisted_7$1, toDisplayString(__props.tooLargeLabel), 1)) : createCommentVNode("", true),
2825
+ count.value ? (openBlock(), createElementBlock("ul", _hoisted_8, [(openBlock(true), createElementBlock(Fragment, null, renderList(model.value, (file, index) => {
2826
+ return openBlock(), createElementBlock("li", {
2827
+ key: `${file.name}-${index}`,
2828
+ class: "rk-drop-file control"
2829
+ }, [
2830
+ createVNode(unref(Paperclip), {
2831
+ class: "text-ink-soft size-4 shrink-0",
2832
+ "aria-hidden": "true"
2833
+ }),
2834
+ createElementVNode("span", _hoisted_9, toDisplayString(file.name), 1),
2835
+ createElementVNode("span", _hoisted_10, toDisplayString(size(file.size)), 1),
2836
+ createElementVNode("button", {
2837
+ type: "button",
2838
+ class: "rk-drop-remove focus-ring",
2839
+ "aria-label": `${__props.removeLabel}: ${file.name}`,
2840
+ disabled: __props.disabled,
2841
+ onClick: ($event) => remove(index)
2842
+ }, [createVNode(unref(X), {
2843
+ class: "size-3.5",
2844
+ "aria-hidden": "true"
2845
+ })], 8, _hoisted_11)
2846
+ ]);
2847
+ }), 128))])) : createCommentVNode("", true)
2848
+ ]);
2849
+ };
2850
+ }
2851
+ }), [["__scopeId", "data-v-a42eab69"]]);
2852
+ //#endregion
2853
+ //#region src/components/TagsInput.vue?vue&type=script&setup=true&lang.ts
2854
+ var _hoisted_1$7 = [
2855
+ "id",
2856
+ "placeholder",
2857
+ "aria-describedby",
2858
+ "aria-invalid",
2859
+ "disabled"
2860
+ ];
2861
+ //#endregion
2862
+ //#region src/components/TagsInput.vue
2863
+ var TagsInput_default = /*#__PURE__*/ _plugin_vue_export_helper_default(/* @__PURE__ */ defineComponent({
2864
+ __name: "TagsInput",
2865
+ props: /*@__PURE__*/ mergeModels({
2866
+ label: {},
2867
+ removeLabel: { type: Function },
2868
+ placeholder: { default: "" },
2869
+ hint: { default: "" },
2870
+ error: { default: "" },
2871
+ max: { default: () => void 0 },
2872
+ allowDuplicates: {
2873
+ type: Boolean,
2874
+ default: false
2875
+ },
2876
+ size: { default: "md" },
2877
+ labelHidden: {
2878
+ type: Boolean,
2879
+ default: false
2880
+ },
2881
+ disabled: {
2882
+ type: Boolean,
2883
+ default: false
2884
+ }
2885
+ }, {
2886
+ "modelValue": { default: () => [] },
2887
+ "modelModifiers": {}
2888
+ }),
2889
+ emits: ["update:modelValue"],
2890
+ setup(__props) {
2891
+ /** The tags, with `v-model`. */
2892
+ const model = useModel(__props, "modelValue");
2893
+ const draft = ref("");
2894
+ function add() {
2895
+ const value = draft.value.trim();
2896
+ draft.value = "";
2897
+ if (!value) return;
2898
+ if (__props.max !== void 0 && model.value.length >= __props.max) return;
2899
+ if (!__props.allowDuplicates && model.value.includes(value)) return;
2900
+ model.value = [...model.value, value];
2901
+ }
2902
+ function remove(index) {
2903
+ model.value = model.value.filter((_, at) => at !== index);
2904
+ }
2905
+ function onKeydown(event) {
2906
+ if (event.key === "Enter" || event.key === ",") {
2907
+ event.preventDefault();
2908
+ add();
2909
+ return;
2910
+ }
2911
+ if (event.key === "Backspace" && draft.value === "" && model.value.length) {
2912
+ event.preventDefault();
2913
+ remove(model.value.length - 1);
2914
+ }
2915
+ }
2916
+ return (_ctx, _cache) => {
2917
+ return openBlock(), createBlock(FormField_default, {
2918
+ label: __props.label,
2919
+ error: __props.error,
2920
+ hint: __props.hint,
2921
+ size: __props.size,
2922
+ "label-hidden": __props.labelHidden
2923
+ }, {
2924
+ default: withCtx(({ id, describedBy, invalid }) => [createElementVNode("div", {
2925
+ class: normalizeClass(["rk-tags control", {
2926
+ "is-invalid": invalid,
2927
+ "is-disabled": __props.disabled
2928
+ }]),
2929
+ onClick: _cache[1] || (_cache[1] = ($event) => !__props.disabled && _ctx.$el.querySelector("input")?.focus())
2930
+ }, [(openBlock(true), createElementBlock(Fragment, null, renderList(model.value, (tag, index) => {
2931
+ return openBlock(), createBlock(BaseChip_default, {
2932
+ key: `${tag}-${index}`,
2933
+ label: tag,
2934
+ "remove-label": __props.removeLabel(tag),
2935
+ disabled: __props.disabled,
2936
+ onRemove: ($event) => remove(index)
2937
+ }, null, 8, [
2938
+ "label",
2939
+ "remove-label",
2940
+ "disabled",
2941
+ "onRemove"
2942
+ ]);
2943
+ }), 128)), withDirectives(createElementVNode("input", {
2944
+ id,
2945
+ "onUpdate:modelValue": _cache[0] || (_cache[0] = ($event) => draft.value = $event),
2946
+ type: "text",
2947
+ class: "rk-tags-field",
2948
+ autocomplete: "off",
2949
+ placeholder: model.value.length ? "" : __props.placeholder,
2950
+ "aria-describedby": describedBy,
2951
+ "aria-invalid": invalid,
2952
+ disabled: __props.disabled || __props.max !== void 0 && model.value.length >= __props.max,
2953
+ onKeydown,
2954
+ onBlur: add
2955
+ }, null, 40, _hoisted_1$7), [[vModelText, draft.value]])], 2)]),
2956
+ _: 1
2957
+ }, 8, [
2958
+ "label",
2959
+ "error",
2960
+ "hint",
2961
+ "size",
2962
+ "label-hidden"
2963
+ ]);
2964
+ };
2965
+ }
2966
+ }), [["__scopeId", "data-v-b372ae7b"]]);
2967
+ //#endregion
2209
2968
  //#region src/components/BasePopover.vue?vue&type=script&setup=true&lang.ts
2210
2969
  var _hoisted_1$6 = ["id", "aria-label"];
2211
2970
  var FOCUSABLE = "a[href], button:not([disabled]), input:not([disabled]), select:not([disabled]), textarea:not([disabled]), [tabindex]:not([tabindex=\"-1\"])";
@@ -3164,8 +3923,8 @@ function createI18nRuntime(options) {
3164
3923
  *
3165
3924
  * The fallback keeps `vitest` and `vite dev` honest, where no define runs.
3166
3925
  */
3167
- var VERSION = "2.6.0";
3926
+ var VERSION = "2.8.0";
3168
3927
  //#endregion
3169
- export { AppError, 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, BaseCombobox_default as BaseCombobox, BaseDatePicker_default as BaseDatePicker, BaseInput_default as BaseInput, BaseMenu_default as BaseMenu, BasePopover_default as BasePopover, BaseRadioGroup_default as BaseRadioGroup, BaseSelect_default as BaseSelect, BaseSheet_default as BaseSheet, BaseSlider_default as BaseSlider, BaseSpinner_default as BaseSpinner, BaseStepper_default as BaseStepper, BaseSwitch_default as BaseSwitch, BaseTable_default as BaseTable, BaseTextarea_default as BaseTextarea, CircularProgress_default as CircularProgress, EmptyState_default as EmptyState, ErrorBoundary_default as ErrorBoundary, 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, SectionHeading_default as SectionHeading, SegmentedControl_default as SegmentedControl, SettingsGroup_default as SettingsGroup, SettingsRow_default as SettingsRow, SkeletonList_default as SkeletonList, StatCard_default as StatCard, TabBar_default as TabBar, ToastHost_default as ToastHost, ToggleGroup_default as ToggleGroup, ToneDot_default as ToneDot, VERSION, addDays, applyMaterial, applyPalette, applyTheme, createI18nRuntime, downloadJson, eachDayOfYear, ensureSheetRoot, formatDate, formatNumber, fromDateKey, isApplePortable, isInstalled, isMaterial, isPaletteName, isThemePreference, lastNDays, leadingBlanks, needsIosInstall, readStoredTheme, registerErrorMapper, relativeDayLabel, safeRedirect, setFormatLocale, setMaterialStorageKey, setPaletteStorageKey, setThemeStorageKey, startOfWeek, tapFeedback, toAppError, toDateKey, toRedirectPath, todayKey, useDebouncedCallback, useDragScroll, useMaterial, useMediaQuery, useOnline, usePalette, useTheme, useToast, useToday, useVisualViewport };
3928
+ export { 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, 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, CircularProgress_default as CircularProgress, CopyButton_default as CopyButton, EmptyState_default as EmptyState, ErrorBoundary_default as ErrorBoundary, FileDrop_default as FileDrop, FormField_default as FormField, GoogleButton_default as GoogleButton, LocaleLinks_default as LocaleLinks, MATERIALS, NumberInput_default as NumberInput, PALETTES, PageContainer_default as PageContainer, PageHeader_default as PageHeader, PinInput_default as PinInput, PriceCard_default as PriceCard, ProgressBar_default as ProgressBar, SHEET_ROOT_ID, SectionHeading_default as SectionHeading, SegmentedControl_default as SegmentedControl, SettingsGroup_default as SettingsGroup, SettingsRow_default as SettingsRow, SkeletonList_default as SkeletonList, StatCard_default as StatCard, TabBar_default as TabBar, TagsInput_default as TagsInput, ToastHost_default as ToastHost, ToggleGroup_default as ToggleGroup, ToneDot_default as ToneDot, VERSION, addDays, applyMaterial, applyPalette, applyTheme, createI18nRuntime, downloadJson, eachDayOfYear, ensureSheetRoot, formatDate, formatNumber, fromDateKey, isApplePortable, isInstalled, isMaterial, isPaletteName, isThemePreference, lastNDays, leadingBlanks, needsIosInstall, readStoredTheme, registerErrorMapper, relativeDayLabel, safeRedirect, setFormatLocale, setMaterialStorageKey, setPaletteStorageKey, setThemeStorageKey, startOfWeek, tapFeedback, toAppError, toDateKey, toRedirectPath, todayKey, useDebouncedCallback, useDragScroll, useMaterial, useMediaQuery, useOnline, usePalette, useTheme, useToast, useToday, useVisualViewport };
3170
3929
 
3171
3930
  //# sourceMappingURL=index.js.map