@mieweb/ui 0.10.0-dev.2 → 0.10.0-dev.4
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/chunk-74ENCTIK.js +162 -0
- package/dist/chunk-74ENCTIK.js.map +1 -0
- package/dist/chunk-OGNADPM4.cjs +170 -0
- package/dist/chunk-OGNADPM4.cjs.map +1 -0
- package/dist/index.cjs +239 -256
- package/dist/index.cjs.map +1 -1
- package/dist/index.d.cts +67 -21
- package/dist/index.d.ts +67 -21
- package/dist/index.js +219 -252
- package/dist/index.js.map +1 -1
- package/dist/{speaker-verify-5GTWAN5Y.cjs → speaker-verify-4NEJAK6C.cjs} +57 -90
- package/dist/speaker-verify-4NEJAK6C.cjs.map +1 -0
- package/dist/{speaker-verify-R67P433H.js → speaker-verify-AWSKI6DI.js} +57 -90
- package/dist/speaker-verify-AWSKI6DI.js.map +1 -0
- package/package.json +1 -1
- package/dist/speaker-verify-5GTWAN5Y.cjs.map +0 -1
- package/dist/speaker-verify-R67P433H.js.map +0 -1
package/dist/index.js
CHANGED
|
@@ -9,6 +9,8 @@ export { bluehiveBrand } from './chunk-3T7QGLNB.js';
|
|
|
9
9
|
export { ccmeBrand } from './chunk-SCQRJPSV.js';
|
|
10
10
|
export { ozwellBrand } from './chunk-5YUBQIC7.js';
|
|
11
11
|
import { getModelBytes } from './chunk-6I7IDZ4A.js';
|
|
12
|
+
import { loadWhatPrints, saveWhatPrints, clearWhatPrints } from './chunk-74ENCTIK.js';
|
|
13
|
+
export { clearVoiceprints, clearWhatPrints, getVoiceprints, loadWhatPrints, saveWhatPrints, setVoiceprints } from './chunk-74ENCTIK.js';
|
|
12
14
|
export { ThemeProvider, ThemeProviderContext, ThemeToggle, themeToggleIconVariants, themeToggleVariants, useThemeContext } from './chunk-LL6IWKI3.js';
|
|
13
15
|
export { Toggle, toggleVariants } from './chunk-PTZB2GKL.js';
|
|
14
16
|
export { TranscriptView, formatTimestampMs } from './chunk-LAEIVOIY.js';
|
|
@@ -145,6 +147,7 @@ import { isStorybookDocsMode } from './chunk-VSQF22GL.js';
|
|
|
145
147
|
export { isStorybookDocsMode } from './chunk-VSQF22GL.js';
|
|
146
148
|
import { Plus, GripVertical, RefreshCw, Pencil, Trash2, AlertCircle, ArrowLeft, Users, FilePlus, CheckCircle, ChevronDown, Clock, FileText, ClipboardList, Stethoscope, Mail, Phone, ClipboardCheck, Eye, Info, Link, ChevronUp, History, StickyNote, ExternalLink, MoreVertical, Send, Scan, TestTube2, Pill, Share, User, Download, ChevronRight, Calendar, Printer, ClipboardPlus, FileCheck, Wheat, Bell, FileHeart, HeartPulse, Paperclip, HelpCircle, MoreHorizontal, AlertTriangle, Upload as Upload$1, Camera, Check as Check$1, X as X$1, ScanLine, Image } from './chunk-BKSPDTX4.js';
|
|
147
149
|
export { Accessibility as AccessibilityIcon, Activity as ActivityIcon, AlertCircle as AlertCircleIcon, AlertTriangle as AlertTriangleIcon, Wheat as AllergyIcon, WheatOff as AllergyOffIcon, Ambulance as AmbulanceIcon, ArrowLeft as ArrowLeftIcon, ArrowRight as ArrowRightIcon, ArrowUpDown as ArrowUpDownIcon, ArrowUp as ArrowUpIcon, AtSign as AtSignIcon, Baby as BabyIcon, BadgeAlert as BadgeAlertIcon, BadgeCheck as BadgeCheckIcon, BadgeMinus as BadgeMinusIcon, BadgePlus as BadgePlusIcon, BadgeX as BadgeXIcon, Ban as BanIcon, Bandage as BandageIcon, BedDouble as BedDoubleIcon, Bed as BedIcon, BedSingle as BedSingleIcon, Bell as BellIcon, BellOff as BellOffIcon, Biohazard as BiohazardIcon, Bone as BoneIcon, BookOpenCheck as BookOpenCheckIcon, BookOpen as BookOpenIcon, Bookmark as BookmarkIcon, Bot as BotIcon, Brain as BrainIcon, Briefcase as BriefcaseIcon, BriefcaseMedical as BriefcaseMedicalIcon, Building as BuildingIcon, CalendarCheck as CalendarCheckIcon, Calendar as CalendarIcon, Camera as CameraIcon, Cannabis as CannabisIcon, BarChart3 as ChartIcon, CheckCircle as CheckCircleIcon, Check as CheckIcon, ChevronDown as ChevronDownIcon, ChevronLeft as ChevronLeftIcon, ChevronRight as ChevronRightIcon, ChevronUp as ChevronUpIcon, Cigarette as CigaretteIcon, CigaretteOff as CigaretteOffIcon, CircleDotDashed as CircleDotDashedIcon, CircleDot as CircleDotIcon, CircleUser as CircleUserIcon, ClipboardCheck as ClipboardCheckIcon, Clipboard as ClipboardIcon, ClipboardList as ClipboardListIcon, ClipboardPlus as ClipboardPlusIcon, Clock as ClockIcon, Cog as CogIcon, Columns as ColumnsIcon, Copy as CopyIcon, CreditCard as CreditCardIcon, Cross as CrossIcon, Dna as DnaIcon, DollarSign as DollarSignIcon, Download as DownloadIcon, Droplet as DropletIcon, Droplets as DropletsIcon, Ear as EarIcon, ExternalLink as ExternalLinkIcon, Eye as EyeIcon, EyeOff as EyeOffIcon, FileCheck2 as FileCheck2Icon, FileCheck as FileCheckIcon, FileHeart as FileHeartIcon, File as FileIcon, FilePlus2 as FilePlus2Icon, FilePlus as FilePlusIcon, FileText as FileTextIcon, Filter as FilterIcon, Fingerprint as FingerprintIcon, Flag as FlagIcon, FlaskConical as FlaskIcon, FlaskRound as FlaskRoundIcon, Folder as FolderIcon, FolderOpen as FolderOpenIcon, Footprints as FootprintsIcon, Glasses as GlassesIcon, Globe as GlobeIcon, LayoutGrid as GridIcon, GripVertical as GripVerticalIcon, Hand as HandIcon, HandMetal as HandMetalIcon, Hash as HashIcon, Heart as HeartIcon, HeartOff as HeartOffIcon, HeartPulse as HeartPulseIcon, HelpCircle as HelpCircleIcon, History as HistoryIcon, Home as HomeIcon, Hospital as HospitalIcon, Image as ImageIcon, Info as InfoIcon, Key as KeyIcon, Link as LinkIcon, List as ListIcon, Loader2 as LoaderIcon, Lock as LockIcon, LogIn as LogInIcon, LogOut as LogOutIcon, Mail as MailIcon, MapPin as MapPinIcon, Maximize as MaximizeIcon, Menu as MenuIcon, MessageSquare as MessageIcon, Mic as MicIcon, Microscope as MicroscopeIcon, Minimize as MinimizeIcon, Minus as MinusIcon, Monitor as MonitorIcon, Moon as MoonIcon, MoreHorizontal as MoreHorizontalIcon, MoreVertical as MoreVerticalIcon, NotebookPen as NotebookPenIcon, Palette as PaletteIcon, Paperclip as PaperclipIcon, CircleUserRound as PatientIcon, Pencil as PencilIcon, UserRound as PersonIcon, Phone as PhoneIcon, PieChart as PieChartIcon, Pill as PillIcon, Plus as PlusIcon, Printer as PrinterIcon, Radiation as RadiationIcon, Ruler as RulerIcon, Save as SaveIcon, Scale as ScaleIcon, Scaling as ScalingIcon, ScanEye as ScanEyeIcon, Scan as ScanIcon, ScanLine as ScanLineIcon, Search as SearchIcon, Settings as SettingsIcon, Share as ShareIcon, ShieldCheck as ShieldCheckIcon, Shield as ShieldIcon, ShieldPlus as ShieldPlusIcon, Sliders as SlidersIcon, Sparkle as SparkleIcon, Star as StarIcon, Stethoscope as StethoscopeIcon, StickyNote as StickyNoteIcon, Square as StopIcon, Sun as SunIcon, Syringe as SyringeIcon, Table as TableIcon, Tablets as TabletsIcon, Tag as TagIcon, TestTube2 as TestTubeIcon, TestTubes as TestTubesIcon, Thermometer as ThermometerIcon, ThermometerSun as ThermometerSunIcon, ThumbsDown as ThumbsDownIcon, ThumbsUp as ThumbsUpIcon, Timer as TimerIcon, Trash2 as TrashIcon, TrendingDown as TrendingDownIcon, TrendingUp as TrendingUpIcon, Truck as TruckIcon, Unlock as UnlockIcon, Upload as UploadIcon, UserCheck as UserCheckIcon, User as UserIcon, UserMinus as UserMinusIcon, UserPlus as UserPlusIcon, UserRoundCheck as UserRoundCheckIcon, UserRoundMinus as UserRoundMinusIcon, UserRoundPlus as UserRoundPlusIcon, UserRoundX as UserRoundXIcon, Users as UsersIcon, Weight as WeightIcon, Wrench as WrenchIcon, XCircle as XCircleIcon, X2 as XIcon, Zap as ZapIcon } from './chunk-BKSPDTX4.js';
|
|
150
|
+
import { usePrefersReducedMotion } from './chunk-HB7C7NB5.js';
|
|
148
151
|
export { usePrefersReducedMotion } from './chunk-HB7C7NB5.js';
|
|
149
152
|
import { Badge } from './chunk-BMSG4NBH.js';
|
|
150
153
|
export { Badge, badgeVariants } from './chunk-BMSG4NBH.js';
|
|
@@ -157,7 +160,7 @@ import { cn } from './chunk-TQONQSJO.js';
|
|
|
157
160
|
export { cn, miewebUITwMergeConflicts } from './chunk-TQONQSJO.js';
|
|
158
161
|
import './chunk-PX6F3LHL.js';
|
|
159
162
|
import * as React13 from 'react';
|
|
160
|
-
import React13__default, { createContext, useState, useEffect, useCallback, useMemo, useContext, useRef } from 'react';
|
|
163
|
+
import React13__default, { createContext, useState, useEffect, useCallback, useMemo, useContext, useRef, useId } from 'react';
|
|
161
164
|
import { jsxs, jsx, Fragment } from 'react/jsx-runtime';
|
|
162
165
|
import { cva } from 'class-variance-authority';
|
|
163
166
|
import * as ReactDOM from 'react-dom';
|
|
@@ -3938,21 +3941,27 @@ function endsWithDone(text) {
|
|
|
3938
3941
|
);
|
|
3939
3942
|
}
|
|
3940
3943
|
function useSpeakerVerify(opts = {}) {
|
|
3941
|
-
const { enabled = true } = opts;
|
|
3944
|
+
const { enabled = true, voiceprintNamespace } = opts;
|
|
3942
3945
|
const [ready, setReady] = React13.useState(false);
|
|
3946
|
+
const [loadedNamespace, setLoadedNamespace] = React13.useState();
|
|
3943
3947
|
const [error, setError] = React13.useState(null);
|
|
3944
3948
|
const svRef = React13.useRef(null);
|
|
3945
3949
|
React13.useEffect(() => {
|
|
3946
3950
|
if (!enabled) return;
|
|
3951
|
+
setReady(false);
|
|
3952
|
+
setError(null);
|
|
3953
|
+
svRef.current = null;
|
|
3947
3954
|
let cancelled = false;
|
|
3948
3955
|
(async () => {
|
|
3949
3956
|
try {
|
|
3950
|
-
await import('./speaker-verify-
|
|
3957
|
+
await import('./speaker-verify-AWSKI6DI.js');
|
|
3951
3958
|
const sv = window.SpeakerVerify;
|
|
3952
3959
|
if (!sv) throw new Error("SpeakerVerify failed to initialize");
|
|
3953
3960
|
await sv.ready();
|
|
3961
|
+
await sv.loadNamespace(voiceprintNamespace);
|
|
3954
3962
|
if (cancelled) return;
|
|
3955
3963
|
svRef.current = sv;
|
|
3964
|
+
setLoadedNamespace(voiceprintNamespace);
|
|
3956
3965
|
console.log("[speaker] TitaNet ready");
|
|
3957
3966
|
setReady(true);
|
|
3958
3967
|
} catch (e) {
|
|
@@ -3962,21 +3971,22 @@ function useSpeakerVerify(opts = {}) {
|
|
|
3962
3971
|
return () => {
|
|
3963
3972
|
cancelled = true;
|
|
3964
3973
|
};
|
|
3965
|
-
}, [enabled]);
|
|
3974
|
+
}, [enabled, voiceprintNamespace]);
|
|
3975
|
+
const scopedApi = enabled && ready && loadedNamespace === voiceprintNamespace ? svRef.current : null;
|
|
3966
3976
|
return {
|
|
3967
|
-
ready,
|
|
3977
|
+
ready: scopedApi !== null,
|
|
3968
3978
|
error,
|
|
3969
|
-
enroll: (phrase, utterances, opts2) =>
|
|
3970
|
-
verify: (phrase, samples, sampleRate) =>
|
|
3971
|
-
conditionCount: (phrase) =>
|
|
3972
|
-
embed: (samples, sampleRate) =>
|
|
3973
|
-
identify: (samples, sampleRate) =>
|
|
3974
|
-
listVoices: () =>
|
|
3975
|
-
removeVoice: (voiceId) =>
|
|
3976
|
-
renameVoice: (voiceId, label) =>
|
|
3977
|
-
clear: () =>
|
|
3979
|
+
enroll: (phrase, utterances, opts2) => scopedApi?.enroll(phrase, utterances, opts2, voiceprintNamespace) ?? null,
|
|
3980
|
+
verify: (phrase, samples, sampleRate) => scopedApi?.verify(phrase, samples, sampleRate, voiceprintNamespace) ?? null,
|
|
3981
|
+
conditionCount: (phrase) => scopedApi?.conditionCount(phrase, voiceprintNamespace) ?? 0,
|
|
3982
|
+
embed: (samples, sampleRate) => scopedApi?.embed(samples, sampleRate) ?? null,
|
|
3983
|
+
identify: (samples, sampleRate) => scopedApi?.identify(samples, sampleRate, voiceprintNamespace) ?? null,
|
|
3984
|
+
listVoices: () => scopedApi?.listVoices(voiceprintNamespace) ?? [],
|
|
3985
|
+
removeVoice: (voiceId) => scopedApi?.removeVoice(voiceId, voiceprintNamespace),
|
|
3986
|
+
renameVoice: (voiceId, label) => scopedApi?.renameVoice(voiceId, label, voiceprintNamespace),
|
|
3987
|
+
clear: () => scopedApi?.clearEnrollment(voiceprintNamespace),
|
|
3978
3988
|
setGates: (g) => {
|
|
3979
|
-
const sv =
|
|
3989
|
+
const sv = scopedApi;
|
|
3980
3990
|
if (!sv) return;
|
|
3981
3991
|
if (g.cosine != null) sv.threshold = g.cosine;
|
|
3982
3992
|
if (g.znorm != null) sv.znormThreshold = g.znorm;
|
|
@@ -4159,11 +4169,14 @@ function useDiarization(options = {}) {
|
|
|
4159
4169
|
merge = true,
|
|
4160
4170
|
inferRoles = false,
|
|
4161
4171
|
enabled = true,
|
|
4162
|
-
minSegmentSeconds = 1
|
|
4172
|
+
minSegmentSeconds = 1,
|
|
4173
|
+
voiceprintNamespace
|
|
4163
4174
|
} = options;
|
|
4164
|
-
const sv = useSpeakerVerify({ enabled });
|
|
4175
|
+
const sv = useSpeakerVerify({ enabled, voiceprintNamespace });
|
|
4165
4176
|
const svRef = React13.useRef(sv);
|
|
4166
4177
|
svRef.current = sv;
|
|
4178
|
+
const nsRef = React13.useRef(voiceprintNamespace);
|
|
4179
|
+
nsRef.current = voiceprintNamespace;
|
|
4167
4180
|
const [busy, setBusy] = React13.useState(false);
|
|
4168
4181
|
const [error, setError] = React13.useState(null);
|
|
4169
4182
|
const [result, setResult] = React13.useState(null);
|
|
@@ -4176,10 +4189,16 @@ function useDiarization(options = {}) {
|
|
|
4176
4189
|
setError(null);
|
|
4177
4190
|
try {
|
|
4178
4191
|
const svh = svRef.current;
|
|
4192
|
+
const passNamespace = nsRef.current;
|
|
4193
|
+
const assertNamespace = () => {
|
|
4194
|
+
if (nsRef.current !== passNamespace)
|
|
4195
|
+
throw new Error("voiceprint namespace changed during diarization");
|
|
4196
|
+
};
|
|
4179
4197
|
const [segments, samples] = await Promise.all([
|
|
4180
4198
|
transcribeSegments(blob),
|
|
4181
4199
|
decodeTo16kMono(blob)
|
|
4182
4200
|
]);
|
|
4201
|
+
assertNamespace();
|
|
4183
4202
|
if (!segments.length) {
|
|
4184
4203
|
setResult([]);
|
|
4185
4204
|
return [];
|
|
@@ -4234,6 +4253,7 @@ function useDiarization(options = {}) {
|
|
|
4234
4253
|
}
|
|
4235
4254
|
}
|
|
4236
4255
|
if (merge) out = mergeTurns(out);
|
|
4256
|
+
assertNamespace();
|
|
4237
4257
|
setResult(out);
|
|
4238
4258
|
return out;
|
|
4239
4259
|
} catch (e) {
|
|
@@ -4256,158 +4276,6 @@ function useDiarization(options = {}) {
|
|
|
4256
4276
|
return { ready: sv.ready, busy, error, result, diarize };
|
|
4257
4277
|
}
|
|
4258
4278
|
|
|
4259
|
-
// src/components/AI/voiceprintStore.ts
|
|
4260
|
-
var DB_NAME = "ozwell-voice";
|
|
4261
|
-
var STORE = "voiceprints";
|
|
4262
|
-
var DB_VERSION = 1;
|
|
4263
|
-
function openDb() {
|
|
4264
|
-
return new Promise((resolve, reject) => {
|
|
4265
|
-
const req = indexedDB.open(DB_NAME, DB_VERSION);
|
|
4266
|
-
req.onupgradeneeded = () => {
|
|
4267
|
-
if (!req.result.objectStoreNames.contains(STORE))
|
|
4268
|
-
req.result.createObjectStore(STORE);
|
|
4269
|
-
};
|
|
4270
|
-
req.onsuccess = () => resolve(req.result);
|
|
4271
|
-
req.onerror = () => reject(req.error);
|
|
4272
|
-
req.onblocked = () => reject(
|
|
4273
|
-
new Error("IndexedDB open blocked (another tab holds an upgrade lock)")
|
|
4274
|
-
);
|
|
4275
|
-
});
|
|
4276
|
-
}
|
|
4277
|
-
function idbGet(key) {
|
|
4278
|
-
return openDb().then(
|
|
4279
|
-
(db) => new Promise((resolve, reject) => {
|
|
4280
|
-
const req = db.transaction(STORE, "readonly").objectStore(STORE).get(key);
|
|
4281
|
-
req.onsuccess = () => {
|
|
4282
|
-
resolve(req.result);
|
|
4283
|
-
db.close();
|
|
4284
|
-
};
|
|
4285
|
-
req.onerror = () => {
|
|
4286
|
-
reject(req.error);
|
|
4287
|
-
db.close();
|
|
4288
|
-
};
|
|
4289
|
-
})
|
|
4290
|
-
);
|
|
4291
|
-
}
|
|
4292
|
-
function idbSet(key, value) {
|
|
4293
|
-
return openDb().then(
|
|
4294
|
-
(db) => new Promise((resolve, reject) => {
|
|
4295
|
-
const tx = db.transaction(STORE, "readwrite");
|
|
4296
|
-
tx.objectStore(STORE).put(value, key);
|
|
4297
|
-
tx.oncomplete = () => {
|
|
4298
|
-
resolve();
|
|
4299
|
-
db.close();
|
|
4300
|
-
};
|
|
4301
|
-
tx.onerror = () => {
|
|
4302
|
-
reject(tx.error);
|
|
4303
|
-
db.close();
|
|
4304
|
-
};
|
|
4305
|
-
tx.onabort = () => {
|
|
4306
|
-
reject(tx.error);
|
|
4307
|
-
db.close();
|
|
4308
|
-
};
|
|
4309
|
-
})
|
|
4310
|
-
);
|
|
4311
|
-
}
|
|
4312
|
-
function idbDel(key) {
|
|
4313
|
-
return openDb().then(
|
|
4314
|
-
(db) => new Promise((resolve, reject) => {
|
|
4315
|
-
const tx = db.transaction(STORE, "readwrite");
|
|
4316
|
-
tx.objectStore(STORE).delete(key);
|
|
4317
|
-
tx.oncomplete = () => {
|
|
4318
|
-
resolve();
|
|
4319
|
-
db.close();
|
|
4320
|
-
};
|
|
4321
|
-
tx.onerror = () => {
|
|
4322
|
-
reject(tx.error);
|
|
4323
|
-
db.close();
|
|
4324
|
-
};
|
|
4325
|
-
tx.onabort = () => {
|
|
4326
|
-
reject(tx.error);
|
|
4327
|
-
db.close();
|
|
4328
|
-
};
|
|
4329
|
-
})
|
|
4330
|
-
);
|
|
4331
|
-
}
|
|
4332
|
-
async function getVoiceprints(key, migrateLegacy) {
|
|
4333
|
-
try {
|
|
4334
|
-
const existing = await idbGet(key);
|
|
4335
|
-
if (existing !== void 0) return existing;
|
|
4336
|
-
if (migrateLegacy) {
|
|
4337
|
-
let raw = null;
|
|
4338
|
-
try {
|
|
4339
|
-
raw = localStorage.getItem(key);
|
|
4340
|
-
} catch {
|
|
4341
|
-
}
|
|
4342
|
-
if (raw != null) {
|
|
4343
|
-
let migrated;
|
|
4344
|
-
try {
|
|
4345
|
-
migrated = migrateLegacy(raw);
|
|
4346
|
-
} catch {
|
|
4347
|
-
try {
|
|
4348
|
-
localStorage.removeItem(key);
|
|
4349
|
-
} catch {
|
|
4350
|
-
}
|
|
4351
|
-
return void 0;
|
|
4352
|
-
}
|
|
4353
|
-
try {
|
|
4354
|
-
await idbSet(key, migrated);
|
|
4355
|
-
} catch {
|
|
4356
|
-
}
|
|
4357
|
-
try {
|
|
4358
|
-
localStorage.removeItem(key);
|
|
4359
|
-
} catch {
|
|
4360
|
-
}
|
|
4361
|
-
return migrated;
|
|
4362
|
-
}
|
|
4363
|
-
}
|
|
4364
|
-
return void 0;
|
|
4365
|
-
} catch {
|
|
4366
|
-
return void 0;
|
|
4367
|
-
}
|
|
4368
|
-
}
|
|
4369
|
-
async function setVoiceprints(key, value) {
|
|
4370
|
-
try {
|
|
4371
|
-
await idbSet(key, value);
|
|
4372
|
-
} catch {
|
|
4373
|
-
}
|
|
4374
|
-
}
|
|
4375
|
-
async function clearVoiceprints(key) {
|
|
4376
|
-
try {
|
|
4377
|
-
await idbDel(key);
|
|
4378
|
-
} catch {
|
|
4379
|
-
}
|
|
4380
|
-
try {
|
|
4381
|
-
localStorage.removeItem(key);
|
|
4382
|
-
} catch {
|
|
4383
|
-
}
|
|
4384
|
-
}
|
|
4385
|
-
var WHAT_KEY = "ozwellWhatPrints";
|
|
4386
|
-
function parseLegacyWhat(raw) {
|
|
4387
|
-
let o;
|
|
4388
|
-
try {
|
|
4389
|
-
o = JSON.parse(raw || "{}") || {};
|
|
4390
|
-
} catch {
|
|
4391
|
-
return {};
|
|
4392
|
-
}
|
|
4393
|
-
const out = /* @__PURE__ */ Object.create(null);
|
|
4394
|
-
for (const k of Object.keys(o))
|
|
4395
|
-
out[k] = (o[k] || []).map((a) => Float32Array.from(a));
|
|
4396
|
-
return out;
|
|
4397
|
-
}
|
|
4398
|
-
function loadWhatPrints() {
|
|
4399
|
-
return getVoiceprints(
|
|
4400
|
-
WHAT_KEY,
|
|
4401
|
-
parseLegacyWhat
|
|
4402
|
-
).then((v) => v ?? {});
|
|
4403
|
-
}
|
|
4404
|
-
function saveWhatPrints(map) {
|
|
4405
|
-
return setVoiceprints(WHAT_KEY, map);
|
|
4406
|
-
}
|
|
4407
|
-
function clearWhatPrints() {
|
|
4408
|
-
return clearVoiceprints(WHAT_KEY);
|
|
4409
|
-
}
|
|
4410
|
-
|
|
4411
4279
|
// src/components/AI/HeyOzwell/audio.ts
|
|
4412
4280
|
function openRollingRecorder(stream, maxSeconds = 2) {
|
|
4413
4281
|
const Ctx = window.AudioContext || window.webkitAudioContext;
|
|
@@ -4575,6 +4443,7 @@ function useRoomLevel(getStream, ready) {
|
|
|
4575
4443
|
}
|
|
4576
4444
|
function useHeyOzwell(options = {}) {
|
|
4577
4445
|
const {
|
|
4446
|
+
voiceprintNamespace,
|
|
4578
4447
|
autoDictateOnWake = false,
|
|
4579
4448
|
closeChatOnDone = false,
|
|
4580
4449
|
transcription = "browser",
|
|
@@ -4634,13 +4503,14 @@ function useHeyOzwell(options = {}) {
|
|
|
4634
4503
|
setLiveText("");
|
|
4635
4504
|
}, []);
|
|
4636
4505
|
const wakeRef = React13.useRef(null);
|
|
4637
|
-
const sv = useSpeakerVerify({ enabled: requireDoctor });
|
|
4506
|
+
const sv = useSpeakerVerify({ enabled: requireDoctor, voiceprintNamespace });
|
|
4638
4507
|
const svRef = React13.useRef(sv);
|
|
4639
4508
|
svRef.current = sv;
|
|
4640
4509
|
const rollRef = React13.useRef(null);
|
|
4641
4510
|
const diar = useDiarization({
|
|
4642
4511
|
...diarizationOptions,
|
|
4643
|
-
enabled: conversationMode
|
|
4512
|
+
enabled: conversationMode,
|
|
4513
|
+
voiceprintNamespace
|
|
4644
4514
|
});
|
|
4645
4515
|
const diarRef = React13.useRef(diar);
|
|
4646
4516
|
diarRef.current = diar;
|
|
@@ -4648,6 +4518,7 @@ function useHeyOzwell(options = {}) {
|
|
|
4648
4518
|
(name) => {
|
|
4649
4519
|
if (!requireDoctor) return true;
|
|
4650
4520
|
const svh = svRef.current;
|
|
4521
|
+
if (!svh.ready) return false;
|
|
4651
4522
|
const enrolled = svh.conditionCount(name) > 0;
|
|
4652
4523
|
if (!enrolled) return true;
|
|
4653
4524
|
const roll = rollRef.current;
|
|
@@ -4852,9 +4723,14 @@ function useHeyOzwell(options = {}) {
|
|
|
4852
4723
|
if (!requireDoctor || !active || !wake.ready) return;
|
|
4853
4724
|
let cancelled = false;
|
|
4854
4725
|
let tries = 0;
|
|
4855
|
-
|
|
4726
|
+
const applied = /* @__PURE__ */ new Set(["hey-ozwell", "ozwell-i'm-done"]);
|
|
4727
|
+
for (const k of applied) wakeRef.current?.setVoiceprint(k, []);
|
|
4728
|
+
void loadWhatPrints(voiceprintNamespace).then((loaded) => {
|
|
4856
4729
|
if (cancelled) return;
|
|
4857
|
-
for (const k in loaded)
|
|
4730
|
+
for (const k in loaded) {
|
|
4731
|
+
applied.add(k);
|
|
4732
|
+
wakeRef.current?.setVoiceprint(k, loaded[k]);
|
|
4733
|
+
}
|
|
4858
4734
|
});
|
|
4859
4735
|
const tryOpen = () => {
|
|
4860
4736
|
if (cancelled || rollRef.current) return;
|
|
@@ -4865,10 +4741,11 @@ function useHeyOzwell(options = {}) {
|
|
|
4865
4741
|
tryOpen();
|
|
4866
4742
|
return () => {
|
|
4867
4743
|
cancelled = true;
|
|
4744
|
+
for (const k of applied) wakeRef.current?.setVoiceprint(k, []);
|
|
4868
4745
|
rollRef.current?.close();
|
|
4869
4746
|
rollRef.current = null;
|
|
4870
4747
|
};
|
|
4871
|
-
}, [requireDoctor, active, wake.ready]);
|
|
4748
|
+
}, [requireDoctor, active, wake.ready, voiceprintNamespace]);
|
|
4872
4749
|
const hasListenedRef = React13.useRef(false);
|
|
4873
4750
|
React13.useEffect(() => {
|
|
4874
4751
|
if (listening) hasListenedRef.current = true;
|
|
@@ -5160,11 +5037,11 @@ var REPS = 3;
|
|
|
5160
5037
|
var TIMEOUT_MS = 5e3;
|
|
5161
5038
|
var delay = (ms) => new Promise((r) => setTimeout(r, ms));
|
|
5162
5039
|
function useVoiceSetup(options = {}) {
|
|
5163
|
-
const { startAdding = false, voiceId, label } = options;
|
|
5040
|
+
const { startAdding = false, voiceId, label, voiceprintNamespace } = options;
|
|
5164
5041
|
const [enrollVoiceId] = React13.useState(
|
|
5165
5042
|
() => voiceId || (startAdding ? `voice-${Date.now()}-${Math.floor(Math.random() * 1e4)}` : "you")
|
|
5166
5043
|
);
|
|
5167
|
-
const sv = useSpeakerVerify();
|
|
5044
|
+
const sv = useSpeakerVerify({ voiceprintNamespace });
|
|
5168
5045
|
const expectRef = React13.useRef(null);
|
|
5169
5046
|
const resolveRef = React13.useRef(null);
|
|
5170
5047
|
const whatRef = React13.useRef({});
|
|
@@ -5186,10 +5063,19 @@ function useVoiceSetup(options = {}) {
|
|
|
5186
5063
|
const total = PHRASES2.length * REPS;
|
|
5187
5064
|
React13.useEffect(() => {
|
|
5188
5065
|
warmWhisper();
|
|
5189
|
-
|
|
5190
|
-
|
|
5066
|
+
let cancelled = false;
|
|
5067
|
+
whatRef.current = {};
|
|
5068
|
+
void loadWhatPrints(voiceprintNamespace).then((w) => {
|
|
5069
|
+
if (!cancelled) whatRef.current = w;
|
|
5191
5070
|
});
|
|
5192
|
-
|
|
5071
|
+
return () => {
|
|
5072
|
+
cancelled = true;
|
|
5073
|
+
abortRef.current = true;
|
|
5074
|
+
resolveRef.current?.("__cancelled__");
|
|
5075
|
+
setPhase("intro");
|
|
5076
|
+
setStep(0);
|
|
5077
|
+
};
|
|
5078
|
+
}, [voiceprintNamespace]);
|
|
5193
5079
|
React13.useEffect(() => {
|
|
5194
5080
|
if (!wake.ready) {
|
|
5195
5081
|
setLevel(0);
|
|
@@ -5301,10 +5187,10 @@ function useVoiceSetup(options = {}) {
|
|
|
5301
5187
|
whatRef.current[ph.key] = merged;
|
|
5302
5188
|
wakeRef.current.setVoiceprint(ph.key, merged);
|
|
5303
5189
|
}
|
|
5304
|
-
void saveWhatPrints(whatRef.current);
|
|
5190
|
+
void saveWhatPrints(whatRef.current, voiceprintNamespace);
|
|
5305
5191
|
setAdding(false);
|
|
5306
5192
|
setPhase("done");
|
|
5307
|
-
}, [bothReady, phase, adding, sv, enrollVoiceId, label]);
|
|
5193
|
+
}, [bothReady, phase, adding, sv, enrollVoiceId, label, voiceprintNamespace]);
|
|
5308
5194
|
const addAnotherSpot = React13.useCallback(() => {
|
|
5309
5195
|
setAdding(true);
|
|
5310
5196
|
setPhase("intro");
|
|
@@ -5337,6 +5223,7 @@ var SUCCESS = "var(--mieweb-success, hsl(142.1 76.2% 36.3%))";
|
|
|
5337
5223
|
var ozA2 = (pct) => `color-mix(in srgb, ${OZ2} ${pct}%, transparent)`;
|
|
5338
5224
|
var ozBtn = "bg-ozwell hover:bg-ozwell active:bg-ozwell text-ozwell-foreground hover:brightness-95 active:brightness-90";
|
|
5339
5225
|
function VoiceSetup({
|
|
5226
|
+
voiceprintNamespace,
|
|
5340
5227
|
mode = "enroll",
|
|
5341
5228
|
voiceId,
|
|
5342
5229
|
label,
|
|
@@ -5344,7 +5231,12 @@ function VoiceSetup({
|
|
|
5344
5231
|
onDone,
|
|
5345
5232
|
onCancel
|
|
5346
5233
|
}) {
|
|
5347
|
-
const oz = useVoiceSetup({
|
|
5234
|
+
const oz = useVoiceSetup({
|
|
5235
|
+
startAdding: mode === "add",
|
|
5236
|
+
voiceId,
|
|
5237
|
+
label,
|
|
5238
|
+
voiceprintNamespace
|
|
5239
|
+
});
|
|
5348
5240
|
const { phase, phrase, step, total, adding, level, ready, error } = oz;
|
|
5349
5241
|
const octoScale = 1 + Math.min(0.32, level * 2.2);
|
|
5350
5242
|
const glowOpacity = 0.35 + Math.min(0.6, level * 4);
|
|
@@ -5555,8 +5447,11 @@ function VoiceSetup({
|
|
|
5555
5447
|
var OZ3 = "var(--mieweb-ozwell, #0BA0E0)";
|
|
5556
5448
|
var ozBtn2 = "bg-ozwell hover:bg-ozwell active:bg-ozwell text-ozwell-foreground hover:brightness-95 active:brightness-90";
|
|
5557
5449
|
var dangerOutline = "border-destructive text-destructive hover:bg-destructive/10 hover:text-destructive";
|
|
5558
|
-
function VoiceManager({
|
|
5559
|
-
|
|
5450
|
+
function VoiceManager({
|
|
5451
|
+
logoSrc,
|
|
5452
|
+
voiceprintNamespace
|
|
5453
|
+
}) {
|
|
5454
|
+
const sv = useSpeakerVerify({ voiceprintNamespace });
|
|
5560
5455
|
const [inSetup, setInSetup] = React13.useState(null);
|
|
5561
5456
|
const [, setTick] = React13.useState(0);
|
|
5562
5457
|
const [addName, setAddName] = React13.useState("");
|
|
@@ -5568,6 +5463,7 @@ function VoiceManager({ logoSrc }) {
|
|
|
5568
5463
|
return /* @__PURE__ */ jsx(
|
|
5569
5464
|
VoiceSetup,
|
|
5570
5465
|
{
|
|
5466
|
+
voiceprintNamespace,
|
|
5571
5467
|
mode: inSetup.mode,
|
|
5572
5468
|
voiceId: inSetup.voiceId,
|
|
5573
5469
|
label: inSetup.label,
|
|
@@ -5599,7 +5495,7 @@ function VoiceManager({ logoSrc }) {
|
|
|
5599
5495
|
};
|
|
5600
5496
|
const clearAll = () => {
|
|
5601
5497
|
sv.clear();
|
|
5602
|
-
void clearWhatPrints();
|
|
5498
|
+
void clearWhatPrints(voiceprintNamespace);
|
|
5603
5499
|
setTick((t) => t + 1);
|
|
5604
5500
|
};
|
|
5605
5501
|
return /* @__PURE__ */ jsxs("div", { className: "bg-background text-foreground flex min-h-full flex-col items-center justify-center p-6 text-center", children: [
|
|
@@ -5749,6 +5645,7 @@ function VoiceManager({ logoSrc }) {
|
|
|
5749
5645
|
] });
|
|
5750
5646
|
}
|
|
5751
5647
|
function HandsFreeChat({
|
|
5648
|
+
voiceprintNamespace,
|
|
5752
5649
|
title = "Ozwell Assistant \u2014 hands-free",
|
|
5753
5650
|
suggestions,
|
|
5754
5651
|
userName,
|
|
@@ -5761,6 +5658,7 @@ function HandsFreeChat({
|
|
|
5761
5658
|
autoDictateOnWake = true
|
|
5762
5659
|
}) {
|
|
5763
5660
|
const oz = useHeyOzwell({
|
|
5661
|
+
voiceprintNamespace,
|
|
5764
5662
|
autoStart: true,
|
|
5765
5663
|
// always listening while mounted
|
|
5766
5664
|
autoDictateOnWake,
|
|
@@ -5839,7 +5737,13 @@ function HandsFreeChat({
|
|
|
5839
5737
|
/* @__PURE__ */ jsx(ModalTitle, { children: "Your voice" }),
|
|
5840
5738
|
/* @__PURE__ */ jsx(ModalClose, {})
|
|
5841
5739
|
] }),
|
|
5842
|
-
/* @__PURE__ */ jsx(ModalBody, { children: /* @__PURE__ */ jsx(
|
|
5740
|
+
/* @__PURE__ */ jsx(ModalBody, { children: /* @__PURE__ */ jsx(
|
|
5741
|
+
VoiceManager,
|
|
5742
|
+
{
|
|
5743
|
+
logoSrc,
|
|
5744
|
+
voiceprintNamespace
|
|
5745
|
+
}
|
|
5746
|
+
) })
|
|
5843
5747
|
] })
|
|
5844
5748
|
] });
|
|
5845
5749
|
}
|
|
@@ -40808,86 +40712,149 @@ function SidebarNavGroup({
|
|
|
40808
40712
|
children,
|
|
40809
40713
|
defaultExpanded = false,
|
|
40810
40714
|
groupId,
|
|
40811
|
-
className
|
|
40715
|
+
className,
|
|
40716
|
+
forceMount
|
|
40812
40717
|
}) {
|
|
40813
40718
|
const { isCollapsed, isMobileViewport, expandedGroup, toggleGroup } = useSidebar();
|
|
40814
40719
|
const showCollapsed = !isMobileViewport && isCollapsed;
|
|
40720
|
+
const prefersReducedMotion = usePrefersReducedMotion();
|
|
40721
|
+
const contentId = useId();
|
|
40722
|
+
const groupRef = useRef(null);
|
|
40723
|
+
const triggerRef = useRef(null);
|
|
40815
40724
|
const isExpanded = groupId ? expandedGroup === groupId : defaultExpanded;
|
|
40816
40725
|
const [localExpanded, setLocalExpanded] = useState(defaultExpanded);
|
|
40817
40726
|
const effectiveExpanded = groupId ? isExpanded : localExpanded;
|
|
40727
|
+
const itemsVisible = !showCollapsed && effectiveExpanded;
|
|
40728
|
+
const focusWasInsideRef = useRef(false);
|
|
40729
|
+
const captureFocusInside = useCallback(() => {
|
|
40730
|
+
const active = document.activeElement;
|
|
40731
|
+
focusWasInsideRef.current = active !== triggerRef.current && groupRef.current?.contains(active) === true;
|
|
40732
|
+
}, []);
|
|
40733
|
+
useEffect(() => {
|
|
40734
|
+
if (!itemsVisible) return;
|
|
40735
|
+
function trackFocus(event) {
|
|
40736
|
+
const target = event.target;
|
|
40737
|
+
focusWasInsideRef.current = target !== triggerRef.current && groupRef.current?.contains(target) === true;
|
|
40738
|
+
}
|
|
40739
|
+
document.addEventListener("focusin", trackFocus);
|
|
40740
|
+
return () => document.removeEventListener("focusin", trackFocus);
|
|
40741
|
+
}, [itemsVisible]);
|
|
40742
|
+
useEffect(() => {
|
|
40743
|
+
if (itemsVisible) return;
|
|
40744
|
+
if (focusWasInsideRef.current) {
|
|
40745
|
+
focusWasInsideRef.current = false;
|
|
40746
|
+
triggerRef.current?.focus();
|
|
40747
|
+
}
|
|
40748
|
+
}, [itemsVisible]);
|
|
40818
40749
|
const handleToggle = useCallback(() => {
|
|
40750
|
+
captureFocusInside();
|
|
40819
40751
|
if (groupId) {
|
|
40820
40752
|
toggleGroup(groupId);
|
|
40821
40753
|
} else {
|
|
40822
40754
|
setLocalExpanded((prev) => !prev);
|
|
40823
40755
|
}
|
|
40824
|
-
}, [groupId, toggleGroup]);
|
|
40825
|
-
|
|
40826
|
-
|
|
40827
|
-
|
|
40828
|
-
|
|
40829
|
-
|
|
40830
|
-
|
|
40831
|
-
|
|
40832
|
-
|
|
40833
|
-
|
|
40834
|
-
|
|
40835
|
-
|
|
40836
|
-
|
|
40837
|
-
|
|
40838
|
-
|
|
40839
|
-
|
|
40840
|
-
|
|
40841
|
-
"
|
|
40842
|
-
|
|
40843
|
-
|
|
40844
|
-
|
|
40845
|
-
|
|
40846
|
-
|
|
40847
|
-
children: icon
|
|
40848
|
-
}
|
|
40849
|
-
),
|
|
40850
|
-
/* @__PURE__ */ jsxs(AnimatedPresence, { initial: false, children: [
|
|
40851
|
-
!showCollapsed && /* @__PURE__ */ jsx(
|
|
40852
|
-
Animated,
|
|
40853
|
-
{
|
|
40854
|
-
as: "span",
|
|
40855
|
-
preset: "sidebarLabel",
|
|
40856
|
-
mode: "presence",
|
|
40857
|
-
className: "flex-1 truncate text-start",
|
|
40858
|
-
children: label
|
|
40859
|
-
},
|
|
40860
|
-
"label"
|
|
40756
|
+
}, [captureFocusInside, groupId, toggleGroup]);
|
|
40757
|
+
const items = /* @__PURE__ */ jsx("div", { className: "mt-1 ps-2", children });
|
|
40758
|
+
const panelInDom = forceMount || itemsVisible;
|
|
40759
|
+
return /* @__PURE__ */ jsxs(
|
|
40760
|
+
"div",
|
|
40761
|
+
{
|
|
40762
|
+
ref: groupRef,
|
|
40763
|
+
"data-slot": "sidebar-nav-group",
|
|
40764
|
+
className: cn("mb-2", className),
|
|
40765
|
+
children: [
|
|
40766
|
+
/* @__PURE__ */ jsxs(
|
|
40767
|
+
"button",
|
|
40768
|
+
{
|
|
40769
|
+
ref: triggerRef,
|
|
40770
|
+
"data-slot": "sidebar-nav-group-button",
|
|
40771
|
+
onClick: handleToggle,
|
|
40772
|
+
"aria-expanded": itemsVisible,
|
|
40773
|
+
"aria-controls": panelInDom ? contentId : void 0,
|
|
40774
|
+
className: cn(
|
|
40775
|
+
"flex w-full items-center rounded-lg px-3 py-2 text-sm font-semibold",
|
|
40776
|
+
"text-neutral-700 dark:text-neutral-300",
|
|
40777
|
+
"transition-colors hover:bg-neutral-100 dark:hover:bg-neutral-800",
|
|
40778
|
+
showCollapsed && "justify-center"
|
|
40861
40779
|
),
|
|
40862
|
-
|
|
40863
|
-
|
|
40864
|
-
|
|
40865
|
-
|
|
40866
|
-
|
|
40867
|
-
|
|
40868
|
-
|
|
40869
|
-
|
|
40870
|
-
|
|
40780
|
+
title: showCollapsed ? label : void 0,
|
|
40781
|
+
"aria-label": showCollapsed ? label : void 0,
|
|
40782
|
+
children: [
|
|
40783
|
+
icon && /* @__PURE__ */ jsx(
|
|
40784
|
+
"span",
|
|
40785
|
+
{
|
|
40786
|
+
className: cn(
|
|
40787
|
+
"text-muted-foreground h-5 w-5 flex-shrink-0",
|
|
40788
|
+
!showCollapsed && "me-3"
|
|
40789
|
+
),
|
|
40790
|
+
children: icon
|
|
40791
|
+
}
|
|
40792
|
+
),
|
|
40793
|
+
/* @__PURE__ */ jsxs(AnimatedPresence, { initial: false, children: [
|
|
40794
|
+
!showCollapsed && /* @__PURE__ */ jsx(
|
|
40795
|
+
Animated,
|
|
40796
|
+
{
|
|
40797
|
+
as: "span",
|
|
40798
|
+
preset: "sidebarLabel",
|
|
40799
|
+
mode: "presence",
|
|
40800
|
+
className: "flex-1 truncate text-start",
|
|
40801
|
+
children: label
|
|
40802
|
+
},
|
|
40803
|
+
"label"
|
|
40871
40804
|
),
|
|
40872
|
-
|
|
40873
|
-
|
|
40874
|
-
|
|
40875
|
-
|
|
40876
|
-
|
|
40877
|
-
|
|
40878
|
-
|
|
40879
|
-
|
|
40880
|
-
|
|
40881
|
-
|
|
40882
|
-
|
|
40883
|
-
|
|
40884
|
-
|
|
40885
|
-
|
|
40805
|
+
!showCollapsed && /* @__PURE__ */ jsx(
|
|
40806
|
+
Animated,
|
|
40807
|
+
{
|
|
40808
|
+
as: "span",
|
|
40809
|
+
preset: "sidebarLabel",
|
|
40810
|
+
mode: "presence",
|
|
40811
|
+
className: cn(
|
|
40812
|
+
"ms-2 flex-shrink-0 transition-transform duration-200",
|
|
40813
|
+
effectiveExpanded && "rotate-180"
|
|
40814
|
+
),
|
|
40815
|
+
children: /* @__PURE__ */ jsx(ChevronDownIcon4, {})
|
|
40816
|
+
},
|
|
40817
|
+
"chevron"
|
|
40818
|
+
)
|
|
40819
|
+
] })
|
|
40820
|
+
]
|
|
40821
|
+
}
|
|
40886
40822
|
),
|
|
40887
|
-
|
|
40888
|
-
|
|
40889
|
-
|
|
40890
|
-
|
|
40823
|
+
forceMount ? (
|
|
40824
|
+
/*
|
|
40825
|
+
* Deliberately outside the rail-collapsed gate. Gating it there would
|
|
40826
|
+
* unmount the items whenever the sidebar collapsed, destroying exactly
|
|
40827
|
+
* the state this prop exists to preserve — the prop would hold its
|
|
40828
|
+
* promise for the group's own toggle and quietly break it for the
|
|
40829
|
+
* rail's, which is worse than not offering it.
|
|
40830
|
+
*/
|
|
40831
|
+
/* @__PURE__ */ jsx(
|
|
40832
|
+
"div",
|
|
40833
|
+
{
|
|
40834
|
+
id: contentId,
|
|
40835
|
+
"data-slot": "sidebar-nav-group-items",
|
|
40836
|
+
"data-state": itemsVisible ? "open" : "closed",
|
|
40837
|
+
hidden: !itemsVisible,
|
|
40838
|
+
children: items
|
|
40839
|
+
}
|
|
40840
|
+
)
|
|
40841
|
+
) : !showCollapsed && /* @__PURE__ */ jsx(AnimatedPresence, { initial: false, children: effectiveExpanded && /* @__PURE__ */ jsx(
|
|
40842
|
+
Animated,
|
|
40843
|
+
{
|
|
40844
|
+
id: contentId,
|
|
40845
|
+
"data-slot": "sidebar-nav-group-items",
|
|
40846
|
+
"data-state": "open",
|
|
40847
|
+
preset: "collapse",
|
|
40848
|
+
mode: "presence",
|
|
40849
|
+
enabled: !prefersReducedMotion,
|
|
40850
|
+
className: "overflow-hidden",
|
|
40851
|
+
children: items
|
|
40852
|
+
},
|
|
40853
|
+
"items"
|
|
40854
|
+
) })
|
|
40855
|
+
]
|
|
40856
|
+
}
|
|
40857
|
+
);
|
|
40891
40858
|
}
|
|
40892
40859
|
function SidebarNavItem({
|
|
40893
40860
|
label,
|
|
@@ -44442,6 +44409,6 @@ function WebsiteInputGroup({
|
|
|
44442
44409
|
}
|
|
44443
44410
|
WebsiteInputGroup.displayName = "WebsiteInputGroup";
|
|
44444
44411
|
|
|
44445
|
-
export { AIChat, AIChatModal, AIChatTrigger, AIReconciliationPanel, AccessDeniedPage, ActionButton2 as ActionButton, ActionButtonsBar, ActiveFilters, AddContactModal, AddServiceCard, AdditionalFields, Address, AddressCard, AddressCompact, AddressDisplay, AddressForm, AddressInline, AppHeader, AppHeaderActions, AppHeaderBrand, AppHeaderDivider, AppHeaderIconButton, AppHeaderSearch, AppHeaderSection, AppHeaderTitle, AppHeaderUserMenu, Assessment, AuthButtons, AuthDialog, BookAppointmentButton, BookingDialog, BusinessHours, BusinessHoursEditor, ButtonGroup, CHANGE_TYPE_LABELS, CONCERN_STATUS_LABELS, CSVColumnMapper, CSVFileUpload, CardSkeleton, CaseContextBar, CaseManagementHeader, CheckrIntegration, ClaimListingButton, ClaimProviderForm, CodingChips, CommandPalette, CommandPaletteProvider, CommandPaletteTrigger, CompactCookieBanner, CompactFilterBar, CompactHeader, CompactHours, CompactProviderHeader, ConditionEditor, ConnectionStatusBadge, ConnectionStatusBar, ConnectionStatusOverlay, ConsentSwitch, CookieConsentBanner, CopyrightText, CountBadge, CountryDropdown, CreateInvoiceModal, CreateReferralModal, DEFAULT_ERROR_CONFIGS, DEFAULT_LANGUAGES, DEFAULT_RADIUS_OPTIONS, DEFAULT_SOCIAL_PROVIDERS, DOTBadge, DashboardWidget, DashboardWidgetActions, DashboardWidgetDataCards, DashboardWidgetInfo, DashboardWidgetTable, DateRangeFilter, DateRangePicker, DialogOverlay, DisclaimerText, DockablePanel, DocumentDetectionOverlay, DocumentScanner, DropZone, DropzoneOverlay, EditUserRoleModal, EmployeeForm, EmployeeProfileCard, EmployerContactCard, EmployerList, EmployerPricingCard, EmployerServiceModal, EmployerView, ErrorPage, FileManager, FilePreview, FloatingAIChat, FloatingInput, FooterLinkSection, SocialMediaLinks2 as FooterSocialLinks, HRISProviderSelector, HandsFreeChat, HealthSurveillance, HelpSupportPanel, HeroSearchBar, HeyOzwell, HeyOzwellToggle, HoursSummary, ImagingOrderEditor, InlineBookingForm, InventoryManager, InviteUserModal, InvoiceList, InvoicePaymentPage, InvoiceView, LabOrderEditor, LanguageSelector, LanguageSelectorInline, LanguageSelectorNative, LegalLinks, LoadingBar, LoadingDots, LoadingOverlay, LoadingPage, LoadingSkeleton, MODEL_MANIFEST, MaintenancePage, MobileBackButton, MobileMenuButton, MobileMenuPanel, ModelInfoList, NavLinks, NewsletterForm, NotFoundPage, NotificationCenter, ORDER_TYPE_META, ORDER_TYPE_SEARCH_DOMAINS, OfflinePage, OnboardingCompletion, OnboardingStepQuestion, OnboardingWizard, OpenStatusBadge, OrderCard, OrderConfirmation, OrderConfirmationWizard, OrderDetailSidebar, OrderEditor, OrderList, OrderLookupForm, OrderSidebar, OrderSidebarTabs, OzwellChat, OzwellSettingsMenu, PageHeader, PatientHeader, PaymentHistoryTable, PaymentMethodBank, PaymentMethodCard, PaymentMethodList, PendingClaimsTable, PermissionsEditor, PillSelect, PresentingProblems, ProblemList, ProcedureOrderEditor, ProductVersion, ProductVersionBadge, Breadcrumb2 as ProviderBreadcrumb, ProviderCard, ProviderCardGrid, ProviderCardSkeleton, ProviderDetailHeader, ProviderDetailHeaderSkeleton, ProviderLogo2 as ProviderLogo, ProviderOverview, ProviderSearchBar, ProviderSearchFilters, ProviderSelector, ProviderSettings, SocialMediaLinks as ProviderSocialLinks, ProviderUsersTable, QuickBookCard, QuickLinksCard, RELEVANCE_LABELS, RecurringServiceAddCard, RecurringServiceCard, RecurringServiceGrid, RecurringServiceSetupModal, ReferralEditor, RejectionModal, ReportDashboard, ReportDatePicker, ReportLink, ReportTimeRange, ResultsEntryCard, ResultsEntryForm, ResultsEntryModal, SSOConfigForm, ScheduleCalendar, SearchResultsMessage, SelectedServicesBadges, ServerErrorPage, ServiceAccordion, ServiceBadge, ServiceBadgeGroup, ServiceCard, ServiceCategoryBadge, ServiceGeneralSettings, ServiceGrid, ServiceLink, ServiceList, ServiceMultiSelect, ServicePicker, ServicePricingManager, ServiceSelect, ServiceShippingSettings, ServiceTagCloud, ServiceTagCloudBadges, SetupServiceModal, Sidebar, SidebarContent, SidebarFooter, SidebarHeader, SidebarMobileToggle, SidebarNav, SidebarNavGroup, SidebarNavItem, SidebarProvider, SidebarSearch, SidebarToggle, SimpleFooter, SiteFooter, SiteHeader, SiteLogo, StepIndicator, StripeBadge, StripeSecureBadge, SuggestedActions, TableOfContents, TimelineEventList, TimelineProgress, Toast, ToastContainer, ToastProvider, UncertaintyBadge, UpdateAvailableOverlay, UserMenu, VerifiedBadge2 as VerifiedBadge, VisitScribe, VoiceManager, VoiceSetup, WEBSITE_TYPES, WebChartReportViewer, WebcamModal, WebsiteInput, WebsiteInputGroup, askOzwell, askOzwellStream, attributeSegments, calculateDateRange, centroid, chime,
|
|
44412
|
+
export { AIChat, AIChatModal, AIChatTrigger, AIReconciliationPanel, AccessDeniedPage, ActionButton2 as ActionButton, ActionButtonsBar, ActiveFilters, AddContactModal, AddServiceCard, AdditionalFields, Address, AddressCard, AddressCompact, AddressDisplay, AddressForm, AddressInline, AppHeader, AppHeaderActions, AppHeaderBrand, AppHeaderDivider, AppHeaderIconButton, AppHeaderSearch, AppHeaderSection, AppHeaderTitle, AppHeaderUserMenu, Assessment, AuthButtons, AuthDialog, BookAppointmentButton, BookingDialog, BusinessHours, BusinessHoursEditor, ButtonGroup, CHANGE_TYPE_LABELS, CONCERN_STATUS_LABELS, CSVColumnMapper, CSVFileUpload, CardSkeleton, CaseContextBar, CaseManagementHeader, CheckrIntegration, ClaimListingButton, ClaimProviderForm, CodingChips, CommandPalette, CommandPaletteProvider, CommandPaletteTrigger, CompactCookieBanner, CompactFilterBar, CompactHeader, CompactHours, CompactProviderHeader, ConditionEditor, ConnectionStatusBadge, ConnectionStatusBar, ConnectionStatusOverlay, ConsentSwitch, CookieConsentBanner, CopyrightText, CountBadge, CountryDropdown, CreateInvoiceModal, CreateReferralModal, DEFAULT_ERROR_CONFIGS, DEFAULT_LANGUAGES, DEFAULT_RADIUS_OPTIONS, DEFAULT_SOCIAL_PROVIDERS, DOTBadge, DashboardWidget, DashboardWidgetActions, DashboardWidgetDataCards, DashboardWidgetInfo, DashboardWidgetTable, DateRangeFilter, DateRangePicker, DialogOverlay, DisclaimerText, DockablePanel, DocumentDetectionOverlay, DocumentScanner, DropZone, DropzoneOverlay, EditUserRoleModal, EmployeeForm, EmployeeProfileCard, EmployerContactCard, EmployerList, EmployerPricingCard, EmployerServiceModal, EmployerView, ErrorPage, FileManager, FilePreview, FloatingAIChat, FloatingInput, FooterLinkSection, SocialMediaLinks2 as FooterSocialLinks, HRISProviderSelector, HandsFreeChat, HealthSurveillance, HelpSupportPanel, HeroSearchBar, HeyOzwell, HeyOzwellToggle, HoursSummary, ImagingOrderEditor, InlineBookingForm, InventoryManager, InviteUserModal, InvoiceList, InvoicePaymentPage, InvoiceView, LabOrderEditor, LanguageSelector, LanguageSelectorInline, LanguageSelectorNative, LegalLinks, LoadingBar, LoadingDots, LoadingOverlay, LoadingPage, LoadingSkeleton, MODEL_MANIFEST, MaintenancePage, MobileBackButton, MobileMenuButton, MobileMenuPanel, ModelInfoList, NavLinks, NewsletterForm, NotFoundPage, NotificationCenter, ORDER_TYPE_META, ORDER_TYPE_SEARCH_DOMAINS, OfflinePage, OnboardingCompletion, OnboardingStepQuestion, OnboardingWizard, OpenStatusBadge, OrderCard, OrderConfirmation, OrderConfirmationWizard, OrderDetailSidebar, OrderEditor, OrderList, OrderLookupForm, OrderSidebar, OrderSidebarTabs, OzwellChat, OzwellSettingsMenu, PageHeader, PatientHeader, PaymentHistoryTable, PaymentMethodBank, PaymentMethodCard, PaymentMethodList, PendingClaimsTable, PermissionsEditor, PillSelect, PresentingProblems, ProblemList, ProcedureOrderEditor, ProductVersion, ProductVersionBadge, Breadcrumb2 as ProviderBreadcrumb, ProviderCard, ProviderCardGrid, ProviderCardSkeleton, ProviderDetailHeader, ProviderDetailHeaderSkeleton, ProviderLogo2 as ProviderLogo, ProviderOverview, ProviderSearchBar, ProviderSearchFilters, ProviderSelector, ProviderSettings, SocialMediaLinks as ProviderSocialLinks, ProviderUsersTable, QuickBookCard, QuickLinksCard, RELEVANCE_LABELS, RecurringServiceAddCard, RecurringServiceCard, RecurringServiceGrid, RecurringServiceSetupModal, ReferralEditor, RejectionModal, ReportDashboard, ReportDatePicker, ReportLink, ReportTimeRange, ResultsEntryCard, ResultsEntryForm, ResultsEntryModal, SSOConfigForm, ScheduleCalendar, SearchResultsMessage, SelectedServicesBadges, ServerErrorPage, ServiceAccordion, ServiceBadge, ServiceBadgeGroup, ServiceCard, ServiceCategoryBadge, ServiceGeneralSettings, ServiceGrid, ServiceLink, ServiceList, ServiceMultiSelect, ServicePicker, ServicePricingManager, ServiceSelect, ServiceShippingSettings, ServiceTagCloud, ServiceTagCloudBadges, SetupServiceModal, Sidebar, SidebarContent, SidebarFooter, SidebarHeader, SidebarMobileToggle, SidebarNav, SidebarNavGroup, SidebarNavItem, SidebarProvider, SidebarSearch, SidebarToggle, SimpleFooter, SiteFooter, SiteHeader, SiteLogo, StepIndicator, StripeBadge, StripeSecureBadge, SuggestedActions, TableOfContents, TimelineEventList, TimelineProgress, Toast, ToastContainer, ToastProvider, UncertaintyBadge, UpdateAvailableOverlay, UserMenu, VerifiedBadge2 as VerifiedBadge, VisitScribe, VoiceManager, VoiceSetup, WEBSITE_TYPES, WebChartReportViewer, WebcamModal, WebsiteInput, WebsiteInputGroup, askOzwell, askOzwellStream, attributeSegments, calculateDateRange, centroid, chime, clusterEmbeddings, concernGroupKey, concernHistoryContent, cosine, countBadgeVariants, countChipVariants, create24HourSchedule, createDefaultSchedule, createWeekdaySchedule, currentAssertion, decodeTo16kMono, defaultCaseManagementHeaderLabels, defaultOrderTabs, defaultReconciliationIsEqual, endsWithDone, formatAddressLines, formatAddressSingleLine, formatCityState, formatCityStateZip, generateId, getDefaultPresets, getDictationLoad, getExtendedPresets, getGoogleMapsSearchUrl, getGoogleMapsUrl, getOzwellConfig, getWakeWarm, inferSpeakerRoles, isConditionCodetype, isOzwellConfigured, isValidUrl, isWhisperLoaded, labelClusters, medicationToOrder, mergeTurns, normalizeConditionCodingSystem, openRollingRecorder, orderToMedication, orderTypeForCodetype, panelVariants as reconciliationPanelVariants, stripStopPhrase, subscribeDictationLoad, subscribeWakeWarm, toOzwellMessages, transcribeBlob, transcribeGate, transcribeSamples, transcribeSegments, transcribeServer, trimTrailingStopPhrase, useCamera, useCommandPalette, useConnectionStatus, useCookieConsent, useDiarization, useDocumentDetection, useDropzone, useFileUpload, useHeyOzwell, useOptionalToast, useSidebar, useSpeakerVerify, useToast, useVisitScribe, useVoiceSetup, useWakeWord, warmStopGate, warmWakeModels, warmWhisper, widgetVariants };
|
|
44446
44413
|
//# sourceMappingURL=index.js.map
|
|
44447
44414
|
//# sourceMappingURL=index.js.map
|