@fkui/vue-labs 6.39.0 → 6.41.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.
@@ -418,10 +418,10 @@ function requireSharedStore() {
418
418
  var SHARED = "__core-js_shared__";
419
419
  var store = sharedStore.exports = globalThis2[SHARED] || defineGlobalProperty2(SHARED, {});
420
420
  (store.versions || (store.versions = [])).push({
421
- version: "3.48.0",
421
+ version: "3.49.0",
422
422
  mode: IS_PURE ? "pure" : "global",
423
423
  copyright: "© 2013–2025 Denis Pushkarev (zloirock.ru), 2025–2026 CoreJS Company (core-js.io). All rights reserved.",
424
- license: "https://github.com/zloirock/core-js/blob/v3.48.0/LICENSE",
424
+ license: "https://github.com/zloirock/core-js/blob/v3.49.0/LICENSE",
425
425
  source: "https://github.com/zloirock/core-js"
426
426
  });
427
427
  return sharedStore.exports;
@@ -1364,15 +1364,17 @@ function requireIterate() {
1364
1364
  var fn = bind(unboundFunction, that);
1365
1365
  var iterator, iterFn, index, length, result, next, step;
1366
1366
  var stop = function(condition) {
1367
- if (iterator) iteratorClose2(iterator, "normal");
1367
+ var $iterator = iterator;
1368
+ iterator = void 0;
1369
+ if ($iterator) iteratorClose2($iterator, "normal");
1368
1370
  return new Result(true, condition);
1369
1371
  };
1370
- var callFn = function(value) {
1372
+ var callFn = function(value2) {
1371
1373
  if (AS_ENTRIES) {
1372
- anObject2(value);
1373
- return INTERRUPTED ? fn(value[0], value[1], stop) : fn(value[0], value[1]);
1374
+ anObject2(value2);
1375
+ return INTERRUPTED ? fn(value2[0], value2[1], stop) : fn(value2[0], value2[1]);
1374
1376
  }
1375
- return INTERRUPTED ? fn(value, stop) : fn(value);
1377
+ return INTERRUPTED ? fn(value2, stop) : fn(value2);
1376
1378
  };
1377
1379
  if (IS_RECORD) {
1378
1380
  iterator = iterable.iterator;
@@ -1392,10 +1394,12 @@ function requireIterate() {
1392
1394
  }
1393
1395
  next = IS_RECORD ? iterable.next : iterator.next;
1394
1396
  while (!(step = call(next, iterator)).done) {
1397
+ var value = step.value;
1395
1398
  try {
1396
- result = callFn(step.value);
1399
+ result = callFn(value);
1397
1400
  } catch (error) {
1398
- iteratorClose2(iterator, "throw", error);
1401
+ if (iterator) iteratorClose2(iterator, "throw", error);
1402
+ else throw error;
1399
1403
  }
1400
1404
  if (typeof result == "object" && result && isPrototypeOf(ResultPrototype, result)) return result;
1401
1405
  }
@@ -1869,11 +1873,13 @@ function requireIteratorCreateProxy() {
1869
1873
  "return": function() {
1870
1874
  var state = getInternalState(this);
1871
1875
  var iterator = state.iterator;
1876
+ var done = state.done;
1872
1877
  state.done = true;
1873
1878
  if (IS_ITERATOR) {
1874
1879
  var returnMethod = getMethod2(iterator, "return");
1875
1880
  return returnMethod ? call(returnMethod, iterator) : createIterResultObject2(void 0, true);
1876
1881
  }
1882
+ if (done) return createIterResultObject2(void 0, true);
1877
1883
  if (state.inner) try {
1878
1884
  iteratorClose2(state.inner.iterator, NORMAL);
1879
1885
  } catch (error) {
@@ -1882,7 +1888,8 @@ function requireIteratorCreateProxy() {
1882
1888
  if (state.openIters) try {
1883
1889
  iteratorCloseAll2(state.openIters, NORMAL);
1884
1890
  } catch (error) {
1885
- return iteratorClose2(iterator, THROW, error);
1891
+ if (iterator) return iteratorClose2(iterator, THROW, error);
1892
+ throw error;
1886
1893
  }
1887
1894
  if (iterator) iteratorClose2(iterator, NORMAL);
1888
1895
  return createIterResultObject2(void 0, true);
@@ -2166,7 +2173,7 @@ function requireSetDifference() {
2166
2173
  var O = aSet2(this);
2167
2174
  var otherRec = getSetRecord2(other);
2168
2175
  var result = clone(O);
2169
- if (size(O) <= otherRec.size) iterateSet(O, function(e) {
2176
+ if (size(result) <= otherRec.size) iterateSet(result, function(e) {
2170
2177
  if (otherRec.includes(e)) remove(result, e);
2171
2178
  });
2172
2179
  else iterateSimple2(otherRec.getIterator(), function(e) {
@@ -2355,7 +2362,7 @@ function requireSetIsDisjointFrom() {
2355
2362
  }, true) !== false;
2356
2363
  var iterator = otherRec.getIterator();
2357
2364
  return iterateSimple2(iterator, function(e) {
2358
- if (has(O, e)) return iteratorClose2(iterator, "normal", false);
2365
+ if (has(O, e)) return iteratorClose2(iterator.iterator, "normal", false);
2359
2366
  }) !== false;
2360
2367
  };
2361
2368
  return setIsDisjointFrom;
@@ -2440,7 +2447,7 @@ function requireSetIsSupersetOf() {
2440
2447
  if (size(O) < otherRec.size) return false;
2441
2448
  var iterator = otherRec.getIterator();
2442
2449
  return iterateSimple2(iterator, function(e) {
2443
- if (!has(O, e)) return iteratorClose2(iterator, "normal", false);
2450
+ if (!has(O, e)) return iteratorClose2(iterator.iterator, "normal", false);
2444
2451
  }) !== false;
2445
2452
  };
2446
2453
  return setIsSupersetOf;
@@ -2589,252 +2596,12 @@ function requireEs_set_union_v2() {
2589
2596
  return es_set_union_v2;
2590
2597
  }
2591
2598
  requireEs_set_union_v2();
2592
- function isFTableCellApi(value) {
2593
- return value !== null && typeof value === "object" && Boolean(value.tabstopEl);
2594
- }
2595
- const tableCellApiSymbol = /* @__PURE__ */ Symbol("table:cell-api");
2596
- const navKeys = /* @__PURE__ */ new Set(["ArrowLeft", "ArrowRight", "ArrowUp", "ArrowDown", "Home", "End"]);
2597
- let prevCellIndex = void 0;
2598
- function getCellTarget(tableElement, rowIndex, cellIndex) {
2599
- return tableElement.rows[rowIndex].cells[cellIndex];
2600
- }
2601
- function getTr(td) {
2602
- return td.parentElement;
2603
- }
2604
- function getTable(tr) {
2605
- return tr.closest("table");
2606
- }
2607
- function getLastRowIndex(tableElement) {
2608
- return tableElement.rows.length - 1;
2609
- }
2610
- function getLastCellIndex(tableElement) {
2611
- return tableElement.rows[0].cells.length - 1;
2612
- }
2613
- function getVerticalNavIndex(table, from, to) {
2614
- const target = {
2615
- ...to
2616
- };
2617
- const currentMax = table.rows[from.row].cells.length - 1;
2618
- const targetMax = table.rows[to.row].cells.length - 1;
2619
- if (prevCellIndex && currentMax < targetMax) {
2620
- target.cell = prevCellIndex;
2621
- prevCellIndex = void 0;
2622
- } else {
2623
- target.cell = Math.min(targetMax, from.cell);
2624
- }
2625
- if (targetMax < from.cell) {
2626
- prevCellIndex = from.cell;
2627
- }
2628
- return target;
2629
- }
2630
- function isDefined(value) {
2631
- return value.row !== void 0 && value.cell !== void 0;
2632
- }
2633
- function navigate(e, table, from, last) {
2634
- if (!isDefined(from) || !isDefined(last)) {
2635
- return;
2636
- }
2637
- if (!navKeys.has(e.code)) {
2638
- return;
2639
- }
2640
- e.preventDefault();
2641
- if (e.code === "ArrowLeft") {
2642
- if (from.cell === 0) {
2643
- return;
2644
- }
2645
- prevCellIndex = void 0;
2646
- return {
2647
- row: from.row,
2648
- cell: from.cell - 1
2649
- };
2650
- }
2651
- if (e.code === "ArrowRight") {
2652
- if (from.cell === last.cell) {
2653
- return;
2654
- }
2655
- const lastCellIndex = table.rows[from.row].cells.length - 1;
2656
- if (lastCellIndex <= from.cell) {
2657
- return;
2658
- }
2659
- prevCellIndex = void 0;
2660
- return {
2661
- row: from.row,
2662
- cell: from.cell + 1
2663
- };
2664
- }
2665
- if (e.code === "ArrowUp") {
2666
- if (from.row === 0) {
2667
- return;
2668
- }
2669
- const to = {
2670
- row: from.row - 1,
2671
- cell: from.cell
2672
- };
2673
- return getVerticalNavIndex(table, from, to);
2674
- }
2675
- if (e.code === "ArrowDown") {
2676
- if (from.row === last.row) {
2677
- return;
2678
- }
2679
- const to = {
2680
- row: from.row + 1,
2681
- cell: from.cell
2682
- };
2683
- return getVerticalNavIndex(table, from, to);
2684
- }
2685
- if (e.code === "Home") {
2686
- if (e.ctrlKey) {
2687
- return {
2688
- row: 1,
2689
- cell: 0
2690
- };
2691
- } else {
2692
- return {
2693
- row: from.row,
2694
- cell: 0
2695
- };
2696
- }
2697
- }
2698
- if (e.code === "End") {
2699
- if (e.ctrlKey) {
2700
- return {
2701
- row: last.row,
2702
- cell: table.rows[last.row].cells.length - 1
2703
- };
2704
- } else {
2705
- return {
2706
- row: from.row,
2707
- cell: table.rows[from.row].cells.length - 1
2708
- };
2709
- }
2710
- }
2711
- }
2712
- function getCell(element) {
2713
- const closest = element.closest("td, th");
2714
- if (!closest) {
2715
- throw new Error("expected th or td parent");
2716
- }
2717
- return closest;
2718
- }
2719
- async function setDefaultCellTarget(table) {
2720
- await vue.nextTick();
2721
- const target = getCellTarget(table, 1, 0);
2722
- activateCell(target, {
2723
- focus: false
2724
- });
2725
- return target;
2726
- }
2727
- function maybeNavigateToCell(e) {
2728
- let newCellTarget = e.target;
2729
- const cell = getCell(e.target);
2730
- const tr = getTr(cell);
2731
- const table = getTable(tr);
2732
- const fromIndex = {
2733
- row: tr.rowIndex,
2734
- cell: cell.cellIndex
2735
- };
2736
- const lastIndex = {
2737
- row: getLastRowIndex(table),
2738
- cell: getLastCellIndex(table)
2739
- };
2740
- const navigateTo = navigate(e, table, fromIndex, lastIndex);
2741
- if (navigateTo) {
2742
- newCellTarget = getCellTarget(table, navigateTo.row, navigateTo.cell);
2743
- activateCell(newCellTarget, {
2744
- focus: true
2745
- });
2746
- }
2747
- }
2748
- function activateCell(element, options) {
2749
- var _toValue;
2750
- const api = element[tableCellApiSymbol];
2751
- const targetEl = (_toValue = vue.toValue(api?.tabstopEl)) !== null && _toValue !== void 0 ? _toValue : element;
2752
- targetEl.tabIndex = 0;
2753
- if (options?.focus) {
2754
- targetEl.focus();
2755
- }
2756
- return targetEl;
2757
- }
2758
- function stopEdit(element, reason) {
2759
- const td = getCell(element);
2760
- const tr = getTr(td);
2761
- const table = getTable(tr);
2762
- const rowIndex = tr.rowIndex;
2763
- const cellIndex = td.cellIndex;
2764
- const lastRowIndex = getLastRowIndex(table);
2765
- const lastCellIndex = getLastCellIndex(table);
2766
- let newCellTarget = td;
2767
- switch (reason) {
2768
- case "enter": {
2769
- const nextRowIndex = rowIndex + 1;
2770
- const hasFooter = Boolean(table.tFoot);
2771
- const isLastRow = rowIndex === lastRowIndex;
2772
- const footerNext = hasFooter && nextRowIndex === lastRowIndex;
2773
- if (!isLastRow && !footerNext) {
2774
- newCellTarget = getCellTarget(table, nextRowIndex, cellIndex);
2775
- activateCell(newCellTarget, {
2776
- focus: true
2777
- });
2778
- } else {
2779
- activateCell(newCellTarget, {
2780
- focus: true
2781
- });
2782
- }
2783
- return newCellTarget;
2784
- }
2785
- case "escape": {
2786
- activateCell(newCellTarget, {
2787
- focus: true
2788
- });
2789
- return newCellTarget;
2790
- }
2791
- case "tab": {
2792
- if (cellIndex === lastCellIndex && rowIndex === lastRowIndex) {
2793
- activateCell(newCellTarget, {
2794
- focus: true
2795
- });
2796
- } else if (cellIndex === lastCellIndex) {
2797
- newCellTarget = getCellTarget(table, rowIndex + 1, 0);
2798
- activateCell(newCellTarget, {
2799
- focus: true
2800
- });
2801
- } else {
2802
- newCellTarget = getCellTarget(table, rowIndex, cellIndex + 1);
2803
- activateCell(newCellTarget, {
2804
- focus: true
2805
- });
2806
- }
2807
- return newCellTarget;
2808
- }
2809
- case "shift-tab": {
2810
- if (cellIndex === 0 && rowIndex === 1) {
2811
- activateCell(newCellTarget, {
2812
- focus: true
2813
- });
2814
- } else if (cellIndex === 0) {
2815
- newCellTarget = getCellTarget(table, rowIndex - 1, 0);
2816
- activateCell(newCellTarget, {
2817
- focus: true
2818
- });
2819
- } else {
2820
- newCellTarget = getCellTarget(table, rowIndex, cellIndex - 1);
2821
- activateCell(newCellTarget, {
2822
- focus: true
2823
- });
2824
- }
2825
- return newCellTarget;
2826
- }
2827
- case "blur": {
2828
- return newCellTarget;
2829
- }
2830
- }
2831
- }
2832
2599
  const _hoisted_1$e = {
2833
2600
  key: 0,
2834
2601
  class: "table-ng__cell table-ng__cell--expand"
2835
2602
  };
2836
2603
  const _hoisted_2$9 = ["aria-label", "aria-expanded"];
2837
- const _hoisted_3$6 = {
2604
+ const _hoisted_3$4 = {
2838
2605
  key: 1,
2839
2606
  ref: "expandable",
2840
2607
  tabindex: "-1",
@@ -2880,7 +2647,7 @@ const _sfc_main$g = /* @__PURE__ */ vue.defineComponent({
2880
2647
  }, [vue.createVNode(vue.unref(vue$1.FIcon), {
2881
2648
  class: "button__icon",
2882
2649
  name: toggleIcon.value
2883
- }, null, 8, ["name"])], 8, _hoisted_2$9)])) : (vue.openBlock(), vue.createElementBlock("td", _hoisted_3$6, null, 512));
2650
+ }, null, 8, ["name"])], 8, _hoisted_2$9)])) : (vue.openBlock(), vue.createElementBlock("td", _hoisted_3$4, null, 512));
2884
2651
  };
2885
2652
  }
2886
2653
  });
