@adminide-stack/yantra-mobile 12.0.136-alpha.1 → 12.0.136

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.
Files changed (37) hide show
  1. package/lib/compute.js +51 -1
  2. package/lib/compute.js.map +1 -1
  3. package/lib/features/apps/AppsCatalog.js +10 -0
  4. package/lib/features/apps/AppsCatalog.js.map +1 -1
  5. package/lib/features/apps/mobileAppCatalog.js +9 -0
  6. package/lib/features/apps/mobileAppCatalog.js.map +1 -1
  7. package/lib/features/apps/nativeSurfaceTwin.js +1 -0
  8. package/lib/features/apps/nativeSurfaceTwin.js.map +1 -1
  9. package/lib/features/devices/bodyComposition.js +116 -0
  10. package/lib/features/devices/bodyComposition.js.map +1 -0
  11. package/lib/features/devices/readings.js.map +1 -1
  12. package/lib/features/devices/session.js +22 -2
  13. package/lib/features/devices/session.js.map +1 -1
  14. package/lib/features/dictate/DictateExperience.js +387 -0
  15. package/lib/features/dictate/DictateExperience.js.map +1 -0
  16. package/lib/features/dictate/components/DictationList.js +110 -0
  17. package/lib/features/dictate/components/DictationList.js.map +1 -0
  18. package/lib/features/dictate/components/NoteView.js +330 -0
  19. package/lib/features/dictate/components/NoteView.js.map +1 -0
  20. package/lib/features/dictate/components/RecordPanel.js +218 -0
  21. package/lib/features/dictate/components/RecordPanel.js.map +1 -0
  22. package/lib/features/dictate/dictateClient.js +98 -0
  23. package/lib/features/dictate/dictateClient.js.map +1 -0
  24. package/lib/features/dictate/dictateTheme.js +46 -0
  25. package/lib/features/dictate/dictateTheme.js.map +1 -0
  26. package/lib/features/dictate/dictationStore.js +107 -0
  27. package/lib/features/dictate/dictationStore.js.map +1 -0
  28. package/lib/features/dictate/noteText.js +35 -0
  29. package/lib/features/dictate/noteText.js.map +1 -0
  30. package/lib/features/dictate/useDictationRecorder.js +121 -0
  31. package/lib/features/dictate/useDictationRecorder.js.map +1 -0
  32. package/lib/routes.json +50 -0
  33. package/lib/screens/Devices/index.js +205 -3
  34. package/lib/screens/Devices/index.js.map +1 -1
  35. package/lib/screens/DictateNative/index.js +36 -0
  36. package/lib/screens/DictateNative/index.js.map +1 -0
  37. package/package.json +4 -4
