bootstrap-vue-next 0.25.8 → 0.25.10

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (66) hide show
  1. package/dist/{BAlert-Q-bAHt4X.mjs → BAlert-DRD6Q3cQ.mjs} +5 -4
  2. package/dist/{BAlert-Q-bAHt4X.mjs.map → BAlert-DRD6Q3cQ.mjs.map} +1 -1
  3. package/dist/BAlert-P_IB7iko.js +2 -0
  4. package/dist/{BAlert-CFrrDdHt.js.map → BAlert-P_IB7iko.js.map} +1 -1
  5. package/dist/{BPopoverOrchestrator.vue_vue_type_script_setup_true_lang-7VEbm0SS.js → BPopoverOrchestrator.vue_vue_type_script_setup_true_lang-CS3Vqld3.js} +2 -2
  6. package/dist/{BPopoverOrchestrator.vue_vue_type_script_setup_true_lang-7VEbm0SS.js.map → BPopoverOrchestrator.vue_vue_type_script_setup_true_lang-CS3Vqld3.js.map} +1 -1
  7. package/dist/{BPopoverOrchestrator.vue_vue_type_script_setup_true_lang-MOQOWSad.mjs → BPopoverOrchestrator.vue_vue_type_script_setup_true_lang-DT9DiFfu.mjs} +2 -2
  8. package/dist/{BPopoverOrchestrator.vue_vue_type_script_setup_true_lang-MOQOWSad.mjs.map → BPopoverOrchestrator.vue_vue_type_script_setup_true_lang-DT9DiFfu.mjs.map} +1 -1
  9. package/dist/BTable.vue_vue_type_script_setup_true_lang-BgBZgKGz.js +2 -0
  10. package/dist/BTable.vue_vue_type_script_setup_true_lang-BgBZgKGz.js.map +1 -0
  11. package/dist/{BTable.vue_vue_type_script_setup_true_lang-DMr9lB3p.mjs → BTable.vue_vue_type_script_setup_true_lang-CumrgwnT.mjs} +104 -26
  12. package/dist/BTable.vue_vue_type_script_setup_true_lang-CumrgwnT.mjs.map +1 -0
  13. package/dist/{BToastOrchestrator.vue_vue_type_style_index_0_lang-CS58dgbJ.mjs → BToastOrchestrator.vue_vue_type_style_index_0_lang-DzwoIRAO.mjs} +4 -3
  14. package/dist/BToastOrchestrator.vue_vue_type_style_index_0_lang-DzwoIRAO.mjs.map +1 -0
  15. package/dist/BToastOrchestrator.vue_vue_type_style_index_0_lang-JeP55Rpn.js +2 -0
  16. package/dist/BToastOrchestrator.vue_vue_type_style_index_0_lang-JeP55Rpn.js.map +1 -0
  17. package/dist/{BTooltip.vue_vue_type_script_setup_true_lang-Cq_gfow1.mjs → BTooltip.vue_vue_type_script_setup_true_lang-Do0IxGJx.mjs} +24 -10
  18. package/dist/BTooltip.vue_vue_type_script_setup_true_lang-Do0IxGJx.mjs.map +1 -0
  19. package/dist/{BTooltip.vue_vue_type_script_setup_true_lang-akY-MpXr.js → BTooltip.vue_vue_type_script_setup_true_lang-o2dcBqfI.js} +2 -2
  20. package/dist/BTooltip.vue_vue_type_script_setup_true_lang-o2dcBqfI.js.map +1 -0
  21. package/dist/bootstrap-vue-next.css +1 -1
  22. package/dist/bootstrap-vue-next.mjs +6 -6
  23. package/dist/bootstrap-vue-next.umd.js +1 -1
  24. package/dist/{index-CelKaZto.js → index-B_ERiMQ2.js} +2 -2
  25. package/dist/index-B_ERiMQ2.js.map +1 -0
  26. package/dist/{index-DIHUp_Zl.mjs → index-HE1omY4W.mjs} +6 -6
  27. package/dist/{index-DIHUp_Zl.mjs.map → index-HE1omY4W.mjs.map} +1 -1
  28. package/dist/src/components/BAlert/index.mjs +1 -1
  29. package/dist/src/components/BAlert/index.umd.js +1 -1
  30. package/dist/src/components/BPopover/index.mjs +1 -1
  31. package/dist/src/components/BPopover/index.umd.js +1 -1
  32. package/dist/src/components/BTable/BTable.vue.d.mts +62 -158
  33. package/dist/src/components/BTable/BTable.vue.d.ts +62 -158
  34. package/dist/src/components/BTable/BTableLite.vue.d.mts +60 -72
  35. package/dist/src/components/BTable/BTableLite.vue.d.ts +60 -72
  36. package/dist/src/components/BTable/index.mjs +1 -1
  37. package/dist/src/components/BTable/index.umd.js +1 -1
  38. package/dist/src/components/BToast/index.mjs +1 -1
  39. package/dist/src/components/BToast/index.umd.js +1 -1
  40. package/dist/src/components/BTooltip/BTooltip.vue.d.mts +19 -1
  41. package/dist/src/components/BTooltip/BTooltip.vue.d.ts +19 -1
  42. package/dist/src/components/BTooltip/index.mjs +1 -1
  43. package/dist/src/components/BTooltip/index.umd.js +1 -1
  44. package/dist/src/components/index.mjs +5 -5
  45. package/dist/src/components/index.umd.js +1 -1
  46. package/dist/src/composables/useCountdownHover.d.mts +4 -0
  47. package/dist/src/composables/useCountdownHover.d.ts +4 -0
  48. package/dist/src/utils/formatItem.d.mts +1 -1
  49. package/dist/src/utils/formatItem.d.ts +1 -1
  50. package/dist/useCountdownHover-C90kBVrr.js +2 -0
  51. package/dist/{useCountdownHover-CqJoFmwr.js.map → useCountdownHover-C90kBVrr.js.map} +1 -1
  52. package/dist/{useCountdownHover-BA5Bp2xo.mjs → useCountdownHover-CW4HHqec.mjs} +2 -1
  53. package/dist/{useCountdownHover-BA5Bp2xo.mjs.map → useCountdownHover-CW4HHqec.mjs.map} +1 -1
  54. package/package.json +1 -1
  55. package/src/components/BFormSpinbutton/_spinbutton.scss +4 -0
  56. package/dist/BAlert-CFrrDdHt.js +0 -2
  57. package/dist/BTable.vue_vue_type_script_setup_true_lang-Ci4nd_i5.js +0 -2
  58. package/dist/BTable.vue_vue_type_script_setup_true_lang-Ci4nd_i5.js.map +0 -1
  59. package/dist/BTable.vue_vue_type_script_setup_true_lang-DMr9lB3p.mjs.map +0 -1
  60. package/dist/BToastOrchestrator.vue_vue_type_style_index_0_lang-C1UC8xQT.js +0 -2
  61. package/dist/BToastOrchestrator.vue_vue_type_style_index_0_lang-C1UC8xQT.js.map +0 -1
  62. package/dist/BToastOrchestrator.vue_vue_type_style_index_0_lang-CS58dgbJ.mjs.map +0 -1
  63. package/dist/BTooltip.vue_vue_type_script_setup_true_lang-Cq_gfow1.mjs.map +0 -1
  64. package/dist/BTooltip.vue_vue_type_script_setup_true_lang-akY-MpXr.js.map +0 -1
  65. package/dist/index-CelKaZto.js.map +0 -1
  66. package/dist/useCountdownHover-CqJoFmwr.js +0 -2
@@ -2,7 +2,7 @@ import { defineComponent, mergeModels, useSlots, ref, useModel, computed, watchE
2
2
  import { _ as _sfc_main$1 } from "./BTransition.vue_vue_type_style_index_0_lang-X5a8jq3A.mjs";
3
3
  import { _ as _sfc_main$3 } from "./BCloseButton.vue_vue_type_script_setup_true_lang-8cgz9_uq.mjs";
4
4
  import { _ as _sfc_main$2 } from "./BButton.vue_vue_type_script_setup_true_lang-BdSl6KfQ.mjs";
5
- import { u as useCountdown, a as useCountdownHover } from "./useCountdownHover-BA5Bp2xo.mjs";
5
+ import { u as useCountdown, a as useCountdownHover } from "./useCountdownHover-CW4HHqec.mjs";
6
6
  import { u as useDefaults } from "./useDefaults-6tLPt05C.mjs";
7
7
  import { i as isEmptySlot } from "./dom-B-SQyhbA.mjs";
8
8
  import { _ as _export_sfc } from "./_plugin-vue_export-helper-1tPrXgE0.mjs";
@@ -57,7 +57,8 @@ const _sfc_main = /* @__PURE__ */ defineComponent({
57
57
  element,
58
58
  computed(() => ({
59
59
  noHoverPause: props.noHoverPause,
60
- noResumeOnHoverLeave: props.noResumeOnHoverLeave
60
+ noResumeOnHoverLeave: props.noResumeOnHoverLeave,
61
+ modelValueIgnoresHover: typeof modelValue.value === "boolean"
61
62
  })),
62
63
  { pause, resume }
63
64
  );
@@ -123,8 +124,8 @@ const _sfc_main = /* @__PURE__ */ defineComponent({
123
124
  };
124
125
  }
125
126
  });
126
- const BAlert = /* @__PURE__ */ _export_sfc(_sfc_main, [["__scopeId", "data-v-d1c92ab3"]]);
127
+ const BAlert = /* @__PURE__ */ _export_sfc(_sfc_main, [["__scopeId", "data-v-2f3988be"]]);
127
128
  export {
128
129
  BAlert as B
129
130
  };