@@ -2900,7 +2667,56 @@ const _sfc_main$f = /* @__PURE__ */ vue.defineComponent({
2900
2667
  };
2901
2668
  }
2902
2669
  });
2903
- const baseTypes = ["anchor", "button", "checkbox", "radio", "render", "rowheader", "select"];
2670
+ var es_array_includes = {};
2671
+ var addToUnscopables;
2672
+ var hasRequiredAddToUnscopables;
2673
+ function requireAddToUnscopables() {
2674
+ if (hasRequiredAddToUnscopables) return addToUnscopables;
2675
+ hasRequiredAddToUnscopables = 1;
2676
+ var wellKnownSymbol2 = requireWellKnownSymbol();
2677
+ var create = requireObjectCreate();
2678
+ var defineProperty = requireObjectDefineProperty().f;
2679
+ var UNSCOPABLES = wellKnownSymbol2("unscopables");
2680
+ var ArrayPrototype = Array.prototype;
2681
+ if (ArrayPrototype[UNSCOPABLES] === void 0) {
2682
+ defineProperty(ArrayPrototype, UNSCOPABLES, {
2683
+ configurable: true,
2684
+ value: create(null)
2685
+ });
2686
+ }
2687
+ addToUnscopables = function(key) {
2688
+ ArrayPrototype[UNSCOPABLES][key] = true;
2689
+ };
2690
+ return addToUnscopables;
2691
+ }
2692
+ var hasRequiredEs_array_includes;
2693
+ function requireEs_array_includes() {
2694
+ if (hasRequiredEs_array_includes) return es_array_includes;
2695
+ hasRequiredEs_array_includes = 1;
2696
+ var $ = require_export();
2697
+ var $includes = requireArrayIncludes().includes;
2698
+ var fails2 = requireFails();
2699
+ var addToUnscopables2 = requireAddToUnscopables();
2700
+ var BROKEN_ON_SPARSE = fails2(function() {
2701
+ return !Array(1).includes();
2702
+ });
2703
+ var BROKEN_ON_SPARSE_WITH_FROM_INDEX = fails2(function() {
2704
+ return [, 1].includes(void 0, 1);
2705
+ });
2706
+ $({
2707
+ target: "Array",
2708
+ proto: true,
2709
+ forced: BROKEN_ON_SPARSE || BROKEN_ON_SPARSE_WITH_FROM_INDEX
2710
+ }, {
2711
+ includes: function includes(el) {
2712
+ return $includes(this, el, arguments.length > 1 ? arguments[1] : void 0);
2713
+ }
2714
+ });
2715
+ addToUnscopables2("includes");
2716
+ return es_array_includes;
2717
+ }
2718
+ requireEs_array_includes();
2719
+ const baseTypes = ["anchor", "button", "checkbox", "render", "rowheader", "select"];
2904
2720
  const textTypes = ["text:bankAccountNumber", "text:bankgiro", "text:clearingNumber", "text:date", "text:email", "text:organisationsnummer", "text:personnummer", "text:phoneNumber", "text:plusgiro", "text:postalCode", "text"];
2905
2721
  const numberTypes = ["text:currency", "text:number", "text:percent"];
2906
2722
  function isInputTypeNumber(value) {
@@ -3177,7 +2993,7 @@ const inputFieldConfig = {
3177
2993
  }
3178
2994
  }
3179
2995
  };
