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.
- package/dist/components/FdsDevMode/FdsDevMode.vue.d.ts +19 -0
- package/dist/components/FdsDevMode/FdsDevModeOverlay.vue.d.ts +16 -0
- package/dist/components/FdsDevMode/types.d.ts +37 -2
- package/dist/composables/useDevModeToggles.d.ts +13 -0
- package/dist/fds-vue-core.cjs.js +178 -25
- package/dist/fds-vue-core.cjs.js.map +1 -1
- package/dist/fds-vue-core.css +1 -1
- package/dist/fds-vue-core.es.js +178 -25
- package/dist/fds-vue-core.es.js.map +1 -1
- package/dist/index.d.ts +3 -2
- package/dist/tsconfig.build.tsbuildinfo +1 -1
- package/package.json +1 -1
- package/src/components/FdsDevMode/FdsDevMode.stories.ts +67 -16
- package/src/components/FdsDevMode/FdsDevMode.vue +92 -5
- package/src/components/FdsDevMode/FdsDevModeOverlay.vue +55 -3
- package/src/components/FdsDevMode/types.ts +43 -2
- package/src/composables/useDevModeToggles.ts +59 -0
- package/src/index.ts +8 -0
|
@@ -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
|
|
2
|
-
|
|
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 {};
|
package/dist/fds-vue-core.cjs.js
CHANGED
|
@@ -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$
|
|
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$
|
|
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$
|
|
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$
|
|
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$
|
|
1079
|
+
const _hoisted_5$f = {
|
|
1080
1080
|
key: 0,
|
|
1081
1081
|
class: "w-full flex mt-2"
|
|
1082
1082
|
};
|
|
1083
|
-
const _hoisted_6$
|
|
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$
|
|
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$
|
|
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$
|
|
1218
|
-
const _hoisted_6$
|
|
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$
|
|
1273
|
-
vue.createElementVNode("h3", _hoisted_6$
|
|
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
|
|
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(
|
|
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
|
-
|
|
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
|
-
() =>
|
|
10690
|
-
|
|
10691
|
-
|
|
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:
|
|
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[
|
|
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[
|
|
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;
|