@layers-app/shared 0.4.8 → 0.4.9
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/AttachmentsGalleryModal/AttachmentsGalleryContext.d.ts +2 -0
- package/dist/components/AttachmentsGalleryModal/AttachmentsGalleryContext.d.ts.map +1 -1
- package/dist/components/AttachmentsGalleryModal/AttachmentsGalleryContext.js +22 -17
- package/dist/components/AttachmentsGalleryModal/components/AttachmentVideoPlayer.d.ts +15 -0
- package/dist/components/AttachmentsGalleryModal/components/AttachmentVideoPlayer.d.ts.map +1 -0
- package/dist/components/AttachmentsGalleryModal/components/AttachmentVideoPlayer.js +36 -0
- package/dist/components/AttachmentsGalleryModal/components/GallerySlide.js +22 -22
- package/dist/components/AttachmentsGalleryModal/components/LegacyAttachmentVideoPlayer.d.ts +14 -0
- package/dist/components/AttachmentsGalleryModal/components/LegacyAttachmentVideoPlayer.d.ts.map +1 -0
- package/dist/components/AttachmentsGalleryModal/components/LegacyAttachmentVideoPlayer.js +31 -0
- package/dist/components/AttachmentsGalleryModal/components/ModalHeader.d.ts.map +1 -1
- package/dist/components/AttachmentsGalleryModal/components/ModalHeader.js +179 -120
- package/dist/components/AttachmentsGalleryModal/components/StatusVideoPlayer.d.ts +18 -0
- package/dist/components/AttachmentsGalleryModal/components/StatusVideoPlayer.d.ts.map +1 -0
- package/dist/components/AttachmentsGalleryModal/components/StatusVideoPlayer.js +35 -0
- package/dist/components/AttachmentsGalleryModal/components/useAttachmentVideoStatus.d.ts +34 -0
- package/dist/components/AttachmentsGalleryModal/components/useAttachmentVideoStatus.d.ts.map +1 -0
- package/dist/components/AttachmentsGalleryModal/components/useAttachmentVideoStatus.js +71 -0
- package/dist/components/AttachmentsGalleryModal/styles.module.css.js +31 -27
- package/dist/components/CommentComposer/CommentComposer.module.css.js +13 -9
- package/dist/components/CommentComposer/index.d.ts +2 -1
- package/dist/components/CommentComposer/index.d.ts.map +1 -1
- package/dist/components/CommentComposer/index.js +343 -325
- package/dist/components/CommentComposer/types.d.ts +4 -0
- package/dist/components/CommentComposer/types.d.ts.map +1 -1
- package/dist/components/VideoPlayer/VideoPlayer.d.ts +24 -0
- package/dist/components/VideoPlayer/VideoPlayer.d.ts.map +1 -0
- package/dist/components/VideoPlayer/VideoPlayer.js +727 -0
- package/dist/components/VideoPlayer/components/MobileDrawer/index.d.ts +8 -0
- package/dist/components/VideoPlayer/components/MobileDrawer/index.d.ts.map +1 -0
- package/dist/components/VideoPlayer/components/MobileDrawer/index.js +67 -0
- package/dist/components/VideoPlayer/components/SelectListOptionButton.d.ts +7 -0
- package/dist/components/VideoPlayer/components/SelectListOptionButton.d.ts.map +1 -0
- package/dist/components/VideoPlayer/components/SelectListOptionButton.js +44 -0
- package/dist/components/VideoPlayer/components/StoryboardPreview.d.ts +9 -0
- package/dist/components/VideoPlayer/components/StoryboardPreview.d.ts.map +1 -0
- package/dist/components/VideoPlayer/components/StoryboardPreview.js +38 -0
- package/dist/components/VideoPlayer/components/VideoCustomControls.d.ts +33 -0
- package/dist/components/VideoPlayer/components/VideoCustomControls.d.ts.map +1 -0
- package/dist/components/VideoPlayer/components/VideoCustomControls.js +601 -0
- package/dist/components/VideoPlayer/components/VideoIcons.d.ts +25 -0
- package/dist/components/VideoPlayer/components/VideoIcons.d.ts.map +1 -0
- package/dist/components/VideoPlayer/components/VideoIcons.js +145 -0
- package/dist/components/VideoPlayer/components/VideoMenu.d.ts +27 -0
- package/dist/components/VideoPlayer/components/VideoMenu.d.ts.map +1 -0
- package/dist/components/VideoPlayer/components/VideoMenu.js +77 -0
- package/dist/components/VideoPlayer/components/VideoMobileSettingsDrawer.d.ts +17 -0
- package/dist/components/VideoPlayer/components/VideoMobileSettingsDrawer.d.ts.map +1 -0
- package/dist/components/VideoPlayer/components/VideoMobileSettingsDrawer.js +289 -0
- package/dist/components/VideoPlayer/components/VideoQualityMenu/index.d.ts +10 -0
- package/dist/components/VideoPlayer/components/VideoQualityMenu/index.d.ts.map +1 -0
- package/dist/components/VideoPlayer/components/VideoQualityMenu/index.js +55 -0
- package/dist/components/VideoPlayer/components/VideoSelect.d.ts +10 -0
- package/dist/components/VideoPlayer/components/VideoSelect.d.ts.map +1 -0
- package/dist/components/VideoPlayer/components/VideoSelect.js +168 -0
- package/dist/components/VideoPlayer/components/VideoSettingsMenu/index.d.ts +12 -0
- package/dist/components/VideoPlayer/components/VideoSettingsMenu/index.d.ts.map +1 -0
- package/dist/components/VideoPlayer/components/VideoSettingsMenu/index.js +48 -0
- package/dist/components/VideoPlayer/components/VideoSettingsModal/ChaptersSection.d.ts +25 -0
- package/dist/components/VideoPlayer/components/VideoSettingsModal/ChaptersSection.d.ts.map +1 -0
- package/dist/components/VideoPlayer/components/VideoSettingsModal/ChaptersSection.js +384 -0
- package/dist/components/VideoPlayer/components/VideoSettingsModal/CoverSection.d.ts +21 -0
- package/dist/components/VideoPlayer/components/VideoSettingsModal/CoverSection.d.ts.map +1 -0
- package/dist/components/VideoPlayer/components/VideoSettingsModal/CoverSection.js +264 -0
- package/dist/components/VideoPlayer/components/VideoSettingsModal/FooterActions.d.ts +10 -0
- package/dist/components/VideoPlayer/components/VideoSettingsModal/FooterActions.d.ts.map +1 -0
- package/dist/components/VideoPlayer/components/VideoSettingsModal/FooterActions.js +39 -0
- package/dist/components/VideoPlayer/components/VideoSettingsModal/ManualSubtitlesPanel.d.ts +14 -0
- package/dist/components/VideoPlayer/components/VideoSettingsModal/ManualSubtitlesPanel.d.ts.map +1 -0
- package/dist/components/VideoPlayer/components/VideoSettingsModal/ManualSubtitlesPanel.js +360 -0
- package/dist/components/VideoPlayer/components/VideoSettingsModal/SubtitleTrackRow.d.ts +16 -0
- package/dist/components/VideoPlayer/components/VideoSettingsModal/SubtitleTrackRow.d.ts.map +1 -0
- package/dist/components/VideoPlayer/components/VideoSettingsModal/SubtitlesSection.d.ts +14 -0
- package/dist/components/VideoPlayer/components/VideoSettingsModal/SubtitlesSection.d.ts.map +1 -0
- package/dist/components/VideoPlayer/components/VideoSettingsModal/context.d.ts +4 -0
- package/dist/components/VideoPlayer/components/VideoSettingsModal/context.d.ts.map +1 -0
- package/dist/components/VideoPlayer/components/VideoSettingsModal/context.js +14 -0
- package/dist/components/VideoPlayer/components/VideoSettingsModal/index.d.ts +22 -0
- package/dist/components/VideoPlayer/components/VideoSettingsModal/index.d.ts.map +1 -0
- package/dist/components/VideoPlayer/components/VideoSettingsModal/index.js +211 -0
- package/dist/components/VideoPlayer/components/VideoSpeedMenu/index.d.ts +11 -0
- package/dist/components/VideoPlayer/components/VideoSpeedMenu/index.d.ts.map +1 -0
- package/dist/components/VideoPlayer/components/VideoSpeedMenu/index.js +41 -0
- package/dist/components/VideoPlayer/components/VideoSubtitlesMenu/index.d.ts +10 -0
- package/dist/components/VideoPlayer/components/VideoSubtitlesMenu/index.d.ts.map +1 -0
- package/dist/components/VideoPlayer/components/VideoSubtitlesMenu/index.js +69 -0
- package/dist/components/VideoPlayer/hooks/useStoryboard.d.ts +21 -0
- package/dist/components/VideoPlayer/hooks/useStoryboard.d.ts.map +1 -0
- package/dist/components/VideoPlayer/hooks/useStoryboard.js +91 -0
- package/dist/components/VideoPlayer/index.d.ts +11 -0
- package/dist/components/VideoPlayer/index.d.ts.map +1 -0
- package/dist/components/VideoPlayer/types.d.ts +101 -0
- package/dist/components/VideoPlayer/types.d.ts.map +1 -0
- package/dist/components/VideoPlayer/utils/chapters.d.ts +8 -0
- package/dist/components/VideoPlayer/utils/chapters.d.ts.map +1 -0
- package/dist/components/VideoPlayer/utils/chapters.js +38 -0
- package/dist/components/VideoPlayer/utils/storyboard.d.ts +5 -0
- package/dist/components/VideoPlayer/utils/storyboard.d.ts.map +1 -0
- package/dist/components/VideoPlayer/utils/storyboard.js +47 -0
- package/dist/components/VideoPlayer/utils/subtitles.d.ts +18 -0
- package/dist/components/VideoPlayer/utils/subtitles.d.ts.map +1 -0
- package/dist/components/VideoPlayer/utils/subtitles.js +23 -0
- package/dist/components/VideoPlayer/utils/touch.d.ts +3 -0
- package/dist/components/VideoPlayer/utils/touch.d.ts.map +1 -0
- package/dist/components/VideoPlayer/utils/touch.js +5 -0
- package/dist/components/VideoPlayer/utils/videoPlayerUtils.d.ts +10 -0
- package/dist/components/VideoPlayer/utils/videoPlayerUtils.d.ts.map +1 -0
- package/dist/components/VideoPlayer/utils/videoPlayerUtils.js +22 -0
- package/dist/components/VideoPlayer/utils/videoSettings.d.ts +69 -0
- package/dist/components/VideoPlayer/utils/videoSettings.d.ts.map +1 -0
- package/dist/components/VideoPlayer/utils/videoSettings.js +90 -0
- package/dist/helpers/getFileType.d.ts +1 -1
- package/dist/helpers/getFileType.d.ts.map +1 -1
- package/dist/helpers/getFileType.js +3 -2
- package/dist/hooks/useDateUtils.d.ts +3 -1
- package/dist/hooks/useDateUtils.d.ts.map +1 -1
- package/dist/hooks/useDateUtils.js +23 -18
- package/dist/index.css +1 -1
- package/dist/index.d.ts +2 -0
- package/dist/index.d.ts.map +1 -1
- package/dist/index.js +585 -567
- package/dist/lang/locales/ui_en.json.js +9 -7
- package/dist/lang/locales/ui_es.json.js +6 -4
- package/dist/lang/locales/ui_ru.json.js +8 -6
- package/dist/videoSettings/createVideoSettingsDataSource.d.ts +19 -0
- package/dist/videoSettings/createVideoSettingsDataSource.d.ts.map +1 -0
- package/dist/videoSettings/createVideoSettingsDataSource.js +127 -0
- package/package.json +2 -1
|
@@ -14,6 +14,8 @@ interface AttachmentsGalleryContextValue {
|
|
|
14
14
|
setZoomPercentage: (value: number) => void;
|
|
15
15
|
transformRefs: React.MutableRefObject<ReactZoomPanPinchContentRef[]>;
|
|
16
16
|
prevIndexRef: React.MutableRefObject<number>;
|
|
17
|
+
videoRefreshKey: number;
|
|
18
|
+
refreshVideo: () => void;
|
|
17
19
|
}
|
|
18
20
|
export declare const useAttachmentsGalleryContext: () => AttachmentsGalleryContextValue;
|
|
19
21
|
interface AttachmentsGalleryProviderProps {
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"AttachmentsGalleryContext.d.ts","sourceRoot":"","sources":["../../../src/components/AttachmentsGalleryModal/AttachmentsGalleryContext.tsx"],"names":[],"mappings":"AAAA,OAAO,EACL,KAAK,SAAS,
|
|
1
|
+
{"version":3,"file":"AttachmentsGalleryContext.d.ts","sourceRoot":"","sources":["../../../src/components/AttachmentsGalleryModal/AttachmentsGalleryContext.tsx"],"names":[],"mappings":"AAAA,OAAO,EACL,KAAK,SAAS,EAMf,MAAM,OAAO,CAAC;AACf,OAAO,EAAE,2BAA2B,EAAE,MAAM,sBAAsB,CAAC;AAEnE,OAAO,KAAK,EAAE,iBAAiB,EAAE,MAAM,gBAAgB,CAAC;AAExD,UAAU,8BAA8B;IACtC,KAAK,EAAE,iBAAiB,GAAG,IAAI,CAAC;IAChC,QAAQ,EAAE,CAAC,KAAK,EAAE,iBAAiB,GAAG,IAAI,KAAK,IAAI,CAAC;IACpD,aAAa,EAAE,OAAO,CAAC;IACvB,gBAAgB,EAAE,CAAC,KAAK,EAAE,OAAO,KAAK,IAAI,CAAC;IAC3C,aAAa,EAAE,OAAO,CAAC;IACvB,gBAAgB,EAAE,CAAC,KAAK,EAAE,OAAO,KAAK,IAAI,CAAC;IAC3C,aAAa,EAAE,MAAM,CAAC;IACtB,gBAAgB,EAAE,CAAC,KAAK,EAAE,MAAM,KAAK,IAAI,CAAC;IAC1C,cAAc,EAAE,MAAM,CAAC;IACvB,iBAAiB,EAAE,CAAC,KAAK,EAAE,MAAM,KAAK,IAAI,CAAC;IAC3C,aAAa,EAAE,KAAK,CAAC,gBAAgB,CAAC,2BAA2B,EAAE,CAAC,CAAC;IACrE,YAAY,EAAE,KAAK,CAAC,gBAAgB,CAAC,MAAM,CAAC,CAAC;IAC7C,eAAe,EAAE,MAAM,CAAC;IACxB,YAAY,EAAE,MAAM,IAAI,CAAC;CAC1B;AAKD,eAAO,MAAM,4BAA4B,sCAQxC,CAAC;AAEF,UAAU,+BAA+B;IACvC,QAAQ,EAAE,SAAS,CAAC;IACpB,YAAY,EAAE,MAAM,CAAC;CACtB;AAED,eAAO,MAAM,0BAA0B,GAAI,6BAGxC,+BAA+B,4CAoCjC,CAAC"}
|
|
@@ -1,39 +1,44 @@
|
|
|
1
|
-
import { jsx as
|
|
2
|
-
import { useState as e, useRef as
|
|
3
|
-
const
|
|
4
|
-
const t =
|
|
1
|
+
import { jsx as A } from "react/jsx-runtime";
|
|
2
|
+
import { useState as e, useRef as o, useCallback as G, createContext as R, useContext as b } from "react";
|
|
3
|
+
const s = R(null), I = () => {
|
|
4
|
+
const t = b(s);
|
|
5
5
|
if (!t)
|
|
6
6
|
throw new Error(
|
|
7
7
|
"useAttachmentsGalleryContext must be used within AttachmentsGalleryProvider"
|
|
8
8
|
);
|
|
9
9
|
return t;
|
|
10
|
-
},
|
|
10
|
+
}, g = ({
|
|
11
11
|
children: t,
|
|
12
|
-
initialIndex:
|
|
12
|
+
initialIndex: n
|
|
13
13
|
}) => {
|
|
14
|
-
const [
|
|
15
|
-
|
|
16
|
-
|
|
14
|
+
const [r, c] = e(null), [l, a] = e(!1), [m, u] = e(!1), [x, d] = e(n ?? 0), [f, i] = e(100), h = o([]), v = o(0), [C, y] = e(0), P = G(
|
|
15
|
+
() => y((S) => S + 1),
|
|
16
|
+
[]
|
|
17
|
+
);
|
|
18
|
+
return /* @__PURE__ */ A(
|
|
19
|
+
s.Provider,
|
|
17
20
|
{
|
|
18
21
|
value: {
|
|
19
|
-
embla:
|
|
20
|
-
setEmbla:
|
|
21
|
-
canScrollPrev:
|
|
22
|
+
embla: r,
|
|
23
|
+
setEmbla: c,
|
|
24
|
+
canScrollPrev: l,
|
|
22
25
|
setCanScrollPrev: a,
|
|
23
26
|
canScrollNext: m,
|
|
24
|
-
setCanScrollNext:
|
|
25
|
-
selectedIndex:
|
|
27
|
+
setCanScrollNext: u,
|
|
28
|
+
selectedIndex: x,
|
|
26
29
|
setSelectedIndex: d,
|
|
27
30
|
zoomPercentage: f,
|
|
28
31
|
setZoomPercentage: i,
|
|
29
32
|
transformRefs: h,
|
|
30
|
-
prevIndexRef: v
|
|
33
|
+
prevIndexRef: v,
|
|
34
|
+
videoRefreshKey: C,
|
|
35
|
+
refreshVideo: P
|
|
31
36
|
},
|
|
32
37
|
children: t
|
|
33
38
|
}
|
|
34
39
|
);
|
|
35
40
|
};
|
|
36
41
|
export {
|
|
37
|
-
|
|
38
|
-
|
|
42
|
+
g as AttachmentsGalleryProvider,
|
|
43
|
+
I as useAttachmentsGalleryContext
|
|
39
44
|
};
|
|
@@ -0,0 +1,15 @@
|
|
|
1
|
+
type Props = {
|
|
2
|
+
attachmentId: string;
|
|
3
|
+
isActive?: boolean;
|
|
4
|
+
autoPlay?: boolean;
|
|
5
|
+
};
|
|
6
|
+
/**
|
|
7
|
+
* Chooses how to play a video attachment based on its status:
|
|
8
|
+
* - pipeline videos (status 200) → {@link StatusVideoPlayer}: playback URLs +
|
|
9
|
+
* subtitles/chapters/storyboard come from `/status`, no `/vod` polling.
|
|
10
|
+
* - legacy attachments (status 404) → {@link LegacyAttachmentVideoPlayer}: the
|
|
11
|
+
* existing `/vod` resolution flow.
|
|
12
|
+
*/
|
|
13
|
+
export declare const AttachmentVideoPlayer: ({ attachmentId, isActive, autoPlay, }: Props) => import("react/jsx-runtime").JSX.Element;
|
|
14
|
+
export {};
|
|
15
|
+
//# sourceMappingURL=AttachmentVideoPlayer.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"AttachmentVideoPlayer.d.ts","sourceRoot":"","sources":["../../../../src/components/AttachmentsGalleryModal/components/AttachmentVideoPlayer.tsx"],"names":[],"mappings":"AAQA,KAAK,KAAK,GAAG;IACX,YAAY,EAAE,MAAM,CAAC;IACrB,QAAQ,CAAC,EAAE,OAAO,CAAC;IACnB,QAAQ,CAAC,EAAE,OAAO,CAAC;CACpB,CAAC;AAEF;;;;;;GAMG;AACH,eAAO,MAAM,qBAAqB,GAAI,uCAInC,KAAK,4CAiCP,CAAC"}
|
|
@@ -0,0 +1,36 @@
|
|
|
1
|
+
import { jsx as e } from "react/jsx-runtime";
|
|
2
|
+
import { useAttachmentsGalleryContext as a } from "../AttachmentsGalleryContext.js";
|
|
3
|
+
import { BaseLoader as l } from "../../Loaders/BaseLoader.js";
|
|
4
|
+
import { LegacyAttachmentVideoPlayer as f } from "./LegacyAttachmentVideoPlayer.js";
|
|
5
|
+
import { StatusVideoPlayer as n } from "./StatusVideoPlayer.js";
|
|
6
|
+
import { useAttachmentVideoStatus as d } from "./useAttachmentVideoStatus.js";
|
|
7
|
+
import p from "../styles.module.css.js";
|
|
8
|
+
const P = ({
|
|
9
|
+
attachmentId: r,
|
|
10
|
+
isActive: t,
|
|
11
|
+
autoPlay: o
|
|
12
|
+
}) => {
|
|
13
|
+
const { videoRefreshKey: i } = a(), { status: m, loaded: s } = d(
|
|
14
|
+
r,
|
|
15
|
+
i
|
|
16
|
+
);
|
|
17
|
+
return s ? m ? /* @__PURE__ */ e(
|
|
18
|
+
n,
|
|
19
|
+
{
|
|
20
|
+
attachmentId: r,
|
|
21
|
+
status: m,
|
|
22
|
+
isActive: t,
|
|
23
|
+
autoPlay: o
|
|
24
|
+
}
|
|
25
|
+
) : /* @__PURE__ */ e(
|
|
26
|
+
f,
|
|
27
|
+
{
|
|
28
|
+
attachmentId: r,
|
|
29
|
+
isActive: t,
|
|
30
|
+
autoPlay: o
|
|
31
|
+
}
|
|
32
|
+
) : /* @__PURE__ */ e("div", { className: p.videoPlayerFill, children: /* @__PURE__ */ e(l, {}) });
|
|
33
|
+
};
|
|
34
|
+
export {
|
|
35
|
+
P as AttachmentVideoPlayer
|
|
36
|
+
};
|
|
@@ -3,30 +3,30 @@ import { memo as P } from "react";
|
|
|
3
3
|
import { TransformWrapper as F, TransformComponent as T } from "react-zoom-pan-pinch";
|
|
4
4
|
import { Box as a } from "@mantine/core";
|
|
5
5
|
import { BaseLoader as U } from "../../Loaders/BaseLoader.js";
|
|
6
|
-
import {
|
|
7
|
-
import { TRANSFORM_COMPONENT_STYLES as
|
|
6
|
+
import { AttachmentVideoPlayer as E } from "./AttachmentVideoPlayer.js";
|
|
7
|
+
import { TRANSFORM_COMPONENT_STYLES as d, ZOOM_CONFIG as s } from "../constants.js";
|
|
8
8
|
import { useGetPreviewUrl as O } from "../hooks/useGetPreviewUrl.js";
|
|
9
9
|
import { usePanning as b } from "../hooks/usePanning.js";
|
|
10
10
|
import { ErrorSection as t } from "./ErrorSection.js";
|
|
11
11
|
import { UnsupportedSection as x } from "./UnsupportedSection.js";
|
|
12
12
|
import i from "../styles.module.css.js";
|
|
13
|
-
const
|
|
14
|
-
({ onTransformed:
|
|
13
|
+
const Z = P(
|
|
14
|
+
({ onTransformed: N, attachment: e, isActive: p, ref: S }) => {
|
|
15
15
|
const {
|
|
16
|
-
isError:
|
|
16
|
+
isError: n,
|
|
17
17
|
setIsError: g,
|
|
18
18
|
fileUrl: o,
|
|
19
19
|
isFetching: l,
|
|
20
|
-
isVideo:
|
|
21
|
-
isPdf:
|
|
20
|
+
isVideo: c,
|
|
21
|
+
isPdf: f,
|
|
22
22
|
isAudio: u,
|
|
23
|
-
isSupported:
|
|
24
|
-
} = O(e), y = b({ isFetching: l, isVideo:
|
|
25
|
-
return
|
|
23
|
+
isSupported: m
|
|
24
|
+
} = O(e), y = b({ isFetching: l, isVideo: c });
|
|
25
|
+
return c && !l && m ? /* @__PURE__ */ r("div", { style: d, children: /* @__PURE__ */ r(a, { className: i.videoContainer, children: /* @__PURE__ */ r(
|
|
26
26
|
E,
|
|
27
27
|
{
|
|
28
|
-
isActive:
|
|
29
|
-
autoPlay:
|
|
28
|
+
isActive: p,
|
|
29
|
+
autoPlay: !1,
|
|
30
30
|
attachmentId: e.id
|
|
31
31
|
}
|
|
32
32
|
) }) }) : /* @__PURE__ */ r(
|
|
@@ -35,15 +35,15 @@ const h = P(
|
|
|
35
35
|
panning: {
|
|
36
36
|
disabled: !0
|
|
37
37
|
},
|
|
38
|
-
onTransformed:
|
|
38
|
+
onTransformed: N,
|
|
39
39
|
initialScale: s.initialScale,
|
|
40
40
|
minScale: s.minScale,
|
|
41
41
|
maxScale: s.maxScale,
|
|
42
42
|
limitToBounds: !0,
|
|
43
|
-
disabled: l ||
|
|
43
|
+
disabled: l || f || u || !m,
|
|
44
44
|
disablePadding: !0,
|
|
45
45
|
centerZoomedOut: !0,
|
|
46
|
-
ref:
|
|
46
|
+
ref: S,
|
|
47
47
|
wheel: {
|
|
48
48
|
disabled: !1,
|
|
49
49
|
step: s.wheelStep
|
|
@@ -54,28 +54,28 @@ const h = P(
|
|
|
54
54
|
children: /* @__PURE__ */ r(
|
|
55
55
|
T,
|
|
56
56
|
{
|
|
57
|
-
wrapperStyle:
|
|
58
|
-
contentStyle:
|
|
57
|
+
wrapperStyle: d,
|
|
58
|
+
contentStyle: d,
|
|
59
59
|
wrapperProps: y,
|
|
60
|
-
children:
|
|
60
|
+
children: m ? l ? /* @__PURE__ */ r(U, {}) : f ? n || !(e?.Url || o) ? /* @__PURE__ */ r(t, {}) : /* @__PURE__ */ r(a, { className: i.pdfContainer, children: /* @__PURE__ */ r(
|
|
61
61
|
"iframe",
|
|
62
62
|
{
|
|
63
63
|
title: e.originalFileName || "pdf",
|
|
64
64
|
src: e?.Url ?? o ?? "",
|
|
65
65
|
className: i.pdfFrame
|
|
66
66
|
}
|
|
67
|
-
) }) : u ?
|
|
67
|
+
) }) : u ? n || !(e?.Url || o) ? /* @__PURE__ */ r(t, {}) : /* @__PURE__ */ C(a, { className: i.audioContainer, children: [
|
|
68
68
|
/* @__PURE__ */ r(a, { className: i.audioName, children: e.originalFileName || "audio" }),
|
|
69
69
|
/* @__PURE__ */ r(
|
|
70
70
|
"audio",
|
|
71
71
|
{
|
|
72
72
|
src: e?.Url ?? o ?? "",
|
|
73
73
|
controls: !0,
|
|
74
|
-
autoPlay:
|
|
74
|
+
autoPlay: p,
|
|
75
75
|
className: i.audioElement
|
|
76
76
|
}
|
|
77
77
|
)
|
|
78
|
-
] }) :
|
|
78
|
+
] }) : n ? /* @__PURE__ */ r(t, {}) : /* @__PURE__ */ r(
|
|
79
79
|
"img",
|
|
80
80
|
{
|
|
81
81
|
onError: () => g(!0),
|
|
@@ -97,5 +97,5 @@ const h = P(
|
|
|
97
97
|
}
|
|
98
98
|
);
|
|
99
99
|
export {
|
|
100
|
-
|
|
100
|
+
Z as GallerySlide
|
|
101
101
|
};
|
|
@@ -0,0 +1,14 @@
|
|
|
1
|
+
type Props = {
|
|
2
|
+
attachmentId: string;
|
|
3
|
+
isActive?: boolean;
|
|
4
|
+
autoPlay?: boolean;
|
|
5
|
+
};
|
|
6
|
+
/**
|
|
7
|
+
* Player for legacy attachments that never went through the video pipeline (no
|
|
8
|
+
* VideoAsset, `/status` 404). Stream resolution stays on the existing `/vod`
|
|
9
|
+
* flow via `useShakePlayer` (HLS when ready, raw fallback). No subtitles/chapters
|
|
10
|
+
* exist for these, so none are passed.
|
|
11
|
+
*/
|
|
12
|
+
export declare const LegacyAttachmentVideoPlayer: ({ attachmentId, isActive, autoPlay, }: Props) => import("react/jsx-runtime").JSX.Element;
|
|
13
|
+
export {};
|
|
14
|
+
//# sourceMappingURL=LegacyAttachmentVideoPlayer.d.ts.map
|
package/dist/components/AttachmentsGalleryModal/components/LegacyAttachmentVideoPlayer.d.ts.map
ADDED
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"LegacyAttachmentVideoPlayer.d.ts","sourceRoot":"","sources":["../../../../src/components/AttachmentsGalleryModal/components/LegacyAttachmentVideoPlayer.tsx"],"names":[],"mappings":"AAMA,KAAK,KAAK,GAAG;IACX,YAAY,EAAE,MAAM,CAAC;IACrB,QAAQ,CAAC,EAAE,OAAO,CAAC;IACnB,QAAQ,CAAC,EAAE,OAAO,CAAC;CACpB,CAAC;AAEF;;;;;GAKG;AACH,eAAO,MAAM,2BAA2B,GAAI,uCAIzC,KAAK,4CAwBP,CAAC"}
|
|
@@ -0,0 +1,31 @@
|
|
|
1
|
+
import { jsx as e } from "react/jsx-runtime";
|
|
2
|
+
import { ErrorSection as m } from "./ErrorSection.js";
|
|
3
|
+
import { useShakePlayer as n } from "./ShakePlayer/useShakePlayer.js";
|
|
4
|
+
import c from "../styles.module.css.js";
|
|
5
|
+
import { VideoPlayer as d } from "../../VideoPlayer/VideoPlayer.js";
|
|
6
|
+
const u = ({
|
|
7
|
+
attachmentId: o,
|
|
8
|
+
isActive: t,
|
|
9
|
+
autoPlay: l
|
|
10
|
+
}) => {
|
|
11
|
+
const { containerRef: s, vodUrl: r, rawUrl: i, isError: a } = n({
|
|
12
|
+
attachmentId: o,
|
|
13
|
+
isActive: t,
|
|
14
|
+
autoPlay: l
|
|
15
|
+
});
|
|
16
|
+
return a ? /* @__PURE__ */ e(m, {}) : /* @__PURE__ */ e("div", { ref: s, className: c.videoPlayerFill, children: /* @__PURE__ */ e(
|
|
17
|
+
d,
|
|
18
|
+
{
|
|
19
|
+
videoId: o,
|
|
20
|
+
source: {
|
|
21
|
+
streamUrl: r,
|
|
22
|
+
nativeUrl: i,
|
|
23
|
+
optimizedReady: !!r,
|
|
24
|
+
isProcessing: !r && !i
|
|
25
|
+
}
|
|
26
|
+
}
|
|
27
|
+
) });
|
|
28
|
+
};
|
|
29
|
+
export {
|
|
30
|
+
u as LegacyAttachmentVideoPlayer
|
|
31
|
+
};
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"ModalHeader.d.ts","sourceRoot":"","sources":["../../../../src/components/AttachmentsGalleryModal/components/ModalHeader.tsx"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"ModalHeader.d.ts","sourceRoot":"","sources":["../../../../src/components/AttachmentsGalleryModal/components/ModalHeader.tsx"],"names":[],"mappings":"AAeA,OAAO,EAAE,aAAa,EAAE,MAAM,sBAAsB,CAAC;AAWrD,UAAU,gBAAgB;IACxB,OAAO,EAAE,MAAM,IAAI,CAAC;IACpB,WAAW,CAAC,EAAE,aAAa,EAAE,CAAC;CAC/B;AAED,eAAO,MAAM,WAAW,iEACK,gBAAgB,6CAiN5C,CAAC"}
|
|
@@ -1,132 +1,191 @@
|
|
|
1
|
-
import { jsxs as
|
|
2
|
-
import { memo as
|
|
3
|
-
import { useTranslation as
|
|
4
|
-
import { Box as
|
|
5
|
-
import { IconDownload as
|
|
6
|
-
import {
|
|
7
|
-
import {
|
|
8
|
-
import {
|
|
9
|
-
import {
|
|
10
|
-
import {
|
|
11
|
-
import {
|
|
12
|
-
import
|
|
13
|
-
|
|
14
|
-
|
|
15
|
-
|
|
16
|
-
|
|
17
|
-
|
|
18
|
-
|
|
1
|
+
import { jsxs as r, Fragment as P, jsx as e } from "react/jsx-runtime";
|
|
2
|
+
import { memo as V, useRef as O, useState as Z, useMemo as j } from "react";
|
|
3
|
+
import { useTranslation as x } from "react-i18next";
|
|
4
|
+
import { Box as B, Tooltip as a, ActionIcon as n, Flex as m, Text as h, Loader as E } from "@mantine/core";
|
|
5
|
+
import { IconDownload as A, IconMinus as U, IconPlus as G, IconSettings as H, IconX as K } from "@tabler/icons-react";
|
|
6
|
+
import { getEnvConfig as L } from "../../../config/envConfig.js";
|
|
7
|
+
import { getFileIcons as X } from "../../../helpers/getFileIcons.js";
|
|
8
|
+
import { getFileType as q } from "../../../helpers/getFileType.js";
|
|
9
|
+
import { createVideoSettingsDataSource as J } from "../../../videoSettings/createVideoSettingsDataSource.js";
|
|
10
|
+
import { useAttachmentsGalleryContext as Q } from "../AttachmentsGalleryContext.js";
|
|
11
|
+
import { getAttachmentFormat as W, zoomStep as S } from "../helpers.js";
|
|
12
|
+
import { useDownloadFile as Y } from "../hooks/useDownloadFile.js";
|
|
13
|
+
import { useZoomReset as _ } from "../hooks/useZoomReset.js";
|
|
14
|
+
import { useAttachmentVideoStatus as $ } from "./useAttachmentVideoStatus.js";
|
|
15
|
+
import i from "../styles.module.css.js";
|
|
16
|
+
import { VideoSettingsModal as ee } from "../../VideoPlayer/components/VideoSettingsModal/index.js";
|
|
17
|
+
const be = V(
|
|
18
|
+
({ onClose: C, attachments: I }) => {
|
|
19
|
+
_();
|
|
20
|
+
const { t: l } = x("ui"), { t: u } = x(), p = O(null), {
|
|
21
|
+
zoomPercentage: D,
|
|
22
|
+
transformRefs: f,
|
|
23
|
+
selectedIndex: g,
|
|
24
|
+
videoRefreshKey: F,
|
|
25
|
+
refreshVideo: c
|
|
26
|
+
} = Q(), t = I?.[g], b = t ? W(t) : null, { status: o } = $(
|
|
27
|
+
b?.isVideo ? t?.id : void 0,
|
|
28
|
+
F
|
|
29
|
+
), s = o?.videoId ?? null, [N, v] = Z(!1), d = j(
|
|
30
|
+
() => s ? J(s, {
|
|
31
|
+
baseUrl: L().apiBaseUrl
|
|
32
|
+
}) : null,
|
|
33
|
+
[s]
|
|
34
|
+
), R = () => {
|
|
35
|
+
S({
|
|
36
|
+
animationRef: p,
|
|
19
37
|
dir: "in",
|
|
20
|
-
activeRef:
|
|
38
|
+
activeRef: f.current[g]
|
|
21
39
|
});
|
|
22
|
-
},
|
|
23
|
-
|
|
24
|
-
animationRef:
|
|
40
|
+
}, k = () => {
|
|
41
|
+
S({
|
|
42
|
+
animationRef: p,
|
|
25
43
|
dir: "out",
|
|
26
|
-
activeRef:
|
|
44
|
+
activeRef: f.current[g]
|
|
27
45
|
});
|
|
28
|
-
}, { isFetching:
|
|
29
|
-
return /* @__PURE__ */
|
|
30
|
-
|
|
31
|
-
|
|
32
|
-
|
|
33
|
-
|
|
34
|
-
|
|
35
|
-
|
|
36
|
-
|
|
37
|
-
|
|
38
|
-
|
|
39
|
-
|
|
40
|
-
|
|
41
|
-
|
|
42
|
-
|
|
43
|
-
|
|
44
|
-
|
|
45
|
-
|
|
46
|
-
|
|
47
|
-
className: n.headerAction,
|
|
48
|
-
size: "lg",
|
|
49
|
-
variant: "subtle",
|
|
50
|
-
loading: d,
|
|
51
|
-
onClick: g,
|
|
52
|
-
children: /* @__PURE__ */ e(f, { size: 20 })
|
|
53
|
-
}
|
|
54
|
-
) }) : /* @__PURE__ */ l(s, { align: "center", gap: 8, ml: 6, miw: 0, children: [
|
|
55
|
-
o ? T(
|
|
56
|
-
Z(
|
|
57
|
-
o.contentType ?? "",
|
|
58
|
-
!1,
|
|
59
|
-
o.originalFileName
|
|
60
|
-
),
|
|
61
|
-
!1,
|
|
62
|
-
20
|
|
63
|
-
) : null,
|
|
64
|
-
/* @__PURE__ */ e(u, { fw: 500, fz: 14, c: "var(--app-gallary-text)", truncate: !0, children: o?.originalFileName || "" })
|
|
65
|
-
] }),
|
|
66
|
-
A ? /* @__PURE__ */ l(s, { gap: "xs", children: [
|
|
67
|
-
/* @__PURE__ */ e(t, { withArrow: !0, label: r("gallery.zoomOut"), children: /* @__PURE__ */ e(
|
|
68
|
-
i,
|
|
69
|
-
{
|
|
70
|
-
className: n.headerAction,
|
|
71
|
-
size: "lg",
|
|
72
|
-
variant: "subtle",
|
|
73
|
-
onClick: x,
|
|
74
|
-
children: /* @__PURE__ */ e(N, { size: 20 })
|
|
75
|
-
}
|
|
76
|
-
) }),
|
|
77
|
-
/* @__PURE__ */ l(
|
|
78
|
-
u,
|
|
79
|
-
{
|
|
80
|
-
fw: 500,
|
|
81
|
-
fz: 14,
|
|
82
|
-
c: "var(--app-gallary-text)",
|
|
83
|
-
miw: 50,
|
|
84
|
-
ta: "center",
|
|
85
|
-
children: [
|
|
86
|
-
y,
|
|
87
|
-
"%"
|
|
88
|
-
]
|
|
89
|
-
}
|
|
90
|
-
),
|
|
91
|
-
/* @__PURE__ */ e(t, { withArrow: !0, label: r("gallery.zoomIn"), children: /* @__PURE__ */ e(
|
|
92
|
-
i,
|
|
46
|
+
}, { isFetching: w, onDownload: z, isMobile: y } = Y(t), T = b?.isImage ?? !1;
|
|
47
|
+
return /* @__PURE__ */ r(P, { children: [
|
|
48
|
+
/* @__PURE__ */ r(
|
|
49
|
+
B,
|
|
50
|
+
{
|
|
51
|
+
style: {
|
|
52
|
+
borderRadius: 8,
|
|
53
|
+
display: "grid",
|
|
54
|
+
gridTemplateColumns: "1fr auto 1fr",
|
|
55
|
+
alignItems: "center",
|
|
56
|
+
flex: "none",
|
|
57
|
+
gap: 12
|
|
58
|
+
},
|
|
59
|
+
px: 8,
|
|
60
|
+
py: 8,
|
|
61
|
+
bg: "var(--mantine-color-dark-6)",
|
|
62
|
+
children: [
|
|
63
|
+
y ? /* @__PURE__ */ e(a, { withArrow: !0, label: l("gallery.download"), children: /* @__PURE__ */ e(
|
|
64
|
+
n,
|
|
93
65
|
{
|
|
94
|
-
className:
|
|
66
|
+
className: i.headerAction,
|
|
95
67
|
size: "lg",
|
|
96
68
|
variant: "subtle",
|
|
97
|
-
|
|
98
|
-
|
|
69
|
+
loading: w,
|
|
70
|
+
onClick: z,
|
|
71
|
+
children: /* @__PURE__ */ e(A, { size: 20 })
|
|
99
72
|
}
|
|
100
|
-
) })
|
|
101
|
-
|
|
102
|
-
|
|
103
|
-
|
|
104
|
-
|
|
105
|
-
|
|
106
|
-
|
|
107
|
-
|
|
108
|
-
|
|
109
|
-
|
|
110
|
-
|
|
111
|
-
|
|
112
|
-
|
|
113
|
-
|
|
114
|
-
|
|
115
|
-
|
|
116
|
-
|
|
117
|
-
|
|
118
|
-
|
|
119
|
-
|
|
120
|
-
|
|
121
|
-
|
|
122
|
-
}
|
|
123
|
-
|
|
124
|
-
|
|
125
|
-
|
|
126
|
-
|
|
127
|
-
|
|
73
|
+
) }) : /* @__PURE__ */ r(m, { align: "center", gap: 8, ml: 6, miw: 0, children: [
|
|
74
|
+
t ? X(
|
|
75
|
+
q(
|
|
76
|
+
t.contentType ?? "",
|
|
77
|
+
!1,
|
|
78
|
+
t.originalFileName
|
|
79
|
+
),
|
|
80
|
+
!1,
|
|
81
|
+
20
|
|
82
|
+
) : null,
|
|
83
|
+
/* @__PURE__ */ e(h, { fw: 500, fz: 14, c: "var(--app-gallary-text)", truncate: !0, children: t?.originalFileName || "" })
|
|
84
|
+
] }),
|
|
85
|
+
T ? /* @__PURE__ */ r(m, { gap: "xs", children: [
|
|
86
|
+
/* @__PURE__ */ e(a, { withArrow: !0, label: l("gallery.zoomOut"), children: /* @__PURE__ */ e(
|
|
87
|
+
n,
|
|
88
|
+
{
|
|
89
|
+
className: i.headerAction,
|
|
90
|
+
size: "lg",
|
|
91
|
+
variant: "subtle",
|
|
92
|
+
onClick: k,
|
|
93
|
+
children: /* @__PURE__ */ e(U, { size: 20 })
|
|
94
|
+
}
|
|
95
|
+
) }),
|
|
96
|
+
/* @__PURE__ */ r(
|
|
97
|
+
h,
|
|
98
|
+
{
|
|
99
|
+
fw: 500,
|
|
100
|
+
fz: 14,
|
|
101
|
+
c: "var(--app-gallary-text)",
|
|
102
|
+
miw: 50,
|
|
103
|
+
ta: "center",
|
|
104
|
+
children: [
|
|
105
|
+
D,
|
|
106
|
+
"%"
|
|
107
|
+
]
|
|
108
|
+
}
|
|
109
|
+
),
|
|
110
|
+
/* @__PURE__ */ e(a, { withArrow: !0, label: l("gallery.zoomIn"), children: /* @__PURE__ */ e(
|
|
111
|
+
n,
|
|
112
|
+
{
|
|
113
|
+
className: i.headerAction,
|
|
114
|
+
size: "lg",
|
|
115
|
+
variant: "subtle",
|
|
116
|
+
onClick: R,
|
|
117
|
+
children: /* @__PURE__ */ e(G, { size: 20 })
|
|
118
|
+
}
|
|
119
|
+
) })
|
|
120
|
+
] }) : o?.isProcessing ? /* @__PURE__ */ r(m, { align: "center", gap: 8, miw: 0, children: [
|
|
121
|
+
/* @__PURE__ */ e(E, { size: "xs", color: "var(--app-gallary-text)" }),
|
|
122
|
+
/* @__PURE__ */ e(h, { className: i.processingText, fw: 500, fz: 14, children: u("editor.video.upload.processingShort", {
|
|
123
|
+
percent: Math.round(o.processingPercent ?? 0)
|
|
124
|
+
}) })
|
|
125
|
+
] }) : /* @__PURE__ */ e("div", {}),
|
|
126
|
+
/* @__PURE__ */ r(m, { justify: "end", gap: "xs", children: [
|
|
127
|
+
d && !o?.isProcessing && !o?.autogenDisabled && /* @__PURE__ */ e(
|
|
128
|
+
a,
|
|
129
|
+
{
|
|
130
|
+
withArrow: !0,
|
|
131
|
+
label: u("editor.video.player.settings"),
|
|
132
|
+
children: /* @__PURE__ */ e(
|
|
133
|
+
n,
|
|
134
|
+
{
|
|
135
|
+
className: i.headerAction,
|
|
136
|
+
size: "lg",
|
|
137
|
+
variant: "subtle",
|
|
138
|
+
onClick: () => v(!0),
|
|
139
|
+
children: /* @__PURE__ */ e(H, { size: 20 })
|
|
140
|
+
}
|
|
141
|
+
)
|
|
142
|
+
}
|
|
143
|
+
),
|
|
144
|
+
!y && /* @__PURE__ */ e(a, { withArrow: !0, label: l("gallery.download"), children: /* @__PURE__ */ e(
|
|
145
|
+
n,
|
|
146
|
+
{
|
|
147
|
+
className: i.headerAction,
|
|
148
|
+
size: "lg",
|
|
149
|
+
variant: "subtle",
|
|
150
|
+
loading: w,
|
|
151
|
+
onClick: z,
|
|
152
|
+
children: /* @__PURE__ */ e(A, { size: 20 })
|
|
153
|
+
}
|
|
154
|
+
) }),
|
|
155
|
+
/* @__PURE__ */ e(a, { withArrow: !0, label: l("gallery.close"), children: /* @__PURE__ */ e(
|
|
156
|
+
n,
|
|
157
|
+
{
|
|
158
|
+
className: i.headerAction,
|
|
159
|
+
size: "lg",
|
|
160
|
+
variant: "subtle",
|
|
161
|
+
onClick: C,
|
|
162
|
+
children: /* @__PURE__ */ e(K, { size: 20 })
|
|
163
|
+
}
|
|
164
|
+
) })
|
|
165
|
+
] })
|
|
166
|
+
]
|
|
167
|
+
}
|
|
168
|
+
),
|
|
169
|
+
d && s && !o?.autogenDisabled && /* @__PURE__ */ e(
|
|
170
|
+
ee,
|
|
171
|
+
{
|
|
172
|
+
opened: N,
|
|
173
|
+
onClose: () => v(!1),
|
|
174
|
+
dataSource: d,
|
|
175
|
+
videoId: s,
|
|
176
|
+
chaptersDisabled: o?.chaptersDisabled,
|
|
177
|
+
onChaptersSaved: c,
|
|
178
|
+
onSubtitlesSaved: c,
|
|
179
|
+
onPosterChange: c,
|
|
180
|
+
onChaptersDisabledChange: (M) => {
|
|
181
|
+
d.setChaptersDisabled(M).then(c).catch(() => {
|
|
182
|
+
});
|
|
183
|
+
}
|
|
184
|
+
}
|
|
185
|
+
)
|
|
186
|
+
] });
|
|
128
187
|
}
|
|
129
188
|
);
|
|
130
189
|
export {
|
|
131
|
-
|
|
190
|
+
be as ModalHeader
|
|
132
191
|
};
|
|
@@ -0,0 +1,18 @@
|
|
|
1
|
+
import type { AttachmentVideoStatus } from './useAttachmentVideoStatus';
|
|
2
|
+
type Props = {
|
|
3
|
+
attachmentId: string;
|
|
4
|
+
status: AttachmentVideoStatus;
|
|
5
|
+
isActive?: boolean;
|
|
6
|
+
autoPlay?: boolean;
|
|
7
|
+
};
|
|
8
|
+
/**
|
|
9
|
+
* Player for videos that went through the video pipeline: playback URLs come
|
|
10
|
+
* straight from `/v1/videos/{id}/status`, so there is no `/vod` polling. While
|
|
11
|
+
* the backend is still transcoding, chapters are hidden and HLS is used only
|
|
12
|
+
* once `optimizedReady`; otherwise the raw URL plays. The processing progress
|
|
13
|
+
* is shown in the gallery header. Subtitles/chapters/storyboard ride along from
|
|
14
|
+
* the same status payload.
|
|
15
|
+
*/
|
|
16
|
+
export declare const StatusVideoPlayer: ({ attachmentId, status, isActive, autoPlay, }: Props) => import("react/jsx-runtime").JSX.Element;
|
|
17
|
+
export {};
|
|
18
|
+
//# sourceMappingURL=StatusVideoPlayer.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"StatusVideoPlayer.d.ts","sourceRoot":"","sources":["../../../../src/components/AttachmentsGalleryModal/components/StatusVideoPlayer.tsx"],"names":[],"mappings":"AAGA,OAAO,KAAK,EAAE,qBAAqB,EAAE,MAAM,4BAA4B,CAAC;AAIxE,KAAK,KAAK,GAAG;IACX,YAAY,EAAE,MAAM,CAAC;IACrB,MAAM,EAAE,qBAAqB,CAAC;IAC9B,QAAQ,CAAC,EAAE,OAAO,CAAC;IACnB,QAAQ,CAAC,EAAE,OAAO,CAAC;CACpB,CAAC;AAEF;;;;;;;GAOG;AACH,eAAO,MAAM,iBAAiB,GAAI,+CAK/B,KAAK,4CAsCP,CAAC"}
|