@ouestfrance/sipa-bms-ui 8.20.0 → 8.22.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (46) hide show
  1. package/dist/components/feedback/BmsGhost.vue.d.ts +24 -0
  2. package/dist/components/form/BmsAutocomplete.vue.d.ts +2 -2
  3. package/dist/components/form/BmsFilePicker.vue.d.ts +4 -0
  4. package/dist/components/form/BmsMultiSelect.vue.d.ts +4 -0
  5. package/dist/components/form/BmsServerAutocomplete.vue.d.ts +2 -2
  6. package/dist/components/form/RawAutocomplete.vue.d.ts +11 -3
  7. package/dist/components/layout/BmsFloatingWindow.vue.d.ts +20 -1
  8. package/dist/index.d.ts +2 -1
  9. package/dist/mockServiceWorker.js +1 -1
  10. package/dist/sipa-bms-ui.css +117 -393
  11. package/dist/sipa-bms-ui.es.js +447 -129
  12. package/dist/sipa-bms-ui.es.js.map +1 -1
  13. package/dist/sipa-bms-ui.umd.js +449 -130
  14. package/dist/sipa-bms-ui.umd.js.map +1 -1
  15. package/package.json +12 -12
  16. package/src/assets/scss/_conf.scss +0 -1
  17. package/src/assets/scss/app.scss +0 -1
  18. package/src/components/button/BmsAllButtons.stories.js +50 -23
  19. package/src/components/button/BmsButton.stories.js +153 -59
  20. package/src/components/feedback/BmsGhost.stories.js +60 -0
  21. package/src/components/feedback/BmsGhost.vue +82 -0
  22. package/src/components/feedback/BmsTooltip.vue +15 -1
  23. package/src/components/feedback/UiTooltip.vue +9 -1
  24. package/src/components/form/BmsFilePicker.stories.js +6 -1
  25. package/src/components/form/BmsFilePicker.vue +10 -5
  26. package/src/components/form/BmsMultiSelect.vue +32 -25
  27. package/src/components/form/BmsSelect.vue +18 -16
  28. package/src/components/form/RawAutocomplete.vue +16 -4
  29. package/src/components/form/RawInputText.vue +1 -0
  30. package/src/components/layout/BmsFloatingWindow.stories.js +226 -12
  31. package/src/components/layout/BmsFloatingWindow.vue +286 -13
  32. package/src/components/layout/BmsModal.stories.js +2 -1
  33. package/src/components/layout/BmsSplitWindow.vue +0 -1
  34. package/src/components/table/BmsTableFilters.vue +1 -1
  35. package/src/documentation/button/primaryButton.mdx +142 -0
  36. package/src/documentation/{secondaryButton.mdx → button/secondaryButton.mdx} +2 -2
  37. package/src/documentation/foundation/contributing.mdx +72 -0
  38. package/src/documentation/foundation/gettingstarted.mdx +7 -0
  39. package/src/documentation/{principles.mdx → foundation/principles.mdx} +9 -9
  40. package/src/documentation/icons.mdx +43 -0
  41. package/src/index.ts +3 -0
  42. package/src/showroom/pages/forms.vue +10 -1
  43. package/src/assets/scss/_formkit.scss +0 -353
  44. package/src/components/form/Form.stories.js +0 -35
  45. package/src/documentation/primaryButton.mdx +0 -20
  46. /package/src/documentation/{button.mdx → button/button.mdx} +0 -0
@@ -332,7 +332,7 @@
332
332
 
333
333
  const _hoisted_1$$ = ["href", "target"];
334
334
  const _hoisted_2$G = ["href", "onClick", "target"];
