fds-vue-core 8.0.4 → 8.0.5

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.
@@ -7,19 +7,38 @@ type __VLS_Props = {
7
7
  };
8
8
  type __VLS_PublicProps = {
9
9
  'toggleChecked'?: Record<string, boolean>;
10
+ 'toggleSelected'?: Record<string, string>;
10
11
  } & __VLS_Props;
11
12
  declare const _default: import('vue').DefineComponent<__VLS_PublicProps, {}, {}, {}, {}, import('vue').ComponentOptionsMixin, import('vue').ComponentOptionsMixin, {
13
+ select: (payload: {
14
+ key: string;
15
+ group: string;
16
+ value: string;
17
+ }) => any;
12
18
  toggle: (payload: {
13
19
  key: string;
14
20
  value: boolean;
15
21
  }) => any;
22
+ action: (payload: {
23
+ key: string;
24
+ }) => any;
16
25
  "update:toggleChecked": (value: Record<string, boolean>) => any;
26
+ "update:toggleSelected": (value: Record<string, string>) => any;
17
27
  }, string, import('vue').PublicProps, Readonly<__VLS_PublicProps> & Readonly<{
28
+ onSelect?: ((payload: {
29
+ key: string;
30
+ group: string;
31
+ value: string;
32
+ }) => any) | undefined;
18
33
  onToggle?: ((payload: {
19
34
  key: string;
20
35
  value: boolean;
21
36
  }) => any) | undefined;
37
+ onAction?: ((payload: {
38
+ key: string;
39
+ }) => any) | undefined;
22
40
  "onUpdate:toggleChecked"?: ((value: Record<string, boolean>) => any) | undefined;
41
+ "onUpdate:toggleSelected"?: ((value: Record<string, string>) => any) | undefined;
23
42
  }>, {
24
43
  environment: DevModeEnvironmentKey | null;
25
44
  toggles: DevModeToggle[];
@@ -5,15 +5,31 @@ type __VLS_Props = {
5
5
  toggles?: DevModeOverlayToggle[];
6
6
  };
7
7
  declare const _default: import('vue').DefineComponent<__VLS_Props, {}, {}, {}, {}, import('vue').ComponentOptionsMixin, import('vue').ComponentOptionsMixin, {
8
+ select: (payload: {
9
+ key: string;
10
+ group: string;
11
+ value: string;
12
+ }) => any;
8
13
  toggle: (payload: {
9
14
  key: string;
10
15
  value: boolean;
11
16
  }) => any;
17
+ action: (payload: {
18
+ key: string;
19
+ }) => any;
12
20
  }, string, import('vue').PublicProps, Readonly<__VLS_Props> & Readonly<{
21
+ onSelect?: ((payload: {
22
+ key: string;
23
+ group: string;
24
+ value: string;
25
+ }) => any) | undefined;
13
26
  onToggle?: ((payload: {
14
27
  key: string;
15
28
  value: boolean;
16
29
  }) => any) | undefined;
30
+ onAction?: ((payload: {
31
+ key: string;
32
+ }) => any) | undefined;
17
33
  }>, {
18
34
  environment: DevModeEnvironmentKey | null;
19
35
  toggles: DevModeOverlayToggle[];
@@ -1,9 +1,35 @@
1
- export type DevModeToggle = {
2
- /** Unique key – must match key in `toggle-checked`. */
1
+ export type DevModeQuickSettingType = 'check' | 'radio' | 'button';
2
+ type DevModeQuickSettingBase = {
3
+ /** Unique key for this quick setting. */
3
4
  key: string;
4
5
  /** fds-vue-core i18n key. Defaults to `FdsDevMode.overlay.toggles.{key}`. */
5
6
  labelKey?: string;
6
7
  };
8
+ export type DevModeCheckToggle = DevModeQuickSettingBase & {
9
+ type?: 'check';
10
+ onToggle?: (value: boolean) => void;
11
+ onSelect?: never;
12
+ onAction?: never;
13
+ group?: never;
14
+ value?: never;
15
+ };
16
+ export type DevModeRadioToggle = DevModeQuickSettingBase & {
17
+ type: 'radio';
18
+ group: string;
19
+ value: string;
20
+ onSelect?: (value: string) => void;
21
+ onToggle?: never;
22
+ onAction?: never;
23
+ };
24
+ export type DevModeButtonToggle = DevModeQuickSettingBase & {
25
+ type: 'button';
26
+ onAction?: () => void;
27
+ onToggle?: never;
28
+ onSelect?: never;
29
+ group?: never;
30
+ value?: never;
31
+ };
32
+ export type DevModeToggle = DevModeCheckToggle | DevModeRadioToggle | DevModeButtonToggle;
7
33
  export type DevModeOverlayToggle = DevModeToggle & {
8
34
  checked: boolean;
9
35
  };
@@ -11,6 +37,14 @@ export type DevModeToggleEvent = {
11
37
  key: string;
12
38
  value: boolean;
13
39
  };
40
+ export type DevModeSelectEvent = {
41
+ key: string;
42
+ group: string;
43
+ value: string;
44
+ };
45
+ export type DevModeActionEvent = {
46
+ key: string;
47
+ };
14
48
  export type DevModeActionInput = {
15
49
  placeholder?: string;
16
50
  defaultValue?: string;
@@ -22,3 +56,4 @@ export type DevModeAction = {
22
56
  action: (inputValue?: string) => void;
23
57
  input?: DevModeActionInput;
24
58
  };
59
+ export {};
@@ -0,0 +1,13 @@
1
+ import { Ref } from 'vue';
2
+ import { DevModeToggle } from '../components/FdsDevMode/types';
3
+ export type DevModeRegisteredToggle = DevModeToggle;
4
+ type DevModeTogglesApi = {
5
+ toggles: Ref<DevModeRegisteredToggle[]>;
6
+ toggleChecked: Ref<Record<string, boolean>>;
7
+ toggleSelected: Ref<Record<string, string>>;
8
+ register: (toggle: DevModeRegisteredToggle) => void;
9
+ unregister: (key: string) => void;
10
+ };
11
+ /** Register DevMode quick-setting toggles from anywhere in the consumer app. */
12
+ export declare function useDevModeToggles(): DevModeTogglesApi;
13
+ export {};
@@ -852,7 +852,7 @@ const _hoisted_1$z = { class: "flex items-start gap-2" };
852
852
  const _hoisted_2$r = { class: "h-7 flex items-center" };
853
853
  const _hoisted_3$l = { class: "leading-7" };
854
854
  const _hoisted_4$j = { class: "relative h-7" };
855
- const _hoisted_5$g = {
855
+ const _hoisted_5$h = {
856
856
  key: 1,
857
857
  class: "fds-block-alert-slot mb-0-last-child"
858
858
  };
@@ -943,7 +943,7 @@ const _sfc_main$K = /* @__PURE__ */ vue.defineComponent({
943
943
  }), null, 16, ["class"])) : vue.createCommentVNode("", true)
944
944
  ])
945
945
  ], 2)) : vue.createCommentVNode("", true),
