@jobber/components 9.1.0 → 9.3.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.
- package/dist/ActivityIndicator/ActivityIndicator.d.ts +1 -1
- package/dist/ActivityIndicator/index.cjs +3 -0
- package/dist/ActivityIndicator/index.mjs +3 -0
- package/dist/ActivityIndicator-cjs.js +5 -1
- package/dist/ActivityIndicator-es.js +5 -1
- package/dist/Autocomplete/index.cjs +1 -0
- package/dist/Autocomplete/index.mjs +1 -0
- package/dist/Autocomplete-es.js +1 -1
- package/dist/Chips/InternalChipDismissible/index.cjs +1 -0
- package/dist/Chips/InternalChipDismissible/index.mjs +1 -0
- package/dist/Chips/index.cjs +1 -0
- package/dist/Chips/index.mjs +1 -0
- package/dist/ConfirmationModal/index.cjs +3 -0
- package/dist/ConfirmationModal/index.mjs +3 -0
- package/dist/ConfirmationModal-cjs.js +21 -10
- package/dist/ConfirmationModal-es.js +21 -10
- package/dist/DataList/components/DataListFilters/components/DataListSort/index.cjs +3 -2
- package/dist/DataList/components/DataListFilters/components/DataListSort/index.mjs +3 -2
- package/dist/DataList/components/DataListFilters/index.cjs +3 -2
- package/dist/DataList/components/DataListFilters/index.mjs +3 -2
- package/dist/DataList/components/DataListLoadMore/index.cjs +3 -0
- package/dist/DataList/components/DataListLoadMore/index.mjs +3 -0
- package/dist/DataList/components/DataListSearch/index.cjs +1 -0
- package/dist/DataList/components/DataListSearch/index.mjs +1 -0
- package/dist/DataList/index.cjs +3 -2
- package/dist/DataList/index.mjs +3 -2
- package/dist/DataTable/index.cjs +1 -0
- package/dist/DataTable/index.mjs +1 -0
- package/dist/DatePicker/DatePicker.messages.d.ts +14 -0
- package/dist/DatePicker/index.cjs +2 -1
- package/dist/DatePicker/index.mjs +2 -1
- package/dist/DatePicker-cjs.js +24 -5
- package/dist/DatePicker-es.js +24 -5
- package/dist/FilterPicker/components/FilterPickerContent/FilterPickerContentList/index.cjs +3 -0
- package/dist/FilterPicker/components/FilterPickerContent/FilterPickerContentList/index.mjs +3 -0
- package/dist/FilterPicker/components/FilterPickerContent/index.cjs +3 -0
- package/dist/FilterPicker/components/FilterPickerContent/index.mjs +3 -0
- package/dist/FilterPicker/index.cjs +3 -2
- package/dist/FilterPicker/index.mjs +3 -2
- package/dist/FormatFile/index.cjs +3 -0
- package/dist/FormatFile/index.mjs +3 -0
- package/dist/Gallery/index.cjs +3 -0
- package/dist/Gallery/index.mjs +3 -0
- package/dist/InputDate/InputDate.messages.d.ts +6 -0
- package/dist/InputDate/index.cjs +3 -2
- package/dist/InputDate/index.mjs +3 -2
- package/dist/InputDate-cjs.js +10 -1
- package/dist/InputDate-es.js +10 -1
- package/dist/InputEmail/index.cjs +1 -0
- package/dist/InputEmail/index.mjs +1 -0
- package/dist/InputPhoneNumber/index.cjs +1 -0
- package/dist/InputPhoneNumber/index.mjs +1 -0
- package/dist/InputText/index.cjs +1 -0
- package/dist/InputText/index.mjs +1 -0
- package/dist/LegacySelect/index.cjs +1 -0
- package/dist/LegacySelect/index.mjs +1 -0
- package/dist/LightBox/LightBox.messages.d.ts +22 -0
- package/dist/LightBox/index.cjs +2 -0
- package/dist/LightBox/index.mjs +2 -0
- package/dist/LightBox-cjs.js +37 -7
- package/dist/LightBox-es.js +37 -7
- package/dist/Menu/menuComposableShared.d.ts +1 -1
- package/dist/Menu-es.js +1 -1
- package/dist/Modal/Modal.messages.d.ts +6 -0
- package/dist/Modal/index.cjs +13 -2
- package/dist/Modal/index.mjs +14 -3
- package/dist/Popover/Popover.messages.d.ts +6 -0
- package/dist/Popover/index.cjs +2 -0
- package/dist/Popover/index.mjs +2 -0
- package/dist/Popover-cjs.js +10 -1
- package/dist/Popover-es.js +10 -1
- package/dist/Spinner/index.cjs +3 -0
- package/dist/Spinner/index.mjs +3 -0
- package/dist/Spinner-cjs.js +4 -1
- package/dist/Spinner-es.js +4 -1
- package/dist/common.messages-cjs.js +20 -0
- package/dist/common.messages-es.js +18 -0
- package/dist/docs/ActivityIndicator/ActivityIndicator.md +1 -1
- package/dist/docs/ConfirmationModal/ConfirmationModal.md +2 -2
- package/dist/docs/LightBox/LightBox.md +1 -1
- package/dist/floating-ui.react-es.js +1 -1
- package/dist/index.cjs +2 -1
- package/dist/index.mjs +2 -1
- package/dist/primitives/InputNumberExperimental/index.cjs +3 -0
- package/dist/primitives/InputNumberExperimental/index.mjs +3 -0
- package/dist/primitives/index.cjs +3 -0
- package/dist/primitives/index.mjs +3 -0
- package/dist/sharedHelpers/i18n/index.cjs +3 -15
- package/dist/sharedHelpers/i18n/index.mjs +2 -19
- package/package.json +2 -2
package/dist/LightBox-es.js
CHANGED
|
@@ -4,6 +4,7 @@ import ReactDOM__default from 'react-dom';
|
|
|
4
4
|
import { useFocusTrap, useDebounce, useIsMounted, useRefocusOnActivator, useOnKeyDown, useBreakpoints } from '@jobber/hooks';
|
|
5
5
|
import classnames from 'classnames';
|
|
6
6
|
import { n as noop } from './noop-es.js';
|
|
7
|
+
import { d as defineMessages, u as useAtlantisI18n } from './useAtlantisI18n-es.js';
|
|
7
8
|
import { B as ButtonDismiss } from './ButtonDismiss-es.js';
|
|
8
9
|
import { T as Text } from './Text-es.js';
|
|
9
10
|
import { B as Button } from './Button-es.js';
|
|
@@ -167,10 +168,34 @@ function togglePrintStyles(open) {
|
|
|
167
168
|
}
|
|
168
169
|
}
|
|
169
170
|
|
|
171
|
+
const lightBoxMessages = defineMessages({
|
|
172
|
+
close: {
|
|
173
|
+
en: "Close",
|
|
174
|
+
es: "Cerrar",
|
|
175
|
+
},
|
|
176
|
+
lightbox: {
|
|
177
|
+
en: "Lightbox",
|
|
178
|
+
es: "Lightbox",
|
|
179
|
+
},
|
|
180
|
+
previousImage: {
|
|
181
|
+
en: "Previous image",
|
|
182
|
+
es: "Imagen anterior",
|
|
183
|
+
},
|
|
184
|
+
nextImage: {
|
|
185
|
+
en: "Next image",
|
|
186
|
+
es: "Imagen siguiente",
|
|
187
|
+
},
|
|
188
|
+
openInNewTab: {
|
|
189
|
+
en: "Open image in new tab",
|
|
190
|
+
es: "Abrir imagen en nueva pestaña",
|
|
191
|
+
},
|
|
192
|
+
});
|
|
193
|
+
|
|
170
194
|
function LightBoxContent() {
|
|
171
195
|
const { open, lightboxRef, handleMouseMove } = useLightBoxContext();
|
|
196
|
+
const { t } = useAtlantisI18n(lightBoxMessages);
|
|
172
197
|
const mounted = useIsMounted();
|
|
173
|
-
const template = (React__default.createElement(React__default.Fragment, null, open && (React__default.createElement("div", { className: styles.lightboxWrapper, tabIndex: 0, "aria-label": "
|
|
198
|
+
const template = (React__default.createElement(React__default.Fragment, null, open && (React__default.createElement("div", { className: styles.lightboxWrapper, tabIndex: 0, "aria-label": t("lightbox"), key: "Lightbox", ref: lightboxRef, onMouseMove: handleMouseMove },
|
|
174
199
|
React__default.createElement(LightBoxBackground, null),
|
|
175
200
|
React__default.createElement(LightBoxOverlay, null),
|
|
176
201
|
React__default.createElement(LightBoxToolbar, null),
|
|
@@ -184,13 +209,15 @@ function LightBoxContent() {
|
|
|
184
209
|
}
|
|
185
210
|
function PreviousButton({ onClick, hideButton, className }) {
|
|
186
211
|
const { mediumAndUp } = useBreakpoints();
|
|
212
|
+
const { t } = useAtlantisI18n(lightBoxMessages);
|
|
187
213
|
return (React__default.createElement("div", { className: `${className} ${hideButton ? styles.buttonHidden : styles.buttonVisible}` },
|
|
188
|
-
React__default.createElement(Button, { size: mediumAndUp ? "large" : "small", variation: "subtle", type: "secondary", icon: "arrowLeft", ariaLabel: "
|
|
214
|
+
React__default.createElement(Button, { size: mediumAndUp ? "large" : "small", variation: "subtle", type: "secondary", icon: "arrowLeft", ariaLabel: t("previousImage"), onClick: onClick })));
|
|
189
215
|
}
|
|
190
216
|
function NextButton({ onClick, hideButton, className }) {
|
|
191
217
|
const { mediumAndUp } = useBreakpoints();
|
|
218
|
+
const { t } = useAtlantisI18n(lightBoxMessages);
|
|
192
219
|
return (React__default.createElement("div", { className: `${className} ${hideButton ? styles.buttonHidden : styles.buttonVisible}` },
|
|
193
|
-
React__default.createElement(Button, { size: mediumAndUp ? "large" : "small", variation: "subtle", type: "secondary", icon: "arrowRight", ariaLabel: "
|
|
220
|
+
React__default.createElement(Button, { size: mediumAndUp ? "large" : "small", variation: "subtle", type: "secondary", icon: "arrowRight", ariaLabel: t("nextImage"), onClick: onClick })));
|
|
194
221
|
}
|
|
195
222
|
/**
|
|
196
223
|
* Blurred, desaturated copy of the current image rendered as a full-bleed
|
|
@@ -216,26 +243,29 @@ function LightBoxOverlay({ className }) {
|
|
|
216
243
|
*/
|
|
217
244
|
function LightBoxToolbar() {
|
|
218
245
|
const { images, currentImageIndex, handleRequestClose } = useLightBoxContext();
|
|
246
|
+
const { t } = useAtlantisI18n(lightBoxMessages);
|
|
219
247
|
return (React__default.createElement(AtlantisThemeContextProvider, { dangerouslyOverrideTheme: "dark" },
|
|
220
248
|
React__default.createElement("div", { className: styles.toolbar },
|
|
221
249
|
React__default.createElement(LightBoxOpenInNewTabAction, null),
|
|
222
250
|
React__default.createElement("div", { className: styles.slideNumber },
|
|
223
251
|
React__default.createElement(Text, null, `${currentImageIndex + 1}/${images.length}`)),
|
|
224
252
|
React__default.createElement("div", { className: styles.closeButton },
|
|
225
|
-
React__default.createElement(ButtonDismiss, { ariaLabel: "
|
|
253
|
+
React__default.createElement(ButtonDismiss, { ariaLabel: t("close"), onClick: handleRequestClose })))));
|
|
226
254
|
}
|
|
227
255
|
/**
|
|
228
256
|
* Opens the current image in a new browser tab. Included in the default
|
|
229
257
|
* `LightBox.Toolbar`. Returns `null` if the current image has no `url`.
|
|
230
258
|
*/
|
|
231
|
-
function LightBoxOpenInNewTabAction({ ariaLabel
|
|
259
|
+
function LightBoxOpenInNewTabAction({ ariaLabel, }) {
|
|
232
260
|
const { images, currentImageIndex } = useLightBoxContext();
|
|
261
|
+
const { t } = useAtlantisI18n(lightBoxMessages);
|
|
262
|
+
const effectiveAriaLabel = ariaLabel !== null && ariaLabel !== void 0 ? ariaLabel : t("openInNewTab");
|
|
233
263
|
const currentImage = images[currentImageIndex];
|
|
234
264
|
if (!(currentImage === null || currentImage === void 0 ? void 0 : currentImage.url))
|
|
235
265
|
return null;
|
|
236
266
|
return (React__default.createElement("div", { className: styles.leftAction },
|
|
237
|
-
React__default.createElement(Tooltip, { message:
|
|
238
|
-
React__default.createElement(Button, { size: "small", variation: "subtle", type: "secondary", icon: "export", ariaLabel:
|
|
267
|
+
React__default.createElement(Tooltip, { message: effectiveAriaLabel },
|
|
268
|
+
React__default.createElement(Button, { size: "small", variation: "subtle", type: "secondary", icon: "export", ariaLabel: effectiveAriaLabel, url: currentImage.url, external: true }))));
|
|
239
269
|
}
|
|
240
270
|
/**
|
|
241
271
|
* The animated hero image with swipe-to-navigate and slide animation.
|
|
@@ -6,7 +6,7 @@ export declare function resolveComposableBaseProps(props: {
|
|
|
6
6
|
readonly style?: React.CSSProperties;
|
|
7
7
|
readonly UNSAFE_className?: string;
|
|
8
8
|
readonly UNSAFE_style?: React.CSSProperties;
|
|
9
|
-
}): Pick<import("../utils/mergeUnsafeProps").UnsafeProps, "
|
|
9
|
+
}): Pick<import("../utils/mergeUnsafeProps").UnsafeProps, "style" | "className">;
|
|
10
10
|
export declare function hasMenuSlot(children: React.ReactNode, slot: MenuSlotName): boolean;
|
|
11
11
|
export declare function resolveMenuTriggerRender({ children, render, }: {
|
|
12
12
|
readonly children?: React.ReactNode;
|
package/dist/Menu-es.js
CHANGED
|
@@ -2,7 +2,7 @@ import React__default, { useState, useRef, useId, useMemo } from 'react';
|
|
|
2
2
|
import { useWindowDimensions, useRefocusOnActivator } from '@jobber/hooks';
|
|
3
3
|
import classnames from 'classnames';
|
|
4
4
|
import { AnimatePresence, motion } from 'framer-motion';
|
|
5
|
-
import { u as useFloating, c as useDismiss,
|
|
5
|
+
import { u as useFloating, c as useDismiss, g as useListNavigation, d as useInteractions, F as FloatingPortal } from './floating-ui.react-es.js';
|
|
6
6
|
import { d as defineMessages, u as useAtlantisI18n } from './useAtlantisI18n-es.js';
|
|
7
7
|
import { B as Button } from './Button-es.js';
|
|
8
8
|
import { T as Typography } from './Typography-es.js';
|
package/dist/Modal/index.cjs
CHANGED
|
@@ -6,6 +6,7 @@ var classnames = require('classnames');
|
|
|
6
6
|
var framerMotion = require('framer-motion');
|
|
7
7
|
var jobberHooks = require('@jobber/hooks');
|
|
8
8
|
var nestedEscape = require('../nestedEscape-cjs.js');
|
|
9
|
+
var useAtlantisI18n = require('../useAtlantisI18n-cjs.js');
|
|
9
10
|
var Heading = require('../Heading-cjs.js');
|
|
10
11
|
var Button = require('../Button-cjs.js');
|
|
11
12
|
var ButtonDismiss = require('../ButtonDismiss-cjs.js');
|
|
@@ -13,6 +14,7 @@ var noop = require('../noop-cjs.js');
|
|
|
13
14
|
var floatingUi_react = require('../floating-ui.react-cjs.js');
|
|
14
15
|
var identity = require('../identity-cjs.js');
|
|
15
16
|
var AtlantisPortalContent = require('../AtlantisPortalContent-cjs.js');
|
|
17
|
+
require('../AtlantisContext-cjs.js');
|
|
16
18
|
require('../Typography-cjs.js');
|
|
17
19
|
require('../tslib.es6-cjs.js');
|
|
18
20
|
require('react-router-dom');
|
|
@@ -38,6 +40,13 @@ var sizes = {"small":"BSZvIAUzFEU-","large":"-ydIALYVvGg-","fullScreen":"_9wD-Ta
|
|
|
38
40
|
|
|
39
41
|
const MODAL_HEADER_ID = "ATL-Modal-Header";
|
|
40
42
|
|
|
43
|
+
const modalMessages = useAtlantisI18n.defineMessages({
|
|
44
|
+
closeModal: {
|
|
45
|
+
en: "Close modal",
|
|
46
|
+
es: "Cerrar modal",
|
|
47
|
+
},
|
|
48
|
+
});
|
|
49
|
+
|
|
41
50
|
function ModalLegacy({ open = false, title, size, dismissible = true, children, primaryAction, secondaryAction, tertiaryAction, onRequestClose, ariaLabel, }) {
|
|
42
51
|
const modalClassName = classnames(styles$1.modal, size && sizes[size]);
|
|
43
52
|
const containerClassName = classnames(styles$1.container, size === "fullScreen" && styles$1.containerFullScreen);
|
|
@@ -67,10 +76,11 @@ function ModalLegacy({ open = false, title, size, dismissible = true, children,
|
|
|
67
76
|
: template;
|
|
68
77
|
}
|
|
69
78
|
function Header({ title, dismissible, onRequestClose }) {
|
|
79
|
+
const { t } = useAtlantisI18n.useAtlantisI18n(modalMessages);
|
|
70
80
|
return (React.createElement("div", { className: styles$1.header, "data-testid": "modal-header" },
|
|
71
81
|
React.createElement(Heading.Heading, { level: 2, id: MODAL_HEADER_ID }, title),
|
|
72
82
|
dismissible && (React.createElement("div", { className: styles$1.closeButton },
|
|
73
|
-
React.createElement(ButtonDismiss.ButtonDismiss, { onClick: onRequestClose, ariaLabel: "
|
|
83
|
+
React.createElement(ButtonDismiss.ButtonDismiss, { onClick: onRequestClose, ariaLabel: t("closeModal") })))));
|
|
74
84
|
}
|
|
75
85
|
function Actions({ primary, secondary, tertiary }) {
|
|
76
86
|
const shouldShow = primary != undefined || secondary != undefined || tertiary != undefined;
|
|
@@ -197,13 +207,14 @@ function useModalStyles(size) {
|
|
|
197
207
|
function ModalHeader({ title, children }) {
|
|
198
208
|
const { header, dismissButton } = useModalStyles();
|
|
199
209
|
const { dismissible, onRequestClose, modalLabelledBy } = useModalContext();
|
|
210
|
+
const { t } = useAtlantisI18n.useAtlantisI18n(modalMessages);
|
|
200
211
|
if (children) {
|
|
201
212
|
return React.createElement(React.Fragment, null, children);
|
|
202
213
|
}
|
|
203
214
|
return (React.createElement("div", { className: header, "data-testid": MODAL_HEADER_ID },
|
|
204
215
|
React.createElement(Heading.Heading, { level: 2, id: modalLabelledBy }, title),
|
|
205
216
|
dismissible && (React.createElement("div", { className: dismissButton },
|
|
206
|
-
React.createElement(ButtonDismiss.ButtonDismiss, { onClick: onRequestClose, ariaLabel: "
|
|
217
|
+
React.createElement(ButtonDismiss.ButtonDismiss, { onClick: onRequestClose, ariaLabel: t("closeModal") })))));
|
|
207
218
|
}
|
|
208
219
|
function ModalActions({ primary, secondary, tertiary, }) {
|
|
209
220
|
const { actionBar, rightAction, leftAction } = useModalStyles();
|
package/dist/Modal/index.mjs
CHANGED
|
@@ -4,13 +4,15 @@ import classnames from 'classnames';
|
|
|
4
4
|
import { AnimatePresence, motion } from 'framer-motion';
|
|
5
5
|
import { useRefocusOnActivator, useFocusTrap } from '@jobber/hooks';
|
|
6
6
|
import { a as addModalEscapeContainment } from '../nestedEscape-es.js';
|
|
7
|
+
import { d as defineMessages, u as useAtlantisI18n } from '../useAtlantisI18n-es.js';
|
|
7
8
|
import { H as Heading } from '../Heading-es.js';
|
|
8
9
|
import { B as Button } from '../Button-es.js';
|
|
9
10
|
import { B as ButtonDismiss } from '../ButtonDismiss-es.js';
|
|
10
11
|
import { n as noop } from '../noop-es.js';
|
|
11
|
-
import { b as useFloatingNodeId, u as useFloating, c as useDismiss,
|
|
12
|
+
import { b as useFloatingNodeId, u as useFloating, c as useDismiss, h as useRole, d as useInteractions, a as useFloatingParentNodeId, e as FloatingTree, f as FloatingNode, F as FloatingPortal, i as FloatingFocusManager, j as FloatingOverlay } from '../floating-ui.react-es.js';
|
|
12
13
|
import { b as identity } from '../identity-es.js';
|
|
13
14
|
import { A as AtlantisPortalContent } from '../AtlantisPortalContent-es.js';
|
|
15
|
+
import '../AtlantisContext-es.js';
|
|
14
16
|
import '../Typography-es.js';
|
|
15
17
|
import '../tslib.es6-es.js';
|
|
16
18
|
import 'react-router-dom';
|
|
@@ -36,6 +38,13 @@ var sizes = {"small":"BSZvIAUzFEU-","large":"-ydIALYVvGg-","fullScreen":"_9wD-Ta
|
|
|
36
38
|
|
|
37
39
|
const MODAL_HEADER_ID = "ATL-Modal-Header";
|
|
38
40
|
|
|
41
|
+
const modalMessages = defineMessages({
|
|
42
|
+
closeModal: {
|
|
43
|
+
en: "Close modal",
|
|
44
|
+
es: "Cerrar modal",
|
|
45
|
+
},
|
|
46
|
+
});
|
|
47
|
+
|
|
39
48
|
function ModalLegacy({ open = false, title, size, dismissible = true, children, primaryAction, secondaryAction, tertiaryAction, onRequestClose, ariaLabel, }) {
|
|
40
49
|
const modalClassName = classnames(styles$1.modal, size && sizes[size]);
|
|
41
50
|
const containerClassName = classnames(styles$1.container, size === "fullScreen" && styles$1.containerFullScreen);
|
|
@@ -65,10 +74,11 @@ function ModalLegacy({ open = false, title, size, dismissible = true, children,
|
|
|
65
74
|
: template;
|
|
66
75
|
}
|
|
67
76
|
function Header({ title, dismissible, onRequestClose }) {
|
|
77
|
+
const { t } = useAtlantisI18n(modalMessages);
|
|
68
78
|
return (React__default.createElement("div", { className: styles$1.header, "data-testid": "modal-header" },
|
|
69
79
|
React__default.createElement(Heading, { level: 2, id: MODAL_HEADER_ID }, title),
|
|
70
80
|
dismissible && (React__default.createElement("div", { className: styles$1.closeButton },
|
|
71
|
-
React__default.createElement(ButtonDismiss, { onClick: onRequestClose, ariaLabel: "
|
|
81
|
+
React__default.createElement(ButtonDismiss, { onClick: onRequestClose, ariaLabel: t("closeModal") })))));
|
|
72
82
|
}
|
|
73
83
|
function Actions({ primary, secondary, tertiary }) {
|
|
74
84
|
const shouldShow = primary != undefined || secondary != undefined || tertiary != undefined;
|
|
@@ -195,13 +205,14 @@ function useModalStyles(size) {
|
|
|
195
205
|
function ModalHeader({ title, children }) {
|
|
196
206
|
const { header, dismissButton } = useModalStyles();
|
|
197
207
|
const { dismissible, onRequestClose, modalLabelledBy } = useModalContext();
|
|
208
|
+
const { t } = useAtlantisI18n(modalMessages);
|
|
198
209
|
if (children) {
|
|
199
210
|
return React__default.createElement(React__default.Fragment, null, children);
|
|
200
211
|
}
|
|
201
212
|
return (React__default.createElement("div", { className: header, "data-testid": MODAL_HEADER_ID },
|
|
202
213
|
React__default.createElement(Heading, { level: 2, id: modalLabelledBy }, title),
|
|
203
214
|
dismissible && (React__default.createElement("div", { className: dismissButton },
|
|
204
|
-
React__default.createElement(ButtonDismiss, { onClick: onRequestClose, ariaLabel: "
|
|
215
|
+
React__default.createElement(ButtonDismiss, { onClick: onRequestClose, ariaLabel: t("closeModal") })))));
|
|
205
216
|
}
|
|
206
217
|
function ModalActions({ primary, secondary, tertiary, }) {
|
|
207
218
|
const { actionBar, rightAction, leftAction } = useModalStyles();
|
package/dist/Popover/index.cjs
CHANGED
|
@@ -23,6 +23,8 @@ require('../_baseFor-cjs.js');
|
|
|
23
23
|
require('../keysIn-cjs.js');
|
|
24
24
|
require('../_isIterateeCall-cjs.js');
|
|
25
25
|
require('../_setToString-cjs.js');
|
|
26
|
+
require('../useAtlantisI18n-cjs.js');
|
|
27
|
+
require('../AtlantisContext-cjs.js');
|
|
26
28
|
require('../ButtonDismiss-cjs.js');
|
|
27
29
|
require('../Button-cjs.js');
|
|
28
30
|
require('react-router-dom');
|
package/dist/Popover/index.mjs
CHANGED
|
@@ -21,6 +21,8 @@ import '../_baseFor-es.js';
|
|
|
21
21
|
import '../keysIn-es.js';
|
|
22
22
|
import '../_isIterateeCall-es.js';
|
|
23
23
|
import '../_setToString-es.js';
|
|
24
|
+
import '../useAtlantisI18n-es.js';
|
|
25
|
+
import '../AtlantisContext-es.js';
|
|
24
26
|
import '../ButtonDismiss-es.js';
|
|
25
27
|
import '../Button-es.js';
|
|
26
28
|
import 'react-router-dom';
|
package/dist/Popover-cjs.js
CHANGED
|
@@ -7,6 +7,7 @@ var floatingUi_react = require('./floating-ui.react-cjs.js');
|
|
|
7
7
|
var jobberHooks = require('@jobber/hooks');
|
|
8
8
|
var floatingUi_reactDom = require('./floating-ui.react-dom-cjs.js');
|
|
9
9
|
var AtlantisPortalContent = require('./AtlantisPortalContent-cjs.js');
|
|
10
|
+
var useAtlantisI18n = require('./useAtlantisI18n-cjs.js');
|
|
10
11
|
var ButtonDismiss = require('./ButtonDismiss-cjs.js');
|
|
11
12
|
|
|
12
13
|
const POPOVER_OFFSET = 10;
|
|
@@ -113,6 +114,13 @@ function PopoverWrapper({ children, setFloatingElement, UNSAFE_className, UNSAFE
|
|
|
113
114
|
return React.createElement(floatingUi_react.FloatingPortal, null, content);
|
|
114
115
|
}
|
|
115
116
|
|
|
117
|
+
const popoverMessages = useAtlantisI18n.defineMessages({
|
|
118
|
+
closeDialog: {
|
|
119
|
+
en: "Close dialog",
|
|
120
|
+
es: "Cerrar diálogo",
|
|
121
|
+
},
|
|
122
|
+
});
|
|
123
|
+
|
|
116
124
|
function Popover({ onRequestClose, children, attachTo, open, preferredPlacement = "auto", UNSAFE_className, UNSAFE_style, }) {
|
|
117
125
|
return (React.createElement(Popover.Provider, { attachTo: attachTo, open: open, preferredPlacement: preferredPlacement, UNSAFE_className: UNSAFE_className, UNSAFE_style: UNSAFE_style },
|
|
118
126
|
React.createElement(Popover.DismissButton, { UNSAFE_className: UNSAFE_className, UNSAFE_style: UNSAFE_style, onClick: onRequestClose }),
|
|
@@ -153,7 +161,8 @@ Popover.DismissButton = function PopoverDismissButton(props) {
|
|
|
153
161
|
const { UNSAFE_className, UNSAFE_style, children } = props, dismissButtonProps = tslib_es6.__rest(props, ["UNSAFE_className", "UNSAFE_style", "children"]);
|
|
154
162
|
const popoverStyles = usePopoverStyles();
|
|
155
163
|
const classes = classnames(popoverStyles.dismissButton, UNSAFE_className === null || UNSAFE_className === void 0 ? void 0 : UNSAFE_className.dismissButtonContainer);
|
|
156
|
-
|
|
164
|
+
const { t } = useAtlantisI18n.useAtlantisI18n(popoverMessages);
|
|
165
|
+
return (React.createElement("div", { className: classes, style: (_a = UNSAFE_style === null || UNSAFE_style === void 0 ? void 0 : UNSAFE_style.dismissButtonContainer) !== null && _a !== void 0 ? _a : {}, "data-testid": "ATL-Popover-Dismiss-Button-Container" }, children !== null && children !== void 0 ? children : (React.createElement(ButtonDismiss.ButtonDismiss, Object.assign({ ariaLabel: t("closeDialog") }, dismissButtonProps)))));
|
|
157
166
|
};
|
|
158
167
|
|
|
159
168
|
exports.Popover = Popover;
|
package/dist/Popover-es.js
CHANGED
|
@@ -5,6 +5,7 @@ import { u as useFloating, F as FloatingPortal } from './floating-ui.react-es.js
|
|
|
5
5
|
import { useRefocusOnActivator } from '@jobber/hooks';
|
|
6
6
|
import { a as arrow, b as autoUpdate, o as offset, s as shift, l as limitShift, c as autoPlacement, f as flip } from './floating-ui.react-dom-es.js';
|
|
7
7
|
import { A as AtlantisPortalContent } from './AtlantisPortalContent-es.js';
|
|
8
|
+
import { d as defineMessages, u as useAtlantisI18n } from './useAtlantisI18n-es.js';
|
|
8
9
|
import { B as ButtonDismiss } from './ButtonDismiss-es.js';
|
|
9
10
|
|
|
10
11
|
const POPOVER_OFFSET = 10;
|
|
@@ -111,6 +112,13 @@ function PopoverWrapper({ children, setFloatingElement, UNSAFE_className, UNSAFE
|
|
|
111
112
|
return React__default.createElement(FloatingPortal, null, content);
|
|
112
113
|
}
|
|
113
114
|
|
|
115
|
+
const popoverMessages = defineMessages({
|
|
116
|
+
closeDialog: {
|
|
117
|
+
en: "Close dialog",
|
|
118
|
+
es: "Cerrar diálogo",
|
|
119
|
+
},
|
|
120
|
+
});
|
|
121
|
+
|
|
114
122
|
function Popover({ onRequestClose, children, attachTo, open, preferredPlacement = "auto", UNSAFE_className, UNSAFE_style, }) {
|
|
115
123
|
return (React__default.createElement(Popover.Provider, { attachTo: attachTo, open: open, preferredPlacement: preferredPlacement, UNSAFE_className: UNSAFE_className, UNSAFE_style: UNSAFE_style },
|
|
116
124
|
React__default.createElement(Popover.DismissButton, { UNSAFE_className: UNSAFE_className, UNSAFE_style: UNSAFE_style, onClick: onRequestClose }),
|
|
@@ -151,7 +159,8 @@ Popover.DismissButton = function PopoverDismissButton(props) {
|
|
|
151
159
|
const { UNSAFE_className, UNSAFE_style, children } = props, dismissButtonProps = __rest(props, ["UNSAFE_className", "UNSAFE_style", "children"]);
|
|
152
160
|
const popoverStyles = usePopoverStyles();
|
|
153
161
|
const classes = classnames(popoverStyles.dismissButton, UNSAFE_className === null || UNSAFE_className === void 0 ? void 0 : UNSAFE_className.dismissButtonContainer);
|
|
154
|
-
|
|
162
|
+
const { t } = useAtlantisI18n(popoverMessages);
|
|
163
|
+
return (React__default.createElement("div", { className: classes, style: (_a = UNSAFE_style === null || UNSAFE_style === void 0 ? void 0 : UNSAFE_style.dismissButtonContainer) !== null && _a !== void 0 ? _a : {}, "data-testid": "ATL-Popover-Dismiss-Button-Container" }, children !== null && children !== void 0 ? children : (React__default.createElement(ButtonDismiss, Object.assign({ ariaLabel: t("closeDialog") }, dismissButtonProps)))));
|
|
155
164
|
};
|
|
156
165
|
|
|
157
166
|
export { Popover as P, usePopoverStyles as a, usePopoverContext as u };
|
package/dist/Spinner/index.cjs
CHANGED
package/dist/Spinner/index.mjs
CHANGED
package/dist/Spinner-cjs.js
CHANGED
|
@@ -2,6 +2,8 @@
|
|
|
2
2
|
|
|
3
3
|
var React = require('react');
|
|
4
4
|
var classnames = require('classnames');
|
|
5
|
+
var common_messages = require('./common.messages-cjs.js');
|
|
6
|
+
var useAtlantisI18n = require('./useAtlantisI18n-cjs.js');
|
|
5
7
|
|
|
6
8
|
var styles = {"spinner":"_6hfmGZoXNyg-","animationSpin":"aT3CETCJ4hQ-","small":"bMfynkzmlL4-","inline":"NA68eWblbLo-","spinning":"aCBq1WrkI4M-"};
|
|
7
9
|
|
|
@@ -9,11 +11,12 @@ var styles = {"spinner":"_6hfmGZoXNyg-","animationSpin":"aT3CETCJ4hQ-","small":"
|
|
|
9
11
|
* @deprecated Use `ActivityIndicator` instead.
|
|
10
12
|
*/
|
|
11
13
|
function Spinner({ size = "base", inline }) {
|
|
14
|
+
const { t } = useAtlantisI18n.useAtlantisI18n(common_messages.commonMessages);
|
|
12
15
|
const spinnerStyles = classnames(styles.spinner, {
|
|
13
16
|
[styles.small]: size === "small",
|
|
14
17
|
[styles.inline]: inline,
|
|
15
18
|
});
|
|
16
|
-
return (React.createElement("div", { className: spinnerStyles, role: "alert", "aria-busy": true, "aria-label": "
|
|
19
|
+
return (React.createElement("div", { className: spinnerStyles, role: "alert", "aria-busy": true, "aria-label": t("Loading") }));
|
|
17
20
|
}
|
|
18
21
|
|
|
19
22
|
exports.Spinner = Spinner;
|
package/dist/Spinner-es.js
CHANGED
|
@@ -1,5 +1,7 @@
|
|
|
1
1
|
import React__default from 'react';
|
|
2
2
|
import classnames from 'classnames';
|
|
3
|
+
import { c as commonMessages } from './common.messages-es.js';
|
|
4
|
+
import { u as useAtlantisI18n } from './useAtlantisI18n-es.js';
|
|
3
5
|
|
|
4
6
|
var styles = {"spinner":"_6hfmGZoXNyg-","animationSpin":"aT3CETCJ4hQ-","small":"bMfynkzmlL4-","inline":"NA68eWblbLo-","spinning":"aCBq1WrkI4M-"};
|
|
5
7
|
|
|
@@ -7,11 +9,12 @@ var styles = {"spinner":"_6hfmGZoXNyg-","animationSpin":"aT3CETCJ4hQ-","small":"
|
|
|
7
9
|
* @deprecated Use `ActivityIndicator` instead.
|
|
8
10
|
*/
|
|
9
11
|
function Spinner({ size = "base", inline }) {
|
|
12
|
+
const { t } = useAtlantisI18n(commonMessages);
|
|
10
13
|
const spinnerStyles = classnames(styles.spinner, {
|
|
11
14
|
[styles.small]: size === "small",
|
|
12
15
|
[styles.inline]: inline,
|
|
13
16
|
});
|
|
14
|
-
return (React__default.createElement("div", { className: spinnerStyles, role: "alert", "aria-busy": true, "aria-label": "
|
|
17
|
+
return (React__default.createElement("div", { className: spinnerStyles, role: "alert", "aria-busy": true, "aria-label": t("Loading") }));
|
|
15
18
|
}
|
|
16
19
|
|
|
17
20
|
export { Spinner as S };
|
|
@@ -0,0 +1,20 @@
|
|
|
1
|
+
'use strict';
|
|
2
|
+
|
|
3
|
+
var useAtlantisI18n = require('./useAtlantisI18n-cjs.js');
|
|
4
|
+
|
|
5
|
+
const commonMessages = useAtlantisI18n.defineMessages({
|
|
6
|
+
Loading: {
|
|
7
|
+
en: "Loading",
|
|
8
|
+
es: "Cargando",
|
|
9
|
+
},
|
|
10
|
+
Confirm: {
|
|
11
|
+
en: "Confirm",
|
|
12
|
+
es: "Confirmar",
|
|
13
|
+
},
|
|
14
|
+
Cancel: {
|
|
15
|
+
en: "Cancel",
|
|
16
|
+
es: "Cancelar",
|
|
17
|
+
},
|
|
18
|
+
});
|
|
19
|
+
|
|
20
|
+
exports.commonMessages = commonMessages;
|
|
@@ -0,0 +1,18 @@
|
|
|
1
|
+
import { d as defineMessages } from './useAtlantisI18n-es.js';
|
|
2
|
+
|
|
3
|
+
const commonMessages = defineMessages({
|
|
4
|
+
Loading: {
|
|
5
|
+
en: "Loading",
|
|
6
|
+
es: "Cargando",
|
|
7
|
+
},
|
|
8
|
+
Confirm: {
|
|
9
|
+
en: "Confirm",
|
|
10
|
+
es: "Confirmar",
|
|
11
|
+
},
|
|
12
|
+
Cancel: {
|
|
13
|
+
en: "Cancel",
|
|
14
|
+
es: "Cancelar",
|
|
15
|
+
},
|
|
16
|
+
});
|
|
17
|
+
|
|
18
|
+
export { commonMessages as c };
|
|
@@ -110,7 +110,7 @@ component from React Native.
|
|
|
110
110
|
|
|
111
111
|
| Prop | Type | Required | Default | Description |
|
|
112
112
|
|------|------|----------|---------|-------------|
|
|
113
|
-
| `ariaLabel` | `string` | No | `Loading` | Accessible label exposed via `aria-label` on the root element. Override to localize or to describe the specific activ... |
|
|
113
|
+
| `ariaLabel` | `string` | No | `"Loading"` | Accessible label exposed via `aria-label` on the root element. Override to localize or to describe the specific activ... |
|
|
114
114
|
| `className` | `string` | No | — | Custom class name merged onto the root element alongside the component's own classes. |
|
|
115
115
|
| `size` | `"base" | "small"` | No | `base` | Visual size. `base` renders at 32px, `small` renders at 16px. |
|
|
116
116
|
| `style` | `CSSProperties` | No | — | Custom inline styles applied to the root element. |
|
|
@@ -111,9 +111,9 @@ language should be direct and honest about the impact without being alarming.
|
|
|
111
111
|
|
|
112
112
|
| Prop | Type | Required | Default | Description |
|
|
113
113
|
|------|------|----------|---------|-------------|
|
|
114
|
-
| `cancelLabel` | `string` | No |
|
|
114
|
+
| `cancelLabel` | `string` | No | — | Label for the cancel button. |
|
|
115
115
|
| `children` | `ReactNode` | No | — | Child component. Not displayed if **message** prop is passed. |
|
|
116
|
-
| `confirmLabel` | `string` | No |
|
|
116
|
+
| `confirmLabel` | `string` | No | — | Label for the confirm button. |
|
|
117
117
|
| `message` | `string` | No | — | Text or rich text content for the body of the modal. Not displayed if **children** prop is passed. |
|
|
118
118
|
| `onCancel` | `() => void` | No | — | Callback for when the cancel button is pressed. |
|
|
119
119
|
| `onConfirm` | `() => void` | No | — | Callback for when the confirm button is pressed. |
|
|
@@ -230,7 +230,7 @@ window.HTMLElement.prototype.scrollIntoView = scrollIntoViewMock;
|
|
|
230
230
|
|
|
231
231
|
| Prop | Type | Required | Default | Description |
|
|
232
232
|
|------|------|----------|---------|-------------|
|
|
233
|
-
| `ariaLabel` | `string` | No | `Open image in new tab` | Accessible label for the action, also used as the tooltip message. |
|
|
233
|
+
| `ariaLabel` | `string` | No | `"Open image in new tab"` | Accessible label for the action, also used as the tooltip message. |
|
|
234
234
|
|
|
235
235
|
#### LightBox.Overlay
|
|
236
236
|
|
|
@@ -3809,4 +3809,4 @@ function useTransitionStyles(context, props) {
|
|
|
3809
3809
|
};
|
|
3810
3810
|
}
|
|
3811
3811
|
|
|
3812
|
-
export { FloatingPortal as F, useFloatingParentNodeId as a, useFloatingNodeId as b, useDismiss as c, useInteractions as d, FloatingTree as e, FloatingNode as f,
|
|
3812
|
+
export { FloatingPortal as F, useFloatingParentNodeId as a, useFloatingNodeId as b, useDismiss as c, useInteractions as d, FloatingTree as e, FloatingNode as f, useListNavigation as g, useRole as h, FloatingFocusManager as i, FloatingOverlay as j, useClick as k, useTransitionStyles as l, FloatingArrow as m, useFloating as u };
|
package/dist/index.cjs
CHANGED
|
@@ -91,6 +91,8 @@ var Tooltip = require('./Tooltip-cjs.js');
|
|
|
91
91
|
var Typography = require('./Typography-cjs.js');
|
|
92
92
|
var design = require('@jobber/design');
|
|
93
93
|
require('classnames');
|
|
94
|
+
require('./common.messages-cjs.js');
|
|
95
|
+
require('./useAtlantisI18n-cjs.js');
|
|
94
96
|
require('./_commonjsHelpers-cjs.js');
|
|
95
97
|
require('./identity-cjs.js');
|
|
96
98
|
require('./isTypedArray-cjs.js');
|
|
@@ -107,7 +109,6 @@ require('react/jsx-runtime');
|
|
|
107
109
|
require('react-dom');
|
|
108
110
|
require('./floating-ui.react-dom-cjs.js');
|
|
109
111
|
require('./maxHeight-cjs.js');
|
|
110
|
-
require('./useAtlantisI18n-cjs.js');
|
|
111
112
|
require('./mergeRefs-cjs.js');
|
|
112
113
|
require('./filterDataAttributes-cjs.js');
|
|
113
114
|
require('color');
|
package/dist/index.mjs
CHANGED
|
@@ -89,6 +89,8 @@ export { T as Tooltip } from './Tooltip-es.js';
|
|
|
89
89
|
export { T as Typography } from './Typography-es.js';
|
|
90
90
|
export { iconNames, isIconName } from '@jobber/design';
|
|
91
91
|
import 'classnames';
|
|
92
|
+
import './common.messages-es.js';
|
|
93
|
+
import './useAtlantisI18n-es.js';
|
|
92
94
|
import './_commonjsHelpers-es.js';
|
|
93
95
|
import './identity-es.js';
|
|
94
96
|
import './isTypedArray-es.js';
|
|
@@ -105,7 +107,6 @@ import 'react/jsx-runtime';
|
|
|
105
107
|
import 'react-dom';
|
|
106
108
|
import './floating-ui.react-dom-es.js';
|
|
107
109
|
import './maxHeight-es.js';
|
|
108
|
-
import './useAtlantisI18n-es.js';
|
|
109
110
|
import './mergeRefs-es.js';
|
|
110
111
|
import './filterDataAttributes-es.js';
|
|
111
112
|
import 'color';
|
|
@@ -5,6 +5,9 @@ require('../../tslib.es6-cjs.js');
|
|
|
5
5
|
require('react');
|
|
6
6
|
require('classnames');
|
|
7
7
|
require('../../ActivityIndicator-cjs.js');
|
|
8
|
+
require('../../common.messages-cjs.js');
|
|
9
|
+
require('../../useAtlantisI18n-cjs.js');
|
|
10
|
+
require('../../AtlantisContext-cjs.js');
|
|
8
11
|
require('../../Button-cjs.js');
|
|
9
12
|
require('react-router-dom');
|
|
10
13
|
require('../../Icon-cjs.js');
|
|
@@ -3,6 +3,9 @@ import '../../tslib.es6-es.js';
|
|
|
3
3
|
import 'react';
|
|
4
4
|
import 'classnames';
|
|
5
5
|
import '../../ActivityIndicator-es.js';
|
|
6
|
+
import '../../common.messages-es.js';
|
|
7
|
+
import '../../useAtlantisI18n-es.js';
|
|
8
|
+
import '../../AtlantisContext-es.js';
|
|
6
9
|
import '../../Button-es.js';
|
|
7
10
|
import 'react-router-dom';
|
|
8
11
|
import '../../Icon-es.js';
|
|
@@ -35,6 +35,9 @@ require('../resolveAriaLabelledBy-cjs.js');
|
|
|
35
35
|
require('../stringifyLocale-cjs.js');
|
|
36
36
|
require('../useLabel-cjs.js');
|
|
37
37
|
require('../ActivityIndicator-cjs.js');
|
|
38
|
+
require('../common.messages-cjs.js');
|
|
39
|
+
require('../useAtlantisI18n-cjs.js');
|
|
40
|
+
require('../AtlantisContext-cjs.js');
|
|
38
41
|
require('../FieldDescription-cjs.js');
|
|
39
42
|
require('../NumberFieldInput-cjs.js');
|
|
40
43
|
require('../SelectGroupLabel-cjs.js');
|
|
@@ -33,6 +33,9 @@ import '../resolveAriaLabelledBy-es.js';
|
|
|
33
33
|
import '../stringifyLocale-es.js';
|
|
34
34
|
import '../useLabel-es.js';
|
|
35
35
|
import '../ActivityIndicator-es.js';
|
|
36
|
+
import '../common.messages-es.js';
|
|
37
|
+
import '../useAtlantisI18n-es.js';
|
|
38
|
+
import '../AtlantisContext-es.js';
|
|
36
39
|
import '../FieldDescription-es.js';
|
|
37
40
|
import '../NumberFieldInput-es.js';
|
|
38
41
|
import '../SelectGroupLabel-es.js';
|
|
@@ -1,24 +1,12 @@
|
|
|
1
1
|
'use strict';
|
|
2
2
|
|
|
3
|
+
var common_messages = require('../../common.messages-cjs.js');
|
|
3
4
|
var useAtlantisI18n = require('../../useAtlantisI18n-cjs.js');
|
|
4
5
|
require('react');
|
|
5
6
|
require('../../AtlantisContext-cjs.js');
|
|
6
7
|
|
|
7
|
-
const commonMessages = useAtlantisI18n.defineMessages({
|
|
8
|
-
Loading: {
|
|
9
|
-
en: "Loading",
|
|
10
|
-
es: "Cargando",
|
|
11
|
-
},
|
|
12
|
-
Confirm: {
|
|
13
|
-
en: "Confirm",
|
|
14
|
-
es: "Confirmar",
|
|
15
|
-
},
|
|
16
|
-
Cancel: {
|
|
17
|
-
en: "Cancel",
|
|
18
|
-
es: "Cancelar",
|
|
19
|
-
},
|
|
20
|
-
});
|
|
21
8
|
|
|
9
|
+
|
|
10
|
+
exports.commonMessages = common_messages.commonMessages;
|
|
22
11
|
exports.defineMessages = useAtlantisI18n.defineMessages;
|
|
23
12
|
exports.useAtlantisI18n = useAtlantisI18n.useAtlantisI18n;
|
|
24
|
-
exports.commonMessages = commonMessages;
|
|
@@ -1,21 +1,4 @@
|
|
|
1
|
-
|
|
2
|
-
export { u as useAtlantisI18n } from '../../useAtlantisI18n-es.js';
|
|
1
|
+
export { c as commonMessages } from '../../common.messages-es.js';
|
|
2
|
+
export { d as defineMessages, u as useAtlantisI18n } from '../../useAtlantisI18n-es.js';
|
|
3
3
|
import 'react';
|
|
4
4
|
import '../../AtlantisContext-es.js';
|
|
5
|
-
|
|
6
|
-
const commonMessages = defineMessages({
|
|
7
|
-
Loading: {
|
|
8
|
-
en: "Loading",
|
|
9
|
-
es: "Cargando",
|
|
10
|
-
},
|
|
11
|
-
Confirm: {
|
|
12
|
-
en: "Confirm",
|
|
13
|
-
es: "Confirmar",
|
|
14
|
-
},
|
|
15
|
-
Cancel: {
|
|
16
|
-
en: "Cancel",
|
|
17
|
-
es: "Cancelar",
|
|
18
|
-
},
|
|
19
|
-
});
|
|
20
|
-
|
|
21
|
-
export { commonMessages, defineMessages };
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@jobber/components",
|
|
3
|
-
"version": "9.
|
|
3
|
+
"version": "9.3.0",
|
|
4
4
|
"license": "MIT",
|
|
5
5
|
"type": "module",
|
|
6
6
|
"main": "dist/index.cjs",
|
|
@@ -545,5 +545,5 @@
|
|
|
545
545
|
"> 1%",
|
|
546
546
|
"IE 10"
|
|
547
547
|
],
|
|
548
|
-
"gitHead": "
|
|
548
|
+
"gitHead": "bd293888112d04f31748f9df2612954afda103e4"
|
|
549
549
|
}
|