@tipp/ui 2.10.0 → 2.10.2
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/app/index.js +8 -8
- package/dist/app/platform/edit-coaching-time.js +8 -8
- package/dist/app/platform/edit-service-type.js +8 -8
- package/dist/app/platform/goal-manage-card-edit.js +8 -8
- package/dist/app/platform/on-offline-radio-card.js +8 -8
- package/dist/app/platform/reservation-card.js +8 -8
- package/dist/app/platform/session-card.js +8 -8
- package/dist/app/roleplay/index.cjs +362 -428
- package/dist/app/roleplay/index.cjs.map +1 -1
- package/dist/app/roleplay/index.js +19 -18
- package/dist/app/roleplay/parts/content.cjs +281 -290
- package/dist/app/roleplay/parts/content.cjs.map +1 -1
- package/dist/app/roleplay/parts/content.js +15 -14
- package/dist/app/roleplay/parts/header.cjs +1 -1
- package/dist/app/roleplay/parts/header.cjs.map +1 -1
- package/dist/app/roleplay/parts/header.js +1 -1
- package/dist/app/roleplay/parts/score-summary.cjs +32 -46
- package/dist/app/roleplay/parts/score-summary.cjs.map +1 -1
- package/dist/app/roleplay/parts/score-summary.js +2 -1
- package/dist/app/roleplay/parts/score-trend-section.cjs +16 -15
- package/dist/app/roleplay/parts/score-trend-section.cjs.map +1 -1
- package/dist/app/roleplay/parts/score-trend-section.js +9 -10
- package/dist/app/roleplay/parts/script-transcript.cjs +29 -37
- package/dist/app/roleplay/parts/script-transcript.cjs.map +1 -1
- package/dist/app/roleplay/parts/script-transcript.js +2 -1
- package/dist/app/roleplay/parts/section-nav.cjs +3 -2
- package/dist/app/roleplay/parts/section-nav.cjs.map +1 -1
- package/dist/app/roleplay/parts/section-nav.js +1 -1
- package/dist/app/roleplay/parts/session-replay-dialog.cjs +39 -47
- package/dist/app/roleplay/parts/session-replay-dialog.cjs.map +1 -1
- package/dist/app/roleplay/parts/session-replay-dialog.js +3 -2
- package/dist/app/roleplay/parts/speech-share-bar.cjs +2171 -0
- package/dist/app/roleplay/parts/speech-share-bar.cjs.map +1 -0
- package/dist/app/roleplay/parts/speech-share-bar.d.cts +9 -0
- package/dist/app/roleplay/parts/speech-share-bar.d.ts +9 -0
- package/dist/app/roleplay/parts/speech-share-bar.js +96 -0
- package/dist/app/roleplay/parts/speech-share-bar.js.map +1 -0
- package/dist/app/roleplay/parts/step-summary.cjs +2 -2
- package/dist/app/roleplay/parts/step-summary.cjs.map +1 -1
- package/dist/app/roleplay/parts/step-summary.js +1 -1
- package/dist/app/roleplay/rp-session-detail.cjs +362 -428
- package/dist/app/roleplay/rp-session-detail.cjs.map +1 -1
- package/dist/app/roleplay/rp-session-detail.js +19 -18
- package/dist/{chunk-6YIKOYBQ.js → chunk-2XDAK4B7.js} +5 -73
- package/dist/chunk-2XDAK4B7.js.map +1 -0
- package/dist/{chunk-U2EAXN3Y.js → chunk-A32HLL53.js} +4 -4
- package/dist/{chunk-3UGBMKSQ.js → chunk-AS3JVRQ3.js} +2 -2
- package/dist/{chunk-NKW6BO5R.js → chunk-DIISQDYA.js} +4 -3
- package/dist/chunk-DIISQDYA.js.map +1 -0
- package/dist/{chunk-N242VJOP.js → chunk-IIZ7I7NS.js} +5 -5
- package/dist/{chunk-2TOASXPK.js → chunk-MD64AUR6.js} +8 -8
- package/dist/chunk-MD64AUR6.js.map +1 -0
- package/dist/{chunk-LRNO4W2P.js → chunk-NSDVLCCW.js} +5 -5
- package/dist/{chunk-EHDUKUML.js → chunk-RNGEVYY5.js} +12 -72
- package/dist/chunk-RNGEVYY5.js.map +1 -0
- package/dist/{chunk-XM4GWPXC.js → chunk-RZW6FVML.js} +18 -12
- package/dist/chunk-RZW6FVML.js.map +1 -0
- package/dist/{chunk-T7LKMJVA.js → chunk-SZAU7YP3.js} +4 -4
- package/dist/{chunk-O332K3SW.js → chunk-UK3LP7VH.js} +2 -2
- package/dist/{chunk-QMAINJ4G.js → chunk-VM2PEQLQ.js} +2 -2
- package/dist/chunk-VM2PEQLQ.js.map +1 -0
- package/dist/chunk-W72CR2TG.js +71 -0
- package/dist/chunk-W72CR2TG.js.map +1 -0
- package/dist/{chunk-EBFQFOUQ.js → chunk-WVY3C64M.js} +3 -3
- package/dist/chunk-WVY3C64M.js.map +1 -0
- package/dist/{chunk-SOKGYD5B.js → chunk-YFR3HXSV.js} +2 -2
- package/dist/index.js +8 -8
- package/dist/molecules/curriculumV2/CurriculumContents/CurriculumReviewSteps/ReviewQuestion/index.js +3 -3
- package/dist/molecules/curriculumV2/CurriculumContents/CurriculumReviewSteps/ReviewQuestion/review-question-body.js +2 -2
- package/dist/molecules/curriculumV2/CurriculumContents/CurriculumReviewSteps/index.js +5 -5
- package/dist/molecules/curriculumV2/CurriculumContents/curriculum-review.js +6 -6
- package/dist/molecules/curriculumV2/CurriculumContents/index.js +8 -8
- package/dist/molecules/curriculumV2/index.js +8 -8
- package/dist/molecules/index.js +8 -8
- package/package.json +1 -1
- package/src/app/roleplay/parts/content.tsx +3 -3
- package/src/app/roleplay/parts/header.tsx +1 -1
- package/src/app/roleplay/parts/score-summary.tsx +4 -57
- package/src/app/roleplay/parts/score-trend-section.tsx +19 -9
- package/src/app/roleplay/parts/script-transcript.tsx +9 -64
- package/src/app/roleplay/parts/section-nav.tsx +3 -2
- package/src/app/roleplay/parts/speech-share-bar.tsx +54 -0
- package/src/app/roleplay/parts/step-summary.tsx +2 -4
- package/dist/chunk-2TOASXPK.js.map +0 -1
- package/dist/chunk-6YIKOYBQ.js.map +0 -1
- package/dist/chunk-EBFQFOUQ.js.map +0 -1
- package/dist/chunk-EHDUKUML.js.map +0 -1
- package/dist/chunk-NKW6BO5R.js.map +0 -1
- package/dist/chunk-QMAINJ4G.js.map +0 -1
- package/dist/chunk-XM4GWPXC.js.map +0 -1
- /package/dist/{chunk-U2EAXN3Y.js.map → chunk-A32HLL53.js.map} +0 -0
- /package/dist/{chunk-3UGBMKSQ.js.map → chunk-AS3JVRQ3.js.map} +0 -0
- /package/dist/{chunk-N242VJOP.js.map → chunk-IIZ7I7NS.js.map} +0 -0
- /package/dist/{chunk-LRNO4W2P.js.map → chunk-NSDVLCCW.js.map} +0 -0
- /package/dist/{chunk-T7LKMJVA.js.map → chunk-SZAU7YP3.js.map} +0 -0
- /package/dist/{chunk-O332K3SW.js.map → chunk-UK3LP7VH.js.map} +0 -0
- /package/dist/{chunk-SOKGYD5B.js.map → chunk-YFR3HXSV.js.map} +0 -0
|
@@ -2289,9 +2289,11 @@ function computeSpeechShare(lines) {
|
|
|
2289
2289
|
return { userPct, partnerPct: 100 - userPct };
|
|
2290
2290
|
}
|
|
2291
2291
|
|
|
2292
|
-
// src/app/roleplay/parts/
|
|
2292
|
+
// src/app/roleplay/parts/speech-share-bar.tsx
|
|
2293
2293
|
var import_jsx_runtime61 = require("react/jsx-runtime");
|
|
2294
|
-
function SpeechShareBar({
|
|
2294
|
+
function SpeechShareBar({
|
|
2295
|
+
share
|
|
2296
|
+
}) {
|
|
2295
2297
|
const isOvertalking = share.userPct > SPEECH_OVERTALK_THRESHOLD;
|
|
2296
2298
|
return /* @__PURE__ */ (0, import_jsx_runtime61.jsxs)(import_themes7.Box, { children: [
|
|
2297
2299
|
/* @__PURE__ */ (0, import_jsx_runtime61.jsxs)(import_themes23.Flex, { align: "center", justify: "between", mb: "1", children: [
|
|
@@ -2300,10 +2302,9 @@ function SpeechShareBar({ share }) {
|
|
|
2300
2302
|
{
|
|
2301
2303
|
as: "span",
|
|
2302
2304
|
style: {
|
|
2303
|
-
fontSize: "0.75rem",
|
|
2304
2305
|
color: isOvertalking ? "var(--red-11)" : "var(--accent-11)"
|
|
2305
2306
|
},
|
|
2306
|
-
variant: "
|
|
2307
|
+
variant: "caption",
|
|
2307
2308
|
weight: "medium",
|
|
2308
2309
|
children: [
|
|
2309
2310
|
"\uB0B4 \uBC1C\uD654\uB7C9 ",
|
|
@@ -2312,7 +2313,7 @@ function SpeechShareBar({ share }) {
|
|
|
2312
2313
|
]
|
|
2313
2314
|
}
|
|
2314
2315
|
),
|
|
2315
|
-
/* @__PURE__ */ (0, import_jsx_runtime61.jsxs)(Typo, { as: "span", color: "gray",
|
|
2316
|
+
/* @__PURE__ */ (0, import_jsx_runtime61.jsxs)(Typo, { as: "span", color: "gray", variant: "caption", children: [
|
|
2316
2317
|
"\uC0C1\uB300 ",
|
|
2317
2318
|
share.partnerPct,
|
|
2318
2319
|
"%"
|
|
@@ -2338,18 +2339,12 @@ function SpeechShareBar({ share }) {
|
|
|
2338
2339
|
)
|
|
2339
2340
|
}
|
|
2340
2341
|
),
|
|
2341
|
-
isOvertalking ? /* @__PURE__ */ (0, import_jsx_runtime61.jsx)(
|
|
2342
|
-
Typo,
|
|
2343
|
-
{
|
|
2344
|
-
as: "p",
|
|
2345
|
-
mt: "1",
|
|
2346
|
-
style: { fontSize: "0.75rem", color: "var(--red-11)" },
|
|
2347
|
-
variant: "body",
|
|
2348
|
-
children: "\uC0C1\uB300\uC758 \uB9D0\uC744 \uB354 \uB4E3\uACE0 \uC9C8\uBB38\xB7\uACBD\uCCAD\uC758 \uBE44\uC911\uC744 \uB192\uC5EC \uBCF4\uC138\uC694"
|
|
2349
|
-
}
|
|
2350
|
-
) : null
|
|
2342
|
+
isOvertalking ? /* @__PURE__ */ (0, import_jsx_runtime61.jsx)(Typo, { as: "p", color: "red", mt: "1", variant: "caption", children: "\uC0C1\uB300\uC758 \uB9D0\uC744 \uB354 \uB4E3\uACE0 \uC9C8\uBB38\xB7\uACBD\uCCAD\uC758 \uBE44\uC911\uC744 \uB192\uC5EC \uBCF4\uC138\uC694" }) : null
|
|
2351
2343
|
] });
|
|
2352
2344
|
}
|
|
2345
|
+
|
|
2346
|
+
// src/app/roleplay/parts/script-transcript.tsx
|
|
2347
|
+
var import_jsx_runtime62 = require("react/jsx-runtime");
|
|
2353
2348
|
function ScriptTranscript({
|
|
2354
2349
|
lines,
|
|
2355
2350
|
partnerName,
|
|
@@ -2359,31 +2354,30 @@ function ScriptTranscript({
|
|
|
2359
2354
|
onSeek
|
|
2360
2355
|
}) {
|
|
2361
2356
|
const activeIndex = canSync ? lines.reduce((acc, line, i) => line.startMs <= currentMs ? i : acc, -1) : -1;
|
|
2362
|
-
return /* @__PURE__ */ (0,
|
|
2363
|
-
/* @__PURE__ */ (0,
|
|
2364
|
-
/* @__PURE__ */ (0,
|
|
2365
|
-
/* @__PURE__ */ (0,
|
|
2366
|
-
/* @__PURE__ */ (0,
|
|
2357
|
+
return /* @__PURE__ */ (0, import_jsx_runtime62.jsxs)(import_themes23.Flex, { direction: "column", gap: "2", style: { minWidth: 0 }, children: [
|
|
2358
|
+
/* @__PURE__ */ (0, import_jsx_runtime62.jsxs)(import_themes7.Box, { children: [
|
|
2359
|
+
/* @__PURE__ */ (0, import_jsx_runtime62.jsxs)(import_themes23.Flex, { align: "center", gap: "2", justify: "between", children: [
|
|
2360
|
+
/* @__PURE__ */ (0, import_jsx_runtime62.jsx)(Typo, { as: "span", variant: "body", weight: "bold", children: "\uB300\uD654 \uC2A4\uD06C\uB9BD\uD2B8" }),
|
|
2361
|
+
/* @__PURE__ */ (0, import_jsx_runtime62.jsx)(
|
|
2367
2362
|
Typo,
|
|
2368
2363
|
{
|
|
2369
2364
|
as: "span",
|
|
2370
2365
|
color: "gray",
|
|
2371
|
-
|
|
2372
|
-
|
|
2373
|
-
children: canSync ? "\uC7AC\uC0DD \uC704\uCE58\uC5D0 \uB9DE\uCDB0 \uD45C\uC2DC" : "\uD0C0\uC784\uB77C\uC778 \uBE44\uB3D9\uAE30"
|
|
2366
|
+
variant: "caption",
|
|
2367
|
+
children: canSync ? "" : "\uD0C0\uC784\uB77C\uC778 \uAE30\uB2A5 \uC0AC\uC6A9 \uBD88\uAC00"
|
|
2374
2368
|
}
|
|
2375
2369
|
)
|
|
2376
2370
|
] }),
|
|
2377
|
-
partnerName ? /* @__PURE__ */ (0,
|
|
2371
|
+
partnerName ? /* @__PURE__ */ (0, import_jsx_runtime62.jsxs)(Typo, { as: "p", color: "gray", mt: "1", variant: "body", children: [
|
|
2378
2372
|
"\uC0C1\uB300 \xB7 ",
|
|
2379
2373
|
partnerName
|
|
2380
2374
|
] }) : null,
|
|
2381
|
-
speechShare ? /* @__PURE__ */ (0,
|
|
2375
|
+
speechShare ? /* @__PURE__ */ (0, import_jsx_runtime62.jsx)(import_themes7.Box, { mt: "2", children: /* @__PURE__ */ (0, import_jsx_runtime62.jsx)(SpeechShareBar, { share: speechShare }) }) : null
|
|
2382
2376
|
] }),
|
|
2383
|
-
lines.length === 0 ? /* @__PURE__ */ (0,
|
|
2377
|
+
lines.length === 0 ? /* @__PURE__ */ (0, import_jsx_runtime62.jsx)(Typo, { as: "p", color: "gray", variant: "body", children: "\uB300\uD654 \uC2A4\uD06C\uB9BD\uD2B8\uAC00 \uC5C6\uC2B5\uB2C8\uB2E4." }) : /* @__PURE__ */ (0, import_jsx_runtime62.jsx)(import_themes7.Box, { style: { maxHeight: 440, overflowY: "auto" }, children: /* @__PURE__ */ (0, import_jsx_runtime62.jsx)(import_themes23.Flex, { direction: "column", gap: "1", children: lines.map((line, i) => {
|
|
2384
2378
|
const isUser = line.speaker === "user";
|
|
2385
2379
|
const isActive = i === activeIndex;
|
|
2386
|
-
return /* @__PURE__ */ (0,
|
|
2380
|
+
return /* @__PURE__ */ (0, import_jsx_runtime62.jsxs)(
|
|
2387
2381
|
import_themes23.Flex,
|
|
2388
2382
|
{
|
|
2389
2383
|
align: "start",
|
|
@@ -2399,47 +2393,45 @@ function ScriptTranscript({
|
|
|
2399
2393
|
background: isActive ? "var(--accent-a3)" : "transparent"
|
|
2400
2394
|
},
|
|
2401
2395
|
children: [
|
|
2402
|
-
canSync ? /* @__PURE__ */ (0,
|
|
2396
|
+
canSync ? /* @__PURE__ */ (0, import_jsx_runtime62.jsx)(
|
|
2403
2397
|
Typo,
|
|
2404
2398
|
{
|
|
2405
2399
|
as: "span",
|
|
2406
2400
|
mono: true,
|
|
2407
2401
|
style: {
|
|
2408
2402
|
color: isActive ? "var(--accent-11)" : "var(--gray-9)",
|
|
2409
|
-
fontSize: "0.75rem",
|
|
2410
2403
|
flexShrink: 0,
|
|
2411
2404
|
minWidth: 32,
|
|
2412
2405
|
lineHeight: "1.7"
|
|
2413
2406
|
},
|
|
2414
|
-
variant: "
|
|
2407
|
+
variant: "caption",
|
|
2415
2408
|
children: formatTimestamp(line.startMs)
|
|
2416
2409
|
}
|
|
2417
2410
|
) : null,
|
|
2418
|
-
/* @__PURE__ */ (0,
|
|
2411
|
+
/* @__PURE__ */ (0, import_jsx_runtime62.jsx)(
|
|
2419
2412
|
Typo,
|
|
2420
2413
|
{
|
|
2421
2414
|
as: "span",
|
|
2422
2415
|
style: {
|
|
2423
2416
|
color: isUser ? "var(--accent-11)" : "var(--gray-11)",
|
|
2424
|
-
fontSize: "0.8125rem",
|
|
2425
2417
|
flexShrink: 0,
|
|
2426
2418
|
minWidth: 28,
|
|
2427
2419
|
lineHeight: "1.7",
|
|
2428
|
-
fontWeight: 700,
|
|
2429
2420
|
whiteSpace: "nowrap"
|
|
2430
2421
|
},
|
|
2431
2422
|
variant: "body",
|
|
2423
|
+
weight: "bold",
|
|
2432
2424
|
children: isUser ? "\uB098" : "\uC0C1\uB300"
|
|
2433
2425
|
}
|
|
2434
2426
|
),
|
|
2435
|
-
/* @__PURE__ */ (0,
|
|
2427
|
+
/* @__PURE__ */ (0, import_jsx_runtime62.jsx)(
|
|
2436
2428
|
Typo,
|
|
2437
2429
|
{
|
|
2438
2430
|
as: "span",
|
|
2431
|
+
color: "gray",
|
|
2432
|
+
highContrast: isActive,
|
|
2439
2433
|
style: {
|
|
2440
|
-
|
|
2441
|
-
lineHeight: "1.7",
|
|
2442
|
-
color: isActive ? "var(--gray-12)" : "var(--gray-11)"
|
|
2434
|
+
lineHeight: "1.7"
|
|
2443
2435
|
},
|
|
2444
2436
|
variant: "body",
|
|
2445
2437
|
weight: isActive ? "medium" : void 0,
|
|
@@ -2455,7 +2447,7 @@ function ScriptTranscript({
|
|
|
2455
2447
|
}
|
|
2456
2448
|
|
|
2457
2449
|
// src/app/roleplay/parts/session-replay-dialog.tsx
|
|
2458
|
-
var
|
|
2450
|
+
var import_jsx_runtime63 = require("react/jsx-runtime");
|
|
2459
2451
|
function resolveUrl(raw, disp, resolver) {
|
|
2460
2452
|
return __async(this, null, function* () {
|
|
2461
2453
|
if (!raw) return void 0;
|
|
@@ -2515,14 +2507,14 @@ function SessionReplayDialog({
|
|
|
2515
2507
|
setCurrentMs(el.currentTime * 1e3);
|
|
2516
2508
|
}
|
|
2517
2509
|
};
|
|
2518
|
-
return /* @__PURE__ */ (0,
|
|
2510
|
+
return /* @__PURE__ */ (0, import_jsx_runtime63.jsx)(Dialog.Root, { onOpenChange, open, children: /* @__PURE__ */ (0, import_jsx_runtime63.jsx)(Dialog.Content, { maxWidth: "1040px", title: "\uC138\uC158 \uB2E4\uC2DC\uBCF4\uAE30", width: "100%", children: /* @__PURE__ */ (0, import_jsx_runtime63.jsxs)(
|
|
2519
2511
|
import_themes24.Grid,
|
|
2520
2512
|
{
|
|
2521
2513
|
columns: { initial: "1", md: "minmax(0, 1fr) minmax(0, 1.05fr)" },
|
|
2522
2514
|
gap: "5",
|
|
2523
2515
|
mt: "2",
|
|
2524
2516
|
children: [
|
|
2525
|
-
/* @__PURE__ */ (0,
|
|
2517
|
+
/* @__PURE__ */ (0, import_jsx_runtime63.jsx)(import_themes7.Box, { children: /* @__PURE__ */ (0, import_jsx_runtime63.jsxs)(
|
|
2526
2518
|
Tabs.Root,
|
|
2527
2519
|
{
|
|
2528
2520
|
onValueChange: (v) => {
|
|
@@ -2530,11 +2522,11 @@ function SessionReplayDialog({
|
|
|
2530
2522
|
},
|
|
2531
2523
|
value: tab,
|
|
2532
2524
|
children: [
|
|
2533
|
-
/* @__PURE__ */ (0,
|
|
2534
|
-
hasVideo ? /* @__PURE__ */ (0,
|
|
2535
|
-
hasAudio ? /* @__PURE__ */ (0,
|
|
2525
|
+
/* @__PURE__ */ (0, import_jsx_runtime63.jsxs)(Tabs.List, { children: [
|
|
2526
|
+
hasVideo ? /* @__PURE__ */ (0, import_jsx_runtime63.jsx)(Tabs.Trigger, { value: "video", children: "\uC601\uC0C1" }) : null,
|
|
2527
|
+
hasAudio ? /* @__PURE__ */ (0, import_jsx_runtime63.jsx)(Tabs.Trigger, { value: "audio", children: "\uC624\uB514\uC624" }) : null
|
|
2536
2528
|
] }),
|
|
2537
|
-
hasVideo ? /* @__PURE__ */ (0,
|
|
2529
|
+
hasVideo ? /* @__PURE__ */ (0, import_jsx_runtime63.jsx)(Tabs.Content, { value: "video", children: /* @__PURE__ */ (0, import_jsx_runtime63.jsx)(
|
|
2538
2530
|
import_themes7.Box,
|
|
2539
2531
|
{
|
|
2540
2532
|
mt: "3",
|
|
@@ -2543,7 +2535,7 @@ function SessionReplayDialog({
|
|
|
2543
2535
|
overflow: "hidden",
|
|
2544
2536
|
background: "var(--gray-3)"
|
|
2545
2537
|
},
|
|
2546
|
-
children: /* @__PURE__ */ (0,
|
|
2538
|
+
children: /* @__PURE__ */ (0, import_jsx_runtime63.jsx)(
|
|
2547
2539
|
"video",
|
|
2548
2540
|
{
|
|
2549
2541
|
controls: true,
|
|
@@ -2559,7 +2551,7 @@ function SessionReplayDialog({
|
|
|
2559
2551
|
)
|
|
2560
2552
|
}
|
|
2561
2553
|
) }) : null,
|
|
2562
|
-
hasAudio ? /* @__PURE__ */ (0,
|
|
2554
|
+
hasAudio ? /* @__PURE__ */ (0, import_jsx_runtime63.jsx)(Tabs.Content, { value: "audio", children: /* @__PURE__ */ (0, import_jsx_runtime63.jsx)(import_themes7.Box, { mt: "3", children: /* @__PURE__ */ (0, import_jsx_runtime63.jsx)(
|
|
2563
2555
|
"audio",
|
|
2564
2556
|
{
|
|
2565
2557
|
controls: true,
|
|
@@ -2576,7 +2568,7 @@ function SessionReplayDialog({
|
|
|
2576
2568
|
]
|
|
2577
2569
|
}
|
|
2578
2570
|
) }),
|
|
2579
|
-
/* @__PURE__ */ (0,
|
|
2571
|
+
/* @__PURE__ */ (0, import_jsx_runtime63.jsx)(
|
|
2580
2572
|
ScriptTranscript,
|
|
2581
2573
|
{
|
|
2582
2574
|
canSync,
|