{"version":3,"file":"BTable-C__GSYX2.mjs","names":[],"sources":["../src/types/TableTypes.ts","../src/components/BTable/BTbody.vue","../src/components/BTable/BTbody.vue","../src/components/BTable/BTd.vue","../src/components/BTable/BTd.vue","../src/components/BTable/BTfoot.vue","../src/components/BTable/BTfoot.vue","../src/components/BTable/BTh.vue","../src/components/BTable/BTh.vue","../src/components/BTable/BThead.vue","../src/components/BTable/BThead.vue","../src/components/BTable/BTr.vue","../src/components/BTable/BTr.vue","../src/utils/tableUtils.ts","../src/utils/filterEvent.ts","../src/composables/useTableLiteHelpers.ts","../src/components/BTable/BTableLite.vue","../src/components/BTable/BTableLite.vue","../src/composables/useTableHelpers.ts","../src/components/BTable/BTable.vue","../src/components/BTable/BTable.vue"],"sourcesContent":["import type {ComputedRef, StyleValue} from 'vue'\nimport type {ColorVariant} from './ColorTypes'\nimport type {MaybePromise} from './MaybePromise'\nimport type {LiteralUnion} from './LiteralUnion'\nimport type {AttrsValue, ClassValue} from './AnyValuedAttributes'\n\nexport type TableHeadClickedEventObject<Item, E extends UIEvent = Readonly<MouseEvent>> = {\n  key: string\n  field: TableField<Item>\n  event: E\n  isFooter: boolean\n}\nexport type TableRowEventObject<T, E extends UIEvent = Readonly<MouseEvent>> = {\n  item: T\n  index: number\n  event: E\n}\nexport type TableRowEvent<T, E extends UIEvent = Readonly<MouseEvent>> = [\n  object: TableRowEventObject<T, E>,\n]\n\nexport type TableItem<T = Record<string, unknown>> = T & {\n  _rowVariant?: ColorVariant | null\n  _cellVariants?: Partial<Record<keyof T, ColorVariant>>\n  _showDetails?: boolean\n}\n\nexport const isTableItem = (value: unknown): value is TableItem =>\n  typeof value === 'object' && value !== null\n\n/**\n * `undefined` means it's not sorting this column. It is set to undefined rather than removed from the array because\n * we don't want to make updates that remove the comparer function from the value.\n */\nexport type BTableSortByOrder = 'desc' | 'asc' | undefined\n\nexport type BTableSelectMode = 'single' | 'multi' | 'range'\n\n/**\n * Initial sort direction for table fields. Includes 'last' option to maintain the direction of the previously sorted column.\n */\nexport type BTableInitialSortDirection = 'desc' | 'asc' | 'last'\n\nexport type BTableSortByComparerFunction<T> = (a: T, b: T, key: string) => number\n\nexport type BTableFilterFunction<T> = (item: Readonly<T>, filter: string | undefined) => boolean\n\nexport type BTableSortBy = {\n  order: BTableSortByOrder\n  key: string\n}\n\nexport type BTableProviderContext = {\n  sortBy: readonly BTableSortBy[] | undefined\n  filter: string | undefined\n  currentPage: number\n  perPage: number\n  signal: AbortSignal\n}\n\nexport type BTableProvider<T> = (\n  context: Readonly<BTableProviderContext>\n) => MaybePromise<T[] | undefined>\n\nexport type TableFieldFormatterObject<T> = {value: unknown; key: string; item: T}\n\nexport type TableFieldFormatter<T> = (obj: TableFieldFormatterObject<T>) => string\n\nexport type TableRowType = 'row' | 'row-expansion' | 'row-top' | 'row-bottom' | 'table-busy'\nexport type TableRowThead = 'top' | 'bottom'\n\nexport type TableStrictClassValue = string | readonly unknown[] | Record<string, boolean>\n\n// eslint-disable-next-line @typescript-eslint/no-explicit-any\nexport type TableField<T = any> = {\n  class?: ClassValue\n  filterByFormatted?: boolean | TableFieldFormatter<T>\n  formatter?: TableFieldFormatter<T>\n  isRowHeader?: boolean\n  /**\n   * Unique identifier for the column.\n   *\n   * Used for:\n   * - generating slot names (e.g., `head(<key>)`, `cell(<key>)`)\n   * - tracking column state (sorting, visibility, focus, etc.)\n   *\n   * This value must be stable and unique across all columns.\n   * It is **not** used directly to read data from items or as the label.\n   */\n  key: string\n  /**\n   * Text displayed in the table header for this column.\n   *\n   * If omitted, a default label may be generated from the column `key`.\n   * This value is purely presentational and does not affect column identity or data access.\n   * For rich headers, use the `head(<key>)` slot instead.\n   */\n  label?: string\n  /**\n   * How to read the value from each row item.\n   *\n   * - Can be a string representing a root-level property name (e.g., `'email'` for `const users = [{email: 'abc'}]`).\n   * - Can be a function that receives the row item and returns the value (recommended for type safety and nested or computed values).\n   * - If omitted, defaults to using the column `key`.\n   */\n  accessor?: string | ((item: T) => unknown)\n  headerTitle?: string\n  headerAbbr?: string\n  sortable?: boolean\n  sortDirection?: string\n  sortByFormatted?: boolean | TableFieldFormatter<T>\n  sortCompare?: BTableSortByComparerFunction<T>\n  stickyColumn?: boolean\n  scope?: TableThScope\n  initialSortDirection?: BTableInitialSortDirection\n  tdClass?:\n    | TableStrictClassValue\n    | ((value: unknown, key: string, item: T) => TableStrictClassValue)\n  thClass?: ClassValue\n  thStyle?: StyleValue\n  tdAttr?: AttrsValue | ((obj: {value: unknown; key: string; item: T}) => AttrsValue)\n  thAttr?:\n    | AttrsValue\n    | ((obj: {value: unknown; key: string; item: T | null; type: TableRowThead}) => AttrsValue)\n  variant?: ColorVariant | null\n}\n\nexport type TableFieldRaw<T = unknown> = T extends object\n  ? LiteralUnion<keyof T> | TableField<T>\n  : string | TableField\n\nexport const isTableField = (value: unknown): value is TableField =>\n  typeof value === 'object' && value !== null && 'key' in value\n\nexport const isTableFieldRaw = (value: unknown): value is TableFieldRaw =>\n  typeof value === 'string' || isTableField(value)\n\nexport type NoProviderTypes = 'paging' | 'sorting' | 'filtering'\n\nexport type TableThScope = 'row' | 'col' | 'rowgroup' | 'colgroup'\n\nexport type ItemTrackerReturn<Item> = {\n  /**\n   * Gets the item from the items prop, using the primary key if provided\n   *\n   * @param item\n   * @returns\n   */\n  get: (item: Item) => unknown\n  /**\n   * Gets the item from the internal \"computed items\" representation when using the primary key.\n   * This is used to get the object reference of the item from the items when using the primary key, since the items are stored as the primary key value rather than the item itself.\n   * If no `primaryKey` is used, it will return undefined\n   *\n   * @param primaryKey\n   */\n  getFromPrimaryKey: (primaryKey: unknown) => unknown\n  /**\n   * A computed array of items resolved from their primary key values\n   * against the table’s internal computed dataset.\n   *\n   * When a `primaryKey` is configured, selection and tracking mechanisms\n   * may store only the primary key values. This property provides the\n   * corresponding full item objects by resolving those keys against the\n   * current internal items representation.\n   *\n   * If no `primaryKey` is used, this will mirror the selectedItems array.\n   *\n   * Note:\n   * - Only items currently present in the internal computed dataset\n   *   can be resolved. Keys that do not match an available item\n   *   will be ignored.\n   * - This property is readonly and represents a derived projection,\n   *   not a source of truth.\n   */\n  resolvedItems: ComputedRef<readonly unknown[]>\n  /**\n   * Adds an item to the selected items\n   *\n   * @param item\n   * @returns\n   */\n  add: (item: Item) => void\n  /**\n   * Sets the selected items to the provided items\n   *\n   * @param items\n   * @returns\n   */\n  set: (items: readonly Item[]) => void\n  /**\n   * Sets the selected items to all items\n   *\n   * @returns\n   */\n  setAll: () => void\n  /**\n   * Deletes an item from the selected items\n   *\n   * @param item\n   * @returns\n   */\n  remove: (item: Item) => void\n  /**\n   * Clears all selected items\n   *\n   * @returns\n   */\n  clear: () => void\n  /**\n   * Checks if an item is in the selected items\n   *\n   * @param item\n   * @returns\n   */\n  has: (item: Item) => boolean\n  /**\n   * Whether the tracker is activated (has any selected items)\n   */\n  isActivated: ComputedRef<boolean>\n}\nexport type TableDetailsReturn<Item> = ItemTrackerReturn<Item> & {\n  /**\n   * Toggles the details for the given item\n   *\n   * @param item\n   * @returns\n   */\n  toggle: (item: Item) => void\n}\nexport type TableSelectedReturn<Item> = ItemTrackerReturn<Item> & {\n  handleRowSelection: (obj: {\n    item: Item\n    index: number\n    shiftClicked?: boolean\n    ctrlClicked?: boolean\n    metaClicked?: boolean\n  }) => void\n}\n\nexport type MaybeGetter<Obj extends object, Key extends PropertyKey, Output = unknown> =\n  | Key\n  | ((obj: Obj) => Output)\n\n// export type MaybeGetter<Obj, Key extends PropertyKey, Output = unknown> = Obj extends object\n// ? Key | ((obj: Obj) => Output)\n// : Key\n\nexport type TablePrimaryKey<Item> = string | ((item: Item) => string)\n// export type TablePrimaryKey<Item> = Item extends object\n// ? MaybeGetter<Item, keyof Item & string, string>\n// : MaybeGetter<Item, string>\n","<template>\n  <tbody :class=\"computedClasses\">\n    <slot />\n  </tbody>\n</template>\n\n<script setup lang=\"ts\">\nimport type {BTbodySlots} from '../../types'\nimport {useDefaults} from '../../composables/useDefaults'\nimport type {BTbodyProps} from '../../types/ComponentProps'\nimport {computed} from 'vue'\n\nconst _props = withDefaults(defineProps<BTbodyProps>(), {\n  variant: null,\n})\nconst props = useDefaults(_props, 'BTbody')\ndefineSlots<BTbodySlots>()\n\nconst computedClasses = computed(() => ({\n  [`thead-${props.variant}`]: props.variant !== null,\n}))\n</script>\n","<template>\n  <tbody :class=\"computedClasses\">\n    <slot />\n  </tbody>\n</template>\n\n<script setup lang=\"ts\">\nimport type {BTbodySlots} from '../../types'\nimport {useDefaults} from '../../composables/useDefaults'\nimport type {BTbodyProps} from '../../types/ComponentProps'\nimport {computed} from 'vue'\n\nconst _props = withDefaults(defineProps<BTbodyProps>(), {\n  variant: null,\n})\nconst props = useDefaults(_props, 'BTbody')\ndefineSlots<BTbodySlots>()\n\nconst computedClasses = computed(() => ({\n  [`thead-${props.variant}`]: props.variant !== null,\n}))\n</script>\n","<template>\n  <td\n    :class=\"computedClasses\"\n    :colspan=\"props.colspan\"\n    :rowspan=\"props.rowspan\"\n    :data-label=\"props.stackedHeading\"\n  >\n    <div v-if=\"props.stackedHeading\">\n      <slot />\n    </div>\n    <slot v-else />\n  </td>\n</template>\n\n<script setup lang=\"ts\">\nimport type {BTdSlots} from '../../types'\nimport {useDefaults} from '../../composables/useDefaults'\nimport type {BTdProps} from '../../types/ComponentProps'\nimport {computed} from 'vue'\n\nconst _props = withDefaults(defineProps<BTdProps>(), {\n  colspan: undefined,\n  rowspan: undefined,\n  stackedHeading: undefined,\n  stickyColumn: false,\n  variant: null,\n})\nconst props = useDefaults(_props, 'BTd')\ndefineSlots<BTdSlots>()\n\nconst computedClasses = computed(() => ({\n  [`table-${props.variant}`]: props.variant !== null,\n  'b-table-sticky-column': props.stickyColumn,\n  'table-b-table-default': props.stickyColumn && props.variant === null,\n}))\n</script>\n","<template>\n  <td\n    :class=\"computedClasses\"\n    :colspan=\"props.colspan\"\n    :rowspan=\"props.rowspan\"\n    :data-label=\"props.stackedHeading\"\n  >\n    <div v-if=\"props.stackedHeading\">\n      <slot />\n    </div>\n    <slot v-else />\n  </td>\n</template>\n\n<script setup lang=\"ts\">\nimport type {BTdSlots} from '../../types'\nimport {useDefaults} from '../../composables/useDefaults'\nimport type {BTdProps} from '../../types/ComponentProps'\nimport {computed} from 'vue'\n\nconst _props = withDefaults(defineProps<BTdProps>(), {\n  colspan: undefined,\n  rowspan: undefined,\n  stackedHeading: undefined,\n  stickyColumn: false,\n  variant: null,\n})\nconst props = useDefaults(_props, 'BTd')\ndefineSlots<BTdSlots>()\n\nconst computedClasses = computed(() => ({\n  [`table-${props.variant}`]: props.variant !== null,\n  'b-table-sticky-column': props.stickyColumn,\n  'table-b-table-default': props.stickyColumn && props.variant === null,\n}))\n</script>\n","<template>\n  <tfoot :class=\"computedClasses\">\n    <slot />\n  </tfoot>\n</template>\n\n<script setup lang=\"ts\">\nimport {useDefaults} from '../../composables/useDefaults'\nimport type {BTfootProps} from '../../types/ComponentProps'\nimport {computed} from 'vue'\nimport type {BTfootSlots} from '../../types/ComponentSlots'\n\nconst _props = withDefaults(defineProps<BTfootProps>(), {\n  variant: null,\n})\nconst props = useDefaults(_props, 'BTfoot')\ndefineSlots<BTfootSlots>()\n\nconst computedClasses = computed(() => ({\n  [`table-${props.variant}`]: props.variant !== null,\n}))\n</script>\n","<template>\n  <tfoot :class=\"computedClasses\">\n    <slot />\n  </tfoot>\n</template>\n\n<script setup lang=\"ts\">\nimport {useDefaults} from '../../composables/useDefaults'\nimport type {BTfootProps} from '../../types/ComponentProps'\nimport {computed} from 'vue'\nimport type {BTfootSlots} from '../../types/ComponentSlots'\n\nconst _props = withDefaults(defineProps<BTfootProps>(), {\n  variant: null,\n})\nconst props = useDefaults(_props, 'BTfoot')\ndefineSlots<BTfootSlots>()\n\nconst computedClasses = computed(() => ({\n  [`table-${props.variant}`]: props.variant !== null,\n}))\n</script>\n","<template>\n  <th\n    :scope=\"localScope\"\n    :class=\"computedClasses\"\n    :colspan=\"props.colspan\"\n    :rowspan=\"props.rowspan\"\n    :data-label=\"props.stackedHeading\"\n  >\n    <div v-if=\"props.stackedHeading !== undefined\">\n      <slot />\n    </div>\n    <slot v-else />\n  </th>\n</template>\n\n<script setup lang=\"ts\">\nimport {useDefaults} from '../../composables/useDefaults'\nimport type {BThProps} from '../../types/ComponentProps'\nimport {computed} from 'vue'\nimport type {BThSlots} from '../../types/ComponentSlots'\n\nconst _props = withDefaults(defineProps<BThProps>(), {\n  colspan: undefined,\n  rowspan: undefined,\n  stackedHeading: undefined,\n  stickyColumn: false,\n  variant: null,\n  scope: undefined,\n})\nconst props = useDefaults(_props, 'BTh')\ndefineSlots<BThSlots>()\n\nconst computedClasses = computed(() => ({\n  [`table-${props.variant}`]: props.variant !== null,\n  'b-table-sticky-column': props.stickyColumn,\n  'table-b-table-default': props.stickyColumn && props.variant === null,\n}))\n\nconst localScope = computed(() =>\n  props.scope ? props.scope : props.colspan ? 'colgroup' : props.rowspan ? 'rowgroup' : 'col'\n)\n</script>\n","<template>\n  <th\n    :scope=\"localScope\"\n    :class=\"computedClasses\"\n    :colspan=\"props.colspan\"\n    :rowspan=\"props.rowspan\"\n    :data-label=\"props.stackedHeading\"\n  >\n    <div v-if=\"props.stackedHeading !== undefined\">\n      <slot />\n    </div>\n    <slot v-else />\n  </th>\n</template>\n\n<script setup lang=\"ts\">\nimport {useDefaults} from '../../composables/useDefaults'\nimport type {BThProps} from '../../types/ComponentProps'\nimport {computed} from 'vue'\nimport type {BThSlots} from '../../types/ComponentSlots'\n\nconst _props = withDefaults(defineProps<BThProps>(), {\n  colspan: undefined,\n  rowspan: undefined,\n  stackedHeading: undefined,\n  stickyColumn: false,\n  variant: null,\n  scope: undefined,\n})\nconst props = useDefaults(_props, 'BTh')\ndefineSlots<BThSlots>()\n\nconst computedClasses = computed(() => ({\n  [`table-${props.variant}`]: props.variant !== null,\n  'b-table-sticky-column': props.stickyColumn,\n  'table-b-table-default': props.stickyColumn && props.variant === null,\n}))\n\nconst localScope = computed(() =>\n  props.scope ? props.scope : props.colspan ? 'colgroup' : props.rowspan ? 'rowgroup' : 'col'\n)\n</script>\n","<template>\n  <thead :class=\"computedClasses\">\n    <slot />\n  </thead>\n</template>\n\n<script setup lang=\"ts\">\nimport type {BTheadSlots} from '../../types'\nimport {useDefaults} from '../../composables/useDefaults'\nimport type {BTheadProps} from '../../types/ComponentProps'\nimport {computed} from 'vue'\n\nconst _props = withDefaults(defineProps<BTheadProps>(), {\n  variant: null,\n})\nconst props = useDefaults(_props, 'BThead')\ndefineSlots<BTheadSlots>()\n\nconst computedClasses = computed(() => ({\n  [`table-${props.variant}`]: props.variant !== null,\n}))\n</script>\n","<template>\n  <thead :class=\"computedClasses\">\n    <slot />\n  </thead>\n</template>\n\n<script setup lang=\"ts\">\nimport type {BTheadSlots} from '../../types'\nimport {useDefaults} from '../../composables/useDefaults'\nimport type {BTheadProps} from '../../types/ComponentProps'\nimport {computed} from 'vue'\n\nconst _props = withDefaults(defineProps<BTheadProps>(), {\n  variant: null,\n})\nconst props = useDefaults(_props, 'BThead')\ndefineSlots<BTheadSlots>()\n\nconst computedClasses = computed(() => ({\n  [`table-${props.variant}`]: props.variant !== null,\n}))\n</script>\n","<template>\n  <tr :class=\"computedClasses\">\n    <slot />\n  </tr>\n</template>\n\n<script setup lang=\"ts\">\nimport {useDefaults} from '../../composables/useDefaults'\nimport type {BTrProps} from '../../types/ComponentProps'\nimport {computed} from 'vue'\nimport type {BTrSlots} from '../../types/ComponentSlots'\n\nconst _props = withDefaults(defineProps<BTrProps>(), {\n  variant: null,\n})\nconst props = useDefaults(_props, 'BTr')\ndefineSlots<BTrSlots>()\n\nconst computedClasses = computed(() => ({\n  [`table-${props.variant}`]: props.variant !== null,\n}))\n</script>\n","<template>\n  <tr :class=\"computedClasses\">\n    <slot />\n  </tr>\n</template>\n\n<script setup lang=\"ts\">\nimport {useDefaults} from '../../composables/useDefaults'\nimport type {BTrProps} from '../../types/ComponentProps'\nimport {computed} from 'vue'\nimport type {BTrSlots} from '../../types/ComponentSlots'\n\nconst _props = withDefaults(defineProps<BTrProps>(), {\n  variant: null,\n})\nconst props = useDefaults(_props, 'BTr')\ndefineSlots<BTrSlots>()\n\nconst computedClasses = computed(() => ({\n  [`table-${props.variant}`]: props.variant !== null,\n}))\n</script>\n","import {titleCase} from './stringUtils'\nimport {type TableFieldRaw} from '../types/TableTypes'\nimport type {Breakpoint, BTableLiteProps, BTableSimpleProps, TableField} from '../types'\n\nexport const getTableFieldHeadLabel = (field: Readonly<TableFieldRaw<unknown>>) =>\n  typeof field === 'string'\n    ? titleCase(field)\n    : field.label !== undefined\n      ? field.label\n      : titleCase(field.key)\n\nexport const getWithGetter = <Obj extends object>(\n  item: Obj,\n  key: string | ((item: Obj) => unknown)\n): unknown => {\n  if (typeof key === 'function') {\n    return key(item)\n  }\n  return item[key as unknown as keyof Obj]\n}\n\nexport const getByFieldKey = (item: unknown, field: TableField) =>\n  typeof item === 'object' && item !== null\n    ? getWithGetter(item, field.accessor ?? field.key)\n    : item\n\nexport const formatItem = (item: unknown, field: TableField) => {\n  const val = getByFieldKey(item, field)\n\n  return typeof field.formatter === 'function'\n    ? field.formatter({value: val, key: field.key, item})\n    : val\n}\n\nexport const bTableSimpleProps = Object.freeze(\n  Object.keys({\n    bordered: 0,\n    borderless: 0,\n    borderVariant: 0,\n    captionTop: 0,\n    dark: 0,\n    fixed: 0,\n    hover: 0,\n    id: 0,\n    noBorderCollapse: 0,\n    outlined: 0,\n    responsive: 0,\n    small: 0,\n    stacked: 0,\n    stickyHeader: 0,\n    striped: 0,\n    stripedColumns: 0,\n    variant: 0,\n    tableAttrs: 0,\n    tableClass: 0,\n  } satisfies Record<keyof BTableSimpleProps, 0>)\n) as readonly (keyof BTableSimpleProps)[]\n\nexport const bTableLiteProps = Object.freeze(\n  Object.keys({\n    align: 0,\n    caption: 0,\n    detailsTdClass: 0,\n    fieldColumnClass: 0,\n    fields: 0,\n    footClone: 0,\n    footRowVariant: 0,\n    footVariant: 0,\n    headRowVariant: 0,\n    headVariant: 0,\n    items: 0,\n    labelStacked: 0,\n    modelValue: 0,\n    primaryKey: 0,\n    tbodyClass: 0,\n    tbodyTrAttrs: 0,\n    tbodyTrClass: 0,\n    tfootClass: 0,\n    expandedItems: 0,\n    tfootTrClass: 0,\n    theadClass: 0,\n    theadTrClass: 0,\n  } satisfies Record<keyof Omit<BTableLiteProps<unknown>, keyof BTableSimpleProps>, 0>)\n) as readonly (keyof Omit<BTableLiteProps<unknown>, keyof BTableSimpleProps>)[]\n\nexport type StackedProps = {\n  stacked: boolean | Breakpoint | undefined\n  labelStacked: boolean | undefined\n}\n\nexport const getDataLabelAttr = (props: StackedProps, label: string) =>\n  props.stacked && props.labelStacked !== true ? {'data-label': label} : undefined\n","import {getSafeDocument} from './dom'\n\nconst TABLE_TAG_NAMES = ['TD', 'TH', 'TR']\n\n// Filter CSS selector for click/dblclick/etc. events\n// If any of these selectors match the clicked element, we ignore the event\nconst eventFilter = [\n  'a',\n  'a *', // Include content inside links\n  'button',\n  'button *', // Include content inside buttons\n  'input:not(.disabled):not([disabled])',\n  'select:not(.disabled):not([disabled])',\n  'textarea:not(.disabled):not([disabled])',\n  '[role=\"link\"]',\n  '[role=\"link\"] *',\n  '[role=\"button\"]',\n  '[role=\"button\"] *',\n  '[tabindex]:not(.disabled):not([disabled])',\n].join(',')\n\n// Returns `true` if we should ignore the click/double-click/keypress event\n// Avoids having the user need to use `@click.stop` on the form control\nexport const filterEvent = (event: Readonly<Event>) => {\n  // Exit early when we don't have a target element\n  if (!event || !event.target) {\n    return false\n  }\n  const el = event.target as HTMLElement\n  // Exit early when element is disabled or a table element\n  if (('disabled' in el && el.disabled) || TABLE_TAG_NAMES.indexOf(el.tagName) !== -1) {\n    return false\n  }\n  // Ignore the click when it was inside a dropdown menu\n  if (el.closest('.dropdown-menu')) return true\n\n  const label = el.tagName === 'LABEL' ? el : el.closest('label')\n  // If the label's form control is not disabled then we don't propagate event\n  // Modern browsers have `label.control` that references the associated input, but IE 11\n  // does not have this property on the label element, so we resort to DOM lookups\n  if (label) {\n    const doc = getSafeDocument()\n    const labelFor = label.getAttribute('for')\n    const input = labelFor\n      ? doc?.getElementById(labelFor)\n      : label.querySelector('input, select, textarea')\n    if (input && !(input as HTMLInputElement).disabled) {\n      return true\n    }\n  }\n  // Otherwise check if the event target matches one of the selectors in the\n  // event filter (i.e. anchors, non disabled inputs, etc.)\n  // Return `true` if we should ignore the event\n  return el.matches(eventFilter)\n}\n","import {\n  computed,\n  inject,\n  type MaybeRef,\n  type MaybeRefOrGetter,\n  readonly,\n  type Ref,\n  toRef,\n  toValue,\n  watch,\n} from 'vue'\nimport {\n  isTableField,\n  isTableItem,\n  type ItemTrackerReturn,\n  type TableDetailsReturn,\n  type TableField,\n  type TableFieldRaw,\n  type TableHeadClickedEventObject,\n  type TablePrimaryKey,\n  type TableRowEventObject,\n} from '../types/TableTypes'\nimport {getDataLabelAttr, getWithGetter, type StackedProps} from '../utils/tableUtils'\nimport {startCase} from '../utils/stringUtils'\nimport {CODE_DOWN, CODE_END, CODE_HOME, CODE_UP} from '../utils/constants'\nimport {tableKeyboardNavigationKey} from '../utils/keys'\nimport {filterEvent} from '../utils/filterEvent'\nimport type {AttrsValue} from '../types/AnyValuedAttributes'\nimport {getSafeDocument} from '../utils/dom'\n\nexport const useTableFieldsMapper = <Item>({\n  fields,\n  items,\n  stackedProps,\n}: {\n  fields: MaybeRefOrGetter<readonly TableFieldRaw<Item>[]>\n  items: MaybeRefOrGetter<readonly Item[]>\n  stackedProps: {\n    stacked: MaybeRefOrGetter<StackedProps['stacked']>\n    labelStacked: MaybeRefOrGetter<StackedProps['labelStacked']>\n  }\n}) => {\n  const computedFields = computed<{\n    items: TableField[]\n    opts?: {noHeader: boolean}\n  }>(() => {\n    const fieldsValue = toValue(fields)\n    const itemsValue = toValue(items)\n    const stacked = {\n      stacked: toValue(stackedProps.stacked),\n      labelStacked: toValue(stackedProps.labelStacked),\n    }\n\n    if (!fieldsValue.length && itemsValue.length) {\n      const [firstItem] = itemsValue\n      if (firstItem && (isTableItem(firstItem) || Array.isArray(firstItem))) {\n        return {\n          items: Object.keys(firstItem).map((k) => {\n            const label = startCase(k)\n            return {\n              key: k,\n              label,\n              tdAttr: getDataLabelAttr(stacked, label),\n            }\n          }),\n        }\n      }\n      // The items are primitives, so we just return a single empty field\n      // No header will be shown, as we don't know what to show\n      return {items: [{key: ''}], opts: {noHeader: true}}\n    }\n\n    return {\n      items: fieldsValue.map((f) => {\n        if (isTableField(f)) {\n          const label = f.label ?? startCase(f.key as string)\n          const dataLabelAttr = getDataLabelAttr(stacked, label)\n          const tdAttr =\n            typeof f.tdAttr === 'function'\n              ? (obj: unknown) => ({\n                  ...dataLabelAttr,\n                  ...(f.tdAttr as (obj: unknown) => AttrsValue)(obj),\n                })\n              : dataLabelAttr || f.tdAttr\n                ? {...dataLabelAttr, ...f.tdAttr}\n                : undefined\n          return {\n            ...(f as TableField),\n            tdAttr,\n          }\n        }\n        const label = startCase(f as string)\n        return {\n          key: f as string,\n          label,\n          tdAttr: getDataLabelAttr(stacked, label),\n        }\n      }),\n    }\n  })\n  const total = computed(() => computedFields.value.items.length)\n  const showHeaders = computed(\n    () =>\n      // We only hide the header if all fields have _noHeader set to true. Which would be our doing\n      // This usually happens under a circumstance of displaying an array of primitives\n      // Under any other circumstance, I'm not sure how this would apply\n      !(total.value > 0 && computedFields.value.opts?.noHeader === true)\n  )\n\n  return {\n    total,\n    showHeaders,\n    fields: computed(() => computedFields.value.items),\n  }\n}\n\nexport const useItemTracker = <Item>({\n  allItems,\n  selectedItems,\n  primaryKey,\n}: {\n  allItems: MaybeRefOrGetter<readonly Item[]>\n  selectedItems: Ref<readonly unknown[]>\n  primaryKey?: MaybeRef<TablePrimaryKey<Item> | undefined>\n}): ItemTrackerReturn<Item> => {\n  const isActivated = computed(() => selectedItems.value.length > 0)\n  const pKey = readonly(toRef(primaryKey))\n\n  const get = (item: Item) => {\n    if (typeof item === 'object' && item !== null && pKey.value) {\n      return getWithGetter(item, pKey.value)\n    }\n    return item\n  }\n\n  const add = (item: Item) => {\n    const value = get(item)\n\n    selectedItems.value = [...selectedItems.value, value]\n  }\n  const set = (items: readonly Item[]) => {\n    selectedItems.value = pKey.value ? items.map(get) : items\n  }\n  const setAll = () => set([...toValue(allItems)])\n  const remove = (item: Item) => {\n    const value = get(item)\n\n    selectedItems.value = selectedItems.value.filter((i) => i !== value)\n  }\n  const clear = () => {\n    selectedItems.value = []\n  }\n\n  const has = (item: Item) => {\n    const value = get(item)\n\n    return selectedItems.value.includes(value)\n  }\n\n  watch(pKey, () => {\n    // Clear selected items if primary key changes\n    clear()\n  })\n\n  const objectsMap = computed(() => {\n    if (!pKey.value) return new Map()\n\n    return new Map<unknown, Item>(toValue(allItems).map((item) => [get(item), item]))\n  })\n  const getFromPrimaryKey = (value: unknown): Item | undefined => {\n    if (!pKey.value) return undefined\n\n    return objectsMap.value.get(value)\n  }\n  const resolvedItems = computed(() => {\n    if (!pKey.value) return selectedItems.value\n\n    const arr: unknown[] = []\n    selectedItems.value.forEach((item) => {\n      const resolved = getFromPrimaryKey(item)\n      if (resolved !== undefined) {\n        arr.push(resolved)\n      }\n    })\n    return arr\n  })\n\n  return {\n    getFromPrimaryKey,\n    resolvedItems,\n    isActivated,\n    get,\n    add,\n    remove,\n    clear,\n    set,\n    has,\n    setAll,\n  }\n}\n\nexport const useItemExpansion = <Item>({\n  allItems,\n  primaryKey,\n  expandedItems,\n}: {\n  allItems: MaybeRefOrGetter<readonly Item[]>\n  primaryKey: MaybeRef<TablePrimaryKey<Item> | undefined>\n  expandedItems: Ref<readonly unknown[]>\n}): TableDetailsReturn<Item> => {\n  const utils = useItemTracker({\n    primaryKey,\n    allItems,\n    selectedItems: expandedItems,\n  })\n\n  const toggle = (item: Item) => {\n    if (utils.has(item)) {\n      utils.remove(item)\n    } else {\n      utils.add(item)\n    }\n  }\n\n  return {\n    ...utils,\n    toggle,\n  }\n}\n\nexport const useTableKeyboardNavigation = <Item>(\n  {\n    items,\n    id,\n  }: {\n    items: MaybeRefOrGetter<readonly Item[]>\n    id: MaybeRefOrGetter<string>\n  },\n  events: {\n    onHeadClicked: (\n      obj: TableHeadClickedEventObject<Item, Readonly<KeyboardEvent> | Readonly<MouseEvent>>\n    ) => void\n    onRowClicked: (\n      obj: TableRowEventObject<Item, Readonly<KeyboardEvent> | Readonly<MouseEvent>>\n    ) => void\n    onRowMiddleClicked: (obj: TableRowEventObject<Item>) => void\n  }\n) => {\n  // Inject keyboard navigation state from parent BTable\n  const keyboardNavigation = inject(tableKeyboardNavigationKey, null)\n  // Keyboard navigation support\n  const shouldHeaderBeFocusable = (field: TableField) =>\n    !!(keyboardNavigation?.headerNavigation.value && field.sortable === true)\n\n  const shouldRowBeFocusable = computed(\n    () => !!(keyboardNavigation?.rowNavigation.value && toValue(items).length > 0)\n  )\n\n  const headerClicked = (\n    field: TableField,\n    event: Readonly<MouseEvent> | Readonly<KeyboardEvent>,\n    isFooter = false\n  ) => {\n    events.onHeadClicked({key: field.key as string, field, event, isFooter})\n  }\n\n  const handleHeaderKeydown = (field: TableField, event: KeyboardEvent, isFooter = false) => {\n    const {target, code} = event\n\n    if (\n      target &&\n      (target as Element).tagName !== 'TH' &&\n      getSafeDocument()?.activeElement === target\n    )\n      return\n\n    if (code === 'Enter' || code === 'NumpadEnter' || code === 'Space') {\n      event.preventDefault()\n      headerClicked(field, event, isFooter)\n    }\n  }\n\n  const handleRowKeydown = (item: Item, itemIndex: number, event: KeyboardEvent) => {\n    const {target, code, shiftKey} = event\n\n    if (\n      target &&\n      (target as Element).tagName !== 'TR' &&\n      getSafeDocument()?.activeElement === target\n    )\n      return\n\n    if (code === 'Enter' || code === 'NumpadEnter' || code === 'Space') {\n      event.preventDefault()\n      events.onRowClicked({item, index: itemIndex, event})\n      return\n    }\n\n    if (code === CODE_DOWN || code === CODE_UP || code === CODE_HOME || code === CODE_END) {\n      event.preventDefault()\n      handleRowNavigation(code, shiftKey, itemIndex)\n    }\n  }\n\n  const handleRowNavigation = (code: string, shiftKey: boolean, currentIndex: number) => {\n    const doc = getSafeDocument()\n    const rows =\n      doc === null\n        ? []\n        : (Array.from(\n            doc.querySelectorAll(`#${toValue(id)} tbody tr[tabindex]`)\n          ) as HTMLTableRowElement[])\n\n    if (rows.length === 0) return\n\n    let targetIndex = currentIndex\n\n    if (code === CODE_DOWN) {\n      if (shiftKey) {\n        targetIndex = rows.length - 1 // Go to last row\n      } else {\n        targetIndex = Math.min(currentIndex + 1, rows.length - 1) // Go to next row\n      }\n    } else if (code === CODE_UP) {\n      if (shiftKey) {\n        targetIndex = 0 // Go to first row\n      } else {\n        targetIndex = Math.max(currentIndex - 1, 0) // Go to previous row\n      }\n    } else if (code === CODE_END) {\n      targetIndex = rows.length - 1 // Go to last row\n    } else if (code === CODE_HOME) {\n      targetIndex = 0 // Go to first row\n    }\n\n    if (targetIndex !== currentIndex && rows[targetIndex]) {\n      rows[targetIndex]?.focus()\n    }\n  }\n\n  const handleMiddleClick = (item: Item, itemIndex: number, event: MouseEvent) => {\n    if (event.button === 1 && !filterEvent(event)) {\n      events.onRowMiddleClicked({item, index: itemIndex, event})\n    }\n  }\n\n  return {\n    shouldHeaderBeFocusable,\n    headerClicked,\n    handleHeaderKeydown,\n    shouldRowBeFocusable,\n    handleRowKeydown,\n    handleMiddleClick,\n  }\n}\n","<template>\n  <BTableSimple v-bind=\"computedSimpleProps\">\n    <colgroup v-if=\"slots['table-colgroup']\">\n      <slot name=\"table-colgroup\" :fields=\"computedFields\" />\n    </colgroup>\n    <BThead v-show=\"showComputedHeaders\" :variant=\"props.headVariant\" :class=\"props.theadClass\">\n      <slot name=\"thead-top\" :columns=\"computedFieldsTotal\" :fields=\"computedFields\" />\n      <BTr :variant=\"props.headRowVariant\" :class=\"props.theadTrClass\">\n        <BTh\n          v-for=\"field in computedFields\"\n          :key=\"field.key\"\n          :scope=\"field.scope\"\n          :class=\"getFieldColumnClasses(field)\"\n          :title=\"field.headerTitle\"\n          :variant=\"field.variant\"\n          :abbr=\"field.headerAbbr\"\n          :style=\"field.thStyle\"\n          :tabindex=\"keyboardController.shouldHeaderBeFocusable(field) ? '0' : undefined\"\n          v-bind=\"callThAttr(null, field, 'top')\"\n          @click=\"keyboardController.headerClicked(field, $event)\"\n          @keydown=\"keyboardController.handleHeaderKeydown(field, $event)\"\n        >\n          <!-- eslint-disable prettier/prettier -->\n          <slot\n            :name=\"slots[`head(${field.key})`] ? (`head(${field.key})` as 'head()') : 'head()'\"\n            :label=\"field.label\"\n            :column=\"field.key\"\n            :field\n            :is-foot=\"false\"\n          >\n            <!-- eslint-enable prettier/prettier -->\n            {{ getTableFieldHeadLabel(field) }}\n          </slot>\n        </BTh>\n      </BTr>\n      <BTr v-if=\"slots['thead-sub']\">\n        <BTd\n          v-for=\"field in computedFields\"\n          :key=\"field.key\"\n          scope=\"col\"\n          :variant=\"field.variant\"\n          :class=\"[field.class, field.thClass]\"\n        >\n          <slot name=\"thead-sub\" :items=\"props.items\" :fields=\"computedFields\" :field>\n            {{ field.label }}\n          </slot>\n        </BTd>\n      </BTr>\n    </BThead>\n    <BTbody :class=\"props.tbodyClass\">\n      <slot\n        name=\"custom-body\"\n        :fields=\"computedFields\"\n        :items=\"props.items\"\n        :columns=\"computedFieldsTotal\"\n      >\n        <BTr\n          v-if=\"!props.stacked && slots['top-row']\"\n          :class=\"getRowClasses(null, 'row-top')\"\n          v-bind=\"callTbodyTrAttrs(null, 'row-top')\"\n        >\n          <slot name=\"top-row\" :columns=\"computedFieldsTotal\" :fields=\"computedFields\" />\n        </BTr>\n\n        <template\n          v-for=\"(item, itemIndex) in props.items\"\n          :key=\"\n            props.primaryKey && isTableItem(item) && getWithGetter(item, props.primaryKey)\n              ? getWithGetter(item, props.primaryKey)\n              : itemIndex\n          \"\n        >\n          <BTr\n            :id=\"\n              props.primaryKey && isTableItem(item) && getWithGetter(item, props.primaryKey)\n                ? generateTableRowId(getWithGetter(item, props.primaryKey) as string)\n                : undefined\n            \"\n            :class=\"getRowClasses(item, 'row')\"\n            :variant=\"isTableItem(item) ? item._rowVariant : undefined\"\n            :tabindex=\"keyboardController.shouldRowBeFocusable.value ? '0' : undefined\"\n            v-bind=\"callTbodyTrAttrs(item, 'row')\"\n            @click=\"\n              !filterEvent($event) && emit('row-clicked', {item, index: itemIndex, event: $event})\n            \"\n            @dblclick=\"\n              !filterEvent($event) &&\n              emit('row-dblclicked', {item, index: itemIndex, event: $event})\n            \"\n            @contextmenu=\"\n              !filterEvent($event) &&\n              emit('row-contextmenu', {item, index: itemIndex, event: $event})\n            \"\n            @mouseenter=\"\n              !filterEvent($event) && emit('row-hovered', {item, index: itemIndex, event: $event})\n            \"\n            @mouseleave=\"\n              !filterEvent($event) && emit('row-unhovered', {item, index: itemIndex, event: $event})\n            \"\n            @mousedown=\"keyboardController.handleMiddleClick(item, itemIndex, $event)\"\n            @keydown=\"keyboardController.handleRowKeydown(item, itemIndex, $event)\"\n          >\n            <component\n              :is=\"getCellComponent(field)\"\n              v-for=\"field in computedFields\"\n              :key=\"field.key\"\n              :variant=\"\n                (isTableItem(item) ? item._cellVariants?.[field.key] : false) ? null : field.variant\n              \"\n              :class=\"getFieldRowClasses(field, item)\"\n              v-bind=\"itemAttributes(item, field)\"\n            >\n              <label v-if=\"props.stacked && props.labelStacked\" class=\"b-table-stacked-label\">\n                {{ getTableFieldHeadLabel(field) }}\n              </label>\n              <slot\n                :name=\"slots[`cell(${field.key})`] ? (`cell(${field.key})` as 'cell()') : 'cell()'\"\n                :value=\"formatItem(item, field)\"\n                :unformatted=\"getByFieldKey(item, field)\"\n                :index=\"itemIndex\"\n                :item=\"item\"\n                :field=\"field\"\n                :items=\"props.items\"\n                :toggle-expansion=\"() => expandedItemsController.toggle(item)\"\n                :expansion-showing=\"expandedItemsController.has(item)\"\n              >\n                <template v-if=\"!slots[`cell(${field.key})`] && !slots['cell()']\">\n                  {{ formatItem(item, field) }}\n                </template>\n              </slot>\n            </component>\n          </BTr>\n\n          <template v-if=\"expandedItemsController.has(item) && slots['row-expansion']\">\n            <BTr aria-hidden=\"true\" role=\"presentation\" class=\"d-none\" />\n            <BTr\n              :class=\"getRowClasses(item, 'row-expansion')\"\n              :variant=\"isTableItem(item) ? item._rowVariant : undefined\"\n              v-bind=\"callTbodyTrAttrs(item, 'row-expansion')\"\n            >\n              <BTd :colspan=\"computedFieldsTotal\" :class=\"detailsTdClass\">\n                <slot\n                  name=\"row-expansion\"\n                  :item=\"item\"\n                  :toggle-expansion=\"() => expandedItemsController.toggle(item)\"\n                  :fields=\"computedFields\"\n                  :index=\"itemIndex\"\n                />\n              </BTd>\n            </BTr>\n          </template>\n        </template>\n        <!-- This class is for specific targetting of this slot element -->\n        <BTr\n          v-if=\"!props.stacked && slots['bottom-row']\"\n          class=\"bottom-row\"\n          :class=\"getRowClasses(null, 'row-bottom')\"\n          v-bind=\"callTbodyTrAttrs(null, 'row-bottom')\"\n        >\n          <slot name=\"bottom-row\" :columns=\"computedFieldsTotal\" :fields=\"computedFields\" />\n        </BTr>\n      </slot>\n    </BTbody>\n    <BTfoot v-if=\"props.footClone\" v-bind=\"footerProps\">\n      <BTr\n        :variant=\"props.footRowVariant ?? props.headRowVariant\"\n        :class=\"props.tfootTrClass ?? props.theadTrClass\"\n      >\n        <BTh\n          v-for=\"field in computedFields\"\n          :key=\"field.key\"\n          scope=\"col\"\n          :class=\"getFieldColumnClasses(field)\"\n          :title=\"field.headerTitle\"\n          :abbr=\"field.headerAbbr\"\n          :style=\"field.thStyle\"\n          :variant=\"field.variant\"\n          :tabindex=\"keyboardController.shouldHeaderBeFocusable(field) ? '0' : undefined\"\n          v-bind=\"callThAttr(null, field, 'bottom')\"\n          @click=\"keyboardController.headerClicked(field, $event, true)\"\n          @keydown=\"keyboardController.handleHeaderKeydown(field, $event, true)\"\n        >\n          <div class=\"d-inline-flex flex-nowrap align-items-center gap-1\">\n            <div>\n              <!-- eslint-disable prettier/prettier -->\n              <!-- @vue-expect-error - typescript is generating 2322 errors for all properties after name, which is wrong -->\n              <slot\n                :name=\"calculatedFooterSlot(field.key)\"\n                :label=\"field.label\"\n                :column=\"field.key\"\n                :field=\"field\"\n                :is-foot=\"true\"\n              >\n                <!-- eslint-enable prettier/prettier -->\n                {{ getTableFieldHeadLabel(field) }}\n              </slot>\n            </div>\n          </div>\n        </BTh>\n      </BTr>\n    </BTfoot>\n    <BTfoot v-else-if=\"slots['custom-foot']\" v-bind=\"footerProps\">\n      <slot\n        name=\"custom-foot\"\n        :fields=\"computedFields\"\n        :items=\"props.items\"\n        :columns=\"computedFieldsTotal\"\n      />\n    </BTfoot>\n    <caption v-if=\"slots['table-caption'] || props.caption\">\n      <slot name=\"table-caption\">\n        {{ props.caption }}\n      </slot>\n    </caption>\n  </BTableSimple>\n</template>\n\n<script setup lang=\"ts\" generic=\"Item\">\nimport {computed, readonly, toRef} from 'vue'\nimport type {BTableLiteProps} from '../../types/ComponentProps'\nimport {\n  isTableItem,\n  type TableField,\n  type TableItem,\n  type TableRowThead,\n  type TableRowType,\n} from '../../types/TableTypes'\nimport BTableSimple from './BTableSimple.vue'\nimport BTbody from './BTbody.vue'\nimport BTd from './BTd.vue'\nimport BTfoot from './BTfoot.vue'\nimport BTh from './BTh.vue'\nimport BThead from './BThead.vue'\nimport BTr from './BTr.vue'\nimport {useDefaults} from '../../composables/useDefaults'\nimport {pick} from '../../utils/object'\nimport {\n  bTableSimpleProps,\n  formatItem,\n  getByFieldKey,\n  getTableFieldHeadLabel,\n  getWithGetter,\n} from '../../utils/tableUtils'\nimport {filterEvent} from '../../utils/filterEvent'\nimport {useId} from '../../composables/useId'\nimport type {BTableLiteEmits} from '../../types/ComponentEmits'\nimport type {BTableLiteSlots} from '../../types'\nimport {\n  useItemExpansion,\n  useTableFieldsMapper,\n  useTableKeyboardNavigation,\n} from '../../composables/useTableLiteHelpers'\n\nconst _props = withDefaults(defineProps<Omit<BTableLiteProps<Item>, 'expandedItems'>>(), {\n  caption: undefined,\n  align: undefined,\n  fields: () => [],\n  footClone: false,\n  items: () => [],\n  labelStacked: false,\n  fieldColumnClass: undefined,\n  tbodyTrClass: undefined,\n  detailsTdClass: undefined,\n  headVariant: undefined,\n  headRowVariant: undefined,\n  footRowVariant: undefined,\n  footVariant: undefined,\n  modelValue: undefined,\n  primaryKey: undefined,\n  tbodyClass: undefined,\n  tbodyTrAttrs: undefined,\n  tfootClass: undefined,\n  tfootTrClass: undefined,\n  theadClass: undefined,\n  theadTrClass: undefined,\n  // BTableSimpleProps props\n  borderVariant: undefined,\n  tableClass: undefined,\n  variant: undefined,\n  bordered: undefined,\n  borderless: undefined,\n  captionTop: undefined,\n  dark: undefined,\n  hover: undefined,\n  id: undefined,\n  noBorderCollapse: undefined,\n  outlined: undefined,\n  fixed: undefined,\n  responsive: undefined,\n  stacked: undefined,\n  striped: undefined,\n  stripedColumns: undefined,\n  small: undefined,\n  stickyHeader: undefined,\n  // End BTableSimpleProps props\n})\nconst props = useDefaults(_props, 'BTableLite')\nconst emit = defineEmits<BTableLiteEmits<Item>>()\nconst slots = defineSlots<BTableLiteSlots<Item>>()\n\nconst expandedItems = defineModel<Exclude<BTableLiteProps<Item>['expandedItems'], undefined>>(\n  'expandedItems',\n  {\n    default: () => [],\n  }\n)\n\nconst computedId = useId(() => props.id)\nconst expandedItemsController = useItemExpansion({\n  allItems: () => props.items,\n  primaryKey: toRef(() => props.primaryKey),\n  expandedItems,\n})\nconst keyboardController = useTableKeyboardNavigation(\n  {\n    items: () => props.items,\n    id: computedId,\n  },\n  {\n    onHeadClicked: (obj) => {\n      emit('head-clicked', obj)\n    },\n    onRowClicked: (obj) => {\n      emit('row-clicked', obj)\n    },\n    onRowMiddleClicked: (obj) => {\n      emit('row-middle-clicked', obj)\n    },\n  }\n)\nconst {\n  fields: computedFields,\n  total: computedFieldsTotal,\n  showHeaders: showComputedHeaders,\n} = useTableFieldsMapper({\n  fields: () => props.fields,\n  items: () => props.items,\n  stackedProps: {\n    labelStacked: () => props.labelStacked,\n    stacked: () => props.stacked,\n  },\n})\n\nconst calculatedFooterSlot = (key: string): keyof typeof slots =>\n  slots[`foot(${key})`]\n    ? `foot(${key})`\n    : slots['foot()']\n      ? 'foot()'\n      : slots[`head(${key})`]\n        ? `head(${key})`\n        : 'head()'\n\nconst computedTableClasses = computed(() => [\n  props.tableClass,\n  {\n    [`align-${props.align}`]: props.align !== undefined,\n  },\n])\nconst getFieldColumnClasses = (field: TableField) => [\n  field.class,\n  field.thClass,\n  {\n    'b-table-sticky-column': field.stickyColumn,\n  },\n  props.fieldColumnClass\n    ? typeof props.fieldColumnClass === 'function'\n      ? props.fieldColumnClass(field)\n      : props.fieldColumnClass\n    : null,\n]\nconst getFieldRowClasses = (field: Readonly<TableField>, tr: Item) => [\n  field.class,\n  typeof field.tdClass === 'function'\n    ? field.tdClass(getByFieldKey(tr, field), field.key, tr)\n    : field.tdClass,\n  (isTableItem(tr) ? tr._cellVariants?.[field.key] : false)\n    ? `table-${(tr as TableItem)._cellVariants?.[field.key]}`\n    : null,\n  {\n    'b-table-sticky-column': field.stickyColumn,\n  },\n]\nconst getRowClasses = (item: Item | null, type: TableRowType) =>\n  props.tbodyTrClass\n    ? typeof props.tbodyTrClass === 'function'\n      ? props.tbodyTrClass(item, type)\n      : props.tbodyTrClass\n    : null\n\nconst itemAttributes = (item: Item, field: TableField) =>\n  field.tdAttr && typeof field.tdAttr === 'function'\n    ? field.tdAttr({value: getByFieldKey(item, field), key: field.key, item})\n    : field.tdAttr\nconst callThAttr = (item: Item | null, field: TableField<Item>, type: TableRowThead) =>\n  field.thAttr && typeof field.thAttr === 'function'\n    ? field.thAttr({value: getByFieldKey(item, field), key: field.key, item, type})\n    : field.thAttr\nconst callTbodyTrAttrs = (item: Item | null, type: TableRowType) =>\n  props.tbodyTrAttrs\n    ? typeof props.tbodyTrAttrs === 'function'\n      ? props.tbodyTrAttrs(item, type)\n      : props.tbodyTrAttrs\n    : null\n\nconst generateTableRowId = (primaryKeyValue: string) =>\n  `${computedId.value}__row_${primaryKeyValue}`\n\nconst getCellComponent = (field: Readonly<TableField>) => {\n  if (field?.isRowHeader) {\n    return BTh\n  }\n  return BTd\n}\n\nconst footerProps = computed(() => ({\n  variant: props.footVariant ?? props.headVariant,\n  class: props.tfootClass ?? props.theadClass,\n}))\n\nconst computedSimpleProps = computed(() => ({\n  ...pick(props, bTableSimpleProps),\n  tableClass: computedTableClasses.value,\n  id: computedId.value,\n}))\n\ndefineExpose({\n  expansion: {\n    ...expandedItemsController,\n    expandedItems: readonly(expandedItems),\n  },\n})\n</script>\n","<template>\n  <BTableSimple v-bind=\"computedSimpleProps\">\n    <colgroup v-if=\"slots['table-colgroup']\">\n      <slot name=\"table-colgroup\" :fields=\"computedFields\" />\n    </colgroup>\n    <BThead v-show=\"showComputedHeaders\" :variant=\"props.headVariant\" :class=\"props.theadClass\">\n      <slot name=\"thead-top\" :columns=\"computedFieldsTotal\" :fields=\"computedFields\" />\n      <BTr :variant=\"props.headRowVariant\" :class=\"props.theadTrClass\">\n        <BTh\n          v-for=\"field in computedFields\"\n          :key=\"field.key\"\n          :scope=\"field.scope\"\n          :class=\"getFieldColumnClasses(field)\"\n          :title=\"field.headerTitle\"\n          :variant=\"field.variant\"\n          :abbr=\"field.headerAbbr\"\n          :style=\"field.thStyle\"\n          :tabindex=\"keyboardController.shouldHeaderBeFocusable(field) ? '0' : undefined\"\n          v-bind=\"callThAttr(null, field, 'top')\"\n          @click=\"keyboardController.headerClicked(field, $event)\"\n          @keydown=\"keyboardController.handleHeaderKeydown(field, $event)\"\n        >\n          <!-- eslint-disable prettier/prettier -->\n          <slot\n            :name=\"slots[`head(${field.key})`] ? (`head(${field.key})` as 'head()') : 'head()'\"\n            :label=\"field.label\"\n            :column=\"field.key\"\n            :field\n            :is-foot=\"false\"\n          >\n            <!-- eslint-enable prettier/prettier -->\n            {{ getTableFieldHeadLabel(field) }}\n          </slot>\n        </BTh>\n      </BTr>\n      <BTr v-if=\"slots['thead-sub']\">\n        <BTd\n          v-for=\"field in computedFields\"\n          :key=\"field.key\"\n          scope=\"col\"\n          :variant=\"field.variant\"\n          :class=\"[field.class, field.thClass]\"\n        >\n          <slot name=\"thead-sub\" :items=\"props.items\" :fields=\"computedFields\" :field>\n            {{ field.label }}\n          </slot>\n        </BTd>\n      </BTr>\n    </BThead>\n    <BTbody :class=\"props.tbodyClass\">\n      <slot\n        name=\"custom-body\"\n        :fields=\"computedFields\"\n        :items=\"props.items\"\n        :columns=\"computedFieldsTotal\"\n      >\n        <BTr\n          v-if=\"!props.stacked && slots['top-row']\"\n          :class=\"getRowClasses(null, 'row-top')\"\n          v-bind=\"callTbodyTrAttrs(null, 'row-top')\"\n        >\n          <slot name=\"top-row\" :columns=\"computedFieldsTotal\" :fields=\"computedFields\" />\n        </BTr>\n\n        <template\n          v-for=\"(item, itemIndex) in props.items\"\n          :key=\"\n            props.primaryKey && isTableItem(item) && getWithGetter(item, props.primaryKey)\n              ? getWithGetter(item, props.primaryKey)\n              : itemIndex\n          \"\n        >\n          <BTr\n            :id=\"\n              props.primaryKey && isTableItem(item) && getWithGetter(item, props.primaryKey)\n                ? generateTableRowId(getWithGetter(item, props.primaryKey) as string)\n                : undefined\n            \"\n            :class=\"getRowClasses(item, 'row')\"\n            :variant=\"isTableItem(item) ? item._rowVariant : undefined\"\n            :tabindex=\"keyboardController.shouldRowBeFocusable.value ? '0' : undefined\"\n            v-bind=\"callTbodyTrAttrs(item, 'row')\"\n            @click=\"\n              !filterEvent($event) && emit('row-clicked', {item, index: itemIndex, event: $event})\n            \"\n            @dblclick=\"\n              !filterEvent($event) &&\n              emit('row-dblclicked', {item, index: itemIndex, event: $event})\n            \"\n            @contextmenu=\"\n              !filterEvent($event) &&\n              emit('row-contextmenu', {item, index: itemIndex, event: $event})\n            \"\n            @mouseenter=\"\n              !filterEvent($event) && emit('row-hovered', {item, index: itemIndex, event: $event})\n            \"\n            @mouseleave=\"\n              !filterEvent($event) && emit('row-unhovered', {item, index: itemIndex, event: $event})\n            \"\n            @mousedown=\"keyboardController.handleMiddleClick(item, itemIndex, $event)\"\n            @keydown=\"keyboardController.handleRowKeydown(item, itemIndex, $event)\"\n          >\n            <component\n              :is=\"getCellComponent(field)\"\n              v-for=\"field in computedFields\"\n              :key=\"field.key\"\n              :variant=\"\n                (isTableItem(item) ? item._cellVariants?.[field.key] : false) ? null : field.variant\n              \"\n              :class=\"getFieldRowClasses(field, item)\"\n              v-bind=\"itemAttributes(item, field)\"\n            >\n              <label v-if=\"props.stacked && props.labelStacked\" class=\"b-table-stacked-label\">\n                {{ getTableFieldHeadLabel(field) }}\n              </label>\n              <slot\n                :name=\"slots[`cell(${field.key})`] ? (`cell(${field.key})` as 'cell()') : 'cell()'\"\n                :value=\"formatItem(item, field)\"\n                :unformatted=\"getByFieldKey(item, field)\"\n                :index=\"itemIndex\"\n                :item=\"item\"\n                :field=\"field\"\n                :items=\"props.items\"\n                :toggle-expansion=\"() => expandedItemsController.toggle(item)\"\n                :expansion-showing=\"expandedItemsController.has(item)\"\n              >\n                <template v-if=\"!slots[`cell(${field.key})`] && !slots['cell()']\">\n                  {{ formatItem(item, field) }}\n                </template>\n              </slot>\n            </component>\n          </BTr>\n\n          <template v-if=\"expandedItemsController.has(item) && slots['row-expansion']\">\n            <BTr aria-hidden=\"true\" role=\"presentation\" class=\"d-none\" />\n            <BTr\n              :class=\"getRowClasses(item, 'row-expansion')\"\n              :variant=\"isTableItem(item) ? item._rowVariant : undefined\"\n              v-bind=\"callTbodyTrAttrs(item, 'row-expansion')\"\n            >\n              <BTd :colspan=\"computedFieldsTotal\" :class=\"detailsTdClass\">\n                <slot\n                  name=\"row-expansion\"\n                  :item=\"item\"\n                  :toggle-expansion=\"() => expandedItemsController.toggle(item)\"\n                  :fields=\"computedFields\"\n                  :index=\"itemIndex\"\n                />\n              </BTd>\n            </BTr>\n          </template>\n        </template>\n        <!-- This class is for specific targetting of this slot element -->\n        <BTr\n          v-if=\"!props.stacked && slots['bottom-row']\"\n          class=\"bottom-row\"\n          :class=\"getRowClasses(null, 'row-bottom')\"\n          v-bind=\"callTbodyTrAttrs(null, 'row-bottom')\"\n        >\n          <slot name=\"bottom-row\" :columns=\"computedFieldsTotal\" :fields=\"computedFields\" />\n        </BTr>\n      </slot>\n    </BTbody>\n    <BTfoot v-if=\"props.footClone\" v-bind=\"footerProps\">\n      <BTr\n        :variant=\"props.footRowVariant ?? props.headRowVariant\"\n        :class=\"props.tfootTrClass ?? props.theadTrClass\"\n      >\n        <BTh\n          v-for=\"field in computedFields\"\n          :key=\"field.key\"\n          scope=\"col\"\n          :class=\"getFieldColumnClasses(field)\"\n          :title=\"field.headerTitle\"\n          :abbr=\"field.headerAbbr\"\n          :style=\"field.thStyle\"\n          :variant=\"field.variant\"\n          :tabindex=\"keyboardController.shouldHeaderBeFocusable(field) ? '0' : undefined\"\n          v-bind=\"callThAttr(null, field, 'bottom')\"\n          @click=\"keyboardController.headerClicked(field, $event, true)\"\n          @keydown=\"keyboardController.handleHeaderKeydown(field, $event, true)\"\n        >\n          <div class=\"d-inline-flex flex-nowrap align-items-center gap-1\">\n            <div>\n              <!-- eslint-disable prettier/prettier -->\n              <!-- @vue-expect-error - typescript is generating 2322 errors for all properties after name, which is wrong -->\n              <slot\n                :name=\"calculatedFooterSlot(field.key)\"\n                :label=\"field.label\"\n                :column=\"field.key\"\n                :field=\"field\"\n                :is-foot=\"true\"\n              >\n                <!-- eslint-enable prettier/prettier -->\n                {{ getTableFieldHeadLabel(field) }}\n              </slot>\n            </div>\n          </div>\n        </BTh>\n      </BTr>\n    </BTfoot>\n    <BTfoot v-else-if=\"slots['custom-foot']\" v-bind=\"footerProps\">\n      <slot\n        name=\"custom-foot\"\n        :fields=\"computedFields\"\n        :items=\"props.items\"\n        :columns=\"computedFieldsTotal\"\n      />\n    </BTfoot>\n    <caption v-if=\"slots['table-caption'] || props.caption\">\n      <slot name=\"table-caption\">\n        {{ props.caption }}\n      </slot>\n    </caption>\n  </BTableSimple>\n</template>\n\n<script setup lang=\"ts\" generic=\"Item\">\nimport {computed, readonly, toRef} from 'vue'\nimport type {BTableLiteProps} from '../../types/ComponentProps'\nimport {\n  isTableItem,\n  type TableField,\n  type TableItem,\n  type TableRowThead,\n  type TableRowType,\n} from '../../types/TableTypes'\nimport BTableSimple from './BTableSimple.vue'\nimport BTbody from './BTbody.vue'\nimport BTd from './BTd.vue'\nimport BTfoot from './BTfoot.vue'\nimport BTh from './BTh.vue'\nimport BThead from './BThead.vue'\nimport BTr from './BTr.vue'\nimport {useDefaults} from '../../composables/useDefaults'\nimport {pick} from '../../utils/object'\nimport {\n  bTableSimpleProps,\n  formatItem,\n  getByFieldKey,\n  getTableFieldHeadLabel,\n  getWithGetter,\n} from '../../utils/tableUtils'\nimport {filterEvent} from '../../utils/filterEvent'\nimport {useId} from '../../composables/useId'\nimport type {BTableLiteEmits} from '../../types/ComponentEmits'\nimport type {BTableLiteSlots} from '../../types'\nimport {\n  useItemExpansion,\n  useTableFieldsMapper,\n  useTableKeyboardNavigation,\n} from '../../composables/useTableLiteHelpers'\n\nconst _props = withDefaults(defineProps<Omit<BTableLiteProps<Item>, 'expandedItems'>>(), {\n  caption: undefined,\n  align: undefined,\n  fields: () => [],\n  footClone: false,\n  items: () => [],\n  labelStacked: false,\n  fieldColumnClass: undefined,\n  tbodyTrClass: undefined,\n  detailsTdClass: undefined,\n  headVariant: undefined,\n  headRowVariant: undefined,\n  footRowVariant: undefined,\n  footVariant: undefined,\n  modelValue: undefined,\n  primaryKey: undefined,\n  tbodyClass: undefined,\n  tbodyTrAttrs: undefined,\n  tfootClass: undefined,\n  tfootTrClass: undefined,\n  theadClass: undefined,\n  theadTrClass: undefined,\n  // BTableSimpleProps props\n  borderVariant: undefined,\n  tableClass: undefined,\n  variant: undefined,\n  bordered: undefined,\n  borderless: undefined,\n  captionTop: undefined,\n  dark: undefined,\n  hover: undefined,\n  id: undefined,\n  noBorderCollapse: undefined,\n  outlined: undefined,\n  fixed: undefined,\n  responsive: undefined,\n  stacked: undefined,\n  striped: undefined,\n  stripedColumns: undefined,\n  small: undefined,\n  stickyHeader: undefined,\n  // End BTableSimpleProps props\n})\nconst props = useDefaults(_props, 'BTableLite')\nconst emit = defineEmits<BTableLiteEmits<Item>>()\nconst slots = defineSlots<BTableLiteSlots<Item>>()\n\nconst expandedItems = defineModel<Exclude<BTableLiteProps<Item>['expandedItems'], undefined>>(\n  'expandedItems',\n  {\n    default: () => [],\n  }\n)\n\nconst computedId = useId(() => props.id)\nconst expandedItemsController = useItemExpansion({\n  allItems: () => props.items,\n  primaryKey: toRef(() => props.primaryKey),\n  expandedItems,\n})\nconst keyboardController = useTableKeyboardNavigation(\n  {\n    items: () => props.items,\n    id: computedId,\n  },\n  {\n    onHeadClicked: (obj) => {\n      emit('head-clicked', obj)\n    },\n    onRowClicked: (obj) => {\n      emit('row-clicked', obj)\n    },\n    onRowMiddleClicked: (obj) => {\n      emit('row-middle-clicked', obj)\n    },\n  }\n)\nconst {\n  fields: computedFields,\n  total: computedFieldsTotal,\n  showHeaders: showComputedHeaders,\n} = useTableFieldsMapper({\n  fields: () => props.fields,\n  items: () => props.items,\n  stackedProps: {\n    labelStacked: () => props.labelStacked,\n    stacked: () => props.stacked,\n  },\n})\n\nconst calculatedFooterSlot = (key: string): keyof typeof slots =>\n  slots[`foot(${key})`]\n    ? `foot(${key})`\n    : slots['foot()']\n      ? 'foot()'\n      : slots[`head(${key})`]\n        ? `head(${key})`\n        : 'head()'\n\nconst computedTableClasses = computed(() => [\n  props.tableClass,\n  {\n    [`align-${props.align}`]: props.align !== undefined,\n  },\n])\nconst getFieldColumnClasses = (field: TableField) => [\n  field.class,\n  field.thClass,\n  {\n    'b-table-sticky-column': field.stickyColumn,\n  },\n  props.fieldColumnClass\n    ? typeof props.fieldColumnClass === 'function'\n      ? props.fieldColumnClass(field)\n      : props.fieldColumnClass\n    : null,\n]\nconst getFieldRowClasses = (field: Readonly<TableField>, tr: Item) => [\n  field.class,\n  typeof field.tdClass === 'function'\n    ? field.tdClass(getByFieldKey(tr, field), field.key, tr)\n    : field.tdClass,\n  (isTableItem(tr) ? tr._cellVariants?.[field.key] : false)\n    ? `table-${(tr as TableItem)._cellVariants?.[field.key]}`\n    : null,\n  {\n    'b-table-sticky-column': field.stickyColumn,\n  },\n]\nconst getRowClasses = (item: Item | null, type: TableRowType) =>\n  props.tbodyTrClass\n    ? typeof props.tbodyTrClass === 'function'\n      ? props.tbodyTrClass(item, type)\n      : props.tbodyTrClass\n    : null\n\nconst itemAttributes = (item: Item, field: TableField) =>\n  field.tdAttr && typeof field.tdAttr === 'function'\n    ? field.tdAttr({value: getByFieldKey(item, field), key: field.key, item})\n    : field.tdAttr\nconst callThAttr = (item: Item | null, field: TableField<Item>, type: TableRowThead) =>\n  field.thAttr && typeof field.thAttr === 'function'\n    ? field.thAttr({value: getByFieldKey(item, field), key: field.key, item, type})\n    : field.thAttr\nconst callTbodyTrAttrs = (item: Item | null, type: TableRowType) =>\n  props.tbodyTrAttrs\n    ? typeof props.tbodyTrAttrs === 'function'\n      ? props.tbodyTrAttrs(item, type)\n      : props.tbodyTrAttrs\n    : null\n\nconst generateTableRowId = (primaryKeyValue: string) =>\n  `${computedId.value}__row_${primaryKeyValue}`\n\nconst getCellComponent = (field: Readonly<TableField>) => {\n  if (field?.isRowHeader) {\n    return BTh\n  }\n  return BTd\n}\n\nconst footerProps = computed(() => ({\n  variant: props.footVariant ?? props.headVariant,\n  class: props.tfootClass ?? props.theadClass,\n}))\n\nconst computedSimpleProps = computed(() => ({\n  ...pick(props, bTableSimpleProps),\n  tableClass: computedTableClasses.value,\n  id: computedId.value,\n}))\n\ndefineExpose({\n  expansion: {\n    ...expandedItemsController,\n    expandedItems: readonly(expandedItems),\n  },\n})\n</script>\n","import {\n  computed,\n  type MaybeRef,\n  type MaybeRefOrGetter,\n  onMounted,\n  provide,\n  readonly,\n  type Ref,\n  toRef,\n  toValue,\n  unref,\n  watch,\n} from 'vue'\nimport {tableKeyboardNavigationKey} from '../utils/keys'\nimport type {\n  BTableInitialSortDirection,\n  BTableProvider,\n  BTableSortBy,\n  TableField,\n  TableFieldFormatter,\n  TableFieldRaw,\n} from '../types'\nimport {\n  type BTableFilterFunction,\n  type BTableSelectMode,\n  type BTableSortByComparerFunction,\n  type BTableSortByOrder,\n  isTableField,\n  isTableItem,\n  type NoProviderTypes,\n  type TablePrimaryKey,\n  type TableSelectedReturn,\n} from '../types/TableTypes'\nimport {deepEqual, set} from '../utils/object'\nimport {startCase} from '../utils/stringUtils'\nimport {formatItem, getDataLabelAttr, getWithGetter, type StackedProps} from '../utils/tableUtils'\nimport {useDebounceFn} from '../utils/debounce'\nimport {useItemTracker} from './useTableLiteHelpers'\n\nexport const useTableMapper = <Item>({\n  fields,\n  items,\n  stackedProps,\n  provider,\n  events,\n  pagination,\n}: {\n  items: MaybeRefOrGetter<readonly Item[]>\n  fields: MaybeRefOrGetter<readonly TableFieldRaw<Item>[]>\n  stackedProps: {\n    stacked: MaybeRefOrGetter<StackedProps['stacked']>\n    labelStacked: MaybeRefOrGetter<StackedProps['labelStacked']>\n  }\n  pagination: {\n    perPage: MaybeRefOrGetter<number>\n    currentPage: Ref<number>\n    sort: {\n      iconLeft: MaybeRefOrGetter<boolean>\n      isSortable: MaybeRefOrGetter<boolean>\n      sortCompare: MaybeRef<BTableSortByComparerFunction<Item> | undefined>\n      by: MaybeRefOrGetter<readonly BTableSortBy[] | undefined>\n      noLocalSorting: MaybeRefOrGetter<boolean>\n    }\n    filter: {\n      filterFunction: MaybeRef<BTableFilterFunction<Item> | undefined>\n      filter: MaybeRefOrGetter<string | undefined>\n      filterable: MaybeRefOrGetter<readonly string[] | undefined>\n    }\n  }\n  provider: {\n    noProviderSorting: MaybeRefOrGetter<boolean>\n    noProviderPaging: MaybeRefOrGetter<boolean>\n    noProviderFiltering: MaybeRefOrGetter<boolean>\n    usesProvider: MaybeRefOrGetter<boolean>\n  }\n  events: {\n    onChange: (items: readonly Item[]) => void\n  }\n}) => {\n  const sortByModelResolved = readonly(toRef(pagination.sort.by))\n  const isSortableResolved = readonly(toRef(pagination.sort.isSortable))\n  const filterResolved = readonly(toRef(pagination.filter.filter))\n  const usesProviderResolved = readonly(toRef(provider.usesProvider))\n\n  const isFilterableTable = computed(() => filterResolved.value !== undefined)\n\n  const computedFields = computed<TableField<Item>[]>(() =>\n    toValue(fields).map((el) => {\n      if (!isTableField(el)) {\n        const label = startCase(el as string)\n        return {\n          key: el as string,\n          label,\n          tdAttr: getDataLabelAttr(\n            {\n              stacked: toValue(stackedProps.stacked),\n              labelStacked: toValue(stackedProps.labelStacked),\n            },\n            label\n          ),\n        }\n      }\n\n      const value = sortByModelResolved.value?.find((sb) => el.key === sb.key)\n      const sortValue =\n        !el.sortable || isSortableResolved.value === false\n          ? undefined\n          : value === undefined\n            ? 'none'\n            : value.order === 'desc'\n              ? 'descending'\n              : value.order === 'asc'\n                ? 'ascending'\n                : 'none'\n\n      return {\n        ...(el as TableField<Item>),\n        thAttr: {\n          'aria-sort': sortValue,\n          ...el.thAttr,\n        },\n        thClass: [\n          el.thClass,\n          {\n            'b-table-sort-icon-left': toValue(pagination.sort.iconLeft) && sortValue !== undefined,\n          },\n        ],\n      }\n    })\n  )\n\n  const getFormatter = (value: TableField<Item>): TableFieldFormatter<Item> | undefined =>\n    typeof value.sortByFormatted === 'function' ? value.sortByFormatted : value.formatter\n\n  const getStringValue = (ob: Item, key: string): string => {\n    if (!isTableItem(ob)) return String(ob)\n\n    const sortField = computedFields.value.find((el) => {\n      if (isTableField(el)) return el.key === key\n\n      return false\n    })\n    const val =\n      isTableField(sortField) && sortField.accessor\n        ? getWithGetter(ob, sortField.accessor)\n        : getWithGetter(ob, key)\n    if (isTableField(sortField) && !!sortField.sortByFormatted) {\n      const formatter = getFormatter(sortField)\n      if (formatter) {\n        return String(formatItem(ob, {...sortField, formatter}))\n      }\n    }\n    return typeof val === 'object' && val !== null ? JSON.stringify(val) : (val?.toString() ?? '')\n  }\n\n  const fieldByKey = computed(() => {\n    const map = new Map<string | number | symbol, TableField<Item>>()\n    for (const f of computedFields.value) if (isTableField(f)) map.set(f.key, f)\n    return map\n  })\n\n  const computedItems = computed<Item[]>(() => {\n    const filterableValue = toValue(pagination.filter.filterable)\n    const filterFunctionValue = unref(pagination.filter.filterFunction)\n    const itemsValue = toValue(items)\n\n    const sortByItems = sortByModelResolved.value?.filter((el) => !!el.order)\n\n    const mapItem = (item: Item): Item => {\n      if (\n        typeof item === 'object' &&\n        item !== null &&\n        Object.keys(item).some((key) => key.includes('.'))\n      ) {\n        let newItem: Partial<Item> = {}\n        for (const key in item) {\n          if (key.includes('.')) {\n            newItem = set(newItem, key, item[key])\n          } else {\n            newItem[key] = item[key]\n          }\n        }\n        return newItem as Item // This should be an items at this point\n      }\n      return item\n    }\n\n    const filterItem = (item: Item): boolean => {\n      if (!isTableItem(item)) return true\n\n      return Object.entries(item).some(([key, val]) => {\n        if (\n          val === null ||\n          val === undefined ||\n          key[0] === '_' ||\n          (!filterableValue?.includes(key) && !!filterableValue?.length)\n        )\n          return false\n\n        if (typeof filterFunctionValue === 'function') {\n          return filterFunctionValue(item, filterResolved.value)\n        }\n\n        const realVal = (): string => {\n          const filterField = computedFields.value.find((el) => {\n            if (isTableField(el)) return el.key === key\n            return false\n          })\n          if (isTableField(filterField) && !!filterField.filterByFormatted) {\n            const formatter = getFormatter(filterField)\n            if (formatter) {\n              return String(formatter({value: val, key: String(filterField.key), item}))\n            }\n          }\n          return typeof val === 'object' ? JSON.stringify(Object.values(val)) : val.toString()\n        }\n        const itemValue: string = realVal()\n        return itemValue.toLowerCase().includes(filterResolved.value?.toLowerCase() ?? '')\n      })\n    }\n    const noProviderFilteringValue = toValue(provider.noProviderFiltering)\n\n    const mappedItems = itemsValue.reduce((acc, val) => {\n      const item = mapItem(val)\n      const shouldFilter =\n        isFilterableTable.value && (!usesProviderResolved.value || noProviderFilteringValue)\n\n      if (!shouldFilter || filterItem(item)) acc.push(item)\n\n      return acc\n    }, [] as Item[])\n\n    if (\n      sortByItems?.length &&\n      ((isSortableResolved.value === true &&\n        !usesProviderResolved.value &&\n        !toValue(pagination.sort.noLocalSorting)) ||\n        (isSortableResolved.value === true &&\n          usesProviderResolved.value &&\n          toValue(provider.noProviderSorting)))\n    ) {\n      const sortCompareValue = unref(pagination.sort.sortCompare)\n      // Multi-sort\n      return mappedItems.sort((a, b) => {\n        for (let i = 0; i < sortByItems.length; i++) {\n          const value = sortByItems[i]\n          if (value === undefined) continue\n          const {key, order} = value\n          const field = fieldByKey.value.get(key)\n          const comparer = field?.sortCompare || sortCompareValue\n          const comparison = comparer\n            ? comparer(a, b, key)\n            : getStringValue(a, key).localeCompare(getStringValue(b, key), undefined, {\n                numeric: true,\n              })\n\n          if (comparison !== 0) {\n            return order === 'asc' ? comparison : -comparison\n          }\n        }\n        return 0 // items are equal\n      })\n    }\n\n    return mappedItems\n  })\n\n  const computedDisplayItems = computed<Item[]>(() => {\n    const perPageNumber = toValue(pagination.perPage)\n    const currentPageNumber = toValue(pagination.currentPage)\n    if (\n      Number.isNaN(perPageNumber) ||\n      (usesProviderResolved.value && !toValue(provider.noProviderPaging))\n    ) {\n      return computedItems.value\n    }\n\n    return computedItems.value.slice(\n      (currentPageNumber - 1) * (perPageNumber || Number.POSITIVE_INFINITY),\n      currentPageNumber * (perPageNumber || Number.POSITIVE_INFINITY)\n    )\n  })\n\n  watch(filterResolved, () => {\n    pagination.currentPage.value = 1\n  })\n  watch(computedDisplayItems, (v) => {\n    events.onChange([...v])\n  })\n\n  return {\n    items: computedItems,\n    displayItems: computedDisplayItems,\n    getStringValue,\n    fields: computedFields,\n    isFilterableTable,\n  }\n}\n\nexport const useTableKeyboardNavigationInjector = ({\n  isSortable,\n  selectable,\n  noSelectOnClick,\n}: {\n  selectable: MaybeRefOrGetter<boolean>\n  noSelectOnClick: MaybeRefOrGetter<boolean>\n  isSortable: MaybeRefOrGetter<boolean>\n}) => {\n  // Provide keyboard navigation state to child components\n  const keyboardRowNavigation = computed(() => !!(toValue(selectable) && !toValue(noSelectOnClick)))\n  const keyboardHeaderNavigation = computed(() => !!toValue(isSortable))\n\n  provide(tableKeyboardNavigationKey, {\n    rowNavigation: keyboardRowNavigation,\n    headerNavigation: keyboardHeaderNavigation,\n  })\n}\n\nexport const useTableSelectedItems = <Item>({\n  selectable,\n  selectMode,\n  selectedItems,\n  events,\n  primaryKey,\n  allItems,\n}: {\n  allItems: MaybeRefOrGetter<readonly Item[]>\n  selectable: MaybeRefOrGetter<boolean>\n  selectMode: MaybeRefOrGetter<BTableSelectMode>\n  primaryKey: MaybeRef<TablePrimaryKey<Item> | undefined>\n  selectedItems: Ref<readonly unknown[]>\n  events: {\n    onRowSelected: (item: unknown) => void\n    onRowUnselected: (item: unknown) => void\n  }\n}): TableSelectedReturn<Item> => {\n  const selectableResolved = readonly(toRef(selectable))\n  const selectModeResolved = readonly(toRef(selectMode))\n  // Using readonly(toRef) doesn't work here because of its proxification\n  // It breaks equality checks\n  const allItemsResolved = computed(() => toValue(allItems))\n\n  const utils = useItemTracker({\n    allItems: allItemsResolved,\n    primaryKey,\n    selectedItems,\n  })\n\n  watch(selectedItems, (newValue, oldValue) => {\n    Array.from(oldValue)\n      .filter((item) => !newValue.includes(item))\n      .forEach((item) => {\n        events.onRowUnselected(item)\n      })\n    Array.from(newValue)\n      .filter((item) => !oldValue.includes(item))\n      .forEach((item) => {\n        events.onRowSelected(item)\n      })\n  })\n\n  const handleRowSelection = ({\n    item,\n    index,\n    shiftClicked = false,\n    ctrlClicked = false,\n    metaClicked = false,\n  }: {\n    item: Item\n    index: number\n    shiftClicked?: boolean\n    ctrlClicked?: boolean\n    metaClicked?: boolean\n  }) => {\n    if (!selectableResolved.value) return\n\n    if (selectModeResolved.value === 'single' || selectModeResolved.value === 'multi') {\n      // Do nothing when these items are held\n      if (shiftClicked || ctrlClicked) return\n      // Delete if item is in\n      if (utils.has(item)) {\n        utils.remove(item)\n      } else {\n        if (selectModeResolved.value === 'single') {\n          utils.set([item])\n        } else {\n          utils.add(item)\n        }\n      }\n    } else {\n      if (ctrlClicked || metaClicked) {\n        // Delete if in the object\n        if (utils.has(item)) {\n          utils.remove(item)\n          // Otherwise add. Functions similarly to 'multi' at this point\n        } else {\n          utils.add(item)\n        }\n        // This is where range is different, due to the difference in shift\n      } else if (shiftClicked) {\n        const lastSelectedItem = selectedItems.value[selectedItems.value.length - 1]\n        const lastSelectedIndex = allItemsResolved.value.findIndex(\n          (i) => utils.get(i) === lastSelectedItem\n        )\n        if (lastSelectedIndex === -1) {\n          utils.set([item])\n          return\n        }\n        const selectStartIndex = Math.min(lastSelectedIndex, index)\n        const selectEndIndex = Math.max(lastSelectedIndex, index)\n        const items = allItemsResolved.value.slice(selectStartIndex, selectEndIndex + 1)\n        utils.set(items)\n        // If nothing is being held, then we just behave like it's single mode\n      } else {\n        utils.set([item])\n      }\n    }\n  }\n\n  return {\n    ...utils,\n    handleRowSelection,\n    clear: () => {\n      if (!selectableResolved.value) return\n\n      utils.clear()\n    },\n    setAll: () => {\n      if (!selectableResolved.value || selectModeResolved.value === 'single') return\n\n      utils.setAll()\n    },\n    add: (item: Item) => {\n      if (!selectableResolved.value || utils.has(item)) return\n\n      if (selectModeResolved.value === 'single') {\n        utils.set([item])\n      } else {\n        utils.add(item)\n      }\n    },\n    remove: (item: Item) => {\n      if (!selectableResolved.value) return\n\n      utils.remove(item)\n    },\n    has: (item: Item) => {\n      if (!selectableResolved.value) return false\n\n      return utils.has(item)\n    },\n  }\n}\n\nexport const useTableProvider = <Item>({\n  items,\n  provider,\n  busy,\n  currentPage,\n  debounce,\n  perPage,\n  noProvider,\n  noProviderFiltering,\n  noProviderPaging,\n  noProviderSorting,\n  filter,\n  sortBy,\n  events,\n}: {\n  items: Ref<readonly Item[]>\n  sortBy: MaybeRefOrGetter<readonly BTableSortBy[] | undefined>\n  currentPage: MaybeRefOrGetter<number>\n  perPage: MaybeRefOrGetter<number>\n  filter: MaybeRefOrGetter<string | undefined>\n  busy: Ref<boolean>\n  provider: MaybeRef<BTableProvider<Item> | undefined>\n  debounce: {\n    wait: MaybeRefOrGetter<number>\n    maxWait: MaybeRefOrGetter<number>\n  }\n  noProvider: MaybeRefOrGetter<readonly NoProviderTypes[] | undefined>\n  noProviderPaging: MaybeRefOrGetter<boolean>\n  noProviderSorting: MaybeRefOrGetter<boolean>\n  noProviderFiltering: MaybeRefOrGetter<boolean>\n  events: {\n    onFiltered: () => void\n  }\n}) => {\n  const providerResolved = readonly(toRef(provider))\n  const currentPageResolved = readonly(toRef(currentPage))\n  const perPageResolved = readonly(toRef(perPage))\n  const sortByResolved = readonly(toRef(sortBy))\n  const filterResolved = readonly(toRef(filter))\n\n  const usesProvider = computed(() => providerResolved.value !== undefined)\n\n  // AbortController for canceling previous provider requests\n  let abortController: AbortController | null = null\n\n  const callItemsProvider = async () => {\n    if (!usesProvider.value || providerResolved.value === undefined) return\n\n    // Cancel any previous request\n    if (abortController) {\n      abortController.abort()\n    }\n\n    // Create a new AbortController for this request\n    abortController = new AbortController()\n    const {signal} = abortController\n\n    busy.value = true\n    try {\n      const response = providerResolved.value({\n        currentPage: currentPageResolved.value,\n        filter: filterResolved.value,\n        sortBy: sortByResolved.value,\n        perPage: perPageResolved.value,\n        signal,\n      })\n      const returnValue = response instanceof Promise ? await response : response\n\n      // Check if this request was aborted\n      if (signal.aborted) return\n\n      if (returnValue === undefined) return\n      items.value = returnValue\n    } catch (error) {\n      // Ignore AbortError, re-throw others\n      if (error instanceof Error && error.name === 'AbortError') return\n      throw error\n    } finally {\n      // Only set busy to false if this request wasn't aborted (to avoid race condition)\n      if (!signal.aborted) {\n        busy.value = false\n      }\n    }\n  }\n\n  // Debounced version of callItemsProvider for filter changes to prevent rapid successive calls\n  const debouncedCallItemsProvider = useDebounceFn(callItemsProvider, debounce.wait, {\n    maxWait: debounce.maxWait,\n  })\n\n  const providerPropsWatch = async (prop: string, val: unknown, oldVal: unknown) => {\n    if (deepEqual(val, oldVal)) return\n\n    //stop provide when paging\n    const inNoProvider = (key: NoProviderTypes) => toValue(noProvider)?.includes(key) === true\n    const noProvideWhenPaging =\n      (prop === 'currentPage' || prop === 'perPage') &&\n      (inNoProvider('paging') || toValue(noProviderPaging) === true)\n    const noProvideWhenFiltering =\n      prop === 'filter' && (inNoProvider('filtering') || toValue(noProviderFiltering) === true)\n    const noProvideWhenSorting =\n      (prop === 'sortBy' || prop === 'sortDesc') &&\n      (inNoProvider('sorting') || toValue(noProviderSorting) === true)\n\n    if (noProvideWhenPaging || noProvideWhenFiltering || noProvideWhenSorting) return\n\n    if (usesProvider.value === true) {\n      // Always use debounced version (when debounce is 0, it's immediate)\n      await debouncedCallItemsProvider()\n    }\n\n    if (!(prop === 'currentPage' || prop === 'perPage')) {\n      events.onFiltered()\n    }\n  }\n\n  watch(filterResolved, async (filter, oldFilter) => {\n    await providerPropsWatch('filter', filter, oldFilter)\n  })\n  watch(currentPageResolved, async (val, oldVal) => {\n    await providerPropsWatch('currentPage', val, oldVal)\n  })\n  watch(perPageResolved, async (val, oldVal) => {\n    await providerPropsWatch('perPage', val, oldVal)\n  })\n  watch(\n    sortByResolved,\n    async (val, oldVal) => {\n      await providerPropsWatch('sortBy', val, oldVal)\n    },\n    {deep: true}\n  )\n\n  watch(providerResolved, async (newValue) => {\n    // Reset the internal values if the provider stops getting used\n    if (newValue === undefined) {\n      items.value = []\n      return\n    }\n    // Otherwise we should refresh the table on such a change\n    await callItemsProvider()\n  })\n\n  onMounted(async () => {\n    await callItemsProvider()\n  })\n\n  return {\n    usesProvider,\n    callItemsProvider,\n  }\n}\n\nexport const useTableSort = <Item>({\n  fields,\n  sortBy,\n  initialSortDirection,\n  multisort,\n  mustSort,\n  events,\n}: {\n  fields: MaybeRefOrGetter<readonly TableFieldRaw<Item>[]>\n  sortBy: Ref<readonly BTableSortBy[] | undefined>\n  initialSortDirection: MaybeRefOrGetter<BTableInitialSortDirection>\n  mustSort: MaybeRefOrGetter<boolean | readonly string[]>\n  multisort: MaybeRefOrGetter<boolean>\n  events: {\n    onSorted: (sortBy: BTableSortBy) => void\n  }\n}) => {\n  const isSortable = computed(\n    () =>\n      sortBy.value !== undefined ||\n      toValue(fields).some(\n        (field) => typeof field === 'object' && field !== null && field.sortable === true\n      )\n  )\n\n  const handleFieldSorting = (field: TableField<Item>) => {\n    if (!isSortable.value) return\n\n    const fieldKey = typeof field === 'object' && field !== null ? field.key : field\n    const fieldSortable = typeof field === 'object' && field !== null ? field.sortable : false\n\n    if (!(isSortable.value === true && fieldSortable === true)) return\n\n    // Get the last sorted direction from the current sort model (last entry with a defined order)\n    //   Exclude the current column if it's already in the sortBy array\n    const getLastSortDirection = (): BTableSortByOrder => {\n      const lastSorted = [...(sortBy.value ?? [])]\n        .reverse()\n        .find((sort) => sort.order !== undefined && sort.key !== fieldKey)\n      return lastSorted?.order ?? 'asc'\n    }\n\n    // Determine initial sort direction for new sorts\n    const getInitialSortDirection = (): BTableSortByOrder => {\n      // Handle field-level prop\n      if (typeof field === 'object' && field !== null && field.initialSortDirection) {\n        if (field.initialSortDirection === 'last') {\n          return getLastSortDirection()\n        }\n        return field.initialSortDirection\n      }\n      const initialSortDirectionValue = toValue(initialSortDirection)\n      // Handle table-level prop\n      if (initialSortDirectionValue) {\n        if (initialSortDirectionValue === 'last') {\n          return getLastSortDirection()\n        }\n        return initialSortDirectionValue\n      }\n      return 'asc'\n    }\n\n    const resolveOrder = (val: BTableSortByOrder | undefined): BTableSortByOrder | undefined => {\n      const mustSortValue = toValue(mustSort)\n      // New sort: honor the configured initial direction\n      if (val === undefined) return getInitialSortDirection()\n      // Determine initial direction for this field\n      const initial = getInitialSortDirection()\n      const must =\n        mustSortValue === true || (!!mustSortValue && mustSortValue.includes(fieldKey as string))\n      if (val === 'asc') {\n        if (initial === 'desc') {\n          // If mustSort, cycle asc -> desc, else asc -> undefined\n          return must ? 'desc' : undefined\n        }\n        // If initial is asc, cycle asc -> desc -> undefined (or asc if mustSort)\n        return 'desc'\n      }\n      if (val === 'desc') {\n        if (initial === 'desc') {\n          return 'asc'\n        }\n        // If mustSort, cycle desc -> asc, else desc -> undefined\n        return must ? 'asc' : undefined\n      }\n      return undefined\n    }\n\n    const index = sortBy.value?.findIndex((el) => el.key === fieldKey) ?? -1\n    const originalValue = sortBy.value?.[index]\n    const updatedValue: BTableSortBy =\n      // If value is new, we use the field's initialSortDirection or default to ascending\n      // Otherwise we make a temp copy of the value\n      index === -1 || !originalValue\n        ? {key: fieldKey as string, order: getInitialSortDirection()}\n        : {...originalValue}\n\n    /**\n     * @returns the updated value to emit for sorted\n     */\n    const handleMultiSort = (): BTableSortBy => {\n      const tmp = [...(sortBy.value ?? [])]\n      const val = updatedValue\n      if (index === -1) {\n        tmp.push(val)\n      } else {\n        const order = resolveOrder(val.order)\n        if (order) {\n          val.order = order\n          tmp.splice(index, 1, val)\n        } else {\n          // Remove the value from the array and emit cleared sort for this key\n          val.order = undefined\n          tmp.splice(index, 1)\n        }\n      }\n      sortBy.value = tmp\n      return val\n    }\n\n    /**\n     * @returns the updated value to emit for sorted\n     */\n    const handleSingleSort = (): BTableSortBy => {\n      const order = index === -1 ? updatedValue.order : resolveOrder(updatedValue.order)\n      const val = {\n        ...updatedValue,\n        order,\n      }\n      sortBy.value = order ? [val] : []\n      return val\n    }\n\n    // Then emit the returned updated value\n    events.onSorted(toValue(multisort) === true ? handleMultiSort() : handleSingleSort())\n    // emit('sorted', toValue(multisort) === true ? handleMultiSort() : handleSingleSort())\n  }\n\n  return {\n    isSortable,\n    handleFieldSorting,\n  }\n}\n","<template>\n  <!-- eslint-disable prettier/prettier -->\n  <BTableLite v-bind=\"computedLiteProps\" v-model:expanded-items=\"expandedItems\">\n    <template v-if=\"slots['table-colgroup']\" #table-colgroup=\"scope\">\n      <slot name=\"table-colgroup\" v-bind=\"scope\" />\n    </template>\n    <!-- eslint-enable prettier/prettier -->\n    <template v-if=\"slots['thead-top']\" #thead-top=\"scope\">\n      <slot\n        name=\"thead-top\"\n        v-bind=\"scope\"\n        :clear-selected=\"selectedItemsController.clear\"\n        :select-all-rows=\"selectedItemsController.setAll\"\n        :fields=\"computedFields\"\n      />\n    </template>\n    <template v-if=\"slots['thead-sub']\" #thead-sub=\"scope\">\n      <slot name=\"thead-sub\" v-bind=\"scope\" :fields=\"computedFields\" />\n    </template>\n    <template v-if=\"slots['top-row']\" #top-row=\"scope\">\n      <slot name=\"top-row\" v-bind=\"scope\" :fields=\"computedFields\" />\n    </template>\n    <template v-if=\"slots['row-expansion']\" #row-expansion=\"scope\">\n      <slot\n        name=\"row-expansion\"\n        v-bind=\"scope\"\n        :fields=\"computedFields\"\n        :select-row=\"() => selectedItemsController.add(scope.item)\"\n        :unselect-row=\"() => selectedItemsController.remove(scope.item)\"\n        :row-selected=\"selectedItemsController.has(scope.item)\"\n      />\n    </template>\n    <template v-if=\"slots['bottom-row']\" #bottom-row=\"scope\">\n      <slot name=\"bottom-row\" v-bind=\"scope\" :fields=\"computedFields\" />\n    </template>\n    <template v-if=\"slots['custom-foot']\" #custom-foot=\"scope\">\n      <slot name=\"custom-foot\" v-bind=\"scope\" :fields=\"computedFields\" />\n    </template>\n    <template v-if=\"slots['table-caption']\" #table-caption>\n      <slot name=\"table-caption\" />\n    </template>\n    <template v-for=\"name in dynamicCellSlots\" #[name]=\"scope\">\n      <slot\n        :name\n        v-bind=\"scope\"\n        :select-row=\"() => selectedItemsController.add(scope.item)\"\n        :unselect-row=\"() => selectedItemsController.remove(scope.item)\"\n        :row-selected=\"selectedItemsController.has(scope.item)\"\n      />\n    </template>\n    <template v-for=\"name in dynamicFootSlots\" #[name]=\"scope\">\n      <slot\n        :name\n        v-bind=\"scope\"\n        :select-all-rows=\"selectedItemsController.setAll\"\n        :clear-selected=\"selectedItemsController.clear\"\n      />\n    </template>\n\n    <template\n      v-for=\"field in computedFields\"\n      :key=\"field.key\"\n      #[`head(${String(field.key)})`]=\"scope\"\n    >\n      <slot\n        :name=\"\n          slots[`head(${String(field.key)})`]\n            ? (`head(${String(field.key)})` as 'head()')\n            : 'head()'\n        \"\n        v-bind=\"scope\"\n        :select-all-rows=\"selectedItemsController.setAll\"\n        :clear-selected=\"selectedItemsController.clear\"\n      >\n        {{ getTableFieldHeadLabel(field) }}\n      </slot>\n    </template>\n    <template #custom-body=\"scope\">\n      <BTr\n        v-if=\"busyModel && slots['table-busy']\"\n        class=\"b-table-busy-slot\"\n        :class=\"getBusyRowClasses\"\n      >\n        <BTd :colspan=\"scope.fields.length\">\n          <slot name=\"table-busy\" />\n        </BTd>\n      </BTr>\n\n      <BTr\n        v-else-if=\"!busyModel && props.showEmpty === true && computedItems.length === 0\"\n        class=\"b-table-empty-row\"\n      >\n        <BTd :colspan=\"computedFields.length\">\n          <div role=\"alert\" aria-live=\"polite\">\n            <div class=\"text-center my-2\">\n              <slot v-if=\"showEmptyFiltered\" name=\"empty-filtered\" v-bind=\"emptySlotScope\">\n                {{ props.emptyFilteredText }}\n              </slot>\n              <slot v-else name=\"empty\" v-bind=\"emptySlotScope\">\n                {{ props.emptyText }}\n              </slot>\n            </div>\n          </div>\n        </BTd>\n      </BTr>\n    </template>\n  </BTableLite>\n</template>\n\n<script setup lang=\"ts\" generic=\"Item\">\nimport {useToNumber} from '@vueuse/core'\nimport {computed, readonly, toRef} from 'vue'\nimport BTableLite from './BTableLite.vue'\nimport BTd from './BTd.vue'\nimport BTr from './BTr.vue'\nimport {\n  type TableField,\n  type TableFieldRaw,\n  type TableRowType,\n  type TableStrictClassValue,\n} from '../../types'\nimport {useDefaults} from '../../composables/useDefaults'\nimport type {BTableProps} from '../../types'\nimport type {BTableEmits, BTableLiteEmits} from '../../types'\nimport {pick} from '../../utils/object'\nimport {bTableLiteProps, bTableSimpleProps, getTableFieldHeadLabel} from '../../utils/tableUtils'\nimport {useId} from '../../composables/useId'\nimport type {BTableSlots, CamelCase} from '../../types'\nimport {\n  useTableKeyboardNavigationInjector,\n  useTableMapper,\n  useTableProvider,\n  useTableSelectedItems,\n  useTableSort,\n} from '../../composables/useTableHelpers'\nimport {useItemExpansion} from '../../composables/useTableLiteHelpers'\n\nconst _props = withDefaults(\n  defineProps<\n    Omit<BTableProps<Item>, 'sortBy' | 'busy' | 'selectedItems' | 'items' | 'currentPage'>\n  >(),\n  {\n    noSortableIcon: false,\n    sortIconLeft: false,\n    perPage: Number.POSITIVE_INFINITY,\n    filter: undefined,\n    filterFunction: undefined,\n    mustSort: false,\n    initialSortDirection: 'asc',\n    filterable: undefined,\n    provider: undefined,\n    noProvider: undefined,\n    noProviderPaging: false,\n    noProviderSorting: false,\n    multisort: false,\n    noProviderFiltering: false,\n    noLocalSorting: false,\n    noSelectOnClick: false,\n    selectable: false,\n    stickySelect: false,\n    selectHead: true,\n    selectMode: 'multi',\n    selectionVariant: 'primary',\n    sortCompare: undefined,\n    debounce: 0,\n    debounceMaxWait: Number.NaN,\n    // BTableLite props\n    fields: () => [],\n    // All others use defaults\n    caption: undefined,\n    align: undefined,\n    footClone: undefined,\n    labelStacked: undefined,\n    showEmpty: false,\n    emptyText: 'There are no records to show',\n    emptyFilteredText: 'There are no records matching your request',\n    fieldColumnClass: undefined,\n    tbodyTrClass: undefined,\n    detailsTdClass: undefined,\n    headVariant: undefined,\n    headRowVariant: undefined,\n    footRowVariant: undefined,\n    footVariant: undefined,\n    modelValue: undefined,\n    primaryKey: undefined,\n    tbodyClass: undefined,\n    tfootClass: undefined,\n    tfootTrClass: undefined,\n    theadClass: undefined,\n    theadTrClass: undefined,\n    // End BTableLite props\n    // BTableSimple props\n    borderVariant: undefined,\n    variant: undefined,\n    bordered: undefined,\n    borderless: undefined,\n    captionTop: undefined,\n    dark: undefined,\n    hover: undefined,\n    id: undefined,\n    noBorderCollapse: undefined,\n    outlined: undefined,\n    fixed: undefined,\n    responsive: undefined,\n    stacked: undefined,\n    striped: undefined,\n    stripedColumns: undefined,\n    small: undefined,\n    stickyHeader: undefined,\n    // End BTableSimple props\n  }\n)\nconst props = useDefaults(_props, 'BTable')\nconst emit = defineEmits<BTableEmits<Item>>()\nconst slots = defineSlots<BTableSlots<Item>>()\n\nconst dynamicCellSlots = computed(\n  () => Object.keys(slots).filter((key) => key.startsWith('cell(')) as 'cell()'[]\n)\nconst dynamicFootSlots = computed(\n  () => Object.keys(slots).filter((key) => key.startsWith('foot(')) as 'foot()'[]\n)\n\nconst sortByModel = defineModel<BTableProps<Item>['sortBy']>('sortBy', {\n  default: undefined,\n})\nconst busyModel = defineModel<Exclude<BTableProps<Item>['busy'], undefined>>('busy', {\n  default: false,\n})\nconst selectedItemsModel = defineModel<Exclude<BTableProps<Item>['selectedItems'], undefined>>(\n  'selectedItems',\n  {\n    default: () => [],\n  }\n)\nconst expandedItems = defineModel<Exclude<BTableProps<Item>['expandedItems'], undefined>>(\n  'expandedItems',\n  {\n    default: () => [],\n  }\n)\nconst itemsModel = defineModel<Exclude<BTableProps<Item>['items'], undefined>>('items', {\n  default: () => [],\n})\nconst currentPage = defineModel<Exclude<BTableProps<Item>['currentPage'], undefined>>(\n  'currentPage',\n  {\n    default: 1,\n  }\n)\n\nconst computedId = useId(() => props.id)\nconst perPageNumber = useToNumber(() => props.perPage, {method: 'parseInt'})\nconst debounceNumber = useToNumber(() => props.debounce ?? 0, {nanToZero: true})\nconst debounceMaxWaitNumber = useToNumber(() => props.debounceMaxWait ?? Number.NaN)\n\nconst currentPageNumber = useToNumber(currentPage, {method: 'parseInt'})\nconst writableCurrentPageNumber = computed({\n  get: () => currentPageNumber.value,\n  set: (v) => {\n    currentPage.value = v\n  },\n})\n\nconst sortController = useTableSort({\n  fields: () => props.fields,\n  sortBy: sortByModel,\n  events: {\n    onSorted: (v) => {\n      emit('sorted', v)\n    },\n  },\n  initialSortDirection: () => props.initialSortDirection,\n  mustSort: () => props.mustSort,\n  multisort: () => props.multisort,\n})\nconst providerController = useTableProvider({\n  items: itemsModel,\n  events: {\n    onFiltered: () => {\n      emit('filtered', computedItems.value)\n    },\n  },\n  busy: busyModel,\n  provider: toRef(() => props.provider),\n  debounce: {\n    maxWait: debounceMaxWaitNumber,\n    wait: debounceNumber,\n  },\n  currentPage: readonly(writableCurrentPageNumber),\n  perPage: perPageNumber,\n  filter: () => props.filter,\n  noProvider: () => props.noProvider,\n  noProviderFiltering: () => props.noProviderFiltering,\n  noProviderPaging: () => props.noProviderPaging,\n  noProviderSorting: () => props.noProviderSorting,\n  sortBy: sortByModel,\n})\nconst expandedItemsController = useItemExpansion({\n  allItems: itemsModel,\n  primaryKey: toRef(() => props.primaryKey),\n  expandedItems,\n})\nconst {\n  items: computedItems,\n  displayItems: computedDisplayItems,\n  getStringValue,\n  fields: computedFields,\n  isFilterableTable,\n} = useTableMapper({\n  fields: () => props.fields,\n  provider: {\n    noProviderFiltering: () => props.noProviderFiltering,\n    noProviderPaging: () => props.noProviderPaging,\n    noProviderSorting: () => props.noProviderSorting,\n    usesProvider: providerController.usesProvider,\n  },\n  events: {\n    onChange: (v) => {\n      emit('change', v)\n    },\n  },\n  items: itemsModel,\n  pagination: {\n    perPage: perPageNumber,\n    currentPage: writableCurrentPageNumber,\n    filter: {\n      filter: () => props.filter,\n      filterFunction: toRef(() => props.filterFunction),\n      filterable: () => props.filterable,\n    },\n    sort: {\n      iconLeft: () => props.sortIconLeft,\n      isSortable: sortController.isSortable,\n      noLocalSorting: () => props.noLocalSorting,\n      by: sortByModel,\n      sortCompare: toRef(() => props.sortCompare),\n    },\n  },\n  stackedProps: {\n    stacked: () => props.stacked,\n    labelStacked: () => props.labelStacked,\n  },\n})\nconst selectedItemsController = useTableSelectedItems({\n  selectable: () => props.selectable,\n  primaryKey: toRef(() => props.primaryKey),\n  selectedItems: selectedItemsModel,\n  allItems: computedItems,\n  selectMode: () => props.selectMode,\n  events: {\n    onRowSelected: (item) => {\n      emit('row-selected', item)\n    },\n    onRowUnselected: (item) => {\n      emit('row-unselected', item)\n    },\n  },\n})\nuseTableKeyboardNavigationInjector({\n  isSortable: sortController.isSortable,\n  selectable: () => props.selectable,\n  noSelectOnClick: () => props.noSelectOnClick,\n})\n\nconst tableClasses = computed(() => ({\n  'b-table-busy': busyModel.value,\n  'b-table-selectable': props.selectable,\n  'user-select-none':\n    props.selectable && !props.noSelectOnClick && selectedItemsController.isActivated.value,\n  'b-table-fixed': props.fixed,\n  'b-table-no-border-collapse': props.noBorderCollapse,\n  'b-table-no-sort-icon': props.noSortableIcon,\n}))\nconst getBusyRowClasses = computed(() => [\n  props.tbodyTrClass\n    ? typeof props.tbodyTrClass === 'function'\n      ? props.tbodyTrClass(null, 'table-busy')\n      : props.tbodyTrClass\n    : null,\n])\nconst getFieldColumnClasses = (field: TableField) => [\n  {\n    'b-table-sortable-column': sortController.isSortable.value && field.sortable,\n  },\n]\n// TODO this class has issues if the table has a variant already applied\n// Also the row should technically have aria-selected. Both things could probably just use a function with tbodyTrAttrs\n// But functional tbodyTrAttrs are not supported yet\n// Also the stuff for resolving functions could probably be made a util\nconst getRowClasses = (item: Item | null, type: TableRowType): TableStrictClassValue => [\n  {\n    [`selected table-${props.selectionVariant}`]:\n      props.selectable && !!item && selectedItemsController.has(item),\n  },\n  props.tbodyTrClass\n    ? typeof props.tbodyTrClass === 'function'\n      ? props.tbodyTrClass(item, type)\n      : props.tbodyTrClass\n    : null,\n]\n\nconst boundBTableLiteEmits = {\n  onHeadClicked: ({key, field, event, isFooter = false}) => {\n    emit('head-clicked', {key, field, event, isFooter})\n    sortController.handleFieldSorting(field)\n  },\n  onRowClicked: ({item, index, event}) => {\n    if (props.noSelectOnClick === false) {\n      selectedItemsController.handleRowSelection({\n        item,\n        index,\n        shiftClicked: event.shiftKey,\n        ctrlClicked: event.ctrlKey,\n        metaClicked: event.metaKey,\n      })\n    }\n    emit('row-clicked', {item, index, event})\n  },\n  onRowDblclicked: (...args) => emit('row-dblclicked', ...args),\n  onRowContextmenu: (...args) => emit('row-contextmenu', ...args),\n  onRowHovered: (...args) => emit('row-hovered', ...args),\n  onRowUnhovered: (...args) => emit('row-unhovered', ...args),\n  onRowMiddleClicked: (...args) => emit('row-middle-clicked', ...args),\n} as const satisfies {\n  [K in keyof BTableLiteEmits<Item> as CamelCase<`on-${K & string}`>]: (\n    ...args: BTableLiteEmits<Item>[K]\n  ) => void\n}\nconst computedLiteProps = computed(() => ({\n  ...pick(props, [...bTableLiteProps, ...bTableSimpleProps]),\n  tableAttrs: {\n    ariaBusy: busyModel.value,\n  },\n  items: computedDisplayItems.value,\n  fields: computedFields.value as TableFieldRaw<Item>[],\n  tableClass: tableClasses.value,\n  tbodyTrClass: getRowClasses,\n  fieldColumnClass: getFieldColumnClasses,\n  id: computedId.value,\n  ...boundBTableLiteEmits,\n}))\n\nconst emptySlotScope = computed(() => ({\n  emptyFilteredText: props.emptyFilteredText,\n  emptyText: props.emptyText,\n  fields: computedFields.value,\n  items: computedItems.value,\n}))\n\n// Determine if we should show the empty-filtered slot\n// Show empty-filtered only if filter is defined AND not an empty string\nconst showEmptyFiltered = computed(\n  () => isFilterableTable.value && props.filter !== undefined && props.filter !== ''\n)\n\ndefineExpose({\n  expansion: {\n    ...expandedItemsController,\n    expandedItems: readonly(expandedItems),\n  },\n  selection: {\n    ...selectedItemsController,\n    selectedItems: readonly(selectedItemsModel),\n  },\n  items: computedItems,\n  displayItems: computedDisplayItems,\n  getStringValue,\n  refresh: providerController.callItemsProvider,\n})\n</script>\n","<template>\n  <!-- eslint-disable prettier/prettier -->\n  <BTableLite v-bind=\"computedLiteProps\" v-model:expanded-items=\"expandedItems\">\n    <template v-if=\"slots['table-colgroup']\" #table-colgroup=\"scope\">\n      <slot name=\"table-colgroup\" v-bind=\"scope\" />\n    </template>\n    <!-- eslint-enable prettier/prettier -->\n    <template v-if=\"slots['thead-top']\" #thead-top=\"scope\">\n      <slot\n        name=\"thead-top\"\n        v-bind=\"scope\"\n        :clear-selected=\"selectedItemsController.clear\"\n        :select-all-rows=\"selectedItemsController.setAll\"\n        :fields=\"computedFields\"\n      />\n    </template>\n    <template v-if=\"slots['thead-sub']\" #thead-sub=\"scope\">\n      <slot name=\"thead-sub\" v-bind=\"scope\" :fields=\"computedFields\" />\n    </template>\n    <template v-if=\"slots['top-row']\" #top-row=\"scope\">\n      <slot name=\"top-row\" v-bind=\"scope\" :fields=\"computedFields\" />\n    </template>\n    <template v-if=\"slots['row-expansion']\" #row-expansion=\"scope\">\n      <slot\n        name=\"row-expansion\"\n        v-bind=\"scope\"\n        :fields=\"computedFields\"\n        :select-row=\"() => selectedItemsController.add(scope.item)\"\n        :unselect-row=\"() => selectedItemsController.remove(scope.item)\"\n        :row-selected=\"selectedItemsController.has(scope.item)\"\n      />\n    </template>\n    <template v-if=\"slots['bottom-row']\" #bottom-row=\"scope\">\n      <slot name=\"bottom-row\" v-bind=\"scope\" :fields=\"computedFields\" />\n    </template>\n    <template v-if=\"slots['custom-foot']\" #custom-foot=\"scope\">\n      <slot name=\"custom-foot\" v-bind=\"scope\" :fields=\"computedFields\" />\n    </template>\n    <template v-if=\"slots['table-caption']\" #table-caption>\n      <slot name=\"table-caption\" />\n    </template>\n    <template v-for=\"name in dynamicCellSlots\" #[name]=\"scope\">\n      <slot\n        :name\n        v-bind=\"scope\"\n        :select-row=\"() => selectedItemsController.add(scope.item)\"\n        :unselect-row=\"() => selectedItemsController.remove(scope.item)\"\n        :row-selected=\"selectedItemsController.has(scope.item)\"\n      />\n    </template>\n    <template v-for=\"name in dynamicFootSlots\" #[name]=\"scope\">\n      <slot\n        :name\n        v-bind=\"scope\"\n        :select-all-rows=\"selectedItemsController.setAll\"\n        :clear-selected=\"selectedItemsController.clear\"\n      />\n    </template>\n\n    <template\n      v-for=\"field in computedFields\"\n      :key=\"field.key\"\n      #[`head(${String(field.key)})`]=\"scope\"\n    >\n      <slot\n        :name=\"\n          slots[`head(${String(field.key)})`]\n            ? (`head(${String(field.key)})` as 'head()')\n            : 'head()'\n        \"\n        v-bind=\"scope\"\n        :select-all-rows=\"selectedItemsController.setAll\"\n        :clear-selected=\"selectedItemsController.clear\"\n      >\n        {{ getTableFieldHeadLabel(field) }}\n      </slot>\n    </template>\n    <template #custom-body=\"scope\">\n      <BTr\n        v-if=\"busyModel && slots['table-busy']\"\n        class=\"b-table-busy-slot\"\n        :class=\"getBusyRowClasses\"\n      >\n        <BTd :colspan=\"scope.fields.length\">\n          <slot name=\"table-busy\" />\n        </BTd>\n      </BTr>\n\n      <BTr\n        v-else-if=\"!busyModel && props.showEmpty === true && computedItems.length === 0\"\n        class=\"b-table-empty-row\"\n      >\n        <BTd :colspan=\"computedFields.length\">\n          <div role=\"alert\" aria-live=\"polite\">\n            <div class=\"text-center my-2\">\n              <slot v-if=\"showEmptyFiltered\" name=\"empty-filtered\" v-bind=\"emptySlotScope\">\n                {{ props.emptyFilteredText }}\n              </slot>\n              <slot v-else name=\"empty\" v-bind=\"emptySlotScope\">\n                {{ props.emptyText }}\n              </slot>\n            </div>\n          </div>\n        </BTd>\n      </BTr>\n    </template>\n  </BTableLite>\n</template>\n\n<script setup lang=\"ts\" generic=\"Item\">\nimport {useToNumber} from '@vueuse/core'\nimport {computed, readonly, toRef} from 'vue'\nimport BTableLite from './BTableLite.vue'\nimport BTd from './BTd.vue'\nimport BTr from './BTr.vue'\nimport {\n  type TableField,\n  type TableFieldRaw,\n  type TableRowType,\n  type TableStrictClassValue,\n} from '../../types'\nimport {useDefaults} from '../../composables/useDefaults'\nimport type {BTableProps} from '../../types'\nimport type {BTableEmits, BTableLiteEmits} from '../../types'\nimport {pick} from '../../utils/object'\nimport {bTableLiteProps, bTableSimpleProps, getTableFieldHeadLabel} from '../../utils/tableUtils'\nimport {useId} from '../../composables/useId'\nimport type {BTableSlots, CamelCase} from '../../types'\nimport {\n  useTableKeyboardNavigationInjector,\n  useTableMapper,\n  useTableProvider,\n  useTableSelectedItems,\n  useTableSort,\n} from '../../composables/useTableHelpers'\nimport {useItemExpansion} from '../../composables/useTableLiteHelpers'\n\nconst _props = withDefaults(\n  defineProps<\n    Omit<BTableProps<Item>, 'sortBy' | 'busy' | 'selectedItems' | 'items' | 'currentPage'>\n  >(),\n  {\n    noSortableIcon: false,\n    sortIconLeft: false,\n    perPage: Number.POSITIVE_INFINITY,\n    filter: undefined,\n    filterFunction: undefined,\n    mustSort: false,\n    initialSortDirection: 'asc',\n    filterable: undefined,\n    provider: undefined,\n    noProvider: undefined,\n    noProviderPaging: false,\n    noProviderSorting: false,\n    multisort: false,\n    noProviderFiltering: false,\n    noLocalSorting: false,\n    noSelectOnClick: false,\n    selectable: false,\n    stickySelect: false,\n    selectHead: true,\n    selectMode: 'multi',\n    selectionVariant: 'primary',\n    sortCompare: undefined,\n    debounce: 0,\n    debounceMaxWait: Number.NaN,\n    // BTableLite props\n    fields: () => [],\n    // All others use defaults\n    caption: undefined,\n    align: undefined,\n    footClone: undefined,\n    labelStacked: undefined,\n    showEmpty: false,\n    emptyText: 'There are no records to show',\n    emptyFilteredText: 'There are no records matching your request',\n    fieldColumnClass: undefined,\n    tbodyTrClass: undefined,\n    detailsTdClass: undefined,\n    headVariant: undefined,\n    headRowVariant: undefined,\n    footRowVariant: undefined,\n    footVariant: undefined,\n    modelValue: undefined,\n    primaryKey: undefined,\n    tbodyClass: undefined,\n    tfootClass: undefined,\n    tfootTrClass: undefined,\n    theadClass: undefined,\n    theadTrClass: undefined,\n    // End BTableLite props\n    // BTableSimple props\n    borderVariant: undefined,\n    variant: undefined,\n    bordered: undefined,\n    borderless: undefined,\n    captionTop: undefined,\n    dark: undefined,\n    hover: undefined,\n    id: undefined,\n    noBorderCollapse: undefined,\n    outlined: undefined,\n    fixed: undefined,\n    responsive: undefined,\n    stacked: undefined,\n    striped: undefined,\n    stripedColumns: undefined,\n    small: undefined,\n    stickyHeader: undefined,\n    // End BTableSimple props\n  }\n)\nconst props = useDefaults(_props, 'BTable')\nconst emit = defineEmits<BTableEmits<Item>>()\nconst slots = defineSlots<BTableSlots<Item>>()\n\nconst dynamicCellSlots = computed(\n  () => Object.keys(slots).filter((key) => key.startsWith('cell(')) as 'cell()'[]\n)\nconst dynamicFootSlots = computed(\n  () => Object.keys(slots).filter((key) => key.startsWith('foot(')) as 'foot()'[]\n)\n\nconst sortByModel = defineModel<BTableProps<Item>['sortBy']>('sortBy', {\n  default: undefined,\n})\nconst busyModel = defineModel<Exclude<BTableProps<Item>['busy'], undefined>>('busy', {\n  default: false,\n})\nconst selectedItemsModel = defineModel<Exclude<BTableProps<Item>['selectedItems'], undefined>>(\n  'selectedItems',\n  {\n    default: () => [],\n  }\n)\nconst expandedItems = defineModel<Exclude<BTableProps<Item>['expandedItems'], undefined>>(\n  'expandedItems',\n  {\n    default: () => [],\n  }\n)\nconst itemsModel = defineModel<Exclude<BTableProps<Item>['items'], undefined>>('items', {\n  default: () => [],\n})\nconst currentPage = defineModel<Exclude<BTableProps<Item>['currentPage'], undefined>>(\n  'currentPage',\n  {\n    default: 1,\n  }\n)\n\nconst computedId = useId(() => props.id)\nconst perPageNumber = useToNumber(() => props.perPage, {method: 'parseInt'})\nconst debounceNumber = useToNumber(() => props.debounce ?? 0, {nanToZero: true})\nconst debounceMaxWaitNumber = useToNumber(() => props.debounceMaxWait ?? Number.NaN)\n\nconst currentPageNumber = useToNumber(currentPage, {method: 'parseInt'})\nconst writableCurrentPageNumber = computed({\n  get: () => currentPageNumber.value,\n  set: (v) => {\n    currentPage.value = v\n  },\n})\n\nconst sortController = useTableSort({\n  fields: () => props.fields,\n  sortBy: sortByModel,\n  events: {\n    onSorted: (v) => {\n      emit('sorted', v)\n    },\n  },\n  initialSortDirection: () => props.initialSortDirection,\n  mustSort: () => props.mustSort,\n  multisort: () => props.multisort,\n})\nconst providerController = useTableProvider({\n  items: itemsModel,\n  events: {\n    onFiltered: () => {\n      emit('filtered', computedItems.value)\n    },\n  },\n  busy: busyModel,\n  provider: toRef(() => props.provider),\n  debounce: {\n    maxWait: debounceMaxWaitNumber,\n    wait: debounceNumber,\n  },\n  currentPage: readonly(writableCurrentPageNumber),\n  perPage: perPageNumber,\n  filter: () => props.filter,\n  noProvider: () => props.noProvider,\n  noProviderFiltering: () => props.noProviderFiltering,\n  noProviderPaging: () => props.noProviderPaging,\n  noProviderSorting: () => props.noProviderSorting,\n  sortBy: sortByModel,\n})\nconst expandedItemsController = useItemExpansion({\n  allItems: itemsModel,\n  primaryKey: toRef(() => props.primaryKey),\n  expandedItems,\n})\nconst {\n  items: computedItems,\n  displayItems: computedDisplayItems,\n  getStringValue,\n  fields: computedFields,\n  isFilterableTable,\n} = useTableMapper({\n  fields: () => props.fields,\n  provider: {\n    noProviderFiltering: () => props.noProviderFiltering,\n    noProviderPaging: () => props.noProviderPaging,\n    noProviderSorting: () => props.noProviderSorting,\n    usesProvider: providerController.usesProvider,\n  },\n  events: {\n    onChange: (v) => {\n      emit('change', v)\n    },\n  },\n  items: itemsModel,\n  pagination: {\n    perPage: perPageNumber,\n    currentPage: writableCurrentPageNumber,\n    filter: {\n      filter: () => props.filter,\n      filterFunction: toRef(() => props.filterFunction),\n      filterable: () => props.filterable,\n    },\n    sort: {\n      iconLeft: () => props.sortIconLeft,\n      isSortable: sortController.isSortable,\n      noLocalSorting: () => props.noLocalSorting,\n      by: sortByModel,\n      sortCompare: toRef(() => props.sortCompare),\n    },\n  },\n  stackedProps: {\n    stacked: () => props.stacked,\n    labelStacked: () => props.labelStacked,\n  },\n})\nconst selectedItemsController = useTableSelectedItems({\n  selectable: () => props.selectable,\n  primaryKey: toRef(() => props.primaryKey),\n  selectedItems: selectedItemsModel,\n  allItems: computedItems,\n  selectMode: () => props.selectMode,\n  events: {\n    onRowSelected: (item) => {\n      emit('row-selected', item)\n    },\n    onRowUnselected: (item) => {\n      emit('row-unselected', item)\n    },\n  },\n})\nuseTableKeyboardNavigationInjector({\n  isSortable: sortController.isSortable,\n  selectable: () => props.selectable,\n  noSelectOnClick: () => props.noSelectOnClick,\n})\n\nconst tableClasses = computed(() => ({\n  'b-table-busy': busyModel.value,\n  'b-table-selectable': props.selectable,\n  'user-select-none':\n    props.selectable && !props.noSelectOnClick && selectedItemsController.isActivated.value,\n  'b-table-fixed': props.fixed,\n  'b-table-no-border-collapse': props.noBorderCollapse,\n  'b-table-no-sort-icon': props.noSortableIcon,\n}))\nconst getBusyRowClasses = computed(() => [\n  props.tbodyTrClass\n    ? typeof props.tbodyTrClass === 'function'\n      ? props.tbodyTrClass(null, 'table-busy')\n      : props.tbodyTrClass\n    : null,\n])\nconst getFieldColumnClasses = (field: TableField) => [\n  {\n    'b-table-sortable-column': sortController.isSortable.value && field.sortable,\n  },\n]\n// TODO this class has issues if the table has a variant already applied\n// Also the row should technically have aria-selected. Both things could probably just use a function with tbodyTrAttrs\n// But functional tbodyTrAttrs are not supported yet\n// Also the stuff for resolving functions could probably be made a util\nconst getRowClasses = (item: Item | null, type: TableRowType): TableStrictClassValue => [\n  {\n    [`selected table-${props.selectionVariant}`]:\n      props.selectable && !!item && selectedItemsController.has(item),\n  },\n  props.tbodyTrClass\n    ? typeof props.tbodyTrClass === 'function'\n      ? props.tbodyTrClass(item, type)\n      : props.tbodyTrClass\n    : null,\n]\n\nconst boundBTableLiteEmits = {\n  onHeadClicked: ({key, field, event, isFooter = false}) => {\n    emit('head-clicked', {key, field, event, isFooter})\n    sortController.handleFieldSorting(field)\n  },\n  onRowClicked: ({item, index, event}) => {\n    if (props.noSelectOnClick === false) {\n      selectedItemsController.handleRowSelection({\n        item,\n        index,\n        shiftClicked: event.shiftKey,\n        ctrlClicked: event.ctrlKey,\n        metaClicked: event.metaKey,\n      })\n    }\n    emit('row-clicked', {item, index, event})\n  },\n  onRowDblclicked: (...args) => emit('row-dblclicked', ...args),\n  onRowContextmenu: (...args) => emit('row-contextmenu', ...args),\n  onRowHovered: (...args) => emit('row-hovered', ...args),\n  onRowUnhovered: (...args) => emit('row-unhovered', ...args),\n  onRowMiddleClicked: (...args) => emit('row-middle-clicked', ...args),\n} as const satisfies {\n  [K in keyof BTableLiteEmits<Item> as CamelCase<`on-${K & string}`>]: (\n    ...args: BTableLiteEmits<Item>[K]\n  ) => void\n}\nconst computedLiteProps = computed(() => ({\n  ...pick(props, [...bTableLiteProps, ...bTableSimpleProps]),\n  tableAttrs: {\n    ariaBusy: busyModel.value,\n  },\n  items: computedDisplayItems.value,\n  fields: computedFields.value as TableFieldRaw<Item>[],\n  tableClass: tableClasses.value,\n  tbodyTrClass: getRowClasses,\n  fieldColumnClass: getFieldColumnClasses,\n  id: computedId.value,\n  ...boundBTableLiteEmits,\n}))\n\nconst emptySlotScope = computed(() => ({\n  emptyFilteredText: props.emptyFilteredText,\n  emptyText: props.emptyText,\n  fields: computedFields.value,\n  items: computedItems.value,\n}))\n\n// Determine if we should show the empty-filtered slot\n// Show empty-filtered only if filter is defined AND not an empty string\nconst showEmptyFiltered = computed(\n  () => isFilterableTable.value && props.filter !== undefined && props.filter !== ''\n)\n\ndefineExpose({\n  expansion: {\n    ...expandedItemsController,\n    expandedItems: readonly(expandedItems),\n  },\n  selection: {\n    ...selectedItemsController,\n    selectedItems: readonly(selectedItemsModel),\n  },\n  items: computedItems,\n  displayItems: computedDisplayItems,\n  getStringValue,\n  refresh: providerController.callItemsProvider,\n})\n</script>\n"],"mappings":"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"}