@box/metadata-editor 0.92.1 → 0.92.2
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/chunks/metadata-instance-form-card-wrapper.js +36 -35
- package/esm/lib/components/metadata-instance-editor/subcomponents/autofill-overlay/autofill-overlay.js +30 -27
- package/esm/lib/components/metadata-instance-editor/subcomponents/metadata-instance-form/metadata-instance-form.js +82 -76
- package/esm/lib/components/metadata-instance-editor/subcomponents/metadata-instance-form-footer/metadata-instance-form-footer.js +11 -11
- package/package.json +2 -2
- package/styles/autofill-overlay.css +1 -1
- package/styles/metadata-instance-form-card-wrapper.css +1 -1
- package/styles/metadata-instance-form-footer.css +1 -1
@@ -1,14 +1,15 @@
|
|
1
|
-
import
|
2
|
-
import { Card as
|
3
|
-
import { TEMPLATE_CUSTOM_PROPERTIES as
|
4
|
-
import { MetadataInstanceFormFooter as
|
5
|
-
import { MetadataInstanceFormHeader as
|
6
|
-
import { jsx as
|
7
|
-
import '../styles/metadata-instance-form-card-wrapper.css';const
|
8
|
-
metadataInstanceForm:
|
9
|
-
wrapperGradient:
|
10
|
-
suggestionsFetching:
|
11
|
-
metadataInstanceFormContent:
|
1
|
+
import y from "clsx";
|
2
|
+
import { Card as S } from "@box/blueprint-web";
|
3
|
+
import { TEMPLATE_CUSTOM_PROPERTIES as w } from "../esm/lib/constants.js";
|
4
|
+
import { MetadataInstanceFormFooter as A } from "../esm/lib/components/metadata-instance-editor/subcomponents/metadata-instance-form-footer/metadata-instance-form-footer.js";
|
5
|
+
import { MetadataInstanceFormHeader as E } from "../esm/lib/components/metadata-instance-editor/subcomponents/metadata-instance-form-header/metadata-instance-form-header.js";
|
6
|
+
import { jsx as t, jsxs as M } from "react/jsx-runtime";
|
7
|
+
import '../styles/metadata-instance-form-card-wrapper.css';const b = "_metadataInstanceForm_1ae95_1", v = "_wrapperGradient_1ae95_7", D = "_suggestionsFetching_1ae95_12", I = "_metadataInstanceFormContent_1ae95_18", L = "_showOverlay_1ae95_25", s = {
|
8
|
+
metadataInstanceForm: b,
|
9
|
+
wrapperGradient: v,
|
10
|
+
suggestionsFetching: D,
|
11
|
+
metadataInstanceFormContent: I,
|
12
|
+
showOverlay: L
|
12
13
|
}, j = (n) => {
|
13
14
|
const {
|
14
15
|
areAiSuggestionsAvailable: o,
|
@@ -18,36 +19,36 @@ import '../styles/metadata-instance-form-card-wrapper.css';const D = "_metadataI
|
|
18
19
|
isAiSuggestionsFeatureEnabled: m,
|
19
20
|
isBetaLanguageEnabled: d,
|
20
21
|
isLargeFile: c,
|
21
|
-
isDeleteButtonDisabled:
|
22
|
-
suggestions:
|
23
|
-
isFetchingSuggestions:
|
24
|
-
isFormDirty:
|
25
|
-
selectedTemplateInstance:
|
26
|
-
getAiSuggestions:
|
27
|
-
handleCancel:
|
28
|
-
handleDelete:
|
29
|
-
} = n,
|
30
|
-
return /* @__PURE__ */
|
31
|
-
className:
|
32
|
-
children: /* @__PURE__ */
|
22
|
+
isDeleteButtonDisabled: l,
|
23
|
+
suggestions: F,
|
24
|
+
isFetchingSuggestions: e,
|
25
|
+
isFormDirty: u = !1,
|
26
|
+
selectedTemplateInstance: a,
|
27
|
+
getAiSuggestions: _,
|
28
|
+
handleCancel: p,
|
29
|
+
handleDelete: h
|
30
|
+
} = n, f = (a == null ? void 0 : a.templateKey) === w, C = !!F[a == null ? void 0 : a.templateKey];
|
31
|
+
return /* @__PURE__ */ t("div", {
|
32
|
+
className: e && s.wrapperGradient,
|
33
|
+
children: /* @__PURE__ */ M(S, {
|
33
34
|
ref: g,
|
34
|
-
className:
|
35
|
-
[s.suggestionsFetching]:
|
35
|
+
className: y(i, {
|
36
|
+
[s.suggestionsFetching]: e
|
36
37
|
}),
|
37
|
-
children: [/* @__PURE__ */
|
38
|
+
children: [/* @__PURE__ */ t(E, {
|
38
39
|
areAiSuggestionsAvailable: o,
|
39
40
|
hasSuggestions: C,
|
40
|
-
isAiSuggestionsFeatureEnabled: m && !
|
41
|
+
isAiSuggestionsFeatureEnabled: m && !f,
|
41
42
|
isBetaLanguageEnabled: d,
|
42
43
|
isLargeFile: c,
|
43
|
-
isLoading:
|
44
|
-
onAutofill:
|
45
|
-
templateName:
|
46
|
-
}),
|
47
|
-
isDeleteButtonDisabled:
|
48
|
-
isLoading:
|
49
|
-
onCancel: () =>
|
50
|
-
onDelete:
|
44
|
+
isLoading: e,
|
45
|
+
onAutofill: _,
|
46
|
+
templateName: a == null ? void 0 : a.displayName
|
47
|
+
}), a && r, /* @__PURE__ */ t(A, {
|
48
|
+
isDeleteButtonDisabled: l,
|
49
|
+
isLoading: e,
|
50
|
+
onCancel: () => p(u),
|
51
|
+
onDelete: h
|
51
52
|
})]
|
52
53
|
})
|
53
54
|
});
|
@@ -1,50 +1,53 @@
|
|
1
1
|
import { useState as d } from "react";
|
2
|
-
import { LoadingIndicator as
|
3
|
-
import { u as
|
4
|
-
import { AlertTriangle as
|
5
|
-
import { SurfaceStatusSurfaceError as
|
2
|
+
import { LoadingIndicator as y, Text as n, TextButton as g } from "@box/blueprint-web";
|
3
|
+
import { u as v } from "../../../../../../chunks/index.js";
|
4
|
+
import { AlertTriangle as _ } from "@box/blueprint-web-assets/icons/Line";
|
5
|
+
import { SurfaceStatusSurfaceError as p, Size5 as m } from "@box/blueprint-web-assets/tokens/tokens";
|
6
|
+
import h from "clsx";
|
6
7
|
import e from "./messages.js";
|
7
|
-
import { jsxs as
|
8
|
-
import '../../../../../../styles/autofill-overlay.css';const
|
9
|
-
autofillOverlay:
|
10
|
-
|
11
|
-
|
12
|
-
|
13
|
-
|
8
|
+
import { jsxs as b, jsx as i } from "react/jsx-runtime";
|
9
|
+
import '../../../../../../styles/autofill-overlay.css';const O = "_autofillOverlay_15bqk_1", T = "_withError_15bqk_15", S = "_autofillOverlayTitle_15bqk_19", x = "_dismissButton_15bqk_24", B = "_overlayIcon_15bqk_28", I = "_testContainerStyle_15bqk_34", a = {
|
10
|
+
autofillOverlay: O,
|
11
|
+
withError: T,
|
12
|
+
autofillOverlayTitle: S,
|
13
|
+
dismissButton: x,
|
14
|
+
overlayIcon: B,
|
15
|
+
testContainerStyle: I
|
14
16
|
}, A = ({
|
15
|
-
errorCode:
|
17
|
+
errorCode: s,
|
16
18
|
isFetchingSuggestions: c,
|
17
|
-
isLongLoading:
|
19
|
+
isLongLoading: l
|
18
20
|
}) => {
|
19
|
-
const t =
|
20
|
-
let
|
21
|
-
|
22
|
-
const r =
|
23
|
-
return !c && !
|
24
|
-
className:
|
25
|
-
children: [
|
26
|
-
|
21
|
+
const t = v(), [f, u] = d(!1);
|
22
|
+
let o = t.formatMessage(e.defaultLoadingMessage);
|
23
|
+
s && (o = t.formatMessage(e.errorTitle)), l && (o = t.formatMessage(e.longLoadingTitle));
|
24
|
+
const r = l ? t.formatMessage(e.longLoadingDescription) : s && t.formatMessage(e.errorDescription);
|
25
|
+
return !c && !s || f ? null : /* @__PURE__ */ b("div", {
|
26
|
+
className: h(a.autofillOverlay, s && a.withError),
|
27
|
+
children: [s ? /* @__PURE__ */ i(_, {
|
28
|
+
className: a.overlayIcon,
|
29
|
+
color: p,
|
27
30
|
height: m,
|
28
31
|
role: "presentation",
|
29
32
|
width: m
|
30
|
-
}) : /* @__PURE__ */ i(
|
33
|
+
}) : /* @__PURE__ */ i(y, {
|
31
34
|
"aria-label": t.formatMessage(e.loadingAriaLabel),
|
32
35
|
"aria-live": "polite",
|
33
|
-
className:
|
36
|
+
className: a.overlayIcon,
|
34
37
|
size: "large",
|
35
38
|
variant: "default"
|
36
39
|
}), /* @__PURE__ */ i(n, {
|
37
40
|
as: "p",
|
38
|
-
className:
|
41
|
+
className: a.autofillOverlayTitle,
|
39
42
|
variant: "subtitle",
|
40
|
-
children:
|
43
|
+
children: o
|
41
44
|
}), r && /* @__PURE__ */ i(n, {
|
42
45
|
as: "p",
|
43
46
|
color: "textOnLightSecondary",
|
44
47
|
variant: "bodyDefault",
|
45
48
|
children: r
|
46
|
-
}),
|
47
|
-
className:
|
49
|
+
}), s && /* @__PURE__ */ i(g, {
|
50
|
+
className: a.dismissButton,
|
48
51
|
onClick: () => u(!0),
|
49
52
|
"data-target-id": "TextButton-dismissButton",
|
50
53
|
children: t.formatMessage(e.dismissButton)
|
@@ -1,110 +1,116 @@
|
|
1
|
-
import { Formik as
|
2
|
-
import { useState as
|
3
|
-
import
|
4
|
-
import {
|
5
|
-
import {
|
6
|
-
import {
|
7
|
-
import {
|
8
|
-
import {
|
9
|
-
import {
|
10
|
-
import {
|
11
|
-
import {
|
12
|
-
import {
|
13
|
-
import {
|
14
|
-
|
1
|
+
import { Formik as _, Form as $ } from "formik";
|
2
|
+
import { useState as C, useEffect as F, useRef as J, useMemo as q } from "react";
|
3
|
+
import z from "clsx";
|
4
|
+
import { TEMPLATE_CUSTOM_PROPERTIES as G } from "../../../../constants.js";
|
5
|
+
import { AutofillOverlay as H } from "../autofill-overlay/autofill-overlay.js";
|
6
|
+
import { useAutofill as Q } from "../../../../utils/autofill-context.js";
|
7
|
+
import { TemplateInstance as X } from "../../../metadata-editor-fields/metadata-editor-fields.js";
|
8
|
+
import { MetadataEmptyState as Y } from "../../../metadata-empty-state/metadata-empty-state.js";
|
9
|
+
import { UnsavedChangesModal as Z } from "../../../unsaved-changes-modal/unsaved-changes-modal.js";
|
10
|
+
import { CustomInstance as I } from "../custom-instance/custom-instance.js";
|
11
|
+
import { DeleteConfirmationModal as T } from "../delete-confirmation-modal/delete-confirmation-modal.js";
|
12
|
+
import { c as oo } from "../../../../../../chunks/utils.js";
|
13
|
+
import { s as e, M as to } from "../../../../../../chunks/metadata-instance-form-card-wrapper.js";
|
14
|
+
import { jsx as r, jsxs as M } from "react/jsx-runtime";
|
15
|
+
const Co = (E) => {
|
15
16
|
const {
|
16
|
-
areAiSuggestionsAvailable:
|
17
|
+
areAiSuggestionsAvailable: S,
|
17
18
|
customRef: i,
|
18
|
-
isLargeFile:
|
19
|
-
errorCode:
|
20
|
-
isAiSuggestionsFeatureEnabled:
|
21
|
-
isBetaLanguageEnabled:
|
22
|
-
isDeleteButtonDisabled:
|
19
|
+
isLargeFile: y,
|
20
|
+
errorCode: m,
|
21
|
+
isAiSuggestionsFeatureEnabled: s,
|
22
|
+
isBetaLanguageEnabled: D,
|
23
|
+
isDeleteButtonDisabled: O,
|
23
24
|
isUnsavedChangesModalOpen: b = !1,
|
24
|
-
MetadataInstanceFormCustomWrapper:
|
25
|
+
MetadataInstanceFormCustomWrapper: v,
|
25
26
|
selectedTemplateInstance: o,
|
26
27
|
onCancel: A,
|
27
|
-
onDelete:
|
28
|
+
onDelete: x,
|
28
29
|
onDiscardUnsavedChanges: L,
|
29
|
-
onSubmit:
|
30
|
-
setIsUnsavedChangesModalOpen:
|
31
|
-
taxonomyOptionsFetcher:
|
32
|
-
} =
|
30
|
+
onSubmit: N,
|
31
|
+
setIsUnsavedChangesModalOpen: l,
|
32
|
+
taxonomyOptionsFetcher: f
|
33
|
+
} = E, P = v ?? to, [R, u] = C(!1), {
|
33
34
|
isFetchingSuggestions: a,
|
34
|
-
isLongLoading:
|
35
|
-
getAiSuggestions:
|
36
|
-
clearSuggestions:
|
37
|
-
suggestions:
|
38
|
-
} =
|
39
|
-
|
40
|
-
|
41
|
-
}, [
|
42
|
-
const
|
43
|
-
await
|
35
|
+
isLongLoading: g,
|
36
|
+
getAiSuggestions: U,
|
37
|
+
clearSuggestions: d,
|
38
|
+
suggestions: B
|
39
|
+
} = Q();
|
40
|
+
F(() => () => {
|
41
|
+
d();
|
42
|
+
}, [d]);
|
43
|
+
const p = (o == null ? void 0 : o.templateKey) === G, w = async (t) => {
|
44
|
+
await N(t, oo(t, o));
|
44
45
|
}, K = (t) => {
|
45
|
-
t ?
|
46
|
+
t ? l(!0) : A();
|
46
47
|
}, W = () => {
|
47
|
-
|
48
|
+
u(!0);
|
48
49
|
}, j = {
|
49
50
|
metadata: {
|
50
51
|
...o
|
51
52
|
}
|
52
|
-
},
|
53
|
-
|
54
|
-
k(i ??
|
53
|
+
}, h = J(null), [c, k] = C(null);
|
54
|
+
F(() => {
|
55
|
+
k(i ?? h.current);
|
55
56
|
}, [i, o == null ? void 0 : o.templateKey, o == null ? void 0 : o.scope]);
|
56
57
|
const V = q(() => {
|
57
58
|
const t = (o == null ? void 0 : o.fields.length) === 0;
|
58
|
-
|
59
|
-
|
60
|
-
|
61
|
-
|
62
|
-
|
63
|
-
|
64
|
-
|
65
|
-
|
66
|
-
|
59
|
+
if (p)
|
60
|
+
return /* @__PURE__ */ r(I, {
|
61
|
+
isLoading: a
|
62
|
+
});
|
63
|
+
if (t)
|
64
|
+
return /* @__PURE__ */ r(Y, {
|
65
|
+
isBoxAiSuggestionsFeatureEnabled: s,
|
66
|
+
level: "instance"
|
67
|
+
});
|
68
|
+
const n = !!(a || m);
|
69
|
+
return /* @__PURE__ */ M("div", {
|
70
|
+
className: z(e.metadataInstanceFormContent, n && e.showOverlay),
|
71
|
+
children: [/* @__PURE__ */ r(H, {
|
72
|
+
errorCode: m,
|
67
73
|
isFetchingSuggestions: a,
|
68
|
-
isLongLoading:
|
69
|
-
}), /* @__PURE__ */ r(
|
74
|
+
isLongLoading: g
|
75
|
+
}), /* @__PURE__ */ r(X, {
|
70
76
|
disableForm: a,
|
71
|
-
portalElement: i ??
|
72
|
-
taxonomyOptionsFetcher:
|
77
|
+
portalElement: i ?? c,
|
78
|
+
taxonomyOptionsFetcher: f
|
73
79
|
})]
|
74
80
|
});
|
75
|
-
}, [o == null ? void 0 : o.fields.length,
|
76
|
-
return /* @__PURE__ */ r(
|
81
|
+
}, [o == null ? void 0 : o.fields.length, p, a, g, i, c, f, s]);
|
82
|
+
return /* @__PURE__ */ r(_, {
|
77
83
|
initialValues: j,
|
78
|
-
onSubmit:
|
84
|
+
onSubmit: w,
|
79
85
|
children: ({
|
80
86
|
values: t,
|
81
|
-
dirty:
|
82
|
-
}) => /* @__PURE__ */
|
83
|
-
children: [/* @__PURE__ */ r(
|
84
|
-
areAiSuggestionsAvailable:
|
85
|
-
className:
|
86
|
-
formRef:
|
87
|
+
dirty: n
|
88
|
+
}) => /* @__PURE__ */ M($, {
|
89
|
+
children: [/* @__PURE__ */ r(P, {
|
90
|
+
areAiSuggestionsAvailable: S,
|
91
|
+
className: e.metadataInstanceForm,
|
92
|
+
formRef: h,
|
87
93
|
formValues: t,
|
88
|
-
getAiSuggestions:
|
94
|
+
getAiSuggestions: U,
|
89
95
|
handleCancel: K,
|
90
96
|
handleDelete: W,
|
91
|
-
isAiSuggestionsFeatureEnabled:
|
92
|
-
isBetaLanguageEnabled:
|
93
|
-
isDeleteButtonDisabled:
|
97
|
+
isAiSuggestionsFeatureEnabled: s,
|
98
|
+
isBetaLanguageEnabled: D,
|
99
|
+
isDeleteButtonDisabled: O,
|
94
100
|
isFetchingSuggestions: a,
|
95
|
-
isFormDirty:
|
96
|
-
isLargeFile:
|
101
|
+
isFormDirty: n,
|
102
|
+
isLargeFile: y,
|
97
103
|
selectedTemplateInstance: o,
|
98
|
-
suggestions:
|
104
|
+
suggestions: B,
|
99
105
|
children: o && V
|
100
|
-
}), /* @__PURE__ */ r(
|
101
|
-
onBackToEdit: () =>
|
106
|
+
}), /* @__PURE__ */ r(Z, {
|
107
|
+
onBackToEdit: () => l(!1),
|
102
108
|
onDiscardChanges: L,
|
103
109
|
open: b
|
104
|
-
}), /* @__PURE__ */ r(
|
105
|
-
onConfirm: () =>
|
106
|
-
onDismiss: () =>
|
107
|
-
open:
|
110
|
+
}), /* @__PURE__ */ r(T, {
|
111
|
+
onConfirm: () => x(o),
|
112
|
+
onDismiss: () => u(!1),
|
113
|
+
open: R,
|
108
114
|
templateName: o == null ? void 0 : o.displayName
|
109
115
|
})]
|
110
116
|
})
|
@@ -1,9 +1,9 @@
|
|
1
|
-
import { TextButton as
|
2
|
-
import { useFormikContext as
|
1
|
+
import { TextButton as g, Button as r } from "@box/blueprint-web";
|
2
|
+
import { useFormikContext as b } from "formik";
|
3
3
|
import { u as B } from "../../../../../../chunks/index.js";
|
4
4
|
import o from "./messages.js";
|
5
5
|
import { jsx as e, jsxs as i } from "react/jsx-runtime";
|
6
|
-
import '../../../../../../styles/metadata-instance-form-footer.css';const F = "
|
6
|
+
import '../../../../../../styles/metadata-instance-form-footer.css';const F = "_metadataInstanceFormFooter_15nrg_1", f = "_buttonsContainer_15nrg_7", _ = "_buttons_15nrg_7", a = {
|
7
7
|
metadataInstanceFormFooter: F,
|
8
8
|
buttonsContainer: f,
|
9
9
|
buttons: _
|
@@ -16,27 +16,27 @@ import '../../../../../../styles/metadata-instance-form-footer.css';const F = "_
|
|
16
16
|
const t = B(), {
|
17
17
|
isSubmitting: s,
|
18
18
|
submitForm: u
|
19
|
-
} =
|
19
|
+
} = b(), n = m || s;
|
20
20
|
return /* @__PURE__ */ e("div", {
|
21
|
-
className:
|
21
|
+
className: a.metadataInstanceFormFooter,
|
22
22
|
children: /* @__PURE__ */ i("div", {
|
23
|
-
className:
|
24
|
-
children: [/* @__PURE__ */ e(
|
25
|
-
disabled:
|
23
|
+
className: a.buttonsContainer,
|
24
|
+
children: [/* @__PURE__ */ e(g, {
|
25
|
+
disabled: n || d,
|
26
26
|
onClick: l,
|
27
27
|
"data-target-id": "TextButton-deleteButton",
|
28
28
|
children: t.formatMessage(o.deleteButton)
|
29
29
|
}), /* @__PURE__ */ i("div", {
|
30
|
-
className:
|
30
|
+
className: a.buttons,
|
31
31
|
children: [/* @__PURE__ */ e(r, {
|
32
|
-
disabled:
|
32
|
+
disabled: n,
|
33
33
|
onClick: c,
|
34
34
|
size: "large",
|
35
35
|
variant: "secondary",
|
36
36
|
"data-target-id": "Button-cancelButton",
|
37
37
|
children: t.formatMessage(o.cancelButton)
|
38
38
|
}), /* @__PURE__ */ e(r, {
|
39
|
-
disabled:
|
39
|
+
disabled: n,
|
40
40
|
loading: s,
|
41
41
|
loadingAriaLabel: t.formatMessage(o.loadingAriaLabel),
|
42
42
|
onClick: u,
|
package/package.json
CHANGED
@@ -1,6 +1,6 @@
|
|
1
1
|
{
|
2
2
|
"name": "@box/metadata-editor",
|
3
|
-
"version": "0.92.
|
3
|
+
"version": "0.92.2",
|
4
4
|
"peerDependencies": {
|
5
5
|
"@ariakit/react": "0.4.15",
|
6
6
|
"@box/blueprint-web": "^7.30.3",
|
@@ -53,5 +53,5 @@
|
|
53
53
|
"**/*.css"
|
54
54
|
],
|
55
55
|
"license": "SEE LICENSE IN LICENSE",
|
56
|
-
"gitHead": "
|
56
|
+
"gitHead": "7de956c67ea07a5b143cd1aea2425f31322ba1e5"
|
57
57
|
}
|
@@ -1 +1 @@
|
|
1
|
-
.
|
1
|
+
._autofillOverlay_15bqk_1{position:absolute;top:0;left:0;right:0;bottom:0;background:#fafcfee6;z-index:2;display:flex;align-items:center;flex-direction:column;padding:var(--space-4) var(--space-4) 0 var(--space-4)}._withError_15bqk_15{background-color:#ffffffe6}._autofillOverlayTitle_15bqk_19{margin-top:var(--space-4);text-align:center}._dismissButton_15bqk_24{margin-top:var(--space-4)}._overlayIcon_15bqk_28{margin-top:var(--space-4);display:block;position:relative}._testContainerStyle_15bqk_34{padding:var(--space-4);position:relative;width:380px;height:600px;border:1px solid #000}
|
@@ -1 +1 @@
|
|
1
|
-
.
|
1
|
+
._metadataInstanceForm_1ae95_1{display:flex;flex-direction:column;gap:var(--space-3)}._wrapperGradient_1ae95_7{background:linear-gradient(135deg,#fe03dc,#2784fa);border-radius:var(--radius-4)}._suggestionsFetching_1ae95_12{background:var(--box-blue-02);background-clip:padding-box;border:var(--border-1) solid transparent}._metadataInstanceFormContent_1ae95_18{display:flex;flex-direction:column;position:relative;gap:var(--space-3)}._showOverlay_1ae95_25{min-height:172px}
|
@@ -1 +1 @@
|
|
1
|
-
.
|
1
|
+
._metadataInstanceFormFooter_15nrg_1{padding-top:var(--space-4);border-top:solid var(--gray-10) var(--border-1);margin:0 calc(-1 * var(--space-4));width:calc(100% + 2 * var(--space-4))}._metadataInstanceFormFooter_15nrg_1 ._buttonsContainer_15nrg_7{display:flex;justify-content:space-between;padding:0 var(--space-4)}._metadataInstanceFormFooter_15nrg_1 ._buttons_15nrg_7{display:flex;gap:var(--space-2)}
|