@fkui/vue 6.3.1 → 6.5.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
@@ -1,5 +1,5 @@
1
- import { defineComponent, computed, createElementBlock, openBlock, normalizeClass, renderSlot, mergeProps, createTextVNode, createElementVNode, createApp, resolveComponent, createCommentVNode, withKeys, createVNode, toDisplayString, createBlock, withCtx, Fragment, renderList, withModifiers, isVNode, Comment, getCurrentInstance, resolveDynamicComponent, onMounted, toValue, onUnmounted, useSlots, ref, normalizeProps, guardReactiveProps, unref, Transition, Teleport, normalizeStyle, useTemplateRef, watchEffect, watch, nextTick, withDirectives, vShow, readonly, inject, toRef, provide, createSlots, vModelSelect, vModelDynamic, toHandlers, shallowRef, onUpdated, toRefs, getCurrentScope, onScopeDispose, defineCustomElement } from "vue";
2
- import { TranslationService, isSet, configLogic, focus as focus$1, ElementIdService, findTabbableElements, popFocus, pushFocus, scrollTo, documentOrderComparator, ValidationService, isValidatableHTMLElement, alertScreenReader, debounce, handleTab, isEmpty, deepClone, parseNumber, formatNumber, parseBankAccountNumber, parseBankgiro, parseClearingNumber, parsePersonnummer, formatPersonnummer, parsePlusgiro, formatPostalCode, parsePercent, formatPercent, parseOrganisationsnummer, isInvalidDatesConfig, isInvalidWeekdaysConfig, parseDate, waitForScreenReader, focusFirst, removeFocusListener, restoreFocus, saveFocus, addFocusListener, DomUtils } from "@fkui/logic";
1
+ import { defineComponent, computed, createElementBlock, openBlock, normalizeClass, renderSlot, mergeProps, createTextVNode, createElementVNode, createApp, resolveComponent, createCommentVNode, withKeys, createVNode, toDisplayString, createBlock, withCtx, Fragment, renderList, withModifiers, isVNode, Comment, getCurrentInstance, resolveDynamicComponent, onMounted, toValue, onUnmounted, useSlots, ref, normalizeProps, guardReactiveProps, unref, Transition, Teleport, normalizeStyle, useTemplateRef, watchEffect, watch, nextTick, withDirectives, vShow, readonly, inject, toRef, provide, createSlots, vModelSelect, vModelDynamic, toHandlers, shallowRef, onUpdated, toRefs, getCurrentScope, onScopeDispose, defineCustomElement, effectScope } from "vue";
2
+ import { TranslationService, isSet, configLogic, focus as focus$1, ElementIdService, findTabbableElements, popFocus, pushFocus, scrollTo, documentOrderComparator, ValidationService, availableValidators, isValidatableHTMLElement, alertScreenReader, debounce, handleTab, isEmpty, deepClone, parseNumber, formatNumber, parseBankAccountNumber, parseBankgiro, parseClearingNumber, parsePersonnummer, formatPersonnummer, parsePlusgiro, formatPostalCode, parsePercent, formatPercent, parseOrganisationsnummer, isInvalidDatesConfig, isInvalidWeekdaysConfig, parseDate, waitForScreenReader, focusFirst, removeFocusListener, restoreFocus, saveFocus, addFocusListener, DomUtils } from "@fkui/logic";
3
3
  import { groupByWeek, getWeekdayNamings, FDate, DateFormat } from "@fkui/date";
4
4
  const statuses = ["default", "warning", "error", "success", "info"];
