@7pmlabs/design-system 2.0.8 → 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-system120.js
CHANGED
|
@@ -1,166 +1,227 @@
|
|
|
1
|
-
import {
|
|
2
|
-
|
|
3
|
-
|
|
4
|
-
|
|
5
|
-
|
|
6
|
-
|
|
7
|
-
|
|
8
|
-
|
|
9
|
-
|
|
1
|
+
import { BCommonSize as e } from "./design-system3.js";
|
|
2
|
+
import { useComponentId as t } from "./design-system10.js";
|
|
3
|
+
import { BInputStatus as n, BInputVariant as r } from "./design-system116.js";
|
|
4
|
+
import { computed as i, createCommentVNode as a, createElementBlock as o, createElementVNode as s, defineComponent as c, mergeModels as l, normalizeClass as u, openBlock as d, ref as f, renderSlot as p, unref as m, useModel as h, useSlots as g, watch as _, withModifiers as v } from "vue";
|
|
5
|
+
//#region src/components/BInputNumber/BInputNumber.vue?vue&type=script&setup=true&lang.ts
|
|
6
|
+
var y = { class: "b-input-number__wrapper" }, b = {
|
|
7
|
+
key: 0,
|
|
8
|
+
class: "b-input-number__prefix",
|
|
9
|
+
"aria-hidden": "true"
|
|
10
|
+
}, x = [
|
|
11
|
+
"id",
|
|
12
|
+
"value",
|
|
13
|
+
"aria-valuenow",
|
|
14
|
+
"aria-valuemin",
|
|
15
|
+
"aria-valuemax",
|
|
16
|
+
"aria-invalid",
|
|
17
|
+
"placeholder",
|
|
18
|
+
"disabled",
|
|
19
|
+
"readonly"
|
|
20
|
+
], S = {
|
|
21
|
+
key: 1,
|
|
22
|
+
class: "b-input-number__suffix",
|
|
23
|
+
"aria-hidden": "true"
|
|
24
|
+
}, C = {
|
|
25
|
+
key: 2,
|
|
26
|
+
class: "b-input-number__handler-wrap",
|
|
27
|
+
"aria-hidden": "true"
|
|
28
|
+
}, w = ["aria-disabled"], T = ["aria-disabled"], E = /* @__PURE__ */ c({
|
|
29
|
+
inheritAttrs: !1,
|
|
30
|
+
__name: "BInputNumber",
|
|
31
|
+
props: /* @__PURE__ */ l({
|
|
32
|
+
size: { default: () => e.Medium },
|
|
33
|
+
variant: { default: () => r.Outlined },
|
|
34
|
+
status: {},
|
|
35
|
+
min: { default: () => -(2 ** 53 - 1) },
|
|
36
|
+
max: { default: () => 2 ** 53 - 1 },
|
|
37
|
+
step: { default: 1 },
|
|
38
|
+
disabled: {
|
|
10
39
|
type: Boolean,
|
|
11
40
|
default: !1
|
|
12
41
|
},
|
|
13
|
-
|
|
14
|
-
|
|
15
|
-
|
|
16
|
-
|
|
17
|
-
|
|
18
|
-
|
|
19
|
-
|
|
20
|
-
|
|
21
|
-
|
|
22
|
-
|
|
23
|
-
|
|
24
|
-
|
|
25
|
-
|
|
26
|
-
|
|
27
|
-
|
|
28
|
-
|
|
29
|
-
|
|
30
|
-
|
|
31
|
-
|
|
42
|
+
readOnly: {
|
|
43
|
+
type: Boolean,
|
|
44
|
+
default: !1
|
|
45
|
+
},
|
|
46
|
+
controls: {
|
|
47
|
+
type: Boolean,
|
|
48
|
+
default: !0
|
|
49
|
+
},
|
|
50
|
+
keyboard: {
|
|
51
|
+
type: Boolean,
|
|
52
|
+
default: !0
|
|
53
|
+
},
|
|
54
|
+
changeOnBlur: {
|
|
55
|
+
type: Boolean,
|
|
56
|
+
default: !0
|
|
57
|
+
},
|
|
58
|
+
changeOnWheel: {
|
|
59
|
+
type: Boolean,
|
|
60
|
+
default: !1
|
|
61
|
+
},
|
|
62
|
+
placeholder: {},
|
|
63
|
+
id: {},
|
|
64
|
+
precision: {},
|
|
65
|
+
formatter: { type: Function },
|
|
66
|
+
parser: { type: Function },
|
|
67
|
+
decimalSeparator: {},
|
|
68
|
+
stringMode: {
|
|
69
|
+
type: Boolean,
|
|
70
|
+
default: !1
|
|
32
71
|
}
|
|
33
|
-
|
|
34
|
-
|
|
35
|
-
|
|
72
|
+
}, {
|
|
73
|
+
modelValue: { default: null },
|
|
74
|
+
modelModifiers: {}
|
|
75
|
+
}),
|
|
76
|
+
emits: /* @__PURE__ */ l([
|
|
77
|
+
"change",
|
|
78
|
+
"pressEnter",
|
|
79
|
+
"step",
|
|
80
|
+
"focus",
|
|
81
|
+
"blur"
|
|
82
|
+
], ["update:modelValue"]),
|
|
83
|
+
setup(e, { expose: r, emit: c }) {
|
|
84
|
+
let l = g(), E = c, D = h(e, "modelValue"), { componentUID: O } = t(), k = i(() => e.id ?? `b-input-number-${O.value}`), A = f(null), j = f(!1), M = f(""), N = i(() => !!l.prefix), P = i(() => !!l.suffix), F = i(() => e.disabled || e.readOnly ? !0 : D.value === null ? !1 : D.value >= e.max), I = i(() => e.disabled || e.readOnly ? !0 : D.value === null ? !1 : D.value <= e.min);
|
|
85
|
+
function L(t) {
|
|
86
|
+
if (e.precision !== void 0) return parseFloat(t.toFixed(e.precision));
|
|
87
|
+
let n = String(e.step), r = n.includes(".") ? n.split(".")[1].length : 0;
|
|
88
|
+
return r > 0 ? parseFloat(t.toFixed(r)) : t;
|
|
36
89
|
}
|
|
37
|
-
|
|
38
|
-
|
|
39
|
-
if (t) w.value.set(e, t), r.fresh && C && C.observe(t);
|
|
40
|
-
else {
|
|
41
|
-
let t = w.value.get(e);
|
|
42
|
-
t && C && C.unobserve(t), w.value.delete(e);
|
|
43
|
-
let n = { ...S.value };
|
|
44
|
-
delete n[e], S.value = n;
|
|
45
|
-
}
|
|
90
|
+
function R(t) {
|
|
91
|
+
return Math.min(e.max, Math.max(e.min, t));
|
|
46
92
|
}
|
|
47
|
-
function
|
|
48
|
-
|
|
49
|
-
|
|
50
|
-
|
|
51
|
-
if (e !== void 0) {
|
|
52
|
-
let n = t.contentRect.height;
|
|
53
|
-
S.value[e] !== n && (S.value = {
|
|
54
|
-
...S.value,
|
|
55
|
-
[e]: n
|
|
56
|
-
});
|
|
57
|
-
}
|
|
58
|
-
}
|
|
59
|
-
}), w.value.forEach((e) => C.observe(e)));
|
|
93
|
+
function z(t) {
|
|
94
|
+
if (t === null) return "";
|
|
95
|
+
let n;
|
|
96
|
+
return n = e.precision === void 0 ? String(t) : t.toFixed(e.precision), e.decimalSeparator && (n = n.replace(".", e.decimalSeparator)), e.formatter ? e.formatter(e.stringMode ? n : t) : n;
|
|
60
97
|
}
|
|
61
|
-
|
|
62
|
-
|
|
63
|
-
|
|
64
|
-
|
|
65
|
-
|
|
66
|
-
|
|
67
|
-
|
|
68
|
-
|
|
69
|
-
|
|
70
|
-
s = o.column === void 0 ? n.indexOf(Math.min(...n)) : Math.max(0, Math.min(e - 1, o.column - 1)), t[s].push({
|
|
71
|
-
item: o,
|
|
72
|
-
originalIndex: a
|
|
73
|
-
});
|
|
74
|
-
let c = S.value[o.key] ?? o.height ?? 0;
|
|
75
|
-
n[s] += c + (t[s].length > 1 ? i : 0);
|
|
76
|
-
}
|
|
77
|
-
return t;
|
|
78
|
-
});
|
|
79
|
-
f(t(() => {
|
|
80
|
-
let e = D.value, t = {};
|
|
81
|
-
for (let e = 0; e < r.items.length; e++) {
|
|
82
|
-
let n = r.items[e], i = k.value.findIndex((e) => e.some((e) => e.item.key === n.key));
|
|
83
|
-
i >= 0 && (t[n.key] = i);
|
|
84
|
-
}
|
|
85
|
-
return {
|
|
86
|
-
columns: e,
|
|
87
|
-
columnMap: t
|
|
88
|
-
};
|
|
89
|
-
}), (e) => {
|
|
90
|
-
h("layoutChange", e);
|
|
91
|
-
}, { immediate: !0 });
|
|
92
|
-
function A(e, t) {
|
|
93
|
-
let n = ["b-masonry__item"];
|
|
94
|
-
if (!r.classNames) return n;
|
|
95
|
-
if (typeof r.classNames == "function") {
|
|
96
|
-
let i = r.classNames(e, t);
|
|
97
|
-
i && n.push(...Array.isArray(i) ? i : [i]);
|
|
98
|
-
} else if (typeof r.classNames.item == "function") {
|
|
99
|
-
let i = r.classNames.item(e, t);
|
|
100
|
-
i && n.push(...Array.isArray(i) ? i : [i]);
|
|
101
|
-
} else typeof r.classNames.item == "string" && n.push(r.classNames.item);
|
|
102
|
-
return n;
|
|
98
|
+
function B(t) {
|
|
99
|
+
if (!t.trim()) return null;
|
|
100
|
+
let n = t;
|
|
101
|
+
e.parser ? n = e.parser(t) : e.decimalSeparator && (n = n.replace(e.decimalSeparator, "."));
|
|
102
|
+
let r = Number(n);
|
|
103
|
+
return isNaN(r) ? D.value : r;
|
|
104
|
+
}
|
|
105
|
+
function V() {
|
|
106
|
+
M.value = z(D.value);
|
|
103
107
|
}
|
|
104
|
-
function
|
|
105
|
-
|
|
108
|
+
function H(e, t = !0) {
|
|
109
|
+
e !== null && (e = L(R(e)));
|
|
110
|
+
let n = e !== D.value;
|
|
111
|
+
D.value = e, V(), n && t && E("change", e);
|
|
106
112
|
}
|
|
107
|
-
function
|
|
108
|
-
|
|
109
|
-
|
|
113
|
+
function U(t) {
|
|
114
|
+
if (e.disabled || e.readOnly) return;
|
|
115
|
+
let n = R(L((D.value ?? 0) + (t === "up" ? e.step : -e.step)));
|
|
116
|
+
H(n), E("step", n, {
|
|
117
|
+
offset: e.step,
|
|
118
|
+
type: t
|
|
119
|
+
});
|
|
110
120
|
}
|
|
111
|
-
|
|
112
|
-
|
|
121
|
+
let W = (e) => {
|
|
122
|
+
M.value = e.target.value;
|
|
123
|
+
}, G = (t) => {
|
|
124
|
+
t.key === "Enter" && (Y(), E("pressEnter", t)), e.keyboard && (t.key === "ArrowUp" ? (t.preventDefault(), U("up")) : t.key === "ArrowDown" && (t.preventDefault(), U("down")));
|
|
125
|
+
}, K = (e) => {
|
|
126
|
+
j.value = !0, E("focus", e);
|
|
127
|
+
}, q = (t) => {
|
|
128
|
+
j.value = !1, e.changeOnBlur && Y(), E("blur", t);
|
|
129
|
+
}, J = (t) => {
|
|
130
|
+
!e.changeOnWheel || e.disabled || e.readOnly || !j.value || (t.preventDefault(), t.deltaY < 0 ? U("up") : t.deltaY > 0 && U("down"));
|
|
131
|
+
};
|
|
132
|
+
function Y() {
|
|
133
|
+
let e = B(M.value);
|
|
134
|
+
H(e === null ? null : e);
|
|
113
135
|
}
|
|
114
|
-
|
|
115
|
-
|
|
116
|
-
|
|
117
|
-
|
|
118
|
-
|
|
119
|
-
|
|
120
|
-
|
|
121
|
-
|
|
122
|
-
|
|
123
|
-
|
|
124
|
-
|
|
125
|
-
|
|
136
|
+
return _(() => D.value, () => {
|
|
137
|
+
j.value || V();
|
|
138
|
+
}, { immediate: !0 }), r({
|
|
139
|
+
focus: (e) => {
|
|
140
|
+
if (A.value?.focus({ preventScroll: e?.preventScroll }), e?.cursor && A.value) {
|
|
141
|
+
let t = A.value.value.length;
|
|
142
|
+
switch (e.cursor) {
|
|
143
|
+
case "start":
|
|
144
|
+
A.value.setSelectionRange(0, 0);
|
|
145
|
+
break;
|
|
146
|
+
case "end":
|
|
147
|
+
A.value.setSelectionRange(t, t);
|
|
148
|
+
break;
|
|
149
|
+
case "all":
|
|
150
|
+
A.value.setSelectionRange(0, t);
|
|
151
|
+
break;
|
|
152
|
+
}
|
|
153
|
+
}
|
|
154
|
+
},
|
|
155
|
+
blur: () => {
|
|
156
|
+
A.value?.blur();
|
|
157
|
+
}
|
|
158
|
+
}), (t, r) => (d(), o("span", { class: u(["b-input-number", [
|
|
159
|
+
`b-input-number--${e.size}`,
|
|
160
|
+
`b-input-number--${e.variant}`,
|
|
161
|
+
{
|
|
162
|
+
"b-input-number--focused": j.value,
|
|
163
|
+
"b-input-number--disabled": e.disabled,
|
|
164
|
+
"b-input-number--readonly": e.readOnly,
|
|
165
|
+
"b-input-number--error": e.status === m(n).Error,
|
|
166
|
+
"b-input-number--warning": e.status === m(n).Warning,
|
|
167
|
+
"b-input-number--has-controls": e.controls
|
|
126
168
|
}
|
|
127
|
-
|
|
128
|
-
|
|
129
|
-
|
|
130
|
-
|
|
131
|
-
|
|
132
|
-
|
|
133
|
-
|
|
134
|
-
|
|
135
|
-
|
|
136
|
-
|
|
137
|
-
|
|
138
|
-
|
|
139
|
-
|
|
140
|
-
|
|
141
|
-
|
|
142
|
-
|
|
143
|
-
|
|
144
|
-
|
|
145
|
-
|
|
146
|
-
|
|
147
|
-
|
|
148
|
-
|
|
149
|
-
|
|
150
|
-
|
|
151
|
-
"
|
|
152
|
-
|
|
153
|
-
|
|
154
|
-
|
|
155
|
-
|
|
156
|
-
|
|
157
|
-
|
|
158
|
-
|
|
159
|
-
|
|
160
|
-
|
|
169
|
+
]]) }, [s("span", y, [
|
|
170
|
+
N.value ? (d(), o("span", b, [p(t.$slots, "prefix", {}, void 0, !0)])) : a("", !0),
|
|
171
|
+
s("input", {
|
|
172
|
+
id: k.value,
|
|
173
|
+
ref_key: "inputRef",
|
|
174
|
+
ref: A,
|
|
175
|
+
value: M.value,
|
|
176
|
+
type: "text",
|
|
177
|
+
inputmode: "decimal",
|
|
178
|
+
role: "spinbutton",
|
|
179
|
+
"aria-valuenow": D.value ?? void 0,
|
|
180
|
+
"aria-valuemin": e.min === -(2 ** 53 - 1) ? void 0 : e.min,
|
|
181
|
+
"aria-valuemax": e.max === 2 ** 53 - 1 ? void 0 : e.max,
|
|
182
|
+
"aria-invalid": e.status === m(n).Error ? !0 : void 0,
|
|
183
|
+
placeholder: e.placeholder,
|
|
184
|
+
disabled: e.disabled,
|
|
185
|
+
readonly: e.readOnly,
|
|
186
|
+
class: "b-input-number__input",
|
|
187
|
+
onInput: W,
|
|
188
|
+
onKeydown: G,
|
|
189
|
+
onFocus: K,
|
|
190
|
+
onBlur: q,
|
|
191
|
+
onWheel: J
|
|
192
|
+
}, null, 40, x),
|
|
193
|
+
P.value ? (d(), o("span", S, [p(t.$slots, "suffix", {}, void 0, !0)])) : a("", !0),
|
|
194
|
+
e.controls ? (d(), o("span", C, [s("span", {
|
|
195
|
+
class: u(["b-input-number__handler b-input-number__handler--up", { "b-input-number__handler--disabled": F.value }]),
|
|
196
|
+
role: "button",
|
|
197
|
+
tabindex: "-1",
|
|
198
|
+
"aria-label": "Increase value",
|
|
199
|
+
"aria-disabled": F.value,
|
|
200
|
+
onMousedown: r[0] ||= v((e) => !F.value && U("up"), ["prevent"])
|
|
201
|
+
}, [...r[2] ||= [s("svg", {
|
|
202
|
+
viewBox: "0 0 1024 1024",
|
|
203
|
+
width: "1em",
|
|
204
|
+
height: "1em",
|
|
205
|
+
fill: "currentColor",
|
|
206
|
+
"aria-hidden": "true"
|
|
207
|
+
}, [s("path", { d: "M890.5 755.3L537.9 269.2c-12.8-17.6-39-17.6-51.7 0L133.5 755.3A8 8 0 00140 768h286c2.1 0 4.2-.8 5.7-2.3l70.3-70.3 70.3 70.3c1.5 1.5 3.5 2.3 5.7 2.3h286c6.5 0 10.3-7.4 6.5-12.7z" })], -1)]], 42, w), s("span", {
|
|
208
|
+
class: u(["b-input-number__handler b-input-number__handler--down", { "b-input-number__handler--disabled": I.value }]),
|
|
209
|
+
role: "button",
|
|
210
|
+
tabindex: "-1",
|
|
211
|
+
"aria-label": "Decrease value",
|
|
212
|
+
"aria-disabled": I.value,
|
|
213
|
+
onMousedown: r[1] ||= v((e) => !I.value && U("down"), ["prevent"])
|
|
214
|
+
}, [...r[3] ||= [s("svg", {
|
|
215
|
+
viewBox: "0 0 1024 1024",
|
|
216
|
+
width: "1em",
|
|
217
|
+
height: "1em",
|
|
218
|
+
fill: "currentColor",
|
|
219
|
+
"aria-hidden": "true"
|
|
220
|
+
}, [s("path", { d: "M884 256h-75c-5.1 0-9.9 2.5-12.9 6.6L512 654.2 227.9 262.6c-3-4.1-7.8-6.6-12.9-6.6h-75c-6.5 0-10.3 7.4-6.5 12.7l352.6 486.1c12.8 17.6 39 17.6 51.7 0l352.6-486.1c3.9-5.3.1-12.7-6.4-12.7z" })], -1)]], 42, T)])) : a("", !0)
|
|
221
|
+
])], 2));
|
|
161
222
|
}
|
|
162
223
|
});
|
|
163
224
|
//#endregion
|
|
164
|
-
export {
|
|
225
|
+
export { E as default };
|
|
165
226
|
|
|
166
227
|
//# sourceMappingURL=design-system120.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"design-system120.js","names":["$slots"],"sources":["../src/components/BMasonry/BMasonry.vue"],"sourcesContent":["<script setup lang=\"ts\">\nimport { computed, onBeforeUnmount, onMounted, ref, watch } from 'vue';\nimport type {\n BMasonryBreakpoint,\n BMasonryClassNames,\n BMasonryItem,\n BMasonryLayoutChangePayload,\n BMasonryResponsive,\n BMasonryStyles,\n} from './types';\n\n// ─── Props ────────────────────────────────────────────────────────────────────\n\nconst {\n columns = 3,\n // eslint-disable-next-line vue/require-valid-default-prop\n gutter = 0,\n items = [],\n fresh = false,\n classNames,\n styles,\n} = defineProps<{\n /**\n * Number of columns. Accepts a fixed number or a breakpoint map.\n * @example 3\n * @example { xs: 1, sm: 2, md: 3, lg: 4 }\n * @default 3\n */\n columns?: BMasonryResponsive;\n\n /**\n * Gap between items in pixels. Accepts a fixed value, a [colGap, rowGap] tuple,\n * or a breakpoint map for responsive gaps.\n * @example 16\n * @example [16, 8]\n * @example { xs: 8, md: 16 }\n * @default 0\n */\n gutter?: BMasonryResponsive | [BMasonryResponsive, BMasonryResponsive];\n\n /**\n * Array of masonry items to render.\n * @default []\n */\n items?: BMasonryItem[];\n\n /**\n * When true, observe every item's size so the layout re-flows when children resize.\n * Requires ResizeObserver support; degrades gracefully when unavailable.\n * @default false\n */\n fresh?: boolean;\n\n /**\n * Customize CSS classes on semantic DOM elements (`root`, `column`, `item`).\n * Can be a plain object or a per-item function `(item, columnIndex) => classes`.\n */\n classNames?: BMasonryClassNames;\n\n /**\n * Customize inline styles on semantic DOM elements (`root`, `column`, `item`).\n * Can be a plain object or a per-item function `(item, columnIndex) => styles`.\n */\n styles?: BMasonryStyles;\n}>();\n\n// ─── Emits ────────────────────────────────────────────────────────────────────\n\nconst emit = defineEmits<{\n /**\n * Fires after each layout recalculation with the resolved column count and\n * the column assignment map (item key → 0-based column index).\n */\n layoutChange: [payload: BMasonryLayoutChangePayload];\n}>();\n\n// ─── Slots ────────────────────────────────────────────────────────────────────\n\ndefineSlots<{\n /**\n * Custom rendering for each item. Receives `{ item: BMasonryItem, index: number, column: number }`.\n */\n item?: (props: { item: BMasonryItem; index: number; column: number }) => unknown;\n\n /**\n * Default slot used when no `items` prop is provided — raw child nodes are\n * distributed across columns automatically.\n */\n default?: (props: Record<string, never>) => unknown;\n}>();\n\n// ─── Responsive helpers ───────────────────────────────────────────────────────\n\nconst BREAKPOINTS: Record<BMasonryBreakpoint, number> = {\n xs: 0,\n sm: 576,\n md: 768,\n lg: 992,\n xl: 1200,\n xxl: 1600,\n};\n\nfunction resolveResponsive(value: BMasonryResponsive, width: number): number {\n if (typeof value === 'number') return Math.max(1, value);\n\n // Breakpoint map — pick the largest breakpoint that still fits\n const keys = (Object.keys(BREAKPOINTS) as BMasonryBreakpoint[]).sort(\n (a, b) => BREAKPOINTS[b] - BREAKPOINTS[a],\n );\n\n for (const bp of keys) {\n if (width >= BREAKPOINTS[bp] && value[bp] !== undefined) {\n return Math.max(1, value[bp]!);\n }\n }\n // Fallback to smallest defined value\n const smallest = (Object.keys(value) as BMasonryBreakpoint[]).sort(\n (a, b) => BREAKPOINTS[a] - BREAKPOINTS[b],\n )[0];\n return smallest ? Math.max(1, value[smallest]!) : 1;\n}\n\n// ─── Container width tracking ─────────────────────────────────────────────────\n\nconst rootEl = ref<HTMLElement | null>(null);\nconst containerWidth = ref(0);\n\nlet containerObserver: ResizeObserver | null = null;\n\nfunction updateWidth() {\n if (rootEl.value) {\n containerWidth.value = rootEl.value.offsetWidth;\n }\n}\n\n// ─── Item height tracking (fresh mode) ────────────────────────────────────────\n\nconst itemHeights = ref<Record<string | number, number>>({});\nlet itemObserver: ResizeObserver | null = null;\nconst itemEls = ref<Map<string | number, Element>>(new Map());\n\nfunction registerItemEl(key: string | number, el: Element | null) {\n if (el) {\n itemEls.value.set(key, el);\n if (fresh && itemObserver) {\n itemObserver.observe(el);\n }\n } else {\n const old = itemEls.value.get(key);\n if (old && itemObserver) itemObserver.unobserve(old);\n itemEls.value.delete(key);\n const next = { ...itemHeights.value };\n delete next[key];\n itemHeights.value = next;\n }\n}\n\nfunction setupItemObserver() {\n if (!fresh || typeof ResizeObserver === 'undefined') return;\n itemObserver = new ResizeObserver((entries) => {\n let changed = false;\n for (const entry of entries) {\n const el = entry.target as HTMLElement;\n const key = el.dataset.masonryKey;\n if (key !== undefined) {\n const h = entry.contentRect.height;\n if (itemHeights.value[key] !== h) {\n itemHeights.value = { ...itemHeights.value, [key]: h };\n changed = true;\n }\n }\n }\n if (changed) {\n // trigger layout recompute (handled reactively via computed)\n }\n });\n // Observe any already-mounted elements\n itemEls.value.forEach((el) => itemObserver!.observe(el));\n}\n\n// ─── Core layout algorithm ────────────────────────────────────────────────────\n\nconst resolvedColumns = computed(() => resolveResponsive(columns, containerWidth.value));\n\nconst resolvedGutter = computed<[number, number]>(() => {\n const g = gutter;\n if (Array.isArray(g)) {\n const colGap = resolveResponsive(g[0] as BMasonryResponsive, containerWidth.value);\n const rowGap = resolveResponsive(g[1] as BMasonryResponsive, containerWidth.value);\n return [colGap, rowGap];\n }\n const v = resolveResponsive(g as BMasonryResponsive, containerWidth.value);\n return [v, v];\n});\n\n/** Distribute items across columns using the \"shortest column first\" strategy. */\nconst columnBuckets = computed<{ item: BMasonryItem; originalIndex: number }[][]>(() => {\n const cols = resolvedColumns.value;\n const buckets: { item: BMasonryItem; originalIndex: number }[][] = Array.from(\n { length: cols },\n () => [],\n );\n const heights = Array<number>(cols).fill(0);\n const [, rowGap] = resolvedGutter.value;\n\n for (let i = 0; i < items.length; i++) {\n const item = items[i];\n let targetCol: number;\n\n if (item.column !== undefined) {\n // Pinned column (1-based → 0-based, clamped)\n targetCol = Math.max(0, Math.min(cols - 1, item.column - 1));\n } else {\n // Shortest column\n targetCol = heights.indexOf(Math.min(...heights));\n }\n\n buckets[targetCol].push({ item, originalIndex: i });\n const h = itemHeights.value[item.key] ?? item.height ?? 0;\n heights[targetCol] += h + (buckets[targetCol].length > 1 ? rowGap : 0);\n }\n\n return buckets;\n});\n\nconst layoutColumnMap = computed(() => {\n const cols = resolvedColumns.value;\n const map: Record<string | number, number> = {};\n for (let i = 0; i < items.length; i++) {\n const item = items[i];\n const bucket = columnBuckets.value.findIndex((b) =>\n b.some((entry) => entry.item.key === item.key),\n );\n if (bucket >= 0) map[item.key] = bucket;\n }\n return { columns: cols, columnMap: map };\n});\n\nwatch(layoutColumnMap, (val) => {\n emit('layoutChange', val);\n}, { immediate: true });\n\n// ─── CSS class/style helpers ──────────────────────────────────────────────────\n\nfunction getItemClasses(item: BMasonryItem, columnIndex: number) {\n const base = ['b-masonry__item'];\n if (!classNames) return base;\n\n if (typeof classNames === 'function') {\n const extra = classNames(item, columnIndex);\n if (extra) base.push(...(Array.isArray(extra) ? extra : [extra as string]));\n } else if (typeof classNames.item === 'function') {\n const extra = classNames.item(item, columnIndex);\n if (extra) base.push(...(Array.isArray(extra) ? extra : [extra as string]));\n } else if (typeof classNames.item === 'string') {\n base.push(classNames.item);\n }\n return base;\n}\n\nfunction getItemStyles(item: BMasonryItem, columnIndex: number): Record<string, string> {\n if (!styles) return {};\n if (typeof styles === 'function') return styles(item, columnIndex) ?? {};\n if (typeof styles.item === 'function') return styles.item(item, columnIndex) ?? {};\n if (styles.item && typeof styles.item === 'object') return styles.item as Record<string, string>;\n return {};\n}\n\nfunction getColumnClasses(_colIndex: number): string[] {\n const base = ['b-masonry__column'];\n if (!classNames || typeof classNames === 'function') return base;\n if (classNames.column) base.push(classNames.column);\n return base;\n}\n\nfunction getColumnStyles(_colIndex: number): Record<string, string> {\n if (!styles || typeof styles === 'function') return {};\n return (styles.column as Record<string, string>) ?? {};\n}\n\nconst rootClasses = computed(() => {\n const base = ['b-masonry'];\n if (!classNames || typeof classNames === 'function') return base;\n if (classNames.root) base.push(classNames.root);\n return base;\n});\n\nconst rootStyles = computed(() => {\n const base: Record<string, string> = {\n '--b-masonry-columns': String(resolvedColumns.value),\n '--b-masonry-col-gap': `${resolvedGutter.value[0]}px`,\n '--b-masonry-row-gap': `${resolvedGutter.value[1]}px`,\n };\n if (styles && typeof styles === 'object' && !('root' in styles) === false) {\n const s = styles as { root?: Record<string, string> };\n if (s.root) Object.assign(base, s.root);\n }\n return base;\n});\n\n// ─── Lifecycle ────────────────────────────────────────────────────────────────\n\nonMounted(() => {\n updateWidth();\n\n if (typeof ResizeObserver !== 'undefined') {\n containerObserver = new ResizeObserver(() => updateWidth());\n if (rootEl.value) containerObserver.observe(rootEl.value);\n } else {\n // SSR / no ResizeObserver: listen to window resize\n window.addEventListener('resize', updateWidth);\n }\n\n if (fresh) setupItemObserver();\n});\n\nwatch(\n () => fresh,\n (enabled) => {\n if (enabled) {\n setupItemObserver();\n } else {\n itemObserver?.disconnect();\n itemObserver = null;\n itemHeights.value = {};\n }\n },\n);\n\nonBeforeUnmount(() => {\n containerObserver?.disconnect();\n itemObserver?.disconnect();\n window.removeEventListener('resize', updateWidth);\n});\n</script>\n\n<template>\n <!-- role=\"list\" lets screen readers announce item count -->\n <div\n ref=\"rootEl\"\n :class=\"rootClasses\"\n :style=\"rootStyles\"\n role=\"list\"\n aria-label=\"Masonry layout\"\n >\n <!-- Column-based layout: each column is a flex column -->\n <div\n v-for=\"(bucket, colIdx) in columnBuckets\"\n :key=\"colIdx\"\n :class=\"getColumnClasses(colIdx)\"\n :style=\"getColumnStyles(colIdx)\"\n role=\"presentation\"\n >\n <div\n v-for=\"{ item, originalIndex } in bucket\"\n :key=\"item.key\"\n :ref=\"(el) => registerItemEl(item.key, el as Element | null)\"\n :data-masonry-key=\"item.key\"\n :class=\"getItemClasses(item, colIdx)\"\n :style=\"getItemStyles(item, colIdx)\"\n role=\"listitem\"\n >\n <!-- Named item slot (prop-driven items) -->\n <slot v-if=\"$slots.item\" name=\"item\" :item=\"item\" :index=\"originalIndex\" :column=\"colIdx\" />\n <!-- Default slot fallback when using raw children (no items prop) -->\n <template v-else>\n <slot />\n </template>\n </div>\n </div>\n </div>\n</template>\n\n<style>\n/* ─────────────────────────────────────────────────────────────────────────────\n BMasonry — CSS custom properties (scoped to component root)\n ───────────────────────────────────────────────────────────────────────────── */\n.b-masonry {\n /* Layout tokens */\n --b-masonry-columns: 3;\n --b-masonry-col-gap: 0px;\n --b-masonry-row-gap: 0px;\n\n /* Item tokens */\n --b-masonry-item-transition-duration: 200ms;\n --b-masonry-item-transition-timing: ease;\n --b-masonry-item-border-radius: 0px;\n --b-masonry-item-bg: transparent;\n\n /* ── Layout ── */\n display: flex;\n flex-direction: row;\n align-items: flex-start;\n gap: var(--b-masonry-col-gap);\n width: 100%;\n box-sizing: border-box;\n}\n\n/* ── Column ── */\n.b-masonry__column {\n display: flex;\n flex: 1 1 0;\n min-width: 0;\n flex-direction: column;\n gap: var(--b-masonry-row-gap);\n}\n\n/* ── Item ── */\n.b-masonry__item {\n width: 100%;\n box-sizing: border-box;\n background: var(--b-masonry-item-bg);\n border-radius: var(--b-masonry-item-border-radius);\n transition:\n transform var(--b-masonry-item-transition-duration) var(--b-masonry-item-transition-timing),\n opacity var(--b-masonry-item-transition-duration) var(--b-masonry-item-transition-timing);\n}\n\n/* ── Dark mode ── */\n[data-prefers-color='dark'] .b-masonry {\n /* Tokens that shift in dark mode — override as needed by the consumer */\n --b-masonry-item-bg: transparent;\n}\n\n@media (prefers-color-scheme: dark) {\n [data-prefers-color='system'] .b-masonry {\n /* Tokens that shift in dark mode — override as needed by the consumer */\n --b-masonry-item-bg: transparent;\n }\n}\n\n/* ── Reduced motion ── */\n@media (prefers-reduced-motion: reduce) {\n .b-masonry {\n --b-masonry-item-transition-duration: 0ms;\n }\n}\n</style>\n"],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"design-system120.js","names":[],"sources":["../src/components/BInputNumber/BInputNumber.vue"],"sourcesContent":["<script setup lang=\"ts\">\nimport { BInputStatus, BInputVariant } from '@/components/BInput/types.ts';\nimport { useComponentId } from '@/composables/useComponentId.ts';\nimport { BCommonSize } from '@/types.ts';\nimport { computed, ref, useSlots, watch } from 'vue';\nimport type { BInputNumberFocusOptions, BInputNumberStepInfo } from './types.ts';\n\ndefineOptions({ inheritAttrs: false });\n\nconst slots = useSlots();\n\nconst {\n size = BCommonSize.Medium,\n variant = BInputVariant.Outlined,\n min = Number.MIN_SAFE_INTEGER,\n max = Number.MAX_SAFE_INTEGER,\n step = 1,\n disabled = false,\n readOnly = false,\n controls = true,\n keyboard = true,\n changeOnBlur = true,\n changeOnWheel = false,\n placeholder,\n id,\n precision,\n formatter,\n parser,\n decimalSeparator,\n stringMode = false,\n status,\n} = defineProps<{\n /** The size of the input number. */\n size?: `${BCommonSize}`;\n /** Visual variant of the input number. */\n variant?: `${BInputVariant}`;\n /** Validation status. */\n status?: `${BInputStatus}`;\n /** Minimum value allowed. */\n min?: number;\n /** Maximum value allowed. */\n max?: number;\n /** Increment/decrement step amount. */\n step?: number;\n /** Whether the input number is disabled. */\n disabled?: boolean;\n /** Whether the input number is read-only. */\n readOnly?: boolean;\n /** Whether to show +/- controls. */\n controls?: boolean;\n /** Whether keyboard up/down changes value. */\n keyboard?: boolean;\n /** Whether to trigger change on blur (e.g. reset out-of-range). */\n changeOnBlur?: boolean;\n /** Whether mouse wheel changes value. */\n changeOnWheel?: boolean;\n /** Placeholder text. */\n placeholder?: string;\n /** HTML id attribute. */\n id?: string;\n /** Decimal precision for display. */\n precision?: number;\n /** Format the displayed value. */\n formatter?: (value: string | number) => string;\n /** Parse the formatted value back to a number. */\n parser?: (displayValue: string) => string;\n /** Custom decimal separator character. */\n decimalSeparator?: string;\n /** Use string mode for high-precision decimals. */\n stringMode?: boolean;\n}>();\n\nconst emit = defineEmits<{\n /** Fired when value changes. */\n change: [value: number | null];\n /** Fired when Enter key is pressed. */\n pressEnter: [event: KeyboardEvent];\n /** Fired on step (button, keyboard, or wheel). */\n step: [value: number | null, info: BInputNumberStepInfo];\n /** Fired on input focus. */\n focus: [event: FocusEvent];\n /** Fired on input blur. */\n blur: [event: FocusEvent];\n}>();\n\nconst model = defineModel<number | null>({ default: null });\n\nconst { componentUID } = useComponentId();\nconst inputId = computed(() => id ?? `b-input-number-${componentUID.value}`);\n\nconst inputRef = ref<HTMLInputElement | null>(null);\nconst isFocused = ref(false);\nconst displayValue = ref('');\n\nconst hasPrefix = computed(() => !!slots.prefix);\nconst hasSuffix = computed(() => !!slots.suffix);\n\nconst isUpDisabled = computed(() => {\n if (disabled || readOnly) return true;\n if (model.value === null) return false;\n return model.value >= max;\n});\n\nconst isDownDisabled = computed(() => {\n if (disabled || readOnly) return true;\n if (model.value === null) return false;\n return model.value <= min;\n});\n\nfunction toFixedPrecision(val: number): number {\n if (precision !== undefined) {\n return parseFloat(val.toFixed(precision));\n }\n const stepStr = String(step);\n const stepDecimals = stepStr.includes('.') ? stepStr.split('.')[1].length : 0;\n if (stepDecimals > 0) {\n return parseFloat(val.toFixed(stepDecimals));\n }\n return val;\n}\n\nfunction clamp(val: number): number {\n return Math.min(max, Math.max(min, val));\n}\n\nfunction formatValue(val: number | null): string {\n if (val === null) return '';\n let str: string;\n if (precision !== undefined) {\n str = val.toFixed(precision);\n } else {\n str = String(val);\n }\n if (decimalSeparator) {\n str = str.replace('.', decimalSeparator);\n }\n if (formatter) {\n return formatter(stringMode ? str : val);\n }\n return str;\n}\n\nfunction parseInput(input: string): number | null {\n if (!input.trim()) return null;\n let parsed = input;\n if (parser) {\n parsed = parser(input);\n } else if (decimalSeparator) {\n parsed = parsed.replace(decimalSeparator, '.');\n }\n const num = Number(parsed);\n if (isNaN(num)) return model.value;\n return num;\n}\n\nfunction syncDisplay() {\n displayValue.value = formatValue(model.value);\n}\n\nfunction updateValue(newVal: number | null, triggerChange = true) {\n if (newVal !== null) {\n newVal = toFixedPrecision(clamp(newVal));\n }\n const changed = newVal !== model.value;\n model.value = newVal;\n syncDisplay();\n if (changed && triggerChange) {\n emit('change', newVal);\n }\n}\n\nfunction stepValue(direction: 'up' | 'down') {\n if (disabled || readOnly) return;\n const current = model.value ?? 0;\n const offset = direction === 'up' ? step : -step;\n const next = toFixedPrecision(current + offset);\n const clamped = clamp(next);\n updateValue(clamped);\n emit('step', clamped, { offset: step, type: direction });\n}\n\nconst handleInput = (e: Event) => {\n const target = e.target as HTMLInputElement;\n displayValue.value = target.value;\n};\n\nconst handleKeyDown = (e: KeyboardEvent) => {\n if (e.key === 'Enter') {\n commitValue();\n emit('pressEnter', e);\n }\n if (!keyboard) return;\n if (e.key === 'ArrowUp') {\n e.preventDefault();\n stepValue('up');\n } else if (e.key === 'ArrowDown') {\n e.preventDefault();\n stepValue('down');\n }\n};\n\nconst handleFocus = (e: FocusEvent) => {\n isFocused.value = true;\n emit('focus', e);\n};\n\nconst handleBlur = (e: FocusEvent) => {\n isFocused.value = false;\n if (changeOnBlur) {\n commitValue();\n }\n emit('blur', e);\n};\n\nconst handleWheel = (e: WheelEvent) => {\n if (!changeOnWheel || disabled || readOnly || !isFocused.value) return;\n e.preventDefault();\n if (e.deltaY < 0) {\n stepValue('up');\n } else if (e.deltaY > 0) {\n stepValue('down');\n }\n};\n\nfunction commitValue() {\n const parsed = parseInput(displayValue.value);\n if (parsed === null) {\n updateValue(null);\n } else {\n updateValue(parsed);\n }\n}\n\nconst focus = (options?: BInputNumberFocusOptions) => {\n inputRef.value?.focus({ preventScroll: options?.preventScroll });\n if (options?.cursor && inputRef.value) {\n const len = inputRef.value.value.length;\n switch (options.cursor) {\n case 'start':\n inputRef.value.setSelectionRange(0, 0);\n break;\n case 'end':\n inputRef.value.setSelectionRange(len, len);\n break;\n case 'all':\n inputRef.value.setSelectionRange(0, len);\n break;\n }\n }\n};\n\nconst blur = () => {\n inputRef.value?.blur();\n};\n\nwatch(\n () => model.value,\n () => {\n if (!isFocused.value) {\n syncDisplay();\n }\n },\n { immediate: true },\n);\n\ndefineExpose({ focus, blur });\n</script>\n\n<template>\n <span\n class=\"b-input-number\"\n :class=\"[\n `b-input-number--${size}`,\n `b-input-number--${variant}`,\n {\n 'b-input-number--focused': isFocused,\n 'b-input-number--disabled': disabled,\n 'b-input-number--readonly': readOnly,\n 'b-input-number--error': status === BInputStatus.Error,\n 'b-input-number--warning': status === BInputStatus.Warning,\n 'b-input-number--has-controls': controls,\n },\n ]\"\n >\n <span class=\"b-input-number__wrapper\">\n <span v-if=\"hasPrefix\" class=\"b-input-number__prefix\" aria-hidden=\"true\">\n <slot name=\"prefix\" />\n </span>\n\n <input\n :id=\"inputId\"\n ref=\"inputRef\"\n :value=\"displayValue\"\n type=\"text\"\n inputmode=\"decimal\"\n role=\"spinbutton\"\n :aria-valuenow=\"model ?? undefined\"\n :aria-valuemin=\"min !== Number.MIN_SAFE_INTEGER ? min : undefined\"\n :aria-valuemax=\"max !== Number.MAX_SAFE_INTEGER ? max : undefined\"\n :aria-invalid=\"status === BInputStatus.Error ? true : undefined\"\n :placeholder=\"placeholder\"\n :disabled=\"disabled\"\n :readonly=\"readOnly\"\n class=\"b-input-number__input\"\n @input=\"handleInput\"\n @keydown=\"handleKeyDown\"\n @focus=\"handleFocus\"\n @blur=\"handleBlur\"\n @wheel=\"handleWheel\"\n />\n\n <span v-if=\"hasSuffix\" class=\"b-input-number__suffix\" aria-hidden=\"true\">\n <slot name=\"suffix\" />\n </span>\n\n <span v-if=\"controls\" class=\"b-input-number__handler-wrap\" aria-hidden=\"true\">\n <span\n class=\"b-input-number__handler b-input-number__handler--up\"\n :class=\"{ 'b-input-number__handler--disabled': isUpDisabled }\"\n role=\"button\"\n tabindex=\"-1\"\n aria-label=\"Increase value\"\n :aria-disabled=\"isUpDisabled\"\n @mousedown.prevent=\"!isUpDisabled && stepValue('up')\"\n >\n <svg\n viewBox=\"0 0 1024 1024\"\n width=\"1em\"\n height=\"1em\"\n fill=\"currentColor\"\n aria-hidden=\"true\"\n >\n <path\n d=\"M890.5 755.3L537.9 269.2c-12.8-17.6-39-17.6-51.7 0L133.5 755.3A8 8 0 00140 768h286c2.1 0 4.2-.8 5.7-2.3l70.3-70.3 70.3 70.3c1.5 1.5 3.5 2.3 5.7 2.3h286c6.5 0 10.3-7.4 6.5-12.7z\"\n />\n </svg>\n </span>\n <span\n class=\"b-input-number__handler b-input-number__handler--down\"\n :class=\"{ 'b-input-number__handler--disabled': isDownDisabled }\"\n role=\"button\"\n tabindex=\"-1\"\n aria-label=\"Decrease value\"\n :aria-disabled=\"isDownDisabled\"\n @mousedown.prevent=\"!isDownDisabled && stepValue('down')\"\n >\n <svg\n viewBox=\"0 0 1024 1024\"\n width=\"1em\"\n height=\"1em\"\n fill=\"currentColor\"\n aria-hidden=\"true\"\n >\n <path\n d=\"M884 256h-75c-5.1 0-9.9 2.5-12.9 6.6L512 654.2 227.9 262.6c-3-4.1-7.8-6.6-12.9-6.6h-75c-6.5 0-10.3 7.4-6.5 12.7l352.6 486.1c12.8 17.6 39 17.6 51.7 0l352.6-486.1c3.9-5.3.1-12.7-6.4-12.7z\"\n />\n </svg>\n </span>\n </span>\n </span>\n </span>\n</template>\n\n<style scoped>\n.b-input-number {\n --b-input-number-active-bg: #ffffff;\n --b-input-number-active-border-color: #1677ff;\n --b-input-number-active-shadow: 0 0 0 2px rgba(5, 145, 255, 0.1);\n --b-input-number-addon-bg: rgba(0, 0, 0, 0.02);\n --b-input-number-control-width: 90px;\n --b-input-number-error-active-shadow: 0 0 0 2px rgba(255, 38, 5, 0.06);\n --b-input-number-filled-handle-bg: #f0f0f0;\n --b-input-number-handle-active-bg: rgba(0, 0, 0, 0.02);\n --b-input-number-handle-bg: #ffffff;\n --b-input-number-handle-border-color: #d9d9d9;\n --b-input-number-handle-font-size: 7px;\n --b-input-number-handle-hover-color: #1677ff;\n --b-input-number-handle-width: 22px;\n --b-input-number-hover-bg: #ffffff;\n --b-input-number-hover-border-color: #4096ff;\n --b-input-number-font-size: 14px;\n --b-input-number-font-size-lg: 16px;\n --b-input-number-font-size-sm: 14px;\n --b-input-number-padding-block: 4px;\n --b-input-number-padding-block-lg: 7px;\n --b-input-number-padding-block-sm: 0px;\n --b-input-number-padding-inline: 11px;\n --b-input-number-padding-inline-lg: 11px;\n --b-input-number-padding-inline-sm: 7px;\n --b-input-number-warning-active-shadow: 0 0 0 2px rgba(255, 215, 5, 0.1);\n --b-input-number-border-color: #d9d9d9;\n --b-input-number-bg: #ffffff;\n --b-input-number-color: rgba(0, 0, 0, 0.88);\n --b-input-number-placeholder-color: rgba(0, 0, 0, 0.25);\n --b-input-number-border-radius: 6px;\n --b-input-number-disabled-bg: rgba(0, 0, 0, 0.04);\n --b-input-number-disabled-color: rgba(0, 0, 0, 0.25);\n --b-input-number-error-border-color: #ff4d4f;\n --b-input-number-error-hover-border-color: #ff7875;\n --b-input-number-warning-border-color: #faad14;\n --b-input-number-warning-hover-border-color: #ffc53d;\n --b-input-number-filled-bg: rgba(0, 0, 0, 0.04);\n --b-input-number-filled-hover-bg: rgba(0, 0, 0, 0.04);\n\n display: inline-flex;\n align-items: stretch;\n width: var(--b-input-number-control-width);\n font-size: var(--b-input-number-font-size);\n color: var(--b-input-number-color);\n line-height: 1.5714;\n}\n\n.b-input-number--lg {\n font-size: var(--b-input-number-font-size-lg);\n}\n\n.b-input-number--sm {\n font-size: var(--b-input-number-font-size-sm);\n}\n\n.b-input-number__wrapper {\n display: inline-flex;\n align-items: center;\n flex: 1;\n min-width: 0;\n position: relative;\n transition: all 0.2s;\n}\n\n/* Outlined */\n.b-input-number--outlined .b-input-number__wrapper {\n background: var(--b-input-number-bg);\n border: 1px solid var(--b-input-number-border-color);\n border-radius: var(--b-input-number-border-radius);\n}\n\n.b-input-number--outlined:not(.b-input-number--disabled):hover .b-input-number__wrapper {\n border-color: var(--b-input-number-hover-border-color);\n background: var(--b-input-number-hover-bg);\n}\n\n.b-input-number--outlined.b-input-number--focused .b-input-number__wrapper {\n border-color: var(--b-input-number-active-border-color);\n background: var(--b-input-number-active-bg);\n box-shadow: var(--b-input-number-active-shadow);\n}\n\n/* Filled */\n.b-input-number--filled .b-input-number__wrapper {\n background: var(--b-input-number-filled-bg);\n border: 1px solid transparent;\n border-radius: var(--b-input-number-border-radius);\n}\n\n.b-input-number--filled:not(.b-input-number--disabled):hover .b-input-number__wrapper {\n background: var(--b-input-number-filled-hover-bg);\n}\n\n.b-input-number--filled.b-input-number--focused .b-input-number__wrapper {\n background: var(--b-input-number-active-bg);\n border-color: var(--b-input-number-active-border-color);\n box-shadow: var(--b-input-number-active-shadow);\n}\n\n/* Borderless */\n.b-input-number--borderless .b-input-number__wrapper {\n background: transparent;\n border: 1px solid transparent;\n border-radius: var(--b-input-number-border-radius);\n}\n\n/* Underlined */\n.b-input-number--underlined .b-input-number__wrapper {\n background: transparent;\n border: none;\n border-bottom: 1px solid var(--b-input-number-border-color);\n border-radius: 0;\n}\n\n.b-input-number--underlined:not(.b-input-number--disabled):hover .b-input-number__wrapper {\n border-bottom-color: var(--b-input-number-hover-border-color);\n}\n\n.b-input-number--underlined.b-input-number--focused .b-input-number__wrapper {\n border-bottom-color: var(--b-input-number-active-border-color);\n box-shadow: 0 1px 0 0 var(--b-input-number-active-border-color);\n}\n\n/* Error */\n.b-input-number--error.b-input-number--outlined .b-input-number__wrapper {\n border-color: var(--b-input-number-error-border-color);\n}\n\n.b-input-number--error.b-input-number--outlined:not(.b-input-number--disabled):hover\n .b-input-number__wrapper {\n border-color: var(--b-input-number-error-hover-border-color);\n}\n\n.b-input-number--error.b-input-number--outlined.b-input-number--focused .b-input-number__wrapper,\n.b-input-number--error.b-input-number--filled.b-input-number--focused .b-input-number__wrapper {\n border-color: var(--b-input-number-error-border-color);\n box-shadow: var(--b-input-number-error-active-shadow);\n}\n\n.b-input-number--error.b-input-number--underlined .b-input-number__wrapper {\n border-bottom-color: var(--b-input-number-error-border-color);\n}\n\n.b-input-number--error.b-input-number--underlined.b-input-number--focused .b-input-number__wrapper {\n border-bottom-color: var(--b-input-number-error-border-color);\n box-shadow: 0 1px 0 0 var(--b-input-number-error-border-color);\n}\n\n/* Warning */\n.b-input-number--warning.b-input-number--outlined .b-input-number__wrapper {\n border-color: var(--b-input-number-warning-border-color);\n}\n\n.b-input-number--warning.b-input-number--outlined:not(.b-input-number--disabled):hover\n .b-input-number__wrapper {\n border-color: var(--b-input-number-warning-hover-border-color);\n}\n\n.b-input-number--warning.b-input-number--outlined.b-input-number--focused .b-input-number__wrapper,\n.b-input-number--warning.b-input-number--filled.b-input-number--focused .b-input-number__wrapper {\n border-color: var(--b-input-number-warning-border-color);\n box-shadow: var(--b-input-number-warning-active-shadow);\n}\n\n.b-input-number--warning.b-input-number--underlined .b-input-number__wrapper {\n border-bottom-color: var(--b-input-number-warning-border-color);\n}\n\n.b-input-number--warning.b-input-number--underlined.b-input-number--focused\n .b-input-number__wrapper {\n border-bottom-color: var(--b-input-number-warning-border-color);\n box-shadow: 0 1px 0 0 var(--b-input-number-warning-border-color);\n}\n\n/* Disabled */\n.b-input-number--disabled .b-input-number__wrapper {\n background: var(--b-input-number-disabled-bg);\n cursor: not-allowed;\n}\n\n.b-input-number--disabled .b-input-number__input {\n color: var(--b-input-number-disabled-color);\n cursor: not-allowed;\n}\n\n/* Input element */\n.b-input-number__input {\n flex: 1;\n min-width: 0;\n width: 100%;\n border: none;\n outline: none;\n background: transparent;\n color: inherit;\n font-size: inherit;\n font-family: inherit;\n line-height: inherit;\n text-align: left;\n}\n\n.b-input-number--md .b-input-number__input {\n padding: var(--b-input-number-padding-block) var(--b-input-number-padding-inline);\n}\n\n.b-input-number--lg .b-input-number__input {\n padding: var(--b-input-number-padding-block-lg) var(--b-input-number-padding-inline-lg);\n}\n\n.b-input-number--sm .b-input-number__input {\n padding: var(--b-input-number-padding-block-sm) var(--b-input-number-padding-inline-sm);\n}\n\n.b-input-number--has-controls .b-input-number__input {\n padding-right: calc(var(--b-input-number-handle-width) + 2px);\n}\n\n.b-input-number__input::placeholder {\n color: var(--b-input-number-placeholder-color);\n}\n\n/* Prefix & Suffix */\n.b-input-number__prefix,\n.b-input-number__suffix {\n display: inline-flex;\n align-items: center;\n color: var(--b-input-number-color);\n flex-shrink: 0;\n}\n\n.b-input-number__prefix {\n margin-left: var(--b-input-number-padding-inline);\n}\n\n.b-input-number__suffix {\n margin-right: var(--b-input-number-padding-inline);\n}\n\n.b-input-number__prefix ~ .b-input-number__input {\n padding-left: 4px;\n}\n\n/* Handler (step buttons) */\n.b-input-number__handler-wrap {\n position: absolute;\n top: 0;\n right: 0;\n display: flex;\n flex-direction: column;\n height: 100%;\n width: var(--b-input-number-handle-width);\n border-left: 1px solid var(--b-input-number-handle-border-color);\n border-radius: 0 var(--b-input-number-border-radius) var(--b-input-number-border-radius) 0;\n overflow: hidden;\n opacity: 0;\n transition: opacity 0.2s;\n}\n\n.b-input-number:hover .b-input-number__handler-wrap,\n.b-input-number--focused .b-input-number__handler-wrap {\n opacity: 1;\n}\n\n.b-input-number__handler {\n display: flex;\n align-items: center;\n justify-content: center;\n flex: 1;\n cursor: pointer;\n background: var(--b-input-number-handle-bg);\n font-size: var(--b-input-number-handle-font-size);\n color: rgba(0, 0, 0, 0.45);\n user-select: none;\n transition:\n color 0.2s,\n background 0.2s;\n}\n\n.b-input-number__handler:hover {\n color: var(--b-input-number-handle-hover-color);\n background: var(--b-input-number-handle-active-bg);\n}\n\n.b-input-number__handler--up {\n border-bottom: 1px solid var(--b-input-number-handle-border-color);\n}\n\n.b-input-number__handler--disabled {\n cursor: not-allowed;\n opacity: 0.4;\n pointer-events: none;\n}\n\n.b-input-number__handler svg {\n width: 0.5em;\n height: 0.5em;\n}\n\n/* Filled variant handler */\n.b-input-number--filled .b-input-number__handler {\n background: var(--b-input-number-filled-handle-bg);\n}\n\n/* Borderless / underlined: hide handler border */\n.b-input-number--borderless .b-input-number__handler-wrap,\n.b-input-number--underlined .b-input-number__handler-wrap {\n border-left-color: transparent;\n}\n\n/* Dark mode */\n[data-prefers-color='dark'] .b-input-number {\n --b-input-number-active-bg: #141414;\n --b-input-number-active-border-color: #1668dc;\n --b-input-number-active-shadow: 0 0 0 2px rgba(22, 104, 220, 0.15);\n --b-input-number-addon-bg: rgba(255, 255, 255, 0.04);\n --b-input-number-error-active-shadow: 0 0 0 2px rgba(220, 56, 56, 0.1);\n --b-input-number-filled-handle-bg: rgba(255, 255, 255, 0.12);\n --b-input-number-handle-active-bg: rgba(255, 255, 255, 0.04);\n --b-input-number-handle-bg: #1f1f1f;\n --b-input-number-handle-border-color: #424242;\n --b-input-number-handle-hover-color: #3c89e8;\n --b-input-number-hover-bg: #141414;\n --b-input-number-hover-border-color: #3c89e8;\n --b-input-number-warning-active-shadow: 0 0 0 2px rgba(209, 163, 0, 0.1);\n --b-input-number-border-color: #424242;\n --b-input-number-bg: #141414;\n --b-input-number-color: rgba(255, 255, 255, 0.88);\n --b-input-number-placeholder-color: rgba(255, 255, 255, 0.25);\n --b-input-number-disabled-bg: rgba(255, 255, 255, 0.08);\n --b-input-number-disabled-color: rgba(255, 255, 255, 0.25);\n --b-input-number-error-border-color: #dc3838;\n --b-input-number-error-hover-border-color: #e86e6e;\n --b-input-number-warning-border-color: #d1a300;\n --b-input-number-warning-hover-border-color: #e8c631;\n --b-input-number-filled-bg: rgba(255, 255, 255, 0.08);\n --b-input-number-filled-hover-bg: rgba(255, 255, 255, 0.12);\n}\n\n@media (prefers-color-scheme: dark) {\n [data-prefers-color='system'] .b-input-number {\n --b-input-number-active-bg: #141414;\n --b-input-number-active-border-color: #1668dc;\n --b-input-number-active-shadow: 0 0 0 2px rgba(22, 104, 220, 0.15);\n --b-input-number-addon-bg: rgba(255, 255, 255, 0.04);\n --b-input-number-error-active-shadow: 0 0 0 2px rgba(220, 56, 56, 0.1);\n --b-input-number-filled-handle-bg: rgba(255, 255, 255, 0.12);\n --b-input-number-handle-active-bg: rgba(255, 255, 255, 0.04);\n --b-input-number-handle-bg: #1f1f1f;\n --b-input-number-handle-border-color: #424242;\n --b-input-number-handle-hover-color: #3c89e8;\n --b-input-number-hover-bg: #141414;\n --b-input-number-hover-border-color: #3c89e8;\n --b-input-number-warning-active-shadow: 0 0 0 2px rgba(209, 163, 0, 0.1);\n --b-input-number-border-color: #424242;\n --b-input-number-bg: #141414;\n --b-input-number-color: rgba(255, 255, 255, 0.88);\n --b-input-number-placeholder-color: rgba(255, 255, 255, 0.25);\n --b-input-number-disabled-bg: rgba(255, 255, 255, 0.08);\n --b-input-number-disabled-color: rgba(255, 255, 255, 0.25);\n --b-input-number-error-border-color: #dc3838;\n --b-input-number-error-hover-border-color: #e86e6e;\n --b-input-number-warning-border-color: #d1a300;\n --b-input-number-warning-hover-border-color: #e8c631;\n --b-input-number-filled-bg: rgba(255, 255, 255, 0.08);\n --b-input-number-filled-hover-bg: rgba(255, 255, 255, 0.12);\n }\n}\n\n@media (prefers-reduced-motion: reduce) {\n .b-input-number__wrapper,\n .b-input-number__handler-wrap,\n .b-input-number__handler {\n transition: none;\n }\n}\n</style>\n"],"mappings":"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"}
|
package/dist/design-system122.js
CHANGED
|
@@ -1,8 +1,9 @@
|
|
|
1
|
-
import e from "./design-
|
|
1
|
+
import e from "./design-system14.js";
|
|
2
|
+
import t from "./design-system120.js";
|
|
2
3
|
/* empty css */
|
|
3
|
-
//#region src/components/
|
|
4
|
-
var
|
|
4
|
+
//#region src/components/BInputNumber/BInputNumber.vue
|
|
5
|
+
var n = /* @__PURE__ */ e(t, [["__scopeId", "data-v-64ad79ae"]]);
|
|
5
6
|
//#endregion
|
|
6
|
-
export {
|
|
7
|
+
export { n as default };
|
|
7
8
|
|
|
8
9
|
//# sourceMappingURL=design-system122.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"design-system122.js","names":[],"sources":["../src/components/BMasonry/BMasonry.vue"],"sourcesContent":["<script setup lang=\"ts\">\nimport { computed, onBeforeUnmount, onMounted, ref, watch } from 'vue';\nimport type {\n BMasonryBreakpoint,\n BMasonryClassNames,\n BMasonryItem,\n BMasonryLayoutChangePayload,\n BMasonryResponsive,\n BMasonryStyles,\n} from './types';\n\n// ─── Props ────────────────────────────────────────────────────────────────────\n\nconst {\n columns = 3,\n // eslint-disable-next-line vue/require-valid-default-prop\n gutter = 0,\n items = [],\n fresh = false,\n classNames,\n styles,\n} = defineProps<{\n /**\n * Number of columns. Accepts a fixed number or a breakpoint map.\n * @example 3\n * @example { xs: 1, sm: 2, md: 3, lg: 4 }\n * @default 3\n */\n columns?: BMasonryResponsive;\n\n /**\n * Gap between items in pixels. Accepts a fixed value, a [colGap, rowGap] tuple,\n * or a breakpoint map for responsive gaps.\n * @example 16\n * @example [16, 8]\n * @example { xs: 8, md: 16 }\n * @default 0\n */\n gutter?: BMasonryResponsive | [BMasonryResponsive, BMasonryResponsive];\n\n /**\n * Array of masonry items to render.\n * @default []\n */\n items?: BMasonryItem[];\n\n /**\n * When true, observe every item's size so the layout re-flows when children resize.\n * Requires ResizeObserver support; degrades gracefully when unavailable.\n * @default false\n */\n fresh?: boolean;\n\n /**\n * Customize CSS classes on semantic DOM elements (`root`, `column`, `item`).\n * Can be a plain object or a per-item function `(item, columnIndex) => classes`.\n */\n classNames?: BMasonryClassNames;\n\n /**\n * Customize inline styles on semantic DOM elements (`root`, `column`, `item`).\n * Can be a plain object or a per-item function `(item, columnIndex) => styles`.\n */\n styles?: BMasonryStyles;\n}>();\n\n// ─── Emits ────────────────────────────────────────────────────────────────────\n\nconst emit = defineEmits<{\n /**\n * Fires after each layout recalculation with the resolved column count and\n * the column assignment map (item key → 0-based column index).\n */\n layoutChange: [payload: BMasonryLayoutChangePayload];\n}>();\n\n// ─── Slots ────────────────────────────────────────────────────────────────────\n\ndefineSlots<{\n /**\n * Custom rendering for each item. Receives `{ item: BMasonryItem, index: number, column: number }`.\n */\n item?: (props: { item: BMasonryItem; index: number; column: number }) => unknown;\n\n /**\n * Default slot used when no `items` prop is provided — raw child nodes are\n * distributed across columns automatically.\n */\n default?: (props: Record<string, never>) => unknown;\n}>();\n\n// ─── Responsive helpers ───────────────────────────────────────────────────────\n\nconst BREAKPOINTS: Record<BMasonryBreakpoint, number> = {\n xs: 0,\n sm: 576,\n md: 768,\n lg: 992,\n xl: 1200,\n xxl: 1600,\n};\n\nfunction resolveResponsive(value: BMasonryResponsive, width: number): number {\n if (typeof value === 'number') return Math.max(1, value);\n\n // Breakpoint map — pick the largest breakpoint that still fits\n const keys = (Object.keys(BREAKPOINTS) as BMasonryBreakpoint[]).sort(\n (a, b) => BREAKPOINTS[b] - BREAKPOINTS[a],\n );\n\n for (const bp of keys) {\n if (width >= BREAKPOINTS[bp] && value[bp] !== undefined) {\n return Math.max(1, value[bp]!);\n }\n }\n // Fallback to smallest defined value\n const smallest = (Object.keys(value) as BMasonryBreakpoint[]).sort(\n (a, b) => BREAKPOINTS[a] - BREAKPOINTS[b],\n )[0];\n return smallest ? Math.max(1, value[smallest]!) : 1;\n}\n\n// ─── Container width tracking ─────────────────────────────────────────────────\n\nconst rootEl = ref<HTMLElement | null>(null);\nconst containerWidth = ref(0);\n\nlet containerObserver: ResizeObserver | null = null;\n\nfunction updateWidth() {\n if (rootEl.value) {\n containerWidth.value = rootEl.value.offsetWidth;\n }\n}\n\n// ─── Item height tracking (fresh mode) ────────────────────────────────────────\n\nconst itemHeights = ref<Record<string | number, number>>({});\nlet itemObserver: ResizeObserver | null = null;\nconst itemEls = ref<Map<string | number, Element>>(new Map());\n\nfunction registerItemEl(key: string | number, el: Element | null) {\n if (el) {\n itemEls.value.set(key, el);\n if (fresh && itemObserver) {\n itemObserver.observe(el);\n }\n } else {\n const old = itemEls.value.get(key);\n if (old && itemObserver) itemObserver.unobserve(old);\n itemEls.value.delete(key);\n const next = { ...itemHeights.value };\n delete next[key];\n itemHeights.value = next;\n }\n}\n\nfunction setupItemObserver() {\n if (!fresh || typeof ResizeObserver === 'undefined') return;\n itemObserver = new ResizeObserver((entries) => {\n let changed = false;\n for (const entry of entries) {\n const el = entry.target as HTMLElement;\n const key = el.dataset.masonryKey;\n if (key !== undefined) {\n const h = entry.contentRect.height;\n if (itemHeights.value[key] !== h) {\n itemHeights.value = { ...itemHeights.value, [key]: h };\n changed = true;\n }\n }\n }\n if (changed) {\n // trigger layout recompute (handled reactively via computed)\n }\n });\n // Observe any already-mounted elements\n itemEls.value.forEach((el) => itemObserver!.observe(el));\n}\n\n// ─── Core layout algorithm ────────────────────────────────────────────────────\n\nconst resolvedColumns = computed(() => resolveResponsive(columns, containerWidth.value));\n\nconst resolvedGutter = computed<[number, number]>(() => {\n const g = gutter;\n if (Array.isArray(g)) {\n const colGap = resolveResponsive(g[0] as BMasonryResponsive, containerWidth.value);\n const rowGap = resolveResponsive(g[1] as BMasonryResponsive, containerWidth.value);\n return [colGap, rowGap];\n }\n const v = resolveResponsive(g as BMasonryResponsive, containerWidth.value);\n return [v, v];\n});\n\n/** Distribute items across columns using the \"shortest column first\" strategy. */\nconst columnBuckets = computed<{ item: BMasonryItem; originalIndex: number }[][]>(() => {\n const cols = resolvedColumns.value;\n const buckets: { item: BMasonryItem; originalIndex: number }[][] = Array.from(\n { length: cols },\n () => [],\n );\n const heights = Array<number>(cols).fill(0);\n const [, rowGap] = resolvedGutter.value;\n\n for (let i = 0; i < items.length; i++) {\n const item = items[i];\n let targetCol: number;\n\n if (item.column !== undefined) {\n // Pinned column (1-based → 0-based, clamped)\n targetCol = Math.max(0, Math.min(cols - 1, item.column - 1));\n } else {\n // Shortest column\n targetCol = heights.indexOf(Math.min(...heights));\n }\n\n buckets[targetCol].push({ item, originalIndex: i });\n const h = itemHeights.value[item.key] ?? item.height ?? 0;\n heights[targetCol] += h + (buckets[targetCol].length > 1 ? rowGap : 0);\n }\n\n return buckets;\n});\n\nconst layoutColumnMap = computed(() => {\n const cols = resolvedColumns.value;\n const map: Record<string | number, number> = {};\n for (let i = 0; i < items.length; i++) {\n const item = items[i];\n const bucket = columnBuckets.value.findIndex((b) =>\n b.some((entry) => entry.item.key === item.key),\n );\n if (bucket >= 0) map[item.key] = bucket;\n }\n return { columns: cols, columnMap: map };\n});\n\nwatch(layoutColumnMap, (val) => {\n emit('layoutChange', val);\n}, { immediate: true });\n\n// ─── CSS class/style helpers ──────────────────────────────────────────────────\n\nfunction getItemClasses(item: BMasonryItem, columnIndex: number) {\n const base = ['b-masonry__item'];\n if (!classNames) return base;\n\n if (typeof classNames === 'function') {\n const extra = classNames(item, columnIndex);\n if (extra) base.push(...(Array.isArray(extra) ? extra : [extra as string]));\n } else if (typeof classNames.item === 'function') {\n const extra = classNames.item(item, columnIndex);\n if (extra) base.push(...(Array.isArray(extra) ? extra : [extra as string]));\n } else if (typeof classNames.item === 'string') {\n base.push(classNames.item);\n }\n return base;\n}\n\nfunction getItemStyles(item: BMasonryItem, columnIndex: number): Record<string, string> {\n if (!styles) return {};\n if (typeof styles === 'function') return styles(item, columnIndex) ?? {};\n if (typeof styles.item === 'function') return styles.item(item, columnIndex) ?? {};\n if (styles.item && typeof styles.item === 'object') return styles.item as Record<string, string>;\n return {};\n}\n\nfunction getColumnClasses(_colIndex: number): string[] {\n const base = ['b-masonry__column'];\n if (!classNames || typeof classNames === 'function') return base;\n if (classNames.column) base.push(classNames.column);\n return base;\n}\n\nfunction getColumnStyles(_colIndex: number): Record<string, string> {\n if (!styles || typeof styles === 'function') return {};\n return (styles.column as Record<string, string>) ?? {};\n}\n\nconst rootClasses = computed(() => {\n const base = ['b-masonry'];\n if (!classNames || typeof classNames === 'function') return base;\n if (classNames.root) base.push(classNames.root);\n return base;\n});\n\nconst rootStyles = computed(() => {\n const base: Record<string, string> = {\n '--b-masonry-columns': String(resolvedColumns.value),\n '--b-masonry-col-gap': `${resolvedGutter.value[0]}px`,\n '--b-masonry-row-gap': `${resolvedGutter.value[1]}px`,\n };\n if (styles && typeof styles === 'object' && !('root' in styles) === false) {\n const s = styles as { root?: Record<string, string> };\n if (s.root) Object.assign(base, s.root);\n }\n return base;\n});\n\n// ─── Lifecycle ────────────────────────────────────────────────────────────────\n\nonMounted(() => {\n updateWidth();\n\n if (typeof ResizeObserver !== 'undefined') {\n containerObserver = new ResizeObserver(() => updateWidth());\n if (rootEl.value) containerObserver.observe(rootEl.value);\n } else {\n // SSR / no ResizeObserver: listen to window resize\n window.addEventListener('resize', updateWidth);\n }\n\n if (fresh) setupItemObserver();\n});\n\nwatch(\n () => fresh,\n (enabled) => {\n if (enabled) {\n setupItemObserver();\n } else {\n itemObserver?.disconnect();\n itemObserver = null;\n itemHeights.value = {};\n }\n },\n);\n\nonBeforeUnmount(() => {\n containerObserver?.disconnect();\n itemObserver?.disconnect();\n window.removeEventListener('resize', updateWidth);\n});\n</script>\n\n<template>\n <!-- role=\"list\" lets screen readers announce item count -->\n <div\n ref=\"rootEl\"\n :class=\"rootClasses\"\n :style=\"rootStyles\"\n role=\"list\"\n aria-label=\"Masonry layout\"\n >\n <!-- Column-based layout: each column is a flex column -->\n <div\n v-for=\"(bucket, colIdx) in columnBuckets\"\n :key=\"colIdx\"\n :class=\"getColumnClasses(colIdx)\"\n :style=\"getColumnStyles(colIdx)\"\n role=\"presentation\"\n >\n <div\n v-for=\"{ item, originalIndex } in bucket\"\n :key=\"item.key\"\n :ref=\"(el) => registerItemEl(item.key, el as Element | null)\"\n :data-masonry-key=\"item.key\"\n :class=\"getItemClasses(item, colIdx)\"\n :style=\"getItemStyles(item, colIdx)\"\n role=\"listitem\"\n >\n <!-- Named item slot (prop-driven items) -->\n <slot v-if=\"$slots.item\" name=\"item\" :item=\"item\" :index=\"originalIndex\" :column=\"colIdx\" />\n <!-- Default slot fallback when using raw children (no items prop) -->\n <template v-else>\n <slot />\n </template>\n </div>\n </div>\n </div>\n</template>\n\n<style>\n/* ─────────────────────────────────────────────────────────────────────────────\n BMasonry — CSS custom properties (scoped to component root)\n ───────────────────────────────────────────────────────────────────────────── */\n.b-masonry {\n /* Layout tokens */\n --b-masonry-columns: 3;\n --b-masonry-col-gap: 0px;\n --b-masonry-row-gap: 0px;\n\n /* Item tokens */\n --b-masonry-item-transition-duration: 200ms;\n --b-masonry-item-transition-timing: ease;\n --b-masonry-item-border-radius: 0px;\n --b-masonry-item-bg: transparent;\n\n /* ── Layout ── */\n display: flex;\n flex-direction: row;\n align-items: flex-start;\n gap: var(--b-masonry-col-gap);\n width: 100%;\n box-sizing: border-box;\n}\n\n/* ── Column ── */\n.b-masonry__column {\n display: flex;\n flex: 1 1 0;\n min-width: 0;\n flex-direction: column;\n gap: var(--b-masonry-row-gap);\n}\n\n/* ── Item ── */\n.b-masonry__item {\n width: 100%;\n box-sizing: border-box;\n background: var(--b-masonry-item-bg);\n border-radius: var(--b-masonry-item-border-radius);\n transition:\n transform var(--b-masonry-item-transition-duration) var(--b-masonry-item-transition-timing),\n opacity var(--b-masonry-item-transition-duration) var(--b-masonry-item-transition-timing);\n}\n\n/* ── Dark mode ── */\n[data-prefers-color='dark'] .b-masonry {\n /* Tokens that shift in dark mode — override as needed by the consumer */\n --b-masonry-item-bg: transparent;\n}\n\n@media (prefers-color-scheme: dark) {\n [data-prefers-color='system'] .b-masonry {\n /* Tokens that shift in dark mode — override as needed by the consumer */\n --b-masonry-item-bg: transparent;\n }\n}\n\n/* ── Reduced motion ── */\n@media (prefers-reduced-motion: reduce) {\n .b-masonry {\n --b-masonry-item-transition-duration: 0ms;\n }\n}\n</style>\n"],"mappings":""}
|
|
1
|
+
{"version":3,"file":"design-system122.js","names":[],"sources":["../src/components/BInputNumber/BInputNumber.vue"],"sourcesContent":["<script setup lang=\"ts\">\nimport { BInputStatus, BInputVariant } from '@/components/BInput/types.ts';\nimport { useComponentId } from '@/composables/useComponentId.ts';\nimport { BCommonSize } from '@/types.ts';\nimport { computed, ref, useSlots, watch } from 'vue';\nimport type { BInputNumberFocusOptions, BInputNumberStepInfo } from './types.ts';\n\ndefineOptions({ inheritAttrs: false });\n\nconst slots = useSlots();\n\nconst {\n size = BCommonSize.Medium,\n variant = BInputVariant.Outlined,\n min = Number.MIN_SAFE_INTEGER,\n max = Number.MAX_SAFE_INTEGER,\n step = 1,\n disabled = false,\n readOnly = false,\n controls = true,\n keyboard = true,\n changeOnBlur = true,\n changeOnWheel = false,\n placeholder,\n id,\n precision,\n formatter,\n parser,\n decimalSeparator,\n stringMode = false,\n status,\n} = defineProps<{\n /** The size of the input number. */\n size?: `${BCommonSize}`;\n /** Visual variant of the input number. */\n variant?: `${BInputVariant}`;\n /** Validation status. */\n status?: `${BInputStatus}`;\n /** Minimum value allowed. */\n min?: number;\n /** Maximum value allowed. */\n max?: number;\n /** Increment/decrement step amount. */\n step?: number;\n /** Whether the input number is disabled. */\n disabled?: boolean;\n /** Whether the input number is read-only. */\n readOnly?: boolean;\n /** Whether to show +/- controls. */\n controls?: boolean;\n /** Whether keyboard up/down changes value. */\n keyboard?: boolean;\n /** Whether to trigger change on blur (e.g. reset out-of-range). */\n changeOnBlur?: boolean;\n /** Whether mouse wheel changes value. */\n changeOnWheel?: boolean;\n /** Placeholder text. */\n placeholder?: string;\n /** HTML id attribute. */\n id?: string;\n /** Decimal precision for display. */\n precision?: number;\n /** Format the displayed value. */\n formatter?: (value: string | number) => string;\n /** Parse the formatted value back to a number. */\n parser?: (displayValue: string) => string;\n /** Custom decimal separator character. */\n decimalSeparator?: string;\n /** Use string mode for high-precision decimals. */\n stringMode?: boolean;\n}>();\n\nconst emit = defineEmits<{\n /** Fired when value changes. */\n change: [value: number | null];\n /** Fired when Enter key is pressed. */\n pressEnter: [event: KeyboardEvent];\n /** Fired on step (button, keyboard, or wheel). */\n step: [value: number | null, info: BInputNumberStepInfo];\n /** Fired on input focus. */\n focus: [event: FocusEvent];\n /** Fired on input blur. */\n blur: [event: FocusEvent];\n}>();\n\nconst model = defineModel<number | null>({ default: null });\n\nconst { componentUID } = useComponentId();\nconst inputId = computed(() => id ?? `b-input-number-${componentUID.value}`);\n\nconst inputRef = ref<HTMLInputElement | null>(null);\nconst isFocused = ref(false);\nconst displayValue = ref('');\n\nconst hasPrefix = computed(() => !!slots.prefix);\nconst hasSuffix = computed(() => !!slots.suffix);\n\nconst isUpDisabled = computed(() => {\n if (disabled || readOnly) return true;\n if (model.value === null) return false;\n return model.value >= max;\n});\n\nconst isDownDisabled = computed(() => {\n if (disabled || readOnly) return true;\n if (model.value === null) return false;\n return model.value <= min;\n});\n\nfunction toFixedPrecision(val: number): number {\n if (precision !== undefined) {\n return parseFloat(val.toFixed(precision));\n }\n const stepStr = String(step);\n const stepDecimals = stepStr.includes('.') ? stepStr.split('.')[1].length : 0;\n if (stepDecimals > 0) {\n return parseFloat(val.toFixed(stepDecimals));\n }\n return val;\n}\n\nfunction clamp(val: number): number {\n return Math.min(max, Math.max(min, val));\n}\n\nfunction formatValue(val: number | null): string {\n if (val === null) return '';\n let str: string;\n if (precision !== undefined) {\n str = val.toFixed(precision);\n } else {\n str = String(val);\n }\n if (decimalSeparator) {\n str = str.replace('.', decimalSeparator);\n }\n if (formatter) {\n return formatter(stringMode ? str : val);\n }\n return str;\n}\n\nfunction parseInput(input: string): number | null {\n if (!input.trim()) return null;\n let parsed = input;\n if (parser) {\n parsed = parser(input);\n } else if (decimalSeparator) {\n parsed = parsed.replace(decimalSeparator, '.');\n }\n const num = Number(parsed);\n if (isNaN(num)) return model.value;\n return num;\n}\n\nfunction syncDisplay() {\n displayValue.value = formatValue(model.value);\n}\n\nfunction updateValue(newVal: number | null, triggerChange = true) {\n if (newVal !== null) {\n newVal = toFixedPrecision(clamp(newVal));\n }\n const changed = newVal !== model.value;\n model.value = newVal;\n syncDisplay();\n if (changed && triggerChange) {\n emit('change', newVal);\n }\n}\n\nfunction stepValue(direction: 'up' | 'down') {\n if (disabled || readOnly) return;\n const current = model.value ?? 0;\n const offset = direction === 'up' ? step : -step;\n const next = toFixedPrecision(current + offset);\n const clamped = clamp(next);\n updateValue(clamped);\n emit('step', clamped, { offset: step, type: direction });\n}\n\nconst handleInput = (e: Event) => {\n const target = e.target as HTMLInputElement;\n displayValue.value = target.value;\n};\n\nconst handleKeyDown = (e: KeyboardEvent) => {\n if (e.key === 'Enter') {\n commitValue();\n emit('pressEnter', e);\n }\n if (!keyboard) return;\n if (e.key === 'ArrowUp') {\n e.preventDefault();\n stepValue('up');\n } else if (e.key === 'ArrowDown') {\n e.preventDefault();\n stepValue('down');\n }\n};\n\nconst handleFocus = (e: FocusEvent) => {\n isFocused.value = true;\n emit('focus', e);\n};\n\nconst handleBlur = (e: FocusEvent) => {\n isFocused.value = false;\n if (changeOnBlur) {\n commitValue();\n }\n emit('blur', e);\n};\n\nconst handleWheel = (e: WheelEvent) => {\n if (!changeOnWheel || disabled || readOnly || !isFocused.value) return;\n e.preventDefault();\n if (e.deltaY < 0) {\n stepValue('up');\n } else if (e.deltaY > 0) {\n stepValue('down');\n }\n};\n\nfunction commitValue() {\n const parsed = parseInput(displayValue.value);\n if (parsed === null) {\n updateValue(null);\n } else {\n updateValue(parsed);\n }\n}\n\nconst focus = (options?: BInputNumberFocusOptions) => {\n inputRef.value?.focus({ preventScroll: options?.preventScroll });\n if (options?.cursor && inputRef.value) {\n const len = inputRef.value.value.length;\n switch (options.cursor) {\n case 'start':\n inputRef.value.setSelectionRange(0, 0);\n break;\n case 'end':\n inputRef.value.setSelectionRange(len, len);\n break;\n case 'all':\n inputRef.value.setSelectionRange(0, len);\n break;\n }\n }\n};\n\nconst blur = () => {\n inputRef.value?.blur();\n};\n\nwatch(\n () => model.value,\n () => {\n if (!isFocused.value) {\n syncDisplay();\n }\n },\n { immediate: true },\n);\n\ndefineExpose({ focus, blur });\n</script>\n\n<template>\n <span\n class=\"b-input-number\"\n :class=\"[\n `b-input-number--${size}`,\n `b-input-number--${variant}`,\n {\n 'b-input-number--focused': isFocused,\n 'b-input-number--disabled': disabled,\n 'b-input-number--readonly': readOnly,\n 'b-input-number--error': status === BInputStatus.Error,\n 'b-input-number--warning': status === BInputStatus.Warning,\n 'b-input-number--has-controls': controls,\n },\n ]\"\n >\n <span class=\"b-input-number__wrapper\">\n <span v-if=\"hasPrefix\" class=\"b-input-number__prefix\" aria-hidden=\"true\">\n <slot name=\"prefix\" />\n </span>\n\n <input\n :id=\"inputId\"\n ref=\"inputRef\"\n :value=\"displayValue\"\n type=\"text\"\n inputmode=\"decimal\"\n role=\"spinbutton\"\n :aria-valuenow=\"model ?? undefined\"\n :aria-valuemin=\"min !== Number.MIN_SAFE_INTEGER ? min : undefined\"\n :aria-valuemax=\"max !== Number.MAX_SAFE_INTEGER ? max : undefined\"\n :aria-invalid=\"status === BInputStatus.Error ? true : undefined\"\n :placeholder=\"placeholder\"\n :disabled=\"disabled\"\n :readonly=\"readOnly\"\n class=\"b-input-number__input\"\n @input=\"handleInput\"\n @keydown=\"handleKeyDown\"\n @focus=\"handleFocus\"\n @blur=\"handleBlur\"\n @wheel=\"handleWheel\"\n />\n\n <span v-if=\"hasSuffix\" class=\"b-input-number__suffix\" aria-hidden=\"true\">\n <slot name=\"suffix\" />\n </span>\n\n <span v-if=\"controls\" class=\"b-input-number__handler-wrap\" aria-hidden=\"true\">\n <span\n class=\"b-input-number__handler b-input-number__handler--up\"\n :class=\"{ 'b-input-number__handler--disabled': isUpDisabled }\"\n role=\"button\"\n tabindex=\"-1\"\n aria-label=\"Increase value\"\n :aria-disabled=\"isUpDisabled\"\n @mousedown.prevent=\"!isUpDisabled && stepValue('up')\"\n >\n <svg\n viewBox=\"0 0 1024 1024\"\n width=\"1em\"\n height=\"1em\"\n fill=\"currentColor\"\n aria-hidden=\"true\"\n >\n <path\n d=\"M890.5 755.3L537.9 269.2c-12.8-17.6-39-17.6-51.7 0L133.5 755.3A8 8 0 00140 768h286c2.1 0 4.2-.8 5.7-2.3l70.3-70.3 70.3 70.3c1.5 1.5 3.5 2.3 5.7 2.3h286c6.5 0 10.3-7.4 6.5-12.7z\"\n />\n </svg>\n </span>\n <span\n class=\"b-input-number__handler b-input-number__handler--down\"\n :class=\"{ 'b-input-number__handler--disabled': isDownDisabled }\"\n role=\"button\"\n tabindex=\"-1\"\n aria-label=\"Decrease value\"\n :aria-disabled=\"isDownDisabled\"\n @mousedown.prevent=\"!isDownDisabled && stepValue('down')\"\n >\n <svg\n viewBox=\"0 0 1024 1024\"\n width=\"1em\"\n height=\"1em\"\n fill=\"currentColor\"\n aria-hidden=\"true\"\n >\n <path\n d=\"M884 256h-75c-5.1 0-9.9 2.5-12.9 6.6L512 654.2 227.9 262.6c-3-4.1-7.8-6.6-12.9-6.6h-75c-6.5 0-10.3 7.4-6.5 12.7l352.6 486.1c12.8 17.6 39 17.6 51.7 0l352.6-486.1c3.9-5.3.1-12.7-6.4-12.7z\"\n />\n </svg>\n </span>\n </span>\n </span>\n </span>\n</template>\n\n<style scoped>\n.b-input-number {\n --b-input-number-active-bg: #ffffff;\n --b-input-number-active-border-color: #1677ff;\n --b-input-number-active-shadow: 0 0 0 2px rgba(5, 145, 255, 0.1);\n --b-input-number-addon-bg: rgba(0, 0, 0, 0.02);\n --b-input-number-control-width: 90px;\n --b-input-number-error-active-shadow: 0 0 0 2px rgba(255, 38, 5, 0.06);\n --b-input-number-filled-handle-bg: #f0f0f0;\n --b-input-number-handle-active-bg: rgba(0, 0, 0, 0.02);\n --b-input-number-handle-bg: #ffffff;\n --b-input-number-handle-border-color: #d9d9d9;\n --b-input-number-handle-font-size: 7px;\n --b-input-number-handle-hover-color: #1677ff;\n --b-input-number-handle-width: 22px;\n --b-input-number-hover-bg: #ffffff;\n --b-input-number-hover-border-color: #4096ff;\n --b-input-number-font-size: 14px;\n --b-input-number-font-size-lg: 16px;\n --b-input-number-font-size-sm: 14px;\n --b-input-number-padding-block: 4px;\n --b-input-number-padding-block-lg: 7px;\n --b-input-number-padding-block-sm: 0px;\n --b-input-number-padding-inline: 11px;\n --b-input-number-padding-inline-lg: 11px;\n --b-input-number-padding-inline-sm: 7px;\n --b-input-number-warning-active-shadow: 0 0 0 2px rgba(255, 215, 5, 0.1);\n --b-input-number-border-color: #d9d9d9;\n --b-input-number-bg: #ffffff;\n --b-input-number-color: rgba(0, 0, 0, 0.88);\n --b-input-number-placeholder-color: rgba(0, 0, 0, 0.25);\n --b-input-number-border-radius: 6px;\n --b-input-number-disabled-bg: rgba(0, 0, 0, 0.04);\n --b-input-number-disabled-color: rgba(0, 0, 0, 0.25);\n --b-input-number-error-border-color: #ff4d4f;\n --b-input-number-error-hover-border-color: #ff7875;\n --b-input-number-warning-border-color: #faad14;\n --b-input-number-warning-hover-border-color: #ffc53d;\n --b-input-number-filled-bg: rgba(0, 0, 0, 0.04);\n --b-input-number-filled-hover-bg: rgba(0, 0, 0, 0.04);\n\n display: inline-flex;\n align-items: stretch;\n width: var(--b-input-number-control-width);\n font-size: var(--b-input-number-font-size);\n color: var(--b-input-number-color);\n line-height: 1.5714;\n}\n\n.b-input-number--lg {\n font-size: var(--b-input-number-font-size-lg);\n}\n\n.b-input-number--sm {\n font-size: var(--b-input-number-font-size-sm);\n}\n\n.b-input-number__wrapper {\n display: inline-flex;\n align-items: center;\n flex: 1;\n min-width: 0;\n position: relative;\n transition: all 0.2s;\n}\n\n/* Outlined */\n.b-input-number--outlined .b-input-number__wrapper {\n background: var(--b-input-number-bg);\n border: 1px solid var(--b-input-number-border-color);\n border-radius: var(--b-input-number-border-radius);\n}\n\n.b-input-number--outlined:not(.b-input-number--disabled):hover .b-input-number__wrapper {\n border-color: var(--b-input-number-hover-border-color);\n background: var(--b-input-number-hover-bg);\n}\n\n.b-input-number--outlined.b-input-number--focused .b-input-number__wrapper {\n border-color: var(--b-input-number-active-border-color);\n background: var(--b-input-number-active-bg);\n box-shadow: var(--b-input-number-active-shadow);\n}\n\n/* Filled */\n.b-input-number--filled .b-input-number__wrapper {\n background: var(--b-input-number-filled-bg);\n border: 1px solid transparent;\n border-radius: var(--b-input-number-border-radius);\n}\n\n.b-input-number--filled:not(.b-input-number--disabled):hover .b-input-number__wrapper {\n background: var(--b-input-number-filled-hover-bg);\n}\n\n.b-input-number--filled.b-input-number--focused .b-input-number__wrapper {\n background: var(--b-input-number-active-bg);\n border-color: var(--b-input-number-active-border-color);\n box-shadow: var(--b-input-number-active-shadow);\n}\n\n/* Borderless */\n.b-input-number--borderless .b-input-number__wrapper {\n background: transparent;\n border: 1px solid transparent;\n border-radius: var(--b-input-number-border-radius);\n}\n\n/* Underlined */\n.b-input-number--underlined .b-input-number__wrapper {\n background: transparent;\n border: none;\n border-bottom: 1px solid var(--b-input-number-border-color);\n border-radius: 0;\n}\n\n.b-input-number--underlined:not(.b-input-number--disabled):hover .b-input-number__wrapper {\n border-bottom-color: var(--b-input-number-hover-border-color);\n}\n\n.b-input-number--underlined.b-input-number--focused .b-input-number__wrapper {\n border-bottom-color: var(--b-input-number-active-border-color);\n box-shadow: 0 1px 0 0 var(--b-input-number-active-border-color);\n}\n\n/* Error */\n.b-input-number--error.b-input-number--outlined .b-input-number__wrapper {\n border-color: var(--b-input-number-error-border-color);\n}\n\n.b-input-number--error.b-input-number--outlined:not(.b-input-number--disabled):hover\n .b-input-number__wrapper {\n border-color: var(--b-input-number-error-hover-border-color);\n}\n\n.b-input-number--error.b-input-number--outlined.b-input-number--focused .b-input-number__wrapper,\n.b-input-number--error.b-input-number--filled.b-input-number--focused .b-input-number__wrapper {\n border-color: var(--b-input-number-error-border-color);\n box-shadow: var(--b-input-number-error-active-shadow);\n}\n\n.b-input-number--error.b-input-number--underlined .b-input-number__wrapper {\n border-bottom-color: var(--b-input-number-error-border-color);\n}\n\n.b-input-number--error.b-input-number--underlined.b-input-number--focused .b-input-number__wrapper {\n border-bottom-color: var(--b-input-number-error-border-color);\n box-shadow: 0 1px 0 0 var(--b-input-number-error-border-color);\n}\n\n/* Warning */\n.b-input-number--warning.b-input-number--outlined .b-input-number__wrapper {\n border-color: var(--b-input-number-warning-border-color);\n}\n\n.b-input-number--warning.b-input-number--outlined:not(.b-input-number--disabled):hover\n .b-input-number__wrapper {\n border-color: var(--b-input-number-warning-hover-border-color);\n}\n\n.b-input-number--warning.b-input-number--outlined.b-input-number--focused .b-input-number__wrapper,\n.b-input-number--warning.b-input-number--filled.b-input-number--focused .b-input-number__wrapper {\n border-color: var(--b-input-number-warning-border-color);\n box-shadow: var(--b-input-number-warning-active-shadow);\n}\n\n.b-input-number--warning.b-input-number--underlined .b-input-number__wrapper {\n border-bottom-color: var(--b-input-number-warning-border-color);\n}\n\n.b-input-number--warning.b-input-number--underlined.b-input-number--focused\n .b-input-number__wrapper {\n border-bottom-color: var(--b-input-number-warning-border-color);\n box-shadow: 0 1px 0 0 var(--b-input-number-warning-border-color);\n}\n\n/* Disabled */\n.b-input-number--disabled .b-input-number__wrapper {\n background: var(--b-input-number-disabled-bg);\n cursor: not-allowed;\n}\n\n.b-input-number--disabled .b-input-number__input {\n color: var(--b-input-number-disabled-color);\n cursor: not-allowed;\n}\n\n/* Input element */\n.b-input-number__input {\n flex: 1;\n min-width: 0;\n width: 100%;\n border: none;\n outline: none;\n background: transparent;\n color: inherit;\n font-size: inherit;\n font-family: inherit;\n line-height: inherit;\n text-align: left;\n}\n\n.b-input-number--md .b-input-number__input {\n padding: var(--b-input-number-padding-block) var(--b-input-number-padding-inline);\n}\n\n.b-input-number--lg .b-input-number__input {\n padding: var(--b-input-number-padding-block-lg) var(--b-input-number-padding-inline-lg);\n}\n\n.b-input-number--sm .b-input-number__input {\n padding: var(--b-input-number-padding-block-sm) var(--b-input-number-padding-inline-sm);\n}\n\n.b-input-number--has-controls .b-input-number__input {\n padding-right: calc(var(--b-input-number-handle-width) + 2px);\n}\n\n.b-input-number__input::placeholder {\n color: var(--b-input-number-placeholder-color);\n}\n\n/* Prefix & Suffix */\n.b-input-number__prefix,\n.b-input-number__suffix {\n display: inline-flex;\n align-items: center;\n color: var(--b-input-number-color);\n flex-shrink: 0;\n}\n\n.b-input-number__prefix {\n margin-left: var(--b-input-number-padding-inline);\n}\n\n.b-input-number__suffix {\n margin-right: var(--b-input-number-padding-inline);\n}\n\n.b-input-number__prefix ~ .b-input-number__input {\n padding-left: 4px;\n}\n\n/* Handler (step buttons) */\n.b-input-number__handler-wrap {\n position: absolute;\n top: 0;\n right: 0;\n display: flex;\n flex-direction: column;\n height: 100%;\n width: var(--b-input-number-handle-width);\n border-left: 1px solid var(--b-input-number-handle-border-color);\n border-radius: 0 var(--b-input-number-border-radius) var(--b-input-number-border-radius) 0;\n overflow: hidden;\n opacity: 0;\n transition: opacity 0.2s;\n}\n\n.b-input-number:hover .b-input-number__handler-wrap,\n.b-input-number--focused .b-input-number__handler-wrap {\n opacity: 1;\n}\n\n.b-input-number__handler {\n display: flex;\n align-items: center;\n justify-content: center;\n flex: 1;\n cursor: pointer;\n background: var(--b-input-number-handle-bg);\n font-size: var(--b-input-number-handle-font-size);\n color: rgba(0, 0, 0, 0.45);\n user-select: none;\n transition:\n color 0.2s,\n background 0.2s;\n}\n\n.b-input-number__handler:hover {\n color: var(--b-input-number-handle-hover-color);\n background: var(--b-input-number-handle-active-bg);\n}\n\n.b-input-number__handler--up {\n border-bottom: 1px solid var(--b-input-number-handle-border-color);\n}\n\n.b-input-number__handler--disabled {\n cursor: not-allowed;\n opacity: 0.4;\n pointer-events: none;\n}\n\n.b-input-number__handler svg {\n width: 0.5em;\n height: 0.5em;\n}\n\n/* Filled variant handler */\n.b-input-number--filled .b-input-number__handler {\n background: var(--b-input-number-filled-handle-bg);\n}\n\n/* Borderless / underlined: hide handler border */\n.b-input-number--borderless .b-input-number__handler-wrap,\n.b-input-number--underlined .b-input-number__handler-wrap {\n border-left-color: transparent;\n}\n\n/* Dark mode */\n[data-prefers-color='dark'] .b-input-number {\n --b-input-number-active-bg: #141414;\n --b-input-number-active-border-color: #1668dc;\n --b-input-number-active-shadow: 0 0 0 2px rgba(22, 104, 220, 0.15);\n --b-input-number-addon-bg: rgba(255, 255, 255, 0.04);\n --b-input-number-error-active-shadow: 0 0 0 2px rgba(220, 56, 56, 0.1);\n --b-input-number-filled-handle-bg: rgba(255, 255, 255, 0.12);\n --b-input-number-handle-active-bg: rgba(255, 255, 255, 0.04);\n --b-input-number-handle-bg: #1f1f1f;\n --b-input-number-handle-border-color: #424242;\n --b-input-number-handle-hover-color: #3c89e8;\n --b-input-number-hover-bg: #141414;\n --b-input-number-hover-border-color: #3c89e8;\n --b-input-number-warning-active-shadow: 0 0 0 2px rgba(209, 163, 0, 0.1);\n --b-input-number-border-color: #424242;\n --b-input-number-bg: #141414;\n --b-input-number-color: rgba(255, 255, 255, 0.88);\n --b-input-number-placeholder-color: rgba(255, 255, 255, 0.25);\n --b-input-number-disabled-bg: rgba(255, 255, 255, 0.08);\n --b-input-number-disabled-color: rgba(255, 255, 255, 0.25);\n --b-input-number-error-border-color: #dc3838;\n --b-input-number-error-hover-border-color: #e86e6e;\n --b-input-number-warning-border-color: #d1a300;\n --b-input-number-warning-hover-border-color: #e8c631;\n --b-input-number-filled-bg: rgba(255, 255, 255, 0.08);\n --b-input-number-filled-hover-bg: rgba(255, 255, 255, 0.12);\n}\n\n@media (prefers-color-scheme: dark) {\n [data-prefers-color='system'] .b-input-number {\n --b-input-number-active-bg: #141414;\n --b-input-number-active-border-color: #1668dc;\n --b-input-number-active-shadow: 0 0 0 2px rgba(22, 104, 220, 0.15);\n --b-input-number-addon-bg: rgba(255, 255, 255, 0.04);\n --b-input-number-error-active-shadow: 0 0 0 2px rgba(220, 56, 56, 0.1);\n --b-input-number-filled-handle-bg: rgba(255, 255, 255, 0.12);\n --b-input-number-handle-active-bg: rgba(255, 255, 255, 0.04);\n --b-input-number-handle-bg: #1f1f1f;\n --b-input-number-handle-border-color: #424242;\n --b-input-number-handle-hover-color: #3c89e8;\n --b-input-number-hover-bg: #141414;\n --b-input-number-hover-border-color: #3c89e8;\n --b-input-number-warning-active-shadow: 0 0 0 2px rgba(209, 163, 0, 0.1);\n --b-input-number-border-color: #424242;\n --b-input-number-bg: #141414;\n --b-input-number-color: rgba(255, 255, 255, 0.88);\n --b-input-number-placeholder-color: rgba(255, 255, 255, 0.25);\n --b-input-number-disabled-bg: rgba(255, 255, 255, 0.08);\n --b-input-number-disabled-color: rgba(255, 255, 255, 0.25);\n --b-input-number-error-border-color: #dc3838;\n --b-input-number-error-hover-border-color: #e86e6e;\n --b-input-number-warning-border-color: #d1a300;\n --b-input-number-warning-hover-border-color: #e8c631;\n --b-input-number-filled-bg: rgba(255, 255, 255, 0.08);\n --b-input-number-filled-hover-bg: rgba(255, 255, 255, 0.12);\n }\n}\n\n@media (prefers-reduced-motion: reduce) {\n .b-input-number__wrapper,\n .b-input-number__handler-wrap,\n .b-input-number__handler {\n transition: none;\n }\n}\n</style>\n"],"mappings":""}
|