946
- isExpanded.value || !__props.collapsable ? (vue.openBlock(), vue.createElementBlock("div", _hoisted_5$g, [
946
+ isExpanded.value || !__props.collapsable ? (vue.openBlock(), vue.createElementBlock("div", _hoisted_5$h, [
947
947
  vue.renderSlot(_ctx.$slots, "default")
948
948
  ])) : vue.createCommentVNode("", true)
949
949
  ])
@@ -959,7 +959,7 @@ const _hoisted_2$q = {
959
959
  };
960
960
  const _hoisted_3$k = { class: "flex items-center gap-3" };
961
961
  const _hoisted_4$i = { class: "flex items-start gap-3 leading-8" };
962
- const _hoisted_5$f = { class: "mb-0-last-child" };
962
+ const _hoisted_5$g = { class: "mb-0-last-child" };
963
963
  const _sfc_main$J = /* @__PURE__ */ vue.defineComponent({
964
964
  __name: "FdsBlockContent",
965
965
  props: {
@@ -1014,7 +1014,7 @@ const _sfc_main$J = /* @__PURE__ */ vue.defineComponent({
1014
1014
  vue.renderSlot(_ctx.$slots, "headerInfo")
1015
1015
  ])
1016
1016
  ])) : vue.createCommentVNode("", true),
1017
- vue.createElementVNode("div", _hoisted_5$f, [
1017
+ vue.createElementVNode("div", _hoisted_5$g, [
1018
1018
  vue.renderSlot(_ctx.$slots, "default")
1019
1019
  ])
1020
1020
  ], 16, _hoisted_1$y);
@@ -1076,11 +1076,11 @@ const _hoisted_2$p = {
1076
1076
  };
1077
1077
  const _hoisted_3$j = { class: "inline-flex items-center" };
1078
1078
  const _hoisted_4$h = { class: "flex items-center gap-2" };
1079
- const _hoisted_5$e = {
1079
+ const _hoisted_5$f = {
1080
1080
  key: 0,
1081
1081
  class: "w-full flex mt-2"
1082
1082
  };
1083
- const _hoisted_6$a = ["aria-hidden"];
1083
+ const _hoisted_6$b = ["aria-hidden"];
1084
1084
  const _sfc_main$H = /* @__PURE__ */ vue.defineComponent({
1085
1085
  ...{
1086
1086
  inheritAttrs: false
@@ -1188,7 +1188,7 @@ const _sfc_main$H = /* @__PURE__ */ vue.defineComponent({
1188
1188
  ])
1189
1189
  ])
1190
1190
  ], 2),
1191
- vue.unref(hasExtraRowSlot) && !isOpen.value ? (vue.openBlock(), vue.createElementBlock("span", _hoisted_5$e, [
1191
+ vue.unref(hasExtraRowSlot) && !isOpen.value ? (vue.openBlock(), vue.createElementBlock("span", _hoisted_5$f, [
1192
1192
  vue.renderSlot(_ctx.$slots, "extra-row")
1193
1193
  ])) : vue.createCommentVNode("", true)
1194
1194
  ], 16),
@@ -1197,7 +1197,7 @@ const _sfc_main$H = /* @__PURE__ */ vue.defineComponent({
1197
1197
  class: "mb-0-last-child block px-4 pb-6 rounded-b-2xl bg-white"
1198
1198
  }, [
1199
1199
  vue.renderSlot(_ctx.$slots, "default")
1200
- ], 8, _hoisted_6$a), [
1200
+ ], 8, _hoisted_6$b), [
1201
1201
  [vue.vShow, isOpen.value]
1202
1202
  ])
