@readerseye2/cr_viewer 1.0.1
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/CR_Viewer.d.ts +24 -0
- package/dist/CR_Viewer.d.ts.map +1 -0
- package/dist/components/PageSectionWrap.d.ts +15 -0
- package/dist/components/PageSectionWrap.d.ts.map +1 -0
- package/dist/components/PaginationRender.d.ts +11 -0
- package/dist/components/PaginationRender.d.ts.map +1 -0
- package/dist/components/RenderParagraph.d.ts +16 -0
- package/dist/components/RenderParagraph.d.ts.map +1 -0
- package/dist/components/RenderRuns.d.ts +14 -0
- package/dist/components/RenderRuns.d.ts.map +1 -0
- package/dist/components/ScrollSectionWrap.d.ts +2 -0
- package/dist/components/ScrollSectionWrap.d.ts.map +1 -0
- package/dist/components/SectionRendererVirtuoso.d.ts +7 -0
- package/dist/components/SectionRendererVirtuoso.d.ts.map +1 -0
- package/dist/components/btns/MoveSectionBtns.d.ts +18 -0
- package/dist/components/btns/MoveSectionBtns.d.ts.map +1 -0
- package/dist/components/btns/SolveQuizBtn.d.ts +2 -0
- package/dist/components/btns/SolveQuizBtn.d.ts.map +1 -0
- package/dist/components/dom.util.d.ts +40 -0
- package/dist/components/dom.util.d.ts.map +1 -0
- package/dist/components/quiz/QuizRenderer.d.ts +3 -0
- package/dist/components/quiz/QuizRenderer.d.ts.map +1 -0
- package/dist/components/scroll/CustomScroller.d.ts +4 -0
- package/dist/components/scroll/CustomScroller.d.ts.map +1 -0
- package/dist/components/spinner/SectionLoadingSpinner.d.ts +2 -0
- package/dist/components/spinner/SectionLoadingSpinner.d.ts.map +1 -0
- package/dist/components/spinner/Spinner.d.ts +10 -0
- package/dist/components/spinner/Spinner.d.ts.map +1 -0
- package/dist/hooks/useDebounce.d.ts +16 -0
- package/dist/hooks/useDebounce.d.ts.map +1 -0
- package/dist/hooks/useLongPressSpan.d.ts +10 -0
- package/dist/hooks/useLongPressSpan.d.ts.map +1 -0
- package/dist/hooks/useResizeObserver.d.ts +2 -0
- package/dist/hooks/useResizeObserver.d.ts.map +1 -0
- package/dist/hooks/useSingleDoubleClick.d.ts +16 -0
- package/dist/hooks/useSingleDoubleClick.d.ts.map +1 -0
- package/dist/hooks/useSwipePageClicks.d.ts +24 -0
- package/dist/hooks/useSwipePageClicks.d.ts.map +1 -0
- package/dist/index.cjs +33 -0
- package/dist/index.css +1 -0
- package/dist/index.d.ts +10 -0
- package/dist/index.d.ts.map +1 -0
- package/dist/index.js +8723 -0
- package/dist/overlay-bars/OverlayLayer.d.ts +3 -0
- package/dist/overlay-bars/OverlayLayer.d.ts.map +1 -0
- package/dist/overlay-bars/ViewerSettingsSheet.d.ts +6 -0
- package/dist/overlay-bars/ViewerSettingsSheet.d.ts.map +1 -0
- package/dist/overlay-bars/bottomBar/AudioControlsMini.d.ts +2 -0
- package/dist/overlay-bars/bottomBar/AudioControlsMini.d.ts.map +1 -0
- package/dist/overlay-bars/bottomBar/FakeAudioControlsMini.d.ts +3 -0
- package/dist/overlay-bars/bottomBar/FakeAudioControlsMini.d.ts.map +1 -0
- package/dist/overlay-bars/bottomBar/OverlayBottomBar.d.ts +5 -0
- package/dist/overlay-bars/bottomBar/OverlayBottomBar.d.ts.map +1 -0
- package/dist/overlay-bars/bottomBar/PlayButton.d.ts +13 -0
- package/dist/overlay-bars/bottomBar/PlayButton.d.ts.map +1 -0
- package/dist/overlay-bars/bottomBar/ProgressScrubber.d.ts +5 -0
- package/dist/overlay-bars/bottomBar/ProgressScrubber.d.ts.map +1 -0
- package/dist/overlay-bars/bottomBar/StepBtn.d.ts +6 -0
- package/dist/overlay-bars/bottomBar/StepBtn.d.ts.map +1 -0
- package/dist/overlay-bars/bottomBar/WPMSpeedButtons.d.ts +2 -0
- package/dist/overlay-bars/bottomBar/WPMSpeedButtons.d.ts.map +1 -0
- package/dist/overlay-bars/topBar/OverlayTopBar.d.ts +5 -0
- package/dist/overlay-bars/topBar/OverlayTopBar.d.ts.map +1 -0
- package/dist/playback/CR_ViewerPlayback.d.ts +27 -0
- package/dist/playback/CR_ViewerPlayback.d.ts.map +1 -0
- package/dist/playback/PlaybackBar.d.ts +28 -0
- package/dist/playback/PlaybackBar.d.ts.map +1 -0
- package/dist/playback/PlaybackToggleButton.d.ts +10 -0
- package/dist/playback/PlaybackToggleButton.d.ts.map +1 -0
- package/dist/playback/PlaybackViewport.d.ts +30 -0
- package/dist/playback/PlaybackViewport.d.ts.map +1 -0
- package/dist/playback/index.d.ts +5 -0
- package/dist/playback/index.d.ts.map +1 -0
- package/dist/playback/types.d.ts +20 -0
- package/dist/playback/types.d.ts.map +1 -0
- package/dist/recording/PlaybackHandler.d.ts +6 -0
- package/dist/recording/PlaybackHandler.d.ts.map +1 -0
- package/dist/recording/SettingsChangeEmitter.d.ts +3 -0
- package/dist/recording/SettingsChangeEmitter.d.ts.map +1 -0
- package/dist/recording/SnapshotRegistrar.d.ts +7 -0
- package/dist/recording/SnapshotRegistrar.d.ts.map +1 -0
- package/dist/recording/ViewportResizeEmitter.d.ts +7 -0
- package/dist/recording/ViewportResizeEmitter.d.ts.map +1 -0
- package/dist/stores/audio/crViewer_audio.context.d.ts +10 -0
- package/dist/stores/audio/crViewer_audio.context.d.ts.map +1 -0
- package/dist/stores/audio/crViewer_audio.hooks.d.ts +6 -0
- package/dist/stores/audio/crViewer_audio.hooks.d.ts.map +1 -0
- package/dist/stores/audio/crViewer_audio.provider.d.ts +14 -0
- package/dist/stores/audio/crViewer_audio.provider.d.ts.map +1 -0
- package/dist/stores/audio/crViewer_audio.store.d.ts +65 -0
- package/dist/stores/audio/crViewer_audio.store.d.ts.map +1 -0
- package/dist/stores/player/index.d.ts +5 -0
- package/dist/stores/player/index.d.ts.map +1 -0
- package/dist/stores/player/viewerPlayer.context.d.ts +7 -0
- package/dist/stores/player/viewerPlayer.context.d.ts.map +1 -0
- package/dist/stores/player/viewerPlayer.hooks.d.ts +13 -0
- package/dist/stores/player/viewerPlayer.hooks.d.ts.map +1 -0
- package/dist/stores/player/viewerPlayer.provider.d.ts +18 -0
- package/dist/stores/player/viewerPlayer.provider.d.ts.map +1 -0
- package/dist/stores/player/viewerPlayer.store.d.ts +52 -0
- package/dist/stores/player/viewerPlayer.store.d.ts.map +1 -0
- package/dist/stores/progress/crViewer_progress.context.d.ts +3 -0
- package/dist/stores/progress/crViewer_progress.context.d.ts.map +1 -0
- package/dist/stores/progress/crViewer_progress.hooks.d.ts +6 -0
- package/dist/stores/progress/crViewer_progress.hooks.d.ts.map +1 -0
- package/dist/stores/progress/crViewer_progress.provider.d.ts +15 -0
- package/dist/stores/progress/crViewer_progress.provider.d.ts.map +1 -0
- package/dist/stores/progress/crViewer_progress.store.d.ts +98 -0
- package/dist/stores/progress/crViewer_progress.store.d.ts.map +1 -0
- package/dist/stores/quizprogress/quiz_progress.context.d.ts +3 -0
- package/dist/stores/quizprogress/quiz_progress.context.d.ts.map +1 -0
- package/dist/stores/quizprogress/quiz_progress.hooks.d.ts +10 -0
- package/dist/stores/quizprogress/quiz_progress.hooks.d.ts.map +1 -0
- package/dist/stores/quizprogress/quiz_progress.provider.d.ts +17 -0
- package/dist/stores/quizprogress/quiz_progress.provider.d.ts.map +1 -0
- package/dist/stores/quizprogress/quiz_progress.store.d.ts +63 -0
- package/dist/stores/quizprogress/quiz_progress.store.d.ts.map +1 -0
- package/dist/stores/recorder/viewerRecorder.context.d.ts +7 -0
- package/dist/stores/recorder/viewerRecorder.context.d.ts.map +1 -0
- package/dist/stores/recorder/viewerRecorder.hooks.d.ts +13 -0
- package/dist/stores/recorder/viewerRecorder.hooks.d.ts.map +1 -0
- package/dist/stores/recorder/viewerRecorder.provider.d.ts +24 -0
- package/dist/stores/recorder/viewerRecorder.provider.d.ts.map +1 -0
- package/dist/stores/recorder/viewerRecorder.store.d.ts +50 -0
- package/dist/stores/recorder/viewerRecorder.store.d.ts.map +1 -0
- package/dist/stores/test/tempRecordingStore.d.ts +13 -0
- package/dist/stores/test/tempRecordingStore.d.ts.map +1 -0
- package/dist/stores/viewer/CRViewer.provider.d.ts +10 -0
- package/dist/stores/viewer/CRViewer.provider.d.ts.map +1 -0
- package/dist/stores/viewer/crViewer.context.d.ts +7 -0
- package/dist/stores/viewer/crViewer.context.d.ts.map +1 -0
- package/dist/stores/viewer/crViewer.hooks.d.ts +26 -0
- package/dist/stores/viewer/crViewer.hooks.d.ts.map +1 -0
- package/dist/stores/viewer/crViewer.store.d.ts +130 -0
- package/dist/stores/viewer/crViewer.store.d.ts.map +1 -0
- package/dist/types/viewerEvent.types.d.ts +149 -0
- package/dist/types/viewerEvent.types.d.ts.map +1 -0
- package/dist/utils/audioSrc.d.ts +4 -0
- package/dist/utils/audioSrc.d.ts.map +1 -0
- package/dist/utils/buildAudioTextMap.d.ts +15 -0
- package/dist/utils/buildAudioTextMap.d.ts.map +1 -0
- package/dist/utils/calcPage.util.d.ts +42 -0
- package/dist/utils/calcPage.util.d.ts.map +1 -0
- package/dist/utils/calcPage.util_BACKV3_2399_sf.d.ts +40 -0
- package/dist/utils/calcPage.util_BACKV3_2399_sf.d.ts.map +1 -0
- package/dist/utils/calcPage.util_BACKclaude.d.ts +40 -0
- package/dist/utils/calcPage.util_BACKclaude.d.ts.map +1 -0
- package/dist/utils/calcPage.util_BACKclaude_gptagain.d.ts +40 -0
- package/dist/utils/calcPage.util_BACKclaude_gptagain.d.ts.map +1 -0
- package/dist/utils/calcPage.util_BACKrecent.d.ts +40 -0
- package/dist/utils/calcPage.util_BACKrecent.d.ts.map +1 -0
- package/dist/utils/calcPage.util_BACKv6_fast_Sf.d.ts +40 -0
- package/dist/utils/calcPage.util_BACKv6_fast_Sf.d.ts.map +1 -0
- package/dist/utils/doubleRaf.d.ts +3 -0
- package/dist/utils/doubleRaf.d.ts.map +1 -0
- package/dist/utils/quizSrc.d.ts +3 -0
- package/dist/utils/quizSrc.d.ts.map +1 -0
- package/dist/utils/sectionRender.util.d.ts +21 -0
- package/dist/utils/sectionRender.util.d.ts.map +1 -0
- package/dist/utils/text.util.d.ts +3 -0
- package/dist/utils/text.util.d.ts.map +1 -0
- package/package.json +59 -0
|
@@ -0,0 +1,24 @@
|
|
|
1
|
+
import { SectionData, SectionId, SectionSummary } from '@readerseye2/cr_type';
|
|
2
|
+
import { ViewerEventCallback } from './types/viewerEvent.types';
|
|
3
|
+
import { CRViewerHandle } from './stores/recorder/viewerRecorder.provider';
|
|
4
|
+
export type { CRViewerHandle };
|
|
5
|
+
type CRViewerProps = {
|
|
6
|
+
section: SectionData;
|
|
7
|
+
initialViewerState?: Partial<import('./stores/viewer/crViewer.store').CRViewerState>;
|
|
8
|
+
/** 서버에서 불러온 마지막 읽던 위치 (전역 run index) */
|
|
9
|
+
initialProgressRunIndex?: number;
|
|
10
|
+
/** 진입 시 스크롤 잠금 여부 */
|
|
11
|
+
sectionList?: SectionSummary[];
|
|
12
|
+
/** ✅ 섹션 변경 콜백 */
|
|
13
|
+
onSectionChange?: (nextId: SectionId) => void;
|
|
14
|
+
/** ✅ 뷰어 이벤트 콜백 (녹화 등 외부에서 이벤트 수집 시 사용) */
|
|
15
|
+
onViewerEvent?: ViewerEventCallback;
|
|
16
|
+
/** 재생 모드 여부 */
|
|
17
|
+
isPlaybackMode?: boolean;
|
|
18
|
+
/** 재생 모드에서 적용된 scale (페이지네이션 측정 보정용) */
|
|
19
|
+
playbackScale?: number;
|
|
20
|
+
/** 외부 제어용 ref */
|
|
21
|
+
viewerRef?: React.MutableRefObject<CRViewerHandle | null>;
|
|
22
|
+
};
|
|
23
|
+
export default function CR_Viewer({ section, initialViewerState, initialProgressRunIndex, sectionList, onSectionChange, onViewerEvent, isPlaybackMode, playbackScale, viewerRef, }: CRViewerProps): import("react/jsx-runtime").JSX.Element;
|
|
24
|
+
//# sourceMappingURL=CR_Viewer.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"CR_Viewer.d.ts","sourceRoot":"","sources":["../src/CR_Viewer.tsx"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,WAAW,EAAE,SAAS,EAAE,cAAc,EAAE,MAAM,sBAAsB,CAAC;AACnF,OAAO,KAAK,EAAE,mBAAmB,EAAE,MAAM,2BAA2B,CAAC;AAuBrE,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,2CAA2C,CAAC;AAEhF,YAAY,EAAE,cAAc,EAAE,CAAC;AAE/B,KAAK,aAAa,GAAG;IACnB,OAAO,EAAE,WAAW,CAAC;IACrB,kBAAkB,CAAC,EAAE,OAAO,CAAC,OAAO,gCAAgC,EAAE,aAAa,CAAC,CAAC;IACrF,wCAAwC;IACxC,uBAAuB,CAAC,EAAE,MAAM,CAAC;IACjC,qBAAqB;IACrB,WAAW,CAAC,EAAE,cAAc,EAAE,CAAC;IAC/B,iBAAiB;IACjB,eAAe,CAAC,EAAE,CAAC,MAAM,EAAE,SAAS,KAAK,IAAI,CAAC;IAC9C,0CAA0C;IAC1C,aAAa,CAAC,EAAE,mBAAmB,CAAC;IACpC,eAAe;IACf,cAAc,CAAC,EAAE,OAAO,CAAC;IACzB,wCAAwC;IACxC,aAAa,CAAC,EAAE,MAAM,CAAC;IACvB,iBAAiB;IACjB,SAAS,CAAC,EAAE,KAAK,CAAC,gBAAgB,CAAC,cAAc,GAAG,IAAI,CAAC,CAAC;CAC3D,CAAC;AAGF,MAAM,CAAC,OAAO,UAAU,SAAS,CAAC,EAChC,OAAO,EACP,kBAAkB,EAClB,uBAAuB,EACvB,WAAgB,EAChB,eAAe,EACf,aAAa,EACb,cAAsB,EACtB,aAAa,EACb,SAAS,GACV,EAAE,aAAa,2CAuEf"}
|
|
@@ -0,0 +1,15 @@
|
|
|
1
|
+
/** 페이지 슬라이스(문단/이미지 공용 인덱스 기반) */
|
|
2
|
+
export type PageSlice = {
|
|
3
|
+
startBlock: number;
|
|
4
|
+
endBlock: number;
|
|
5
|
+
startOffsetInBlock?: number;
|
|
6
|
+
endOffsetInBlock?: number;
|
|
7
|
+
startCharInRun?: number;
|
|
8
|
+
endCharInRun?: number;
|
|
9
|
+
};
|
|
10
|
+
export type PaginationLayout = {
|
|
11
|
+
pages: PageSlice[];
|
|
12
|
+
pageByRunIndex: Int32Array | null;
|
|
13
|
+
};
|
|
14
|
+
export default function PageSectionWrap(): import("react/jsx-runtime").JSX.Element;
|
|
15
|
+
//# sourceMappingURL=PageSectionWrap.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"PageSectionWrap.d.ts","sourceRoot":"","sources":["../../src/components/PageSectionWrap.tsx"],"names":[],"mappings":"AA6GA,iCAAiC;AACjC,MAAM,MAAM,SAAS,GAAG;IACtB,UAAU,EAAE,MAAM,CAAC;IACnB,QAAQ,EAAE,MAAM,CAAC;IAEjB,kBAAkB,CAAC,EAAE,MAAM,CAAC;IAC5B,gBAAgB,CAAC,EAAE,MAAM,CAAC;IAC1B,cAAc,CAAC,EAAE,MAAM,CAAC;IACxB,YAAY,CAAC,EAAE,MAAM,CAAC;CACvB,CAAC;AAEF,MAAM,MAAM,gBAAgB,GAAG;IAC7B,KAAK,EAAE,SAAS,EAAE,CAAC;IACnB,cAAc,EAAE,UAAU,GAAG,IAAI,CAAC;CACnC,CAAC;AA0BF,MAAM,CAAC,OAAO,UAAU,eAAe,4CA+UtC"}
|
|
@@ -0,0 +1,11 @@
|
|
|
1
|
+
import { default as React } from 'react';
|
|
2
|
+
import { PageSlice } from './PageSectionWrap';
|
|
3
|
+
type Props = {
|
|
4
|
+
/** paraIndexMap[i] = paraBlocks[i]가 원래 blocks의 몇 번째인지 (문단용 보조 맵) */
|
|
5
|
+
pages: PageSlice[];
|
|
6
|
+
pageIndex: number;
|
|
7
|
+
maxWidth: number;
|
|
8
|
+
};
|
|
9
|
+
declare const PaginationRender: React.FC<Props>;
|
|
10
|
+
export default PaginationRender;
|
|
11
|
+
//# sourceMappingURL=PaginationRender.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"PaginationRender.d.ts","sourceRoot":"","sources":["../../src/components/PaginationRender.tsx"],"names":[],"mappings":"AACA,OAAO,KAAkB,MAAM,OAAO,CAAC;AAGvC,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,mBAAmB,CAAC;AASnD,KAAK,KAAK,GAAG;IACX,oEAAoE;IAEpE,KAAK,EAAE,SAAS,EAAE,CAAC;IACnB,SAAS,EAAE,MAAM,CAAC;IAClB,QAAQ,EAAE,MAAM,CAAC;CAClB,CAAC;AAEF,QAAA,MAAM,gBAAgB,EAAE,KAAK,CAAC,EAAE,CAAC,KAAK,CAiSrC,CAAC;AAEF,eAAe,gBAAgB,CAAC"}
|
|
@@ -0,0 +1,16 @@
|
|
|
1
|
+
import { FlatGroup } from '../stores/progress/crViewer_progress.store';
|
|
2
|
+
import { ParagraphBlock } from '@readerseye2/cr_type';
|
|
3
|
+
import { default as React } from 'react';
|
|
4
|
+
type Props = {
|
|
5
|
+
block: ParagraphBlock;
|
|
6
|
+
computedMarker?: string;
|
|
7
|
+
ns: string;
|
|
8
|
+
/** ✅ 섹션 전역 오프셋 (prefix[blockIndex]) */
|
|
9
|
+
baseIndex: number;
|
|
10
|
+
sectionId: string;
|
|
11
|
+
preGroups: FlatGroup[];
|
|
12
|
+
};
|
|
13
|
+
declare function RenderParagraph({ block, computedMarker, ns, baseIndex, sectionId, preGroups, }: Props): import("react/jsx-runtime").JSX.Element;
|
|
14
|
+
declare const _default: React.MemoExoticComponent<typeof RenderParagraph>;
|
|
15
|
+
export default _default;
|
|
16
|
+
//# sourceMappingURL=RenderParagraph.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"RenderParagraph.d.ts","sourceRoot":"","sources":["../../src/components/RenderParagraph.tsx"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,2CAA2C,CAAC;AAE3E,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,sBAAsB,CAAC;AAC3D,OAAO,KAAK,MAAM,OAAO,CAAC;AAE1B,KAAK,KAAK,GAAG;IACX,KAAK,EAAE,cAAc,CAAC;IACtB,cAAc,CAAC,EAAE,MAAM,CAAC;IAGxB,EAAE,EAAE,MAAM,CAAC;IACX,uCAAuC;IACvC,SAAS,EAAE,MAAM,CAAC;IAClB,SAAS,EAAE,MAAM,CAAC;IAClB,SAAS,EAAE,SAAS,EAAE,CAAC;CACxB,CAAC;AAEF,iBAAS,eAAe,CAAC,EACvB,KAAK,EACL,cAAc,EAGd,EAAE,EACF,SAAS,EACT,SAAS,EACT,SAAS,GACV,EAAE,KAAK,2CA2CP;;AACD,wBAOG"}
|
|
@@ -0,0 +1,14 @@
|
|
|
1
|
+
import { default as React } from 'react';
|
|
2
|
+
import { InlineRun } from '@readerseye2/cr_type';
|
|
3
|
+
import { FlatGroup } from '../stores/progress/crViewer_progress.store';
|
|
4
|
+
type RenderRunsProps = {
|
|
5
|
+
runs: InlineRun[];
|
|
6
|
+
ns: string;
|
|
7
|
+
baseIndex: number;
|
|
8
|
+
sectionId: string;
|
|
9
|
+
preGroups: FlatGroup[];
|
|
10
|
+
};
|
|
11
|
+
/** Run 단위 구독 + 컨테이너 이벤트 위임(더블클릭/롱프레스) */
|
|
12
|
+
declare const _default: React.NamedExoticComponent<RenderRunsProps>;
|
|
13
|
+
export default _default;
|
|
14
|
+
//# sourceMappingURL=RenderRuns.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"RenderRuns.d.ts","sourceRoot":"","sources":["../../src/components/RenderRuns.tsx"],"names":[],"mappings":"AAAA,OAAO,KAAuC,MAAM,OAAO,CAAC;AAC5D,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,sBAAsB,CAAC;AAMtD,OAAO,KAAK,EACV,SAAS,EAEV,MAAM,2CAA2C,CAAC;AA0BnD,KAAK,eAAe,GAAG;IACrB,IAAI,EAAE,SAAS,EAAE,CAAC;IAClB,EAAE,EAAE,MAAM,CAAC;IACX,SAAS,EAAE,MAAM,CAAC;IAClB,SAAS,EAAE,MAAM,CAAC;IAClB,SAAS,EAAE,SAAS,EAAE,CAAC;CACxB,CAAC;AAUF,yCAAyC;;AACzC,wBAkGE"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"ScrollSectionWrap.d.ts","sourceRoot":"","sources":["../../src/components/ScrollSectionWrap.tsx"],"names":[],"mappings":"AA4BA,wBAAgB,iBAAiB,4CAoEhC"}
|
|
@@ -0,0 +1,7 @@
|
|
|
1
|
+
import { Block, SectionData } from '@readerseye2/cr_type';
|
|
2
|
+
export declare function SectionRendererVirtuoso({ section, blocks, nsPrefix, }: {
|
|
3
|
+
section: SectionData;
|
|
4
|
+
blocks: Block[];
|
|
5
|
+
nsPrefix: string;
|
|
6
|
+
}): import("react/jsx-runtime").JSX.Element;
|
|
7
|
+
//# sourceMappingURL=SectionRendererVirtuoso.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"SectionRendererVirtuoso.d.ts","sourceRoot":"","sources":["../../src/components/SectionRendererVirtuoso.tsx"],"names":[],"mappings":"AAGA,OAAO,KAAK,EAAE,KAAK,EAAE,WAAW,EAAE,MAAM,sBAAsB,CAAC;AA2C/D,wBAAgB,uBAAuB,CAAC,EACtC,OAAO,EACP,MAAM,EACN,QAAQ,GACT,EAAE;IACD,OAAO,EAAE,WAAW,CAAC;IACrB,MAAM,EAAE,KAAK,EAAE,CAAC;IAChB,QAAQ,EAAE,MAAM,CAAC;CAClB,2CAgSA"}
|
|
@@ -0,0 +1,18 @@
|
|
|
1
|
+
import { default as React } from 'react';
|
|
2
|
+
/**
|
|
3
|
+
* 이전 섹션 버튼
|
|
4
|
+
* - sectionList / currentSectionId / onSectionChange 는 진행 스토어에서 직접 가져옴
|
|
5
|
+
* @param isIcon - true일 경우 아이콘 버튼, false일 경우 풀 버튼 (기본값: false)
|
|
6
|
+
*/
|
|
7
|
+
export declare const PrevSectionBtn: React.FC<{
|
|
8
|
+
isIcon?: boolean;
|
|
9
|
+
}>;
|
|
10
|
+
/**
|
|
11
|
+
* 다음 섹션 버튼
|
|
12
|
+
* - sectionList / currentSectionId / onSectionChange 는 진행 스토어에서 직접 가져옴
|
|
13
|
+
* @param isIcon - true일 경우 아이콘 버튼, false일 경우 풀 버튼 (기본값: false)
|
|
14
|
+
*/
|
|
15
|
+
export declare const NextSectionBtn: React.FC<{
|
|
16
|
+
isIcon?: boolean;
|
|
17
|
+
}>;
|
|
18
|
+
//# sourceMappingURL=MoveSectionBtns.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"MoveSectionBtns.d.ts","sourceRoot":"","sources":["../../../src/components/btns/MoveSectionBtns.tsx"],"names":[],"mappings":"AACA,OAAO,KAA+B,MAAM,OAAO,CAAC;AAyBpD;;;;GAIG;AACH,eAAO,MAAM,cAAc,EAAE,KAAK,CAAC,EAAE,CAAC;IAAE,MAAM,CAAC,EAAE,OAAO,CAAA;CAAE,CAgFzD,CAAC;AAEF;;;;GAIG;AACH,eAAO,MAAM,cAAc,EAAE,KAAK,CAAC,EAAE,CAAC;IAAE,MAAM,CAAC,EAAE,OAAO,CAAA;CAAE,CAgFzD,CAAC"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"SolveQuizBtn.d.ts","sourceRoot":"","sources":["../../../src/components/btns/SolveQuizBtn.tsx"],"names":[],"mappings":"AAGA,eAAO,MAAM,YAAY,sDAkCxB,CAAC"}
|
|
@@ -0,0 +1,40 @@
|
|
|
1
|
+
/** data-g로 Run 엘리먼트 찾기 */
|
|
2
|
+
export declare const qRunByGI: (container: HTMLElement, gi: number) => HTMLElement | null;
|
|
3
|
+
export declare function findVisibleRunIndexDOMTopFirst_V2(container: HTMLElement, offsetPx?: number, // 상단 보더/패딩 오차 흡수
|
|
4
|
+
epsilonPx?: number, // 같은 라인 묶음 허용 오차
|
|
5
|
+
minSizePx?: number): number;
|
|
6
|
+
/**
|
|
7
|
+
* 화면에 보이는 것 중 "최대한 좌상단"의 읽을만한 run을 고른다.
|
|
8
|
+
* - lineY(컨테이너 상단 + offsetPx) 보다 위(top < lineY)는 후보에서 제외
|
|
9
|
+
* - lineY 이상 중 최소 top을 먼저 구하고, 그 top + epsilon 안에 드는 것들 중
|
|
10
|
+
* GI가 가장 작은(=더 왼쪽) run을 선택
|
|
11
|
+
* - 후보가 하나도 없으면 lineY에 가장 가까운 top을 fallback
|
|
12
|
+
*/
|
|
13
|
+
export declare function findVisibleRunIndexDOMTopFirst(container: HTMLElement, offsetPx?: number, // 0보다는 8~16 추천 (상단 보더/패딩 오차 흡수)
|
|
14
|
+
epsilonPx?: number, // 같은 라인 묶음 허용 오차
|
|
15
|
+
minSizePx?: number): number;
|
|
16
|
+
/** 가장 가까운 가시 GI (상단 + 24px 기준) */
|
|
17
|
+
/** 특정 GI 엘리먼트가 DOM에 나타날 때까지 기다림 */
|
|
18
|
+
export declare const waitForRunInDOM: (container: HTMLElement, gi: number, { timeoutMs, intervalMs }?: {
|
|
19
|
+
timeoutMs?: number;
|
|
20
|
+
intervalMs?: number;
|
|
21
|
+
}) => Promise<HTMLElement | null>;
|
|
22
|
+
/** 현재 컨테이너에서 20~80% 밴드의 가시 GI 범위 */
|
|
23
|
+
export declare const getVisibleRangeDOM: (container: HTMLElement) => {
|
|
24
|
+
first: number;
|
|
25
|
+
last: number;
|
|
26
|
+
} | null;
|
|
27
|
+
/** 대상 GI가 보이는지 */
|
|
28
|
+
export declare const isGIVisible: (container: HTMLElement, gi: number) => boolean;
|
|
29
|
+
/** 대상 GI를 상단 + ratio 위치에 오도록 1회 보정 */
|
|
30
|
+
export declare const alignRunOnce: (container: HTMLElement, gi: number, { topPaddingRatio, behavior }?: {
|
|
31
|
+
topPaddingRatio?: number | undefined;
|
|
32
|
+
behavior?: ScrollBehavior | undefined;
|
|
33
|
+
}) => boolean;
|
|
34
|
+
export declare function waitForScrollIdle(container: HTMLElement, quietMs?: number): Promise<void>;
|
|
35
|
+
export declare const alignRunOnceAsync: (container: HTMLElement, gi: number, { topPaddingRatio, behavior, quietMs }?: {
|
|
36
|
+
topPaddingRatio?: number | undefined;
|
|
37
|
+
behavior?: ScrollBehavior | undefined;
|
|
38
|
+
quietMs?: number | undefined;
|
|
39
|
+
}) => Promise<boolean>;
|
|
40
|
+
//# sourceMappingURL=dom.util.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"dom.util.d.ts","sourceRoot":"","sources":["../../src/components/dom.util.ts"],"names":[],"mappings":"AAEA,0BAA0B;AAC1B,eAAO,MAAM,QAAQ,GAAI,WAAW,WAAW,EAAE,IAAI,MAAM,KAAG,WAAW,GAAG,IAE3E,CAAC;AACF,wBAAgB,iCAAiC,CAC/C,SAAS,EAAE,WAAW,EACtB,QAAQ,SAAK,EAAE,iBAAiB;AAChC,SAAS,SAAM,EAAE,iBAAiB;AAClC,SAAS,SAAM,GACd,MAAM,CAwER;AACD;;;;;;GAMG;AACH,wBAAgB,8BAA8B,CAC5C,SAAS,EAAE,WAAW,EACtB,QAAQ,SAAK,EAAE,gCAAgC;AAC/C,SAAS,SAAM,EAAE,iBAAiB;AAClC,SAAS,SAAM,GACd,MAAM,CA6ER;AACD,kCAAkC;AAElC,mCAAmC;AACnC,eAAO,MAAM,eAAe,GAC1B,WAAW,WAAW,EACtB,IAAI,MAAM,EACV,4BAAuC;IAAE,SAAS,CAAC,EAAE,MAAM,CAAC;IAAC,UAAU,CAAC,EAAE,MAAM,CAAA;CAAO,KACtF,OAAO,CAAC,WAAW,GAAG,IAAI,CAS5B,CAAC;AAEF,oCAAoC;AACpC,eAAO,MAAM,kBAAkB,GAC7B,WAAW,WAAW,KACrB;IAAE,KAAK,EAAE,MAAM,CAAC;IAAC,IAAI,EAAE,MAAM,CAAA;CAAE,GAAG,IAmBpC,CAAC;AAEF,kBAAkB;AAClB,eAAO,MAAM,WAAW,GAAI,WAAW,WAAW,EAAE,IAAI,MAAM,YAM7D,CAAC;AAEF,sCAAsC;AACtC,eAAO,MAAM,YAAY,GACvB,WAAW,WAAW,EACtB,IAAI,MAAM,EACV;;;CAAoE,KACnE,OASF,CAAC;AAGF,wBAAgB,iBAAiB,CAAC,SAAS,EAAE,WAAW,EAAE,OAAO,SAAM,GAAG,OAAO,CAAC,IAAI,CAAC,CAgBtF;AAED,eAAO,MAAM,iBAAiB,GAC5B,WAAW,WAAW,EACtB,IAAI,MAAM,EACV;;;;CAAqF,KACpF,OAAO,CAAC,OAAO,CAmBjB,CAAC"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"QuizRenderer.d.ts","sourceRoot":"","sources":["../../../src/components/quiz/QuizRenderer.tsx"],"names":[],"mappings":";AAuBA,wBAsHG"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"CustomScroller.d.ts","sourceRoot":"","sources":["../../../src/components/scroll/CustomScroller.tsx"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAE,UAAU,EAAE,MAAM,gBAAgB,CAAC;AAGjD,QAAA,MAAM,cAAc,EAAE,UAAU,CAAC,OAAO,EAAE,OAAO,CAAC,CAAC,UAAU,CAc3D,CAAC;AAEH,eAAe,cAAc,CAAC"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"SectionLoadingSpinner.d.ts","sourceRoot":"","sources":["../../../src/components/spinner/SectionLoadingSpinner.tsx"],"names":[],"mappings":"AAKA,wBAAgB,qBAAqB,4CASpC"}
|
|
@@ -0,0 +1,10 @@
|
|
|
1
|
+
type SpinnerProps = {
|
|
2
|
+
/** 배경을 전체 덮는 오버레이로 표시할지 여부 */
|
|
3
|
+
/** 크기(px) */
|
|
4
|
+
size?: number;
|
|
5
|
+
/** 회전 속도 (초 단위) */
|
|
6
|
+
speed?: number;
|
|
7
|
+
};
|
|
8
|
+
export default function Spinner({ size, speed }: SpinnerProps): import("react/jsx-runtime").JSX.Element;
|
|
9
|
+
export {};
|
|
10
|
+
//# sourceMappingURL=Spinner.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"Spinner.d.ts","sourceRoot":"","sources":["../../../src/components/spinner/Spinner.tsx"],"names":[],"mappings":"AAEA,KAAK,YAAY,GAAG;IAClB,8BAA8B;IAE9B,aAAa;IACb,IAAI,CAAC,EAAE,MAAM,CAAC;IACd,mBAAmB;IACnB,KAAK,CAAC,EAAE,MAAM,CAAC;CAChB,CAAC;AAEF,MAAM,CAAC,OAAO,UAAU,OAAO,CAAC,EAAE,IAAS,EAAE,KAAW,EAAE,EAAE,YAAY,2CAcvE"}
|
|
@@ -0,0 +1,16 @@
|
|
|
1
|
+
import { DebounceSettings } from 'lodash';
|
|
2
|
+
type DebouncedFn<T extends (...args: any[]) => any> = ((...args: Parameters<T>) => void) & {
|
|
3
|
+
cancel: () => void;
|
|
4
|
+
flush: () => void;
|
|
5
|
+
};
|
|
6
|
+
type UseDebounceOptions = DebounceSettings;
|
|
7
|
+
/**
|
|
8
|
+
* lodash.debounce 래퍼 훅
|
|
9
|
+
* - 항상 최신 fn을 호출(stale closure 방지)
|
|
10
|
+
* - beforeDebounceFunc로 "디바운스 진입 직전" 훅 제공
|
|
11
|
+
* - leading/trailing/maxWait 옵션 지원
|
|
12
|
+
* - cancel()/flush() 메서드 제공
|
|
13
|
+
*/
|
|
14
|
+
export declare function useDebounce<T extends (...args: any[]) => any>(fn: T, delay?: number, beforeDebounceFunc?: () => void, options?: UseDebounceOptions): DebouncedFn<T>;
|
|
15
|
+
export {};
|
|
16
|
+
//# sourceMappingURL=useDebounce.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"useDebounce.d.ts","sourceRoot":"","sources":["../../src/hooks/useDebounce.ts"],"names":[],"mappings":"AAGA,OAAO,KAAK,EAAE,gBAAgB,EAAE,MAAM,QAAQ,CAAC;AAE/C,KAAK,WAAW,CAAC,CAAC,SAAS,CAAC,GAAG,IAAI,EAAE,GAAG,EAAE,KAAK,GAAG,IAAI,CAAC,CAAC,GAAG,IAAI,EAAE,UAAU,CAAC,CAAC,CAAC,KAAK,IAAI,CAAC,GAAG;IACzF,MAAM,EAAE,MAAM,IAAI,CAAC;IACnB,KAAK,EAAE,MAAM,IAAI,CAAC;CACnB,CAAC;AAEF,KAAK,kBAAkB,GAAG,gBAAgB,CAAC;AAE3C;;;;;;GAMG;AACH,wBAAgB,WAAW,CAAC,CAAC,SAAS,CAAC,GAAG,IAAI,EAAE,GAAG,EAAE,KAAK,GAAG,EAC3D,EAAE,EAAE,CAAC,EACL,KAAK,SAAM,EACX,kBAAkB,CAAC,EAAE,MAAM,IAAI,EAC/B,OAAO,CAAC,EAAE,kBAAkB,GAC3B,WAAW,CAAC,CAAC,CAAC,CAsChB"}
|
|
@@ -0,0 +1,10 @@
|
|
|
1
|
+
export declare function useLongPressSpan(onLongPress: (e: React.PointerEvent | React.TouchEvent | React.MouseEvent) => void, delay?: number): {
|
|
2
|
+
onPointerDown: (e: React.PointerEvent) => void;
|
|
3
|
+
onPointerUp: () => void;
|
|
4
|
+
onPointerLeave: () => void;
|
|
5
|
+
onPointerCancel: () => void;
|
|
6
|
+
onContextMenu: (e: React.MouseEvent) => void;
|
|
7
|
+
onClickCapture: (e: React.MouseEvent) => void;
|
|
8
|
+
onDoubleClickCapture: (e: React.MouseEvent) => void;
|
|
9
|
+
};
|
|
10
|
+
//# sourceMappingURL=useLongPressSpan.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"useLongPressSpan.d.ts","sourceRoot":"","sources":["../../src/hooks/useLongPressSpan.ts"],"names":[],"mappings":"AAGA,wBAAgB,gBAAgB,CAC9B,WAAW,EAAE,CAAC,CAAC,EAAE,KAAK,CAAC,YAAY,GAAG,KAAK,CAAC,UAAU,GAAG,KAAK,CAAC,UAAU,KAAK,IAAI,EAClF,KAAK,SAAM;uBAaL,KAAK,CAAC,YAAY;;;;uBAgBc,KAAK,CAAC,UAAU;wBAQf,KAAK,CAAC,UAAU;8BAAhB,KAAK,CAAC,UAAU;EAqBxD"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"useResizeObserver.d.ts","sourceRoot":"","sources":["../../src/hooks/useResizeObserver.ts"],"names":[],"mappings":"AAKA,wBAAgB,iBAAiB,CAC/B,OAAO,EAAE,KAAK,CAAC,KAAK,CAAC,SAAS,CAAC,WAAW,GAAG,IAAI,CAAC,CAAC,EACnD,QAAQ,EAAE,MAAM,IAAI,QAqDrB"}
|
|
@@ -0,0 +1,16 @@
|
|
|
1
|
+
type UseSingleDoubleClickOptions<E = HTMLElement> = {
|
|
2
|
+
/** 단일 클릭 콜백 (지연 호출됨) */
|
|
3
|
+
onSingle?: (ev: React.MouseEvent<E>) => void;
|
|
4
|
+
/** 더블 클릭 콜백 (즉시 호출) */
|
|
5
|
+
onDouble?: (ev: React.MouseEvent<E>) => void;
|
|
6
|
+
/** 싱글 호출 지연 시간(ms). 더블클릭이 들어오면 이 타이머가 취소됨 */
|
|
7
|
+
delay?: number;
|
|
8
|
+
/** 토글/클릭을 무시할 요소 필터 (예: 버튼, 링크, 오디오 영역 등) */
|
|
9
|
+
shouldIgnoreTarget?: (target: EventTarget | null) => boolean;
|
|
10
|
+
};
|
|
11
|
+
export declare function useSingleDoubleClick<E extends HTMLElement = HTMLDivElement>({ onSingle, onDouble, delay, shouldIgnoreTarget, }: UseSingleDoubleClickOptions<E>): {
|
|
12
|
+
onClick: (e: React.MouseEvent<E>) => void;
|
|
13
|
+
onDoubleClick: (e: React.MouseEvent<E>) => void;
|
|
14
|
+
};
|
|
15
|
+
export {};
|
|
16
|
+
//# sourceMappingURL=useSingleDoubleClick.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"useSingleDoubleClick.d.ts","sourceRoot":"","sources":["../../src/hooks/useSingleDoubleClick.ts"],"names":[],"mappings":"AAEA,KAAK,2BAA2B,CAAC,CAAC,GAAG,WAAW,IAAI;IAClD,wBAAwB;IACxB,QAAQ,CAAC,EAAE,CAAC,EAAE,EAAE,KAAK,CAAC,UAAU,CAAC,CAAC,CAAC,KAAK,IAAI,CAAC;IAC7C,uBAAuB;IACvB,QAAQ,CAAC,EAAE,CAAC,EAAE,EAAE,KAAK,CAAC,UAAU,CAAC,CAAC,CAAC,KAAK,IAAI,CAAC;IAC7C,6CAA6C;IAC7C,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,6CAA6C;IAC7C,kBAAkB,CAAC,EAAE,CAAC,MAAM,EAAE,WAAW,GAAG,IAAI,KAAK,OAAO,CAAC;CAC9D,CAAC;AAEF,wBAAgB,oBAAoB,CAAC,CAAC,SAAS,WAAW,GAAG,cAAc,EAAE,EAC3E,QAAQ,EACR,QAAQ,EACR,KAAW,EACX,kBAAkB,GACnB,EAAE,2BAA2B,CAAC,CAAC,CAAC;iBAczB,KAAK,CAAC,UAAU,CAAC,CAAC,CAAC;uBAmBnB,KAAK,CAAC,UAAU,CAAC,CAAC,CAAC;EAc1B"}
|
|
@@ -0,0 +1,24 @@
|
|
|
1
|
+
import * as React from 'react';
|
|
2
|
+
type Opts<E = HTMLElement> = {
|
|
3
|
+
onPrev: () => void;
|
|
4
|
+
onNext: () => void;
|
|
5
|
+
onSingle?: (ev: React.MouseEvent<E>) => void;
|
|
6
|
+
onDouble?: (ev: React.MouseEvent<E>) => void;
|
|
7
|
+
shouldIgnoreTarget?: (t: EventTarget | null) => boolean;
|
|
8
|
+
horizontalThreshold?: number;
|
|
9
|
+
verticalTolerance?: number;
|
|
10
|
+
velocityThreshold?: number;
|
|
11
|
+
singleDelayMs?: number;
|
|
12
|
+
doubleClickWindowMs?: number;
|
|
13
|
+
suppressAfterSwipeMs?: number;
|
|
14
|
+
};
|
|
15
|
+
export declare function useSwipePagerClicks<E extends HTMLElement = HTMLDivElement>(opts: Opts<E>): {
|
|
16
|
+
onPointerDown: (e: React.PointerEvent<E>) => void;
|
|
17
|
+
onPointerMove: (e: React.PointerEvent<E>) => void;
|
|
18
|
+
onPointerUp: (e: React.PointerEvent<E>) => void;
|
|
19
|
+
onPointerCancel: () => void;
|
|
20
|
+
onClick: (e: React.MouseEvent<E>) => void;
|
|
21
|
+
onDoubleClick: (e: React.MouseEvent<E>) => void;
|
|
22
|
+
};
|
|
23
|
+
export default useSwipePagerClicks;
|
|
24
|
+
//# sourceMappingURL=useSwipePageClicks.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"useSwipePageClicks.d.ts","sourceRoot":"","sources":["../../src/hooks/useSwipePageClicks.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,KAAK,MAAM,OAAO,CAAC;AAE/B,KAAK,IAAI,CAAC,CAAC,GAAG,WAAW,IAAI;IAC3B,MAAM,EAAE,MAAM,IAAI,CAAC;IACnB,MAAM,EAAE,MAAM,IAAI,CAAC;IACnB,QAAQ,CAAC,EAAE,CAAC,EAAE,EAAE,KAAK,CAAC,UAAU,CAAC,CAAC,CAAC,KAAK,IAAI,CAAC;IAC7C,QAAQ,CAAC,EAAE,CAAC,EAAE,EAAE,KAAK,CAAC,UAAU,CAAC,CAAC,CAAC,KAAK,IAAI,CAAC;IAE7C,kBAAkB,CAAC,EAAE,CAAC,CAAC,EAAE,WAAW,GAAG,IAAI,KAAK,OAAO,CAAC;IAGxD,mBAAmB,CAAC,EAAE,MAAM,CAAC;IAC7B,iBAAiB,CAAC,EAAE,MAAM,CAAC;IAC3B,iBAAiB,CAAC,EAAE,MAAM,CAAC;IAG3B,aAAa,CAAC,EAAE,MAAM,CAAC;IACvB,mBAAmB,CAAC,EAAE,MAAM,CAAC;IAG7B,oBAAoB,CAAC,EAAE,MAAM,CAAC;CAC/B,CAAC;AAEF,wBAAgB,mBAAmB,CAAC,CAAC,SAAS,WAAW,GAAG,cAAc,EAAE,IAAI,EAAE,IAAI,CAAC,CAAC,CAAC;uBA0EjF,KAAK,CAAC,YAAY,CAAC,CAAC,CAAC;uBAerB,KAAK,CAAC,YAAY,CAAC,CAAC,CAAC;qBAwCrB,KAAK,CAAC,YAAY,CAAC,CAAC,CAAC;;iBAwCrB,KAAK,CAAC,UAAU,CAAC,CAAC,CAAC;uBAyBnB,KAAK,CAAC,UAAU,CAAC,CAAC,CAAC;EAoC1B;AAED,eAAe,mBAAmB,CAAC"}
|