@readerseye2/cr_viewer 1.0.11 → 1.0.13
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 +5 -3
- package/dist/CR_Viewer.d.ts.map +1 -1
- package/dist/components/PageSectionWrap.d.ts.map +1 -1
- package/dist/components/PaginationRender.d.ts.map +1 -1
- package/dist/components/RangeContextMenu.d.ts.map +1 -1
- package/dist/components/RenderRuns.d.ts.map +1 -1
- package/dist/components/ScrollSectionWrap.d.ts.map +1 -1
- package/dist/components/SectionRendererVirtuoso.d.ts.map +1 -1
- package/dist/components/btns/MoveSectionBtns.d.ts.map +1 -1
- package/dist/components/btns/SolveQuizBtn.d.ts.map +1 -1
- package/dist/components/quiz/QuizRenderer.d.ts.map +1 -1
- package/dist/hooks/useDebounce.d.ts +3 -2
- package/dist/hooks/useDebounce.d.ts.map +1 -1
- package/dist/hooks/useSwipePageClicks.d.ts +2 -0
- package/dist/hooks/useSwipePageClicks.d.ts.map +1 -1
- package/dist/index.cjs +6 -6
- package/dist/index.d.ts +1 -7
- package/dist/index.d.ts.map +1 -1
- package/dist/index.js +4375 -4777
- package/dist/overlay-bars/ViewerSettingsSheet.d.ts.map +1 -1
- package/dist/overlay-bars/bottomBar/AudioControlsMini.d.ts.map +1 -1
- package/dist/overlay-bars/bottomBar/FakeAudioControlsMini.d.ts +1 -2
- package/dist/overlay-bars/bottomBar/FakeAudioControlsMini.d.ts.map +1 -1
- package/dist/overlay-bars/bottomBar/OverlayBottomBar.d.ts.map +1 -1
- package/dist/overlay-bars/bottomBar/ProgressScrubber.d.ts.map +1 -1
- package/dist/overlay-bars/bottomBar/SpeedButtons.d.ts +2 -0
- package/dist/overlay-bars/bottomBar/SpeedButtons.d.ts.map +1 -0
- package/dist/overlay-bars/bottomBar/StepBtn.d.ts.map +1 -1
- package/dist/overlay-bars/topBar/OverlayTopBar.d.ts.map +1 -1
- package/dist/recording/DirectPlaybackController.d.ts +14 -0
- package/dist/recording/DirectPlaybackController.d.ts.map +1 -0
- package/dist/recording/RecordingEmitters.d.ts +14 -0
- package/dist/recording/RecordingEmitters.d.ts.map +1 -0
- package/dist/stores/audio/crViewer_audio.store.d.ts +2 -2
- package/dist/stores/audio/crViewer_audio.store.d.ts.map +1 -1
- package/dist/stores/eventBridge/viewerEventBridge.context.d.ts +13 -0
- package/dist/stores/eventBridge/viewerEventBridge.context.d.ts.map +1 -0
- package/dist/stores/eventBridge/viewerEventBridge.hooks.d.ts +19 -0
- package/dist/stores/eventBridge/viewerEventBridge.hooks.d.ts.map +1 -0
- package/dist/stores/{recorder/viewerRecorder.provider.d.ts → eventBridge/viewerEventBridge.provider.d.ts} +6 -4
- package/dist/stores/eventBridge/viewerEventBridge.provider.d.ts.map +1 -0
- package/dist/stores/{recorder/viewerRecorder.store.d.ts → eventBridge/viewerEventBridge.store.d.ts} +5 -5
- package/dist/stores/eventBridge/viewerEventBridge.store.d.ts.map +1 -0
- package/dist/stores/progress/crViewer_progress.store.d.ts +2 -2
- package/dist/stores/progress/crViewer_progress.store.d.ts.map +1 -1
- package/dist/stores/quizprogress/quiz_progress.store.d.ts.map +1 -1
- package/dist/stores/viewer/CRViewer.provider.d.ts +2 -2
- package/dist/stores/viewer/CRViewer.provider.d.ts.map +1 -1
- package/dist/stores/viewer/crViewer.hooks.d.ts +3 -3
- package/dist/stores/viewer/crViewer.hooks.d.ts.map +1 -1
- package/dist/stores/viewer/crViewer.store.d.ts +15 -21
- package/dist/stores/viewer/crViewer.store.d.ts.map +1 -1
- package/dist/types/viewerEvent.types.d.ts +1 -148
- package/dist/types/viewerEvent.types.d.ts.map +1 -1
- package/dist/utils/calcPage.util.d.ts.map +1 -1
- package/package.json +69 -59
- package/dist/overlay-bars/bottomBar/WPMSpeedButtons.d.ts +0 -2
- package/dist/overlay-bars/bottomBar/WPMSpeedButtons.d.ts.map +0 -1
- package/dist/playback/CR_ViewerPlayback.d.ts +0 -27
- package/dist/playback/CR_ViewerPlayback.d.ts.map +0 -1
- package/dist/playback/PlaybackBar.d.ts +0 -28
- package/dist/playback/PlaybackBar.d.ts.map +0 -1
- package/dist/playback/PlaybackToggleButton.d.ts +0 -10
- package/dist/playback/PlaybackToggleButton.d.ts.map +0 -1
- package/dist/playback/PlaybackViewport.d.ts +0 -30
- package/dist/playback/PlaybackViewport.d.ts.map +0 -1
- package/dist/playback/index.d.ts +0 -5
- package/dist/playback/index.d.ts.map +0 -1
- package/dist/playback/types.d.ts +0 -20
- package/dist/playback/types.d.ts.map +0 -1
- package/dist/recording/PlaybackHandler.d.ts +0 -6
- package/dist/recording/PlaybackHandler.d.ts.map +0 -1
- package/dist/recording/SettingsChangeEmitter.d.ts +0 -3
- package/dist/recording/SettingsChangeEmitter.d.ts.map +0 -1
- package/dist/recording/SnapshotRegistrar.d.ts +0 -7
- package/dist/recording/SnapshotRegistrar.d.ts.map +0 -1
- package/dist/recording/ViewportResizeEmitter.d.ts +0 -7
- package/dist/recording/ViewportResizeEmitter.d.ts.map +0 -1
- package/dist/stores/player/index.d.ts +0 -5
- package/dist/stores/player/index.d.ts.map +0 -1
- package/dist/stores/player/viewerPlayer.context.d.ts +0 -7
- package/dist/stores/player/viewerPlayer.context.d.ts.map +0 -1
- package/dist/stores/player/viewerPlayer.hooks.d.ts +0 -13
- package/dist/stores/player/viewerPlayer.hooks.d.ts.map +0 -1
- package/dist/stores/player/viewerPlayer.provider.d.ts +0 -18
- package/dist/stores/player/viewerPlayer.provider.d.ts.map +0 -1
- package/dist/stores/player/viewerPlayer.store.d.ts +0 -52
- package/dist/stores/player/viewerPlayer.store.d.ts.map +0 -1
- package/dist/stores/recorder/viewerRecorder.context.d.ts +0 -7
- package/dist/stores/recorder/viewerRecorder.context.d.ts.map +0 -1
- package/dist/stores/recorder/viewerRecorder.hooks.d.ts +0 -13
- package/dist/stores/recorder/viewerRecorder.hooks.d.ts.map +0 -1
- package/dist/stores/recorder/viewerRecorder.provider.d.ts.map +0 -1
- package/dist/stores/recorder/viewerRecorder.store.d.ts.map +0 -1
- package/dist/stores/test/tempRecordingStore.d.ts +0 -13
- package/dist/stores/test/tempRecordingStore.d.ts.map +0 -1
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"ViewerSettingsSheet.d.ts","sourceRoot":"","sources":["../../src/overlay-bars/ViewerSettingsSheet.tsx"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"ViewerSettingsSheet.d.ts","sourceRoot":"","sources":["../../src/overlay-bars/ViewerSettingsSheet.tsx"],"names":[],"mappings":"AAMA,KAAK,KAAK,GAAG;IAAE,OAAO,EAAE,OAAO,CAAA;CAAE,CAAC;AAElC,wBAAgB,mBAAmB,CAAC,EAAE,OAAO,EAAE,EAAE,KAAK,2CAyKrD"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"AudioControlsMini.d.ts","sourceRoot":"","sources":["../../../src/overlay-bars/bottomBar/AudioControlsMini.tsx"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"AudioControlsMini.d.ts","sourceRoot":"","sources":["../../../src/overlay-bars/bottomBar/AudioControlsMini.tsx"],"names":[],"mappings":"AAmRA,wBAAgB,iBAAiB,4CAEhC"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"FakeAudioControlsMini.d.ts","sourceRoot":"","sources":["../../../src/overlay-bars/bottomBar/FakeAudioControlsMini.tsx"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"FakeAudioControlsMini.d.ts","sourceRoot":"","sources":["../../../src/overlay-bars/bottomBar/FakeAudioControlsMini.tsx"],"names":[],"mappings":"AA4LA,eAAO,MAAM,qBAAqB,8CAEhC,CAAC"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"OverlayBottomBar.d.ts","sourceRoot":"","sources":["../../../src/overlay-bars/bottomBar/OverlayBottomBar.tsx"],"names":[],"mappings":"AAEA,OAAO,KAAiC,MAAM,OAAO,CAAC;
|
|
1
|
+
{"version":3,"file":"OverlayBottomBar.d.ts","sourceRoot":"","sources":["../../../src/overlay-bars/bottomBar/OverlayBottomBar.tsx"],"names":[],"mappings":"AAEA,OAAO,KAAiC,MAAM,OAAO,CAAC;AA4BtD,iBAAS,oBAAoB,4CAsO5B;AAED,eAAO,MAAM,gBAAgB,wDAAmC,CAAC"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"ProgressScrubber.d.ts","sourceRoot":"","sources":["../../../src/overlay-bars/bottomBar/ProgressScrubber.tsx"],"names":[],"mappings":"AAAA,OAAO,KAA4D,MAAM,OAAO,CAAC;
|
|
1
|
+
{"version":3,"file":"ProgressScrubber.d.ts","sourceRoot":"","sources":["../../../src/overlay-bars/bottomBar/ProgressScrubber.tsx"],"names":[],"mappings":"AAAA,OAAO,KAA4D,MAAM,OAAO,CAAC;AAQjF,iBAAS,gBAAgB,4CA2GxB;;AAED,wBAA4C"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"SpeedButtons.d.ts","sourceRoot":"","sources":["../../../src/overlay-bars/bottomBar/SpeedButtons.tsx"],"names":[],"mappings":"AAUA,eAAO,MAAM,YAAY,8CA+GvB,CAAC"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"StepBtn.d.ts","sourceRoot":"","sources":["../../../src/overlay-bars/bottomBar/StepBtn.tsx"],"names":[],"mappings":"AAMA,UAAU,YAAY;IACpB,SAAS,EAAE,MAAM,GAAG,OAAO,CAAC;CAC7B;AAED,wBAAgB,OAAO,CAAC,EAAE,SAAS,EAAE,EAAE,YAAY,
|
|
1
|
+
{"version":3,"file":"StepBtn.d.ts","sourceRoot":"","sources":["../../../src/overlay-bars/bottomBar/StepBtn.tsx"],"names":[],"mappings":"AAMA,UAAU,YAAY;IACpB,SAAS,EAAE,MAAM,GAAG,OAAO,CAAC;CAC7B;AAED,wBAAgB,OAAO,CAAC,EAAE,SAAS,EAAE,EAAE,YAAY,2CA0DlD"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"OverlayTopBar.d.ts","sourceRoot":"","sources":["../../../src/overlay-bars/topBar/OverlayTopBar.tsx"],"names":[],"mappings":"AAAA,OAAO,KAAsB,MAAM,OAAO,CAAC;AAO3C,iBAAS,iBAAiB,
|
|
1
|
+
{"version":3,"file":"OverlayTopBar.d.ts","sourceRoot":"","sources":["../../../src/overlay-bars/topBar/OverlayTopBar.tsx"],"names":[],"mappings":"AAAA,OAAO,KAAsB,MAAM,OAAO,CAAC;AAO3C,iBAAS,iBAAiB,4CA4CzB;AAED,eAAO,MAAM,aAAa,qDAAgC,CAAC"}
|
|
@@ -0,0 +1,14 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* DirectPlaybackController
|
|
3
|
+
*
|
|
4
|
+
* 외부에서 직접 뷰어 상태를 제어할 수 있도록 viewerRef.current에 직접 store 조작 API를 제공합니다.
|
|
5
|
+
* 기존 PlaybackHandler의 핸들러 등록 방식과 달리, viewerRef.current.dispatch가 직접 store를 조작합니다.
|
|
6
|
+
*
|
|
7
|
+
* 이 컴포넌트는 모든 Provider 내부에 위치해야 합니다:
|
|
8
|
+
* - ViewerRecorderProvider
|
|
9
|
+
* - InternalCRViewerProvider
|
|
10
|
+
* - InternalCRViewerProgressProvider
|
|
11
|
+
* - CRAudioProvider
|
|
12
|
+
*/
|
|
13
|
+
export declare function DirectPlaybackController(): null;
|
|
14
|
+
//# sourceMappingURL=DirectPlaybackController.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"DirectPlaybackController.d.ts","sourceRoot":"","sources":["../../src/recording/DirectPlaybackController.tsx"],"names":[],"mappings":"AAUA;;;;;;;;;;;GAWG;AACH,wBAAgB,wBAAwB,SAqOvC"}
|
|
@@ -0,0 +1,14 @@
|
|
|
1
|
+
type Props = {
|
|
2
|
+
containerRef: React.RefObject<HTMLDivElement | null>;
|
|
3
|
+
};
|
|
4
|
+
/**
|
|
5
|
+
* RecordingEmitters - 녹화 관련 이벤트 통합 컴포넌트
|
|
6
|
+
*
|
|
7
|
+
* 1. ViewportResize: 뷰포트 크기 변경 감지 및 emit
|
|
8
|
+
* 2. SettingsChange: 설정 변경 감지 및 emit
|
|
9
|
+
*
|
|
10
|
+
* 렌더링 없음 (null 반환)
|
|
11
|
+
*/
|
|
12
|
+
export declare function RecordingEmitters({ containerRef }: Props): null;
|
|
13
|
+
export {};
|
|
14
|
+
//# sourceMappingURL=RecordingEmitters.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"RecordingEmitters.d.ts","sourceRoot":"","sources":["../../src/recording/RecordingEmitters.tsx"],"names":[],"mappings":"AAQA,KAAK,KAAK,GAAG;IACX,YAAY,EAAE,KAAK,CAAC,SAAS,CAAC,cAAc,GAAG,IAAI,CAAC,CAAC;CACtD,CAAC;AAwBF;;;;;;;GAOG;AACH,wBAAgB,iBAAiB,CAAC,EAAE,YAAY,EAAE,EAAE,KAAK,QAoFxD"}
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
import { SectionAudio, SectionData } from '@readerseye2/cr_type';
|
|
2
2
|
import { AudioTextMap } from '../../utils/buildAudioTextMap';
|
|
3
|
-
import {
|
|
3
|
+
import { ViewerEventBridgeStore } from '../eventBridge/viewerEventBridge.store';
|
|
4
4
|
export type AudioStatus = 'idle' | 'loading' | 'playing' | 'paused' | 'ended' | 'error';
|
|
5
5
|
export type PlaybackKind = 'real' | 'fake';
|
|
6
6
|
export type CRAudioState = {
|
|
@@ -48,7 +48,7 @@ type CRAudioInit = {
|
|
|
48
48
|
initialIndex?: number;
|
|
49
49
|
section: SectionData;
|
|
50
50
|
/** 뷰어 레코더 스토어 (이벤트 emit용) */
|
|
51
|
-
recorderStore?:
|
|
51
|
+
recorderStore?: ViewerEventBridgeStore;
|
|
52
52
|
};
|
|
53
53
|
/** init 동기 초기화 지원 */
|
|
54
54
|
export declare function createCRAudioStore(init?: CRAudioInit): Omit<import('zustand').StoreApi<CRAudioState>, "subscribe"> & {
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"crViewer_audio.store.d.ts","sourceRoot":"","sources":["../../../src/stores/audio/crViewer_audio.store.ts"],"names":[],"mappings":"AAGA,OAAO,KAAK,EAAE,YAAY,EAAE,WAAW,EAAkB,MAAM,sBAAsB,CAAC;AAEtF,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,2BAA2B,CAAC;AAC9D,OAAO,KAAK,EAAE,
|
|
1
|
+
{"version":3,"file":"crViewer_audio.store.d.ts","sourceRoot":"","sources":["../../../src/stores/audio/crViewer_audio.store.ts"],"names":[],"mappings":"AAGA,OAAO,KAAK,EAAE,YAAY,EAAE,WAAW,EAAkB,MAAM,sBAAsB,CAAC;AAEtF,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,2BAA2B,CAAC;AAC9D,OAAO,KAAK,EAAE,sBAAsB,EAAE,MAAM,wCAAwC,CAAC;AAErF,MAAM,MAAM,WAAW,GAAG,MAAM,GAAG,SAAS,GAAG,SAAS,GAAG,QAAQ,GAAG,OAAO,GAAG,OAAO,CAAC;AACxF,MAAM,MAAM,YAAY,GAAG,MAAM,GAAG,MAAM,CAAC;AAE3C,MAAM,MAAM,YAAY,GAAG;IAEzB,KAAK,EAAE,YAAY,EAAE,CAAC;IACtB,WAAW,EAAE,MAAM,CAAC;IACpB,aAAa,EAAE,MAAM,CAAC;IAGtB,MAAM,EAAE,WAAW,CAAC;IACpB,UAAU,EAAE,OAAO,CAAC;IAGpB,YAAY,EAAE,YAAY,CAAC;IAG3B,IAAI,EAAE;QAAE,UAAU,EAAE,MAAM,CAAA;KAAE,GAAG,IAAI,CAAC;IAGpC,OAAO,EAAE,MAAM,IAAI,CAAC;IACpB,OAAO,EAAE,MAAM,IAAI,CAAC;IAGpB,SAAS,EAAE,CAAC,GAAG,CAAC,EAAE,YAAY,KAAK,IAAI,CAAC;IAGxC,QAAQ,EAAE,CAAC,KAAK,EAAE,YAAY,EAAE,GAAG,SAAS,KAAK,IAAI,CAAC;IACtD,YAAY,EAAE,CAAC,SAAS,EAAE,MAAM,EAAE,EAAE,EAAE,MAAM,KAAK,IAAI,CAAC;IACtD,KAAK,EAAE,MAAM,IAAI,CAAC;IAGlB,IAAI,EAAE,CAAC,SAAS,CAAC,EAAE,MAAM,EAAE,IAAI,CAAC,EAAE,MAAM,KAAK,IAAI,CAAC;IAClD,KAAK,EAAE,MAAM,IAAI,CAAC;IAClB,IAAI,EAAE,CAAC,EAAE,EAAE,MAAM,KAAK,IAAI,CAAC;IAC3B,IAAI,EAAE,MAAM,IAAI,CAAC;IACjB,QAAQ,EAAE,MAAM,IAAI,CAAC;IACrB,QAAQ,EAAE,MAAM,IAAI,CAAC;IACrB,YAAY,EAAE,CAAC,SAAS,EAAE,MAAM,KAAK,IAAI,CAAC;IAG1C,UAAU,EAAE,CAAC,SAAS,CAAC,EAAE,MAAM,KAAK,MAAM,GAAG,IAAI,CAAC;IAGlD,WAAW,EAAE,CAAC,IAAI,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,KAAK,MAAM,CAAC;IACtD,WAAW,EAAE,CAAC,CAAC,EAAE,MAAM,KAAK;QAAE,IAAI,EAAE,MAAM,CAAC;QAAC,MAAM,EAAE,MAAM,CAAA;KAAE,GAAG,IAAI,CAAC;IAGpE,WAAW,EAAE,CAAC,CAAC,EAAE,MAAM,KAAK;QAAE,SAAS,EAAE,MAAM,CAAC;QAAC,MAAM,EAAE,MAAM,CAAA;KAAE,GAAG,IAAI,CAAC;IACzE,QAAQ,EAAE,CAAC,CAAC,EAAE,MAAM,KAAK,IAAI,CAAC;IAG9B,OAAO,EAAE,CAAC,EAAE,EAAE,MAAM,KAAK,IAAI,CAAC;IAC9B,QAAQ,EAAE,MAAM,IAAI,CAAC;IACrB,QAAQ,EAAE,CAAC,GAAG,CAAC,EAAE,OAAO,KAAK,IAAI,CAAC;IAGlC,cAAc,EAAE,CAAC,MAAM,EAAE,WAAW,KAAK,IAAI,CAAC;CAC/C,CAAC;AAEF,KAAK,WAAW,GAAG;IACjB,KAAK,CAAC,EAAE,YAAY,EAAE,CAAC;IACvB,GAAG,CAAC,EAAE,YAAY,CAAC;IACnB,YAAY,CAAC,EAAE,MAAM,CAAC;IACtB,OAAO,EAAE,WAAW,CAAC;IACrB,6BAA6B;IAC7B,aAAa,CAAC,EAAE,sBAAsB,CAAC;CACxC,CAAC;AAyBF,qBAAqB;AACrB,wBAAgB,kBAAkB,CAAC,IAAI,CAAC,EAAE,WAAW;;;;;;;;EAmUpD;AAED,MAAM,MAAM,YAAY,GAAG,UAAU,CAAC,OAAO,kBAAkB,CAAC,CAAC"}
|
|
@@ -0,0 +1,13 @@
|
|
|
1
|
+
import { ViewerEventBridgeStore } from './viewerEventBridge.store';
|
|
2
|
+
import { CRViewerHandle } from './viewerEventBridge.provider';
|
|
3
|
+
/**
|
|
4
|
+
* ViewerEventBridge 전용 컨텍스트.
|
|
5
|
+
* 값은 zustand의 StoreApi 인스턴스입니다.
|
|
6
|
+
*/
|
|
7
|
+
export declare const ViewerEventBridgeContext: import('react').Context<ViewerEventBridgeStore | undefined>;
|
|
8
|
+
/**
|
|
9
|
+
* ViewerRef 전용 컨텍스트.
|
|
10
|
+
* 외부 제어용 ref를 내부 컴포넌트에서 접근할 수 있도록 합니다.
|
|
11
|
+
*/
|
|
12
|
+
export declare const ViewerRefContext: import('react').Context<import('react').MutableRefObject<CRViewerHandle | null> | undefined>;
|
|
13
|
+
//# sourceMappingURL=viewerEventBridge.context.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"viewerEventBridge.context.d.ts","sourceRoot":"","sources":["../../../src/stores/eventBridge/viewerEventBridge.context.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAE,sBAAsB,EAAE,MAAM,2BAA2B,CAAC;AACxE,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,8BAA8B,CAAC;AAEnE;;;GAGG;AACH,eAAO,MAAM,wBAAwB,6DAEpC,CAAC;AAEF;;;GAGG;AACH,eAAO,MAAM,gBAAgB,8FAEjB,CAAC"}
|
|
@@ -0,0 +1,19 @@
|
|
|
1
|
+
import { StoreApi } from 'zustand';
|
|
2
|
+
import { ViewerEventBridgeState, ViewerEventBridgeActions } from './viewerEventBridge.store';
|
|
3
|
+
import { CRViewerHandle } from './viewerEventBridge.provider';
|
|
4
|
+
/**
|
|
5
|
+
* 구독 기반 selector 훅.
|
|
6
|
+
* 상태 변화에 반응해야 할 컴포넌트에서 사용하세요.
|
|
7
|
+
*/
|
|
8
|
+
export declare function useViewerEventBridgeStore<T>(selector: (s: ViewerEventBridgeState & ViewerEventBridgeActions) => T, equalityFn?: (a: T, b: T) => boolean): T;
|
|
9
|
+
/**
|
|
10
|
+
* 구독 없는 store API 훅.
|
|
11
|
+
* 이벤트 시점에 상태를 읽거나 변경할 때 사용.
|
|
12
|
+
*/
|
|
13
|
+
export declare function useViewerEventBridgeStoreApi(): StoreApi<ViewerEventBridgeState & ViewerEventBridgeActions>;
|
|
14
|
+
/**
|
|
15
|
+
* ViewerRef context 접근 훅.
|
|
16
|
+
* 내부 컴포넌트에서 viewerRef에 접근할 때 사용.
|
|
17
|
+
*/
|
|
18
|
+
export declare function useViewerRef(): React.MutableRefObject<CRViewerHandle | null> | undefined;
|
|
19
|
+
//# sourceMappingURL=viewerEventBridge.hooks.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"viewerEventBridge.hooks.d.ts","sourceRoot":"","sources":["../../../src/stores/eventBridge/viewerEventBridge.hooks.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAE,QAAQ,EAAE,MAAM,SAAS,CAAC;AAGxC,OAAO,KAAK,EAAE,sBAAsB,EAAE,wBAAwB,EAAE,MAAM,2BAA2B,CAAC;AAClG,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,8BAA8B,CAAC;AAEnE;;;GAGG;AACH,wBAAgB,yBAAyB,CAAC,CAAC,EACzC,QAAQ,EAAE,CAAC,CAAC,EAAE,sBAAsB,GAAG,wBAAwB,KAAK,CAAC,EACrE,UAAU,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,KAAK,OAAO,GACnC,CAAC,CAMH;AAED;;;GAGG;AACH,wBAAgB,4BAA4B,IAAI,QAAQ,CACtD,sBAAsB,GAAG,wBAAwB,CAClD,CAMA;AAED;;;GAGG;AACH,wBAAgB,YAAY,IAAI,KAAK,CAAC,gBAAgB,CAAC,cAAc,GAAG,IAAI,CAAC,GAAG,SAAS,CAExF"}
|
|
@@ -3,8 +3,10 @@ import { ViewerEventCallback, StoredEvent, RecordingSnapshot } from '../../types
|
|
|
3
3
|
export type CRViewerHandle = {
|
|
4
4
|
dispatch: (event: StoredEvent) => void;
|
|
5
5
|
applySnapshot: (snapshot: RecordingSnapshot) => void;
|
|
6
|
+
/** 현재 뷰어 상태 스냅샷 반환 (청크 시작 시 사용) */
|
|
7
|
+
getSnapshot: () => RecordingSnapshot;
|
|
6
8
|
};
|
|
7
|
-
type
|
|
9
|
+
type ViewerEventBridgeProviderProps = {
|
|
8
10
|
children: React.ReactNode;
|
|
9
11
|
/** 뷰어 이벤트 콜백 (외부에서 이벤트 수집) */
|
|
10
12
|
onViewerEvent?: ViewerEventCallback;
|
|
@@ -16,9 +18,9 @@ type ViewerRecorderProviderProps = {
|
|
|
16
18
|
viewerRef?: React.MutableRefObject<CRViewerHandle | null>;
|
|
17
19
|
};
|
|
18
20
|
/**
|
|
19
|
-
* Provider: 뷰어 인스턴스별로 독립적인
|
|
21
|
+
* Provider: 뷰어 인스턴스별로 독립적인 eventBridge store를 생성해 제공합니다.
|
|
20
22
|
* CR_Viewer의 가장 바깥쪽에 위치해야 합니다.
|
|
21
23
|
*/
|
|
22
|
-
export declare function
|
|
24
|
+
export declare function ViewerEventBridgeProvider({ children, onViewerEvent, isPlaybackMode, playbackScale, viewerRef, }: ViewerEventBridgeProviderProps): import("react/jsx-runtime").JSX.Element;
|
|
23
25
|
export {};
|
|
24
|
-
//# sourceMappingURL=
|
|
26
|
+
//# sourceMappingURL=viewerEventBridge.provider.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"viewerEventBridge.provider.d.ts","sourceRoot":"","sources":["../../../src/stores/eventBridge/viewerEventBridge.provider.tsx"],"names":[],"mappings":"AAGA,OAAO,KAAK,EACV,mBAAmB,EACnB,WAAW,EACX,iBAAiB,EAClB,MAAM,+BAA+B,CAAC;AAEvC,0BAA0B;AAC1B,MAAM,MAAM,cAAc,GAAG;IAC3B,QAAQ,EAAE,CAAC,KAAK,EAAE,WAAW,KAAK,IAAI,CAAC;IACvC,aAAa,EAAE,CAAC,QAAQ,EAAE,iBAAiB,KAAK,IAAI,CAAC;IACrD,mCAAmC;IACnC,WAAW,EAAE,MAAM,iBAAiB,CAAC;CACtC,CAAC;AAEF,KAAK,8BAA8B,GAAG;IACpC,QAAQ,EAAE,KAAK,CAAC,SAAS,CAAC;IAC1B,8BAA8B;IAC9B,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;AAEF;;;GAGG;AACH,wBAAgB,yBAAyB,CAAC,EACxC,QAAQ,EACR,aAAa,EACb,cAAsB,EACtB,aAAiB,EACjB,SAAS,GACV,EAAE,8BAA8B,2CAqChC"}
|
package/dist/stores/{recorder/viewerRecorder.store.d.ts → eventBridge/viewerEventBridge.store.d.ts}
RENAMED
|
@@ -14,7 +14,7 @@ type EmitParams<T extends ViewerEventType> = Extract<ViewerEvent, {
|
|
|
14
14
|
export type DispatchHandler = (event: StoredEvent) => void;
|
|
15
15
|
/** applySnapshot 핸들러 타입 (PlaybackHandler에서 등록) */
|
|
16
16
|
export type ApplySnapshotHandler = (snapshot: RecordingSnapshot) => void;
|
|
17
|
-
export type
|
|
17
|
+
export type ViewerEventBridgeState = {
|
|
18
18
|
/** 외부에서 등록한 이벤트 콜백 */
|
|
19
19
|
emitCallback: ViewerEventCallback | null;
|
|
20
20
|
/** 재생 모드 여부 */
|
|
@@ -26,7 +26,7 @@ export type ViewerRecorderState = {
|
|
|
26
26
|
/** applySnapshot 핸들러 (PlaybackHandler에서 등록) */
|
|
27
27
|
applySnapshotHandler: ApplySnapshotHandler | null;
|
|
28
28
|
};
|
|
29
|
-
export type
|
|
29
|
+
export type ViewerEventBridgeActions = {
|
|
30
30
|
/** 콜백 등록 (외부에서 호출) */
|
|
31
31
|
setEmitCallback: (cb: ViewerEventCallback | null) => void;
|
|
32
32
|
/** 이벤트 발생 (내부 컴포넌트에서 호출) - timestamp 직접 전달 가능 */
|
|
@@ -44,7 +44,7 @@ export type ViewerRecorderActions = {
|
|
|
44
44
|
/** 스냅샷 적용 (재생 시작 시 초기 상태 복원) */
|
|
45
45
|
applySnapshot: (snapshot: RecordingSnapshot) => void;
|
|
46
46
|
};
|
|
47
|
-
export type
|
|
48
|
-
export declare function
|
|
47
|
+
export type ViewerEventBridgeStore = StoreApi<ViewerEventBridgeState & ViewerEventBridgeActions>;
|
|
48
|
+
export declare function createViewerEventBridgeStore(): ViewerEventBridgeStore;
|
|
49
49
|
export {};
|
|
50
|
-
//# sourceMappingURL=
|
|
50
|
+
//# sourceMappingURL=viewerEventBridge.store.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"viewerEventBridge.store.d.ts","sourceRoot":"","sources":["../../../src/stores/eventBridge/viewerEventBridge.store.ts"],"names":[],"mappings":"AAAA,OAAO,EAAe,KAAK,QAAQ,EAAE,MAAM,iBAAiB,CAAC;AAC7D,OAAO,KAAK,EACV,WAAW,EACX,mBAAmB,EACnB,eAAe,EACf,WAAW,EACX,iBAAiB,EAClB,MAAM,+BAA+B,CAAC;AAEvC,KAAK,UAAU,CAAC,CAAC,SAAS,eAAe,IACvC,OAAO,CAAC,WAAW,EAAE;IAAE,IAAI,EAAE,CAAC,CAAA;CAAE,CAAC,SAAS;IAAE,OAAO,EAAE,MAAM,CAAC,CAAA;CAAE,GAC1D;IAAE,IAAI,EAAE,CAAC,CAAC;IAAC,OAAO,EAAE,CAAC,CAAA;CAAE,GACvB;IAAE,IAAI,EAAE,CAAC,CAAA;CAAE,CAAC;AAElB,6CAA6C;AAC7C,MAAM,MAAM,eAAe,GAAG,CAAC,KAAK,EAAE,WAAW,KAAK,IAAI,CAAC;AAE3D,kDAAkD;AAClD,MAAM,MAAM,oBAAoB,GAAG,CAAC,QAAQ,EAAE,iBAAiB,KAAK,IAAI,CAAC;AAEzE,MAAM,MAAM,sBAAsB,GAAG;IACnC,sBAAsB;IACtB,YAAY,EAAE,mBAAmB,GAAG,IAAI,CAAC;IACzC,eAAe;IACf,cAAc,EAAE,OAAO,CAAC;IACxB,wCAAwC;IACxC,aAAa,EAAE,MAAM,CAAC;IACtB,0CAA0C;IAC1C,eAAe,EAAE,eAAe,GAAG,IAAI,CAAC;IACxC,+CAA+C;IAC/C,oBAAoB,EAAE,oBAAoB,GAAG,IAAI,CAAC;CACnD,CAAC;AAEF,MAAM,MAAM,wBAAwB,GAAG;IACrC,sBAAsB;IACtB,eAAe,EAAE,CAAC,EAAE,EAAE,mBAAmB,GAAG,IAAI,KAAK,IAAI,CAAC;IAC1D,iDAAiD;IACjD,IAAI,EAAE,CAAC,CAAC,SAAS,eAAe,EAAE,MAAM,EAAE,UAAU,CAAC,CAAC,CAAC,EAAE,SAAS,CAAC,EAAE,MAAM,KAAK,IAAI,CAAC;IACrF,eAAe;IACf,eAAe,EAAE,CAAC,IAAI,EAAE,OAAO,KAAK,IAAI,CAAC;IACzC,qBAAqB;IACrB,gBAAgB,EAAE,CAAC,KAAK,EAAE,MAAM,KAAK,IAAI,CAAC;IAC1C,6CAA6C;IAC7C,kBAAkB,EAAE,CAAC,OAAO,EAAE,eAAe,GAAG,IAAI,KAAK,IAAI,CAAC;IAC9D,sCAAsC;IACtC,QAAQ,EAAE,CAAC,KAAK,EAAE,WAAW,KAAK,IAAI,CAAC;IACvC,kDAAkD;IAClD,uBAAuB,EAAE,CAAC,OAAO,EAAE,oBAAoB,GAAG,IAAI,KAAK,IAAI,CAAC;IACxE,gCAAgC;IAChC,aAAa,EAAE,CAAC,QAAQ,EAAE,iBAAiB,KAAK,IAAI,CAAC;CACtD,CAAC;AAEF,MAAM,MAAM,sBAAsB,GAAG,QAAQ,CAAC,sBAAsB,GAAG,wBAAwB,CAAC,CAAC;AAEjG,wBAAgB,4BAA4B,IAAI,sBAAsB,CA0DrE"}
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
import { StoreApi } from 'zustand/vanilla';
|
|
2
2
|
import { SectionData } from '@readerseye2/cr_type';
|
|
3
|
-
import {
|
|
3
|
+
import { ViewerEventBridgeStore } from '../eventBridge/viewerEventBridge.store';
|
|
4
4
|
/** 진행 상태를 갱신한 주체 */
|
|
5
5
|
export type UpdateSource = 'program' | 'scroll' | 'audio' | 'scrubber-live' | 'scrubber-commit' | 'scrubber-step' | 'playback';
|
|
6
6
|
export type SectionScrollApi = {
|
|
@@ -116,7 +116,7 @@ export type CRViewerProgressInitialState = {
|
|
|
116
116
|
/** 다음 섹션 이동 가능 여부 */
|
|
117
117
|
isCanNext?: boolean;
|
|
118
118
|
/** 뷰어 레코더 스토어 (이벤트 emit용) */
|
|
119
|
-
recorderStore?:
|
|
119
|
+
recorderStore?: ViewerEventBridgeStore;
|
|
120
120
|
};
|
|
121
121
|
export declare function createCRViewerProgressStore(init: CRViewerProgressInitialState): CRViewerProgressStore;
|
|
122
122
|
//# sourceMappingURL=crViewer_progress.store.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"crViewer_progress.store.d.ts","sourceRoot":"","sources":["../../../src/stores/progress/crViewer_progress.store.ts"],"names":[],"mappings":"AACA,OAAO,EAAe,KAAK,QAAQ,EAAE,MAAM,iBAAiB,CAAC;
|
|
1
|
+
{"version":3,"file":"crViewer_progress.store.d.ts","sourceRoot":"","sources":["../../../src/stores/progress/crViewer_progress.store.ts"],"names":[],"mappings":"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"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"quiz_progress.store.d.ts","sourceRoot":"","sources":["../../../src/stores/quizprogress/quiz_progress.store.ts"],"names":[],"mappings":"AAAA,OAAO,EAAe,KAAK,QAAQ,EAAE,MAAM,iBAAiB,CAAC;AAC7D,OAAO,KAAK,EAAE,WAAW,EAAE,WAAW,EAAE,MAAM,sBAAsB,CAAC;AAMrE,MAAM,MAAM,UAAU,GAAG,MAAM,EAAE,CAAC;AAClC,KAAK,KAAK,GAAG,MAAM,GAAG,OAAO,GAAG,UAAU,CAAC;AAE3C,MAAM,MAAM,iBAAiB,GAAG;IAC9B,GAAG,EAAE,MAAM,CAAC;IACZ,KAAK,EAAE,MAAM,CAAC;IAEd,QAAQ,CAAC,EAAE,MAAM,CAAC;IAClB,KAAK,EAAE,MAAM,CAAC;IACd,KAAK,EAAE,OAAO,CAAC;IACf,QAAQ,EAAE,MAAM,EAAE,CAAC;IACnB,YAAY,EAAE,MAAM,EAAE,CAAC;IACvB,SAAS,EAAE,OAAO,CAAC;IACnB,EAAE,EAAE,MAAM,CAAC;IACX,QAAQ,EAAE,OAAO,CAAC;IAClB,QAAQ,EAAE,OAAO,CAAC;CACnB,CAAC;AAEF,MAAM,MAAM,iBAAiB,GAAG;IAC9B,KAAK,EAAE,KAAK,CAAC;IACb,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,OAAO,EAAE,WAAW,EAAE,CAAC;IACvB,KAAK,EAAE,MAAM,EAAE,CAAC;IAChB,YAAY,EAAE,MAAM,CAAC;IACrB,OAAO,EAAE,MAAM,CAAC,MAAM,EAAE,UAAU,CAAC,CAAC;IACpC,YAAY,EAAE,MAAM,CAAC;IACrB,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,UAAU,CAAC,EAAE,MAAM,CAAC;IACpB,iBAAiB,CAAC,EAAE,MAAM,CAAC;IAC3B,YAAY,CAAC,EAAE,MAAM,CAAC;IACtB,QAAQ,EAAE,OAAO,CAAC;IAClB,IAAI,EAAE,MAAM,CAAC,MAAM,EAAE,iBAAiB,CAAC,CAAC;CACzC,CAAC;AAEF,MAAM,MAAM,mBAAmB,GAAG;IAChC,yCAAyC;IACzC,kBAAkB,EAAE,CAAC,OAAO,CAAC,EAAE,WAAW,KAAK,IAAI,CAAC;IACpD,gDAAgD;IAChD,eAAe,EAAE,CAAC,OAAO,CAAC,EAAE,WAAW,KAAK,IAAI,CAAC;IACjD,KAAK,EAAE,MAAM,IAAI,CAAC;IAElB,YAAY,EAAE,CAAC,QAAQ,EAAE,MAAM,KAAK,IAAI,CAAC;IACzC,YAAY,EAAE,CAAC,QAAQ,EAAE,MAAM,KAAK,IAAI,CAAC;IAEzC,wCAAwC;IACxC,aAAa,EAAE,MAAM,IAAI,CAAC;IAE1B,gBAAgB;IAChB,SAAS,EAAE,CAAC,CAAC,EAAE,OAAO,KAAK,IAAI,CAAC;IAEhC,uCAAuC;IACvC,eAAe,EAAE,MAAM,IAAI,CAAC;IAE5B,IAAI,EAAE,MAAM,IAAI,CAAC;IACjB,IAAI,EAAE,MAAM,IAAI,CAAC;IACjB,MAAM,EAAE,MAAM,IAAI,CAAC;IAEnB,qCAAqC;IACrC,IAAI,EAAE,MAAM,IAAI,CAAC;CAClB,CAAC;AAEF,MAAM,MAAM,aAAa,GAAG,iBAAiB,GAAG,mBAAmB,CAAC;AAEpE,gCAAgC;AAChC,MAAM,MAAM,iBAAiB,GAAG,QAAQ,CAAC,aAAa,CAAC,CAAC;AAmDxD;;;;GAIG;AACH,wBAAgB,8BAA8B,CAAC,cAAc,CAAC,EAAE,WAAW,GAAG,iBAAiB,
|
|
1
|
+
{"version":3,"file":"quiz_progress.store.d.ts","sourceRoot":"","sources":["../../../src/stores/quizprogress/quiz_progress.store.ts"],"names":[],"mappings":"AAAA,OAAO,EAAe,KAAK,QAAQ,EAAE,MAAM,iBAAiB,CAAC;AAC7D,OAAO,KAAK,EAAE,WAAW,EAAE,WAAW,EAAE,MAAM,sBAAsB,CAAC;AAMrE,MAAM,MAAM,UAAU,GAAG,MAAM,EAAE,CAAC;AAClC,KAAK,KAAK,GAAG,MAAM,GAAG,OAAO,GAAG,UAAU,CAAC;AAE3C,MAAM,MAAM,iBAAiB,GAAG;IAC9B,GAAG,EAAE,MAAM,CAAC;IACZ,KAAK,EAAE,MAAM,CAAC;IAEd,QAAQ,CAAC,EAAE,MAAM,CAAC;IAClB,KAAK,EAAE,MAAM,CAAC;IACd,KAAK,EAAE,OAAO,CAAC;IACf,QAAQ,EAAE,MAAM,EAAE,CAAC;IACnB,YAAY,EAAE,MAAM,EAAE,CAAC;IACvB,SAAS,EAAE,OAAO,CAAC;IACnB,EAAE,EAAE,MAAM,CAAC;IACX,QAAQ,EAAE,OAAO,CAAC;IAClB,QAAQ,EAAE,OAAO,CAAC;CACnB,CAAC;AAEF,MAAM,MAAM,iBAAiB,GAAG;IAC9B,KAAK,EAAE,KAAK,CAAC;IACb,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,OAAO,EAAE,WAAW,EAAE,CAAC;IACvB,KAAK,EAAE,MAAM,EAAE,CAAC;IAChB,YAAY,EAAE,MAAM,CAAC;IACrB,OAAO,EAAE,MAAM,CAAC,MAAM,EAAE,UAAU,CAAC,CAAC;IACpC,YAAY,EAAE,MAAM,CAAC;IACrB,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,UAAU,CAAC,EAAE,MAAM,CAAC;IACpB,iBAAiB,CAAC,EAAE,MAAM,CAAC;IAC3B,YAAY,CAAC,EAAE,MAAM,CAAC;IACtB,QAAQ,EAAE,OAAO,CAAC;IAClB,IAAI,EAAE,MAAM,CAAC,MAAM,EAAE,iBAAiB,CAAC,CAAC;CACzC,CAAC;AAEF,MAAM,MAAM,mBAAmB,GAAG;IAChC,yCAAyC;IACzC,kBAAkB,EAAE,CAAC,OAAO,CAAC,EAAE,WAAW,KAAK,IAAI,CAAC;IACpD,gDAAgD;IAChD,eAAe,EAAE,CAAC,OAAO,CAAC,EAAE,WAAW,KAAK,IAAI,CAAC;IACjD,KAAK,EAAE,MAAM,IAAI,CAAC;IAElB,YAAY,EAAE,CAAC,QAAQ,EAAE,MAAM,KAAK,IAAI,CAAC;IACzC,YAAY,EAAE,CAAC,QAAQ,EAAE,MAAM,KAAK,IAAI,CAAC;IAEzC,wCAAwC;IACxC,aAAa,EAAE,MAAM,IAAI,CAAC;IAE1B,gBAAgB;IAChB,SAAS,EAAE,CAAC,CAAC,EAAE,OAAO,KAAK,IAAI,CAAC;IAEhC,uCAAuC;IACvC,eAAe,EAAE,MAAM,IAAI,CAAC;IAE5B,IAAI,EAAE,MAAM,IAAI,CAAC;IACjB,IAAI,EAAE,MAAM,IAAI,CAAC;IACjB,MAAM,EAAE,MAAM,IAAI,CAAC;IAEnB,qCAAqC;IACrC,IAAI,EAAE,MAAM,IAAI,CAAC;CAClB,CAAC;AAEF,MAAM,MAAM,aAAa,GAAG,iBAAiB,GAAG,mBAAmB,CAAC;AAEpE,gCAAgC;AAChC,MAAM,MAAM,iBAAiB,GAAG,QAAQ,CAAC,aAAa,CAAC,CAAC;AAmDxD;;;;GAIG;AACH,wBAAgB,8BAA8B,CAAC,cAAc,CAAC,EAAE,WAAW,GAAG,iBAAiB,CAmP9F"}
|
|
@@ -1,10 +1,10 @@
|
|
|
1
|
-
import {
|
|
1
|
+
import { CRViewerStateExtended } from './crViewer.store';
|
|
2
2
|
/**
|
|
3
3
|
* Provider: 뷰어 인스턴스별로 독립적인 store를 1회 생성해 제공합니다.
|
|
4
4
|
* initialState는 최초 마운트 시에만 적용됩니다.
|
|
5
5
|
*/
|
|
6
6
|
export declare function InternalCRViewerProvider({ children, initialState, }: {
|
|
7
7
|
children: React.ReactNode;
|
|
8
|
-
initialState?: Partial<
|
|
8
|
+
initialState?: Partial<CRViewerStateExtended>;
|
|
9
9
|
}): import("react/jsx-runtime").JSX.Element;
|
|
10
10
|
//# sourceMappingURL=CRViewer.provider.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"CRViewer.provider.d.ts","sourceRoot":"","sources":["../../../src/stores/viewer/CRViewer.provider.tsx"],"names":[],"mappings":"AAEA,OAAO,
|
|
1
|
+
{"version":3,"file":"CRViewer.provider.d.ts","sourceRoot":"","sources":["../../../src/stores/viewer/CRViewer.provider.tsx"],"names":[],"mappings":"AAEA,OAAO,EAAuB,KAAK,qBAAqB,EAAE,MAAM,gCAAgC,CAAC;AAGjG;;;GAGG;AACH,wBAAgB,wBAAwB,CAAC,EACvC,QAAQ,EACR,YAAY,GACb,EAAE;IACD,QAAQ,EAAE,KAAK,CAAC,SAAS,CAAC;IAC1B,YAAY,CAAC,EAAE,OAAO,CAAC,qBAAqB,CAAC,CAAC;CAC/C,2CAQA"}
|
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
import { CRViewerActions,
|
|
1
|
+
import { CRViewerActions, CRViewerStateExtended, CRViewerStore } from './crViewer.store';
|
|
2
2
|
import { StoreApi } from 'zustand';
|
|
3
3
|
/**
|
|
4
4
|
* 구독 기반 selector 훅.
|
|
@@ -7,7 +7,7 @@ import { StoreApi } from 'zustand';
|
|
|
7
7
|
*
|
|
8
8
|
* 본문 렌더 등 "상태 변화에 반응"해야 할 컴포넌트에서 사용하세요.
|
|
9
9
|
*/
|
|
10
|
-
export declare function useCRViewerScopedStore<T>(selector: (s:
|
|
10
|
+
export declare function useCRViewerScopedStore<T>(selector: (s: CRViewerStateExtended & CRViewerActions) => T, equalityFn?: (a: T, b: T) => boolean): T;
|
|
11
11
|
/**
|
|
12
12
|
* ⚡ 구독 없는 store API 훅.
|
|
13
13
|
* - getState/setState/subscribe 등 StoreApi에 접근
|
|
@@ -17,7 +17,7 @@ export declare function useCRViewerScopedStore<T>(selector: (s: CRViewerState &
|
|
|
17
17
|
* const storeApi = useCRViewerStoreApi();
|
|
18
18
|
* const { isSettingsOpen, setSettingsOpen, toggleOverlays } = storeApi.getState();
|
|
19
19
|
*/
|
|
20
|
-
export declare function useCRViewerStoreApi(): StoreApi<
|
|
20
|
+
export declare function useCRViewerStoreApi(): StoreApi<CRViewerStateExtended & CRViewerActions>;
|
|
21
21
|
/**
|
|
22
22
|
* (선택) 컨텍스트 자체가 필요한 경우를 위한 getter.
|
|
23
23
|
* 가급적 훅(useCRViewerStoreApi/useCRViewerScopedStore)을 사용하세요.
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"crViewer.hooks.d.ts","sourceRoot":"","sources":["../../../src/stores/viewer/crViewer.hooks.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EACV,eAAe,EACf,
|
|
1
|
+
{"version":3,"file":"crViewer.hooks.d.ts","sourceRoot":"","sources":["../../../src/stores/viewer/crViewer.hooks.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EACV,eAAe,EACf,qBAAqB,EACrB,aAAa,EACd,MAAM,gCAAgC,CAAC;AAExC,OAAO,KAAK,EAAE,QAAQ,EAAE,MAAM,SAAS,CAAC;AAExC;;;;;;GAMG;AACH,wBAAgB,sBAAsB,CAAC,CAAC,EACtC,QAAQ,EAAE,CAAC,CAAC,EAAE,qBAAqB,GAAG,eAAe,KAAK,CAAC,EAC3D,UAAU,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,KAAK,OAAO,GACnC,CAAC,CAWH;AAED;;;;;;;;GAQG;AACH,wBAAgB,mBAAmB,IAAI,QAAQ,CAAC,qBAAqB,GAAG,eAAe,CAAC,CAMvF;AAED;;;GAGG;AACH,wBAAgB,wBAAwB,IAAI,aAAa,CAMxD"}
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
import { StoreApi } from 'zustand/vanilla';
|
|
2
|
-
import {
|
|
3
|
-
|
|
2
|
+
import { ViewerEventBridgeStore } from '../eventBridge/viewerEventBridge.store';
|
|
3
|
+
import { CRViewerState, PointerStyle, ViewerMode, ViewerTheme } from '../../types/viewerEvent.types';
|
|
4
4
|
export declare const THEME_PALETTES: {
|
|
5
5
|
light: {
|
|
6
6
|
bg: string;
|
|
@@ -31,16 +31,9 @@ export declare const THEME_PALETTES: {
|
|
|
31
31
|
borderColor: string;
|
|
32
32
|
};
|
|
33
33
|
};
|
|
34
|
-
export type ViewerTheme = keyof typeof THEME_PALETTES;
|
|
35
34
|
export type OverlayPalette = (typeof THEME_PALETTES)[ViewerTheme];
|
|
36
|
-
export type PointerStyle = 'highlight' | 'underline';
|
|
37
35
|
export type BreakMarkKind = 'slash';
|
|
38
|
-
export type
|
|
39
|
-
mode: ViewerMode;
|
|
40
|
-
theme: ViewerTheme;
|
|
41
|
-
fontFamily: string;
|
|
42
|
-
fontSizePx: number;
|
|
43
|
-
lineHeight: number;
|
|
36
|
+
export type CRViewerStateExtended = CRViewerState & {
|
|
44
37
|
marginX: number;
|
|
45
38
|
marginY: number;
|
|
46
39
|
showOverlays: boolean;
|
|
@@ -54,7 +47,7 @@ export type CRViewerState = {
|
|
|
54
47
|
breakGapPx: number;
|
|
55
48
|
/** 🔇 오디오 기본 음소거 */
|
|
56
49
|
muteAudio: boolean;
|
|
57
|
-
|
|
50
|
+
/** 🎵 오디오 재생 속도 (1.0 = 기본, 0.05 단위 증감) */
|
|
58
51
|
audioSpeed: number;
|
|
59
52
|
/** 🖊️ 포인터(형광펜/밑줄/커스텀) 표시 여부 */
|
|
60
53
|
showPointer: boolean;
|
|
@@ -63,9 +56,8 @@ export type CRViewerState = {
|
|
|
63
56
|
/** 📐 뷰포트 크기 (이미지 maxHeight 계산 등에 사용) */
|
|
64
57
|
viewportWidth: number;
|
|
65
58
|
viewportHeight: number;
|
|
66
|
-
/**
|
|
67
|
-
|
|
68
|
-
playbackViewportHeight: number;
|
|
59
|
+
/** 🛠️ 개발 모드 (디버그 UI 표시용) */
|
|
60
|
+
isDev: boolean;
|
|
69
61
|
};
|
|
70
62
|
export type CRViewerActions = {
|
|
71
63
|
setMode: (m: ViewerMode) => void;
|
|
@@ -77,6 +69,9 @@ export type CRViewerActions = {
|
|
|
77
69
|
setMarginY: (my: number) => void;
|
|
78
70
|
setShowOverlays: (v: boolean) => void;
|
|
79
71
|
toggleOverlays: () => void;
|
|
72
|
+
/** 컴팩트 오버레이 모드 설정 */
|
|
73
|
+
setOverlayCompactMode: (v: boolean) => void;
|
|
74
|
+
toggleOverlayCompactMode: () => void;
|
|
80
75
|
/** ✅ 바텀 시트 토글 */
|
|
81
76
|
setSettingsOpen: (open: boolean) => void;
|
|
82
77
|
/** ✅ 보기 설정 초기화 */
|
|
@@ -105,26 +100,25 @@ export type CRViewerActions = {
|
|
|
105
100
|
setBreakGapPx: (px: number) => void;
|
|
106
101
|
setMuteAudio: (v: boolean) => void;
|
|
107
102
|
toggleMuteAudio: () => void;
|
|
103
|
+
/** 🎵 오디오 재생 속도 설정 (0.7~1.5 권장, 0.05 단위) */
|
|
108
104
|
setAudioSpeed: (speed: number) => void;
|
|
109
|
-
|
|
105
|
+
incAudioSpeed: () => void;
|
|
106
|
+
decAudioSpeed: () => void;
|
|
110
107
|
setShowPointer: (v: boolean) => void;
|
|
111
108
|
toggleShowPointer: () => void;
|
|
112
109
|
setShowSplit: (v: boolean) => void;
|
|
113
110
|
toggleShowSplit: () => void;
|
|
114
111
|
/** 📐 뷰포트 크기 설정 */
|
|
115
112
|
setViewportSize: (width: number, height: number) => void;
|
|
116
|
-
/** 📐 재생용 뷰포트 크기 설정 */
|
|
117
|
-
setPlaybackViewportSize: (width: number, height: number) => void;
|
|
118
|
-
clearPlaybackViewport: () => void;
|
|
119
113
|
};
|
|
120
|
-
export type CRViewerStore = StoreApi<
|
|
114
|
+
export type CRViewerStore = StoreApi<CRViewerStateExtended & CRViewerActions>;
|
|
121
115
|
export declare const FONT_PRESETS: {
|
|
122
116
|
label: string;
|
|
123
117
|
value: string;
|
|
124
118
|
}[];
|
|
125
119
|
export type CRViewerStoreOptions = {
|
|
126
|
-
init?: Partial<
|
|
127
|
-
recorderStore?:
|
|
120
|
+
init?: Partial<CRViewerStateExtended>;
|
|
121
|
+
recorderStore?: ViewerEventBridgeStore;
|
|
128
122
|
};
|
|
129
123
|
export declare function createCRViewerStore(options?: CRViewerStoreOptions): CRViewerStore;
|
|
130
124
|
//# sourceMappingURL=crViewer.store.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"crViewer.store.d.ts","sourceRoot":"","sources":["../../../src/stores/viewer/crViewer.store.ts"],"names":[],"mappings":"AAGA,OAAO,EAAe,KAAK,QAAQ,EAAE,MAAM,iBAAiB,CAAC;AAC7D,OAAO,KAAK,EAAE,
|
|
1
|
+
{"version":3,"file":"crViewer.store.d.ts","sourceRoot":"","sources":["../../../src/stores/viewer/crViewer.store.ts"],"names":[],"mappings":"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"}
|
|
@@ -1,149 +1,2 @@
|
|
|
1
|
-
|
|
2
|
-
/** 뷰어 이벤트 타입 */
|
|
3
|
-
export type ViewerEventType = 'recording_start' | 'recording_stop' | 'global_index_change' | 'scroll' | 'page_change' | 'section_change' | 'mode_change' | 'settings_change' | 'viewer_state_snapshot' | 'render_start' | 'loading_start' | 'loading_end' | 'viewport_resize' | 'audio_control';
|
|
4
|
-
/** 녹화용 뷰어 상태 */
|
|
5
|
-
export type RecordingViewerState = CRViewerState;
|
|
6
|
-
/** 오디오 상태 스냅샷 */
|
|
7
|
-
export type AudioSnapshot = {
|
|
8
|
-
/** 오디오 상태 (playing, paused 등) */
|
|
9
|
-
status: 'idle' | 'loading' | 'playing' | 'paused' | 'ended' | 'error';
|
|
10
|
-
/** 현재 클립 인덱스 */
|
|
11
|
-
currentClip: number;
|
|
12
|
-
/** 현재 재생 시간 (ms) */
|
|
13
|
-
currentTimeMs: number;
|
|
14
|
-
};
|
|
15
|
-
/** 녹화 시작 시 저장할 초기 스냅샷 */
|
|
16
|
-
export type RecordingSnapshot = {
|
|
17
|
-
/** 뷰어 설정 상태 */
|
|
18
|
-
viewerState: RecordingViewerState;
|
|
19
|
-
/** 현재 globalIndex (마크 위치) */
|
|
20
|
-
globalIndex: number;
|
|
21
|
-
/** 스크롤 위치 (scroll 모드) - deprecated, anchorGI 사용 권장 */
|
|
22
|
-
scrollY?: number;
|
|
23
|
-
/** 화면 상단에 보이는 run의 globalIndex (스크롤 복원용) */
|
|
24
|
-
anchorGI?: number;
|
|
25
|
-
/** anchorGI 요소가 뷰포트 상단에서 떨어진 비율 (0~1) */
|
|
26
|
-
anchorOffsetRatio?: number;
|
|
27
|
-
/** 현재 페이지 (page 모드) */
|
|
28
|
-
currentPage?: number;
|
|
29
|
-
/** 섹션 ID */
|
|
30
|
-
sectionId: string;
|
|
31
|
-
/** 뷰어 렌더 영역 너비 (px) */
|
|
32
|
-
viewportWidth: number;
|
|
33
|
-
/** 뷰어 렌더 영역 높이 (px) */
|
|
34
|
-
viewportHeight: number;
|
|
35
|
-
/** 오디오 상태 (optional - 오디오 없을 수 있음) */
|
|
36
|
-
audio?: AudioSnapshot;
|
|
37
|
-
};
|
|
38
|
-
/** 기본 이벤트 (뷰어에서 emit) */
|
|
39
|
-
export type ViewerEventBase<T extends ViewerEventType, P = Record<string, unknown>> = {
|
|
40
|
-
type: T;
|
|
41
|
-
/** 절대 시간 (Date.now()) */
|
|
42
|
-
timestamp: number;
|
|
43
|
-
payload: P;
|
|
44
|
-
};
|
|
45
|
-
/** 저장용 이벤트 (외부에서 relTime 추가) */
|
|
46
|
-
export type StoredViewerEvent<T extends ViewerEventType, P = Record<string, unknown>> = ViewerEventBase<T, P> & {
|
|
47
|
-
/** 녹화 시작 기준 상대 시간 (초 단위, 예: 1.23) */
|
|
48
|
-
relTime: number;
|
|
49
|
-
};
|
|
50
|
-
/** 녹화 시작 이벤트 */
|
|
51
|
-
export type RecordingStartEvent = ViewerEventBase<'recording_start', {
|
|
52
|
-
snapshot: RecordingSnapshot;
|
|
53
|
-
}>;
|
|
54
|
-
/** 녹화 중지 이벤트 */
|
|
55
|
-
export type RecordingStopEvent = ViewerEventBase<'recording_stop', {
|
|
56
|
-
duration: number;
|
|
57
|
-
}>;
|
|
58
|
-
/** globalIndex 변경 이벤트 */
|
|
59
|
-
export type GlobalIndexChangeEvent = ViewerEventBase<'global_index_change', {
|
|
60
|
-
globalIndex: number;
|
|
61
|
-
}>;
|
|
62
|
-
/** 스크롤 이벤트 (scroll 모드 전용) */
|
|
63
|
-
export type ScrollEvent = ViewerEventBase<'scroll', {
|
|
64
|
-
/** 스크롤 절대 위치 (px) */
|
|
65
|
-
scrollTop: number;
|
|
66
|
-
/** 스크롤 비율 (0~1, scrollTop / (scrollHeight - clientHeight)) */
|
|
67
|
-
scrollRatio: number;
|
|
68
|
-
/** 화면 상단 기준 run index */
|
|
69
|
-
anchorGI: number;
|
|
70
|
-
/** anchorGI 요소가 뷰포트 상단에서 떨어진 비율 (0~1) */
|
|
71
|
-
anchorOffsetRatio: number;
|
|
72
|
-
}>;
|
|
73
|
-
/** 페이지 변경 이벤트 */
|
|
74
|
-
export type PageChangeEvent = ViewerEventBase<'page_change', {
|
|
75
|
-
page: number;
|
|
76
|
-
}>;
|
|
77
|
-
/** 섹션 변경 이벤트 */
|
|
78
|
-
export type SectionChangeEvent = ViewerEventBase<'section_change', {
|
|
79
|
-
sectionId: string;
|
|
80
|
-
}>;
|
|
81
|
-
/** 모드 변경 이벤트 */
|
|
82
|
-
export type ModeChangeEvent = ViewerEventBase<'mode_change', {
|
|
83
|
-
mode: 'scroll' | 'page';
|
|
84
|
-
}>;
|
|
85
|
-
/** 설정 변경 이벤트 (개별 키) */
|
|
86
|
-
export type SettingsChangeEvent = ViewerEventBase<'settings_change', {
|
|
87
|
-
key: keyof CRViewerState;
|
|
88
|
-
value: unknown;
|
|
89
|
-
}>;
|
|
90
|
-
/** 뷰어 상태 전체 스냅샷 이벤트 (설정 변경 시 전체 상태 기록) */
|
|
91
|
-
export type ViewerStateSnapshotEvent = ViewerEventBase<'viewer_state_snapshot', {
|
|
92
|
-
viewerState: CRViewerState;
|
|
93
|
-
}>;
|
|
94
|
-
/** 뷰어 렌더 시작 이벤트 (마운트 시, 섹션 변경 시) */
|
|
95
|
-
export type RenderStartEvent = ViewerEventBase<'render_start', {
|
|
96
|
-
sectionId: string;
|
|
97
|
-
}>;
|
|
98
|
-
/** 로딩 시작 이벤트 */
|
|
99
|
-
export type LoadingStartEvent = ViewerEventBase<'loading_start', Record<string, never>>;
|
|
100
|
-
/** 로딩 완료 이벤트 */
|
|
101
|
-
export type LoadingEndEvent = ViewerEventBase<'loading_end', {
|
|
102
|
-
/** 로딩 소요 시간 (초, 예: 1.523) */
|
|
103
|
-
duration: number;
|
|
104
|
-
}>;
|
|
105
|
-
/** 뷰포트 리사이즈 이벤트 */
|
|
106
|
-
export type ViewportResizeEvent = ViewerEventBase<'viewport_resize', {
|
|
107
|
-
width: number;
|
|
108
|
-
height: number;
|
|
109
|
-
}>;
|
|
110
|
-
/** 오디오 제어 액션 타입 */
|
|
111
|
-
export type AudioControlAction = 'play' | 'pause' | 'stop';
|
|
112
|
-
/** 오디오 제어 이벤트 */
|
|
113
|
-
export type AudioControlEvent = ViewerEventBase<'audio_control', {
|
|
114
|
-
action: AudioControlAction;
|
|
115
|
-
}>;
|
|
116
|
-
/** 모든 뷰어 이벤트 타입 */
|
|
117
|
-
export type ViewerEvent = RecordingStartEvent | RecordingStopEvent | GlobalIndexChangeEvent | ScrollEvent | PageChangeEvent | SectionChangeEvent | ModeChangeEvent | SettingsChangeEvent | ViewerStateSnapshotEvent | RenderStartEvent | LoadingStartEvent | LoadingEndEvent | ViewportResizeEvent | AudioControlEvent;
|
|
118
|
-
export type ViewerEventCallback = (event: ViewerEvent) => void;
|
|
119
|
-
/** 저장용 이벤트 (any type) */
|
|
120
|
-
export type StoredEvent = StoredViewerEvent<ViewerEventType, unknown>;
|
|
121
|
-
/** 녹화 청크 (15초 단위 등) */
|
|
122
|
-
export type RecordingChunk = {
|
|
123
|
-
/** 청크 인덱스 (0, 1, 2, ...) */
|
|
124
|
-
index: number;
|
|
125
|
-
/** 청크 시작 시간 (초, 녹화 시작 기준) */
|
|
126
|
-
startTime: number;
|
|
127
|
-
/** 청크 종료 시간 (초) */
|
|
128
|
-
endTime: number;
|
|
129
|
-
/** 청크 시작 시점의 뷰어 스냅샷 */
|
|
130
|
-
snapshot: RecordingSnapshot;
|
|
131
|
-
/** 이 청크에 포함된 이벤트들 */
|
|
132
|
-
events: StoredEvent[];
|
|
133
|
-
};
|
|
134
|
-
/** 녹화 메타데이터 (전체 녹화 정보) */
|
|
135
|
-
export type RecordingMeta = {
|
|
136
|
-
/** 녹화 ID */
|
|
137
|
-
id: string;
|
|
138
|
-
/** 녹화 시작 절대 시간 */
|
|
139
|
-
startedAt: number;
|
|
140
|
-
/** 총 녹화 시간 (초) */
|
|
141
|
-
totalDuration: number;
|
|
142
|
-
/** 청크 길이 (초) */
|
|
143
|
-
chunkDuration: number;
|
|
144
|
-
/** 총 청크 수 */
|
|
145
|
-
chunkCount: number;
|
|
146
|
-
/** 섹션 ID */
|
|
147
|
-
sectionId: string;
|
|
148
|
-
};
|
|
1
|
+
export type { ViewerMode, ViewerTheme, PointerStyle, CRViewerState, ViewerEventType, AudioSnapshot, AudioControlAction, ViewerEventBase, StoredViewerEvent, GlobalIndexChangeEvent, ScrollEvent, PageChangeEvent, SectionChangeEvent, ModeChangeEvent, SettingsChangeEvent, RenderStartEvent, LoadingStartEvent, LoadingEndEvent, ViewportResizeEvent, AudioControlEvent, ViewerEvent, ViewerEventCallback, StoredEvent, RecordingViewerState, RecordingSnapshot, RecordingChunk, RecordingMeta, } from '@readerseye2/cr_type';
|
|
149
2
|
//# sourceMappingURL=viewerEvent.types.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"viewerEvent.types.d.ts","sourceRoot":"","sources":["../../src/types/viewerEvent.types.ts"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"viewerEvent.types.d.ts","sourceRoot":"","sources":["../../src/types/viewerEvent.types.ts"],"names":[],"mappings":"AAIA,YAAY,EACV,UAAU,EACV,WAAW,EACX,YAAY,EACZ,aAAa,EACb,eAAe,EACf,aAAa,EACb,kBAAkB,EAClB,eAAe,EACf,iBAAiB,EACjB,sBAAsB,EACtB,WAAW,EACX,eAAe,EACf,kBAAkB,EAClB,eAAe,EACf,mBAAmB,EACnB,gBAAgB,EAChB,iBAAiB,EACjB,eAAe,EACf,mBAAmB,EACnB,iBAAiB,EACjB,WAAW,EACX,mBAAmB,EACnB,WAAW,EACX,oBAAoB,EACpB,iBAAiB,EACjB,cAAc,EACd,aAAa,GACd,MAAM,sBAAsB,CAAC"}
|