@@ -0,0 +1,330 @@
1
+ import {jsx,jsxs}from'react/jsx-runtime';import {useState,useEffect}from'react';import {View,StyleSheet,Text,ScrollView,ActivityIndicator}from'react-native';import {MaterialCommunityIcons}from'@expo/vector-icons';import {Tap,DIM}from'../../inbox/components/Tap.js';import {formatDuration,NOTE_DISCLAIMER}from'../noteText.js';const STAGE_TEXT = {
2
+ uploading: "Uploading the recording\u2026",
3
+ writing: "Transcribing and writing the note\u2026"
4
+ };
5
+ function dictationDate(iso) {
6
+ const d = new Date(iso);
7
+ return Number.isNaN(d.getTime()) ? "" : d.toLocaleString(void 0, {
8
+ month: "short",
9
+ day: "numeric",
10
+ hour: "numeric",
11
+ minute: "2-digit"
12
+ });
13
+ }
14
+ function Section({
15
+ title,
16
+ items,
17
+ theme
18
+ }) {
19
+ if (!items.length) return null;
20
+ return /* @__PURE__ */ jsxs(View, { style: [styles.card, {
21
+ backgroundColor: theme.card,
22
+ borderColor: theme.border
23
+ }], children: [
24
+ /* @__PURE__ */ jsx(Text, { style: [styles.heading, {
25
+ color: theme.muted
26
+ }], children: title }),
27
+ items.map((item, i) => /* @__PURE__ */ jsxs(View, { style: styles.item, children: [
28
+ /* @__PURE__ */ jsx(View, { style: [styles.bullet, {
29
+ backgroundColor: theme.faint
30
+ }] }),
31
+ /* @__PURE__ */ jsx(Text, { style: [styles.itemText, {
32
+ color: theme.ink
33
+ }], children: item })
34
+ ] }, i))
35
+ ] });
36
+ }
37
+ function actionTone(action, theme) {
38
+ if (action === "start") return {
39
+ bg: theme.goodSoft,
40
+ ink: theme.good
41
+ };
42
+ if (action === "change") return {
43
+ bg: theme.accentSoft,
44
+ ink: theme.accent
45
+ };
46
+ if (action === "stop") return {
47
+ bg: theme.recSoft,
48
+ ink: theme.crit
49
+ };
50
+ return {
51
+ bg: theme.chip,
52
+ ink: theme.muted
53
+ };
54
+ }
55
+ function Medications({
56
+ meds,
57
+ theme
58
+ }) {
59
+ if (!meds.length) return null;
60
+ return /* @__PURE__ */ jsxs(View, { style: [styles.card, {
61
+ backgroundColor: theme.card,
62
+ borderColor: theme.border
63
+ }], children: [
64
+ /* @__PURE__ */ jsx(Text, { style: [styles.heading, {
65
+ color: theme.muted
66
+ }], children: "MEDICATIONS" }),
67
+ meds.map((med, i) => {
68
+ const tone = actionTone(med.action, theme);
69
+ const detail = [med.dose, med.route, med.frequency].filter(Boolean).join(" \xB7 ");
70
+ return /* @__PURE__ */ jsxs(View, { style: [styles.med, i > 0 && {
71
+ borderTopColor: theme.border,
72
+ borderTopWidth: StyleSheet.hairlineWidth
73
+ }], children: [
74
+ /* @__PURE__ */ jsxs(View, { style: styles.medText, children: [
75
+ /* @__PURE__ */ jsx(Text, { style: [styles.medName, {
76
+ color: theme.ink
77
+ }], children: med.name }),
78
+ /* @__PURE__ */ jsx(Text, { style: [styles.medDetail, {
79
+ color: detail ? theme.muted : theme.warnInk
80
+ }], children: detail || "No dose or frequency dictated" })
81
+ ] }),
82
+ /* @__PURE__ */ jsx(View, { style: [styles.pill, {
83
+ backgroundColor: tone.bg
84
+ }], children: /* @__PURE__ */ jsx(Text, { style: [styles.pillText, {
85
+ color: tone.ink
86
+ }], children: med.action }) })
87
+ ] }, `${med.name}-${i}`);
88
+ })
89
+ ] });
90
+ }
91
+ function Writing({
92
+ stage,
93
+ theme
94
+ }) {
95
+ const [seconds, setSeconds] = useState(0);
96
+ useEffect(() => {
97
+ const id = setInterval(() => setSeconds((s) => s + 1), 1e3);
98
+ return () => clearInterval(id);
99
+ }, []);
100
+ return /* @__PURE__ */ jsxs(View, { style: styles.center, children: [
101
+ /* @__PURE__ */ jsx(ActivityIndicator, { color: theme.accent }),
102
+ /* @__PURE__ */ jsx(Text, { style: [styles.centerTitle, {
103
+ color: theme.ink
104
+ }], children: STAGE_TEXT[stage] }),
105
+ /* @__PURE__ */ jsxs(Text, { style: [styles.centerDetail, {
106
+ color: theme.faint
107
+ }], children: [
108
+ seconds,
109
+ "s \xB7 usually under a minute"
110
+ ] })
111
+ ] });
112
+ }
113
+ function NoteView({
114
+ record,
115
+ stage,
116
+ theme,
117
+ bottomInset,
118
+ onRetry
119
+ }) {
120
+ var _a;
121
+ const [showTranscript, setShowTranscript] = useState(false);
122
+ const meta = [dictationDate(record.createdAt), formatDuration(record.durationMs)].filter(Boolean).join(" \xB7 ");
123
+ if (record.status === "writing" || record.status === "saved" && stage) {
124
+ return /* @__PURE__ */ jsx(Writing, { stage: stage != null ? stage : "writing", theme });
125
+ }
126
+ if (!record.note) {
127
+ return /* @__PURE__ */ jsxs(View, { style: styles.center, children: [
128
+ /* @__PURE__ */ jsx(MaterialCommunityIcons, { name: "alert-circle-outline", size: 28, color: theme.crit }),
129
+ /* @__PURE__ */ jsx(Text, { style: [styles.centerTitle, {
130
+ color: theme.ink
131
+ }], children: "No note yet" }),
132
+ /* @__PURE__ */ jsx(Text, { style: [styles.centerDetail, {
133
+ color: theme.muted
134
+ }], children: (_a = record.error) != null ? _a : "The recording is saved on this phone." }),
135
+ record.audioUri ? /* @__PURE__ */ jsx(Tap, { onPress: onRetry, accessibilityRole: "button", style: [styles.retry, {
136
+ backgroundColor: theme.accent
137
+ }], pressedStyle: DIM, children: /* @__PURE__ */ jsx(Text, { style: [styles.retryText, {
138
+ color: theme.accentInk
139
+ }], children: "Write the note" }) }) : null
140
+ ] });
141
+ }
142
+ const note = record.note;
143
+ return /* @__PURE__ */ jsxs(ScrollView, { contentContainerStyle: [styles.scroll, {
144
+ paddingBottom: 24 + bottomInset
145
+ }], children: [
146
+ /* @__PURE__ */ jsx(Text, { style: [styles.title, {
147
+ color: theme.ink
148
+ }], children: note.title }),
149
+ /* @__PURE__ */ jsx(Text, { style: [styles.meta, {
150
+ color: theme.faint
151
+ }], children: meta }),
152
+ note.to_verify.length ? /* @__PURE__ */ jsxs(View, { style: [styles.verify, {
153
+ backgroundColor: theme.warnSoft,
154
+ borderColor: theme.warnBorder
155
+ }], children: [
156
+ /* @__PURE__ */ jsxs(View, { style: styles.verifyHead, children: [
157
+ /* @__PURE__ */ jsx(MaterialCommunityIcons, { name: "alert-outline", size: 18, color: theme.warnInk }),
158
+ /* @__PURE__ */ jsx(Text, { style: [styles.verifyTitle, {
159
+ color: theme.warnInk
160
+ }], children: "Check before you use" })
161
+ ] }),
162
+ note.to_verify.map((item, i) => /* @__PURE__ */ jsx(Text, { style: [styles.verifyItem, {
163
+ color: theme.warnInk
164
+ }], children: `\u2022 ${item}` }, i))
165
+ ] }) : null,
166
+ /* @__PURE__ */ jsx(Section, { title: "SUBJECTIVE", items: note.subjective, theme }),
167
+ /* @__PURE__ */ jsx(Section, { title: "OBJECTIVE", items: note.objective, theme }),
168
+ /* @__PURE__ */ jsx(Section, { title: "ASSESSMENT", items: note.assessment, theme }),
169
+ /* @__PURE__ */ jsx(Section, { title: "PLAN", items: note.plan, theme }),
170
+ /* @__PURE__ */ jsx(Medications, { meds: note.medications, theme }),
171
+ note.follow_up ? /* @__PURE__ */ jsx(Section, { title: "FOLLOW-UP", items: [note.follow_up], theme }) : null,
172
+ record.transcript ? /* @__PURE__ */ jsxs(View, { style: [styles.card, {
173
+ backgroundColor: theme.card,
174
+ borderColor: theme.border
175
+ }], children: [
176
+ /* @__PURE__ */ jsxs(Tap, { onPress: () => setShowTranscript((v) => !v), accessibilityRole: "button", style: styles.transcriptToggle, pressedStyle: DIM, children: [
177
+ /* @__PURE__ */ jsx(Text, { style: [styles.heading, styles.headingFlat, {
178
+ color: theme.muted
179
+ }], children: "TRANSCRIPT" }),
180
+ /* @__PURE__ */ jsx(MaterialCommunityIcons, { name: showTranscript ? "chevron-up" : "chevron-down", size: 20, color: theme.muted })
181
+ ] }),
182
+ showTranscript ? /* @__PURE__ */ jsx(Text, { style: [styles.transcript, {
183
+ color: theme.ink
184
+ }], children: record.transcript }) : null
185
+ ] }) : null,
186
+ /* @__PURE__ */ jsx(Text, { style: [styles.disclaimer, {
187
+ color: theme.faint
188
+ }], children: NOTE_DISCLAIMER })
189
+ ] });
190
+ }
191
+ const styles = StyleSheet.create({
192
+ scroll: {
193
+ paddingHorizontal: 16,
194
+ paddingTop: 8
195
+ },
196
+ title: {
197
+ fontSize: 21,
198
+ fontWeight: "700",
199
+ lineHeight: 27
200
+ },
201
+ meta: {
202
+ marginTop: 4,
203
+ fontSize: 13
204
+ },
205
+ verify: {
206
+ marginTop: 16,
207
+ borderRadius: 14,
208
+ borderWidth: StyleSheet.hairlineWidth,
209
+ padding: 14
210
+ },
211
+ verifyHead: {
212
+ flexDirection: "row",
213
+ alignItems: "center",
214
+ gap: 8,
215
+ marginBottom: 6
216
+ },
217
+ verifyTitle: {
218
+ fontSize: 14,
219
+ fontWeight: "700"
220
+ },
221
+ verifyItem: {
222
+ fontSize: 14,
223
+ lineHeight: 20,
224
+ marginTop: 4
225
+ },
226
+ card: {
227
+ marginTop: 12,
228
+ borderRadius: 14,
229
+ borderWidth: StyleSheet.hairlineWidth,
230
+ paddingHorizontal: 14,
231
+ paddingVertical: 12
232
+ },
233
+ heading: {
234
+ fontSize: 12,
235
+ fontWeight: "700",
236
+ letterSpacing: 0.8,
237
+ marginBottom: 6
238
+ },
239
+ headingFlat: {
240
+ marginBottom: 0
241
+ },
242
+ item: {
243
+ flexDirection: "row",
244
+ alignItems: "flex-start",
245
+ marginTop: 6
246
+ },
247
+ bullet: {
248
+ width: 5,
249
+ height: 5,
250
+ borderRadius: 2.5,
251
+ marginTop: 8,
252
+ marginRight: 10
253
+ },
254
+ itemText: {
255
+ flex: 1,
256
+ fontSize: 15,
257
+ lineHeight: 21
258
+ },
259
+ med: {
260
+ flexDirection: "row",
261
+ alignItems: "center",
262
+ paddingVertical: 10
263
+ },
264
+ medText: {
265
+ flex: 1,
266
+ paddingRight: 10
267
+ },
268
+ medName: {
269
+ fontSize: 15,
270
+ fontWeight: "600",
271
+ textTransform: "capitalize"
272
+ },
273
+ medDetail: {
274
+ marginTop: 2,
275
+ fontSize: 13
276
+ },
277
+ pill: {
278
+ paddingHorizontal: 10,
279
+ paddingVertical: 4,
280
+ borderRadius: 999
281
+ },
282
+ pillText: {
283
+ fontSize: 12,
284
+ fontWeight: "600",
285
+ textTransform: "capitalize"
286
+ },
287
+ transcriptToggle: {
288
+ flexDirection: "row",
289
+ alignItems: "center",
290
+ justifyContent: "space-between"
291
+ },
292
+ transcript: {
293
+ marginTop: 10,
294
+ fontSize: 14,
295
+ lineHeight: 21
296
+ },
297
+ disclaimer: {
298
+ marginTop: 18,
299
+ fontSize: 12,
300
+ textAlign: "center"
301
+ },
302
+ center: {
303
+ flex: 1,
304
+ alignItems: "center",
305
+ justifyContent: "center",
306
+ paddingHorizontal: 32
307
+ },
308
+ centerTitle: {
309
+ marginTop: 14,
310
+ fontSize: 16,
311
+ fontWeight: "600",
312
+ textAlign: "center"
313
+ },
314
+ centerDetail: {
315
+ marginTop: 6,
316
+ fontSize: 13,
317
+ lineHeight: 19,
318
+ textAlign: "center"
319
+ },
320
+ retry: {
321
+ marginTop: 18,
322
+ paddingHorizontal: 20,
323
+ paddingVertical: 12,
324
+ borderRadius: 999
325
+ },
326
+ retryText: {
327
+ fontSize: 15,
328
+ fontWeight: "600"
329
+ }
330
+ });export{NoteView,dictationDate};//# sourceMappingURL=NoteView.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"NoteView.js","sources":["../../../../src/features/dictate/components/NoteView.tsx"],"sourcesContent":["/**\n * A dictation's note: what to check first (amber, above everything), the four\n * SOAP sections, the medications with what was dictated for each, follow-up,\n * and the transcript behind a toggle. While the note is being written this\n * shows the stage; when writing failed, why and a Retry that reuses the saved\n * recording.\n */\nimport React, { useEffect, useState } from 'react';\nimport { ActivityIndicator, ScrollView, StyleSheet, Text, View } from 'react-native';\nimport { MaterialCommunityIcons } from '@expo/vector-icons';\nimport { DIM, Tap } from '../../inbox/components/Tap';\nimport { formatDuration, NOTE_DISCLAIMER } from '../noteText';\nimport type { DictateStage } from '../dictateClient';\nimport type { DictateTheme } from '../dictateTheme';\nimport type { DictationRecord, NoteMedication } from '../types';\n\nconst STAGE_TEXT: Record<DictateStage, string> = {\n uploading: 'Uploading the recording…',\n writing: 'Transcribing and writing the note…',\n};\n\nexport function dictationDate(iso: string): string {\n const d = new Date(iso);\n return Number.isNaN(d.getTime())\n ? ''\n : d.toLocaleString(undefined, { month: 'short', day: 'numeric', hour: 'numeric', minute: '2-digit' });\n}\n\nfunction Section({ title, items, theme }: { title: string; items: string[]; theme: DictateTheme }) {\n if (!items.length) return null;\n return (\n <View style={[styles.card, { backgroundColor: theme.card, borderColor: theme.border }]}>\n <Text style={[styles.heading, { color: theme.muted }]}>{title}</Text>\n {items.map((item, i) => (\n <View key={i} style={styles.item}>\n <View style={[styles.bullet, { backgroundColor: theme.faint }]} />\n <Text style={[styles.itemText, { color: theme.ink }]}>{item}</Text>\n </View>\n ))}\n </View>\n );\n}\n\nfunction actionTone(action: NoteMedication['action'], theme: DictateTheme): { bg: string; ink: string } {\n if (action === 'start') return { bg: theme.goodSoft, ink: theme.good };\n if (action === 'change') return { bg: theme.accentSoft, ink: theme.accent };\n if (action === 'stop') return { bg: theme.recSoft, ink: theme.crit };\n return { bg: theme.chip, ink: theme.muted };\n}\n\nfunction Medications({ meds, theme }: { meds: NoteMedication[]; theme: DictateTheme }) {\n if (!meds.length) return null;\n return (\n <View style={[styles.card, { backgroundColor: theme.card, borderColor: theme.border }]}>\n <Text style={[styles.heading, { color: theme.muted }]}>MEDICATIONS</Text>\n {meds.map((med, i) => {\n const tone = actionTone(med.action, theme);\n const detail = [med.dose, med.route, med.frequency].filter(Boolean).join(' · ');\n return (\n <View key={`${med.name}-${i}`} style={[styles.med, i > 0 && { borderTopColor: theme.border, borderTopWidth: StyleSheet.hairlineWidth }]}>\n <View style={styles.medText}>\n <Text style={[styles.medName, { color: theme.ink }]}>{med.name}</Text>\n <Text style={[styles.medDetail, { color: detail ? theme.muted : theme.warnInk }]}>{detail || 'No dose or frequency dictated'}</Text>\n </View>\n <View style={[styles.pill, { backgroundColor: tone.bg }]}>\n <Text style={[styles.pillText, { color: tone.ink }]}>{med.action}</Text>\n </View>\n </View>\n );\n })}\n </View>\n );\n}\n\nfunction Writing({ stage, theme }: { stage: DictateStage; theme: DictateTheme }) {\n const [seconds, setSeconds] = useState(0);\n useEffect(() => {\n const id = setInterval(() => setSeconds((s) => s + 1), 1000);\n return () => clearInterval(id);\n }, []);\n return (\n <View style={styles.center}>\n <ActivityIndicator color={theme.accent} />\n <Text style={[styles.centerTitle, { color: theme.ink }]}>{STAGE_TEXT[stage]}</Text>\n <Text style={[styles.centerDetail, { color: theme.faint }]}>{seconds}s · usually under a minute</Text>\n </View>\n );\n}\n\nexport function NoteView({\n record,\n stage,\n theme,\n bottomInset,\n onRetry,\n}: {\n record: DictationRecord;\n stage: DictateStage | null;\n theme: DictateTheme;\n bottomInset: number;\n onRetry: () => void;\n}) {\n const [showTranscript, setShowTranscript] = useState(false);\n const meta = [dictationDate(record.createdAt), formatDuration(record.durationMs)].filter(Boolean).join(' · ');\n\n if (record.status === 'writing' || (record.status === 'saved' && stage)) {\n return <Writing stage={stage ?? 'writing'} theme={theme} />;\n }\n if (!record.note) {\n return (\n <View style={styles.center}>\n <MaterialCommunityIcons name=\"alert-circle-outline\" size={28} color={theme.crit} />\n <Text style={[styles.centerTitle, { color: theme.ink }]}>No note yet</Text>\n <Text style={[styles.centerDetail, { color: theme.muted }]}>{record.error ?? 'The recording is saved on this phone.'}</Text>\n {record.audioUri ? (\n <Tap onPress={onRetry} accessibilityRole=\"button\" style={[styles.retry, { backgroundColor: theme.accent }]} pressedStyle={DIM}>\n <Text style={[styles.retryText, { color: theme.accentInk }]}>Write the note</Text>\n </Tap>\n ) : null}\n </View>\n );\n }\n\n const note = record.note;\n return (\n <ScrollView contentContainerStyle={[styles.scroll, { paddingBottom: 24 + bottomInset }]}>\n <Text style={[styles.title, { color: theme.ink }]}>{note.title}</Text>\n <Text style={[styles.meta, { color: theme.faint }]}>{meta}</Text>\n\n {note.to_verify.length ? (\n <View style={[styles.verify, { backgroundColor: theme.warnSoft, borderColor: theme.warnBorder }]}>\n <View style={styles.verifyHead}>\n <MaterialCommunityIcons name=\"alert-outline\" size={18} color={theme.warnInk} />\n <Text style={[styles.verifyTitle, { color: theme.warnInk }]}>Check before you use</Text>\n </View>\n {note.to_verify.map((item, i) => (\n <Text key={i} style={[styles.verifyItem, { color: theme.warnInk }]}>\n {`• ${item}`}\n </Text>\n ))}\n </View>\n ) : null}\n\n <Section title=\"SUBJECTIVE\" items={note.subjective} theme={theme} />\n <Section title=\"OBJECTIVE\" items={note.objective} theme={theme} />\n <Section title=\"ASSESSMENT\" items={note.assessment} theme={theme} />\n <Section title=\"PLAN\" items={note.plan} theme={theme} />\n <Medications meds={note.medications} theme={theme} />\n {note.follow_up ? <Section title=\"FOLLOW-UP\" items={[note.follow_up]} theme={theme} /> : null}\n\n {record.transcript ? (\n <View style={[styles.card, { backgroundColor: theme.card, borderColor: theme.border }]}>\n <Tap\n onPress={() => setShowTranscript((v) => !v)}\n accessibilityRole=\"button\"\n style={styles.transcriptToggle}\n pressedStyle={DIM}\n >\n <Text style={[styles.heading, styles.headingFlat, { color: theme.muted }]}>TRANSCRIPT</Text>\n <MaterialCommunityIcons name={showTranscript ? 'chevron-up' : 'chevron-down'} size={20} color={theme.muted} />\n </Tap>\n {showTranscript ? <Text style={[styles.transcript, { color: theme.ink }]}>{record.transcript}</Text> : null}\n </View>\n ) : null}\n\n <Text style={[styles.disclaimer, { color: theme.faint }]}>{NOTE_DISCLAIMER}</Text>\n </ScrollView>\n );\n}\n\nconst styles = StyleSheet.create({\n scroll: { paddingHorizontal: 16, paddingTop: 8 },\n title: { fontSize: 21, fontWeight: '700', lineHeight: 27 },\n meta: { marginTop: 4, fontSize: 13 },\n verify: { marginTop: 16, borderRadius: 14, borderWidth: StyleSheet.hairlineWidth, padding: 14 },\n verifyHead: { flexDirection: 'row', alignItems: 'center', gap: 8, marginBottom: 6 },\n verifyTitle: { fontSize: 14, fontWeight: '700' },\n verifyItem: { fontSize: 14, lineHeight: 20, marginTop: 4 },\n card: { marginTop: 12, borderRadius: 14, borderWidth: StyleSheet.hairlineWidth, paddingHorizontal: 14, paddingVertical: 12 },\n heading: { fontSize: 12, fontWeight: '700', letterSpacing: 0.8, marginBottom: 6 },\n headingFlat: { marginBottom: 0 },\n item: { flexDirection: 'row', alignItems: 'flex-start', marginTop: 6 },\n bullet: { width: 5, height: 5, borderRadius: 2.5, marginTop: 8, marginRight: 10 },\n itemText: { flex: 1, fontSize: 15, lineHeight: 21 },\n med: { flexDirection: 'row', alignItems: 'center', paddingVertical: 10 },\n medText: { flex: 1, paddingRight: 10 },\n medName: { fontSize: 15, fontWeight: '600', textTransform: 'capitalize' },\n medDetail: { marginTop: 2, fontSize: 13 },\n pill: { paddingHorizontal: 10, paddingVertical: 4, borderRadius: 999 },\n pillText: { fontSize: 12, fontWeight: '600', textTransform: 'capitalize' },\n transcriptToggle: { flexDirection: 'row', alignItems: 'center', justifyContent: 'space-between' },\n transcript: { marginTop: 10, fontSize: 14, lineHeight: 21 },\n disclaimer: { marginTop: 18, fontSize: 12, textAlign: 'center' },\n center: { flex: 1, alignItems: 'center', justifyContent: 'center', paddingHorizontal: 32 },\n centerTitle: { marginTop: 14, fontSize: 16, fontWeight: '600', textAlign: 'center' },\n centerDetail: { marginTop: 6, fontSize: 13, lineHeight: 19, textAlign: 'center' },\n retry: { marginTop: 18, paddingHorizontal: 20, paddingVertical: 12, borderRadius: 999 },\n retryText: { fontSize: 15, fontWeight: '600' },\n});\n"],"names":[],"mappings":"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"}
@@ -0,0 +1,218 @@
1
+ import {jsxs,jsx}from'react/jsx-runtime';import {useState,useRef,useEffect}from'react';import {View,StyleSheet,Text,ActivityIndicator}from'react-native';import {MaterialCommunityIcons}from'@expo/vector-icons';import {Tap,DIM}from'../../inbox/components/Tap.js';import {formatDuration}from'../noteText.js';const BARS = 32;
2
+ function LevelBars({
3
+ level,
4
+ active,
5
+ theme
6
+ }) {
7
+ const [history, setHistory] = useState(() => Array(BARS).fill(0));
8
+ const levelRef = useRef(level);
9
+ levelRef.current = level;
10
+ useEffect(() => {
11
+ if (!active) return;
12
+ const id = setInterval(() => setHistory((h) => [...h.slice(1), levelRef.current]), 90);
13
+ return () => clearInterval(id);
14
+ }, [active]);
15
+ return /* @__PURE__ */ jsx(View, { style: styles.bars, accessibilityLabel: "Microphone level", children: history.map((v, i) => /* @__PURE__ */ jsx(View, { style: [styles.bar, {
16
+ height: 6 + Math.round(v * 46),
17
+ backgroundColor: active ? theme.rec : theme.border,
18
+ opacity: active ? 0.35 + 0.65 * (i / BARS) : 1
19
+ }] }, i)) });
20
+ }
21
+ function StartPanel({
22
+ theme,
23
+ starting,
24
+ onStart
25
+ }) {
26
+ return /* @__PURE__ */ jsxs(Tap, { onPress: onStart, disabled: starting, accessibilityRole: "button", accessibilityLabel: "Start dictating", style: styles.start, pressedStyle: DIM, children: [
27
+ /* @__PURE__ */ jsx(View, { style: [styles.micButton, {
28
+ backgroundColor: theme.accent,
29
+ shadowColor: theme.accent
30
+ }], children: starting ? /* @__PURE__ */ jsx(ActivityIndicator, { color: theme.accentInk }) : /* @__PURE__ */ jsx(MaterialCommunityIcons, { name: "microphone", size: 42, color: theme.accentInk }) }),
31
+ /* @__PURE__ */ jsx(Text, { style: [styles.startLabel, {
32
+ color: theme.ink
33
+ }], children: "Start dictating" }),
34
+ /* @__PURE__ */ jsx(Text, { style: [styles.startHint, {
35
+ color: theme.muted
36
+ }], children: "Keep Yantra open while you speak." })
37
+ ] });
38
+ }
39
+ function RecordingPanel({
40
+ theme,
41
+ phase,
42
+ pauseReason,
43
+ elapsedMs,
44
+ level,
45
+ onPause,
46
+ onResume,
47
+ onDone,
48
+ onDiscard
49
+ }) {
50
+ const live = phase === "recording";
51
+ const notice = pauseReason === "background" ? "Paused because Yantra left the screen. Resume to keep dictating." : pauseReason === "limit" ? "An hour is the most one dictation holds. Tap Done to write the note." : null;
52
+ return /* @__PURE__ */ jsxs(View, { style: styles.recording, children: [
53
+ /* @__PURE__ */ jsxs(View, { style: [styles.status, {
54
+ backgroundColor: live ? theme.recSoft : theme.chip
55
+ }], children: [
56
+ /* @__PURE__ */ jsx(View, { style: [styles.dot, {
57
+ backgroundColor: live ? theme.rec : theme.faint
58
+ }] }),
59
+ /* @__PURE__ */ jsx(Text, { style: [styles.statusText, {
60
+ color: live ? theme.rec : theme.muted
61
+ }], children: live ? "Recording" : "Paused" })
62
+ ] }),
63
+ /* @__PURE__ */ jsx(Text, { style: [styles.timer, {
64
+ color: theme.ink
65
+ }], accessibilityLabel: `Elapsed ${formatDuration(elapsedMs)}`, children: formatDuration(elapsedMs) }),
66
+ /* @__PURE__ */ jsx(LevelBars, { level, active: live, theme }),
67
+ notice ? /* @__PURE__ */ jsxs(View, { style: [styles.notice, {
68
+ backgroundColor: theme.warnSoft,
69
+ borderColor: theme.warnBorder
70
+ }], children: [
71
+ /* @__PURE__ */ jsx(MaterialCommunityIcons, { name: "pause-circle-outline", size: 18, color: theme.warnInk }),
72
+ /* @__PURE__ */ jsx(Text, { style: [styles.noticeText, {
73
+ color: theme.warnInk
74
+ }], children: notice })
75
+ ] }) : null,
76
+ /* @__PURE__ */ jsxs(View, { style: styles.controls, children: [
77
+ /* @__PURE__ */ jsx(Tap, { onPress: onDiscard, accessibilityRole: "button", accessibilityLabel: "Discard this dictation", style: [styles.side, {
78
+ backgroundColor: theme.chip
79
+ }], pressedStyle: DIM, children: /* @__PURE__ */ jsx(MaterialCommunityIcons, { name: "trash-can-outline", size: 24, color: theme.muted }) }),
80
+ /* @__PURE__ */ jsx(Tap, { onPress: live ? onPause : onResume, disabled: pauseReason === "limit", accessibilityRole: "button", accessibilityLabel: live ? "Pause" : "Resume", style: [styles.main, {
81
+ backgroundColor: live ? theme.rec : theme.accent,
82
+ opacity: pauseReason === "limit" ? 0.4 : 1
83
+ }], pressedStyle: DIM, children: /* @__PURE__ */ jsx(MaterialCommunityIcons, { name: live ? "pause" : "microphone", size: 34, color: "#ffffff" }) }),
84
+ /* @__PURE__ */ jsx(Tap, { onPress: onDone, disabled: elapsedMs < 1e3, accessibilityRole: "button", accessibilityLabel: "Done, write the note", style: [styles.side, {
85
+ backgroundColor: theme.accentSoft,
86
+ opacity: elapsedMs < 1e3 ? 0.4 : 1
87
+ }], pressedStyle: DIM, children: /* @__PURE__ */ jsx(MaterialCommunityIcons, { name: "check", size: 26, color: theme.accent }) })
88
+ ] }),
89
+ /* @__PURE__ */ jsxs(View, { style: styles.legend, children: [
90
+ /* @__PURE__ */ jsx(Text, { style: [styles.legendText, {
91
+ color: theme.faint
92
+ }], children: "Discard" }),
93
+ /* @__PURE__ */ jsx(Text, { style: [styles.legendText, {
94
+ color: theme.faint
95
+ }], children: live ? "Pause" : "Resume" }),
96
+ /* @__PURE__ */ jsx(Text, { style: [styles.legendText, {
97
+ color: theme.faint
98
+ }], children: "Done" })
99
+ ] })
100
+ ] });
101
+ }
102
+ const styles = StyleSheet.create({
103
+ start: {
104
+ alignItems: "center",
105
+ paddingVertical: 28
106
+ },
107
+ micButton: {
108
+ width: 104,
109
+ height: 104,
110
+ borderRadius: 52,
111
+ alignItems: "center",
112
+ justifyContent: "center",
113
+ shadowOpacity: 0.28,
114
+ shadowRadius: 16,
115
+ shadowOffset: {
116
+ width: 0,
117
+ height: 8
118
+ },
119
+ elevation: 6
120
+ },
121
+ startLabel: {
122
+ marginTop: 18,
123
+ fontSize: 17,
124
+ fontWeight: "600"
125
+ },
126
+ startHint: {
127
+ marginTop: 6,
128
+ fontSize: 13
129
+ },
130
+ recording: {
131
+ alignItems: "center",
132
+ paddingTop: 12,
133
+ paddingBottom: 8
134
+ },
135
+ status: {
136
+ flexDirection: "row",
137
+ alignItems: "center",
138
+ paddingHorizontal: 12,
139
+ paddingVertical: 6,
140
+ borderRadius: 999
141
+ },
142
+ dot: {
143
+ width: 8,
144
+ height: 8,
145
+ borderRadius: 4,
146
+ marginRight: 8
147
+ },
148
+ statusText: {
149
+ fontSize: 13,
150
+ fontWeight: "600"
151
+ },
152
+ timer: {
153
+ marginTop: 18,
154
+ fontSize: 56,
155
+ fontWeight: "300",
156
+ fontVariant: ["tabular-nums"],
157
+ letterSpacing: 1
158
+ },
159
+ bars: {
160
+ marginTop: 18,
161
+ height: 56,
162
+ flexDirection: "row",
163
+ alignItems: "center",
164
+ gap: 3
165
+ },
166
+ bar: {
167
+ width: 4,
168
+ borderRadius: 2
169
+ },
170
+ notice: {
171
+ marginTop: 18,
172
+ marginHorizontal: 8,
173
+ flexDirection: "row",
174
+ alignItems: "center",
175
+ gap: 8,
176
+ paddingHorizontal: 12,
177
+ paddingVertical: 10,
178
+ borderRadius: 12,
179
+ borderWidth: StyleSheet.hairlineWidth
180
+ },
181
+ noticeText: {
182
+ flex: 1,
183
+ fontSize: 13,
184
+ lineHeight: 18
185
+ },
186
+ controls: {
187
+ marginTop: 28,
188
+ flexDirection: "row",
189
+ alignItems: "center",
190
+ justifyContent: "center",
191
+ gap: 36
192
+ },
193
+ side: {
194
+ width: 56,
195
+ height: 56,
196
+ borderRadius: 28,
197
+ alignItems: "center",
198
+ justifyContent: "center"
199
+ },
200
+ main: {
201
+ width: 80,
202
+ height: 80,
203
+ borderRadius: 40,
204
+ alignItems: "center",
205
+ justifyContent: "center"
206
+ },
207
+ legend: {
208
+ marginTop: 8,
209
+ flexDirection: "row",
210
+ justifyContent: "center",
211
+ gap: 36
212
+ },
213
+ legendText: {
214
+ width: 68,
215
+ textAlign: "center",
216
+ fontSize: 12
217
+ }
218
+ });export{RecordingPanel,StartPanel};//# sourceMappingURL=RecordPanel.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"RecordPanel.js","sources":["../../../../src/features/dictate/components/RecordPanel.tsx"],"sourcesContent":["/**\n * The microphone: one large button to start, then a timer, a live level,\n * Pause/Resume, Discard and Done. A pause the app made (it left the screen,\n * or the hour ran out) says why, so no audio goes missing unnoticed.\n */\nimport React, { useEffect, useRef, useState } from 'react';\nimport { ActivityIndicator, StyleSheet, Text, View } from 'react-native';\nimport { MaterialCommunityIcons } from '@expo/vector-icons';\nimport { DIM, Tap } from '../../inbox/components/Tap';\nimport { formatDuration } from '../noteText';\nimport type { DictateTheme } from '../dictateTheme';\nimport type { PauseReason, RecorderPhase } from '../useDictationRecorder';\n\nconst BARS = 32;\n\n/** The last few seconds of level, as bars: the clinician can see the phone hears them. */\nfunction LevelBars({ level, active, theme }: { level: number; active: boolean; theme: DictateTheme }) {\n const [history, setHistory] = useState<number[]>(() => Array(BARS).fill(0));\n const levelRef = useRef(level);\n levelRef.current = level;\n useEffect(() => {\n if (!active) return;\n const id = setInterval(() => setHistory((h) => [...h.slice(1), levelRef.current]), 90);\n return () => clearInterval(id);\n }, [active]);\n return (\n <View style={styles.bars} accessibilityLabel=\"Microphone level\">\n {history.map((v, i) => (\n <View\n key={i}\n style={[\n styles.bar,\n {\n height: 6 + Math.round(v * 46),\n backgroundColor: active ? theme.rec : theme.border,\n opacity: active ? 0.35 + 0.65 * (i / BARS) : 1,\n },\n ]}\n />\n ))}\n </View>\n );\n}\n\nexport function StartPanel({\n theme,\n starting,\n onStart,\n}: {\n theme: DictateTheme;\n starting: boolean;\n onStart: () => void;\n}) {\n // One target for the button and its words: \"Start dictating\" reads like the thing to tap.\n return (\n <Tap\n onPress={onStart}\n disabled={starting}\n accessibilityRole=\"button\"\n accessibilityLabel=\"Start dictating\"\n style={styles.start}\n pressedStyle={DIM}\n >\n <View style={[styles.micButton, { backgroundColor: theme.accent, shadowColor: theme.accent }]}>\n {starting ? (\n <ActivityIndicator color={theme.accentInk} />\n ) : (\n <MaterialCommunityIcons name=\"microphone\" size={42} color={theme.accentInk} />\n )}\n </View>\n <Text style={[styles.startLabel, { color: theme.ink }]}>Start dictating</Text>\n <Text style={[styles.startHint, { color: theme.muted }]}>Keep Yantra open while you speak.</Text>\n </Tap>\n );\n}\n\nexport function RecordingPanel({\n theme,\n phase,\n pauseReason,\n elapsedMs,\n level,\n onPause,\n onResume,\n onDone,\n onDiscard,\n}: {\n theme: DictateTheme;\n phase: Exclude<RecorderPhase, 'idle'>;\n pauseReason: PauseReason;\n elapsedMs: number;\n level: number;\n onPause: () => void;\n onResume: () => void;\n onDone: () => void;\n onDiscard: () => void;\n}) {\n const live = phase === 'recording';\n const notice =\n pauseReason === 'background'\n ? 'Paused because Yantra left the screen. Resume to keep dictating.'\n : pauseReason === 'limit'\n ? 'An hour is the most one dictation holds. Tap Done to write the note.'\n : null;\n return (\n <View style={styles.recording}>\n <View style={[styles.status, { backgroundColor: live ? theme.recSoft : theme.chip }]}>\n <View style={[styles.dot, { backgroundColor: live ? theme.rec : theme.faint }]} />\n <Text style={[styles.statusText, { color: live ? theme.rec : theme.muted }]}>{live ? 'Recording' : 'Paused'}</Text>\n </View>\n <Text style={[styles.timer, { color: theme.ink }]} accessibilityLabel={`Elapsed ${formatDuration(elapsedMs)}`}>\n {formatDuration(elapsedMs)}\n </Text>\n <LevelBars level={level} active={live} theme={theme} />\n {notice ? (\n <View style={[styles.notice, { backgroundColor: theme.warnSoft, borderColor: theme.warnBorder }]}>\n <MaterialCommunityIcons name=\"pause-circle-outline\" size={18} color={theme.warnInk} />\n <Text style={[styles.noticeText, { color: theme.warnInk }]}>{notice}</Text>\n </View>\n ) : null}\n <View style={styles.controls}>\n <Tap\n onPress={onDiscard}\n accessibilityRole=\"button\"\n accessibilityLabel=\"Discard this dictation\"\n style={[styles.side, { backgroundColor: theme.chip }]}\n pressedStyle={DIM}\n >\n <MaterialCommunityIcons name=\"trash-can-outline\" size={24} color={theme.muted} />\n </Tap>\n <Tap\n onPress={live ? onPause : onResume}\n disabled={pauseReason === 'limit'}\n accessibilityRole=\"button\"\n accessibilityLabel={live ? 'Pause' : 'Resume'}\n style={[\n styles.main,\n { backgroundColor: live ? theme.rec : theme.accent, opacity: pauseReason === 'limit' ? 0.4 : 1 },\n ]}\n pressedStyle={DIM}\n >\n <MaterialCommunityIcons name={live ? 'pause' : 'microphone'} size={34} color=\"#ffffff\" />\n </Tap>\n <Tap\n onPress={onDone}\n disabled={elapsedMs < 1000}\n accessibilityRole=\"button\"\n accessibilityLabel=\"Done, write the note\"\n style={[styles.side, { backgroundColor: theme.accentSoft, opacity: elapsedMs < 1000 ? 0.4 : 1 }]}\n pressedStyle={DIM}\n >\n <MaterialCommunityIcons name=\"check\" size={26} color={theme.accent} />\n </Tap>\n </View>\n <View style={styles.legend}>\n <Text style={[styles.legendText, { color: theme.faint }]}>Discard</Text>\n <Text style={[styles.legendText, { color: theme.faint }]}>{live ? 'Pause' : 'Resume'}</Text>\n <Text style={[styles.legendText, { color: theme.faint }]}>Done</Text>\n </View>\n </View>\n );\n}\n\nconst styles = StyleSheet.create({\n start: { alignItems: 'center', paddingVertical: 28 },\n micButton: {\n width: 104,\n height: 104,\n borderRadius: 52,\n alignItems: 'center',\n justifyContent: 'center',\n shadowOpacity: 0.28,\n shadowRadius: 16,\n shadowOffset: { width: 0, height: 8 },\n elevation: 6,\n },\n startLabel: { marginTop: 18, fontSize: 17, fontWeight: '600' },\n startHint: { marginTop: 6, fontSize: 13 },\n recording: { alignItems: 'center', paddingTop: 12, paddingBottom: 8 },\n status: { flexDirection: 'row', alignItems: 'center', paddingHorizontal: 12, paddingVertical: 6, borderRadius: 999 },\n dot: { width: 8, height: 8, borderRadius: 4, marginRight: 8 },\n statusText: { fontSize: 13, fontWeight: '600' },\n timer: { marginTop: 18, fontSize: 56, fontWeight: '300', fontVariant: ['tabular-nums'], letterSpacing: 1 },\n bars: { marginTop: 18, height: 56, flexDirection: 'row', alignItems: 'center', gap: 3 },\n bar: { width: 4, borderRadius: 2 },\n notice: {\n marginTop: 18,\n marginHorizontal: 8,\n flexDirection: 'row',\n alignItems: 'center',\n gap: 8,\n paddingHorizontal: 12,\n paddingVertical: 10,\n borderRadius: 12,\n borderWidth: StyleSheet.hairlineWidth,\n },\n noticeText: { flex: 1, fontSize: 13, lineHeight: 18 },\n controls: { marginTop: 28, flexDirection: 'row', alignItems: 'center', justifyContent: 'center', gap: 36 },\n side: { width: 56, height: 56, borderRadius: 28, alignItems: 'center', justifyContent: 'center' },\n main: { width: 80, height: 80, borderRadius: 40, alignItems: 'center', justifyContent: 'center' },\n legend: { marginTop: 8, flexDirection: 'row', justifyContent: 'center', gap: 36 },\n legendText: { width: 68, textAlign: 'center', fontSize: 12 },\n});\n"],"names":[],"mappings":"iTAYA,MAAM,IAAO,GAAA,EAAA;AAGb,SAAS,SAAU,CAAA;AAAA,EACjB,KAAA;AAAA,EACA,MAAA;AAAA,EACA;AACF,CAIG,EAAA;AACD,EAAM,MAAA,CAAC,OAAS,EAAA,UAAU,CAAI,GAAA,QAAA,CAAmB,MAAM,KAAA,CAAM,IAAI,CAAA,CAAE,IAAK,CAAA,CAAC,CAAC,CAAA;AAC1E,EAAM,MAAA,QAAA,GAAW,OAAO,KAAK,CAAA;AAC7B,EAAA,QAAA,CAAS,OAAU,GAAA,KAAA;AACnB,EAAA,SAAA,CAAU,MAAM;AACd,IAAA,IAAI,CAAC,MAAQ,EAAA;AACb,IAAA,MAAM,EAAK,GAAA,WAAA,CAAY,MAAM,UAAA,CAAW,OAAK,CAAC,GAAG,CAAE,CAAA,KAAA,CAAM,CAAC,CAAG,EAAA,QAAA,CAAS,OAAO,CAAC,GAAG,EAAE,CAAA;AACnF,IAAO,OAAA,MAAM,cAAc,EAAE,CAAA;AAAA,GAC/B,EAAG,CAAC,MAAM,CAAC,CAAA;AACX,EAAA,2BAAQ,IAAK,EAAA,EAAA,KAAA,EAAO,MAAO,CAAA,IAAA,EAAM,oBAAmB,kBACzC,EAAA,QAAA,EAAA,OAAA,CAAQ,GAAI,CAAA,CAAC,GAAG,CAAM,qBAAA,GAAA,CAAC,QAAa,KAAO,EAAA,CAAC,OAAO,GAAK,EAAA;AAAA,IAC/D,MAAQ,EAAA,CAAA,GAAI,IAAK,CAAA,KAAA,CAAM,IAAI,EAAE,CAAA;AAAA,IAC7B,eAAiB,EAAA,MAAA,GAAS,KAAM,CAAA,GAAA,GAAM,KAAM,CAAA,MAAA;AAAA,IAC5C,OAAS,EAAA,MAAA,GAAS,IAAO,GAAA,IAAA,IAAQ,IAAI,IAAQ,CAAA,GAAA;AAAA,GAC9C,CAAA,EAAA,EAJyC,CAItC,CAAE,CACF,EAAA,CAAA;AACR;AACO,SAAS,UAAW,CAAA;AAAA,EACzB,KAAA;AAAA,EACA,QAAA;AAAA,EACA;AACF,CAIG,EAAA;AAED,EAAA,uBAAQ,IAAA,CAAA,GAAA,EAAA,EAAI,OAAS,EAAA,OAAA,EAAS,UAAU,QAAU,EAAA,iBAAA,EAAkB,QAAS,EAAA,kBAAA,EAAmB,iBAAkB,EAAA,KAAA,EAAO,MAAO,CAAA,KAAA,EAAO,cAAc,GAC3I,EAAA,QAAA,EAAA;AAAA,oBAAA,GAAA,CAAC,IAAK,EAAA,EAAA,KAAA,EAAO,CAAC,MAAA,CAAO,SAAW,EAAA;AAAA,MACtC,iBAAiB,KAAM,CAAA,MAAA;AAAA,MACvB,aAAa,KAAM,CAAA;AAAA,KACpB,CACY,EAAA,QAAA,EAAA,QAAA,uBAAY,iBAAkB,EAAA,EAAA,KAAA,EAAO,MAAM,SAAW,EAAA,CAAA,mBAAM,GAAA,CAAA,sBAAA,EAAA,EAAuB,MAAK,YAAa,EAAA,IAAA,EAAM,IAAI,KAAO,EAAA,KAAA,CAAM,WAAW,CAC5I,EAAA,CAAA;AAAA,oBACC,GAAA,CAAA,IAAA,EAAA,EAAK,KAAO,EAAA,CAAC,OAAO,UAAY,EAAA;AAAA,MACvC,OAAO,KAAM,CAAA;AAAA,KACd,GAAG,QAAe,EAAA,iBAAA,EAAA,CAAA;AAAA,oBACV,GAAA,CAAA,IAAA,EAAA,EAAK,KAAO,EAAA,CAAC,OAAO,SAAW,EAAA;AAAA,MACtC,OAAO,KAAM,CAAA;AAAA,KACd,GAAG,QAAiC,EAAA,mCAAA,EAAA;AAAA,GACjC,EAAA,CAAA;AACR;AACO,SAAS,cAAe,CAAA;AAAA,EAC7B,KAAA;AAAA,EACA,KAAA;AAAA,EACA,WAAA;AAAA,EACA,SAAA;AAAA,EACA,KAAA;AAAA,EACA,OAAA;AAAA,EACA,QAAA;AAAA,EACA,MAAA;AAAA,EACA;AACF,CAUG,EAAA;AACD,EAAA,MAAM,OAAO,KAAU,KAAA,WAAA;AACvB,EAAA,MAAM,SAAS,WAAgB,KAAA,YAAA,GAAe,kEAAqE,GAAA,WAAA,KAAgB,UAAU,sEAAyE,GAAA,IAAA;AACtN,EAAA,uBAAQ,IAAA,CAAA,IAAA,EAAA,EAAK,KAAO,EAAA,MAAA,CAAO,SACjB,EAAA,QAAA,EAAA;AAAA,oBAAA,IAAA,CAAC,IAAK,EAAA,EAAA,KAAA,EAAO,CAAC,MAAA,CAAO,MAAQ,EAAA;AAAA,MACnC,eAAiB,EAAA,IAAA,GAAO,KAAM,CAAA,OAAA,GAAU,KAAM,CAAA;AAAA,KAC/C,CACW,EAAA,QAAA,EAAA;AAAA,sBAAA,GAAA,CAAC,IAAK,EAAA,EAAA,KAAA,EAAO,CAAC,MAAA,CAAO,GAAK,EAAA;AAAA,QAClC,eAAiB,EAAA,IAAA,GAAO,KAAM,CAAA,GAAA,GAAM,KAAM,CAAA;AAAA,OAC3C,CAAG,EAAA,CAAA;AAAA,sBACO,GAAA,CAAA,IAAA,EAAA,EAAK,KAAO,EAAA,CAAC,OAAO,UAAY,EAAA;AAAA,QACzC,KAAO,EAAA,IAAA,GAAO,KAAM,CAAA,GAAA,GAAM,KAAM,CAAA;AAAA,OACjC,CAAA,EAAI,QAAO,EAAA,IAAA,GAAA,WAAA,GAAc,QAAS,EAAA;AAAA,KAC7B,EAAA,CAAA;AAAA,oBACC,GAAA,CAAA,IAAA,EAAA,EAAK,KAAO,EAAA,CAAC,OAAO,KAAO,EAAA;AAAA,MAClC,OAAO,KAAM,CAAA;AAAA,KACd,CAAG,EAAA,kBAAA,EAAoB,CAAW,QAAA,EAAA,cAAA,CAAe,SAAS,CAAC,CAAA,CAAA,EAC/C,QAAe,EAAA,cAAA,CAAA,SAAS,CAC7B,EAAA,CAAA;AAAA,oBACC,GAAA,CAAA,SAAA,EAAA,EAAU,KAAc,EAAA,MAAA,EAAQ,MAAM,KAAc,EAAA,CAAA;AAAA,IACpD,yBAAU,IAAA,CAAA,IAAA,EAAA,EAAK,KAAO,EAAA,CAAC,OAAO,MAAQ,EAAA;AAAA,MAC7C,iBAAiB,KAAM,CAAA,QAAA;AAAA,MACvB,aAAa,KAAM,CAAA;AAAA,KACpB,CACe,EAAA,QAAA,EAAA;AAAA,sBAAA,GAAA,CAAC,0BAAuB,IAAK,EAAA,sBAAA,EAAuB,MAAM,EAAI,EAAA,KAAA,EAAO,MAAM,OAAS,EAAA,CAAA;AAAA,sBACnF,GAAA,CAAA,IAAA,EAAA,EAAK,KAAO,EAAA,CAAC,OAAO,UAAY,EAAA;AAAA,QAC7C,OAAO,KAAM,CAAA;AAAA,OACd,GAAI,QAAO,EAAA,MAAA,EAAA;AAAA,KAAA,EACF,CAAU,GAAA,IAAA;AAAA,oBACb,IAAA,CAAA,IAAA,EAAA,EAAK,KAAO,EAAA,MAAA,CAAO,QAChB,EAAA,QAAA,EAAA;AAAA,sBAAC,GAAA,CAAA,GAAA,EAAA,EAAI,OAAS,EAAA,SAAA,EAAW,iBAAkB,EAAA,QAAA,EAAS,oBAAmB,wBAAyB,EAAA,KAAA,EAAO,CAAC,MAAA,CAAO,IAAM,EAAA;AAAA,QAC7H,iBAAiB,KAAM,CAAA;AAAA,OACxB,CAAA,EAAG,YAAc,EAAA,GAAA,EACJ,QAAC,kBAAA,GAAA,CAAA,sBAAA,EAAA,EAAuB,IAAK,EAAA,mBAAA,EAAoB,IAAM,EAAA,EAAA,EAAI,KAAO,EAAA,KAAA,CAAM,OAAO,CACnF,EAAA,CAAA;AAAA,0BACC,GAAI,EAAA,EAAA,OAAA,EAAS,OAAO,OAAU,GAAA,QAAA,EAAU,UAAU,WAAgB,KAAA,OAAA,EAAS,iBAAkB,EAAA,QAAA,EAAS,oBAAoB,IAAO,GAAA,OAAA,GAAU,UAAU,KAAO,EAAA,CAAC,OAAO,IAAM,EAAA;AAAA,QACnL,eAAiB,EAAA,IAAA,GAAO,KAAM,CAAA,GAAA,GAAM,KAAM,CAAA,MAAA;AAAA,QAC1C,OAAA,EAAS,WAAgB,KAAA,OAAA,GAAU,GAAM,GAAA;AAAA,OAC1C,CAAA,EAAG,YAAc,EAAA,GAAA,EACJ,8BAAC,sBAAuB,EAAA,EAAA,IAAA,EAAM,IAAO,GAAA,OAAA,GAAU,YAAc,EAAA,IAAA,EAAM,EAAI,EAAA,KAAA,EAAM,WAAU,CAC3F,EAAA,CAAA;AAAA,sBACC,GAAA,CAAA,GAAA,EAAA,EAAI,OAAS,EAAA,MAAA,EAAQ,UAAU,SAAY,GAAA,GAAA,EAAM,iBAAkB,EAAA,QAAA,EAAS,kBAAmB,EAAA,sBAAA,EAAuB,KAAO,EAAA,CAAC,OAAO,IAAM,EAAA;AAAA,QACpJ,iBAAiB,KAAM,CAAA,UAAA;AAAA,QACvB,OAAA,EAAS,SAAY,GAAA,GAAA,GAAO,GAAM,GAAA;AAAA,OACnC,CAAA,EAAG,YAAc,EAAA,GAAA,EACJ,QAAC,kBAAA,GAAA,CAAA,sBAAA,EAAA,EAAuB,IAAK,EAAA,OAAA,EAAQ,IAAM,EAAA,EAAA,EAAI,KAAO,EAAA,KAAA,CAAM,QAAQ,CACxE,EAAA;AAAA,KACJ,EAAA,CAAA;AAAA,oBACC,IAAA,CAAA,IAAA,EAAA,EAAK,KAAO,EAAA,MAAA,CAAO,MAChB,EAAA,QAAA,EAAA;AAAA,sBAAA,GAAA,CAAC,IAAK,EAAA,EAAA,KAAA,EAAO,CAAC,MAAA,CAAO,UAAY,EAAA;AAAA,QACzC,OAAO,KAAM,CAAA;AAAA,OACd,GAAG,QAAO,EAAA,SAAA,EAAA,CAAA;AAAA,sBACA,GAAA,CAAA,IAAA,EAAA,EAAK,KAAO,EAAA,CAAC,OAAO,UAAY,EAAA;AAAA,QACzC,OAAO,KAAM,CAAA;AAAA,OACd,CAAA,EAAI,QAAO,EAAA,IAAA,GAAA,OAAA,GAAU,QAAS,EAAA,CAAA;AAAA,sBACpB,GAAA,CAAA,IAAA,EAAA,EAAK,KAAO,EAAA,CAAC,OAAO,UAAY,EAAA;AAAA,QACzC,OAAO,KAAM,CAAA;AAAA,OACd,GAAG,QAAI,EAAA,MAAA,EAAA;AAAA,KACF,EAAA;AAAA,GACJ,EAAA,CAAA;AACR;AACA,MAAM,MAAA,GAAS,WAAW,MAAO,CAAA;AAAA,EAC/B,KAAO,EAAA;AAAA,IACL,UAAY,EAAA,QAAA;AAAA,IACZ,eAAiB,EAAA;AAAA,GACnB;AAAA,EACA,SAAW,EAAA;AAAA,IACT,KAAO,EAAA,GAAA;AAAA,IACP,MAAQ,EAAA,GAAA;AAAA,IACR,YAAc,EAAA,EAAA;AAAA,IACd,UAAY,EAAA,QAAA;AAAA,IACZ,cAAgB,EAAA,QAAA;AAAA,IAChB,aAAe,EAAA,IAAA;AAAA,IACf,YAAc,EAAA,EAAA;AAAA,IACd,YAAc,EAAA;AAAA,MACZ,KAAO,EAAA,CAAA;AAAA,MACP,MAAQ,EAAA;AAAA,KACV;AAAA,IACA,SAAW,EAAA;AAAA,GACb;AAAA,EACA,UAAY,EAAA;AAAA,IACV,SAAW,EAAA,EAAA;AAAA,IACX,QAAU,EAAA,EAAA;AAAA,IACV,UAAY,EAAA;AAAA,GACd;AAAA,EACA,SAAW,EAAA;AAAA,IACT,SAAW,EAAA,CAAA;AAAA,IACX,QAAU,EAAA;AAAA,GACZ;AAAA,EACA,SAAW,EAAA;AAAA,IACT,UAAY,EAAA,QAAA;AAAA,IACZ,UAAY,EAAA,EAAA;AAAA,IACZ,aAAe,EAAA;AAAA,GACjB;AAAA,EACA,MAAQ,EAAA;AAAA,IACN,aAAe,EAAA,KAAA;AAAA,IACf,UAAY,EAAA,QAAA;AAAA,IACZ,iBAAmB,EAAA,EAAA;AAAA,IACnB,eAAiB,EAAA,CAAA;AAAA,IACjB,YAAc,EAAA;AAAA,GAChB;AAAA,EACA,GAAK,EAAA;AAAA,IACH,KAAO,EAAA,CAAA;AAAA,IACP,MAAQ,EAAA,CAAA;AAAA,IACR,YAAc,EAAA,CAAA;AAAA,IACd,WAAa,EAAA;AAAA,GACf;AAAA,EACA,UAAY,EAAA;AAAA,IACV,QAAU,EAAA,EAAA;AAAA,IACV,UAAY,EAAA;AAAA,GACd;AAAA,EACA,KAAO,EAAA;AAAA,IACL,SAAW,EAAA,EAAA;AAAA,IACX,QAAU,EAAA,EAAA;AAAA,IACV,UAAY,EAAA,KAAA;AAAA,IACZ,WAAA,EAAa,CAAC,cAAc,CAAA;AAAA,IAC5B,aAAe,EAAA;AAAA,GACjB;AAAA,EACA,IAAM,EAAA;AAAA,IACJ,SAAW,EAAA,EAAA;AAAA,IACX,MAAQ,EAAA,EAAA;AAAA,IACR,aAAe,EAAA,KAAA;AAAA,IACf,UAAY,EAAA,QAAA;AAAA,IACZ,GAAK,EAAA;AAAA,GACP;AAAA,EACA,GAAK,EAAA;AAAA,IACH,KAAO,EAAA,CAAA;AAAA,IACP,YAAc,EAAA;AAAA,GAChB;AAAA,EACA,MAAQ,EAAA;AAAA,IACN,SAAW,EAAA,EAAA;AAAA,IACX,gBAAkB,EAAA,CAAA;AAAA,IAClB,aAAe,EAAA,KAAA;AAAA,IACf,UAAY,EAAA,QAAA;AAAA,IACZ,GAAK,EAAA,CAAA;AAAA,IACL,iBAAmB,EAAA,EAAA;AAAA,IACnB,eAAiB,EAAA,EAAA;AAAA,IACjB,YAAc,EAAA,EAAA;AAAA,IACd,aAAa,UAAW,CAAA;AAAA,GAC1B;AAAA,EACA,UAAY,EAAA;AAAA,IACV,IAAM,EAAA,CAAA;AAAA,IACN,QAAU,EAAA,EAAA;AAAA,IACV,UAAY,EAAA;AAAA,GACd;AAAA,EACA,QAAU,EAAA;AAAA,IACR,SAAW,EAAA,EAAA;AAAA,IACX,aAAe,EAAA,KAAA;AAAA,IACf,UAAY,EAAA,QAAA;AAAA,IACZ,cAAgB,EAAA,QAAA;AAAA,IAChB,GAAK,EAAA;AAAA,GACP;AAAA,EACA,IAAM,EAAA;AAAA,IACJ,KAAO,EAAA,EAAA;AAAA,IACP,MAAQ,EAAA,EAAA;AAAA,IACR,YAAc,EAAA,EAAA;AAAA,IACd,UAAY,EAAA,QAAA;AAAA,IACZ,cAAgB,EAAA;AAAA,GAClB;AAAA,EACA,IAAM,EAAA;AAAA,IACJ,KAAO,EAAA,EAAA;AAAA,IACP,MAAQ,EAAA,EAAA;AAAA,IACR,YAAc,EAAA,EAAA;AAAA,IACd,UAAY,EAAA,QAAA;AAAA,IACZ,cAAgB,EAAA;AAAA,GAClB;AAAA,EACA,MAAQ,EAAA;AAAA,IACN,SAAW,EAAA,CAAA;AAAA,IACX,aAAe,EAAA,KAAA;AAAA,IACf,cAAgB,EAAA,QAAA;AAAA,IAChB,GAAK,EAAA;AAAA,GACP;AAAA,EACA,UAAY,EAAA;AAAA,IACV,KAAO,EAAA,EAAA;AAAA,IACP,SAAW,EAAA,QAAA;AAAA,IACX,QAAU,EAAA;AAAA;AAEd,CAAC,CAAA"}