@fkui/vue-labs 6.31.1 → 6.32.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.
@@ -166,6 +166,17 @@ var FTablePageObject = class {
166
166
  selectInput(row) {
167
167
  return cy.get([this.bodyRow(row), this.selectCell, `input`].join(" "));
168
168
  }
169
+ /**
170
+ * Get table caption.
171
+ *
172
+ * Only applicable if caption slot is used.
173
+ *
174
+ * @public
175
+ * @returns The table caption.
176
+ */
177
+ caption() {
178
+ return cy.get(`${this.selector} caption`);
179
+ }
169
180
  /**
170
181
  * Get table footer.
171
182
  *
@@ -1,7 +1,7 @@
1
1
  {
2
2
  "version": 3,
3
3
  "sources": ["../../src/cypress/index.ts", "../../src/cypress/XDummy.pageobject.ts", "../../src/cypress/FTable.pageobject.ts"],
4
- "sourcesContent": ["export { XDummyPageObject } from \"./XDummy.pageobject\";\nexport { FTablePageObject } from \"./FTable.pageobject\";\n", "import { type BasePageObject, type DefaultCypressChainable } from \"./common\";\n\n/**\n * @public\n */\nexport class XDummyPageObject implements BasePageObject {\n public selector: string;\n public el: () => DefaultCypressChainable;\n\n /**\n * @param selector - the root of the dummy, usually `<dummy class=\"dummy\">...</dummy>`.\n */\n public constructor(selector: string) {\n this.selector = selector;\n this.el = () => cy.get(this.selector);\n }\n\n /**\n * Heading\n */\n public heading(): DefaultCypressChainable {\n return cy.get(`${this.selector} h1`);\n }\n}\n", "import { type BasePageObject, type DefaultCypressChainable } from \"./common\";\n\n/**\n * @public\n * @since v6.24.0\n */\nexport class FTablePageObject implements BasePageObject {\n public selector: string;\n\n private readonly selectHeader = \".table-ng__column--selectable\";\n private readonly columnTitle = \".table-ng__column__title\";\n private readonly columnDescription = \".table-ng__column__description\";\n private readonly expandCell = \".table-ng__cell--expand\";\n private readonly selectCell = \".table-ng__cell--selectable\";\n\n /**\n * @param selector - root element selector for `FTable`, usually `.table-ng`.\n */\n public constructor(selector: string = \".table-ng\") {\n this.selector = selector;\n }\n\n /**\n * Get root element.\n *\n * @public\n */\n public el(): DefaultCypressChainable {\n return cy.get(this.selector);\n }\n\n /**\n * Get table header cell (`<th>` in `<thead>`).\n *\n * The headers for expandable buttons and selectable checkboxes are included.\n *\n * @public\n * @param col - Column number of header (1-indexed).\n * @returns The header cell element (`<th>`).\n */\n public header(\n col: number,\n ): Cypress.Chainable<JQuery<HTMLTableCellElement>> {\n const colIndex = String(col - 1);\n return cy.get([this.thead, `th:nth(${colIndex})`].join(\" \"));\n }\n\n /**\n * Get column title from table header.\n *\n * The headers for expandable buttons and selectable checkboxes are included.\n *\n * @public\n * @param col - Column number of header (1-indexed).\n * @returns Column description in header.\n */\n public headerTitle(col: number): DefaultCypressChainable {\n const colIndex = String(col - 1);\n return cy.get(\n [this.thead, `th:nth(${colIndex})`, this.columnTitle].join(\" \"),\n );\n }\n\n /**\n * Get column description from table header.\n *\n * The headers for expandable buttons and selectable checkboxes are included.\n *\n * @public\n * @param col - Column number of header (1-indexed).\n * @returns Column description in header.\n */\n public headerDescription(col: number): DefaultCypressChainable {\n const colIndex = String(col - 1);\n return cy.get(\n [this.thead, `th:nth(${colIndex})`, this.columnDescription].join(\n \" \",\n ),\n );\n }\n\n /**\n * Get table cell (typically `<td>` but can be `<th>` if row headers are\n * present).\n *\n * Both row and column are 1-indexed, i.e. 1:1 selects the first cell in the\n * first row.\n *\n * The columns for expandable buttons and selectable checkboxes are included in column count.\n *\n * For expandable rows the row count depend on whenever a row is expanded or\n * not. If the first row is collapsed the second row refers to the next\n * parent row while if the first row is expanded the second row refers to\n * the first expanded row under the first row.\n *\n * @public\n * @param descriptor - Row and column number of cell (1-indexed).\n * @returns The cell element.\n */\n public cell(descriptor: {\n row: number;\n col: number;\n }): Cypress.Chainable<JQuery<HTMLTableCellElement>> {\n const row = this.bodyRow(descriptor.row);\n const nth = `nth-child(${descriptor.col})`;\n return cy.get([row, `> td:${nth},`, row, `> th:${nth}`].join(\" \"));\n }\n\n /**\n * Get expand button of given row.\n *\n * Only applicable if using an expandable table.\n *\n * @public\n * @param row - Row number for the expand button (1-indexed).\n * @returns Expand button of given row.\n */\n public expandButton(\n row: number,\n ): Cypress.Chainable<JQuery<HTMLButtonElement>> {\n return cy.get([this.bodyRow(row), this.expandCell, `button`].join(\" \"));\n }\n\n /**\n * Get checkbox in the table header for selectable column.\n *\n * Only applicable if using a multiselect table.\n *\n * @public\n * @returns Checkbox in selectable column header.\n */\n public selectHeaderInput(): Cypress.Chainable<JQuery<HTMLInputElement>> {\n return cy.get([this.thead, this.selectHeader, `input`].join(\" \"));\n }\n\n /**\n * Get select input of given row.\n *\n * Only applicable if using a selectable table.\n * Input is a checkbox if using a multiselect table and radio if single.\n *\n * @param row - Row number for the select input (1-indexed).\n * @returns Select input of given row.\n */\n public selectInput(\n row: number,\n ): Cypress.Chainable<JQuery<HTMLInputElement>> {\n return cy.get([this.bodyRow(row), this.selectCell, `input`].join(\" \"));\n }\n\n /**\n * Get table footer.\n *\n * Only applicable if footer slot is used.\n *\n * @public\n * @returns The table footer.\n */\n public footer(): Cypress.Chainable<JQuery<HTMLTableSectionElement>> {\n return cy.get(this.tfoot);\n }\n\n /**\n * Get current tabbable element in the table.\n *\n * If table is untouched, it is the first cell in the table body (including columns for expandable and selectable).\n * If the cell has an interactable element, it is instead the interactable that is returned and not the cell.\n *\n * @internal\n * @returns The current tabbable element.\n */\n public tabbableElement(): DefaultCypressChainable {\n return cy.get(`${this.selector} [tabindex=0]`);\n }\n\n /**\n * Get all visible rows (`<tr>` in `<tbody>`).\n *\n * Includes expanded rows if table is expandable.\n *\n * @public\n * @returns All visible rows in the table.\n */\n public rows(): Cypress.Chainable<JQuery<HTMLTableRowElement>> {\n return cy.get(`${this.tbody} tr`);\n }\n\n /** @internal */\n private bodyRow(row: number): string {\n const rowIndex = String(row - 1);\n return `${this.tbody} tr:nth(${rowIndex})`;\n }\n\n /** @internal */\n private get thead(): string {\n return `${this.selector} thead`;\n }\n\n /** @internal */\n private get tbody(): string {\n return `${this.selector} tbody`;\n }\n\n /** @internal */\n private get tfoot(): string {\n return `${this.selector} tfoot`;\n }\n}\n"],
5
- "mappings": "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",
4
+ "sourcesContent": ["export { XDummyPageObject } from \"./XDummy.pageobject\";\nexport { FTablePageObject } from \"./FTable.pageobject\";\n", "import { type BasePageObject, type DefaultCypressChainable } from \"./common\";\n\n/**\n * @public\n */\nexport class XDummyPageObject implements BasePageObject {\n public selector: string;\n public el: () => DefaultCypressChainable;\n\n /**\n * @param selector - the root of the dummy, usually `<dummy class=\"dummy\">...</dummy>`.\n */\n public constructor(selector: string) {\n this.selector = selector;\n this.el = () => cy.get(this.selector);\n }\n\n /**\n * Heading\n */\n public heading(): DefaultCypressChainable {\n return cy.get(`${this.selector} h1`);\n }\n}\n", "import { type BasePageObject, type DefaultCypressChainable } from \"./common\";\n\n/**\n * @public\n * @since v6.24.0\n */\nexport class FTablePageObject implements BasePageObject {\n public selector: string;\n\n private readonly selectHeader = \".table-ng__column--selectable\";\n private readonly columnTitle = \".table-ng__column__title\";\n private readonly columnDescription = \".table-ng__column__description\";\n private readonly expandCell = \".table-ng__cell--expand\";\n private readonly selectCell = \".table-ng__cell--selectable\";\n\n /**\n * @param selector - root element selector for `FTable`, usually `.table-ng`.\n */\n public constructor(selector: string = \".table-ng\") {\n this.selector = selector;\n }\n\n /**\n * Get root element.\n *\n * @public\n */\n public el(): DefaultCypressChainable {\n return cy.get(this.selector);\n }\n\n /**\n * Get table header cell (`<th>` in `<thead>`).\n *\n * The headers for expandable buttons and selectable checkboxes are included.\n *\n * @public\n * @param col - Column number of header (1-indexed).\n * @returns The header cell element (`<th>`).\n */\n public header(\n col: number,\n ): Cypress.Chainable<JQuery<HTMLTableCellElement>> {\n const colIndex = String(col - 1);\n return cy.get([this.thead, `th:nth(${colIndex})`].join(\" \"));\n }\n\n /**\n * Get column title from table header.\n *\n * The headers for expandable buttons and selectable checkboxes are included.\n *\n * @public\n * @param col - Column number of header (1-indexed).\n * @returns Column description in header.\n */\n public headerTitle(col: number): DefaultCypressChainable {\n const colIndex = String(col - 1);\n return cy.get(\n [this.thead, `th:nth(${colIndex})`, this.columnTitle].join(\" \"),\n );\n }\n\n /**\n * Get column description from table header.\n *\n * The headers for expandable buttons and selectable checkboxes are included.\n *\n * @public\n * @param col - Column number of header (1-indexed).\n * @returns Column description in header.\n */\n public headerDescription(col: number): DefaultCypressChainable {\n const colIndex = String(col - 1);\n return cy.get(\n [this.thead, `th:nth(${colIndex})`, this.columnDescription].join(\n \" \",\n ),\n );\n }\n\n /**\n * Get table cell (typically `<td>` but can be `<th>` if row headers are\n * present).\n *\n * Both row and column are 1-indexed, i.e. 1:1 selects the first cell in the\n * first row.\n *\n * The columns for expandable buttons and selectable checkboxes are included in column count.\n *\n * For expandable rows the row count depend on whenever a row is expanded or\n * not. If the first row is collapsed the second row refers to the next\n * parent row while if the first row is expanded the second row refers to\n * the first expanded row under the first row.\n *\n * @public\n * @param descriptor - Row and column number of cell (1-indexed).\n * @returns The cell element.\n */\n public cell(descriptor: {\n row: number;\n col: number;\n }): Cypress.Chainable<JQuery<HTMLTableCellElement>> {\n const row = this.bodyRow(descriptor.row);\n const nth = `nth-child(${descriptor.col})`;\n return cy.get([row, `> td:${nth},`, row, `> th:${nth}`].join(\" \"));\n }\n\n /**\n * Get expand button of given row.\n *\n * Only applicable if using an expandable table.\n *\n * @public\n * @param row - Row number for the expand button (1-indexed).\n * @returns Expand button of given row.\n */\n public expandButton(\n row: number,\n ): Cypress.Chainable<JQuery<HTMLButtonElement>> {\n return cy.get([this.bodyRow(row), this.expandCell, `button`].join(\" \"));\n }\n\n /**\n * Get checkbox in the table header for selectable column.\n *\n * Only applicable if using a multiselect table.\n *\n * @public\n * @returns Checkbox in selectable column header.\n */\n public selectHeaderInput(): Cypress.Chainable<JQuery<HTMLInputElement>> {\n return cy.get([this.thead, this.selectHeader, `input`].join(\" \"));\n }\n\n /**\n * Get select input of given row.\n *\n * Only applicable if using a selectable table.\n * Input is a checkbox if using a multiselect table and radio if single.\n *\n * @param row - Row number for the select input (1-indexed).\n * @returns Select input of given row.\n */\n public selectInput(\n row: number,\n ): Cypress.Chainable<JQuery<HTMLInputElement>> {\n return cy.get([this.bodyRow(row), this.selectCell, `input`].join(\" \"));\n }\n\n /**\n * Get table caption.\n *\n * Only applicable if caption slot is used.\n *\n * @public\n * @returns The table caption.\n */\n public caption(): Cypress.Chainable<JQuery<HTMLTableSectionElement>> {\n return cy.get(`${this.selector} caption`);\n }\n\n /**\n * Get table footer.\n *\n * Only applicable if footer slot is used.\n *\n * @public\n * @returns The table footer.\n */\n public footer(): Cypress.Chainable<JQuery<HTMLTableSectionElement>> {\n return cy.get(this.tfoot);\n }\n\n /**\n * Get current tabbable element in the table.\n *\n * If table is untouched, it is the first cell in the table body (including columns for expandable and selectable).\n * If the cell has an interactable element, it is instead the interactable that is returned and not the cell.\n *\n * @internal\n * @returns The current tabbable element.\n */\n public tabbableElement(): DefaultCypressChainable {\n return cy.get(`${this.selector} [tabindex=0]`);\n }\n\n /**\n * Get all visible rows (`<tr>` in `<tbody>`).\n *\n * Includes expanded rows if table is expandable.\n *\n * @public\n * @returns All visible rows in the table.\n */\n public rows(): Cypress.Chainable<JQuery<HTMLTableRowElement>> {\n return cy.get(`${this.tbody} tr`);\n }\n\n /** @internal */\n private bodyRow(row: number): string {\n const rowIndex = String(row - 1);\n return `${this.tbody} tr:nth(${rowIndex})`;\n }\n\n /** @internal */\n private get thead(): string {\n return `${this.selector} thead`;\n }\n\n /** @internal */\n private get tbody(): string {\n return `${this.selector} tbody`;\n }\n\n /** @internal */\n private get tfoot(): string {\n return `${this.selector} tfoot`;\n }\n}\n"],
5
+ "mappings": "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",
6
6
  "names": []
