@fkui/vue 6.3.0 → 6.4.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.
@@ -1972,17 +1972,17 @@ const _export_sfc = (sfc, props) => {
1972
1972
  return target;
1973
1973
  };
1974
1974
  const _hoisted_1$X = ["aria-hidden"];
1975
- const _hoisted_2$G = ["xlink:href"];
1976
- function _sfc_render$R(_ctx, _cache, $props, $setup, $data, $options) {
1975
+ const _hoisted_2$G = ["href"];
1976
+ function _sfc_render$Q(_ctx, _cache, $props, $setup, $data, $options) {
1977
1977
  return vue.openBlock(), vue.createElementBlock("svg", vue.mergeProps(_ctx.$attrs, {
1978
1978
  focusable: "false",
1979
1979
  class: ["icon", [_ctx.spriteKey, ..._ctx.modifiers]],
1980
1980
  "aria-hidden": _ctx.ariaHidden
1981
1981
  }), [vue.renderSlot(_ctx.$slots, "default"), _cache[0] || (_cache[0] = vue.createTextVNode()), vue.createElementVNode("use", {
1982
- "xlink:href": _ctx.spriteId
1982
+ href: _ctx.spriteId
1983
1983
  }, null, 8, _hoisted_2$G)], 16, _hoisted_1$X);
1984
1984
  }
1985
- const FIcon = /* @__PURE__ */ _export_sfc(_sfc_main$1d, [["render", _sfc_render$R]]);
1985
+ const FIcon = /* @__PURE__ */ _export_sfc(_sfc_main$1d, [["render", _sfc_render$Q]]);
1986
1986
  const DATA_TEST_ATTRIBUTE_NAME = "data-test";
1987
1987
  function throwErrorIfEmpty(value) {
1988
1988
  if (!value) {
@@ -3863,8 +3863,8 @@ function require_Set() {
3863
3863
  if (hasRequired_Set) return _Set;
3864
3864
  hasRequired_Set = 1;
3865
3865
  var getNative = require_getNative(), root = require_root();
3866
- var Set = getNative(root, "Set");
3867
- _Set = Set;
3866
+ var Set2 = getNative(root, "Set");
3867
+ _Set = Set2;
3868
3868
  return _Set;
3869
3869
  }
3870
3870
  var _WeakMap;
@@ -3882,12 +3882,12 @@ var hasRequired_getTag;
3882
3882
  function require_getTag() {
3883
3883
  if (hasRequired_getTag) return _getTag;
3884
3884
  hasRequired_getTag = 1;
3885
- var DataView2 = require_DataView(), Map2 = require_Map(), Promise2 = require_Promise(), Set = require_Set(), WeakMap2 = require_WeakMap(), baseGetTag = require_baseGetTag(), toSource = require_toSource();
3885
+ var DataView2 = require_DataView(), Map2 = require_Map(), Promise2 = require_Promise(), Set2 = require_Set(), WeakMap2 = require_WeakMap(), baseGetTag = require_baseGetTag(), toSource = require_toSource();
3886
3886
  var mapTag = "[object Map]", objectTag = "[object Object]", promiseTag = "[object Promise]", setTag = "[object Set]", weakMapTag = "[object WeakMap]";
3887
3887
  var dataViewTag = "[object DataView]";
3888
- var dataViewCtorString = toSource(DataView2), mapCtorString = toSource(Map2), promiseCtorString = toSource(Promise2), setCtorString = toSource(Set), weakMapCtorString = toSource(WeakMap2);
3888
+ var dataViewCtorString = toSource(DataView2), mapCtorString = toSource(Map2), promiseCtorString = toSource(Promise2), setCtorString = toSource(Set2), weakMapCtorString = toSource(WeakMap2);
3889
3889
  var getTag = baseGetTag;
3890
- if (DataView2 && getTag(new DataView2(new ArrayBuffer(1))) != dataViewTag || Map2 && getTag(new Map2()) != mapTag || Promise2 && getTag(Promise2.resolve()) != promiseTag || Set && getTag(new Set()) != setTag || WeakMap2 && getTag(new WeakMap2()) != weakMapTag) {
3890
+ if (DataView2 && getTag(new DataView2(new ArrayBuffer(1))) != dataViewTag || Map2 && getTag(new Map2()) != mapTag || Promise2 && getTag(Promise2.resolve()) != promiseTag || Set2 && getTag(new Set2()) != setTag || WeakMap2 && getTag(new WeakMap2()) != weakMapTag) {
3891
3891
  getTag = function(value) {
3892
3892
  var result = baseGetTag(value), Ctor = result == objectTag ? value.constructor : void 0, ctorString = Ctor ? toSource(Ctor) : "";
3893
3893
  if (ctorString) {
@@ -4604,7 +4604,7 @@ const _hoisted_1$W = ["id"];
4604
4604
  const _hoisted_2$F = {
4605
4605
  class: "modal__backdrop"
4606
4606
  };
4607
- const _hoisted_3$w = {
4607
+ const _hoisted_3$x = {
4608
4608
  class: "modal__inner-container"
4609
4609
  };
4610
4610
  const _hoisted_4$q = {
@@ -4634,7 +4634,7 @@ const _hoisted_10$3 = {
4634
4634
  class: "modal__shelf"
4635
4635
  };
4636
4636
  const _hoisted_11$3 = ["aria-label"];
4637
- function _sfc_render$Q(_ctx, _cache, $props, $setup, $data, $options) {
4637
+ function _sfc_render$P(_ctx, _cache, $props, $setup, $data, $options) {
4638
4638
  const _component_f_icon = vue.resolveComponent("f-icon");
4639
4639
  return _ctx.isOpen ? (vue.openBlock(), vue.createElementBlock("div", {
4640
4640
  key: 0,
@@ -4646,7 +4646,7 @@ function _sfc_render$Q(_ctx, _cache, $props, $setup, $data, $options) {
4646
4646
  role: "dialog",
4647
4647
  "aria-modal": "true",
4648
4648
  onKeyup: _cache[3] || (_cache[3] = vue.withKeys((...args) => _ctx.onClose && _ctx.onClose(...args), ["esc"]))
4649
- }, [vue.createElementVNode("div", _hoisted_3$w, [vue.createElementVNode("div", {
4649
+ }, [vue.createElementVNode("div", _hoisted_3$x, [vue.createElementVNode("div", {
4650
4650
  ref: "modalDialogContainer",
4651
4651
  class: vue.normalizeClass(["modal__dialog-container", _ctx.containerClasses])
4652
4652
  }, [vue.createElementVNode("div", _hoisted_4$q, [vue.createElementVNode("div", _hoisted_5$l, [vue.createElementVNode("div", _hoisted_6$g, [vue.createElementVNode("div", {
@@ -4664,7 +4664,7 @@ function _sfc_render$Q(_ctx, _cache, $props, $setup, $data, $options) {
4664
4664
  onFocus: _cache[2] || (_cache[2] = (...args) => _ctx.onFocusLast && _ctx.onFocusLast(...args))
4665
4665
  }, null, 32)])])], 2)])], 32)])], 10, _hoisted_1$W)) : vue.createCommentVNode("", true);
4666
4666
  }
4667
- const FModal = /* @__PURE__ */ _export_sfc(_sfc_main$1c, [["render", _sfc_render$Q]]);
4667
+ const FModal = /* @__PURE__ */ _export_sfc(_sfc_main$1c, [["render", _sfc_render$P]]);
4668
4668
  function prepareButtonList(src, buttonOrder = config.buttonOrder) {
4669
4669
  const list = src.map((it) => {
4670
4670
  var _it$event, _ref, _it$reason, _it$type;
@@ -4801,11 +4801,11 @@ const _hoisted_1$V = {
4801
4801
  class: "button-group"
4802
4802
  };
4803
4803
  const _hoisted_2$E = ["onClick"];
4804
- const _hoisted_3$v = {
4804
+ const _hoisted_3$w = {
4805
4805
  key: 0,
4806
4806
  class: "sr-only"
4807
4807
  };
4808
- function _sfc_render$P(_ctx, _cache, $props, $setup, $data, $options) {
4808
+ function _sfc_render$O(_ctx, _cache, $props, $setup, $data, $options) {
4809
4809
  const _component_f_modal = vue.resolveComponent("f-modal");
4810
4810
  return vue.openBlock(), vue.createBlock(_component_f_modal, {
4811
4811
  fullscreen: _ctx.fullscreen,
@@ -4824,12 +4824,12 @@ function _sfc_render$P(_ctx, _cache, $props, $setup, $data, $options) {
4824
4824
  type: "button",
4825
4825
  class: vue.normalizeClass([button.classlist, "button-group__item"]),
4826
4826
  onClick: ($event) => _ctx.onClick(button)
4827
- }, [vue.createElementVNode("span", null, vue.toDisplayString(button.label), 1), _cache[0] || (_cache[0] = vue.createTextVNode()), button.screenreader ? (vue.openBlock(), vue.createElementBlock("span", _hoisted_3$v, " " + vue.toDisplayString(button.screenreader), 1)) : vue.createCommentVNode("", true)], 10, _hoisted_2$E);
4827
+ }, [vue.createElementVNode("span", null, vue.toDisplayString(button.label), 1), _cache[0] || (_cache[0] = vue.createTextVNode()), button.screenreader ? (vue.openBlock(), vue.createElementBlock("span", _hoisted_3$w, " " + vue.toDisplayString(button.screenreader), 1)) : vue.createCommentVNode("", true)], 10, _hoisted_2$E);
4828
4828
  }), 128))])]),
4829
4829
  _: 3
4830
4830
  }, 8, ["fullscreen", "is-open", "aria-close-text", "size", "focus", "onClose"]);
4831
4831
  }
4832
- const FConfirmModal = /* @__PURE__ */ _export_sfc(_sfc_main$1b, [["render", _sfc_render$P]]);
4832
+ const FConfirmModal = /* @__PURE__ */ _export_sfc(_sfc_main$1b, [["render", _sfc_render$O]]);
4833
4833
  const GAP = ["1x", "2x", "3x", "4x", "5x", "6x", "7x", "8x"];
4834
4834
  const ALIGNMENT = ["top", "center", "bottom"];
4835
4835
  const FLOAT = ["left", "center", "right"];
@@ -4908,12 +4908,12 @@ const _sfc_main$1a = vue.defineComponent({
4908
4908
  }
4909
4909
  }
4910
4910
  });
4911
- function _sfc_render$O(_ctx, _cache, $props, $setup, $data, $options) {
4911
+ function _sfc_render$N(_ctx, _cache, $props, $setup, $data, $options) {
4912
4912
  return vue.openBlock(), vue.createElementBlock("div", {
4913
4913
  class: vue.normalizeClass(["iflex", _ctx.classList])
4914
4914
  }, [vue.renderSlot(_ctx.$slots, "default")], 2);
4915
4915
  }
4916
- const IFlex = /* @__PURE__ */ _export_sfc(_sfc_main$1a, [["render", _sfc_render$O]]);
4916
+ const IFlex = /* @__PURE__ */ _export_sfc(_sfc_main$1a, [["render", _sfc_render$N]]);
4917
4917
  const _sfc_main$19 = vue.defineComponent({
4918
4918
  name: "IFlexItem",
4919
4919
  inheritAttrs: true,
@@ -4961,12 +4961,12 @@ const _sfc_main$19 = vue.defineComponent({
4961
4961
  }
4962
4962
  }
4963
4963
  });
4964
- function _sfc_render$N(_ctx, _cache, $props, $setup, $data, $options) {
4964
+ function _sfc_render$M(_ctx, _cache, $props, $setup, $data, $options) {
4965
4965
  return vue.openBlock(), vue.createElementBlock("div", {
4966
4966
  class: vue.normalizeClass(["iflex__item", _ctx.classList])
4967
4967
  }, [vue.renderSlot(_ctx.$slots, "default")], 2);
4968
4968
  }
4969
- const IFlexItem = /* @__PURE__ */ _export_sfc(_sfc_main$19, [["render", _sfc_render$N]]);
4969
+ const IFlexItem = /* @__PURE__ */ _export_sfc(_sfc_main$19, [["render", _sfc_render$M]]);
4970
4970
  function focusError(item) {
4971
4971
  const element = document.querySelector(`#${item.id}`);
4972
4972
  if (!element) {
@@ -5038,14 +5038,14 @@ const _hoisted_1$U = {
5038
5038
  const _hoisted_2$D = {
5039
5039
  key: 0
5040
5040
  };
5041
- const _hoisted_3$u = {
5041
+ const _hoisted_3$v = {
5042
5042
  class: "error-list__list error-list--list-style-none"
5043
5043
  };
5044
5044
  const _hoisted_4$p = ["onClick"];
5045
5045
  const _hoisted_5$k = {
5046
5046
  class: "error-list__link"
5047
5047
  };
5048
- function _sfc_render$M(_ctx, _cache, $props, $setup, $data, $options) {
5048
+ function _sfc_render$L(_ctx, _cache, $props, $setup, $data, $options) {
5049
5049
  const _component_f_icon = vue.resolveComponent("f-icon");
5050
5050
  const _component_i_flex_item = vue.resolveComponent("i-flex-item");
5051
5051
  const _component_i_flex = vue.resolveComponent("i-flex");
@@ -5068,7 +5068,7 @@ function _sfc_render$M(_ctx, _cache, $props, $setup, $data, $options) {
5068
5068
  })) : vue.createCommentVNode("", true), _cache[7] || (_cache[7] = vue.createTextVNode()), vue.createVNode(_component_i_flex_item, {
5069
5069
  grow: ""
5070
5070
  }, {
5071
- default: vue.withCtx(() => [_ctx.hasTitleSlot ? (vue.openBlock(), vue.createElementBlock("div", _hoisted_2$D, [vue.renderSlot(_ctx.$slots, "title")])) : vue.createCommentVNode("", true), _cache[5] || (_cache[5] = vue.createTextVNode()), vue.createElementVNode("ul", _hoisted_3$u, [(vue.openBlock(true), vue.createElementBlock(vue.Fragment, null, vue.renderList(_ctx.items, (item) => {
5071
+ default: vue.withCtx(() => [_ctx.hasTitleSlot ? (vue.openBlock(), vue.createElementBlock("div", _hoisted_2$D, [vue.renderSlot(_ctx.$slots, "title")])) : vue.createCommentVNode("", true), _cache[5] || (_cache[5] = vue.createTextVNode()), vue.createElementVNode("ul", _hoisted_3$v, [(vue.openBlock(true), vue.createElementBlock(vue.Fragment, null, vue.renderList(_ctx.items, (item) => {
5072
5072
  return vue.openBlock(), vue.createElementBlock("li", {
5073
5073
  key: item.id,
5074
5074
  class: vue.normalizeClass(_ctx.liClasses(item))
@@ -5099,7 +5099,7 @@ function _sfc_render$M(_ctx, _cache, $props, $setup, $data, $options) {
5099
5099
  _: 3
5100
5100
  })]);
5101
5101
  }
5102
- const FErrorList = /* @__PURE__ */ _export_sfc(_sfc_main$18, [["render", _sfc_render$M]]);
5102
+ const FErrorList = /* @__PURE__ */ _export_sfc(_sfc_main$18, [["render", _sfc_render$L]]);
5103
5103
  var es_iterator_every = {};
5104
5104
  var hasRequiredEs_iterator_every;
5105
5105
  function requireEs_iterator_every() {
@@ -5257,13 +5257,13 @@ const _sfc_main$17 = vue.defineComponent({
5257
5257
  }
5258
5258
  }
5259
5259
  });
5260
- function _sfc_render$L(_ctx, _cache, $props, $setup, $data, $options) {
5260
+ function _sfc_render$K(_ctx, _cache, $props, $setup, $data, $options) {
5261
5261
  return vue.openBlock(), vue.createElementBlock("div", {
5262
5262
  onComponentValidity: _cache[0] || (_cache[0] = (...args) => _ctx.onComponentValidity && _ctx.onComponentValidity(...args)),
5263
5263
  onComponentUnmount: _cache[1] || (_cache[1] = (...args) => _ctx.onComponentUnmount && _ctx.onComponentUnmount(...args))
5264
5264
  }, [vue.renderSlot(_ctx.$slots, "default")], 32);
5265
5265
  }
5266
- const FValidationGroup = /* @__PURE__ */ _export_sfc(_sfc_main$17, [["render", _sfc_render$L]]);
5266
+ const FValidationGroup = /* @__PURE__ */ _export_sfc(_sfc_main$17, [["render", _sfc_render$K]]);
5267
5267
  var FValidationFormAction = /* @__PURE__ */ ((FValidationFormAction2) => {
5268
5268
  FValidationFormAction2[FValidationFormAction2["CONTINUE"] = 0] = "CONTINUE";
5269
5269
  FValidationFormAction2[FValidationFormAction2["CANCEL"] = 1] = "CANCEL";
@@ -5415,7 +5415,7 @@ const _hoisted_2$C = {
5415
5415
  tabindex: "-1",
5416
5416
  role: "group"
5417
5417
  };
5418
- function _sfc_render$K(_ctx, _cache, $props, $setup, $data, $options) {
5418
+ function _sfc_render$J(_ctx, _cache, $props, $setup, $data, $options) {
5419
5419
  const _component_f_error_list = vue.resolveComponent("f-error-list");
5420
5420
  const _component_f_validation_group = vue.resolveComponent("f-validation-group");
5421
5421
  return vue.openBlock(), vue.createBlock(_component_f_validation_group, {
@@ -5441,7 +5441,7 @@ function _sfc_render$K(_ctx, _cache, $props, $setup, $data, $options) {
5441
5441
  _: 3
5442
5442
  }, 8, ["modelValue"]);
5443
5443
  }
5444
- const FValidationForm = /* @__PURE__ */ _export_sfc(_sfc_main$16, [["render", _sfc_render$K]]);
5444
+ const FValidationForm = /* @__PURE__ */ _export_sfc(_sfc_main$16, [["render", _sfc_render$J]]);
5445
5445
  const _sfc_main$15 = vue.defineComponent({
5446
5446
  name: "FFormModal",
5447
5447
  components: {
@@ -5540,6 +5540,14 @@ const _sfc_main$15 = vue.defineComponent({
5540
5540
  default() {
5541
5541
  }
5542
5542
  },
5543
+ /**
5544
+ * List of buttons to display in the modal.
5545
+ * Each button is defined as an FModalButtonDescriptor with the following properties:
5546
+ * - `label` (String): The text displayed on the button.
5547
+ * - `event` (String): The event emitted when the button is clicked.
5548
+ * - `type` (String): The button type. Valid values are: "primary" or "secondary".
5549
+ * - `submitButton` (Boolean): Whether the button is a submit button.
5550
+ */
5543
5551
  buttons: {
5544
5552
  type: Array,
5545
5553
  required: false,
@@ -5595,11 +5603,11 @@ const _hoisted_1$S = {
5595
5603
  class: "button-group"
5596
5604
  };
5597
5605
  const _hoisted_2$B = ["type", "form", "onClick"];
5598
- const _hoisted_3$t = {
5606
+ const _hoisted_3$u = {
5599
5607
  key: 0,
5600
5608
  class: "sr-only"
5601
5609
  };
5602
- function _sfc_render$J(_ctx, _cache, $props, $setup, $data, $options) {
5610
+ function _sfc_render$I(_ctx, _cache, $props, $setup, $data, $options) {
5603
5611
  const _component_f_validation_form = vue.resolveComponent("f-validation-form");
5604
5612
  const _component_f_modal = vue.resolveComponent("f-modal");
5605
5613
  return vue.openBlock(), vue.createBlock(_component_f_modal, {
@@ -5630,12 +5638,12 @@ function _sfc_render$J(_ctx, _cache, $props, $setup, $data, $options) {
5630
5638
  class: vue.normalizeClass([button.classlist, "button-group__item"]),
5631
5639
  form: button.buttonType === "submit" ? _ctx.formId : void 0,
5632
5640
  onClick: ($event) => button.buttonType === "button" ? _ctx.onCancel() : false
5633
- }, [vue.createElementVNode("span", null, vue.toDisplayString(button.label), 1), _cache[2] || (_cache[2] = vue.createTextVNode()), button.screenreader ? (vue.openBlock(), vue.createElementBlock("span", _hoisted_3$t, " " + vue.toDisplayString(button.screenreader), 1)) : vue.createCommentVNode("", true)], 10, _hoisted_2$B);
5641
+ }, [vue.createElementVNode("span", null, vue.toDisplayString(button.label), 1), _cache[2] || (_cache[2] = vue.createTextVNode()), button.screenreader ? (vue.openBlock(), vue.createElementBlock("span", _hoisted_3$u, " " + vue.toDisplayString(button.screenreader), 1)) : vue.createCommentVNode("", true)], 10, _hoisted_2$B);
5634
5642
  }), 128))])]),
5635
5643
  _: 3
5636
5644
  }, 8, ["data-test", "fullscreen", "is-open", "size", "aria-close-text", "onClose"]);
5637
5645
  }
5638
- const FFormModal = /* @__PURE__ */ _export_sfc(_sfc_main$15, [["render", _sfc_render$J]]);
5646
+ const FFormModal = /* @__PURE__ */ _export_sfc(_sfc_main$15, [["render", _sfc_render$I]]);
5639
5647
  async function confirmModal(callingInstance, texts) {
5640
5648
  const buttons = [{
5641
5649
  label: texts.confirm,
@@ -5952,6 +5960,9 @@ const ValidationPrefixDirective = {
5952
5960
  };
5953
5961
  const ValidationPlugin = {
5954
5962
  install(app) {
5963
+ for (const validator of logic.availableValidators) {
5964
+ logic.ValidationService.registerValidator(validator);
5965
+ }
5955
5966
  app.directive("validation", ValidationDirective);
5956
5967
  app.directive("validationPrefix", ValidationPrefixDirective);
5957
5968
  }
@@ -6008,12 +6019,12 @@ const _sfc_main$14 = vue.defineComponent({
6008
6019
  const _hoisted_1$R = {
6009
6020
  "data-test": "f-error-page"
6010
6021
  };
6011
- function _sfc_render$I(_ctx, _cache, $props, $setup, $data, $options) {
6022
+ function _sfc_render$H(_ctx, _cache, $props, $setup, $data, $options) {
6012
6023
  return vue.openBlock(), vue.createElementBlock("div", _hoisted_1$R, _cache[0] || (_cache[0] = [vue.createElementVNode("h1", null, "Fel", -1), vue.createTextVNode(), vue.createElementVNode("p", null, "Ett fel har uppstått.", -1), vue.createTextVNode(), vue.createElementVNode("a", {
6013
6024
  href: "/"
6014
6025
  }, "Gå till startsidan", -1)]));
6015
6026
  }
6016
- const FErrorPage = /* @__PURE__ */ _export_sfc(_sfc_main$14, [["render", _sfc_render$I]]);
6027
+ const FErrorPage = /* @__PURE__ */ _export_sfc(_sfc_main$14, [["render", _sfc_render$H]]);
6017
6028
  const _sfc_main$13 = vue.defineComponent({
6018
6029
  name: "FErrorHandlingApp",
6019
6030
  props: {
@@ -6043,7 +6054,7 @@ const _sfc_main$13 = vue.defineComponent({
6043
6054
  });
6044
6055
  }
6045
6056
  });
6046
- function _sfc_render$H(_ctx, _cache, $props, $setup, $data, $options) {
6057
+ function _sfc_render$G(_ctx, _cache, $props, $setup, $data, $options) {
6047
6058
  return vue.openBlock(), vue.createElementBlock("div", null, [_ctx.hasError ? (vue.openBlock(), vue.createBlock(vue.resolveDynamicComponent(_ctx.errorComponent), {
6048
6059
  key: 0,
6049
6060
  payload: _ctx.payload
@@ -6053,7 +6064,7 @@ function _sfc_render$H(_ctx, _cache, $props, $setup, $data, $options) {
6053
6064
  key: 2
6054
6065
  })]);
6055
6066
  }
6056
- const FErrorHandlingApp = /* @__PURE__ */ _export_sfc(_sfc_main$13, [["render", _sfc_render$H]]);
6067
+ const FErrorHandlingApp = /* @__PURE__ */ _export_sfc(_sfc_main$13, [["render", _sfc_render$G]]);
6057
6068
  function isMonthBefore(date2, minDate) {
6058
6069
  return Boolean(minDate && date2.isBefore(minDate.startOfMonth()));
6059
6070
  }
@@ -6214,7 +6225,7 @@ const _hoisted_2$A = {
6214
6225
  class: "calendar-navbar__month",
6215
6226
  tabindex: "-1"
6216
6227
  };
6217
- const _hoisted_3$s = ["aria-disabled", "aria-live"];
6228
+ const _hoisted_3$t = ["aria-disabled", "aria-live"];
6218
6229
  const _hoisted_4$o = {
6219
6230
  class: "sr-only"
6220
6231
  };
@@ -6222,7 +6233,7 @@ const _hoisted_5$j = ["aria-disabled", "aria-live"];
6222
6233
  const _hoisted_6$f = {
6223
6234
  class: "sr-only"
6224
6235
  };
6225
- function _sfc_render$G(_ctx, _cache, $props, $setup, $data, $options) {
6236
+ function _sfc_render$F(_ctx, _cache, $props, $setup, $data, $options) {
6226
6237
  const _component_f_icon = vue.resolveComponent("f-icon");
6227
6238
  return vue.openBlock(), vue.createElementBlock("div", _hoisted_1$Q, [vue.createElementVNode("div", _hoisted_2$A, vue.toDisplayString(_ctx.currentText), 1), _cache[4] || (_cache[4] = vue.createTextVNode()), vue.createElementVNode("button", {
6228
6239
  ref: "previousButton",
@@ -6234,7 +6245,7 @@ function _sfc_render$G(_ctx, _cache, $props, $setup, $data, $options) {
6234
6245
  }, [vue.createElementVNode("span", _hoisted_4$o, vue.toDisplayString(_ctx.previousSrText), 1), _cache[2] || (_cache[2] = vue.createTextVNode()), vue.createVNode(_component_f_icon, {
6235
6246
  class: vue.normalizeClass(_ctx.previousIconClasses),
6236
6247
  name: "arrow-right"
6237
- }, null, 8, ["class"])], 8, _hoisted_3$s), _cache[5] || (_cache[5] = vue.createTextVNode()), vue.createElementVNode("button", {
6248
+ }, null, 8, ["class"])], 8, _hoisted_3$t), _cache[5] || (_cache[5] = vue.createTextVNode()), vue.createElementVNode("button", {
6238
6249
  ref: "nextButton",
6239
6250
  class: "calendar-navbar__arrow calendar-navbar__arrow--next",
6240
6251
  type: "button",
@@ -6246,7 +6257,7 @@ function _sfc_render$G(_ctx, _cache, $props, $setup, $data, $options) {
6246
6257
  name: "arrow-right"
6247
6258
  }, null, 8, ["class"])], 8, _hoisted_5$j)]);
6248
6259
  }
6249
- const ICalendarNavbar = /* @__PURE__ */ _export_sfc(_sfc_main$12, [["render", _sfc_render$G]]);
6260
+ const ICalendarNavbar = /* @__PURE__ */ _export_sfc(_sfc_main$12, [["render", _sfc_render$F]]);
6250
6261
  function getDayStartOffset(days) {
6251
6262
  return days[0].weekDay - 1;
6252
6263
  }
@@ -6332,7 +6343,7 @@ const _hoisted_2$z = {
6332
6343
  key: 0,
6333
6344
  class: "calendar-month__col--week"
6334
6345
  };
6335
- const _hoisted_3$r = {
6346
+ const _hoisted_3$s = {
6336
6347
  key: 0,
6337
6348
  scope: "col",
6338
6349
  "aria-hidden": "true",
@@ -6359,7 +6370,7 @@ const _hoisted_11$2 = {
6359
6370
  "aria-hidden": "true"
6360
6371
  };
6361
6372
  const _hoisted_12$2 = ["colspan"];
6362
- function _sfc_render$F(_ctx, _cache, $props, $setup, $data, $options) {
6373
+ function _sfc_render$E(_ctx, _cache, $props, $setup, $data, $options) {
6363
6374
  return vue.openBlock(), vue.createElementBlock("table", {
6364
6375
  class: "calendar-month__table",
6365
6376
  role: "grid",
@@ -6380,7 +6391,7 @@ function _sfc_render$F(_ctx, _cache, $props, $setup, $data, $options) {
6380
6391
  class: "calendar-month__col--day"
6381
6392
  }, null, -1)), _cache[14] || (_cache[14] = vue.createTextVNode()), _cache[15] || (_cache[15] = vue.createElementVNode("col", {
6382
6393
  class: "calendar-month__col--day"
6383
- }, null, -1))]), _cache[22] || (_cache[22] = vue.createTextVNode()), vue.createElementVNode("thead", null, [vue.createElementVNode("tr", null, [!_ctx.internalHideWeekNumbers ? (vue.openBlock(), vue.createElementBlock("th", _hoisted_3$r)) : vue.createCommentVNode("", true), _cache[16] || (_cache[16] = vue.createTextVNode()), (vue.openBlock(true), vue.createElementBlock(vue.Fragment, null, vue.renderList(_ctx.weekdays, (weekday) => {
6394
+ }, null, -1))]), _cache[22] || (_cache[22] = vue.createTextVNode()), vue.createElementVNode("thead", null, [vue.createElementVNode("tr", null, [!_ctx.internalHideWeekNumbers ? (vue.openBlock(), vue.createElementBlock("th", _hoisted_3$s)) : vue.createCommentVNode("", true), _cache[16] || (_cache[16] = vue.createTextVNode()), (vue.openBlock(true), vue.createElementBlock(vue.Fragment, null, vue.renderList(_ctx.weekdays, (weekday) => {
6384
6395
  return vue.openBlock(), vue.createElementBlock("th", {
6385
6396
  key: weekday.name,
6386
6397
  scope: "col",
@@ -6422,7 +6433,7 @@ function _sfc_render$F(_ctx, _cache, $props, $setup, $data, $options) {
6422
6433
  "aria-hidden": "true"
6423
6434
  }, null, 8, _hoisted_12$2)])) : vue.createCommentVNode("", true)])], 40, _hoisted_1$P);
6424
6435
  }
6425
- const ICalendarMonthGrid = /* @__PURE__ */ _export_sfc(_sfc_main$11, [["render", _sfc_render$F]]);
6436
+ const ICalendarMonthGrid = /* @__PURE__ */ _export_sfc(_sfc_main$11, [["render", _sfc_render$E]]);
6426
6437
  const DayStep = {
6427
6438
  ArrowRight: 1,
6428
6439
  ArrowLeft: -1,
@@ -6537,7 +6548,7 @@ const _sfc_main$10 = vue.defineComponent({
6537
6548
  }
6538
6549
  });
6539
6550
  const _hoisted_1$O = ["data-date", "tabindex", "onClick", "onKeydown"];
6540
- function _sfc_render$E(_ctx, _cache, $props, $setup, $data, $options) {
6551
+ function _sfc_render$D(_ctx, _cache, $props, $setup, $data, $options) {
6541
6552
  const _component_i_calendar_month_grid = vue.resolveComponent("i-calendar-month-grid");
6542
6553
  return vue.openBlock(), vue.createBlock(_component_i_calendar_month_grid, {
6543
6554
  value: _ctx.modelValue
@@ -6560,7 +6571,7 @@ function _sfc_render$E(_ctx, _cache, $props, $setup, $data, $options) {
6560
6571
  _: 3
6561
6572
  }, 8, ["value"]);
6562
6573
  }
6563
- const ICalendarMonth = /* @__PURE__ */ _export_sfc(_sfc_main$10, [["render", _sfc_render$E]]);
6574
+ const ICalendarMonth = /* @__PURE__ */ _export_sfc(_sfc_main$10, [["render", _sfc_render$D]]);
6564
6575
  const _sfc_main$$ = vue.defineComponent({
6565
6576
  name: "FCalendar",
6566
6577
  components: {
@@ -6615,7 +6626,7 @@ const _sfc_main$$ = vue.defineComponent({
6615
6626
  const _hoisted_1$N = {
6616
6627
  class: "calendar__wrapper"
6617
6628
  };
6618
- function _sfc_render$D(_ctx, _cache, $props, $setup, $data, $options) {
6629
+ function _sfc_render$C(_ctx, _cache, $props, $setup, $data, $options) {
6619
6630
  const _component_i_calendar_navbar = vue.resolveComponent("i-calendar-navbar");
6620
6631
  const _component_i_calendar_month = vue.resolveComponent("i-calendar-month");
6621
6632
  return vue.openBlock(), vue.createElementBlock("div", _hoisted_1$N, [vue.createVNode(_component_i_calendar_navbar, {
@@ -6641,7 +6652,7 @@ function _sfc_render$D(_ctx, _cache, $props, $setup, $data, $options) {
6641
6652
  _: 3
6642
6653
  }, 8, ["model-value", "min-date", "max-date", "tab-date", "onClick", "onUpdate:modelValue"])]);
6643
6654
  }
6644
- const FCalendar = /* @__PURE__ */ _export_sfc(_sfc_main$$, [["render", _sfc_render$D]]);
6655
+ const FCalendar = /* @__PURE__ */ _export_sfc(_sfc_main$$, [["render", _sfc_render$C]]);
6645
6656
  function getCalendarDaySrText(day, enabled, selected, t) {
6646
6657
  const parts = [];
6647
6658
  if (!enabled) {
@@ -6731,12 +6742,12 @@ const _hoisted_1$M = {
6731
6742
  const _hoisted_2$y = {
6732
6743
  class: "sr-only"
6733
6744
  };
6734
- function _sfc_render$C(_ctx, _cache, $props, $setup, $data, $options) {
6745
+ function _sfc_render$B(_ctx, _cache, $props, $setup, $data, $options) {
6735
6746
  return vue.openBlock(), vue.createElementBlock("span", {
6736
6747
  class: vue.normalizeClass(_ctx.dayClasses)
6737
6748
  }, [vue.createElementVNode("span", _hoisted_1$M, vue.toDisplayString(_ctx.day.day), 1), _cache[0] || (_cache[0] = vue.createTextVNode()), vue.createElementVNode("span", _hoisted_2$y, vue.toDisplayString(_ctx.srText), 1)], 2);
6738
6749
  }
6739
- const FCalendarDay = /* @__PURE__ */ _export_sfc(_sfc_main$_, [["render", _sfc_render$C]]);
6750
+ const FCalendarDay = /* @__PURE__ */ _export_sfc(_sfc_main$_, [["render", _sfc_render$B]]);
6740
6751
  function useEventListener$1(target, event, callback) {
6741
6752
  vue.onMounted(() => {
6742
6753
  var _a;
@@ -6762,7 +6773,7 @@ const _hoisted_2$x = {
6762
6773
  key: 0,
6763
6774
  class: "card__header"
6764
6775
  };
6765
- const _hoisted_3$q = {
6776
+ const _hoisted_3$r = {
6766
6777
  class: "card__content"
6767
6778
  };
6768
6779
  const _hoisted_4$m = {
@@ -6807,6 +6818,9 @@ const _sfc_main$Z = /* @__PURE__ */ vue.defineComponent({
6807
6818
  if (!isMounted.value) {
6808
6819
  return;
6809
6820
  }
6821
+ if (detail.elementId !== props.id) {
6822
+ return;
6823
+ }
6810
6824
  if (!props.focusRef) {
6811
6825
  throw new Error("Element to focus on when card is invalid (`focusRef`) is required when using card validation.");
6812
6826
  }
@@ -6852,7 +6866,7 @@ const _sfc_main$Z = /* @__PURE__ */ vue.defineComponent({
6852
6866
  _: 1
6853
6867
  })]),
6854
6868
  _: 1
6855
- })) : vue.createCommentVNode("", true)]), _cache[2] || (_cache[2] = vue.createTextVNode()), vue.createElementVNode("div", _hoisted_3$q, [vue.renderSlot(_ctx.$slots, "default")]), _cache[3] || (_cache[3] = vue.createTextVNode()), hasFooterSlot.value ? (vue.openBlock(), vue.createElementBlock("div", _hoisted_4$m, [vue.renderSlot(_ctx.$slots, "footer", vue.normalizeProps(vue.guardReactiveProps({
6869
+ })) : vue.createCommentVNode("", true)]), _cache[2] || (_cache[2] = vue.createTextVNode()), vue.createElementVNode("div", _hoisted_3$r, [vue.renderSlot(_ctx.$slots, "default")]), _cache[3] || (_cache[3] = vue.createTextVNode()), hasFooterSlot.value ? (vue.openBlock(), vue.createElementBlock("div", _hoisted_4$m, [vue.renderSlot(_ctx.$slots, "footer", vue.normalizeProps(vue.guardReactiveProps({
6856
6870
  hasError: hasError.value,
6857
6871
  validationMessage: validationMessage.value
6858
6872
  })))])) : vue.createCommentVNode("", true)], 42, _hoisted_1$L);
@@ -6913,7 +6927,7 @@ const _sfc_main$Y = vue.defineComponent({
6913
6927
  }
6914
6928
  }
6915
6929
  });
6916
- function _sfc_render$B(_ctx, _cache, $props, $setup, $data, $options) {
6930
+ function _sfc_render$A(_ctx, _cache, $props, $setup, $data, $options) {
6917
6931
  return vue.openBlock(), vue.createBlock(vue.Transition, {
6918
6932
  onEnter: _ctx.enter,
6919
6933
  onAfterEnter: _ctx.afterEnter,
@@ -6925,7 +6939,7 @@ function _sfc_render$B(_ctx, _cache, $props, $setup, $data, $options) {
6925
6939
  _: 3
6926
6940
  }, 8, ["onEnter", "onAfterEnter", "onLeave"]);
6927
6941
  }
6928
- const FExpand = /* @__PURE__ */ _export_sfc(_sfc_main$Y, [["render", _sfc_render$B]]);
6942
+ const FExpand = /* @__PURE__ */ _export_sfc(_sfc_main$Y, [["render", _sfc_render$A]]);
6929
6943
  function offset(page, el) {
6930
6944
  const rect = el.getBoundingClientRect();
6931
6945
  return {
@@ -7491,7 +7505,7 @@ const _sfc_main$X = vue.defineComponent({
7491
7505
  }
7492
7506
  }
7493
7507
  });
7494
- function _sfc_render$A(_ctx, _cache, $props, $setup, $data, $options) {
7508
+ function _sfc_render$z(_ctx, _cache, $props, $setup, $data, $options) {
7495
7509
  return _ctx.isOpen ? (vue.openBlock(), vue.createBlock(vue.Teleport, {
7496
7510
  key: 0,
7497
7511
  to: _ctx.teleportTarget,
@@ -7512,7 +7526,7 @@ function _sfc_render$A(_ctx, _cache, $props, $setup, $data, $options) {
7512
7526
  placement: _ctx.placement
7513
7527
  })))], 544)], 16)], 8, ["to", "disabled"])) : vue.createCommentVNode("", true);
7514
7528
  }
7515
- const IPopup = /* @__PURE__ */ _export_sfc(_sfc_main$X, [["render", _sfc_render$A]]);
7529
+ const IPopup = /* @__PURE__ */ _export_sfc(_sfc_main$X, [["render", _sfc_render$z]]);
7516
7530
  function computeArrowOffset(placement, inputIconRect, wrapperRect) {
7517
7531
  switch (placement) {
7518
7532
  case Placement.A: {
@@ -7718,7 +7732,7 @@ const _hoisted_1$K = {
7718
7732
  ref: "wrapper",
7719
7733
  class: "popup-error__wrapper"
7720
7734
  };
7721
- function _sfc_render$z(_ctx, _cache, $props, $setup, $data, $options) {
7735
+ function _sfc_render$y(_ctx, _cache, $props, $setup, $data, $options) {
7722
7736
  const _component_f_icon = vue.resolveComponent("f-icon");
7723
7737
  return _ctx.isOpen ? (vue.openBlock(), vue.createBlock(vue.Teleport, {
7724
7738
  key: 0,
@@ -7742,7 +7756,7 @@ function _sfc_render$z(_ctx, _cache, $props, $setup, $data, $options) {
7742
7756
  class: "button__icon"
7743
7757
  })])], 6)], 512)], 2)], 8, ["to", "disabled"])) : vue.createCommentVNode("", true);
7744
7758
  }
7745
- const IPopupError = /* @__PURE__ */ _export_sfc(_sfc_main$W, [["render", _sfc_render$z]]);
7759
+ const IPopupError = /* @__PURE__ */ _export_sfc(_sfc_main$W, [["render", _sfc_render$y]]);
7746
7760
  function numItems(itemHeight, availableHeight, verticalSpacing) {
7747
7761
  const itemsFit = Math.floor((availableHeight - verticalSpacing) / itemHeight);
7748
7762
  return Math.min(itemsFit, 7);
@@ -8272,13 +8286,13 @@ const _hoisted_2$v = {
8272
8286
  role: "menu",
8273
8287
  class: "ipopupmenu__list"
8274
8288
  };
8275
- const _hoisted_3$p = ["onClick"];
8289
+ const _hoisted_3$q = ["onClick"];
8276
8290
  const _hoisted_4$l = ["data-ref-index", "href", "target"];
8277
8291
  const _hoisted_5$h = {
8278
8292
  key: 0,
8279
8293
  class: "sr-only"
8280
8294
  };
8281
- function _sfc_render$y(_ctx, _cache, $props, $setup, $data, $options) {
8295
+ function _sfc_render$x(_ctx, _cache, $props, $setup, $data, $options) {
8282
8296
  const _component_i_popup = vue.resolveComponent("i-popup");
8283
8297
  return vue.openBlock(), vue.createBlock(_component_i_popup, {
8284
8298
  class: "ipopupmenu",
@@ -8309,12 +8323,12 @@ function _sfc_render$y(_ctx, _cache, $props, $setup, $data, $options) {
8309
8323
  role: "menuitem",
8310
8324
  target: item.target,
8311
8325
  tabindex: "0"
8312
- }, [_ctx.isSelected(index) ? (vue.openBlock(), vue.createElementBlock("span", _hoisted_5$h, [vue.createElementVNode("span", null, vue.toDisplayString(_ctx.selectedMenuItemScreenReaderText) + " ", 1)])) : vue.createCommentVNode("", true), vue.createTextVNode(" " + vue.toDisplayString(item.label), 1)], 8, _hoisted_4$l)], 10, _hoisted_3$p);
8326
+ }, [_ctx.isSelected(index) ? (vue.openBlock(), vue.createElementBlock("span", _hoisted_5$h, [vue.createElementVNode("span", null, vue.toDisplayString(_ctx.selectedMenuItemScreenReaderText) + " ", 1)])) : vue.createCommentVNode("", true), vue.createTextVNode(" " + vue.toDisplayString(item.label), 1)], 8, _hoisted_4$l)], 10, _hoisted_3$q);
8313
8327
  }), 128))])], 8, _hoisted_1$I)]),
8314
8328
  _: 1
8315
8329
  }, 8, ["is-open", "anchor", "focus-element", "onKeyup", "onKeydown"]);
8316
8330
  }
8317
- const IPopupMenu = /* @__PURE__ */ _export_sfc(_sfc_main$U, [["render", _sfc_render$y]]);
8331
+ const IPopupMenu = /* @__PURE__ */ _export_sfc(_sfc_main$U, [["render", _sfc_render$x]]);
8318
8332
  const ANIMATION_DURATION = 500;
8319
8333
  const NO_CSS_CLASSES = "";
8320
8334
  const CLOSED_CSS_CLASS_OPACITY = "animate-expand animate-expand--opacity";
@@ -8517,13 +8531,13 @@ const _hoisted_1$H = {
8517
8531
  ref: "content",
8518
8532
  "data-test": "animation-content"
8519
8533
  };
8520
- function _sfc_render$x(_ctx, _cache, $props, $setup, $data, $options) {
8534
+ function _sfc_render$w(_ctx, _cache, $props, $setup, $data, $options) {
8521
8535
  return vue.openBlock(), vue.createElementBlock("div", {
8522
8536
  class: vue.normalizeClass(_ctx.animationClasses),
8523
8537
  style: vue.normalizeStyle(_ctx.heightStyle)
8524
8538
  }, [_ctx.shouldVIf ? vue.withDirectives((vue.openBlock(), vue.createElementBlock("div", _hoisted_1$H, [vue.renderSlot(_ctx.$slots, "default")], 512)), [[vue.vShow, _ctx.shouldVShow]]) : vue.createCommentVNode("", true)], 6);
8525
8539
  }
8526
- const IAnimateExpand = /* @__PURE__ */ _export_sfc(_sfc_main$T, [["render", _sfc_render$x]]);
8540
+ const IAnimateExpand = /* @__PURE__ */ _export_sfc(_sfc_main$T, [["render", _sfc_render$w]]);
8527
8541
  const _sfc_main$S = vue.defineComponent({
8528
8542
  name: "ISkipLink",
8529
8543
  mixins: [TranslationMixin],
@@ -8539,13 +8553,13 @@ const _sfc_main$S = vue.defineComponent({
8539
8553
  }
8540
8554
  });
8541
8555
  const _hoisted_1$G = ["href"];
8542
- function _sfc_render$w(_ctx, _cache, $props, $setup, $data, $options) {
8556
+ function _sfc_render$v(_ctx, _cache, $props, $setup, $data, $options) {
8543
8557
  return vue.openBlock(), vue.createElementBlock("a", {
8544
8558
  class: "iskiplink",
8545
8559
  href: _ctx.href
8546
8560
  }, [vue.renderSlot(_ctx.$slots, "default", {}, () => [vue.createTextVNode(vue.toDisplayString(_ctx.$t("fkui.skip-link.text", "Gå direkt till innehåll")), 1)])], 8, _hoisted_1$G);
8547
8561
  }
8548
- const ISkipLink = /* @__PURE__ */ _export_sfc(_sfc_main$S, [["render", _sfc_render$w]]);
8562
+ const ISkipLink = /* @__PURE__ */ _export_sfc(_sfc_main$S, [["render", _sfc_render$v]]);
8549
8563
  function filterOptions(options, filter2, selectMode) {
8550
8564
  if (logic.isEmpty(filter2) || selectMode) {
8551
8565
  return options;
@@ -8795,7 +8809,7 @@ const _hoisted_1$F = {
8795
8809
  class: "combobox"
8796
8810
  };
8797
8811
  const _hoisted_2$u = ["id"];
8798
- const _hoisted_3$o = ["id", "aria-selected", "onClick"];
8812
+ const _hoisted_3$p = ["id", "aria-selected", "onClick"];
8799
8813
  const _sfc_main$R = /* @__PURE__ */ vue.defineComponent({
8800
8814
  __name: "IComboboxDropdown",
8801
8815
  props: {
@@ -8857,7 +8871,7 @@ const _sfc_main$R = /* @__PURE__ */ vue.defineComponent({
8857
8871
  "combobox__listbox__option--highlight": isOptionActive(item)
8858
8872
  }]),
8859
8873
  onClick: vue.withModifiers(($event) => onOptionClick(item), ["stop", "prevent"])
8860
- }, vue.toDisplayString(item), 11, _hoisted_3$o);
8874
+ }, vue.toDisplayString(item), 11, _hoisted_3$p);
8861
8875
  }), 128))], 8, _hoisted_2$u)]),
8862
8876
  _: 1
8863
8877
  }, 8, ["is-open", "anchor", "num-of-items", "active-element"])]);
@@ -9149,7 +9163,7 @@ const _hoisted_1$D = ["aria-expanded"];
9149
9163
  const _hoisted_2$t = {
9150
9164
  class: "icon-stack icon-stack--tooltip"
9151
9165
  };
9152
- const _hoisted_3$n = {
9166
+ const _hoisted_3$o = {
9153
9167
  class: "sr-only"
9154
9168
  };
9155
9169
  const _hoisted_4$k = {
@@ -9163,7 +9177,7 @@ const _hoisted_5$g = {
9163
9177
  const _hoisted_6$d = {
9164
9178
  class: "tooltip__footer"
9165
9179
  };
9166
- function _sfc_render$v(_ctx, _cache, $props, $setup, $data, $options) {
9180
+ function _sfc_render$u(_ctx, _cache, $props, $setup, $data, $options) {
9167
9181
  const _component_f_icon = vue.resolveComponent("f-icon");
9168
9182
  return vue.openBlock(), vue.createElementBlock(vue.Fragment, null, [(vue.openBlock(), vue.createBlock(vue.Teleport, {
9169
9183
  disabled: _ctx.iconTarget === null,
@@ -9178,7 +9192,7 @@ function _sfc_render$v(_ctx, _cache, $props, $setup, $data, $options) {
9178
9192
  name: "circle"
9179
9193
  }), _cache[2] || (_cache[2] = vue.createTextVNode()), vue.createVNode(_component_f_icon, {
9180
9194
  name: "i"
9181
- }), _cache[3] || (_cache[3] = vue.createTextVNode()), vue.createElementVNode("span", _hoisted_3$n, vue.toDisplayString(_ctx.screenReaderText), 1)])], 8, _hoisted_1$D)], 8, ["disabled", "to"])), _cache[7] || (_cache[7] = vue.createTextVNode()), vue.createElementVNode("div", vue.mergeProps({
9195
+ }), _cache[3] || (_cache[3] = vue.createTextVNode()), vue.createElementVNode("span", _hoisted_3$o, vue.toDisplayString(_ctx.screenReaderText), 1)])], 8, _hoisted_1$D)], 8, ["disabled", "to"])), _cache[7] || (_cache[7] = vue.createTextVNode()), vue.createElementVNode("div", vue.mergeProps({
9182
9196
  ref: "wrapper",
9183
9197
  class: "tooltip"
9184
9198
  }, _ctx.$attrs), [_ctx.ready ? (vue.openBlock(), vue.createElementBlock("div", _hoisted_4$k, [_ctx.hasHeader ? (vue.openBlock(), vue.createBlock(vue.resolveDynamicComponent(_ctx.headerTag), {
@@ -9196,7 +9210,7 @@ function _sfc_render$v(_ctx, _cache, $props, $setup, $data, $options) {
9196
9210
  name: "close"
9197
9211
  })])])])) : vue.createCommentVNode("", true)], 16)], 64);
9198
9212
  }
9199
- const FTooltip = /* @__PURE__ */ _export_sfc(_sfc_main$P, [["render", _sfc_render$v]]);
9213
+ const FTooltip = /* @__PURE__ */ _export_sfc(_sfc_main$P, [["render", _sfc_render$u]]);
9200
9214
  function* labelClasses(options) {
9201
9215
  const {
9202
9216
  labelClass
@@ -9470,7 +9484,7 @@ const _hoisted_2$s = {
9470
9484
  key: 0,
9471
9485
  class: "sr-only"
9472
9486
  };
9473
- const _hoisted_3$m = {
9487
+ const _hoisted_3$n = {
9474
9488
  key: 0,
9475
9489
  class: "label__message label__message--error"
9476
9490
  };
@@ -9497,7 +9511,7 @@ const _hoisted_9$4 = {
9497
9511
  key: 0,
9498
9512
  class: "label__message label__message--error"
9499
9513
  };
9500
- function _sfc_render$u(_ctx, _cache, $props, $setup, $data, $options) {
9514
+ function _sfc_render$t(_ctx, _cache, $props, $setup, $data, $options) {
9501
9515
  const _component_f_icon = vue.resolveComponent("f-icon");
9502
9516
  return vue.openBlock(), vue.createElementBlock("fieldset", {
9503
9517
  id: _ctx.id,
@@ -9512,7 +9526,7 @@ function _sfc_render$u(_ctx, _cache, $props, $setup, $data, $options) {
9512
9526
  }), _cache[3] || (_cache[3] = vue.createTextVNode()), vue.renderSlot(_ctx.$slots, "error-message", vue.normalizeProps(vue.guardReactiveProps({
9513
9527
  hasError: _ctx.hasError,
9514
9528
  validationMessage: _ctx.validity.validationMessage
9515
- })), () => [_ctx.hasError ? (vue.openBlock(), vue.createElementBlock("span", _hoisted_3$m, [vue.createVNode(_component_f_icon, {
9529
+ })), () => [_ctx.hasError ? (vue.openBlock(), vue.createElementBlock("span", _hoisted_3$n, [vue.createVNode(_component_f_icon, {
9516
9530
  class: "label__icon--left",
9517
9531
  name: "error"
9518
9532
  }), vue.createTextVNode(" " + vue.toDisplayString(_ctx.validity.validationMessage), 1)])) : vue.createCommentVNode("", true)])], 2)), _cache[7] || (_cache[7] = vue.createTextVNode()), _ctx.hasCheckbox ? (vue.openBlock(), vue.createElementBlock("span", _hoisted_4$j, [_ctx.children.length === 1 ? (vue.openBlock(), vue.createElementBlock("span", _hoisted_5$f, vue.toDisplayString(_ctx.checkboxCheckedScreenReaderText), 1)) : (vue.openBlock(), vue.createElementBlock("span", _hoisted_6$c, vue.toDisplayString(_ctx.numberOfCheckedCheckboxesScreenText), 1))])) : vue.createCommentVNode("", true), _cache[8] || (_cache[8] = vue.createTextVNode()), _ctx.hasTooltipSlot ? (vue.openBlock(), vue.createElementBlock(vue.Fragment, {
@@ -9534,7 +9548,7 @@ function _sfc_render$u(_ctx, _cache, $props, $setup, $data, $options) {
9534
9548
  class: vue.normalizeClass(_ctx.groupContentClass)
9535
9549
  }, [vue.renderSlot(_ctx.$slots, "default")], 2)], 42, _hoisted_1$C);
9536
9550
  }
9537
- const FFieldset = /* @__PURE__ */ _export_sfc(_sfc_main$O, [["render", _sfc_render$u]]);
9551
+ const FFieldset = /* @__PURE__ */ _export_sfc(_sfc_main$O, [["render", _sfc_render$t]]);
9538
9552
  const anyType$1 = [String, Object, Array, Number, Date, Boolean];
9539
9553
  const _sfc_main$N = vue.defineComponent({
9540
9554
  name: "FCheckboxField",
@@ -9724,7 +9738,7 @@ const _sfc_main$N = vue.defineComponent({
9724
9738
  });
9725
9739
  const _hoisted_1$B = ["id", "disabled"];
9726
9740
  const _hoisted_2$r = ["for"];
9727
- const _hoisted_3$l = {
9741
+ const _hoisted_3$m = {
9728
9742
  key: 0,
9729
9743
  class: "checkbox__details"
9730
9744
  };
@@ -9732,7 +9746,7 @@ const _hoisted_4$i = {
9732
9746
  key: 0,
9733
9747
  class: "checkbox__details"
9734
9748
  };
9735
- function _sfc_render$t(_ctx, _cache, $props, $setup, $data, $options) {
9749
+ function _sfc_render$s(_ctx, _cache, $props, $setup, $data, $options) {
9736
9750
  return vue.openBlock(), vue.createElementBlock("div", {
9737
9751
  class: vue.normalizeClass(["checkbox", _ctx.disabledClass]),
9738
9752
  onValidity: _cache[2] || (_cache[2] = (...args) => _ctx.onValidity && _ctx.onValidity(...args))
@@ -9750,7 +9764,7 @@ function _sfc_render$t(_ctx, _cache, $props, $setup, $data, $options) {
9750
9764
  for: _ctx.id
9751
9765
  }, [vue.renderSlot(_ctx.$slots, "default"), _cache[8] || (_cache[8] = vue.createTextVNode()), _ctx.$slots.details ? (vue.openBlock(), vue.createElementBlock(vue.Fragment, {
9752
9766
  key: 0
9753
- }, [_ctx.showDetails === "always" ? (vue.openBlock(), vue.createElementBlock("span", _hoisted_3$l, [_cache[3] || (_cache[3] = vue.createElementVNode("br", null, null, -1)), _cache[4] || (_cache[4] = vue.createTextVNode()), vue.renderSlot(_ctx.$slots, "details")])) : vue.createCommentVNode("", true), _cache[7] || (_cache[7] = vue.createTextVNode()), _ctx.showDetails === "when-selected" ? (vue.openBlock(), vue.createBlock(vue.Transition, {
9767
+ }, [_ctx.showDetails === "always" ? (vue.openBlock(), vue.createElementBlock("span", _hoisted_3$m, [_cache[3] || (_cache[3] = vue.createElementVNode("br", null, null, -1)), _cache[4] || (_cache[4] = vue.createTextVNode()), vue.renderSlot(_ctx.$slots, "details")])) : vue.createCommentVNode("", true), _cache[7] || (_cache[7] = vue.createTextVNode()), _ctx.showDetails === "when-selected" ? (vue.openBlock(), vue.createBlock(vue.Transition, {
9754
9768
  key: 1,
9755
9769
  onEnter: _ctx.enter,
9756
9770
  onAfterEnter: _ctx.afterEnter,
@@ -9762,7 +9776,7 @@ function _sfc_render$t(_ctx, _cache, $props, $setup, $data, $options) {
9762
9776
  _: 3
9763
9777
  }, 8, ["onEnter", "onAfterEnter", "onLeave"])) : vue.createCommentVNode("", true)], 64)) : vue.createCommentVNode("", true)], 10, _hoisted_2$r)], 34);
9764
9778
  }
9765
- const FCheckboxField = /* @__PURE__ */ _export_sfc(_sfc_main$N, [["render", _sfc_render$t]]);
9779
+ const FCheckboxField = /* @__PURE__ */ _export_sfc(_sfc_main$N, [["render", _sfc_render$s]]);
9766
9780
  var es_iterator_some = {};
9767
9781
  var hasRequiredEs_iterator_some;
9768
9782
  function requireEs_iterator_some() {
@@ -10012,13 +10026,13 @@ const _hoisted_2$q = {
10012
10026
  tabindex: "-1",
10013
10027
  class: "contextmenu__list"
10014
10028
  };
10015
- const _hoisted_3$k = ["onClick"];
10029
+ const _hoisted_3$l = ["onClick"];
10016
10030
  const _hoisted_4$h = ["tabindex"];
10017
10031
  const _hoisted_5$e = {
10018
10032
  key: 0,
10019
10033
  class: "contextmenu__separator"
10020
10034
  };
10021
- function _sfc_render$s(_ctx, _cache, $props, $setup, $data, $options) {
10035
+ function _sfc_render$r(_ctx, _cache, $props, $setup, $data, $options) {
10022
10036
  const _component_f_icon = vue.resolveComponent("f-icon");
10023
10037
  const _component_i_popup = vue.resolveComponent("i-popup");
10024
10038
  return vue.openBlock(), vue.createBlock(_component_i_popup, {
@@ -10053,12 +10067,12 @@ function _sfc_render$s(_ctx, _cache, $props, $setup, $data, $options) {
10053
10067
  }, null, 8, ["name", "library"])) : vue.createCommentVNode("", true), _cache[3] || (_cache[3] = vue.createTextVNode()), vue.createElementVNode("a", {
10054
10068
  ref_for: true,
10055
10069
  ref: "anchors"
10056
- }, vue.toDisplayString(item.label), 513)], 8, _hoisted_4$h), _cache[4] || (_cache[4] = vue.createTextVNode()), _ctx.hasSeparatorAfterItemAt(index) ? (vue.openBlock(), vue.createElementBlock("hr", _hoisted_5$e)) : vue.createCommentVNode("", true)], 8, _hoisted_3$k);
10070
+ }, vue.toDisplayString(item.label), 513)], 8, _hoisted_4$h), _cache[4] || (_cache[4] = vue.createTextVNode()), _ctx.hasSeparatorAfterItemAt(index) ? (vue.openBlock(), vue.createElementBlock("hr", _hoisted_5$e)) : vue.createCommentVNode("", true)], 8, _hoisted_3$l);
10057
10071
  }), 128))], 512)], 40, _hoisted_1$A)]),
10058
10072
  _: 1
10059
10073
  }, 8, ["is-open", "anchor", "focus-element"]);
10060
10074
  }
10061
- const FContextMenu = /* @__PURE__ */ _export_sfc(_sfc_main$M, [["render", _sfc_render$s]]);
10075
+ const FContextMenu = /* @__PURE__ */ _export_sfc(_sfc_main$M, [["render", _sfc_render$r]]);
10062
10076
  var Operation = /* @__PURE__ */ ((Operation2) => {
10063
10077
  Operation2[Operation2["ADD"] = 0] = "ADD";
10064
10078
  Operation2[Operation2["DELETE"] = 1] = "DELETE";
@@ -10302,7 +10316,7 @@ const _sfc_main$L = /* @__PURE__ */ vue.defineComponent({
10302
10316
  isFormModalOpen.value = true;
10303
10317
  }
10304
10318
  return (_ctx, _cache) => {
10305
- return vue.openBlock(), vue.createElementBlock("div", _hoisted_1$z, [vue.renderSlot(_ctx.$slots, "default"), _cache[5] || (_cache[5] = vue.createTextVNode()), hasAddSlot.value ? (vue.openBlock(), vue.createElementBlock("div", _hoisted_2$p, [vue.createElementVNode("button", {
10319
+ return vue.openBlock(), vue.createElementBlock("div", _hoisted_1$z, [vue.renderSlot(_ctx.$slots, "default"), _cache[6] || (_cache[6] = vue.createTextVNode()), hasAddSlot.value ? (vue.openBlock(), vue.createElementBlock("div", _hoisted_2$p, [vue.createElementVNode("button", {
10306
10320
  "data-test": "f-crud-dataset-add-button",
10307
10321
  type: "button",
10308
10322
  class: "button button--tertiary crud-dataset__add-button",
@@ -10310,7 +10324,9 @@ const _sfc_main$L = /* @__PURE__ */ vue.defineComponent({
10310
10324
  }, [vue.createVNode(vue.unref(FIcon), {
10311
10325
  class: "button__icon",
10312
10326
  name: "plus"
10313
- }), _cache[1] || (_cache[1] = vue.createTextVNode()), vue.renderSlot(_ctx.$slots, "add-button", {}, () => [vue.createTextVNode(vue.toDisplayString(vue.unref($t2)("fkui.crud-dataset.button.add", "Lägg till ny")), 1)])])])) : vue.createCommentVNode("", true), _cache[6] || (_cache[6] = vue.createTextVNode()), vue.createVNode(vue.unref(FFormModal), {
10327
+ }), _cache[1] || (_cache[1] = vue.createTextVNode()), vue.renderSlot(_ctx.$slots, "add-button", {}, () => [vue.createTextVNode(vue.toDisplayString(vue.unref($t2)("fkui.crud-dataset.button.add", "Lägg till ny")), 1)])]), _cache[2] || (_cache[2] = vue.createTextVNode()), vue.renderSlot(_ctx.$slots, "buttons", vue.normalizeProps(vue.guardReactiveProps({
10328
+ buttonClasses: ["button", "button--tertiary", "crud-dataset__add-button"]
10329
+ })))])) : vue.createCommentVNode("", true), _cache[7] || (_cache[7] = vue.createTextVNode()), vue.createVNode(vue.unref(FFormModal), {
10314
10330
  "is-open": isFormModalOpen.value,
10315
10331
  "aria-close-text": vue.unref($t2)("fkui.crud-dataset.modal.close", "Stäng"),
10316
10332
  buttons: formModalButtons.value,
@@ -10327,13 +10343,13 @@ const _sfc_main$L = /* @__PURE__ */ vue.defineComponent({
10327
10343
  key: 0
10328
10344
  }, {
10329
10345
  item: item.value
10330
- }))) : vue.createCommentVNode("", true), _cache[2] || (_cache[2] = vue.createTextVNode()), operation.value === vue.unref(Operation).MODIFY ? vue.renderSlot(_ctx.$slots, "modify", vue.normalizeProps(vue.mergeProps({
10346
+ }))) : vue.createCommentVNode("", true), _cache[3] || (_cache[3] = vue.createTextVNode()), operation.value === vue.unref(Operation).MODIFY ? vue.renderSlot(_ctx.$slots, "modify", vue.normalizeProps(vue.mergeProps({
10331
10347
  key: 1
10332
10348
  }, {
10333
10349
  item: item.value
10334
10350
  }))) : vue.createCommentVNode("", true)]),
10335
10351
  _: 3
10336
- }, 8, ["is-open", "aria-close-text", "buttons", "before-submit", "before-validation", "on-cancel", "onCancel"]), _cache[7] || (_cache[7] = vue.createTextVNode()), vue.createVNode(vue.unref(FConfirmModal), {
10352
+ }, 8, ["is-open", "aria-close-text", "buttons", "before-submit", "before-validation", "on-cancel", "onCancel"]), _cache[8] || (_cache[8] = vue.createTextVNode()), vue.createVNode(vue.unref(FConfirmModal), {
10337
10353
  "is-open": isConfirmModalOpen.value,
10338
10354
  buttons: confirmDeleteButtons.value,
10339
10355
  onConfirm: onDeleteConfirm,
@@ -10361,6 +10377,10 @@ const _sfc_main$K = vue.defineComponent({
10361
10377
  },
10362
10378
  mixins: [TranslationMixin],
10363
10379
  props: {
10380
+ /**
10381
+ * The action to be performed by the button.
10382
+ * Must be one of the following values: "delete" or "modify".
10383
+ */
10364
10384
  action: {
10365
10385
  type: String,
10366
10386
  required: true,
@@ -10368,14 +10388,24 @@ const _sfc_main$K = vue.defineComponent({
10368
10388
  return ["delete", "modify"].includes(value);
10369
10389
  }
10370
10390
  },
10391
+ /**
10392
+ * Determines if an icon should be displayed on the button.
10393
+ */
10371
10394
  icon: {
10372
10395
  type: Boolean,
10373
10396
  default: false
10374
10397
  },
10398
+ /**
10399
+ * The item that the action will be performed on.
10400
+ */
10375
10401
  item: {
10376
10402
  type: Object,
10377
10403
  required: true
10378
10404
  },
10405
+ /**
10406
+ * Determines if the button should display a label.
10407
+ * If false, the button will use a visually hidden text for accessibility.
10408
+ */
10379
10409
  label: {
10380
10410
  type: Boolean,
10381
10411
  default: false
@@ -10414,7 +10444,7 @@ const _hoisted_1$y = {
10414
10444
  key: 1,
10415
10445
  class: "sr-only"
10416
10446
  };
10417
- function _sfc_render$r(_ctx, _cache, $props, $setup, $data, $options) {
10447
+ function _sfc_render$q(_ctx, _cache, $props, $setup, $data, $options) {
10418
10448
  const _component_f_icon = vue.resolveComponent("f-icon");
10419
10449
  return vue.openBlock(), vue.createElementBlock("button", {
10420
10450
  type: "button",
@@ -10428,13 +10458,578 @@ function _sfc_render$r(_ctx, _cache, $props, $setup, $data, $options) {
10428
10458
  key: 2
10429
10459
  }, () => [vue.createTextVNode(vue.toDisplayString(_ctx.buttonText), 1)]) : vue.createCommentVNode("", true)]);
10430
10460
  }
10431
- const FCrudButton = /* @__PURE__ */ _export_sfc(_sfc_main$K, [["render", _sfc_render$r]]);
10461
+ const FCrudButton = /* @__PURE__ */ _export_sfc(_sfc_main$K, [["render", _sfc_render$q]]);
10432
10462
  function ActivateItemInjected() {
10433
10463
  return {
10434
10464
  registerCallbackAfterItemAdd: vue.inject("registerCallbackAfterItemAdd", () => void 0),
10435
10465
  registerCallbackBeforeItemDelete: vue.inject("registerCallbackBeforeItemDelete", () => void 0)
10436
10466
  };
10437
10467
  }
10468
+ var es_set_difference_v2 = {};
10469
+ var setHelpers;
10470
+ var hasRequiredSetHelpers;
10471
+ function requireSetHelpers() {
10472
+ if (hasRequiredSetHelpers) return setHelpers;
10473
+ hasRequiredSetHelpers = 1;
10474
+ var uncurryThis = requireFunctionUncurryThis();
10475
+ var SetPrototype = Set.prototype;
10476
+ setHelpers = {
10477
+ // eslint-disable-next-line es/no-set -- safe
10478
+ Set,
10479
+ add: uncurryThis(SetPrototype.add),
10480
+ has: uncurryThis(SetPrototype.has),
10481
+ remove: uncurryThis(SetPrototype["delete"]),
10482
+ proto: SetPrototype
10483
+ };
10484
+ return setHelpers;
10485
+ }
10486
+ var aSet;
10487
+ var hasRequiredASet;
10488
+ function requireASet() {
10489
+ if (hasRequiredASet) return aSet;
10490
+ hasRequiredASet = 1;
10491
+ var has = requireSetHelpers().has;
10492
+ aSet = function(it) {
10493
+ has(it);
10494
+ return it;
10495
+ };
10496
+ return aSet;
10497
+ }
10498
+ var iterateSimple;
10499
+ var hasRequiredIterateSimple;
10500
+ function requireIterateSimple() {
10501
+ if (hasRequiredIterateSimple) return iterateSimple;
10502
+ hasRequiredIterateSimple = 1;
10503
+ var call = requireFunctionCall();
10504
+ iterateSimple = function(record, fn2, ITERATOR_INSTEAD_OF_RECORD) {
10505
+ var iterator = ITERATOR_INSTEAD_OF_RECORD ? record : record.iterator;
10506
+ var next = record.next;
10507
+ var step, result;
10508
+ while (!(step = call(next, iterator)).done) {
10509
+ result = fn2(step.value);
10510
+ if (result !== void 0) return result;
10511
+ }
10512
+ };
10513
+ return iterateSimple;
10514
+ }
10515
+ var setIterate;
10516
+ var hasRequiredSetIterate;
10517
+ function requireSetIterate() {
10518
+ if (hasRequiredSetIterate) return setIterate;
10519
+ hasRequiredSetIterate = 1;
10520
+ var uncurryThis = requireFunctionUncurryThis();
10521
+ var iterateSimple2 = requireIterateSimple();
10522
+ var SetHelpers = requireSetHelpers();
10523
+ var Set2 = SetHelpers.Set;
10524
+ var SetPrototype = SetHelpers.proto;
10525
+ var forEach = uncurryThis(SetPrototype.forEach);
10526
+ var keys = uncurryThis(SetPrototype.keys);
10527
+ var next = keys(new Set2()).next;
10528
+ setIterate = function(set, fn2, interruptible) {
10529
+ return interruptible ? iterateSimple2({
10530
+ iterator: keys(set),
10531
+ next
10532
+ }, fn2) : forEach(set, fn2);
10533
+ };
10534
+ return setIterate;
10535
+ }
10536
+ var setClone;
10537
+ var hasRequiredSetClone;
10538
+ function requireSetClone() {
10539
+ if (hasRequiredSetClone) return setClone;
10540
+ hasRequiredSetClone = 1;
10541
+ var SetHelpers = requireSetHelpers();
10542
+ var iterate2 = requireSetIterate();
10543
+ var Set2 = SetHelpers.Set;
10544
+ var add = SetHelpers.add;
10545
+ setClone = function(set) {
10546
+ var result = new Set2();
10547
+ iterate2(set, function(it) {
10548
+ add(result, it);
10549
+ });
10550
+ return result;
10551
+ };
10552
+ return setClone;
10553
+ }
10554
+ var setSize;
10555
+ var hasRequiredSetSize;
10556
+ function requireSetSize() {
10557
+ if (hasRequiredSetSize) return setSize;
10558
+ hasRequiredSetSize = 1;
10559
+ var uncurryThisAccessor = requireFunctionUncurryThisAccessor();
10560
+ var SetHelpers = requireSetHelpers();
10561
+ setSize = uncurryThisAccessor(SetHelpers.proto, "size", "get") || function(set) {
10562
+ return set.size;
10563
+ };
10564
+ return setSize;
10565
+ }
10566
+ var getSetRecord;
10567
+ var hasRequiredGetSetRecord;
10568
+ function requireGetSetRecord() {
10569
+ if (hasRequiredGetSetRecord) return getSetRecord;
10570
+ hasRequiredGetSetRecord = 1;
10571
+ var aCallable2 = requireACallable();
10572
+ var anObject2 = requireAnObject();
10573
+ var call = requireFunctionCall();
10574
+ var toIntegerOrInfinity2 = requireToIntegerOrInfinity();
10575
+ var getIteratorDirect2 = requireGetIteratorDirect();
10576
+ var INVALID_SIZE = "Invalid size";
10577
+ var $RangeError = RangeError;
10578
+ var $TypeError = TypeError;
10579
+ var max = Math.max;
10580
+ var SetRecord = function(set, intSize) {
10581
+ this.set = set;
10582
+ this.size = max(intSize, 0);
10583
+ this.has = aCallable2(set.has);
10584
+ this.keys = aCallable2(set.keys);
10585
+ };
10586
+ SetRecord.prototype = {
10587
+ getIterator: function() {
10588
+ return getIteratorDirect2(anObject2(call(this.keys, this.set)));
10589
+ },
10590
+ includes: function(it) {
10591
+ return call(this.has, this.set, it);
10592
+ }
10593
+ };
10594
+ getSetRecord = function(obj) {
10595
+ anObject2(obj);
10596
+ var numSize = +obj.size;
10597
+ if (numSize !== numSize) throw new $TypeError(INVALID_SIZE);
10598
+ var intSize = toIntegerOrInfinity2(numSize);
10599
+ if (intSize < 0) throw new $RangeError(INVALID_SIZE);
10600
+ return new SetRecord(obj, intSize);
10601
+ };
10602
+ return getSetRecord;
10603
+ }
10604
+ var setDifference;
10605
+ var hasRequiredSetDifference;
10606
+ function requireSetDifference() {
10607
+ if (hasRequiredSetDifference) return setDifference;
10608
+ hasRequiredSetDifference = 1;
10609
+ var aSet2 = requireASet();
10610
+ var SetHelpers = requireSetHelpers();
10611
+ var clone = requireSetClone();
10612
+ var size = requireSetSize();
10613
+ var getSetRecord2 = requireGetSetRecord();
10614
+ var iterateSet = requireSetIterate();
10615
+ var iterateSimple2 = requireIterateSimple();
10616
+ var has = SetHelpers.has;
10617
+ var remove = SetHelpers.remove;
10618
+ setDifference = function difference(other) {
10619
+ var O = aSet2(this);
10620
+ var otherRec = getSetRecord2(other);
10621
+ var result = clone(O);
10622
+ if (size(O) <= otherRec.size) iterateSet(O, function(e) {
10623
+ if (otherRec.includes(e)) remove(result, e);
10624
+ });
10625
+ else iterateSimple2(otherRec.getIterator(), function(e) {
10626
+ if (has(O, e)) remove(result, e);
10627
+ });
10628
+ return result;
10629
+ };
10630
+ return setDifference;
10631
+ }
10632
+ var setMethodAcceptSetLike;
10633
+ var hasRequiredSetMethodAcceptSetLike;
10634
+ function requireSetMethodAcceptSetLike() {
10635
+ if (hasRequiredSetMethodAcceptSetLike) return setMethodAcceptSetLike;
10636
+ hasRequiredSetMethodAcceptSetLike = 1;
10637
+ var getBuiltIn2 = requireGetBuiltIn();
10638
+ var createSetLike = function(size) {
10639
+ return {
10640
+ size,
10641
+ has: function() {
10642
+ return false;
10643
+ },
10644
+ keys: function() {
10645
+ return {
10646
+ next: function() {
10647
+ return {
10648
+ done: true
10649
+ };
10650
+ }
10651
+ };
10652
+ }
10653
+ };
10654
+ };
10655
+ var createSetLikeWithInfinitySize = function(size) {
10656
+ return {
10657
+ size,
10658
+ has: function() {
10659
+ return true;
10660
+ },
10661
+ keys: function() {
10662
+ throw new Error("e");
10663
+ }
10664
+ };
10665
+ };
10666
+ setMethodAcceptSetLike = function(name, callback) {
10667
+ var Set2 = getBuiltIn2("Set");
10668
+ try {
10669
+ new Set2()[name](createSetLike(0));
10670
+ try {
10671
+ new Set2()[name](createSetLike(-1));
10672
+ return false;
10673
+ } catch (error2) {
10674
+ if (!callback) return true;
10675
+ try {
10676
+ new Set2()[name](createSetLikeWithInfinitySize(-Infinity));
10677
+ return false;
10678
+ } catch (error) {
10679
+ var set = new Set2();
10680
+ set.add(1);
10681
+ set.add(2);
10682
+ return callback(set[name](createSetLikeWithInfinitySize(Infinity)));
10683
+ }
10684
+ }
10685
+ } catch (error) {
10686
+ return false;
10687
+ }
10688
+ };
10689
+ return setMethodAcceptSetLike;
10690
+ }
10691
+ var hasRequiredEs_set_difference_v2;
10692
+ function requireEs_set_difference_v2() {
10693
+ if (hasRequiredEs_set_difference_v2) return es_set_difference_v2;
10694
+ hasRequiredEs_set_difference_v2 = 1;
10695
+ var $ = require_export();
10696
+ var difference = requireSetDifference();
10697
+ var setMethodAcceptSetLike2 = requireSetMethodAcceptSetLike();
10698
+ var INCORRECT = !setMethodAcceptSetLike2("difference", function(result) {
10699
+ return result.size === 0;
10700
+ });
10701
+ $({
10702
+ target: "Set",
10703
+ proto: true,
10704
+ real: true,
10705
+ forced: INCORRECT
10706
+ }, {
10707
+ difference
10708
+ });
10709
+ return es_set_difference_v2;
10710
+ }
10711
+ requireEs_set_difference_v2();
10712
+ var es_set_intersection_v2 = {};
10713
+ var setIntersection;
10714
+ var hasRequiredSetIntersection;
10715
+ function requireSetIntersection() {
10716
+ if (hasRequiredSetIntersection) return setIntersection;
10717
+ hasRequiredSetIntersection = 1;
10718
+ var aSet2 = requireASet();
10719
+ var SetHelpers = requireSetHelpers();
10720
+ var size = requireSetSize();
10721
+ var getSetRecord2 = requireGetSetRecord();
10722
+ var iterateSet = requireSetIterate();
10723
+ var iterateSimple2 = requireIterateSimple();
10724
+ var Set2 = SetHelpers.Set;
10725
+ var add = SetHelpers.add;
10726
+ var has = SetHelpers.has;
10727
+ setIntersection = function intersection2(other) {
10728
+ var O = aSet2(this);
10729
+ var otherRec = getSetRecord2(other);
10730
+ var result = new Set2();
10731
+ if (size(O) > otherRec.size) {
10732
+ iterateSimple2(otherRec.getIterator(), function(e) {
10733
+ if (has(O, e)) add(result, e);
10734
+ });
10735
+ } else {
10736
+ iterateSet(O, function(e) {
10737
+ if (otherRec.includes(e)) add(result, e);
10738
+ });
10739
+ }
10740
+ return result;
10741
+ };
10742
+ return setIntersection;
10743
+ }
10744
+ var hasRequiredEs_set_intersection_v2;
10745
+ function requireEs_set_intersection_v2() {
10746
+ if (hasRequiredEs_set_intersection_v2) return es_set_intersection_v2;
10747
+ hasRequiredEs_set_intersection_v2 = 1;
10748
+ var $ = require_export();
10749
+ var fails2 = requireFails();
10750
+ var intersection2 = requireSetIntersection();
10751
+ var setMethodAcceptSetLike2 = requireSetMethodAcceptSetLike();
10752
+ var INCORRECT = !setMethodAcceptSetLike2("intersection", function(result) {
10753
+ return result.size === 2 && result.has(1) && result.has(2);
10754
+ }) || fails2(function() {
10755
+ return String(Array.from((/* @__PURE__ */ new Set([1, 2, 3])).intersection(/* @__PURE__ */ new Set([3, 2])))) !== "3,2";
10756
+ });
10757
+ $({
10758
+ target: "Set",
10759
+ proto: true,
10760
+ real: true,
10761
+ forced: INCORRECT
10762
+ }, {
10763
+ intersection: intersection2
10764
+ });
10765
+ return es_set_intersection_v2;
10766
+ }
10767
+ requireEs_set_intersection_v2();
10768
+ var es_set_isDisjointFrom_v2 = {};
10769
+ var setIsDisjointFrom;
10770
+ var hasRequiredSetIsDisjointFrom;
10771
+ function requireSetIsDisjointFrom() {
10772
+ if (hasRequiredSetIsDisjointFrom) return setIsDisjointFrom;
10773
+ hasRequiredSetIsDisjointFrom = 1;
10774
+ var aSet2 = requireASet();
10775
+ var has = requireSetHelpers().has;
10776
+ var size = requireSetSize();
10777
+ var getSetRecord2 = requireGetSetRecord();
10778
+ var iterateSet = requireSetIterate();
10779
+ var iterateSimple2 = requireIterateSimple();
10780
+ var iteratorClose2 = requireIteratorClose();
10781
+ setIsDisjointFrom = function isDisjointFrom(other) {
10782
+ var O = aSet2(this);
10783
+ var otherRec = getSetRecord2(other);
10784
+ if (size(O) <= otherRec.size) return iterateSet(O, function(e) {
10785
+ if (otherRec.includes(e)) return false;
10786
+ }, true) !== false;
10787
+ var iterator = otherRec.getIterator();
10788
+ return iterateSimple2(iterator, function(e) {
10789
+ if (has(O, e)) return iteratorClose2(iterator, "normal", false);
10790
+ }) !== false;
10791
+ };
10792
+ return setIsDisjointFrom;
10793
+ }
10794
+ var hasRequiredEs_set_isDisjointFrom_v2;
10795
+ function requireEs_set_isDisjointFrom_v2() {
10796
+ if (hasRequiredEs_set_isDisjointFrom_v2) return es_set_isDisjointFrom_v2;
10797
+ hasRequiredEs_set_isDisjointFrom_v2 = 1;
10798
+ var $ = require_export();
10799
+ var isDisjointFrom = requireSetIsDisjointFrom();
10800
+ var setMethodAcceptSetLike2 = requireSetMethodAcceptSetLike();
10801
+ var INCORRECT = !setMethodAcceptSetLike2("isDisjointFrom", function(result) {
10802
+ return !result;
10803
+ });
10804
+ $({
10805
+ target: "Set",
10806
+ proto: true,
10807
+ real: true,
10808
+ forced: INCORRECT
10809
+ }, {
10810
+ isDisjointFrom
10811
+ });
10812
+ return es_set_isDisjointFrom_v2;
10813
+ }
10814
+ requireEs_set_isDisjointFrom_v2();
10815
+ var es_set_isSubsetOf_v2 = {};
10816
+ var setIsSubsetOf;
10817
+ var hasRequiredSetIsSubsetOf;
10818
+ function requireSetIsSubsetOf() {
10819
+ if (hasRequiredSetIsSubsetOf) return setIsSubsetOf;
10820
+ hasRequiredSetIsSubsetOf = 1;
10821
+ var aSet2 = requireASet();
10822
+ var size = requireSetSize();
10823
+ var iterate2 = requireSetIterate();
10824
+ var getSetRecord2 = requireGetSetRecord();
10825
+ setIsSubsetOf = function isSubsetOf(other) {
10826
+ var O = aSet2(this);
10827
+ var otherRec = getSetRecord2(other);
10828
+ if (size(O) > otherRec.size) return false;
10829
+ return iterate2(O, function(e) {
10830
+ if (!otherRec.includes(e)) return false;
10831
+ }, true) !== false;
10832
+ };
10833
+ return setIsSubsetOf;
10834
+ }
10835
+ var hasRequiredEs_set_isSubsetOf_v2;
10836
+ function requireEs_set_isSubsetOf_v2() {
10837
+ if (hasRequiredEs_set_isSubsetOf_v2) return es_set_isSubsetOf_v2;
10838
+ hasRequiredEs_set_isSubsetOf_v2 = 1;
10839
+ var $ = require_export();
10840
+ var isSubsetOf = requireSetIsSubsetOf();
10841
+ var setMethodAcceptSetLike2 = requireSetMethodAcceptSetLike();
10842
+ var INCORRECT = !setMethodAcceptSetLike2("isSubsetOf", function(result) {
10843
+ return result;
10844
+ });
10845
+ $({
10846
+ target: "Set",
10847
+ proto: true,
10848
+ real: true,
10849
+ forced: INCORRECT
10850
+ }, {
10851
+ isSubsetOf
10852
+ });
10853
+ return es_set_isSubsetOf_v2;
10854
+ }
10855
+ requireEs_set_isSubsetOf_v2();
10856
+ var es_set_isSupersetOf_v2 = {};
10857
+ var setIsSupersetOf;
10858
+ var hasRequiredSetIsSupersetOf;
10859
+ function requireSetIsSupersetOf() {
10860
+ if (hasRequiredSetIsSupersetOf) return setIsSupersetOf;
10861
+ hasRequiredSetIsSupersetOf = 1;
10862
+ var aSet2 = requireASet();
10863
+ var has = requireSetHelpers().has;
10864
+ var size = requireSetSize();
10865
+ var getSetRecord2 = requireGetSetRecord();
10866
+ var iterateSimple2 = requireIterateSimple();
10867
+ var iteratorClose2 = requireIteratorClose();
10868
+ setIsSupersetOf = function isSupersetOf(other) {
10869
+ var O = aSet2(this);
10870
+ var otherRec = getSetRecord2(other);
10871
+ if (size(O) < otherRec.size) return false;
10872
+ var iterator = otherRec.getIterator();
10873
+ return iterateSimple2(iterator, function(e) {
10874
+ if (!has(O, e)) return iteratorClose2(iterator, "normal", false);
10875
+ }) !== false;
10876
+ };
10877
+ return setIsSupersetOf;
10878
+ }
10879
+ var hasRequiredEs_set_isSupersetOf_v2;
10880
+ function requireEs_set_isSupersetOf_v2() {
10881
+ if (hasRequiredEs_set_isSupersetOf_v2) return es_set_isSupersetOf_v2;
10882
+ hasRequiredEs_set_isSupersetOf_v2 = 1;
10883
+ var $ = require_export();
10884
+ var isSupersetOf = requireSetIsSupersetOf();
10885
+ var setMethodAcceptSetLike2 = requireSetMethodAcceptSetLike();
10886
+ var INCORRECT = !setMethodAcceptSetLike2("isSupersetOf", function(result) {
10887
+ return !result;
10888
+ });
10889
+ $({
10890
+ target: "Set",
10891
+ proto: true,
10892
+ real: true,
10893
+ forced: INCORRECT
10894
+ }, {
10895
+ isSupersetOf
10896
+ });
10897
+ return es_set_isSupersetOf_v2;
10898
+ }
10899
+ requireEs_set_isSupersetOf_v2();
10900
+ var es_set_symmetricDifference_v2 = {};
10901
+ var setSymmetricDifference;
10902
+ var hasRequiredSetSymmetricDifference;
10903
+ function requireSetSymmetricDifference() {
10904
+ if (hasRequiredSetSymmetricDifference) return setSymmetricDifference;
10905
+ hasRequiredSetSymmetricDifference = 1;
10906
+ var aSet2 = requireASet();
10907
+ var SetHelpers = requireSetHelpers();
10908
+ var clone = requireSetClone();
10909
+ var getSetRecord2 = requireGetSetRecord();
10910
+ var iterateSimple2 = requireIterateSimple();
10911
+ var add = SetHelpers.add;
10912
+ var has = SetHelpers.has;
10913
+ var remove = SetHelpers.remove;
10914
+ setSymmetricDifference = function symmetricDifference(other) {
10915
+ var O = aSet2(this);
10916
+ var keysIter = getSetRecord2(other).getIterator();
10917
+ var result = clone(O);
10918
+ iterateSimple2(keysIter, function(e) {
10919
+ if (has(O, e)) remove(result, e);
10920
+ else add(result, e);
10921
+ });
10922
+ return result;
10923
+ };
10924
+ return setSymmetricDifference;
10925
+ }
10926
+ var hasRequiredEs_set_symmetricDifference_v2;
10927
+ function requireEs_set_symmetricDifference_v2() {
10928
+ if (hasRequiredEs_set_symmetricDifference_v2) return es_set_symmetricDifference_v2;
10929
+ hasRequiredEs_set_symmetricDifference_v2 = 1;
10930
+ var $ = require_export();
10931
+ var symmetricDifference = requireSetSymmetricDifference();
10932
+ var setMethodAcceptSetLike2 = requireSetMethodAcceptSetLike();
10933
+ $({
10934
+ target: "Set",
10935
+ proto: true,
10936
+ real: true,
10937
+ forced: !setMethodAcceptSetLike2("symmetricDifference")
10938
+ }, {
10939
+ symmetricDifference
10940
+ });
10941
+ return es_set_symmetricDifference_v2;
10942
+ }
10943
+ requireEs_set_symmetricDifference_v2();
10944
+ var es_set_union_v2 = {};
10945
+ var setUnion;
10946
+ var hasRequiredSetUnion;
10947
+ function requireSetUnion() {
10948
+ if (hasRequiredSetUnion) return setUnion;
10949
+ hasRequiredSetUnion = 1;
10950
+ var aSet2 = requireASet();
10951
+ var add = requireSetHelpers().add;
10952
+ var clone = requireSetClone();
10953
+ var getSetRecord2 = requireGetSetRecord();
10954
+ var iterateSimple2 = requireIterateSimple();
10955
+ setUnion = function union(other) {
10956
+ var O = aSet2(this);
10957
+ var keysIter = getSetRecord2(other).getIterator();
10958
+ var result = clone(O);
10959
+ iterateSimple2(keysIter, function(it) {
10960
+ add(result, it);
10961
+ });
10962
+ return result;
10963
+ };
10964
+ return setUnion;
10965
+ }
10966
+ var hasRequiredEs_set_union_v2;
10967
+ function requireEs_set_union_v2() {
10968
+ if (hasRequiredEs_set_union_v2) return es_set_union_v2;
10969
+ hasRequiredEs_set_union_v2 = 1;
10970
+ var $ = require_export();
10971
+ var union = requireSetUnion();
10972
+ var setMethodAcceptSetLike2 = requireSetMethodAcceptSetLike();
10973
+ $({
10974
+ target: "Set",
10975
+ proto: true,
10976
+ real: true,
10977
+ forced: !setMethodAcceptSetLike2("union")
10978
+ }, {
10979
+ union
10980
+ });
10981
+ return es_set_union_v2;
10982
+ }
10983
+ requireEs_set_union_v2();
10984
+ const internalKey = Symbol("internal-key");
10985
+ let internalIndex = 0;
10986
+ function getInternalKey() {
10987
+ return internalKey;
10988
+ }
10989
+ function setInternalKey(item, value) {
10990
+ if (item[internalKey]) {
10991
+ return;
10992
+ }
10993
+ Object.defineProperty(item, internalKey, {
10994
+ value: value !== null && value !== void 0 ? value : String(internalIndex++),
10995
+ enumerable: false,
10996
+ writable: true
10997
+ });
10998
+ }
10999
+ function setInternalKeys(items, key, nestedKey, seenValues = /* @__PURE__ */ new Set()) {
11000
+ if (key === void 0) {
11001
+ return items.map((item) => {
11002
+ setInternalKey(item);
11003
+ if (nestedKey !== void 0) {
11004
+ const nestedItem = item[nestedKey];
11005
+ if (Array.isArray(nestedItem)) {
11006
+ setInternalKeys(nestedItem);
11007
+ }
11008
+ }
11009
+ return item;
11010
+ });
11011
+ }
11012
+ return items.map((item, index) => {
11013
+ const value = item[key];
11014
+ const keyString = String(key);
11015
+ const invalidValue = value === void 0 || value === null || String(value).length === 0;
11016
+ if (invalidValue) {
11017
+ throw new Error(`Key [${keyString}] is missing or has invalid value in item index ${index}`);
11018
+ }
11019
+ if (seenValues.has(value)) {
11020
+ throw new Error(`Expected each item to have key [${keyString}] with unique value but encountered duplicate of "${value}" in item index ${index}.`);
11021
+ }
11022
+ setInternalKey(item, String(value));
11023
+ seenValues.add(value);
11024
+ if (nestedKey !== void 0) {
11025
+ const nestedItem = item[nestedKey];
11026
+ if (Array.isArray(nestedItem)) {
11027
+ setInternalKeys(nestedItem, key, void 0, seenValues);
11028
+ }
11029
+ }
11030
+ return item;
11031
+ });
11032
+ }
10438
11033
  var FTableColumnType = /* @__PURE__ */ ((FTableColumnType2) => {
10439
11034
  FTableColumnType2["TEXT"] = "text";
10440
11035
  FTableColumnType2["DATE"] = "date";
@@ -10512,9 +11107,11 @@ function FTableInjected() {
10512
11107
  renderColumns: vue.inject("renderColumns", false)
10513
11108
  };
10514
11109
  }
10515
- const _sfc_main$J = vue.defineComponent({
10516
- name: "FTableColumn",
10517
- inheritAttrs: false,
11110
+ const _sfc_main$J = /* @__PURE__ */ vue.defineComponent({
11111
+ ...{
11112
+ inheritAttrs: false
11113
+ },
11114
+ __name: "FTableColumn",
10518
11115
  props: {
10519
11116
  /**
10520
11117
  * Unique (per-table) identifier.
@@ -10601,71 +11198,58 @@ const _sfc_main$J = vue.defineComponent({
10601
11198
  }
10602
11199
  }
10603
11200
  },
10604
- setup() {
11201
+ setup(__props) {
10605
11202
  const {
10606
11203
  renderColumns,
10607
11204
  setVisibilityColumn: setVisibilityColumn2,
10608
11205
  addColumn: addColumn2
10609
11206
  } = FTableInjected();
10610
- return {
10611
- renderColumns,
10612
- setVisibilityColumn: setVisibilityColumn2,
10613
- addColumn: addColumn2
10614
- };
10615
- },
10616
- computed: {
10617
- classes() {
10618
- return ["table__column", `table__column--${this.type}`];
10619
- },
10620
- scope() {
10621
- return this.rowHeader ? "row" : null;
10622
- },
10623
- tagName() {
10624
- if (this.rowHeader) {
11207
+ const props = __props;
11208
+ const classes = vue.computed(() => {
11209
+ return ["table__column", `table__column--${props.type}`];
11210
+ });
11211
+ const scope = vue.computed(() => {
11212
+ return props.rowHeader ? "row" : null;
11213
+ });
11214
+ const tagName2 = vue.computed(() => {
11215
+ if (props.rowHeader) {
10625
11216
  return "th";
10626
11217
  } else {
10627
11218
  return "td";
10628
11219
  }
10629
- }
10630
- },
10631
- watch: {
10632
- visible: {
10633
- handler: function() {
10634
- this.setVisibilityColumn(this.name, this.visible);
10635
- }
10636
- }
10637
- },
10638
- created() {
10639
- if (this.shrink && this.expand) {
10640
- throw new Error("Table cannot have both shrink and expand enabled at the same time");
10641
- }
10642
- const size = this.shrink ? FTableColumnSize.SHRINK : FTableColumnSize.EXPAND;
10643
- this.addColumn({
10644
- name: this.name,
10645
- title: this.title,
10646
- description: this.description || void 0,
10647
- id: logic.ElementIdService.generateElementId("column"),
10648
- size,
10649
- type: this.type,
10650
- visible: this.visible,
10651
- sortable: false,
10652
- sort: FTableColumnSort.UNSORTED
10653
11220
  });
11221
+ vue.watch(() => props.visible, () => setVisibilityColumn2(props.name, props.visible));
11222
+ vue.onMounted(() => {
11223
+ if (props.shrink && props.expand) {
11224
+ throw new Error("Table cannot have both shrink and expand enabled at the same time");
11225
+ }
11226
+ const size = props.shrink ? FTableColumnSize.SHRINK : FTableColumnSize.EXPAND;
11227
+ addColumn2({
11228
+ name: props.name,
11229
+ title: props.title,
11230
+ description: props.description || void 0,
11231
+ id: logic.ElementIdService.generateElementId("column"),
11232
+ size,
11233
+ type: props.type,
11234
+ visible: props.visible,
11235
+ sortable: false,
11236
+ sort: FTableColumnSort.UNSORTED
11237
+ });
11238
+ });
11239
+ return (_ctx, _cache) => {
11240
+ return vue.unref(renderColumns) && __props.visible ? (vue.openBlock(), vue.createBlock(vue.resolveDynamicComponent(tagName2.value), vue.mergeProps({
11241
+ key: 0,
11242
+ class: classes.value,
11243
+ scope: scope.value
11244
+ }, _ctx.$attrs), {
11245
+ default: vue.withCtx(() => [vue.renderSlot(_ctx.$slots, "default"), _cache[0] || (_cache[0] = vue.createTextVNode()), _cache[1] || (_cache[1] = vue.createElementVNode("span", {
11246
+ class: "sr-only"
11247
+ }, " ", -1))]),
11248
+ _: 3
11249
+ }, 16, ["class", "scope"])) : vue.createCommentVNode("", true);
11250
+ };
10654
11251
  }
10655
11252
  });
10656
- function _sfc_render$q(_ctx, _cache, $props, $setup, $data, $options) {
10657
- return _ctx.renderColumns && _ctx.visible ? (vue.openBlock(), vue.createBlock(vue.resolveDynamicComponent(_ctx.tagName), vue.mergeProps({
10658
- key: 0,
10659
- class: _ctx.classes,
10660
- scope: _ctx.scope
10661
- }, _ctx.$attrs), {
10662
- default: vue.withCtx(() => [vue.renderSlot(_ctx.$slots, "default"), _cache[0] || (_cache[0] = vue.createTextVNode()), _cache[1] || (_cache[1] = vue.createElementVNode("span", {
10663
- class: "sr-only"
10664
- }, " ", -1))]),
10665
- _: 3
10666
- }, 16, ["class", "scope"])) : vue.createCommentVNode("", true);
10667
- }
10668
- const FTableColumn = /* @__PURE__ */ _export_sfc(_sfc_main$J, [["render", _sfc_render$q]]);
10669
11253
  function FSortFilterDatasetInjected() {
10670
11254
  return {
10671
11255
  sort: vue.inject("sort", () => void 0),
@@ -10719,7 +11303,7 @@ const _hoisted_2$o = {
10719
11303
  key: 0,
10720
11304
  ref: "tooltipAttachTo"
10721
11305
  };
10722
- const _hoisted_3$j = ["for"];
11306
+ const _hoisted_3$k = ["for"];
10723
11307
  const _hoisted_4$g = ["for"];
10724
11308
  const _hoisted_5$d = {
10725
11309
  key: 0,
@@ -10735,7 +11319,7 @@ function _sfc_render$p(_ctx, _cache, $props, $setup, $data, $options) {
10735
11319
  return _ctx.$slots.tooltip ? (vue.openBlock(), vue.createElementBlock("div", _hoisted_1$x, [_ctx.hasDefaultSlot ? (vue.openBlock(), vue.createElementBlock("div", _hoisted_2$o, [vue.createElementVNode("label", {
10736
11320
  class: "label",
10737
11321
  for: _ctx.forProperty
10738
- }, [vue.renderSlot(_ctx.$slots, "default")], 8, _hoisted_3$j)], 512)) : vue.createCommentVNode("", true), _cache[2] || (_cache[2] = vue.createTextVNode()), vue.renderSlot(_ctx.$slots, "tooltip"), _cache[3] || (_cache[3] = vue.createTextVNode()), _ctx.hasDescriptionSlot || _ctx.hasErrorMessageSlot ? (vue.openBlock(), vue.createElementBlock("label", {
11322
+ }, [vue.renderSlot(_ctx.$slots, "default")], 8, _hoisted_3$k)], 512)) : vue.createCommentVNode("", true), _cache[2] || (_cache[2] = vue.createTextVNode()), vue.renderSlot(_ctx.$slots, "tooltip"), _cache[3] || (_cache[3] = vue.createTextVNode()), _ctx.hasDescriptionSlot || _ctx.hasErrorMessageSlot ? (vue.openBlock(), vue.createElementBlock("label", {
10739
11323
  key: 1,
10740
11324
  class: "label sr-separator",
10741
11325
  for: _ctx.forProperty
@@ -11330,7 +11914,7 @@ const _hoisted_2$n = {
11330
11914
  key: 0,
11331
11915
  class: "sr-only"
11332
11916
  };
11333
- const _hoisted_3$i = {
11917
+ const _hoisted_3$j = {
11334
11918
  key: 0,
11335
11919
  class: "sr-only"
11336
11920
  };
@@ -11373,7 +11957,7 @@ function _sfc_render$n(_ctx, _cache, $props, $setup, $data, $options) {
11373
11957
  }, [_ctx.descriptionScreenReaderText ? (vue.openBlock(), vue.createElementBlock("span", _hoisted_2$n, vue.toDisplayString(_ctx.descriptionScreenReaderText), 1)) : vue.createCommentVNode("", true), _cache[7] || (_cache[7] = vue.createTextVNode()), vue.createElementVNode("span", null, vue.toDisplayString(_ctx.descriptionText), 1)], 2)) : vue.createCommentVNode("", true), _cache[9] || (_cache[9] = vue.createTextVNode()), _ctx.discreteDescriptionText ? (vue.openBlock(), vue.createElementBlock("span", {
11374
11958
  key: 1,
11375
11959
  class: vue.normalizeClass(formatDescriptionClass)
11376
- }, [_ctx.discreteDescriptionScreenReaderText ? (vue.openBlock(), vue.createElementBlock("span", _hoisted_3$i, vue.toDisplayString(_ctx.discreteDescriptionScreenReaderText), 1)) : vue.createCommentVNode("", true), _cache[8] || (_cache[8] = vue.createTextVNode()), vue.createElementVNode("span", null, vue.toDisplayString(_ctx.discreteDescriptionText), 1)], 2)) : vue.createCommentVNode("", true)])]),
11960
+ }, [_ctx.discreteDescriptionScreenReaderText ? (vue.openBlock(), vue.createElementBlock("span", _hoisted_3$j, vue.toDisplayString(_ctx.discreteDescriptionScreenReaderText), 1)) : vue.createCommentVNode("", true), _cache[8] || (_cache[8] = vue.createTextVNode()), vue.createElementVNode("span", null, vue.toDisplayString(_ctx.discreteDescriptionText), 1)], 2)) : vue.createCommentVNode("", true)])]),
11377
11961
  "error-message": vue.withCtx(() => [vue.renderSlot(_ctx.$slots, "error-message", vue.normalizeProps(vue.guardReactiveProps({
11378
11962
  hasError: _ctx.hasError,
11379
11963
  validationMessage: _ctx.validationMessage
@@ -12260,7 +12844,7 @@ const _hoisted_1$s = {
12260
12844
  const _hoisted_2$m = {
12261
12845
  class: "sort-filter-dataset__search"
12262
12846
  };
12263
- const _hoisted_3$h = {
12847
+ const _hoisted_3$i = {
12264
12848
  class: "sr-only"
12265
12849
  };
12266
12850
  const _hoisted_4$e = ["title"];
@@ -12497,7 +13081,7 @@ const _sfc_main$s = /* @__PURE__ */ vue.defineComponent({
12497
13081
  maxlength: "64",
12498
13082
  onInput: onSearchInput
12499
13083
  }, {
12500
- default: vue.withCtx(() => [vue.createElementVNode("span", _hoisted_3$h, vue.toDisplayString(__props.placeholderFilter), 1)]),
13084
+ default: vue.withCtx(() => [vue.createElementVNode("span", _hoisted_3$i, vue.toDisplayString(__props.placeholderFilter), 1)]),
12501
13085
  _: 1
12502
13086
  }, 8, ["modelValue", "placeholder"]), _cache[4] || (_cache[4] = vue.createTextVNode()), showClearButton.value ? (vue.openBlock(), vue.createElementBlock("button", {
12503
13087
  key: 0,
@@ -12547,7 +13131,7 @@ const _hoisted_1$r = ["tabindex"];
12547
13131
  const _hoisted_2$l = {
12548
13132
  key: 0
12549
13133
  };
12550
- const _hoisted_3$g = {
13134
+ const _hoisted_3$h = {
12551
13135
  class: "table__row"
12552
13136
  };
12553
13137
  const _hoisted_4$d = ["innerHTML"];
@@ -12581,7 +13165,8 @@ const _sfc_main$r = /* @__PURE__ */ vue.defineComponent({
12581
13165
  */
12582
13166
  keyAttribute: {
12583
13167
  type: String,
12584
- required: true
13168
+ required: false,
13169
+ default: void 0
12585
13170
  },
12586
13171
  /**
12587
13172
  * If `true` alternating rows will use a different background color.
@@ -12619,6 +13204,7 @@ const _sfc_main$r = /* @__PURE__ */ vue.defineComponent({
12619
13204
  registerCallbackOnSort,
12620
13205
  registerCallbackOnMount
12621
13206
  } = FSortFilterDatasetInjected();
13207
+ const internalKey2 = getInternalKey();
12622
13208
  const columns = vue.ref([]);
12623
13209
  const props = __props;
12624
13210
  const hasCaption = vue.computed(() => {
@@ -12634,7 +13220,7 @@ const _sfc_main$r = /* @__PURE__ */ vue.defineComponent({
12634
13220
  return classes;
12635
13221
  });
12636
13222
  const isEmpty = vue.computed(() => {
12637
- return props.rows.length === 0;
13223
+ return internalRows.value.length === 0;
12638
13224
  });
12639
13225
  const visibleColumns = vue.computed(() => {
12640
13226
  return columns.value.filter((col) => col.visible);
@@ -12645,6 +13231,15 @@ const _sfc_main$r = /* @__PURE__ */ vue.defineComponent({
12645
13231
  const tabindex = vue.computed(() => {
12646
13232
  return props.scroll !== TableScroll.NONE ? 0 : void 0;
12647
13233
  });
13234
+ const internalRows = vue.computed(() => {
13235
+ const {
13236
+ keyAttribute
13237
+ } = props;
13238
+ if (keyAttribute) {
13239
+ return setInternalKeys(props.rows, keyAttribute);
13240
+ }
13241
+ return setInternalKeys(props.rows);
13242
+ });
12648
13243
  vue.provide("addColumn", (column) => {
12649
13244
  if (column.type === FTableColumnType.ACTION) {
12650
13245
  throw new Error("Cannot use action column in FDataTable component");
@@ -12656,18 +13251,14 @@ const _sfc_main$r = /* @__PURE__ */ vue.defineComponent({
12656
13251
  });
12657
13252
  vue.provide("textFieldTableMode", true);
12658
13253
  vue.provide("renderColumns", vue.computed(() => {
12659
- return props.rows.length > 0;
13254
+ return internalRows.value.length > 0;
12660
13255
  }));
12661
13256
  vue.onMounted(() => {
12662
13257
  registerCallbackOnSort(callbackOnSort);
12663
13258
  registerCallbackOnMount(callbackSortableColumns);
12664
13259
  });
12665
13260
  function rowKey(item) {
12666
- const key = item[props.keyAttribute];
12667
- if (typeof key === "undefined") {
12668
- throw new Error(`Key attribute [${props.keyAttribute}]' is missing in row`);
12669
- }
12670
- return String(key);
13261
+ return String(item[internalKey2]);
12671
13262
  }
12672
13263
  function columnClasses(column) {
12673
13264
  const classes = ["table__column", `table__column--${column.type}`, column.size];
@@ -12713,7 +13304,7 @@ const _sfc_main$r = /* @__PURE__ */ vue.defineComponent({
12713
13304
  key: column.id,
12714
13305
  class: vue.normalizeClass(column.size)
12715
13306
  }, null, 2);
12716
- }), 128))]), _cache[5] || (_cache[5] = vue.createTextVNode()), vue.createElementVNode("thead", null, [vue.createElementVNode("tr", _hoisted_3$g, [(vue.openBlock(true), vue.createElementBlock(vue.Fragment, null, vue.renderList(visibleColumns.value, (column) => {
13307
+ }), 128))]), _cache[5] || (_cache[5] = vue.createTextVNode()), vue.createElementVNode("thead", null, [vue.createElementVNode("tr", _hoisted_3$h, [(vue.openBlock(true), vue.createElementBlock(vue.Fragment, null, vue.renderList(visibleColumns.value, (column) => {
12717
13308
  return vue.openBlock(), vue.createElementBlock("th", vue.mergeProps({
12718
13309
  key: column.id,
12719
13310
  scope: "col",
@@ -12732,7 +13323,7 @@ const _sfc_main$r = /* @__PURE__ */ vue.defineComponent({
12732
13323
  })))])) : vue.createCommentVNode("", true), _cache[2] || (_cache[2] = vue.createTextVNode()), isEmpty.value ? (vue.openBlock(), vue.createElementBlock("tr", _hoisted_7$7, [vue.createElementVNode("td", {
12733
13324
  class: "table__column table__column--action",
12734
13325
  colspan: columns.value.length
12735
- }, [vue.renderSlot(_ctx.$slots, "empty", {}, () => [vue.createTextVNode(vue.toDisplayString(vue.unref($t2)("fkui.data-table.empty", "Tabellen är tom")), 1)])], 8, _hoisted_8$5)])) : vue.createCommentVNode("", true), _cache[3] || (_cache[3] = vue.createTextVNode()), (vue.openBlock(true), vue.createElementBlock(vue.Fragment, null, vue.renderList(__props.rows, (row) => {
13326
+ }, [vue.renderSlot(_ctx.$slots, "empty", {}, () => [vue.createTextVNode(vue.toDisplayString(vue.unref($t2)("fkui.data-table.empty", "Tabellen är tom")), 1)])], 8, _hoisted_8$5)])) : vue.createCommentVNode("", true), _cache[3] || (_cache[3] = vue.createTextVNode()), (vue.openBlock(true), vue.createElementBlock(vue.Fragment, null, vue.renderList(internalRows.value, (row) => {
12736
13327
  return vue.openBlock(), vue.createElementBlock("tr", {
12737
13328
  key: rowKey(row),
12738
13329
  class: "table__row"
@@ -13083,7 +13674,7 @@ const _hoisted_1$q = {
13083
13674
  class: "datepicker-field"
13084
13675
  };
13085
13676
  const _hoisted_2$k = ["disabled", "aria-expanded"];
13086
- const _hoisted_3$f = {
13677
+ const _hoisted_3$g = {
13087
13678
  class: "sr-only"
13088
13679
  };
13089
13680
  const _hoisted_4$c = {
@@ -13134,7 +13725,7 @@ function _sfc_render$j(_ctx, _cache, $props, $setup, $data, $options) {
13134
13725
  onClick: _cache[0] || (_cache[0] = ($event) => _ctx.onClickCalendarButton())
13135
13726
  }, [vue.createVNode(_component_f_icon, {
13136
13727
  name: "calendar"
13137
- }), _cache[6] || (_cache[6] = vue.createTextVNode()), vue.createElementVNode("span", _hoisted_3$f, vue.toDisplayString(_ctx.calendarButtonText), 1)], 8, _hoisted_2$k)]),
13728
+ }), _cache[6] || (_cache[6] = vue.createTextVNode()), vue.createElementVNode("span", _hoisted_3$g, vue.toDisplayString(_ctx.calendarButtonText), 1)], 8, _hoisted_2$k)]),
13138
13729
  default: vue.withCtx(() => [vue.renderSlot(_ctx.$slots, "default", {}, () => [vue.createTextVNode(vue.toDisplayString(_ctx.$t("fkui.datepicker-field.label", "Datum")), 1)]), _cache[7] || (_cache[7] = vue.createTextVNode()), _cache[8] || (_cache[8] = vue.createTextVNode()), _cache[9] || (_cache[9] = vue.createTextVNode()), _cache[10] || (_cache[10] = vue.createTextVNode())]),
13139
13730
  _: 2
13140
13731
  }, [_ctx.$slots.tooltip ? {
@@ -13274,7 +13865,7 @@ const _hoisted_2$j = {
13274
13865
  key: 0,
13275
13866
  class: "dialogue-tree__list"
13276
13867
  };
13277
- const _hoisted_3$e = ["onClick"];
13868
+ const _hoisted_3$f = ["onClick"];
13278
13869
  function _sfc_render$i(_ctx, _cache, $props, $setup, $data, $options) {
13279
13870
  const _component_f_icon = vue.resolveComponent("f-icon");
13280
13871
  return vue.openBlock(), vue.createElementBlock("div", _hoisted_1$p, [_ctx.options.length > 0 ? (vue.openBlock(), vue.createElementBlock("ul", _hoisted_2$j, [(vue.openBlock(true), vue.createElementBlock(vue.Fragment, null, vue.renderList(_ctx.options, (option, index) => {
@@ -13288,7 +13879,7 @@ function _sfc_render$i(_ctx, _cache, $props, $setup, $data, $options) {
13288
13879
  onClick: ($event) => _ctx.onClickedOption(option, index)
13289
13880
  }, [vue.createElementVNode("span", null, vue.toDisplayString(option.label), 1), _cache[0] || (_cache[0] = vue.createTextVNode()), vue.createVNode(_component_f_icon, {
13290
13881
  name: "arrow-right"
13291
- })], 8, _hoisted_3$e)]);
13882
+ })], 8, _hoisted_3$f)]);
13292
13883
  }), 128))])) : vue.renderSlot(_ctx.$slots, "default", vue.normalizeProps(vue.mergeProps({
13293
13884
  key: 1
13294
13885
  }, {
@@ -13343,6 +13934,10 @@ const _sfc_main$o = vue.defineComponent({
13343
13934
  required: false,
13344
13935
  default: 0
13345
13936
  },
13937
+ /**
13938
+ * Text template for the screen reader notification text.
13939
+ * Use `%VALUE%` as a placeholder for the number of notifications.
13940
+ */
13346
13941
  screenReaderNotificationTemplate: {
13347
13942
  type: String,
13348
13943
  required: false,
@@ -13374,7 +13969,7 @@ const _hoisted_1$o = ["aria-expanded", "aria-controls"];
13374
13969
  const _hoisted_2$i = {
13375
13970
  class: "expandable-panel__icon"
13376
13971
  };
13377
- const _hoisted_3$d = {
13972
+ const _hoisted_3$e = {
13378
13973
  class: "icon-stack"
13379
13974
  };
13380
13975
  const _hoisted_4$b = ["title"];
@@ -13403,7 +13998,7 @@ function _sfc_render$h(_ctx, _cache, $props, $setup, $data, $options) {
13403
13998
  "aria-controls": _ctx.id
13404
13999
  }, _ctx.$attrs, {
13405
14000
  onClick: _cache[0] || (_cache[0] = (...args) => _ctx.onClickHeadingButton && _ctx.onClickHeadingButton(...args))
13406
- }), [vue.createElementVNode("span", _hoisted_2$i, [vue.createElementVNode("span", _hoisted_3$d, [vue.createVNode(_component_f_icon, {
14001
+ }), [vue.createElementVNode("span", _hoisted_2$i, [vue.createElementVNode("span", _hoisted_3$e, [vue.createVNode(_component_f_icon, {
13407
14002
  name: "dash"
13408
14003
  }), _cache[1] || (_cache[1] = vue.createTextVNode()), vue.createVNode(_component_f_icon, {
13409
14004
  name: "dash"
@@ -13513,7 +14108,7 @@ const _hoisted_1$n = ["aria-expanded", "aria-controls"];
13513
14108
  const _hoisted_2$h = {
13514
14109
  class: "expandable-paragraph__icon"
13515
14110
  };
13516
- const _hoisted_3$c = {
14111
+ const _hoisted_3$d = {
13517
14112
  class: "icon-stack"
13518
14113
  };
13519
14114
  const _hoisted_4$a = {
@@ -13545,7 +14140,7 @@ function _sfc_render$g(_ctx, _cache, $props, $setup, $data, $options) {
13545
14140
  "aria-controls": _ctx.id
13546
14141
  }, _ctx.$attrs, {
13547
14142
  onClick: _cache[0] || (_cache[0] = (...args) => _ctx.onClickMinimize && _ctx.onClickMinimize(...args))
13548
- }), [vue.createElementVNode("span", _hoisted_2$h, [vue.createElementVNode("span", _hoisted_3$c, [vue.createVNode(_component_f_icon, {
14143
+ }), [vue.createElementVNode("span", _hoisted_2$h, [vue.createElementVNode("span", _hoisted_3$d, [vue.createVNode(_component_f_icon, {
13549
14144
  name: "dash"
13550
14145
  }), _cache[1] || (_cache[1] = vue.createTextVNode()), vue.createVNode(_component_f_icon, {
13551
14146
  name: "dash"
@@ -13653,7 +14248,7 @@ const _hoisted_1$m = {
13653
14248
  const _hoisted_2$g = {
13654
14249
  class: "file-item__row"
13655
14250
  };
13656
- const _hoisted_3$b = ["id"];
14251
+ const _hoisted_3$c = ["id"];
13657
14252
  const _hoisted_4$9 = {
13658
14253
  class: "icon-stack button__icon icon-stack--new-window"
13659
14254
  };
@@ -13676,7 +14271,7 @@ function _sfc_render$f(_ctx, _cache, $props, $setup, $data, $options) {
13676
14271
  name: "new-window"
13677
14272
  }), _cache[0] || (_cache[0] = vue.createTextVNode()), vue.createVNode(_component_f_icon, {
13678
14273
  name: _ctx.iconName
13679
- }, null, 8, ["name"])]), _cache[1] || (_cache[1] = vue.createTextVNode()), vue.createElementVNode("span", _hoisted_5$7, vue.toDisplayString(_ctx.fileName), 1), _cache[2] || (_cache[2] = vue.createTextVNode()), vue.createElementVNode("span", _hoisted_6$5, " " + vue.toDisplayString(_ctx.$t("fkui.file-item.file-open", "öppnas i nytt fönster")), 1)], 16, _hoisted_3$b), _cache[3] || (_cache[3] = vue.createTextVNode()), vue.renderSlot(_ctx.$slots, "row")]), _cache[4] || (_cache[4] = vue.createTextVNode()), vue.renderSlot(_ctx.$slots, "default"), _cache[5] || (_cache[5] = vue.createTextVNode()), _ctx.isMimeTypeChanged ? (vue.openBlock(), vue.createElementBlock("div", _hoisted_7$4, vue.toDisplayString(_ctx.mimeTypeChangedText), 1)) : vue.createCommentVNode("", true), _cache[6] || (_cache[6] = vue.createTextVNode()), _cache[7] || (_cache[7] = vue.createElementVNode("hr", {
14274
+ }, null, 8, ["name"])]), _cache[1] || (_cache[1] = vue.createTextVNode()), vue.createElementVNode("span", _hoisted_5$7, vue.toDisplayString(_ctx.fileName), 1), _cache[2] || (_cache[2] = vue.createTextVNode()), vue.createElementVNode("span", _hoisted_6$5, " " + vue.toDisplayString(_ctx.$t("fkui.file-item.file-open", "öppnas i nytt fönster")), 1)], 16, _hoisted_3$c), _cache[3] || (_cache[3] = vue.createTextVNode()), vue.renderSlot(_ctx.$slots, "row")]), _cache[4] || (_cache[4] = vue.createTextVNode()), vue.renderSlot(_ctx.$slots, "default"), _cache[5] || (_cache[5] = vue.createTextVNode()), _ctx.isMimeTypeChanged ? (vue.openBlock(), vue.createElementBlock("div", _hoisted_7$4, vue.toDisplayString(_ctx.mimeTypeChangedText), 1)) : vue.createCommentVNode("", true), _cache[6] || (_cache[6] = vue.createTextVNode()), _cache[7] || (_cache[7] = vue.createElementVNode("hr", {
13680
14275
  class: "file-item__separator"
13681
14276
  }, null, -1))]);
13682
14277
  }
@@ -13702,6 +14297,9 @@ const _sfc_main$l = vue.defineComponent({
13702
14297
  required: false,
13703
14298
  default: () => logic.ElementIdService.generateElementId()
13704
14299
  },
14300
+ /**
14301
+ * Disables the file selector.
14302
+ */
13705
14303
  disabled: {
13706
14304
  type: Boolean,
13707
14305
  required: false,
@@ -13746,7 +14344,7 @@ const _hoisted_1$l = {
13746
14344
  class: "file-selector"
13747
14345
  };
13748
14346
  const _hoisted_2$f = ["id", "aria-labelledby", "aria-disabled"];
13749
- const _hoisted_3$a = ["id", "for"];
14347
+ const _hoisted_3$b = ["id", "for"];
13750
14348
  function _sfc_render$e(_ctx, _cache, $props, $setup, $data, $options) {
13751
14349
  const _component_f_icon = vue.resolveComponent("f-icon");
13752
14350
  return vue.openBlock(), vue.createElementBlock("div", _hoisted_1$l, [vue.createElementVNode("input", vue.mergeProps({
@@ -13766,7 +14364,7 @@ function _sfc_render$e(_ctx, _cache, $props, $setup, $data, $options) {
13766
14364
  }, [vue.createVNode(_component_f_icon, {
13767
14365
  class: "button__icon",
13768
14366
  name: "paper-clip"
13769
- }), _cache[1] || (_cache[1] = vue.createTextVNode()), vue.renderSlot(_ctx.$slots, "default")], 10, _hoisted_3$a)]);
14367
+ }), _cache[1] || (_cache[1] = vue.createTextVNode()), vue.renderSlot(_ctx.$slots, "default")], 10, _hoisted_3$b)]);
13770
14368
  }
13771
14369
  const FFileSelector = /* @__PURE__ */ _export_sfc(_sfc_main$l, [["render", _sfc_render$e]]);
13772
14370
  const keybindings = {
@@ -13884,7 +14482,7 @@ const _hoisted_1$k = ["role"];
13884
14482
  const _hoisted_2$e = {
13885
14483
  key: 0
13886
14484
  };
13887
- const _hoisted_3$9 = {
14485
+ const _hoisted_3$a = {
13888
14486
  key: 0,
13889
14487
  class: "table__column--shrink"
13890
14488
  };
@@ -13971,7 +14569,8 @@ const _sfc_main$k = /* @__PURE__ */ vue.defineComponent({
13971
14569
  */
13972
14570
  keyAttribute: {
13973
14571
  type: String,
13974
- required: true
14572
+ required: false,
14573
+ default: void 0
13975
14574
  },
13976
14575
  /**
13977
14576
  * Attribute of expandable content in rows.
@@ -14022,7 +14621,8 @@ const _sfc_main$k = /* @__PURE__ */ vue.defineComponent({
14022
14621
  }
14023
14622
  },
14024
14623
  /**
14025
- * V-model will bind to value containing selected rows.
14624
+ * Currently selected rows.
14625
+ * Requires `selectable` to be set.
14026
14626
  */
14027
14627
  modelValue: {
14028
14628
  type: Array,
@@ -14064,6 +14664,7 @@ const _sfc_main$k = /* @__PURE__ */ vue.defineComponent({
14064
14664
  registerCallbackAfterItemAdd,
14065
14665
  registerCallbackBeforeItemDelete
14066
14666
  } = ActivateItemInjected();
14667
+ const internalKey2 = getInternalKey();
14067
14668
  const activeRow = vue.ref(void 0);
14068
14669
  const columns = vue.ref([]);
14069
14670
  const selectedRows = vue.ref([]);
@@ -14071,7 +14672,7 @@ const _sfc_main$k = /* @__PURE__ */ vue.defineComponent({
14071
14672
  const tbodyKey = vue.ref(0);
14072
14673
  const props = __props;
14073
14674
  const emit = __emit;
14074
- const expandableTable = useExpandableTable(props.expandableAttribute, props.keyAttribute, props.expandableDescribedby, emit, slots);
14675
+ const expandableTable = useExpandableTable(props.expandableAttribute, internalKey2, props.expandableDescribedby, emit, slots);
14075
14676
  const {
14076
14677
  isExpandableTable,
14077
14678
  hasExpandableSlot,
@@ -14083,19 +14684,20 @@ const _sfc_main$k = /* @__PURE__ */ vue.defineComponent({
14083
14684
  expandableRows,
14084
14685
  hasExpandableContent
14085
14686
  } = expandableTable;
14687
+ const tbodyElement = vue.useTemplateRef("tbodyElement");
14086
14688
  const hasCaption = vue.computed(() => {
14087
14689
  return hasSlot2("caption", {}, {
14088
14690
  stripClasses: []
14089
14691
  });
14090
14692
  });
14091
14693
  const hasCheckboxDescription = vue.computed(() => {
14092
- const firstRow = props.rows[0];
14694
+ const firstRow = internalRows.value[0];
14093
14695
  return hasSlot2("checkbox-description", {
14094
14696
  row: firstRow
14095
14697
  });
14096
14698
  });
14097
14699
  const isEmpty = vue.computed(() => {
14098
- return props.rows.length === 0;
14700
+ return internalRows.value.length === 0;
14099
14701
  });
14100
14702
  const visibleColumns = vue.computed(() => {
14101
14703
  return columns.value.filter((col) => col.visible);
@@ -14126,6 +14728,16 @@ const _sfc_main$k = /* @__PURE__ */ vue.defineComponent({
14126
14728
  }
14127
14729
  return columnCount;
14128
14730
  });
14731
+ const internalRows = vue.computed(() => {
14732
+ const {
14733
+ keyAttribute,
14734
+ expandableAttribute
14735
+ } = props;
14736
+ if (isExpandableTable) {
14737
+ return setInternalKeys(props.rows, keyAttribute, expandableAttribute);
14738
+ }
14739
+ return setInternalKeys(props.rows, keyAttribute);
14740
+ });
14129
14741
  vue.provide("addColumn", (column) => {
14130
14742
  columns.value = addColumn(columns.value, column);
14131
14743
  });
@@ -14133,7 +14745,7 @@ const _sfc_main$k = /* @__PURE__ */ vue.defineComponent({
14133
14745
  setVisibilityColumn(columns.value, id, visible);
14134
14746
  });
14135
14747
  vue.provide("textFieldTableMode", true);
14136
- vue.provide("renderColumns", vue.computed(() => props.rows.length > 0));
14748
+ vue.provide("renderColumns", vue.computed(() => internalRows.value.length > 0));
14137
14749
  vue.watch(() => props.rows, () => setSelectedRows(), {
14138
14750
  immediate: true,
14139
14751
  deep: true
@@ -14154,21 +14766,19 @@ const _sfc_main$k = /* @__PURE__ */ vue.defineComponent({
14154
14766
  immediate: true,
14155
14767
  deep: true
14156
14768
  });
14157
- function updateTr(tbodyElement) {
14158
- const trElements = [].slice.call(tbodyElement.children);
14769
+ function updateTr(tbodyElement2) {
14770
+ const trElements = [].slice.call(tbodyElement2.children);
14159
14771
  const trInteractableElements = trElements.filter((tr2) => {
14160
14772
  return tr2.tabIndex === 0;
14161
14773
  });
14162
14774
  tr.value = trInteractableElements;
14163
14775
  }
14164
14776
  vue.onUpdated(() => {
14165
- const tbodyElement = vue.useTemplateRef("tbodyElement");
14166
14777
  if (tbodyElement.value) {
14167
14778
  updateTr(tbodyElement.value);
14168
14779
  }
14169
14780
  });
14170
14781
  vue.onMounted(() => {
14171
- const tbodyElement = vue.useTemplateRef("tbodyElement");
14172
14782
  if (tbodyElement.value) {
14173
14783
  updateTr(tbodyElement.value);
14174
14784
  }
@@ -14188,14 +14798,14 @@ const _sfc_main$k = /* @__PURE__ */ vue.defineComponent({
14188
14798
  if (!props.showActive) {
14189
14799
  return false;
14190
14800
  }
14191
- return itemEquals(row, activeRow.value, props.keyAttribute);
14801
+ return itemEquals(row, activeRow.value, internalKey2);
14192
14802
  }
14193
14803
  function isSelected(row) {
14194
- return includeItem(row, selectedRows.value, props.keyAttribute);
14804
+ return includeItem(row, selectedRows.value, internalKey2);
14195
14805
  }
14196
14806
  function onKeydown$1(event, index) {
14197
14807
  onKeydown({
14198
- rows: props.rows,
14808
+ rows: internalRows.value,
14199
14809
  tr,
14200
14810
  activate
14201
14811
  }, event, index);
@@ -14215,7 +14825,7 @@ const _sfc_main$k = /* @__PURE__ */ vue.defineComponent({
14215
14825
  if (isExpandableTable.value && hasExpandableContent(row)) {
14216
14826
  toggleExpanded(row);
14217
14827
  }
14218
- if (!itemEquals(row, activeRow.value, props.keyAttribute)) {
14828
+ if (!itemEquals(row, activeRow.value, internalKey2)) {
14219
14829
  emit("change", row);
14220
14830
  setActiveRow(row);
14221
14831
  if (tr2) {
@@ -14233,8 +14843,8 @@ const _sfc_main$k = /* @__PURE__ */ vue.defineComponent({
14233
14843
  }
14234
14844
  function onSelect(row) {
14235
14845
  var _a, _b;
14236
- if (includeItem(row, selectedRows.value, props.keyAttribute)) {
14237
- selectedRows.value = selectedRows.value.filter((i) => !itemEquals(i, row, props.keyAttribute));
14846
+ if (includeItem(row, selectedRows.value, internalKey2)) {
14847
+ selectedRows.value = selectedRows.value.filter((i) => !itemEquals(i, row, internalKey2));
14238
14848
  emit("unselect", row);
14239
14849
  } else {
14240
14850
  selectedRows.value.push(row);
@@ -14249,7 +14859,7 @@ const _sfc_main$k = /* @__PURE__ */ vue.defineComponent({
14249
14859
  return;
14250
14860
  }
14251
14861
  selectedRows.value = props.modelValue.filter((row) => {
14252
- return includeItem(row, props.rows, props.keyAttribute);
14862
+ return includeItem(row, internalRows.value, internalKey2);
14253
14863
  });
14254
14864
  }
14255
14865
  function updateVModelWithSelectedRows() {
@@ -14267,11 +14877,7 @@ const _sfc_main$k = /* @__PURE__ */ vue.defineComponent({
14267
14877
  return ["table__row", ...active, ...selected, ...striped, ...expandable, ...expanded];
14268
14878
  }
14269
14879
  function rowKey(row) {
14270
- const key = row[props.keyAttribute];
14271
- if (typeof key === "undefined") {
14272
- throw new Error(`Key attribute [${props.keyAttribute}]' is missing in row`);
14273
- }
14274
- return String(key);
14880
+ return String(row[internalKey2]);
14275
14881
  }
14276
14882
  function columnClasses(column) {
14277
14883
  const sortable = column.sortable ? ["table__column--sortable"] : [];
@@ -14304,16 +14910,16 @@ const _sfc_main$k = /* @__PURE__ */ vue.defineComponent({
14304
14910
  activate(item, null);
14305
14911
  }
14306
14912
  function callbackBeforeItemDelete(item) {
14307
- if (props.rows.length === 0) {
14913
+ if (internalRows.value.length === 0) {
14308
14914
  return;
14309
14915
  }
14310
- let targetIndex = props.rows.indexOf(item) - 1;
14311
- if (targetIndex < 0 && props.rows.length > 1) {
14916
+ let targetIndex = internalRows.value.indexOf(item) - 1;
14917
+ if (targetIndex < 0 && internalRows.value.length > 1) {
14312
14918
  targetIndex = 1;
14313
14919
  } else if (targetIndex < 0) {
14314
14920
  targetIndex = 0;
14315
14921
  }
14316
- activate(props.rows[targetIndex], tr.value[targetIndex]);
14922
+ activate(internalRows.value[targetIndex], tr.value[targetIndex]);
14317
14923
  }
14318
14924
  function escapeNewlines(value) {
14319
14925
  return value.replace(/\n/g, "<br/>");
@@ -14321,7 +14927,7 @@ const _sfc_main$k = /* @__PURE__ */ vue.defineComponent({
14321
14927
  function updateActiveRowFromVModel() {
14322
14928
  if (props.active === void 0) {
14323
14929
  setActiveRow(void 0);
14324
- } else if (!itemEquals(props.active, activeRow.value, props.keyAttribute)) {
14930
+ } else if (!itemEquals(props.active, activeRow.value, internalKey2)) {
14325
14931
  setActiveRow(props.active);
14326
14932
  }
14327
14933
  }
@@ -14335,7 +14941,7 @@ const _sfc_main$k = /* @__PURE__ */ vue.defineComponent({
14335
14941
  }, [vue.createCommentVNode("", true), _cache[18] || (_cache[18] = vue.createTextVNode()), vue.createElementVNode("table", vue.mergeProps({
14336
14942
  class: ["table", tableClasses.value],
14337
14943
  role: tableRole.value
14338
- }, _ctx.$attrs), [hasCaption.value ? (vue.openBlock(), vue.createElementBlock("caption", _hoisted_2$e, [vue.renderSlot(_ctx.$slots, "caption")])) : vue.createCommentVNode("", true), _cache[15] || (_cache[15] = vue.createTextVNode()), vue.createElementVNode("colgroup", null, [vue.unref(isExpandableTable) ? (vue.openBlock(), vue.createElementBlock("col", _hoisted_3$9)) : vue.createCommentVNode("", true), _cache[0] || (_cache[0] = vue.createTextVNode()), __props.selectable ? (vue.openBlock(), vue.createElementBlock("col", _hoisted_4$8)) : vue.createCommentVNode("", true), _cache[1] || (_cache[1] = vue.createTextVNode()), (vue.openBlock(true), vue.createElementBlock(vue.Fragment, null, vue.renderList(columns.value, (column) => {
14944
+ }, _ctx.$attrs), [hasCaption.value ? (vue.openBlock(), vue.createElementBlock("caption", _hoisted_2$e, [vue.renderSlot(_ctx.$slots, "caption")])) : vue.createCommentVNode("", true), _cache[15] || (_cache[15] = vue.createTextVNode()), vue.createElementVNode("colgroup", null, [vue.unref(isExpandableTable) ? (vue.openBlock(), vue.createElementBlock("col", _hoisted_3$a)) : vue.createCommentVNode("", true), _cache[0] || (_cache[0] = vue.createTextVNode()), __props.selectable ? (vue.openBlock(), vue.createElementBlock("col", _hoisted_4$8)) : vue.createCommentVNode("", true), _cache[1] || (_cache[1] = vue.createTextVNode()), (vue.openBlock(true), vue.createElementBlock(vue.Fragment, null, vue.renderList(columns.value, (column) => {
14339
14945
  return vue.openBlock(), vue.createElementBlock("col", {
14340
14946
  key: column.id,
14341
14947
  class: vue.normalizeClass(column.size)
@@ -14355,9 +14961,10 @@ const _sfc_main$k = /* @__PURE__ */ vue.defineComponent({
14355
14961
  name: iconName(column)
14356
14962
  }, null, 8, ["class", "name"])) : vue.createCommentVNode("", true), _cache[3] || (_cache[3] = vue.createTextVNode()), column.description ? (vue.openBlock(), vue.createElementBlock("span", _hoisted_11$1, vue.toDisplayString(column.description), 1)) : vue.createCommentVNode("", true)], 16);
14357
14963
  }), 128))])]), _cache[17] || (_cache[17] = vue.createTextVNode()), (vue.openBlock(), vue.createElementBlock("tbody", {
14358
- ref: "tbodyElement",
14964
+ ref_key: "tbodyElement",
14965
+ ref: tbodyElement,
14359
14966
  key: tbodyKey.value
14360
- }, [(vue.openBlock(true), vue.createElementBlock(vue.Fragment, null, vue.renderList(__props.rows, (row, index) => {
14967
+ }, [(vue.openBlock(true), vue.createElementBlock(vue.Fragment, null, vue.renderList(internalRows.value, (row, index) => {
14361
14968
  return vue.openBlock(), vue.createElementBlock(vue.Fragment, {
14362
14969
  key: rowKey(row)
14363
14970
  }, [vue.createElementVNode("tr", {
@@ -14456,7 +15063,7 @@ const _hoisted_2$d = {
14456
15063
  ref: "header",
14457
15064
  class: "layout-application-template__header"
14458
15065
  };
14459
- const _hoisted_3$8 = {
15066
+ const _hoisted_3$9 = {
14460
15067
  key: 1
14461
15068
  };
14462
15069
  const _hoisted_4$7 = {
@@ -14470,7 +15077,7 @@ const _hoisted_5$5 = {
14470
15077
  function _sfc_render$d(_ctx, _cache, $props, $setup, $data, $options) {
14471
15078
  return vue.openBlock(), vue.createElementBlock("div", _hoisted_1$j, [_ctx.showHeader || _ctx.showTopNavigation ? (vue.openBlock(), vue.createElementBlock("header", _hoisted_2$d, [_ctx.showHeader ? vue.renderSlot(_ctx.$slots, "header", {
14472
15079
  key: 0
14473
- }) : vue.createCommentVNode("", true), _cache[0] || (_cache[0] = vue.createTextVNode()), _ctx.showTopNavigation ? (vue.openBlock(), vue.createElementBlock("nav", _hoisted_3$8, [vue.renderSlot(_ctx.$slots, "top-navigation")])) : vue.createCommentVNode("", true)], 512)) : vue.createCommentVNode("", true), _cache[2] || (_cache[2] = vue.createTextVNode()), vue.createElementVNode("main", _hoisted_4$7, [vue.renderSlot(_ctx.$slots, "default"), _cache[1] || (_cache[1] = vue.createTextVNode()), _ctx.showFooter ? (vue.openBlock(), vue.createElementBlock("footer", _hoisted_5$5, [vue.renderSlot(_ctx.$slots, "footer")])) : vue.createCommentVNode("", true)], 512)]);
15080
+ }) : vue.createCommentVNode("", true), _cache[0] || (_cache[0] = vue.createTextVNode()), _ctx.showTopNavigation ? (vue.openBlock(), vue.createElementBlock("nav", _hoisted_3$9, [vue.renderSlot(_ctx.$slots, "top-navigation")])) : vue.createCommentVNode("", true)], 512)) : vue.createCommentVNode("", true), _cache[2] || (_cache[2] = vue.createTextVNode()), vue.createElementVNode("main", _hoisted_4$7, [vue.renderSlot(_ctx.$slots, "default"), _cache[1] || (_cache[1] = vue.createTextVNode()), _ctx.showFooter ? (vue.openBlock(), vue.createElementBlock("footer", _hoisted_5$5, [vue.renderSlot(_ctx.$slots, "footer")])) : vue.createCommentVNode("", true)], 512)]);
14474
15081
  }
14475
15082
  const FLayoutApplicationTemplate = /* @__PURE__ */ _export_sfc(_sfc_main$j, [["render", _sfc_render$d]]);
14476
15083
  function getGridClasses(target) {
@@ -14662,7 +15269,7 @@ const _hoisted_1$i = {
14662
15269
  class: "layout-navigation"
14663
15270
  };
14664
15271
  const _hoisted_2$c = ["aria-expanded"];
14665
- const _hoisted_3$7 = {
15272
+ const _hoisted_3$8 = {
14666
15273
  class: "layout-navigation__navigation__inner"
14667
15274
  };
14668
15275
  const _hoisted_4$6 = {
@@ -14676,7 +15283,7 @@ function _sfc_render$c(_ctx, _cache, $props, $setup, $data, $options) {
14676
15283
  class: "layout-navigation__navigation",
14677
15284
  style: vue.normalizeStyle(_ctx.navigationStyle),
14678
15285
  "aria-expanded": _ctx.isOpen
14679
- }, [vue.createElementVNode("div", _hoisted_3$7, [_ctx.isOpen ? (vue.openBlock(), vue.createElementBlock(vue.Fragment, {
15286
+ }, [vue.createElementVNode("div", _hoisted_3$8, [_ctx.isOpen ? (vue.openBlock(), vue.createElementBlock(vue.Fragment, {
14680
15287
  key: 0
14681
15288
  }, [vue.createElementVNode("div", {
14682
15289
  class: "layout-navigation__navigation__inner__title",
@@ -14921,7 +15528,7 @@ const _hoisted_2$a = {
14921
15528
  key: 0,
14922
15529
  class: "list__item"
14923
15530
  };
14924
- const _hoisted_3$6 = {
15531
+ const _hoisted_3$7 = {
14925
15532
  class: "list__item__itempane"
14926
15533
  };
14927
15534
  const _hoisted_4$5 = ["id", "aria-labelledby", "tabindex", "onKeydown"];
@@ -14955,7 +15562,8 @@ const _sfc_main$g = /* @__PURE__ */ vue.defineComponent({
14955
15562
  */
14956
15563
  keyAttribute: {
14957
15564
  type: String,
14958
- required: true
15565
+ required: false,
15566
+ default: void 0
14959
15567
  },
14960
15568
  /**
14961
15569
  * If `true` the list will be selectable.
@@ -15008,13 +15616,23 @@ const _sfc_main$g = /* @__PURE__ */ vue.defineComponent({
15008
15616
  registerCallbackAfterItemAdd,
15009
15617
  registerCallbackBeforeItemDelete
15010
15618
  } = ActivateItemInjected();
15619
+ const internalKey2 = getInternalKey();
15011
15620
  const selectedItems = vue.ref([]);
15012
15621
  const activeItem = vue.ref(void 0);
15013
15622
  const ulElement = vue.ref();
15014
15623
  const props = __props;
15015
15624
  const emit = __emit;
15016
15625
  const isEmpty = vue.computed(() => {
15017
- return props.items.length === 0;
15626
+ return internalItems.value.length === 0;
15627
+ });
15628
+ const internalItems = vue.computed(() => {
15629
+ const {
15630
+ keyAttribute
15631
+ } = props;
15632
+ if (keyAttribute) {
15633
+ return setInternalKeys(props.items, keyAttribute);
15634
+ }
15635
+ return setInternalKeys(props.items);
15018
15636
  });
15019
15637
  vue.watch(() => props.items, () => {
15020
15638
  updateSelectedItemsFromVModel();
@@ -15047,14 +15665,10 @@ const _sfc_main$g = /* @__PURE__ */ vue.defineComponent({
15047
15665
  return Array.from(element.children);
15048
15666
  }
15049
15667
  function itemKey(item) {
15050
- const key = item[props.keyAttribute];
15051
- if (typeof key === "undefined") {
15052
- throw new Error(`Key attribute [${props.keyAttribute}]' is missing in item`);
15053
- }
15054
- return String(key);
15668
+ return String(item[internalKey2]);
15055
15669
  }
15056
15670
  function isSelected(item) {
15057
- return includeItem(item, selectedItems.value, props.keyAttribute);
15671
+ return includeItem(item, selectedItems.value, internalKey2);
15058
15672
  }
15059
15673
  function itemClasses(item) {
15060
15674
  return {
@@ -15064,8 +15678,8 @@ const _sfc_main$g = /* @__PURE__ */ vue.defineComponent({
15064
15678
  }
15065
15679
  function onSelect(item) {
15066
15680
  var _a, _b;
15067
- if (includeItem(item, selectedItems.value, props.keyAttribute)) {
15068
- selectedItems.value = selectedItems.value.filter((i) => !itemEquals(i, item, props.keyAttribute));
15681
+ if (includeItem(item, selectedItems.value, internalKey2)) {
15682
+ selectedItems.value = selectedItems.value.filter((i) => !itemEquals(i, item, internalKey2));
15069
15683
  emit("unselect", item);
15070
15684
  } else {
15071
15685
  selectedItems.value.push(item);
@@ -15076,7 +15690,7 @@ const _sfc_main$g = /* @__PURE__ */ vue.defineComponent({
15076
15690
  }
15077
15691
  function setActiveItem(item) {
15078
15692
  emit("click", item);
15079
- if (!itemEquals(item, activeItem.value, props.keyAttribute)) {
15693
+ if (!itemEquals(item, activeItem.value, internalKey2)) {
15080
15694
  emit("change", item);
15081
15695
  activeItem.value = item;
15082
15696
  emit("update:active", activeItem.value);
@@ -15093,7 +15707,7 @@ const _sfc_main$g = /* @__PURE__ */ vue.defineComponent({
15093
15707
  function updateSelectedItemsFromVModel() {
15094
15708
  if (Array.isArray(props.modelValue)) {
15095
15709
  selectedItems.value = props.modelValue.filter((item) => {
15096
- return includeItem(item, props.items, props.keyAttribute);
15710
+ return includeItem(item, internalItems.value, internalKey2);
15097
15711
  });
15098
15712
  } else {
15099
15713
  selectedItems.value = [];
@@ -15102,7 +15716,7 @@ const _sfc_main$g = /* @__PURE__ */ vue.defineComponent({
15102
15716
  function updateActiveItemFromVModel() {
15103
15717
  if (props.active === void 0) {
15104
15718
  activeItem.value = void 0;
15105
- } else if (!itemEquals(props.active, activeItem.value, props.keyAttribute)) {
15719
+ } else if (!itemEquals(props.active, activeItem.value, internalKey2)) {
15106
15720
  activeItem.value = props.active;
15107
15721
  }
15108
15722
  }
@@ -15142,26 +15756,26 @@ const _sfc_main$g = /* @__PURE__ */ vue.defineComponent({
15142
15756
  setActiveItem(item);
15143
15757
  }
15144
15758
  function callbackBeforeItemDelete(item) {
15145
- if (props.items.length === 0) {
15759
+ if (internalItems.value.length === 0) {
15146
15760
  return;
15147
15761
  }
15148
- let targetIndex = props.items.indexOf(item) - 1;
15149
- if (targetIndex < 0 && props.items.length > 1) {
15762
+ let targetIndex = internalItems.value.indexOf(item) - 1;
15763
+ if (targetIndex < 0 && internalItems.value.length > 1) {
15150
15764
  targetIndex = 1;
15151
15765
  } else if (targetIndex < 0) {
15152
15766
  targetIndex = 0;
15153
15767
  }
15154
- setActiveItem(props.items[targetIndex]);
15768
+ setActiveItem(internalItems.value[targetIndex]);
15155
15769
  const targetElement = getLiElements()[targetIndex];
15156
15770
  if (targetElement) {
15157
15771
  targetElement.focus();
15158
15772
  }
15159
15773
  }
15160
15774
  function isActive(item) {
15161
- return props.checkbox && itemEquals(activeItem.value, item, props.keyAttribute);
15775
+ return props.checkbox && itemEquals(activeItem.value, item, internalKey2);
15162
15776
  }
15163
15777
  return (_ctx, _cache) => {
15164
- return !__props.selectable ? (vue.openBlock(), vue.createElementBlock("ul", _hoisted_1$g, [(vue.openBlock(true), vue.createElementBlock(vue.Fragment, null, vue.renderList(__props.items, (item) => {
15778
+ return !__props.selectable ? (vue.openBlock(), vue.createElementBlock("ul", _hoisted_1$g, [(vue.openBlock(true), vue.createElementBlock(vue.Fragment, null, vue.renderList(internalItems.value, (item) => {
15165
15779
  return vue.openBlock(), vue.createElementBlock("li", {
15166
15780
  key: itemKey(item),
15167
15781
  class: "list__item"
@@ -15174,12 +15788,12 @@ const _sfc_main$g = /* @__PURE__ */ vue.defineComponent({
15174
15788
  }, {
15175
15789
  item
15176
15790
  }))], 512)]);
15177
- }), 128)), _cache[0] || (_cache[0] = vue.createTextVNode()), isEmpty.value ? (vue.openBlock(), vue.createElementBlock("li", _hoisted_2$a, [vue.createElementVNode("div", _hoisted_3$6, [vue.renderSlot(_ctx.$slots, "empty", {}, () => [vue.createElementVNode("em", null, vue.toDisplayString(vue.unref($t2)("fkui.list.empty", "Listan är tom")), 1)])])])) : vue.createCommentVNode("", true)])) : (vue.openBlock(), vue.createElementBlock("ul", {
15791
+ }), 128)), _cache[0] || (_cache[0] = vue.createTextVNode()), isEmpty.value ? (vue.openBlock(), vue.createElementBlock("li", _hoisted_2$a, [vue.createElementVNode("div", _hoisted_3$7, [vue.renderSlot(_ctx.$slots, "empty", {}, () => [vue.createElementVNode("em", null, vue.toDisplayString(vue.unref($t2)("fkui.list.empty", "Listan är tom")), 1)])])])) : vue.createCommentVNode("", true)])) : (vue.openBlock(), vue.createElementBlock("ul", {
15178
15792
  key: 1,
15179
15793
  ref_key: "ulElement",
15180
15794
  ref: ulElement,
15181
15795
  class: "list list--hover"
15182
- }, [(vue.openBlock(true), vue.createElementBlock(vue.Fragment, null, vue.renderList(__props.items, (item, index) => {
15796
+ }, [(vue.openBlock(true), vue.createElementBlock(vue.Fragment, null, vue.renderList(internalItems.value, (item, index) => {
15183
15797
  return vue.openBlock(), vue.createElementBlock("li", {
15184
15798
  id: getItemId(item),
15185
15799
  key: itemKey(item),
@@ -15973,7 +16587,7 @@ const _sfc_main$c = vue.defineComponent({
15973
16587
  });
15974
16588
  const _hoisted_1$c = ["aria-label"];
15975
16589
  const _hoisted_2$8 = ["data-ref-index", "onClick"];
15976
- const _hoisted_3$5 = {
16590
+ const _hoisted_3$6 = {
15977
16591
  class: "imenu__list__anchor-container"
15978
16592
  };
15979
16593
  const _hoisted_4$4 = ["data-ref-index", "href", "target"];
@@ -16014,7 +16628,7 @@ function _sfc_render$8(_ctx, _cache, $props, $setup, $data, $options) {
16014
16628
  class: vue.normalizeClass(_ctx.itemClasses(item, index)),
16015
16629
  role: "none",
16016
16630
  onClick: (event) => _ctx.onClickItem(event, item)
16017
- }, [vue.createElementVNode("div", _hoisted_3$5, [vue.createElementVNode("a", {
16631
+ }, [vue.createElementVNode("div", _hoisted_3$6, [vue.createElementVNode("a", {
16018
16632
  ref_for: true,
16019
16633
  ref: "anchors",
16020
16634
  "data-ref-index": index,
@@ -16109,7 +16723,7 @@ const _hoisted_2$7 = {
16109
16723
  key: 0,
16110
16724
  class: "offline"
16111
16725
  };
16112
- const _hoisted_3$4 = {
16726
+ const _hoisted_3$5 = {
16113
16727
  class: "icon-stack icon-stack--error"
16114
16728
  };
16115
16729
  const _hoisted_4$3 = {
@@ -16132,7 +16746,7 @@ function _sfc_render$7(_ctx, _cache, $props, $setup, $data, $options) {
16132
16746
  shrink: "",
16133
16747
  align: "center"
16134
16748
  }, {
16135
- default: vue.withCtx(() => [vue.createElementVNode("span", _hoisted_3$4, [vue.createVNode(_component_f_icon, {
16749
+ default: vue.withCtx(() => [vue.createElementVNode("span", _hoisted_3$5, [vue.createVNode(_component_f_icon, {
16136
16750
  name: "triangle"
16137
16751
  }), _cache[0] || (_cache[0] = vue.createTextVNode()), vue.createVNode(_component_f_icon, {
16138
16752
  name: "alert"
@@ -16261,7 +16875,7 @@ const _hoisted_1$9 = {
16261
16875
  const _hoisted_2$5 = {
16262
16876
  key: 0
16263
16877
  };
16264
- const _hoisted_3$3 = {
16878
+ const _hoisted_3$4 = {
16265
16879
  ref: "header",
16266
16880
  class: "page-header"
16267
16881
  };
@@ -16282,7 +16896,7 @@ function _sfc_render$5(_ctx, _cache, $props, $setup, $data, $options) {
16282
16896
  }, {
16283
16897
  default: vue.withCtx(() => [vue.renderSlot(_ctx.$slots, "skip-link-text")]),
16284
16898
  _: 3
16285
- }, 8, ["href"])])) : vue.createCommentVNode("", true), _cache[2] || (_cache[2] = vue.createTextVNode()), vue.createElementVNode("div", _hoisted_3$3, [_ctx.hasLogo ? (vue.openBlock(), vue.createElementBlock("div", _hoisted_4$2, [vue.renderSlot(_ctx.$slots, "logo")])) : vue.createCommentVNode("", true), _cache[0] || (_cache[0] = vue.createTextVNode()), (vue.openBlock(), vue.createBlock(vue.resolveDynamicComponent(_ctx.headerTag), {
16899
+ }, 8, ["href"])])) : vue.createCommentVNode("", true), _cache[2] || (_cache[2] = vue.createTextVNode()), vue.createElementVNode("div", _hoisted_3$4, [_ctx.hasLogo ? (vue.openBlock(), vue.createElementBlock("div", _hoisted_4$2, [vue.renderSlot(_ctx.$slots, "logo")])) : vue.createCommentVNode("", true), _cache[0] || (_cache[0] = vue.createTextVNode()), (vue.openBlock(), vue.createBlock(vue.resolveDynamicComponent(_ctx.headerTag), {
16286
16900
  class: "page-header__app-name"
16287
16901
  }, {
16288
16902
  default: vue.withCtx(() => [vue.renderSlot(_ctx.$slots, "default")]),
@@ -16427,7 +17041,7 @@ registerLayout({
16427
17041
  }
16428
17042
  }
16429
17043
  });
16430
- 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';
17044
+ 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';
16431
17045
  const stubLayout = defineLayout({
16432
17046
  name: "",
16433
17047
  areas: {}
@@ -16529,6 +17143,9 @@ class PageLayout extends HTMLElement {
16529
17143
  _classPrivateFieldGet2(_elements, this)[slot] = element;
16530
17144
  }
16531
17145
  }
17146
+ setTimeout(() => {
17147
+ this.dispatchEvent(new CustomEvent("update"));
17148
+ }, 0);
16532
17149
  }
16533
17150
  }
16534
17151
  const _hoisted_1$8 = ["slot"];
@@ -16538,7 +17155,11 @@ const _sfc_main$8 = /* @__PURE__ */ vue.defineComponent({
16538
17155
  props: {
16539
17156
  layout: {}
16540
17157
  },
16541
- setup(__props) {
17158
+ emits: ["update"],
17159
+ setup(__props, {
17160
+ emit: __emit
17161
+ }) {
17162
+ const emit = __emit;
16542
17163
  const slots = vue.useSlots();
16543
17164
  const slotNames = vue.computed(() => {
16544
17165
  return Object.keys(slots);
@@ -16548,9 +17169,13 @@ const _sfc_main$8 = /* @__PURE__ */ vue.defineComponent({
16548
17169
  customElements.define(tagName$1, PageLayout);
16549
17170
  }
16550
17171
  });
17172
+ function onUpdate() {
17173
+ emit("update");
17174
+ }
16551
17175
  return (_ctx, _cache) => {
16552
17176
  return vue.openBlock(), vue.createBlock(vue.resolveDynamicComponent(tagName$1), {
16553
- layout: _ctx.layout
17177
+ layout: _ctx.layout,
17178
+ onUpdate
16554
17179
  }, {
16555
17180
  default: vue.withCtx(() => [(vue.openBlock(true), vue.createElementBlock(vue.Fragment, null, vue.renderList(slotNames.value, (slot) => {
16556
17181
  return vue.openBlock(), vue.createElementBlock("div", {
@@ -16559,10 +17184,87 @@ const _sfc_main$8 = /* @__PURE__ */ vue.defineComponent({
16559
17184
  }, [vue.renderSlot(_ctx.$slots, slot)], 8, _hoisted_1$8);
16560
17185
  }), 128))]),
16561
17186
  _: 3
16562
- }, 8, ["layout"]);
17187
+ }, 40, ["layout"]);
16563
17188
  };
16564
17189
  }
16565
17190
  });
17191
+ function tryOnScopeDispose(fn2) {
17192
+ if (vue.getCurrentScope()) {
17193
+ vue.onScopeDispose(fn2);
17194
+ return true;
17195
+ }
17196
+ return false;
17197
+ }
17198
+ const isClient = typeof window !== "undefined" && typeof document !== "undefined";
17199
+ typeof WorkerGlobalScope !== "undefined" && globalThis instanceof WorkerGlobalScope;
17200
+ const toString = Object.prototype.toString;
17201
+ const isObject = (val) => toString.call(val) === "[object Object]";
17202
+ function toArray(value) {
17203
+ return Array.isArray(value) ? value : [value];
17204
+ }
17205
+ function watchImmediate(source, cb, options) {
17206
+ return vue.watch(
17207
+ source,
17208
+ cb,
17209
+ {
17210
+ ...options,
17211
+ immediate: true
17212
+ }
17213
+ );
17214
+ }
17215
+ const defaultWindow = isClient ? window : void 0;
17216
+ function unrefElement(elRef) {
17217
+ var _a;
17218
+ const plain = vue.toValue(elRef);
17219
+ return (_a = plain == null ? void 0 : plain.$el) != null ? _a : plain;
17220
+ }
17221
+ function useEventListener(...args) {
17222
+ const cleanups = [];
17223
+ const cleanup = () => {
17224
+ cleanups.forEach((fn2) => fn2());
17225
+ cleanups.length = 0;
17226
+ };
17227
+ const register = (el, event, listener, options) => {
17228
+ el.addEventListener(event, listener, options);
17229
+ return () => el.removeEventListener(event, listener, options);
17230
+ };
17231
+ const firstParamTargets = vue.computed(() => {
17232
+ const test = toArray(vue.toValue(args[0])).filter((e) => e != null);
17233
+ return test.every((e) => typeof e !== "string") ? test : void 0;
17234
+ });
17235
+ const stopWatch = watchImmediate(
17236
+ () => {
17237
+ var _a, _b;
17238
+ return [
17239
+ (_b = (_a = firstParamTargets.value) == null ? void 0 : _a.map((e) => unrefElement(e))) != null ? _b : [defaultWindow].filter((e) => e != null),
17240
+ toArray(vue.toValue(firstParamTargets.value ? args[1] : args[0])),
17241
+ toArray(vue.unref(firstParamTargets.value ? args[2] : args[1])),
17242
+ // @ts-expect-error - TypeScript gets the correct types, but somehow still complains
17243
+ vue.toValue(firstParamTargets.value ? args[3] : args[2])
17244
+ ];
17245
+ },
17246
+ ([raw_targets, raw_events, raw_listeners, raw_options]) => {
17247
+ cleanup();
17248
+ if (!(raw_targets == null ? void 0 : raw_targets.length) || !(raw_events == null ? void 0 : raw_events.length) || !(raw_listeners == null ? void 0 : raw_listeners.length))
17249
+ return;
17250
+ const optionsClone = isObject(raw_options) ? { ...raw_options } : raw_options;
17251
+ cleanups.push(
17252
+ ...raw_targets.flatMap(
17253
+ (el) => raw_events.flatMap(
17254
+ (event) => raw_listeners.map((listener) => register(el, event, listener, optionsClone))
17255
+ )
17256
+ )
17257
+ );
17258
+ },
17259
+ { flush: "post" }
17260
+ );
17261
+ const stop = () => {
17262
+ stopWatch();
17263
+ cleanup();
17264
+ };
17265
+ tryOnScopeDispose(cleanup);
17266
+ return stop;
17267
+ }
16566
17268
  function getProperty(style, key) {
16567
17269
  const value = style.getPropertyValue(key);
16568
17270
  if (value === "") {
@@ -16571,16 +17273,33 @@ function getProperty(style, key) {
16571
17273
  return JSON.parse(value);
16572
17274
  }
16573
17275
  }
17276
+ function findLayoutElement(element) {
17277
+ if (!element) {
17278
+ return null;
17279
+ }
17280
+ const parent = element.closest("ce-page-layout");
17281
+ if (parent) {
17282
+ return parent;
17283
+ }
17284
+ const root = element.getRootNode();
17285
+ if (root instanceof ShadowRoot) {
17286
+ return findLayoutElement(root.host);
17287
+ }
17288
+ return null;
17289
+ }
16574
17290
  function useAreaData(element) {
16575
17291
  const area = vue.ref(null);
16576
17292
  const attachPanel = vue.ref(null);
16577
17293
  const direction = vue.ref(null);
17294
+ const layoutElement = vue.computed(() => findLayoutElement(vue.toValue(element)));
17295
+ useEventListener(layoutElement, "update", () => {
17296
+ if (element.value) {
17297
+ update(element.value);
17298
+ }
17299
+ });
16578
17300
  vue.watchEffect(() => {
16579
17301
  if (element.value) {
16580
- const style = getComputedStyle(element.value);
16581
- area.value = getProperty(style, VAR_NAME_AREA);
16582
- attachPanel.value = getProperty(style, VAR_NAME_ATTACH_PANEL);
16583
- direction.value = getProperty(style, VAR_NAME_DIRECTION);
17302
+ update(element.value);
16584
17303
  }
16585
17304
  });
16586
17305
  return {
@@ -16588,12 +17307,18 @@ function useAreaData(element) {
16588
17307
  attachPanel,
16589
17308
  direction
16590
17309
  };
17310
+ function update(element2) {
17311
+ const style = getComputedStyle(element2);
17312
+ area.value = getProperty(style, VAR_NAME_AREA);
17313
+ attachPanel.value = getProperty(style, VAR_NAME_ATTACH_PANEL);
17314
+ direction.value = getProperty(style, VAR_NAME_DIRECTION);
17315
+ }
16591
17316
  }
16592
17317
  const _hoisted_1$7 = {
16593
17318
  class: "progress"
16594
17319
  };
16595
17320
  const _hoisted_2$4 = ["aria-label", "aria-valuenow", "aria-valuetext"];
16596
- const _hoisted_3$2 = {
17321
+ const _hoisted_3$3 = {
16597
17322
  class: "sr-only"
16598
17323
  };
16599
17324
  const MIN_VALUE = 0;
@@ -16664,7 +17389,7 @@ const _sfc_main$7 = /* @__PURE__ */ vue.defineComponent({
16664
17389
  "aria-valuenow": progressValueNow.value,
16665
17390
  "aria-valuetext": progressText.value,
16666
17391
  style: vue.normalizeStyle(cssWidth.value)
16667
- }, [vue.createElementVNode("span", _hoisted_3$2, vue.toDisplayString(progressText.value), 1)], 14, _hoisted_2$4)]);
17392
+ }, [vue.createElementVNode("span", _hoisted_3$3, vue.toDisplayString(progressText.value), 1)], 14, _hoisted_2$4)]);
16668
17393
  };
16669
17394
  }
16670
17395
  });
@@ -16827,7 +17552,7 @@ const _sfc_main$6 = vue.defineComponent({
16827
17552
  });
16828
17553
  const _hoisted_1$6 = ["id", "disabled"];
16829
17554
  const _hoisted_2$3 = ["for"];
16830
- const _hoisted_3$1 = {
17555
+ const _hoisted_3$2 = {
16831
17556
  key: 0,
16832
17557
  class: "radio-button__details"
16833
17558
  };
@@ -16849,7 +17574,7 @@ function _sfc_render$4(_ctx, _cache, $props, $setup, $data, $options) {
16849
17574
  for: _ctx.id
16850
17575
  }, [vue.renderSlot(_ctx.$slots, "default"), _cache[6] || (_cache[6] = vue.createTextVNode()), _ctx.$slots.details ? (vue.openBlock(), vue.createElementBlock(vue.Fragment, {
16851
17576
  key: 0
16852
- }, [_ctx.showDetails === "always" ? (vue.openBlock(), vue.createElementBlock("span", _hoisted_3$1, [_cache[1] || (_cache[1] = vue.createElementVNode("br", null, null, -1)), _cache[2] || (_cache[2] = vue.createTextVNode()), vue.renderSlot(_ctx.$slots, "details")])) : vue.createCommentVNode("", true), _cache[5] || (_cache[5] = vue.createTextVNode()), _ctx.showDetails === "when-selected" ? (vue.openBlock(), vue.createBlock(vue.Transition, {
17577
+ }, [_ctx.showDetails === "always" ? (vue.openBlock(), vue.createElementBlock("span", _hoisted_3$2, [_cache[1] || (_cache[1] = vue.createElementVNode("br", null, null, -1)), _cache[2] || (_cache[2] = vue.createTextVNode()), vue.renderSlot(_ctx.$slots, "details")])) : vue.createCommentVNode("", true), _cache[5] || (_cache[5] = vue.createTextVNode()), _ctx.showDetails === "when-selected" ? (vue.openBlock(), vue.createBlock(vue.Transition, {
16853
17578
  key: 1,
16854
17579
  onEnter: _ctx.enter,
16855
17580
  onAfterEnter: _ctx.afterEnter,
@@ -16862,83 +17587,6 @@ function _sfc_render$4(_ctx, _cache, $props, $setup, $data, $options) {
16862
17587
  }, 8, ["onEnter", "onAfterEnter", "onLeave"])) : vue.createCommentVNode("", true)], 64)) : vue.createCommentVNode("", true)], 10, _hoisted_2$3)], 34);
16863
17588
  }
16864
17589
  const FRadioField = /* @__PURE__ */ _export_sfc(_sfc_main$6, [["render", _sfc_render$4]]);
16865
- function tryOnScopeDispose(fn2) {
16866
- if (vue.getCurrentScope()) {
16867
- vue.onScopeDispose(fn2);
16868
- return true;
16869
- }
16870
- return false;
16871
- }
16872
- const isClient = typeof window !== "undefined" && typeof document !== "undefined";
16873
- typeof WorkerGlobalScope !== "undefined" && globalThis instanceof WorkerGlobalScope;
16874
- const toString = Object.prototype.toString;
16875
- const isObject = (val) => toString.call(val) === "[object Object]";
16876
- function toArray(value) {
16877
- return Array.isArray(value) ? value : [value];
16878
- }
16879
- function watchImmediate(source, cb, options) {
16880
- return vue.watch(
16881
- source,
16882
- cb,
16883
- {
16884
- ...options,
16885
- immediate: true
16886
- }
16887
- );
16888
- }
16889
- const defaultWindow = isClient ? window : void 0;
16890
- function unrefElement(elRef) {
16891
- var _a;
16892
- const plain = vue.toValue(elRef);
16893
- return (_a = plain == null ? void 0 : plain.$el) != null ? _a : plain;
16894
- }
16895
- function useEventListener(...args) {
16896
- const cleanups = [];
16897
- const cleanup = () => {
16898
- cleanups.forEach((fn2) => fn2());
16899
- cleanups.length = 0;
16900
- };
16901
- const register = (el, event, listener, options) => {
16902
- el.addEventListener(event, listener, options);
16903
- return () => el.removeEventListener(event, listener, options);
16904
- };
16905
- const firstParamTargets = vue.computed(() => {
16906
- const test = toArray(vue.toValue(args[0])).filter((e) => e != null);
16907
- return test.every((e) => typeof e !== "string") ? test : void 0;
16908
- });
16909
- const stopWatch = watchImmediate(
16910
- () => {
16911
- var _a, _b;
16912
- return [
16913
- (_b = (_a = firstParamTargets.value) == null ? void 0 : _a.map((e) => unrefElement(e))) != null ? _b : [defaultWindow].filter((e) => e != null),
16914
- toArray(vue.toValue(firstParamTargets.value ? args[1] : args[0])),
16915
- toArray(vue.unref(firstParamTargets.value ? args[2] : args[1])),
16916
- // @ts-expect-error - TypeScript gets the correct types, but somehow still complains
16917
- vue.toValue(firstParamTargets.value ? args[3] : args[2])
16918
- ];
16919
- },
16920
- ([raw_targets, raw_events, raw_listeners, raw_options]) => {
16921
- cleanup();
16922
- if (!(raw_targets == null ? void 0 : raw_targets.length) || !(raw_events == null ? void 0 : raw_events.length) || !(raw_listeners == null ? void 0 : raw_listeners.length))
16923
- return;
16924
- const optionsClone = isObject(raw_options) ? { ...raw_options } : raw_options;
16925
- cleanups.push(
16926
- ...raw_targets.flatMap(
16927
- (el) => raw_events.flatMap(
16928
- (event) => raw_listeners.map((listener) => register(el, event, listener, optionsClone))
16929
- )
16930
- )
16931
- );
16932
- },
16933
- { flush: "post" }
16934
- );
16935
- const stop = () => {
16936
- stopWatch();
16937
- cleanup();
16938
- };
16939
- tryOnScopeDispose(cleanup);
16940
- return stop;
16941
- }
16942
17590
  const keymap = {
16943
17591
  left: {
16944
17592
  ArrowLeft: "decrease",
@@ -17057,7 +17705,7 @@ function computeCssValue(raw, total, auto) {
17057
17705
  return percent * total;
17058
17706
  } else if (raw === "0") {
17059
17707
  return 0;
17060
- } else if (raw === "auto") {
17708
+ } else if (raw === "auto" || raw === "") {
17061
17709
  return auto;
17062
17710
  } else {
17063
17711
  throw new Error(`Cant parse size from "${raw}"`);
@@ -17105,10 +17753,17 @@ function useStorage(options) {
17105
17753
  loaded.value = true;
17106
17754
  });
17107
17755
  }
17108
- const _hoisted_1$5 = ["aria-orientation"];
17756
+ const _hoisted_1$5 = {
17757
+ key: 0,
17758
+ class: "resize__offset"
17759
+ };
17109
17760
  const _hoisted_2$2 = ["aria-orientation"];
17761
+ const _hoisted_3$1 = ["aria-orientation"];
17110
17762
  const STEP_SIZE = 10;
17111
17763
  const _sfc_main$5 = /* @__PURE__ */ vue.defineComponent({
17764
+ ...{
17765
+ inheritAttrs: false
17766
+ },
17112
17767
  __name: "FResizePane.ce",
17113
17768
  props: {
17114
17769
  disabled: {
@@ -17126,10 +17781,22 @@ const _sfc_main$5 = /* @__PURE__ */ vue.defineComponent({
17126
17781
  initial: {
17127
17782
  default: "50%",
17128
17783
  type: String
17784
+ },
17785
+ overlay: {
17786
+ type: Boolean,
17787
+ default: false
17788
+ },
17789
+ offset: {
17790
+ default: 0,
17791
+ type: Number
17129
17792
  }
17130
17793
  },
17131
- setup(__props) {
17794
+ emits: ["resize"],
17795
+ setup(__props, {
17796
+ emit: __emit
17797
+ }) {
17132
17798
  const props = __props;
17799
+ const emit = __emit;
17133
17800
  const root = vue.shallowRef();
17134
17801
  const content = vue.ref();
17135
17802
  const separator = vue.ref();
@@ -17138,11 +17805,11 @@ const _sfc_main$5 = /* @__PURE__ */ vue.defineComponent({
17138
17805
  max: -1,
17139
17806
  current: -1
17140
17807
  });
17141
- const separatorSize = vue.ref(0);
17142
17808
  const layoutSize = vue.ref(0);
17143
17809
  const storageKey = vue.computed(() => area.value ? `layout/${area.value}/size` : null);
17144
17810
  const {
17145
17811
  attachPanel: attachment,
17812
+ direction,
17146
17813
  area
17147
17814
  } = useAreaData(root);
17148
17815
  useKeyboardHandler({
@@ -17175,11 +17842,11 @@ const _sfc_main$5 = /* @__PURE__ */ vue.defineComponent({
17175
17842
  });
17176
17843
  const minSize = vue.computed(() => {
17177
17844
  const total = layoutSize.value;
17178
- return Math.floor(aggregateCssValue(props.min, total, 0, Math.max) + separatorSize.value);
17845
+ return Math.floor(aggregateCssValue(props.min, total, 0, Math.max));
17179
17846
  });
17180
17847
  const maxSize = vue.computed(() => {
17181
17848
  const total = layoutSize.value;
17182
- return Math.floor(aggregateCssValue(props.max, total, total, Math.min) + separatorSize.value);
17849
+ return Math.max(Math.floor(aggregateCssValue(props.max, total, total, Math.min)), minSize.value);
17183
17850
  });
17184
17851
  const initialSize = vue.computed(() => {
17185
17852
  const total = layoutSize.value;
@@ -17192,6 +17859,9 @@ const _sfc_main$5 = /* @__PURE__ */ vue.defineComponent({
17192
17859
  return "vertical";
17193
17860
  }
17194
17861
  });
17862
+ const classes = vue.computed(() => {
17863
+ return [`resize--${attachment.value}`, `resize--${direction.value}`, props.overlay ? "resize--overlay" : void 0, props.disabled ? "resize--disabled" : void 0];
17864
+ });
17195
17865
  const layoutElement = vue.computed(() => {
17196
17866
  var _host$closest;
17197
17867
  if (!root.value) {
@@ -17201,6 +17871,8 @@ const _sfc_main$5 = /* @__PURE__ */ vue.defineComponent({
17201
17871
  const host = shadow.host;
17202
17872
  return (_host$closest = host.closest("ce-page-layout")) !== null && _host$closest !== void 0 ? _host$closest : void 0;
17203
17873
  });
17874
+ vue.watch(() => props.min, onResize);
17875
+ vue.watch(() => props.max, onResize);
17204
17876
  vue.watchEffect(() => {
17205
17877
  const {
17206
17878
  min,
@@ -17208,23 +17880,23 @@ const _sfc_main$5 = /* @__PURE__ */ vue.defineComponent({
17208
17880
  current: value
17209
17881
  } = state.value;
17210
17882
  if (root.value) {
17211
- root.value.style.setProperty("--size", `${String(value)}px`);
17212
- root.value.style.setProperty("--min", `${min}px`);
17213
- root.value.style.setProperty("--max", `${max}px`);
17883
+ const shadowRoot = root.value.getRootNode();
17884
+ const host = shadowRoot.host;
17885
+ host.style.setProperty("--size", `${String(value)}px`);
17886
+ host.style.setProperty("--min", `${min}px`);
17887
+ host.style.setProperty("--max", `${max}px`);
17888
+ host.style.setProperty("--offset", `${props.offset}px`);
17214
17889
  }
17215
17890
  if (separator.value) {
17216
17891
  separator.value.setAttribute("aria-valuemin", String(Math.floor(min)));
17217
17892
  separator.value.setAttribute("aria-valuemax", String(Math.floor(max)));
17218
17893
  separator.value.setAttribute("aria-valuenow", String(Math.floor(value)));
17219
17894
  }
17895
+ if (value >= 0) {
17896
+ emit("resize", value);
17897
+ }
17220
17898
  });
17221
17899
  vue.onMounted(() => {
17222
- if (separator.value) {
17223
- const {
17224
- flexBasis
17225
- } = getComputedStyle(separator.value);
17226
- separatorSize.value = computeCssValue(flexBasis, 0, 0);
17227
- }
17228
17900
  layoutSize.value = getLayoutSize();
17229
17901
  state.value = {
17230
17902
  min: minSize.value,
@@ -17255,11 +17927,11 @@ const _sfc_main$5 = /* @__PURE__ */ vue.defineComponent({
17255
17927
  }
17256
17928
  }
17257
17929
  return (_ctx, _cache) => {
17258
- return vue.openBlock(), vue.createElementBlock("div", {
17930
+ return vue.openBlock(), vue.createElementBlock(vue.Fragment, null, [_ctx.overlay && _ctx.offset ? (vue.openBlock(), vue.createElementBlock("div", _hoisted_1$5)) : vue.createCommentVNode("", true), _cache[1] || (_cache[1] = vue.createTextVNode()), vue.createElementVNode("div", vue.mergeProps({
17259
17931
  ref_key: "root",
17260
17932
  ref: root,
17261
- class: vue.normalizeClass(["resize", `resize--${vue.unref(attachment)}`])
17262
- }, [vue.createElementVNode("div", {
17933
+ class: ["resize", classes.value]
17934
+ }, _ctx.$attrs), [vue.createElementVNode("div", {
17263
17935
  ref_key: "content",
17264
17936
  ref: content,
17265
17937
  class: "resize__content"
@@ -17271,17 +17943,36 @@ const _sfc_main$5 = /* @__PURE__ */ vue.defineComponent({
17271
17943
  class: "resize__handle",
17272
17944
  tabindex: "0",
17273
17945
  "aria-orientation": orientation.value
17274
- }, null, 8, _hoisted_1$5)) : (vue.openBlock(), vue.createElementBlock("div", {
17946
+ }, null, 8, _hoisted_2$2)) : (vue.openBlock(), vue.createElementBlock("div", {
17275
17947
  key: 1,
17276
17948
  role: "separator",
17277
17949
  class: "resize__handle disabled",
17278
17950
  "aria-orientation": orientation.value
17279
- }, null, 8, _hoisted_2$2))], 2);
17951
+ }, null, 8, _hoisted_3$1))], 16)], 64);
17280
17952
  };
17281
17953
  }
17282
17954
  });
17283
- 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}';
17955
+ 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}';
17284
17956
  const FResizePane = /* @__PURE__ */ _export_sfc(_sfc_main$5, [["styles", [_style_0]]]);
17957
+ const injectionKey = Symbol("FResizePane");
17958
+ function useResize(options = {}) {
17959
+ const api = vue.inject(injectionKey, {
17960
+ register() {
17961
+ return () => void 0;
17962
+ },
17963
+ size: vue.ref(0)
17964
+ });
17965
+ const unregister = api.register({
17966
+ enabled: options.enabled,
17967
+ visible: options.visible,
17968
+ overlay: options.overlay,
17969
+ offset: options.offset
17970
+ });
17971
+ vue.onUnmounted(unregister);
17972
+ return {
17973
+ size: api.size
17974
+ };
17975
+ }
17285
17976
  const _hoisted_1$4 = {
17286
17977
  slot: "content"
17287
17978
  };
@@ -17289,10 +17980,6 @@ const tagName = "ce-resize-pane";
17289
17980
  const _sfc_main$4 = /* @__PURE__ */ vue.defineComponent({
17290
17981
  __name: "FResizePane",
17291
17982
  props: {
17292
- disabled: {
17293
- type: Boolean,
17294
- default: false
17295
- },
17296
17983
  min: {
17297
17984
  default: "0"
17298
17985
  },
@@ -17307,12 +17994,83 @@ const _sfc_main$4 = /* @__PURE__ */ vue.defineComponent({
17307
17994
  if (!customElements.get(tagName)) {
17308
17995
  customElements.define(tagName, vue.defineCustomElement(FResizePane));
17309
17996
  }
17997
+ const anyEnabled = vue.ref(true);
17998
+ const anyVisible = vue.ref(true);
17999
+ const anyOverlay = vue.ref(false);
18000
+ const size = vue.ref(-1);
18001
+ const offset2 = vue.ref(0);
18002
+ let components = [];
18003
+ let n = 0;
18004
+ function any(src, predicate) {
18005
+ return src.length === 0 || src.some(predicate);
18006
+ }
18007
+ vue.provide(injectionKey, {
18008
+ register(options) {
18009
+ const component = {
18010
+ ...options,
18011
+ id: n++
18012
+ };
18013
+ components.push(component);
18014
+ const scope = vue.effectScope();
18015
+ scope.run(() => {
18016
+ vue.watchEffect(() => {
18017
+ anyEnabled.value = any(components, (it) => {
18018
+ var _a;
18019
+ var _it$enabled$value;
18020
+ return (_it$enabled$value = (_a = it.enabled) == null ? void 0 : _a.value) !== null && _it$enabled$value !== void 0 ? _it$enabled$value : true;
18021
+ });
18022
+ });
18023
+ vue.watchEffect(() => {
18024
+ anyVisible.value = any(components, (it) => {
18025
+ var _a;
18026
+ var _it$visible$value;
18027
+ return (_it$visible$value = (_a = it.visible) == null ? void 0 : _a.value) !== null && _it$visible$value !== void 0 ? _it$visible$value : true;
18028
+ });
18029
+ });
18030
+ vue.watchEffect(() => {
18031
+ anyOverlay.value = any(components, (it) => {
18032
+ var _a;
18033
+ var _it$overlay$value;
18034
+ return (_it$overlay$value = (_a = it.overlay) == null ? void 0 : _a.value) !== null && _it$overlay$value !== void 0 ? _it$overlay$value : false;
18035
+ });
18036
+ });
18037
+ vue.watchEffect(() => {
18038
+ if (components.length === 0) {
18039
+ return 0;
18040
+ }
18041
+ const offsets = components.map((it) => {
18042
+ var _a;
18043
+ return (_a = it.offset) == null ? void 0 : _a.value;
18044
+ }).filter((it) => typeof it === "number");
18045
+ offset2.value = Math.max(0, ...offsets);
18046
+ });
18047
+ });
18048
+ return () => {
18049
+ components = components.filter((it) => it.id !== component.id);
18050
+ scope.stop();
18051
+ };
18052
+ },
18053
+ size
18054
+ });
18055
+ const disabled = vue.computed(() => anyEnabled.value === false);
18056
+ const hidden = vue.computed(() => anyVisible.value === false);
18057
+ const overlay = vue.computed(() => anyOverlay.value === true);
17310
18058
  const props = __props;
18059
+ function onResize(event) {
18060
+ size.value = event.detail[0];
18061
+ }
17311
18062
  return (_ctx, _cache) => {
17312
- return vue.openBlock(), vue.createBlock(vue.resolveDynamicComponent(tagName), vue.normalizeProps(vue.guardReactiveProps(props)), {
18063
+ return vue.openBlock(), vue.createBlock(vue.resolveDynamicComponent(tagName), vue.mergeProps({
18064
+ disabled: disabled.value,
18065
+ hidden: hidden.value,
18066
+ overlay: overlay.value,
18067
+ offset: offset2.value
18068
+ }, props, {
18069
+ onResize
18070
+ }), {
17313
18071
  default: vue.withCtx(() => [vue.createElementVNode("div", _hoisted_1$4, [vue.renderSlot(_ctx.$slots, "default")])]),
17314
18072
  _: 3
17315
- }, 16);
18073
+ }, 16, ["disabled", "hidden", "overlay", "offset"]);
17316
18074
  };
17317
18075
  }
17318
18076
  });
@@ -17750,6 +18508,10 @@ const _sfc_main = vue.defineComponent({
17750
18508
  mixins: [TranslationMixin],
17751
18509
  inheritAttrs: true,
17752
18510
  props: {
18511
+ /**
18512
+ * The title of the wizard step.
18513
+ * This will be displayed as the step's header.
18514
+ */
17753
18515
  title: {
17754
18516
  type: String,
17755
18517
  required: true
@@ -18147,7 +18909,7 @@ exports.FSelectField = FSelectField;
18147
18909
  exports.FSortFilterDataset = _sfc_main$s;
18148
18910
  exports.FSortFilterDatasetInjected = FSortFilterDatasetInjected;
18149
18911
  exports.FStaticField = FStaticField;
18150
- exports.FTableColumn = FTableColumn;
18912
+ exports.FTableColumn = _sfc_main$J;
18151
18913
  exports.FTableColumnSize = FTableColumnSize;
18152
18914
  exports.FTableColumnSort = FTableColumnSort;
18153
18915
  exports.FTableColumnType = FTableColumnType;
@@ -18228,6 +18990,7 @@ exports.tooltipAttachTo = tooltipAttachTo;
18228
18990
  exports.useAreaData = useAreaData;
18229
18991
  exports.useCombobox = useCombobox;
18230
18992
  exports.useModal = useModal;
18993
+ exports.useResize = useResize;
18231
18994
  exports.useSlotUtils = useSlotUtils;
18232
18995
  exports.useTextFieldSetup = useTextFieldSetup;
18233
18996
  exports.useTranslate = useTranslate;