1203
1203
  ], 16);
@@ -1214,8 +1214,8 @@ const _hoisted_4$g = {
1214
1214
  key: 0,
1215
1215
  class: "mb-1"
1216
1216
  };
1217
- const _hoisted_5$d = { class: "flex items-start justify-between gap-4" };
1218
- const _hoisted_6$9 = { class: "m-0 text-base font-main font-bold tracking-wide" };
1217
+ const _hoisted_5$e = { class: "flex items-start justify-between gap-4" };
1218
+ const _hoisted_6$a = { class: "m-0 text-base font-main font-bold tracking-wide" };
1219
1219
  const _hoisted_7$9 = { class: "flex items-start gap-3" };
1220
1220
  const _hoisted_8$6 = {
1221
1221
  key: 1,
@@ -1269,8 +1269,8 @@ const _sfc_main$G = /* @__PURE__ */ vue.defineComponent({
1269
1269
  }, null, 8, ["name"]),
1270
1270
  vue.createElementVNode("div", _hoisted_3$i, [
1271
1271
  __props.heading ? (vue.openBlock(), vue.createElementBlock("div", _hoisted_4$g, [
1272
- vue.createElementVNode("header", _hoisted_5$d, [
1273
- vue.createElementVNode("h3", _hoisted_6$9, vue.toDisplayString(__props.heading), 1),
1272
+ vue.createElementVNode("header", _hoisted_5$e, [
1273
+ vue.createElementVNode("h3", _hoisted_6$a, vue.toDisplayString(__props.heading), 1),
1274
1274
  vue.createElementVNode("div", _hoisted_7$9, [
1275
1275
  vue.renderSlot(_ctx.$slots, "headerInfo")
1276
1276
  ])
@@ -5155,6 +5155,42 @@ function useDevModeEnvironment(environment) {
5155
5155
  isBannerEnvironment
5156
5156
  };
5157
5157
  }
5158
+ const getToggleType = (toggle) => toggle.type ?? "check";
5159
+ let devModeTogglesInstance = null;
5160
+ function createDevModeToggles() {
5161
+ const toggles = vue.ref([]);
5162
+ const toggleChecked = vue.ref({});
5163
+ const toggleSelected = vue.ref({});
5164
+ const register = (toggle) => {
5165
+ if (toggles.value.some((entry) => entry.key === toggle.key)) return;
5166
+ toggles.value = [...toggles.value, toggle];
5167
+ const type = getToggleType(toggle);
5168
+ if (type === "check" && !(toggle.key in toggleChecked.value)) {
5169
+ toggleChecked.value = { ...toggleChecked.value, [toggle.key]: false };
5170
+ }
5171
+ if (toggle.type === "radio" && !(toggle.group in toggleSelected.value)) {
5172
+ toggleSelected.value = { ...toggleSelected.value, [toggle.group]: toggle.value };
5173
+ }
5174
+ };
5175
+ const unregister = (key) => {
5176
+ toggles.value = toggles.value.filter((entry) => entry.key !== key);
5177
+ const { [key]: _removed, ...rest } = toggleChecked.value;
5178
+ toggleChecked.value = rest;
5179
+ };
5180
+ return {
5181
+ toggles,
5182
+ toggleChecked,
5183
+ toggleSelected,
5184
+ register,
5185
+ unregister
5186
+ };
5187
+ }
5188
+ function useDevModeToggles() {
5189
+ if (!devModeTogglesInstance) {
5190
+ devModeTogglesInstance = createDevModeToggles();
5191
+ }
5192
+ return devModeTogglesInstance;
5193
+ }
5158
5194
  const breakpoints = [
5159
5195
  { key: "2xs", min: 320 },
5160
5196
  { key: "xs", min: 360 },
@@ -5683,6 +5719,11 @@ const _hoisted_2$h = {
5683
5719
  };
5684
5720
  const _hoisted_3$h = { class: "flex flex-col gap-2" };
5685
5721
  const _hoisted_4$f = { key: 0 };
5722
+ const _hoisted_5$d = {
5723
+ key: 1,
5724
+ class: "flex flex-col gap-1"
5725
+ };
5726
+ const _hoisted_6$9 = { key: 2 };
5686
5727
  const OVERLAY_OPEN_KEY = "devModeOverlayOpen";
5687
5728
  const _sfc_main$u = /* @__PURE__ */ vue.defineComponent({
5688
5729
  __name: "FdsDevModeOverlay",
@@ -5690,7 +5731,7 @@ const _sfc_main$u = /* @__PURE__ */ vue.defineComponent({
5690
5731
  environment: { default: null },
5691
5732
  toggles: { default: () => [] }
5692
5733
  },
5693
- emits: ["toggle"],
5734
+ emits: ["toggle", "select", "action"],
5694
5735
  setup(__props, { emit: __emit }) {
5695
5736
  const props = __props;
5696
5737
  const emit = __emit;
@@ -5735,7 +5776,21 @@ const _sfc_main$u = /* @__PURE__ */ vue.defineComponent({
5735
5776
  return current === candidate;
5736
5777
  };
5737
5778
  const toggleLabelKey = (toggle) => toggle.labelKey ?? `FdsDevMode.overlay.toggles.${toggle.key}`;
5738
- const hasContent = vue.computed(() => props.toggles.length > 0 || canToggleI18nKeys.value || showLocaleSwitcher.value);
5779
+ const getToggleType2 = (toggle) => toggle.type ?? "check";
5780
+ const isRadioToggle = (toggle) => toggle.type === "radio";
5781
+ const checkToggles = vue.computed(() => props.toggles.filter((toggle) => getToggleType2(toggle) === "check"));
5782
+ const radioToggles = vue.computed(() => props.toggles.filter(isRadioToggle));
5783
+ const buttonToggles = vue.computed(() => props.toggles.filter((toggle) => toggle.type === "button"));
5784
+ const handleRadioChange = (toggle) => {
5785
+ emit("select", {
5786
+ key: toggle.key,
5787
+ group: toggle.group,
5788
+ value: toggle.value
5789
+ });
5790
+ };
5791
+ const hasContent = vue.computed(
5792
+ () => checkToggles.value.length > 0 || radioToggles.value.length > 0 || buttonToggles.value.length > 0 || canToggleI18nKeys.value || showLocaleSwitcher.value
5793
+ );
5739
5794
  return (_ctx, _cache) => {
5740
5795
  return hasContent.value ? (vue.openBlock(), vue.createElementBlock("div", _hoisted_1$l, [
5741
5796
  isOpen.value ? (vue.openBlock(), vue.createElementBlock("div", _hoisted_2$h, [
@@ -5752,7 +5807,7 @@ const _sfc_main$u = /* @__PURE__ */ vue.defineComponent({
5752
5807
  ]),
5753
5808
  _: 1
5754
5809
  }, 8, ["checked", "onChange"])) : vue.createCommentVNode("", true),
5755
- (vue.openBlock(true), vue.createElementBlock(vue.Fragment, null, vue.renderList(__props.toggles, (toggle) => {
5810
+ (vue.openBlock(true), vue.createElementBlock(vue.Fragment, null, vue.renderList(checkToggles.value, (toggle) => {
5756
5811
  return vue.openBlock(), vue.createBlock(_sfc_main$x, {
5757
5812
  key: `${toggle.key}-${toggle.checked}`,
5758
5813
  checked: toggle.checked,
@@ -5766,7 +5821,35 @@ const _sfc_main$u = /* @__PURE__ */ vue.defineComponent({
5766
5821
  }, 1032, ["checked", "onChange"]);
5767
5822
  }), 128))
5768
5823
  ]),
5769
- showLocaleSwitcher.value ? (vue.openBlock(), vue.createElementBlock("div", _hoisted_4$f, [
5824
+ radioToggles.value.length > 0 ? (vue.openBlock(), vue.createElementBlock("div", _hoisted_4$f, [
5825
+ (vue.openBlock(true), vue.createElementBlock(vue.Fragment, null, vue.renderList(radioToggles.value, (toggle) => {
5826
+ return vue.openBlock(), vue.createBlock(_sfc_main$w, {
5827
+ key: `${toggle.key}-${toggle.checked}`,
5828
+ name: toggle.group,
5829
+ value: toggle.value,
5830
+ checked: toggle.checked,
5831
+ class: "mb-0!",
5832
+ onChange: ($event) => handleRadioChange(toggle)
5833
+ }, {
5834
+ default: vue.withCtx(() => [
5835
+ vue.createTextVNode(vue.toDisplayString(vue.unref(tCore)(toggleLabelKey(toggle))), 1)
5836
+ ]),
5837
+ _: 2
5838
+ }, 1032, ["name", "value", "checked", "onChange"]);
5839
+ }), 128))
5840
+ ])) : vue.createCommentVNode("", true),
5841
+ buttonToggles.value.length > 0 ? (vue.openBlock(), vue.createElementBlock("div", _hoisted_5$d, [
5842
+ (vue.openBlock(true), vue.createElementBlock(vue.Fragment, null, vue.renderList(buttonToggles.value, (toggle) => {
5843
+ return vue.openBlock(), vue.createBlock(_sfc_main$D, {
5844
+ key: toggle.key,
5845
+ size: "sm",
5846
+ block: "",
5847
+ text: vue.unref(tCore)(toggleLabelKey(toggle)),
5848
+ onClick: ($event) => emit("action", { key: toggle.key })
5849
+ }, null, 8, ["text", "onClick"]);
5850
+ }), 128))
5851
+ ])) : vue.createCommentVNode("", true),
5852
+ showLocaleSwitcher.value ? (vue.openBlock(), vue.createElementBlock("div", _hoisted_6$9, [
5770
5853
  (vue.openBlock(true), vue.createElementBlock(vue.Fragment, null, vue.renderList(localeOptions.value, (localeCode) => {
5771
5854
  return vue.openBlock(), vue.createBlock(_sfc_main$w, {
5772
5855
  key: localeCode,
@@ -10646,14 +10729,18 @@ const _sfc_main$n = /* @__PURE__ */ vue.defineComponent({
10646
10729
  toggles: { default: () => [] }
10647
10730
  }, {
10648
10731
  "toggleChecked": { default: () => ({}) },
10649
- "toggleCheckedModifiers": {}
10732
+ "toggleCheckedModifiers": {},
10733
+ "toggleSelected": { default: () => ({}) },
10734
+ "toggleSelectedModifiers": {}
10650
10735
  }),
10651
- emits: /* @__PURE__ */ vue.mergeModels(["toggle"], ["update:toggleChecked"]),
10736
+ emits: /* @__PURE__ */ vue.mergeModels(["toggle", "select", "action"], ["update:toggleChecked", "update:toggleSelected"]),
10652
10737
  setup(__props, { emit: __emit }) {
10653
10738
  const props = __props;
10654
10739
  const toggleChecked = vue.useModel(__props, "toggleChecked");
10740
+ const toggleSelected = vue.useModel(__props, "toggleSelected");
10655
10741
  const emit = __emit;
10656
10742
  const { isDevMode, toggleDevMode } = useDevMode();
10743
+ const { toggles: registeredToggles, toggleChecked: registeredToggleChecked, toggleSelected: registeredToggleSelected } = useDevModeToggles();
10657
10744
  const { t } = useFdsI18n();
10658
10745
  const hideEnvBanner = vue.ref(false);
10659
10746
  const isStorageModalOpen = vue.ref(false);
@@ -10685,12 +10772,75 @@ const _sfc_main$n = /* @__PURE__ */ vue.defineComponent({
10685
10772
  isStorageModalOpen.value = true;
10686
10773
  };
10687
10774
  const devModeButtonText = vue.computed(() => isDevMode.value ? t("FdsDevMode.toggle.on") : t("FdsDevMode.toggle.off"));
10775
+ const propToggles = vue.computed(() => Array.isArray(props.toggles) ? props.toggles : []);
10776
+ const allToggles = vue.computed(() => {
10777
+ const propKeys = new Set(propToggles.value.map((toggle) => toggle.key));
10778
+ const registeredOnly = registeredToggles.value.filter((toggle) => !propKeys.has(toggle.key));
10779
+ return [...propToggles.value, ...registeredOnly];
10780
+ });
10781
+ const mergedToggleChecked = vue.computed(() => ({
10782
+ ...registeredToggleChecked.value,
10783
+ ...toggleChecked.value
10784
+ }));
10785
+ const mergedToggleSelected = vue.computed(() => ({
10786
+ ...registeredToggleSelected.value,
10787
+ ...toggleSelected.value
10788
+ }));
10688
10789
  const overlayToggles = vue.computed(
10689
- () => props.toggles.map((toggle) => ({
10690
- ...toggle,
10691
- checked: toggleChecked.value[toggle.key] ?? false
10692
- }))
10790
+ () => allToggles.value.map((toggle) => {
10791
+ if (toggle.type === "radio") {
10792
+ return {
10793
+ ...toggle,
10794
+ checked: mergedToggleSelected.value[toggle.group] === toggle.value
10795
+ };
10796
+ }
10797
+ return {
10798
+ ...toggle,
10799
+ checked: mergedToggleChecked.value[toggle.key] ?? false
10800
+ };
10801
+ })
10693
10802
  );
10803
+ const handleToggle = (payload) => {
10804
+ const toggle = allToggles.value.find((entry) => entry.key === payload.key);
10805
+ if (toggle?.type !== "radio" && toggle?.type !== "button") {
10806
+ toggle?.onToggle?.(payload.value);
10807
+ }
10808
+ if (registeredToggles.value.some((entry) => entry.key === payload.key)) {
10809
+ registeredToggleChecked.value = {
10810
+ ...registeredToggleChecked.value,
10811
+ [payload.key]: payload.value
10812
+ };
10813
+ }
10814
+ toggleChecked.value = {
10815
+ ...toggleChecked.value,
10816
+ [payload.key]: payload.value
10817
+ };
10818
+ emit("toggle", payload);
10819
+ };
10820
+ const handleSelect = (payload) => {
10821
+ const toggle = allToggles.value.find((entry) => entry.key === payload.key);
10822
+ if (toggle?.type === "radio") {
10823
+ toggle.onSelect?.(payload.value);
10824
+ }
10825
+ if (registeredToggles.value.some((entry) => entry.key === payload.key)) {
10826
+ registeredToggleSelected.value = {
10827
+ ...registeredToggleSelected.value,
10828
+ [payload.group]: payload.value
10829
+ };
10830
+ }
10831
+ toggleSelected.value = {
10832
+ ...toggleSelected.value,
10833
+ [payload.group]: payload.value
10834
+ };
10835
+ emit("select", payload);
10836
+ };
10837
+ const handleAction = (payload) => {
10838
+ const toggle = allToggles.value.find((entry) => entry.key === payload.key);
10839
+ if (toggle?.type === "button") {
10840
+ toggle.onAction?.();
10841
+ }
10842
+ emit("action", payload);
10843
+ };
10694
10844
  return (_ctx, _cache) => {
10695
10845
  return vue.openBlock(), vue.createElementBlock(vue.Fragment, null, [
10696
10846
  renderEnvBanner.value ? (vue.openBlock(), vue.createElementBlock("div", {
@@ -10702,7 +10852,9 @@ const _sfc_main$n = /* @__PURE__ */ vue.defineComponent({
10702
10852
  key: 0,
10703
10853
  environment: __props.environment,
10704
10854
  toggles: overlayToggles.value,
10705
- onToggle: _cache[0] || (_cache[0] = ($event) => emit("toggle", $event))
10855
+ onToggle: handleToggle,
10856
+ onSelect: handleSelect,
10857
+ onAction: handleAction
10706
10858
  }, null, 8, ["environment", "toggles"])) : vue.createCommentVNode("", true),
10707
10859
  vue.createElementVNode("div", _hoisted_2$d, [
10708
10860
  vue.createElementVNode("div", _hoisted_3$d, [
@@ -10711,7 +10863,7 @@ const _sfc_main$n = /* @__PURE__ */ vue.defineComponent({
10711
10863
  ]),
10712
10864
  vue.createElementVNode("div", _hoisted_4$c, [
10713
10865
  vue.createElementVNode("button", {
10714
- onClick: _cache[1] || (_cache[1] = //@ts-ignore
10866
+ onClick: _cache[0] || (_cache[0] = //@ts-ignore
10715
10867
  (...args) => vue.unref(toggleDevMode) && vue.unref(toggleDevMode)(...args)),
10716
10868
  class: "py-1 px-2 rounded text-xs font-bold bg-white bg-opacity-20 text-black hover:bg-opacity-30 min-w-[120px] cursor-pointer"
10717
10869
  }, vue.toDisplayString(devModeButtonText.value), 1),
@@ -10733,7 +10885,7 @@ const _sfc_main$n = /* @__PURE__ */ vue.defineComponent({
10733
10885
  ], 2)) : vue.createCommentVNode("", true),
10734
10886
  vue.createVNode(_sfc_main$o, {
10735
10887
  open: isStorageModalOpen.value,
10736
- "onUpdate:open": _cache[2] || (_cache[2] = ($event) => isStorageModalOpen.value = $event),
10888
+ "onUpdate:open": _cache[1] || (_cache[1] = ($event) => isStorageModalOpen.value = $event),
10737
10889
  customActions: __props.customActions
10738
10890
  }, null, 8, ["open", "customActions"])
10739
10891
  ], 64);
@@ -20131,6 +20283,7 @@ exports.sortCountryOptionsByName = sortCountryOptionsByName;
20131
20283
  exports.useBoldQuery = useBoldQuery;
20132
20284
  exports.useDevMode = useDevMode;
20133
20285
  exports.useDevModeEnvironment = useDevModeEnvironment;
20286
+ exports.useDevModeToggles = useDevModeToggles;
20134
20287
  exports.useDownload = useDownload;
20135
20288
  exports.useExitConfirmationGuard = useExitConfirmationGuard;
20136
20289
  exports.useExitConfirmationGuardState = useExitConfirmationGuardState;