7
7
  }
@@ -282,7 +282,7 @@ function requireSymbolConstructorDetection() {
282
282
  var globalThis2 = requireGlobalThis();
283
283
  var $String = globalThis2.String;
284
284
  symbolConstructorDetection = !!Object.getOwnPropertySymbols && !fails2(function() {
285
- var symbol = Symbol("symbol detection");
285
+ var symbol = /* @__PURE__ */ Symbol("symbol detection");
286
286
  return !$String(symbol) || !(Object(symbol) instanceof Symbol) || // Chrome 38-40 symbols are not inherited from DOM collections prototypes to instances
287
287
  !Symbol.sham && V8_VERSION && V8_VERSION < 41;
288
288
  });
@@ -1886,7 +1886,7 @@ requireEs_array_push();
1886
1886
  function isFTableCellApi(value) {
1887
1887
  return value !== null && typeof value === "object" && Boolean(value.tabstopEl);
1888
1888
  }
1889
- const tableCellApiSymbol = Symbol("table:cell-api");
1889
+ const tableCellApiSymbol = /* @__PURE__ */ Symbol("table:cell-api");
1890
1890
  function walk(array, visit, childKey, level = 1) {
1891
1891
  for (const item of array) {
1892
1892
  const visitChildren = visit(item, level);
@@ -2226,7 +2226,7 @@ const _sfc_main$d = /* @__PURE__ */ vue$1.defineComponent({
2226
2226
  };
2227
2227
  }
2228
2228
  });
2229
- const textTypes = ["text:bankAccountNumber", "text:bankgiro", "text:clearingNumber", "text:email", "text:organisationsnummer", "text:personnummer", "text:phoneNumber", "text:plusgiro", "text:postalCode", "text"];
2229
+ const textTypes = ["text:bankAccountNumber", "text:bankgiro", "text:clearingNumber", "text:date", "text:email", "text:organisationsnummer", "text:personnummer", "text:phoneNumber", "text:plusgiro", "text:postalCode", "text"];
2230
2230
  const numberTypes = ["text:currency", "text:number", "text:percent"];
2231
2231
  function isInputTypeNumber(value) {
2232
2232
  return numberTypes.includes(value);
@@ -2333,6 +2333,21 @@ const inputFieldConfig = {
2333
2333
  value: "20"
2334
2334
  }]
2335
2335
  },
