@ihabdevteam/core 0.111.0 → 0.113.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/CHANGELOG.md +49 -0
- package/dist/components.cjs.js +175 -175
- package/dist/hooks.cjs.js +1 -1
- package/dist/i18n.cjs.js +1 -1
- package/dist/ihabdevteam-core.cjs.js +181 -181
- package/dist/ihabdevteam-core.d.ts +39 -2
- package/dist/packages/core/src/components/Training/TrainingPagePopup.d.ts +12 -0
- package/dist/packages/core/src/components/Training/TrainingPagePopup.js +19 -3
- package/dist/packages/core/src/hooks/useTablePaging.d.ts +11 -1
- package/dist/packages/core/src/hooks/useTablePaging.js +10 -2
- package/dist/packages/core/src/utils/noiseSettingsStore.d.ts +14 -0
- package/dist/packages/core/src/utils/noiseSettingsStore.js +13 -0
- package/dist/packages/core/src/utils.d.ts +1 -1
- package/dist/packages/core/src/utils.js +1 -1
- package/dist/packages/core/src/version.d.ts +1 -1
- package/dist/packages/core/src/version.js +1 -1
- package/dist/utils.cjs.js +2 -2
- package/package.json +1 -1
|
@@ -1333,7 +1333,7 @@ export declare function copyText(text: string): Promise<boolean>;
|
|
|
1333
1333
|
*
|
|
1334
1334
|
* 값은 손으로 적고 `test/coreVersion.test.ts` 가 package.json 과 어긋나면 운다.
|
|
1335
1335
|
*/
|
|
1336
|
-
export declare const CORE_VERSION = "0.
|
|
1336
|
+
export declare const CORE_VERSION = "0.113.0";
|
|
1337
1337
|
|
|
1338
1338
|
/** @public */
|
|
1339
1339
|
declare const coreDefault: Record<string, unknown>;
|
|
@@ -2983,6 +2983,15 @@ export declare interface NoiseSettingsStore {
|
|
|
2983
2983
|
load: () => Promise<Partial<CoreNoiseSettings> | null>;
|
|
2984
2984
|
/** 현재 훈련 대상의 소음설정을 저장(fire-and-forget). */
|
|
2985
2985
|
save: (settings: CoreNoiseSettings) => Promise<void> | void;
|
|
2986
|
+
/**
|
|
2987
|
+
* **판에 실제로 걸린 설정**이 정해지거나 바뀔 때마다 부른다 — 저장 병합 직후,
|
|
2988
|
+
* `noiseOverride` 적용 직후, 판 중 변경마다. 선택.
|
|
2989
|
+
*
|
|
2990
|
+
* `save` 와 따로 두는 까닭: `noiseOverride` 가 걸린 판은 저장을 건너뛴다. 앱이 결과마다
|
|
2991
|
+
* 그 판의 소음 조건을 함께 기록한다면 `save` 로는 그 값을 못 받는다 — 저장값으로
|
|
2992
|
+
* 기록해 조건이 틀리게 남는다. 이 콜백은 저장 여부와 무관하게 늘 걸린 값을 준다.
|
|
2993
|
+
*/
|
|
2994
|
+
applied?: (settings: CoreNoiseSettings) => void;
|
|
2986
2995
|
}
|
|
2987
2996
|
|
|
2988
2997
|
/**
|
|
@@ -4455,6 +4464,12 @@ export declare function removeItem<T>(draft: readonly DraftItem<T>[], key: strin
|
|
|
4455
4464
|
/** @public 배열에서 from 위치 요소를 to 위치로 옮긴 새 배열을 반환한다(원본 불변). 드래그 재정렬 등에 사용. */
|
|
4456
4465
|
export declare function reorderArray<T>(arr: readonly T[], from: number, to: number): T[];
|
|
4457
4466
|
|
|
4467
|
+
/**
|
|
4468
|
+
* @public 판에 걸린 소음설정을 앱에 알린다(`NoiseSettingsStore.applied`). 없으면 아무 일도 안 한다.
|
|
4469
|
+
* 알림이 실패해도 훈련은 이어진다 — `saveNoiseSettings` 와 같은 결로 삼킨다.
|
|
4470
|
+
*/
|
|
4471
|
+
export declare function reportAppliedNoiseSettings(settings: CoreNoiseSettings): void;
|
|
4472
|
+
|
|
4458
4473
|
/** @public */
|
|
4459
4474
|
export declare interface ReportBlock {
|
|
4460
4475
|
/** 블록을 가리키는 값. 같은 목록 안에서 겹치지 않아야 한다. */
|
|
@@ -5859,6 +5874,12 @@ export declare type TableHeaderGroup = {
|
|
|
5859
5874
|
className?: string;
|
|
5860
5875
|
};
|
|
5861
5876
|
|
|
5877
|
+
/** `useTablePaging` 의 셋째 인자. @public */
|
|
5878
|
+
export declare interface TablePagingOptions {
|
|
5879
|
+
/** 처음 개수 보기 — `VAP_PAGE_SIZE_OPTIONS` 의 값('10'·'25'·'50'·'100'). 없거나 목록 밖이면 '25'. 마운트 때만 읽는다. */
|
|
5880
|
+
initialPageSize?: string;
|
|
5881
|
+
}
|
|
5882
|
+
|
|
5862
5883
|
/** @public */
|
|
5863
5884
|
export declare type TableProps<T extends {
|
|
5864
5885
|
id?: string | number;
|
|
@@ -6938,6 +6959,17 @@ export declare type TrainingPagePopupProps = {
|
|
|
6938
6959
|
dailyTotal?: number;
|
|
6939
6960
|
/** 완료 정본의 항목 식별자(item_ref) — 기기 간 완료표시 동기화 */
|
|
6940
6961
|
itemRef?: string;
|
|
6962
|
+
/**
|
|
6963
|
+
* **이 판에만** 거는 소음 설정 — 저장하지 않는다.
|
|
6964
|
+
*
|
|
6965
|
+
* 저장된 설정(`loadNoiseSettings`)을 불러와 병합한 **뒤에** 그 위에 덮는다. 함수로 주면
|
|
6966
|
+
* 병합된 저장값을 받아 계산한다(저장된 `mainVolume` 에 맞춰 소음을 정할 때).
|
|
6967
|
+
* 이 prop 이 있는 판에서는 판 중 툴팁으로 바꾼 것까지 **저장을 건너뛴다** — 고객의
|
|
6968
|
+
* 저장된 설정을 말없이 고치지 않도록. 마운트 때 한 번만 읽는다.
|
|
6969
|
+
*
|
|
6970
|
+
* 판에 실제로 걸린 값은 `NoiseSettingsStore.applied` 로 받는다.
|
|
6971
|
+
*/
|
|
6972
|
+
noiseOverride?: Partial<CoreNoiseSettings> | ((saved: CoreNoiseSettings) => Partial<CoreNoiseSettings>);
|
|
6941
6973
|
/** 훈련 결과 팝업 렌더러 — 없으면 결과 팝업을 표시하지 않음 */
|
|
6942
6974
|
renderResultPopup?: (props: {
|
|
6943
6975
|
score?: number | null;
|
|
@@ -7747,9 +7779,14 @@ export declare interface UseSoundCompassExamOptions {
|
|
|
7747
7779
|
* 섞여, 2쪽의 더 이른 날짜가 1쪽으로 올라오지 않는다. 이 훅은 **이미 정렬된 줄**을
|
|
7748
7780
|
* 받는다 — 차례를 거꾸로 쓰기 어렵게 만든 것이다.
|
|
7749
7781
|
*
|
|
7782
|
+
* 처음 개수는 `opts.initialPageSize` 로 준다(기본 '25'). **마운트 때만 읽는다** — 뒤에
|
|
7783
|
+
* 바뀌어도 사용자가 고른 개수를 덮지 않는다. 마운트 뒤 `onChange('10')` 으로 맞추면
|
|
7784
|
+
* 25줄이 한 번 그려졌다가 줄어드는 것이 보인다 — 그래서 처음 값으로 받는다.
|
|
7785
|
+
* 옵션 목록에 없는 값이면 '25' 로 — 드롭다운이 빈 칸을 보이지 않게.
|
|
7786
|
+
*
|
|
7750
7787
|
* @public
|
|
7751
7788
|
*/
|
|
7752
|
-
export declare function useTablePaging<T>(rows: readonly T[], resetOn?: unknown): {
|
|
7789
|
+
export declare function useTablePaging<T>(rows: readonly T[], resetOn?: unknown, opts?: TablePagingOptions): {
|
|
7753
7790
|
pageRows: T[];
|
|
7754
7791
|
/** Toolbar 의 pageSize 자리에 그대로 넣는다 */
|
|
7755
7792
|
pageSizeProps: {
|
|
@@ -1,5 +1,6 @@
|
|
|
1
1
|
import { type ReactNode, type FC, type CSSProperties, type RefObject, type Dispatch, type SetStateAction } from "react";
|
|
2
2
|
import './TrainingPagePopup.css';
|
|
3
|
+
import { type CoreNoiseSettings } from './NoisePlayerContext';
|
|
3
4
|
import { Page, ListenStep, ConfirmStep, ConfirmWithTextStep, OrderListStep, CardStep, CardOrderStep } from './TrainingStepComponents';
|
|
4
5
|
/** @public */
|
|
5
6
|
export type { ScenarioPage, ScenarioStep, FlowState } from './trainingScenario';
|
|
@@ -66,6 +67,17 @@ export type TrainingPagePopupProps = {
|
|
|
66
67
|
dailyTotal?: number;
|
|
67
68
|
/** 완료 정본의 항목 식별자(item_ref) — 기기 간 완료표시 동기화 */
|
|
68
69
|
itemRef?: string;
|
|
70
|
+
/**
|
|
71
|
+
* **이 판에만** 거는 소음 설정 — 저장하지 않는다.
|
|
72
|
+
*
|
|
73
|
+
* 저장된 설정(`loadNoiseSettings`)을 불러와 병합한 **뒤에** 그 위에 덮는다. 함수로 주면
|
|
74
|
+
* 병합된 저장값을 받아 계산한다(저장된 `mainVolume` 에 맞춰 소음을 정할 때).
|
|
75
|
+
* 이 prop 이 있는 판에서는 판 중 툴팁으로 바꾼 것까지 **저장을 건너뛴다** — 고객의
|
|
76
|
+
* 저장된 설정을 말없이 고치지 않도록. 마운트 때 한 번만 읽는다.
|
|
77
|
+
*
|
|
78
|
+
* 판에 실제로 걸린 값은 `NoiseSettingsStore.applied` 로 받는다.
|
|
79
|
+
*/
|
|
80
|
+
noiseOverride?: Partial<CoreNoiseSettings> | ((saved: CoreNoiseSettings) => Partial<CoreNoiseSettings>);
|
|
69
81
|
/** 훈련 결과 팝업 렌더러 — 없으면 결과 팝업을 표시하지 않음 */
|
|
70
82
|
renderResultPopup?: (props: {
|
|
71
83
|
score?: number | null;
|
|
@@ -23,14 +23,14 @@ import TrainingResultPopup from '../Popup/TrainingResultPopup';
|
|
|
23
23
|
import useTrainingSessionLog from '../../hooks/useTrainingSessionLog';
|
|
24
24
|
import { logTrainingCompletion } from '../../utils/trainingLogger';
|
|
25
25
|
import { toItemResults } from '../../utils/trainingItemResults';
|
|
26
|
-
import { loadNoiseSettings, saveNoiseSettings } from '../../utils/noiseSettingsStore';
|
|
26
|
+
import { loadNoiseSettings, saveNoiseSettings, reportAppliedNoiseSettings } from '../../utils/noiseSettingsStore';
|
|
27
27
|
// 문장 4종은 각 PagePopup 래퍼에서 useTrainingSessionLog로 이미 기록 → 베이스에서 중복 방지
|
|
28
28
|
const SENTENCE_TIME_LOGGED_TYPES = new Set(['LISTEN_IN_NOISE', 'SHORT_STORY', 'LONG_STORY', 'ORDERING_SENTENCE']);
|
|
29
29
|
// renderResultPopup 미지정 시 기본 결과 팝업 — 모든 훈련 타입 공통 폴백
|
|
30
30
|
const defaultRenderResult = (p) => _jsx(TrainingResultPopup, { score: p.score, contextsLength: p.contextsLength, results: p.results, onReplay: p.onReplay, onClose: p.onClose });
|
|
31
31
|
import { getScenarioPageId, getScenarioStepKey, createScenarioFlowState, resolveScenarioStepProps, } from './trainingScenario';
|
|
32
32
|
function TrainingPagePopupInner(props) {
|
|
33
|
-
const { scenario, title, subTitle, depth, icon, wrapperStyle, iconTooltip, pageIndex, pageCount, stepIndex, stepCount, onBack, onComplete, onNext, onSettings, useNoiseSetting = true, children, ariaLabel, label, buildResults, onResult: externalOnResultProp, typeKey, entryPoint, dailyTotal, itemRef, renderResultPopup, } = props;
|
|
33
|
+
const { scenario, title, subTitle, depth, icon, wrapperStyle, iconTooltip, pageIndex, pageCount, stepIndex, stepCount, onBack, onComplete, onNext, onSettings, useNoiseSetting = true, children, ariaLabel, label, buildResults, onResult: externalOnResultProp, typeKey, entryPoint, dailyTotal, itemRef, renderResultPopup, noiseOverride, } = props;
|
|
34
34
|
// 시간 기록 — 문장 4종은 각 래퍼(useTrainingSessionLog)에서 기록하므로 제외, 그 외(단어 등) 공통 기록
|
|
35
35
|
useTrainingSessionLog(typeKey && !SENTENCE_TIME_LOGGED_TYPES.has(typeKey) ? typeKey : '');
|
|
36
36
|
// 팝업 진입 시각 — 완료 정본의 소요 시간 계산 (마운트 시 1회만 effect에서 초기화)
|
|
@@ -119,6 +119,9 @@ function TrainingPagePopupInner(props) {
|
|
|
119
119
|
// 최신 설정 미러(setSettings에서 머지·저장 시 참조 — 상태 업데이터 내 부수효과 회피)
|
|
120
120
|
const noiseSettingsRef = useRef(noiseSettings);
|
|
121
121
|
useEffect(() => { noiseSettingsRef.current = noiseSettings; }, [noiseSettings]);
|
|
122
|
+
// 이 판에만 거는 설정 — 마운트 때 한 번 붙잡는다(부모가 매 렌더 새 함수를 넘겨도 다시 걸지 않게).
|
|
123
|
+
// 있으면 이 판은 저장을 건너뛴다(mergeAndSaveSettings 참고).
|
|
124
|
+
const noiseOverrideRef = useRef(noiseOverride);
|
|
122
125
|
// 계정/고객 저장소에서 초기값 로드 (앱이 configureNoiseSettingsStore로 주입)
|
|
123
126
|
useEffect(() => {
|
|
124
127
|
let cancelled = false;
|
|
@@ -129,6 +132,16 @@ function TrainingPagePopupInner(props) {
|
|
|
129
132
|
const merged = saved ? { ...noiseSettingsRef.current, ...saved } : { ...DEFAULT_NOISE_SETTINGS };
|
|
130
133
|
noiseSettingsRef.current = merged;
|
|
131
134
|
setNoisePart(merged);
|
|
135
|
+
reportAppliedNoiseSettings(merged);
|
|
136
|
+
// override 는 병합이 끝난 **뒤에** 덮는다 — 로드가 늦게 와도 override 가 이긴다.
|
|
137
|
+
const override = noiseOverrideRef.current;
|
|
138
|
+
if (override) {
|
|
139
|
+
const patch = typeof override === 'function' ? override(merged) : override;
|
|
140
|
+
const applied = { ...merged, ...patch };
|
|
141
|
+
noiseSettingsRef.current = applied;
|
|
142
|
+
setNoisePart(applied);
|
|
143
|
+
reportAppliedNoiseSettings(applied);
|
|
144
|
+
}
|
|
132
145
|
});
|
|
133
146
|
return () => { cancelled = true; };
|
|
134
147
|
}, []);
|
|
@@ -146,7 +159,10 @@ function TrainingPagePopupInner(props) {
|
|
|
146
159
|
const merged = { ...noiseSettingsRef.current, ...next };
|
|
147
160
|
noiseSettingsRef.current = merged;
|
|
148
161
|
setNoisePart(merged);
|
|
149
|
-
|
|
162
|
+
// noiseOverride 판은 저장하지 않는다 — 판 중에 바꾼 것도 이 판에만.
|
|
163
|
+
if (!noiseOverrideRef.current)
|
|
164
|
+
saveNoiseSettings(merged);
|
|
165
|
+
reportAppliedNoiseSettings(merged);
|
|
150
166
|
}, []);
|
|
151
167
|
// 문장(메인) 재생 컨트롤 — 툴팁(하단 설정)과 오디오 플레이어가 공유. 계정 설정("훈련" 패널)의
|
|
152
168
|
// 기본값과 동일한 noiseSettings(mainVolume/mainSpeed)에 함께 영속화된다.
|
|
@@ -1,3 +1,8 @@
|
|
|
1
|
+
/** `useTablePaging` 의 셋째 인자. @public */
|
|
2
|
+
export interface TablePagingOptions {
|
|
3
|
+
/** 처음 개수 보기 — `VAP_PAGE_SIZE_OPTIONS` 의 값('10'·'25'·'50'·'100'). 없거나 목록 밖이면 '25'. 마운트 때만 읽는다. */
|
|
4
|
+
initialPageSize?: string;
|
|
5
|
+
}
|
|
1
6
|
/**
|
|
2
7
|
* 표의 쪽넘김 — 개수 보기 · 쪽 · 이번 쪽 줄.
|
|
3
8
|
*
|
|
@@ -11,9 +16,14 @@
|
|
|
11
16
|
* 섞여, 2쪽의 더 이른 날짜가 1쪽으로 올라오지 않는다. 이 훅은 **이미 정렬된 줄**을
|
|
12
17
|
* 받는다 — 차례를 거꾸로 쓰기 어렵게 만든 것이다.
|
|
13
18
|
*
|
|
19
|
+
* 처음 개수는 `opts.initialPageSize` 로 준다(기본 '25'). **마운트 때만 읽는다** — 뒤에
|
|
20
|
+
* 바뀌어도 사용자가 고른 개수를 덮지 않는다. 마운트 뒤 `onChange('10')` 으로 맞추면
|
|
21
|
+
* 25줄이 한 번 그려졌다가 줄어드는 것이 보인다 — 그래서 처음 값으로 받는다.
|
|
22
|
+
* 옵션 목록에 없는 값이면 '25' 로 — 드롭다운이 빈 칸을 보이지 않게.
|
|
23
|
+
*
|
|
14
24
|
* @public
|
|
15
25
|
*/
|
|
16
|
-
export declare function useTablePaging<T>(rows: readonly T[], resetOn?: unknown): {
|
|
26
|
+
export declare function useTablePaging<T>(rows: readonly T[], resetOn?: unknown, opts?: TablePagingOptions): {
|
|
17
27
|
pageRows: T[];
|
|
18
28
|
/** Toolbar 의 pageSize 자리에 그대로 넣는다 */
|
|
19
29
|
pageSizeProps: {
|
|
@@ -15,11 +15,19 @@ import { VAP_PAGE_SIZE_OPTIONS } from './useVisitAllPanel';
|
|
|
15
15
|
* 섞여, 2쪽의 더 이른 날짜가 1쪽으로 올라오지 않는다. 이 훅은 **이미 정렬된 줄**을
|
|
16
16
|
* 받는다 — 차례를 거꾸로 쓰기 어렵게 만든 것이다.
|
|
17
17
|
*
|
|
18
|
+
* 처음 개수는 `opts.initialPageSize` 로 준다(기본 '25'). **마운트 때만 읽는다** — 뒤에
|
|
19
|
+
* 바뀌어도 사용자가 고른 개수를 덮지 않는다. 마운트 뒤 `onChange('10')` 으로 맞추면
|
|
20
|
+
* 25줄이 한 번 그려졌다가 줄어드는 것이 보인다 — 그래서 처음 값으로 받는다.
|
|
21
|
+
* 옵션 목록에 없는 값이면 '25' 로 — 드롭다운이 빈 칸을 보이지 않게.
|
|
22
|
+
*
|
|
18
23
|
* @public
|
|
19
24
|
*/
|
|
20
|
-
export function useTablePaging(rows, resetOn) {
|
|
25
|
+
export function useTablePaging(rows, resetOn, opts) {
|
|
21
26
|
const { t } = useTranslation();
|
|
22
|
-
const [pageSize, setPageSizeRaw] = useState(
|
|
27
|
+
const [pageSize, setPageSizeRaw] = useState(() => {
|
|
28
|
+
const 처음 = opts?.initialPageSize;
|
|
29
|
+
return 처음 && VAP_PAGE_SIZE_OPTIONS.some(o => o.value === 처음) ? 처음 : '25';
|
|
30
|
+
});
|
|
23
31
|
const [page, setPage] = useState(1);
|
|
24
32
|
/* 늘어놓는 차례가 바뀌면 첫 쪽으로 — 3쪽을 보던 중에 정렬하면 무엇이 위로 왔는지
|
|
25
33
|
못 본다. 렌더 중에 되돌린다(저장소의 다른 곳들과 같은 꼴: 값이 바뀐 그 렌더에서
|
|
@@ -13,6 +13,15 @@ export interface NoiseSettingsStore {
|
|
|
13
13
|
load: () => Promise<Partial<CoreNoiseSettings> | null>;
|
|
14
14
|
/** 현재 훈련 대상의 소음설정을 저장(fire-and-forget). */
|
|
15
15
|
save: (settings: CoreNoiseSettings) => Promise<void> | void;
|
|
16
|
+
/**
|
|
17
|
+
* **판에 실제로 걸린 설정**이 정해지거나 바뀔 때마다 부른다 — 저장 병합 직후,
|
|
18
|
+
* `noiseOverride` 적용 직후, 판 중 변경마다. 선택.
|
|
19
|
+
*
|
|
20
|
+
* `save` 와 따로 두는 까닭: `noiseOverride` 가 걸린 판은 저장을 건너뛴다. 앱이 결과마다
|
|
21
|
+
* 그 판의 소음 조건을 함께 기록한다면 `save` 로는 그 값을 못 받는다 — 저장값으로
|
|
22
|
+
* 기록해 조건이 틀리게 남는다. 이 콜백은 저장 여부와 무관하게 늘 걸린 값을 준다.
|
|
23
|
+
*/
|
|
24
|
+
applied?: (settings: CoreNoiseSettings) => void;
|
|
16
25
|
}
|
|
17
26
|
/** @public */
|
|
18
27
|
export declare function configureNoiseSettingsStore(store: NoiseSettingsStore | null): void;
|
|
@@ -20,3 +29,8 @@ export declare function configureNoiseSettingsStore(store: NoiseSettingsStore |
|
|
|
20
29
|
export declare function loadNoiseSettings(): Promise<Partial<CoreNoiseSettings> | null>;
|
|
21
30
|
/** @public 소음설정 저장(fire-and-forget). */
|
|
22
31
|
export declare function saveNoiseSettings(settings: CoreNoiseSettings): void;
|
|
32
|
+
/**
|
|
33
|
+
* @public 판에 걸린 소음설정을 앱에 알린다(`NoiseSettingsStore.applied`). 없으면 아무 일도 안 한다.
|
|
34
|
+
* 알림이 실패해도 훈련은 이어진다 — `saveNoiseSettings` 와 같은 결로 삼킨다.
|
|
35
|
+
*/
|
|
36
|
+
export declare function reportAppliedNoiseSettings(settings: CoreNoiseSettings): void;
|
|
@@ -34,3 +34,16 @@ export function saveNoiseSettings(settings) {
|
|
|
34
34
|
warn(e);
|
|
35
35
|
}
|
|
36
36
|
}
|
|
37
|
+
/**
|
|
38
|
+
* @public 판에 걸린 소음설정을 앱에 알린다(`NoiseSettingsStore.applied`). 없으면 아무 일도 안 한다.
|
|
39
|
+
* 알림이 실패해도 훈련은 이어진다 — `saveNoiseSettings` 와 같은 결로 삼킨다.
|
|
40
|
+
*/
|
|
41
|
+
export function reportAppliedNoiseSettings(settings) {
|
|
42
|
+
try {
|
|
43
|
+
g.__ihabNoiseSettingsStore?.applied?.(settings);
|
|
44
|
+
}
|
|
45
|
+
catch (e) {
|
|
46
|
+
if (import.meta.env?.DEV)
|
|
47
|
+
console.warn('[noiseSettingsStore] applied', e);
|
|
48
|
+
}
|
|
49
|
+
}
|
|
@@ -29,7 +29,7 @@ export type { TrainingItemResult } from './utils/trainingItemResults';
|
|
|
29
29
|
export type { TrainingTimeLogEntry, CrosswordLogEntry, TrainingCompletionEntry } from './utils/trainingLogger';
|
|
30
30
|
export { setGameScoreSubmitter, setGameRanksLoader, setGameLeaderboardLoader, submitGameScore, loadMyGameRanks, loadGameLeaderboard } from './utils/gameScoreLogger';
|
|
31
31
|
export type { LeaderboardRow } from './utils/gameScoreLogger';
|
|
32
|
-
export { configureNoiseSettingsStore, loadNoiseSettings, saveNoiseSettings } from './utils/noiseSettingsStore';
|
|
32
|
+
export { configureNoiseSettingsStore, loadNoiseSettings, saveNoiseSettings, reportAppliedNoiseSettings } from './utils/noiseSettingsStore';
|
|
33
33
|
export type { NoiseSettingsStore } from './utils/noiseSettingsStore';
|
|
34
34
|
export type { TTSConfig } from './utils/ttsConfig';
|
|
35
35
|
export { createTTSUrlResolver } from './utils/ttsResolver';
|
|
@@ -21,7 +21,7 @@ export { setTrainingTimeLogger, logTrainingTime, setCrosswordLogger, logCrosswor
|
|
|
21
21
|
/* 문항별 결과 — 앱(useCoreLoggers)이 이걸 서버에 남긴다. 배럴에 없으면 코어 밖에서 못 쓴다 */
|
|
22
22
|
export { toItemResults, wrongItems, itemCorrectness } from './utils/trainingItemResults';
|
|
23
23
|
export { setGameScoreSubmitter, setGameRanksLoader, setGameLeaderboardLoader, submitGameScore, loadMyGameRanks, loadGameLeaderboard } from './utils/gameScoreLogger';
|
|
24
|
-
export { configureNoiseSettingsStore, loadNoiseSettings, saveNoiseSettings } from './utils/noiseSettingsStore';
|
|
24
|
+
export { configureNoiseSettingsStore, loadNoiseSettings, saveNoiseSettings, reportAppliedNoiseSettings } from './utils/noiseSettingsStore';
|
|
25
25
|
export { createTTSUrlResolver } from './utils/ttsResolver';
|
|
26
26
|
export { toStorageName, toBase64UrlSafe, officialSoundPath } from './utils/encoding';
|
|
27
27
|
export { copyText } from './utils/clipboard';
|