335
- const _sfc_main$1r = /* @__PURE__ */ vue.defineComponent({
335
+ const _sfc_main$1s = /* @__PURE__ */ vue.defineComponent({
336
336
  __name: "BmsLink",
337
337
  props: {
338
338
  to: {},
@@ -382,7 +382,7 @@
382
382
  });
383
383
 
384
384
  const _hoisted_1$_ = ["type"];
385
- const _sfc_main$1q = /* @__PURE__ */ vue.defineComponent({
385
+ const _sfc_main$1r = /* @__PURE__ */ vue.defineComponent({
386
386
  __name: "UiButtonLink",
387
387
  props: {
388
388
  type: {},
@@ -407,7 +407,7 @@
407
407
  type: __props.type
408
408
  }, [
409
409
  vue.renderSlot(_ctx.$slots, "default")
410
- ], 10, _hoisted_1$_)) : (vue.openBlock(), vue.createBlock(_sfc_main$1r, {
410
+ ], 10, _hoisted_1$_)) : (vue.openBlock(), vue.createBlock(_sfc_main$1s, {
411
411
  key: 1,
412
412
  to: __props.to,
413
413
  target: __props.target,
@@ -425,7 +425,7 @@
425
425
  const _hoisted_1$Z = { class: "start" };
426
426
  const _hoisted_2$F = { class: "content" };
427
427
  const _hoisted_3$m = { class: "end" };
428
- const _sfc_main$1p = /* @__PURE__ */ vue.defineComponent({
428
+ const _sfc_main$1q = /* @__PURE__ */ vue.defineComponent({
429
429
  __name: "UiButton",
430
430
  props: {
431
431
  type: { default: "button" },
@@ -438,7 +438,7 @@
438
438
  setup(__props) {
439
439
  const props = __props;
440
440
  return (_ctx, _cache) => {
441
- return vue.openBlock(), vue.createBlock(_sfc_main$1q, vue.normalizeProps(vue.guardReactiveProps(props)), {
441
+ return vue.openBlock(), vue.createBlock(_sfc_main$1r, vue.normalizeProps(vue.guardReactiveProps(props)), {
442
442
  default: vue.withCtx(() => [
443
443
  vue.createElementVNode("span", _hoisted_1$Z, [
444
444
  vue.renderSlot(_ctx.$slots, "start")
@@ -456,7 +456,7 @@
456
456
  }
457
457
  });
458
458
 
459
- const _sfc_main$1o = /* @__PURE__ */ vue.defineComponent({
459
+ const _sfc_main$1p = /* @__PURE__ */ vue.defineComponent({
460
460
  __name: "BmsButton",
461
461
  props: {
462
462
  type: { default: "primary" },
@@ -480,7 +480,7 @@
480
480
  }
481
481
  });
482
482
  return (_ctx, _cache) => {
483
- return vue.openBlock(), vue.createBlock(_sfc_main$1p, {
483
+ return vue.openBlock(), vue.createBlock(_sfc_main$1q, {
484
484
  mode: uiMode.value,
485
485
  color: __props.mode,
486
486
  to: __props.to,
@@ -502,7 +502,7 @@
502
502
  }
503
503
  });
504
504
 
505
- const _sfc_main$1n = /* @__PURE__ */ vue.defineComponent({
505
+ const _sfc_main$1o = /* @__PURE__ */ vue.defineComponent({
506
506
  __name: "BmsIconButton",
507
507
  props: {
508
508
  to: { default: null },
@@ -522,7 +522,7 @@
522
522
  direction: __props.tooltipDirection
523
523
  }, {
524
524
  default: vue.withCtx(() => [
525
- vue.createVNode(_sfc_main$1p, vue.mergeProps(_ctx.$attrs, {
525
+ vue.createVNode(_sfc_main$1q, vue.mergeProps(_ctx.$attrs, {
526
526
  icon: "",
527
527
  to: __props.to,
528
528
  target: __props.target,
@@ -37448,7 +37448,7 @@
37448
37448
  const _hoisted_1$Y = { class: "info-line" };
37449
37449
  const _hoisted_2$E = { class: "icon" };
37450
37450
  const _hoisted_3$l = { class: "message" };
37451
- const _sfc_main$1m = /* @__PURE__ */ vue.defineComponent({
37451
+ const _sfc_main$1n = /* @__PURE__ */ vue.defineComponent({
37452
37452
  __name: "BmsAlert",
37453
37453
  props: {
37454
37454
  message: {},
@@ -37483,7 +37483,7 @@
37483
37483
  ], true)
37484
37484
  ]),
37485
37485
  vue.renderSlot(_ctx.$slots, "action", {}, void 0, true),
37486
- __props.dismissable ? (vue.openBlock(), vue.createBlock(_sfc_main$1n, {
37486
+ __props.dismissable ? (vue.openBlock(), vue.createBlock(_sfc_main$1o, {
37487
37487
  key: 0,
37488
37488
  onClick: _cache[0] || (_cache[0] = ($event) => emits("dismiss"))
37489
37489
  }, {
@@ -37507,13 +37507,13 @@
37507
37507
  return target;
37508
37508
  };
37509
37509
 
37510
- const BmsAlert = /* @__PURE__ */ _export_sfc(_sfc_main$1m, [["__scopeId", "data-v-26caccdd"]]);
37510
+ const BmsAlert = /* @__PURE__ */ _export_sfc(_sfc_main$1n, [["__scopeId", "data-v-26caccdd"]]);
37511
37511
 
37512
37512
  const _hoisted_1$X = {
37513
37513
  key: 0,
37514
37514
  class: "ui-badge__container"
37515
37515
  };
37516
- const _sfc_main$1l = /* @__PURE__ */ vue.defineComponent({
37516
+ const _sfc_main$1m = /* @__PURE__ */ vue.defineComponent({
37517
37517
  __name: "BmsBadge",
37518
37518
  props: {
37519
37519
  pending: { default: 0 },
@@ -37539,14 +37539,14 @@
37539
37539
  }
37540
37540
  });
37541
37541
 
37542
- const BmsBadge = /* @__PURE__ */ _export_sfc(_sfc_main$1l, [["__scopeId", "data-v-8a6297ca"]]);
37542
+ const BmsBadge = /* @__PURE__ */ _export_sfc(_sfc_main$1m, [["__scopeId", "data-v-8a6297ca"]]);
37543
37543
 
37544
37544
  const _hoisted_1$W = {
37545
37545
  key: 0,
37546
37546
  class: "icon"
37547
37547
  };
37548
37548
  const _hoisted_2$D = ["innerHTML"];
37549
- const _sfc_main$1k = /* @__PURE__ */ vue.defineComponent({
37549
+ const _sfc_main$1l = /* @__PURE__ */ vue.defineComponent({
37550
37550
  __name: "BmsCaption",
37551
37551
  props: {
37552
37552
  caption: {}
@@ -37589,7 +37589,7 @@
37589
37589
  }
37590
37590
  });
37591
37591
 
37592
- const BmsCaption = /* @__PURE__ */ _export_sfc(_sfc_main$1k, [["__scopeId", "data-v-b08dd4e0"]]);
37592
+ const BmsCaption = /* @__PURE__ */ _export_sfc(_sfc_main$1l, [["__scopeId", "data-v-b08dd4e0"]]);
37593
37593
 
37594
37594
  const _hoisted_1$V = { class: "circular-progress" };
37595
37595
  const _hoisted_2$C = {
@@ -37597,9 +37597,9 @@
37597
37597
  viewBox: "0 0 100 100"
37598
37598
  };
37599
37599
  const _hoisted_3$k = { transform: "rotate(-90, 50, 50)" };
37600
- const _hoisted_4$d = ["stroke-dashoffset"];
37601
- const _hoisted_5$9 = { class: "percent" };
37602
- const _sfc_main$1j = /* @__PURE__ */ vue.defineComponent({
37600
+ const _hoisted_4$c = ["stroke-dashoffset"];
37601
+ const _hoisted_5$8 = { class: "percent" };
37602
+ const _sfc_main$1k = /* @__PURE__ */ vue.defineComponent({
37603
37603
  __name: "BmsCircularProgress",
37604
37604
  props: ["progress"],
37605
37605
  setup(__props) {
@@ -37625,16 +37625,79 @@
37625
37625
  "stroke-linecap": "round",
37626
37626
  "stroke-dashoffset": 283 - __props.progress * 283 / 100,
37627
37627
  "stroke-dasharray": "283"
37628
- }, null, 8, _hoisted_4$d)
37628
+ }, null, 8, _hoisted_4$c)
37629
37629
  ])
37630
37630
  ])) : vue.createCommentVNode("", true),
37631
- vue.createElementVNode("div", _hoisted_5$9, vue.toDisplayString(__props.progress) + "%", 1)
37631
+ vue.createElementVNode("div", _hoisted_5$8, vue.toDisplayString(__props.progress) + "%", 1)
37632
37632
  ]);
37633
37633
  };
37634
37634
  }
37635
37635
  });
37636
37636
 
37637
- const BmsCircularProgress = /* @__PURE__ */ _export_sfc(_sfc_main$1j, [["__scopeId", "data-v-7869acfb"]]);
37637
+ const BmsCircularProgress = /* @__PURE__ */ _export_sfc(_sfc_main$1k, [["__scopeId", "data-v-7869acfb"]]);
37638
+
37639
+ const SCREEN_MARGIN = 10;
37640
+ const _sfc_main$1j = /* @__PURE__ */ vue.defineComponent({
37641
+ __name: "BmsGhost",
37642
+ props: /* @__PURE__ */ vue.mergeModels({
37643
+ opacityWhenVisible: { default: 0.8 }
37644
+ }, {
37645
+ "modelValue": { type: Boolean, ...{
37646
+ default: false
37647
+ } },
37648
+ "modelModifiers": {}
37649
+ }),
37650
+ emits: ["update:modelValue"],
37651
+ setup(__props) {
37652
+ const visible = vue.useModel(__props, "modelValue");
37653
+ const props = __props;
37654
+ const ghost = vue.ref(null);
37655
+ const x = vue.ref(0);
37656
+ const y = vue.ref(0);
37657
+ vue.onBeforeMount(() => {
37658
+ document.addEventListener("pointermove", onPointerMove);
37659
+ });
37660
+ vue.onBeforeUnmount(() => {
37661
+ document.removeEventListener("pointermove", onPointerMove);
37662
+ });
37663
+ const onPointerMove = (e) => {
37664
+ e.preventDefault();
37665
+ e.stopPropagation();
37666
+ updateGhost(e.clientX, e.clientY);
37667
+ };
37668
+ const updateGhost = (posX, posY) => {
37669
+ if (!ghost.value) return;
37670
+ const rect = ghost.value.getBoundingClientRect();
37671
+ const screenWidth = window.innerWidth;
37672
+ const screenHeight = window.innerHeight;
37673
+ x.value = Math.max(
37674
+ Math.min(posX, screenWidth - rect.width - SCREEN_MARGIN),
37675
+ SCREEN_MARGIN
37676
+ );
37677
+ y.value = Math.max(
37678
+ Math.min(posY, screenHeight - rect.height - SCREEN_MARGIN),
37679
+ SCREEN_MARGIN
37680
+ );
37681
+ };
37682
+ return (_ctx, _cache) => {
37683
+ return vue.openBlock(), vue.createElementBlock("div", {
37684
+ ref_key: "ghost",
37685
+ ref: ghost,
37686
+ "aria-hidden": "true",
37687
+ class: "bms-ghost",
37688
+ style: vue.normalizeStyle({
37689
+ "--ghost-x": `${x.value}px`,
37690
+ "--ghost-y": `${y.value}px`,
37691
+ opacity: visible.value ? props.opacityWhenVisible : 0
37692
+ })
37693
+ }, [
37694
+ vue.renderSlot(_ctx.$slots, "default", {}, void 0, true)
37695
+ ], 4);
37696
+ };
37697
+ }
37698
+ });
37699
+
37700
+ const BmsGhost = /* @__PURE__ */ _export_sfc(_sfc_main$1j, [["__scopeId", "data-v-205789ac"]]);
37638
37701
 
37639
37702
  const _hoisted_1$U = { class: "bms-loader" };
37640
37703
  function transformIntoPx(totransform) {
@@ -38015,6 +38078,58 @@
38015
38078
  };
38016
38079
  }
38017
38080
 
38081
+ function createKeyPredicate(keyFilter) {
38082
+ if (typeof keyFilter === "function")
38083
+ return keyFilter;
38084
+ else if (typeof keyFilter === "string")
38085
+ return (event) => event.key === keyFilter;
38086
+ else if (Array.isArray(keyFilter))
38087
+ return (event) => keyFilter.includes(event.key);
38088
+ return () => true;
38089
+ }
38090
+ function onKeyStroke(...args) {
38091
+ let key;
38092
+ let handler;
38093
+ let options = {};
38094
+ if (args.length === 3) {
38095
+ key = args[0];
38096
+ handler = args[1];
38097
+ options = args[2];
38098
+ } else if (args.length === 2) {
38099
+ if (typeof args[1] === "object") {
38100
+ key = true;
38101
+ handler = args[0];
38102
+ options = args[1];
38103
+ } else {
38104
+ key = args[0];
38105
+ handler = args[1];
38106
+ }
38107
+ } else {
38108
+ key = true;
38109
+ handler = args[0];
38110
+ }
38111
+ const {
38112
+ target = defaultWindow,
38113
+ eventName = "keydown",
38114
+ passive = false,
38115
+ dedupe = false
38116
+ } = options;
38117
+ const predicate = createKeyPredicate(key);
38118
+ const listener = (e) => {
38119
+ if (e.repeat && vue.toValue(dedupe))
38120
+ return;
38121
+ if (predicate(e))
38122
+ handler(e);
38123
+ };
38124
+ return useEventListener(target, eventName, listener, passive);
38125
+ }
38126
+ function onKeyDown(key, handler, options = {}) {
38127
+ return onKeyStroke(key, handler, { ...options, eventName: "keydown" });
38128
+ }
38129
+ function onKeyUp(key, handler, options = {}) {
38130
+ return onKeyStroke(key, handler, { ...options, eventName: "keyup" });
38131
+ }
38132
+
38018
38133
  const ssrWidthSymbol = Symbol("vueuse-ssr-width");
38019
38134
  // @__NO_SIDE_EFFECTS__
38020
38135
  function useSSRWidth() {
@@ -38570,10 +38685,11 @@
38570
38685
  const calculatedTooltipTransform = vue.ref("none");
38571
38686
  const windowSize = useWindowSize();
38572
38687
  const { getTooltipTranslatePosition } = useTooltipHelper();
38688
+ const attrs = vue.useAttrs();
38573
38689
  const props = __props;
38574
38690
  const anchorElement = vue.ref(void 0);
38575
38691
  const classes = vue.computed(
38576
- () => `bms-tooltip__text bms-tooltip__text--${props.direction}`
38692
+ () => `bms-tooltip__text bms-tooltip__text--${props.direction} ${attrs.class ? attrs.class : ""}`
38577
38693
  );
38578
38694
  const setTooltipPosition = async () => {
38579
38695
  if (props.visible && JSON.stringify(anchorElement.value) !== JSON.stringify(props.getAnchorElementValues())) {
@@ -38631,7 +38747,7 @@
38631
38747
  }
38632
38748
  });
38633
38749
 
38634
- const UiTooltip = /* @__PURE__ */ _export_sfc(_sfc_main$1h, [["__scopeId", "data-v-bf923418"]]);
38750
+ const UiTooltip = /* @__PURE__ */ _export_sfc(_sfc_main$1h, [["__scopeId", "data-v-4ae8c6bb"]]);
38635
38751
 
38636
38752
  const _sfc_main$1g = /* @__PURE__ */ vue.defineComponent({
38637
38753
  __name: "BmsTooltip",
@@ -38642,11 +38758,16 @@
38642
38758
  activated: { type: Boolean, default: true }
38643
38759
  },
38644
38760
  setup(__props, { expose: __expose }) {
38761
+ const attrs = vue.useAttrs();
38645
38762
  const tooltip = vue.ref(null);
38646
38763
  const tooltipAnchor = vue.ref();
38647
38764
  const showToolTip = vue.ref(true);
38648
38765
  const { isOutside } = useMouseInElement(tooltipAnchor);
38649
38766
  const anchorVisibility = useElementVisibility(tooltipAnchor);
38767
+ const classes = vue.computed(() => {
38768
+ const parentClasses = attrs.class;
38769
+ return parentClasses?.split(" ").map((cls) => `${cls}__bms-tooltip`).join(" ") ?? "";
38770
+ });
38650
38771
  const isUnderOverlay = () => {
38651
38772
  const overlays = Array.from(document.getElementsByClassName("overlay"));
38652
38773
  if (overlays.length === 0) {
@@ -38688,7 +38809,8 @@
38688
38809
  key: 0,
38689
38810
  visible: showToolTip.value && __props.activated,
38690
38811
  direction: __props.direction,
38691
- getAnchorElementValues
38812
+ getAnchorElementValues,
38813
+ class: vue.normalizeClass(classes.value)
38692
38814
  }, {
38693
38815
  default: vue.withCtx(() => [
38694
38816
  vue.renderSlot(_ctx.$slots, "tooltipText", {}, () => [
@@ -38696,7 +38818,7 @@
38696
38818
  ], true)
38697
38819
  ]),
38698
38820
  _: 3
38699
- }, 8, ["visible", "direction"])) : vue.createCommentVNode("", true)
38821
+ }, 8, ["visible", "direction", "class"])) : vue.createCommentVNode("", true)
38700
38822
  ])),
38701
38823
  __props.activated ? (vue.openBlock(), vue.createElementBlock("div", {
38702
38824
  key: 0,
@@ -38712,7 +38834,7 @@
38712
38834
  }
38713
38835
  });
38714
38836
 
38715
- const BmsTooltip = /* @__PURE__ */ _export_sfc(_sfc_main$1g, [["__scopeId", "data-v-b033f8af"]]);
38837
+ const BmsTooltip = /* @__PURE__ */ _export_sfc(_sfc_main$1g, [["__scopeId", "data-v-5c0e03ac"]]);
38716
38838
 
38717
38839
  const _hoisted_1$T = {
38718
38840
  class: "options-list",
@@ -38821,7 +38943,7 @@
38821
38943
  const _hoisted_1$S = { class: "field__input-label" };
38822
38944
  const _hoisted_2$A = { class: "field__input-icon field__input-icon--start" };
38823
38945
  const _hoisted_3$j = ["type", "value", "placeholder", "required", "disabled", "max", "min", "minlength", "maxlength"];
38824
- const _hoisted_4$c = { class: "field__input-icon field__input-icon--end" };
38946
+ const _hoisted_4$b = { class: "field__input-icon field__input-icon--end" };
38825
38947
  const _sfc_main$1e = /* @__PURE__ */ vue.defineComponent({
38826
38948
  __name: "RawInputText",
38827
38949
  props: {
@@ -38893,9 +39015,10 @@
38893
39015
  maxlength: __props.maxlength,
38894
39016
  onBlur: _cache[0] || (_cache[0] = ($event) => $emits("blur")),
38895
39017
  onInput,
38896
- onFocus: _cache[1] || (_cache[1] = ($event) => $emits("focus"))
39018
+ onFocus: _cache[1] || (_cache[1] = ($event) => $emits("focus")),
39019
+ onClick: _cache[2] || (_cache[2] = ($event) => $emits("click"))
38897
39020
  }, null, 40, _hoisted_3$j),
38898
- vue.createElementVNode("span", _hoisted_4$c, [
39021
+ vue.createElementVNode("span", _hoisted_4$b, [
38899
39022
  vue.renderSlot(_ctx.$slots, "icon-end", {}, void 0, true)
38900
39023
  ])
38901
39024
  ], 2);
@@ -38903,7 +39026,7 @@
38903
39026
  }
38904
39027
  });
38905
39028
 
38906
- const RawInputText = /* @__PURE__ */ _export_sfc(_sfc_main$1e, [["__scopeId", "data-v-4c74b915"]]);
39029
+ const RawInputText = /* @__PURE__ */ _export_sfc(_sfc_main$1e, [["__scopeId", "data-v-d5f058e1"]]);
38907
39030
 
38908
39031
  const _sfc_main$1d = /* @__PURE__ */ vue.defineComponent({
38909
39032
  __name: "RawAutocomplete",
@@ -38927,7 +39050,7 @@
38927
39050
  "modelValue": { required: true },
38928
39051
  "modelModifiers": {}
38929
39052
  }),
38930
- emits: /* @__PURE__ */ vue.mergeModels(["addNewOption", "select"], ["update:modelValue"]),
39053
+ emits: /* @__PURE__ */ vue.mergeModels(["addNewOption", "select", "blur", "focus", "click", "input"], ["update:modelValue"]),
38931
39054
  setup(__props, { expose: __expose, emit: __emit }) {
38932
39055
  const props = __props;
38933
39056
  const modelValue = vue.useModel(__props, "modelValue");
@@ -38944,6 +39067,12 @@
38944
39067
  onClickOutside(rawInput, closeDatalist, {
38945
39068
  ignore: [".datalist-option", ".icon-toggle-button", ".icon-clear"]
38946
39069
  });
39070
+ const onBlur = () => {
39071
+ emits("blur");
39072
+ closeDatalist();
39073
+ };
39074
+ onKeyUp("Escape", onBlur);
39075
+ onKeyUp("Tab", onBlur);
38947
39076
  const classes = vue.computed(() => {
38948
39077
  return { "is-error": props.errors?.length, "is-disabled": props.disabled };
38949
39078
  });
@@ -38981,8 +39110,8 @@
38981
39110
  }
38982
39111
  }
38983
39112
  );
38984
- const onFocus = () => {
38985
- openDatalist();
39113
+ const onClick = () => {
39114
+ isDatalistOpen.value = !isDatalistOpen.value;
38986
39115
  };
38987
39116
  const onInput = () => {
38988
39117
  openDatalist();
@@ -39044,7 +39173,8 @@
39044
39173
  required: __props.required,
39045
39174
  small: __props.small,
39046
39175
  onInput,
39047
- onFocus
39176
+ onClick,
39177
+ onKeyup: vue.withKeys(openDatalist, ["down"])
39048
39178
  }, {
39049
39179
  "icon-start": vue.withCtx(() => [
39050
39180
  vue.renderSlot(_ctx.$slots, "icon-start", {}, void 0, true)
@@ -39077,7 +39207,7 @@
39077
39207
  }
39078
39208
  });
39079
39209
 
39080
- const RawAutocomplete = /* @__PURE__ */ _export_sfc(_sfc_main$1d, [["__scopeId", "data-v-15343285"]]);
39210
+ const RawAutocomplete = /* @__PURE__ */ _export_sfc(_sfc_main$1d, [["__scopeId", "data-v-46667c72"]]);
39081
39211
 
39082
39212
  const _hoisted_1$R = ["innerHTML"];
39083
39213
  const _hoisted_2$z = ["innerHTML"];
@@ -39437,10 +39567,12 @@
39437
39567
  const _hoisted_1$P = { class: "file-upload" };
39438
39568
  const _hoisted_2$x = { class: "file-upload__label" };
39439
39569
  const _hoisted_3$i = { key: 1 };
39440
- const _hoisted_4$b = { class: "file-upload__file-name" };
39570
+ const _hoisted_4$a = { class: "file-upload__file-name" };
39441
39571
  const _sfc_main$18 = /* @__PURE__ */ vue.defineComponent({
39442
39572
  __name: "BmsFilePicker",
39443
39573
  props: {
39574
+ dragOverMessage: { default: "Déposer votre image ici" },
39575
+ dragOffMessage: { default: "Glissez votre image ici ou cliquez pour parcourir" },
39444
39576
  modelValue: {},
39445
39577
  limit: { default: 10 }
39446
39578
  },
@@ -39520,9 +39652,9 @@
39520
39652
  }, [
39521
39653
  vue.createElementVNode("label", _hoisted_2$x, [
39522
39654
  isDragOver.value ? (vue.openBlock(), vue.createElementBlock(vue.Fragment, { key: 0 }, [
39523
- vue.createTextVNode("Déposer votre image ici")
39655
+ vue.createTextVNode(vue.toDisplayString(__props.dragOverMessage), 1)
39524
39656
  ], 64)) : (vue.openBlock(), vue.createElementBlock(vue.Fragment, { key: 1 }, [
39525
- vue.createTextVNode("Glissez votre image ici ou cliquez pour parcourir")
39657
+ vue.createTextVNode(vue.toDisplayString(__props.dragOffMessage), 1)
39526
39658
  ], 64)),
39527
39659
  vue.createElementVNode("input", {
39528
39660
  "data-testid": "file-upload-input-file",
@@ -39536,8 +39668,8 @@
39536
39668
  key: file.name,
39537
39669
  class: "file-upload__file"
39538
39670
  }, [
39539
- vue.createElementVNode("span", _hoisted_4$b, vue.toDisplayString(file.name), 1),
39540
- vue.createVNode(vue.unref(_sfc_main$1n), {
39671
+ vue.createElementVNode("span", _hoisted_4$a, vue.toDisplayString(file.name), 1),
39672
+ vue.createVNode(vue.unref(_sfc_main$1o), {
39541
39673
  onClick: ($event) => onDeleteFile(file)
39542
39674
  }, {
39543
39675
  default: vue.withCtx(() => [
@@ -39553,7 +39685,7 @@
39553
39685
  }
39554
39686
  });
39555
39687
 
39556
- const BmsFilePicker = /* @__PURE__ */ _export_sfc(_sfc_main$18, [["__scopeId", "data-v-c892a845"]]);
39688
+ const BmsFilePicker = /* @__PURE__ */ _export_sfc(_sfc_main$18, [["__scopeId", "data-v-4aaf4346"]]);
39557
39689
 
39558
39690
  const _hoisted_1$O = ["disabled", "name", "value"];
39559
39691
  const _hoisted_2$w = {
@@ -68840,7 +68972,7 @@
68840
68972
  src: getImageSrc(file),
68841
68973
  class: "file-upload__file-img"
68842
68974
  }, null, 8, _hoisted_2$v)) : (vue.openBlock(), vue.createElementBlock("span", _hoisted_3$h, vue.toDisplayString(file.name), 1)),
68843
- vue.createVNode(_sfc_main$1n, {
68975
+ vue.createVNode(_sfc_main$1o, {
68844
68976
  mode: vue.unref(StatusType).Danger,
68845
68977
  onClick: vue.withModifiers(($event) => onDeleteFile(file), ["prevent"]),
68846
68978
  class: "close-button"
@@ -69306,7 +69438,7 @@
69306
69438
  }, [
69307
69439
  vue.renderSlot(_ctx.$slots, "default", {}, void 0, true),
69308
69440
  vue.createElementVNode("span", _hoisted_1$I, [
69309
- __props.canBeDismissed ? (vue.openBlock(), vue.createBlock(vue.unref(_sfc_main$1n), {
69441
+ __props.canBeDismissed ? (vue.openBlock(), vue.createBlock(vue.unref(_sfc_main$1o), {
69310
69442
  key: 0,
69311
69443
  onClick: _cache[0] || (_cache[0] = vue.withModifiers(($event) => emits("dismiss"), ["stop"]))
69312
69444
  }, {
@@ -69407,26 +69539,37 @@
69407
69539
  "modelValue": { default: [] },
69408
69540
  "modelModifiers": {}
69409
69541
  }),
69410
- emits: ["update:modelValue"],
69411
- setup(__props) {
69542
+ emits: /* @__PURE__ */ vue.mergeModels(["select", "input"], ["update:modelValue"]),
69543
+ setup(__props, { emit: __emit }) {
69412
69544
  const props = __props;
69545
+ const emits = __emit;
69546
+ const modelValue = vue.useModel(__props, "modelValue");
69413
69547
  const inputElement = vue.ref(null);
69414
69548
  const isDatalistOpen = vue.ref(false);
69549
+ const searching = vue.ref("");
69415
69550
  const closeDatalist = () => isDatalistOpen.value = false;
69416
69551
  const openDatalist = () => {
69417
69552
  if (!props.disabled) {
69418
69553
  isDatalistOpen.value = true;
69419
69554
  }
69420
69555
  };
69421
- const searching = vue.ref("");
69422
- const modelValue = vue.useModel(__props, "modelValue");
69423
- onClickOutside(inputElement, closeDatalist, {
69424
- ignore: [".datalist-option", ".icon-toggle-button"]
69425
- });
69426
69556
  const onBackspace = () => {
69427
69557
  if (searching.value.length === 0 && modelValue.value && modelValue.value.length > 0)
69428
69558
  modelValue.value.splice(-1);
69429
69559
  };
69560
+ onClickOutside(inputElement, closeDatalist, {
69561
+ ignore: [".datalist-option", ".icon-toggle-button"]
69562
+ });
69563
+ onKeyUp("Escape", closeDatalist);
69564
+ onKeyUp("Tab", closeDatalist);
69565
+ onKeyDown("Backspace", onBackspace);
69566
+ const onSelectClick = () => {
69567
+ isDatalistOpen.value = !isDatalistOpen.value;
69568
+ };
69569
+ const onInput = (e) => {
69570
+ emits("input", e);
69571
+ openDatalist();
69572
+ };
69430
69573
  const setFocus = () => {
69431
69574
  if (inputElement.value) {
69432
69575
  inputElement.value.focus();
@@ -69439,8 +69582,8 @@
69439
69582
  modelValue.value = (modelValue.value ?? []).concat(option.value);
69440
69583
  }
69441
69584
  searching.value = "";
69585
+ emits("select", option);
69442
69586
  setFocus();
69443
- closeDatalist();
69444
69587
  };
69445
69588
  const removeOption = (value) => {
69446
69589
  modelValue.value = (modelValue.value ?? []).filter((o) => o !== value);
@@ -69472,7 +69615,7 @@
69472
69615
  "model-value": modelValue.value,
69473
69616
  open: isDatalistOpen.value,
69474
69617
  onSelect,
69475
- onClick: setFocus
69618
+ onClick: onSelectClick
69476
69619
  }), {
69477
69620
  input: vue.withCtx(() => [
69478
69621
  vue.createElementVNode("div", _hoisted_1$H, [
@@ -69496,13 +69639,8 @@
69496
69639
  "onUpdate:modelValue": _cache[0] || (_cache[0] = ($event) => searching.value = $event),
69497
69640
  class: "search",
69498
69641
  disabled: __props.disabled,
69499
- onFocus: openDatalist,
69500
- onClick: openDatalist,
69501
- onKeyup: [
69502
- vue.withKeys(openDatalist, ["down"]),
69503
- vue.withKeys(onBackspace, ["backspace"])
69504
- ],
69505
- onInput: openDatalist
69642
+ onInput,
69643
+ onKeyup: vue.withKeys(openDatalist, ["down"])
69506
69644
  }, null, 40, _hoisted_2$s), [
69507
69645
  [vue.vModelText, searching.value]
69508
69646
  ])
@@ -69515,12 +69653,10 @@
69515
69653
  })) : (vue.openBlock(), vue.createElementBlock(vue.Fragment, { key: 1 }, [
69516
69654
  isDatalistOpen.value ? (vue.openBlock(), vue.createBlock(vue.unref(ChevronUp), {
69517
69655
  key: 0,
69518
- class: "icon icon-toggle-button",
69519
- onClick: closeDatalist
69656
+ class: "icon icon-toggle-button"
69520
69657
  })) : (vue.openBlock(), vue.createBlock(vue.unref(ChevronDown), {
69521
69658
  key: 1,
69522
- class: "icon icon-toggle-button",
69523
- onClick: openDatalist
69659
+ class: "icon icon-toggle-button"
69524
69660
  }))
69525
69661
  ], 64))
69526
69662
  ])
@@ -69543,7 +69679,7 @@
69543
69679
  }
69544
69680
  });
69545
69681
 
69546
- const BmsMultiSelect = /* @__PURE__ */ _export_sfc(_sfc_main$R, [["__scopeId", "data-v-b8b817ba"]]);
69682
+ const BmsMultiSelect = /* @__PURE__ */ _export_sfc(_sfc_main$R, [["__scopeId", "data-v-970d00fe"]]);
69547
69683
 
69548
69684
  const _sfc_main$Q = /* @__PURE__ */ vue.defineComponent({
69549
69685
  __name: "BmsSearch",
@@ -86849,6 +86985,7 @@
86849
86985
  emits: /* @__PURE__ */ vue.mergeModels(["select"], ["update:modelValue"]),
86850
86986
  setup(__props, { expose: __expose, emit: __emit }) {
86851
86987
  const props = __props;
86988
+ const emits = __emit;
86852
86989
  const modelValue = vue.useModel(__props, "modelValue");
86853
86990
  const inputElement = vue.ref(null);
86854
86991
  const isDatalistOpen = vue.ref(props.open);
@@ -86861,10 +86998,11 @@
86861
86998
  setFocus();
86862
86999
  }
86863
87000
  };
86864
- const emits = __emit;
86865
87001
  onClickOutside(inputElement, closeDatalist, {
86866
87002
  ignore: [".datalist-option", ".icon-toggle-button"]
86867
87003
  });
87004
+ onKeyUp("Escape", closeDatalist);
87005
+ onKeyUp("Tab", closeDatalist);
86868
87006
  const displayValue = vue.computed(() => {
86869
87007
  const option = props.options.find(
86870
87008
  (o) => _.isEqual(o.value, modelValue.value)
@@ -86883,6 +87021,12 @@
86883
87021
  setFocus();
86884
87022
  closeDatalist();
86885
87023
  };
87024
+ const onSelectClick = () => {
87025
+ isDatalistOpen.value = !isDatalistOpen.value;
87026
+ if (isDatalistOpen) {
87027
+ setFocus();
87028
+ }
87029
+ };
86886
87030
  __expose({
86887
87031
  setFocus
86888
87032
  });
@@ -86890,7 +87034,7 @@
86890
87034
  return vue.openBlock(), vue.createBlock(RawSelect, vue.mergeProps(_ctx.$props, {
86891
87035
  open: isDatalistOpen.value,
86892
87036
  onSelect,
86893
- onClick: setFocus
87037
+ onClick: onSelectClick
86894
87038
  }), {
86895
87039
  input: vue.withCtx(() => [
86896
87040
  vue.createElementVNode("input", {
@@ -86903,19 +87047,15 @@
86903
87047
  placeholder: __props.placeholder,
86904
87048
  required: __props.required,
86905
87049
  disabled: __props.disabled,
86906
- onFocus: openDatalist,
86907
- onClick: openDatalist,
86908
87050
  onKeyup: vue.withKeys(openDatalist, ["down"])
86909
87051
  }, null, 40, _hoisted_1$G),
86910
87052
  vue.createElementVNode("span", _hoisted_2$r, [
86911
87053
  isDatalistOpen.value ? (vue.openBlock(), vue.createBlock(vue.unref(ChevronUp), {
86912
87054
  key: 0,
86913
- class: "icon-toggle-button",
86914
- onClick: closeDatalist
87055
+ class: "icon-toggle-button"
86915
87056
  })) : (vue.openBlock(), vue.createBlock(vue.unref(ChevronDown), {
86916
87057
  key: 1,
86917
- class: "icon-toggle-button",
86918
- onClick: openDatalist
87058
+ class: "icon-toggle-button"
86919
87059
  }))
86920
87060
  ])
86921
87061
  ]),
@@ -86925,7 +87065,7 @@
86925
87065
  }
86926
87066
  });
86927
87067
 
86928
- const BmsSelect = /* @__PURE__ */ _export_sfc(_sfc_main$P, [["__scopeId", "data-v-7aef9c6c"]]);
87068
+ const BmsSelect = /* @__PURE__ */ _export_sfc(_sfc_main$P, [["__scopeId", "data-v-fa4e9db0"]]);
86929
87069
 
86930
87070
  const _hoisted_1$F = ["value", "required", "placeholder", "disabled"];
86931
87071
  const _sfc_main$O = /* @__PURE__ */ vue.defineComponent({
@@ -87071,7 +87211,7 @@
87071
87211
  class: vue.normalizeClass(["card__body", { animated: __props.animated, hasAction: !!_ctx.$slots.action }])
87072
87212
  }, [
87073
87213
  vue.createElementVNode("div", _hoisted_1$D, [
87074
- __props.to ? (vue.openBlock(), vue.createBlock(_sfc_main$1r, {
87214
+ __props.to ? (vue.openBlock(), vue.createBlock(_sfc_main$1s, {
87075
87215
  key: 0,
87076
87216
  class: "card__body__content__link",
87077
87217
  to: __props.to
@@ -87093,15 +87233,20 @@
87093
87233
 
87094
87234
  const BmsCard = /* @__PURE__ */ _export_sfc(_sfc_main$M, [["__scopeId", "data-v-cff3f84d"]]);
87095
87235
 
87096
- const _hoisted_1$C = { class: "floating-window-wrapper" };
87097
- const _hoisted_2$o = { class: "floating-window" };
87098
- const _hoisted_3$f = { class: "floating-window__header" };
87099
- const _hoisted_4$a = { class: "floating-window__header__buttons" };
87100
- const _hoisted_5$8 = { class: "floating-window__content" };
87236
+ const _hoisted_1$C = { class: "floating-window__header__title" };
87237
+ const _hoisted_2$o = { class: "floating-window__header__buttons" };
87238
+ const _hoisted_3$f = { class: "floating-window__content" };
87101
87239
  const _sfc_main$L = /* @__PURE__ */ vue.defineComponent({
87102
87240
  __name: "BmsFloatingWindow",
87103
87241
  props: /* @__PURE__ */ vue.mergeModels({
87104
- title: {}
87242
+ title: {},
87243
+ defaultPlacement: { default: "center" },
87244
+ expandable: { type: Boolean, default: false },
87245
+ expandedWidth: { default: "100%" },
87246
+ expandedHeight: { default: "100%" },
87247
+ expandTarget: { default: void 0 },
87248
+ width: { default: "50%" },
87249
+ height: { default: "40%" }
87105
87250
  }, {
87106
87251
  "modelValue": { type: Boolean, ...{
87107
87252
  default: false
@@ -87110,23 +87255,196 @@
87110
87255
  }),
87111
87256
  emits: ["update:modelValue"],
87112
87257
  setup(__props) {
87258
+ const props = __props;
87113
87259
  const open = vue.useModel(__props, "modelValue");
87260
+ const wrapperRef = vue.ref(null);
87261
+ const windowRef = vue.ref(null);
87262
+ const position = vue.ref(null);
87263
+ const computedSize = vue.ref(null);
87264
+ const isDragging = vue.ref(false);
87265
+ const dragOffset = vue.ref({ x: 0, y: 0 });
87266
+ const isExpanded = vue.ref(false);
87267
+ const positionBeforeExpand = vue.ref(null);
87268
+ const expandedStyle = vue.ref(null);
87269
+ function computeInitialPosition() {
87270
+ if (!wrapperRef.value || !windowRef.value) return null;
87271
+ const wrapperRect = wrapperRef.value.getBoundingClientRect();
87272
+ const windowRect = windowRef.value.getBoundingClientRect();
87273
+ const padding = 16;
87274
+ switch (props.defaultPlacement) {
87275
+ case "top-left":
87276
+ return { x: wrapperRect.left + padding, y: wrapperRect.top + padding };
87277
+ case "top-right":
87278
+ return {
87279
+ x: wrapperRect.right - windowRect.width - padding,
87280
+ y: wrapperRect.top + padding
87281
+ };
87282
+ case "bottom-left":
87283
+ return {
87284
+ x: wrapperRect.left + padding,
87285
+ y: wrapperRect.bottom - windowRect.height - padding
87286
+ };
87287
+ case "bottom-right":
87288
+ return {
87289
+ x: wrapperRect.right - windowRect.width - padding,
87290
+ y: wrapperRect.bottom - windowRect.height - padding
87291
+ };
87292
+ case "center":
87293
+ default:
87294
+ return null;
87295
+ }
87296
+ }
87297
+ function initPosition() {
87298
+ if (props.defaultPlacement !== "center" && !position.value) {
87299
+ position.value = computeInitialPosition();
87300
+ }
87301
+ }
87302
+ vue.onMounted(() => {
87303
+ if (open.value) {
87304
+ initPosition();
87305
+ }
87306
+ });
87307
+ vue.watch(open, (newVal) => {
87308
+ if (newVal) {
87309
+ requestAnimationFrame(initPosition);
87310
+ }
87311
+ });
87312
+ const windowStyle = vue.computed(() => {
87313
+ if (isExpanded.value && expandedStyle.value) {
87314
+ return expandedStyle.value;
87315
+ }
87316
+ const sizeStyle = {};
87317
+ if (computedSize.value) {
87318
+ sizeStyle.width = `${computedSize.value.width}px`;
87319
+ sizeStyle.height = `${computedSize.value.height}px`;
87320
+ } else {
87321
+ if (props.width) {
87322
+ sizeStyle.width = props.width;
87323
+ }
87324
+ if (props.height) {
87325
+ sizeStyle.height = props.height;
87326
+ }
87327
+ }
87328
+ if (!position.value) {
87329
+ return sizeStyle;
87330
+ }
87331
+ return {
87332
+ position: "absolute",
87333
+ left: `${position.value.x}px`,
87334
+ top: `${position.value.y}px`,
87335
+ ...sizeStyle
87336
+ };
87337
+ });
87338
+ function computeExpandedStyle() {
87339
+ if (props.expandTarget) {
87340
+ const targetEl = document.querySelector(props.expandTarget);
87341
+ if (targetEl) {
87342
+ const targetRect = targetEl.getBoundingClientRect();
87343
+ return {
87344
+ position: "fixed",
87345
+ left: `${targetRect.left}px`,
87346
+ top: `${targetRect.top}px`,
87347
+ width: props.expandedWidth === "100%" ? `${targetRect.width}px` : props.expandedWidth,
87348
+ height: props.expandedHeight === "100%" ? `${targetRect.height}px` : props.expandedHeight,
87349
+ maxWidth: "none",
87350
+ maxHeight: "none"
87351
+ };
87352
+ }
87353
+ }
87354
+ return {
87355
+ position: "absolute",
87356
+ width: props.expandedWidth,
87357
+ height: props.expandedHeight,
87358
+ maxWidth: "none",
87359
+ maxHeight: "none"
87360
+ };
87361
+ }
87362
+ function toggleExpand() {
87363
+ if (isExpanded.value) {
87364
+ expandedStyle.value = null;
87365
+ position.value = positionBeforeExpand.value;
87366
+ isExpanded.value = false;
87367
+ } else {
87368
+ positionBeforeExpand.value = position.value;
87369
+ expandedStyle.value = computeExpandedStyle();
87370
+ isExpanded.value = true;
87371
+ }
87372
+ }
87373
+ function onDragStart(event) {
87374
+ if (event.target.closest(".floating-window__header__buttons")) {
87375
+ return;
87376
+ }
87377
+ if (isExpanded.value) {
87378
+ return;
87379
+ }
87380
+ isDragging.value = true;
87381
+ if (windowRef.value) {
87382
+ const rect = windowRef.value.getBoundingClientRect();
87383
+ dragOffset.value = {
87384
+ x: event.clientX - rect.left,
87385
+ y: event.clientY - rect.top
87386
+ };
87387
+ if (!computedSize.value) {
87388
+ computedSize.value = { width: rect.width, height: rect.height };
87389
+ }
87390
+ if (!position.value) {
87391
+ position.value = { x: rect.left, y: rect.top };
87392
+ }
87393
+ }
87394
+ document.addEventListener("mousemove", onDrag);
87395
+ document.addEventListener("mouseup", onDragEnd);
87396
+ }
87397
+ function onDrag(event) {
87398
+ if (!isDragging.value) return;
87399
+ position.value = {
87400
+ x: event.clientX - dragOffset.value.x,
87401
+ y: event.clientY - dragOffset.value.y
87402
+ };
87403
+ }
87404
+ function onDragEnd() {
87405
+ isDragging.value = false;
87406
+ document.removeEventListener("mousemove", onDrag);
87407
+ document.removeEventListener("mouseup", onDragEnd);
87408
+ }
87114
87409
  return (_ctx, _cache) => {
87115
- return vue.openBlock(), vue.createElementBlock("div", _hoisted_1$C, [
87116
- vue.withDirectives(vue.createElementVNode("div", _hoisted_2$o, [
87117
- vue.createElementVNode("div", _hoisted_3$f, [
87118
- vue.createElementVNode("h2", null, vue.toDisplayString(__props.title), 1),
87119
- vue.createElementVNode("div", _hoisted_4$a, [
87120
- vue.createVNode(_sfc_main$1n, {
87121
- "tooltip-text": "Maximiser la fenêtre",
87122
- disabled: ""
87410
+ return vue.openBlock(), vue.createElementBlock("div", {
87411
+ ref_key: "wrapperRef",
87412
+ ref: wrapperRef,
87413
+ class: "floating-window-wrapper"
87414
+ }, [
87415
+ isDragging.value ? (vue.openBlock(), vue.createElementBlock("div", {
87416
+ key: 0,
87417
+ class: "floating-window__drag-overlay",
87418
+ onMousemove: onDrag,
87419
+ onMouseup: onDragEnd
87420
+ }, null, 32)) : vue.createCommentVNode("", true),
87421
+ vue.withDirectives(vue.createElementVNode("div", {
87422
+ ref_key: "windowRef",
87423
+ ref: windowRef,
87424
+ class: vue.normalizeClass(["floating-window", {
87425
+ "floating-window--expanded": isExpanded.value,
87426
+ "floating-window--dragging": isDragging.value
87427
+ }]),
87428
+ style: vue.normalizeStyle(windowStyle.value)
87429
+ }, [
87430
+ vue.createElementVNode("div", {
87431
+ class: "floating-window__header",
87432
+ onMousedown: onDragStart
87433
+ }, [
87434
+ vue.createElementVNode("h3", _hoisted_1$C, vue.toDisplayString(__props.title), 1),
87435
+ vue.createElementVNode("div", _hoisted_2$o, [
87436
+ __props.expandable ? (vue.openBlock(), vue.createBlock(_sfc_main$1o, {
87437
+ key: 0,
87438
+ class: vue.normalizeClass(["floating-window__expand-btn", { "floating-window__expand-btn--expanded": isExpanded.value }]),
87439
+ "tooltip-text": isExpanded.value ? "Réduire la fenêtre" : "Maximiser la fenêtre",
87440
+ onClick: vue.withModifiers(toggleExpand, ["prevent", "stop"])
87123
87441
  }, {
87124
87442
  default: vue.withCtx(() => [
87125
- vue.createVNode(vue.unref(Maximize2))
87443
+ isExpanded.value ? (vue.openBlock(), vue.createBlock(vue.unref(Minimize2), { key: 0 })) : (vue.openBlock(), vue.createBlock(vue.unref(Maximize2), { key: 1 }))
87126
87444
  ]),
87127
87445
  _: 1
87128
- }),
87129
- vue.createVNode(_sfc_main$1n, {
87446
+ }, 8, ["class", "tooltip-text"])) : vue.createCommentVNode("", true),
87447
+ vue.createVNode(_sfc_main$1o, {
87130
87448
  onClick: _cache[0] || (_cache[0] = vue.withModifiers(($event) => open.value = false, ["prevent", "stop"]))
87131
87449
  }, {
87132
87450
  default: vue.withCtx(() => [
@@ -87135,19 +87453,19 @@
87135
87453
  _: 1
87136
87454
  })
87137
87455
  ])
87138
- ]),
87139
- vue.createElementVNode("div", _hoisted_5$8, [
87456
+ ], 32),
87457
+ vue.createElementVNode("div", _hoisted_3$f, [
87140
87458
  vue.renderSlot(_ctx.$slots, "default", {}, void 0, true)
87141
87459
  ])
87142
- ], 512), [
87460
+ ], 6), [
87143
87461
  [vue.vShow, open.value]
87144
87462
  ])
87145
- ]);
87463
+ ], 512);
87146
87464
  };
87147
87465
  }
87148
87466
  });
87149
87467
 
87150
- const BmsFloatingWindow = /* @__PURE__ */ _export_sfc(_sfc_main$L, [["__scopeId", "data-v-fdb4e567"]]);
87468
+ const BmsFloatingWindow = /* @__PURE__ */ _export_sfc(_sfc_main$L, [["__scopeId", "data-v-3023af4c"]]);
87151
87469
 
87152
87470
  const _hoisted_1$B = { class: "form-section" };
87153
87471
  const _hoisted_2$n = {
@@ -90122,7 +90440,7 @@
90122
90440
  key: 0,
90123
90441
  class: vue.normalizeClass(["bms-short-link-menu", { "bms-short-link-menu__outline": __props.outline }])
90124
90442
  }, [
90125
- !!__props.helpLink ? (vue.openBlock(), vue.createBlock(_sfc_main$1n, {
90443
+ !!__props.helpLink ? (vue.openBlock(), vue.createBlock(_sfc_main$1o, {
90126
90444
  key: 0,
90127
90445
  "tooltip-text": "Voir la documentation",
90128
90446
  to: __props.helpLink,
@@ -90135,7 +90453,7 @@
90135
90453
  ]),
90136
90454
  _: 3
90137
90455
  }, 8, ["to"])) : vue.createCommentVNode("", true),
90138
- !!__props.activityLink ? (vue.openBlock(), vue.createBlock(_sfc_main$1n, {
90456
+ !!__props.activityLink ? (vue.openBlock(), vue.createBlock(_sfc_main$1o, {
90139
90457
  key: 1,
90140
90458
  "tooltip-text": "Voir l'activité",
90141
90459
  to: __props.activityLink,
@@ -90387,7 +90705,7 @@
90387
90705
  ])
90388
90706
  ], true)
90389
90707
  ]),
90390
- vue.createVNode(_sfc_main$1n, {
90708
+ vue.createVNode(_sfc_main$1o, {
90391
90709
  disabled: !isModalClosable.value,
90392
90710
  onClick: dismissModal,
90393
90711
  "data-testid": "close-modal"
@@ -90413,7 +90731,7 @@
90413
90731
  modalData: props.modelValue
90414
90732
  }, () => [
90415
90733
  (vue.openBlock(true), vue.createElementBlock(vue.Fragment, null, vue.renderList(buttons.value, (button) => {
90416
- return vue.openBlock(), vue.createBlock(_sfc_main$1o, {
90734
+ return vue.openBlock(), vue.createBlock(_sfc_main$1p, {
90417
90735
  key: button.label + button.role,
90418
90736
  type: button.role === "cancel" ? "secondary" : "primary",
90419
90737
  disabled: !isModalClosable.value || button.disabled,
@@ -90517,7 +90835,6 @@
90517
90835
  vue.watch(
90518
90836
  () => props.collapsed,
90519
90837
  (val) => {
90520
- console.log("watch:collapsed", val);
90521
90838
  collapsedLocal.value = val ?? false;
90522
90839
  }
90523
90840
  );
@@ -90670,7 +90987,7 @@
90670
90987
  }
90671
90988
  });
90672
90989
 
90673
- const BmsSplitWindow = /* @__PURE__ */ _export_sfc(_sfc_main$B, [["__scopeId", "data-v-0aa0f55f"]]);
90990
+ const BmsSplitWindow = /* @__PURE__ */ _export_sfc(_sfc_main$B, [["__scopeId", "data-v-4d48c930"]]);
90674
90991
 
90675
90992
  const _hoisted_1$u = { class: "step" };
90676
90993
  const _hoisted_2$j = { class: "step-buttons" };
@@ -90690,7 +91007,7 @@
90690
91007
  vue.renderSlot(_ctx.$slots, "default", {}, void 0, true),
90691
91008
  vue.renderSlot(_ctx.$slots, "actions", {}, () => [
90692
91009
  vue.createElementVNode("div", _hoisted_2$j, [
90693
- __props.previousLabel ? (vue.openBlock(), vue.createBlock(_sfc_main$1o, {
91010
+ __props.previousLabel ? (vue.openBlock(), vue.createBlock(_sfc_main$1p, {
90694
91011
  key: 0,
90695
91012
  "data-test": "previous-button",
90696
91013
  name: "previous",
@@ -90702,7 +91019,7 @@
90702
91019
  ]),
90703
91020
  _: 1
90704
91021
  })) : vue.createCommentVNode("", true),
90705
- __props.nextLabel ? (vue.openBlock(), vue.createBlock(_sfc_main$1o, {
91022
+ __props.nextLabel ? (vue.openBlock(), vue.createBlock(_sfc_main$1p, {
90706
91023
  key: 1,
90707
91024
  "data-test": "next-button",
90708
91025
  class: "",
@@ -90997,7 +91314,7 @@
90997
91314
  return classes2;
90998
91315
  });
90999
91316
  return (_ctx, _cache) => {
91000
- return vue.openBlock(), vue.createBlock(_sfc_main$1r, {
91317
+ return vue.openBlock(), vue.createBlock(_sfc_main$1s, {
91001
91318
  to: __props.item.link,
91002
91319
  target: __props.target,
91003
91320
  classes: classes.value
@@ -91091,7 +91408,7 @@
91091
91408
  key: item.label
91092
91409
  }, [
91093
91410
  hasSubItems(item) ? (vue.openBlock(), vue.createElementBlock("div", _hoisted_1$p, [
91094
- item.link ? (vue.openBlock(), vue.createBlock(_sfc_main$1r, {
91411
+ item.link ? (vue.openBlock(), vue.createBlock(_sfc_main$1s, {
91095
91412
  key: 0,
91096
91413
  to: item.link,
91097
91414
  class: vue.normalizeClass(`parent-item ${isItemActive(item) ? "active" : ""}`)
@@ -91219,7 +91536,7 @@
91219
91536
  const toggleMenu = (newMenuState = true) => isMenuOpen.value = newMenuState;
91220
91537
  return (_ctx, _cache) => {
91221
91538
  return vue.openBlock(), vue.createElementBlock("div", _hoisted_1$n, [
91222
- vue.createVNode(vue.unref(_sfc_main$1n), {
91539
+ vue.createVNode(vue.unref(_sfc_main$1o), {
91223
91540
  onClick: _cache[0] || (_cache[0] = ($event) => toggleMenu(!isMenuOpen.value)),
91224
91541
  "data-testid": "openMenu",
91225
91542
  "aria-label": "Ouvrir le menu"
@@ -91243,7 +91560,7 @@
91243
91560
  ref: menu,
91244
91561
  class: vue.normalizeClass(["menu__container", { "is-show": isMenuOpen.value }])
91245
91562
  }, [
91246
- vue.createVNode(vue.unref(_sfc_main$1n), {
91563
+ vue.createVNode(vue.unref(_sfc_main$1o), {
91247
91564
  class: "menu__close",
91248
91565
  onClick: _cache[1] || (_cache[1] = ($event) => toggleMenu(false)),
91249
91566
  "data-testid": "closeMenu",
@@ -91577,7 +91894,7 @@
91577
91894
  vue.createTextVNode(" " + vue.toDisplayString(__props.tenant.label), 1),
91578
91895
  vue.createElementVNode("em", null, "- " + vue.toDisplayString(__props.tenant.information), 1)
91579
91896
  ], 8, _hoisted_1$k),
91580
- __props.tenant.isFavorite ? (vue.openBlock(), vue.createBlock(_sfc_main$1n, {
91897
+ __props.tenant.isFavorite ? (vue.openBlock(), vue.createBlock(_sfc_main$1o, {
91581
91898
  key: 0,
91582
91899
  class: "remove-tenant-button",
91583
91900
  onClick: _cache[0] || (_cache[0] = vue.withModifiers(($event) => emits("removeFavorite"), ["stop"]))
@@ -91773,7 +92090,7 @@
91773
92090
  __props.currentTenant && __props.tenants.length === 1 ? (vue.openBlock(), vue.createElementBlock("div", _hoisted_1$i, [
91774
92091
  vue.createVNode(_sfc_main$n, { tenant: __props.currentTenant }, null, 8, ["tenant"]),
91775
92092
  vue.createElementVNode("span", null, vue.toDisplayString(__props.currentTenant.label), 1)
91776
- ])) : __props.tenants.length > 0 ? (vue.openBlock(), vue.createBlock(vue.unref(_sfc_main$1o), {
92093
+ ])) : __props.tenants.length > 0 ? (vue.openBlock(), vue.createBlock(vue.unref(_sfc_main$1p), {
91777
92094
  key: 1,
91778
92095
  type: "tertiary",
91779
92096
  onClick: _cache[0] || (_cache[0] = ($event) => showTenantSwitcher.value = !showTenantSwitcher.value)
@@ -91916,7 +92233,7 @@
91916
92233
  onMouseup: _cache[1] || (_cache[1] = () => gripped.value = false)
91917
92234
  }),
91918
92235
  vue.renderSlot(_ctx.$slots, "default", { row: item }, void 0, true),
91919
- vue.createVNode(vue.unref(_sfc_main$1n), {
92236
+ vue.createVNode(vue.unref(_sfc_main$1o), {
91920
92237
  mode: vue.unref(StatusType).Danger,
91921
92238
  onClick: ($event) => onRemove(item)
91922
92239
  }, {
@@ -92064,7 +92381,7 @@
92064
92381
  ], true)
92065
92382
  ]),
92066
92383
  vue.createElementVNode("div", _hoisted_3$6, [
92067
- vue.createVNode(_sfc_main$1n, {
92384
+ vue.createVNode(_sfc_main$1o, {
92068
92385
  color: "neutral",
92069
92386
  onClick: goToFirst,
92070
92387
  disabled: __props.currentPage === 0
@@ -92074,7 +92391,7 @@
92074
92391
  ]),
92075
92392
  _: 1
92076
92393
  }, 8, ["disabled"]),
92077
- vue.createVNode(_sfc_main$1n, {
92394
+ vue.createVNode(_sfc_main$1o, {
92078
92395
  onClick: goToPrevious,
92079
92396
  disabled: __props.currentPage === 0
92080
92397
  }, {
@@ -92083,7 +92400,7 @@
92083
92400
  ]),
92084
92401
  _: 1
92085
92402
  }, 8, ["disabled"]),
92086
- vue.createVNode(_sfc_main$1n, {
92403
+ vue.createVNode(_sfc_main$1o, {
92087
92404
  onClick: goToNext,
92088
92405
  disabled: __props.currentPage === __props.pages - 1 || __props.pages === 0
92089
92406
  }, {
@@ -92092,7 +92409,7 @@
92092
92409
  ]),
92093
92410
  _: 1
92094
92411
  }, 8, ["disabled"]),
92095
- vue.createVNode(_sfc_main$1n, {
92412
+ vue.createVNode(_sfc_main$1o, {
92096
92413
  onClick: goToLast,
92097
92414
  disabled: __props.currentPage === __props.pages - 1 || __props.pages === 0 || __props.total === Infinity
92098
92415
  }, {
@@ -96295,7 +96612,7 @@
96295
96612
  );
96296
96613
  return (_ctx, _cache) => {
96297
96614
  return vue.openBlock(), vue.createElementBlock("span", _hoisted_1$a, [
96298
- vue.createVNode(_sfc_main$1p, {
96615
+ vue.createVNode(_sfc_main$1q, {
96299
96616
  class: "filter-button",
96300
96617
  color: __props.isFilterVisible ? vue.unref(StatusType).Default : vue.unref(StatusType).Information,
96301
96618
  mode: __props.isFilterVisible ? "fill" : "ghost",
@@ -98540,7 +98857,7 @@
98540
98857
  _cache[2] || (_cache[2] = vue.createTextVNode(" Recherche avancée ", -1))
98541
98858
  ]),
98542
98859
  vue.createElementVNode("span", _hoisted_4$3, [
98543
- __props.canSaveFilters ? (vue.openBlock(), vue.createBlock(_sfc_main$1n, {
98860
+ __props.canSaveFilters ? (vue.openBlock(), vue.createBlock(_sfc_main$1o, {
98544
98861
  key: 0,
98545
98862
  class: "save",
98546
98863
  tooltipText: "Sauvegarder le filtre",
@@ -98551,7 +98868,7 @@
98551
98868
  ]),
98552
98869
  _: 1
98553
98870
  })) : vue.createCommentVNode("", true),
98554
- vue.createVNode(_sfc_main$1n, {
98871
+ vue.createVNode(_sfc_main$1o, {
98555
98872
  class: "reset",
98556
98873
  tooltipText: "Vider les champs",
98557
98874
  onClick: reset
@@ -98616,7 +98933,7 @@
98616
98933
  }
98617
98934
  });
98618
98935
 
98619
- const BmsTableFilters = /* @__PURE__ */ _export_sfc(_sfc_main$b, [["__scopeId", "data-v-4a441463"]]);
98936
+ const BmsTableFilters = /* @__PURE__ */ _export_sfc(_sfc_main$b, [["__scopeId", "data-v-94b8e913"]]);
98620
98937
 
98621
98938
  /**
98622
98939
  * Create a bound version of a function with a specified `this` context
@@ -103204,7 +103521,7 @@
103204
103521
  class: "bms-notification__icon"
103205
103522
  })),
103206
103523
  vue.createElementVNode("div", _hoisted_2$4, vue.toDisplayString(__props.notification.text), 1),
103207
- vue.createVNode(_sfc_main$1n, {
103524
+ vue.createVNode(_sfc_main$1o, {
103208
103525
  class: "bms-notification__close-button",
103209
103526
  onClick: closeNotification
103210
103527
  }, {
@@ -103445,7 +103762,7 @@
103445
103762
  vue.createElementVNode("div", null, [
103446
103763
  vue.createElementVNode("div", _hoisted_5$1, [
103447
103764
  vue.createElementVNode("span", _hoisted_6$1, vue.toDisplayString(__props.problem.detail), 1),
103448
- vue.createVNode(vue.unref(_sfc_main$1n), {
103765
+ vue.createVNode(vue.unref(_sfc_main$1o), {
103449
103766
  class: "copyToClipboardButton",
103450
103767
  onClick: _cache[1] || (_cache[1] = ($event) => onCopyToClipboard(__props.problem.detail))
103451
103768
  }, {
@@ -103480,7 +103797,7 @@
103480
103797
  vue.createElementVNode("div", null, [
103481
103798
  vue.createElementVNode("div", _hoisted_8$1, [
103482
103799
  vue.createElementVNode("span", _hoisted_9, vue.toDisplayString(__props.problem.correlationId), 1),
103483
- vue.createVNode(vue.unref(_sfc_main$1n), {
103800
+ vue.createVNode(vue.unref(_sfc_main$1o), {
103484
103801
  class: "copyToClipboardButton",
103485
103802
  onClick: _cache[3] || (_cache[3] = ($event) => onCopyToClipboard(__props.problem.detail))
103486
103803
  }, {
@@ -103690,7 +104007,7 @@
103690
104007
  );
103691
104008
  return (_ctx, _cache) => {
103692
104009
  return isFeatureFlippingOn.value ? (vue.openBlock(), vue.createElementBlock("div", _hoisted_1$2, [
103693
- vue.createVNode(_sfc_main$1o, {
104010
+ vue.createVNode(_sfc_main$1p, {
103694
104011
  onClick: _cache[0] || (_cache[0] = ($event) => emit("click")),
103695
104012
  mode: vue.unref(StatusType).Danger
103696
104013
  }, {
@@ -105987,12 +106304,13 @@
105987
106304
 
105988
106305
  const createBmsUi = () => ({
105989
106306
  install: (app) => {
105990
- app.component("BmsButton", _sfc_main$1o);
105991
- app.component("BmsIconButton", _sfc_main$1n);
106307
+ app.component("BmsButton", _sfc_main$1p);
106308
+ app.component("BmsIconButton", _sfc_main$1o);
105992
106309
  app.component("BmsAlert", BmsAlert);
105993
106310
  app.component("BmsBadge", BmsBadge);
105994
106311
  app.component("BmsCaption", BmsCaption);
105995
106312
  app.component("BmsCircularProgress", BmsCircularProgress);
106313
+ app.component("BmsGhost", BmsGhost);
105996
106314
  app.component("BmsLoader", BmsLoader);
105997
106315
  app.component("BmsTooltip", BmsTooltip);
105998
106316
  app.component("BmsAutocomplete", BmsAutocomplete);
@@ -106034,7 +106352,7 @@
106034
106352
  app.component("BmsBackButton", BmsBackButton);
106035
106353
  app.component("BmsBreadcrumb", BmsBreadcrumb);
106036
106354
  app.component("BmsFixedMenu", BmsFixedMenu);
106037
- app.component("BmsLink", _sfc_main$1r);
106355
+ app.component("BmsLink", _sfc_main$1s);
106038
106356
  app.component("BmsMenu", BmsMenu);
106039
106357
  app.component("BmsMenuNav", BmsMenuNav);
106040
106358
  app.component("BmsShortLinkMenu", BmsShortLinkMenu);
@@ -106058,7 +106376,7 @@
106058
106376
  exports.BmsBadge = BmsBadge;
106059
106377
  exports.BmsBetweenInput = BmsBetweenInput;
106060
106378
  exports.BmsBreadcrumb = BmsBreadcrumb;
106061
- exports.BmsButton = _sfc_main$1o;
106379
+ exports.BmsButton = _sfc_main$1p;
106062
106380
  exports.BmsCaption = BmsCaption;
106063
106381
  exports.BmsCard = BmsCard;
106064
106382
  exports.BmsChip = BmsChip;
@@ -106071,9 +106389,10 @@
106071
106389
  exports.BmsFixedMenu = BmsFixedMenu;
106072
106390
  exports.BmsFloatingWindow = BmsFloatingWindow;
106073
106391
  exports.BmsForm = BmsForm;
106392
+ exports.BmsGhost = BmsGhost;
106074
106393
  exports.BmsHeader = BmsHeader;
106075
106394
  exports.BmsHeaderTitle = BmsHeaderTitle;
106076
- exports.BmsIconButton = _sfc_main$1n;
106395
+ exports.BmsIconButton = _sfc_main$1o;
106077
106396
  exports.BmsInputBooleanCheckbox = _sfc_main$16;
106078
106397
  exports.BmsInputCheckboxCaption = BmsInputCheckboxCaption;
106079
106398
  exports.BmsInputCheckboxCaptionGroup = BmsInputCheckboxCaptionGroup;
@@ -106088,7 +106407,7 @@
106088
106407
  exports.BmsInputRadioGroup = BmsInputRadioGroup;
106089
106408
  exports.BmsInputText = _sfc_main$11;
106090
106409
  exports.BmsInputToggle = BmsInputToggle;
106091
- exports.BmsLink = _sfc_main$1r;
106410
+ exports.BmsLink = _sfc_main$1s;
106092
106411
  exports.BmsLoader = BmsLoader;
106093
106412
  exports.BmsMenu = BmsMenu;
106094
106413
  exports.BmsMenuNav = BmsMenuNav;