2336
+ "text:date": {
2337
+ formatter(value) {
2338
+ return logic.parseDate(value);
2339
+ },
2340
+ parser(value) {
2341
+ return logic.parseDate(value);
2342
+ },
2343
+ validationConfig: {
2344
+ date: {}
2345
+ },
2346
+ attributes: () => [{
2347
+ name: "type",
2348
+ value: "text"
2349
+ }]
2350
+ },
2336
2351
  "text:email": {
2337
2352
  formatter(value) {
2338
2353
  return value;
@@ -2758,7 +2773,7 @@ const _sfc_main$8 = /* @__PURE__ */ vue$1.defineComponent({
2758
2773
  const $t = vue.useTranslate();
2759
2774
  const multiSelectColumn = {
2760
2775
  type: "checkbox",
2761
- id: Symbol("multi-select"),
2776
+ id: /* @__PURE__ */ Symbol("multi-select"),
2762
2777
  header: vue$1.ref("selectable"),
2763
2778
  description: vue$1.ref(null),
2764
2779
  sortable: null,
@@ -2779,7 +2794,7 @@ const _sfc_main$8 = /* @__PURE__ */ vue$1.defineComponent({
2779
2794
  };
2780
2795
  const singleSelectColumn = {
2781
2796
  type: "radio",
2782
- id: Symbol("single-select"),
2797
+ id: /* @__PURE__ */ Symbol("single-select"),
2783
2798
  header: vue$1.ref("Välj en rad"),
2784
2799
  description: vue$1.ref(null),
2785
2800
  sortable: null,
@@ -2820,7 +2835,7 @@ function getBodyRowCount(rows, childKey) {
2820
2835
  }, childKey);
2821
2836
  return count;
2822
2837
  }
2823
- const stopEditKey = Symbol();
2838
+ const stopEditKey = /* @__PURE__ */ Symbol();
2824
2839
  function useStartStopEdit() {
2825
2840
  const stopEdit2 = vue$1.inject(stopEditKey, () => Promise.resolve());
2826
2841
  return {
@@ -3687,7 +3702,7 @@ function normalizeTableColumn(column) {
3687
3702
  if ("render" in column) {
3688
3703
  return {
3689
3704
  type: void 0,
3690
- id: Symbol(),
3705
+ id: /* @__PURE__ */ Symbol(),
3691
3706
  header: vue$1.toRef(column.header),
3692
3707
  description,
3693
3708
  size,
@@ -3699,7 +3714,7 @@ function normalizeTableColumn(column) {
3699
3714
  case "checkbox":
3700
3715
  return {
3701
3716
  type: "checkbox",
3702
- id: Symbol(),
3717
+ id: /* @__PURE__ */ Symbol(),
3703
3718
  header: vue$1.toRef(column.header),
3704
3719
  description,
3705
3720
  size,
@@ -3716,7 +3731,7 @@ function normalizeTableColumn(column) {
3716
3731
  case "radio":
3717
3732
  return {
3718
3733
  type: "radio",
3719
- id: Symbol(),
3734
+ id: /* @__PURE__ */ Symbol(),
3720
3735
  header: vue$1.toRef(column.header),
3721
3736
  description,
3722
3737
  size,
@@ -3737,7 +3752,7 @@ function normalizeTableColumn(column) {
3737
3752
  const decimals = type === "text:currency" ? 0 : column.decimals;
3738
3753
  return {
3739
3754
  type,
3740
- id: Symbol(),
3755
+ id: /* @__PURE__ */ Symbol(),
3741
3756
  header: vue$1.toRef(column.header),
3742
3757
  description,
3743
3758
  size,
@@ -3760,6 +3775,7 @@ function normalizeTableColumn(column) {
3760
3775
  case "text:bankAccountNumber":
3761
3776
  case "text:bankgiro":
3762
3777
  case "text:clearingNumber":
3778
+ case "text:date":
3763
3779
  case "text:email":
3764
3780
  case "text:organisationsnummer":
3765
3781
  case "text:personnummer":
@@ -3773,7 +3789,7 @@ function normalizeTableColumn(column) {
3773
3789
  const formatter = (_column$formatter2 = column.formatter) !== null && _column$formatter2 !== void 0 ? _column$formatter2 : config.formatter;
3774
3790
  return {
3775
3791
  type,
3776
- id: Symbol(),
3792
+ id: /* @__PURE__ */ Symbol(),
3777
3793
  header: vue$1.toRef(column.header),
3778
3794
  description,
3779
3795
  size,
@@ -3794,7 +3810,7 @@ function normalizeTableColumn(column) {
3794
3810
  case "rowheader":
3795
3811
  return {
3796
3812
  type: "rowheader",
3797
- id: Symbol(),
3813
+ id: /* @__PURE__ */ Symbol(),
3798
3814
  header: vue$1.toRef(column.header),
3799
3815
  description,
3800
3816
  size,
@@ -3805,7 +3821,7 @@ function normalizeTableColumn(column) {
3805
3821
  case "anchor":
3806
3822
  return {
3807
3823
  type: "anchor",
3808
- id: Symbol(),
3824
+ id: /* @__PURE__ */ Symbol(),
3809
3825
  header: vue$1.toRef(column.header),
3810
3826
  description,
3811
3827
  size,
@@ -3821,7 +3837,7 @@ function normalizeTableColumn(column) {
3821
3837
  case "button":
3822
3838
  return {
3823
3839
  type: "button",
3824
- id: Symbol(),
3840
+ id: /* @__PURE__ */ Symbol(),
3825
3841
  header: vue$1.toRef(column.header),
3826
3842
  description,
3827
3843
  size,
@@ -3838,7 +3854,7 @@ function normalizeTableColumn(column) {
3838
3854
  case "select":
3839
3855
  return {
3840
3856
  type: "select",
3841
- id: Symbol(),
3857
+ id: /* @__PURE__ */ Symbol(),
3842
3858
  header: vue$1.toRef(column.header),
3843
3859
  description,
3844
3860
  size,
@@ -3856,7 +3872,7 @@ function normalizeTableColumn(column) {
3856
3872
  case void 0:
3857
3873
  return {
3858
3874
  type: "text",
3859
- id: Symbol(),
3875
+ id: /* @__PURE__ */ Symbol(),
3860
3876
  header: vue$1.toRef(column.header),
3861
3877
  description,
3862
3878
  size,
@@ -4122,26 +4138,30 @@ function useTabstop(tableRef, metaRows) {
4122
4138
  }
4123
4139
  const _hoisted_1$1 = ["role", "aria-rowcount"];
4124
4140
  const _hoisted_2$1 = {
4141
+ key: 0,
4142
+ "data-test": "caption"
4143
+ };
4144
+ const _hoisted_3$1 = {
4125
4145
  class: "table-ng__row",
4126
4146
  "aria-rowindex": "1"
4127
4147
  };
4128
- const _hoisted_3$1 = {
4148
+ const _hoisted_4$1 = {
4129
4149
  key: 0,
4130
4150
  scope: "col",
4131
4151
  tabindex: "-1",
4132
4152
  class: "table-ng__column"
4133
4153
  };
4134
- const _hoisted_4$1 = {
4154
+ const _hoisted_5$1 = {
4135
4155
  key: 0,
4136
4156
  class: "table-ng__row--empty"
4137
4157
  };
4138
- const _hoisted_5$1 = ["colspan"];
4139
- const _hoisted_6$1 = ["aria-level", "aria-rowindex", "aria-setsize", "aria-posinset", "aria-selected"];
4140
- const _hoisted_7$1 = {
4141
- key: 0
4158
+ const _hoisted_6$1 = ["colspan"];
4159
+ const _hoisted_7$1 = ["aria-level", "aria-rowindex", "aria-setsize", "aria-posinset", "aria-selected"];
4160
+ const _hoisted_8 = {
4161
+ key: 1
4142
4162
  };
4143
- const _hoisted_8 = ["aria-rowindex"];
4144
- const _hoisted_9 = ["colspan"];
4163
+ const _hoisted_9 = ["aria-rowindex"];
4164
+ const _hoisted_10 = ["colspan"];
4145
4165
  const _sfc_main$2 = /* @__PURE__ */ vue$1.defineComponent({
4146
4166
  __name: "FTable",
4147
4167
  props: /* @__PURE__ */ vue$1.mergeModels({
@@ -4179,6 +4199,11 @@ const _sfc_main$2 = /* @__PURE__ */ vue$1.defineComponent({
4179
4199
  const metaRows = vue$1.computed(() => getMetaRows(keyedRows.value, expandedKeys.value, __props.expandableAttribute));
4180
4200
  const isTreegrid = vue$1.computed(() => Boolean(__props.expandableAttribute));
4181
4201
  const role = vue$1.computed(() => isTreegrid.value ? "treegrid" : "grid");
4202
+ const hasCaption = vue$1.computed(() => {
4203
+ return hasSlot("caption", {}, {
4204
+ stripClasses: []
4205
+ });
4206
+ });
4182
4207
  const isEmpty = vue$1.computed(() => {
4183
4208
  return metaRows.value.length === 0;
4184
4209
  });
@@ -4351,7 +4376,7 @@ const _sfc_main$2 = /* @__PURE__ */ vue$1.defineComponent({
4351
4376
  onFocusout: onTableFocusout,
4352
4377
  onClick,
4353
4378
  onKeydown
4354
- }, [vue$1.createElementVNode("thead", null, [vue$1.createElementVNode("tr", _hoisted_2$1, [isTreegrid.value ? (vue$1.openBlock(), vue$1.createElementBlock("th", _hoisted_3$1)) : vue$1.createCommentVNode("", true), _cache[0] || (_cache[0] = vue$1.createTextVNode()), __props.selectable ? (vue$1.openBlock(), vue$1.createBlock(_sfc_main$b, {
4379
+ }, [hasCaption.value ? (vue$1.openBlock(), vue$1.createElementBlock("caption", _hoisted_2$1, [vue$1.renderSlot(_ctx.$slots, "caption")])) : vue$1.createCommentVNode("", true), _cache[5] || (_cache[5] = vue$1.createTextVNode()), vue$1.createElementVNode("thead", null, [vue$1.createElementVNode("tr", _hoisted_3$1, [isTreegrid.value ? (vue$1.openBlock(), vue$1.createElementBlock("th", _hoisted_4$1)) : vue$1.createCommentVNode("", true), _cache[0] || (_cache[0] = vue$1.createTextVNode()), __props.selectable ? (vue$1.openBlock(), vue$1.createBlock(_sfc_main$b, {
4355
4380
  key: 1,
4356
4381
  ref: bindCellApiRef,
4357
4382
  state: vue$1.unref(selectableHeaderState)(),
@@ -4366,10 +4391,10 @@ const _sfc_main$2 = /* @__PURE__ */ vue$1.defineComponent({
4366
4391
  scope: "col",
4367
4392
  onToggleSortOrder
4368
4393
  }, null, 8, ["column", "sort-enabled", "sort-order"]);
4369
- }), 128))])]), _cache[5] || (_cache[5] = vue$1.createTextVNode()), vue$1.createElementVNode("tbody", null, [isEmpty.value ? (vue$1.openBlock(), vue$1.createElementBlock("tr", _hoisted_4$1, [vue$1.createElementVNode("td", {
4394
+ }), 128))])]), _cache[6] || (_cache[6] = vue$1.createTextVNode()), vue$1.createElementVNode("tbody", null, [isEmpty.value ? (vue$1.openBlock(), vue$1.createElementBlock("tr", _hoisted_5$1, [vue$1.createElementVNode("td", {
4370
4395
  colspan: columnCount.value,
4371
4396
  class: "table-ng__cell"
4372
- }, [vue$1.renderSlot(_ctx.$slots, "empty", {}, () => [_cache[2] || (_cache[2] = vue$1.createTextVNode(" Tabellen är tom ", -1))])], 8, _hoisted_5$1)])) : (vue$1.openBlock(true), vue$1.createElementBlock(vue$1.Fragment, {
4397
+ }, [vue$1.renderSlot(_ctx.$slots, "empty", {}, () => [_cache[2] || (_cache[2] = vue$1.createTextVNode(" Tabellen är tom ", -1))])], 8, _hoisted_6$1)])) : (vue$1.openBlock(true), vue$1.createElementBlock(vue$1.Fragment, {
4373
4398
  key: 1
4374
4399
  }, vue$1.renderList(metaRows.value, ({
4375
4400
  key,
@@ -4431,14 +4456,14 @@ const _sfc_main$2 = /* @__PURE__ */ vue$1.defineComponent({
4431
4456
  key: 1,
4432
4457
  row
4433
4458
  }, null, 8, ["row"])) : vue$1.createCommentVNode("", true)], 64);
4434
- }), 128))], 64))], 8, _hoisted_6$1);
4435
- }), 128))]), _cache[6] || (_cache[6] = vue$1.createTextVNode()), hasFooter.value ? (vue$1.openBlock(), vue$1.createElementBlock("tfoot", _hoisted_7$1, [vue$1.createElementVNode("tr", {
4459
+ }), 128))], 64))], 8, _hoisted_7$1);
4460
+ }), 128))]), _cache[7] || (_cache[7] = vue$1.createTextVNode()), hasFooter.value ? (vue$1.openBlock(), vue$1.createElementBlock("tfoot", _hoisted_8, [vue$1.createElementVNode("tr", {
4436
4461
  class: "table-ng__row",
4437
4462
  "aria-rowindex": ariaRowcount.value
4438
4463
  }, [vue$1.createElementVNode("td", {
4439
4464
  colspan: columnCount.value,
4440
4465
  class: "table-ng__cell--custom"
4441
- }, [vue$1.renderSlot(_ctx.$slots, "footer")], 8, _hoisted_9)], 8, _hoisted_8)])) : vue$1.createCommentVNode("", true)], 42, _hoisted_1$1);
4466
+ }, [vue$1.renderSlot(_ctx.$slots, "footer")], 8, _hoisted_10)], 8, _hoisted_9)])) : vue$1.createCommentVNode("", true)], 42, _hoisted_1$1);
4442
4467
  };
4443
4468
  }
4444
4469
  });