@g1cloud/open-bluesea-core 1.0.0-alpha.4 → 1.0.0-alpha.6

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.
@@ -26,17 +26,14 @@
26
26
  // }
27
27
  markComponentRaw(menus) {
28
28
  menus.forEach((menu) => {
29
- if (menu.component)
30
- menu.component = vue.markRaw(menu.component);
31
- if (menu.children)
32
- this.markComponentRaw(menu.children);
29
+ if (menu.component) menu.component = vue.markRaw(menu.component);
30
+ if (menu.children) this.markComponentRaw(menu.children);
33
31
  });
34
32
  }
35
33
  }
36
34
  const useContextMenu = () => {
37
35
  const contextMenu = vue.inject(ContextMenuPluginKey);
38
- if (!contextMenu)
39
- throw new Error("BSContextMenuPlugin is not initialized.");
36
+ if (!contextMenu) throw new Error("BSContextMenuPlugin is not initialized.");
40
37
  return contextMenu;
41
38
  };
42
39
  const useContextMenuOptional = () => {
@@ -61,8 +58,7 @@
61
58
  this.dateFormatSecond = config?.dateFormatSecond || this.dateFormatSecond;
62
59
  this.minDateValue = config?.minDateValue || this.minDateValue;
63
60
  this.maxDateValue = config?.maxDateValue || this.maxDateValue;
64
- if (config?.timeZone)
65
- this.timeZone = config.timeZone;
61
+ if (config?.timeZone) this.timeZone = config.timeZone;
66
62
  this.componentConfig = {
67
63
  popup: { hideOnScroll: false, ...config?.componentConfig?.popup },
68
64
  calendar: { startYear: "-20", endYear: "+20", ...config?.componentConfig?.calendar }
@@ -70,14 +66,10 @@
70
66
  }
71
67
  resolveDisplayDateFormat(format) {
72
68
  const actualFormat = format || this.dateFormat;
73
- if (actualFormat === "DAY")
74
- return this.dateFormatDay;
75
- else if (actualFormat === "MINUTE")
76
- return this.dateFormatMinute;
77
- else if (actualFormat === "SECOND")
78
- return this.dateFormatSecond;
79
- else
80
- return actualFormat;
69
+ if (actualFormat === "DAY") return this.dateFormatDay;
70
+ else if (actualFormat === "MINUTE") return this.dateFormatMinute;
71
+ else if (actualFormat === "SECOND") return this.dateFormatSecond;
72
+ else return actualFormat;
81
73
  }
82
74
  }
83
75
  const BlueseaConfigKey = Symbol("BlueseaConfig");
@@ -93,7 +85,36 @@
93
85
  }
94
86
  };
95
87
  const notificationEntries = vue.reactive([]);
88
+ let nextEntryId = 0;
89
+ const showNotification = (message, style = "info", durationInMilliSeconds = 3e3) => {
90
+ const entryId = ++nextEntryId;
91
+ notificationEntries.unshift({
92
+ entryId,
93
+ message,
94
+ style,
95
+ duration: durationInMilliSeconds
96
+ });
97
+ setTimeout(() => {
98
+ const index = notificationEntries.findIndex((entry) => entry.entryId === entryId);
99
+ notificationEntries.splice(index, 1);
100
+ }, durationInMilliSeconds);
101
+ };
96
102
  const alarmEntries = vue.reactive([]);
103
+ let nextAlarmEntryId = 0;
104
+ const showAlarm = (component, durationInMilliSeconds = 3e3) => {
105
+ const entryId = ++nextAlarmEntryId;
106
+ alarmEntries.push({
107
+ entryId,
108
+ component: vue.markRaw(component),
109
+ duration: durationInMilliSeconds
110
+ });
111
+ };
112
+ const closeAlarm = (entryId) => {
113
+ const index = alarmEntries.findIndex((entry) => entry.entryId === entryId);
114
+ if (index >= 0) {
115
+ alarmEntries.splice(index, 1);
116
+ }
117
+ };
97
118
  const tooltipEntry = vue.ref();
98
119
  const showTooltip = (content, target) => {
99
120
  tooltipEntry.value = {
@@ -111,17 +132,37 @@
111
132
  return !!tooltipEntry.value;
112
133
  };
113
134
  const showLoadingIcon = vue.ref(false);
135
+ let showLoadingCount = 0;
136
+ const showLoading = () => {
137
+ showLoadingCount++;
138
+ showLoadingIcon.value = showLoadingCount > 0;
139
+ };
140
+ const hideLoading = () => {
141
+ showLoadingCount = Math.max(0, showLoadingCount - 1);
142
+ showLoadingIcon.value = showLoadingCount > 0;
143
+ };
144
+ const withLoading = async (func) => {
145
+ let shown = false;
146
+ const timeoutId = window.setTimeout(() => {
147
+ showLoading();
148
+ shown = true;
149
+ }, 300);
150
+ try {
151
+ return await func();
152
+ } finally {
153
+ if (shown) hideLoading();
154
+ if (timeoutId) window.clearTimeout(timeoutId);
155
+ }
156
+ };
114
157
  const DEFAULT_TOOLTIP_SHOW_DELAY = 800;
115
158
  const DEFAULT_TOOLTIP_HIDE_DELAY = 0;
116
159
  const setTooltipParam = (el, param) => {
117
160
  if (param && param.content) {
118
161
  el.setAttribute("data-bs-tooltip-data", JSON.stringify(param));
119
- if (isTooltipDisplayed())
120
- showTooltip(param.content, el);
162
+ if (isTooltipDisplayed()) showTooltip(param.content, el);
121
163
  } else {
122
164
  el.removeAttribute("data-bs-tooltip-data");
123
- if (isTooltipDisplayed())
124
- hideTooltip();
165
+ if (isTooltipDisplayed()) hideTooltip();
125
166
  }
126
167
  };
127
168
  const vTooltip = {
@@ -155,8 +196,8 @@
155
196
  hideTooltip();
156
197
  }
157
198
  };
158
- const _hoisted_1$q = ["textContent"];
159
- const _sfc_main$r = /* @__PURE__ */ vue.defineComponent({
199
+ const _hoisted_1$u = ["textContent"];
200
+ const _sfc_main$w = /* @__PURE__ */ vue.defineComponent({
160
201
  __name: "BSButton",
161
202
  props: {
162
203
  caption: {},
@@ -185,7 +226,7 @@
185
226
  }, vue.toDisplayString(__props.leftIcon), 3)) : vue.createCommentVNode("", true),
186
227
  vue.createElementVNode("span", {
187
228
  textContent: vue.toDisplayString(__props.caption)
188
- }, null, 8, _hoisted_1$q),
229
+ }, null, 8, _hoisted_1$u),
189
230
  __props.rightIcon ? (vue.openBlock(), vue.createElementBlock("span", {
190
231
  key: 1,
191
232
  class: vue.normalizeClass([{ "ml-1": !!__props.caption }, "font-icon right"])
@@ -198,9 +239,9 @@
198
239
  };
199
240
  }
200
241
  });
201
- const _hoisted_1$p = { class: "page-navigation" };
202
- const _hoisted_2$l = ["data-page", "onClick"];
203
- const _sfc_main$q = /* @__PURE__ */ vue.defineComponent({
242
+ const _hoisted_1$t = { class: "page-navigation" };
243
+ const _hoisted_2$o = ["data-page", "onClick"];
244
+ const _sfc_main$v = /* @__PURE__ */ vue.defineComponent({
204
245
  __name: "BSPageNavigation",
205
246
  props: {
206
247
  totalCount: { default: 0 },
@@ -260,7 +301,7 @@
260
301
  }
261
302
  };
262
303
  return (_ctx, _cache) => {
263
- return vue.openBlock(), vue.createElementBlock("div", _hoisted_1$p, [
304
+ return vue.openBlock(), vue.createElementBlock("div", _hoisted_1$t, [
264
305
  vue.createElementVNode("span", {
265
306
  class: vue.normalizeClass([{ "disabled": isFirstSet.value }, "font-icon first"]),
266
307
  onClick: _cache[0] || (_cache[0] = vue.withModifiers(($event) => !isFirstSet.value && goToPage(1), ["prevent"]))
@@ -275,7 +316,7 @@
275
316
  class: vue.normalizeClass([{ on: page === currentPage.value }, "page"]),
276
317
  "data-page": page,
277
318
  onClick: vue.withModifiers(($event) => goToPage(page), ["prevent"])
278
- }, vue.toDisplayString(page), 11, _hoisted_2$l);
319
+ }, vue.toDisplayString(page), 11, _hoisted_2$o);
279
320
  }), 128)),
280
321
  vue.createElementVNode("span", {
281
322
  class: vue.normalizeClass([{ "disabled": isLastSet.value }, "font-icon next"]),
@@ -296,14 +337,14 @@
296
337
  }
297
338
  return target;
298
339
  };
299
- const _sfc_main$p = {};
300
- const _hoisted_1$o = { class: "bs-loading-icon" };
340
+ const _sfc_main$u = {};
341
+ const _hoisted_1$s = { class: "bs-loading-icon" };
301
342
  function _sfc_render(_ctx, _cache) {
302
- return vue.openBlock(), vue.createElementBlock("div", _hoisted_1$o, [..._cache[0] || (_cache[0] = [
343
+ return vue.openBlock(), vue.createElementBlock("div", _hoisted_1$s, [..._cache[0] || (_cache[0] = [
303
344
  vue.createElementVNode("span", { class: "font-icon" }, "progress_activity", -1)
304
345
  ])]);
305
346
  }
306
- const BSLoadingIcon = /* @__PURE__ */ _export_sfc(_sfc_main$p, [["render", _sfc_render]]);
347
+ const BSLoadingIcon = /* @__PURE__ */ _export_sfc(_sfc_main$u, [["render", _sfc_render]]);
307
348
  const waitUntil = async (condition, intervalMilliseconds = 200, maxTrial = 15) => {
308
349
  return await new Promise((resolve) => {
309
350
  let tried = 0;
@@ -326,9 +367,9 @@
326
367
  tried++;
327
368
  }, intervalMilliseconds);
328
369
  };
329
- const _hoisted_1$n = ["data-popup-id"];
370
+ const _hoisted_1$r = ["data-popup-id"];
330
371
  const ADJUST_OFFSET = 8;
331
- const _sfc_main$o = /* @__PURE__ */ vue.defineComponent({
372
+ const _sfc_main$t = /* @__PURE__ */ vue.defineComponent({
332
373
  __name: "BSPopup",
333
374
  props: {
334
375
  popupId: {},
@@ -519,7 +560,7 @@
519
560
  onKeydown: _cache[1] || (_cache[1] = ($event) => emit("keydown", $event))
520
561
  }, [
521
562
  vue.renderSlot(_ctx.$slots, "default")
522
- ], 46, _hoisted_1$n)
563
+ ], 46, _hoisted_1$r)
523
564
  ]),
524
565
  _: 3
525
566
  })
@@ -527,8 +568,8 @@
527
568
  };
528
569
  }
529
570
  });
530
- const _hoisted_1$m = ["textContent"];
531
- const _sfc_main$n = /* @__PURE__ */ vue.defineComponent({
571
+ const _hoisted_1$q = ["textContent"];
572
+ const _sfc_main$s = /* @__PURE__ */ vue.defineComponent({
532
573
  __name: "BSTooltip",
533
574
  props: {
534
575
  align: { default: "center" },
@@ -555,7 +596,7 @@
555
596
  }, [
556
597
  vue.createElementVNode("div", {
557
598
  textContent: vue.toDisplayString(__props.content)
558
- }, null, 8, _hoisted_1$m)
599
+ }, null, 8, _hoisted_1$q)
559
600
  ], 6);
560
601
  };
561
602
  }
@@ -597,14 +638,14 @@
597
638
  });
598
639
  };
599
640
  };
600
- const _hoisted_1$l = {
641
+ const _hoisted_1$p = {
601
642
  key: 0,
602
643
  class: "popup-search"
603
644
  };
604
- const _hoisted_2$k = ["data-value", "onMouseover", "onClick"];
605
- const _hoisted_3$g = ["textContent"];
606
- const _hoisted_4$a = ["textContent"];
607
- const _sfc_main$m = /* @__PURE__ */ vue.defineComponent({
645
+ const _hoisted_2$n = ["data-value", "onMouseover", "onClick"];
646
+ const _hoisted_3$h = ["textContent"];
647
+ const _hoisted_4$b = ["textContent"];
648
+ const _sfc_main$r = /* @__PURE__ */ vue.defineComponent({
608
649
  __name: "BSSelectPopup",
609
650
  props: {
610
651
  items: {},
@@ -746,7 +787,7 @@
746
787
  handleKeyboard
747
788
  });
748
789
  return (_ctx, _cache) => {
749
- return vue.openBlock(), vue.createBlock(_sfc_main$o, {
790
+ return vue.openBlock(), vue.createBlock(_sfc_main$t, {
750
791
  "base-element": __props.baseElement,
751
792
  "max-height": __props.maxHeight,
752
793
  "offset-from-base-element": 4,
@@ -757,7 +798,7 @@
757
798
  onKeydown: vue.withKeys(vue.withModifiers(handleKeyboard, ["stop", "prevent"]), ["enter", "down", "up"])
758
799
  }, {
759
800
  default: vue.withCtx(() => [
760
- actualShowSearch.value ? (vue.openBlock(), vue.createElementBlock("div", _hoisted_1$l, [
801
+ actualShowSearch.value ? (vue.openBlock(), vue.createElementBlock("div", _hoisted_1$p, [
761
802
  vue.withDirectives(vue.createElementVNode("input", {
762
803
  type: "text",
763
804
  onInput: setSearchKeyword,
@@ -790,12 +831,12 @@
790
831
  key: 0,
791
832
  textContent: vue.toDisplayString(item?.label),
792
833
  class: "label"
793
- }, null, 8, _hoisted_3$g)) : (vue.openBlock(), vue.createElementBlock("label", {
834
+ }, null, 8, _hoisted_3$h)) : (vue.openBlock(), vue.createElementBlock("label", {
794
835
  key: 1,
795
836
  textContent: vue.toDisplayString(__props.nullLabel),
796
837
  class: "label null-label"
797
- }, null, 8, _hoisted_4$a))
798
- ], 42, _hoisted_2$k);
838
+ }, null, 8, _hoisted_4$b))
839
+ ], 42, _hoisted_2$n);
799
840
  }), 128))
800
841
  ], 512)
801
842
  ]),
@@ -812,13 +853,10 @@
812
853
  };
813
854
  };
814
855
  const clickInsideElements = (target, elements) => {
815
- if (!elements)
816
- return false;
856
+ if (!elements) return false;
817
857
  return elements.some((el) => {
818
- if (el instanceof HTMLElement)
819
- return el.contains(target);
820
- else if (typeof el === "string")
821
- return document.querySelector(el)?.contains(target);
858
+ if (el instanceof HTMLElement) return el.contains(target);
859
+ else if (typeof el === "string") return document.querySelector(el)?.contains(target);
822
860
  });
823
861
  };
824
862
  const vClickOutside = {
@@ -843,8 +881,7 @@
843
881
  },
844
882
  unmounted: (el) => {
845
883
  const clickListener = el.vClickOutsideListener;
846
- if (clickListener)
847
- window.removeEventListener("click", clickListener);
884
+ if (clickListener) window.removeEventListener("click", clickListener);
848
885
  delete el.vClickOutsideContext;
849
886
  }
850
887
  };
@@ -939,10 +976,12 @@
939
976
  };
940
977
  stringValue.value = convertFromValue(value.value);
941
978
  if (option.field) {
942
- vue.watch(option.field, (field) => {
943
- if (field)
944
- storeFieldValidator(field, validator);
945
- });
979
+ vue.watch(
980
+ option.field,
981
+ (field) => {
982
+ if (field) storeFieldValidator(field, validator);
983
+ }
984
+ );
946
985
  }