130
- //# sourceMappingURL=BAlert-Q-bAHt4X.mjs.map
131
+ //# sourceMappingURL=BAlert-DRD6Q3cQ.mjs.map
@@ -1 +1 @@
1
- {"version":3,"file":"BAlert-Q-bAHt4X.mjs","sources":["../src/components/BAlert/BAlert.vue"],"sourcesContent":["<template>\n <BTransition :no-fade=\"!props.fade\" :trans-props=\"{enterToClass: 'show'}\">\n <div\n v-if=\"isAlertVisible\"\n ref=\"element\"\n class=\"alert\"\n role=\"alert\"\n aria-live=\"polite\"\n aria-atomic=\"true\"\n :class=\"computedClasses\"\n >\n <slot />\n <template v-if=\"props.dismissible\">\n <BButton v-if=\"hasCloseSlot || props.closeContent\" v-bind=\"closeAttrs\" @click=\"hide\">\n <slot name=\"close\">\n {{ props.closeContent }}\n </slot>\n </BButton>\n <BCloseButton v-else :aria-label=\"props.closeLabel\" v-bind=\"closeAttrs\" @click=\"hide\" />\n </template>\n </div>\n </BTransition>\n</template>\n\n<script setup lang=\"ts\">\nimport BTransition from '../BTransition.vue'\nimport BCloseButton from '../BButton/BCloseButton.vue'\nimport BButton from '../BButton/BButton.vue'\nimport type {BAlertProps} from '../../types/ComponentProps'\nimport {computed, ref, watchEffect} from 'vue'\nimport {useCountdown} from '../../composables/useCountdown'\nimport {useDefaults} from '../../composables/useDefaults'\nimport {isEmptySlot} from '../../utils/dom'\nimport {useCountdownHover} from '../../composables/useCountdownHover'\n\nconst _props = withDefaults(defineProps<Omit<BAlertProps, 'modelValue'>>(), {\n closeClass: undefined,\n closeContent: undefined,\n closeLabel: 'Close',\n closeVariant: 'secondary',\n dismissible: false,\n fade: false,\n immediate: true,\n interval: 'requestAnimationFrame',\n noHoverPause: false,\n noResumeOnHoverLeave: false,\n showOnPause: true,\n variant: 'info',\n})\n\nconst props = useDefaults(_props, 'BAlert')\n\nconst emit = defineEmits<{\n 'close': []\n 'close-countdown': [value: number]\n 'closed': []\n}>()\n\nconst slots = defineSlots<{\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n close?: (props: Record<string, never>) => any\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n default?: (props: Record<string, never>) => any\n}>()\n\nconst element = ref<HTMLElement | null>(null)\n\nconst modelValue = defineModel<Exclude<BAlertProps['modelValue'], undefined>>({default: false})\n\nconst hasCloseSlot = computed(() => !isEmptySlot(slots.close))\nconst countdownLength = computed(() =>\n typeof modelValue.value === 'boolean' ? 0 : modelValue.value\n)\n\nconst computedClasses = computed(() => ({\n [`alert-${props.variant}`]: props.variant !== null,\n 'alert-dismissible': props.dismissible,\n}))\n\nconst closeClasses = computed(() => [props.closeClass, {'btn-close-custom': hasCloseSlot.value}])\n\nconst {\n isActive,\n pause,\n resume,\n stop,\n isPaused,\n restart,\n value: remainingMs,\n} = useCountdown(countdownLength, props.interval, {\n immediate: typeof modelValue.value === 'number' && props.immediate,\n})\nuseCountdownHover(\n element,\n computed(() => ({\n noHoverPause: props.noHoverPause,\n noResumeOnHoverLeave: props.noResumeOnHoverLeave,\n })),\n {pause, resume}\n)\n\nconst isAlertVisible = computed(() =>\n typeof modelValue.value === 'boolean'\n ? modelValue.value\n : isActive.value || (props.showOnPause && isPaused.value)\n)\n\nconst closeAttrs = computed(() => ({\n variant: hasCloseSlot.value ? props.closeVariant : undefined,\n class: closeClasses.value,\n}))\n\nwatchEffect(() => {\n emit('close-countdown', remainingMs.value)\n})\n\nconst hide = () => {\n emit('close')\n\n if (typeof modelValue.value === 'boolean') {\n modelValue.value = false\n } else {\n modelValue.value = 0\n stop()\n }\n\n emit('closed')\n}\n\ndefineExpose({\n pause,\n resume,\n stop,\n restart,\n})\n</script>\n\n<style lang=\"scss\" scoped>\n.btn-close-custom {\n position: absolute;\n top: 0;\n right: 0;\n z-index: 2;\n margin: var(--bs-alert-padding-y) var(--bs-alert-padding-x);\n}\n</style>\n"],"names":["_useSlots","_useModel"],"mappings":";;;;;;;;;;;;;;;;;;;;;;;;;;;;;AAmCA,UAAM,SAAS;AAeT,UAAA,QAAQ,YAAY,QAAQ,QAAQ;AAE1C,UAAM,OAAO;AAMb,UAAM,QAAQA;AAOR,UAAA,UAAU,IAAwB,IAAI;AAEtC,UAAA,aAAaC,8BAA2E;AAE9F,UAAM,eAAe,SAAS,MAAM,CAAC,YAAY,MAAM,KAAK,CAAC;AAC7D,UAAM,kBAAkB;AAAA,MAAS,MAC/B,OAAO,WAAW,UAAU,YAAY,IAAI,WAAW;AAAA,IAAA;AAGnD,UAAA,kBAAkB,SAAS,OAAO;AAAA,MACtC,CAAC,SAAS,MAAM,OAAO,EAAE,GAAG,MAAM,YAAY;AAAA,MAC9C,qBAAqB,MAAM;AAAA,IAC3B,EAAA;AAEI,UAAA,eAAe,SAAS,MAAM,CAAC,MAAM,YAAY,EAAC,oBAAoB,aAAa,MAAM,CAAA,CAAC;AAE1F,UAAA;AAAA,MACJ;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA,OAAO;AAAA,IACL,IAAA,aAAa,iBAAiB,MAAM,UAAU;AAAA,MAChD,WAAW,OAAO,WAAW,UAAU,YAAY,MAAM;AAAA,IAAA,CAC1D;AACD;AAAA,MACE;AAAA,MACA,SAAS,OAAO;AAAA,QACd,cAAc,MAAM;AAAA,QACpB,sBAAsB,MAAM;AAAA,MAAA,EAC5B;AAAA,MACF,EAAC,OAAO,OAAM;AAAA,IAAA;AAGhB,UAAM,iBAAiB;AAAA,MAAS,MAC9B,OAAO,WAAW,UAAU,YACxB,WAAW,QACX,SAAS,SAAU,MAAM,eAAe,SAAS;AAAA,IAAA;AAGjD,UAAA,aAAa,SAAS,OAAO;AAAA,MACjC,SAAS,aAAa,QAAQ,MAAM,eAAe;AAAA,MACnD,OAAO,aAAa;AAAA,IACpB,EAAA;AAEF,gBAAY,MAAM;AACX,WAAA,mBAAmB,YAAY,KAAK;AAAA,IAAA,CAC1C;AAED,UAAM,OAAO,MAAM;AACjB,WAAK,OAAO;AAER,UAAA,OAAO,WAAW,UAAU,WAAW;AACzC,mBAAW,QAAQ;AAAA,MAAA,OACd;AACL,mBAAW,QAAQ;AACd;MACP;AAEA,WAAK,QAAQ;AAAA,IAAA;AAGF,aAAA;AAAA,MACX;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,IAAA,CACD;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;"}
1
+ {"version":3,"file":"BAlert-DRD6Q3cQ.mjs","sources":["../src/components/BAlert/BAlert.vue"],"sourcesContent":["<template>\n <BTransition :no-fade=\"!props.fade\" :trans-props=\"{enterToClass: 'show'}\">\n <div\n v-if=\"isAlertVisible\"\n ref=\"element\"\n class=\"alert\"\n role=\"alert\"\n aria-live=\"polite\"\n aria-atomic=\"true\"\n :class=\"computedClasses\"\n >\n <slot />\n <template v-if=\"props.dismissible\">\n <BButton v-if=\"hasCloseSlot || props.closeContent\" v-bind=\"closeAttrs\" @click=\"hide\">\n <slot name=\"close\">\n {{ props.closeContent }}\n </slot>\n </BButton>\n <BCloseButton v-else :aria-label=\"props.closeLabel\" v-bind=\"closeAttrs\" @click=\"hide\" />\n </template>\n </div>\n </BTransition>\n</template>\n\n<script setup lang=\"ts\">\nimport BTransition from '../BTransition.vue'\nimport BCloseButton from '../BButton/BCloseButton.vue'\nimport BButton from '../BButton/BButton.vue'\nimport type {BAlertProps} from '../../types/ComponentProps'\nimport {computed, ref, watchEffect} from 'vue'\nimport {useCountdown} from '../../composables/useCountdown'\nimport {useDefaults} from '../../composables/useDefaults'\nimport {isEmptySlot} from '../../utils/dom'\nimport {useCountdownHover} from '../../composables/useCountdownHover'\n\nconst _props = withDefaults(defineProps<Omit<BAlertProps, 'modelValue'>>(), {\n closeClass: undefined,\n closeContent: undefined,\n closeLabel: 'Close',\n closeVariant: 'secondary',\n dismissible: false,\n fade: false,\n immediate: true,\n interval: 'requestAnimationFrame',\n noHoverPause: false,\n noResumeOnHoverLeave: false,\n showOnPause: true,\n variant: 'info',\n})\n\nconst props = useDefaults(_props, 'BAlert')\n\nconst emit = defineEmits<{\n 'close': []\n 'close-countdown': [value: number]\n 'closed': []\n}>()\n\nconst slots = defineSlots<{\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n close?: (props: Record<string, never>) => any\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n default?: (props: Record<string, never>) => any\n}>()\n\nconst element = ref<HTMLElement | null>(null)\n\nconst modelValue = defineModel<Exclude<BAlertProps['modelValue'], undefined>>({default: false})\n\nconst hasCloseSlot = computed(() => !isEmptySlot(slots.close))\nconst countdownLength = computed(() =>\n typeof modelValue.value === 'boolean' ? 0 : modelValue.value\n)\n\nconst computedClasses = computed(() => ({\n [`alert-${props.variant}`]: props.variant !== null,\n 'alert-dismissible': props.dismissible,\n}))\n\nconst closeClasses = computed(() => [props.closeClass, {'btn-close-custom': hasCloseSlot.value}])\n\nconst {\n isActive,\n pause,\n resume,\n stop,\n isPaused,\n restart,\n value: remainingMs,\n} = useCountdown(countdownLength, props.interval, {\n immediate: typeof modelValue.value === 'number' && props.immediate,\n})\nuseCountdownHover(\n element,\n computed(() => ({\n noHoverPause: props.noHoverPause,\n noResumeOnHoverLeave: props.noResumeOnHoverLeave,\n modelValueIgnoresHover: typeof modelValue.value === 'boolean',\n })),\n {pause, resume}\n)\n\nconst isAlertVisible = computed(() =>\n typeof modelValue.value === 'boolean'\n ? modelValue.value\n : isActive.value || (props.showOnPause && isPaused.value)\n)\n\nconst closeAttrs = computed(() => ({\n variant: hasCloseSlot.value ? props.closeVariant : undefined,\n class: closeClasses.value,\n}))\n\nwatchEffect(() => {\n emit('close-countdown', remainingMs.value)\n})\n\nconst hide = () => {\n emit('close')\n\n if (typeof modelValue.value === 'boolean') {\n modelValue.value = false\n } else {\n modelValue.value = 0\n stop()\n }\n\n emit('closed')\n}\n\ndefineExpose({\n pause,\n resume,\n stop,\n restart,\n})\n</script>\n\n<style lang=\"scss\" scoped>\n.btn-close-custom {\n position: absolute;\n top: 0;\n right: 0;\n z-index: 2;\n margin: var(--bs-alert-padding-y) var(--bs-alert-padding-x);\n}\n</style>\n"],"names":["_useSlots","_useModel"],"mappings":";;;;;;;;;;;;;;;;;;;;;;;;;;;;;AAmCA,UAAM,SAAS;AAeT,UAAA,QAAQ,YAAY,QAAQ,QAAQ;AAE1C,UAAM,OAAO;AAMb,UAAM,QAAQA;AAOR,UAAA,UAAU,IAAwB,IAAI;AAEtC,UAAA,aAAaC,8BAA2E;AAE9F,UAAM,eAAe,SAAS,MAAM,CAAC,YAAY,MAAM,KAAK,CAAC;AAC7D,UAAM,kBAAkB;AAAA,MAAS,MAC/B,OAAO,WAAW,UAAU,YAAY,IAAI,WAAW;AAAA,IAAA;AAGnD,UAAA,kBAAkB,SAAS,OAAO;AAAA,MACtC,CAAC,SAAS,MAAM,OAAO,EAAE,GAAG,MAAM,YAAY;AAAA,MAC9C,qBAAqB,MAAM;AAAA,IAC3B,EAAA;AAEI,UAAA,eAAe,SAAS,MAAM,CAAC,MAAM,YAAY,EAAC,oBAAoB,aAAa,MAAM,CAAA,CAAC;AAE1F,UAAA;AAAA,MACJ;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA,OAAO;AAAA,IACL,IAAA,aAAa,iBAAiB,MAAM,UAAU;AAAA,MAChD,WAAW,OAAO,WAAW,UAAU,YAAY,MAAM;AAAA,IAAA,CAC1D;AACD;AAAA,MACE;AAAA,MACA,SAAS,OAAO;AAAA,QACd,cAAc,MAAM;AAAA,QACpB,sBAAsB,MAAM;AAAA,QAC5B,wBAAwB,OAAO,WAAW,UAAU;AAAA,MAAA,EACpD;AAAA,MACF,EAAC,OAAO,OAAM;AAAA,IAAA;AAGhB,UAAM,iBAAiB;AAAA,MAAS,MAC9B,OAAO,WAAW,UAAU,YACxB,WAAW,QACX,SAAS,SAAU,MAAM,eAAe,SAAS;AAAA,IAAA;AAGjD,UAAA,aAAa,SAAS,OAAO;AAAA,MACjC,SAAS,aAAa,QAAQ,MAAM,eAAe;AAAA,MACnD,OAAO,aAAa;AAAA,IACpB,EAAA;AAEF,gBAAY,MAAM;AACX,WAAA,mBAAmB,YAAY,KAAK;AAAA,IAAA,CAC1C;AAED,UAAM,OAAO,MAAM;AACjB,WAAK,OAAO;AAER,UAAA,OAAO,WAAW,UAAU,WAAW;AACzC,mBAAW,QAAQ;AAAA,MAAA,OACd;AACL,mBAAW,QAAQ;AACd;MACP;AAEA,WAAK,QAAQ;AAAA,IAAA;AAGF,aAAA;AAAA,MACX;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,IAAA,CACD;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;"}
@@ -0,0 +1,2 @@
1
+ "use strict";const e=require("vue"),o=require("./BTransition.vue_vue_type_style_index_0_lang-dOw0_NRO.js"),l=require("./BCloseButton.vue_vue_type_script_setup_true_lang-DN7lP-29.js"),t=require("./BButton.vue_vue_type_script_setup_true_lang-CJw5OVdo.js"),a=require("./useCountdownHover-C90kBVrr.js"),s=require("./useDefaults-DA3S59IE.js"),u=require("./dom-C-F8jHop.js"),r=require("./_plugin-vue_export-helper-CC_fc8JW.js"),n=e.defineComponent({__name:"BAlert",props:e.mergeModels({closeClass:{default:void 0},closeContent:{default:void 0},closeLabel:{default:"Close"},closeVariant:{default:"secondary"},dismissible:{type:Boolean,default:!1},fade:{type:Boolean,default:!1},immediate:{type:Boolean,default:!0},interval:{default:"requestAnimationFrame"},noHoverPause:{type:Boolean,default:!1},noResumeOnHoverLeave:{type:Boolean,default:!1},showOnPause:{type:Boolean,default:!0},variant:{default:"info"}},{modelValue:{type:[Boolean,Number],default:!1},modelModifiers:{}}),emits:e.mergeModels(["close","close-countdown","closed"],["update:modelValue"]),setup(r,{expose:n,emit:i}){const d=r,c=s.useDefaults(d,"BAlert"),m=i,p=e.useSlots(),v=e.ref(null),f=e.useModel(r,"modelValue"),_=e.computed((()=>!u.isEmptySlot(p.close))),B=e.computed((()=>"boolean"==typeof f.value?0:f.value)),y=e.computed((()=>({[`alert-${c.variant}`]:null!==c.variant,"alert-dismissible":c.dismissible}))),C=e.computed((()=>[c.closeClass,{"btn-close-custom":_.value}])),{isActive:k,pause:b,resume:g,stop:w,isPaused:q,restart:H,value:V}=a.useCountdown(B,c.interval,{immediate:"number"==typeof f.value&&c.immediate});a.useCountdownHover(v,e.computed((()=>({noHoverPause:c.noHoverPause,noResumeOnHoverLeave:c.noResumeOnHoverLeave,modelValueIgnoresHover:"boolean"==typeof f.value}))),{pause:b,resume:g});const x=e.computed((()=>"boolean"==typeof f.value?f.value:k.value||c.showOnPause&&q.value)),P=e.computed((()=>({variant:_.value?c.closeVariant:void 0,class:C.value})));e.watchEffect((()=>{m("close-countdown",V.value)}));const h=()=>{m("close"),"boolean"==typeof f.value?f.value=!1:(f.value=0,w()),m("closed")};return n({pause:b,resume:g,stop:w,restart:H}),(a,s)=>(e.openBlock(),e.createBlock(o._sfc_main,{"no-fade":!e.unref(c).fade,"trans-props":{enterToClass:"show"}},{default:e.withCtx((()=>[x.value?(e.openBlock(),e.createElementBlock("div",{key:0,ref_key:"element",ref:v,class:e.normalizeClass(["alert",y.value]),role:"alert","aria-live":"polite","aria-atomic":"true"},[e.renderSlot(a.$slots,"default",{},void 0,!0),e.unref(c).dismissible?(e.openBlock(),e.createElementBlock(e.Fragment,{key:0},[_.value||e.unref(c).closeContent?(e.openBlock(),e.createBlock(t._sfc_main,e.mergeProps({key:0},P.value,{onClick:h}),{default:e.withCtx((()=>[e.renderSlot(a.$slots,"close",{},(()=>[e.createTextVNode(e.toDisplayString(e.unref(c).closeContent),1)]),!0)])),_:3},16)):(e.openBlock(),e.createBlock(l._sfc_main,e.mergeProps({key:1,"aria-label":e.unref(c).closeLabel},P.value,{onClick:h}),null,16,["aria-label"]))],64)):e.createCommentVNode("",!0)],2)):e.createCommentVNode("",!0)])),_:3},8,["no-fade"]))}}),i=r._export_sfc(n,[["__scopeId","data-v-2f3988be"]]);exports.BAlert=i;
2
+ //# sourceMappingURL=BAlert-P_IB7iko.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"BAlert-CFrrDdHt.js","sources":["../src/components/BAlert/BAlert.vue"],"sourcesContent":["<template>\n <BTransition :no-fade=\"!props.fade\" :trans-props=\"{enterToClass: 'show'}\">\n <div\n v-if=\"isAlertVisible\"\n ref=\"element\"\n class=\"alert\"\n role=\"alert\"\n aria-live=\"polite\"\n aria-atomic=\"true\"\n :class=\"computedClasses\"\n >\n <slot />\n <template v-if=\"props.dismissible\">\n <BButton v-if=\"hasCloseSlot || props.closeContent\" v-bind=\"closeAttrs\" @click=\"hide\">\n <slot name=\"close\">\n {{ props.closeContent }}\n </slot>\n </BButton>\n <BCloseButton v-else :aria-label=\"props.closeLabel\" v-bind=\"closeAttrs\" @click=\"hide\" />\n </template>\n </div>\n </BTransition>\n</template>\n\n<script setup lang=\"ts\">\nimport BTransition from '../BTransition.vue'\nimport BCloseButton from '../BButton/BCloseButton.vue'\nimport BButton from '../BButton/BButton.vue'\nimport type {BAlertProps} from '../../types/ComponentProps'\nimport {computed, ref, watchEffect} from 'vue'\nimport {useCountdown} from '../../composables/useCountdown'\nimport {useDefaults} from '../../composables/useDefaults'\nimport {isEmptySlot} from '../../utils/dom'\nimport {useCountdownHover} from '../../composables/useCountdownHover'\n\nconst _props = withDefaults(defineProps<Omit<BAlertProps, 'modelValue'>>(), {\n closeClass: undefined,\n closeContent: undefined,\n closeLabel: 'Close',\n closeVariant: 'secondary',\n dismissible: false,\n fade: false,\n immediate: true,\n interval: 'requestAnimationFrame',\n noHoverPause: false,\n noResumeOnHoverLeave: false,\n showOnPause: true,\n variant: 'info',\n})\n\nconst props = useDefaults(_props, 'BAlert')\n\nconst emit = defineEmits<{\n 'close': []\n 'close-countdown': [value: number]\n 'closed': []\n}>()\n\nconst slots = defineSlots<{\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n close?: (props: Record<string, never>) => any\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n default?: (props: Record<string, never>) => any\n}>()\n\nconst element = ref<HTMLElement | null>(null)\n\nconst modelValue = defineModel<Exclude<BAlertProps['modelValue'], undefined>>({default: false})\n\nconst hasCloseSlot = computed(() => !isEmptySlot(slots.close))\nconst countdownLength = computed(() =>\n typeof modelValue.value === 'boolean' ? 0 : modelValue.value\n)\n\nconst computedClasses = computed(() => ({\n [`alert-${props.variant}`]: props.variant !== null,\n 'alert-dismissible': props.dismissible,\n}))\n\nconst closeClasses = computed(() => [props.closeClass, {'btn-close-custom': hasCloseSlot.value}])\n\nconst {\n isActive,\n pause,\n resume,\n stop,\n isPaused,\n restart,\n value: remainingMs,\n} = useCountdown(countdownLength, props.interval, {\n immediate: typeof modelValue.value === 'number' && props.immediate,\n})\nuseCountdownHover(\n element,\n computed(() => ({\n noHoverPause: props.noHoverPause,\n noResumeOnHoverLeave: props.noResumeOnHoverLeave,\n })),\n {pause, resume}\n)\n\nconst isAlertVisible = computed(() =>\n typeof modelValue.value === 'boolean'\n ? modelValue.value\n : isActive.value || (props.showOnPause && isPaused.value)\n)\n\nconst closeAttrs = computed(() => ({\n variant: hasCloseSlot.value ? props.closeVariant : undefined,\n class: closeClasses.value,\n}))\n\nwatchEffect(() => {\n emit('close-countdown', remainingMs.value)\n})\n\nconst hide = () => {\n emit('close')\n\n if (typeof modelValue.value === 'boolean') {\n modelValue.value = false\n } else {\n modelValue.value = 0\n stop()\n }\n\n emit('closed')\n}\n\ndefineExpose({\n pause,\n resume,\n stop,\n restart,\n})\n</script>\n\n<style lang=\"scss\" scoped>\n.btn-close-custom {\n position: absolute;\n top: 0;\n right: 0;\n z-index: 2;\n margin: var(--bs-alert-padding-y) var(--bs-alert-padding-x);\n}\n</style>\n"],"names":["_props","__props","props","useDefaults","emit","__emit","slots","_useSlots","element","ref","modelValue","_useModel","hasCloseSlot","computed","isEmptySlot","close","countdownLength","value","computedClasses","variant","dismissible","closeClasses","closeClass","isActive","pause","resume","stop","isPaused","restart","remainingMs","useCountdown","interval","immediate","useCountdownHover","noHoverPause","noResumeOnHoverLeave","isAlertVisible","showOnPause","closeAttrs","closeVariant","class","watchEffect","hide","__expose"],"mappings":"kjCAmCA,MAAMA,EAASC,EAeTC,EAAQC,EAAAA,YAAYH,EAAQ,UAE5BI,EAAOC,EAMPC,EAAQC,EAAAA,WAORC,EAAUC,MAAwB,MAElCC,EAAaC,EAAAA,yBAEbC,EAAeC,EAAAA,UAAS,KAAOC,EAAYA,YAAAR,EAAMS,SACjDC,EAAkBH,EAAAA,UAAS,IACH,kBAArBH,EAAWO,MAAsB,EAAIP,EAAWO,QAGnDC,EAAkBL,EAAAA,UAAS,KAAO,CACtC,CAAC,SAASX,EAAMiB,WAA8B,OAAlBjB,EAAMiB,QAClC,oBAAqBjB,EAAMkB,gBAGvBC,EAAeR,EAAAA,UAAS,IAAM,CAACX,EAAMoB,WAAY,CAAC,mBAAoBV,EAAaK,WAEnFM,SACJA,EAAAC,MACAA,EAAAC,OACAA,EAAAC,KACAA,EAAAC,SACAA,EAAAC,QACAA,EACAX,MAAOY,GACLC,eAAad,EAAiBd,EAAM6B,SAAU,CAChDC,UAAuC,iBAArBtB,EAAWO,OAAsBf,EAAM8B,YAE3DC,EAAAA,kBACEzB,EACAK,EAAAA,UAAS,KAAO,CACdqB,aAAchC,EAAMgC,aACpBC,qBAAsBjC,EAAMiC,yBAE9B,CAACX,QAAOC,WAGV,MAAMW,EAAiBvB,EAAAA,UAAS,IACF,kBAArBH,EAAWO,MACdP,EAAWO,MACXM,EAASN,OAAUf,EAAMmC,aAAeV,EAASV,QAGjDqB,EAAazB,EAAAA,UAAS,KAAO,CACjCM,QAASP,EAAaK,MAAQf,EAAMqC,kBAAe,EACnDC,MAAOnB,EAAaJ,UAGtBwB,EAAAA,aAAY,KACLrC,EAAA,kBAAmByB,EAAYZ,MAAK,IAG3C,MAAMyB,EAAO,KACXtC,EAAK,SAE2B,kBAArBM,EAAWO,MACpBP,EAAWO,OAAQ,GAEnBP,EAAWO,MAAQ,OAIrBb,EAAK,SAAQ,SAGFuC,EAAA,CACXnB,QACAC,SACAC,OACAE"}
1
+ {"version":3,"file":"BAlert-P_IB7iko.js","sources":["../src/components/BAlert/BAlert.vue"],"sourcesContent":["<template>\n <BTransition :no-fade=\"!props.fade\" :trans-props=\"{enterToClass: 'show'}\">\n <div\n v-if=\"isAlertVisible\"\n ref=\"element\"\n class=\"alert\"\n role=\"alert\"\n aria-live=\"polite\"\n aria-atomic=\"true\"\n :class=\"computedClasses\"\n >\n <slot />\n <template v-if=\"props.dismissible\">\n <BButton v-if=\"hasCloseSlot || props.closeContent\" v-bind=\"closeAttrs\" @click=\"hide\">\n <slot name=\"close\">\n {{ props.closeContent }}\n </slot>\n </BButton>\n <BCloseButton v-else :aria-label=\"props.closeLabel\" v-bind=\"closeAttrs\" @click=\"hide\" />\n </template>\n </div>\n </BTransition>\n</template>\n\n<script setup lang=\"ts\">\nimport BTransition from '../BTransition.vue'\nimport BCloseButton from '../BButton/BCloseButton.vue'\nimport BButton from '../BButton/BButton.vue'\nimport type {BAlertProps} from '../../types/ComponentProps'\nimport {computed, ref, watchEffect} from 'vue'\nimport {useCountdown} from '../../composables/useCountdown'\nimport {useDefaults} from '../../composables/useDefaults'\nimport {isEmptySlot} from '../../utils/dom'\nimport {useCountdownHover} from '../../composables/useCountdownHover'\n\nconst _props = withDefaults(defineProps<Omit<BAlertProps, 'modelValue'>>(), {\n closeClass: undefined,\n closeContent: undefined,\n closeLabel: 'Close',\n closeVariant: 'secondary',\n dismissible: false,\n fade: false,\n immediate: true,\n interval: 'requestAnimationFrame',\n noHoverPause: false,\n noResumeOnHoverLeave: false,\n showOnPause: true,\n variant: 'info',\n})\n\nconst props = useDefaults(_props, 'BAlert')\n\nconst emit = defineEmits<{\n 'close': []\n 'close-countdown': [value: number]\n 'closed': []\n}>()\n\nconst slots = defineSlots<{\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n close?: (props: Record<string, never>) => any\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n default?: (props: Record<string, never>) => any\n}>()\n\nconst element = ref<HTMLElement | null>(null)\n\nconst modelValue = defineModel<Exclude<BAlertProps['modelValue'], undefined>>({default: false})\n\nconst hasCloseSlot = computed(() => !isEmptySlot(slots.close))\nconst countdownLength = computed(() =>\n typeof modelValue.value === 'boolean' ? 0 : modelValue.value\n)\n\nconst computedClasses = computed(() => ({\n [`alert-${props.variant}`]: props.variant !== null,\n 'alert-dismissible': props.dismissible,\n}))\n\nconst closeClasses = computed(() => [props.closeClass, {'btn-close-custom': hasCloseSlot.value}])\n\nconst {\n isActive,\n pause,\n resume,\n stop,\n isPaused,\n restart,\n value: remainingMs,\n} = useCountdown(countdownLength, props.interval, {\n immediate: typeof modelValue.value === 'number' && props.immediate,\n})\nuseCountdownHover(\n element,\n computed(() => ({\n noHoverPause: props.noHoverPause,\n noResumeOnHoverLeave: props.noResumeOnHoverLeave,\n modelValueIgnoresHover: typeof modelValue.value === 'boolean',\n })),\n {pause, resume}\n)\n\nconst isAlertVisible = computed(() =>\n typeof modelValue.value === 'boolean'\n ? modelValue.value\n : isActive.value || (props.showOnPause && isPaused.value)\n)\n\nconst closeAttrs = computed(() => ({\n variant: hasCloseSlot.value ? props.closeVariant : undefined,\n class: closeClasses.value,\n}))\n\nwatchEffect(() => {\n emit('close-countdown', remainingMs.value)\n})\n\nconst hide = () => {\n emit('close')\n\n if (typeof modelValue.value === 'boolean') {\n modelValue.value = false\n } else {\n modelValue.value = 0\n stop()\n }\n\n emit('closed')\n}\n\ndefineExpose({\n pause,\n resume,\n stop,\n restart,\n})\n</script>\n\n<style lang=\"scss\" scoped>\n.btn-close-custom {\n position: absolute;\n top: 0;\n right: 0;\n z-index: 2;\n margin: var(--bs-alert-padding-y) var(--bs-alert-padding-x);\n}\n</style>\n"],"names":["_props","__props","props","useDefaults","emit","__emit","slots","_useSlots","element","ref","modelValue","_useModel","hasCloseSlot","computed","isEmptySlot","close","countdownLength","value","computedClasses","variant","dismissible","closeClasses","closeClass","isActive","pause","resume","stop","isPaused","restart","remainingMs","useCountdown","interval","immediate","useCountdownHover","noHoverPause","noResumeOnHoverLeave","modelValueIgnoresHover","isAlertVisible","showOnPause","closeAttrs","closeVariant","class","watchEffect","hide","__expose"],"mappings":"kjCAmCA,MAAMA,EAASC,EAeTC,EAAQC,EAAAA,YAAYH,EAAQ,UAE5BI,EAAOC,EAMPC,EAAQC,EAAAA,WAORC,EAAUC,MAAwB,MAElCC,EAAaC,EAAAA,yBAEbC,EAAeC,EAAAA,UAAS,KAAOC,EAAYA,YAAAR,EAAMS,SACjDC,EAAkBH,EAAAA,UAAS,IACH,kBAArBH,EAAWO,MAAsB,EAAIP,EAAWO,QAGnDC,EAAkBL,EAAAA,UAAS,KAAO,CACtC,CAAC,SAASX,EAAMiB,WAA8B,OAAlBjB,EAAMiB,QAClC,oBAAqBjB,EAAMkB,gBAGvBC,EAAeR,EAAAA,UAAS,IAAM,CAACX,EAAMoB,WAAY,CAAC,mBAAoBV,EAAaK,WAEnFM,SACJA,EAAAC,MACAA,EAAAC,OACAA,EAAAC,KACAA,EAAAC,SACAA,EAAAC,QACAA,EACAX,MAAOY,GACLC,eAAad,EAAiBd,EAAM6B,SAAU,CAChDC,UAAuC,iBAArBtB,EAAWO,OAAsBf,EAAM8B,YAE3DC,EAAAA,kBACEzB,EACAK,EAAAA,UAAS,KAAO,CACdqB,aAAchC,EAAMgC,aACpBC,qBAAsBjC,EAAMiC,qBAC5BC,uBAAoD,kBAArB1B,EAAWO,UAE5C,CAACO,QAAOC,WAGV,MAAMY,EAAiBxB,EAAAA,UAAS,IACF,kBAArBH,EAAWO,MACdP,EAAWO,MACXM,EAASN,OAAUf,EAAMoC,aAAeX,EAASV,QAGjDsB,EAAa1B,EAAAA,UAAS,KAAO,CACjCM,QAASP,EAAaK,MAAQf,EAAMsC,kBAAe,EACnDC,MAAOpB,EAAaJ,UAGtByB,EAAAA,aAAY,KACLtC,EAAA,kBAAmByB,EAAYZ,MAAK,IAG3C,MAAM0B,EAAO,KACXvC,EAAK,SAE2B,kBAArBM,EAAWO,MACpBP,EAAWO,OAAQ,GAEnBP,EAAWO,MAAQ,OAIrBb,EAAK,SAAQ,SAGFwC,EAAA,CACXpB,QACAC,SACAC,OACAE"}
@@ -1,2 +1,2 @@
1
- "use strict";const e=require("vue"),o=require("./src/composables/usePopoverController/index.umd.js"),r=require("./floatingUi-D2izbGt_.js"),l=require("./BTooltip.vue_vue_type_script_setup_true_lang-akY-MpXr.js"),t=e.defineComponent({__name:"BPopoverOrchestrator",setup(t,{expose:n}){const p=o.usePopoverController();return n({...p}),(o,t)=>{var n,a;return e.openBlock(),e.createElementBlock(e.Fragment,null,[(e.openBlock(!0),e.createElementBlock(e.Fragment,null,e.renderList(null==(n=e.unref(p).popovers)?void 0:n.value,(([o,l])=>(e.openBlock(),e.createBlock(e.resolveDynamicComponent(l.component??r._sfc_main),e.mergeProps({key:o,ref_for:!0},l.props,{"model-value":l.props._modelValue,target:l.props._target,"onUpdate:modelValue":r=>{var t,n;return null==(n=(t=e.unref(p)).setPopover)?void 0:n.call(t,o,{...l.props,_modelValue:r})}}),null,16,["model-value","target","onUpdate:modelValue"])))),128)),(e.openBlock(!0),e.createElementBlock(e.Fragment,null,e.renderList(null==(a=e.unref(p).tooltips)?void 0:a.value,(([o,r])=>(e.openBlock(),e.createBlock(e.resolveDynamicComponent(r.component??l._sfc_main),e.mergeProps({key:o,ref_for:!0},r.props,{"model-value":r.props._modelValue,target:r.props._target,"onUpdate:modelValue":l=>{var t,n;return null==(n=(t=e.unref(p)).setTooltip)?void 0:n.call(t,o,{...r.props,_modelValue:l})}}),null,16,["model-value","target","onUpdate:modelValue"])))),128))],64)}}});exports._sfc_main=t;
2
- //# sourceMappingURL=BPopoverOrchestrator.vue_vue_type_script_setup_true_lang-7VEbm0SS.js.map
1
+ "use strict";const e=require("vue"),o=require("./src/composables/usePopoverController/index.umd.js"),r=require("./floatingUi-D2izbGt_.js"),l=require("./BTooltip.vue_vue_type_script_setup_true_lang-o2dcBqfI.js"),t=e.defineComponent({__name:"BPopoverOrchestrator",setup(t,{expose:n}){const p=o.usePopoverController();return n({...p}),(o,t)=>{var n,a;return e.openBlock(),e.createElementBlock(e.Fragment,null,[(e.openBlock(!0),e.createElementBlock(e.Fragment,null,e.renderList(null==(n=e.unref(p).popovers)?void 0:n.value,(([o,l])=>(e.openBlock(),e.createBlock(e.resolveDynamicComponent(l.component??r._sfc_main),e.mergeProps({key:o,ref_for:!0},l.props,{"model-value":l.props._modelValue,target:l.props._target,"onUpdate:modelValue":r=>{var t,n;return null==(n=(t=e.unref(p)).setPopover)?void 0:n.call(t,o,{...l.props,_modelValue:r})}}),null,16,["model-value","target","onUpdate:modelValue"])))),128)),(e.openBlock(!0),e.createElementBlock(e.Fragment,null,e.renderList(null==(a=e.unref(p).tooltips)?void 0:a.value,(([o,r])=>(e.openBlock(),e.createBlock(e.resolveDynamicComponent(r.component??l._sfc_main),e.mergeProps({key:o,ref_for:!0},r.props,{"model-value":r.props._modelValue,target:r.props._target,"onUpdate:modelValue":l=>{var t,n;return null==(n=(t=e.unref(p)).setTooltip)?void 0:n.call(t,o,{...r.props,_modelValue:l})}}),null,16,["model-value","target","onUpdate:modelValue"])))),128))],64)}}});exports._sfc_main=t;
2
+ //# sourceMappingURL=BPopoverOrchestrator.vue_vue_type_script_setup_true_lang-CS3Vqld3.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"BPopoverOrchestrator.vue_vue_type_script_setup_true_lang-7VEbm0SS.js","sources":["../src/components/BPopover/BPopoverOrchestrator.vue"],"sourcesContent":["<template>\n <component\n :is=\"popover.component ?? BPopover\"\n v-for=\"[self, popover] in tools.popovers?.value\"\n :key=\"self\"\n v-bind=\"popover.props\"\n :model-value=\"popover.props._modelValue\"\n :target=\"popover.props._target\"\n @update:model-value=\"tools.setPopover?.(self, {...popover.props, _modelValue: $event})\"\n />\n <component\n :is=\"tooltip.component ?? BTooltip\"\n v-for=\"[self, tooltip] in tools.tooltips?.value\"\n :key=\"self\"\n v-bind=\"tooltip.props\"\n :model-value=\"tooltip.props._modelValue\"\n :target=\"tooltip.props._target\"\n @update:model-value=\"tools.setTooltip?.(self, {...tooltip.props, _modelValue: $event})\"\n />\n</template>\n\n<script setup lang=\"ts\">\nimport {usePopoverController} from '../../composables/usePopoverController'\nimport BPopover from './BPopover.vue'\nimport BTooltip from '../BTooltip/BTooltip.vue'\n\nconst tools = usePopoverController()\n\ndefineExpose({\n ...tools,\n})\n</script>\n"],"names":["tools","usePopoverController","__expose"],"mappings":"0RA0BM,MAAAA,EAAQC,EAAAA,8BAEDC,EAAA,IACRF"}
1
+ {"version":3,"file":"BPopoverOrchestrator.vue_vue_type_script_setup_true_lang-CS3Vqld3.js","sources":["../src/components/BPopover/BPopoverOrchestrator.vue"],"sourcesContent":["<template>\n <component\n :is=\"popover.component ?? BPopover\"\n v-for=\"[self, popover] in tools.popovers?.value\"\n :key=\"self\"\n v-bind=\"popover.props\"\n :model-value=\"popover.props._modelValue\"\n :target=\"popover.props._target\"\n @update:model-value=\"tools.setPopover?.(self, {...popover.props, _modelValue: $event})\"\n />\n <component\n :is=\"tooltip.component ?? BTooltip\"\n v-for=\"[self, tooltip] in tools.tooltips?.value\"\n :key=\"self\"\n v-bind=\"tooltip.props\"\n :model-value=\"tooltip.props._modelValue\"\n :target=\"tooltip.props._target\"\n @update:model-value=\"tools.setTooltip?.(self, {...tooltip.props, _modelValue: $event})\"\n />\n</template>\n\n<script setup lang=\"ts\">\nimport {usePopoverController} from '../../composables/usePopoverController'\nimport BPopover from './BPopover.vue'\nimport BTooltip from '../BTooltip/BTooltip.vue'\n\nconst tools = usePopoverController()\n\ndefineExpose({\n ...tools,\n})\n</script>\n"],"names":["tools","usePopoverController","__expose"],"mappings":"0RA0BM,MAAAA,EAAQC,EAAAA,8BAEDC,EAAA,IACRF"}
@@ -1,7 +1,7 @@
1
1
  import { defineComponent, openBlock, createElementBlock, Fragment, renderList, unref, createBlock, resolveDynamicComponent, mergeProps } from "vue";