5
5
  const _sfc_main$1e = /* @__PURE__ */ defineComponent({
@@ -1970,17 +1970,17 @@ const _export_sfc = (sfc, props) => {
1970
1970
  return target;
1971
1971
  };
1972
1972
  const _hoisted_1$X = ["aria-hidden"];
1973
- const _hoisted_2$G = ["xlink:href"];
1974
- function _sfc_render$R(_ctx, _cache, $props, $setup, $data, $options) {
1973
+ const _hoisted_2$G = ["href"];
1974
+ function _sfc_render$Q(_ctx, _cache, $props, $setup, $data, $options) {
1975
1975
  return openBlock(), createElementBlock("svg", mergeProps(_ctx.$attrs, {
1976
1976
  focusable: "false",
1977
1977
  class: ["icon", [_ctx.spriteKey, ..._ctx.modifiers]],
1978
1978
  "aria-hidden": _ctx.ariaHidden
1979
1979
  }), [renderSlot(_ctx.$slots, "default"), _cache[0] || (_cache[0] = createTextVNode()), createElementVNode("use", {
1980
- "xlink:href": _ctx.spriteId
1980
+ href: _ctx.spriteId
1981
1981
  }, null, 8, _hoisted_2$G)], 16, _hoisted_1$X);
1982
1982
  }
1983
- const FIcon = /* @__PURE__ */ _export_sfc(_sfc_main$1d, [["render", _sfc_render$R]]);
1983
+ const FIcon = /* @__PURE__ */ _export_sfc(_sfc_main$1d, [["render", _sfc_render$Q]]);
1984
1984
  const DATA_TEST_ATTRIBUTE_NAME = "data-test";
1985
1985
  function throwErrorIfEmpty(value) {
1986
1986
  if (!value) {
@@ -4602,7 +4602,7 @@ const _hoisted_1$W = ["id"];
4602
4602
  const _hoisted_2$F = {
4603
4603
  class: "modal__backdrop"
4604
4604
  };
4605
- const _hoisted_3$w = {
4605
+ const _hoisted_3$x = {
4606
4606
  class: "modal__inner-container"
4607
4607
  };
4608
4608
  const _hoisted_4$q = {
@@ -4614,7 +4614,7 @@ const _hoisted_5$l = {
4614
4614
  const _hoisted_6$g = {
4615
4615
  class: "modal__header"
4616
4616
  };
4617
- const _hoisted_7$d = {
4617
+ const _hoisted_7$c = {
4618
4618
  key: 0,
4619
4619
  ref: "modalTitle",
4620
4620
  class: "modal__title",
@@ -4632,7 +4632,7 @@ const _hoisted_10$3 = {
4632
4632
  class: "modal__shelf"
4633
4633
  };
4634
4634
  const _hoisted_11$3 = ["aria-label"];
4635
- function _sfc_render$Q(_ctx, _cache, $props, $setup, $data, $options) {
4635
+ function _sfc_render$P(_ctx, _cache, $props, $setup, $data, $options) {
4636
4636
  const _component_f_icon = resolveComponent("f-icon");
4637
4637
  return _ctx.isOpen ? (openBlock(), createElementBlock("div", {
4638
4638
  key: 0,
@@ -4644,13 +4644,13 @@ function _sfc_render$Q(_ctx, _cache, $props, $setup, $data, $options) {
4644
4644
  role: "dialog",
4645
4645
  "aria-modal": "true",
4646
4646
  onKeyup: _cache[3] || (_cache[3] = withKeys((...args) => _ctx.onClose && _ctx.onClose(...args), ["esc"]))
4647
- }, [createElementVNode("div", _hoisted_3$w, [createElementVNode("div", {
4647
+ }, [createElementVNode("div", _hoisted_3$x, [createElementVNode("div", {
4648
4648
  ref: "modalDialogContainer",
4649
4649
  class: normalizeClass(["modal__dialog-container", _ctx.containerClasses])
4650
4650
  }, [createElementVNode("div", _hoisted_4$q, [createElementVNode("div", _hoisted_5$l, [createElementVNode("div", _hoisted_6$g, [createElementVNode("div", {
4651
4651
  tabindex: "0",
4652
4652
  onFocus: _cache[0] || (_cache[0] = (...args) => _ctx.onFocusFirst && _ctx.onFocusFirst(...args))
4653
- }, null, 32), _cache[4] || (_cache[4] = createTextVNode()), _ctx.hasHeaderSlot ? (openBlock(), createElementBlock("h1", _hoisted_7$d, [renderSlot(_ctx.$slots, "header")], 512)) : createCommentVNode("", true)]), _cache[5] || (_cache[5] = createTextVNode()), createElementVNode("div", _hoisted_8$8, [renderSlot(_ctx.$slots, "content")], 512), _cache[6] || (_cache[6] = createTextVNode()), createElementVNode("div", _hoisted_9$6, [renderSlot(_ctx.$slots, "footer")])]), _cache[9] || (_cache[9] = createTextVNode()), createElementVNode("div", _hoisted_10$3, [createElementVNode("button", {
4653
+ }, null, 32), _cache[4] || (_cache[4] = createTextVNode()), _ctx.hasHeaderSlot ? (openBlock(), createElementBlock("h1", _hoisted_7$c, [renderSlot(_ctx.$slots, "header")], 512)) : createCommentVNode("", true)]), _cache[5] || (_cache[5] = createTextVNode()), createElementVNode("div", _hoisted_8$8, [renderSlot(_ctx.$slots, "content")], 512), _cache[6] || (_cache[6] = createTextVNode()), createElementVNode("div", _hoisted_9$6, [renderSlot(_ctx.$slots, "footer")])]), _cache[9] || (_cache[9] = createTextVNode()), createElementVNode("div", _hoisted_10$3, [createElementVNode("button", {
4654
4654
  type: "button",
4655
4655
  class: "close-button",
4656
4656
  "aria-label": _ctx.ariaCloseText,
@@ -4662,9 +4662,9 @@ function _sfc_render$Q(_ctx, _cache, $props, $setup, $data, $options) {
4662
4662
  onFocus: _cache[2] || (_cache[2] = (...args) => _ctx.onFocusLast && _ctx.onFocusLast(...args))
4663
4663
  }, null, 32)])])], 2)])], 32)])], 10, _hoisted_1$W)) : createCommentVNode("", true);
4664
4664
  }
4665
- const FModal = /* @__PURE__ */ _export_sfc(_sfc_main$1c, [["render", _sfc_render$Q]]);
4666
- function prepareButtonList(src, buttonOrder = config.buttonOrder) {
4667
- const list = src.map((it) => {
4665
+ const FModal = /* @__PURE__ */ _export_sfc(_sfc_main$1c, [["render", _sfc_render$P]]);
4666
+ function prepareButtonList(src) {
4667
+ return src.map((it) => {
4668
4668
  var _it$event, _ref, _it$reason, _it$type;
4669
4669
  return {
4670
4670
  label: it.label,
@@ -4675,12 +4675,6 @@ function prepareButtonList(src, buttonOrder = config.buttonOrder) {
4675
4675
  buttonType: it.submitButton ? "submit" : "button"
4676
4676
  };
4677
4677
  });
4678
- switch (buttonOrder) {
4679
- case FKUIConfigButtonOrder.LEFT_TO_RIGHT:
4680
- return list;
4681
- case FKUIConfigButtonOrder.RIGHT_TO_LEFT:
4682
- return list.reverse();
4683
- }
4684
4678
  }
4685
4679
  const defaultButtons = [{
4686
4680
  label: "Primärknapp",
@@ -4778,7 +4772,8 @@ const _sfc_main$1b = defineComponent({
4778
4772
  })],
4779
4773
  computed: {
4780
4774
  preparedButtons() {
4781
- return prepareButtonList(this.buttons);
4775
+ const preparedButtonList = prepareButtonList(this.buttons);
4776
+ return config.buttonOrder === FKUIConfigButtonOrder.RIGHT_TO_LEFT ? preparedButtonList.reverse() : preparedButtonList;
4782
4777
  }
4783
4778
  },
4784
4779
  methods: {
@@ -4799,11 +4794,11 @@ const _hoisted_1$V = {
4799
4794
  class: "button-group"
4800
4795
  };
4801
4796
  const _hoisted_2$E = ["onClick"];
4802
- const _hoisted_3$v = {
4797
+ const _hoisted_3$w = {
4803
4798
  key: 0,
4804
4799
  class: "sr-only"
4805
4800
  };
4806
- function _sfc_render$P(_ctx, _cache, $props, $setup, $data, $options) {
4801
+ function _sfc_render$O(_ctx, _cache, $props, $setup, $data, $options) {
4807
4802
  const _component_f_modal = resolveComponent("f-modal");
4808
4803
  return openBlock(), createBlock(_component_f_modal, {
4809
4804
  fullscreen: _ctx.fullscreen,
@@ -4822,12 +4817,12 @@ function _sfc_render$P(_ctx, _cache, $props, $setup, $data, $options) {
4822
4817
  type: "button",
4823
4818
  class: normalizeClass([button.classlist, "button-group__item"]),
4824
4819
  onClick: ($event) => _ctx.onClick(button)
4825
- }, [createElementVNode("span", null, toDisplayString(button.label), 1), _cache[0] || (_cache[0] = createTextVNode()), button.screenreader ? (openBlock(), createElementBlock("span", _hoisted_3$v, " " + toDisplayString(button.screenreader), 1)) : createCommentVNode("", true)], 10, _hoisted_2$E);
4820
+ }, [createElementVNode("span", null, toDisplayString(button.label), 1), _cache[0] || (_cache[0] = createTextVNode()), button.screenreader ? (openBlock(), createElementBlock("span", _hoisted_3$w, " " + toDisplayString(button.screenreader), 1)) : createCommentVNode("", true)], 10, _hoisted_2$E);
4826
4821
  }), 128))])]),
4827
4822
  _: 3
4828
4823
  }, 8, ["fullscreen", "is-open", "aria-close-text", "size", "focus", "onClose"]);
4829
4824
  }
4830
- const FConfirmModal = /* @__PURE__ */ _export_sfc(_sfc_main$1b, [["render", _sfc_render$P]]);
4825
+ const FConfirmModal = /* @__PURE__ */ _export_sfc(_sfc_main$1b, [["render", _sfc_render$O]]);
4831
4826
  const GAP = ["1x", "2x", "3x", "4x", "5x", "6x", "7x", "8x"];
4832
4827
  const ALIGNMENT = ["top", "center", "bottom"];
4833
4828
  const FLOAT = ["left", "center", "right"];
@@ -4906,12 +4901,12 @@ const _sfc_main$1a = defineComponent({
4906
4901
  }
4907
4902
  }
4908
4903
  });
4909
- function _sfc_render$O(_ctx, _cache, $props, $setup, $data, $options) {
4904
+ function _sfc_render$N(_ctx, _cache, $props, $setup, $data, $options) {
4910
4905
  return openBlock(), createElementBlock("div", {
4911
4906
  class: normalizeClass(["iflex", _ctx.classList])
4912
4907
  }, [renderSlot(_ctx.$slots, "default")], 2);
4913
4908
  }
4914
- const IFlex = /* @__PURE__ */ _export_sfc(_sfc_main$1a, [["render", _sfc_render$O]]);
4909
+ const IFlex = /* @__PURE__ */ _export_sfc(_sfc_main$1a, [["render", _sfc_render$N]]);
4915
4910
  const _sfc_main$19 = defineComponent({
4916
4911
  name: "IFlexItem",
4917
4912
  inheritAttrs: true,
@@ -4959,12 +4954,12 @@ const _sfc_main$19 = defineComponent({
4959
4954
  }
4960
4955
  }
4961
4956
  });
4962
- function _sfc_render$N(_ctx, _cache, $props, $setup, $data, $options) {
4957
+ function _sfc_render$M(_ctx, _cache, $props, $setup, $data, $options) {
4963
4958
  return openBlock(), createElementBlock("div", {
4964
4959
  class: normalizeClass(["iflex__item", _ctx.classList])
4965
4960
  }, [renderSlot(_ctx.$slots, "default")], 2);
4966
4961
  }
4967
- const IFlexItem = /* @__PURE__ */ _export_sfc(_sfc_main$19, [["render", _sfc_render$N]]);
4962
+ const IFlexItem = /* @__PURE__ */ _export_sfc(_sfc_main$19, [["render", _sfc_render$M]]);
4968
4963
  function focusError(item) {
4969
4964
  const element = document.querySelector(`#${item.id}`);
4970
4965
  if (!element) {
@@ -5036,14 +5031,14 @@ const _hoisted_1$U = {
5036
5031
  const _hoisted_2$D = {
5037
5032
  key: 0
5038
5033
  };
5039
- const _hoisted_3$u = {
5034
+ const _hoisted_3$v = {
5040
5035
  class: "error-list__list error-list--list-style-none"
5041
5036
  };
5042
5037
  const _hoisted_4$p = ["onClick"];
5043
5038
  const _hoisted_5$k = {
5044
5039
  class: "error-list__link"
5045
5040
  };
5046
- function _sfc_render$M(_ctx, _cache, $props, $setup, $data, $options) {
5041
+ function _sfc_render$L(_ctx, _cache, $props, $setup, $data, $options) {
5047
5042
  const _component_f_icon = resolveComponent("f-icon");
5048
5043
  const _component_i_flex_item = resolveComponent("i-flex-item");
5049
5044
  const _component_i_flex = resolveComponent("i-flex");
@@ -5066,7 +5061,7 @@ function _sfc_render$M(_ctx, _cache, $props, $setup, $data, $options) {
5066
5061
  })) : createCommentVNode("", true), _cache[7] || (_cache[7] = createTextVNode()), createVNode(_component_i_flex_item, {
5067
5062
  grow: ""
5068
5063
  }, {
5069
- default: withCtx(() => [_ctx.hasTitleSlot ? (openBlock(), createElementBlock("div", _hoisted_2$D, [renderSlot(_ctx.$slots, "title")])) : createCommentVNode("", true), _cache[5] || (_cache[5] = createTextVNode()), createElementVNode("ul", _hoisted_3$u, [(openBlock(true), createElementBlock(Fragment, null, renderList(_ctx.items, (item) => {
5064
+ default: withCtx(() => [_ctx.hasTitleSlot ? (openBlock(), createElementBlock("div", _hoisted_2$D, [renderSlot(_ctx.$slots, "title")])) : createCommentVNode("", true), _cache[5] || (_cache[5] = createTextVNode()), createElementVNode("ul", _hoisted_3$v, [(openBlock(true), createElementBlock(Fragment, null, renderList(_ctx.items, (item) => {
5070
5065
  return openBlock(), createElementBlock("li", {
5071
5066
  key: item.id,
5072
5067
  class: normalizeClass(_ctx.liClasses(item))
@@ -5097,7 +5092,7 @@ function _sfc_render$M(_ctx, _cache, $props, $setup, $data, $options) {
5097
5092
  _: 3
5098
5093
  })]);
5099
5094
  }
5100
- const FErrorList = /* @__PURE__ */ _export_sfc(_sfc_main$18, [["render", _sfc_render$M]]);
5095
+ const FErrorList = /* @__PURE__ */ _export_sfc(_sfc_main$18, [["render", _sfc_render$L]]);
5101
5096
  var es_iterator_every = {};
5102
5097
  var hasRequiredEs_iterator_every;
5103
5098
  function requireEs_iterator_every() {
@@ -5255,13 +5250,13 @@ const _sfc_main$17 = defineComponent({
5255
5250
  }
5256
5251
  }
5257
5252
  });
5258
- function _sfc_render$L(_ctx, _cache, $props, $setup, $data, $options) {
5253
+ function _sfc_render$K(_ctx, _cache, $props, $setup, $data, $options) {
5259
5254
  return openBlock(), createElementBlock("div", {
5260
5255
  onComponentValidity: _cache[0] || (_cache[0] = (...args) => _ctx.onComponentValidity && _ctx.onComponentValidity(...args)),
5261
5256
  onComponentUnmount: _cache[1] || (_cache[1] = (...args) => _ctx.onComponentUnmount && _ctx.onComponentUnmount(...args))
5262
5257
  }, [renderSlot(_ctx.$slots, "default")], 32);
5263
5258
  }
5264
- const FValidationGroup = /* @__PURE__ */ _export_sfc(_sfc_main$17, [["render", _sfc_render$L]]);
5259
+ const FValidationGroup = /* @__PURE__ */ _export_sfc(_sfc_main$17, [["render", _sfc_render$K]]);
5265
5260
  var FValidationFormAction = /* @__PURE__ */ ((FValidationFormAction2) => {
5266
5261
  FValidationFormAction2[FValidationFormAction2["CONTINUE"] = 0] = "CONTINUE";
5267
5262
  FValidationFormAction2[FValidationFormAction2["CANCEL"] = 1] = "CANCEL";
@@ -5413,7 +5408,7 @@ const _hoisted_2$C = {
5413
5408
  tabindex: "-1",
5414
5409
  role: "group"
5415
5410
  };
5416
- function _sfc_render$K(_ctx, _cache, $props, $setup, $data, $options) {
5411
+ function _sfc_render$J(_ctx, _cache, $props, $setup, $data, $options) {
5417
5412
  const _component_f_error_list = resolveComponent("f-error-list");
5418
5413
  const _component_f_validation_group = resolveComponent("f-validation-group");
5419
5414
  return openBlock(), createBlock(_component_f_validation_group, {
@@ -5439,7 +5434,7 @@ function _sfc_render$K(_ctx, _cache, $props, $setup, $data, $options) {
5439
5434
  _: 3
5440
5435
  }, 8, ["modelValue"]);
5441
5436
  }
5442
- const FValidationForm = /* @__PURE__ */ _export_sfc(_sfc_main$16, [["render", _sfc_render$K]]);
5437
+ const FValidationForm = /* @__PURE__ */ _export_sfc(_sfc_main$16, [["render", _sfc_render$J]]);
5443
5438
  const _sfc_main$15 = defineComponent({
5444
5439
  name: "FFormModal",
5445
5440
  components: {
@@ -5538,6 +5533,14 @@ const _sfc_main$15 = defineComponent({
5538
5533
  default() {
5539
5534
  }
5540
5535
  },
5536
+ /**
5537
+ * List of buttons to display in the modal.
5538
+ * Each button is defined as an FModalButtonDescriptor with the following properties:
5539
+ * - `label` (String): The text displayed on the button.
5540
+ * - `event` (String): The event emitted when the button is clicked.
5541
+ * - `type` (String): The button type. Valid values are: "primary" or "secondary".
5542
+ * - `submitButton` (Boolean): Whether the button is a submit button.
5543
+ */
5541
5544
  buttons: {
5542
5545
  type: Array,
5543
5546
  required: false,
@@ -5559,7 +5562,7 @@ const _sfc_main$15 = defineComponent({
5559
5562
  },
5560
5563
  computed: {
5561
5564
  preparedButtons() {
5562
- return prepareButtonList(this.buttons, FKUIConfigButtonOrder.RIGHT_TO_LEFT);
5565
+ return prepareButtonList(this.buttons);
5563
5566
  }
5564
5567
  },
5565
5568
  methods: {
@@ -5593,11 +5596,11 @@ const _hoisted_1$S = {
5593
5596
  class: "button-group"
5594
5597
  };
5595
5598
  const _hoisted_2$B = ["type", "form", "onClick"];
5596
- const _hoisted_3$t = {
5599
+ const _hoisted_3$u = {
5597
5600
  key: 0,
5598
5601
  class: "sr-only"
5599
5602
  };
5600
- function _sfc_render$J(_ctx, _cache, $props, $setup, $data, $options) {
5603
+ function _sfc_render$I(_ctx, _cache, $props, $setup, $data, $options) {
5601
5604
  const _component_f_validation_form = resolveComponent("f-validation-form");
5602
5605
  const _component_f_modal = resolveComponent("f-modal");
5603
5606
  return openBlock(), createBlock(_component_f_modal, {
@@ -5628,12 +5631,12 @@ function _sfc_render$J(_ctx, _cache, $props, $setup, $data, $options) {
5628
5631
  class: normalizeClass([button.classlist, "button-group__item"]),
5629
5632
  form: button.buttonType === "submit" ? _ctx.formId : void 0,
5630
5633
  onClick: ($event) => button.buttonType === "button" ? _ctx.onCancel() : false
5631
- }, [createElementVNode("span", null, toDisplayString(button.label), 1), _cache[2] || (_cache[2] = createTextVNode()), button.screenreader ? (openBlock(), createElementBlock("span", _hoisted_3$t, " " + toDisplayString(button.screenreader), 1)) : createCommentVNode("", true)], 10, _hoisted_2$B);
5634
+ }, [createElementVNode("span", null, toDisplayString(button.label), 1), _cache[2] || (_cache[2] = createTextVNode()), button.screenreader ? (openBlock(), createElementBlock("span", _hoisted_3$u, " " + toDisplayString(button.screenreader), 1)) : createCommentVNode("", true)], 10, _hoisted_2$B);
5632
5635
  }), 128))])]),
5633
5636
  _: 3
5634
5637
  }, 8, ["data-test", "fullscreen", "is-open", "size", "aria-close-text", "onClose"]);
5635
5638
  }
5636
- const FFormModal = /* @__PURE__ */ _export_sfc(_sfc_main$15, [["render", _sfc_render$J]]);
5639
+ const FFormModal = /* @__PURE__ */ _export_sfc(_sfc_main$15, [["render", _sfc_render$I]]);
5637
5640
  async function confirmModal(callingInstance, texts) {
5638
5641
  const buttons = [{
5639
5642
  label: texts.confirm,
@@ -5950,6 +5953,9 @@ const ValidationPrefixDirective = {
5950
5953
  };
5951
5954
  const ValidationPlugin = {
5952
5955
  install(app) {
5956
+ for (const validator of availableValidators) {
5957
+ ValidationService.registerValidator(validator);
5958
+ }
5953
5959
  app.directive("validation", ValidationDirective);
5954
5960
  app.directive("validationPrefix", ValidationPrefixDirective);
5955
5961
  }
@@ -6006,12 +6012,12 @@ const _sfc_main$14 = defineComponent({
6006
6012
  const _hoisted_1$R = {
6007
6013
  "data-test": "f-error-page"
6008
6014
  };
6009
- function _sfc_render$I(_ctx, _cache, $props, $setup, $data, $options) {
6015
+ function _sfc_render$H(_ctx, _cache, $props, $setup, $data, $options) {
6010
6016
  return openBlock(), createElementBlock("div", _hoisted_1$R, _cache[0] || (_cache[0] = [createElementVNode("h1", null, "Fel", -1), createTextVNode(), createElementVNode("p", null, "Ett fel har uppstått.", -1), createTextVNode(), createElementVNode("a", {
6011
6017
  href: "/"
6012
6018
  }, "Gå till startsidan", -1)]));
6013
6019
  }
6014
- const FErrorPage = /* @__PURE__ */ _export_sfc(_sfc_main$14, [["render", _sfc_render$I]]);
6020
+ const FErrorPage = /* @__PURE__ */ _export_sfc(_sfc_main$14, [["render", _sfc_render$H]]);
6015
6021
  const _sfc_main$13 = defineComponent({
6016
6022
  name: "FErrorHandlingApp",
6017
6023
  props: {
@@ -6041,7 +6047,7 @@ const _sfc_main$13 = defineComponent({
6041
6047
  });
6042
6048
  }
6043
6049
  });
6044
- function _sfc_render$H(_ctx, _cache, $props, $setup, $data, $options) {
6050
+ function _sfc_render$G(_ctx, _cache, $props, $setup, $data, $options) {
6045
6051
  return openBlock(), createElementBlock("div", null, [_ctx.hasError ? (openBlock(), createBlock(resolveDynamicComponent(_ctx.errorComponent), {
6046
6052
  key: 0,
6047
6053
  payload: _ctx.payload
@@ -6051,7 +6057,7 @@ function _sfc_render$H(_ctx, _cache, $props, $setup, $data, $options) {
6051
6057
  key: 2
6052
6058
  })]);
6053
6059
  }
6054
- const FErrorHandlingApp = /* @__PURE__ */ _export_sfc(_sfc_main$13, [["render", _sfc_render$H]]);
6060
+ const FErrorHandlingApp = /* @__PURE__ */ _export_sfc(_sfc_main$13, [["render", _sfc_render$G]]);
6055
6061
  function isMonthBefore(date, minDate) {
6056
6062
  return Boolean(minDate && date.isBefore(minDate.startOfMonth()));
6057
6063
  }
@@ -6212,7 +6218,7 @@ const _hoisted_2$A = {
6212
6218
  class: "calendar-navbar__month",
6213
6219
  tabindex: "-1"
6214
6220
  };
6215
- const _hoisted_3$s = ["aria-disabled", "aria-live"];
6221
+ const _hoisted_3$t = ["aria-disabled", "aria-live"];
6216
6222
  const _hoisted_4$o = {
6217
6223
  class: "sr-only"
6218
6224
  };
@@ -6220,7 +6226,7 @@ const _hoisted_5$j = ["aria-disabled", "aria-live"];
6220
6226
  const _hoisted_6$f = {
6221
6227
  class: "sr-only"
6222
6228
  };
6223
- function _sfc_render$G(_ctx, _cache, $props, $setup, $data, $options) {
6229
+ function _sfc_render$F(_ctx, _cache, $props, $setup, $data, $options) {
6224
6230
  const _component_f_icon = resolveComponent("f-icon");
6225
6231
  return openBlock(), createElementBlock("div", _hoisted_1$Q, [createElementVNode("div", _hoisted_2$A, toDisplayString(_ctx.currentText), 1), _cache[4] || (_cache[4] = createTextVNode()), createElementVNode("button", {
6226
6232
  ref: "previousButton",
@@ -6232,7 +6238,7 @@ function _sfc_render$G(_ctx, _cache, $props, $setup, $data, $options) {
6232
6238
  }, [createElementVNode("span", _hoisted_4$o, toDisplayString(_ctx.previousSrText), 1), _cache[2] || (_cache[2] = createTextVNode()), createVNode(_component_f_icon, {
6233
6239
  class: normalizeClass(_ctx.previousIconClasses),
6234
6240
  name: "arrow-right"
6235
- }, null, 8, ["class"])], 8, _hoisted_3$s), _cache[5] || (_cache[5] = createTextVNode()), createElementVNode("button", {
6241
+ }, null, 8, ["class"])], 8, _hoisted_3$t), _cache[5] || (_cache[5] = createTextVNode()), createElementVNode("button", {
6236
6242
  ref: "nextButton",
6237
6243
  class: "calendar-navbar__arrow calendar-navbar__arrow--next",
6238
6244
  type: "button",
@@ -6244,7 +6250,7 @@ function _sfc_render$G(_ctx, _cache, $props, $setup, $data, $options) {
6244
6250
  name: "arrow-right"
6245
6251
  }, null, 8, ["class"])], 8, _hoisted_5$j)]);
6246
6252
  }
6247
- const ICalendarNavbar = /* @__PURE__ */ _export_sfc(_sfc_main$12, [["render", _sfc_render$G]]);
6253
+ const ICalendarNavbar = /* @__PURE__ */ _export_sfc(_sfc_main$12, [["render", _sfc_render$F]]);
6248
6254
  function getDayStartOffset(days) {
6249
6255
  return days[0].weekDay - 1;
6250
6256
  }
@@ -6330,7 +6336,7 @@ const _hoisted_2$z = {
6330
6336
  key: 0,
6331
6337
  class: "calendar-month__col--week"
6332
6338
  };
6333
- const _hoisted_3$r = {
6339
+ const _hoisted_3$s = {
6334
6340
  key: 0,
6335
6341
  scope: "col",
6336
6342
  "aria-hidden": "true",
@@ -6345,7 +6351,7 @@ const _hoisted_6$e = {
6345
6351
  class: "calendar-month__cell calendar-month__cell--week-number",
6346
6352
  "aria-hidden": "true"
6347
6353
  };
6348
- const _hoisted_7$c = ["colspan"];
6354
+ const _hoisted_7$b = ["colspan"];
6349
6355
  const _hoisted_8$7 = ["colspan"];
6350
6356
  const _hoisted_9$5 = {
6351
6357
  key: 0,
@@ -6357,7 +6363,7 @@ const _hoisted_11$2 = {
6357
6363
  "aria-hidden": "true"
6358
6364
  };
6359
6365
  const _hoisted_12$2 = ["colspan"];
6360
- function _sfc_render$F(_ctx, _cache, $props, $setup, $data, $options) {
6366
+ function _sfc_render$E(_ctx, _cache, $props, $setup, $data, $options) {
6361
6367
  return openBlock(), createElementBlock("table", {
6362
6368
  class: "calendar-month__table",
6363
6369
  role: "grid",
@@ -6378,7 +6384,7 @@ function _sfc_render$F(_ctx, _cache, $props, $setup, $data, $options) {
6378
6384
  class: "calendar-month__col--day"
6379
6385
  }, null, -1)), _cache[14] || (_cache[14] = createTextVNode()), _cache[15] || (_cache[15] = createElementVNode("col", {
6380
6386
  class: "calendar-month__col--day"
6381
- }, null, -1))]), _cache[22] || (_cache[22] = createTextVNode()), createElementVNode("thead", null, [createElementVNode("tr", null, [!_ctx.internalHideWeekNumbers ? (openBlock(), createElementBlock("th", _hoisted_3$r)) : createCommentVNode("", true), _cache[16] || (_cache[16] = createTextVNode()), (openBlock(true), createElementBlock(Fragment, null, renderList(_ctx.weekdays, (weekday) => {
6387
+ }, null, -1))]), _cache[22] || (_cache[22] = createTextVNode()), createElementVNode("thead", null, [createElementVNode("tr", null, [!_ctx.internalHideWeekNumbers ? (openBlock(), createElementBlock("th", _hoisted_3$s)) : createCommentVNode("", true), _cache[16] || (_cache[16] = createTextVNode()), (openBlock(true), createElementBlock(Fragment, null, renderList(_ctx.weekdays, (weekday) => {
6382
6388
  return openBlock(), createElementBlock("th", {
6383
6389
  key: weekday.name,
6384
6390
  scope: "col",
@@ -6395,7 +6401,7 @@ function _sfc_render$F(_ctx, _cache, $props, $setup, $data, $options) {
6395
6401
  key: 1,
6396
6402
  class: "calendar-month__cell",
6397
6403
  colspan: _ctx.getDayStartOffset(week.days)
6398
- }, null, 8, _hoisted_7$c)) : createCommentVNode("", true), _cache[18] || (_cache[18] = createTextVNode()), (openBlock(true), createElementBlock(Fragment, null, renderList(week.days, (day) => {
6404
+ }, null, 8, _hoisted_7$b)) : createCommentVNode("", true), _cache[18] || (_cache[18] = createTextVNode()), (openBlock(true), createElementBlock(Fragment, null, renderList(week.days, (day) => {
6399
6405
  return openBlock(), createElementBlock("td", {
6400
6406
  key: day.toString(),
6401
6407
  class: "calendar-month__cell",
@@ -6420,7 +6426,7 @@ function _sfc_render$F(_ctx, _cache, $props, $setup, $data, $options) {
6420
6426
  "aria-hidden": "true"
6421
6427
  }, null, 8, _hoisted_12$2)])) : createCommentVNode("", true)])], 40, _hoisted_1$P);
6422
6428
  }
6423
- const ICalendarMonthGrid = /* @__PURE__ */ _export_sfc(_sfc_main$11, [["render", _sfc_render$F]]);
6429
+ const ICalendarMonthGrid = /* @__PURE__ */ _export_sfc(_sfc_main$11, [["render", _sfc_render$E]]);
6424
6430
  const DayStep = {
6425
6431
  ArrowRight: 1,
6426
6432
  ArrowLeft: -1,
@@ -6535,7 +6541,7 @@ const _sfc_main$10 = defineComponent({
6535
6541
  }
6536
6542
  });
6537
6543
  const _hoisted_1$O = ["data-date", "tabindex", "onClick", "onKeydown"];
6538
- function _sfc_render$E(_ctx, _cache, $props, $setup, $data, $options) {
6544
+ function _sfc_render$D(_ctx, _cache, $props, $setup, $data, $options) {
6539
6545
  const _component_i_calendar_month_grid = resolveComponent("i-calendar-month-grid");
6540
6546
  return openBlock(), createBlock(_component_i_calendar_month_grid, {
6541
6547
  value: _ctx.modelValue
@@ -6558,7 +6564,7 @@ function _sfc_render$E(_ctx, _cache, $props, $setup, $data, $options) {
6558
6564
  _: 3
6559
6565
  }, 8, ["value"]);
6560
6566
  }
6561
- const ICalendarMonth = /* @__PURE__ */ _export_sfc(_sfc_main$10, [["render", _sfc_render$E]]);
6567
+ const ICalendarMonth = /* @__PURE__ */ _export_sfc(_sfc_main$10, [["render", _sfc_render$D]]);
6562
6568
  const _sfc_main$$ = defineComponent({
6563
6569
  name: "FCalendar",
6564
6570
  components: {
@@ -6613,7 +6619,7 @@ const _sfc_main$$ = defineComponent({
6613
6619
  const _hoisted_1$N = {
6614
6620
  class: "calendar__wrapper"
6615
6621
  };
6616
- function _sfc_render$D(_ctx, _cache, $props, $setup, $data, $options) {
6622
+ function _sfc_render$C(_ctx, _cache, $props, $setup, $data, $options) {
6617
6623
  const _component_i_calendar_navbar = resolveComponent("i-calendar-navbar");
6618
6624
  const _component_i_calendar_month = resolveComponent("i-calendar-month");
6619
6625
  return openBlock(), createElementBlock("div", _hoisted_1$N, [createVNode(_component_i_calendar_navbar, {
@@ -6639,7 +6645,7 @@ function _sfc_render$D(_ctx, _cache, $props, $setup, $data, $options) {
6639
6645
  _: 3
6640
6646
  }, 8, ["model-value", "min-date", "max-date", "tab-date", "onClick", "onUpdate:modelValue"])]);
6641
6647
  }
6642
- const FCalendar = /* @__PURE__ */ _export_sfc(_sfc_main$$, [["render", _sfc_render$D]]);
6648
+ const FCalendar = /* @__PURE__ */ _export_sfc(_sfc_main$$, [["render", _sfc_render$C]]);
6643
6649
  function getCalendarDaySrText(day, enabled, selected, t) {
6644
6650
  const parts = [];
6645
6651
  if (!enabled) {
@@ -6729,12 +6735,12 @@ const _hoisted_1$M = {
6729
6735
  const _hoisted_2$y = {
6730
6736
  class: "sr-only"
6731
6737
  };
6732
- function _sfc_render$C(_ctx, _cache, $props, $setup, $data, $options) {
6738
+ function _sfc_render$B(_ctx, _cache, $props, $setup, $data, $options) {
6733
6739
  return openBlock(), createElementBlock("span", {
6734
6740
  class: normalizeClass(_ctx.dayClasses)
6735
6741
  }, [createElementVNode("span", _hoisted_1$M, toDisplayString(_ctx.day.day), 1), _cache[0] || (_cache[0] = createTextVNode()), createElementVNode("span", _hoisted_2$y, toDisplayString(_ctx.srText), 1)], 2);
6736
6742
  }
6737
- const FCalendarDay = /* @__PURE__ */ _export_sfc(_sfc_main$_, [["render", _sfc_render$C]]);
6743
+ const FCalendarDay = /* @__PURE__ */ _export_sfc(_sfc_main$_, [["render", _sfc_render$B]]);
6738
6744
  function useEventListener$1(target, event, callback) {
6739
6745
  onMounted(() => {
6740
6746
  var _a;
@@ -6760,7 +6766,7 @@ const _hoisted_2$x = {
6760
6766
  key: 0,
6761
6767
  class: "card__header"
6762
6768
  };
6763
- const _hoisted_3$q = {
6769
+ const _hoisted_3$r = {
6764
6770
  class: "card__content"
6765
6771
  };
6766
6772
  const _hoisted_4$m = {
@@ -6805,6 +6811,9 @@ const _sfc_main$Z = /* @__PURE__ */ defineComponent({
6805
6811
  if (!isMounted.value) {
6806
6812
  return;
6807
6813
  }
6814
+ if (detail.elementId !== props.id) {
6815
+ return;
6816
+ }
6808
6817
  if (!props.focusRef) {
6809
6818
  throw new Error("Element to focus on when card is invalid (`focusRef`) is required when using card validation.");
6810
6819
  }
@@ -6850,7 +6859,7 @@ const _sfc_main$Z = /* @__PURE__ */ defineComponent({
6850
6859
  _: 1
6851
6860
  })]),
6852
6861
  _: 1
6853
- })) : createCommentVNode("", true)]), _cache[2] || (_cache[2] = createTextVNode()), createElementVNode("div", _hoisted_3$q, [renderSlot(_ctx.$slots, "default")]), _cache[3] || (_cache[3] = createTextVNode()), hasFooterSlot.value ? (openBlock(), createElementBlock("div", _hoisted_4$m, [renderSlot(_ctx.$slots, "footer", normalizeProps(guardReactiveProps({
6862
+ })) : createCommentVNode("", true)]), _cache[2] || (_cache[2] = createTextVNode()), createElementVNode("div", _hoisted_3$r, [renderSlot(_ctx.$slots, "default")]), _cache[3] || (_cache[3] = createTextVNode()), hasFooterSlot.value ? (openBlock(), createElementBlock("div", _hoisted_4$m, [renderSlot(_ctx.$slots, "footer", normalizeProps(guardReactiveProps({
6854
6863
  hasError: hasError.value,
6855
6864
  validationMessage: validationMessage.value
6856
6865
  })))])) : createCommentVNode("", true)], 42, _hoisted_1$L);
@@ -6911,7 +6920,7 @@ const _sfc_main$Y = defineComponent({
6911
6920
  }
6912
6921
  }
6913
6922
  });
6914
- function _sfc_render$B(_ctx, _cache, $props, $setup, $data, $options) {
6923
+ function _sfc_render$A(_ctx, _cache, $props, $setup, $data, $options) {
6915
6924
  return openBlock(), createBlock(Transition, {
6916
6925
  onEnter: _ctx.enter,
6917
6926
  onAfterEnter: _ctx.afterEnter,
@@ -6923,7 +6932,7 @@ function _sfc_render$B(_ctx, _cache, $props, $setup, $data, $options) {
6923
6932
  _: 3
6924
6933
  }, 8, ["onEnter", "onAfterEnter", "onLeave"]);
6925
6934
  }
6926
- const FExpand = /* @__PURE__ */ _export_sfc(_sfc_main$Y, [["render", _sfc_render$B]]);
6935
+ const FExpand = /* @__PURE__ */ _export_sfc(_sfc_main$Y, [["render", _sfc_render$A]]);
6927
6936
  function offset(page, el) {
6928
6937
  const rect = el.getBoundingClientRect();
6929
6938
  return {
@@ -7489,7 +7498,7 @@ const _sfc_main$X = defineComponent({
7489
7498
  }
7490
7499
  }
7491
7500
  });
7492
- function _sfc_render$A(_ctx, _cache, $props, $setup, $data, $options) {
7501
+ function _sfc_render$z(_ctx, _cache, $props, $setup, $data, $options) {
7493
7502
  return _ctx.isOpen ? (openBlock(), createBlock(Teleport, {
7494
7503
  key: 0,
7495
7504
  to: _ctx.teleportTarget,
@@ -7510,7 +7519,7 @@ function _sfc_render$A(_ctx, _cache, $props, $setup, $data, $options) {
7510
7519
  placement: _ctx.placement
7511
7520
  })))], 544)], 16)], 8, ["to", "disabled"])) : createCommentVNode("", true);
7512
7521
  }
7513
- const IPopup = /* @__PURE__ */ _export_sfc(_sfc_main$X, [["render", _sfc_render$A]]);
7522
+ const IPopup = /* @__PURE__ */ _export_sfc(_sfc_main$X, [["render", _sfc_render$z]]);
7514
7523
  function computeArrowOffset(placement, inputIconRect, wrapperRect) {
7515
7524
  switch (placement) {
7516
7525
  case Placement.A: {
@@ -7716,7 +7725,7 @@ const _hoisted_1$K = {
7716
7725
  ref: "wrapper",
7717
7726
  class: "popup-error__wrapper"
7718
7727
  };
7719
- function _sfc_render$z(_ctx, _cache, $props, $setup, $data, $options) {
7728
+ function _sfc_render$y(_ctx, _cache, $props, $setup, $data, $options) {
7720
7729
  const _component_f_icon = resolveComponent("f-icon");
7721
7730
  return _ctx.isOpen ? (openBlock(), createBlock(Teleport, {
7722
7731
  key: 0,
@@ -7740,7 +7749,7 @@ function _sfc_render$z(_ctx, _cache, $props, $setup, $data, $options) {
7740
7749
  class: "button__icon"
7741
7750
  })])], 6)], 512)], 2)], 8, ["to", "disabled"])) : createCommentVNode("", true);
7742
7751
  }
7743
- const IPopupError = /* @__PURE__ */ _export_sfc(_sfc_main$W, [["render", _sfc_render$z]]);
7752
+ const IPopupError = /* @__PURE__ */ _export_sfc(_sfc_main$W, [["render", _sfc_render$y]]);
7744
7753
  function numItems(itemHeight, availableHeight, verticalSpacing) {
7745
7754
  const itemsFit = Math.floor((availableHeight - verticalSpacing) / itemHeight);
7746
7755
  return Math.min(itemsFit, 7);
@@ -8270,13 +8279,13 @@ const _hoisted_2$v = {
8270
8279
  role: "menu",
8271
8280
  class: "ipopupmenu__list"
8272
8281
  };
8273
- const _hoisted_3$p = ["onClick"];
8282
+ const _hoisted_3$q = ["onClick"];
8274
8283
  const _hoisted_4$l = ["data-ref-index", "href", "target"];
8275
8284
  const _hoisted_5$h = {
8276
8285
  key: 0,
8277
8286
  class: "sr-only"
8278
8287
  };
8279
- function _sfc_render$y(_ctx, _cache, $props, $setup, $data, $options) {
8288
+ function _sfc_render$x(_ctx, _cache, $props, $setup, $data, $options) {
8280
8289
  const _component_i_popup = resolveComponent("i-popup");
8281
8290
  return openBlock(), createBlock(_component_i_popup, {
8282
8291
  class: "ipopupmenu",
@@ -8307,12 +8316,12 @@ function _sfc_render$y(_ctx, _cache, $props, $setup, $data, $options) {
8307
8316
  role: "menuitem",
8308
8317
  target: item.target,
8309
8318
  tabindex: "0"
8310
- }, [_ctx.isSelected(index) ? (openBlock(), createElementBlock("span", _hoisted_5$h, [createElementVNode("span", null, toDisplayString(_ctx.selectedMenuItemScreenReaderText) + " ", 1)])) : createCommentVNode("", true), createTextVNode(" " + toDisplayString(item.label), 1)], 8, _hoisted_4$l)], 10, _hoisted_3$p);
8319
+ }, [_ctx.isSelected(index) ? (openBlock(), createElementBlock("span", _hoisted_5$h, [createElementVNode("span", null, toDisplayString(_ctx.selectedMenuItemScreenReaderText) + " ", 1)])) : createCommentVNode("", true), createTextVNode(" " + toDisplayString(item.label), 1)], 8, _hoisted_4$l)], 10, _hoisted_3$q);
8311
8320
  }), 128))])], 8, _hoisted_1$I)]),
8312
8321
  _: 1
8313
8322
  }, 8, ["is-open", "anchor", "focus-element", "onKeyup", "onKeydown"]);
8314
8323
  }
8315
- const IPopupMenu = /* @__PURE__ */ _export_sfc(_sfc_main$U, [["render", _sfc_render$y]]);
8324
+ const IPopupMenu = /* @__PURE__ */ _export_sfc(_sfc_main$U, [["render", _sfc_render$x]]);
8316
8325
  const ANIMATION_DURATION = 500;
8317
8326
  const NO_CSS_CLASSES = "";
8318
8327
  const CLOSED_CSS_CLASS_OPACITY = "animate-expand animate-expand--opacity";
@@ -8515,13 +8524,13 @@ const _hoisted_1$H = {
8515
8524
  ref: "content",
8516
8525
  "data-test": "animation-content"
8517
8526
  };
8518
- function _sfc_render$x(_ctx, _cache, $props, $setup, $data, $options) {
8527
+ function _sfc_render$w(_ctx, _cache, $props, $setup, $data, $options) {
8519
8528
  return openBlock(), createElementBlock("div", {
8520
8529
  class: normalizeClass(_ctx.animationClasses),
8521
8530
  style: normalizeStyle(_ctx.heightStyle)
8522
8531
  }, [_ctx.shouldVIf ? withDirectives((openBlock(), createElementBlock("div", _hoisted_1$H, [renderSlot(_ctx.$slots, "default")], 512)), [[vShow, _ctx.shouldVShow]]) : createCommentVNode("", true)], 6);
8523
8532
  }
8524
- const IAnimateExpand = /* @__PURE__ */ _export_sfc(_sfc_main$T, [["render", _sfc_render$x]]);
8533
+ const IAnimateExpand = /* @__PURE__ */ _export_sfc(_sfc_main$T, [["render", _sfc_render$w]]);
8525
8534
  const _sfc_main$S = defineComponent({
8526
8535
  name: "ISkipLink",
8527
8536
  mixins: [TranslationMixin],
@@ -8537,13 +8546,13 @@ const _sfc_main$S = defineComponent({
8537
8546
  }
8538
8547
  });
8539
8548
  const _hoisted_1$G = ["href"];
8540
- function _sfc_render$w(_ctx, _cache, $props, $setup, $data, $options) {
8549
+ function _sfc_render$v(_ctx, _cache, $props, $setup, $data, $options) {
8541
8550
  return openBlock(), createElementBlock("a", {
8542
8551
  class: "iskiplink",
8543
8552
  href: _ctx.href
8544
8553
  }, [renderSlot(_ctx.$slots, "default", {}, () => [createTextVNode(toDisplayString(_ctx.$t("fkui.skip-link.text", "Gå direkt till innehåll")), 1)])], 8, _hoisted_1$G);
8545
8554
  }
8546
- const ISkipLink = /* @__PURE__ */ _export_sfc(_sfc_main$S, [["render", _sfc_render$w]]);
8555
+ const ISkipLink = /* @__PURE__ */ _export_sfc(_sfc_main$S, [["render", _sfc_render$v]]);
8547
8556
  function filterOptions(options, filter2, selectMode) {
8548
8557
  if (isEmpty(filter2) || selectMode) {
8549
8558
  return options;
@@ -8793,7 +8802,7 @@ const _hoisted_1$F = {
8793
8802
  class: "combobox"
8794
8803
  };
8795
8804
  const _hoisted_2$u = ["id"];
8796
- const _hoisted_3$o = ["id", "aria-selected", "onClick"];
8805
+ const _hoisted_3$p = ["id", "aria-selected", "onClick"];
8797
8806
  const _sfc_main$R = /* @__PURE__ */ defineComponent({
8798
8807
  __name: "IComboboxDropdown",
8799
8808
  props: {
@@ -8855,7 +8864,7 @@ const _sfc_main$R = /* @__PURE__ */ defineComponent({
8855
8864
  "combobox__listbox__option--highlight": isOptionActive(item)
8856
8865
  }]),
8857
8866
  onClick: withModifiers(($event) => onOptionClick(item), ["stop", "prevent"])
8858
- }, toDisplayString(item), 11, _hoisted_3$o);
8867
+ }, toDisplayString(item), 11, _hoisted_3$p);
8859
8868
  }), 128))], 8, _hoisted_2$u)]),
8860
8869
  _: 1
8861
8870
  }, 8, ["is-open", "anchor", "num-of-items", "active-element"])]);
@@ -9147,7 +9156,7 @@ const _hoisted_1$D = ["aria-expanded"];
9147
9156
  const _hoisted_2$t = {
9148
9157
  class: "icon-stack icon-stack--tooltip"
9149
9158
  };
9150
- const _hoisted_3$n = {
9159
+ const _hoisted_3$o = {
9151
9160
  class: "sr-only"
9152
9161
  };
9153
9162
  const _hoisted_4$k = {
@@ -9161,7 +9170,7 @@ const _hoisted_5$g = {
9161
9170
  const _hoisted_6$d = {
9162
9171
  class: "tooltip__footer"
9163
9172
  };
9164
- function _sfc_render$v(_ctx, _cache, $props, $setup, $data, $options) {
9173
+ function _sfc_render$u(_ctx, _cache, $props, $setup, $data, $options) {
9165
9174
  const _component_f_icon = resolveComponent("f-icon");
9166
9175
  return openBlock(), createElementBlock(Fragment, null, [(openBlock(), createBlock(Teleport, {
9167
9176
  disabled: _ctx.iconTarget === null,
@@ -9176,7 +9185,7 @@ function _sfc_render$v(_ctx, _cache, $props, $setup, $data, $options) {
9176
9185
  name: "circle"
9177
9186
  }), _cache[2] || (_cache[2] = createTextVNode()), createVNode(_component_f_icon, {
9178
9187
  name: "i"
9179
- }), _cache[3] || (_cache[3] = createTextVNode()), createElementVNode("span", _hoisted_3$n, toDisplayString(_ctx.screenReaderText), 1)])], 8, _hoisted_1$D)], 8, ["disabled", "to"])), _cache[7] || (_cache[7] = createTextVNode()), createElementVNode("div", mergeProps({
9188
+ }), _cache[3] || (_cache[3] = createTextVNode()), createElementVNode("span", _hoisted_3$o, toDisplayString(_ctx.screenReaderText), 1)])], 8, _hoisted_1$D)], 8, ["disabled", "to"])), _cache[7] || (_cache[7] = createTextVNode()), createElementVNode("div", mergeProps({
9180
9189
  ref: "wrapper",
9181
9190
  class: "tooltip"
9182
9191
  }, _ctx.$attrs), [_ctx.ready ? (openBlock(), createElementBlock("div", _hoisted_4$k, [_ctx.hasHeader ? (openBlock(), createBlock(resolveDynamicComponent(_ctx.headerTag), {
@@ -9194,7 +9203,7 @@ function _sfc_render$v(_ctx, _cache, $props, $setup, $data, $options) {
9194
9203
  name: "close"
9195
9204
  })])])])) : createCommentVNode("", true)], 16)], 64);
9196
9205
  }
9197
- const FTooltip = /* @__PURE__ */ _export_sfc(_sfc_main$P, [["render", _sfc_render$v]]);
9206
+ const FTooltip = /* @__PURE__ */ _export_sfc(_sfc_main$P, [["render", _sfc_render$u]]);
9198
9207
  function* labelClasses(options) {
9199
9208
  const {
9200
9209
  labelClass
@@ -9468,7 +9477,7 @@ const _hoisted_2$s = {
9468
9477
  key: 0,
9469
9478
  class: "sr-only"
9470
9479
  };
9471
- const _hoisted_3$m = {
9480
+ const _hoisted_3$n = {
9472
9481
  key: 0,
9473
9482
  class: "label__message label__message--error"
9474
9483
  };
@@ -9484,7 +9493,7 @@ const _hoisted_5$f = {
9484
9493
  const _hoisted_6$c = {
9485
9494
  key: 1
9486
9495
  };
9487
- const _hoisted_7$b = {
9496
+ const _hoisted_7$a = {
9488
9497
  ref: "tooltipAttachTo",
9489
9498
  class: "label"
9490
9499
  };
@@ -9495,7 +9504,7 @@ const _hoisted_9$4 = {
9495
9504
  key: 0,
9496
9505
  class: "label__message label__message--error"
9497
9506
  };
9498
- function _sfc_render$u(_ctx, _cache, $props, $setup, $data, $options) {
9507
+ function _sfc_render$t(_ctx, _cache, $props, $setup, $data, $options) {
9499
9508
  const _component_f_icon = resolveComponent("f-icon");
9500
9509
  return openBlock(), createElementBlock("fieldset", {
9501
9510
  id: _ctx.id,
@@ -9510,12 +9519,12 @@ function _sfc_render$u(_ctx, _cache, $props, $setup, $data, $options) {
9510
9519
  }), _cache[3] || (_cache[3] = createTextVNode()), renderSlot(_ctx.$slots, "error-message", normalizeProps(guardReactiveProps({
9511
9520
  hasError: _ctx.hasError,
9512
9521
  validationMessage: _ctx.validity.validationMessage
9513
- })), () => [_ctx.hasError ? (openBlock(), createElementBlock("span", _hoisted_3$m, [createVNode(_component_f_icon, {
9522
+ })), () => [_ctx.hasError ? (openBlock(), createElementBlock("span", _hoisted_3$n, [createVNode(_component_f_icon, {
9514
9523
  class: "label__icon--left",
9515
9524
  name: "error"
9516
9525
  }), createTextVNode(" " + toDisplayString(_ctx.validity.validationMessage), 1)])) : createCommentVNode("", true)])], 2)), _cache[7] || (_cache[7] = createTextVNode()), _ctx.hasCheckbox ? (openBlock(), createElementBlock("span", _hoisted_4$j, [_ctx.children.length === 1 ? (openBlock(), createElementBlock("span", _hoisted_5$f, toDisplayString(_ctx.checkboxCheckedScreenReaderText), 1)) : (openBlock(), createElementBlock("span", _hoisted_6$c, toDisplayString(_ctx.numberOfCheckedCheckboxesScreenText), 1))])) : createCommentVNode("", true), _cache[8] || (_cache[8] = createTextVNode()), _ctx.hasTooltipSlot ? (openBlock(), createElementBlock(Fragment, {
9517
9526
  key: 1
9518
- }, [createElementVNode("div", _hoisted_7$b, [createElementVNode("span", _hoisted_8$6, [renderSlot(_ctx.$slots, "label")])], 512), _cache[5] || (_cache[5] = createTextVNode()), renderSlot(_ctx.$slots, "tooltip"), _cache[6] || (_cache[6] = createTextVNode()), _ctx.hasDescriptionSlot || _ctx.hasErrorMessageSlot || _ctx.hasError ? (openBlock(), createElementBlock("div", {
9527
+ }, [createElementVNode("div", _hoisted_7$a, [createElementVNode("span", _hoisted_8$6, [renderSlot(_ctx.$slots, "label")])], 512), _cache[5] || (_cache[5] = createTextVNode()), renderSlot(_ctx.$slots, "tooltip"), _cache[6] || (_cache[6] = createTextVNode()), _ctx.hasDescriptionSlot || _ctx.hasErrorMessageSlot || _ctx.hasError ? (openBlock(), createElementBlock("div", {
9519
9528
  key: 0,
9520
9529
  class: normalizeClass(["label", _ctx.groupLabelClass]),
9521
9530
  "aria-hidden": "true"
@@ -9532,7 +9541,7 @@ function _sfc_render$u(_ctx, _cache, $props, $setup, $data, $options) {
9532
9541
  class: normalizeClass(_ctx.groupContentClass)
9533
9542
  }, [renderSlot(_ctx.$slots, "default")], 2)], 42, _hoisted_1$C);
9534
9543
  }
9535
- const FFieldset = /* @__PURE__ */ _export_sfc(_sfc_main$O, [["render", _sfc_render$u]]);
9544
+ const FFieldset = /* @__PURE__ */ _export_sfc(_sfc_main$O, [["render", _sfc_render$t]]);
9536
9545
  const anyType$1 = [String, Object, Array, Number, Date, Boolean];
9537
9546
  const _sfc_main$N = defineComponent({
9538
9547
  name: "FCheckboxField",
@@ -9722,7 +9731,7 @@ const _sfc_main$N = defineComponent({
9722
9731
  });
9723
9732
  const _hoisted_1$B = ["id", "disabled"];
9724
9733
  const _hoisted_2$r = ["for"];
9725
- const _hoisted_3$l = {
9734
+ const _hoisted_3$m = {
9726
9735
  key: 0,
9727
9736
  class: "checkbox__details"
9728
9737
  };
@@ -9730,7 +9739,7 @@ const _hoisted_4$i = {
9730
9739
  key: 0,
9731
9740
  class: "checkbox__details"
9732
9741
  };
9733
- function _sfc_render$t(_ctx, _cache, $props, $setup, $data, $options) {
9742
+ function _sfc_render$s(_ctx, _cache, $props, $setup, $data, $options) {
9734
9743
  return openBlock(), createElementBlock("div", {
9735
9744
  class: normalizeClass(["checkbox", _ctx.disabledClass]),
9736
9745
  onValidity: _cache[2] || (_cache[2] = (...args) => _ctx.onValidity && _ctx.onValidity(...args))
@@ -9748,7 +9757,7 @@ function _sfc_render$t(_ctx, _cache, $props, $setup, $data, $options) {
9748
9757
  for: _ctx.id
9749
9758
  }, [renderSlot(_ctx.$slots, "default"), _cache[8] || (_cache[8] = createTextVNode()), _ctx.$slots.details ? (openBlock(), createElementBlock(Fragment, {
9750
9759
  key: 0
9751
- }, [_ctx.showDetails === "always" ? (openBlock(), createElementBlock("span", _hoisted_3$l, [_cache[3] || (_cache[3] = createElementVNode("br", null, null, -1)), _cache[4] || (_cache[4] = createTextVNode()), renderSlot(_ctx.$slots, "details")])) : createCommentVNode("", true), _cache[7] || (_cache[7] = createTextVNode()), _ctx.showDetails === "when-selected" ? (openBlock(), createBlock(Transition, {
9760
+ }, [_ctx.showDetails === "always" ? (openBlock(), createElementBlock("span", _hoisted_3$m, [_cache[3] || (_cache[3] = createElementVNode("br", null, null, -1)), _cache[4] || (_cache[4] = createTextVNode()), renderSlot(_ctx.$slots, "details")])) : createCommentVNode("", true), _cache[7] || (_cache[7] = createTextVNode()), _ctx.showDetails === "when-selected" ? (openBlock(), createBlock(Transition, {
9752
9761
  key: 1,
9753
9762
  onEnter: _ctx.enter,
9754
9763
  onAfterEnter: _ctx.afterEnter,
@@ -9760,7 +9769,7 @@ function _sfc_render$t(_ctx, _cache, $props, $setup, $data, $options) {
9760
9769
  _: 3
9761
9770
  }, 8, ["onEnter", "onAfterEnter", "onLeave"])) : createCommentVNode("", true)], 64)) : createCommentVNode("", true)], 10, _hoisted_2$r)], 34);
9762
9771
  }
9763
- const FCheckboxField = /* @__PURE__ */ _export_sfc(_sfc_main$N, [["render", _sfc_render$t]]);
9772
+ const FCheckboxField = /* @__PURE__ */ _export_sfc(_sfc_main$N, [["render", _sfc_render$s]]);
9764
9773
  var es_iterator_some = {};
9765
9774
  var hasRequiredEs_iterator_some;
9766
9775
  function requireEs_iterator_some() {
@@ -10010,13 +10019,13 @@ const _hoisted_2$q = {
10010
10019
  tabindex: "-1",
10011
10020
  class: "contextmenu__list"
10012
10021
  };
10013
- const _hoisted_3$k = ["onClick"];
10022
+ const _hoisted_3$l = ["onClick"];
10014
10023
  const _hoisted_4$h = ["tabindex"];
10015
10024
  const _hoisted_5$e = {
10016
10025
  key: 0,
10017
10026
  class: "contextmenu__separator"
10018
10027
  };
10019
- function _sfc_render$s(_ctx, _cache, $props, $setup, $data, $options) {
10028
+ function _sfc_render$r(_ctx, _cache, $props, $setup, $data, $options) {
10020
10029
  const _component_f_icon = resolveComponent("f-icon");
10021
10030
  const _component_i_popup = resolveComponent("i-popup");
10022
10031
  return openBlock(), createBlock(_component_i_popup, {
@@ -10051,12 +10060,12 @@ function _sfc_render$s(_ctx, _cache, $props, $setup, $data, $options) {
10051
10060
  }, null, 8, ["name", "library"])) : createCommentVNode("", true), _cache[3] || (_cache[3] = createTextVNode()), createElementVNode("a", {
10052
10061
  ref_for: true,
10053
10062
  ref: "anchors"
10054
- }, toDisplayString(item.label), 513)], 8, _hoisted_4$h), _cache[4] || (_cache[4] = createTextVNode()), _ctx.hasSeparatorAfterItemAt(index) ? (openBlock(), createElementBlock("hr", _hoisted_5$e)) : createCommentVNode("", true)], 8, _hoisted_3$k);
10063
+ }, toDisplayString(item.label), 513)], 8, _hoisted_4$h), _cache[4] || (_cache[4] = createTextVNode()), _ctx.hasSeparatorAfterItemAt(index) ? (openBlock(), createElementBlock("hr", _hoisted_5$e)) : createCommentVNode("", true)], 8, _hoisted_3$l);
10055
10064
  }), 128))], 512)], 40, _hoisted_1$A)]),
10056
10065
  _: 1
10057
10066
  }, 8, ["is-open", "anchor", "focus-element"]);
10058
10067
  }
10059
- const FContextMenu = /* @__PURE__ */ _export_sfc(_sfc_main$M, [["render", _sfc_render$s]]);
10068
+ const FContextMenu = /* @__PURE__ */ _export_sfc(_sfc_main$M, [["render", _sfc_render$r]]);
10060
10069
  var Operation = /* @__PURE__ */ ((Operation2) => {
10061
10070
  Operation2[Operation2["ADD"] = 0] = "ADD";
10062
10071
  Operation2[Operation2["DELETE"] = 1] = "DELETE";
@@ -10300,7 +10309,7 @@ const _sfc_main$L = /* @__PURE__ */ defineComponent({
10300
10309
  isFormModalOpen.value = true;
10301
10310
  }
10302
10311
  return (_ctx, _cache) => {
10303
- return openBlock(), createElementBlock("div", _hoisted_1$z, [renderSlot(_ctx.$slots, "default"), _cache[5] || (_cache[5] = createTextVNode()), hasAddSlot.value ? (openBlock(), createElementBlock("div", _hoisted_2$p, [createElementVNode("button", {
10312
+ return openBlock(), createElementBlock("div", _hoisted_1$z, [renderSlot(_ctx.$slots, "default"), _cache[6] || (_cache[6] = createTextVNode()), hasAddSlot.value ? (openBlock(), createElementBlock("div", _hoisted_2$p, [createElementVNode("button", {
10304
10313
  "data-test": "f-crud-dataset-add-button",
10305
10314
  type: "button",
10306
10315
  class: "button button--tertiary crud-dataset__add-button",
@@ -10308,7 +10317,9 @@ const _sfc_main$L = /* @__PURE__ */ defineComponent({
10308
10317
  }, [createVNode(unref(FIcon), {
10309
10318
  class: "button__icon",
10310
10319
  name: "plus"
10311
- }), _cache[1] || (_cache[1] = createTextVNode()), renderSlot(_ctx.$slots, "add-button", {}, () => [createTextVNode(toDisplayString(unref($t2)("fkui.crud-dataset.button.add", "Lägg till ny")), 1)])])])) : createCommentVNode("", true), _cache[6] || (_cache[6] = createTextVNode()), createVNode(unref(FFormModal), {
10320
+ }), _cache[1] || (_cache[1] = createTextVNode()), renderSlot(_ctx.$slots, "add-button", {}, () => [createTextVNode(toDisplayString(unref($t2)("fkui.crud-dataset.button.add", "Lägg till ny")), 1)])]), _cache[2] || (_cache[2] = createTextVNode()), renderSlot(_ctx.$slots, "buttons", normalizeProps(guardReactiveProps({
10321
+ buttonClasses: ["button", "button--tertiary", "crud-dataset__add-button"]
10322
+ })))])) : createCommentVNode("", true), _cache[7] || (_cache[7] = createTextVNode()), createVNode(unref(FFormModal), {
10312
10323
  "is-open": isFormModalOpen.value,
10313
10324
  "aria-close-text": unref($t2)("fkui.crud-dataset.modal.close", "Stäng"),
10314
10325
  buttons: formModalButtons.value,
@@ -10325,13 +10336,13 @@ const _sfc_main$L = /* @__PURE__ */ defineComponent({
10325
10336
  key: 0
10326
10337
  }, {
10327
10338
  item: item.value
10328
- }))) : createCommentVNode("", true), _cache[2] || (_cache[2] = createTextVNode()), operation.value === unref(Operation).MODIFY ? renderSlot(_ctx.$slots, "modify", normalizeProps(mergeProps({
10339
+ }))) : createCommentVNode("", true), _cache[3] || (_cache[3] = createTextVNode()), operation.value === unref(Operation).MODIFY ? renderSlot(_ctx.$slots, "modify", normalizeProps(mergeProps({
10329
10340
  key: 1
10330
10341
  }, {
10331
10342
  item: item.value
10332
10343
  }))) : createCommentVNode("", true)]),
10333
10344
  _: 3
10334
- }, 8, ["is-open", "aria-close-text", "buttons", "before-submit", "before-validation", "on-cancel", "onCancel"]), _cache[7] || (_cache[7] = createTextVNode()), createVNode(unref(FConfirmModal), {
10345
+ }, 8, ["is-open", "aria-close-text", "buttons", "before-submit", "before-validation", "on-cancel", "onCancel"]), _cache[8] || (_cache[8] = createTextVNode()), createVNode(unref(FConfirmModal), {
10335
10346
  "is-open": isConfirmModalOpen.value,
10336
10347
  buttons: confirmDeleteButtons.value,
10337
10348
  onConfirm: onDeleteConfirm,
@@ -10359,6 +10370,10 @@ const _sfc_main$K = defineComponent({
10359
10370
  },
10360
10371
  mixins: [TranslationMixin],
10361
10372
  props: {
10373
+ /**
10374
+ * The action to be performed by the button.
10375
+ * Must be one of the following values: "delete" or "modify".
10376
+ */
10362
10377
  action: {
10363
10378
  type: String,
10364
10379
  required: true,
@@ -10366,14 +10381,24 @@ const _sfc_main$K = defineComponent({
10366
10381
  return ["delete", "modify"].includes(value);
10367
10382
  }
10368
10383
  },
10384
+ /**
10385
+ * Determines if an icon should be displayed on the button.
10386
+ */
10369
10387
  icon: {
10370
10388
  type: Boolean,
10371
10389
  default: false
10372
10390
  },
10391
+ /**
10392
+ * The item that the action will be performed on.
10393
+ */
10373
10394
  item: {
10374
10395
  type: Object,
10375
10396
  required: true
10376
10397
  },
10398
+ /**
10399
+ * Determines if the button should display a label.
10400
+ * If false, the button will use a visually hidden text for accessibility.
10401
+ */
10377
10402
  label: {
10378
10403
  type: Boolean,
10379
10404
  default: false
@@ -10412,7 +10437,7 @@ const _hoisted_1$y = {
10412
10437
  key: 1,
10413
10438
  class: "sr-only"
10414
10439
  };
10415
- function _sfc_render$r(_ctx, _cache, $props, $setup, $data, $options) {
10440
+ function _sfc_render$q(_ctx, _cache, $props, $setup, $data, $options) {
10416
10441
  const _component_f_icon = resolveComponent("f-icon");
10417
10442
  return openBlock(), createElementBlock("button", {
10418
10443
  type: "button",
@@ -10426,7 +10451,7 @@ function _sfc_render$r(_ctx, _cache, $props, $setup, $data, $options) {
10426
10451
  key: 2
10427
10452
  }, () => [createTextVNode(toDisplayString(_ctx.buttonText), 1)]) : createCommentVNode("", true)]);
10428
10453
  }
10429
- const FCrudButton = /* @__PURE__ */ _export_sfc(_sfc_main$K, [["render", _sfc_render$r]]);
10454
+ const FCrudButton = /* @__PURE__ */ _export_sfc(_sfc_main$K, [["render", _sfc_render$q]]);
10430
10455
  function ActivateItemInjected() {
10431
10456
  return {
10432
10457
  registerCallbackAfterItemAdd: inject("registerCallbackAfterItemAdd", () => void 0),
@@ -11017,13 +11042,19 @@ var FTableColumnSort = /* @__PURE__ */ ((FTableColumnSort2) => {
11017
11042
  return FTableColumnSort2;
11018
11043
  })(FTableColumnSort || {});
11019
11044
  function addColumn(src, column) {
11020
- if (!src.some((col) => col.name === column.name)) {
11045
+ if (column.name) {
11046
+ const hasDuplicateName = src.some((it) => it.name === column.name);
11047
+ if (hasDuplicateName) {
11048
+ throw new Error(`Expected FTableColumn to have a unique name but encountered duplicate of "${column.name}"`);
11049
+ }
11050
+ }
11051
+ if (!src.some((col) => col.id === column.id)) {
11021
11052
  return [...src, column];
11022
11053
  }
11023
11054
  return src;
11024
11055
  }
11025
11056
  function setVisibilityColumn(src, id, visible) {
11026
- const column = src.find((col) => col.name === id);
11057
+ const column = src.find((col) => col.id === id);
11027
11058
  if (column) {
11028
11059
  column.visible = visible;
11029
11060
  }
@@ -11075,19 +11106,21 @@ function FTableInjected() {
11075
11106
  renderColumns: inject("renderColumns", false)
11076
11107
  };
11077
11108
  }
11078
- const _sfc_main$J = defineComponent({
11079
- name: "FTableColumn",
11080
- inheritAttrs: false,
11109
+ const _sfc_main$J = /* @__PURE__ */ defineComponent({
11110
+ ...{
11111
+ inheritAttrs: false
11112
+ },
11113
+ __name: "FTableColumn",
11081
11114
  props: {
11082
11115
  /**
11083
- * Unique (per-table) identifier.
11116
+ * Unique (per-table) identifier. Typically set to the row
11117
+ * property displayed but any unique string can be used.
11084
11118
  *
11085
- * Typically set to the row property displayed but any unique string can
11086
- * be used.
11119
+ * Only required when used with `FSortFilterDataset`.
11087
11120
  */
11088
11121
  name: {
11089
11122
  type: String,
11090
- required: true
11123
+ default: void 0
11091
11124
  },
11092
11125
  /**
11093
11126
  * If set to true, display the column, set to false to hide it.
@@ -11164,71 +11197,80 @@ const _sfc_main$J = defineComponent({
11164
11197
  }
11165
11198
  }
11166
11199
  },
11167
- setup() {
11200
+ setup(__props) {
11168
11201
  const {
11169
11202
  renderColumns,
11170
11203
  setVisibilityColumn: setVisibilityColumn2,
11171
11204
  addColumn: addColumn2
11172
11205
  } = FTableInjected();
11173
- return {
11174
- renderColumns,
11175
- setVisibilityColumn: setVisibilityColumn2,
11176
- addColumn: addColumn2
11177
- };
11178
- },
11179
- computed: {
11180
- classes() {
11181
- return ["table__column", `table__column--${this.type}`];
11182
- },
11183
- scope() {
11184
- return this.rowHeader ? "row" : null;
11185
- },
11186
- tagName() {
11187
- if (this.rowHeader) {
11206
+ const internalVisible = ref(true);
11207
+ const renderElement = ref(true);
11208
+ const id = ElementIdService.generateElementId("column");
11209
+ const el = useTemplateRef("element");
11210
+ const props = __props;
11211
+ const classes = computed(() => {
11212
+ return ["table__column", `table__column--${props.type}`];
11213
+ });
11214
+ const scope = computed(() => {
11215
+ return props.rowHeader ? "row" : null;
11216
+ });
11217
+ const tagName2 = computed(() => {
11218
+ if (props.rowHeader) {
11188
11219
  return "th";
11189
11220
  } else {
11190
11221
  return "td";
11191
11222
  }
11192
- }
11193
- },
11194
- watch: {
11195
- visible: {
11196
- handler: function() {
11197
- this.setVisibilityColumn(this.name, this.visible);
11223
+ });
11224
+ watch(() => props.visible, () => {
11225
+ internalVisible.value = props.visible;
11226
+ setVisibilityColumn2(id, props.visible);
11227
+ });
11228
+ onMounted(() => {
11229
+ if (props.shrink && props.expand) {
11230
+ throw new Error("Table cannot have both shrink and expand enabled at the same time");
11231
+ }
11232
+ const size = props.shrink ? FTableColumnSize.SHRINK : FTableColumnSize.EXPAND;
11233
+ const header = isHeader();
11234
+ if (header) {
11235
+ addColumn2({
11236
+ name: props.name,
11237
+ title: props.title,
11238
+ description: props.description || void 0,
11239
+ id,
11240
+ size,
11241
+ type: props.type,
11242
+ visible: props.visible,
11243
+ sortable: false,
11244
+ sort: FTableColumnSort.UNSORTED
11245
+ });
11198
11246
  }
11199
- }
11200
- },
11201
- created() {
11202
- if (this.shrink && this.expand) {
11203
- throw new Error("Table cannot have both shrink and expand enabled at the same time");
11204
- }
11205
- const size = this.shrink ? FTableColumnSize.SHRINK : FTableColumnSize.EXPAND;
11206
- this.addColumn({
11207
- name: this.name,
11208
- title: this.title,
11209
- description: this.description || void 0,
11210
- id: ElementIdService.generateElementId("column"),
11211
- size,
11212
- type: this.type,
11213
- visible: this.visible,
11214
- sortable: false,
11215
- sort: FTableColumnSort.UNSORTED
11247
+ renderElement.value = renderColumns && !header;
11248
+ internalVisible.value = props.visible;
11216
11249
  });
11250
+ function isHeader() {
11251
+ if (!el.value || !(el.value instanceof HTMLElement)) {
11252
+ return false;
11253
+ }
11254
+ const closest = el.value.closest("thead, tbody");
11255
+ return (closest == null ? void 0 : closest.tagName) === "THEAD";
11256
+ }
11257
+ return (_ctx, _cache) => {
11258
+ return renderElement.value && internalVisible.value ? (openBlock(), createBlock(resolveDynamicComponent(tagName2.value), mergeProps({
11259
+ key: 0,
11260
+ ref: "element",
11261
+ class: classes.value,
11262
+ scope: scope.value
11263
+ }, _ctx.$attrs), {
11264
+ default: withCtx(() => [unref(renderColumns) ? (openBlock(), createElementBlock(Fragment, {
11265
+ key: 0
11266
+ }, [renderSlot(_ctx.$slots, "default"), _cache[0] || (_cache[0] = createTextVNode()), _cache[1] || (_cache[1] = createElementVNode("span", {
11267
+ class: "sr-only"
11268
+ }, " ", -1))], 64)) : createCommentVNode("", true)]),
11269
+ _: 3
11270
+ }, 16, ["class", "scope"])) : createCommentVNode("", true);
11271
+ };
11217
11272
  }
11218
11273
  });
11219
- function _sfc_render$q(_ctx, _cache, $props, $setup, $data, $options) {
11220
- return _ctx.renderColumns && _ctx.visible ? (openBlock(), createBlock(resolveDynamicComponent(_ctx.tagName), mergeProps({
11221
- key: 0,
11222
- class: _ctx.classes,
11223
- scope: _ctx.scope
11224
- }, _ctx.$attrs), {
11225
- default: withCtx(() => [renderSlot(_ctx.$slots, "default"), _cache[0] || (_cache[0] = createTextVNode()), _cache[1] || (_cache[1] = createElementVNode("span", {
11226
- class: "sr-only"
11227
- }, " ", -1))]),
11228
- _: 3
11229
- }, 16, ["class", "scope"])) : createCommentVNode("", true);
11230
- }
11231
- const FTableColumn = /* @__PURE__ */ _export_sfc(_sfc_main$J, [["render", _sfc_render$q]]);
11232
11274
  function FSortFilterDatasetInjected() {
11233
11275
  return {
11234
11276
  sort: inject("sort", () => void 0),
@@ -11282,14 +11324,14 @@ const _hoisted_2$o = {
11282
11324
  key: 0,
11283
11325
  ref: "tooltipAttachTo"
11284
11326
  };
11285
- const _hoisted_3$j = ["for"];
11327
+ const _hoisted_3$k = ["for"];
11286
11328
  const _hoisted_4$g = ["for"];
11287
11329
  const _hoisted_5$d = {
11288
11330
  key: 0,
11289
11331
  class: "label__message label__message--error"
11290
11332
  };
11291
11333
  const _hoisted_6$b = ["for"];
11292
- const _hoisted_7$a = {
11334
+ const _hoisted_7$9 = {
11293
11335
  key: 0,
11294
11336
  class: "label__message label__message--error"
11295
11337
  };
@@ -11298,7 +11340,7 @@ function _sfc_render$p(_ctx, _cache, $props, $setup, $data, $options) {
11298
11340
  return _ctx.$slots.tooltip ? (openBlock(), createElementBlock("div", _hoisted_1$x, [_ctx.hasDefaultSlot ? (openBlock(), createElementBlock("div", _hoisted_2$o, [createElementVNode("label", {
11299
11341
  class: "label",
11300
11342
  for: _ctx.forProperty
11301
- }, [renderSlot(_ctx.$slots, "default")], 8, _hoisted_3$j)], 512)) : createCommentVNode("", true), _cache[2] || (_cache[2] = createTextVNode()), renderSlot(_ctx.$slots, "tooltip"), _cache[3] || (_cache[3] = createTextVNode()), _ctx.hasDescriptionSlot || _ctx.hasErrorMessageSlot ? (openBlock(), createElementBlock("label", {
11343
+ }, [renderSlot(_ctx.$slots, "default")], 8, _hoisted_3$k)], 512)) : createCommentVNode("", true), _cache[2] || (_cache[2] = createTextVNode()), renderSlot(_ctx.$slots, "tooltip"), _cache[3] || (_cache[3] = createTextVNode()), _ctx.hasDescriptionSlot || _ctx.hasErrorMessageSlot ? (openBlock(), createElementBlock("label", {
11302
11344
  key: 1,
11303
11345
  class: "label sr-separator",
11304
11346
  for: _ctx.forProperty
@@ -11315,7 +11357,7 @@ function _sfc_render$p(_ctx, _cache, $props, $setup, $data, $options) {
11315
11357
  }, [renderSlot(_ctx.$slots, "default"), _cache[5] || (_cache[5] = createTextVNode()), renderSlot(_ctx.$slots, "description", {
11316
11358
  descriptionClass: _ctx.descriptionClass,
11317
11359
  formatDescriptionClass: _ctx.formatDescriptionClass
11318
- }), _cache[6] || (_cache[6] = createTextVNode()), _ctx.hasErrorMessageSlot ? (openBlock(), createElementBlock("span", _hoisted_7$a, [createVNode(_component_f_icon, {
11360
+ }), _cache[6] || (_cache[6] = createTextVNode()), _ctx.hasErrorMessageSlot ? (openBlock(), createElementBlock("span", _hoisted_7$9, [createVNode(_component_f_icon, {
11319
11361
  class: "label__icon--left",
11320
11362
  name: "error"
11321
11363
  }), _cache[4] || (_cache[4] = createTextVNode()), renderSlot(_ctx.$slots, "error-message")])) : createCommentVNode("", true)], 8, _hoisted_6$b));
@@ -11893,7 +11935,7 @@ const _hoisted_2$n = {
11893
11935
  key: 0,
11894
11936
  class: "sr-only"
11895
11937
  };
11896
- const _hoisted_3$i = {
11938
+ const _hoisted_3$j = {
11897
11939
  key: 0,
11898
11940
  class: "sr-only"
11899
11941
  };
@@ -11905,7 +11947,7 @@ const _hoisted_6$a = {
11905
11947
  key: 2,
11906
11948
  class: "text-field__append-inner"
11907
11949
  };
11908
- const _hoisted_7$9 = {
11950
+ const _hoisted_7$8 = {
11909
11951
  key: 3,
11910
11952
  class: "text-field__append-inner"
11911
11953
  };
@@ -11936,7 +11978,7 @@ function _sfc_render$n(_ctx, _cache, $props, $setup, $data, $options) {
11936
11978
  }, [_ctx.descriptionScreenReaderText ? (openBlock(), createElementBlock("span", _hoisted_2$n, toDisplayString(_ctx.descriptionScreenReaderText), 1)) : createCommentVNode("", true), _cache[7] || (_cache[7] = createTextVNode()), createElementVNode("span", null, toDisplayString(_ctx.descriptionText), 1)], 2)) : createCommentVNode("", true), _cache[9] || (_cache[9] = createTextVNode()), _ctx.discreteDescriptionText ? (openBlock(), createElementBlock("span", {
11937
11979
  key: 1,
11938
11980
  class: normalizeClass(formatDescriptionClass)
11939
- }, [_ctx.discreteDescriptionScreenReaderText ? (openBlock(), createElementBlock("span", _hoisted_3$i, toDisplayString(_ctx.discreteDescriptionScreenReaderText), 1)) : createCommentVNode("", true), _cache[8] || (_cache[8] = createTextVNode()), createElementVNode("span", null, toDisplayString(_ctx.discreteDescriptionText), 1)], 2)) : createCommentVNode("", true)])]),
11981
+ }, [_ctx.discreteDescriptionScreenReaderText ? (openBlock(), createElementBlock("span", _hoisted_3$j, toDisplayString(_ctx.discreteDescriptionScreenReaderText), 1)) : createCommentVNode("", true), _cache[8] || (_cache[8] = createTextVNode()), createElementVNode("span", null, toDisplayString(_ctx.discreteDescriptionText), 1)], 2)) : createCommentVNode("", true)])]),
11940
11982
  "error-message": withCtx(() => [renderSlot(_ctx.$slots, "error-message", normalizeProps(guardReactiveProps({
11941
11983
  hasError: _ctx.hasError,
11942
11984
  validationMessage: _ctx.validationMessage
@@ -11975,7 +12017,7 @@ function _sfc_render$n(_ctx, _cache, $props, $setup, $data, $options) {
11975
12017
  "is-open": _ctx.showPopupError,
11976
12018
  "error-message": _ctx.validationMessage,
11977
12019
  onClose: _ctx.closePopupError
11978
- }, null, 8, ["anchor", "is-open", "error-message", "onClose"])) : createCommentVNode("", true), _cache[15] || (_cache[15] = createTextVNode()), _ctx.$slots["append-inner"] ? (openBlock(), createElementBlock("div", _hoisted_6$a, [renderSlot(_ctx.$slots, "append-inner")])) : createCommentVNode("", true), _cache[16] || (_cache[16] = createTextVNode()), _ctx.options ? (openBlock(), createElementBlock("div", _hoisted_7$9, [createVNode(_component_i_combobox_toggle_button, {
12020
+ }, null, 8, ["anchor", "is-open", "error-message", "onClose"])) : createCommentVNode("", true), _cache[15] || (_cache[15] = createTextVNode()), _ctx.$slots["append-inner"] ? (openBlock(), createElementBlock("div", _hoisted_6$a, [renderSlot(_ctx.$slots, "append-inner")])) : createCommentVNode("", true), _cache[16] || (_cache[16] = createTextVNode()), _ctx.options ? (openBlock(), createElementBlock("div", _hoisted_7$8, [createVNode(_component_i_combobox_toggle_button, {
11979
12021
  disabled: _ctx.disabled,
11980
12022
  "aria-controls": _ctx.dropdownIsOpen ? _ctx.dropdownId : void 0,
11981
12023
  "aria-expanded": _ctx.dropdownIsOpen,
@@ -12823,20 +12865,14 @@ const _hoisted_1$s = {
12823
12865
  const _hoisted_2$m = {
12824
12866
  class: "sort-filter-dataset__search"
12825
12867
  };
12826
- const _hoisted_3$h = {
12868
+ const _hoisted_3$i = {
12827
12869
  class: "sr-only"
12828
12870
  };
12829
12871
  const _hoisted_4$e = ["title"];
12830
12872
  const _hoisted_5$b = {
12831
12873
  class: "sr-only"
12832
12874
  };
12833
- const _hoisted_6$9 = {
12834
- value: {
12835
- attribute: "",
12836
- ascending: false
12837
- }
12838
- };
12839
- const _hoisted_7$8 = ["value"];
12875
+ const _hoisted_6$9 = ["value"];
12840
12876
  const _sfc_main$s = /* @__PURE__ */ defineComponent({
12841
12877
  __name: "FSortFilterDataset",
12842
12878
  props: {
@@ -12904,13 +12940,14 @@ const _sfc_main$s = /* @__PURE__ */ defineComponent({
12904
12940
  }) {
12905
12941
  const $t2 = useTranslate();
12906
12942
  const searchString = ref("");
12907
- const sortAttribute = ref({
12943
+ const defaultSortValue = {
12908
12944
  attribute: "",
12909
12945
  name: "",
12910
12946
  ascendingName: "",
12911
12947
  ascending: false,
12912
12948
  id: 0
12913
- });
12949
+ };
12950
+ const sortAttribute = ref(defaultSortValue);
12914
12951
  const sortFilterResult = ref([]);
12915
12952
  const debouncedFilterResultset = debounce(filterResultset, 250);
12916
12953
  let tableCallbackOnSort = () => {
@@ -13060,7 +13097,7 @@ const _sfc_main$s = /* @__PURE__ */ defineComponent({
13060
13097
  maxlength: "64",
13061
13098
  onInput: onSearchInput
13062
13099
  }, {
13063
- default: withCtx(() => [createElementVNode("span", _hoisted_3$h, toDisplayString(__props.placeholderFilter), 1)]),
13100
+ default: withCtx(() => [createElementVNode("span", _hoisted_3$i, toDisplayString(__props.placeholderFilter), 1)]),
13064
13101
  _: 1
13065
13102
  }, 8, ["modelValue", "placeholder"]), _cache[4] || (_cache[4] = createTextVNode()), showClearButton.value ? (openBlock(), createElementBlock("button", {
13066
13103
  key: 0,
@@ -13085,11 +13122,13 @@ const _sfc_main$s = /* @__PURE__ */ defineComponent({
13085
13122
  onChange: onChangeSortAttribute
13086
13123
  }, {
13087
13124
  label: withCtx(() => [createTextVNode(toDisplayString(unref($t2)("fkui.sort-filter-dataset.label.sort", "Sortera på")), 1)]),
13088
- default: withCtx(() => [_cache[5] || (_cache[5] = createTextVNode()), createElementVNode("option", _hoisted_6$9, toDisplayString(unref($t2)("fkui.sort-filter-dataset.label.unsorted", "Välj")), 1), _cache[6] || (_cache[6] = createTextVNode()), (openBlock(true), createElementBlock(Fragment, null, renderList(sortOrders.value, (sortOrder) => {
13125
+ default: withCtx(() => [_cache[5] || (_cache[5] = createTextVNode()), createElementVNode("option", {
13126
+ value: defaultSortValue
13127
+ }, toDisplayString(unref($t2)("fkui.sort-filter-dataset.label.unsorted", "Välj")), 1), _cache[6] || (_cache[6] = createTextVNode()), (openBlock(true), createElementBlock(Fragment, null, renderList(sortOrders.value, (sortOrder) => {
13089
13128
  return openBlock(), createElementBlock("option", {
13090
13129
  key: sortOrder.id,
13091
13130
  value: sortOrder
13092
- }, toDisplayString(sortOrder.name) + " (" + toDisplayString(sortOrder.ascendingName) + ")\n ", 9, _hoisted_7$8);
13131
+ }, toDisplayString(sortOrder.name) + " (" + toDisplayString(sortOrder.ascendingName) + ")\n ", 9, _hoisted_6$9);
13093
13132
  }), 128))]),
13094
13133
  _: 1
13095
13134
  }, 8, ["modelValue"])]),
@@ -13110,7 +13149,7 @@ const _hoisted_1$r = ["tabindex"];
13110
13149
  const _hoisted_2$l = {
13111
13150
  key: 0
13112
13151
  };
13113
- const _hoisted_3$g = {
13152
+ const _hoisted_3$h = {
13114
13153
  class: "table__row"
13115
13154
  };
13116
13155
  const _hoisted_4$d = ["innerHTML"];
@@ -13257,6 +13296,9 @@ const _sfc_main$r = /* @__PURE__ */ defineComponent({
13257
13296
  return;
13258
13297
  }
13259
13298
  let columnName = column.name;
13299
+ if (!columnName) {
13300
+ throw new Error("`FTableColumn` must have a unique `name` when used with `FSortFilterDataset`");
13301
+ }
13260
13302
  if (column.sort === FTableColumnSort.DESCENDING) {
13261
13303
  columnName = "";
13262
13304
  column.sort = FTableColumnSort.UNSORTED;
@@ -13278,12 +13320,14 @@ const _sfc_main$r = /* @__PURE__ */ defineComponent({
13278
13320
  }, [createElementVNode("table", mergeProps({
13279
13321
  class: ["table", tableClasses.value],
13280
13322
  tabindex: tabindex.value
13281
- }, _ctx.$attrs), [hasCaption.value ? (openBlock(), createElementBlock("caption", _hoisted_2$l, [renderSlot(_ctx.$slots, "caption")])) : createCommentVNode("", true), _cache[4] || (_cache[4] = createTextVNode()), createElementVNode("colgroup", null, [(openBlock(true), createElementBlock(Fragment, null, renderList(columns.value, (column) => {
13323
+ }, _ctx.$attrs), [hasCaption.value ? (openBlock(), createElementBlock("caption", _hoisted_2$l, [renderSlot(_ctx.$slots, "caption")])) : createCommentVNode("", true), _cache[5] || (_cache[5] = createTextVNode()), createElementVNode("colgroup", null, [(openBlock(true), createElementBlock(Fragment, null, renderList(columns.value, (column) => {
13282
13324
  return openBlock(), createElementBlock("col", {
13283
13325
  key: column.id,
13284
13326
  class: normalizeClass(column.size)
13285
13327
  }, null, 2);
13286
- }), 128))]), _cache[5] || (_cache[5] = createTextVNode()), createElementVNode("thead", null, [createElementVNode("tr", _hoisted_3$g, [(openBlock(true), createElementBlock(Fragment, null, renderList(visibleColumns.value, (column) => {
13328
+ }), 128))]), _cache[6] || (_cache[6] = createTextVNode()), createElementVNode("thead", null, [createElementVNode("tr", _hoisted_3$h, [renderSlot(_ctx.$slots, "default", normalizeProps(guardReactiveProps({
13329
+ row: {}
13330
+ }))), _cache[2] || (_cache[2] = createTextVNode()), (openBlock(true), createElementBlock(Fragment, null, renderList(visibleColumns.value, (column) => {
13287
13331
  return openBlock(), createElementBlock("th", mergeProps({
13288
13332
  key: column.id,
13289
13333
  scope: "col",
@@ -13297,12 +13341,12 @@ const _sfc_main$r = /* @__PURE__ */ defineComponent({
13297
13341
  class: normalizeClass(iconClasses2(column)),
13298
13342
  name: iconName(column)
13299
13343
  }, null, 8, ["class", "name"])) : createCommentVNode("", true), _cache[1] || (_cache[1] = createTextVNode()), column.description ? (openBlock(), createElementBlock("span", _hoisted_5$a, toDisplayString(column.description), 1)) : createCommentVNode("", true)], 16);
13300
- }), 128))])]), _cache[6] || (_cache[6] = createTextVNode()), createElementVNode("tbody", null, [isEmpty2.value && columns.value.length === 0 ? (openBlock(), createElementBlock("tr", _hoisted_6$8, [renderSlot(_ctx.$slots, "default", normalizeProps(guardReactiveProps({
13344
+ }), 128))])]), _cache[7] || (_cache[7] = createTextVNode()), createElementVNode("tbody", null, [isEmpty2.value && columns.value.length === 0 ? (openBlock(), createElementBlock("tr", _hoisted_6$8, [renderSlot(_ctx.$slots, "default", normalizeProps(guardReactiveProps({
13301
13345
  row: {}
13302
- })))])) : createCommentVNode("", true), _cache[2] || (_cache[2] = createTextVNode()), isEmpty2.value ? (openBlock(), createElementBlock("tr", _hoisted_7$7, [createElementVNode("td", {
13346
+ })))])) : createCommentVNode("", true), _cache[3] || (_cache[3] = createTextVNode()), isEmpty2.value ? (openBlock(), createElementBlock("tr", _hoisted_7$7, [createElementVNode("td", {
13303
13347
  class: "table__column table__column--action",
13304
13348
  colspan: columns.value.length
13305
- }, [renderSlot(_ctx.$slots, "empty", {}, () => [createTextVNode(toDisplayString(unref($t2)("fkui.data-table.empty", "Tabellen är tom")), 1)])], 8, _hoisted_8$5)])) : createCommentVNode("", true), _cache[3] || (_cache[3] = createTextVNode()), (openBlock(true), createElementBlock(Fragment, null, renderList(internalRows.value, (row) => {
13349
+ }, [renderSlot(_ctx.$slots, "empty", {}, () => [createTextVNode(toDisplayString(unref($t2)("fkui.data-table.empty", "Tabellen är tom")), 1)])], 8, _hoisted_8$5)])) : createCommentVNode("", true), _cache[4] || (_cache[4] = createTextVNode()), (openBlock(true), createElementBlock(Fragment, null, renderList(internalRows.value, (row) => {
13306
13350
  return openBlock(), createElementBlock("tr", {
13307
13351
  key: rowKey(row),
13308
13352
  class: "table__row"
@@ -13653,7 +13697,7 @@ const _hoisted_1$q = {
13653
13697
  class: "datepicker-field"
13654
13698
  };
13655
13699
  const _hoisted_2$k = ["disabled", "aria-expanded"];
13656
- const _hoisted_3$f = {
13700
+ const _hoisted_3$g = {
13657
13701
  class: "sr-only"
13658
13702
  };
13659
13703
  const _hoisted_4$c = {
@@ -13704,7 +13748,7 @@ function _sfc_render$j(_ctx, _cache, $props, $setup, $data, $options) {
13704
13748
  onClick: _cache[0] || (_cache[0] = ($event) => _ctx.onClickCalendarButton())
13705
13749
  }, [createVNode(_component_f_icon, {
13706
13750
  name: "calendar"
13707
- }), _cache[6] || (_cache[6] = createTextVNode()), createElementVNode("span", _hoisted_3$f, toDisplayString(_ctx.calendarButtonText), 1)], 8, _hoisted_2$k)]),
13751
+ }), _cache[6] || (_cache[6] = createTextVNode()), createElementVNode("span", _hoisted_3$g, toDisplayString(_ctx.calendarButtonText), 1)], 8, _hoisted_2$k)]),
13708
13752
  default: withCtx(() => [renderSlot(_ctx.$slots, "default", {}, () => [createTextVNode(toDisplayString(_ctx.$t("fkui.datepicker-field.label", "Datum")), 1)]), _cache[7] || (_cache[7] = createTextVNode()), _cache[8] || (_cache[8] = createTextVNode()), _cache[9] || (_cache[9] = createTextVNode()), _cache[10] || (_cache[10] = createTextVNode())]),
13709
13753
  _: 2
13710
13754
  }, [_ctx.$slots.tooltip ? {
@@ -13844,7 +13888,7 @@ const _hoisted_2$j = {
13844
13888
  key: 0,
13845
13889
  class: "dialogue-tree__list"
13846
13890
  };
13847
- const _hoisted_3$e = ["onClick"];
13891
+ const _hoisted_3$f = ["onClick"];
13848
13892
  function _sfc_render$i(_ctx, _cache, $props, $setup, $data, $options) {
13849
13893
  const _component_f_icon = resolveComponent("f-icon");
13850
13894
  return openBlock(), createElementBlock("div", _hoisted_1$p, [_ctx.options.length > 0 ? (openBlock(), createElementBlock("ul", _hoisted_2$j, [(openBlock(true), createElementBlock(Fragment, null, renderList(_ctx.options, (option, index) => {
@@ -13858,7 +13902,7 @@ function _sfc_render$i(_ctx, _cache, $props, $setup, $data, $options) {
13858
13902
  onClick: ($event) => _ctx.onClickedOption(option, index)
13859
13903
  }, [createElementVNode("span", null, toDisplayString(option.label), 1), _cache[0] || (_cache[0] = createTextVNode()), createVNode(_component_f_icon, {
13860
13904
  name: "arrow-right"
13861
- })], 8, _hoisted_3$e)]);
13905
+ })], 8, _hoisted_3$f)]);
13862
13906
  }), 128))])) : renderSlot(_ctx.$slots, "default", normalizeProps(mergeProps({
13863
13907
  key: 1
13864
13908
  }, {
@@ -13913,6 +13957,10 @@ const _sfc_main$o = defineComponent({
13913
13957
  required: false,
13914
13958
  default: 0
13915
13959
  },
13960
+ /**
13961
+ * Text template for the screen reader notification text.
13962
+ * Use `%VALUE%` as a placeholder for the number of notifications.
13963
+ */
13916
13964
  screenReaderNotificationTemplate: {
13917
13965
  type: String,
13918
13966
  required: false,
@@ -13944,7 +13992,7 @@ const _hoisted_1$o = ["aria-expanded", "aria-controls"];
13944
13992
  const _hoisted_2$i = {
13945
13993
  class: "expandable-panel__icon"
13946
13994
  };
13947
- const _hoisted_3$d = {
13995
+ const _hoisted_3$e = {
13948
13996
  class: "icon-stack"
13949
13997
  };
13950
13998
  const _hoisted_4$b = ["title"];
@@ -13973,7 +14021,7 @@ function _sfc_render$h(_ctx, _cache, $props, $setup, $data, $options) {
13973
14021
  "aria-controls": _ctx.id
13974
14022
  }, _ctx.$attrs, {
13975
14023
  onClick: _cache[0] || (_cache[0] = (...args) => _ctx.onClickHeadingButton && _ctx.onClickHeadingButton(...args))
13976
- }), [createElementVNode("span", _hoisted_2$i, [createElementVNode("span", _hoisted_3$d, [createVNode(_component_f_icon, {
14024
+ }), [createElementVNode("span", _hoisted_2$i, [createElementVNode("span", _hoisted_3$e, [createVNode(_component_f_icon, {
13977
14025
  name: "dash"
13978
14026
  }), _cache[1] || (_cache[1] = createTextVNode()), createVNode(_component_f_icon, {
13979
14027
  name: "dash"
@@ -14083,7 +14131,7 @@ const _hoisted_1$n = ["aria-expanded", "aria-controls"];
14083
14131
  const _hoisted_2$h = {
14084
14132
  class: "expandable-paragraph__icon"
14085
14133
  };
14086
- const _hoisted_3$c = {
14134
+ const _hoisted_3$d = {
14087
14135
  class: "icon-stack"
14088
14136
  };
14089
14137
  const _hoisted_4$a = {
@@ -14115,7 +14163,7 @@ function _sfc_render$g(_ctx, _cache, $props, $setup, $data, $options) {
14115
14163
  "aria-controls": _ctx.id
14116
14164
  }, _ctx.$attrs, {
14117
14165
  onClick: _cache[0] || (_cache[0] = (...args) => _ctx.onClickMinimize && _ctx.onClickMinimize(...args))
14118
- }), [createElementVNode("span", _hoisted_2$h, [createElementVNode("span", _hoisted_3$c, [createVNode(_component_f_icon, {
14166
+ }), [createElementVNode("span", _hoisted_2$h, [createElementVNode("span", _hoisted_3$d, [createVNode(_component_f_icon, {
14119
14167
  name: "dash"
14120
14168
  }), _cache[1] || (_cache[1] = createTextVNode()), createVNode(_component_f_icon, {
14121
14169
  name: "dash"
@@ -14223,7 +14271,7 @@ const _hoisted_1$m = {
14223
14271
  const _hoisted_2$g = {
14224
14272
  class: "file-item__row"
14225
14273
  };
14226
- const _hoisted_3$b = ["id"];
14274
+ const _hoisted_3$c = ["id"];
14227
14275
  const _hoisted_4$9 = {
14228
14276
  class: "icon-stack button__icon icon-stack--new-window"
14229
14277
  };
@@ -14246,7 +14294,7 @@ function _sfc_render$f(_ctx, _cache, $props, $setup, $data, $options) {
14246
14294
  name: "new-window"
14247
14295
  }), _cache[0] || (_cache[0] = createTextVNode()), createVNode(_component_f_icon, {
14248
14296
  name: _ctx.iconName
14249
- }, null, 8, ["name"])]), _cache[1] || (_cache[1] = createTextVNode()), createElementVNode("span", _hoisted_5$7, toDisplayString(_ctx.fileName), 1), _cache[2] || (_cache[2] = createTextVNode()), createElementVNode("span", _hoisted_6$5, " " + toDisplayString(_ctx.$t("fkui.file-item.file-open", "öppnas i nytt fönster")), 1)], 16, _hoisted_3$b), _cache[3] || (_cache[3] = createTextVNode()), renderSlot(_ctx.$slots, "row")]), _cache[4] || (_cache[4] = createTextVNode()), renderSlot(_ctx.$slots, "default"), _cache[5] || (_cache[5] = createTextVNode()), _ctx.isMimeTypeChanged ? (openBlock(), createElementBlock("div", _hoisted_7$4, toDisplayString(_ctx.mimeTypeChangedText), 1)) : createCommentVNode("", true), _cache[6] || (_cache[6] = createTextVNode()), _cache[7] || (_cache[7] = createElementVNode("hr", {
14297
+ }, null, 8, ["name"])]), _cache[1] || (_cache[1] = createTextVNode()), createElementVNode("span", _hoisted_5$7, toDisplayString(_ctx.fileName), 1), _cache[2] || (_cache[2] = createTextVNode()), createElementVNode("span", _hoisted_6$5, " " + toDisplayString(_ctx.$t("fkui.file-item.file-open", "öppnas i nytt fönster")), 1)], 16, _hoisted_3$c), _cache[3] || (_cache[3] = createTextVNode()), renderSlot(_ctx.$slots, "row")]), _cache[4] || (_cache[4] = createTextVNode()), renderSlot(_ctx.$slots, "default"), _cache[5] || (_cache[5] = createTextVNode()), _ctx.isMimeTypeChanged ? (openBlock(), createElementBlock("div", _hoisted_7$4, toDisplayString(_ctx.mimeTypeChangedText), 1)) : createCommentVNode("", true), _cache[6] || (_cache[6] = createTextVNode()), _cache[7] || (_cache[7] = createElementVNode("hr", {
14250
14298
  class: "file-item__separator"
14251
14299
  }, null, -1))]);
14252
14300
  }
@@ -14272,6 +14320,9 @@ const _sfc_main$l = defineComponent({
14272
14320
  required: false,
14273
14321
  default: () => ElementIdService.generateElementId()
14274
14322
  },
14323
+ /**
14324
+ * Disables the file selector.
14325
+ */
14275
14326
  disabled: {
14276
14327
  type: Boolean,
14277
14328
  required: false,
@@ -14316,7 +14367,7 @@ const _hoisted_1$l = {
14316
14367
  class: "file-selector"
14317
14368
  };
14318
14369
  const _hoisted_2$f = ["id", "aria-labelledby", "aria-disabled"];
14319
- const _hoisted_3$a = ["id", "for"];
14370
+ const _hoisted_3$b = ["id", "for"];
14320
14371
  function _sfc_render$e(_ctx, _cache, $props, $setup, $data, $options) {
14321
14372
  const _component_f_icon = resolveComponent("f-icon");
14322
14373
  return openBlock(), createElementBlock("div", _hoisted_1$l, [createElementVNode("input", mergeProps({
@@ -14336,7 +14387,7 @@ function _sfc_render$e(_ctx, _cache, $props, $setup, $data, $options) {
14336
14387
  }, [createVNode(_component_f_icon, {
14337
14388
  class: "button__icon",
14338
14389
  name: "paper-clip"
14339
- }), _cache[1] || (_cache[1] = createTextVNode()), renderSlot(_ctx.$slots, "default")], 10, _hoisted_3$a)]);
14390
+ }), _cache[1] || (_cache[1] = createTextVNode()), renderSlot(_ctx.$slots, "default")], 10, _hoisted_3$b)]);
14340
14391
  }
14341
14392
  const FFileSelector = /* @__PURE__ */ _export_sfc(_sfc_main$l, [["render", _sfc_render$e]]);
14342
14393
  const keybindings = {
@@ -14454,7 +14505,7 @@ const _hoisted_1$k = ["role"];
14454
14505
  const _hoisted_2$e = {
14455
14506
  key: 0
14456
14507
  };
14457
- const _hoisted_3$9 = {
14508
+ const _hoisted_3$a = {
14458
14509
  key: 0,
14459
14510
  class: "table__column--shrink"
14460
14511
  };
@@ -14656,7 +14707,7 @@ const _sfc_main$k = /* @__PURE__ */ defineComponent({
14656
14707
  expandableRows,
14657
14708
  hasExpandableContent
14658
14709
  } = expandableTable;
14659
- const tbodyElement = useTemplateRef("tbodyElement");
14710
+ const tbody = useTemplateRef("tbodyElement");
14660
14711
  const hasCaption = computed(() => {
14661
14712
  return hasSlot2("caption", {}, {
14662
14713
  stripClasses: []
@@ -14738,21 +14789,21 @@ const _sfc_main$k = /* @__PURE__ */ defineComponent({
14738
14789
  immediate: true,
14739
14790
  deep: true
14740
14791
  });
14741
- function updateTr(tbodyElement2) {
14742
- const trElements = [].slice.call(tbodyElement2.children);
14792
+ function updateTr(tbodyElement) {
14793
+ const trElements = [].slice.call(tbodyElement.children);
14743
14794
  const trInteractableElements = trElements.filter((tr2) => {
14744
14795
  return tr2.tabIndex === 0;
14745
14796
  });
14746
14797
  tr.value = trInteractableElements;
14747
14798
  }
14748
14799
  onUpdated(() => {
14749
- if (tbodyElement.value) {
14750
- updateTr(tbodyElement.value);
14800
+ if (tbody.value) {
14801
+ updateTr(tbody.value);
14751
14802
  }
14752
14803
  });
14753
14804
  onMounted(() => {
14754
- if (tbodyElement.value) {
14755
- updateTr(tbodyElement.value);
14805
+ if (tbody.value) {
14806
+ updateTr(tbody.value);
14756
14807
  }
14757
14808
  registerCallbackOnSort(callbackOnSort);
14758
14809
  registerCallbackOnMount(callbackSortableColumns);
@@ -14866,6 +14917,9 @@ const _sfc_main$k = /* @__PURE__ */ defineComponent({
14866
14917
  return;
14867
14918
  }
14868
14919
  let columnName = column.name;
14920
+ if (!columnName) {
14921
+ throw new Error("`FTableColumn` must have a unique `name` when used with `FSortFilterDataset`");
14922
+ }
14869
14923
  if (column.sort === FTableColumnSort.DESCENDING) {
14870
14924
  columnName = "";
14871
14925
  column.sort = FTableColumnSort.UNSORTED;
@@ -14910,15 +14964,17 @@ const _sfc_main$k = /* @__PURE__ */ defineComponent({
14910
14964
  return (_ctx, _cache) => {
14911
14965
  return openBlock(), createElementBlock("div", {
14912
14966
  class: normalizeClass(wrapperClasses.value)
14913
- }, [createCommentVNode("", true), _cache[18] || (_cache[18] = createTextVNode()), createElementVNode("table", mergeProps({
14967
+ }, [createCommentVNode("", true), _cache[19] || (_cache[19] = createTextVNode()), createElementVNode("table", mergeProps({
14914
14968
  class: ["table", tableClasses.value],
14915
14969
  role: tableRole.value
14916
- }, _ctx.$attrs), [hasCaption.value ? (openBlock(), createElementBlock("caption", _hoisted_2$e, [renderSlot(_ctx.$slots, "caption")])) : createCommentVNode("", true), _cache[15] || (_cache[15] = createTextVNode()), createElementVNode("colgroup", null, [unref(isExpandableTable) ? (openBlock(), createElementBlock("col", _hoisted_3$9)) : createCommentVNode("", true), _cache[0] || (_cache[0] = createTextVNode()), __props.selectable ? (openBlock(), createElementBlock("col", _hoisted_4$8)) : createCommentVNode("", true), _cache[1] || (_cache[1] = createTextVNode()), (openBlock(true), createElementBlock(Fragment, null, renderList(columns.value, (column) => {
14970
+ }, _ctx.$attrs), [hasCaption.value ? (openBlock(), createElementBlock("caption", _hoisted_2$e, [renderSlot(_ctx.$slots, "caption")])) : createCommentVNode("", true), _cache[16] || (_cache[16] = createTextVNode()), createElementVNode("colgroup", null, [unref(isExpandableTable) ? (openBlock(), createElementBlock("col", _hoisted_3$a)) : createCommentVNode("", true), _cache[0] || (_cache[0] = createTextVNode()), __props.selectable ? (openBlock(), createElementBlock("col", _hoisted_4$8)) : createCommentVNode("", true), _cache[1] || (_cache[1] = createTextVNode()), (openBlock(true), createElementBlock(Fragment, null, renderList(columns.value, (column) => {
14917
14971
  return openBlock(), createElementBlock("col", {
14918
14972
  key: column.id,
14919
14973
  class: normalizeClass(column.size)
14920
14974
  }, null, 2);
14921
- }), 128))]), _cache[16] || (_cache[16] = createTextVNode()), createElementVNode("thead", null, [createElementVNode("tr", _hoisted_5$6, [unref(isExpandableTable) ? (openBlock(), createElementBlock("th", _hoisted_6$4, [createElementVNode("span", _hoisted_7$3, toDisplayString(unref($t2)("fkui.interactive-table.select", "Expandera")), 1)])) : createCommentVNode("", true), _cache[4] || (_cache[4] = createTextVNode()), __props.selectable ? (openBlock(), createElementBlock("th", _hoisted_8$3, [createElementVNode("span", _hoisted_9$3, toDisplayString(unref($t2)("fkui.interactive-table.select", "Markera")), 1)])) : createCommentVNode("", true), _cache[5] || (_cache[5] = createTextVNode()), (openBlock(true), createElementBlock(Fragment, null, renderList(visibleColumns.value, (column) => {
14975
+ }), 128))]), _cache[17] || (_cache[17] = createTextVNode()), createElementVNode("thead", null, [createElementVNode("tr", _hoisted_5$6, [renderSlot(_ctx.$slots, "default", normalizeProps(guardReactiveProps({
14976
+ row: {}
14977
+ }))), _cache[4] || (_cache[4] = createTextVNode()), unref(isExpandableTable) ? (openBlock(), createElementBlock("th", _hoisted_6$4, [createElementVNode("span", _hoisted_7$3, toDisplayString(unref($t2)("fkui.interactive-table.select", "Expandera")), 1)])) : createCommentVNode("", true), _cache[5] || (_cache[5] = createTextVNode()), __props.selectable ? (openBlock(), createElementBlock("th", _hoisted_8$3, [createElementVNode("span", _hoisted_9$3, toDisplayString(unref($t2)("fkui.interactive-table.select", "Markera")), 1)])) : createCommentVNode("", true), _cache[6] || (_cache[6] = createTextVNode()), (openBlock(true), createElementBlock(Fragment, null, renderList(visibleColumns.value, (column) => {
14922
14978
  return openBlock(), createElementBlock("th", mergeProps({
14923
14979
  key: column.id,
14924
14980
  scope: "col",
@@ -14932,9 +14988,8 @@ const _sfc_main$k = /* @__PURE__ */ defineComponent({
14932
14988
  class: normalizeClass(iconClasses2(column)),
14933
14989
  name: iconName(column)
14934
14990
  }, null, 8, ["class", "name"])) : createCommentVNode("", true), _cache[3] || (_cache[3] = createTextVNode()), column.description ? (openBlock(), createElementBlock("span", _hoisted_11$1, toDisplayString(column.description), 1)) : createCommentVNode("", true)], 16);
14935
- }), 128))])]), _cache[17] || (_cache[17] = createTextVNode()), (openBlock(), createElementBlock("tbody", {
14936
- ref_key: "tbodyElement",
14937
- ref: tbodyElement,
14991
+ }), 128))])]), _cache[18] || (_cache[18] = createTextVNode()), (openBlock(), createElementBlock("tbody", {
14992
+ ref: "tbodyElement",
14938
14993
  key: tbodyKey.value
14939
14994
  }, [(openBlock(true), createElementBlock(Fragment, null, renderList(internalRows.value, (row, index) => {
14940
14995
  return openBlock(), createElementBlock(Fragment, {
@@ -14951,7 +15006,7 @@ const _sfc_main$k = /* @__PURE__ */ defineComponent({
14951
15006
  }, [unref(isExpandableTable) ? (openBlock(), createElementBlock("td", _hoisted_13, [unref(hasExpandableContent)(row) ? (openBlock(), createElementBlock("div", _hoisted_14, [createVNode(unref(FIcon), {
14952
15007
  name: "arrow-right",
14953
15008
  rotate: unref(isExpanded)(row) ? "270" : "90"
14954
- }, null, 8, ["rotate"])])) : createCommentVNode("", true)])) : createCommentVNode("", true), _cache[6] || (_cache[6] = createTextVNode()), __props.selectable ? (openBlock(), createElementBlock("td", _hoisted_15, [createElementVNode("div", _hoisted_16, [createVNode(unref(FCheckboxField), {
15009
+ }, null, 8, ["rotate"])])) : createCommentVNode("", true)])) : createCommentVNode("", true), _cache[7] || (_cache[7] = createTextVNode()), __props.selectable ? (openBlock(), createElementBlock("td", _hoisted_15, [createElementVNode("div", _hoisted_16, [createVNode(unref(FCheckboxField), {
14955
15010
  value: true,
14956
15011
  "model-value": isSelected(row),
14957
15012
  onClick: withModifiers(($event) => onSelect(row), ["self"])
@@ -14962,20 +15017,20 @@ const _sfc_main$k = /* @__PURE__ */ defineComponent({
14962
15017
  row
14963
15018
  }))])) : createCommentVNode("", true)]),
14964
15019
  _: 2
14965
- }, 1032, ["model-value", "onClick"])])])) : createCommentVNode("", true), _cache[7] || (_cache[7] = createTextVNode()), renderSlot(_ctx.$slots, "default", mergeProps({
15020
+ }, 1032, ["model-value", "onClick"])])])) : createCommentVNode("", true), _cache[8] || (_cache[8] = createTextVNode()), renderSlot(_ctx.$slots, "default", mergeProps({
14966
15021
  ref_for: true
14967
15022
  }, {
14968
15023
  row
14969
- }))], 42, _hoisted_12$1), _cache[11] || (_cache[11] = createTextVNode()), unref(isExpandableTable) && unref(hasExpandableContent)(row) ? (openBlock(true), createElementBlock(Fragment, {
15024
+ }))], 42, _hoisted_12$1), _cache[12] || (_cache[12] = createTextVNode()), unref(isExpandableTable) && unref(hasExpandableContent)(row) ? (openBlock(true), createElementBlock(Fragment, {
14970
15025
  key: 0
14971
15026
  }, renderList(unref(expandableRows)(row), (expandableRow, expandableIndex) => {
14972
15027
  return openBlock(), createElementBlock("tr", {
14973
15028
  key: rowKey(expandableRow),
14974
15029
  "aria-level": "2",
14975
15030
  class: normalizeClass(unref(expandableRowClasses)(row, expandableIndex))
14976
- }, [_cache[8] || (_cache[8] = createElementVNode("td", {
15031
+ }, [_cache[9] || (_cache[9] = createElementVNode("td", {
14977
15032
  class: "table__column--placeholder"
14978
- }, null, -1)), _cache[9] || (_cache[9] = createTextVNode()), __props.selectable ? (openBlock(), createElementBlock("td", _hoisted_18)) : createCommentVNode("", true), _cache[10] || (_cache[10] = createTextVNode()), !unref(hasExpandableSlot) ? renderSlot(_ctx.$slots, "default", mergeProps({
15033
+ }, null, -1)), _cache[10] || (_cache[10] = createTextVNode()), __props.selectable ? (openBlock(), createElementBlock("td", _hoisted_18)) : createCommentVNode("", true), _cache[11] || (_cache[11] = createTextVNode()), !unref(hasExpandableSlot) ? renderSlot(_ctx.$slots, "default", mergeProps({
14979
15034
  key: 1,
14980
15035
  ref_for: true
14981
15036
  }, {
@@ -14991,12 +15046,12 @@ const _sfc_main$k = /* @__PURE__ */ defineComponent({
14991
15046
  parentRow: row
14992
15047
  }))], 8, _hoisted_19))], 2);
14993
15048
  }), 128)) : createCommentVNode("", true)], 64);
14994
- }), 128)), _cache[13] || (_cache[13] = createTextVNode()), isEmpty2.value && columns.value.length === 0 ? (openBlock(), createElementBlock("tr", _hoisted_20, [renderSlot(_ctx.$slots, "default", normalizeProps(guardReactiveProps({
15049
+ }), 128)), _cache[14] || (_cache[14] = createTextVNode()), isEmpty2.value && columns.value.length === 0 ? (openBlock(), createElementBlock("tr", _hoisted_20, [renderSlot(_ctx.$slots, "default", normalizeProps(guardReactiveProps({
14995
15050
  row: {}
14996
- })))])) : createCommentVNode("", true), _cache[14] || (_cache[14] = createTextVNode()), isEmpty2.value ? (openBlock(), createElementBlock("tr", _hoisted_21, [createElementVNode("td", {
15051
+ })))])) : createCommentVNode("", true), _cache[15] || (_cache[15] = createTextVNode()), isEmpty2.value ? (openBlock(), createElementBlock("tr", _hoisted_21, [createElementVNode("td", {
14997
15052
  class: "table__column table__column--action",
14998
15053
  colspan: nbOfColumns.value
14999
- }, [renderSlot(_ctx.$slots, "empty", {}, () => [createTextVNode(toDisplayString(unref($t2)("fkui.interactive-table.empty", "Tabellen är tom")), 1)])], 8, _hoisted_22), _cache[12] || (_cache[12] = createTextVNode()), renderSlot(_ctx.$slots, "default", normalizeProps(guardReactiveProps({
15054
+ }, [renderSlot(_ctx.$slots, "empty", {}, () => [createTextVNode(toDisplayString(unref($t2)("fkui.interactive-table.empty", "Tabellen är tom")), 1)])], 8, _hoisted_22), _cache[13] || (_cache[13] = createTextVNode()), renderSlot(_ctx.$slots, "default", normalizeProps(guardReactiveProps({
15000
15055
  row: {}
15001
15056
  })))])) : createCommentVNode("", true)]))], 16, _hoisted_1$k)], 2);
15002
15057
  };
@@ -15035,7 +15090,7 @@ const _hoisted_2$d = {
15035
15090
  ref: "header",
15036
15091
  class: "layout-application-template__header"
15037
15092
  };
15038
- const _hoisted_3$8 = {
15093
+ const _hoisted_3$9 = {
15039
15094
  key: 1
15040
15095
  };
15041
15096
  const _hoisted_4$7 = {
@@ -15049,7 +15104,7 @@ const _hoisted_5$5 = {
15049
15104
  function _sfc_render$d(_ctx, _cache, $props, $setup, $data, $options) {
15050
15105
  return openBlock(), createElementBlock("div", _hoisted_1$j, [_ctx.showHeader || _ctx.showTopNavigation ? (openBlock(), createElementBlock("header", _hoisted_2$d, [_ctx.showHeader ? renderSlot(_ctx.$slots, "header", {
15051
15106
  key: 0
15052
- }) : createCommentVNode("", true), _cache[0] || (_cache[0] = createTextVNode()), _ctx.showTopNavigation ? (openBlock(), createElementBlock("nav", _hoisted_3$8, [renderSlot(_ctx.$slots, "top-navigation")])) : createCommentVNode("", true)], 512)) : createCommentVNode("", true), _cache[2] || (_cache[2] = createTextVNode()), createElementVNode("main", _hoisted_4$7, [renderSlot(_ctx.$slots, "default"), _cache[1] || (_cache[1] = createTextVNode()), _ctx.showFooter ? (openBlock(), createElementBlock("footer", _hoisted_5$5, [renderSlot(_ctx.$slots, "footer")])) : createCommentVNode("", true)], 512)]);
15107
+ }) : createCommentVNode("", true), _cache[0] || (_cache[0] = createTextVNode()), _ctx.showTopNavigation ? (openBlock(), createElementBlock("nav", _hoisted_3$9, [renderSlot(_ctx.$slots, "top-navigation")])) : createCommentVNode("", true)], 512)) : createCommentVNode("", true), _cache[2] || (_cache[2] = createTextVNode()), createElementVNode("main", _hoisted_4$7, [renderSlot(_ctx.$slots, "default"), _cache[1] || (_cache[1] = createTextVNode()), _ctx.showFooter ? (openBlock(), createElementBlock("footer", _hoisted_5$5, [renderSlot(_ctx.$slots, "footer")])) : createCommentVNode("", true)], 512)]);
15053
15108
  }
15054
15109
  const FLayoutApplicationTemplate = /* @__PURE__ */ _export_sfc(_sfc_main$j, [["render", _sfc_render$d]]);
15055
15110
  function getGridClasses(target) {
@@ -15241,7 +15296,7 @@ const _hoisted_1$i = {
15241
15296
  class: "layout-navigation"
15242
15297
  };
15243
15298
  const _hoisted_2$c = ["aria-expanded"];
15244
- const _hoisted_3$7 = {
15299
+ const _hoisted_3$8 = {
15245
15300
  class: "layout-navigation__navigation__inner"
15246
15301
  };
15247
15302
  const _hoisted_4$6 = {
@@ -15255,7 +15310,7 @@ function _sfc_render$c(_ctx, _cache, $props, $setup, $data, $options) {
15255
15310
  class: "layout-navigation__navigation",
15256
15311
  style: normalizeStyle(_ctx.navigationStyle),
15257
15312
  "aria-expanded": _ctx.isOpen
15258
- }, [createElementVNode("div", _hoisted_3$7, [_ctx.isOpen ? (openBlock(), createElementBlock(Fragment, {
15313
+ }, [createElementVNode("div", _hoisted_3$8, [_ctx.isOpen ? (openBlock(), createElementBlock(Fragment, {
15259
15314
  key: 0
15260
15315
  }, [createElementVNode("div", {
15261
15316
  class: "layout-navigation__navigation__inner__title",
@@ -15500,7 +15555,7 @@ const _hoisted_2$a = {
15500
15555
  key: 0,
15501
15556
  class: "list__item"
15502
15557
  };
15503
- const _hoisted_3$6 = {
15558
+ const _hoisted_3$7 = {
15504
15559
  class: "list__item__itempane"
15505
15560
  };
15506
15561
  const _hoisted_4$5 = ["id", "aria-labelledby", "tabindex", "onKeydown"];
@@ -15760,7 +15815,7 @@ const _sfc_main$g = /* @__PURE__ */ defineComponent({
15760
15815
  }, {
15761
15816
  item
15762
15817
  }))], 512)]);
15763
- }), 128)), _cache[0] || (_cache[0] = createTextVNode()), isEmpty2.value ? (openBlock(), createElementBlock("li", _hoisted_2$a, [createElementVNode("div", _hoisted_3$6, [renderSlot(_ctx.$slots, "empty", {}, () => [createElementVNode("em", null, toDisplayString(unref($t2)("fkui.list.empty", "Listan är tom")), 1)])])])) : createCommentVNode("", true)])) : (openBlock(), createElementBlock("ul", {
15818
+ }), 128)), _cache[0] || (_cache[0] = createTextVNode()), isEmpty2.value ? (openBlock(), createElementBlock("li", _hoisted_2$a, [createElementVNode("div", _hoisted_3$7, [renderSlot(_ctx.$slots, "empty", {}, () => [createElementVNode("em", null, toDisplayString(unref($t2)("fkui.list.empty", "Listan är tom")), 1)])])])) : createCommentVNode("", true)])) : (openBlock(), createElementBlock("ul", {
15764
15819
  key: 1,
15765
15820
  ref_key: "ulElement",
15766
15821
  ref: ulElement,
@@ -16559,7 +16614,7 @@ const _sfc_main$c = defineComponent({
16559
16614
  });
16560
16615
  const _hoisted_1$c = ["aria-label"];
16561
16616
  const _hoisted_2$8 = ["data-ref-index", "onClick"];
16562
- const _hoisted_3$5 = {
16617
+ const _hoisted_3$6 = {
16563
16618
  class: "imenu__list__anchor-container"
16564
16619
  };
16565
16620
  const _hoisted_4$4 = ["data-ref-index", "href", "target"];
@@ -16600,7 +16655,7 @@ function _sfc_render$8(_ctx, _cache, $props, $setup, $data, $options) {
16600
16655
  class: normalizeClass(_ctx.itemClasses(item, index)),
16601
16656
  role: "none",
16602
16657
  onClick: (event) => _ctx.onClickItem(event, item)
16603
- }, [createElementVNode("div", _hoisted_3$5, [createElementVNode("a", {
16658
+ }, [createElementVNode("div", _hoisted_3$6, [createElementVNode("a", {
16604
16659
  ref_for: true,
16605
16660
  ref: "anchors",
16606
16661
  "data-ref-index": index,
@@ -16695,7 +16750,7 @@ const _hoisted_2$7 = {
16695
16750
  key: 0,
16696
16751
  class: "offline"
16697
16752
  };
16698
- const _hoisted_3$4 = {
16753
+ const _hoisted_3$5 = {
16699
16754
  class: "icon-stack icon-stack--error"
16700
16755
  };
16701
16756
  const _hoisted_4$3 = {
@@ -16718,7 +16773,7 @@ function _sfc_render$7(_ctx, _cache, $props, $setup, $data, $options) {
16718
16773
  shrink: "",
16719
16774
  align: "center"
16720
16775
  }, {
16721
- default: withCtx(() => [createElementVNode("span", _hoisted_3$4, [createVNode(_component_f_icon, {
16776
+ default: withCtx(() => [createElementVNode("span", _hoisted_3$5, [createVNode(_component_f_icon, {
16722
16777
  name: "triangle"
16723
16778
  }), _cache[0] || (_cache[0] = createTextVNode()), createVNode(_component_f_icon, {
16724
16779
  name: "alert"
@@ -16847,7 +16902,7 @@ const _hoisted_1$9 = {
16847
16902
  const _hoisted_2$5 = {
16848
16903
  key: 0
16849
16904
  };
16850
- const _hoisted_3$3 = {
16905
+ const _hoisted_3$4 = {
16851
16906
  ref: "header",
16852
16907
  class: "page-header"
16853
16908
  };
@@ -16868,7 +16923,7 @@ function _sfc_render$5(_ctx, _cache, $props, $setup, $data, $options) {
16868
16923
  }, {
16869
16924
  default: withCtx(() => [renderSlot(_ctx.$slots, "skip-link-text")]),
16870
16925
  _: 3
16871
- }, 8, ["href"])])) : createCommentVNode("", true), _cache[2] || (_cache[2] = createTextVNode()), createElementVNode("div", _hoisted_3$3, [_ctx.hasLogo ? (openBlock(), createElementBlock("div", _hoisted_4$2, [renderSlot(_ctx.$slots, "logo")])) : createCommentVNode("", true), _cache[0] || (_cache[0] = createTextVNode()), (openBlock(), createBlock(resolveDynamicComponent(_ctx.headerTag), {
16926
+ }, 8, ["href"])])) : createCommentVNode("", true), _cache[2] || (_cache[2] = createTextVNode()), createElementVNode("div", _hoisted_3$4, [_ctx.hasLogo ? (openBlock(), createElementBlock("div", _hoisted_4$2, [renderSlot(_ctx.$slots, "logo")])) : createCommentVNode("", true), _cache[0] || (_cache[0] = createTextVNode()), (openBlock(), createBlock(resolveDynamicComponent(_ctx.headerTag), {
16872
16927
  class: "page-header__app-name"
16873
16928
  }, {
16874
16929
  default: withCtx(() => [renderSlot(_ctx.$slots, "default")]),
@@ -17013,7 +17068,7 @@ registerLayout({
17013
17068
  }
17014
17069
  }
17015
17070
  });
17016
- const styleContent = ':host {\n display: block;\n}\n\n.page-layout {\n display: grid;\n height: 100cqh;\n width: min(100%, 100cqw);\n\n &[part~="simple"] {\n grid-template:\n "header" min-content\n "content" 1fr\n "footer" min-content\n / 1fr;\n\n [part="area header"],\n [part="area footer"] {\n background: var(--f-background-pageheader-primary);\n color: var(--fkds-color-text-inverted);\n }\n\n [part="area content"] {\n background: var(--fkds-color-background-primary);\n color: var(--fkds-color-text-primary);\n }\n }\n\n &[part~="left-panel"] {\n grid-template:\n "header header" min-content\n "left content" 1fr\n "footer footer" min-content\n / min-content 1fr;\n\n [part="area header"],\n [part="area footer"] {\n background: var(--f-background-pageheader-primary);\n color: var(--fkds-color-text-inverted);\n }\n\n [part="area left"] {\n background: var(--fkds-color-background-secondary);\n }\n\n [part="area content"] {\n background: var(--fkds-color-background-primary);\n color: var(--fkds-color-text-primary);\n }\n }\n\n &[part~="right-panel"] {\n grid-template:\n "header header" min-content\n "content right" 1fr\n "footer footer" min-content\n / 1fr min-content;\n\n [part="area header"],\n [part="area footer"] {\n background: var(--f-background-pageheader-primary);\n color: var(--fkds-color-text-inverted);\n }\n\n [part="area right"] {\n background: var(--fkds-color-background-secondary);\n color: var(--fkds-color-text-primary);\n }\n\n [part="area content"] {\n background: var(--fkds-color-background-primary);\n color: var(--fkds-color-text-primary);\n }\n }\n\n &[part~="three-column"] {\n grid-template:\n "header header header" min-content\n "left content right" 1fr\n "footer footer footer" min-content\n / min-content 1fr min-content;\n\n [part="area header"],\n [part="area footer"] {\n background: var(--f-background-pageheader-primary);\n color: var(--fkds-color-text-inverted);\n }\n\n [part="area left"],\n [part="area right"] {\n background: var(--fkds-color-background-secondary);\n color: var(--fkds-color-text-primary);\n }\n\n [part="area content"] {\n background: var(--fkds-color-background-primary);\n color: var(--fkds-color-text-primary);\n }\n }\n}\n\n.page-layout__area {\n display: flex;\n position: relative;\n\n &[data-direction="column"] {\n flex-direction: column;\n }\n\n &[data-direction="row"] {\n flex-direction: row;\n }\n\n &[data-scroll] {\n overflow-y: auto;\n }\n\n &:empty {\n display: none;\n }\n}\n\n:host ::slotted(*) {\n display: contents;\n}\n';
17071
+ const styleContent = ':host {\n display: block;\n}\n\n.page-layout {\n display: grid;\n height: 100cqh;\n width: min(100%, 100cqw);\n\n &[part~="simple"] {\n grid-template:\n "header" min-content\n "content" 1fr\n "footer" min-content\n / 1fr;\n\n [part="area header"],\n [part="area footer"] {\n --f-page-layout-background: var(--f-background-pageheader-primary);\n --f-page-layout-color: var(--fkds-color-text-inverted);\n }\n\n [part="area content"] {\n --f-page-layout-background: var(--fkds-color-background-primary);\n --f-page-layout-color: var(--fkds-color-text-primary);\n }\n }\n\n &[part~="left-panel"] {\n grid-template:\n "header header" min-content\n "left content" 1fr\n "footer footer" min-content\n / min-content 1fr;\n\n [part="area header"],\n [part="area footer"] {\n --f-page-layout-background: var(--f-background-pageheader-primary);\n --f-page-layout-color: var(--fkds-color-text-inverted);\n }\n\n [part="area left"] {\n --f-page-layout-background: var(--fkds-color-background-secondary);\n }\n\n [part="area content"] {\n --f-page-layout-background: var(--fkds-color-background-primary);\n --f-page-layout-color: var(--fkds-color-text-primary);\n }\n }\n\n &[part~="right-panel"] {\n grid-template:\n "header header" min-content\n "content right" 1fr\n "footer footer" min-content\n / 1fr min-content;\n\n [part="area header"],\n [part="area footer"] {\n --f-page-layout-background: var(--f-background-pageheader-primary);\n --f-page-layout-color: var(--fkds-color-text-inverted);\n }\n\n [part="area right"] {\n --f-page-layout-background: var(--fkds-color-background-secondary);\n --f-page-layout-color: var(--fkds-color-text-primary);\n }\n\n [part="area content"] {\n --f-page-layout-background: var(--fkds-color-background-primary);\n --f-page-layout-color: var(--fkds-color-text-primary);\n }\n }\n\n &[part~="three-column"] {\n grid-template:\n "header header header" min-content\n "left content right" 1fr\n "footer footer footer" min-content\n / min-content 1fr min-content;\n\n [part="area header"],\n [part="area footer"] {\n --f-page-layout-background: var(--f-background-pageheader-primary);\n --f-page-layout-color: var(--fkds-color-text-inverted);\n }\n\n [part="area left"],\n [part="area right"] {\n --f-page-layout-background: var(--fkds-color-background-secondary);\n --f-page-layout-color: var(--fkds-color-text-primary);\n }\n\n [part="area content"] {\n --f-page-layout-background: var(--fkds-color-background-primary);\n --f-page-layout-color: var(--fkds-color-text-primary);\n }\n }\n}\n\n.page-layout__area {\n display: flex;\n position: relative;\n background: var(--f-page-layout-background);\n color: var(--f-page-layout-color);\n\n &[data-direction="column"] {\n flex-direction: column;\n }\n\n &[data-direction="row"] {\n flex-direction: row;\n }\n\n &[data-scroll] {\n overflow-y: auto;\n }\n\n &:empty {\n display: none;\n }\n}\n\n:host ::slotted(*) {\n display: contents;\n}\n';
17017
17072
  const stubLayout = defineLayout({
17018
17073
  name: "",
17019
17074
  areas: {}
@@ -17290,7 +17345,7 @@ const _hoisted_1$7 = {
17290
17345
  class: "progress"
17291
17346
  };
17292
17347
  const _hoisted_2$4 = ["aria-label", "aria-valuenow", "aria-valuetext"];
17293
- const _hoisted_3$2 = {
17348
+ const _hoisted_3$3 = {
17294
17349
  class: "sr-only"
17295
17350
  };
17296
17351
  const MIN_VALUE = 0;
@@ -17361,7 +17416,7 @@ const _sfc_main$7 = /* @__PURE__ */ defineComponent({
17361
17416
  "aria-valuenow": progressValueNow.value,
17362
17417
  "aria-valuetext": progressText.value,
17363
17418
  style: normalizeStyle(cssWidth.value)
17364
- }, [createElementVNode("span", _hoisted_3$2, toDisplayString(progressText.value), 1)], 14, _hoisted_2$4)]);
17419
+ }, [createElementVNode("span", _hoisted_3$3, toDisplayString(progressText.value), 1)], 14, _hoisted_2$4)]);
17365
17420
  };
17366
17421
  }
17367
17422
  });
@@ -17524,7 +17579,7 @@ const _sfc_main$6 = defineComponent({
17524
17579
  });
17525
17580
  const _hoisted_1$6 = ["id", "disabled"];
17526
17581
  const _hoisted_2$3 = ["for"];
17527
- const _hoisted_3$1 = {
17582
+ const _hoisted_3$2 = {
17528
17583
  key: 0,
17529
17584
  class: "radio-button__details"
17530
17585
  };
@@ -17546,7 +17601,7 @@ function _sfc_render$4(_ctx, _cache, $props, $setup, $data, $options) {
17546
17601
  for: _ctx.id
17547
17602
  }, [renderSlot(_ctx.$slots, "default"), _cache[6] || (_cache[6] = createTextVNode()), _ctx.$slots.details ? (openBlock(), createElementBlock(Fragment, {
17548
17603
  key: 0
17549
- }, [_ctx.showDetails === "always" ? (openBlock(), createElementBlock("span", _hoisted_3$1, [_cache[1] || (_cache[1] = createElementVNode("br", null, null, -1)), _cache[2] || (_cache[2] = createTextVNode()), renderSlot(_ctx.$slots, "details")])) : createCommentVNode("", true), _cache[5] || (_cache[5] = createTextVNode()), _ctx.showDetails === "when-selected" ? (openBlock(), createBlock(Transition, {
17604
+ }, [_ctx.showDetails === "always" ? (openBlock(), createElementBlock("span", _hoisted_3$2, [_cache[1] || (_cache[1] = createElementVNode("br", null, null, -1)), _cache[2] || (_cache[2] = createTextVNode()), renderSlot(_ctx.$slots, "details")])) : createCommentVNode("", true), _cache[5] || (_cache[5] = createTextVNode()), _ctx.showDetails === "when-selected" ? (openBlock(), createBlock(Transition, {
17550
17605
  key: 1,
17551
17606
  onEnter: _ctx.enter,
17552
17607
  onAfterEnter: _ctx.afterEnter,
@@ -17677,7 +17732,7 @@ function computeCssValue(raw, total, auto) {
17677
17732
  return percent * total;
17678
17733
  } else if (raw === "0") {
17679
17734
  return 0;
17680
- } else if (raw === "auto") {
17735
+ } else if (raw === "auto" || raw === "") {
17681
17736
  return auto;
17682
17737
  } else {
17683
17738
  throw new Error(`Cant parse size from "${raw}"`);
@@ -17725,10 +17780,17 @@ function useStorage(options) {
17725
17780
  loaded.value = true;
17726
17781
  });
17727
17782
  }
17728
- const _hoisted_1$5 = ["aria-orientation"];
17783
+ const _hoisted_1$5 = {
17784
+ key: 0,
17785
+ class: "resize__offset"
17786
+ };
17729
17787
  const _hoisted_2$2 = ["aria-orientation"];
17788
+ const _hoisted_3$1 = ["aria-orientation"];
17730
17789
  const STEP_SIZE = 10;
17731
17790
  const _sfc_main$5 = /* @__PURE__ */ defineComponent({
17791
+ ...{
17792
+ inheritAttrs: false
17793
+ },
17732
17794
  __name: "FResizePane.ce",
17733
17795
  props: {
17734
17796
  disabled: {
@@ -17746,10 +17808,22 @@ const _sfc_main$5 = /* @__PURE__ */ defineComponent({
17746
17808
  initial: {
17747
17809
  default: "50%",
17748
17810
  type: String
17811
+ },
17812
+ overlay: {
17813
+ type: Boolean,
17814
+ default: false
17815
+ },
17816
+ offset: {
17817
+ default: 0,
17818
+ type: Number
17749
17819
  }
17750
17820
  },
17751
- setup(__props) {
17821
+ emits: ["resize"],
17822
+ setup(__props, {
17823
+ emit: __emit
17824
+ }) {
17752
17825
  const props = __props;
17826
+ const emit = __emit;
17753
17827
  const root = shallowRef();
17754
17828
  const content = ref();
17755
17829
  const separator = ref();
@@ -17758,11 +17832,11 @@ const _sfc_main$5 = /* @__PURE__ */ defineComponent({
17758
17832
  max: -1,
17759
17833
  current: -1
17760
17834
  });
17761
- const separatorSize = ref(0);
17762
17835
  const layoutSize = ref(0);
17763
17836
  const storageKey = computed(() => area.value ? `layout/${area.value}/size` : null);
17764
17837
  const {
17765
17838
  attachPanel: attachment,
17839
+ direction,
17766
17840
  area
17767
17841
  } = useAreaData(root);
17768
17842
  useKeyboardHandler({
@@ -17795,11 +17869,11 @@ const _sfc_main$5 = /* @__PURE__ */ defineComponent({
17795
17869
  });
17796
17870
  const minSize = computed(() => {
17797
17871
  const total = layoutSize.value;
17798
- return Math.floor(aggregateCssValue(props.min, total, 0, Math.max) + separatorSize.value);
17872
+ return Math.floor(aggregateCssValue(props.min, total, 0, Math.max));
17799
17873
  });
17800
17874
  const maxSize = computed(() => {
17801
17875
  const total = layoutSize.value;
17802
- return Math.floor(aggregateCssValue(props.max, total, total, Math.min) + separatorSize.value);
17876
+ return Math.max(Math.floor(aggregateCssValue(props.max, total, total, Math.min)), minSize.value);
17803
17877
  });
17804
17878
  const initialSize = computed(() => {
17805
17879
  const total = layoutSize.value;
@@ -17812,6 +17886,9 @@ const _sfc_main$5 = /* @__PURE__ */ defineComponent({
17812
17886
  return "vertical";
17813
17887
  }
17814
17888
  });
17889
+ const classes = computed(() => {
17890
+ return [`resize--${attachment.value}`, `resize--${direction.value}`, props.overlay ? "resize--overlay" : void 0, props.disabled ? "resize--disabled" : void 0];
17891
+ });
17815
17892
  const layoutElement = computed(() => {
17816
17893
  var _host$closest;
17817
17894
  if (!root.value) {
@@ -17821,6 +17898,8 @@ const _sfc_main$5 = /* @__PURE__ */ defineComponent({
17821
17898
  const host = shadow.host;
17822
17899
  return (_host$closest = host.closest("ce-page-layout")) !== null && _host$closest !== void 0 ? _host$closest : void 0;
17823
17900
  });
17901
+ watch(() => props.min, onResize);
17902
+ watch(() => props.max, onResize);
17824
17903
  watchEffect(() => {
17825
17904
  const {
17826
17905
  min,
@@ -17828,23 +17907,23 @@ const _sfc_main$5 = /* @__PURE__ */ defineComponent({
17828
17907
  current: value
17829
17908
  } = state.value;
17830
17909
  if (root.value) {
17831
- root.value.style.setProperty("--size", `${String(value)}px`);
17832
- root.value.style.setProperty("--min", `${min}px`);
17833
- root.value.style.setProperty("--max", `${max}px`);
17910
+ const shadowRoot = root.value.getRootNode();
17911
+ const host = shadowRoot.host;
17912
+ host.style.setProperty("--size", `${String(value)}px`);
17913
+ host.style.setProperty("--min", `${min}px`);
17914
+ host.style.setProperty("--max", `${max}px`);
17915
+ host.style.setProperty("--offset", `${props.offset}px`);
17834
17916
  }
17835
17917
  if (separator.value) {
17836
17918
  separator.value.setAttribute("aria-valuemin", String(Math.floor(min)));
17837
17919
  separator.value.setAttribute("aria-valuemax", String(Math.floor(max)));
17838
17920
  separator.value.setAttribute("aria-valuenow", String(Math.floor(value)));
17839
17921
  }
17922
+ if (value >= 0) {
17923
+ emit("resize", value);
17924
+ }
17840
17925
  });
17841
17926
  onMounted(() => {
17842
- if (separator.value) {
17843
- const {
17844
- flexBasis
17845
- } = getComputedStyle(separator.value);
17846
- separatorSize.value = computeCssValue(flexBasis, 0, 0);
17847
- }
17848
17927
  layoutSize.value = getLayoutSize();
17849
17928
  state.value = {
17850
17929
  min: minSize.value,
@@ -17875,11 +17954,11 @@ const _sfc_main$5 = /* @__PURE__ */ defineComponent({
17875
17954
  }
17876
17955
  }
17877
17956
  return (_ctx, _cache) => {
17878
- return openBlock(), createElementBlock("div", {
17957
+ return openBlock(), createElementBlock(Fragment, null, [_ctx.overlay && _ctx.offset ? (openBlock(), createElementBlock("div", _hoisted_1$5)) : createCommentVNode("", true), _cache[1] || (_cache[1] = createTextVNode()), createElementVNode("div", mergeProps({
17879
17958
  ref_key: "root",
17880
17959
  ref: root,
17881
- class: normalizeClass(["resize", `resize--${unref(attachment)}`])
17882
- }, [createElementVNode("div", {
17960
+ class: ["resize", classes.value]
17961
+ }, _ctx.$attrs), [createElementVNode("div", {
17883
17962
  ref_key: "content",
17884
17963
  ref: content,
17885
17964
  class: "resize__content"
@@ -17891,17 +17970,36 @@ const _sfc_main$5 = /* @__PURE__ */ defineComponent({
17891
17970
  class: "resize__handle",
17892
17971
  tabindex: "0",
17893
17972
  "aria-orientation": orientation.value
17894
- }, null, 8, _hoisted_1$5)) : (openBlock(), createElementBlock("div", {
17973
+ }, null, 8, _hoisted_2$2)) : (openBlock(), createElementBlock("div", {
17895
17974
  key: 1,
17896
17975
  role: "separator",
17897
17976
  class: "resize__handle disabled",
17898
17977
  "aria-orientation": orientation.value
17899
- }, null, 8, _hoisted_2$2))], 2);
17978
+ }, null, 8, _hoisted_3$1))], 16)], 64);
17900
17979
  };
17901
17980
  }
17902
17981
  });
17903
- const _style_0 = '/* background color */\n/* highlight color */\n/* the width of the visible handle */\n/* how much extra click/hover area the handle has */\n/* how much extra space the handle occupies when hovering (not counting the click area) */\n/* how long before visually indicating the hover state */\n/* how long the animation for the visual indicator is */\n:host {\n display: contents;\n}\n.resize {\n flex-grow: 1;\n display: flex;\n align-items: stretch;\n}\n.resize--left {\n flex-direction: row;\n width: var(--size);\n}\n.resize--right {\n flex-direction: row-reverse;\n width: var(--size);\n}\n.resize--top {\n flex-direction: column;\n height: var(--size);\n}\n.resize--bottom {\n flex-direction: column-reverse;\n height: var(--size);\n}\n.resize__content {\n flex: 1 1 auto;\n overflow: auto;\n box-sizing: border-box;\n display: flex;\n}\n.resize--left .resize__content, .resize--right .resize__content {\n min-width: calc(var(--min) - 2px);\n max-width: calc(var(--max) - 2px);\n}\n.resize--top .resize__content, .resize--bottom .resize__content {\n min-height: calc(var(--min) - 2px);\n max-height: calc(var(--max) - 2px);\n}\n.resize__handle {\n flex: 0 0 2px;\n background: var(--fkds-color-border-primary);\n touch-action: none;\n user-select: none;\n z-index: 1;\n position: relative;\n transition: z-index 0s 200ms;\n /* disable regular focus indicator as this component has its own */\n /* when focus by keyboard we dont want the delay or transition */\n /* as the handle area expand we increase z-index for the handle to make sure it covers other separators */\n}\n@media (forced-colors: active) {\n.resize__handle {\n background: CanvasText;\n}\n}\n.resize__handle[aria-orientation=horizontal] {\n cursor: row-resize;\n height: 2px;\n}\n.resize__handle[aria-orientation=horizontal]::before {\n inset: -2px 0;\n}\n.resize__handle[aria-orientation=horizontal]::after {\n inset: -4px 0;\n}\n.resize__handle[aria-orientation=vertical] {\n cursor: col-resize;\n width: 2px;\n}\n.resize__handle[aria-orientation=vertical]::before {\n inset: 0 -2px;\n}\n.resize__handle[aria-orientation=vertical]::after {\n inset: 0 -4px;\n}\n.resize__handle::before {\n content: "";\n pointer-events: none;\n position: absolute;\n background-color: transparent;\n transition: background-color 200ms ease-in;\n}\n.resize__handle::after {\n content: "";\n position: absolute;\n}\n.resize__handle:focus::before, .resize__handle:hover::before, .resize__handle.drag::before {\n background-color: var(--fkds-color-action-border-primary-hover);\n transition-delay: 200ms;\n}\n@media (forced-colors: active) {\n.resize__handle:focus::before, .resize__handle:hover::before, .resize__handle.drag::before {\n background-color: Highlight;\n}\n}\n.resize__handle:focus {\n outline: none;\n box-shadow: none;\n}\n.resize__handle:focus::before {\n transition: none;\n}\n.resize__handle:hover, .resize__handle:focus, .resize__handle.drag {\n z-index: 2;\n transition: z-index 0s 0s;\n}\n.resize__handle.disabled {\n cursor: auto;\n}\n.resize__handle.disabled::before {\n display: none;\n}\n.resize--left .resize__handle {\n left: 2px;\n}\n.resize--right .resize__handle {\n right: 2px;\n}\n.resize--top .resize__handle {\n top: 2px;\n}\n.resize--bottom .resize__handle {\n bottom: 2px;\n}';
17982
+ const _style_0 = '/* background color */\n/* highlight color */\n/* the width of the visible handle */\n/* how much extra click/hover area the handle has */\n/* how much extra space the handle occupies when hovering (not counting the click area) */\n/* how long before visually indicating the hover state */\n/* how long the animation for the visual indicator is */\n:host {\n display: contents;\n}\n:host([hidden]) {\n display: none;\n}\n:host ::slotted(*) {\n display: contents;\n}\n.resize {\n flex-grow: 1;\n display: flex;\n align-items: stretch;\n}\n.resize--overlay {\n position: absolute;\n z-index: 1;\n background: var(--f-page-layout-background);\n}\n.resize--left {\n flex-direction: row;\n}\n.resize--left:not(.resize--disabled) {\n width: calc(var(--size) + 2px);\n}\n.resize--left .resize__content {\n flex-direction: row;\n}\n.resize--left.resize--overlay {\n left: 0;\n top: 0;\n bottom: 0;\n}\n.resize--right {\n flex-direction: row-reverse;\n}\n.resize--right:not(.resize--disabled) {\n width: calc(var(--size) + 2px);\n}\n.resize--right .resize__content {\n flex-direction: row;\n}\n.resize--right.resize--overlay {\n right: 0;\n top: 0;\n bottom: 0;\n}\n.resize--top {\n flex-direction: column;\n}\n.resize--top:not(.resize--disabled) {\n height: calc(var(--size) + 2px);\n}\n.resize--bottom {\n flex-direction: column-reverse;\n}\n.resize--bottom:not(.resize--disabled) {\n height: calc(var(--size) + 2px);\n}\n.resize__offset {\n width: calc(var(--offset) + 2px);\n}\n.resize__content {\n flex: 1 1 auto;\n overflow: auto;\n box-sizing: border-box;\n display: flex;\n}\n.resize--column .resize__content {\n flex-direction: column;\n}\n.resize--row .resize__content {\n flex-direction: row;\n}\n.resize--left:not(.resize--disabled) .resize__content, .resize--right:not(.resize--disabled) .resize__content {\n min-width: var(--min);\n max-width: var(--max);\n flex-basis: var(--size);\n}\n.resize--top:not(.resize--disabled) .resize__content, .resize--bottom:not(.resize--disabled) .resize__content {\n min-height: var(--min);\n max-height: var(--max);\n flex-basis: var(--size);\n}\n.resize__handle {\n flex: 0 0 2px;\n background: var(--fkds-color-border-primary);\n touch-action: none;\n user-select: none;\n z-index: 1;\n position: relative;\n transition: z-index 0s 200ms;\n /* disable regular focus indicator as this component has its own */\n /* when focus by keyboard we dont want the delay or transition */\n /* as the handle area expand we increase z-index for the handle to make sure it covers other separators */\n}\n@media (forced-colors: active) {\n.resize__handle {\n background: CanvasText;\n}\n}\n.resize__handle[aria-orientation=horizontal] {\n cursor: row-resize;\n height: 2px;\n}\n.resize__handle[aria-orientation=horizontal]::before {\n inset: -2px 0;\n}\n.resize__handle[aria-orientation=horizontal]::after {\n inset: -4px 0;\n}\n.resize__handle[aria-orientation=vertical] {\n cursor: col-resize;\n width: 2px;\n}\n.resize__handle[aria-orientation=vertical]::before {\n inset: 0 -2px;\n}\n.resize__handle[aria-orientation=vertical]::after {\n inset: 0 -4px;\n}\n.resize__handle::before {\n content: "";\n pointer-events: none;\n position: absolute;\n background-color: transparent;\n transition: background-color 200ms ease-in;\n}\n.resize__handle::after {\n content: "";\n position: absolute;\n}\n.resize__handle:focus::before, .resize__handle:hover::before, .resize__handle.drag::before {\n background-color: var(--fkds-color-action-border-primary-hover);\n transition-delay: 200ms;\n}\n@media (forced-colors: active) {\n.resize__handle:focus::before, .resize__handle:hover::before, .resize__handle.drag::before {\n background-color: Highlight;\n}\n}\n.resize__handle:focus {\n outline: none;\n box-shadow: none;\n}\n.resize__handle:focus::before {\n transition: none;\n}\n.resize__handle:hover, .resize__handle:focus, .resize__handle.drag {\n z-index: 2;\n transition: z-index 0s 0s;\n}\n.resize__handle.disabled {\n cursor: auto;\n}\n.resize__handle.disabled::before {\n display: none;\n}';
17904
17983
  const FResizePane = /* @__PURE__ */ _export_sfc(_sfc_main$5, [["styles", [_style_0]]]);
17984
+ const injectionKey = Symbol("FResizePane");
17985
+ function useResize(options = {}) {
17986
+ const api = inject(injectionKey, {
17987
+ register() {
17988
+ return () => void 0;
17989
+ },
17990
+ size: ref(0)
17991
+ });
17992
+ const unregister = api.register({
17993
+ enabled: options.enabled,
17994
+ visible: options.visible,
17995
+ overlay: options.overlay,
17996
+ offset: options.offset
17997
+ });
17998
+ onUnmounted(unregister);
17999
+ return {
18000
+ size: api.size
18001
+ };
18002
+ }
17905
18003
  const _hoisted_1$4 = {
17906
18004
  slot: "content"
17907
18005
  };
@@ -17909,10 +18007,6 @@ const tagName = "ce-resize-pane";
17909
18007
  const _sfc_main$4 = /* @__PURE__ */ defineComponent({
17910
18008
  __name: "FResizePane",
17911
18009
  props: {
17912
- disabled: {
17913
- type: Boolean,
17914
- default: false
17915
- },
17916
18010
  min: {
17917
18011
  default: "0"
17918
18012
  },
@@ -17927,12 +18021,83 @@ const _sfc_main$4 = /* @__PURE__ */ defineComponent({
17927
18021
  if (!customElements.get(tagName)) {
17928
18022
  customElements.define(tagName, defineCustomElement(FResizePane));
17929
18023
  }
18024
+ const anyEnabled = ref(true);
18025
+ const anyVisible = ref(true);
18026
+ const anyOverlay = ref(false);
18027
+ const size = ref(-1);
18028
+ const offset2 = ref(0);
18029
+ let components = [];
18030
+ let n = 0;
18031
+ function any(src, predicate) {
18032
+ return src.length === 0 || src.some(predicate);
18033
+ }
18034
+ provide(injectionKey, {
18035
+ register(options) {
18036
+ const component = {
18037
+ ...options,
18038
+ id: n++
18039
+ };
18040
+ components.push(component);
18041
+ const scope = effectScope();
18042
+ scope.run(() => {
18043
+ watchEffect(() => {
18044
+ anyEnabled.value = any(components, (it) => {
18045
+ var _a;
18046
+ var _it$enabled$value;
18047
+ return (_it$enabled$value = (_a = it.enabled) == null ? void 0 : _a.value) !== null && _it$enabled$value !== void 0 ? _it$enabled$value : true;
18048
+ });
18049
+ });
18050
+ watchEffect(() => {
18051
+ anyVisible.value = any(components, (it) => {
18052
+ var _a;
18053
+ var _it$visible$value;
18054
+ return (_it$visible$value = (_a = it.visible) == null ? void 0 : _a.value) !== null && _it$visible$value !== void 0 ? _it$visible$value : true;
18055
+ });
18056
+ });
18057
+ watchEffect(() => {
18058
+ anyOverlay.value = any(components, (it) => {
18059
+ var _a;
18060
+ var _it$overlay$value;
18061
+ return (_it$overlay$value = (_a = it.overlay) == null ? void 0 : _a.value) !== null && _it$overlay$value !== void 0 ? _it$overlay$value : false;
18062
+ });
18063
+ });
18064
+ watchEffect(() => {
18065
+ if (components.length === 0) {
18066
+ return 0;
18067
+ }
18068
+ const offsets = components.map((it) => {
18069
+ var _a;
18070
+ return (_a = it.offset) == null ? void 0 : _a.value;
18071
+ }).filter((it) => typeof it === "number");
18072
+ offset2.value = Math.max(0, ...offsets);
18073
+ });
18074
+ });
18075
+ return () => {
18076
+ components = components.filter((it) => it.id !== component.id);
18077
+ scope.stop();
18078
+ };
18079
+ },
18080
+ size
18081
+ });
18082
+ const disabled = computed(() => anyEnabled.value === false);
18083
+ const hidden = computed(() => anyVisible.value === false);
18084
+ const overlay = computed(() => anyOverlay.value === true);
17930
18085
  const props = __props;
18086
+ function onResize(event) {
18087
+ size.value = event.detail[0];
18088
+ }
17931
18089
  return (_ctx, _cache) => {
17932
- return openBlock(), createBlock(resolveDynamicComponent(tagName), normalizeProps(guardReactiveProps(props)), {
18090
+ return openBlock(), createBlock(resolveDynamicComponent(tagName), mergeProps({
18091
+ disabled: disabled.value,
18092
+ hidden: hidden.value,
18093
+ overlay: overlay.value,
18094
+ offset: offset2.value
18095
+ }, props, {
18096
+ onResize
18097
+ }), {
17933
18098
  default: withCtx(() => [createElementVNode("div", _hoisted_1$4, [renderSlot(_ctx.$slots, "default")])]),
17934
18099
  _: 3
17935
- }, 16);
18100
+ }, 16, ["disabled", "hidden", "overlay", "offset"]);
17936
18101
  };
17937
18102
  }
17938
18103
  });
@@ -18370,6 +18535,10 @@ const _sfc_main = defineComponent({
18370
18535
  mixins: [TranslationMixin],
18371
18536
  inheritAttrs: true,
18372
18537
  props: {
18538
+ /**
18539
+ * The title of the wizard step.
18540
+ * This will be displayed as the step's header.
18541
+ */
18373
18542
  title: {
18374
18543
  type: String,
18375
18544
  required: true
@@ -18768,7 +18937,7 @@ export {
18768
18937
  _sfc_main$s as FSortFilterDataset,
18769
18938
  FSortFilterDatasetInjected,
18770
18939
  FStaticField,
18771
- FTableColumn,
18940
+ _sfc_main$J as FTableColumn,
18772
18941
  FTableColumnSize,
18773
18942
  FTableColumnSort,
18774
18943
  FTableColumnType,
@@ -18849,6 +19018,7 @@ export {
18849
19018
  useAreaData,
18850
19019
  useCombobox,
18851
19020
  useModal,
19021
+ useResize,
18852
19022
  useSlotUtils,
18853
19023
  useTextFieldSetup,
18854
19024
  useTranslate