947
986
  return validator;
948
987
  };
@@ -951,8 +990,7 @@
951
990
  if (rules) {
952
991
  for (const rule of rules) {
953
992
  const result = await rule(value, phase, fieldContext);
954
- if (result)
955
- result.forEach((error) => errs.push(error));
993
+ if (result) result.forEach((error) => errs.push(error));
956
994
  }
957
995
  errs.forEach((error) => errors.push(error));
958
996
  }
@@ -1062,26 +1100,25 @@
1062
1100
  setCurrentValue: option.setCurrentValue,
1063
1101
  compare: option.compare
1064
1102
  });
1065
- vue.watch(option.field, (field) => {
1066
- if (field)
1067
- this.fields.set(field, handler);
1068
- });
1103
+ vue.watch(
1104
+ option.field,
1105
+ (field) => {
1106
+ if (field) this.fields.set(field, handler);
1107
+ }
1108
+ );
1069
1109
  return handler;
1070
1110
  }
1071
1111
  unregisterField(field) {
1072
- if (field.value)
1073
- this.fields.delete(field.value);
1112
+ if (field.value) this.fields.delete(field.value);
1074
1113
  }
1075
1114
  addChild(child) {
1076
- if (!this.children)
1077
- this.children = [];
1115
+ if (!this.children) this.children = [];
1078
1116
  this.children.push(child);
1079
1117
  }
1080
1118
  removeChild(child) {
1081
1119
  if (this.children) {
1082
1120
  const index = this.children.findIndex((ch) => ch === child);
1083
- if (index >= 0)
1084
- this.children.splice(index, 1);
1121
+ if (index >= 0) this.children.splice(index, 1);
1085
1122
  }
1086
1123
  }
1087
1124
  set() {
@@ -1134,8 +1171,7 @@
1134
1171
  return this.savedValue.value;
1135
1172
  }
1136
1173
  rollbackValue() {
1137
- if (this.saved)
1138
- this.valueProvider.setCurrentValue(this.savedValue.value);
1174
+ if (this.saved) this.valueProvider.setCurrentValue(this.savedValue.value);
1139
1175
  }
1140
1176
  isModified(currentValue) {
1141
1177
  return this.saved && (this.valueProvider.compare ? !this.valueProvider.compare(this.savedValue.value, currentValue) : this.savedValue?.value !== currentValue);
@@ -1144,9 +1180,9 @@
1144
1180
  return this.isModified(this.valueProvider.getCurrentValue());
1145
1181
  }
1146
1182
  }
1147
- const _hoisted_1$k = { key: 0 };
1148
- const _hoisted_2$j = ["textContent"];
1149
- const _sfc_main$l = /* @__PURE__ */ vue.defineComponent({
1183
+ const _hoisted_1$o = { key: 0 };
1184
+ const _hoisted_2$m = ["textContent"];
1185
+ const _sfc_main$q = /* @__PURE__ */ vue.defineComponent({
1150
1186
  __name: "ValidationErrors",
1151
1187
  props: {
1152
1188
  errors: {},
@@ -1154,13 +1190,13 @@
1154
1190
  },
1155
1191
  setup(__props) {
1156
1192
  return (_ctx, _cache) => {
1157
- return !__props.hideErrorMessage && __props.errors && __props.errors.length > 0 ? (vue.openBlock(), vue.createElementBlock("div", _hoisted_1$k, [
1193
+ return !__props.hideErrorMessage && __props.errors && __props.errors.length > 0 ? (vue.openBlock(), vue.createElementBlock("div", _hoisted_1$o, [
1158
1194
  (vue.openBlock(true), vue.createElementBlock(vue.Fragment, null, vue.renderList(__props.errors, (error) => {
1159
1195
  return vue.openBlock(), vue.createElementBlock("div", {
1160
1196
  key: error.code,
1161
1197
  textContent: vue.toDisplayString(error.message),
1162
1198
  class: "bs-field-error"
1163
- }, null, 8, _hoisted_2$j);
1199
+ }, null, 8, _hoisted_2$m);
1164
1200
  }), 128))
1165
1201
  ])) : vue.createCommentVNode("", true);
1166
1202
  };
@@ -1176,39 +1212,43 @@
1176
1212
  return result === dummyFieldContext ? void 0 : result;
1177
1213
  };
1178
1214
  const defaultLabelProvider = (item) => {
1179
- if (!item)
1180
- return "";
1181
- else if (typeof item === "string")
1182
- return item;
1183
- else
1184
- return String(item);
1215
+ if (!item) return "";
1216
+ else if (typeof item === "string") return item;
1217
+ else return String(item);
1218
+ };
1219
+ const emptyLabelProvider = (_item) => {
1220
+ return void 0;
1185
1221
  };
1186
1222
  const executeLabelProviderOrDefault = (item, labelProvider, defaultLabel) => {
1187
1223
  if (labelProvider) {
1188
1224
  const label = labelProvider(item);
1189
- if (label !== void 0)
1190
- return label;
1225
+ if (label !== void 0) return label;
1191
1226
  }
1192
1227
  return defaultLabel(item);
1193
1228
  };
1229
+ const defaultKeyProvider = (item) => {
1230
+ return JSON.stringify(item);
1231
+ };
1232
+ const emptyKeyProvider = (_item) => {
1233
+ return void 0;
1234
+ };
1194
1235
  const executeKeyProviderOrDefault = (item, keyProvider, defaultKey) => {
1195
1236
  if (keyProvider) {
1196
1237
  const key = keyProvider(item);
1197
- if (key)
1198
- return key;
1238
+ if (key) return key;
1199
1239
  }
1200
1240
  return defaultKey(item);
1201
1241
  };
1202
- const _hoisted_1$j = ["tabindex", "onKeydown"];
1203
- const _hoisted_2$i = ["textContent"];
1204
- const _hoisted_3$f = ["data-field-name"];
1205
- const _hoisted_4$9 = ["textContent"];
1206
- const _hoisted_5$4 = ["textContent"];
1242
+ const _hoisted_1$n = ["tabindex", "onKeydown"];
1243
+ const _hoisted_2$l = ["textContent"];
1244
+ const _hoisted_3$g = ["data-field-name"];
1245
+ const _hoisted_4$a = ["textContent"];
1246
+ const _hoisted_5$5 = ["textContent"];
1207
1247
  const _hoisted_6$2 = {
1208
1248
  key: 2,
1209
1249
  class: "small-progress"
1210
1250
  };
1211
- const _sfc_main$k = /* @__PURE__ */ vue.defineComponent({
1251
+ const _sfc_main$p = /* @__PURE__ */ vue.defineComponent({
1212
1252
  __name: "BSSelect",
1213
1253
  props: {
1214
1254
  modelValue: {},
@@ -1343,7 +1383,7 @@
1343
1383
  __props.viewMode ? (vue.openBlock(), vue.createElementBlock("div", {
1344
1384
  key: 0,
1345
1385
  textContent: vue.toDisplayString(selectedItemLabel.value)
1346
- }, null, 8, _hoisted_2$i)) : (vue.openBlock(), vue.createElementBlock(vue.Fragment, { key: 1 }, [
1386
+ }, null, 8, _hoisted_2$l)) : (vue.openBlock(), vue.createElementBlock(vue.Fragment, { key: 1 }, [
1347
1387
  vue.createElementVNode("div", {
1348
1388
  ref_key: "field",
1349
1389
  ref: field,
@@ -1355,15 +1395,15 @@
1355
1395
  key: 0,
1356
1396
  textContent: vue.toDisplayString(__props.placeholder),
1357
1397
  class: "placeholder grow"
1358
- }, null, 8, _hoisted_4$9)) : (vue.openBlock(), vue.createElementBlock("span", {
1398
+ }, null, 8, _hoisted_4$a)) : (vue.openBlock(), vue.createElementBlock("span", {
1359
1399
  key: 1,
1360
1400
  textContent: vue.toDisplayString(selectedItemLabel.value),
1361
1401
  class: "label"
1362
- }, null, 8, _hoisted_5$4)),
1402
+ }, null, 8, _hoisted_5$5)),
1363
1403
  _cache[4] || (_cache[4] = vue.createElementVNode("span", { class: "dropdown-btn" }, "expand_more", -1)),
1364
1404
  loadingItems.value ? (vue.openBlock(), vue.createElementBlock("span", _hoisted_6$2, "progress_activity")) : vue.createCommentVNode("", true)
1365
- ], 8, _hoisted_3$f),
1366
- !__props.disabled && showPopup.value ? (vue.openBlock(), vue.createBlock(_sfc_main$m, {
1405
+ ], 8, _hoisted_3$g),
1406
+ !__props.disabled && showPopup.value ? (vue.openBlock(), vue.createBlock(_sfc_main$r, {
1367
1407
  key: 0,
1368
1408
  ref_key: "selectPopup",
1369
1409
  ref: selectPopup,
@@ -1385,26 +1425,26 @@
1385
1425
  focusToRoot();
1386
1426
  })
1387
1427
  }, null, 8, ["allow-null", "base-element", "initial-item", "items", "label-provider", "max-height", "null-label", "popup-align", "popup-direction", "selected-items", "show-search", "value-provider"])) : vue.createCommentVNode("", true),
1388
- !__props.viewMode ? (vue.openBlock(), vue.createBlock(_sfc_main$l, {
1428
+ !__props.viewMode ? (vue.openBlock(), vue.createBlock(_sfc_main$q, {
1389
1429
  key: 1,
1390
1430
  errors: vue.unref(errors),
1391
1431
  "hide-error-message": __props.hideErrorMessage || __props.disabled && !__props.showErrorMessageOnDisabled
1392
1432
  }, null, 8, ["errors", "hide-error-message"])) : vue.createCommentVNode("", true)
1393
1433
  ], 64))
1394
- ], 42, _hoisted_1$j)), [
1434
+ ], 42, _hoisted_1$n)), [
1395
1435
  [vue.unref(vClickOutside), () => togglePopup(false)]
1396
1436
  ]);
1397
1437
  };
1398
1438
  }
1399
1439
  });
