bootstrap-vue-next 0.46.3 → 1.0.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/dist/{BApp-GXR1wS6K.js → BApp-Bg5xEz8H.js} +14 -2
- package/dist/BApp-Bg5xEz8H.js.map +1 -0
- package/dist/{BFormFile-BVrDprWL.js → BFormFile-C2DnrbK7.js} +30 -10
- package/dist/BFormFile-C2DnrbK7.js.map +1 -0
- package/dist/{BFormOtp-C3vmDnzs.js → BFormOtp-ClDACqXM.js} +2 -2
- package/dist/{BFormOtp-C3vmDnzs.js.map → BFormOtp-ClDACqXM.js.map} +1 -1
- package/dist/{BFormRating-AEiF8K8T.js → BFormRating-iKFgSFet.js} +81 -66
- package/dist/BFormRating-iKFgSFet.js.map +1 -0
- package/dist/bootstrap-vue-next.css +28 -22
- package/dist/bootstrap-vue-next.mjs +4 -4
- package/dist/components/BFormFile/useAriaLiveMessage.d.mts +10 -0
- package/dist/components/BFormFile/useAriaLiveMessage.d.ts +10 -0
- package/dist/components/BFormRating/BFormRating.vue.d.mts +3 -3
- package/dist/components/BFormRating/BFormRating.vue.d.ts +3 -3
- package/dist/src/components/BApp/index.mjs +1 -1
- package/dist/src/components/BFormFile/index.mjs +1 -1
- package/dist/src/components/BFormOtp/index.mjs +1 -1
- package/dist/src/components/BFormRating/index.mjs +1 -1
- package/dist/src/components/index.mjs +4 -4
- package/dist/types/ComponentProps.d.mts +3 -3
- package/dist/types/ComponentProps.d.ts +3 -3
- package/dist/types/ComponentSlots.d.mts +1 -1
- package/dist/types/ComponentSlots.d.ts +1 -1
- package/package.json +1 -1
- package/src/components/BFormRating/_form-rating.scss +30 -25
- package/dist/BApp-GXR1wS6K.js.map +0 -1
- package/dist/BFormFile-BVrDprWL.js.map +0 -1
- package/dist/BFormRating-AEiF8K8T.js.map +0 -1
|
@@ -1,3 +1,4 @@
|
|
|
1
|
+
import { S as useToNumber } from "./dist-DKc2ivHS.js";
|
|
1
2
|
import { t as useDefaults } from "./useDefaults-BzP4qZBu.js";
|
|
2
3
|
import { t as useId$1 } from "./useId-Fh-Arhb7.js";
|
|
3
4
|
import { t as useRtl } from "./useRtl-FeLayV4k.js";
|
|
@@ -20,21 +21,12 @@ var _hoisted_2 = [
|
|
|
20
21
|
"value"
|
|
21
22
|
];
|
|
22
23
|
var _hoisted_3 = ["aria-label"];
|
|
23
|
-
var _hoisted_4 = ["
|
|
24
|
-
var _hoisted_5 =
|
|
25
|
-
var _hoisted_6 =
|
|
26
|
-
var _hoisted_7 =
|
|
27
|
-
|
|
28
|
-
|
|
29
|
-
};
|
|
30
|
-
var _hoisted_8 = {
|
|
31
|
-
key: 1,
|
|
32
|
-
d: "M5.354 5.119 7.538.792A.52.52 0 0 1 8 .5c.183 0 .366.097.465.292l2.184 4.327 4.898.696A.54.54 0 0 1 16 6.32a.55.55 0 0 1-.17.445l-3.523 3.356.83 4.73c.078.443-.36.79-.746.592L8 13.187l-4.389 2.256a.5.5 0 0 1-.146.05c-.342.06-.668-.254-.6-.642l.83-4.73L.173 6.765a.55.55 0 0 1-.172-.403.6.6 0 0 1 .085-.302.51.51 0 0 1 .37-.245zM8 12.027a.5.5 0 0 1 .232.056l3.686 1.894-.694-3.957a.56.56 0 0 1 .162-.505l2.907-2.77-4.052-.576a.53.53 0 0 1-.393-.288L8.001 2.223 8 2.226z"
|
|
33
|
-
};
|
|
34
|
-
var _hoisted_9 = {
|
|
35
|
-
key: 2,
|
|
36
|
-
d: "M2.866 14.85c-.078.444.36.791.746.593l4.39-2.256 4.389 2.256c.386.198.824-.149.746-.592l-.83-4.73 3.522-3.356c.33-.314.16-.888-.282-.95l-4.898-.696L8.465.792a.513.513 0 0 0-.927 0L5.354 5.12l-4.898.696c-.441.062-.612.636-.283.95l3.522 3.356-.83 4.73zm4.905-2.767-3.686 1.894.694-3.957a.56.56 0 0 0-.163-.505L1.71 6.745l4.052-.576a.53.53 0 0 0 .393-.288L8 2.223l1.847 3.658a.53.53 0 0 0 .393.288l4.052.575-2.906 2.77a.56.56 0 0 0-.163.506l.694 3.957-3.686-1.894a.5.5 0 0 0-.461 0z"
|
|
37
|
-
};
|
|
24
|
+
var _hoisted_4 = ["d"];
|
|
25
|
+
var _hoisted_5 = ["onClick"];
|
|
26
|
+
var _hoisted_6 = { class: "b-form-rating-item" };
|
|
27
|
+
var _hoisted_7 = ["width", "height"];
|
|
28
|
+
var _hoisted_8 = ["d"];
|
|
29
|
+
var lengthDefault = 5;
|
|
38
30
|
//#endregion
|
|
39
31
|
//#region src/components/BFormRating/BFormRating.vue
|
|
40
32
|
var BFormRating_default = /* @__PURE__ */ defineComponent({
|
|
@@ -79,8 +71,8 @@ var BFormRating_default = /* @__PURE__ */ defineComponent({
|
|
|
79
71
|
type: Boolean,
|
|
80
72
|
default: false
|
|
81
73
|
},
|
|
82
|
-
size: { default:
|
|
83
|
-
|
|
74
|
+
size: { default: void 0 },
|
|
75
|
+
length: { default: lengthDefault },
|
|
84
76
|
variant: { default: void 0 }
|
|
85
77
|
}, {
|
|
86
78
|
"modelValue": { default: 0 },
|
|
@@ -104,40 +96,63 @@ var BFormRating_default = /* @__PURE__ */ defineComponent({
|
|
|
104
96
|
} catch {}
|
|
105
97
|
return isRtl?.value ?? false;
|
|
106
98
|
});
|
|
107
|
-
const computedClasses = computed(() =>
|
|
108
|
-
"form-control"
|
|
109
|
-
"
|
|
110
|
-
"
|
|
111
|
-
|
|
112
|
-
|
|
113
|
-
|
|
114
|
-
|
|
115
|
-
|
|
116
|
-
|
|
117
|
-
|
|
118
|
-
|
|
99
|
+
const computedClasses = computed(() => [
|
|
100
|
+
"form-control",
|
|
101
|
+
"b-form-rating",
|
|
102
|
+
"align-items-center",
|
|
103
|
+
{
|
|
104
|
+
"is-readonly": props.readonly,
|
|
105
|
+
"is-disabled": props.disabled,
|
|
106
|
+
"no-border": props.noBorder,
|
|
107
|
+
"d-flex": !props.inline,
|
|
108
|
+
"d-inline-flex": props.inline,
|
|
109
|
+
"b-form-rating-inline": props.inline
|
|
110
|
+
}
|
|
111
|
+
]);
|
|
112
|
+
const isIconFull = (index) => displayValue.value - index >= 1;
|
|
113
|
+
const isIconHalf = (index) => {
|
|
119
114
|
const diff = displayValue.value - index;
|
|
120
115
|
return diff >= .5 && diff < 1;
|
|
121
|
-
}
|
|
116
|
+
};
|
|
117
|
+
const iconPaths = {
|
|
118
|
+
full: "M3.612 15.443c-.386.198-.824-.149-.746-.592l.83-4.73L.173 6.765c-.329-.314-.158-.888.283-.95l4.898-.696L7.538.792c.197-.39.73-.39.927 0l2.184 4.327 4.898.696c.441.062.612.636.282.95l-3.522 3.356.83 4.73c.078.443-.36.79-.746.592L8 13.187l-4.389 2.256z",
|
|
119
|
+
half: "M5.354 5.119 7.538.792A.52.52 0 0 1 8 .5c.183 0 .366.097.465.292l2.184 4.327 4.898.696A.54.54 0 0 1 16 6.32a.55.55 0 0 1-.17.445l-3.523 3.356.83 4.73c.078.443-.36.79-.746.592L8 13.187l-4.389 2.256a.5.5 0 0 1-.146.05c-.342.06-.668-.254-.6-.642l.83-4.73L.173 6.765a.55.55 0 0 1-.172-.403.6.6 0 0 1 .085-.302.51.51 0 0 1 .37-.245zM8 12.027a.5.5 0 0 1 .232.056l3.686 1.894-.694-3.957a.56.56 0 0 1 .162-.505l2.907-2.77-4.052-.576a.53.53 0 0 1-.393-.288L8.001 2.223 8 2.226z",
|
|
120
|
+
empty: "M2.866 14.85c-.078.444.36.791.746.593l4.39-2.256 4.389 2.256c.386.198.824-.149.746-.592l-.83-4.73 3.522-3.356c.33-.314.16-.888-.282-.95l-4.898-.696L8.465.792a.513.513 0 0 0-.927 0L5.354 5.12l-4.898.696c-.441.062-.612.636-.283.95l3.522 3.356-.83 4.73zm4.905-2.767-3.686 1.894.694-3.957a.56.56 0 0 0-.163-.505L1.71 6.745l4.052-.576a.53.53 0 0 0 .393-.288L8 2.223l1.847 3.658a.53.53 0 0 0 .393.288l4.052.575-2.906 2.77a.56.56 0 0 0-.163.506l.694 3.957-3.686-1.894a.5.5 0 0 0-.461 0z",
|
|
121
|
+
clear: "M4.646 4.646a.5.5 0 0 1 .708 0L8 7.293l2.646-2.647a.5.5 0 0 1 .708.708L8.707 8l2.647 2.646a.5.5 0 0 1-.708.708L8 8.707l-2.646 2.647a.5.5 0 0 1-.708-.708L7.293 8 4.646 5.354a.5.5 0 0 1 0-.708"
|
|
122
|
+
};
|
|
123
|
+
const getIcon = (index) => {
|
|
124
|
+
if (isIconFull(index)) return iconPaths.full;
|
|
125
|
+
if (isIconHalf(index)) return iconPaths.half;
|
|
126
|
+
return iconPaths.empty;
|
|
127
|
+
};
|
|
122
128
|
const hoverValue = ref(null);
|
|
123
129
|
const displayValue = computed(() => hoverValue.value !== null ? hoverValue.value : modelValue.value);
|
|
124
|
-
const
|
|
130
|
+
const lengthNumber = useToNumber(() => props.length, {
|
|
131
|
+
nanToZero: true,
|
|
132
|
+
method: "parseInt"
|
|
133
|
+
});
|
|
134
|
+
const computedLength = computed(() => lengthNumber.value > 0 ? lengthNumber.value : lengthDefault);
|
|
125
135
|
const computedSize = computed(() => {
|
|
126
|
-
|
|
127
|
-
|
|
128
|
-
|
|
136
|
+
return `${{
|
|
137
|
+
sm: .875,
|
|
138
|
+
default: 1,
|
|
139
|
+
lg: 1.25
|
|
140
|
+
}[props.size ?? "default"]}rem`;
|
|
141
|
+
});
|
|
142
|
+
const computedFormatter = computed(() => {
|
|
143
|
+
const preciseValue = props.precision > 0 ? props.precision : 0;
|
|
144
|
+
return new Intl.NumberFormat(computedLocale.value, {
|
|
145
|
+
style: "decimal",
|
|
146
|
+
useGrouping: false,
|
|
147
|
+
minimumFractionDigits: preciseValue,
|
|
148
|
+
maximumFractionDigits: preciseValue,
|
|
149
|
+
notation: "standard"
|
|
150
|
+
});
|
|
129
151
|
});
|
|
130
|
-
const computedFormatter = computed(() => new Intl.NumberFormat(computedLocale.value, {
|
|
131
|
-
style: "decimal",
|
|
132
|
-
useGrouping: false,
|
|
133
|
-
minimumFractionDigits: props.precision > 0 ? props.precision : 0,
|
|
134
|
-
maximumFractionDigits: props.precision > 0 ? props.precision : 0,
|
|
135
|
-
notation: "standard"
|
|
136
|
-
}));
|
|
137
152
|
const displayValueText = computed(() => {
|
|
138
153
|
const val = props.precision > 0 ? roundedValue.value : displayValue.value;
|
|
139
154
|
const formattedValue = computedFormatter.value.format(val);
|
|
140
|
-
if (props.showValueMax) return `${formattedValue}/${computedFormatter.value.format(
|
|
155
|
+
if (props.showValueMax) return `${formattedValue}/${computedFormatter.value.format(computedLength.value)}`;
|
|
141
156
|
if (props.showValue) return formattedValue;
|
|
142
157
|
return "";
|
|
143
158
|
});
|
|
@@ -146,7 +161,7 @@ var BFormRating_default = /* @__PURE__ */ defineComponent({
|
|
|
146
161
|
const factor = 10 ** props.precision;
|
|
147
162
|
return Math.round((val + Number.EPSILON) * factor) / factor;
|
|
148
163
|
});
|
|
149
|
-
const iconColors = computed(() => Array.from({ length:
|
|
164
|
+
const iconColors = computed(() => Array.from({ length: computedLength.value }, () => {
|
|
150
165
|
if (props.disabled) return {
|
|
151
166
|
class: "is-disabled",
|
|
152
167
|
style: {}
|
|
@@ -164,19 +179,19 @@ var BFormRating_default = /* @__PURE__ */ defineComponent({
|
|
|
164
179
|
style: {}
|
|
165
180
|
};
|
|
166
181
|
}));
|
|
167
|
-
|
|
182
|
+
const onKeydown = (e) => {
|
|
168
183
|
if (props.readonly || props.disabled) return;
|
|
169
184
|
let newValue = modelValue.value;
|
|
170
185
|
const isRtlMode = computedRtl.value;
|
|
171
186
|
switch (e.key) {
|
|
172
187
|
case "ArrowRight":
|
|
173
|
-
newValue = isRtlMode ? Math.max(newValue - 1, 0) : Math.min(newValue + 1,
|
|
188
|
+
newValue = isRtlMode ? Math.max(newValue - 1, 0) : Math.min(newValue + 1, computedLength.value);
|
|
174
189
|
break;
|
|
175
190
|
case "ArrowUp":
|
|
176
|
-
newValue = Math.min(newValue + 1,
|
|
191
|
+
newValue = Math.min(newValue + 1, computedLength.value);
|
|
177
192
|
break;
|
|
178
193
|
case "ArrowLeft":
|
|
179
|
-
newValue = isRtlMode ? Math.min(newValue + 1,
|
|
194
|
+
newValue = isRtlMode ? Math.min(newValue + 1, computedLength.value) : Math.max(newValue - 1, 0);
|
|
180
195
|
break;
|
|
181
196
|
case "ArrowDown":
|
|
182
197
|
newValue = Math.max(newValue - 1, 0);
|
|
@@ -185,15 +200,15 @@ var BFormRating_default = /* @__PURE__ */ defineComponent({
|
|
|
185
200
|
}
|
|
186
201
|
e.preventDefault();
|
|
187
202
|
modelValue.value = newValue;
|
|
188
|
-
}
|
|
189
|
-
|
|
203
|
+
};
|
|
204
|
+
const selectRating = (itemIndex) => {
|
|
190
205
|
if (props.readonly || props.disabled) return;
|
|
191
|
-
modelValue.value = hoverValue.value !== null ? hoverValue.value :
|
|
192
|
-
}
|
|
193
|
-
|
|
206
|
+
modelValue.value = hoverValue.value !== null ? hoverValue.value : itemIndex;
|
|
207
|
+
};
|
|
208
|
+
const clearRating = () => {
|
|
194
209
|
hoverValue.value = null;
|
|
195
210
|
modelValue.value = 0;
|
|
196
|
-
}
|
|
211
|
+
};
|
|
197
212
|
__expose({ hoverValue });
|
|
198
213
|
return (_ctx, _cache) => {
|
|
199
214
|
return openBlock(), createElementBlock("output", {
|
|
@@ -203,9 +218,9 @@ var BFormRating_default = /* @__PURE__ */ defineComponent({
|
|
|
203
218
|
form: unref(props).form ? unref(props).form : void 0,
|
|
204
219
|
role: "slider",
|
|
205
220
|
"aria-valuemin": 0,
|
|
206
|
-
"aria-valuemax":
|
|
221
|
+
"aria-valuemax": computedLength.value,
|
|
207
222
|
"aria-valuenow": displayValue.value,
|
|
208
|
-
"aria-valuetext": unref(props).labelValueCurrent(displayValue.value,
|
|
223
|
+
"aria-valuetext": unref(props).labelValueCurrent(displayValue.value, computedLength.value),
|
|
209
224
|
"aria-disabled": unref(props).disabled ? true : void 0,
|
|
210
225
|
"aria-readonly": unref(props).readonly ? true : void 0,
|
|
211
226
|
tabindex: unref(props).disabled ? void 0 : "0",
|
|
@@ -220,7 +235,7 @@ var BFormRating_default = /* @__PURE__ */ defineComponent({
|
|
|
220
235
|
}, null, 8, _hoisted_2)) : createCommentVNode("", true),
|
|
221
236
|
unref(props).showClear && !unref(props).readonly && !unref(props).disabled ? (openBlock(), createElementBlock("span", {
|
|
222
237
|
key: 1,
|
|
223
|
-
class: "clear-button
|
|
238
|
+
class: "rating-clear-button",
|
|
224
239
|
onClick: clearRating
|
|
225
240
|
}, [renderSlot(_ctx.$slots, "icon-clear", {}, () => [(openBlock(), createElementBlock("svg", {
|
|
226
241
|
viewBox: "0 0 16 16",
|
|
@@ -228,25 +243,25 @@ var BFormRating_default = /* @__PURE__ */ defineComponent({
|
|
|
228
243
|
"aria-label": unref(props).clearLabel,
|
|
229
244
|
xmlns: "http://www.w3.org/2000/svg",
|
|
230
245
|
class: "clear-icon"
|
|
231
|
-
}, [
|
|
232
|
-
(openBlock(true), createElementBlock(Fragment, null, renderList(
|
|
246
|
+
}, [createElementVNode("g", null, [createElementVNode("path", { d: iconPaths.clear }, null, 8, _hoisted_4)])], 8, _hoisted_3))])])) : createCommentVNode("", true),
|
|
247
|
+
(openBlock(true), createElementBlock(Fragment, null, renderList(computedLength.value, (itemIndex, index) => {
|
|
233
248
|
return openBlock(), createElementBlock("span", {
|
|
234
|
-
key:
|
|
235
|
-
class: "
|
|
236
|
-
onClick: ($event) => selectRating(
|
|
249
|
+
key: itemIndex,
|
|
250
|
+
class: "rating-item flex-grow-1",
|
|
251
|
+
onClick: ($event) => selectRating(itemIndex)
|
|
237
252
|
}, [renderSlot(_ctx.$slots, "default", {
|
|
238
|
-
|
|
253
|
+
itemIndex,
|
|
239
254
|
isFilled: isIconFull(index),
|
|
240
255
|
isHalf: isIconHalf(index)
|
|
241
|
-
}, () => [createElementVNode("span",
|
|
256
|
+
}, () => [createElementVNode("span", _hoisted_6, [(openBlock(), createElementBlock("svg", {
|
|
242
257
|
xmlns: "http://www.w3.org/2000/svg",
|
|
243
258
|
width: computedSize.value,
|
|
244
259
|
height: computedSize.value,
|
|
245
260
|
fill: "currentColor",
|
|
246
|
-
class: normalizeClass([
|
|
261
|
+
class: normalizeClass([iconColors.value[index]?.class]),
|
|
247
262
|
style: normalizeStyle(iconColors.value[index]?.style),
|
|
248
263
|
viewBox: "0 0 16 16"
|
|
249
|
-
}, [
|
|
264
|
+
}, [createElementVNode("path", { d: getIcon(index) }, null, 8, _hoisted_8)], 14, _hoisted_7))])])], 8, _hoisted_5);
|
|
250
265
|
}), 128)),
|
|
251
266
|
unref(props).showValue || unref(props).showValueMax ? (openBlock(), createElementBlock("span", {
|
|
252
267
|
key: 2,
|
|
@@ -260,4 +275,4 @@ var BFormRating_default = /* @__PURE__ */ defineComponent({
|
|
|
260
275
|
//#endregion
|
|
261
276
|
export { BFormRating_default as t };
|
|
262
277
|
|
|
263
|
-
//# sourceMappingURL=BFormRating-
|
|
278
|
+
//# sourceMappingURL=BFormRating-iKFgSFet.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"BFormRating-iKFgSFet.js","names":[],"sources":["../src/components/BFormRating/BFormRating.vue","../src/components/BFormRating/BFormRating.vue"],"sourcesContent":["<template>\n <output\n :id=\"computedId\"\n :class=\"computedClasses\"\n :dir=\"computedRtl ? 'rtl' : 'ltr'\"\n :form=\"props.form ? props.form : undefined\"\n role=\"slider\"\n :aria-valuemin=\"0\"\n :aria-valuemax=\"computedLength\"\n :aria-valuenow=\"displayValue\"\n :aria-valuetext=\"props.labelValueCurrent(displayValue, computedLength)\"\n :aria-disabled=\"props.disabled ? true : undefined\"\n :aria-readonly=\"props.readonly ? true : undefined\"\n :tabindex=\"props.disabled ? undefined : '0'\"\n @keydown=\"onKeydown\"\n >\n <input\n v-if=\"props.name && !props.disabled\"\n key=\"hidden\"\n type=\"hidden\"\n :name=\"props.name\"\n :form=\"props.form\"\n :value=\"modelValue\"\n />\n <span\n v-if=\"props.showClear && !props.readonly && !props.disabled\"\n class=\"rating-clear-button\"\n @click=\"clearRating\"\n >\n <slot name=\"icon-clear\">\n <svg\n viewBox=\"0 0 16 16\"\n role=\"img\"\n :aria-label=\"props.clearLabel\"\n xmlns=\"http://www.w3.org/2000/svg\"\n class=\"clear-icon\"\n >\n <g>\n <path :d=\"iconPaths.clear\" />\n </g>\n </svg>\n </slot>\n </span>\n <span\n v-for=\"(itemIndex, index) in computedLength\"\n :key=\"itemIndex\"\n class=\"rating-item flex-grow-1\"\n @click=\"selectRating(itemIndex)\"\n >\n <slot :item-index=\"itemIndex\" :is-filled=\"isIconFull(index)\" :is-half=\"isIconHalf(index)\">\n <span class=\"b-form-rating-item\">\n <svg\n xmlns=\"http://www.w3.org/2000/svg\"\n :width=\"computedSize\"\n :height=\"computedSize\"\n fill=\"currentColor\"\n :class=\"[iconColors[index]?.class]\"\n :style=\"iconColors[index]?.style\"\n viewBox=\"0 0 16 16\"\n >\n <path :d=\"getIcon(index)\" />\n </svg>\n </span>\n </slot>\n </span>\n\n <span\n v-if=\"props.showValue || props.showValueMax\"\n :style=\"{fontSize: computedSize}\"\n class=\"rating-value-text\"\n >\n {{ displayValueText }}\n </span>\n </output>\n</template>\n\n<script setup lang=\"ts\">\nimport {computed, ref} from 'vue'\nimport {useToNumber} from '@vueuse/core'\nimport {useDefaults} from '../../composables/useDefaults'\nimport {useId} from '../../composables/useId'\nimport {useRtl} from '../../composables/useRtl'\nimport type {BFormRatingProps, BFormRatingSlots, Size} from '../../types'\n\nconst lengthDefault = 5\nconst _props = withDefaults(defineProps<Omit<BFormRatingProps, 'modelValue'>>(), {\n clearLabel: 'Clear rating',\n color: '',\n id: undefined,\n inline: false,\n labelValueCurrent: (current: number, max: number) => `${current} of ${max}`,\n locale: undefined,\n noBorder: false,\n precision: 0,\n readonly: false,\n disabled: false,\n form: undefined,\n name: undefined,\n showClear: false,\n showValue: false,\n showValueMax: false,\n size: undefined,\n length: lengthDefault,\n variant: undefined,\n})\nconst props = useDefaults(_props, 'BFormRating')\ndefineSlots<BFormRatingSlots>()\n\nconst modelValue = defineModel<Exclude<BFormRatingProps['modelValue'], undefined>>({default: 0})\n\nconst computedId = useId(() => props.id, 'form-rating')\n\nconst {isRtl, locale: globalLocale} = useRtl()\n\nconst computedLocale = computed(() => {\n const loc = (props.locale ?? globalLocale?.value) || undefined\n const nf = new Intl.NumberFormat(loc)\n return nf.resolvedOptions().locale\n})\n\nconst computedRtl = computed(() => {\n const locale = computedLocale.value\n try {\n const localeObj = new Intl.Locale(locale)\n const {textInfo} = localeObj as Intl.Locale & {textInfo?: {direction: string}}\n if (textInfo) {\n return textInfo.direction === 'rtl'\n }\n } catch {\n // Fallback\n }\n return isRtl?.value ?? false\n})\n\nconst computedClasses = computed(() => [\n 'form-control',\n 'b-form-rating',\n 'align-items-center',\n {\n 'is-readonly': props.readonly,\n 'is-disabled': props.disabled,\n 'no-border': props.noBorder,\n 'd-flex': !props.inline,\n 'd-inline-flex': props.inline,\n 'b-form-rating-inline': props.inline,\n },\n])\n\nconst isIconFull = (index: number): boolean => displayValue.value - index >= 1\nconst isIconHalf = (index: number): boolean => {\n const diff = displayValue.value - index\n return diff >= 0.5 && diff < 1\n}\nconst iconPaths = {\n full: 'M3.612 15.443c-.386.198-.824-.149-.746-.592l.83-4.73L.173 6.765c-.329-.314-.158-.888.283-.95l4.898-.696L7.538.792c.197-.39.73-.39.927 0l2.184 4.327 4.898.696c.441.062.612.636.282.95l-3.522 3.356.83 4.73c.078.443-.36.79-.746.592L8 13.187l-4.389 2.256z',\n half: 'M5.354 5.119 7.538.792A.52.52 0 0 1 8 .5c.183 0 .366.097.465.292l2.184 4.327 4.898.696A.54.54 0 0 1 16 6.32a.55.55 0 0 1-.17.445l-3.523 3.356.83 4.73c.078.443-.36.79-.746.592L8 13.187l-4.389 2.256a.5.5 0 0 1-.146.05c-.342.06-.668-.254-.6-.642l.83-4.73L.173 6.765a.55.55 0 0 1-.172-.403.6.6 0 0 1 .085-.302.51.51 0 0 1 .37-.245zM8 12.027a.5.5 0 0 1 .232.056l3.686 1.894-.694-3.957a.56.56 0 0 1 .162-.505l2.907-2.77-4.052-.576a.53.53 0 0 1-.393-.288L8.001 2.223 8 2.226z',\n empty:\n 'M2.866 14.85c-.078.444.36.791.746.593l4.39-2.256 4.389 2.256c.386.198.824-.149.746-.592l-.83-4.73 3.522-3.356c.33-.314.16-.888-.282-.95l-4.898-.696L8.465.792a.513.513 0 0 0-.927 0L5.354 5.12l-4.898.696c-.441.062-.612.636-.283.95l3.522 3.356-.83 4.73zm4.905-2.767-3.686 1.894.694-3.957a.56.56 0 0 0-.163-.505L1.71 6.745l4.052-.576a.53.53 0 0 0 .393-.288L8 2.223l1.847 3.658a.53.53 0 0 0 .393.288l4.052.575-2.906 2.77a.56.56 0 0 0-.163.506l.694 3.957-3.686-1.894a.5.5 0 0 0-.461 0z',\n clear:\n 'M4.646 4.646a.5.5 0 0 1 .708 0L8 7.293l2.646-2.647a.5.5 0 0 1 .708.708L8.707 8l2.647 2.646a.5.5 0 0 1-.708.708L8 8.707l-2.646 2.647a.5.5 0 0 1-.708-.708L7.293 8 4.646 5.354a.5.5 0 0 1 0-.708',\n} as const\nconst getIcon = (index: number): string => {\n if (isIconFull(index)) return iconPaths.full\n if (isIconHalf(index)) return iconPaths.half\n return iconPaths.empty\n}\n\nconst hoverValue = ref<number | null>(null)\n\nconst displayValue = computed(() =>\n hoverValue.value !== null ? hoverValue.value : modelValue.value\n)\n\nconst lengthNumber = useToNumber(() => props.length, {nanToZero: true, method: 'parseInt'})\nconst computedLength = computed(() => (lengthNumber.value > 0 ? lengthNumber.value : lengthDefault))\n\nconst computedSize = computed(() => {\n const resolved = {\n sm: 0.875,\n default: 1,\n lg: 1.25,\n } satisfies Record<Size | 'default', number>\n return `${resolved[props.size ?? 'default']}rem`\n})\n\nconst computedFormatter = computed(() => {\n const preciseValue = props.precision > 0 ? props.precision : 0\n return new Intl.NumberFormat(computedLocale.value, {\n style: 'decimal',\n useGrouping: false,\n minimumFractionDigits: preciseValue,\n maximumFractionDigits: preciseValue,\n notation: 'standard',\n })\n})\n\nconst displayValueText = computed(() => {\n const val = props.precision > 0 ? roundedValue.value : displayValue.value\n const formattedValue = computedFormatter.value.format(val)\n if (props.showValueMax) {\n const formattedMax = computedFormatter.value.format(computedLength.value)\n return `${formattedValue}/${formattedMax}`\n }\n if (props.showValue) {\n return formattedValue\n }\n return ''\n})\n\nconst roundedValue = computed(() => {\n const val = displayValue.value\n const factor = 10 ** props.precision\n return Math.round((val + Number.EPSILON) * factor) / factor\n})\n\nconst iconColors = computed(() =>\n Array.from({length: computedLength.value}, () => {\n if (props.disabled) {\n return {class: 'is-disabled', style: {}}\n }\n if (props.variant) {\n return {class: `text-${props.variant}`, style: {}}\n }\n if (props.color) {\n return {class: '', style: {color: props.color}}\n }\n return {class: '', style: {}}\n })\n)\n\n//add keyboard support\nconst onKeydown = (e: KeyboardEvent) => {\n if (props.readonly || props.disabled) return\n\n let newValue = modelValue.value\n\n const isRtlMode = computedRtl.value\n\n switch (e.key) {\n case 'ArrowRight':\n newValue = isRtlMode\n ? Math.max(newValue - 1, 0)\n : Math.min(newValue + 1, computedLength.value)\n break\n case 'ArrowUp':\n newValue = Math.min(newValue + 1, computedLength.value)\n break\n case 'ArrowLeft':\n newValue = isRtlMode\n ? Math.min(newValue + 1, computedLength.value)\n : Math.max(newValue - 1, 0)\n break\n case 'ArrowDown':\n newValue = Math.max(newValue - 1, 0)\n break\n default:\n return\n }\n\n e.preventDefault()\n modelValue.value = newValue\n}\n\nconst selectRating = (itemIndex: number) => {\n if (props.readonly || props.disabled) return\n modelValue.value = hoverValue.value !== null ? hoverValue.value : itemIndex\n}\n\n// clear\nconst clearRating = () => {\n hoverValue.value = null\n modelValue.value = 0\n}\n\ndefineExpose({\n hoverValue,\n})\n</script>\n","<template>\n <output\n :id=\"computedId\"\n :class=\"computedClasses\"\n :dir=\"computedRtl ? 'rtl' : 'ltr'\"\n :form=\"props.form ? props.form : undefined\"\n role=\"slider\"\n :aria-valuemin=\"0\"\n :aria-valuemax=\"computedLength\"\n :aria-valuenow=\"displayValue\"\n :aria-valuetext=\"props.labelValueCurrent(displayValue, computedLength)\"\n :aria-disabled=\"props.disabled ? true : undefined\"\n :aria-readonly=\"props.readonly ? true : undefined\"\n :tabindex=\"props.disabled ? undefined : '0'\"\n @keydown=\"onKeydown\"\n >\n <input\n v-if=\"props.name && !props.disabled\"\n key=\"hidden\"\n type=\"hidden\"\n :name=\"props.name\"\n :form=\"props.form\"\n :value=\"modelValue\"\n />\n <span\n v-if=\"props.showClear && !props.readonly && !props.disabled\"\n class=\"rating-clear-button\"\n @click=\"clearRating\"\n >\n <slot name=\"icon-clear\">\n <svg\n viewBox=\"0 0 16 16\"\n role=\"img\"\n :aria-label=\"props.clearLabel\"\n xmlns=\"http://www.w3.org/2000/svg\"\n class=\"clear-icon\"\n >\n <g>\n <path :d=\"iconPaths.clear\" />\n </g>\n </svg>\n </slot>\n </span>\n <span\n v-for=\"(itemIndex, index) in computedLength\"\n :key=\"itemIndex\"\n class=\"rating-item flex-grow-1\"\n @click=\"selectRating(itemIndex)\"\n >\n <slot :item-index=\"itemIndex\" :is-filled=\"isIconFull(index)\" :is-half=\"isIconHalf(index)\">\n <span class=\"b-form-rating-item\">\n <svg\n xmlns=\"http://www.w3.org/2000/svg\"\n :width=\"computedSize\"\n :height=\"computedSize\"\n fill=\"currentColor\"\n :class=\"[iconColors[index]?.class]\"\n :style=\"iconColors[index]?.style\"\n viewBox=\"0 0 16 16\"\n >\n <path :d=\"getIcon(index)\" />\n </svg>\n </span>\n </slot>\n </span>\n\n <span\n v-if=\"props.showValue || props.showValueMax\"\n :style=\"{fontSize: computedSize}\"\n class=\"rating-value-text\"\n >\n {{ displayValueText }}\n </span>\n </output>\n</template>\n\n<script setup lang=\"ts\">\nimport {computed, ref} from 'vue'\nimport {useToNumber} from '@vueuse/core'\nimport {useDefaults} from '../../composables/useDefaults'\nimport {useId} from '../../composables/useId'\nimport {useRtl} from '../../composables/useRtl'\nimport type {BFormRatingProps, BFormRatingSlots, Size} from '../../types'\n\nconst lengthDefault = 5\nconst _props = withDefaults(defineProps<Omit<BFormRatingProps, 'modelValue'>>(), {\n clearLabel: 'Clear rating',\n color: '',\n id: undefined,\n inline: false,\n labelValueCurrent: (current: number, max: number) => `${current} of ${max}`,\n locale: undefined,\n noBorder: false,\n precision: 0,\n readonly: false,\n disabled: false,\n form: undefined,\n name: undefined,\n showClear: false,\n showValue: false,\n showValueMax: false,\n size: undefined,\n length: lengthDefault,\n variant: undefined,\n})\nconst props = useDefaults(_props, 'BFormRating')\ndefineSlots<BFormRatingSlots>()\n\nconst modelValue = defineModel<Exclude<BFormRatingProps['modelValue'], undefined>>({default: 0})\n\nconst computedId = useId(() => props.id, 'form-rating')\n\nconst {isRtl, locale: globalLocale} = useRtl()\n\nconst computedLocale = computed(() => {\n const loc = (props.locale ?? globalLocale?.value) || undefined\n const nf = new Intl.NumberFormat(loc)\n return nf.resolvedOptions().locale\n})\n\nconst computedRtl = computed(() => {\n const locale = computedLocale.value\n try {\n const localeObj = new Intl.Locale(locale)\n const {textInfo} = localeObj as Intl.Locale & {textInfo?: {direction: string}}\n if (textInfo) {\n return textInfo.direction === 'rtl'\n }\n } catch {\n // Fallback\n }\n return isRtl?.value ?? false\n})\n\nconst computedClasses = computed(() => [\n 'form-control',\n 'b-form-rating',\n 'align-items-center',\n {\n 'is-readonly': props.readonly,\n 'is-disabled': props.disabled,\n 'no-border': props.noBorder,\n 'd-flex': !props.inline,\n 'd-inline-flex': props.inline,\n 'b-form-rating-inline': props.inline,\n },\n])\n\nconst isIconFull = (index: number): boolean => displayValue.value - index >= 1\nconst isIconHalf = (index: number): boolean => {\n const diff = displayValue.value - index\n return diff >= 0.5 && diff < 1\n}\nconst iconPaths = {\n full: 'M3.612 15.443c-.386.198-.824-.149-.746-.592l.83-4.73L.173 6.765c-.329-.314-.158-.888.283-.95l4.898-.696L7.538.792c.197-.39.73-.39.927 0l2.184 4.327 4.898.696c.441.062.612.636.282.95l-3.522 3.356.83 4.73c.078.443-.36.79-.746.592L8 13.187l-4.389 2.256z',\n half: 'M5.354 5.119 7.538.792A.52.52 0 0 1 8 .5c.183 0 .366.097.465.292l2.184 4.327 4.898.696A.54.54 0 0 1 16 6.32a.55.55 0 0 1-.17.445l-3.523 3.356.83 4.73c.078.443-.36.79-.746.592L8 13.187l-4.389 2.256a.5.5 0 0 1-.146.05c-.342.06-.668-.254-.6-.642l.83-4.73L.173 6.765a.55.55 0 0 1-.172-.403.6.6 0 0 1 .085-.302.51.51 0 0 1 .37-.245zM8 12.027a.5.5 0 0 1 .232.056l3.686 1.894-.694-3.957a.56.56 0 0 1 .162-.505l2.907-2.77-4.052-.576a.53.53 0 0 1-.393-.288L8.001 2.223 8 2.226z',\n empty:\n 'M2.866 14.85c-.078.444.36.791.746.593l4.39-2.256 4.389 2.256c.386.198.824-.149.746-.592l-.83-4.73 3.522-3.356c.33-.314.16-.888-.282-.95l-4.898-.696L8.465.792a.513.513 0 0 0-.927 0L5.354 5.12l-4.898.696c-.441.062-.612.636-.283.95l3.522 3.356-.83 4.73zm4.905-2.767-3.686 1.894.694-3.957a.56.56 0 0 0-.163-.505L1.71 6.745l4.052-.576a.53.53 0 0 0 .393-.288L8 2.223l1.847 3.658a.53.53 0 0 0 .393.288l4.052.575-2.906 2.77a.56.56 0 0 0-.163.506l.694 3.957-3.686-1.894a.5.5 0 0 0-.461 0z',\n clear:\n 'M4.646 4.646a.5.5 0 0 1 .708 0L8 7.293l2.646-2.647a.5.5 0 0 1 .708.708L8.707 8l2.647 2.646a.5.5 0 0 1-.708.708L8 8.707l-2.646 2.647a.5.5 0 0 1-.708-.708L7.293 8 4.646 5.354a.5.5 0 0 1 0-.708',\n} as const\nconst getIcon = (index: number): string => {\n if (isIconFull(index)) return iconPaths.full\n if (isIconHalf(index)) return iconPaths.half\n return iconPaths.empty\n}\n\nconst hoverValue = ref<number | null>(null)\n\nconst displayValue = computed(() =>\n hoverValue.value !== null ? hoverValue.value : modelValue.value\n)\n\nconst lengthNumber = useToNumber(() => props.length, {nanToZero: true, method: 'parseInt'})\nconst computedLength = computed(() => (lengthNumber.value > 0 ? lengthNumber.value : lengthDefault))\n\nconst computedSize = computed(() => {\n const resolved = {\n sm: 0.875,\n default: 1,\n lg: 1.25,\n } satisfies Record<Size | 'default', number>\n return `${resolved[props.size ?? 'default']}rem`\n})\n\nconst computedFormatter = computed(() => {\n const preciseValue = props.precision > 0 ? props.precision : 0\n return new Intl.NumberFormat(computedLocale.value, {\n style: 'decimal',\n useGrouping: false,\n minimumFractionDigits: preciseValue,\n maximumFractionDigits: preciseValue,\n notation: 'standard',\n })\n})\n\nconst displayValueText = computed(() => {\n const val = props.precision > 0 ? roundedValue.value : displayValue.value\n const formattedValue = computedFormatter.value.format(val)\n if (props.showValueMax) {\n const formattedMax = computedFormatter.value.format(computedLength.value)\n return `${formattedValue}/${formattedMax}`\n }\n if (props.showValue) {\n return formattedValue\n }\n return ''\n})\n\nconst roundedValue = computed(() => {\n const val = displayValue.value\n const factor = 10 ** props.precision\n return Math.round((val + Number.EPSILON) * factor) / factor\n})\n\nconst iconColors = computed(() =>\n Array.from({length: computedLength.value}, () => {\n if (props.disabled) {\n return {class: 'is-disabled', style: {}}\n }\n if (props.variant) {\n return {class: `text-${props.variant}`, style: {}}\n }\n if (props.color) {\n return {class: '', style: {color: props.color}}\n }\n return {class: '', style: {}}\n })\n)\n\n//add keyboard support\nconst onKeydown = (e: KeyboardEvent) => {\n if (props.readonly || props.disabled) return\n\n let newValue = modelValue.value\n\n const isRtlMode = computedRtl.value\n\n switch (e.key) {\n case 'ArrowRight':\n newValue = isRtlMode\n ? Math.max(newValue - 1, 0)\n : Math.min(newValue + 1, computedLength.value)\n break\n case 'ArrowUp':\n newValue = Math.min(newValue + 1, computedLength.value)\n break\n case 'ArrowLeft':\n newValue = isRtlMode\n ? Math.min(newValue + 1, computedLength.value)\n : Math.max(newValue - 1, 0)\n break\n case 'ArrowDown':\n newValue = Math.max(newValue - 1, 0)\n break\n default:\n return\n }\n\n e.preventDefault()\n modelValue.value = newValue\n}\n\nconst selectRating = (itemIndex: number) => {\n if (props.readonly || props.disabled) return\n modelValue.value = hoverValue.value !== null ? hoverValue.value : itemIndex\n}\n\n// clear\nconst clearRating = () => {\n hoverValue.value = null\n modelValue.value = 0\n}\n\ndefineExpose({\n hoverValue,\n})\n</script>\n"],"mappings":"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"}
|
|
@@ -144,17 +144,15 @@
|
|
|
144
144
|
}
|
|
145
145
|
|
|
146
146
|
.b-form-rating {
|
|
147
|
-
|
|
148
|
-
justify-content: space-between;
|
|
149
|
-
padding: 0.375rem 0.75rem;
|
|
150
|
-
border-radius: 0.375rem;
|
|
151
|
-
border: 1px solid var(--bs-secondary-border-subtle, #dee2e6);
|
|
152
|
-
background-color: var(--bs-body-bg);
|
|
153
|
-
gap: 0.25rem;
|
|
154
|
-
flex: 1 1 auto;
|
|
155
|
-
width: 1%;
|
|
147
|
+
text-align: center;
|
|
156
148
|
min-width: 0;
|
|
157
149
|
}
|
|
150
|
+
.b-form-rating:not(.b-form-rating-inline) {
|
|
151
|
+
width: 100%;
|
|
152
|
+
}
|
|
153
|
+
.b-form-rating.b-form-rating-inline {
|
|
154
|
+
width: auto;
|
|
155
|
+
}
|
|
158
156
|
.b-form-rating.no-border {
|
|
159
157
|
border: none;
|
|
160
158
|
}
|
|
@@ -173,36 +171,44 @@
|
|
|
173
171
|
transform: scale(1.5);
|
|
174
172
|
}
|
|
175
173
|
|
|
176
|
-
.
|
|
177
|
-
|
|
174
|
+
.rating-item {
|
|
175
|
+
align-items: center;
|
|
176
|
+
display: flex;
|
|
177
|
+
justify-content: center;
|
|
178
178
|
user-select: none;
|
|
179
179
|
padding: 0 0.25em;
|
|
180
180
|
}
|
|
181
181
|
|
|
182
|
-
.is-readonly .
|
|
183
|
-
|
|
184
|
-
cursor: default;
|
|
182
|
+
.b-form-rating:not(.is-readonly):not(.is-disabled) .rating-item {
|
|
183
|
+
cursor: pointer;
|
|
185
184
|
}
|
|
186
185
|
|
|
187
|
-
.
|
|
188
|
-
|
|
189
|
-
|
|
186
|
+
.is-readonly .rating-item,
|
|
187
|
+
.is-disabled .rating-item {
|
|
188
|
+
cursor: default;
|
|
190
189
|
}
|
|
191
190
|
|
|
192
|
-
.
|
|
193
|
-
|
|
191
|
+
.rating-clear-button {
|
|
192
|
+
align-items: center;
|
|
193
|
+
cursor: pointer;
|
|
194
|
+
display: inline-flex;
|
|
195
|
+
flex-shrink: 0;
|
|
196
|
+
padding: 0 0.25em;
|
|
194
197
|
}
|
|
195
198
|
|
|
196
199
|
.rating-value-text {
|
|
200
|
+
flex-shrink: 0;
|
|
197
201
|
color: var(--bs-body-color);
|
|
198
|
-
margin: 0
|
|
202
|
+
margin: 0;
|
|
203
|
+
padding: 0 0.25em;
|
|
199
204
|
}
|
|
200
205
|
|
|
201
|
-
.b-form-rating-
|
|
206
|
+
.b-form-rating-item {
|
|
207
|
+
display: inline-flex;
|
|
202
208
|
transition: transform 0.2s ease;
|
|
203
209
|
}
|
|
204
210
|
|
|
205
|
-
.b-form-rating:not(.is-readonly):not(.is-disabled) .
|
|
211
|
+
.b-form-rating:not(.is-readonly):not(.is-disabled) .rating-item:hover .b-form-rating-item {
|
|
206
212
|
transform: scale(1.5);
|
|
207
213
|
}
|
|
208
214
|
|
|
@@ -13,11 +13,11 @@ import { n as BProgressBar_default, t as BProgress_default } from "./BProgress-B
|
|
|
13
13
|
import { t as BSpinner_default } from "./BSpinner-H1DZOmiM.js";
|
|
14
14
|
import { t as BButton_default } from "./BButton-KZu5jczf.js";
|
|
15
15
|
import { t as BAlert_default } from "./BAlert-C9Mi4RDx.js";
|
|
16
|
-
import { n as BOrchestrator_default, t as BApp_default } from "./BApp-
|
|
16
|
+
import { n as BOrchestrator_default, t as BApp_default } from "./BApp-Bg5xEz8H.js";
|
|
17
17
|
import { useProvideDefaults } from "./src/composables/useProvideDefaults/index.mjs";
|
|
18
18
|
import { useRegistry } from "./src/composables/useRegistry/index.mjs";
|
|
19
19
|
import { t as BAutocomplete_default } from "./BAutocomplete-BFbbKtpz.js";
|
|
20
|
-
import { t as BFormOtp_default } from "./BFormOtp-
|
|
20
|
+
import { t as BFormOtp_default } from "./BFormOtp-ClDACqXM.js";
|
|
21
21
|
import { n as BDatePicker_default, t as BDateRangePicker_default } from "./BDatePicker-AVTYcVLy.js";
|
|
22
22
|
import { t as BTimeField_default } from "./BTimeField-CbRGjaI6.js";
|
|
23
23
|
import { n as BDateRangeField_default, r as BDateField_default, t as BTimeRangeField_default } from "./BDateField-Bj-Jz7u4.js";
|
|
@@ -43,10 +43,10 @@ import { t as BFormSelectOption_default } from "./BFormSelectOption-C8orMj24.js"
|
|
|
43
43
|
import { n as BFormDatalist_default, t as BFormFloatingLabel_default } from "./BForm-CcbrqF35.js";
|
|
44
44
|
import { i as BFormInvalidFeedback_default, n as BFormText_default, r as BFormRow_default, t as BFormValidFeedback_default } from "./BFormValidFeedback-BTNOXbQ6.js";
|
|
45
45
|
import { n as BFormCheckbox_default, t as BFormCheckboxGroup_default } from "./BFormCheckbox-BMhyR-J5.js";
|
|
46
|
-
import { t as BFormFile_default } from "./BFormFile-
|
|
46
|
+
import { t as BFormFile_default } from "./BFormFile-C2DnrbK7.js";
|
|
47
47
|
import { t as BFormGroup_default } from "./BFormGroup-D3R7DxxF.js";
|
|
48
48
|
import { n as BFormRadio_default, t as BFormRadioGroup_default } from "./BFormRadio-DRViMh6V.js";
|
|
49
|
-
import { t as BFormRating_default } from "./BFormRating-
|
|
49
|
+
import { t as BFormRating_default } from "./BFormRating-iKFgSFet.js";
|
|
50
50
|
import { n as BFormSelectOptionGroup_default, t as BFormSelect_default } from "./BFormSelect-DdjH8482.js";
|
|
51
51
|
import { t as BFormSpinbutton_default } from "./BFormSpinbutton-fkVMbQC3.js";
|
|
52
52
|
import { t as BFormTags_default } from "./BFormTags-CUcyRTCK.js";
|
|
@@ -0,0 +1,10 @@
|
|
|
1
|
+
import { MaybeRef, Ref } from 'vue';
|
|
2
|
+
/**
|
|
3
|
+
* Manages an ARIA live region message with a clear-then-set pattern.
|
|
4
|
+
*
|
|
5
|
+
* Screen readers only announce `aria-live` content on a transition from empty
|
|
6
|
+
* to non-empty text. By clearing the message first and then setting it in the
|
|
7
|
+
* next tick we guarantee that every file selection produces that empty→non-empty
|
|
8
|
+
* transition, even when the same file is selected again.
|
|
9
|
+
*/
|
|
10
|
+
export declare const useAriaLiveMessage: (selectedFiles: Ref<readonly File[]>, formatter: MaybeRef<((files: readonly File[]) => string) | undefined>) => Readonly<Ref<string, string>>;
|
|
@@ -0,0 +1,10 @@
|
|
|
1
|
+
import { MaybeRef, Ref } from 'vue';
|
|
2
|
+
/**
|
|
3
|
+
* Manages an ARIA live region message with a clear-then-set pattern.
|
|
4
|
+
*
|
|
5
|
+
* Screen readers only announce `aria-live` content on a transition from empty
|
|
6
|
+
* to non-empty text. By clearing the message first and then setting it in the
|
|
7
|
+
* next tick we guarantee that every file selection produces that empty→non-empty
|
|
8
|
+
* transition, even when the same file is selected again.
|
|
9
|
+
*/
|
|
10
|
+
export declare const useAriaLiveMessage: (selectedFiles: Ref<readonly File[]>, formatter: MaybeRef<((files: readonly File[]) => string) | undefined>) => Readonly<Ref<string, string>>;
|
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
import { BFormRatingProps, BFormRatingSlots } from '../../types';
|
|
1
|
+
import { BFormRatingProps, BFormRatingSlots, Size } from '../../types';
|
|
2
2
|
type __VLS_Props = Omit<BFormRatingProps, 'modelValue'>;
|
|
3
3
|
type __VLS_Slots = BFormRatingSlots;
|
|
4
4
|
type __VLS_ModelProps = {
|
|
@@ -17,19 +17,19 @@ declare const __VLS_base: import('vue').DefineComponent<__VLS_PublicProps, {
|
|
|
17
17
|
id: string;
|
|
18
18
|
name: string;
|
|
19
19
|
readonly: boolean;
|
|
20
|
-
size:
|
|
20
|
+
size: Size;
|
|
21
21
|
color: string;
|
|
22
22
|
variant: "primary" | "secondary" | "success" | "danger" | "warning" | "info" | "light" | "dark" | string;
|
|
23
23
|
precision: number;
|
|
24
24
|
showValue: boolean;
|
|
25
25
|
inline: boolean;
|
|
26
|
+
length: import('../../types/CommonTypes').Numberish;
|
|
26
27
|
locale: string;
|
|
27
28
|
clearLabel: string;
|
|
28
29
|
labelValueCurrent: (current: number, max: number) => string;
|
|
29
30
|
noBorder: boolean;
|
|
30
31
|
showClear: boolean;
|
|
31
32
|
showValueMax: boolean;
|
|
32
|
-
stars: number;
|
|
33
33
|
}, {}, {}, {}, string, import('vue').ComponentProvideOptions, false, {}, any>;
|
|
34
34
|
declare const __VLS_export: __VLS_WithSlots<typeof __VLS_base, __VLS_Slots>;
|
|
35
35
|
declare const _default: typeof __VLS_export;
|
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
import { BFormRatingProps, BFormRatingSlots } from '../../types';
|
|
1
|
+
import { BFormRatingProps, BFormRatingSlots, Size } from '../../types';
|
|
2
2
|
type __VLS_Props = Omit<BFormRatingProps, 'modelValue'>;
|
|
3
3
|
type __VLS_Slots = BFormRatingSlots;
|
|
4
4
|
type __VLS_ModelProps = {
|
|
@@ -17,19 +17,19 @@ declare const __VLS_base: import('vue').DefineComponent<__VLS_PublicProps, {
|
|
|
17
17
|
id: string;
|
|
18
18
|
name: string;
|
|
19
19
|
readonly: boolean;
|
|
20
|
-
size:
|
|
20
|
+
size: Size;
|
|
21
21
|
color: string;
|
|
22
22
|
variant: "primary" | "secondary" | "success" | "danger" | "warning" | "info" | "light" | "dark" | string;
|
|
23
23
|
precision: number;
|
|
24
24
|
showValue: boolean;
|
|
25
25
|
inline: boolean;
|
|
26
|
+
length: import('../../types/CommonTypes').Numberish;
|
|
26
27
|
locale: string;
|
|
27
28
|
clearLabel: string;
|
|
28
29
|
labelValueCurrent: (current: number, max: number) => string;
|
|
29
30
|
noBorder: boolean;
|
|
30
31
|
showClear: boolean;
|
|
31
32
|
showValueMax: boolean;
|
|
32
|
-
stars: number;
|
|
33
33
|
}, {}, {}, {}, string, import('vue').ComponentProvideOptions, false, {}, any>;
|
|
34
34
|
declare const __VLS_export: __VLS_WithSlots<typeof __VLS_base, __VLS_Slots>;
|
|
35
35
|
declare const _default: typeof __VLS_export;
|
|
@@ -1,2 +1,2 @@
|
|
|
1
|
-
import { n as BOrchestrator_default, t as BApp_default } from "../../../BApp-
|
|
1
|
+
import { n as BOrchestrator_default, t as BApp_default } from "../../../BApp-Bg5xEz8H.js";
|
|
2
2
|
export { BApp_default as BApp, BOrchestrator_default as BOrchestrator };
|
|
@@ -1,2 +1,2 @@
|
|
|
1
|
-
import { t as BFormFile_default } from "../../../BFormFile-
|
|
1
|
+
import { t as BFormFile_default } from "../../../BFormFile-C2DnrbK7.js";
|
|
2
2
|
export { BFormFile_default as BFormFile };
|
|
@@ -1,2 +1,2 @@
|
|
|
1
|
-
import { t as BFormOtp_default } from "../../../BFormOtp-
|
|
1
|
+
import { t as BFormOtp_default } from "../../../BFormOtp-ClDACqXM.js";
|
|
2
2
|
export { BFormOtp_default as BFormOtp };
|
|
@@ -1,2 +1,2 @@
|
|
|
1
|
-
import { t as BFormRating_default } from "../../../BFormRating-
|
|
1
|
+
import { t as BFormRating_default } from "../../../BFormRating-iKFgSFet.js";
|
|
2
2
|
export { BFormRating_default as BFormRating };
|
|
@@ -9,9 +9,9 @@ import { n as BProgressBar_default, t as BProgress_default } from "../../BProgre
|
|
|
9
9
|
import { t as BSpinner_default } from "../../BSpinner-H1DZOmiM.js";
|
|
10
10
|
import { t as BButton_default } from "../../BButton-KZu5jczf.js";
|
|
11
11
|
import { t as BAlert_default } from "../../BAlert-C9Mi4RDx.js";
|
|
12
|
-
import { n as BOrchestrator_default, t as BApp_default } from "../../BApp-
|
|
12
|
+
import { n as BOrchestrator_default, t as BApp_default } from "../../BApp-Bg5xEz8H.js";
|
|
13
13
|
import { t as BAutocomplete_default } from "../../BAutocomplete-BFbbKtpz.js";
|
|
14
|
-
import { t as BFormOtp_default } from "../../BFormOtp-
|
|
14
|
+
import { t as BFormOtp_default } from "../../BFormOtp-ClDACqXM.js";
|
|
15
15
|
import { n as BDatePicker_default, t as BDateRangePicker_default } from "../../BDatePicker-AVTYcVLy.js";
|
|
16
16
|
import { t as BTimeField_default } from "../../BTimeField-CbRGjaI6.js";
|
|
17
17
|
import { n as BDateRangeField_default, r as BDateField_default, t as BTimeRangeField_default } from "../../BDateField-Bj-Jz7u4.js";
|
|
@@ -37,10 +37,10 @@ import { t as BFormSelectOption_default } from "../../BFormSelectOption-C8orMj24
|
|
|
37
37
|
import { n as BFormDatalist_default, t as BFormFloatingLabel_default } from "../../BForm-CcbrqF35.js";
|
|
38
38
|
import { i as BFormInvalidFeedback_default, n as BFormText_default, r as BFormRow_default, t as BFormValidFeedback_default } from "../../BFormValidFeedback-BTNOXbQ6.js";
|
|
39
39
|
import { n as BFormCheckbox_default, t as BFormCheckboxGroup_default } from "../../BFormCheckbox-BMhyR-J5.js";
|
|
40
|
-
import { t as BFormFile_default } from "../../BFormFile-
|
|
40
|
+
import { t as BFormFile_default } from "../../BFormFile-C2DnrbK7.js";
|
|
41
41
|
import { t as BFormGroup_default } from "../../BFormGroup-D3R7DxxF.js";
|
|
42
42
|
import { n as BFormRadio_default, t as BFormRadioGroup_default } from "../../BFormRadio-DRViMh6V.js";
|
|
43
|
-
import { t as BFormRating_default } from "../../BFormRating-
|
|
43
|
+
import { t as BFormRating_default } from "../../BFormRating-iKFgSFet.js";
|
|
44
44
|
import { n as BFormSelectOptionGroup_default, t as BFormSelect_default } from "../../BFormSelect-DdjH8482.js";
|
|
45
45
|
import { t as BFormSpinbutton_default } from "../../BFormSpinbutton-fkVMbQC3.js";
|
|
46
46
|
import { t as BFormTags_default } from "../../BFormTags-CUcyRTCK.js";
|
|
@@ -325,7 +325,7 @@ export interface BFormDatalistBaseProps {
|
|
|
325
325
|
textField?: string;
|
|
326
326
|
valueField?: string;
|
|
327
327
|
}
|
|
328
|
-
export interface BFormDatalistProps<Item = Record<string, unknown> | string | number | boolean, ValueKey extends Item extends Record<string, unknown> ? keyof Item : string = Item extends Record<string, unknown> ? keyof Item : never> {
|
|
328
|
+
export interface BFormDatalistProps<Item = Record<string, unknown> | string | number | boolean, ValueKey extends (Item extends Record<string, unknown> ? keyof Item : string) = Item extends Record<string, unknown> ? keyof Item : never> {
|
|
329
329
|
disabled?: boolean;
|
|
330
330
|
disabledField?: keyof Item & string;
|
|
331
331
|
id?: string;
|
|
@@ -470,8 +470,8 @@ export interface BFormRatingProps {
|
|
|
470
470
|
showClear?: boolean;
|
|
471
471
|
showValue?: boolean;
|
|
472
472
|
showValueMax?: boolean;
|
|
473
|
-
size?:
|
|
474
|
-
|
|
473
|
+
size?: Size;
|
|
474
|
+
length?: Numberish;
|
|
475
475
|
variant?: 'primary' | 'secondary' | 'success' | 'danger' | 'warning' | 'info' | 'light' | 'dark' | string;
|
|
476
476
|
}
|
|
477
477
|
export interface BFormSelectBaseProps {
|
|
@@ -325,7 +325,7 @@ export interface BFormDatalistBaseProps {
|
|
|
325
325
|
textField?: string;
|
|
326
326
|
valueField?: string;
|
|
327
327
|
}
|
|
328
|
-
export interface BFormDatalistProps<Item = Record<string, unknown> | string | number | boolean, ValueKey extends Item extends Record<string, unknown> ? keyof Item : string = Item extends Record<string, unknown> ? keyof Item : never> {
|
|
328
|
+
export interface BFormDatalistProps<Item = Record<string, unknown> | string | number | boolean, ValueKey extends (Item extends Record<string, unknown> ? keyof Item : string) = Item extends Record<string, unknown> ? keyof Item : never> {
|
|
329
329
|
disabled?: boolean;
|
|
330
330
|
disabledField?: keyof Item & string;
|
|
331
331
|
id?: string;
|
|
@@ -470,8 +470,8 @@ export interface BFormRatingProps {
|
|
|
470
470
|
showClear?: boolean;
|
|
471
471
|
showValue?: boolean;
|
|
472
472
|
showValueMax?: boolean;
|
|
473
|
-
size?:
|
|
474
|
-
|
|
473
|
+
size?: Size;
|
|
474
|
+
length?: Numberish;
|
|
475
475
|
variant?: 'primary' | 'secondary' | 'success' | 'danger' | 'warning' | 'info' | 'light' | 'dark' | string;
|
|
476
476
|
}
|
|
477
477
|
export interface BFormSelectBaseProps {
|
|
@@ -272,7 +272,7 @@ export type BFormRadioGroupSlots = {
|
|
|
272
272
|
export type BFormRatingSlots = {
|
|
273
273
|
'icon-clear'?: (props: Record<string, never>) => any;
|
|
274
274
|
'default'?: (props: {
|
|
275
|
-
|
|
275
|
+
itemIndex: number;
|
|
276
276
|
isFilled: boolean;
|
|
277
277
|
isHalf: boolean;
|
|
278
278
|
}) => any;
|
|
@@ -272,7 +272,7 @@ export type BFormRadioGroupSlots = {
|
|
|
272
272
|
export type BFormRatingSlots = {
|
|
273
273
|
'icon-clear'?: (props: Record<string, never>) => any;
|
|
274
274
|
'default'?: (props: {
|
|
275
|
-
|
|
275
|
+
itemIndex: number;
|
|
276
276
|
isFilled: boolean;
|
|
277
277
|
isHalf: boolean;
|
|
278
278
|
}) => any;
|
package/package.json
CHANGED
|
@@ -2,7 +2,7 @@
|
|
|
2
2
|
"name": "bootstrap-vue-next",
|
|
3
3
|
"displayName": "BootstrapVueNext",
|
|
4
4
|
"description": "Seamless integration of Vue 3, Bootstrap 5, and TypeScript for modern, type-safe UI development",
|
|
5
|
-
"version": "0.
|
|
5
|
+
"version": "1.0.0",
|
|
6
6
|
"license": "MIT",
|
|
7
7
|
"type": "module",
|
|
8
8
|
"main": "./dist/bootstrap-vue-next.mjs",
|