@7pmlabs/design-system 2.0.9 → 2.1.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/README.md +4 -4
- package/dist/design-system.css +1 -1
- package/dist/design-system.js +65 -59
- package/dist/design-system100.js +1 -1
- package/dist/design-system100.js.map +1 -1
- package/dist/design-system101.js +87 -53
- package/dist/design-system101.js.map +1 -1
- package/dist/design-system103.js +5 -13
- package/dist/design-system103.js.map +1 -1
- package/dist/design-system104.js +53 -108
- package/dist/design-system104.js.map +1 -1
- package/dist/{design-system102.js → design-system105.js} +1 -1
- package/dist/{design-system102.js.map → design-system105.js.map} +1 -1
- package/dist/design-system106.js +13 -6
- package/dist/design-system106.js.map +1 -1
- package/dist/design-system107.js +93 -190
- package/dist/design-system107.js.map +1 -1
- package/dist/design-system109.js +2 -2
- package/dist/design-system109.js.map +1 -1
- package/dist/design-system110.js +183 -484
- package/dist/design-system110.js.map +1 -1
- package/dist/design-system112.js +5 -4
- package/dist/design-system112.js.map +1 -1
- package/dist/design-system113.js +507 -7
- package/dist/design-system113.js.map +1 -1
- package/dist/design-system115.js +8 -0
- package/dist/design-system115.js.map +1 -0
- package/dist/design-system116.js +7 -6
- package/dist/design-system116.js.map +1 -1
- package/dist/design-system117.js +154 -169
- package/dist/design-system117.js.map +1 -1
- package/dist/design-system119.js +2 -2
- package/dist/design-system119.js.map +1 -1
- package/dist/design-system120.js +210 -149
- package/dist/design-system120.js.map +1 -1
- package/dist/design-system122.js +5 -4
- package/dist/design-system122.js.map +1 -1
- package/dist/design-system123.js +160 -9
- package/dist/design-system123.js.map +1 -1
- package/dist/design-system125.js +8 -0
- package/dist/design-system125.js.map +1 -0
- package/dist/design-system126.js +176 -6
- package/dist/design-system126.js.map +1 -1
- package/dist/design-system128.js +8 -0
- package/dist/design-system128.js.map +1 -0
- package/dist/design-system129.js +213 -5
- package/dist/design-system129.js.map +1 -1
- package/dist/design-system131.js +5 -90
- package/dist/design-system131.js.map +1 -1
- package/dist/design-system132.js +166 -0
- package/dist/design-system132.js.map +1 -0
- package/dist/design-system134.js +5 -42
- package/dist/design-system134.js.map +1 -1
- package/dist/design-system135.js +12 -0
- package/dist/design-system135.js.map +1 -0
- package/dist/design-system136.js +274 -5
- package/dist/design-system136.js.map +1 -1
- package/dist/design-system138.js +9 -0
- package/dist/{design-system124.js.map → design-system138.js.map} +1 -1
- package/dist/design-system139.js +16 -5
- package/dist/design-system139.js.map +1 -1
- package/dist/design-system141.js +8 -0
- package/dist/{design-system127.js.map → design-system141.js.map} +1 -1
- package/dist/design-system142.js +12 -5
- package/dist/design-system142.js.map +1 -1
- package/dist/design-system143.js +78 -83
- package/dist/design-system143.js.map +1 -1
- package/dist/design-system145.js +1 -1
- package/dist/design-system145.js.map +1 -1
- package/dist/design-system146.js +42 -9
- package/dist/design-system146.js.map +1 -1
- package/dist/design-system148.js +3 -2
- package/dist/design-system148.js.map +1 -1
- package/dist/design-system149.js +230 -18
- package/dist/design-system149.js.map +1 -1
- package/dist/design-system151.js +5 -158
- package/dist/design-system151.js.map +1 -1
- package/dist/{design-system140.js → design-system152.js} +6 -6
- package/dist/{design-system140.js.map → design-system152.js.map} +1 -1
- package/dist/design-system154.js +5 -307
- package/dist/design-system154.js.map +1 -1
- package/dist/design-system155.js +98 -0
- package/dist/design-system155.js.map +1 -0
- package/dist/design-system157.js +5 -240
- package/dist/design-system157.js.map +1 -1
- package/dist/design-system158.js +12 -0
- package/dist/design-system158.js.map +1 -0
- package/dist/design-system159.js +37 -5
- package/dist/design-system159.js.map +1 -1
- package/dist/design-system160.js +4 -189
- package/dist/design-system160.js.map +1 -1
- package/dist/design-system161.js +24 -0
- package/dist/{design-system150.js.map → design-system161.js.map} +1 -1
- package/dist/design-system162.js +2 -3
- package/dist/design-system162.js.map +1 -1
- package/dist/design-system163.js +158 -3
- package/dist/design-system163.js.map +1 -1
- package/dist/{design-system153.js → design-system165.js} +2 -2
- package/dist/{design-system153.js.map → design-system165.js.map} +1 -1
- package/dist/design-system166.js +307 -6
- package/dist/design-system166.js.map +1 -1
- package/dist/{design-system156.js → design-system168.js} +2 -2
- package/dist/{design-system156.js.map → design-system168.js.map} +1 -1
- package/dist/design-system169.js +167 -6
- package/dist/design-system169.js.map +1 -1
- package/dist/design-system171.js +8 -0
- package/dist/design-system171.js.map +1 -0
- package/dist/design-system172.js +240 -6
- package/dist/design-system172.js.map +1 -1
- package/dist/design-system174.js +8 -0
- package/dist/design-system174.js.map +1 -0
- package/dist/design-system175.js +189 -6
- package/dist/design-system175.js.map +1 -1
- package/dist/design-system177.js +8 -0
- package/dist/design-system177.js.map +1 -0
- package/dist/design-system178.js +3 -5
- package/dist/design-system178.js.map +1 -1
- package/dist/design-system179.js +58 -11
- package/dist/design-system179.js.map +1 -1
- package/dist/design-system181.js +9 -0
- package/dist/design-system181.js.map +1 -0
- package/dist/design-system182.js +56 -6
- package/dist/design-system182.js.map +1 -1
- package/dist/design-system184.js +9 -0
- package/dist/{design-system167.js.map → design-system184.js.map} +1 -1
- package/dist/design-system185.js +69 -5
- package/dist/design-system185.js.map +1 -1
- package/dist/design-system187.js +9 -0
- package/dist/{design-system170.js.map → design-system187.js.map} +1 -1
- package/dist/design-system188.js +182 -5
- package/dist/design-system188.js.map +1 -1
- package/dist/design-system190.js +9 -0
- package/dist/design-system190.js.map +1 -0
- package/dist/design-system191.js +115 -5
- package/dist/design-system191.js.map +1 -1
- package/dist/design-system193.js +8 -0
- package/dist/{design-system176.js.map → design-system193.js.map} +1 -1
- package/dist/design-system194.js +11 -5
- package/dist/design-system194.js.map +1 -1
- package/dist/design-system195.js +453 -24
- package/dist/design-system195.js.map +1 -1
- package/dist/design-system197.js +5 -4
- package/dist/design-system197.js.map +1 -1
- package/dist/design-system198.js +20 -16
- package/dist/design-system198.js.map +1 -1
- package/dist/design-system200.js +1 -1
- package/dist/design-system200.js.map +1 -1
- package/dist/design-system201.js +70 -314
- package/dist/design-system201.js.map +1 -1
- package/dist/design-system203.js +1 -1
- package/dist/design-system203.js.map +1 -1
- package/dist/design-system204.js +24 -89
- package/dist/design-system204.js.map +1 -1
- package/dist/design-system206.js +1 -1
- package/dist/design-system206.js.map +1 -1
- package/dist/design-system207.js +26 -17
- package/dist/design-system207.js.map +1 -1
- package/dist/design-system209.js +5 -3
- package/dist/design-system209.js.map +1 -1
- package/dist/design-system210.js +22 -408
- package/dist/design-system210.js.map +1 -1
- package/dist/design-system212.js +1 -1
- package/dist/design-system212.js.map +1 -1
- package/dist/design-system213.js +24 -52
- package/dist/design-system213.js.map +1 -1
- package/dist/design-system215.js +1 -1
- package/dist/design-system215.js.map +1 -1
- package/dist/design-system216.js +329 -85
- package/dist/design-system216.js.map +1 -1
- package/dist/design-system218.js +5 -108
- package/dist/design-system218.js.map +1 -1
- package/dist/design-system219.js +103 -0
- package/dist/design-system219.js.map +1 -0
- package/dist/design-system221.js +5 -106
- package/dist/design-system221.js.map +1 -1
- package/dist/design-system222.js +22 -0
- package/dist/{design-system208.js.map → design-system222.js.map} +1 -1
- package/dist/design-system223.js +4 -6
- package/dist/design-system223.js.map +1 -1
- package/dist/design-system224.js +3 -737
- package/dist/design-system224.js.map +1 -1
- package/dist/design-system225.js +422 -0
- package/dist/design-system225.js.map +1 -0
- package/dist/design-system227.js +5 -11
- package/dist/design-system227.js.map +1 -1
- package/dist/design-system228.js +51 -517
- package/dist/design-system228.js.map +1 -1
- package/dist/design-system230.js +1 -1
- package/dist/design-system230.js.map +1 -1
- package/dist/design-system231.js +88 -3
- package/dist/design-system231.js.map +1 -1
- package/dist/design-system232.js +4 -46
- package/dist/design-system232.js.map +1 -1
- package/dist/design-system233.js +108 -4
- package/dist/design-system233.js.map +1 -1
- package/dist/{design-system220.js → design-system235.js} +2 -2
- package/dist/{design-system220.js.map → design-system235.js.map} +1 -1
- package/dist/design-system236.js +106 -5
- package/dist/design-system236.js.map +1 -1
- package/dist/design-system238.js +9 -0
- package/dist/design-system238.js.map +1 -0
- package/dist/design-system239.js +737 -5
- package/dist/design-system239.js.map +1 -1
- package/dist/{design-system226.js → design-system241.js} +2 -2
- package/dist/{design-system226.js.map → design-system241.js.map} +1 -1
- package/dist/design-system242.js +3 -5
- package/dist/design-system242.js.map +1 -1
- package/dist/design-system243.js +42 -50
- package/dist/design-system243.js.map +1 -1
- package/dist/design-system244.js +1 -1
- package/dist/design-system244.js.map +1 -1
- package/dist/design-system245.js +254 -141
- package/dist/design-system245.js.map +1 -1
- package/dist/design-system247.js +1 -1
- package/dist/design-system247.js.map +1 -1
- package/dist/design-system248.js +119 -7
- package/dist/design-system248.js.map +1 -1
- package/dist/design-system250.js +8 -0
- package/dist/design-system250.js.map +1 -0
- package/dist/design-system251.js +172 -5
- package/dist/design-system251.js.map +1 -1
- package/dist/design-system253.js +8 -0
- package/dist/design-system253.js.map +1 -0
- package/dist/design-system254.js +11 -6
- package/dist/design-system254.js.map +1 -1
- package/dist/design-system255.js +525 -9
- package/dist/design-system255.js.map +1 -1
- package/dist/design-system257.js +8 -0
- package/dist/design-system257.js.map +1 -0
- package/dist/design-system258.js +112 -6
- package/dist/design-system258.js.map +1 -1
- package/dist/design-system260.js +5 -374
- package/dist/design-system260.js.map +1 -1
- package/dist/design-system261.js +57 -0
- package/dist/design-system261.js.map +1 -0
- package/dist/design-system262.js +4 -6
- package/dist/design-system262.js.map +1 -1
- package/dist/design-system263.js +173 -0
- package/dist/design-system263.js.map +1 -0
- package/dist/design-system265.js +8 -0
- package/dist/design-system265.js.map +1 -0
- package/dist/design-system266.js +10 -0
- package/dist/design-system266.js.map +1 -0
- package/dist/{design-system249.js → design-system267.js} +2 -2
- package/dist/{design-system249.js.map → design-system267.js.map} +1 -1
- package/dist/design-system269.js +8 -0
- package/dist/design-system269.js.map +1 -0
- package/dist/{design-system252.js → design-system270.js} +1 -1
- package/dist/{design-system252.js.map → design-system270.js.map} +1 -1
- package/dist/design-system272.js +9 -0
- package/dist/design-system272.js.map +1 -0
- package/dist/design-system273.js +12 -0
- package/dist/design-system273.js.map +1 -0
- package/dist/{design-system256.js → design-system274.js} +2 -2
- package/dist/{design-system256.js.map → design-system274.js.map} +1 -1
- package/dist/design-system276.js +9 -0
- package/dist/design-system276.js.map +1 -0
- package/dist/{design-system259.js → design-system277.js} +1 -1
- package/dist/{design-system259.js.map → design-system277.js.map} +1 -1
- package/dist/design-system278.js +377 -0
- package/dist/design-system278.js.map +1 -0
- package/dist/design-system280.js +9 -0
- package/dist/design-system280.js.map +1 -0
- package/dist/design-system69.js +182 -13
- package/dist/design-system69.js.map +1 -1
- package/dist/design-system71.js +8 -0
- package/dist/design-system71.js.map +1 -0
- package/dist/design-system72.js +13 -5
- package/dist/design-system72.js.map +1 -1
- package/dist/design-system73.js +677 -139
- package/dist/design-system73.js.map +1 -1
- package/dist/design-system75.js +1 -1
- package/dist/design-system75.js.map +1 -1
- package/dist/design-system76.js +152 -23
- package/dist/design-system76.js.map +1 -1
- package/dist/design-system78.js +5 -49
- package/dist/design-system78.js.map +1 -1
- package/dist/design-system79.js +32 -0
- package/dist/design-system79.js.map +1 -0
- package/dist/design-system80.js +2 -3
- package/dist/design-system80.js.map +1 -1
- package/dist/design-system81.js +38 -188
- package/dist/design-system81.js.map +1 -1
- package/dist/design-system83.js +1 -1
- package/dist/design-system83.js.map +1 -1
- package/dist/design-system84.js +199 -7
- package/dist/design-system84.js.map +1 -1
- package/dist/design-system86.js +8 -0
- package/dist/design-system86.js.map +1 -0
- package/dist/design-system87.js +7 -5
- package/dist/design-system87.js.map +1 -1
- package/dist/design-system88.js +264 -48
- package/dist/design-system88.js.map +1 -1
- package/dist/design-system90.js +1 -1
- package/dist/design-system90.js.map +1 -1
- package/dist/design-system91.js +57 -11
- package/dist/design-system91.js.map +1 -1
- package/dist/design-system93.js +8 -0
- package/dist/design-system93.js.map +1 -0
- package/dist/design-system94.js +11 -5
- package/dist/design-system94.js.map +1 -1
- package/dist/design-system95.js +92 -59
- package/dist/design-system95.js.map +1 -1
- package/dist/design-system97.js +1 -1
- package/dist/design-system97.js.map +1 -1
- package/dist/design-system98.js +56 -78
- package/dist/design-system98.js.map +1 -1
- package/dist/types/components/BContextMenu/BContextMenu.spec.d.ts +1 -0
- package/dist/types/components/BContextMenu/BContextMenu.vue.d.ts +42 -0
- package/dist/types/components/BContextMenu/index.d.ts +2 -0
- package/dist/types/components/BContextMenu/types.d.ts +23 -0
- package/dist/types/components/BInputTags/BInputTags.spec.d.ts +1 -0
- package/dist/types/components/BInputTags/BInputTags.vue.d.ts +54 -0
- package/dist/types/components/BInputTags/index.d.ts +1 -0
- package/dist/types/components/BLink/BLink.spec.d.ts +1 -0
- package/dist/types/components/BLink/BLink.vue.d.ts +100 -0
- package/dist/types/components/BLink/index.d.ts +1 -0
- package/dist/types/components/BListbox/BListbox.spec.d.ts +1 -0
- package/dist/types/components/BListbox/BListbox.vue.d.ts +52 -0
- package/dist/types/components/BListbox/index.d.ts +1 -0
- package/dist/types/components/BModal/BModal.spec.d.ts +1 -0
- package/dist/types/components/BPinInput/BPinInput.spec.d.ts +1 -0
- package/dist/types/components/BPinInput/BPinInput.vue.d.ts +43 -0
- package/dist/types/components/BPinInput/index.d.ts +1 -0
- package/dist/types/components/BProgress/BProgress.vue.d.ts +47 -2
- package/dist/types/components/BTextarea/BTextarea.spec.d.ts +1 -0
- package/dist/types/components/BTextarea/BTextarea.vue.d.ts +77 -0
- package/dist/types/components/BTextarea/index.d.ts +1 -0
- package/dist/types/components/index.d.ts +7 -1
- package/package.json +1 -1
- package/dist/design-system114.js +0 -212
- package/dist/design-system114.js.map +0 -1
- package/dist/design-system124.js +0 -277
- package/dist/design-system127.js +0 -19
- package/dist/design-system130.js +0 -15
- package/dist/design-system130.js.map +0 -1
- package/dist/design-system133.js +0 -8
- package/dist/design-system133.js.map +0 -1
- package/dist/design-system137.js +0 -236
- package/dist/design-system137.js.map +0 -1
- package/dist/design-system147.js +0 -40
- package/dist/design-system147.js.map +0 -1
- package/dist/design-system150.js +0 -7
- package/dist/design-system164.js +0 -61
- package/dist/design-system164.js.map +0 -1
- package/dist/design-system167.js +0 -59
- package/dist/design-system170.js +0 -72
- package/dist/design-system173.js +0 -185
- package/dist/design-system173.js.map +0 -1
- package/dist/design-system176.js +0 -118
- package/dist/design-system180.js +0 -465
- package/dist/design-system180.js.map +0 -1
- package/dist/design-system183.js +0 -38
- package/dist/design-system183.js.map +0 -1
- package/dist/design-system186.js +0 -91
- package/dist/design-system186.js.map +0 -1
- package/dist/design-system189.js +0 -38
- package/dist/design-system189.js.map +0 -1
- package/dist/design-system192.js +0 -31
- package/dist/design-system192.js.map +0 -1
- package/dist/design-system208.js +0 -7
- package/dist/design-system217.js +0 -7
- package/dist/design-system217.js.map +0 -1
- package/dist/design-system234.js +0 -286
- package/dist/design-system234.js.map +0 -1
- package/dist/design-system237.js +0 -122
- package/dist/design-system237.js.map +0 -1
- package/dist/design-system240.js +0 -115
- package/dist/design-system240.js.map +0 -1
- package/dist/design-system70.js +0 -699
- package/dist/design-system70.js.map +0 -1
- package/dist/design-system77.js +0 -7
- package/dist/design-system77.js.map +0 -1
- package/dist/design-system85.js +0 -276
- package/dist/design-system85.js.map +0 -1
- package/dist/design-system92.js +0 -102
- package/dist/design-system92.js.map +0 -1
package/dist/design-system113.js
CHANGED
|
@@ -1,10 +1,510 @@
|
|
|
1
|
-
|
|
2
|
-
|
|
3
|
-
|
|
4
|
-
|
|
5
|
-
|
|
6
|
-
|
|
1
|
+
import { Teleport as e, Transition as t, computed as n, createBlock as r, createCommentVNode as i, createElementBlock as a, createElementVNode as o, createTextVNode as ee, createVNode as s, defineComponent as c, nextTick as l, normalizeClass as u, normalizeStyle as d, onBeforeUnmount as te, openBlock as f, ref as p, renderSlot as m, toDisplayString as h, vShow as g, watch as _, withCtx as ne, withDirectives as re, withModifiers as ie } from "vue";
|
|
2
|
+
//#region src/components/BImage/BImage.vue?vue&type=script&setup=true&lang.ts
|
|
3
|
+
var ae = ["src", "alt"], oe = {
|
|
4
|
+
key: 1,
|
|
5
|
+
class: "b-image__placeholder",
|
|
6
|
+
"aria-hidden": "true"
|
|
7
|
+
}, v = [
|
|
8
|
+
"src",
|
|
9
|
+
"alt",
|
|
10
|
+
"width",
|
|
11
|
+
"height",
|
|
12
|
+
"loading",
|
|
13
|
+
"crossorigin",
|
|
14
|
+
"decoding",
|
|
15
|
+
"referrerpolicy"
|
|
16
|
+
], se = ["aria-label"], ce = ["aria-label"], le = ["aria-label"], ue = { class: "b-image-preview__body" }, y = ["src", "alt"], b = ["aria-pressed"], x = ["aria-pressed"], S = ["disabled"], C = {
|
|
17
|
+
class: "b-image-preview__scale",
|
|
18
|
+
"aria-live": "polite",
|
|
19
|
+
"aria-atomic": "true"
|
|
20
|
+
}, de = ["disabled"], w = /* @__PURE__ */ c({
|
|
21
|
+
__name: "BImage",
|
|
22
|
+
props: {
|
|
23
|
+
src: { default: void 0 },
|
|
24
|
+
alt: { default: "" },
|
|
25
|
+
width: { default: void 0 },
|
|
26
|
+
height: { default: void 0 },
|
|
27
|
+
fallback: { default: void 0 },
|
|
28
|
+
placeholder: {
|
|
29
|
+
type: Boolean,
|
|
30
|
+
default: !1
|
|
31
|
+
},
|
|
32
|
+
placeholderSrc: { default: void 0 },
|
|
33
|
+
preview: {
|
|
34
|
+
type: Boolean,
|
|
35
|
+
default: !0
|
|
36
|
+
},
|
|
37
|
+
mask: {
|
|
38
|
+
type: Boolean,
|
|
39
|
+
default: !0
|
|
40
|
+
},
|
|
41
|
+
previewSrc: { default: void 0 },
|
|
42
|
+
previewVisible: {
|
|
43
|
+
type: Boolean,
|
|
44
|
+
default: void 0
|
|
45
|
+
},
|
|
46
|
+
scaleStep: { default: .5 },
|
|
47
|
+
minScale: { default: 1 },
|
|
48
|
+
maxScale: { default: 50 },
|
|
49
|
+
movable: {
|
|
50
|
+
type: Boolean,
|
|
51
|
+
default: !0
|
|
52
|
+
},
|
|
53
|
+
loading: { default: void 0 },
|
|
54
|
+
crossOrigin: { default: void 0 },
|
|
55
|
+
decoding: { default: void 0 },
|
|
56
|
+
referrerPolicy: { default: void 0 }
|
|
57
|
+
},
|
|
58
|
+
emits: [
|
|
59
|
+
"error",
|
|
60
|
+
"update:previewVisible",
|
|
61
|
+
"transform"
|
|
62
|
+
],
|
|
63
|
+
setup(c, { emit: w }) {
|
|
64
|
+
let T = c, E = w, D = p("loading"), O = p(!1);
|
|
65
|
+
function fe() {
|
|
66
|
+
D.value = "loaded";
|
|
67
|
+
}
|
|
68
|
+
function pe(e) {
|
|
69
|
+
T.fallback && !O.value ? (O.value = !0, D.value = "loading") : D.value = "error", E("error", e);
|
|
70
|
+
}
|
|
71
|
+
let me = n(() => O.value && T.fallback ? T.fallback : T.src);
|
|
72
|
+
_(() => T.src, () => {
|
|
73
|
+
D.value = "loading", O.value = !1;
|
|
74
|
+
});
|
|
75
|
+
let k = n(() => T.placeholderSrc && D.value === "loading"), A = n(() => {
|
|
76
|
+
let e = {};
|
|
77
|
+
return T.width != null && (e.width = typeof T.width == "number" ? `${T.width}px` : T.width), T.height != null && (e.height = typeof T.height == "number" ? `${T.height}px` : T.height), e;
|
|
78
|
+
}), j = n(() => T.preview && T.mask && D.value === "loaded"), M = p(!1), N = n(() => T.previewVisible !== void 0), P = n(() => N.value ? T.previewVisible : M.value);
|
|
79
|
+
function F() {
|
|
80
|
+
T.preview && (N.value ? E("update:previewVisible", !0) : M.value = !0, l(() => {
|
|
81
|
+
De();
|
|
82
|
+
}));
|
|
83
|
+
}
|
|
84
|
+
function I() {
|
|
85
|
+
N.value ? E("update:previewVisible", !1) : M.value = !1, l(() => {
|
|
86
|
+
Z.value?.focus();
|
|
87
|
+
});
|
|
88
|
+
}
|
|
89
|
+
let L = p(1), R = p(0), z = p(!1), B = p(!1), V = p(0), H = p(0);
|
|
90
|
+
function he() {
|
|
91
|
+
return {
|
|
92
|
+
scale: L.value,
|
|
93
|
+
rotate: R.value,
|
|
94
|
+
flipX: z.value,
|
|
95
|
+
flipY: B.value,
|
|
96
|
+
x: V.value,
|
|
97
|
+
y: H.value
|
|
98
|
+
};
|
|
99
|
+
}
|
|
100
|
+
function U(e) {
|
|
101
|
+
E("transform", {
|
|
102
|
+
transform: he(),
|
|
103
|
+
action: e
|
|
104
|
+
});
|
|
105
|
+
}
|
|
106
|
+
function W() {
|
|
107
|
+
L.value = 1, R.value = 0, z.value = !1, B.value = !1, V.value = 0, H.value = 0;
|
|
108
|
+
}
|
|
109
|
+
function ge() {
|
|
110
|
+
W(), U("reset");
|
|
111
|
+
}
|
|
112
|
+
function _e() {
|
|
113
|
+
let e = L.value + T.scaleStep;
|
|
114
|
+
L.value = Math.min(e, T.maxScale), U("zoomIn");
|
|
115
|
+
}
|
|
116
|
+
function ve() {
|
|
117
|
+
let e = L.value - T.scaleStep;
|
|
118
|
+
L.value = Math.max(e, T.minScale), U("zoomOut");
|
|
119
|
+
}
|
|
120
|
+
function ye() {
|
|
121
|
+
R.value -= 90, U("rotateLeft");
|
|
122
|
+
}
|
|
123
|
+
function be() {
|
|
124
|
+
R.value += 90, U("rotateRight");
|
|
125
|
+
}
|
|
126
|
+
function xe() {
|
|
127
|
+
z.value = !z.value, U("flipX");
|
|
128
|
+
}
|
|
129
|
+
function Se() {
|
|
130
|
+
B.value = !B.value, U("flipY");
|
|
131
|
+
}
|
|
132
|
+
let Ce = n(() => {
|
|
133
|
+
let e = [];
|
|
134
|
+
return e.push(`translate(${V.value}px, ${H.value}px)`), e.push(`scale(${z.value ? -1 : 1}, ${B.value ? -1 : 1})`), e.push(`scale(${L.value})`), e.push(`rotate(${R.value}deg)`), e.join(" ");
|
|
135
|
+
});
|
|
136
|
+
_(P, (e) => {
|
|
137
|
+
e && W();
|
|
138
|
+
});
|
|
139
|
+
let we = n(() => T.previewSrc || T.src), G = p(!1), K = p(0), q = p(0), J = p(0), Y = p(0);
|
|
140
|
+
function Te(e) {
|
|
141
|
+
if (!T.movable) return;
|
|
142
|
+
let t = e.target;
|
|
143
|
+
t.closest(".b-image-preview__toolbar") || t.closest(".b-image-preview__close") || (G.value = !0, K.value = e.clientX, q.value = e.clientY, J.value = V.value, Y.value = H.value, e.currentTarget?.setPointerCapture(e.pointerId), U("dragStart"));
|
|
144
|
+
}
|
|
145
|
+
function Ee(e) {
|
|
146
|
+
if (!G.value) return;
|
|
147
|
+
let t = e.clientX - K.value, n = e.clientY - q.value;
|
|
148
|
+
V.value = J.value + t, H.value = Y.value + n;
|
|
149
|
+
}
|
|
150
|
+
function X() {
|
|
151
|
+
G.value && (G.value = !1, U("dragEnd"));
|
|
152
|
+
}
|
|
153
|
+
let Z = p(null), Q = p(null);
|
|
154
|
+
function De() {
|
|
155
|
+
l(() => {
|
|
156
|
+
if (!Q.value) return;
|
|
157
|
+
let e = Q.value.querySelectorAll("button, [tabindex]:not([tabindex=\"-1\"])");
|
|
158
|
+
e.length > 0 && e[0].focus();
|
|
159
|
+
});
|
|
160
|
+
}
|
|
161
|
+
function Oe(e) {
|
|
162
|
+
if (e.key === "Escape") {
|
|
163
|
+
e.stopPropagation(), I();
|
|
164
|
+
return;
|
|
165
|
+
}
|
|
166
|
+
if (e.key === "Tab" && Q.value) {
|
|
167
|
+
let t = Array.from(Q.value.querySelectorAll("button, [tabindex]:not([tabindex=\"-1\"])"));
|
|
168
|
+
if (t.length === 0) return;
|
|
169
|
+
let n = t[0], r = t[t.length - 1];
|
|
170
|
+
e.shiftKey && document.activeElement === n ? (e.preventDefault(), r.focus()) : !e.shiftKey && document.activeElement === r && (e.preventDefault(), n.focus());
|
|
171
|
+
}
|
|
172
|
+
}
|
|
173
|
+
function $(e) {
|
|
174
|
+
(e.key === "Enter" || e.key === " ") && (e.preventDefault(), F());
|
|
175
|
+
}
|
|
176
|
+
_(P, (e) => {
|
|
177
|
+
typeof document > "u" || (e ? document.body.style.overflow = "hidden" : document.body.style.overflow = "");
|
|
178
|
+
}), te(() => {
|
|
179
|
+
typeof document < "u" && (document.body.style.overflow = "");
|
|
180
|
+
});
|
|
181
|
+
function ke(e) {
|
|
182
|
+
if (e.preventDefault(), e.deltaY < 0) {
|
|
183
|
+
let e = L.value + T.scaleStep;
|
|
184
|
+
L.value = Math.min(e, T.maxScale);
|
|
185
|
+
} else {
|
|
186
|
+
let e = L.value - T.scaleStep;
|
|
187
|
+
L.value = Math.max(e, T.minScale);
|
|
188
|
+
}
|
|
189
|
+
U("wheel");
|
|
190
|
+
}
|
|
191
|
+
function Ae(e) {
|
|
192
|
+
let t = e.target;
|
|
193
|
+
if (t.tagName !== "BUTTON") return;
|
|
194
|
+
let n = t.closest(".b-image-preview__toolbar");
|
|
195
|
+
if (!n) return;
|
|
196
|
+
let r = Array.from(n.querySelectorAll("button:not(:disabled)")), i = r.indexOf(t), a = -1;
|
|
197
|
+
e.key === "ArrowRight" || e.key === "ArrowDown" ? (e.preventDefault(), a = (i + 1) % r.length) : e.key === "ArrowLeft" || e.key === "ArrowUp" ? (e.preventDefault(), a = (i - 1 + r.length) % r.length) : e.key === "Home" ? (e.preventDefault(), a = 0) : e.key === "End" && (e.preventDefault(), a = r.length - 1), a >= 0 && r[a].focus();
|
|
198
|
+
}
|
|
199
|
+
return (n, l) => (f(), a("div", {
|
|
200
|
+
class: u(["b-image", {
|
|
201
|
+
"b-image--error": D.value === "error" && !c.fallback,
|
|
202
|
+
"b-image--preview": c.preview
|
|
203
|
+
}]),
|
|
204
|
+
style: d(A.value)
|
|
205
|
+
}, [
|
|
206
|
+
k.value ? (f(), a("img", {
|
|
207
|
+
key: 0,
|
|
208
|
+
class: "b-image__progressive-placeholder",
|
|
209
|
+
src: c.placeholderSrc,
|
|
210
|
+
alt: c.alt,
|
|
211
|
+
"aria-hidden": "true"
|
|
212
|
+
}, null, 8, ae)) : i("", !0),
|
|
213
|
+
(c.placeholder || n.$slots.placeholder) && D.value === "loading" && !c.placeholderSrc ? (f(), a("div", oe, [m(n.$slots, "placeholder", {}, () => [l[0] ||= o("div", { class: "b-image__placeholder-shimmer" }, null, -1)])])) : i("", !0),
|
|
214
|
+
re(o("img", {
|
|
215
|
+
class: "b-image__img",
|
|
216
|
+
src: me.value,
|
|
217
|
+
alt: c.alt,
|
|
218
|
+
width: typeof c.width == "number" ? c.width : void 0,
|
|
219
|
+
height: typeof c.height == "number" ? c.height : void 0,
|
|
220
|
+
loading: c.loading,
|
|
221
|
+
crossorigin: c.crossOrigin,
|
|
222
|
+
decoding: c.decoding,
|
|
223
|
+
referrerpolicy: c.referrerPolicy,
|
|
224
|
+
onLoad: fe,
|
|
225
|
+
onError: pe
|
|
226
|
+
}, null, 40, v), [[g, D.value !== "loading" || !c.placeholder && !n.$slots.placeholder && !c.placeholderSrc]]),
|
|
227
|
+
j.value ? (f(), a("div", {
|
|
228
|
+
key: 2,
|
|
229
|
+
ref_key: "triggerRef",
|
|
230
|
+
ref: Z,
|
|
231
|
+
class: "b-image__mask",
|
|
232
|
+
role: "button",
|
|
233
|
+
tabindex: "0",
|
|
234
|
+
"aria-label": `Preview image${c.alt ? ": " + c.alt : ""}`,
|
|
235
|
+
onClick: F,
|
|
236
|
+
onKeydown: $
|
|
237
|
+
}, [m(n.$slots, "preview-mask", {}, () => [l[1] ||= o("span", {
|
|
238
|
+
class: "b-image__mask-text",
|
|
239
|
+
"aria-hidden": "true"
|
|
240
|
+
}, [o("svg", {
|
|
241
|
+
class: "b-image__mask-icon",
|
|
242
|
+
viewBox: "0 0 24 24",
|
|
243
|
+
fill: "none",
|
|
244
|
+
stroke: "currentColor",
|
|
245
|
+
"stroke-width": "2",
|
|
246
|
+
"stroke-linecap": "round",
|
|
247
|
+
"stroke-linejoin": "round",
|
|
248
|
+
"aria-hidden": "true",
|
|
249
|
+
focusable: "false"
|
|
250
|
+
}, [o("path", { d: "M1 12s4-8 11-8 11 8 11 8-4 8-11 8-11-8-11-8z" }), o("circle", {
|
|
251
|
+
cx: "12",
|
|
252
|
+
cy: "12",
|
|
253
|
+
r: "3"
|
|
254
|
+
})]), ee(" Preview ")], -1)])], 40, se)) : c.preview && !c.mask && D.value === "loaded" ? (f(), a("div", {
|
|
255
|
+
key: 3,
|
|
256
|
+
ref_key: "triggerRef",
|
|
257
|
+
ref: Z,
|
|
258
|
+
class: "b-image__click-target",
|
|
259
|
+
role: "button",
|
|
260
|
+
tabindex: "0",
|
|
261
|
+
"aria-label": `Preview image${c.alt ? ": " + c.alt : ""}`,
|
|
262
|
+
onClick: F,
|
|
263
|
+
onKeydown: $
|
|
264
|
+
}, null, 40, ce)) : i("", !0),
|
|
265
|
+
(f(), r(e, { to: "body" }, [s(t, { name: "b-image-preview" }, {
|
|
266
|
+
default: ne(() => [P.value ? (f(), a("div", {
|
|
267
|
+
key: 0,
|
|
268
|
+
ref_key: "overlayRef",
|
|
269
|
+
ref: Q,
|
|
270
|
+
class: u(["b-image-preview", { "b-image-preview--dragging": G.value }]),
|
|
271
|
+
role: "dialog",
|
|
272
|
+
"aria-modal": "true",
|
|
273
|
+
"aria-label": `Image preview${c.alt ? ": " + c.alt : ""}`,
|
|
274
|
+
onKeydown: Oe,
|
|
275
|
+
onWheel: ie(ke, ["prevent"]),
|
|
276
|
+
onPointerdown: Te,
|
|
277
|
+
onPointermove: Ee,
|
|
278
|
+
onPointerup: X,
|
|
279
|
+
onPointercancel: X
|
|
280
|
+
}, [
|
|
281
|
+
o("div", {
|
|
282
|
+
class: "b-image-preview__backdrop",
|
|
283
|
+
onClick: I
|
|
284
|
+
}),
|
|
285
|
+
o("button", {
|
|
286
|
+
class: "b-image-preview__close",
|
|
287
|
+
type: "button",
|
|
288
|
+
"aria-label": "Close preview",
|
|
289
|
+
onClick: I
|
|
290
|
+
}, [...l[2] ||= [o("svg", {
|
|
291
|
+
viewBox: "0 0 24 24",
|
|
292
|
+
fill: "none",
|
|
293
|
+
stroke: "currentColor",
|
|
294
|
+
"stroke-width": "2",
|
|
295
|
+
"stroke-linecap": "round",
|
|
296
|
+
"stroke-linejoin": "round",
|
|
297
|
+
"aria-hidden": "true",
|
|
298
|
+
focusable: "false"
|
|
299
|
+
}, [o("line", {
|
|
300
|
+
x1: "18",
|
|
301
|
+
y1: "6",
|
|
302
|
+
x2: "6",
|
|
303
|
+
y2: "18"
|
|
304
|
+
}), o("line", {
|
|
305
|
+
x1: "6",
|
|
306
|
+
y1: "6",
|
|
307
|
+
x2: "18",
|
|
308
|
+
y2: "18"
|
|
309
|
+
})], -1)]]),
|
|
310
|
+
o("div", ue, [o("img", {
|
|
311
|
+
class: "b-image-preview__img",
|
|
312
|
+
src: we.value,
|
|
313
|
+
alt: c.alt,
|
|
314
|
+
style: d({ transform: Ce.value }),
|
|
315
|
+
draggable: "false"
|
|
316
|
+
}, null, 12, y)]),
|
|
317
|
+
o("div", {
|
|
318
|
+
class: "b-image-preview__toolbar",
|
|
319
|
+
role: "toolbar",
|
|
320
|
+
"aria-label": "Image preview controls",
|
|
321
|
+
onKeydown: Ae
|
|
322
|
+
}, [
|
|
323
|
+
o("button", {
|
|
324
|
+
type: "button",
|
|
325
|
+
"aria-label": "Flip horizontal",
|
|
326
|
+
"aria-pressed": z.value,
|
|
327
|
+
onClick: xe
|
|
328
|
+
}, [...l[3] ||= [o("svg", {
|
|
329
|
+
viewBox: "0 0 24 24",
|
|
330
|
+
fill: "none",
|
|
331
|
+
stroke: "currentColor",
|
|
332
|
+
"stroke-width": "2",
|
|
333
|
+
"aria-hidden": "true",
|
|
334
|
+
focusable: "false"
|
|
335
|
+
}, [
|
|
336
|
+
o("path", { d: "M8 3H5a2 2 0 0 0-2 2v14c0 1.1.9 2 2 2h3" }),
|
|
337
|
+
o("path", { d: "M16 3h3a2 2 0 0 1 2 2v14a2 2 0 0 1-2 2h-3" }),
|
|
338
|
+
o("line", {
|
|
339
|
+
x1: "12",
|
|
340
|
+
y1: "1",
|
|
341
|
+
x2: "12",
|
|
342
|
+
y2: "23",
|
|
343
|
+
"stroke-dasharray": "2 2"
|
|
344
|
+
})
|
|
345
|
+
], -1)]], 8, b),
|
|
346
|
+
o("button", {
|
|
347
|
+
type: "button",
|
|
348
|
+
"aria-label": "Flip vertical",
|
|
349
|
+
"aria-pressed": B.value,
|
|
350
|
+
onClick: Se
|
|
351
|
+
}, [...l[4] ||= [o("svg", {
|
|
352
|
+
viewBox: "0 0 24 24",
|
|
353
|
+
fill: "none",
|
|
354
|
+
stroke: "currentColor",
|
|
355
|
+
"stroke-width": "2",
|
|
356
|
+
"aria-hidden": "true",
|
|
357
|
+
focusable: "false"
|
|
358
|
+
}, [
|
|
359
|
+
o("path", { d: "M3 8V5a2 2 0 0 1 2-2h14c1.1 0 2 .9 2 2v3" }),
|
|
360
|
+
o("path", { d: "M3 16v3a2 2 0 0 0 2 2h14a2 2 0 0 0 2-2v-3" }),
|
|
361
|
+
o("line", {
|
|
362
|
+
x1: "1",
|
|
363
|
+
y1: "12",
|
|
364
|
+
x2: "23",
|
|
365
|
+
y2: "12",
|
|
366
|
+
"stroke-dasharray": "2 2"
|
|
367
|
+
})
|
|
368
|
+
], -1)]], 8, x),
|
|
369
|
+
o("button", {
|
|
370
|
+
type: "button",
|
|
371
|
+
"aria-label": "Rotate left",
|
|
372
|
+
onClick: ye
|
|
373
|
+
}, [...l[5] ||= [o("svg", {
|
|
374
|
+
viewBox: "0 0 24 24",
|
|
375
|
+
fill: "none",
|
|
376
|
+
stroke: "currentColor",
|
|
377
|
+
"stroke-width": "2",
|
|
378
|
+
"stroke-linecap": "round",
|
|
379
|
+
"stroke-linejoin": "round",
|
|
380
|
+
"aria-hidden": "true",
|
|
381
|
+
focusable: "false"
|
|
382
|
+
}, [o("polyline", { points: "1 4 1 10 7 10" }), o("path", { d: "M3.51 15a9 9 0 1 0 2.13-9.36L1 10" })], -1)]]),
|
|
383
|
+
o("button", {
|
|
384
|
+
type: "button",
|
|
385
|
+
"aria-label": "Rotate right",
|
|
386
|
+
onClick: be
|
|
387
|
+
}, [...l[6] ||= [o("svg", {
|
|
388
|
+
viewBox: "0 0 24 24",
|
|
389
|
+
fill: "none",
|
|
390
|
+
stroke: "currentColor",
|
|
391
|
+
"stroke-width": "2",
|
|
392
|
+
"stroke-linecap": "round",
|
|
393
|
+
"stroke-linejoin": "round",
|
|
394
|
+
"aria-hidden": "true",
|
|
395
|
+
focusable: "false"
|
|
396
|
+
}, [o("polyline", { points: "23 4 23 10 17 10" }), o("path", { d: "M20.49 15a9 9 0 1 1-2.13-9.36L23 10" })], -1)]]),
|
|
397
|
+
o("button", {
|
|
398
|
+
type: "button",
|
|
399
|
+
"aria-label": "Zoom out",
|
|
400
|
+
disabled: L.value <= c.minScale,
|
|
401
|
+
onClick: ve
|
|
402
|
+
}, [...l[7] ||= [o("svg", {
|
|
403
|
+
viewBox: "0 0 24 24",
|
|
404
|
+
fill: "none",
|
|
405
|
+
stroke: "currentColor",
|
|
406
|
+
"stroke-width": "2",
|
|
407
|
+
"stroke-linecap": "round",
|
|
408
|
+
"stroke-linejoin": "round",
|
|
409
|
+
"aria-hidden": "true",
|
|
410
|
+
focusable: "false"
|
|
411
|
+
}, [
|
|
412
|
+
o("circle", {
|
|
413
|
+
cx: "11",
|
|
414
|
+
cy: "11",
|
|
415
|
+
r: "8"
|
|
416
|
+
}),
|
|
417
|
+
o("line", {
|
|
418
|
+
x1: "21",
|
|
419
|
+
y1: "21",
|
|
420
|
+
x2: "16.65",
|
|
421
|
+
y2: "16.65"
|
|
422
|
+
}),
|
|
423
|
+
o("line", {
|
|
424
|
+
x1: "8",
|
|
425
|
+
y1: "11",
|
|
426
|
+
x2: "14",
|
|
427
|
+
y2: "11"
|
|
428
|
+
})
|
|
429
|
+
], -1)]], 8, S),
|
|
430
|
+
o("span", C, h(Math.round(L.value * 100)) + "% ", 1),
|
|
431
|
+
o("button", {
|
|
432
|
+
type: "button",
|
|
433
|
+
"aria-label": "Zoom in",
|
|
434
|
+
disabled: L.value >= c.maxScale,
|
|
435
|
+
onClick: _e
|
|
436
|
+
}, [...l[8] ||= [o("svg", {
|
|
437
|
+
viewBox: "0 0 24 24",
|
|
438
|
+
fill: "none",
|
|
439
|
+
stroke: "currentColor",
|
|
440
|
+
"stroke-width": "2",
|
|
441
|
+
"stroke-linecap": "round",
|
|
442
|
+
"stroke-linejoin": "round",
|
|
443
|
+
"aria-hidden": "true",
|
|
444
|
+
focusable: "false"
|
|
445
|
+
}, [
|
|
446
|
+
o("circle", {
|
|
447
|
+
cx: "11",
|
|
448
|
+
cy: "11",
|
|
449
|
+
r: "8"
|
|
450
|
+
}),
|
|
451
|
+
o("line", {
|
|
452
|
+
x1: "21",
|
|
453
|
+
y1: "21",
|
|
454
|
+
x2: "16.65",
|
|
455
|
+
y2: "16.65"
|
|
456
|
+
}),
|
|
457
|
+
o("line", {
|
|
458
|
+
x1: "11",
|
|
459
|
+
y1: "8",
|
|
460
|
+
x2: "11",
|
|
461
|
+
y2: "14"
|
|
462
|
+
}),
|
|
463
|
+
o("line", {
|
|
464
|
+
x1: "8",
|
|
465
|
+
y1: "11",
|
|
466
|
+
x2: "14",
|
|
467
|
+
y2: "11"
|
|
468
|
+
})
|
|
469
|
+
], -1)]], 8, de),
|
|
470
|
+
o("button", {
|
|
471
|
+
type: "button",
|
|
472
|
+
"aria-label": "Reset to original size",
|
|
473
|
+
onClick: ge
|
|
474
|
+
}, [...l[9] ||= [o("svg", {
|
|
475
|
+
viewBox: "0 0 24 24",
|
|
476
|
+
fill: "none",
|
|
477
|
+
stroke: "currentColor",
|
|
478
|
+
"stroke-width": "2",
|
|
479
|
+
"stroke-linecap": "round",
|
|
480
|
+
"stroke-linejoin": "round",
|
|
481
|
+
"aria-hidden": "true",
|
|
482
|
+
focusable: "false"
|
|
483
|
+
}, [o("rect", {
|
|
484
|
+
x: "3",
|
|
485
|
+
y: "3",
|
|
486
|
+
width: "18",
|
|
487
|
+
height: "18",
|
|
488
|
+
rx: "2",
|
|
489
|
+
ry: "2"
|
|
490
|
+
}), o("text", {
|
|
491
|
+
x: "12",
|
|
492
|
+
y: "16",
|
|
493
|
+
"text-anchor": "middle",
|
|
494
|
+
fill: "currentColor",
|
|
495
|
+
stroke: "none",
|
|
496
|
+
"font-size": "10",
|
|
497
|
+
"font-weight": "600",
|
|
498
|
+
"font-family": "system-ui"
|
|
499
|
+
}, " 1:1 ")], -1)]])
|
|
500
|
+
], 32)
|
|
501
|
+
], 42, le)) : i("", !0)]),
|
|
502
|
+
_: 1
|
|
503
|
+
})]))
|
|
504
|
+
], 6));
|
|
505
|
+
}
|
|
506
|
+
});
|
|
7
507
|
//#endregion
|
|
8
|
-
export {
|
|
508
|
+
export { w as default };
|
|
9
509
|
|
|
10
510
|
//# sourceMappingURL=design-system113.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"design-system113.js","names":[],"sources":["../src/components/BInput/types.ts"],"sourcesContent":["export enum BInputVariant {\n Outlined = 'outlined',\n Filled = 'filled',\n Borderless = 'borderless',\n Underlined = 'underlined',\n}\n\nexport enum BInputStatus {\n Error = 'error',\n Warning = 'warning',\n}\n\nexport interface BInputCountConfig {\n /** Custom character count strategy (e.g., for emoji or CJK). */\n strategy?: (value: string) => number;\n /** Maximum count to display. Triggers exceedFormatter when exceeded. */\n max?: number;\n /** Formatter when count exceeds max. */\n exceedFormatter?: (value: string, config: { max: number }) => string;\n /** Whether to show the count indicator. */\n show?: boolean | ((args: { value: string; count: number; maxLength?: number }) => string);\n}\n\nexport interface BInputFocusOptions {\n preventScroll?: boolean;\n cursor?: 'start' | 'end' | 'all';\n}\n"],"mappings":";AAAA,IAAY,IAAL,yBAAA,GAAA;QACL,EAAA,WAAA,YACA,EAAA,SAAA,UACA,EAAA,aAAA,cACA,EAAA,aAAA;KACD,EAEW,IAAL,yBAAA,GAAA;QACL,EAAA,QAAA,SACA,EAAA,UAAA;KACD"}
|
|
1
|
+
{"version":3,"file":"design-system113.js","names":["$slots"],"sources":["../src/components/BImage/BImage.vue"],"sourcesContent":["<script setup lang=\"ts\">\nimport { computed, nextTick, onBeforeUnmount, ref, watch } from 'vue';\n\n// ─────────────────────────────────────────────\n// Types\n// ─────────────────────────────────────────────\nexport type BImageTransformAction =\n | 'flipX'\n | 'flipY'\n | 'rotateLeft'\n | 'rotateRight'\n | 'zoomIn'\n | 'zoomOut'\n | 'reset'\n | 'wheel'\n | 'dragStart'\n | 'dragEnd';\n\nexport interface BImageTransform {\n scale: number;\n rotate: number;\n flipX: boolean;\n flipY: boolean;\n x: number;\n y: number;\n}\n\n// ─────────────────────────────────────────────\n// Props\n// ─────────────────────────────────────────────\nconst props = withDefaults(\n defineProps<{\n /** Image source URL. */\n src?: string;\n /** Alt text for the image. */\n alt?: string;\n /** Image width (px or CSS value). */\n width?: string | number;\n /** Image height (px or CSS value). */\n height?: string | number;\n /** Fallback source when loading fails. */\n fallback?: string;\n /**\n * Show loading placeholder. Set to `true` for built-in shimmer,\n * or use the `placeholder` slot for custom content.\n */\n placeholder?: boolean;\n /**\n * Low-resolution source for progressive loading.\n * Shown blurred while the full image loads.\n */\n placeholderSrc?: string;\n /** Enable image preview on click. */\n preview?: boolean;\n /** Show the hover mask overlay over the image. Set `false` to hide the mask entirely while keeping preview on click. */\n mask?: boolean;\n /** Custom source for preview (defaults to `src`). */\n previewSrc?: string;\n /** Controlled preview visibility (v-model:previewVisible). */\n previewVisible?: boolean;\n /** Zoom scale step for preview controls. */\n scaleStep?: number;\n /** Min zoom scale. */\n minScale?: number;\n /** Max zoom scale. */\n maxScale?: number;\n /** Allow dragging/panning the image inside the preview. */\n movable?: boolean;\n /** Native `loading` attribute - `'lazy'` for below-the-fold images. */\n loading?: 'lazy' | 'eager';\n /** CORS setting for the image. */\n crossOrigin?: '' | 'anonymous' | 'use-credentials';\n /** Decoding hint for the browser. */\n decoding?: 'async' | 'auto' | 'sync';\n /** Referrer policy for the image request. */\n referrerPolicy?:\n | ''\n | 'no-referrer'\n | 'no-referrer-when-downgrade'\n | 'origin'\n | 'origin-when-cross-origin'\n | 'same-origin'\n | 'strict-origin'\n | 'strict-origin-when-cross-origin'\n | 'unsafe-url';\n }>(),\n {\n src: undefined,\n alt: '',\n width: undefined,\n height: undefined,\n fallback: undefined,\n placeholder: false,\n placeholderSrc: undefined,\n preview: true,\n mask: true,\n previewSrc: undefined,\n previewVisible: undefined,\n scaleStep: 0.5,\n minScale: 1,\n maxScale: 50,\n movable: true,\n loading: undefined,\n crossOrigin: undefined,\n decoding: undefined,\n referrerPolicy: undefined,\n },\n);\n\n// ─────────────────────────────────────────────\n// Emits\n// ─────────────────────────────────────────────\nconst emit = defineEmits<{\n /** Fires when the <img> fails to load. */\n (e: 'error', event: Event): void;\n /** Fires when controlled preview visibility changes. */\n (e: 'update:previewVisible', visible: boolean): void;\n /** Fires on every preview transform change (zoom, rotate, flip, drag). */\n (e: 'transform', payload: { transform: BImageTransform; action: BImageTransformAction }): void;\n}>();\n\n// ─────────────────────────────────────────────\n// Slots\n// ─────────────────────────────────────────────\ndefineSlots<{\n /** Custom loading placeholder content. */\n placeholder?(): unknown;\n /** Custom preview mask overlay. */\n 'preview-mask'?(): unknown;\n}>();\n\n// ─────────────────────────────────────────────\n// Image loading state\n// ─────────────────────────────────────────────\nconst loadStatus = ref<'loading' | 'loaded' | 'error'>('loading');\nconst useFallback = ref(false);\n\nfunction handleLoad() {\n loadStatus.value = 'loaded';\n}\n\nfunction handleError(event: Event) {\n if (props.fallback && !useFallback.value) {\n useFallback.value = true;\n loadStatus.value = 'loading';\n } else {\n loadStatus.value = 'error';\n }\n emit('error', event);\n}\n\nconst displaySrc = computed(() => {\n if (useFallback.value && props.fallback) return props.fallback;\n return props.src;\n});\n\n// Reset state when src changes\nwatch(\n () => props.src,\n () => {\n loadStatus.value = 'loading';\n useFallback.value = false;\n },\n);\n\n// ─────────────────────────────────────────────\n// Progressive loading (low-res blurry placeholder)\n// ─────────────────────────────────────────────\nconst showProgressivePlaceholder = computed(\n () => props.placeholderSrc && loadStatus.value === 'loading',\n);\n\n// ─────────────────────────────────────────────\n// Dimension helpers\n// ─────────────────────────────────────────────\nconst dimensionStyle = computed(() => {\n const s: Record<string, string> = {};\n if (props.width != null) {\n s.width = typeof props.width === 'number' ? `${props.width}px` : props.width;\n }\n if (props.height != null) {\n s.height = typeof props.height === 'number' ? `${props.height}px` : props.height;\n }\n return s;\n});\n\n// ─────────────────────────────────────────────\n// Show mask logic\n// ─────────────────────────────────────────────\nconst showMask = computed(() => props.preview && props.mask && loadStatus.value === 'loaded');\n\n// ─────────────────────────────────────────────\n// Preview overlay\n// ─────────────────────────────────────────────\nconst internalPreviewOpen = ref(false);\nconst isControlled = computed(() => props.previewVisible !== undefined);\n\nconst previewOpen = computed(() =>\n isControlled.value ? props.previewVisible : internalPreviewOpen.value,\n);\n\nfunction openPreview() {\n if (!props.preview) return;\n if (isControlled.value) {\n emit('update:previewVisible', true);\n } else {\n internalPreviewOpen.value = true;\n }\n nextTick(() => {\n trapFocusInPreview();\n });\n}\n\nfunction closePreview() {\n if (isControlled.value) {\n emit('update:previewVisible', false);\n } else {\n internalPreviewOpen.value = false;\n }\n // Return focus to trigger\n nextTick(() => {\n triggerRef.value?.focus();\n });\n}\n\n// ─────────────────────────────────────────────\n// Preview transform state\n// ─────────────────────────────────────────────\nconst scale = ref(1);\nconst rotate = ref(0);\nconst flipX = ref(false);\nconst flipY = ref(false);\nconst dragX = ref(0);\nconst dragY = ref(0);\n\nfunction currentTransform(): BImageTransform {\n return {\n scale: scale.value,\n rotate: rotate.value,\n flipX: flipX.value,\n flipY: flipY.value,\n x: dragX.value,\n y: dragY.value,\n };\n}\n\nfunction emitTransform(action: BImageTransformAction) {\n emit('transform', { transform: currentTransform(), action });\n}\n\nfunction resetTransform() {\n scale.value = 1;\n rotate.value = 0;\n flipX.value = false;\n flipY.value = false;\n dragX.value = 0;\n dragY.value = 0;\n}\n\nfunction doResetTransform() {\n resetTransform();\n emitTransform('reset');\n}\n\nfunction zoomIn() {\n const next = scale.value + props.scaleStep;\n scale.value = Math.min(next, props.maxScale);\n emitTransform('zoomIn');\n}\n\nfunction zoomOut() {\n const next = scale.value - props.scaleStep;\n scale.value = Math.max(next, props.minScale);\n emitTransform('zoomOut');\n}\n\nfunction rotateLeft() {\n rotate.value -= 90;\n emitTransform('rotateLeft');\n}\n\nfunction rotateRight() {\n rotate.value += 90;\n emitTransform('rotateRight');\n}\n\nfunction toggleFlipX() {\n flipX.value = !flipX.value;\n emitTransform('flipX');\n}\n\nfunction toggleFlipY() {\n flipY.value = !flipY.value;\n emitTransform('flipY');\n}\n\nconst previewTransform = computed(() => {\n const parts: string[] = [];\n parts.push(`translate(${dragX.value}px, ${dragY.value}px)`);\n parts.push(`scale(${flipX.value ? -1 : 1}, ${flipY.value ? -1 : 1})`);\n parts.push(`scale(${scale.value})`);\n parts.push(`rotate(${rotate.value}deg)`);\n return parts.join(' ');\n});\n\n// Reset transform when preview is opened\nwatch(previewOpen, (open) => {\n if (open) {\n resetTransform();\n }\n});\n\nconst previewImageSrc = computed(() => props.previewSrc || props.src);\n\n// ─────────────────────────────────────────────\n// Drag-to-pan (movable)\n// ─────────────────────────────────────────────\nconst isDragging = ref(false);\nconst dragStartX = ref(0);\nconst dragStartY = ref(0);\nconst dragStartTranslateX = ref(0);\nconst dragStartTranslateY = ref(0);\n\nfunction handlePreviewPointerDown(event: PointerEvent) {\n if (!props.movable) return;\n // Only initiate drag on the image body (not toolbar/close)\n const target = event.target as HTMLElement;\n if (target.closest('.b-image-preview__toolbar') || target.closest('.b-image-preview__close')) {\n return;\n }\n\n isDragging.value = true;\n dragStartX.value = event.clientX;\n dragStartY.value = event.clientY;\n dragStartTranslateX.value = dragX.value;\n dragStartTranslateY.value = dragY.value;\n\n (event.currentTarget as HTMLElement)?.setPointerCapture(event.pointerId);\n emitTransform('dragStart');\n}\n\nfunction handlePreviewPointerMove(event: PointerEvent) {\n if (!isDragging.value) return;\n const dx = event.clientX - dragStartX.value;\n const dy = event.clientY - dragStartY.value;\n dragX.value = dragStartTranslateX.value + dx;\n dragY.value = dragStartTranslateY.value + dy;\n}\n\nfunction handlePreviewPointerUp() {\n if (!isDragging.value) return;\n isDragging.value = false;\n emitTransform('dragEnd');\n}\n\n// ─────────────────────────────────────────────\n// Focus management\n// ─────────────────────────────────────────────\nconst triggerRef = ref<HTMLElement | null>(null);\nconst overlayRef = ref<HTMLElement | null>(null);\n\nfunction trapFocusInPreview() {\n nextTick(() => {\n if (!overlayRef.value) return;\n const focusable = overlayRef.value.querySelectorAll<HTMLElement>(\n 'button, [tabindex]:not([tabindex=\"-1\"])',\n );\n if (focusable.length > 0) {\n focusable[0].focus();\n }\n });\n}\n\nfunction handleOverlayKeydown(event: KeyboardEvent) {\n if (event.key === 'Escape') {\n event.stopPropagation();\n closePreview();\n return;\n }\n\n if (event.key === 'Tab' && overlayRef.value) {\n const focusable = Array.from(\n overlayRef.value.querySelectorAll<HTMLElement>('button, [tabindex]:not([tabindex=\"-1\"])'),\n );\n if (focusable.length === 0) return;\n\n const first = focusable[0];\n const last = focusable[focusable.length - 1];\n\n if (event.shiftKey && document.activeElement === first) {\n event.preventDefault();\n last.focus();\n } else if (!event.shiftKey && document.activeElement === last) {\n event.preventDefault();\n first.focus();\n }\n }\n}\n\nfunction handleTriggerKeydown(event: KeyboardEvent) {\n if (event.key === 'Enter' || event.key === ' ') {\n event.preventDefault();\n openPreview();\n }\n}\n\n// ─────────────────────────────────────────────\n// Body scroll lock\n// ─────────────────────────────────────────────\nwatch(previewOpen, (open) => {\n if (typeof document === 'undefined') return;\n if (open) {\n document.body.style.overflow = 'hidden';\n } else {\n document.body.style.overflow = '';\n }\n});\n\nonBeforeUnmount(() => {\n if (typeof document !== 'undefined') {\n document.body.style.overflow = '';\n }\n});\n\n// ─────────────────────────────────────────────\n// Zoom with mouse wheel in preview\n// ─────────────────────────────────────────────\nfunction handlePreviewWheel(event: WheelEvent) {\n event.preventDefault();\n if (event.deltaY < 0) {\n const next = scale.value + props.scaleStep;\n scale.value = Math.min(next, props.maxScale);\n } else {\n const next = scale.value - props.scaleStep;\n scale.value = Math.max(next, props.minScale);\n }\n emitTransform('wheel');\n}\n\n// ─────────────────────────────────────────────\n// Toolbar keyboard support\n// ─────────────────────────────────────────────\nfunction handleToolbarKeydown(event: KeyboardEvent) {\n const target = event.target as HTMLElement;\n if (target.tagName !== 'BUTTON') return;\n\n const toolbar = target.closest('.b-image-preview__toolbar');\n if (!toolbar) return;\n const buttons = Array.from(toolbar.querySelectorAll<HTMLElement>('button:not(:disabled)'));\n const index = buttons.indexOf(target);\n\n let nextIndex = -1;\n if (event.key === 'ArrowRight' || event.key === 'ArrowDown') {\n event.preventDefault();\n nextIndex = (index + 1) % buttons.length;\n } else if (event.key === 'ArrowLeft' || event.key === 'ArrowUp') {\n event.preventDefault();\n nextIndex = (index - 1 + buttons.length) % buttons.length;\n } else if (event.key === 'Home') {\n event.preventDefault();\n nextIndex = 0;\n } else if (event.key === 'End') {\n event.preventDefault();\n nextIndex = buttons.length - 1;\n }\n\n if (nextIndex >= 0) {\n buttons[nextIndex].focus();\n }\n}\n</script>\n\n<template>\n <div\n class=\"b-image\"\n :class=\"{\n 'b-image--error': loadStatus === 'error' && !fallback,\n 'b-image--preview': preview,\n }\"\n :style=\"dimensionStyle\"\n >\n <!-- Progressive placeholder (blurred low-res image) -->\n <img\n v-if=\"showProgressivePlaceholder\"\n class=\"b-image__progressive-placeholder\"\n :src=\"placeholderSrc\"\n :alt=\"alt\"\n aria-hidden=\"true\"\n />\n\n <!-- Placeholder (shimmer or slot) -->\n <div\n v-if=\"(placeholder || $slots.placeholder) && loadStatus === 'loading' && !placeholderSrc\"\n class=\"b-image__placeholder\"\n aria-hidden=\"true\"\n >\n <slot name=\"placeholder\">\n <div class=\"b-image__placeholder-shimmer\" />\n </slot>\n </div>\n\n <!-- Image -->\n <img\n v-show=\"loadStatus !== 'loading' || (!placeholder && !$slots.placeholder && !placeholderSrc)\"\n class=\"b-image__img\"\n :src=\"displaySrc\"\n :alt=\"alt\"\n :width=\"typeof width === 'number' ? width : undefined\"\n :height=\"typeof height === 'number' ? height : undefined\"\n :loading=\"loading\"\n :crossorigin=\"crossOrigin\"\n :decoding=\"decoding\"\n :referrerpolicy=\"referrerPolicy\"\n @load=\"handleLoad\"\n @error=\"handleError\"\n />\n\n <!-- Preview mask overlay (clickable) -->\n <div\n v-if=\"showMask\"\n ref=\"triggerRef\"\n class=\"b-image__mask\"\n role=\"button\"\n tabindex=\"0\"\n :aria-label=\"`Preview image${alt ? ': ' + alt : ''}`\"\n @click=\"openPreview\"\n @keydown=\"handleTriggerKeydown\"\n >\n <slot name=\"preview-mask\">\n <span class=\"b-image__mask-text\" aria-hidden=\"true\">\n <!-- Eye icon -->\n <svg\n class=\"b-image__mask-icon\"\n viewBox=\"0 0 24 24\"\n fill=\"none\"\n stroke=\"currentColor\"\n stroke-width=\"2\"\n stroke-linecap=\"round\"\n stroke-linejoin=\"round\"\n aria-hidden=\"true\"\n focusable=\"false\"\n >\n <path d=\"M1 12s4-8 11-8 11 8 11 8-4 8-11 8-11-8-11-8z\" />\n <circle cx=\"12\" cy=\"12\" r=\"3\" />\n </svg>\n Preview\n </span>\n </slot>\n </div>\n\n <!-- Invisible click target when mask is hidden but preview is enabled -->\n <div\n v-else-if=\"preview && !mask && loadStatus === 'loaded'\"\n ref=\"triggerRef\"\n class=\"b-image__click-target\"\n role=\"button\"\n tabindex=\"0\"\n :aria-label=\"`Preview image${alt ? ': ' + alt : ''}`\"\n @click=\"openPreview\"\n @keydown=\"handleTriggerKeydown\"\n />\n\n <!-- Preview overlay (teleported to body) -->\n <Teleport to=\"body\">\n <Transition name=\"b-image-preview\">\n <div\n v-if=\"previewOpen\"\n ref=\"overlayRef\"\n class=\"b-image-preview\"\n :class=\"{ 'b-image-preview--dragging': isDragging }\"\n role=\"dialog\"\n aria-modal=\"true\"\n :aria-label=\"`Image preview${alt ? ': ' + alt : ''}`\"\n @keydown=\"handleOverlayKeydown\"\n @wheel.prevent=\"handlePreviewWheel\"\n @pointerdown=\"handlePreviewPointerDown\"\n @pointermove=\"handlePreviewPointerMove\"\n @pointerup=\"handlePreviewPointerUp\"\n @pointercancel=\"handlePreviewPointerUp\"\n >\n <!-- Backdrop -->\n <div class=\"b-image-preview__backdrop\" @click=\"closePreview\" />\n\n <!-- Close button -->\n <button\n class=\"b-image-preview__close\"\n type=\"button\"\n aria-label=\"Close preview\"\n @click=\"closePreview\"\n >\n <svg\n viewBox=\"0 0 24 24\"\n fill=\"none\"\n stroke=\"currentColor\"\n stroke-width=\"2\"\n stroke-linecap=\"round\"\n stroke-linejoin=\"round\"\n aria-hidden=\"true\"\n focusable=\"false\"\n >\n <line x1=\"18\" y1=\"6\" x2=\"6\" y2=\"18\" />\n <line x1=\"6\" y1=\"6\" x2=\"18\" y2=\"18\" />\n </svg>\n </button>\n\n <!-- Preview image -->\n <div class=\"b-image-preview__body\">\n <img\n class=\"b-image-preview__img\"\n :src=\"previewImageSrc\"\n :alt=\"alt\"\n :style=\"{ transform: previewTransform }\"\n draggable=\"false\"\n />\n </div>\n\n <!-- Toolbar -->\n <div\n class=\"b-image-preview__toolbar\"\n role=\"toolbar\"\n aria-label=\"Image preview controls\"\n @keydown=\"handleToolbarKeydown\"\n >\n <!-- Flip Horizontal -->\n <button\n type=\"button\"\n aria-label=\"Flip horizontal\"\n :aria-pressed=\"flipX\"\n @click=\"toggleFlipX\"\n >\n <svg\n viewBox=\"0 0 24 24\"\n fill=\"none\"\n stroke=\"currentColor\"\n stroke-width=\"2\"\n aria-hidden=\"true\"\n focusable=\"false\"\n >\n <path d=\"M8 3H5a2 2 0 0 0-2 2v14c0 1.1.9 2 2 2h3\" />\n <path d=\"M16 3h3a2 2 0 0 1 2 2v14a2 2 0 0 1-2 2h-3\" />\n <line x1=\"12\" y1=\"1\" x2=\"12\" y2=\"23\" stroke-dasharray=\"2 2\" />\n </svg>\n </button>\n\n <!-- Flip Vertical -->\n <button\n type=\"button\"\n aria-label=\"Flip vertical\"\n :aria-pressed=\"flipY\"\n @click=\"toggleFlipY\"\n >\n <svg\n viewBox=\"0 0 24 24\"\n fill=\"none\"\n stroke=\"currentColor\"\n stroke-width=\"2\"\n aria-hidden=\"true\"\n focusable=\"false\"\n >\n <path d=\"M3 8V5a2 2 0 0 1 2-2h14c1.1 0 2 .9 2 2v3\" />\n <path d=\"M3 16v3a2 2 0 0 0 2 2h14a2 2 0 0 0 2-2v-3\" />\n <line x1=\"1\" y1=\"12\" x2=\"23\" y2=\"12\" stroke-dasharray=\"2 2\" />\n </svg>\n </button>\n\n <!-- Rotate Left -->\n <button type=\"button\" aria-label=\"Rotate left\" @click=\"rotateLeft\">\n <svg\n viewBox=\"0 0 24 24\"\n fill=\"none\"\n stroke=\"currentColor\"\n stroke-width=\"2\"\n stroke-linecap=\"round\"\n stroke-linejoin=\"round\"\n aria-hidden=\"true\"\n focusable=\"false\"\n >\n <polyline points=\"1 4 1 10 7 10\" />\n <path d=\"M3.51 15a9 9 0 1 0 2.13-9.36L1 10\" />\n </svg>\n </button>\n\n <!-- Rotate Right -->\n <button type=\"button\" aria-label=\"Rotate right\" @click=\"rotateRight\">\n <svg\n viewBox=\"0 0 24 24\"\n fill=\"none\"\n stroke=\"currentColor\"\n stroke-width=\"2\"\n stroke-linecap=\"round\"\n stroke-linejoin=\"round\"\n aria-hidden=\"true\"\n focusable=\"false\"\n >\n <polyline points=\"23 4 23 10 17 10\" />\n <path d=\"M20.49 15a9 9 0 1 1-2.13-9.36L23 10\" />\n </svg>\n </button>\n\n <!-- Zoom Out -->\n <button\n type=\"button\"\n aria-label=\"Zoom out\"\n :disabled=\"scale <= minScale\"\n @click=\"zoomOut\"\n >\n <svg\n viewBox=\"0 0 24 24\"\n fill=\"none\"\n stroke=\"currentColor\"\n stroke-width=\"2\"\n stroke-linecap=\"round\"\n stroke-linejoin=\"round\"\n aria-hidden=\"true\"\n focusable=\"false\"\n >\n <circle cx=\"11\" cy=\"11\" r=\"8\" />\n <line x1=\"21\" y1=\"21\" x2=\"16.65\" y2=\"16.65\" />\n <line x1=\"8\" y1=\"11\" x2=\"14\" y2=\"11\" />\n </svg>\n </button>\n\n <!-- Scale indicator -->\n <span class=\"b-image-preview__scale\" aria-live=\"polite\" aria-atomic=\"true\">\n {{ Math.round(scale * 100) }}%\n </span>\n\n <!-- Zoom In -->\n <button\n type=\"button\"\n aria-label=\"Zoom in\"\n :disabled=\"scale >= maxScale\"\n @click=\"zoomIn\"\n >\n <svg\n viewBox=\"0 0 24 24\"\n fill=\"none\"\n stroke=\"currentColor\"\n stroke-width=\"2\"\n stroke-linecap=\"round\"\n stroke-linejoin=\"round\"\n aria-hidden=\"true\"\n focusable=\"false\"\n >\n <circle cx=\"11\" cy=\"11\" r=\"8\" />\n <line x1=\"21\" y1=\"21\" x2=\"16.65\" y2=\"16.65\" />\n <line x1=\"11\" y1=\"8\" x2=\"11\" y2=\"14\" />\n <line x1=\"8\" y1=\"11\" x2=\"14\" y2=\"11\" />\n </svg>\n </button>\n\n <!-- Reset (1:1) -->\n <button type=\"button\" aria-label=\"Reset to original size\" @click=\"doResetTransform\">\n <svg\n viewBox=\"0 0 24 24\"\n fill=\"none\"\n stroke=\"currentColor\"\n stroke-width=\"2\"\n stroke-linecap=\"round\"\n stroke-linejoin=\"round\"\n aria-hidden=\"true\"\n focusable=\"false\"\n >\n <rect x=\"3\" y=\"3\" width=\"18\" height=\"18\" rx=\"2\" ry=\"2\" />\n <text\n x=\"12\"\n y=\"16\"\n text-anchor=\"middle\"\n fill=\"currentColor\"\n stroke=\"none\"\n font-size=\"10\"\n font-weight=\"600\"\n font-family=\"system-ui\"\n >\n 1:1\n </text>\n </svg>\n </button>\n </div>\n </div>\n </Transition>\n </Teleport>\n </div>\n</template>\n\n<style>\n/* ────────────────────────────────────────────\n CSS Custom Properties (tokens)\n ──────────────────────────────────────────── */\n.b-image {\n /* Layout */\n --b-image-border-radius: 8px;\n --b-image-bg: oklch(95% 0.003 260);\n --b-image-object-fit: cover;\n\n /* Placeholder */\n --b-image-placeholder-bg: oklch(93% 0.005 260);\n --b-image-placeholder-shimmer: linear-gradient(\n 90deg,\n oklch(93% 0.005 260) 25%,\n oklch(96% 0.003 260) 50%,\n oklch(93% 0.005 260) 75%\n );\n --b-image-progressive-blur: 20px;\n\n /* Mask */\n --b-image-mask-bg: oklch(0% 0 0 / 50%);\n --b-image-mask-color: oklch(100% 0 0);\n --b-image-mask-font-size: 14px;\n --b-image-mask-icon-size: 20px;\n\n /* Error */\n --b-image-error-bg: oklch(95% 0.003 260);\n --b-image-error-color: oklch(55% 0.01 260);\n --b-image-error-icon-size: 32px;\n\n /* Animation */\n --b-image-transition-duration: 200ms;\n\n /* Focus */\n --b-image-focus-ring: 2px solid oklch(54.6% 0.245 262.881);\n --b-image-focus-ring-offset: 2px;\n}\n\n/* Preview overlay tokens */\n.b-image-preview {\n --b-image-preview-backdrop-bg: oklch(0% 0 0 / 65%);\n --b-image-preview-toolbar-bg: oklch(15% 0.005 260 / 85%);\n --b-image-preview-toolbar-color: oklch(95% 0.005 260);\n --b-image-preview-toolbar-btn-size: 40px;\n --b-image-preview-toolbar-icon-size: 20px;\n --b-image-preview-toolbar-gap: 8px;\n --b-image-preview-toolbar-radius: 24px;\n --b-image-preview-toolbar-padding: 4px 16px;\n --b-image-preview-close-size: 40px;\n --b-image-preview-close-color: oklch(90% 0.005 260);\n --b-image-preview-close-hover-bg: oklch(100% 0 0 / 12%);\n --b-image-preview-transition-duration: 250ms;\n --b-image-preview-scale-font-size: 13px;\n --b-image-preview-scale-min-width: 52px;\n}\n\n/* ── Dark mode ─────────────────────────────── */\n[data-prefers-color='dark'] .b-image {\n --b-image-bg: oklch(22% 0.005 260);\n --b-image-placeholder-bg: oklch(25% 0.005 260);\n --b-image-placeholder-shimmer: linear-gradient(\n 90deg,\n oklch(25% 0.005 260) 25%,\n oklch(30% 0.003 260) 50%,\n oklch(25% 0.005 260) 75%\n );\n --b-image-error-bg: oklch(22% 0.005 260);\n --b-image-error-color: oklch(70% 0.01 260);\n}\n\n[data-prefers-color='dark'] .b-image-preview {\n --b-image-preview-backdrop-bg: oklch(0% 0 0 / 80%);\n --b-image-preview-toolbar-bg: oklch(10% 0.005 260 / 90%);\n}\n\n@media (prefers-color-scheme: dark) {\n [data-prefers-color='system'] .b-image {\n --b-image-bg: oklch(22% 0.005 260);\n --b-image-placeholder-bg: oklch(25% 0.005 260);\n --b-image-placeholder-shimmer: linear-gradient(\n 90deg,\n oklch(25% 0.005 260) 25%,\n oklch(30% 0.003 260) 50%,\n oklch(25% 0.005 260) 75%\n );\n --b-image-error-bg: oklch(22% 0.005 260);\n --b-image-error-color: oklch(70% 0.01 260);\n }\n [data-prefers-color='system'] .b-image-preview {\n --b-image-preview-backdrop-bg: oklch(0% 0 0 / 80%);\n --b-image-preview-toolbar-bg: oklch(10% 0.005 260 / 90%);\n }\n}\n\n/* ─────────────────────────────────────────────\n Base layout\n ───────────────────────────────────────────── */\n.b-image {\n position: relative;\n display: inline-block;\n overflow: hidden;\n border-radius: var(--b-image-border-radius);\n background-color: var(--b-image-bg);\n line-height: 0;\n box-sizing: border-box;\n}\n\n.b-image__img {\n display: block;\n width: 100%;\n height: 100%;\n object-fit: var(--b-image-object-fit);\n border-radius: var(--b-image-border-radius);\n}\n\n/* ─────────────────────────────────────────────\n Progressive placeholder (blurred low-res)\n ───────────────────────────────────────────── */\n.b-image__progressive-placeholder {\n position: absolute;\n inset: 0;\n width: 100%;\n height: 100%;\n object-fit: var(--b-image-object-fit);\n border-radius: var(--b-image-border-radius);\n filter: blur(var(--b-image-progressive-blur));\n transform: scale(1.1);\n z-index: 1;\n}\n\n/* ─────────────────────────────────────────────\n Placeholder\n ───────────────────────────────────────────── */\n.b-image__placeholder {\n position: absolute;\n inset: 0;\n display: flex;\n align-items: center;\n justify-content: center;\n background-color: var(--b-image-placeholder-bg);\n border-radius: var(--b-image-border-radius);\n z-index: 1;\n}\n\n.b-image__placeholder-shimmer {\n width: 100%;\n height: 100%;\n background: var(--b-image-placeholder-shimmer);\n background-size: 200% 100%;\n animation: b-image-shimmer 1.5s infinite;\n border-radius: var(--b-image-border-radius);\n}\n\n@keyframes b-image-shimmer {\n 0% {\n background-position: 200% 0;\n }\n 100% {\n background-position: -200% 0;\n }\n}\n\n/* ─────────────────────────────────────────────\n Preview mask\n ───────────────────────────────────────────── */\n.b-image__mask {\n position: absolute;\n inset: 0;\n display: flex;\n align-items: center;\n justify-content: center;\n background-color: var(--b-image-mask-bg);\n color: var(--b-image-mask-color);\n font-size: var(--b-image-mask-font-size);\n border-radius: var(--b-image-border-radius);\n opacity: 0;\n cursor: pointer;\n transition: opacity var(--b-image-transition-duration) ease;\n z-index: 2;\n outline: none;\n}\n\n.b-image--preview:hover .b-image__mask,\n.b-image__mask:focus-visible {\n opacity: 1;\n}\n\n.b-image__mask:focus-visible {\n outline: var(--b-image-focus-ring);\n outline-offset: var(--b-image-focus-ring-offset);\n}\n\n.b-image__mask-text {\n display: inline-flex;\n align-items: center;\n gap: 6px;\n font-weight: 500;\n user-select: none;\n}\n\n.b-image__mask-icon {\n width: var(--b-image-mask-icon-size);\n height: var(--b-image-mask-icon-size);\n}\n\n/* Invisible click target (mask=false, preview=true) */\n.b-image__click-target {\n position: absolute;\n inset: 0;\n z-index: 2;\n cursor: pointer;\n outline: none;\n}\n\n.b-image__click-target:focus-visible {\n outline: var(--b-image-focus-ring);\n outline-offset: var(--b-image-focus-ring-offset);\n}\n\n/* ─────────────────────────────────────────────\n Error state\n ───────────────────────────────────────────── */\n.b-image--error {\n background-color: var(--b-image-error-bg);\n}\n\n/* ─────────────────────────────────────────────\n Preview overlay\n ───────────────────────────────────────────── */\n.b-image-preview {\n position: fixed;\n inset: 0;\n z-index: 1080;\n display: flex;\n align-items: center;\n justify-content: center;\n touch-action: none;\n}\n\n.b-image-preview--dragging {\n cursor: grabbing;\n}\n\n.b-image-preview__backdrop {\n position: absolute;\n inset: 0;\n background-color: var(--b-image-preview-backdrop-bg);\n}\n\n.b-image-preview__close {\n position: absolute;\n top: 16px;\n right: 16px;\n z-index: 1;\n display: flex;\n align-items: center;\n justify-content: center;\n width: var(--b-image-preview-close-size);\n height: var(--b-image-preview-close-size);\n border: none;\n border-radius: 50%;\n background: transparent;\n color: var(--b-image-preview-close-color);\n cursor: pointer;\n padding: 0;\n transition: background-color var(--b-image-preview-transition-duration) ease;\n}\n\n.b-image-preview__close:hover,\n.b-image-preview__close:focus-visible {\n background-color: var(--b-image-preview-close-hover-bg);\n}\n\n.b-image-preview__close:focus-visible {\n outline: var(--b-image-focus-ring);\n outline-offset: var(--b-image-focus-ring-offset);\n}\n\n.b-image-preview__close svg {\n width: 20px;\n height: 20px;\n}\n\n.b-image-preview__body {\n position: relative;\n z-index: 0;\n display: flex;\n align-items: center;\n justify-content: center;\n max-width: 100%;\n max-height: 100%;\n padding: 40px;\n box-sizing: border-box;\n cursor: grab;\n}\n\n.b-image-preview--dragging .b-image-preview__body {\n cursor: grabbing;\n}\n\n.b-image-preview__img {\n max-width: 100%;\n max-height: calc(100vh - 120px);\n object-fit: contain;\n transition: transform var(--b-image-preview-transition-duration) ease;\n user-select: none;\n -webkit-user-drag: none;\n pointer-events: none;\n}\n\n.b-image-preview--dragging .b-image-preview__img {\n transition: none;\n}\n\n/* ─────────────────────────────────────────────\n Toolbar\n ───────────────────────────────────────────── */\n.b-image-preview__toolbar {\n position: absolute;\n bottom: 24px;\n left: 50%;\n transform: translateX(-50%);\n z-index: 1;\n display: flex;\n align-items: center;\n gap: var(--b-image-preview-toolbar-gap);\n padding: var(--b-image-preview-toolbar-padding);\n background-color: var(--b-image-preview-toolbar-bg);\n color: var(--b-image-preview-toolbar-color);\n border-radius: var(--b-image-preview-toolbar-radius);\n backdrop-filter: blur(8px);\n}\n\n.b-image-preview__toolbar button {\n display: flex;\n align-items: center;\n justify-content: center;\n width: var(--b-image-preview-toolbar-btn-size);\n height: var(--b-image-preview-toolbar-btn-size);\n border: none;\n border-radius: 50%;\n background: transparent;\n color: inherit;\n cursor: pointer;\n padding: 0;\n transition: background-color var(--b-image-preview-transition-duration) ease;\n}\n\n.b-image-preview__toolbar button:hover:not(:disabled),\n.b-image-preview__toolbar button:focus-visible {\n background-color: var(--b-image-preview-close-hover-bg);\n}\n\n.b-image-preview__toolbar button:focus-visible {\n outline: var(--b-image-focus-ring);\n outline-offset: var(--b-image-focus-ring-offset);\n}\n\n.b-image-preview__toolbar button:disabled {\n opacity: 0.35;\n cursor: not-allowed;\n}\n\n.b-image-preview__toolbar button svg {\n width: var(--b-image-preview-toolbar-icon-size);\n height: var(--b-image-preview-toolbar-icon-size);\n}\n\n.b-image-preview__scale {\n font-size: var(--b-image-preview-scale-font-size);\n min-width: var(--b-image-preview-scale-min-width);\n text-align: center;\n font-variant-numeric: tabular-nums;\n user-select: none;\n}\n\n/* ─────────────────────────────────────────────\n Preview transitions\n ───────────────────────────────────────────── */\n.b-image-preview-enter-active,\n.b-image-preview-leave-active {\n transition: opacity var(--b-image-preview-transition-duration) ease;\n}\n\n.b-image-preview-enter-from,\n.b-image-preview-leave-to {\n opacity: 0;\n}\n\n/* ─────────────────────────────────────────────\n Reduced motion\n ───────────────────────────────────────────── */\n@media (prefers-reduced-motion: reduce) {\n .b-image {\n --b-image-transition-duration: 0ms;\n }\n\n .b-image-preview {\n --b-image-preview-transition-duration: 0ms;\n }\n\n .b-image__placeholder-shimmer {\n animation: none;\n }\n\n .b-image-preview-enter-active,\n .b-image-preview-leave-active {\n transition-duration: 0ms;\n }\n}\n</style>\n"],"mappings":"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"}
|