1400
- const _hoisted_1$i = { class: "bs-calendar" };
1401
- const _hoisted_2$h = { class: "bs-calendar-head" };
1402
- const _hoisted_3$e = { class: "year-month" };
1403
- const _hoisted_4$8 = {
1440
+ const _hoisted_1$m = { class: "bs-calendar" };
1441
+ const _hoisted_2$k = { class: "bs-calendar-head" };
1442
+ const _hoisted_3$f = { class: "year-month" };
1443
+ const _hoisted_4$9 = {
1404
1444
  key: 0,
1405
1445
  class: "timezone"
1406
1446
  };
1407
- const _hoisted_5$3 = { class: "weekdays" };
1447
+ const _hoisted_5$4 = { class: "weekdays" };
1408
1448
  const _hoisted_6$1 = ["textContent"];
1409
1449
  const _hoisted_7$1 = ["onClick"];
1410
1450
  const _hoisted_8$1 = {
@@ -1412,7 +1452,7 @@
1412
1452
  class: "bs-calendar-time"
1413
1453
  };
1414
1454
  const _hoisted_9$1 = { class: "select-wrap" };
1415
- const _sfc_main$j = /* @__PURE__ */ vue.defineComponent({
1455
+ const _sfc_main$o = /* @__PURE__ */ vue.defineComponent({
1416
1456
  __name: "BSCalendar",
1417
1457
  props: {
1418
1458
  modelValue: {},
@@ -1601,39 +1641,39 @@
1601
1641
  }
1602
1642
  };
1603
1643
  return (_ctx, _cache) => {
1604
- return vue.openBlock(), vue.createElementBlock("div", _hoisted_1$i, [
1605
- vue.createElementVNode("div", _hoisted_2$h, [
1606
- vue.createElementVNode("div", _hoisted_3$e, [
1607
- vue.createVNode(_sfc_main$r, {
1644
+ return vue.openBlock(), vue.createElementBlock("div", _hoisted_1$m, [
1645
+ vue.createElementVNode("div", _hoisted_2$k, [
1646
+ vue.createElementVNode("div", _hoisted_3$f, [
1647
+ vue.createVNode(_sfc_main$w, {
1608
1648
  class: "",
1609
1649
  "left-icon": "chevron_left",
1610
1650
  onClick: prevMonth
1611
1651
  }),
1612
- vue.createVNode(_sfc_main$k, {
1652
+ vue.createVNode(_sfc_main$p, {
1613
1653
  modelValue: year.value,
1614
1654
  "onUpdate:modelValue": _cache[0] || (_cache[0] = ($event) => year.value = $event),
1615
1655
  disabled: __props.disabled,
1616
1656
  items: years.value
1617
1657
  }, null, 8, ["modelValue", "disabled", "items"]),
1618
- vue.createVNode(_sfc_main$k, {
1658
+ vue.createVNode(_sfc_main$p, {
1619
1659
  modelValue: month.value,
1620
1660
  "onUpdate:modelValue": _cache[1] || (_cache[1] = ($event) => month.value = $event),
1621
1661
  disabled: __props.disabled,
1622
1662
  items: vue.unref(months)
1623
1663
  }, null, 8, ["modelValue", "disabled", "items"]),
1624
- vue.createVNode(_sfc_main$r, {
1664
+ vue.createVNode(_sfc_main$w, {
1625
1665
  class: "",
1626
1666
  "left-icon": "chevron_right",
1627
1667
  onClick: nextMonth
1628
1668
  })
1629
1669
  ]),
1630
- __props.showTimeZone ? (vue.openBlock(), vue.createElementBlock("div", _hoisted_4$8, "(" + vue.toDisplayString(actualTimeZone.value) + ")", 1)) : vue.createCommentVNode("", true)
1670
+ __props.showTimeZone ? (vue.openBlock(), vue.createElementBlock("div", _hoisted_4$9, "(" + vue.toDisplayString(actualTimeZone.value) + ")", 1)) : vue.createCommentVNode("", true)
1631
1671
  ]),
1632
1672
  vue.createElementVNode("table", {
1633
1673
  class: vue.normalizeClass([{ disabled: __props.disabled }, "align-self-center"])
1634
1674
  }, [
1635
1675
  vue.createElementVNode("tbody", null, [
1636
- vue.createElementVNode("tr", _hoisted_5$3, [
1676
+ vue.createElementVNode("tr", _hoisted_5$4, [
1637
1677
  (vue.openBlock(true), vue.createElementBlock(vue.Fragment, null, vue.renderList(weekdays.value, (day) => {
1638
1678
  return vue.openBlock(), vue.createElementBlock("th", {
1639
1679
  key: day,
@@ -1663,7 +1703,7 @@
1663
1703
  __props.resolution
1664
1704
  ) ? (vue.openBlock(), vue.createElementBlock("div", _hoisted_8$1, [
1665
1705
  vue.createElementVNode("div", _hoisted_9$1, [
1666
- vue.createVNode(_sfc_main$k, {
1706
+ vue.createVNode(_sfc_main$p, {
1667
1707
  disabled: __props.disabled,
1668
1708
  items: hours,
1669
1709
  "label-provider": (item) => item < 10 ? "0" + item : item.toString(),
@@ -1672,7 +1712,7 @@
1672
1712
  "onUpdate:modelValue": updateHour
1673
1713
  }, null, 8, ["disabled", "label-provider", "model-value"]),
1674
1714
  _cache[2] || (_cache[2] = vue.createElementVNode("span", { class: "" }, ":", -1)),
1675
- vue.createVNode(_sfc_main$k, {
1715
+ vue.createVNode(_sfc_main$p, {
1676
1716
  disabled: __props.disabled || __props.resolution === "HOUR",
1677
1717
  items: minutes.value,
1678
1718
  "label-provider": (item) => item < 10 ? "0" + item : item.toString(),
@@ -1686,10 +1726,10 @@
1686
1726
  };
1687
1727
  }
1688
1728
  });
1689
- const _hoisted_1$h = { class: "bs-calendar-range flex flex-row" };
1690
- const _hoisted_2$g = { class: "flex flex-col" };
1691
- const _hoisted_3$d = { class: "flex flex-row items-center" };
1692
- const _sfc_main$i = /* @__PURE__ */ vue.defineComponent({
1729
+ const _hoisted_1$l = { class: "bs-calendar-range flex flex-row" };
1730
+ const _hoisted_2$j = { class: "flex flex-col" };
1731
+ const _hoisted_3$e = { class: "flex flex-row items-center" };
1732
+ const _sfc_main$n = /* @__PURE__ */ vue.defineComponent({
1693
1733
  __name: "BSCalendarRange",
1694
1734
  props: {
1695
1735
  from: {},
@@ -1727,10 +1767,10 @@
1727
1767
  emit("update:to", value);
1728
1768
  };
1729
1769
  return (_ctx, _cache) => {
1730
- return vue.openBlock(), vue.createElementBlock("div", _hoisted_1$h, [
1731
- vue.createElementVNode("div", _hoisted_2$g, [
1732
- vue.createElementVNode("div", _hoisted_3$d, [
1733
- vue.createVNode(_sfc_main$j, {
1770
+ return vue.openBlock(), vue.createElementBlock("div", _hoisted_1$l, [
1771
+ vue.createElementVNode("div", _hoisted_2$j, [
1772
+ vue.createElementVNode("div", _hoisted_3$e, [
1773
+ vue.createVNode(_sfc_main$o, {
1734
1774
  modelValue: fromValue.value,
1735
1775
  "onUpdate:modelValue": [
1736
1776
  _cache[0] || (_cache[0] = ($event) => fromValue.value = $event),
@@ -1748,7 +1788,7 @@
1748
1788
  "range-type": "from"
1749
1789
  }, null, 8, ["modelValue", "disabled", "display-format", "end-year", "first-day", "range-value", "resolution", "start-year", "time-zone"]),
1750
1790
  _cache[2] || (_cache[2] = vue.createElementVNode("span", { class: "tilde" }, "~", -1)),
1751
- vue.createVNode(_sfc_main$j, {
1791
+ vue.createVNode(_sfc_main$o, {
1752
1792
  modelValue: toValue.value,
1753
1793
  "onUpdate:modelValue": [
1754
1794
  _cache[1] || (_cache[1] = ($event) => toValue.value = $event),
@@ -1809,13 +1849,11 @@
1809
1849
  return trim ? value?.trim() : value;
1810
1850
  },
1811
1851
  getPrefixSuffixList(param) {
1812
- if (!param)
1813
- return [];
1852
+ if (!param) return [];
1814
1853
  const params = Array.isArray(param) ? param : [param];
1815
1854
  const list = [];
1816
1855
  for (let item of params) {
1817
- if (!item)
1818
- continue;
1856
+ if (!item) continue;
1819
1857
  if (typeof item === "object" && item.hasOwnProperty("type") && item.hasOwnProperty("value")) {
1820
1858
  list.push(item);
1821
1859
  } else {
@@ -1823,12 +1861,16 @@
1823
1861
  }
1824
1862
  }
1825
1863
  return list;
1864
+ },
1865
+ isCursorInElement(event, element) {
1866
+ const rect = element.getBoundingClientRect();
1867
+ return event.clientX >= rect.left && event.clientX <= rect.right && event.clientY >= rect.top && event.clientY <= rect.bottom;
1826
1868
  }
1827
1869
  };
1828
- const _hoisted_1$g = ["textContent"];
1829
- const _hoisted_2$f = { class: "font-icon" };
1830
- const _hoisted_3$c = ["src", "alt"];
1831
- const _sfc_main$h = /* @__PURE__ */ vue.defineComponent({
1870
+ const _hoisted_1$k = ["textContent"];
1871
+ const _hoisted_2$i = { class: "font-icon" };
1872
+ const _hoisted_3$d = ["src", "alt"];
1873
+ const _sfc_main$m = /* @__PURE__ */ vue.defineComponent({
1832
1874
  __name: "BSPrefixSuffix",
1833
1875
  props: {
1834
1876
  value: {},
@@ -1844,11 +1886,11 @@
1844
1886
  textContent: vue.toDisplayString(item.value),
1845
1887
  key: JSON.stringify(item.value),
1846
1888
  class: vue.normalizeClass(__props.type)
1847
- }, null, 10, _hoisted_1$g)) : item.type === "font-icon" ? (vue.openBlock(), vue.createElementBlock("span", {
1889
+ }, null, 10, _hoisted_1$k)) : item.type === "font-icon" ? (vue.openBlock(), vue.createElementBlock("span", {
1848
1890
  key: 1,
1849
1891
  class: vue.normalizeClass(__props.type)
1850
1892
  }, [
1851
- vue.createElementVNode("span", _hoisted_2$f, vue.toDisplayString(item.value), 1)
1893
+ vue.createElementVNode("span", _hoisted_2$i, vue.toDisplayString(item.value), 1)
1852
1894
  ], 2)) : item.type === "image-url" ? (vue.openBlock(), vue.createElementBlock("span", {
1853
1895
  key: 2,
1854
1896
  class: vue.normalizeClass(__props.type)
@@ -1856,24 +1898,24 @@
1856
1898
  vue.createElementVNode("img", {
1857
1899
  src: item.value,
1858
1900
  alt: __props.type
1859
- }, null, 8, _hoisted_3$c)
1901
+ }, null, 8, _hoisted_3$d)
1860
1902
  ], 2)) : vue.createCommentVNode("", true)
1861
1903
  ], 64);
1862
1904
  }), 256);
1863
1905
  };
1864
1906
  }
1865
1907
  });
1866
- const _hoisted_1$f = {
1908
+ const _hoisted_1$j = {
1867
1909
  key: 0,
1868
1910
  class: "view-mode"
1869
1911
  };
1870
- const _hoisted_2$e = ["textContent"];
1871
- const _hoisted_3$b = {
1912
+ const _hoisted_2$h = ["textContent"];
1913
+ const _hoisted_3$c = {
1872
1914
  key: 1,
1873
1915
  class: "input-area"
1874
1916
  };
1875
- const _hoisted_4$7 = ["id", "placeholder", "autocomplete", "disabled", "maxlength", "name", "tabindex", "type"];
1876
- const _sfc_main$g = /* @__PURE__ */ vue.defineComponent({
1917
+ const _hoisted_4$8 = ["id", "placeholder", "autocomplete", "disabled", "maxlength", "name", "tabindex", "type"];
1918
+ const _sfc_main$l = /* @__PURE__ */ vue.defineComponent({
1877
1919
  __name: "BSTextInput",
1878
1920
  props: {
1879
1921
  id: {},
@@ -1997,20 +2039,20 @@
1997
2039
  class: vue.normalizeClass([{ required: __props.required, disabled: __props.disabled, modified: modified.value, error: vue.unref(errors).length > 0 }, "bs-text-input bs-input-wrap"]),
1998
2040
  style: vue.normalizeStyle({ width: __props.width })
1999
2041
  }, [
2000
- __props.viewMode ? (vue.openBlock(), vue.createElementBlock("div", _hoisted_1$f, [
2001
- vue.createVNode(_sfc_main$h, {
2042
+ __props.viewMode ? (vue.openBlock(), vue.createElementBlock("div", _hoisted_1$j, [
2043
+ vue.createVNode(_sfc_main$m, {
2002
2044
  value: __props.prefix,
2003
2045
  type: "prefix"
2004
2046
  }, null, 8, ["value"]),
2005
2047
  vue.createElementVNode("span", {
2006
2048
  textContent: vue.toDisplayString(vue.unref(stringValue))
2007
- }, null, 8, _hoisted_2$e),
2008
- vue.createVNode(_sfc_main$h, {
2049
+ }, null, 8, _hoisted_2$h),
2050
+ vue.createVNode(_sfc_main$m, {
2009
2051
  value: __props.suffix,
2010
2052
  type: "suffix"
2011
2053
  }, null, 8, ["value"])
2012
- ])) : (vue.openBlock(), vue.createElementBlock("div", _hoisted_3$b, [
2013
- vue.createVNode(_sfc_main$h, {
2054
+ ])) : (vue.openBlock(), vue.createElementBlock("div", _hoisted_3$c, [
2055
+ vue.createVNode(_sfc_main$m, {
2014
2056
  value: __props.prefix,
2015
2057
  type: "prefix"
2016
2058
  }, null, 8, ["value"]),
@@ -2026,15 +2068,15 @@
2026
2068
  name: __props.name,
2027
2069
  tabindex: __props.tabindex,
2028
2070
  type: __props.inputType
2029
- }, vue.toHandlers(handlers, true)), null, 16, _hoisted_4$7), [
2071
+ }, vue.toHandlers(handlers, true)), null, 16, _hoisted_4$8), [
2030
2072
  [vue.vModelDynamic, vue.unref(stringValue)]
2031
2073
  ]),
2032
- vue.createVNode(_sfc_main$h, {
2074
+ vue.createVNode(_sfc_main$m, {
2033
2075
  value: __props.suffix,
2034
2076
  type: "suffix"
2035
2077
  }, null, 8, ["value"])
2036
2078
  ])),
2037
- !__props.viewMode ? (vue.openBlock(), vue.createBlock(_sfc_main$l, {
2079
+ !__props.viewMode ? (vue.openBlock(), vue.createBlock(_sfc_main$q, {
2038
2080
  key: 2,
2039
2081
  errors: vue.unref(errors),
2040
2082
  "hide-error-message": __props.hideErrorMessage || __props.disabled && !__props.showErrorMessageOnDisabled
@@ -2237,8 +2279,7 @@
2237
2279
  formatDateString(utcDate, format, displayTimeZone) {
2238
2280
  if (utcDate) {
2239
2281
  let date = dayjs(utcDate);
2240
- if (displayTimeZone)
2241
- date = date.tz(displayTimeZone);
2282
+ if (displayTimeZone) date = date.tz(displayTimeZone);
2242
2283
  return date.format(format || "YYYY-MM-DD HH:mm Z");
2243
2284
  }
2244
2285
  return "";
@@ -2317,17 +2358,17 @@
2317
2358
  return tmp.textContent || tmp.innerText;
2318
2359
  }
2319
2360
  };
2320
- const _hoisted_1$e = {
2361
+ const _hoisted_1$i = {
2321
2362
  key: 0,
2322
2363
  class: "view-mode"
2323
2364
  };
2324
- const _hoisted_2$d = ["textContent"];
2325
- const _hoisted_3$a = {
2365
+ const _hoisted_2$g = ["textContent"];
2366
+ const _hoisted_3$b = {
2326
2367
  key: 1,
2327
2368
  class: "input-area"
2328
2369
  };
2329
- const _hoisted_4$6 = ["id", "placeholder", "autocomplete", "disabled", "maxlength", "name", "tabindex", "value"];
2330
- const _sfc_main$f = /* @__PURE__ */ vue.defineComponent({
2370
+ const _hoisted_4$7 = ["id", "placeholder", "autocomplete", "disabled", "maxlength", "name", "tabindex", "value"];
2371
+ const _sfc_main$k = /* @__PURE__ */ vue.defineComponent({
2331
2372
  __name: "BSNumberInput",
2332
2373
  props: {
2333
2374
  id: {},
@@ -2459,20 +2500,20 @@
2459
2500
  class: vue.normalizeClass([{ required: __props.required, disabled: __props.disabled, modified: modified.value, error: vue.unref(errors).length > 0 }, "bs-number-input bs-input-wrap"]),
2460
2501
  style: vue.normalizeStyle({ width: __props.width })
2461
2502
  }, [
2462
- __props.viewMode ? (vue.openBlock(), vue.createElementBlock("div", _hoisted_1$e, [
2463
- vue.createVNode(_sfc_main$h, {
2503
+ __props.viewMode ? (vue.openBlock(), vue.createElementBlock("div", _hoisted_1$i, [
2504
+ vue.createVNode(_sfc_main$m, {
2464
2505
  value: __props.prefix,
2465
2506
  type: "prefix"
2466
2507
  }, null, 8, ["value"]),
2467
2508
  vue.createElementVNode("span", {
2468
2509
  textContent: vue.toDisplayString(__props.formatInViewMode ? formattedStringValue.value : vue.unref(stringValue))
2469
- }, null, 8, _hoisted_2$d),
2470
- vue.createVNode(_sfc_main$h, {
2510
+ }, null, 8, _hoisted_2$g),
2511
+ vue.createVNode(_sfc_main$m, {
2471
2512
  value: __props.suffix,
2472
2513
  type: "suffix"
2473
2514
  }, null, 8, ["value"])
2474
- ])) : (vue.openBlock(), vue.createElementBlock("div", _hoisted_3$a, [
2475
- vue.createVNode(_sfc_main$h, {
2515
+ ])) : (vue.openBlock(), vue.createElementBlock("div", _hoisted_3$b, [
2516
+ vue.createVNode(_sfc_main$m, {
2476
2517
  value: __props.prefix,
2477
2518
  type: "prefix"
2478
2519
  }, null, 8, ["value"]),
@@ -2488,13 +2529,13 @@
2488
2529
  tabindex: __props.tabindex,
2489
2530
  value: focused.value || !__props.formatOnBlur ? vue.unref(stringValue) : formattedStringValue.value,
2490
2531
  type: "text"
2491
- }, vue.toHandlers(handlers, true)), null, 16, _hoisted_4$6),
2492
- vue.createVNode(_sfc_main$h, {
2532
+ }, vue.toHandlers(handlers, true)), null, 16, _hoisted_4$7),
2533
+ vue.createVNode(_sfc_main$m, {
2493
2534
  value: __props.suffix,
2494
2535
  type: "suffix"
2495
2536
  }, null, 8, ["value"])
2496
2537
  ])),
2497
- !__props.viewMode ? (vue.openBlock(), vue.createBlock(_sfc_main$l, {
2538
+ !__props.viewMode ? (vue.openBlock(), vue.createBlock(_sfc_main$q, {
2498
2539
  key: 2,
2499
2540
  errors: vue.unref(errors),
2500
2541
  "hide-error-message": __props.hideErrorMessage || __props.disabled && !__props.showErrorMessageOnDisabled
@@ -2503,17 +2544,17 @@
2503
2544
  };
2504
2545
  }
2505
2546
  });
2506
- const _hoisted_1$d = {
2547
+ const _hoisted_1$h = {
2507
2548
  key: 0,
2508
2549
  class: "view-mode flex flex-row gap-2 items-start"
2509
2550
  };
2510
- const _hoisted_2$c = ["textContent"];
2511
- const _hoisted_3$9 = {
2551
+ const _hoisted_2$f = ["textContent"];
2552
+ const _hoisted_3$a = {
2512
2553
  key: 1,
2513
2554
  class: "input-area flex flex-row items-start"
2514
2555
  };
2515
- const _hoisted_4$5 = ["placeholder", "disabled", "maxlength", "name", "tabindex"];
2516
- const _sfc_main$e = /* @__PURE__ */ vue.defineComponent({
2556
+ const _hoisted_4$6 = ["placeholder", "disabled", "maxlength", "name", "tabindex"];
2557
+ const _sfc_main$j = /* @__PURE__ */ vue.defineComponent({
2517
2558
  __name: "BSTextArea",
2518
2559
  props: {
2519
2560
  id: {},
@@ -2628,20 +2669,20 @@
2628
2669
  class: vue.normalizeClass([{ disabled: __props.disabled, modified: modified.value, error: vue.unref(errors).length > 0 }, "bs-text-area bs-input-wrap"]),
2629
2670
  style: vue.normalizeStyle({ width: outerWidth.value, height: outerHeight.value })
2630
2671
  }, [
2631
- __props.viewMode ? (vue.openBlock(), vue.createElementBlock("div", _hoisted_1$d, [
2632
- vue.createVNode(_sfc_main$h, {
2672
+ __props.viewMode ? (vue.openBlock(), vue.createElementBlock("div", _hoisted_1$h, [
2673
+ vue.createVNode(_sfc_main$m, {
2633
2674
  value: __props.prefix,
2634
2675
  type: "prefix"
2635
2676
  }, null, 8, ["value"]),
2636
2677
  vue.createElementVNode("div", {
2637
2678
  textContent: vue.toDisplayString(vue.unref(stringValue))
2638
- }, null, 8, _hoisted_2$c),
2639
- vue.createVNode(_sfc_main$h, {
2679
+ }, null, 8, _hoisted_2$f),
2680
+ vue.createVNode(_sfc_main$m, {
2640
2681
  value: __props.suffix,
2641
2682
  type: "suffix"
2642
2683
  }, null, 8, ["value"])
2643
- ])) : (vue.openBlock(), vue.createElementBlock("div", _hoisted_3$9, [
2644
- vue.createVNode(_sfc_main$h, {
2684
+ ])) : (vue.openBlock(), vue.createElementBlock("div", _hoisted_3$a, [
2685
+ vue.createVNode(_sfc_main$m, {
2645
2686
  value: __props.prefix,
2646
2687
  type: "prefix"
2647
2688
  }, null, 8, ["value"]),
@@ -2658,15 +2699,15 @@
2658
2699
  class: "grow",
2659
2700
  onPointerdown: capturePointer,
2660
2701
  onPointerup: preserveResizedHeight
2661
- }, vue.toHandlers(handlers, true)), null, 16, _hoisted_4$5), [
2702
+ }, vue.toHandlers(handlers, true)), null, 16, _hoisted_4$6), [
2662
2703
  [vue.vModelText, vue.unref(stringValue)]
2663
2704
  ]),
2664
- vue.createVNode(_sfc_main$h, {
2705
+ vue.createVNode(_sfc_main$m, {
2665
2706
  value: __props.suffix,
2666
2707
  type: "suffix"
2667
2708
  }, null, 8, ["value"])
2668
2709
  ])),
2669
- !__props.viewMode ? (vue.openBlock(), vue.createBlock(_sfc_main$l, {
2710
+ !__props.viewMode ? (vue.openBlock(), vue.createBlock(_sfc_main$q, {
2670
2711
  key: 2,
2671
2712
  errors: vue.unref(errors),
2672
2713
  "hide-error-message": __props.hideErrorMessage || __props.disabled && !__props.showErrorMessageOnDisabled
@@ -2675,10 +2716,10 @@
2675
2716
  };
2676
2717
  }
2677
2718
  });
2678
- const _hoisted_1$c = ["id", "checked", "disabled", "name", "tabindex"];
2679
- const _hoisted_2$b = ["textContent", "for"];
2680
- const _hoisted_3$8 = ["for"];
2681
- const _sfc_main$d = /* @__PURE__ */ vue.defineComponent({
2719
+ const _hoisted_1$g = ["id", "checked", "disabled", "name", "tabindex"];
2720
+ const _hoisted_2$e = ["textContent", "for"];
2721
+ const _hoisted_3$9 = ["for"];
2722
+ const _sfc_main$i = /* @__PURE__ */ vue.defineComponent({
2682
2723
  __name: "BSCheckbox",
2683
2724
  props: {
2684
2725
  id: { default: () => componentUtil.generateNextId("checkbox") },
@@ -2734,28 +2775,28 @@
2734
2775
  tabindex: __props.tabindex,
2735
2776
  class: "",
2736
2777
  type: "checkbox"
2737
- }, vue.toHandlers(handlers, true)), null, 16, _hoisted_1$c),
2778
+ }, vue.toHandlers(handlers, true)), null, 16, _hoisted_1$g),
2738
2779
  __props.label ? (vue.openBlock(), vue.createElementBlock("label", {
2739
2780
  key: 0,
2740
2781
  textContent: vue.toDisplayString(__props.label),
2741
2782
  for: __props.id,
2742
2783
  class: "text-label"
2743
- }, null, 8, _hoisted_2$b)) : vue.createCommentVNode("", true),
2784
+ }, null, 8, _hoisted_2$e)) : vue.createCommentVNode("", true),
2744
2785
  hasLabelSlot.value ? (vue.openBlock(), vue.createElementBlock("label", {
2745
2786
  key: 1,
2746
2787
  for: __props.id,
2747
2788
  class: "slot-label cursor-pointer"
2748
2789
  }, [
2749
2790
  vue.renderSlot(_ctx.$slots, "default", { disabled: __props.disabled })
2750
- ], 8, _hoisted_3$8)) : vue.createCommentVNode("", true)
2791
+ ], 8, _hoisted_3$9)) : vue.createCommentVNode("", true)
2751
2792
  ], 2);
2752
2793
  };
2753
2794
  }
2754
2795
  });
2755
- const _hoisted_1$b = ["data-field-name"];
2756
- const _hoisted_2$a = { class: "items" };
2757
- const _hoisted_3$7 = ["textContent"];
2758
- const _sfc_main$c = /* @__PURE__ */ vue.defineComponent({
2796
+ const _hoisted_1$f = ["data-field-name"];
2797
+ const _hoisted_2$d = { class: "items" };
2798
+ const _hoisted_3$8 = ["textContent"];
2799
+ const _sfc_main$h = /* @__PURE__ */ vue.defineComponent({
2759
2800
  __name: "BSCheckboxGroup",
2760
2801
  props: {
2761
2802
  name: {},
@@ -2861,13 +2902,13 @@
2861
2902
  "data-field-name": __props.name,
2862
2903
  role: "group"
2863
2904
  }, [
2864
- vue.createElementVNode("div", _hoisted_2$a, [
2905
+ vue.createElementVNode("div", _hoisted_2$d, [
2865
2906
  __props.viewMode ? (vue.openBlock(), vue.createElementBlock("div", {
2866
2907
  key: 0,
2867
2908
  class: "view-mode",
2868
2909
  textContent: vue.toDisplayString(modelValueLabels.value)
2869
- }, null, 8, _hoisted_3$7)) : (vue.openBlock(true), vue.createElementBlock(vue.Fragment, { key: 1 }, vue.renderList(__props.items, (item) => {
2870
- return vue.openBlock(), vue.createBlock(_sfc_main$d, {
2910
+ }, null, 8, _hoisted_3$8)) : (vue.openBlock(true), vue.createElementBlock(vue.Fragment, { key: 1 }, vue.renderList(__props.items, (item) => {
2911
+ return vue.openBlock(), vue.createBlock(_sfc_main$i, {
2871
2912
  key: itemKey(item),
2872
2913
  disabled: __props.disabled || isDisabledItem(item),
2873
2914
  label: itemLabel(item),
@@ -2879,24 +2920,24 @@
2879
2920
  }, null, 8, ["disabled", "label", "model-value", "name", "tabindex", "onUpdate:modelValue"]);
2880
2921
  }), 128))
2881
2922
  ]),
2882
- !__props.viewMode ? (vue.openBlock(), vue.createBlock(_sfc_main$l, {
2923
+ !__props.viewMode ? (vue.openBlock(), vue.createBlock(_sfc_main$q, {
2883
2924
  key: 0,
2884
2925
  errors: vue.unref(errors),
2885
2926
  "hide-error-message": __props.hideErrorMessage || __props.disabled && !__props.showErrorMessageOnDisabled
2886
2927
  }, null, 8, ["errors", "hide-error-message"])) : vue.createCommentVNode("", true)
2887
- ], 10, _hoisted_1$b);
2928
+ ], 10, _hoisted_1$f);
2888
2929
  };
2889
2930
  }
2890
2931
  });
2891
- const _hoisted_1$a = ["id", "checked", "disabled", "name", "tabindex"];
2892
- const _hoisted_2$9 = ["for"];
2893
- const _hoisted_3$6 = {
2932
+ const _hoisted_1$e = ["id", "checked", "disabled", "name", "tabindex"];
2933
+ const _hoisted_2$c = ["for"];
2934
+ const _hoisted_3$7 = {
2894
2935
  key: 0,
2895
2936
  class: "font-icon"
2896
2937
  };
2897
- const _hoisted_4$4 = ["textContent"];
2898
- const _hoisted_5$2 = ["for"];
2899
- const _sfc_main$b = /* @__PURE__ */ vue.defineComponent({
2938
+ const _hoisted_4$5 = ["textContent"];
2939
+ const _hoisted_5$3 = ["for"];
2940
+ const _sfc_main$g = /* @__PURE__ */ vue.defineComponent({
2900
2941
  __name: "BSRadioButton",
2901
2942
  props: {
2902
2943
  id: { default: () => componentUtil.generateNextId("radio") },
@@ -2939,34 +2980,34 @@
2939
2980
  class: "",
2940
2981
  role: "radio",
2941
2982
  type: "radio"
2942
- }, vue.toHandlers(handlers, true)), null, 16, _hoisted_1$a),
2983
+ }, vue.toHandlers(handlers, true)), null, 16, _hoisted_1$e),
2943
2984
  vue.createElementVNode("label", { for: __props.id }, [
2944
- __props.icon ? (vue.openBlock(), vue.createElementBlock("span", _hoisted_3$6, vue.toDisplayString(__props.icon), 1)) : vue.createCommentVNode("", true),
2985
+ __props.icon ? (vue.openBlock(), vue.createElementBlock("span", _hoisted_3$7, vue.toDisplayString(__props.icon), 1)) : vue.createCommentVNode("", true),
2945
2986
  __props.label ? (vue.openBlock(), vue.createElementBlock("span", {
2946
2987
  key: 1,
2947
2988
  textContent: vue.toDisplayString(__props.label),
2948
2989
  class: "text-label"
2949
- }, null, 8, _hoisted_4$4)) : vue.createCommentVNode("", true)
2950
- ], 8, _hoisted_2$9),
2990
+ }, null, 8, _hoisted_4$5)) : vue.createCommentVNode("", true)
2991
+ ], 8, _hoisted_2$c),
2951
2992
  hasLabelSlot.value ? (vue.openBlock(), vue.createElementBlock("label", {
2952
2993
  key: 0,
2953
2994
  for: __props.id,
2954
2995
  class: "slot-label cursor-pointer"
2955
2996
  }, [
2956
2997
  vue.renderSlot(_ctx.$slots, "default", { disabled: __props.disabled })
2957
- ], 8, _hoisted_5$2)) : vue.createCommentVNode("", true)
2998
+ ], 8, _hoisted_5$3)) : vue.createCommentVNode("", true)
2958
2999
  ], 2);
2959
3000
  };
2960
3001
  }
2961
3002
  });
2962
- const _hoisted_1$9 = ["data-field-name"];
2963
- const _hoisted_2$8 = ["textContent"];
2964
- const _hoisted_3$5 = {
3003
+ const _hoisted_1$d = ["data-field-name"];
3004
+ const _hoisted_2$b = ["textContent"];
3005
+ const _hoisted_3$6 = {
2965
3006
  key: 1,
2966
3007
  class: "radio-button-group",
2967
3008
  role: "radiogroup"
2968
3009
  };
2969
- const _sfc_main$a = /* @__PURE__ */ vue.defineComponent({
3010
+ const _sfc_main$f = /* @__PURE__ */ vue.defineComponent({
2970
3011
  __name: "BSRadioButtonGroup",
2971
3012
  props: {
2972
3013
  name: { default: () => componentUtil.generateNextName("radioGroup") },
@@ -3049,9 +3090,9 @@
3049
3090
  __props.viewMode ? (vue.openBlock(), vue.createElementBlock("div", {
3050
3091
  key: 0,
3051
3092
  textContent: vue.toDisplayString(modelValueLabel.value)
3052
- }, null, 8, _hoisted_2$8)) : (vue.openBlock(), vue.createElementBlock("div", _hoisted_3$5, [
3093
+ }, null, 8, _hoisted_2$b)) : (vue.openBlock(), vue.createElementBlock("div", _hoisted_3$6, [
3053
3094
  (vue.openBlock(true), vue.createElementBlock(vue.Fragment, null, vue.renderList(__props.items, (item) => {
3054
- return vue.withDirectives((vue.openBlock(), vue.createBlock(_sfc_main$b, {
3095
+ return vue.withDirectives((vue.openBlock(), vue.createBlock(_sfc_main$g, {
3055
3096
  key: itemKey(item),
3056
3097
  disabled: __props.disabled || isDisabledItem(item),
3057
3098
  icon: __props.iconProvider?.(item),
@@ -3066,20 +3107,20 @@
3066
3107
  ]);
3067
3108
  }), 128))
3068
3109
  ])),
3069
- !__props.viewMode ? (vue.openBlock(), vue.createBlock(_sfc_main$l, {
3110
+ !__props.viewMode ? (vue.openBlock(), vue.createBlock(_sfc_main$q, {
3070
3111
  key: 2,
3071
3112
  errors: vue.unref(errors),
3072
3113
  "hide-error-message": __props.hideErrorMessage || __props.disabled && !__props.showErrorMessageOnDisabled
3073
3114
  }, null, 8, ["errors", "hide-error-message"])) : vue.createCommentVNode("", true)
3074
- ], 10, _hoisted_1$9);
3115
+ ], 10, _hoisted_1$d);
3075
3116
  };
3076
3117
  }
3077
3118
  });
3078
- const _hoisted_1$8 = ["tabindex", "onKeydown"];
3079
- const _hoisted_2$7 = { key: 0 };
3080
- const _hoisted_3$4 = ["textContent"];
3081
- const _hoisted_4$3 = ["textContent"];
3082
- const _hoisted_5$1 = ["data-field-name"];
3119
+ const _hoisted_1$c = ["tabindex", "onKeydown"];
3120
+ const _hoisted_2$a = { key: 0 };
3121
+ const _hoisted_3$5 = ["textContent"];
3122
+ const _hoisted_4$4 = ["textContent"];
3123
+ const _hoisted_5$2 = ["data-field-name"];
3083
3124
  const _hoisted_6 = ["textContent"];
3084
3125
  const _hoisted_7 = {
3085
3126
  key: 1,
@@ -3091,7 +3132,7 @@
3091
3132
  key: 2,
3092
3133
  class: "small-progress"
3093
3134
  };
3094
- const _sfc_main$9 = /* @__PURE__ */ vue.defineComponent({
3135
+ const _sfc_main$e = /* @__PURE__ */ vue.defineComponent({
3095
3136
  __name: "BSMultiSelect",
3096
3137
  props: {
3097
3138
  modelValue: { default: () => [] },
@@ -3214,17 +3255,17 @@
3214
3255
  _cache[4] || (_cache[4] = vue.withKeys(($event) => togglePopup(false), ["tab"]))
3215
3256
  ]
3216
3257
  }, [
3217
- __props.viewMode ? (vue.openBlock(), vue.createElementBlock("div", _hoisted_2$7, [
3258
+ __props.viewMode ? (vue.openBlock(), vue.createElementBlock("div", _hoisted_2$a, [
3218
3259
  __props.selectedLabelProvider ? (vue.openBlock(), vue.createElementBlock("span", {
3219
3260
  key: 0,
3220
3261
  textContent: vue.toDisplayString(__props.selectedLabelProvider(selectedItems.value)),
3221
3262
  class: "label"
3222
- }, null, 8, _hoisted_3$4)) : (vue.openBlock(true), vue.createElementBlock(vue.Fragment, { key: 1 }, vue.renderList(selectedItems.value, (item) => {
3263
+ }, null, 8, _hoisted_3$5)) : (vue.openBlock(true), vue.createElementBlock(vue.Fragment, { key: 1 }, vue.renderList(selectedItems.value, (item) => {
3223
3264
  return vue.openBlock(), vue.createElementBlock("span", {
3224
3265
  key: itemKey(item),
3225
3266
  textContent: vue.toDisplayString(itemLabel(item)),
3226
3267
  class: "label"
3227
- }, null, 8, _hoisted_4$3);
3268
+ }, null, 8, _hoisted_4$4);
3228
3269
  }), 128))
3229
3270
  ])) : (vue.openBlock(), vue.createElementBlock(vue.Fragment, { key: 1 }, [
3230
3271
  vue.createElementVNode("div", {
@@ -3253,8 +3294,8 @@
3253
3294
  ])),
3254
3295
  _cache[5] || (_cache[5] = vue.createElementVNode("span", { class: "dropdown-btn" }, "expand_more", -1)),
3255
3296
  loadingItems.value ? (vue.openBlock(), vue.createElementBlock("span", _hoisted_10, "progress_activity")) : vue.createCommentVNode("", true)
3256
- ], 8, _hoisted_5$1),
3257
- !__props.disabled && showPopup.value ? (vue.openBlock(), vue.createBlock(_sfc_main$m, {
3297
+ ], 8, _hoisted_5$2),
3298
+ !__props.disabled && showPopup.value ? (vue.openBlock(), vue.createBlock(_sfc_main$r, {
3258
3299
  key: 0,
3259
3300
  ref_key: "selectPopup",
3260
3301
  ref: selectPopup,
@@ -3272,12 +3313,12 @@
3272
3313
  onRequestClose: _cache[0] || (_cache[0] = ($event) => togglePopup(false))
3273
3314
  }, null, 8, ["base-element", "initial-item", "items", "label-provider", "max-height", "popup-align", "popup-direction", "selected-items", "show-search", "value-provider"])) : vue.createCommentVNode("", true)
3274
3315
  ], 64)),
3275
- !__props.viewMode ? (vue.openBlock(), vue.createBlock(_sfc_main$l, {
3316
+ !__props.viewMode ? (vue.openBlock(), vue.createBlock(_sfc_main$q, {
3276
3317
  key: 2,
3277
3318
  errors: vue.unref(errors),
3278
3319
  "hide-error-message": __props.hideErrorMessage || __props.disabled && !__props.showErrorMessageOnDisabled
3279
3320
  }, null, 8, ["errors", "hide-error-message"])) : vue.createCommentVNode("", true)
3280
- ], 42, _hoisted_1$8)), [
3321
+ ], 42, _hoisted_1$c)), [
3281
3322
  [vue.unref(vClickOutside), () => togglePopup(false)]
3282
3323
  ]);
3283
3324
  };
@@ -3286,14 +3327,10 @@
3286
3327
  dayjs.extend(utc);
3287
3328
  dayjs.extend(timezone);
3288
3329
  const dateInputFormatByResolution = (resolution) => {
3289
- if (resolution === "DAY")
3290
- return "YYYYMMDD";
3291
- else if (resolution === "HOUR")
3292
- return "YYYYMMDDHH";
3293
- else if (resolution === "SECOND")
3294
- return "YYYYMMDDHHmmss";
3295
- else
3296
- return "YYYYMMDDHHmm";
3330
+ if (resolution === "DAY") return "YYYYMMDD";
3331
+ else if (resolution === "HOUR") return "YYYYMMDDHH";
3332
+ else if (resolution === "SECOND") return "YYYYMMDDHHmmss";
3333
+ else return "YYYYMMDDHHmm";
3297
3334
  };
3298
3335
  const convertInputToDateString = (str, inputFormat, endTime, resolution, inputTimeZone, minDateValue, maxDateValue) => {
3299
3336
  if (str) {
@@ -3306,19 +3343,16 @@
3306
3343
  }
3307
3344
  }
3308
3345
  let value = dayjs.tz(str, inputFormat, inputTimeZone);
3309
- if (endTime)
3310
- value = value.endOf(resolution.toLowerCase());
3346
+ if (endTime) value = value.endOf(resolution.toLowerCase());
3311
3347
  const minValue = minDateValue;
3312
3348
  if (minValue) {
3313
3349
  let minDate = dayjs(minValue).tz(inputTimeZone);
3314
- if (value.isBefore(minDate))
3315
- value = minDate;
3350
+ if (value.isBefore(minDate)) value = minDate;
3316
3351
  }
3317
3352
  const maxValue = maxDateValue;
3318
3353
  if (maxValue) {
3319
3354
  let maxDate = dayjs(maxValue).tz(inputTimeZone);
3320
- if (maxDate.isBefore(value))
3321
- value = maxDate;
3355
+ if (maxDate.isBefore(value)) value = maxDate;
3322
3356
  }
3323
3357
  if (resolution === "MINUTE_10" || resolution === "MINUTE_30") {
3324
3358
  const truncateUnit = resolution === "MINUTE_10" ? 10 : 30;
@@ -3348,9 +3382,9 @@
3348
3382
  const normalizeDateInput = (value) => {
3349
3383
  return value.replace(/[^\d-]/g, "");
3350
3384
  };
3351
- const _hoisted_1$7 = { class: "bs-date-input-popup" };
3352
- const _hoisted_2$6 = { class: "buttons" };
3353
- const _sfc_main$8 = /* @__PURE__ */ vue.defineComponent({
3385
+ const _hoisted_1$b = { class: "bs-date-input-popup" };
3386
+ const _hoisted_2$9 = { class: "buttons" };
3387
+ const _sfc_main$d = /* @__PURE__ */ vue.defineComponent({
3354
3388
  __name: "BSDateInputPopup",
3355
3389
  props: {
3356
3390
  modelValue: {},
@@ -3378,7 +3412,7 @@
3378
3412
  emit("close");
3379
3413
  };
3380
3414
  return (_ctx, _cache) => {
3381
- return vue.openBlock(), vue.createBlock(_sfc_main$o, {
3415
+ return vue.openBlock(), vue.createBlock(_sfc_main$t, {
3382
3416
  "base-element": __props.baseElement,
3383
3417
  "popup-align": __props.popupAlign,
3384
3418
  "offset-from-base-element": 4,
@@ -3389,8 +3423,8 @@
3389
3423
  }, ["stop"]))
3390
3424
  }, {
3391
3425
  default: vue.withCtx(() => [
3392
- vue.createElementVNode("div", _hoisted_1$7, [
3393
- vue.createVNode(_sfc_main$j, {
3426
+ vue.createElementVNode("div", _hoisted_1$b, [
3427
+ vue.createVNode(_sfc_main$o, {
3394
3428
  modelValue: date.value,
3395
3429
  "onUpdate:modelValue": _cache[0] || (_cache[0] = ($event) => date.value = $event),
3396
3430
  "display-format": __props.displayFormat,
@@ -3399,14 +3433,14 @@
3399
3433
  "start-year": __props.selectStartYear,
3400
3434
  "time-zone": __props.timeZone
3401
3435
  }, null, 8, ["modelValue", "display-format", "end-year", "resolution", "start-year", "time-zone"]),
3402
- vue.createElementVNode("div", _hoisted_2$6, [
3403
- vue.createVNode(_sfc_main$r, {
3436
+ vue.createElementVNode("div", _hoisted_2$9, [
3437
+ vue.createVNode(_sfc_main$w, {
3404
3438
  caption: __props.okButtonCaption,
3405
3439
  "button-color": "blue",
3406
3440
  class: "min-w-80",
3407
3441
  onClick: emitValue
3408
3442
  }, null, 8, ["caption"]),
3409
- vue.createVNode(_sfc_main$r, {
3443
+ vue.createVNode(_sfc_main$w, {
3410
3444
  caption: __props.cancelButtonCaption,
3411
3445
  class: "min-w-80",
3412
3446
  onClick: close
@@ -3419,16 +3453,16 @@
3419
3453
  };
3420
3454
  }
3421
3455
  });
3422
- const _hoisted_1$6 = {
3456
+ const _hoisted_1$a = {
3423
3457
  key: 0,
3424
3458
  class: "view-mode"
3425
3459
  };
3426
- const _hoisted_2$5 = {
3460
+ const _hoisted_2$8 = {
3427
3461
  key: 1,
3428
3462
  class: "input-area"
3429
3463
  };
3430
- const _hoisted_3$3 = ["id", "placeholder", "disabled", "maxlength", "name", "tabindex", "value"];
3431
- const _sfc_main$7 = /* @__PURE__ */ vue.defineComponent({
3464
+ const _hoisted_3$4 = ["id", "placeholder", "disabled", "maxlength", "name", "tabindex", "value"];
3465
+ const _sfc_main$c = /* @__PURE__ */ vue.defineComponent({
3432
3466
  __name: "BSDateInput",
3433
3467
  props: {
3434
3468
  id: {},
@@ -3635,9 +3669,9 @@
3635
3669
  style: vue.normalizeStyle({ width: __props.width }),
3636
3670
  onKeydown: _cache[2] || (_cache[2] = vue.withKeys(vue.withModifiers(() => togglePopup(false), ["stop", "prevent"]), ["esc"]))
3637
3671
  }, [
3638
- __props.viewMode ? (vue.openBlock(), vue.createElementBlock("div", _hoisted_1$6, [
3672
+ __props.viewMode ? (vue.openBlock(), vue.createElementBlock("div", _hoisted_1$a, [
3639
3673
  vue.createElementVNode("span", null, vue.toDisplayString(viewModeValue.value), 1)
3640
- ])) : (vue.openBlock(), vue.createElementBlock("div", _hoisted_2$5, [
3674
+ ])) : (vue.openBlock(), vue.createElementBlock("div", _hoisted_2$8, [
3641
3675
  vue.createElementVNode("span", {
3642
3676
  class: vue.normalizeClass([{ "bs-clickable": !__props.disabled }, "font-icon"]),
3643
3677
  onClick: _cache[0] || (_cache[0] = ($event) => togglePopup())
@@ -3653,14 +3687,14 @@
3653
3687
  tabindex: __props.tabindex,
3654
3688
  value: focused.value ? vue.unref(stringValue) : formattedValue.value,
3655
3689
  type: "text"
3656
- }, vue.toHandlers(handlers, true)), null, 16, _hoisted_3$3)
3690
+ }, vue.toHandlers(handlers, true)), null, 16, _hoisted_3$4)
3657
3691
  ])),
3658
- !__props.viewMode ? (vue.openBlock(), vue.createBlock(_sfc_main$l, {
3692
+ !__props.viewMode ? (vue.openBlock(), vue.createBlock(_sfc_main$q, {
3659
3693
  key: 2,
3660
3694
  errors: vue.unref(errors),
3661
3695
  "hide-error-message": __props.hideErrorMessage || __props.disabled && !__props.showErrorMessageOnDisabled
3662
3696
  }, null, 8, ["errors", "hide-error-message"])) : vue.createCommentVNode("", true),
3663
- showPopup.value ? (vue.openBlock(), vue.createBlock(_sfc_main$8, {
3697
+ showPopup.value ? (vue.openBlock(), vue.createBlock(_sfc_main$d, {
3664
3698
  key: 3,
3665
3699
  "base-element": rootRef.value,
3666
3700
  "display-format": actualDisplayFormat.value,
@@ -3681,9 +3715,9 @@
3681
3715
  };
3682
3716
  }
3683
3717
  });
3684
- const _hoisted_1$5 = { class: "bs-date-range-popup flex flex-col px-16 py-8" };
3685
- const _hoisted_2$4 = { class: "buttons" };
3686
- const _sfc_main$6 = /* @__PURE__ */ vue.defineComponent({
3718
+ const _hoisted_1$9 = { class: "bs-date-range-popup flex flex-col px-16 py-8" };
3719
+ const _hoisted_2$7 = { class: "buttons" };
3720
+ const _sfc_main$b = /* @__PURE__ */ vue.defineComponent({
3687
3721
  __name: "BSDateRangeInputPopup",
3688
3722
  props: {
3689
3723
  from: {},
@@ -3714,7 +3748,7 @@
3714
3748
  emit("close");
3715
3749
  };
3716
3750
  return (_ctx, _cache) => {
3717
- return vue.openBlock(), vue.createBlock(_sfc_main$o, {
3751
+ return vue.openBlock(), vue.createBlock(_sfc_main$t, {
3718
3752
  "base-element": __props.baseElement,
3719
3753
  "offset-from-base-element": 4,
3720
3754
  "max-height": "auto",
@@ -3723,8 +3757,8 @@
3723
3757
  }, ["stop"]))
3724
3758
  }, {
3725
3759
  default: vue.withCtx(() => [
3726
- vue.createElementVNode("div", _hoisted_1$5, [
3727
- vue.createVNode(_sfc_main$i, {
3760
+ vue.createElementVNode("div", _hoisted_1$9, [
3761
+ vue.createVNode(_sfc_main$n, {
3728
3762
  from: fromValue.value,
3729
3763
  "onUpdate:from": _cache[0] || (_cache[0] = ($event) => fromValue.value = $event),
3730
3764
  to: toValue.value,
@@ -3737,14 +3771,14 @@
3737
3771
  "start-year": __props.selectStartYear,
3738
3772
  "time-zone": __props.timeZone
3739
3773
  }, null, 8, ["from", "to", "disabled-from", "disabled-to", "display-format", "end-year", "resolution", "start-year", "time-zone"]),
3740
- vue.createElementVNode("div", _hoisted_2$4, [
3741
- vue.createVNode(_sfc_main$r, {
3774
+ vue.createElementVNode("div", _hoisted_2$7, [
3775
+ vue.createVNode(_sfc_main$w, {
3742
3776
  caption: __props.okButtonCaption,
3743
3777
  "button-color": "blue",
3744
3778
  class: "min-w-80",
3745
3779
  onClick: emitValue
3746
3780
  }, null, 8, ["caption"]),
3747
- vue.createVNode(_sfc_main$r, {
3781
+ vue.createVNode(_sfc_main$w, {
3748
3782
  caption: __props.cancelButtonCaption,
3749
3783
  class: "min-w-80",
3750
3784
  onClick: close
@@ -3757,17 +3791,17 @@
3757
3791
  };
3758
3792
  }
3759
3793
  });
3760
- const _hoisted_1$4 = {
3794
+ const _hoisted_1$8 = {
3761
3795
  key: 0,
3762
3796
  class: "view-mode"
3763
3797
  };
3764
- const _hoisted_2$3 = {
3798
+ const _hoisted_2$6 = {
3765
3799
  key: 1,
3766
3800
  class: "input-area"
3767
3801
  };
3768
- const _hoisted_3$2 = ["id", "placeholder", "disabled", "maxlength", "name", "tabindex", "value"];
3769
- const _hoisted_4$2 = ["id", "placeholder", "disabled", "maxlength", "name", "tabindex", "value"];
3770
- const _sfc_main$5 = /* @__PURE__ */ vue.defineComponent({
3802
+ const _hoisted_3$3 = ["id", "placeholder", "disabled", "maxlength", "name", "tabindex", "value"];
3803
+ const _hoisted_4$3 = ["id", "placeholder", "disabled", "maxlength", "name", "tabindex", "value"];
3804
+ const _sfc_main$a = /* @__PURE__ */ vue.defineComponent({
3771
3805
  __name: "BSDateRange",
3772
3806
  props: {
3773
3807
  idFrom: {},
@@ -4145,9 +4179,9 @@
4145
4179
  style: vue.normalizeStyle({ width: __props.width }),
4146
4180
  onKeydown: _cache[2] || (_cache[2] = vue.withKeys(vue.withModifiers(() => togglePopup(false), ["stop", "prevent"]), ["esc"]))
4147
4181
  }, [
4148
- __props.viewMode ? (vue.openBlock(), vue.createElementBlock("div", _hoisted_1$4, [
4182
+ __props.viewMode ? (vue.openBlock(), vue.createElementBlock("div", _hoisted_1$8, [
4149
4183
  vue.createElementVNode("span", null, vue.toDisplayString(formattedDateRange.value), 1)
4150
- ])) : (vue.openBlock(), vue.createElementBlock("div", _hoisted_2$3, [
4184
+ ])) : (vue.openBlock(), vue.createElementBlock("div", _hoisted_2$6, [
4151
4185
  vue.createElementVNode("span", {
4152
4186
  class: vue.normalizeClass([{ "bs-clickable": !disabled.value }, "font-icon"]),
4153
4187
  onClick: _cache[0] || (_cache[0] = () => togglePopup())
@@ -4163,7 +4197,7 @@
4163
4197
  tabindex: __props.tabindex,
4164
4198
  value: focusedFrom.value ? vue.unref(stringValueFrom) : formattedFrom.value,
4165
4199
  type: "text"
4166
- }, vue.toHandlers(handlersFrom, true)), null, 16, _hoisted_3$2),
4200
+ }, vue.toHandlers(handlersFrom, true)), null, 16, _hoisted_3$3),
4167
4201
  _cache[3] || (_cache[3] = vue.createElementVNode("span", { class: "px-4" }, "~", -1)),
4168
4202
  vue.createElementVNode("input", vue.mergeProps({
4169
4203
  id: __props.idTo,
@@ -4176,14 +4210,14 @@
4176
4210
  tabindex: __props.tabindex,
4177
4211
  value: focusedTo.value ? vue.unref(stringValueTo) : formattedTo.value,
4178
4212
  type: "text"
4179
- }, vue.toHandlers(handlersTo, true)), null, 16, _hoisted_4$2)
4213
+ }, vue.toHandlers(handlersTo, true)), null, 16, _hoisted_4$3)
4180
4214
  ])),
4181
- !__props.viewMode ? (vue.openBlock(), vue.createBlock(_sfc_main$l, {
4215
+ !__props.viewMode ? (vue.openBlock(), vue.createBlock(_sfc_main$q, {
4182
4216
  key: 2,
4183
4217
  errors: errors.value,
4184
4218
  "hide-error-message": __props.hideErrorMessage || disabled.value && !__props.showErrorMessageOnDisabled
4185
4219
  }, null, 8, ["errors", "hide-error-message"])) : vue.createCommentVNode("", true),
4186
- showPopup.value ? (vue.openBlock(), vue.createBlock(_sfc_main$6, {
4220
+ showPopup.value ? (vue.openBlock(), vue.createBlock(_sfc_main$b, {
4187
4221
  key: 3,
4188
4222
  "base-element": rootRef.value,
4189
4223
  "disabled-from": __props.disabledFrom,
@@ -4208,7 +4242,7 @@
4208
4242
  };
4209
4243
  }
4210
4244
  });
4211
- const _sfc_main$4 = /* @__PURE__ */ vue.defineComponent({
4245
+ const _sfc_main$9 = /* @__PURE__ */ vue.defineComponent({
4212
4246
  __name: "SlideDownTransition",
4213
4247
  setup(__props) {
4214
4248
  const beforeEnter = (el) => {
@@ -4271,12 +4305,12 @@
4271
4305
  };
4272
4306
  }
4273
4307
  });
4274
- const _hoisted_1$3 = {
4308
+ const _hoisted_1$7 = {
4275
4309
  key: 0,
4276
4310
  class: "card-layout-header flex flex-row items-center"
4277
4311
  };
4278
- const _hoisted_2$2 = ["textContent"];
4279
- const _sfc_main$3 = /* @__PURE__ */ vue.defineComponent({
4312
+ const _hoisted_2$5 = ["textContent"];
4313
+ const _sfc_main$8 = /* @__PURE__ */ vue.defineComponent({
4280
4314
  __name: "BSCardLayout",
4281
4315
  props: {
4282
4316
  title: {},
@@ -4290,7 +4324,7 @@
4290
4324
  return vue.openBlock(), vue.createElementBlock("div", {
4291
4325
  class: vue.normalizeClass([{ expanded: expanded.value }, "bs-card-layout"])
4292
4326
  }, [
4293
- !__props.hideTitle ? (vue.openBlock(), vue.createElementBlock("div", _hoisted_1$3, [
4327
+ !__props.hideTitle ? (vue.openBlock(), vue.createElementBlock("div", _hoisted_1$7, [
4294
4328
  vue.createElementVNode("span", {
4295
4329
  class: "expand-btn font-icon bs-clickable",
4296
4330
  onClick: toggleExpand
@@ -4298,13 +4332,13 @@
4298
4332
  vue.createElementVNode("div", {
4299
4333
  textContent: vue.toDisplayString(__props.title),
4300
4334
  class: "card-layout-title"
4301
- }, null, 8, _hoisted_2$2),
4335
+ }, null, 8, _hoisted_2$5),
4302
4336
  _cache[0] || (_cache[0] = vue.createElementVNode("div", { class: "grow" }, null, -1)),
4303
4337
  vue.createElementVNode("div", null, [
4304
4338
  vue.renderSlot(_ctx.$slots, "title-right")
4305
4339
  ])
4306
4340
  ])) : vue.createCommentVNode("", true),
4307
- vue.createVNode(_sfc_main$4, null, {
4341
+ vue.createVNode(_sfc_main$9, null, {
4308
4342
  default: vue.withCtx(() => [
4309
4343
  vue.withDirectives(vue.createElementVNode("div", {
4310
4344
  class: vue.normalizeClass(__props.cardBodyClass)
@@ -4320,6 +4354,742 @@
4320
4354
  };
4321
4355
  }
4322
4356
  });
4357
+ const modalPluginKey = "BlueseaModalPlugin";
4358
+ const modalHandleKey = "BlueseaModalHandle";
4359
+ class ModalHandleImpl {
4360
+ constructor(modal, modalId) {
4361
+ this.modal = modal;
4362
+ this.modalId = modalId;
4363
+ }
4364
+ maximized = false;
4365
+ defaultStyleListener;
4366
+ defaultPositionListener;
4367
+ close() {
4368
+ this.modal.closeModal(this.modalId);
4369
+ }
4370
+ setDefaultStyle(modalStyle) {
4371
+ this.defaultStyleListener?.(modalStyle);
4372
+ }
4373
+ setDefaultPosition(modalPosition) {
4374
+ this.defaultPositionListener?.(modalPosition);
4375
+ }
4376
+ setDefaultStyleListener(listener) {
4377
+ this.defaultStyleListener = listener;
4378
+ }
4379
+ setDefaultPositionListener(listener) {
4380
+ this.defaultPositionListener = listener;
4381
+ }
4382
+ }
4383
+ class BSModal {
4384
+ modalItems = vue.reactive([]);
4385
+ openModal(modalItem) {
4386
+ const modalId = Math.random().toString(36);
4387
+ const handle = new ModalHandleImpl(this, modalId);
4388
+ const registered = {
4389
+ modalId,
4390
+ pageId: modalItem.pageId,
4391
+ component: vue.markRaw(modalItem.component),
4392
+ style: modalItem.style,
4393
+ position: modalItem.position,
4394
+ bind: modalItem.bind,
4395
+ on: modalItem.on,
4396
+ slots: modalItem.slots,
4397
+ modalHandle: handle
4398
+ };
4399
+ this.modalItems.push(registered);
4400
+ return registered;
4401
+ }
4402
+ closeModal(modalItem) {
4403
+ let index = -1;
4404
+ if (typeof modalItem === "string") {
4405
+ index = this.modalItems.findIndex((item) => item.modalId === modalItem);
4406
+ } else {
4407
+ index = this.modalItems.findIndex((item) => item === modalItem);
4408
+ }
4409
+ if (index >= 0) this.modalItems.splice(index, 1);
4410
+ }
4411
+ closeAllModals() {
4412
+ this.modalItems.splice(0, this.modalItems.length);
4413
+ }
4414
+ openAlert(title, message, clickHandler) {
4415
+ const option = {
4416
+ component: vue.defineAsyncComponent(() => Promise.resolve().then(() => BSAlertModal)),
4417
+ bind: {
4418
+ title,
4419
+ message
4420
+ },
4421
+ on: {
4422
+ click: async () => await clickHandler?.()
4423
+ }
4424
+ };
4425
+ return this.openModal(option);
4426
+ }
4427
+ openYesNo(title, message, yesHandler, noHandler) {
4428
+ const option = {
4429
+ component: vue.defineAsyncComponent(() => Promise.resolve().then(() => BSYesNoModal)),
4430
+ bind: {
4431
+ title,
4432
+ message
4433
+ },
4434
+ on: {
4435
+ clickYes: async () => await yesHandler?.(),
4436
+ clickNo: async () => await noHandler?.()
4437
+ }
4438
+ };
4439
+ return this.openModal(option);
4440
+ }
4441
+ install(app) {
4442
+ app.provide(modalPluginKey, this);
4443
+ }
4444
+ }
4445
+ const useModal = () => {
4446
+ const modal = vue.inject(modalPluginKey);
4447
+ if (!modal) throw new Error("BSModal is not initialized.");
4448
+ return modal;
4449
+ };
4450
+ const provideModalHandle = (modalHandle) => {
4451
+ vue.provide(modalHandleKey, modalHandle);
4452
+ };
4453
+ const useModalHandle = () => {
4454
+ const modalHandle = vue.inject(modalHandleKey);
4455
+ if (!modalHandle) throw new Error("ModalHandle not found. Maybe not inside modal component.");
4456
+ return modalHandle;
4457
+ };
4458
+ const createModalPlugin = () => {
4459
+ return new BSModal();
4460
+ };
4461
+ const _sfc_main$7 = /* @__PURE__ */ vue.defineComponent({
4462
+ __name: "BSModalWrapper",
4463
+ props: {
4464
+ modalItem: {}
4465
+ },
4466
+ setup(__props) {
4467
+ const props = __props;
4468
+ const defaultModalPosition = vue.ref();
4469
+ props.modalItem.modalHandle.setDefaultPositionListener(
4470
+ (position) => {
4471
+ defaultModalPosition.value = position;
4472
+ initializeOffset(position);
4473
+ }
4474
+ );
4475
+ const modalPositionStyle = vue.computed(() => {
4476
+ const pos = {
4477
+ ...defaultModalPosition.value,
4478
+ ...props.modalItem.position
4479
+ };
4480
+ const result = [];
4481
+ if (pos.horizontal === "left") result.push("items-start");
4482
+ else if (pos.horizontal === "right") result.push("items-end");
4483
+ else result.push("items-center");
4484
+ if (pos.vertical === "top") result.push("justify-start");
4485
+ else if (pos.vertical === "bottom") result.push("justify-end");
4486
+ else result.push("justify-center");
4487
+ return result;
4488
+ });
4489
+ const defaultModalStyle = vue.ref();
4490
+ props.modalItem.modalHandle.setDefaultStyleListener((style) => {
4491
+ defaultModalStyle.value = style;
4492
+ props.modalItem.escToClose = style.escToClose;
4493
+ });
4494
+ const mergedStyle = vue.computed(() => {
4495
+ const result = {
4496
+ ...defaultModalStyle.value,
4497
+ ...props.modalItem.style,
4498
+ transform: ""
4499
+ };
4500
+ if (props.modalItem.modalHandle.maximized) {
4501
+ delete result.maxWidth;
4502
+ delete result.maxHeight;
4503
+ } else {
4504
+ result.transform = `translate(${offset.value.x}px, ${offset.value.y}px)`;
4505
+ }
4506
+ return result;
4507
+ });
4508
+ provideModalHandle(props.modalItem.modalHandle);
4509
+ const modalComponent = vue.ref();
4510
+ const modalPanel = vue.ref();
4511
+ const offset = vue.ref({ x: 0, y: 0 });
4512
+ const initializeOffset = (defaultPosition) => {
4513
+ if (offset.value.x === 0) {
4514
+ offset.value.x = props.modalItem.position?.offsetX ?? defaultPosition?.offsetX ?? 0;
4515
+ }
4516
+ if (offset.value.y === 0) {
4517
+ offset.value.y = props.modalItem.position?.offsetY ?? defaultPosition?.offsetY ?? 0;
4518
+ }
4519
+ };
4520
+ initializeOffset();
4521
+ let initialPosition = void 0;
4522
+ const startMoveModal = (event) => {
4523
+ if (!props.modalItem.modalHandle.maximized && modalPanel.value === event.target && event.button === 0) {
4524
+ initialPosition = {
4525
+ x: event.clientX - offset.value.x,
4526
+ y: event.clientY - offset.value.y
4527
+ };
4528
+ modalPanel.value.setPointerCapture(event.pointerId);
4529
+ }
4530
+ };
4531
+ const moveModal = (event) => {
4532
+ if (!props.modalItem.modalHandle.maximized && initialPosition) {
4533
+ offset.value.x = event.clientX - initialPosition.x;
4534
+ offset.value.y = event.clientY - initialPosition.y;
4535
+ event.preventDefault();
4536
+ event.stopPropagation();
4537
+ }
4538
+ };
4539
+ const endMoveModal = (event) => {
4540
+ if (!props.modalItem.modalHandle.maximized && initialPosition) {
4541
+ modalPanel.value?.releasePointerCapture(event.pointerId);
4542
+ initialPosition = void 0;
4543
+ }
4544
+ };
4545
+ return (_ctx, _cache) => {
4546
+ return vue.withDirectives((vue.openBlock(), vue.createElementBlock("div", {
4547
+ class: vue.normalizeClass([modalPositionStyle.value, "modal-wrapper flex flex-col"])
4548
+ }, [
4549
+ vue.createElementVNode("div", {
4550
+ ref_key: "modalPanel",
4551
+ ref: modalPanel,
4552
+ class: vue.normalizeClass([[
4553
+ __props.modalItem.style?.styleClass,
4554
+ __props.modalItem.modalHandle.maximized ? "maximized" : void 0
4555
+ ], "modal-panel"]),
4556
+ style: vue.normalizeStyle(mergedStyle.value),
4557
+ onPointerdown: startMoveModal,
4558
+ onPointermove: moveModal,
4559
+ onPointerup: endMoveModal
4560
+ }, [
4561
+ (vue.openBlock(), vue.createBlock(vue.resolveDynamicComponent(__props.modalItem.component), vue.mergeProps({
4562
+ ref_key: "modalComponent",
4563
+ ref: modalComponent
4564
+ }, __props.modalItem.bind || {}, vue.toHandlers(__props.modalItem.on || {})), null, 16))
4565
+ ], 38)
4566
+ ], 2)), [
4567
+ [vue.vShow, modalComponent.value]
4568
+ ]);
4569
+ };
4570
+ }
4571
+ });
4572
+ const _hoisted_1$6 = {
4573
+ key: 0,
4574
+ class: "modal-curtain"
4575
+ };
4576
+ const _sfc_main$6 = /* @__PURE__ */ vue.defineComponent({
4577
+ __name: "BSModalContainer",
4578
+ setup(__props) {
4579
+ const modal = useModal();
4580
+ const modalExists = vue.computed(() => modal.modalItems.length > 0);
4581
+ const disableBodyScroll = (disable) => {
4582
+ document.body.style.overflow = disable ? "hidden" : "auto";
4583
+ };
4584
+ vue.watch(
4585
+ modalExists,
4586
+ () => disableBodyScroll(modalExists.value)
4587
+ );
4588
+ const modalContainer = vue.ref();
4589
+ const getLastModal = () => {
4590
+ return modal.modalItems[modal.modalItems.length - 1];
4591
+ };
4592
+ const escapeLastModal = () => {
4593
+ const lastModal = getLastModal();
4594
+ if (lastModal) {
4595
+ if (lastModal.modalHandle.maximized) {
4596
+ lastModal.modalHandle.maximized = false;
4597
+ } else {
4598
+ lastModal.modalHandle.close();
4599
+ }
4600
+ }
4601
+ };
4602
+ const handleKeyDown = (event) => {
4603
+ if (modalExists.value && event.key === "Escape") {
4604
+ if (event.shiftKey) {
4605
+ escapeLastModal();
4606
+ } else if (modalContainer.value) {
4607
+ const lastModal = getLastModal();
4608
+ if (lastModal?.escToClose) {
4609
+ escapeLastModal();
4610
+ }
4611
+ }
4612
+ }
4613
+ };
4614
+ vue.onMounted(() => {
4615
+ window.addEventListener("keydown", handleKeyDown);
4616
+ });
4617
+ vue.onBeforeUnmount(() => {
4618
+ window.removeEventListener("keydown", handleKeyDown);
4619
+ });
4620
+ return (_ctx, _cache) => {
4621
+ return vue.openBlock(), vue.createElementBlock("div", {
4622
+ ref_key: "modalContainer",
4623
+ ref: modalContainer,
4624
+ class: "bs-modal-container"
4625
+ }, [
4626
+ modalExists.value ? (vue.openBlock(), vue.createElementBlock("div", _hoisted_1$6)) : vue.createCommentVNode("", true),
4627
+ (vue.openBlock(true), vue.createElementBlock(vue.Fragment, null, vue.renderList(vue.unref(modal).modalItems, (item) => {
4628
+ return vue.openBlock(), vue.createBlock(_sfc_main$7, {
4629
+ key: item.modalId,
4630
+ "data-page-id": item.pageId,
4631
+ "modal-item": item
4632
+ }, null, 8, ["data-page-id", "modal-item"]);
4633
+ }), 128))
4634
+ ], 512);
4635
+ };
4636
+ }
4637
+ });
4638
+ const findElement = (maybeElement) => {
4639
+ const val = maybeElement?.value;
4640
+ if (val) {
4641
+ if ("querySelectorAll" in val) return val;
4642
+ if ("$el" in val && "querySelectorAll" in val.$el) return val.$el;
4643
+ }
4644
+ };
4645
+ const findInputComponents = (maybeElement) => {
4646
+ const element = findElement(maybeElement);
4647
+ if (element) {
4648
+ const selector = `input,textarea,select,[role=listbox],[role=radiogroup],[role=group],[role=textbox],[role=img]`;
4649
+ return Array.from(element.querySelectorAll(selector)).map((el) => el);
4650
+ }
4651
+ return [];
4652
+ };
4653
+ const getComponentRootElement = (component) => {
4654
+ return "$el" in component ? component.$el : void 0;
4655
+ };
4656
+ const focusFirstElement = (element) => {
4657
+ const focusable = findFirstFocusableElement(element);
4658
+ if (focusable) {
4659
+ focusable.focus();
4660
+ return true;
4661
+ } else {
4662
+ return false;
4663
+ }
4664
+ };
4665
+ const focusLastElement = (element) => {
4666
+ const focusable = findLastFocusableElement(element);
4667
+ if (focusable) {
4668
+ focusable.focus();
4669
+ return true;
4670
+ } else {
4671
+ return false;
4672
+ }
4673
+ };
4674
+ const findFirstFocusableElement = (element) => {
4675
+ const focusableElementsSelector = 'a[href]:not([disabled]), button:not([disabled]), textarea:not([disabled]), input[type="text"]:not([disabled]), [tabindex]:not([disabled])';
4676
+ return element.querySelector(focusableElementsSelector) || void 0;
4677
+ };
4678
+ const findLastFocusableElement = (element) => {
4679
+ const focusableElementsSelector = 'a[href]:not([disabled]), button:not([disabled]), textarea:not([disabled]), input[type="text"]:not([disabled]), [tabindex]:not([disabled])';
4680
+ const all = element.querySelectorAll(focusableElementsSelector);
4681
+ return all.item(all.length - 1) || void 0;
4682
+ };
4683
+ const getSelfIndex = (element) => {
4684
+ if (element.parentElement) {
4685
+ return Array.from(element.parentElement.children).indexOf(element);
4686
+ } else {
4687
+ return -1;
4688
+ }
4689
+ };
4690
+ const NAMED_COLORS = {
4691
+ aliceblue: "#F0F8FF",
4692
+ antiquewhite: "#FAEBD7",
4693
+ aqua: "#00FFFF",
4694
+ aquamarine: "#7FFFD4",
4695
+ azure: "#F0FFFF",
4696
+ beige: "#F5F5DC",
4697
+ bisque: "#FFE4C4",
4698
+ black: "#000000",
4699
+ blanchedalmond: "#FFEBCD",
4700
+ blue: "#0000FF",
4701
+ blueviolet: "#8A2BE2",
4702
+ brown: "#A52A2A",
4703
+ burlywood: "#DEB887",
4704
+ cadetblue: "#5F9EA0",
4705
+ chartreuse: "#7FFF00",
4706
+ chocolate: "#D2691E",
4707
+ coral: "#FF7F50",
4708
+ cornflowerblue: "#6495ED",
4709
+ cornsilk: "#FFF8DC",
4710
+ crimson: "#DC143C",
4711
+ cyan: "#00FFFF",
4712
+ darkblue: "#00008B",
4713
+ darkcyan: "#008B8B",
4714
+ darkgoldenrod: "#B8860B",
4715
+ darkgray: "#A9A9A9",
4716
+ darkgrey: "#A9A9A9",
4717
+ darkgreen: "#006400",
4718
+ darkkhaki: "#BDB76B",
4719
+ darkmagenta: "#8B008B",
4720
+ darkolivegreen: "#556B2F",
4721
+ darkorange: "#FF8C00",
4722
+ darkorchid: "#9932CC",
4723
+ darkred: "#8B0000",
4724
+ darksalmon: "#E9967A",
4725
+ darkseagreen: "#8FBC8F",
4726
+ darkslateblue: "#483D8B",
4727
+ darkslategray: "#2F4F4F",
4728
+ darkslategrey: "#2F4F4F",
4729
+ darkturquoise: "#00CED1",
4730
+ darkviolet: "#9400D3",
4731
+ deeppink: "#FF1493",
4732
+ deepskyblue: "#00BFFF",
4733
+ dimgray: "#696969",
4734
+ dimgrey: "#696969",
4735
+ dodgerblue: "#1E90FF",
4736
+ firebrick: "#B22222",
4737
+ floralwhite: "#FFFAF0",
4738
+ forestgreen: "#228B22",
4739
+ fuchsia: "#FF00FF",
4740
+ gainsboro: "#DCDCDC",
4741
+ ghostwhite: "#F8F8FF",
4742
+ gold: "#FFD700",
4743
+ goldenrod: "#DAA520",
4744
+ gray: "#808080",
4745
+ grey: "#808080",
4746
+ green: "#008000",
4747
+ greenyellow: "#ADFF2F",
4748
+ honeydew: "#F0FFF0",
4749
+ hotpink: "#FF69B4",
4750
+ indianred: "#CD5C5C",
4751
+ indigo: "#4B0082",
4752
+ ivory: "#FFFFF0",
4753
+ khaki: "#F0E68C",
4754
+ lavender: "#E6E6FA",
4755
+ lavenderblush: "#FFF0F5",
4756
+ lawngreen: "#7CFC00",
4757
+ lemonchiffon: "#FFFACD",
4758
+ lightblue: "#ADD8E6",
4759
+ lightcoral: "#F08080",
4760
+ lightcyan: "#E0FFFF",
4761
+ lightgoldenrodyellow: "#FAFAD2",
4762
+ lightgray: "#D3D3D3",
4763
+ lightgrey: "#D3D3D3",
4764
+ lightgreen: "#90EE90",
4765
+ lightpink: "#FFB6C1",
4766
+ lightsalmon: "#FFA07A",
4767
+ lightseagreen: "#20B2AA",
4768
+ lightskyblue: "#87CEFA",
4769
+ lightslategray: "#778899",
4770
+ lightslategrey: "#778899",
4771
+ lightsteelblue: "#B0C4DE",
4772
+ lightyellow: "#FFFFE0",
4773
+ lime: "#00FF00",
4774
+ limegreen: "#32CD32",
4775
+ linen: "#FAF0E6",
4776
+ magenta: "#FF00FF",
4777
+ maroon: "#800000",
4778
+ mediumaquamarine: "#66CDAA",
4779
+ mediumblue: "#0000CD",
4780
+ mediumorchid: "#BA55D3",
4781
+ mediumpurple: "#9370DB",
4782
+ mediumseagreen: "#3CB371",
4783
+ mediumslateblue: "#7B68EE",
4784
+ mediumspringgreen: "#00FA9A",
4785
+ mediumturquoise: "#48D1CC",
4786
+ mediumvioletred: "#C71585",
4787
+ midnightblue: "#191970",
4788
+ mintcream: "#F5FFFA",
4789
+ mistyrose: "#FFE4E1",
4790
+ moccasin: "#FFE4B5",
4791
+ navajowhite: "#FFDEAD",
4792
+ navy: "#000080",
4793
+ oldlace: "#FDF5E6",
4794
+ olive: "#808000",
4795
+ olivedrab: "#6B8E23",
4796
+ orange: "#FFA500",
4797
+ orangered: "#FF4500",
4798
+ orchid: "#DA70D6",
4799
+ palegoldenrod: "#EEE8AA",
4800
+ palegreen: "#98FB98",
4801
+ paleturquoise: "#AFEEEE",
4802
+ palevioletred: "#DB7093",
4803
+ papayawhip: "#FFEFD5",
4804
+ peachpuff: "#FFDAB9",
4805
+ peru: "#CD853F",
4806
+ pink: "#FFC0CB",
4807
+ plum: "#DDA0DD",
4808
+ powderblue: "#B0E0E6",
4809
+ purple: "#800080",
4810
+ rebeccapurple: "#663399",
4811
+ red: "#FF0000",
4812
+ rosybrown: "#BC8F8F",
4813
+ royalblue: "#4169E1",
4814
+ saddlebrown: "#8B4513",
4815
+ salmon: "#FA8072",
4816
+ sandybrown: "#F4A460",
4817
+ seagreen: "#2E8B57",
4818
+ seashell: "#FFF5EE",
4819
+ sienna: "#A0522D",
4820
+ silver: "#C0C0C0",
4821
+ skyblue: "#87CEEB",
4822
+ slateblue: "#6A5ACD",
4823
+ slategray: "#708090",
4824
+ slategrey: "#708090",
4825
+ snow: "#FFFAFA",
4826
+ springgreen: "#00FF7F",
4827
+ steelblue: "#4682B4",
4828
+ tan: "#D2B48C",
4829
+ teal: "#008080",
4830
+ thistle: "#D8BFD8",
4831
+ tomato: "#FF6347",
4832
+ turquoise: "#40E0D0",
4833
+ violet: "#EE82EE",
4834
+ wheat: "#F5DEB3",
4835
+ white: "#FFFFFF",
4836
+ whitesmoke: "#F5F5F5",
4837
+ yellow: "#FFFF00",
4838
+ yellowgreen: "#9ACD32"
4839
+ };
4840
+ class FocusLoopContext {
4841
+ constructor(el) {
4842
+ this.el = el;
4843
+ }
4844
+ firstEl;
4845
+ lastEl;
4846
+ update() {
4847
+ const first = findFirstFocusableElement(this.el);
4848
+ if (this.firstEl !== first) {
4849
+ this.firstEl?.removeEventListener("keydown", this.onShiftTabKeyDown.bind(this));
4850
+ this.firstEl = first;
4851
+ this.firstEl?.addEventListener("keydown", this.onShiftTabKeyDown.bind(this));
4852
+ }
4853
+ const last = findLastFocusableElement(this.el);
4854
+ if (this.lastEl !== last) {
4855
+ this.lastEl?.removeEventListener("keydown", this.onTabKeyDown.bind(this));
4856
+ this.lastEl = last;
4857
+ this.lastEl?.addEventListener("keydown", this.onTabKeyDown.bind(this));
4858
+ }
4859
+ }
4860
+ onTabKeyDown(event) {
4861
+ if (event.key == "Tab" && !event.shiftKey) {
4862
+ this.firstEl?.focus();
4863
+ event.preventDefault();
4864
+ event.stopPropagation();
4865
+ }
4866
+ }
4867
+ onShiftTabKeyDown(event) {
4868
+ if (event.key == "Tab" && event.shiftKey) {
4869
+ this.lastEl?.focus();
4870
+ event.preventDefault();
4871
+ event.stopPropagation();
4872
+ }
4873
+ }
4874
+ }
4875
+ const VFocusLoop = {
4876
+ mounted: async (el, _binding) => {
4877
+ if (el instanceof HTMLElement) {
4878
+ el.vFocusLoopContext = new FocusLoopContext(el);
4879
+ await vue.nextTick();
4880
+ el.vFocusLoopContext.update();
4881
+ }
4882
+ }
4883
+ };
4884
+ const _hoisted_1$5 = { class: "bs-modal-frame flex flex-col" };
4885
+ const _hoisted_2$4 = {
4886
+ key: 0,
4887
+ class: "title-bar flex flex-row items-center"
4888
+ };
4889
+ const _hoisted_3$2 = { class: "title grow" };
4890
+ const _hoisted_4$2 = ["textContent"];
4891
+ const _hoisted_5$1 = { class: "title-buttons" };
4892
+ const _sfc_main$5 = /* @__PURE__ */ vue.defineComponent({
4893
+ __name: "BSModalFrame",
4894
+ props: {
4895
+ title: {},
4896
+ hideMaximizeButton: { type: Boolean },
4897
+ hideCloseButton: { type: Boolean },
4898
+ closeCaption: { default: "Close" },
4899
+ autoFocus: { type: Boolean }
4900
+ },
4901
+ emits: ["closeModal"],
4902
+ setup(__props, { emit: __emit }) {
4903
+ const props = __props;
4904
+ const emit = __emit;
4905
+ const slots = vue.useSlots();
4906
+ const hasTitleBar = vue.computed(
4907
+ () => props.title || slots["title"] || slots["title-buttons"] || !props.hideCloseButton
4908
+ );
4909
+ const hasButtons = vue.computed(() => slots["buttons"]);
4910
+ const modalHandle = useModalHandle();
4911
+ const toggleMaximize = () => {
4912
+ modalHandle.maximized = !modalHandle.maximized;
4913
+ };
4914
+ const closeModal = () => {
4915
+ modalHandle.close();
4916
+ emit("closeModal");
4917
+ };
4918
+ const modalBody = vue.ref();
4919
+ const modalButtons = vue.ref();
4920
+ vue.onMounted(async () => {
4921
+ await vue.nextTick();
4922
+ if (props.autoFocus) {
4923
+ modalBody.value && focusFirstElement(modalBody.value) || modalButtons.value && focusFirstElement(modalButtons.value);
4924
+ } else if (modalBody.value) {
4925
+ modalBody.value.tabIndex = 0;
4926
+ modalBody.value.focus();
4927
+ modalBody.value.tabIndex = -1;
4928
+ }
4929
+ });
4930
+ return (_ctx, _cache) => {
4931
+ return vue.withDirectives((vue.openBlock(), vue.createElementBlock("div", _hoisted_1$5, [
4932
+ hasTitleBar.value ? (vue.openBlock(), vue.createElementBlock("div", _hoisted_2$4, [
4933
+ vue.createElementVNode("div", _hoisted_3$2, [
4934
+ vue.renderSlot(_ctx.$slots, "title", {}, () => [
4935
+ vue.createElementVNode("span", {
4936
+ textContent: vue.toDisplayString(__props.title)
4937
+ }, null, 8, _hoisted_4$2)
4938
+ ])
4939
+ ]),
4940
+ vue.createElementVNode("div", _hoisted_5$1, [
4941
+ vue.renderSlot(_ctx.$slots, "title-buttons")
4942
+ ]),
4943
+ vue.createElementVNode("div", null, [
4944
+ !__props.hideMaximizeButton ? (vue.openBlock(), vue.createBlock(_sfc_main$w, {
4945
+ key: 0,
4946
+ "left-icon": vue.unref(modalHandle).maximized ? "minimize" : "maximize",
4947
+ title: vue.unref(modalHandle).maximized ? "Restore" : "Maximize",
4948
+ class: "border-0 maximize-btn",
4949
+ onClick: toggleMaximize
4950
+ }, null, 8, ["left-icon", "title"])) : vue.createCommentVNode("", true),
4951
+ !__props.hideCloseButton ? (vue.openBlock(), vue.createBlock(_sfc_main$w, {
4952
+ key: 1,
4953
+ title: __props.closeCaption,
4954
+ class: "border-0 close-btn",
4955
+ "left-icon": "close",
4956
+ onClick: closeModal
4957
+ }, null, 8, ["title"])) : vue.createCommentVNode("", true)
4958
+ ])
4959
+ ])) : vue.createCommentVNode("", true),
4960
+ vue.createElementVNode("div", {
4961
+ ref_key: "modalBody",
4962
+ ref: modalBody,
4963
+ class: "grow overflow-auto outline-none"
4964
+ }, [
4965
+ vue.renderSlot(_ctx.$slots, "default")
4966
+ ], 512),
4967
+ hasButtons.value ? (vue.openBlock(), vue.createElementBlock("div", {
4968
+ key: 1,
4969
+ ref_key: "modalButtons",
4970
+ ref: modalButtons,
4971
+ class: "buttons"
4972
+ }, [
4973
+ vue.renderSlot(_ctx.$slots, "buttons")
4974
+ ], 512)) : vue.createCommentVNode("", true)
4975
+ ])), [
4976
+ [vue.unref(VFocusLoop)]
4977
+ ]);
4978
+ };
4979
+ }
4980
+ });
4981
+ const _hoisted_1$4 = ["textContent"];
4982
+ const _hoisted_2$3 = { class: "text-right" };
4983
+ const _sfc_main$4 = /* @__PURE__ */ vue.defineComponent({
4984
+ __name: "BSAlertModal",
4985
+ props: {
4986
+ title: {},
4987
+ message: {},
4988
+ okCaption: { default: "OK" }
4989
+ },
4990
+ emits: ["click"],
4991
+ setup(__props, { emit: __emit }) {
4992
+ const emit = __emit;
4993
+ const modalHandle = useModalHandle();
4994
+ modalHandle.setDefaultStyle({
4995
+ minWidth: "300px",
4996
+ escToClose: true
4997
+ });
4998
+ const clickOk = () => {
4999
+ emit("click");
5000
+ modalHandle.close();
5001
+ };
5002
+ return (_ctx, _cache) => {
5003
+ return vue.openBlock(), vue.createBlock(_sfc_main$5, {
5004
+ title: __props.title,
5005
+ "auto-focus": ""
5006
+ }, {
5007
+ buttons: vue.withCtx(() => [
5008
+ vue.createElementVNode("div", _hoisted_2$3, [
5009
+ vue.withDirectives(vue.createVNode(_sfc_main$w, {
5010
+ caption: __props.okCaption,
5011
+ "button-color": "blue",
5012
+ class: "min-w-80",
5013
+ "data-id": "okBtn",
5014
+ onClick: clickOk
5015
+ }, null, 8, ["caption"]), [
5016
+ [vue.unref(vFocusOnLoad)]
5017
+ ])
5018
+ ])
5019
+ ]),
5020
+ default: vue.withCtx(() => [
5021
+ vue.createElementVNode("div", {
5022
+ textContent: vue.toDisplayString(__props.message)
5023
+ }, null, 8, _hoisted_1$4)
5024
+ ]),
5025
+ _: 1
5026
+ }, 8, ["title"]);
5027
+ };
5028
+ }
5029
+ });
5030
+ const BSAlertModal = /* @__PURE__ */ Object.freeze(/* @__PURE__ */ Object.defineProperty({
5031
+ __proto__: null,
5032
+ default: _sfc_main$4
5033
+ }, Symbol.toStringTag, { value: "Module" }));
5034
+ const _hoisted_1$3 = ["textContent"];
5035
+ const _hoisted_2$2 = { class: "text-right" };
5036
+ const _sfc_main$3 = /* @__PURE__ */ vue.defineComponent({
5037
+ __name: "BSYesNoModal",
5038
+ props: {
5039
+ title: {},
5040
+ message: {},
5041
+ yesCaption: { default: "Yes" },
5042
+ noCaption: { default: "No" }
5043
+ },
5044
+ emits: ["clickNo", "clickYes"],
5045
+ setup(__props, { emit: __emit }) {
5046
+ const emit = __emit;
5047
+ const modalHandle = useModalHandle();
5048
+ modalHandle.setDefaultStyle({
5049
+ minWidth: "300px",
5050
+ escToClose: true
5051
+ });
5052
+ const clickNo = () => {
5053
+ emit("clickNo");
5054
+ modalHandle.close();
5055
+ };
5056
+ const clickYes = () => {
5057
+ emit("clickYes");
5058
+ modalHandle.close();
5059
+ };
5060
+ return (_ctx, _cache) => {
5061
+ return vue.openBlock(), vue.createBlock(_sfc_main$5, { title: __props.title }, {
5062
+ buttons: vue.withCtx(() => [
5063
+ vue.createElementVNode("div", _hoisted_2$2, [
5064
+ vue.createVNode(_sfc_main$w, {
5065
+ caption: __props.noCaption,
5066
+ class: "min-w-80",
5067
+ "data-id": "noBtn",
5068
+ onClick: clickNo
5069
+ }, null, 8, ["caption"]),
5070
+ vue.createVNode(_sfc_main$w, {
5071
+ caption: __props.yesCaption,
5072
+ "button-color": "blue",
5073
+ class: "ml-8 min-w-80",
5074
+ "data-id": "yesBtn",
5075
+ onClick: clickYes
5076
+ }, null, 8, ["caption"])
5077
+ ])
5078
+ ]),
5079
+ default: vue.withCtx(() => [
5080
+ vue.createElementVNode("div", {
5081
+ textContent: vue.toDisplayString(__props.message)
5082
+ }, null, 8, _hoisted_1$3)
5083
+ ]),
5084
+ _: 1
5085
+ }, 8, ["title"]);
5086
+ };
5087
+ }
5088
+ });
5089
+ const BSYesNoModal = /* @__PURE__ */ Object.freeze(/* @__PURE__ */ Object.defineProperty({
5090
+ __proto__: null,
5091
+ default: _sfc_main$3
5092
+ }, Symbol.toStringTag, { value: "Module" }));
4323
5093
  const _hoisted_1$2 = { class: "bs-notification-container" };
4324
5094
  const _hoisted_2$1 = { class: "top-notification inline-flex flex-col items-center gap-1" };
4325
5095
  const _hoisted_3$1 = ["textContent"];
@@ -4366,7 +5136,7 @@
4366
5136
  })
4367
5137
  ]),
4368
5138
  vue.createElementVNode("div", _hoisted_5, [
4369
- vue.unref(tooltipEntry) ? (vue.openBlock(), vue.createBlock(_sfc_main$n, {
5139
+ vue.unref(tooltipEntry) ? (vue.openBlock(), vue.createBlock(_sfc_main$s, {
4370
5140
  key: 0,
4371
5141
  ref_key: "tooltip",
4372
5142
  ref: tooltip,
@@ -4433,7 +5203,7 @@
4433
5203
  return (_ctx, _cache) => {
4434
5204
  const _component_router_link = vue.resolveComponent("router-link");
4435
5205
  const _component_BSContextMenu = vue.resolveComponent("BSContextMenu", true);
4436
- return vue.openBlock(), vue.createBlock(_sfc_main$o, {
5206
+ return vue.openBlock(), vue.createBlock(_sfc_main$t, {
4437
5207
  ref: "root",
4438
5208
  "base-element": __props.baseElement || { left: __props.left || 0, top: __props.top || 0 },
4439
5209
  "popup-direction": __props.direction,
@@ -4532,49 +5302,95 @@
4532
5302
  };
4533
5303
  }
4534
5304
  });
4535
- exports2.BSButton = _sfc_main$r;
4536
- exports2.BSCalendar = _sfc_main$j;
4537
- exports2.BSCalendarRange = _sfc_main$i;
4538
- exports2.BSCardLayout = _sfc_main$3;
4539
- exports2.BSCheckbox = _sfc_main$d;
4540
- exports2.BSCheckboxGroup = _sfc_main$c;
5305
+ class IllegalAccessError {
5306
+ }
5307
+ exports2.BSAlertModal = _sfc_main$4;
5308
+ exports2.BSButton = _sfc_main$w;
5309
+ exports2.BSCalendar = _sfc_main$o;
5310
+ exports2.BSCalendarRange = _sfc_main$n;
5311
+ exports2.BSCardLayout = _sfc_main$8;
5312
+ exports2.BSCheckbox = _sfc_main$i;
5313
+ exports2.BSCheckboxGroup = _sfc_main$h;
4541
5314
  exports2.BSContextMenu = _sfc_main$1;
4542
5315
  exports2.BSContextMenuContainer = _sfc_main;
4543
5316
  exports2.BSContextMenuPlugin = BSContextMenuPlugin;
4544
- exports2.BSDateInput = _sfc_main$7;
4545
- exports2.BSDateInputPopup = _sfc_main$8;
4546
- exports2.BSDateRange = _sfc_main$5;
4547
- exports2.BSDateRangeInputPopup = _sfc_main$6;
5317
+ exports2.BSDateInput = _sfc_main$c;
5318
+ exports2.BSDateInputPopup = _sfc_main$d;
5319
+ exports2.BSDateRange = _sfc_main$a;
5320
+ exports2.BSDateRangeInputPopup = _sfc_main$b;
4548
5321
  exports2.BSLoadingIcon = BSLoadingIcon;
4549
- exports2.BSMultiSelect = _sfc_main$9;
5322
+ exports2.BSModal = BSModal;
5323
+ exports2.BSModalContainer = _sfc_main$6;
5324
+ exports2.BSModalFrame = _sfc_main$5;
5325
+ exports2.BSMultiSelect = _sfc_main$e;
4550
5326
  exports2.BSNotificationContainer = _sfc_main$2;
4551
- exports2.BSNumberInput = _sfc_main$f;
4552
- exports2.BSPageNavigation = _sfc_main$q;
4553
- exports2.BSPopup = _sfc_main$o;
4554
- exports2.BSRadioButton = _sfc_main$b;
4555
- exports2.BSRadioButtonGroup = _sfc_main$a;
4556
- exports2.BSSelect = _sfc_main$k;
4557
- exports2.BSTextArea = _sfc_main$e;
4558
- exports2.BSTextInput = _sfc_main$g;
4559
- exports2.BSTooltip = _sfc_main$n;
5327
+ exports2.BSNumberInput = _sfc_main$k;
5328
+ exports2.BSPageNavigation = _sfc_main$v;
5329
+ exports2.BSPopup = _sfc_main$t;
5330
+ exports2.BSRadioButton = _sfc_main$g;
5331
+ exports2.BSRadioButtonGroup = _sfc_main$f;
5332
+ exports2.BSSelect = _sfc_main$p;
5333
+ exports2.BSTextArea = _sfc_main$j;
5334
+ exports2.BSTextInput = _sfc_main$l;
5335
+ exports2.BSTooltip = _sfc_main$s;
5336
+ exports2.BSYesNoModal = _sfc_main$3;
4560
5337
  exports2.BlueseaPlugin = BlueseaPlugin;
4561
5338
  exports2.ContextMenuPluginKey = ContextMenuPluginKey;
5339
+ exports2.IllegalAccessError = IllegalAccessError;
5340
+ exports2.NAMED_COLORS = NAMED_COLORS;
4562
5341
  exports2.SavePointImpl = SavePointImpl;
5342
+ exports2.alarmEntries = alarmEntries;
4563
5343
  exports2.cancelProvidedSavePoint = cancelProvidedSavePoint;
5344
+ exports2.closeAlarm = closeAlarm;
5345
+ exports2.componentUtil = componentUtil;
4564
5346
  exports2.createContextMenuPlugin = createContextMenuPlugin;
5347
+ exports2.createModalPlugin = createModalPlugin;
4565
5348
  exports2.debounce = debounce;
5349
+ exports2.defaultKeyProvider = defaultKeyProvider;
5350
+ exports2.defaultLabelProvider = defaultLabelProvider;
5351
+ exports2.emptyKeyProvider = emptyKeyProvider;
5352
+ exports2.emptyLabelProvider = emptyLabelProvider;
5353
+ exports2.executeKeyProviderOrDefault = executeKeyProviderOrDefault;
5354
+ exports2.executeLabelProviderOrDefault = executeLabelProviderOrDefault;
5355
+ exports2.findElement = findElement;
5356
+ exports2.findFirstFocusableElement = findFirstFocusableElement;
5357
+ exports2.findInputComponents = findInputComponents;
5358
+ exports2.findLastFocusableElement = findLastFocusableElement;
5359
+ exports2.focusFirstElement = focusFirstElement;
5360
+ exports2.focusLastElement = focusLastElement;
5361
+ exports2.formatUtil = formatUtil;
5362
+ exports2.getComponentRootElement = getComponentRootElement;
5363
+ exports2.getSelfIndex = getSelfIndex;
5364
+ exports2.hideLoading = hideLoading;
5365
+ exports2.hideTooltip = hideTooltip;
5366
+ exports2.isTooltipDisplayed = isTooltipDisplayed;
5367
+ exports2.modalHandleKey = modalHandleKey;
5368
+ exports2.modalPluginKey = modalPluginKey;
4566
5369
  exports2.notNull = notNull;
5370
+ exports2.notificationEntries = notificationEntries;
4567
5371
  exports2.provideFieldContext = provideFieldContext;
5372
+ exports2.provideModalHandle = provideModalHandle;
4568
5373
  exports2.provideSavePoint = provideSavePoint;
5374
+ exports2.showAlarm = showAlarm;
5375
+ exports2.showLoading = showLoading;
5376
+ exports2.showLoadingIcon = showLoadingIcon;
5377
+ exports2.showNotification = showNotification;
5378
+ exports2.showTooltip = showTooltip;
5379
+ exports2.tooltipEntry = tooltipEntry;
4569
5380
  exports2.tryUntil = tryUntil;
5381
+ exports2.useBlueseaConfig = useBlueseaConfig;
4570
5382
  exports2.useContextMenu = useContextMenu;
4571
5383
  exports2.useContextMenuOptional = useContextMenuOptional;
4572
5384
  exports2.useFieldContext = useFieldContext;
5385
+ exports2.useModal = useModal;
5386
+ exports2.useModalHandle = useModalHandle;
4573
5387
  exports2.useSavePoint = useSavePoint;
4574
5388
  exports2.vClickOutside = vClickOutside;
5389
+ exports2.vFocusLoop = VFocusLoop;
4575
5390
  exports2.vFocusOnLoad = vFocusOnLoad;
4576
5391
  exports2.vTooltip = vTooltip;
4577
5392
  exports2.waitDuring = waitDuring;
4578
5393
  exports2.waitUntil = waitUntil;
5394
+ exports2.withLoading = withLoading;
4579
5395
  Object.defineProperty(exports2, Symbol.toStringTag, { value: "Module" });
4580
5396
  }));