3180
- const _hoisted_1$c = ["aria-sort"];
2996
+ const _hoisted_1$c = ["aria-sort", "onKeydown"];
3181
2997
  const _sfc_main$e = /* @__PURE__ */ vue.defineComponent({
3182
2998
  __name: "ITableHeader",
3183
2999
  props: {
@@ -3241,19 +3057,13 @@ const _sfc_main$e = /* @__PURE__ */ vue.defineComponent({
3241
3057
  }
3242
3058
  emit("toggleSortOrder", String(__props.column.sortable));
3243
3059
  }
3244
- function onKeydownCell(e) {
3245
- if (e.key === "Enter") {
3246
- e.preventDefault();
3247
- onClickCell();
3248
- }
3249
- }
3250
3060
  return (_ctx, _cache) => {
3251
3061
  return vue.openBlock(), vue.createElementBlock("th", {
3252
3062
  ref: "th",
3253
3063
  "aria-sort": sortValue.value,
3254
3064
  class: vue.normalizeClass(columnClasses.value),
3255
3065
  tabindex: "-1",
3256
- onKeydown: onKeydownCell,
3066
+ onKeydown: vue.withKeys(vue.withModifiers(onClickCell, ["prevent"]), ["enter", "space"]),
3257
3067
  onClick: vue.withModifiers(onClickCell, ["stop"])
3258
3068
  }, [vue.createVNode(vue.unref(vue$1.IFlex), {
3259
3069
  gap: "1x",
@@ -3340,17 +3150,9 @@ const _sfc_main$d = /* @__PURE__ */ vue.defineComponent({
3340
3150
  }
3341
3151
  });
3342
3152
  const _hoisted_1$a = {
3343
- key: 0,
3344
3153
  class: "table-ng__cell table-ng__cell--checkbox"
3345
3154
  };
3346
3155
  const _hoisted_2$7 = ["checked", "aria-label"];
3347
- const _hoisted_3$5 = {
3348
- key: 1,
3349
- ref: "target",
3350
- tabindex: "-1",
3351
- class: "table-ng__cell table-ng__cell--checkbox"
3352
- };
3353
- const _hoisted_4$4 = ["checked", "aria-label"];
3354
3156
  const _sfc_main$c = /* @__PURE__ */ vue.defineComponent({
3355
3157
  __name: "ITableCheckbox",
3356
3158
  props: {
@@ -3374,18 +3176,14 @@ const _sfc_main$c = /* @__PURE__ */ vue.defineComponent({
3374
3176
  };
3375
3177
  __expose(expose);
3376
3178
  return (_ctx, _cache) => {
3377
- return __props.column.editable(__props.row) ? (vue.openBlock(), vue.createElementBlock("td", _hoisted_1$a, [vue.createElementVNode("input", {
3179
+ return vue.openBlock(), vue.createElementBlock("td", _hoisted_1$a, [vue.createElementVNode("input", {
3378
3180
  ref: "target",
3379
3181
  checked: Boolean(__props.column.checked(__props.row)),
3380
3182
  type: "checkbox",
3381
3183
  "aria-label": ariaLabel.value,
3382
3184
  tabindex: "-1",
3383
3185
  onChange
3384
- }, null, 40, _hoisted_2$7)])) : (vue.openBlock(), vue.createElementBlock("td", _hoisted_3$5, [vue.createElementVNode("input", {
3385
- checked: Boolean(__props.column.checked(__props.row)),
3386
- type: "checkbox",
3387
- "aria-label": ariaLabel.value
3388
- }, null, 8, _hoisted_4$4)], 512));
3186
+ }, null, 40, _hoisted_2$7)]);
3389
3187
  };
3390
3188
  }
3391
3189
  });
@@ -3474,9 +3272,6 @@ const _sfc_main$a = /* @__PURE__ */ vue.defineComponent({
3474
3272
  checked() {
3475
3273
  return __props.state;
3476
3274
  },
3477
- editable() {
3478
- return true;
3479
- },
3480
3275
  update() {
3481
3276
  emit("toggle", __props.row);
3482
3277
  },
@@ -3518,6 +3313,249 @@ const _sfc_main$a = /* @__PURE__ */ vue.defineComponent({
3518
3313
  };
3519
3314
  }
3520
3315
  });
3316
+ function isFTableCellApi(value) {
3317
+ return value !== null && typeof value === "object" && Boolean(value.tabstopEl);
3318
+ }
3319
+ const tableCellApiSymbol = /* @__PURE__ */ Symbol("table:cell-api");
3320
+ const navKeys = /* @__PURE__ */ new Set(["ArrowLeft", "ArrowRight", "ArrowUp", "ArrowDown", "Home", "End"]);
3321
+ let prevCellIndex = void 0;
3322
+ function getCellTarget(tableElement, rowIndex, cellIndex) {
3323
+ return tableElement.rows[rowIndex].cells[cellIndex];
3324
+ }
3325
+ function getTr(td) {
3326
+ return td.parentElement;
3327
+ }
3328
+ function getTable(tr) {
3329
+ return tr.closest("table");
3330
+ }
3331
+ function getLastRowIndex(tableElement) {
3332
+ return tableElement.rows.length - 1;
3333
+ }
3334
+ function getLastCellIndex(tableElement) {
3335
+ return tableElement.rows[0].cells.length - 1;
3336
+ }
3337
+ function getVerticalNavIndex(table, from, to) {
3338
+ const target = {
3339
+ ...to
3340
+ };
3341
+ const currentMax = table.rows[from.row].cells.length - 1;
3342
+ const targetMax = table.rows[to.row].cells.length - 1;
3343
+ if (prevCellIndex && currentMax < targetMax) {
3344
+ target.cell = prevCellIndex;
3345
+ prevCellIndex = void 0;
3346
+ } else {
3347
+ target.cell = Math.min(targetMax, from.cell);
3348
+ }
3349
+ if (targetMax < from.cell) {
3350
+ prevCellIndex = from.cell;
3351
+ }
3352
+ return target;
3353
+ }
3354
+ function isDefined(value) {
3355
+ return value.row !== void 0 && value.cell !== void 0;
3356
+ }
3357
+ function navigate(e, table, from, last) {
3358
+ if (!isDefined(from) || !isDefined(last)) {
3359
+ return;
3360
+ }
3361
+ if (!navKeys.has(e.code)) {
3362
+ return;
3363
+ }
3364
+ e.preventDefault();
3365
+ if (e.code === "ArrowLeft") {
3366
+ if (from.cell === 0) {
3367
+ return;
3368
+ }
3369
+ prevCellIndex = void 0;
3370
+ return {
3371
+ row: from.row,
3372
+ cell: from.cell - 1
3373
+ };
3374
+ }
3375
+ if (e.code === "ArrowRight") {
3376
+ if (from.cell === last.cell) {
3377
+ return;
3378
+ }
3379
+ const lastCellIndex = table.rows[from.row].cells.length - 1;
3380
+ if (lastCellIndex <= from.cell) {
3381
+ return;
3382
+ }
3383
+ prevCellIndex = void 0;
3384
+ return {
3385
+ row: from.row,
3386
+ cell: from.cell + 1
3387
+ };
3388
+ }
3389
+ if (e.code === "ArrowUp") {
3390
+ if (from.row === 0) {
3391
+ return;
3392
+ }
3393
+ const to = {
3394
+ row: from.row - 1,
3395
+ cell: from.cell
3396
+ };
3397
+ return getVerticalNavIndex(table, from, to);
3398
+ }
3399
+ if (e.code === "ArrowDown") {
3400
+ if (from.row === last.row) {
3401
+ return;
3402
+ }
3403
+ const to = {
3404
+ row: from.row + 1,
3405
+ cell: from.cell
3406
+ };
3407
+ return getVerticalNavIndex(table, from, to);
3408
+ }
3409
+ if (e.code === "Home") {
3410
+ if (e.ctrlKey) {
3411
+ return {
3412
+ row: 1,
3413
+ cell: 0
3414
+ };
3415
+ } else {
3416
+ return {
3417
+ row: from.row,
3418
+ cell: 0
3419
+ };
3420
+ }
3421
+ }
3422
+ if (e.code === "End") {
3423
+ if (e.ctrlKey) {
3424
+ return {
3425
+ row: last.row,
3426
+ cell: table.rows[last.row].cells.length - 1
3427
+ };
3428
+ } else {
3429
+ return {
3430
+ row: from.row,
3431
+ cell: table.rows[from.row].cells.length - 1
3432
+ };
3433
+ }
3434
+ }
3435
+ }
3436
+ function getCell(element) {
3437
+ const closest = element.closest("td, th");
3438
+ if (!closest) {
3439
+ throw new Error("expected th or td parent");
3440
+ }
3441
+ return closest;
3442
+ }
3443
+ async function setDefaultCellTarget(table) {
3444
+ await vue.nextTick();
3445
+ if (!table.tHead) {
3446
+ return null;
3447
+ }
3448
+ const target = getCellTarget(table, 1, 0);
3449
+ activateCell(target, {
3450
+ focus: false
3451
+ });
3452
+ return target;
3453
+ }
3454
+ function maybeNavigateToCell(e) {
3455
+ let newCellTarget = e.target;
3456
+ const cell = getCell(e.target);
3457
+ const tr = getTr(cell);
3458
+ const table = getTable(tr);
3459
+ const fromIndex = {
3460
+ row: tr.rowIndex,
3461
+ cell: cell.cellIndex
3462
+ };
3463
+ const lastIndex = {
3464
+ row: getLastRowIndex(table),
3465
+ cell: getLastCellIndex(table)
3466
+ };
3467
+ const navigateTo = navigate(e, table, fromIndex, lastIndex);
3468
+ if (navigateTo) {
3469
+ newCellTarget = getCellTarget(table, navigateTo.row, navigateTo.cell);
3470
+ activateCell(newCellTarget, {
3471
+ focus: true
3472
+ });
3473
+ }
3474
+ }
3475
+ function activateCell(element, options) {
3476
+ var _toValue;
3477
+ const api = element[tableCellApiSymbol];
3478
+ const targetEl = (_toValue = vue.toValue(api?.tabstopEl)) !== null && _toValue !== void 0 ? _toValue : element;
3479
+ targetEl.tabIndex = 0;
3480
+ if (options?.focus) {
3481
+ targetEl.focus();
3482
+ }
3483
+ return targetEl;
3484
+ }
3485
+ function stopEdit(element, reason) {
3486
+ const td = getCell(element);
3487
+ const tr = getTr(td);
3488
+ const table = getTable(tr);
3489
+ const rowIndex = tr.rowIndex;
3490
+ const cellIndex = td.cellIndex;
3491
+ const lastRowIndex = getLastRowIndex(table);
3492
+ const lastCellIndex = getLastCellIndex(table);
3493
+ let newCellTarget = td;
3494
+ switch (reason) {
3495
+ case "enter": {
3496
+ const nextRowIndex = rowIndex + 1;
3497
+ const hasFooter = Boolean(table.tFoot);
3498
+ const isLastRow = rowIndex === lastRowIndex;
3499
+ const footerNext = hasFooter && nextRowIndex === lastRowIndex;
3500
+ if (!isLastRow && !footerNext) {
3501
+ newCellTarget = getCellTarget(table, nextRowIndex, cellIndex);
3502
+ activateCell(newCellTarget, {
3503
+ focus: true
3504
+ });
3505
+ } else {
3506
+ activateCell(newCellTarget, {
3507
+ focus: true
3508
+ });
3509
+ }
3510
+ return newCellTarget;
3511
+ }
3512
+ case "escape": {
3513
+ activateCell(newCellTarget, {
3514
+ focus: true
3515
+ });
3516
+ return newCellTarget;
3517
+ }
3518
+ case "tab": {
3519
+ if (cellIndex === lastCellIndex && rowIndex === lastRowIndex) {
3520
+ activateCell(newCellTarget, {
3521
+ focus: true
3522
+ });
3523
+ } else if (cellIndex === lastCellIndex) {
3524
+ newCellTarget = getCellTarget(table, rowIndex + 1, 0);
3525
+ activateCell(newCellTarget, {
3526
+ focus: true
3527
+ });
3528
+ } else {
3529
+ newCellTarget = getCellTarget(table, rowIndex, cellIndex + 1);
3530
+ activateCell(newCellTarget, {
3531
+ focus: true
3532
+ });
3533
+ }
3534
+ return newCellTarget;
3535
+ }
3536
+ case "shift-tab": {
3537
+ if (cellIndex === 0 && rowIndex === 1) {
3538
+ activateCell(newCellTarget, {
3539
+ focus: true
3540
+ });
3541
+ } else if (cellIndex === 0) {
3542
+ newCellTarget = getCellTarget(table, rowIndex - 1, 0);
3543
+ activateCell(newCellTarget, {
3544
+ focus: true
3545
+ });
3546
+ } else {
3547
+ newCellTarget = getCellTarget(table, rowIndex, cellIndex - 1);
3548
+ activateCell(newCellTarget, {
3549
+ focus: true
3550
+ });
3551
+ }
3552
+ return newCellTarget;
3553
+ }
3554
+ case "blur": {
3555
+ return newCellTarget;
3556
+ }
3557
+ }
3558
+ }
3521
3559
  function walk(array, childKey, visit, level = 1) {
3522
3560
  for (const item of array) {
3523
3561
  const visitChildren = visit(item, level);
@@ -3583,7 +3621,7 @@ function requireDoesNotExceedSafeInteger() {
3583
3621
  var $TypeError = TypeError;
3584
3622
  var MAX_SAFE_INTEGER = 9007199254740991;
3585
3623
  doesNotExceedSafeInteger = function(it) {
3586
- if (it > MAX_SAFE_INTEGER) throw $TypeError("Maximum allowed index exceeded");
3624
+ if (it > MAX_SAFE_INTEGER) throw new $TypeError("Maximum allowed index exceeded");
3587
3625
  return it;
3588
3626
  };
3589
3627
  return doesNotExceedSafeInteger;
@@ -3719,12 +3757,8 @@ function requireEs_iterator_map() {
3719
3757
  return es_iterator_map;
3720
3758
  }
3721
3759
  requireEs_iterator_map();
3722
- const _hoisted_1$7 = {
3723
- key: 0,
3724
- class: "table-ng__cell table-ng__cell--anchor"
3725
- };
3726
- const _hoisted_2$5 = ["href"];
3727
- const _hoisted_3$4 = {
3760
+ const _hoisted_1$7 = ["href"];
3761
+ const _hoisted_2$5 = {
3728
3762
  key: 1,
3729
3763
  ref: "target",
3730
3764
  tabindex: "-1",
@@ -3745,13 +3779,18 @@ const _sfc_main$9 = /* @__PURE__ */ vue.defineComponent({
3745
3779
  };
3746
3780
  __expose(expose);
3747
3781
  return (_ctx, _cache) => {
3748
- return __props.column.text(__props.row) ? (vue.openBlock(), vue.createElementBlock("td", _hoisted_1$7, [vue.createElementVNode("a", {
3782
+ return __props.column.text(__props.row) ? (vue.openBlock(), vue.createElementBlock("td", {
3783
+ key: 0,
3784
+ class: "table-ng__cell table-ng__cell--anchor",
3785
+ onKeydown: _cache[0] || (_cache[0] = vue.withKeys(vue.withModifiers(() => {
3786
+ }, ["prevent"]), ["space"]))
3787
+ }, [vue.createElementVNode("a", {
3749
3788
  ref: "target",
3750
3789
  class: "anchor anchor--block",
3751
3790
  target: "_blank",
3752
3791
  href: __props.column.href,
3753
3792
  tabindex: "-1"
3754
- }, vue.toDisplayString(__props.column.text(__props.row)), 9, _hoisted_2$5)])) : (vue.openBlock(), vue.createElementBlock("td", _hoisted_3$4, null, 512));
3793
+ }, vue.toDisplayString(__props.column.text(__props.row)), 9, _hoisted_1$7)], 32)) : (vue.openBlock(), vue.createElementBlock("td", _hoisted_2$5, null, 512));
3755
3794
  };
3756
3795
  }
3757
3796
  });
@@ -3972,7 +4011,7 @@ const _sfc_main$5 = /* @__PURE__ */ vue.defineComponent({
3972
4011
  const activeOptionId = logic.ElementIdService.generateElementId();
3973
4012
  const activeOption = vue.ref(null);
3974
4013
  async function onCellKeyDown(e) {
3975
- if (e.code === "Enter" || e.code === "NumpadEnter") {
4014
+ if (e.code === "Enter" || e.code === "NumpadEnter" || e.code === "Space") {
3976
4015
  await startEditing(e);
3977
4016
  }
3978
4017
  }
@@ -4216,6 +4255,9 @@ const _sfc_main$4 = /* @__PURE__ */ vue.defineComponent({
4216
4255
  const hasError = vue.computed(() => validity.value.validityMode === "ERROR");
4217
4256
  const viewModeAriaInvalid = vue.computed(() => !inEdit.value && hasError.value ? true : void 0);
4218
4257
  const viewModeErrorMessage = vue.computed(() => !inEdit.value && hasError.value ? validity.value.validationMessage : void 0);
4258
+ let initialValidity = {
4259
+ ...validity.value
4260
+ };
4219
4261
  const divClasses = vue.computed(() => {
4220
4262
  return {
4221
4263
  "table-ng__editable": true,
@@ -4297,22 +4339,38 @@ const _sfc_main$4 = /* @__PURE__ */ vue.defineComponent({
4297
4339
  }
4298
4340
  function setUpFakeValidation(el) {
4299
4341
  logic.assertRef(inputElement);
4342
+ const input = inputElement.value;
4343
+ function emitFakeValidity(nativeEvent) {
4344
+ const fakeEvent = new CustomEvent("validity", {
4345
+ detail: {
4346
+ isValid: true,
4347
+ nativeEvent,
4348
+ validityMode: "INITIAL",
4349
+ validationMessage: "",
4350
+ target: input,
4351
+ elementId: String(input.id)
4352
+ }
4353
+ });
4354
+ onValidity(fakeEvent);
4355
+ }
4300
4356
  const nativeEvents = ["change", "blur"];
4301
4357
  for (const nativeEvent of nativeEvents) {
4302
4358
  core.useEventListener(el, nativeEvent, () => {
4303
- const fakeEvent = new CustomEvent("validity", {
4304
- detail: {
4305
- isValid: true,
4306
- nativeEvent,
4307
- validityMode: "INITIAL",
4308
- validationMessage: "",
4309
- target: inputElement.value,
4310
- elementId: String(inputElement.value.id)
4311
- }
4312
- });
4313
- onValidity(fakeEvent);
4359
+ emitFakeValidity(nativeEvent);
4314
4360
  });
4315
4361
  }
4362
+ validationFacade = {
4363
+ validateElement: () => {
4364
+ emitFakeValidity("validate");
4365
+ return Promise.resolve({
4366
+ isValid: true,
4367
+ error: "",
4368
+ isSubmitted: false,
4369
+ isTouched: false
4370
+ });
4371
+ },
4372
+ dispatchComponentValidityEvent: () => void 0
4373
+ };
4316
4374
  core.useEventListener(el, "input", onPendingValidity);
4317
4375
  core.useEventListener(el, "component-validity", (e) => {
4318
4376
  e.stopPropagation();
@@ -4363,6 +4421,9 @@ const _sfc_main$4 = /* @__PURE__ */ vue.defineComponent({
4363
4421
  width
4364
4422
  } = tdElement.value.getBoundingClientRect();
4365
4423
  initialViewValue = viewValue.value;
4424
+ initialValidity = {
4425
+ ...validity.value
4426
+ };
4366
4427
  viewValue.value = value;
4367
4428
  tdElement.value.style.setProperty("width", `${String(width)}px`);
4368
4429
  inputElement.value.tabIndex = 0;
@@ -4377,6 +4438,9 @@ const _sfc_main$4 = /* @__PURE__ */ vue.defineComponent({
4377
4438
  inputElement.value.tabIndex = -1;
4378
4439
  logic.assertRef(tdElement);
4379
4440
  tdElement.value.style.removeProperty("width");
4441
+ if (reason === "blur") {
4442
+ tdElement.value.tabIndex = 0;
4443
+ }
4380
4444
  void stopEdit2(inputElement.value, reason);
4381
4445
  }
4382
4446
  function fromColumnValue() {
@@ -4425,11 +4489,15 @@ const _sfc_main$4 = /* @__PURE__ */ vue.defineComponent({
4425
4489
  switch (event.key) {
4426
4490
  case "Enter": {
4427
4491
  if (viewValue.value === initialViewValue) {
4492
+ validity.value = {
4493
+ ...initialValidity
4494
+ };
4428
4495
  onStopEdit({
4429
4496
  reason: "enter"
4430
4497
  });
4431
4498
  } else {
4432
4499
  pendingStopEditReason = "enter";
4500
+ void validationFacade.validateElement(inputElement.value);
4433
4501
  }
4434
4502
  break;
4435
4503
  }
@@ -4511,7 +4579,7 @@ const _sfc_main$4 = /* @__PURE__ */ vue.defineComponent({
4511
4579
  onKeydown
4512
4580
  }, [vue.createElementVNode("div", {
4513
4581
  class: vue.normalizeClass(divClasses.value)
4514
- }, [vue.createElementVNode("span", _hoisted_2$2, vue.toDisplayString(fromColumnValue()), 1), _cache[1] || (_cache[1] = vue.createTextVNode()), viewModeErrorMessage.value ? (vue.openBlock(), vue.createElementBlock("span", _hoisted_3$2, vue.toDisplayString(viewModeErrorMessage.value), 1)) : vue.createCommentVNode("", true), _cache[2] || (_cache[2] = vue.createTextVNode()), vue.withDirectives(vue.createElementVNode("input", vue.mergeProps({
4582
+ }, [vue.createElementVNode("span", _hoisted_2$2, vue.toDisplayString(fromColumnValue()), 1), _cache[2] || (_cache[2] = vue.createTextVNode()), viewModeErrorMessage.value ? (vue.openBlock(), vue.createElementBlock("span", _hoisted_3$2, vue.toDisplayString(viewModeErrorMessage.value), 1)) : vue.createCommentVNode("", true), _cache[3] || (_cache[3] = vue.createTextVNode()), vue.withDirectives(vue.createElementVNode("input", vue.mergeProps({
4515
4583
  id: vue.unref(inputId),
4516
4584
  ref: "input",
4517
4585
  "onUpdate:modelValue": _cache[0] || (_cache[0] = ($event) => viewValue.value = $event),
@@ -4527,7 +4595,7 @@ const _sfc_main$4 = /* @__PURE__ */ vue.defineComponent({
4527
4595
  "aria-hidden": !inEdit.value,
4528
4596
  onValidity,
4529
4597
  onPendingValidity
4530
- }), null, 16, _hoisted_4$2), [[vue.vModelText, viewValue.value]])], 2), _cache[3] || (_cache[3] = vue.createTextVNode()), vue.createVNode(vue.unref(vue$1.IPopupError), {
4598
+ }), null, 16, _hoisted_4$2), [[vue.vModelText, viewValue.value]])], 2), _cache[4] || (_cache[4] = vue.createTextVNode()), vue.createVNode(vue.unref(vue$1.IPopupError), {
4531
4599
  anchor: tdElement.value,
4532
4600
  "is-open": openPopupError.value,
4533
4601
  "error-message": validity.value.validationMessage,
@@ -4537,57 +4605,57 @@ const _sfc_main$4 = /* @__PURE__ */ vue.defineComponent({
4537
4605
  key: 1,
4538
4606
  ref: "td",
4539
4607
  tabindex: "-1",
4540
- class: vue.normalizeClass(staticClasses.value)
4541
- }, vue.toDisplayString(fromColumnValue()), 3));
4608
+ class: vue.normalizeClass(staticClasses.value),
4609
+ onKeydown: _cache[1] || (_cache[1] = vue.withKeys(vue.withModifiers(() => {
4610
+ }, ["prevent"]), ["space"]))
4611
+ }, vue.toDisplayString(fromColumnValue()), 35));
4542
4612
  };
4543
4613
  }
4544
4614
  });
4545
4615
  function normalizeAnchorColumn(column) {
4546
- var _column$key;
4547
4616
  return {
4548
4617
  type: "anchor",
4549
4618
  text: getValueFn(column.text, column.key, String, ""),
4550
- href: column.href,
4551
- sortable: (_column$key = column.key) !== null && _column$key !== void 0 ? _column$key : null
4619
+ href: column.href
4552
4620
  };
4553
4621
  }
4622
+ function getSortable(column) {
4623
+ var _column$sort, _column$key;
4624
+ const shouldSort = (_column$sort = column.sort) !== null && _column$sort !== void 0 ? _column$sort : !!column.key;
4625
+ return shouldSort ? (_column$key = column.key) !== null && _column$key !== void 0 ? _column$key : null : null;
4626
+ }
4554
4627
  function normalizeBaseColumn(column) {
4555
4628
  var _column$enabled;
4556
4629
  const id = /* @__PURE__ */ Symbol();
4557
4630
  const header = vue.toRef(column.header);
4558
4631
  const description = column.description !== void 0 ? vue.toRef(column.description) : vue.ref("");
4559
4632
  const size = column.size !== void 0 ? vue.toRef(column.size) : vue.ref("grow");
4633
+ const sortable = getSortable(column);
4560
4634
  return {
4561
4635
  id,
4562
4636
  header,
4563
4637
  description,
4638
+ sortable,
4564
4639
  size,
4565
4640
  enabled: (_column$enabled = column.enabled) !== null && _column$enabled !== void 0 ? _column$enabled : true
4566
4641
  };
4567
4642
  }
4568
4643
  function normalizeButtonColumn(column) {
4569
- var _column$icon, _column$key;
4644
+ var _column$icon;
4570
4645
  return {
4571
4646
  type: "button",
4572
4647
  text: getValueFn(column.text, column.key, String, ""),
4573
4648
  onClick: column.onClick,
4574
4649
  icon: (_column$icon = column.icon) !== null && _column$icon !== void 0 ? _column$icon : null,
4575
- iconLibrary: column.iconLibrary,
4576
- sortable: (_column$key = column.key) !== null && _column$key !== void 0 ? _column$key : null
4650
+ iconLibrary: column.iconLibrary
4577
4651
  };
4578
4652
  }
4579
4653
  function normalizeCheckboxColumn(column) {
4580
- var _column$key;
4581
4654
  return {
4582
4655
  type: "checkbox",
4583
4656
  label: getLabelFn(column.label),
4584
4657
  checked: getValueFn(column.checked, column.key, Boolean, false),
4585
- update: getUpdateFn(column.update, column.key),
4586
- editable: typeof column.editable === "function" ? column.editable : () => {
4587
- var _column$editable;
4588
- return Boolean((_column$editable = column.editable) !== null && _column$editable !== void 0 ? _column$editable : false);
4589
- },
4590
- sortable: (_column$key = column.key) !== null && _column$key !== void 0 ? _column$key : null
4658
+ update: getUpdateFn(column.update, column.key)
4591
4659
  };
4592
4660
  }
4593
4661
  function noop() {
@@ -4597,7 +4665,6 @@ function normalizeMenuColumn(column) {
4597
4665
  return {
4598
4666
  type: "menu",
4599
4667
  text: getValueFn(column.text, void 0, String, ""),
4600
- sortable: null,
4601
4668
  actions: ((_column$actions = column.actions) !== null && _column$actions !== void 0 ? _column$actions : []).map((it) => {
4602
4669
  var _it$icon, _it$onClick;
4603
4670
  return {
@@ -4609,7 +4676,7 @@ function normalizeMenuColumn(column) {
4609
4676
  };
4610
4677
  }
4611
4678
  function normalizeNumberColumn(column) {
4612
- var _column$parser, _column$formatter, _column$tnum, _column$align, _column$validation, _column$key;
4679
+ var _column$parser, _column$formatter, _column$tnum, _column$align, _column$validation;
4613
4680
  const type = column.type;
4614
4681
  const config = inputFieldConfig[type];
4615
4682
  const parser = (_column$parser = column.parser) !== null && _column$parser !== void 0 ? _column$parser : config.parser.bind(column);
@@ -4630,21 +4697,10 @@ function normalizeNumberColumn(column) {
4630
4697
  },
4631
4698
  validation: (_column$validation = column.validation) !== null && _column$validation !== void 0 ? _column$validation : {},
4632
4699
  hasValidation: column.type.startsWith("text:") || Boolean(column.validation),
4633
- sortable: (_column$key = column.key) !== null && _column$key !== void 0 ? _column$key : null,
4634
4700
  formatter,
4635
4701
  parser
4636
4702
  };
4637
4703
  }
4638
- function normalizeRadioColumn(column) {
4639
- var _column$key;
4640
- return {
4641
- type: "radio",
4642
- label: getLabelFn(column.label),
4643
- checked: getValueFn(column.checked, column.key, Boolean, false),
4644
- update: getUpdateFn(column.update, column.key),
4645
- sortable: (_column$key = column.key) !== null && _column$key !== void 0 ? _column$key : null
4646
- };
4647
- }
4648
4704
  function normalizeRenderColumn(column) {
4649
4705
  return {
4650
4706
  type: void 0,
@@ -4653,15 +4709,12 @@ function normalizeRenderColumn(column) {
4653
4709
  };
4654
4710
  }
4655
4711
  function normalizeRowHeaderColumn(column) {
4656
- var _column$key;
4657
4712
  return {
4658
4713
  type: "rowheader",
4659
- text: getValueFn(column.text, column.key, String, ""),
4660
- sortable: (_column$key = column.key) !== null && _column$key !== void 0 ? _column$key : null
4714
+ text: getValueFn(column.text, column.key, String, "")
4661
4715
  };
4662
4716
  }
4663
4717
  function normalizeSelectColumn(column) {
4664
- var _column$key;
4665
4718
  return {
4666
4719
  type: "select",
4667
4720
  label: getLabelFn(column.label),
@@ -4671,12 +4724,10 @@ function normalizeSelectColumn(column) {
4671
4724
  var _column$editable;
4672
4725
  return Boolean((_column$editable = column.editable) !== null && _column$editable !== void 0 ? _column$editable : false);
4673
4726
  },
4674
- options: column.options,
4675
- sortable: (_column$key = column.key) !== null && _column$key !== void 0 ? _column$key : null
4727
+ options: column.options
4676
4728
  };
4677
4729
  }
4678
4730
  function normalizeSimpleColumn(column) {
4679
- var _column$key;
4680
4731
  return {
4681
4732
  type: "text",
4682
4733
  label: () => "",
@@ -4686,7 +4737,6 @@ function normalizeSimpleColumn(column) {
4686
4737
  update() {
4687
4738
  },
4688
4739
  editable: () => false,
4689
- sortable: (_column$key = column.key) !== null && _column$key !== void 0 ? _column$key : null,
4690
4740
  validation: {},
4691
4741
  hasValidation: false,
4692
4742
  formatter: (value) => value,
@@ -4694,7 +4744,7 @@ function normalizeSimpleColumn(column) {
4694
4744
  };
4695
4745
  }
4696
4746
  function normalizeTextColumn(column) {
4697
- var _column$parser, _column$formatter, _column$tnum, _column$align, _column$validation, _column$key;
4747
+ var _column$parser, _column$formatter, _column$tnum, _column$align, _column$validation;
4698
4748
  const type = column.type;
4699
4749
  const config = inputFieldConfig[type];
4700
4750
  const parser = (_column$parser = column.parser) !== null && _column$parser !== void 0 ? _column$parser : config.parser;
@@ -4713,7 +4763,6 @@ function normalizeTextColumn(column) {
4713
4763
  },
4714
4764
  validation: (_column$validation = column.validation) !== null && _column$validation !== void 0 ? _column$validation : {},
4715
4765
  hasValidation: column.type.startsWith("text:") || Boolean(column.validation),
4716
- sortable: (_column$key = column.key) !== null && _column$key !== void 0 ? _column$key : null,
4717
4766
  formatter,
4718
4767
  parser
4719
4768
  };
@@ -4721,32 +4770,26 @@ function normalizeTextColumn(column) {
4721
4770
  function normalizeTableColumn(column) {
4722
4771
  const base = normalizeBaseColumn(column);
4723
4772
  if ("render" in column) {
4724
- return {
4773
+ return Object.freeze({
4725
4774
  ...normalizeRenderColumn(column),
4726
4775
  ...base
4727
- };
4776
+ });
4728
4777
  }
4729
4778
  switch (column.type) {
4730
4779
  case "checkbox":
4731
- return {
4780
+ return Object.freeze({
4732
4781
  ...normalizeCheckboxColumn(column),
4733
4782
  ...base,
4734
4783
  component: _sfc_main$c
4735
- };
4736
- case "radio":
4737
- return {
4738
- ...normalizeRadioColumn(column),
4739
- ...base,
4740
- component: _sfc_main$b
4741
- };
4784
+ });
4742
4785
  case "text:currency":
4743
4786
  case "text:number":
4744
4787
  case "text:percent":
4745
- return {
4788
+ return Object.freeze({
4746
4789
  ...normalizeNumberColumn(column),
4747
4790
  ...base,
4748
4791
  component: _sfc_main$4
4749
- };
4792
+ });
4750
4793
  case "text":
4751
4794
  case "text:bankAccountNumber":
4752
4795
  case "text:bankgiro":
@@ -4758,47 +4801,47 @@ function normalizeTableColumn(column) {
4758
4801
  case "text:phoneNumber":
4759
4802
  case "text:plusgiro":
4760
4803
  case "text:postalCode":
4761
- return {
4804
+ return Object.freeze({
4762
4805
  ...normalizeTextColumn(column),
4763
4806
  ...base,
4764
4807
  component: _sfc_main$4
4765
- };
4808
+ });
4766
4809
  case "rowheader":
4767
- return {
4810
+ return Object.freeze({
4768
4811
  ...normalizeRowHeaderColumn(column),
4769
4812
  ...base,
4770
4813
  component: _sfc_main$6
4771
- };
4814
+ });
4772
4815
  case "anchor":
4773
- return {
4816
+ return Object.freeze({
4774
4817
  ...normalizeAnchorColumn(column),
4775
4818
  ...base,
4776
4819
  component: _sfc_main$9
4777
- };
4820
+ });
4778
4821
  case "button":
4779
- return {
4822
+ return Object.freeze({
4780
4823
  ...normalizeButtonColumn(column),
4781
4824
  ...base,
4782
4825
  component: _sfc_main$8
4783
- };
4826
+ });
4784
4827
  case "select":
4785
- return {
4828
+ return Object.freeze({
4786
4829
  ...normalizeSelectColumn(column),
4787
4830
  ...base,
4788
4831
  component: _sfc_main$5
4789
- };
4832
+ });
4790
4833
  case "menu":
4791
- return {
4834
+ return Object.freeze({
4792
4835
  ...normalizeMenuColumn(column),
4793
4836
  ...base,
4794
4837
  component: _sfc_main$7
4795
- };
4838
+ });
4796
4839
  case void 0:
4797
- return {
4840
+ return Object.freeze({
4798
4841
  ...normalizeSimpleColumn(column),
4799
4842
  ...base,
4800
4843
  component: _sfc_main$4
4801
- };
4844
+ });
4802
4845
  }
4803
4846
  }
4804
4847
  function defineTableColumns(columns) {
@@ -4819,16 +4862,11 @@ function usePopupError() {
4819
4862
  anchor,
4820
4863
  arrowAnchor,
4821
4864
  hasFocus,
4822
- hasHover,
4823
- inEdit
4865
+ hasHover
4824
4866
  } = popupError;
4825
4867
  if (!anchor || !arrowAnchor) {
4826
4868
  return;
4827
4869
  }
4828
- if (inEdit) {
4829
- onClosePopupError(popupError);
4830
- return;
4831
- }
4832
4870
  if (hasFocus || hasHover) {
4833
4871
  await open(popupError);
4834
4872
  } else {
@@ -4901,27 +4939,6 @@ function requireGetBuiltInPrototypeMethod() {
4901
4939
  };
4902
4940
  return getBuiltInPrototypeMethod;
4903
4941
  }
4904
- var addToUnscopables;
4905
- var hasRequiredAddToUnscopables;
4906
- function requireAddToUnscopables() {
4907
- if (hasRequiredAddToUnscopables) return addToUnscopables;
4908
- hasRequiredAddToUnscopables = 1;
4909
- var wellKnownSymbol2 = requireWellKnownSymbol();
4910
- var create = requireObjectCreate();
4911
- var defineProperty = requireObjectDefineProperty().f;
4912
- var UNSCOPABLES = wellKnownSymbol2("unscopables");
4913
- var ArrayPrototype = Array.prototype;
4914
- if (ArrayPrototype[UNSCOPABLES] === void 0) {
4915
- defineProperty(ArrayPrototype, UNSCOPABLES, {
4916
- configurable: true,
4917
- value: create(null)
4918
- });
4919
- }
4920
- addToUnscopables = function(key) {
4921
- ArrayPrototype[UNSCOPABLES][key] = true;
4922
- };
4923
- return addToUnscopables;
4924
- }
4925
4942
  var hasRequiredEs_array_toSorted;
4926
4943
  function requireEs_array_toSorted() {
4927
4944
  if (hasRequiredEs_array_toSorted) return es_array_toSorted;
@@ -5070,8 +5087,8 @@ function useSelectable(options) {
5070
5087
  };
5071
5088
  }
5072
5089
  function matching(needle) {
5073
- const id = vue$1.getItemIdentifier(needle);
5074
- return (item) => vue$1.getItemIdentifier(item) === id;
5090
+ const id = vue$1.getItemIdentifier(needle.row);
5091
+ return (item) => vue$1.getItemIdentifier(item.row) === id;
5075
5092
  }
5076
5093
  function useTabstop(tableRef, metaRows) {
5077
5094
  let pendingRowRemoval = false;
@@ -5202,26 +5219,32 @@ const _hoisted_2$1 = {
5202
5219
  "data-test": "caption"
5203
5220
  };
5204
5221
  const _hoisted_3$1 = {
5222
+ key: 1
5223
+ };
5224
+ const _hoisted_4$1 = {
5205
5225
  class: "table-ng__row",
5206
5226
  "aria-rowindex": "1"
5207
5227
  };
5208
- const _hoisted_4$1 = {
5228
+ const _hoisted_5$1 = {
5209
5229
  key: 0,
5210
5230
  scope: "col",
5211
5231
  tabindex: "-1",
5212
5232
  class: "table-ng__column"
5213
5233
  };
5214
- const _hoisted_5$1 = {
5234
+ const _hoisted_6$1 = {
5235
+ key: 2
5236
+ };
5237
+ const _hoisted_7$1 = {
5215
5238
  key: 0,
5216
5239
  class: "table-ng__row--empty"
5217
5240
  };
5218
- const _hoisted_6$1 = ["colspan"];
5219
- const _hoisted_7$1 = ["aria-level", "aria-rowindex", "aria-setsize", "aria-posinset", "aria-selected"];
5220
- const _hoisted_8 = {
5221
- key: 1
5241
+ const _hoisted_8 = ["colspan"];
5242
+ const _hoisted_9 = ["aria-level", "aria-rowindex", "aria-setsize", "aria-posinset", "aria-selected"];
5243
+ const _hoisted_10 = {
5244
+ key: 3
5222
5245
  };
5223
- const _hoisted_9 = ["aria-rowindex"];
5224
- const _hoisted_10 = ["colspan"];
5246
+ const _hoisted_11 = ["aria-rowindex"];
5247
+ const _hoisted_12 = ["colspan"];
5225
5248
  const _sfc_main$3 = /* @__PURE__ */ vue.defineComponent({
5226
5249
  __name: "FTable",
5227
5250
  props: /* @__PURE__ */ vue.mergeModels({
@@ -5233,6 +5256,10 @@ const _sfc_main$3 = /* @__PURE__ */ vue.defineComponent({
5233
5256
  expandableAttribute: {
5234
5257
  default: () => void 0
5235
5258
  },
5259
+ rowClass: {
5260
+ type: Function,
5261
+ default: void 0
5262
+ },
5236
5263
  striped: {
5237
5264
  type: Boolean
5238
5265
  },
@@ -5272,20 +5299,35 @@ const _sfc_main$3 = /* @__PURE__ */ vue.defineComponent({
5272
5299
  return metaRows.value.length === 0;
5273
5300
  });
5274
5301
  const ariaRowcount = vue.computed(() => {
5275
- const headerRow = 1;
5276
5302
  const footerRow = hasFooter.value ? 1 : 0;
5277
- return getBodyRowCount(keyedRows.value, __props.expandableAttribute) + headerRow + footerRow;
5303
+ if (!hasColumns.value) {
5304
+ return footerRow;
5305
+ }
5306
+ const headerRow = 1;
5307
+ const bodyRows = getBodyRowCount(keyedRows.value, __props.expandableAttribute);
5308
+ return bodyRows + headerRow + footerRow;
5309
+ });
5310
+ const fullColspan = vue.computed(() => {
5311
+ if (!hasColumns.value) {
5312
+ return 0;
5313
+ }
5314
+ let count = columns.value.length;
5315
+ if (isTreegrid.value) {
5316
+ count += 1;
5317
+ }
5318
+ if (__props.selectable) {
5319
+ count += 1;
5320
+ }
5321
+ return count;
5278
5322
  });
5279
- const columnCount = vue.computed(() => {
5280
- const expandCol = isTreegrid.value ? 1 : 0;
5281
- const selectCol = __props.selectable ? 1 : 0;
5282
- const count = columns.value.length + expandCol + selectCol;
5283
- return Math.max(1, count);
5323
+ const expandedColspan = vue.computed(() => {
5324
+ return fullColspan.value - 1;
5284
5325
  });
5285
5326
  const hasFooter = vue.computed(() => {
5286
5327
  return hasSlot("footer");
5287
5328
  });
5288
5329
  const columns = vue.computed(() => normalizeTableColumns(__props.columns).filter((col) => vue.toValue(col.enabled)));
5330
+ const hasColumns = vue.computed(() => columns.value.length > 0);
5289
5331
  const tableClasses = vue.computed(() => {
5290
5332
  return ["table-ng", {
5291
5333
  "table-ng--striped": __props.striped,
@@ -5300,6 +5342,9 @@ const _sfc_main$3 = /* @__PURE__ */ vue.defineComponent({
5300
5342
  stopEdit(element, reason);
5301
5343
  }
5302
5344
  vue.provide(stopEditKey, stopEditHandler);
5345
+ function getRowClass(row) {
5346
+ return typeof __props.rowClass === "function" ? __props.rowClass(row) : void 0;
5347
+ }
5303
5348
  function onToggleExpanded(key) {
5304
5349
  if (expandedKeys.value.has(key)) {
5305
5350
  expandedKeys.value.delete(key);
@@ -5431,7 +5476,7 @@ const _sfc_main$3 = /* @__PURE__ */ vue.defineComponent({
5431
5476
  selectedRows,
5432
5477
  rows: keyedRows
5433
5478
  });
5434
- const tableApi = useTabstop(tableRef, keyedRows);
5479
+ const tableApi = useTabstop(tableRef, metaRows);
5435
5480
  __expose(tableApi);
5436
5481
  vue.onMounted(() => {
5437
5482
  logic.assertRef(tableRef);
@@ -5449,13 +5494,13 @@ const _sfc_main$3 = /* @__PURE__ */ vue.defineComponent({
5449
5494
  onFocusout: onTableFocusout,
5450
5495
  onClick,
5451
5496
  onKeydown
5452
- }, [hasCaption.value ? (vue.openBlock(), vue.createElementBlock("caption", _hoisted_2$1, [vue.renderSlot(_ctx.$slots, "caption")])) : vue.createCommentVNode("", true), _cache[4] || (_cache[4] = vue.createTextVNode()), vue.createElementVNode("thead", null, [vue.createElementVNode("tr", _hoisted_3$1, [isTreegrid.value ? (vue.openBlock(), vue.createElementBlock("th", _hoisted_4$1)) : vue.createCommentVNode("", true), _cache[0] || (_cache[0] = vue.createTextVNode()), __props.selectable ? (vue.openBlock(), vue.createBlock(_sfc_main$d, {
5497
+ }, [hasCaption.value ? (vue.openBlock(), vue.createElementBlock("caption", _hoisted_2$1, [vue.renderSlot(_ctx.$slots, "caption")])) : vue.createCommentVNode("", true), _cache[6] || (_cache[6] = vue.createTextVNode()), hasColumns.value ? (vue.openBlock(), vue.createElementBlock("thead", _hoisted_3$1, [vue.createElementVNode("tr", _hoisted_4$1, [isTreegrid.value ? (vue.openBlock(), vue.createElementBlock("th", _hoisted_5$1)) : vue.createCommentVNode("", true), _cache[2] || (_cache[2] = vue.createTextVNode()), __props.selectable ? (vue.openBlock(), vue.createBlock(_sfc_main$d, {
5453
5498
  key: 1,
5454
5499
  ref: bindCellApiRef,
5455
5500
  state: vue.unref(selectableHeaderState)(),
5456
5501
  selectable: __props.selectable,
5457
5502
  onToggle: vue.unref(toggleSelectableHeader)
5458
- }, null, 8, ["state", "selectable", "onToggle"])) : vue.createCommentVNode("", true), _cache[1] || (_cache[1] = vue.createTextVNode()), (vue.openBlock(true), vue.createElementBlock(vue.Fragment, null, vue.renderList(columns.value, (column) => {
5503
+ }, null, 8, ["state", "selectable", "onToggle"])) : vue.createCommentVNode("", true), _cache[3] || (_cache[3] = vue.createTextVNode()), (vue.openBlock(true), vue.createElementBlock(vue.Fragment, null, vue.renderList(columns.value, (column) => {
5459
5504
  return vue.openBlock(), vue.createBlock(_sfc_main$e, {
5460
5505
  key: column.id,
5461
5506
  column,
@@ -5464,10 +5509,12 @@ const _sfc_main$3 = /* @__PURE__ */ vue.defineComponent({
5464
5509
  scope: "col",
5465
5510
  onToggleSortOrder
5466
5511
  }, null, 8, ["column", "sort-enabled", "sort-order"]);
5467
- }), 128))])]), _cache[5] || (_cache[5] = vue.createTextVNode()), vue.createElementVNode("tbody", null, [isEmpty.value ? (vue.openBlock(), vue.createElementBlock("tr", _hoisted_5$1, [vue.createElementVNode("td", {
5468
- colspan: columnCount.value,
5469
- class: "table-ng__cell"
5470
- }, [vue.renderSlot(_ctx.$slots, "empty", {}, () => [vue.createTextVNode(vue.toDisplayString(vue.unref($t)("fkui.ftable.empty.text", "Tabellen är tom")), 1)])], 8, _hoisted_6$1)])) : (vue.openBlock(true), vue.createElementBlock(vue.Fragment, {
5512
+ }), 128))])])) : vue.createCommentVNode("", true), _cache[7] || (_cache[7] = vue.createTextVNode()), hasColumns.value ? (vue.openBlock(), vue.createElementBlock("tbody", _hoisted_6$1, [isEmpty.value ? (vue.openBlock(), vue.createElementBlock("tr", _hoisted_7$1, [vue.createElementVNode("td", {
5513
+ colspan: fullColspan.value,
5514
+ class: "table-ng__cell",
5515
+ onKeydown: _cache[0] || (_cache[0] = vue.withKeys(vue.withModifiers(() => {
5516
+ }, ["prevent"]), ["space"]))
5517
+ }, [vue.renderSlot(_ctx.$slots, "empty", {}, () => [vue.createTextVNode(vue.toDisplayString(vue.unref($t)("fkui.ftable.empty.text", "Tabellen är tom")), 1)])], 40, _hoisted_8)])) : (vue.openBlock(true), vue.createElementBlock(vue.Fragment, {
5471
5518
  key: 1
5472
5519
  }, vue.renderList(metaRows.value, ({
5473
5520
  key,
@@ -5481,7 +5528,7 @@ const _sfc_main$3 = /* @__PURE__ */ vue.defineComponent({
5481
5528
  }) => {
5482
5529
  return vue.openBlock(), vue.createElementBlock("tr", {
5483
5530
  key,
5484
- class: "table-ng__row",
5531
+ class: vue.normalizeClass(["table-ng__row", getRowClass(row)]),
5485
5532
  "aria-level": level,
5486
5533
  "aria-rowindex": rowIndex,
5487
5534
  "aria-setsize": setsize,
@@ -5495,9 +5542,9 @@ const _sfc_main$3 = /* @__PURE__ */ vue.defineComponent({
5495
5542
  "is-expanded": isExpanded,
5496
5543
  "row-key": key,
5497
5544
  onToggle: onToggleExpanded
5498
- }, null, 8, ["is-expandable", "is-expanded", "row-key"])) : vue.createCommentVNode("", true), _cache[3] || (_cache[3] = vue.createTextVNode()), level > 1 && hasExpandableSlot.value ? (vue.openBlock(), vue.createBlock(_sfc_main$f, {
5545
+ }, null, 8, ["is-expandable", "is-expanded", "row-key"])) : vue.createCommentVNode("", true), _cache[5] || (_cache[5] = vue.createTextVNode()), level > 1 && hasExpandableSlot.value ? (vue.openBlock(), vue.createBlock(_sfc_main$f, {
5499
5546
  key: 1,
5500
- colspan: columns.value.length
5547
+ colspan: expandedColspan.value
5501
5548
  }, {
5502
5549
  default: vue.withCtx(() => [vue.renderSlot(_ctx.$slots, "expandable", vue.mergeProps({
5503
5550
  ref_for: true
@@ -5516,7 +5563,7 @@ const _sfc_main$3 = /* @__PURE__ */ vue.defineComponent({
5516
5563
  state: vue.unref(selectableRowState)(row),
5517
5564
  row,
5518
5565
  onToggle: vue.unref(toggleSelectableRow)
5519
- }, null, 8, ["level", "selectable", "state", "row", "onToggle"])) : vue.createCommentVNode("", true), _cache[2] || (_cache[2] = vue.createTextVNode()), (vue.openBlock(true), vue.createElementBlock(vue.Fragment, null, vue.renderList(columns.value, (column) => {
5566
+ }, null, 8, ["level", "selectable", "state", "row", "onToggle"])) : vue.createCommentVNode("", true), _cache[4] || (_cache[4] = vue.createTextVNode()), (vue.openBlock(true), vue.createElementBlock(vue.Fragment, null, vue.renderList(columns.value, (column) => {
5520
5567
  return vue.openBlock(), vue.createElementBlock(vue.Fragment, {
5521
5568
  key: column.id
5522
5569
  }, ["component" in column ? (vue.openBlock(), vue.createBlock(vue.resolveDynamicComponent(column.component), {
@@ -5532,17 +5579,30 @@ const _sfc_main$3 = /* @__PURE__ */ vue.defineComponent({
5532
5579
  key: 1,
5533
5580
  row
5534
5581
  }, null, 8, ["row"])) : vue.createCommentVNode("", true)], 64);
5535
- }), 128))], 64))], 8, _hoisted_7$1);
5536
- }), 128))]), _cache[6] || (_cache[6] = vue.createTextVNode()), hasFooter.value ? (vue.openBlock(), vue.createElementBlock("tfoot", _hoisted_8, [vue.createElementVNode("tr", {
5582
+ }), 128))], 64))], 10, _hoisted_9);
5583
+ }), 128))])) : vue.createCommentVNode("", true), _cache[8] || (_cache[8] = vue.createTextVNode()), hasFooter.value ? (vue.openBlock(), vue.createElementBlock("tfoot", _hoisted_10, [vue.createElementVNode("tr", {
5537
5584
  class: "table-ng__row",
5538
5585
  "aria-rowindex": ariaRowcount.value
5539
5586
  }, [vue.createElementVNode("td", {
5540
- colspan: columnCount.value,
5541
- class: "table-ng__cell--custom"
5542
- }, [vue.renderSlot(_ctx.$slots, "footer")], 8, _hoisted_10)], 8, _hoisted_9)])) : vue.createCommentVNode("", true)], 42, _hoisted_1$2);
5587
+ colspan: fullColspan.value,
5588
+ class: "table-ng__cell--custom",
5589
+ onKeydown: _cache[1] || (_cache[1] = vue.withKeys(vue.withModifiers(() => {
5590
+ }, ["prevent"]), ["space"]))
5591
+ }, [vue.renderSlot(_ctx.$slots, "footer")], 40, _hoisted_12)], 8, _hoisted_11)])) : vue.createCommentVNode("", true)], 42, _hoisted_1$2);
5543
5592
  };
5544
5593
  }
5545
5594
  });
5595
+ function isSortable(column) {
5596
+ return "key" in column && column.key !== void 0 && column.sort !== false;
5597
+ }
5598
+ function toEntry(column) {
5599
+ return [column.key, column.header];
5600
+ }
5601
+ function getTableSortableAttributes(columns) {
5602
+ const sortable = columns.filter(isSortable);
5603
+ const attributes = sortable.map(toEntry);
5604
+ return Object.fromEntries(attributes);
5605
+ }
5546
5606
  var es_array_toSpliced = {};
5547
5607
  var hasRequiredEs_array_toSpliced;
5548
5608
  function requireEs_array_toSpliced() {
@@ -5841,6 +5901,7 @@ function requireArrayBufferTransfer() {
5841
5901
  var structuredClone = globalThis2.structuredClone;
5842
5902
  var ArrayBuffer2 = globalThis2.ArrayBuffer;
5843
5903
  var DataView2 = globalThis2.DataView;
5904
+ var max = Math.max;
5844
5905
  var min = Math.min;
5845
5906
  var ArrayBufferPrototype = ArrayBuffer2.prototype;
5846
5907
  var DataViewPrototype = DataView2.prototype;
@@ -5865,7 +5926,7 @@ function requireArrayBufferTransfer() {
5865
5926
  newBuffer = slice(arrayBuffer, 0, newByteLength);
5866
5927
  } else {
5867
5928
  var options = preserveResizability && !fixedLength && maxByteLength ? {
5868
- maxByteLength: maxByteLength(arrayBuffer)
5929
+ maxByteLength: max(newByteLength, maxByteLength(arrayBuffer))
5869
5930
  } : void 0;
5870
5931
  newBuffer = new ArrayBuffer2(newByteLength, options);
5871
5932
  var a = new DataView2(arrayBuffer);
@@ -5913,78 +5974,6 @@ function requireEs_arrayBuffer_transferToFixedLength() {
5913
5974
  return es_arrayBuffer_transferToFixedLength;
5914
5975
  }
5915
5976
  requireEs_arrayBuffer_transferToFixedLength();
5916
- var es_iterator_reduce = {};
5917
- var functionApply;
5918
- var hasRequiredFunctionApply;
5919
- function requireFunctionApply() {
5920
- if (hasRequiredFunctionApply) return functionApply;
5921
- hasRequiredFunctionApply = 1;
5922
- var NATIVE_BIND = requireFunctionBindNative();
5923
- var FunctionPrototype = Function.prototype;
5924
- var apply = FunctionPrototype.apply;
5925
- var call = FunctionPrototype.call;
5926
- functionApply = typeof Reflect == "object" && Reflect.apply || (NATIVE_BIND ? call.bind(apply) : function() {
5927
- return call.apply(apply, arguments);
5928
- });
5929
- return functionApply;
5930
- }
5931
- var hasRequiredEs_iterator_reduce;
5932
- function requireEs_iterator_reduce() {
5933
- if (hasRequiredEs_iterator_reduce) return es_iterator_reduce;
5934
- hasRequiredEs_iterator_reduce = 1;
5935
- var $ = require_export();
5936
- var iterate2 = requireIterate();
5937
- var aCallable2 = requireACallable();
5938
- var anObject2 = requireAnObject();
5939
- var getIteratorDirect2 = requireGetIteratorDirect();
5940
- var iteratorClose2 = requireIteratorClose();
5941
- var iteratorHelperWithoutClosingOnEarlyError2 = requireIteratorHelperWithoutClosingOnEarlyError();
5942
- var apply = requireFunctionApply();
5943
- var fails2 = requireFails();
5944
- var $TypeError = TypeError;
5945
- var FAILS_ON_INITIAL_UNDEFINED = fails2(function() {
5946
- [].keys().reduce(function() {
5947
- }, void 0);
5948
- });
5949
- var reduceWithoutClosingOnEarlyError = !FAILS_ON_INITIAL_UNDEFINED && iteratorHelperWithoutClosingOnEarlyError2("reduce", $TypeError);
5950
- $({
5951
- target: "Iterator",
5952
- proto: true,
5953
- real: true,
5954
- forced: FAILS_ON_INITIAL_UNDEFINED || reduceWithoutClosingOnEarlyError
5955
- }, {
5956
- reduce: function reduce(reducer) {
5957
- anObject2(this);
5958
- try {
5959
- aCallable2(reducer);
5960
- } catch (error) {
5961
- iteratorClose2(this, "throw", error);
5962
- }
5963
- var noInitial = arguments.length < 2;
5964
- var accumulator = noInitial ? void 0 : arguments[1];
5965
- if (reduceWithoutClosingOnEarlyError) {
5966
- return apply(reduceWithoutClosingOnEarlyError, this, noInitial ? [reducer] : [reducer, accumulator]);
5967
- }
5968
- var record = getIteratorDirect2(this);
5969
- var counter = 0;
5970
- iterate2(record, function(value) {
5971
- if (noInitial) {
5972
- noInitial = false;
5973
- accumulator = value;
5974
- } else {
5975
- accumulator = reducer(accumulator, value, counter);
5976
- }
5977
- counter++;
5978
- }, {
5979
- IS_RECORD: true
5980
- });
5981
- if (noInitial) throw new $TypeError("Reduce of empty iterator with no initial value");
5982
- return accumulator;
5983
- }
5984
- });
5985
- return es_iterator_reduce;
5986
- }
5987
- requireEs_iterator_reduce();
5988
5977
  var es_typedArray_toReversed = {};
5989
5978
  var isPossiblePrototype;
5990
5979
  var hasRequiredIsPossiblePrototype;
@@ -6197,7 +6186,7 @@ function requireArrayBufferViewCore() {
6197
6186
  }
6198
6187
  });
6199
6188
  for (NAME in TypedArrayConstructorsList) if (globalThis2[NAME]) {
6200
- createNonEnumerableProperty2(globalThis2[NAME], TYPED_ARRAY_TAG, NAME);
6189
+ createNonEnumerableProperty2(globalThis2[NAME].prototype, TYPED_ARRAY_TAG, NAME);
6201
6190
  }
6202
6191
  }
6203
6192
  arrayBufferViewCore = {
@@ -6601,26 +6590,25 @@ function requireUint8FromHex() {
6601
6590
  var uncurryThis = requireFunctionUncurryThis();
6602
6591
  var Uint8Array2 = globalThis2.Uint8Array;
6603
6592
  var SyntaxError = globalThis2.SyntaxError;
6604
- var parseInt = globalThis2.parseInt;
6605
6593
  var min = Math.min;
6606
- var NOT_HEX = /[^\da-f]/i;
6607
- var exec = uncurryThis(NOT_HEX.exec);
6608
- var stringSlice = uncurryThis("".slice);
6594
+ var stringMatch = uncurryThis("".match);
6609
6595
  uint8FromHex = function(string, into) {
6610
6596
  var stringLength = string.length;
6611
6597
  if (stringLength % 2 !== 0) throw new SyntaxError("String should be an even number of characters");
6612
6598
  var maxLength = into ? min(into.length, stringLength / 2) : stringLength / 2;
6613
6599
  var bytes = into || new Uint8Array2(maxLength);
6614
- var read = 0;
6600
+ var segments = stringMatch(string, /.{2}/g);
6615
6601
  var written = 0;
6616
- while (written < maxLength) {
6617
- var hexits = stringSlice(string, read, read += 2);
6618
- if (exec(NOT_HEX, hexits)) throw new SyntaxError("String should only contain hex characters");
6619
- bytes[written++] = parseInt(hexits, 16);
6602
+ for (; written < maxLength; written++) {
6603
+ var result = +("0x" + segments[written] + "0");
6604
+ if (result !== result) {
6605
+ throw new SyntaxError("String should only contain hex characters");
6606
+ }
6607
+ bytes[written] = result >> 4;
6620
6608
  }
6621
6609
  return {
6622
6610
  bytes,
6623
- read
6611
+ read: written << 1
6624
6612
  };
6625
6613
  };
6626
6614
  return uint8FromHex;
@@ -6735,6 +6723,8 @@ function requireEs_uint8Array_toHex() {
6735
6723
  var anUint8Array2 = requireAnUint8Array();
6736
6724
  var notDetached = requireArrayBufferNotDetached();
6737
6725
  var numberToString = uncurryThis(1.1.toString);
6726
+ var join = uncurryThis([].join);
6727
+ var $Array = Array;
6738
6728
  var Uint8Array2 = globalThis2.Uint8Array;
6739
6729
  var INCORRECT_BEHAVIOR_OR_DOESNT_EXISTS = !Uint8Array2 || !Uint8Array2.prototype.toHex || !(function() {
6740
6730
  try {
@@ -6752,12 +6742,12 @@ function requireEs_uint8Array_toHex() {
6752
6742
  toHex: function toHex() {
6753
6743
  anUint8Array2(this);
6754
6744
  notDetached(this.buffer);
6755
- var result = "";
6745
+ var result = $Array(this.length);
6756
6746
  for (var i = 0, length = this.length; i < length; i++) {
6757
6747
  var hex = numberToString(this[i], 16);
6758
- result += hex.length === 1 ? "0" + hex : hex;
6748
+ result[i] = hex.length === 1 ? "0" + hex : hex;
6759
6749
  }
6760
- return result;
6750
+ return join(result, "");
6761
6751
  }
6762
6752
  });
6763
6753
  return es_uint8Array_toHex;
@@ -7316,6 +7306,78 @@ const _sfc_main$1 = /* @__PURE__ */ vue.defineComponent({
7316
7306
  });
7317
7307
  const HOURS_MINUTES_REGEXP = /^(?<hours>\d+)?(:(?<minutes>[0-5]\d))?$/;
7318
7308
  const HOURS_MINUTES_WITHOUT_COLON_REGEXP = /^(?<hours>\d{2})(?<minutes>[0-5]\d)$/;
7309
+ var es_iterator_reduce = {};
7310
+ var functionApply;
7311
+ var hasRequiredFunctionApply;
7312
+ function requireFunctionApply() {
7313
+ if (hasRequiredFunctionApply) return functionApply;
7314
+ hasRequiredFunctionApply = 1;
7315
+ var NATIVE_BIND = requireFunctionBindNative();
7316
+ var FunctionPrototype = Function.prototype;
7317
+ var apply = FunctionPrototype.apply;
7318
+ var call = FunctionPrototype.call;
7319
+ functionApply = typeof Reflect == "object" && Reflect.apply || (NATIVE_BIND ? call.bind(apply) : function() {
7320
+ return call.apply(apply, arguments);
7321
+ });
7322
+ return functionApply;
7323
+ }
7324
+ var hasRequiredEs_iterator_reduce;
7325
+ function requireEs_iterator_reduce() {
7326
+ if (hasRequiredEs_iterator_reduce) return es_iterator_reduce;
7327
+ hasRequiredEs_iterator_reduce = 1;
7328
+ var $ = require_export();
7329
+ var iterate2 = requireIterate();
7330
+ var aCallable2 = requireACallable();
7331
+ var anObject2 = requireAnObject();
7332
+ var getIteratorDirect2 = requireGetIteratorDirect();
7333
+ var iteratorClose2 = requireIteratorClose();
7334
+ var iteratorHelperWithoutClosingOnEarlyError2 = requireIteratorHelperWithoutClosingOnEarlyError();
7335
+ var apply = requireFunctionApply();
7336
+ var fails2 = requireFails();
7337
+ var $TypeError = TypeError;
7338
+ var FAILS_ON_INITIAL_UNDEFINED = fails2(function() {
7339
+ [].keys().reduce(function() {
7340
+ }, void 0);
7341
+ });
7342
+ var reduceWithoutClosingOnEarlyError = !FAILS_ON_INITIAL_UNDEFINED && iteratorHelperWithoutClosingOnEarlyError2("reduce", $TypeError);
7343
+ $({
7344
+ target: "Iterator",
7345
+ proto: true,
7346
+ real: true,
7347
+ forced: FAILS_ON_INITIAL_UNDEFINED || reduceWithoutClosingOnEarlyError
7348
+ }, {
7349
+ reduce: function reduce(reducer) {
7350
+ anObject2(this);
7351
+ try {
7352
+ aCallable2(reducer);
7353
+ } catch (error) {
7354
+ iteratorClose2(this, "throw", error);
7355
+ }
7356
+ var noInitial = arguments.length < 2;
7357
+ var accumulator = noInitial ? void 0 : arguments[1];
7358
+ if (reduceWithoutClosingOnEarlyError) {
7359
+ return apply(reduceWithoutClosingOnEarlyError, this, noInitial ? [reducer] : [reducer, accumulator]);
7360
+ }
7361
+ var record = getIteratorDirect2(this);
7362
+ var counter = 0;
7363
+ iterate2(record, function(value) {
7364
+ if (noInitial) {
7365
+ noInitial = false;
7366
+ accumulator = value;
7367
+ } else {
7368
+ accumulator = reducer(accumulator, value, counter);
7369
+ }
7370
+ counter++;
7371
+ }, {
7372
+ IS_RECORD: true
7373
+ });
7374
+ if (noInitial) throw new $TypeError("Reduce of empty iterator with no initial value");
7375
+ return accumulator;
7376
+ }
7377
+ });
7378
+ return es_iterator_reduce;
7379
+ }
7380
+ requireEs_iterator_reduce();
7319
7381
  function findMatch(regexps, value) {
7320
7382
  for (const regexp of regexps) {
7321
7383
  const match = value.match(regexp);
@@ -7467,7 +7529,7 @@ const validators = [hoursMinutesValidator, greaterThanTimeValidator, lessThanTim
7467
7529
  for (const validator of validators) {
7468
7530
  logic.ValidationService.registerValidator(validator);
7469
7531
  }
7470
- const _sfc_main = vue.defineComponent({
7532
+ const _sfc_main = /* @__PURE__ */ vue.defineComponent({
7471
7533
  name: "XTimeTextField",
7472
7534
  extends: vue$1.FTextField,
7473
7535
  mixins: [vue$1.TranslationMixin],
@@ -7514,6 +7576,7 @@ exports.baseTypes = baseTypes;
7514
7576
  exports.defineTableColumns = defineTableColumns;
7515
7577
  exports.forgivingParseTimeToNumber = forgivingParseTimeToNumber;
7516
7578
  exports.formatNumberToTime = formatNumberToTime;
7579
+ exports.getTableSortableAttributes = getTableSortableAttributes;
7517
7580
  exports.hoursMinutesStringToMinutes = hoursMinutesStringToMinutes;
7518
7581
  exports.matchPropertyValue = matchPropertyValue;
7519
7582
  exports.minutesToHoursFloat = minutesToHoursFloat;