bootstrap-vue-next 0.44.6 → 0.45.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/dist/{BAlert-BnT7fF6B.js → BAlert-CHbgLTZH.js} +2 -2
- package/dist/{BAlert-BnT7fF6B.js.map → BAlert-CHbgLTZH.js.map} +1 -1
- package/dist/{BAlert-Qiyqq4rE.mjs → BAlert-CRRUJXYi.mjs} +2 -2
- package/dist/{BAlert-Qiyqq4rE.mjs.map → BAlert-CRRUJXYi.mjs.map} +1 -1
- package/dist/{BAutocomplete-jAlZC6_t.js → BAutocomplete-4CFl6XQR.js} +3 -3
- package/dist/{BAutocomplete-jAlZC6_t.js.map → BAutocomplete-4CFl6XQR.js.map} +1 -1
- package/dist/{BAutocomplete-QBIaWPY1.mjs → BAutocomplete-B7yzKPIp.mjs} +3 -3
- package/dist/{BAutocomplete-QBIaWPY1.mjs.map → BAutocomplete-B7yzKPIp.mjs.map} +1 -1
- package/dist/{BAvatar-lefHkDuG.js → BAvatar-BHqTW5Ll.js} +1 -2
- package/dist/BAvatar-BHqTW5Ll.js.map +1 -0
- package/dist/{BAvatar-D7aFEXLH.mjs → BAvatar-BSLk69M0.mjs} +1 -2
- package/dist/BAvatar-BSLk69M0.mjs.map +1 -0
- package/dist/{BButton-kykTWnBy.js → BButton-BUYwco3v.js} +4 -4
- package/dist/BButton-BUYwco3v.js.map +1 -0
- package/dist/{BButton-DBRs8Pz_.js → BButton-Bw4HgpsF.js} +10 -13
- package/dist/BButton-Bw4HgpsF.js.map +1 -0
- package/dist/{BButton-BRvIFnRm.mjs → BButton-CDo9SRvU.mjs} +10 -13
- package/dist/BButton-CDo9SRvU.mjs.map +1 -0
- package/dist/{BButton-DNmtqoqR.mjs → BButton-DgequxLk.mjs} +4 -4
- package/dist/BButton-DgequxLk.mjs.map +1 -0
- package/dist/{BCarousel-Be7z13f9.js → BCarousel-BgT74ryc.js} +87 -87
- package/dist/BCarousel-BgT74ryc.js.map +1 -0
- package/dist/{BCarousel-D81alfFC.mjs → BCarousel-D9Yei1Q4.mjs} +88 -88
- package/dist/BCarousel-D9Yei1Q4.mjs.map +1 -0
- package/dist/{BDropdown-C1AxRj81.js → BDropdown-BxciLgyt.js} +15 -16
- package/dist/BDropdown-BxciLgyt.js.map +1 -0
- package/dist/{BDropdown-BW_O8vPQ.mjs → BDropdown-CRIh9xqy.mjs} +2 -2
- package/dist/{BDropdown-BW_O8vPQ.mjs.map → BDropdown-CRIh9xqy.mjs.map} +1 -1
- package/dist/{BDropdown-DAHnN54Z.mjs → BDropdown-D2pBrZsG.mjs} +15 -16
- package/dist/BDropdown-D2pBrZsG.mjs.map +1 -0
- package/dist/{BDropdown-CuVOxCzu.js → BDropdown-DgbFCKfP.js} +2 -2
- package/dist/{BDropdown-CuVOxCzu.js.map → BDropdown-DgbFCKfP.js.map} +1 -1
- package/dist/{BFormCheckbox-Bdk2rgVe.js → BFormCheckbox-BPQxUDQG.js} +5 -5
- package/dist/BFormCheckbox-BPQxUDQG.js.map +1 -0
- package/dist/{BFormCheckbox-CcDK-lh1.mjs → BFormCheckbox-DPNPjRKN.mjs} +5 -5
- package/dist/BFormCheckbox-DPNPjRKN.mjs.map +1 -0
- package/dist/{BFormRadio-DuVYw-Vs.js → BFormRadio-BZ0etDxl.js} +5 -5
- package/dist/BFormRadio-BZ0etDxl.js.map +1 -0
- package/dist/{BFormRadio-CRDbgMiR.mjs → BFormRadio-CqYd0bLV.mjs} +5 -5
- package/dist/BFormRadio-CqYd0bLV.mjs.map +1 -0
- package/dist/{BFormSelect-DIKVsG--.js → BFormSelect-B_mbfTMC.js} +5 -5
- package/dist/BFormSelect-B_mbfTMC.js.map +1 -0
- package/dist/{BFormSelect-Bb8yE8vz.mjs → BFormSelect-CpkJ1haI.mjs} +5 -5
- package/dist/BFormSelect-CpkJ1haI.mjs.map +1 -0
- package/dist/{BFormTags-BFA6xbr3.js → BFormTags-DJzXJp7d.js} +3 -3
- package/dist/BFormTags-DJzXJp7d.js.map +1 -0
- package/dist/{BFormTags-CJb4H67g.mjs → BFormTags-DWAWX2av.mjs} +3 -3
- package/dist/BFormTags-DWAWX2av.mjs.map +1 -0
- package/dist/{BInputGroup-BScMw6Zr.js → BInputGroup-Bfcs5h_Q.js} +2 -2
- package/dist/{BInputGroup-BScMw6Zr.js.map → BInputGroup-Bfcs5h_Q.js.map} +1 -1
- package/dist/{BInputGroup-DpX10xwR.mjs → BInputGroup-C5sxenhE.mjs} +3 -3
- package/dist/BInputGroup-C5sxenhE.mjs.map +1 -0
- package/dist/{BInputGroup-Duk6Jk0v.js → BInputGroup-DTP5Vf1f.js} +3 -3
- package/dist/BInputGroup-DTP5Vf1f.js.map +1 -0
- package/dist/{BInputGroup-C7k0tS9j.mjs → BInputGroup-Dl9AgpAx.mjs} +2 -2
- package/dist/{BInputGroup-C7k0tS9j.mjs.map → BInputGroup-Dl9AgpAx.mjs.map} +1 -1
- package/dist/{BModal-D0LB339D.js → BModal-BnHYbFuj.js} +5 -5
- package/dist/BModal-BnHYbFuj.js.map +1 -0
- package/dist/{BModal-Br5xLT0-.mjs → BModal-CAjLrkBp.mjs} +5 -5
- package/dist/BModal-CAjLrkBp.mjs.map +1 -0
- package/dist/{BNav-BRjdHsjC.mjs → BNav-BdO2N7G0.mjs} +4 -3
- package/dist/{BNav-BRjdHsjC.mjs.map → BNav-BdO2N7G0.mjs.map} +1 -1
- package/dist/{BNav-tYBwz1wU.js → BNav-MjroX-Jl.js} +4 -3
- package/dist/{BNav-tYBwz1wU.js.map → BNav-MjroX-Jl.js.map} +1 -1
- package/dist/{BOffcanvas-D33pEfZe.js → BOffcanvas-ColOuYdV.js} +2 -2
- package/dist/{BOffcanvas-D33pEfZe.js.map → BOffcanvas-ColOuYdV.js.map} +1 -1
- package/dist/{BOffcanvas-jETHbtC3.mjs → BOffcanvas-DmkJSSFy.mjs} +2 -2
- package/dist/{BOffcanvas-jETHbtC3.mjs.map → BOffcanvas-DmkJSSFy.mjs.map} +1 -1
- package/dist/{BPlaceholder-C4AOg29f.mjs → BPlaceholder-DKDtjMjy.mjs} +9 -9
- package/dist/BPlaceholder-DKDtjMjy.mjs.map +1 -0
- package/dist/{BPlaceholder-DYYYuNgR.js → BPlaceholder-n447tOzJ.js} +9 -9
- package/dist/BPlaceholder-n447tOzJ.js.map +1 -0
- package/dist/{BToast-DCSZYXIi.js → BToast-BFcT76M1.js} +2 -2
- package/dist/{BToast-DCSZYXIi.js.map → BToast-BFcT76M1.js.map} +1 -1
- package/dist/{BToast-B2rFKhLD.mjs → BToast-D5XkJqF4.mjs} +2 -2
- package/dist/{BToast-B2rFKhLD.mjs.map → BToast-D5XkJqF4.mjs.map} +1 -1
- package/dist/{BTooltip-CryTO-SM.js → BTooltip-BwiqjqX-.js} +2 -2
- package/dist/{BTooltip-CryTO-SM.js.map → BTooltip-BwiqjqX-.js.map} +1 -1
- package/dist/{BTooltip-DtpjIEBu.mjs → BTooltip-DohT1Q3C.mjs} +2 -2
- package/dist/{BTooltip-DtpjIEBu.mjs.map → BTooltip-DohT1Q3C.mjs.map} +1 -1
- package/dist/bootstrap-vue-next.mjs +21 -21
- package/dist/bootstrap-vue-next.umd.js +21 -21
- package/dist/components/BCarousel/BCarousel.vue.d.mts +4 -4
- package/dist/components/BCarousel/BCarousel.vue.d.ts +4 -4
- package/dist/components/BContainer/BCol.vue.d.mts +1 -1
- package/dist/components/BContainer/BCol.vue.d.ts +1 -1
- package/dist/components/BDropdown/BDropdown.vue.d.mts +1 -0
- package/dist/components/BDropdown/BDropdown.vue.d.ts +1 -0
- package/dist/components/BNav/BNavItemDropdown.vue.d.mts +13 -2
- package/dist/components/BNav/BNavItemDropdown.vue.d.ts +13 -2
- package/dist/{floatingUi-DHMrP__c.mjs → floatingUi-BAUk171g.mjs} +10 -2
- package/dist/{floatingUi-DHMrP__c.mjs.map → floatingUi-BAUk171g.mjs.map} +1 -1
- package/dist/{floatingUi-Cs4rDXmO.js → floatingUi-DBLN9xLH.js} +15 -1
- package/dist/{floatingUi-Cs4rDXmO.js.map → floatingUi-DBLN9xLH.js.map} +1 -1
- package/dist/keys-CQKrwmvN.mjs.map +1 -1
- package/dist/keys-durSVUrO.js.map +1 -1
- package/dist/src/components/BAlert/index.mjs +1 -1
- package/dist/src/components/BAlert/index.umd.js +1 -1
- package/dist/src/components/BAutocomplete/index.mjs +1 -1
- package/dist/src/components/BAutocomplete/index.umd.js +1 -1
- package/dist/src/components/BAvatar/index.mjs +1 -1
- package/dist/src/components/BAvatar/index.umd.js +1 -1
- package/dist/src/components/BButton/index.mjs +2 -2
- package/dist/src/components/BButton/index.umd.js +2 -2
- package/dist/src/components/BCarousel/index.mjs +1 -1
- package/dist/src/components/BCarousel/index.umd.js +1 -1
- package/dist/src/components/BDropdown/index.mjs +2 -2
- package/dist/src/components/BDropdown/index.umd.js +2 -2
- package/dist/src/components/BFormCheckbox/index.mjs +1 -1
- package/dist/src/components/BFormCheckbox/index.umd.js +1 -1
- package/dist/src/components/BFormRadio/index.mjs +1 -1
- package/dist/src/components/BFormRadio/index.umd.js +1 -1
- package/dist/src/components/BFormSelect/index.mjs +1 -1
- package/dist/src/components/BFormSelect/index.umd.js +1 -1
- package/dist/src/components/BFormTags/index.mjs +1 -1
- package/dist/src/components/BFormTags/index.umd.js +1 -1
- package/dist/src/components/BInputGroup/index.mjs +2 -2
- package/dist/src/components/BInputGroup/index.umd.js +2 -2
- package/dist/src/components/BModal/index.mjs +1 -1
- package/dist/src/components/BModal/index.umd.js +1 -1
- package/dist/src/components/BNav/index.mjs +1 -1
- package/dist/src/components/BNav/index.umd.js +1 -1
- package/dist/src/components/BOffcanvas/index.mjs +1 -1
- package/dist/src/components/BOffcanvas/index.umd.js +1 -1
- package/dist/src/components/BPlaceholder/index.mjs +1 -1
- package/dist/src/components/BPlaceholder/index.umd.js +1 -1
- package/dist/src/components/BPopover/index.mjs +1 -1
- package/dist/src/components/BPopover/index.umd.js +1 -1
- package/dist/src/components/BToast/index.mjs +1 -1
- package/dist/src/components/BToast/index.umd.js +1 -1
- package/dist/src/components/BTooltip/index.mjs +1 -1
- package/dist/src/components/BTooltip/index.umd.js +1 -1
- package/dist/src/components/index.mjs +21 -21
- package/dist/src/components/index.umd.js +21 -21
- package/dist/src/composables/useModal/index.mjs +1 -1
- package/dist/src/composables/useModal/index.umd.js +1 -1
- package/dist/src/composables/usePopover/index.mjs +2 -2
- package/dist/src/composables/usePopover/index.umd.js +2 -2
- package/dist/src/composables/useToast/index.mjs +1 -1
- package/dist/src/composables/useToast/index.umd.js +1 -1
- package/dist/src/directives/BPopover/index.mjs +2 -2
- package/dist/src/directives/BPopover/index.umd.js +2 -2
- package/dist/src/directives/BScrollspy/index.mjs +1 -1
- package/dist/src/directives/BScrollspy/index.umd.js +1 -1
- package/dist/src/directives/BToggle/index.mjs +1 -1
- package/dist/src/directives/BToggle/index.umd.js +1 -1
- package/dist/src/directives/BTooltip/index.mjs +2 -2
- package/dist/src/directives/BTooltip/index.umd.js +2 -2
- package/dist/types/ComponentProps.d.mts +1 -0
- package/dist/types/ComponentProps.d.ts +1 -0
- package/dist/types/ComponentSlots.d.mts +2 -1
- package/dist/types/ComponentSlots.d.ts +2 -1
- package/dist/types/Size.d.mts +0 -1
- package/dist/types/Size.d.ts +0 -1
- package/dist/{useFormCheck-CJvIDxcO.mjs → useFormCheck-CbRHduFK.mjs} +3 -3
- package/dist/useFormCheck-CbRHduFK.mjs.map +1 -0
- package/dist/{useFormCheck-UHNy_iZ0.js → useFormCheck-Cj5K6pk-.js} +3 -3
- package/dist/useFormCheck-Cj5K6pk-.js.map +1 -0
- package/dist/utils/floatingUi.d.mts +1 -0
- package/dist/utils/floatingUi.d.ts +1 -0
- package/dist/utils/keys.d.mts +2 -2
- package/dist/utils/keys.d.ts +2 -2
- package/dist/{utils-CgwCsk6U.mjs → utils-D30CwVm-.mjs} +3 -4
- package/dist/utils-D30CwVm-.mjs.map +1 -0
- package/dist/{utils-CaC78Zdk.js → utils-DtPi91ue.js} +3 -4
- package/dist/utils-DtPi91ue.js.map +1 -0
- package/package.json +1 -1
- package/dist/BAvatar-D7aFEXLH.mjs.map +0 -1
- package/dist/BAvatar-lefHkDuG.js.map +0 -1
- package/dist/BButton-BRvIFnRm.mjs.map +0 -1
- package/dist/BButton-DBRs8Pz_.js.map +0 -1
- package/dist/BButton-DNmtqoqR.mjs.map +0 -1
- package/dist/BButton-kykTWnBy.js.map +0 -1
- package/dist/BCarousel-Be7z13f9.js.map +0 -1
- package/dist/BCarousel-D81alfFC.mjs.map +0 -1
- package/dist/BDropdown-C1AxRj81.js.map +0 -1
- package/dist/BDropdown-DAHnN54Z.mjs.map +0 -1
- package/dist/BFormCheckbox-Bdk2rgVe.js.map +0 -1
- package/dist/BFormCheckbox-CcDK-lh1.mjs.map +0 -1
- package/dist/BFormRadio-CRDbgMiR.mjs.map +0 -1
- package/dist/BFormRadio-DuVYw-Vs.js.map +0 -1
- package/dist/BFormSelect-Bb8yE8vz.mjs.map +0 -1
- package/dist/BFormSelect-DIKVsG--.js.map +0 -1
- package/dist/BFormTags-BFA6xbr3.js.map +0 -1
- package/dist/BFormTags-CJb4H67g.mjs.map +0 -1
- package/dist/BInputGroup-DpX10xwR.mjs.map +0 -1
- package/dist/BInputGroup-Duk6Jk0v.js.map +0 -1
- package/dist/BModal-Br5xLT0-.mjs.map +0 -1
- package/dist/BModal-D0LB339D.js.map +0 -1
- package/dist/BPlaceholder-C4AOg29f.mjs.map +0 -1
- package/dist/BPlaceholder-DYYYuNgR.js.map +0 -1
- package/dist/useFormCheck-CJvIDxcO.mjs.map +0 -1
- package/dist/useFormCheck-UHNy_iZ0.js.map +0 -1
- package/dist/utils-CaC78Zdk.js.map +0 -1
- package/dist/utils-CgwCsk6U.mjs.map +0 -1
|
@@ -150,7 +150,6 @@ var BAvatar_default = /* @__PURE__ */ (0, vue.defineComponent)({
|
|
|
150
150
|
const parentData = (0, vue.inject)(require_keys.avatarGroupInjectionKey, null);
|
|
151
151
|
const SIZES = Object.freeze([null, ...Object.keys({
|
|
152
152
|
lg: null,
|
|
153
|
-
md: null,
|
|
154
153
|
sm: null
|
|
155
154
|
})]);
|
|
156
155
|
const BADGE_FONT_SIZE_SCALE = FONT_SIZE_SCALE * .7;
|
|
@@ -384,4 +383,4 @@ Object.defineProperty(exports, "BAvatar_default", {
|
|
|
384
383
|
}
|
|
385
384
|
});
|
|
386
385
|
|
|
387
|
-
//# sourceMappingURL=BAvatar-
|
|
386
|
+
//# sourceMappingURL=BAvatar-BHqTW5Ll.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"BAvatar-BHqTW5Ll.js","names":[],"sources":["../src/components/BAvatar/BAvatar.vue","../src/components/BAvatar/BAvatar.vue","../src/components/BAvatar/BAvatarGroup.vue","../src/components/BAvatar/BAvatarGroup.vue"],"sourcesContent":["<template>\n <component\n :is=\"computedTag\"\n class=\"b-avatar\"\n :class=\"computedClasses\"\n :style=\"computedStyle\"\n v-bind=\"computedLinkProps\"\n :type=\"props.button && !computedLink ? props.buttonType : undefined\"\n :disabled=\"props.disabled || null\"\n :variant=\"null\"\n @click=\"clicked\"\n >\n <span v-if=\"hasDefaultSlot\" class=\"b-avatar-custom\">\n <slot />\n </span>\n <span v-else-if=\"!!localSrc\" class=\"b-avatar-img\">\n <img :src=\"localSrc\" :alt=\"props.alt\" @error=\"onImgError\" />\n </span>\n <span v-else-if=\"!!props.text\" class=\"b-avatar-text\" :style=\"textFontStyle\">\n {{ props.text }}\n </span>\n <span v-else class=\"b-avatar-img\"\n ><svg\n xmlns=\"http://www.w3.org/2000/svg\"\n width=\"80%\"\n height=\"80%\"\n fill=\"currentColor\"\n class=\"bi bi-person-fill\"\n viewBox=\"0 0 16 16\"\n >\n <path d=\"M3 14s-1 0-1-1 1-4 6-4 6 3 6 4-1 1-1 1zm5-6a3 3 0 1 0 0-6 3 3 0 0 0 0 6\" />\n </svg>\n </span>\n <BBadge\n v-if=\"showBadge\"\n :pill=\"props.badgePill\"\n :dot-indicator=\"props.badgeDotIndicator || badgeImplicitlyDot\"\n :variant=\"props.badgeVariant\"\n :bg-variant=\"props.badgeBgVariant\"\n :text-variant=\"props.badgeTextVariant\"\n :style=\"badgeStyle\"\n :placement=\"props.badgePlacement\"\n >\n <slot name=\"badge\">\n {{ badgeText }}\n </slot>\n </BBadge>\n </component>\n</template>\n\n<script setup lang=\"ts\">\nimport {avatarGroupInjectionKey} from '../../utils/keys'\nimport {computed, type CSSProperties, inject, ref, type StyleValue, watch} from 'vue'\nimport type {BAvatarProps} from '../../types/ComponentProps'\nimport BLink from '../BLink/BLink.vue'\nimport BBadge from '../BBadge/BBadge.vue'\nimport {useBLinkHelper} from '../../composables/useBLinkHelper'\nimport {isEmptySlot} from '../../utils/dom'\nimport {useNumberishToStyle} from '../../composables/useNumberishToStyle'\nimport {useRadiusElementClasses} from '../../composables/useRadiusElementClasses'\nimport {useColorVariantClasses} from '../../composables/useColorVariantClasses'\nimport type {BAvatarEmits, BAvatarSlots, Size} from '../../types'\nimport {useDefaults} from '../../composables/useDefaults'\n\nconst _props = withDefaults(defineProps<BAvatarProps>(), {\n alt: 'avatar',\n badge: false,\n badgeBgVariant: null,\n badgeTextVariant: null,\n badgeVariant: 'primary',\n badgePlacement: 'bottom-end',\n badgeDotIndicator: false,\n badgePill: false,\n button: false,\n buttonType: 'button',\n size: undefined,\n square: false,\n src: undefined,\n text: undefined,\n // Link props\n variant: 'secondary',\n // All others use defaults\n active: undefined,\n activeClass: undefined,\n disabled: undefined,\n exactActiveClass: undefined,\n href: undefined,\n opacity: undefined,\n opacityHover: undefined,\n rel: undefined,\n replace: undefined,\n stretched: false,\n routerComponentName: undefined,\n target: undefined,\n underlineOffset: undefined,\n underlineOffsetHover: undefined,\n underlineOpacity: undefined,\n underlineOpacityHover: undefined,\n underlineVariant: undefined,\n // End link props\n // ColorExtendables props\n // Variant is here as well\n bgVariant: null,\n textVariant: null,\n // End ColorExtendables props\n // RadiusElementExtendables props\n rounded: 'circle',\n roundedBottom: undefined,\n roundedEnd: undefined,\n roundedStart: undefined,\n roundedTop: undefined,\n // End RadiusElementExtendables props\n})\nconst props = useDefaults(_props, 'BAvatar')\nconst emit = defineEmits<BAvatarEmits>()\nconst slots = defineSlots<BAvatarSlots>()\n\nconst localSrc = ref(props.src)\nwatch(\n () => props.src,\n (value) => {\n localSrc.value = value\n }\n)\n\nconst {computedLink, computedLinkProps} = useBLinkHelper(props)\n\nconst parentData = inject(avatarGroupInjectionKey, null)\n\nconst SIZES = Object.freeze([\n null,\n ...Object.keys({\n lg: null,\n sm: null,\n } satisfies Record<Size, null>),\n] as (string | null)[])\nconst FONT_SIZE_SCALE = 0.4\nconst BADGE_FONT_SIZE_SCALE = FONT_SIZE_SCALE * 0.7\n\nconst hasDefaultSlot = computed(() => !isEmptySlot(slots.default))\nconst hasBadgeSlot = computed(() => !isEmptySlot(slots.badge))\n\nconst showBadge = computed(() => !!props.badge || props.badge === '' || hasBadgeSlot.value)\nconst computedSquare = computed(() => parentData?.square.value || props.square)\n\n// const computedPropSize = useNumberishToStyle(() => props.size)\n// const propSizeIsLiteralSize = (val: unknown): val is Size =>\n// !!val && typeof val === 'string' && SIZES.includes(val)\n// const computedParentSize = useNumberishToStyle(() => parentData?.size.value)\n// const computedSize = computed(() => computedParentSize.value ?? computedPropSize.value)\n// const computedPropSizeIsLiteralSize = computed(() => propSizeIsLiteralSize(computedSize.value))\n\nconst computedSize = useNumberishToStyle(() => parentData?.size.value ?? props.size)\nconst computedSizeIsLiteralSize = computed(\n () => !!computedSize.value && SIZES.includes(computedSize.value)\n)\n\nconst computedVariant = computed(() => parentData?.variant.value ?? props.variant)\nconst computedRounded = computed(() => parentData?.rounded.value ?? props.rounded)\nconst computedRoundedTop = computed(() => parentData?.roundedTop.value ?? props.roundedTop)\nconst computedRoundedBottom = computed(() => parentData?.roundedBottom.value ?? props.roundedBottom)\nconst computedRoundedStart = computed(() => parentData?.roundedStart.value ?? props.roundedStart)\nconst computedRoundedEnd = computed(() => parentData?.roundedEnd.value ?? props.roundedEnd)\n\nconst radiusElementClasses = useRadiusElementClasses(() => ({\n rounded: computedRounded.value,\n roundedTop: computedRoundedTop.value,\n roundedBottom: computedRoundedBottom.value,\n roundedStart: computedRoundedStart.value,\n roundedEnd: computedRoundedEnd.value,\n}))\n\nconst badgeText = computed(() => (props.badge === true ? '' : props.badge))\nconst badgeImplicitlyDot = computed(() => !badgeText.value && !hasBadgeSlot.value)\n\nconst colorClasses = useColorVariantClasses(() => ({\n bgVariant: parentData?.bgVariant.value ?? props.bgVariant,\n textVariant: parentData?.textVariant.value ?? props.textVariant,\n variant: computedVariant.value,\n}))\nconst computedClasses = computed(() => [\n colorClasses.value,\n // Square overwrites all else\n computedSquare.value === true ? undefined : radiusElementClasses.value,\n {\n [`b-avatar-${computedSize.value}`]:\n computedSizeIsLiteralSize.value && computedSize.value !== 'md',\n [`btn-${computedVariant.value}`]: props.button ? computedVariant.value !== null : false,\n 'badge': !props.button && computedVariant.value !== null && hasDefaultSlot.value,\n 'btn': props.button,\n // Square is the same as rounded-0 class\n 'rounded-0': computedSquare.value === true,\n },\n])\n\nconst badgeStyle = computed<StyleValue>(() => ({\n fontSize:\n (!computedSizeIsLiteralSize.value\n ? `calc(${computedSize.value} * ${BADGE_FONT_SIZE_SCALE})`\n : '') || '',\n}))\n\nconst textFontStyle = computed<StyleValue>(() => {\n const fontSize = !computedSizeIsLiteralSize.value\n ? `calc(${computedSize.value} * ${FONT_SIZE_SCALE})`\n : null\n return fontSize ? {fontSize} : {}\n})\n\nconst marginStyle = computed(() => {\n const overlapScale = parentData?.overlapScale?.value || 0\n\n const value =\n computedSize.value && overlapScale ? `calc(${computedSize.value} * -${overlapScale})` : null\n return value ? {marginLeft: value, marginRight: value} : {}\n})\n\nconst computedTag = computed(() => (computedLink.value ? BLink : props.button ? 'button' : 'span'))\n\nconst computedStyle = computed<CSSProperties>(() => ({\n ...marginStyle.value,\n ...(!computedSizeIsLiteralSize.value\n ? {\n width: computedSize.value,\n height: computedSize.value,\n }\n : undefined),\n}))\n\nconst clicked = (e: Readonly<MouseEvent>): void => {\n if (!props.disabled && (computedLink.value || props.button)) emit('click', e)\n}\n\nconst onImgError = (e: Readonly<Event>) => {\n localSrc.value = undefined\n emit('img-error', e)\n}\n</script>\n","<template>\n <component\n :is=\"computedTag\"\n class=\"b-avatar\"\n :class=\"computedClasses\"\n :style=\"computedStyle\"\n v-bind=\"computedLinkProps\"\n :type=\"props.button && !computedLink ? props.buttonType : undefined\"\n :disabled=\"props.disabled || null\"\n :variant=\"null\"\n @click=\"clicked\"\n >\n <span v-if=\"hasDefaultSlot\" class=\"b-avatar-custom\">\n <slot />\n </span>\n <span v-else-if=\"!!localSrc\" class=\"b-avatar-img\">\n <img :src=\"localSrc\" :alt=\"props.alt\" @error=\"onImgError\" />\n </span>\n <span v-else-if=\"!!props.text\" class=\"b-avatar-text\" :style=\"textFontStyle\">\n {{ props.text }}\n </span>\n <span v-else class=\"b-avatar-img\"\n ><svg\n xmlns=\"http://www.w3.org/2000/svg\"\n width=\"80%\"\n height=\"80%\"\n fill=\"currentColor\"\n class=\"bi bi-person-fill\"\n viewBox=\"0 0 16 16\"\n >\n <path d=\"M3 14s-1 0-1-1 1-4 6-4 6 3 6 4-1 1-1 1zm5-6a3 3 0 1 0 0-6 3 3 0 0 0 0 6\" />\n </svg>\n </span>\n <BBadge\n v-if=\"showBadge\"\n :pill=\"props.badgePill\"\n :dot-indicator=\"props.badgeDotIndicator || badgeImplicitlyDot\"\n :variant=\"props.badgeVariant\"\n :bg-variant=\"props.badgeBgVariant\"\n :text-variant=\"props.badgeTextVariant\"\n :style=\"badgeStyle\"\n :placement=\"props.badgePlacement\"\n >\n <slot name=\"badge\">\n {{ badgeText }}\n </slot>\n </BBadge>\n </component>\n</template>\n\n<script setup lang=\"ts\">\nimport {avatarGroupInjectionKey} from '../../utils/keys'\nimport {computed, type CSSProperties, inject, ref, type StyleValue, watch} from 'vue'\nimport type {BAvatarProps} from '../../types/ComponentProps'\nimport BLink from '../BLink/BLink.vue'\nimport BBadge from '../BBadge/BBadge.vue'\nimport {useBLinkHelper} from '../../composables/useBLinkHelper'\nimport {isEmptySlot} from '../../utils/dom'\nimport {useNumberishToStyle} from '../../composables/useNumberishToStyle'\nimport {useRadiusElementClasses} from '../../composables/useRadiusElementClasses'\nimport {useColorVariantClasses} from '../../composables/useColorVariantClasses'\nimport type {BAvatarEmits, BAvatarSlots, Size} from '../../types'\nimport {useDefaults} from '../../composables/useDefaults'\n\nconst _props = withDefaults(defineProps<BAvatarProps>(), {\n alt: 'avatar',\n badge: false,\n badgeBgVariant: null,\n badgeTextVariant: null,\n badgeVariant: 'primary',\n badgePlacement: 'bottom-end',\n badgeDotIndicator: false,\n badgePill: false,\n button: false,\n buttonType: 'button',\n size: undefined,\n square: false,\n src: undefined,\n text: undefined,\n // Link props\n variant: 'secondary',\n // All others use defaults\n active: undefined,\n activeClass: undefined,\n disabled: undefined,\n exactActiveClass: undefined,\n href: undefined,\n opacity: undefined,\n opacityHover: undefined,\n rel: undefined,\n replace: undefined,\n stretched: false,\n routerComponentName: undefined,\n target: undefined,\n underlineOffset: undefined,\n underlineOffsetHover: undefined,\n underlineOpacity: undefined,\n underlineOpacityHover: undefined,\n underlineVariant: undefined,\n // End link props\n // ColorExtendables props\n // Variant is here as well\n bgVariant: null,\n textVariant: null,\n // End ColorExtendables props\n // RadiusElementExtendables props\n rounded: 'circle',\n roundedBottom: undefined,\n roundedEnd: undefined,\n roundedStart: undefined,\n roundedTop: undefined,\n // End RadiusElementExtendables props\n})\nconst props = useDefaults(_props, 'BAvatar')\nconst emit = defineEmits<BAvatarEmits>()\nconst slots = defineSlots<BAvatarSlots>()\n\nconst localSrc = ref(props.src)\nwatch(\n () => props.src,\n (value) => {\n localSrc.value = value\n }\n)\n\nconst {computedLink, computedLinkProps} = useBLinkHelper(props)\n\nconst parentData = inject(avatarGroupInjectionKey, null)\n\nconst SIZES = Object.freeze([\n null,\n ...Object.keys({\n lg: null,\n sm: null,\n } satisfies Record<Size, null>),\n] as (string | null)[])\nconst FONT_SIZE_SCALE = 0.4\nconst BADGE_FONT_SIZE_SCALE = FONT_SIZE_SCALE * 0.7\n\nconst hasDefaultSlot = computed(() => !isEmptySlot(slots.default))\nconst hasBadgeSlot = computed(() => !isEmptySlot(slots.badge))\n\nconst showBadge = computed(() => !!props.badge || props.badge === '' || hasBadgeSlot.value)\nconst computedSquare = computed(() => parentData?.square.value || props.square)\n\n// const computedPropSize = useNumberishToStyle(() => props.size)\n// const propSizeIsLiteralSize = (val: unknown): val is Size =>\n// !!val && typeof val === 'string' && SIZES.includes(val)\n// const computedParentSize = useNumberishToStyle(() => parentData?.size.value)\n// const computedSize = computed(() => computedParentSize.value ?? computedPropSize.value)\n// const computedPropSizeIsLiteralSize = computed(() => propSizeIsLiteralSize(computedSize.value))\n\nconst computedSize = useNumberishToStyle(() => parentData?.size.value ?? props.size)\nconst computedSizeIsLiteralSize = computed(\n () => !!computedSize.value && SIZES.includes(computedSize.value)\n)\n\nconst computedVariant = computed(() => parentData?.variant.value ?? props.variant)\nconst computedRounded = computed(() => parentData?.rounded.value ?? props.rounded)\nconst computedRoundedTop = computed(() => parentData?.roundedTop.value ?? props.roundedTop)\nconst computedRoundedBottom = computed(() => parentData?.roundedBottom.value ?? props.roundedBottom)\nconst computedRoundedStart = computed(() => parentData?.roundedStart.value ?? props.roundedStart)\nconst computedRoundedEnd = computed(() => parentData?.roundedEnd.value ?? props.roundedEnd)\n\nconst radiusElementClasses = useRadiusElementClasses(() => ({\n rounded: computedRounded.value,\n roundedTop: computedRoundedTop.value,\n roundedBottom: computedRoundedBottom.value,\n roundedStart: computedRoundedStart.value,\n roundedEnd: computedRoundedEnd.value,\n}))\n\nconst badgeText = computed(() => (props.badge === true ? '' : props.badge))\nconst badgeImplicitlyDot = computed(() => !badgeText.value && !hasBadgeSlot.value)\n\nconst colorClasses = useColorVariantClasses(() => ({\n bgVariant: parentData?.bgVariant.value ?? props.bgVariant,\n textVariant: parentData?.textVariant.value ?? props.textVariant,\n variant: computedVariant.value,\n}))\nconst computedClasses = computed(() => [\n colorClasses.value,\n // Square overwrites all else\n computedSquare.value === true ? undefined : radiusElementClasses.value,\n {\n [`b-avatar-${computedSize.value}`]:\n computedSizeIsLiteralSize.value && computedSize.value !== 'md',\n [`btn-${computedVariant.value}`]: props.button ? computedVariant.value !== null : false,\n 'badge': !props.button && computedVariant.value !== null && hasDefaultSlot.value,\n 'btn': props.button,\n // Square is the same as rounded-0 class\n 'rounded-0': computedSquare.value === true,\n },\n])\n\nconst badgeStyle = computed<StyleValue>(() => ({\n fontSize:\n (!computedSizeIsLiteralSize.value\n ? `calc(${computedSize.value} * ${BADGE_FONT_SIZE_SCALE})`\n : '') || '',\n}))\n\nconst textFontStyle = computed<StyleValue>(() => {\n const fontSize = !computedSizeIsLiteralSize.value\n ? `calc(${computedSize.value} * ${FONT_SIZE_SCALE})`\n : null\n return fontSize ? {fontSize} : {}\n})\n\nconst marginStyle = computed(() => {\n const overlapScale = parentData?.overlapScale?.value || 0\n\n const value =\n computedSize.value && overlapScale ? `calc(${computedSize.value} * -${overlapScale})` : null\n return value ? {marginLeft: value, marginRight: value} : {}\n})\n\nconst computedTag = computed(() => (computedLink.value ? BLink : props.button ? 'button' : 'span'))\n\nconst computedStyle = computed<CSSProperties>(() => ({\n ...marginStyle.value,\n ...(!computedSizeIsLiteralSize.value\n ? {\n width: computedSize.value,\n height: computedSize.value,\n }\n : undefined),\n}))\n\nconst clicked = (e: Readonly<MouseEvent>): void => {\n if (!props.disabled && (computedLink.value || props.button)) emit('click', e)\n}\n\nconst onImgError = (e: Readonly<Event>) => {\n localSrc.value = undefined\n emit('img-error', e)\n}\n</script>\n","<template>\n <component :is=\"props.tag\" class=\"b-avatar-group\" role=\"group\">\n <div class=\"b-avatar-group-inner\" :style=\"paddingStyle\">\n <slot />\n </div>\n </component>\n</template>\n\n<script setup lang=\"ts\">\nimport {computed, provide, type StyleValue, toRef} from 'vue'\nimport type {BAvatarGroupProps} from '../../types/ComponentProps'\nimport {avatarGroupInjectionKey} from '../../utils/keys'\nimport {useDefaults} from '../../composables/useDefaults'\nimport {useToNumber} from '@vueuse/core'\nimport {useNumberishToStyle} from '../../composables/useNumberishToStyle'\nimport type {BAvatarGroupSlots} from '../../types'\n\nconst _props = withDefaults(defineProps<BAvatarGroupProps>(), {\n overlap: 0.3,\n size: undefined,\n square: false,\n tag: 'div',\n // RadiusElementExtendables props\n rounded: 'circle',\n roundedBottom: undefined,\n roundedEnd: undefined,\n roundedStart: undefined,\n roundedTop: undefined,\n // End RadiusElementExtendables props\n // ColorExtendables props\n bgVariant: null,\n textVariant: null,\n variant: null,\n // End ColorExtendables props\n})\nconst props = useDefaults(_props, 'BAvatarGroup')\ndefineSlots<BAvatarGroupSlots>()\n\nconst overlapNumber = useToNumber(() => props.overlap)\n\nconst computedSize = useNumberishToStyle(() => props.size)\nconst overlapScale = computed(() => Math.min(Math.max(overlapNumber.value, 0), 1) / 2)\n\nconst paddingStyle = computed<StyleValue>(() => {\n const value = computedSize.value ? `calc(${computedSize.value} * ${overlapScale.value})` : null\n return value ? {paddingLeft: value, paddingRight: value} : {}\n})\n\nprovide(avatarGroupInjectionKey, {\n overlapScale,\n size: toRef(() => props.size),\n square: toRef(() => props.square),\n rounded: toRef(() => props.rounded),\n roundedTop: toRef(() => props.roundedTop),\n roundedBottom: toRef(() => props.roundedBottom),\n roundedStart: toRef(() => props.roundedStart),\n roundedEnd: toRef(() => props.roundedEnd),\n variant: toRef(() => props.variant),\n bgVariant: toRef(() => props.bgVariant),\n textVariant: toRef(() => props.textVariant),\n})\n</script>\n","<template>\n <component :is=\"props.tag\" class=\"b-avatar-group\" role=\"group\">\n <div class=\"b-avatar-group-inner\" :style=\"paddingStyle\">\n <slot />\n </div>\n </component>\n</template>\n\n<script setup lang=\"ts\">\nimport {computed, provide, type StyleValue, toRef} from 'vue'\nimport type {BAvatarGroupProps} from '../../types/ComponentProps'\nimport {avatarGroupInjectionKey} from '../../utils/keys'\nimport {useDefaults} from '../../composables/useDefaults'\nimport {useToNumber} from '@vueuse/core'\nimport {useNumberishToStyle} from '../../composables/useNumberishToStyle'\nimport type {BAvatarGroupSlots} from '../../types'\n\nconst _props = withDefaults(defineProps<BAvatarGroupProps>(), {\n overlap: 0.3,\n size: undefined,\n square: false,\n tag: 'div',\n // RadiusElementExtendables props\n rounded: 'circle',\n roundedBottom: undefined,\n roundedEnd: undefined,\n roundedStart: undefined,\n roundedTop: undefined,\n // End RadiusElementExtendables props\n // ColorExtendables props\n bgVariant: null,\n textVariant: null,\n variant: null,\n // End ColorExtendables props\n})\nconst props = useDefaults(_props, 'BAvatarGroup')\ndefineSlots<BAvatarGroupSlots>()\n\nconst overlapNumber = useToNumber(() => props.overlap)\n\nconst computedSize = useNumberishToStyle(() => props.size)\nconst overlapScale = computed(() => Math.min(Math.max(overlapNumber.value, 0), 1) / 2)\n\nconst paddingStyle = computed<StyleValue>(() => {\n const value = computedSize.value ? `calc(${computedSize.value} * ${overlapScale.value})` : null\n return value ? {paddingLeft: value, paddingRight: value} : {}\n})\n\nprovide(avatarGroupInjectionKey, {\n overlapScale,\n size: toRef(() => props.size),\n square: toRef(() => props.square),\n rounded: toRef(() => props.rounded),\n roundedTop: toRef(() => props.roundedTop),\n roundedBottom: toRef(() => props.roundedBottom),\n roundedStart: toRef(() => props.roundedStart),\n roundedEnd: toRef(() => props.roundedEnd),\n variant: toRef(() => props.variant),\n bgVariant: toRef(() => props.bgVariant),\n textVariant: toRef(() => props.textVariant),\n})\n</script>\n"],"mappings":"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"}
|
|
@@ -149,7 +149,6 @@ var BAvatar_default = /* @__PURE__ */ defineComponent({
|
|
|
149
149
|
const parentData = inject(avatarGroupInjectionKey, null);
|
|
150
150
|
const SIZES = Object.freeze([null, ...Object.keys({
|
|
151
151
|
lg: null,
|
|
152
|
-
md: null,
|
|
153
152
|
sm: null
|
|
154
153
|
})]);
|
|
155
154
|
const BADGE_FONT_SIZE_SCALE = FONT_SIZE_SCALE * .7;
|
|
@@ -372,4 +371,4 @@ var BAvatarGroup_default = /* @__PURE__ */ defineComponent({
|
|
|
372
371
|
//#endregion
|
|
373
372
|
export { BAvatar_default as n, BAvatarGroup_default as t };
|
|
374
373
|
|
|
375
|
-
//# sourceMappingURL=BAvatar-
|
|
374
|
+
//# sourceMappingURL=BAvatar-BSLk69M0.mjs.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"BAvatar-BSLk69M0.mjs","names":[],"sources":["../src/components/BAvatar/BAvatar.vue","../src/components/BAvatar/BAvatar.vue","../src/components/BAvatar/BAvatarGroup.vue","../src/components/BAvatar/BAvatarGroup.vue"],"sourcesContent":["<template>\n <component\n :is=\"computedTag\"\n class=\"b-avatar\"\n :class=\"computedClasses\"\n :style=\"computedStyle\"\n v-bind=\"computedLinkProps\"\n :type=\"props.button && !computedLink ? props.buttonType : undefined\"\n :disabled=\"props.disabled || null\"\n :variant=\"null\"\n @click=\"clicked\"\n >\n <span v-if=\"hasDefaultSlot\" class=\"b-avatar-custom\">\n <slot />\n </span>\n <span v-else-if=\"!!localSrc\" class=\"b-avatar-img\">\n <img :src=\"localSrc\" :alt=\"props.alt\" @error=\"onImgError\" />\n </span>\n <span v-else-if=\"!!props.text\" class=\"b-avatar-text\" :style=\"textFontStyle\">\n {{ props.text }}\n </span>\n <span v-else class=\"b-avatar-img\"\n ><svg\n xmlns=\"http://www.w3.org/2000/svg\"\n width=\"80%\"\n height=\"80%\"\n fill=\"currentColor\"\n class=\"bi bi-person-fill\"\n viewBox=\"0 0 16 16\"\n >\n <path d=\"M3 14s-1 0-1-1 1-4 6-4 6 3 6 4-1 1-1 1zm5-6a3 3 0 1 0 0-6 3 3 0 0 0 0 6\" />\n </svg>\n </span>\n <BBadge\n v-if=\"showBadge\"\n :pill=\"props.badgePill\"\n :dot-indicator=\"props.badgeDotIndicator || badgeImplicitlyDot\"\n :variant=\"props.badgeVariant\"\n :bg-variant=\"props.badgeBgVariant\"\n :text-variant=\"props.badgeTextVariant\"\n :style=\"badgeStyle\"\n :placement=\"props.badgePlacement\"\n >\n <slot name=\"badge\">\n {{ badgeText }}\n </slot>\n </BBadge>\n </component>\n</template>\n\n<script setup lang=\"ts\">\nimport {avatarGroupInjectionKey} from '../../utils/keys'\nimport {computed, type CSSProperties, inject, ref, type StyleValue, watch} from 'vue'\nimport type {BAvatarProps} from '../../types/ComponentProps'\nimport BLink from '../BLink/BLink.vue'\nimport BBadge from '../BBadge/BBadge.vue'\nimport {useBLinkHelper} from '../../composables/useBLinkHelper'\nimport {isEmptySlot} from '../../utils/dom'\nimport {useNumberishToStyle} from '../../composables/useNumberishToStyle'\nimport {useRadiusElementClasses} from '../../composables/useRadiusElementClasses'\nimport {useColorVariantClasses} from '../../composables/useColorVariantClasses'\nimport type {BAvatarEmits, BAvatarSlots, Size} from '../../types'\nimport {useDefaults} from '../../composables/useDefaults'\n\nconst _props = withDefaults(defineProps<BAvatarProps>(), {\n alt: 'avatar',\n badge: false,\n badgeBgVariant: null,\n badgeTextVariant: null,\n badgeVariant: 'primary',\n badgePlacement: 'bottom-end',\n badgeDotIndicator: false,\n badgePill: false,\n button: false,\n buttonType: 'button',\n size: undefined,\n square: false,\n src: undefined,\n text: undefined,\n // Link props\n variant: 'secondary',\n // All others use defaults\n active: undefined,\n activeClass: undefined,\n disabled: undefined,\n exactActiveClass: undefined,\n href: undefined,\n opacity: undefined,\n opacityHover: undefined,\n rel: undefined,\n replace: undefined,\n stretched: false,\n routerComponentName: undefined,\n target: undefined,\n underlineOffset: undefined,\n underlineOffsetHover: undefined,\n underlineOpacity: undefined,\n underlineOpacityHover: undefined,\n underlineVariant: undefined,\n // End link props\n // ColorExtendables props\n // Variant is here as well\n bgVariant: null,\n textVariant: null,\n // End ColorExtendables props\n // RadiusElementExtendables props\n rounded: 'circle',\n roundedBottom: undefined,\n roundedEnd: undefined,\n roundedStart: undefined,\n roundedTop: undefined,\n // End RadiusElementExtendables props\n})\nconst props = useDefaults(_props, 'BAvatar')\nconst emit = defineEmits<BAvatarEmits>()\nconst slots = defineSlots<BAvatarSlots>()\n\nconst localSrc = ref(props.src)\nwatch(\n () => props.src,\n (value) => {\n localSrc.value = value\n }\n)\n\nconst {computedLink, computedLinkProps} = useBLinkHelper(props)\n\nconst parentData = inject(avatarGroupInjectionKey, null)\n\nconst SIZES = Object.freeze([\n null,\n ...Object.keys({\n lg: null,\n sm: null,\n } satisfies Record<Size, null>),\n] as (string | null)[])\nconst FONT_SIZE_SCALE = 0.4\nconst BADGE_FONT_SIZE_SCALE = FONT_SIZE_SCALE * 0.7\n\nconst hasDefaultSlot = computed(() => !isEmptySlot(slots.default))\nconst hasBadgeSlot = computed(() => !isEmptySlot(slots.badge))\n\nconst showBadge = computed(() => !!props.badge || props.badge === '' || hasBadgeSlot.value)\nconst computedSquare = computed(() => parentData?.square.value || props.square)\n\n// const computedPropSize = useNumberishToStyle(() => props.size)\n// const propSizeIsLiteralSize = (val: unknown): val is Size =>\n// !!val && typeof val === 'string' && SIZES.includes(val)\n// const computedParentSize = useNumberishToStyle(() => parentData?.size.value)\n// const computedSize = computed(() => computedParentSize.value ?? computedPropSize.value)\n// const computedPropSizeIsLiteralSize = computed(() => propSizeIsLiteralSize(computedSize.value))\n\nconst computedSize = useNumberishToStyle(() => parentData?.size.value ?? props.size)\nconst computedSizeIsLiteralSize = computed(\n () => !!computedSize.value && SIZES.includes(computedSize.value)\n)\n\nconst computedVariant = computed(() => parentData?.variant.value ?? props.variant)\nconst computedRounded = computed(() => parentData?.rounded.value ?? props.rounded)\nconst computedRoundedTop = computed(() => parentData?.roundedTop.value ?? props.roundedTop)\nconst computedRoundedBottom = computed(() => parentData?.roundedBottom.value ?? props.roundedBottom)\nconst computedRoundedStart = computed(() => parentData?.roundedStart.value ?? props.roundedStart)\nconst computedRoundedEnd = computed(() => parentData?.roundedEnd.value ?? props.roundedEnd)\n\nconst radiusElementClasses = useRadiusElementClasses(() => ({\n rounded: computedRounded.value,\n roundedTop: computedRoundedTop.value,\n roundedBottom: computedRoundedBottom.value,\n roundedStart: computedRoundedStart.value,\n roundedEnd: computedRoundedEnd.value,\n}))\n\nconst badgeText = computed(() => (props.badge === true ? '' : props.badge))\nconst badgeImplicitlyDot = computed(() => !badgeText.value && !hasBadgeSlot.value)\n\nconst colorClasses = useColorVariantClasses(() => ({\n bgVariant: parentData?.bgVariant.value ?? props.bgVariant,\n textVariant: parentData?.textVariant.value ?? props.textVariant,\n variant: computedVariant.value,\n}))\nconst computedClasses = computed(() => [\n colorClasses.value,\n // Square overwrites all else\n computedSquare.value === true ? undefined : radiusElementClasses.value,\n {\n [`b-avatar-${computedSize.value}`]:\n computedSizeIsLiteralSize.value && computedSize.value !== 'md',\n [`btn-${computedVariant.value}`]: props.button ? computedVariant.value !== null : false,\n 'badge': !props.button && computedVariant.value !== null && hasDefaultSlot.value,\n 'btn': props.button,\n // Square is the same as rounded-0 class\n 'rounded-0': computedSquare.value === true,\n },\n])\n\nconst badgeStyle = computed<StyleValue>(() => ({\n fontSize:\n (!computedSizeIsLiteralSize.value\n ? `calc(${computedSize.value} * ${BADGE_FONT_SIZE_SCALE})`\n : '') || '',\n}))\n\nconst textFontStyle = computed<StyleValue>(() => {\n const fontSize = !computedSizeIsLiteralSize.value\n ? `calc(${computedSize.value} * ${FONT_SIZE_SCALE})`\n : null\n return fontSize ? {fontSize} : {}\n})\n\nconst marginStyle = computed(() => {\n const overlapScale = parentData?.overlapScale?.value || 0\n\n const value =\n computedSize.value && overlapScale ? `calc(${computedSize.value} * -${overlapScale})` : null\n return value ? {marginLeft: value, marginRight: value} : {}\n})\n\nconst computedTag = computed(() => (computedLink.value ? BLink : props.button ? 'button' : 'span'))\n\nconst computedStyle = computed<CSSProperties>(() => ({\n ...marginStyle.value,\n ...(!computedSizeIsLiteralSize.value\n ? {\n width: computedSize.value,\n height: computedSize.value,\n }\n : undefined),\n}))\n\nconst clicked = (e: Readonly<MouseEvent>): void => {\n if (!props.disabled && (computedLink.value || props.button)) emit('click', e)\n}\n\nconst onImgError = (e: Readonly<Event>) => {\n localSrc.value = undefined\n emit('img-error', e)\n}\n</script>\n","<template>\n <component\n :is=\"computedTag\"\n class=\"b-avatar\"\n :class=\"computedClasses\"\n :style=\"computedStyle\"\n v-bind=\"computedLinkProps\"\n :type=\"props.button && !computedLink ? props.buttonType : undefined\"\n :disabled=\"props.disabled || null\"\n :variant=\"null\"\n @click=\"clicked\"\n >\n <span v-if=\"hasDefaultSlot\" class=\"b-avatar-custom\">\n <slot />\n </span>\n <span v-else-if=\"!!localSrc\" class=\"b-avatar-img\">\n <img :src=\"localSrc\" :alt=\"props.alt\" @error=\"onImgError\" />\n </span>\n <span v-else-if=\"!!props.text\" class=\"b-avatar-text\" :style=\"textFontStyle\">\n {{ props.text }}\n </span>\n <span v-else class=\"b-avatar-img\"\n ><svg\n xmlns=\"http://www.w3.org/2000/svg\"\n width=\"80%\"\n height=\"80%\"\n fill=\"currentColor\"\n class=\"bi bi-person-fill\"\n viewBox=\"0 0 16 16\"\n >\n <path d=\"M3 14s-1 0-1-1 1-4 6-4 6 3 6 4-1 1-1 1zm5-6a3 3 0 1 0 0-6 3 3 0 0 0 0 6\" />\n </svg>\n </span>\n <BBadge\n v-if=\"showBadge\"\n :pill=\"props.badgePill\"\n :dot-indicator=\"props.badgeDotIndicator || badgeImplicitlyDot\"\n :variant=\"props.badgeVariant\"\n :bg-variant=\"props.badgeBgVariant\"\n :text-variant=\"props.badgeTextVariant\"\n :style=\"badgeStyle\"\n :placement=\"props.badgePlacement\"\n >\n <slot name=\"badge\">\n {{ badgeText }}\n </slot>\n </BBadge>\n </component>\n</template>\n\n<script setup lang=\"ts\">\nimport {avatarGroupInjectionKey} from '../../utils/keys'\nimport {computed, type CSSProperties, inject, ref, type StyleValue, watch} from 'vue'\nimport type {BAvatarProps} from '../../types/ComponentProps'\nimport BLink from '../BLink/BLink.vue'\nimport BBadge from '../BBadge/BBadge.vue'\nimport {useBLinkHelper} from '../../composables/useBLinkHelper'\nimport {isEmptySlot} from '../../utils/dom'\nimport {useNumberishToStyle} from '../../composables/useNumberishToStyle'\nimport {useRadiusElementClasses} from '../../composables/useRadiusElementClasses'\nimport {useColorVariantClasses} from '../../composables/useColorVariantClasses'\nimport type {BAvatarEmits, BAvatarSlots, Size} from '../../types'\nimport {useDefaults} from '../../composables/useDefaults'\n\nconst _props = withDefaults(defineProps<BAvatarProps>(), {\n alt: 'avatar',\n badge: false,\n badgeBgVariant: null,\n badgeTextVariant: null,\n badgeVariant: 'primary',\n badgePlacement: 'bottom-end',\n badgeDotIndicator: false,\n badgePill: false,\n button: false,\n buttonType: 'button',\n size: undefined,\n square: false,\n src: undefined,\n text: undefined,\n // Link props\n variant: 'secondary',\n // All others use defaults\n active: undefined,\n activeClass: undefined,\n disabled: undefined,\n exactActiveClass: undefined,\n href: undefined,\n opacity: undefined,\n opacityHover: undefined,\n rel: undefined,\n replace: undefined,\n stretched: false,\n routerComponentName: undefined,\n target: undefined,\n underlineOffset: undefined,\n underlineOffsetHover: undefined,\n underlineOpacity: undefined,\n underlineOpacityHover: undefined,\n underlineVariant: undefined,\n // End link props\n // ColorExtendables props\n // Variant is here as well\n bgVariant: null,\n textVariant: null,\n // End ColorExtendables props\n // RadiusElementExtendables props\n rounded: 'circle',\n roundedBottom: undefined,\n roundedEnd: undefined,\n roundedStart: undefined,\n roundedTop: undefined,\n // End RadiusElementExtendables props\n})\nconst props = useDefaults(_props, 'BAvatar')\nconst emit = defineEmits<BAvatarEmits>()\nconst slots = defineSlots<BAvatarSlots>()\n\nconst localSrc = ref(props.src)\nwatch(\n () => props.src,\n (value) => {\n localSrc.value = value\n }\n)\n\nconst {computedLink, computedLinkProps} = useBLinkHelper(props)\n\nconst parentData = inject(avatarGroupInjectionKey, null)\n\nconst SIZES = Object.freeze([\n null,\n ...Object.keys({\n lg: null,\n sm: null,\n } satisfies Record<Size, null>),\n] as (string | null)[])\nconst FONT_SIZE_SCALE = 0.4\nconst BADGE_FONT_SIZE_SCALE = FONT_SIZE_SCALE * 0.7\n\nconst hasDefaultSlot = computed(() => !isEmptySlot(slots.default))\nconst hasBadgeSlot = computed(() => !isEmptySlot(slots.badge))\n\nconst showBadge = computed(() => !!props.badge || props.badge === '' || hasBadgeSlot.value)\nconst computedSquare = computed(() => parentData?.square.value || props.square)\n\n// const computedPropSize = useNumberishToStyle(() => props.size)\n// const propSizeIsLiteralSize = (val: unknown): val is Size =>\n// !!val && typeof val === 'string' && SIZES.includes(val)\n// const computedParentSize = useNumberishToStyle(() => parentData?.size.value)\n// const computedSize = computed(() => computedParentSize.value ?? computedPropSize.value)\n// const computedPropSizeIsLiteralSize = computed(() => propSizeIsLiteralSize(computedSize.value))\n\nconst computedSize = useNumberishToStyle(() => parentData?.size.value ?? props.size)\nconst computedSizeIsLiteralSize = computed(\n () => !!computedSize.value && SIZES.includes(computedSize.value)\n)\n\nconst computedVariant = computed(() => parentData?.variant.value ?? props.variant)\nconst computedRounded = computed(() => parentData?.rounded.value ?? props.rounded)\nconst computedRoundedTop = computed(() => parentData?.roundedTop.value ?? props.roundedTop)\nconst computedRoundedBottom = computed(() => parentData?.roundedBottom.value ?? props.roundedBottom)\nconst computedRoundedStart = computed(() => parentData?.roundedStart.value ?? props.roundedStart)\nconst computedRoundedEnd = computed(() => parentData?.roundedEnd.value ?? props.roundedEnd)\n\nconst radiusElementClasses = useRadiusElementClasses(() => ({\n rounded: computedRounded.value,\n roundedTop: computedRoundedTop.value,\n roundedBottom: computedRoundedBottom.value,\n roundedStart: computedRoundedStart.value,\n roundedEnd: computedRoundedEnd.value,\n}))\n\nconst badgeText = computed(() => (props.badge === true ? '' : props.badge))\nconst badgeImplicitlyDot = computed(() => !badgeText.value && !hasBadgeSlot.value)\n\nconst colorClasses = useColorVariantClasses(() => ({\n bgVariant: parentData?.bgVariant.value ?? props.bgVariant,\n textVariant: parentData?.textVariant.value ?? props.textVariant,\n variant: computedVariant.value,\n}))\nconst computedClasses = computed(() => [\n colorClasses.value,\n // Square overwrites all else\n computedSquare.value === true ? undefined : radiusElementClasses.value,\n {\n [`b-avatar-${computedSize.value}`]:\n computedSizeIsLiteralSize.value && computedSize.value !== 'md',\n [`btn-${computedVariant.value}`]: props.button ? computedVariant.value !== null : false,\n 'badge': !props.button && computedVariant.value !== null && hasDefaultSlot.value,\n 'btn': props.button,\n // Square is the same as rounded-0 class\n 'rounded-0': computedSquare.value === true,\n },\n])\n\nconst badgeStyle = computed<StyleValue>(() => ({\n fontSize:\n (!computedSizeIsLiteralSize.value\n ? `calc(${computedSize.value} * ${BADGE_FONT_SIZE_SCALE})`\n : '') || '',\n}))\n\nconst textFontStyle = computed<StyleValue>(() => {\n const fontSize = !computedSizeIsLiteralSize.value\n ? `calc(${computedSize.value} * ${FONT_SIZE_SCALE})`\n : null\n return fontSize ? {fontSize} : {}\n})\n\nconst marginStyle = computed(() => {\n const overlapScale = parentData?.overlapScale?.value || 0\n\n const value =\n computedSize.value && overlapScale ? `calc(${computedSize.value} * -${overlapScale})` : null\n return value ? {marginLeft: value, marginRight: value} : {}\n})\n\nconst computedTag = computed(() => (computedLink.value ? BLink : props.button ? 'button' : 'span'))\n\nconst computedStyle = computed<CSSProperties>(() => ({\n ...marginStyle.value,\n ...(!computedSizeIsLiteralSize.value\n ? {\n width: computedSize.value,\n height: computedSize.value,\n }\n : undefined),\n}))\n\nconst clicked = (e: Readonly<MouseEvent>): void => {\n if (!props.disabled && (computedLink.value || props.button)) emit('click', e)\n}\n\nconst onImgError = (e: Readonly<Event>) => {\n localSrc.value = undefined\n emit('img-error', e)\n}\n</script>\n","<template>\n <component :is=\"props.tag\" class=\"b-avatar-group\" role=\"group\">\n <div class=\"b-avatar-group-inner\" :style=\"paddingStyle\">\n <slot />\n </div>\n </component>\n</template>\n\n<script setup lang=\"ts\">\nimport {computed, provide, type StyleValue, toRef} from 'vue'\nimport type {BAvatarGroupProps} from '../../types/ComponentProps'\nimport {avatarGroupInjectionKey} from '../../utils/keys'\nimport {useDefaults} from '../../composables/useDefaults'\nimport {useToNumber} from '@vueuse/core'\nimport {useNumberishToStyle} from '../../composables/useNumberishToStyle'\nimport type {BAvatarGroupSlots} from '../../types'\n\nconst _props = withDefaults(defineProps<BAvatarGroupProps>(), {\n overlap: 0.3,\n size: undefined,\n square: false,\n tag: 'div',\n // RadiusElementExtendables props\n rounded: 'circle',\n roundedBottom: undefined,\n roundedEnd: undefined,\n roundedStart: undefined,\n roundedTop: undefined,\n // End RadiusElementExtendables props\n // ColorExtendables props\n bgVariant: null,\n textVariant: null,\n variant: null,\n // End ColorExtendables props\n})\nconst props = useDefaults(_props, 'BAvatarGroup')\ndefineSlots<BAvatarGroupSlots>()\n\nconst overlapNumber = useToNumber(() => props.overlap)\n\nconst computedSize = useNumberishToStyle(() => props.size)\nconst overlapScale = computed(() => Math.min(Math.max(overlapNumber.value, 0), 1) / 2)\n\nconst paddingStyle = computed<StyleValue>(() => {\n const value = computedSize.value ? `calc(${computedSize.value} * ${overlapScale.value})` : null\n return value ? {paddingLeft: value, paddingRight: value} : {}\n})\n\nprovide(avatarGroupInjectionKey, {\n overlapScale,\n size: toRef(() => props.size),\n square: toRef(() => props.square),\n rounded: toRef(() => props.rounded),\n roundedTop: toRef(() => props.roundedTop),\n roundedBottom: toRef(() => props.roundedBottom),\n roundedStart: toRef(() => props.roundedStart),\n roundedEnd: toRef(() => props.roundedEnd),\n variant: toRef(() => props.variant),\n bgVariant: toRef(() => props.bgVariant),\n textVariant: toRef(() => props.textVariant),\n})\n</script>\n","<template>\n <component :is=\"props.tag\" class=\"b-avatar-group\" role=\"group\">\n <div class=\"b-avatar-group-inner\" :style=\"paddingStyle\">\n <slot />\n </div>\n </component>\n</template>\n\n<script setup lang=\"ts\">\nimport {computed, provide, type StyleValue, toRef} from 'vue'\nimport type {BAvatarGroupProps} from '../../types/ComponentProps'\nimport {avatarGroupInjectionKey} from '../../utils/keys'\nimport {useDefaults} from '../../composables/useDefaults'\nimport {useToNumber} from '@vueuse/core'\nimport {useNumberishToStyle} from '../../composables/useNumberishToStyle'\nimport type {BAvatarGroupSlots} from '../../types'\n\nconst _props = withDefaults(defineProps<BAvatarGroupProps>(), {\n overlap: 0.3,\n size: undefined,\n square: false,\n tag: 'div',\n // RadiusElementExtendables props\n rounded: 'circle',\n roundedBottom: undefined,\n roundedEnd: undefined,\n roundedStart: undefined,\n roundedTop: undefined,\n // End RadiusElementExtendables props\n // ColorExtendables props\n bgVariant: null,\n textVariant: null,\n variant: null,\n // End ColorExtendables props\n})\nconst props = useDefaults(_props, 'BAvatarGroup')\ndefineSlots<BAvatarGroupSlots>()\n\nconst overlapNumber = useToNumber(() => props.overlap)\n\nconst computedSize = useNumberishToStyle(() => props.size)\nconst overlapScale = computed(() => Math.min(Math.max(overlapNumber.value, 0), 1) / 2)\n\nconst paddingStyle = computed<StyleValue>(() => {\n const value = computedSize.value ? `calc(${computedSize.value} * ${overlapScale.value})` : null\n return value ? {paddingLeft: value, paddingRight: value} : {}\n})\n\nprovide(avatarGroupInjectionKey, {\n overlapScale,\n size: toRef(() => props.size),\n square: toRef(() => props.square),\n rounded: toRef(() => props.rounded),\n roundedTop: toRef(() => props.roundedTop),\n roundedBottom: toRef(() => props.roundedBottom),\n roundedStart: toRef(() => props.roundedStart),\n roundedEnd: toRef(() => props.roundedEnd),\n variant: toRef(() => props.variant),\n bgVariant: toRef(() => props.bgVariant),\n textVariant: toRef(() => props.textVariant),\n})\n</script>\n"],"mappings":"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"}
|
|
@@ -3,7 +3,7 @@ const require_keys = require("./keys-durSVUrO.js");
|
|
|
3
3
|
const require_dom = require("./dom-Bs6DzM72.js");
|
|
4
4
|
const require_useDefaults = require("./useDefaults-DsLf4iRY.js");
|
|
5
5
|
require("./constants-hccBP09R.js");
|
|
6
|
-
require("./BButton-
|
|
6
|
+
require("./BButton-Bw4HgpsF.js");
|
|
7
7
|
require("./BCloseButton-CN__Jjcj.js");
|
|
8
8
|
let vue = require("vue");
|
|
9
9
|
//#endregion
|
|
@@ -12,7 +12,7 @@ var BButtonGroup_default = /* @__PURE__ */ (0, vue.defineComponent)({
|
|
|
12
12
|
__name: "BButtonGroup",
|
|
13
13
|
props: {
|
|
14
14
|
ariaLabel: { default: "Group" },
|
|
15
|
-
size: { default:
|
|
15
|
+
size: { default: void 0 },
|
|
16
16
|
tag: { default: "div" },
|
|
17
17
|
vertical: {
|
|
18
18
|
type: Boolean,
|
|
@@ -24,7 +24,7 @@ var BButtonGroup_default = /* @__PURE__ */ (0, vue.defineComponent)({
|
|
|
24
24
|
const props = require_useDefaults.useDefaults(__props, "BButtonGroup");
|
|
25
25
|
const computedClasses = (0, vue.computed)(() => ({
|
|
26
26
|
"btn-group": !props.vertical,
|
|
27
|
-
[`btn-group-${props.size}`]: props.size !==
|
|
27
|
+
[`btn-group-${props.size}`]: props.size !== void 0,
|
|
28
28
|
"btn-group-vertical": props.vertical
|
|
29
29
|
}));
|
|
30
30
|
return (_ctx, _cache) => {
|
|
@@ -153,4 +153,4 @@ Object.defineProperty(exports, "BButtonToolbar_default", {
|
|
|
153
153
|
}
|
|
154
154
|
});
|
|
155
155
|
|
|
156
|
-
//# sourceMappingURL=BButton-
|
|
156
|
+
//# sourceMappingURL=BButton-BUYwco3v.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"BButton-BUYwco3v.js","names":[],"sources":["../src/components/BButton/BButtonGroup.vue","../src/components/BButton/BButtonGroup.vue","../src/components/BButton/BButtonToolbar.vue","../src/components/BButton/BButtonToolbar.vue"],"sourcesContent":["<template>\n <component :is=\"props.tag\" :class=\"computedClasses\" role=\"group\" :aria-label=\"props.ariaLabel\">\n <slot />\n </component>\n</template>\n\n<script setup lang=\"ts\">\nimport {useDefaults} from '../../composables/useDefaults'\nimport type {BButtonGroupProps} from '../../types/ComponentProps'\nimport {computed, provide} from 'vue'\nimport {buttonGroupKey} from '../../utils/keys'\nimport type {BButtonGroupSlots} from '../../types'\n\nprovide(buttonGroupKey, true)\n\nconst _props = withDefaults(defineProps<BButtonGroupProps>(), {\n ariaLabel: 'Group',\n size: undefined,\n tag: 'div',\n vertical: false,\n})\nconst props = useDefaults(_props, 'BButtonGroup')\ndefineSlots<BButtonGroupSlots>()\n\nconst computedClasses = computed(() => ({\n 'btn-group': !props.vertical,\n [`btn-group-${props.size}`]: props.size !== undefined,\n 'btn-group-vertical': props.vertical,\n}))\n</script>\n","<template>\n <component :is=\"props.tag\" :class=\"computedClasses\" role=\"group\" :aria-label=\"props.ariaLabel\">\n <slot />\n </component>\n</template>\n\n<script setup lang=\"ts\">\nimport {useDefaults} from '../../composables/useDefaults'\nimport type {BButtonGroupProps} from '../../types/ComponentProps'\nimport {computed, provide} from 'vue'\nimport {buttonGroupKey} from '../../utils/keys'\nimport type {BButtonGroupSlots} from '../../types'\n\nprovide(buttonGroupKey, true)\n\nconst _props = withDefaults(defineProps<BButtonGroupProps>(), {\n ariaLabel: 'Group',\n size: undefined,\n tag: 'div',\n vertical: false,\n})\nconst props = useDefaults(_props, 'BButtonGroup')\ndefineSlots<BButtonGroupSlots>()\n\nconst computedClasses = computed(() => ({\n 'btn-group': !props.vertical,\n [`btn-group-${props.size}`]: props.size !== undefined,\n 'btn-group-vertical': props.vertical,\n}))\n</script>\n","<template>\n <div\n ref=\"toolbarRef\"\n :class=\"computedClasses\"\n class=\"btn-toolbar\"\n :role=\"props.role\"\n :aria-label=\"props.ariaLabel\"\n @keydown=\"handleKeyNav\"\n >\n <slot />\n </div>\n</template>\n\n<script setup lang=\"ts\">\nimport type {BButtonToolbarSlots, BButtonToolbarProps} from '../../types'\nimport {useDefaults} from '../../composables/useDefaults'\nimport {computed, nextTick, useTemplateRef} from 'vue'\nimport {CODE_DOWN, CODE_END, CODE_HOME, CODE_LEFT, CODE_RIGHT, CODE_UP} from '../../utils/constants'\nimport {getActiveElement, getSafeWindow} from '../../utils/dom'\n\nconst _props = withDefaults(defineProps<BButtonToolbarProps>(), {\n ariaLabel: 'Group',\n justify: false,\n keyNav: false,\n role: 'toolbar',\n})\nconst props = useDefaults(_props, 'BButtonToolbar')\ndefineSlots<BButtonToolbarSlots>()\n\nconst toolbarRef = useTemplateRef<HTMLElement>('toolbarRef')\n\nconst computedClasses = computed(() => ({\n 'justify-content-between': props.justify,\n}))\n\n// Get all focusable elements within the toolbar\nconst getFocusableElements = (): HTMLElement[] => {\n if (!toolbarRef.value) return []\n\n const selector =\n 'button:not(:disabled), [href]:not(:disabled), input:not(:disabled), select:not(:disabled), textarea:not(:disabled), [tabindex]:not([tabindex=\"-1\"]):not(:disabled)'\n const elements = Array.from(toolbarRef.value.querySelectorAll(selector)) as HTMLElement[]\n\n // Filter out elements that are not visible or have display:none\n return elements.filter((el) => {\n const style = getSafeWindow()?.getComputedStyle(el)\n return style && style.display !== 'none' && style.visibility !== 'hidden'\n })\n}\n\nconst isDisabled = (element: HTMLElement): boolean =>\n element.hasAttribute('disabled') || element.getAttribute('aria-disabled') === 'true'\n\nconst focusFirst = () => {\n nextTick(() => {\n const elements = getFocusableElements()\n const firstEnabled = elements.find((el) => !isDisabled(el))\n firstEnabled?.focus()\n })\n}\n\nconst focusLast = () => {\n nextTick(() => {\n const elements = getFocusableElements()\n const lastEnabled = elements.reverse().find((el) => !isDisabled(el))\n lastEnabled?.focus()\n })\n}\n\nconst focusPrev = () => {\n nextTick(() => {\n const elements = getFocusableElements()\n const activeElement = getActiveElement() as HTMLElement\n const currentIndex = elements.indexOf(activeElement)\n\n if (currentIndex > 0) {\n // Look backwards for the first non-disabled element\n for (let i = currentIndex - 1; i >= 0; i--) {\n const el = elements[i]\n if (el !== undefined && !isDisabled(el)) {\n elements[i]?.focus()\n break\n }\n }\n }\n })\n}\n\nconst focusNext = () => {\n nextTick(() => {\n const elements = getFocusableElements()\n const activeElement = getActiveElement() as HTMLElement\n const currentIndex = elements.indexOf(activeElement)\n\n if (currentIndex < elements.length - 1) {\n // Look forwards for the first non-disabled element\n for (let i = currentIndex + 1; i < elements.length; i++) {\n const el = elements[i]\n if (el !== undefined && !isDisabled(el)) {\n elements[i]?.focus()\n break\n }\n }\n }\n })\n}\n\nconst handleKeyNav = (event: KeyboardEvent) => {\n if (!props.keyNav) return\n\n const {code, shiftKey} = event\n\n if (code === CODE_LEFT || code === CODE_UP) {\n event.preventDefault()\n if (shiftKey) {\n focusFirst()\n } else {\n focusPrev()\n }\n } else if (code === CODE_RIGHT || code === CODE_DOWN) {\n event.preventDefault()\n if (shiftKey) {\n focusLast()\n } else {\n focusNext()\n }\n } else if (code === CODE_HOME) {\n event.preventDefault()\n focusFirst()\n } else if (code === CODE_END) {\n event.preventDefault()\n focusLast()\n }\n}\n</script>\n","<template>\n <div\n ref=\"toolbarRef\"\n :class=\"computedClasses\"\n class=\"btn-toolbar\"\n :role=\"props.role\"\n :aria-label=\"props.ariaLabel\"\n @keydown=\"handleKeyNav\"\n >\n <slot />\n </div>\n</template>\n\n<script setup lang=\"ts\">\nimport type {BButtonToolbarSlots, BButtonToolbarProps} from '../../types'\nimport {useDefaults} from '../../composables/useDefaults'\nimport {computed, nextTick, useTemplateRef} from 'vue'\nimport {CODE_DOWN, CODE_END, CODE_HOME, CODE_LEFT, CODE_RIGHT, CODE_UP} from '../../utils/constants'\nimport {getActiveElement, getSafeWindow} from '../../utils/dom'\n\nconst _props = withDefaults(defineProps<BButtonToolbarProps>(), {\n ariaLabel: 'Group',\n justify: false,\n keyNav: false,\n role: 'toolbar',\n})\nconst props = useDefaults(_props, 'BButtonToolbar')\ndefineSlots<BButtonToolbarSlots>()\n\nconst toolbarRef = useTemplateRef<HTMLElement>('toolbarRef')\n\nconst computedClasses = computed(() => ({\n 'justify-content-between': props.justify,\n}))\n\n// Get all focusable elements within the toolbar\nconst getFocusableElements = (): HTMLElement[] => {\n if (!toolbarRef.value) return []\n\n const selector =\n 'button:not(:disabled), [href]:not(:disabled), input:not(:disabled), select:not(:disabled), textarea:not(:disabled), [tabindex]:not([tabindex=\"-1\"]):not(:disabled)'\n const elements = Array.from(toolbarRef.value.querySelectorAll(selector)) as HTMLElement[]\n\n // Filter out elements that are not visible or have display:none\n return elements.filter((el) => {\n const style = getSafeWindow()?.getComputedStyle(el)\n return style && style.display !== 'none' && style.visibility !== 'hidden'\n })\n}\n\nconst isDisabled = (element: HTMLElement): boolean =>\n element.hasAttribute('disabled') || element.getAttribute('aria-disabled') === 'true'\n\nconst focusFirst = () => {\n nextTick(() => {\n const elements = getFocusableElements()\n const firstEnabled = elements.find((el) => !isDisabled(el))\n firstEnabled?.focus()\n })\n}\n\nconst focusLast = () => {\n nextTick(() => {\n const elements = getFocusableElements()\n const lastEnabled = elements.reverse().find((el) => !isDisabled(el))\n lastEnabled?.focus()\n })\n}\n\nconst focusPrev = () => {\n nextTick(() => {\n const elements = getFocusableElements()\n const activeElement = getActiveElement() as HTMLElement\n const currentIndex = elements.indexOf(activeElement)\n\n if (currentIndex > 0) {\n // Look backwards for the first non-disabled element\n for (let i = currentIndex - 1; i >= 0; i--) {\n const el = elements[i]\n if (el !== undefined && !isDisabled(el)) {\n elements[i]?.focus()\n break\n }\n }\n }\n })\n}\n\nconst focusNext = () => {\n nextTick(() => {\n const elements = getFocusableElements()\n const activeElement = getActiveElement() as HTMLElement\n const currentIndex = elements.indexOf(activeElement)\n\n if (currentIndex < elements.length - 1) {\n // Look forwards for the first non-disabled element\n for (let i = currentIndex + 1; i < elements.length; i++) {\n const el = elements[i]\n if (el !== undefined && !isDisabled(el)) {\n elements[i]?.focus()\n break\n }\n }\n }\n })\n}\n\nconst handleKeyNav = (event: KeyboardEvent) => {\n if (!props.keyNav) return\n\n const {code, shiftKey} = event\n\n if (code === CODE_LEFT || code === CODE_UP) {\n event.preventDefault()\n if (shiftKey) {\n focusFirst()\n } else {\n focusPrev()\n }\n } else if (code === CODE_RIGHT || code === CODE_DOWN) {\n event.preventDefault()\n if (shiftKey) {\n focusLast()\n } else {\n focusNext()\n }\n } else if (code === CODE_HOME) {\n event.preventDefault()\n focusFirst()\n } else if (code === CODE_END) {\n event.preventDefault()\n focusLast()\n }\n}\n</script>\n"],"mappings":"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"}
|
|
@@ -23,7 +23,7 @@ var BButton_default = /* @__PURE__ */ (0, vue.defineComponent)({
|
|
|
23
23
|
type: Boolean,
|
|
24
24
|
default: false
|
|
25
25
|
},
|
|
26
|
-
size: { default:
|
|
26
|
+
size: { default: void 0 },
|
|
27
27
|
squared: {
|
|
28
28
|
type: Boolean,
|
|
29
29
|
default: false
|
|
@@ -117,17 +117,14 @@ var BButton_default = /* @__PURE__ */ (0, vue.defineComponent)({
|
|
|
117
117
|
underlineVariant: props.underlineVariant,
|
|
118
118
|
variant: variantIsLinkTypeSubset.value === true ? props.variant?.slice(5) : null
|
|
119
119
|
} : void 0 })));
|
|
120
|
-
const computedClasses = (0, vue.computed)(() => [
|
|
121
|
-
|
|
122
|
-
[`btn-${props.
|
|
123
|
-
|
|
124
|
-
|
|
125
|
-
|
|
126
|
-
|
|
127
|
-
|
|
128
|
-
"disabled": props.disabled
|
|
129
|
-
}
|
|
130
|
-
]);
|
|
120
|
+
const computedClasses = (0, vue.computed)(() => [variantIsLinkType.value === true && computedLink.value === false ? linkValueClasses.value : void 0, {
|
|
121
|
+
[`btn-${props.size}`]: props.size !== void 0,
|
|
122
|
+
[`btn-${props.variant}`]: props.variant !== null && variantIsLinkTypeSubset.value === false,
|
|
123
|
+
"active": props.active || pressedValue.value,
|
|
124
|
+
"rounded-pill": props.pill,
|
|
125
|
+
"rounded-0": props.squared,
|
|
126
|
+
"disabled": props.disabled
|
|
127
|
+
}]);
|
|
131
128
|
const computedTag = (0, vue.computed)(() => isBLink.value ? require_BLink.BLink_default : props.href ? "a" : props.tag);
|
|
132
129
|
const clicked = (e) => {
|
|
133
130
|
if (props.disabled) {
|
|
@@ -191,4 +188,4 @@ Object.defineProperty(exports, "BButton_default", {
|
|
|
191
188
|
}
|
|
192
189
|
});
|
|
193
190
|
|
|
194
|
-
//# sourceMappingURL=BButton-
|
|
191
|
+
//# sourceMappingURL=BButton-Bw4HgpsF.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"BButton-Bw4HgpsF.js","names":[],"sources":["../src/components/BButton/BButton.vue","../src/components/BButton/BButton.vue"],"sourcesContent":["<template>\n <component\n :is=\"computedTag\"\n ref=\"_element\"\n class=\"btn\"\n v-bind=\"linkProps\"\n :class=\"computedClasses\"\n :aria-disabled=\"computedAriaDisabled\"\n :aria-pressed=\"isToggle ? pressedValue : null\"\n :autocomplete=\"isToggle ? 'off' : null\"\n :disabled=\"isButton ? props.disabled : null\"\n :href=\"props.href\"\n :rel=\"computedLink ? props.rel : null\"\n :role=\"nonStandardTag || computedLink ? 'button' : null\"\n :target=\"computedLink ? props.target : null\"\n :type=\"isButton ? props.type : null\"\n :to=\"!isButton ? props.to : null\"\n @click=\"clicked\"\n >\n <slot v-if=\"props.loading\" name=\"loading\">\n <template v-if=\"!props.loadingFill\">\n {{ props.loadingText }}\n </template>\n <slot name=\"loading-spinner\">\n <BSpinner\n :small=\"props.size !== 'lg'\"\n :label=\"props.loadingFill ? props.loadingText : undefined\"\n />\n </slot>\n </slot>\n <slot v-else />\n </component>\n</template>\n\n<script setup lang=\"ts\">\nimport {computed, useTemplateRef} from 'vue'\nimport BSpinner from '../BSpinner/BSpinner.vue'\nimport {useBLinkHelper} from '../../composables/useBLinkHelper'\nimport BLink from '../BLink/BLink.vue'\nimport {useLinkClasses} from '../../composables/useLinkClasses'\nimport {onKeyStroke} from '@vueuse/core'\nimport type {BButtonProps} from '../../types/ComponentProps'\nimport {useDefaults} from '../../composables/useDefaults'\nimport type {ColorVariant} from '../../types/ColorTypes'\nimport {type BButtonEmits, type BButtonSlots} from '../../types'\n\nconst _props = withDefaults(defineProps<Omit<BButtonProps, 'pressed'>>(), {\n loading: false,\n loadingFill: false,\n loadingText: 'Loading...',\n pill: false,\n size: undefined,\n squared: false,\n tag: 'button',\n type: 'button',\n // Link props\n active: false, // Why is this active: false?\n variant: 'secondary',\n // All others use defaults\n activeClass: undefined,\n disabled: undefined,\n exactActiveClass: undefined,\n stretched: false,\n href: undefined,\n icon: false,\n opacity: undefined,\n opacityHover: undefined,\n rel: undefined,\n replace: undefined,\n routerComponentName: undefined,\n routerTag: undefined,\n target: undefined,\n to: undefined,\n underlineOffset: undefined,\n underlineOffsetHover: undefined,\n underlineOpacity: undefined,\n underlineOpacityHover: undefined,\n underlineVariant: null,\n // End link props\n})\nconst props = useDefaults(_props, 'BButton')\nconst emit = defineEmits<BButtonEmits>()\ndefineSlots<BButtonSlots>()\n\nconst element = useTemplateRef<HTMLButtonElement | null>('_element')\n\nconst pressedValue = defineModel<BButtonProps['pressed']>('pressed', {default: undefined})\n\nconst {computedLink, computedLinkProps} = useBLinkHelper(props, [\n 'activeClass',\n 'exactActiveClass',\n 'replace',\n 'routerComponentName',\n 'routerTag',\n 'noPrefetch',\n 'prefetch',\n 'prefetchOn',\n 'prefetchedClass',\n])\n\nconst isToggle = computed(() => typeof pressedValue.value === 'boolean')\nconst isButton = computed(\n () => props.tag === 'button' && props.href === undefined && props.to === undefined\n)\nconst isBLink = computed(() => props.to !== undefined)\nconst nonStandardTag = computed(() => (props.href !== undefined ? false : !isButton.value))\n\nconst linkProps = computed(() => (isBLink.value ? computedLinkProps.value : []))\nconst computedAriaDisabled = computed(() => {\n if (props.href === '#' && props.disabled) return true\n\n return nonStandardTag.value ? props.disabled : null\n})\n\nconst variantIsLinkType = computed(() => props.variant?.startsWith('link') || false)\nconst variantIsLinkTypeSubset = computed(() => props.variant?.startsWith('link-') || false)\nconst linkValueClasses = useLinkClasses(\n computed(() => ({\n ...(variantIsLinkType.value\n ? {\n icon: props.icon,\n opacity: props.opacity,\n opacityHover: props.opacityHover,\n underlineOffset: props.underlineOffset,\n underlineOffsetHover: props.underlineOffsetHover,\n underlineOpacity: props.underlineOpacity,\n underlineOpacityHover: props.underlineOpacityHover,\n underlineVariant: props.underlineVariant,\n variant:\n variantIsLinkTypeSubset.value === true\n ? (props.variant?.slice(5) as ColorVariant)\n : null,\n }\n : undefined),\n }))\n)\nconst computedClasses = computed(() => [\n variantIsLinkType.value === true && computedLink.value === false\n ? linkValueClasses.value\n : undefined,\n {\n [`btn-${props.size}`]: props.size !== undefined,\n [`btn-${props.variant}`]: props.variant !== null && variantIsLinkTypeSubset.value === false,\n 'active': props.active || pressedValue.value,\n 'rounded-pill': props.pill,\n 'rounded-0': props.squared,\n 'disabled': props.disabled,\n },\n])\n\nconst computedTag = computed(() => (isBLink.value ? BLink : props.href ? 'a' : props.tag))\n\nconst clicked = (e: Readonly<MouseEvent>): void => {\n if (props.disabled) {\n e.preventDefault()\n e.stopPropagation()\n return\n }\n emit('click', e)\n if (isToggle.value) pressedValue.value = !pressedValue.value\n}\n\nonKeyStroke(\n [' ', 'enter'],\n (e) => {\n if (props.href === '#') {\n e.preventDefault()\n element.value?.click()\n }\n },\n {target: element}\n)\n</script>\n","<template>\n <component\n :is=\"computedTag\"\n ref=\"_element\"\n class=\"btn\"\n v-bind=\"linkProps\"\n :class=\"computedClasses\"\n :aria-disabled=\"computedAriaDisabled\"\n :aria-pressed=\"isToggle ? pressedValue : null\"\n :autocomplete=\"isToggle ? 'off' : null\"\n :disabled=\"isButton ? props.disabled : null\"\n :href=\"props.href\"\n :rel=\"computedLink ? props.rel : null\"\n :role=\"nonStandardTag || computedLink ? 'button' : null\"\n :target=\"computedLink ? props.target : null\"\n :type=\"isButton ? props.type : null\"\n :to=\"!isButton ? props.to : null\"\n @click=\"clicked\"\n >\n <slot v-if=\"props.loading\" name=\"loading\">\n <template v-if=\"!props.loadingFill\">\n {{ props.loadingText }}\n </template>\n <slot name=\"loading-spinner\">\n <BSpinner\n :small=\"props.size !== 'lg'\"\n :label=\"props.loadingFill ? props.loadingText : undefined\"\n />\n </slot>\n </slot>\n <slot v-else />\n </component>\n</template>\n\n<script setup lang=\"ts\">\nimport {computed, useTemplateRef} from 'vue'\nimport BSpinner from '../BSpinner/BSpinner.vue'\nimport {useBLinkHelper} from '../../composables/useBLinkHelper'\nimport BLink from '../BLink/BLink.vue'\nimport {useLinkClasses} from '../../composables/useLinkClasses'\nimport {onKeyStroke} from '@vueuse/core'\nimport type {BButtonProps} from '../../types/ComponentProps'\nimport {useDefaults} from '../../composables/useDefaults'\nimport type {ColorVariant} from '../../types/ColorTypes'\nimport {type BButtonEmits, type BButtonSlots} from '../../types'\n\nconst _props = withDefaults(defineProps<Omit<BButtonProps, 'pressed'>>(), {\n loading: false,\n loadingFill: false,\n loadingText: 'Loading...',\n pill: false,\n size: undefined,\n squared: false,\n tag: 'button',\n type: 'button',\n // Link props\n active: false, // Why is this active: false?\n variant: 'secondary',\n // All others use defaults\n activeClass: undefined,\n disabled: undefined,\n exactActiveClass: undefined,\n stretched: false,\n href: undefined,\n icon: false,\n opacity: undefined,\n opacityHover: undefined,\n rel: undefined,\n replace: undefined,\n routerComponentName: undefined,\n routerTag: undefined,\n target: undefined,\n to: undefined,\n underlineOffset: undefined,\n underlineOffsetHover: undefined,\n underlineOpacity: undefined,\n underlineOpacityHover: undefined,\n underlineVariant: null,\n // End link props\n})\nconst props = useDefaults(_props, 'BButton')\nconst emit = defineEmits<BButtonEmits>()\ndefineSlots<BButtonSlots>()\n\nconst element = useTemplateRef<HTMLButtonElement | null>('_element')\n\nconst pressedValue = defineModel<BButtonProps['pressed']>('pressed', {default: undefined})\n\nconst {computedLink, computedLinkProps} = useBLinkHelper(props, [\n 'activeClass',\n 'exactActiveClass',\n 'replace',\n 'routerComponentName',\n 'routerTag',\n 'noPrefetch',\n 'prefetch',\n 'prefetchOn',\n 'prefetchedClass',\n])\n\nconst isToggle = computed(() => typeof pressedValue.value === 'boolean')\nconst isButton = computed(\n () => props.tag === 'button' && props.href === undefined && props.to === undefined\n)\nconst isBLink = computed(() => props.to !== undefined)\nconst nonStandardTag = computed(() => (props.href !== undefined ? false : !isButton.value))\n\nconst linkProps = computed(() => (isBLink.value ? computedLinkProps.value : []))\nconst computedAriaDisabled = computed(() => {\n if (props.href === '#' && props.disabled) return true\n\n return nonStandardTag.value ? props.disabled : null\n})\n\nconst variantIsLinkType = computed(() => props.variant?.startsWith('link') || false)\nconst variantIsLinkTypeSubset = computed(() => props.variant?.startsWith('link-') || false)\nconst linkValueClasses = useLinkClasses(\n computed(() => ({\n ...(variantIsLinkType.value\n ? {\n icon: props.icon,\n opacity: props.opacity,\n opacityHover: props.opacityHover,\n underlineOffset: props.underlineOffset,\n underlineOffsetHover: props.underlineOffsetHover,\n underlineOpacity: props.underlineOpacity,\n underlineOpacityHover: props.underlineOpacityHover,\n underlineVariant: props.underlineVariant,\n variant:\n variantIsLinkTypeSubset.value === true\n ? (props.variant?.slice(5) as ColorVariant)\n : null,\n }\n : undefined),\n }))\n)\nconst computedClasses = computed(() => [\n variantIsLinkType.value === true && computedLink.value === false\n ? linkValueClasses.value\n : undefined,\n {\n [`btn-${props.size}`]: props.size !== undefined,\n [`btn-${props.variant}`]: props.variant !== null && variantIsLinkTypeSubset.value === false,\n 'active': props.active || pressedValue.value,\n 'rounded-pill': props.pill,\n 'rounded-0': props.squared,\n 'disabled': props.disabled,\n },\n])\n\nconst computedTag = computed(() => (isBLink.value ? BLink : props.href ? 'a' : props.tag))\n\nconst clicked = (e: Readonly<MouseEvent>): void => {\n if (props.disabled) {\n e.preventDefault()\n e.stopPropagation()\n return\n }\n emit('click', e)\n if (isToggle.value) pressedValue.value = !pressedValue.value\n}\n\nonKeyStroke(\n [' ', 'enter'],\n (e) => {\n if (props.href === '#') {\n e.preventDefault()\n element.value?.click()\n }\n },\n {target: element}\n)\n</script>\n"],"mappings":"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"}
|
|
@@ -22,7 +22,7 @@ var BButton_default = /* @__PURE__ */ defineComponent({
|
|
|
22
22
|
type: Boolean,
|
|
23
23
|
default: false
|
|
24
24
|
},
|
|
25
|
-
size: { default:
|
|
25
|
+
size: { default: void 0 },
|
|
26
26
|
squared: {
|
|
27
27
|
type: Boolean,
|
|
28
28
|
default: false
|
|
@@ -116,17 +116,14 @@ var BButton_default = /* @__PURE__ */ defineComponent({
|
|
|
116
116
|
underlineVariant: props.underlineVariant,
|
|
117
117
|
variant: variantIsLinkTypeSubset.value === true ? props.variant?.slice(5) : null
|
|
118
118
|
} : void 0 })));
|
|
119
|
-
const computedClasses = computed(() => [
|
|
120
|
-
|
|
121
|
-
[`btn-${props.
|
|
122
|
-
|
|
123
|
-
|
|
124
|
-
|
|
125
|
-
|
|
126
|
-
|
|
127
|
-
"disabled": props.disabled
|
|
128
|
-
}
|
|
129
|
-
]);
|
|
119
|
+
const computedClasses = computed(() => [variantIsLinkType.value === true && computedLink.value === false ? linkValueClasses.value : void 0, {
|
|
120
|
+
[`btn-${props.size}`]: props.size !== void 0,
|
|
121
|
+
[`btn-${props.variant}`]: props.variant !== null && variantIsLinkTypeSubset.value === false,
|
|
122
|
+
"active": props.active || pressedValue.value,
|
|
123
|
+
"rounded-pill": props.pill,
|
|
124
|
+
"rounded-0": props.squared,
|
|
125
|
+
"disabled": props.disabled
|
|
126
|
+
}]);
|
|
130
127
|
const computedTag = computed(() => isBLink.value ? BLink_default : props.href ? "a" : props.tag);
|
|
131
128
|
const clicked = (e) => {
|
|
132
129
|
if (props.disabled) {
|
|
@@ -185,4 +182,4 @@ var BButton_default = /* @__PURE__ */ defineComponent({
|
|
|
185
182
|
//#endregion
|
|
186
183
|
export { BButton_default as t };
|
|
187
184
|
|
|
188
|
-
//# sourceMappingURL=BButton-
|
|
185
|
+
//# sourceMappingURL=BButton-CDo9SRvU.mjs.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"BButton-CDo9SRvU.mjs","names":[],"sources":["../src/components/BButton/BButton.vue","../src/components/BButton/BButton.vue"],"sourcesContent":["<template>\n <component\n :is=\"computedTag\"\n ref=\"_element\"\n class=\"btn\"\n v-bind=\"linkProps\"\n :class=\"computedClasses\"\n :aria-disabled=\"computedAriaDisabled\"\n :aria-pressed=\"isToggle ? pressedValue : null\"\n :autocomplete=\"isToggle ? 'off' : null\"\n :disabled=\"isButton ? props.disabled : null\"\n :href=\"props.href\"\n :rel=\"computedLink ? props.rel : null\"\n :role=\"nonStandardTag || computedLink ? 'button' : null\"\n :target=\"computedLink ? props.target : null\"\n :type=\"isButton ? props.type : null\"\n :to=\"!isButton ? props.to : null\"\n @click=\"clicked\"\n >\n <slot v-if=\"props.loading\" name=\"loading\">\n <template v-if=\"!props.loadingFill\">\n {{ props.loadingText }}\n </template>\n <slot name=\"loading-spinner\">\n <BSpinner\n :small=\"props.size !== 'lg'\"\n :label=\"props.loadingFill ? props.loadingText : undefined\"\n />\n </slot>\n </slot>\n <slot v-else />\n </component>\n</template>\n\n<script setup lang=\"ts\">\nimport {computed, useTemplateRef} from 'vue'\nimport BSpinner from '../BSpinner/BSpinner.vue'\nimport {useBLinkHelper} from '../../composables/useBLinkHelper'\nimport BLink from '../BLink/BLink.vue'\nimport {useLinkClasses} from '../../composables/useLinkClasses'\nimport {onKeyStroke} from '@vueuse/core'\nimport type {BButtonProps} from '../../types/ComponentProps'\nimport {useDefaults} from '../../composables/useDefaults'\nimport type {ColorVariant} from '../../types/ColorTypes'\nimport {type BButtonEmits, type BButtonSlots} from '../../types'\n\nconst _props = withDefaults(defineProps<Omit<BButtonProps, 'pressed'>>(), {\n loading: false,\n loadingFill: false,\n loadingText: 'Loading...',\n pill: false,\n size: undefined,\n squared: false,\n tag: 'button',\n type: 'button',\n // Link props\n active: false, // Why is this active: false?\n variant: 'secondary',\n // All others use defaults\n activeClass: undefined,\n disabled: undefined,\n exactActiveClass: undefined,\n stretched: false,\n href: undefined,\n icon: false,\n opacity: undefined,\n opacityHover: undefined,\n rel: undefined,\n replace: undefined,\n routerComponentName: undefined,\n routerTag: undefined,\n target: undefined,\n to: undefined,\n underlineOffset: undefined,\n underlineOffsetHover: undefined,\n underlineOpacity: undefined,\n underlineOpacityHover: undefined,\n underlineVariant: null,\n // End link props\n})\nconst props = useDefaults(_props, 'BButton')\nconst emit = defineEmits<BButtonEmits>()\ndefineSlots<BButtonSlots>()\n\nconst element = useTemplateRef<HTMLButtonElement | null>('_element')\n\nconst pressedValue = defineModel<BButtonProps['pressed']>('pressed', {default: undefined})\n\nconst {computedLink, computedLinkProps} = useBLinkHelper(props, [\n 'activeClass',\n 'exactActiveClass',\n 'replace',\n 'routerComponentName',\n 'routerTag',\n 'noPrefetch',\n 'prefetch',\n 'prefetchOn',\n 'prefetchedClass',\n])\n\nconst isToggle = computed(() => typeof pressedValue.value === 'boolean')\nconst isButton = computed(\n () => props.tag === 'button' && props.href === undefined && props.to === undefined\n)\nconst isBLink = computed(() => props.to !== undefined)\nconst nonStandardTag = computed(() => (props.href !== undefined ? false : !isButton.value))\n\nconst linkProps = computed(() => (isBLink.value ? computedLinkProps.value : []))\nconst computedAriaDisabled = computed(() => {\n if (props.href === '#' && props.disabled) return true\n\n return nonStandardTag.value ? props.disabled : null\n})\n\nconst variantIsLinkType = computed(() => props.variant?.startsWith('link') || false)\nconst variantIsLinkTypeSubset = computed(() => props.variant?.startsWith('link-') || false)\nconst linkValueClasses = useLinkClasses(\n computed(() => ({\n ...(variantIsLinkType.value\n ? {\n icon: props.icon,\n opacity: props.opacity,\n opacityHover: props.opacityHover,\n underlineOffset: props.underlineOffset,\n underlineOffsetHover: props.underlineOffsetHover,\n underlineOpacity: props.underlineOpacity,\n underlineOpacityHover: props.underlineOpacityHover,\n underlineVariant: props.underlineVariant,\n variant:\n variantIsLinkTypeSubset.value === true\n ? (props.variant?.slice(5) as ColorVariant)\n : null,\n }\n : undefined),\n }))\n)\nconst computedClasses = computed(() => [\n variantIsLinkType.value === true && computedLink.value === false\n ? linkValueClasses.value\n : undefined,\n {\n [`btn-${props.size}`]: props.size !== undefined,\n [`btn-${props.variant}`]: props.variant !== null && variantIsLinkTypeSubset.value === false,\n 'active': props.active || pressedValue.value,\n 'rounded-pill': props.pill,\n 'rounded-0': props.squared,\n 'disabled': props.disabled,\n },\n])\n\nconst computedTag = computed(() => (isBLink.value ? BLink : props.href ? 'a' : props.tag))\n\nconst clicked = (e: Readonly<MouseEvent>): void => {\n if (props.disabled) {\n e.preventDefault()\n e.stopPropagation()\n return\n }\n emit('click', e)\n if (isToggle.value) pressedValue.value = !pressedValue.value\n}\n\nonKeyStroke(\n [' ', 'enter'],\n (e) => {\n if (props.href === '#') {\n e.preventDefault()\n element.value?.click()\n }\n },\n {target: element}\n)\n</script>\n","<template>\n <component\n :is=\"computedTag\"\n ref=\"_element\"\n class=\"btn\"\n v-bind=\"linkProps\"\n :class=\"computedClasses\"\n :aria-disabled=\"computedAriaDisabled\"\n :aria-pressed=\"isToggle ? pressedValue : null\"\n :autocomplete=\"isToggle ? 'off' : null\"\n :disabled=\"isButton ? props.disabled : null\"\n :href=\"props.href\"\n :rel=\"computedLink ? props.rel : null\"\n :role=\"nonStandardTag || computedLink ? 'button' : null\"\n :target=\"computedLink ? props.target : null\"\n :type=\"isButton ? props.type : null\"\n :to=\"!isButton ? props.to : null\"\n @click=\"clicked\"\n >\n <slot v-if=\"props.loading\" name=\"loading\">\n <template v-if=\"!props.loadingFill\">\n {{ props.loadingText }}\n </template>\n <slot name=\"loading-spinner\">\n <BSpinner\n :small=\"props.size !== 'lg'\"\n :label=\"props.loadingFill ? props.loadingText : undefined\"\n />\n </slot>\n </slot>\n <slot v-else />\n </component>\n</template>\n\n<script setup lang=\"ts\">\nimport {computed, useTemplateRef} from 'vue'\nimport BSpinner from '../BSpinner/BSpinner.vue'\nimport {useBLinkHelper} from '../../composables/useBLinkHelper'\nimport BLink from '../BLink/BLink.vue'\nimport {useLinkClasses} from '../../composables/useLinkClasses'\nimport {onKeyStroke} from '@vueuse/core'\nimport type {BButtonProps} from '../../types/ComponentProps'\nimport {useDefaults} from '../../composables/useDefaults'\nimport type {ColorVariant} from '../../types/ColorTypes'\nimport {type BButtonEmits, type BButtonSlots} from '../../types'\n\nconst _props = withDefaults(defineProps<Omit<BButtonProps, 'pressed'>>(), {\n loading: false,\n loadingFill: false,\n loadingText: 'Loading...',\n pill: false,\n size: undefined,\n squared: false,\n tag: 'button',\n type: 'button',\n // Link props\n active: false, // Why is this active: false?\n variant: 'secondary',\n // All others use defaults\n activeClass: undefined,\n disabled: undefined,\n exactActiveClass: undefined,\n stretched: false,\n href: undefined,\n icon: false,\n opacity: undefined,\n opacityHover: undefined,\n rel: undefined,\n replace: undefined,\n routerComponentName: undefined,\n routerTag: undefined,\n target: undefined,\n to: undefined,\n underlineOffset: undefined,\n underlineOffsetHover: undefined,\n underlineOpacity: undefined,\n underlineOpacityHover: undefined,\n underlineVariant: null,\n // End link props\n})\nconst props = useDefaults(_props, 'BButton')\nconst emit = defineEmits<BButtonEmits>()\ndefineSlots<BButtonSlots>()\n\nconst element = useTemplateRef<HTMLButtonElement | null>('_element')\n\nconst pressedValue = defineModel<BButtonProps['pressed']>('pressed', {default: undefined})\n\nconst {computedLink, computedLinkProps} = useBLinkHelper(props, [\n 'activeClass',\n 'exactActiveClass',\n 'replace',\n 'routerComponentName',\n 'routerTag',\n 'noPrefetch',\n 'prefetch',\n 'prefetchOn',\n 'prefetchedClass',\n])\n\nconst isToggle = computed(() => typeof pressedValue.value === 'boolean')\nconst isButton = computed(\n () => props.tag === 'button' && props.href === undefined && props.to === undefined\n)\nconst isBLink = computed(() => props.to !== undefined)\nconst nonStandardTag = computed(() => (props.href !== undefined ? false : !isButton.value))\n\nconst linkProps = computed(() => (isBLink.value ? computedLinkProps.value : []))\nconst computedAriaDisabled = computed(() => {\n if (props.href === '#' && props.disabled) return true\n\n return nonStandardTag.value ? props.disabled : null\n})\n\nconst variantIsLinkType = computed(() => props.variant?.startsWith('link') || false)\nconst variantIsLinkTypeSubset = computed(() => props.variant?.startsWith('link-') || false)\nconst linkValueClasses = useLinkClasses(\n computed(() => ({\n ...(variantIsLinkType.value\n ? {\n icon: props.icon,\n opacity: props.opacity,\n opacityHover: props.opacityHover,\n underlineOffset: props.underlineOffset,\n underlineOffsetHover: props.underlineOffsetHover,\n underlineOpacity: props.underlineOpacity,\n underlineOpacityHover: props.underlineOpacityHover,\n underlineVariant: props.underlineVariant,\n variant:\n variantIsLinkTypeSubset.value === true\n ? (props.variant?.slice(5) as ColorVariant)\n : null,\n }\n : undefined),\n }))\n)\nconst computedClasses = computed(() => [\n variantIsLinkType.value === true && computedLink.value === false\n ? linkValueClasses.value\n : undefined,\n {\n [`btn-${props.size}`]: props.size !== undefined,\n [`btn-${props.variant}`]: props.variant !== null && variantIsLinkTypeSubset.value === false,\n 'active': props.active || pressedValue.value,\n 'rounded-pill': props.pill,\n 'rounded-0': props.squared,\n 'disabled': props.disabled,\n },\n])\n\nconst computedTag = computed(() => (isBLink.value ? BLink : props.href ? 'a' : props.tag))\n\nconst clicked = (e: Readonly<MouseEvent>): void => {\n if (props.disabled) {\n e.preventDefault()\n e.stopPropagation()\n return\n }\n emit('click', e)\n if (isToggle.value) pressedValue.value = !pressedValue.value\n}\n\nonKeyStroke(\n [' ', 'enter'],\n (e) => {\n if (props.href === '#') {\n e.preventDefault()\n element.value?.click()\n }\n },\n {target: element}\n)\n</script>\n"],"mappings":"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"}
|
|
@@ -2,7 +2,7 @@ import { a as buttonGroupKey } from "./keys-CQKrwmvN.mjs";
|
|
|
2
2
|
import { a as getSafeWindow, n as getActiveElement } from "./dom-AhkaSoh8.mjs";
|
|
3
3
|
import { t as useDefaults } from "./useDefaults-BKgBaqOV.mjs";
|
|
4
4
|
import "./constants-BSIK14yA.mjs";
|
|
5
|
-
import "./BButton-
|
|
5
|
+
import "./BButton-CDo9SRvU.mjs";
|
|
6
6
|
import "./BCloseButton-CjgbR1Ec.mjs";
|
|
7
7
|
import { computed, createBlock, createElementBlock, defineComponent, nextTick, normalizeClass, openBlock, provide, renderSlot, resolveDynamicComponent, unref, useTemplateRef, withCtx } from "vue";
|
|
8
8
|
//#endregion
|
|
@@ -11,7 +11,7 @@ var BButtonGroup_default = /* @__PURE__ */ defineComponent({
|
|
|
11
11
|
__name: "BButtonGroup",
|
|
12
12
|
props: {
|
|
13
13
|
ariaLabel: { default: "Group" },
|
|
14
|
-
size: { default:
|
|
14
|
+
size: { default: void 0 },
|
|
15
15
|
tag: { default: "div" },
|
|
16
16
|
vertical: {
|
|
17
17
|
type: Boolean,
|
|
@@ -23,7 +23,7 @@ var BButtonGroup_default = /* @__PURE__ */ defineComponent({
|
|
|
23
23
|
const props = useDefaults(__props, "BButtonGroup");
|
|
24
24
|
const computedClasses = computed(() => ({
|
|
25
25
|
"btn-group": !props.vertical,
|
|
26
|
-
[`btn-group-${props.size}`]: props.size !==
|
|
26
|
+
[`btn-group-${props.size}`]: props.size !== void 0,
|
|
27
27
|
"btn-group-vertical": props.vertical
|
|
28
28
|
}));
|
|
29
29
|
return (_ctx, _cache) => {
|
|
@@ -141,4 +141,4 @@ var BButtonToolbar_default = /* @__PURE__ */ defineComponent({
|
|
|
141
141
|
//#endregion
|
|
142
142
|
export { BButtonGroup_default as n, BButtonToolbar_default as t };
|
|
143
143
|
|
|
144
|
-
//# sourceMappingURL=BButton-
|
|
144
|
+
//# sourceMappingURL=BButton-DgequxLk.mjs.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"BButton-DgequxLk.mjs","names":[],"sources":["../src/components/BButton/BButtonGroup.vue","../src/components/BButton/BButtonGroup.vue","../src/components/BButton/BButtonToolbar.vue","../src/components/BButton/BButtonToolbar.vue"],"sourcesContent":["<template>\n <component :is=\"props.tag\" :class=\"computedClasses\" role=\"group\" :aria-label=\"props.ariaLabel\">\n <slot />\n </component>\n</template>\n\n<script setup lang=\"ts\">\nimport {useDefaults} from '../../composables/useDefaults'\nimport type {BButtonGroupProps} from '../../types/ComponentProps'\nimport {computed, provide} from 'vue'\nimport {buttonGroupKey} from '../../utils/keys'\nimport type {BButtonGroupSlots} from '../../types'\n\nprovide(buttonGroupKey, true)\n\nconst _props = withDefaults(defineProps<BButtonGroupProps>(), {\n ariaLabel: 'Group',\n size: undefined,\n tag: 'div',\n vertical: false,\n})\nconst props = useDefaults(_props, 'BButtonGroup')\ndefineSlots<BButtonGroupSlots>()\n\nconst computedClasses = computed(() => ({\n 'btn-group': !props.vertical,\n [`btn-group-${props.size}`]: props.size !== undefined,\n 'btn-group-vertical': props.vertical,\n}))\n</script>\n","<template>\n <component :is=\"props.tag\" :class=\"computedClasses\" role=\"group\" :aria-label=\"props.ariaLabel\">\n <slot />\n </component>\n</template>\n\n<script setup lang=\"ts\">\nimport {useDefaults} from '../../composables/useDefaults'\nimport type {BButtonGroupProps} from '../../types/ComponentProps'\nimport {computed, provide} from 'vue'\nimport {buttonGroupKey} from '../../utils/keys'\nimport type {BButtonGroupSlots} from '../../types'\n\nprovide(buttonGroupKey, true)\n\nconst _props = withDefaults(defineProps<BButtonGroupProps>(), {\n ariaLabel: 'Group',\n size: undefined,\n tag: 'div',\n vertical: false,\n})\nconst props = useDefaults(_props, 'BButtonGroup')\ndefineSlots<BButtonGroupSlots>()\n\nconst computedClasses = computed(() => ({\n 'btn-group': !props.vertical,\n [`btn-group-${props.size}`]: props.size !== undefined,\n 'btn-group-vertical': props.vertical,\n}))\n</script>\n","<template>\n <div\n ref=\"toolbarRef\"\n :class=\"computedClasses\"\n class=\"btn-toolbar\"\n :role=\"props.role\"\n :aria-label=\"props.ariaLabel\"\n @keydown=\"handleKeyNav\"\n >\n <slot />\n </div>\n</template>\n\n<script setup lang=\"ts\">\nimport type {BButtonToolbarSlots, BButtonToolbarProps} from '../../types'\nimport {useDefaults} from '../../composables/useDefaults'\nimport {computed, nextTick, useTemplateRef} from 'vue'\nimport {CODE_DOWN, CODE_END, CODE_HOME, CODE_LEFT, CODE_RIGHT, CODE_UP} from '../../utils/constants'\nimport {getActiveElement, getSafeWindow} from '../../utils/dom'\n\nconst _props = withDefaults(defineProps<BButtonToolbarProps>(), {\n ariaLabel: 'Group',\n justify: false,\n keyNav: false,\n role: 'toolbar',\n})\nconst props = useDefaults(_props, 'BButtonToolbar')\ndefineSlots<BButtonToolbarSlots>()\n\nconst toolbarRef = useTemplateRef<HTMLElement>('toolbarRef')\n\nconst computedClasses = computed(() => ({\n 'justify-content-between': props.justify,\n}))\n\n// Get all focusable elements within the toolbar\nconst getFocusableElements = (): HTMLElement[] => {\n if (!toolbarRef.value) return []\n\n const selector =\n 'button:not(:disabled), [href]:not(:disabled), input:not(:disabled), select:not(:disabled), textarea:not(:disabled), [tabindex]:not([tabindex=\"-1\"]):not(:disabled)'\n const elements = Array.from(toolbarRef.value.querySelectorAll(selector)) as HTMLElement[]\n\n // Filter out elements that are not visible or have display:none\n return elements.filter((el) => {\n const style = getSafeWindow()?.getComputedStyle(el)\n return style && style.display !== 'none' && style.visibility !== 'hidden'\n })\n}\n\nconst isDisabled = (element: HTMLElement): boolean =>\n element.hasAttribute('disabled') || element.getAttribute('aria-disabled') === 'true'\n\nconst focusFirst = () => {\n nextTick(() => {\n const elements = getFocusableElements()\n const firstEnabled = elements.find((el) => !isDisabled(el))\n firstEnabled?.focus()\n })\n}\n\nconst focusLast = () => {\n nextTick(() => {\n const elements = getFocusableElements()\n const lastEnabled = elements.reverse().find((el) => !isDisabled(el))\n lastEnabled?.focus()\n })\n}\n\nconst focusPrev = () => {\n nextTick(() => {\n const elements = getFocusableElements()\n const activeElement = getActiveElement() as HTMLElement\n const currentIndex = elements.indexOf(activeElement)\n\n if (currentIndex > 0) {\n // Look backwards for the first non-disabled element\n for (let i = currentIndex - 1; i >= 0; i--) {\n const el = elements[i]\n if (el !== undefined && !isDisabled(el)) {\n elements[i]?.focus()\n break\n }\n }\n }\n })\n}\n\nconst focusNext = () => {\n nextTick(() => {\n const elements = getFocusableElements()\n const activeElement = getActiveElement() as HTMLElement\n const currentIndex = elements.indexOf(activeElement)\n\n if (currentIndex < elements.length - 1) {\n // Look forwards for the first non-disabled element\n for (let i = currentIndex + 1; i < elements.length; i++) {\n const el = elements[i]\n if (el !== undefined && !isDisabled(el)) {\n elements[i]?.focus()\n break\n }\n }\n }\n })\n}\n\nconst handleKeyNav = (event: KeyboardEvent) => {\n if (!props.keyNav) return\n\n const {code, shiftKey} = event\n\n if (code === CODE_LEFT || code === CODE_UP) {\n event.preventDefault()\n if (shiftKey) {\n focusFirst()\n } else {\n focusPrev()\n }\n } else if (code === CODE_RIGHT || code === CODE_DOWN) {\n event.preventDefault()\n if (shiftKey) {\n focusLast()\n } else {\n focusNext()\n }\n } else if (code === CODE_HOME) {\n event.preventDefault()\n focusFirst()\n } else if (code === CODE_END) {\n event.preventDefault()\n focusLast()\n }\n}\n</script>\n","<template>\n <div\n ref=\"toolbarRef\"\n :class=\"computedClasses\"\n class=\"btn-toolbar\"\n :role=\"props.role\"\n :aria-label=\"props.ariaLabel\"\n @keydown=\"handleKeyNav\"\n >\n <slot />\n </div>\n</template>\n\n<script setup lang=\"ts\">\nimport type {BButtonToolbarSlots, BButtonToolbarProps} from '../../types'\nimport {useDefaults} from '../../composables/useDefaults'\nimport {computed, nextTick, useTemplateRef} from 'vue'\nimport {CODE_DOWN, CODE_END, CODE_HOME, CODE_LEFT, CODE_RIGHT, CODE_UP} from '../../utils/constants'\nimport {getActiveElement, getSafeWindow} from '../../utils/dom'\n\nconst _props = withDefaults(defineProps<BButtonToolbarProps>(), {\n ariaLabel: 'Group',\n justify: false,\n keyNav: false,\n role: 'toolbar',\n})\nconst props = useDefaults(_props, 'BButtonToolbar')\ndefineSlots<BButtonToolbarSlots>()\n\nconst toolbarRef = useTemplateRef<HTMLElement>('toolbarRef')\n\nconst computedClasses = computed(() => ({\n 'justify-content-between': props.justify,\n}))\n\n// Get all focusable elements within the toolbar\nconst getFocusableElements = (): HTMLElement[] => {\n if (!toolbarRef.value) return []\n\n const selector =\n 'button:not(:disabled), [href]:not(:disabled), input:not(:disabled), select:not(:disabled), textarea:not(:disabled), [tabindex]:not([tabindex=\"-1\"]):not(:disabled)'\n const elements = Array.from(toolbarRef.value.querySelectorAll(selector)) as HTMLElement[]\n\n // Filter out elements that are not visible or have display:none\n return elements.filter((el) => {\n const style = getSafeWindow()?.getComputedStyle(el)\n return style && style.display !== 'none' && style.visibility !== 'hidden'\n })\n}\n\nconst isDisabled = (element: HTMLElement): boolean =>\n element.hasAttribute('disabled') || element.getAttribute('aria-disabled') === 'true'\n\nconst focusFirst = () => {\n nextTick(() => {\n const elements = getFocusableElements()\n const firstEnabled = elements.find((el) => !isDisabled(el))\n firstEnabled?.focus()\n })\n}\n\nconst focusLast = () => {\n nextTick(() => {\n const elements = getFocusableElements()\n const lastEnabled = elements.reverse().find((el) => !isDisabled(el))\n lastEnabled?.focus()\n })\n}\n\nconst focusPrev = () => {\n nextTick(() => {\n const elements = getFocusableElements()\n const activeElement = getActiveElement() as HTMLElement\n const currentIndex = elements.indexOf(activeElement)\n\n if (currentIndex > 0) {\n // Look backwards for the first non-disabled element\n for (let i = currentIndex - 1; i >= 0; i--) {\n const el = elements[i]\n if (el !== undefined && !isDisabled(el)) {\n elements[i]?.focus()\n break\n }\n }\n }\n })\n}\n\nconst focusNext = () => {\n nextTick(() => {\n const elements = getFocusableElements()\n const activeElement = getActiveElement() as HTMLElement\n const currentIndex = elements.indexOf(activeElement)\n\n if (currentIndex < elements.length - 1) {\n // Look forwards for the first non-disabled element\n for (let i = currentIndex + 1; i < elements.length; i++) {\n const el = elements[i]\n if (el !== undefined && !isDisabled(el)) {\n elements[i]?.focus()\n break\n }\n }\n }\n })\n}\n\nconst handleKeyNav = (event: KeyboardEvent) => {\n if (!props.keyNav) return\n\n const {code, shiftKey} = event\n\n if (code === CODE_LEFT || code === CODE_UP) {\n event.preventDefault()\n if (shiftKey) {\n focusFirst()\n } else {\n focusPrev()\n }\n } else if (code === CODE_RIGHT || code === CODE_DOWN) {\n event.preventDefault()\n if (shiftKey) {\n focusLast()\n } else {\n focusNext()\n }\n } else if (code === CODE_HOME) {\n event.preventDefault()\n focusFirst()\n } else if (code === CODE_END) {\n event.preventDefault()\n focusLast()\n }\n}\n</script>\n"],"mappings":"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"}
|