2
2
  import { usePopoverController } from "./src/composables/usePopoverController/index.mjs";
3
3
  import { _ as _sfc_main$1 } from "./floatingUi-B76xsVek.mjs";
4
- import { _ as _sfc_main$2 } from "./BTooltip.vue_vue_type_script_setup_true_lang-Cq_gfow1.mjs";
4
+ import { _ as _sfc_main$2 } from "./BTooltip.vue_vue_type_script_setup_true_lang-Do0IxGJx.mjs";
5
5
  const _sfc_main = /* @__PURE__ */ defineComponent({
6
6
  __name: "BPopoverOrchestrator",
7
7
  setup(__props, { expose: __expose }) {
@@ -45,4 +45,4 @@ const _sfc_main = /* @__PURE__ */ defineComponent({
45
45
  export {
46
46
  _sfc_main as _
47
47
  };
48
- //# sourceMappingURL=BPopoverOrchestrator.vue_vue_type_script_setup_true_lang-MOQOWSad.mjs.map
48
+ //# sourceMappingURL=BPopoverOrchestrator.vue_vue_type_script_setup_true_lang-DT9DiFfu.mjs.map
@@ -1 +1 @@
1
- {"version":3,"file":"BPopoverOrchestrator.vue_vue_type_script_setup_true_lang-MOQOWSad.mjs","sources":["../src/components/BPopover/BPopoverOrchestrator.vue"],"sourcesContent":["<template>\n <component\n :is=\"popover.component ?? BPopover\"\n v-for=\"[self, popover] in tools.popovers?.value\"\n :key=\"self\"\n v-bind=\"popover.props\"\n :model-value=\"popover.props._modelValue\"\n :target=\"popover.props._target\"\n @update:model-value=\"tools.setPopover?.(self, {...popover.props, _modelValue: $event})\"\n />\n <component\n :is=\"tooltip.component ?? BTooltip\"\n v-for=\"[self, tooltip] in tools.tooltips?.value\"\n :key=\"self\"\n v-bind=\"tooltip.props\"\n :model-value=\"tooltip.props._modelValue\"\n :target=\"tooltip.props._target\"\n @update:model-value=\"tools.setTooltip?.(self, {...tooltip.props, _modelValue: $event})\"\n />\n</template>\n\n<script setup lang=\"ts\">\nimport {usePopoverController} from '../../composables/usePopoverController'\nimport BPopover from './BPopover.vue'\nimport BTooltip from '../BTooltip/BTooltip.vue'\n\nconst tools = usePopoverController()\n\ndefineExpose({\n ...tools,\n})\n</script>\n"],"names":[],"mappings":";;;;;;;AA0BA,UAAM,QAAQ;AAED,aAAA;AAAA,MACX,GAAG;AAAA,IAAA,CACJ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;"}
1
+ {"version":3,"file":"BPopoverOrchestrator.vue_vue_type_script_setup_true_lang-DT9DiFfu.mjs","sources":["../src/components/BPopover/BPopoverOrchestrator.vue"],"sourcesContent":["<template>\n <component\n :is=\"popover.component ?? BPopover\"\n v-for=\"[self, popover] in tools.popovers?.value\"\n :key=\"self\"\n v-bind=\"popover.props\"\n :model-value=\"popover.props._modelValue\"\n :target=\"popover.props._target\"\n @update:model-value=\"tools.setPopover?.(self, {...popover.props, _modelValue: $event})\"\n />\n <component\n :is=\"tooltip.component ?? BTooltip\"\n v-for=\"[self, tooltip] in tools.tooltips?.value\"\n :key=\"self\"\n v-bind=\"tooltip.props\"\n :model-value=\"tooltip.props._modelValue\"\n :target=\"tooltip.props._target\"\n @update:model-value=\"tools.setTooltip?.(self, {...tooltip.props, _modelValue: $event})\"\n />\n</template>\n\n<script setup lang=\"ts\">\nimport {usePopoverController} from '../../composables/usePopoverController'\nimport BPopover from './BPopover.vue'\nimport BTooltip from '../BTooltip/BTooltip.vue'\n\nconst tools = usePopoverController()\n\ndefineExpose({\n ...tools,\n})\n</script>\n"],"names":[],"mappings":";;;;;;;AA0BA,UAAM,QAAQ;AAED,aAAA;AAAA,MACX,GAAG;AAAA,IAAA,CACJ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;"}
@@ -0,0 +1,2 @@
1
+ "use strict";const e=require("vue"),t=require("./object-B-6ddRYH.js"),l=require("./BTableSimple.vue_vue_type_script_setup_true_lang-ph_fYlOS.js"),o=require("./useDefaults-DA3S59IE.js"),a=require("./stringUtils-D2ajpVM0.js"),r=require("./index-BthPTI3K.js"),n=(e,l,o)=>{const a=t.get(e,l);return o&&"function"==typeof o?o(a,l,e):a},s=e=>"object"==typeof e&&null!==e,d=e=>"object"==typeof e&&null!==e&&"key"in e,i=e.defineComponent({__name:"BTbody",props:{variant:{default:null}},setup(t){const l=t,a=o.useDefaults(l,"BTbody"),r=e.computed((()=>({[`thead-${a.variant}`]:null!==a.variant})));return(t,l)=>(e.openBlock(),e.createElementBlock("tbody",{class:e.normalizeClass(r.value)},[e.renderSlot(t.$slots,"default")],2))}}),u=["scope","colspan","rowspan","data-label"],c={key:0},f=e.defineComponent({__name:"BTd",props:{colspan:{default:void 0},rowspan:{default:void 0},stackedHeading:{default:void 0},stickyColumn:{type:Boolean,default:!1},variant:{default:null}},setup(t){const l=t,a=o.useDefaults(l,"BTd"),r=e.computed((()=>({[`table-${a.variant}`]:null!==a.variant,"b-table-sticky-column":a.stickyColumn,"table-b-table-default":a.stickyColumn&&null===a.variant}))),n=e.computed((()=>a.colspan?"colspan":a.rowspan?"rowspan":"col"));return(t,l)=>(e.openBlock(),e.createElementBlock("td",{scope:n.value,class:e.normalizeClass(r.value),colspan:e.unref(a).colspan,rowspan:e.unref(a).rowspan,"data-label":e.unref(a).stackedHeading},[e.unref(a).stackedHeading?(e.openBlock(),e.createElementBlock("div",c,[e.renderSlot(t.$slots,"default")])):e.renderSlot(t.$slots,"default",{key:1})],10,u))}}),v=e.defineComponent({__name:"BTfoot",props:{variant:{default:null}},setup(t){const l=t,a=o.useDefaults(l,"BTfoot"),r=e.computed((()=>({[`table-${a.variant}`]:null!==a.variant})));return(t,l)=>(e.openBlock(),e.createElementBlock("tfoot",{class:e.normalizeClass(r.value)},[e.renderSlot(t.$slots,"default")],2))}}),p=["scope","colspan","rowspan","data-label"],m={key:0},y=e.defineComponent({__name:"BTh",props:{colspan:{default:void 0},rowspan:{default:void 0},stackedHeading:{default:void 0},stickyColumn:{type:Boolean,default:!1},variant:{default:null}},setup(t){const l=t,a=o.useDefaults(l,"BTh"),r=e.computed((()=>({[`table-${a.variant}`]:null!==a.variant,"b-table-sticky-column":a.stickyColumn,"table-b-table-default":a.stickyColumn&&null===a.variant}))),n=e.computed((()=>a.colspan?"colspan":a.rowspan?"rowspan":"col"));return(t,l)=>(e.openBlock(),e.createElementBlock("th",{scope:n.value,class:e.normalizeClass(r.value),colspan:e.unref(a).colspan,rowspan:e.unref(a).rowspan,"data-label":e.unref(a).stackedHeading},[void 0!==e.unref(a).stackedHeading?(e.openBlock(),e.createElementBlock("div",m,[e.renderSlot(t.$slots,"default")])):e.renderSlot(t.$slots,"default",{key:1})],10,p))}}),k=e.defineComponent({__name:"BThead",props:{variant:{default:null}},setup(t){const l=t,a=o.useDefaults(l,"BThead"),r=e.computed((()=>({[`table-${a.variant}`]:null!==a.variant})));return(t,l)=>(e.openBlock(),e.createElementBlock("thead",{class:e.normalizeClass(r.value)},[e.renderSlot(t.$slots,"default")],2))}}),b=e.defineComponent({__name:"BTr",props:{variant:{default:null}},setup(t){const l=t,a=o.useDefaults(l,"BTr"),r=e.computed((()=>({[`table-${a.variant}`]:null!==a.variant})));return(t,l)=>(e.openBlock(),e.createElementBlock("tr",{class:e.normalizeClass(r.value)},[e.renderSlot(t.$slots,"default")],2))}}),g=e=>"string"==typeof e?a.titleCase(e):void 0!==e.label?e.label:"string"==typeof e.key?a.titleCase(e.key):e.key,w=["TD","TH","TR"],h=["a","a *","button","button *","input:not(.disabled):not([disabled])","select:not(.disabled):not([disabled])","textarea:not(.disabled):not([disabled])",'[role="link"]','[role="link"] *','[role="button"]','[role="button"] *',"[tabindex]:not(.disabled):not([disabled])"].join(","),C=e=>{if(!e||!e.target)return!1;const t=e.target;if("disabled"in t&&t.disabled||-1!==w.indexOf(t.tagName))return!1;if(t.closest(".dropdown-menu"))return!0;const l="LABEL"===t.tagName?t:t.closest("label");if(l){const e=l.getAttribute("for"),t=e?document.getElementById(e):l.querySelector("input, select, textarea");if(t&&!t.disabled)return!0}return t.matches(h)},B={key:0,class:"b-table-stacked-label"},S={class:"d-inline-flex flex-nowrap align-items-center gap-1"},x={key:2},$=e.defineComponent({__name:"BTableLite",props:{align:{default:void 0},caption:{default:void 0},captionHtml:{default:void 0},detailsTdClass:{default:void 0},fieldColumnClass:{type:[Function,String,Object,Array],default:void 0},fields:{default:()=>[]},footClone:{type:Boolean,default:!1},footRowVariant:{default:void 0},footVariant:{default:void 0},headRowVariant:{default:void 0},headVariant:{default:void 0},items:{default:()=>[]},labelStacked:{type:Boolean,default:!1},modelValue:{default:void 0},primaryKey:{default:void 0},tbodyClass:{default:void 0},tbodyTrAttrs:{type:[Function,Object],default:void 0},tbodyTrClass:{type:[Function,String,Array,Object],default:void 0},tfootClass:{default:void 0},tfootTrClass:{default:void 0},theadClass:{default:void 0},theadTrClass:{default:void 0},bordered:{type:Boolean,default:void 0},borderless:{type:Boolean,default:void 0},borderVariant:{default:void 0},captionTop:{type:Boolean,default:void 0},dark:{type:Boolean,default:void 0},fixed:{type:Boolean,default:void 0},hover:{type:Boolean,default:void 0},id:{default:void 0},noBorderCollapse:{type:Boolean,default:void 0},outlined:{type:Boolean,default:void 0},responsive:{type:[Boolean,String],default:void 0},small:{type:Boolean,default:void 0},stacked:{type:[Boolean,String],default:void 0},stickyHeader:{type:[Boolean,String,Number],default:void 0},striped:{type:Boolean,default:void 0},stripedColumns:{type:Boolean,default:void 0},variant:{default:void 0},tableAttrs:{},tableClass:{default:void 0}},emits:["head-clicked","row-clicked","row-dblclicked","row-contextmenu","row-hovered","row-unhovered","row-middle-clicked"],setup(r,{emit:u}){const c=r,p=o.useDefaults(c,"BTableLite"),m=u,w=e.ref(new WeakMap);e.watch((()=>p.items),(e=>{e.forEach((e=>{s(e)&&w.value.set(...(e=>[e,e._showDetails])(e))}))}),{deep:!0,immediate:!0});const h=e.computed((()=>[p.tableClass,{[`align-${p.align}`]:void 0!==p.align}])),$=e.computed((()=>{if(!p.fields.length&&p.items.length){const[e]=p.items;return s(e)||Array.isArray(e)?Object.keys(e).map((e=>{const t=a.startCase(e);return{key:e,label:t,tdAttr:!0===p.stacked?{"data-label":t}:void 0}})):[{key:"",_noHeader:!0}]}return p.fields.map((e=>{if(d(e))return{...e,tdAttr:!0===p.stacked?{"data-label":a.startCase(e.key),...e.tdAttr}:e.tdAttr};const t=a.startCase(e);return{key:e,label:t,tdAttr:!0===p.stacked?{"data-label":t}:void 0}}))})),T=e.computed((()=>$.value.length)),_=e.computed((()=>!(T.value>0&&$.value.every((e=>!0===e._noHeader))))),V=(e,l,o)=>{const a=String(l.key),r=t.get(e,a);return l.thAttr&&"function"==typeof l.thAttr?l.thAttr(r,a,e,o):l.thAttr},N=(e,t,l=!1)=>{m("head-clicked",e.key,e,t,l)},P=e=>{if(s(e)){const t=w.value.get(e);w.value.set(e,!t),e._showDetails=!t}},A=e=>[e.class,e.thClass,{"b-table-sticky-column":e.stickyColumn},p.fieldColumnClass?"function"==typeof p.fieldColumnClass?p.fieldColumnClass(e):p.fieldColumnClass:null],E=(e,l)=>{var o,a;const r=t.get(l,String(e.key));return[e.class,"function"==typeof e.tdClass?e.tdClass(r,String(e.key),l):e.tdClass,s(l)&&(null==(o=l._cellVariants)?void 0:o[e.key])?`table-${null==(a=l._cellVariants)?void 0:a[e.key]}`:null,{"b-table-sticky-column":e.stickyColumn}]},D=(e,t)=>p.tbodyTrAttrs?"function"==typeof p.tbodyTrAttrs?p.tbodyTrAttrs(e,t):p.tbodyTrAttrs:null,R=(e,t)=>p.tbodyTrClass?"function"==typeof p.tbodyTrClass?p.tbodyTrClass(e,t):p.tbodyTrClass:null;return(o,a)=>(e.openBlock(),e.createBlock(l._sfc_main,{id:e.unref(p).id,bordered:e.unref(p).bordered,borderless:e.unref(p).borderless,"border-variant":e.unref(p).borderVariant,"caption-top":e.unref(p).captionTop,dark:e.unref(p).dark,fixed:e.unref(p).fixed,hover:e.unref(p).hover,"no-border-collapse":e.unref(p).noBorderCollapse,outlined:e.unref(p).outlined,responsive:e.unref(p).responsive,small:e.unref(p).small,stacked:e.unref(p).stacked,"sticky-header":e.unref(p).stickyHeader,striped:e.unref(p).striped,"table-class":h.value,variant:e.unref(p).variant,"striped-columns":e.unref(p).stripedColumns},{default:e.withCtx((()=>[e.withDirectives(e.createVNode(k,{variant:e.unref(p).headVariant,class:e.normalizeClass(e.unref(p).theadClass)},{default:e.withCtx((()=>[e.renderSlot(o.$slots,"thead-top",{columns:T.value,fields:$.value}),e.createVNode(b,{variant:e.unref(p).headRowVariant,class:e.normalizeClass(e.unref(p).theadTrClass)},{default:e.withCtx((()=>[(e.openBlock(!0),e.createElementBlock(e.Fragment,null,e.renderList($.value,(t=>(e.openBlock(),e.createBlock(y,e.mergeProps({key:t.key,scope:"col",class:A(t),title:t.headerTitle,variant:t.variant,abbr:t.headerAbbr,style:t.thStyle,ref_for:!0},V(null,t,"top"),{onClick:e=>N(t,e)}),{default:e.withCtx((()=>[e.renderSlot(o.$slots,o.$slots[`head(${String(t.key)})`]?`head(${String(t.key)})`:"head()",{label:t.label,column:t.key,field:t,isFoot:!1},(()=>[e.createTextVNode(e.toDisplayString(e.unref(g)(t)),1)]))])),_:2},1040,["class","title","variant","abbr","style","onClick"])))),128))])),_:3},8,["variant","class"]),o.$slots["thead-sub"]?(e.openBlock(),e.createBlock(b,{key:0},{default:e.withCtx((()=>[(e.openBlock(!0),e.createElementBlock(e.Fragment,null,e.renderList($.value,(t=>(e.openBlock(),e.createBlock(f,{key:t.key,scope:"col",variant:t.variant,class:e.normalizeClass([t.class,t.thClass])},{default:e.withCtx((()=>[e.renderSlot(o.$slots,"thead-sub",{items:e.unref(p).items,fields:$.value,field:t},(()=>[e.createTextVNode(e.toDisplayString(t.label),1)]))])),_:2},1032,["variant","class"])))),128))])),_:3})):e.createCommentVNode("",!0)])),_:3},8,["variant","class"]),[[e.vShow,_.value]]),e.createVNode(i,{class:e.normalizeClass(e.unref(p).tbodyClass)},{default:e.withCtx((()=>[e.renderSlot(o.$slots,"custom-body",{fields:$.value,items:e.unref(p).items,columns:T.value},(()=>[!e.unref(p).stacked&&o.$slots["top-row"]?(e.openBlock(),e.createBlock(b,e.mergeProps({key:0,class:R(null,"row-top")},D(null,"row-top")),{default:e.withCtx((()=>[e.renderSlot(o.$slots,"top-row",{columns:T.value,fields:$.value})])),_:3},16,["class"])):e.createCommentVNode("",!0),(e.openBlock(!0),e.createElementBlock(e.Fragment,null,e.renderList(e.unref(p).items,((l,a)=>(e.openBlock(),e.createElementBlock(e.Fragment,{key:e.unref(p).primaryKey?e.unref(t.get)(l,e.unref(p).primaryKey):a},[e.createVNode(b,e.mergeProps({class:R(l,"row"),variant:e.unref(s)(l)?l._rowVariant:void 0,ref_for:!0},D(l,"row"),{onClick:t=>!e.unref(C)(t)&&m("row-clicked",l,a,t),onDblclick:t=>!e.unref(C)(t)&&m("row-dblclicked",l,a,t),onContextmenu:t=>!e.unref(C)(t)&&m("row-contextmenu",l,a,t),onMouseenter:t=>!e.unref(C)(t)&&m("row-hovered",l,a,t),onMouseleave:t=>!e.unref(C)(t)&&m("row-unhovered",l,a,t),onMousedown:e=>((e,t,l)=>{1!==l.button||C(l)||m("row-middle-clicked",e,t,l)})(l,a,e)}),{default:e.withCtx((()=>[(e.openBlock(!0),e.createElementBlock(e.Fragment,null,e.renderList($.value,(r=>{var d;return e.openBlock(),e.createBlock(f,e.mergeProps({key:r.key,variant:e.unref(s)(l)&&(null==(d=l._cellVariants)?void 0:d[r.key])?null:r.variant,class:E(r,l),ref_for:!0},((e,l,o)=>{const a=t.get(e,l);return o&&"function"==typeof o?o(a,l,e):o})(l,String(r.key),r.tdAttr)),{default:e.withCtx((()=>[e.unref(p).stacked&&e.unref(p).labelStacked?(e.openBlock(),e.createElementBlock("label",B,e.toDisplayString(e.unref(g)(r)),1)):e.createCommentVNode("",!0),e.renderSlot(o.$slots,o.$slots[`cell(${String(r.key)})`]?`cell(${String(r.key)})`:"cell()",{value:e.unref(n)(l,String(r.key),r.formatter),unformatted:e.unref(t.get)(l,String(r.key)),index:a,item:l,field:r,items:o.items,toggleDetails:()=>P(l),detailsShowing:!!e.unref(s)(l)&&(w.value.get(l)??!1)},(()=>[o.$slots[`cell(${String(r.key)})`]||o.$slots["cell()"]?e.createCommentVNode("",!0):(e.openBlock(),e.createElementBlock(e.Fragment,{key:0},[e.createTextVNode(e.toDisplayString(e.unref(n)(l,String(r.key),r.formatter)),1)],64))]))])),_:2},1040,["variant","class"])})),128))])),_:2},1040,["class","variant","onClick","onDblclick","onContextmenu","onMouseenter","onMouseleave","onMousedown"]),e.unref(s)(l)&&!0===w.value.get(l)&&o.$slots["row-details"]?(e.openBlock(),e.createElementBlock(e.Fragment,{key:0},[e.createVNode(b,{"aria-hidden":"true",role:"presentation",class:"d-none"}),e.createVNode(b,e.mergeProps({class:R(l,"row-details"),variant:l._rowVariant,ref_for:!0},D(l,"row-details")),{default:e.withCtx((()=>[e.createVNode(f,{colspan:T.value,class:e.normalizeClass(o.detailsTdClass)},{default:e.withCtx((()=>[e.renderSlot(o.$slots,"row-details",{item:l,toggleDetails:()=>P(l),fields:$.value,index:a})])),_:2},1032,["colspan","class"])])),_:2},1040,["class","variant"])],64)):e.createCommentVNode("",!0)],64)))),128)),!e.unref(p).stacked&&o.$slots["bottom-row"]?(e.openBlock(),e.createBlock(b,e.mergeProps({key:1,class:["bottom-row",R(null,"row-bottom")]},D(null,"row-bottom")),{default:e.withCtx((()=>[e.renderSlot(o.$slots,"bottom-row",{columns:T.value,fields:$.value})])),_:3},16,["class"])):e.createCommentVNode("",!0)]))])),_:3},8,["class"]),e.unref(p).footClone?(e.openBlock(),e.createBlock(v,{key:0,variant:e.unref(p).footVariant,class:e.normalizeClass(e.unref(p).tfootClass)},{default:e.withCtx((()=>[e.createVNode(b,{variant:e.unref(p).footRowVariant,class:e.normalizeClass(e.unref(p).tfootTrClass)},{default:e.withCtx((()=>[(e.openBlock(!0),e.createElementBlock(e.Fragment,null,e.renderList($.value,(t=>(e.openBlock(),e.createBlock(y,e.mergeProps({key:t.key,scope:"col",class:A(t),title:t.headerTitle,abbr:t.headerAbbr,style:t.thStyle,variant:t.variant,ref_for:!0},V(null,t,"bottom"),{onClick:e=>N(t,e,!0)}),{default:e.withCtx((()=>[e.createElementVNode("div",S,[e.createElementVNode("div",null,[e.renderSlot(o.$slots,o.$slots[`foot(${String(t.key)})`]?`foot(${String(t.key)})`:"foot()",{label:t.label,column:t.key,field:t,isFoot:!0},(()=>[e.createTextVNode(e.toDisplayString(e.unref(g)(t)),1)]))])])])),_:2},1040,["class","title","abbr","style","variant","onClick"])))),128))])),_:3},8,["variant","class"])])),_:3},8,["variant","class"])):o.$slots["custom-foot"]?(e.openBlock(),e.createBlock(v,{key:1},{default:e.withCtx((()=>[e.renderSlot(o.$slots,"custom-foot",{fields:$.value,items:e.unref(p).items,columns:T.value})])),_:3})):e.createCommentVNode("",!0),o.$slots["table-caption"]||e.unref(p).caption?(e.openBlock(),e.createElementBlock("caption",x,[e.renderSlot(o.$slots,"table-caption",{},(()=>[e.createTextVNode(e.toDisplayString(e.unref(p).caption),1)]))])):e.createCommentVNode("",!0)])),_:3},8,["id","bordered","borderless","border-variant","caption-top","dark","fixed","hover","no-border-collapse","outlined","responsive","small","stacked","sticky-header","striped","table-class","variant","striped-columns"]))}}),T={style:{opacity:.4},xmlns:"http://www.w3.org/2000/svg",width:"24",height:"24",fill:"currentColor",class:"bi bi-arrow-up-short",viewBox:"0 0 16 16","aria-hidden":""},_={role:"alert","aria-live":"polite"},V={class:"text-center my-2"},N=e.defineComponent({__name:"BTable",props:e.mergeModels({provider:{default:void 0},noProvider:{default:void 0},noProviderPaging:{type:Boolean,default:!1},noProviderSorting:{type:Boolean,default:!1},noProviderFiltering:{type:Boolean,default:!1},mustSort:{type:[Boolean,Array],default:!1},selectable:{type:Boolean,default:!1},multisort:{type:Boolean,default:!1},stickySelect:{type:Boolean,default:!1},selectHead:{type:[Boolean,String],default:!0},selectMode:{default:"multi"},selectionVariant:{default:"primary"},busyLoadingText:{default:"Loading..."},perPage:{default:Number.POSITIVE_INFINITY},currentPage:{default:1},filter:{default:void 0},filterable:{default:void 0},noLocalSorting:{type:Boolean,default:!1},noSelectOnClick:{type:Boolean,default:!1},noSortableIcon:{type:Boolean,default:!1},emptyFilteredText:{default:"There are no records matching your request"},emptyText:{default:"There are no records to show"},showEmpty:{type:Boolean,default:!1},align:{default:void 0},caption:{default:void 0},captionHtml:{default:void 0},detailsTdClass:{default:void 0},fieldColumnClass:{type:[Function,String,Object,Array],default:void 0},fields:{default:()=>[]},footClone:{type:Boolean,default:void 0},footRowVariant:{default:void 0},footVariant:{default:void 0},headRowVariant:{default:void 0},headVariant:{default:void 0},items:{default:()=>[]},labelStacked:{type:Boolean,default:void 0},modelValue:{default:void 0},primaryKey:{default:void 0},tbodyClass:{default:void 0},tbodyTrAttrs:{},tbodyTrClass:{type:[Function,String,Array,Object],default:void 0},tfootClass:{default:void 0},tfootTrClass:{default:void 0},theadClass:{default:void 0},theadTrClass:{default:void 0},bordered:{type:Boolean,default:void 0},borderless:{type:Boolean,default:void 0},borderVariant:{default:void 0},captionTop:{type:Boolean,default:void 0},dark:{type:Boolean,default:void 0},fixed:{type:Boolean,default:void 0},hover:{type:Boolean,default:void 0},id:{default:void 0},noBorderCollapse:{type:Boolean,default:void 0},outlined:{type:Boolean,default:void 0},responsive:{type:[Boolean,String],default:void 0},small:{type:Boolean,default:void 0},stacked:{type:[Boolean,String],default:void 0},stickyHeader:{type:[Boolean,String,Number],default:void 0},striped:{type:Boolean,default:void 0},stripedColumns:{type:Boolean,default:void 0},variant:{default:void 0},tableAttrs:{}},{sortBy:{default:void 0},sortByModifiers:{},busy:{type:Boolean,default:!1},busyModifiers:{},selectedItems:{default:()=>[]},selectedItemsModifiers:{}}),emits:e.mergeModels(["filtered","head-clicked","row-clicked","row-dblclicked","row-contextmenu","row-hovered","row-unhovered","row-middle-clicked","row-selected","row-unselected","sorted","change"],["update:sortBy","update:busy","update:selectedItems"]),setup(l,{expose:i,emit:u}){const c=l,v=o.useDefaults(c,"BTable"),p=u,m=e.useSlots(),y=e.computed((()=>Object.keys(m).filter((e=>e.startsWith("cell("))))),k=e.useModel(l,"sortBy"),w=e.useModel(l,"busy"),h=e.useModel(l,"selectedItems"),C=e.computed({get:()=>new Set([...h.value]),set:e=>{h.value=[...e]}});e.watch(C,((e,t)=>{Array.from(t).filter((t=>!e.has(t))).forEach((e=>{p("row-unselected",e)})),Array.from(e).filter((e=>!t.has(e))).forEach((e=>{p("row-selected",e)}))}));const B={add:e=>{const t=new Set(C.value);t.add(e),C.value=t},clear:()=>{C.value.forEach((e=>{B.delete(e)}))},delete:e=>{const l=new Set(C.value);if(v.primaryKey){const o=v.primaryKey;h.value.forEach(((a,r)=>{const n=t.get(a,o),s=t.get(e,o);n&&s&&n===s&&l.delete(h.value[r])}))}else l.delete(e);C.value=l},set:e=>{C.value=new Set(e)},has:e=>{if(!v.primaryKey)return C.value.has(e);const l=v.primaryKey;for(const o of C.value){const a=t.get(o,l),r=t.get(e,l);if(a&&r&&a===r)return!0}return!1}},S=e.ref([]),x=r.useToNumber((()=>v.perPage),{method:"parseInt"}),N=r.useToNumber((()=>v.currentPage),{method:"parseInt"}),P=e.computed((()=>!!v.filter)),A=e.computed((()=>void 0!==v.provider)),E=e.computed((()=>C.value.size>0)),D=e.computed((()=>void 0!==k.value||v.fields.some((e=>"object"==typeof e&&null!==e&&!0===e.sortable)))),R=e.computed((()=>v.fields.map((e=>{var t;if(!d(e)){const t=a.startCase(e);return{key:e,label:t,tdAttr:!0===v.stacked?{"data-label":t}:void 0}}const l=null==(t=k.value)?void 0:t.find((t=>e.key===t.key)),o=!1===D.value?void 0:void 0===l?"none":"desc"===l.order?"descending":"asc"===l.order?"ascending":"none";return{...e,thAttr:{"aria-sort":o,...e.thAttr}}})))),F=e.computed((()=>({"b-table-busy":w.value,"b-table-selectable":v.selectable,"user-select-none":v.selectable&&E.value}))),I=e.computed((()=>[v.tbodyTrClass?"function"==typeof v.tbodyTrClass?v.tbodyTrClass(null,"table-busy"):v.tbodyTrClass:null])),M=e=>[{"b-table-sortable-column":D.value&&e.sortable}],j=(e,t)=>[{[`selected table-${v.selectionVariant}`]:v.selectable&&!!e&&B.has(e)},v.tbodyTrClass?"function"==typeof v.tbodyTrClass?v.tbodyTrClass(e,t):v.tbodyTrClass:null],z=e=>"function"==typeof e.sortByFormatted?e.sortByFormatted:e.formatter,L=e.computed((()=>{let e=A.value?S.value:v.items;return e=e.map((e=>{if("object"==typeof e&&null!==e&&Object.keys(e).some((e=>e.includes(".")))){let l={};for(const o in e)o.includes(".")?l=t.set(l,o,e[o]):l[o]=e[o];return l}return e})),(!0===P.value&&!A.value||!0===P.value&&A.value&&v.noProviderFiltering)&&(e=e.filter((e=>!s(e)||Object.entries(e).some((([t,l])=>{var o,a,r;return!(null==l||"_"===t[0]||!(null==(o=v.filterable)?void 0:o.includes(t))&&(null==(a=v.filterable)?void 0:a.length))&&(()=>{const o=R.value.find((e=>!!d(e)&&e.key===t));if(d(o)&&o.filterByFormatted){const t=z(o);if(t)return String(t(l,String(o.key),e))}return"object"==typeof l?JSON.stringify(Object.values(l)):l.toString()})().toLowerCase().includes((null==(r=v.filter)?void 0:r.toLowerCase())??"")}))))),(!0===D.value&&!A.value&&!v.noLocalSorting||!0===D.value&&A.value&&v.noProviderSorting)&&(e=(e=>{var l;const o=null==(l=k.value)?void 0:l.filter((e=>!!e.order));return o&&0!==o.length?[...e].sort(((e,l)=>{for(let a=0;a<(o.length??0);a++){const r=o[a],i=e=>{if(!s(e))return String(e);const l=R.value.find((e=>!!d(e)&&e.key===r.key)),o=t.get(e,r.key);if(d(l)&&l.sortByFormatted){const t=z(l);if(t)return String(n(e,String(l.key),t))}return"object"==typeof o&&null!==o?JSON.stringify(o):(null==o?void 0:o.toString())??""},u=i(e),c=i(l),f=r.comparer?r.comparer(u,c):u.localeCompare(c,void 0,{numeric:!0});if(0!==f)return"asc"===r.order?f:-f}return 0})):e})(e)),e})),O=e.computed((()=>({emptyFilteredText:v.emptyFilteredText,emptyText:v.emptyText,fields:R.value,items:L.value}))),H=e.computed((()=>Number.isNaN(x.value)||A.value&&!v.noProviderPaging?L.value:L.value.slice((N.value-1)*(x.value||Number.POSITIVE_INFINITY),N.value*(x.value||Number.POSITIVE_INFINITY))));e.watch(H,(e=>{p("change",e)}));const K=(e,t,l)=>{!1===v.noSelectOnClick&&((e,t,l=!1,o=!1,a=!1)=>{if(v.selectable)if("single"===v.selectMode||"multi"===v.selectMode){if(l||o)return;B.has(e)?B.delete(e):"single"===v.selectMode?B.set([e]):B.add(e)}else if(o||a)B.has(e)?B.delete(e):B.add(e);else if(l){const e=[...C.value].pop(),l=L.value.findIndex((t=>t===e)),o=Math.min(l,t),a=Math.max(l,t),r=L.value.slice(o,a+1);B.set(r)}else B.set([e])})(e,t,l.shiftKey,l.ctrlKey,l.metaKey),p("row-clicked",e,t,l)},q=(e,t,l,o=!1)=>{p("head-clicked",e,t,l,o),(e=>{var t,l;if(!D.value)return;const o="object"==typeof e&&null!==e?e.key:e,a="object"==typeof e&&null!==e&&e.sortable;if(!0!==D.value||!0!==a)return;const r=e=>"asc"===e?"desc":void 0===e||!0===v.mustSort||Array.isArray(v.mustSort)&&v.mustSort.includes(o)?"asc":void 0,n=(null==(t=k.value)?void 0:t.findIndex((e=>e.key===o)))??-1,s=null==(l=k.value)?void 0:l[n],d=-1!==n&&s?{...s}:{key:o,order:"asc"};p("sorted",!0===v.multisort?(()=>{var e,t;let l=d;if(-1===n)k.value=[...k.value??[],d];else{const o=r(d.order);l={...d,order:o},k.value=o?null==(e=k.value)?void 0:e.map((e=>e.key===l.key?l:e)):null==(t=k.value)?void 0:t.filter((e=>e.key!==l.key))}return l})():(()=>{const e={...d,order:-1===n?d.order:r(d.order)};return k.value=[e],e})())})(t)},Y=async()=>{if(!A.value||void 0===v.provider||w.value)return;w.value=!0;const e=v.provider({currentPage:N.value,filter:v.filter,sortBy:k.value,perPage:x.value});try{const t=e instanceof Promise?await e:e;if(void 0===t)return;S.value=t}finally{w.value=!1}},J=async(e,t,l)=>{if(t===l)return;const o=e=>{var t;return!0===(null==(t=v.noProvider)?void 0:t.includes(e))},a=("currentPage"===e||"perPage"===e)&&(o("paging")||!0===v.noProviderPaging),r="filter"===e&&(o("filtering")||!0===v.noProviderFiltering),n=("sortBy"===e||"sortDesc"===e)&&(o("sorting")||!0===v.noProviderSorting);a||r||n||(!0===A.value&&await Y(),"currentPage"!==e&&"perPage"!==e&&p("filtered",[...L.value]))};e.watch((()=>v.filter),((e,t)=>{J("filter",e,t),e===t||A.value||e||p("filtered",[...L.value])})),e.watch(N,((e,t)=>{J("currentPage",e,t)})),e.watch(x,((e,t)=>{J("perPage",e,t)})),e.watch(k,((e,t)=>{J("sortBy",e,t)}),{deep:!0}),e.watch((()=>v.provider),(e=>{void 0!==e?Y():S.value=[]})),e.onMounted(Y);const U={clearSelected:()=>{v.selectable&&B.clear()},selectAllRows:()=>{v.selectable&&(C.value=new Set([...L.value]))},selectRow:e=>{if(!v.selectable)return;const t=L.value[e];t&&!B.has(t)&&B.add(t)},unselectRow:e=>{if(!v.selectable)return;const t=L.value[e];t&&B.has(t)&&B.delete(t)},isRowSelected:e=>{if(!v.selectable)return!1;const t=L.value[e];return B.has(t)}};return i({...U,refresh:Y}),(t,l)=>(e.openBlock(),e.createBlock($,e.mergeProps(e.unref(v),{"aria-busy":w.value,items:H.value,fields:R.value,"table-class":F.value,"tbody-tr-class":j,"field-column-class":M,onHeadClicked:q,onRowClicked:K,onRowDblclicked:l[0]||(l[0]=(e,t,l)=>{p("row-dblclicked",e,t,l)}),onRowContextmenu:l[1]||(l[1]=(e,t,l)=>{p("row-contextmenu",e,t,l)}),onRowHovered:l[2]||(l[2]=(e,t,l)=>{p("row-hovered",e,t,l)}),onRowUnhovered:l[3]||(l[3]=(e,t,l)=>{p("row-unhovered",e,t,l)}),onRowMiddleClicked:l[4]||(l[4]=(e,t,l)=>{p("row-middle-clicked",e,t,l)})}),e.createSlots({"custom-body":e.withCtx((l=>[w.value&&t.$slots["table-busy"]?(e.openBlock(),e.createBlock(b,{key:0,class:e.normalizeClass(["b-table-busy-slot",I.value])},{default:e.withCtx((()=>[e.createVNode(f,{colspan:l.fields.length},{default:e.withCtx((()=>[e.renderSlot(t.$slots,"table-busy")])),_:2},1032,["colspan"])])),_:2},1032,["class"])):!0===e.unref(v).showEmpty&&0===L.value.length?(e.openBlock(),e.createBlock(b,{key:1,class:"b-table-empty-row"},{default:e.withCtx((()=>[e.createVNode(f,{colspan:R.value.length},{default:e.withCtx((()=>[e.createElementVNode("div",_,[e.createElementVNode("div",V,[P.value?e.renderSlot(t.$slots,"empty-filtered",e.normalizeProps(e.mergeProps({key:0},O.value)),(()=>[e.createTextVNode(e.toDisplayString(e.unref(v).emptyFilteredText),1)])):e.renderSlot(t.$slots,"empty",e.normalizeProps(e.mergeProps({key:1},O.value)),(()=>[e.createTextVNode(e.toDisplayString(e.unref(v).emptyText),1)]))])])])),_:3},8,["colspan"])])),_:3})):e.createCommentVNode("",!0)])),_:2},[m["thead-top"]?{name:"thead-top",fn:e.withCtx((l=>[e.renderSlot(t.$slots,"thead-top",e.mergeProps(l,{clearSelected:U.clearSelected,selectAllRows:U.selectAllRows,fields:R.value}))])),key:"0"}:void 0,m["thead-sub"]?{name:"thead-sub",fn:e.withCtx((l=>[e.renderSlot(t.$slots,"thead-sub",e.mergeProps(l,{fields:R.value}))])),key:"1"}:void 0,m["top-row"]?{name:"top-row",fn:e.withCtx((l=>[e.renderSlot(t.$slots,"top-row",e.mergeProps(l,{fields:R.value}))])),key:"2"}:void 0,m["row-details"]?{name:"row-details",fn:e.withCtx((l=>[e.renderSlot(t.$slots,"row-details",e.mergeProps(l,{fields:R.value,selectRow:(e=l.index)=>U.selectRow(e),unselectRow:(e=l.index)=>U.unselectRow(e),rowSelected:U.isRowSelected(l.index)}))])),key:"3"}:void 0,m["bottom-row"]?{name:"bottom-row",fn:e.withCtx((l=>[e.renderSlot(t.$slots,"bottom-row",e.mergeProps(l,{fields:R.value}))])),key:"4"}:void 0,m["custom-foot"]?{name:"custom-foot",fn:e.withCtx((l=>[e.renderSlot(t.$slots,"custom-foot",e.mergeProps(l,{fields:R.value}))])),key:"5"}:void 0,m["table-caption"]?{name:"table-caption",fn:e.withCtx((()=>[e.renderSlot(t.$slots,"table-caption")])),key:"6"}:void 0,e.renderList(y.value,(l=>({name:l,fn:e.withCtx((o=>[e.renderSlot(t.$slots,l,e.mergeProps(o,{selectRow:(e=o.index)=>U.selectRow(e),unselectRow:(e=o.index)=>U.unselectRow(e),rowSelected:U.isRowSelected(o.index)}))]))}))),e.renderList(R.value,(o=>({name:`head(${String(o.key)})`,fn:e.withCtx((a=>{var r,n,s,d;return[e.renderSlot(t.$slots,t.$slots[`head(${String(o.key)})`]?`head(${String(o.key)})`:"head()",e.mergeProps(a,{selectAllRows:U.selectAllRows,clearSelected:U.clearSelected}),(()=>[e.createTextVNode(e.toDisplayString(e.unref(g)(o)),1)])),D.value&&a.field.sortable&&!1===e.unref(v).noSortableIcon?(e.openBlock(),e.createElementBlock(e.Fragment,{key:0},["asc"===(null==(n=null==(r=k.value)?void 0:r.find((e=>e.key===a.field.key)))?void 0:n.order)?e.renderSlot(t.$slots,t.$slots[`sortAsc(${String(a.field.key)})`]?`sortAsc(${String(a.field.key)})`:"sortAsc()",e.normalizeProps(e.mergeProps({key:0},a)),(()=>[l[5]||(l[5]=e.createElementVNode("svg",{xmlns:"http://www.w3.org/2000/svg",width:"24",height:"24",fill:"currentColor",class:"bi bi-arrow-up-short",viewBox:"0 0 16 16","aria-hidden":""},[e.createElementVNode("path",{"fill-rule":"evenodd",d:"M8 12a.5.5 0 0 0 .5-.5V5.707l2.146 2.147a.5.5 0 0 0 .708-.708l-3-3a.5.5 0 0 0-.708 0l-3 3a.5.5 0 1 0 .708.708L7.5 5.707V11.5a.5.5 0 0 0 .5.5z"})],-1))])):"desc"===(null==(d=null==(s=k.value)?void 0:s.find((e=>e.key===a.field.key)))?void 0:d.order)?e.renderSlot(t.$slots,t.$slots[`sortDesc(${String(a.field.key)})`]?`sortDesc(${String(a.field.key)})`:"sortDesc()",e.normalizeProps(e.mergeProps({key:1},a)),(()=>[l[6]||(l[6]=e.createElementVNode("svg",{xmlns:"http://www.w3.org/2000/svg",width:"24",height:"24",fill:"currentColor",class:"bi bi-arrow-down-short",viewBox:"0 0 16 16","aria-hidden":""},[e.createElementVNode("path",{"fill-rule":"evenodd",d:"M8 4a.5.5 0 0 1 .5.5v5.793l2.146-2.147a.5.5 0 0 1 .708.708l-3 3a.5.5 0 0 1-.708 0l-3-3a.5.5 0 1 1 .708-.708L7.5 10.293V4.5A.5.5 0 0 1 8 4z"})],-1))])):e.renderSlot(t.$slots,t.$slots[`sortDefault(${String(a.field.key)})`]?`sortDefault(${String(a.field.key)})`:"sortDefault()",e.normalizeProps(e.mergeProps({key:2},a)),(()=>[(e.openBlock(),e.createElementBlock("svg",T,l[7]||(l[7]=[e.createElementVNode("path",{"fill-rule":"evenodd",d:"M8 12a.5.5 0 0 0 .5-.5V5.707l2.146 2.147a.5.5 0 0 0 .708-.708l-3-3a.5.5 0 0 0-.708 0l-3 3a.5.5 0 1 0 .708.708L7.5 5.707V11.5a.5.5 0 0 0 .5.5z"},null,-1)])))]))],64)):e.createCommentVNode("",!0)]}))})))]),1040,["aria-busy","items","fields","table-class"]))}});exports._sfc_main=N,exports._sfc_main$1=$,exports._sfc_main$2=i,exports._sfc_main$3=f,exports._sfc_main$4=v,exports._sfc_main$5=y,exports._sfc_main$6=k,exports._sfc_main$7=b;
2
+ //# sourceMappingURL=BTable.vue_vue_type_script_setup_true_lang-BgBZgKGz.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"BTable.vue_vue_type_script_setup_true_lang-BgBZgKGz.js","sources":["../src/utils/formatItem.ts","../src/types/TableTypes.ts","../src/components/BTable/BTbody.vue","../src/components/BTable/BTd.vue","../src/components/BTable/BTfoot.vue","../src/components/BTable/BTh.vue","../src/components/BTable/BThead.vue","../src/components/BTable/BTr.vue","../src/utils/getTableFieldHeadLabel.ts","../src/utils/filterEvent.ts","../src/components/BTable/BTableLite.vue","../src/components/BTable/BTable.vue"],"sourcesContent":["import type {TableFieldFormatter} from '../types/TableTypes'\nimport {get} from './object'\n\nexport const formatItem = <T>(\n item: T,\n // Weakly type fieldKey because it can be a nested string, such as 'foo.bar.baz'\n fieldKey: string,\n formatter?: TableFieldFormatter<T>\n) => {\n const val = get(item, fieldKey)\n return formatter && typeof formatter === 'function' ? formatter(val, fieldKey, item) : val\n}\n","import type {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 TableRowEvent<T> = [item: T, index: number, event: MouseEvent]\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// undefined means no sorting\nexport type BTableSortByOrder = 'desc' | 'asc' | undefined\n\nexport type BTableSortBy = {\n order: BTableSortByOrder\n key: string\n comparer?: (a: string, b: string) => number\n}\n\nexport type BTableProviderContext = {\n sortBy: BTableSortBy[] | undefined\n filter: string | undefined\n currentPage: number\n perPage: number\n}\n\nexport type BTableProvider<T> = (\n context: Readonly<BTableProviderContext>\n) => MaybePromise<T[] | undefined>\n\nexport type TableFieldFormatter<T> = (value: unknown, key: string, item: T) => string\n\nexport type TableRowType = 'row' | 'row-details' | 'row-top' | 'row-bottom' | 'table-busy'\nexport type TableRowThead = 'top' | 'bottom'\n\nexport type TableStrictClassValue = string | unknown[] | Record<string, boolean>\n\n// eslint-disable-next-line @typescript-eslint/no-explicit-any\nexport type TableField<T = any> = {\n key: LiteralUnion<keyof T>\n label?: string\n headerTitle?: string\n headerAbbr?: string\n class?: ClassValue\n formatter?: TableFieldFormatter<T>\n sortable?: boolean\n sortKey?: string\n sortDirection?: string\n sortByFormatted?: boolean | TableFieldFormatter<T>\n filterByFormatted?: boolean | TableFieldFormatter<T>\n tdClass?:\n | TableStrictClassValue\n | ((value: unknown, key: string, item: T) => TableStrictClassValue)\n thClass?: ClassValue\n thStyle?: StyleValue\n variant?: ColorVariant | null\n tdAttr?: AttrsValue | ((value: unknown, key: string, item: T) => AttrsValue)\n thAttr?:\n | AttrsValue\n | ((value: unknown, key: string, item: T | null, type: TableRowThead) => AttrsValue)\n isRowHeader?: boolean\n stickyColumn?: boolean\n}\n\nexport type TableFieldRaw<T = unknown> = T extends object\n ? LiteralUnion<keyof T> | TableField<T>\n : string | TableField\n\nexport const isTableField = <T>(value: unknown): value is TableField<T> =>\n typeof value === 'object' && value !== null && 'key' in value\n\nexport const isTableFieldRaw = <T>(value: unknown): value is TableFieldRaw<T> =>\n typeof value === 'string' || isTableField(value)\n\nexport type NoProviderTypes = 'paging' | 'sorting' | 'filtering'\n","<template>\n <tbody :class=\"computedClasses\">\n <slot />\n </tbody>\n</template>\n\n<script setup lang=\"ts\">\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')\n\ndefineSlots<{\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n default?: (props: Record<string, never>) => any\n}>()\n\nconst computedClasses = computed(() => ({\n [`thead-${props.variant}`]: props.variant !== null,\n}))\n</script>\n","<template>\n <td\n :scope=\"scope\"\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 {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')\n\ndefineSlots<{\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n default?: (props: Record<string, never>) => any\n}>()\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 scope = computed(() => (props.colspan ? 'colspan' : props.rowspan ? 'rowspan' : 'col'))\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'\n\nconst _props = withDefaults(defineProps<BTfootProps>(), {\n variant: null,\n})\nconst props = useDefaults(_props, 'BTfoot')\n\ndefineSlots<{\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n default?: (props: Record<string, never>) => any\n}>()\n\nconst computedClasses = computed(() => ({\n [`table-${props.variant}`]: props.variant !== null,\n}))\n</script>\n","<template>\n <th\n :scope=\"scope\"\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'\n\nconst _props = withDefaults(defineProps<BThProps>(), {\n colspan: undefined,\n rowspan: undefined,\n stackedHeading: undefined,\n stickyColumn: false,\n variant: null,\n})\nconst props = useDefaults(_props, 'BTh')\n\ndefineSlots<{\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n default?: (props: Record<string, never>) => any\n}>()\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 scope = computed(() => (props.colspan ? 'colspan' : props.rowspan ? 'rowspan' : 'col'))\n</script>\n","<template>\n <thead :class=\"computedClasses\">\n <slot />\n </thead>\n</template>\n\n<script setup lang=\"ts\">\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')\n\ndefineSlots<{\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n default?: (props: Record<string, never>) => any\n}>()\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'\n\nconst _props = withDefaults(defineProps<BTrProps>(), {\n variant: null,\n})\nconst props = useDefaults(_props, 'BTr')\n\ndefineSlots<{\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n default?: (props: Record<string, never>) => any\n}>()\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'\n\nexport const getTableFieldHeadLabel = (field: Readonly<TableFieldRaw<unknown>>) =>\n typeof field === 'string'\n ? titleCase(field)\n : field.label !== undefined\n ? field.label\n : typeof field.key === 'string'\n ? titleCase(field.key)\n : field.key\n","const 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 labelFor = label.getAttribute('for')\n const input = labelFor\n ? document.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","<template>\n <BTableSimple\n :id=\"props.id\"\n :bordered=\"props.bordered\"\n :borderless=\"props.borderless\"\n :border-variant=\"props.borderVariant\"\n :caption-top=\"props.captionTop\"\n :dark=\"props.dark\"\n :fixed=\"props.fixed\"\n :hover=\"props.hover\"\n :no-border-collapse=\"props.noBorderCollapse\"\n :outlined=\"props.outlined\"\n :responsive=\"props.responsive\"\n :small=\"props.small\"\n :stacked=\"props.stacked\"\n :sticky-header=\"props.stickyHeader\"\n :striped=\"props.striped\"\n :table-class=\"computedTableClasses\"\n :variant=\"props.variant\"\n :striped-columns=\"props.stripedColumns\"\n >\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=\"col\"\n :class=\"getFieldColumnClasses(field)\"\n :title=\"field.headerTitle\"\n :variant=\"field.variant\"\n :abbr=\"field.headerAbbr\"\n :style=\"field.thStyle\"\n v-bind=\"callThAttr(null, field, 'top')\"\n @click=\"headerClicked(field, $event)\"\n >\n <!-- eslint-disable prettier/prettier -->\n <slot\n :name=\"\n $slots[`head(${String(field.key)})`]\n ? (`head(${String(field.key)})` as 'head()')\n : 'head()'\n \"\n :label=\"field.label\"\n :column=\"field.key as LiteralUnion<keyof Items>\"\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=\"props.primaryKey ? get(item, props.primaryKey) : itemIndex\"\n >\n <BTr\n :class=\"getRowClasses(item, 'row')\"\n :variant=\"isTableItem(item) ? item._rowVariant : undefined\"\n v-bind=\"callTbodyTrAttrs(item, 'row')\"\n @click=\"!filterEvent($event) && emit('row-clicked', item, itemIndex, $event)\"\n @dblclick=\"!filterEvent($event) && emit('row-dblclicked', item, itemIndex, $event)\"\n @contextmenu=\"!filterEvent($event) && emit('row-contextmenu', item, itemIndex, $event)\"\n @mouseenter=\"!filterEvent($event) && emit('row-hovered', item, itemIndex, $event)\"\n @mouseleave=\"!filterEvent($event) && emit('row-unhovered', item, itemIndex, $event)\"\n @mousedown=\"handleMiddleClick(item, itemIndex, $event)\"\n >\n <BTd\n v-for=\"field in computedFields\"\n :key=\"field.key\"\n :variant=\"\n (isTableItem(item) ? item._cellVariants?.[field.key as string] : false)\n ? null\n : field.variant\n \"\n :class=\"getFieldRowClasses(field, item)\"\n v-bind=\"itemAttributes(item, String(field.key), field.tdAttr)\"\n >\n <label v-if=\"props.stacked && props.labelStacked\" class=\"b-table-stacked-label\">\n {{ getTableFieldHeadLabel(field) }}\n </label>\n <slot\n :name=\"\n $slots[`cell(${String(field.key)})`]\n ? (`cell(${String(field.key)})` as 'cell()')\n : 'cell()'\n \"\n :value=\"formatItem(item, String(field.key), field.formatter)\"\n :unformatted=\"get(item, String(field.key))\"\n :index=\"itemIndex\"\n :item=\"item\"\n :field=\"field\"\n :items=\"items\"\n :toggle-details=\"() => toggleRowDetails(item)\"\n :details-showing=\"isTableItem(item) ? (detailsMap.get(item) ?? false) : false\"\n >\n <template v-if=\"!$slots[`cell(${String(field.key)})`] && !$slots['cell()']\">\n {{ formatItem(item, String(field.key), field.formatter) }}\n </template>\n </slot>\n </BTd>\n </BTr>\n\n <template\n v-if=\"isTableItem(item) && detailsMap.get(item) === true && $slots['row-details']\"\n >\n <BTr aria-hidden=\"true\" role=\"presentation\" class=\"d-none\" />\n <BTr\n :class=\"getRowClasses(item, 'row-details')\"\n :variant=\"item._rowVariant\"\n v-bind=\"callTbodyTrAttrs(item, 'row-details')\"\n >\n <BTd :colspan=\"computedFieldsTotal\" :class=\"detailsTdClass\">\n <slot\n name=\"row-details\"\n :item=\"item\"\n :toggle-details=\"() => toggleRowDetails(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\" :variant=\"props.footVariant\" :class=\"props.tfootClass\">\n <BTr :variant=\"props.footRowVariant\" :class=\"props.tfootTrClass\">\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 v-bind=\"callThAttr(null, field, 'bottom')\"\n @click=\"headerClicked(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 <slot\n :name=\"\n $slots[`foot(${String(field.key)})`]\n ? (`foot(${String(field.key)})` as 'foot()')\n : 'foot()'\n \"\n :label=\"field.label\"\n :column=\"field.key as LiteralUnion<keyof Items>\"\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']\">\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=\"Items\">\nimport {computed, ref, watch} from 'vue'\nimport type {BTableLiteProps} from '../../types/ComponentProps'\nimport {\n isTableField,\n isTableItem,\n type TableField,\n type TableItem,\n type TableRowEvent,\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 {get} from '../../utils/object'\nimport {getTableFieldHeadLabel} from '../../utils/getTableFieldHeadLabel'\nimport {formatItem} from '../../utils/formatItem'\nimport {filterEvent} from '../../utils/filterEvent'\nimport {startCase} from '../../utils/stringUtils'\nimport type {LiteralUnion} from '../../types/LiteralUnion'\n\nconst _props = withDefaults(defineProps<BTableLiteProps<Items>>(), {\n caption: undefined,\n align: undefined,\n fields: () => [],\n footClone: false,\n items: () => [],\n labelStacked: false,\n fieldColumnClass: undefined,\n tbodyTrClass: undefined,\n captionHtml: 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')\n\nconst emit = defineEmits<{\n 'head-clicked': [\n key: string,\n field: (typeof computedFields.value)[0],\n event: MouseEvent,\n isFooter: boolean,\n ]\n 'row-clicked': TableRowEvent<Items>\n 'row-dblclicked': TableRowEvent<Items>\n 'row-contextmenu': TableRowEvent<Items>\n 'row-hovered': TableRowEvent<Items>\n 'row-unhovered': TableRowEvent<Items>\n 'row-middle-clicked': TableRowEvent<Items>\n}>()\n\ndefineSlots<{\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n 'thead-top'?: (props: {columns: number; fields: typeof computedFields.value}) => any\n [key: `head(${string})`]: (props: {\n label: string | undefined\n column: LiteralUnion<keyof Items>\n field: (typeof computedFields.value)[0]\n isFoot: false\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n }) => any\n 'thead-sub'?: (\n props: {\n items: readonly Items[]\n fields: typeof computedFields.value\n field: (typeof computedFields.value)[0]\n }\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n ) => any\n 'custom-body'?: (props: {\n fields: typeof computedFields.value\n items: readonly Items[]\n columns: number\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n }) => any\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n 'top-row'?: (props: {columns: number; fields: typeof computedFields.value}) => any\n [key: `cell(${string})`]: (props: {\n value: unknown\n unformatted: unknown\n index: number\n item: Items\n field: (typeof computedFields.value)[0]\n items: readonly Items[]\n toggleDetails: () => void\n detailsShowing: boolean\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n }) => any\n 'row-details'?: (props: {\n item: Items\n toggleDetails: () => void\n fields: typeof computedFields.value\n index: number\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n }) => any\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n 'bottom-row'?: (props: {columns: number; fields: typeof computedFields.value}) => any\n [key: `foot(${string})`]: (props: {\n label: string | undefined\n column: LiteralUnion<keyof Items>\n field: (typeof computedFields.value)[0]\n isFoot: true\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n }) => any\n 'custom-foot'?: (props: {\n fields: typeof computedFields.value\n items: readonly Items[]\n columns: number\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n }) => any\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n 'table-caption'?: (props: Record<string, never>) => any\n}>()\n\nconst generateDetailsItem = (item: TableItem): [object, boolean | undefined] => [\n item,\n item._showDetails,\n]\nconst detailsMap = ref(new WeakMap<object, boolean | undefined>())\nwatch(\n () => props.items,\n (items) => {\n items.forEach((item) => {\n if (!isTableItem(item)) return\n detailsMap.value.set(...generateDetailsItem(item))\n })\n },\n {deep: true, immediate: true}\n)\n\nconst computedTableClasses = computed(() => [\n props.tableClass,\n {\n [`align-${props.align}`]: props.align !== undefined,\n },\n])\n\nconst computedFields = computed<(TableField<Items> & {_noHeader?: true})[]>(() => {\n if (!props.fields.length && props.items.length) {\n const [firstItem] = props.items\n if (isTableItem(firstItem) || Array.isArray(firstItem)) {\n return Object.keys(firstItem).map((k) => {\n const label = startCase(k)\n return {\n key: k,\n label,\n tdAttr: props.stacked === true ? {'data-label': label} : undefined,\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 [{key: '', _noHeader: true}]\n }\n\n return props.fields.map((f) => {\n if (isTableField(f)) {\n return {\n ...(f as TableField<Items>),\n tdAttr:\n props.stacked === true\n ? {'data-label': startCase(f.key as string), ...f.tdAttr}\n : f.tdAttr,\n }\n }\n const label = startCase(f as string)\n return {\n key: f as string,\n label,\n tdAttr: props.stacked === true ? {'data-label': label} : undefined,\n }\n })\n})\nconst computedFieldsTotal = computed(() => computedFields.value.length)\nconst showComputedHeaders = computed(() => {\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 if (computedFieldsTotal.value > 0 && computedFields.value.every((el) => el._noHeader === true))\n return false\n return true\n})\n\nconst itemAttributes = (item: Items, fieldKey: string, attr?: unknown) => {\n const val = get(item, fieldKey)\n return attr && typeof attr === 'function' ? attr(val, fieldKey, item) : attr\n}\n\nconst callThAttr = (item: Items | null, field: TableField<Items>, type: TableRowThead) => {\n const fieldKey = String(field.key)\n const val = get(item, fieldKey)\n return field.thAttr && typeof field.thAttr === 'function'\n ? field.thAttr(val, fieldKey, item, type)\n : field.thAttr\n}\n\nconst headerClicked = (field: TableField<Items>, event: Readonly<MouseEvent>, isFooter = false) => {\n emit('head-clicked', field.key as string, field, event, isFooter)\n}\n\nconst toggleRowDetails = (tr: Items) => {\n if (isTableItem(tr)) {\n const prevValue = detailsMap.value.get(tr)\n detailsMap.value.set(tr, !prevValue)\n tr._showDetails = !prevValue\n }\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]\n\nconst getFieldRowClasses = (field: Readonly<TableField>, tr: Items) => {\n const val = get(tr, String(field.key))\n return [\n field.class,\n typeof field.tdClass === 'function' ? field.tdClass(val, String(field.key), tr) : field.tdClass,\n (isTableItem(tr) ? tr._cellVariants?.[field.key as string] : false)\n ? `table-${(tr as TableItem)._cellVariants?.[field.key as string]}`\n : null,\n {\n 'b-table-sticky-column': field.stickyColumn,\n },\n ]\n}\n\nconst handleMiddleClick = (item: Items, itemIndex: number, event: MouseEvent) => {\n if (event.button === 1 && !filterEvent(event)) {\n emit('row-middle-clicked', item, itemIndex, event)\n }\n}\nconst callTbodyTrAttrs = (item: Items | null, type: TableRowType) =>\n props.tbodyTrAttrs\n ? typeof props.tbodyTrAttrs === 'function'\n ? props.tbodyTrAttrs(item, type)\n : props.tbodyTrAttrs\n : null\n\nconst getRowClasses = (item: Items | null, type: TableRowType) =>\n props.tbodyTrClass\n ? typeof props.tbodyTrClass === 'function'\n ? props.tbodyTrClass(item, type)\n : props.tbodyTrClass\n : null\n</script>\n","<template>\n <!-- eslint-disable prettier/prettier -->\n <BTableLite\n v-bind=\"props\"\n :aria-busy=\"busyModel\"\n :items=\"computedDisplayItems\"\n :fields=\"computedFields as TableFieldRaw<Items>[]\"\n :table-class=\"tableClasses\"\n :tbody-tr-class=\"getRowClasses\"\n :field-column-class=\"getFieldColumnClasses\"\n @head-clicked=\"onFieldHeadClick\"\n @row-clicked=\"onRowClick\"\n @row-dblclicked=\"\n (row, index, e) => {\n emit('row-dblclicked', row, index, e)\n }\n \"\n @row-contextmenu=\"\n (row, index, e) => {\n emit('row-contextmenu', row, index, e)\n }\n \"\n @row-hovered=\"\n (row, index, e) => {\n emit('row-hovered', row, index, e)\n }\n \"\n @row-unhovered=\"\n (row, index, e) => {\n emit('row-unhovered', row, index, e)\n }\n \"\n @row-middle-clicked=\"\n (row, index, e) => {\n emit('row-middle-clicked', row, index, e)\n }\n \"\n >\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=\"exposedSelectableUtilities.clearSelected\"\n :select-all-rows=\"exposedSelectableUtilities.selectAllRows\"\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-details']\" #row-details=\"scope\">\n <slot\n name=\"row-details\"\n v-bind=\"scope\"\n :fields=\"computedFields\"\n :select-row=\"(index = scope.index) => exposedSelectableUtilities.selectRow(index)\"\n :unselect-row=\"(index = scope.index) => exposedSelectableUtilities.unselectRow(index)\"\n :row-selected=\"exposedSelectableUtilities.isRowSelected(scope.index)\"\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=\"(index = scope.index) => exposedSelectableUtilities.selectRow(index)\"\n :unselect-row=\"(index = scope.index) => exposedSelectableUtilities.unselectRow(index)\"\n :row-selected=\"exposedSelectableUtilities.isRowSelected(scope.index)\"\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=\"exposedSelectableUtilities.selectAllRows\"\n :clear-selected=\"exposedSelectableUtilities.clearSelected\"\n >\n {{ getTableFieldHeadLabel(field) }}\n </slot>\n <template v-if=\"isSortable && !!scope.field.sortable && props.noSortableIcon === false\">\n <slot\n v-if=\"sortByModel?.find((el) => el.key === scope.field.key)?.order === 'asc'\"\n v-bind=\"scope\"\n :name=\"\n $slots[`sortAsc(${String(scope.field.key)})`]\n ? (`sortAsc(${String(scope.field.key)})` as 'sortAsc()')\n : 'sortAsc()'\n \"\n >\n <svg\n xmlns=\"http://www.w3.org/2000/svg\"\n width=\"24\"\n height=\"24\"\n fill=\"currentColor\"\n class=\"bi bi-arrow-up-short\"\n viewBox=\"0 0 16 16\"\n aria-hidden\n >\n <path\n fill-rule=\"evenodd\"\n d=\"M8 12a.5.5 0 0 0 .5-.5V5.707l2.146 2.147a.5.5 0 0 0 .708-.708l-3-3a.5.5 0 0 0-.708 0l-3 3a.5.5 0 1 0 .708.708L7.5 5.707V11.5a.5.5 0 0 0 .5.5z\"\n />\n </svg>\n </slot>\n <slot\n v-else-if=\"sortByModel?.find((el) => el.key === scope.field.key)?.order === 'desc'\"\n v-bind=\"scope\"\n :name=\"\n $slots[`sortDesc(${String(scope.field.key)})`]\n ? (`sortDesc(${String(scope.field.key)})` as 'sortDesc()')\n : 'sortDesc()'\n \"\n >\n <svg\n xmlns=\"http://www.w3.org/2000/svg\"\n width=\"24\"\n height=\"24\"\n fill=\"currentColor\"\n class=\"bi bi-arrow-down-short\"\n viewBox=\"0 0 16 16\"\n aria-hidden\n >\n <path\n fill-rule=\"evenodd\"\n d=\"M8 4a.5.5 0 0 1 .5.5v5.793l2.146-2.147a.5.5 0 0 1 .708.708l-3 3a.5.5 0 0 1-.708 0l-3-3a.5.5 0 1 1 .708-.708L7.5 10.293V4.5A.5.5 0 0 1 8 4z\"\n />\n </svg>\n </slot>\n <slot\n v-else\n v-bind=\"scope\"\n :name=\"\n $slots[`sortDefault(${String(scope.field.key)})`]\n ? (`sortDefault(${String(scope.field.key)})` as 'sortDefault()')\n : 'sortDefault()'\n \"\n >\n <svg\n :style=\"{opacity: 0.4}\"\n xmlns=\"http://www.w3.org/2000/svg\"\n width=\"24\"\n height=\"24\"\n fill=\"currentColor\"\n class=\"bi bi-arrow-up-short\"\n viewBox=\"0 0 16 16\"\n aria-hidden\n >\n <path\n fill-rule=\"evenodd\"\n d=\"M8 12a.5.5 0 0 0 .5-.5V5.707l2.146 2.147a.5.5 0 0 0 .708-.708l-3-3a.5.5 0 0 0-.708 0l-3 3a.5.5 0 1 0 .708.708L7.5 5.707V11.5a.5.5 0 0 0 .5.5z\"\n />\n </svg>\n </slot>\n </template>\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=\"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=\"isFilterableTable\" 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=\"Items\">\nimport {useToNumber} from '@vueuse/core'\nimport {computed, onMounted, type Ref, ref, watch} from 'vue'\nimport {formatItem} from '../../utils/formatItem'\nimport BTableLite from './BTableLite.vue'\nimport BTd from './BTd.vue'\nimport BTr from './BTr.vue'\nimport {\n type BTableSortBy,\n type BTableSortByOrder,\n isTableField,\n isTableItem,\n type NoProviderTypes,\n type TableField,\n type TableFieldFormatter,\n type TableFieldRaw,\n type TableItem,\n type TableRowEvent,\n type TableRowType,\n type TableStrictClassValue,\n} from '../../types/TableTypes'\nimport {useDefaults} from '../../composables/useDefaults'\nimport type {BTableProps} from '../../types/ComponentProps'\nimport {get, set} from '../../utils/object'\nimport {startCase} from '../../utils/stringUtils'\nimport {getTableFieldHeadLabel} from '../../utils/getTableFieldHeadLabel'\nimport type {LiteralUnion} from '../../types/LiteralUnion'\n\nconst _props = withDefaults(\n defineProps<Omit<BTableProps<Items>, 'sortBy' | 'busy' | 'selectedItems'>>(),\n {\n noSortableIcon: false,\n perPage: Number.POSITIVE_INFINITY,\n filter: undefined,\n mustSort: false,\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 busyLoadingText: 'Loading...',\n currentPage: 1,\n // BTableLite props\n items: () => [],\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 captionHtml: 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')\n\nconst emit = defineEmits<{\n 'filtered': [value: Items[]]\n 'head-clicked': [\n key: string,\n field: (typeof computedFields.value)[0],\n event: MouseEvent,\n isFooter: boolean,\n ]\n 'row-clicked': TableRowEvent<Items>\n 'row-dblclicked': TableRowEvent<Items>\n 'row-contextmenu': TableRowEvent<Items>\n 'row-hovered': TableRowEvent<Items>\n 'row-unhovered': TableRowEvent<Items>\n 'row-middle-clicked': TableRowEvent<Items>\n 'row-selected': [value: Items]\n 'row-unselected': [value: Items]\n 'sorted': [value: BTableSortBy]\n 'change': [value: Items[]]\n}>()\n\nconst slots = defineSlots<{\n // BTableLite\n 'thead-top'?: (props: {\n columns: number\n fields: typeof computedFields.value\n selectAllRows: () => void\n clearSelected: () => void\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n }) => any\n [key: `head(${string})`]: (props: {\n label: string | undefined\n column: LiteralUnion<keyof Items>\n field: (typeof computedFields.value)[0]\n isFoot: false\n selectAllRows: () => void\n clearSelected: () => void\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n }) => any\n 'thead-sub'?: (\n props: {\n items: readonly Items[]\n fields: typeof computedFields.value\n field: (typeof computedFields.value)[0]\n }\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n ) => any\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n 'top-row'?: (props: {columns: number; fields: typeof computedFields.value}) => any\n [key: `cell(${string})`]: (props: {\n value: unknown\n unformatted: unknown\n index: number\n item: Items\n field: (typeof computedFields.value)[0]\n items: readonly Items[]\n toggleDetails: () => void\n detailsShowing: boolean\n rowSelected: boolean\n selectRow: (index?: number) => void\n unselectRow: (index?: number) => void\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n }) => any\n 'row-details'?: (props: {\n item: Items\n toggleDetails: () => void\n fields: typeof computedFields.value\n index: number\n rowSelected: boolean\n selectRow: (index?: number) => void\n unselectRow: (index?: number) => void\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n }) => any\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n 'bottom-row'?: (props: {columns: number; fields: typeof computedFields.value}) => any\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n [key: `foot(${string})`]: (props: {\n label: string | undefined\n column: LiteralUnion<keyof Items>\n field: (typeof computedFields.value)[0]\n isFoot: true\n selectAllRows: () => void\n clearSelected: () => void\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n }) => any\n 'custom-foot'?: (props: {\n fields: typeof computedFields.value\n items: readonly Items[]\n columns: number\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n }) => any\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n 'table-caption'?: (props: Record<string, never>) => any\n\n // end btable slots\n\n [key: `sortAsc(${string})`]: (props: {\n label: string | undefined\n column: LiteralUnion<keyof Items>\n field: (typeof computedFields.value)[0]\n isFoot: false\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n }) => any\n [key: `sortDesc(${string})`]: (props: {\n label: string | undefined\n column: LiteralUnion<keyof Items>\n field: (typeof computedFields.value)[0]\n isFoot: false\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n }) => any\n [key: `sortDefault(${string})`]: (props: {\n label: string | undefined\n column: LiteralUnion<keyof Items>\n field: (typeof computedFields.value)[0]\n isFoot: false\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n }) => any\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n 'table-busy'?: (props: Record<string, never>) => any\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n 'empty-filtered'?: (props: typeof emptySlotScope.value) => any\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n 'empty'?: (props: typeof emptySlotScope.value) => any\n}>()\n\nconst dynamicCellSlots = computed(\n () => Object.keys(slots).filter((key) => key.startsWith('cell(')) as 'cell()'[]\n)\n\nconst sortByModel = defineModel<BTableProps<Items>['sortBy']>('sortBy', {\n default: undefined,\n})\nconst busyModel = defineModel<Exclude<BTableProps<Items>['busy'], undefined>>('busy', {\n default: false,\n})\nconst selectedItemsModel = defineModel<Exclude<BTableProps<Items>['selectedItems'], undefined>>(\n 'selectedItems',\n {\n default: () => [],\n }\n)\n\nconst selectedItemsToSet = computed({\n get: () => new Set([...selectedItemsModel.value]),\n set: (val) => {\n selectedItemsModel.value = [...val]\n },\n})\n\nwatch(selectedItemsToSet, (newValue, oldValue) => {\n Array.from(oldValue)\n .filter((item) => !newValue.has(item))\n .forEach((item) => {\n emit('row-unselected', item)\n })\n Array.from(newValue)\n .filter((item) => !oldValue.has(item))\n .forEach((item) => {\n emit('row-selected', item)\n })\n})\n/**\n * This is to avoid the issue of directly mutating the array structure and to properly trigger the computed setter.\n * The utils also conveniently emit the proper events after\n */\nconst selectedItemsSetUtilities = {\n add: (item: Items) => {\n const value = new Set(selectedItemsToSet.value)\n value.add(item)\n selectedItemsToSet.value = value\n },\n clear: () => {\n selectedItemsToSet.value.forEach((item) => {\n selectedItemsSetUtilities.delete(item)\n })\n },\n delete: (item: Items) => {\n const value = new Set(selectedItemsToSet.value)\n if (props.primaryKey) {\n const pkey: string = props.primaryKey\n selectedItemsModel.value.forEach((v, i) => {\n const selectedKey = get(v, pkey)\n const itemKey = get(item, pkey)\n\n if (!!selectedKey && !!itemKey && selectedKey === itemKey) {\n value.delete(selectedItemsModel.value[i])\n }\n })\n } else {\n value.delete(item)\n }\n selectedItemsToSet.value = value\n },\n set: (items: Items[]) => {\n selectedItemsToSet.value = new Set(items)\n },\n has: (item: Items) => {\n if (!props.primaryKey) return selectedItemsToSet.value.has(item)\n\n // Resolver for when we are using primary keys\n const pkey: string = props.primaryKey\n for (const selected of selectedItemsToSet.value) {\n const selectedKey = get(selected, pkey)\n const itemKey = get(item, pkey)\n\n if (!!selectedKey && !!itemKey && selectedKey === itemKey) return true\n }\n return false\n },\n} as const\n\n/**\n * Only stores data that is fetched when using the provider\n */\nconst internalItems: Ref<Items[]> = ref([])\n\nconst perPageNumber = useToNumber(() => props.perPage, {method: 'parseInt'})\nconst currentPageNumber = useToNumber(() => props.currentPage, {method: 'parseInt'})\n\nconst isFilterableTable = computed(() => !!props.filter)\nconst usesProvider = computed(() => props.provider !== undefined)\nconst isSelecting = computed(() => selectedItemsToSet.value.size > 0)\n\nconst isSortable = computed(\n () =>\n sortByModel.value !== undefined ||\n props.fields.some(\n (field) => typeof field === 'object' && field !== null && field.sortable === true\n )\n)\n\nconst computedFields = computed<TableField<Items>[]>(() =>\n props.fields.map((el) => {\n if (!isTableField<Items>(el)) {\n const label = startCase(el as string)\n return {\n key: el as string,\n label,\n tdAttr: props.stacked === true ? {'data-label': label} : undefined,\n }\n }\n\n const value = sortByModel.value?.find((sb) => el.key === sb.key)\n const sortValue =\n isSortable.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<Items>),\n thAttr: {\n 'aria-sort': sortValue,\n ...el.thAttr,\n },\n }\n })\n)\n\nconst tableClasses = computed(() => ({\n 'b-table-busy': busyModel.value,\n 'b-table-selectable': props.selectable,\n 'user-select-none': props.selectable && isSelecting.value,\n}))\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': 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: Items | null, type: TableRowType): TableStrictClassValue => [\n {\n [`selected table-${props.selectionVariant}`]:\n props.selectable && !!item && selectedItemsSetUtilities.has(item),\n },\n props.tbodyTrClass\n ? typeof props.tbodyTrClass === 'function'\n ? props.tbodyTrClass(item, type)\n : props.tbodyTrClass\n : null,\n]\n\nconst getFormatter = (value: TableField<Items>): TableFieldFormatter<Items> | undefined =>\n typeof value.sortByFormatted === 'function' ? value.sortByFormatted : value.formatter\nconst computedItems = computed<Items[]>(() => {\n const sortItems = (items: Items[]) => {\n // \"undefined\" values are set by us, we do this so we dont wipe out the comparer\n const sortByItems = sortByModel.value?.filter((el) => !!el.order)\n\n if (!sortByItems || sortByItems.length === 0) return items\n\n // Multi-sort\n return [...items].sort((a, b) => {\n for (let i = 0; i < (sortByItems.length ?? 0); i++) {\n const sortOption = sortByItems[i]\n const realVal = (ob: Items): string => {\n if (!isTableItem(ob)) return String(ob)\n\n const sortField = computedFields.value.find((el) => {\n if (isTableField<Items>(el)) return el.key === sortOption.key\n\n return false\n })\n const val = get(ob, sortOption.key as keyof TableItem)\n if (isTableField<Items>(sortField) && !!sortField.sortByFormatted) {\n const formatter = getFormatter(sortField)\n if (formatter) {\n return String(formatItem(ob, String(sortField.key), formatter))\n }\n }\n return typeof val === 'object' && val !== null\n ? JSON.stringify(val)\n : (val?.toString() ?? '')\n }\n\n const aValue = realVal(a)\n const bValue = realVal(b)\n const comparison = sortOption.comparer\n ? sortOption.comparer(aValue, bValue)\n : aValue.localeCompare(bValue, undefined, {numeric: true})\n\n if (comparison !== 0) {\n return sortOption.order === 'asc' ? comparison : -comparison\n }\n }\n return 0 // items are equal\n })\n }\n\n const filterItems = (items: Items[]) =>\n items.filter((item) =>\n isTableItem(item)\n ? Object.entries(item).some(([key, val]) => {\n if (\n val === null ||\n val === undefined ||\n key[0] === '_' ||\n (!props.filterable?.includes(key) && !!props.filterable?.length)\n )\n return false\n const realVal = (): string => {\n const filterField = computedFields.value.find((el) => {\n if (isTableField<Items>(el)) return el.key === key\n\n return false\n })\n if (isTableField<Items>(filterField) && !!filterField.filterByFormatted) {\n const formatter = getFormatter(filterField)\n if (formatter) {\n return String(formatter(val, 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(props.filter?.toLowerCase() ?? '')\n })\n : true\n )\n\n let mappedItems = usesProvider.value ? internalItems.value : (props.items as Items[])\n mappedItems = mappedItems.map((item) => {\n if (\n typeof item === 'object' &&\n item !== null &&\n Object.keys(item).some((key) => key.includes('.'))\n ) {\n // We use any here because the TS doesn't isn't certain that \"item\" is the same type as our newItem.\n // But we've determined that it's an object, so we can ignore it since they will always be the same \"object\"\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n let newItem: any = {}\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\n // return\n }\n return item\n })\n\n if (\n (isFilterableTable.value === true && !usesProvider.value) ||\n (isFilterableTable.value === true && usesProvider.value && props.noProviderFiltering)\n ) {\n mappedItems = filterItems(mappedItems)\n }\n\n if (\n (isSortable.value === true && !usesProvider.value && !props.noLocalSorting) ||\n (isSortable.value === true && usesProvider.value && props.noProviderSorting)\n ) {\n mappedItems = sortItems(mappedItems)\n }\n\n return mappedItems\n})\n\nconst emptySlotScope = computed(() => ({\n emptyFilteredText: props.emptyFilteredText,\n emptyText: props.emptyText,\n fields: computedFields.value,\n items: computedItems.value,\n}))\n\nconst computedDisplayItems = computed<Items[]>(() => {\n if (Number.isNaN(perPageNumber.value) || (usesProvider.value && !props.noProviderPaging)) {\n return computedItems.value\n }\n\n return computedItems.value.slice(\n (currentPageNumber.value - 1) * (perPageNumber.value || Number.POSITIVE_INFINITY),\n currentPageNumber.value * (perPageNumber.value || Number.POSITIVE_INFINITY)\n )\n})\n\nwatch(computedDisplayItems, (v) => {\n emit('change', v)\n})\n\nconst handleRowSelection = (\n row: Items,\n index: number,\n shiftClicked = false,\n ctrlClicked = false,\n metaClicked = false\n) => {\n if (!props.selectable) return\n\n if (props.selectMode === 'single' || props.selectMode === 'multi') {\n // Do nothing when these items are held\n if (shiftClicked || ctrlClicked) return\n // Delete if item is in\n if (selectedItemsSetUtilities.has(row)) {\n selectedItemsSetUtilities.delete(row)\n } else {\n if (props.selectMode === 'single') {\n selectedItemsSetUtilities.set([row])\n } else {\n selectedItemsSetUtilities.add(row)\n }\n }\n } else {\n if (ctrlClicked || metaClicked) {\n // Delete if in the object\n if (selectedItemsSetUtilities.has(row)) {\n selectedItemsSetUtilities.delete(row)\n // Otherwise add. Functions similarly to 'multi' at this point\n } else {\n selectedItemsSetUtilities.add(row)\n }\n // This is where range is different, due to the difference in shift\n } else if (shiftClicked) {\n const lastSelectedItem = [...selectedItemsToSet.value].pop()\n const lastSelectedIndex = computedItems.value.findIndex((i) => i === lastSelectedItem)\n const selectStartIndex = Math.min(lastSelectedIndex, index)\n const selectEndIndex = Math.max(lastSelectedIndex, index)\n const items = computedItems.value.slice(selectStartIndex, selectEndIndex + 1)\n selectedItemsSetUtilities.set(items)\n // If nothing is being held, then we just behave like it's single mode\n } else {\n selectedItemsSetUtilities.set([row])\n }\n }\n}\n\nconst onRowClick = (row: Items, index: number, e: MouseEvent) => {\n if (props.noSelectOnClick === false) {\n handleRowSelection(row, index, e.shiftKey, e.ctrlKey, e.metaKey)\n }\n emit('row-clicked', row, index, e)\n}\n\nconst handleFieldSorting = (field: TableField<Items>) => {\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 const resolveOrder = (val: BTableSortByOrder): BTableSortByOrder | undefined => {\n if (val === 'asc') return 'desc'\n if (val === undefined) return 'asc'\n if (\n props.mustSort === true ||\n (Array.isArray(props.mustSort) && props.mustSort.includes(fieldKey as string))\n )\n return 'asc'\n return undefined\n }\n\n const index = sortByModel.value?.findIndex((el) => el.key === fieldKey) ?? -1\n const originalValue = sortByModel.value?.[index]\n const updatedValue: BTableSortBy =\n // If value is new, we default to ascending\n // Otherwise we make a temp copy of the value\n index === -1 || !originalValue ? {key: fieldKey as string, order: 'asc'} : {...originalValue}\n\n /**\n * @returns the updated value to emit for sorted\n */\n const handleMultiSort = (): BTableSortBy => {\n let val = updatedValue\n if (index === -1) {\n sortByModel.value = [...(sortByModel.value ?? []), updatedValue]\n } else {\n const order = resolveOrder(updatedValue.order)\n val = {...updatedValue, order}\n sortByModel.value = order\n ? sortByModel.value?.map((el) => (el.key === val.key ? val : el))\n : sortByModel.value?.filter((el) => el.key !== val.key)\n }\n return val\n }\n\n /**\n * @returns the updated value to emit for sorted\n */\n const handleSingleSort = (): BTableSortBy => {\n const val = {\n ...updatedValue,\n order: index === -1 ? updatedValue.order : resolveOrder(updatedValue.order),\n }\n sortByModel.value = [val]\n return val\n }\n\n // Then emit the returned updated value\n emit('sorted', props.multisort === true ? handleMultiSort() : handleSingleSort())\n}\n\nconst onFieldHeadClick = (\n fieldKey: string,\n field: TableField<Items>,\n event: Readonly<MouseEvent>,\n isFooter = false\n) => {\n emit('head-clicked', fieldKey, field, event, isFooter)\n handleFieldSorting(field)\n}\n\nconst callItemsProvider = async () => {\n if (!usesProvider.value || props.provider === undefined || busyModel.value) return\n busyModel.value = true\n const response = props.provider({\n currentPage: currentPageNumber.value,\n filter: props.filter,\n sortBy: sortByModel.value,\n perPage: perPageNumber.value,\n })\n try {\n const items = response instanceof Promise ? await response : response\n\n if (items === undefined) return\n internalItems.value = items\n } finally {\n // Potential race condition could occur if the user explicitly sets the busy value to a different value while the response promise is executing\n // which would have been the users choice.\n // eslint-disable-next-line require-atomic-updates\n busyModel.value = false\n }\n}\n\nconst providerPropsWatch = async (prop: string, val: unknown, oldVal: unknown) => {\n if (val === oldVal) return\n\n //stop provide when paging\n const inNoProvider = (key: NoProviderTypes) => props.noProvider?.includes(key) === true\n const noProvideWhenPaging =\n (prop === 'currentPage' || prop === 'perPage') &&\n (inNoProvider('paging') || props.noProviderPaging === true)\n const noProvideWhenFiltering =\n prop === 'filter' && (inNoProvider('filtering') || props.noProviderFiltering === true)\n const noProvideWhenSorting =\n (prop === 'sortBy' || prop === 'sortDesc') &&\n (inNoProvider('sorting') || props.noProviderSorting === true)\n\n if (noProvideWhenPaging || noProvideWhenFiltering || noProvideWhenSorting) return\n\n if (usesProvider.value === true) {\n await callItemsProvider()\n }\n\n if (!(prop === 'currentPage' || prop === 'perPage')) {\n emit('filtered', [...computedItems.value])\n }\n}\n\nwatch(\n () => props.filter,\n (filter, oldFilter) => {\n providerPropsWatch('filter', filter, oldFilter)\n\n if (filter === oldFilter || usesProvider.value) return\n if (!filter) {\n emit('filtered', [...computedItems.value])\n }\n }\n)\nwatch(currentPageNumber, (val, oldVal) => {\n providerPropsWatch('currentPage', val, oldVal)\n})\nwatch(perPageNumber, (val, oldVal) => {\n providerPropsWatch('perPage', val, oldVal)\n})\nwatch(\n sortByModel,\n (val, oldVal) => {\n providerPropsWatch('sortBy', val, oldVal)\n },\n {deep: true}\n)\n\nwatch(\n () => props.provider,\n (newValue) => {\n // Reset the internal values if the provider stops getting used\n if (newValue === undefined) {\n internalItems.value = []\n return\n }\n // Otherwise we should refresh the table on such a change\n callItemsProvider()\n }\n)\n\nonMounted(callItemsProvider)\n\nconst exposedSelectableUtilities = {\n clearSelected: () => {\n if (!props.selectable) return\n selectedItemsSetUtilities.clear()\n },\n selectAllRows: () => {\n if (!props.selectable) return\n selectedItemsToSet.value = new Set([...computedItems.value])\n },\n selectRow: (index: number) => {\n if (!props.selectable) return\n const item = computedItems.value[index]\n if (!item || selectedItemsSetUtilities.has(item)) return\n selectedItemsSetUtilities.add(item)\n },\n unselectRow: (index: number) => {\n if (!props.selectable) return\n const item = computedItems.value[index]\n if (!item || !selectedItemsSetUtilities.has(item)) return\n selectedItemsSetUtilities.delete(item)\n },\n isRowSelected: (index: number) => {\n if (!props.selectable) return false\n const item = computedItems.value[index]\n return selectedItemsSetUtilities.has(item)\n },\n} as const\n\ndefineExpose({\n // The row selection methods are really for compat. Users should probably use the v-model though\n ...exposedSelectableUtilities,\n refresh: callItemsProvider,\n})\n</script>\n"],"names":["formatItem","item","fieldKey","formatter","val","get","isTableItem","value","isTableField","_props","__props","props","useDefaults","computedClasses","computed","variant","stickyColumn","scope","colspan","rowspan","getTableFieldHeadLabel","field","titleCase","label","key","TABLE_TAG_NAMES","eventFilter","join","filterEvent","event","target","el","disabled","indexOf","tagName","closest","labelFor","getAttribute","input","document","getElementById","querySelector","matches","emit","__emit","detailsMap","ref","WeakMap","vue","watch","items","forEach","set","_showDetails","generateDetailsItem","deep","immediate","computedTableClasses","tableClass","align","computedFields","fields","length","firstItem","Array","isArray","Object","keys","map","k","startCase","tdAttr","stacked","_noHeader","f","computedFieldsTotal","showComputedHeaders","every","callThAttr","type","String","thAttr","headerClicked","isFooter","toggleRowDetails","tr","prevValue","getFieldColumnClasses","class","thClass","fieldColumnClass","getFieldRowClasses","tdClass","_a","_cellVariants","_b","callTbodyTrAttrs","tbodyTrAttrs","getRowClasses","tbodyTrClass","itemIndex","button","attr","slots","_useSlots","dynamicCellSlots","filter","startsWith","sortByModel","_useModel","busyModel","selectedItemsModel","useModel","selectedItemsToSet","Set","newValue","oldValue","from","has","selectedItemsSetUtilities","add","clear","delete","primaryKey","pkey","v","i","selectedKey","itemKey","selected","internalItems","perPageNumber","useToNumber","perPage","method","currentPageNumber","currentPage","isFilterableTable","usesProvider","provider","isSelecting","size","isSortable","some","sortable","find","sb","sortValue","order","tableClasses","selectable","getBusyRowClasses","selectionVariant","getFormatter","sortByFormatted","computedItems","mappedItems","includes","newItem","noProviderFiltering","entries","filterable","filterField","filterByFormatted","JSON","stringify","values","toString","realVal","toLowerCase","_c","noLocalSorting","noProviderSorting","sortByItems","sort","a","b","sortOption","ob","sortField","aValue","bValue","comparison","comparer","localeCompare","numeric","sortItems","emptySlotScope","emptyFilteredText","emptyText","computedDisplayItems","Number","isNaN","noProviderPaging","slice","POSITIVE_INFINITY","onRowClick","row","index","e","noSelectOnClick","shiftClicked","ctrlClicked","metaClicked","selectMode","lastSelectedItem","pop","lastSelectedIndex","findIndex","selectStartIndex","Math","min","selectEndIndex","max","handleRowSelection","shiftKey","ctrlKey","metaKey","onFieldHeadClick","fieldSortable","resolveOrder","mustSort","originalValue","updatedValue","multisort","handleMultiSort","handleSingleSort","handleFieldSorting","callItemsProvider","async","response","sortBy","Promise","providerPropsWatch","prop","oldVal","inNoProvider","noProvider","noProvideWhenPaging","noProvideWhenFiltering","noProvideWhenSorting","oldFilter","onMounted","exposedSelectableUtilities","clearSelected","selectAllRows","selectRow","unselectRow","isRowSelected","__expose","refresh"],"mappings":"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"}