fds-vue-core 8.3.2 → 8.4.1

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.
@@ -1,6 +1,7 @@
1
1
  "use strict";
2
2
  Object.defineProperties(exports, { __esModule: { value: true }, [Symbol.toStringTag]: { value: "Module" } });
3
3
  const vue = require("vue");
4
+ const vueRouter = require("vue-router");
4
5
  function useAttrsWithDefaults(props) {
5
6
  const attrs = vue.useAttrs();
6
7
  return {
@@ -77,6 +78,7 @@ const en = {
77
78
  "FdsInput.today": "(today)",
78
79
  "FdsListHeading.loading": "Loading...",
79
80
  "FdsListHeading.separator": "of",
81
+ "FdsDrawer.closeDrawer": "Close drawer",
80
82
  "FdsModal.closeModal": "Close modal window",
81
83
  "FdsPagination.currentPage": "Current page",
82
84
  "FdsPagination.firstPage": "Go to first page",
@@ -152,6 +154,7 @@ const sv = {
152
154
  "FdsInput.today": "(idag)",
153
155
  "FdsListHeading.loading": "Laddar...",
154
156
  "FdsListHeading.separator": "av",
157
+ "FdsDrawer.closeDrawer": "Stäng sidopanel",
155
158
  "FdsModal.closeModal": "Stäng dialogruta",
156
159
  "FdsPagination.currentPage": "Aktuell sida",
157
160
  "FdsPagination.firstPage": "Gå till första sidan",
@@ -754,8 +757,8 @@ const icons = {
754
757
  </defs>
755
758
  </svg>`
756
759
  };
757
- const _hoisted_1$B = ["innerHTML"];
758
- const _sfc_main$N = /* @__PURE__ */ vue.defineComponent({
760
+ const _hoisted_1$C = ["innerHTML"];
761
+ const _sfc_main$O = /* @__PURE__ */ vue.defineComponent({
759
762
  __name: "FdsIcon",
760
763
  props: {
761
764
  name: {},
@@ -788,11 +791,11 @@ const _sfc_main$N = /* @__PURE__ */ vue.defineComponent({
788
791
  return vue.openBlock(), vue.createElementBlock("span", vue.mergeProps({
789
792
  class: "flex items-center justify-center align-middle",
790
793
  style: { width: pixelSize.value, height: pixelSize.value }
791
- }, rootAttrs.value, { innerHTML: svgHtml.value }), null, 16, _hoisted_1$B);
794
+ }, rootAttrs.value, { innerHTML: svgHtml.value }), null, 16, _hoisted_1$C);
792
795
  };
793
796
  }
794
797
  });
795
- const _sfc_main$M = /* @__PURE__ */ vue.defineComponent({
798
+ const _sfc_main$N = /* @__PURE__ */ vue.defineComponent({
796
799
  __name: "FdsButtonIcon",
797
800
  props: {
798
801
  icon: {},
@@ -836,12 +839,12 @@ const _sfc_main$M = /* @__PURE__ */ vue.defineComponent({
836
839
  class: buttonClasses.value,
837
840
  onClick
838
841
  }), [
839
- !__props.loading ? (vue.openBlock(), vue.createBlock(_sfc_main$N, {
842
+ !__props.loading ? (vue.openBlock(), vue.createBlock(_sfc_main$O, {
840
843
  key: 0,
841
844
  size: iconSize.value,
842
845
  name: __props.icon,
843
846
  "aria-hidden": "true"
844
- }, null, 8, ["size", "name"])) : (vue.openBlock(), vue.createBlock(_sfc_main$N, {
847
+ }, null, 8, ["size", "name"])) : (vue.openBlock(), vue.createBlock(_sfc_main$O, {
845
848
  key: 1,
846
849
  size: iconSize.value,
847
850
  name: "spinner",
@@ -852,7 +855,7 @@ const _sfc_main$M = /* @__PURE__ */ vue.defineComponent({
852
855
  };
853
856
  }
854
857
  });
855
- const _hoisted_1$A = { class: "flex items-start gap-2" };
858
+ const _hoisted_1$B = { class: "flex items-start gap-2" };
856
859
  const _hoisted_2$q = { class: "h-7 flex items-center" };
857
860
  const _hoisted_3$l = { class: "leading-7" };
858
861
  const _hoisted_4$j = { class: "relative h-7" };
@@ -860,7 +863,7 @@ const _hoisted_5$h = {
860
863
  key: 1,
861
864
  class: "fds-block-alert-slot mb-0-last-child"
862
865
  };
863
- const _sfc_main$L = /* @__PURE__ */ vue.defineComponent({
866
+ const _sfc_main$M = /* @__PURE__ */ vue.defineComponent({
864
867
  __name: "FdsBlockAlert",
865
868
  props: {
866
869
  visible: { type: Boolean, default: true },
@@ -878,7 +881,7 @@ const _sfc_main$L = /* @__PURE__ */ vue.defineComponent({
878
881
  const { t } = useFdsI18n();
879
882
  const emit = __emit;
880
883
  const isExpanded = vue.ref(props.expanded);
881
- const isVisible = vue.ref(props.visible);
884
+ const isVisible2 = vue.ref(props.visible);
882
885
  const expandLabel = vue.computed(() => t("FdsBlockAlert.showMore"));
883
886
  const collapseLabel = vue.computed(() => t("FdsBlockAlert.showLess"));
884
887
  const closeLabel = vue.computed(() => t("FdsBlockAlert.close"));
@@ -886,7 +889,7 @@ const _sfc_main$L = /* @__PURE__ */ vue.defineComponent({
886
889
  vue.watch(
887
890
  () => props.visible,
888
891
  (v) => {
889
- isVisible.value = v;
892
+ isVisible2.value = v;
890
893
  }
891
894
  );
892
895
  const alertClasses = vue.computed(() => [
@@ -900,7 +903,7 @@ const _sfc_main$L = /* @__PURE__ */ vue.defineComponent({
900
903
  ...props.dataTestid && { "data-testid": props.dataTestid }
901
904
  }));
902
905
  function handleClose() {
903
- isVisible.value = false;
906
+ isVisible2.value = false;
904
907
  emit("update:visible", false);
905
908
  emit("close");
906
909
  }
@@ -909,16 +912,16 @@ const _sfc_main$L = /* @__PURE__ */ vue.defineComponent({
909
912
  emit("toggle");
910
913
  }
911
914
  return (_ctx, _cache) => {
912
- return isVisible.value ? (vue.openBlock(), vue.createElementBlock("div", vue.mergeProps({ key: 0 }, rootAttrs.value, { class: alertClasses.value }), [
915
+ return isVisible2.value ? (vue.openBlock(), vue.createElementBlock("div", vue.mergeProps({ key: 0 }, rootAttrs.value, { class: alertClasses.value }), [
913
916
  vue.createElementVNode("div", null, [
914
917
  vue.createElementVNode("div", null, [
915
918
  __props.heading ? (vue.openBlock(), vue.createElementBlock("div", {
916
919
  key: 0,
917
920
  class: vue.normalizeClass(["font-bold w-full justify-between items-start flex gap-2", { "mb-2": (isExpanded.value || !__props.collapsable) && vue.unref(hasSlot) }])
918
921
  }, [
919
- vue.createElementVNode("div", _hoisted_1$A, [
922
+ vue.createElementVNode("div", _hoisted_1$B, [
920
923
  vue.createElementVNode("div", _hoisted_2$q, [
921
- vue.createVNode(_sfc_main$N, {
924
+ vue.createVNode(_sfc_main$O, {
922
925
  name: "alert",
923
926
  size: 24,
924
927
  class: "fill-yellow-700"
@@ -927,13 +930,13 @@ const _sfc_main$L = /* @__PURE__ */ vue.defineComponent({
927
930
  vue.createElementVNode("span", _hoisted_3$l, vue.toDisplayString(__props.heading), 1)
928
931
  ]),
929
932
  vue.createElementVNode("div", _hoisted_4$j, [
930
- __props.closeable ? (vue.openBlock(), vue.createBlock(_sfc_main$M, vue.mergeProps({
933
+ __props.closeable ? (vue.openBlock(), vue.createBlock(_sfc_main$N, vue.mergeProps({
931
934
  key: 0,
932
935
  icon: "cross",
933
936
  size: 28,
934
937
  onClick: handleClose
935
938
  }, { "aria-label": closeLabel.value }, { class: ["fill-gray-900! hover:bg-gray-100 active:bg-gray-200"] }), null, 16)) : vue.createCommentVNode("", true),
936
- __props.collapsable ? (vue.openBlock(), vue.createBlock(_sfc_main$M, vue.mergeProps({
939
+ __props.collapsable ? (vue.openBlock(), vue.createBlock(_sfc_main$N, vue.mergeProps({
937
940
  key: 1,
938
941
  icon: "arrowDown",
939
942
  size: 28,
@@ -956,7 +959,7 @@ const _sfc_main$L = /* @__PURE__ */ vue.defineComponent({
956
959
  };
957
960
  }
958
961
  });
959
- const _hoisted_1$z = ["id"];
962
+ const _hoisted_1$A = ["id"];
960
963
  const _hoisted_2$p = {
961
964
  key: 0,
962
965
  class: "flex items-start justify-between gap-4 mb-4"
@@ -964,7 +967,7 @@ const _hoisted_2$p = {
964
967
  const _hoisted_3$k = { class: "flex items-center gap-3" };
965
968
  const _hoisted_4$i = { class: "flex items-start gap-3 leading-8" };
966
969
  const _hoisted_5$g = { class: "mb-0-last-child" };
967
- const _sfc_main$K = /* @__PURE__ */ vue.defineComponent({
970
+ const _sfc_main$L = /* @__PURE__ */ vue.defineComponent({
968
971
  __name: "FdsBlockContent",
969
972
  props: {
970
973
  heading: { default: void 0 },
@@ -1021,11 +1024,11 @@ const _sfc_main$K = /* @__PURE__ */ vue.defineComponent({
1021
1024
  vue.createElementVNode("div", _hoisted_5$g, [
1022
1025
  vue.renderSlot(_ctx.$slots, "default")
1023
1026
  ])
1024
- ], 16, _hoisted_1$z);
1027
+ ], 16, _hoisted_1$A);
1025
1028
  };
1026
1029
  }
1027
1030
  });
1028
- const _sfc_main$J = /* @__PURE__ */ vue.defineComponent({
1031
+ const _sfc_main$K = /* @__PURE__ */ vue.defineComponent({
1029
1032
  __name: "FdsSticker",
1030
1033
  props: {
1031
1034
  variant: { default: "blue" },
@@ -1073,7 +1076,7 @@ const _sfc_main$J = /* @__PURE__ */ vue.defineComponent({
1073
1076
  };
1074
1077
  }
1075
1078
  });
1076
- const _hoisted_1$y = { class: "leading-6 w-full flex justify-between gap-4" };
1079
+ const _hoisted_1$z = { class: "leading-6 w-full flex justify-between gap-4" };
1077
1080
  const _hoisted_2$o = {
1078
1081
  key: 0,
1079
1082
  class: "flex items-center mr-4"
@@ -1085,7 +1088,7 @@ const _hoisted_5$f = {
1085
1088
  class: "w-full flex mt-2"
1086
1089
  };
1087
1090
  const _hoisted_6$b = ["aria-hidden"];
1088
- const _sfc_main$I = /* @__PURE__ */ vue.defineComponent({
1091
+ const _sfc_main$J = /* @__PURE__ */ vue.defineComponent({
1089
1092
  ...{
1090
1093
  inheritAttrs: false
1091
1094
  },
@@ -1157,12 +1160,12 @@ const _sfc_main$I = /* @__PURE__ */ vue.defineComponent({
1157
1160
  vue.createElementVNode("span", {
1158
1161
  class: vue.normalizeClass(buttonRowClasses.value)
1159
1162
  }, [
1160
- vue.createElementVNode("span", _hoisted_1$y, [
1163
+ vue.createElementVNode("span", _hoisted_1$z, [
1161
1164
  vue.createElementVNode("span", {
1162
1165
  class: vue.normalizeClass(["flex items-center", { "inline-flex items-start": __props.icon }])
1163
1166
  }, [
1164
1167
  __props.icon ? (vue.openBlock(), vue.createElementBlock("span", _hoisted_2$o, [
1165
- vue.createVNode(_sfc_main$N, {
1168
+ vue.createVNode(_sfc_main$O, {
1166
1169
  name: __props.icon,
1167
1170
  size: 24,
1168
1171
  class: vue.normalizeClass(["fill-blue-500", [{ "fill-gray-500": __props.disabled }, __props.iconClass]])
@@ -1175,7 +1178,7 @@ const _sfc_main$I = /* @__PURE__ */ vue.defineComponent({
1175
1178
  ])
1176
1179
  ], 2),
1177
1180
  vue.createElementVNode("span", _hoisted_4$h, [
1178
- __props.stickerText && __props.stickerColor ? (vue.openBlock(), vue.createBlock(_sfc_main$J, {
1181
+ __props.stickerText && __props.stickerColor ? (vue.openBlock(), vue.createBlock(_sfc_main$K, {
1179
1182
  key: 0,
1180
1183
  variant: __props.stickerColor
1181
1184
  }, {
@@ -1184,7 +1187,7 @@ const _sfc_main$I = /* @__PURE__ */ vue.defineComponent({
1184
1187
  ]),
1185
1188
  _: 1
1186
1189
  }, 8, ["variant"])) : vue.createCommentVNode("", true),
1187
- vue.createVNode(_sfc_main$N, {
1190
+ vue.createVNode(_sfc_main$O, {
1188
1191
  name: "arrowDown",
1189
1192
  size: 24,
1190
1193
  class: vue.normalizeClass(["transition-transform duration-200 fill-blue-500 min-w-6 min-h-6", { "rotate-180": isOpen.value, "fill-gray-500": __props.disabled }])
@@ -1208,7 +1211,7 @@ const _sfc_main$I = /* @__PURE__ */ vue.defineComponent({
1208
1211
  };
1209
1212
  }
1210
1213
  });
1211
- const _hoisted_1$x = ["id"];
1214
+ const _hoisted_1$y = ["id"];
1212
1215
  const _hoisted_2$n = {
1213
1216
  key: 0,
1214
1217
  class: "flex items-start gap-4"
@@ -1233,7 +1236,7 @@ const _hoisted_13$2 = { class: "flex items-start gap-3" };
1233
1236
  const _hoisted_14$2 = { class: "mb-0-last-child" };
1234
1237
  const smallIconSize = 24;
1235
1238
  const largeIconSize = 48;
1236
- const _sfc_main$H = /* @__PURE__ */ vue.defineComponent({
1239
+ const _sfc_main$I = /* @__PURE__ */ vue.defineComponent({
1237
1240
  __name: "FdsBlockInfo",
1238
1241
  props: {
1239
1242
  heading: { default: void 0 },
@@ -1266,7 +1269,7 @@ const _sfc_main$H = /* @__PURE__ */ vue.defineComponent({
1266
1269
  class: contentClasses.value
1267
1270
  }, rootAttrs.value), [
1268
1271
  __props.iconSize === "large" && __props.icon ? (vue.openBlock(), vue.createElementBlock("div", _hoisted_2$n, [
1269
- vue.createVNode(_sfc_main$N, {
1272
+ vue.createVNode(_sfc_main$O, {
1270
1273
  name: __props.icon,
1271
1274
  size: largeIconSize,
1272
1275
  class: "fill-blue-500"
@@ -1291,7 +1294,7 @@ const _sfc_main$H = /* @__PURE__ */ vue.defineComponent({
1291
1294
  }, [
1292
1295
  vue.createElementVNode("header", _hoisted_10$4, [
1293
1296
  vue.createElementVNode("div", _hoisted_11$4, [
1294
- __props.icon && __props.iconSize === "small" ? (vue.openBlock(), vue.createBlock(_sfc_main$N, {
1297
+ __props.icon && __props.iconSize === "small" ? (vue.openBlock(), vue.createBlock(_sfc_main$O, {
1295
1298
  key: 0,
1296
1299
  name: __props.icon,
1297
1300
  size: smallIconSize,
@@ -1308,16 +1311,16 @@ const _sfc_main$H = /* @__PURE__ */ vue.defineComponent({
1308
1311
  vue.renderSlot(_ctx.$slots, "default")
1309
1312
  ])
1310
1313
  ]))
1311
- ], 16, _hoisted_1$x);
1314
+ ], 16, _hoisted_1$y);
1312
1315
  };
1313
1316
  }
1314
1317
  });
1315
- const _hoisted_1$w = { class: "mb-0-last-child" };
1318
+ const _hoisted_1$x = { class: "mb-0-last-child" };
1316
1319
  const _hoisted_2$m = {
1317
1320
  key: 0,
1318
1321
  class: "flex items-end"
1319
1322
  };
1320
- const _sfc_main$G = /* @__PURE__ */ vue.defineComponent({
1323
+ const _sfc_main$H = /* @__PURE__ */ vue.defineComponent({
1321
1324
  ...{
1322
1325
  inheritAttrs: false
1323
1326
  },
@@ -1430,7 +1433,7 @@ const _sfc_main$G = /* @__PURE__ */ vue.defineComponent({
1430
1433
  vue.createElementVNode("div", {
1431
1434
  class: vue.normalizeClass(["flex w-full flex-1", contentClasses.value])
1432
1435
  }, [
1433
- __props.icon ? (vue.openBlock(), vue.createBlock(_sfc_main$N, {
1436
+ __props.icon ? (vue.openBlock(), vue.createBlock(_sfc_main$O, {
1434
1437
  key: 0,
1435
1438
  name: __props.icon,
1436
1439
  size: 24,
@@ -1449,7 +1452,7 @@ const _sfc_main$G = /* @__PURE__ */ vue.defineComponent({
1449
1452
  vue.createElementVNode("div", {
1450
1453
  class: vue.normalizeClass(slotWrapperClasses.value)
1451
1454
  }, [
1452
- vue.createElementVNode("div", _hoisted_1$w, [
1455
+ vue.createElementVNode("div", _hoisted_1$x, [
1453
1456
  vue.renderSlot(_ctx.$slots, "default")
1454
1457
  ]),
1455
1458
  vue.unref(hasStickerSlot) ? (vue.openBlock(), vue.createElementBlock("div", _hoisted_2$m, [
@@ -1458,7 +1461,7 @@ const _sfc_main$G = /* @__PURE__ */ vue.defineComponent({
1458
1461
  ], 2)
1459
1462
  ], 2)
1460
1463
  ], 2),
1461
- __props.variant === "link" ? (vue.openBlock(), vue.createBlock(_sfc_main$N, {
1464
+ __props.variant === "link" ? (vue.openBlock(), vue.createBlock(_sfc_main$O, {
1462
1465
  key: 0,
1463
1466
  name: "arrowRight",
1464
1467
  size: 24,
@@ -1470,8 +1473,8 @@ const _sfc_main$G = /* @__PURE__ */ vue.defineComponent({
1470
1473
  };
1471
1474
  }
1472
1475
  });
1473
- const _hoisted_1$v = ["aria-label"];
1474
- const _sfc_main$F = /* @__PURE__ */ vue.defineComponent({
1476
+ const _hoisted_1$w = ["aria-label"];
1477
+ const _sfc_main$G = /* @__PURE__ */ vue.defineComponent({
1475
1478
  __name: "FdsSpinner",
1476
1479
  props: {
1477
1480
  size: { default: "48px" },
@@ -1551,13 +1554,13 @@ const _sfc_main$F = /* @__PURE__ */ vue.defineComponent({
1551
1554
  key: 0,
1552
1555
  class: vue.normalizeClass(__props.labelPosition === "bottom" ? "font-bold" : "")
1553
1556
  }, vue.toDisplayString(__props.label), 3)) : vue.createCommentVNode("", true)
1554
- ], 16, _hoisted_1$v);
1557
+ ], 16, _hoisted_1$w);
1555
1558
  };
1556
1559
  }
1557
1560
  });
1558
- const _hoisted_1$u = ["aria-disabled"];
1561
+ const _hoisted_1$v = ["aria-disabled"];
1559
1562
  const elBase$2 = "box-border appearance-none inline-flex items-center justify-center w-fit min-h-0 shadow-none p-0.5 text-base select-none m-0 rounded-md text-left align-middle no-underline transition-[box-shadow,border-color,background-color] duration-200 font-main font-bold text-base leading-5 tracking-normal focus-visible:outline-dashed focus-visible:outline-2 focus-visible:outline-offset-4 focus-visible:outline-blue-500";
1560
- const _sfc_main$E = /* @__PURE__ */ vue.defineComponent({
1563
+ const _sfc_main$F = /* @__PURE__ */ vue.defineComponent({
1561
1564
  ...{
1562
1565
  inheritAttrs: false
1563
1566
  },
@@ -1642,7 +1645,7 @@ const _sfc_main$E = /* @__PURE__ */ vue.defineComponent({
1642
1645
  onClick
1643
1646
  }), {
1644
1647
  default: vue.withCtx(() => [
1645
- __props.loading ? (vue.openBlock(), vue.createBlock(_sfc_main$F, {
1648
+ __props.loading ? (vue.openBlock(), vue.createBlock(_sfc_main$G, {
1646
1649
  key: 0,
1647
1650
  class: "mr-2",
1648
1651
  size: "24px",
@@ -1652,7 +1655,7 @@ const _sfc_main$E = /* @__PURE__ */ vue.defineComponent({
1652
1655
  class: vue.normalizeClass(iconOrderClasses.value),
1653
1656
  "aria-hidden": "true"
1654
1657
  }, [
1655
- vue.createVNode(_sfc_main$N, {
1658
+ vue.createVNode(_sfc_main$O, {
1656
1659
  class: vue.normalizeClass(iconFillClass2.value),
1657
1660
  name: __props.icon,
1658
1661
  size: __props.iconSize
@@ -1662,15 +1665,15 @@ const _sfc_main$E = /* @__PURE__ */ vue.defineComponent({
1662
1665
  ]),
1663
1666
  _: 1
1664
1667
  }, 16, ["type", "disabled", "data-testid", "class"]))
1665
- ], 10, _hoisted_1$u);
1668
+ ], 10, _hoisted_1$v);
1666
1669
  };
1667
1670
  }
1668
1671
  });
1669
- const _hoisted_1$t = {
1672
+ const _hoisted_1$u = {
1670
1673
  key: 0,
1671
1674
  class: "flex items-center gap-2 h-7"
1672
1675
  };
1673
- const _sfc_main$D = /* @__PURE__ */ vue.defineComponent({
1676
+ const _sfc_main$E = /* @__PURE__ */ vue.defineComponent({
1674
1677
  __name: "FdsButtonCopy",
1675
1678
  props: {
1676
1679
  value: { default: "" },
@@ -1732,10 +1735,10 @@ const _sfc_main$D = /* @__PURE__ */ vue.defineComponent({
1732
1735
  }
1733
1736
  });
1734
1737
  return (_ctx, _cache) => {
1735
- return isCopied.value ? (vue.openBlock(), vue.createElementBlock("div", _hoisted_1$t, [
1736
- vue.createVNode(_sfc_main$N, { name: "bigSuccess" }),
1738
+ return isCopied.value ? (vue.openBlock(), vue.createElementBlock("div", _hoisted_1$u, [
1739
+ vue.createVNode(_sfc_main$O, { name: "bigSuccess" }),
1737
1740
  vue.createElementVNode("span", null, vue.toDisplayString(props.copiedText), 1)
1738
- ])) : (vue.openBlock(), vue.createBlock(_sfc_main$E, {
1741
+ ])) : (vue.openBlock(), vue.createBlock(_sfc_main$F, {
1739
1742
  key: 1,
1740
1743
  type: "button",
1741
1744
  disabled: props.disabled,
@@ -5026,8 +5029,8 @@ function useDownload() {
5026
5029
  isDownloading
5027
5030
  };
5028
5031
  }
5029
- const _hoisted_1$s = ["disabled", "aria-disabled"];
5030
- const _sfc_main$C = /* @__PURE__ */ vue.defineComponent({
5032
+ const _hoisted_1$t = ["disabled", "aria-disabled"];
5033
+ const _sfc_main$D = /* @__PURE__ */ vue.defineComponent({
5031
5034
  __name: "FdsButtonDownload",
5032
5035
  props: {
5033
5036
  loading: { type: Boolean, default: false },
@@ -5128,23 +5131,23 @@ const _sfc_main$C = /* @__PURE__ */ vue.defineComponent({
5128
5131
  class: vue.normalizeClass(iconOrderClasses.value),
5129
5132
  "aria-hidden": "true"
5130
5133
  }, [
5131
- vue.createVNode(_sfc_main$N, {
5134
+ vue.createVNode(_sfc_main$O, {
5132
5135
  class: vue.normalizeClass(iconFillClass2.value),
5133
5136
  name: "download",
5134
5137
  size: 24
5135
5138
  }, null, 8, ["class"])
5136
5139
  ], 2),
5137
5140
  vue.createTextVNode(" " + vue.toDisplayString(__props.text), 1)
5138
- ], 16, _hoisted_1$s);
5141
+ ], 16, _hoisted_1$t);
5139
5142
  };
5140
5143
  }
5141
5144
  });
5142
- const _hoisted_1$r = ["aria-disabled"];
5145
+ const _hoisted_1$s = ["aria-disabled"];
5143
5146
  const _hoisted_2$l = { key: 2 };
5144
5147
  const elBase$1 = "fds-button-primary box-border appearance-none inline-flex items-center justify-center select-none w-full min-h-0 min-w-12 m-0 rounded-lg text-center align-middle whitespace-nowrap no-underline shadow-[0_2px_4px_rgba(12,72,153,0.12)] transition-[box-shadow,border-color,background-color] duration-200 font-main font-bold text-base leading-5 tracking-normal focus-visible:outline-dashed focus-visible:outline-2 focus-visible:outline-offset-4 focus-visible:outline-blue-500";
5145
5148
  const variantClasses$1 = "bg-blue-600 border border-blue-600 text-white hover:bg-blue-700";
5146
5149
  const iconFillClass$1 = "fill-white";
5147
- const _sfc_main$B = /* @__PURE__ */ vue.defineComponent({
5150
+ const _sfc_main$C = /* @__PURE__ */ vue.defineComponent({
5148
5151
  ...{
5149
5152
  inheritAttrs: false
5150
5153
  },
@@ -5227,7 +5230,7 @@ const _sfc_main$B = /* @__PURE__ */ vue.defineComponent({
5227
5230
  onClick
5228
5231
  }), {
5229
5232
  default: vue.withCtx(() => [
5230
- __props.loading ? (vue.openBlock(), vue.createBlock(_sfc_main$F, {
5233
+ __props.loading ? (vue.openBlock(), vue.createBlock(_sfc_main$G, {
5231
5234
  key: 0,
5232
5235
  size: __props.size === "sm" ? "18px" : "24px",
5233
5236
  color: "inherit"
@@ -5236,7 +5239,7 @@ const _sfc_main$B = /* @__PURE__ */ vue.defineComponent({
5236
5239
  class: vue.normalizeClass(iconOrderClasses.value),
5237
5240
  "aria-hidden": "true"
5238
5241
  }, [
5239
- vue.createVNode(_sfc_main$N, {
5242
+ vue.createVNode(_sfc_main$O, {
5240
5243
  class: vue.normalizeClass(iconFillClass$1),
5241
5244
  name: __props.icon,
5242
5245
  size: __props.iconSize
@@ -5246,16 +5249,16 @@ const _sfc_main$B = /* @__PURE__ */ vue.defineComponent({
5246
5249
  ]),
5247
5250
  _: 1
5248
5251
  }, 16, ["type", "disabled", "data-testid", "class"]))
5249
- ], 10, _hoisted_1$r);
5252
+ ], 10, _hoisted_1$s);
5250
5253
  };
5251
5254
  }
5252
5255
  });
5253
- const _hoisted_1$q = ["aria-disabled"];
5256
+ const _hoisted_1$r = ["aria-disabled"];
5254
5257
  const _hoisted_2$k = { key: 2 };
5255
5258
  const elBase = "fds-button-secondary box-border appearance-none inline-flex items-center justify-center select-none w-full min-h-0 min-w-12 m-0 rounded-lg text-center align-middle whitespace-nowrap no-underline shadow-[0_2px_4px_rgba(12,72,153,0.12)] transition-[box-shadow,border-color,background-color] duration-200 font-main font-bold text-base leading-5 tracking-normal focus-visible:outline-dashed focus-visible:outline-2 focus-visible:outline-offset-4 focus-visible:outline-blue-500";
5256
5259
  const variantClasses = "bg-white border-2 border-blue-500 text-blue-600 hover:bg-blue_t-100 hover:border-blue-500 hover:text-blue-600 active:bg-blue_t-200 active:border-blue-500 active:text-blue-600";
5257
5260
  const iconFillClass = "fill-blue-500";
5258
- const _sfc_main$A = /* @__PURE__ */ vue.defineComponent({
5261
+ const _sfc_main$B = /* @__PURE__ */ vue.defineComponent({
5259
5262
  ...{
5260
5263
  inheritAttrs: false
5261
5264
  },
@@ -5339,7 +5342,7 @@ const _sfc_main$A = /* @__PURE__ */ vue.defineComponent({
5339
5342
  onClick
5340
5343
  }), {
5341
5344
  default: vue.withCtx(() => [
5342
- __props.loading ? (vue.openBlock(), vue.createBlock(_sfc_main$F, {
5345
+ __props.loading ? (vue.openBlock(), vue.createBlock(_sfc_main$G, {
5343
5346
  key: 0,
5344
5347
  size: __props.size === "sm" ? "18px" : "24px",
5345
5348
  color: "inherit"
@@ -5348,7 +5351,7 @@ const _sfc_main$A = /* @__PURE__ */ vue.defineComponent({
5348
5351
  class: vue.normalizeClass(iconOrderClasses.value),
5349
5352
  "aria-hidden": "true"
5350
5353
  }, [
5351
- vue.createVNode(_sfc_main$N, {
5354
+ vue.createVNode(_sfc_main$O, {
5352
5355
  class: vue.normalizeClass(iconFillClass),
5353
5356
  name: __props.icon,
5354
5357
  size: __props.iconSize
@@ -5358,7 +5361,7 @@ const _sfc_main$A = /* @__PURE__ */ vue.defineComponent({
5358
5361
  ]),
5359
5362
  _: 1
5360
5363
  }, 16, ["type", "disabled", "data-testid", "class"]))
5361
- ], 10, _hoisted_1$q);
5364
+ ], 10, _hoisted_1$r);
5362
5365
  };
5363
5366
  }
5364
5367
  });
@@ -5680,8 +5683,8 @@ function useViewportBreakpoint() {
5680
5683
  breakpoints
5681
5684
  };
5682
5685
  }
5683
- const _hoisted_1$p = ["title"];
5684
- const _sfc_main$z = /* @__PURE__ */ vue.defineComponent({
5686
+ const _hoisted_1$q = ["title"];
5687
+ const _sfc_main$A = /* @__PURE__ */ vue.defineComponent({
5685
5688
  __name: "FdsBreakpointIndicator",
5686
5689
  props: {
5687
5690
  popoverClass: {}
@@ -5720,7 +5723,7 @@ const _sfc_main$z = /* @__PURE__ */ vue.defineComponent({
5720
5723
  class: "px-2 py-1 rounded text-xs bg-white bg-opacity-20 text-black hover:bg-opacity-30 cursor-pointer",
5721
5724
  title: `${vue.unref(windowWidth)}px`,
5722
5725
  onClick: toggleBreakpointList
5723
- }, vue.toDisplayString(vue.unref(currentBreakpoint)), 9, _hoisted_1$p),
5726
+ }, vue.toDisplayString(vue.unref(currentBreakpoint)), 9, _hoisted_1$q),
5724
5727
  showBreakpointList.value ? (vue.openBlock(), vue.createElementBlock("div", {
5725
5728
  key: 0,
5726
5729
  class: vue.normalizeClass(["absolute bottom-full left-0 mb-2 rounded-lg shadow-lg p-2 text-xs font-mono whitespace-nowrap z-10", __props.popoverClass])
@@ -5800,9 +5803,9 @@ function useDevModePoEditor() {
5800
5803
  setI18nKeysVisibility
5801
5804
  };
5802
5805
  }
5803
- const _hoisted_1$o = ["for"];
5806
+ const _hoisted_1$p = ["for"];
5804
5807
  const _hoisted_2$j = ["value", "disabled", "required"];
5805
- const _sfc_main$y = /* @__PURE__ */ vue.defineComponent({
5808
+ const _sfc_main$z = /* @__PURE__ */ vue.defineComponent({
5806
5809
  ...{
5807
5810
  inheritAttrs: false
5808
5811
  },
@@ -5970,14 +5973,14 @@ const _sfc_main$y = /* @__PURE__ */ vue.defineComponent({
5970
5973
  vue.createTextVNode(vue.toDisplayString(props.label), 1)
5971
5974
  ], 64)) : vue.createCommentVNode("", true)
5972
5975
  ], 2)) : vue.createCommentVNode("", true)
5973
- ], 16, _hoisted_1$o)
5976
+ ], 16, _hoisted_1$p)
5974
5977
  ], 2);
5975
5978
  };
5976
5979
  }
5977
5980
  });
5978
- const _hoisted_1$n = ["for"];
5981
+ const _hoisted_1$o = ["for"];
5979
5982
  const _hoisted_2$i = ["value", "checked", "disabled", "required"];
5980
- const _sfc_main$x = /* @__PURE__ */ vue.defineComponent({
5983
+ const _sfc_main$y = /* @__PURE__ */ vue.defineComponent({
5981
5984
  ...{
5982
5985
  inheritAttrs: false
5983
5986
  },
@@ -6108,7 +6111,7 @@ const _sfc_main$x = /* @__PURE__ */ vue.defineComponent({
6108
6111
  vue.createTextVNode(vue.toDisplayString(props.label), 1)
6109
6112
  ], 64)) : vue.createCommentVNode("", true)
6110
6113
  ], 2)) : vue.createCommentVNode("", true)
6111
- ], 16, _hoisted_1$n)
6114
+ ], 16, _hoisted_1$o)
6112
6115
  ], 2);
6113
6116
  };
6114
6117
  }
@@ -6125,7 +6128,7 @@ function classValueToString(value) {
6125
6128
  }
6126
6129
  return String(value);
6127
6130
  }
6128
- const _sfc_main$w = /* @__PURE__ */ vue.defineComponent({
6131
+ const _sfc_main$x = /* @__PURE__ */ vue.defineComponent({
6129
6132
  ...{
6130
6133
  inheritAttrs: false
6131
6134
  },
@@ -6156,7 +6159,7 @@ const _sfc_main$w = /* @__PURE__ */ vue.defineComponent({
6156
6159
  };
6157
6160
  }
6158
6161
  });
6159
- const _hoisted_1$m = {
6162
+ const _hoisted_1$n = {
6160
6163
  key: 0,
6161
6164
  class: "absolute bottom-full right-0 mb-3 z-60 flex min-w-54 flex-col font-normal"
6162
6165
  };
@@ -6172,7 +6175,7 @@ const _hoisted_5$d = {
6172
6175
  };
6173
6176
  const _hoisted_6$9 = { key: 2 };
6174
6177
  const OVERLAY_OPEN_KEY = "devModeOverlayOpen";
6175
- const _sfc_main$v = /* @__PURE__ */ vue.defineComponent({
6178
+ const _sfc_main$w = /* @__PURE__ */ vue.defineComponent({
6176
6179
  __name: "FdsDevModeOverlay",
6177
6180
  props: {
6178
6181
  environment: { default: null },
@@ -6239,11 +6242,11 @@ const _sfc_main$v = /* @__PURE__ */ vue.defineComponent({
6239
6242
  () => checkToggles.value.length > 0 || radioToggles.value.length > 0 || buttonToggles.value.length > 0 || canToggleI18nKeys.value || showLocaleSwitcher.value
6240
6243
  );
6241
6244
  return (_ctx, _cache) => {
6242
- return hasContent.value ? (vue.openBlock(), vue.createElementBlock("div", _hoisted_1$m, [
6245
+ return hasContent.value ? (vue.openBlock(), vue.createElementBlock("div", _hoisted_1$n, [
6243
6246
  isOpen.value ? (vue.openBlock(), vue.createElementBlock("div", _hoisted_2$h, [
6244
6247
  vue.createElementVNode("div", _hoisted_3$h, [
6245
6248
  vue.createElementVNode("div", null, [
6246
- vue.unref(canToggleI18nKeys) ? (vue.openBlock(), vue.createBlock(_sfc_main$y, {
6249
+ vue.unref(canToggleI18nKeys) ? (vue.openBlock(), vue.createBlock(_sfc_main$z, {
6247
6250
  key: 0,
6248
6251
  checked: vue.unref(showingTranslationKeys),
6249
6252
  onChange: vue.unref(setI18nKeysVisibility),
@@ -6255,7 +6258,7 @@ const _sfc_main$v = /* @__PURE__ */ vue.defineComponent({
6255
6258
  _: 1
6256
6259
  }, 8, ["checked", "onChange"])) : vue.createCommentVNode("", true),
6257
6260
  (vue.openBlock(true), vue.createElementBlock(vue.Fragment, null, vue.renderList(checkToggles.value, (toggle) => {
6258
- return vue.openBlock(), vue.createBlock(_sfc_main$y, {
6261
+ return vue.openBlock(), vue.createBlock(_sfc_main$z, {
6259
6262
  key: `${toggle.key}-${toggle.checked}`,
6260
6263
  checked: toggle.checked,
6261
6264
  class: "mb-0!",
@@ -6270,7 +6273,7 @@ const _sfc_main$v = /* @__PURE__ */ vue.defineComponent({
6270
6273
  ]),
6271
6274
  radioToggles.value.length > 0 ? (vue.openBlock(), vue.createElementBlock("div", _hoisted_4$f, [
6272
6275
  (vue.openBlock(true), vue.createElementBlock(vue.Fragment, null, vue.renderList(radioToggles.value, (toggle) => {
6273
- return vue.openBlock(), vue.createBlock(_sfc_main$x, {
6276
+ return vue.openBlock(), vue.createBlock(_sfc_main$y, {
6274
6277
  key: `${toggle.key}-${toggle.checked}`,
6275
6278
  name: toggle.group,
6276
6279
  value: toggle.value,
@@ -6287,7 +6290,7 @@ const _sfc_main$v = /* @__PURE__ */ vue.defineComponent({
6287
6290
  ])) : vue.createCommentVNode("", true),
6288
6291
  buttonToggles.value.length > 0 ? (vue.openBlock(), vue.createElementBlock("div", _hoisted_5$d, [
6289
6292
  (vue.openBlock(true), vue.createElementBlock(vue.Fragment, null, vue.renderList(buttonToggles.value, (toggle) => {
6290
- return vue.openBlock(), vue.createBlock(_sfc_main$E, {
6293
+ return vue.openBlock(), vue.createBlock(_sfc_main$F, {
6291
6294
  key: toggle.key,
6292
6295
  size: "sm",
6293
6296
  block: "",
@@ -6298,7 +6301,7 @@ const _sfc_main$v = /* @__PURE__ */ vue.defineComponent({
6298
6301
  ])) : vue.createCommentVNode("", true),
6299
6302
  showLocaleSwitcher.value ? (vue.openBlock(), vue.createElementBlock("div", _hoisted_6$9, [
6300
6303
  (vue.openBlock(true), vue.createElementBlock(vue.Fragment, null, vue.renderList(localeOptions.value, (localeCode) => {
6301
- return vue.openBlock(), vue.createBlock(_sfc_main$x, {
6304
+ return vue.openBlock(), vue.createBlock(_sfc_main$y, {
6302
6305
  key: localeCode,
6303
6306
  name: "fds-dev-mode-locale",
6304
6307
  value: localeCode,
@@ -6322,13 +6325,13 @@ const _sfc_main$v = /* @__PURE__ */ vue.defineComponent({
6322
6325
  onClick: _cache[0] || (_cache[0] = ($event) => isOpen.value = !isOpen.value),
6323
6326
  class: "flex w-full cursor-pointer justify-between gap-2 px-3 py-2 active:bg-gray-100"
6324
6327
  }, [
6325
- vue.createVNode(_sfc_main$w, { class: "mb-0!" }, {
6328
+ vue.createVNode(_sfc_main$x, { class: "mb-0!" }, {
6326
6329
  default: vue.withCtx(() => [
6327
6330
  vue.createTextVNode(vue.toDisplayString(vue.unref(t)("FdsDevMode.overlay.quickSettings")), 1)
6328
6331
  ]),
6329
6332
  _: 1
6330
6333
  }),
6331
- vue.createVNode(_sfc_main$N, {
6334
+ vue.createVNode(_sfc_main$O, {
6332
6335
  name: isOpen.value ? "arrowUp" : "arrowDown",
6333
6336
  size: 20,
6334
6337
  class: "fill-gray-700"
@@ -6339,10 +6342,60 @@ const _sfc_main$v = /* @__PURE__ */ vue.defineComponent({
6339
6342
  };
6340
6343
  }
6341
6344
  });
6342
- const _hoisted_1$l = { class: "flex justify-between mb-4" };
6345
+ const FOCUSABLE_SELECTOR = [
6346
+ "a[href]:not([disabled])",
6347
+ "button:not([disabled])",
6348
+ "textarea:not([disabled])",
6349
+ 'input:not([disabled]):not([type="hidden"])',
6350
+ "select:not([disabled])",
6351
+ '[tabindex]:not([tabindex="-1"])'
6352
+ ].join(", ");
6353
+ const isVisible = (el) => !!(el.offsetWidth || el.offsetHeight || el.getClientRects().length);
6354
+ const getFocusableElements = (container) => Array.from(container.querySelectorAll(FOCUSABLE_SELECTOR)).filter(
6355
+ (el) => el.tabIndex >= 0 && !el.hasAttribute("disabled") && isVisible(el)
6356
+ );
6357
+ function useFocusTrap() {
6358
+ let cleanup = null;
6359
+ const deactivate = () => {
6360
+ cleanup?.();
6361
+ cleanup = null;
6362
+ };
6363
+ const activate = (getContainer) => {
6364
+ deactivate();
6365
+ vue.nextTick(() => {
6366
+ const container = getContainer();
6367
+ if (!container) return;
6368
+ const focusable = getFocusableElements(container);
6369
+ if (focusable.length > 0) {
6370
+ focusable[0].focus();
6371
+ }
6372
+ const handleTabKey = (e) => {
6373
+ if (e.key !== "Tab") return;
6374
+ const current = getFocusableElements(container);
6375
+ if (current.length === 0) return;
6376
+ const first = current[0];
6377
+ const last = current[current.length - 1];
6378
+ if (e.shiftKey && document.activeElement === first) {
6379
+ last.focus();
6380
+ e.preventDefault();
6381
+ } else if (!e.shiftKey && document.activeElement === last) {
6382
+ first.focus();
6383
+ e.preventDefault();
6384
+ }
6385
+ };
6386
+ container.addEventListener("keydown", handleTabKey, true);
6387
+ cleanup = () => {
6388
+ container.removeEventListener("keydown", handleTabKey, true);
6389
+ };
6390
+ });
6391
+ };
6392
+ vue.onBeforeUnmount(deactivate);
6393
+ return { activate, deactivate };
6394
+ }
6395
+ const _hoisted_1$m = { class: "flex justify-between mb-4" };
6343
6396
  const _hoisted_2$g = { class: "flex items-center gap-2" };
6344
6397
  const _hoisted_3$g = { class: "mb-0-last-child" };
6345
- const _sfc_main$u = /* @__PURE__ */ vue.defineComponent({
6398
+ const _sfc_main$v = /* @__PURE__ */ vue.defineComponent({
6346
6399
  __name: "FdsModal",
6347
6400
  props: {
6348
6401
  open: { type: Boolean, default: false },
@@ -6364,8 +6417,8 @@ const _sfc_main$u = /* @__PURE__ */ vue.defineComponent({
6364
6417
  const props = __props;
6365
6418
  const emit = __emit;
6366
6419
  const isOpen = vue.ref(props.open);
6367
- let cleanupFocusTrap = null;
6368
6420
  const previouslyFocusedElement = vue.ref(null);
6421
+ const { activate: activateFocusTrap, deactivate: deactivateFocusTrap } = useFocusTrap();
6369
6422
  const hasFooterSlot = useHasSlot("modal-footer");
6370
6423
  const { t } = useFdsI18n();
6371
6424
  const modalInnerRef = vue.ref(null);
@@ -6461,39 +6514,6 @@ const _sfc_main$u = /* @__PURE__ */ vue.defineComponent({
6461
6514
  handleClose();
6462
6515
  }
6463
6516
  };
6464
- const getTabList = (modal) => modal.querySelectorAll(
6465
- 'a[href]:not([disabled]), button:not([disabled]), textarea:not([disabled]), input[type="text"]:not([disabled]), input[type="radio"]:not([disabled]), input[type="checkbox"]:not([disabled]), select:not([disabled])'
6466
- );
6467
- const trapFocus = () => {
6468
- if (!isOpen.value) return;
6469
- vue.nextTick(() => {
6470
- const modal = document.querySelector(".fds-modal-inner");
6471
- if (!modal) return;
6472
- const tabList = getTabList(modal);
6473
- if (tabList.length > 0) {
6474
- tabList[0].focus();
6475
- }
6476
- const handleTabKey = (e) => {
6477
- if (e.key !== "Tab") return;
6478
- const currentTabList = getTabList(modal);
6479
- if (currentTabList.length === 0) return;
6480
- const firstFocusableEl = currentTabList[0];
6481
- const lastFocusableEl = currentTabList[currentTabList.length - 1];
6482
- const isTabOrderReversed = e.shiftKey;
6483
- if (isTabOrderReversed && document.activeElement === firstFocusableEl) {
6484
- lastFocusableEl.focus();
6485
- e.preventDefault();
6486
- } else if (!isTabOrderReversed && document.activeElement === lastFocusableEl) {
6487
- firstFocusableEl.focus();
6488
- e.preventDefault();
6489
- }
6490
- };
6491
- modal.addEventListener("keydown", handleTabKey, true);
6492
- cleanupFocusTrap = () => {
6493
- modal.removeEventListener("keydown", handleTabKey, true);
6494
- };
6495
- });
6496
- };
6497
6517
  vue.watch(
6498
6518
  () => props.open,
6499
6519
  (newValue) => {
@@ -6504,14 +6524,11 @@ const _sfc_main$u = /* @__PURE__ */ vue.defineComponent({
6504
6524
  if (props.lockScroll) {
6505
6525
  setHtmlOverflow("hidden");
6506
6526
  }
6507
- trapFocus();
6527
+ activateFocusTrap(() => modalInnerRef.value);
6508
6528
  } else {
6509
6529
  setHtmlOverflow("auto");
6510
6530
  resetDragResize();
6511
- if (cleanupFocusTrap) {
6512
- cleanupFocusTrap();
6513
- cleanupFocusTrap = null;
6514
- }
6531
+ deactivateFocusTrap();
6515
6532
  vue.nextTick(() => {
6516
6533
  if (previouslyFocusedElement.value) {
6517
6534
  previouslyFocusedElement.value.focus();
@@ -6529,16 +6546,14 @@ const _sfc_main$u = /* @__PURE__ */ vue.defineComponent({
6529
6546
  if (props.lockScroll) {
6530
6547
  setHtmlOverflow("hidden");
6531
6548
  }
6532
- trapFocus();
6549
+ activateFocusTrap(() => modalInnerRef.value);
6533
6550
  }
6534
6551
  });
6535
6552
  vue.onBeforeUnmount(() => {
6536
6553
  document.removeEventListener("keydown", handleKeyDown, true);
6537
6554
  cleanupDragResize();
6538
6555
  setHtmlOverflow("auto");
6539
- if (cleanupFocusTrap) {
6540
- cleanupFocusTrap();
6541
- }
6556
+ deactivateFocusTrap();
6542
6557
  });
6543
6558
  const modalAttrs = vue.computed(() => {
6544
6559
  const attrs = {};
@@ -6571,9 +6586,9 @@ const _sfc_main$u = /* @__PURE__ */ vue.defineComponent({
6571
6586
  vue.createElementVNode("div", {
6572
6587
  class: vue.normalizeClass(__props.resizable ? "overflow-auto flex-1 min-h-0" : "")
6573
6588
  }, [
6574
- vue.createElementVNode("div", _hoisted_1$l, [
6589
+ vue.createElementVNode("div", _hoisted_1$m, [
6575
6590
  vue.createElementVNode("div", _hoisted_2$g, [
6576
- iconName.value ? (vue.openBlock(), vue.createBlock(_sfc_main$N, {
6591
+ iconName.value ? (vue.openBlock(), vue.createBlock(_sfc_main$O, {
6577
6592
  key: 0,
6578
6593
  name: iconName.value,
6579
6594
  size: 24,
@@ -6584,7 +6599,7 @@ const _sfc_main$u = /* @__PURE__ */ vue.defineComponent({
6584
6599
  class: vue.normalizeClass(headerTitleClasses.value)
6585
6600
  }, vue.toDisplayString(__props.heading), 3)
6586
6601
  ]),
6587
- !__props.strict ? (vue.openBlock(), vue.createBlock(_sfc_main$M, vue.mergeProps({
6602
+ !__props.strict ? (vue.openBlock(), vue.createBlock(_sfc_main$N, vue.mergeProps({
6588
6603
  key: 0,
6589
6604
  icon: "cross",
6590
6605
  size: 28,
@@ -9846,7 +9861,7 @@ try {
9846
9861
  globalThis.IMask = IMask;
9847
9862
  } catch {
9848
9863
  }
9849
- const _sfc_main$t = /* @__PURE__ */ vue.defineComponent({
9864
+ const _sfc_main$u = /* @__PURE__ */ vue.defineComponent({
9850
9865
  ...{
9851
9866
  inheritAttrs: false
9852
9867
  },
@@ -9877,7 +9892,7 @@ const _sfc_main$t = /* @__PURE__ */ vue.defineComponent({
9877
9892
  };
9878
9893
  }
9879
9894
  });
9880
- const _hoisted_1$k = ["for", "id"];
9895
+ const _hoisted_1$l = ["for", "id"];
9881
9896
  const _hoisted_2$f = { class: "relative" };
9882
9897
  const _hoisted_3$f = ["type", "required", "disabled", "tabindex", "aria-invalid", "aria-label", "aria-labelledby", "aria-describedby", "autocomplete", "placeholder", "pattern", "searchIcon"];
9883
9898
  const _hoisted_4$e = {
@@ -9885,7 +9900,7 @@ const _hoisted_4$e = {
9885
9900
  class: "text-red-700 font-bold mt-1"
9886
9901
  };
9887
9902
  const inputPaddingClasses = "px-3 py-[calc(0.75rem-1px)]";
9888
- const _sfc_main$s = /* @__PURE__ */ vue.defineComponent({
9903
+ const _sfc_main$t = /* @__PURE__ */ vue.defineComponent({
9889
9904
  ...{
9890
9905
  inheritAttrs: false
9891
9906
  },
@@ -10185,8 +10200,8 @@ const _sfc_main$s = /* @__PURE__ */ vue.defineComponent({
10185
10200
  for: inputId.value,
10186
10201
  id: labelId.value,
10187
10202
  class: ["block font-bold text-gray-900 cursor-pointer", { "mb-0": props.meta, "mb-1": !props.meta }]
10188
- }, labelAttrs.value), vue.toDisplayString(props.label), 17, _hoisted_1$k)) : vue.createCommentVNode("", true),
10189
- props.meta ? (vue.openBlock(), vue.createBlock(_sfc_main$t, {
10203
+ }, labelAttrs.value), vue.toDisplayString(props.label), 17, _hoisted_1$l)) : vue.createCommentVNode("", true),
10204
+ props.meta ? (vue.openBlock(), vue.createBlock(_sfc_main$u, {
10190
10205
  key: 1,
10191
10206
  id: metaId.value,
10192
10207
  class: vue.normalizeClass({ "mb-1": !props.labelLeft })
@@ -10231,7 +10246,7 @@ const _sfc_main$s = /* @__PURE__ */ vue.defineComponent({
10231
10246
  vue.createElementVNode("div", {
10232
10247
  class: vue.normalizeClass(rightIconsContainerClasses.value)
10233
10248
  }, [
10234
- showDateIcon.value ? (vue.openBlock(), vue.createBlock(_sfc_main$M, {
10249
+ showDateIcon.value ? (vue.openBlock(), vue.createBlock(_sfc_main$N, {
10235
10250
  key: 0,
10236
10251
  "aria-label": dateButtonLabel.value,
10237
10252
  onClick: onDateIconClick,
@@ -10239,29 +10254,29 @@ const _sfc_main$s = /* @__PURE__ */ vue.defineComponent({
10239
10254
  size: 28,
10240
10255
  class: "fill-blue-500"
10241
10256
  }, null, 8, ["aria-label"])) : vue.createCommentVNode("", true),
10242
- isInvalid.value ? (vue.openBlock(), vue.createBlock(_sfc_main$N, {
10257
+ isInvalid.value ? (vue.openBlock(), vue.createBlock(_sfc_main$O, {
10243
10258
  key: 1,
10244
10259
  name: "alert",
10245
10260
  class: "fill-red-700"
10246
10261
  })) : vue.createCommentVNode("", true),
10247
- isValid2.value ? (vue.openBlock(), vue.createBlock(_sfc_main$N, {
10262
+ isValid2.value ? (vue.openBlock(), vue.createBlock(_sfc_main$O, {
10248
10263
  key: 2,
10249
10264
  name: "bigSuccess"
10250
10265
  })) : vue.createCommentVNode("", true),
10251
- props.searchIcon ? (vue.openBlock(), vue.createBlock(_sfc_main$N, {
10266
+ props.searchIcon ? (vue.openBlock(), vue.createBlock(_sfc_main$O, {
10252
10267
  key: 3,
10253
10268
  name: "search",
10254
10269
  size: 24,
10255
10270
  class: "fill-blue-500"
10256
10271
  })) : vue.createCommentVNode("", true),
10257
- showClearButton.value ? (vue.openBlock(), vue.createBlock(_sfc_main$M, vue.mergeProps({
10272
+ showClearButton.value ? (vue.openBlock(), vue.createBlock(_sfc_main$N, vue.mergeProps({
10258
10273
  key: 4,
10259
10274
  icon: "cross"
10260
10275
  }, { "aria-label": clearButtonLabel.value }, {
10261
10276
  onClick: onClear,
10262
10277
  size: 30
10263
10278
  }), null, 16)) : vue.createCommentVNode("", true),
10264
- showPasswordToggle.value ? (vue.openBlock(), vue.createBlock(_sfc_main$E, {
10279
+ showPasswordToggle.value ? (vue.openBlock(), vue.createBlock(_sfc_main$F, {
10265
10280
  key: 5,
10266
10281
  icon: showPassword.value ? "viewOff" : "viewOn",
10267
10282
  text: showPassword.value ? passwordButtonHideLabel.value : passwordButtonShowLabel.value,
@@ -10281,7 +10296,7 @@ const _sfc_main$s = /* @__PURE__ */ vue.defineComponent({
10281
10296
  };
10282
10297
  }
10283
10298
  });
10284
- const _sfc_main$r = /* @__PURE__ */ vue.defineComponent({
10299
+ const _sfc_main$s = /* @__PURE__ */ vue.defineComponent({
10285
10300
  __name: "FdsTabs",
10286
10301
  props: {
10287
10302
  block: { type: Boolean, default: false },
@@ -10314,7 +10329,7 @@ const _sfc_main$r = /* @__PURE__ */ vue.defineComponent({
10314
10329
  };
10315
10330
  }
10316
10331
  });
10317
- const _sfc_main$q = /* @__PURE__ */ vue.defineComponent({
10332
+ const _sfc_main$r = /* @__PURE__ */ vue.defineComponent({
10318
10333
  ...{
10319
10334
  inheritAttrs: false
10320
10335
  },
@@ -10429,7 +10444,7 @@ const _sfc_main$q = /* @__PURE__ */ vue.defineComponent({
10429
10444
  };
10430
10445
  }
10431
10446
  });
10432
- const _hoisted_1$j = { class: "space-y-6" };
10447
+ const _hoisted_1$k = { class: "space-y-6" };
10433
10448
  const _hoisted_2$e = {
10434
10449
  key: 0,
10435
10450
  class: "text-sm text-gray-600"
@@ -10528,7 +10543,7 @@ const _hoisted_59 = {
10528
10543
  class: "mt-2"
10529
10544
  };
10530
10545
  const _hoisted_60 = { class: "mt-4 flex justify-end gap-3" };
10531
- const _sfc_main$p = /* @__PURE__ */ vue.defineComponent({
10546
+ const _sfc_main$q = /* @__PURE__ */ vue.defineComponent({
10532
10547
  __name: "FdsDevModeStorage",
10533
10548
  props: {
10534
10549
  open: { type: Boolean, default: false },
@@ -10701,7 +10716,7 @@ const _sfc_main$p = /* @__PURE__ */ vue.defineComponent({
10701
10716
  loadStorageEntries();
10702
10717
  };
10703
10718
  return (_ctx, _cache) => {
10704
- return vue.openBlock(), vue.createBlock(_sfc_main$u, {
10719
+ return vue.openBlock(), vue.createBlock(_sfc_main$v, {
10705
10720
  open: isOpen.value,
10706
10721
  heading: "DevTools",
10707
10722
  size: "xl",
@@ -10711,31 +10726,31 @@ const _sfc_main$p = /* @__PURE__ */ vue.defineComponent({
10711
10726
  onClose: _cache[11] || (_cache[11] = () => handleOpenChange(false))
10712
10727
  }, {
10713
10728
  default: vue.withCtx(() => [
10714
- vue.createElementVNode("div", _hoisted_1$j, [
10715
- vue.createVNode(_sfc_main$r, {
10729
+ vue.createElementVNode("div", _hoisted_1$k, [
10730
+ vue.createVNode(_sfc_main$s, {
10716
10731
  variant: "secondary",
10717
10732
  class: "flex-wrap overflow-visible! *:w-auto!"
10718
10733
  }, {
10719
10734
  default: vue.withCtx(() => [
10720
- vue.createVNode(_sfc_main$q, {
10735
+ vue.createVNode(_sfc_main$r, {
10721
10736
  label: vue.unref(t)("FdsDevModeStorage.tabs.localStorage"),
10722
10737
  active: activeTab.value === "local",
10723
10738
  as: "button",
10724
10739
  onClick: _cache[0] || (_cache[0] = ($event) => activeTab.value = "local")
10725
10740
  }, null, 8, ["label", "active"]),
10726
- vue.createVNode(_sfc_main$q, {
10741
+ vue.createVNode(_sfc_main$r, {
10727
10742
  label: vue.unref(t)("FdsDevModeStorage.tabs.sessionStorage"),
10728
10743
  active: activeTab.value === "session",
10729
10744
  as: "button",
10730
10745
  onClick: _cache[1] || (_cache[1] = ($event) => activeTab.value = "session")
10731
10746
  }, null, 8, ["label", "active"]),
10732
- vue.createVNode(_sfc_main$q, {
10747
+ vue.createVNode(_sfc_main$r, {
10733
10748
  label: vue.unref(t)("FdsDevModeStorage.tabs.cookies"),
10734
10749
  active: activeTab.value === "cookies",
10735
10750
  as: "button",
10736
10751
  onClick: _cache[2] || (_cache[2] = ($event) => activeTab.value = "cookies")
10737
10752
  }, null, 8, ["label", "active"]),
10738
- vue.createVNode(_sfc_main$q, {
10753
+ vue.createVNode(_sfc_main$r, {
10739
10754
  label: vue.unref(t)("FdsDevModeStorage.tabs.actions"),
10740
10755
  active: activeTab.value === "actions",
10741
10756
  as: "button",
@@ -10744,7 +10759,7 @@ const _sfc_main$p = /* @__PURE__ */ vue.defineComponent({
10744
10759
  ]),
10745
10760
  _: 1
10746
10761
  }),
10747
- activeTab.value === "local" ? (vue.openBlock(), vue.createBlock(_sfc_main$H, {
10762
+ activeTab.value === "local" ? (vue.openBlock(), vue.createBlock(_sfc_main$I, {
10748
10763
  key: 0,
10749
10764
  heading: vue.unref(t)("FdsDevModeStorage.tabs.localStorage"),
10750
10765
  icon: "information",
@@ -10798,12 +10813,12 @@ const _sfc_main$p = /* @__PURE__ */ vue.defineComponent({
10798
10813
  ])
10799
10814
  ]),
10800
10815
  localEditKey.value ? (vue.openBlock(), vue.createElementBlock("div", _hoisted_18, [
10801
- vue.createVNode(_sfc_main$A, {
10816
+ vue.createVNode(_sfc_main$B, {
10802
10817
  text: vue.unref(t)("FdsDevModeStorage.actions.delete"),
10803
10818
  size: "sm",
10804
10819
  onClick: deleteLocalEntry
10805
10820
  }, null, 8, ["text"]),
10806
- vue.createVNode(_sfc_main$B, {
10821
+ vue.createVNode(_sfc_main$C, {
10807
10822
  text: vue.unref(t)("FdsDevModeStorage.actions.save"),
10808
10823
  size: "sm",
10809
10824
  onClick: saveLocalEntry
@@ -10812,7 +10827,7 @@ const _sfc_main$p = /* @__PURE__ */ vue.defineComponent({
10812
10827
  ])
10813
10828
  ]),
10814
10829
  _: 1
10815
- }, 8, ["heading"])) : activeTab.value === "session" ? (vue.openBlock(), vue.createBlock(_sfc_main$H, {
10830
+ }, 8, ["heading"])) : activeTab.value === "session" ? (vue.openBlock(), vue.createBlock(_sfc_main$I, {
10816
10831
  key: 1,
10817
10832
  heading: vue.unref(t)("FdsDevModeStorage.tabs.sessionStorage"),
10818
10833
  icon: "information",
@@ -10866,12 +10881,12 @@ const _sfc_main$p = /* @__PURE__ */ vue.defineComponent({
10866
10881
  ])
10867
10882
  ]),
10868
10883
  sessionEditKey.value ? (vue.openBlock(), vue.createElementBlock("div", _hoisted_35, [
10869
- vue.createVNode(_sfc_main$A, {
10884
+ vue.createVNode(_sfc_main$B, {
10870
10885
  text: vue.unref(t)("FdsDevModeStorage.actions.delete"),
10871
10886
  size: "sm",
10872
10887
  onClick: deleteSessionEntry
10873
10888
  }, null, 8, ["text"]),
10874
- vue.createVNode(_sfc_main$B, {
10889
+ vue.createVNode(_sfc_main$C, {
10875
10890
  text: vue.unref(t)("FdsDevModeStorage.actions.save"),
10876
10891
  size: "sm",
10877
10892
  onClick: saveSessionEntry
@@ -10880,7 +10895,7 @@ const _sfc_main$p = /* @__PURE__ */ vue.defineComponent({
10880
10895
  ])
10881
10896
  ]),
10882
10897
  _: 1
10883
- }, 8, ["heading"])) : activeTab.value === "cookies" ? (vue.openBlock(), vue.createBlock(_sfc_main$H, {
10898
+ }, 8, ["heading"])) : activeTab.value === "cookies" ? (vue.openBlock(), vue.createBlock(_sfc_main$I, {
10884
10899
  key: 2,
10885
10900
  heading: vue.unref(t)("FdsDevModeStorage.tabs.cookies"),
10886
10901
  icon: "information",
@@ -10934,12 +10949,12 @@ const _sfc_main$p = /* @__PURE__ */ vue.defineComponent({
10934
10949
  ])
10935
10950
  ]),
10936
10951
  cookieEditKey.value ? (vue.openBlock(), vue.createElementBlock("div", _hoisted_52, [
10937
- vue.createVNode(_sfc_main$A, {
10952
+ vue.createVNode(_sfc_main$B, {
10938
10953
  text: vue.unref(t)("FdsDevModeStorage.actions.delete"),
10939
10954
  size: "sm",
10940
10955
  onClick: deleteCookieEntry
10941
10956
  }, null, 8, ["text"]),
10942
- vue.createVNode(_sfc_main$B, {
10957
+ vue.createVNode(_sfc_main$C, {
10943
10958
  text: vue.unref(t)("FdsDevModeStorage.actions.save"),
10944
10959
  size: "sm",
10945
10960
  onClick: saveCookieEntry
@@ -10948,7 +10963,7 @@ const _sfc_main$p = /* @__PURE__ */ vue.defineComponent({
10948
10963
  ])
10949
10964
  ]),
10950
10965
  _: 1
10951
- }, 8, ["heading"])) : activeTab.value === "actions" ? (vue.openBlock(), vue.createBlock(_sfc_main$H, {
10966
+ }, 8, ["heading"])) : activeTab.value === "actions" ? (vue.openBlock(), vue.createBlock(_sfc_main$I, {
10952
10967
  key: 3,
10953
10968
  heading: vue.unref(t)("FdsDevModeStorage.tabs.actions"),
10954
10969
  icon: "information",
@@ -10966,14 +10981,14 @@ const _sfc_main$p = /* @__PURE__ */ vue.defineComponent({
10966
10981
  vue.createElementVNode("div", _hoisted_57, vue.toDisplayString(action.label), 1),
10967
10982
  action.description ? (vue.openBlock(), vue.createElementBlock("div", _hoisted_58, vue.toDisplayString(action.description), 1)) : vue.createCommentVNode("", true)
10968
10983
  ]),
10969
- vue.createVNode(_sfc_main$A, {
10984
+ vue.createVNode(_sfc_main$B, {
10970
10985
  text: action.label,
10971
10986
  size: "sm",
10972
10987
  onClick: ($event) => runAction(index, action)
10973
10988
  }, null, 8, ["text", "onClick"])
10974
10989
  ]),
10975
10990
  action.input ? (vue.openBlock(), vue.createElementBlock("div", _hoisted_59, [
10976
- vue.createVNode(_sfc_main$s, {
10991
+ vue.createVNode(_sfc_main$t, {
10977
10992
  type: action.input.type ?? "text",
10978
10993
  modelValue: getActionInputValue(index, action.input.defaultValue),
10979
10994
  placeholder: action.input.placeholder,
@@ -10987,11 +11002,11 @@ const _sfc_main$p = /* @__PURE__ */ vue.defineComponent({
10987
11002
  _: 1
10988
11003
  }, 8, ["heading"])) : vue.createCommentVNode("", true),
10989
11004
  vue.createElementVNode("div", _hoisted_60, [
10990
- vue.createVNode(_sfc_main$A, {
11005
+ vue.createVNode(_sfc_main$B, {
10991
11006
  text: vue.unref(t)("FdsDevModeStorage.actions.refresh"),
10992
11007
  onClick: refreshStorageEntries
10993
11008
  }, null, 8, ["text"]),
10994
- vue.createVNode(_sfc_main$B, {
11009
+ vue.createVNode(_sfc_main$C, {
10995
11010
  text: vue.unref(t)("FdsDevModeStorage.actions.close"),
10996
11011
  onClick: _cache[10] || (_cache[10] = ($event) => handleOpenChange(false))
10997
11012
  }, null, 8, ["text"])
@@ -11003,11 +11018,11 @@ const _sfc_main$p = /* @__PURE__ */ vue.defineComponent({
11003
11018
  };
11004
11019
  }
11005
11020
  });
11006
- const _hoisted_1$i = { class: "relative px-2 py-1" };
11021
+ const _hoisted_1$j = { class: "relative px-2 py-1" };
11007
11022
  const _hoisted_2$d = { class: "flex flex-col sm:flex-row items-center gap-2 sm:gap-1" };
11008
11023
  const _hoisted_3$d = { class: "flex items-center gap-1" };
11009
11024
  const _hoisted_4$c = { class: "flex items-center gap-1" };
11010
- const _sfc_main$o = /* @__PURE__ */ vue.defineComponent({
11025
+ const _sfc_main$p = /* @__PURE__ */ vue.defineComponent({
11011
11026
  __name: "FdsDevMode",
11012
11027
  props: /* @__PURE__ */ vue.mergeModels({
11013
11028
  environment: { default: null },
@@ -11169,8 +11184,8 @@ const _sfc_main$o = /* @__PURE__ */ vue.defineComponent({
11169
11184
  onMousedown: _cache[1] || (_cache[1] = //@ts-ignore
11170
11185
  (...args) => vue.unref(onDragStart) && vue.unref(onDragStart)(...args))
11171
11186
  }, [
11172
- vue.createElementVNode("div", _hoisted_1$i, [
11173
- vue.unref(isDevMode) ? (vue.openBlock(), vue.createBlock(_sfc_main$v, {
11187
+ vue.createElementVNode("div", _hoisted_1$j, [
11188
+ vue.unref(isDevMode) ? (vue.openBlock(), vue.createBlock(_sfc_main$w, {
11174
11189
  key: 0,
11175
11190
  environment: __props.environment,
11176
11191
  toggles: overlayToggles.value,
@@ -11180,7 +11195,7 @@ const _sfc_main$o = /* @__PURE__ */ vue.defineComponent({
11180
11195
  }, null, 8, ["environment", "toggles"])) : vue.createCommentVNode("", true),
11181
11196
  vue.createElementVNode("div", _hoisted_2$d, [
11182
11197
  vue.createElementVNode("div", _hoisted_3$d, [
11183
- vue.createVNode(_sfc_main$z, { "popover-class": envBannerClasses.value }, null, 8, ["popover-class"]),
11198
+ vue.createVNode(_sfc_main$A, { "popover-class": envBannerClasses.value }, null, 8, ["popover-class"]),
11184
11199
  vue.createElementVNode("span", null, vue.toDisplayString(vue.unref(environmentText)), 1)
11185
11200
  ]),
11186
11201
  vue.createElementVNode("div", _hoisted_4$c, [
@@ -11189,13 +11204,13 @@ const _sfc_main$o = /* @__PURE__ */ vue.defineComponent({
11189
11204
  (...args) => vue.unref(toggleDevMode) && vue.unref(toggleDevMode)(...args)),
11190
11205
  class: "py-1 px-2 rounded text-xs font-bold bg-white bg-opacity-20 text-black hover:bg-opacity-30 min-w-[120px] cursor-pointer"
11191
11206
  }, vue.toDisplayString(devModeButtonText.value), 1),
11192
- vue.createVNode(_sfc_main$M, {
11207
+ vue.createVNode(_sfc_main$N, {
11193
11208
  icon: "settings",
11194
11209
  size: 24,
11195
11210
  class: vue.normalizeClass(envBannerFillColor.value),
11196
11211
  onClick: openStorageModal
11197
11212
  }, null, 8, ["class"]),
11198
- vue.createVNode(_sfc_main$M, {
11213
+ vue.createVNode(_sfc_main$N, {
11199
11214
  onClick: handleEnvBanner,
11200
11215
  icon: "cross",
11201
11216
  size: 24,
@@ -11205,7 +11220,7 @@ const _sfc_main$o = /* @__PURE__ */ vue.defineComponent({
11205
11220
  ])
11206
11221
  ])
11207
11222
  ], 38)) : vue.createCommentVNode("", true),
11208
- vue.createVNode(_sfc_main$p, {
11223
+ vue.createVNode(_sfc_main$q, {
11209
11224
  open: isStorageModalOpen.value,
11210
11225
  "onUpdate:open": _cache[2] || (_cache[2] = ($event) => isStorageModalOpen.value = $event),
11211
11226
  customActions: __props.customActions
@@ -11214,8 +11229,8 @@ const _sfc_main$o = /* @__PURE__ */ vue.defineComponent({
11214
11229
  };
11215
11230
  }
11216
11231
  });
11217
- const _hoisted_1$h = { class: "flex justify-between gap-6 w-full" };
11218
- const _sfc_main$n = /* @__PURE__ */ vue.defineComponent({
11232
+ const _hoisted_1$i = { class: "flex justify-between gap-6 w-full" };
11233
+ const _sfc_main$o = /* @__PURE__ */ vue.defineComponent({
11219
11234
  __name: "FdsExitModal",
11220
11235
  props: {
11221
11236
  showExitConfirmModal: {},
@@ -11230,7 +11245,7 @@ const _sfc_main$n = /* @__PURE__ */ vue.defineComponent({
11230
11245
  const props = __props;
11231
11246
  const isOpen = vue.computed(() => props.showExitConfirmModal.value);
11232
11247
  return (_ctx, _cache) => {
11233
- return vue.openBlock(), vue.createBlock(_sfc_main$u, {
11248
+ return vue.openBlock(), vue.createBlock(_sfc_main$v, {
11234
11249
  heading: props.heading,
11235
11250
  size: "sm",
11236
11251
  open: isOpen.value,
@@ -11238,13 +11253,13 @@ const _sfc_main$n = /* @__PURE__ */ vue.defineComponent({
11238
11253
  onClose: props.cancelExit
11239
11254
  }, {
11240
11255
  "modal-footer": vue.withCtx(() => [
11241
- vue.createElementVNode("div", _hoisted_1$h, [
11242
- vue.createVNode(_sfc_main$A, {
11256
+ vue.createElementVNode("div", _hoisted_1$i, [
11257
+ vue.createVNode(_sfc_main$B, {
11243
11258
  text: props.stayText,
11244
11259
  onClick: props.cancelExit,
11245
11260
  block: ""
11246
11261
  }, null, 8, ["text", "onClick"]),
11247
- vue.createVNode(_sfc_main$A, {
11262
+ vue.createVNode(_sfc_main$B, {
11248
11263
  text: props.leaveText,
11249
11264
  onClick: props.confirmExit,
11250
11265
  block: ""
@@ -11259,6 +11274,196 @@ const _sfc_main$n = /* @__PURE__ */ vue.defineComponent({
11259
11274
  };
11260
11275
  }
11261
11276
  });
11277
+ const _hoisted_1$h = { class: "flex items-center gap-2 min-w-0" };
11278
+ const _sfc_main$n = /* @__PURE__ */ vue.defineComponent({
11279
+ __name: "FdsDrawer",
11280
+ props: {
11281
+ open: { type: Boolean, default: false },
11282
+ heading: { default: "" },
11283
+ size: { default: "md" },
11284
+ strict: { type: Boolean, default: false },
11285
+ lockScroll: { type: Boolean, default: false },
11286
+ info: { default: void 0 },
11287
+ dataTestid: { default: void 0 },
11288
+ onClose: {}
11289
+ },
11290
+ emits: ["close", "update:open"],
11291
+ setup(__props, { emit: __emit }) {
11292
+ const props = __props;
11293
+ const emit = __emit;
11294
+ const isOpen = vue.ref(props.open);
11295
+ const drawerInnerRef = vue.ref(null);
11296
+ const previouslyFocusedElement = vue.ref(null);
11297
+ const { activate: activateFocusTrap, deactivate: deactivateFocusTrap } = useFocusTrap();
11298
+ const { t } = useFdsI18n();
11299
+ const drawerOuterClasses = vue.computed(() => ["fixed top-0 left-0 w-full h-full z-100"]);
11300
+ const drawerInnerClasses = vue.computed(() => [
11301
+ "bg-white shadow-lg z-[99999] overflow-hidden flex flex-col",
11302
+ // Mobile: bottom sheet
11303
+ "fixed bottom-0 left-0 right-0 max-h-[90vh] rounded-t-lg",
11304
+ // Desktop: right panel
11305
+ "md:top-0 md:right-0 md:bottom-auto md:left-auto md:h-full md:max-h-none md:rounded-none md:w-full",
11306
+ {
11307
+ "md:max-w-[320px]": props.size === "sm",
11308
+ "md:max-w-[400px]": props.size === "md",
11309
+ "md:max-w-[480px]": props.size === "lg",
11310
+ "md:max-w-[588px]": props.size === "xl"
11311
+ }
11312
+ ]);
11313
+ const headerClasses = vue.computed(() => ["shrink-0 flex justify-between bg-white p-6", "rounded-t-lg md:rounded-none"]);
11314
+ const contentClasses = vue.computed(() => ["flex-1 min-h-0 overflow-auto px-6 pb-6 mb-0-last-child"]);
11315
+ const headerTitleClasses = vue.computed(() => ["m-0"]);
11316
+ const iconName = vue.computed(() => {
11317
+ if (props.info === "valid") return "check";
11318
+ if (props.info === "invalid" || props.info === "warning") return "alert";
11319
+ return null;
11320
+ });
11321
+ const iconClasses = vue.computed(() => [
11322
+ {
11323
+ "fill-green-600": props.info === "valid",
11324
+ "fill-red-600": props.info === "invalid",
11325
+ "fill-yellow-600": props.info === "warning"
11326
+ }
11327
+ ]);
11328
+ const closeLabel = vue.computed(() => t("FdsDrawer.closeDrawer"));
11329
+ const setHtmlOverflow = (value) => {
11330
+ if (typeof document === "undefined") return;
11331
+ const htmlEl = document.documentElement;
11332
+ if (htmlEl) {
11333
+ htmlEl.style.overflow = value;
11334
+ }
11335
+ };
11336
+ const handleBackdropClick = () => {
11337
+ handleClose();
11338
+ };
11339
+ const restoreFocus = () => {
11340
+ if (previouslyFocusedElement.value) {
11341
+ previouslyFocusedElement.value.focus();
11342
+ previouslyFocusedElement.value = null;
11343
+ }
11344
+ };
11345
+ const handleClose = () => {
11346
+ if (props.strict) {
11347
+ return;
11348
+ }
11349
+ isOpen.value = false;
11350
+ setHtmlOverflow("auto");
11351
+ emit("close");
11352
+ emit("update:open", false);
11353
+ };
11354
+ const handleKeyDown = (e) => {
11355
+ if (isOpen.value && e.code === "Escape") {
11356
+ handleClose();
11357
+ }
11358
+ };
11359
+ vue.watch(
11360
+ () => props.open,
11361
+ (newValue) => {
11362
+ isOpen.value = newValue;
11363
+ if (newValue) {
11364
+ previouslyFocusedElement.value = document.activeElement;
11365
+ if (props.lockScroll) {
11366
+ setHtmlOverflow("hidden");
11367
+ }
11368
+ activateFocusTrap(() => drawerInnerRef.value);
11369
+ } else {
11370
+ setHtmlOverflow("auto");
11371
+ deactivateFocusTrap();
11372
+ }
11373
+ }
11374
+ );
11375
+ vue.onMounted(() => {
11376
+ document.addEventListener("keydown", handleKeyDown, true);
11377
+ if (props.open) {
11378
+ previouslyFocusedElement.value = document.activeElement;
11379
+ if (props.lockScroll) {
11380
+ setHtmlOverflow("hidden");
11381
+ }
11382
+ activateFocusTrap(() => drawerInnerRef.value);
11383
+ }
11384
+ });
11385
+ vue.onBeforeUnmount(() => {
11386
+ document.removeEventListener("keydown", handleKeyDown, true);
11387
+ setHtmlOverflow("auto");
11388
+ deactivateFocusTrap();
11389
+ });
11390
+ const drawerAttrs = vue.computed(() => {
11391
+ const attrs = {};
11392
+ if (props.dataTestid) {
11393
+ attrs["data-testid"] = props.dataTestid;
11394
+ }
11395
+ return attrs;
11396
+ });
11397
+ return (_ctx, _cache) => {
11398
+ return vue.openBlock(), vue.createBlock(vue.Teleport, { to: "body" }, [
11399
+ vue.createVNode(vue.Transition, {
11400
+ name: "fds-drawer",
11401
+ duration: { enter: 280, leave: 180 },
11402
+ onAfterLeave: restoreFocus
11403
+ }, {
11404
+ default: vue.withCtx(() => [
11405
+ isOpen.value ? (vue.openBlock(), vue.createElementBlock("div", {
11406
+ key: 0,
11407
+ onClick: handleBackdropClick,
11408
+ class: vue.normalizeClass(drawerOuterClasses.value)
11409
+ }, [
11410
+ _cache[2] || (_cache[2] = vue.createElementVNode("div", { class: "fds-drawer-backdrop fixed top-0 left-0 w-full h-full bg-black/34 z-99" }, null, -1)),
11411
+ vue.createElementVNode("div", vue.mergeProps({
11412
+ ref_key: "drawerInnerRef",
11413
+ ref: drawerInnerRef,
11414
+ class: ["fds-drawer-inner", drawerInnerClasses.value],
11415
+ role: "dialog",
11416
+ "aria-modal": "true"
11417
+ }, drawerAttrs.value, {
11418
+ onClick: _cache[1] || (_cache[1] = vue.withModifiers(() => {
11419
+ }, ["stop"]))
11420
+ }), [
11421
+ vue.createElementVNode("div", {
11422
+ class: vue.normalizeClass(headerClasses.value)
11423
+ }, [
11424
+ vue.createElementVNode("div", _hoisted_1$h, [
11425
+ iconName.value ? (vue.openBlock(), vue.createBlock(_sfc_main$O, {
11426
+ key: 0,
11427
+ name: iconName.value,
11428
+ size: 24,
11429
+ class: vue.normalizeClass(iconClasses.value)
11430
+ }, null, 8, ["name", "class"])) : vue.createCommentVNode("", true),
11431
+ vue.createElementVNode("h3", {
11432
+ tabindex: "-1",
11433
+ class: vue.normalizeClass(headerTitleClasses.value)
11434
+ }, vue.toDisplayString(__props.heading), 3)
11435
+ ]),
11436
+ vue.createElementVNode("div", null, [
11437
+ !__props.strict ? (vue.openBlock(), vue.createBlock(_sfc_main$N, vue.mergeProps({
11438
+ key: 0,
11439
+ icon: "cross",
11440
+ size: 28,
11441
+ onClick: _cache[0] || (_cache[0] = ($event) => handleClose())
11442
+ }, { "aria-label": closeLabel.value }, { class: "ml-4 shrink-0" }), null, 16)) : vue.createCommentVNode("", true)
11443
+ ])
11444
+ ], 2),
11445
+ vue.createElementVNode("div", {
11446
+ class: vue.normalizeClass(contentClasses.value)
11447
+ }, [
11448
+ vue.renderSlot(_ctx.$slots, "default", {}, void 0, true)
11449
+ ], 2)
11450
+ ], 16)
11451
+ ], 2)) : vue.createCommentVNode("", true)
11452
+ ]),
11453
+ _: 3
11454
+ })
11455
+ ]);
11456
+ };
11457
+ }
11458
+ });
11459
+ const _export_sfc = (sfc, props) => {
11460
+ const target = sfc.__vccOpts || sfc;
11461
+ for (const [key, val] of props) {
11462
+ target[key] = val;
11463
+ }
11464
+ return target;
11465
+ };
11466
+ const FdsDrawer = /* @__PURE__ */ _export_sfc(_sfc_main$n, [["__scopeId", "data-v-afc45d1a"]]);
11262
11467
  function debounce(fn, delayMs) {
11263
11468
  let timeoutId;
11264
11469
  const debounced = (...args) => {
@@ -11374,11 +11579,11 @@ const _sfc_main$m = /* @__PURE__ */ vue.defineComponent({
11374
11579
  id: inputId.value
11375
11580
  }, rootAttrs.value), [
11376
11581
  vue.createElementVNode("div", _hoisted_2$c, [
11377
- __props.loading && loadingIndicator.value === "start" ? (vue.openBlock(), vue.createBlock(_sfc_main$F, {
11582
+ __props.loading && loadingIndicator.value === "start" ? (vue.openBlock(), vue.createBlock(_sfc_main$G, {
11378
11583
  key: 0,
11379
11584
  size: "32px",
11380
11585
  color: "blue"
11381
- })) : (vue.openBlock(), vue.createBlock(_sfc_main$M, vue.mergeProps({ key: 1 }, { "aria-disabled": __props.current === 1 }, {
11586
+ })) : (vue.openBlock(), vue.createBlock(_sfc_main$N, vue.mergeProps({ key: 1 }, { "aria-disabled": __props.current === 1 }, {
11382
11587
  type: "button",
11383
11588
  "aria-label": firstPageLabel.value,
11384
11589
  icon: "first",
@@ -11387,11 +11592,11 @@ const _sfc_main$m = /* @__PURE__ */ vue.defineComponent({
11387
11592
  class: [{ "hidden!": __props.current === 1 }, "w-8 h-8 sm:w-12 sm:h-12"],
11388
11593
  onClick: _cache[0] || (_cache[0] = ($event) => handlePagination("start"))
11389
11594
  }), null, 16, ["aria-label", "disabled", "class"])),
11390
- __props.loading && loadingIndicator.value === "prev" ? (vue.openBlock(), vue.createBlock(_sfc_main$F, {
11595
+ __props.loading && loadingIndicator.value === "prev" ? (vue.openBlock(), vue.createBlock(_sfc_main$G, {
11391
11596
  key: 2,
11392
11597
  size: "24px",
11393
11598
  color: "blue"
11394
- })) : (vue.openBlock(), vue.createBlock(_sfc_main$M, vue.mergeProps({ key: 3 }, { "aria-disabled": __props.current === 1 }, {
11599
+ })) : (vue.openBlock(), vue.createBlock(_sfc_main$N, vue.mergeProps({ key: 3 }, { "aria-disabled": __props.current === 1 }, {
11395
11600
  type: "button",
11396
11601
  "aria-label": prevPageLabel.value,
11397
11602
  icon: "arrowLeft",
@@ -11402,14 +11607,14 @@ const _sfc_main$m = /* @__PURE__ */ vue.defineComponent({
11402
11607
  }), null, 16, ["aria-label", "disabled", "class"]))
11403
11608
  ]),
11404
11609
  vue.createElementVNode("div", _hoisted_3$c, [
11405
- __props.loading && loadingIndicator.value === "input" ? (vue.openBlock(), vue.createBlock(_sfc_main$F, {
11610
+ __props.loading && loadingIndicator.value === "input" ? (vue.openBlock(), vue.createBlock(_sfc_main$G, {
11406
11611
  key: 0,
11407
11612
  size: "24px",
11408
11613
  color: "blue",
11409
11614
  label: loadingLabel.value,
11410
11615
  "label-position": "right"
11411
11616
  }, null, 8, ["label"])) : (vue.openBlock(), vue.createElementBlock(vue.Fragment, { key: 1 }, [
11412
- vue.createVNode(_sfc_main$s, {
11617
+ vue.createVNode(_sfc_main$t, {
11413
11618
  style: { "text-align": "center" },
11414
11619
  value: inputValue.value,
11415
11620
  type: "text",
@@ -11423,11 +11628,11 @@ const _sfc_main$m = /* @__PURE__ */ vue.defineComponent({
11423
11628
  ], 64))
11424
11629
  ]),
11425
11630
  vue.createElementVNode("div", _hoisted_5$b, [
11426
- __props.loading && loadingIndicator.value === "next" ? (vue.openBlock(), vue.createBlock(_sfc_main$F, {
11631
+ __props.loading && loadingIndicator.value === "next" ? (vue.openBlock(), vue.createBlock(_sfc_main$G, {
11427
11632
  key: 0,
11428
11633
  size: "24px",
11429
11634
  color: "blue"
11430
- })) : (vue.openBlock(), vue.createBlock(_sfc_main$M, vue.mergeProps({
11635
+ })) : (vue.openBlock(), vue.createBlock(_sfc_main$N, vue.mergeProps({
11431
11636
  key: 1,
11432
11637
  type: "button",
11433
11638
  "aria-label": nextPageLabel.value,
@@ -11438,11 +11643,11 @@ const _sfc_main$m = /* @__PURE__ */ vue.defineComponent({
11438
11643
  class: [{ "hidden!": __props.current === __props.max }, "w-8 h-8 sm:w-12 sm:h-12"],
11439
11644
  onClick: _cache[2] || (_cache[2] = ($event) => handlePagination("next"))
11440
11645
  }), null, 16, ["aria-label", "disabled", "class"])),
11441
- __props.loading && loadingIndicator.value === "end" ? (vue.openBlock(), vue.createBlock(_sfc_main$F, {
11646
+ __props.loading && loadingIndicator.value === "end" ? (vue.openBlock(), vue.createBlock(_sfc_main$G, {
11442
11647
  key: 2,
11443
11648
  size: "24px",
11444
11649
  color: "blue"
11445
- })) : (vue.openBlock(), vue.createBlock(_sfc_main$M, vue.mergeProps({
11650
+ })) : (vue.openBlock(), vue.createBlock(_sfc_main$N, vue.mergeProps({
11446
11651
  key: 3,
11447
11652
  type: "button",
11448
11653
  "aria-label": lastPageLabel.value,
@@ -11604,13 +11809,13 @@ const _sfc_main$l = /* @__PURE__ */ vue.defineComponent({
11604
11809
  }, { ...popoverAttrs.value, popover: "auto" }), [
11605
11810
  __props.label ? (vue.openBlock(), vue.createElementBlock(vue.Fragment, { key: 0 }, [
11606
11811
  vue.createElementVNode("div", _hoisted_4$a, [
11607
- vue.createVNode(_sfc_main$w, { class: "mb-0! min-w-0 grow balance-text whitespace-normal" }, {
11812
+ vue.createVNode(_sfc_main$x, { class: "mb-0! min-w-0 grow balance-text whitespace-normal" }, {
11608
11813
  default: vue.withCtx(() => [
11609
11814
  vue.createTextVNode(vue.toDisplayString(__props.label), 1)
11610
11815
  ]),
11611
11816
  _: 1
11612
11817
  }),
11613
- vue.createVNode(_sfc_main$M, {
11818
+ vue.createVNode(_sfc_main$N, {
11614
11819
  icon: "cross",
11615
11820
  size: 28,
11616
11821
  "aria-label": __props.closeAriaLabel,
@@ -11628,7 +11833,7 @@ const _sfc_main$l = /* @__PURE__ */ vue.defineComponent({
11628
11833
  vue.createTextVNode(vue.toDisplayString(__props.body), 1)
11629
11834
  ])
11630
11835
  ]),
11631
- vue.createVNode(_sfc_main$M, {
11836
+ vue.createVNode(_sfc_main$N, {
11632
11837
  icon: "cross",
11633
11838
  size: 28,
11634
11839
  "aria-label": __props.closeAriaLabel,
@@ -12126,7 +12331,7 @@ const _sfc_main$k = /* @__PURE__ */ vue.defineComponent({
12126
12331
  vue.createElementVNode("div", _hoisted_1$e, [
12127
12332
  !singleItemName.value.length ? (vue.openBlock(), vue.createElementBlock("div", _hoisted_2$a, [
12128
12333
  vue.createElementVNode("div", _hoisted_3$a, [
12129
- vue.createVNode(_sfc_main$s, vue.mergeProps({
12334
+ vue.createVNode(_sfc_main$t, vue.mergeProps({
12130
12335
  ref_key: "inputComponentRef",
12131
12336
  ref: inputComponentRef,
12132
12337
  label: __props.label,
@@ -12160,7 +12365,7 @@ const _sfc_main$k = /* @__PURE__ */ vue.defineComponent({
12160
12365
  style: vue.normalizeStyle(listWrapperStyle.value)
12161
12366
  }, [
12162
12367
  __props.loading ? (vue.openBlock(), vue.createElementBlock("div", _hoisted_6$6, [
12163
- vue.createVNode(_sfc_main$F, {
12368
+ vue.createVNode(_sfc_main$G, {
12164
12369
  color: "blue",
12165
12370
  size: "48px"
12166
12371
  })
@@ -13235,7 +13440,7 @@ const _sfc_main$j = /* @__PURE__ */ vue.defineComponent({
13235
13440
  vue.createElementVNode("div", _hoisted_1$d, [
13236
13441
  vue.createElementVNode("div", _hoisted_2$9, [
13237
13442
  vue.createElementVNode("div", _hoisted_3$9, [
13238
- vue.createVNode(_sfc_main$s, vue.mergeProps({
13443
+ vue.createVNode(_sfc_main$t, vue.mergeProps({
13239
13444
  ref_key: "inputComponentRef",
13240
13445
  ref: inputComponentRef,
13241
13446
  label: __props.label,
@@ -13271,19 +13476,19 @@ const _sfc_main$j = /* @__PURE__ */ vue.defineComponent({
13271
13476
  class: vue.normalizeClass([headerClasses.value, "flex items-center justify-between gap-3 min-h-[53px]"])
13272
13477
  }, [
13273
13478
  vue.createElementVNode("div", _hoisted_4$8, [
13274
- vue.createVNode(_sfc_main$t, null, {
13479
+ vue.createVNode(_sfc_main$u, null, {
13275
13480
  default: vue.withCtx(() => [
13276
13481
  vue.createTextVNode(vue.toDisplayString(searchTerm.value && searchTerm.value.length ? `${totalMatchingItems.value} ${__props.searchContext.linkWord} ${totalCount.value} ${__props.searchContext.context}` : `${totalCount.value} ${__props.searchContext.context}`), 1)
13277
13482
  ]),
13278
13483
  _: 1
13279
13484
  }),
13280
- isSearching.value ? (vue.openBlock(), vue.createBlock(_sfc_main$F, {
13485
+ isSearching.value ? (vue.openBlock(), vue.createBlock(_sfc_main$G, {
13281
13486
  key: 0,
13282
13487
  color: "blue",
13283
13488
  size: "20px"
13284
13489
  })) : vue.createCommentVNode("", true)
13285
13490
  ]),
13286
- __props.multiple && __props.showSelectedToggle && selectedItems.value.length > 0 ? (vue.openBlock(), vue.createBlock(_sfc_main$y, {
13491
+ __props.multiple && __props.showSelectedToggle && selectedItems.value.length > 0 ? (vue.openBlock(), vue.createBlock(_sfc_main$z, {
13287
13492
  key: 0,
13288
13493
  label: `${__props.selectedToggleLabel} (${selectedItems.value.length})`,
13289
13494
  checked: showSelectedOnly.value,
@@ -13318,7 +13523,7 @@ const _sfc_main$j = /* @__PURE__ */ vue.defineComponent({
13318
13523
  class: vue.normalizeClass([labelClasses.value, listItemClasses.value]),
13319
13524
  style: vue.normalizeStyle(vue.unref(optionPaddingStyle)(item))
13320
13525
  }, [
13321
- __props.multiple ? (vue.openBlock(), vue.createBlock(_sfc_main$y, {
13526
+ __props.multiple ? (vue.openBlock(), vue.createBlock(_sfc_main$z, {
13322
13527
  key: 0,
13323
13528
  id: `search-select-radio-${index}`,
13324
13529
  name: `search-select-checkbox-group-${inputId}`,
@@ -13335,7 +13540,7 @@ const _sfc_main$j = /* @__PURE__ */ vue.defineComponent({
13335
13540
  }, null, 8, _hoisted_8$3)
13336
13541
  ]),
13337
13542
  _: 2
13338
- }, 1032, ["id", "name", "checked", "onChange"])) : (vue.openBlock(), vue.createBlock(_sfc_main$x, {
13543
+ }, 1032, ["id", "name", "checked", "onChange"])) : (vue.openBlock(), vue.createBlock(_sfc_main$y, {
13339
13544
  key: 1,
13340
13545
  id: `search-select-radio-${index}`,
13341
13546
  name: "search-select-radio-group",
@@ -13370,7 +13575,7 @@ const _sfc_main$j = /* @__PURE__ */ vue.defineComponent({
13370
13575
  _cache[2] || (_cache[2] = vue.withKeys(vue.withModifiers(($event) => !__props.loadingMore && handleLoadMore(), ["prevent"]), ["space"]))
13371
13576
  ]
13372
13577
  }, [
13373
- vue.createVNode(_sfc_main$M, {
13578
+ vue.createVNode(_sfc_main$N, {
13374
13579
  icon: "sync",
13375
13580
  loading: __props.loadingMore,
13376
13581
  "aria-label": __props.loadingMore ? resolvedLoadingMoreLabel.value : resolvedLoadMoreLabel.value,
@@ -13384,7 +13589,7 @@ const _sfc_main$j = /* @__PURE__ */ vue.defineComponent({
13384
13589
  ], 64)) : (vue.openBlock(), vue.createElementBlock("ul", _hoisted_12, [
13385
13590
  vue.createElementVNode("li", _hoisted_13, [
13386
13591
  !isSearching.value ? (vue.openBlock(), vue.createElementBlock("span", _hoisted_14, vue.toDisplayString(__props.noResultPrompt), 1)) : vue.createCommentVNode("", true),
13387
- isSearching.value ? (vue.openBlock(), vue.createBlock(_sfc_main$F, {
13592
+ isSearching.value ? (vue.openBlock(), vue.createBlock(_sfc_main$G, {
13388
13593
  key: 1,
13389
13594
  color: "blue",
13390
13595
  size: "20px"
@@ -14130,7 +14335,7 @@ const _sfc_main$i = /* @__PURE__ */ vue.defineComponent({
14130
14335
  class: vue.normalizeClass("pt-2 pb-2")
14131
14336
  }, [
14132
14337
  vue.createElementVNode("div", _hoisted_1$c, [
14133
- hasChildrenNodes.value ? (vue.openBlock(), vue.createBlock(_sfc_main$M, vue.mergeProps({
14338
+ hasChildrenNodes.value ? (vue.openBlock(), vue.createBlock(_sfc_main$N, vue.mergeProps({
14134
14339
  key: 0,
14135
14340
  onClick: _cache[0] || (_cache[0] = ($event) => vue.unref(treeState)?.toggleExpandNode(props.nodeId))
14136
14341
  }, { "aria-label": props.title ? childrenToggleAriaLabel(props.title) : void 0 }, {
@@ -14143,7 +14348,7 @@ const _sfc_main$i = /* @__PURE__ */ vue.defineComponent({
14143
14348
  style: vue.normalizeStyle({ minWidth: `${__props.indentation}px` })
14144
14349
  }, null, 4)) : vue.createCommentVNode("", true),
14145
14350
  vue.createElementVNode("div", _hoisted_2$8, [
14146
- vue.createVNode(_sfc_main$y, {
14351
+ vue.createVNode(_sfc_main$z, {
14147
14352
  id: `checkbox-${props.nodeId}`,
14148
14353
  checked: nodeIsSelected.value,
14149
14354
  indeterminate: nodeIsIndeterminate.value,
@@ -14162,7 +14367,7 @@ const _sfc_main$i = /* @__PURE__ */ vue.defineComponent({
14162
14367
  }, 8, ["id", "checked", "indeterminate"])
14163
14368
  ]),
14164
14369
  shouldShowPopoverActions.value ? (vue.openBlock(), vue.createElementBlock("div", _hoisted_6$4, [
14165
- vue.createVNode(_sfc_main$M, vue.mergeProps({
14370
+ vue.createVNode(_sfc_main$N, vue.mergeProps({
14166
14371
  ref_key: "triggerRef",
14167
14372
  ref: triggerRef,
14168
14373
  icon: "more",
@@ -14210,7 +14415,7 @@ const _sfc_main$i = /* @__PURE__ */ vue.defineComponent({
14210
14415
  },
14211
14416
  class: "cursor-pointer"
14212
14417
  }, [
14213
- vue.createVNode(_sfc_main$x, {
14418
+ vue.createVNode(_sfc_main$y, {
14214
14419
  modelValue: selectedOption.value,
14215
14420
  "onUpdate:modelValue": _cache[2] || (_cache[2] = ($event) => selectedOption.value = $event),
14216
14421
  id: `tree-popover-${props.nodeId}-${option.value}`,
@@ -14222,7 +14427,7 @@ const _sfc_main$i = /* @__PURE__ */ vue.defineComponent({
14222
14427
  ], 8, _hoisted_8$2);
14223
14428
  }), 64))
14224
14429
  ]),
14225
- vue.createVNode(_sfc_main$M, vue.mergeProps({
14430
+ vue.createVNode(_sfc_main$N, vue.mergeProps({
14226
14431
  icon: "cross",
14227
14432
  id: "tree-popover-close-button",
14228
14433
  size: 24,
@@ -14372,7 +14577,7 @@ const _sfc_main$h = /* @__PURE__ */ vue.defineComponent({
14372
14577
  ref: searchContainerRef,
14373
14578
  class: "pb-4"
14374
14579
  }, [
14375
- vue.createVNode(_sfc_main$s, {
14580
+ vue.createVNode(_sfc_main$t, {
14376
14581
  value: vue.unref(treeState)?.searchTerm?.value ?? "",
14377
14582
  onInput: _cache[0] || (_cache[0] = ($event) => vue.unref(treeState)?.setSearchTerm($event.target.value)),
14378
14583
  class: "w-full",
@@ -14389,7 +14594,7 @@ const _sfc_main$h = /* @__PURE__ */ vue.defineComponent({
14389
14594
  props.searchCountTemplate && vue.unref(treeState)?.searchTerm?.value && String(vue.unref(treeState)?.searchTerm?.value || "").trim().length >= (vue.unref(treeState)?.triggerLength ?? 1) ? (vue.openBlock(), vue.createElementBlock("h2", _hoisted_2$7, vue.toDisplayString(props.searchCountTemplate.replace("[[filteredNodes]]", vue.unref(treeState)?.filteredMatchCount.value.toString()).replace("[[totalNodes]]", totalNodeCount.value.toString())), 1)) : (vue.openBlock(), vue.createElementBlock("h2", _hoisted_3$7, vue.toDisplayString(props.searchCountTemplateUnfiltered?.replace("[[totalNodes]]", totalNodeCount.value.toString()).replace("[[totalNodes]]", totalNodeCount.value.toString())), 1))
14390
14595
  ])) : vue.createCommentVNode("", true)
14391
14596
  ], 512)) : vue.createCommentVNode("", true),
14392
- vue.unref(treeState)?.isEmptySearchResult?.value ? (vue.openBlock(), vue.createBlock(_sfc_main$K, {
14597
+ vue.unref(treeState)?.isEmptySearchResult?.value ? (vue.openBlock(), vue.createBlock(_sfc_main$L, {
14393
14598
  key: 1,
14394
14599
  class: "mt-4"
14395
14600
  }, {
@@ -14397,7 +14602,7 @@ const _sfc_main$h = /* @__PURE__ */ vue.defineComponent({
14397
14602
  vue.createTextVNode(vue.toDisplayString(props.searchResultNoMatchesTitle), 1)
14398
14603
  ]),
14399
14604
  default: vue.withCtx(() => [
14400
- vue.createVNode(_sfc_main$t, null, {
14605
+ vue.createVNode(_sfc_main$u, null, {
14401
14606
  default: vue.withCtx(() => [
14402
14607
  vue.createTextVNode(vue.toDisplayString(props.searchResultNoMatchesBody), 1)
14403
14608
  ]),
@@ -14489,7 +14694,7 @@ const _sfc_main$g = /* @__PURE__ */ vue.defineComponent({
14489
14694
  return vue.openBlock(), vue.createElementBlock("div", vue.mergeProps({ class: "block mb-4" }, rootAttrs.value), [
14490
14695
  hasContent.value ? (vue.openBlock(), vue.createElementBlock(vue.Fragment, { key: 0 }, [
14491
14696
  vue.createElementVNode("span", null, vue.toDisplayString(truncatedText.value), 1),
14492
- isTruncated.value ? (vue.openBlock(), vue.createBlock(_sfc_main$E, {
14697
+ isTruncated.value ? (vue.openBlock(), vue.createBlock(_sfc_main$F, {
14493
14698
  key: 0,
14494
14699
  icon: isOpen.value ? "arrowUp" : "arrowDown",
14495
14700
  iconPos: "right",
@@ -16144,12 +16349,12 @@ const _sfc_main$f = /* @__PURE__ */ vue.defineComponent({
16144
16349
  vue.createElementVNode("span", {
16145
16350
  class: vue.normalizeClass(weekdayLabelClasses.value)
16146
16351
  }, [
16147
- __props.isToday ? (vue.openBlock(), vue.createBlock(_sfc_main$t, { key: 0 }, {
16352
+ __props.isToday ? (vue.openBlock(), vue.createBlock(_sfc_main$u, { key: 0 }, {
16148
16353
  default: vue.withCtx(() => [
16149
16354
  vue.createTextVNode(vue.toDisplayString(vue.unref(t)("FdsWeekCalendar.today")), 1)
16150
16355
  ]),
16151
16356
  _: 1
16152
- })) : (vue.openBlock(), vue.createBlock(_sfc_main$t, { key: 1 }, {
16357
+ })) : (vue.openBlock(), vue.createBlock(_sfc_main$u, { key: 1 }, {
16153
16358
  default: vue.withCtx(() => [
16154
16359
  vue.createTextVNode(vue.toDisplayString(weekdayLabel.value), 1)
16155
16360
  ]),
@@ -16309,13 +16514,13 @@ const _sfc_main$e = /* @__PURE__ */ vue.defineComponent({
16309
16514
  vue.createElementVNode("div", _hoisted_3$6, [
16310
16515
  vue.createElementVNode("p", _hoisted_4$6, vue.toDisplayString(weekText.value), 1),
16311
16516
  vue.createElementVNode("div", _hoisted_5$6, [
16312
- vue.createVNode(_sfc_main$M, {
16517
+ vue.createVNode(_sfc_main$N, {
16313
16518
  icon: "arrowLeft",
16314
16519
  disabled: disableLastWeekInteraction.value,
16315
16520
  "aria-label": vue.unref(t)("FdsWeekCalendar.previousWeek"),
16316
16521
  onClick: decrementWeek
16317
16522
  }, null, 8, ["disabled", "aria-label"]),
16318
- vue.createVNode(_sfc_main$M, {
16523
+ vue.createVNode(_sfc_main$N, {
16319
16524
  icon: "arrowRight",
16320
16525
  disabled: disableNextWeekInteraction.value,
16321
16526
  "aria-label": vue.unref(t)("FdsWeekCalendar.nextWeek"),
@@ -16351,7 +16556,7 @@ const _sfc_main$e = /* @__PURE__ */ vue.defineComponent({
16351
16556
  }, 8, ["enter-active-class", "leave-active-class", "enter-from-class", "leave-to-class"])
16352
16557
  ]),
16353
16558
  __props.loading?.loading ? (vue.openBlock(), vue.createElementBlock("div", _hoisted_7$3, [
16354
- vue.createVNode(_sfc_main$F),
16559
+ vue.createVNode(_sfc_main$G),
16355
16560
  vue.createElementVNode("p", _hoisted_8$1, vue.toDisplayString(__props.loading.label), 1)
16356
16561
  ])) : vue.createCommentVNode("", true)
16357
16562
  ])
@@ -16832,7 +17037,7 @@ const _sfc_main$c = /* @__PURE__ */ vue.defineComponent({
16832
17037
  vue.createElementVNode("span", {
16833
17038
  class: vue.normalizeClass(["relative mb-6 flex flex-col items-center text-blue-600 font-bold justify-center transition-all duration-200 ease-in-out rounded-full w-[44px] h-[44px] bg-white-solid", setStepClasses(entry.index)])
16834
17039
  }, [
16835
- entry.index >= internalCompletedTo.value + 1 ? (vue.openBlock(), vue.createElementBlock("span", _hoisted_7$2, vue.toDisplayString(entry.index + 1), 1)) : (vue.openBlock(), vue.createBlock(_sfc_main$N, {
17040
+ entry.index >= internalCompletedTo.value + 1 ? (vue.openBlock(), vue.createElementBlock("span", _hoisted_7$2, vue.toDisplayString(entry.index + 1), 1)) : (vue.openBlock(), vue.createBlock(_sfc_main$O, {
16836
17041
  key: 1,
16837
17042
  name: "checkmark",
16838
17043
  size: 24
@@ -19020,7 +19225,7 @@ const _sfc_main$b = /* @__PURE__ */ vue.defineComponent({
19020
19225
  "aria-hidden": "true",
19021
19226
  onMousedown: vue.withModifiers(onArrowPointerDown, ["prevent"])
19022
19227
  }, [
19023
- vue.createVNode(_sfc_main$N, {
19228
+ vue.createVNode(_sfc_main$O, {
19024
19229
  name: "arrowDown",
19025
19230
  size: 24,
19026
19231
  class: vue.normalizeClass(arrowClasses.value)
@@ -19062,7 +19267,7 @@ const _sfc_main$b = /* @__PURE__ */ vue.defineComponent({
19062
19267
  vue.createElementVNode("span", _hoisted_10, "(" + vue.toDisplayString(vue.unref(t)("common.plus")) + vue.toDisplayString(option.countryCode) + ")", 1)
19063
19268
  ]),
19064
19269
  vue.createElementVNode("span", _hoisted_11, [
19065
- option.value === country.value ? (vue.openBlock(), vue.createBlock(_sfc_main$N, {
19270
+ option.value === country.value ? (vue.openBlock(), vue.createBlock(_sfc_main$O, {
19066
19271
  key: 0,
19067
19272
  name: "check",
19068
19273
  size: 24,
@@ -19299,7 +19504,7 @@ const _sfc_main$a = /* @__PURE__ */ vue.defineComponent({
19299
19504
  class: vue.normalizeClass(["mb-0! shrink-0", __props.selectClass ?? ""]),
19300
19505
  onNoCountryResults
19301
19506
  }, null, 8, ["modelValue", "items", "valid", "disabled", "ariaLabel", "data-testid", "class"]),
19302
- vue.createVNode(_sfc_main$s, vue.mergeProps({
19507
+ vue.createVNode(_sfc_main$t, vue.mergeProps({
19303
19508
  "model-value": vue.unref(nationalNumber),
19304
19509
  "onUpdate:modelValue": _cache[1] || (_cache[1] = ($event) => nationalNumber.value = $event ?? ""),
19305
19510
  mask: phoneMask.value,
@@ -19767,7 +19972,7 @@ const _sfc_main$9 = /* @__PURE__ */ vue.defineComponent({
19767
19972
  }
19768
19973
  return (_ctx, _cache) => {
19769
19974
  return vue.openBlock(), vue.createElementBlock("div", _hoisted_1$4, [
19770
- vue.createVNode(_sfc_main$s, vue.mergeProps({
19975
+ vue.createVNode(_sfc_main$t, vue.mergeProps({
19771
19976
  "model-value": modelValue.value,
19772
19977
  "onUpdate:modelValue": _cache[0] || (_cache[0] = ($event) => modelValue.value = $event ?? ""),
19773
19978
  mask: ssnMask.value,
@@ -19914,7 +20119,7 @@ const _sfc_main$8 = /* @__PURE__ */ vue.defineComponent({
19914
20119
  [vue.vModelSelect, internalValue.value]
19915
20120
  ]),
19916
20121
  vue.createElementVNode("div", _hoisted_6, [
19917
- vue.createVNode(_sfc_main$N, {
20122
+ vue.createVNode(_sfc_main$O, {
19918
20123
  name: "arrowDown",
19919
20124
  size: 24,
19920
20125
  class: vue.normalizeClass({
@@ -20081,12 +20286,12 @@ const _sfc_main$7 = /* @__PURE__ */ vue.defineComponent({
20081
20286
  vue.createElementVNode("div", {
20082
20287
  class: vue.normalizeClass(validationIconClasses.value)
20083
20288
  }, [
20084
- isInvalid.value ? (vue.openBlock(), vue.createBlock(_sfc_main$N, {
20289
+ isInvalid.value ? (vue.openBlock(), vue.createBlock(_sfc_main$O, {
20085
20290
  key: 0,
20086
20291
  name: "alert",
20087
20292
  class: "fill-red-600"
20088
20293
  })) : vue.createCommentVNode("", true),
20089
- isValid2.value ? (vue.openBlock(), vue.createBlock(_sfc_main$N, {
20294
+ isValid2.value ? (vue.openBlock(), vue.createBlock(_sfc_main$O, {
20090
20295
  key: 1,
20091
20296
  name: "bigSuccess"
20092
20297
  })) : vue.createCommentVNode("", true)
@@ -20177,7 +20382,7 @@ const _sfc_main$5 = /* @__PURE__ */ vue.defineComponent({
20177
20382
  vue.unref(hasSlot) ? (vue.openBlock(), vue.createElementBlock("span", _hoisted_2, [
20178
20383
  vue.renderSlot(_ctx.$slots, "default")
20179
20384
  ])) : (vue.openBlock(), vue.createElementBlock("span", _hoisted_3, vue.toDisplayString(__props.heading), 1)),
20180
- vue.createVNode(_sfc_main$N, {
20385
+ vue.createVNode(_sfc_main$O, {
20181
20386
  name: iconName.value,
20182
20387
  size: "24px",
20183
20388
  class: "fill-blue-500 ml-1"
@@ -20409,7 +20614,7 @@ const _sfc_main = /* @__PURE__ */ vue.defineComponent({
20409
20614
  });
20410
20615
  return (_ctx, _cache) => {
20411
20616
  return vue.openBlock(), vue.createElementBlock("div", vue.mergeProps({ class: wrapperClasses.value }, rootAttrs.value), [
20412
- __props.loading ? (vue.openBlock(), vue.createBlock(_sfc_main$F, {
20617
+ __props.loading ? (vue.openBlock(), vue.createBlock(_sfc_main$G, {
20413
20618
  key: 0,
20414
20619
  size: "24px",
20415
20620
  color: "blue",
@@ -20618,6 +20823,302 @@ const teardownRouterLinkInterceptor = () => {
20618
20823
  }
20619
20824
  globalRouter = null;
20620
20825
  };
20826
+ const isArr = (v) => Array.isArray(v);
20827
+ const clone = (v) => isArr(v) ? [...v] : v;
20828
+ const cloneRecord = (defaults2) => {
20829
+ const out = {};
20830
+ for (const k in defaults2) {
20831
+ out[k] = clone(defaults2[k]);
20832
+ }
20833
+ return out;
20834
+ };
20835
+ const isDefault = (v, def) => {
20836
+ if (isArr(def)) return isArr(v) && v.length === 0;
20837
+ return v === def;
20838
+ };
20839
+ const parseValue = (key, query, def) => {
20840
+ const raw = query[key];
20841
+ if (isArr(def)) {
20842
+ if (raw === void 0 || raw === null) return [];
20843
+ if (Array.isArray(raw)) return raw.filter((x) => x != null).map(String);
20844
+ return [String(raw)];
20845
+ }
20846
+ if (typeof def === "boolean") return raw === "true";
20847
+ if (typeof def === "number") {
20848
+ if (raw === void 0 || raw === null || raw === "") return def;
20849
+ const n = Number(Array.isArray(raw) ? raw[0] : raw);
20850
+ return Number.isFinite(n) ? n : def;
20851
+ }
20852
+ if (raw === void 0 || raw === null) return def;
20853
+ return String(Array.isArray(raw) ? raw[0] : raw);
20854
+ };
20855
+ const serializeValue = (v, def) => {
20856
+ if (isDefault(v, def)) return void 0;
20857
+ if (isArr(def)) return isArr(v) && v.length > 0 ? v : void 0;
20858
+ if (typeof def === "boolean") return v === true ? "true" : void 0;
20859
+ if (typeof def === "number") return String(v);
20860
+ if (typeof v === "string" && v !== "") return v;
20861
+ return void 0;
20862
+ };
20863
+ const normalizeQuery = (q) => {
20864
+ const out = {};
20865
+ for (const k of Object.keys(q).sort()) {
20866
+ const v = q[k];
20867
+ if (v === void 0 || v === null) continue;
20868
+ if (Array.isArray(v)) {
20869
+ const items = v.filter((x) => x != null).map(String);
20870
+ if (items.length) out[k] = items;
20871
+ } else {
20872
+ out[k] = String(v);
20873
+ }
20874
+ }
20875
+ return out;
20876
+ };
20877
+ const queriesEqual = (a, b) => JSON.stringify(normalizeQuery(a)) === JSON.stringify(normalizeQuery(b));
20878
+ const statesEqual = (a, b) => {
20879
+ for (const k in a) {
20880
+ const av = a[k];
20881
+ const bv = b[k];
20882
+ if (isArr(av)) {
20883
+ if (!isArr(bv) || av.length !== bv.length || av.some((x, i) => x !== bv[i])) return false;
20884
+ } else if (av !== bv) {
20885
+ return false;
20886
+ }
20887
+ }
20888
+ return true;
20889
+ };
20890
+ const applyInPlace = (target, source, defaults2) => {
20891
+ for (const k in defaults2) {
20892
+ const next = source[k];
20893
+ const current = target[k];
20894
+ if (isArr(defaults2[k])) {
20895
+ const na = next;
20896
+ const ca = current;
20897
+ if (na.length !== ca.length || na.some((x, i) => x !== ca[i])) {
20898
+ ca.splice(0, ca.length, ...na);
20899
+ }
20900
+ } else if (current !== next) {
20901
+ target[k] = next;
20902
+ }
20903
+ }
20904
+ };
20905
+ const copyPlain = (source, target, keys) => {
20906
+ for (const k of keys) {
20907
+ const v = source[k];
20908
+ if (isArr(v)) {
20909
+ const ca = target[k];
20910
+ if (Array.isArray(ca)) {
20911
+ ca.splice(0, ca.length, ...v);
20912
+ } else {
20913
+ target[k] = [...v];
20914
+ }
20915
+ } else {
20916
+ target[k] = clone(v);
20917
+ }
20918
+ }
20919
+ };
20920
+ const SEARCH_KEY = "_search";
20921
+ const PAGE_KEY = "_page";
20922
+ const SORT_KEY = "_sort";
20923
+ function useRouteFilters(schema) {
20924
+ const route = vueRouter.useRoute();
20925
+ const router = vueRouter.useRouter();
20926
+ const filterDefaults = schema.filter;
20927
+ const draftDefaults = schema.draft ?? {};
20928
+ const sortDefault = schema.sort ?? {};
20929
+ const searchDefault = schema.search ?? "";
20930
+ const pageDefault = schema.page ?? 0;
20931
+ const draftKeys = Object.keys(draftDefaults);
20932
+ const schemaQueryKeys = /* @__PURE__ */ new Set([...Object.keys(filterDefaults), ...draftKeys, SEARCH_KEY, PAGE_KEY, SORT_KEY]);
20933
+ const filterState = vue.reactive(cloneRecord(filterDefaults));
20934
+ const draftState = vue.reactive(cloneRecord(draftDefaults));
20935
+ const searchRef = vue.ref(searchDefault);
20936
+ const pageRef = vue.ref(pageDefault);
20937
+ const defaultSortValue = sortDefault.field && sortDefault.dir ? `${sortDefault.dir === "desc" ? "-" : "+"}${sortDefault.field}` : "";
20938
+ const sortValueRef = vue.ref(defaultSortValue);
20939
+ const filterRaw = filterState;
20940
+ const draftRaw = draftState;
20941
+ const draftKeyStrings = draftKeys;
20942
+ let syncingFromRoute = false;
20943
+ let syncingToRoute = false;
20944
+ const readFromRoute = () => {
20945
+ const q = route.query;
20946
+ const parsed = cloneRecord(filterDefaults);
20947
+ for (const k in filterDefaults) {
20948
+ parsed[k] = parseValue(k, q, filterDefaults[k]);
20949
+ }
20950
+ if (!statesEqual(filterState, parsed)) {
20951
+ applyInPlace(filterState, parsed, filterDefaults);
20952
+ }
20953
+ const rawSearch = q[SEARCH_KEY];
20954
+ const nextSearch = rawSearch !== void 0 && rawSearch !== null ? String(Array.isArray(rawSearch) ? rawSearch[0] : rawSearch) : searchDefault;
20955
+ if (searchRef.value !== nextSearch) searchRef.value = nextSearch;
20956
+ const rawPage = q[PAGE_KEY];
20957
+ const nextPage = rawPage !== void 0 && rawPage !== null ? Number(Array.isArray(rawPage) ? rawPage[0] : rawPage) || pageDefault : pageDefault;
20958
+ if (pageRef.value !== nextPage) pageRef.value = nextPage;
20959
+ const rawSort = q[SORT_KEY];
20960
+ const nextSort = typeof rawSort === "string" && rawSort !== "" ? rawSort : defaultSortValue;
20961
+ if (sortValueRef.value !== nextSort) sortValueRef.value = nextSort;
20962
+ if (draftKeys.length > 0) {
20963
+ copyPlain(
20964
+ filterState,
20965
+ draftState,
20966
+ draftKeys
20967
+ );
20968
+ }
20969
+ };
20970
+ readFromRoute();
20971
+ const buildQuery = () => {
20972
+ const q = {};
20973
+ for (const k in route.query) {
20974
+ if (!schemaQueryKeys.has(k)) q[k] = route.query[k];
20975
+ }
20976
+ for (const k in filterDefaults) {
20977
+ const s = serializeValue(filterState[k], filterDefaults[k]);
20978
+ if (s !== void 0) q[k] = s;
20979
+ }
20980
+ if (searchRef.value !== searchDefault && searchRef.value !== "") {
20981
+ q[SEARCH_KEY] = searchRef.value;
20982
+ }
20983
+ if (pageRef.value !== pageDefault) {
20984
+ q[PAGE_KEY] = String(pageRef.value);
20985
+ }
20986
+ if (sortValueRef.value !== "" && sortValueRef.value !== defaultSortValue) {
20987
+ q[SORT_KEY] = sortValueRef.value;
20988
+ } else if (defaultSortValue !== "" && sortValueRef.value === defaultSortValue) ;
20989
+ return q;
20990
+ };
20991
+ const pushRoute = () => {
20992
+ if (syncingFromRoute || syncingToRoute) return;
20993
+ const next = buildQuery();
20994
+ if (queriesEqual(route.query, next)) return;
20995
+ syncingToRoute = true;
20996
+ return router.replace({ query: next }).then(() => void 0).finally(() => {
20997
+ syncingToRoute = false;
20998
+ });
20999
+ };
21000
+ vue.watch(
21001
+ () => route.query,
21002
+ () => {
21003
+ if (syncingToRoute) return;
21004
+ syncingFromRoute = true;
21005
+ readFromRoute();
21006
+ syncingFromRoute = false;
21007
+ }
21008
+ );
21009
+ vue.watch(
21010
+ filterState,
21011
+ () => {
21012
+ pushRoute();
21013
+ },
21014
+ { deep: true }
21015
+ );
21016
+ vue.watch(searchRef, () => {
21017
+ pushRoute();
21018
+ });
21019
+ vue.watch(pageRef, () => {
21020
+ pushRoute();
21021
+ });
21022
+ vue.watch(sortValueRef, () => {
21023
+ pushRoute();
21024
+ });
21025
+ const sort = {
21026
+ get value() {
21027
+ return sortValueRef.value;
21028
+ },
21029
+ get field() {
21030
+ return sortValueRef.value.length > 1 ? sortValueRef.value.slice(1) : "";
21031
+ },
21032
+ get dir() {
21033
+ if (!sortValueRef.value) return "";
21034
+ return sortValueRef.value[0] === "-" ? "desc" : "asc";
21035
+ },
21036
+ toggle(field) {
21037
+ if (sortValueRef.value === `-${field}`) {
21038
+ sortValueRef.value = `+${field}`;
21039
+ } else if (sortValueRef.value === `+${field}`) {
21040
+ sortValueRef.value = "";
21041
+ } else {
21042
+ sortValueRef.value = `-${field}`;
21043
+ }
21044
+ },
21045
+ set(field, dir) {
21046
+ sortValueRef.value = `${dir === "desc" ? "-" : "+"}${field}`;
21047
+ },
21048
+ clear() {
21049
+ sortValueRef.value = "";
21050
+ },
21051
+ iconFor(field) {
21052
+ if (sortValueRef.value.slice(1) !== field) return "sort";
21053
+ return sortValueRef.value[0] === "-" ? "descending" : "ascending";
21054
+ }
21055
+ };
21056
+ const draft = {
21057
+ state: draftState,
21058
+ open() {
21059
+ copyPlain(filterRaw, draftRaw, draftKeyStrings);
21060
+ },
21061
+ apply() {
21062
+ copyPlain(draftRaw, filterRaw, draftKeyStrings);
21063
+ },
21064
+ cancel() {
21065
+ copyPlain(filterRaw, draftRaw, draftKeyStrings);
21066
+ },
21067
+ reset() {
21068
+ const defClone = cloneRecord(draftDefaults);
21069
+ copyPlain(defClone, draftRaw, draftKeyStrings);
21070
+ }
21071
+ };
21072
+ const reset = async () => {
21073
+ syncingFromRoute = true;
21074
+ applyInPlace(filterState, cloneRecord(filterDefaults), filterDefaults);
21075
+ searchRef.value = searchDefault;
21076
+ pageRef.value = pageDefault;
21077
+ sortValueRef.value = defaultSortValue;
21078
+ if (draftKeys.length > 0) {
21079
+ copyPlain(filterRaw, draftRaw, draftKeyStrings);
21080
+ }
21081
+ syncingFromRoute = false;
21082
+ await pushRoute();
21083
+ };
21084
+ const clear = async () => {
21085
+ syncingToRoute = true;
21086
+ applyInPlace(filterState, cloneRecord(filterDefaults), filterDefaults);
21087
+ searchRef.value = searchDefault;
21088
+ pageRef.value = pageDefault;
21089
+ sortValueRef.value = defaultSortValue;
21090
+ if (draftKeys.length > 0) {
21091
+ copyPlain(filterRaw, draftRaw, draftKeyStrings);
21092
+ }
21093
+ await router.replace({ query: {} }).finally(() => {
21094
+ syncingToRoute = false;
21095
+ });
21096
+ };
21097
+ return {
21098
+ filter: filterState,
21099
+ draft,
21100
+ sort,
21101
+ search: searchRef,
21102
+ page: pageRef,
21103
+ reset,
21104
+ clear
21105
+ };
21106
+ }
21107
+ const parseRouteFiltersFromQuery = (query, defaults2) => {
21108
+ const out = cloneRecord(defaults2);
21109
+ for (const k in defaults2) {
21110
+ out[k] = parseValue(k, query, defaults2[k]);
21111
+ }
21112
+ return out;
21113
+ };
21114
+ const serializeRouteFiltersToQuery = (state, defaults2) => {
21115
+ const q = {};
21116
+ for (const k in defaults2) {
21117
+ const s = serializeValue(state[k], defaults2[k]);
21118
+ if (s !== void 0) q[k] = s;
21119
+ }
21120
+ return q;
21121
+ };
20621
21122
  function useRouteScrollPositions(currentRoute) {
20622
21123
  const scrollPositions = vue.ref({});
20623
21124
  vue.watch(
@@ -20699,33 +21200,34 @@ const FdsVueCorePlugin = {
20699
21200
  app.provide(FDS_VUE_CORE_I18N_KEY, options.i18n);
20700
21201
  }
20701
21202
  app.component("FdsTreeView", _sfc_main$h);
20702
- app.component("FdsButtonPrimary", _sfc_main$B);
20703
- app.component("FdsButtonSecondary", _sfc_main$A);
20704
- app.component("FdsButtonMinor", _sfc_main$E);
20705
- app.component("FdsButtonIcon", _sfc_main$M);
20706
- app.component("FdsButtonCopy", _sfc_main$D);
20707
- app.component("FdsButtonDownload", _sfc_main$C);
20708
- app.component("FdsDevMode", _sfc_main$o);
20709
- app.component("FdsIcon", _sfc_main$N);
20710
- app.component("FdsSpinner", _sfc_main$F);
20711
- app.component("FdsRadio", _sfc_main$x);
20712
- app.component("FdsCheckbox", _sfc_main$y);
21203
+ app.component("FdsButtonPrimary", _sfc_main$C);
21204
+ app.component("FdsButtonSecondary", _sfc_main$B);
21205
+ app.component("FdsButtonMinor", _sfc_main$F);
21206
+ app.component("FdsButtonIcon", _sfc_main$N);
21207
+ app.component("FdsButtonCopy", _sfc_main$E);
21208
+ app.component("FdsButtonDownload", _sfc_main$D);
21209
+ app.component("FdsDevMode", _sfc_main$p);
21210
+ app.component("FdsIcon", _sfc_main$O);
21211
+ app.component("FdsSpinner", _sfc_main$G);
21212
+ app.component("FdsRadio", _sfc_main$y);
21213
+ app.component("FdsCheckbox", _sfc_main$z);
20713
21214
  app.component("FdsTextarea", _sfc_main$7);
20714
21215
  app.component("FdsPhonenumber", _sfc_main$a);
20715
21216
  app.component("FdsSsn", _sfc_main$9);
20716
21217
  app.component("FdsSelect", _sfc_main$8);
20717
21218
  app.component("FdsTable", _sfc_main$6);
20718
21219
  app.component("FdsTableHead", _sfc_main$5);
20719
- app.component("FdsInput", _sfc_main$s);
20720
- app.component("FdsBlockContent", _sfc_main$K);
20721
- app.component("FdsBlockInfo", _sfc_main$H);
20722
- app.component("FdsBlockAlert", _sfc_main$L);
20723
- app.component("FdsBlockExpander", _sfc_main$I);
20724
- app.component("FdsBlockLink", _sfc_main$G);
20725
- app.component("FdsSticker", _sfc_main$J);
20726
- app.component("FdsTabs", _sfc_main$r);
20727
- app.component("FdsTabsItem", _sfc_main$q);
20728
- app.component("FdsModal", _sfc_main$u);
21220
+ app.component("FdsInput", _sfc_main$t);
21221
+ app.component("FdsBlockContent", _sfc_main$L);
21222
+ app.component("FdsBlockInfo", _sfc_main$I);
21223
+ app.component("FdsBlockAlert", _sfc_main$M);
21224
+ app.component("FdsBlockExpander", _sfc_main$J);
21225
+ app.component("FdsBlockLink", _sfc_main$H);
21226
+ app.component("FdsSticker", _sfc_main$K);
21227
+ app.component("FdsTabs", _sfc_main$s);
21228
+ app.component("FdsTabsItem", _sfc_main$r);
21229
+ app.component("FdsDrawer", FdsDrawer);
21230
+ app.component("FdsModal", _sfc_main$v);
20729
21231
  app.component("FdsPagination", _sfc_main$m);
20730
21232
  app.component("FdsPopover", _sfc_main$l);
20731
21233
  app.component("FdsSearchSelect", _sfc_main$k);
@@ -20737,52 +21239,53 @@ const FdsVueCorePlugin = {
20737
21239
  app.component("FdsH2", _sfc_main$3);
20738
21240
  app.component("FdsH3", _sfc_main$2);
20739
21241
  app.component("FdsHr", _sfc_main$1);
20740
- app.component("FdsLabel", _sfc_main$w);
21242
+ app.component("FdsLabel", _sfc_main$x);
20741
21243
  app.component("FdsLead", _sfc_main$d);
20742
- app.component("FdsMeta", _sfc_main$t);
21244
+ app.component("FdsMeta", _sfc_main$u);
20743
21245
  app.component("FdsListHeading", _sfc_main);
20744
21246
  }
20745
21247
  };
20746
21248
  exports.FDS_VUE_CORE_I18N_KEY = FDS_VUE_CORE_I18N_KEY;
20747
- exports.FdsBlockAlert = _sfc_main$L;
20748
- exports.FdsBlockContent = _sfc_main$K;
20749
- exports.FdsBlockExpander = _sfc_main$I;
20750
- exports.FdsBlockInfo = _sfc_main$H;
20751
- exports.FdsBlockLink = _sfc_main$G;
20752
- exports.FdsButtonCopy = _sfc_main$D;
20753
- exports.FdsButtonDownload = _sfc_main$C;
20754
- exports.FdsButtonIcon = _sfc_main$M;
20755
- exports.FdsButtonMinor = _sfc_main$E;
20756
- exports.FdsButtonPrimary = _sfc_main$B;
20757
- exports.FdsButtonSecondary = _sfc_main$A;
20758
- exports.FdsCheckbox = _sfc_main$y;
20759
- exports.FdsDevMode = _sfc_main$o;
20760
- exports.FdsExitModal = _sfc_main$n;
21249
+ exports.FdsBlockAlert = _sfc_main$M;
21250
+ exports.FdsBlockContent = _sfc_main$L;
21251
+ exports.FdsBlockExpander = _sfc_main$J;
21252
+ exports.FdsBlockInfo = _sfc_main$I;
21253
+ exports.FdsBlockLink = _sfc_main$H;
21254
+ exports.FdsButtonCopy = _sfc_main$E;
21255
+ exports.FdsButtonDownload = _sfc_main$D;
21256
+ exports.FdsButtonIcon = _sfc_main$N;
21257
+ exports.FdsButtonMinor = _sfc_main$F;
21258
+ exports.FdsButtonPrimary = _sfc_main$C;
21259
+ exports.FdsButtonSecondary = _sfc_main$B;
21260
+ exports.FdsCheckbox = _sfc_main$z;
21261
+ exports.FdsDevMode = _sfc_main$p;
21262
+ exports.FdsDrawer = FdsDrawer;
21263
+ exports.FdsExitModal = _sfc_main$o;
20761
21264
  exports.FdsH1 = _sfc_main$4;
20762
21265
  exports.FdsH2 = _sfc_main$3;
20763
21266
  exports.FdsH3 = _sfc_main$2;
20764
21267
  exports.FdsHr = _sfc_main$1;
20765
- exports.FdsIcon = _sfc_main$N;
20766
- exports.FdsInput = _sfc_main$s;
20767
- exports.FdsLabel = _sfc_main$w;
21268
+ exports.FdsIcon = _sfc_main$O;
21269
+ exports.FdsInput = _sfc_main$t;
21270
+ exports.FdsLabel = _sfc_main$x;
20768
21271
  exports.FdsLead = _sfc_main$d;
20769
21272
  exports.FdsListHeading = _sfc_main;
20770
- exports.FdsMeta = _sfc_main$t;
20771
- exports.FdsModal = _sfc_main$u;
21273
+ exports.FdsMeta = _sfc_main$u;
21274
+ exports.FdsModal = _sfc_main$v;
20772
21275
  exports.FdsPagination = _sfc_main$m;
20773
21276
  exports.FdsPhonenumber = _sfc_main$a;
20774
21277
  exports.FdsPopover = _sfc_main$l;
20775
- exports.FdsRadio = _sfc_main$x;
21278
+ exports.FdsRadio = _sfc_main$y;
20776
21279
  exports.FdsSearchSelect = _sfc_main$k;
20777
21280
  exports.FdsSearchSelectPro = _sfc_main$j;
20778
21281
  exports.FdsSelect = _sfc_main$8;
20779
- exports.FdsSpinner = _sfc_main$F;
21282
+ exports.FdsSpinner = _sfc_main$G;
20780
21283
  exports.FdsSsn = _sfc_main$9;
20781
- exports.FdsSticker = _sfc_main$J;
21284
+ exports.FdsSticker = _sfc_main$K;
20782
21285
  exports.FdsTable = _sfc_main$6;
20783
21286
  exports.FdsTableHead = _sfc_main$5;
20784
- exports.FdsTabs = _sfc_main$r;
20785
- exports.FdsTabsItem = _sfc_main$q;
21287
+ exports.FdsTabs = _sfc_main$s;
21288
+ exports.FdsTabsItem = _sfc_main$r;
20786
21289
  exports.FdsTextarea = _sfc_main$7;
20787
21290
  exports.FdsTreeView = _sfc_main$h;
20788
21291
  exports.FdsTruncatedText = _sfc_main$g;
@@ -20811,7 +21314,9 @@ exports.isRelativeHref = isRelativeHref;
20811
21314
  exports.logoFeelgoodColored = logoFeelgoodColored;
20812
21315
  exports.logoFeelgoodLight = logoFeelgoodLight;
20813
21316
  exports.normalizePidSearchValue = normalizePidSearchValue;
21317
+ exports.parseRouteFiltersFromQuery = parseRouteFiltersFromQuery;
20814
21318
  exports.resolveRouterLinkTarget = resolveRouterLinkTarget;
21319
+ exports.serializeRouteFiltersToQuery = serializeRouteFiltersToQuery;
20815
21320
  exports.setupExitConfirmationGuard = setupExitConfirmationGuard;
20816
21321
  exports.setupRouterLinkInterceptor = setupRouterLinkInterceptor;
20817
21322
  exports.shouldBlockNavigation = shouldBlockNavigation;
@@ -20829,6 +21334,7 @@ exports.useExitConfirmationGuardState = useExitConfirmationGuardState;
20829
21334
  exports.useFileSizeValidation = useFileSizeValidation;
20830
21335
  exports.useFileValidation = useFileValidation;
20831
21336
  exports.useIsPid = useIsPid;
21337
+ exports.useRouteFilters = useRouteFilters;
20832
21338
  exports.useRouteScrollPositions = useRouteScrollPositions;
20833
21339
  exports.useTreeState = useTreeState;
20834
21340
  exports.useViewportBreakpoint = useViewportBreakpoint;